ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGNjZDRmOWYuLmQwODgwMDggMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMjU5OCw2ICsyNTk4LDkgQEAKIFM6IFByYWd1ZSA4CiBTOiAxODIgMDAgQ3plY2ggUmVwdWJsaWMKIAorTjogUmljayBQYXluZQorRDogUkZDMjM4NSBTdXBwb3J0IGZvciBUQ1AKKwogTjogQmFyYWsgQS4gUGVhcmxtdXR0ZXIKIEU6IGJhcEBjcy51bm0uZWR1CiBXOiBodHRwOi8vd3d3LmNzLnVubS5lZHUvfmJhcC8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IDAyNDU3ZWMuLmYwOGNhOTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMTA0LDggKzEwNCw2IEBACiAJLSByZXF1ZXN0X2Zpcm13YXJlKCkgaG90cGx1ZyBpbnRlcmZhY2UgaW5mby4KIGZsb3BweS50eHQKIAktIG5vdGVzIGFuZCBkcml2ZXIgb3B0aW9ucyBmb3IgdGhlIGZsb3BweSBkaXNrIGRyaXZlci4KLWZ0YXBlLnR4dAotCS0gbm90ZXMgYWJvdXQgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIuCiBoYXllcy1lc3AudHh0CiAJLSBpbmZvIG9uIHVzaW5nIHRoZSBIYXllcyBFU1Agc2VyaWFsIGRyaXZlci4KIGhpZ2h1aWQudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggZDUyYzRhYS4uMjI2ZWNmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtNzAsMTggKzcwLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CWlwX3F1ZXVlIGFuZCBpcDZfcXVldWUgKG9sZCBpcHY0LW9ubHkgYW5kIGlwdjYtb25seSBuZXRmaWx0ZXIgcXVldWUpCi1XaGVuOglEZWNlbWJlciAyMDA1Ci1XaHk6CVRoaXMgaW50ZXJmYWNlIGhhcyBiZWVuIG9ic29sZXRlZCBieSB0aGUgbmV3IGxheWVyMy1pbmRlcGVuZGVudAotCSJuZm5ldGxpbmtfcXVldWUiLiAgVGhlIEtlcm5lbCBpbnRlcmZhY2UgaXMgY29tcGF0aWJsZSwgc28gdGhlIG9sZAotCWlwWzZddGFibGVzICJRVUVVRSIgdGFyZ2V0cyBzdGlsbCB3b3JrIGFuZCB3aWxsIHRyYW5zcGFyZW50bHkgaGFuZGxlCi0JYWxsIHBhY2tldHMgaW50byBuZm5ldGxpbmsgcXVldWUgbnVtYmVyIDAuICBVc2Vyc3BhY2UgdXNlcnMgd2lsbCBoYXZlCi0JdG8gbGluayBhZ2FpbnN0IEFQSS1jb21wYXRpYmxlIGxpYnJhcnkgb24gdG9wIG9mIGxpYm5mbmV0bGlua19xdWV1ZSAKLQlpbnN0ZWFkIG9mIHRoZSBjdXJyZW50ICdsaWJpcHEnLgotV2hvOglIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CXJlbW92ZSBFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpCiBXaGVuOglBdWd1c3QgMjAwNgogRmlsZXM6CWFyY2gvKi9rZXJuZWwvKl9rc3ltcy5jCkBAIC0yMjcsMjEgKzIxNSw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglmcmFtZSBkaXZlcnRlcgotV2hlbjoJTm92ZW1iZXIgMjAwNgotV2h5OglUaGUgZnJhbWUgZGl2ZXJ0ZXIgaXMgaW5jbHVkZWQgaW4gbW9zdCBkaXN0cmlidXRpb24ga2VybmVscywgYnV0IGlzCi0JYnJva2VuLiBJdCBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlIG1hbnkgdGhpbmdzOgotCS0gSVBWNgotCS0gbm9uLWxpbmVhciBza2IncwotCS0gbmV0d29yayBkZXZpY2UgUkNVIG9uIHJlbW92YWwKLQktIGlucHV0IGZyYW1lcyBub3QgY29ycmVjdGx5IGNoZWNrZWQgZm9yIHByb3RvY29sIGVycm9ycwotCUl0IGFsc28gYWRkcyBhbGxvY2F0aW9uIG92ZXJoZWFkIGV2ZW4gaWYgbm90IGVuYWJsZWQuCi0JSXQgaXMgbm90IGNsZWFyIGlmIGFueW9uZSBpcyBzdGlsbCB1c2luZyBpdC4KLVdobzoJU3RlcGhlbiBIZW1taW5nZXIgPHNoZW1taW5nZXJAb3NkbC5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KIFdoYXQ6CVBIWVNERVZQQVRILCBQSFlTREVWQlVTLCBQSFlTREVWRFJJVkVSIGluIHRoZSB1ZXZlbnQgZW52aXJvbm1lbnQKIFdoZW46CU9jdG9iZXIgMjAwOAogV2h5OglUaGUgc3RhY2tpbmcgb2YgY2xhc3MgZGV2aWNlcyBtYWtlcyB0aGVzZSB2YWx1ZXMgbWlzbGVhZGluZyBhbmQKQEAgLTI2MSwxMCArMjM0LDExIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglmdGFwZQotV2hlbjoJMi42LjIwCi1XaHk6CU9ycGhhbmVkIGZvciBhZ2VzLiAgU01QIGJ1Z3MgbG9uZyB1bmZpeGVkLiAgRmV3IHVzZXJzIGxlZnQKLQlpbiB0aGUgd29ybGQuCi1XaG86CUplZmYgR2FyemlrIDxqZWZmQGdhcnppay5vcmc+CitXaGF0OglJUHY0IG9ubHkgY29ubmVjdGlvbiB0cmFja2luZy9OQVQvaGVscGVycworV2hlbjoJMi42LjIyCitXaHk6CVRoZSBuZXcgbGF5ZXIgMyBpbmRlcGVuZGFudCBjb25uZWN0aW9uIHRyYWNraW5nIHJlcGxhY2VzIHRoZSBvbGQKKwlJUHY0IG9ubHkgdmVyc2lvbi4gQWZ0ZXIgc29tZSBzdGFiaWxpemF0aW9uIG9mIHRoZSBuZXcgY29kZSB0aGUKKwlvbGQgb25lIHdpbGwgYmUgcmVtb3ZlZC4KK1dobzoJUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mdGFwZS50eHQgYi9Eb2N1bWVudGF0aW9uL2Z0YXBlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q4YmIzMy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2Z0YXBlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi1JbnRybwotPT09PT0KLQotVGhpcyBmaWxlIGRlc2NyaWJlcyBzb21lIGlzc3VlcyBpbnZvbHZlZCB3aGVuIHVzaW5nIHRoZSAiZnRhcGUiCi1mbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyIHRoYXQgY29tZXMgd2l0aCB0aGUgTGludXgga2VybmVsLgotCi1mdGFwZSBoYXMgYSBob21lIHBhZ2UgYXQKLQotaHR0cDovL2Z0YXBlLmRvdC1oZWluZS5kZS8KLQotd2hpY2ggY29udGFpbnMgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBmdGFwZS4gUGxlYXNlIGNyb3NzIGNoZWNrCi10aGlzIFdXVyBhZGRyZXNzIGFnYWluc3QgdGhlIGFkZHJlc3MgZ2l2ZW4gKGlmIGFueSkgaW4gdGhlIE1BSU5UQUlORVJTCi1maWxlIGxvY2F0ZWQgaW4gdGhlIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UKLXRyZWUuCi0KLU5PVEU6IFRoaXMgaXMgYW4gdW5tYWludGFpbmVkIHNldCBvZiBkcml2ZXJzLCBhbmQgaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gd29yay4KLUlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB0YWtpbmcgb3ZlciBtYWludGVuYW5jZSwgY29udGFjdCBDbGF1cy1KdXN0dXMgSGVpbmUKLTxjaEBkb3QtaGVpbmUuZGU+LCB0aGUgZm9ybWVyIG1haW50YWluZXIuCi0KLUNvbnRlbnRzCi09PT09PT09PQotCi1BIG1pbnVzIDE6IEZ0YXBlIGRvY3VtZW50YXRpb24KLQotQS4gQ2hhbmdlcwotICAgMS4gR29hbAotICAgMi4gSS9PIEJsb2NrIFNpemUKLSAgIDMuIFdyaXRlIEFjY2VzcyB3aGVuIG5vdCBhdCBFT0QgKEVuZCBPZiBEYXRhKSBvciBCT1QgKEJlZ2luIE9mIFRhcGUpCi0gICA0LiBGb3JtYXR0aW5nCi0gICA1LiBJbnRlcmNoYW5naW5nIGNhcnRyaWRnZXMgd2l0aCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcwotCi1CLiBEZWJ1Z2dpbmcgT3V0cHV0Ci0gICAxLiBJbnRyb2R1Y3Rpb24KLSAgIDIuIFR1bmluZyB0aGUgZGVidWdnaW5nIG91dHB1dAotCi1DLiBCb290IGFuZCBsb2FkIHRpbWUgY29uZmlndXJhdGlvbgotICAgMS4gU2V0dGluZyBib290IHRpbWUgcGFyYW1ldGVycwotICAgMi4gTW9kdWxlIGxvYWQgdGltZSBwYXJhbWV0ZXJzCi0gICAzLiBGdGFwZSBib290LSBhbmQgbG9hZCB0aW1lIG9wdGlvbnMKLSAgIDQuIEV4YW1wbGUga2VybmVsIHBhcmFtZXRlciBzZXR0aW5nCi0gICA1LiBFeGFtcGxlIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGluZwotCi1ELiBTdXBwb3J0IGFuZCBjb250YWN0cwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUEgbWludXMgMS4gRnRhcGUgZG9jdW1lbnRhdGlvbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVVubHVja2lseSwgdGhlIGZ0YXBlLUhPV1RPIGlzIG91dCBvZiBkYXRlLiBUaGlzIHJlYWxseSBuZWVkcyB0byBiZQotY2hhbmdlZC4gVXAgdG8gZGF0ZSBkb2N1bWVudGF0aW9uIGFzIHdlbGwgYXMgcmVjZW50IGRldmVsb3BtZW50Ci12ZXJzaW9ucyBvZiBmdGFwZSBhbmQgdXNlZnVsIGxpbmtzIHRvIHJlbGF0ZWQgdG9waWNzIGNhbiBiZSBmb3VuZCBhdAotdGhlIGZ0YXBlIGhvbWUgcGFnZSBhdAotCi1odHRwOi8vZnRhcGUuZG90LWhlaW5lLmRlLwotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUEuIENoYW5nZXMKLT09PT09PT09PT0KLQotMS4gR29hbAotICAgfn5+fgotICAgVGhlIGdvYWwgb2YgYWxsIHRoYXQgaW5jb21wYXRpYmlsaXRpZXMgd2FzIHRvIGdpdmUgZnRhcGUgYW4gaW50ZXJmYWNlCi0gICB0aGF0IHJlc2VtYmxlcyB0aGUgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IFNDU0kgdGFwZSBkcml2ZXMgYXMgY2xvc2UKLSAgIGFzIHBvc3NpYmxlLiBUaHVzIGFueSBVbml4IGJhY2t1cCBwcm9ncmFtIHRoYXQgaXMga25vd24gdG8gd29yawotICAgd2l0aCBTQ1NJIHRhcGUgZHJpdmVzIHNob3VsZCBhbHNvIHdvcmsuCi0KLSAgIFRoZSBjb25jZXB0IG9mIGEgZml4ZWQgYmxvY2sgc2l6ZSBmb3IgcmVhZC93cml0ZSB0cmFuc2ZlcnMgaXMKLSAgIHJhdGhlciB1bnJlbGF0ZWQgdG8gdGhpcyBTQ1NJIHRhcGUgY29tcGF0aWJpbGl0eSBhdCB0aGUgZmlsZSBzeXN0ZW0KLSAgIGludGVyZmFjZSBsZXZlbC4gSXQgZGV2ZWxvcGVkIG91dCBvZiBhIGZlYXR1cmUgb2YgemZ0YXBlLCBhCi0gICBibG9jayB3aXNlIHVzZXIgdHJhbnNwYXJlbnQgb24tdGhlLWZseSBjb21wcmVzc2lvbi4gVGhhdCBjb21wcmVzc2lvbgotICAgc3VwcG9ydCB3aWxsIG5vdCBiZSBkcm9wcGVkIGluIGZ1dHVyZSByZWxlYXNlcyBmb3IgY29tcGF0aWJpbGl0eQotICAgcmVhc29ucyB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIG9mIHpmdGFwZS4KLQotMi4gSS9PIEJsb2NrIFNpemUKLSAgIH5+fn5+fn5+fn5+fn5+Ci0gICBUaGUgYmxvY2sgc2l6ZSBkZWZhdWx0cyB0byAxMGsgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBvZgotICAgR05VIHRhci4KLQotICAgVGhlIGJsb2NrIHNpemUgY2FuIGJlIHR1bmVkIGVpdGhlciBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3IKLSAgIGF0IHJ1bnRpbWUgd2l0aCB0aGUgTVRJT0NUT1AgaW9jdGwgdXNpbmcgdGhlIE1UU0VUQkxLIG9wZXJhdGlvbgotICAgKGkuZS4gZG8gIm10IC1mIC9kZXYvcWZ0MCIgc2V0YmxrICNCTEtTWikuIEEgYmxvY2sgc2l6ZSBvZiAwCi0gICBzd2l0Y2hlcyB0byB2YXJpYWJsZSBibG9jayBzaXplIG1vZGUgaS5lLiAibXQgc2V0YmxrIDAiIHN3aXRjaGVzCi0gICBvZmYgdGhlIGJsb2NrIHNpemUgcmVzdHJpY3Rpb24uIEhvd2V2ZXIsIHRoaXMgZGlzYWJsZXMgemZ0YXBlJ3MKLSAgIGJ1aWx0IGluIG9uLXRoZS1mbHkgY29tcHJlc3Npb24gd2hpY2ggZG9lc24ndCB3b3JrIHdpdGggdmFyaWFibGUKLSAgIGJsb2NrIHNpemUgbW9kZS4KLQotICAgVGhlIEJMS1NaIHBhcmFtZXRlciBtdXN0IGJlIGdpdmVuIGFzIGEgYnl0ZSBjb3VudCBhbmQgbXVzdCBiZSBhCi0gICBtdWx0aXBsZSBvZiAzMmsgb3IgMCwgaS5lLiB1c2UgIm10IHNldGJsayAzMjc2OCIgdG8gc3dpdGNoIHRvIGEKLSAgIGJsb2NrIHNpemUgb2YgMzJrLgotCi0gICBUaGUgdHlwaWNhbCBzeW1wdG9tIG9mIGEgYmxvY2sgc2l6ZSBtaXNtYXRjaCBpcyBhbiAiaW52YWxpZAotICAgYXJndW1lbnQiIGVycm9yIG1lc3NhZ2UuCi0KLTMuIFdyaXRlIEFjY2VzcyB3aGVuIG5vdCBhdCBFT0QgKEVuZCBPZiBEYXRhKSBvciBCT1QgKEJlZ2luIE9mIFRhcGUpCi0gICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgemZ0YXBlICh0aGUgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlIG9mIGZ0YXBlLTMueCkgZGVuaWVzIHdyaXRlIGFjY2VzcwotICAgdG8gdGhlIHRhcGUgY2FydHJpZGdlIHdoZW4gaXQgaXNuJ3QgcG9zaXRpb25lZCBlaXRoZXIgYXQgQk9UIG9yCi0gICBFT0QuCi0KLTQuIEZvcm1hdHRpbmcKLSAgIH5+fn5+fn5+fn4KLSAgIGZ0YXBlIERPRVMgc3VwcG9ydCBmb3JtYXR0aW5nIG9mIGZsb3BweSB0YXBlIGNhcnRyaWRnZXMuIFlvdSBuZWVkIHRoZQotICAgYGZ0Zm9ybWF0JyBwcm9ncmFtIHRoYXQgaXMgc2hpcHBlZCB3aXRoIHRoZSBtb2R1bGVzIHZlcnNpb24gb2YgZnRhcGUuCi0gICBQbGVhc2UgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBmdGFwZSBmcm9tCi0KLSAgIGZ0cDovL3N1bnNpdGUudW5jLmVkdS9wdWIvTGludXgva2VybmVsL3RhcGVzCi0KLSAgIG9yIGZyb20gdGhlIGZ0YXBlIGhvbWUgcGFnZSBhdAotCi0gICBodHRwOi8vZnRhcGUuZG90LWhlaW5lLmRlLwotCi0gICBgZnRmb3JtYXQnIGlzIGNvbnRhaW5lZCBpbiB0aGUgYC4vY29udHJpYi8nIHN1YmRpcmVjdG9yeSBvZiB0aGF0Ci0gICBzZXBhcmF0ZSBmdGFwZSBwYWNrYWdlLgotCi01LiBJbnRlcmNoYW5naW5nIGNhcnRyaWRnZXMgd2l0aCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcwotICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLQotICAgVGhlIGludGVybmFsIGVtdWxhdGlvbiBvZiBVbml4IHRhcGUgZGV2aWNlIGZpbGUgbWFya3MgaGFzIGNoYW5nZWQKLSAgIGNvbXBsZXRlbHkuIGZ0YXBlIG5vdyB1c2VzIHRoZSB2b2x1bWUgdGFibGUgc2VnbWVudCBhcyBzcGVjaWZpZWQKLSAgIGJ5IHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwLzExMyBzdGFuZGFyZHMgdG8gZW11bGF0ZSBmaWxlIG1hcmtzLiBBcwotICAgYSBjb25zZXF1ZW5jZSB0aGVyZSBpcyBsaW1pdGVkIHN1cHBvcnQgdG8gaW50ZXJjaGFuZ2UgY2FydHJpZGdlcwotICAgd2l0aCBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KLQotICAgVG8gYmUgbW9yZSBwcmVjaXNlOiBmdGFwZSB3aWxsIGRldGVjdCB2b2x1bWVzIHdyaXR0ZW4gYnkgb3RoZXIgT1MncwotICAgcHJvZ3JhbXMgYW5kIG90aGVyIE9TJ3MgcHJvZ3JhbXMgd2lsbCBkZXRlY3Qgdm9sdW1lcyB3cml0dGVuIGJ5Ci0gICBmdGFwZS4KLQotICAgSG93ZXZlciwgaXQgaXNuJ3QgcG9zc2libGUgdG8gZXh0cmFjdCB0aGUgZGF0YSBkdW1wZWQgdG8gdGhlIHRhcGUKLSAgIGJ5IHNvbWUgTVNET1MgcHJvZ3JhbSB3aXRoIGZ0YXBlLiBUaGlzIGV4Y2VlZHMgdGhlIHNjb3BlIG9mIGEKLSAgIGtlcm5lbCBkZXZpY2UgZHJpdmVyLiBJZiB5b3UgbmVlZCBzdWNoIGZ1bmN0aW9uYWxpdHksIHRoZW4gZ28gYWhlYWQKLSAgIGFuZCB3cml0ZSBhIHVzZXIgc3BhY2UgdXRpbGl0eSB0aGF0IGlzIGFibGUgdG8gZG8gdGhhdC4gZnRhcGUgYWxyZWFkeQotICAgcHJvdmlkZXMgYWxsIGtlcm5lbCBsZXZlbCBzdXBwb3J0IG5lY2Vzc2FyeSB0byBkbyB0aGF0LgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUIuIERlYnVnZ2luZyBPdXRwdXQKLSAgID09PT09PT09PT09PT09PT0KLQotMS4gSW50cm9kdWN0aW9uCi0gICB+fn5+fn5+fn5+fn4KLSAgIFRoZSBmdGFwZSBkcml2ZXIgY2FuIGJlIHZlcnkgbm9pc3kgaW4gdGhhdCBpcyBjYW4gcHJpbnQgbG90cyBvZgotICAgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHRoZSBrZXJuZWwgbG9nIGZpbGVzIGFuZCB0aGUgc3lzdGVtIGNvbnNvbGUuCi0gICBXaGlsZSB0aGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGl0IG1pZ2h0IGJlIGFubm95aW5nIGR1cmluZwotICAgbm9ybWFsIHVzZSBhbmQgZW5sYXJnZXMgdGhlIHNpemUgb2YgdGhlIGRyaXZlciBieSBzZXZlcmFsIGtpbG9ieXRlcy4KLQotICAgVG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBkcml2ZXIgeW91IGNhbiB0cmltIHRoZSBtYXhpbWFsIGFtb3VudCBvZgotICAgZGVidWdnaW5nIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBkdXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24uIFBsZWFzZQotICAgcmVmZXIgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHNjcmlwdCBhbmQgaXRzIG9uLWxpbmUgaGVscAotICAgZnVuY3Rpb25hbGl0eS4KLQotICAgVGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IG1hcHMgdG8gdGhlICJ0cmFjaW5nIiBib290IHRpbWUKLSAgIG9wdGlvbiBhbmQgdGhlICJmdF90cmFjaW5nIiBtb2R1bGVzIG9wdGlvbiBhcyBmb2xsb3dzOgotCi0gICAwICAgICAgICAgICAgICBidWdzCi0gICAxICAgICAgICAgICAgICArIGVycm9ycyAod2l0aCBjYWxsLXN0YWNrIGR1bXApCi0gICAyICAgICAgICAgICAgICArIHdhcm5pbmdzCi0gICAzICAgICAgICAgICAgICArIGluZm9ybWF0aW9uCi0gICA0ICAgICAgICAgICAgICArIG1vcmUgaW5mb3JtYXRpb24KLSAgIDUgICAgICAgICAgICAgICsgcHJvZ3JhbSBmbG93Ci0gICA2ICAgICAgICAgICAgICArIGZkYy9kbWEgaW5mbwotICAgNyAgICAgICAgICAgICAgKyBkYXRhIGZsb3cKLSAgIDggICAgICAgICAgICAgICsgZXZlcnl0aGluZyBlbHNlCi0KLTIuIFR1bmluZyB0aGUgZGVidWdnaW5nIG91dHB1dAotICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gICBUbyByZWR1Y2UgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IHByaW50ZWQgdG8gdGhlIHN5c3RlbQotICAgY29uc29sZSB5b3UgY2FuCi0KLSAgIGkpICB0cmltIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGF0IHJ1bi10aW1lIHdpdGgKLQotICAgICAgIG10IC1mIC9kZXYvbnFmdDAgc2V0ZGVuc2l0eSAjREJHTFZMCi0KLSAgICAgICB3aGVyZSAiI0RCR0xWTCIgaXMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA5Ci0KLSAgIGlpKSB0cmltIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGF0IG1vZHVsZSBsb2FkIHRpbWUgd2l0aAotCi0gICAgICAgbW9kcHJvYmUgZnRhcGUgZnRfdHJhY2luZz0jREJHTFZMCi0KLSAgICAgICBPZiBjb3Vyc2UsIHRoaXMgYXBwbGllcyBvbmx5IGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgZnRhcGUgdG8gYmUKLSAgICAgICBjb21waWxlZCBhcyBhIG1vZHVsZS4KLQotICAgaWlpKSB0cmltIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGR1cmluZyBzeXN0ZW0gYm9vdCB0aW1lLiBBZGQgdGhlCi0gICAgICAgZm9sbG93aW5nIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lOgotCi0gICAgICAgZnRhcGU9I0RCR0xWTCx0cmFjaW5nCi0KLSAgICAgICBQbGVhc2UgcmVmZXIgYWxzbyB0byB0aGUgbmV4dCBzZWN0aW9uIGlmIHlvdSBkb24ndCBrbm93IGhvdyB0bwotICAgICAgIHNldCBib290IHRpbWUgcGFyYW1ldGVycy4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1DLiBCb290IGFuZCBsb2FkIHRpbWUgY29uZmlndXJhdGlvbgotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotMS4gU2V0dGluZyBib290IHRpbWUgcGFyYW1ldGVycwotICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fiAKLSAgIEFzc3VtaW5nIHRoYXQgeW91IHVzZSBsaWxvLCB0aGUgTEkpbnV4IExPKWFkZXIsIGJvb3QgdGltZSBrZXJuZWwKLSAgIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBieSBhZGRpbmcgYSBsaW5lCi0KLSAgIGFwcGVuZCBzb21lX2tlcm5lbF9ib290X3RpbWVfcGFyYW1ldGVyCi0KLSAgIHRvIGAvZXRjL2xpbG8uY29uZicgb3IgYXQgcmVhbCBib290IHRpbWUgYnkgdHlwaW5nIGluIHRoZSBvcHRpb25zCi0gICBhdCB0aGUgcHJvbXB0IHByb3ZpZGVkIGJ5IExJTE8uIEkgY2FuJ3QgZ2l2ZSB5b3UgYWR2aWNlIG9uIGhvdyB0bwotICAgc3BlY2lmeSB0aG9zZSBwYXJhbWV0ZXJzIHdpdGggb3RoZXIgbG9hZGVycyBhcyBJIGRvbid0IHVzZSB0aGVtLgotCi0gICBGb3IgZnRhcGUsIGVhY2ggInNvbWVfa2VybmVsX2Jvb3RfdGltZV9wYXJhbWV0ZXIiIGxvb2tzIGxpa2UKLSAgICJmdGFwZT12YWx1ZSxvcHRpb24iLiBBcyBhbiBleGFtcGxlLCB0aGUgZGVidWdnaW5nIG91dHB1dCBjYW4gYmUKLSAgIGluY3JlYXNlZCB3aXRoCi0KLSAgIGZ0YXBlPTQsdHJhY2luZwotCi0gICBOT1RFOiB0aGUgdmFsdWUgcHJlY2VkZXMgdGhlIG9wdGlvbiBuYW1lLgotCi0yLiBNb2R1bGUgbG9hZCB0aW1lIHBhcmFtZXRlcnMKLSAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotICAgTW9kdWxlIHBhcmFtZXRlcnMgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgZGlyZWN0bHkgd2hlbiBpbnZva2luZwotICAgdGhlIHByb2dyYW0gJ21vZHByb2JlJyBhdCB0aGUgc2hlbGwgcHJvbXB0OgotCi0gICBtb2Rwcm9iZSBmdGFwZSBmdF90cmFjaW5nPTQKLQotICAgb3IgYnkgZWRpdGluZyB0aGUgZmlsZSBgL2V0Yy9tb2Rwcm9iZS5jb25mJyBpbiB3aGljaCBjYXNlIHRoZXkgdGFrZQotICAgZWZmZWN0IGVhY2ggdGltZSB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkIHdpdGggYG1vZHByb2JlJyAocGxlYXNlCi0gICByZWZlciB0byB0aGUgcmVzcGVjdGl2ZSBtYW51YWwgcGFnZXMpLiBUaHVzLCB5b3Ugc2hvdWxkIGFkZCBhIGxpbmUKLQotICAgb3B0aW9ucyBmdGFwZSBmdF90cmFjaW5nPTQKLQotICAgdG8gYC9ldGMvbW9kcHJvYmUuY29uZmAgaWYgeW91IGludGVuZCB0byBpbmNyZWFzZSB0aGUgZGVidWdnaW5nCi0gICBvdXRwdXQgb2YgdGhlIGRyaXZlci4KLQotCi0zLiBGdGFwZSBib290LSBhbmQgbG9hZCB0aW1lIG9wdGlvbnMKLSAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi0gICBpLiAgIENvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nIG91dHB1dAotICAgICAgICBEQkdMVkwgaGFzIHRvIGJlIHJlcGxhY2VkIGJ5IGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOC4KLQotICAgICAgICBtb2R1bGUgICAgICAgICAgICAgICAgIHwgIGtlcm5lbCBjb21tYW5kIGxpbmUKLSAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBmdF90cmFjaW5nPURCR0xWTCAgICAgIHwgIGZ0YXBlPURCR0xWTCx0cmFjaW5nCi0KLSAgIGlpLiAgSGFyZHdhcmUgc2V0dXAKLQlCQVNFIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgeW91ciBmbG9wcHkgZGlzayBjb250cm9sbGVyLAotICAgICAgICBJUlEgYW5kIERNQSBnaXZlIGl0cyBpbnRlcnJ1cHQgYW5kIERNQSBjaGFubmVsLCByZXNwZWN0aXZlbHkuCi0gICAgICAgIEJPT0wgaXMgYW4gaW50ZWdlciwgIjAiIG1lYW5zICJubyI7IGFueSBvdGhlciB2YWx1ZSBtZWFucwotCSJ5ZXMiLiBZb3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGFueXRoaW5nIGlmIGNvbm5lY3RpbmcgeW91ciB0YXBlCi0gICAgICAgIGRyaXZlIHRvIHRoZSBzdGFuZGFyZCBmbG9wcHkgZGlzayBjb250cm9sbGVyLiBBbGwgb2YgdGhlc2UKLQl2YWx1ZXMgaGF2ZSByZWFzb25hYmxlIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgY2FuIGJlIG1vZGlmaWVkCi0JZHVyaW5nIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpLmUuIHdoaWxlIHJ1bm5pbmcgIm1ha2UgY29uZmlnIiwKLQkibWFrZSBtZW51Y29uZmlnIiBvciAibWFrZSB4Y29uZmlnIiBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeQotCW9mIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIHRyZWUuIFBsZWFzZSByZWZlciBhbHNvIHRvIHRoZSBvbgotCWxpbmUgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBkdXJpbmcgdGhhdCBrZXJuZWwgY29uZmlndXJhdGlvbgotCXByb2Nlc3MuCi0KLQlmdF9wcm9iZV9mYzEwIGlzIHNldCB0byBhIG5vbi16ZXJvIHZhbHVlIGlmIHlvdSB3aXNoIGZvciBmdGFwZSB0bwotCXByb2JlIGZvciBhIENvbG9yYWRvIEZDLTEwIG9yIEZDLTIwIGNvbnRyb2xsZXIuCi0KLQlmdF9tYWNoMiBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSBpZiB5b3Ugd2lzaCBmb3IgZnRhcGUgdG8gcHJvYmUKLQlmb3IgYSBNb3VudGFpbiBNQUNILTIgY29udHJvbGxlci4KLQotICAgICAgICBtb2R1bGUgICAgICAgICAgICAgICAgIHwgIGtlcm5lbCBjb21tYW5kIGxpbmUKLSAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBmdF9mZGNfYmFzZT1CQVNFICAgICAgIHwgIGZ0YXBlPUJBU0UsaW9wb3J0Ci0gICAgICAgIGZ0X2ZkY19pcnE9SVJRICAgICAgICAgfCAgZnRhcGU9SVJRLGlycQotICAgICAgICBmdF9mZGNfZG1hPURNQSAgICAgICAgIHwgIGZ0YXBlPURNQSxkbWEKLSAgICAgICAgZnRfcHJvYmVfZmMxMD1CT09MICAgICB8ICBmdGFwZT1CT09MLGZjMTAKLSAgICAgICAgZnRfbWFjaDI9Qk9PTCAgICAgICAgICB8ICBmdGFwZT1CT09MLG1hY2gyCi0gICAgICAgIGZ0X2ZkY190aHJlc2hvbGQ9VEhSICAgfCAgZnRhcGU9VEhSLHRocmVzaG9sZAotICAgICAgICBmdF9mZGNfcmF0ZV9saW1pdD1SQVRFIHwgIGZ0YXBlPVJBVEUsZGF0YXJhdGUKLQotNC4gRXhhbXBsZSBrZXJuZWwgcGFyYW1ldGVyIHNldHRpbmcKLSAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IAotICAgVG8gY29uZmlndXJlIGZ0YXBlIHRvIHByb2JlIGZvciBhIENvbG9yYWRvIEZDLTEwL0ZDLTIwIGNvbnRyb2xsZXIKLSAgIGFuZCB0byBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQgYSBsaXR0bGUgYml0LCBhZGQKLSAgIHRoZSBmb2xsb3dpbmcgbGluZSB0byBgL2V0Yy9saWxvLmNvbmYnOgotCi0gICBhcHBlbmQgZnRhcGU9MSxmYzEwIGZ0YXBlPTQsdHJhY2luZwotCi01LiBFeGFtcGxlIG1vZHVsZSBwYXJhbWV0ZXIgc2V0dGluZwotICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAgIFRvIGRvIHRoZSBzYW1lLCBidXQgd2l0aCBmdGFwZSBjb21waWxlZCBhcyBhIGxvYWRhYmxlIGtlcm5lbAotICAgbW9kdWxlLCBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGAvZXRjL21vZHByb2JlLmNvbmYnOgotCi0gICBvcHRpb25zIGZ0YXBlIGZ0X3Byb2JlX2ZjMTA9MSBmdF90cmFjaW5nPTQKLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi1ELiBTdXBwb3J0IGFuZCBjb250YWN0cwotICAgPT09PT09PT09PT09PT09PT09PT0KLQotICAgRnRhcGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGVyZSBpcwotICAgYWJzb2x1dGVseSBubyB3YXJyYW50eSBmb3IgdGhpcyBzb2Z0d2FyZS4gSG93ZXZlciwgeW91IGNhbiByZWFjaAotICAgdGhlIGN1cnJlbnQgbWFpbnRhaW5lciBvZiB0aGUgZnRhcGUgcGFja2FnZSB1bmRlciB0aGUgZW1haWwgYWRkcmVzcwotICAgZ2l2ZW4gaW4gdGhlIE1BSU5UQUlORVJTIGZpbGUgd2hpY2ggaXMgbG9jYXRlZCBpbiB0aGUgdG9wIGxldmVsCi0gICBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZS4gVGhlcmUgeW91J2xsIGZpbmQgYWxzbwotICAgdGhlIHJlbGV2YW50IG1haWxpbmcgbGlzdCB0byB1c2UgYXMgYSBkaXNjdXNzaW9uIGZvcnVtIGFuZCB0aGUgd2ViCi0gICBwYWdlIHRvIHF1ZXJ5IGZvciB0aGUgbW9zdCByZWNlbnQgZG9jdW1lbnRhdGlvbiwgcmVsYXRlZCB3b3JrIGFuZAotICAgZGV2ZWxvcG1lbnQgdmVyc2lvbnMgb2YgZnRhcGUuCi0KLSAgIENoYW5nZWxvZzoKLSAgID09PT09PT09PT0KLQotfjE5OTY6CQlPcmlnaW5hbCBEb2N1bWVudAotCi0xMC0yNC0yMDA0OglHZW5lcmFsIGNsZWFudXAgYW5kIHVwZGF0aW5nLCBub3RpbmcgYWRkaXRpb25hbCBtb2R1bGUgb3B0aW9ucy4KLQkJSmFtZXMgTmVsc29uIDxqYW1lczQ3NjVAZ21haWwuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCA2NzQ3Mzg0Li4xNWU0ZmVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNTU3LDkgKzU1Nyw2IEBACiAJZmxvcHB5PQkJW0hXXQogCQkJU2VlIERvY3VtZW50YXRpb24vZmxvcHB5LnR4dC4KIAotCWZ0YXBlPQkJW0hXXSBGbG9wcHkgVGFwZSBzdWJzeXN0ZW0gZGVidWdnaW5nIG9wdGlvbnMuCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9mdGFwZS50eHQuCi0KIAlnYW1lY29uLm1hcFsyfDNdPQogCQkJW0hXLEpPWV0gTXVsdGlzeXN0ZW0gam95c3RpY2sgYW5kIE5FUy9TTkVTL1BTWCBwYWQKIAkJCXN1cHBvcnQgdmlhIHBhcmFsbGVsIHBvcnQgKHVwIHRvIDUgZGV2aWNlcyBwZXIgcG9ydCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAppbmRleCA3NDU2M2IzLi5kZGExNTg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CkBAIC0xOSwyMSArMTksMTcgQEAKIAogSXQgaGFzIGEgYmFzZSBwcm90b2NvbCBhbmQgcGx1Z2dhYmxlIGNvbmdlc3Rpb24gY29udHJvbCBJRHMgKENDSURzKS4KIAotSXQgaXMgYXQgZHJhZnQgUkZDIHN0YXR1cyBhbmQgdGhlIGhvbWVwYWdlIGZvciBEQ0NQIGFzIGEgcHJvdG9jb2wgaXMgYXQ6Ci0JaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNwLworSXQgaXMgYXQgZXhwZXJpbWVudGFsIFJGQyBzdGF0dXMgYW5kIHRoZSBob21lcGFnZSBmb3IgRENDUCBhcyBhIHByb3RvY29sIGlzIGF0OgorCWh0dHA6Ly93d3cucmVhZC5jcy51Y2xhLmVkdS9kY2NwLwogCiBNaXNzaW5nIGZlYXR1cmVzCiA9PT09PT09PT09PT09PT09CiAKIFRoZSBEQ0NQIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBhcmUgaW4KLXRoZSBkcmFmdCBSRkMuCit0aGUgUkZDLgogCi1JbiBwYXJ0aWN1bGFyIHRoZSBmb2xsb3dpbmcgYXJlIG1pc3Npbmc6Ci0tIENDSUQyIHN1cHBvcnQKLS0gZmVhdHVyZSBuZWdvdGlhdGlvbgotCi1XaGVuIHRlc3RpbmcgYWdhaW5zdCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgaXQgYXBwZWFycyB0aGF0IGVsYXBzZWQgdGltZQotb3B0aW9ucyBhcmUgbm90IGNvZGVkIGNvbXBsaWFudCB0byB0aGUgc3BlY2lmaWNhdGlvbi4KK1RoZSBrbm93biBidWdzIGFyZSBhdDoKKwlodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9UT0RPI0RDQ1AKIAogU29ja2V0IG9wdGlvbnMKID09PT09PT09PT09PT09CkBAIC00NywxMiArNDMsNzAgQEAKIGlzIHByZXNlbnQpLiBDb25uZWN0aW5nIHNvY2tldHMgc2V0IGF0IG1vc3Qgb25lIHNlcnZpY2Ugb3B0aW9uOyBmb3IKIGxpc3RlbmluZyBzb2NrZXRzLCBtdWx0aXBsZSBzZXJ2aWNlIGNvZGVzIGNhbiBiZSBzcGVjaWZpZWQuCiAKK0RDQ1BfU09DS09QVF9TRU5EX0NTQ09WIGFuZCBEQ0NQX1NPQ0tPUFRfUkVDVl9DU0NPViBhcmUgdXNlZCBmb3Igc2V0dGluZyB0aGUKK3BhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKFJGQyA0MzQwLCBzZWMuIDkuMikuIFRoZSBkZWZhdWx0IGlzIHRoYXQgY2hlY2tzdW1zCithbHdheXMgY292ZXIgdGhlIGVudGlyZSBwYWNrZXQgYW5kIHRoYXQgb25seSBmdWxseSBjb3ZlcmVkIGFwcGxpY2F0aW9uIGRhdGEgaXMKK2FjY2VwdGVkIGJ5IHRoZSByZWNlaXZlci4gSGVuY2UsIHdoZW4gdXNpbmcgdGhpcyBmZWF0dXJlIG9uIHRoZSBzZW5kZXIsIGl0IG11c3QKK2JlIGVuYWJsZWQgYXQgdGhlIHJlY2VpdmVyLCB0b28gd2l0aCBzdWl0YWJsZSBjaG9pY2Ugb2YgQ3NDb3YuCisKK0RDQ1BfU09DS09QVF9TRU5EX0NTQ09WIHNldHMgdGhlIHNlbmRlciBjaGVja3N1bSBjb3ZlcmFnZS4gVmFsdWVzIGluIHRoZQorCXJhbmdlIDAuLjE1IGFyZSBhY2NlcHRhYmxlLiBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzIDAgKGZ1bGwgY292ZXJhZ2UpLAorCXZhbHVlcyBiZXR3ZWVuIDEuLjE1IGluZGljYXRlIHBhcnRpYWwgY292ZXJhZ2UuCitEQ0NQX1NPQ0tPUFRfU0VORF9DU0NPViBpcyBmb3IgdGhlIHJlY2VpdmVyIGFuZCBoYXMgYSBkaWZmZXJlbnQgbWVhbmluZzogaXQKKwlzZXRzIGEgdGhyZXNob2xkLCB3aGVyZSBhZ2FpbiB2YWx1ZXMgMC4uMTUgYXJlIGFjY2VwdGFibGUuIFRoZSBkZWZhdWx0CisJb2YgMCBtZWFucyB0aGF0IGFsbCBwYWNrZXRzIHdpdGggYSBwYXJ0aWFsIGNvdmVyYWdlIHdpbGwgYmUgZGlzY2FyZGVkLgorCVZhbHVlcyBpbiB0aGUgcmFuZ2UgMS4uMTUgaW5kaWNhdGUgdGhhdCBwYWNrZXRzIHdpdGggbWluaW1hbGx5IHN1Y2ggYQorCWNvdmVyYWdlIHZhbHVlIGFyZSBhbHNvIGFjY2VwdGFibGUuIFRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUKKwlyZXN0cmljdGl2ZSB0aGlzIHNldHRpbmcgKHNlZSBbUkZDIDQzNDAsIHNlYy4gOS4yLjFdKS4KKworU3lzY3RsIHZhcmlhYmxlcworPT09PT09PT09PT09PT09PQorU2V2ZXJhbCBEQ0NQIGRlZmF1bHQgcGFyYW1ldGVycyBjYW4gYmUgbWFuYWdlZCBieSB0aGUgZm9sbG93aW5nIHN5c2N0bHMKKyhzeXNjdGwgbmV0LmRjY3AuZGVmYXVsdCBvciAvcHJvYy9zeXMvbmV0L2RjY3AvZGVmYXVsdCk6CisKK3JlcXVlc3RfcmV0cmllcworCVRoZSBudW1iZXIgb2YgYWN0aXZlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiByZXRyaWVzICh0aGUgbnVtYmVyIG9mCisJUmVxdWVzdHMgbWludXMgb25lKSBiZWZvcmUgdGltaW5nIG91dC4gSW4gYWRkaXRpb24sIGl0IGFsc28gZ292ZXJucworCXRoZSBiZWhhdmlvdXIgb2YgdGhlIG90aGVyLCBwYXNzaXZlIHNpZGU6IHRoaXMgdmFyaWFibGUgYWxzbyBzZXRzCisJdGhlIG51bWJlciBvZiB0aW1lcyBEQ0NQIHJlcGVhdHMgc2VuZGluZyBhIFJlc3BvbnNlIHdoZW4gdGhlIGluaXRpYWwKKwloYW5kc2hha2UgZG9lcyBub3QgcHJvZ3Jlc3MgZnJvbSBSRVNQT05EIHRvIE9QRU4gKGkuZS4gd2hlbiBubyBBY2sKKwlpcyByZWNlaXZlZCBhZnRlciB0aGUgaW5pdGlhbCBSZXF1ZXN0KS4gIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGdyZWF0ZXIKKwl0aGFuIDAsIHN1Z2dlc3RlZCBpcyBsZXNzIHRoYW4gMTAuIEFuYWxvZ3VlIG9mIHRjcF9zeW5fcmV0cmllcy4KKworcmV0cmllczEKKwlIb3cgb2Z0ZW4gYSBEQ0NQIFJlc3BvbnNlIGlzIHJldHJhbnNtaXR0ZWQgdW50aWwgdGhlIGxpc3RlbmluZyBEQ0NQCisJc2lkZSBjb25zaWRlcnMgaXRzIGNvbm5lY3RpbmcgcGVlciBkZWFkLiBBbmFsb2d1ZSBvZiB0Y3BfcmV0cmllczEuCisKK3JldHJpZXMyCisJVGhlIG51bWJlciBvZiB0aW1lcyBhIGdlbmVyYWwgRENDUCBwYWNrZXQgaXMgcmV0cmFuc21pdHRlZC4gVGhpcyBoYXMKKwlpbXBvcnRhbmNlIGZvciByZXRyYW5zbWl0dGVkIGFja25vd2xlZGdtZW50cyBhbmQgZmVhdHVyZSBuZWdvdGlhdGlvbiwKKwlkYXRhIHBhY2tldHMgYXJlIG5ldmVyIHJldHJhbnNtaXR0ZWQuIEFuYWxvZ3VlIG9mIHRjcF9yZXRyaWVzMi4KKworc2VuZF9uZHAgPSAxCisJV2hldGhlciBvciBub3QgdG8gc2VuZCBORFAgY291bnQgb3B0aW9ucyAoc2VjLiA3LjcuMikuCisKK3NlbmRfYWNrdmVjID0gMQorCVdoZXRoZXIgb3Igbm90IHRvIHNlbmQgQWNrIFZlY3RvciBvcHRpb25zIChzZWMuIDExLjUpLgorCithY2tfcmF0aW8gPSAyCisJVGhlIGRlZmF1bHQgQWNrIFJhdGlvIChzZWMuIDExLjMpIHRvIHVzZS4KKwordHhfY2NpZCA9IDIKKwlEZWZhdWx0IENDSUQgZm9yIHRoZSBzZW5kZXItcmVjZWl2ZXIgaGFsZi1jb25uZWN0aW9uLgorCityeF9jY2lkID0gMgorCURlZmF1bHQgQ0NJRCBmb3IgdGhlIHJlY2VpdmVyLXNlbmRlciBoYWxmLWNvbm5lY3Rpb24uCisKK3NlcV93aW5kb3cgPSAxMDAKKwlUaGUgaW5pdGlhbCBzZXF1ZW5jZSB3aW5kb3cgKHNlYy4gNy41LjIpLgorCit0eF9xbGVuID0gNQorCVRoZSBzaXplIG9mIHRoZSB0cmFuc21pdCBidWZmZXIgaW4gcGFja2V0cy4gQSB2YWx1ZSBvZiAwIGNvcnJlc3BvbmRzCisJdG8gYW4gdW5ib3VuZGVkIHRyYW5zbWl0IGJ1ZmZlci4KKwogTm90ZXMKID09PT09CiAKLVNFTGludXggZG9lcyBub3QgeWV0IGhhdmUgc3VwcG9ydCBmb3IgRENDUC4gWW91IHdpbGwgbmVlZCB0byB0dXJuIGl0IG9mZiBvcgotZWxzZSB5b3Ugd2lsbCBnZXQgRUFDQ0VTLgotCi1EQ0NQIGRvZXMgbm90IHRyYXZlbCB0aHJvdWdoIE5BVCBzdWNjZXNzZnVsbHkgYXQgcHJlc2VudC4gVGhpcyBpcyBiZWNhdXNlCi10aGUgY2hlY2tzdW0gY292ZXJzIHRoZSBwc3VlZG8taGVhZGVyIGFzIHBlciBUQ1AgYW5kIFVEUC4gSXQgc2hvdWxkIGJlCi1yZWxhdGl2ZWx5IHRyaXZpYWwgdG8gYWRkIExpbnV4IE5BVCBzdXBwb3J0IGZvciBEQ0NQLgorRENDUCBkb2VzIG5vdCB0cmF2ZWwgdGhyb3VnaCBOQVQgc3VjY2Vzc2Z1bGx5IGF0IHByZXNlbnQgb24gbWFueSBib3hlcy4gVGhpcyBpcworYmVjYXVzZSB0aGUgY2hlY2tzdW0gY292ZXJzIHRoZSBwc3VlZG8taGVhZGVyIGFzIHBlciBUQ1AgYW5kIFVEUC4gTGludXggTkFUCitzdXBwb3J0IGZvciBEQ0NQIGhhcyBiZWVuIGFkZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKaW5kZXggNWMwYTVjYy4uNjFiMTcxYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMDAudHh0CkBAIC0xLDcgKzEsNyBAQAogTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMDAgRmFtaWx5IG9mIEFkYXB0ZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotTm92ZW1iZXIgMTUsIDIwMDUKK1NlcHRlbWJlciAyNiwgMjAwNgogCiAKIENvbnRlbnRzCkBAIC05LDYgKzksNyBAQAogCiAtIEluIFRoaXMgUmVsZWFzZQogLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgogLSBDb21tYW5kIExpbmUgUGFyYW1ldGVycwogLSBTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24KIC0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwpAQCAtNDEsNiArNDIsOSBAQAogSW5zdHJ1Y3Rpb25zIG9uIHVwZGF0aW5nIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGluIHRoZSBzZWN0aW9uICJBZGRpdGlvbmFsCiBDb25maWd1cmF0aW9ucyIgbGF0ZXIgaW4gdGhpcyBkb2N1bWVudC4KIAorTk9URTogVGhlIEludGVsKFIpIDgyNTYydiAxMC8xMDAgTmV0d29yayBDb25uZWN0aW9uIG9ubHkgcHJvdmlkZXMgMTAvMTAwCitzdXBwb3J0LgorCiAKIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgogPT09PT09PT09PT09PT09PT09PT09PT09CkBAIC01MSwyOCArNTUsMjcgQEAKICAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQogCiBGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nCi13ZWJzaXRlLiBJbiB0aGUgc2VhcmNoIGZpZWxkLCBlbnRlciB5b3VyIGFkYXB0ZXIgbmFtZSBvciB0eXBlLCBvciB1c2UgdGhlCit3ZWJzaXRlLiAgSW4gdGhlIHNlYXJjaCBmaWVsZCwgZW50ZXIgeW91ciBhZGFwdGVyIG5hbWUgb3IgdHlwZSwgb3IgdXNlIHRoZQogbmV0d29ya2luZyBsaW5rIG9uIHRoZSBsZWZ0IHRvIHNlYXJjaCBmb3IgeW91ciBhZGFwdGVyOgogCiAgICAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCiAKIAotQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMgPT09PT09PT09PT09PT09PT09PT09PT0KK0NvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PQogCiBJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzCi1hcmUgdXNlZCBieSBlbnRlcmluZyB0aGVtIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgbW9kcHJvYmUgb3IgaW5zbW9kCi1jb21tYW5kIHVzaW5nIHRoaXMgc3ludGF4OgorYXJlIHVzZWQgYnkgZW50ZXJpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIG1vZHByb2JlIGNvbW1hbmQKK3VzaW5nIHRoaXMgc3ludGF4OgogCiAgICAgIG1vZHByb2JlIGUxMDAwIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0KIAotICAgICBpbnNtb2QgZTEwMDAgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQotCiBGb3IgZXhhbXBsZSwgd2l0aCB0d28gUFJPLzEwMDAgUENJIGFkYXB0ZXJzLCBlbnRlcmluZzoKIAotICAgICBpbnNtb2QgZTEwMDAgVHhEZXNjcmlwdG9ycz04MCwxMjgKKyAgICAgbW9kcHJvYmUgZTEwMDAgVHhEZXNjcmlwdG9ycz04MCwxMjgKIAotbG9hZHMgdGhlIGUxMDAwIGRyaXZlciB3aXRoIDgwIFRYIGRlc2NyaXB0b3JzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4Ci1UWCBkZXNjcmlwdG9ycyBmb3IgdGhlIHNlY29uZCBhZGFwdGVyLgorbG9hZHMgdGhlIGUxMDAwIGRyaXZlciB3aXRoIDgwIFRYIGRlc2NyaXB0b3JzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQKKzEyOCBUWCBkZXNjcmlwdG9ycyBmb3IgdGhlIHNlY29uZCBhZGFwdGVyLgogCiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAogdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KQEAgLTg3LDcgKzkwLDcgQEAKICAgICAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvYXBwbG5vdHMvYXA0NTAuaHRtCiAKICAgICAgICAgQSBkZXNjcmlwdG9yIGRlc2NyaWJlcyBhIGRhdGEgYnVmZmVyIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8KLSAgICAgICAgdGhlIGRhdGEgYnVmZmVyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGFjY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZS4KKyAgICAgICAgdGhlIGRhdGEgYnVmZmVyLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhY2Nlc3NlZCBieSB0aGUgaGFyZHdhcmUuCiAKIAogQXV0b05lZwpAQCAtOTYsOSArOTksOSBAQAogVmFsaWQgUmFuZ2U6ICAgMHgwMS0weDBGLCAweDIwLTB4MkYKIERlZmF1bHQgVmFsdWU6IDB4MkYKIAotVGhpcyBwYXJhbWV0ZXIgaXMgYSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB3aGljaCBzcGVlZCBhbmQgZHVwbGV4Ci1zZXR0aW5ncyB0aGUgYm9hcmQgYWR2ZXJ0aXNlcy4gV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCB0aGUgU3BlZWQKLWFuZCBEdXBsZXggcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBzcGVjaWZpZWQuCitUaGlzIHBhcmFtZXRlciBpcyBhIGJpdC1tYXNrIHRoYXQgc3BlY2lmaWVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzCithZHZlcnRpc2VkIGJ5IHRoZSBhZGFwdGVyLiAgV2hlbiB0aGlzIHBhcmFtZXRlciBpcyB1c2VkLCB0aGUgU3BlZWQgYW5kCitEdXBsZXggcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBzcGVjaWZpZWQuCiAKIE5PVEU6ICBSZWZlciB0byB0aGUgU3BlZWQgYW5kIER1cGxleCBzZWN0aW9uIG9mIHRoaXMgcmVhZG1lIGZvciBtb3JlCiAgICAgICAgaW5mb3JtYXRpb24gb24gdGhlIEF1dG9OZWcgcGFyYW1ldGVyLgpAQCAtMTEwLDE0ICsxMTMsMTUgQEAKIFZhbGlkIFJhbmdlOiAgIDAtMiAoMD1hdXRvLW5lZ290aWF0ZSwgMT1oYWxmLCAyPWZ1bGwpCiBEZWZhdWx0IFZhbHVlOiAwCiAKLURlZmluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gZmxvdy4gQ2FuIGJlIGVpdGhlcgotb25lIG9yIHR3by1kaXJlY3Rpb25hbC4gSWYgYm90aCBEdXBsZXggYW5kIHRoZSBsaW5rIHBhcnRuZXIgYXJlIHNldCB0bwotYXV0by1uZWdvdGlhdGUsIHRoZSBib2FyZCBhdXRvLWRldGVjdHMgdGhlIGNvcnJlY3QgZHVwbGV4LiBJZiB0aGUgbGluawotcGFydG5lciBpcyBmb3JjZWQgKGVpdGhlciBmdWxsIG9yIGhhbGYpLCBEdXBsZXggZGVmYXVsdHMgdG8gaGFsZi1kdXBsZXguCitUaGlzIGRlZmluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gZmxvdy4gIENhbiBiZQorZWl0aGVyIG9uZSBvciB0d28tZGlyZWN0aW9uYWwuICBJZiBib3RoIER1cGxleCBhbmQgdGhlIGxpbmsgcGFydG5lciBhcmUKK3NldCB0byBhdXRvLW5lZ290aWF0ZSwgdGhlIGJvYXJkIGF1dG8tZGV0ZWN0cyB0aGUgY29ycmVjdCBkdXBsZXguICBJZiB0aGUKK2xpbmsgcGFydG5lciBpcyBmb3JjZWQgKGVpdGhlciBmdWxsIG9yIGhhbGYpLCBEdXBsZXggZGVmYXVsdHMgdG8gaGFsZi0KK2R1cGxleC4KIAogCiBGbG93Q29udHJvbAotLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0KIFZhbGlkIFJhbmdlOiAgIDAtMyAoMD1ub25lLCAxPVJ4IG9ubHksIDI9VHggb25seSwgMz1SeCZUeCkKIERlZmF1bHQgVmFsdWU6IFJlYWRzIGZsb3cgY29udHJvbCBzZXR0aW5ncyBmcm9tIHRoZSBFRVBST00KIApAQCAtMTI3LDU3ICsxMzEsMTA3IEBACiAKIEludGVycnVwdFRocm90dGxlUmF0ZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm90IHN1cHBvcnRlZCBvbiBJbnRlbCA4MjU0MiwgODI1NDMgb3IgODI1NDQtYmFzZWQgYWRhcHRlcnMpCi1WYWxpZCBSYW5nZTogICAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljKQotRGVmYXVsdCBWYWx1ZTogODAwMAorKG5vdCBzdXBwb3J0ZWQgb24gSW50ZWwoUikgODI1NDIsIDgyNTQzIG9yIDgyNTQ0LWJhc2VkIGFkYXB0ZXJzKQorVmFsaWQgUmFuZ2U6ICAgMCwxLDMsMTAwLTEwMDAwMCAoMD1vZmYsIDE9ZHluYW1pYywgMz1keW5hbWljIGNvbnNlcnZhdGl2ZSkKK0RlZmF1bHQgVmFsdWU6IDMKIAotVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgdGhlCi1jb250cm9sbGVyIGdlbmVyYXRlcy4gSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIGFub3RoZXIgc2V0dGluZyB1c2VkIGluCi1pbnRlcnJ1cHQgbW9kZXJhdGlvbi4gRHluYW1pYyBtb2RlIHVzZXMgYSBoZXVyaXN0aWMgYWxnb3JpdGhtIHRvIGFkanVzdAotSW50ZXJydXB0VGhyb3R0bGVSYXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRyYWZmaWMgbG9hZC4KK1RoZSBkcml2ZXIgY2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHRoYXQgdGhlIGFkYXB0ZXIKK3dpbGwgZ2VuZXJhdGUgZm9yIGluY29taW5nIHBhY2tldHMuIEl0IGRvZXMgdGhpcyBieSB3cml0aW5nIGEgdmFsdWUgdG8gdGhlIAorYWRhcHRlciB0aGF0IGlzIGJhc2VkIG9uIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBpbnRlcnJ1cHRzIHRoYXQgdGhlIGFkYXB0ZXIgCit3aWxsIGdlbmVyYXRlIHBlciBzZWNvbmQuCisKK1NldHRpbmcgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGEgdmFsdWUgZ3JlYXRlciBvciBlcXVhbCB0byAxMDAKK3dpbGwgcHJvZ3JhbSB0aGUgYWRhcHRlciB0byBzZW5kIG91dCBhIG1heGltdW0gb2YgdGhhdCBtYW55IGludGVycnVwdHMKK3BlciBzZWNvbmQsIGV2ZW4gaWYgbW9yZSBwYWNrZXRzIGhhdmUgY29tZSBpbi4gVGhpcyByZWR1Y2VzIGludGVycnVwdAorbG9hZCBvbiB0aGUgc3lzdGVtIGFuZCBjYW4gbG93ZXIgQ1BVIHV0aWxpemF0aW9uIHVuZGVyIGhlYXZ5IGxvYWQsCitidXQgd2lsbCBpbmNyZWFzZSBsYXRlbmN5IGFzIHBhY2tldHMgYXJlIG5vdCBwcm9jZXNzZWQgYXMgcXVpY2tseS4KKworVGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIHRoZSBkcml2ZXIgcHJldmlvdXNseSBhc3N1bWVkIGEgc3RhdGljIAorSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIG9mIDgwMDAsIHByb3ZpZGluZyBhIGdvb2QgZmFsbGJhY2sgdmFsdWUgZm9yIAorYWxsIHRyYWZmaWMgdHlwZXMsYnV0IGxhY2tpbmcgaW4gc21hbGwgcGFja2V0IHBlcmZvcm1hbmNlIGFuZCBsYXRlbmN5LiAKK1RoZSBoYXJkd2FyZSBjYW4gaGFuZGxlIG1hbnkgbW9yZSBzbWFsbCBwYWNrZXRzIHBlciBzZWNvbmQgaG93ZXZlciwgYW5kIAorZm9yIHRoaXMgcmVhc29uIGFuIGFkYXB0aXZlIGludGVycnVwdCBtb2RlcmF0aW9uIGFsZ29yaXRobSB3YXMgaW1wbGVtZW50ZWQuCisKK1NpbmNlIDcuMy54LCB0aGUgZHJpdmVyIGhhcyB0d28gYWRhcHRpdmUgbW9kZXMgKHNldHRpbmcgMSBvciAzKSBpbiB3aGljaAoraXQgZHluYW1pY2FsbHkgYWRqdXN0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGJhc2VkIG9uIHRoZSB0cmFmZmljIAordGhhdCBpdCByZWNlaXZlcy4gQWZ0ZXIgZGV0ZXJtaW5pbmcgdGhlIHR5cGUgb2YgaW5jb21pbmcgdHJhZmZpYyBpbiB0aGUgbGFzdAordGltZWZyYW1lLCBpdCB3aWxsIGFkanVzdCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIAorZm9yIHRoYXQgdHJhZmZpYy4KKworVGhlIGFsZ29yaXRobSBjbGFzc2lmaWVzIHRoZSBpbmNvbWluZyB0cmFmZmljIGV2ZXJ5IGludGVydmFsIGludG8KK2NsYXNzZXMuICBPbmNlIHRoZSBjbGFzcyBpcyBkZXRlcm1pbmVkLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGlzIAorYWRqdXN0ZWQgdG8gc3VpdCB0aGF0IHRyYWZmaWMgdHlwZSB0aGUgYmVzdC4gVGhlcmUgYXJlIHRocmVlIGNsYXNzZXMgZGVmaW5lZDogCisiQnVsayB0cmFmZmljIiwgZm9yIGxhcmdlIGFtb3VudHMgb2YgcGFja2V0cyBvZiBub3JtYWwgc2l6ZTsgIkxvdyBsYXRlbmN5IiwKK2ZvciBzbWFsbCBhbW91bnRzIG9mIHRyYWZmaWMgYW5kL29yIGEgc2lnbmlmaWNhbnQgcGVyY2VudGFnZSBvZiBzbWFsbAorcGFja2V0czsgYW5kICJMb3dlc3QgbGF0ZW5jeSIsIGZvciBhbG1vc3QgY29tcGxldGVseSBzbWFsbCBwYWNrZXRzIG9yIAorbWluaW1hbCB0cmFmZmljLgorCitJbiBkeW5hbWljIGNvbnNlcnZhdGl2ZSBtb2RlLCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHZhbHVlIGlzIHNldCB0byA0MDAwIAorZm9yIHRyYWZmaWMgdGhhdCBmYWxscyBpbiBjbGFzcyAiQnVsayB0cmFmZmljIi4gSWYgdHJhZmZpYyBmYWxscyBpbiB0aGUgIkxvdyAKK2xhdGVuY3kiIG9yICJMb3dlc3QgbGF0ZW5jeSIgY2xhc3MsIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgaXMgaW5jcmVhc2VkIAorc3RlcHdpc2UgdG8gMjAwMDAuIFRoaXMgZGVmYXVsdCBtb2RlIGlzIHN1aXRhYmxlIGZvciBtb3N0IGFwcGxpY2F0aW9ucy4KKworRm9yIHNpdHVhdGlvbnMgd2hlcmUgbG93IGxhdGVuY3kgaXMgdml0YWwgc3VjaCBhcyBjbHVzdGVyIG9yCitncmlkIGNvbXB1dGluZywgdGhlIGFsZ29yaXRobSBjYW4gcmVkdWNlIGxhdGVuY3kgZXZlbiBtb3JlIHdoZW4KK0ludGVycnVwdFRocm90dGxlUmF0ZSBpcyBzZXQgdG8gbW9kZSAxLiBJbiB0aGlzIG1vZGUsIHdoaWNoIG9wZXJhdGVzCit0aGUgc2FtZSBhcyBtb2RlIDMsIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgd2lsbCBiZSBpbmNyZWFzZWQgc3RlcHdpc2UgdG8gCis3MDAwMCBmb3IgdHJhZmZpYyBpbiBjbGFzcyAiTG93ZXN0IGxhdGVuY3kiLgorCitTZXR0aW5nIEludGVycnVwdFRocm90dGxlUmF0ZSB0byAwIHR1cm5zIG9mZiBhbnkgaW50ZXJydXB0IG1vZGVyYXRpb24KK2FuZCBtYXkgaW1wcm92ZSBzbWFsbCBwYWNrZXQgbGF0ZW5jeSwgYnV0IGlzIGdlbmVyYWxseSBub3Qgc3VpdGFibGUKK2ZvciBidWxrIHRocm91Z2hwdXQgdHJhZmZpYy4KIAogTk9URTogIEludGVycnVwdFRocm90dGxlUmF0ZSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIFR4QWJzSW50RGVsYXkgYW5kCi0gICAgICAgUnhBYnNJbnREZWxheSBwYXJhbWV0ZXJzLiBJbiBvdGhlciB3b3JkcywgbWluaW1pemluZyB0aGUgcmVjZWl2ZQorICAgICAgIFJ4QWJzSW50RGVsYXkgcGFyYW1ldGVycy4gIEluIG90aGVyIHdvcmRzLCBtaW5pbWl6aW5nIHRoZSByZWNlaXZlCiAgICAgICAgYW5kL29yIHRyYW5zbWl0IGFic29sdXRlIGRlbGF5cyBkb2VzIG5vdCBmb3JjZSB0aGUgY29udHJvbGxlciB0bwogICAgICAgIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cyB0aGFuIHdoYXQgdGhlIEludGVycnVwdCBUaHJvdHRsZSBSYXRlCiAgICAgICAgYWxsb3dzLgogCi1DQVVUSU9OOiAgSWYgeW91IGFyZSB1c2luZyB0aGUgSW50ZWwgUFJPLzEwMDAgQ1QgTmV0d29yayBDb25uZWN0aW9uCitDQVVUSU9OOiAgSWYgeW91IGFyZSB1c2luZyB0aGUgSW50ZWwoUikgUFJPLzEwMDAgQ1QgTmV0d29yayBDb25uZWN0aW9uCiAgICAgICAgICAgKGNvbnRyb2xsZXIgODI1NDcpLCBzZXR0aW5nIEludGVycnVwdFRocm90dGxlUmF0ZSB0byBhIHZhbHVlCiAgICAgICAgICAgZ3JlYXRlciB0aGFuIDc1LDAwMCwgbWF5IGhhbmcgKHN0b3AgdHJhbnNtaXR0aW5nKSBhZGFwdGVycwotICAgICAgICAgIHVuZGVyIGNlcnRhaW4gbmV0d29yayBjb25kaXRpb25zLiBJZiB0aGlzIG9jY3VycyBhIE5FVERFVgotICAgICAgICAgIFdBVENIRE9HIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gZXZlbnQgbG9nLiBJbgorICAgICAgICAgIHVuZGVyIGNlcnRhaW4gbmV0d29yayBjb25kaXRpb25zLiAgSWYgdGhpcyBvY2N1cnMgYSBORVRERVYKKyAgICAgICAgICBXQVRDSERPRyBtZXNzYWdlIGlzIGxvZ2dlZCBpbiB0aGUgc3lzdGVtIGV2ZW50IGxvZy4gIEluCiAgICAgICAgICAgYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIHJlc3RvcmluZwotICAgICAgICAgIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24uIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsIGZvciB0aGUKKyAgICAgICAgICB0aGUgbmV0d29yayBjb25uZWN0aW9uLiAgVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwgZm9yIHRoZQogICAgICAgICAgIGhhbmcsIGVuc3VyZSB0aGF0IEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBzZXQgbm8gZ3JlYXRlcgogICAgICAgICAgIHRoYW4gNzUsMDAwIGFuZCBpcyBub3Qgc2V0IHRvIDAuCiAKIE5PVEU6ICBXaGVuIGUxMDAwIGlzIGxvYWRlZCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgYW5kIG11bHRpcGxlIGFkYXB0ZXJzCiAgICAgICAgYXJlIGluIHVzZSBzaW11bHRhbmVvdXNseSwgdGhlIENQVSB1dGlsaXphdGlvbiBtYXkgaW5jcmVhc2Ugbm9uLQotICAgICAgIGxpbmVhcmx5LiBJbiBvcmRlciB0byBsaW1pdCB0aGUgQ1BVIHV0aWxpemF0aW9uIHdpdGhvdXQgaW1wYWN0aW5nCisgICAgICAgbGluZWFybHkuICBJbiBvcmRlciB0byBsaW1pdCB0aGUgQ1BVIHV0aWxpemF0aW9uIHdpdGhvdXQgaW1wYWN0aW5nCiAgICAgICAgdGhlIG92ZXJhbGwgdGhyb3VnaHB1dCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxvYWQgdGhlIGRyaXZlciBhcwogICAgICAgIGZvbGxvd3M6CiAKLSAgICAgICAgICAgaW5zbW9kIGUxMDAwLm8gSW50ZXJydXB0VGhyb3R0bGVSYXRlPTMwMDAsMzAwMCwzMDAwCisgICAgICAgICAgIG1vZHByb2JlIGUxMDAwIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAogCiAgICAgICAgVGhpcyBzZXRzIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMzAwMCBpbnRlcnJ1cHRzL3NlYyBmb3IKLSAgICAgICB0aGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiBUaGUgcmFuZ2UKKyAgICAgICB0aGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiAgVGhlIHJhbmdlCiAgICAgICAgb2YgMjAwMCB0byAzMDAwIGludGVycnVwdHMgcGVyIHNlY29uZCB3b3JrcyBvbiBhIG1ham9yaXR5IG9mCiAgICAgICAgc3lzdGVtcyBhbmQgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgdGhlIG9wdGltYWwgdmFsdWUgd2lsbAotICAgICAgIGJlIHBsYXRmb3JtLXNwZWNpZmljLiBJZiBDUFUgdXRpbGl6YXRpb24gaXMgbm90IGEgY29uY2VybiwgdXNlCisgICAgICAgYmUgcGxhdGZvcm0tc3BlY2lmaWMuICBJZiBDUFUgdXRpbGl6YXRpb24gaXMgbm90IGEgY29uY2VybiwgdXNlCiAgICAgICAgUlhfUE9MTElORyAoTkFQSSkgYW5kIGRlZmF1bHQgZHJpdmVyIHNldHRpbmdzLgogCiAKKwogUnhEZXNjcmlwdG9ycwogLS0tLS0tLS0tLS0tLQogVmFsaWQgUmFuZ2U6ICAgODAtMjU2IGZvciA4MjU0MiBhbmQgODI1NDMtYmFzZWQgYWRhcHRlcnMKICAgICAgICAgICAgICAgIDgwLTQwOTYgZm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgYWRhcHRlcnMKIERlZmF1bHQgVmFsdWU6IDI1NgogCi1UaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZQotZHJpdmVyLiBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUgaW5jb21pbmcKLXBhY2tldHMuICBFYWNoIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuICBBIHJlY2VpdmUgYnVmZmVyIGlzIGFsc28KLWFsbG9jYXRlZCBmb3IgZWFjaCBkZXNjcmlwdG9yIGFuZCBpcyAyMDQ4LgorVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiByZWNlaXZlIGJ1ZmZlciBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQKK2J5IHRoZSBkcml2ZXIuICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUKK2luY29taW5nIHBhY2tldHMsIGF0IHRoZSBleHBlbnNlIG9mIGluY3JlYXNlZCBzeXN0ZW0gbWVtb3J5IHV0aWxpemF0aW9uLgorCitFYWNoIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuICBBIHJlY2VpdmUgYnVmZmVyIGlzIGFsc28gYWxsb2NhdGVkIGZvciBlYWNoCitkZXNjcmlwdG9yIGFuZCBjYW4gYmUgZWl0aGVyIDIwNDgsIDQwOTYsIDgxOTIsIG9yIDE2Mzg0IGJ5dGVzLCBkZXBlbmRpbmcgCitvbiB0aGUgTVRVIHNldHRpbmcuIFRoZSBtYXhpbXVtIE1UVSBzaXplIGlzIDE2MTEwLgorCitOT1RFOiAgTVRVIGRlc2lnbmF0ZXMgdGhlIGZyYW1lIHNpemUuICBJdCBvbmx5IG5lZWRzIHRvIGJlIHNldCBmb3IgSnVtYm8gCisgICAgICAgRnJhbWVzLiAgRGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFibGUgc3lzdGVtIHJlc291cmNlcywgdGhlIHJlcXVlc3QgCisgICAgICAgZm9yIGEgaGlnaGVyIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIG1heSBiZSBkZW5pZWQuICBJbiB0aGlzIAorICAgICAgIGNhc2UsIHVzZSBhIGxvd2VyIG51bWJlci4KIAogCiBSeEludERlbGF5CkBAIC0xODcsMTcgKzI0MSwxNyBAQAogCiBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgMS4wMjQKIG1pY3Jvc2Vjb25kcy4gIFJlY2VpdmUgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUgZWZmaWNpZW5jeSBpZgotcHJvcGVybHkgdHVuZWQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYy4gSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFkZHMKK3Byb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWRkcwogZXh0cmEgbGF0ZW5jeSB0byBmcmFtZSByZWNlcHRpb24gYW5kIGNhbiBlbmQgdXAgZGVjcmVhc2luZyB0aGUgdGhyb3VnaHB1dAotb2YgVENQIHRyYWZmaWMuIElmIHRoZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgcmVjZWl2ZXMsIHRoaXMgdmFsdWUKK29mIFRDUCB0cmFmZmljLiAgSWYgdGhlIHN5c3RlbSBpcyByZXBvcnRpbmcgZHJvcHBlZCByZWNlaXZlcywgdGhpcyB2YWx1ZQogbWF5IGJlIHNldCB0b28gaGlnaCwgY2F1c2luZyB0aGUgZHJpdmVyIHRvIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHJlY2VpdmUKIGRlc2NyaXB0b3JzLgogCiBDQVVUSU9OOiAgV2hlbiBzZXR0aW5nIFJ4SW50RGVsYXkgdG8gYSB2YWx1ZSBvdGhlciB0aGFuIDAsIGFkYXB0ZXJzIG1heQotICAgICAgICAgIGhhbmcgKHN0b3AgdHJhbnNtaXR0aW5nKSB1bmRlciBjZXJ0YWluIG5ldHdvcmsgY29uZGl0aW9ucy4gSWYKKyAgICAgICAgICBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgdW5kZXIgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuICBJZgogICAgICAgICAgIHRoaXMgb2NjdXJzIGEgTkVUREVWIFdBVENIRE9HIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0KLSAgICAgICAgICBldmVudCBsb2cuIEluIGFkZGl0aW9uLCB0aGUgY29udHJvbGxlciBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0LAotICAgICAgICAgIHJlc3RvcmluZyB0aGUgbmV0d29yayBjb25uZWN0aW9uLiBUbyBlbGltaW5hdGUgdGhlIHBvdGVudGlhbAorICAgICAgICAgIGV2ZW50IGxvZy4gIEluIGFkZGl0aW9uLCB0aGUgY29udHJvbGxlciBpcyBhdXRvbWF0aWNhbGx5IHJlc2V0LAorICAgICAgICAgIHJlc3RvcmluZyB0aGUgbmV0d29yayBjb25uZWN0aW9uLiAgVG8gZWxpbWluYXRlIHRoZSBwb3RlbnRpYWwKICAgICAgICAgICBmb3IgdGhlIGhhbmcgZW5zdXJlIHRoYXQgUnhJbnREZWxheSBpcyBzZXQgdG8gMC4KIAogCkBAIC0yMDgsNyArMjYyLDcgQEAKIERlZmF1bHQgVmFsdWU6IDEyOAogCiBUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYQotcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiBVc2VmdWwgb25seSBpZiBSeEludERlbGF5IGlzIG5vbi16ZXJvLAorcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgVXNlZnVsIG9ubHkgaWYgUnhJbnREZWxheSBpcyBub24temVybywKIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwKIHBhY2tldCBpcyByZWNlaXZlZCB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCiBhbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCkBAIC0yMjIsOSArMjc2LDkgQEAKIERlZmF1bHQgVmFsdWU6ICAwIChhdXRvLW5lZ290aWF0ZSBhdCBhbGwgc3VwcG9ydGVkIHNwZWVkcykKIAogU3BlZWQgZm9yY2VzIHRoZSBsaW5lIHNwZWVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gbWVnYWJpdHMgcGVyIHNlY29uZAotKE1icHMpLiBJZiB0aGlzIHBhcmFtZXRlciBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIHNldCB0byAwIGFuZCB0aGUgbGluaworKE1icHMpLiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCBvciBpcyBzZXQgdG8gMCBhbmQgdGhlIGxpbmsKIHBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLCB0aGUgYm9hcmQgd2lsbCBhdXRvLWRldGVjdCB0aGUgY29ycmVjdAotc3BlZWQuIER1cGxleCBzaG91bGQgYWxzbyBiZSBzZXQgd2hlbiBTcGVlZCBpcyBzZXQgdG8gZWl0aGVyIDEwIG9yIDEwMC4KK3NwZWVkLiAgRHVwbGV4IHNob3VsZCBhbHNvIGJlIHNldCB3aGVuIFNwZWVkIGlzIHNldCB0byBlaXRoZXIgMTAgb3IgMTAwLgogCiAKIFR4RGVzY3JpcHRvcnMKQEAgLTIzNCw3ICsyODgsNyBAQAogRGVmYXVsdCBWYWx1ZTogMjU2CiAKIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgYnkgdGhlIGRyaXZlci4KLUluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBxdWV1ZSBtb3JlIHRyYW5zbWl0cy4gRWFjaAorSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIHF1ZXVlIG1vcmUgdHJhbnNtaXRzLiAgRWFjaAogZGVzY3JpcHRvciBpcyAxNiBieXRlcy4KIAogTk9URTogIERlcGVuZGluZyBvbiB0aGUgYXZhaWxhYmxlIHN5c3RlbSByZXNvdXJjZXMsIHRoZSByZXF1ZXN0IGZvciBhCkBAIC0yNDgsOCArMzAyLDggQEAKIERlZmF1bHQgVmFsdWU6IDY0CiAKIFRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHRyYW5zbWl0IGludGVycnVwdHMgaW4gdW5pdHMgb2YKLTEuMDI0IG1pY3Jvc2Vjb25kcy4gVHJhbnNtaXQgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUKLWVmZmljaWVuY3kgaWYgcHJvcGVybHkgdHVuZWQgZm9yIHNwZWNpZmljIG5ldHdvcmsgdHJhZmZpYy4gSWYgdGhlCisxLjAyNCBtaWNyb3NlY29uZHMuICBUcmFuc21pdCBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVQorZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiAgSWYgdGhlCiBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgdHJhbnNtaXRzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gKIGNhdXNpbmcgdGhlIGRyaXZlciB0byBydW4gb3V0IG9mIGF2YWlsYWJsZSB0cmFuc21pdCBkZXNjcmlwdG9ycy4KIApAQCAtMjYxLDcgKzMxNSw3IEBACiBEZWZhdWx0IFZhbHVlOiA2NAogCiBUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYQotdHJhbnNtaXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgVHhJbnREZWxheSBpcyBub24temVybywKK3RyYW5zbWl0IGludGVycnVwdCBpcyBnZW5lcmF0ZWQuICBVc2VmdWwgb25seSBpZiBUeEludERlbGF5IGlzIG5vbi16ZXJvLAogdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbAogcGFja2V0IGlzIHNlbnQgb24gdGhlIHdpcmUgd2l0aGluIHRoZSBzZXQgYW1vdW50IG9mIHRpbWUuICBQcm9wZXIgdHVuaW5nLAogYWxvbmcgd2l0aCBUeEludERlbGF5LCBtYXkgaW1wcm92ZSB0cmFmZmljIHRocm91Z2hwdXQgaW4gc3BlY2lmaWMKQEAgLTI4OCwxNSArMzQyLDE1IEBACiAKIEZvciBjb3BwZXItYmFzZWQgYm9hcmRzLCB0aGUga2V5d29yZHMgaW50ZXJhY3QgYXMgZm9sbG93czoKIAotICBUaGUgZGVmYXVsdCBvcGVyYXRpb24gaXMgYXV0by1uZWdvdGlhdGUuIFRoZSBib2FyZCBhZHZlcnRpc2VzIGFsbAorICBUaGUgZGVmYXVsdCBvcGVyYXRpb24gaXMgYXV0by1uZWdvdGlhdGUuICBUaGUgYm9hcmQgYWR2ZXJ0aXNlcyBhbGwKICAgc3VwcG9ydGVkIHNwZWVkIGFuZCBkdXBsZXggY29tYmluYXRpb25zLCBhbmQgaXQgbGlua3MgYXQgdGhlIGhpZ2hlc3QKICAgY29tbW9uIHNwZWVkIGFuZCBkdXBsZXggbW9kZSBJRiB0aGUgbGluayBwYXJ0bmVyIGlzIHNldCB0byBhdXRvLW5lZ290aWF0ZS4KIAogICBJZiBTcGVlZCA9IDEwMDAsIGxpbWl0ZWQgYXV0by1uZWdvdGlhdGlvbiBpcyBlbmFibGVkIGFuZCBvbmx5IDEwMDAgTWJwcwogICBpcyBhZHZlcnRpc2VkIChUaGUgMTAwMEJhc2VUIHNwZWMgcmVxdWlyZXMgYXV0by1uZWdvdGlhdGlvbi4pCiAKLSAgSWYgU3BlZWQgPSAxMCBvciAxMDAsIHRoZW4gYm90aCBTcGVlZCBhbmQgRHVwbGV4IHNob3VsZCBiZSBzZXQuIEF1dG8tCi0gIG5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCBhbmQgdGhlIEF1dG9OZWcgcGFyYW1ldGVyIGlzIGlnbm9yZWQuIFBhcnRuZXIKKyAgSWYgU3BlZWQgPSAxMCBvciAxMDAsIHRoZW4gYm90aCBTcGVlZCBhbmQgRHVwbGV4IHNob3VsZCBiZSBzZXQuICBBdXRvLQorICBuZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgYW5kIHRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyBpZ25vcmVkLiAgUGFydG5lcgogICBTSE9VTEQgYWxzbyBiZSBmb3JjZWQuCiAKIFRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyB1c2VkIHdoZW4gbW9yZSBjb250cm9sIGlzIHJlcXVpcmVkIG92ZXIgdGhlCkBAIC0zMDQsNyArMzU4LDcgQEAKIHNwZWVkIGFuZCBkdXBsZXggY29tYmluYXRpb25zIGFyZSBhZHZlcnRpc2VkIGR1cmluZyB0aGUgYXV0by1uZWdvdGlhdGlvbgogcHJvY2Vzcy4KIAotVGhlIHBhcmFtZXRlciBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIGRlY2ltYWwgb3IgaGV4aWRlY2ltYWwgdmFsdWUgYXMKK1RoZSBwYXJhbWV0ZXIgbWF5IGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIHZhbHVlIGFzCiBkZXRlcm1pbmVkIGJ5IHRoZSBiaXRtYXAgYmVsb3cuCiAKIEJpdCBwb3NpdGlvbiAgIDcgICAgICA2ICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAyICAgICAgMSAgICAgICAwCkBAIC0zMzcsMjAgKzM5MSwxOSBAQAogCiAgIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAgIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZAotICBpcyBkaXN0cmlidXRpb24gZGVwZW5kZW50LiBUeXBpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgaW52b2x2ZXMKKyAgaXMgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcwogICBhZGRpbmcgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmYgYXMgd2VsbAotICBhcyBlZGl0aW5nIG90aGVyIHN5c3RlbSBzdGFydHVwIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE1hbnkKKyAgYXMgZWRpdGluZyBvdGhlciBzeXN0ZW0gc3RhcnR1cCBzY3JpcHRzIGFuZC9vciBjb25maWd1cmF0aW9uIGZpbGVzLiAgTWFueQogICBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgc2hpcCB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LgogICBUbyBsZWFybiB0aGUgcHJvcGVyIHdheSB0byBjb25maWd1cmUgYSBuZXR3b3JrIGRldmljZSBmb3IgeW91ciBzeXN0ZW0sCi0gIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIGRvY3VtZW50YXRpb24uIElmIGR1cmluZyB0aGlzIHByb2Nlc3MgeW91IGFyZQorICByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLiAgSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlCiAgIGFza2VkIGZvciB0aGUgZHJpdmVyIG9yIG1vZHVsZSBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyCi0gIGZvciB0aGUgSW50ZWwgUFJPLzEwMDAgRmFtaWx5IG9mIEFkYXB0ZXJzIGlzIGUxMDAwLgorICBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseSBvZiBBZGFwdGVycyBpcyBlMTAwMC4KIAogICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgZTEwMDAgZHJpdmVyIGZvciB0d28gUFJPLzEwMDAgYWRhcHRlcnMKICAgKGV0aDAgYW5kIGV0aDEpIGFuZCBzZXQgdGhlIHNwZWVkIGFuZCBkdXBsZXggdG8gMTBmdWxsIGFuZCAxMDBoYWxmLCBhZGQKLSAgdGhlIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmYgb3IgbW9kcHJvYmUuY29uZjoKKyAgdGhlIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmYgb3Igb3IgbW9kcHJvYmUuY29uZjoKIAogICAgICAgIGFsaWFzIGV0aDAgZTEwMDAKICAgICAgICBhbGlhcyBldGgxIGUxMDAwCkBAIC0zNTgsOSArNDExLDggQEAKIAogICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcwotICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzCisgIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzCiAgIG9uIHlvdXIgY29uc29sZSwgc2V0IGRtZXNnIHRvIGVpZ2h0IGJ5IGVudGVyaW5nIHRoZSBmb2xsb3dpbmc6CiAKICAgICAgICBkbWVzZyAtbiA4CkBAIC0zNjksMTEgKzQyMSw5IEBACiAKICAgSnVtYm8gRnJhbWVzCiAgIC0tLS0tLS0tLS0tLQotCi0gIFRoZSBkcml2ZXIgc3VwcG9ydHMgSnVtYm8gRnJhbWVzIGZvciBhbGwgYWRhcHRlcnMgZXhjZXB0IDgyNTQyIGFuZAotICA4MjU3My1iYXNlZCBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUKLSAgTVRVIHRvIGEgdmFsdWUgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgb2YgMTUwMC4gVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kCi0gIHRvIGluY3JlYXNlIHRoZSBNVFUgc2l6ZS4gRm9yIGV4YW1wbGU6CisgIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIGxhcmdlciB0aGFuCisgIHRoZSBkZWZhdWx0IG9mIDE1MDAuICBVc2UgdGhlIGlmY29uZmlnIGNvbW1hbmQgdG8gaW5jcmVhc2UgdGhlIE1UVSBzaXplLgorICBGb3IgZXhhbXBsZToKIAogICAgICAgIGlmY29uZmlnIGV0aDx4PiBtdHUgOTAwMCB1cAogCkBAIC0zOTAsMjYgKzQ0MCw0OSBAQAogCiAgIC0gVG8gZW5hYmxlIEp1bWJvIEZyYW1lcywgaW5jcmVhc2UgdGhlIE1UVSBzaXplIG9uIHRoZSBpbnRlcmZhY2UgYmV5b25kCiAgICAgMTUwMC4KLSAgLSBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDE2MTEwLiBUaGlzIHZhbHVlIGNvaW5jaWRlcworCisgIC0gVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gIFRoaXMgdmFsdWUgY29pbmNpZGVzCiAgICAgd2l0aCB0aGUgbWF4aW11bSBKdW1ibyBGcmFtZXMgc2l6ZSBvZiAxNjEyOC4KKwogICAtIFVzaW5nIEp1bWJvIEZyYW1lcyBhdCAxMCBvciAxMDAgTWJwcyBtYXkgcmVzdWx0IGluIHBvb3IgcGVyZm9ybWFuY2Ugb3IKICAgICBsb3NzIG9mIGxpbmsuCisKICAgLSBTb21lIEludGVsIGdpZ2FiaXQgYWRhcHRlcnMgdGhhdCBzdXBwb3J0IEp1bWJvIEZyYW1lcyBoYXZlIGEgZnJhbWUgc2l6ZQogICAgIGxpbWl0IG9mIDkyMzggYnl0ZXMsIHdpdGggYSBjb3JyZXNwb25kaW5nIE1UVSBzaXplIGxpbWl0IG9mIDkyMTYgYnl0ZXMuCi0gICAgVGhlIGFkYXB0ZXJzIHdpdGggdGhpcyBsaW1pdGF0aW9uIGFyZSBiYXNlZCBvbiB0aGUgSW50ZWwgODI1NzFFQiBhbmQKLSAgICA4MjU3MkVJIGNvbnRyb2xsZXJzLCB3aGljaCBjb3JyZXNwb25kIHRvIHRoZXNlIHByb2R1Y3QgbmFtZXM6Ci0gICAgIEludGVsriBQUk8vMTAwMCBQVCBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKLSAgICAgSW50ZWyuIFBSTy8xMDAwIFBGIER1YWwgUG9ydCBTZXJ2ZXIgQWRhcHRlcgotICAgICBJbnRlbK4gUFJPLzEwMDAgUFQgU2VydmVyIEFkYXB0ZXIKLSAgICAgSW50ZWyuIFBSTy8xMDAwIFBUIERlc2t0b3AgQWRhcHRlcgotICAgICBJbnRlbK4gUFJPLzEwMDAgUEYgU2VydmVyIEFkYXB0ZXIKKyAgICBUaGUgYWRhcHRlcnMgd2l0aCB0aGlzIGxpbWl0YXRpb24gYXJlIGJhc2VkIG9uIHRoZSBJbnRlbChSKSA4MjU3MUVCLAorICAgIDgyNTcyRUksIDgyNTczTCBhbmQgODAwMDNFUzJMQU4gY29udHJvbGxlci4gIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlCisgICAgZm9sbG93aW5nIHByb2R1Y3QgbmFtZXM6CisgICAgIEludGVsKFIpIFBSTy8xMDAwIFBUIFNlcnZlciBBZGFwdGVyCisgICAgIEludGVsKFIpIFBSTy8xMDAwIFBUIERlc2t0b3AgQWRhcHRlcgorICAgICBJbnRlbChSKSBQUk8vMTAwMCBQVCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgSW50ZWwoUikgUFJPLzEwMDAgUFQgRHVhbCBQb3J0IFNlcnZlciBBZGFwdGVyCisgICAgIEludGVsKFIpIFBSTy8xMDAwIFBUIER1YWwgUG9ydCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgSW50ZWwoUikgUFJPLzEwMDAgUEYgU2VydmVyIEFkYXB0ZXIKKyAgICAgSW50ZWwoUikgUFJPLzEwMDAgUEYgTmV0d29yayBDb25uZWN0aW9uCisgICAgIEludGVsKFIpIFBSTy8xMDAwIFBGIER1YWwgUG9ydCBTZXJ2ZXIgQWRhcHRlcgorICAgICBJbnRlbChSKSBQUk8vMTAwMCBQQiBTZXJ2ZXIgQ29ubmVjdGlvbgorICAgICBJbnRlbChSKSBQUk8vMTAwMCBQTCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgSW50ZWwoUikgUFJPLzEwMDAgRUIgTmV0d29yayBDb25uZWN0aW9uIHdpdGggSS9PIEFjY2VsZXJhdGlvbgorICAgICBJbnRlbChSKSBQUk8vMTAwMCBFQiBCYWNrcGxhbmUgQ29ubmVjdGlvbiB3aXRoIEkvTyBBY2NlbGVyYXRpb24KKyAgICAgSW50ZWwoUikgUFJPLzEwMDAgUFQgUXVhZCBQb3J0IFNlcnZlciBBZGFwdGVyCiAKLSAgLSBUaGUgSW50ZWwgUFJPLzEwMDAgUE0gTmV0d29yayBDb25uZWN0aW9uIGRvZXMgbm90IHN1cHBvcnQganVtYm8gZnJhbWVzLgorICAtIEFkYXB0ZXJzIGJhc2VkIG9uIHRoZSBJbnRlbChSKSA4MjU0MiBhbmQgODI1NzNWL0UgY29udHJvbGxlciBkbyBub3QKKyAgICBzdXBwb3J0IEp1bWJvIEZyYW1lcy4gVGhlc2UgY29ycmVzcG9uZCB0byB0aGUgZm9sbG93aW5nIHByb2R1Y3QgbmFtZXM6CisgICAgIEludGVsKFIpIFBSTy8xMDAwIEdpZ2FiaXQgU2VydmVyIEFkYXB0ZXIKKyAgICAgSW50ZWwoUikgUFJPLzEwMDAgUE0gTmV0d29yayBDb25uZWN0aW9uCisKKyAgLSBUaGUgZm9sbG93aW5nIGFkYXB0ZXJzIGRvIG5vdCBzdXBwb3J0IEp1bWJvIEZyYW1lczoKKyAgICAgSW50ZWwoUikgODI1NjJWIDEwLzEwMCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgSW50ZWwoUikgODI1NjZETSBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgorICAgICBJbnRlbChSKSA4MjU2NkRDIEdpZ2FiaXQgTmV0d29yayBDb25uZWN0aW9uCisgICAgIEludGVsKFIpIDgyNTY2TU0gR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgSW50ZWwoUikgODI1NjZNQyBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgorICAgICBJbnRlbChSKSA4MjU2MkdUIDEwLzEwMCBOZXR3b3JrIENvbm5lY3Rpb24KKyAgICAgSW50ZWwoUikgODI1NjJHIDEwLzEwMCBOZXR3b3JrIENvbm5lY3Rpb24KIAogCiAgIEV0aHRvb2wKICAgLS0tLS0tLQotCiAgIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKICAgZGlhZ25vc3RpY3MsIGFzIHdlbGwgYXMgZGlzcGxheWluZyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4gIEV0aHRvb2wKICAgdmVyc2lvbiAxLjYgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eS4KQEAgLTQxNywxNSArNDkwLDE0IEBACiAgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCiAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KIAotICBOT1RFOiBFdGh0b29sIDEuNiBvbmx5IHN1cHBvcnRzIGEgbGltaXRlZCBzZXQgb2YgZXRodG9vbCBvcHRpb25zLiBTdXBwb3J0CisgIE5PVEU6IEV0aHRvb2wgMS42IG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHNldCBvZiBldGh0b29sIG9wdGlvbnMuICBTdXBwb3J0CiAgIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcKICAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLgogCiAgIEVuYWJsaW5nIFdha2Ugb24gTEFOKiAoV29MKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiBFdGh0b29sIGlzIGluY2x1ZGVkIHdpdGgKLSAgYWxsIHZlcnNpb25zIG9mIFJlZCBIYXQgYWZ0ZXIgUmVkIEhhdCA3LjIuIEZvciBvdGhlciBMaW51eCBkaXN0cmlidXRpb25zLAorICBXb0wgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBFdGh0b29sKiB1dGlsaXR5LiAgRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoCisgIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiAgRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsCiAgIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSB0aGUgZm9sbG93aW5nIHdlYnNpdGU6CiAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KIApAQCAtNDM2LDExICs1MDgsMTcgQEAKICAgRm9yIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwMCBkcml2ZXIgbXVzdCBiZQogICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgogCisgIFdha2UgT24gTEFOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBmb3IgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgorICBJbnRlbChSKSBQUk8vMTAwMCBQVCBEdWFsIFBvcnQgTmV0d29yayBDb25uZWN0aW9uCisgIEludGVsKFIpIFBSTy8xMDAwIFBUIER1YWwgUG9ydCBTZXJ2ZXIgQ29ubmVjdGlvbgorICBJbnRlbChSKSBQUk8vMTAwMCBQVCBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKKyAgSW50ZWwoUikgUFJPLzEwMDAgUEYgRHVhbCBQb3J0IFNlcnZlciBBZGFwdGVyCisgIEludGVsKFIpIFBSTy8xMDAwIFBUIFF1YWQgUG9ydCBTZXJ2ZXIgQWRhcHRlciAKKwogICBOQVBJCiAgIC0tLS0KLQotICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgZTEwMDAgZHJpdmVyLiBOQVBJIGlzIGVuYWJsZWQKLSAgb3IgZGlzYWJsZWQgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGtlcm5lbC4gVG8gb3ZlcnJpZGUKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAwIGRyaXZlci4gIE5BUEkgaXMgZW5hYmxlZAorICBvciBkaXNhYmxlZCBiYXNlZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUga2VybmVsLiAgVG8gb3ZlcnJpZGUKICAgdGhlIGRlZmF1bHQsIHVzZSB0aGUgZm9sbG93aW5nIGNvbXBpbGUtdGltZSBmbGFncy4KIAogICBUbyBlbmFibGUgTkFQSSwgY29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZSwgcGFzc2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgpAQCAtNDU3LDg4ICs1MzUsMTA1IEBACiBLbm93biBJc3N1ZXMKID09PT09PT09PT09PQogCi0gIEp1bWJvIEZyYW1lcyBTeXN0ZW0gUmVxdWlyZW1lbnQKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRHJvcHBlZCBSZWNlaXZlIFBhY2tldHMgb24gSGFsZi1kdXBsZXggMTAvMTAwIE5ldHdvcmtzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBoYXZlIGFuIEludGVsIFBDSSBFeHByZXNzIGFkYXB0ZXIgcnVubmluZyBhdCAxMG1icHMgb3IgMTAwbWJwcywgaGFsZi0KK2R1cGxleCwgeW91IG1heSBvYnNlcnZlIG9jY2FzaW9uYWwgZHJvcHBlZCByZWNlaXZlIHBhY2tldHMuICBUaGVyZSBhcmUgbm8KK3dvcmthcm91bmRzIGZvciB0aGlzIHByb2JsZW0gaW4gdGhpcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uICBUaGUgbmV0d29yayBtdXN0CitiZSB1cGRhdGVkIHRvIG9wZXJhdGUgaW4gZnVsbC1kdXBsZXgsIGFuZC9vciAxMDAwbWJwcyBvbmx5LgogCi0gIE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGhhdmUgYmVlbiBvYnNlcnZlZCBvbiBMaW51eCBzeXN0ZW1zIHdpdGggNjQgTUIKLSAgb2YgUkFNIG9yIGxlc3MgdGhhdCBhcmUgcnVubmluZyBKdW1ibyBGcmFtZXMuIElmIHlvdSBhcmUgdXNpbmcgSnVtYm8KLSAgRnJhbWVzLCB5b3VyIHN5c3RlbSBtYXkgcmVxdWlyZSBtb3JlIHRoYW4gdGhlIGFkdmVydGlzZWQgbWluaW11bQotICByZXF1aXJlbWVudCBvZiA2NCBNQiBvZiBzeXN0ZW0gbWVtb3J5LgorSnVtYm8gRnJhbWVzIFN5c3RlbSBSZXF1aXJlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgaGF2ZSBiZWVuIG9ic2VydmVkIG9uIExpbnV4IHN5c3RlbXMgd2l0aCA2NCBNQgorb2YgUkFNIG9yIGxlc3MgdGhhdCBhcmUgcnVubmluZyBKdW1ibyBGcmFtZXMuICBJZiB5b3UgYXJlIHVzaW5nIEp1bWJvCitGcmFtZXMsIHlvdXIgc3lzdGVtIG1heSByZXF1aXJlIG1vcmUgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBtaW5pbXVtCityZXF1aXJlbWVudCBvZiA2NCBNQiBvZiBzeXN0ZW0gbWVtb3J5LgogCi0gIFBlcmZvcm1hbmNlIERlZ3JhZGF0aW9uIHdpdGggSnVtYm8gRnJhbWVzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQZXJmb3JtYW5jZSBEZWdyYWRhdGlvbiB3aXRoIEp1bWJvIEZyYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgbWF5IGJlIG9ic2VydmVkIGluIHNvbWUgSnVtYm8gZnJhbWVzCitlbnZpcm9ubWVudHMuICBJZiB0aGlzIGlzIG9ic2VydmVkLCBpbmNyZWFzaW5nIHRoZSBhcHBsaWNhdGlvbidzIHNvY2tldAorYnVmZmVyIHNpemUgYW5kL29yIGluY3JlYXNpbmcgdGhlIC9wcm9jL3N5cy9uZXQvaXB2NC90Y3BfKm1lbSBlbnRyeSB2YWx1ZXMKK21heSBoZWxwLiAgU2VlIHRoZSBzcGVjaWZpYyBhcHBsaWNhdGlvbiBtYW51YWwgYW5kCisvdXNyL3NyYy9saW51eCovRG9jdW1lbnRhdGlvbi8KK25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgogCi0gIERlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgcGVyZm9ybWFuY2UgbWF5IGJlIG9ic2VydmVkIGluIHNvbWUgSnVtYm8gZnJhbWVzCi0gIGVudmlyb25tZW50cy4gSWYgdGhpcyBpcyBvYnNlcnZlZCwgaW5jcmVhc2luZyB0aGUgYXBwbGljYXRpb24ncyBzb2NrZXQKLSAgYnVmZmVyIHNpemUgYW5kL29yIGluY3JlYXNpbmcgdGhlIC9wcm9jL3N5cy9uZXQvaXB2NC90Y3BfKm1lbSBlbnRyeSB2YWx1ZXMKLSAgbWF5IGhlbHAuIFNlZSB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb24gbWFudWFsIGFuZAotICAvdXNyL3NyYy9saW51eCovRG9jdW1lbnRhdGlvbi8KLSAgbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGZvciBtb3JlIGRldGFpbHMuCitKdW1ibyBGcmFtZXMgb24gRm91bmRyeSBCaWdJcm9uIDgwMDAgc3dpdGNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBhIGtub3duIGlzc3VlIHVzaW5nIEp1bWJvIGZyYW1lcyB3aGVuIGNvbm5lY3RlZCB0byBhIEZvdW5kcnkKK0JpZ0lyb24gODAwMCBzd2l0Y2guICBUaGlzIGlzIGEgM3JkIHBhcnR5IGxpbWl0YXRpb24uICBJZiB5b3UgZXhwZXJpZW5jZQorbG9zcyBvZiBwYWNrZXRzLCBsb3dlciB0aGUgTVRVIHNpemUuCiAKLSAgSnVtYm8gZnJhbWVzIG9uIEZvdW5kcnkgQmlnSXJvbiA4MDAwIHN3aXRjaAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIFRoZXJlIGlzIGEga25vd24gaXNzdWUgdXNpbmcgSnVtYm8gZnJhbWVzIHdoZW4gY29ubmVjdGVkIHRvIGEgRm91bmRyeQotICBCaWdJcm9uIDgwMDAgc3dpdGNoLiBUaGlzIGlzIGEgM3JkIHBhcnR5IGxpbWl0YXRpb24uIElmIHlvdSBleHBlcmllbmNlCi0gIGxvc3Mgb2YgcGFja2V0cywgbG93ZXIgdGhlIE1UVSBzaXplLgorQWxsb2NhdGluZyBSeCBCdWZmZXJzIHdoZW4gVXNpbmcgSnVtYm8gRnJhbWVzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGxvY2F0aW5nIFJ4IGJ1ZmZlcnMgd2hlbiB1c2luZyBKdW1ibyBGcmFtZXMgb24gMi42Lngga2VybmVscyBtYXkgZmFpbCBpZiAKK3RoZSBhdmFpbGFibGUgbWVtb3J5IGlzIGhlYXZpbHkgZnJhZ21lbnRlZC4gVGhpcyBpc3N1ZSBtYXkgYmUgc2VlbiB3aXRoIFBDSS1YIAorYWRhcHRlcnMgb3Igd2l0aCBwYWNrZXQgc3BsaXQgZGlzYWJsZWQuIFRoaXMgY2FuIGJlIHJlZHVjZWQgb3IgZWxpbWluYXRlZCAKK2J5IGNoYW5naW5nIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIG1lbW9yeSBmb3IgcmVjZWl2ZSBidWZmZXIgYWxsb2NhdGlvbiwgYnkKK2luY3JlYXNpbmcgL3Byb2Mvc3lzL3ZtL21pbl9mcmVlX2tieXRlcy4gCiAKLSAgTXVsdGlwbGUgSW50ZXJmYWNlcyBvbiBTYW1lIEV0aGVybmV0IEJyb2FkY2FzdCBOZXR3b3JrCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTXVsdGlwbGUgSW50ZXJmYWNlcyBvbiBTYW1lIEV0aGVybmV0IEJyb2FkY2FzdCBOZXR3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0R1ZSB0byB0aGUgZGVmYXVsdCBBUlAgYmVoYXZpb3Igb24gTGludXgsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlCitvbmUgc3lzdGVtIG9uIHR3byBJUCBuZXR3b3JrcyBpbiB0aGUgc2FtZSBFdGhlcm5ldCBicm9hZGNhc3QgZG9tYWluCisobm9uLXBhcnRpdGlvbmVkIHN3aXRjaCkgYmVoYXZlIGFzIGV4cGVjdGVkLiAgQWxsIEV0aGVybmV0IGludGVyZmFjZXMKK3dpbGwgcmVzcG9uZCB0byBJUCB0cmFmZmljIGZvciBhbnkgSVAgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgc3lzdGVtLgorVGhpcyByZXN1bHRzIGluIHVuYmFsYW5jZWQgcmVjZWl2ZSB0cmFmZmljLgogCi0gIER1ZSB0byB0aGUgZGVmYXVsdCBBUlAgYmVoYXZpb3Igb24gTGludXgsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlCi0gIG9uZSBzeXN0ZW0gb24gdHdvIElQIG5ldHdvcmtzIGluIHRoZSBzYW1lIEV0aGVybmV0IGJyb2FkY2FzdCBkb21haW4KLSAgKG5vbi1wYXJ0aXRpb25lZCBzd2l0Y2gpIGJlaGF2ZSBhcyBleHBlY3RlZC4gQWxsIEV0aGVybmV0IGludGVyZmFjZXMKLSAgd2lsbCByZXNwb25kIHRvIElQIHRyYWZmaWMgZm9yIGFueSBJUCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBzeXN0ZW0uCi0gIFRoaXMgcmVzdWx0cyBpbiB1bmJhbGFuY2VkIHJlY2VpdmUgdHJhZmZpYy4KK0lmIHlvdSBoYXZlIG11bHRpcGxlIGludGVyZmFjZXMgaW4gYSBzZXJ2ZXIsIGVpdGhlciB0dXJuIG9uIEFSUAorZmlsdGVyaW5nIGJ5IGVudGVyaW5nOgogCi0gIElmIHlvdSBoYXZlIG11bHRpcGxlIGludGVyZmFjZXMgaW4gYSBzZXJ2ZXIsIGVpdGhlciB0dXJuIG9uIEFSUAotICBmaWx0ZXJpbmcgYnkgZW50ZXJpbmc6CisgICAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2FycF9maWx0ZXIKKyh0aGlzIG9ubHkgd29ya3MgaWYgeW91ciBrZXJuZWwncyB2ZXJzaW9uIGlzIGhpZ2hlciB0aGFuIDIuNC41KSwKIAotICAgICAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2FycF9maWx0ZXIKLSAgKHRoaXMgb25seSB3b3JrcyBpZiB5b3VyIGtlcm5lbCdzIHZlcnNpb24gaXMgaGlnaGVyIHRoYW4gMi40LjUpLAorTk9URTogVGhpcyBzZXR0aW5nIGlzIG5vdCBzYXZlZCBhY3Jvc3MgcmVib290cy4gIFRoZSBjb25maWd1cmF0aW9uCitjaGFuZ2UgY2FuIGJlIG1hZGUgcGVybWFuZW50IGJ5IGFkZGluZyB0aGUgbGluZToKKyAgICBuZXQuaXB2NC5jb25mLmFsbC5hcnBfZmlsdGVyID0gMQordG8gdGhlIGZpbGUgL2V0Yy9zeXNjdGwuY29uZgogCi0gIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuIFRoZSBjb25maWd1cmF0aW9uCi0gIGNoYW5nZSBjYW4gYmUgbWFkZSBwZXJtYW5lbnQgYnkgYWRkaW5nIHRoZSBsaW5lOgotICAgICAgbmV0LmlwdjQuY29uZi5hbGwuYXJwX2ZpbHRlciA9IDEKLSAgdG8gdGhlIGZpbGUgL2V0Yy9zeXNjdGwuY29uZgorICAgICAgb3IsCiAKLSAgICAgICAgb3IsCitpbnN0YWxsIHRoZSBpbnRlcmZhY2VzIGluIHNlcGFyYXRlIGJyb2FkY2FzdCBkb21haW5zIChlaXRoZXIgaW4KK2RpZmZlcmVudCBzd2l0Y2hlcyBvciBpbiBhIHN3aXRjaCBwYXJ0aXRpb25lZCB0byBWTEFOcykuCiAKLSAgaW5zdGFsbCB0aGUgaW50ZXJmYWNlcyBpbiBzZXBhcmF0ZSBicm9hZGNhc3QgZG9tYWlucyAoZWl0aGVyIGluCi0gIGRpZmZlcmVudCBzd2l0Y2hlcyBvciBpbiBhIHN3aXRjaCBwYXJ0aXRpb25lZCB0byBWTEFOcykuCis4MjU0MS84MjU0NyBjYW4ndCBsaW5rIG9yIGFyZSBzbG93IHRvIGxpbmsgd2l0aCBzb21lIGxpbmsgcGFydG5lcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBhIGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCA4MjU0MS84MjU0NyBhbmQgc29tZQorbG93LWVuZCBzd2l0Y2hlcyB3aGVyZSB0aGUgbGluayB3aWxsIG5vdCBiZSBlc3RhYmxpc2hlZCwgb3Igd2lsbAorYmUgc2xvdyB0byBlc3RhYmxpc2guICBJbiBwYXJ0aWN1bGFyLCB0aGVzZSBzd2l0Y2hlcyBhcmUga25vd24gdG8KK2JlIGluY29tcGF0aWJsZSB3aXRoIDgyNTQxLzgyNTQ3OgogCi0gIDgyNTQxLzgyNTQ3IGNhbid0IGxpbmsgb3IgYXJlIHNsb3cgdG8gbGluayB3aXRoIHNvbWUgbGluayBwYXJ0bmVycwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFBsYW5leCBGWEctMDhURQorICAgIEktTyBEYXRhIEVURy1TSDgKIAotICBUaGVyZSBpcyBhIGtub3duIGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCA4MjU0MS84MjU0NyBhbmQgc29tZQotICBsb3ctZW5kIHN3aXRjaGVzIHdoZXJlIHRoZSBsaW5rIHdpbGwgbm90IGJlIGVzdGFibGlzaGVkLCBvciB3aWxsCi0gIGJlIHNsb3cgdG8gZXN0YWJsaXNoLiAgSW4gcGFydGljdWxhciwgdGhlc2Ugc3dpdGNoZXMgYXJlIGtub3duIHRvCi0gIGJlIGluY29tcGF0aWJsZSB3aXRoIDgyNTQxLzgyNTQ3OgorVG8gd29ya2Fyb3VuZCB0aGlzIGlzc3VlLCB0aGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCB3aXRoIGFuIG92ZXJyaWRlCitvZiB0aGUgUEhZJ3MgbWFzdGVyL3NsYXZlIHNldHRpbmcuICBGb3JjaW5nIG1hc3RlciBvciBmb3JjaW5nIHNsYXZlCittb2RlIHdpbGwgaW1wcm92ZSB0aW1lLXRvLWxpbmsuCiAKLSAgICAgIFBsYW5leCBGWEctMDhURQotICAgICAgSS1PIERhdGEgRVRHLVNIOAorICAgICMgbWFrZSBDRkxBR1NfRVhUUkE9LURFMTAwMF9NQVNURVJfU0xBVkU9PG4+CiAKLSAgVG8gd29ya2Fyb3VuZCB0aGlzIGlzc3VlLCB0aGUgZHJpdmVyIGNhbiBiZSBjb21waWxlZCB3aXRoIGFuIG92ZXJyaWRlCi0gIG9mIHRoZSBQSFkncyBtYXN0ZXIvc2xhdmUgc2V0dGluZy4gIEZvcmNpbmcgbWFzdGVyIG9yIGZvcmNpbmcgc2xhdmUKLSAgbW9kZSB3aWxsIGltcHJvdmUgdGltZS10by1saW5rLgorV2hlcmUgPG4+IGlzOgogCi0gICAgICAjIG1ha2UgRVhUUkFfQ0ZMQUdTPS1ERTEwMDBfTUFTVEVSX1NMQVZFPTxuPgorICAgIDAgPSBIYXJkd2FyZSBkZWZhdWx0CisgICAgMSA9IE1hc3RlciBtb2RlCisgICAgMiA9IFNsYXZlIG1vZGUKKyAgICAzID0gQXV0byBtYXN0ZXIvc2xhdmUKIAotICBXaGVyZSA8bj4gaXM6CitEaXNhYmxlIHJ4IGZsb3cgY29udHJvbCB3aXRoIGV0aHRvb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gb3JkZXIgdG8gZGlzYWJsZSByZWNlaXZlIGZsb3cgY29udHJvbCB1c2luZyBldGh0b29sLCB5b3UgbXVzdCB0dXJuCitvZmYgYXV0by1uZWdvdGlhdGlvbiBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUuCiAKLSAgICAgIDAgPSBIYXJkd2FyZSBkZWZhdWx0Ci0gICAgICAxID0gTWFzdGVyIG1vZGUKLSAgICAgIDIgPSBTbGF2ZSBtb2RlCi0gICAgICAzID0gQXV0byBtYXN0ZXIvc2xhdmUKK0ZvciBleGFtcGxlOgogCi0gIERpc2FibGUgcnggZmxvdyBjb250cm9sIHdpdGggZXRodG9vbAotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGV0aHRvb2wgLUEgZXRoPyBhdXRvbmVnIG9mZiByeCBvZmYKIAotICBJbiBvcmRlciB0byBkaXNhYmxlIHJlY2VpdmUgZmxvdyBjb250cm9sIHVzaW5nIGV0aHRvb2wsIHlvdSBtdXN0IHR1cm4KLSAgb2ZmIGF1dG8tbmVnb3RpYXRpb24gb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lLgotCi0gIEZvciBleGFtcGxlOgotCi0gICAgIGV0aHRvb2wgLUEgZXRoPyBhdXRvbmVnIG9mZiByeCBvZmYKK1VucGx1Z2dpbmcgbmV0d29yayBjYWJsZSB3aGlsZSBldGh0b29sIC1wIGlzIHJ1bm5pbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luIGtlcm5lbCB2ZXJzaW9ucyAyLjUuNTAgYW5kIGxhdGVyIChpbmNsdWRpbmcgMi42IGtlcm5lbCksIHVucGx1Z2dpbmcKK3RoZSBuZXR3b3JrIGNhYmxlIHdoaWxlIGV0aHRvb2wgLXAgaXMgcnVubmluZyB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8KK2JlY29tZSB1bnJlc3BvbnNpdmUgdG8ga2V5Ym9hcmQgY29tbWFuZHMsIGV4Y2VwdCBmb3IgY29udHJvbC1hbHQtZGVsZXRlLgorUmVzdGFydGluZyB0aGUgc3lzdGVtIGFwcGVhcnMgdG8gYmUgdGhlIG9ubHkgcmVtZWR5LgogCiAKIFN1cHBvcnQKQEAgLTU0OCwyNCArNjQzLDEwIEBACiAKICAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20KIAotICAgIG9yIHRoZSBJbnRlbCBXaXJlZCBOZXR3b3JraW5nIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZWZvcmdlIGF0Ogorb3IgdGhlIEludGVsIFdpcmVkIE5ldHdvcmtpbmcgcHJvamVjdCBob3N0ZWQgYnkgU291cmNlZm9yZ2UgYXQ6CiAKICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCiAKIElmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAoga2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKLXRvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKLQotCi1MaWNlbnNlCi09PT09PT09Ci0KLVRoaXMgc29mdHdhcmUgcHJvZ3JhbSBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBsaWNlbnNlIGFncmVlbWVudAotYmV0d2VlbiB5b3UgKCdMaWNlbnNlZScpIGFuZCBJbnRlbC4gRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgb3IgYW55Ci1hc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5Ci1yZWFkIHRoZSBmdWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBmaWxlIENPUFlJTkcgbG9jYXRlZCBpbiB0aGlzIHNvZnR3YXJlCi1wYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzCi1BZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdAotaW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLgotCi0qIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KK3RvIHRoZSBpc3N1ZSB0byBlMTAwMC1kZXZlbEBsaXN0cy5zZi5uZXQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKaW5kZXggZmQzYzBjMC4uYTBmNjg0MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTEwMSw2ICsxMDEsMTEgQEAKIAogVENQIHZhcmlhYmxlczogCiAKK3NvbWF4Y29ubiAtIElOVEVHRVIKKwlMaW1pdCBvZiBzb2NrZXQgbGlzdGVuKCkgYmFja2xvZywga25vd24gaW4gdXNlcnNwYWNlIGFzIFNPTUFYQ09OTi4KKwlEZWZhdWx0cyB0byAxMjguICBTZWUgYWxzbyB0Y3BfbWF4X3N5bl9iYWNrbG9nIGZvciBhZGRpdGlvbmFsIHR1bmluZworCWZvciBUQ1Agc29ja2V0cy4KKwogdGNwX2FiYyAtIElOVEVHRVIKIAlDb250cm9scyBBcHByb3ByaWF0ZSBCeXRlIENvdW50IChBQkMpIGRlZmluZWQgaW4gUkZDMzQ2NS4KIAlBQkMgaXMgYSB3YXkgb2YgaW5jcmVhc2luZyBjb25nZXN0aW9uIHdpbmRvdyAoY3duZCkgbW9yZSBzbG93bHkKQEAgLTExMiwxNSArMTE3LDY4IEBACiAJCSAgb2YgdHdvIHNlZ21lbnRzIHRvIGNvbXBlbnNhdGUgZm9yIGRlbGF5ZWQgYWNrbm93bGVkZ21lbnRzLgogCURlZmF1bHQ6IDAgKG9mZikKIAotdGNwX3N5bl9yZXRyaWVzIC0gSU5URUdFUgotCU51bWJlciBvZiB0aW1lcyBpbml0aWFsIFNZTnMgZm9yIGFuIGFjdGl2ZSBUQ1AgY29ubmVjdGlvbiBhdHRlbXB0Ci0Jd2lsbCBiZSByZXRyYW5zbWl0dGVkLiBTaG91bGQgbm90IGJlIGhpZ2hlciB0aGFuIDI1NS4gRGVmYXVsdCB2YWx1ZQotCWlzIDUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIH4xODBzZWNvbmRzLgordGNwX2Fib3J0X29uX292ZXJmbG93IC0gQk9PTEVBTgorCUlmIGxpc3RlbmluZyBzZXJ2aWNlIGlzIHRvbyBzbG93IHRvIGFjY2VwdCBuZXcgY29ubmVjdGlvbnMsCisJcmVzZXQgdGhlbS4gRGVmYXVsdCBzdGF0ZSBpcyBGQUxTRS4gSXQgbWVhbnMgdGhhdCBpZiBvdmVyZmxvdworCW9jY3VycmVkIGR1ZSB0byBhIGJ1cnN0LCBjb25uZWN0aW9uIHdpbGwgcmVjb3Zlci4gRW5hYmxlIHRoaXMKKwlvcHRpb24gX29ubHlfIGlmIHlvdSBhcmUgcmVhbGx5IHN1cmUgdGhhdCBsaXN0ZW5pbmcgZGFlbW9uCisJY2Fubm90IGJlIHR1bmVkIHRvIGFjY2VwdCBjb25uZWN0aW9ucyBmYXN0ZXIuIEVuYWJsaW5nIHRoaXMKKwlvcHRpb24gY2FuIGhhcm0gY2xpZW50cyBvZiB5b3VyIHNlcnZlci4KIAotdGNwX3N5bmFja19yZXRyaWVzIC0gSU5URUdFUgotCU51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsCi0JYmUgcmV0cmFuc21pdHRlZC4gU2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAyNTUuIERlZmF1bHQgdmFsdWUKLQlpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byB+MTgwc2Vjb25kcy4KK3RjcF9hZHZfd2luX3NjYWxlIC0gSU5URUdFUgorCUNvdW50IGJ1ZmZlcmluZyBvdmVyaGVhZCBhcyBieXRlcy8yXnRjcF9hZHZfd2luX3NjYWxlCisJKGlmIHRjcF9hZHZfd2luX3NjYWxlID4gMCkgb3IgYnl0ZXMtYnl0ZXMvMl4oLXRjcF9hZHZfd2luX3NjYWxlKSwKKwlpZiBpdCBpcyA8PSAwLgorCURlZmF1bHQ6IDIKKwordGNwX2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sIC0gU1RSSU5HCisJU2hvdy9zZXQgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBjaG9pY2VzIGF2YWlsYWJsZSB0byBub24tcHJpdmlsZWdlZAorCXByb2Nlc3Nlcy4gVGhlIGxpc3QgaXMgYSBzdWJzZXQgb2YgdGhvc2UgbGlzdGVkIGluCisJdGNwX2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2wuCisJRGVmYXVsdCBpcyAicmVubyIgYW5kIHRoZSBkZWZhdWx0IHNldHRpbmcgKHRjcF9jb25nZXN0aW9uX2NvbnRyb2wpLgorCit0Y3BfYXBwX3dpbiAtIElOVEVHRVIKKwlSZXNlcnZlIG1heCh3aW5kb3cvMl50Y3BfYXBwX3dpbiwgbXNzKSBvZiB3aW5kb3cgZm9yIGFwcGxpY2F0aW9uCisJYnVmZmVyLiBWYWx1ZSAwIGlzIHNwZWNpYWwsIGl0IG1lYW5zIHRoYXQgbm90aGluZyBpcyByZXNlcnZlZC4KKwlEZWZhdWx0OiAzMQorCit0Y3BfYXZhaWxhYmxlX2Nvbmdlc3Rpb25fY29udHJvbCAtIFNUUklORworCVNob3dzIHRoZSBhdmFpbGFibGUgY29uZ2VzdGlvbiBjb250cm9sIGNob2ljZXMgdGhhdCBhcmUgcmVnaXN0ZXJlZC4KKwlNb3JlIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zIG1heSBiZSBhdmFpbGFibGUgYXMgbW9kdWxlcywKKwlidXQgbm90IGxvYWRlZC4KKwordGNwX2Nvbmdlc3Rpb25fY29udHJvbCAtIFNUUklORworCVNldCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSB0byBiZSB1c2VkIGZvciBuZXcKKwljb25uZWN0aW9ucy4gVGhlIGFsZ29yaXRobSAicmVubyIgaXMgYWx3YXlzIGF2YWlsYWJsZSwgYnV0CisJYWRkaXRpb25hbCBjaG9pY2VzIG1heSBiZSBhdmFpbGFibGUgYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uCisJRGVmYXVsdCBpcyBzZXQgYXMgcGFydCBvZiBrZXJuZWwgY29uZmlndXJhdGlvbi4KKwordGNwX2RzYWNrIC0gQk9PTEVBTgorCUFsbG93cyBUQ1AgdG8gc2VuZCAiZHVwbGljYXRlIiBTQUNLcy4KKwordGNwX2VjbiAtIEJPT0xFQU4KKwlFbmFibGUgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gaW4gVENQLgorCit0Y3BfZmFjayAtIEJPT0xFQU4KKwlFbmFibGUgRkFDSyBjb25nZXN0aW9uIGF2b2lkYW5jZSBhbmQgZmFzdCByZXRyYW5zbWlzc2lvbi4KKwlUaGUgdmFsdWUgaXMgbm90IHVzZWQsIGlmIHRjcF9zYWNrIGlzIG5vdCBlbmFibGVkLgorCit0Y3BfZmluX3RpbWVvdXQgLSBJTlRFR0VSCisJVGltZSB0byBob2xkIHNvY2tldCBpbiBzdGF0ZSBGSU4tV0FJVC0yLCBpZiBpdCB3YXMgY2xvc2VkCisJYnkgb3VyIHNpZGUuIFBlZXIgY2FuIGJlIGJyb2tlbiBhbmQgbmV2ZXIgY2xvc2UgaXRzIHNpZGUsCisJb3IgZXZlbiBkaWVkIHVuZXhwZWN0ZWRseS4gRGVmYXVsdCB2YWx1ZSBpcyA2MHNlYy4KKwlVc3VhbCB2YWx1ZSB1c2VkIGluIDIuMiB3YXMgMTgwIHNlY29uZHMsIHlvdSBtYXkgcmVzdG9yZQorCWl0LCBidXQgcmVtZW1iZXIgdGhhdCBpZiB5b3VyIG1hY2hpbmUgaXMgZXZlbiB1bmRlcmxvYWRlZCBXRUIgc2VydmVyLAorCXlvdSByaXNrIHRvIG92ZXJmbG93IG1lbW9yeSB3aXRoIGtpbG90b25zIG9mIGRlYWQgc29ja2V0cywKKwlGSU4tV0FJVC0yIHNvY2tldHMgYXJlIGxlc3MgZGFuZ2Vyb3VzIHRoYW4gRklOLVdBSVQtMSwKKwliZWNhdXNlIHRoZXkgZWF0IG1heGltdW0gMS41SyBvZiBtZW1vcnksIGJ1dCB0aGV5IHRlbmQKKwl0byBsaXZlIGxvbmdlci4JQ2YuIHRjcF9tYXhfb3JwaGFucy4KKwordGNwX2ZydG8gLSBCT09MRUFOCisJRW5hYmxlcyBGLVJUTywgYW4gZW5oYW5jZWQgcmVjb3ZlcnkgYWxnb3JpdGhtIGZvciBUQ1AgcmV0cmFuc21pc3Npb24KKwl0aW1lb3V0cy4gIEl0IGlzIHBhcnRpY3VsYXJseSBiZW5lZmljaWFsIGluIHdpcmVsZXNzIGVudmlyb25tZW50cworCXdoZXJlIHBhY2tldCBsb3NzIGlzIHR5cGljYWxseSBkdWUgdG8gcmFuZG9tIHJhZGlvIGludGVyZmVyZW5jZQorCXJhdGhlciB0aGFuIGludGVybWVkaWF0ZSByb3V0ZXIgY29uZ2VzdGlvbi4KIAogdGNwX2tlZXBhbGl2ZV90aW1lIC0gSU5URUdFUgogCUhvdyBvZnRlbiBUQ1Agc2VuZHMgb3V0IGtlZXBhbGl2ZSBtZXNzYWdlcyB3aGVuIGtlZXBhbGl2ZSBpcyBlbmFibGVkLgpAQCAtMTM2LDU0ICsxOTQsMTMgQEAKIAlhZnRlciBwcm9iZXMgc3RhcnRlZC4gRGVmYXVsdCB2YWx1ZTogNzVzZWMgaS5lLiBjb25uZWN0aW9uCiAJd2lsbCBiZSBhYm9ydGVkIGFmdGVyIH4xMSBtaW51dGVzIG9mIHJldHJpZXMuCiAKLXRjcF9yZXRyaWVzMSAtIElOVEVHRVIKLQlIb3cgbWFueSB0aW1lcyB0byByZXRyeSBiZWZvcmUgZGVjaWRpbmcgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmcKLQlhbmQgaXQgaXMgbmVjZXNzYXJ5IHRvIHJlcG9ydCB0aGlzIHN1c3BpY2lvbiB0byBuZXR3b3JrIGxheWVyLgotCU1pbmltYWwgUkZDIHZhbHVlIGlzIDMsIGl0IGlzIGRlZmF1bHQsIHdoaWNoIGNvcnJlc3BvbmRzCi0JdG8gfjNzZWMtOG1pbiBkZXBlbmRpbmcgb24gUlRPLgotCi10Y3BfcmV0cmllczIgLSBJTlRFR0VSCi0JSG93IG1heSB0aW1lcyB0byByZXRyeSBiZWZvcmUga2lsbGluZyBhbGl2ZSBUQ1AgY29ubmVjdGlvbi4KLQlSRkMxMTIyIHNheXMgdGhhdCB0aGUgbGltaXQgc2hvdWxkIGJlIGxvbmdlciB0aGFuIDEwMCBzZWMuCi0JSXQgaXMgdG9vIHNtYWxsIG51bWJlci4JRGVmYXVsdCB2YWx1ZSAxNSBjb3JyZXNwb25kcyB0byB+MTMtMzBtaW4KLQlkZXBlbmRpbmcgb24gUlRPLgotCi10Y3Bfb3JwaGFuX3JldHJpZXMgLSBJTlRFR0VSCi0JSG93IG1heSB0aW1lcyB0byByZXRyeSBiZWZvcmUga2lsbGluZyBUQ1AgY29ubmVjdGlvbiwgY2xvc2VkCi0JYnkgb3VyIHNpZGUuIERlZmF1bHQgdmFsdWUgNyBjb3JyZXNwb25kcyB0byB+NTBzZWMtMTZtaW4KLQlkZXBlbmRpbmcgb24gUlRPLiBJZiB5b3UgbWFjaGluZSBpcyBsb2FkZWQgV0VCIHNlcnZlciwKLQl5b3Ugc2hvdWxkIHRoaW5rIGFib3V0IGxvd2VyaW5nIHRoaXMgdmFsdWUsIHN1Y2ggc29ja2V0cwotCW1heSBjb25zdW1lIHNpZ25pZmljYW50IHJlc291cmNlcy4gQ2YuIHRjcF9tYXhfb3JwaGFucy4KLQotdGNwX2Zpbl90aW1lb3V0IC0gSU5URUdFUgotCVRpbWUgdG8gaG9sZCBzb2NrZXQgaW4gc3RhdGUgRklOLVdBSVQtMiwgaWYgaXQgd2FzIGNsb3NlZAotCWJ5IG91ciBzaWRlLiBQZWVyIGNhbiBiZSBicm9rZW4gYW5kIG5ldmVyIGNsb3NlIGl0cyBzaWRlLAotCW9yIGV2ZW4gZGllZCB1bmV4cGVjdGVkbHkuIERlZmF1bHQgdmFsdWUgaXMgNjBzZWMuCi0JVXN1YWwgdmFsdWUgdXNlZCBpbiAyLjIgd2FzIDE4MCBzZWNvbmRzLCB5b3UgbWF5IHJlc3RvcmUKLQlpdCwgYnV0IHJlbWVtYmVyIHRoYXQgaWYgeW91ciBtYWNoaW5lIGlzIGV2ZW4gdW5kZXJsb2FkZWQgV0VCIHNlcnZlciwKLQl5b3UgcmlzayB0byBvdmVyZmxvdyBtZW1vcnkgd2l0aCBraWxvdG9ucyBvZiBkZWFkIHNvY2tldHMsCi0JRklOLVdBSVQtMiBzb2NrZXRzIGFyZSBsZXNzIGRhbmdlcm91cyB0aGFuIEZJTi1XQUlULTEsCi0JYmVjYXVzZSB0aGV5IGVhdCBtYXhpbXVtIDEuNUsgb2YgbWVtb3J5LCBidXQgdGhleSB0ZW5kCi0JdG8gbGl2ZSBsb25nZXIuCUNmLiB0Y3BfbWF4X29ycGhhbnMuCi0KLXRjcF9tYXhfdHdfYnVja2V0cyAtIElOVEVHRVIKLQlNYXhpbWFsIG51bWJlciBvZiB0aW1ld2FpdCBzb2NrZXRzIGhlbGQgYnkgc3lzdGVtIHNpbXVsdGFuZW91c2x5LgotCUlmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkIHRpbWUtd2FpdCBzb2NrZXQgaXMgaW1tZWRpYXRlbHkgZGVzdHJveWVkCi0JYW5kIHdhcm5pbmcgaXMgcHJpbnRlZC4gVGhpcyBsaW1pdCBleGlzdHMgb25seSB0byBwcmV2ZW50Ci0Jc2ltcGxlIERvUyBhdHRhY2tzLCB5b3UgX211c3RfIG5vdCBsb3dlciB0aGUgbGltaXQgYXJ0aWZpY2lhbGx5LAotCWJ1dCByYXRoZXIgaW5jcmVhc2UgaXQgKHByb2JhYmx5LCBhZnRlciBpbmNyZWFzaW5nIGluc3RhbGxlZCBtZW1vcnkpLAotCWlmIG5ldHdvcmsgY29uZGl0aW9ucyByZXF1aXJlIG1vcmUgdGhhbiBkZWZhdWx0IHZhbHVlLgotCi10Y3BfdHdfcmVjeWNsZSAtIEJPT0xFQU4KLQlFbmFibGUgZmFzdCByZWN5Y2xpbmcgVElNRS1XQUlUIHNvY2tldHMuIERlZmF1bHQgdmFsdWUgaXMgMC4KLQlJdCBzaG91bGQgbm90IGJlIGNoYW5nZWQgd2l0aG91dCBhZHZpY2UvcmVxdWVzdCBvZiB0ZWNobmljYWwKLQlleHBlcnRzLgotCi10Y3BfdHdfcmV1c2UgLSBCT09MRUFOCi0JQWxsb3cgdG8gcmV1c2UgVElNRS1XQUlUIHNvY2tldHMgZm9yIG5ldyBjb25uZWN0aW9ucyB3aGVuIGl0IGlzCi0Jc2FmZSBmcm9tIHByb3RvY29sIHZpZXdwb2ludC4gRGVmYXVsdCB2YWx1ZSBpcyAwLgotCUl0IHNob3VsZCBub3QgYmUgY2hhbmdlZCB3aXRob3V0IGFkdmljZS9yZXF1ZXN0IG9mIHRlY2huaWNhbAotCWV4cGVydHMuCit0Y3BfbG93X2xhdGVuY3kgLSBCT09MRUFOCisJSWYgc2V0LCB0aGUgVENQIHN0YWNrIG1ha2VzIGRlY2lzaW9ucyB0aGF0IHByZWZlciBsb3dlcgorCWxhdGVuY3kgYXMgb3Bwb3NlZCB0byBoaWdoZXIgdGhyb3VnaHB1dC4gIEJ5IGRlZmF1bHQsIHRoaXMKKwlvcHRpb24gaXMgbm90IHNldCBtZWFuaW5nIHRoYXQgaGlnaGVyIHRocm91Z2hwdXQgaXMgcHJlZmVycmVkLgorCUFuIGV4YW1wbGUgb2YgYW4gYXBwbGljYXRpb24gd2hlcmUgdGhpcyBkZWZhdWx0IHNob3VsZCBiZQorCWNoYW5nZWQgd291bGQgYmUgYSBCZW93dWxmIGNvbXB1dGUgY2x1c3Rlci4KKwlEZWZhdWx0OiAwCiAKIHRjcF9tYXhfb3JwaGFucyAtIElOVEVHRVIKIAlNYXhpbWFsIG51bWJlciBvZiBUQ1Agc29ja2V0cyBub3QgYXR0YWNoZWQgdG8gYW55IHVzZXIgZmlsZSBoYW5kbGUsCkBAIC0xOTcsNDEgKzIxNCw2IEBACiAJbW9yZSBhZ2dyZXNzaXZlbHkuIExldCBtZSB0byByZW1pbmQgYWdhaW46IGVhY2ggb3JwaGFuIGVhdHMKIAl1cCB0byB+NjRLIG9mIHVuc3dhcHBhYmxlIG1lbW9yeS4KIAotdGNwX2Fib3J0X29uX292ZXJmbG93IC0gQk9PTEVBTgotCUlmIGxpc3RlbmluZyBzZXJ2aWNlIGlzIHRvbyBzbG93IHRvIGFjY2VwdCBuZXcgY29ubmVjdGlvbnMsCi0JcmVzZXQgdGhlbS4gRGVmYXVsdCBzdGF0ZSBpcyBGQUxTRS4gSXQgbWVhbnMgdGhhdCBpZiBvdmVyZmxvdwotCW9jY3VycmVkIGR1ZSB0byBhIGJ1cnN0LCBjb25uZWN0aW9uIHdpbGwgcmVjb3Zlci4gRW5hYmxlIHRoaXMKLQlvcHRpb24gX29ubHlfIGlmIHlvdSBhcmUgcmVhbGx5IHN1cmUgdGhhdCBsaXN0ZW5pbmcgZGFlbW9uCi0JY2Fubm90IGJlIHR1bmVkIHRvIGFjY2VwdCBjb25uZWN0aW9ucyBmYXN0ZXIuIEVuYWJsaW5nIHRoaXMKLQlvcHRpb24gY2FuIGhhcm0gY2xpZW50cyBvZiB5b3VyIHNlcnZlci4KLQotdGNwX3N5bmNvb2tpZXMgLSBCT09MRUFOCi0JT25seSB2YWxpZCB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX1NZTkNPT0tJRVMKLQlTZW5kIG91dCBzeW5jb29raWVzIHdoZW4gdGhlIHN5biBiYWNrbG9nIHF1ZXVlIG9mIGEgc29ja2V0IAotCW92ZXJmbG93cy4gVGhpcyBpcyB0byBwcmV2ZW50IGFnYWluc3QgdGhlIGNvbW1vbiAnc3luIGZsb29kIGF0dGFjaycKLQlEZWZhdWx0OiBGQUxTRQotCi0JTm90ZSwgdGhhdCBzeW5jb29raWVzIGlzIGZhbGxiYWNrIGZhY2lsaXR5LgotCUl0IE1VU1QgTk9UIGJlIHVzZWQgdG8gaGVscCBoaWdobHkgbG9hZGVkIHNlcnZlcnMgdG8gc3RhbmQKLQlhZ2FpbnN0IGxlZ2FsIGNvbm5lY3Rpb24gcmF0ZS4gSWYgeW91IHNlZSBzeW5mbG9vZCB3YXJuaW5ncwotCWluIHlvdXIgbG9ncywgYnV0IGludmVzdGlnYXRpb24Jc2hvd3MgdGhhdCB0aGV5IG9jY3VyCi0JYmVjYXVzZSBvZiBvdmVybG9hZCB3aXRoIGxlZ2FsIGNvbm5lY3Rpb25zLCB5b3Ugc2hvdWxkIHR1bmUKLQlhbm90aGVyIHBhcmFtZXRlcnMgdW50aWwgdGhpcyB3YXJuaW5nIGRpc2FwcGVhci4KLQlTZWU6IHRjcF9tYXhfc3luX2JhY2tsb2csIHRjcF9zeW5hY2tfcmV0cmllcywgdGNwX2Fib3J0X29uX292ZXJmbG93LgotCi0Jc3luY29va2llcyBzZXJpb3VzbHkgdmlvbGF0ZSBUQ1AgcHJvdG9jb2wsIGRvIG5vdCBhbGxvdwotCXRvIHVzZSBUQ1AgZXh0ZW5zaW9ucywgY2FuIHJlc3VsdCBpbiBzZXJpb3VzIGRlZ3JhZGF0aW9uCi0Jb2Ygc29tZSBzZXJ2aWNlcyAoZi5lLiBTTVRQIHJlbGF5aW5nKSwgdmlzaWJsZSBub3QgYnkgeW91LAotCWJ1dCB5b3VyIGNsaWVudHMgYW5kIHJlbGF5cywgY29udGFjdGluZyB5b3UuIFdoaWxlIHlvdSBzZWUKLQlzeW5mbG9vZCB3YXJuaW5ncyBpbiBsb2dzIG5vdCBiZWluZyByZWFsbHkgZmxvb2RlZCwgeW91ciBzZXJ2ZXIKLQlpcyBzZXJpb3VzbHkgbWlzY29uZmlndXJlZC4KLQotdGNwX3N0ZHVyZyAtIEJPT0xFQU4KLQlVc2UgdGhlIEhvc3QgcmVxdWlyZW1lbnRzIGludGVycHJldGF0aW9uIG9mIHRoZSBUQ1AgdXJnIHBvaW50ZXIgZmllbGQuCi0JTW9zdCBob3N0cyB1c2UgdGhlIG9sZGVyIEJTRCBpbnRlcnByZXRhdGlvbiwgc28gaWYgeW91IHR1cm4gdGhpcyBvbgotCUxpbnV4IG1pZ2h0IG5vdCBjb21tdW5pY2F0ZSBjb3JyZWN0bHkgd2l0aCB0aGVtLgkKLQlEZWZhdWx0OiBGQUxTRSAKLQkKIHRjcF9tYXhfc3luX2JhY2tsb2cgLSBJTlRFR0VSCiAJTWF4aW1hbCBudW1iZXIgb2YgcmVtZW1iZXJlZCBjb25uZWN0aW9uIHJlcXVlc3RzLCB3aGljaCBhcmUKIAlzdGlsbCBkaWQgbm90IHJlY2VpdmUgYW4gYWNrbm93bGVkZ21lbnQgZnJvbSBjb25uZWN0aW5nIGNsaWVudC4KQEAgLTIzOSwyNCArMjIxLDM0IEBACiAJYW5kIDEyOCBmb3IgbG93IG1lbW9yeSBtYWNoaW5lcy4gSWYgc2VydmVyIHN1ZmZlcnMgb2Ygb3ZlcmxvYWQsCiAJdHJ5IHRvIGluY3JlYXNlIHRoaXMgbnVtYmVyLgogCi10Y3Bfd2luZG93X3NjYWxpbmcgLSBCT09MRUFOCi0JRW5hYmxlIHdpbmRvdyBzY2FsaW5nIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KK3RjcF9tYXhfdHdfYnVja2V0cyAtIElOVEVHRVIKKwlNYXhpbWFsIG51bWJlciBvZiB0aW1ld2FpdCBzb2NrZXRzIGhlbGQgYnkgc3lzdGVtIHNpbXVsdGFuZW91c2x5LgorCUlmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkIHRpbWUtd2FpdCBzb2NrZXQgaXMgaW1tZWRpYXRlbHkgZGVzdHJveWVkCisJYW5kIHdhcm5pbmcgaXMgcHJpbnRlZC4gVGhpcyBsaW1pdCBleGlzdHMgb25seSB0byBwcmV2ZW50CisJc2ltcGxlIERvUyBhdHRhY2tzLCB5b3UgX211c3RfIG5vdCBsb3dlciB0aGUgbGltaXQgYXJ0aWZpY2lhbGx5LAorCWJ1dCByYXRoZXIgaW5jcmVhc2UgaXQgKHByb2JhYmx5LCBhZnRlciBpbmNyZWFzaW5nIGluc3RhbGxlZCBtZW1vcnkpLAorCWlmIG5ldHdvcmsgY29uZGl0aW9ucyByZXF1aXJlIG1vcmUgdGhhbiBkZWZhdWx0IHZhbHVlLgogCi10Y3BfdGltZXN0YW1wcyAtIEJPT0xFQU4KLQlFbmFibGUgdGltZXN0YW1wcyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCit0Y3BfbWVtIC0gdmVjdG9yIG9mIDMgSU5URUdFUnM6IG1pbiwgcHJlc3N1cmUsIG1heAorCW1pbjogYmVsb3cgdGhpcyBudW1iZXIgb2YgcGFnZXMgVENQIGlzIG5vdCBib3RoZXJlZCBhYm91dCBpdHMKKwltZW1vcnkgYXBwZXRpdGUuCiAKLXRjcF9zYWNrIC0gQk9PTEVBTgotCUVuYWJsZSBzZWxlY3QgYWNrbm93bGVkZ21lbnRzIChTQUNLUykuCisJcHJlc3N1cmU6IHdoZW4gYW1vdW50IG9mIG1lbW9yeSBhbGxvY2F0ZWQgYnkgVENQIGV4Y2VlZHMgdGhpcyBudW1iZXIKKwlvZiBwYWdlcywgVENQIG1vZGVyYXRlcyBpdHMgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBlbnRlcnMgbWVtb3J5CisJcHJlc3N1cmUgbW9kZSwgd2hpY2ggaXMgZXhpdGVkIHdoZW4gbWVtb3J5IGNvbnN1bXB0aW9uIGZhbGxzCisJdW5kZXIgIm1pbiIuCiAKLXRjcF9mYWNrIC0gQk9PTEVBTgotCUVuYWJsZSBGQUNLIGNvbmdlc3Rpb24gYXZvaWRhbmNlIGFuZCBmYXN0IHJldHJhbnNtaXNzaW9uLgotCVRoZSB2YWx1ZSBpcyBub3QgdXNlZCwgaWYgdGNwX3NhY2sgaXMgbm90IGVuYWJsZWQuCisJbWF4OiBudW1iZXIgb2YgcGFnZXMgYWxsb3dlZCBmb3IgcXVldWVpbmcgYnkgYWxsIFRDUCBzb2NrZXRzLgogCi10Y3BfZHNhY2sgLSBCT09MRUFOCi0JQWxsb3dzIFRDUCB0byBzZW5kICJkdXBsaWNhdGUiIFNBQ0tzLgorCURlZmF1bHRzIGFyZSBjYWxjdWxhdGVkIGF0IGJvb3QgdGltZSBmcm9tIGFtb3VudCBvZiBhdmFpbGFibGUKKwltZW1vcnkuCiAKLXRjcF9lY24gLSBCT09MRUFOCi0JRW5hYmxlIEV4cGxpY2l0IENvbmdlc3Rpb24gTm90aWZpY2F0aW9uIGluIFRDUC4KK3RjcF9vcnBoYW5fcmV0cmllcyAtIElOVEVHRVIKKwlIb3cgbWF5IHRpbWVzIHRvIHJldHJ5IGJlZm9yZSBraWxsaW5nIFRDUCBjb25uZWN0aW9uLCBjbG9zZWQKKwlieSBvdXIgc2lkZS4gRGVmYXVsdCB2YWx1ZSA3IGNvcnJlc3BvbmRzIHRvIH41MHNlYy0xNm1pbgorCWRlcGVuZGluZyBvbiBSVE8uIElmIHlvdSBtYWNoaW5lIGlzIGxvYWRlZCBXRUIgc2VydmVyLAorCXlvdSBzaG91bGQgdGhpbmsgYWJvdXQgbG93ZXJpbmcgdGhpcyB2YWx1ZSwgc3VjaCBzb2NrZXRzCisJbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDZi4gdGNwX21heF9vcnBoYW5zLgogCiB0Y3BfcmVvcmRlcmluZyAtIElOVEVHRVIKIAlNYXhpbWFsIHJlb3JkZXJpbmcgb2YgcGFja2V0cyBpbiBhIFRDUCBzdHJlYW0uCkBAIC0yNjcsMjAgKzI1OSwyMyBAQAogCU9uIHJldHJhbnNtaXQgdHJ5IHRvIHNlbmQgYmlnZ2VyIHBhY2tldHMgdG8gd29yayBhcm91bmQgYnVncyBpbgogCWNlcnRhaW4gVENQIHN0YWNrcy4KIAotdGNwX3dtZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKLQltaW46IEFtb3VudCBvZiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldC4KLQlFYWNoIFRDUCBzb2NrZXQgaGFzIHJpZ2h0cyB0byB1c2UgaXQgZHVlIHRvIGZhY3Qgb2YgaXRzIGJpcnRoLgotCURlZmF1bHQ6IDRLCit0Y3BfcmV0cmllczEgLSBJTlRFR0VSCisJSG93IG1hbnkgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGRlY2lkaW5nIHRoYXQgc29tZXRoaW5nIGlzIHdyb25nCisJYW5kIGl0IGlzIG5lY2Vzc2FyeSB0byByZXBvcnQgdGhpcyBzdXNwaWNpb24gdG8gbmV0d29yayBsYXllci4KKwlNaW5pbWFsIFJGQyB2YWx1ZSBpcyAzLCBpdCBpcyBkZWZhdWx0LCB3aGljaCBjb3JyZXNwb25kcworCXRvIH4zc2VjLThtaW4gZGVwZW5kaW5nIG9uIFJUTy4KIAotCWRlZmF1bHQ6IEFtb3VudCBvZiBtZW1vcnkgYWxsb3dlZCBmb3Igc2VuZCBidWZmZXJzIGZvciBUQ1Agc29ja2V0Ci0JYnkgZGVmYXVsdC4gVGhpcyB2YWx1ZSBvdmVycmlkZXMgbmV0LmNvcmUud21lbV9kZWZhdWx0IHVzZWQKLQlieSBvdGhlciBwcm90b2NvbHMsIGl0IGlzIHVzdWFsbHkgbG93ZXIgdGhhbiBuZXQuY29yZS53bWVtX2RlZmF1bHQuCi0JRGVmYXVsdDogMTZLCit0Y3BfcmV0cmllczIgLSBJTlRFR0VSCisJSG93IG1heSB0aW1lcyB0byByZXRyeSBiZWZvcmUga2lsbGluZyBhbGl2ZSBUQ1AgY29ubmVjdGlvbi4KKwlSRkMxMTIyIHNheXMgdGhhdCB0aGUgbGltaXQgc2hvdWxkIGJlIGxvbmdlciB0aGFuIDEwMCBzZWMuCisJSXQgaXMgdG9vIHNtYWxsIG51bWJlci4JRGVmYXVsdCB2YWx1ZSAxNSBjb3JyZXNwb25kcyB0byB+MTMtMzBtaW4KKwlkZXBlbmRpbmcgb24gUlRPLgogCi0JbWF4OiBNYXhpbWFsIGFtb3VudCBvZiBtZW1vcnkgYWxsb3dlZCBmb3IgYXV0b21hdGljYWxseSBzZWxlY3RlZAotCXNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldC4gVGhpcyB2YWx1ZSBkb2VzIG5vdCBvdmVycmlkZQotCW5ldC5jb3JlLndtZW1fbWF4LCAic3RhdGljIiBzZWxlY3Rpb24gdmlhIFNPX1NOREJVRiBkb2VzIG5vdCB1c2UgdGhpcy4KLQlEZWZhdWx0OiAxMjhLCit0Y3BfcmZjMTMzNyAtIEJPT0xFQU4KKwlJZiBzZXQsIHRoZSBUQ1Agc3RhY2sgYmVoYXZlcyBjb25mb3JtaW5nIHRvIFJGQzEzMzcuIElmIHVuc2V0LAorCXdlIGFyZSBub3QgY29uZm9ybWluZyB0byBSRkMsIGJ1dCBwcmV2ZW50IFRDUCBUSU1FX1dBSVQKKwlhc3Nhc3NpbmF0aW9uLgorCURlZmF1bHQ6IDAKIAogdGNwX3JtZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKIAltaW46IE1pbmltYWwgc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciB1c2VkIGJ5IFRDUCBzb2NrZXRzLgpAQCAtMjk5LDc0ICsyOTQsOCBAQAogCW5ldC5jb3JlLnJtZW1fbWF4LCAic3RhdGljIiBzZWxlY3Rpb24gdmlhIFNPX1JDVkJVRiBkb2VzIG5vdCB1c2UgdGhpcy4KIAlEZWZhdWx0OiA4NzM4MCoyIGJ5dGVzLgogCi10Y3BfbWVtIC0gdmVjdG9yIG9mIDMgSU5URUdFUnM6IG1pbiwgcHJlc3N1cmUsIG1heAotCW1pbjogYmVsb3cgdGhpcyBudW1iZXIgb2YgcGFnZXMgVENQIGlzIG5vdCBib3RoZXJlZCBhYm91dCBpdHMKLQltZW1vcnkgYXBwZXRpdGUuCi0KLQlwcmVzc3VyZTogd2hlbiBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSBUQ1AgZXhjZWVkcyB0aGlzIG51bWJlcgotCW9mIHBhZ2VzLCBUQ1AgbW9kZXJhdGVzIGl0cyBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGVudGVycyBtZW1vcnkKLQlwcmVzc3VyZSBtb2RlLCB3aGljaCBpcyBleGl0ZWQgd2hlbiBtZW1vcnkgY29uc3VtcHRpb24gZmFsbHMKLQl1bmRlciAibWluIi4KLQotCW1heDogbnVtYmVyIG9mIHBhZ2VzIGFsbG93ZWQgZm9yIHF1ZXVlaW5nIGJ5IGFsbCBUQ1Agc29ja2V0cy4KLQotCURlZmF1bHRzIGFyZSBjYWxjdWxhdGVkIGF0IGJvb3QgdGltZSBmcm9tIGFtb3VudCBvZiBhdmFpbGFibGUKLQltZW1vcnkuCi0KLXRjcF9hcHBfd2luIC0gSU5URUdFUgotCVJlc2VydmUgbWF4KHdpbmRvdy8yXnRjcF9hcHBfd2luLCBtc3MpIG9mIHdpbmRvdyBmb3IgYXBwbGljYXRpb24KLQlidWZmZXIuIFZhbHVlIDAgaXMgc3BlY2lhbCwgaXQgbWVhbnMgdGhhdCBub3RoaW5nIGlzIHJlc2VydmVkLgotCURlZmF1bHQ6IDMxCi0KLXRjcF9hZHZfd2luX3NjYWxlIC0gSU5URUdFUgotCUNvdW50IGJ1ZmZlcmluZyBvdmVyaGVhZCBhcyBieXRlcy8yXnRjcF9hZHZfd2luX3NjYWxlCi0JKGlmIHRjcF9hZHZfd2luX3NjYWxlID4gMCkgb3IgYnl0ZXMtYnl0ZXMvMl4oLXRjcF9hZHZfd2luX3NjYWxlKSwKLQlpZiBpdCBpcyA8PSAwLgotCURlZmF1bHQ6IDIKLQotdGNwX3JmYzEzMzcgLSBCT09MRUFOCi0JSWYgc2V0LCB0aGUgVENQIHN0YWNrIGJlaGF2ZXMgY29uZm9ybWluZyB0byBSRkMxMzM3LiBJZiB1bnNldCwKLQl3ZSBhcmUgbm90IGNvbmZvcm1pbmcgdG8gUkZDLCBidXQgcHJldmVudCBUQ1AgVElNRV9XQUlUCi0JYXNzYXNzaW5hdGlvbi4gICAKLQlEZWZhdWx0OiAwCi0KLXRjcF9sb3dfbGF0ZW5jeSAtIEJPT0xFQU4KLQlJZiBzZXQsIHRoZSBUQ1Agc3RhY2sgbWFrZXMgZGVjaXNpb25zIHRoYXQgcHJlZmVyIGxvd2VyCi0JbGF0ZW5jeSBhcyBvcHBvc2VkIHRvIGhpZ2hlciB0aHJvdWdocHV0LiAgQnkgZGVmYXVsdCwgdGhpcwotCW9wdGlvbiBpcyBub3Qgc2V0IG1lYW5pbmcgdGhhdCBoaWdoZXIgdGhyb3VnaHB1dCBpcyBwcmVmZXJyZWQuCi0JQW4gZXhhbXBsZSBvZiBhbiBhcHBsaWNhdGlvbiB3aGVyZSB0aGlzIGRlZmF1bHQgc2hvdWxkIGJlCi0JY2hhbmdlZCB3b3VsZCBiZSBhIEJlb3d1bGYgY29tcHV0ZSBjbHVzdGVyLgotCURlZmF1bHQ6IDAKLQotdGNwX3Rzb193aW5fZGl2aXNvciAtIElOVEVHRVIKLSAgICAgICBUaGlzIGFsbG93cyBjb250cm9sIG92ZXIgd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBjb25nZXN0aW9uIHdpbmRvdwotICAgICAgIGNhbiBiZSBjb25zdW1lZCBieSBhIHNpbmdsZSBUU08gZnJhbWUuCi0gICAgICAgVGhlIHNldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjaG9pY2UgYmV0d2VlbiBidXJzdGluZXNzIGFuZAotICAgICAgIGJ1aWxkaW5nIGxhcmdlciBUU08gZnJhbWVzLgotICAgICAgIERlZmF1bHQ6IDMKLQotdGNwX2ZydG8gLSBCT09MRUFOCi0JRW5hYmxlcyBGLVJUTywgYW4gZW5oYW5jZWQgcmVjb3ZlcnkgYWxnb3JpdGhtIGZvciBUQ1AgcmV0cmFuc21pc3Npb24KLQl0aW1lb3V0cy4gIEl0IGlzIHBhcnRpY3VsYXJseSBiZW5lZmljaWFsIGluIHdpcmVsZXNzIGVudmlyb25tZW50cwotCXdoZXJlIHBhY2tldCBsb3NzIGlzIHR5cGljYWxseSBkdWUgdG8gcmFuZG9tIHJhZGlvIGludGVyZmVyZW5jZQotCXJhdGhlciB0aGFuIGludGVybWVkaWF0ZSByb3V0ZXIgY29uZ2VzdGlvbi4KLQotdGNwX2Nvbmdlc3Rpb25fY29udHJvbCAtIFNUUklORwotCVNldCB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobSB0byBiZSB1c2VkIGZvciBuZXcKLQljb25uZWN0aW9ucy4gVGhlIGFsZ29yaXRobSAicmVubyIgaXMgYWx3YXlzIGF2YWlsYWJsZSwgYnV0Ci0JYWRkaXRpb25hbCBjaG9pY2VzIG1heSBiZSBhdmFpbGFibGUgYmFzZWQgb24ga2VybmVsIGNvbmZpZ3VyYXRpb24uCi0KLXNvbWF4Y29ubiAtIElOVEVHRVIKLQlMaW1pdCBvZiBzb2NrZXQgbGlzdGVuKCkgYmFja2xvZywga25vd24gaW4gdXNlcnNwYWNlIGFzIFNPTUFYQ09OTi4KLQlEZWZhdWx0cyB0byAxMjguICBTZWUgYWxzbyB0Y3BfbWF4X3N5bl9iYWNrbG9nIGZvciBhZGRpdGlvbmFsIHR1bmluZwotCWZvciBUQ1Agc29ja2V0cy4KLQotdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3MgLSBCT09MRUFOCi0JSWYgc2V0LCBhc3N1bWUgbm8gcmVjZWlwdCBvZiBhIHdpbmRvdyBzY2FsaW5nIG9wdGlvbiBtZWFucyB0aGUKLQlyZW1vdGUgVENQIGlzIGJyb2tlbiBhbmQgdHJlYXRzIHRoZSB3aW5kb3cgYXMgYSBzaWduZWQgcXVhbnRpdHkuCi0JSWYgdW5zZXQsIGFzc3VtZSB0aGUgcmVtb3RlIFRDUCBpcyBub3QgYnJva2VuIGV2ZW4gaWYgd2UgZG8KLQlub3QgcmVjZWl2ZSBhIHdpbmRvdyBzY2FsaW5nIG9wdGlvbiBmcm9tIHRoZW0uCi0JRGVmYXVsdDogMAordGNwX3NhY2sgLSBCT09MRUFOCisJRW5hYmxlIHNlbGVjdCBhY2tub3dsZWRnbWVudHMgKFNBQ0tTKS4KIAogdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSAtIEJPT0xFQU4KIAlJZiBzZXQsIHByb3ZpZGUgUkZDMjg2MSBiZWhhdmlvciBhbmQgdGltZSBvdXQgdGhlIGNvbmdlc3Rpb24KQEAgLTM3NSw2ICszMDQsODkgQEAKIAliZSB0aW1lZCBvdXQgYWZ0ZXIgYW4gaWRsZSBwZXJpb2QuCiAJRGVmYXVsdDogMQogCit0Y3Bfc3RkdXJnIC0gQk9PTEVBTgorCVVzZSB0aGUgSG9zdCByZXF1aXJlbWVudHMgaW50ZXJwcmV0YXRpb24gb2YgdGhlIFRDUCB1cmcgcG9pbnRlciBmaWVsZC4KKwlNb3N0IGhvc3RzIHVzZSB0aGUgb2xkZXIgQlNEIGludGVycHJldGF0aW9uLCBzbyBpZiB5b3UgdHVybiB0aGlzIG9uCisJTGludXggbWlnaHQgbm90IGNvbW11bmljYXRlIGNvcnJlY3RseSB3aXRoIHRoZW0uCisJRGVmYXVsdDogRkFMU0UKKwordGNwX3N5bmFja19yZXRyaWVzIC0gSU5URUdFUgorCU51bWJlciBvZiB0aW1lcyBTWU5BQ0tzIGZvciBhIHBhc3NpdmUgVENQIGNvbm5lY3Rpb24gYXR0ZW1wdCB3aWxsCisJYmUgcmV0cmFuc21pdHRlZC4gU2hvdWxkIG5vdCBiZSBoaWdoZXIgdGhhbiAyNTUuIERlZmF1bHQgdmFsdWUKKwlpcyA1LCB3aGljaCBjb3JyZXNwb25kcyB0byB+MTgwc2Vjb25kcy4KKwordGNwX3N5bmNvb2tpZXMgLSBCT09MRUFOCisJT25seSB2YWxpZCB3aGVuIHRoZSBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggQ09ORklHX1NZTkNPT0tJRVMKKwlTZW5kIG91dCBzeW5jb29raWVzIHdoZW4gdGhlIHN5biBiYWNrbG9nIHF1ZXVlIG9mIGEgc29ja2V0CisJb3ZlcmZsb3dzLiBUaGlzIGlzIHRvIHByZXZlbnQgYWdhaW5zdCB0aGUgY29tbW9uICdzeW4gZmxvb2QgYXR0YWNrJworCURlZmF1bHQ6IEZBTFNFCisKKwlOb3RlLCB0aGF0IHN5bmNvb2tpZXMgaXMgZmFsbGJhY2sgZmFjaWxpdHkuCisJSXQgTVVTVCBOT1QgYmUgdXNlZCB0byBoZWxwIGhpZ2hseSBsb2FkZWQgc2VydmVycyB0byBzdGFuZAorCWFnYWluc3QgbGVnYWwgY29ubmVjdGlvbiByYXRlLiBJZiB5b3Ugc2VlIHN5bmZsb29kIHdhcm5pbmdzCisJaW4geW91ciBsb2dzLCBidXQgaW52ZXN0aWdhdGlvbglzaG93cyB0aGF0IHRoZXkgb2NjdXIKKwliZWNhdXNlIG9mIG92ZXJsb2FkIHdpdGggbGVnYWwgY29ubmVjdGlvbnMsIHlvdSBzaG91bGQgdHVuZQorCWFub3RoZXIgcGFyYW1ldGVycyB1bnRpbCB0aGlzIHdhcm5pbmcgZGlzYXBwZWFyLgorCVNlZTogdGNwX21heF9zeW5fYmFja2xvZywgdGNwX3N5bmFja19yZXRyaWVzLCB0Y3BfYWJvcnRfb25fb3ZlcmZsb3cuCisKKwlzeW5jb29raWVzIHNlcmlvdXNseSB2aW9sYXRlIFRDUCBwcm90b2NvbCwgZG8gbm90IGFsbG93CisJdG8gdXNlIFRDUCBleHRlbnNpb25zLCBjYW4gcmVzdWx0IGluIHNlcmlvdXMgZGVncmFkYXRpb24KKwlvZiBzb21lIHNlcnZpY2VzIChmLmUuIFNNVFAgcmVsYXlpbmcpLCB2aXNpYmxlIG5vdCBieSB5b3UsCisJYnV0IHlvdXIgY2xpZW50cyBhbmQgcmVsYXlzLCBjb250YWN0aW5nIHlvdS4gV2hpbGUgeW91IHNlZQorCXN5bmZsb29kIHdhcm5pbmdzIGluIGxvZ3Mgbm90IGJlaW5nIHJlYWxseSBmbG9vZGVkLCB5b3VyIHNlcnZlcgorCWlzIHNlcmlvdXNseSBtaXNjb25maWd1cmVkLgorCit0Y3Bfc3luX3JldHJpZXMgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHRpbWVzIGluaXRpYWwgU1lOcyBmb3IgYW4gYWN0aXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQKKwl3aWxsIGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlCisJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gfjE4MHNlY29uZHMuCisKK3RjcF90aW1lc3RhbXBzIC0gQk9PTEVBTgorCUVuYWJsZSB0aW1lc3RhbXBzIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KKwordGNwX3Rzb193aW5fZGl2aXNvciAtIElOVEVHRVIKKwlUaGlzIGFsbG93cyBjb250cm9sIG92ZXIgd2hhdCBwZXJjZW50YWdlIG9mIHRoZSBjb25nZXN0aW9uIHdpbmRvdworCWNhbiBiZSBjb25zdW1lZCBieSBhIHNpbmdsZSBUU08gZnJhbWUuCisJVGhlIHNldHRpbmcgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgYSBjaG9pY2UgYmV0d2VlbiBidXJzdGluZXNzIGFuZAorCWJ1aWxkaW5nIGxhcmdlciBUU08gZnJhbWVzLgorCURlZmF1bHQ6IDMKKwordGNwX3R3X3JlY3ljbGUgLSBCT09MRUFOCisJRW5hYmxlIGZhc3QgcmVjeWNsaW5nIFRJTUUtV0FJVCBzb2NrZXRzLiBEZWZhdWx0IHZhbHVlIGlzIDAuCisJSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgYWR2aWNlL3JlcXVlc3Qgb2YgdGVjaG5pY2FsCisJZXhwZXJ0cy4KKwordGNwX3R3X3JldXNlIC0gQk9PTEVBTgorCUFsbG93IHRvIHJldXNlIFRJTUUtV0FJVCBzb2NrZXRzIGZvciBuZXcgY29ubmVjdGlvbnMgd2hlbiBpdCBpcworCXNhZmUgZnJvbSBwcm90b2NvbCB2aWV3cG9pbnQuIERlZmF1bHQgdmFsdWUgaXMgMC4KKwlJdCBzaG91bGQgbm90IGJlIGNoYW5nZWQgd2l0aG91dCBhZHZpY2UvcmVxdWVzdCBvZiB0ZWNobmljYWwKKwlleHBlcnRzLgorCit0Y3Bfd2luZG93X3NjYWxpbmcgLSBCT09MRUFOCisJRW5hYmxlIHdpbmRvdyBzY2FsaW5nIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KKwordGNwX3dtZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBkZWZhdWx0LCBtYXgKKwltaW46IEFtb3VudCBvZiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIHNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldC4KKwlFYWNoIFRDUCBzb2NrZXQgaGFzIHJpZ2h0cyB0byB1c2UgaXQgZHVlIHRvIGZhY3Qgb2YgaXRzIGJpcnRoLgorCURlZmF1bHQ6IDRLCisKKwlkZWZhdWx0OiBBbW91bnQgb2YgbWVtb3J5IGFsbG93ZWQgZm9yIHNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldAorCWJ5IGRlZmF1bHQuIFRoaXMgdmFsdWUgb3ZlcnJpZGVzIG5ldC5jb3JlLndtZW1fZGVmYXVsdCB1c2VkCisJYnkgb3RoZXIgcHJvdG9jb2xzLCBpdCBpcyB1c3VhbGx5IGxvd2VyIHRoYW4gbmV0LmNvcmUud21lbV9kZWZhdWx0LgorCURlZmF1bHQ6IDE2SworCisJbWF4OiBNYXhpbWFsIGFtb3VudCBvZiBtZW1vcnkgYWxsb3dlZCBmb3IgYXV0b21hdGljYWxseSBzZWxlY3RlZAorCXNlbmQgYnVmZmVycyBmb3IgVENQIHNvY2tldC4gVGhpcyB2YWx1ZSBkb2VzIG5vdCBvdmVycmlkZQorCW5ldC5jb3JlLndtZW1fbWF4LCAic3RhdGljIiBzZWxlY3Rpb24gdmlhIFNPX1NOREJVRiBkb2VzIG5vdCB1c2UgdGhpcy4KKwlEZWZhdWx0OiAxMjhLCisKK3RjcF93b3JrYXJvdW5kX3NpZ25lZF93aW5kb3dzIC0gQk9PTEVBTgorCUlmIHNldCwgYXNzdW1lIG5vIHJlY2VpcHQgb2YgYSB3aW5kb3cgc2NhbGluZyBvcHRpb24gbWVhbnMgdGhlCisJcmVtb3RlIFRDUCBpcyBicm9rZW4gYW5kIHRyZWF0cyB0aGUgd2luZG93IGFzIGEgc2lnbmVkIHF1YW50aXR5LgorCUlmIHVuc2V0LCBhc3N1bWUgdGhlIHJlbW90ZSBUQ1AgaXMgbm90IGJyb2tlbiBldmVuIGlmIHdlIGRvCisJbm90IHJlY2VpdmUgYSB3aW5kb3cgc2NhbGluZyBvcHRpb24gZnJvbSB0aGVtLgorCURlZmF1bHQ6IDAKKwogQ0lQU092NCBWYXJpYWJsZXM6CiAKIGNpcHNvX2NhY2hlX2VuYWJsZSAtIEJPT0xFQU4KQEAgLTk3NCw0ICs5ODYsMyBAQAogc2xvdF90aW1lb3V0IEZJWE1FCiB3YXJuX25vcmVwbHlfdGltZSBGSVhNRQogCi0kSWQ6IGlwLXN5c2N0bC50eHQsdiAxLjIwIDIwMDEvMTIvMTMgMDk6MDA6MTggZGF2ZW0gRXhwICQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS50eHQKaW5kZXggMjljY2FlNC4uMGJjOTVlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS50eHQKQEAgLTEsNyArMSw3IEBACiAKIC0tLS0tLS0KIFBIWSBBYnN0cmFjdGlvbiBMYXllcgotKFVwZGF0ZWQgMjAwNS0wNy0yMSkKKyhVcGRhdGVkIDIwMDYtMTEtMzApCiAKIFB1cnBvc2UKIApAQCAtOTcsMTEgKzk3LDEyIEBACiAgCiAgTmV4dCwgeW91IG5lZWQgdG8ga25vdyB0aGUgZGV2aWNlIG5hbWUgb2YgdGhlIFBIWSBjb25uZWN0ZWQgdG8gdGhpcyBkZXZpY2UuIAogIFRoZSBuYW1lIHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSwgInBoeTA6MCIsIHdoZXJlIHRoZSBmaXJzdCBudW1iZXIgaXMgdGhlCi0gYnVzIGlkLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgUEhZJ3MgYWRkcmVzcyBvbiB0aGF0IGJ1cy4KKyBidXMgaWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBQSFkncyBhZGRyZXNzIG9uIHRoYXQgYnVzLiAgVHlwaWNhbGx5LAorIHRoZSBidXMgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBpdHMgSUQgdW5pcXVlLgogIAogIE5vdywgdG8gY29ubmVjdCwganVzdCBjYWxsIHRoaXMgZnVuY3Rpb246CiAgCi0gICBwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9uYW1lLCAmYWRqdXN0X2xpbmssIGZsYWdzKTsKKyAgIHBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X25hbWUsICZhZGp1c3RfbGluaywgZmxhZ3MsIGludGVyZmFjZSk7CiAKICBwaHlkZXYgaXMgYSBwb2ludGVyIHRvIHRoZSBwaHlfZGV2aWNlIHN0cnVjdHVyZSB3aGljaCByZXByZXNlbnRzIHRoZSBQSFkuICBJZgogIHBoeV9jb25uZWN0IGlzIHN1Y2Nlc3NmdWwsIGl0IHdpbGwgcmV0dXJuIHRoZSBwb2ludGVyLiAgZGV2LCBoZXJlLCBpcyB0aGUKQEAgLTExNSw2ICsxMTYsMTAgQEAKICBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgc3lzdGVtIGhhcyBwdXQgaGFyZHdhcmUgcmVzdHJpY3Rpb25zIG9uCiAgdGhlIFBIWS9jb250cm9sbGVyLCBvZiB3aGljaCB0aGUgUEhZIG5lZWRzIHRvIGJlIGF3YXJlLgogCisgaW50ZXJmYWNlIGlzIGEgdTMyIHdoaWNoIHNwZWNpZmllcyB0aGUgY29ubmVjdGlvbiB0eXBlIHVzZWQKKyBiZXR3ZWVuIHRoZSBjb250cm9sbGVyIGFuZCB0aGUgUEhZLiAgRXhhbXBsZXMgYXJlIEdNSUksIE1JSSwKKyBSR01JSSwgYW5kIFNHTUlJLiAgRm9yIGEgZnVsbCBsaXN0LCBzZWUgaW5jbHVkZS9saW51eC9waHkuaAorCiAgTm93IGp1c3QgbWFrZSBzdXJlIHRoYXQgcGh5ZGV2LT5zdXBwb3J0ZWQgYW5kIHBoeWRldi0+YWR2ZXJ0aXNpbmcgaGF2ZSBhbnkKICB2YWx1ZXMgcHJ1bmVkIGZyb20gdGhlbSB3aGljaCBkb24ndCBtYWtlIHNlbnNlIGZvciB5b3VyIGNvbnRyb2xsZXIgKGEgMTAvMTAwCiAgY29udHJvbGxlciBtYXkgYmUgY29ubmVjdGVkIHRvIGEgZ2lnYWJpdCBjYXBhYmxlIFBIWSwgc28geW91IHdvdWxkIG5lZWQgdG8KQEAgLTE5MSw3ICsxOTYsNyBAQAogICAgc3RhcnQsIG9yIGRpc2FibGVzIHRoZW4gZnJlZXMgdGhlbSBmb3Igc3RvcC4KIAogIHN0cnVjdCBwaHlfZGV2aWNlICogcGh5X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwaHlfaWQsCi0JCSB1MzIgZmxhZ3MpOworCQkgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKIAogICAgQXR0YWNoZXMgYSBuZXR3b3JrIGRldmljZSB0byBhIHBhcnRpY3VsYXIgUEhZLCBiaW5kaW5nIHRoZSBQSFkgdG8gYSBnZW5lcmljCiAgICBkcml2ZXIgaWYgbm9uZSB3YXMgZm91bmQgZHVyaW5nIGJ1cyBpbml0aWFsaXphdGlvbi4gIFBhc3NlcyBpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmY0NmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdWRwbGl0ZS50eHQKQEAgLTAsMCArMSwyODEgQEAKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgVGhlIFVEUC1MaXRlIHByb3RvY29sIChSRkMgMzgyOCkKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworICBVRFAtTGl0ZSBpcyBhIFN0YW5kYXJkcy1UcmFjayBJRVRGIHRyYW5zcG9ydCBwcm90b2NvbCB3aG9zZSBjaGFyYWN0ZXJpc3RpYworICBpcyBhIHZhcmlhYmxlLWxlbmd0aCBjaGVja3N1bS4gVGhpcyBoYXMgYWR2YW50YWdlcyBmb3IgdHJhbnNwb3J0IG9mIG11bHRpbWVkaWEKKyAgKHZpZGVvLCBWb0lQKSBvdmVyIHdpcmVsZXNzIG5ldHdvcmtzLCBhcyBwYXJ0bHkgZGFtYWdlZCBwYWNrZXRzIGNhbiBzdGlsbCBiZQorICBmZWQgaW50byB0aGUgY29kZWMgaW5zdGVhZCBvZiBiZWluZyBkaXNjYXJkZWQgZHVlIHRvIGEgZmFpbGVkIGNoZWNrc3VtIHRlc3QuCisKKyAgVGhpcyBmaWxlIGJyaWVmbHkgZGVzY3JpYmVzIHRoZSBleGlzdGluZyBrZXJuZWwgc3VwcG9ydCBhbmQgdGhlIHNvY2tldCBBUEkuCisgIEZvciBpbi1kZXB0aCBpbmZvcm1hdGlvbiwgeW91IGNhbiBjb25zdWx0OgorCisgICBvIFRoZSBVRFAtTGl0ZSBIb21lcGFnZTogaHR0cDovL3d3dy5lcmcuYWJkbi5hYy51ay91c2Vycy9nZXJyaXQvdWRwLWxpdGUvCisgICAgICAgRm9tIGhlcmUgeW91IGNhbiBhbHNvIGRvd25sb2FkIHNvbWUgZXhhbXBsZSBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZS4KKworICAgbyBUaGUgVURQLUxpdGUgSE9XVE8gb24KKyAgICAgICBodHRwOi8vd3d3LmVyZy5hYmRuLmFjLnVrL3VzZXJzL2dlcnJpdC91ZHAtbGl0ZS9maWxlcy9VRFAtTGl0ZS1IT1dUTy50eHQKKworICAgbyBUaGUgV2lyZXNoYXJrIFVEUC1MaXRlIFdpS2kgKHdpdGggY2FwdHVyZSBmaWxlcyk6CisgICAgICAgaHR0cDovL3dpa2kud2lyZXNoYXJrLm9yZy9MaWdodHdlaWdodF9Vc2VyX0RhdGFncmFtX1Byb3RvY29sCisKKyAgIG8gVGhlIFByb3RvY29sIFNwZWMsIFJGQyAzODI4LCBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzODI4LnR4dAorCisKKyAgSSkgQVBQTElDQVRJT05TCisKKyAgU2V2ZXJhbCBhcHBsaWNhdGlvbnMgaGF2ZSBiZWVuIHBvcnRlZCBzdWNjZXNzZnVsbHkgdG8gVURQLUxpdGUuIEV0aGVyZWFsCisgIChub3cgY2FsbGVkIHdpcmVzaGFyaykgaGFzIFVEUC1MaXRldjQvdjYgc3VwcG9ydCBieSBkZWZhdWx0LiBUaGUgdGFyYmFsbCBvbgorCisgICBodHRwOi8vd3d3LmVyZy5hYmRuLmFjLnVrL3VzZXJzL2dlcnJpdC91ZHAtbGl0ZS9maWxlcy91ZHBsaXRlX2xpbnV4LnRhci5negorCisgIGhhcyBzb3VyY2UgY29kZSBmb3Igc2V2ZXJhbCB2NC92NiBjbGllbnQtc2VydmVyIGFuZCBuZXR3b3JrIHRlc3RpbmcgZXhhbXBsZXMuCisKKyAgUG9ydGluZyBhcHBsaWNhdGlvbnMgdG8gVURQLUxpdGUgaXMgc3RyYWlnaHRmb3J3YXJkOiBvbmx5IHNvY2tldCBsZXZlbCBhbmQKKyAgSVBQUk9UTyBuZWVkIHRvIGJlIGNoYW5nZWQ7IHNlbmRlcnMgYWRkaXRpb25hbGx5IHNldCB0aGUgY2hlY2tzdW0gY292ZXJhZ2UKKyAgbGVuZ3RoIChkZWZhdWx0ID0gaGVhZGVyIGxlbmd0aCA9IDgpLiBEZXRhaWxzIGFyZSBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCisKKyAgSUkpIFBST0dSQU1NSU5HIEFQSQorCisgIFVEUC1MaXRlIHByb3ZpZGVzIGEgY29ubmVjdGlvbmxlc3MsIHVucmVsaWFibGUgZGF0YWdyYW0gc2VydmljZSBhbmQgaGVuY2UKKyAgdXNlcyB0aGUgc2FtZSBzb2NrZXQgdHlwZSBhcyBVRFAuIEluIGZhY3QsIHBvcnRpbmcgZnJvbSBVRFAgdG8gVURQLUxpdGUgaXMKKyAgdmVyeSBlYXN5OiBzaW1wbHkgYWRkIGBJUFBST1RPX1VEUExJVEUnIGFzIHRoZSBsYXN0IGFyZ3VtZW50IG9mIHRoZSBzb2NrZXQoMikKKyAgY2FsbCBzbyB0aGF0IHRoZSBzdGF0ZW1lbnQgbG9va3MgbGlrZToKKworICAgICAgcyA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUExJVEUpOworCisgICAgICAgICAgICAgICAgICAgICAgb3IsIHJlc3BlY3RpdmVseSwKKworICAgICAgcyA9IHNvY2tldChQRl9JTkVUNiwgU09DS19ER1JBTSwgSVBQUk9UT19VRFBMSVRFKTsKKworICBXaXRoIGp1c3QgdGhlIGFib3ZlIGNoYW5nZSB5b3UgYXJlIGFibGUgdG8gcnVuIFVEUC1MaXRlIHNlcnZpY2VzIG9yIGNvbm5lY3QKKyAgdG8gVURQLUxpdGUgc2VydmVycy4gVGhlIGtlcm5lbCB3aWxsIGFzc3VtZSB0aGF0IHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4KKyAgdXNpbmcgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSBhbmQgc28gZW11bGF0ZSBVRFAgbW9kZSAoZnVsbCBjb3ZlcmFnZSkuCisKKyAgVG8gbWFrZSB1c2Ugb2YgdGhlIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgZmFjaWxpdGllcyByZXF1aXJlcyBzZXR0aW5nIGEKKyAgc2luZ2xlIHNvY2tldCBvcHRpb24sIHdoaWNoIHRha2VzIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUgY292ZXJhZ2UgbGVuZ3RoOgorCisgICAgKiBTZW5kZXIgY2hlY2tzdW0gY292ZXJhZ2U6IFVEUExJVEVfU0VORF9DU0NPVgorCisgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICBpbnQgdmFsID0gMjA7CisgICAgICAgIHNldHNvY2tvcHQocywgU09MX1VEUExJVEUsIFVEUExJVEVfU0VORF9DU0NPViwgJnZhbCwgc2l6ZW9mKGludCkpOworCisgICAgICBzZXRzIHRoZSBjaGVja3N1bSBjb3ZlcmFnZSBsZW5ndGggdG8gMjAgYnl0ZXMgKDEyYiBkYXRhICsgOGIgaGVhZGVyKS4KKyAgICAgIE9mIGVhY2ggcGFja2V0IG9ubHkgdGhlIGZpcnN0IDIwIGJ5dGVzIChwbHVzIHRoZSBwc2V1ZG8taGVhZGVyKSB3aWxsIGJlCisgICAgICBjaGVja3N1bW1lZC4gVGhpcyBpcyB1c2VmdWwgZm9yIFJUUCBhcHBsaWNhdGlvbnMgd2hpY2ggaGF2ZSBhIDEyLWJ5dGUKKyAgICAgIGJhc2UgaGVhZGVyLgorCisKKyAgICAqIFJlY2VpdmVyIGNoZWNrc3VtIGNvdmVyYWdlOiBVRFBMSVRFX1JFQ1ZfQ1NDT1YKKworICAgICAgVGhpcyBvcHRpb24gaXMgdGhlIHJlY2VpdmVyLXNpZGUgYW5hbG9ndWUuIEl0IGlzIHRydWx5IG9wdGlvbmFsLCBpLmUuIG5vdAorICAgICAgcmVxdWlyZWQgdG8gZW5hYmxlIHRyYWZmaWMgd2l0aCBwYXJ0aWFsIGNoZWNrc3VtIGNvdmVyYWdlLiBJdHMgZnVuY3Rpb24gaXMKKyAgICAgIHRoYXQgb2YgYSB0cmFmZmljIGZpbHRlcjogd2hlbiBlbmFibGVkLCBpdCBpbnN0cnVjdHMgdGhlIGtlcm5lbCB0byBkcm9wCisgICAgICBhbGwgcGFja2V0cyB3aGljaCBoYXZlIGEgY292ZXJhZ2UgX2xlc3NfIHRoYW4gdGhpcyB2YWx1ZS4gRm9yIGV4YW1wbGUsIGlmCisgICAgICBSVFAgYW5kIFVEUCBoZWFkZXJzIGFyZSB0byBiZSBwcm90ZWN0ZWQsIGEgcmVjZWl2ZXIgY2FuIGVuZm9yY2UgdGhhdCBvbmx5CisgICAgICBwYWNrZXRzIHdpdGggYSBtaW5pbXVtIGNvdmVyYWdlIG9mIDIwIGFyZSBhZG1pdHRlZDoKKworICAgICAgICBpbnQgbWluID0gMjA7CisgICAgICAgIHNldHNvY2tvcHQocywgU09MX1VEUExJVEUsIFVEUExJVEVfUkVDVl9DU0NPViwgJm1pbiwgc2l6ZW9mKGludCkpOworCisgIFRoZSBjYWxscyB0byBnZXRzb2Nrb3B0KDIpIGFyZSBhbmFsb2dvdXMuIEJlaW5nIGFuIGV4dGVuc2lvbiBhbmQgbm90IGEgc3RhbmQtCisgIGFsb25lIHByb3RvY29sLCBhbGwgc29ja2V0IG9wdGlvbnMga25vd24gZnJvbSBVRFAgY2FuIGJlIHVzZWQgaW4gZXhhY3RseSB0aGUKKyAgc2FtZSBtYW5uZXIgYXMgYmVmb3JlLCBlLmcuIFVEUF9DT1JLIG9yIFVEUF9FTkNBUC4KKworICBBIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgVURQLUxpdGUgY2hlY2tzdW0gY292ZXJhZ2Ugb3B0aW9ucyBpcyBpbiBzZWN0aW9uIElWLgorCisKKyAgSUlJKSBIRUFERVIgRklMRVMKKworICBUaGUgc29ja2V0IEFQSSByZXF1aXJlcyBzdXBwb3J0IHRocm91Z2ggaGVhZGVyIGZpbGVzIGluIC91c3IvaW5jbHVkZToKKworICAgICogL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaAorICAgICAgICB0byBkZWZpbmUgSVBQUk9UT19VRFBMSVRFCisKKyAgICAqIC91c3IvaW5jbHVkZS9uZXRpbmV0L3VkcGxpdGUuaAorICAgICAgICBmb3IgVURQLUxpdGUgaGVhZGVyIGZpZWxkcyBhbmQgcHJvdG9jb2wgY29uc3RhbnRzCisKKyAgRm9yIHRlc3RpbmcgcHVycG9zZXMsIHRoZSBmb2xsb3dpbmcgY2FuIHNlcnZlIGFzIGEgYG1pbmknIGhlYWRlciBmaWxlOgorCisgICAgI2RlZmluZSBJUFBST1RPX1VEUExJVEUgICAgICAgMTM2CisgICAgI2RlZmluZSBTT0xfVURQTElURSAgICAgICAgICAgMTM2CisgICAgI2RlZmluZSBVRFBMSVRFX1NFTkRfQ1NDT1YgICAgIDEwCisgICAgI2RlZmluZSBVRFBMSVRFX1JFQ1ZfQ1NDT1YgICAgIDExCisKKyAgUmVhZHktbWFkZSBoZWFkZXIgZmlsZXMgZm9yIHZhcmlvdXMgZGlzdHJvcyBhcmUgaW4gdGhlIFVEUC1MaXRlIHRhcmJhbGwuCisKKworICBJVikgS0VSTkVMIEJFSEFWSU9VUiBXSVRIIFJFR0FSRCBUTyBUSEUgVkFSSU9VUyBTT0NLRVQgT1BUSU9OUworCisgIFRvIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMsIHRoZSBsb2cgbGV2ZWwgbmVlZCB0byBiZSBzZXQgdG8gOCwgYXMgbW9zdAorICBtZXNzYWdlcyB1c2UgdGhlIEtFUk5fREVCVUcgbGV2ZWwgKDcpLgorCisgIDEpIFNlbmRlciBTb2NrZXQgT3B0aW9ucworCisgIElmIHRoZSBzZW5kZXIgc3BlY2lmaWVzIGEgdmFsdWUgb2YgMCBhcyBjb3ZlcmFnZSBsZW5ndGgsIHRoZSBtb2R1bGUKKyAgYXNzdW1lcyBmdWxsIGNvdmVyYWdlLCB0cmFuc21pdHMgYSBwYWNrZXQgd2l0aCBjb3ZlcmFnZSBsZW5ndGggb2YgMAorICBhbmQgYWNjb3JkaW5nIGNoZWNrc3VtLiAgSWYgdGhlIHNlbmRlciBzcGVjaWZpZXMgYSBjb3ZlcmFnZSA8IDggYW5kCisgIGRpZmZlcmVudCBmcm9tIDAsIHRoZSBrZXJuZWwgYXNzdW1lcyA4IGFzIGRlZmF1bHQgdmFsdWUuICBGaW5hbGx5LAorICBpZiB0aGUgc3BlY2lmaWVkIGNvdmVyYWdlIGxlbmd0aCBleGNlZWRzIHRoZSBwYWNrZXQgbGVuZ3RoLCB0aGUgcGFja2V0CisgIGxlbmd0aCBpcyB1c2VkIGluc3RlYWQgYXMgY292ZXJhZ2UgbGVuZ3RoLgorCisgIDIpIFJlY2VpdmVyIFNvY2tldCBPcHRpb25zCisKKyAgVGhlIHJlY2VpdmVyIHNwZWNpZmllcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgY292ZXJhZ2UgbGVuZ3RoIGl0CisgIGlzIHdpbGxpbmcgdG8gYWNjZXB0LiAgQSB2YWx1ZSBvZiAwIGhlcmUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlY2VpdmVyCisgIGFsd2F5cyB3YW50cyB0aGUgd2hvbGUgb2YgdGhlIHBhY2tldCBjb3ZlcmVkLiBJbiB0aGlzIGNhc2UsIGFsbAorICBwYXJ0aWFsbHkgY292ZXJlZCBwYWNrZXRzIGFyZSBkcm9wcGVkIGFuZCBhbiBlcnJvciBpcyBsb2dnZWQuCisKKyAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpZnkgaWxsZWdhbCB2YWx1ZXMgKDwwIGFuZCA8OCk7IGluIHRoZXNlCisgIGNhc2VzIHRoZSBkZWZhdWx0IG9mIDggaXMgYXNzdW1lZC4KKworICBBbGwgcGFja2V0cyBhcnJpdmluZyB3aXRoIGEgY292ZXJhZ2UgdmFsdWUgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQKKyAgdGhyZXNob2xkIGFyZSBkaXNjYXJkZWQsIHRoZXNlIGV2ZW50cyBhcmUgYWxzbyBsb2dnZWQuCisKKyAgMykgRGlzYWJsaW5nIHRoZSBDaGVja3N1bSBDb21wdXRhdGlvbgorCisgIE9uIGJvdGggc2VuZGVyIGFuZCByZWNlaXZlciwgY2hlY2tzdW1taW5nIHdpbGwgYWx3YXlzIGJlIHBlcmZvcm1lZAorICBhbmQgY2FuIG5vdCBiZSBkaXNhYmxlZCB1c2luZyBTT19OT19DSEVDSy4gVGh1cworCisgICAgICAgIHNldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19OT19DSEVDSywgIC4uLiApOworCisgIHdpbGwgYWx3YXlzIHdpbGwgYmUgaWdub3JlZCwgd2hpbGUgdGhlIHZhbHVlIG9mCisKKyAgICAgICAgZ2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX05PX0NIRUNLLCAmdmFsdWUsIC4uLik7CisKKyAgaXMgbWVhbmluZ2xlc3MgKGFzIGluIFRDUCkuIFBhY2tldHMgd2l0aCBhIHplcm8gY2hlY2tzdW0gZmllbGQgYXJlCisgIGlsbGVnYWwgKGNmLiBSRkMgMzgyOCwgc2VjLiAzLjEpIHdpbGwgYmUgc2lsZW50bHkgZGlzY2FyZGVkLgorCisgIDQpIEZyYWdtZW50YXRpb24KKworICBUaGUgY2hlY2tzdW0gY29tcHV0YXRpb24gcmVzcGVjdHMgYm90aCBidWZmZXJzaXplIGFuZCBNVFUuIFRoZSBzaXplCisgIG9mIFVEUC1MaXRlIHBhY2tldHMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2l6ZSBvZiB0aGUgc2VuZCBidWZmZXIuIFRoZQorICBtaW5pbXVtIHNpemUgb2YgdGhlIHNlbmQgYnVmZmVyIGlzIDIwNDggKGRlZmluZWQgYXMgU09DS19NSU5fU05EQlVGCisgIGluIGluY2x1ZGUvbmV0L3NvY2suaCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGNvbmZpZ3VyYWJsZSBhcworICBuZXQuY29yZS53bWVtX2RlZmF1bHQgb3IgdmlhIHNldHRpbmcgdGhlIFNPX1NOREJVRiBzb2NrZXQoNykKKyAgb3B0aW9uLiBUaGUgbWF4aW11bSB1cHBlciBib3VuZCBmb3IgdGhlIHNlbmQgYnVmZmVyIGlzIGRldGVybWluZWQKKyAgYnkgbmV0LmNvcmUud21lbV9tYXguCisKKyAgR2l2ZW4gYSBwYXlsb2FkIHNpemUgbGFyZ2VyIHRoYW4gdGhlIHNlbmQgYnVmZmVyIHNpemUsIFVEUC1MaXRlIHdpbGwKKyAgc3BsaXQgdGhlIHBheWxvYWQgaW50byBzZXZlcmFsIGluZGl2aWR1YWwgcGFja2V0cywgZmlsbGluZyB1cCB0aGUKKyAgc2VuZCBidWZmZXIgc2l6ZSBpbiBlYWNoIGNhc2UuCisKKyAgVGhlIHByZWNpc2UgdmFsdWUgYWxzbyBkZXBlbmRzIG9uIHRoZSBpbnRlcmZhY2UgTVRVLiBUaGUgaW50ZXJmYWNlIE1UVSwKKyAgaW4gdHVybiwgbWF5IHRyaWdnZXIgSVAgZnJhZ21lbnRhdGlvbi4gSW4gdGhpcyBjYXNlLCB0aGUgZ2VuZXJhdGVkCisgIFVEUC1MaXRlIHBhY2tldCBpcyBzcGxpdCBpbnRvIHNldmVyYWwgSVAgcGFja2V0cywgb2Ygd2hpY2ggb25seSB0aGUKKyAgZmlyc3Qgb25lIGNvbnRhaW5zIHRoZSBMNCBoZWFkZXIuCisKKyAgVGhlIHNlbmQgYnVmZmVyIHNpemUgaGFzIGltcGxpY2F0aW9ucyBvbiB0aGUgY2hlY2tzdW0gY292ZXJhZ2UgbGVuZ3RoLgorICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CisKKyAgUGF5bG9hZDogMTUzNiBieXRlcyAgICAgICAgICBTZW5kIEJ1ZmZlcjogICAgIDEwMjQgYnl0ZXMKKyAgTVRVOiAgICAgMTUwMCBieXRlcyAgICAgICAgICBDb3ZlcmFnZSBMZW5ndGg6ICA4NTYgYnl0ZXMKKworICBVRFAtTGl0ZSB3aWxsIHNoaXAgdGhlIDE1MzYgYnl0ZXMgaW4gdHdvIHNlcGFyYXRlIHBhY2tldHM6CisKKyAgUGFja2V0IDE6IDEwMjQgcGF5bG9hZCArIDggYnl0ZSBoZWFkZXIgKyAyMCBieXRlIElQIGhlYWRlciA9IDEwNTIgYnl0ZXMKKyAgUGFja2V0IDI6ICA1MTIgcGF5bG9hZCArIDggYnl0ZSBoZWFkZXIgKyAyMCBieXRlIElQIGhlYWRlciA9ICA1NDAgYnl0ZXMKKworICBUaGUgY292ZXJhZ2UgcGFja2V0IGNvdmVycyB0aGUgVURQLUxpdGUgaGVhZGVyIGFuZCA4NDggYnl0ZXMgb2YgdGhlCisgIHBheWxvYWQgaW4gdGhlIGZpcnN0IHBhY2tldCwgdGhlIHNlY29uZCBwYWNrZXQgaXMgZnVsbHkgY292ZXJlZC4gTm90ZQorICB0aGF0IGZvciB0aGUgc2Vjb25kIHBhY2tldCwgdGhlIGNvdmVyYWdlIGxlbmd0aCBleGNlZWRzIHRoZSBwYWNrZXQKKyAgbGVuZ3RoLiBUaGUga2VybmVsIGFsd2F5cyByZS1hZGp1c3RzIHRoZSBjb3ZlcmFnZSBsZW5ndGggdG8gdGhlIHBhY2tldAorICBsZW5ndGggaW4gc3VjaCBjYXNlcy4KKworICBBcyBhbiBleGFtcGxlIG9mIHdoYXQgaGFwcGVucyB3aGVuIG9uZSBVRFAtTGl0ZSBwYWNrZXQgaXMgc3BsaXQgaW50bworICBzZXZlcmFsIHRpbnkgZnJhZ21lbnRzLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGUuCisKKyAgUGF5bG9hZDogMTAyNCBieXRlcyAgICAgICAgICAgIFNlbmQgYnVmZmVyIHNpemU6IDEwMjQgYnl0ZXMKKyAgTVRVOiAgICAgIDMwMCBieXRlcyAgICAgICAgICAgIENvdmVyYWdlIGxlbmd0aDogICA1NzUgYnl0ZXMKKworICArLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSsKKyAgfDh8ICAgIDI3MiAgICB8ICAgICAgMjgwICAgICB8ICAgICAyODAgICAgICB8ICAgICAyODAgICAgICB8CisgICstKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgMjgwICAgICAgICAgICAgNTYwICAgICAgICAgICAgODQwICAgICAgICAgICAxMDMyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCisgICoqKioqY2hlY2tzdW0gY292ZXJhZ2UqKioqKioqKioqKioqCisKKyAgVGhlIFVEUC1MaXRlIG1vZHVsZSBnZW5lcmF0ZXMgb25lIDEwMzIgYnl0ZSBwYWNrZXQgKDEwMjQgKyA4IGJ5dGUKKyAgaGVhZGVyKS4gQWNjb3JkaW5nIHRvIHRoZSBpbnRlcmZhY2UgTVRVLCB0aGVzZSBhcmUgc3BsaXQgaW50byA0IElQCisgIHBhY2tldHMgKDI4MCBieXRlIElQIHBheWxvYWQgKyAyMCBieXRlIElQIGhlYWRlcikuIFRoZSBrZXJuZWwgbW9kdWxlCisgIHN1bXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBlbnRpcmUgZmlyc3QgdHdvIHBhY2tldHMsIHBsdXMgMTUgYnl0ZXMgb2YKKyAgdGhlIGxhc3QgcGFja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGZyYWdtZW50cyB0byB0aGUgSVAgbW9kdWxlLgorCisgIFRvIHNlZSB0aGUgYW5hbG9nb3VzIGNhc2UgZm9yIElQdjYgZnJhZ21lbnRhdGlvbiwgY29uc2lkZXIgYSBsaW5rCisgIE1UVSBvZiAxMjgwIGJ5dGVzIGFuZCBhIHdyaXRlIGJ1ZmZlciBvZiAzMzU2IGJ5dGVzLiBJZiB0aGUgY2hlY2tzdW0KKyAgY292ZXJhZ2UgaXMgbGVzcyB0aGFuIDEyMzIgYnl0ZXMgKE1UVSBtaW51cyBJUHY2L2ZyYWdtZW50IGhlYWRlcgorICBsZW5ndGhzKSwgb25seSB0aGUgZmlyc3QgZnJhZ21lbnQgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC4gV2hlbiB1c2luZworICBsYXJnZXIgY2hlY2tzdW0gY292ZXJhZ2UgbGVuZ3RocywgZWFjaCBlbGlnaWJsZSBmcmFnbWVudCBuZWVkcyB0byBiZQorICBjaGVja3N1bW1lZC4gU3VwcG9zZSB3ZSBoYXZlIGEgY2hlY2tzdW0gY292ZXJhZ2Ugb2YgMzA2Mi4gVGhlIGJ1ZmZlcgorICBvZiAzMzU2IGJ5dGVzIHdpbGwgYmUgc3BsaXQgaW50byB0aGUgZm9sbG93aW5nIGZyYWdtZW50czoKKworICAgIEZyYWdtZW50IDE6IDEyODAgYnl0ZXMgY2FycnlpbmcgIDEyMzIgYnl0ZXMgb2YgVURQLUxpdGUgZGF0YQorICAgIEZyYWdtZW50IDI6IDEyODAgYnl0ZXMgY2FycnlpbmcgIDEyMzIgYnl0ZXMgb2YgVURQLUxpdGUgZGF0YQorICAgIEZyYWdtZW50IDM6ICA5NDggYnl0ZXMgY2FycnlpbmcgICA5MDAgYnl0ZXMgb2YgVURQLUxpdGUgZGF0YQorCisgIFRoZSBmaXJzdCB0d28gZnJhZ21lbnRzIGhhdmUgdG8gYmUgY2hlY2tzdW1tZWQgaW4gZnVsbCwgb2YgdGhlIGxhc3QKKyAgZnJhZ21lbnQgb25seSA1OTggKD0gMzA2MiAtIDIqMTIzMikgYnl0ZXMgYXJlIGNoZWNrc3VtbWVkLgorCisgIFdoaWxlIGl0IGlzIGltcG9ydGFudCB0aGF0IHN1Y2ggY2FzZXMgYXJlIGRlYWx0IHdpdGggY29ycmVjdGx5LCB0aGV5CisgIGFyZSAoYW5ub3lpbmdseSkgcmFyZTogVURQLUxpdGUgaXMgZGVzaWduZWQgZm9yIG9wdGltaXNpbmcgbXVsdGltZWRpYQorICBwZXJmb3JtYW5jZSBvdmVyIHdpcmVsZXNzIChvciBnZW5lcmFsbHkgbm9pc3kpIGxpbmtzIGFuZCB0aHVzIHNtYWxsZXIKKyAgY292ZXJhZ2UgbGVuZ2h0cyBhcmUgbGlrZWx5IHRvIGJlIGV4cGVjdGVkLgorCisKKyAgVikgVURQLUxJVEUgUlVOVElNRSBTVEFUSVNUSUNTIEFORCBUSEVJUiBNRUFOSU5HCisKKyAgRXhjZXB0aW9uYWwgYW5kIGVycm9yIGNvbmRpdGlvbnMgYXJlIGxvZ2dlZCB0byBzeXNsb2cgYXQgdGhlIEtFUk5fREVCVUcKKyAgbGV2ZWwuICBMaXZlIHN0YXRpc3RpY3MgYWJvdXQgVURQLUxpdGUgYXJlIGF2YWlsYWJsZSBpbiAvcHJvYy9uZXQvc25tcAorICBhbmQgY2FuICh3aXRoIG5ld2VyIHZlcnNpb25zIG9mIG5ldHN0YXQpIGJlIHZpZXdlZCB1c2luZworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c3RhdCAtc3Z1CisKKyAgVGhpcyBkaXNwbGF5cyBVRFAtTGl0ZSBzdGF0aXN0aWNzIHZhcmlhYmxlcywgd2hvc2UgbWVhbmluZyBpcyBhcyBmb2xsb3dzLgorCisgICBJbkRhdGFncmFtczogICAgIFRvdGFsIG51bWJlciBvZiByZWNlaXZlZCBkYXRhZ3JhbXMuCisKKyAgIE5vUG9ydHM6ICAgICAgICAgTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQgdG8gYW4gdW5rbm93biBwb3J0LgorICAgICAgICAgICAgICAgICAgICBUaGVzZSBjYXNlcyBhcmUgY291bnRlZCBzZXBhcmF0ZWx5IChub3QgYXMgSW5FcnJvcnMpLgorCisgICBJbkVycm9yczogICAgICAgIE51bWJlciBvZiBlcnJvbmVvdXMgVURQLUxpdGUgcGFja2V0cy4gRXJyb3JzIGluY2x1ZGU6CisgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcm5hbCBzb2NrZXQgcXVldWUgcmVjZWl2ZSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgICAqIHBhY2tldCB0b28gc2hvcnQgKGxlc3MgdGhhbiA4IGJ5dGVzIG9yIHN0YXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgY292ZXJhZ2UgbGVuZ3RoIGV4Y2VlZHMgcmVjZWl2ZWQgbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICAgICogeGZybTRfcG9saWN5X2NoZWNrKCkgcmV0dXJuZWQgd2l0aCBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICogYXBwbGljYXRpb24gaGFzIHNwZWNpZmllZCBsYXJnZXIgbWluLiBjb3ZlcmFnZQorICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIHRoYW4gdGhhdCBvZiBpbmNvbWluZyBwYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAqIGNoZWNrc3VtIGNvdmVyYWdlIHZpb2xhdGVkCisgICAgICAgICAgICAgICAgICAgICAgKiBiYWQgY2hlY2tzdW0KKworICAgT3V0RGF0YWdyYW1zOiAgICBUb3RhbCBudW1iZXIgb2Ygc2VudCBkYXRhZ3JhbXMuCisKKyAgIFRoZXNlIHN0YXRpc3RpY3MgZGVyaXZlIGZyb20gdGhlIFVEUCBNSUIgKFJGQyAyMDEzKS4KKworCisgIFZJKSBJUFRBQkxFUworCisgIFRoZXJlIGlzIHBhY2tldCBtYXRjaCBzdXBwb3J0IGZvciBVRFAtTGl0ZSBhcyB3ZWxsIGFzIHN1cHBvcnQgZm9yIHRoZSBMT0cgdGFyZ2V0LgorICBJZiB5b3UgY29weSBhbmQgcGFzdGUgdGhlIGZvbGxvd2luZyBsaW5lIGludG8gL2V0Yy9wcm90Y29scywKKworICB1ZHBsaXRlIDEzNiAgICAgVURQLUxpdGUgICAgICAgICMgVURQLUxpdGUgW1JGQyAzODI4XQorCisgIHRoZW4KKyAgICAgICAgICAgICAgaXB0YWJsZXMgLUEgSU5QVVQgLXAgdWRwbGl0ZSAtaiBMT0cKKworICB3aWxsIHByb2R1Y2UgbG9nZ2luZyBvdXRwdXQgdG8gc3lzbG9nLiBEcm9wcGluZyBhbmQgcmVqZWN0aW5nIHBhY2tldHMgYWxzbyB3b3Jrcy4KKworCisgIFZJSSkgTUFJTlRBSU5FUiBBRERSRVNTCisKKyAgVGhlIFVEUC1MaXRlIHBhdGNoIHdhcyBkZXZlbG9wZWQgYXQKKyAgICAgICAgICAgICAgICAgICAgVW5pdmVyc2l0eSBvZiBBYmVyZGVlbgorICAgICAgICAgICAgICAgICAgICBFbGVjdHJvbmljcyBSZXNlYXJjaCBHcm91cAorICAgICAgICAgICAgICAgICAgICBEZXBhcnRtZW50IG9mIEVuZ2luZWVyaW5nCisgICAgICAgICAgICAgICAgICAgIEZyYXNlciBOb2JsZSBCdWlsZGluZworICAgICAgICAgICAgICAgICAgICBBYmVyZGVlbiBBQjI0IDNVRTsgVUsKKyAgVGhlIGN1cnJlbnQgbWFpbnRhaW5lciBpcyBHZXJyaXQgUmVua2VyLCA8Z2Vycml0QGVyZy5hYmRuLmFjLnVrPi4gSW5pdGlhbAorICBjb2RlIHdhcyBkZXZlbG9wZWQgYnkgV2lsbGlhbSAgU3RhbmlzbGF1cywgPHdpbGxpYW1AZXJnLmFiZG4uYWMudWs+LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3hmcm1fc3luYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybV9zeW5jLnR4dAppbmRleCA4YmU2MjZmLi5kN2FhYzlkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybV9zeW5jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveGZybV9zeW5jLnR4dApAQCAtNDcsMTAgKzQ3LDEzIEBACiAKICAgIHN0cnVjdCB4ZnJtX2FldmVudF9pZCB7CiAgICAgICAgICAgICAgc3RydWN0IHhmcm1fdXNlcnNhX2lkICAgICAgICAgICBzYV9pZDsKKyAgICAgICAgICAgICB4ZnJtX2FkZHJlc3NfdCAgICAgICAgICAgICAgICAgIHNhZGRyOwogICAgICAgICAgICAgIF9fdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisgICAgICAgICAgICAgX191MzIgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpZDsKICAgIH07CiAKLXhmcm1fdXNlcnNhX2lkIGluIHRoaXMgbWVzc2FnZSBsYXlvdXQgaWRlbnRpZmllcyB0aGUgU0EuCitUaGUgdW5pcXVlIFNBIGlzIGlkZW50aWZpZWQgYnkgdGhlIGNvbWJpbmF0aW9uIG9mIHhmcm1fdXNlcnNhX2lkLAorcmVxaWQgYW5kIHNhZGRyLgogCiBmbGFncyBhcmUgdXNlZCB0byBpbmRpY2F0ZSBkaWZmZXJlbnQgdGhpbmdzLiBUaGUgcG9zc2libGUKIGZsYWdzIGFyZToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTyBiL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTwppbmRleCBkNjg0YTZhLi4yMmY4MmYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvQ29tbW9uSU8KKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCkBAIC03NCw3ICs3NCw3IEBACiAKICAgTm90ZTogV2hpbGUgYWxyZWFkeSBrbm93biBkZXZpY2VzIGNhbiBiZSBhZGRlZCB0byB0aGUgbGlzdCBvZiBkZXZpY2VzIHRvIGJlCiAgICAgICAgIGlnbm9yZWQsIHRoZXJlIHdpbGwgYmUgbm8gZWZmZWN0IG9uIHRoZW4uIEhvd2V2ZXIsIGlmIHN1Y2ggYSBkZXZpY2UKLSAgICAgICAgZGlzYXBwZWFycyBhbmQgdGhlbiByZWFwcGVhcmVzLCBpdCB3aWxsIHRoZW4gYmUgaWdub3JlZC4KKwlkaXNhcHBlYXJzIGFuZCB0aGVuIHJlYXBwZWFycywgaXQgd2lsbCB0aGVuIGJlIGlnbm9yZWQuCiAKICAgRm9yIGV4YW1wbGUsCiAJImVjaG8gYWRkIDAuMC5hMDAwLTAuMC5hY2NjLCAwLjAuYWYwMC0wLjAuYWZmZiA+IC9wcm9jL2Npb19pZ25vcmUiCkBAIC04Miw3ICs4Miw3IEBACiAgIGRldmljZXMuCiAKICAgVGhlIGRldmljZXMgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgYnkgYnVzIGlkICgwLjAuYWJjZCkgb3IsIGZvciAyLjQgYmFja3dhcmQKLSAgY29tcGF0aWJpbHR5LCBieSB0aGUgZGV2aWNlIG51bWJlciBpbiBoZXhhZGVjaW1hbCAoMHhhYmNkIG9yIGFiY2QpLgorICBjb21wYXRpYmlsaXR5LCBieSB0aGUgZGV2aWNlIG51bWJlciBpbiBoZXhhZGVjaW1hbCAoMHhhYmNkIG9yIGFiY2QpLgogCiAKICogL3Byb2MvczM5MGRiZi9jaW9fKi8gKFMvMzkwIGRlYnVnIGZlYXR1cmUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CmluZGV4IDRkZDI1ZWUuLjNmOWRkYmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CkBAIC03LDcgKzcsNyBAQAogCiBPdmVydmlldyBvZiBEb2N1bWVudDoKID09PT09PT09PT09PT09PT09PT09PQotVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIGFuIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRvIGRlYnVnIAorVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcKIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlLiBJdCBpc24ndCBpbnRlbmRlZCBhcyBhIGNvbXBsZXRlIHJlZmVyZW5jZSAmIG5vdCBhCiB0dXRvcmlhbCBvbiB0aGUgZnVuZGFtZW50YWxzIG9mIEMgJiBhc3NlbWJseS4gSXQgZG9lc24ndCBnbyBpbnRvCiAzOTAgSU8gaW4gYW55IGRldGFpbC4gSXQgaXMgaW50ZW5kZWQgdG8gY29tcGxlbWVudCB0aGUgZG9jdW1lbnRzIGluIHRoZQpAQCAtMzAwLDcgKzMwMCw3IEBACiBidXQgb25seSBtZXNzIHdpdGggMiBzZWdtZW50IGluZGljZXMgZWFjaCB0aW1lIHdlIG1lc3Mgd2l0aAogYSBQTUQuCiAKLTMpIEFzIHovQXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHVwdG8gYSBtYXNzaXZlIDUtbGV2ZWwgcGFnZSB0YWJsZSBsb29rdXAgd2UgCiszKSBBcyB6L0FyY2hpdGVjdHVyZSBzdXBwb3J0cyB1cCB0byBhIG1hc3NpdmUgNS1sZXZlbCBwYWdlIHRhYmxlIGxvb2t1cCB3ZQogY2FuIG9ubHkgdXNlIDMgY3VycmVudGx5IG9uIExpbnV4ICggYXMgdGhpcyBpcyBhbGwgdGhlIGdlbmVyaWMga2VybmVsCiBjdXJyZW50bHkgc3VwcG9ydHMgKSBob3dldmVyIHRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUKIHRoaXMgYWxsb3dzIHVzIHRvIGFjY2VzcyAoIGFjY29yZGluZyB0byBteSBzdW1zICkKQEAgLTUwMiw3ICs1MDIsNyBAQAogLS0tLS0tCiAxKSBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHJlZ2lzdGVycyB3aGljaCBhcmUgdXNlZAogYnkgdGhlIGNhbGxlZSBhcmUgc2F2ZWQsIGUuZy4gdGhlIGNvbXBpbGVyIGlzIHBlcmZlY3RseQotY2FwaWJsZSBvZiB1c2luZyByMTEgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gYSBmcmFtZSBhCitjYXBhYmxlIG9mIHVzaW5nIHIxMSBmb3IgcHVycG9zZXMgb3RoZXIgdGhhbiBhIGZyYW1lIGEKIGZyYW1lIHBvaW50ZXIgaWYgYSBmcmFtZSBwb2ludGVyIGlzIG5vdCBuZWVkZWQuCiAyKSBJbiBmdW5jdGlvbnMgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMgZS5nLiBwcmludGYgdGhlIGNhbGxpbmcgcHJvY2VkdXJlIAogaXMgaWRlbnRpY2FsIHRvIG9uZSB3aXRob3V0IHZhcmlhYmxlIGFyZ3VtZW50cyAmIHRoZSBzYW1lIG51bWJlciBvZiAKQEAgLTg0Niw3ICs4NDYsNyBAQAogaW5zdGVhZCBpZiB0aGUgY29kZSBpc24ndCBjb21waWxlZCAtZywgYXMgaXQgaXMgbXVjaCBmYXN0ZXI6CiBvYmpkdW1wIC0tZGlzYXNzZW1ibGUtYWxsIC0tc3ltcyB2bWxpbnV4ID4gdm1saW51eC5sc3QgIAogCi1BcyBoYXJkIGRyaXZlIHNwYWNlIGlzIHZhbHVibGUgbW9zdCBvZiB1cyB1c2UgdGhlIGZvbGxvd2luZyBhcHByb2FjaC4KK0FzIGhhcmQgZHJpdmUgc3BhY2UgaXMgdmFsdWFibGUgbW9zdCBvZiB1cyB1c2UgdGhlIGZvbGxvd2luZyBhcHByb2FjaC4KIDEpIExvb2sgYXQgdGhlIGVtaXR0ZWQgcHN3IG9uIHRoZSBjb25zb2xlIHRvIGZpbmQgdGhlIGNyYXNoIGFkZHJlc3MgaW4gdGhlIGtlcm5lbC4KIDIpIExvb2sgYXQgdGhlIGZpbGUgU3lzdGVtLm1hcCAoIGluIHRoZSBsaW51eCBkaXJlY3RvcnkgKSBwcm9kdWNlZCB3aGVuIGJ1aWxkaW5nIAogdGhlIGtlcm5lbCB0byBmaW5kIHRoZSBjbG9zZXN0IGFkZHJlc3MgbGVzcyB0aGFuIHRoZSBjdXJyZW50IFBTVyB0byBmaW5kIHRoZQpAQCAtOTAyLDcgKzkwMiw3IEBACiB0byBhIGZpbGUgJiBvbiB0aGUgc2NyZWVuLgogCiBRLiBXaGF0IHVzZSBpcyBpdCA/Ci1BLiBZb3UgY2FuIHVzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBmaWxlcyBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBvcGVucy4KK0EuIFlvdSBjYW4gdXNlIGl0IHRvIGZpbmQgb3V0IHdoYXQgZmlsZXMgYSBwYXJ0aWN1bGFyIHByb2dyYW0gb3BlbnMuCiAKIAogCkBAIC05MTEsNyArOTExLDcgQEAKIElmIHlvdSB3YW50ZWQgdG8ga25vdyBkb2VzIHBpbmcgd29yayBidXQgZGlkbid0IGhhdmUgdGhlIHNvdXJjZSAKIHN0cmFjZSBwaW5nIC1jIDEgMTI3LjAuMC4xICAKICYgdGhlbiBsb29rIGF0IHRoZSBtYW4gcGFnZXMgZm9yIGVhY2ggb2YgdGhlIHN5c2NhbGxzIGJlbG93LAotKCBJbiBmYWN0IHRoaXMgaXMgc29tZXRpbWVzIGVhc2llciB0aGFuIGxvb2tpbmcgYXQgc29tZSBzcGFnZXR0aQorKCBJbiBmYWN0IHRoaXMgaXMgc29tZXRpbWVzIGVhc2llciB0aGFuIGxvb2tpbmcgYXQgc29tZSBzcGFnaGV0dGkKIHNvdXJjZSB3aGljaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIGZvciBzZXZlcmFsIGFyY2hpdGVjdHVyZXMgKS4KIE5vdCBldmVyeXRoaW5nIHRoYXQgaXQgdGhyb3dzIG91dCBuZWVkcyB0byBtYWtlIHNlbnNlIGltbWVkaWF0ZWx5LgogCkBAIC0xMDM3LDcgKzEwMzcsNyBAQAogCiBQZXJmb3JtYW5jZSBEZWJ1Z2dpbmcKID09PT09PT09PT09PT09PT09PT09PQotZ2NjIGlzIGNhcGlibGUgb2YgY29tcGlsaW5nIGluIHByb2ZpbGluZyBjb2RlIGp1c3QgYWRkIHRoZSAtcCBvcHRpb24KK2djYyBpcyBjYXBhYmxlIG9mIGNvbXBpbGluZyBpbiBwcm9maWxpbmcgY29kZSBqdXN0IGFkZCB0aGUgLXAgb3B0aW9uCiB0byB0aGUgQ0ZMQUdTLCB0aGlzIG9idmlvdXNseSBhZmZlY3RzIHByb2dyYW0gc2l6ZSAmIHBlcmZvcm1hbmNlLgogVGhpcyBjYW4gYmUgdXNlZCBieSB0aGUgZ3Byb2YgZ251IHByb2ZpbGluZyB0b29sIG9yIHRoZQogZ2NvdiB0aGUgZ251IGNvZGUgY292ZXJhZ2UgdG9vbCAoIGNvZGUgY292ZXJhZ2UgaXMgYSBtZWFucyBvZiB0ZXN0aW5nCkBAIC0xNDE5LDcgKzE0MTksNyBAQAogVG8gaXNzdWUgYSBjb21tYW5kIHRvIGEgcGFydGljdWxhciBjcHUgdHJ5IGNwdSA8Y3B1IG51bWJlcj4gZS5nLgogQ1BVIDAxIFRSIEkgUiAyMDAwLjMwMDAKIElmIHlvdSBhcmUgcnVubmluZyBvbiBhIGd1ZXN0IHdpdGggc2V2ZXJhbCBjcHVzICYgeW91IGhhdmUgYSBJTyByZWxhdGVkIHByb2JsZW0KLSYgY2Fubm90IGZvbGxvdyB0aGUgZmxvdyBvZiBjb2RlIGJ1dCB5b3Uga25vdyBpdCBpc250IHNtcCByZWxhdGVkLgorJiBjYW5ub3QgZm9sbG93IHRoZSBmbG93IG9mIGNvZGUgYnV0IHlvdSBrbm93IGl0IGlzbid0IHNtcCByZWxhdGVkLgogZnJvbSB0aGUgYmFzaCBwcm9tcHQgaXNzdWUKIHNodXRkb3duIC1oIG5vdyBvciBoYWx0LgogZG8gYSBRIENQVVMgdG8gZmluZCBvdXQgaG93IG1hbnkgY3B1cyB5b3UgaGF2ZQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAKIG91ciAzcmQgcmV0dXJuIGFkZHJlc3MgaXMgODAwMTA4NUEKIAogYXMgdGhlIDA0QjUyMDAyIGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIHJ1YmJpc2ggaXQgaXMgZmFpciB0byBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGVudHJ5IHJvdXRpbmVzCi1mb3IgdGhlIHNha2Ugb2Ygb3B0aW1pc2F0aW9uIGRvbnQgc2V0IHVwIGEgYmFja2NoYWluLgorZm9yIHRoZSBzYWtlIG9mIG9wdGltaXNhdGlvbiBkb24ndCBzZXQgdXAgYSBiYWNrY2hhaW4uCiAKIG5vdyBsb29rIGF0IFN5c3RlbS5tYXAgdG8gc2VlIGlmIHRoZSBhZGRyZXNzZXMgbWFrZSBhbnkgc2Vuc2UuCiAKQEAgLTE2MzgsMTEgKzE2MzgsMTEgQEAKIAogVW5saWtlIG90aGVyIGJ1cyBhcmNoaXRlY3R1cmVzIG1vZGVybiAzOTAgc3lzdGVtcyBkbyB0aGVpciBJTyB1c2luZyBtb3N0bHkKIGZpYnJlIG9wdGljcyAmIGRldmljZXMgc3VjaCBhcyB0YXBlcyAmIGRpc2tzIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBzZXZlcmFsIG1haW5mcmFtZXMsCi1hbHNvIFMzOTAgY2FuIHN1cHBvcnQgdXB0byA2NTUzNiBkZXZpY2VzIHdoaWxlIGEgaGlnaCBlbmQgUEMgYmFzZWQgc3lzdGVtIG1pZ2h0IGJlIGNob2tpbmcgCithbHNvIFMzOTAgY2FuIHN1cHBvcnQgdXAgdG8gNjU1MzYgZGV2aWNlcyB3aGlsZSBhIGhpZ2ggZW5kIFBDIGJhc2VkIHN5c3RlbSBtaWdodCBiZSBjaG9raW5nCiB3aXRoIGFyb3VuZCA2NC4gSGVyZSBpcyBzb21lIG9mIHRoZSBjb21tb24gSU8gdGVybWlub2xvZ3kKIAogU3ViY2hhbm5lbDoKLVRoaXMgaXMgdGhlIGxvZ2ljYWwgbnVtYmVyIG1vc3QgSU8gY29tbWFuZHMgdXNlIHRvIHRhbGsgdG8gYW4gSU8gZGV2aWNlIHRoZXJlIGNhbiBiZSB1cHRvCitUaGlzIGlzIHRoZSBsb2dpY2FsIG51bWJlciBtb3N0IElPIGNvbW1hbmRzIHVzZSB0byB0YWxrIHRvIGFuIElPIGRldmljZSB0aGVyZSBjYW4gYmUgdXAgdG8KIDB4MTAwMDAgKDY1NTM2KSBvZiB0aGVzZSBpbiBhIGNvbmZpZ3VyYXRpb24gdHlwaWNhbGx5IHRoZXJlIGlzIGEgZmV3IGh1bmRyZWQuIFVuZGVyIFZNCiBmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGxvY2F0ZWQgY29udGlndW91c2x5LCBob3dldmVyIG9uIHRoZSBuYXRpdmUgaGFyZHdhcmUgdGhleSBhcmUgbm90CiB0aGV5IHR5cGljYWxseSBzdGF5IGNvbnNpc3RlbnQgYmV0d2VlbiBib290cyBwcm92aWRlZCBubyBuZXcgaGFyZHdhcmUgaXMgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KQEAgLTE2NTEsNyArMTY1MSw3IEBACiBURVNUIFNVQkNIQU5ORUwgKSB3ZSB1c2UgdGhpcyBhcyB0aGUgSUQgb2YgdGhlIGRldmljZSB3ZSB3aXNoIHRvIHRhbGsgdG8sIHRoZSBtb3N0CiBpbXBvcnRhbnQgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBTVEFSVCBTVUJDSEFOTkVMICggdG8gc3RhcnQgSU8gKSwgVEVTVCBTVUJDSEFOTkVMICggdG8gY2hlY2sKIHdoZXRoZXIgdGhlIElPIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgKSwgJiBIQUxUIFNVQkNIQU5ORUwgKCB0byBraWxsIElPICksIGEgc3ViY2hhbm5lbAotY2FuIGhhdmUgdXAgdG8gOCBjaGFubmVsIHBhdGhzIHRvIGEgZGV2aWNlIHRoaXMgb2ZmZXJzIHJlZHVuYW5jeSBpZiBvbmUgaXMgbm90IGF2YWlsYWJsZS4KK2NhbiBoYXZlIHVwIHRvIDggY2hhbm5lbCBwYXRocyB0byBhIGRldmljZSB0aGlzIG9mZmVycyByZWR1bmRhbmN5IGlmIG9uZSBpcyBub3QgYXZhaWxhYmxlLgogCiAKIERldmljZSBOdW1iZXI6CkBAIC0xNjU5LDcgKzE2NTksNyBAQAogYWxzbyB0aGV5IGFyZSBtYWRlIHVwIG9mIGEgQ0hQSUQgKCBDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cyApIAogJiBhbm90aGVyIGxzYiA4IGJpdHMuIFRoZXNlIHJlbWFpbiBzdGF0aWMgZXZlbiBpZiBtb3JlIGRldmljZXMgYXJlIGluc2VydGVkIG9yIHJlbW92ZWQKIGZyb20gdGhlIGhhcmR3YXJlLCB0aGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gU3ViY2hhbm5lbHMgJiBEZXZpY2UgTnVtYmVycyBwcm92aWRlZAotZGV2aWNlcyBhcmVudCBpbnNlcnRlZCBvciByZW1vdmVkLgorZGV2aWNlcyBhcmVuJ3QgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KIAogQ2hhbm5lbCBDb250cm9sIFdvcmRzOgogQ0NXUyBhcmUgbGlua2VkIGxpc3RzIG9mIGluc3RydWN0aW9ucyBpbml0aWFsbHkgcG9pbnRlZCB0byBieSBhbiBvcGVyYXRpb24gcmVxdWVzdCBibG9jayAoT1JCKSwKQEAgLTE2NzQsNyArMTY3NCw3IEBACiBmcm9tIHdoaWNoIHlvdSByZWNlaXZlIGFuIEludGVycnVwdGlvbiByZXNwb25zZSBibG9jayAoSVJCKS4gSWYgeW91IGdldCBjaGFubmVsICYgZGV2aWNlIGVuZCAKIHN0YXR1cyBpbiB0aGUgSVJCIHdpdGhvdXQgY2hhbm5lbCBjaGVja3MgZXRjLiB5b3VyIElPIHByb2JhYmx5IHdlbnQgb2theS4gSWYgeW91IGRpZG4ndCB5b3UKIHByb2JhYmx5IG5lZWQgYSBkb2N0b3IgdG8gZXhhbWluZSB0aGUgSVJCICYgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgZXRjLgotSWYgYW4gZXJyb3Igb2NjdXJzLCBtb3JlIHNvcGhpc3RvY2F0ZWQgY29udHJvbCB1bml0cyBoYXZlIGEgZmFjaXRpdHkga25vd24gYXMKK0lmIGFuIGVycm9yIG9jY3VycywgbW9yZSBzb3BoaXN0aWNhdGVkIGNvbnRyb2wgdW5pdHMgaGF2ZSBhIGZhY2lsaXR5IGtub3duIGFzCiBjb25jdXJyZW50IHNlbnNlIHRoaXMgbWVhbnMgdGhhdCBpZiBhbiBlcnJvciBvY2N1cnMgRXh0ZW5kZWQgc2Vuc2UgaW5mb3JtYXRpb24gd2lsbAogYmUgcHJlc2VudGVkIGluIHRoZSBFeHRlbmRlZCBzdGF0dXMgd29yZCBpbiB0aGUgSVJCIGlmIG5vdCB5b3UgaGF2ZSB0byBpc3N1ZSBhCiBzdWJzZXF1ZW50IFNFTlNFIENDVyBjb21tYW5kIGFmdGVyIHRoZSB0ZXN0IHN1YmNoYW5uZWwuIApAQCAtMTc0OSw3ICsxNzQ5LDcgQEAKIFRoaXMgYnl0ZSB3aWRlIFBhcmFsbGVsIGNoYW5uZWwgcGF0aC9idXMgaGFzIHBhcml0eSAmIGRhdGEgb24gdGhlICJCdXMiIGNhYmxlIAogJiBjb250cm9sIGxpbmVzIG9uIHRoZSAiVGFnIiBjYWJsZS4gVGhlc2UgY2FuIG9wZXJhdGUgaW4gYnl0ZSBtdWx0aXBsZXggbW9kZSBmb3IKIHNoYXJpbmcgYmV0d2VlbiBzZXZlcmFsIHNsb3cgZGV2aWNlcyBvciBidXJzdCBtb2RlICYgbW9ub3BvbGl6ZSB0aGUgY2hhbm5lbCBmb3IgdGhlCi13aG9sZSBidXJzdC4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYWRkcmVzc2VkICBvbiBvbmUgb2YgdGhlc2UgY2FibGVzLiBUaGVzZSBjYWJsZXMgYXJlCit3aG9sZSBidXJzdC4gVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGFkZHJlc3NlZCAgb24gb25lIG9mIHRoZXNlIGNhYmxlcy4gVGhlc2UgY2FibGVzIGFyZQogYWJvdXQgb25lIGluY2ggaW4gZGlhbWV0ZXIuIFRoZSBtYXhpbXVtIHVuZXh0ZW5kZWQgbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGVzZSBjYWJsZXMgaXMKIDEyNSBNZXRlcnMgYnV0IHRoaXMgY2FuIGJlIGV4dGVuZGVkIHVwIHRvIDJrbSB3aXRoIGEgZmlicmUgb3B0aWMgY2hhbm5lbCBleHRlbmRlZCAKIHN1Y2ggYXMgYSAzMDQ0LiBUaGUgbWF4aW11bSBidXJzdCBzcGVlZCBzdXBwb3J0ZWQgaXMgNC41IG1lZ2FieXRlcyBwZXIgc2Vjb25kIGhvd2V2ZXIKQEAgLTE3NTksNyArMTc1OSw3IEBACiAKIEVTQ09OIGlmIGZpYnJlIG9wdGljIGl0IGlzIGFsc28gY2FsbGVkIEZJQ09OIAogV2FzIGludHJvZHVjZWQgYnkgSUJNIGluIDE5OTAuIEhhcyAyIGZpYnJlIG9wdGljIGNhYmxlcyAmIHVzZXMgZWl0aGVyIGxlZHMgb3IgbGFzZXJzCi1mb3IgY29tbXVuaWNhdGlvbiBhdCBhIHNpZ25hbGluZyByYXRlIG9mIHVwdG8gMjAwIG1lZ2FiaXRzL3NlYy4gQXMgMTBiaXRzIGFyZSB0cmFuc2ZlcnJlZAorZm9yIGNvbW11bmljYXRpb24gYXQgYSBzaWduYWxpbmcgcmF0ZSBvZiB1cCB0byAyMDAgbWVnYWJpdHMvc2VjLiBBcyAxMGJpdHMgYXJlIHRyYW5zZmVycmVkCiBmb3IgZXZlcnkgOCBiaXRzIGluZm8gdGhpcyBkcm9wcyB0byAxNjAgbWVnYWJpdHMvc2VjICYgdG8gMTguNiBNZWdhYnl0ZXMvc2VjIG9uY2UKIGNvbnRyb2wgaW5mbyAmIENSQyBhcmUgYWRkZWQuIEVTQ09OIG9ubHkgb3BlcmF0ZXMgaW4gYnVyc3QgbW9kZS4KICAKQEAgLTE3NjcsNyArMTc2Nyw3IEBACiBrbm93biBhcyBYREYgKCBleHRlbmRlZCBkaXN0YW5jZSBmYWNpbGl0eSApLiBUaGlzIGNhbiBiZSBmdXJ0aGVyIGV4dGVuZGVkIGJ5IHVzaW5nIGFuCiBFU0NPTiBkaXJlY3RvciB3aGljaCB0cmlwbGVzIHRoZSBhYm92ZSBtZW50aW9uZWQgcmFuZ2VzLiBVbmxpa2UgQnVzICYgVGFnIGFzIEVTQ09OIGlzCiBzZXJpYWwgaXQgdXNlcyBhIHBhY2tldCBzd2l0Y2hpbmcgYXJjaGl0ZWN0dXJlIHRoZSBzdGFuZGFyZCBCdXMgJiBUYWcgY29udHJvbCBwcm90b2NvbAotaXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sIAoraXMgaG93ZXZlciBwcmVzZW50IHdpdGhpbiB0aGUgcGFja2V0cy4gVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGF0dGFjaGVkIHRvIGVhY2ggY29udHJvbAogdW5pdCB0aGF0IHVzZXMgb25lIG9mIHRoZXNlIGludGVyZmFjZXMuCiAKIENvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgpAQCAtMjA1MCw3ICsyMDUwLDcgQEAKIAogZGlyZWN0b3J5OgogQWRkcyBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBmb3Igc291cmNlIGlmIGdkYiBjYW5ub3QgZmluZCB0aGUgc291cmNlLgotKG5vdGUgaXQgaXMgYSBiaXQgc2Vuc2l0aXRpdmUgYWJvdXQgc2xhc2hlcykgCisobm90ZSBpdCBpcyBhIGJpdCBzZW5zaXRpdmUgYWJvdXQgc2xhc2hlcykKIGUuZy4gVG8gYWRkIHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBzZWFyY2hwYXRoIGRvCiBkaXJlY3RvcnkgLy8KIApAQCAtMjE1Miw3ICsyMTUyLDcgQEAKIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiBUaGlzIGlzIHZlcnkgdXNlZnVsIGluIHRoYXQgYSBjdXN0b21lciBjYW4gbWFpbCBhIGNvcmUgZHVtcCB0byBhIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQKICYgdGhlIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQgY2FuIHJlY29uc3RydWN0IHdoYXQgaGFwcGVuZWQuCi1Qcm92aWRlZCB0aGUgaGF2ZSBhbiBpZGVudGljYWwgY29weSBvZiB0aGlzIHByb2dyYW0gd2l0aCBkZWJ1Z2dpbmcgc3ltYm9scyBjb21waWxlZCBpbiAmIAorUHJvdmlkZWQgdGhleSBoYXZlIGFuIGlkZW50aWNhbCBjb3B5IG9mIHRoaXMgcHJvZ3JhbSB3aXRoIGRlYnVnZ2luZyBzeW1ib2xzIGNvbXBpbGVkIGluICYKIHRoZSBzb3VyY2UgYmFzZSBvZiB0aGlzIGJ1aWxkIGlzIGF2YWlsYWJsZS4KIEluIHNob3J0IGl0IGlzIGZhciBtb3JlIHVzZWZ1bCB0aGFuIHNvbWV0aGluZyBsaWtlIGEgY3Jhc2ggbG9nIGNvdWxkIGV2ZXIgaG9wZSB0byBiZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dAppbmRleCAzMmE5NmNjLi4wNWEyYjRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dApAQCAtOTgsNyArOTgsNyBAQAogTGludXgvMzkwIGNvbW1vbiBkZXZpY2Ugc3VwcG9ydCAoQ0RTKSBwcm92aWRlcyB0byBhbGxvdyBmb3IgZGV2aWNlIHNwZWNpZmljCiBkcml2ZXIgaW1wbGVtZW50YXRpb25zIG9uIHRoZSBJQk0gRVNBLzM5MCBoYXJkd2FyZSBwbGF0Zm9ybS4gVGhvc2UgaW50ZXJmYWNlcwogaW50ZW5kIHRvIHByb3ZpZGUgdGhlIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgZXZlcnkgZGV2aWNlIGRyaXZlcgotaW1wbGVtZW50YWlvbiB0byBhbGxvdyB0byBkcml2ZSBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSBvbiB0aGUgRVNBLzM5MAoraW1wbGVtZW50YXRpb24gdG8gYWxsb3cgdG8gZHJpdmUgYSBzcGVjaWZpYyBoYXJkd2FyZSBkZXZpY2Ugb24gdGhlIEVTQS8zOTAKIHBsYXRmb3JtLiBTb21lIG9mIHRoZSBpbnRlcmZhY2Ugcm91dGluZXMgYXJlIHNwZWNpZmljIHRvIExpbnV4LzM5MCBhbmQgc29tZQogb2YgdGhlbSBjYW4gYmUgZm91bmQgb24gb3RoZXIgTGludXggcGxhdGZvcm1zIGltcGxlbWVudGF0aW9ucyB0b28uCiBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9uIHByb3RvdHlwZXMsIGRhdGEgZGVjbGFyYXRpb25zLCBhbmQgbWFjcm8gZGVmaW5pdGlvbnMKQEAgLTExNCw3ICsxMTQsNyBAQAogcHJvdmlkZXMgYSB1bmlmaWVkIHZpZXcgb2YgdGhlIGRldmljZXMgcGh5c2ljYWxseSBhdHRhY2hlZCB0byB0aGUgc3lzdGVtcy4KIFRob3VnaCB0aGUgRVNBLzM5MCBoYXJkd2FyZSBwbGF0Zm9ybSBrbm93cyBhYm91dCBhIGh1Z2UgdmFyaWV0eSBvZiBkaWZmZXJlbnQKIHBlcmlwaGVyYWwgYXR0YWNobWVudHMgbGlrZSBkaXNrIGRldmljZXMgKGFrYS4gREFTRHMpLCB0YXBlcywgY29tbXVuaWNhdGlvbgotY29udHJvbGxlcnMsIGV0Yy4gdGhleSBjYW4gYWxsIGJ5IGFjY2Vzc2VkIGJ5IGEgd2VsbCBkZWZpbmVkIGFjY2VzcyBtZXRob2QgYW5kCitjb250cm9sbGVycywgZXRjLiB0aGV5IGNhbiBhbGwgYmUgYWNjZXNzZWQgYnkgYSB3ZWxsIGRlZmluZWQgYWNjZXNzIG1ldGhvZCBhbmQKIHRoZXkgYXJlIHByZXNlbnRpbmcgSS9PIGNvbXBsZXRpb24gYSB1bmlmaWVkIHdheSA6IEkvTyBpbnRlcnJ1cHRpb25zLiBFdmVyeQogc2luZ2xlIGRldmljZSBpcyB1bmlxdWVseSBpZGVudGlmaWVkIHRvIHRoZSBzeXN0ZW0gYnkgYSBzbyBjYWxsZWQgc3ViY2hhbm5lbCwKIHdoZXJlIHRoZSBFU0EvMzkwIGFyY2hpdGVjdHVyZSBhbGxvd3MgZm9yIDY0ayBkZXZpY2VzIGJlIGF0dGFjaGVkLgpAQCAtMzM4LDcgKzMzOCw3IEBACiBUaGUgY2N3X2RldmljZV9zdGFydCgpIGZ1bmN0aW9uIHJldHVybnMgOgogCiAgICAgICAwIC0gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9yIHJlcXVlc3Qgc3VjY2Vzc2Z1bGx5IGluaXRpYXRlZAotLUVCVVNZICAtIFRoZSBkZXZpY2UgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcgYSBwcmV2aW91cyBJL08gcmVxdWVzdCwgb3IgdGhlciBpcworLUVCVVNZCS0gVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyBhIHByZXZpb3VzIEkvTyByZXF1ZXN0LCBvciB0aGVyZSBpcwogICAgICAgICAgIGEgc3RhdHVzIHBlbmRpbmcgYXQgdGhlIGRldmljZS4KIC1FTk9ERVYgLSBjZGV2IGlzIGludmFsaWQsIHRoZSBkZXZpY2UgaXMgbm90IG9wZXJhdGlvbmFsIG9yIHRoZSBjY3dfZGV2aWNlIGlzCiAgICAgICAgICAgbm90IG9ubGluZS4KQEAgLTM2MSw3ICszNjEsNyBAQAogLUVJTzogICAgICAgdGhlIGNvbW1vbiBJL08gbGF5ZXIgdGVybWluYXRlZCB0aGUgcmVxdWVzdCBkdWUgdG8gYW4gZXJyb3Igc3RhdGUKIAogSWYgdGhlIGNvbmN1cnJlbnQgc2Vuc2UgZmxhZyBpbiB0aGUgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIGlyYiBpcyBzZXQsIHRoZQotZmllbGQgaXJiLT5zY3N3LmNvdW50IGRlc2NyaWJlcyB0aGUgbnVtZXIgb2YgZGV2aWNlIHNwZWNpZmljIHNlbnNlIGJ5dGVzCitmaWVsZCBpcmItPnNjc3cuY291bnQgZGVzY3JpYmVzIHRoZSBudW1iZXIgb2YgZGV2aWNlIHNwZWNpZmljIHNlbnNlIGJ5dGVzCiBhdmFpbGFibGUgaW4gdGhlIGV4dGVuZGVkIGNvbnRyb2wgd29yZCBpcmItPnNjc3cuZWN3WzBdLiBObyBkZXZpY2Ugc2Vuc2luZyBieQogdGhlIGRldmljZSBkcml2ZXIgaXRzZWxmIGlzIHJlcXVpcmVkLgogCkBAIC00MTAsNyArNDEwLDcgQEAKIAogVGhlIGRldmljZSBkcml2ZXIgaXMgYWxsb3dlZCB0byBpc3N1ZSB0aGUgbmV4dCBjY3dfZGV2aWNlX3N0YXJ0KCkgY2FsbCBmcm9tCiB3aXRoaW4gaXRzIGludGVycnVwdCBoYW5kbGVyIGFscmVhZHkuIEl0IGlzIG5vdCByZXF1aXJlZCB0byBzY2hlZHVsZSBhCi1ib3R0b20taGFsZiwgdW5sZXNzIGFuIG5vbiBkZXRlcm1pbmlzdGljYWxseSBsb25nIHJ1bm5pbmcgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlCitib3R0b20taGFsZiwgdW5sZXNzIGEgbm9uIGRldGVybWluaXN0aWNhbGx5IGxvbmcgcnVubmluZyBlcnJvciByZWNvdmVyeSBwcm9jZWR1cmUKIG9yIHNpbWlsYXIgbmVlZHMgdG8gYmUgc2NoZWR1bGVkLiBEdXJpbmcgSS9PIHByb2Nlc3NpbmcgdGhlIExpbnV4LzM5MCBnZW5lcmljCiBJL08gZGV2aWNlIGRyaXZlciBzdXBwb3J0IGhhcyBhbHJlYWR5IG9idGFpbmVkIHRoZSBJUlEgbG9jaywgaS5lLiB0aGUgaGFuZGxlcgogbXVzdCBub3QgdHJ5IHRvIG9idGFpbiBpdCBhZ2FpbiB3aGVuIGNhbGxpbmcgY2N3X2RldmljZV9zdGFydCgpIG9yIHdlIGVuZCBpbiBhCkBAIC00MzEsNyArNDMxLDcgQEAKIGNhc2UgYWxsIEkvTyBpbnRlcnJ1cHRpb25zIGFyZSBwcmVzZW50ZWQgdG8gdGhlIGRldmljZSBkcml2ZXIgdW50aWwgZmluYWwKIHN0YXR1cyBpcyByZWNvZ25pemVkLgogCi1JZiBhIGRldmljZSBpcyBhYmxlIHRvIHJlY292ZXIgZnJvbSBhc3luY2hyb25vc2x5IHByZXNlbnRlZCBJL08gZXJyb3JzLCBpdCBjYW4KK0lmIGEgZGV2aWNlIGlzIGFibGUgdG8gcmVjb3ZlciBmcm9tIGFzeW5jaHJvbm91c2x5IHByZXNlbnRlZCBJL08gZXJyb3JzLCBpdCBjYW4KIHBlcmZvcm0gb3ZlcmxhcHBpbmcgSS9PIHVzaW5nIHRoZSBET0lPX0VBUkxZX05PVElGSUNBVElPTiBmbGFnLiBXaGlsZSBzb21lCiBkZXZpY2VzIGFsd2F5cyByZXBvcnQgY2hhbm5lbC1lbmQgYW5kIGRldmljZS1lbmQgdG9nZXRoZXIsIHdpdGggYSBzaW5nbGUKIGludGVycnVwdCwgb3RoZXJzIHByZXNlbnQgcHJpbWFyeSBzdGF0dXMgKGNoYW5uZWwtZW5kKSB3aGVuIHRoZSBjaGFubmVsIGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvY3J5cHRvL2NyeXB0by1BUEkudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2NyeXB0by9jcnlwdG8tQVBJLnR4dAppbmRleCA0MWE4YjA3Li43MWFlNmNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAvY3J5cHRvL2NyeXB0by1BUEkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9jcnlwdG8vY3J5cHRvLUFQSS50eHQKQEAgLTE3LDggKzE3LDggQEAKIDIuIFByb2JpbmcgZm9yIGF2YWlsYWJpbGl0eSBvZiBNU0EKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgS2VybmVscyB3aXRoIHRoZSB6OTkwIGNyeXB0byBpbXBsZW1lbnRhdGlvbnMgYm90aAotb24gbWFjaGluZXMgd2l0aCBNU0EgYXZhaWxhYmxlIGFuIG9uIHRob3NlIHdpdGhvdXQgTVNBIChwcmUgejk5MCBvciB6OTkwCi13aXRob3V0IE1TQSkuIFRoZXJlZm9yZSBhIHNpbXBsZSBwcm9iaW5nIG1lY2hhbmlzbXMgaGFzIGJlZW4gaW1wbGVtZW50ZWQ6CitvbiBtYWNoaW5lcyB3aXRoIE1TQSBhdmFpbGFibGUgYW5kIG9uIHRob3NlIHdpdGhvdXQgTVNBIChwcmUgejk5MCBvciB6OTkwCit3aXRob3V0IE1TQSkuIFRoZXJlZm9yZSBhIHNpbXBsZSBwcm9iaW5nIG1lY2hhbmlzbSBoYXMgYmVlbiBpbXBsZW1lbnRlZDoKIEluIHRoZSBpbml0IGZ1bmN0aW9uIG9mIGVhY2ggY3J5cHRvIG1vZHVsZSB0aGUgYXZhaWxhYmlsaXR5IG9mIE1TQSBhbmQgb2YgdGhlCiByZXNwZWN0aXZlIGNyeXB0byBhbGdvcml0aG0gaW4gcGFydGljdWxhciB3aWxsIGJlIHRlc3RlZC4gSWYgdGhlIGFsZ29yaXRobSBpcwogYXZhaWxhYmxlIHRoZSBtb2R1bGUgd2lsbCBsb2FkIGFuZCByZWdpc3RlciBpdHMgYWxnb3JpdGhtIHdpdGggdGhlIGNyeXB0byBBUEkuCkBAIC0yNiw3ICsyNiw3IEBACiBJZiB0aGUgcmVzcGVjdGl2ZSBjcnlwdG8gYWxnb3JpdGhtIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBpbml0IGZ1bmN0aW9uIHdpbGwKIHJldHVybiAtRU5PU1lTLiBJbiB0aGF0IGNhc2UgYSBmYWxsYmFjayB0byB0aGUgc3RhbmRhcmQgc29mdHdhcmUgaW1wbGVtZW50YXRpb24KIG9mIHRoZSBjcnlwdG8gYWxnb3JpdGhtIG11c3QgYmUgdGFrZW4gKCAtPiB0aGUgc3RhbmRhcmQgY3J5cHRvIG1vZHVsZXMgYXJlCi1hbHNvIGJ1aWxkIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwpLgorYWxzbyBidWlsdCB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsKS4KIAogCiAzLiBFbnN1cmluZyB6OTkwIGNyeXB0byBtb2R1bGUgcHJlZmVyZW5jZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL3MzOTBkYmYudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL3MzOTBkYmYudHh0CmluZGV4IDAwMDIzMGMuLjBlYjdjNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvczM5MGRiZi50eHQKQEAgLTM2LDcgKzM2LDcgQEAKIHRoYXQgdGhlIHJlY29yZHMgd2hpY2ggZGVzY3JpYmUgdGhlIG9yaWdpbiBvZiB0aGUgZXhjZXB0aW9uIGFyZSBub3QKIG92ZXJ3cml0dGVuIHdoZW4gYSB3cmFwIGFyb3VuZCBmb3IgdGhlIGN1cnJlbnQgYXJlYSBvY2N1cnMuCiAKLVRoZSBkZWJ1ZyBhcmVhcyBpdHNlbHZlIGFyZSBhbHNvIG9yZGVyZWQgaW4gZm9ybSBvZiBhIHJpbmcgYnVmZmVyLiAKK1RoZSBkZWJ1ZyBhcmVhcyB0aGVtc2VsdmVzIGFyZSBhbHNvIG9yZGVyZWQgaW4gZm9ybSBvZiBhIHJpbmcgYnVmZmVyLgogV2hlbiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIHRoZSBsYXN0IGRlYnVnIGFyZWEsIHRoZSBmb2xsb3dpbmcgZGVidWcgCiBlbnRyaWVzIGFyZSB0aGVuIHdyaXR0ZW4gYWdhaW4gaW4gdGhlIHZlcnkgZmlyc3QgYXJlYS4KIApAQCAtNTUsNyArNTUsNyBAQAogdGhlIGRlYnVnZnMtZmlsZXN5c3RlbS4gVW5kZXIgdGhlIHRvcGxldmVsIGRpcmVjdG9yeSAiczM5MGRiZiIgdGhlcmUgaXMKIGEgZGlyZWN0b3J5IGZvciBlYWNoIHJlZ2lzdGVyZWQgY29tcG9uZW50LCB3aGljaCBpcyBuYW1lZCBsaWtlIHRoZQogY29ycmVzcG9uZGluZyBjb21wb25lbnQuIFRoZSBkZWJ1Z2ZzIG5vcm1hbGx5IHNob3VsZCBiZSBtb3VudGVkIHRvCi0vc3lzL2tlcm5lbC9kZWJ1ZyB0aGVyZWZvcmUgdGhlIGRlYnVnIGZlYXR1cmUgY2FuIGJlIGFjY2Vzc2VkIHVudGVyCisvc3lzL2tlcm5lbC9kZWJ1ZyB0aGVyZWZvcmUgdGhlIGRlYnVnIGZlYXR1cmUgY2FuIGJlIGFjY2Vzc2VkIHVuZGVyCiAvc3lzL2tlcm5lbC9kZWJ1Zy9zMzkwZGJmLgogCiBUaGUgY29udGVudCBvZiB0aGUgZGlyZWN0b3JpZXMgYXJlIGZpbGVzIHdoaWNoIHJlcHJlc2VudCBkaWZmZXJlbnQgdmlld3MKQEAgLTg3LDExICs4NywxMSBAQAogZ2xvYmFsbHkuIFRoZSBmaXJzdCBwb3NzaWJpbGl0eSBpcyB0byB1c2UgdGhlICJkZWJ1Z19hY3RpdmUiIHN5c2N0bC4gSWYKIHNldCB0byAxIHRoZSBkZWJ1ZyBmZWF0dXJlIGlzIHJ1bm5pbmcuIElmICJkZWJ1Z19hY3RpdmUiIGlzIHNldCB0byAwIHRoZQogZGVidWcgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmLgotVGhlIHNlY29uZCB0cmlnZ2VyIHdoaWNoIHN0b3BzIHRoZSBkZWJ1ZyBmZWF0dXJlIGlzIGFuIGtlcm5lbCBvb3BzLgorVGhlIHNlY29uZCB0cmlnZ2VyIHdoaWNoIHN0b3BzIHRoZSBkZWJ1ZyBmZWF0dXJlIGlzIGEga2VybmVsIG9vcHMuCiBUaGF0IHByZXZlbnRzIHRoZSBkZWJ1ZyBmZWF0dXJlIGZyb20gb3ZlcndyaXRpbmcgZGVidWcgaW5mb3JtYXRpb24gdGhhdAogaGFwcGVuZWQgYmVmb3JlIHRoZSBvb3BzLiBBZnRlciBhbiBvb3BzIHlvdSBjYW4gcmVhY3RpdmF0ZSB0aGUgZGVidWcgZmVhdHVyZQogYnkgcGlwaW5nIDEgdG8gL3Byb2Mvc3lzL3MzOTBkYmYvZGVidWdfYWN0aXZlLiBOZXZlcnRoZWxlc3MsIGl0cyBub3QKLXN1Z2dlc3RlZCB0byB1c2UgYW4gb29wc2VkIGtlcm5lbCBpbiBhbiBwcm9kdWN0aW9uIGVudmlyb25tZW50Lgorc3VnZ2VzdGVkIHRvIHVzZSBhbiBvb3BzZWQga2VybmVsIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudC4KIElmIHlvdSB3YW50IHRvIGRpc2FsbG93IHRoZSBkZWFjdGl2YXRpb24gb2YgdGhlIGRlYnVnIGZlYXR1cmUsIHlvdSBjYW4gdXNlCiB0aGUgImRlYnVnX3N0b3BwYWJsZSIgc3lzY3RsLiBJZiB5b3Ugc2V0ICJkZWJ1Z19zdG9wcGFibGUiIHRvIDAgdGhlIGRlYnVnCiBmZWF0dXJlIGNhbm5vdCBiZSBzdG9wcGVkLiBJZiB0aGUgZGVidWcgZmVhdHVyZSBpcyBhbHJlYWR5IHN0b3BwZWQsIGl0CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDg0NmU3N2EuLjgzODVhNjkgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC00MzIsNiArNDMyLDEzIEBACiBXOglodHRwOi8vbGludXgtYXRtLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitBVE1FTCBNQUNCIEVUSEVSTkVUIERSSVZFUgorUDoJQXRtZWwgQVZSMzIgU3VwcG9ydCBUZWFtCitNOglhdnIzMkBhdG1lbC5jb20KK1A6CUhhYXZhcmQgU2tpbm5lbW9lbgorTToJaHNraW5uZW1vZW5AYXRtZWwuY29tCitTOglTdXBwb3J0ZWQKKwogQVRNRUwgV0lSRUxFU1MgRFJJVkVSCiBQOglTaW1vbiBLZWxsZXkKIE06CXNpbW9uQHRoZWtlbGxleXMub3JnLnVrCkBAIC0xMTU5LDExICsxMTY2LDYgQEAKIE06CWRob3dlbGxzQHJlZGhhdC5jb20KIFM6CU1haW50YWluZWQKIAotRlRBUEUvUUlDLTExNwotTDoJbGludXgtdGFwZUB2Z2VyLmtlcm5lbC5vcmcKLVc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZnRhcGUKLVM6CU9ycGhhbgotCiBGVVNFOiBGSUxFU1lTVEVNIElOIFVTRVJTUEFDRQogUDoJTWlrbG9zIFN6ZXJlZGkKIE06CW1pa2xvc0BzemVyZWRpLmh1CkBAIC0yMTMyLDYgKzIxMzQsMTMgQEAKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogCitORVRYRU4gKDEvMTApIEdiRSBTVVBQT1JUCitQOglBbWl0IFMuIEthbGUKK006CWFtaXRrYWxlQG5ldHhlbi5jb20KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93d3cubmV0eGVuLmNvbQorUzoJU3VwcG9ydGVkCisKIElQVlMKIFA6CVdlbnNvbmcgWmhhbmcKIE06CXdlbnNvbmdAbGludXgtdnMub3JnCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2xpYi9jaGVja3N1bS5jIGIvYXJjaC9hbHBoYS9saWIvY2hlY2tzdW0uYwppbmRleCA4OTA0NGU2Li5hYjM3NjFjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvYWxwaGEvbGliL2NoZWNrc3VtLmMKQEAgLTQxLDI4ICs0MSwyNSBAQAogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkLgogICovCi11bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJICAgdW5zaWduZWQgaW50IHN1bSkKKwkJCQkgICBfX3dzdW0gc3VtKQogewotCXJldHVybiB+ZnJvbTY0dG8xNihzYWRkciArIGRhZGRyICsgc3VtICsKLQkJKCh1bnNpZ25lZCBsb25nKSBudG9ocyhsZW4pIDw8IDE2KSArCi0JCSgodW5zaWduZWQgbG9uZykgcHJvdG8gPDwgOCkpOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5mcm9tNjR0bzE2KAorCQkoX19mb3JjZSB1NjQpc2FkZHIgKyAoX19mb3JjZSB1NjQpZGFkZHIgKworCQkoX19mb3JjZSB1NjQpc3VtICsgKChsZW4gKyBwcm90bykgPDwgOCkpOwogfQogCi11bnNpZ25lZCBpbnQgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK19fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCisJCQkJICAgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIAotCXJlc3VsdCA9IChzYWRkciArIGRhZGRyICsgc3VtICsKLQkJICAoKHVuc2lnbmVkIGxvbmcpIG50b2hzKGxlbikgPDwgMTYpICsKLQkJICAoKHVuc2lnbmVkIGxvbmcpIHByb3RvIDw8IDgpKTsKKwlyZXN1bHQgPSAoX19mb3JjZSB1NjQpc2FkZHIgKyAoX19mb3JjZSB1NjQpZGFkZHIgKworCQkgKF9fZm9yY2UgdTY0KXN1bSArICgobGVuICsgcHJvdG8pIDw8IDgpOwogCiAJLyogRm9sZCBkb3duIHRvIDMyLWJpdHMgc28gd2UgZG9uJ3QgbG9zZSBpbiB0aGUgdHlwZWRlZi1sZXNzIAogCSAgIG5ldHdvcmsgc3RhY2suICAqLwpAQCAtNzAsNyArNjcsNyBAQAogCXJlc3VsdCA9IChyZXN1bHQgJiAweGZmZmZmZmZmKSArIChyZXN1bHQgPj4gMzIpOwogCS8qIDMzIHRvIDMyICovCiAJcmVzdWx0ID0gKHJlc3VsdCAmIDB4ZmZmZmZmZmYpICsgKHJlc3VsdCA+PiAzMik7Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKXJlc3VsdDsKIH0KIAogLyoKQEAgLTE0Niw5ICsxNDMsOSBAQAogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwotdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpCitfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7Ci0JcmV0dXJuIH5kb19jc3VtKGlwaCxpaGwqNCk7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfmRvX2NzdW0oaXBoLGlobCo0KTsKIH0KIAogLyoKQEAgLTE2MywxNSArMTYwLDE1IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBkb19jc3VtKGJ1ZmYsIGxlbik7CiAKIAkvKiBhZGQgaW4gb2xkIHN1bSwgYW5kIGNhcnJ5Li4gKi8KLQlyZXN1bHQgKz0gc3VtOworCXJlc3VsdCArPSAoX19mb3JjZSB1MzIpc3VtOwogCS8qIDMyK2MgYml0cyAtPiAzMiBiaXRzICovCiAJcmVzdWx0ID0gKHJlc3VsdCAmIDB4ZmZmZmZmZmYpICsgKHJlc3VsdCA+PiAzMik7Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKXJlc3VsdDsKIH0KIAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwpAQCAtMTgwLDcgKzE3Nyw3IEBACiAgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CiAgKiBpbiBpY21wLmMKICAqLwotdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKIHsKLQlyZXR1cm4gfmZyb202NHRvMTYoZG9fY3N1bShidWZmLGxlbikpOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5mcm9tNjR0bzE2KGRvX2NzdW0oYnVmZixsZW4pKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMgYi9hcmNoL2FscGhhL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jCmluZGV4IGEzNzk0OGYuLjRjYTc1YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMKKysrIGIvYXJjaC9hbHBoYS9saWIvY3N1bV9wYXJ0aWFsX2NvcHkuYwpAQCAtMzI5LDExICszMjksMTEgQEAKIAlyZXR1cm4gY2hlY2tzdW07CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWRvX2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnJwKQorX193c3VtCitjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJICAgICAgIF9fd3N1bSBzdW0sIGludCAqZXJycCkKIHsKLQl1bnNpZ25lZCBsb25nIGNoZWNrc3VtID0gKHVuc2lnbmVkKSBzdW07CisJdW5zaWduZWQgbG9uZyBjaGVja3N1bSA9IChfX2ZvcmNlIHUzMikgc3VtOwogCXVuc2lnbmVkIGxvbmcgc29mZiA9IDcgJiAodW5zaWduZWQgbG9uZykgc3JjOwogCXVuc2lnbmVkIGxvbmcgZG9mZiA9IDcgJiAodW5zaWduZWQgbG9uZykgZHN0OwogCkBAIC0zNjcsMjUgKzM2NywxMiBAQAogCQl9CiAJCWNoZWNrc3VtID0gZnJvbTY0dG8xNiAoY2hlY2tzdW0pOwogCX0KLQlyZXR1cm4gY2hlY2tzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSljaGVja3N1bTsKIH0KIAotdW5zaWduZWQgaW50Ci1jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnNyYywgY2hhciAqZHN0LCBpbnQgbGVuLAotCQkJICAgIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJycCkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCBsZW4pKSB7Ci0JCSplcnJwID0gLUVGQVVMVDsKLQkJbWVtc2V0KGRzdCwgMCwgbGVuKTsKLQkJcmV0dXJuIHN1bTsKLQl9Ci0KLQlyZXR1cm4gZG9fY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJycCk7Ci19Ci0KLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkgIHVuc2lnbmVkIGludCBzdW0pCi17Ci0JcmV0dXJuIGRvX2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihzcmMsIGRzdCwgbGVuLCBzdW0sIE5VTEwpOworCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoKF9fZm9yY2UgY29uc3Qgdm9pZCBfX3VzZXIgKilzcmMsCisJCQlkc3QsIGxlbiwgc3VtLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvb2xkX2NoZWNrc3VtLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvbGliL29sZF9jaGVja3N1bS5jCmluZGV4IDIyYTZmMGEuLjQ5NzYzNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvb2xkX2NoZWNrc3VtLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9vbGRfY2hlY2tzdW0uYwpAQCAtNDcsMzkgKzQ3LDQxIEBACiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KIAotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqcCwgaW50IGxlbiwgX193c3VtIF9fc3VtKQogewotICAvKgotICAgKiBFeHBlcmltZW50cyB3aXRoIGV0aGVybmV0IGFuZCBzbGlwIGNvbm5lY3Rpb25zIHNob3cgdGhhdCBidWZmCi0gICAqIGlzIGFsaWduZWQgb24gZWl0aGVyIGEgMi1ieXRlIG9yIDQtYnl0ZSBib3VuZGFyeS4KLSAgICovCi0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZE1hcmtlciA9IGJ1ZmYgKyBsZW47Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1hcmtlciA9IGVuZE1hcmtlciAtIChsZW4gJSAxNik7CisJdTMyIHN1bSA9IChfX2ZvcmNlIHUzMilfX3N1bTsKKwljb25zdCB1MTYgKmJ1ZmYgPSBwOworCS8qCisJKiBFeHBlcmltZW50cyB3aXRoIGV0aGVybmV0IGFuZCBzbGlwIGNvbm5lY3Rpb25zIHNob3cgdGhhdCBidWZmCisJKiBpcyBhbGlnbmVkIG9uIGVpdGhlciBhIDItYnl0ZSBvciA0LWJ5dGUgYm91bmRhcnkuCisJKi8KKwljb25zdCB2b2lkICplbmRNYXJrZXIgPSBwICsgbGVuOworCWNvbnN0IHZvaWQgKm1hcmtlciA9IGVuZE1hcmtlciAtIChsZW4gJSAxNik7CiAjaWYgMAotICBpZigoaW50KWJ1ZmYgJiAweDMpCi0gICAgcHJpbnRrKCJ1bmFsaWduZWQgYnVmZiAlcFxuIiwgYnVmZik7Ci0gIF9fZGVsYXkoOTAwKTsgLyogZXh0cmEgZGVsYXkgb2YgOTAgdXMgdG8gdGVzdCBwZXJmb3JtYW5jZSBoaXQgKi8KKwlpZigoaW50KWJ1ZmYgJiAweDMpCisJCXByaW50aygidW5hbGlnbmVkIGJ1ZmYgJXBcbiIsIGJ1ZmYpOworCV9fZGVsYXkoOTAwKTsgLyogZXh0cmEgZGVsYXkgb2YgOTAgdXMgdG8gdGVzdCBwZXJmb3JtYW5jZSBoaXQgKi8KICNlbmRpZgotICBCSVRPTjsKLSAgd2hpbGUgKGJ1ZmYgPCBtYXJrZXIpIHsKLSAgICBzdW0gKz0gKigodW5zaWduZWQgc2hvcnQgKilidWZmKSsrOwotICAgIHN1bSArPSAqKCh1bnNpZ25lZCBzaG9ydCAqKWJ1ZmYpKys7Ci0gICAgc3VtICs9ICooKHVuc2lnbmVkIHNob3J0ICopYnVmZikrKzsKLSAgICBzdW0gKz0gKigodW5zaWduZWQgc2hvcnQgKilidWZmKSsrOwotICAgIHN1bSArPSAqKCh1bnNpZ25lZCBzaG9ydCAqKWJ1ZmYpKys7Ci0gICAgc3VtICs9ICooKHVuc2lnbmVkIHNob3J0ICopYnVmZikrKzsKLSAgICBzdW0gKz0gKigodW5zaWduZWQgc2hvcnQgKilidWZmKSsrOwotICAgIHN1bSArPSAqKCh1bnNpZ25lZCBzaG9ydCAqKWJ1ZmYpKys7Ci0gIH0KLSAgbWFya2VyID0gZW5kTWFya2VyIC0gKGxlbiAlIDIpOwotICB3aGlsZShidWZmIDwgbWFya2VyKSB7Ci0gICAgc3VtICs9ICooKHVuc2lnbmVkIHNob3J0ICopYnVmZikrKzsKLSAgfQotICBpZihlbmRNYXJrZXIgLSBidWZmID4gMCkgewotICAgIHN1bSArPSAqYnVmZjsgICAgICAgICAgICAgICAgIC8qIGFkZCBleHRyYSBieXRlIHNlcGVyYXRlbHkgKi8KLSAgfQotICBCSVRPRkY7Ci0gIHJldHVybihzdW0pOworCUJJVE9OOworCXdoaWxlIChidWZmIDwgbWFya2VyKSB7CisJCXN1bSArPSAqYnVmZisrOworCQlzdW0gKz0gKmJ1ZmYrKzsKKwkJc3VtICs9ICpidWZmKys7CisJCXN1bSArPSAqYnVmZisrOworCQlzdW0gKz0gKmJ1ZmYrKzsKKwkJc3VtICs9ICpidWZmKys7CisJCXN1bSArPSAqYnVmZisrOworCQlzdW0gKz0gKmJ1ZmYrKzsKKwl9CisJbWFya2VyID0gZW5kTWFya2VyIC0gKGxlbiAlIDIpOworCXdoaWxlIChidWZmIDwgbWFya2VyKQorCQlzdW0gKz0gKmJ1ZmYrKzsKKworCWlmIChlbmRNYXJrZXIgPiBidWZmKQorCQlzdW0gKz0gKihjb25zdCB1OCAqKWJ1ZmY7CS8qIGFkZCBleHRyYSBieXRlIHNlcGVyYXRlbHkgKi8KKworCUJJVE9GRjsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKXN1bTsKIH0KIAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbGliL2NoZWNrc3VtLmMgYi9hcmNoL2Zydi9saWIvY2hlY2tzdW0uYwppbmRleCAyMGU3ZGZjLi40NGUxNmQ1IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9saWIvY2hlY2tzdW0uYworKysgYi9hcmNoL2Zydi9saWIvY2hlY2tzdW0uYwpAQCAtMzIsNyArMzIsNiBAQAogICAgb2YgdGhlIGFzc2VtYmx5IGhhcyB0byBnby4gKi8KIAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGZyb20zMnRvMTYodW5zaWduZWQgbG9uZyB4KQpAQCAtMTA1LDE1ICsxMDQsMTUgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gZG9fY3N1bShidWZmLCBsZW4pOwogCiAJLyogYWRkIGluIG9sZCBzdW0sIGFuZCBjYXJyeS4uICovCi0JcmVzdWx0ICs9IHN1bTsKLQlpZiAoc3VtID4gcmVzdWx0KQorCXJlc3VsdCArPSAoX19mb3JjZSB1MzIpc3VtOworCWlmICgoX19mb3JjZSB1MzIpc3VtID4gcmVzdWx0KQogCQlyZXN1bHQgKz0gMTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmVzdWx0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CkBAIC0xMjIsOSArMTIxLDkgQEAKICAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKICAqIGluIGljbXAuYwogICovCi11bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewotCXJldHVybiB+ZG9fY3N1bShidWZmLCBsZW4pOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5kb19jc3VtKGJ1ZmYsIGxlbik7CiB9CiAKIEVYUE9SVF9TWU1CT0woaXBfY29tcHV0ZV9jc3VtKTsKQEAgLTEzMiw5ICsxMzEsOSBAQAogLyoKICAqIGNvcHkgZnJvbSBmcyB3aGlsZSBjaGVja3N1bW1pbmcsIG90aGVyd2lzZSBsaWtlIGNzdW1fcGFydGlhbAogICovCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsCi0JCQkgICAgaW50IGxlbiwgaW50IHN1bSwgaW50ICpjc3VtX2VycikKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCSAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmNzdW1fZXJyKQogewogCWludCByZW07CiAKQEAgLTE1NywxMSArMTU2LDExIEBACiAvKgogICogY29weSBmcm9tIGRzIHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCiAgKi8KLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHkoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pCitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7CiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwogCXJldHVybiBjc3VtX3BhcnRpYWwoZHN0LCBsZW4sIHN1bSk7CiB9CiAKLUVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHkpOworRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9oODMwMF9rc3ltcy5jCmluZGV4IDliNGJlMDUuLmQxYjE1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL2g4MzAwX2tzeW1zLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaDgzMDBfa3N5bXMuYwpAQCAtMzksNyArMzksNyBAQAogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwotRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weSk7CitFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spOwogCiAvKiBUaGUgZm9sbG93aW5nIGFyZSBzcGVjaWFsIGJlY2F1c2UgdGhleSdyZSBub3QgY2FsbGVkCiAgICBleHBsaWNpdGx5ICh0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgdGhlbSkuICBGb3J0dW5hdGVseSwKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvbGliL2NoZWNrc3VtLmMgYi9hcmNoL2g4MzAwL2xpYi9jaGVja3N1bS5jCmluZGV4IDVhYTY4OGQuLmJkYzViMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvbGliL2NoZWNrc3VtLmMKKysrIGIvYXJjaC9oODMwMC9saWIvY2hlY2tzdW0uYwpAQCAtOTYsOSArOTYsOSBAQAogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwotdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpCitfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7Ci0JcmV0dXJuIH5kb19jc3VtKGlwaCxpaGwqNCk7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfmRvX2NzdW0oaXBoLGlobCo0KTsKIH0KIAogLyoKQEAgLTExMywxNSArMTEzLDE5IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCisvKgorICogRWdhZHMuLi4gIFRoYXQgdGhpbmcgYXBwYXJlbnRseSBhc3N1bWVzIHRoYXQgKmFsbCogY2hlY2tzdW1zIGl0IGV2ZXIgc2VlcyB3aWxsCisgKiBiZSBmb2xkZWQuICBWZXJ5IGxpa2VseSBhIGJ1Zy4KKyAqLworX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGludCByZXN1bHQgPSBkb19jc3VtKGJ1ZmYsIGxlbik7CiAKIAkvKiBhZGQgaW4gb2xkIHN1bSwgYW5kIGNhcnJ5Li4gKi8KLQlyZXN1bHQgKz0gc3VtOworCXJlc3VsdCArPSAoX19mb3JjZSB1MzIpc3VtOwogCS8qIDE2K2MgYml0cyAtPiAxNiBiaXRzICovCiAJcmVzdWx0ID0gKHJlc3VsdCAmIDB4ZmZmZikgKyAocmVzdWx0ID4+IDE2KTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmVzdWx0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CkBAIC0xMzAsMjAgKzEzNCwyMSBAQAogICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQogICogaW4gaWNtcC5jCiAgKi8KLXVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK19fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCiB7Ci0JcmV0dXJuIH5kb19jc3VtKGJ1ZmYsbGVuKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+ZG9fY3N1bShidWZmLGxlbik7CiB9CiAKIC8qCiAgKiBjb3B5IGZyb20gZnMgd2hpbGUgY2hlY2tzdW1taW5nLCBvdGhlcndpc2UgbGlrZSBjc3VtX3BhcnRpYWwKICAqLwogCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSwgaW50ICpjc3VtX2VycikKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCSAgICBfX3dzdW0gc3VtLCBpbnQgKmNzdW1fZXJyKQogewogCWlmIChjc3VtX2VycikgKmNzdW1fZXJyID0gMDsKLQltZW1jcHkoZHN0LCBzcmMsIGxlbik7CisJbWVtY3B5KGRzdCwgKF9fZm9yY2UgY29uc3Qgdm9pZCAqKXNyYywgbGVuKTsKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRzdCwgbGVuLCBzdW0pOwogfQogCkBAIC0xNTEsOCArMTU2LDggQEAKICAqIGNvcHkgZnJvbSBkcyB3aGlsZSBjaGVja3N1bW1pbmcsIG90aGVyd2lzZSBsaWtlIGNzdW1fcGFydGlhbAogICovCiAKLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHkoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0pCitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7CiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwogCXJldHVybiBjc3VtX3BhcnRpYWwoZHN0LCBsZW4sIHN1bSk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBkMTJmYjk3Li5jOGY5NmNmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTMzMyw3ICszMzMsNyBAQAogLyoKICAqIFBhcnNlIEludGVycnVwdCBTb3VyY2UgT3ZlcnJpZGUgZm9yIHRoZSBBQ1BJIFNDSQogICovCi1zdGF0aWMgdm9pZCBhY3BpX3NjaV9pb2FwaWNfc2V0dXAodTMyIGJ1c19pcnEsIHUzMiBnc2ksIHUxNiBwb2xhcml0eSwgdTE2IHRyaWdnZXIpCitzdGF0aWMgdm9pZCBhY3BpX3NjaV9pb2FwaWNfc2V0dXAodTMyIGdzaSwgdTE2IHBvbGFyaXR5LCB1MTYgdHJpZ2dlcikKIHsKIAlpZiAodHJpZ2dlciA9PSAwKQkvKiBjb21wYXRpYmxlIFNDSSB0cmlnZ2VyIGlzIGxldmVsICovCiAJCXRyaWdnZXIgPSAzOwpAQCAtMzUzLDEzICszNTMsMTMgQEAKIAkgKiBJZiBHU0kgaXMgPCAxNiwgdGhpcyB3aWxsIHVwZGF0ZSBpdHMgZmxhZ3MsCiAJICogZWxzZSBpdCB3aWxsIGNyZWF0ZSBhIG5ldyBtcF9pcnFzW10gZW50cnkuCiAJICovCi0JbXBfb3ZlcnJpZGVfbGVnYWN5X2lycShidXNfaXJxLCBwb2xhcml0eSwgdHJpZ2dlciwgZ3NpKTsKKwltcF9vdmVycmlkZV9sZWdhY3lfaXJxKGdzaSwgcG9sYXJpdHksIHRyaWdnZXIsIGdzaSk7CiAKIAkvKgogCSAqIHN0YXNoIG92ZXItcmlkZSB0byBpbmRpY2F0ZSB3ZSd2ZSBiZWVuIGhlcmUKIAkgKiBhbmQgZm9yIGxhdGVyIHVwZGF0ZSBvZiBhY3BpX2ZhZHQKIAkgKi8KLQlhY3BpX3NjaV9vdmVycmlkZV9nc2kgPSBidXNfaXJxOworCWFjcGlfc2NpX292ZXJyaWRlX2dzaSA9IGdzaTsKIAlyZXR1cm47CiB9CiAKQEAgLTM3Nyw3ICszNzcsNyBAQAogCWFjcGlfdGFibGVfcHJpbnRfbWFkdF9lbnRyeShoZWFkZXIpOwogCiAJaWYgKGludHNyYy0+YnVzX2lycSA9PSBhY3BpX2ZhZHQuc2NpX2ludCkgewotCQlhY3BpX3NjaV9pb2FwaWNfc2V0dXAoaW50c3JjLT5idXNfaXJxLCBpbnRzcmMtPmdsb2JhbF9pcnEsCisJCWFjcGlfc2NpX2lvYXBpY19zZXR1cChpbnRzcmMtPmdsb2JhbF9pcnEsCiAJCQkJICAgICAgaW50c3JjLT5mbGFncy5wb2xhcml0eSwKIAkJCQkgICAgICBpbnRzcmMtPmZsYWdzLnRyaWdnZXIpOwogCQlyZXR1cm4gMDsKQEAgLTg4MCw3ICs4ODAsNyBAQAogCSAqIHByZXRlbmQgd2UgZ290IG9uZSBzbyB3ZSBjYW4gc2V0IHRoZSBTQ0kgZmxhZ3MuCiAJICovCiAJaWYgKCFhY3BpX3NjaV9vdmVycmlkZV9nc2kpCi0JCWFjcGlfc2NpX2lvYXBpY19zZXR1cChhY3BpX2ZhZHQuc2NpX2ludCwgYWNwaV9mYWR0LnNjaV9pbnQsIDAsIDApOworCQlhY3BpX3NjaV9pb2FwaWNfc2V0dXAoYWNwaV9mYWR0LnNjaV9pbnQsIDAsIDApOwogCiAJLyogRmlsbCBpbiBpZGVudGl0eSBsZWdhY3kgbWFwaW5ncyB3aGVyZSBubyBvdmVycmlkZSAqLwogCW1wX2NvbmZpZ19hY3BpX2xlZ2FjeV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvY3N0YXRlLmMgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvY3N0YXRlLmMKaW5kZXggMjA1NjNlNS4uNDY2NGI1NSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2NzdGF0ZS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2FjcGkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA1ODNjMjM4Li41MzVmOTc5IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDJkODcwM2IuLmJhZDhiNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS90aGVybV90aHJvdC5oPgogCiAvKiBIb3cgbG9uZyB0byB3YWl0IGJldHdlZW4gcmVwb3J0aW5nIHRoZXJtYWwgZXZlbnRzICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbGliL2NoZWNrc3VtLmMgYi9hcmNoL2lhNjQvbGliL2NoZWNrc3VtLmMKaW5kZXggYmViMTE3Mi4uNDQxMWQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvaWE2NC9saWIvY2hlY2tzdW0uYwpAQCAtMzMsMzIgKzMzLDMyIEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQuCiAgKi8KLXVuc2lnbmVkIHNob3J0IGludAotY3N1bV90Y3B1ZHBfbWFnaWMgKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitfX3N1bTE2Citjc3VtX3RjcHVkcF9tYWdpYyAoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7Ci0JcmV0dXJuIH5mcm9tNjR0bzE2KHNhZGRyICsgZGFkZHIgKyBzdW0gKyAoKHVuc2lnbmVkIGxvbmcpIG50b2hzKGxlbikgPDwgMTYpICsKLQkJCSAgICgodW5zaWduZWQgbG9uZykgcHJvdG8gPDwgOCkpOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5mcm9tNjR0bzE2KAorCQkoX19mb3JjZSB1NjQpc2FkZHIgKyAoX19mb3JjZSB1NjQpZGFkZHIgKworCQkoX19mb3JjZSB1NjQpc3VtICsgKChsZW4gKyBwcm90bykgPDwgOCkpOwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1fdGNwdWRwX21hZ2ljKTsKIAotdW5zaWduZWQgaW50Ci1jc3VtX3RjcHVkcF9ub2ZvbGQgKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQorX193c3VtCitjc3VtX3RjcHVkcF9ub2ZvbGQgKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIAotCXJlc3VsdCA9IChzYWRkciArIGRhZGRyICsgc3VtICsKLQkJICAoKHVuc2lnbmVkIGxvbmcpIG50b2hzKGxlbikgPDwgMTYpICsKLQkJICAoKHVuc2lnbmVkIGxvbmcpIHByb3RvIDw8IDgpKTsKKwlyZXN1bHQgPSAoX19mb3JjZSB1NjQpc2FkZHIgKyAoX19mb3JjZSB1NjQpZGFkZHIgKworCQkgKF9fZm9yY2UgdTY0KXN1bSArICgobGVuICsgcHJvdG8pIDw8IDgpOwogCiAJLyogRm9sZCBkb3duIHRvIDMyLWJpdHMgc28gd2UgZG9uJ3QgbG9zZSBpbiB0aGUgdHlwZWRlZi1sZXNzIG5ldHdvcmsgc3RhY2suICAqLwogCS8qIDY0IHRvIDMzICovCiAJcmVzdWx0ID0gKHJlc3VsdCAmIDB4ZmZmZmZmZmYpICsgKHJlc3VsdCA+PiAzMik7CiAJLyogMzMgdG8gMzIgKi8KIAlyZXN1bHQgPSAocmVzdWx0ICYgMHhmZmZmZmZmZikgKyAocmVzdWx0ID4+IDMyKTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmVzdWx0OwogfQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBkb19jc3VtIChjb25zdCB1bnNpZ25lZCBjaGFyICosIGxvbmcpOwpAQCAtNzUsMTYgKzc1LDE1IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsIChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKLQl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IGRvX2NzdW0oYnVmZiwgbGVuKTsKKwl1NjQgcmVzdWx0ID0gZG9fY3N1bShidWZmLCBsZW4pOwogCiAJLyogYWRkIGluIG9sZCBzdW0sIGFuZCBjYXJyeS4uICovCi0JcmVzdWx0ICs9IHN1bTsKKwlyZXN1bHQgKz0gKF9fZm9yY2UgdTMyKXN1bTsKIAkvKiAzMitjIGJpdHMgLT4gMzIgYml0cyAqLwogCXJlc3VsdCA9IChyZXN1bHQgJiAweGZmZmZmZmZmKSArIChyZXN1bHQgPj4gMzIpOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSlyZXN1bHQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKQEAgLTkzLDEwICs5Miw5IEBACiAgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CiAgKiBpbiBpY21wLmMKICAqLwotdW5zaWduZWQgc2hvcnQKLWlwX2NvbXB1dGVfY3N1bSAodW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bSAoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKIHsKLQlyZXR1cm4gfmRvX2NzdW0oYnVmZixsZW4pOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5kb19jc3VtKGJ1ZmYsbGVuKTsKIH0KIAogRVhQT1JUX1NZTUJPTChpcF9jb21wdXRlX2NzdW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2xpYi9jc3VtX3BhcnRpYWxfY29weS5jIGIvYXJjaC9pYTY0L2xpYi9jc3VtX3BhcnRpYWxfY29weS5jCmluZGV4IDM2ODY2ZTguLjUwM2RmZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9saWIvY3N1bV9wYXJ0aWFsX2NvcHkuYworKysgYi9hcmNoL2lhNjQvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMKQEAgLTEwNCw5ICsxMDQsOSBAQAogICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBkb19jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgbG9uZyk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWRvX2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCWludCBsZW4sIHVuc2lnbmVkIGludCBwc3VtLCBpbnQgKmVycnApCitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJaW50IGxlbiwgX193c3VtIHBzdW0sIGludCAqZXJycCkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIApAQCAtMTIyLDMwICsxMjIsMTcgQEAKIAlyZXN1bHQgPSBkb19jc3VtKGRzdCwgbGVuKTsKIAogCS8qIGFkZCBpbiBvbGQgc3VtLCBhbmQgY2FycnkuLiAqLwotCXJlc3VsdCArPSBwc3VtOworCXJlc3VsdCArPSAoX19mb3JjZSB1MzIpcHN1bTsKIAkvKiAzMitjIGJpdHMgLT4gMzIgYml0cyAqLwogCXJlc3VsdCA9IChyZXN1bHQgJiAweGZmZmZmZmZmKSArIChyZXN1bHQgPj4gMzIpOwotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSlyZXN1bHQ7CiB9CiAKLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyIChjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJycCkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCBsZW4pKSB7Ci0JCSplcnJwID0gLUVGQVVMVDsKLQkJbWVtc2V0KGRzdCwgMCwgbGVuKTsKLQkJcmV0dXJuIHN1bTsKLQl9Ci0KLQlyZXR1cm4gZG9fY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJycCk7Ci19Ci0KLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCi17Ci0JcmV0dXJuIGRvX2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihzcmMsIGRzdCwgbGVuLCBzdW0sIE5VTEwpOworCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoKF9fZm9yY2UgY29uc3Qgdm9pZCBfX3VzZXIgKilzcmMsCisJCQkJCSAgIGRzdCwgbGVuLCBzdW0sIE5VTEwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jIGIvYXJjaC9tMzJyL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jCmluZGV4IDNkNWYwNjEuLjU1OTZmM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9saWIvY3N1bV9wYXJ0aWFsX2NvcHkuYworKysgYi9hcmNoL20zMnIvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMKQEAgLTI3LDkgKzI3LDggQEAKIC8qCiAgKiBDb3B5IHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCiAgKi8KLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQorX193c3VtCitjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIChjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAlzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBsZW4sIHN1bSk7CiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwpAQCAtNDIsMTAgKzQxLDkgQEAKICAqIENvcHkgZnJvbSB1c2Vyc3BhY2UgYW5kIGNvbXB1dGUgY2hlY2tzdW0uICBJZiB3ZSBjYXRjaCBhbiBleGNlcHRpb24KICAqIHRoZW4gemVybyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLgogICovCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAorCQkJICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJaW50IG1pc3Npbmc7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9saWIvY2hlY2tzdW0uYyBiL2FyY2gvbTY4ay9saWIvY2hlY2tzdW0uYwppbmRleCBjYjEzYzZlLi5hZWQzYmUyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbGliL2NoZWNrc3VtLmMKKysrIGIvYXJjaC9tNjhrL2xpYi9jaGVja3N1bS5jCkBAIC0zOSw4ICszOSw3IEBACiAgKiBjb21wdXRlcyBhIHBhcnRpYWwgY2hlY2tzdW0sIGUuZy4gZm9yIFRDUC9VRFAgZnJhZ21lbnRzCiAgKi8KIAotdW5zaWduZWQgaW50Ci1jc3VtX3BhcnRpYWwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOwogCSAgLyoKQEAgLTEzMyw5ICsxMzIsOSBAQAogICogY29weSBmcm9tIHVzZXIgc3BhY2Ugd2hpbGUgY2hlY2tzdW1taW5nLCB3aXRoIGV4Y2VwdGlvbiBoYW5kbGluZy4KICAqLwogCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkgICAgaW50IGxlbiwgaW50IHN1bSwgaW50ICpjc3VtX2VycikKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCSAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmNzdW1fZXJyKQogewogCS8qCiAJICogR0NDIGRvZXNuJ3QgbGlrZSBtb3JlIHRoYW4gMTAgb3BlcmFuZHMgZm9yIHRoZSBhc20KQEAgLTMyNSw4ICszMjQsOCBAQAogICogY29weSBmcm9tIGtlcm5lbCBzcGFjZSB3aGlsZSBjaGVja3N1bW1pbmcsIG90aGVyd2lzZSBsaWtlIGNzdW1fcGFydGlhbAogICovCiAKLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CiAJX19hc21fXygibW92ZWwgJTIsJTRcblx0IgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKaW5kZXggYzFiYzIyYy4uYWE3MGRkZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZworKysgYi9hcmNoL202OGtub21tdS9LY29uZmlnCkBAIC0xNzMsNyArMTczLDcgQEAKIAkgIE9uIG1hbnkgU29DIHN0eWxlIENQVXMgdGhlIG1hc3RlciBDUFUgY2xvY2sgaXMgYWxzbyB1c2VkIHRvIGRyaXZlIAogCSAgb24tY2hpcCBwZXJpcGhlcmFscy4gVGhlIGNsb2NrIHRoYXQgaXMgZGlzdHJpYnV0ZWQgdG8gdGhlc2UKIAkgIHBlcmlwaGVyYWxzIGlzIHNvbWV0aW1lcyBhIGZpeGVkIHJhdGlvIG9mIHRoZSBtYXN0ZXIgY2xvY2sKLQkgIGZyZXF1ZW5jeS4gSWYgc28gdGhlbiBzZXQgdGhpcyB0byB0aGUgZGl2aWRlciByYXRpb24gb2YgdGhlCisJICBmcmVxdWVuY3kuIElmIHNvIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGRpdmlkZXIgcmF0aW8gb2YgdGhlCiAJICBtYXN0ZXIgY2xvY2sgdG8gdGhlIHBlcmlwaGVyYWwgY2xvY2suIElmIG5vdCBzdXJlIHRoZW4gc2VsZWN0IDEuCiAKIGNvbmZpZyBPTERNQVNLCkBAIC0xOTIsNyArMTkyLDcgQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBQYWxtIFBpbG90IDEwMDAvNTAwMCwgUGVyc29uYWwvUHJvIGFuZCBQYWxtSUlJLgogCiBjb25maWcgWENPUElMT1RfQlVHUwotCWJvb2wgIiAgKFgpQ29waWxvdCBzdXBwb3J0IgorCWJvb2wgIihYKUNvcGlsb3Qgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBJTE9UMwogCWhlbHAKIAkgIFN1cHBvcnQgdGhlIGJ1Z3Mgb2YgWGNvcGlsb3QuCkBAIC0yMTYsMjAgKzIxNiwyMCBAQAogCSAgU3VwcG9ydCBmb3IgdGhlIERyYWdlbkVuZ2luZSBJSSBib2FyZC4KIAogY29uZmlnIERJUkVDVF9JT19BQ0NFU1MKLQlib29sICIgIEFsbG93IHVzZXIgdG8gYWNjZXNzIElPIGRpcmVjdGx5IgorCWJvb2wgIkFsbG93IHVzZXIgdG8gYWNjZXNzIElPIGRpcmVjdGx5IgogCWRlcGVuZHMgb24gKFVDU0lNTSB8fCBVQ0RJTU0gfHwgRFJBR0VOMikKIAloZWxwCiAJICBEaXNhYmxlIHRoZSBDUFUgaW50ZXJuYWwgcmVnaXN0ZXJzIHByb3RlY3Rpb24gaW4gdXNlciBtb2RlLAogICAgICAgICAgIHRvIGFsbG93IGEgdXNlciBhcHBsaWNhdGlvbiB0byByZWFkL3dyaXRlIHRoZW0uCiAKIGNvbmZpZyBJTklUX0xDRAotCWJvb2wgIiAgSW5pdGlhbGl6ZSBMQ0QiCisJYm9vbCAiSW5pdGlhbGl6ZSBMQ0QiCiAJZGVwZW5kcyBvbiAoVUNTSU1NIHx8IFVDRElNTSB8fCBEUkFHRU4yKQogCWhlbHAKIAkgIEluaXRpYWxpemUgdGhlIExDRCBjb250cm9sbGVyIG9mIHRoZSA2OHgzMjggcHJvY2Vzc29yLgogCiBjb25maWcgTUVNT1JZX1JFU0VSVkUKLQlpbnQgIiAgTWVtb3J5IHJlc2VydmF0aW9uIChNaUIpIgorCWludCAiTWVtb3J5IHJlc2VydmF0aW9uIChNaUIpIgogCWRlcGVuZHMgb24gKFVDU0lNTSB8fCBVQ0RJTU0pCiAJaGVscAogCSAgUmVzZXJ2ZSBjZXJ0YWluIG1lbW9yeSByZWdpb25zIG9uIDY4eDMyOCBiYXNlZCBib2FyZHMuCkBAIC00MDksNyArNDA5LDcgQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBOZXRidXJuZXIgTU9ELTUyNzIgYm9hcmQuCiAKIGNvbmZpZyBST01GU19GUk9NX1JPTQotCWJvb2wgIiAgUk9NRlMgaW1hZ2Ugbm90IFJBTSByZXNpZGVudCIKKwlib29sICJST01GUyBpbWFnZSBub3QgUkFNIHJlc2lkZW50IgogCWRlcGVuZHMgb24gKE5FVHRlbCB8fCBTTkFQR0VBUikKIAloZWxwCiAJICBUaGUgUk9NZnMgZmlsZXN5c3RlbSB3aWxsIHN0YXkgcmVzaWRlbnQgaW4gdGhlIEZMQVNIL1JPTSwgbm90IGJlCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL202OGtfa3N5bXMuYwppbmRleCAxZTYyMTUwLi4yNTMyN2M5IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvbTY4a19rc3ltcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9tNjhrX2tzeW1zLmMKQEAgLTM4LDcgKzM4LDcgQEAKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKIC8qIE5ldHdvcmtpbmcgaGVscGVyIHJvdXRpbmVzLiAqLwotRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weSk7CitFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spOwogCiAvKiBUaGUgZm9sbG93aW5nIGFyZSBzcGVjaWFsIGJlY2F1c2UgdGhleSdyZSBub3QgY2FsbGVkCiAgICBleHBsaWNpdGx5ICh0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgdGhlbSkuICBGb3J0dW5hdGVseSwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGMxOGE4MzMuLjk0MTk1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAJdW5zaWduZWQgY2hhcgkqdHA7CiAJaW50CQlpOwogCi0JcHJpbnRrKEtFUk5fRU1FUkcgIlxuQ1VSUkVOVCBQUk9DRVNTOlxuXG4iKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiXG4iIEtFUk5fRU1FUkcgIkNVUlJFTlQgUFJPQ0VTUzpcbiIgS0VSTl9FTUVSRyAiXG4iKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiQ09NTT0lcyBQSUQ9JWRcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CiAKIAlpZiAoY3VycmVudC0+bW0pIHsKQEAgLTMwMSw3ICszMDEsOCBAQAogCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9kYXRhLAogCQkJKGludCkgY3VycmVudC0+bW0tPmVuZF9kYXRhLAogCQkJKGludCkgY3VycmVudC0+bW0tPmJyayk7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJVU0VSLVNUQUNLPSUwOHggIEtFUk5FTC1TVEFDSz0lMDh4XG5cbiIsCisJCXByaW50ayhLRVJOX0VNRVJHICJVU0VSLVNUQUNLPSUwOHggS0VSTkVMLVNUQUNLPSUwOHhcbiIKKwkJCUtFUk5fRU1FUkcgIlxuIiwKIAkJCShpbnQpIGN1cnJlbnQtPm1tLT5zdGFydF9zdGFjaywKIAkJCShpbnQpKCgodW5zaWduZWQgbG9uZykgY3VycmVudCkgKyBUSFJFQURfU0laRSkpOwogCX0KQEAgLTMxMiwzNiArMzEzLDM1IEBACiAJCWZwLT5kMCwgZnAtPmQxLCBmcC0+ZDIsIGZwLT5kMyk7CiAJcHJpbnRrKEtFUk5fRU1FUkcgImQ0OiAlMDhseCAgICBkNTogJTA4bHggICAgYTA6ICUwOGx4ICAgIGExOiAlMDhseFxuIiwKIAkJZnAtPmQ0LCBmcC0+ZDUsIGZwLT5hMCwgZnAtPmExKTsKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5VU1A6ICUwOHggICBUUkFQRlJBTUU6ICUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHJkdXNwKCksCi0JCSh1bnNpZ25lZCBpbnQpIGZwKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiXG4iIEtFUk5fRU1FUkcgIlVTUDogJTA4eCAgIFRSQVBGUkFNRTogJTA4eFxuIiwKKwkJKHVuc2lnbmVkIGludCkgcmR1c3AoKSwgKHVuc2lnbmVkIGludCkgZnApOwogCi0JcHJpbnRrKEtFUk5fRU1FUkcgIlxuQ09ERToiKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiXG4iIEtFUk5fRU1FUkcgIkNPREU6Iik7CiAJdHAgPSAoKHVuc2lnbmVkIGNoYXIgKikgZnAtPnBjKSAtIDB4MjA7CiAJZm9yIChzcCA9ICh1bnNpZ25lZCBsb25nICopIHRwLCBpID0gMDsgKGkgPCAweDQwKTsgIGkgKz0gNCkgewogCQlpZiAoKGkgJSAweDEwKSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIlxuJTA4eDogIiwgKGludCkgKHRwICsgaSkpOwotCQlwcmludGsoS0VSTl9FTUVSRyAiJTA4eCAiLCAoaW50KSAqc3ArKyk7CisJCQlwcmludGsoIlxuIiBLRVJOX0VNRVJHICIlMDh4OiAiLCAoaW50KSAodHAgKyBpKSk7CisJCXByaW50aygiJTA4eCAiLCAoaW50KSAqc3ArKyk7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJcbiIpOworCXByaW50aygiXG4iIEtFUk5fRU1FUkcgIlxuIik7CiAKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5LRVJORUwgU1RBQ0s6Iik7CisJcHJpbnRrKEtFUk5fRU1FUkcgIktFUk5FTCBTVEFDSzoiKTsKIAl0cCA9ICgodW5zaWduZWQgY2hhciAqKSBmcCkgLSAweDQwOwogCWZvciAoc3AgPSAodW5zaWduZWQgbG9uZyAqKSB0cCwgaSA9IDA7IChpIDwgMHhjMCk7IGkgKz0gNCkgewogCQlpZiAoKGkgJSAweDEwKSA9PSAwKQotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIlxuJTA4eDogIiwgKGludCkgKHRwICsgaSkpOwotCQlwcmludGsoS0VSTl9FTUVSRyAiJTA4eCAiLCAoaW50KSAqc3ArKyk7CisJCQlwcmludGsoIlxuIiBLRVJOX0VNRVJHICIlMDh4OiAiLCAoaW50KSAodHAgKyBpKSk7CisJCXByaW50aygiJTA4eCAiLCAoaW50KSAqc3ArKyk7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJcbiIpOwotCXByaW50ayhLRVJOX0VNRVJHICJcbiIpOworCXByaW50aygiXG4iIEtFUk5fRU1FUkcgIlxuIik7CiAKLQlwcmludGsoS0VSTl9FTUVSRyAiXG5VU0VSIFNUQUNLOiIpOworCXByaW50ayhLRVJOX0VNRVJHICJVU0VSIFNUQUNLOiIpOwogCXRwID0gKHVuc2lnbmVkIGNoYXIgKikgKHJkdXNwKCkgLSAweDEwKTsKIAlmb3IgKHNwID0gKHVuc2lnbmVkIGxvbmcgKikgdHAsIGkgPSAwOyAoaSA8IDB4ODApOyBpICs9IDQpIHsKIAkJaWYgKChpICUgMHgxMCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0VNRVJHICJcbiUwOHg6ICIsIChpbnQpICh0cCArIGkpKTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiUwOHggIiwgKGludCkgKnNwKyspOworCQkJcHJpbnRrKCJcbiIgS0VSTl9FTUVSRyAiJTA4eDogIiwgKGludCkgKHRwICsgaSkpOworCQlwcmludGsoIiUwOHggIiwgKGludCkgKnNwKyspOwogCX0KLQlwcmludGsoS0VSTl9FTUVSRyAiXG5cbiIpOworCXByaW50aygiXG4iIEtFUk5fRU1FUkcgIlxuIik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZXR1cC5jCmluZGV4IDdiMjE5NTkuLjljZjJlNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zZXR1cC5jCkBAIC0zNiwxMCArMzYsNyBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNlbmRpZgogCiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydDsKIHVuc2lnbmVkIGxvbmcgbWVtb3J5X2VuZDsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNfbTY4ay5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMKaW5kZXggYzM0OTRiOC4uMzI2NWIyZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogYXNtbGlua2FnZSBpbnQgc3lzX2lwYyAodWludCBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsCiAJCQlpbnQgdGhpcmQsIHZvaWQgKnB0ciwgbG9uZyBmaWZ0aCkKIHsKLQlpbnQgdmVyc2lvbjsKKwlpbnQgdmVyc2lvbiwgcmV0OwogCiAJdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KIAljYWxsICY9IDB4ZmZmZjsKQEAgLTE5MCw2ICsxOTAsMjcgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJaWYgKGNhbGwgPD0gU0hNQ1RMKQorCQlzd2l0Y2ggKGNhbGwpIHsKKwkJY2FzZSBTSE1BVDoKKwkJCXN3aXRjaCAodmVyc2lvbikgeworCQkJZGVmYXVsdDogeworCQkJCXVsb25nIHJhZGRyOworCQkJCXJldCA9IGRvX3NobWF0IChmaXJzdCwgcHRyLCBzZWNvbmQsICZyYWRkcik7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQlyZXR1cm4gcHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgX191c2VyICopIHRoaXJkKTsKKwkJCX0KKwkJCX0KKwkJY2FzZSBTSE1EVDoKKwkJCXJldHVybiBzeXNfc2htZHQgKHB0cik7CisJCWNhc2UgU0hNR0VUOgorCQkJcmV0dXJuIHN5c19zaG1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKKwkJY2FzZSBTSE1DVEw6CisJCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwgcHRyKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PU1lTOworCQl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RyYXBzLmMKaW5kZXggMTc2NDlkMi4uOTEyOWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RyYXBzLmMKQEAgLTEyNywxMSArMTI3LDEyIEBACiAJCWlmIChzdGFjayArIDEgPiBlbmRzdGFjaykKIAkJCWJyZWFrOwogCQlpZiAoaSAlIDggPT0gMCkKLQkJCXByaW50ayhLRVJOX0VNRVJHICJcbiAgICAgICAiKTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIiAlMDhseCIsICpzdGFjaysrKTsKKwkJCXByaW50aygiXG4iIEtFUk5fRU1FUkcgIiAgICAgICAiKTsKKwkJcHJpbnRrKCIgJTA4bHgiLCAqc3RhY2srKyk7CiAJfQorCXByaW50aygiXG4iKTsKIAotCXByaW50ayhLRVJOX0VNRVJHICJcbkNhbGwgVHJhY2U6Iik7CisJcHJpbnRrKEtFUk5fRU1FUkcgIkNhbGwgVHJhY2U6Iik7CiAJaSA9IDA7CiAJd2hpbGUgKHN0YWNrICsgMSA8PSBlbmRzdGFjaykgewogCQlhZGRyID0gKnN0YWNrKys7CkBAIC0xNDYsMTIgKzE0NywxMiBAQAogCQlpZiAoKChhZGRyID49ICh1bnNpZ25lZCBsb25nKSAmX3N0YXJ0KSAmJgogCQkgICAgIChhZGRyIDw9ICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0KSkpIHsKIAkJCWlmIChpICUgNCA9PSAwKQotCQkJCXByaW50ayhLRVJOX0VNRVJHICJcbiAgICAgICAiKTsKLQkJCXByaW50ayhLRVJOX0VNRVJHICIgWzwlMDhseD5dIiwgYWRkcik7CisJCQkJcHJpbnRrKCJcbiIgS0VSTl9FTUVSRyAiICAgICAgICIpOworCQkJcHJpbnRrKCIgWzwlMDhseD5dIiwgYWRkcik7CiAJCQlpKys7CiAJCX0KIAl9Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlxuIik7CisJcHJpbnRrKCJcbiIpOwogfQogCiB2b2lkIGJhZF9zdXBlcl90cmFwKHN0cnVjdCBmcmFtZSAqZnApCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9saWIvY2hlY2tzdW0uYyBiL2FyY2gvbTY4a25vbW11L2xpYi9jaGVja3N1bS5jCmluZGV4IDdiZWM2ZmQuLjI2OWQ4M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2xpYi9jaGVja3N1bS5jCkBAIC05Niw5ICs5Niw5IEBACiAgKglUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCiAgKgl3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgogICovCi11bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqIGlwaCwgdW5zaWduZWQgaW50IGlobCkKK19fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKLQlyZXR1cm4gfmRvX2NzdW0oaXBoLGlobCo0KTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+ZG9fY3N1bShpcGgsaWhsKjQpOwogfQogCiAvKgpAQCAtMTEzLDE1ICsxMTMsMTUgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gZG9fY3N1bShidWZmLCBsZW4pOwogCiAJLyogYWRkIGluIG9sZCBzdW0sIGFuZCBjYXJyeS4uICovCi0JcmVzdWx0ICs9IHN1bTsKLQlpZiAoc3VtID4gcmVzdWx0KQorCXJlc3VsdCArPSAoX19mb3JjZSB1MzIpc3VtOworCWlmICgoX19mb3JjZSB1MzIpc3VtID4gcmVzdWx0KQogCQlyZXN1bHQgKz0gMTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmVzdWx0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CkBAIC0xMzAsMjEgKzEzMCwyMSBAQAogICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQogICogaW4gaWNtcC5jCiAgKi8KLXVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK19fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCiB7Ci0JcmV0dXJuIH5kb19jc3VtKGJ1ZmYsbGVuKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+ZG9fY3N1bShidWZmLGxlbik7CiB9CiAKIC8qCiAgKiBjb3B5IGZyb20gZnMgd2hpbGUgY2hlY2tzdW1taW5nLCBvdGhlcndpc2UgbGlrZSBjc3VtX3BhcnRpYWwKICAqLwogCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCSAgICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmNzdW1fZXJyKQorX193c3VtCitjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAorCQkJICAgIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqY3N1bV9lcnIpCiB7CiAJaWYgKGNzdW1fZXJyKSAqY3N1bV9lcnIgPSAwOwotCW1lbWNweShkc3QsIHNyYywgbGVuKTsKKwltZW1jcHkoZHN0LCAoX19mb3JjZSBjb25zdCB2b2lkICopc3JjLCBsZW4pOwogCXJldHVybiBjc3VtX3BhcnRpYWwoZHN0LCBsZW4sIHN1bSk7CiB9CiAKQEAgLTE1Miw4ICsxNTIsOCBAQAogICogY29weSBmcm9tIGRzIHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCiAgKi8KIAotdW5zaWduZWQgaW50Ci1jc3VtX3BhcnRpYWxfY29weShjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAltZW1jcHkoZHN0LCBzcmMsIGxlbik7CiAJcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvaGVhZC5TIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9oZWFkLlMKaW5kZXggZjJlZGI2NC4uYjlhYTBjYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9oZWFkLlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9oZWFkLlMKQEAgLTY0LDYgKzY0LDI2IEBACiAJbmVnbAklZDAJCQkvKiBuZWdhdGUgYml0cyAqLwogLmVuZG0KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMHgpCisubWFjcm8gR0VUX01FTV9TSVpFCisJY2xybAklZDAKKwltb3ZlbAlNQ0ZfTUJBUitNQ0ZTSU1fU0RDUzAsICVkMiAvKiBHZXQgU0RSQU0gY2hpcCBzZWxlY3QgMCBjb25maWcgKi8KKwlhbmRsCSMweDFmLCAlZDIJCS8qIEdldCBvbmx5IHRoZSBjaGlwIHNlbGVjdCBzaXplICovCisJYmVxCTNmCQkJLyogQ2hlY2sgaWYgaXQgaXMgZW5hYmxlZCAqLworCWFkZHFsCSMxLCAlZDIJCQkvKiBGb3JtIGV4cG9uZW50ICovCisJbW92ZXFsCSMxLCAlZDAKKwlsc2xsCSVkMiwgJWQwCQkvKiAyIF4gZXhwb25lbnQgKi8KKzM6CisJbW92ZWwJTUNGX01CQVIrTUNGU0lNX1NEQ1MxLCAlZDIgLyogR2V0IFNEUkFNIGNoaXAgc2VsZWN0IDEgY29uZmlnICovCisJYW5kbAkjMHgxZiwgJWQyCQkvKiBHZXQgb25seSB0aGUgY2hpcCBzZWxlY3Qgc2l6ZSAqLworCWJlcQk0ZgkJCS8qIENoZWNrIGlmIGl0IGlzIGVuYWJsZWQgKi8KKwlhZGRxbAkjMSwgJWQyCQkJLyogRm9ybSBleHBvbmVudCAqLworCW1vdmVxbAkjMSwgJWQxCisJbHNsbAklZDIsICVkMQkJLyogMiBeIGV4cG9uZW50ICovCisJYWRkbAklZDEsICVkMAkJLyogVG90YWwgc2l6ZSBvZiBTRFJBTSBpbiBkMCAqLworNDoKKy5lbmRtCisKICNlbHNlCiAjZXJyb3IgIkVSUk9SOiBJIGRvbid0IGtub3cgaG93IHRvIHByb2JlIHlvdXIgYm9hcmRzIG1lbW9yeSBzaXplPyIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaGVhZC1yYW0uUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2hlYWQtcmFtLlMKaW5kZXggMmVhNTE0Ny4uMmVmMDYyNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaGVhZC1yYW0uUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9oZWFkLXJhbS5TCkBAIC0yNSw2ICsyNSw3IEBACiAuZ2xvYmFsIF9wZXJpcGhfYmFzZQogCiAjZGVmaW5lCVJBTUVORCAgICAgICAgICAgICAgICAgICAgICAoQ09ORklHX1JBTUJBU0UgKyBDT05GSUdfUkFNU0laRSkKKyNkZWZpbmUJUk9NRU5EICAgICAgICAgICAgICAgICAgICAgIChDT05GSUdfUk9NQkFTRSArIENPTkZJR19ST01TSVpFKQogCiAjZGVmaW5lIFJFR0IgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAKICNkZWZpbmUgUEVQQVIgICAgICAgICAgICAgICAgICAgICAgIChfZHByYmFzZSArIFJFR0IgKyAweDAwMTYpCkBAIC0xNzUsNyArMTc2LDcgQEAKIAltb3ZlLmwJJWQwLCBCUjAKIAogY29uZmlndXJlX2NoaXBfc2VsZWN0XzE6Ci0JbW92ZS5sCSNfX3JvbV9lbmQsICVkMAorCW1vdmUubAkjUk9NRU5ELCAlZDAKIAlzdWJpLmwJI19fcm9tX3N0YXJ0LCAlZDAKIAlzdWJxLmwJIzB4MDEsICVkMAogCWVvcmkubAkjU0lNX09SX01BU0ssICVkMApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jIGIvYXJjaC9taXBzL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jCmluZGV4IDZlOWYzNjYuLjE3MjBmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9saWIvY3N1bV9wYXJ0aWFsX2NvcHkuYworKysgYi9hcmNoL21pcHMvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMKQEAgLTE2LDggKzE2LDggQEAKIC8qCiAgKiBjb3B5IHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQl1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsCisJdm9pZCAqZHN0LCBpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCS8qCiAJICogSXQncyAyOjMwIGFtIGFuZCBJIGRvbid0IGZlZWwgbGlrZSBkb2luZyBpdCByZWFsIC4uLgpAQCAtMzMsOCArMzMsOCBAQAogICogQ29weSBmcm9tIHVzZXJzcGFjZSBhbmQgY29tcHV0ZSBjaGVja3N1bS4gIElmIHdlIGNhdGNoIGFuIGV4Y2VwdGlvbgogICogdGhlbiB6ZXJvIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuCiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsCi0JdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyIChjb25zdCB2b2lkIF9fdXNlciAqc3JjLAorCXZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJfcHRyKQogewogCWludCBtaXNzaW5nOwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9saWIvY2hlY2tzdW0uYyBiL2FyY2gvcGFyaXNjL2xpYi9jaGVja3N1bS5jCmluZGV4IDhhMWUwODAuLjQ2MjY5NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2xpYi9jaGVja3N1bS5jCisrKyBiL2FyY2gvcGFyaXNjL2xpYi9jaGVja3N1bS5jCkBAIC0xMDEsMTEgKzEwMSwxNCBAQAogLyoKICAqIGNvbXB1dGVzIGEgcGFydGlhbCBjaGVja3N1bSwgZS5nLiBmb3IgVENQL1VEUCBmcmFnbWVudHMKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQorLyoKKyAqIHdoeSBib3RoZXIgZm9sZGluZz8KKyAqLworX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGludCByZXN1bHQgPSBkb19jc3VtKGJ1ZmYsIGxlbik7CiAJYWRkYyhyZXN1bHQsIHN1bSk7Ci0JcmV0dXJuIGZyb20zMnRvMTYocmVzdWx0KTsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKWZyb20zMnRvMTYocmVzdWx0KTsKIH0KIAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWwpOwpAQCAtMTEzLDggKzExNiw4IEBACiAvKgogICogY29weSB3aGlsZSBjaGVja3N1bW1pbmcsIG90aGVyd2lzZSBsaWtlIGNzdW1fcGFydGlhbAogICovCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkgICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCSAgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCS8qCiAJICogSXQncyAyOjMwIGFtIGFuZCBJIGRvbid0IGZlZWwgbGlrZSBkb2luZyBpdCByZWFsIC4uLgpAQCAtMTMxLDkgKzEzNCw5IEBACiAgKiBDb3B5IGZyb20gdXNlcnNwYWNlIGFuZCBjb21wdXRlIGNoZWNrc3VtLiAgSWYgd2UgY2F0Y2ggYW4gZXhjZXB0aW9uCiAgKiB0aGVuIHplcm8gdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLAotCQkJCQl1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkJCXVuc2lnbmVkIGludCBzdW0sIGludCAqZXJyX3B0cikKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKKwkJCQkJdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJCQlfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJaW50IG1pc3Npbmc7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggMjQ1YjgxYi4uNTgzZDlmZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTMzLDkgKzMzLDYgQEAKIGNvbmZpZyBHRU5FUklDX1RJTUUKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBHRU5FUklDX0JVU1RfU1BJTkxPQ0sKLQlib29sCi0KIG1haW5tZW51ICJMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiIKIAogY29uZmlnIFMzOTAKQEAgLTE4MSw3ICsxNzgsNyBAQAogCiBjb25maWcgU01BTExfU1RBQ0sKIAlib29sICJVc2UgNGtiLzhrYiBmb3Iga2VybmVsIHN0YWNrIGluc3RlYWQgb2YgOGtiLzE2a2IiCi0JZGVwZW5kcyBvbiBQQUNLX1NUQUNLCisJZGVwZW5kcyBvbiBQQUNLX1NUQUNLICYmICFMT0NLREVQCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgYW5kIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLW1rZXJuZWwtYmFja2NoYWluCiAJICBvcHRpb24gdGhlIGtlcm5lbCB3aWxsIHVzZSBhIHNtYWxsZXIga2VybmVsIHN0YWNrIHNpemUuIEZvciAzMSBiaXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9NYWtlZmlsZSBiL2FyY2gvczM5MC9NYWtlZmlsZQppbmRleCA1ZGViOWY3Li42NTk4ZTUyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL01ha2VmaWxlCkBAIC0zNSw2ICszNSw5IEBACiBjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjk5MCkgKz0gJChjYWxsIGNjLW9wdGlvbiwtbWFyY2g9ejk5MCkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOV8xMDkpICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXo5LTEwOSkKIAorI0tCVUlMRF9JTUFHRSBpcyBuZWNlc3NhcnkgZm9yIG1ha2UgcnBtCitLQlVJTERfSU1BR0UJOj1hcmNoL3MzOTAvYm9vdC9pbWFnZQorCiAjCiAjIFByZXZlbnQgdGFpbC1jYWxsIG9wdGltaXphdGlvbnMsIHRvIGdldCBjbGVhcmVyIGJhY2t0cmFjZXM6CiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCBhYTk3ODk3Li5hODE4ODFjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIEVYVFJBX0FGTEFHUwk6PSAtdHJhZGl0aW9uYWwKIAotb2JqLXkJOj0gIGJpdG1hcC5vIHRyYXBzLm8gdGltZS5vIHByb2Nlc3MubyBcCitvYmoteQk6PSAgYml0bWFwLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIHJlc2V0Lm8gXAogICAgICAgICAgICAgc2V0dXAubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAogCSAgICBzZW1hcGhvcmUubyBzMzkwX2V4dC5vIGRlYnVnLm8gcHJvZmlsZS5vIGlycS5vIGlwbC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY3BjbWQuYyBiL2FyY2gvczM5MC9rZXJuZWwvY3BjbWQuYwppbmRleCAxZWFlNzRlLi5hNTk3MmYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NwY21kLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jcGNtZC5jCkBAIC0yMSwxNCArMjEsMTUgQEAKIHN0YXRpYyBjaGFyIGNwY21kX2J1ZlsyNDFdOwogCiAvKgotICogdGhlIGNhbGxlciBvZiBfX2NwY21kIGhhcyB0byBlbnN1cmUgdGhhdCB0aGUgcmVzcG9uc2UgYnVmZmVyIGlzIGJlbG93IDIgR0IKKyAqIF9fY3BjbWQgaGFzIHNvbWUgcmVzdHJpY3Rpb25zIG92ZXIgY3BjbWQKKyAqICAtIHRoZSByZXNwb25zZSBidWZmZXIgbXVzdCByZXNpZGUgYmVsb3cgMkdCIChpZiBhbnkpCisgKiAgLSBfX2NwY21kIGlzIHVubG9ja2VkIGFuZCB0aGVyZWZvcmUgbm90IFNNUC1zYWZlCiAgKi8KIGludCAgX19jcGNtZChjb25zdCBjaGFyICpjbWQsIGNoYXIgKnJlc3BvbnNlLCBpbnQgcmxlbiwgaW50ICpyZXNwb25zZV9jb2RlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNtZGxlbjsKKwl1bnNpZ25lZCBjbWRsZW47CiAJaW50IHJldHVybl9jb2RlLCByZXR1cm5fbGVuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNwY21kX2xvY2ssIGZsYWdzKTsKIAljbWRsZW4gPSBzdHJsZW4oY21kKTsKIAlCVUdfT04oY21kbGVuID4gMjQwKTsKIAltZW1jcHkoY3BjbWRfYnVmLCBjbWQsIGNtZGxlbik7CkBAIC03NCw3ICs3NSw2IEBACiAJCQk6ICIrZCIgKHJlZzMpIDogImQiIChyZWcyKSA6ICJjYyIpOwogCQlyZXR1cm5fY29kZSA9IChpbnQpIHJlZzM7CiAgICAgICAgIH0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcGNtZF9sb2NrLCBmbGFncyk7CiAJaWYgKHJlc3BvbnNlX2NvZGUgIT0gTlVMTCkKIAkJKnJlc3BvbnNlX2NvZGUgPSByZXR1cm5fY29kZTsKIAlyZXR1cm4gcmV0dXJuX2xlbjsKQEAgLTgyLDE1ICs4MiwxOCBAQAogCiBFWFBPUlRfU1lNQk9MKF9fY3BjbWQpOwogCi0jaWZkZWYgQ09ORklHXzY0QklUCiBpbnQgY3BjbWQoY29uc3QgY2hhciAqY21kLCBjaGFyICpyZXNwb25zZSwgaW50IHJsZW4sIGludCAqcmVzcG9uc2VfY29kZSkKIHsKIAljaGFyICpsb3didWY7CiAJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKChybGVuID09IDApIHx8IChyZXNwb25zZSA9PSBOVUxMKQotCSAgICB8fCAhKCh1bnNpZ25lZCBsb25nKXJlc3BvbnNlID4+IDMxKSkKKwkgICAgfHwgISgodW5zaWduZWQgbG9uZylyZXNwb25zZSA+PiAzMSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwY21kX2xvY2ssIGZsYWdzKTsKIAkJbGVuID0gX19jcGNtZChjbWQsIHJlc3BvbnNlLCBybGVuLCByZXNwb25zZV9jb2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BjbWRfbG9jaywgZmxhZ3MpOworCX0KIAllbHNlIHsKIAkJbG93YnVmID0ga21hbGxvYyhybGVuLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmICghbG93YnVmKSB7CkBAIC05OCw3ICsxMDEsOSBAQAogCQkJCSJjcGNtZDogY291bGQgbm90IGFsbG9jYXRlIHJlc3BvbnNlIGJ1ZmZlclxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3BjbWRfbG9jaywgZmxhZ3MpOwogCQlsZW4gPSBfX2NwY21kKGNtZCwgbG93YnVmLCBybGVuLCByZXNwb25zZV9jb2RlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3BjbWRfbG9jaywgZmxhZ3MpOwogCQltZW1jcHkocmVzcG9uc2UsIGxvd2J1Ziwgcmxlbik7CiAJCWtmcmVlKGxvd2J1Zik7CiAJfQpAQCAtMTA2LDQgKzExMSwzIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woY3BjbWQpOwotI2VuZGlmCQkvKiBDT05GSUdfNjRCSVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggMGNmNTliYi4uOGY4YzgwMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTQxOCwyNCArNDE4LDYgQEAKIC5nb3RyOgogCWwJJXIxMCwudGJsCQkjIEVCQ0RJQyB0byBBU0NJSSB0YWJsZQogCXRyCTAoMjQwLCVyOCksMCglcjEwKQotCXN0aWRwCV9fTENfQ1BVSUQJCSMgQXJlIHdlIHJ1bm5pbmcgb24gVk0gbWF5YmUKLQljbGkJX19MQ19DUFVJRCwweGZmCi0JYm56CS50ZXN0Ci0JLmxvbmcJMHg4MzMwMDA2MAkJIyBkaWFnIDMsMCx4JzAwNjAnIC0gc3RvcmFnZSBzaXplCi0JYgkuZG9uZQotLnRlc3Q6Ci0JbXZjCTB4NjgoOCksLnBnbW53CQkjIHNldCB1cCBwZ20gY2hlY2sgaGFuZGxlcgotCWwJJXIyLC5mb3VybWVnCi0JbHIJJXIzLCVyMgotCWJjdHIJJXIzLCVyMAkJCSMgNE0tMQotLmxvb3A6CWlza2UJJXIwLCVyMwotCWFyCSVyMywlcjIKLS5wZ214OgotCXNyCSVyMywlcjIKLQlsYQklcjMsMSglcjMpCi0uZG9uZToKLQlsCSVyMSwubWVtc2l6ZQotCXN0CSVyMyxBUkNIX09GRlNFVCglcjEpCiAJc2xyCSVyMCwlcjAKIAlzdAklcjAsSU5JVFJEX1NJWkUrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMSkKIAlzdAklcjAsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTEpCkBAIC00NDMsOSArNDI1LDYgQEAKIC50Ymw6CS5sb25nCV9lYmNhc2MJCQkjIHRyYW5zbGF0ZSB0YWJsZQogLmNtZDoJLmxvbmcJQ09NTUFORF9MSU5FCQkjIGFkZHJlc3Mgb2YgY29tbWFuZCBsaW5lIGJ1ZmZlcgogLnBhcm06CS5sb25nCVBBUk1BUkVBCi0ubWVtc2l6ZTogLmxvbmcgbWVtb3J5X3NpemUKLS5mb3VybWVnOiAubG9uZyAweDAwNDAwMDAwICAgICAgCSMgNE0KLS5wZ21udzoJLmxvbmcJMHgwMDA4MDAwMCwucGdteAogLmxvd2Nhc2U6CiAJLmJ5dGUgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3CiAJLmJ5dGUgMHgwOCwweDA5LDB4MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwppbmRleCAwYTJjOTI5Li40Mzg4YjMzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKQEAgLTEzMSwxMCArMTMxLDExIEBACiAJLmxvbmcJaW5pdF90aHJlYWRfdW5pb24KIC5McG1hc2s6CiAJLmJ5dGUJMAotLmFsaWduIDgKKwkuYWxpZ24JOAogLkxwY2V4dDoubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAKIC5MY3I6CiAJLmxvbmcJMHgwMAkJCSMgcGxhY2UgaG9sZGVyIGZvciBjcjAKKwkuYWxpZ24JOAogLkx3YWl0c2NscDoKIAkubG9uZyAweDAxMGEwMDAwLDB4ODAwMDAwMDAgKyAuTHNjbHBoCiAuTHJjcDoKQEAgLTE1Niw3ICsxNTcsNyBAQAogCXNscgklcjQsJXI0CQkJIyBzZXQgc3RhcnQgb2YgY2h1bmsgdG8gemVybwogCXNscgklcjUsJXI1CQkJIyBzZXQgZW5kIG9mIGNodW5rIHRvIHplcm8KIAlzbHIJJXI2LCVyNgkJCSMgc2V0IGFjY2VzcyBjb2RlIHRvIHplcm8KLQlsYQklcjEwLCBNRU1PUllfQ0hVTktTCSMgbnVtYmVyIG9mIGNodW5rcworCWxhCSVyMTAsTUVNT1JZX0NIVU5LUwkjIG51bWJlciBvZiBjaHVua3MKIC5MbG9vcDoKIAl0cHJvdAkwKCVyNSksMAkJIyB0ZXN0IHByb3RlY3Rpb24gb2YgZmlyc3QgYnl0ZQogCWlwbQklcjcKQEAgLTE3Niw4ICsxNzcsNiBAQAogCXN0CSVyMCw0KCVyMykJCSMgc3RvcmUgc2l6ZSBvZiBjaHVuawogCXN0CSVyNiw4KCVyMykJCSMgc3RvcmUgdHlwZSBvZiBjaHVuawogCWxhCSVyMywxMiglcjMpCi0JbAklcjQsLkxtZW1zaXplLS5MUEcxKCVyMTMpCSAjIGFkZHJlc3Mgb2YgdmFyaWFibGUgbWVtb3J5X3NpemUKLQlzdAklcjUsMCglcjQpCQkjIHN0b3JlIGxhc3QgZW5kIHRvIG1lbW9yeSBzaXplCiAJYWhpCSVyMTAsLTEJCQkjIHVwZGF0ZSBjaHVuayBudW1iZXIKIC5MY2hrbG9vcDoKIAlscgklcjYsJXI3CQkJIyBzZXQgYWNjZXNzIGNvZGUgdG8gbGFzdCBjYwpAQCAtMjkyLDcgKzI5MSw2IEBACiAuTHBjbXZwZzoubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa212cGcKIC5McGNpZHRlOi5sb25nCTB4MDAwODAwMDAsMHg4MDAwMDAwMCArIC5MY2hraWR0ZQogLkxwY2RpYWc5YzoubG9uZyAweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa2RpYWc5YwotLkxtZW1zaXplOi5sb25nIG1lbW9yeV9zaXplCiAuTG1jaHVuazoubG9uZwltZW1vcnlfY2h1bmsKIC5MbWZsYWdzOi5sb25nCW1hY2hpbmVfZmxhZ3MKIC5MYnNzX2JnbjogIC5sb25nIF9fYnNzX3N0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwppbmRleCA0MmY1NGQ0Li5jNTI2Mjc5ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwpAQCAtNzAsNyArNzAsMjAgQEAKIAlzZ3IJJXI1LCVyNSAJCSMgc2V0IHNyYyxsZW5ndGggYW5kIHBhZCB0byB6ZXJvCiAJbXZjbGUJJXIyLCVyNCwwCQkjIGNsZWFyIG1lbQogCWpvCS4tNAkJCSMgYnJhbmNoIGJhY2ssIGlmIG5vdCBmaW5pc2gKKwkJCQkJIyBzZXQgcHJvZ3JhbSBjaGVjayBuZXcgcHN3IG1hc2sKKwltdmMJX19MQ19QR01fTkVXX1BTVyg4KSwuTHBjbXNrLS5MUEcxKCVyMTMpCisJbGFybAklcjEsLkxzbG93bWVtZGV0ZWN0CSMgc2V0IHByb2dyYW0gY2hlY2sgYWRkcmVzcworCXN0ZwklcjEsX19MQ19QR01fTkVXX1BTVys4CisJbGdoaQklcjEsMHhjCisJZGlhZwklcjAsJXIxLDB4MjYwCQkjIGdldCBtZW1vcnkgc2l6ZSBvZiB2aXJ0dWFsIG1hY2hpbmUKKwljZ3IJJXIwLCVyMQkJCSMgZGlmZmVyZW50PyAtPiBvbGQgZGV0ZWN0aW9uIHJvdXRpbmUKKwlqbmUJLkxzbG93bWVtZGV0ZWN0CisJYWdoaQklcjEsMQkJCSMgc2l6ZSBpcyBvbmUgbW9yZSB0aGFuIGVuZAorCWxhcmwJJXIyLG1lbW9yeV9jaHVuaworCXN0ZwklcjEsOCglcjIpCQkjIHN0b3JlIHNpemUgb2YgY2h1bmsKKwlqCS5MZG9uZW1lbQogCisuTHNsb3dtZW1kZXRlY3Q6CiAJbAklcjIsLkxyY3AtLkxQRzEoJXIxMykJIyBSZWFkIFNDUCBmb3JjZWQgY29tbWFuZCB3b3JkCiAuTHNlcnZpY2VjYWxsOgogCXN0b3NtCS5McG1hc2stLkxQRzEoJXIxMyksMHgwMQkjIGF1dGhvcml6ZSBleHQgaW50ZXJydXB0cwpAQCAtMTM5LDggKzE1Miw2IEBACiAJLmludAkweDEwMDAwMAogCiAuTGZjaHVuazoKLQkJCQkJIyBzZXQgcHJvZ3JhbSBjaGVjayBuZXcgcHN3IG1hc2sKLQltdmMJX19MQ19QR01fTkVXX1BTVyg4KSwuTHBjbXNrLS5MUEcxKCVyMTMpCiAKICMKICMgZmluZCBtZW1vcnkgY2h1bmtzLgpAQCAtMTc1LDggKzE4Niw2IEBACiAJc3RnCSVyMCw4KCVyMykJCSMgc3RvcmUgc2l6ZSBvZiBjaHVuawogCXN0CSVyNiwyMCglcjMpCQkjIHN0b3JlIHR5cGUgb2YgY2h1bmsKIAlsYQklcjMsMjQoJXIzKQotCWxhcmwJJXI4LG1lbW9yeV9zaXplCi0Jc3RnCSVyNSwwKCVyOCkJCSMgc3RvcmUgbWVtb3J5IHNpemUKIAlhaGkJJXIxMCwtMQkJCSMgdXBkYXRlIGNodW5rIG51bWJlcgogLkxjaGtsb29wOgogCWxyCSVyNiwlcjcJCQkjIHNldCBhY2Nlc3MgY29kZSB0byBsYXN0IGNjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwppbmRleCAxZjVlNzgyLi5hMzZiZWExIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTEzLDEyICsxMywyMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+CiAjaW5jbHVkZSA8YXNtL2Npby5oPgorI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KKyNpbmNsdWRlIDxhc20vcmVzZXQuaD4KIAogI2RlZmluZSBJUExfUEFSTV9CTE9DS19WRVJTSU9OIDAKKyNkZWZpbmUgTE9BRFBBUk1fTEVOIDgKKworZXh0ZXJuIGNoYXIgczM5MF9yZWFkaW5mb19zY2NiW107CisjZGVmaW5lIFNDQ0JfVkFMSUQgKCooKF9fdTE2KikmczM5MF9yZWFkaW5mb19zY2NiWzZdKSA9PSAweDAwMTApCisjZGVmaW5lIFNDQ0JfTE9BRFBBUk0gKCZzMzkwX3JlYWRpbmZvX3NjY2JbMjRdKQorI2RlZmluZSBTQ0NCX0ZMQUcgKHMzOTBfcmVhZGluZm9fc2NjYls5MV0pCiAKIGVudW0gaXBsX3R5cGUgewogCUlQTF9UWVBFX05PTkUJID0gMSwKQEAgLTI4OSw5ICsyOTgsMjUgQEAKIAogLyogQ0NXIGlwbCBkZXZpY2UgYXR0cmlidXRlcyAqLwogCitzdGF0aWMgc3NpemVfdCBpcGxfY2N3X2xvYWRwYXJtX3Nob3coc3RydWN0IHN1YnN5c3RlbSAqc3Vic3lzLCBjaGFyICpwYWdlKQoreworCWNoYXIgbG9hZHBhcm1bTE9BRFBBUk1fTEVOICsgMV0gPSB7fTsKKworCWlmICghU0NDQl9WQUxJRCkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIiN1bmtub3duI1xuIik7CisJbWVtY3B5KGxvYWRwYXJtLCBTQ0NCX0xPQURQQVJNLCBMT0FEUEFSTV9MRU4pOworCUVCQ0FTQyhsb2FkcGFybSwgTE9BRFBBUk1fTEVOKTsKKwlzdHJzdHJpcChsb2FkcGFybSk7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBsb2FkcGFybSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSBzeXNfaXBsX2Njd19sb2FkcGFybV9hdHRyID0KKwlfX0FUVFIobG9hZHBhcm0sIDA0NDQsIGlwbF9jY3dfbG9hZHBhcm1fc2hvdywgTlVMTCk7CisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppcGxfY2N3X2F0dHJzW10gPSB7CiAJJnN5c19pcGxfdHlwZV9hdHRyLmF0dHIsCiAJJnN5c19pcGxfZGV2aWNlX2F0dHIuYXR0ciwKKwkmc3lzX2lwbF9jY3dfbG9hZHBhcm1fYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNDgsOCArMzczLDU3IEBACiBERUZJTkVfSVBMX0FUVFJfUlcocmVpcGxfY2N3LCBkZXZpY2UsICIwLjAuJTA0bGx4XG4iLCAiMC4wLiVsbHhcbiIsCiAJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOwogCitzdGF0aWMgdm9pZCByZWlwbF9nZXRfYXNjaWlfbG9hZHBhcm0oY2hhciAqbG9hZHBhcm0pCit7CisJbWVtY3B5KGxvYWRwYXJtLCAmcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cubG9hZF9wYXJhbSwKKwkgICAgICAgTE9BRFBBUk1fTEVOKTsKKwlFQkNBU0MobG9hZHBhcm0sIExPQURQQVJNX0xFTik7CisJbG9hZHBhcm1bTE9BRFBBUk1fTEVOXSA9IDA7CisJc3Ryc3RyaXAobG9hZHBhcm0pOworfQorCitzdGF0aWMgc3NpemVfdCByZWlwbF9jY3dfbG9hZHBhcm1fc2hvdyhzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMsIGNoYXIgKnBhZ2UpCit7CisJY2hhciBidWZbTE9BRFBBUk1fTEVOICsgMV07CisKKwlyZWlwbF9nZXRfYXNjaWlfbG9hZHBhcm0oYnVmKTsKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlaXBsX2Njd19sb2FkcGFybV9zdG9yZShzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgaSwgbHBfbGVuOworCisJLyogaWdub3JlIHRyYWlsaW5nIG5ld2xpbmUgKi8KKwlscF9sZW4gPSBsZW47CisJaWYgKChsZW4gPiAwKSAmJiAoYnVmW2xlbiAtIDFdID09ICdcbicpKQorCQlscF9sZW4tLTsKKwkvKiBsb2FkcGFybSBjYW4gaGF2ZSBtYXggOCBjaGFyYWN0ZXJzIGFuZCBtdXN0IG5vdCBzdGFydCB3aXRoIGEgYmxhbmsgKi8KKwlpZiAoKGxwX2xlbiA+IExPQURQQVJNX0xFTikgfHwgKChscF9sZW4gPiAwKSAmJiAoYnVmWzBdID09ICcgJykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBsb2FkcGFybSBjYW4gb25seSBjb250YWluICJhLXosQS1aLDAtOSxTUCwuIiAqLworCWZvciAoaSA9IDA7IGkgPCBscF9sZW47IGkrKykgeworCQlpZiAoaXNhbHBoYShidWZbaV0pIHx8IGlzZGlnaXQoYnVmW2ldKSB8fCAoYnVmW2ldID09ICcgJykgfHwKKwkJICAgIChidWZbaV0gPT0gJy4nKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogaW5pdGlhbGl6ZSBsb2FkcGFybSB3aXRoIGJsYW5rcyAqLworCW1lbXNldCgmcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cubG9hZF9wYXJhbSwgJyAnLCBMT0FEUEFSTV9MRU4pOworCS8qIGNvcHkgYW5kIGNvbnZlcnQgdG8gZWJjZGljICovCisJbWVtY3B5KCZyZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5sb2FkX3BhcmFtLCBidWYsIGxwX2xlbik7CisJQVNDRUJDKHJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmxvYWRfcGFyYW0sIExPQURQQVJNX0xFTik7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIHN5c19yZWlwbF9jY3dfbG9hZHBhcm1fYXR0ciA9CisJX19BVFRSKGxvYWRwYXJtLCAwNjQ0LCByZWlwbF9jY3dfbG9hZHBhcm1fc2hvdywKKwkgICAgICAgcmVpcGxfY2N3X2xvYWRwYXJtX3N0b3JlKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJlaXBsX2Njd19hdHRyc1tdID0gewogCSZzeXNfcmVpcGxfY2N3X2RldmljZV9hdHRyLmF0dHIsCisJJnN5c19yZWlwbF9jY3dfbG9hZHBhcm1fYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC01MDIsMjMgKzU3Niw2IEBACiAKIHN0YXRpYyBkZWNsX3N1YnN5cyhkdW1wLCBOVUxMLCBOVUxMKTsKIAotI2lmZGVmIENPTkZJR19TTVAKLXN0YXRpYyB2b2lkIGR1bXBfc21wX3N0b3BfYWxsKHZvaWQpCi17Ci0JaW50IGNwdTsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJCWNvbnRpbnVlOwotCQl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3Bfc3RvcCkgPT0gc2lncF9idXN5KQotCQkJdWRlbGF5KDEwKTsKLQl9Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGR1bXBfc21wX3N0b3BfYWxsKCkgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KIC8qCiAgKiBTaHV0ZG93biBhY3Rpb25zIHNlY3Rpb24KICAqLwpAQCAtNTcxLDExICs2MjgsMTQgQEAKIHsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKIAlzdGF0aWMgY2hhciBidWZbMTAwXTsKKwljaGFyIGxvYWRwYXJtW0xPQURQQVJNX0xFTiArIDFdOwogCiAJc3dpdGNoIChyZWlwbF90eXBlKSB7CiAJY2FzZSBJUExfVFlQRV9DQ1c6CisJCXJlaXBsX2dldF9hc2NpaV9sb2FkcGFybShsb2FkcGFybSk7CiAJCXByaW50ayhLRVJOX0VNRVJHICJyZWJvb3Qgb24gY2N3IGRldmljZTogMC4wLiUwNHhcbiIsCiAJCQlyZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7CisJCXByaW50ayhLRVJOX0VNRVJHICJsb2FkcGFybSA9ICclcydcbiIsIGxvYWRwYXJtKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1A6CiAJCXByaW50ayhLRVJOX0VNRVJHICJyZWJvb3Qgb24gZmNwIGRldmljZTpcbiIpOwpAQCAtNTg4LDEyICs2NDgsMTkgQEAKIAlzd2l0Y2ggKHJlaXBsX21ldGhvZCkgewogCWNhc2UgSVBMX01FVEhPRF9DQ1dfQ0lPOgogCQlkZXZpZC5kZXZubyA9IHJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vOworCQlpZiAoaXBsX2dldF90eXBlKCkgPT0gSVBMX1RZUEVfQ0NXICYmIGRldmlkLmRldm5vID09IGlwbF9kZXZubykKKwkJCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOwogCQlkZXZpZC5zc2lkICA9IDA7CiAJCXJlaXBsX2Njd19kZXYoJmRldmlkKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfTUVUSE9EX0NDV19WTToKLQkJc3ByaW50ZihidWYsICJJUEwgJVgiLCByZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7Ci0JCWNwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CisJCWlmIChzdHJsZW4obG9hZHBhcm0pID09IDApCisJCQlzcHJpbnRmKGJ1ZiwgIklQTCAlWCIsCisJCQkJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOworCQllbHNlCisJCQlzcHJpbnRmKGJ1ZiwgIklQTCAlWCBMT0FEUEFSTSAnJXMnIiwKKwkJCQlyZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubywgbG9hZHBhcm0pOworCQlfX2NwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgSVBMX01FVEhPRF9DQ1dfRElBRzoKIAkJZGlhZzMwOChESUFHMzA4X1NFVCwgcmVpcGxfYmxvY2tfY2N3KTsKQEAgLTYwNywxNiArNjc0LDE3IEBACiAJCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIElQTF9NRVRIT0RfRkNQX1JPX1ZNOgotCQljcGNtZCgiSVBMIiwgTlVMTCwgMCwgTlVMTCk7CisJCV9fY3BjbWQoIklQTCIsIE5VTEwsIDAsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIElQTF9NRVRIT0RfTk9ORToKIAlkZWZhdWx0OgogCQlpZiAoTUFDSElORV9JU19WTSkKLQkJCWNwY21kKCJJUEwiLCBOVUxMLCAwLCBOVUxMKTsKKwkJCV9fY3BjbWQoIklQTCIsIE5VTEwsIDAsIE5VTEwpOwogCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKIAkJYnJlYWs7CiAJfQotCXBhbmljKCJyZWlwbCBmYWlsZWQhXG4iKTsKKwlwcmludGsoS0VSTl9FTUVSRyAicmVib290IGZhaWxlZCFcbiIpOworCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX2R1bXAodm9pZCkKQEAgLTYzOSwxNyArNzA3LDE3IEBACiAKIAlzd2l0Y2ggKGR1bXBfbWV0aG9kKSB7CiAJY2FzZSBJUExfTUVUSE9EX0NDV19DSU86Ci0JCWR1bXBfc21wX3N0b3BfYWxsKCk7CisJCXNtcF9zZW5kX3N0b3AoKTsKIAkJZGV2aWQuZGV2bm8gPSBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vOwogCQlkZXZpZC5zc2lkICA9IDA7CiAJCXJlaXBsX2Njd19kZXYoJmRldmlkKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfTUVUSE9EX0NDV19WTToKLQkJZHVtcF9zbXBfc3RvcF9hbGwoKTsKKwkJc21wX3NlbmRfc3RvcCgpOwogCQlzcHJpbnRmKGJ1ZiwgIlNUT1JFIFNUQVRVUyIpOwotCQljcGNtZChidWYsIE5VTEwsIDAsIE5VTEwpOworCQlfX2NwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CiAJCXNwcmludGYoYnVmLCAiSVBMICVYIiwgZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7Ci0JCWNwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CisJCV9fY3BjbWQoYnVmLCBOVUxMLCAwLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBJUExfTUVUSE9EX0NDV19ESUFHOgogCQlkaWFnMzA4KERJQUczMDhfU0VULCBkdW1wX2Jsb2NrX2Njdyk7CkBAIC03NDYsNiArODE0LDE3IEBACiAJcmVpcGxfYmxvY2tfY2N3LT5oZHIudmVyc2lvbiA9IElQTF9QQVJNX0JMT0NLX1ZFUlNJT047CiAJcmVpcGxfYmxvY2tfY2N3LT5oZHIuYmxrMF9sZW4gPSBzaXplb2YocmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cpOwogCXJlaXBsX2Jsb2NrX2Njdy0+aGRyLnBidCA9IERJQUczMDhfSVBMX1RZUEVfQ0NXOworCS8qIGNoZWNrIGlmIHJlYWQgc2NwIGluZm8gd29ya2VkIGFuZCBzZXQgbG9hZHBhcm0gKi8KKwlpZiAoU0NDQl9WQUxJRCkKKwkJbWVtY3B5KHJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmxvYWRfcGFyYW0sCisJCSAgICAgICBTQ0NCX0xPQURQQVJNLCBMT0FEUEFSTV9MRU4pOworCWVsc2UKKwkJLyogcmVhZCBzY3AgaW5mbyBmYWlsZWQ6IHNldCBlbXB0eSBsb2FkcGFybSAoRUJDRElDIGJsYW5rcykgKi8KKwkJbWVtc2V0KHJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmxvYWRfcGFyYW0sIDB4NDAsCisJCSAgICAgICBMT0FEUEFSTV9MRU4pOworCS8qIEZJWE1FOiBjaGVjayBmb3IgZGlhZzMwOF9zZXRfd29ya3Mgd2hlbiBlbmFibGluZyBkaWFnIGNjdyByZWlwbCAqLworCWlmICghTUFDSElORV9JU19WTSkKKwkJc3lzX3JlaXBsX2Njd19sb2FkcGFybV9hdHRyLmF0dHIubW9kZSA9IFNfSVJVR087CiAJaWYgKGlwbF9nZXRfdHlwZSgpID09IElQTF9UWVBFX0NDVykKIAkJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8gPSBpcGxfZGV2bm87CiAJcmVpcGxfY2FwYWJpbGl0aWVzIHw9IElQTF9UWVBFX0NDVzsKQEAgLTgyNywxMyArOTA2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWV4dGVybiBjaGFyIHMzOTBfcmVhZGluZm9fc2NjYltdOwotCiBzdGF0aWMgaW50IF9faW5pdCBkdW1wX2ZjcF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwogCi0JaWYoIShzMzkwX3JlYWRpbmZvX3NjY2JbOTFdICYgMHgyKSkKKwlpZighKFNDQ0JfRkxBRyAmIDB4MikgfHwgIVNDQ0JfVkFMSUQpCiAJCXJldHVybiAwOyAvKiBMRElQTCBEVU1QIGlzIG5vdCBpbnN0YWxsZWQgKi8KIAlpZiAoIWRpYWczMDhfc2V0X3dvcmtzKQogCQlyZXR1cm4gMDsKQEAgLTkzMSwzICsxMDA4LDUzIEBACiB9CiAKIF9faW5pdGNhbGwoczM5MF9pcGxfaW5pdCk7CisKK3N0YXRpYyBMSVNUX0hFQUQocmNhbGwpOworc3RhdGljIERFRklORV9NVVRFWChyY2FsbF9tdXRleCk7CisKK3ZvaWQgcmVnaXN0ZXJfcmVzZXRfY2FsbChzdHJ1Y3QgcmVzZXRfY2FsbCAqcmVzZXQpCit7CisJbXV0ZXhfbG9jaygmcmNhbGxfbXV0ZXgpOworCWxpc3RfYWRkKCZyZXNldC0+bGlzdCwgJnJjYWxsKTsKKwltdXRleF91bmxvY2soJnJjYWxsX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX3Jlc2V0X2NhbGwpOworCit2b2lkIHVucmVnaXN0ZXJfcmVzZXRfY2FsbChzdHJ1Y3QgcmVzZXRfY2FsbCAqcmVzZXQpCit7CisJbXV0ZXhfbG9jaygmcmNhbGxfbXV0ZXgpOworCWxpc3RfZGVsKCZyZXNldC0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZyY2FsbF9tdXRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX3Jlc2V0X2NhbGwpOworCitzdGF0aWMgdm9pZCBkb19yZXNldF9jYWxscyh2b2lkKQoreworCXN0cnVjdCByZXNldF9jYWxsICpyZXNldDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVzZXQsICZyY2FsbCwgbGlzdCkKKwkJcmVzZXQtPmZuKCk7Cit9CisKK2V4dGVybiB2b2lkIHJlc2V0X21jY2tfaGFuZGxlcih2b2lkKTsKKwordm9pZCBzMzkwX3Jlc2V0X3N5c3RlbSh2b2lkKQoreworCXN0cnVjdCBfbG93Y29yZSAqbGM7CisKKwkvKiBTdGFjayBmb3IgaW50ZXJydXB0L21hY2hpbmUgY2hlY2sgaGFuZGxlciAqLworCWxjID0gKHN0cnVjdCBfbG93Y29yZSAqKSh1bnNpZ25lZCBsb25nKSBzdG9yZV9wcmVmaXgoKTsKKwlsYy0+cGFuaWNfc3RhY2sgPSBTMzkwX2xvd2NvcmUucGFuaWNfc3RhY2s7CisKKwkvKiBEaXNhYmxlIHByZWZpeGluZyAqLworCXNldF9wcmVmaXgoMCk7CisKKwkvKiBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvbiAqLworCV9fY3RsX2NsZWFyX2JpdCgwLDI4KTsKKworCS8qIFNldCBuZXcgbWFjaGluZSBjaGVjayBoYW5kbGVyICovCisJUzM5MF9sb3djb3JlLm1jY2tfbmV3X3Bzdy5tYXNrID0gUFNXX0tFUk5FTF9CSVRTICYgflBTV19NQVNLX01DSEVDSzsKKwlTMzkwX2xvd2NvcmUubWNja19uZXdfcHN3LmFkZHIgPQorCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSAmcmVzZXRfbWNja19oYW5kbGVyOworCWRvX3Jlc2V0X2NhbGxzKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDYwYjFlYTkuLmY2ZDliY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xLDE1ICsxLDEwIEBACiAvKgogICogYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKICAqCi0gKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA1CisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDUsMjAwNgogICoKLSAqIEF1dGhvcihzKTogUm9sZiBBZGVsc2JlcmdlciA8YWRlbHNiZXJnZXJAZGUuaWJtLmNvbT4KLSAqCi0gKi8KLQotLyoKLSAqIHMzOTBfbWFjaGluZV9rZXhlYy5jIC0gaGFuZGxlIHRoZSB0cmFuc2l0aW9uIG9mIExpbnV4IGJvb3RpbmcgYW5vdGhlciBrZXJuZWwKLSAqIG9uIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4KKyAqIEF1dGhvcihzKTogUm9sZiBBZGVsc2JlcmdlciwKKyAqCSAgICAgIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTIyLDg2ICsxNyw0OSBAQAogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vcmVzZXQuaD4KIAotc3RhdGljIHZvaWQga2V4ZWNfaGFsdF9hbGxfY3B1cyh2b2lkICopOwotCi10eXBlZGVmIHZvaWQgKCpyZWxvY2F0ZV9rZXJuZWxfdCkgKGtpbWFnZV9lbnRyeV90ICosIHVuc2lnbmVkIGxvbmcpOwordHlwZWRlZiB2b2lkICgqcmVsb2NhdGVfa2VybmVsX3QpKGtpbWFnZV9lbnRyeV90ICosIHVuc2lnbmVkIGxvbmcpOwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZWxvY2F0ZV9rZXJuZWxbXTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgcmVsb2NhdGVfa2VybmVsX2xlbjsKIAotaW50Ci1tYWNoaW5lX2tleGVjX3ByZXBhcmUoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCitpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewotCXVuc2lnbmVkIGxvbmcgcmVib290X2NvZGVfYnVmZmVyOworCXZvaWQgKnJlYm9vdF9jb2RlX2J1ZmZlcjsKIAogCS8qIFdlIGRvbid0IHN1cHBvcnQgYW55dGhpbmcgYnV0IHRoZSBkZWZhdWx0IGltYWdlIHR5cGUgZm9yIG5vdy4gKi8KIAlpZiAoaW1hZ2UtPnR5cGUgIT0gS0VYRUNfVFlQRV9ERUZBVUxUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdldCB0aGUgZGVzdGluYXRpb24gd2hlcmUgdGhlIGFzc2VtYmxlciBjb2RlIHNob3VsZCBiZSBjb3BpZWQgdG8uKi8KLQlyZWJvb3RfY29kZV9idWZmZXIgPSBwYWdlX3RvX3BmbihpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpPDxQQUdFX1NISUZUOworCXJlYm9vdF9jb2RlX2J1ZmZlciA9ICh2b2lkICopIHBhZ2VfdG9fcGh5cyhpbWFnZS0+Y29udHJvbF9jb2RlX3BhZ2UpOwogCiAJLyogVGhlbiBjb3B5IGl0ICovCi0JbWVtY3B5KCh2b2lkICopIHJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfa2VybmVsLAotCSAgICAgICByZWxvY2F0ZV9rZXJuZWxfbGVuKTsKKwltZW1jcHkocmVib290X2NvZGVfYnVmZmVyLCByZWxvY2F0ZV9rZXJuZWwsIHJlbG9jYXRlX2tlcm5lbF9sZW4pOwogCXJldHVybiAwOwogfQogCi12b2lkCi1tYWNoaW5lX2tleGVjX2NsZWFudXAoc3RydWN0IGtpbWFnZSAqaW1hZ2UpCit2b2lkIG1hY2hpbmVfa2V4ZWNfY2xlYW51cChzdHJ1Y3Qga2ltYWdlICppbWFnZSkKIHsKIH0KIAotdm9pZAotbWFjaGluZV9zaHV0ZG93bih2b2lkKQordm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAia2V4ZWM6IG1hY2hpbmVfc2h1dGRvd24gY2FsbGVkXG4iKTsKIH0KIAotTk9SRVRfVFlQRSB2b2lkCi1tYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQordm9pZCBtYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewotCWNsZWFyX2FsbF9zdWJjaGFubmVscygpOwotCWNpb19yZXNldF9jaGFubmVsX3BhdGhzKCk7Ci0KLQkvKiBEaXNhYmxlIGxvd2NvcmUgcHJvdGVjdGlvbiAqLwotCWN0bF9jbGVhcl9iaXQoMCwyOCk7Ci0KLQlvbl9lYWNoX2NwdShrZXhlY19oYWx0X2FsbF9jcHVzLCBpbWFnZSwgMCwgMCk7Ci0JZm9yICg7Oyk7Ci19Ci0KLWV4dGVybiB2b2lkIHBmYXVsdF9maW5pKHZvaWQpOwotCi1zdGF0aWMgdm9pZAota2V4ZWNfaGFsdF9hbGxfY3B1cyh2b2lkICprZXJuZWxfaW1hZ2UpCi17Ci0Jc3RhdGljIGF0b21pY190IGNwdWlkID0gQVRPTUlDX0lOSVQoLTEpOwotCWludCBjcHU7Ci0Jc3RydWN0IGtpbWFnZSAqaW1hZ2U7CiAJcmVsb2NhdGVfa2VybmVsX3QgZGF0YV9tb3ZlcjsKIAotI2lmZGVmIENPTkZJR19QRkFVTFQKLQlpZiAoTUFDSElORV9JU19WTSkKLQkJcGZhdWx0X2ZpbmkoKTsKLSNlbmRpZgorCXNtcF9zZW5kX3N0b3AoKTsKKwlwZmF1bHRfZmluaSgpOworCXMzOTBfcmVzZXRfc3lzdGVtKCk7CiAKLQlpZiAoYXRvbWljX2NtcHhjaGcoJmNwdWlkLCAtMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSAhPSAtMSkKLQkJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0KLQkvKiBXYWl0IGZvciBhbGwgb3RoZXIgY3B1cyB0byBlbnRlciBzdG9wcGVkIHN0YXRlICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQljb250aW51ZTsKLQkJd2hpbGUgKCFzbXBfY3B1X25vdF9ydW5uaW5nKGNwdSkpCi0JCQljcHVfcmVsYXgoKTsKLQl9Ci0KLQlpbWFnZSA9IChzdHJ1Y3Qga2ltYWdlICopIGtlcm5lbF9pbWFnZTsKLQlkYXRhX21vdmVyID0gKHJlbG9jYXRlX2tlcm5lbF90KQotCQkocGFnZV90b19wZm4oaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSA8PCBQQUdFX1NISUZUKTsKKwlkYXRhX21vdmVyID0gKHJlbG9jYXRlX2tlcm5lbF90KSBwYWdlX3RvX3BoeXMoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKTsKIAogCS8qIENhbGwgdGhlIG1vdmluZyByb3V0aW5lICovCi0JKCpkYXRhX21vdmVyKSAoJmltYWdlLT5oZWFkLCBpbWFnZS0+c3RhcnQpOworCSgqZGF0YV9tb3ZlcikoJmltYWdlLT5oZWFkLCBpbWFnZS0+c3RhcnQpOworCWZvciAoOzspOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCmluZGV4IDAzNDA0NzcuLmY5NDM0ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKQEAgLTExLDE5ICsxMSwxMCBAQAogCQkuZ2xvYmwJZG9fcmVpcGxfYXNtCiBkb19yZWlwbF9hc206CWJhc3IJJXIxMywwCiAuTHBnMDoJCWxwc3cJLkxuZXdwc3ctLkxwZzAoJXIxMykKLQotCQkjIHN3aXRjaCBvZmYgbG93Y29yZSBwcm90ZWN0aW9uCi0KLS5McGcxOgkJc3RjdGwJJWMwLCVjMCwuTGN0bHNhdmUxLS5McGcwKCVyMTMpCi0JCXN0Y3RsCSVjMCwlYzAsLkxjdGxzYXZlMi0uTHBnMCglcjEzKQotCQluaQkuTGN0bHNhdmUxLS5McGcwKCVyMTMpLDB4ZWYKLQkJbGN0bAklYzAsJWMwLC5MY3Rsc2F2ZTEtLkxwZzAoJXIxMykKLQotCQkjIGRvIHN0b3JlIHN0YXR1cyBvZiBhbGwgcmVnaXN0ZXJzCisuTHBnMToJCSMgZG8gc3RvcmUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcnMKIAogCQlzdG0JJXIwLCVyMTUsX19MQ19HUFJFR1NfU0FWRV9BUkVBCiAJCXN0Y3RsCSVjMCwlYzE1LF9fTENfQ1JFR1NfU0FWRV9BUkVBCi0JCW12YwlfX0xDX0NSRUdTX1NBVkVfQVJFQSg0KSwuTGN0bHNhdmUyLS5McGcwKCVyMTMpCiAJCXN0YW0JJWEwLCVhMTUsX19MQ19BUkVHU19TQVZFX0FSRUEKIAkJc3RweAlfX0xDX1BSRUZJWF9TQVZFX0FSRUEKIAkJc3Rja2MJLkxjbGtjbXAtLkxwZzAoJXIxMykKQEAgLTU2LDggKzQ3LDcgQEAKIC5MMDAyOgkJdG0JLkxpcGxpcmIrOC0uTHBnMCglcjEzKSwweGYzCiAJCWp6CS5MMDAzCiAJCWJhcwklcjE0LC5MZGlzYWItLkxwZzAoJXIxMykKLS5MMDAzOgkJc3B4CS5MbnVsbC0uTHBnMCglcjEzKQotCQlzdAklcjEsX19MQ19TVUJDSEFOTkVMX0lECisuTDAwMzoJCXN0CSVyMSxfX0xDX1NVQkNIQU5ORUxfSUQKIAkJbHBzdwkwCiAJCXNpZ3AJMCwwLDAoNikKIC5MZGlzYWI6CXN0CSVyMTQsLkxkaXNwc3crNC0uTHBnMCglcjEzKQpAQCAtNjUsOSArNTUsNiBAQAogCQkuYWxpZ24JOAogLkxjbGtjbXA6CS5xdWFkCTB4MDAwMDAwMDAwMDAwMDAwMAogLkxhbGw6CQkubG9uZwkweGZmMDAwMDAwCi0uTG51bGw6CQkubG9uZwkweDAwMDAwMDAwCi0uTGN0bHNhdmUxOgkubG9uZwkweDAwMDAwMDAwCi0uTGN0bHNhdmUyOgkubG9uZwkweDAwMDAwMDAwCiAJCS5hbGlnbgk4CiAuTG5ld3BzdzoJLmxvbmcJMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5McGcxCiAuTHBjbmV3OgkubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDArLkxlY3MKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggZGU3NDM1MC4uZjE4ZWYyNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTEwLDEwICsxMCwxMCBAQAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAJCS5nbG9ibAlkb19yZWlwbF9hc20KIGRvX3JlaXBsX2FzbToJYmFzcgklcjEzLDAKKy5McGcwOgkJbHBzd2UJLkxuZXdwc3ctLkxwZzAoJXIxMykKKy5McGcxOgkJIyBkbyBzdG9yZSBzdGF0dXMgb2YgYWxsIHJlZ2lzdGVycwogCi0JCSMgZG8gc3RvcmUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcnMKLQotLkxwZzA6CQlzdGcJJXIxLC5McmVnc2F2ZS0uTHBnMCglcjEzKQorCQlzdGcJJXIxLC5McmVnc2F2ZS0uTHBnMCglcjEzKQogCQlsZ2hpCSVyMSwweDEwMDAKIAkJc3RtZwklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJbGcJJXIwLC5McmVnc2F2ZS0uTHBnMCglcjEzKQpAQCAtMjcsMTEgKzI3LDcgQEAKIAkJc3RwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3RnCSVyMTMsIF9fTENfUFNXX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCiAKLQkJbHBzd2UJLkxuZXdwc3ctLkxwZzAoJXIxMykKLS5McGcxOgkJbGN0bGcJJWM2LCVjNiwuTGFsbC0uTHBnMCglcjEzKQotCQlzdGN0ZwklYzAsJWMwLC5McmVnc2F2ZS0uTHBnMCglcjEzKQotCQluaQkuTHJlZ3NhdmUrNC0uTHBnMCglcjEzKSwweGVmCi0JCWxjdGxnCSVjMCwlYzAsLkxyZWdzYXZlLS5McGcwKCVyMTMpCisJCWxjdGxnCSVjNiwlYzYsLkxhbGwtLkxwZzAoJXIxMykKIAkJbGdyCSVyMSwlcjIKIAkJbXZjCV9fTENfUEdNX05FV19QU1coMTYpLC5McGNuZXctLkxwZzAoJXIxMykKIAkJc3RzY2gJLkxzY2hpYi0uTHBnMCglcjEzKQpAQCAtNTYsOCArNTIsNyBAQAogLkwwMDI6CQl0bQkuTGlwbGlyYis4LS5McGcwKCVyMTMpLDB4ZjMKIAkJanoJLkwwMDMKIAkJYmFzCSVyMTQsLkxkaXNhYi0uTHBnMCglcjEzKQotLkwwMDM6CQlzcHgJLkxudWxsLS5McGcwKCVyMTMpCi0JCXN0CSVyMSxfX0xDX1NVQkNIQU5ORUxfSUQKKy5MMDAzOgkJc3QJJXIxLF9fTENfU1VCQ0hBTk5FTF9JRAogCQlsaGkJJXIxLDAJCSAjIG1vZGUgMCA9IGVzYQogCQlzbHIJJXIwLCVyMCAJICMgc2V0IGNwdWlkIHRvIHplcm8KIAkJc2lncAklcjEsJXIwLDB4MTIJICMgc3dpdGNoIHRvIGVzYSBtb2RlCkBAIC03MCw3ICs2NSw2IEBACiAuTGNsa2NtcDoJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwCiAuTGFsbDoJCS5xdWFkCTB4MDAwMDAwMDBmZjAwMDAwMAogLkxyZWdzYXZlOgkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAKLS5MbnVsbDoJCS5sb25nCTB4MDAwMDAwMDAwMDAwMDAwMAogCQkuYWxpZ24JMTYKIC8qCiAgKiBUaGVzZSBhZGRyZXNzZXMgaGF2ZSB0byBiZSAzMSBiaXQgb3RoZXJ3aXNlCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUwppbmRleCBmOTg5OWZmLi4zYjQ1NmI4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKQEAgLTI2LDggKzI2LDcgQEAKIAlyZWxvY2F0ZV9rZXJuZWw6CiAJCWJhc3IJJXIxMywwCQkjIGJhc2UgYWRkcmVzcwogCS5iYXNlOgotCQlzdG5zbQlzeXNfbXNrLS5iYXNlKCVyMTMpLDB4ZjgJIyBkaXNhYmxlIERBVCBhbmQgSVJRIChleHRlcm5hbCkKLQkJc3B4CXplcm82NC0uYmFzZSglcjEzKQkjIGFic29sdXRlIGFkZHJlc3NpbmcgbW9kZQorCQlzdG5zbQlzeXNfbXNrLS5iYXNlKCVyMTMpLDB4ZmIJIyBkaXNhYmxlIERBVAogCQlzdGN0bAklYzAsJWMxNSxjdGxyZWdzLS5iYXNlKCVyMTMpCiAJCXN0bQklcjAsJXIxNSxncHJyZWdzLS5iYXNlKCVyMTMpCiAJCWxhCSVyMSxsb2FkX3Bzdy0uYmFzZSglcjEzKQpAQCAtOTcsOCArOTYsNiBAQAogCQlscHN3CTAJCSMgaG9wZWZ1bGx5IHN0YXJ0IG5ldyBrZXJuZWwuLi4KIAogCQkuYWxpZ24JOAotCXplcm82NDoKLQkJLnF1YWQJMAogCWxvYWRfcHN3OgogCQkubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAKIAlzeXNfbXNrOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWw2NC5TCmluZGV4IDRmYjQ0MzAuLjFmOWVhMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlbG9jYXRlX2tlcm5lbDY0LlMKQEAgLTI3LDggKzI3LDcgQEAKIAlyZWxvY2F0ZV9rZXJuZWw6CiAJCWJhc3IJJXIxMywwCQkjIGJhc2UgYWRkcmVzcwogCS5iYXNlOgotCQlzdG5zbQlzeXNfbXNrLS5iYXNlKCVyMTMpLDB4ZjgJIyBkaXNhYmxlIERBVCBhbmQgSVJRcwotCQlzcHgJemVybzY0LS5iYXNlKCVyMTMpCSMgYWJzb2x1dGUgYWRkcmVzc2luZyBtb2RlCisJCXN0bnNtCXN5c19tc2stLmJhc2UoJXIxMyksMHhmYgkjIGRpc2FibGUgREFUCiAJCXN0Y3RnCSVjMCwlYzE1LGN0bHJlZ3MtLmJhc2UoJXIxMykKIAkJc3RtZwklcjAsJXIxNSxncHJyZWdzLS5iYXNlKCVyMTMpCiAJCWxnaGkJJXIwLDMKQEAgLTEwMCw4ICs5OSw2IEBACiAJCWxwc3cJMAkJIyBob3BlZnVsbHkgc3RhcnQgbmV3IGtlcm5lbC4uLgogCiAJCS5hbGlnbgk4Ci0JemVybzY0OgotCQkucXVhZAkwCiAJbG9hZF9wc3c6CiAJCS5sb25nCTB4MDAwODAwMDAsMHg4MDAwMDAwMAogCXN5c19tc2s6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Jlc2V0LlMgYi9hcmNoL3MzOTAva2VybmVsL3Jlc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4Njg4YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVzZXQuUwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogIGFyY2gvczM5MC9rZXJuZWwvcmVzZXQuUworICoKKyAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDYKKyAqICAgIEF1dGhvcihzKTogSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgorCisjaWZkZWYgQ09ORklHXzY0QklUCisKKwkuZ2xvYmwJcmVzZXRfbWNja19oYW5kbGVyCityZXNldF9tY2NrX2hhbmRsZXI6CisJYmFzcgklcjEzLDAKKzA6CWxnCSVyMTUsX19MQ19QQU5JQ19TVEFDSwkjIGxvYWQgcGFuaWMgc3RhY2sKKwlhZ2hpCSVyMTUsLVNUQUNLX0ZSQU1FX09WRVJIRUFECisJbGcJJXIxLHMzOTBfcmVzZXRfbWNja19oYW5kbGVyLTBiKCVyMTMpCisJbHRncgklcjEsJXIxCisJanoJMWYKKwliYXNyCSVyMTQsJXIxCisxOglsYQklcjEsNDA5NQorCWxtZwklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtNDA5NSglcjEpCisJbHBzd2UJX19MQ19NQ0tfT0xEX1BTVworCisJLmdsb2JsCXMzOTBfcmVzZXRfbWNja19oYW5kbGVyCitzMzkwX3Jlc2V0X21jY2tfaGFuZGxlcjoKKwkucXVhZAkwCisKKyNlbHNlIC8qIENPTkZJR182NEJJVCAqLworCisJLmdsb2JsCXJlc2V0X21jY2tfaGFuZGxlcgorcmVzZXRfbWNja19oYW5kbGVyOgorCWJhc3IJJXIxMywwCiswOglsCSVyMTUsX19MQ19QQU5JQ19TVEFDSwkjIGxvYWQgcGFuaWMgc3RhY2sKKwlhaGkJJXIxNSwtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKwlsCSVyMSxzMzkwX3Jlc2V0X21jY2tfaGFuZGxlci0wYiglcjEzKQorCWx0cgklcjEsJXIxCisJanoJMWYKKwliYXNyCSVyMTQsJXIxCisxOglsbQklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEKKwlscHN3CV9fTENfTUNLX09MRF9QU1cKKworCS5nbG9ibAlzMzkwX3Jlc2V0X21jY2tfaGFuZGxlcgorczM5MF9yZXNldF9tY2NrX2hhbmRsZXI6CisJLmxvbmcJMAorCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggMmFhMTNlOC4uYjkyOGZlYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNjIsMTMgKzYyLDkgQEAKIHVuc2lnbmVkIGludCBjb25zb2xlX21vZGUgPSAwOwogdW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8gPSAtMTsKIHVuc2lnbmVkIGludCBjb25zb2xlX2lycSA9IC0xOwotdW5zaWduZWQgbG9uZyBtZW1vcnlfc2l6ZSA9IDA7CiB1bnNpZ25lZCBsb25nIG1hY2hpbmVfZmxhZ3MgPSAwOwotc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIHNpemUsIHR5cGU7Ci19IG1lbW9yeV9jaHVua1tNRU1PUllfQ0hVTktTXSA9IHsgeyAwIH0gfTsKLSNkZWZpbmUgQ0hVTktfUkVBRF9XUklURSAwCi0jZGVmaW5lIENIVU5LX1JFQURfT05MWSAxCisKK3N0cnVjdCBtZW1fY2h1bmsgbWVtb3J5X2NodW5rW01FTU9SWV9DSFVOS1NdOwogdm9sYXRpbGUgaW50IF9fY3B1X2xvZ2ljYWxfbWFwW05SX0NQVVNdOyAvKiBsb2dpY2FsIGNwdSB0byBjcHUgYWRkcmVzcyAqLwogdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIHpob2xlc19zaXplW01BWF9OUl9aT05FU107CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbW9yeV9lbmQ7CkBAIC0yMjksMTEgKzIyNSwxMSBAQAogCWNoYXIgKnB0cjsKIAogICAgICAgICBpZiAoTUFDSElORV9JU19WTSkgewotCQlfX2NwY21kKCJRVUVSWSBDT05TT0xFIiwgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTsKKwkJY3BjbWQoIlFVRVJZIENPTlNPTEUiLCBxdWVyeV9idWZmZXIsIDEwMjQsIE5VTEwpOwogCQljb25zb2xlX2Rldm5vID0gc2ltcGxlX3N0cnRvdWwocXVlcnlfYnVmZmVyICsgNSwgTlVMTCwgMTYpOwogCQlwdHIgPSBzdHJzdHIocXVlcnlfYnVmZmVyLCAiU1VCQ0hBTk5FTCA9Iik7CiAJCWNvbnNvbGVfaXJxID0gc2ltcGxlX3N0cnRvdWwocHRyICsgMTMsIE5VTEwsIDE2KTsKLQkJX19jcGNtZCgiUVVFUlkgVEVSTSIsIHF1ZXJ5X2J1ZmZlciwgMTAyNCwgTlVMTCk7CisJCWNwY21kKCJRVUVSWSBURVJNIiwgcXVlcnlfYnVmZmVyLCAxMDI0LCBOVUxMKTsKIAkJcHRyID0gc3Ryc3RyKHF1ZXJ5X2J1ZmZlciwgIkNPTk1PREUiKTsKIAkJLyoKIAkJICogU2V0IHRoZSBjb25tb2RlIHRvIDMyMTUgc28gdGhhdCB0aGUgZGV2aWNlIHJlY29nbml0aW9uIApAQCAtMjQyLDcgKzIzOCw3IEBACiAJCSAqIDMyMTUgYW5kIHRoZSAzMjcwIGRyaXZlciB3aWxsIHRyeSB0byBhY2Nlc3MgdGhlIGNvbnNvbGUKIAkJICogZGV2aWNlICgzMjE1IGFzIGNvbnNvbGUgYW5kIDMyNzAgYXMgbm9ybWFsIHR0eSkuCiAJCSAqLwotCQlfX2NwY21kKCJURVJNIENPTk1PREUgMzIxNSIsIE5VTEwsIDAsIE5VTEwpOworCQljcGNtZCgiVEVSTSBDT05NT0RFIDMyMTUiLCBOVUxMLCAwLCBOVUxMKTsKIAkJaWYgKHB0ciA9PSBOVUxMKSB7CiAjaWYgZGVmaW5lZChDT05GSUdfU0NMUF9DT05TT0xFKQogCQkJU0VUX0NPTlNPTEVfU0NMUDsKQEAgLTI5OSwxNCArMjk1LDE0IEBACiBzdGF0aWMgdm9pZCBkb19tYWNoaW5lX2hhbHRfbm9uc21wKHZvaWQpCiB7CiAgICAgICAgIGlmIChNQUNISU5FX0lTX1ZNICYmIHN0cmxlbih2bWhhbHRfY21kKSA+IDApCi0gICAgICAgICAgICAgICAgY3BjbWQodm1oYWx0X2NtZCwgTlVMTCwgMCwgTlVMTCk7CisJCV9fY3BjbWQodm1oYWx0X2NtZCwgTlVMTCwgMCwgTlVMTCk7CiAgICAgICAgIHNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX21hY2hpbmVfcG93ZXJfb2ZmX25vbnNtcCh2b2lkKQogewogICAgICAgICBpZiAoTUFDSElORV9JU19WTSAmJiBzdHJsZW4odm1wb2ZmX2NtZCkgPiAwKQotICAgICAgICAgICAgICAgIGNwY21kKHZtcG9mZl9jbWQsIE5VTEwsIDAsIE5VTEwpOworCQlfX2NwY21kKHZtcG9mZl9jbWQsIE5VTEwsIDAsIE5VTEwpOwogICAgICAgICBzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMpOwogfQogCkBAIC00ODksNiArNDg1LDM3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfbWVtb3J5X2VuZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcmVhbF9zaXplLCBtZW1vcnlfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIG1heF9tZW0sIG1heF9waHlzOworCWludCBpOworCisJbWVtb3J5X3NpemUgPSByZWFsX3NpemUgPSAwOworCW1heF9waHlzID0gVk1BTExPQ19FTkQgLSBWTUFMTE9DX01JTl9TSVpFOworCW1lbW9yeV9lbmQgJj0gUEFHRV9NQVNLOworCisJbWF4X21lbSA9IG1lbW9yeV9lbmQgPyBtaW4obWF4X3BoeXMsIG1lbW9yeV9lbmQpIDogbWF4X3BoeXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUzsgaSsrKSB7CisJCXN0cnVjdCBtZW1fY2h1bmsgKmNodW5rID0gJm1lbW9yeV9jaHVua1tpXTsKKworCQlyZWFsX3NpemUgPSBtYXgocmVhbF9zaXplLCBjaHVuay0+YWRkciArIGNodW5rLT5zaXplKTsKKwkJaWYgKGNodW5rLT5hZGRyID49IG1heF9tZW0pIHsKKwkJCW1lbXNldChjaHVuaywgMCwgc2l6ZW9mKCpjaHVuaykpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNodW5rLT5hZGRyICsgY2h1bmstPnNpemUgPiBtYXhfbWVtKQorCQkJY2h1bmstPnNpemUgPSBtYXhfbWVtIC0gY2h1bmstPmFkZHI7CisJCW1lbW9yeV9zaXplID0gbWF4KG1lbW9yeV9zaXplLCBjaHVuay0+YWRkciArIGNodW5rLT5zaXplKTsKKwl9CisJaWYgKCFtZW1vcnlfZW5kKQorCQltZW1vcnlfZW5kID0gbWVtb3J5X3NpemU7CisJaWYgKHJlYWxfc2l6ZSA+IG1lbW9yeV9lbmQpCisJCXByaW50aygiTW9yZSBtZW1vcnkgZGV0ZWN0ZWQgdGhhbiBzdXBwb3J0ZWQuIFVudXNlZDogJWx1a1xuIiwKKwkJICAgICAgIChyZWFsX3NpemUgLSBtZW1vcnlfZW5kKSA+PiAxMCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdAogc2V0dXBfbWVtb3J5KHZvaWQpCiB7CkBAIC02NDUsOCArNjcyLDYgQEAKIAlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZfZWRhdGE7CiAJaW5pdF9tbS5icmsgPSAodW5zaWduZWQgbG9uZykgJl9lbmQ7CiAKLQltZW1vcnlfZW5kID0gbWVtb3J5X3NpemU7Ci0KIAlpZiAoTUFDSElORV9IQVNfTVZDT1MpCiAJCW1lbWNweSgmdWFjY2VzcywgJnVhY2Nlc3NfbXZjb3MsIHNpemVvZih1YWNjZXNzKSk7CiAJZWxzZQpAQCAtNjU0LDIwICs2NzksNyBAQAogCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKIAotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQltZW1vcnlfZW5kICY9IH4weDQwMDAwMFVMOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdlIG5lZWQgc29tZSBmcmVlIHZpcnR1YWwgc3BhY2UgdG8gYmUgYWJsZSB0byBkbyB2bWFsbG9jLgotICAgICAgICAgKiBPbiBhIG1hY2hpbmUgd2l0aCAyR0IgbWVtb3J5IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYXQKLSAgICAgICAgICogbGVhc3QgMTI4IE1CIGZyZWUgc3BhY2UgZm9yIHZtYWxsb2MuCi0gICAgICAgICAqLwotICAgICAgICBpZiAobWVtb3J5X2VuZCA+IDE5MjAqMTAyNCoxMDI0KQotICAgICAgICAgICAgICAgIG1lbW9yeV9lbmQgPSAxOTIwKjEwMjQqMTAyNDsKLSNlbHNlIC8qIENPTkZJR182NEJJVCAqLwotCW1lbW9yeV9lbmQgJj0gfjB4MjAwMDAwVUw7Ci0jZW5kaWYgLyogQ09ORklHXzY0QklUICovCi0KKwlzZXR1cF9tZW1vcnlfZW5kKCk7CiAJc2V0dXBfbWVtb3J5KCk7CiAJc2V0dXBfcmVzb3VyY2VzKCk7CiAJc2V0dXBfbG93Y29yZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggNjI4MjIyNC4uMTkwOTBmNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC0yMzAsMTggKzIzMCwzNyBAQAogICAgICAgICB9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb193YWl0X2Zvcl9zdG9wKHZvaWQpCit7CisJaW50IGNwdTsKKworCS8qIFdhaXQgZm9yIGFsbCBvdGhlciBjcHVzIHRvIGVudGVyIHN0b3BwZWQgc3RhdGUgKi8KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCWNvbnRpbnVlOworCQl3aGlsZSghc21wX2NwdV9ub3RfcnVubmluZyhjcHUpKQorCQkJY3B1X3JlbGF4KCk7CisJfQorfQorCiAvKgogICogdGhpcyBmdW5jdGlvbiBzZW5kcyBhICdzdG9wJyBzaWdwIHRvIGFsbCBvdGhlciBDUFVzIGluIHRoZSBzeXN0ZW0uCiAgKiBpdCBnb2VzIHN0cmFpZ2h0IHRocm91Z2guCiAgKi8KIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQogeworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KKwlfX2xvYWRfcHN3X21hc2soUFNXX0tFUk5FTF9CSVRTICYgflBTV19NQVNLX01DSEVDSyk7CisKICAgICAgICAgLyogd3JpdGUgbWFnaWMgbnVtYmVyIHRvIHplcm8gcGFnZSAoYWJzb2x1dGUgMCkgKi8KIAlsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5wYW5pY19tYWdpYyA9IF9fUEFOSUNfTUFHSUM7CiAKIAkvKiBzdG9wIG90aGVyIHByb2Nlc3NvcnMuICovCiAJZG9fc2VuZF9zdG9wKCk7CiAKKwkvKiB3YWl0IHVudGlsIG90aGVyIHByb2Nlc3NvcnMgYXJlIHN0b3BwZWQgKi8KKwlkb193YWl0X2Zvcl9zdG9wKCk7CisKIAkvKiBzdG9yZSBzdGF0dXMgb2Ygb3RoZXIgcHJvY2Vzc29ycy4gKi8KIAlkb19zdG9yZV9zdGF0dXMoKTsKIH0KQEAgLTI1MCw4OCArMjY5LDI4IEBACiAgKiBSZWJvb3QsIGhhbHQgYW5kIHBvd2VyX29mZiByb3V0aW5lcyBmb3IgU01QLgogICovCiAKLXN0YXRpYyB2b2lkIGRvX21hY2hpbmVfcmVzdGFydCh2b2lkICogX191bnVzZWQpCi17Ci0JaW50IGNwdTsKLQlzdGF0aWMgYXRvbWljX3QgY3B1aWQgPSBBVE9NSUNfSU5JVCgtMSk7Ci0KLQlpZiAoYXRvbWljX2NtcHhjaGcoJmNwdWlkLCAtMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSAhPSAtMSkKLQkJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksIHNpZ3Bfc3RvcCk7Ci0KLQkvKiBXYWl0IGZvciBhbGwgb3RoZXIgY3B1cyB0byBlbnRlciBzdG9wcGVkIHN0YXRlICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQljb250aW51ZTsKLQkJd2hpbGUoIXNtcF9jcHVfbm90X3J1bm5pbmcoY3B1KSkKLQkJCWNwdV9yZWxheCgpOwotCX0KLQotCS8qIFN0b3JlIHN0YXR1cyBvZiBvdGhlciBjcHVzLiAqLwotCWRvX3N0b3JlX3N0YXR1cygpOwotCi0JLyoKLQkgKiBGaW5hbGx5IGNhbGwgcmVpcGwuIEJlY2F1c2Ugd2Ugd2FpdGVkIGZvciBhbGwgb3RoZXIKLQkgKiBjcHVzIHRvIGVudGVyIHRoaXMgZnVuY3Rpb24gd2Uga25vdyB0aGF0IHRoZXkgZG8KLQkgKiBub3QgaG9sZCBhbnkgczM5MGlycS1sb2NrcyAodGhlIGNwdXMgaGF2ZSBiZWVuCi0JICogaW50ZXJydXB0ZWQgYnkgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IGFuZCBzMzkwaXJxCi0JICogbG9ja3MgYXJlIGFsd2F5cyBoZWxkIGRpc2FibGVkKS4KLQkgKi8KLQlkb19yZWlwbCgpOwotfQotCiB2b2lkIG1hY2hpbmVfcmVzdGFydF9zbXAoY2hhciAqIF9fdW51c2VkKSAKIHsKLSAgICAgICAgb25fZWFjaF9jcHUoZG9fbWFjaGluZV9yZXN0YXJ0LCBOVUxMLCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fd2FpdF9mb3Jfc3RvcCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY3JbMTZdOwotCi0JX19jdGxfc3RvcmUoY3IsIDAsIDE1KTsKLQljclswXSAmPSB+MHhmZmZmOwotCWNyWzZdID0gMDsKLQlfX2N0bF9sb2FkKGNyLCAwLCAxNSk7Ci0JZm9yICg7OykKLQkJZW5hYmxlZF93YWl0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX21hY2hpbmVfaGFsdCh2b2lkICogX191bnVzZWQpCi17Ci0Jc3RhdGljIGF0b21pY190IGNwdWlkID0gQVRPTUlDX0lOSVQoLTEpOwotCi0JaWYgKGF0b21pY19jbXB4Y2hnKCZjcHVpZCwgLTEsIHNtcF9wcm9jZXNzb3JfaWQoKSkgPT0gLTEpIHsKLQkJc21wX3NlbmRfc3RvcCgpOwotCQlpZiAoTUFDSElORV9JU19WTSAmJiBzdHJsZW4odm1oYWx0X2NtZCkgPiAwKQotCQkJY3BjbWQodm1oYWx0X2NtZCwgTlVMTCwgMCwgTlVMTCk7Ci0JCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLAotCQkJCSBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyk7Ci0JfQotCWRvX3dhaXRfZm9yX3N0b3AoKTsKKwlzbXBfc2VuZF9zdG9wKCk7CisJZG9fcmVpcGwoKTsKIH0KIAogdm9pZCBtYWNoaW5lX2hhbHRfc21wKHZvaWQpCiB7Ci0gICAgICAgIG9uX2VhY2hfY3B1KGRvX21hY2hpbmVfaGFsdCwgTlVMTCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQgKiBfX3VudXNlZCkKLXsKLQlzdGF0aWMgYXRvbWljX3QgY3B1aWQgPSBBVE9NSUNfSU5JVCgtMSk7Ci0KLQlpZiAoYXRvbWljX2NtcHhjaGcoJmNwdWlkLCAtMSwgc21wX3Byb2Nlc3Nvcl9pZCgpKSA9PSAtMSkgewotCQlzbXBfc2VuZF9zdG9wKCk7Ci0JCWlmIChNQUNISU5FX0lTX1ZNICYmIHN0cmxlbih2bXBvZmZfY21kKSA+IDApCi0JCQljcGNtZCh2bXBvZmZfY21kLCBOVUxMLCAwLCBOVUxMKTsKLQkJc2lnbmFsX3Byb2Nlc3NvcihzbXBfcHJvY2Vzc29yX2lkKCksCi0JCQkJIHNpZ3Bfc3RvcF9hbmRfc3RvcmVfc3RhdHVzKTsKLQl9Ci0JZG9fd2FpdF9mb3Jfc3RvcCgpOworCXNtcF9zZW5kX3N0b3AoKTsKKwlpZiAoTUFDSElORV9JU19WTSAmJiBzdHJsZW4odm1oYWx0X2NtZCkgPiAwKQorCQlfX2NwY21kKHZtaGFsdF9jbWQsIE5VTEwsIDAsIE5VTEwpOworCXNpZ25hbF9wcm9jZXNzb3Ioc21wX3Byb2Nlc3Nvcl9pZCgpLCBzaWdwX3N0b3BfYW5kX3N0b3JlX3N0YXR1cyk7CisJZm9yICg7Oyk7CiB9CiAKIHZvaWQgbWFjaGluZV9wb3dlcl9vZmZfc21wKHZvaWQpCiB7Ci0gICAgICAgIG9uX2VhY2hfY3B1KGRvX21hY2hpbmVfcG93ZXJfb2ZmLCBOVUxMLCAwLCAwKTsKKwlzbXBfc2VuZF9zdG9wKCk7CisJaWYgKE1BQ0hJTkVfSVNfVk0gJiYgc3RybGVuKHZtcG9mZl9jbWQpID4gMCkKKwkJX19jcGNtZCh2bXBvZmZfY21kLCBOVUxMLCAwLCBOVUxMKTsKKwlzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wX2FuZF9zdG9yZV9zdGF0dXMpOworCWZvciAoOzspOwogfQogCiAvKgpAQCAtNTAxLDggKzQ2MCw2IEBACiAgKi8KIGV4dGVybiB2b2lkIGluaXRfY3B1X3RpbWVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgaW5pdF9jcHVfdnRpbWVyKHZvaWQpOwotZXh0ZXJuIGludCBwZmF1bHRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHBmYXVsdF9maW5pKHZvaWQpOwogCiBpbnQgX19kZXZpbml0IHN0YXJ0X3NlY29uZGFyeSh2b2lkICpjcHV2b2lkKQogewpAQCAtNTE0LDExICs0NzEsOSBAQAogI2lmZGVmIENPTkZJR19WSVJUX1RJTUVSCiAgICAgICAgIGluaXRfY3B1X3Z0aW1lcigpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BGQVVMVAogCS8qIEVuYWJsZSBwZmF1bHQgcHNldWRvIHBhZ2UgZmF1bHRzIG9uIHRoaXMgY3B1LiAqLwotCWlmIChNQUNISU5FX0lTX1ZNKQotCQlwZmF1bHRfaW5pdCgpOwotI2VuZGlmCisJcGZhdWx0X2luaXQoKTsKKwogCS8qIE1hcmsgdGhpcyBjcHUgYXMgb25saW5lICovCiAJY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIAkvKiBTd2l0Y2ggb24gaW50ZXJydXB0cyAqLwpAQCAtNzA4LDExICs2NjMsOCBAQAogCX0KIAljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7CiAKLSNpZmRlZiBDT05GSUdfUEZBVUxUCiAJLyogRGlzYWJsZSBwZmF1bHQgcHNldWRvIHBhZ2UgZmF1bHRzIG9uIHRoaXMgY3B1LiAqLwotCWlmIChNQUNISU5FX0lTX1ZNKQotCQlwZmF1bHRfZmluaSgpOwotI2VuZGlmCisJcGZhdWx0X2ZpbmkoKTsKIAogCW1lbXNldCgmY3JfcGFybXMub3J2YWxzLCAwLCBzaXplb2YoY3JfcGFybXMub3J2YWxzKSk7CiAJbWVtc2V0KCZjcl9wYXJtcy5hbmR2YWxzLCAweGZmLCBzaXplb2YoY3JfcGFybXMuYW5kdmFscykpOwpAQCAtODYwLDQgKzgxMiwzIEBACiBFWFBPUlRfU1lNQk9MKHNtcF9jYWxsX2Z1bmN0aW9uKTsKIEVYUE9SVF9TWU1CT0woc21wX2dldF9jcHUpOwogRVhQT1JUX1NZTUJPTChzbXBfcHV0X2NwdSk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA5MmVjZmZiLi4zY2JiMGRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC01OCwxMiArNTgsNiBAQAogCiBleHRlcm4gcGdtX2NoZWNrX2hhbmRsZXJfdCBkb19wcm90ZWN0aW9uX2V4Y2VwdGlvbjsKIGV4dGVybiBwZ21fY2hlY2tfaGFuZGxlcl90IGRvX2RhdF9leGNlcHRpb247Ci0jaWZkZWYgQ09ORklHX1BGQVVMVAotZXh0ZXJuIGludCBwZmF1bHRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHBmYXVsdF9maW5pKHZvaWQpOwotZXh0ZXJuIHZvaWQgcGZhdWx0X2ludGVycnVwdChfX3UxNiBlcnJvcl9jb2RlKTsKLXN0YXRpYyBleHRfaW50X2luZm9fdCBleHRfaW50X3BmYXVsdDsKLSNlbmRpZgogZXh0ZXJuIHBnbV9jaGVja19oYW5kbGVyX3QgZG9fbW9uaXRvcl9jYWxsOwogCiAjZGVmaW5lIHN0YWNrX3BvaW50ZXIgKHsgdm9pZCAqKnNwOyBhc20oImxhICUwLDAoMTUpIiA6ICI9JmQiIChzcCkpOyBzcDsgfSkKQEAgLTEzNSw3ICsxMjksNyBAQAogCX0KIH0KIAotdm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqIHN0YWNrKQordm9pZCBzaG93X3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3RhY2spCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IxNSBhc20gKCIxNSIpOwogCXVuc2lnbmVkIGxvbmcgc3A7CkBAIC0xNTcsNiArMTUxLDkgQEAKIAkJX19zaG93X3RyYWNlKHNwLCBTMzkwX2xvd2NvcmUudGhyZWFkX2luZm8sCiAJCQkgICAgIFMzOTBfbG93Y29yZS50aHJlYWRfaW5mbyArIFRIUkVBRF9TSVpFKTsKIAlwcmludGsoIlxuIik7CisJaWYgKCF0YXNrKQorCQl0YXNrID0gY3VycmVudDsKKwlkZWJ1Z19zaG93X2hlbGRfbG9ja3ModGFzayk7CiB9CiAKIHZvaWQgc2hvd19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwKQpAQCAtNzM5LDIyICs3MzYsNSBAQAogICAgICAgICBwZ21fY2hlY2tfdGFibGVbMHgxQ10gPSAmc3BhY2Vfc3dpdGNoX2V4Y2VwdGlvbjsKICAgICAgICAgcGdtX2NoZWNrX3RhYmxlWzB4MURdID0gJmhmcF9zcXJ0X2V4Y2VwdGlvbjsKIAlwZ21fY2hlY2tfdGFibGVbMHg0MF0gPSAmZG9fbW9uaXRvcl9jYWxsOwotCi0JaWYgKE1BQ0hJTkVfSVNfVk0pIHsKLSNpZmRlZiBDT05GSUdfUEZBVUxUCi0JCS8qCi0JCSAqIFRyeSB0byBnZXQgcGZhdWx0IHBzZXVkbyBwYWdlIGZhdWx0cyBnb2luZy4KLQkJICovCi0JCWlmIChyZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoMHgyNjAzLCBwZmF1bHRfaW50ZXJydXB0LAotCQkJCQkJICAgICAgJmV4dF9pbnRfcGZhdWx0KSAhPSAwKQotCQkJcGFuaWMoIkNvdWxkbid0IHJlcXVlc3QgZXh0ZXJuYWwgaW50ZXJydXB0IDB4MjYwMyIpOwotCi0JCWlmIChwZmF1bHRfaW5pdCgpID09IDApIAotCQkJcmV0dXJuOwotCQkKLQkJLyogVG91Z2ggbHVjaywgbm8gcGZhdWx0LiAqLwotCQl1bnJlZ2lzdGVyX2Vhcmx5X2V4dGVybmFsX2ludGVycnVwdCgweDI2MDMsIHBmYXVsdF9pbnRlcnJ1cHQsCi0JCQkJCQkgICAgJmV4dF9pbnRfcGZhdWx0KTsKLSNlbmRpZgotCX0KKwlwZmF1bHRfaXJxX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUgYi9hcmNoL3MzOTAvbGliL01ha2VmaWxlCmluZGV4IGIwY2ZhNmMuLmI1Zjk0Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAogCi1saWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8KK2xpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8KIGxpYi0kKENPTkZJR18zMkJJVCkgKz0gZGl2NjQubwogbGliLSQoQ09ORklHXzY0QklUKSArPSB1YWNjZXNzX212Y29zLm8KIGxpYi0kKENPTkZJR19TTVApICs9IHNwaW5sb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19tdmNvcy5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMKaW5kZXggMTIxYjI5My4uZjlhMjNkNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMKQEAgLTI3LDYgKzI3LDkgQEAKICNkZWZpbmUgU0xSCSJzbGdyIgogI2VuZGlmCiAKK2V4dGVybiBzaXplX3QgY29weV9mcm9tX3VzZXJfc3RkKHNpemVfdCwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdm9pZCAqKTsKK2V4dGVybiBzaXplX3QgY29weV90b191c2VyX3N0ZChzaXplX3QsIHZvaWQgX191c2VyICosIGNvbnN0IHZvaWQgKik7CisKIHNpemVfdCBjb3B5X2Zyb21fdXNlcl9tdmNvcyhzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnB0ciwgdm9pZCAqeCkKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtKCIwIikgPSAweDgxVUw7CkBAIC02Niw2ICs2OSwxMyBAQAogCXJldHVybiBzaXplOwogfQogCitzaXplX3QgY29weV9mcm9tX3VzZXJfbXZjb3NfY2hlY2soc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICpwdHIsIHZvaWQgKngpCit7CisJaWYgKHNpemUgPD0gMjU2KQorCQlyZXR1cm4gY29weV9mcm9tX3VzZXJfc3RkKHNpemUsIHB0ciwgeCk7CisJcmV0dXJuIGNvcHlfZnJvbV91c2VyX212Y29zKHNpemUsIHB0ciwgeCk7Cit9CisKIHNpemVfdCBjb3B5X3RvX3VzZXJfbXZjb3Moc2l6ZV90IHNpemUsIHZvaWQgX191c2VyICpwdHIsIGNvbnN0IHZvaWQgKngpCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSgiMCIpID0gMHg4MTAwMDBVTDsKQEAgLTk1LDYgKzEwNSwxMyBAQAogCXJldHVybiBzaXplOwogfQogCitzaXplX3QgY29weV90b191c2VyX212Y29zX2NoZWNrKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqcHRyLCBjb25zdCB2b2lkICp4KQoreworCWlmIChzaXplIDw9IDI1NikKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcl9zdGQoc2l6ZSwgcHRyLCB4KTsKKwlyZXR1cm4gY29weV90b191c2VyX212Y29zKHNpemUsIHB0ciwgeCk7Cit9CisKIHNpemVfdCBjb3B5X2luX3VzZXJfbXZjb3Moc2l6ZV90IHNpemUsIHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20pCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSgiMCIpID0gMHg4MTAwODFVTDsKQEAgLTE0NSwxOCArMTYyLDE2IEBACiAJcmV0dXJuIHNpemU7CiB9CiAKLWV4dGVybiBzaXplX3QgY29weV9mcm9tX3VzZXJfc3RkX3NtYWxsKHNpemVfdCwgY29uc3Qgdm9pZCBfX3VzZXIgKiwgdm9pZCAqKTsKLWV4dGVybiBzaXplX3QgY29weV90b191c2VyX3N0ZF9zbWFsbChzaXplX3QsIHZvaWQgX191c2VyICosIGNvbnN0IHZvaWQgKik7CiBleHRlcm4gc2l6ZV90IHN0cm5sZW5fdXNlcl9zdGQoc2l6ZV90LCBjb25zdCBjaGFyIF9fdXNlciAqKTsKIGV4dGVybiBzaXplX3Qgc3RybmNweV9mcm9tX3VzZXJfc3RkKHNpemVfdCwgY29uc3QgY2hhciBfX3VzZXIgKiwgY2hhciAqKTsKIGV4dGVybiBpbnQgZnV0ZXhfYXRvbWljX29wKGludCwgaW50IF9fdXNlciAqLCBpbnQsIGludCAqKTsKIGV4dGVybiBpbnQgZnV0ZXhfYXRvbWljX2NtcHhjaGcoaW50IF9fdXNlciAqLCBpbnQsIGludCk7CiAKIHN0cnVjdCB1YWNjZXNzX29wcyB1YWNjZXNzX212Y29zID0gewotCS5jb3B5X2Zyb21fdXNlciA9IGNvcHlfZnJvbV91c2VyX212Y29zLAotCS5jb3B5X2Zyb21fdXNlcl9zbWFsbCA9IGNvcHlfZnJvbV91c2VyX3N0ZF9zbWFsbCwKLQkuY29weV90b191c2VyID0gY29weV90b191c2VyX212Y29zLAotCS5jb3B5X3RvX3VzZXJfc21hbGwgPSBjb3B5X3RvX3VzZXJfc3RkX3NtYWxsLAorCS5jb3B5X2Zyb21fdXNlciA9IGNvcHlfZnJvbV91c2VyX212Y29zX2NoZWNrLAorCS5jb3B5X2Zyb21fdXNlcl9zbWFsbCA9IGNvcHlfZnJvbV91c2VyX3N0ZCwKKwkuY29weV90b191c2VyID0gY29weV90b191c2VyX212Y29zX2NoZWNrLAorCS5jb3B5X3RvX3VzZXJfc21hbGwgPSBjb3B5X3RvX3VzZXJfc3RkLAogCS5jb3B5X2luX3VzZXIgPSBjb3B5X2luX3VzZXJfbXZjb3MsCiAJLmNsZWFyX3VzZXIgPSBjbGVhcl91c2VyX212Y29zLAogCS5zdHJubGVuX3VzZXIgPSBzdHJubGVuX3VzZXJfc3RkLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQxYmRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiAgYXJjaC9zMzkwL2xpYi91YWNjZXNzX3B0LmMKKyAqCisgKiAgVXNlciBhY2Nlc3MgZnVuY3Rpb25zIGJhc2VkIG9uIHBhZ2UgdGFibGUgd2Fsa3MuCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA2CisgKiAgICBBdXRob3Iocyk6IEdlcmFsZCBTY2hhZWZlciAoZ2VyYWxkLnNjaGFlZmVyQGRlLmlibS5jb20pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9mdXRleC5oPgorCitzdGF0aWMgaW5saW5lIGludCBfX2hhbmRsZV9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCSBpbnQgd3JpdGVfYWNjZXNzKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCByZXQgPSAtRUZBVUxUOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKTsKKwlpZiAodW5saWtlbHkoIXZtYSkpCisJCWdvdG8gb3V0OworCWlmICh1bmxpa2VseSh2bWEtPnZtX3N0YXJ0ID4gYWRkcmVzcykpIHsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCQlnb3RvIG91dDsKKwkJaWYgKGV4cGFuZF9zdGFjayh2bWEsIGFkZHJlc3MpKQorCQkJZ290byBvdXQ7CisJfQorCisJaWYgKCF3cml0ZV9hY2Nlc3MpIHsKKwkJLyogcGFnZSBub3QgcHJlc2VudCwgY2hlY2sgdm0gZmxhZ3MgKi8KKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fRVhFQyB8IFZNX1dSSVRFKSkpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQorCQkJZ290byBvdXQ7CisJfQorCitzdXJ2aXZlOgorCXN3aXRjaCAoaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHdyaXRlX2FjY2VzcykpIHsKKwljYXNlIFZNX0ZBVUxUX01JTk9SOgorCQljdXJyZW50LT5taW5fZmx0Kys7CisJCWJyZWFrOworCWNhc2UgVk1fRkFVTFRfTUFKT1I6CisJCWN1cnJlbnQtPm1hal9mbHQrKzsKKwkJYnJlYWs7CisJY2FzZSBWTV9GQVVMVF9TSUdCVVM6CisJCWdvdG8gb3V0X3NpZ2J1czsKKwljYXNlIFZNX0ZBVUxUX09PTToKKwkJZ290byBvdXRfb2ZfbWVtb3J5OworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlyZXQgPSAwOworb3V0OgorCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJldDsKKworb3V0X29mX21lbW9yeToKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWlmIChjdXJyZW50LT5waWQgPT0gMSkgeworCQl5aWVsZCgpOworCQlnb3RvIHN1cnZpdmU7CisJfQorCXByaW50aygiVk06IGtpbGxpbmcgcHJvY2VzcyAlc1xuIiwgY3VycmVudC0+Y29tbSk7CisJcmV0dXJuIHJldDsKKworb3V0X3NpZ2J1czoKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWN1cnJlbnQtPnRocmVhZC5wcm90X2FkZHIgPSBhZGRyZXNzOworCWN1cnJlbnQtPnRocmVhZC50cmFwX25vID0gMHgxMTsKKwlmb3JjZV9zaWcoU0lHQlVTLCBjdXJyZW50KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBfX3VzZXJfY29weV9wdCh1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprcHRyLAorCQkJCSAgICBzaXplX3QgbiwgaW50IHdyaXRlX3VzZXIpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgcGZuLCBkb25lLCBzaXplOworCXBnZF90ICpwZ2Q7CisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworCXZvaWQgKmZyb20sICp0bzsKKworCWRvbmUgPSAwOworcmV0cnk6CisJc3Bpbl9sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlkbyB7CisJCXBnZCA9IHBnZF9vZmZzZXQobW0sIHVhZGRyKTsKKwkJaWYgKHBnZF9ub25lKCpwZ2QpIHx8IHVubGlrZWx5KHBnZF9iYWQoKnBnZCkpKQorCQkJZ290byBmYXVsdDsKKworCQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgdWFkZHIpOworCQlpZiAocG1kX25vbmUoKnBtZCkgfHwgdW5saWtlbHkocG1kX2JhZCgqcG1kKSkpCisJCQlnb3RvIGZhdWx0OworCisJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgdWFkZHIpOworCQlpZiAoIXB0ZSB8fCAhcHRlX3ByZXNlbnQoKnB0ZSkgfHwKKwkJICAgICh3cml0ZV91c2VyICYmICFwdGVfd3JpdGUoKnB0ZSkpKQorCQkJZ290byBmYXVsdDsKKworCQlwZm4gPSBwdGVfcGZuKCpwdGUpOworCQlpZiAoIXBmbl92YWxpZChwZm4pKQorCQkJZ290byBvdXQ7CisKKwkJb2Zmc2V0ID0gdWFkZHIgJiAoUEFHRV9TSVpFIC0gMSk7CisJCXNpemUgPSBtaW4obiAtIGRvbmUsIFBBR0VfU0laRSAtIG9mZnNldCk7CisJCWlmICh3cml0ZV91c2VyKSB7CisJCQl0byA9ICh2b2lkICopKChwZm4gPDwgUEFHRV9TSElGVCkgKyBvZmZzZXQpOworCQkJZnJvbSA9IGtwdHIgKyBkb25lOworCQl9IGVsc2UgeworCQkJZnJvbSA9ICh2b2lkICopKChwZm4gPDwgUEFHRV9TSElGVCkgKyBvZmZzZXQpOworCQkJdG8gPSBrcHRyICsgZG9uZTsKKwkJfQorCQltZW1jcHkodG8sIGZyb20sIHNpemUpOworCQlkb25lICs9IHNpemU7CisJCXVhZGRyICs9IHNpemU7CisJfSB3aGlsZSAoZG9uZSA8IG4pOworb3V0OgorCXNwaW5fdW5sb2NrKCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKKwlyZXR1cm4gbiAtIGRvbmU7CitmYXVsdDoKKwlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CisJaWYgKF9faGFuZGxlX2ZhdWx0KG1tLCB1YWRkciwgd3JpdGVfdXNlcikpCisJCXJldHVybiBuIC0gZG9uZTsKKwlnb3RvIHJldHJ5OworfQorCitzaXplX3QgY29weV9mcm9tX3VzZXJfcHQoc2l6ZV90IG4sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB2b2lkICp0bykKK3sKKwlzaXplX3QgcmM7CisKKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkgeworCQltZW1jcHkodG8sICh2b2lkIF9fa2VybmVsIF9fZm9yY2UgKikgZnJvbSwgbik7CisJCXJldHVybiAwOworCX0KKwlyYyA9IF9fdXNlcl9jb3B5X3B0KCh1bnNpZ25lZCBsb25nKSBmcm9tLCB0bywgbiwgMCk7CisJaWYgKHVubGlrZWx5KHJjKSkKKwkJbWVtc2V0KHRvICsgbiAtIHJjLCAwLCByYyk7CisJcmV0dXJuIHJjOworfQorCitzaXplX3QgY29weV90b191c2VyX3B0KHNpemVfdCBuLCB2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20pCit7CisJaWYgKHNlZ21lbnRfZXEoZ2V0X2ZzKCksIEtFUk5FTF9EUykpIHsKKwkJbWVtY3B5KCh2b2lkIF9fa2VybmVsIF9fZm9yY2UgKikgdG8sIGZyb20sIG4pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIF9fdXNlcl9jb3B5X3B0KCh1bnNpZ25lZCBsb25nKSB0bywgKHZvaWQgKikgZnJvbSwgbiwgMSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKaW5kZXggZjQ0ZjAwNy4uMmQ1NDllZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwpAQCAtMjgsNiArMjgsOSBAQAogI2RlZmluZSBTTFIJInNsZ3IiCiAjZW5kaWYKIAorZXh0ZXJuIHNpemVfdCBjb3B5X2Zyb21fdXNlcl9wdChzaXplX3QgbiwgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHZvaWQgKnRvKTsKK2V4dGVybiBzaXplX3QgY29weV90b191c2VyX3B0KHNpemVfdCBuLCB2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20pOworCiBzaXplX3QgY29weV9mcm9tX3VzZXJfc3RkKHNpemVfdCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqcHRyLCB2b2lkICp4KQogewogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKQEAgLTY5LDM0ICs3MiwxMSBAQAogCXJldHVybiBzaXplOwogfQogCi1zaXplX3QgY29weV9mcm9tX3VzZXJfc3RkX3NtYWxsKHNpemVfdCBzaXplLCBjb25zdCB2b2lkIF9fdXNlciAqcHRyLCB2b2lkICp4KQorc2l6ZV90IGNvcHlfZnJvbV91c2VyX3N0ZF9jaGVjayhzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnB0ciwgdm9pZCAqeCkKIHsKLQl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7Ci0KLQl0bXAxID0gMFVMOwotCWFzbSB2b2xhdGlsZSgKLQkJIjA6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlMFxuIgotCQkiICAgaiAgICAgNWZcbiIKLQkJIjE6IGxhICAgICU0LDI1NSglMSlcbiIgLyogJTQgPSBwdHIgKyAyNTUgKi8KLQkJIiAgIkxISSIgICUzLC00MDk2XG4iCi0JCSIgICBuciAgICAlNCwlM1xuIgkvKiAlNCA9IChwdHIgKyAyNTUpICYgLTQwOTYgKi8KLQkJIiAgIlNMUiIgICU0LCUxXG4iCi0JCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwotCQkiICAgam5oICAgNWZcbiIKLQkJIjI6IG12Y3AgIDAoJTQsJTIpLDAoJTEpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgotCQkiICAiQUxSIiAgJTIsJTRcbiIKLQkJIjM6IkxISSIgICU0LC0xXG4iCi0JCSIgICJBTFIiICAlNCwlMFxuIgkvKiBjb3B5IHJlbWFpbmluZyBzaXplLCBzdWJ0cmFjdCAxICovCi0JCSIgICBicmFzICAlMyw0ZlxuIgotCQkiICAgeGMgICAgMCgxLCUyKSwwKCUyKVxuIgotCQkiNDogZXggICAgJTQsMCglMylcbiIKLQkJIjU6XG4iCi0JCUVYX1RBQkxFKDBiLDFiKSBFWF9UQUJMRSgyYiwzYikKLQkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQotCQk6IDogImNjIiwgIm1lbW9yeSIpOwotCXJldHVybiBzaXplOworCWlmIChzaXplIDw9IDEwMjQpCisJCXJldHVybiBjb3B5X2Zyb21fdXNlcl9zdGQoc2l6ZSwgcHRyLCB4KTsKKwlyZXR1cm4gY29weV9mcm9tX3VzZXJfcHQoc2l6ZSwgcHRyLCB4KTsKIH0KIAogc2l6ZV90IGNvcHlfdG9fdXNlcl9zdGQoc2l6ZV90IHNpemUsIHZvaWQgX191c2VyICpwdHIsIGNvbnN0IHZvaWQgKngpCkBAIC0xMzAsMjggKzExMCwxMSBAQAogCXJldHVybiBzaXplOwogfQogCi1zaXplX3QgY29weV90b191c2VyX3N0ZF9zbWFsbChzaXplX3Qgc2l6ZSwgdm9pZCBfX3VzZXIgKnB0ciwgY29uc3Qgdm9pZCAqeCkKK3NpemVfdCBjb3B5X3RvX3VzZXJfc3RkX2NoZWNrKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqcHRyLCBjb25zdCB2b2lkICp4KQogewotCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKLQotCXRtcDEgPSAwVUw7Ci0JYXNtIHZvbGF0aWxlKAotCQkiMDogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKLQkJIiAgIlNMUiIgICUwLCUwXG4iCi0JCSIgICBqICAgICAzZlxuIgotCQkiMTogbGEgICAgJTQsMjU1KCUxKVxuIiAvKiBwdHIgKyAyNTUgKi8KLQkJIiAgIkxISSIgICUzLC00MDk2XG4iCi0JCSIgICBuciAgICAlNCwlM1xuIgkvKiAocHRyICsgMjU1KSAmIC00MDk2VUwgKi8KLQkJIiAgIlNMUiIgICU0LCUxXG4iCi0JCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLwotCQkiICAgam5oICAgM2ZcbiIKLQkJIjI6IG12Y3MgIDAoJTQsJTEpLDAoJTIpLCUzXG4iCi0JCSIgICJTTFIiICAlMCwlNFxuIgotCQkiMzpcbiIKLQkJRVhfVEFCTEUoMGIsMWIpIEVYX1RBQkxFKDJiLDNiKQotCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCi0JCTogOiAiY2MiLCAibWVtb3J5Iik7Ci0JcmV0dXJuIHNpemU7CisJaWYgKHNpemUgPD0gMTAyNCkKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcl9zdGQoc2l6ZSwgcHRyLCB4KTsKKwlyZXR1cm4gY29weV90b191c2VyX3B0KHNpemUsIHB0ciwgeCk7CiB9CiAKIHNpemVfdCBjb3B5X2luX3VzZXJfc3RkKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tKQpAQCAtMzQzLDEwICszMDYsMTAgQEAKIH0KIAogc3RydWN0IHVhY2Nlc3Nfb3BzIHVhY2Nlc3Nfc3RkID0gewotCS5jb3B5X2Zyb21fdXNlciA9IGNvcHlfZnJvbV91c2VyX3N0ZCwKLQkuY29weV9mcm9tX3VzZXJfc21hbGwgPSBjb3B5X2Zyb21fdXNlcl9zdGRfc21hbGwsCi0JLmNvcHlfdG9fdXNlciA9IGNvcHlfdG9fdXNlcl9zdGQsCi0JLmNvcHlfdG9fdXNlcl9zbWFsbCA9IGNvcHlfdG9fdXNlcl9zdGRfc21hbGwsCisJLmNvcHlfZnJvbV91c2VyID0gY29weV9mcm9tX3VzZXJfc3RkX2NoZWNrLAorCS5jb3B5X2Zyb21fdXNlcl9zbWFsbCA9IGNvcHlfZnJvbV91c2VyX3N0ZCwKKwkuY29weV90b191c2VyID0gY29weV90b191c2VyX3N0ZF9jaGVjaywKKwkuY29weV90b191c2VyX3NtYWxsID0gY29weV90b191c2VyX3N0ZCwKIAkuY29weV9pbl91c2VyID0gY29weV9pbl91c2VyX3N0ZCwKIAkuY2xlYXJfdXNlciA9IGNsZWFyX3VzZXJfc3RkLAogCS5zdHJubGVuX3VzZXIgPSBzdHJubGVuX3VzZXJfc3RkLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCmluZGV4IDIyNjI3NWQuLjllOWJjNDggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vZXh0bWVtLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2RlZmluZSBEQ1NTX0RFQlVHCS8qIERlYnVnIG1lc3NhZ2VzIG9uL29mZiAqLwogCkBAIC03NywxNSArNzgsMTEgQEAKIAlpbnQgc2VnY250OwogfTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhkY3NzX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChkY3NzX2xvY2spOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZGNzc19saXN0ID0gTElTVF9IRUFEX0lOSVQoZGNzc19saXN0KTsKIHN0YXRpYyBjaGFyICpzZWd0eXBlX3N0cmluZ1tdID0geyAiU1ciLCAiRVciLCAiU1IiLCAiRVIiLCAiU04iLCAiRU4iLCAiU0MiLAogCQkJCQkiRVcvRU4tTUlYRUQiIH07CiAKLWV4dGVybiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZSwgdHlwZTsKLX0gbWVtb3J5X2NodW5rW01FTU9SWV9DSFVOS1NdOwotCiAvKgogICogQ3JlYXRlIHRoZSA4IGJ5dGVzLCBlYmNkaWMgVk0gc2VnbWVudCBuYW1lIGZyb20KICAqIGFuIGFzY2lpIG5hbWUuCkBAIC0xMTcsNyArMTE0LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCXN0cnVjdCBkY3NzX3NlZ21lbnQgKnRtcCwgKnJldHZhbCA9IE5VTEw7CiAKLQlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRjc3NfbG9jayk7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRjc3NfbG9jaykpOwogCWRjc3NfbWtuYW1lIChuYW1lLCBkY3NzX25hbWUpOwogCWxpc3RfZm9yX2VhY2ggKGwsICZkY3NzX2xpc3QpIHsKIAkJdG1wID0gbGlzdF9lbnRyeSAobCwgc3RydWN0IGRjc3Nfc2VnbWVudCwgbGlzdCk7CkBAIC0yNDksOCArMjQ2LDggQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgewotCQlpZiAobWVtb3J5X2NodW5rW2ldLnR5cGUgIT0gMCkKKwlmb3IgKGkgPSAwOyBpIDwgTUVNT1JZX0NIVU5LUyAmJiBtZW1vcnlfY2h1bmtbaV0uc2l6ZSA+IDA7IGkrKykgeworCQlpZiAobWVtb3J5X2NodW5rW2ldLnR5cGUgIT0gQ0hVTktfUkVBRF9XUklURSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKG1lbW9yeV9jaHVua1tpXS5hZGRyID4+IDIwKSA+IChzZWctPmVuZCA+PiAyMCkpCiAJCQljb250aW51ZTsKQEAgLTI3Miw3ICsyNjksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmw7CiAJc3RydWN0IGRjc3Nfc2VnbWVudCAqdG1wOwogCi0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZkY3NzX2xvY2spOworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkY3NzX2xvY2spKTsKIAlsaXN0X2Zvcl9lYWNoKGwsICZkY3NzX2xpc3QpIHsKIAkJdG1wID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGNzc19zZWdtZW50LCBsaXN0KTsKIAkJaWYgKCh0bXAtPnN0YXJ0X2FkZHIgPj4gMjApID4gKHNlZy0+ZW5kID4+IDIwKSkKQEAgLTQyOSw3ICs0MjYsNyBAQAogCWlmICghTUFDSElORV9JU19WTSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlzcGluX2xvY2sgKCZkY3NzX2xvY2spOworCW11dGV4X2xvY2soJmRjc3NfbG9jayk7CiAJc2VnID0gc2VnbWVudF9ieV9uYW1lIChuYW1lKTsKIAlpZiAoc2VnID09IE5VTEwpCiAJCXJjID0gX19zZWdtZW50X2xvYWQgKG5hbWUsIGRvX25vbnNoYXJlZCwgYWRkciwgZW5kKTsKQEAgLTQ0NCw3ICs0NDEsNyBAQAogCQkJcmMgICAgPSAtRVBFUk07CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2sgKCZkY3NzX2xvY2spOworCW11dGV4X3VubG9jaygmZGNzc19sb2NrKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQ2Nyw3ICs0NjQsNyBAQAogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJaW50IGRjc3NfY29tbWFuZCwgcmMsIGRpYWdfY2M7CiAKLQlzcGluX2xvY2sgKCZkY3NzX2xvY2spOworCW11dGV4X2xvY2soJmRjc3NfbG9jayk7CiAJc2VnID0gc2VnbWVudF9ieV9uYW1lIChuYW1lKTsKIAlpZiAoc2VnID09IE5VTEwpIHsKIAkJcmMgPSAtRUlOVkFMOwpAQCAtNTA4LDcgKzUwNSw3IEBACiAJCSAgJmR1bW15LCAmZHVtbXkpOwogCWtmcmVlKHNlZyk7CiAgb3V0X3VubG9jazoKLQlzcGluX3VubG9jaygmZGNzc19sb2NrKTsKKwltdXRleF91bmxvY2soJmRjc3NfbG9jayk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01MjYsNyArNTIzLDcgQEAKIAlpZiAoIU1BQ0hJTkVfSVNfVk0pCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmZGNzc19sb2NrKTsKKwltdXRleF9sb2NrKCZkY3NzX2xvY2spOwogCXNlZyA9IHNlZ21lbnRfYnlfbmFtZSAobmFtZSk7CiAJaWYgKHNlZyA9PSBOVUxMKSB7CiAJCVBSSU5UX0VSUiAoImNvdWxkIG5vdCBmaW5kIHNlZ21lbnQgJXMgaW4gc2VnbWVudF91bmxvYWQsICIKQEAgLTU0MCw3ICs1MzcsNyBAQAogCQlrZnJlZShzZWcpOwogCX0KIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmRjc3NfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkY3NzX2xvY2spOwogfQogCiAvKgpAQCAtNTU5LDEyICs1NTYsMTMgQEAKIAlpZiAoIU1BQ0hJTkVfSVNfVk0pCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmZGNzc19sb2NrKTsKKwltdXRleF9sb2NrKCZkY3NzX2xvY2spOwogCXNlZyA9IHNlZ21lbnRfYnlfbmFtZSAobmFtZSk7CiAKIAlpZiAoc2VnID09IE5VTEwpIHsKLQkJUFJJTlRfRVJSICgiY291bGQgbm90IGZpbmQgc2VnbWVudCAlcyBpbiBzZWdtZW50X3NhdmUsIHBsZWFzZSByZXBvcnQgdG8gbGludXgzOTBAZGUuaWJtLmNvbVxuIixuYW1lKTsKLQkJcmV0dXJuOworCQlQUklOVF9FUlIoImNvdWxkIG5vdCBmaW5kIHNlZ21lbnQgJXMgaW4gc2VnbWVudF9zYXZlLCBwbGVhc2UgIgorCQkJICAicmVwb3J0IHRvIGxpbnV4MzkwQGRlLmlibS5jb21cbiIsIG5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKIAlzdGFydHBmbiA9IHNlZy0+c3RhcnRfYWRkciA+PiBQQUdFX1NISUZUOwpAQCAtNTkxLDcgKzU4OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIG91dDoKLQlzcGluX3VubG9jaygmZGNzc19sb2NrKTsKKwltdXRleF91bmxvY2soJmRjc3NfbG9jayk7CiB9CiAKIEVYUE9SVF9TWU1CT0woc2VnbWVudF9sb2FkKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggMWMzMjNiYi4uY2Q4NWUzNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGFzbS9zMzkwX2V4dC5oPgogCiAjaWZuZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBfX0ZBSUxfQUREUl9NQVNLIDB4N2ZmZmYwMDAKQEAgLTM5NCw2ICszOTUsNyBAQAogLyoKICAqICdwZmF1bHQnIHBzZXVkbyBwYWdlIGZhdWx0cyByb3V0aW5lcy4KICAqLworc3RhdGljIGV4dF9pbnRfaW5mb190IGV4dF9pbnRfcGZhdWx0Owogc3RhdGljIGludCBwZmF1bHRfZGlzYWJsZSA9IDA7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5vcGZhdWx0KGNoYXIgKnN0cikKQEAgLTQyMiw3ICs0MjQsNyBAQAogCQkgIF9fUEZfUkVTX0ZJRUxEIH07CiAgICAgICAgIGludCByYzsKIAotCWlmIChwZmF1bHRfZGlzYWJsZSkKKwlpZiAoIU1BQ0hJTkVfSVNfVk0gfHwgcGZhdWx0X2Rpc2FibGUpCiAJCXJldHVybiAtMTsKIAlhc20gdm9sYXRpbGUoCiAJCSIJZGlhZwklMSwlMCwweDI1OFxuIgpAQCAtNDQwLDcgKzQ0Miw3IEBACiAJcGZhdWx0X3JlZmJrX3QgcmVmYmsgPQogCXsgMHgyNTgsIDEsIDUsIDIsIDBVTEwsIDBVTEwsIDBVTEwsIDBVTEwgfTsKIAotCWlmIChwZmF1bHRfZGlzYWJsZSkKKwlpZiAoIU1BQ0hJTkVfSVNfVk0gfHwgcGZhdWx0X2Rpc2FibGUpCiAJCXJldHVybjsKIAlfX2N0bF9jbGVhcl9iaXQoMCw5KTsKIAlhc20gdm9sYXRpbGUoCkBAIC01MDAsNSArNTAyLDI1IEBACiAJCQlzZXRfdHNrX25lZWRfcmVzY2hlZCh0c2spOwogCX0KIH0KLSNlbmRpZgogCit2b2lkIF9faW5pdCBwZmF1bHRfaXJxX2luaXQodm9pZCkKK3sKKwlpZiAoIU1BQ0hJTkVfSVNfVk0pCisJCXJldHVybjsKKworCS8qCisJICogVHJ5IHRvIGdldCBwZmF1bHQgcHNldWRvIHBhZ2UgZmF1bHRzIGdvaW5nLgorCSAqLworCWlmIChyZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoMHgyNjAzLCBwZmF1bHRfaW50ZXJydXB0LAorCQkJCQkgICAgICAmZXh0X2ludF9wZmF1bHQpICE9IDApCisJCXBhbmljKCJDb3VsZG4ndCByZXF1ZXN0IGV4dGVybmFsIGludGVycnVwdCAweDI2MDMiKTsKKworCWlmIChwZmF1bHRfaW5pdCgpID09IDApCisJCXJldHVybjsKKworCS8qIFRvdWdoIGx1Y2ssIG5vIHBmYXVsdC4gKi8KKwlwZmF1bHRfZGlzYWJsZSA9IDE7CisJdW5yZWdpc3Rlcl9lYXJseV9leHRlcm5hbF9pbnRlcnJ1cHQoMHgyNjAzLCBwZmF1bHRfaW50ZXJydXB0LAorCQkJCQkgICAgJmV4dF9pbnRfcGZhdWx0KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYyBiL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKaW5kZXggOWRhYWQ3MC4uOGEyZmQxOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KIAogZXh0ZXJuIGludCBkdW1wX2ZwdShzdHJ1Y3QgcHRfcmVncyAqLCBlbGZfZnByZWdzZXRfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgbm9faXJxX3R5cGU7CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoNjQva2VybmVsL3NoX2tzeW1zLmMKaW5kZXggNGIyZGY3Mi4uN2FhNGI0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L2tlcm5lbC9zaF9rc3ltcy5jCisrKyBiL2FyY2gvc2g2NC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtMzgsNyArMzgsNyBAQAogRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKIAogLyogTmV0d29ya2luZyBoZWxwZXIgcm91dGluZXMuICovCi1FWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbF9jb3B5KTsKK0VYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayk7CiAKIEVYUE9SVF9TWU1CT0woc3Ryc3RyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2xpYi9jLWNoZWNrc3VtLmMgYi9hcmNoL3NoNjQvbGliL2MtY2hlY2tzdW0uYwppbmRleCAwZThhNzQyLi40YjI2NzYzIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbGliL2MtY2hlY2tzdW0uYworKysgYi9hcmNoL3NoNjQvbGliL2MtY2hlY2tzdW0uYwpAQCAtMTE4LDI0ICsxMTgsMjQgQEAKIAogLyogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIGEgbWVtb3J5IGJsb2NrIGF0IGJ1ZmYsIGxlbmd0aCBsZW4sCiAgICBhbmQgYWRkcyBpbiAic3VtIiAoMzItYml0KSAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0ID0gZG9fY3N1bShidWZmLCBsZW4pOwogCiAJLyogYWRkIGluIG9sZCBzdW0sIGFuZCBjYXJyeS4uICovCi0JcmVzdWx0ICs9IHN1bTsKKwlyZXN1bHQgKz0gKF9fZm9yY2UgdTMyKXN1bTsKIAkvKiAzMitjIGJpdHMgLT4gMzIgYml0cyAqLwogCXJlc3VsdCA9IChyZXN1bHQgJiAweGZmZmZmZmZmKSArIChyZXN1bHQgPj4gMzIpOwogCiAJcHJfZGVidWcoImNzdW1fcGFydGlhbCwgYnVmZiAlcCBsZW4gJWQgc3VtIDB4JXggcmVzdWx0PTB4JTAxNkx4XG4iLAogCQlidWZmLCBsZW4sIHN1bSwgcmVzdWx0KTsKIAotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSlyZXN1bHQ7CiB9CiAKIC8qIENvcHkgd2hpbGUgY2hlY2tzdW1taW5nLCBvdGhlcndpc2UgbGlrZSBjc3VtX3BhcnRpYWwuICAqLwotdW5zaWduZWQgaW50Ci1jc3VtX3BhcnRpYWxfY29weShjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAlzdW0gPSBjc3VtX3BhcnRpYWwoc3JjLCBsZW4sIHN1bSk7CiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwpAQCAtMTQ1LDkgKzE0NSw5IEBACiAKIC8qIENvcHkgZnJvbSB1c2Vyc3BhY2UgYW5kIGNvbXB1dGUgY2hlY2tzdW0uICBJZiB3ZSBjYXRjaCBhbiBleGNlcHRpb24KICAgIHRoZW4gemVybyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyLiAgKi8KLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLAotCQkJICAgIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJyX3B0cikKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCSAgICBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJaW50IG1pc3Npbmc7CiAKQEAgLTE2Niw5ICsxNjYsOSBAQAogfQogCiAvKiBDb3B5IHRvIHVzZXJzcGFjZSBhbmQgY29tcHV0ZSBjaGVja3N1bS4gICovCi11bnNpZ25lZCBpbnQKK19fd3N1bQogY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwKLQkJCSAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnJfcHRyKQorCQkJICBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJc3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgbGVuLCBzdW0pOwogCkBAIC0xODIsMjggKzE4MiwyNCBAQAogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwotdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKK19fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKIAlwcl9kZWJ1ZygiaXBfZmFzdF9jc3VtICVwLCVkXG4iLCBpcGgsIGlobCk7CiAKLQlyZXR1cm4gfmRvX2NzdW0oaXBoLCBpaGwgKiA0KTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+ZG9fY3N1bShpcGgsIGlobCAqIDQpOwogfQogCi11bnNpZ25lZCBpbnQgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJdW5zaWduZWQgbG9uZyBkYWRkciwKK19fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJdW5zaWduZWQgc2hvcnQgbGVuLAotCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQorCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyByZXN1bHQ7CiAKIAlwcl9kZWJ1ZygibnRvaHMoMHgleCk9MHgleFxuIiwgMHhkZWFkLCBudG9ocygweGRlYWQpKTsKIAlwcl9kZWJ1ZygiaHRvbnMoMHgleCk9MHgleFxuIiwgMHhkZWFkLCBodG9ucygweGRlYWQpKTsKIAotCXJlc3VsdCA9ICgodW5zaWduZWQgbG9uZyBsb25nKSBzYWRkciArCi0JCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGFkZHIgKwotCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN1bSArCi0JCSAgKCh1bnNpZ25lZCBsb25nIGxvbmcpIG50b2hzKGxlbikgPDwgMTYpICsKLQkJICAoKHVuc2lnbmVkIGxvbmcgbG9uZykgcHJvdG8gPDwgOCkpOworCXJlc3VsdCA9IChfX2ZvcmNlIHU2NCkgc2FkZHIgKyAoX19mb3JjZSB1NjQpIGRhZGRyICsKKwkJIChfX2ZvcmNlIHU2NCkgc3VtICsgKChsZW4gKyBwcm90bykgPDwgOCk7CiAKIAkvKiBGb2xkIGRvd24gdG8gMzItYml0cyBzbyB3ZSBkb24ndCBsb29zZSBpbiB0aGUgdHlwZWRlZi1sZXNzCiAJICAgbmV0d29yayBzdGFjay4gICovCkBAIC0yMTUsMTYgKzIxMSw1IEBACiAJcHJfZGVidWcoIiVzIHNhZGRyICV4IGRhZGRyICV4IGxlbiAleCBwcm90byAleCBzdW0gJXggcmVzdWx0ICUwOEx4XG4iLAogCQlfX0ZVTkNUSU9OX18sIHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtLCByZXN1bHQpOwogCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gUG9zdCBTSU06Ci11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCi17Ci0JLy8gIHVuc2lnbmVkIGR1bW15OwotCXByX2RlYnVnKCJjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIHNyYyAlcCBkc3QgJXAgbGVuICVkXG4iLCBzcmMsIGRzdCwKLQkJbGVuKTsKLQotCXJldHVybiBjc3VtX3BhcnRpYWxfY29weShzcmMsIGRzdCwgbGVuLCBzdW0pOworCXJldHVybiAoX193c3VtKXJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9jaGVja3N1bS5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2NoZWNrc3VtLmgKaW5kZXggMDUyYmIwNi4uMGNiNDY0NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2NoZWNrc3VtLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2NoZWNrc3VtLmgKQEAgLTIwLDggKzIwLDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgCi0JCQkgIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqCU5vdGU6IHdoZW4geW91IGdldCBhIE5VTEwgcG9pbnRlciBleGNlcHRpb24gaGVyZSB0aGlzIG1lYW5zIHNvbWVvbmUKQEAgLTMyLDggKzMxLDggQEAKICAqLwogCiBzdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkJICAgICAgIGludCBsZW4sIGludCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkgICAgICAgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAltZW1jcHkoZHN0LCBzcmMsIGxlbik7CiAJcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKQEAgLTQ4LDM2ICs0NywyNSBAQAogICovCiAKIHN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsCi0JCQkJCSB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkJCSBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqZXJyX3B0cikKIHsKLQlpZihjb3B5X2Zyb21fdXNlcihkc3QsIHNyYywgbGVuKSl7CisJaWYgKGNvcHlfZnJvbV91c2VyKGRzdCwgc3JjLCBsZW4pKSB7CiAJCSplcnJfcHRyID0gLUVGQVVMVDsKLQkJcmV0dXJuKC0xKTsKKwkJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSktMTsKIAl9CiAKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRzdCwgbGVuLCBzdW0pOwogfQogCiAvKgotICogVGhlc2UgYXJlIHRoZSBvbGQgKGFuZCB1bnNhZmUpIHdheSBvZiBkb2luZyBjaGVja3N1bXMsIGEgd2FybmluZyBtZXNzYWdlIAotICogd2lsbCBiZSBwcmludGVkIGlmIHRoZXkgYXJlIHVzZWQgYW5kIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCi0gKgotICogdGhlc2UgZnVuY3Rpb25zIHNob3VsZCBnbyBhd2F5IGFmdGVyIHNvbWUgdGltZS4KLSAqLwotCi0jZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X2Zyb211c2VyIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcgotCi0vKgogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqCiAgKglCeSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQgZm9yIGxpbnV4IGJ5CiAgKglBcm50IEd1bGJyYW5kc2VuLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLAotCQkJCQkgIHVuc2lnbmVkIGludCBpaGwpCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKIAl1bnNpZ25lZCBpbnQgc3VtOwogCkBAIC0xMDUsMjkgKzkzLDI5IEBACiAJOiAiPXIiIChzdW0pLCAiPXIiIChpcGgpLCAiPXIiIChpaGwpCiAJOiAiMSIgKGlwaCksICIyIiAoaWhsKQogCTogIm1lbW9yeSIpOwotCXJldHVybiBzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fKAogCQkiYWRkbCAlMSwgJTAJCTtcbiIKIAkJImFkY2wgJDB4ZmZmZiwgJTAJO1xuIgogCQk6ICI9ciIgKHN1bSkKLQkJOiAiciIgKHN1bSA8PCAxNiksICIwIiAoc3VtICYgMHhmZmZmMDAwMCkKKwkJOiAiciIgKChfX2ZvcmNlIHUzMilzdW0gPDwgMTYpLAorCQkgICIwIiAoKF9fZm9yY2UgdTMyKXN1bSAmIDB4ZmZmZjAwMDApCiAJKTsKLQlyZXR1cm4gKH5zdW0pID4+IDE2OworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSh+KF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCisJCQkJCQkgICBfX3dzdW0gc3VtKQogewogICAgIF9fYXNtX18oCiAJImFkZGwgJTEsICUwCTtcbiIKQEAgLTEzNSw3ICsxMjMsNyBAQAogCSJhZGNsICUzLCAlMAk7XG4iCiAJImFkY2wgJDAsICUwCTtcbiIKIAk6ICI9ciIgKHN1bSkKLQk6ICJnIiAoZGFkZHIpLCAiZyIoc2FkZHIpLCAiZyIoKG50b2hzKGxlbik8PDE2KStwcm90byoyNTYpLCAiMCIoc3VtKSk7CisJOiAiZyIgKGRhZGRyKSwgImciKHNhZGRyKSwgImciKChsZW4gKyBwcm90bykgPDwgOCksICIwIihzdW0pKTsKICAgICByZXR1cm4gc3VtOwogfQogCkBAIC0xNDMsMTEgKzEzMSwxMCBAQAogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQorCQkJCQkJICAgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7CiB9CkBAIC0xNTcsMTcgKzE0NCwxNiBAQAogICogaW4gaWNtcC5jCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCiB7CiAgICAgcmV0dXJuIGNzdW1fZm9sZCAoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOwogfQogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJCQkgICAgIF9fdTMyIGxlbiwKLQkJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICBfX3dzdW0gc3VtKQogewogCV9fYXNtX18oCiAJCSJhZGRsIDAoJTEpLCAlMAkJO1xuIgpAQCAtMTkyLDE0ICsxNzgsMTQgQEAKICAqCUNvcHkgYW5kIGNoZWNrc3VtIHRvIHVzZXIKICAqLwogI2RlZmluZSBIQVZFX0NTVU1fQ09QWV9VU0VSCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJCQkJCSAgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwKLQkJCQkJCSAgICAgaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKQorc3RhdGljIF9faW5saW5lX18gX193c3VtIGNzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsCisJCQkJCQkgICAgIHZvaWQgX191c2VyICpkc3QsCisJCQkJCQkgICAgIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqZXJyX3B0cikKIHsKLQlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgZHN0LCBsZW4pKXsKLQkJaWYoY29weV90b191c2VyKGRzdCwgc3JjLCBsZW4pKXsKKwlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgZHN0LCBsZW4pKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIGxlbikpIHsKIAkJCSplcnJfcHRyID0gLUVGQVVMVDsKLQkJCXJldHVybigtMSk7CisJCQlyZXR1cm4gKF9fZm9yY2UgX193c3VtKS0xOwogCQl9CiAKIAkJcmV0dXJuIGNzdW1fcGFydGlhbChzcmMsIGxlbiwgc3VtKTsKQEAgLTIwOCw3ICsxOTQsNyBAQAogCWlmIChsZW4pCiAJCSplcnJfcHRyID0gLUVGQVVMVDsKIAotCXJldHVybiAtMTsgLyogaW52YWxpZCBjaGVja3N1bSAqLworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9jaGVja3N1bS5oIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvY2hlY2tzdW0uaAppbmRleCBlYTk3MDA1Li5hNWJlOTAzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9jaGVja3N1bS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2NoZWNrc3VtLmgKQEAgLTksOCArOSw3IEBACiAjaW5jbHVkZSAibGludXgvaW42LmgiCiAjaW5jbHVkZSAiYXNtL3VhY2Nlc3MuaCIKIAotZXh0ZXJuIHVuc2lnbmVkIGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmLCB1bnNpZ25lZCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqCU5vdGU6IHdoZW4geW91IGdldCBhIE5VTEwgcG9pbnRlciBleGNlcHRpb24gaGVyZSB0aGlzIG1lYW5zIHNvbWVvbmUKQEAgLTIxLDIxICsyMCwyMSBAQAogICovCiAKIHN0YXRpYyBfX2lubGluZV9fCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkgICAgICAgaW50IGxlbiwgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCSAgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCW1lbWNweShkc3QsIHNyYywgbGVuKTsKIAlyZXR1cm4oY3N1bV9wYXJ0aWFsKGRzdCwgbGVuLCBzdW0pKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnJfcHRyKQogewotICAgICAgICBpZihjb3B5X2Zyb21fdXNlcihkc3QsIHNyYywgbGVuKSl7CisgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihkc3QsIHNyYywgbGVuKSkgewogICAgICAgICAgICAgICAgICplcnJfcHRyID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoX19mb3JjZSBfX3dzdW0pLTE7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKIH0KQEAgLTQ4LDE1ICs0NywxNiBAQAogICogdGhlIGxhc3Qgc3RlcCBiZWZvcmUgcHV0dGluZyBhIGNoZWNrc3VtIGludG8gYSBwYWNrZXQuCiAgKiBNYWtlIHN1cmUgbm90IHRvIG1peCB3aXRoIDY0Yml0IGNoZWNrc3Vtcy4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkJIiAgYWRkbCAlMSwlMFxuIgogCQkiICBhZGNsICQweGZmZmYsJTAiCiAJCTogIj1yIiAoc3VtKQotCQk6ICJyIiAoc3VtIDw8IDE2KSwgIjAiIChzdW0gJiAweGZmZmYwMDAwKQorCQk6ICJyIiAoKF9fZm9yY2UgdTMyKXN1bSA8PCAxNiksCisJCSAgIjAiICgoX19mb3JjZSB1MzIpc3VtICYgMHhmZmZmMDAwMCkKIAkpOwotCXJldHVybiAofnN1bSkgPj4gMTY7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpKH4oX19mb3JjZSB1MzIpc3VtID4+IDE2KTsKIH0KIAogLyoqCkBAIC03MCwyOCArNzAsMjcgQEAKICAqIFJldHVybnMgdGhlIHBzZXVkbyBoZWFkZXIgY2hlY2tzdW0gdGhlIGlucHV0IGRhdGEuIFJlc3VsdCBpcwogICogMzJiaXQgdW5mb2xkZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIHNhZGRyLCB1bnNpZ25lZCBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX193c3VtCitjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJYXNtKCIgIGFkZGwgJTEsICUwXG4iCiAJICAgICIgIGFkY2wgJTIsICUwXG4iCiAJICAgICIgIGFkY2wgJTMsICUwXG4iCiAJICAgICIgIGFkY2wgJDAsICUwXG4iCiAJCTogIj1yIiAoc3VtKQotCSAgICA6ICJnIiAoZGFkZHIpLCAiZyIgKHNhZGRyKSwgImciICgobnRvaHMobGVuKTw8MTYpK3Byb3RvKjI1NiksICIwIiAoc3VtKSk7Ci0gICAgcmV0dXJuIHN1bTsKKwkgICAgOiAiZyIgKGRhZGRyKSwgImciIChzYWRkciksICJnIiAoKGxlbiArIHByb3RvKSA8PCA4KSwgIjAiIChzdW0pKTsKKwlyZXR1cm4gc3VtOwogfQogCiAvKgogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTEwMSw3ICsxMDAsNyBAQAogICogaXBoOiBpcHY0IGhlYWRlcgogICogaWhsOiBsZW5ndGggb2YgaGVhZGVyIC8gNAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICppcGgsIHVuc2lnbmVkIGludCBpaGwpCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKIAl1bnNpZ25lZCBpbnQgc3VtOwogCkBAIC0xMjgsNyArMTI3LDcgQEAKIAk6ICI9ciIgKHN1bSksICI9ciIgKGlwaCksICI9ciIgKGlobCkKIAk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCiAJOiAibWVtb3J5Iik7Ci0JcmV0dXJuKHN1bSk7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFkZDMyX3dpdGhfY2FycnkodW5zaWduZWQgYSwgdW5zaWduZWQgYikKQEAgLTE0MCw2ICsxMzksNiBAQAogICAgICAgICByZXR1cm4gYTsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbik7CitleHRlcm4gX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMgYi9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYwppbmRleCA2N2JjNDhlLi45MzU3NWZkIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3Y4NTBfa3N5bXMuYwpAQCAtMjQsNyArMjQsNyBAQAogRVhQT1JUX1NZTUJPTCAoX19idWcpOwogCiAvKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KLUVYUE9SVF9TWU1CT0wgKGNzdW1fcGFydGlhbF9jb3B5KTsKK0VYUE9SVF9TWU1CT0wgKGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2spOwogRVhQT1JUX1NZTUJPTCAoY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKTsKIEVYUE9SVF9TWU1CT0wgKGlwX2NvbXB1dGVfY3N1bSk7CiBFWFBPUlRfU1lNQk9MIChpcF9mYXN0X2NzdW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2xpYi9jaGVja3N1bS5jIGIvYXJjaC92ODUwL2xpYi9jaGVja3N1bS5jCmluZGV4IGZhNTg3MjYuLjA0MjE1OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9saWIvY2hlY2tzdW0uYworKysgYi9hcmNoL3Y4NTAvbGliL2NoZWNrc3VtLmMKQEAgLTg4LDMyICs4OCwzMiBAQAogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwotdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpCitfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7Ci0JcmV0dXJuIH5kb19jc3VtKGlwaCxpaGwqNCk7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfmRvX2NzdW0oaXBoLGlobCo0KTsKIH0KIAogLyoKICAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKICAqIGluIGljbXAuYwogICovCi11bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewotCXJldHVybiB+ZG9fY3N1bShidWZmLGxlbik7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfmRvX2NzdW0oYnVmZixsZW4pOwogfQogCiAvKgogICogY29tcHV0ZXMgYSBwYXJ0aWFsIGNoZWNrc3VtLCBlLmcuIGZvciBUQ1AvVURQIGZyYWdtZW50cwogICovCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IGRvX2NzdW0oYnVmZiwgbGVuKTsKIAogCS8qIGFkZCBpbiBvbGQgc3VtLCBhbmQgY2FycnkuLiAqLwotCXJlc3VsdCArPSBzdW07Ci0JaWYoc3VtID4gcmVzdWx0KQorCXJlc3VsdCArPSAoX19mb3JjZSB1MzIpc3VtOworCWlmICgoX19mb3JjZSB1MzIpc3VtID4gcmVzdWx0KQogCQlyZXN1bHQgKz0gMTsKLQlyZXR1cm4gcmVzdWx0OworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmVzdWx0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1fcGFydGlhbCk7CkBAIC0xMjEsOCArMTIxLDggQEAKIC8qCiAgKiBjb3B5IHdoaWxlIGNoZWNrc3VtbWluZywgb3RoZXJ3aXNlIGxpa2UgY3N1bV9wYXJ0aWFsCiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weShjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAkvKgogCSAqIEl0J3MgMjozMCBhbSBhbmQgSSBkb24ndCBmZWVsIGxpa2UgZG9pbmcgaXQgcmVhbCAuLi4KQEAgLTEzOCw5ICsxMzgsOSBAQAogICogQ29weSBmcm9tIHVzZXJzcGFjZSBhbmQgY29tcHV0ZSBjaGVja3N1bS4gIElmIHdlIGNhdGNoIGFuIGV4Y2VwdGlvbgogICogdGhlbiB6ZXJvIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuCiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJCQkJICB1bnNpZ25lZCBjaGFyICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLAorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3Qgdm9pZCAqc3JjLAorCQkJCQkgIHZvaWQgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVycl9wdHIpCiB7CiAJaW50IG1pc3Npbmc7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9saWIvY3N1bS1wYXJ0aWFsLmMgYi9hcmNoL3g4Nl82NC9saWIvY3N1bS1wYXJ0aWFsLmMKaW5kZXggYzQ5MzczNS4uMDZhZTYzMCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbGliL2NzdW0tcGFydGlhbC5jCisrKyBiL2FyY2gveDg2XzY0L2xpYi9jc3VtLXBhcnRpYWwuYwpAQCAtMTMyLDkgKzEzMiwxMCBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeQogICovCi11bnNpZ25lZCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZiwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7Ci0JcmV0dXJuIGFkZDMyX3dpdGhfY2FycnkoZG9fY3N1bShidWZmLCBsZW4pLCBzdW0pOyAKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKWFkZDMyX3dpdGhfY2FycnkoZG9fY3N1bShidWZmLCBsZW4pLAorCQkJCQkJKF9fZm9yY2UgdTMyKXN1bSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKQEAgLTE0Myw3ICsxNDQsNyBAQAogICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQogICogaW4gaWNtcC5jCiAgKi8KLXVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK19fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZixsZW4sMCkpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbGliL2NzdW0td3JhcHBlcnMuYyBiL2FyY2gveDg2XzY0L2xpYi9jc3VtLXdyYXBwZXJzLmMKaW5kZXggYjEzMjBlYy4uZmQ0MmE0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbGliL2NzdW0td3JhcHBlcnMuYworKysgYi9hcmNoL3g4Nl82NC9saWIvY3N1bS13cmFwcGVycy5jCkBAIC0xOCw5ICsxOCw5IEBACiAgKiBSZXR1cm5zIGFuIDMyYml0IHVuZm9sZGVkIGNoZWNrc3VtIG9mIHRoZSBidWZmZXIuCiAgKiBzcmMgYW5kIGRzdCBhcmUgYmVzdCBhbGlnbmVkIHRvIDY0Yml0cy4gCiAgKi8gCi11bnNpZ25lZCBpbnQgCi1jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBpc3VtLCBpbnQgKmVycnApCitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkgICAgaW50IGxlbiwgX193c3VtIGlzdW0sIGludCAqZXJycCkKIHsgCiAJbWlnaHRfc2xlZXAoKTsKIAkqZXJycCA9IDA7CkBAIC0zNCwxNyArMzQsMTkgQEAKIAkJaWYgKHVubGlrZWx5KCh1bnNpZ25lZCBsb25nKXNyYyAmIDYpKSB7CQkJCiAJCQl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKXNyYyAmIDYpICYmIGxlbiA+PSAyKSB7IAogCQkJCV9fdTE2IHZhbDE2OwkJCQotCQkJCSplcnJwID0gX19nZXRfdXNlcih2YWwxNiwgKF9fdTE2IF9fdXNlciAqKXNyYyk7IAorCQkJCSplcnJwID0gX19nZXRfdXNlcih2YWwxNiwgKGNvbnN0IF9fdTE2IF9fdXNlciAqKXNyYyk7CiAJCQkJaWYgKCplcnJwKQogCQkJCQlyZXR1cm4gaXN1bTsKIAkJCQkqKF9fdTE2ICopZHN0ID0gdmFsMTY7Ci0JCQkJaXN1bSA9IGFkZDMyX3dpdGhfY2FycnkoaXN1bSwgdmFsMTYpOyAKKwkJCQlpc3VtID0gKF9fZm9yY2UgX193c3VtKWFkZDMyX3dpdGhfY2FycnkoCisJCQkJCQkoX19mb3JjZSB1bnNpZ25lZClpc3VtLCB2YWwxNik7CiAJCQkJc3JjICs9IDI7IAogCQkJCWRzdCArPSAyOyAKIAkJCQlsZW4gLT0gMjsKIAkJCX0KIAkJfQotCQlpc3VtID0gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoX19mb3JjZSB2b2lkICopc3JjLGRzdCxsZW4saXN1bSxlcnJwLE5VTEwpOworCQlpc3VtID0gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoX19mb3JjZSBjb25zdCB2b2lkICopc3JjLAorCQkJCQlkc3QsIGxlbiwgaXN1bSwgZXJycCwgTlVMTCk7CiAJCWlmIChsaWtlbHkoKmVycnAgPT0gMCkpIAogCQkJcmV0dXJuIGlzdW07CiAJfSAKQEAgLTY2LDkgKzY4LDkgQEAKICAqIFJldHVybnMgYW4gMzJiaXQgdW5mb2xkZWQgY2hlY2tzdW0gb2YgdGhlIGJ1ZmZlci4KICAqIHNyYyBhbmQgZHN0IGFyZSBiZXN0IGFsaWduZWQgdG8gNjRiaXRzLgogICovIAotdW5zaWduZWQgaW50IAotY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcih1bnNpZ25lZCBjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsCi0JCQkgIGludCBsZW4sIHVuc2lnbmVkIGludCBpc3VtLCBpbnQgKmVycnApCitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLCB2b2lkIF9fdXNlciAqZHN0LAorCQkJICBpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKQogeyAKIAltaWdodF9zbGVlcCgpOwogCWlmICh1bmxpa2VseSghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZHN0LCBsZW4pKSkgewpAQCAtNzksNyArODEsOCBAQAogCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylkc3QgJiA2KSkgewogCQl3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWRzdCAmIDYpICYmIGxlbiA+PSAyKSB7IAogCQkJX191MTYgdmFsMTYgPSAqKF9fdTE2ICopc3JjOwotCQkJaXN1bSA9IGFkZDMyX3dpdGhfY2FycnkoaXN1bSwgdmFsMTYpOworCQkJaXN1bSA9IChfX2ZvcmNlIF9fd3N1bSlhZGQzMl93aXRoX2NhcnJ5KAorCQkJCQkoX19mb3JjZSB1bnNpZ25lZClpc3VtLCB2YWwxNik7CiAJCQkqZXJycCA9IF9fcHV0X3VzZXIodmFsMTYsIChfX3UxNiBfX3VzZXIgKilkc3QpOwogCQkJaWYgKCplcnJwKQogCQkJCXJldHVybiBpc3VtOwpAQCAtMTA0LDE5ICsxMDcsMjEgQEAKICAqIAogICogUmV0dXJucyBhbiAzMmJpdCB1bmZvbGRlZCBjaGVja3N1bSBvZiB0aGUgYnVmZmVyLgogICovIAotdW5zaWduZWQgaW50IAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsgCiAJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLGRzdCxsZW4sc3VtLE5VTEwsTlVMTCk7CiB9IAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKTsKIAotdW5zaWduZWQgc2hvcnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkgICAgICAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkgCitfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCV9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJX191NjQgcmVzdCwgc3VtNjQ7CiAgICAgIAotCXJlc3QgPSAoX191NjQpaHRvbmwobGVuKSArIChfX3U2NClodG9ucyhwcm90bykgKyAoX191NjQpc3VtOworCXJlc3QgPSAoX19mb3JjZSBfX3U2NClodG9ubChsZW4pICsgKF9fZm9yY2UgX191NjQpaHRvbnMocHJvdG8pICsKKwkJKF9fZm9yY2UgX191NjQpc3VtOwogCWFzbSgiICBhZGRxICglW3NhZGRyXSksJVtzdW1dXG4iCiAJICAgICIgIGFkY3EgOCglW3NhZGRyXSksJVtzdW1dXG4iCiAJICAgICIgIGFkY3EgKCVbZGFkZHJdKSwlW3N1bV1cbiIgCkBAIC0xMjQsNyArMTI5LDcgQEAKIAkgICAgIiAgYWRjcSAkMCwlW3N1bV1cbiIKIAkgICAgOiBbc3VtXSAiPXIiIChzdW02NCkgCiAJICAgIDogIltzdW1dIiAocmVzdCksW3NhZGRyXSAiciIgKHNhZGRyKSwgW2RhZGRyXSAiciIgKGRhZGRyKSk7Ci0JcmV0dXJuIGNzdW1fZm9sZChhZGQzMl93aXRoX2NhcnJ5KHN1bTY0ICYgMHhmZmZmZmZmZiwgc3VtNjQ+PjMyKSk7CisJcmV0dXJuIGNzdW1fZm9sZCgoX19mb3JjZSBfX3dzdW0pYWRkMzJfd2l0aF9jYXJyeShzdW02NCAmIDB4ZmZmZmZmZmYsIHN1bTY0Pj4zMikpOwogfQogCiBFWFBPUlRfU1lNQk9MKGNzdW1faXB2Nl9tYWdpYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCA1NzhiOTliLi5iZjViNzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jIGIvZHJpdmVycy9hdG0vYW1iYXNzYWRvci5jCmluZGV4IDlmZmZhN2EuLmFmYTdkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2FtYmFzc2Fkb3IuYworKysgYi9kcml2ZXJzL2F0bS9hbWJhc3NhZG9yLmMKQEAgLTk3Miw3ICs5NzIsNyBAQAogICAgICAgfQogICAgICAgY2FzZSByb3VuZF91cDogewogCS8vIGNoZWNrIGFsbCBiaXRzIHRoYXQgd2UgYXJlIGRpc2NhcmRpbmcKLQlpZiAobWFuICYgKC0xPj45KSkgeworCWlmIChtYW4gJiAofjBVPj45KSkgewogCSAgbWFuID0gKG1hbj4+KDMyLTkpKSArIDE7CiAJICBpZiAobWFuID09ICgxPDw5KSkgewogCSAgICAvLyBubyBuZWVkIHRvIGNoZWNrIGZvciByb3VuZCB1cCBvdXRzaWRlIG9mIHJhbmdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKaW5kZXggNjk3YWQ4Mi4uOWM2N2RmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCisrKyBiL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAJCX0KIAkJY2FzZSBST1VORF9VUDogewogCQkJLyogY2hlY2sgYWxsIGJpdHMgdGhhdCB3ZSBhcmUgZGlzY2FyZGluZyAqLwotCQkJaWYgKG1hbiAmICgtMT4+OSkpIHsKKwkJCWlmIChtYW4gJiAofjBVPj45KSkgewogCQkJCW1hbiA9IChtYW4+PigzMi05KSkgKyAxOwogCQkJCWlmIChtYW4gPT0gKDE8PDkpKSB7CiAJCQkJCS8qIG5vIG5lZWQgdG8gY2hlY2sgZm9yIHJvdW5kIHVwIG91dHNpZGUgb2YgcmFuZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jcHUuYyBiL2RyaXZlcnMvYmFzZS9jcHUuYwppbmRleCA0YmVmNzZhLi4xZjc0NWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvY3B1LmMKKysrIGIvZHJpdmVycy9iYXNlL2NwdS5jCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IGFkOGI1MzcuLjI0ZjkyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC04NTUsMzkgKzg1NSw2IEBACiAJZGVwZW5kcyBUQU5CQUNfVEIwMjJYCiAJc2VsZWN0IEdQSU9fVlI0MVhYCiAKLW1lbnUgIkZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlciIKLQotY29uZmlnIEZUQVBFCi0JdHJpc3RhdGUgIkZ0YXBlIChRSUMtODAvVHJhdmFuKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQlJPS0VOX09OX1NNUCAmJiAoQUxQSEEgfHwgWDg2KQotCS0tLWhlbHAtLS0KLQkgIElmIHlvdSBoYXZlIGEgdGFwZSBkcml2ZSB0aGF0IGlzIGNvbm5lY3RlZCB0byB5b3VyIGZsb3BweQotCSAgY29udHJvbGxlciwgc2F5IFkgaGVyZS4KLQotCSAgU29tZSB0YXBlIGRyaXZlcyAobGlrZSB0aGUgU2VhZ2F0ZSAiVGFwZSBTdG9yZSAzMjAwIiBvciB0aGUgSW9tZWdhCi0JICAiRGl0dG8gMzIwMCIgb3IgdGhlIEV4YWJ5dGUgIkVhZ2xlIFRSLTMiKSBjb21lIHdpdGggYSAiaGlnaCBzcGVlZCIKLQkgIGNvbnRyb2xsZXIgb2YgdGhlaXIgb3duLiBUaGVzZSBkcml2ZXMgKGFuZCB0aGVpciBjb21wYW5pb24KLQkgIGNvbnRyb2xsZXJzKSBhcmUgYWxzbyBzdXBwb3J0ZWQgaWYgeW91IHNheSBZIGhlcmUuCi0KLQkgIElmIHlvdSBoYXZlIGEgc3BlY2lhbCBjb250cm9sbGVyIChzdWNoIGFzIHRoZSBDTVMgRkMtMTAsIEZDLTIwLAotCSAgTW91bnRhaW4gTWFjaC1JSSwgb3IgYW55IGNvbnRyb2xsZXIgdGhhdCBpcyBiYXNlZCBvbiB0aGUgSW50ZWwgODIwNzgKLQkgIEZEQyBsaWtlIHRoZSBoaWdoIHNwZWVkIGNvbnRyb2xsZXJzIGJ5IFNlYWdhdGUgYW5kIEV4YWJ5dGUgYW5kCi0JICBJb21lZ2EncyAiRGl0dG8gRGFzaCIpIHlvdSBtdXN0IGNvbmZpZ3VyZSBpdCBieSBzZWxlY3RpbmcgdGhlCi0JICBhcHByb3ByaWF0ZSBlbnRyaWVzIGZyb20gdGhlICJGbG9wcHkgdGFwZSBjb250cm9sbGVycyIgc3ViLW1lbnUKLQkgIGJlbG93IGFuZCBwb3NzaWJseSBtb2RpZnkgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgSVJRIGFuZCBETUEKLQkgIGNoYW5uZWwgYW5kIHRoZSBJTyBiYXNlIGluIGZ0YXBlJ3MgY29uZmlndXJhdGlvbiBtZW51LgotCi0JICBJZiB5b3Ugd2FudCB0byB1c2UgeW91ciBmbG9wcHkgdGFwZSBkcml2ZSBvbiBhIFBDSS1idXMgYmFzZWQgc3lzdGVtLAotCSAgcGxlYXNlIHJlYWQgdGhlIGZpbGUgPGZpbGU6ZHJpdmVycy9jaGFyL2Z0YXBlL1JFQURNRS5QQ0k+LgotCi0JICBUaGUgZnRhcGUga2VybmVsIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIHJ1bnRpbWUgbG9hZGFibGUKLQkgIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnRhcGUuCi0KLXNvdXJjZSAiZHJpdmVycy9jaGFyL2Z0YXBlL0tjb25maWciCi0KLWVuZG1lbnUKLQogc291cmNlICJkcml2ZXJzL2NoYXIvYWdwL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9jaGFyL2RybS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDc3N2NhZDAuLmIxZmNkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKQEAgLTc4LDcgKzc4LDYgQEAKIG9iai0kKENPTkZJR19JOEspCQkrPSBpOGsubwogb2JqLSQoQ09ORklHX0RTMTYyMCkJCSs9IGRzMTYyMC5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NKQkJKz0gaHdfcmFuZG9tLwotb2JqLSQoQ09ORklHX0ZUQVBFKQkJKz0gZnRhcGUvCiBvYmotJChDT05GSUdfQ09CQUxUX0xDRCkJKz0gbGNkLm8KIG9iai0kKENPTkZJR19QUERFVikJCSs9IHBwZGV2Lm8KIG9iai0kKENPTkZJR19OV0JVVFRPTikJCSs9IG53YnV0dG9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2Z0YXBlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNjUxODkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotIwotIyBGdGFwZSBjb25maWd1cmF0aW9uCi0jCi1jb25maWcgWkZUQVBFCi0JdHJpc3RhdGUgIlpmdGFwZSwgdGhlIFZGUyBpbnRlcmZhY2UiCi0JZGVwZW5kcyBvbiBGVEFQRQotCS0tLWhlbHAtLS0KLQkgIE5vcm1hbGx5LCB5b3Ugd2FudCB0byBzYXkgWSBvciBNLiBET04nVCBzYXkgTiBoZXJlIG9yIHlvdQotCSAgV09OJ1QgQkUgQUJMRSBUTyBVU0UgWU9VUiBGTE9QUFkgVEFQRSBEUklWRS4KLQotCSAgVGhlIGZ0YXBlIG1vZHVsZSBpdHNlbGYgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSByb3V0aW5lcyBuZWNlc3NhcnkKLQkgIHRvIGludGVyZmFjZSB3aXRoIHRoZSBrZXJuZWwgVkZTIGxheWVyIChpLmUuIHRvIGFjdHVhbGx5IHdyaXRlIGRhdGEKLQkgIHRvIGFuZCByZWFkIGRhdGEgZnJvbSB0aGUgdGFwZSBkcml2ZSkuICBJbnN0ZWFkIHRoZSBmaWxlIHN5c3RlbQotCSAgaW50ZXJmYWNlIChpLmUuIHRoZSBoYXJkd2FyZSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBkcml2ZXIpIGhhcwotCSAgYmVlbiBtb3ZlZCB0byBhIHNlcGFyYXRlIG1vZHVsZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgemZ0YXBlLgotCi0JICBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgeW91IHNheSBZIG9yIE0gaGVyZSwgYW4gYWRkaXRpb25hbCBydW50aW1lCi0JICBsb2FkYWJsZSBtb2R1bGUgY2FsbGVkIGB6ZnQtY29tcHJlc3Nvcicgd2hpY2ggY29udGFpbnMgY29kZSB0bwotCSAgc3VwcG9ydCB1c2VyIHRyYW5zcGFyZW50IG9uLXRoZS1mbHkgY29tcHJlc3Npb24gYmFzZWQgb24gUm9zcwotCSAgV2lsbGlhbSdzIGx6cnczIGFsZ29yaXRobSB3aWxsIGJlIHByb2R1Y2VkLiAgSWYgeW91IGhhdmUgZW5hYmxlZCB0aGUKLQkgIGtlcm5lbCBtb2R1bGUgbG9hZGVyIChpLmUuIGhhdmUgc2FpZCBZIHRvICJLZXJuZWwgbW9kdWxlIGxvYWRlcgotCSAgc3VwcG9ydCIsIGFib3ZlKSB0aGVuIGB6ZnQtY29tcHJlc3Nvcicgd2lsbCBiZSBsb2FkZWQKLQkgIGF1dG9tYXRpY2FsbHkgYnkgemZ0YXBlIHdoZW4gbmVlZGVkLgotCi0JICBEZXNwaXRlIGl0cyBuYW1lLCB6ZnRhcGUgZG9lcyBOT1QgdXNlIGNvbXByZXNzaW9uIGJ5IGRlZmF1bHQuCi0KLWNvbmZpZyBaRlRfREZMVF9CTEtfU1oKLQlpbnQgIkRlZmF1bHQgYmxvY2sgc2l6ZSIKLQlkZXBlbmRzIG9uIFpGVEFQRQotCWRlZmF1bHQgIjEwMjQwIgotCS0tLWhlbHAtLS0KLQkgIElmIHVuc3VyZSBsZWF2ZSB0aGlzIGF0IGl0cyBkZWZhdWx0IHZhbHVlLCBpLmUuIDEwMjQwLiBOb3RlIHRoYXQKLQkgIHlvdSBzcGVjaWZ5IG9ubHkgdGhlIGRlZmF1bHQgYmxvY2sgc2l6ZSBoZXJlLiBUaGUgYmxvY2sgc2l6ZSBjYW4gYmUKLQkgIGNoYW5nZWQgYXQgcnVuIHRpbWUgdXNpbmcgdGhlIE1UU0VUQkxLIHRhcGUgb3BlcmF0aW9uIHdpdGggdGhlCi0JICBNVElPQ1RPUCBpb2N0bCAoaS5lLiB3aXRoICJtdCAtZiAvZGV2L3FmdDAgc2V0YmxrICNCTEtTWiIgZnJvbSB0aGUKLQkgIHNoZWxsIGNvbW1hbmQgbGluZSkuCi0KLQkgIFRoZSBwcm9iYWJseSBtb3N0IHN0cmlraW5nIGRpZmZlcmVuY2UgYmV0d2VlbiB6ZnRhcGUgYW5kIHByZXZpb3VzCi0JICB2ZXJzaW9ucyBvZiBmdGFwZSBpcyB0aGUgZmFjdCB0aGF0IGFsbCBkYXRhIG11c3QgYmUgd3JpdHRlbiBvciByZWFkCi0JICBpbiBtdWx0aXBsZXMgb2YgYSBmaXhlZCBibG9jayBzaXplLiBUaGUgYmxvY2sgc2l6ZSBkZWZhdWx0cyB0bwotCSAgMTAyNDAgd2hpY2ggaXMgd2hhdCBHTlUgdGFyIHVzZXMuIFRoZSB2YWx1ZXMgZm9yIHRoZSBibG9jayBzaXplCi0JICBzaG91bGQgYmUgZWl0aGVyIDEgb3IgbXVsdGlwbGVzIG9mIDEwMjQgdXAgdG8gYSBtYXhpbXVtIHZhbHVlIG9mCi0JICA2MzQ4OCAoaS5lLiA2MiBLKS4gSWYgeW91IHNwZWNpZnkgYDEnIHRoZW4gemZ0YXBlJ3MgYnVpbHRpbgotCSAgY29tcHJlc3Npb24gd2lsbCBiZSBkaXNhYmxlZC4KLQotCSAgUmVhc29uYWJsZSB2YWx1ZXMgYXJlIGAxMDI0MCcgKEdOVSB0YXIncyBkZWZhdWx0IGJsb2NrIHNpemUpLAotCSAgYDUxMjAnIChhZmlvJ3MgZGVmYXVsdCBibG9jayBzaXplKSwgYDMyNzY4JyAoZGVmYXVsdCBibG9jayBzaXplIHNvbWUKLQkgIGJhY2t1cCBwcm9ncmFtcyBhc3N1bWUgZm9yIFNDU0kgdGFwZSBkcml2ZXMpIG9yIGAxJyAobm8gcmVzdHJpY3Rpb24KLQkgIG9uIGJsb2NrIHNpemUsIGJ1dCBkaXNhYmxlcyBidWlsdGluIGNvbXByZXNzaW9uKS4KLQotY29tbWVudCAiVGhlIGNvbXByZXNzb3Igd2lsbCBiZSBidWlsdCBhcyBhIG1vZHVsZSBvbmx5ISIKLQlkZXBlbmRzIG9uIEZUQVBFICYmIFpGVEFQRQotCi1jb25maWcgWkZUX0NPTVBSRVNTT1IKLQl0cmlzdGF0ZQotCWRlcGVuZHMgb24gRlRBUEUhPW4gJiYgWkZUQVBFIT1uCi0JZGVmYXVsdCBtCi0KLWNvbmZpZyBGVF9OUl9CVUZGRVJTCi0JaW50ICJOdW1iZXIgb2YgZnRhcGUgYnVmZmVycyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEZUQVBFICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgIjMiCi0JaGVscAotCSAgUGxlYXNlIGxlYXZlIHRoaXMgYXQgYDMnIHVubGVzcyB5b3UgUkVBTExZIGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgotCSAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4gVmFsdWVzIGJlbG93IDMgbWFrZSB0aGUKLQkgIHByb3BlciB1c2Ugb2YgZnRhcGUgaW1wb3NzaWJsZSwgdmFsdWVzIGdyZWF0ZXIgdGhhbiAzIGFyZSBhIHdhc3RlIG9mCi0JICBtZW1vcnkuIFlvdSBjYW4gY2hhbmdlIHRoZSBhbW91bnQgb2YgRE1BIG1lbW9yeSB1c2VkIGJ5IGZ0YXBlIGF0Ci0JICBydW50aW1lIHdpdGggIm10IC1mIC9kZXYvcWZ0MCBzZXRkcnZidWZmZXIgI05VTUJVRkZFUlMiLiBFYWNoIGJ1ZmZlcgotCSAgd2FzdGVzIDMyIEtCIG9mIG1lbW9yeS4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIG1lbW9yeSBjYW5ub3QgYmUKLQkgIHN3YXBwZWQgb3V0LgotCi1jb25maWcgRlRfUFJPQ19GUwotCWJvb2wgIkVuYWJsZSBwcm9jZnMgc3RhdHVzIHJlcG9ydCAoKzJrYikiCi0JZGVwZW5kcyBvbiBGVEFQRSAmJiBQUk9DX0ZTCi0JLS0taGVscC0tLQotCSAgT3B0aW9uYWwuIFNheWluZyBZIHdpbGwgcmVzdWx0IGluIGNyZWF0aW9uIG9mIGEgZGlyZWN0b3J5Ci0JICBgL3Byb2MvZnRhcGUnIHVuZGVyIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS4gVGhlIGZpbGVzIGNhbiBiZSB2aWV3ZWQKLQkgIHdpdGggeW91ciBmYXZvcml0ZSBwYWdlciAoaS5lLiB1c2UgIm1vcmUgL3Byb2MvZnRhcGUvaGlzdG9yeSIgb3IKLQkgICJsZXNzIC9wcm9jL2Z0YXBlL2hpc3RvcnkiIG9yIHNpbXBseSAiY2F0IC9wcm9jL2Z0YXBlL2hpc3RvcnkiKS4gVGhlCi0JICBmaWxlIHdpbGwgY29udGFpbiBzb21lIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5zZXJ0ZWQKLQkgIGNhcnRyaWRnZSwgdGhlIGtlcm5lbCBkcml2ZXIsIHlvdXIgdGFwZSBkcml2ZSwgdGhlIGZsb3BweSBkaXNrCi0JICBjb250cm9sbGVyIGFuZCB0aGUgZXJyb3IgaGlzdG9yeSBmb3IgdGhlIG1vc3QgcmVjZW50IHVzZSBvZiB0aGUKLQkgIGtlcm5lbCBkcml2ZXIuIFNheWluZyBZIHdpbGwgZW5sYXJnZSB0aGUgc2l6ZSBvZiB0aGUgZnRhcGUgZHJpdmVyCi0JICBieSBhcHByb3hpbWF0ZWx5IDIgS0IuCi0KLQkgIFdBUk5JTkc6IFdoZW4gY29tcGlsaW5nIGZ0YXBlIGFzIGEgbW9kdWxlIChpLmUuIHNheWluZyBNIHRvICJGbG9wcHkKLQkgIHRhcGUgZHJpdmUiKSBpdCBpcyBkYW5nZXJvdXMgdG8gdXNlIGZ0YXBlJ3MgL3Byb2MgZmlsZSBzeXN0ZW0KLQkgIGludGVyZmFjZS4gQWNjZXNzaW5nIGAvcHJvYy9mdGFwZScgd2hpbGUgdGhlIG1vZHVsZSBpcyB1bmxvYWRlZCB3aWxsCi0JICByZXN1bHQgaW4gYSBrZXJuZWwgT29wcy4gVGhpcyBjYW5ub3QgYmUgZml4ZWQgZnJvbSBpbnNpZGUgZnRhcGUuCi0KLWNob2ljZQotCXByb21wdCAiRGVidWdnaW5nIG91dHB1dCIKLQlkZXBlbmRzIG9uIEZUQVBFCi0JZGVmYXVsdCBGVF9OT1JNQUxfREVCVUcKLQotY29uZmlnIEZUX05PUk1BTF9ERUJVRwotCWJvb2wgIk5vcm1hbCIKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBjb250cm9scyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQgdGhlIGZ0YXBlIGRyaXZlcgotCSAgaXMgQUJMRSB0byBwcm9kdWNlOyBpdCBkb2VzIG5vdCBpbmNyZWFzZSBvciBkaW1pbmlzaCB0aGUgZGVidWdnaW5nCi0JICBsZXZlbCBpdHNlbGYuIElmIHVuc3VyZSwgbGVhdmUgdGhpcyBhdCBpdHMgZGVmYXVsdCBzZXR0aW5nLAotCSAgaS5lLiBjaG9vc2UgIk5vcm1hbCIuCi0KLQkgIEZ0YXBlIGNhbiBwcmludCBsb3RzIG9mIGRlYnVnZ2luZyBtZXNzYWdlcyB0byB0aGUgc3lzdGVtIGNvbnNvbGUKLQkgIHJlc3AuIGtlcm5lbCBsb2cgZmlsZXMuIFJlZHVjaW5nIHRoZSBhbW91bnQgb2YgcG9zc2libGUgZGVidWdnaW5nCi0JICBvdXRwdXQgcmVkdWNlcyB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIG1vZHVsZSBieSBzb21lIEtCLCBzbyBpdCBtaWdodAotCSAgYmUgYSBnb29kIGlkZWEgdG8gdXNlICJOb25lIiBmb3IgZW1lcmdlbmN5IGJvb3QgZmxvcHBpZXMuCi0KLQkgIElmIHlvdSB3YW50IHRvIHNhdmUgbWVtb3J5IHRoZW4gdGhlIGZvbGxvd2luZyBzdHJhdGVneSBpcwotCSAgcmVjb21tZW5kZWQ6IGxlYXZlIHRoaXMgb3B0aW9uIGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgIk5vcm1hbCIgdW50aWwKLQkgIHlvdSBrbm93IHRoYXQgdGhlIGRyaXZlciB3b3JrcyBhcyBleHBlY3RlZCwgYWZ0ZXJ3YXJkcyByZWNvbmZpZ3VyZQotCSAgdGhlIGtlcm5lbCwgdGhpcyB0aW1lIHNwZWNpZnlpbmcgIlJlZHVjZWQiIG9yICJOb25lIiBhbmQgcmVjb21waWxlCi0JICBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGFzIHVzdWFsLiBOb3RlIHRoYXQgY2hvb3NpbmcgIkV4Y2Vzc2l2ZSIKLQkgIGRlYnVnZ2luZyBvdXRwdXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0Ci0JICBwcmludGVkIHRvIHRoZSBjb25zb2xlIGJ1dCBvbmx5IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHByb2R1Y2UKLQkgICJFeGNlc3NpdmUiIGRlYnVnZ2luZyBvdXRwdXQuCi0KLQkgIFBsZWFzZSByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vZnRhcGUudHh0PiBmb3IgYSBzaG9ydCBkZXNjcmlwdGlvbgotCSAgaG93IHRvIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0LgotCi1jb25maWcgRlRfRlVMTF9ERUJVRwotCWJvb2wgIkV4Y2Vzc2l2ZSIKLQloZWxwCi0JICBFeHRyZW1lbHkgdmVyYm9zZSBvdXRwdXQgZm9yIGRyaXZlciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0KLWNvbmZpZyBGVF9OT19UUkFDRQotCWJvb2wgIlJlZHVjZWQiCi0JaGVscAotCSAgUmVkdWNlZCB0YXBlIGRyaXZlciBkZWJ1Z2dpbmcgb3V0cHV0LgotCi1jb25maWcgRlRfTk9fVFJBQ0VfQVRfQUxMCi0JYm9vbCAiTm9uZSIKLQloZWxwCi0JICBTdXBwcmVzcyBhbGwgZGVidWdnaW5nIG91dHB1dCBmcm9tIHRoZSB0YXBlIGRyaXZlLgotCi1lbmRjaG9pY2UKLQotY29tbWVudCAiSGFyZHdhcmUgY29uZmlndXJhdGlvbiIKLQlkZXBlbmRzIG9uIEZUQVBFCi0KLWNob2ljZQotCXByb21wdCAiRmxvcHB5IHRhcGUgY29udHJvbGxlcnMiCi0JZGVwZW5kcyBvbiBGVEFQRQotCWRlZmF1bHQgRlRfU1REX0ZEQwotCi1jb25maWcgRlRfU1REX0ZEQwotCWJvb2wgIlN0YW5kYXJkIgotCS0tLWhlbHAtLS0KLQkgIE9ubHkgY2hhbmdlIHRoaXMgc2V0dGluZyBpZiB5b3UgaGF2ZSBhIHNwZWNpYWwgY29udHJvbGxlci4gSWYgeW91Ci0JICBkaWRuJ3QgcGx1ZyBhbnkgYWRkLW9uIGNhcmQgaW50byB5b3VyIGNvbXB1dGVyIHN5c3RlbSBidXQganVzdAotCSAgcGx1Z2dlZCB0aGUgZmxvcHB5IHRhcGUgY2FibGUgaW50byB0aGUgYWxyZWFkeSBleGlzdGluZyBmbG9wcHkgZHJpdmUKLQkgIGNvbnRyb2xsZXIgdGhlbiB5b3UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgc2V0dGluZywKLQkgIGkuZS4gY2hvb3NlICJTdGFuZGFyZCIuCi0KLQkgIENob29zZSAiTUFDSC0yIiBpZiB5b3UgaGF2ZSBhIE1vdW50YWluIE1hY2gtMiBjb250cm9sbGVyLgotCSAgQ2hvb3NlICJGQy0xMC9GQy0yMCIgaWYgeW91IGhhdmUgYSBDb2xvcmFkbyBGQy0xMCBvciBGQy0yMAotCSAgY29udHJvbGxlci4KLQkgIENob29zZSAiQWx0LzgyMDc4IiBpZiB5b3UgaGF2ZSBhbm90aGVyIGNvbnRyb2xsZXIgdGhhdCBpcyBsb2NhdGVkIGF0Ci0JICBhbiBJTyBiYXNlIGFkZHJlc3MgZGlmZmVyZW50IGZyb20gdGhlIHN0YW5kYXJkIGZsb3BweSBkcml2ZQotCSAgY29udHJvbGxlcidzIGJhc2UgYWRkcmVzcyBvZiBgMHgzZjAnLCBvciB1c2VzIGFuIElSUSAoaW50ZXJydXB0KQotCSAgY2hhbm5lbCBkaWZmZXJlbnQgZnJvbSBgNicsIG9yIGEgRE1BIGNoYW5uZWwgZGlmZmVyZW50IGZyb20KLQkgIGAyJy4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGFueSBjb250cm9sbGVyIGNhcmQgdGhhdCBpcyBiYXNlZCBvbgotCSAgSW50ZWwncyA4MjA3OCBGREMgc3VjaCBhcyBTZWFnYXRlJ3MsIEV4YWJ5dGUncyBhbmQgSW9tZWdhJ3MgImhpZ2gKLQkgIHNwZWVkIiBjb250cm9sbGVycy4KLQotCSAgSWYgeW91IGNob29zZSBzb21ldGhpbmcgb3RoZXIgdGhhbiAiU3RhbmRhcmQiIHRoZW4gcGxlYXNlIG1ha2UKLQkgIHN1cmUgdGhhdCB0aGUgc2V0dGluZ3MgZm9yIHRoZSBJTyBiYXNlIGFkZHJlc3MgYW5kIHRoZSBJUlEgYW5kIERNQQotCSAgY2hhbm5lbCBpbiB0aGUgY29uZmlndXJhdGlvbiBtZW51cyBiZWxvdyBhcmUgY29ycmVjdC4gVXNlIHRoZSBtYW51YWwKLQkgIG9mIHlvdXIgdGFwZSBkcml2ZSB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3Qgc2V0dGluZ3MhCi0KLQkgIElmIHlvdSBhcmUgYWxyZWFkeSBzdWNjZXNzZnVsbHkgdXNpbmcgeW91ciB0YXBlIGRyaXZlIHdpdGggYW5vdGhlcgotCSAgb3BlcmF0aW5nIHN5c3RlbSB0aGVuIHlvdSBkZWZpbml0ZWx5IHNob3VsZCB1c2UgdGhlIHNhbWUgc2V0dGluZ3MKLQkgIGZvciB0aGUgSU8gYmFzZSwgdGhlIElSUSBhbmQgRE1BIGNoYW5uZWwgdGhhdCBoYXZlIHByb3ZlbiB0byB3b3JrCi0JICB3aXRoIHRoYXQgb3RoZXIgT1MuCi0KLQkgIE5vdGUgdGhhdCB0aGlzIG1lbnUgbGV0cyB5b3Ugc3BlY2lmeSBvbmx5IHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yCi0JICB0aGUgaGFyZHdhcmUgc2V0dXAuIFRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGNhbiBiZSBjaGFuZ2VkIGF0Ci0JICBib290IHRpbWUgKHdoZW4gZnRhcGUgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBpLmUuIGlmIHlvdQotCSAgaGF2ZSBzYWlkIFkgdG8gIkZsb3BweSB0YXBlIGRyaXZlIikgb3IgbW9kdWxlIGxvYWQgdGltZSAoaS5lLiBpZiB5b3UKLQkgIGhhdmUgc2FpZCBNIHRvICJGbG9wcHkgdGFwZSBkcml2ZSIpLgotCi0JICBQbGVhc2UgcmVhZCBhbHNvIHRoZSBmaWxlIDxmaWxlOkRvY3VtZW50YXRpb24vZnRhcGUudHh0PiB3aGljaAotCSAgY29udGFpbnMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQgYXQKLQkgIGJvb3Qgb3IgbG9hZCB0aW1lLiBJZiB5b3Ugd2FudCB0byB1c2UgeW91ciBmbG9wcHkgdGFwZSBkcml2ZSBvbiBhCi0JICBQQ0ktYnVzIGJhc2VkIHN5c3RlbSwgcGxlYXNlIHJlYWQgdGhlIGZpbGUKLQkgIDxmaWxlOmRyaXZlcnMvY2hhci9mdGFwZS9SRUFETUUuUENJPi4KLQotY29uZmlnIEZUX01BQ0gyCi0JYm9vbCAiTUFDSC0yIgotCi1jb25maWcgRlRfUFJPQkVfRkMxMAotCWJvb2wgIkZDLTEwL0ZDLTIwIgotCi1jb25maWcgRlRfQUxUX0ZEQwotCWJvb2wgIkFsdC84MjA3OCIKLQotZW5kY2hvaWNlCi0KLWNvbW1lbnQgIkNvbnN1bHQgdGhlIG1hbnVhbHMgb2YgeW91ciB0YXBlIGRyaXZlIGZvciB0aGUgY29ycmVjdCBzZXR0aW5ncyEiCi0JZGVwZW5kcyBvbiBGVEFQRSAmJiAhRlRfU1REX0ZEQwotCi1jb25maWcgRlRfRkRDX0JBU0UKLQloZXggIklPIGJhc2Ugb2YgdGhlIGZsb3BweSBkaXNrIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBGVEFQRSAmJiAhRlRfU1REX0ZEQwotCWRlZmF1bHQgIjAiCi0JLS0taGVscC0tLQotCSAgWW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIHZhbHVlIGlmIHRoZSBmb2xsb3dpbmcgZGVmYXVsdAotCSAgc2V0dGluZ3MgZm9yIHRoZSBiYXNlIElPIGFkZHJlc3MgYXJlIGNvcnJlY3Q6Ci0JICA8PDwgTUFDSC0yICAgICA6IDB4MUUwID4+PgotCSAgPDw8IEZDLTEwL0ZDLTIwOiAweDE4MCA+Pj4KLQkgIDw8PCBTZWNvbmRhcnkgIDogMHgzNzAgPj4+Ci0JICBTZWNvbmRhcnkgcmVmZXJzIHRvIGEgc2Vjb25kYXJ5IEZEQyBjb250cm9sbGVyIGxpa2UgdGhlICJoaWdoIHNwZWVkIgotCSAgY29udHJvbGxlcnMgZGVsaXZlcmVkIGJ5IFNlYWdhdGUgb3IgRXhhYnl0ZSBvciBJb21lZ2EncyBEaXR0byBEYXNoLgotCSAgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXR0aW5nIGZvciB0aGUgSU8gYmFzZSBhZGRyZXNzCi0JICBzcGVjaWZpZWQgaGVyZSBpcyBjb3JyZWN0LiBVU0UgVEhFIE1BTlVBTCBPRiBZT1VSIFRBUEUgRFJJVkUgT1IKLQkgIENPTlRST0xMRVIgQ0FSRCBUTyBERVRFUk1JTkUgVEhFIENPUlJFQ1QgU0VUVElORy4gSWYgeW91IGFyZSBhbHJlYWR5Ci0JICBzdWNjZXNzZnVsbHkgdXNpbmcgdGhlIHRhcGUgZHJpdmUgd2l0aCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gdGhlbgotCSAgeW91IGRlZmluaXRlbHkgc2hvdWxkIHVzZSB0aGUgc2FtZSBzZXR0aW5ncyBmb3IgdGhlIElPIGJhc2UgdGhhdCBoYXMKLQkgIHByb3ZlbiB0byB3b3JrIHdpdGggdGhhdCBvdGhlciBPUy4KLQotCSAgTm90ZSB0aGF0IHRoaXMgbWVudSBsZXRzIHlvdSBzcGVjaWZ5IG9ubHkgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgIHRoZSBJTyBiYXNlLiBUaGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBjYW4gYmUgY2hhbmdlZCBhdCBib290IHRpbWUKLQkgICh3aGVuIGZ0YXBlIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgaS5lLiBpZiB5b3Ugc3BlY2lmaWVkIFkgdG8KLQkgICJGbG9wcHkgdGFwZSBkcml2ZSIpIG9yIG1vZHVsZSBsb2FkIHRpbWUgKGkuZS4gaWYgeW91IGhhdmUgc2FpZCBNIHRvCi0JICAiRmxvcHB5IHRhcGUgZHJpdmUiKS4KLQotCSAgUGxlYXNlIHJlYWQgYWxzbyB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2Z0YXBlLnR4dD4gd2hpY2gKLQkgIGNvbnRhaW5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc2V0IGF0Ci0JICBib290IG9yIGxvYWQgdGltZS4KLQotY29uZmlnIEZUX0ZEQ19JUlEKLQlpbnQgIklSUSBjaGFubmVsIG9mIHRoZSBmbG9wcHkgZGlzayBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gRlRBUEUgJiYgIUZUX1NURF9GREMKLQlkZWZhdWx0ICIwIgotCS0tLWhlbHAtLS0KLQkgIFlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSB2YWx1ZSBpZiB0aGUgZm9sbG93aW5nIGRlZmF1bHQKLQkgIHNldHRpbmdzIGZvciB0aGUgaW50ZXJydXB0IGNoYW5uZWwgYXJlIGNvcnJlY3Q6Ci0JICA8PDwgTUFDSC0yICAgICA6IDYgPj4+Ci0JICA8PDwgRkMtMTAvRkMtMjA6IDkgPj4+Ci0JICA8PDwgU2Vjb25kYXJ5ICA6IDYgPj4+Ci0JICBTZWNvbmRhcnkgcmVmZXJzIHRvIHNlY29uZGFyeSBhIEZEQyBjb250cm9sbGVyIGxpa2UgdGhlICJoaWdoIHNwZWVkIgotCSAgY29udHJvbGxlcnMgZGVsaXZlcmVkIGJ5IFNlYWdhdGUgb3IgRXhhYnl0ZSBvciBJb21lZ2EncyBEaXR0byBEYXNoLgotCSAgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXR0aW5nIGZvciB0aGUgSU8gYmFzZSBhZGRyZXNzCi0JICBzcGVjaWZpZWQgaGVyZSBpcyBjb3JyZWN0LiBVU0UgVEhFIE1BTlVBTCBPRiBZT1VSIFRBUEUgRFJJVkUgT1IKLQkgIENPTlRST0xMRVIgQ0FSRCBUTyBERVRFUk1JTkUgVEhFIENPUlJFQ1QgU0VUVElORy4gSWYgeW91IGFyZSBhbHJlYWR5Ci0JICBzdWNjZXNzZnVsbHkgdXNpbmcgdGhlIHRhcGUgZHJpdmUgd2l0aCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gdGhlbgotCSAgeW91IGRlZmluaXRlbHkgc2hvdWxkIHVzZSB0aGUgc2FtZSBzZXR0aW5ncyBmb3IgdGhlIElPIGJhc2UgdGhhdCBoYXMKLQkgIHByb3ZlbiB0byB3b3JrIHdpdGggdGhhdCBvdGhlciBPUy4KLQotCSAgTm90ZSB0aGF0IHRoaXMgbWVudSBsZXRzIHlvdSBzcGVjaWZ5IG9ubHkgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgIHRoZSBJUlEgY2hhbm5lbC4gVGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGNoYW5nZWQgYXQgYm9vdAotCSAgdGltZSAod2hlbiBmdGFwZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGkuZS4gaWYgeW91IHNhaWQgWSB0bwotCSAgIkZsb3BweSB0YXBlIGRyaXZlIikgb3IgbW9kdWxlIGxvYWQgdGltZSAoaS5lLiBpZiB5b3Ugc2FpZCBNIHRvCi0JICAiRmxvcHB5IHRhcGUgZHJpdmUiKS4KLQotCSAgUGxlYXNlIHJlYWQgYWxzbyB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2Z0YXBlLnR4dD4gd2hpY2gKLQkgIGNvbnRhaW5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc2V0IGF0Ci0JICBib290IG9yIGxvYWQgdGltZS4KLQotY29uZmlnIEZUX0ZEQ19ETUEKLQlpbnQgIkRNQSBjaGFubmVsIG9mIHRoZSBmbG9wcHkgZGlzayBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gRlRBUEUgJiYgIUZUX1NURF9GREMKLQlkZWZhdWx0ICIwIgotCS0tLWhlbHAtLS0KLQkgIFlvdSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgYSB2YWx1ZSBpZiB0aGUgZm9sbG93aW5nIGRlZmF1bHQKLQkgIHNldHRpbmdzIGZvciB0aGUgRE1BIGNoYW5uZWwgYXJlIGNvcnJlY3Q6Ci0JICA8PDwgTUFDSC0yICAgICA6IDIgPj4+Ci0JICA8PDwgRkMtMTAvRkMtMjA6IDMgPj4+Ci0JICA8PDwgU2Vjb25kYXJ5ICA6IDIgPj4+Ci0JICBTZWNvbmRhcnkgcmVmZXJzIHRvIGEgc2Vjb25kYXJ5IEZEQyBjb250cm9sbGVyIGxpa2UgdGhlICJoaWdoIHNwZWVkIgotCSAgY29udHJvbGxlcnMgZGVsaXZlcmVkIGJ5IFNlYWdhdGUgb3IgRXhhYnl0ZSBvciBJb21lZ2EncyBEaXR0byBEYXNoLgotCSAgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHRoZSBzZXR0aW5nIGZvciB0aGUgSU8gYmFzZSBhZGRyZXNzCi0JICBzcGVjaWZpZWQgaGVyZSBpcyBjb3JyZWN0LiBVU0UgVEhFIE1BTlVBTCBPRiBZT1VSIFRBUEUgRFJJVkUgT1IKLQkgIENPTlRST0xMRVIgQ0FSRCBUTyBERVRFUk1JTkUgVEhFIENPUlJFQ1QgU0VUVElORy4gSWYgeW91IGFyZSBhbHJlYWR5Ci0JICBzdWNjZXNzZnVsbHkgdXNpbmcgdGhlIHRhcGUgZHJpdmUgd2l0aCBhbm90aGVyIG9wZXJhdGluZyBzeXN0ZW0gdGhlbgotCSAgeW91IGRlZmluaXRlbHkgc2hvdWxkIHVzZSB0aGUgc2FtZSBzZXR0aW5ncyBmb3IgdGhlIElPIGJhc2UgdGhhdCBoYXMKLQkgIHByb3ZlbiB0byB3b3JrIHdpdGggdGhhdCBvdGhlciBPUy4KLQotCSAgTm90ZSB0aGF0IHRoaXMgbWVudSBsZXRzIHlvdSBzcGVjaWZ5IG9ubHkgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgIHRoZSBETUEgY2hhbm5lbC4gVGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGNoYW5nZWQgYXQgYm9vdAotCSAgdGltZSAod2hlbiBmdGFwZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGkuZS4gaWYgeW91IHNhaWQgWSB0bwotCSAgIkZsb3BweSB0YXBlIGRyaXZlIikgb3IgbW9kdWxlIGxvYWQgdGltZSAoaS5lLiBpZiB5b3Ugc2FpZCBNIHRvCi0JICAiRmxvcHB5IHRhcGUgZHJpdmUiKS4KLQotCSAgUGxlYXNlIHJlYWQgYWxzbyB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2Z0YXBlLnR4dD4gd2hpY2gKLQkgIGNvbnRhaW5zIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgc2V0IGF0Ci0JICBib290IG9yIGxvYWQgdGltZS4KLQotY29uZmlnIEZUX0ZEQ19USFIKLQlpbnQgIkRlZmF1bHQgRklGTyB0aHJlc2hvbGQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBGVEFQRSAmJiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0ICI4IgotCWhlbHAKLQkgIFNldCB0aGUgRklGTyB0aHJlc2hvbGQgb2YgdGhlIEZEQy4gSWYgdGhpcyBpcyBoaWdoZXIgdGhlIERNQQotCSAgY29udHJvbGxlciBtYXkgc2VydmUgdGhlIEZEQyBhZnRlciBhIGhpZ2hlciBsYXRlbmN5IHRpbWUuIElmIHRoaXMgaXMKLQkgIGxvd2VyLCBmZXdlciBETUEgdHJhbnNmZXJzIG9jY3VyIGxlYWRpbmcgdG8gbGVzcyBidXMgY29udGVudGlvbi4KLQkgIFlvdSBtYXkgdHJ5IHRvIHR1bmUgdGhpcyBpZiBmdGFwZSBhbm5veXMgeW91IHdpdGggInJlZHVjZWQgZGF0YQotCSAgcmF0ZSBiZWNhdXNlIG9mIGV4Y2Vzc2l2ZSBvdmVycnVuIGVycm9ycyIgbWVzc2FnZXMuIEhvd2V2ZXIsIHRoaXMKLQkgIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIHRvbyBtdWNoIGVmZmVjdC4KLQotCSAgSWYgdW5zdXJlLCBkb24ndCB0b3VjaCB0aGUgaW5pdGlhbCB2YWx1ZSwgaS5lLiBsZWF2ZSBpdCBhdCAiOCIuCi0KLWNvbmZpZyBGVF9GRENfTUFYX1JBVEUKLQlpbnQgIk1heGltYWwgZGF0YSByYXRlIHRvIHVzZSAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEZUQVBFICYmIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgIjIwMDAiCi0JLS0taGVscC0tLQotCSAgV2l0aCBzb21lIG1vdGhlcmJvYXJkL0ZEQyBjb21iaW5hdGlvbnMgZnRhcGUgd2lsbCBub3QgYmUgYWJsZSB0bwotCSAgcnVuIHlvdXIgRkRDL3RhcGUgZHJpdmUgY29tYmluYXRpb24gYXQgdGhlIGhpZ2hlc3QgYXZhaWxhYmxlCi0JICBzcGVlZC4gSWYgdGhpcyBpcyB0aGUgY2FzZSB5b3UnbGwgZW5jb3VudGVyICJyZWR1Y2VkIGRhdGEgcmF0ZQotCSAgYmVjYXVzZSBvZiBleGNlc3NpdmUgb3ZlcnJ1biBlcnJvcnMiIG1lc3NhZ2VzIGFuZCBsb3RzIG9mIHJldHJpZXMKLQkgIGJlZm9yZSBmdGFwZSBmaW5hbGx5IGRlY2lkZXMgdG8gcmVkdWNlIHRoZSBkYXRhIHJhdGUuCi0KLQkgIEluIHRoaXMgY2FzZSBpdCBtaWdodCBiZSBkZXNpcmFibGUgdG8gdGVsbCBmdGFwZSBiZWZvcmVoYW5kIHRoYXQKLQkgIGl0IG5lZWQgbm90IHRyeSB0byBydW4gdGhlIHRhcGUgZHJpdmUgYXQgdGhlIGhpZ2hlc3QgYXZhaWxhYmxlCi0JICBzcGVlZC4gSWYgdW5zdXJlLCBsZWF2ZSB0aGlzIGRpc2FibGVkLCBpLmUuIGxlYXZlIGl0IGF0IDIwMDAKLQkgIGJpdHMvc2VjLgotCi1jb25maWcgRlRfQUxQSEFfQ0xPQ0sKLQlpbnQgIkNQVSBjbG9jayBmcmVxdWVuY3kgb2YgeW91ciBERUMgQWxwaGEiIGlmIEFMUEhBCi0JZGVwZW5kcyBvbiBGVEFQRQotCWRlZmF1bHQgIjAiCi0JaGVscAotCSAgT24gc29tZSBERUMgQWxwaGEgbWFjaGluZXMgdGhlIENQVSBjbG9jayBmcmVxdWVuY3kgY2Fubm90IGJlCi0JICBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksIHNvIHlvdSBuZWVkIHRvIHNwZWNpZnkgaXQgaGVyZSBPTkxZIGlmCi0JICBydW5uaW5nIGEgREVDIEFscGhhLCBvdGhlcndpc2UgdGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3QuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9mdGFwZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU2N2QyZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jCi0jICAgICAgIENvcHlyaWdodCAoQykgMTk5NyBDbGF1cyBIZWluZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMgCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jIAotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotIwotIyAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvTWFrZWZpbGUsdiAkCi0jICRSZXZpc2lvbjogMS40ICQKLSMgJERhdGU6IDE5OTcvMTAvMDUgMTk6MTc6NTYgJAotIwotIyAgICAgIE1ha2VmaWxlIGZvciB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMCBmbG9wcHktdGFwZSBkcml2ZXIgZm9yCi0jICAgICAgTGludXguCi0jCi0KLW9iai0kKENPTkZJR19GVEFQRSkJCSs9IGxvd2xldmVsLwotb2JqLSQoQ09ORklHX1pGVEFQRSkJCSs9IHpmdGFwZS8KLW9iai0kKENPTkZJR19aRlRfQ09NUFJFU1NPUikJKz0gY29tcHJlc3Nvci8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9SRUFETUUuUENJIGIvZHJpdmVycy9jaGFyL2Z0YXBlL1JFQURNRS5QQ0kKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZGUxNTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL1JFQURNRS5QQ0kKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1Tb21lIG5vdGVzIGZvciBmdGFwZSB1c2VycyB3aXRoIFBDSSBtb3RoZXJib2FyZHM6Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBwcm9ibGVtOgotLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGhhdmUgYmVlbiBzb21lIHByb2JsZW0gcmVwb3J0cyBmcm9tIHBlb3BsZSB1c2luZyBQQ0ktYnVzIGJhc2VkCi1zeXN0ZW1zIGdldHRpbmcgb3ZlcnJ1biBlcnJvcnMuCi1JIHdhc24ndCBhYmxlIHRvIHJlcHJvZHVjZSB0aGVzZSB1bnRpbCBJIHJhbiBmdGFwZSBvbiBhIEludGVsIFBsYXRvCi0oUHJlbWllcmUgUENJIElJKSBtb3RoZXJib2FyZCB3aXRoIGJpb3MgdmVyc2lvbiAxLjAwLjA4QVgxLgotSXQgdHVybmVkIG91dCB0aGF0IGlmIEdBVCAoR3VhcmFudGVlZCBBY2Nlc3MgVGltaW5nKSBpcyBlbmFibGVkICg/KQotZnRhcGUgZ2V0cyBhIGxvdCBvZiBvdmVycnVuIGVycm9ycy4KLVRoZSBwcm9ibGVtIGRpc2FwcGVhcnMgd2hlbiBkaXNhYmxpbmcgR0FUIGluIHRoZSBiaW9zLgotTm90ZSB0aGF0IEludGVsIHJlbW92ZWQgdGhpcyBzZXR0aW5nIChwZXJtYW5lbnRseSBkaXNhYmxlZCkgZnJvbSB0aGUKLTEuMDAuMTBBWDEgYmlvcyAhCi0KLUl0IGxvb2tzIGxpa2UgdGhhdCBpZiBHQVQgaXMgZW5hYmxlZCB0aGVyZSBhcmUgb2Z0ZW4gbGFyZ2UgcGVyaW9kcwotKGdyZWF0ZXIgdGhhbiAxMjAgdXMgIT8/KSBvbiB0aGUgSVNBIGJ1cyB0aGF0IHRoZSBETUEgY29udHJvbGxlciBjYW5ub3QKLXNlcnZpY2UgdGhlIGZsb3BweSBkaXNrIGNvbnRyb2xsZXIuCi1JIGNhbm5vdCBpbWFnaW5lIHRoaXMgYmVpbmcgYWNjZXB0YWJsZSBpbiBhIGRlY2VudCBQQ0kgaW1wbGVtZW50YXRpb24uCi1NYXliZSB0aGlzIGlzIGEgYGZlYXR1cmUnIG9mIHRoZSBjaGlwc2V0LiBJIGNhbiBvbmx5IHNwZWN1bGF0ZSB3aHkKLUludGVsIGNob29zZSB0byByZW1vdmUgdGhlIG9wdGlvbiBmcm9tIHRoZSBsYXRlc3QgQmlvcy4uLgotCi1UaGUgbGVzc29uIG9mIHRoaXMgYWxsIGlzIHRoYXQgdGhlcmUgbWF5IGJlIG90aGVyIG1vdGhlcmJvYXJkCi1pbXBsZW1lbnRhdGlvbnMgaGF2aW5nIHRoZSBzYW1lIG9mIHNpbWlsYXIgcHJvYmxlbXMuCi1JZiB5b3UgZXhwZXJpZW5jZSBhIGxvdCBvZiBvdmVycnVuIGVycm9ycyBkdXJpbmcgYSBiYWNrdXAgdG8gdGFwZSwKLXNlZSBpZiB0aGVyZSBpcyBzb21lIHNldHRpbmcgaW4gdGhlIEJpb3MgdGhhdCBtYXkgaW5mbHVlbmNlIHRoZQotYnVzIHRpbWluZy4KLQotSSBqdWRnZSB0aGlzIGEgaGFyZHdhcmUgcHJvYmxlbSBhbmQgbm90IGEgbGltaXRhdGlvbiBvZiBmdGFwZSA7LSkKLU15IERPUyBiYWNrdXAgc29mdHdhcmUgc2VlbXMgdG8gYmUgc3VmZmVyaW5nIGZyb20gdGhlIHNhbWUgcHJvYmxlbXMKLWFuZCBldmVuIHJlZnVzZXMgdG8gcnVuIGF0IDEgTWJwcyAhCi1GdGFwZSB3aWxsIHJlZHVjZSB0aGUgZGF0YS1yYXRlIGZyb20gMSBNYnBzIHRvIDUwMCBLYnBzIGlmIHRoZSBudW1iZXIKLW9mIG92ZXJydW4gZXJyb3JzIG9uIGEgdHJhY2sgZXhjZWVkcyBhIHRocmVzaG9sZC4KLQotCi1Qb3NzaWJsZSBzb2x1dGlvbnM6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNvbWUgb2YgdGhlIHByb2JsZW1zIHdlcmUgc29sdmVkIGJ5IHVwZ3JhZGluZyB0aGUgKGZsYXNoKSBiaW9zLgotT3RoZXIgc3VnZ2VzdCB0aGF0IGl0IGhhcyB0byBkbyB3aXRoIHRoZSBGREMgYmVpbmcgb24gdGhlIFBDSQotYnVzLCBidXQgdGhhdCBpcyBub3QgdGhlIGNhc2Ugd2l0aCB0aGUgSW50ZWwgUHJlbWllcmUgSUkgYm9hcmRzLgotW0lmIHVwZ3JhZGluZyB0aGUgYmlvcyBkb2Vzbid0IHNvbHZlIHRoZSBwcm9ibGVtIHlvdSBjb3VsZCB0cnkKLWEgZmxvcHB5IGRpc2sgY29udHJvbGxlciBvbiB0aGUgaXNhLWJ1c10uCi0KLUhlcmUgaXMgYSBsaXN0IG9mIHN5c3RlbXMgYW5kIHJlY29tbWVuZGVkIEJJT1Mgc2V0dGluZ3M6Ci0KLQotICAgICAgICBJbnRlbCBQcmVtaWVyZSBQQ0kgKFJldmVuZ2UpOgotCi1CaW9zIHZlcnNpb24gMS4wMC4wOS5BRjIgaXMgcmVwb3J0ZWQgdG8gd29yay4KLQotCi0KLSAgICAgICAgSW50ZWwgUHJlbWllcmUgUENJIElJIChQbGF0byk6Ci0KLUJpb3MgdmVyc2lvbiAxLjAwLjEwLkFYMSBhbmQgdmVyc2lvbiAxMSBiZXRhIGFyZSBvay4KLUlmIHVzaW5nIHZlcnNpb24gMS4wMC4wOC5BWDEsIEdBVCBtdXN0IGJlIGRpc2FibGVkICEKLQotCi0KLSAgICAgICAgQVNVUyBQQ0kvSS1TUDNHOgotCi1QcmVmZXJyZWQgc2V0dGluZ3M6ICAgICBJU0EtR0FULW1vZGUgOiBkaXNhYmxlZAotICAgICAgICAgICAgICAgICAgICAgICAgRE1BLWxpbmVidWZmZXItbW9kZSA6IHN0YW5kYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICBJU0EtbWFzdGVyYnVmZmVyLW1vZGUgOiBzdGFuZGFyZAotCi0KLSAgICAgICAgREVMTCBEaW1lbnNpb24gWFBTIFA5MAotCi1CaW9zIHZlcnNpb24gQTIgaXMgcmVwb3J0ZWQgdG8gYmUgYnJva2VuLCB3aGlsZSBiaW9zIHZlcnNpb24gQTUgd29ya3MuCi1Zb3UgY2FuIGdldCBhIGZsYXNoIGJpb3MgdXBncmFkZSBmcm9tIGh0dHA6Ly93d3cuZGVsbC5jb20KLQotCi1UbyBzZWUgaWYgeW91J3JlIGhhdmluZyB0aGUgR0FUIHByb2JsZW0sIHRyeSBtYWtpbmcgYSBiYWNrdXAKLXVuZGVyIERPUy4gSWYgaXQncyB2ZXJ5IHNsb3cgYW5kIG9mdGVuIHJlcG9zaXRpb25zIHlvdSdyZQotcHJvYmFibHkgaGF2aW5nIHRoaXMgcHJvYmxlbS4KLQotICAgICAgICAgICAgICAgICAgICAgICAgLS0vLy0tCi0gTG9jYWxXb3JkczogIGZ0YXBlIFBDSSBiaW9zIEdBVCBJU0EgRE1BIGNoaXBzZXQgTWJwcyBLYnBzIEZEQyBpc2EgQUYgb2sgQVNVUwotIExvY2FsV29yZHM6ICBTUCBsaW5lYnVmZmVyIG1hc3RlcmJ1ZmZlciBYUFMgaHR0cCB3d3cgY29tCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvUkVMRUFTRS1OT1RFUyBiL2RyaXZlcnMvY2hhci9mdGFwZS9SRUxFQVNFLU5PVEVTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzc5OWRiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9SRUxFQVNFLU5PVEVTCisrKyAvZGV2L251bGwKQEAgLTEsOTY2ICswLDAgQEAKLUhleSwgRW1hY3MsIHdlJ3JlIC0qLVRleHQtKi0gbW9kZSEKLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMy4wNGQgMjUvMTEvOTcgPT09PT0KLS0gVGhlIGNvcnJlY3QgcHJlLXByb2Nlc3NvciBzdGF0ZW1lbnQgZm9yICJlbHNlIGlmIiBpcyAiI2VsaWYiIG5vdAotICAiZWxzaWYiLgotLSBOZWVkIHRvIGNhbGwgemZ0X3Jlc2V0X3Bvc2l0aW9uKCkgd2hlbiBvdmVyd3JpdGluZyBjYXJ0cmlkZ2VzCi0gIHByZXZpb3VzbHkgd3JpdHRlbiB3aXRoIGZ0YXBlLTIueCwgc2Z0YXBlLCBvciBhbmNpZW50Ci0gIChwcmUtZnRhcGUtMy54KSB2ZXJzaW9ucyBvZiB6ZnRhcGUuCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTMuMDRjIDE2LzExLzk3ID09PT09Ci0tIGZkY19wcm9iZSgpIHdhcyBjYWxsaW5nIERVTVBSRUdTIHdpdGggYSByZXN1bHQgbGVuZ3RoIG9mICIxIiB3aGljaAotICB3YXMganVzdCBmaW5lLiBVbmRvIHByZXZpb3VzIGNoYW5nZS4KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMy4wNGIgMTQvMTEvOTcgPT09PT0KLQotLSBwYXRjaGVzLzIueC54L2Zsb3BweS5jLmRpZmYgd2FzIHNvbWV3aGF0IGJyb2tlbiwgcmVsZWFzaW5nIGkvbwotICByZWdpb25zIGl0IG5ldmVyIGhhZCBhbGxvY2F0ZWQuCi0tIGZkY19wcm9iZSgpIHdhcyBjYWxsaW5nIERVTVBSRUdTIHdpdGggYSByZXN1bHQgbGVuZ3RoIG9mICIxIiBpbnN0ZWFkCi0gIG9mICIxMCIKLS0gV3JpdGluZyBkZWxldGVkIGRhdGEgbWFya3MgaWYgdGhlIGZpcnN0IHNlZ2VudHMgb24gdHJhY2sgemVybyBhcmUKLSAgc2hvdWxkIHdvcmsgbm93LgotLSBmdGZvcm1hdCBzaG91bGQgbm93IGJlIGFibGUgdG8gaGFuZGxlIHRob3NlIGNhc2VzIHdoZXJlIHRoZSB0YXBlCi0gIGRyaXZlIHNldHMgdGhlIHJlYWQgb25seSBzdGF0dXMgYml0IChRSUMtNDAvODAgY2FydHJpZGdlcyB3aXRoCi0gIFFJQy0zMDEwLzMwMjAgdGFwZSBkcml2ZXMpIGJlY2F1c2UgdGhlIGhlYWRlciBzZWdtZW50IGlzIGRhbWFnZWQuCi0tIHRoZSBNVElPQ0ZUQ01EIGlvY3RsIG1heSBub3cgYmUgaXNzdWVkIGJ5IHRoZSBzdXBlcnVzZXIgT05MWS4KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMy4wNGEgMTIvMTEvOTcgPT09PT0KLS0gRml4IGFuICJpbmZpbml0ZSBsb29wIGNhbid0IGJlIGtpbGxlZCBieSBzaWduYWwiIGJ1ZyBpbgotICBmdGFwZV9nZXRfZHJpdmVfc3RhdHVzKCkuIE9ubHkgcmVsZXZhbnQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzCi0gIGJ1Z2d5L21pc2NvbmZpZ3VyZWQgaGFyZHdhcmUKLS0gVHJ5IHRvIGNvbXBlbnNhdGUgYSBidWcgaW4gdGhlIEhQIENvbG9yYWRvIFQzMDAwJ3MgZmlybXdhcmU6IGl0Ci0gIGRvZXNuJ3Qgc2V0IHRoZSB3cml0ZSBwcm90ZWN0IGJpdCBmb3IgUUlDODAvUUlDNDAgY2FydHJpZGdlcy4KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMy4wNCAwNi8xMS85NyA9PT09PQotLSBJZiBwb3NpdGlvbmluZyB3aXRoIGZhc3Qgc2Vla2luZyBmYWlscyBmYWxsIGJhY2sgdG8gYSBzbG93IHNlZWsKLSAgYmVmb3JlIGdpdmluZyB1cC4KLS0gKG5lYXJseSkgbm8gcmV0cmllcyBvbiAibm8gZGF0YSBlcnJvcnMiIHdoZW4gdmVyaWZ5aW5nIGFmdGVyCi0gIGZvcm1hdHRpbmcuIEltcHJvdmVkIHR1bmluZyBvZiB0aGUgYmFkIHNlY3RvciBtYXAgYWZ0ZXIgZm9ybWF0dGluZy4KLS0gdGhlIGRpcmVjdG9yeSBsYXlvdXQgaGFzIGNoYW5nZWQgYWdhaW4gdG8gYWxsb3cgZm9yIGVhc2llciBrZXJuZWwKLSAgaW50ZWdyYXRpb24KLS0gTW9kdWxlIHBhcmFtZXRlciAiZnRhcGVfdHJhY2luZyIgbm93IGlzIGNhbGxlZCAiZnRfdHJhY2luZyIgYmVjYXVzZQotICB0aGUgImZ0YXBlX3RyYWNpbmciIHZhcmlhYmxlIGhhcyB0aGUgdmVyc2lvbiBjaGVja3N1bSBhdHRhY2hlZCB0byBpdC4KLS0gYC9wcm9jL2Z0YXBlJyBpbnRlcmZhY2UgZm9yIDIuMC4qIGtlcm5lbHMuIGAvcHJvYy9mdGFwZScgbm8gbG9uZ2VyCi0gIGlzIGEgZGlyZWN0b3J5IGJ1dCBhIGZpbGUgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIGZvcm1lcmx5Ci0gIHByb3ZpZGVkIGluIHNlcGFyYXRlIGZpbGVzIHVuZGVyIHRoZSBgL3Byb2MvZnRhcGUvJyBkaXJlY3RvcnkuCi0tIE1vc3Qgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoYXZlIGJlZW4gcHJlZml4ZWQgYnkgIkNPTkZJR19GVF8iCi0gIGluIHByZXBhcmF0aW9uIG9mIHRoZSBrZXJuZWwgaW5jbHVzaW9uLiBUaGUgTWFrZWZpbGVzIHVuZGVyCi0gICIuL2Z0YXBlLyIgc2hvdWxkIGJlIGRpcmVjdGx5IHVzYWJsZSBieSB0aGUga2VybmVsLgotLSBUaGUgTU9EVkVSU0lPTlMgc3R1ZmYgaXMgbm93IGF1dG8tZGV0ZWN0ZWQuCi0tIEJyb2tlIGJhY2tzbGFzaGVkIG11bHRpIGxpbmUgb3B0aW9ucyBpbiBNQ09ORklHIGludG8gc2VwYXJhdGUgbGluZXMKLSAgdXNpbmcgR05VLW1ha2UncyAiKz0iIGZlYXR1cmUuCi0tIFRoZSBodG1sIGFuZCBkdmkgdmVyc2lvbiBvZiB0aGUgbWFudWFsIGlzIG5vdyBpbnN0YWxsZWQgdW5kZXIKLSAgJy91c3IvZG9jL2Z0YXBlYCB3aXRoICdtYWtlIGluc3RhbGxgCi0tIE5ldyBTTVAgZGVmaW5lIGluIE1DT05GSUcuIGZ0YXBlIHdvcmtzIHdpdGggU01QIGlmIHRoaXMgaXMgZGVmaW5lZC4KLS0gYXR0ZW1wdCB0byBjb3BlIHdpdGggImV4Y2Vzc2l2ZSBvdmVycnVuIGVycm9ycyIgYnkgZ3JhZHVhbGx5Ci0gIGluY3JlYXNpbmcgRkRDIEZJRk8gdGhyZXNob2xkLiBCdXQgdGhpcyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSB0b28KLSAgbXVjaCBhbiBlZmZlY3QuCi0tIE5ldyBsb2FkIHRpbWUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgImZ0X2ZkY19yYXRlX2xpbWl0Ii4gSWYgeW91Ci0gIGVuY291bnRlciB0b28gbWFueSBvdmVycnVuIGVycm9ycyB3aXRoIGEgMk1iIGNvbnRyb2xsZXIgdGhlbiB5b3UKLSAgbWlnaHQgd2FudCB0byBzZXQgdGhpcyB0byAxMDAwLgotLSBvdmVycnVuIGVycm9ycyBvbiB0aGUgbGFzdCBzZWN0b3IgaW4gYSBzZWdtZW50IHNvbWV0aW1lcyByZXN1bHQgaW4KLSAgYSB6ZXJvIERNQSByZXNpZHVlLiBEdW5ubyB3aHksIGJ1dCBjb21wZW5zYXRlIGZvciBpdC4KLS0gdGhlcmUgd2VyZSBzdGlsbCBmZGNfcmVhZCgpIHRpbWVvdXQgZXJyb3JzLiBJIHRoaW5rIEkgaGF2ZSBmaXhlZCBpdAotICBub3csIHBsZWFzZSBGSVhNRS4KLS0gU29tZXRpbWVzIGZ0YXBlX3dyaXRlKCkgZmFpbGVkIHRvIHJlLXN0YXJ0IHRoZSB0YXBlIGRyaXZlIHdoZW4gYQotICBzZWdtZW50IHdpdGhvdXQgYSBnb29kIHNlY3RvciB3YXMgcmVhY2hlZCAoIndhaXQgZm9yIGVtcHR5IHNlZ21lbnQKLSAgZmFpbGVkIikuIFRoaXMgaXMgZml4ZWQuIEVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciA+IFFJQy0zMDEwLgotLSBzZnRhcGUgKGFrYSBmdGFwZS0yLngpIGhhcyB2YW5pc2hlZC4gSSBkaWRuJ3Qgd29yayBvbiBpdCBmb3IKLSAgYWdlcy4gSXQgaXMgcHJvYmFibHkgc3RpbGwgcG9zc2libGUgdG8gdXNlIHRoZSBvbGQgY29kZSB3aXRoCi0gIGZ0YXBlLTMuMDQsIGlmIG9uZSByZWFsbHkgbmVlZHMgaXQgKEJVVCBSRUNPTVBJTEUgSVQpCi0tIHpmdGFwZSBubyBsb25nZXIgYWx0ZXJzIHRoZSBjb250ZW50cyBvZiBhbHJlYWR5IGV4aXN0aW5nIHZvbHVtZQotICB0YWJsZSBlbnRyaWVzLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBmaWxsIGluIG1pc3NpbmcgZmllbGRzLAotICBsaWtlIHRpbWUgc3RhbXBzIHVzaW5nIHNvbWUgdXNlciBzcGFjZSBwcm9ncmFtLgotLSAuL2NvbnRyaWIvdnRibGMvIGNvbnRhaW5zIHN1Y2ggYSBwcm9ncmFtLgotLSBuZXcgcGVybCBzY3JpcHQgLi9jb250cmliL3NjcmlwdHMvbGlzdHRhcGUgdGhhdCBsaXN0IHRoZSBjb250ZW50cyBvZiBhCi0gIGZsb3BweSB0YXBlIGNhcnRyaWRnZSBwYXJzaW5nIHRoZSBvdXRwdXQgb2YgIm10IHZvbGluZm8iICsgIm10IGZzZiIKLS0gdGhlIE1UV0VPRiBpbXBsZW1lbnRhdGlvbiBoYXMgY2hhbmdlZCBhIGxpdHRsZSBiaXQgKGFmdGVyIEkgaGFkIGEKLSAgbG9vayBhdCBhbWFuZGEpLiBDYWxsaW5nIE1UV0VPRiB3aGlsZSB0aGUgdGFwZSBpcyBzdGlsbCBoZWxkIG9wZW4KLSAgYWZ0ZXIgd3JpdGluZyBzb21ldGhpbmcgdG8gdGhlIHRhcGUgbm93IHdpbGwgdGVybWluYXRlIHRoZSBjdXJyZW50Ci0gIHZvbHVtZSwgYW5kIHN0YXJ0IGEgbmV3IG9uZSBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KLS0gdGhlIHZvbHVtZSB0YWJsZSBtYWludGFpbmVkIGJ5IHpmdGFwZSBub3cgaXMgYSBkb3VibHkgbGlua2VkIGxpc3QKLSAgdGhhdCBncm93cyBkeW5hbWljYWxseSBhcyBuZWVkZWQuCi0KLSAgZm9ybWF0dGluZyBmbG9wcHkgdGFwZSBjYXJ0cmlkZ2VzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAqIHRoZXJlIGlzIGEgbmV3IHVzZXIgc3BhY2UgZm9ybWF0dGluZyBwcm9ncmFtIHRoYXQgZG9lcyBtb3N0IG9mIHRoZQotICAgIGRpcnR5IHdvcmsgaW4gdXNlciBzcGFjZSAoYXV0by1kZXRlY3QsIGNvbXB1dGluZyB0aGUgc2VjdG9yCi0gICAgY29vcmRpbmF0ZXMsIGFkanVzdGluZyB0aW1lIHN0YW1wcyBhbmQgc3RhdGlzdGljcykuIEl0IGhhcyBhCi0gICAgc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuCi0gICogZnRhcGUtZm9ybWF0Lm8gaGFzIHZhbmlzaGVkLCBpdCBoYXMgYmVlbiBmb2xkZWQgaW50byB0aGUgbG93IGxldmVsCi0gICAgZnRhcGUubyBtb2R1bGUsIGFuZCB0aGUgaW9jdGwgaW50ZXJmYWNlIGludG8gemZ0YXBlLm8uIE1vc3Qgb2YgdGhlCi0gICAgY29tcGxpY2F0ZWQgc3R1ZmYgaGFzIGJlZW4gbW92ZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgd2FzIG5vCi0gICAgbmVlZCBmb3IgYSBzZXBhcmF0ZSBtb2R1bGUgYW55bW9yZS4KLSAgKiB0aGVyZSBpcyBhIG5ldyBpb2N0bCBNVElPQ0ZUQ01EIHRoYXQgc2VuZHMgYSBiYXJlIFFJQy0xMTcgY29tbWFuZAotICAgIHRvIHRoZSB0YXBlIGRyaXZlLgotICAqIHRoZXJlIGlzIGEgbmV3IG1tYXAoKSBmZWF0dXJlIHRvIG1hcCB0aGUgZG1hIGJ1ZmZlcnMgaW50byB1c2VyCi0gICAgc3BhY2UgdG8gYmUgdXNlZCBieSB0aGUgdXNlciBsZXZlbCBmb3JtYXR0aW5nIHByb2dyYW0uCi0gICogRm9ybWF0dGluZyBvZiB5ZXQgdW5mb3JtYXR0ZWQgb3IgdG90YWxseSBkZWdhdXNzZWQgY2FydHJpZGdlcwotICAgIHNob3VsZCBiZSBwb3NzaWJsZSBub3cuIEZJWE1FLgotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0zLjAzYiwgPGZvcmdvdCB0aGUgZXhhY3QgZGF0ZT4gPT09PQotCi1mdGFwZS0zLjAzYiB3YXMgcmVsZWFzZWQgYXMgYSBiZXRhIHJlbGVhc2Ugb25seS4gSXRzIG1haW4gbmV3IGZlYXR1cmUKLXdhcyBzdXBwb3J0IG9mIHRoZSBESVRUTy0yR0IgZHJpdmUuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkgcmV2ZXJzZQotZW5naW5lZXJpbmcgZG9uZSBieSA8ZmlsbCBpbiBoaXMgbmFtZT4gYWZ0ZXIgSW9tZWdhIGZhaWxlZCB0byBzdXBwb3J0Ci1mdGFwZS4gQWx0aG91Z2ggdGhleSBoYWQgcHJvbWlzZWQgdG8gZG8gc28gKHRoaXMgbWFrZXMgbWUgZmVlbCBhIGJpdAotc2FkIGFuZCB1bmNvbWZvcnRhYmxlIGFib3V0IElvbWVnYSkuCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTMuMDNhLCAyMi8wNS85NyA9PT09Ci0KLS0gRmluYWxseSBmaXhlZCBhdXRvLXVuLWxvYWRpbmcgb2YgbW9kdWxlcyBmb3Iga2VybmVscyA+IDIuMS4xOAotLSBBZGQgYW4gInVuaW5zdGFsbCIgdGFyZ2V0IHRvIHRoZSBNYWtlZmlsZQotLSByZW1vdmVkIHRoZSBrZHRpbWUgaGFjawotLSB0ZXhpMnd3dyBkaWRuJ3QgcHJvcGVybHkgc2V0IHRoZSBiYWNrLXJlZmVyZW5jZSBmcm9tIGEgZm9vdG5vdGUgYmFjawotICB0byB0aGUgcmVndWxhciB0ZXh0LgotCi0gIHpmdGFwZSBzcGVjaWZpYwotICAtLS0tLS0tLS0tLS0tLS0KLSAgKiBoaWRlIHRoZSBvbGQgY29tcHJlc3Npb24gbWFwIHZvbHVtZS4gVGFwZXIgZG9lc24ndCBhY2NlcHQgdGhlCi0gICAgcHJlc2VuY2Ugb2Ygbm9uLVRhcGVyIHZvbHVtZXMgYW5kIFRhcGVyLXdyaXR0ZW4gdm9sdW1lIG9uIHRoZSBzYW1lCi0gICAgdGFwZS4KLSAgKiBFT0QgKEVuZCBPZiBEYXRhKSBoYW5kbGluZyB3YXMgc3RpbGwgYnJva2VuOiB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IKLSAgICBpcyB0byByZXR1cm4gYSB6ZXJvIGJ5dGUgY291bnQgYXQgdGhlIGZpcnN0IGF0dGVtcHQgdG8gcmVhZCBwYXN0Ci0gICAgRU9ELCByZXR1cm4gYSB6ZXJvIGJ5dGUgY291bnQgYXQgdGhlIHNlY29uZCBhdHRlbXB0IHRvIHJlYWQgcGFzdAotICAgIEVPRCBhbmQgVEhFTiByZXR1cm4gLUVJTy4KLSAgCi0gIGZ0YXBlLWZvcm1hdCBzcGVjaWZpYwotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgKiBEZXRlY3Rpb24gb2YgUUlDLTQwIGNhcnRyaWRnZXMgaW4gc2VsZWN0X3RhcGVfZm9ybWF0KCkgd2FzIGJyb2tlbgotICAgIGFuZCBtYWRlIGl0IGltcG9zc2libGUgdG8gZm9ybWF0IFFJQy0zMDEwLzMwMjAgY2FydHJpZGdlcy4KLSAgKiBUaGVyZSBhcmUgc3RyYW5nZSAiVFItMSBFeHRyYSIgY2FydHJpZGdlcyBvdXQgdGhlcmUgd2hpY2ggd2VyZW4ndAotICAgIGRldGVjdGVkIHByb3Blcmx5IGJlY2F1c2UgdGhlIGRvbid0IHN0cmljdGx5IGNvbmZvcm0gdG8gdGhlCi0gICAgUUlDLTgwLCBSZXYuIE4sIHNwZWMuCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTMuMDMsIDMwLzA0Lzk3ID09PT09Ci0KLS0gUmVtb3ZlZCBrZXJuZWwgaW50ZWdyYXRpb24gY29kZSBmcm9tIHRoZSBwYWNrYWdlLiBJIHBsYW4gdG8gcHJvdmlkZQotICBhIHBhY2thZ2UgdGhhdCBjYW4gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBzdG9jayBrZXJuZWwgc2VwYXJhdGVseQotICAoaG9wZWZ1bGx5IHNvb24pLgotICBBcyBhIHJlc3VsdCwgYSBzaW1wbGUgYG1ha2UnIGNvbW1hbmQgbm93IHdpbGwgYnVpbGQgZXZlcnl0aGluZy4KLS0gQUxMIGNvbXBpbGUgdGltZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGF2ZSBiZWVuIG1vdmVkIHRvIHRoZSBmaWxlCi0gIGBNQ09ORklHJy4KLS0gUXVpdGUgYSBmZXcgYGxvdyBsZXZlbCcgY2hhbmdlcyB0byBhbGxvdyBmb3JtYXR0aW5nIG9mIGNhcnRyaWRnZXMuCi0tIGZvcm1hdHRpbmcgaXMgaW1wbGVtZW50ZWQgYXMgYSBzZXBhcmF0ZSBtb2R1bGUgYGZ0YXBlLWZvcm1hdC5vJy4gVGhlCi0gIG1vZGlmaWVkIGBtdCcgcHJvZ3JhbSBjb250YWlucyBzYW1wbGUgY29kZSB0aGF0IHNob3dzIGhvdyB0byB1c2UgaXQuCi0tIFRoZSBWRlMgaW50ZXJmYWNlIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIGBmdGFwZS5vJyBtb2R1bGUgdG8gdGhlCi0gIGhpZ2ggbGV2ZWwgbW9kdWxlcyBgemZ0YXBlLm8nIHJlc3AuIGBzZnRhcGUubycuIGBmdGFwZS5vJyBjb250YWlucwotICB0aGUgaGFyZHdhcmUgc3VwcG9ydCBvbmx5LgotLSBBIGJpdCBvZiAvcHJvYyBzdXBwb3J0IGZvciBrZXJuZWxzID4gMi4xLjI4Ci0tIE1vdmVkIGRvY3VtZW50YXRpb24gdG8gRG9jIHN1YmRpci4gSU5TVEFMTCBub3cgY29udGFpbnMgc29tZSByZWFsCi0gIGluc3RhbGxhdGlvbiBub3Rlcy4KLS0gYGluc3RhbGwnIHRhcmdldCBpbiBNYWtlZmlsZS4KLQotemZ0YXBlIHNwZWNpZmljOgotLS0tLS0tLS0tLS0tLS0tLQotCi0tIHpmdGFwZSB3b3JrcyBmb3IgbGFyZ2UgY2FydHJpZGdlcyBub3cgKCA+IDJeMzEgYnl0ZXMpCi0tIE1USU9DVk9MSU5GTyBhbmQgTVRJT0NHRVRTSVpFIG5vdyByZXR1cm4gdGhlIHNpemUgaW4gS0lMT0JZVEVTLAotICBOTyBMT05HRVIgaW4gYnl0ZXMuCi0KLS0gcGVybWlzc2lvbnMgZm9yIHdyaXRlIGFjY2VzcyB0byBhIGNhcnRyaWRnZSBoYXZlIGNoYW5nZWQ6Ci0gICogemZ0YXBlIG5vdyBhbHNvIHRha2VzIHRoZSBmaWxlIGFjY2VzcyBtb2RlIGludG8gYWNjb3VudAotICAqIHpmdGFwZSBubyBsb25nZXIgYWxsb3dzIHdyaXRpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcmVjb3JkZWQKLSAgICBtZWRpYS4gVGhlIHRhcGUgaGFzIHRvIGJlIHBvc2l0aW9uZWQgYXQgQk9UIG9yIEVPRCBmb3Igd3JpdGUKLSAgICBhY2Nlc3MuCi0KLS0gTVRCU0YgaGFzIGNoYW5nZWQuIEl0IHVzZWQgdG8gcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgcHJldmlvdXMgZmlsZSB3aGVuIGNhbGxlZCB3aXRoIGNvdW50IDEuIFRoaXMgd2FzIGRpZmZlcmVudCBmcm9tIHRoZQotICBleHBlY3RlZCBiZWhhdmlvciBmb3Igb3RoZXIgVW4qeCB0YXBlIGRyaXZlcnMgKGkuZS4gU0NTSSkuIE1UQlNGCi0gIHdpdGggY291bnQgMSBzaG91bGQgbWVyZWx5IHBvc2l0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQKLSAgdm9sdW1lLiBGaXhlZC4gQXMgYSByZXN1bHQsIGB0YXIgLS12ZXJpZnknIG5vdyBwcm9kdWNlcyB0aGUgZGVzaXJlZAotICByZXN1bHQ6IGl0IHZlcmlmaWVzIHRoZSBsYXN0IHdyaXR0ZW4gdm9sdW1lLCBub3QgdGhlIHByZS1sYXN0Ci0gIHdyaXR0ZW4gdm9sdW1lLgotCi0tIFRoZSBjb21wcmVzc2lvbiBtYXAgaGFzIHZhbmlzaGVkIC0tPiBubyBuZWVkIGZvciBgbXQgZXJhc2UnIGFueQotICBtb3JlLiBGYXN0IHNlZWtpbmcgaW4gYSBjb21wcmVzc2VkIHZvbHVtZSBpcyBzdGlsbCBiZSBwb3NzaWJsZSwgYnV0Ci0gIHRha2VzIHNsaWdodGx5IGxvbmdlci4gQXMgYSBzaWRlIGVmZmVjdCwgeW91IG1heSBleHBlcmllbmNlIGFuCi0gIGFkZGl0aW9uYWwgdm9sdW1lIHNob3dpbmcgdXAgaW4gZnJvbnQgb2YgYWxsIG90aGVycyBmb3Igb2xkCi0gIGNhcnRyaWRnZXMuIFRoaXMgaXMgdGhlIHRhcGUgdm9sdW1lIHRoYXQgaG9sZHMgdGhlIGNvbXByZXNzaW9uIG1hcC4KLQotLSBUaGUgY29tcHJlc3Npb24gc3VwcG9ydCBmb3IgemZ0YXBlIGhhcyBiZWVuIG1vdmVkIHRvIGEgc2VwYXJhdGUKLSAgbW9kdWxlIGB6ZnQtY29tcHJlc3NvcicuIERPTidUIGZvcmdldCB0byBsb2FkIGl0IGJlZm9yZSB0cnlpbmcgdG8KLSAgcmVhZCBiYWNrIGNvbXByZXNzZWQgdm9sdW1lcy4gVGhlIHN0b2NrIGB6ZnRhcGUubycgbW9kdWxlIHByb2JlcyBmb3IKLSAgdGhlIG1vZHVsZSBgemZ0LWNvbXByZXNzb3InIHVzaW5nIHRoZSBrZXJuZWxkIG1lc3NhZ2UgY2hhbm5lbDsgeW91Ci0gIGhhdmUgdG8gaW5zdGFsbCBgemZ0LWNvbXByZXNzb3IubycgaW4gYSBwbGFjZSB3aGVyZSBtb2Rwcm9iZSBjYW4KLSAgZmluZCBpdCBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcy4KLQotLSBOZXcgZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCB0cmllcyB0byBnZXQgdGhlIGJyb2tlbiBkb3duIEdNVCB0aW1lCi0gIGZyb20gdXNlciBzcGFjZSB2aWEgYSBrZXJuZWwgZGFlbW9uIG1lc3NhZ2UgY2hhbm5lbC4gWW91IG5lZWQgdG8KLSAgY29tcGlsZSBhbmQgc3RhcnQgdGhlIGBrZHRpbWUnIGRhZW1vbiBjb250YWluZWQgaW4gdGhlIGNvbnRyaWIKLSAgZGlyZWN0b3J5IHRvIHVzZSBpdC4gTmVlZGVkICg/KSBmb3IgdGltZSBzdGFtcHMgaW4gdGhlIGhlYWRlcgotICBzZWdtZW50cyBhbmQgdGhlIHZvbHVtZSB0YWJsZS4KLQotLSB2YXJpYWJsZSBibG9jayBzaXplIG1vZGUgdmlhIE1UU0VUQkxLIDAKLQotLSBrZWVwIG1vZHVsZXMgbG9ja2VkIGluIG1lbW9yeSBhZnRlciB0aGUgYmxvY2sgc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkCi0KLXNmdGFwZSBzcGVjaWZpYzoKLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBlbmQgb2YgdGFwZSBoYW5kbGluZyBzaG91bGQgYmUgZml4ZWQsIGkuZS4gbXVsdGkgdm9sdW1lIGFyY2hpdmVzCi0gIHdyaXR0ZW4gd2l0aCBgYWZpbycgY2FuIGJlIHJlYWQgYmFjayBub3cuCi0KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMy4wMmEsIDA5LzAxLzk3ID09PT09Ci0KLU5vIGJpZyBuZXdzOgotLSBjYWxsIHpmdF9pbml0KCkgcmVzcC4gc2Z0X2luaXQoKSB3aGVuIGNvbXBpbGluZyB0aGUgZW50aXJlIHN0dWZmCi0gIGludG8gdGhlIGtlcm5lbCBpbWFnZS4KLS0gZml4IGJ1ZyBpbiBmdGFwZS1zZXR1cC5jIHdoZW4gTk9fVFJBQ0VfQVRfQUxMIHdhcyBkZWZpbmVkLgotLSBmaXggYnVnIGluIHNmdGFwZS1lb2YuYy96ZnRhcGUtZW9mLmMgZm9yIG9sZCBrZXJuZWxzICgxLjIuKikKLS0gYWRkIHN1cHBvcnQgZm9yIG5ldyBtb2R1bGUgaW50ZXJmYWNlIGZvciByZWNlbnQga2VybmVscwotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0zLjAyLCAxNi8xMi85NiA9PT09PQotLSBGaXhlZCB0aGUgYEZEQyB1bmxvY2sgY29tbWFuZCBmYWlsZWQnIGJ1ZyBpbiBmZGMtaW8uYy4gV2hlbiB0aGUgRklGTwotICB3YXMgYWxyZWFkeSBsb2NrZWQgd2hlbiBmdGFwZSB3YXMgbG9hZGVkLCBmdGFwZSBmYWlsZWQgdG8gdW5sb2NrIGl0LgotLSBGaXhlZCBjb21waWxhdGlvbiBvZiBgY29udHJpYi9nbnVtdCcuIEl0IG5vdyBmaW5kcyBgbXRpby5oJyBldmVuIGlmCi0gIGZ0YXBlIGlzIE5PVCBpbmNsdWRlZCBpbnRvIHRoZSBrZXJuZWwgc291cmNlIHRyZWUuCi0tIGZjLTEwLmM6IGluY2x1ZGUgPGFzbS9pby5oPiBmb3IgaW5iKCkgYW5kIG91dGIoKS4KLS0gZnRhcGUvc2Z0YXBlL3pmdGFwZTogYWxsIGdsb2JhbCB2YXJpYWJsZSBub3cgaGF2ZSBlaXRoZXIgYSBgZnRhcGVfJywKLSAgYSBgZnRfJywgYHNmdF8nLCBgemZ0Xycgb3IgYHFpY18nIHByZWZpeCB0byBwcmV2ZW50IG5hbWUgY2xhc2hlcwotICB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgd2hlbiBpbmNsdWRpbmcgZnRhcGUgaW50byB0aGUga2VybmVsCi0gIHNvdXJjZSB0cmVlLgotLSBLZXJuZWxkIHN1cHBvcnQgaGFzIGNoYW5nZWQuIGBmdGFwZScgbm93IHNlYXJjaGVzIGZvciBhIG1vZHVsZQotICBgZnRhcGUtZnJvbnRlbmQnIHdoZW4gbm9uZSBvZiB0aGUgZnJvbnRlbmQgKGBzZnRhcGUnIG9yIGB6ZnRhcGUnKSBpcwotICBsb2FkZWQuIFBsZWFzZSByZWZlciB0byB0aGUgYEluc3RhbGxhdGlvbi9Mb2FkaW5nIGZ0YXBlJyBzZWN0aW9uIG9mCi0gIHRoZSBUZVhpbmZvIG1hbnVhbC4KLS0gQWRkIGxvYWQgcmVzcC4gYm9vdC10aW1lIGNvbmZpZ3VyYXRpb24gb2YgZnRhcGUuIFRoZXJlIGFyZSBub3cKLSAgdmFyaWFibGVzIGZ0X2ZkY19iYXNlLCBmdF9mZGNfZG1hIGFuZCBmdF9mZGNfaXJxIGNvcnJlc3BvbmRpbmcgdG8KLSAgdGhlIGZvcm1lciBGRENfQkFTRSBldGMuIGNvbXBpbGUgdGltZSBkZWZpbml0aW9ucy4gT25lIGNhbiBhbHNvIHVzZQotICB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyIGlmIGl0IGlzCi0gIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gQWxzbywgdGhlIEZDLTEwL0ZDLTIwIHN1cHBvcnQgaXMgbG9hZC10aW1lCi0gIGNvbmZpZ3VyYWJsZSBub3cgYXMgd2VsbCBhcyB0aGUgTUFDSC1JSSBoYWNrIChmdF9wcm9iZV9mYzEwLAotICByZXNwLiBmdF9tYWNoMikuIFBsZWFzZSByZWZlciB0byB0aGUgc2VjdGlvbiBgSW5zdGFsbGF0aW9uL0NvbmZpZ3VyZQotICBmdGFwZScgb2YgdGhlIFRlWGluZm8gbWFudWFsLgotLSBJIHJlbW92ZWQgdGhlIE1PRFZFUlNJT05TIG9wdGlvbiBmcm9tIGBNYWtlZmlsZS5tb2R1bGUnLiBMZXQgbWUgYWxvbmUKLSAgd2l0aCBmdGFwZSBhbmQgTU9EVkVSU0lPTlMgdW5sZXNzIHlvdSBpbmNsdWRlIHRoZSBmdGFwZSBzb3VyY2VzIGludG8KLSAgdGhlIGtlcm5lbCBzb3VyY2UgdHJlZS4KLS0gbmV3IHZlbmRvcnMgaW4gYHZlbmRvcnMuaCc6Ci0gICogSFAgQ29sb3JhZG8gVDMwMDAgCi0gICogQ29tQnl0ZSBEb3VibGVQbGF5IChpbmNsdWRpbmcgYSBidWcgZml4IGZvciB0aGVpciBicm9rZW4KLSAgICBmb3JtYXR0aW5nIHNvZnR3YXJlLCB0aGFua3MgdG8gd2hyYXZlbkBuamFja24uY29tKQotICAqIElvbWVnYSBESVRUTyAyR0lHLiBOT1RFOiB0aGlzIGRyaXZlIGNhbm5vdCB3b3JrIHdpdGggZnRhcGUgYmVjYXVzZQotICAgIHRoZSBsb2dpY2FsIGRhdGEgbGF5b3V0IG9mIHRoZSBjYXJ0cmlkZ2VzIHVzZWQgYnkgdGhpcyBkcml2ZSBkb2VzCi0gICAgTk9UIGNvbmZvcm0gdG8gdGhlIFFJQyBzdGFuZGFyZHMsIGl0IGlzIGEgc3BlY2lhbCBJb21lZ2Egc3BlY2lmaWMKLSAgICBmb3JtYXQuIEkndmUgc2VudCBtYWlsIHRvIElvbWVnYSBidXQgZGlkbid0IHJlY2VpdmUgYW4gYW5zd2VyCi0gICAgeWV0LiBJZiB5b3Ugd2FudCB0aGlzIGRyaXZlIHRvIGJlIHN1cHBvcnRlZCBieSBmdGFwZSwgYXNrIElvbWVnYQotICAgIHRvIGdpdmUgbWUgaW5mb3JtYXRpb24gYWJvdXQgaXQuCi0tIHpmdGFwZToKLSAgKiByZS1pbnRyb2R1Y2VkIHRoZSBNVElPQ19aRlRBUEVfR0VUQkxLU1ogaW9jdGwgZm9yIGNvbXBhdGliaWxpdHkKLSAgICB3aXRoIHpmdGFwZSAxLjA2YSBhbmQgZWFybGllci4gUGxlYXNlIGRvbid0IHVzZSBpdCB3aGVuIHdyaXRpbmcKLSAgICBuZXcgc29mdHdhcmUsIHVzZSB0aGUgTVRJT0NWT0xJTkZPIGlvY3RsIGluc3RlYWQuCi0gICogTWFqb3Igb3ZlcmhhdWwgb2YgdGhlIGNvZGUgdGhhdCB1cGRhdGVzIHRoZSBoZWFkZXIgc2VnbWVudHMuIE5ldmVyCi0gICAgY2hhbmdlIHRoZSB0YXBlIGxhYmVsIHVubGVzcyBlcmFzaW5nIHRoZSB0YXBlLiBUaHVzIHdlIGFsbW9zdAotICAgIG5ldmVyIG5lZWQgdG8gd3JpdGUgdGhlIGhlYWRlciBzZWdtZW50cywgdW5sZXNzIHdlIHdvdWxkIG1vZGlmeQotICAgIHRoZSBiYWQgc2VjdG9yIG1hcCB3aGljaCBpc24ndCBkb25lIHlldC4gVXBkYXRpbmcgb2Ygdm9sdW1lIHRhYmxlCi0gICAgYW5kIGNvbXByZXNzaW9uIG1hcCBtb3JlIHNlY3VyZSBub3cgYWx0aG91Z2ggaXQgdGFrZXMgYSBiaXQKLSAgICBsb25nZXIuCi0gICogRml4ZWQgYnVnIHdoZW4gYWJvcnRpbmcgYSB3cml0ZSBvcGVyYXRpb24gd2l0aCBhIHNpZ25hbDogemZ0YXBlCi0gICAgbm93IGZpbmlzaGVzIHRoZSBjdXJyZW50IHZvbHVtZSAoaS5lLiB3cml0ZXMgYW4gZW9mIG1hcmtlcikgYXQgdGhlCi0gICAgY3VycmVudCBwb3NpdGlvbi4gSXQgZGlkbid0IGJlZm9yZSB3aGljaCBsZWQgdG8gc29tZWhvdyAqc3RyYW5nZSoKLSAgICBiZWhhdmlvciBpbiB0aGlzIGNhc2VzLgotICAqIEtlZXAgbW9kdWxlIGxvY2tlZCBpbiBtZW1vcnkgd2hlbiB1c2luZyBpdCB3aXRoICB0aGUgbm9uLXJld2luZGluZwotICAgIGRldmljZXMgYW5kIHRoZSB0YXBlIGlzIG5vdCBsb2dpY2FsIGF0IEJPVC4gTmVlZGVkIGZvciBrZXJuZWxkCi0gICAgc3VwcG9ydC4KLS0gc2Z0YXBlOgotICAqIEtlZXAgbW9kdWxlIGxvY2tlZCBpbiBtZW1vcnkgd2hlbiB1c2luZyBpdCB3aXRoICB0aGUgbm9uLXJld2luZGluZwotICAgIGRldmljZXMgYW5kIHRoZSB0YXBlIGlzIG5vdCBsb2dpY2FsIGF0IEJPVC4gTmVlZGVkIGZvciBrZXJuZWxkCi0gICAgc3VwcG9ydC4KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMy4wMSwgMTQvMTEvOTYgPT09PT0KLQotLSBGaXhlZCBzaWxseSBidWdzIGluIGZ0YXBlLTMuMDA6Ci0gICogTUFLRURFVi5mdGFwZTogbWFqb3IgZGV2aWNlIG51bWJlciBtdXN0IGJlIDI3LCBub3QgMjMgCi0gICogc2Z0YXBlL3NmdGFwZS1yZWFkLmM6IHNmdGFwZV9yZWFkX2hlYWRlcl9zZWdtZW50cygpIGNhbGxlZCAKLSAgICBpdHNlbGYgcmVjdXJzaXZlbHkgaW5zdGVhZCBvZiBjYWxsaW5nIGZ0YXBlX3JlYWRfaGVhZGVyX3NlZ21lbnQoKQotICAqIHpmdGFwZS9xaWMtdnRibC5oOiBjb252ZXJzaW9uIG9mIGZ0YXBlJ3MgZmlsZSBtYXJrcyB0byB6ZnRhcGUncwotICAgIGludGVybmFsIHZvbHVtZSB0YWJsZSB3YXMgYnJva2VuLgotICAqIHBhdGNoZXMvMi54LngvbGludXgtMi4wLjIxLmRpZjogbXkgUkNTIChyZXNwLiBDVlMpIHN5c3RlbSByZXBsYWNlZAotICAgIHRoZSBgJFJldmlzb246JyBldGMuIG1hY3JvcyBpbiB0aGUgYGZ0YXBlLmgnIGNvbmNlcm5pbmcgcGFydCBvZiB0aGUKLSAgICBwYXRjaCA6LSggRml4ZWQuCi0gICogaW5mby9mdGFwZS5pbmZvOiBGaXhlZCBtaXNzcGVsbGluZ3MgKGBjcCcgPC0+IGBjcCAtcicgZXRjLikKLSAgKiB3aGVuIGZ0YXBlL3NmdGFwZSBvciBmdGFwZS96ZnRhcGUgd2FzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB0aGUKLSAgICB2YXJpYWJsZSBmdGFwZV9zdGF0dXMgd2FzIGRlY2xhcmVkIHR3aWNlLiBGaXhlZC4KLSAgKiByZW1vdmVkIHJlZmVyZW5jZSB0byB1bmRlY2xhcmVkIHZhcmlhYmxlIGtlcm5lbF92ZXJzaW9uIHdoZW4gbm90Ci0gICAgY29tcGlsaW5nIGFzIG1vZHVsZQotICAqIGZpeGVkIGEgYnVnIGludHJvZHVjZWQgYnkgdGhlIHVzZSBvZiBiaXQtZmllbGRzIGZvciBzb21lIGZsYWdzCi0gICAgKGkuZS4gd3JpdGVfcHJvdGVjdGVkLCBub19jYXJ0cmlkZ2UsIGZvcm1hdHRlZCkKLSAgKiBmbGFnIGBoZWFkZXJfcmVhZCcgaXMgbm93IHJlc2V0IGNvcnJlY3RseSB0byB6ZXJvIHdoZW4gdGFwZSBpcwotICAgIHJlbW92ZWQuCi0tIGZpeGVkIGEgYnVnIGluIHNmdGFwZS9zZnRhcGUtZW9mLmMgdGhhdCB3YXMgYWxyZWFkeSBpbiB0aGUgb3JpZ2luYWwKLSAgZnRhcGUgY29kZS4gTVRGU0YvQlNGIHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBwb3NpdGlvbmVkCi0gIHJpZ2h0IGJlZm9yZSB0aGUgZmlsZSBtYXJrICh0aGluayBvZiB0YXIpCi0tIENoYW5nZWQgVFJBQ0UgbWFjcm9zIChmb2xsb3dpbmcgYSBzdWdnZXN0aW9uIG9mIE1hcmNpbiBEYWxlY2tpKSB0byB1c2UKLSAgdGhlIHByZWRlZmluZWQgX19GVU5DVElPTl9fIG1hY3JvIG9mIEdDQy4gU3BhcmVzIGFib3V0IDRrIG9mIGNvZGUuCi0tIGFkZGVkIG5ldyB2ZW5kb3IgaWQgZm9yIElvbWVnYSBESVRUTyAyR0lHCi0tIGZpeGVkIGEgYnVnIGFscmVhZHkgcHJlc2VudCBpbiB6ZnRhcGUtMS4wNiB3aGVuIGFib3J0aW5nIGEgd3JpdGUKLSAgd2l0aCBhIHNpZ25hbDogd2Ugbm93IGZpbmlzaCB0aGUgY3VycmVudCB2b2x1bWUgYXQgdGhhdAotICBwb3NpdGlvbi4gSGVhZGVyIHNlZ21lbnRzIHJlbWFpbiBOT1QgdXAgdG8gZGF0ZSB1bnRpbCBhbiBleHBsaWNpdCBjYWxsCi0gIHRvIE1UUkVXIG9yIE1UT0ZGTCBpcyBkb25lLiAgCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTMuMDAsIDE0LzEwLzk2ID09PT09Ci0KLS0gTWVyZ2VkIGZ0YXBlIHdpdGggemZ0YXBlLiBUaGVyZSBhcmUgdGhyZWUgbW9kdWxlcyBub3c6Ci0gIGZ0YXBlIGZvciB0aGUgaGFyZHdhcmUgc3VwcG9ydCwgc2Z0YXBlIGZvciB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCi0gIG9yaWdpbmFsIGZ0YXBlIGVvZiBtYXJrIHN0dWZmIGFuZCB6ZnRhcGUgdGhhdCBpbXBsZW1lbnRzIHpmdGFwZSdzIHdheQotICBvZiBoYW5kbGluZyB0aGluZ3MgKGNvbXByZXNzaW9uLCB2b2x1bWUgdGFibGUsIHRhcGUgYmxvY2tzIG9mCi0gIGNvbnN0YW50IGxlbmd0aCkKLS0gRG9jdW1lbnRhdGlvbiBpbiBUZVhpbmZvIGZvcm1hdCBpbiB0aGUgYGluZm8nIHN1YmRpcmVjdG9yeS4KLS0gTmV3IGlvY3RscyBmb3IgemZ0YXBlLiBTZWUgemZ0YXBlL3pmdGFwZS5oCi0tIER1bW15IGZvcm1hdHRpbmcgaW9jdGwgZm9yIGZ0YXBlLiBTZWUgZnRhcGUuaAotLSBLZXJuZWwgcGF0Y2ggZmlsZXMgZm9yIHRoZSAyLiouKiBzZXJpZXMgdG8gaW5jbHVkZSBmdGFwZS0zLjAwIGluIHRoZQotICBrZXJuZWwgc291cmNlIHRyZWUuIFRoZXNlIGluY2x1ZGVzIGEga2VybmVsIGNvbXBhdGlibGUgQ29uZmlnLmluCi0gIHNjcmlwdCBhbmQgZmFpcmx5IGxhcmdlIG9ubGluZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGtlcm5lbCBjb25maWd1cmUKLSAgc2NyaXB0LgotLSBTdXBwb3J0IGZvciBjb21waWxpbmcgd2l0aCBMaW51eC0xLjIuMTMuIAotLSBNb2RpZmllZCBHTlUgbXQgZnJvbSB0aGVpciBjcGlvIHBhY2thZ2UgdGhhdCBjYW4gaGFuZGxlIHRoZSBuZXcKLSAgaW9jdGxzLgotLSBmdGFwZS9zZnRhcGUvemZ0YXBlIGlzIGtlcm5lbGQgc2F2ZSBub3chCi0KLU5vdGVzIG9uIHNmdGFwZToKLS0gc2Z0YXBlIGltcGxlbWVudHMgdGhlIGVvZiBoYW5kbGluZyBjb2RlIG9mIHRoZSBvcmlnaW5hbCBmdGFwZS4gSWYKLSAgeW91IGxpa2UgdG8gc3RpY2sgd2l0aCB0aGUgb3JpZ2luYWwgZnRhcGUgc3R1ZmYsIHlvdSBoYXZlIHRvIHVzZQotICB0aGlzIG1vZHVsZSwgbm90IHpmdGFwZS4KLS0gc2Z0YXBlIGlzIGtlcm5lbGQgc2F2ZSwgdW5saWtlIHRoZSBvcmlnaW5hbCBmdGFwZS4KLS0gd2Uga2VlcCB0aGUgZW50aXJlIGhlYWRlciBzZWdtZW50IG5vdyBpbiBtZW1vcnksIHNvIG5vIG5lZWQgdG8gcmVhZAotICBpdCBiZWZvcmUgdXBkYXRpbmcgdGhlIGhlYWRlciBzZWdtZW50cy4gQWRkaXRpb25hbCBtZW1vcnkKLSAgY29uc3VtcHRpb246IDI1NiBieXRlcy4gCi0KLU5vdGVzIGZvciB6ZnRhcGU6Ci0tIHpmdGFwZSBoYXMgc3VwcG9ydCBmb3IgdGFwZXMgd2l0aCBmb3JtYXQgY29kZSA2IG5vdywgd2hpY2ggdXNlIGEKLSAgc2xpZ2h0bHkgZGlmZmVyZW50IHZvbHVtZSB0YWJsZSBmb3JtYXQgY29tcGFyZWQgd2l0aCBvdGhlciBmbG9wcHkKLSAgdGFwZXMuCi0tIG5ldyBpb2N0bHMgZm9yIHpmdGFwZS4gSGF2ZSBhIGxvb2sgYXQgemZ0YXBlL3pmdGFwZS5oCi0tIFRoZSBpbnRlcm5hbCB2b2x1bWUgdGFibGUgcmVwcmVzZW50YXRpb24gaGFzIGNoYW5nZWQgZm9yIHpmdGFwZS4gT2xkCi0gIGNhcnRyaWRnZXMgYXJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5LgotLSB6ZnRhcGUgbm8gbG9uZ2VyIHVzZXMgY29tcHJlc3Npb24gbWFwIHNlZ21lbnRzLCB3aGljaCBoYXZlIHZhbmlzaGVkCi0gIGZyb20gdGhlIFFJQyBzcGVjcywgYnV0IGNyZWF0ZXMgdm9sdW1lIHRhYmxlIGVudHJ5IHRoYXQgcmVzZXJ2ZXMKLSAgZW5vdWdoIHNwYWNlIGZvciB0aGUgY29tcHJlc3Npb24gbWFwLiAKLS0gemZ0YXBlIGlzIGtlcm5lbGQgc2F2ZSBub3cuCi0tIHdlIGtlZXAgdGhlIGVudGlyZSBoZWFkZXIgc2VnbWVudCBub3cgaW4gbWVtb3J5LCBzbyBubyBuZWVkIHRvIHJlYWQKLSAgaXQgYmVmb3JlIHVwZGF0aW5nIHRoZSBoZWFkZXIgc2VnbWVudHMuIEFkZGl0aW9uYWwgbWVtb3J5Ci0gIGNvbnN1bXB0aW9uOiAyNTYgYnl0ZXMuIAotCi1Ob3RlcyBmb3IgY29udHJpYi9nbnVtdDoKLS0gbW9kaWZpZWQgbXQgZnJvbSB0aGUgR05VIGNwaW8gcGFja2FnZSB0aGF0IHN1cHBvcnRzIGFsbCB0aGUgbmV3Ci0gIGlvY3RscyBvZiB6ZnRhcGUuCi1Ob3RlcyBmb3IgY29udHJpYi9zd2Fwb3V0OgotLSBUaGlzIGNvbnRhaW5zIHRoZSBzd2Fwb3V0LmMgcHJvZ3JhbSB0aGF0IHdhcyB3cml0dGVuIGJ5IEthaQotICBIYXJyZWtpbGRlLVBlZGVyc29uLiBJIHNpbXBseSBhZGRlZCBhIE1ha2VmaWxlLgotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjEwLCAxNC8xMC85NiA9PT09PQotCi1UaGUgZnRhcGUgbWFpbnRhaW5lciBoYXMgY2hhbmdlZC4gCi1LYWkgSGFycmVraWxkZS1QZXRlcnNlbiA8a2hwQGRvbHBoaW5pY3Mubm8+Ci1oYXMgcmVzaWduZWQgZnJvbSBtYWludGFpbmluZyBmdGFwZSwgYW5kIEksCi1DbGF1cy1KdXN0dXMgSGVpbmUgPGNsYXVzQG1vbW8ubWF0aC5yd3RoLWFhY2hlbi5kZT4sCi1oYXZlIHRha2VuIG92ZXIuCi0KLS0gQWRkZWQgc3VwcG9ydCBmb3IgdGFwZXMgd2l0aCBgZm9ybWF0IGNvZGUgNicsIGkuZS4gUUlDLTMwMjAgdGFwZXMKLSAgd2l0aCBtb3JlIHRoYW4gMl4xNiBzZWdtZW50cy4KLS0gbWVyZ2VkIGNoYW5nZXMgbWFkZSBieSBCYXMgTGFhcmhvdmVuIHdpdGggZnRhcGUtMi4wOS4gUmVmZXIKLSAgdG8gaGlzIHJlbGVhc2Ugbm90ZXMgYmVsb3cuIEkndmUgaW5jbHVkZWQgdGhlbSBpbnRvIHRoaXMKLSAgZmlsZSB1bmNoYW5nZWQgZm9yIHlvdXIgcmVmZXJlbmNlLgotLSBkaXNhYmxlZCBjYWxsIHN0YWNrIGJhY2sgdHJhY2UgZm9yIG5vdy4gVGhpcyBuZXcgZmVhdHVyZQotICBpbnRyb2R1Y2VkIGJ5IHRoZSBpbnRlcmltIHJlbGVhc2UgMi4wLnggc3RpbGwgc2VlbXMgdG8KLSAgYmUgYnVnZ3kuCi0tIFRyaWVkIHRvIG1pbmltaXplIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGZ0YXBlIHZlcnNpb24KLSAgdG8gYmUgaW5jbHVkZWQgaW50byB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGFuZCB0aGUgc3RhbmRhbG9uZQotICBtb2R1bGUgdmVyc2lvbi4KLS0gUmVpbnRyb2R1Y2VkIHN1cHBvcnQgZm9yIExpbnV4LTEuMi4xMy4gUGxlYXNlIHJlZmVyIHRvIHRoZQotICBJbnN0YWxsLWd1aWRlLiAKLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMi4wOSwgMTYvMDYvOTYgPT09PT0KLQotVGhlcmUgYXJlbid0IGFueSByZWFsbHkgYmlnIG5ld3MgaW4gdGhpcyByZWxlYXNlLCBtb3N0bHkganVzdCB0aGF0IEkKLSh0aGUgbWFpbnRhaW5lcikgaGF2ZSBjaGFuZ2VkIG15IGVtYWlsIGFkZHJlc3MgKGR1ZSB0byBhIG5ldyBqb2IpLiAgTXkKLW5ldyBhZGRyZXNzIGlzIDxraHBAZG9scGhpbmljcy5ubz4KLQotLSBUaGUgQ0xLXzQ4TUhaIGFuZCBGRENfODIwNzhTTCBvcHRpb25zIGhhcyBnb25lIChhbGwgMk1icHMgY2FyZHMgc2VlbQotICB0byB1c2UgYSA0OE1IeiBvc2NpbGxhdG9yIGFueXdheSBhbmQgSSBoYXZlbid0IGhlYXJkIG9mIGFuICdTTAotICBjaGlwIG91dCB0aGVyZSkuCi0tIFRoZSBTODIwNzhCIGhhcyBiZWVuIGBkb3duZ3JhZGVkJyB0byBpODIwNzdBQSBjb21wYWJpbGl0eS4KLS0gVEVTVElORyBvcHRpb24gcmV2aXZlZC4gIFJpZ2h0IG5vdywgaXQnbGwgZW5hYmxlIHRoZSAoc2VyaW91c2x5IGJyb2tlbikKLSAgMk1icHMgY29kZS4gIElmIHlvdSBlbmFibGUgaXQsIHlvdSdsbCBleHBlcmllbmNlIGEgdGFwZSBkcml2ZSB0aGF0J3MKLSAgKnJlYWxseSogb3V0IHRvIGx1bmNoIQotLSBTb21lIChib2xkKSBjaGFuZ2VzIGluIHRoZSBpbml0IGNvZGUuICBQbGVhc2Ugbm90aWZ5IG1lIGlmIHRoZXkKLSAgYnJlYWsgdGhpbmdzIGZvciB5b3UuCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTIuMDgsIDE0LzAzLzk2ID09PT09Ci0KLUlmIHlvdSBjb3JyZWN0IGEgcHJvYmxlbSB3aXRoIGZ0YXBlLCBwbGVhc2Ugc2VuZCB5b3VyIHBhdGNoIHRvCi1raHBAZG9scGhpbmljcy5ubyB0b28uCi0KLS0gVXBkYXRlZCB0byByZWZsZWN0IHRoYXQgTlJfTUVNX0xJU1RTIGlzIGdvbmUgaW4gMS4zLjc0Ci0tIFRlYWMgNzAwIGFkZGVkIHRvIGxpc3Qgb2Yga25vd24gZHJpdmVzLgotLSBUaGUgcmVnaXN0ZXJlZCBkZXZpY2UgbmFtZSBpcyBub3cgImZ0IiByYXRoZXIgdGhhbiAiZnRhcGUiLgotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjA3YSwgMTQvMDMvOTYgPT09PT0KLQotQnVnZml4ZXMgYnkgTWFyY2luIERhbGVja2kgPGRhbGVja2lAbmFtdTAzLmd3ZGcuZGU+OgotLSBJbiB0aGUgbGFzdCByZWxlYXNlIGl0IGp1c3QgY29tcGlsZWQgYWdhaW5zdCAxLjMuNzA7Ci0gIG5vdyB0aGUgcGFyYW1zIHRvIHJlcXVlc3RfaXJxKCkgYW5kIGZyZWVfaXJxIGFyZSgpIGFyZSBmaXhlZCwgc28gaXQgYWxzbyAKLSAgd29ya3MgaW4gMS4zLjczIDotKQotLSBTdXBwb3J0IGZvciBtb2R1bGVzIGlzIG5vdyBjb3JyZWN0IGZvciBuZXdlciBrZXJuZWxzLgotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjA3LCAwNC8wMy85NiA9PT09PQotCi0KLS0gZnRhcGUgdXBkYXRlZCB0byBjb21waWxlIGFnYWluc3QgMS4zLjcwLgotLSBJb21lZ2EgNzAwIGFuZCBXYW5ndGVrIDMyMDAgcmVjb2duaXNlZC4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjA2YiwgMTMvMDIvOTYgPT09PT0KLQotQW5vdGhlciBzaW1wbGUgYnVnZml4IHZlcnNpb24uCi0KLS0gSnVtYm8gNzAwIHJlY29nbmlzZWQuCi0tIFR5cG8gaW4gdmVuZG9ycy5oIGZpeGVkLgotCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTIuMDZhLCAxMC8wMi85NiA9PT09PQotCi1UaGlzIHJlbGVhc2UgaXMgYSBzaW1wbGUgYnVnZml4IHZlcnNpb24uCi0KLS0gTGludXgvU01QOiBmdGFwZSAqc2hvdWxkKiB3b3JrLgotLSBGQy0xMC8yMDogT25seSBhY2NlcHRzIElSUXMgMy03LCBvciA5LiAgSWYgSVJRIDksIHByb3Blcmx5IHRlbGwgdGhlIGNhcmQKLSAgdG8gdXNlIElSUSAyLiAgVGhhbmtzIHRvIEdyZWcgQ3JpZGVyIChnY3JpZGVyQGljbG5ldC5vcmcpIGZvciBmaW5kaW5nIGFuZAotICBsb2NhdGluZyB0aGlzIGJ1ZyBhbmQgdGVzdGluZyB0aGUgcGF0Y2guCi0tIEluc2lnaHQgZHJpdmUgcmVjb2duaXNlZCBjb3JyZWN0bHkgYWdhaW4uCi0tIE1vdG9yLW9uIHdha2V1cCB2ZXJzaW9uIG9mIHRoZSBJb21lZ2EgMjUwIGRyaXZlIGFkZGVkCi0KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMi4wNiwgMjgvMDEvOTYgPT09PT0KLQotU3BlY2lhbCB0aGFua3MgZ28gdG8gTmVhbCBGcmllZG1hbiBhbmQgU3RldmVuIFNvcmJvbSBmb3IgdGhlaXIKLWhlbHAgaW4gcHJvZHVjaW5nIGFuZCB0ZXN0aW5nIHRoaXMgcmVsZWFzZS4KLQotSSBoYXZlIGNvbnRpbnVlZCB0byBjbGVhbiB1cCB0aGUgY29kZSwgd2l0aCBhbiBleWUgdG93YXJkcyBpbmNsdXNpb24KLW9mIGZ0YXBlIGluIExpbnVzJyBvZmZpY2lhbCBrZXJuZWwgKEluIGZhY3QsIGFzIEkgdHlwZSB0aGlzLCBJIGFtCi1ydW5uaW5nIG9uIGEga2VybmVsIHdpdGggZnRhcGUgc3VwcG9ydCBzdGF0aWNhbGx5IGxpbmtlZCkuICBJIGhhdmUKLXRlc3QtY29tcGlsZWQgZnRhcGUgYWdhaW5zdCBteSAxLjIuMTMgdHJlZSB3aXRob3V0IHByb2JsZW1zLgotSG9wZWZ1bGx5LCBldmVyeXRoaW5nIHNob3VsZCBiZSBPSyBmb3IgdGhlIHYxLjIueCBwZW9wbGUuCi0KLVdBUk5JTkchIEFsYW4gQ294IGhhcyBtYWlsZWQgbWUgdGhhdCBmdGFwZSBkb2VzICpOT1QqIHdvcmsgd2l0aAotTGludXgvU01QLiAgSWYgeW91IHRyeSB0byBydW4gZnRhcGUgdW5kZXIgTGludXgvU01QLCBpdCB3aWxsIGNhdXNlIGEKLWtlcm5lbCBkZWFkbG9jayAod2hpY2ggaXMgd29yc2UgdGhhbiBhIHBhbmljKS4KLQotLSBRSUMtMzAyMC9UUi0zOiAxTWJwcyBzdXBwb3J0IHdvcmtzLiAgTmVhbCBpcyBjYXBhYmxlIG9mIHJlYWRpbmcgYW5kCi0gIHdyaXRpbmcgZGF0YSB0byBhIHRhcGUuICBmdGFwZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSB0eXBlIG9mCi0gIHRhcGUgKGUuZy4gVFItMyB2cyBRSUMtODApIGFuZCBtb3ZlIHRoZSBmZGMgaW4gYW5kIG91dCBvZgotICAicGVycGVuZGljdWxhciBtb2RlIiBhcyBuZWNlc3NhcnkuCi0tIDJNYnBzIHN1cHBvcnQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgc2luY2UgaXQgaXMgbm90IGZ1bGx5Ci0gIGRlYnVnZ2VkLiAgSWYgeW91IGFyZSBhZHZlbnR1cm91cywgcmVtb3ZlIC1ERkRDXzgyMDc4U0wgaW4gdGhlCi0gIE1ha2VmaWxlIGFuZCBzZWUgd2hhdCBoYXBwZW5zIDotKQotLSBmZGMgZGV0ZWN0aW9uOiBzaWxseSBidWdzIHJlbW92ZWQgKE9ubHkgMk1icHMgZmRjcyB3ZXJlIGFmZmVjdGVkKQotICBhbmQgYWRkZWQgZGV0ZWN0aW9uIG9mIHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9ycyBQQzg3NDQgZmRjIGNoaXAKLSAgKHVzZWQgaW4gdGhlIFBDODczeHggInN1cGVyLUlPIiBjaGlwcykuCi0tIFJlbW92ZWQgd2FybmluZyBhYm91dCBpbmNvbXBhdGlibGUgdHlwZXMgd2hlbiBjb21waWxpbmcgd2l0aCBMaW51eAotICAxLjIueC4KLS0gUkVBRE1FLlBDSSB1cGRhdGVkIHdpdGggaW5mbyBhYm91dCB0aGUgREVMTCBEaW1lbnNpb24gWFBTIFA5MC4KLS0gQ29ubm9yIFRTVDMyMDBSIGFkZGVkIHRvIGRldGVjdGVkIGRyaXZlcy4KLS0gYHN3YXBvdXQnIHV0aWxpdHkgYWRkZWQgdG8gZGlzdHJpYnV0aW9uLiAgSXQgd2lsbCBkaXJ0eSA1TWVnIG9mCi0gIG1lbW9yeSwgdHJ5aW5nIHRvIHN3YXAgb3V0IG90aGVyIHByb2dyYW1zLiAgSnVzdCBzYXkgYG1ha2Ugc3dhcG91dCcKLSAgdG8gYnVpbGQgaXQuICBmdGFwZSB3aWxsIGRvIHRoaXMgYXV0b21hdGljYWxseSBSZWFsIFNvb24gTm93IChpZToKLSAgd2hlbiBJIGhhdmUgZm91bmQgb3V0IHdoaWNoIGtlcm5lbCBtZW1vcnkgYWxsb2MgZnVuY3Rpb24gdG8gY2FsbCkuCi0KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMi4wNSwgMDgvMDEvOTYgPT09PT0KLQotLSBGb3IgdjEuMi54IEtlcm5lbHMsIHlvdSBtdXN0IGFwcGx5IHRoZSBwYXRjaCBsaW51eC0xLjIva3N5bXMucGF0Y2ggdG8KLSAgdGhlIGtlcm5lbCBhbmQgcmVidWlsZCBpdCAoaXQgYWRkcyB0aGUgX19nZXRfZG1hX3BhZ2VzIHN5bWJvbCB0bwotICBrc3ltcy5jKS4KLS0gSW5jbHVkZWQgbmV3IGFzbS1pMzg2L2lvLmggZmlsZSBmcm9tIHYxLjMueCBrZXJuZWwgc2VyaWVzLCB0byBlbmFibGUKLSAgZ2NjIHYuMi43LlsxMl0gdG8gY29tcGlsZSB2MS4yLngga2VybmVscyAobGludXgtMS4yL2lvLmgpLgotLSBNb2R1bGUgdmVyc2lvbnM6IElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgZnRhcGUgYXMgYSB2ZXJzaW9uZWQgbW9kdWxlLAotICB5b3UgbXVzdCBmaXJzdCBjb21waWxlIHlvdXIga2VybmVsIHdpdGggQ09ORklHX01PRFZFUlNJT05TPXkuCi0gIE90aGVyd2lzZSwgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCA8bGludXgvbW9kdmVyc2lvbnMuaD4gZG9lcyBub3QKLSAgZXhpc3QgKGlmIHRoYXQgaGFwcGVucywgYSBgdG91Y2ggbW9kdmVyc2lvbnMuaCcgd2lsbCBoZWxwIHlvdSBvdXQpLgotLSBDTEtfNDhNSFo6IG5ldyBkZWZpbmUgaW4gdGhlIE1ha2VmaWxlIChkZWZhdWx0OiBub24temVybykuICBJZiB5b3UgaGF2ZQotICBhIHRhcGUgY29udHJvbGxlciBjYXJkIHRoYXQgdXNlcyB0aGUgaTgyMDc4KC0xKSBjaGlwLCBidXQgY2Fubm90IGdldAotICBpdCB0byB3b3JrIHdpdGggZnRhcGUsIHRyeSBzZXQgaXQgdG8gMCAoYW5kIHBsZWFzZSByZXBvcnQgdGhpcykuCi0tIFFJQy0zMDEwLzMwMjA6IENvbXBsZXRlIHN1cHBvcnQgaXMgc3RpbGwgbWlzc2luZywgYnV0IHdpbGwgaG9wZWZ1bGx5Ci0gIGNvbWUgc29vbi4gIFN0ZXZlbiBTb3Jib20gaGFzIGtpbmRseSBwcm92aWRlZCBtZSB3aXRoIGhpbnRzIGFib3V0Ci0gIHRoaXMuICBXcml0aW5nIG9mIFFJQy0zMDIwIHRhcGVzIGRlZmluaXRlbHkgZG9lcyBOT1Qgd29yayAoZG8gbm90IHRyeQotICBpdCEgLSB0aGUgZHJpdmUgd2lsbCBub3QgYmUgaW4gInBlcnBlbmRpY3VsYXIgbW9kZSIgYW5kIHRoaXMgd2lsbCBydWluCi0gIHRoZSBmb3JtYXR0aW5nIGluZm8gb24gdGhlIHRhcGUpLgotLSBmdGFwZV9udW1fYnVmZmVycyBpcyBvdXQgb2YgZmFzaGlvbjogdXNlIE5SX0JVRkZFUlMgaW5zdGVhZCAoYW5kCi0gIHJlY29tcGlsZSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQgOi0pLgotCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTIuMDQsIDAxLzAxLzk2ID09PT09Ci0KLVRoaXMgdmVyc2lvbiBieSBLYWkgSGFycmVraWxkZS1QZXRlcnNlbiA8a2hwQGRvbHBoaW5pY3Mubm8+Ci0KLS0gQUxFUlQhIFN1cHBvcnQgZm9yIEtlcm5lbHMgZWFybGllciB0aGVuIHYxLjEuODUgaXMgYWJvdXQgdG8gZ28gYXdheS4KLSAgSSBpbnRlbmQgdG8gY2xlYW4gdXAgc29tZSBvZiB0aGUgY29kZSAoZ2V0dGluZyByaWQgb2YgYW4gYW5ub3lpbmdseQotICBsYXJnZSBudW1iZXJzIG9mICNpZmRlZiBtb3N0bHkpLCB3aGljaCBtZWFucyB0aGF0IHN1cHBvcnQgZm9yCi0gIHByZS0xLjEuODUga2VybmVscyBtdXN0IGdvIGFzIHdlbGwuCi0tIE5SX0ZUQVBFX0JVRkZFUlMgaXMgZ29uZTsgWW91IGNhbiBpbnN0ZWFkIHNlbGVjdCB0aGUgbnVtYmVyIG9mIGRtYQotICBidWZmZXJzIGJ5IHNheWluZyBgaW5zbW9kIGZ0YXBlLm8gZnRhcGVfbnVtX2J1ZmZlcj08bj4nIGluc3RlYWQuCi0tIENvbmZpZ3VyZSBzY3JpcHQgZ29uZS4gIGZ0YXBlIHdpbGwgbm93IGF1dG9tYWdpY2FsbHkgZGV0ZXJtaW5lIHlvdXIKLSAga2VybmVsIHZlcnNpb24gYnkgL3Vzci9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBpbnN0ZWFkLgotLSBDT05GSUdfTU9EVkVSU0lPTlMgbm93IHdvcmsuICBBbGwgY29tYmluYXRpb25zIG9mIHZlcnNpb25lZCAvCi0gIHVudmVyc2lvbmVkIGtlcm5lbCBhbmQgZnRhcGUgbW9kdWxlIHdvcmtzIChhdCBsZWFzdCB3aXRoIG15IDEuMy41MgotICBrZXJuZWwpLgotLSBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIGluc2VydGluZyBmdGFwZSBpbnRvIGFuIG9sZCAoMS4yLngpCi0gIGtlcm5lbCAoZS5nLiBpbnNtb2Qgc2F5cyAiMS4yLjggZG9lcyBub3QgbWF0Y2ggMS4yLjgpLCByZWNvbXBpbGUKLSAgeW91ciBtb2R1bGVzIHV0aWxpdGllcyB3aXRoIHlvdXIgbmV3IGNvbXBpbGVyLgotLSBSZXZlYWwgVEIxNDAwIGRyaXZlIGFkZGVkIHRvIHZlbmRvcnMuaAotLSBTdXBwb3J0IGZvciB0aGUgaTgyMDc4LTEgKDJNYnBzKSBjaGlwIGlzIGNvbWluZyBhbG9uZy4gIFRoZQotICBiaWdnZXN0IHByb2JsZW0gaXMgdGhhdCBJIGRvbid0IGhhdmUgc3VjaCBhIGNhcmQsIHdoaWNoIG1ha2VzCi0gIHRlc3RpbmcgLyBkZWJ1Z2dpbmcgc29tZXdoYXQgcHJvYmxlbWF0aWMuICBUaGUgc2Vjb25kIGJpZ2dlc3QKLSAgcHJvYmxlbSBpcyB0aGF0IEkgZG8gbm90IGhhdmUgdGhlIFFJQy0zMDEwLzMwMjAgc3RhbmRhcmRzIGVpdGhlci4KLSAgU3RhdHVzIHJpZ2h0IG5vdyBpcyB0aGF0IHRoZSBjaGlwIGlzIGRldGVjdGVkLCBhbmQgaXQgc2hvdWxkIGJlCi0gIHBvc3NpYmxlIHRvIHB1dCBpdCBpbnRvIDJNYnBzIG1vZGUuICBIb3dldmVyLCBJIGRvIG5vdCBrbm93IHdoYXQKLSAgImV4dHJhcyIgYXJlIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgc3VwcG9ydC4gIEFsdGhvdWdoIHB1dHRpbmcgdGhlCi0gIGk4MjA3OCBpbnRvIDFNYnBzIG1vZGUgb3VnaHQgdG8gd29yayBvdXQgb2YgdGhlIGJveCwgaXQgZG9lc24ndAotICAocmlnaHQgbm93LCBmdGFwZSBjb21wbGFpbnMgYWJvdXQgaWQgYW0gZXJyb3JzKS4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjA0YmV0YTUsIDI5LzEyLzk1ID09PT09Ci0KLUJhcyBvZmZsaW5lIGxpbnV4LXRhcGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZvciByZWFzb25zIG9ubHkga25vd24gdG8gdGhlIG1ham9yZG9tbyBtYWlsIGxpc3QgcHJvY2Vzc29yLCBCYXMgd2FzCi1raWNrZWQgb2ZmIHRoZSBsaW51eC10YXBlIGxpc3Qgc29tZXRpbWUgZHVyaW5nIHRoZSBzdW1tZXIuICBCZWluZwotb3ZlcndvcmtlZCBhdCBoaXMgZm9yLXBheSBqb2IsIGhlIGRpZG4ndCBub3RpY2UgaXQgbXVjaC4gIEluc3RlYWQgSQotKEthaSwga2hwQGRvbHBoaW5pY3Mubm8pIGhhcyB3b3JrZWQgb24gZnRhcGUgdG8gcHJvZHVjZSB0aGUgMi4wNChiZXRhKQotdmVyc2lvbi4KLQotemZ0YXBlCi0tLS0tLS0KLU5vdGUgdGhhdCB0aGVyZSBleGlzdHMgYSBtdWNoIGltcHJvdmVkIHZlcnNpb24gb2YgZnRhcGUsIHdyaXR0ZW4gYnkKLUNsYXVzLUp1c3R1cyBIZWluZSA8Y2xhdXNAd2lsbGkubWF0aC5yd3RoLWFhY2hlbi5kZT4gd2hpY2ggaXMgbmFtZWQKLXpmdGFwZSwgd2hpY2ggY29uZm9ybXMgdG8gdGhlIFFJQy04MCBzcGVjcyBvbiBob3cgdG8gbWFyayBiYWNrdXBzLCBhbmQKLWlzIGNhcGFibGUgb2YgZG9pbmcgYXV0b21hdGljIGNvbXByZXNzaW9uLiAgSG93ZXZlciwgemZ0YXBlIG1ha2VzCi1zdWJzdGFudGlhbCBjaGFuZ2VzIHRvIGZ0YXBlLCBhbmQgSSAoS2FpKSBoYXZlIHRoZXJlZm9yZSBkZWNsaW5lZCB0bwotaW50ZWdyYXRlIHpmdGFwZSBpbnRvIGZ0YXBlLiAgSG9wZWZ1bGx5LCB0aGlzIHdpbGwgaGFwcGVuIHNvb24uCi0KLUNPTkZJR19RSUMxMTcgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBiaWdnZXN0IGNoYW5nZSBvZiBhbGwgaXMgdGhhdCBmdGFwZSBub3cgd2lsbCBhbGxvY2F0ZSBpdHMgZG1hCi1idWZmZXJzIHdoZW4gaXQgaXMgaW5zZXJ0ZWQuICBUaGUgbWVhbnMgdGhhdCB0aGUgQ09ORklHX1FJQzExNyBvcHRpb24KLWhhcyBkaXNhcHBlYXJlZCBmcm9tIHRoZSBMaW51eCBrZXJuZWwgYXMgb2YgdjEuMy4zNC4gIElmIHlvdSBoYXZlIGFuCi1lYXJsaWVyIGtlcm5lbCwgc2ltcGx5IGFuc3dlciAnbm8nIHRvIHRoZSBxdWVzdGlvbiB3aWxsIGRvIHRoZSB0cmljawotKGlmIHlvdSBnZXQgY29tcGxhaW5zIGFib3V0IF9fZ2V0X2ZyZWVfcGFnZXMoKSBtaXNzaW5nLCBjb250YWN0IHRoZQotbGludXgtdGFwZSBtYWlsaW5nIGxpc3QpLgotCi1Ob3RlIHRoYXQgZnRhcGUtMi4wNGJldGEgd2lsbCB3b3JrIGVxdWFsbHkgd2VsbCBvbiBrZXJuZWxzIHdpdGggYW5kCi13aXRob3V0IGBmdGFwZSBzdXBwb3J0Jy4gIFRoZSBvbmx5IGNhdGNoIGlzLCB0aGF0IHlvdSB3aWxsIHdhc3RlCi1hcm91bmQgOTYtMTI4S2Igb2YgcHJlY2lvdXMgRE1BJ2FibGUgbWVtb3J5IG9uIGEgYm94IHRoYXQgaGFzIGZ0YXBlCi1zdXBwb3J0IGNvbXBpbGVkIGluLgotCi1Ob3cgZm9yIHRoZSByZWFsIGNoYW5nZXM6Ci0KLS0gRkMtMjAgY2FuIG5vdyB1c2UgRE1BIGNoYW5uZWxzIDEsIDIsIGFuZCAzLiBUaGFua3MgdG8gRGFuaWVsCi0gIENvaGVuLCBjYXRtYW5Ad3BpLmVkdS4KLS0gZnRhcGUgbm8gbG9uZ2VyIHJlcXVpcmVzIGEgKGdpZ2FudGljKSA5NktiIGJ1ZmZlciB0byBiZSBzdGF0aWNhbGx5Ci0gIGFsbG9jYXRlZCBieSB0aGUga2VybmVsLgotLSBBZGRlZCBuZXcgSW9tZWdhIGRyaXZlICg4ODgyKSB0byB2ZW5kb3JzLmgKLS0gLWZuby1zdHJlbmd0aC1yZWR1Y2UgYWRkZWQgdG8gTWFrZWZpbGUsIHNpbmNlIEdDQyBpcyBicm9rZW4uCi0tIGk4MjA3OC0xICgyTWJwcykgRkRDIHN1cHBvcnQgc3RhcnRlZC4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAzYiwgMjcvMDUvOTUgPT09PT0KLQotLSBQcmV2ZW50ZWQgdmVyaWZ5X2FyZWEgdG8gcmV0dXJuIGVycm9yIGlmIGNhbGxlZCB3aXRoIHplcm8gbGVuZ3RoLgotLSBGaXhlZCBhIGJ1ZyBpbiBmbHVzaF9idWZmZXJzIHRoYXQgY2F1c2VkIHRvbyBtdWNoIHBhZGRpbmcgdG8gYmUKLSAgd3JpdHRlbiB3aGVuIGEgZmluYWwgc2VnbWVudCBoYWQgYmFkIHNlY3RvcnMuCi0tIEluY3JlYXNlZCBtYXhpbXVtIGZhc3Qtc2VlayBvdmVyc2hvb3QgdmFsdWUgZnJvbSA1IHRvIDEwIHNlZ21lbnRzLgotLSBCcmVha2luZyBsb29wIGFmdGVyIDUgcmV0cmllcyB3aGVuIHBvc2l0aW9uaW5nIGZhaWxzLgotLSBGaXhlZCB3cm9uZyBjYWxjdWxhdGlvbiBvZiB0YXBlIGxlbmd0aCBmb3IgUUlDLTMwMTAgYW5kIFFJQy0zMDIwCi0gIHRhcGVzIChkZW5zaXRpZXMgd2VyZSBzd2FwcGVkKS4KLS0gRml4ZWQgd3JvbmcgY2FsY3VsYXRpb24gb2Ygb3ZlcnNob290IG9uIHNlZWtfZm9yd2FyZDogV3Jvbmcgc2lnbgotICBvZiBlcnJvci4KLS0gU3VwcHJlc3MgKGZhbHNlKSBlcnJvciBtZXNzYWdlIGR1ZSB0byBuZXcgdGFwZSBsb2FkZWQuCi0tIEFkZGVkIHR3byBuZXcgQ01TIGRyaXZlcyAoMTFjMyBhbmQgMTFjNSkgdG8gdmVuZG9ycy5oLgotCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTIuMDNhLCAwOS8wNS85NSA9PT09PQotCi0tIEZpeGVkIGRpc3BsYXkgb2Ygb2xkIGVycm9yIChldmVuIGlmIGFscmVhZHkgY2xlYXJlZCkgaW4gZnRhcGVfb3Blbi4KLS0gSW1wcm92ZWQgdGFwZSBsZW5ndGggZGV0ZWN0aW9uLCBpb2N0bHMgd291bGQgZmFpbCBmb3IgNDI1IGZ0IHRhcGVzLgotICBVbnRpbCB0aGUgdGFwZSBsZW5ndGggaXMgY2FsY3VsYXRlZCB3aXRoIGRhdGEgZnJvbSB0aGUgaGVhZGVyCi0gIHNlZ21lbnQsIHdlJ2xsIHVzZSB3b3JzdC1jYXNlIHZhbHVlcy4KLS0gQ2xlYXIgZW9mX21hcmsgYWZ0ZXIgcmV3aW5kaW5nIGlvY3Rscy4KLS0gRml4ZWQgd3JvbmcgdmVyc2lvbiBtZXNzYWdlICgyLjAzIGhhZCAyLjAyZyBpZCkuCi0tIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCB0aGUgZmRjIHRvIGJlIHJlc2V0IHZlcnkgZnJlcXVlbnRseS4KLSAgVGhpcyBzaG91bGRuJ3QgYWZmZWN0IG5vcm1hbCBvcGVyYXRpb24gYnV0IHRoZSB0aW1pbmcgb2YgdGhlCi0gIHJlcG9ydCByb3V0aW5lcyBoYXMgY2hhbmdlZCBhZ2FpbiBhbmQgdGhhdCBtYXkgY2F1c2UgcHJvYmxlbXMuCi0gIFdlJ2xsIGp1c3QgaGF2ZSB0byBmaW5kIG91dC4uLi4KLS0gSW1wbGVtZW50ZWQgY29ycmVjdCB3cml0ZSBwcmVjb21wZW5zYXRpb24gc2V0dGluZyBmb3IgUUlDLTMwMTAvMzAyMC4KLS0gQ2xlYW5lZCB1cCBmZGNfaW50ZXJydXB0X3dhaXQgcm91dGluZS4gSG9wZSBpdCBzdGlsbCB3b3JrcyA6LSkKLS0gRmluYWxseSByZW1vdmVkIChhbHJlYWR5IGRpc2FibGVkKSBzcGVjaWFsIGVvZiBtYXJrIGhhbmRsaW5nIGZvcgotICBnbnUgdGFyLgotLSBDaGFuZ2VkIG9yZGVyIG9mIGdldF9kbWFfcmVzaWR1ZSBhbmQgZGlzYWJsZV9kbWEgaW4gZmRjLWlzci5jCi0gIGJlY2F1c2UgdGhlIGN1cnJlbnQgb3JkZXIgd291bGQgZmFpbCBvbiBhdCBsZWFzdCBvbmUgc3lzdGVtLgotICBXZSdyZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBvcmRlciBhZ2FpbiwgaG9wZSAoYW5kIGV4cGVjdCkgdGhpcwotICBkb2Vzbid0IGJyZWFrIGFueSBvdGhlciBzeXN0ZW0uCi0KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMi4wMywgMDcvMDUvOTUgPT09PT0KLQotKENoYW5nZXMgcmVmZXIgdG8gdGhlIGZpcnN0IGZ0YXBlLTIuMDIgcmVsZWFzZSkKLQotU3VwcG9ydCBmb3Igd2lkZSBhbmQgZXh0ZW5kZWQgbGVuZ3RoIHRhcGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRoZSBDb25uZXIgVFNNIDQyMCBhbmQgODUwIGRyaXZlcyBhcmUgcmVwb3J0ZWQgdG8gYmUgd29ya2luZy4KLUkgaGF2ZW4ndCByZWNlaXZlZCBhbnkgcmVwb3J0cyBhYm91dCBvdGhlciBicmFuZHM7IHRoZSBUU00gNDIwCi1hbmQgODUwIHNlZW0gdG8gYmUgdGhlIG1vc3Qgd2lkZWx5IHVzZWQgd2lkZSBkcml2ZXMuCi1FeHRlbmRlZCBsZW5ndGggdGFwZXMgKDQyNSBmdCkgd2l0aCBub3JtYWwgUUlDLTgwIGRyaXZlcwotYXJlIG9wZXJhdGluZyB0b28gKEF0IGxlYXN0IEkndmUgaGFkIG5vIHJlcG9ydHMgc3RhdGluZyBvdGhlcndpc2UpLgotX05vdF8geWV0IGNvbXBsZXRlbHkgc3VwcG9ydGVkIChhbHRob3VnaCB0aGV5IG1heSB3b3JrKSBhcmUKLVFJQy0zMDIwIGRyaXZlcyBhbmQgMiBNYnBzIGZsb3BweSBkaXNrIGNvbnRyb2xsZXJzIHdvbid0IHdvcmsgYXQKLXRoZSBoaWdoZXN0IHNwZWVkLgotSWYgc29tZW9uZSBpcyBraW5kIGVub3VnaCB0byBzZW5kIG1lIG9uZSBvZiB0aGVzZSwgSSdsbCBpbmNsdWRlCi1zdXBwb3J0IGZvciBpdCB0b28gOy0pCi0KLUVhc2llciBjb25maWd1cmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUHJvYmxlbXMgZHVlIHRvIHdyb25nIHNldHRpbmdzIGluIHRoZSBNYWtlZmlsZSBhcmUgcHJldmVudGVkCi1ieSB1c2luZyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHRoYXQgc2V0cyB0aGUgbmVjZXNzYXJ5IChrZXJuZWwKLXZlcnNpb24gZGVwZW5kZW50KSBjb21waWxlIHRpbWUgb3B0aW9ucy4KLVRoaXMga2VybmVsIHZlcnNpb24gaXMgbm93IGRldGVybWluZWQgZnJvbSB0aGUgc291cmNlcyBmb3VuZAotYXQgL3Vzci9zcmMvbGludXgsIG9yIGlmIG5vdCBmb3VuZCwgdGhlIG9sZCB3YXkgdXNpbmcKLS9wcm9jL3ZlcnNpb24uCi1WZXJzaW9uZWQgbW9kdWxlcyB3aWxsIGJlIHVzZWQgYXV0b21hdGljYWxseSB3aGVuIHN1cHBvcnRlZAotYnktIGFuZCBjb25maWd1cmVkIGluLSB0aGUga2VybmVsLgotTm90ZSB0aGF0IHRoZSBjdXJyZW50IG1vZHVsZXMgY29kZSAoMS4xLjg3KSBpcyBzdGlsbCBicm9rZW4KLWFuZCBfbmVlZHNfIHRoZSBmaXggaW5jbHVkZWQgaW4gdGhlIGluc21vZCBkaXJlY3RvcnkuCi1QbGVhc2UgZG9uJ3Qgc2VuZCBtZSBhbnkgbW9yZSBPb3BzIHJlcG9ydHMgY2F1c2VkIGJ5IGluc21vZCA6LSgKLQotUmVkdWNlZCBtb2R1bGUgc2l6ZQotLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIHN0YW5kYXJkIG1vZHVsZSBzaXplIGlzIG11Y2ggcmVkdWNlZCBhbmQgc29tZSBjb21waWxlIHRpbWUKLW9wdGlvbnMgY2FuIGV2ZW4gcmVkdWNlIGl0IGZ1cnRoZXIuIChJIGRvbid0IHJlY29tbWVuZCB0aGlzCi1mb3Igbm9ybWFsIHVzZSBidXQgaXQgY2FuIGJlIGhhbmR5IGZvciByZXNjdWUgZGlza2V0dGVzKQotCi1PcHRpb246ICAgICAgICAgICBBcHByb3guIG1vZHVsZSBzaXplOgotCi08c3RhbmRhcmQ+ICAgICAgICAgICAgIDE1MCBLYgotTk9fVFJBQ0UgICAgICAgICAgICAgICAxMjUgS2IKLU5PX1RSQUNFX0FUX0FMTCAgICAgICAgIDY3IEtiCi0KLQotTXVjaCBpbXByb3ZlZCBkcml2ZXIgaW50ZXJydXB0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU1vc3QgcG9zc2libGUgbG9vcHMgaGF2ZSBiZWVuIGJyb2tlbiBhbmQgc2lnbmFsIGRldGVjdGlvbgotaGFzIGJlZW4gaW1wcm92ZWQuCi1JbiBtb3N0IGNhc2VzIHRoZSBkcml2ZXIgY2FuIGJlIGFib3J0ZWQgYnkgXkMgKFNJR0lOVCkgYW5kCi1TSUdLSUxMIChraWxsIC05KSB3aWxsIGdlbmVyYXRlIGJlIGEgc3VyZSBraWxsLgotKE5vdGUgdGhhdCBhYm9ydGluZyBhIHRhcGUgb3BlcmF0aW9uIG1heSBkYW1hZ2UgdGhlIGxhc3QKLWRhdGEgd3JpdHRlbiB0byB0YXBlKQotCi1JbXByb3ZlZCBlcnJvciByZWNvdmVyeQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUZ0YXBlIG5vdyByZXR1cm5zIGFuIGVycm9yIChFTk9EQVRBKSB0byB0aGUgYXBwbGljYXRpb24gaWYKLWEgc2VnbWVudCBwcm92ZXMgdG8gYmUgdW5yZWNvdmVyYWJsZSBhbmQgdGhlbiBza2lwcyB0aGUKLWJhZCBzZWdtZW50LgotVGhpcyBjYXVzZXMgbW9zdCBhcHBsaWNhdGlvbnMgdG8gY29udGludWUgdG8gd29yayAodGFyCi1hbmQgYWZpbykgbG9vc2luZyBvbmx5IGEgc21hbGwgYW1vdW50ICh1cCB0byAyOSBLYikgb2YgZGF0YS4KLVJldHJpZWQgcmVhZCBvcGVyYXRpb25zIHdpbGwgbm93IGJlIGRvbmUgc2xpZ2h0bHkgb2ZmLXRyYWNrCi10byBpbXByb3ZlIHRoZSBjaGFuY2Ugb2Ygc3VjY2Vzcy4gU2VyaW91cyBoZWFkIG9mZi10cmFjawotZXJyb3JzIHdpbGwgYmUgZGV0ZWN0ZWQuCi0KLUZDLTEwIGFuZCBGQy0yMCBjb250cm9sbGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GdGFwZSBub3cgc3VwcG9ydHMgYm90aCB0aGUgb2xkIENNUyBGQy0xMCBhbmQgdGhlIG5ld2VyIEZDLTIwCi1jb250cm9sbGVycy4KLUJlY2F1c2UgdGhlIG9wZXJhdGlvbiBvZiB0aGVzZSBjYXJkcyBpcyBzdGlsbCB1bmRvY3VtZW50ZWQsCi10aHVzIGZhciB0aGV5IHdpbGwgb25seSB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZ3MgKFNlZQotTWFrZWZpbGUpLiBBbnkgZmVlZC1iYWNrIG9uIGhvdyB0byB1c2UgdGhlbSB3aXRoIG90aGVyIHNldHRpbmdzCi13aWxsIGJlIHdlbGNvbWUgIQotQ29tcGlsYXRpb24gd2lsbCBmYWlsIGlmIG9uZSBjaGFuZ2VzIHRoZSBzZXR0aW5ncyB0byBpbGxlZ2FsCi12YWx1ZXMuCi0KLUtlcm5lbHMgYW5kIGNvbXBpbGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1GdGFwZSBpcyBjdXJyZW50bHkgYmVpbmcgZGV2ZWxvcGVkIHVzaW5nIHRoZSAyLjUuOCBjb21waWxlci4KLVRoZSBvbGRlciAyLjQuNSBwcm9iYWJseSB3b3JrcyB0b28gKFNldCBvcHRpb24gaW4gTWFrZWZpbGUhKS4KLUkgaGF2ZSBubyBleHBlcmllbmNlIHdpdGggYW55IGxhdGVyIGNvbXBpbGVycyBub3IgRWxmIHN1cHBvcnQuCi1BbnkgaW5mb3JtYXRpb24gb24gdGhpcyBpcyB3ZWxjb21lLgotVGhlIGxhdGVzdCBrZXJuZWwgSSBoYXZlIHRlc3RlZCBmdGFwZSB3aXRoIGlzIDEuMi42LgotCi1Db21wcmVzc2lvbgotLS0tLS0tLS0tLS0KLUFuIGltcHJlc3NpdmUgY29sbGVjdGlvbiBvZiBjaGFuZ2VzIGZvciBmdGFwZSBpbmNsdWRpbmcKLW9uLXRoZS1mbHkgY29tcHJlc3Npb24gaXMgc3RpbGwgbHlpbmcgb24gbXkgZGVzay4KLUlmIDIuMDMgcHJvdmVzIHRvIGJlIHJlbGlhYmxlIEkgbWlnaHQgc3RhcnQgaW50ZWdyYXRpbmcgdGhlc2UKLWJ1dCBhcyB1c3VhbCwgSSdtIHNob3J0IGluIHRpbWUgOi0oCi0KLUZvcm1hdHRpbmcKLS0tLS0tLS0tLS0KLVRoZXJlIGlzIHN0aWxsIG5vIHdheSB0byBmb3JtYXQgdGFwZXMgdW5kZXIgTGludXguIEFzIGZhciBhcwotSSBrbm93IGFsbCBhdHRlbXB0cyB0byB3cml0ZSBzdWNoIGEgcHJvZ3JhbSBoYXZlIGRpZWQgbm93LgotU2luY2UgZm9ybWF0dGVkIHRhcGVzIGFyZSByYXRoZXIgY29tbW9uIG5vdywgSSB0aGluayBhbGwgd2UKLW5lZWQgaXMgYSB1dGlsaXR5IHRoYXQgd3JpdGVzIGEgd29yc3QgY2FzZSBwYXR0ZXJuIGFuZCB2ZXJpZmllcwotdGhhdCB3aXRoIHRoZSBkcml2ZSBwdXQgaW4gdmVyaWZ5IG1vZGUsIHJlZHVjaW5nIG1hcmdpbnMuCi1BbnkgdGFrZXJzID8KLQotRnVydGhlcm1vcmUKLS0tLS0tLS0tLS0tCi1DbGVhbmVkIHVwIG1lc3NhZ2VzLgotUHJlcGFyZWQgdG8gc3VwcG9ydCBtdWx0aXBsZSB0YXBlIGRyaXZlcyBvbiBvbmUgZmRjLgotVGhhbmtzIHRvIGFsbCB0aGUgcGVvcGxlIHdobyBzZW50IGJ1ZyByZXBvcnRzIGFuZCBoZWxwZWQgbWUKLWltcHJvdmUgdGhlIGRyaXZlci4gV2l0aG91dCB0cnlpbmcgdG8gYmUgY29tcGxldGUgSSdsbCBtZW50aW9uCi1HYXJ5IEFuZGVyc29uICh3aXRob3V0IGhpcyBhY2N1cmF0ZSByZXBvcnRzIGFuZCB1bnJlbGlhYmxlCi1oYXJkd2FyZSB0aGVyZSB3b3VsZG4ndCBiZSBhIDIuMDMpLCBTdGVmYW4gS25laWZlbCAoRkMtMjApLAotUm9iZXJ0IEJyb3VnaHRvbiAoRkMtMjAsIHlvdSB3ZXJlIGFsbW9zdCB0aGVyZSA7LSksIEJqb3JuCi1Fa3dhbGwgKGZvciB0aGUgdmVyc2lvbmVkIG1vZHVsZXMgYW5kIGJ1Z2d5IGluc21vZCA7LSksIFBldGVyCi1Gb3gsIENocmlzdG9waGVyIE9saXZlciwgUmFscGggV2hpdHRha2VyIGFuZCBub3QgdGhlIGxlYXN0Ci1MaW51cyBUb3J2YWxkcyAoZm9yIExpbnV4IGFuZCBrZWVwaW5nIG1lIGJ1c3kgYmVjYXVzZSBvZgotY2hhbmdlcyB0byB0aGUga2VybmVsIDstKQotVGhhbmtzIHRvIGFueW9uZSBJIGZvcmdvdCwgZm9yIHRoZSBidWcgcmVwb3J0cywgdGhlIGZ0YXBlCi1iYXNoaW5nIGFuZCB0aGUgbWVudGFsIHN1cHBvcnQuLi4KLQotCi1UaGF0J3MgaXQgZm9yIG5vdy4gSGF2ZSBGdW4sCi0KLUJhcy4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAyZywgMDYvMDUvOTUgPT09PT0KLQotLSBBZGRlZCBleHRyYSB0ZXN0IHRvIGJyZWFrIHJlYWQtaWQgbG9vcCB3aXRoIHNpZ25hbC4KLS0gQ2hhbmdlZCByZXdpbmQgY29kZSB0byBoYW5kbGUgbmVnYXRpdmUgb3ZlcnNob290IGZvciBkcml2ZXMKLSAgdGhhdCB0YWtlIHZlcnkgbG9uZyB0byBzdGFydCBvciBzdG9wLgotLSBMZXQgdXNlIG9mIGdldC9zZXQgaS9vLXJlZ2lvbnMgZGVwZW5kIG9uIGtlcm5lbCB2ZXJzaW9uLgotLSBDaGFuZ2VkIGNvZGUgdG8gdXNlIGEgbW9yZSBnZW5lcmFsIHRlc3QgZm9yIGNvbmRpdGlvbmFsCi0gIGNvbXBpbGF0aW9ucyBkZXBlbmRpbmcgb24ga2VybmVsIHZlcnNpb24uCi0tIEltcHJvdmVkIG1pY3JvLXN0ZXAgZnVuY3Rpb25hbGl0eSB0byBnbyBvZmYtdHJhY2sgb25seQotICB3aGlsZSByZWFkaW5nIChpZCAmIGRhdGEpLgotLSBBZGRlZCBmYWlsdXJlIG9uIHRhcGUtbm90LXJlZmVyZW5jZWQgYml0IGluIGZ0YXBlX2NvbW1hbmQuCi0tIEFkZGVkIEZPUkVWRVIgb3B0aW9uIHRvIHJlYWQtd2FpdCByb3V0aW5lLgotLSBDaGFuZ2VkIHJlYWQtaWQgdG8gdXNlIHNob3J0ZXIgdGltZW91dCBjYXVzaW5nIHNtYWxsZXIKLSAgcmV3aW5kcyBvbiB0aW1lb3V0LgotLSBNYWRlIGtlcm5lbC1pbnRlcmZhY2UgZnVuY3Rpb25zIHN0YXRpYy4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAyZiwgMDMvMDUvOTUgPT09PT0KLQotLSBBZGRlZCBzdXBwb3J0IGZvciBkdWFsIHRhcGUgZHJpdmVzIG9uIG15IHN5c3RlbSwgZXh0ZW5kZWQgQ29uZmlndXJlCi0gIHNjcmlwdCB0byBkZXRlY3QgaG9zdCAnZG9kbycuCi0tIExvZyBtZWRpYSBkZWZlY3QgaW4gaGlzdG9yeSBpZiBlY2MgZmFpbGVkIGFuZCBubyBkYXRhIHdhcyByZXR1cm5lZC4KLS0gRml4ZWQgQ29uZmlndXJlIHNjcmlwdCB0aGF0IHdhcyBmYWlsaW5nIGZvciBrZXJuZWwgdmVyc2lvbnMgd2l0aAotICBkb3VibGUgZGlnaXQgdmVyc2lvbiBvciByZXZpc2lvbiBudW1iZXJzLgotCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTIuMDJlLCAwMS8wNS85NSA9PT09PQotCi0tIEZpeGVkIHJlcG9zaXRpb24gbG9vcCBhdCBsb2dpY2FsIGVvdCAoZmFpbGluZyByZWFkX2lkKS4KLS0gRml4ZWQgMzQgc2VnbWVudCBvZmZzZXQgd2hlbiByZXdpbmRpbmcuCi0tIEFkZGVkIGZhc3Qgc2VlayBjYXBhYmlsaXR5IGZvciBtb3JlIHRoYW4gMjU1IHNlZ21lbnRzLgotLSBGaXhlZCB3cm9uZyBidXN5IHJlc3VsdCBmcm9tIGZ0YXBlX2NvbW1hbmQgY2F1c2luZyByZXZlcnNlCi0gIHNlZWsgdG8gZmFpbC4KLS0gQWRkZWQgYnJlYWtvdXQgZnJvbSBpbmZpbml0ZSByZXdpbmQgbG9vcCAoaWYgc29tZXRoaW5nIGZhaWxzKS4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAyZCwgMzAvMDQvOTUgPT09PT0KLQotLSBJbXByb3ZlZCBhYm9ydGlvbiBvbiBzaWduYWxzOiBJbnRlcnJ1cHQgd2lsbCBtYWtlIGEgZ3JhY2VmdWwKLSAgZXhpdCwgS2lsbCB3aWxsIGJlIGxlc3MgbmljZSBhbmQgc2hvdWxkIGJlIHVzZWQgaWYgZXZlcnl0aGluZwotICBlbHNlIGZhaWxzLgotLSBJbmNsdWRlZCBjaGVjayBmb3IgdGFwZS1oZWFkIG9mZiB0cmFjay4KLS0gSW1wbGVtZW50ZWQgZXhpdCBmcm9tIHRhcGUtc3RhcnQgbG9vcC4KLS0gQWRkZWQga2VybmVsIGlvLXBvcnQgcmVnaXN0cmF0aW9uLgotLSBJbXBsZW1lbnRlZCBza2lwIG9mIGZhaWxpbmcgc2VnbWVudCAoRU5PREFUQSkgb24gZWNjIGZhaWx1cmUuCi0gIFRoaXMgYWxsb3dzIGFmaW8gYW5kIHRhciB0byBjb250aW51ZSB3aGVuIHRoZSB0YXBlIGlzIGRhbWFnZWQuCi0tIE1hZGUgZGlzdGluY3Rpb24gYmV0d2VlbiBkcml2ZSBuYW1lcyB3aXRoIGRpZmZlcmVudCBjb2Rlcy4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAyYywgMjIvMDQvOTUgPT09PT0KLQotLSBGaXhlZCB0b28gdGlnaHQgY29tbWFuZCBxdWV1ZWluZyBhZnRlciB0YXBlIHN0b3AvcGF1c2UgY29tbWFuZAotICBpc3N1ZWQgZnJvbSB3aXRoaW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAoU2hvd2VkIGFzIHRpbWVvdXQKLSAgb24gQWNrbm93bGVkZ2UgZXJyb3JzIGR1cmluZyByZXRyaWVzIG9uIHNvbWUgc3lzdGVtcykKLS0gVHJpZWQgdG8gZml4IHRpbWVvdXRzIHdoZW4gdXNpbmcgNDI1IGZ0IHRhcGUgYmVjYXVzZSB0aGUgZXh0ZW5kZWQKLSAgbGVuZ3RoIGRvZXNuJ3Qgc2VlbSB0byBiZSBkZXRlY3RlZCBieSB0aGUgaGFyZHdhcmUuCi0gIFdlIG5vdyB1c2UgdGhlIGZvcm1hdCBjb2RlIGZyb20gdGhlIGhlYWRlciBzZWdtZW50IHNvIGFkanVzdCB0aGUKLSAgdGltaW5nIGFmdGVyIHJlYWRpbmcgdGhlIGhlYWRlciBzZWdtZW50LgotLSBGaXhlZCBzb21lIG1lc3NhZ2VzIHN0YXRpbmcgJ3VuZXhwZWN0ZWQgc29tZXRoaW5nLi4uJyBiZWluZyBub3QKLSAgdW5leHBlY3RlZCBhbnltb3JlLgotLSBTdGFydGVkIHByZXBhcmF0aW9ucyBmb3IgbWVyZ2Ugb2YgZHluYW1pYyBidWZmZXIgYWxsb2NhdGlvbiBhbmQKLSAgY29tcHJlc3Npb24gY29kZS4KLS0gQ2hhbmdlZCBzb21lIGRlYnVnIG1lc3NhZ2VzIHRvIGluY2x1ZGUgcmVsZXZhbnQgc2VnbWVudCBpbmZvcm1hdGlvbgotICBhdCBsZXZlbCA0LgotLSBJbmNsdWRlZCBlYXJseSBiYWlsLW91dCB3aGVuIGRyaXZlIG9mZmxpbmUsIHByZXZlbnRpbmcgYSBsb3Qgb2YKLSAgZmFsc2UgbWVzc2FnZXMuCi0tIE1vdmVkIGZ0YXBlX3BhcmFtZXRlcl94eHgoKSBvZmZzZXRzIGludG8gZnVuY3Rpb24gaW5zdGVhZCBvZiBpbiBjYWxscy4KLS0gUmVtb3ZlZCAnd2VpcmQsIGRyaXZlIGJ1c3kgYnV0IG5vIGRhdGEnIGVycm9yIHdoZW4gY2F1c2VkIGJ5Ci0gIGFuIGVycm9yIGR1cmluZyBhIHJlYWQtaWQuCi0tIEltcHJvdmVkICd0aW1lb3V0IG9uIGFja25vd2xlZGdlJyBkaWFnbm9zdGljcy4KLS0gTW92ZWQgTU9EVUxFIG9wdGlvbiBpbnRvIENvbmZpZ3VyZS4KLS0gUmVkdWNlZCBjb2RlIHNpemUgd2hlbiBubyB0cmFjaW5nIGF0IGFsbCB3YXMgc2V0IChDbGF1cyBIZWluZSkuCi0tIE5vIGxvbmdlciBsb2cgZXJyb3IgY29kZSAwIChubyBlcnJvcikgYXMgYW4gZXJyb3IuCi0KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMi4wMmIsIDA5LzA0Lzk1ID09PT09Ci0KLS0gUmVsYXhlZCB0aW1pbmcgZm9yIHN0YXR1cyBvcGVyYXRpb24gYW5kIGRpc3BsYXlpbmcKLSAgYWJub3JtYWwgcmVzdWx0cy4gSG9wZWZ1bGx5IHRoaXMgc2hvd3Mgd2hhdCdzIGdvaW5nCi0gIHdyb25nIHdpdGggdGhlIENvbm5lciBUU004NTBSIGRyaXZlcy4KLS0gQ3JlYXRlZCBzY3JpcHQgZm9yIGNvbmZpZ3VyYXRpb24sIHVzaW5nIHZlcnNpb24gbnVtYmVyCi0gIG9mIGtlcm5lbCBzb3VyY2UgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgL3Byb2MvdmVyc2lvbi4KLS0gRml4ZWQgY29uZGl0aW9uYWxzIGluIGtlcm5lbC1pbnRlcmZhY2UuYy4KLS0gUmVtb3ZlZCB1bmF2b2lkYWJsZSBUUkFDRSBvdXRwdXQuCi0KLQotPT09PT0gUmVsZWFzZSBub3RlcyBmb3IgZnRhcGUtMi4wMmEsIDAxLzA0Lzk1ID09PT09Ci0KLS0gSW1wbGVtZW50ZWQgYG5ldy1zdHlsZScgKHZlcnNpb25lZCkgbW9kdWxlcyBzdXBwb3J0IGZvciBuZXcKLSAga2VybmVscy4KLS0gUmVkdWNlZCBzaXplIG9mIG1vZHVsZSBieSBtb3Zpbmcgc3RhdGljIGRhdGEgdG8gYnNzLgotLSBOb3cgdXNpbmcgdmVyc2lvbiBudW1iZXIgb2Yga2VybmVsIHNvdXJjZSBpbnN0ZWFkIG9mIHJ1bm5pbmcKLSAga2VybmVsIGZvciBrZXJuZWwgdmVyc2lvbnMgPj0gMS4xLjgyCi0tIEFkZGVkIGZlZWRiYWNrIG9uIGRyaXZlIHNwZWVkcyB0byB2ZW5kb3IgaW5mb3JtYXRpb24uCi0tIEluY2x1ZGVkIGZpeGVkIGluc21vZCBzb3VyY2VzIHRvIGRpc3RyaWJ1dGlvbiAoTGV0J3MgaG9wZQotICB0aGUgbW9kdWxlcyBkaXN0cmlidXRpb24gZ2V0IGZpeGVkIHNvb24gOi0vKS4KLQotTm90ZSB0aGF0IEkgaGF2ZW4ndCB5ZXQgaW1wbGVtZW50ZWQgYW55IG9mIHRoZSBjb2RlIGV4dGVuc2lvbiBJCi1yZWNlaXZlZC4gSSBob3BlIHRvIGZpbmQgc29tZSB0aW1lIHRvIGRvIHRoaXMgc29vbi4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAyLCAxNS8wMS85NSA9PT09PQotCi0KLS0gRml4ZWQgZmFpbGluZyByZXBvc2l0aW9uaW5nIHdoZW4gb3ZlcnNob290IHdhcyBpbmNyZW1lbnRlZC4KLS0gRml4ZWQgcmF0ZSBzZWxlY3Rpb246IEJlY2F1c2Ugb2YgYSBkZWZpY2llbmN5IGluIHRoZSBRSUMtMTE3Ci0gIHNwZWNpZmljYXRpb24gb25lIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbm90IGltcGxlbWVudGVkCi0gIGFuZCBhIGZhaWxpbmcgY29tbWFuZC4gVGhlcmVmb3Igd2Ugbm93IHRyeSB0byBmaW5kIG91dCBpZiB0aGUKLSAgZHJpdmUgZG9lcyBzdXBwb3J0IHRoaXMgY29tbWFuZCBiZWZvcmUgdXNhZ2UuCi0tIEZpeGVkIGVycm9yIHJldHJ5IHVzaW5nIHdyb25nIG9mZnNldCBpbiBmZGMtaXNyLgotLSBJbXByb3ZlZCByZXRyeSBjb2RlIHRvIHJldHJ5IG9ubHkgb25jZSBvbiBhIHNpbmdsZSBuby1kYXRhCi0gIGVycm9yIGluIGEgc2VnbWVudC4KLS0gVmFsaWRhdGUgc2VjdG9yIG51bWJlciBleHRyYWN0ZWQgZnJvbSBlb2YgbWFyayBiZWNhdXNlIGFuCi0gIGludmFsaWQgZmlsZSBtYXJrIChkdWUgdG8gPz8/KSBjb3VsZCBjYXVzZSBrZXJuZWwgcGFuaWMuCi0tIFNwbGl0IGZ0YXBlLWlvLmMgaW50byBmdGFwZS1pby5jIGFuZCBmdGFwZS1jdGwuYyBmaWxlcy4KLS0gQ29ycmVjdGVkIHRvbyBoaWdoIG1lZGlhIGVycm9yIGNvdW50IGFmdGVyIHdyaXRpbmcgdG8KLSAgYSBiYWQgdGFwZS4KLS0gQWRkZWQgI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+IGFnYWluIGJlY2F1c2Ugb2xkIGtlcm5lbCB2ZXJzaW9ucwotICBuZWVkIGl0LgotLSBGaXhlZCBmZGMgbm90IGJlaW5nIGRpc2FibGVkIHdoZW4gb3BlbiBmYWlsZWQgYmVjYXVzZSBubyB0YXBlCi0gIGRyaXZlIHdhcyBmb3VuZC4KLS0gRml4ZWQgcHJvYmxlbSB3aXRoIHNvZnQgZXJyb3IgaW4gc2VjdG9yIDMyIChzaGlmdCBvcGVyYXRvciB3aXRoCi0gIHNoaWZ0Y291bnQgMzIgaXMgbm90IGRlZmluZWQpLgotCi0KLT09PT09IFJlbGVhc2Ugbm90ZXMgZm9yIGZ0YXBlLTIuMDEsIDA4LzAxLzk1ID09PT09Ci0KLQotLSBSZW1vdmVkIFRFU1RJTkcgc2V0dGluZyBmcm9tIGRpc3RyaWJ1dGVkIE1ha2VmaWxlLgotLSBGaXhlZCBgbXQgYXNmJyBmYWlsdXJlOiBSZXdpbmQgd2FzIGRlZmVycmVkIHRvIGNsb3NlIHdoaWNoCi0gIG92ZXJydWxlZCB0aGUgZnNmIGlvY3RsLgotLSBQcmV2ZW50ZWQgbm9uLWludGVycnVwdGlibGUgY29tbWFuZHMgYmVpbmcgaW50ZXJydXB0ZWQuCi0tIEFkZGVkIG1pc3NpbmcgdGltZW91dC5wYXVzZSBzZXR0aW5nLgotLSBNYXhpbXVtIHRhcGUgc3BlZWQgcmVhZCBmcm9tIGRyaXZlIHR5cGUgaW5mb3JtYXRpb24gdGFibGUuCi0gIElmIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgaW4gdGhlIHRhYmxlICgwKSB0aGUgZHJpdmUgd2lsbAotICBkZXRlcm1pbmUgdGhlIHNwZWVkIGl0c2VsZiBhbmQgcHV0IGEgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZS4KLSAgVGhpcyBpbmZvcm1hdGlvbiBzaG91bGQgdGhlbiBiZSBhZGRlZCB0byB0aGUgdGFibGUgaW4gdGhlCi0gIHZlbmRvcnMuaCBmaWxlIChhbmQgcmVwb3J0ZWQgdG8gbWUpLgotLSBBZGRlZCBjYWxsIHRvIGZ0YXBlX2luaXRfZHJpdmUgYWZ0ZXIgc29mdCByZXNldCBmb3IgdGhvc2UKLSAgKGFudGlxdWUpIGRyaXZlcyB0aGF0IGRvbid0IGRvIGFuIGltcGxpY2l0IHNlZWtfbG9hZF9wb2ludAotICBhZnRlciBhIHJlc2V0IG9yIHBvd2VyIHVwLgotLSBEb24ndCB0cnkgdG8gc2V0IGRhdGEgcmF0ZSBpZiByZXNldCBmYWlsZWQuCi0tIFByZXZlbnQgdXBkYXRlIG9mIHNlZWsgdmFyaWFibGVzIHdoZW4gc3RhcnRpbmcgZnJvbSB0aGUKLSAgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHRhcGUuCi0tIEZpeGVkIHdyb25nIGFkanVzdG1lbnQgb2Ygb3ZlcnNob290IGluIHNlZWtfZm9yd2FyZCgpLgotLSBBZGRlZCBzeW5jIHRvIE1ha2VmaWxlIChhZ2FpbikuCi0tIEFkZGVkIGNvZGUgdG8gZGlhZ25vc2UgdGltZXIgcHJvYmxlbXMgKGNhbGlici5jKS4KLS0gUmVwbGFjZWQgdGltZSBkaWZmZXJlbmNlcyBieSB0aW1lZGlmZiBjYWxscy4KLS0gUmVtb3ZlZCByZWZlcmVuY2UgdG8gZG9fZmxvcHB5IGZyb20gb2JqZWN0IGZvciByZWNlbnQga2VybmVscy4KLS0gRml4ZWQgd3JvbmcgZGlzcGxheSBvZiAnZmFpbGluZyBkbWEgY29udHJvbGxlcicgbWVzc2FnZS4KLS0gUmVtb3ZlZCB2YXJpb3VzIG5vIGxvbmdlciB1c2VkICNpbmNsdWRlIHN0YXRlbWVudHMuCi0tIEFkZGVkIG1heC4gdGFwZSBzcGVlZCB2YWx1ZSB0byB2ZW5kb3Itc3RydWN0LgotLSBDaGFuZ2VkIGZ0YXBlLWNvbW1hbmQgdG8gY2hlY2sgcHJlLWNvbmRpdGlvbnMgYW5kIHdhaXQKLSAgaWYgbmVlZGVkLgotLSBGdXJ0aGVyIHVwZGF0ZWQgcWljMTE3LmggdG8gcmV2IEcuCi0tIENvbWJpbmVkIGNvbW1hbmQgbmFtZSB0YWJsZSBhbmQgcmVzdHJpY3Rpb25zIHRhYmxlIHRvIG9uZS4KLSAgRXh0ZW5kZWQgdGhpcyB0YWJsZSB3aXRoIHNvbWUgbmV3IGZpZWxkcy4KLS0gSW5jcmVhc2VkIHRpbWVvdXQgb24gQWNrIHRpbWVyIHZhbHVlIGFuZCBpbmNsdWRlZCBjb2RlIHRvCi0gIHJlcG9ydCBvdXQgb2Ygc3BlYyBiZWhhdmlvdXIuCi0tIEluY3JlYXNlZCByZXdpbmQgdGltZW91dCBtYXJnaW4gdG8gY2FsY3VsYXRlZCArIDIwJS4KLS0gSW1wcm92ZWQgZGF0YSByYXRlIHNlbGVjdGlvbiBzbyBpdCB3b24ndCBmYWlsIG9uIHNvbWUKLSAgb2xkZXIgKHByZSBzdGFuZGFyZCkgZHJpdmVzLgotLSBDaGFuZ2VkIGluaXRpYWxpc2F0aW9uIGNvZGUgc28gZHJpdmUgd2lsbCBiZSByZXdvdW5kIGlmIHRoZQotICBkcml2ZXIgaXMgcmVsb2FkZWQgYW5kIHRoZSB0YXBlIGlzIG5vdCBhdCBib3QuCi0tIE1vdmVkIHNvbWUgb2YgdGhlIGZsdXNoIG9wZXJhdGlvbnMgZnJvbSBjbG9zZSB0byB0aGUgaW9jdGxzLgotLSBBZGRlZCBleGl0IGNvZGUgdmFsdWUgdG8gZmFpbGluZyB2ZXJpZnkgYXJlYSBtZXNzYWdlLgotLSBMb29wIHVudGlsIHRhcGUgaGFsdGVkIGluIHNtYXJ0LXN0b3AuCi0tIEZhc3Qgc2VlayBoYW5kbGVkIHNwZWNpYWxseSBpZiBsb2NhdGVkIGF0IGJvdCBvciBlb3QuCi0tIEJlaW5nIG1vcmUgY29uc2VydmF0aXZlIG9uIG92ZXJzaG9vdCB2YWx1ZS4KLQotCi09PT09PSBSZWxlYXNlIG5vdGVzIGZvciBmdGFwZS0yLjAwLCAzMS8xMi85NCA9PT09PQotCi0gIFRoZSBJbnN0YWxsLWd1aWRlIGlzIGNvbXBsZXRlbHkgcmV3cml0dGVuIGFuZCBub3cgYWxzbyBpbmNsdWRlcwotc29tZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBkcml2ZXIuIElmIHlvdSdyZSBlaXRoZXIgbmV3Ci10byBmdGFwZSBvciBuZXcgdG8gVW5peCB0YXBlIGRldmljZXMgbWFrZSBzdXJlIHRvIHJlYWQgaXQgIQotCi0gIElmIHlvdSBvd24gYSBwY2kgc3lzdGVtIGFuZCBleHBlcmllbmNlIHByb2JsZW1zIHdpdGggdGhlCi1mdGFwZSBkcml2ZXIgbWFrZSBzdXJlIHRvIHJlYWQgdGhlIFJFQURNRS5QQ0kgZmlsZS4gSXQgY29udGFpbnMKLXNvbWUgaGludHMgb24gaG93IHRvIGZpeCB5b3VyIGhhcmR3YXJlLgotCi0gIEZvciBhbnlib2R5IHdobyBoYXNuJ3Qgbm90aWNlZDogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZQotZHJpdmVyIGhhcyBiZWVuIGluY3JlbWVudGVkIChUaGUgbGF0ZXN0IHJlbGVhc2VkIHZlcnNpb24gaGFzCi1iZWVuIHZlcnNpb24gMS4xNGQpLgotICBUaGlzIGhhcyBiZWVuIGRvbmUgZm9yIHR3byBtYWpvciByZWFzb25zOgotCi0gIG8gIEEgbmV3IChiZXR0ZXIpIGVycm9yIHJlY292ZXJ5IHNjaGVtZSBpcyBpbXBsZW1lbnRlZC4KLSAgbyAgU3VwcG9ydCBmb3IgbmV3IGRyaXZlIHR5cGVzIGhhcyBiZWVuIGFkZGVkLgotCi0gIEFsbCB0aGVzZSBpbXByb3ZlbWVudHMvY2hhbmdlcyB3aWxsIHByb2JhYmx5IGluY2x1ZGUgYSBjb3VwbGUKLW9mIG5ldyAoYW5kIG9sZD8pIGJ1Z3MuIElmIHlvdSBlbmNvdW50ZXIgYW55IHByb2JsZW1zIHRoYXQgeW91IHRoaW5rCi1JJ20gbm90IHlldCBhd2FyZSBvZiwgZmVlbCBmcmVlIHRvIHNlbmQgYSByZXBvcnQgdG8gPGJhc0B2aW1lYy5ubD4uCi0gIEkgcmVjb21tZW5kIGtlZXBpbmcgYSB2ZXJzaW9uIG9mIGZ0YXBlLTEuMTRkIGF2YWlsYWJsZSwganVzdAotaW4gY2FzZSA7LSkKLQotICBUaGlzIHZlcnNpb24gc2hvdWxkIHdvcmsgd2l0aCBhbGwga2VybmVsIHZlcnNpb25zIGZyb20gMS4wLjkgdXAKLXRvIDEuMS43MiAoYW5kIHByb2JhYmx5IGVhcmxpZXIgYW5kIGxhdGVyIHZlcnNpb25zIHRvbykuCi0KLQotTWFqb3IgbmV3IGZlYXR1cmVzOgotCi0tIEJldHRlciBoYW5kbGluZyBvZiB0YXBlcyB3aXRoIGRlZmVjdHM6IFdoZW4gYSBzZWN0b3IgcmVwZWF0ZWRseQotICAoU09GVF9SRVRSSUVTIGluIGZ0YXBlLmgpIGNhbm5vdCBiZSB3cml0dGVuIHRvIG9yIHJlYWQgZnJvbSBpdCBpcwotICBtYXJrZWQgYXMgYW4gaGFyZCBlcnJvciBhbmQgZ2V0cyBza2lwcGVkLgotICBUaGUgZXJyb3IgY29ycmVjdGlvbiBjb2RlIGNhbiBoYW5kbGUgdXAgdG8gdGhyZWUgb2YgdGhlc2UgaGFyZAotICBlcnJvcnMgcHJvdmlkZWQgdGhlcmUgYXJlIG5vIG90aGVyIGVycm9ycyBpbiB0aGF0IHNlZ21lbnQgKDMyIEtiKS4KLSAgCi0tIEFsbG93cyB3cml0aW5nIHRvIHRhcGVzIHdpdGggZGVmZWN0cyAoYWx0aG91Z2ggdGhlIHJpc2sgb2YgbG9vc2luZwotICBkYXRhIGluY3JlYXNlcyAhKQotICBMb29rIGZvciB0aGUgbWVkaWEtZGVmZWN0cyBlbnRyeSBwcmludGVkIHdpdGggdGhlIHN0YXRpc3RpY3Mgd2hlbgotICB0aGUgdGFwZSBpcyBjbG9zZWQuIEEgbm9uLXplcm8gdmFsdWUgaGVyZSBzaG93cyBhIGJhZCB0YXBlLgotICBbdGhlIGFjdHVhbCBjb3VudCBpcyB3cm9uZyAodG9vIGhpZ2gpLCB0aGlzIGlzIGEga25vd24gYnVnXS4KLQotLSBVc2Ugb2YgYmFja3VwIGhlYWRlciBzZWdtZW50IGlmIGZpcnN0IG9uZSBpcyBmYWlsaW5nLgotCi0tIFN1cHBvcnQgZm9yIGV4dGVuZGVkIGxlbmd0aCB0YXBlcyB3aXRoIFFJQy04MDogYm90aCA0MjUgYW5kIDExMDAgZnQuCi0gIDAuMjUgaW5jaCB0YXBlcyBhcmUgbm93IHJlY29nbml6ZWQgYW5kIGhhbmRsZWQuCi0KLS0gU3VwcG9ydCBmb3IgbmV3IFFJQy04MCBkcml2ZXMgd2l0aCA4IG1tIGB3aWRlJyB0YXBlcyAoZS5nLiBDb25uZXIKLSAgVFNNIDQyMCkuCi0KLS0gU3VwcG9ydCBmb3IgbmV3IFFJQy0zMDEwIGFuZCBRSUMtMzAyMCBkcml2ZXMgKGV4cGVyaW1lbnRhbCkgd2l0aAotICBib3RoIDAuMjUgaW5jaCBhbmQgOCBtbSB0YXBlcy4KLQotU29tZSBtaW5vciBmZWF0dXJlcyB3ZXJlIGFkZGVkLCBhIGNvdXBsZSBvZiBzbWFsbCBidWdzIHdlcmUgZml4ZWQgYW5kCi1wcm9iYWJseSBzb21lIG5ldyBvbmVzIGludHJvZHVjZWQgOy0pLgotCi1bbHNlZWsoKSBkaWRuJ3QgbWFrZSBpdCBpbnRvIHRoaXMgdmVyc2lvbl0KLQotSGF2ZSBmdW4sCi0KLUJhcy4KLS0tLS0KLSBMb2NhbFdvcmRzOiAgZnRhcGUgTUNPTkZJRyBtdCBWRlMgemZ0YXBlIHJlc3Agc2Z0YXBlIHByb2Mgc3ViZGlyIE1USU9DVk9MSU5GTwotIExvY2FsV29yZHM6ICBNVElPQ0dFVFNJWkUgQk9UIEVPRCBNVEJTRiB6ZnQga2VybmVsZCBtb2Rwcm9iZSBrZHRpbWUgY29udHJpYiBUUgotIExvY2FsV29yZHM6ICBNVFNFVEJMSyBhZmlvIHVuaW5zdGFsbCB0ZXhpIHd3dyBFSU8gUUlDIGluaXQgc2Z0IGVvZiBha2EgZG1hIEdCCi0gTG9jYWxXb3JkczogIFNJR0tJTEwgTVRJT0NGVENNRCBtbWFwIElvbWVnYSBGREMgZmRjIGlvIGdudW10IG10aW8gZmMgYXNtIGluYgotIExvY2FsV29yZHM6ICBvdXRiIGZ0IHFpYyBmcm9udGVuZCBUZVhpbmZvIGlycSBtYWNoIE1PRFZFUlNJT05TIENPTkZJRyBodG1sIGR2aQotIExvY2FsV29yZHM6ICB1c3IgZG9jIFNNUCBNYiBEdW5ubyBGSVhNRSB2dGJsYyBwZXJsIGxpc3R0YXBlIHZvbGluZm8gZnNmIE1UV0VPRgotIExvY2FsV29yZHM6ICBhbWFuZGEgZGVnYXVzc2VkIENvbUJ5dGUgRG91YmxlUGxheSB3aHJhdmVuIG5qYWNrbiBjb20gTVRJT0MgdnRibAotIExvY2FsV29yZHM6ICBHRVRCTEtTWiBNQUtFREVWIHpmdGFwZSdzIGxpbnV4IGRpZiBDVlMgUmV2aXNvbiBjcCBNVFJFVyBNVE9GRkwKLSBMb2NhbFdvcmRzOiAgTVRGU0YgQlNGIE1hcmNpbiBEYWxlY2tpIEdDQyBDb25maWcgY3BpbyBzd2Fwb3V0IEthaSBIYXJyZWtpbGRlCi0gTG9jYWxXb3JkczogIFBlZGVyc29uIGtocCBkb2xwaGluaWNzIEp1c3R1cyBjbGF1cyBtb21vIHJ3dGggYWFjaGVuIExhYXJob3ZlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2NvbXByZXNzb3IvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZiZDZjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMKLSMgICAgICAgQ29weXJpZ2h0IChDKSAxOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMgCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jIAotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotIwotIyAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvY29tcHJlc3Nvci9NYWtlZmlsZSx2ICQKLSMgJFJldmlzaW9uOiAxLjEgJAotIyAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxMjoyOCAkCi0jCi0jICAgICAgTWFrZWZpbGUgZm9yIHRoZSBvcHRpb25hbCBjb21wcmVzc29yIGZvciB0aCB6ZnRhcGUgVkZTCi0jICAgICAgaW50ZXJmYWNlIHRvIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciBmb3IKLSMgICAgICBMaW51eC4KLSMKLQotb2JqLSQoQ09ORklHX1pGVF9DT01QUkVTU09SKSArPSB6ZnQtY29tcHJlc3Nvci5vCi0KLXpmdC1jb21wcmVzc29yLW9ianMgOj0gemZ0YXBlLWNvbXByZXNzLm8gbHpydzMubwotCi1DRkxBR1NfbHpydzMubwk6PSAtTzYgLWZ1bnJvbGwtYWxsLWxvb3BzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci9senJ3My5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2NvbXByZXNzb3IvbHpydzMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAzMmEwZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci9senJ3My5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQzICswLDAgQEAKLS8qCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvY29tcHJlc3Nvci9senJ3My5jLHYgJAotICogJFJldmlzaW9uOiAxLjEgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTI6MjkgJAotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mIFJvc3MgV2lsbGlhbXMgbHpydzMgYWxnb3JpdGhtLiBBZGFwdGlvbiBmb3IgemZ0YXBlLgotICoKLSAqLwotCi0jaW5jbHVkZSAiLi4vY29tcHJlc3Nvci9senJ3My5oIiAgICAgICAvKiBEZWZpbmVzIHNpbmdsZSBleHBvcnRlZCBmdW5jdGlvbiAiY29tcHJlc3MiLiAgICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMWlJXMy5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEF1dGhvciAgOiBSb3NzIFdpbGxpYW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBEYXRlICAgIDogMzAtSnVuLTE5OTEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogUmVsZWFzZSA6IDEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgZmlsZSBjb250YWlucyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpSVzMgZGF0YSBjb21wcmVzc2lvbiAgICAgICAgICovCi0vKiBhbGdvcml0aG0gaW4gQy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoZSBhbGdvcml0aG0gaXMgYSBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gYWxnb3JpdGhtIHRoYXQgcnVucyBmYXN0ICAgICovCi0vKiBhbmQgZ2l2ZXMgcmVhc29uYWJsZSBjb21wcmVzc2lvbi4gVGhlIGFsZ29yaXRobSBpcyBhIG1lbWJlciBvZiB0aGUgTGVtcGVsICAqLwotLyogWml2IGZhbWlseSBvZiBhbGdvcml0aG1zIGFuZCBiYXNlcyBpdHMgY29tcHJlc3Npb24gb24gdGhlIHByZXNlbmNlIGluIHRoZSAgKi8KLS8qIGRhdGEgb2YgcmVwZWF0ZWQgc3Vic3RyaW5ncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhpcyBhbGdvcml0aG0gaXMgdW5wYXRlbnRlZCBhbmQgdGhlIGNvZGUgaXMgcHVibGljIGRvbWFpbi4gQXMgdGhlICAgICAgICAgKi8KLS8qIGFsZ29yaXRobSBpcyBiYXNlZCBvbiB0aGUgTFo3NyBjbGFzcyBvZiBhbGdvcml0aG1zLCBpdCBpcyB1bmxpa2VseSB0byBiZSAgICovCi0vKiB0aGUgc3ViamVjdCBvZiBhIHBhdGVudCBjaGFsbGVuZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFVubGlrZSB0aGUgTFpSVzEgYW5kIExaUlcxLUEgYWxnb3JpdGhtcywgdGhlIExaUlczIGFsZ29yaXRobSBpcyAgICAgICAgICAgICovCi0vKiBkZXRlcm1pbmlzdGljIGFuZCBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIHRoZSBzYW1lIGNvbXByZXNzZWQgICAgICAgICAgICAgICAqLwotLyogcmVwcmVzZW50YXRpb24gZm9yIGEgZ2l2ZW4gZmlsZSBlYWNoIHRpbWUgaXQgaXMgcnVuLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGUgTFpSVzMgYWxnb3JpdGhtIHdhcyBvcmlnaW5hbGx5IGRlc2lnbmVkIGFuZCBpbXBsZW1lbnRlZCAgICAgICAgICAgICAgICAqLwotLyogYnkgUm9zcyBXaWxsaWFtcyBvbiAzMS1EZWMtMTk5MC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBIZXJlIGFyZSB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGlzIGNvZGUsIGNvbXBpbGVkIHVuZGVyIFRISU5LIEMgNC4wICAgICAqLwotLyogYW5kIHJ1bm5pbmcgb24gYSBNYWMtU0UgKDhNSHogNjgwMDApLCB0byB0aGUgc3RhbmRhcmQgY2FsZ2FyeSBjb3JwdXMuICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAqLwotLyogICAgfCBEQVRBIENPTVBSRVNTSU9OIFRFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgKi8KLS8qICAgIHwgPT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICovCi0vKiAgICB8IFRpbWUgb2YgcnVuICAgICA6IFN1biAzMC1KdW4tMTk5MSAwOTozMVBNICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAqLwotLyogICAgfCBUaW1pbmcgYWNjdXJhY3kgOiBPbmUgcGFydCBpbiAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgKi8KLS8qICAgIHwgQ29udGV4dCBsZW5ndGggIDogMjYyMTQ0IGJ5dGVzICg9IDI1Ni4wMDAwSykgICAgICAgICAgICAgICAgICAgfCAgICAgICovCi0vKiAgICB8IFRlc3Qgc3VpdGUgICAgICA6IENhbGdhcnkgQ29ycHVzIFN1aXRlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAqLwotLyogICAgfCBGaWxlcyBpbiBzdWl0ZSAgOiAxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgKi8KLS8qICAgIHwgQWxnb3JpdGhtICAgICAgIDogTFpSVzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICovCi0vKiAgICB8IE5vdGU6IEFsbCBhdmVyYWdlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSB1bi1yb3VuZGVkIHZhbHVlcy4gIHwgICAgICAqLwotLyogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgKi8KLS8qICAgIHwgRmlsZSBOYW1lICAgTGVuZ3RoICBDeEIgIENvbUxlbiAgJVJlbW4gIEJpdHMgIENvbSBLL3MgIERlYyBLL3MgfCAgICAgICovCi0vKiAgICB8IC0tLS0tLS0tLS0gIC0tLS0tLSAgLS0tICAtLS0tLS0gIC0tLS0tICAtLS0tICAtLS0tLS0tICAtLS0tLS0tIHwgICAgICAqLwotLyogICAgfCBycHVzOkJpYi5EICAxMTEyNjEgICAgMSAgIDU1MDMzICAgNDkuNSAgMy45NiAgICAxOS40NiAgICAzMi4yNyB8ICAgICAgKi8KLS8qICAgIHwgdXM6Qm9vazEuRCAgNzY4NzcxICAgIDMgIDQ2Nzk2MiAgIDYwLjkgIDQuODcgICAgMTcuMDMgICAgMzEuMDcgfCAgICAgICovCi0vKiAgICB8IHVzOkJvb2syLkQgIDYxMDg1NiAgICAzICAzMTcxMDIgICA1MS45ICA0LjE1ICAgIDE5LjM5ICAgIDM0LjE1IHwgICAgICAqLwotLyogICAgfCBycHVzOkdlby5EICAxMDI0MDAgICAgMSAgIDgyNDI0ICAgODAuNSAgNi40NCAgICAxMS42NSAgICAxOC4xOCB8ICAgICAgKi8KLS8qICAgIHwgcHVzOk5ld3MuRCAgMzc3MTA5ICAgIDIgIDIwNTY3MCAgIDU0LjUgIDQuMzYgICAgMTcuMTQgICAgMjcuNDcgfCAgICAgICovCi0vKiAgICB8IHB1czpPYmoxLkQgICAyMTUwNCAgICAxICAgMTMwMjcgICA2MC42ICA0Ljg1ICAgIDEzLjQwICAgIDE4Ljk1IHwgICAgICAqLwotLyogICAgfCBwdXM6T2JqMi5EICAyNDY4MTQgICAgMSAgMTE2Mjg2ICAgNDcuMSAgMy43NyAgICAxOS4zMSAgICAzMC4xMCB8ICAgICAgKi8KLS8qICAgIHwgczpQYXBlcjEuRCAgIDUzMTYxICAgIDEgICAyNzUyMiAgIDUxLjggIDQuMTQgICAgMTguNjAgICAgMzEuMTUgfCAgICAgICovCi0vKiAgICB8IHM6UGFwZXIyLkQgICA4MjE5OSAgICAxICAgNDUxNjAgICA1NC45ICA0LjQwICAgIDE4LjQ1ICAgIDMyLjg0IHwgICAgICAqLwotLyogICAgfCBycHVzOlBpYy5EICA1MTMyMTYgICAgMiAgMTIyMzg4ICAgMjMuOCAgMS45MSAgICAzNS4yOSAgICA1MS4wNSB8ICAgICAgKi8KLS8qICAgIHwgdXM6UHJvZ2MuRCAgIDM5NjExICAgIDEgICAxOTY2OSAgIDQ5LjcgIDMuOTcgICAgMTguODcgICAgMzAuNjQgfCAgICAgICovCi0vKiAgICB8IHVzOlByb2dsLkQgICA3MTY0NiAgICAxICAgMjgyNDcgICAzOS40ICAzLjE1ICAgIDI0LjM0ICAgIDQwLjY2IHwgICAgICAqLwotLyogICAgfCB1czpQcm9ncC5EICAgNDkzNzkgICAgMSAgIDE5Mzc3ICAgMzkuMiAgMy4xNCAgICAyMy45MSAgICAzOS4yMyB8ICAgICAgKi8KLS8qICAgIHwgdXM6VHJhbnMuRCAgIDkzNjk1ICAgIDEgICAzMzQ4MSAgIDM1LjcgIDIuODYgICAgMjUuNDggICAgNDAuMzcgfCAgICAgICovCi0vKiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAqLwotLyogICAgfCBBdmVyYWdlICAgICAyMjQ0MDEgICAgMSAgMTEwOTUzICAgNTAuMCAgNC4wMCAgICAyMC4xNyAgICAzMi43MiB8ICAgICAgKi8KLS8qICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgYnkgdGhlICJjb21wcmVzcyIgZnVuY3Rpb24gYmVsb3cgd2hlbiAgKi8KLS8qIHRoZSB1c2VyIGFza3MgdGhlIGZ1bmN0aW9uIHRvIHJldHVybiBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICovCi0vKiBUaGUgbW9zdCBpbXBvcnRhbnQgZmllbGQgaW4gdGhlIHJlY29yZCBpcyB0aGUgd29ya2luZyBtZW1vcnkgZmllbGQgd2hpY2ggICAqLwotLyogdGVsbHMgdGhlIGNhbGxpbmcgcHJvZ3JhbSBob3cgbXVjaCB3b3JraW5nIG1lbW9yeSBzaG91bGQgYmUgcGFzc2VkIHRvICAgICAgKi8KLS8qICJjb21wcmVzcyIgd2hlbiBpdCBpcyBjYWxsZWQgdG8gcGVyZm9ybSBhIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24uICAgICovCi0vKiBMWlJXMyB1c2VzIHRoZSBzYW1lIGFtb3VudCBvZiBtZW1vcnkgZHVyaW5nIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLiAqLwotLyogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBzdHJ1Y3R1cmUgc2VlICJjb21wcmVzcy5oIi4gICAgICAgICAgICAgICAgICAgKi8KLSAgCi0jZGVmaW5lIFUoWCkgICAgICAgICAgICAoKFVMT05HKSBYKQotI2RlZmluZSBTSVpFX1BfQllURSAgICAgKFUoc2l6ZW9mKFVCWVRFICopKSkKLSNkZWZpbmUgU0laRV9XT1JEICAgICAgIChVKHNpemVvZihVV09SRCAgKSkpCi0jZGVmaW5lIEFMSUdOTUVOVF9GVURHRSAoVSgxNikpCi0jZGVmaW5lIE1FTV9SRVEgKCBVKDQwOTYpKihTSVpFX1BfQllURSkgKyBBTElHTk1FTlRfRlVER0UgKQotCi1zdGF0aWMgc3RydWN0IGNvbXByZXNzX2lkZW50aXR5IGlkZW50aXR5ID0KLXsKLSBVKDB4MDMyRERFQTgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFsZ29yaXRobSBpZGVudGlmaWNhdGlvbiBudW1iZXIuICovCi0gTUVNX1JFUSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXb3JraW5nIG1lbW9yeSAoYnl0ZXMpIHJlcXVpcmVkLiAqLwotICJMWlJXMyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTmFtZSBvZiBhbGdvcml0aG0uICAgICAgICAgICAgICAgKi8KLSAiMS4wIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gbnVtYmVyIG9mIGFsZ29yaXRobS4gICAgICovCi0gIjMxLURlYy0xOTkwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEYXRlIG9mIGFsZ29yaXRobS4gICAgICAgICAgICAgICAqLwotICJQdWJsaWMgRG9tYWluIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29weXJpZ2h0IG5vdGljZS4gICAgICAgICAgICAgICAgKi8KLSAiUm9zcyBOLiBXaWxsaWFtcyIsICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dGhvciBvZiBhbGdvcml0aG0uICAgICAgICAgICAgICovCi0gIlJlbmFpc3NhbmNlIFNvZnR3YXJlIiwgICAgICAgICAgICAgICAgICAvKiBBZmZpbGlhdGlvbiBvZiBhdXRob3IuICAgICAgICAgICAqLwotICJQdWJsaWMgRG9tYWluIiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVmVuZG9yIG9mIGFsZ29yaXRobS4gICAgICAgICAgICAgKi8KLX07Ci0gCi1MT0NBTCB2b2lkIGNvbXByZXNzX2NvbXByZXNzICAoVUJZVEUgKixVQllURSAqLFVMT05HLFVCWVRFICosIExPTkcgKik7Ci1MT0NBTCB2b2lkIGNvbXByZXNzX2RlY29tcHJlc3MoVUJZVEUgKixVQllURSAqLExPTkcsIFVCWVRFICosIFVMT05HICopOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLiAgICAgICAgICAgICAgICAqLwotLyogRGVwZW5kaW5nIG9uIGl0cyBmaXJzdCBwYXJhbWV0ZXIsIHRoZSBmdW5jdGlvbiBjYW4gYmUgcmVxdWVzdGVkIHRvICAgICAgICAgKi8KLS8qIGNvbXByZXNzIGEgYmxvY2sgb2YgbWVtb3J5LCBkZWNvbXByZXNzIGEgYmxvY2sgb2YgbWVtb3J5LCBvciB0byBpZGVudGlmeSAgICovCi0vKiBpdHNlbGYuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHNwZWNpZmljYXRpb24gZmlsZSAiY29tcHJlc3MuaCIuICAgICAqLwotCi1FWFBPUlQgdm9pZCBsenJ3M19jb21wcmVzcygKLQlVV09SRCAgICAgYWN0aW9uLCAgICAgIC8qIEFjdGlvbiB0byBiZSBwZXJmb3JtZWQuCQkqLwotCVVCWVRFICAgKndya19tZW0sCS8qIEFkZHJlc3Mgb2Ygd29ya2luZyBtZW1vcnkgd2UgY2FuIHVzZS4qLwotCVVCWVRFICAgKnNyY19hZHIsCS8qIEFkZHJlc3Mgb2YgaW5wdXQgZGF0YS4JCSovCi0JTE9ORyAgICAgc3JjX2xlbiwJLyogTGVuZ3RoICBvZiBpbnB1dCBkYXRhLgkJKi8KLQlVQllURSAgICpkc3RfYWRyLAkvKiBBZGRyZXNzIHRvIHB1dCBvdXRwdXQgZGF0YS4JCSovCi0Jdm9pZCAgKnBfZHN0X2xlbgkvKiBBZGRyZXNzIG9mIGxvbmd3b3JkIGZvciBsZW5ndGggb2Ygb3V0cHV0IGRhdGEuKi8KLSkKLXsKLSBzd2l0Y2ggKGFjdGlvbikKLSAgIHsKLSAgICBjYXNlIENPTVBSRVNTX0FDVElPTl9JREVOVElUWToKLSAgICAgICAqKChzdHJ1Y3QgY29tcHJlc3NfaWRlbnRpdHkgKiopcF9kc3RfbGVuKT0gJmlkZW50aXR5OwotICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUFJFU1NfQUNUSU9OX0NPTVBSRVNTOgotICAgICAgIGNvbXByZXNzX2NvbXByZXNzKHdya19tZW0sc3JjX2FkcixzcmNfbGVuLGRzdF9hZHIsKExPTkcgKilwX2RzdF9sZW4pOwotICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ09NUFJFU1NfQUNUSU9OX0RFQ09NUFJFU1M6Ci0gICAgICAgY29tcHJlc3NfZGVjb21wcmVzcyh3cmtfbWVtLHNyY19hZHIsc3JjX2xlbixkc3RfYWRyLChMT05HICopcF9kc3RfbGVuKTsKLSAgICAgICBicmVhazsKLSAgIH0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBCUklFRiBERVNDUklQVElPTiBPRiBUSEUgTFpSVzMgQUxHT1JJVEhNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoZSBMWlJXMyBhbGdvcml0aG0gaXMgaWRlbnRpY2FsIHRvIHRoZSBMWlJXMS1BIGFsZ29yaXRobSBleGNlcHQgdGhhdCAgICAgICovCi0vKiBpbnN0ZWFkIG9mIHRyYW5zbWl0dGluZyBoaXN0b3J5IG9mZnNldHMsIGl0IHRyYW5zbWl0cyBoYXNoIHRhYmxlIGluZGV4ZXMuICAqLwotLyogSW4gb3JkZXIgdG8gZGVjb2RlIHRoZSBpbmRleGVzLCB0aGUgZGVjb21wcmVzc29yIG11c3QgbWFpbnRhaW4gYW4gICAgICAgICAgKi8KLS8qIGlkZW50aWNhbCBoYXNoIHRhYmxlLiBDb3B5IGl0ZW1zIGFyZSBzdHJhaWdodGZvcndhcmQ6d2hlbiB0aGUgZGVjb21wcmVzc29yICovCi0vKiByZWNlaXZlcyBhIGNvcHkgaXRlbSwgaXQgc2ltcGx5IGxvb2tzIHVwIHRoZSBoYXNoIHRhYmxlIHRvIHRyYW5zbGF0ZSB0aGUgICAqLwotLyogaW5kZXggaW50byBhIHBvaW50ZXIgaW50byB0aGUgZGF0YSBhbHJlYWR5IGRlY29tcHJlc3NlZC4gVG8gdXBkYXRlIHRoZSAgICAgKi8KLS8qIGhhc2ggdGFibGUsIGl0IHJlcGxhY2VzIHRoZSBzYW1lIHRhYmxlIGVudHJ5IHdpdGggYSBwb2ludGVyIHRvIHRoZSBzdGFydCAgICovCi0vKiBvZiB0aGUgbmV3bHkgZGVjb2RlZCBwaHJhc2UuIFRoZSB0cmlja3kgcGFydCBpcyB3aXRoIGxpdGVyYWwgaXRlbXMsIGZvciBhdCAqLwotLyogdGhlIHRpbWUgdGhhdCB0aGUgZGVjb21wcmVzc29yIHJlY2VpdmVzIGEgbGl0ZXJhbCBpdGVtIHRoZSBkZWNvbXByZXNzb3IgICAgKi8KLS8qIGRvZXMgbm90IGhhdmUgdGhlIHRocmVlIGJ5dGVzIGluIHRoZSBaaXYgKHRoYXQgdGhlIGNvbXByZXNzb3IgaGFzKSB0byAgICAgICovCi0vKiBwZXJmb3JtIHRoZSB0aHJlZS1ieXRlIGhhc2guIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgaW4gTFpSVzMsIGJvdGggdGhlICAgICAqLwotLyogY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIGFyZSB3aXJlZCB1cCBzbyB0aGF0IHRoZXkgImJ1ZmZlciIgdGhlc2UgICAgICAgKi8KLS8qIGxpdGVyYWxzIGFuZCB1cGRhdGUgdGhlaXIgaGFzaCB0YWJsZXMgb25seSB3aGVuIHRocmVlIGJ5dGVzIGFyZSBhdmFpbGFibGUuICovCi0vKiBUaGlzIG1ha2VzIHRoZSBtYXhpbXVtIGJ1ZmZlcmluZyAyIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFJlcGxhY2VtZW50IG9mIG9mZnNldHMgYnkgaGFzaCB0YWJsZSBpbmRleGVzIHlpZWxkcyBhIGZldyBwZXJjZW50IGV4dHJhICAgICovCi0vKiBjb21wcmVzc2lvbiBhdCB0aGUgY29zdCBvZiBzb21lIHNwZWVkLiBMWlJXMyBpcyBzbG93ZXIgdGhhbiBMWlJXMSwgTFpSVzEtQSAqLwotLyogYW5kIExaUlcyLCBidXQgeWllbGRzIGJldHRlciBjb21wcmVzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBFeHRyYSBjb21wcmVzc2lvbiBjb3VsZCBiZSBvYnRhaW5lZCBieSB1c2luZyBhIGhhc2ggdGFibGUgb2YgZGVwdGggdHdvLiAgICAqLwotLyogSG93ZXZlciwgaW5jcmVhc2luZyB0aGUgZGVwdGggYWJvdmUgb25lIGluY3VycyBhIHNpZ25pZmljYW50IGRlY3JlYXNlIGluICAgKi8KLS8qIGNvbXByZXNzaW9uIHNwZWVkIHdoaWNoIHdhcyBub3QgY29uc2lkZXJlZCB3b3J0aHdoaWxlLiBBbm90aGVyIHJlYXNvbiBmb3IgICovCi0vKiBrZWVwaW5nIHRoZSBkZXB0aCBkb3duIHRvIG9uZSB3YXMgdG8gYWxsb3cgZWFzeSBjb21wYXJpc29uIHdpdGggdGhlICAgICAgICAqLwotLyogTFpSVzEtQSBhbmQgTFpSVzIgYWxnb3JpdGhtcyBzbyBhcyB0byBkZW1vbnN0cmF0ZSB0aGUgZXhhY3QgZWZmZWN0IG9mIHRoZSAgKi8KLS8qIHVzZSBvZiBkaXJlY3QgaGFzaCBpbmRleGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX198NDA5NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0qX3w8LS0tKyAgIC8tLS0tKy0tLVwgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHxfX198ICAgICstLS18SGFzaCAgICB8ICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8X19ffCAgICAgICAgfEZ1bmN0aW9ufCAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfF9fX3wgICAgICAgIFwtLS0tLS0tLS8gICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHxfX198MCAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICArLS0tKyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgSGFzaCAgICAgICAgKy0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFRhYmxlICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICovCi0vKiAgICAgIHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8ICAgICAgICAgICAgICAqLwotLyogICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgKi8KLS8qICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MS4uLi4uLjE4fCAgICAgIHwgICAgICAgICAgICAgICovCi0vKiAgICAgIHw8LS0tLS0tLSBMZW1wZWw9SGlzdG9yeSAtLS0tLS0tLS0tLS0+fDwtLVppdi0tPnwgICAgICB8ICAgICAgICAgICAgICAqLwotLyogICAgICB8ICAgICAoPWJ5dGVzIGFscmVhZHkgcHJvY2Vzc2VkKSAgICAgIHw8LVN0aWxsIHRvIGdvLS0+fCAgICAgICAgICAgICAgKi8KLS8qICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLS0tLSBJTlBVVCBCTE9DSyAtLS0tLS0tLS0tLS0tLS0tLS0tPnwgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhlIGRpYWdyYW0gYWJvdmUgZm9yIExaUlczIGxvb2tzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGRpYWdyYW0gZm9yICAgICAgKi8KLS8qIExaUlcxLiBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IGluIExaUlczLCB0aGUgY29tcHJlc3NvciB0cmFuc21pdHMgaGFzaCAgICAgICovCi0vKiB0YWJsZSBpbmRpY2VzIGluc3RlYWQgb2YgTGVtcGVsIG9mZnNldHMuIEZvciB0aGlzIHRvIHdvcmssIHRoZSAgICAgICAgICAgICAqLwotLyogZGVjb21wcmVzc29yIG11c3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlIGFzIHdlbGwgYXMgdGhlIGNvbXByZXNzb3IgYW5kIGJvdGggKi8KLS8qIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0ICJidWZmZXIiIGxpdGVyYWxzLCBhcyB0aGUgZGVjb21wcmVzc29yICAgICovCi0vKiBjYW5ub3QgaGFzaCBwaHJhc2VzIGNvbW1lbmNpbmcgd2l0aCBhIGxpdGVyYWwgdW50aWwgYW5vdGhlciB0d28gYnl0ZXMgaGF2ZSAqLwotLyogYXJyaXZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgTFpSVzMgQWxnb3JpdGhtIEV4ZWN1dGlvbiBTdW1tYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAxLiBIYXNoIHRoZSBmaXJzdCB0aHJlZSBieXRlcyBvZiB0aGUgWml2IHRvIHlpZWxkIGEgaGFzaCB0YWJsZSBpbmRleCBoLiAgICovCi0vKiAgMi4gTG9vayB1cCB0aGUgaGFzaCB0YWJsZSB5aWVsZGluZyBoaXN0b3J5IHBvaW50ZXIgcC4gICAgICAgICAgICAgICAgICAgICAqLwotLyogIDMuIE1hdGNoIHdoZXJlIHAgcG9pbnRzIHdpdGggdGhlIFppdi4gSWYgdGhlcmUgaXMgYSBtYXRjaCBvZiB0aHJlZSBvciAgICAgKi8KLS8qICAgICBtb3JlIGJ5dGVzLCBjb2RlIHRob3NlIGJ5dGVzIChpbiB0aGUgWml2KSBhcyBhIGNvcHkgaXRlbSwgb3RoZXJ3aXNlICAgICovCi0vKiAgICAgY29kZSB0aGUgbmV4dCBieXRlIGluIHRoZSBaaXYgYXMgYSBsaXRlcmFsIGl0ZW0uICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIDQuIFVwZGF0ZSB0aGUgaGFzaCB0YWJsZSBhcyBwb3NzaWJsZSBzdWJqZWN0IHRvIHRoZSBjb25zdHJhaW50IHRoYXQgb25seSAgKi8KLS8qICAgICBwaHJhc2VzIGNvbW1lbmNpbmcgdGhyZWUgYnl0ZXMgYmFjayBmcm9tIHRoZSBaaXYgY2FuIGJlIGhhc2hlZCBhbmQgICAgICovCi0vKiAgICAgZW50ZXJlZCBpbnRvIHRoZSBoYXNoIHRhYmxlLiAoVGhpcyBlbmFibGVzIHRoZSBkZWNvbXByZXNzb3IgdG8ga2VlcCAgICAqLwotLyogICAgIHBhY2UpLiBTZWUgdGhlIGRlc2NyaXB0aW9uIGFuZCBjb2RlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgREVGSU5JVElPTiBPRiBDT01QUkVTU0VEIEZJTEUgRk9STUFUICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAqLwotLyogICogQSBjb21wcmVzc2VkIGZpbGUgY29uc2lzdHMgb2YgYSBDT1BZIEZMQUcgZm9sbG93ZWQgYnkgYSBSRU1BSU5ERVIuICAgICAgKi8KLS8qICAqIFRoZSBjb3B5IGZsYWcgQ0YgdXNlcyB1cCBmb3VyIGJ5dGVzIHdpdGggdGhlIGZpcnN0IGJ5dGUgYmVpbmcgdGhlICAgICAgICovCi0vKiAgICBsZWFzdCBzaWduaWZpY2FudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICogSWYgQ0Y9MSwgdGhlbiB0aGUgY29tcHJlc3NlZCBmaWxlIHJlcHJlc2VudHMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmlsZSAgKi8KLS8qICAgIGV4YWN0bHkuIE90aGVyd2lzZSBDRj0wIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBmaWxlIGNvbnNpc3RzIG9mIHplcm8gICovCi0vKiAgICBvciBtb3JlIEdST1VQUywgZWFjaCBvZiB3aGljaCByZXByZXNlbnRzIG9uZSBvciBtb3JlIGJ5dGVzLiAgICAgICAgICAgICAqLwotLyogICogRWFjaCBncm91cCBjb25zaXN0cyBvZiB0d28gYnl0ZXMgb2YgQ09OVFJPTCBpbmZvcm1hdGlvbiBmb2xsb3dlZCBieSAgICAgKi8KLS8qICAgIHNpeHRlZW4gSVRFTXMgZXhjZXB0IGZvciB0aGUgbGFzdCBncm91cCB3aGljaCBjYW4gY29udGFpbiBmcm9tIG9uZSAgICAgICovCi0vKiAgICB0byBzaXh0ZWVuIGl0ZW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICogQW4gaXRlbSBjYW4gYmUgZWl0aGVyIGEgTElURVJBTCBpdGVtIG9yIGEgQ09QWSBpdGVtLiAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAqIEVhY2ggaXRlbSBjb3JyZXNwb25kcyB0byBhIGJpdCBpbiB0aGUgY29udHJvbCBieXRlcy4gICAgICAgICAgICAgICAgICAgICovCi0vKiAgKiBUaGUgZmlyc3QgY29udHJvbCBieXRlIGNvcnJlc3BvbmRzIHRvIHRoZSBmaXJzdCA4IGl0ZW1zIGluIHRoZSBncm91cCAgICAqLwotLyogICAgd2l0aCBiaXQgMCBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBncm91cCBhbmQgYml0IDcgdG8gICAgKi8KLS8qICAgIHRoZSBlaWdodGggaXRlbSBpbiB0aGUgZ3JvdXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgKiBUaGUgc2Vjb25kIGNvbnRyb2wgYnl0ZSBjb3JyZXNwb25kcyB0byB0aGUgc2Vjb25kIDggaXRlbXMgaW4gdGhlIGdyb3VwICAqLwotLyogICAgd2l0aCBiaXQgMCBjb3JyZXNwb25kaW5nIHRvIHRoZSBuaW50aCBpdGVtIGluIHRoZSBncm91cCBhbmQgYml0IDcgdG8gICAgKi8KLS8qICAgIHRoZSBzaXh0ZWVudGggaXRlbSBpbiB0aGUgZ3JvdXAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgKiBBIHplcm8gYml0IGluIGEgY29udHJvbCB3b3JkIG1lYW5zIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgaXRlbSBpcyBhICAgICAqLwotLyogICAgbGl0ZXJhbCBpdGVtLiBBIG9uZSBiaXQgY29ycmVzcG9uZHMgdG8gYSBjb3B5IGl0ZW0uICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAqIEEgbGl0ZXJhbCBpdGVtIGNvbnNpc3RzIG9mIGEgc2luZ2xlIGJ5dGUgd2hpY2ggcmVwcmVzZW50cyBpdHNlbGYuICAgICAgICovCi0vKiAgKiBBIGNvcHkgaXRlbSBjb25zaXN0cyBvZiB0d28gYnl0ZXMgdGhhdCByZXByZXNlbnQgZnJvbSAzIHRvIDE4IGJ5dGVzLiAgICAqLwotLyogICogVGhlIGZpcnN0ICBieXRlIGluIGEgY29weSBpdGVtIHdpbGwgYmUgZGVub3RlZCBDMS4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAqIFRoZSBzZWNvbmQgYnl0ZSBpbiBhIGNvcHkgaXRlbSB3aWxsIGJlIGRlbm90ZWQgQzIuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgKiBCaXRzIHdpbGwgYmUgc2VsZWN0ZWQgdXNpbmcgc3F1YXJlIGJyYWNrZXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRm9yIGV4YW1wbGU6IEMxWzAuLjNdIGlzIHRoZSBsb3cgbmliYmxlIG9mIHRoZSBmaXJzdCBjb250cm9sIGJ5dGUuICAgICAgKi8KLS8qICAgIG9mIGNvcHkgaXRlbSBDMS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgKiBUaGUgTEVOR1RIIG9mIGEgY29weSBpdGVtIGlzIGRlZmluZWQgdG8gYmUgQzFbMC4uM10rMyB3aGljaCBpcyBhIG51bWJlciAqLwotLyogICAgaW4gdGhlIHJhbmdlIFszLDE4XS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAqIFRoZSBJTkRFWCBvZiBhIGNvcHkgaXRlbSBpcyBkZWZpbmVkIHRvIGJlIEMxWzQuLjddKjI1NitDMlswLi44XSB3aGljaCAgICovCi0vKiAgICBpcyBhIG51bWJlciBpbiB0aGUgcmFuZ2UgWzAsNDA5NV0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICogQSBjb3B5IGl0ZW0gcmVwcmVzZW50cyB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgIHRleHRbUE9TLU9GRlNFVC4uUE9TLU9GRlNFVCtMRU5HVEgtMV0gd2hlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICB0ZXh0ICAgaXMgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyaW5nLiAgICAgICAgICAgICAqLwotLyogICAgICAgICAgUE9TICAgIGlzIHRoZSBpbmRleCBpbiB0aGUgdGV4dCBvZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgIHN0cmluZyByZXByZXNlbnRlZCBieSBhbGwgdGhlIGl0ZW1zIHByZWNlZWRpbmcgdGhlIGl0ZW0gICovCi0vKiAgICAgICAgICAgICAgICAgICBiZWluZyBkZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgT0ZGU0VUIGlzIG9idGFpbmVkIGZyb20gSU5ERVggYnkgbG9va2luZyB1cCB0aGUgaGFzaCB0YWJsZS4gICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGUgZm9sbG93aW5nICNkZWZpbmUgZGVmaW5lcyB0aGUgbGVuZ3RoIG9mIHRoZSBjb3B5IGZsYWcgdGhhdCBhcHBlYXJzIGF0ICAqLwotLyogdGhlIHN0YXJ0IG9mIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSB2YWx1ZSBvZiBmb3VyIGJ5dGVzIHdhcyBjaG9zZW4gICAgICAgKi8KLS8qIGJlY2F1c2UgdGhlIGZhc3RfY29weSByb3V0aW5lIG9uIG15IE1hY2ludG9zaCBydW5zIGZhc3RlciBpZiB0aGUgc291cmNlICAgICovCi0vKiBhbmQgZGVzdGluYXRpb24gYmxvY2tzIGFyZSByZWxhdGl2ZWx5IGxvbmd3b3JkIGFsaWduZWQuICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhlIGFjdHVhbCBmbGFnIGRhdGEgYXBwZWFycyBpbiB0aGUgZmlyc3QgYnl0ZS4gVGhlIHJlc3QgYXJlIHplcm9lZCBzbyBhcyAgKi8KLS8qIHRvIG5vcm1hbGl6ZSB0aGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiAoaS5lLiBub3Qgbm9uLWRldGVybWluaXN0aWMpLiAgICovCi0jZGVmaW5lIEZMQUdfQllURVMgNAotCi0vKiBUaGUgZm9sbG93aW5nICNkZWZpbmVzIGRlZmluZSB0aGUgbWVhbmluZyBvZiB0aGUgdmFsdWVzIG9mIHRoZSBjb3B5ICAgICAgICAqLwotLyogZmxhZyBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbXByZXNzZWQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRkxBR19DT01QUkVTUyAwICAgICAvKiBTaWduYWxzIHRoYXQgb3V0cHV0IHdhcyByZXN1bHQgb2YgY29tcHJlc3Npb24uICovCi0jZGVmaW5lIEZMQUdfQ09QWSAgICAgMSAgICAgLyogU2lnbmFscyB0aGF0IG91dHB1dCB3YXMgc2ltcGx5IGNvcGllZCBvdmVyLiAgICAqLwotCi0vKiBUaGUgNjgwMDAgbWljcm9wcm9jZXNzb3IgKG9uIHdoaWNoIHRoaXMgYWxnb3JpdGhtIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCAqLwotLyogaXMgZnVzc3kgYWJvdXQgbm9uLWFsaWduZWQgYXJyYXlzIG9mIHdvcmRzLiBUbyBhdm9pZCB0aGVzZSBwcm9ibGVtcyB0aGUgICAgKi8KLS8qIGZvbGxvd2luZyBtYWNybyBjYW4gYmUgdXNlZCB0byAid2FzdGUiIGZyb20gMCB0byAzIGJ5dGVzIHNvIGFzIHRvIGFsaWduICAgICovCi0vKiB0aGUgYXJndW1lbnQgcG9pbnRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBVTE9OR19BTElHTl9VUChYKSAoKCgoVUxPTkcpWCkrc2l6ZW9mKFVMT05HKS0xKSZ+KHNpemVvZihVTE9ORyktMSkpCi0KLQotLyogVGhlIGZvbGxvd2luZyBjb25zdGFudCBkZWZpbmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiB1bmNvbXByZXNzZWQgaXRlbS4gKi8KLS8qIFRoaXMgZGVmaW5pdGlvbiBtdXN0IG5vdCBiZSBjaGFuZ2VkOyBpdHMgdmFsdWUgaXMgaGFyZHdpcmVkIGludG8gdGhlIGNvZGUuICovCi0vKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjYW4gYmUgc3Bhbm5lZCBieSBhIHNpbmdsZSBpdGVtIGlzIDE4ICAgICAqLwotLyogZm9yIHRoZSBsb25nZXN0IGNvcHkgaXRlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTUFYX1JBV19JVEVNICgxOCkKLQotLyogVGhlIGZvbGxvd2luZyBjb25zdGFudCBkZWZpbmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiB1bmNvbXByZXNzZWQgZ3JvdXAuKi8KLS8qIFRoaXMgZGVmaW5pdGlvbiBtdXN0IG5vdCBiZSBjaGFuZ2VkOyBpdHMgdmFsdWUgaXMgaGFyZHdpcmVkIGludG8gdGhlIGNvZGUuICovCi0vKiBBIGdyb3VwIGNvbnRhaW5zIGF0IG1vc3QgMTYgaXRlbXMgd2hpY2ggZXhwbGFpbnMgdGhpcyBkZWZpbml0aW9uLiAgICAgICAgICAqLwotI2RlZmluZSBNQVhfUkFXX0dST1VQICgxNipNQVhfUkFXX0lURU0pCi0KLS8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgZGVmaW5lcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21wcmVzc2VkIGdyb3VwLiAgICovCi0vKiBUaGlzIGRlZmluaXRpb24gbXVzdCBub3QgYmUgY2hhbmdlZDsgaXRzIHZhbHVlIGlzIGhhcmR3aXJlZCBpbnRvIHRoZSBjb2RlLiAqLwotLyogQSBjb21wcmVzc2VkIGdyb3VwIGNvbnNpc3RzIG9mIHR3byBjb250cm9sIGJ5dGVzIGZvbGxvd2VkIGJ5IHVwIHRvIDE2ICAgICAgKi8KLS8qIGNvbXByZXNzZWQgaXRlbXMgZWFjaCBvZiB3aGljaCBjYW4gaGF2ZSBhIG1heGltdW0gbGVuZ3RoIG9mIHR3byBieXRlcy4gICAgICovCi0jZGVmaW5lIE1BWF9DTVBfR1JPVVAgKDIrMTYqMikKLQotLyogVGhlIGZvbGxvd2luZyBjb25zdGFudCBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZS4gICAgKi8KLS8qIFRoaXMgZGVmaW5pdGlvbiBtdXN0IG5vdCBiZSBjaGFuZ2VkOyBpdHMgdmFsdWUgaXMgaGFyZHdpcmVkIGludG8gdGhlIGNvZGUuICovCi0jZGVmaW5lIEhBU0hfVEFCTEVfTEVOR1RIICg0MDk2KQotCi0vKiBMWlJXMywgdW5saWtlIExaUlcxKC1BKSwgbXVzdCBpbml0aWFsaXplIGl0cyBoYXNoIHRhYmxlIHNvIGFzIHRvIGVuYWJsZSAgICAqLwotLyogdGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciB0byBzdGF5IGluIHN0ZXAgbWFpbnRhaW5pbmcgaWRlbnRpY2FsIGhhc2ggKi8KLS8qIHRhYmxlcy4gSW4gYW4gZWFybHkgdmVyc2lvbiBvZiB0aGUgYWxnb3JpdGhtLCB0aGUgdGFibGVzIHdlcmUgc2ltcGx5ICAgICAgICovCi0vKiBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBhIGNoZWNrIGZvciB6ZXJvIHdhcyBpbmNsdWRlZCBqdXN0IGJlZm9yZSB0aGUgICAgICAqLwotLyogbWF0Y2hpbmcgY29kZS4gSG93ZXZlciwgdGhpcyB0ZXN0IGNvc3RzIHRpbWUuIEEgYmV0dGVyIHNvbHV0aW9uIGlzIHRvICAgICAgKi8KLS8qIGluaXRpYWxpemUgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSBoYXNoIHRhYmxlIHRvIHBvaW50IHRvIGEgY29uc3RhbnQgICAgICAgICovCi0vKiBzdHJpbmcuIFRoZSBkZWNvbXByZXNzb3IgZG9lcyB0aGUgc2FtZS4gVGhpcyBzb2x1dGlvbiByZXF1aXJlcyBubyBleHRyYSAgICAqLwotLyogdGVzdC4gVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgZG8gbm90IG1hdHRlciBzbyBsb25nIGFzIHRoZSBzdHJpbmcgaXMgICAgKi8KLS8qIHRoZSBzYW1lIGZvciB0aGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIGFuZCBjb250YWlucyBhdCBsZWFzdCAgICAgICAgICovCi0vKiBNQVhfUkFXX0lURU0gYnl0ZXMuIEkgY2hvc2UgY29uc2VjdXRpdmUgZGVjaW1hbCBkaWdpdHMgYmVjYXVzZSB0aGV5IGRvIG5vdCAqLwotLyogaGF2ZSB3aGl0ZSBzcGFjZSBwcm9ibGVtcyAoZS5nLiB0aGVyZSBpcyBubyBjaGFuY2UgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCAgKi8KLS8qIHJlcGxhY2UgbW9yZSB0aGFuIG9uZSBzcGFjZSBieSBhIFRBQikgYW5kIGJlY2F1c2UgdGhleSBtYWtlIHRoZSBsZW5ndGggb2YgICovCi0vKiB0aGUgc3RyaW5nIG9idmlvdXMgYnkgaW5zcGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTVEFSVF9TVFJJTkdfMTggKChVQllURSAqKSAiMTIzNDU2Nzg5MDEyMzQ1Njc4IikKLQotLyogSW4gdGhpcyBhbGdvcml0aG0sIGhhc2ggdmFsdWVzIGhhdmUgdG8gYmUgY2FsY3VsYXRlZCBhdCBtb3JlIHRoYW4gb25lICAgICAgKi8KLS8qIHBvaW50LiBUaGUgZm9sbG93aW5nIG1hY3JvIG5lYXRlbnMgdGhlIGNvZGUgdXAgZm9yIHRoaXMuICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBU0goUFRSKSBcCi0gICAoKCg0MDU0MyooKCgqKFBUUikpPDw4KV4oKCooKFBUUikrMSkpPDw0KV4oKigoUFRSKSsyKSkpKT4+NCkgJiAweEZGRikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogSW5wdXQgIDogSGFuZCBvdmVyIHRoZSByZXF1aXJlZCBhbW91bnQgb2Ygd29ya2luZyBtZW1vcnkgaW4gcF93cmtfbWVtLiAgICAgKi8KLS8qIElucHV0ICA6IFNwZWNpZnkgaW5wdXQgYmxvY2sgdXNpbmcgcF9zcmNfZmlyc3QgYW5kIHNyY19sZW4uICAgICAgICAgICAgICAgICovCi0vKiBJbnB1dCAgOiBQb2ludCBwX2RzdF9maXJzdCB0byB0aGUgc3RhcnQgb2YgdGhlIG91dHB1dCB6b25lIChPWikuICAgICAgICAgICAqLwotLyogSW5wdXQgIDogUG9pbnQgcF9kc3RfbGVuIHRvIGEgVUxPTkcgdG8gcmVjZWl2ZSB0aGUgb3V0cHV0IGxlbmd0aC4gICAgICAgICAgKi8KLS8qIElucHV0ICA6IElucHV0IGJsb2NrIGFuZCBvdXRwdXQgem9uZSBtdXN0IG5vdCBvdmVybGFwLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiBPdXRwdXQgOiBMZW5ndGggb2Ygb3V0cHV0IGJsb2NrIHdyaXR0ZW4gdG8gKnBfZHN0X2xlbi4gICAgICAgICAgICAgICAgICAgICAqLwotLyogT3V0cHV0IDogT3V0cHV0IGJsb2NrIGluIE1lbVtwX2RzdF9maXJzdC4ucF9kc3RfZmlyc3QrKnBfZHN0X2xlbi0xXS4gTWF5ICAgKi8KLS8qIE91dHB1dCA6IHdyaXRlIGluIE9aPU1lbVtwX2RzdF9maXJzdC4ucF9kc3RfZmlyc3Qrc3JjX2xlbitNQVhfQ01QX0dST1VQLTFdLiovCi0vKiBPdXRwdXQgOiBVcG9uIGNvbXBsZXRpb24gZ3VhcmFudGVlZCAqcF9kc3RfbGVuPD1zcmNfbGVuK0ZMQUdfQllURVMuICAgICAgICAqLwotTE9DQUwgdm9pZCBjb21wcmVzc19jb21wcmVzcyhVQllURSAqcF93cmtfbWVtLAotCQkJICAgICBVQllURSAqcF9zcmNfZmlyc3QsIFVMT05HICBzcmNfbGVuLAotCQkJICAgICBVQllURSAqcF9kc3RfZmlyc3QsIExPTkcgICpwX2RzdF9sZW4pCi17Ci0gLyogcF9zcmMgYW5kIHBfZHN0IHN0ZXAgdGhyb3VnaCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBibG9ja3MuICAgICAgICAgICAqLwotIHJlZ2lzdGVyIFVCWVRFICpwX3NyYyA9IHBfc3JjX2ZpcnN0OwotIHJlZ2lzdGVyIFVCWVRFICpwX2RzdCA9IHBfZHN0X2ZpcnN0OwotIAotIC8qIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBuZXZlciBtb2RpZmllZCBhbmQgYXJlIHVzZWQgaW4gdGhlICAgICAgICAgICAgKi8KLSAvKiBjYWxjdWxhdGlvbnMgdGhhdCBkZXRlcm1pbmUgd2hlbiB0aGUgbWFpbiBsb29wIHRlcm1pbmF0ZXMuICAgICAgICAgICAgICAgICovCi0gVUJZVEUgKnBfc3JjX3Bvc3QgID0gcF9zcmNfZmlyc3Qrc3JjX2xlbjsKLSBVQllURSAqcF9kc3RfcG9zdCAgPSBwX2RzdF9maXJzdCtzcmNfbGVuOwotIFVCWVRFICpwX3NyY19tYXgxICA9IHBfc3JjX2ZpcnN0K3NyY19sZW4tTUFYX1JBV19JVEVNOwotIFVCWVRFICpwX3NyY19tYXgxNiA9IHBfc3JjX2ZpcnN0K3NyY19sZW4tTUFYX1JBV19JVEVNKjE2OwotIAotIC8qIFRoZSB2YXJpYWJsZXMgJ3BfY29udHJvbCcgYW5kICdjb250cm9sJyBhcmUgdXNlZCB0byBidWZmZXIgY29udHJvbCBiaXRzLiAgKi8KLSAvKiBCZWZvcmUgZWFjaCBncm91cCBpcyBwcm9jZXNzZWQsIHRoZSBuZXh0IHR3byBieXRlcyBvZiB0aGUgb3V0cHV0IGJsb2NrICAgICovCi0gLyogYXJlIHNldCBhc2lkZSBmb3IgdGhlIGNvbnRyb2wgd29yZCBmb3IgdGhlIGdyb3VwIGFib3V0IHRvIGJlIHByb2Nlc3NlZC4gICAqLwotIC8qICdwX2NvbnRyb2wnIGlzIHNldCB0byBwb2ludCB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGF0IHdvcmQuIE1lYW53aGlsZSwgICAgKi8KLSAvKiAnY29udHJvbCcgYnVmZmVycyB0aGUgY29udHJvbCBiaXRzIGJlaW5nIGdlbmVyYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3NpbmcgICovCi0gLyogb2YgdGhlIGdyb3VwLiBJbnN0ZWFkIG9mIGhhdmluZyBhIGNvdW50ZXIgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBpdGVtcyAqLwotIC8qIGhhdmUgYmVlbiBwcm9jZXNzZWQgKD10aGUgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGNvbnRyb2wgd29yZCksIGF0IHRoZSAgICAgKi8KLSAvKiBzdGFydCBvZiBlYWNoIGdyb3VwLCB0aGUgdG9wIHdvcmQgb2YgJ2NvbnRyb2wnIGlzIGZpbGxlZCB3aXRoIDEgYml0cy4gICAgICovCi0gLyogQXMgJ2NvbnRyb2wnIGlzIHNoaWZ0ZWQgZm9yIGVhY2ggaXRlbSwgdGhlIDEgYml0cyBpbiB0aGUgdG9wIHdvcmQgYXJlICAgICAqLwotIC8qIGFic29yYmVkIG9yIGRlc3Ryb3llZC4gV2hlbiB0aGV5IGFsbCBydW4gb3V0IChpLmUuIHdoZW4gdGhlIHRvcCB3b3JkIGlzICAgKi8KLSAvKiBhbGwgemVybyBiaXRzLCB3ZSBrbm93IHRoYXQgd2UgYXJlIGF0IHRoZSBlbmQgb2YgYSBncm91cC4gICAgICAgICAgICAgICAgICovCi0jIGRlZmluZSBUT1BXT1JEIDB4RkZGRjAwMDAKLSBVQllURSAqcF9jb250cm9sOwotIHJlZ2lzdGVyIFVMT05HIGNvbnRyb2w9VE9QV09SRDsKLSAKLSAvKiBUSGUgdmFyaWFibGUgJ2hhc2gnIGFsd2F5cyBwb2ludHMgdG8gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGhhc2ggdGFibGUuICovCi0gVUJZVEUgKipoYXNoPSAoVUJZVEUgKiopICBVTE9OR19BTElHTl9VUChwX3dya19tZW0pOwotIAotIC8qIFRoZSBmb2xsb3dpbmcgdHdvIHZhcmlhYmxlcyByZXByZXNlbnQgdGhlIGxpdGVyYWwgYnVmZmVyLiBwX2gxIHBvaW50cyB0byAgKi8KLSAvKiB0aGUgaGFzaCB0YWJsZSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSB5b3VuZ2VzdCBsaXRlcmFsLiBwX2gyIHBvaW50cyAgICovCi0gLyogdG8gdGhlIGhhc2ggdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgc2Vjb25kIHlvdW5nZXN0IGxpdGVyYWwuICAgICAqLwotIC8qIE5vdGU6IHBfaDE9MD0+cF9oMj0wIGJlY2F1c2UgemVybyB2YWx1ZXMgZGVub3RlIGFic2VuY2Ugb2YgYSBwZW5kaW5nICAgICAgKi8KLSAvKiBsaXRlcmFsLiBUaGUgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvIG1lYW5pbmcgYW4gZW1wdHkgImJ1ZmZlciIuICovCi0gVUJZVEUgKipwX2gxPU5VTEw7Ci0gVUJZVEUgKipwX2gyPU5VTEw7Ci0gIAotIC8qIFRvIHN0YXJ0LCB3ZSB3cml0ZSB0aGUgZmxhZyBieXRlcy4gQmVpbmcgb3B0aW1pc3RpYywgd2Ugc2V0IHRoZSBmbGFnIHRvICAgKi8KLSAvKiBGTEFHX0NPTVBSRVNTLiBUaGUgcmVtYWluaW5nIGZsYWcgYnl0ZXMgYXJlIHplcm9lZCBzbyBhcyB0byBrZWVwIHRoZSAgICAgICovCi0gLyogYWxnb3JpdGhtIGRldGVybWluaXN0aWMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICpwX2RzdCsrPUZMQUdfQ09NUFJFU1M7Ci0ge1VXT1JEIGk7IGZvciAoaT0yO2k8PUZMQUdfQllURVM7aSsrKSAqcF9kc3QrKz0wO30KLQotIC8qIFJlc2VydmUgdGhlIGZpcnN0IHdvcmQgb2Ygb3V0cHV0IGFzIHRoZSBjb250cm9sIHdvcmQgZm9yIHRoZSBmaXJzdCBncm91cC4gKi8KLSAvKiBOb3RlOiBUaGlzIGlzIHVuZG9uZSBhdCB0aGUgZW5kIGlmIHRoZSBpbnB1dCBibG9jayBpcyBlbXB0eS4gICAgICAgICAgICAgICovCi0gcF9jb250cm9sPXBfZHN0OyBwX2RzdCs9MjsKLSAKLSAvKiBJbml0aWFsaXplIGFsbCBlbGVtZW50cyBvZiB0aGUgaGFzaCB0YWJsZSB0byBwb2ludCB0byBhIGNvbnN0YW50IHN0cmluZy4gICovCi0gLyogVXNlIG9mIGFuIHVucm9sbGVkIGxvb3Agc3BlZWRzIHRoaXMgdXAgY29uc2lkZXJhYmx5LiAgICAgICAgICAgICAgICAgICAgICAqLwotIHtVV09SRCBpOyBVQllURSAqKnBfaD1oYXNoOwotIyAgZGVmaW5lIFpIICpwX2grKz1TVEFSVF9TVFJJTkdfMTgKLSAgZm9yIChpPTA7aTwyNTY7aSsrKSAgICAgLyogMjU2PUhBU0hfVEFCTEVfTEVOR1RILzE2LiAqLwotICAgIHtaSDtaSDtaSDtaSDsKLSAgICAgWkg7Wkg7Wkg7Wkg7Ci0gICAgIFpIO1pIO1pIO1pIOwotICAgICBaSDtaSDtaSDtaSDt9Ci0gfQotCi0gLyogVGhlIG1haW4gbG9vcCBwcm9jZXNzZXMgZWl0aGVyIDEgb3IgMTYgaXRlbXMgcGVyIGl0ZXJhdGlvbi4gQXMgaXRzICAgICAgICAqLwotIC8qIHRlcm1pbmF0aW9uIGxvZ2ljIGlzIGNvbXBsaWNhdGVkLCBJIGhhdmUgb3B0ZWQgZm9yIGFuIGluZmluaXRlIGxvb3AgICAgICAgKi8KLSAvKiBzdHJ1Y3R1cmUgY29udGFpbmluZyAnYnJlYWsnIGFuZCAnZ290bycgc3RhdGVtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gd2hpbGUgKFRSVUUpCi0gICB7LyogQmVnaW4gbWFpbiBwcm9jZXNzaW5nIGxvb3AuICovCi0gICAKLSAgICAvKiBOb3RlOiBBbGwgdGhlIHZhcmlhYmxlcyBoZXJlIGV4Y2VwdCB1bnJvbGwgc2hvdWxkIGJlIGRlZmluZWQgd2l0aGluICAgICovCi0gICAgLyogICAgICAgdGhlIGlubmVyIGxvb3AuIFVuZm9ydHVuYXRlbHkgdGhlIGxvb3AgaGFzbid0IGdvdCBhIGJsb2NrLiAgICAgICAqLwotICAgICByZWdpc3RlciBVQllURSAqcDsgICAgICAgICAvKiBTY2FucyB0aHJvdWdoIHRhcmcgcGhyYXNlIGR1cmluZyBtYXRjaGluZy4gKi8KLSAgICAgcmVnaXN0ZXIgVUJZVEUgKnBfeml2PSBOVUxMIDsgICAgIC8qIFBvaW50cyB0byBmaXJzdCBieXRlIG9mIGN1cnJlbnQgWml2LiAgICAgICAqLwotICAgICByZWdpc3RlciBVV09SRCB1bnJvbGw7ICAgICAvKiBMb29wIGNvdW50ZXIgZm9yIHVucm9sbGVkIGlubmVyIGxvb3AuICAgICAgKi8KLSAgICAgcmVnaXN0ZXIgVVdPUkQgaW5kZXg7ICAgICAgLyogSW5kZXggb2YgY3VycmVudCBoYXNoIHRhYmxlIGVudHJ5LiAgICAgICAgICovCi0gICAgIHJlZ2lzdGVyIFVCWVRFICoqcF9oMCA9IE5VTEwgOyAgICAgLyogUG9pbnRlciB0byBjdXJyZW50IGhhc2ggdGFibGUgZW50cnkuICAgICAgICovCi0gICAgIAotICAgIC8qIFRlc3QgZm9yIG92ZXJydW4gYW5kIGp1bXAgdG8gb3ZlcnJ1biBjb2RlIGlmIG5lY2Vzc2FyeS4gICAgICAgICAgICAgICAgKi8KLSAgICBpZiAocF9kc3Q+cF9kc3RfcG9zdCkKLSAgICAgICBnb3RvIG92ZXJydW47Ci0gICAgICAgCi0gICAgLyogVGhlIGZvbGxvd2luZyBjYXNjYWRlIG9mIGlmIHN0YXRlbWVudHMgZWZmaWNpZW50bHkgY2F0Y2hlcyBhbmQgZGVhbHMgICAqLwotICAgIC8qIHdpdGggdmFyeWluZyBkZWdyZWVzIG9mIGNsb3NlbmVzcyB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBibG9jay4gICAgICAgKi8KLSAgICAvKiBXaGVuIHdlIGdldCB2ZXJ5IGNsb3NlIHRvIHRoZSBlbmQsIHdlIHN0b3AgdXBkYXRpbmcgdGhlIHRhYmxlIGFuZCAgICAgICovCi0gICAgLyogY29kZSB0aGUgcmVtYWluaW5nIGJ5dGVzIGFzIGxpdGVyYWxzLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHNpbXBsZXIuICAgICAqLwotICAgIHVucm9sbD0xNjsKLSAgICBpZiAocF9zcmM+cF9zcmNfbWF4MTYpCi0gICAgICB7Ci0gICAgICAgdW5yb2xsPTE7Ci0gICAgICAgaWYgKHBfc3JjPnBfc3JjX21heDEpCi0gICAgICAgICB7Ci0gICAgICAgICAgaWYgKHBfc3JjPT1wX3NyY19wb3N0KQotICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICBnb3RvIGxpdGVyYWw7Ci0gICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAgICAKLSAgICAvKiBUaGlzIGlubmVyIHVucm9sbGVkIGxvb3AgcHJvY2Vzc2VzICd1bnJvbGwnICh3aG9zZSB2YWx1ZSBpcyBlaXRoZXIgMSAgICovCi0gICAgLyogb3IgMTYpIGl0ZW1zLiBJIGhhdmUgY2hvc2VuIHRvIGltcGxlbWVudCB0aGlzIGxvb3Agd2l0aCBsYWJlbHMgYW5kICAgICAqLwotICAgIC8qIGdvdG9zIHRvIGhlaWdodGVuIHRoZSBlYXNlIHdpdGggd2hpY2ggdGhlIGxvb3AgbWF5IGJlIGltcGxlbWVudGVkIHdpdGggKi8KLSAgICAvKiBhIHNpbmdsZSBkZWNyZW1lbnQgYW5kIGJyYW5jaCBpbnN0cnVjdGlvbiBpbiBhc3NlbWJseSBsYW5ndWFnZSBhbmQgICAgICovCi0gICAgLyogYWxzbyBiZWNhdXNlIHRoZSBsYWJlbHMgYWN0IGFzIGhpZ2hseSByZWFkYWJsZSBwbGFjZSBtYXJrZXJzLiAgICAgICAgICAqLwotICAgIC8qIChBbHNvIGJlY2F1c2Ugd2UganVtcCBpbnRvIHRoZSBsb29wIGZvciBlbmRnYW1lIGxpdGVyYWxzIChzZWUgYWJvdmUpKS4gKi8KLSAgICAKLSAgICBiZWdpbl91bnJvbGxlZF9sb29wOgotICAgIAotICAgICAgIC8qIFRvIHByb2Nlc3MgdGhlIG5leHQgcGhyYXNlLCB3ZSBoYXNoIHRoZSBuZXh0IHRocmVlIGJ5dGVzIGFuZCB1c2UgICAgKi8KLSAgICAgICAvKiB0aGUgcmVzdWx0YW50IGhhc2ggdGFibGUgaW5kZXggdG8gbG9vayB1cCB0aGUgaGFzaCB0YWJsZS4gQSBwb2ludGVyICovCi0gICAgICAgLyogdG8gdGhlIGVudHJ5IGlzIHN0b3JlZCBpbiBwX2gwIHNvIGFzIHRvIGF2b2lkIGFuIGFycmF5IGxvb2t1cC4gVGhlICAqLwotICAgICAgIC8qIGhhc2ggdGFibGUgZW50cnkgKnBfaDAgaXMgbG9va2VkIHVwIHlpZWxkaW5nIGEgcG9pbnRlciBwIHRvIGEgICAgICAgKi8KLSAgICAgICAvKiBwb3RlbnRpYWwgbWF0Y2ggb2YgdGhlIFppdiBpbiB0aGUgaGlzdG9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgaW5kZXg9SEFTSChwX3NyYyk7Ci0gICAgICAgcF9oMD0maGFzaFtpbmRleF07Ci0gICAgICAgcD0qcF9oMDsKLSAgICAgICAKLSAgICAgICAvKiBIYXZpbmcgbG9va2VkIHVwIHRoZSBjYW5kaWRhdGUgcG9zaXRpb24sIHdlIGFyZSBpbiBhIHBvc2l0aW9uIHRvICAgICovCi0gICAgICAgLyogYXR0ZW1wdCBhIG1hdGNoLiBUaGUgbWF0Y2ggbG9vcCBoYXMgYmVlbiB1bnJvbGxlZCB1c2luZyB0aGUgUFMgICAgICAqLwotICAgICAgIC8qIG1hY3JvIHNvIHRoYXQgZmFpbHVyZSB3aXRoaW4gdGhlIGZpcnN0IHRocmVlIGJ5dGVzIGF1dG9tYXRpY2FsbHkgICAgKi8KLSAgICAgICAvKiByZXN1bHRzIGluIHRoZSBsaXRlcmFsIGJyYW5jaCBiZWluZyB0YWtlbi4gVGhlIGNvZGluZyBpcyBzaW1wbGUuICAgICovCi0gICAgICAgLyogcF96aXYgc2F2ZXMgcF9zcmMgc28gd2UgY2FuIGxldCBwX3NyYyB3YW5kZXIuICAgICAgICAgICAgICAgICAgICAgICAqLwotIyAgICAgICBkZWZpbmUgUFMgKnArKyE9KnBfc3JjKysKLSAgICAgICBwX3ppdj1wX3NyYzsKLSAgICAgICBpZiAoUFMgfHwgUFMgfHwgUFMpCi0gICAgICAgICB7Ci0gICAgICAgICAgLyogTGl0ZXJhbC4gKi8KLSAgICAgICAgICAKLSAgICAgICAgICAvKiBDb2RlIHRoZSBsaXRlcmFsIGJ5dGUgYXMgaXRzZWxmIGFuZCBhIHplcm8gY29udHJvbCBiaXQuICAgICAgICAgICovCi0gICAgICAgICAgcF9zcmM9cF96aXY7IGxpdGVyYWw6ICpwX2RzdCsrPSpwX3NyYysrOyBjb250cm9sJj0weEZGRkVGRkZGOwotICAgICAgICAgIAotICAgICAgICAgIC8qIFdlIGhhdmUganVzdCBjb2RlZCBhIGxpdGVyYWwuIElmIHdlIGhhZCB0d28gcGVuZGluZyBvbmVzLCB0aGF0ICAgKi8KLSAgICAgICAgICAvKiBtYWtlcyB0aHJlZSBhbmQgd2UgY2FuIHVwZGF0ZSB0aGUgaGFzaCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgaWYgKHBfaDIhPTApCi0gICAgICAgICAgICAgeypwX2gyPXBfeml2LTI7fQotICAgICAgICAgICAgIAotICAgICAgICAgIC8qIEluIGFueSBjYXNlLCByb3RhdGUgdGhlIGhhc2ggdGFibGUgcG9pbnRlcnMgZm9yIG5leHQgdGltZS4gKi8KLSAgICAgICAgICBwX2gyPXBfaDE7IHBfaDE9cF9oMDsKLSAgICAgICAgICAKLSAgICAgICAgIH0KLSAgICAgICBlbHNlCi0gICAgICAgICB7Ci0gICAgICAgICAgLyogQ29weSAqLwotICAgICAgICAgIAotICAgICAgICAgIC8qIE1hdGNoIHVwIHRvIDE1IHJlbWFpbmluZyBieXRlcyB1c2luZyBhbiB1bnJvbGxlZCBsb29wIGFuZCBjb2RlLiAqLwotI2lmIDAKLSAgICAgICAgICBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fAotICAgICAgICAgIFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IHBfc3JjKys7Ci0jZWxzZSAgICAgCi0gICAgICAgICAgaWYgKAotICAgICAgICAgICAgICAgISggUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwKLSAgICAgICAgICAgICAgICAgIFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTICkgCi0gICAgICAgICAgICAgKSBwX3NyYysrOwotI2VuZGlmCi0gICAgICAgICAgKnBfZHN0Kys9KChpbmRleCYweEYwMCk+PjQpfCgtLXBfc3JjLXBfeml2LTMpOwotICAgICAgICAgICpwX2RzdCsrPWluZGV4JjB4RkY7Ci0gICAgICAgICAgCi0gICAgICAgICAgLyogQXMgd2UgaGF2ZSBqdXN0IGNvZGVkIHRocmVlIGJ5dGVzLCB3ZSBhcmUgbm93IGluIGEgcG9zaXRpb24gdG8gICAqLwotICAgICAgICAgIC8qIHVwZGF0ZSB0aGUgaGFzaCB0YWJsZSB3aXRoIHRoZSBsaXRlcmFsIGJ5dGVzIHRoYXQgd2VyZSBwZW5kaW5nICAgKi8KLSAgICAgICAgICAvKiB1cG9uIHRoZSBhcnJpdmFsIG9mIGV4dHJhIGNvbnRleHQgYnl0ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgaWYgKHBfaDEhPTApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgaWYgKHBfaDIpCi0gICAgICAgICAgICAgICB7KnBfaDI9cF96aXYtMjsgcF9oMj1OVUxMO30KLSAgICAgICAgICAgICAqcF9oMT1wX3ppdi0xOyBwX2gxPU5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAvKiBJbiBhbnkgY2FzZSwgd2UgY2FuIHVwZGF0ZSB0aGUgaGFzaCB0YWJsZSBiYXNlZCBvbiB0aGUgY3VycmVudCAgICovCi0gICAgICAgICAgLyogcG9zaXRpb24gYXMgd2UganVzdCBjb2RlZCBhdCBsZWFzdCB0aHJlZSBieXRlcyBpbiBhIGNvcHkgaXRlbXMuICAqLwotICAgICAgICAgICpwX2gwPXBfeml2OwotICAgICAgICAgIAotICAgICAgICAgfQotICAgICAgIGNvbnRyb2w+Pj0xOwotICAgICAgICAgICAgICAgIAotICAgICAgIC8qIFRoaXMgbG9vcCBpcyBhbGwgc2V0IHVwIGZvciBhIGRlY3JlbWVudCBhbmQganVtcCBpbnN0cnVjdGlvbiEgKi8KLSNpZm5kZWYgbGludXgKLWAgICAgZW5kX3Vucm9sbGVkX2xvb3A6IGlmICgtLXVucm9sbCkgZ290byBiZWdpbl91bnJvbGxlZF9sb29wOwotI2Vsc2UKLSAgICAvKiBlbmRfdW5yb2xsZWRfbG9vcDogKi8gaWYgKC0tdW5yb2xsKSBnb3RvIGJlZ2luX3Vucm9sbGVkX2xvb3A7Ci0jZW5kaWYKLQotICAgIC8qIEF0IHRoaXMgcG9pbnQgaXQgd2lsbCBuZWFybHkgYWx3YXlzIGJlIHRoZSBlbmQgb2YgYSBncm91cCBpbiB3aGljaCAgICAgKi8KLSAgICAvKiBjYXNlLCB3ZSBoYXZlIHRvIGRvIHNvbWUgY29udHJvbC13b3JkIHByb2Nlc3NpbmcuIEhvd2V2ZXIsIG5lYXIgdGhlICAgICovCi0gICAgLyogZW5kIG9mIHRoZSBpbnB1dCBibG9jaywgdGhlIGlubmVyIHVucm9sbGVkIGxvb3AgaXMgb25seSBleGVjdXRlZCBvbmNlLiAqLwotICAgIC8qIFRoaXMgbmVjZXNzaXRhdGVzIHRoZSAnaWYnIHRlc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoKGNvbnRyb2wmVE9QV09SRCk9PTApCi0gICAgICB7Ci0gICAgICAgLyogV3JpdGUgdGhlIGNvbnRyb2wgd29yZCB0byB0aGUgcGxhY2Ugd2Ugc2F2ZWQgZm9yIGl0IGluIHRoZSBvdXRwdXQuICovCi0gICAgICAgKnBfY29udHJvbCsrPSAgY29udHJvbCAgICAgJjB4RkY7Ci0gICAgICAgKnBfY29udHJvbCAgPSAoY29udHJvbD4+OCkgJjB4RkY7Ci0KLSAgICAgICAvKiBSZXNlcnZlIHRoZSBuZXh0IHdvcmQgaW4gdGhlIG91dHB1dCBibG9jayBmb3IgdGhlIGNvbnRyb2wgd29yZCAqLwotICAgICAgIC8qIGZvciB0aGUgZ3JvdXAgYWJvdXQgdG8gYmUgcHJvY2Vzc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgcF9jb250cm9sPXBfZHN0OyBwX2RzdCs9MjsKLSAgICAgICAKLSAgICAgICAvKiBSZXNldCB0aGUgY29udHJvbCBiaXRzIGJ1ZmZlci4gKi8KLSAgICAgICBjb250cm9sPVRPUFdPUkQ7Ci0gICAgICB9Ci0gICAgICAgICAgCi0gICB9IC8qIEVuZCBtYWluIHByb2Nlc3NpbmcgbG9vcC4gKi8KLSAgIAotIC8qIEFmdGVyIHRoZSBtYWluIHByb2Nlc3NpbmcgbG9vcCBoYXMgZXhlY3V0ZWQsIGFsbCB0aGUgaW5wdXQgYnl0ZXMgaGF2ZSAgICAgKi8KLSAvKiBiZWVuIHByb2Nlc3NlZC4gSG93ZXZlciwgdGhlIGNvbnRyb2wgd29yZCBoYXMgc3RpbGwgdG8gYmUgd3JpdHRlbiB0byB0aGUgICovCi0gLyogd29yZCByZXNlcnZlZCBmb3IgaXQgaW4gdGhlIG91dHB1dCBhdCB0aGUgc3RhcnQgb2YgdGhlIG1vc3QgcmVjZW50IGdyb3VwLiAqLwotIC8qIEJlZm9yZSB3cml0aW5nLCB0aGUgY29udHJvbCB3b3JkIGhhcyB0byBiZSBzaGlmdGVkIHNvIHRoYXQgYWxsIHRoZSBiaXRzICAgKi8KLSAvKiBhcmUgaW4gdGhlIHJpZ2h0IHBsYWNlLiBUaGUgImVtcHR5IiBiaXQgcG9zaXRpb25zIGFyZSBmaWxsZWQgd2l0aCAxcyAgICAgICovCi0gLyogd2hpY2ggcGFydGlhbGx5IGZpbGwgdGhlIHRvcCB3b3JkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotIHdoaWxlKGNvbnRyb2wmVE9QV09SRCkgY29udHJvbD4+PTE7Ci0gKnBfY29udHJvbCsrPSBjb250cm9sICAgICAmMHhGRjsKLSAqcF9jb250cm9sKys9KGNvbnRyb2w+PjgpICYweEZGOwotIAotIC8qIElmIHRoZSBsYXN0IGdyb3VwIGNvbnRhaW5lZCBubyBpdGVtcywgZGVsZXRlIHRoZSBjb250cm9sIHdvcmQgdG9vLiAgICAgICAgKi8KLSBpZiAocF9jb250cm9sPT1wX2RzdCkgcF9kc3QtPTI7Ci0gCi0gLyogV3JpdGUgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJsb2NrIHRvIHRoZSBkc3RfbGVuIHBhcmFtZXRlciBhbmQgcmV0dXJuLiAqLwotICpwX2RzdF9sZW49cF9kc3QtcF9kc3RfZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gcmV0dXJuOwotIAotIC8qIEp1bXAgaGVyZSBhcyBzb29uIGFzIGFuIG92ZXJydW4gaXMgZGV0ZWN0ZWQuIEFuIG92ZXJydW4gaXMgZGVmaW5lZCB0byAgICAgKi8KLSAvKiBoYXZlIG9jY3VycmVkIGlmIHBfZHN0PnBfZHN0X2ZpcnN0K3NyY19sZW4uIFRoYXQgaXMsIHRoZSBtb21lbnQgdGhlICAgICAgICovCi0gLyogbGVuZ3RoIG9mIHRoZSBvdXRwdXQgd3JpdHRlbiBzbyBmYXIgZXhjZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBibG9jay4qLwotIC8qIFRoZSBhbGdvcml0aG0gY2hlY2tzIGZvciBvdmVycnVucyBhdCBsZWFzdCBhdCB0aGUgZW5kIG9mIGVhY2ggZ3JvdXAgICAgICAgKi8KLSAvKiB3aGljaCBtZWFucyB0aGF0IHRoZSBtYXhpbXVtIG92ZXJydW4gaXMgTUFYX0NNUF9HUk9VUCBieXRlcy4gICAgICAgICAgICAgICovCi0gLyogT25jZSBhbiBvdmVycnVuIG9jY3VycywgdGhlIG9ubHkgdGhpbmcgdG8gZG8gaXMgdG8gc2V0IHRoZSBjb3B5IGZsYWcgYW5kICAqLwotIC8qIGNvcHkgdGhlIGlucHV0IG92ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSBvdmVycnVuOgotI2lmIDAKLSAqcF9kc3RfZmlyc3Q9RkxBR19DT1BZOwotIGZhc3RfY29weShwX3NyY19maXJzdCxwX2RzdF9maXJzdCtGTEFHX0JZVEVTLHNyY19sZW4pOwotICpwX2RzdF9sZW49c3JjX2xlbitGTEFHX0JZVEVTOwotI2Vsc2UKLSBmYXN0X2NvcHkocF9zcmNfZmlyc3QscF9kc3RfZmlyc3Qsc3JjX2xlbik7Ci0gKnBfZHN0X2xlbj0gLXNyY19sZW47IC8qIHJldHVybiBhIG5lZ2F0aXZlIG51bWJlciB0byBpbmRpY2F0ZSB1bmNvbXByZXNzZWQgZGF0YSAqLwotI2VuZGlmCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIElucHV0ICA6IEhhbmQgb3ZlciB0aGUgcmVxdWlyZWQgYW1vdW50IG9mIHdvcmtpbmcgbWVtb3J5IGluIHBfd3JrX21lbS4gICAgICovCi0vKiBJbnB1dCAgOiBTcGVjaWZ5IGlucHV0IGJsb2NrIHVzaW5nIHBfc3JjX2ZpcnN0IGFuZCBzcmNfbGVuLiAgICAgICAgICAgICAgICAqLwotLyogSW5wdXQgIDogUG9pbnQgcF9kc3RfZmlyc3QgdG8gdGhlIHN0YXJ0IG9mIHRoZSBvdXRwdXQgem9uZS4gICAgICAgICAgICAgICAgKi8KLS8qIElucHV0ICA6IFBvaW50IHBfZHN0X2xlbiB0byBhIFVMT05HIHRvIHJlY2VpdmUgdGhlIG91dHB1dCBsZW5ndGguICAgICAgICAgICovCi0vKiBJbnB1dCAgOiBJbnB1dCBibG9jayBhbmQgb3V0cHV0IHpvbmUgbXVzdCBub3Qgb3ZlcmxhcC4gVXNlciBrbm93cyAgICAgICAgICAqLwotLyogSW5wdXQgIDogdXBwZXJib3VuZCBvbiBvdXRwdXQgYmxvY2sgbGVuZ3RoIGZyb20gZWFybGllciBjb21wcmVzc2lvbi4gICAgICAgKi8KLS8qIElucHV0ICA6IEluIGFueSBjYXNlLCBtYXhpbXVtIGV4cGFuc2lvbiBwb3NzaWJsZSBpcyBuaW5lIHRpbWVzLiAgICAgICAgICAgICovCi0vKiBPdXRwdXQgOiBMZW5ndGggb2Ygb3V0cHV0IGJsb2NrIHdyaXR0ZW4gdG8gKnBfZHN0X2xlbi4gICAgICAgICAgICAgICAgICAgICAqLwotLyogT3V0cHV0IDogT3V0cHV0IGJsb2NrIGluIE1lbVtwX2RzdF9maXJzdC4ucF9kc3RfZmlyc3QrKnBfZHN0X2xlbi0xXS4gICAgICAgKi8KLS8qIE91dHB1dCA6IFdyaXRlcyBvbmx5ICBpbiBNZW1bcF9kc3RfZmlyc3QuLnBfZHN0X2ZpcnN0KypwX2RzdF9sZW4tMV0uICAgICAgICovCi1MT0NBTCB2b2lkIGNvbXByZXNzX2RlY29tcHJlc3MoIFVCWVRFICpwX3dya19tZW0sCi0JCQkJVUJZVEUgKnBfc3JjX2ZpcnN0LCBMT05HICAgc3JjX2xlbiwKLQkJCQlVQllURSAqcF9kc3RfZmlyc3QsIFVMT05HICpwX2RzdF9sZW4pCi17Ci0gLyogQnl0ZSBwb2ludGVycyBwX3NyYyBhbmQgcF9kc3Qgc2NhbiB0aHJvdWdoIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJsb2Nrcy4gICAqLwotIHJlZ2lzdGVyIFVCWVRFICpwX3NyYyA9IHBfc3JjX2ZpcnN0K0ZMQUdfQllURVM7Ci0gcmVnaXN0ZXIgVUJZVEUgKnBfZHN0ID0gcF9kc3RfZmlyc3Q7Ci0gLyogd2UgbmVlZCB0byBhdm9pZCBhIFNFR1Ygd2hlbiB0cnlpbmcgdG8gdW5jb21wcmVzcyBjb3JydXB0IGRhdGEgKi8KLSByZWdpc3RlciBVQllURSAqcF9kc3RfcG9zdCA9IHBfZHN0X2ZpcnN0ICsgKnBfZHN0X2xlbjsKLQotIC8qIFRoZSBmb2xsb3dpbmcgdHdvIHZhcmlhYmxlcyBhcmUgbmV2ZXIgbW9kaWZpZWQgYW5kIGFyZSB1c2VkIHRvIGNvbnRyb2wgICAgKi8KLSAvKiB0aGUgbWFpbiBsb29wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gVUJZVEUgKnBfc3JjX3Bvc3QgID0gcF9zcmNfZmlyc3Qrc3JjX2xlbjsKLSBVQllURSAqcF9zcmNfbWF4MTYgPSBwX3NyY19maXJzdCtzcmNfbGVuLShNQVhfQ01QX0dST1VQLTIpOwotIAotIC8qIFRoZSBoYXNoIHRhYmxlIGlzIHRoZSBvbmx5IHJlc2lkZW50IG9mIHRoZSB3b3JraW5nIG1lbW9yeS4gVGhlIGhhc2ggdGFibGUgKi8KLSAvKiBjb250YWlucyBIQVNIX1RBQkxFX0xFTkdUSD00MDk2IHBvaW50ZXJzIHRvIHBvc2l0aW9ucyBpbiB0aGUgaGlzdG9yeS4gVG8gICovCi0gLyoga2VlcCBNYWNpbnRvc2hlcyBoYXBweSwgaXQgaXMgbG9uZ3dvcmQgYWxpZ25lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotIFVCWVRFICoqaGFzaCA9IChVQllURSAqKikgVUxPTkdfQUxJR05fVVAocF93cmtfbWVtKTsKLQotIC8qIFRoZSB2YXJpYWJsZSAnY29udHJvbCcgaXMgdXNlZCB0byBidWZmZXIgdGhlIGNvbnRyb2wgYml0cyB3aGljaCBhcHBlYXIgaW4gKi8KLSAvKiBncm91cHMgb2YgMTYgYml0cyAoY29udHJvbCB3b3JkcykgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggY29tcHJlc3NlZCBncm91cC4gICovCi0gLyogV2hlbiBlYWNoIGdyb3VwIGlzIHJlYWQsIGJpdCAxNiBvZiB0aGUgcmVnaXN0ZXIgaXMgc2V0IHRvIG9uZS4gV2hlbmV2ZXIgICAqLwotIC8qIGEgbmV3IGJpdCBpcyBuZWVkZWQsIHRoZSByZWdpc3RlciBpcyBzaGlmdGVkIHJpZ2h0LiBXaGVuIHRoZSB2YWx1ZSBvZiB0aGUgKi8KLSAvKiByZWdpc3RlciBiZWNvbWVzIDEsIHdlIGtub3cgdGhhdCB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhIGdyb3VwLiAgICAgICovCi0gLyogSW5pdGlhbGl6aW5nIHRoZSByZWdpc3RlciB0byAxIHRodXMgaW5zdHJ1Y3RzIHRoZSBjb2RlIHRvIGZvbGxvdyB0aGF0IGl0ICAqLwotIC8qIHNob3VsZCByZWFkIGEgbmV3IGNvbnRyb2wgd29yZCBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSByZWdpc3RlciBVTE9ORyBjb250cm9sPTE7Ci0gCi0gLyogVGhlIHZhbHVlIG9mICdsaXRlcmFscycgaXMgYWx3YXlzIGluIHRoZSByYW5nZSAwLi4zLiBJdCBpcyB0aGUgbnVtYmVyIG9mICAqLwotIC8qIGNvbnNlY3V0aXZlIGxpdGVyYWwgaXRlbXMganVzdCBzZWVuLiBXZSBoYXZlIHRvIHJlY29yZCB0aGlzIG51bWJlciBzbyBhcyAgKi8KLSAvKiB0byBrbm93IHdoZW4gdG8gdXBkYXRlIHRoZSBoYXNoIHRhYmxlLiBXaGVuIGxpdGVyYWxzIGdldHMgdG8gMywgdGhlcmUgICAgICovCi0gLyogaGF2ZSBiZWVuIHRocmVlIGNvbnNlY3V0aXZlIGxpdGVyYWxzIGFuZCB3ZSBjYW4gdXBkYXRlIGF0IHRoZSBwb3NpdGlvbiBvZiAqLwotIC8qIHRoZSBvbGRlc3Qgb2YgdGhlIHRocmVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSByZWdpc3RlciBVV09SRCBsaXRlcmFscz0wOwotIAotIC8qIENoZWNrIHRoZSBsZWFkaW5nIGNvcHkgZmxhZyB0byBzZWUgaWYgdGhlIGNvbXByZXNzb3IgY2hvc2UgdG8gdXNlIGEgY29weSAgKi8KLSAvKiBvcGVyYXRpb24gaW5zdGVhZCBvZiBhIGNvbXByZXNzaW9uIG9wZXJhdGlvbi4gSWYgYSBjb3B5IG9wZXJhdGlvbiB3YXMgICAgICovCi0gLyogdXNlZCwgdGhlbiBhbGwgd2UgbmVlZCB0byBkbyBpcyBjb3B5IHRoZSBkYXRhIG92ZXIsIHNldCB0aGUgb3V0cHV0IGxlbmd0aCAqLwotIC8qIGFuZCByZXR1cm4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZiAwCi0gaWYgKCpwX3NyY19maXJzdD09RkxBR19DT1BZKQotICAgewotICAgIGZhc3RfY29weShwX3NyY19maXJzdCtGTEFHX0JZVEVTLHBfZHN0X2ZpcnN0LHNyY19sZW4tRkxBR19CWVRFUyk7Ci0gICAgKnBfZHN0X2xlbj1zcmNfbGVuLUZMQUdfQllURVM7Ci0gICAgcmV0dXJuOwotICAgfQotI2Vsc2UKLSAgaWYgKCBzcmNfbGVuIDwgMCApCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgZmFzdF9jb3B5KHBfc3JjX2ZpcnN0LHBfZHN0X2ZpcnN0LC1zcmNfbGVuICk7Ci0gICAqcF9kc3RfbGVuID0gKFVMT05HKS1zcmNfbGVuOwotICAgcmV0dXJuOwotICB9Ci0jZW5kaWYKLSAgIAotIC8qIEluaXRpYWxpemUgYWxsIGVsZW1lbnRzIG9mIHRoZSBoYXNoIHRhYmxlIHRvIHBvaW50IHRvIGEgY29uc3RhbnQgc3RyaW5nLiAgKi8KLSAvKiBVc2Ugb2YgYW4gdW5yb2xsZWQgbG9vcCBzcGVlZHMgdGhpcyB1cCBjb25zaWRlcmFibHkuICAgICAgICAgICAgICAgICAgICAgICovCi0ge1VXT1JEIGk7IFVCWVRFICoqcF9oPWhhc2g7Ci0jICBkZWZpbmUgWkogKnBfaCsrPVNUQVJUX1NUUklOR18xOAotICBmb3IgKGk9MDtpPDI1NjtpKyspICAgICAvKiAyNTY9SEFTSF9UQUJMRV9MRU5HVEgvMTYuICovCi0gICAge1pKO1pKO1pKO1pKOwotICAgICBaSjtaSjtaSjtaSjsKLSAgICAgWko7Wko7Wko7Wko7Ci0gICAgIFpKO1pKO1pKO1pKO30KLSB9Ci0KLSAvKiBUaGUgb3V0ZXIgbG9vcCBwcm9jZXNzZXMgZWl0aGVyIDEgb3IgMTYgaXRlbXMgcGVyIGl0ZXJhdGlvbiBkZXBlbmRpbmcgb24gICovCi0gLyogaG93IGNsb3NlIHBfc3JjIGlzIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IGJsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotIHdoaWxlIChwX3NyYyE9cF9zcmNfcG9zdCkKLSAgIHsvKiBTdGFydCBvZiBvdXRlciBsb29wICovCi0gICAKLSAgICByZWdpc3RlciBVV09SRCB1bnJvbGw7ICAgLyogQ291bnRzIHVucm9sbGVkIGxvb3AgZXhlY3V0aW9ucy4gICAgICAgICAgICAgICovCi0gICAgCi0gICAgLyogV2hlbiAnY29udHJvbCcgaGFzIHRoZSB2YWx1ZSAxLCBpdCBtZWFucyB0aGF0IHRoZSAxNiBidWZmZXJlZCBjb250cm9sICAqLwotICAgIC8qIGJpdHMgdGhhdCB3ZXJlIHJlYWQgaW4gYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGdyb3VwIGhhdmUgYWxsIGJlZW4gKi8KLSAgICAvKiBzaGlmdGVkIG91dCBhbmQgdGhhdCBhbGwgdGhhdCBpcyBsZWZ0IGlzIHRoZSAxIGJpdCB0aGF0IHdhcyBpbmplY3RlZCAgICovCi0gICAgLyogaW50byBiaXQgMTYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IGdyb3VwLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgICAqLwotICAgIC8qIG9mIGEgZ3JvdXAsIHdlIGhhdmUgdG8gbG9hZCBhIG5ldyBjb250cm9sIHdvcmQgYW5kIGluamVjdCBhIG5ldyAxIGJpdC4gKi8KLSAgICBpZiAoY29udHJvbD09MSkKLSAgICAgIHsKLSAgICAgICBjb250cm9sPTB4MTAwMDB8KnBfc3JjKys7Ci0gICAgICAgY29udHJvbHw9KCpwX3NyYysrKTw8ODsKLSAgICAgIH0KLQotICAgIC8qIElmIGl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgYXJlIHdpdGhpbiAxNiBncm91cHMgZnJvbSB0aGUgZW5kIG9mIHRoZSAgICAgKi8KLSAgICAvKiBpbnB1dCwgZXhlY3V0ZSB0aGUgdW5yb2xsZWQgbG9vcCBvbmx5IG9uY2UsIGVsc2UgcHJvY2VzcyBhIHdob2xlIGdyb3VwICovCi0gICAgLyogb2YgMTYgaXRlbXMgYnkgbG9vcGluZyAxNiB0aW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIHVucm9sbD0gcF9zcmM8PXBfc3JjX21heDE2ID8gMTYgOiAxOwotCi0gICAgLyogVGhpcyBpbm5lciBsb29wIHByb2Nlc3NlcyBvbmUgcGhyYXNlIChpdGVtKSBwZXIgaXRlcmF0aW9uLiAqLwotICAgIHdoaWxlICh1bnJvbGwtLSkKLSAgICAgIHsgLyogQmVnaW4gdW5yb2xsZWQgaW5uZXIgbG9vcC4gKi8KLSAgICAgIAotICAgICAgIC8qIFByb2Nlc3MgYSBsaXRlcmFsIG9yIGNvcHkgaXRlbSBkZXBlbmRpbmcgb24gdGhlIG5leHQgY29udHJvbCBiaXQuICovCi0gICAgICAgaWYgKGNvbnRyb2wmMSkKLSAgICAgICAgIHsKLSAgICAgICAgICAvKiBDb3B5IGl0ZW0uICovCi0gICAgICAgICAgCi0gICAgICAgICAgcmVnaXN0ZXIgVUJZVEUgKnA7ICAgICAgICAgICAvKiBQb2ludHMgdG8gcGxhY2UgZnJvbSB3aGljaCB0byBjb3B5LiAqLwotICAgICAgICAgIHJlZ2lzdGVyIFVXT1JEIGxlbm10OyAgICAgICAgLyogTGVuZ3RoIG9mIGNvcHkgaXRlbSBtaW51cyB0aHJlZS4gICAgKi8KLSAgICAgICAgICByZWdpc3RlciBVQllURSAqKnBfaHRlOyAgICAgIC8qIFBvaW50ZXIgdG8gY3VycmVudCBoYXNoIHRhYmxlIGVudHJ5LiovCi0gICAgICAgICAgcmVnaXN0ZXIgVUJZVEUgKnBfeml2PXBfZHN0OyAvKiBQb2ludGVyIHRvIHN0YXJ0IG9mIGN1cnJlbnQgWml2LiAgICAqLwotICAgICAgICAgIAotICAgICAgICAgIC8qIFJlYWQgYW5kIGRpc21hbnRsZSB0aGUgY29weSB3b3JkLiBXb3JrIG91dCBmcm9tIHdoZXJlIHRvIGNvcHkuICAgKi8KLSAgICAgICAgICBsZW5tdD0qcF9zcmMrKzsKLSAgICAgICAgICBwX2h0ZT0maGFzaFsoKGxlbm10JjB4RjApPDw0KXwqcF9zcmMrK107Ci0gICAgICAgICAgcD0qcF9odGU7Ci0gICAgICAgICAgbGVubXQmPTB4RjsKLSAgICAgICAgICAKLSAgICAgICAgICAvKiBOb3cgcGVyZm9ybSB0aGUgY29weSB1c2luZyBhIGhhbGYgdW5yb2xsZWQgbG9vcC4gKi8KLSAgICAgICAgICAqcF9kc3QrKz0qcCsrOwotICAgICAgICAgICpwX2RzdCsrPSpwKys7Ci0gICAgICAgICAgKnBfZHN0Kys9KnArKzsKLSAgICAgICAgICB3aGlsZSAobGVubXQtLSkKLSAgICAgICAgICAgICAqcF9kc3QrKz0qcCsrOwotICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAvKiBCZWNhdXNlIHdlIGhhdmUganVzdCByZWNlaXZlZCAzIG9yIG1vcmUgYnl0ZXMgaW4gYSBjb3B5IGl0ZW0gICAgICovCi0gICAgICAgICAgLyogKHdob3NlIGJ5dGVzIHdlIGhhdmUganVzdCBpbnN0YWxsZWQgaW4gdGhlIG91dHB1dCksIHdlIGFyZSBub3cgICAqLwotICAgICAgICAgIC8qIGluIGEgcG9zaXRpb24gdG8gZmx1c2ggYWxsIHRoZSBwZW5kaW5nIGxpdGVyYWwgaGFzaGluZ3MgdGhhdCBoYWQgKi8KLSAgICAgICAgICAvKiBiZWVuIHBvc3Rwb25lZCBmb3IgbGFjayBvZiBieXRlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgaWYgKGxpdGVyYWxzPjApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgcmVnaXN0ZXIgVUJZVEUgKnI9cF96aXYtbGl0ZXJhbHM7Ci0gICAgICAgICAgICAgaGFzaFtIQVNIKHIpXT1yOwotICAgICAgICAgICAgIGlmIChsaXRlcmFscz09MikKLSAgICAgICAgICAgICAgICB7cisrOyBoYXNoW0hBU0gocildPXI7fQotICAgICAgICAgICAgIGxpdGVyYWxzPTA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAvKiBJbiBhbnkgY2FzZSwgd2UgY2FuIGltbWVkaWF0ZWx5IHVwZGF0ZSB0aGUgaGFzaCB0YWJsZSB3aXRoIHRoZSAgICovCi0gICAgICAgICAgLyogY3VycmVudCBwb3NpdGlvbi4gV2UgZG9uJ3QgbmVlZCB0byBkbyBhIEhBU0goLi4uKSB0byB3b3JrIG91dCAgICAqLwotICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgcG9pbnRlciwgYXMgdGhlIGNvbXByZXNzb3IganVzdCB0b2xkIHVzISEhICAgICAgKi8KLSAgICAgICAgICAqcF9odGU9cF96aXY7Ci0gICAgICAgICAgCi0gICAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgICAgewotICAgICAgICAgIC8qIExpdGVyYWwgaXRlbS4gKi8KLSAgICAgICAgICAKLSAgICAgICAgICAvKiBDb3B5IG92ZXIgdGhlIGxpdGVyYWwgYnl0ZS4gKi8KLSAgICAgICAgICAqcF9kc3QrKz0qcF9zcmMrKzsKLSAgICAgICAgICAKLSAgICAgICAgICAvKiBJZiB3ZSBub3cgaGF2ZSB0aHJlZSBsaXRlcmFscyB3YWl0aW5nIHRvIGJlIGhhc2hlZCBpbnRvIHRoZSBoYXNoICovCi0gICAgICAgICAgLyogdGFibGUsIHdlIGNhbiBkbyBvbmUgb2YgdGhlbSBub3cgKGJlY2F1c2UgdGhlcmUgYXJlIHRocmVlKS4gICAgICAqLwotICAgICAgICAgIGlmICgrK2xpdGVyYWxzID09IDMpCi0gICAgICAgICAgICAge3JlZ2lzdGVyIFVCWVRFICpwPXBfZHN0LTM7IGhhc2hbSEFTSChwKV09cDsgbGl0ZXJhbHM9Mjt9Ci0gICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgLyogU2hpZnQgdGhlIGNvbnRyb2wgYnVmZmVyIHNvIHRoZSBuZXh0IGNvbnRyb2wgYml0IGlzIGluIGJpdCAwLiAqLwotICAgICAgIGNvbnRyb2w+Pj0xOwotI2lmIDEKLSAgICAgICBpZiAocF9kc3QgPiBwX2RzdF9wb3N0KSAKLSAgICAgICB7Ci0JICAgICAgIC8qIFNoaXQ6IHdlIHRyaWVkIHRvIGRlY29tcHJlc3MgY29ycnVwdCBkYXRhICovCi0JICAgICAgICpwX2RzdF9sZW4gPSAwOwotCSAgICAgICByZXR1cm47Ci0gICAgICAgfQotI2VuZGlmCi0gICAgICB9IC8qIEVuZCB1bnJvbGxlZCBpbm5lciBsb29wLiAqLwotICAgICAgICAgICAgICAgCi0gICB9IC8qIEVuZCBvZiBvdXRlciBsb29wICovCi0gICAKLSAvKiBXcml0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBiZWZvcmUgcmV0dXJuaW5nLiAqLwotICAqcF9kc3RfbGVuPXBfZHN0LXBfZHN0X2ZpcnN0OwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kIG9mIExaUlczLkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci9senJ3My5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2NvbXByZXNzb3IvbHpydzMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMzZmViYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci9senJ3My5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUzICswLDAgQEAKLSNpZm5kZWYgX0xaUlczX0gKLSNkZWZpbmUgX0xaUlczX0gKLS8qCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvY29tcHJlc3Nvci9senJ3My5oLHYgJAotICogJFJldmlzaW9uOiAxLjEgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTI6MzAgJAotICoKLSAqICBpbmNsdWRlIGZpbGVzIGZvciBsenJ3My4gT25seSBzbGlnaHR5IG1vZGlmaWVkIGZyb20gdGhlIG9yaWdpbmFsCi0gKiAgdmVyc2lvbi4gQXNzZW1ibGVzIHRoZSB0aHJlZSBpbmNsdWRlIGZpbGVzIGNvbXByZXNzLmgsIHBvcnQuaCBhbmQKLSAqICBmYXN0Y29weS5oIGZyb20gdGhlIG9yaWdpbmFsIGx6cnczIHBhY2thZ2UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFJFU1MuSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBBdXRob3IgOiBSb3NzIFdpbGxpYW1zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogRGF0ZSAgIDogRGVjZW1iZXIgMTk4OS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGlzIGhlYWRlciBmaWxlIGRlZmluZXMgdGhlIGludGVyZmFjZSB0byBhIHNldCBvZiBmdW5jdGlvbnMgY2FsbGVkICAgICAgICAqLwotLyogJ2NvbXByZXNzJywgZWFjaCBtZW1iZXIgb2Ygd2hpY2ggaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgZGF0YSBjb21wcmVzc2lvbiAgKi8KLS8qIGFsZ29yaXRobS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogTm9ybWFsbHkgaW4gQyBwcm9ncmFtbWluZywgZm9yIGVhY2ggLkggZmlsZSwgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIC5DICAgKi8KLS8qIGZpbGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbnMgcHJvbWlzZWQgaW4gdGhlIC5IIGZpbGUuICAgICAgICAgICAgICAgICovCi0vKiBIZXJlLCB0aGVyZSBhcmUgbWFueSAuQyBmaWxlcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaGVhZGVyIGZpbGUuICAgICAgICAgICAqLwotLyogRWFjaCBjb21mb3JtaW5nIGltcGxlbWVudGF0aW9uIGZpbGUgY29udGFpbnMgYSBzaW5nbGUgZnVuY3Rpb24gICAgICAgICAgICAgKi8KLS8qIGNhbGxlZCAnY29tcHJlc3MnIHRoYXQgaW1wbGVtZW50cyBhIHNpbmdsZSBkYXRhIGNvbXByZXNzaW9uICAgICAgICAgICAgICAgICovCi0vKiBhbGdvcml0aG0gdGhhdCBjb25mb3JtcyB3aXRoIHRoZSBpbnRlcmZhY2Ugc3BlY2lmaWVkIGluIHRoaXMgaGVhZGVyIGZpbGUuICAqLwotLyogT25seSBvbmUgYWxnb3JpdGhtIGNhbiBiZSBsaW5rZWQgaW4gYXQgYSB0aW1lIGluIHRoaXMgb3JnYW5pemF0aW9uLiAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICBERUZJTklUSU9OIE9GIEZVTkNUSU9OIENPTVBSRVNTICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFN1bW1hcnkgb2YgRnVuY3Rpb24gQ29tcHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogVGhlIGFjdGlvbiB0aGF0ICdjb21wcmVzcycgdGFrZXMgZGVwZW5kcyBvbiBpdHMgZmlyc3QgYXJndW1lbnQgY2FsbGVkICAgICAgKi8KLS8qICdhY3Rpb24nLiAgVGhlIGZ1bmN0aW9uIHByb3ZpZGVzIHRocmVlIGFjdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgLSBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFsZ29yaXRobS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIC0gQ29tcHJlc3MgICBhIGJsb2NrIG9mIG1lbW9yeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAtIERlY29tcHJlc3MgYSBibG9jayBvZiBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogU2VlIHRoZSBmb3JtYWwgQyBkZWZpbml0aW9uIGxhdGVyIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBDb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIENPTVBSRVNTX09WRVJSVU46IFRoZSBjb25zdGFudCBDT01QUkVTU19PVkVSUlVOIGRlZmluZXMgYnkgaG93IG1hbnkgYnl0ZXMgICovCi0vKiBhbiBhbGdvcml0aG0gaXMgYWxsb3dlZCB0byBleHBhbmQgYSBibG9jayBkdXJpbmcgYSBjb21wcmVzc2lvbiBvcGVyYXRpb24uICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIEFsdGhvdWdoIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgdXN1YWxseSBjb21wcmVzcyBkYXRhLCB0aGVyZSB3aWxsIGFsd2F5cyAgICovCi0vKiBiZSBkYXRhIHRoYXQgYSBnaXZlbiBjb21wcmVzc29yIHdpbGwgZXhwYW5kICh0aGlzIGNhbiBiZSBwcm92ZW4pLiAgICAgICAgICAqLwotLyogRm9ydHVuYXRlbHksIHRoZSBkZWdyZWUgb2YgZXhwYW5zaW9uIGNhbiBiZSBsaW1pdGVkIHRvIGEgc2luZ2xlIGJpdCwgYnkgICAgKi8KLS8qIGNvcHlpbmcgb3ZlciB0aGUgaW5wdXQgZGF0YSBpZiB0aGUgZGF0YSBnZXRzIGJpZ2dlciBkdXJpbmcgY29tcHJlc3Npb24uICAgICovCi0vKiBUbyBhbGxvdyBmb3IgdGhpcyBwb3NzaWJpbGl0eSwgdGhlIGZpcnN0IGJpdCBvZiBhIGNvbXByZXNzZWQgICAgICAgICAgICAgICAqLwotLyogcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgICAgICAgICAgICAgICAgKi8KLS8qIGlucHV0IGRhdGEgd2FzIGNvcGllZCBvdmVyLCBvciB0cnVseSBjb21wcmVzc2VkLiBJbiBwcmFjdGljZSwgdGhlIGZpcnN0ICAgICovCi0vKiBieXRlIHdvdWxkIGJlIHVzZWQgdG8gc3RvcmUgdGhpcyBiaXQgc28gYXMgdG8gbWFpbnRhaW4gYnl0ZSBhbGlnbm1lbnQuICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFVuZm9ydHVuYXRlbHksIGluIGdlbmVyYWwsIHRoZSBvbmx5IHdheSB0byB0ZWxsIGlmIGFuIGFsZ29yaXRobSB3aWxsICAgICAgICovCi0vKiBleHBhbmQgYSBwYXJ0aWN1bGFyIGJsb2NrIG9mIGRhdGEgaXMgdG8gcnVuIHRoZSBhbGdvcml0aG0gb24gdGhlIGRhdGEuICAgICAqLwotLyogSWYgdGhlIGFsZ29yaXRobSBkb2VzIG5vdCBjb250aW51b3VzbHkgbW9uaXRvciBob3cgbWFueSBvdXRwdXQgYnl0ZXMgaXQgICAgKi8KLS8qIGhhcyB3cml0dGVuLCBpdCBtaWdodCB3cml0ZSBhbiBvdXRwdXQgYmxvY2sgZmFyIGxhcmdlciB0aGFuIHRoZSBpbnB1dCAgICAgICovCi0vKiBibG9jayBiZWZvcmUgcmVhbGl6aW5nIHRoYXQgaXQgaGFzIGRvbmUgc28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogT24gdGhlIG90aGVyIGhhbmQsIGNvbnRpbnVvdXMgY2hlY2tzIG9uIG91dHB1dCBsZW5ndGggYXJlIGluZWZmaWNpZW50LiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUbyBjYXRlciBmb3IgYWxsIHRoZXNlIHByb2JsZW1zLCB0aGlzIGludGVyZmFjZSBkZWZpbml0aW9uOiAgICAgICAgICAgICAgICAqLwotLyogPiBBbGxvd3MgYSBjb21wcmVzc2lvbiBhbGdvcml0aG0gdG8gcmV0dXJuIGFuIG91dHB1dCBibG9jayB0aGF0IGlzIHVwIHRvICAgKi8KLS8qICAgQ09NUFJFU1NfT1ZFUlJVTiBieXRlcyBsb25nZXIgdGhhbiB0aGUgaW5wdXQgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA+IEFsbG93cyBhIGNvbXByZXNzaW9uIGFsZ29yaXRobSB0byB3cml0ZSB1cCB0byBDT01QUkVTU19PVkVSUlVOIGJ5dGVzICAgICAqLwotLyogICBtb3JlIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgYmxvY2sgdG8gdGhlIG1lbW9yeSBvZiB0aGUgb3V0cHV0ICAgICAgKi8KLS8qICAgYmxvY2sgcmVnYXJkbGVzcyBvZiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYmxvY2sgZXZlbnR1YWxseSByZXR1cm5lZC4gICovCi0vKiAgIFRoaXMgYWxsb3dzIGFuIGFsZ29yaXRobSB0byBvdmVycnVuIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGJsb2NrIGluIHRoZSAqLwotLyogICBvdXRwdXQgYmxvY2sgYnkgdXAgdG8gQ09NUFJFU1NfT1ZFUlJVTiBieXRlcyBiZXR3ZWVuIGV4cGFuc2lvbiBjaGVja3MuICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBUaGUgcHJvYmxlbSBkb2VzIG5vdCBhcmlzZSBmb3IgZGVjb21wcmVzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIElkZW50aXR5IEFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBhY3Rpb24gbXVzdCBiZSBDT01QUkVTU19BQ1RJT05fSURFTlRJVFkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID4gcF9kc3RfbGVuIG11c3QgcG9pbnQgdG8gYSBsb25nd29yZCB0byByZWNlaXZlIGEgbG9uZ3dvcmQgYWRkcmVzcy4gICAgICAgICovCi0vKiA+IFRoZSB2YWx1ZSBvZiB0aGUgb3RoZXIgcGFyYW1ldGVycyBkb2VzIG5vdCBtYXR0ZXIuICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBBZnRlciBleGVjdXRpb24sIHRoZSBsb25nd29yZCB0aGF0IHBfZHN0X2xlbiBwb2ludHMgdG8gd2lsbCBiZSBhIHBvaW50ZXIgKi8KLS8qICAgdG8gYSBzdHJ1Y3R1cmUgb2YgdHlwZSBjb21wcmVzc19pZGVudGl0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgIFRodXMsIGZvciBleGFtcGxlLCBhZnRlciB0aGUgY2FsbCwgKCpwX2RzdF9sZW4pLT5tZW1vcnkgd2lsbCByZXR1cm4gdGhlICAqLwotLyogICBudW1iZXIgb2YgYnl0ZXMgb2Ygd29ya2luZyBtZW1vcnkgdGhhdCB0aGUgYWxnb3JpdGhtIHJlcXVpcmVzIHRvIHJ1bi4gICAgKi8KLS8qID4gVGhlIHZhbHVlcyBvZiB0aGUgaWRlbnRpdHkgc3RydWN0dXJlIHJldHVybmVkIGFyZSBmaXhlZCBjb25zdGFudCAgICAgICAgICovCi0vKiAgIGF0dHJpYnV0ZXMgb2YgdGhlIGFsZ29yaXRobSBhbmQgbXVzdCBub3QgdmFyeSBmcm9tIGNhbGwgdG8gY2FsbC4gICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIENvbW1vbiBSZXF1aXJlbWVudHMgZm9yIENvbXByZXNzaW9uIGFuZCBEZWNvbXByZXNzaW9uIEFjdGlvbnMgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAqLwotLyogPiB3cmtfbWVtIG11c3QgcG9pbnQgdG8gYW4gdW51c2VkIGJsb2NrIG9mIG1lbW9yeSBvZiBhIGxlbmd0aCBzcGVjaWZpZWQgaW4gKi8KLS8qICAgdGhlIGFsZ29yaXRobSdzIGlkZW50aXR5IGJsb2NrLiBUaGUgaWRlbnRpdHkgYmxvY2sgY2FuIGJlIG9idGFpbmVkIGJ5ICAgICovCi0vKiAgIG1ha2luZyBhIHNlcGFyYXRlIGNhbGwgdG8gY29tcHJlc3MsIHNwZWNpZnlpbmcgdGhlIGlkZW50aXR5IGFjdGlvbi4gICAgICAqLwotLyogPiBUaGUgSU5QVVQgQkxPQ0sgaXMgZGVmaW5lZCB0byBiZSBNZW1vcnlbc3JjX2FkZHIsc3JjX2FkZHIrc3JjX2xlbi0xXS4gICAgKi8KLS8qID4gZHN0X2xlbiB3aWxsIGJlIHVzZWQgdG8gZGVub3RlICpwX2RzdF9sZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA+IGRzdF9sZW4gaXMgbm90IHJlYWQgYnkgY29tcHJlc3MsIG9ubHkgd3JpdHRlbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBUaGUgdmFsdWUgb2YgZHN0X2xlbiBpcyBkZWZpbmVkIG9ubHkgdXBvbiB0ZXJtaW5hdGlvbi4gICAgICAgICAgICAgICAgICAgKi8KLS8qID4gVGhlIE9VVFBVVCBCTE9DSyBpcyBkZWZpbmVkIHRvIGJlIE1lbW9yeVtkc3RfYWRkcixkc3RfYWRkcitkc3RfbGVuLTFdLiAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogQ29tcHJlc3Npb24gQWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA+IGFjdGlvbiBtdXN0IGJlIENPTVBSRVNTX0FDVElPTl9DT01QUkVTUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBzcmNfbGVuIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLENPTVBSRVNTX01BWF9PUkddLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID4gVGhlIE9VVFBVVCBaT05FIGlzIGRlZmluZWQgdG8gYmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgIE1lbW9yeVtkc3RfYWRkcixkc3RfYWRkcitzcmNfbGVuLTErQ09NUFJFU1NfT1ZFUlJVTl0uICAgICAgICAgICAgICAgICAqLwotLyogPiBUaGUgZnVuY3Rpb24gY2FuIG1vZGlmeSBhbnkgcGFydCBvZiB0aGUgb3V0cHV0IHpvbmUgcmVnYXJkbGVzcyBvZiB0aGUgICAgKi8KLS8qICAgZmluYWwgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYmxvY2suICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiA+IFRoZSBpbnB1dCBibG9jayBhbmQgdGhlIG91dHB1dCB6b25lIG11c3Qgbm90IG92ZXJsYXAuICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBkc3RfbGVuIHdpbGwgYmUgaW4gdGhlIHJhbmdlIFswLHNyY19sZW4rQ09NUFJFU1NfT1ZFUlJVTl0uICAgICAgICAgICAgICAgKi8KLS8qID4gZHN0X2xlbiB3aWxsIGJlIGluIHRoZSByYW5nZSBbMCxDT01QUkVTU19NQVhfQ09NXSAoZnJvbSBwcmV2IGZhY3QpLiAgICAgICovCi0vKiA+IFRoZSBvdXRwdXQgYmxvY2sgd2lsbCBjb25zaXN0IG9mIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlucHV0IGJsb2NrLiAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIERlY29tcHJlc3Npb24gQWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBhY3Rpb24gbXVzdCBiZSBDT01QUkVTU19BQ1RJT05fREVDT01QUkVTUy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID4gVGhlIGlucHV0IGJsb2NrIG11c3QgYmUgdGhlIHJlc3VsdCBvZiBhbiBlYXJsaWVyIGNvbXByZXNzaW9uIG9wZXJhdGlvbi4gICovCi0vKiA+IElmIHRoZSBwcmV2aW91cyBmYWN0IGlzIHRydWUsIHRoZSBmb2xsb3dpbmcgZmFjdHMgbXVzdCBhbHNvIGJlIHRydWU6ICAgICAqLwotLyogICA+IHNyY19sZW4gd2lsbCBiZSBpbiB0aGUgcmFuZ2UgWzAsQ09NUFJFU1NfTUFYX0NPTV0uICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgPiBkc3RfbGVuIHdpbGwgYmUgaW4gdGhlIHJhbmdlIFswLENPTVBSRVNTX01BWF9PUkddLiAgICAgICAgICAgICAgICAgICAgICovCi0vKiA+IFRoZSBpbnB1dCBhbmQgb3V0cHV0IGJsb2NrcyBtdXN0IG5vdCBvdmVybGFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogPiBPbmx5IHRoZSBvdXRwdXQgYmxvY2sgaXMgbW9kaWZpZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID4gVXBvbiB0ZXJtaW5hdGlvbiwgdGhlIG91dHB1dCBibG9jayB3aWxsIGNvbnNpc3Qgb2YgdGhlIGJ5dGVzIGNvbnRhaW5lZCAgICovCi0vKiAgIGluIHRoZSBpbnB1dCBibG9jayBwYXNzZWQgdG8gdGhlIGVhcmxpZXIgY29tcHJlc3Npb24gb3BlcmF0aW9uLiAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQT1JULkggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIG1hY3JvIGRlZmluaXRpb25zIGFuZCB0eXBlcyB0aGF0IGFyZSBsaWtlbHkgdG8gICAgICAgICovCi0vKiBjaGFuZ2UgYmV0d2VlbiBjb21wdXRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgRE9ORV9QT1JUICAgICAgIC8qIE9ubHkgZG8gdGhpcyBpZiBub3QgcHJldmlvdXNseSBkb25lLiAgICAgICAgICAgICAgICovCi0KLSAgICNpZmRlZiBUSElOS19DCi0gICAgICAjZGVmaW5lIFVCWVRFIHVuc2lnbmVkIGNoYXIgICAgICAvKiBVbnNpZ25lZCBieXRlICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgI2RlZmluZSBVV09SRCB1bnNpZ25lZCBpbnQgICAgICAgLyogVW5zaWduZWQgd29yZCAoMiBieXRlcykgICAgICAgICAgICAgKi8KLSAgICAgICNkZWZpbmUgVUxPTkcgdW5zaWduZWQgbG9uZyAgICAgIC8qIFVuc2lnbmVkIHdvcmQgKDQgYnl0ZXMpICAgICAgICAgICAgICovCi0gICAgICAjZGVmaW5lIEJPT0wgIHVuc2lnbmVkIGNoYXIgICAgICAvKiBCb29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgI2RlZmluZSBGT1BFTl9CSU5BUllfUkVBRCAgInJiIiAgLyogTW9kZSBzdHJpbmcgZm9yIGJpbmFyeSByZWFkaW5nLiAgICAgKi8KLSAgICAgICNkZWZpbmUgRk9QRU5fQklOQVJZX1dSSVRFICJ3YiIgIC8qIE1vZGUgc3RyaW5nIGZvciBiaW5hcnkgd3JpdGluZy4gICAgICovCi0gICAgICAjZGVmaW5lIEZPUEVOX1RFWFRfQVBQRU5EICAiYSIgICAvKiBNb2RlIHN0cmluZyBmb3IgdGV4dCBhcHBlbmRpbmcuICAgICAqLwotICAgICAgI2RlZmluZSBSRUFMIGRvdWJsZSAgICAgICAgICAgICAgLyogVVNlZCBmb3IgZmxvYXRpbmcgcG9pbnQgc3R1ZmYuICAgICAgKi8KLSAgICNlbmRpZgotICAgI2lmIGRlZmluZWQoTElOVVgpIHx8IGRlZmluZWQobGludXgpCi0gICAgICAjZGVmaW5lIFVCWVRFIF9fdTggICAgICAgICAgICAgICAvKiBVbnNpZ25lZCBieXRlICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgI2RlZmluZSBVV09SRCBfX3UxNiAgICAgICAgICAgICAgLyogVW5zaWduZWQgd29yZCAoMiBieXRlcykgICAgICAgICAgICAgKi8KLSAgICAgICNkZWZpbmUgVUxPTkcgX191MzIgICAgICAgICAgICAgIC8qIFVuc2lnbmVkIHdvcmQgKDQgYnl0ZXMpICAgICAgICAgICAgICovCi0gICAgICAjZGVmaW5lIExPTkcgIF9fczMyICAgICAgICAgICAgICAvKiBTaWduZWQgICB3b3JkICg0IGJ5dGVzKSAgICAgICAgICAgICAqLwotICAgICAgI2RlZmluZSBCT09MICBpcyBub3QgdXNlZCBoZXJlICAgLyogQm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICNkZWZpbmUgRk9QRU5fQklOQVJZX1JFQUQgIG5vdCB1c2VkICAvKiBNb2RlIHN0cmluZyBmb3IgYmluYXJ5IHJlYWRpbmcuICovCi0gICAgICAjZGVmaW5lIEZPUEVOX0JJTkFSWV9XUklURSBub3QgdXNlZCAgLyogTW9kZSBzdHJpbmcgZm9yIGJpbmFyeSB3cml0aW5nLiAqLwotICAgICAgI2RlZmluZSBGT1BFTl9URVhUX0FQUEVORCAgbm90IHVzZWQgIC8qIE1vZGUgc3RyaW5nIGZvciB0ZXh0IGFwcGVuZGluZy4gKi8KLSAgICAgICNkZWZpbmUgUkVBTCBub3QgdXNlZCAgICAgICAgICAgICAgICAvKiBVU2VkIGZvciBmbG9hdGluZyBwb2ludCBzdHVmZi4gICovCi0gICAgICAjaWZuZGVmIFRSVUUKLSAgICAgICNkZWZpbmUgVFJVRSAxCi0gICAgICAjZW5kaWYKLSAgICNlbmRpZgotCi0gICAjZGVmaW5lIERPTkVfUE9SVCAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBkbyBhbGwgdGhpcyBhZ2Fpbi4gICAgICAgICAgICAqLwotICAgI2RlZmluZSBNQUxMT0NfRkFJTCBOVUxMICAgICAgICAgICAgLyogRmFpbHVyZSBzdGF0dXMgZnJvbSBtYWxsb2MoKSAgICAgICAgKi8KLSAgICNkZWZpbmUgTE9DQUwgc3RhdGljICAgICAgICAgICAgICAgIC8qIEZvciBub24tZXhwb3J0ZWQgcm91dGluZXMuICAgICAgICAgICovCi0gICAjZGVmaW5lIEVYUE9SVCAgICAgICAgICAgICAgICAgICAgICAvKiBTaWduYWxzIGV4cG9ydGVkIGZ1bmN0aW9uLiAgICAgICAgICAqLwotICAgI2RlZmluZSB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgLyogVXNlZnVsIGZvciBhbGlnbmluZyBpZnMuICAgICAgICAgICAgKi8KLQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZCBvZiBQT1JULkggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBDT01QUkVTU19BQ1RJT05fSURFTlRJVFkgICAwCi0jZGVmaW5lIENPTVBSRVNTX0FDVElPTl9DT01QUkVTUyAgIDEKLSNkZWZpbmUgQ09NUFJFU1NfQUNUSU9OX0RFQ09NUFJFU1MgMgotCi0jZGVmaW5lIENPTVBSRVNTX09WRVJSVU4gMTAyNAotI2RlZmluZSBDT01QUkVTU19NQVhfQ09NIDB4NzAwMDAwMDAKLSNkZWZpbmUgQ09NUFJFU1NfTUFYX09SRyAoQ09NUFJFU1NfTUFYX0NPTS1DT01QUkVTU19PVkVSUlVOKQotCi0jZGVmaW5lIENPTVBSRVNTX01BWF9TVFJMRU4gMjU1Ci0KLS8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhbGdvcml0aG0uICAgICAgICAgKi8KLS8qID4gVGhlIHRvcCBiaXQgb2YgaWQgbXVzdCBiZSB6ZXJvLiBUaGUgcmVtYWluaW5nIGJpdHMgbXVzdCBiZSBjaG9zZW4gYnkgICAgKi8KLS8qICAgdGhlIGF1dGhvciBvZiB0aGUgYWxnb3JpdGhtIGJ5IHRvc3NpbmcgYSBjb2luIDMxIHRpbWVzLiAgICAgICAgICAgICAgICAgKi8KLS8qID4gVGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWVzdGVkIGJ5IHRoZSBhbGdvcml0aG0gaXMgc3BlY2lmaWVkIGluIGJ5dGVzICAgKi8KLS8qICAgYW5kIG11c3QgYmUgaW4gdGhlIHJhbmdlIFswLDB4NzAwMDAwMDBdLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qID4gQWxsIHN0cmluZ3MgcyBtdXN0IGJlIHN1Y2ggdGhhdCBzdHJsZW4ocyk8PUNPTVBSRVNTX01BWF9TVFJMRU4uICAgICAgICAgKi8KLXN0cnVjdCBjb21wcmVzc19pZGVudGl0eQotICB7Ci0gICBVTE9ORyBpZDsgICAgICAgICAgIC8qIElkZW50aWZ5aW5nIG51bWJlciBvZiBhbGdvcml0aG0uICAgICAgICAgICAgKi8KLSAgIFVMT05HIG1lbW9yeTsgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIG9mIHdvcmtpbmcgbWVtb3J5IHJlcXVpcmVkLiAqLwotCi0gICBjaGFyICAqbmFtZTsgICAgICAgIC8qIE5hbWUgb2YgYWxnb3JpdGhtLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIGNoYXIgICp2ZXJzaW9uOyAgICAgLyogVmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgY2hhciAgKmRhdGU7ICAgICAgICAvKiBEYXRlIG9mIHJlbGVhc2Ugb2YgdGhpcyB2ZXJzaW9uLiAgICAgICAgICAgICovCi0gICBjaGFyICAqY29weXJpZ2h0OyAgIC8qIENvcHlyaWdodCBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgY2hhciAgKmF1dGhvcjsgICAgICAvKiBBdXRob3Igb2YgYWxnb3JpdGhtLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICBjaGFyICAqYWZmaWxpYXRpb247IC8qIEFmZmlsaWF0aW9uIG9mIGF1dGhvci4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgIGNoYXIgICp2ZW5kb3I7ICAgICAgLyogV2hlcmUgdGhlIGFsZ29yaXRobSBjYW4gYmUgb2J0YWluZWQuICAgICAgICAqLwotICB9OwotCi12b2lkICBsenJ3M19jb21wcmVzcyggICAgICAgIC8qIFNpbmdsZSBmdW5jdGlvbiBpbnRlcmZhY2UgdG8gY29tcHJlc3Npb24gYWxnb3JpdGhtLiAqLwotVVdPUkQgICAgIGFjdGlvbiwgICAgICAvKiBBY3Rpb24gdG8gYmUgcGVyZm9ybWVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLVVCWVRFICAgKndya19tZW0sICAgICAgLyogV29ya2luZyBtZW1vcnkgdGVtcG9yYXJpbHkgZ2l2ZW4gdG8gcm91dGluZSB0byB1c2UuICovCi1VQllURSAgICpzcmNfYWRyLCAgICAgIC8qIEFkZHJlc3Mgb2YgaW5wdXQgIGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotTE9ORyAgICAgc3JjX2xlbiwgICAgICAvKiBMZW5ndGggIG9mIGlucHV0ICBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLVVCWVRFICAgKmRzdF9hZHIsICAgICAgLyogQWRkcmVzcyBvZiBvdXRwdXQgZGF0YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi12b2lkICAqcF9kc3RfbGVuICAgICAgIC8qIFBvaW50ZXIgdG8gYSBsb25nd29yZCB3aGVyZSByb3V0aW5lIHdpbGwgd3JpdGU6ICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBJZiBhY3Rpb249Li5JREVOVElUWSAgID0+IEFkciBvZiBpZCBzdHJ1Y3R1cmUuICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgLyogICAgSWYgYWN0aW9uPS4uQ09NUFJFU1MgICA9PiBMZW5ndGggb2Ygb3V0cHV0IGRhdGEuICovCi0gICAgICAgICAgICAgICAgICAgICAgIC8qICAgIElmIGFjdGlvbj0uLkRFQ09NUFJFU1MgPT4gTGVuZ3RoIG9mIG91dHB1dCBkYXRhLiAqLwotKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmQgb2YgQ09NUFJFU1MuSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYXN0X2NvcHkuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBibG9jayBvZiBtZW1vcnkgdmVyeSBxdWlja2x5LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFRoZSBleGFjdCBzcGVlZCBkZXBlbmRzIG9uIHRoZSByZWxhdGl2ZSBhbGlnbm1lbnQgb2YgdGhlIGJsb2NrcyBvZiBtZW1vcnkuICovCi0vKiBQUkUgIDogMDw9c3JjX2xlbjw9KDJeMzIpLTEgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogUFJFICA6IFNvdXJjZSBhbmQgZGVzdGluYXRpb24gYmxvY2tzIG11c3Qgbm90IG92ZXJsYXAuICAgICAgICAgICAgICAgICAgICAgKi8KLS8qIFBPU1QgOiBNRU1bZHN0X2Fkcixkc3RfYWRyK3NyY19sZW4tMV09TUVNW3NyY19hZHIsc3JjX2FkcitzcmNfbGVuLTFdLiAgICAgICovCi0vKiBQT1NUIDogTUVNW2RzdF9hZHIsZHN0X2FkcitzcmNfbGVuLTFdIGlzIHRoZSBvbmx5IG1lbW9yeSBjaGFuZ2VkLiAgICAgICAgICAqLwotCi0jZGVmaW5lIGZhc3RfY29weShzcmMsZHN0LGxlbikgbWVtY3B5KGRzdCxzcmMsbGVuKQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kIG9mIGZhc3RfY29weS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2NvbXByZXNzb3IvemZ0YXBlLWNvbXByZXNzLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci96ZnRhcGUtY29tcHJlc3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVmZmMwYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci96ZnRhcGUtY29tcHJlc3MuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMDMgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0Ci0geW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIAotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LAotIFVTQS4KLSAKLSAqCi0gKiAgICAgVGhpcyBmaWxlIGltcGxlbWVudHMgYSAiZ2VuZXJpYyIgaW50ZXJmYWNlIGJldHdlZW4gdGhlICoKLSAqICAgICB6ZnRhcGUtZHJpdmVyIGFuZCBhIGNvbXByZXNzaW9uLWFsZ29yaXRobS4gVGhlICoKLSAqICAgICBjb21wcmVzc2lvbi1hbGdvcml0aG0gY3VycmVudGx5IHVzZWQgaXMgYSBMWjc3LiBJIHVzZSB0aGUgKgotICogICAgIGltcGxlbWVudGF0aW9uIGx6cnczIGJ5IFJvc3MgTi4gV2lsbGlhbXMgKFJlbmFpc3NhbmNlICoKLSAqICAgICBTb2Z0d2FyZSkuIFRoZSBjb21wcmVzc2lvbiBwcm9ncmFtIGl0c2VsZiBpcyBpbiB0aGUgZmlsZQotICogICAgIGx6cnczLmMgKiBhbmQgbHpydzMuaC4gIFRvIGFkb3B0IGFub3RoZXIgY29tcHJlc3Npb24gYWxnb3JpdGhtCi0gKiAgICAgdGhlIGZ1bmN0aW9ucyAqIHpmdF9jb21wcmVzcygpIGFuZCB6ZnRfdW5jb21wcmVzcygpIG11c3QgYmUKLSAqICAgICBjaGFuZ2VkICogYXBwcm9wcmlhdGVseS4gU2VlIGJlbG93LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC96ZnRhcGUuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWluaXQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWVvZi5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS13cml0ZS5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtcmVhZC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi9jb21wcmVzc29yL3pmdGFwZS1jb21wcmVzcy5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtdnRibC5oIgotI2luY2x1ZGUgIi4uL2NvbXByZXNzb3IvbHpydzMuaCIKLQotLyoKLSAqICAgZ2xvYmFsIHZhcmlhYmxlcwotICovCi0KLS8qIEkgaGFuZGxlIHRoZSBhbGxvY2F0aW9uIG9mIHRoaXMgYnVmZmVyIGFzIGEgc3BlY2lhbCBjYXNlLCBiZWNhdXNlCi0gKiBpdCdzIHNpemUgdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgdGFwZSBsZW5ndGggaW5zZXJ0ZWQuCi0gKi8KLQotLyogbG9jYWwgdmFyaWFibGVzIAotICovCi1zdGF0aWMgdm9pZCAqemZ0Y193cmtfbWVtID0gTlVMTDsKLXN0YXRpYyBfX3U4ICp6ZnRjX2J1ZiAgICAgPSBOVUxMOwotc3RhdGljIHZvaWQgKnpmdGNfc2NyYXRjaF9idWYgID0gTlVMTDsKLQotLyogY29tcHJlc3Npb24gc3RhdGlzdGljcyAKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCB6ZnRjX3dyX3VuY29tcHJlc3NlZCA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHpmdGNfd3JfY29tcHJlc3NlZCAgID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgemZ0Y19yZF91bmNvbXByZXNzZWQgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCB6ZnRjX3JkX2NvbXByZXNzZWQgICA9IDA7Ci0KLS8qIGZvcndhcmQgKi8KLXN0YXRpYyBpbnQgIHpmdGNfd3JpdGUoaW50ICp3cml0ZV9jbnQsCi0JCSAgICAgICBfX3U4ICpkc3RfYnVmLCBjb25zdCBpbnQgc2VnX3N6LAotCQkgICAgICAgY29uc3QgX191OCBfX3VzZXIgKnNyY19idWYsIGNvbnN0IGludCByZXFfbGVuLAotCQkgICAgICAgY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MsIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUpOwotc3RhdGljIGludCAgemZ0Y19yZWFkKGludCAqcmVhZF9jbnQsCi0JCSAgICAgIF9fdTggIF9fdXNlciAqZHN0X2J1ZiwgY29uc3QgaW50IHRvX2RvLAotCQkgICAgICBjb25zdCBfX3U4ICpzcmNfYnVmLCBjb25zdCBpbnQgc2VnX3N6LAotCQkgICAgICBjb25zdCB6ZnRfcG9zaXRpb24gKnBvcywgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSk7Ci1zdGF0aWMgaW50ICB6ZnRjX3NlZWsodW5zaWduZWQgaW50IG5ld19ibG9ja19wb3MsIAotCQkgICAgICB6ZnRfcG9zaXRpb24gKnBvcywgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSwKLQkJICAgICAgX191OCAqYnVmZmVyKTsKLXN0YXRpYyB2b2lkIHpmdGNfbG9jayAgICh2b2lkKTsKLXN0YXRpYyB2b2lkIHpmdGNfcmVzZXQgICh2b2lkKTsKLXN0YXRpYyB2b2lkIHpmdGNfY2xlYW51cCh2b2lkKTsKLXN0YXRpYyB2b2lkIHpmdGNfc3RhdHMgICAgICAodm9pZCk7Ci0KLS8qIGNvbXByZXNzZWQgc2VnbWVudC4gVGhpcyBjb25mb3JtcyB0byBRSUMtODAtTUMsIFJldmlzaW9uIEsuCi0gKiAKLSAqIFJldi4gSyBhcHBsaWVzIHRvIHRhcGVzIHdpdGggYGZpeGVkIGxlbmd0aCBmb3JtYXQnIHdoaWNoIGlzCi0gKiBpbmRpY2F0ZWQgYnkgZm9ybWF0IGNvZGUgMiwzIGFuZCA1LiBTZWUgYmVsb3cgZm9yIGZvcm1hdCBjb2RlIDQgYW5kIDYKLSAqCi0gKiAyIGJ5dGVzOiBvZmZzZXQgb2YgY29tcHJlc3Npb24gc2VnbWVudCBzdHJ1Y3R1cmUKLSAqICAgICAgICAgIDI5ayA+IG9mZnNldCA+PSAyOWstMTg6IGRhdGEgZnJvbSBwcmV2aW91cyBzZWdtZW50IGVucyBpbiB0aGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50IGFuZCBubyBjb21wcmVzc2VkIGJsb2NrIHN0YXJ0cwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhpcyBzZWdtZW50Ci0gKiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9PSAwOiBkYXRhIGZyb20gcHJldmlvdXMgc2VnbWVudCBvY2N1cGllcyBlbnRpcmUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgYW5kIGNvbnRpbnVlcyBpbiBuZXh0IHNlZ21lbnQKLSAqIG4gYnl0ZXM6IHJlbWFpbmRlciBmcm9tIHByZXZpb3VzIHNlZ21lbnQKLSAqIAotICogUmV2LiBLOiAgCi0gKiA0IGJ5dGVzOiA0IGJ5dGVzOiBmaWxlcyBzZXQgYnl0ZSBvZmZzZXQKLSAqIFBvc3QgUmV2LiBLIGFuZCBRSUMtMzAyMC8zMDIwOgotICogOCBieXRlczogOCBieXRlczogZmlsZXMgc2V0IGJ5dGUgb2Zmc2V0Ci0gKiAyIGJ5dGVzOiBieXRlIGNvdW50IE4gKGFtb3VudCBvZiBkYXRhIGZvbGxvd2luZykKLSAqICAgICAgICAgIGJpdCAxNSBpcyBzZXQgaWYgZGF0YSBpcyBjb21wcmVzc2VkLCBiaXQgMTUgaXMgbm90Ci0gKiAgICAgICAgICBzZXQgaWYgZGF0YSBpcyB1bmNvbXByZXNzZWQKLSAqIE4gYnl0ZXM6IGRhdGEgKGFzIG11Y2ggYXMgc3BlY2lmaWVkIGluIHRoZSBieXRlIGNvdW50KQotICogMiBieXRlczogYnl0ZSBjb3VudCBOXzEgb2YgbmV4dCBjbHVzdGVyCi0gKiBOXzEgYnl0ZXM6IGRhdGEgb2YgbmV4dCBjbHVzZXQKLSAqIDIgYnl0ZXM6IGJ5dGUgY291bnQgTl8yIG9mIG5leHQgY2x1c3RlcgotICogTl8yIGJ5dGVzOiAuLi4gIAotICoKLSAqIE5vdGUgdGhhdCB0aGUgYE4nIGJ5dGUgY291bnQgYWNjb3VudHMgb25seSBmb3IgdGhlIGJ5dGVzIHRoYXQgaW4gdGhlCi0gKiBjdXJyZW50IHNlZ21lbnQgaWYgdGhlIGNsdXN0ZXIgc3BhbnMgdG8gdGhlIG5leHQgc2VnbWVudC4KLSAqLwotCi10eXBlZGVmIHN0cnVjdAotewotCWludCBjbXByX3BvczsgICAgICAgICAgICAgLyogYWN0dWFsIHBvc2l0aW9uIGluIGNvbXByZXNzaW9uIGJ1ZmZlciAqLwotCWludCBjbXByX3N6OyAgICAgICAgICAgICAgLyogd2hhdCBpcyBsZWZ0IGluIHRoZSBjb21wcmVzc2lvbiBidWZmZXIKLQkJCQkgICAqIHdoZW4gY29weWluZyB0aGUgY29tcHJlc3NlZCBkYXRhIHRvIHRoZQotCQkJCSAgICogZGVibG9jayBidWZmZXIKLQkJCQkgICAqLwotCXVuc2lnbmVkIGludCBmaXJzdF9ibG9jazsgLyogbG9jYXRpb24gb2YgaGVhZGVyIGluZm9ybWF0aW9uIGluCi0JCQkJICAgKiB0aGlzIHNlZ21lbnQKLQkJCQkgICAqLwotCXVuc2lnbmVkIGludCBjb3VudDsgICAgICAgLyogYW1vdW50IG9mIGRhdGEgb2YgY3VycmVudCBibG9jawotCQkJCSAgICogY29udGFpbmVkIGluIGN1cnJlbnQgc2VnbWVudCAKLQkJCQkgICAqLwotCXVuc2lnbmVkIGludCBvZmZzZXQ7ICAgICAgLyogb2Zmc2V0IGluIGN1cnJlbnQgc2VnbWVudCAqLwotCXVuc2lnbmVkIGludCBzcGFuczoxOyAgICAgLyogbWlnaHQgY29udGludWUgaW4gbmV4dCBzZWdtZW50ICovCi0JdW5zaWduZWQgaW50IHVuY21wcjsgICAgICAvKiAweDgwMDAgaWYgdGhpcyBibG9jayBjb250YWlucwotCQkJCSAgICogdW5jb21wcmVzc2VkIGRhdGEgCi0JCQkJICAgKi8KLQlfX3M2NCBmb2ZmczsgICAgICAgICAgICAgIC8qIGZpbGUgc2V0IGJ5dGUgb2Zmc2V0LCBzYW1lIGFzIGluIAotCQkJCSAgICogY29tcHJlc3Npb24gbWFwIHNlZ21lbnQKLQkJCQkgICAqLwotfSBjbXByX2luZm87Ci0KLXN0YXRpYyBjbXByX2luZm8gY3NlZzsgLyogc3RhdGljIGRhdGEuIE11c3QgYmUga2VwdCB1cHRvZGF0ZSBhbmQgc2hhcmVkIGJ5IAotCQkJKiByZWFkLCB3cml0ZSBhbmQgc2VlayBmdW5jdGlvbnMKLQkJCSovCi0KLSNkZWZpbmUgRFVNUF9DTVBSX0lORk8obGV2ZWwsIG1zZywgaW5mbykJCQkJXAotCVRSQUNFKGxldmVsLCBtc2cgIlxuIgkJCQkJCVwKLQkgICAgICBLRVJOX0lORk8gImNtcHJfcG9zICAgOiAlZFxuIgkJCQlcCi0JICAgICAgS0VSTl9JTkZPICJjbXByX3N6ICAgIDogJWRcbiIJCQkJXAotCSAgICAgIEtFUk5fSU5GTyAiZmlyc3RfYmxvY2s6ICVkXG4iCQkJCVwKLQkgICAgICBLRVJOX0lORk8gImNvdW50ICAgICAgOiAlZFxuIgkJCQlcCi0JICAgICAgS0VSTl9JTkZPICJvZmZzZXQgICAgIDogJWRcbiIJCQkJXAotCSAgICAgIEtFUk5fSU5GTyAic3BhbnMgICAgICA6ICVkXG4iCQkJCVwKLQkgICAgICBLRVJOX0lORk8gInVuY21wciAgICAgOiAweCUwNHhcbiIJCQkJXAotCSAgICAgIEtFUk5fSU5GTyAiZm9mZnMgICAgICA6ICIgTExfWCwJCQkJXAotCSAgICAgIChpbmZvKS0+Y21wcl9wb3MsIChpbmZvKS0+Y21wcl9zeiwgKGluZm8pLT5maXJzdF9ibG9jaywJXAotCSAgICAgIChpbmZvKS0+Y291bnQsIChpbmZvKS0+b2Zmc2V0LCAoaW5mbyktPnNwYW5zID09IDEsCVwKLQkgICAgICAoaW5mbyktPnVuY21wciwgTEwoKGluZm8pLT5mb2ZmcykpCi0KLS8qICAgZGlzcGF0Y2ggY29tcHJlc3Npb24gc2VnbWVudCBpbmZvLCByZXR1cm4gZXJyb3IgY29kZQotICogIAotICogICBhZnRlcndhcmRzLCBjc2VnLT5vZmZzZXQgcG9pbnRzIHRvIHN0YXJ0IG9mIGRhdGEgb2YgdGhlIE5FWFQKLSAqICAgY29tcHJlc3NlZCBibG9jaywgYW5kIGNzZWctPmNvdW50IGNvbnRhaW5zIHRoZSBhbW91bnQgb2YgZGF0YQotICogICBsZWZ0IGluIHRoZSBhY3R1YWwgY29tcHJlc3NlZCBibG9jay4gY3NlZy0+c3BhbnMgaXMgc2V0IHRvIDEgaWYKLSAqICAgdGhlIGJsb2NrIGlzIGNvbnRpbnVlZCBpbiB0aGUgZm9sbG93aW5nIHNlZ21lbnQuIE90aGVyd2lzZSBpdCBpcwotICogICBzZXQgdG8gMC4gCi0gKi8KLXN0YXRpYyBpbnQgZ2V0X2NzZWcgKGNtcHJfaW5mbyAqY2luZm8sIGNvbnN0IF9fdTggKmJ1ZmYsIAotCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzZWdfc3osCi0JCSAgICAgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotIAljaW5mby0+Zmlyc3RfYmxvY2sgPSBHRVQyKGJ1ZmYsIDApOwotCWlmIChjaW5mby0+Zmlyc3RfYmxvY2sgPT0gMCkgeyAvKiBkYXRhIHNwYW5zIHRvIG5leHQgc2VnbWVudCAqLwotCQljaW5mby0+Y291bnQgID0gc2VnX3N6IC0gc2l6ZW9mKF9fdTE2KTsKLQkJY2luZm8tPm9mZnNldCA9IHNlZ19zejsKLQkJY2luZm8tPnNwYW5zID0gMTsKLQl9IGVsc2UgeyAvKiBjbHVzdGVyIGRlZmluZXRlbHkgZW5kcyBpbiB0aGlzIHNlZ21lbnQgKi8KLQkJaWYgKGNpbmZvLT5maXJzdF9ibG9jayA+IHNlZ19zeikgewotCQkJLyogZGF0YSBjb3JydXB0ZWQgKi8KLQkJCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLCAiY29ycnVwdGVkIGRhdGE6XG4iCi0JCQkJICAgIEtFUk5fSU5GTyAic2VnbWVudCBzaXplOiAlZFxuIgotCQkJCSAgICBLRVJOX0lORk8gImZpcnN0IGJsb2NrIDogJWQiLAotCQkJCSAgICBzZWdfc3osIGNpbmZvLT5maXJzdF9ibG9jayk7Ci0JCX0KLQkgICAgICAgIGNpbmZvLT5jb3VudCAgPSBjaW5mby0+Zmlyc3RfYmxvY2sgLSBzaXplb2YoX191MTYpOwotCQljaW5mby0+b2Zmc2V0ID0gY2luZm8tPmZpcnN0X2Jsb2NrOwotCQljaW5mby0+c3BhbnMgPSAwOwotCX0KLQkvKiBub3cgZ2V0IHRoZSBvZmZzZXQgdGhlIGZpcnN0IGJsb2NrIHNob3VsZCBoYXZlIGluIHRoZQotCSAqIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KLQkgKgotCSAqIEZvciB0aGlzIG1hZ2ljIGAxOCcgcmVmZXIgdG8gQ1JGLTMgc3RhbmRhcmQgb3IgUUlDLTgwTUMsCi0JICogUmV2LiBLLiAgCi0JICovCi0JaWYgKChzZWdfc3ogLSBjaW5mby0+b2Zmc2V0KSA+IDE4KSB7Ci0JCWlmICh2b2x1bWUtPnFpYzExMykgeyAvKiA+IHJldmlzaW9uIEsgKi8KLQkJCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAiTmV3IFFJQy0xMTMgY29tcGxpYW5jZSIpOwotCQkJY2luZm8tPmZvZmZzID0gR0VUOChidWZmLCBjaW5mby0+b2Zmc2V0KTsKLQkJCWNpbmZvLT5vZmZzZXQgKz0gc2l6ZW9mKF9fczY0KTsgCi0JCX0gZWxzZSB7Ci0JCQlUUkFDRSgvKiBmdF90X2RhdGFfZmxvdyAqLyBmdF90X25vaXNlLCAicHJlIFFJQy0xMTMgdmVyc2lvbiIpOwotCQkJY2luZm8tPmZvZmZzICAgPSAoX19zNjQpR0VUNChidWZmLCBjaW5mby0+b2Zmc2V0KTsKLQkJCWNpbmZvLT5vZmZzZXQgKz0gc2l6ZW9mKF9fdTMyKTsgCi0JCX0KLQl9Ci0JaWYgKGNpbmZvLT5mb2ZmcyA+IHZvbHVtZS0+c2l6ZSkgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwgIkluY29uc2lzdGVuY3k6XG4iCi0JCQkgICAgS0VSTl9JTkZPICJvZmZzZXQgaW4gY3VycmVudCB2b2x1bWU6ICVkXG4iCi0JCQkgICAgS0VSTl9JTkZPICJzaXplIG9mIGN1cnJlbnQgdm9sdW1lICA6ICVkIiwKLQkJCSAgICAoaW50KShjaW5mby0+Zm9mZnM+PjEwKSwgKGludCkodm9sdW1lLT5zaXplPj4xMCkpOwotCX0KLQlpZiAoY2luZm8tPmNtcHJfcG9zICsgY2luZm8tPmNvdW50ID4gdm9sdW1lLT5ibGtfc3opIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsICJJbmNvbnNpc3RlbmN5OlxuIgotCQkJICAgIEtFUk5fSU5GTyAiYmxvY2sgc2l6ZSA6ICVkXG4iCi0JCQkgICAgS0VSTl9JTkZPICJkYXRhIHJlY29yZDogJWQiLAotCQkJICAgIHZvbHVtZS0+YmxrX3N6LCBjaW5mby0+Y21wcl9wb3MgKyBjaW5mby0+Y291bnQpOwotCX0KLQlEVU1QX0NNUFJfSU5GTyhmdF90X25vaXNlIC8qIGZ0X3RfYW55ICovLCAiIiwgY2luZm8pOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogIFRoaXMgb25lIGlzIGNhbGxlZCwgd2hlbiBhIG5ldyBjbHVzdGVyIHN0YXJ0cyBpbiBzYW1lIHNlZ21lbnQuCi0gKiAgCi0gKiAgTm90ZTogaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2x1c3RlciBpbiB0aGUgY3VycmVudCBzZWdtZW50LCB3ZSBtdXN0Ci0gKiAgbm90IGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmUgdGhhbiAxOCBieXRlcyBhdmFpbGFibGUgYmVjYXVzZQotICogIHRoaXMgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSBpbiBnZXRfY3NlZygpIGFuZCB0aGVyZSBtYXkgYmUgbGVzcwotICogIHRoYW4gMTggYnl0ZXMgYXZhaWxhYmxlIGR1ZSB0byBoZWFkZXIgaW5mb3JtYXRpb24uCi0gKiAKLSAqLwotc3RhdGljIHZvaWQgZ2V0X25leHRfY2x1c3RlcihjbXByX2luZm8gKmNsdXN0ZXIsIGNvbnN0IF9fdTggKmJ1ZmYsIAotCQkJICAgICBjb25zdCBpbnQgc2VnX3N6LCBjb25zdCBpbnQgZmluaXNoKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHNlZ19zeiAtIGNsdXN0ZXItPm9mZnNldCA+IDE4IHx8IGNsdXN0ZXItPmZvZmZzICE9IDApIHsKLQkJY2x1c3Rlci0+Y291bnQgICA9IEdFVDIoYnVmZiwgY2x1c3Rlci0+b2Zmc2V0KTsKLQkJY2x1c3Rlci0+dW5jbXByICA9IGNsdXN0ZXItPmNvdW50ICYgMHg4MDAwOwotCQljbHVzdGVyLT5jb3VudCAgLT0gY2x1c3Rlci0+dW5jbXByOwotCQljbHVzdGVyLT5vZmZzZXQgKz0gc2l6ZW9mKF9fdTE2KTsKLQkJY2x1c3Rlci0+Zm9mZnMgICA9IDA7Ci0JCWlmICgoY2x1c3Rlci0+b2Zmc2V0ICsgY2x1c3Rlci0+Y291bnQpIDwgc2VnX3N6KSB7Ci0JCQljbHVzdGVyLT5zcGFucyA9IDA7Ci0JCX0gZWxzZSBpZiAoY2x1c3Rlci0+b2Zmc2V0ICsgY2x1c3Rlci0+Y291bnQgPT0gc2VnX3N6KSB7Ci0JCQljbHVzdGVyLT5zcGFucyA9ICFmaW5pc2g7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBlaXRoZXIgYW4gZXJyb3Igb3IgYSB2b2x1bWUgd3JpdHRlbiBieSBhbiAKLQkJCSAqIG9sZCB2ZXJzaW9uLiBJZiB0aGlzIGlzIGEgZGF0YSBlcnJvciwgdGhlbiB3ZSdsbAotCQkJICogY2F0Y2ggaXQgbGF0ZXIuCi0JCQkgKi8KLQkJCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAiRWl0aGVyIGVycm9yIG9yIG9sZCB2b2x1bWUiKTsKLQkJCWNsdXN0ZXItPnNwYW5zID0gMTsKLQkJCWNsdXN0ZXItPmNvdW50ID0gc2VnX3N6IC0gY2x1c3Rlci0+b2Zmc2V0OwotCQl9Ci0JfSBlbHNlIHsKLQkJY2x1c3Rlci0+Y291bnQgPSAwOwotCQljbHVzdGVyLT5zcGFucyA9IDA7Ci0JCWNsdXN0ZXItPmZvZmZzID0gMDsKLQl9Ci0JRFVNUF9DTVBSX0lORk8oZnRfdF9ub2lzZSAvKiBmdF90X2FueSAqLyAsICIiLCBjbHVzdGVyKTsKLQlUUkFDRV9FWElUOwotfQotCi1zdGF0aWMgdm9pZCB6ZnRjX2xvY2sodm9pZCkKLXsKLX0KLQotLyogIHRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIGZvciB6ZnRhcGVfcmVzZXRfcG9zaXRpb24gaW4gemZ0YXBlLWlvLmMgCi0gKi8KLXN0YXRpYyB2b2lkIHpmdGNfcmVzZXQodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCW1lbXNldCgodm9pZCAqKSZjc2VnLCAnXDAnLCBzaXplb2YoY3NlZykpOwotCXpmdGNfc3RhdHMoKTsKLQlUUkFDRV9FWElUOwotfQotCi1zdGF0aWMgaW50IGNtcHJfbWVtX2luaXRpYWxpemVkID0gMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb2NfYmxrc3ogPSAwOwotCi1zdGF0aWMgaW50IHpmdF9hbGxvY2F0ZV9jbXByX21lbSh1bnNpZ25lZCBpbnQgYmxrc3opCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlpZiAoY21wcl9tZW1faW5pdGlhbGl6ZWQgJiYgYmxrc3ogPT0gYWxsb2NfYmxrc3opIHsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLQlUUkFDRV9DQVRDSCh6ZnRfdm1hbGxvY19vbmNlKCZ6ZnRjX3dya19tZW0sIENNUFJfV1JLX01FTV9TSVpFKSwKLQkJICAgIHpmdGNfY2xlYW51cCgpKTsKLQlUUkFDRV9DQVRDSCh6ZnRfdm1hbGxvY19hbHdheXMoJnpmdGNfYnVmLCBibGtzeiArIENNUFJfT1ZFUlJVTiksCi0JCSAgICB6ZnRjX2NsZWFudXAoKSk7Ci0JYWxsb2NfYmxrc3ogPSBibGtzejsKLQlUUkFDRV9DQVRDSCh6ZnRfdm1hbGxvY19hbHdheXMoJnpmdGNfc2NyYXRjaF9idWYsIGJsa3N6K0NNUFJfT1ZFUlJVTiksCi0JCSAgICB6ZnRjX2NsZWFudXAoKSk7Ci0JY21wcl9tZW1faW5pdGlhbGl6ZWQgPSAxOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotc3RhdGljIHZvaWQgemZ0Y19jbGVhbnVwKHZvaWQpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQl6ZnRfdmZyZWUoJnpmdGNfd3JrX21lbSwgQ01QUl9XUktfTUVNX1NJWkUpOwotCXpmdF92ZnJlZSgmemZ0Y19idWYsIGFsbG9jX2Jsa3N6ICsgQ01QUl9PVkVSUlVOKTsKLQl6ZnRfdmZyZWUoJnpmdGNfc2NyYXRjaF9idWYsIGFsbG9jX2Jsa3N6ICsgQ01QUl9PVkVSUlVOKTsKLQljbXByX21lbV9pbml0aWFsaXplZCA9IGFsbG9jX2Jsa3N6ID0gMDsKLQlUUkFDRV9FWElUOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogIFRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucyAiZnRhcGVfY29tcHJlc3MoKSIgYW5kICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgImZ0YXBlX3VuY29tcHJlc3MoKSIgYXJlIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGFjdHVhbCBjb21wcmVzc2lvbiAgICAgICAgICoKLSAqICBhbGdvcml0aG0gKGkuZS4gdGhleSBhcmUgY2FsbGluZyB0aGUgImNvbXByZXNzKCkiIGZ1bmN0aW9uIGZyb20gICAgICAgICAgKgotICogIHRoZSBsenJ3MyBwYWNrYWdlIGZvciBub3cpLiBUaGVzZSByb3V0aW5lcyBjb3VsZCBxdWl0ZSBlYXNpbHkgYmUgICAgICAgICAqCi0gKiAgY2hhbmdlZCB0byBhZG9wdCBhbm90aGVyIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGx6cnczLCAgICAgICAgICoKLSAqICB3aGljaCBjdXJyZW50bHkgaXMgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIGNhbGxlZCBieSB6ZnRfY29tcHJlc3Nfd3JpdGUoKSB0byBwZXJmb3JtIHRoZSBjb21wcmVzc2lvbi4gTXVzdAotICogcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEuCi0gKgotICogTk9URTogVGhlIHNpemUgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBzaG91bGQgbm90IGV4Y2VlZCB0aGUgc2l6ZSBvZgotICogICAgICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhLiBNb3N0IGNvbXByZXNzaW9uIGFsZ29yaXRobXMgaGF2ZSBtZWFucwotICogICAgICAgdG8gc3RvcmUgZGF0YSB1bmNoYW5nZWQgaWYgdGhlICJjb21wcmVzc2VkIiBkYXRhIGFtb3VudCB3b3VsZAotICogICAgICAgZXhjZWVkIHRoZSBvcmlnaW5hbCBvbmUuIE1vc3RseSB0aGlzIGlzIGRvbmUgYnkgc3RvcmluZyBzb21lCi0gKiAgICAgICBmbGFnLWJ5dGVzIGluIGZyb250IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgdG8gaW5kaWNhdGUgaWYgaXQKLSAqICAgICAgIGlzIGNvbXByZXNzZWQgb3Igbm90LiBUaHVzIHRoZSB3b3JzdCBjb21wcmVzc2lvbiByZXN1bHQKLSAqICAgICAgIGxlbmd0aCBpcyB0aGUgb3JpZ2luYWwgbGVuZ3RoIHBsdXMgdGhvc2UgZmxhZy1ieXRlcy4KLSAqCi0gKiAgICAgICBXZSBkb24ndCB3YW50IHRoYXQsIGFzIHRoZSBRSUMtODAgc3RhbmRhcmQgcHJvdmlkZXMgYSBtZWFucwotICogICAgICAgb2YgbWFya2luZyB1bmNvbXByZXNzZWQgYmxvY2tzIGJ5IHNpbXBseSBzZXR0aW5nIGJpdCAxNSBvZgotICogICAgICAgdGhlIGNvbXByZXNzZWQgYmxvY2sncyBsZW5ndGguIFRodXMgYSBjb21wZXNzZWQgYmxvY2sgY2FuCi0gKiAgICAgICBoYXZlIGF0IG1vc3QgYSBsZW5ndGggb2YgMl4xNS0xIGJ5dGVzLiBUaGUgUUlDLTgwIHN0YW5kYXJkCi0gKiAgICAgICByZXN0cmljdHMgdGhlIGJsb2NrLWxlbmd0aCBldmVuIGZ1cnRoZXIsIGFsbG93aW5nIG9ubHkgMjlrIC0KLSAqICAgICAgIDYgYnl0ZXMuCi0gKgotICogICAgICAgQ3VycmVudGx5LCB0aGUgbWF4aW11bSBibG9ja3NpemUgdXNlZCBieSB6ZnRhcGUgaXMgMjhrLgotICoKLSAqICAgICAgIEluIHNob3J0OiBkb24ndCBleGNlZWQgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQtcGFja2FnZSwgc2V0Ci0gKiAgICAgICBiaXQgMTUgb2YgdGhlIGNvbXByZXNzZWQgc2l6ZSB0byAxIGlmIHlvdSBoYXZlIGNvcGllZCBkYXRhCi0gKiAgICAgICBpbnN0ZWFkIG9mIGNvbXByZXNzaW5nIGl0LgotICovCi1zdGF0aWMgaW50IHpmdF9jb21wcmVzcyhfX3U4ICppbl9idWZmZXIsIHVuc2lnbmVkIGludCBpbl9zeiwgX191OCAqb3V0X2J1ZmZlcikKLXsgCi0JX19zMzIgY29tcHJlc3NlZF9zejsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQotCWx6cnczX2NvbXByZXNzKENPTVBSRVNTX0FDVElPTl9DT01QUkVTUywgemZ0Y193cmtfbWVtLAotCQkgICAgICAgaW5fYnVmZmVyLCBpbl9zeiwgb3V0X2J1ZmZlciwgJmNvbXByZXNzZWRfc3opOwotCWlmIChUUkFDRV9MRVZFTCA+PSBmdF90X2luZm8pIHsKLQkJLyogIHRoZSBjb21waWxlciB3aWxsIG9wdGltaXplIHRoaXMgYXdheSB3aGVuCi0JCSAqICBjb21waWxlZCB3aXRoIE5PX1RSQUNFX0FUX0FMTCBvcHRpb24KLQkJICovCi0JCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAiXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiYmVmb3JlIGNvbXByZXNzaW9uOiAlZCBieXRlc1xuIgotCQkgICAgICBLRVJOX0lORk8gImFmdGVyIGNvbXByZXNpc29uIDogJWQgYnl0ZXMiLCAKLQkJICAgICAgaW5fc3osIAotCQkgICAgICAoaW50KShjb21wcmVzc2VkX3N6IDwgMCAKLQkJICAgICAgPyAtY29tcHJlc3NlZF9zeiA6IGNvbXByZXNzZWRfc3opKTsKLQkJLyogIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcwotCQkgKi8KLQkJemZ0Y193cl9jb21wcmVzc2VkICAgKz0gKGNvbXByZXNzZWRfc3ogPCAwIAotCQkJCQkgICA/IC1jb21wcmVzc2VkX3N6IDogY29tcHJlc3NlZF9zeik7Ci0JCXpmdGNfd3JfdW5jb21wcmVzc2VkICs9IGluX3N6OwotCX0KLQlUUkFDRV9FWElUIChpbnQpY29tcHJlc3NlZF9zejsKLX0KLQotLyogY2FsbGVkIGJ5IHpmdF9jb21wcmVzc19yZWFkKCkgdG8gZGVjb21wcmVzcyB0aGUgZGF0YS4gTXVzdAotICogcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YSBmb3Igc2FuaXR5IGNoZWNrcwotICogKGNvbXBhcmVkIHdpdGggemZ0X2Jsa19zeikKLSAqCi0gKiBOT1RFOiBSZWFkIHRoZSBub3RlIGZvciB6ZnRfY29tcHJlc3MoKSBhYm92ZSEgIElmIGJpdCAxNSBvZiB0aGUKLSAqICAgICAgIHBhcmFtZXRlciBpbl9zeiBpcyBzZXQsIHRoZW4gdGhlIGRhdGEgaW4gaW5fYnVmZmVyIGlzbid0Ci0gKiAgICAgICBjb21wcmVzc2VkLCB3aGljaCBtdXN0IGJlIGhhbmRsZWQgYnkgdGhlIHVuLWNvbXByZXNzaW9uCi0gKiAgICAgICBhbGdvcml0aG0uIChJIGNoYW5nZWQgbHpydzMgdG8gaGFuZGxlIHRoaXMuKQotICoKLSAqICBUaGUgcGFyYW1ldGVyIG1heF9vdXRfc3ogaXMgbmVlZGVkIHRvIHByZXZlbnQgYnVmZmVyIG92ZXJydW5zIHdoZW4gCi0gKiAgdW5jb21wcmVzc2luZyBjb3JydXB0IGRhdGEuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgemZ0X3VuY29tcHJlc3MoX191OCAqaW5fYnVmZmVyLCAKLQkJCQkgICBpbnQgaW5fc3osIAotCQkJCSAgIF9fdTggKm91dF9idWZmZXIsCi0JCQkJICAgdW5zaWduZWQgaW50IG1heF9vdXRfc3opCi17IAotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWx6cnczX2NvbXByZXNzKENPTVBSRVNTX0FDVElPTl9ERUNPTVBSRVNTLCB6ZnRjX3dya19tZW0sCi0JCSAgICAgICBpbl9idWZmZXIsIChfX3MzMilpbl9zeiwKLQkJICAgICAgIG91dF9idWZmZXIsIChfX3UzMiAqKSZtYXhfb3V0X3N6KTsKLQkKLQlpZiAoVFJBQ0VfTEVWRUwgPj0gZnRfdF9pbmZvKSB7Ci0JCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAiXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiYmVmb3JlIGRlY29tcHJlc3Npb246ICVkIGJ5dGVzXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiYWZ0ZXIgZGVjb21wcmVzc2lvbiA6ICVkIGJ5dGVzIiwgCi0JCSAgICAgIGluX3N6IDwgMCA/IC1pbl9zeiA6IGluX3N6LChpbnQpbWF4X291dF9zeik7Ci0JCS8qICBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMKLQkJICovCi0JCXpmdGNfcmRfY29tcHJlc3NlZCAgICs9IGluX3N6IDwgMCA/IC1pbl9zeiA6IGluX3N6OwotCQl6ZnRjX3JkX3VuY29tcHJlc3NlZCArPSBtYXhfb3V0X3N6OwotCX0KLQlUUkFDRV9FWElUICh1bnNpZ25lZCBpbnQpbWF4X291dF9zejsKLX0KLQotLyogcHJpbnQgc29tZSBzdGF0aXN0aWNzIGFib3V0IHRoZSBlZmZpY2llbmN5IG9mIHRoZSBjb21wcmVzc2lvbiB0bwotICogdGhlIGtlcm5lbCBsb2cgCi0gKi8KLXN0YXRpYyB2b2lkIHpmdGNfc3RhdHModm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChUUkFDRV9MRVZFTCA8IGZ0X3RfaW5mbykgewotCQlUUkFDRV9FWElUOwotCX0KLQlpZiAoemZ0Y193cl91bmNvbXByZXNzZWQgIT0gMCkgewotCQlpZiAoemZ0Y193cl9jb21wcmVzc2VkID4gKDE8PDE0KSkgewotCQkJVFJBQ0UoZnRfdF9pbmZvLCAiY29tcHJlc3Npb24gc3RhdGlzdGljcyAod3JpdGluZyk6XG4iCi0JCQkgICAgICBLRVJOX0lORk8gIiBjb21wci4vdW5jbXByLiAgIDogJTNkICUlIiwKLQkJCSAgICAgICgoKHpmdGNfd3JfY29tcHJlc3NlZD4+MTApICogMTAwKQotCQkJICAgICAgIC8gKHpmdGNfd3JfdW5jb21wcmVzc2VkPj4xMCkpKTsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3RfaW5mbywgImNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKHdyaXRpbmcpOlxuIgotCQkJICAgICAgS0VSTl9JTkZPICIgY29tcHIuL3VuY21wci4gICA6ICUzZCAlJSIsCi0JCQkgICAgICAoKHpmdGNfd3JfY29tcHJlc3NlZCAqIDEwMCkKLQkJCSAgICAgICAvIHpmdGNfd3JfdW5jb21wcmVzc2VkKSk7Ci0JCX0KLQl9Ci0JaWYgKHpmdGNfcmRfdW5jb21wcmVzc2VkICE9IDApIHsKLQkJaWYgKHpmdGNfcmRfY29tcHJlc3NlZCA+ICgxPDwxNCkpIHsKLQkJCVRSQUNFKGZ0X3RfaW5mbywgImNvbXByZXNzaW9uIHN0YXRpc3RpY3MgKHJlYWRpbmcpOlxuIgotCQkJICAgICAgS0VSTl9JTkZPICIgY29tcHIuL3VuY21wci4gICA6ICUzZCAlJSIsCi0JCQkgICAgICAoKCh6ZnRjX3JkX2NvbXByZXNzZWQ+PjEwKSAqIDEwMCkKLQkJCSAgICAgICAvICh6ZnRjX3JkX3VuY29tcHJlc3NlZD4+MTApKSk7Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRShmdF90X2luZm8sICJjb21wcmVzc2lvbiBzdGF0aXN0aWNzIChyZWFkaW5nKTpcbiIKLQkJCSAgICAgIEtFUk5fSU5GTyAiIGNvbXByLi91bmNtcHIuICAgOiAlM2QgJSUiLAotCQkJICAgICAgKCh6ZnRjX3JkX2NvbXByZXNzZWQgKiAxMDApCi0JCQkgICAgICAgLyB6ZnRjX3JkX3VuY29tcHJlc3NlZCkpOwotCQl9Ci0JfQotCS8qIG9ubHkgcHJpbnQgaXQgb25jZTogKi8KLQl6ZnRjX3dyX3VuY29tcHJlc3NlZCA9IAotCQl6ZnRjX3dyX2NvbXByZXNzZWQgID0KLQkJemZ0Y19yZF91bmNvbXByZXNzZWQgPQotCQl6ZnRjX3JkX2NvbXByZXNzZWQgICA9IDA7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogc3RhcnQgbmV3IGNvbXByZXNzZWQgYmxvY2sgCi0gKi8KLXN0YXRpYyBpbnQgc3RhcnRfbmV3X2NzZWcoY21wcl9pbmZvICpjbHVzdGVyLCAKLQkJCSAgY2hhciAqZHN0X2J1ZiwgCi0JCQkgIGNvbnN0IHpmdF9wb3NpdGlvbiAqcG9zLAotCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgYmxrX3N6LAotCQkJICBjb25zdCBjaGFyICpzcmNfYnVmLAotCQkJICBjb25zdCBpbnQgdGhpc19zZWdzX3N6LAotCQkJICBjb25zdCBpbnQgcWljMTEzKQotewotCWludCBzaXplX2xlZnQ7Ci0JaW50IGNwX2NudDsKLQlpbnQgYnVmX3BvczsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCXNpemVfbGVmdCA9IHRoaXNfc2Vnc19zeiAtIHNpemVvZihfX3UxNikgLSBjbHVzdGVyLT5jbXByX3N6OwotCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCJcbiIgCi0JICAgICAgS0VSTl9JTkZPICJzZWdtZW50IHNpemUgICA6ICVkXG4iCi0JICAgICAgS0VSTl9JTkZPICJjb21wcmVzc2VkX3N6OiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAic2l6ZV9sZWZ0ICAgICAgOiAlZCIsCi0JICAgICAgdGhpc19zZWdzX3N6LCBjbHVzdGVyLT5jbXByX3N6LCBzaXplX2xlZnQpOwotCWlmIChzaXplX2xlZnQgPiAxOCkgeyAvKiBzdGFydCBhIG5ldyBjbHVzZXRlciAqLwotCQljcF9jbnQgPSBjbHVzdGVyLT5jbXByX3N6OwotCQljbHVzdGVyLT5jbXByX3N6ID0gMDsKLQkJYnVmX3BvcyA9IGNwX2NudCArIHNpemVvZihfX3UxNik7Ci0JCVBVVDIoZHN0X2J1ZiwgMCwgYnVmX3Bvcyk7Ci0KLQkJaWYgKHFpYzExMykgewotCQkJX19zNjQgZm9mZnMgPSBwb3MtPnZvbHVtZV9wb3M7Ci0JCQlpZiAoY3BfY250KSBmb2ZmcyArPSAoX19zNjQpYmxrX3N6OwotCi0JCQlUUkFDRShmdF90X2RhdGFfZmxvdywgIm5ldyBzdHlsZSBRSUMtMTEzIGhlYWRlciIpOwotCQkJUFVUOChkc3RfYnVmLCBidWZfcG9zLCBmb2Zmcyk7Ci0JCQlidWZfcG9zICs9IHNpemVvZihfX3M2NCk7Ci0JCX0gZWxzZSB7Ci0JCQlfX3UzMiBmb2ZmcyA9IChfX3UzMilwb3MtPnZvbHVtZV9wb3M7Ci0JCQlpZiAoY3BfY250KSBmb2ZmcyArPSAoX191MzIpYmxrX3N6OwotCQkJCi0JCQlUUkFDRShmdF90X2RhdGFfZmxvdywgIm9sZCBzdHlsZSBRSUMtODBNQyBoZWFkZXIiKTsKLQkJCVBVVDQoZHN0X2J1ZiwgYnVmX3BvcywgZm9mZnMpOwotCQkJYnVmX3BvcyArPSBzaXplb2YoX191MzIpOwotCQl9Ci0JfSBlbHNlIGlmIChzaXplX2xlZnQgPj0gMCkgewotCQljcF9jbnQgPSBjbHVzdGVyLT5jbXByX3N6OwotCQljbHVzdGVyLT5jbXByX3N6ID0gMDsKLQkJYnVmX3BvcyA9IGNwX2NudCArIHNpemVvZihfX3UxNik7Ci0JCVBVVDIoZHN0X2J1ZiwgMCwgYnVmX3Bvcyk7ICAKLQkJLyogemVybyB1bnVzZWQgcGFydCBvZiBzZWdtZW50LiAqLwotCQltZW1zZXQoZHN0X2J1ZiArIGJ1Zl9wb3MsICdcMCcsIHNpemVfbGVmdCk7Ci0JCWJ1Zl9wb3MgPSB0aGlzX3NlZ3Nfc3o7Ci0JfSBlbHNlIHsgLyogbmVlZCBlbnRpcmUgc2VnbWVudCBhbmQgbW9yZSBzcGFjZSAqLwotCQlQVVQyKGRzdF9idWYsIDAsIDApOyAKLQkJY3BfY250ID0gdGhpc19zZWdzX3N6IC0gc2l6ZW9mKF9fdTE2KTsKLQkJY2x1c3Rlci0+Y21wcl9zeiAgLT0gY3BfY250OwotCQlidWZfcG9zID0gdGhpc19zZWdzX3N6OwotCX0KLQltZW1jcHkoZHN0X2J1ZiArIHNpemVvZihfX3UxNiksIHNyY19idWYgKyBjbHVzdGVyLT5jbXByX3BvcywgY3BfY250KTsKLQljbHVzdGVyLT5jbXByX3BvcyArPSBjcF9jbnQ7Ci0JVFJBQ0VfRVhJVCBidWZfcG9zOwotfQotCi0vKiByZXR1cm4tdmFsdWU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVtb3ZlZCBmcm9tIHRoZSB1c2VyLWJ1ZmZlcgotICogICAgICAgICAgICAgICBgc3JjX2J1Zicgb3IgZXJyb3IgY29kZQotICoKLSAqICBpbnQgKndyaXRlX2NudCAgICAgICAgICAgOiBob3cgbXVjaCBhY3R1YWxseSBoYXMgYmVlbiBtb3ZlZCB0byB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfYnVmLiBOZWVkIG5vdCBiZSBpbml0aWFsaXplZCB3aGVuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0dXJucyB3aXRoIGFuIGVycm9yIGNvZGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmVnYXRpdiByZXR1cm4gdmFsdWUpIAotICogIF9fdTggKmRzdF9idWYgICAgICAgICAgICA6IGtlcm5lbCBzcGFjZSBidWZmZXIgd2hlcmUgdGhlIGhhcyB0byBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZCB0by4gVGhlIGNvbnRlbnRzIG9mIHRoaXMgYnVmZmVycwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvZXMgdG8gYSBzcGVjaWZpYyBzZWdtZW50LgotICogIGNvbnN0IGludCBzZWdfc3ogICAgICAgICA6IHRoZSBzaXplIG9mIHRoZSBzZWdtZW50IGRzdF9idWYgd2lsbCBiZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZCB0by4KLSAqICBjb25zdCB6ZnRfcG9zaXRpb24gKnBvcyAgOiBzdHJ1Y3QgY29udGFpbmluZyB0aGUgY29vcmRpbmF0ZXMgaW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCB2b2x1bWUgKGJ5dGUgcG9zaXRpb24sCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCBpZCBvZiBjdXJyZW50IHNlZ21lbnQgZXRjKQotICogIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWU6IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHZvbHVtZSwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGV0Yy4KLSAqICBjb25zdCBfX3U4ICpzcmNfYnVmICAgICAgOiB1c2VyIHNwYWNlIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgdGhlIHVzZXIgd2FudHMgdG8gYmUgd3JpdHRlbiB0bwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcGUuCi0gKiAgY29uc3QgaW50IHJlcV9sZW4gICAgICAgIDogdGhlIGFtb3VudCBvZiBkYXRhIHRoZSB1c2VyIHdhbnRzIHRvIGJlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiB0byB0YXBlLgotICovCi1zdGF0aWMgaW50IHpmdGNfd3JpdGUoaW50ICp3cml0ZV9jbnQsCi0JCSAgICAgIF9fdTggKmRzdF9idWYsIGNvbnN0IGludCBzZWdfc3osCi0JCSAgICAgIGNvbnN0IF9fdTggX191c2VyICpzcmNfYnVmLCBjb25zdCBpbnQgcmVxX2xlbiwKLQkJICAgICAgY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MsIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUpCi17Ci0JaW50IHJlcV9sZW5fbGVmdCA9IHJlcV9sZW47Ci0JaW50IHJlc3VsdDsKLQlpbnQgbGVuX2xlZnQ7Ci0JaW50IGJ1Zl9wb3Nfd3JpdGUgPSBwb3MtPnNlZ19ieXRlX3BvczsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQkvKiBOb3RlOiB3ZSBkbyBub3QgdW5sb2NrIHRoZSBtb2R1bGUgYmVjYXVzZQotCSAqIHRoZXJlIGFyZSBzb21lIHZhbHVlcyBjYWNoZWQgaW4gdGhhdCBgY3NlZycgdmFyaWFibGUuICBXZQotCSAqIGRvbid0IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgaW5mb3JtYXRpb24gd2hlbiBiZWluZwotCSAqIHVubG9hZGVkIGJ5IGtlcm5lbGQgZXZlbiB3aGVuIHRoZSB0YXBlIGlzIGZ1bGwgb3Igd2hlbiB3ZQotCSAqIGNhbm5vdCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5LgotCSAqLwotCWlmIChwb3MtPnRhcGVfcG9zID4gKHZvbHVtZS0+c2l6ZS12b2x1bWUtPmJsa19zei1aRlRfQ01QUl9PVkVSSEVBRCkpIHsKLQkJVFJBQ0VfRVhJVCAtRU5PU1BDOwotCX0gICAgCi0JaWYgKHpmdF9hbGxvY2F0ZV9jbXByX21lbSh2b2x1bWUtPmJsa19zeikgPCAwKSB7Ci0JCS8qIHNob3VsZCB3ZSB1bmxvY2sgdGhlIG1vZHVsZT8gQnV0IGl0IHNob3VsZG4ndCAKLQkJICogYmUgbG9ja2VkIGFueXdheSAuLi4KLQkJICovCi0JCVRSQUNFX0VYSVQgLUVOT01FTTsKLQl9Ci0JaWYgKGJ1Zl9wb3Nfd3JpdGUgPT0gMCkgeyAvKiBmaWxsIGEgbmV3IHNlZ21lbnQgKi8KLQkJKndyaXRlX2NudCA9IGJ1Zl9wb3Nfd3JpdGUgPSBzdGFydF9uZXdfY3NlZygmY3NlZywKLQkJCQkJCQkgICAgZHN0X2J1ZiwKLQkJCQkJCQkgICAgcG9zLAotCQkJCQkJCSAgICB2b2x1bWUtPmJsa19zeiwKLQkJCQkJCQkgICAgemZ0Y19idWYsIAotCQkJCQkJCSAgICBzZWdfc3osCi0JCQkJCQkJICAgIHZvbHVtZS0+cWljMTEzKTsKLQkJaWYgKGNzZWcuY21wcl9zeiA9PSAwICYmIGNzZWcuY21wcl9wb3MgIT0gMCkgewotCQkJcmVxX2xlbl9sZWZ0IC09IHJlc3VsdCA9IHZvbHVtZS0+YmxrX3N6OwotCQkJY3NlZy5jbXByX3BvcyAgPSAwOwotCQl9IGVsc2UgewotCQkJcmVzdWx0ID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCSp3cml0ZV9jbnQgPSByZXN1bHQgPSAwOwotCX0KLQkKLQlsZW5fbGVmdCA9IHNlZ19zeiAtIGJ1Zl9wb3Nfd3JpdGU7Ci0Jd2hpbGUgKChyZXFfbGVuX2xlZnQgPiAwKSAmJiAobGVuX2xlZnQgPiAxOCkpIHsKLQkJLyogbm93IHdlIGhhdmUgc29tZSBzaXplIGxlZnQgZm9yIGEgbmV3IGNvbXByZXNzZWQKLQkJICogYmxvY2suICBXZSBrbm93LCB0aGF0IHRoZSBjb21wcmVzc2lvbiBidWZmZXIgaXMKLQkJICogZW1wdHkgKGVsc2UgdGhlcmUgd291bGRuJ3QgYmUgYW55IHNwYWNlIGxlZnQpLiAgCi0JCSAqLwotCQlpZiAoY29weV9mcm9tX3VzZXIoemZ0Y19zY3JhdGNoX2J1Ziwgc3JjX2J1ZiArIHJlc3VsdCwgCi0JCQkJICAgdm9sdW1lLT5ibGtfc3opICE9IDApIHsKLQkJCVRSQUNFX0VYSVQgLUVGQVVMVDsKLQkJfQotCQlyZXFfbGVuX2xlZnQgLT0gdm9sdW1lLT5ibGtfc3o7Ci0JCWNzZWcuY21wcl9zeiA9IHpmdF9jb21wcmVzcyh6ZnRjX3NjcmF0Y2hfYnVmLCB2b2x1bWUtPmJsa19zeiwgCi0JCQkJCSAgICB6ZnRjX2J1Zik7Ci0JCWlmIChjc2VnLmNtcHJfc3ogPCAwKSB7Ci0JCQljc2VnLnVuY21wciA9IDB4ODAwMDsKLQkJCWNzZWcuY21wcl9zeiA9IC1jc2VnLmNtcHJfc3o7Ci0JCX0gZWxzZSB7Ci0JCQljc2VnLnVuY21wciA9IDA7Ci0JCX0KLQkJLyogaW5jcmVtZW50ICJyZXN1bHQiIGlmZiB3ZSBjb3BpZWQgdGhlIGVudGlyZQotCQkgKiBjb21wcmVzc2VkIGJsb2NrIHRvIHRoZSB6ZnRfZGVibG9ja19idWYgCi0JCSAqLwotCQlsZW5fbGVmdCAtPSBzaXplb2YoX191MTYpOwotCQlpZiAobGVuX2xlZnQgPj0gY3NlZy5jbXByX3N6KSB7Ci0JCQlsZW5fbGVmdCAtPSBjc2VnLmNvdW50ID0gY3NlZy5jbXByX3N6OwotCQkJY3NlZy5jbXByX3BvcyA9IGNzZWcuY21wcl9zeiA9IDA7Ci0JCQlyZXN1bHQgKz0gdm9sdW1lLT5ibGtfc3o7Ci0JCX0gZWxzZSB7Ci0JCQljc2VnLmNtcHJfc3ogICAgICAgLT0gCi0JCQkJY3NlZy5jbXByX3BvcyA9Ci0JCQkJY3NlZy5jb3VudCAgICA9IGxlbl9sZWZ0OwotCQkJbGVuX2xlZnQgPSAwOwotCQl9Ci0JCVBVVDIoZHN0X2J1ZiwgYnVmX3Bvc193cml0ZSwgY3NlZy51bmNtcHIgfCBjc2VnLmNvdW50KTsKLQkJYnVmX3Bvc193cml0ZSArPSBzaXplb2YoX191MTYpOwotCQltZW1jcHkoZHN0X2J1ZiArIGJ1Zl9wb3Nfd3JpdGUsIHpmdGNfYnVmLCBjc2VnLmNvdW50KTsKLQkJYnVmX3Bvc193cml0ZSArPSBjc2VnLmNvdW50OwotCQkqd3JpdGVfY250ICAgICs9IGNzZWcuY291bnQgKyBzaXplb2YoX191MTYpOwotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JfQotCS8qIGVyYXNlIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlZ21lbnQgaWYgbGVzcyB0aGFuIDE4IGJ5dGVzCi0JICogbGVmdCAoMTggYnl0ZXMgaXMgZHVlIHRvIHRoZSBRSUMtODAgc3RhbmRhcmQpIAotCSAqLwotCWlmIChsZW5fbGVmdCA8PSAxOCkgewotCQltZW1zZXQoZHN0X2J1ZiArIGJ1Zl9wb3Nfd3JpdGUsICdcMCcsIGxlbl9sZWZ0KTsKLQkJKCp3cml0ZV9jbnQpICs9IGxlbl9sZWZ0OwotCX0KLQlUUkFDRShmdF90X2RhdGFfZmxvdywgInJldHVybmluZyAlZCIsIHJlc3VsdCk7Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19ICAgCi0KLS8qIG91dDoKLSAqCi0gKiBpbnQgKnJlYWRfY250OiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHJlbW92ZWQgZnJvbSB0aGUgemZ0X2RlYmxvY2tfYnVmCi0gKiAgICAgICAgICAgICAgICAocmVzdWx0KQotICogaW50ICp0b19kbyAgIDogdGhlIHJlbWFpbmluZyBzaXplIG9mIHRoZSByZWFkLXJlcXVlc3QuCi0gKgotICogaW46Ci0gKgotICogY2hhciAqYnVmZiAgICAgICAgICA6IGJ1ZmYgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIHVzZXIKLSAqICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHRoYXQgaGFzbid0IGJlZW4gZmlsbGVkIHdpdGggZGF0YSB5ZXQuCi0KLSAqIGludCBidWZfcG9zX3JlYWQgICAgOiBjb3B5IG9mIGZyb20gX2Z0YXBlX3JlYWQoKQotICogaW50IGJ1Zl9sZW5fcmVhZCAgICA6IGNvcHkgb2YgYnVmX2xlbl9yZCBmcm9tIF9mdGFwZV9yZWFkKCkKLSAqIGNoYXIgKnpmdF9kZWJsb2NrX2J1ZjogemZ0X2RlYmxvY2tfYnVmCi0gKiB1bnNpZ25lZCBzaG9ydCBibGtfc3o6IHRoZSBibG9jayBzaXplIHZhbGlkIGZvciB0aGlzIHZvbHVtZSwgbWF5IGRpZmZlcgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB6ZnRfYmxrX3N6LgotICogaW50IGZpbmlzaDogaWYgIT0gMCBtZWFucyB0aGF0IHRoaXMgaXMgdGhlIGxhc3Qgc2VnbWVudCBiZWxvbmdpbmcKLSAqICB0byB0aGlzIHZvbHVtZQotICogcmV0dXJucyB0aGUgYW1vdW50IG9mIGRhdGEgYWN0dWFsbHkgY29waWVkIHRvIHRoZSB1c2VyLWJ1ZmZlcgotICoKLSAqIHRvX2RvIE1VU1QgTk9UIFNIUklOSyBleGNlcHQgdG8gaW5kaWNhdGUgYW4gRU9GLiBJbiB0aGlzIGNhc2UgKnRvX2RvIGhhcyB0bwotICogYmUgc2V0IHRvIDAgCi0gKi8KLXN0YXRpYyBpbnQgemZ0Y19yZWFkIChpbnQgKnJlYWRfY250LCAKLQkJICAgICAgX191OCAgX191c2VyICpkc3RfYnVmLCBjb25zdCBpbnQgdG9fZG8sIAotCQkgICAgICBjb25zdCBfX3U4ICpzcmNfYnVmLCBjb25zdCBpbnQgc2VnX3N6LCAKLQkJICAgICAgY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MsIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUpCi17ICAgICAgICAgIAotCWludCB1bmNvbXByZXNzZWRfc3o7ICAgICAgICAgCi0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IHJlbWFpbmluZyA9IHRvX2RvOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0VfQ0FUQ0goemZ0X2FsbG9jYXRlX2NtcHJfbWVtKHZvbHVtZS0+YmxrX3N6KSwpOwotCWlmIChwb3MtPnNlZ19ieXRlX3BvcyA9PSAwKSB7Ci0JCS8qIG5ldyBzZWdtZW50IGp1c3QgcmVhZAotCQkgKi8KLQkJVFJBQ0VfQ0FUQ0goZ2V0X2NzZWcoJmNzZWcsIHNyY19idWYsIHNlZ19zeiwgdm9sdW1lKSwKLQkJCSAgICAqcmVhZF9jbnQgPSAwKTsKLQkJbWVtY3B5KHpmdGNfYnVmICsgY3NlZy5jbXByX3Bvcywgc3JjX2J1ZiArIHNpemVvZihfX3UxNiksIAotCQkgICAgICAgY3NlZy5jb3VudCk7Ci0JCWNzZWcuY21wcl9wb3MgKz0gY3NlZy5jb3VudDsKLQkJKnJlYWRfY250ICAgICAgPSBjc2VnLm9mZnNldDsKLQkJRFVNUF9DTVBSX0lORk8oZnRfdF9ub2lzZSAvKiBmdF90X2FueSAqLywgIiIsICZjc2VnKTsKLQl9IGVsc2UgewotCQkqcmVhZF9jbnQgPSAwOwotCX0KLQkvKiBsb29wIGFuZCB1bmNvbXByZXNzIHVudGlsIHVzZXIgYnVmZmVyIGZ1bGwgb3IKLQkgKiBkZWJsb2NrLWJ1ZmZlciBlbXB0eSAKLQkgKi8KLQlUUkFDRShmdF90X2RhdGFfZmxvdywgImNvbXByZXNzZWRfc3o6ICVkLCBjb21wb3MgOiAlZCwgKnJlYWRfY250OiAlZCIsCi0JICAgICAgY3NlZy5jbXByX3N6LCBjc2VnLmNtcHJfcG9zLCAqcmVhZF9jbnQpOwotCXdoaWxlICgoY3NlZy5zcGFucyA9PSAwKSAmJiAocmVtYWluaW5nID4gMCkpIHsKLQkJaWYgKGNzZWcuY21wcl9wb3MgICE9IDApIHsgLyogY21wciBidWYgaXMgbm90IGVtcHR5ICovCi0JCQl1bmNvbXByZXNzZWRfc3ogPSAKLQkJCQl6ZnRfdW5jb21wcmVzcyh6ZnRjX2J1ZiwKLQkJCQkJICAgICAgIGNzZWcudW5jbXByID09IDB4ODAwMCA/Ci0JCQkJCSAgICAgICAtY3NlZy5jbXByX3BvcyA6IGNzZWcuY21wcl9wb3MsCi0JCQkJCSAgICAgICB6ZnRjX3NjcmF0Y2hfYnVmLAotCQkJCQkgICAgICAgdm9sdW1lLT5ibGtfc3opOwotCQkJaWYgKHVuY29tcHJlc3NlZF9zeiAhPSB2b2x1bWUtPmJsa19zeikgewotCQkJCSpyZWFkX2NudCA9IDA7Ci0JCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF93YXJuLAotCQkJCSAgICAgICJVbmNvbXByZXNzZWQgYmxrICglZCkgIT0gYmxrIHNpemUgKCVkKSIsCi0JCQkJICAgICAgdW5jb21wcmVzc2VkX3N6LCB2b2x1bWUtPmJsa19zeik7Ci0JCQl9ICAgICAgIAotCQkJaWYgKGNvcHlfdG9fdXNlcihkc3RfYnVmICsgcmVzdWx0LCAKLQkJCQkJIHpmdGNfc2NyYXRjaF9idWYsIAotCQkJCQkgdW5jb21wcmVzc2VkX3N6KSAhPSAwICkgewotCQkJCVRSQUNFX0VYSVQgLUVGQVVMVDsKLQkJCX0KLQkJCXJlbWFpbmluZyAgICAgIC09IHVuY29tcHJlc3NlZF9zejsKLQkJCXJlc3VsdCAgICAgKz0gdW5jb21wcmVzc2VkX3N6OwotCQkJY3NlZy5jbXByX3BvcyAgPSAwOwotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCQlpZiAocmVtYWluaW5nID4gMCkgewotCQkJZ2V0X25leHRfY2x1c3RlcigmY3NlZywgc3JjX2J1Ziwgc2VnX3N6LCAKLQkJCQkJIHZvbHVtZS0+ZW5kX3NlZyA9PSBwb3MtPnNlZ19wb3MpOwotCQkJaWYgKGNzZWcuY291bnQgIT0gMCkgewotCQkJCW1lbWNweSh6ZnRjX2J1Ziwgc3JjX2J1ZiArIGNzZWcub2Zmc2V0LAotCQkJCSAgICAgICBjc2VnLmNvdW50KTsKLQkJCQljc2VnLmNtcHJfcG9zID0gY3NlZy5jb3VudDsKLQkJCQljc2VnLm9mZnNldCAgKz0gY3NlZy5jb3VudDsKLQkJCQkqcmVhZF9jbnQgKz0gY3NlZy5jb3VudCArIHNpemVvZihfX3UxNik7Ci0JCQl9IGVsc2UgewotCQkJCXJlbWFpbmluZyA9IDA7Ci0JCQl9Ci0JCX0KLQkJVFJBQ0UoZnRfdF9kYXRhX2Zsb3csICJcbiIgCi0JCSAgICAgIEtFUk5fSU5GTyAiY29tcHJlc3NlZF9zejogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJjb21wb3MgICAgICAgOiAlZFxuIgotCQkgICAgICBLRVJOX0lORk8gIipyZWFkX2NudCAgICA6ICVkIiwKLQkJICAgICAgY3NlZy5jbXByX3N6LCBjc2VnLmNtcHJfcG9zLCAqcmVhZF9jbnQpOwotCX0KLQlpZiAoc2VnX3N6IC0gY3NlZy5vZmZzZXQgPD0gMTgpIHsKLQkJKnJlYWRfY250ICs9IHNlZ19zeiAtIGNzZWcub2Zmc2V0OwotCQlUUkFDRShmdF90X2RhdGFfZmxvdywgImV4cGFuZGluZyByZWFkIGNudCB0bzogJWQiLCAqcmVhZF9jbnQpOwotCX0KLQlUUkFDRShmdF90X2RhdGFfZmxvdywgIlxuIgotCSAgICAgIEtFUk5fSU5GTyAic2VnbWVudCBzaXplICAgOiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAicmVhZCBjb3VudCAgICAgOiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAiYnVmX3Bvc19yZWFkICAgOiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAicmVtYWluaW5nICAgICAgOiAlZCIsCi0JCXNlZ19zeiwgKnJlYWRfY250LCBwb3MtPnNlZ19ieXRlX3BvcywgCi0JCXNlZ19zeiAtICpyZWFkX2NudCAtIHBvcy0+c2VnX2J5dGVfcG9zKTsKLQlUUkFDRShmdF90X2RhdGFfZmxvdywgInJldHVybmluZzogJWQiLCByZXN1bHQpOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfSAgICAgICAgICAgICAgICAKLQotLyogc2Vla3MgdG8gdGhlIG5ldyBkYXRhLXBvc2l0aW9uLiBSZWFkcyBzb21ldGltZXMgYSBzZWdtZW50LgotICogIAotICogc3RhcnRfc2VnIGFuZCBlbmRfc2VnIGdpdmUgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGN1cnJlbnQgdm9sdW1lCi0gKiBibGtfc3ogaXMgdGhlIGJsa19zeiBvZiB0aGUgY3VycmVudCB2b2x1bWUgYXMgc3RvcmVkIGluIHRoZQotICogdm9sdW1lIGxhYmVsCi0gKgotICogV2UgZG9uJ3QgYWxsb3cgYmxvY2tzaXplcyBsZXNzIHRoYW4gMTAyNCBieXRlcywgdGhlcmVmb3JlIHdlIGRvbid0IG5lZWQKLSAqIGEgNjQgYml0IGFyZ3VtZW50IGZvciBuZXdfYmxvY2tfcG9zLgotICovCi0KLXN0YXRpYyBpbnQgc2Vla19pbl9zZWdtZW50KGNvbnN0IHVuc2lnbmVkIGludCB0b19kbywgY21wcl9pbmZvICAqY19pbmZvLAotCQkJICAgY29uc3QgY2hhciAqc3JjX2J1ZiwgY29uc3QgaW50IHNlZ19zeiwgCi0JCQkgICBjb25zdCBpbnQgc2VnX3BvcywgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSk7Ci1zdGF0aWMgaW50IHNsb3dfc2Vla19mb3J3YXJkX3VudGlsX2Vycm9yKGNvbnN0IHVuc2lnbmVkIGludCBkaXN0YW5jZSwKLQkJCQkJIGNtcHJfaW5mbyAqY19pbmZvLCB6ZnRfcG9zaXRpb24gKnBvcywgCi0JCQkJCSBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lLCBfX3U4ICpidWYpOwotc3RhdGljIGludCBzZWFyY2hfdmFsaWRfc2VnbWVudCh1bnNpZ25lZCBpbnQgc2VnbWVudCwKLQkJCQljb25zdCB1bnNpZ25lZCBpbnQgZW5kX3NlZywKLQkJCQljb25zdCB1bnNpZ25lZCBpbnQgbWF4X2ZvZmZzLAotCQkJCXpmdF9wb3NpdGlvbiAqcG9zLCBjbXByX2luZm8gKmNfaW5mbywKLQkJCQljb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lLCBfX3U4ICpidWYpOwotc3RhdGljIGludCBzbG93X3NlZWtfZm9yd2FyZCh1bnNpZ25lZCBpbnQgZGVzdCwgY21wcl9pbmZvICpjX2luZm8sCi0JCQkgICAgIHpmdF9wb3NpdGlvbiAqcG9zLCBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lLAotCQkJICAgICBfX3U4ICpidWYpOwotc3RhdGljIGludCBjb21wdXRlX3NlZ19wb3ModW5zaWduZWQgaW50IGRlc3QsIHpmdF9wb3NpdGlvbiAqcG9zLAotCQkJICAgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSk7Ci0KLSNkZWZpbmUgWkZUX1NMT1dfU0VFS19USFJFU0hPTEQgIDEwIC8qIHNlZ21lbnRzICovCi0jZGVmaW5lIFpGVF9GQVNUX1NFRUtfTUFYX1RSSUFMUyAxMCAvKiB0aW1lcyAqLwotI2RlZmluZSBaRlRfRkFTVF9TRUVLX0JBQ0tVUCAgICAgMTAgLyogc2VnbWVudHMgKi8KLQotc3RhdGljIGludCB6ZnRjX3NlZWsodW5zaWduZWQgaW50IG5ld19ibG9ja19wb3MsCi0JCSAgICAgemZ0X3Bvc2l0aW9uICpwb3MsIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUsIF9fdTggKmJ1ZikKLXsKLQl1bnNpZ25lZCBpbnQgZGVzdDsKLQlpbnQgbGltaXQ7Ci0JaW50IGRpc3RhbmNlOwotCWludCByZXN1bHQgPSAwOwotCWludCBzZWdfZGlzdDsKLQlpbnQgbmV3X3NlZzsKLQlpbnQgb2xkX3NlZyA9IDA7Ci0JaW50IGZhc3Rfc2Vla190cmlhbHMgPSAwOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKG5ld19ibG9ja19wb3MgPT0gMCkgewotCQlwb3MtPnNlZ19wb3MgICAgICA9IHZvbHVtZS0+c3RhcnRfc2VnOwotCQlwb3MtPnNlZ19ieXRlX3BvcyA9IDA7Ci0JCXBvcy0+dm9sdW1lX3BvcyAgID0gMDsKLQkJemZ0Y19yZXNldCgpOwotCQlUUkFDRV9FWElUIDA7Ci0JfQotCWRlc3QgPSBuZXdfYmxvY2tfcG9zICogKHZvbHVtZS0+YmxrX3N6ID4+IDEwKTsKLQlkaXN0YW5jZSA9IGRlc3QgLSAocG9zLT52b2x1bWVfcG9zID4+IDEwKTsKLQl3aGlsZSAoZGlzdGFuY2UgIT0gMCkgewotCQlzZWdfZGlzdCA9IGNvbXB1dGVfc2VnX3BvcyhkZXN0LCBwb3MsIHZvbHVtZSk7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJcbiIKLQkJICAgICAgS0VSTl9JTkZPICJzZWdfZGlzdDogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJkaXN0YW5jZTogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJkZXN0ICAgIDogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJ2cG9zICAgIDogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJzZWdfcG9zIDogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJ0cmlhbHMgIDogJWQiLAotCQkgICAgICBzZWdfZGlzdCwgZGlzdGFuY2UsIGRlc3QsCi0JCSAgICAgICh1bnNpZ25lZCBpbnQpKHBvcy0+dm9sdW1lX3Bvcz4+MTApLCBwb3MtPnNlZ19wb3MsCi0JCSAgICAgIGZhc3Rfc2Vla190cmlhbHMpOwotCQlpZiAoZGlzdGFuY2UgPiAwKSB7Ci0JCQlpZiAoc2VnX2Rpc3QgPCAwKSB7Ci0JCQkJVFJBQ0UoZnRfdF9idWcsICJCVUc6IGRpc3RhbmNlICVkID4gMCwgIgotCQkJCSAgICAgICJzZWdtZW50IGRpZmZlcmVuY2UgJWQgPCAwIiwKLQkJCQkgICAgICBkaXN0YW5jZSwgc2VnX2Rpc3QpOwotCQkJCXJlc3VsdCA9IC1FSU87Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQluZXdfc2VnID0gcG9zLT5zZWdfcG9zICsgc2VnX2Rpc3Q7Ci0JCQlpZiAobmV3X3NlZyA+IHZvbHVtZS0+ZW5kX3NlZykgewotCQkJCW5ld19zZWcgPSB2b2x1bWUtPmVuZF9zZWc7Ci0JCQl9Ci0JCQlpZiAob2xkX3NlZyA9PSBuZXdfc2VnIHx8IC8qIGxvb3AgKi8KLQkJCSAgICBzZWdfZGlzdCA8PSBaRlRfU0xPV19TRUVLX1RIUkVTSE9MRCB8fAotCQkJICAgIGZhc3Rfc2Vla190cmlhbHMgPj0gWkZUX0ZBU1RfU0VFS19NQVhfVFJJQUxTKSB7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwgInN0YXJ0aW5nIHNsb3cgc2VlazpcbiIKLQkJCQkgICBLRVJOX0lORk8gImZhc3Qgc2VlayBmYWlsZWQgdG9vIG9mdGVuOiAlc1xuIgotCQkJCSAgIEtFUk5fSU5GTyAibmVhciB0YXJnZXQgcG9zaXRpb24gICAgICA6ICVzXG4iCi0JCQkJICAgS0VSTl9JTkZPICJsb29waW5nIGJldHdlZW4gdHdvIHNlZ3MgIDogJXMiLAotCQkJCSAgICAgIChmYXN0X3NlZWtfdHJpYWxzID49IAotCQkJCSAgICAgICBaRlRfRkFTVF9TRUVLX01BWF9UUklBTFMpCi0JCQkJICAgICAgPyAieWVzIiA6ICJubyIsCi0JCQkJICAgICAgKHNlZ19kaXN0IDw9IFpGVF9TTE9XX1NFRUtfVEhSRVNIT0xEKSAKLQkJCQkgICAgICA/ICJ5ZXMiIDogIm5vIiwKLQkJCQkgICAgICAob2xkX3NlZyA9PSBuZXdfc2VnKQotCQkJCSAgICAgID8gInllcyIgOiAibm8iKTsKLQkJCQlyZXN1bHQgPSBzbG93X3NlZWtfZm9yd2FyZChkZXN0LCAmY3NlZywgCi0JCQkJCQkJICAgcG9zLCB2b2x1bWUsIGJ1Zik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlvbGRfc2VnID0gbmV3X3NlZzsKLQkJCWxpbWl0ID0gdm9sdW1lLT5lbmRfc2VnOwotCQkJZmFzdF9zZWVrX3RyaWFscyArKzsKLQkJCWZvciAoOzspIHsKLQkJCQlyZXN1bHQgPSBzZWFyY2hfdmFsaWRfc2VnbWVudChuZXdfc2VnLCBsaW1pdCwKLQkJCQkJCQkgICAgICB2b2x1bWUtPnNpemUsCi0JCQkJCQkJICAgICAgcG9zLCAmY3NlZywKLQkJCQkJCQkgICAgICB2b2x1bWUsIGJ1Zik7Ci0JCQkJaWYgKHJlc3VsdCA9PSAwIHx8IHJlc3VsdCA9PSAtRUlOVFIpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChuZXdfc2VnID09IHZvbHVtZS0+c3RhcnRfc2VnKSB7Ci0JCQkJCXJlc3VsdCA9IC1FSU87IC8qIHNldCBlcnJyb3IgCi0JCQkJCQkJKiBjb25kaXRpb24KLQkJCQkJCQkqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJbGltaXQgICAgPSBuZXdfc2VnOwotCQkJCW5ld19zZWcgLT0gWkZUX0ZBU1RfU0VFS19CQUNLVVA7Ci0JCQkJaWYgKG5ld19zZWcgPCB2b2x1bWUtPnN0YXJ0X3NlZykgewotCQkJCQluZXdfc2VnID0gdm9sdW1lLT5zdGFydF9zZWc7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCQlUUkFDRShmdF90X3dhcm4sCi0JCQkJICAgICAgIkNvdWxkbid0IGZpbmQgYSByZWFkYWJsZSBzZWdtZW50Iik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSAvKiBpZiAoZGlzdGFuY2UgPCAwKSAqLyB7Ci0JCQlpZiAoc2VnX2Rpc3QgPiAwKSB7Ci0JCQkJVFJBQ0UoZnRfdF9idWcsICJCVUc6IGRpc3RhbmNlICVkIDwgMCwgIgotCQkJCSAgICAgICJzZWdtZW50IGRpZmZlcmVuY2UgJWQgPjAiLAotCQkJCSAgICAgIGRpc3RhbmNlLCBzZWdfZGlzdCk7Ci0JCQkJcmVzdWx0ID0gLUVJTzsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW5ld19zZWcgPSBwb3MtPnNlZ19wb3MgKyBzZWdfZGlzdDsKLQkJCWlmIChmYXN0X3NlZWtfdHJpYWxzID4gMCAmJiBzZWdfZGlzdCA9PSAwKSB7Ci0JCQkJLyogdGhpcyBhdm9pZHMgc3RpY2tpbmcgdG8gdGhlIHNhbWUKLQkJCQkgKiBzZWdtZW50IGFsbCB0aGUgdGltZS4gT24gdGhlIG90aGVyIGhhbmQ6Ci0JCQkJICogaWYgd2UgZ290IGhlcmUgZm9yIHRoZSBmaXJzdCB0aW1lLCBhbmQgdGhlCi0JCQkJICogZGVibG9ja19idWZmZXIgc3RpbGwgY29udGFpbnMgYSB2YWxpZAotCQkJCSAqIHNlZ21lbnQsIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBza2lwIHRvIAotCQkJCSAqIHRoZSBwcmV2aW91cyBzZWdtZW50IGlmIHRoZSBkZXNpcmVkIHBvc2l0aW9uCi0JCQkJICogaXMgaW5zaWRlIHRoaXMgc2VnbWVudC4KLQkJCQkgKi8KLQkJCQluZXdfc2VnIC0tOwotCQkJfQotCQkJaWYgKG5ld19zZWcgPCB2b2x1bWUtPnN0YXJ0X3NlZykgewotCQkJCW5ld19zZWcgPSB2b2x1bWUtPnN0YXJ0X3NlZzsKLQkJCX0KLQkJCWxpbWl0ICAgPSBwb3MtPnNlZ19wb3M7Ci0JCQlmYXN0X3NlZWtfdHJpYWxzICsrOwotCQkJZm9yICg7OykgewotCQkJCXJlc3VsdCA9IHNlYXJjaF92YWxpZF9zZWdtZW50KG5ld19zZWcsIGxpbWl0LAotCQkJCQkJCSAgICAgIHBvcy0+dm9sdW1lX3BvcywKLQkJCQkJCQkgICAgICBwb3MsICZjc2VnLAotCQkJCQkJCSAgICAgIHZvbHVtZSwgYnVmKTsKLQkJCQlpZiAocmVzdWx0ID09IDAgfHwgcmVzdWx0ID09IC1FSU5UUikgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKG5ld19zZWcgPT0gdm9sdW1lLT5zdGFydF9zZWcpIHsKLQkJCQkJcmVzdWx0ID0gLUVJTzsgLyogc2V0IGVycnJvciAKLQkJCQkJCQkqIGNvbmRpdGlvbgotCQkJCQkJCSovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlsaW1pdCAgICA9IG5ld19zZWc7Ci0JCQkJbmV3X3NlZyAtPSBaRlRfRkFTVF9TRUVLX0JBQ0tVUDsKLQkJCQlpZiAobmV3X3NlZyA8IHZvbHVtZS0+c3RhcnRfc2VnKSB7Ci0JCQkJCW5ld19zZWcgPSB2b2x1bWUtPnN0YXJ0X3NlZzsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAocmVzdWx0IDwgMCkgewotCQkJCVRSQUNFKGZ0X3Rfd2FybiwKLQkJCQkgICAgICAiQ291bGRuJ3QgZmluZCBhIHJlYWRhYmxlIHNlZ21lbnQiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlkaXN0YW5jZSA9IGRlc3QgLSAocG9zLT52b2x1bWVfcG9zID4+IDEwKTsKLQl9Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLQotLyogIGFkdmFuY2UgaW5zaWRlIHRoZSBnaXZlbiBzZWdtZW50IGF0IG1vc3QgdG9fZG8gYnl0ZXMuCi0gKiAgb2Yga2lsb2J5dGVzIG1vdmVkCi0gKi8KLQotc3RhdGljIGludCBzZWVrX2luX3NlZ21lbnQoY29uc3QgdW5zaWduZWQgaW50IHRvX2RvLAotCQkJICAgY21wcl9pbmZvICAqY19pbmZvLAotCQkJICAgY29uc3QgY2hhciAqc3JjX2J1ZiwgCi0JCQkgICBjb25zdCBpbnQgc2VnX3N6LCAKLQkJCSAgIGNvbnN0IGludCBzZWdfcG9zLAotCQkJICAgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSkKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgYmxrX3N6ID0gdm9sdW1lLT5ibGtfc3ogPj4gMTA7Ci0JaW50IHJlbWFpbmluZyA9IHRvX2RvOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGNfaW5mby0+b2Zmc2V0ID09IDApIHsKLQkJLyogbmV3IHNlZ21lbnQganVzdCByZWFkCi0JCSAqLwotCQlUUkFDRV9DQVRDSChnZXRfY3NlZyhjX2luZm8sIHNyY19idWYsIHNlZ19zeiwgdm9sdW1lKSwpOwotCQljX2luZm8tPmNtcHJfcG9zICs9IGNfaW5mby0+Y291bnQ7Ci0JCURVTVBfQ01QUl9JTkZPKGZ0X3Rfbm9pc2UsICIiLCBjX2luZm8pOwotCX0KLQkvKiBsb29wIGFuZCB1bmNvbXByZXNzIHVudGlsIHVzZXIgYnVmZmVyIGZ1bGwgb3IKLQkgKiBkZWJsb2NrLWJ1ZmZlciBlbXB0eSAKLQkgKi8KLQlUUkFDRShmdF90X25vaXNlLCAiY29tcHJlc3NlZF9zejogJWQsIGNvbXBvcyA6ICVkIiwKLQkgICAgICBjX2luZm8tPmNtcHJfc3osIGNfaW5mby0+Y21wcl9wb3MpOwotCXdoaWxlIChjX2luZm8tPnNwYW5zID09IDAgJiYgcmVtYWluaW5nID4gMCkgewotCQlpZiAoY19pbmZvLT5jbXByX3BvcyAgIT0gMCkgeyAvKiBjbXByIGJ1ZiBpcyBub3QgZW1wdHkgKi8KLQkJCXJlc3VsdCAgICAgICArPSBibGtfc3o7Ci0JCQlyZW1haW5pbmcgICAgLT0gYmxrX3N6OwotCQkJY19pbmZvLT5jbXByX3BvcyA9IDA7Ci0JCX0KLQkJaWYgKHJlbWFpbmluZyA+IDApIHsKLQkJCWdldF9uZXh0X2NsdXN0ZXIoY19pbmZvLCBzcmNfYnVmLCBzZWdfc3osIAotCQkJCQkgdm9sdW1lLT5lbmRfc2VnID09IHNlZ19wb3MpOwotCQkJaWYgKGNfaW5mby0+Y291bnQgIT0gMCkgewotCQkJCWNfaW5mby0+Y21wcl9wb3MgPSBjX2luZm8tPmNvdW50OwotCQkJCWNfaW5mby0+b2Zmc2V0ICArPSBjX2luZm8tPmNvdW50OwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiAgQWxsb3cgZXNjYXBlIGZyb20gdGhpcyBsb29wIG9uIHNpZ25hbCEKLQkJICovCi0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQkJRFVNUF9DTVBSX0lORk8oZnRfdF9ub2lzZSwgIiIsIGNfaW5mbyk7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJ0b19kbzogJWQiLCByZW1haW5pbmcpOwotCX0KLQlpZiAoc2VnX3N6IC0gY19pbmZvLT5vZmZzZXQgPD0gMTgpIHsKLQkJY19pbmZvLT5vZmZzZXQgPSBzZWdfc3o7Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJcbiIKLQkgICAgICBLRVJOX0lORk8gInNlZ21lbnQgc2l6ZSAgIDogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gImJ1Zl9wb3NfcmVhZCAgIDogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gInJlbWFpbmluZyAgICAgIDogJWQiLAotCSAgICAgIHNlZ19zeiwgY19pbmZvLT5vZmZzZXQsCi0JICAgICAgc2VnX3N6IC0gY19pbmZvLT5vZmZzZXQpOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfSAgICAgICAgICAgICAgICAKLQotc3RhdGljIGludCBzbG93X3NlZWtfZm9yd2FyZF91bnRpbF9lcnJvcihjb25zdCB1bnNpZ25lZCBpbnQgZGlzdGFuY2UsCi0JCQkJCSBjbXByX2luZm8gKmNfaW5mbywKLQkJCQkJIHpmdF9wb3NpdGlvbiAqcG9zLCAKLQkJCQkJIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUsCi0JCQkJCSBfX3U4ICpidWYpCi17Ci0JdW5zaWduZWQgaW50IHJlbWFpbmluZyA9IGRpc3RhbmNlOwotCWludCBzZWdfc3o7Ci0JaW50IHNlZ19wb3M7Ci0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlzZWdfcG9zID0gcG9zLT5zZWdfcG9zOwotCWRvIHsKLQkJVFJBQ0VfQ0FUQ0goc2VnX3N6ID0gemZ0X2ZldGNoX3NlZ21lbnQoc2VnX3BvcywgYnVmLCAKLQkJCQkJCSAgICAgICBGVF9SRF9BSEVBRCksKTsKLQkJLyogbm93IHdlIGhhdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBhY3R1YWwgc2VnbWVudCBpbgotCQkgKiB0aGUgZGVibG9jayBidWZmZXIKLQkJICovCi0JCVRSQUNFX0NBVENIKHJlc3VsdCA9IHNlZWtfaW5fc2VnbWVudChyZW1haW5pbmcsIGNfaW5mbywgYnVmLAotCQkJCQkJICAgICBzZWdfc3osIHNlZ19wb3Msdm9sdW1lKSwpOwotCQlyZW1haW5pbmcgICAgICAgIC09IHJlc3VsdDsKLQkJcG9zLT52b2x1bWVfcG9zICArPSByZXN1bHQ8PDEwOwotCQlwb3MtPnNlZ19wb3MgICAgICA9IHNlZ19wb3M7Ci0JCXBvcy0+c2VnX2J5dGVfcG9zID0gY19pbmZvLT5vZmZzZXQ7Ci0JCXNlZ19wb3MgKys7Ci0JCWlmIChzZWdfcG9zIDw9IHZvbHVtZS0+ZW5kX3NlZyAmJiBjX2luZm8tPm9mZnNldCA9PSBzZWdfc3opIHsKLQkJCXBvcy0+c2VnX3BvcyArKzsKLQkJCXBvcy0+c2VnX2J5dGVfcG9zID0gMDsKLQkJCWNfaW5mby0+b2Zmc2V0ID0gMDsKLQkJfQotCQkvKiAgQWxsb3cgZXNjYXBlIGZyb20gdGhpcyBsb29wIG9uIHNpZ25hbCEKLQkJICovCi0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIlxuIgotCQkgICAgICBLRVJOX0lORk8gInJlbWFpbmluZzogICVkXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAic2VnX3BvczogICAgJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJlbmRfc2VnOiAgICAlZFxuIgotCQkgICAgICBLRVJOX0lORk8gInJlc3VsdDogICAgICVkIiwKLQkJICAgICAgcmVtYWluaW5nLCBzZWdfcG9zLCB2b2x1bWUtPmVuZF9zZWcsIHJlc3VsdCk7ICAKLQl9IHdoaWxlIChyZW1haW5pbmcgPiAwICYmIHNlZ19wb3MgPD0gdm9sdW1lLT5lbmRfc2VnKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qIHJldHVybiBzZWdtZW50IGlkIG9mIG5leHQgc2VnbWVudCBjb250YWluaW5nIHZhbGlkIGRhdGEsIC1FSU8gb3RoZXJ3aXNlCi0gKi8KLXN0YXRpYyBpbnQgc2VhcmNoX3ZhbGlkX3NlZ21lbnQodW5zaWduZWQgaW50IHNlZ21lbnQsCi0JCQkJY29uc3QgdW5zaWduZWQgaW50IGVuZF9zZWcsCi0JCQkJY29uc3QgdW5zaWduZWQgaW50IG1heF9mb2ZmcywKLQkJCQl6ZnRfcG9zaXRpb24gKnBvcywKLQkJCQljbXByX2luZm8gKmNfaW5mbywKLQkJCQljb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lLAotCQkJCV9fdTggKmJ1ZikKLXsKLQljbXByX2luZm8gdG1wX2luZm87Ci0JaW50IHNlZ19zejsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQltZW1zZXQoJnRtcF9pbmZvLCAwLCBzaXplb2YoY21wcl9pbmZvKSk7Ci0Jd2hpbGUgKHNlZ21lbnQgPD0gZW5kX3NlZykgewotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JCSAgICAgICJTZWFyY2hpbmcgcmVhZGFibGUgc2VnbWVudCBiZXR3ZWVuICVkIGFuZCAlZCIsCi0JCSAgICAgIHNlZ21lbnQsIGVuZF9zZWcpOwotCQlzZWdfc3ogPSB6ZnRfZmV0Y2hfc2VnbWVudChzZWdtZW50LCBidWYsIEZUX1JEX0FIRUFEKTsKLQkJaWYgKChzZWdfc3ogPiAwKSAmJgotCQkgICAgKGdldF9jc2VnICgmdG1wX2luZm8sIGJ1Ziwgc2VnX3N6LCB2b2x1bWUpID49IDApICYmCi0JCSAgICAodG1wX2luZm8uZm9mZnMgIT0gMCB8fCBzZWdtZW50ID09IHZvbHVtZS0+c3RhcnRfc2VnKSkgewotCQkJaWYgKCh0bXBfaW5mby5mb2Zmcz4+MTApID4gbWF4X2ZvZmZzKSB7Ci0JCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9ub2lzZSwgIlxuIgotCQkJCQkgICAgS0VSTl9JTkZPICJjc2VnLmZvZmY6ICVkXG4iCi0JCQkJCSAgICBLRVJOX0lORk8gImRlc3QgICAgIDogJWQiLAotCQkJCQkgICAgKGludCkodG1wX2luZm8uZm9mZnMgPj4gMTApLAotCQkJCQkgICAgbWF4X2ZvZmZzKTsKLQkJCX0KLQkJCURVTVBfQ01QUl9JTkZPKGZ0X3Rfbm9pc2UsICIiLCAmdG1wX2luZm8pOwotCQkJKmNfaW5mbyAgICAgICAgICAgPSB0bXBfaW5mbzsKLQkJCXBvcy0+c2VnX3BvcyAgICAgID0gc2VnbWVudDsKLQkJCXBvcy0+dm9sdW1lX3BvcyAgID0gY19pbmZvLT5mb2ZmczsKLQkJCXBvcy0+c2VnX2J5dGVfcG9zID0gY19pbmZvLT5vZmZzZXQ7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiZm91bmQgc2VnbWVudCBhdCAlZCIsIHNlZ21lbnQpOwotCQkJVFJBQ0VfRVhJVCAwOwotCQl9Ci0JCXNlZ21lbnQrKzsKLQl9Ci0JVFJBQ0VfRVhJVCAtRUlPOwotfQotCi1zdGF0aWMgaW50IHNsb3dfc2Vla19mb3J3YXJkKHVuc2lnbmVkIGludCBkZXN0LAotCQkJICAgICBjbXByX2luZm8gKmNfaW5mbywKLQkJCSAgICAgemZ0X3Bvc2l0aW9uICpwb3MsCi0JCQkgICAgIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUsCi0JCQkgICAgIF9fdTggKmJ1ZikKLXsKLQl1bnNpZ25lZCBpbnQgZGlzdGFuY2U7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCQotCWRpc3RhbmNlID0gZGVzdCAtIChwb3MtPnZvbHVtZV9wb3MgPj4gMTApOwotCXdoaWxlICgoZGlzdGFuY2UgPiAwKSAmJgotCSAgICAgICAocmVzdWx0ID0gc2xvd19zZWVrX2ZvcndhcmRfdW50aWxfZXJyb3IoZGlzdGFuY2UsCi0JCQkJCQkgICAgICAgY19pbmZvLAotCQkJCQkJICAgICAgIHBvcywKLQkJCQkJCSAgICAgICB2b2x1bWUsCi0JCQkJCQkgICAgICAgYnVmKSkgPCAwKSB7Ci0JCWlmIChyZXN1bHQgPT0gLUVJTlRSKSB7Ci0JCQlicmVhazsKLQkJfQotCQlUUkFDRShmdF90X25vaXNlLCAic2VnX3BvczogJWQiLCBwb3MtPnNlZ19wb3MpOwotCQkvKiB0aGUgZmFpbGluZyBzZWdtZW50IGlzIGVpdGhlciBwb3MtPnNlZ19wb3Mgb3IKLQkJICogcG9zLT5zZWdfcG9zICsgMS4gVGhlcmUgaXMgbm8gbmVlZCB0byBmdXJ0aGVyIHRyeQotCQkgKiB0aGF0IHNlZ21lbnQsIGJlY2F1c2UgZnRhcGVfcmVhZF9zZWdtZW50KCkgYWxyZWFkeQotCQkgKiBoYXMgdHJpZWQgdmVyeSBtdWNoIHRvIHJlYWQgaXQuIFNvIHdlIHN0YXJ0IHdpdGgKLQkJICogZm9sbG93aW5nIHNlZ21lbnQsIHdoaWNoIGlzIHBvcy0+c2VnX3BvcyArIDEKLQkJICovCi0JCWlmKHNlYXJjaF92YWxpZF9zZWdtZW50KHBvcy0+c2VnX3BvcysxLCB2b2x1bWUtPmVuZF9zZWcsIGRlc3QsCi0JCQkJCXBvcywgY19pbmZvLAotCQkJCQl2b2x1bWUsIGJ1ZikgPCAwKSB7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAic2VhcmNoX3ZhbGlkX3NlZ21lbnQoKSBmYWlsZWQiKTsKLQkJCXJlc3VsdCA9IC1FSU87Ci0JCQlicmVhazsKLQkJfQotCQlkaXN0YW5jZSA9IGRlc3QgLSAocG9zLT52b2x1bWVfcG9zID4+IDEwKTsKLQkJcmVzdWx0ID0gMDsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInNlZ21lbnQ6ICVkIiwgcG9zLT5zZWdfcG9zKTsKLQkJLyogZm91bmQgdmFsaWQgc2VnbWVudCwgcmV0cnkgdGhlIHNlZWsgKi8KLQl9Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcHV0ZV9zZWdfcG9zKGNvbnN0IHVuc2lnbmVkIGludCBkZXN0LAotCQkJICAgemZ0X3Bvc2l0aW9uICpwb3MsCi0JCQkgICBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lKQotewotCWludCBzZWdtZW50OwotCWludCBkaXN0YW5jZSA9IGRlc3QgLSAocG9zLT52b2x1bWVfcG9zID4+IDEwKTsKLQl1bnNpZ25lZCBpbnQgcmF3X3NpemU7Ci0JdW5zaWduZWQgaW50IHZpcnRfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgZmFjdG9yOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGRpc3RhbmNlID49IDApIHsKLQkJcmF3X3NpemUgID0gdm9sdW1lLT5lbmRfc2VnIC0gcG9zLT5zZWdfcG9zICsgMTsKLQkJdmlydF9zaXplID0gKCh1bnNpZ25lZCBpbnQpKHZvbHVtZS0+c2l6ZT4+MTApIAotCQkJICAgICAtICh1bnNpZ25lZCBpbnQpKHBvcy0+dm9sdW1lX3Bvcz4+MTApCi0JCQkgICAgICsgRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIEZUX0VDQ19TRUNUT1JTIC0gMSk7Ci0JCXZpcnRfc2l6ZSAvPSBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UIC0gRlRfRUNDX1NFQ1RPUlM7Ci0JCWlmICh2aXJ0X3NpemUgPT0gMCB8fCByYXdfc2l6ZSA9PSAwKSB7Ci0JCQlUUkFDRV9FWElUIDA7Ci0JCX0KLQkJaWYgKHJhd19zaXplID49ICgxPDwyNSkpIHsKLQkJCWZhY3RvciA9IHJhd19zaXplLyh2aXJ0X3NpemU+PjcpOwotCQl9IGVsc2UgewotCQkJZmFjdG9yID0gKHJhd19zaXplPDw3KS92aXJ0X3NpemU7Ci0JCX0KLQkJc2VnbWVudCA9IGRpc3RhbmNlLyhGVF9TRUNUT1JTX1BFUl9TRUdNRU5ULUZUX0VDQ19TRUNUT1JTKTsKLQkJc2VnbWVudCA9IChzZWdtZW50ICogZmFjdG9yKT4+NzsKLQl9IGVsc2UgewotCQlyYXdfc2l6ZSAgPSBwb3MtPnNlZ19wb3MgLSB2b2x1bWUtPnN0YXJ0X3NlZyArIDE7Ci0JCXZpcnRfc2l6ZSA9ICgodW5zaWduZWQgaW50KShwb3MtPnZvbHVtZV9wb3M+PjEwKQotCQkJICAgICArIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgLSBGVF9FQ0NfU0VDVE9SUyAtIDEpOwotCQl2aXJ0X3NpemUgLz0gRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIEZUX0VDQ19TRUNUT1JTOwotCQlpZiAodmlydF9zaXplID09IDAgfHwgcmF3X3NpemUgPT0gMCkgewotCQkJVFJBQ0VfRVhJVCAwOwotCQl9Ci0JCWlmIChyYXdfc2l6ZSA+PSAoMTw8MjUpKSB7Ci0JCQlmYWN0b3IgPSByYXdfc2l6ZS8odmlydF9zaXplPj43KTsKLQkJfSBlbHNlIHsKLQkJCWZhY3RvciA9IChyYXdfc2l6ZTw8NykvdmlydF9zaXplOwotCQl9Ci0JCXNlZ21lbnQgPSBkaXN0YW5jZS8oRlRfU0VDVE9SU19QRVJfU0VHTUVOVC1GVF9FQ0NfU0VDVE9SUyk7Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJmYWN0b3I6ICVkLyVkIiwgZmFjdG9yLCAxPDw3KTsKLQlUUkFDRV9FWElUIHNlZ21lbnQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgemZ0X2NtcHJfb3BzIGNtcHJfb3BzID0gewotCXpmdGNfd3JpdGUsCi0JemZ0Y19yZWFkLAotCXpmdGNfc2VlaywKLQl6ZnRjX2xvY2ssCi0JemZ0Y19yZXNldCwKLQl6ZnRjX2NsZWFudXAKLX07Ci0KLWludCB6ZnRfY29tcHJlc3Nvcl9pbml0KHZvaWQpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0jaWZkZWYgTU9EVUxFCi0JcHJpbnRrKEtFUk5fSU5GTyAiemZ0YXBlIGNvbXByZXNzb3IgdjEuMDBhIDk3MDUxNCBmb3IgIiBGVEFQRV9WRVJTSU9OICJcbiIpOwotICAgICAgICBpZiAoVFJBQ0VfTEVWRUwgPj0gZnRfdF9pbmZvKSB7Ci0JCXByaW50aygKLUtFUk5fSU5GTyAiKGMpIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lIChjbGF1c0Btb21vLm1hdGgucnd0aC1hYWNoZW4uZGUpXG4iCi1LRVJOX0lORk8gIkNvbXByZXNzb3IgZm9yIHpmdGFwZSAobHpydzMgYWxnb3JpdGhtKVxuIik7Ci0gICAgICAgIH0KLSNlbHNlIC8qICFNT0RVTEUgKi8KLQkvKiBwcmludCBhIHNob3J0IG5vLW5vbnNlbnNlIGJvb3QgbWVzc2FnZSAqLwotCXByaW50ayhLRVJOX0lORk8gInpmdGFwZSBjb21wcmVzc29yIHYxLjAwYSA5NzA1MTRcbiIpOwotCXByaW50ayhLRVJOX0lORk8gIkZvciB1c2Ugd2l0aCAiIEZUQVBFX1ZFUlNJT04gIlxuIik7Ci0jZW5kaWYgLyogTU9EVUxFICovCi0JVFJBQ0UoZnRfdF9pbmZvLCAiemZ0X2NvbXByZXNzb3JfaW5pdCBAIDB4JXAiLCB6ZnRfY29tcHJlc3Nvcl9pbml0KTsKLQlUUkFDRShmdF90X2luZm8sICJpbnN0YWxsaW5nIGNvbXByZXNzb3IgZm9yIHpmdGFwZSAuLi4iKTsKLQlUUkFDRV9DQVRDSCh6ZnRfY21wcl9yZWdpc3RlcigmY21wcl9vcHMpLCk7Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi0jaWZkZWYgTU9EVUxFCi0KLU1PRFVMRV9BVVRIT1IoCi0JIihjKSAxOTk2LCAxOTk3IENsYXVzLUp1c3R1cyBIZWluZSAoY2xhdXNAbW9tby5tYXRoLnJ3dGgtYWFjaGVuLmRlIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oCi0iQ29tcHJlc3Npb24gcm91dGluZXMgZm9yIHpmdGFwZS4gVXNlcyB0aGUgbHpydzMgYWxnb3JpdGhtIGJ5IFJvc3MgV2lsbGlhbXMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyogQ2FsbGVkIGJ5IG1vZHVsZXMgcGFja2FnZSB3aGVuIGluc3RhbGxpbmcgdGhlIGRyaXZlcgotICovCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm4gemZ0X2NvbXByZXNzb3JfaW5pdCgpOwotfQotCi0jZW5kaWYgLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvY29tcHJlc3Nvci96ZnRhcGUtY29tcHJlc3MuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9jb21wcmVzc29yL3pmdGFwZS1jb21wcmVzcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjAwNzQxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9jb21wcmVzc29yL3pmdGFwZS1jb21wcmVzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotI2lmbmRlZiBfWkZUQVBFX0NPTVBSRVNTX0gKLSNkZWZpbmUgX1pGVEFQRV9DT01QUkVTU19ICi0vKgotICogICAgICBDb3B5cmlnaHQgKGMpIDE5OTQtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUKLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQKLSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAKLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksCi0gVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2NvbXByZXNzb3IvemZ0YXBlLWNvbXByZXNzLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMSAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxMjozMiAkCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hY3JvcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHpmdGFwZSdzCi0gKiBidWlsdGluIGNvbXByZXNzaW9uIGNvZGUuCi0gKgotICovCi0KLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXZ0YmwuaCIKLSNpbmNsdWRlICIuLi9jb21wcmVzc29yL2x6cnczLmgiCi0KLS8qIENNUFJfV1JLX01FTV9TSVpFIGdpdmVzIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2lvbiB3cmtfbWVtICovCi0vKiBJIGdvdCB0aGVzZSBvdXQgb2YgbHpydzMuYyAqLwotI2RlZmluZSBVKFgpICAgICAgICAgICAgKChfX3UzMikgWCkKLSNkZWZpbmUgU0laRV9QX0JZVEUgICAgIChVKHNpemVvZihfX3U4ICopKSkKLSNkZWZpbmUgQUxJR05NRU5UX0ZVREdFIChVKDE2KSkKLQotI2RlZmluZSBDTVBSX1dSS19NRU1fU0laRSAoVSg0MDk2KSooU0laRV9QX0JZVEUpICsgQUxJR05NRU5UX0ZVREdFKQotCi0vKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhlIHNpemUgb2YgdGhlICJjb21wcmVzc2VkIiBkYXRhIGNhbgotICogZXhjZWVkIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4gQXMgaXQgaXMgcXVpdGUgdXNlbGVzcyB0byBjb21wcmVzcwotICogZGF0YSB0d2ljZSBpdCBpcyBzb21ldGltZXMgdGhlIGNhc2UgdGhhdCBpdCBpcyBtb3JlIGVmZmljaWVudCB0bwotICogY29weSBhIGJsb2NrIG9mIGRhdGEgYnV0IHRvIGZlZWQgaXQgdG8gdGhlICJjb21wcmVzc2lvbiIKLSAqIGFsZ29yaXRobS4gSW4gdGhpcyBjYXNlIHRoZXJlIGFyZSBzb21lIGZsYWcgYnl0ZXMgb3IgdGhlIGxpa2UKLSAqIHByb2NlZGluZyB0aGUgImNvbXByZXNzZWQiIGRhdGEuICBUSEFUIE1VU1QgTk9UIEJFIFRIRSBDQVNFIGZvciB0aGUKLSAqIGFsZ29yaXRobSB3ZSB1c2UgZm9yIHRoaXMgZHJpdmVyLiBJbnN0ZWFkLCB0aGUgaGlnaCBiaXQgMTUgb2YKLSAqIGNvbXByZXNzZWRfc2l6ZToKLSAqCi0gKiBjb21wcmVzc2VkX3NpemUgPSBmdGFwZV9jb21wcmVzcygpCi0gKgotICogbXVzdCBiZSBzZXQgaW4gc3VjaCBhIGNhc2UuCi0gKgotICogTmV2ZXJ0aGVsZXNzLCBpdCBtaWdodCBhbHNvIGJlIGFzIGZvciBsenJ3MyB0aGF0IHRoZXJlIGlzIGFuCi0gKiAiaW50ZXJtZWRpYXRlIiBvdmVycnVuIHRoYXQgZXhjZWVkcyB0aGUgYW1vdW50IG9mIHRoZSBjb21wcmVzc2VkCi0gKiBkYXRhIHRoYXQgaXMgYWN0dWFsbHkgcHJvZHVjZWQuIER1cmluZyB0aGUgYWxnb3JpdGhtIHdlIG5lZWQgaW4gdGhlCi0gKiB3b3JzdCBjYXNlIE1BWF9DTVBfR1JPVVAgYnl0ZXMgbW9yZSB0aGFuIHRoZSBpbnB1dC1zaXplLgotICovCi0jZGVmaW5lIE1BWF9DTVBfR1JPVVAgKDIrMTYqMikgLyogZnJvbSBsenJ3My5jICovCi0KLSNkZWZpbmUgQ01QUl9PVkVSUlVOICAgICAgTUFYX0NNUF9HUk9VUCAvKiBkdXJpbmcgY29tcHJlc3Npb24gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgICAgIENNUFJfQlVGRkVSX1NJWkUgKE1BWF9CTE9DS19TSVpFICsgQ01QUl9PVkVSUlVOKQotCi0vKiB0aGUgY29tcHJlc3Npb24gbWFwIHN0b3JlcyB0aGUgYnl0ZSBvZmZzZXQgY29tcHJlc3NlZCBibG9ja3Mgd2l0aGluCi0gKiB0aGUgY3VycmVudCB2b2x1bWUgZm9yIGNhdHJpZGdlcyB3aXRoIGZvcm1hdCBjb2RlIDIsMyBhbmQgNQotICogKGFuZCBvbGQgdmVyc2lvbnMgb2YgemZ0YXBlKSBhbmQgdGhlIG9mZnNldCBtZWFzdXJlZCBpbiBraWxvYnl0ZXMgZm9yCi0gKiBmb3JtYXQgY29kZSA0IGFuZCA2LiBUaGlzIGdpdmVzIHVzIGEgcG9zc2libGUgbWF4LiBzaXplIG9mIGEgCi0gKiBjb21wcmVzc2VkIHZvbHVtZSBvZiAxMDI0KjRHSUcgd2hpY2ggc2hvdWxkIGJlIGVub3VnaC4KLSAqLwotdHlwZWRlZiBfX3UzMiBDbXByTWFwOwotCi0vKiBnbG9iYWxzIAotICovCi0KLS8qIGV4cG9ydGVkIGZ1bmN0aW9ucwotICovCi0KLSNlbmRpZiAvKiBfWkZUQVBFX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViYWIwNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jCi0jICAgICAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1LUp1c3R1cyBIZWluZS4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMgCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jIAotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotIwotIyAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvTWFrZWZpbGUsdiAkCi0jICRSZXZpc2lvbjogMS40ICQKLSMgJERhdGU6IDE5OTcvMTAvMDcgMDk6MjY6MDIgJAotIwotIyAgICAgIE1ha2VmaWxlIGZvciB0aGUgbG93bGV2ZWwgcGFydCBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlCi0jICAgICAgZHJpdmVyIGZvciBMaW51eC4KLSMKLQotb2JqLSQoQ09ORklHX0ZUQVBFKSArPSBmdGFwZS5vCi0KLWZ0YXBlLW9ianMgOj0gZnRhcGUtaW5pdC5vIGZkYy1pby5vIGZkYy1pc3IubyBcCi0JICAgICAgZnRhcGUtYnNtLm8gZnRhcGUtY3RsLm8gZnRhcGUtcmVhZC5vIGZ0YXBlLXJ3Lm8gXAotCSAgICAgIGZ0YXBlLXdyaXRlLm8gZnRhcGUtaW8ubyBmdGFwZS1jYWxpYnIubyBmdGFwZS1lY2MubyBmYy0xMC5vIFwKLQkgICAgICBmdGFwZS1idWZmZXIubyBmdGFwZS1mb3JtYXQubyBmdGFwZV9zeW1zLm8KLQotaWZlcSAoJChDT05GSUdfRlRBUEUpLHkpCi1mdGFwZS1vYmpzICs9IGZ0YXBlLXNldHVwLm8KLWVuZGlmCi0KLWlmbmRlZiBDT05GSUdfRlRfTk9fVFJBQ0VfQVRfQUxMCi1mdGFwZS1vYmpzICs9IGZ0YXBlLXRyYWNpbmcubwotZW5kaWYKLQotaWZlcSAoJChDT05GSUdfRlRfUFJPQ19GUykseSkKLWZ0YXBlLW9ianMgKz0gZnRhcGUtcHJvYy5vCi1lbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZjLTEwLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmMtMTAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjMWNkZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmMtMTAuYworKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKgotICoKLQotICAgQ29weXJpZ2h0IChDKSAxOTkzLDE5OTQgSm9uIFRvbWJzLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICBUaGUgZW50aXJlIGd1dHMgb2YgdGhpcyBwcm9ncmFtIHdhcyB3cml0dGVuIGJ5IGRvc2VtdSwgbW9kaWZpZWQgdG8KLSAgIHJlY29yZCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBwb3J0cyBpbiB0aGUgMHgxODAtMHgxODggYWRkcmVzcyBzcGFjZSwKLSAgIHdoaWxlIHJ1bm5pbmcgdGhlIENNUyBwcm9ncmFtIFRBUEUuRVhFIFYyLjAuNSBzdXBwbGllZCB3aXRoIHRoZSBkcml2ZS4KLQotICAgTW9kaWZpZWQgdG8gdXNlIGFuIGFycmF5IG9mIGFkZHJlc3NlcyBhbmQgZ2VuZXJhbGx5IGNsZWFuZWQgdXAgKG1hZGUKLSAgIG11Y2ggc2hvcnRlcikgNCBKdW5lIDk0LCBkb3NlbXUgaXNuJ3QgdGhhdCBnb29kIGF0IHdyaXRpbmcgc2hvcnQgY29kZSBpdAotICAgd291bGQgc2VlbSA6LSkuIE1hZGUgaW5kZXBlbmRlbnQgb2YgMHgxODAsIGJ1dCBJIGRvdWJ0IGl0IHdpbGwgd29yawotICAgYXQgYW55IG90aGVyIGFkZHJlc3MuCi0KLSAgIE1vZGlmaWVkIGZvciBkaXN0cmlidXRpb24gd2l0aCBmdGFwZSBzb3VyY2UuIDIxIEp1bmUgOTQsIFNKTC4KLQotICAgTW9kaWZpY2F0aW9ucyBvbiAyMCBPY3RvYmVyIDk1LCBieSBEYW5pZWwgQ29oZW4gKGNhdG1hbkB3cGkuZWR1KToKLSAgIE1vZGlmaWVkIHRvIHN1cHBvcnQgZGlmZmVyZW50IERNQSwgSVJRLCBhbmQgSU8gUG9ydHMuICBCb3JsYW5kJ3MKLSAgIFR1cmJvIERlYnVnZ2VyIGluIHZpcnR1YWwgODA4NiBtb2RlIChURDM4Ni5FWEUgd2l0aCBoYXJkd2FyZSBicmVha3BvaW50cwotICAgcHJvdmlkZWQgYnkgdGhlIFRESDM4Ni5TWVMgRGV2aWNlIERyaXZlcikgd2FzIHVzZWQgb24gdGhlIENNUyBwcm9ncmFtCi0gICBUQVBFIFY0LjAuNS4gIEkgc2V0IGJyZWFrcG9pbnRzIG9uIEkvTyB0byBwb3J0cyAweDE4MC0weDE4Ny4gIE5vdGUgdGhhdAotICAgQ01TJ3MgcHJvZ3JhbSB3aWxsIG5vdCBzdWNjZXNzZnVsbHkgY29uZmlndXJlIHRoZSB0YXBlIGRyaXZlIGlmIHlvdSBzZXQKLSAgIGJyZWFrcG9pbnRzIG9uIElPIFJlYWRzLCBidXQgeW91IGNhbiBzZXQgdGhlbSBvbiBJTyBXcml0ZXMgd2l0aG91dCBwcm9ibGVtcy4KLSAgIEtub3duIHByb2JsZW1zOgotICAgLSBZb3UgY2FuIG5vdCB1c2UgRE1BIENoYW5uZWxzIDUgb3IgNy4KLQotICAgTW9kaWZpY2F0aW9uIG9uIDI5IEphbnVhcnkgOTYsIGJ5IERhbmllbCBDb2hlbiAoY2F0bWFuQHdwaS5lZHUpOgotICAgTW9kaWZpZWQgdG8gb25seSBhY2NlcHQgSVJRcyAzIC0gNywgb3IgOS4gIFNpbmNlIHdlIGNhbiBvbmx5IHNlbmQgYSAzIGJpdAotICAgbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgSVJRIHRvIHRoZSBjYXJkLCBzcGVjaWFsIGhhbmRsaW5nIGlzIHJlcXVpcmVkIHdoZW4KLSAgIElSUSA5IGlzIHNlbGVjdGVkLiAgSVJRIDIgYW5kIDkgYXJlIHRoZSBzYW1lLCBhbmQgd2Ugc2hvdWxkIHJlcXVlc3QgSVJRIDkKLSAgIGZyb20gdGhlIGtlcm5lbCB3aGlsZSB0ZWxsaW5nIHRoZSBjYXJkIHRvIHVzZSBJUlEgMi4gIFRoYW5rcyB0byBHcmVnCi0gICBDcmlkZXIgKGdjcmlkZXJAaWNsbmV0Lm9yZykgZm9yIGZpbmRpbmcgYW5kIGxvY2F0aW5nIHRoaXMgYnVnLCBhcyB3ZWxsIGFzCi0gICB0ZXN0aW5nIHRoZSBwYXRjaC4KLQotICAgTW9kaWZpY2F0aW9uIG9uIDExIERlY2VtYmVyIDk2LCBieSBDbGF1cyBIZWluZSAoY2xhdXNAbW9tby5tYXRoLnJ3dGgtYWFjaGVuLmRlKToKLSAgIE1vZGlmaWVkIGEgbGl0dGxlIHRvIHVzZSB2YXJpYWhsZSBmdF9mZGNfYmFzZSwgZnRfZmRjX2lycSwgZnRfZmRjX2RtYSAKLSAgIGluc3RlYWQgb2YgcHJlcHJvY2Vzc29yIHN5bWJvbHMuIFRodXMgd2UgY2FuIGNvbXBpbGUgdGhpcyBpbnRvIHRoZSBtb2R1bGUKLSAgIG9yIGtlcm5lbCBhbmQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIG9wdGlvbnMgYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mYy0xMC5jLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6MDQgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGNvZGUgZm9yIHRoZSBDTVMgRkMtMTAvRkMtMjAgY2FyZC4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmMtMTAuaCIKLQotc3RhdGljIF9fdTE2IGluYnNfbWFnaWNbXSA9IHsKLQkweDMsIDB4MywgMHgwLCAweDQsIDB4NywgMHgyLCAweDUsIDB4MywgMHgxLCAweDQsCi0JMHgzLCAweDUsIDB4MiwgMHgwLCAweDMsIDB4NywgMHg0LCAweDIsCi0JMHgwLCAweDEsIDB4MiwgMHgzLCAweDQsIDB4NSwgMHg2LCAweDcKLX07Ci0KLXN0YXRpYyBfX3UxNiBmYzEwX3BvcnRzW10gPSB7Ci0JMHgxODAsIDB4MjEwLCAweDJBMCwgMHgzMDAsIDB4MzMwLCAweDM0MCwgMHgzNzAKLX07Ci0KLWludCBmYzEwX2VuYWJsZSh2b2lkKQotewotCWludCBpOwotCV9fdTggY2FyZENvbmZpZyA9IDB4MDA7Ci0JX191OCB4OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0vKiAgVGhpcyBjb2RlIHdpbGwgb25seSB3b3JrIGlmIHRoZSBGQy0xMCAob3IgRkMtMjApIGlzIHNldCB0bwotICogIHVzZSBETUEgY2hhbm5lbHMgMSwgMiwgb3IgMy4gIERNQSBjaGFubmVscyA1IGFuZCA3IHNlZW0gdG8gYmUgCi0gKiAgaW5pdGlhbGl6ZWQgYnkgdGhlIHNhbWUgY29tbWFuZCBhcyBjaGFubmVscyAxIGFuZCAzLCByZXNwZWN0aXZlbHkuCi0gKi8KLQlpZiAoZnRfZmRjX2RtYSA+IDMpIHsKLQkJVFJBQ0VfQUJPUlQoMCwgZnRfdF9lcnIsCi0iRXJyb3I6IFRoZSBGQy0xMC8yMCBtdXN0IGJlIHNldCB0byB1c2UgRE1BIGNoYW5uZWxzIDEsIDIsIG9yIDMhIik7Ci0JfQotLyogIE9ubHkgYWxsb3cgdGhlIEZDLTEwLzIwIHRvIHVzZSBJUlEgMy03LCBvciA5LiAgTm90ZSB0aGF0IENNUydzIHByb2dyYW0KLSAqICBvbmx5IGFjY2VwdHMgSVJRJ3MgMi03LCBidXQgaW4gbGludXgsIElSUSAyIGlzIHRoZSBzYW1lIGFzIElSUSA5LgotICovCi0JaWYgKGZ0X2ZkY19pcnEgPCAzIHx8IGZ0X2ZkY19pcnEgPT0gOCB8fCBmdF9mZGNfaXJxID4gOSkgewotCQlUUkFDRV9BQk9SVCgwLCBmdF90X2VyciwgCi0iRXJyb3I6IFRoZSBGQy0xMC8yMCBtdXN0IGJlIHNldCB0byB1c2UgSVJRIGxldmVscyAzIC0gNywgb3IgOSFcbiIKLUtFUk5fSU5GTyAiTm90ZTogSVJRIDkgaXMgdGhlIHNhbWUgYXMgSVJRIDIiKTsKLQl9Ci0JLyogIENsZWFyIHN0YXRlIG1hY2hpbmUgPz8/Ci0JICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lURU1TKGluYnNfbWFnaWMpOyBpKyspIHsKLQkJaW5iKGZ0X2ZkY19iYXNlICsgaW5ic19tYWdpY1tpXSk7Ci0JfQotCW91dGIoMHgwLCBmdF9mZGNfYmFzZSk7Ci0KLQl4ID0gaW5iKGZ0X2ZkY19iYXNlKTsKLQlpZiAoeCA9PSAweDEzIHx8IHggPT0gMHg5MykgewotCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCQlpZiAoaW5iKGZ0X2ZkY19iYXNlICsgaSkgIT0geCkgewotCQkJCVRSQUNFX0VYSVQgMDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCVRSQUNFX0VYSVQgMDsKLQl9Ci0KLQlvdXRiKDB4OCwgZnRfZmRjX2Jhc2UpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAoaW5iKGZ0X2ZkY19iYXNlICsgaSkgIT0gMHgwKSB7Ci0JCQlUUkFDRV9FWElUIDA7Ci0JCX0KLQl9Ci0Jb3V0YigweDEwLCBmdF9mZGNfYmFzZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmIChpbmIoZnRfZmRjX2Jhc2UgKyBpKSAhPSAweGZmKSB7Ci0JCQlUUkFDRV9FWElUIDA7Ci0JCX0KLQl9Ci0KLQkvKiAgT2theSwgd2UgZm91bmQgYSBGQy0xMCBjYXJkICEgPz8/Ci0JICovCi0Jb3V0YigweDAsIGZkYy5jY3IpOwotCi0JLyogIENsZWFyIHN0YXRlIG1hY2hpbmUgYWdhaW4gPz8/Ci0JICovCi0JZm9yIChpID0gMDsgaSA8IE5SX0lURU1TKGluYnNfbWFnaWMpOyBpKyspIHsKLQkJaW5iKGZ0X2ZkY19iYXNlICsgaW5ic19tYWdpY1tpXSk7Ci0JfQotCS8qIFNlbmQgaW8gcG9ydCAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9JVEVNUyhmYzEwX3BvcnRzKTsgaSsrKQotCQlpZiAoZnRfZmRjX2Jhc2UgPT0gZmMxMF9wb3J0c1tpXSkKLQkJCWNhcmRDb25maWcgPSBpICsgMTsKLQlpZiAoY2FyZENvbmZpZyA9PSAwKSB7Ci0JCVRSQUNFX0VYSVQgMDsJLyogSW52YWxpZCBJL08gUG9ydCAqLwotCX0KLQkvKiBhbmQgSVJRIC0gSWYgdXNpbmcgSVJRIDksIHRlbGwgdGhlIEZDIGNhcmQgaXQgaXMgYWN0dWFsbHkgSVJRIDIgKi8KLQlpZiAoZnRfZmRjX2lycSAhPSA5KQotCQljYXJkQ29uZmlnIHw9IGZ0X2ZkY19pcnEgPDwgMzsKLQllbHNlCi0JCWNhcmRDb25maWcgfD0gMiA8PCAzOwotCi0JLyogYW5kIGZpbmFsbHkgRE1BIENoYW5uZWwgKi8KLQljYXJkQ29uZmlnIHw9IGZ0X2ZkY19kbWEgPDwgNjsKLQlvdXRiKGNhcmRDb25maWcsIGZ0X2ZkY19iYXNlKTsJLyogRE1BIFsyIGJpdHNdL0lSUSBbMyBiaXRzXS9CQVNFIFszIGJpdHNdICovCi0KLQkvKiAgRW5hYmxlIEZDLTEwID8/PwotCSAqLwotCW91dGIoMCwgZmRjLmNjcik7Ci0Jb3V0YigwLCBmZGMuZG9yMik7Ci0Jb3V0YihGRENfRE1BX01PREUgLyogOCAqLywgZmRjLmRvcik7Ci0Jb3V0YihGRENfRE1BX01PREUgLyogOCAqLywgZmRjLmRvcik7Ci0Jb3V0YigxLCBmZGMuZG9yMik7Ci0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqCi0JICogY0g6IHdoeSB0aGUgaGVsbCBzaG91bGQgdGhpcyBiZSBuZWNlc3Nhcnk/IFRoaXMgaXMgZG9uZSAKLQkgKiAgICAgYnkgZmRjX3Jlc2V0KCkhISEKLQkgKgotCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qICBJbml0aWFsaXplIGZkYywgc2VsZWN0IGRyaXZlIEI6Ci0JICovCi0Jb3V0YihGRENfRE1BX01PREUsIGZkYy5kb3IpOwkvKiBhc3NlcnQgcmVzZXQsIGRtYSAmIGlycSBlbmFibGVkICovCi0JLyogICAgICAgMHgwOCAgICAqLwotCW91dGIoRkRDX0RNQV9NT0RFfEZEQ19SRVNFVF9OT1QsIGZkYy5kb3IpOwkvKiByZWxlYXNlIHJlc2V0ICovCi0JLyogICAgICAgMHgwOCAgICB8ICAgMHgwNCAgID0gMHgwYyAqLwotCW91dGIoRkRDX0RNQV9NT0RFfEZEQ19SRVNFVF9OT1R8RkRDX01PVE9SXzF8RlRBUEVfU0VMX0IsIGZkYy5kb3IpOwotCS8qICAgICAgIDB4MDggICAgfCAgIDB4MDQgICAgICB8ICAweDIwICAgICB8ICAweDAxICA9IDB4MmQgKi8gICAgCi0JLyogc2VsZWN0IGRyaXZlIDEgKi8gLyogd2h5IG5vdCBkcml2ZSAwID8/Pz8gKi8KLQlUUkFDRV9FWElUICh4ID09IDB4OTMpID8gMiA6IDE7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmMtMTAuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mYy0xMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTdiODhiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mYy0xMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotI2lmbmRlZiBfRkNfMTBfSAotI2RlZmluZSBfRkNfMTBfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgQmFzIExhYXJob3Zlbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZmMtMTAuaCx2ICQKLSAqICRSZXZpc2lvbjogMS4xICQKLSAqICREYXRlOiAxOTk3LzA5LzE5IDA5OjA1OjIyICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIEZDLTEwIGNvZGUKLSAqICAgICAgb2YgdGhlIFFJQy00MC84MCBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICovCi0KLS8qCi0gKiAgICAgIGZjLTEwLmMgZGVmaW5lZCBnbG9iYWwgdmFycy4KLSAqLwotCi0vKgotICogICAgICBmYy0xMC5jIGRlZmluZWQgZ2xvYmFsIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuIGludCBmYzEwX2VuYWJsZSh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmRjLWlvLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmRjLWlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiY2Y5MTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAxOTkzLTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZmRjLWlvLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuNy40LjIgJAotICogJERhdGU6IDE5OTcvMTEvMTYgMTQ6NDg6MTcgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBsb3ctbGV2ZWwgZmxvcHB5IGRpc2sgaW50ZXJmYWNlIGNvZGUKLSAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciAiZnRhcGUiIGZvcgotICogICAgICBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9xaWMxMTcuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlzci5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mYy0xMC5oIgotCi0vKiAgICAgIEdsb2JhbCB2YXJzLgotICovCi1zdGF0aWMgaW50IGZ0YXBlX21vdG9yOwotdm9sYXRpbGUgaW50IGZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgPSAtMTsKLXZvbGF0aWxlIGZkY19tb2RlX2VudW0gZmRjX21vZGUgPSBmZGNfaWRsZTsKLWZkY19jb25maWdfaW5mbyBmZGM7Ci1ERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChmdGFwZV93YWl0X2ludHIpOwotCi11bnNpZ25lZCBpbnQgZnRfZmRjX2Jhc2UgICAgICAgPSBDT05GSUdfRlRfRkRDX0JBU0U7Ci11bnNpZ25lZCBpbnQgZnRfZmRjX2lycSAgICAgICAgPSBDT05GSUdfRlRfRkRDX0lSUTsKLXVuc2lnbmVkIGludCBmdF9mZGNfZG1hICAgICAgICA9IENPTkZJR19GVF9GRENfRE1BOwotdW5zaWduZWQgaW50IGZ0X2ZkY190aHJlc2hvbGQgID0gQ09ORklHX0ZUX0ZEQ19USFI7ICAvKiBieXRlcyAqLwotdW5zaWduZWQgaW50IGZ0X2ZkY19yYXRlX2xpbWl0ID0gQ09ORklHX0ZUX0ZEQ19NQVhfUkFURTsgLyogYml0cy9zZWMgKi8KLWludCBmdF9wcm9iZV9mYzEwICAgICAgICA9IENPTkZJR19GVF9QUk9CRV9GQzEwOwotaW50IGZ0X21hY2gyICAgICAgICAgICAgID0gQ09ORklHX0ZUX01BQ0gyOwotCi0vKiAgICAgIExvY2FsIHZhcnMuCi0gKi8KLXN0YXRpYyBzcGlubG9ja190IGZkY19pb19sb2NrOyAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmRjX2NhbGlicl9jb3VudDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmRjX2NhbGlicl90aW1lOwotc3RhdGljIGludCBmZGNfc3RhdHVzOwotdm9sYXRpbGUgX191OCBmZGNfaGVhZDsJCS8qIEZEQyBoZWFkIGZyb20gc2VjdG9yIGlkICovCi12b2xhdGlsZSBfX3U4IGZkY19jeWw7CQkvKiBGREMgdHJhY2sgZnJvbSBzZWN0b3IgaWQgKi8KLXZvbGF0aWxlIF9fdTggZmRjX3NlY3Q7CQkvKiBGREMgc2VjdG9yIGZyb20gc2VjdG9yIGlkICovCi1zdGF0aWMgaW50IGZkY19kYXRhX3JhdGUgPSA1MDA7CS8qIGRhdGEgcmF0ZSAoS2JwcykgKi8KLXN0YXRpYyBpbnQgZmRjX3JhdGVfY29kZTsJLyogZGF0YSByYXRlIGNvZGUgKDAgPT0gNTAwIEticHMpICovCi1zdGF0aWMgaW50IGZkY19zZWVrX3JhdGUgPSAyOwkvKiBzdGVwIHJhdGUgKG1zZWMpICovCi1zdGF0aWMgdm9pZCAoKmRvX2Z0YXBlKSAodm9pZCk7Ci1zdGF0aWMgaW50IGZkY19maWZvX3N0YXRlOwkvKiBvcmlnaW5hbCBmaWZvIHNldHRpbmcgLSBmaWZvIGVuYWJsZWQgKi8KLXN0YXRpYyBpbnQgZmRjX2ZpZm9fdGhyOwkvKiBvcmlnaW5hbCBmaWZvIHNldHRpbmcgLSB0aHJlc2hvbGQgKi8KLXN0YXRpYyBpbnQgZmRjX2xvY2tfc3RhdGU7CS8qIG9yaWdpbmFsIGxvY2sgc2V0dGluZyAtIGxvY2tlZCAqLwotc3RhdGljIGludCBmZGNfZmlmb19sb2NrZWQ7CS8qIGhhcyBmaWZvICYmIGxvY2sgc2V0ID8gKi8KLXN0YXRpYyBfX3U4IGZkY19wcmVjb21wOwkvKiBkZWZhdWx0IHByZWNvbXAuIHZhbHVlIChuc2VjKSAqLwotc3RhdGljIF9fdTggZmRjX3ByZWNfY29kZTsJLyogZmRjIHByZWNvbXAuIHNlbGVjdCBjb2RlICovCi0KLXN0YXRpYyBjaGFyIGZ0YXBlX2lkW10gPSAiZnRhcGUiOyAgLyogdXNlZCBieSByZXF1ZXN0IGlycSBhbmQgZnJlZSBpcnEgKi8KLQotc3RhdGljIGludCBmZGNfc2V0X3NlZWtfcmF0ZShpbnQgc2Vla19yYXRlKTsKLQotdm9pZCBmZGNfY2F0Y2hfc3RyYXlfaW50ZXJydXB0cyhpbnQgY291bnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZGNfaW9fbG9jaywgZmxhZ3MpOwotCWlmIChjb3VudCA9PSAwKSB7Ci0JCWZ0X2V4cGVjdGVkX3N0cmF5X2ludGVycnVwdHMgPSAwOwotCX0gZWxzZSB7Ci0JCWZ0X2V4cGVjdGVkX3N0cmF5X2ludGVycnVwdHMgKz0gY291bnQ7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZkY19pb19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qICBXYWl0IGR1cmluZyBhIHRpbWVvdXQgcGVyaW9kIGZvciBhIGdpdmVuIEZEQyBzdGF0dXMuCi0gKiAgSWYgdXNlY3MgPT0gMCB0aGVuIGp1c3QgdGVzdCBzdGF0dXMsIGVsc2Ugd2FpdCBhdCBsZWFzdCBmb3IgdXNlY3MuCi0gKiAgUmV0dXJucyAtRVRJTUUgb24gdGltZW91dC4gRnVuY3Rpb24gbXVzdCBiZSBjYWxpYnJhdGVkIGZpcnN0ICEKLSAqLwotc3RhdGljIGludCBmZGNfd2FpdCh1bnNpZ25lZCBpbnQgdXNlY3MsIF9fdTggbWFzaywgX191OCBzdGF0ZSkKLXsKLQlpbnQgY291bnRfMSA9IChmZGNfY2FsaWJyX2NvdW50ICogdXNlY3MgKwotICAgICAgICAgICAgICAgICAgICAgICBmZGNfY2FsaWJyX2NvdW50IC0gMSkgLyBmZGNfY2FsaWJyX3RpbWU7Ci0KLQlkbyB7Ci0JCWZkY19zdGF0dXMgPSBpbmJfcChmZGMubXNyKTsKLQkJaWYgKChmZGNfc3RhdHVzICYgbWFzaykgPT0gc3RhdGUpIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JfSB3aGlsZSAoY291bnRfMS0tID49IDApOwotCXJldHVybiAtRVRJTUU7Ci19Ci0KLWludCBmZGNfcmVhZHlfd2FpdCh1bnNpZ25lZCBpbnQgdXNlY3MpCi17Ci0JcmV0dXJuIGZkY193YWl0KHVzZWNzLCBGRENfREFUQV9SRUFEWSB8IEZEQ19CVVNZLCBGRENfREFUQV9SRUFEWSk7Ci19Ci0KLS8qIFdoeSBjYW4ndCB3ZSBqdXN0IHVzZSB1ZGVsYXkoKT8KLSAqLwotc3RhdGljIHZvaWQgZmRjX3VzZWNfd2FpdCh1bnNpZ25lZCBpbnQgdXNlY3MpCi17Ci0JZmRjX3dhaXQodXNlY3MsIDAsIDEpOwkvKiB3aWxsIGFsd2F5cyB0aW1lb3V0ICEgKi8KLX0KLQotc3RhdGljIGludCBmZGNfcmVhZHlfb3V0X3dhaXQodW5zaWduZWQgaW50IHVzZWNzKQotewotCWZkY191c2VjX3dhaXQoRlRfUlFNX0RFTEFZKTsJLyogd2FpdCBmb3IgdmFsaWQgUlFNIHN0YXR1cyAqLwotCXJldHVybiBmZGNfd2FpdCh1c2VjcywgRkRDX0RBVEFfT1VUX1JFQURZLCBGRENfREFUQV9PVVRfUkVBRFkpOwotfQotCi12b2lkIGZkY193YWl0X2NhbGlicmF0ZSh2b2lkKQotewotCWZ0YXBlX2NhbGlicmF0ZSgiZmRjX3dhaXQiLAotCQkJZmRjX3VzZWNfd2FpdCwgJmZkY19jYWxpYnJfY291bnQsICZmZGNfY2FsaWJyX3RpbWUpOyAKLX0KLQotLyogIFdhaXQgZm9yIGEgKHNob3J0KSB3aGlsZSBmb3IgdGhlIEZEQyB0byBiZWNvbWUgcmVhZHkKLSAqICBhbmQgdHJhbnNmZXIgdGhlIG5leHQgY29tbWFuZCBieXRlLgotICogIFJldHVybiAtRVRJTUUgb24gdGltZW91dCBvbiBnZXR0aW5nIHJlYWR5IChkZXBlbmRzIG9uIGhhcmR3YXJlISkuCi0gKi8KLXN0YXRpYyBpbnQgZmRjX3dyaXRlKGNvbnN0IF9fdTggZGF0YSkKLXsKLQlmZGNfdXNlY193YWl0KEZUX1JRTV9ERUxBWSk7CS8qIHdhaXQgZm9yIHZhbGlkIFJRTSBzdGF0dXMgKi8KLQlpZiAoZmRjX3dhaXQoMTUwLCBGRENfREFUQV9SRUFEWV9NQVNLLCBGRENfREFUQV9JTl9SRUFEWSkgPCAwKSB7Ci0JCXJldHVybiAtRVRJTUU7Ci0JfSBlbHNlIHsKLQkJb3V0YihkYXRhLCBmZGMuZmlmbyk7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotLyogIFdhaXQgZm9yIGEgKHNob3J0KSB3aGlsZSBmb3IgdGhlIEZEQyB0byBiZWNvbWUgcmVhZHkKLSAqICBhbmQgdHJhbnNmZXIgdGhlIG5leHQgcmVzdWx0IGJ5dGUuCi0gKiAgUmV0dXJuIC1FVElNRSBpZiB0aW1lb3V0IG9uIGdldHRpbmcgcmVhZHkgKGRlcGVuZHMgb24gaGFyZHdhcmUhKS4KLSAqLwotc3RhdGljIGludCBmZGNfcmVhZChfX3U4ICogZGF0YSkKLXsKLQlmZGNfdXNlY193YWl0KEZUX1JRTV9ERUxBWSk7CS8qIHdhaXQgZm9yIHZhbGlkIFJRTSBzdGF0dXMgKi8KLQlpZiAoZmRjX3dhaXQoMTUwLCBGRENfREFUQV9SRUFEWV9NQVNLLCBGRENfREFUQV9PVVRfUkVBRFkpIDwgMCkgewotCQlyZXR1cm4gLUVUSU1FOwotCX0gZWxzZSB7Ci0JCSpkYXRhID0gaW5iKGZkYy5maWZvKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0vKiAgT3V0cHV0IGEgY21kX2xlbiBsb25nIGNvbW1hbmQgc3RyaW5nIHRvIHRoZSBGREMuCi0gKiAgVGhlIEZEQyBzaG91bGQgYmUgcmVhZHkgdG8gcmVjZWl2ZSBhIG5ldyBjb21tYW5kIG9yCi0gKiAgYW4gZXJyb3IgKEVCVVNZIG9yIEVUSU1FKSB3aWxsIG9jY3VyLgotICovCi1pbnQgZmRjX2NvbW1hbmQoY29uc3QgX191OCAqIGNtZF9kYXRhLCBpbnQgY21kX2xlbikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjb3VudCA9IGNtZF9sZW47Ci0JaW50IHJldHJ5ID0gMDsKLSNpZmRlZiBURVNUSU5HCi0Jc3RhdGljIHVuc2lnbmVkIGludCBsYXN0X3RpbWU7Ci0JdW5zaWduZWQgaW50IHRpbWU7Ci0jZW5kaWYKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JZmRjX3VzZWNfd2FpdChGVF9SUU1fREVMQVkpOwkvKiB3YWl0IGZvciB2YWxpZCBSUU0gc3RhdHVzICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZkY19pb19sb2NrLCBmbGFncyk7Ci0JaWYgKCFpbl9pbnRlcnJ1cHQoKSkKLQkJLyogWWVzLCBJIGtub3csIHRvbyBtdWNoIGNvbW1lbnRzIGluc2lkZSB0aGlzIGZ1bmN0aW9uCi0JCSAqIC4uLgotCQkgKiAKLQkJICogWWV0IGFub3RoZXIgYnVnIGluIHRoZSBvcmlnaW5hbCBkcml2ZXIuIEFsbCB0aGF0Ci0JCSAqIGhhdm9jIGlzIGNhdXNlZCBieSB0aGUgZmFjdCB0aGF0IHRoZSBpc3IoKSBzZW5kcwotCQkgKiBpdHNlbGYgYSBjb21tYW5kIHRvIHRoZSBmbG9wcHkgdGFwZSBkcml2ZXIgKHBhdXNlLAotCQkgKiBtaWNybyBzdGVwIHBhdXNlKS4gIE5vdywgdGhlIHByb2JsZW0gaXMgdGhhdAotCQkgKiBjb21tYW5kcyBhcmUgdHJhbnNtaXR0ZWQgdmlhIHRoZSBmZGNfc2VlawotCQkgKiBjb21tYW5kLiBCdXQ6IHRoZSBmZGMgcGVyZm9ybXMgc2Vla3MgaW4gdGhlCi0JCSAqIGJhY2tncm91bmQgaS5lLiBpdCBkb2Vzbid0IHNpZ25hbCBidXN5IHdoaWxlCi0JCSAqIHNlbmRpbmcgdGhlIHN0ZXAgcHVsc2VzIHRvIHRoZSBkcml2ZS4gVGhlcmVmb3JlIHRoZQotCQkgKiBub24taW50ZXJydXB0IGxldmVsIGRyaXZlciBoYXMgbm8gY2hhbmNlIHRvIHRlbGwKLQkJICogd2hldGhlciB0aGUgaXNyKCkganVzdCBoYXMgaXNzdWVkIGEgc2Vlay4gVGhlcmVmb3JlCi0JCSAqIHdlIEhBVkUgVE8gaGF2ZSBhIGxvb2sgYXQgdGhlIGZ0X2hpZGVfaW50ZXJydXB0Ci0JCSAqIGZsYWc6IGl0IHNpZ25hbHMgdGhlIG5vbi1pbnRlcnJ1cHQgbGV2ZWwgcGFydCBvZgotCQkgKiB0aGUgZHJpdmVyIHRoYXQgaXQgaGFzIHRvIHdhaXQgZm9yIHRoZSBmZGMgdW50aWwgaXQKLQkJICogaGFzIGNvbXBsZXRldCBzZWVraW5nLgotCQkgKgotCQkgKiBUSElTIFdBUyBQUkVTVU1BQkxZIFRIRSBSRUFTT04gRk9SIEFMTCBUSEFUCi0JCSAqICJmZGNfcmVhZCB0aW1lb3V0IiBlcnJvcnMsIEkgSE9QRSA6LSkKLQkJICovCi0JCWlmIChmdF9oaWRlX2ludGVycnVwdCkgewotCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7Ci0JCQlUUkFDRShmdF90X2luZm8sCi0JCQkgICAgICAiV2FpdGluZyBmb3IgdGhlIGlzcigpIGNvbXBsZXRpbmcgZmRjX3NlZWsoKSIpOwotCQkJaWYgKGZkY19pbnRlcnJ1cHRfd2FpdCgyICogRlRfU0VDT05EKSA8IDApIHsKLQkJCQlUUkFDRShmdF90X3dhcm4sCi0JCSAgICAgICJXYXJuaW5nOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGlzcigpIHNlZWsgdG8gY29tcGxldGUiKTsKLQkJCX0KLQkJCWlmIChmdF9oaWRlX2ludGVycnVwdCB8fCAhZnRfc2Vla19jb21wbGV0ZWQpIHsKLQkJCQkvKiBUaGVyZSBjYW5ub3QgYmUgYW5vdGhlcgotCQkJCSAqIGludGVycnVwdC4gVGhlIGlzcigpIG9ubHkgc3RvcHMKLQkJCQkgKiB0aGUgdGFwZSBhbmQgdGhlIG5leHQgaW50ZXJydXB0Ci0JCQkJICogd29uJ3QgY29tZSB1bnRpbCB3ZSBoYXZlIHNlbmQgb3VyCi0JCQkJICogY29tbWFuZCB0byB0aGUgZHJpdmUuCi0JCQkJICovCi0JCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9idWcsCi0JCQkJCSAgICAiQlVHPyBpc3IoKSBpcyBzdGlsbCBzZWVraW5nP1xuIgotCQkJCQkgICAgS0VSTl9JTkZPICJoaWRlOiAlZFxuIgotCQkJCQkgICAgS0VSTl9JTkZPICJzZWVrOiAlZCIsCi0JCQkJCSAgICBmdF9oaWRlX2ludGVycnVwdCwKLQkJCQkJICAgIGZ0X3NlZWtfY29tcGxldGVkKTsKLQotCQkJfQotCQkJZmRjX3VzZWNfd2FpdChGVF9SUU1fREVMQVkpOwkvKiB3YWl0IGZvciB2YWxpZCBSUU0gc3RhdHVzICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQkJfQotCWZkY19zdGF0dXMgPSBpbmIoZmRjLm1zcik7Ci0JaWYgKChmZGNfc3RhdHVzICYgRkRDX0RBVEFfUkVBRFlfTUFTSykgIT0gRkRDX0RBVEFfSU5fUkVBRFkpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQkJVFJBQ0VfQUJPUlQoLUVCVVNZLCBmdF90X2VyciwgImZkYyBub3QgcmVhZHkiKTsKLQl9IAotCWZkY19tb2RlID0gKmNtZF9kYXRhOwkvKiB1c2VkIGJ5IGlzciAqLwotI2lmZGVmIFRFU1RJTkcKLQlpZiAoZmRjX21vZGUgPT0gRkRDX1NFRUspIHsKLQkJdGltZSA9IGZ0YXBlX3RpbWVkaWZmKGxhc3RfdGltZSwgZnRhcGVfdGltZXN0YW1wKCkpOwotCQlpZiAodGltZSA8IDYwMDApIHsKLQlUUkFDRShmdF90X2J1ZywiV2FybmluZzogc2hvcnQgdGltZW91dCBiZXR3ZWVuIHNlZWsgY29tbWFuZHM6ICVkIiwKLQkgICAgICB0aW1lKTsKLQkJfQotCX0KLSNlbmRpZgotCWlmICghaW5faW50ZXJydXB0KCkpIHsKLQkJLyogc2hvdWxkbid0IGJlIGNsZWFyZWQgaWYgY2FsbGVkIGZyb20gaXNyCi0JCSAqLwotCQlmdF9pbnRlcnJ1cHRfc2VlbiA9IDA7Ci0JfQotCXdoaWxlIChjb3VudCkgewotCQlyZXN1bHQgPSBmZGNfd3JpdGUoKmNtZF9kYXRhKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCVRSQUNFKGZ0X3RfZmRjX2RtYSwKLQkJCSAgICAgICJmZGNfbW9kZSA9ICUwMngsIHN0YXR1cyA9ICUwMnggYXQgaW5kZXggJWQiLAotCQkJICAgICAgKGludCkgZmRjX21vZGUsIChpbnQpIGZkY19zdGF0dXMsCi0JCQkgICAgICBjbWRfbGVuIC0gY291bnQpOwotCQkJaWYgKCsrcmV0cnkgPD0gMykgewotCQkJCVRSQUNFKGZ0X3Rfd2FybiwgImZkY193cml0ZSB0aW1lb3V0LCByZXRyeSIpOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X2VyciwgImZkY193cml0ZSB0aW1lb3V0LCBmYXRhbCIpOwotCQkJCS8qIHJlY292ZXIgPz8/ICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQktLWNvdW50OwotCQkJKytjbWRfZGF0YTsKLQkJfQotICAgICAgICB9Ci0jaWZkZWYgVEVTVElORwotCWlmIChmZGNfbW9kZSA9PSBGRENfU0VFSykgewotCQlsYXN0X3RpbWUgPSBmdGFwZV90aW1lc3RhbXAoKTsKLQl9Ci0jZW5kaWYKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZGNfaW9fbG9jaywgZmxhZ3MpOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0vKiAgSW5wdXQgYSByZXNfbGVuIGxvbmcgcmVzdWx0IHN0cmluZyBmcm9tIHRoZSBGREMuCi0gKiAgVGhlIEZEQyBzaG91bGQgYmUgcmVhZHkgdG8gc2VuZCB0aGUgcmVzdWx0IG9yIGFuIGVycm9yCi0gKiAgKEVCVVNZIG9yIEVUSU1FKSB3aWxsIG9jY3VyLgotICovCi1pbnQgZmRjX3Jlc3VsdChfX3U4ICogcmVzX2RhdGEsIGludCByZXNfbGVuKQotewotCWludCByZXN1bHQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGNvdW50ID0gcmVzX2xlbjsKLQlpbnQgcmV0cnkgPSAwOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQlmZGNfc3RhdHVzID0gaW5iKGZkYy5tc3IpOwotCWlmICgoZmRjX3N0YXR1cyAmIEZEQ19EQVRBX1JFQURZX01BU0spICE9IEZEQ19EQVRBX09VVF9SRUFEWSkgewotCQlUUkFDRShmdF90X2VyciwgImZkYyBub3QgcmVhZHkiKTsKLQkJcmVzdWx0ID0gLUVCVVNZOwotCX0gZWxzZSB3aGlsZSAoY291bnQpIHsKLQkJaWYgKCEoZmRjX3N0YXR1cyAmIEZEQ19CVVNZKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQkJCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLCAicHJlbWF0dXJlIGVuZCBvZiByZXN1bHQgcGhhc2UiKTsKLQkJfQotCQlyZXN1bHQgPSBmZGNfcmVhZChyZXNfZGF0YSk7Ci0JCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlUUkFDRShmdF90X2ZkY19kbWEsCi0JCQkgICAgICAiZmRjX21vZGUgPSAlMDJ4LCBzdGF0dXMgPSAlMDJ4IGF0IGluZGV4ICVkIiwKLQkJCSAgICAgIChpbnQpIGZkY19tb2RlLAotCQkJICAgICAgKGludCkgZmRjX3N0YXR1cywKLQkJCSAgICAgIHJlc19sZW4gLSBjb3VudCk7Ci0JCQlpZiAoKytyZXRyeSA8PSAzKSB7Ci0JCQkJVFJBQ0UoZnRfdF93YXJuLCAiZmRjX3JlYWQgdGltZW91dCwgcmV0cnkiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJVFJBQ0UoZnRfdF9lcnIsICJmZGNfcmVhZCB0aW1lb3V0LCBmYXRhbCIpOwotCQkJCS8qIHJlY292ZXIgPz8/ICovCi0JCQkJYnJlYWs7Ci0JCQkJKytyZXRyeTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS0tY291bnQ7Ci0JCQkrK3Jlc19kYXRhOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZkY19pb19sb2NrLCBmbGFncyk7Ci0JZmRjX3VzZWNfd2FpdChGVF9SUU1fREVMQVkpOwkvKiBhbGxvdyBGREMgdG8gbmVnYXRlIEJTWSAqLwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0vKiAgICAgIEhhbmRsZSBjb21tYW5kIGFuZCByZXN1bHQgcGhhc2VzIGZvcgotICogICAgICBjb21tYW5kcyB3aXRob3V0IGRhdGEgcGhhc2UuCi0gKi8KLXN0YXRpYyBpbnQgZmRjX2lzc3VlX2NvbW1hbmQoY29uc3QgX191OCAqIG91dF9kYXRhLCBpbnQgb3V0X2NvdW50LAotCQkgICAgICBfX3U4ICogaW5fZGF0YSwgaW50IGluX2NvdW50KQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAob3V0X2NvdW50ID4gMCkgewotCQlUUkFDRV9DQVRDSChmZGNfY29tbWFuZChvdXRfZGF0YSwgb3V0X2NvdW50KSwpOwotCX0KLQkvKiB3aWxsIHRha2UgMjQgLSAzMCB1c2VjIGZvciBmZGNfc2Vuc2VfZHJpdmVfc3RhdHVzIGFuZAotCSAqIGZkY19zZW5zZV9pbnRlcnJ1cHRfc3RhdHVzIGNvbW1hbmRzLgotCSAqICAgIDM1IGZhaWxzIHNvbWV0aW1lcyAoNS85LzkzIFNKTCkKLQkgKiBPbiBhIGxvYWRlZCBzeXN0ZW0gaXQgaW5jaWRlbnRhbGx5IHRha2VzIGxvbmdlciB0aGFuCi0JICogdGhpcyBmb3IgdGhlIGZkYyB0byBnZXQgcmVhZHkgISA/Pz8/Pz8gV0hZID8/Pz8/PwotCSAqIFNvIHVudGlsIHdlIGtub3cgd2hhdCdzIGdvaW5nIG9uIHVzZSBhIHZlcnkgbG9uZyB0aW1lb3V0LgotCSAqLwotCVRSQUNFX0NBVENIKGZkY19yZWFkeV9vdXRfd2FpdCg1MDAgLyogdXNlYyAqLyksKTsKLQlpZiAoaW5fY291bnQgPiAwKSB7Ci0JCVRSQUNFX0NBVENIKGZkY19yZXN1bHQoaW5fZGF0YSwgaW5fY291bnQpLAotCQkJICAgIFRSQUNFKGZ0X3RfZXJyLCAicmVzdWx0IHBoYXNlIGFib3J0ZWQiKSk7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogICAgICBXYWl0IGZvciBGREMgaW50ZXJydXB0IHdpdGggdGltZW91dCAoaW4gbWlsbGlzZWNvbmRzKS4KLSAqICAgICAgU2lnbmFscyBhcmUgYmxvY2tlZCBzbyB0aGUgd2FpdCB3aWxsIG5vdCBiZSBhYm9ydGVkLgotICogICAgICBOb3RlOiBpbnRlcnJ1cHRzIG11c3QgYmUgZW5hYmxlZCAhICgyMy8wNS85MyBTSkwpCi0gKi8KLWludCBmZGNfaW50ZXJydXB0X3dhaXQodW5zaWduZWQgaW50IHRpbWUpCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCxjdXJyZW50KTsKLQlzaWdzZXRfdCBvbGRfc2lnbWFzazsJCi0Jc3RhdGljIGludCByZXNldHRpbmc7Ci0JbG9uZyB0aW1lb3V0OwotCi0JVFJBQ0VfRlVOKGZ0X3RfZmRjX2RtYSk7Ci0KLSAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmZ0YXBlX3dhaXRfaW50cikpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsICJlcnJvcjogbmVzdGVkIGNhbGwiKTsKLQl9Ci0JLyogdGltZW91dCB0aW1lIHdpbGwgYmUgdXAgdG8gVVNQVCBtaWNyb3NlY29uZHMgdG9vIGxvbmcgISAqLwotCXRpbWVvdXQgPSAoMTAwMCAqIHRpbWUgKyBGVF9VU1BUIC0gMSkgLyBGVF9VU1BUOwotCi0Jc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jb2xkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOwotCXNpZ2ZpbGxzZXQoJmN1cnJlbnQtPmJsb2NrZWQpOwotCXJlY2FsY19zaWdwZW5kaW5nKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JYWRkX3dhaXRfcXVldWUoJmZ0YXBlX3dhaXRfaW50ciwgJndhaXQpOwotCXdoaWxlICghZnRfaW50ZXJydXB0X3NlZW4gJiYgdGltZW91dCkKLQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lb3V0KTsKLQotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBvbGRfc2lnbWFzazsKLQlyZWNhbGNfc2lncGVuZGluZygpOwotCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JCi0JcmVtb3ZlX3dhaXRfcXVldWUoJmZ0YXBlX3dhaXRfaW50ciwgJndhaXQpOwotCS8qICB0aGUgZm9sbG93aW5nIElTIG5lY2Vzc2FyeS4gVHJ1ZTogYXMgd2VsbAotCSAqICB3YWtlX3VwX2ludGVycnVwdGlibGUoKSBhcyB0aGUgc2NoZWR1bGUoKSBzZXQgVEFTS19SVU5OSU5HCi0JICogIHdoZW4gdGhleSB3YWtldXAgYSB0YXNrLCBCVVQ6IGl0IG1heSB2ZXJ5IHdlbGwgYmUgdGhhdAotCSAqICBmdF9pbnRlcnJ1cHRfc2VlbiBpcyBhbHJlYWR5IHNldCB0byAxIHdoZW4gd2UgZW50ZXIgaGVyZQotCSAqICBpbiB3aGljaCBjYXNlIHNjaGVkdWxlKCkgZ2V0cyBuZXZlciBjYWxsZWQsIGFuZAotCSAqICBUQVNLX1JVTk5JTkcgbmV2ZXIgc2V0LiBUaGlzIGhhcyB0aGUgZnVubnkgZWZmZWN0IHRoYXQgd2UKLQkgKiAgZXhlY3V0ZSBhbGwgdGhlIGNvZGUgdW50aWwgd2UgbGVhdmUga2VybmVsIHNwYWNlLCBidXQgdGhlbgotCSAqICB0aGUgdGFzayBpcyBzdG9wcGVkIChhIHRhc2sgQ0FOTk9UIGJlIHByZWVtcHRlZCB3aGlsZSBpbgotCSAqICBrZXJuZWwgbW9kZS4gU2VuZGluZyBhIHBhaXIgb2YgU0lHU1RPUC9TSUdDT05UIHRvIHRoZQotCSAqICB0YXNrcyB3YWtlcyBpdCB1cCBhZ2Fpbi4gRnVubnkhIDotKQotCSAqLwotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOyAKLQlpZiAoZnRfaW50ZXJydXB0X3NlZW4pIHsgLyogd29rZW4gdXAgYnkgaW50ZXJydXB0ICovCi0JCWZ0X2ludGVycnVwdF9zZWVuID0gMDsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLQkvKiAgT3JpZ2luYWwgY29tbWVudDoKLQkgKiAgSW4gZmlyc3QgaW5zdGFuY2UsIG5leHQgc3RhdGVtZW50IHNlZW1zIHVubmVjZXNzYXJ5IHNpbmNlCi0JICogIGl0IHdpbGwgYmUgY2xlYXJlZCBpbiBmZGNfY29tbWFuZC4gSG93ZXZlciwgYSBzbWFsbCBwYXJ0IG9mCi0JICogIHRoZSBzb2Z0d2FyZSBzZWVtcyB0byByZWx5IG9uIHRoaXMgYmVpbmcgY2xlYXJlZCBoZXJlCi0JICogIChmdGFwZV9jbG9zZSBtaWdodCBmYWlsKSBzbyBzdGljayB0byBpdCB1bnRpbCB0aGluZ3MgZ2V0IGZpeGVkICEKLQkgKi8KLQkvKiAgTXkgZGVlcGx5IHNvdWdodCBvZiBrbm93bGVkZ2U6Ci0JICogIEJlaG9sZCBOTyEgSXQgaXMgb2J2aW91cy4gZmRjX3Jlc2V0KCkgZG9lc24ndCBjYWxsIGZkY19jb21tYW5kKCkKLQkgKiAgYnV0IG5ldmVydGhlbGVzcyB1c2VzIGZkY19pbnRlcnJ1cHRfd2FpdCgpLiBPRiBDT1VSU0UgdGhpcyBuZWVkcyB0bwotCSAqICBiZSByZXNldCBoZXJlLgotCSAqLwotCWZ0X2ludGVycnVwdF9zZWVuID0gMDsJLyogY2xlYXIgZm9yIG5leHQgY2FsbCAqLwotCWlmICghcmVzZXR0aW5nKSB7Ci0JCXJlc2V0dGluZyA9IDE7CS8qIGJyZWFrIGluZmluaXRlIHJlY3Vyc2lvbiBpZiByZXNldCBmYWlscyAqLwotCQlUUkFDRShmdF90X2FueSwgImNsZWFudXAgcmVzZXQiKTsKLQkJZmRjX3Jlc2V0KCk7Ci0JCXJlc2V0dGluZyA9IDA7Ci0JfQotCVRSQUNFX0VYSVQgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSA/IC1FSU5UUiA6IC1FVElNRTsKLX0KLQotLyogICAgICBTdGFydC9zdG9wIGRyaXZlIG1vdG9yLiBFbmFibGUgRE1BIG1vZGUuCi0gKi8KLXZvaWQgZmRjX21vdG9yKGludCBtb3RvcikKLXsKLQlpbnQgdW5pdCA9IGZ0X2RyaXZlX3NlbDsKLQlpbnQgZGF0YSA9IHVuaXQgfCBGRENfUkVTRVRfTk9UIHwgRkRDX0RNQV9NT0RFOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlmdGFwZV9tb3RvciA9IG1vdG9yOwotCWlmIChmdGFwZV9tb3RvcikgewotCQlkYXRhIHw9IEZEQ19NT1RPUl8wIDw8IHVuaXQ7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJ0dXJuaW5nIG1vdG9yICVkIG9uIiwgdW5pdCk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInR1cm5pbmcgbW90b3IgJWQgb2ZmIiwgdW5pdCk7Ci0JfQotCWlmIChmdF9tYWNoMikgewotCQlvdXRiX3AoZGF0YSwgZmRjLmRvcjIpOwotCX0gZWxzZSB7Ci0JCW91dGJfcChkYXRhLCBmZGMuZG9yKTsKLQl9Ci0JZnRhcGVfc2xlZXAoMTAgKiBGVF9NSUxMSVNFQ09ORCk7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotc3RhdGljIHZvaWQgZmRjX3VwZGF0ZV9kc3Iodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JVFJBQ0UoZnRfdF9mbG93LCAicmF0ZSA9ICVkIEticHMsIHByZWNvbXAgPSAlZCBucyIsCi0JICAgICAgZmRjX2RhdGFfcmF0ZSwgZmRjX3ByZWNvbXApOwotCWlmIChmZGMudHlwZSA+PSBpODIwNzcpIHsKLQkJb3V0Yl9wKChmZGNfcmF0ZV9jb2RlICYgMHgwMykgfCBmZGNfcHJlY19jb2RlLCBmZGMuZHNyKTsKLQl9IGVsc2UgewotCQlvdXRiX3AoZmRjX3JhdGVfY29kZSAmIDB4MDMsIGZkYy5jY3IpOwotCX0KLQlUUkFDRV9FWElUOwotfQotCi12b2lkIGZkY19zZXRfd3JpdGVfcHJlY29tcChpbnQgcHJlY29tcCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIk5ldyBwcmVjb21wOiAlZCBuc2VjIiwgcHJlY29tcCk7Ci0JZmRjX3ByZWNvbXAgPSBwcmVjb21wOwotCS8qICB3cml0ZSBwcmVjb21wZW5zYXRpb24gY2FuIGJlIHNldCBpbiBtdWx0aXBsZXMgb2YgNDEuNjcgbnNlYy4KLQkgKiAgcm91bmQgdGhlIHBhcmFtZXRlciB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBhbmQgY29udmVydCBpdAotCSAqICBpbnRvIGEgZmRjIHNldHRpbmcuIE5vdGUgdGhhdCAwIG1lYW5zIGRlZmF1bHQgdG8gdGhlIGZkYywKLQkgKiAgNyBpcyB1c2VkIGluc3RlYWQgb2YgdGhhdC4KLQkgKi8KLQlmZGNfcHJlY19jb2RlID0gKChmZGNfcHJlY29tcCArIDIxKSAvIDQyKSA8PCAyOwotCWlmIChmZGNfcHJlY19jb2RlID09IDAgfHwgZmRjX3ByZWNfY29kZSA+ICg2IDw8IDIpKSB7Ci0JCWZkY19wcmVjX2NvZGUgPSA3IDw8IDI7Ci0JfQotCWZkY191cGRhdGVfZHNyKCk7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogIFJlcHJvZ3JhbSB0aGUgODIwNzggcmVnaXN0ZXJzIHRvIHVzZSBEYXRhIFJhdGUgVGFibGUgMSBvbiBhbGwgZHJpdmVzLgotICovCi1zdGF0aWMgdm9pZCBmZGNfc2V0X2RyaXZlX3NwZWNzKHZvaWQpCi17Ci0JX191OCBjbWRbXSA9IHsgRkRDX0RSSVZFX1NQRUMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzB9OwotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCVRSQUNFKGZ0X3RfZmxvdywgIlNldHRpbmcgb2YgZHJpdmUgc3BlY3MgY2FsbGVkIik7Ci0JaWYgKGZkYy50eXBlID49IGk4MjA3OF8xKSB7Ci0JCWNtZFsxXSA9ICgwIDw8IDUpIHwgKDIgPDwgMik7Ci0JCWNtZFsyXSA9ICgxIDw8IDUpIHwgKDIgPDwgMik7Ci0JCWNtZFszXSA9ICgyIDw8IDUpIHwgKDIgPDwgMik7Ci0JCWNtZFs0XSA9ICgzIDw8IDUpIHwgKDIgPDwgMik7Ci0JCXJlc3VsdCA9IGZkY19jb21tYW5kKGNtZCwgTlJfSVRFTVMoY21kKSk7Ci0JCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlUUkFDRShmdF90X2VyciwgIlNldHRpbmcgb2YgZHJpdmUgc3BlY3MgZmFpbGVkIik7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogU2VsZWN0IGNsb2NrIGZvciBmZGMsIG11c3QgY29ycmVzcG9uZCB3aXRoIHRhcGUgZHJpdmUgc2V0dGluZyAhCi0gKiBUaGlzIGFsc28gaW5mbHVlbmNlcyB0aGUgZmRjIHRpbWluZyBzbyB3ZSBtdXN0IGFkanVzdCBzb21lIHZhbHVlcy4KLSAqLwotaW50IGZkY19zZXRfZGF0YV9yYXRlKGludCByYXRlKQotewotCWludCBiYWRfcmF0ZSA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qIFNlbGVjdCBjbG9jayBmb3IgZmRjLCBtdXN0IGNvcnJlc3BvbmQgd2l0aCB0YXBlIGRyaXZlIHNldHRpbmcgIQotCSAqIFRoaXMgYWxzbyBpbmZsdWVuY2VzIHRoZSBmZGMgdGltaW5nIHNvIHdlIG11c3QgYWRqdXN0IHNvbWUgdmFsdWVzLgotCSAqLwotCVRSQUNFKGZ0X3RfZmRjX2RtYSwgIm5ldyByYXRlID0gJWQiLCByYXRlKTsKLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDI1MDoKLQkJZmRjX3JhdGVfY29kZSA9IGZkY19kYXRhX3JhdGVfMjUwOwotCQlicmVhazsKLQljYXNlIDUwMDoKLQkJZmRjX3JhdGVfY29kZSA9IGZkY19kYXRhX3JhdGVfNTAwOwotCQlicmVhazsKLQljYXNlIDEwMDA6Ci0JCWlmIChmZGMudHlwZSA8IGk4MjA3NykgewotCQkJYmFkX3JhdGUgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCQlmZGNfcmF0ZV9jb2RlID0gZmRjX2RhdGFfcmF0ZV8xMDAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgMjAwMDoKLQkJaWYgKGZkYy50eXBlIDwgaTgyMDc4XzEpIHsKLQkJCWJhZF9yYXRlID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkJZmRjX3JhdGVfY29kZSA9IGZkY19kYXRhX3JhdGVfMjAwMDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQliYWRfcmF0ZSA9IDE7Ci0gICAgICAgIH0KLQlpZiAoYmFkX3JhdGUpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywKLQkJCSAgICBmdF90X2ZkY19kbWEsICIlZCBpcyBub3QgYSB2YWxpZCBkYXRhIHJhdGUiLCByYXRlKTsKLQl9Ci0JZmRjX2RhdGFfcmF0ZSA9IHJhdGU7Ci0JZmRjX3VwZGF0ZV9kc3IoKTsKLQlmZGNfc2V0X3NlZWtfcmF0ZShmZGNfc2Vla19yYXRlKTsgIC8qIGNsb2NrIGNoYW5nZWQhICovCi0JZnRhcGVfdWRlbGF5KDEwMDApOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogIGtlZXAgdGhlIHVuaXQgc2VsZWN0IGlmIGtlZXBfc2VsZWN0IGlzICE9IDAsCi0gKi8KLXN0YXRpYyB2b2lkIGZkY19kb3JfcmVzZXQoaW50IGtlZXBfc2VsZWN0KQotewotCV9fdTggZmRjX2N0bCA9IGZ0X2RyaXZlX3NlbDsKLQotCWlmIChrZWVwX3NlbGVjdCAhPSAwKSB7Ci0JCWZkY19jdGwgfD0gRkRDX0RNQV9NT0RFOwotCQlpZiAoZnRhcGVfbW90b3IpIHsKLQkJCWZkY19jdGwgfD0gRkRDX01PVE9SXzAgPDwgZnRfZHJpdmVfc2VsOwotCQl9Ci0JfQotCWZ0YXBlX3VkZWxheSgxMCk7IC8qID8/PyBidXQgc2VlbXMgdG8gYmUgbmVjZXNzYXJ5ICovCi0JaWYgKGZ0X21hY2gyKSB7Ci0JCW91dGJfcChmZGNfY3RsICYgMHgwZiwgZmRjLmRvcik7Ci0JCW91dGJfcChmZGNfY3RsLCBmZGMuZG9yMik7Ci0JfSBlbHNlIHsKLQkJb3V0Yl9wKGZkY19jdGwsIGZkYy5kb3IpOwotCX0KLQlmZGNfdXNlY193YWl0KDEwKTsgLyogZGVsYXkgPj0gMTQgZmRjIGNsb2NrcyAqLwotCWlmIChrZWVwX3NlbGVjdCA9PSAwKSB7Ci0JCWZkY19jdGwgPSAwOwotCX0KLQlmZGNfY3RsIHw9IEZEQ19SRVNFVF9OT1Q7Ci0JaWYgKGZ0X21hY2gyKSB7Ci0JCW91dGJfcChmZGNfY3RsICYgMHgwZiwgZmRjLmRvcik7Ci0JCW91dGJfcChmZGNfY3RsLCBmZGMuZG9yMik7Ci0JfSBlbHNlIHsKLQkJb3V0Yl9wKGZkY19jdGwsIGZkYy5kb3IpOwotCX0KLX0KLQotLyogICAgICBSZXNldCB0aGUgZmxvcHB5IGRpc2sgY29udHJvbGxlci4gTGVhdmUgdGhlIGZ0YXBlX3VuaXQgc2VsZWN0ZWQuCi0gKi8KLXZvaWQgZmRjX3Jlc2V0KHZvaWQpCi17Ci0JaW50IHN0MDsKLQlpbnQgaTsKLQlpbnQgZHVtbXk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZkY19pb19sb2NrLCBmbGFncyk7Ci0KLQlmZGNfZG9yX3Jlc2V0KDEpOyAvKiBrZWVwIHVuaXQgc2VsZWN0ZWQgKi8KLQotCWZkY19tb2RlID0gZmRjX2lkbGU7Ci0KLQkvKiAgbWF5YmUgdGhlIHNwaW5fbG9ja19pcnEqIHBhaXIgaXMgbm90IG5lY2Vzc2FyeSwgQlVUOgotCSAqICB0aGUgZm9sbG93aW5nIGxpbmUgTVVTVCBiZSBoZXJlLiBPdGhlcndpc2UgZmRjX2ludGVycnVwdF93YWl0KCkKLQkgKiAgd29uJ3Qgd2FpdC4gTm90ZSB0aGF0IGZkY19yZXNldCgpIGlzIGNhbGxlZCBmcm9tIAotCSAqICBmdGFwZV9kdW1iX3N0b3AoKSB3aGVuIHRoZSBmZGMgaXMgYnVzeSB0cmFuc2ZlcnJpbmcgZGF0YS4gSW4gdGhpcwotCSAqICBjYXNlIGZkY19pc3IoKSBNT1NUIFBST0JBQkxZIHNldHMgZnRfaW50ZXJydXB0X3NlZW4sIGFuZCB0cmllcwotCSAqICB0byBnZXQgdGhlIHJlc3VsdCBieXRlcyBmcm9tIHRoZSBmZGMgZXRjLiBDTEFTSC4KLQkgKi8KLQlmdF9pbnRlcnJ1cHRfc2VlbiA9IDA7Ci0JCi0JLyogIFByb2dyYW0gZGF0YSByYXRlCi0JICovCi0JZmRjX3VwZGF0ZV9kc3IoKTsgICAgICAgICAgICAgICAvKiByZXN0b3JlIGRhdGEgcmF0ZSBhbmQgcHJlY29tcCAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQotICAgICAgICAvKgotICAgICAgICAgKglXYWl0IGZvciBmaXJzdCBwb2xsaW5nIGN5Y2xlIHRvIGNvbXBsZXRlCi0JICovCi0JaWYgKGZkY19pbnRlcnJ1cHRfd2FpdCgxICogRlRfU0VDT05EKSA8IDApIHsKLQkJVFJBQ0UoZnRfdF9lcnIsICJubyBkcml2ZSBwb2xsaW5nIGludGVycnVwdCEiKTsKLQl9IGVsc2UgewkvKiBjbGVhciBhbGwgZGlzay1jaGFuZ2VkIHN0YXR1c2VzICovCi0JCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKLQkJCWlmKGZkY19zZW5zZV9pbnRlcnJ1cHRfc3RhdHVzKCZzdDAsICZkdW1teSkgIT0gMCkgewotCQkJCVRSQUNFKGZ0X3RfZXJyLCAic2Vuc2UgZmFpbGVkIGZvciAlZCIsIGkpOwotCQkJfQotCQkJaWYgKGkgPT0gZnRfZHJpdmVfc2VsKSB7Ci0JCQkJZnRhcGVfY3VycmVudF9jeWxpbmRlciA9IGR1bW15OwotCQkJfQotCQl9Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJkcml2ZSBwb2xsaW5nIGNvbXBsZXRlZCIpOwotCX0KLQkvKgotICAgICAgICAgKglTUEVDSUZZIENPTU1BTkQKLQkgKi8KLQlmZGNfc2V0X3NlZWtfcmF0ZShmZGNfc2Vla19yYXRlKTsKLQkvKgotCSAqCURSSVZFIFNQRUNJRklDQVRJT04gQ09NTUFORCAoaWYgZmRjIHR5cGUga25vd24pCi0JICovCi0JaWYgKGZkYy50eXBlID49IGk4MjA3OF8xKSB7Ci0JCWZkY19zZXRfZHJpdmVfc3BlY3MoKTsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotI2lmICFkZWZpbmVkKENMS180OE1IWikKLSMgZGVmaW5lIENMS180OE1IWiAxCi0jZW5kaWYKLQotLyogIFdoZW4gd2UncmUgZG9uZSwgcHV0IHRoZSBmZGMgaW50byByZXNldCBtb2RlIHNvIHRoYXQgdGhlIHJlZ3VsYXIKLSAqICBmbG9wcHkgZGlzayBkcml2ZXIgd2lsbCBmaWd1cmUgb3V0IHRoYXQgc29tZXRoaW5nIGlzIHdyb25nIGFuZAotICogIGluaXRpYWxpemUgdGhlIGNvbnRyb2xsZXIgdGhlIHdheSBpdCB3YW50cy4KLSAqLwotdm9pZCBmZGNfZGlzYWJsZSh2b2lkKQotewotCV9fdTggY21kMVtdID0ge0ZEQ19DT05GSUdVUkUsIDB4MDAsIDB4MDAsIDB4MDB9OwotCV9fdTggY21kMltdID0ge0ZEQ19MT0NLfTsKLQlfX3U4IGNtZDNbXSA9IHtGRENfVU5MT0NLfTsKLQlfX3U4IHN0YXRbMV07Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlpZiAoIWZkY19maWZvX2xvY2tlZCkgewotCQlmZGNfcmVzZXQoKTsKLQkJVFJBQ0VfRVhJVDsKLQl9Ci0JaWYgKGZkY19pc3N1ZV9jb21tYW5kKGNtZDMsIDEsIHN0YXQsIDEpIDwgMCB8fCBzdGF0WzBdICE9IDB4MDApIHsKLQkJZmRjX2Rvcl9yZXNldCgwKTsKLQkJVFJBQ0VfQUJPUlQoLyoqLywgZnRfdF9idWcsIAotCQkiY291bGRuJ3QgdW5sb2NrIGZpZm8sIGNvbmZpZ3VyYXRpb24gcmVtYWlucyBjaGFuZ2VkIik7Ci0JfQotCWZkY19maWZvX2xvY2tlZCA9IDA7Ci0JaWYgKENMS180OE1IWiAmJiBmZGMudHlwZSA+PSBpODIwNzgpIHsKLQkJY21kMVswXSB8PSBGRENfQ0xLNDhfQklUOwotCX0KLQljbWQxWzJdID0gKChmZGNfZmlmb19zdGF0ZSkgPyAwIDogMHgyMCkgKyAoZmRjX2ZpZm9fdGhyIC0gMSk7Ci0JaWYgKGZkY19jb21tYW5kKGNtZDEsIE5SX0lURU1TKGNtZDEpKSA8IDApIHsKLQkJZmRjX2Rvcl9yZXNldCgwKTsKLQkJVFJBQ0VfQUJPUlQoLyoqLywgZnRfdF9idWcsCi0JCSJjb3VsZG4ndCByZWNvbmZpZ3VyZSBmaWZvIHRvIG9sZCBzdGF0ZSIpOwotCX0KLQlpZiAoZmRjX2xvY2tfc3RhdGUgJiYKLQkgICAgZmRjX2lzc3VlX2NvbW1hbmQoY21kMiwgMSwgc3RhdCwgMSkgPCAwKSB7Ci0JCWZkY19kb3JfcmVzZXQoMCk7Ci0JCVRSQUNFX0FCT1JUKC8qKi8sIGZ0X3RfYnVnLCAiY291bGRuJ3QgbG9jayBvbGQgc3RhdGUgYWdhaW4iKTsKLQl9Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgImZpZm8gcmVzdG9yZWQ6ICVzYWJsZWQsIHRoci4gJWQsICVzbG9ja2VkIiwKLQkgICAgICBmZGNfZmlmb19zdGF0ZSA/ICJlbiIgOiAiZGlzIiwKLQkgICAgICBmZGNfZmlmb190aHIsIChmZGNfbG9ja19zdGF0ZSkgPyAiIiA6ICJub3QgIik7Ci0JZmRjX2Rvcl9yZXNldCgwKTsKLQlUUkFDRV9FWElUOwotfQotCi0vKiAgICAgIFNwZWNpZnkgRkRDIHNlZWstcmF0ZSAobWlsbGlzZWNvbmRzKQotICovCi1zdGF0aWMgaW50IGZkY19zZXRfc2Vla19yYXRlKGludCBzZWVrX3JhdGUpCi17Ci0JLyogc2V0IHN0ZXAgcmF0ZSwgZG1hIG1vZGUsIGFuZCBtaW5pbWFsIGhlYWQgbG9hZCBhbmQgdW5sb2FkIHRpbWVzCi0JICovCi0JX191OCBpblszXSA9IHsgRkRDX1NQRUNJRlksIDEsICgxIDw8IDEpfTsKLSAKLQlmZGNfc2Vla19yYXRlID0gc2Vla19yYXRlOwotCWluWzFdIHw9ICgxNiAtIChmZGNfZGF0YV9yYXRlICogZmRjX3NlZWtfcmF0ZSkgLyA1MDApIDw8IDQ7Ci0KLQlyZXR1cm4gZmRjX2NvbW1hbmQoaW4sIDMpOwotfQotCi0vKiAgICAgIFNlbnNlIGRyaXZlIHN0YXR1czogZ2V0IHVuaXQncyBkcml2ZSBzdGF0dXMgKFNUMykKLSAqLwotaW50IGZkY19zZW5zZV9kcml2ZV9zdGF0dXMoaW50ICpzdDMpCi17Ci0JX191OCBvdXRbMl07Ci0JX191OCBpblsxXTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0Jb3V0WzBdID0gRkRDX1NFTlNFRDsKLQlvdXRbMV0gPSBmdF9kcml2ZV9zZWw7Ci0JVFJBQ0VfQ0FUQ0goZmRjX2lzc3VlX2NvbW1hbmQob3V0LCAyLCBpbiwgMSksKTsKLQkqc3QzID0gaW5bMF07Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi0vKiAgICAgIFNlbnNlIEludGVycnVwdCBTdGF0dXMgY29tbWFuZDoKLSAqICAgICAgc2hvdWxkIGJlIGlzc3VlZCBhdCB0aGUgZW5kIG9mIGVhY2ggc2Vlay4KLSAqICAgICAgZ2V0IFNUMCBhbmQgY3VycmVudCBjeWxpbmRlci4KLSAqLwotaW50IGZkY19zZW5zZV9pbnRlcnJ1cHRfc3RhdHVzKGludCAqc3QwLCBpbnQgKmN1cnJlbnRfY3lsaW5kZXIpCi17Ci0JX191OCBvdXRbMV07Ci0JX191OCBpblsyXTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0Jb3V0WzBdID0gRkRDX1NFTlNFSTsKLQlUUkFDRV9DQVRDSChmZGNfaXNzdWVfY29tbWFuZChvdXQsIDEsIGluLCAyKSwpOwotCSpzdDAgPSBpblswXTsKLQkqY3VycmVudF9jeWxpbmRlciA9IGluWzFdOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogICAgICBzdGVwIHRvIHRyYWNrCi0gKi8KLWludCBmZGNfc2VlayhpbnQgdHJhY2spCi17Ci0JX191OCBvdXRbM107Ci0JaW50IHN0MCwgcGNuOwotI2lmZGVmIFRFU1RJTkcKLQl1bnNpZ25lZCBpbnQgdGltZTsKLSNlbmRpZgotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlvdXRbMF0gPSBGRENfU0VFSzsKLQlvdXRbMV0gPSBmdF9kcml2ZV9zZWw7Ci0Jb3V0WzJdID0gdHJhY2s7Ci0jaWZkZWYgVEVTVElORwotCXRpbWUgPSBmdGFwZV90aW1lc3RhbXAoKTsKLSNlbmRpZgotCS8qICBXZSByZWFsbHkgbmVlZCB0aGlzIGNvbW1hbmQgdG8gd29yayAhCi0JICovCi0JZnRfc2Vla19jb21wbGV0ZWQgPSAwOwotCVRSQUNFX0NBVENIKGZkY19jb21tYW5kKG91dCwgMyksCi0JCSAgICBmZGNfcmVzZXQoKTsKLQkJICAgIFRSQUNFKGZ0X3Rfbm9pc2UsICJkZXN0aW5hdGlvbiB3YXM6ICVkLCByZXNldHRpbmcgRkRDLi4uIiwKLQkJCSAgdHJhY2spKTsKLQkvKiAgICBIYW5kbGUgaW50ZXJydXB0cyB1bnRpbCBmdF9zZWVrX2NvbXBsZXRlZCBvciB0aW1lb3V0LgotCSAqLwotCWZvciAoOzspIHsKLQkJVFJBQ0VfQ0FUQ0goZmRjX2ludGVycnVwdF93YWl0KDIgKiBGVF9TRUNPTkQpLCk7Ci0JCWlmIChmdF9zZWVrX2NvbXBsZXRlZCkgewotCQkJVFJBQ0VfQ0FUQ0goZmRjX3NlbnNlX2ludGVycnVwdF9zdGF0dXMoJnN0MCwgJnBjbiksKTsKLQkJCWlmICgoc3QwICYgU1QwX1NFRUtfRU5EKSA9PSAwKSB7Ci0JCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkJICAgICAgIm5vIHNlZWstZW5kIGFmdGVyIHNlZWsgY29tcGxldGlvbiAhPz8iKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotI2lmZGVmIFRFU1RJTkcKLQl0aW1lID0gZnRhcGVfdGltZWRpZmYodGltZSwgZnRhcGVfdGltZXN0YW1wKCkpIC8gYWJzKHRyYWNrIC0gZnRhcGVfY3VycmVudF9jeWxpbmRlcik7Ci0JaWYgKCh0aW1lIDwgOTAwIHx8IHRpbWUgPiAzMTAwKSAmJiBhYnModHJhY2sgLSBmdGFwZV9jdXJyZW50X2N5bGluZGVyKSA+IDUpIHsKLQkJVFJBQ0UoZnRfdF93YXJuLCAiV3JvbmcgRkRDIFNURVAgaW50ZXJ2YWw6ICVkIHVzZWNzICglZCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUsIHRyYWNrIC0gZnRhcGVfY3VycmVudF9jeWxpbmRlcik7Ci0JfQotI2VuZGlmCi0JLyogICAgVmVyaWZ5IHdoZXRoZXIgd2UgaXNzdWVkIHRoZSByaWdodCB0YXBlIGNvbW1hbmQuCi0JICovCi0JLyogVmVyaWZ5IHRoYXQgd2Ugc2VlayB0byB0aGUgcHJvcGVyIHRyYWNrLiAqLwotCWlmIChwY24gIT0gdHJhY2spIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsICJiYWQgc2Vlay4uIik7Ci0JfQotCWZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgPSB0cmFjazsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGVycGVuZF9tb2RlOyAvKiBzZXQgaWYgZmRjIGlzIGluIHBlcnBlbmRpY3VsYXIgbW9kZSAqLwotCi1zdGF0aWMgaW50IHBlcnBlbmRfb2ZmKHZvaWQpCi17Ci0gCV9fdTggcGVycGVuZFtdID0ge0ZEQ19QRVJQRU5ELCAweDAwfTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQotCWlmIChwZXJwZW5kX21vZGUpIHsKLQkJLyogVHVybiBvZmYgcGVycGVuZGljdWxhciBtb2RlICovCi0JCXBlcnBlbmRbMV0gPSAweDgwOwotCQlUUkFDRV9DQVRDSChmZGNfY29tbWFuZChwZXJwZW5kLCAyKSwKLQkJCSAgICBUUkFDRShmdF90X2VyciwiUGVycGVuZGljdWxhciBtb2RlIGV4aXQgZmFpbGVkISIpKTsKLQkJcGVycGVuZF9tb2RlID0gMDsKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV9wZXJwZW5kKGludCBzZWdtZW50X2lkKQotewotIAlfX3U4IHBlcnBlbmRbXSA9IHtGRENfUEVSUEVORCwgMHgwMH07Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qIFdoZW4gd3JpdGluZyBRSUMtMzAyMCB0YXBlcywgdHVybiBvbiBwZXJwZW5kaWN1bGFyIG1vZGUKLQkgKiBpZiB0YXBlIGlzIG1vdmluZyBpbiBmb3J3YXJkIGRpcmVjdGlvbiAoZXZlbiB0cmFja3MpLgotCSAqLwotCWlmIChmdF9xaWNfc3RkID09IFFJQ19UQVBFX1FJQzMwMjAgJiYKLQkgICAgKChzZWdtZW50X2lkIC8gZnRfc2VnbWVudHNfcGVyX3RyYWNrKSAmIDEpID09IDApIHsKLS8qICBGSVhNRTogc29tZSBpODIwNzcgc2VlbSB0byBzdXBwb3J0IHBlcnBlbmRpY3VsYXIgbW9kZSBhcwotICogIHdlbGwuIAotICovCi0jaWYgMAotCQlpZiAoZmRjLnR5cGUgPCBpODIwNzdBQSkge30KLSNlbHNlCi0JCWlmIChmZGMudHlwZSA8IGk4MjA3NyAmJiBmdF9kYXRhX3JhdGUgPCAxMDAwKSB7Ci0jZW5kaWYKLQkJCS8qICBmZGMgZG9lcyBub3Qgc3VwcG9ydCBwZXJwZW5kaWN1bGFyIG1vZGU6IGNvbXBsYWluIAotCQkJICovCi0JCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwKLQkJCQkgICAgIllvdXIgRkRDIGRvZXMgbm90IHN1cHBvcnQgUUlDLTMwMjAuIik7Ci0JCX0KLQkJcGVycGVuZFsxXSA9IDB4MDMgLyogMHg4MyArICgweDQgPDwgZnRfZHJpdmVfc2VsKSAqLyA7Ci0JCVRSQUNFX0NBVENIKGZkY19jb21tYW5kKHBlcnBlbmQsIDIpLAotCQkJICAgVFJBQ0UoZnRfdF9lcnIsIlBlcnBlbmRpY3VsYXIgbW9kZSBlbnRyeSBmYWlsZWQhIikpOwotCQlUUkFDRShmdF90X2Zsb3csICJQZXJwZW5kaWN1bGFyIG1vZGUgc2V0Iik7Ci0JCXBlcnBlbmRfbW9kZSA9IDE7Ci0JCVRSQUNFX0VYSVQgMDsKLQl9Ci0JVFJBQ0VfRVhJVCBwZXJwZW5kX29mZigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmRjX3NldHVwX2RtYShjaGFyIG1vZGUsCi0JCQkJIHZvbGF0aWxlIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLQkvKiBQcm9ncmFtIHRoZSBETUEgY29udHJvbGxlci4KLQkgKi8KLQlkaXNhYmxlX2RtYShmZGMuZG1hKTsKLQljbGVhcl9kbWFfZmYoZmRjLmRtYSk7Ci0Jc2V0X2RtYV9tb2RlKGZkYy5kbWEsIG1vZGUpOwotCXNldF9kbWFfYWRkcihmZGMuZG1hLCB2aXJ0X3RvX2J1cygodm9pZCopYWRkcikpOwotCXNldF9kbWFfY291bnQoZmRjLmRtYSwgY291bnQpOwotCWVuYWJsZV9kbWEoZmRjLmRtYSk7Ci19Ci0KLS8qICBTZXR1cCBmZGMgYW5kIGRtYSBmb3IgZm9ybWF0dGluZyB0aGUgbmV4dCBzZWdtZW50Ci0gKi8KLWludCBmZGNfc2V0dXBfZm9ybWF0dGluZyhidWZmZXJfc3RydWN0ICogYnVmZikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCV9fdTggb3V0WzZdID0gewotCQlGRENfRk9STUFULCAweDAwLCAzLCA0ICogRlRfU0VDVE9SU19QRVJfU0VHTUVOVCwgMHgwMCwgMHg2YgotCX07Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQkKLQlUUkFDRV9DQVRDSChoYW5kbGVfcGVycGVuZChidWZmLT5zZWdtZW50X2lkKSwpOwotCS8qIFByb2dyYW0gdGhlIERNQSBjb250cm9sbGVyLgotCSAqLwotICAgICAgICBUUkFDRShmdF90X2ZkY19kbWEsCi0JICAgICAgInBoeXMuIGFkZHIuID0gJWx4IiwgdmlydF90b19idXMoKHZvaWQqKSBidWZmLT5wdHIpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQlmZGNfc2V0dXBfZG1hKERNQV9NT0RFX1dSSVRFLCBidWZmLT5wdHIsIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgKiA0KTsKLQkvKiBJc3N1ZSBGREMgY29tbWFuZCB0byBzdGFydCByZWFkaW5nL3dyaXRpbmcuCi0JICovCi0Jb3V0WzFdID0gZnRfZHJpdmVfc2VsOwotCW91dFs0XSA9IGJ1ZmYtPmdhcDM7Ci0JVFJBQ0VfQ0FUQ0goZmRjX3NldHVwX2Vycm9yID0gZmRjX2NvbW1hbmQob3V0LCBzaXplb2Yob3V0KSksCi0JCSAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsgZmRjX21vZGUgPSBmZGNfaWRsZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLQotLyogICAgICBTZXR1cCBGbG9wcHkgRGlzayBDb250cm9sbGVyIGFuZCBETUEgdG8gcmVhZCBvciB3cml0ZSB0aGUgbmV4dCBjbHVzdGVyCi0gKiAgICAgIG9mIGdvb2Qgc2VjdG9ycyBmcm9tIG9yIHRvIHRoZSBjdXJyZW50IHNlZ21lbnQuCi0gKi8KLWludCBmZGNfc2V0dXBfcmVhZF93cml0ZShidWZmZXJfc3RydWN0ICogYnVmZiwgX191OCBvcGVyYXRpb24pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlfX3U4IG91dFs5XTsKLQlpbnQgZG1hX21vZGU7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCXN3aXRjaChvcGVyYXRpb24pIHsKLQljYXNlIEZEQ19WRVJJRlk6Ci0JCWlmIChmZGMudHlwZSA8IGk4MjA3NykgewotCQkJb3BlcmF0aW9uID0gRkRDX1JFQUQ7Ci0JCX0KLQljYXNlIEZEQ19SRUFEOgotCWNhc2UgRkRDX1JFQURfREVMRVRFRDoKLQkJZG1hX21vZGUgPSBETUFfTU9ERV9SRUFEOwotCQlUUkFDRShmdF90X2ZkY19kbWEsICJ4ZmVyICVkIHNlY3RvcnMgdG8gMHglcCIsCi0JCSAgICAgIGJ1ZmYtPnNlY3Rvcl9jb3VudCwgYnVmZi0+cHRyKTsKLQkJVFJBQ0VfQ0FUQ0gocGVycGVuZF9vZmYoKSwpOwotCQlicmVhazsKLQljYXNlIEZEQ19XUklURV9ERUxFVEVEOgotCQlUUkFDRShmdF90X25vaXNlLCAiZGVsZXRpbmcgc2VnbWVudCAlZCIsIGJ1ZmYtPnNlZ21lbnRfaWQpOwotCWNhc2UgRkRDX1dSSVRFOgotCQlkbWFfbW9kZSA9IERNQV9NT0RFX1dSSVRFOwotCQkvKiBXaGVuIHdyaXRpbmcgUUlDLTMwMjAgdGFwZXMsIHR1cm4gb24gcGVycGVuZGljdWxhciBtb2RlCi0JCSAqIGlmIHRhcGUgaXMgbW92aW5nIGluIGZvcndhcmQgZGlyZWN0aW9uIChldmVuIHRyYWNrcykuCi0JCSAqLwotCQlUUkFDRV9DQVRDSChoYW5kbGVfcGVycGVuZChidWZmLT5zZWdtZW50X2lkKSwpOwotCQlUUkFDRShmdF90X2ZkY19kbWEsICJ4ZmVyICVkIHNlY3RvcnMgZnJvbSAweCVwIiwKLQkJICAgICAgYnVmZi0+c2VjdG9yX2NvdW50LCBidWZmLT5wdHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlUUkFDRV9BQk9SVCgtRUlPLAotCQkJICAgIGZ0X3RfYnVnLCAiYnVnOiBpbnZhbGlkIG9wZXJhdGlvbiBwYXJhbWV0ZXIiKTsKLQl9Ci0JVFJBQ0UoZnRfdF9mZGNfZG1hLCAicGh5cy4gYWRkci4gPSAlbHgiLHZpcnRfdG9fYnVzKCh2b2lkKilidWZmLT5wdHIpKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQlpZiAob3BlcmF0aW9uICE9IEZEQ19WRVJJRlkpIHsKLQkJZmRjX3NldHVwX2RtYShkbWFfbW9kZSwgYnVmZi0+cHRyLAotCQkJICAgICAgRlRfU0VDVE9SX1NJWkUgKiBidWZmLT5zZWN0b3JfY291bnQpOwotCX0KLQkvKiBJc3N1ZSBGREMgY29tbWFuZCB0byBzdGFydCByZWFkaW5nL3dyaXRpbmcuCi0JICovCi0Jb3V0WzBdID0gb3BlcmF0aW9uOwotCW91dFsxXSA9IGZ0X2RyaXZlX3NlbDsKLQlvdXRbMl0gPSBidWZmLT5jeWw7Ci0Jb3V0WzNdID0gYnVmZi0+aGVhZDsKLQlvdXRbNF0gPSBidWZmLT5zZWN0ICsgYnVmZi0+c2VjdG9yX29mZnNldDsKLQlvdXRbNV0gPSAzOwkJLyogU2VjdG9yIHNpemUgb2YgMUsuICovCi0Jb3V0WzZdID0gb3V0WzRdICsgYnVmZi0+c2VjdG9yX2NvdW50IC0gMTsJLyogbGFzdCBzZWN0b3IgKi8KLQlvdXRbN10gPSAxMDk7CQkvKiBHYXAgbGVuZ3RoLiAqLwotCW91dFs4XSA9IDB4ZmY7CQkvKiBObyBsaW1pdCB0byB0cmFuc2ZlciBzaXplLiAqLwotCVRSQUNFKGZ0X3RfZmRjX2RtYSwgIkM6IDB4JTAyeCwgSDogMHglMDJ4LCBSOiAweCUwMngsIGNudDogMHglMDJ4IiwKLQkJb3V0WzJdLCBvdXRbM10sIG91dFs0XSwgb3V0WzZdIC0gb3V0WzRdICsgMSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmRjX2lvX2xvY2ssIGZsYWdzKTsKLQlUUkFDRV9DQVRDSChmZGNfc2V0dXBfZXJyb3IgPSBmZGNfY29tbWFuZChvdXQsIDkpLGZkY19tb2RlID0gZmRjX2lkbGUpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotaW50IGZkY19maWZvX3RocmVzaG9sZChfX3U4IHRocmVzaG9sZCwKLQkJICAgICAgIGludCAqZmlmb19zdGF0ZSwgaW50ICpsb2NrX3N0YXRlLCBpbnQgKmZpZm9fdGhyKQotewotCWNvbnN0IF9fdTggY21kMFtdID0ge0ZEQ19EVU1QUkVHU307Ci0JX191OCBjbWQxW10gPSB7RkRDX0NPTkZJR1VSRSwgMCwgKDB4MGYgJiAodGhyZXNob2xkIC0gMSkpLCAwfTsKLQljb25zdCBfX3U4IGNtZDJbXSA9IHtGRENfTE9DS307Ci0JY29uc3QgX191OCBjbWQzW10gPSB7RkRDX1VOTE9DS307Ci0JX191OCByZWdbMTBdOwotCV9fdTggc3RhdDsKLQlpbnQgaTsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoQ0xLXzQ4TUhaICYmIGZkYy50eXBlID49IGk4MjA3OCkgewotCQljbWQxWzBdIHw9IEZEQ19DTEs0OF9CSVQ7Ci0JfQotCS8qICBEdW1wIGZkYyBpbnRlcm5hbCByZWdpc3RlcnMgZm9yIGV4YW1pbmF0aW9uCi0JICovCi0JVFJBQ0VfQ0FUQ0goZmRjX2NvbW1hbmQoY21kMCwgTlJfSVRFTVMoY21kMCkpLAotCQkgICAgVFJBQ0UoZnRfdF93YXJuLCAiZHVtcHJlZyBjbWQgZmFpbGVkLCBmaWZvIHVuY2hhbmdlZCIpKTsKLQkvKiAgTm93IHJlYWQgZmRjIGludGVybmFsIHJlZ2lzdGVycyBmcm9tIGZpZm8KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKGludClOUl9JVEVNUyhyZWcpOyArK2kpIHsKLQkJZmRjX3JlYWQoJnJlZ1tpXSk7Ci0JCVRSQUNFKGZ0X3RfZmRjX2RtYSwgIlJlZ2lzdGVyICVkID0gMHglMDJ4IiwgaSwgcmVnW2ldKTsKLQl9Ci0JaWYgKGZpZm9fc3RhdGUgJiYgbG9ja19zdGF0ZSAmJiBmaWZvX3RocikgewotCQkqZmlmb19zdGF0ZSA9IChyZWdbOF0gJiAweDIwKSA9PSAwOwotCQkqbG9ja19zdGF0ZSA9IHJlZ1s3XSAmIDB4ODA7Ci0JCSpmaWZvX3RociA9IDEgKyAocmVnWzhdICYgMHgwZik7Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JICAgICAgIm9yaWdpbmFsIGZpZm8gc3RhdGU6ICVzYWJsZWQsIHRocmVzaG9sZCAlZCwgJXNsb2NrZWQiLAotCSAgICAgICgocmVnWzhdICYgMHgyMCkgPT0gMCkgPyAiZW4iIDogImRpcyIsCi0JICAgICAgMSArIChyZWdbOF0gJiAweDBmKSwgKHJlZ1s3XSAmIDB4ODApID8gIiIgOiAibm90ICIpOwotCS8qICBJZiBmZGMgaXMgYWxyZWFkeSBsb2NrZWQsIHVubG9jayBpdCBmaXJzdCAhICovCi0JaWYgKHJlZ1s3XSAmIDB4ODApIHsKLQkJZmRjX3JlYWR5X3dhaXQoMTAwKTsKLQkJVFJBQ0VfQ0FUQ0goZmRjX2lzc3VlX2NvbW1hbmQoY21kMywgTlJfSVRFTVMoY21kMyksICZzdGF0LCAxKSwKLQkJCSAgICBUUkFDRShmdF90X2J1ZywgIkZEQyB1bmxvY2sgY29tbWFuZCBmYWlsZWQsICIKLQkJCQkgICJjb25maWd1cmF0aW9uIHVuY2hhbmdlZCIpKTsKLQl9Ci0JZmRjX2ZpZm9fbG9ja2VkID0gMDsKLQkvKiAgRW5hYmxlIGZpZm8gYW5kIHNldCB0aHJlc2hvbGQgYXQgeHggYnl0ZXMgdG8gYWxsb3cgYQotCSAqICByZWFzb25hYmx5IGxhcmdlIGxhdGVuY3kgYW5kIHJlZHVjZSBudW1iZXIgb2YgZG1hIGJ1cnN0cy4KLQkgKi8KLQlmZGNfcmVhZHlfd2FpdCgxMDApOwotCWlmICgocmVzdWx0ID0gZmRjX2NvbW1hbmQoY21kMSwgTlJfSVRFTVMoY21kMSkpKSA8IDApIHsKLQkJVFJBQ0UoZnRfdF9idWcsICJjb25maWd1cmUgY21kIGZhaWxlZCwgZmlmbyB1bmNoYW5nZWQiKTsKLQl9Ci0JLyogIE5vdyBsb2NrIGNvbmZpZ3VyYXRpb24gc28gcmVzZXQgd2lsbCBub3QgY2hhbmdlIGl0Ci0JICovCi0gICAgICAgIGlmKGZkY19pc3N1ZV9jb21tYW5kKGNtZDIsIE5SX0lURU1TKGNtZDIpLCAmc3RhdCwgMSkgPCAwIHx8Ci0JICAgc3RhdCAhPSAweDEwKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfYnVnLAotCQkJICAgICJGREMgbG9jayBjb21tYW5kIGZhaWxlZCwgc3RhdCA9IDB4JTAyeCIsIHN0YXQpOwotCX0KLQlmZGNfZmlmb19sb2NrZWQgPSAxOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGZkY19maWZvX2VuYWJsZSh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoZmRjX2ZpZm9fbG9ja2VkKSB7Ci0JCVRSQUNFX0FCT1JUKDAsIGZ0X3Rfd2FybiwgIkZpZm8gbm90IGVuYWJsZWQgYmVjYXVzZSBsb2NrZWQiKTsKLQl9Ci0JVFJBQ0VfQ0FUQ0goZmRjX2ZpZm9fdGhyZXNob2xkKGZ0X2ZkY190aHJlc2hvbGQgLyogYnl0ZXMgKi8sCi0JCQkJICAgICAgICZmZGNfZmlmb19zdGF0ZSwKLQkJCQkgICAgICAgJmZkY19sb2NrX3N0YXRlLAotCQkJCSAgICAgICAmZmRjX2ZpZm9fdGhyKSwpOwotCVRSQUNFX0NBVENIKGZkY19maWZvX3RocmVzaG9sZChmdF9mZGNfdGhyZXNob2xkIC8qIGJ5dGVzICovLAotCQkJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMKSwpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogICBEZXRlcm1pbmUgZmQgY29udHJvbGxlciB0eXBlIAotICovCi1zdGF0aWMgX191OCBmZGNfc2F2ZV9zdGF0ZVsyXTsKLQotc3RhdGljIGludCBmZGNfcHJvYmUodm9pZCkKLXsKLQlfX3U4IGNtZFsxXTsKLQlfX3U4IHN0YXRbMTZdOyAvKiBtdXN0IGJlIGFibGUgdG8gaG9sZCBkdW1wcmVncyAmIHNhdmUgcmVzdWx0cyAqLwotCWludCBpOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQkvKiAgVHJ5IHRvIGZpbmQgb3V0IHdoYXQga2luZCBvZiBmZCBjb250cm9sbGVyIHdlIGhhdmUgdG8gZGVhbCB3aXRoCi0JICogIFNjaGVtZSBib3Jyb3dlZCBmcm9tIGZsb3BweSBkcml2ZXI6Ci0JICogIGZpcnN0IHRyeSBpZiBGRENfRFVNUFJFR1MgY29tbWFuZCB3b3JrcwotCSAqICAodGhpcyBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGEgODIwNzIgb3IgYmV0dGVyKQotCSAqICB0aGVuIHRyeSB0aGUgRkRDX1ZFUlNJT04gY29tbWFuZCAoODIwNzIgZG9lc24ndCBzdXBwb3J0IHRoaXMpCi0JICogIHRoZW4gdHJ5IHRoZSBGRENfVU5MT0NLIGNvbW1hbmQgKHNvbWUgb2xkZXIgODIwNzcncyBkb24ndCBzdXBwb3J0IHRoaXMpCi0JICogIHRoZW4gdHJ5IHRoZSBGRENfUEFSVElEIGNvbW1hbmQgKDgyMDc4J3Mgc3VwcG9ydCB0aGlzKQotCSAqLwotCWNtZFswXSA9IEZEQ19EVU1QUkVHUzsKLQlpZiAoZmRjX2lzc3VlX2NvbW1hbmQoY21kLCAxLCBzdGF0LCAxKSAhPSAwKSB7Ci0JCVRSQUNFX0FCT1JUKG5vX2ZkYywgZnRfdF9idWcsICJObyBGREMgZm91bmQiKTsKLQl9Ci0JaWYgKHN0YXRbMF0gPT0gMHg4MCkgewotCQkvKiBpbnZhbGlkIGNvbW1hbmQ6IG11c3QgYmUgcHJlIDgyMDcyICovCi0JCVRSQUNFX0FCT1JUKGk4MjcyLAotCQkJICAgIGZ0X3Rfd2FybiwgIlR5cGUgODI3MkEvNzY1QSBjb21wYXRpYmxlIEZEQyBmb3VuZCIpOwotCX0KLQlmZGNfcmVzdWx0KCZzdGF0WzFdLCA5KTsKLQlmZGNfc2F2ZV9zdGF0ZVswXSA9IHN0YXRbN107Ci0JZmRjX3NhdmVfc3RhdGVbMV0gPSBzdGF0WzhdOwotCWNtZFswXSA9IEZEQ19WRVJTSU9OOwotCWlmIChmZGNfaXNzdWVfY29tbWFuZChjbWQsIDEsIHN0YXQsIDEpIDwgMCB8fCBzdGF0WzBdID09IDB4ODApIHsKLQkJVFJBQ0VfQUJPUlQoaTgyNzIsIGZ0X3Rfd2FybiwgIlR5cGUgODIwNzIgRkRDIGZvdW5kIik7Ci0JfQotCWlmICgqc3RhdCAhPSAweDkwKSB7Ci0JCVRSQUNFX0FCT1JUKGk4MjcyLCBmdF90X3dhcm4sICJVbmtub3duIEZEQyBmb3VuZCIpOwotCX0KLQljbWRbMF0gPSBGRENfVU5MT0NLOwotCWlmKGZkY19pc3N1ZV9jb21tYW5kKGNtZCwgMSwgc3RhdCwgMSkgPCAwIHx8IHN0YXRbMF0gIT0gMHgwMCkgewotCQlUUkFDRV9BQk9SVChpODI3MiwgZnRfdF93YXJuLAotCQkJICAgICJUeXBlIHByZS0xOTkxIDgyMDc3IEZEQyBmb3VuZCwgIgotCQkJICAgICJ0cmVhdGluZyBpdCBsaWtlIGEgODIwNzIiKTsKLQl9Ci0JaWYgKGZkY19zYXZlX3N0YXRlWzBdICYgMHg4MCkgeyAvKiB3YXMgbG9ja2VkICovCi0JCWNtZFswXSA9IEZEQ19MT0NLOyAvKiByZXN0b3JlIGxvY2sgKi8KLQkJKHZvaWQpZmRjX2lzc3VlX2NvbW1hbmQoY21kLCAxLCBzdGF0LCAxKTsKLQkJVFJBQ0UoZnRfdF93YXJuLCAiRkRDIGlzIGFscmVhZHkgbG9ja2VkIik7Ci0JfQotCS8qIFRlc3QgZm9yIGEgaTgyMDc4IEZEQyAqLwotCWNtZFswXSA9IEZEQ19QQVJUSUQ7Ci0JaWYgKGZkY19pc3N1ZV9jb21tYW5kKGNtZCwgMSwgc3RhdCwgMSkgPCAwIHx8IHN0YXRbMF0gPT0gMHg4MCkgewotCQkvKiBpbnZhbGlkIGNvbW1hbmQ6IG5vdCBhIGk4MjA3OHh4IHR5cGUgRkRDICovCi0JCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKLQkJCW91dGJfcChpLCBmZGMudGRyKTsKLQkJCWlmICgoaW5iX3AoZmRjLnRkcikgJiAweDAzKSAhPSBpKSB7Ci0JCQkJVFJBQ0VfQUJPUlQoaTgyMDc3LAotCQkJCQkgICAgZnRfdF93YXJuLCAiVHlwZSA4MjA3NyBGREMgZm91bmQiKTsKLQkJCX0KLQkJfQotCQlUUkFDRV9BQk9SVChpODIwNzdBQSwgZnRfdF93YXJuLCAiVHlwZSA4MjA3N0FBIEZEQyBmb3VuZCIpOwotCX0KLQkvKiBGRENfUEFSVElEIGNtZCBzdWNjZWVkZWQgKi8KLQlzd2l0Y2ggKHN0YXRbMF0gPj4gNSkgewotCWNhc2UgMHgwOgotCQkvKiBpODIwNzhTTCBvciBpODIwNzgtMS4gIFRoZSBTTCBwYXJ0IGNhbm5vdCBydW4gYXQKLQkJICogMk1icHMgKHRoZSBTTCBhbmQgLTEgZGllcyBhcmUgaWRlbnRpY2FsOyB0aGV5IGFyZQotCQkgKiBzcGVlZCBncmFkZWQgYWZ0ZXIgcHJvZHVjdGlvbiwgYWNjb3JkaW5nIHRvIEludGVsKS4KLQkJICogU29tZSBTTCdzIGNhbiBiZSBkZXRlY3RlZCBieSBkb2luZyBhIFNBVkUgY21kIGFuZAotCQkgKiBsb29rIGF0IGJpdCA3IG9mIHRoZSBmaXJzdCBieXRlICh0aGUgU0VMM1YjIGJpdCkuCi0JCSAqIElmIGl0IGlzIDAsIHRoZSBwYXJ0IHJ1bnMgb2ZmIDNWb2x0cywgYW5kIGhlbmNlIGl0Ci0JCSAqIGlzIGEgU0wuCi0JCSAqLwotCQljbWRbMF0gPSBGRENfU0FWRTsKLQkJaWYoZmRjX2lzc3VlX2NvbW1hbmQoY21kLCAxLCBzdGF0LCAxNikgPCAwKSB7Ci0JCQlUUkFDRShmdF90X2VyciwgIkZEQ19TQVZFIGZhaWxlZC4gRHVubm8gd2h5Iik7Ci0JCQkvKiBndWVzcyB3ZSBiZXR0ZXIgY2xhaW0gdGhlIGZkYyB0byBiZSBhIGk4MjA3OCAqLwotCQkJVFJBQ0VfQUJPUlQoaTgyMDc4LAotCQkJCSAgICBmdF90X3dhcm4sCi0JCQkJICAgICJUeXBlIGk4MjA3OCBGREMgKGkgc3VwcG9zZSkgZm91bmQiKTsKLQkJfQotCQlpZiAoKHN0YXRbMF0gJiBGRENfU0VMM1ZfQklUKSkgewotCQkJLyogZmRjIHJ1bm5pbmcgb2ZmIDVWb2x0czsgUHJheSB0aGF0IGl0J3MgYSBpODIwNzgtMQotCQkJICovCi0JCQlUUkFDRV9BQk9SVChpODIwNzhfMSwgZnRfdF93YXJuLAotCQkJCSAgIlR5cGUgaTgyMDc4LTEgb3IgNVZvbHQgaTgyMDc4U0wgRkRDIGZvdW5kIik7Ci0JCX0KLQkJVFJBQ0VfQUJPUlQoaTgyMDc4LCBmdF90X3dhcm4sCi0JCQkgICAgIlR5cGUgM1ZvbHQgaTgyMDc4U0wgRkRDICgxTWJwcykgZm91bmQiKTsKLQljYXNlIDB4MToKLQljYXNlIDB4MjogLyogUzgyMDc4QiAgKi8KLQkJLyogVGhlICc3OEIgIGlzbid0ICc3OCBjb21wYXRpYmxlLiAgRGV0ZWN0IGl0IGFzIGEgJzc3QUEgKi8KLQkJVFJBQ0VfQUJPUlQoaTgyMDc3QUEsIGZ0X3Rfd2FybiwgIlR5cGUgaTgyMDc3QUEgRkRDIGZvdW5kIik7Ci0JY2FzZSAweDM6IC8qIE5TQyBQQzg3NDQgY29yZTsgdXNlZCBpbiBzZXZlcmFsIHN1cGVyLUlPIGNoaXBzICovCi0JCVRSQUNFX0FCT1JUKGk4MjA3N0FBLAotCQkJICAgIGZ0X3Rfd2FybiwgIlR5cGUgODIwNzdBQSBjb21wYXRpYmxlIEZEQyBmb3VuZCIpOwotCWRlZmF1bHQ6Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgIkEgcHJldmlvdXNseSB1bmRldGVjdGVkIEZEQyBmb3VuZCIpOwotCQlUUkFDRV9BQk9SVChpODIwNzdBQSwgZnRfdF93YXJuLAotCQkJICAiVHJlYXRpbmcgaXQgYXMgYSA4MjA3N0FBLiBQbGVhc2UgcmVwb3J0IHBhcnRpZD0gJWQiLAotCQkJICAgIHN0YXRbMF0pOwotCX0gLyogc3dpdGNoKHN0YXRbIDBdID4+IDUpICovCi0JVFJBQ0VfRVhJVCBub19mZGM7Ci19Ci0KLXN0YXRpYyBpbnQgZmRjX3JlcXVlc3RfcmVnaW9ucyh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGZ0X21hY2gyIHx8IGZ0X3Byb2JlX2ZjMTApIHsKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihmZGMuc3JhLCA4LCAiZmRjIChmdCkiKSkgewotI2lmbmRlZiBCUk9LRU5fRkxPUFBZX0RSSVZFUgotCQkJVFJBQ0VfRVhJVCAtRUJVU1k7Ci0jZWxzZQotCQkJVFJBQ0UoZnRfdF93YXJuLAotImFkZHJlc3MgMHglMDN4IG9jY3VwaWVkIChieSBmbG9wcHkgZHJpdmVyPyksIHVzaW5nIGl0IGFueXdheSIsIGZkYy5zcmEpOwotI2VuZGlmCi0JCX0KLQl9IGVsc2UgewotCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGZkYy5zcmEsIDYsICJmZGMgKGZ0KSIpKSB7Ci0jaWZuZGVmIEJST0tFTl9GTE9QUFlfRFJJVkVSCi0JCQlUUkFDRV9FWElUIC1FQlVTWTsKLSNlbHNlCi0JCQlUUkFDRShmdF90X3dhcm4sCi0iYWRkcmVzcyAweCUwM3ggb2NjdXBpZWQgKGJ5IGZsb3BweSBkcml2ZXI/KSwgdXNpbmcgaXQgYW55d2F5IiwgZmRjLnNyYSk7Ci0jZW5kaWYKLQkJfQotCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGZkYy5zcmEgKyA3LCAxLCAiZmRjIChmdCkiKSkgewotI2lmbmRlZiBCUk9LRU5fRkxPUFBZX0RSSVZFUgotCQkJcmVsZWFzZV9yZWdpb24oZmRjLnNyYSwgNik7Ci0JCQlUUkFDRV9FWElUIC1FQlVTWTsKLSNlbHNlCi0JCQlUUkFDRShmdF90X3dhcm4sCi0iYWRkcmVzcyAweCUwM3ggb2NjdXBpZWQgKGJ5IGZsb3BweSBkcml2ZXI/KSwgdXNpbmcgaXQgYW55d2F5IiwgZmRjLnNyYSArIDcpOwotI2VuZGlmCi0JCX0KLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi12b2lkIGZkY19yZWxlYXNlX3JlZ2lvbnModm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChmZGMuc3JhICE9IDApIHsKLQkJaWYgKGZkYy5kb3IyICE9IDApIHsKLQkJCXJlbGVhc2VfcmVnaW9uKGZkYy5zcmEsIDgpOwotCQl9IGVsc2UgewotCQkJcmVsZWFzZV9yZWdpb24oZmRjLnNyYSwgNik7Ci0JCQlyZWxlYXNlX3JlZ2lvbihmZGMuZGlyLCAxKTsKLQkJfQotCX0KLQlUUkFDRV9FWElUOwotfQotCi1zdGF0aWMgaW50IGZkY19jb25maWdfcmVncyh1bnNpZ25lZCBpbnQgZmRjX2Jhc2UsIAotCQkJICAgdW5zaWduZWQgaW50IGZkY19pcnEsIAotCQkJICAgdW5zaWduZWQgaW50IGZkY19kbWEpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlmZGMuaXJxID0gZmRjX2lycTsKLQlmZGMuZG1hID0gZmRjX2RtYTsKLQlmZGMuc3JhID0gZmRjX2Jhc2U7Ci0JZmRjLnNyYiA9IGZkY19iYXNlICsgMTsKLQlmZGMuZG9yID0gZmRjX2Jhc2UgKyAyOwotCWZkYy50ZHIgPSBmZGNfYmFzZSArIDM7Ci0JZmRjLm1zciA9IGZkYy5kc3IgPSBmZGNfYmFzZSArIDQ7Ci0JZmRjLmZpZm8gPSBmZGNfYmFzZSArIDU7Ci0JZmRjLmRpciA9IGZkYy5jY3IgPSBmZGNfYmFzZSArIDc7Ci0JZmRjLmRvcjIgPSAoZnRfbWFjaDIgfHwgZnRfcHJvYmVfZmMxMCkgPyBmZGNfYmFzZSArIDYgOiAwOwotCVRSQUNFX0NBVENIKGZkY19yZXF1ZXN0X3JlZ2lvbnMoKSwgZmRjLnNyYSA9IDApOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotc3RhdGljIGludCBmZGNfY29uZmlnKHZvaWQpCi17Ci0Jc3RhdGljIGludCBhbHJlYWR5X2RvbmU7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWlmIChhbHJlYWR5X2RvbmUpIHsKLQkJVFJBQ0VfQ0FUQ0goZmRjX3JlcXVlc3RfcmVnaW9ucygpLCk7Ci0JCSooZmRjLmhvb2spID0gZmRjX2lzcjsJLyogaG9vayBvdXIgaGFuZGxlciBpbiAqLwotCQlUUkFDRV9FWElUIDA7Ci0JfQotCWlmIChmdF9wcm9iZV9mYzEwKSB7Ci0JCWludCBmY190eXBlOwotCQkKLQkJVFJBQ0VfQ0FUQ0goZmRjX2NvbmZpZ19yZWdzKGZ0X2ZkY19iYXNlLAotCQkJCQkgICAgZnRfZmRjX2lycSwgZnRfZmRjX2RtYSksKTsKLQkJZmNfdHlwZSA9IGZjMTBfZW5hYmxlKCk7Ci0JCWlmIChmY190eXBlICE9IDApIHsKLQkJCVRSQUNFKGZ0X3Rfd2FybiwgIkZDLSVjMCBjb250cm9sbGVyIGZvdW5kIiwgJzAnICsgZmNfdHlwZSk7Ci0JCQlmZGMudHlwZSA9IGZjMTA7Ci0JCQlmZGMuaG9vayA9ICZkb19mdGFwZTsKLQkJCSooZmRjLmhvb2spID0gZmRjX2lzcjsJLyogaG9vayBvdXIgaGFuZGxlciBpbiAqLwotCQkJYWxyZWFkeV9kb25lID0gMTsKLQkJCVRSQUNFX0VYSVQgMDsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3Rfd2FybiwgIkZDLTEwLzIwIGNvbnRyb2xsZXIgbm90IGZvdW5kIik7Ci0JCQlmZGNfcmVsZWFzZV9yZWdpb25zKCk7Ci0JCQlmZGMudHlwZSA9IG5vX2ZkYzsKLQkJCWZ0X3Byb2JlX2ZjMTAgPSAwOwotCQkJZnRfZmRjX2Jhc2UgICA9IDB4M2YwOwotCQkJZnRfZmRjX2lycSAgICA9IDY7Ci0JCQlmdF9mZGNfZG1hICAgID0gMjsKLQkJfQotCX0KLQlUUkFDRShmdF90X3dhcm4sICJmZGMgYmFzZTogMHgleCwgaXJxOiAlZCwgZG1hOiAlZCIsIAotCSAgICAgIGZ0X2ZkY19iYXNlLCBmdF9mZGNfaXJxLCBmdF9mZGNfZG1hKTsKLQlUUkFDRV9DQVRDSChmZGNfY29uZmlnX3JlZ3MoZnRfZmRjX2Jhc2UsIGZ0X2ZkY19pcnEsIGZ0X2ZkY19kbWEpLCk7Ci0JZmRjLmhvb2sgPSAmZG9fZnRhcGU7Ci0JKihmZGMuaG9vaykgPSBmZGNfaXNyOwkvKiBob29rIG91ciBoYW5kbGVyIGluICovCi0JYWxyZWFkeV9kb25lID0gMTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBmdGFwZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXZvaWQgKCpoYW5kbGVyKSAodm9pZCkgPSAqZmRjLmhvb2s7Ci0JaW50IGhhbmRsZWQgPSAwOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQkqZmRjLmhvb2sgPSBOVUxMOwotCWlmIChoYW5kbGVyKSB7Ci0JCWhhbmRsZWQgPSAxOwotCQloYW5kbGVyKCk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0UoZnRfdF9idWcsICJVbmV4cGVjdGVkIGZ0YXBlIGludGVycnVwdCIpOwotCX0KLQlUUkFDRV9FWElUIElSUV9SRVRWQUwoaGFuZGxlZCk7Ci19Ci0KLXN0YXRpYyBpbnQgZmRjX2dyYWJfaXJxX2FuZF9kbWEodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JaWYgKGZkYy5ob29rID09ICZkb19mdGFwZSkgewotCQkvKiAgR2V0IGZhc3QgaW50ZXJydXB0IGhhbmRsZXIuCi0JCSAqLwotCQlpZiAocmVxdWVzdF9pcnEoZmRjLmlycSwgZnRhcGVfaW50ZXJydXB0LAotCQkJCUlSUUZfRElTQUJMRUQsICJmdCIsIGZ0YXBlX2lkKSkgewotCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9idWcsCi0JCQkJICAgICJVbmFibGUgdG8gZ3JhYiBJUlElZCBmb3IgZnRhcGUgZHJpdmVyIiwKLQkJCQkgICAgZmRjLmlycSk7Ci0JCX0KLQkJaWYgKHJlcXVlc3RfZG1hKGZkYy5kbWEsIGZ0YXBlX2lkKSkgewotCQkJZnJlZV9pcnEoZmRjLmlycSwgZnRhcGVfaWQpOwotCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9idWcsCi0JCQkgICAgICAiVW5hYmxlIHRvIGdyYWIgRE1BJWQgZm9yIGZ0YXBlIGRyaXZlciIsCi0JCQkgICAgICBmZGMuZG1hKTsKLQkJfQotCX0KLQlpZiAoZnRfZmRjX2Jhc2UgIT0gMHgzZjAgJiYgKGZ0X2ZkY19kbWEgPT0gMiB8fCBmdF9mZGNfaXJxID09IDYpKSB7Ci0JCS8qIFVzaW5nIHNhbWUgZG1hIGNoYW5uZWwgb3IgaXJxIGFzIHN0YW5kYXJkIGZkYywgbmVlZAotCQkgKiB0byBkaXNhYmxlIHRoZSBkbWEtZ2F0ZSBvbiB0aGUgc3RkIGZkYy4gVGhpcwotCQkgKiBjb3VsZG4ndCBiZSBkb25lIGluIHRoZSBmbG9wcHkgZHJpdmVyIGFzIHNvbWUKLQkJICogbGFwdG9wcyBhcmUgdXNpbmcgdGhlIGRtYS1nYXRlIHRvIGVudGVyIGEgbG93IHBvd2VyCi0JCSAqIG9yIGV2ZW4gc3VzcGVuZGVkIHN0YXRlIDotKAotCQkgKi8KLQkJb3V0Yl9wKEZEQ19SRVNFVF9OT1QsIDB4M2YyKTsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIkRNQS1nYXRlIG9uIHN0YW5kYXJkIGZkYyBkaXNhYmxlZCIpOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLWludCBmZGNfcmVsZWFzZV9pcnFfYW5kX2RtYSh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoZmRjLmhvb2sgPT0gJmRvX2Z0YXBlKSB7Ci0JCWRpc2FibGVfZG1hKGZkYy5kbWEpOwkvKiBqdXN0IGluIGNhc2UuLi4gKi8KLQkJZnJlZV9kbWEoZmRjLmRtYSk7Ci0JCWZyZWVfaXJxKGZkYy5pcnEsIGZ0YXBlX2lkKTsKLQl9Ci0JaWYgKGZ0X2ZkY19iYXNlICE9IDB4M2YwICYmIChmdF9mZGNfZG1hID09IDIgfHwgZnRfZmRjX2lycSA9PSA2KSkgewotCQkvKiBVc2luZyBzYW1lIGRtYSBjaGFubmVsIGFzIHN0YW5kYXJkIGZkYywgbmVlZCB0bwotCQkgKiBkaXNhYmxlIHRoZSBkbWEtZ2F0ZSBvbiB0aGUgc3RkIGZkYy4gVGhpcyBjb3VsZG4ndAotCQkgKiBiZSBkb25lIGluIHRoZSBmbG9wcHkgZHJpdmVyIGFzIHNvbWUgbGFwdG9wcyBhcmUKLQkJICogdXNpbmcgdGhlIGRtYS1nYXRlIHRvIGVudGVyIGEgbG93IHBvd2VyIG9yIGV2ZW4KLQkJICogc3VzcGVuZGVkIHN0YXRlIDotKAotCQkgKi8KLQkJb3V0Yl9wKEZEQ19SRVNFVF9OT1QgfCBGRENfRE1BX01PREUsIDB4M2YyKTsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIkRNQS1nYXRlIG9uIHN0YW5kYXJkIGZkYyBlbmFibGVkIGFnYWluIik7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotaW50IGZkY19pbml0KHZvaWQpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qIGZpbmQgYSBGREMgdG8gdXNlICovCi0JVFJBQ0VfQ0FUQ0goZmRjX2NvbmZpZygpLCk7Ci0JVFJBQ0VfQ0FUQ0goZmRjX2dyYWJfaXJxX2FuZF9kbWEoKSwgZmRjX3JlbGVhc2VfcmVnaW9ucygpKTsKLQlmdGFwZV9tb3RvciA9IDA7Ci0JZmRjX2NhdGNoX3N0cmF5X2ludGVycnVwdHMoMCk7CS8qIGNsZWFyIG51bWJlciBvZiBhd2FpbnRlZAotCQkJCQkgKiBzdHJheSBpbnRlcnJ1cHRlIAotCQkJCQkgKi8KLQlmZGNfY2F0Y2hfc3RyYXlfaW50ZXJydXB0cygxKTsJLyogb25lIGFsd2F5cyBjb21lcyAoPykgKi8KLQlUUkFDRShmdF90X2Zsb3csICJyZXNldHRpbmcgZmRjIik7Ci0JZmRjX3NldF9zZWVrX3JhdGUoMik7CQkvKiB1c2Ugbm9taW5hbCBRSUMgc3RlcCByYXRlICovCi0JZmRjX3Jlc2V0KCk7CQkJLyogaW5pdCBmZGMgJiBjbGVhciB0cmFjayBjb3VudGVycyAqLwotCWlmIChmZGMudHlwZSA9PSBub19mZGMpIHsJLyogbm8gRkMtMTAgb3IgRkMtMjAgZm91bmQgKi8KLQkJZmRjLnR5cGUgPSBmZGNfcHJvYmUoKTsKLQkJZmRjX3Jlc2V0KCk7CQkvKiB1cGRhdGUgd2l0aCBuZXcga25vd2xlZGdlICovCi0JfQotCWlmIChmZGMudHlwZSA9PSBub19mZGMpIHsKLQkJZmRjX3JlbGVhc2VfaXJxX2FuZF9kbWEoKTsKLQkJZmRjX3JlbGVhc2VfcmVnaW9ucygpOwotCQlUUkFDRV9FWElUIC1FTlhJTzsKLQl9Ci0JaWYgKGZkYy50eXBlID49IGk4MjA3NykgewotCQlpZiAoZmRjX2ZpZm9fZW5hYmxlKCkgPCAwKSB7Ci0JCQlUUkFDRShmdF90X3dhcm4sICJjb3VsZG4ndCBlbmFibGUgZmRjIGZpZm8gISIpOwotCQl9IGVsc2UgewotCQkJVFJBQ0UoZnRfdF9mbG93LCAiZmRjIGZpZm8gZW5hYmxlZCBhbmQgbG9ja2VkIik7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pby5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWMzYzcyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mZGMtaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MiArMCwwIEBACi0jaWZuZGVmIF9GRENfSU9fSAotI2RlZmluZSBfRkRDX0lPX0gKLQotLyoKLSAqICAgIENvcHlyaWdodCAoQykgMTk5My0xOTk2IEJhcyBMYWFyaG92ZW4sCi0gKiAgICAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2ZkYy1pby5oLHYgJAotICogJFJldmlzaW9uOiAxLjMgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6MDYgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBsb3cgbGV2ZWwKLSAqICAgICAgZnVuY3Rpb25zIHRoYXQgY29tbXVuaWNhdGUgd2l0aCB0aGUgZmxvcHB5IGRpc2sgY29udHJvbGxlciwKLSAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciAiZnRhcGUiIGZvcgotICogICAgICBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZmRyZWcuaD4KLQotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotCi0jZGVmaW5lIEZEQ19TS19CSVQgICAgICAoMHgyMCkKLSNkZWZpbmUgRkRDX01UX0JJVCAgICAgICgweDgwKQotCi0jZGVmaW5lIEZEQ19SRUFEICAgICAgICAoRkRfUkVBRCAmIH4oRkRDX1NLX0JJVCB8IEZEQ19NVF9CSVQpKQotI2RlZmluZSBGRENfV1JJVEUgICAgICAgKEZEX1dSSVRFICYgfkZEQ19NVF9CSVQpCi0jZGVmaW5lIEZEQ19SRUFEX0RFTEVURUQgICgweDRjKQotI2RlZmluZSBGRENfV1JJVEVfREVMRVRFRCAoMHg0OSkKLSNkZWZpbmUgRkRDX1ZFUklGWSAgICAgICAgKDB4NTYpCi0jZGVmaW5lIEZEQ19SRUFESUQgICAgICAoMHg0YSkKLSNkZWZpbmUgRkRDX1NFTlNFRCAgICAgICgweDA0KQotI2RlZmluZSBGRENfU0VOU0VJICAgICAgKEZEX1NFTlNFSSkKLSNkZWZpbmUgRkRDX0ZPUk1BVCAgICAgIChGRF9GT1JNQVQpCi0jZGVmaW5lIEZEQ19SRUNBTCAgICAgICAoRkRfUkVDQUxJQlJBVEUpCi0jZGVmaW5lIEZEQ19TRUVLICAgICAgICAoRkRfU0VFSykKLSNkZWZpbmUgRkRDX1NQRUNJRlkgICAgIChGRF9TUEVDSUZZKQotI2RlZmluZSBGRENfUkVDQUxJQlIgICAgKEZEX1JFQ0FMSUJSQVRFKQotI2RlZmluZSBGRENfVkVSU0lPTiAgICAgKEZEX1ZFUlNJT04pCi0jZGVmaW5lIEZEQ19QRVJQRU5EICAgICAoRkRfUEVSUEVORElDVUxBUikKLSNkZWZpbmUgRkRDX0RVTVBSRUdTICAgIChGRF9EVU1QUkVHUykKLSNkZWZpbmUgRkRDX0xPQ0sgICAgICAgIChGRF9MT0NLKQotI2RlZmluZSBGRENfVU5MT0NLICAgICAgKEZEX1VOTE9DSykKLSNkZWZpbmUgRkRDX0NPTkZJR1VSRSAgIChGRF9DT05GSUdVUkUpCi0jZGVmaW5lIEZEQ19EUklWRV9TUEVDICAoMHg4ZSkJLyogaTgyMDc4IGhhcyB0aGlzIChhbnkgb3RoZXJzPykgKi8KLSNkZWZpbmUgRkRDX1BBUlRJRCAgICAgICgweDE4KQkvKiBpODIwNzggaGFzIHRoaXMgKi8KLSNkZWZpbmUgRkRDX1NBVkUgICAgICAgICgweDJlKQkvKiBpODIwNzggaGFzIHRoaXMgKGFueSBvdGhlcnM/KSAqLwotI2RlZmluZSBGRENfUkVTVE9SRSAgICAgKDB4NGUpCS8qIGk4MjA3OCBoYXMgdGhpcyAoYW55IG90aGVycz8pICovCi0KLSNkZWZpbmUgRkRDX1NUQVRVU19NQVNLIChTVEFUVVNfQlVTWSB8IFNUQVRVU19ETUEgfCBTVEFUVVNfRElSIHwgU1RBVFVTX1JFQURZKQotI2RlZmluZSBGRENfREFUQV9SRUFEWSAgKFNUQVRVU19SRUFEWSkKLSNkZWZpbmUgRkRDX0RBVEFfT1VUUFVUIChTVEFUVVNfRElSKQotI2RlZmluZSBGRENfREFUQV9SRUFEWV9NQVNLIChTVEFUVVNfUkVBRFkgfCBTVEFUVVNfRElSKQotI2RlZmluZSBGRENfREFUQV9PVVRfUkVBRFkgIChTVEFUVVNfUkVBRFkgfCBTVEFUVVNfRElSKQotI2RlZmluZSBGRENfREFUQV9JTl9SRUFEWSAgIChTVEFUVVNfUkVBRFkpCi0jZGVmaW5lIEZEQ19CVVNZICAgICAgICAoU1RBVFVTX0JVU1kpCi0jZGVmaW5lIEZEQ19DTEs0OF9CSVQgICAoMHg4MCkKLSNkZWZpbmUgRkRDX1NFTDNWX0JJVCAgICgweDQwKQotCi0jZGVmaW5lIFNUMF9JTlRfTUFTSyAgICAoU1QwX0lOVFIpCi0jZGVmaW5lIEZEQ19JTlRfTk9STUFMICAoU1QwX0lOVFIgJiAweDAwKQotI2RlZmluZSBGRENfSU5UX0FCTk9STUFMIChTVDBfSU5UUiAmIDB4NDApCi0jZGVmaW5lIEZEQ19JTlRfSU5WQUxJRCAoU1QwX0lOVFIgJiAweDgwKQotI2RlZmluZSBGRENfSU5UX1JFQURZQ0ggKFNUMF9JTlRSICYgMHhDMCkKLSNkZWZpbmUgU1QwX1NFRUtfRU5EICAgIChTVDBfU0UpCi0jZGVmaW5lIFNUM19UUkFDS18wICAgICAoU1QzX1RaKQotCi0jZGVmaW5lIEZEQ19SRVNFVF9OT1QgICAoMHgwNCkKLSNkZWZpbmUgRkRDX0RNQV9NT0RFICAgICgweDA4KQotI2RlZmluZSBGRENfTU9UT1JfMCAgICAgKDB4MTApCi0jZGVmaW5lIEZEQ19NT1RPUl8xICAgICAoMHgyMCkKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXZvaWQgKCoqaG9vaykgKHZvaWQpOwkvKiBvdXIgd2VkZ2UgaW50byB0aGUgaXNyICovCi0JZW51bSB7Ci0JCW5vX2ZkYywgaTgyNzIsIGk4MjA3NywgaTgyMDc3QUEsIGZjMTAsCi0JCWk4MjA3OCwgaTgyMDc4XzEKLQl9IHR5cGU7CQkJLyogRkRDIHR5cGUgKi8KLQl1bnNpZ25lZCBpbnQgaXJxOyAvKiBGREMgaXJxIG5yICovCi0JdW5zaWduZWQgaW50IGRtYTsgLyogRkRDIGRtYSBjaGFubmVsIG5yICovCi0JX191MTYgc3JhOwkgIC8qIFN0YXR1cyByZWdpc3RlciBBIChQUy8yIG9ubHkpICovCi0JX191MTYgc3JiOwkgIC8qIFN0YXR1cyByZWdpc3RlciBCIChQUy8yIG9ubHkpICovCi0JX191MTYgZG9yOwkgIC8qIERpZ2l0YWwgb3V0cHV0IHJlZ2lzdGVyICovCi0JX191MTYgdGRyOwkgIC8qIFRhcGUgRHJpdmUgUmVnaXN0ZXIgKDgyMDc3U0wtMSAmCi0JCQkgICAgIDgyMDc4IG9ubHkpICovCi0JX191MTYgbXNyOwkgIC8qIE1haW4gU3RhdHVzIFJlZ2lzdGVyICovCi0JX191MTYgZHNyOwkgIC8qIERhdGFyYXRlIFNlbGVjdCBSZWdpc3RlciAoODIwN3ggb25seSkgKi8KLQlfX3UxNiBmaWZvOwkgIC8qIERhdGEgcmVnaXN0ZXIgLyBGaWZvIG9uIDgyMDd4ICovCi0JX191MTYgZGlyOwkgIC8qIERpZ2l0YWwgSW5wdXQgUmVnaXN0ZXIgKi8KLQlfX3UxNiBjY3I7CSAgLyogQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCi0JX191MTYgZG9yMjsJICAvKiBBbHRlcm5hdGUgZG9yIG9uIE1BQ0gtMiBjb250cm9sbGVyLAotCQkJICAgICBhbHNvIHVzZWQgd2l0aCBGQy0xMCwgbWVhbmluZyB1bmtub3duICovCi19IGZkY19jb25maWdfaW5mbzsKLQotdHlwZWRlZiBlbnVtIHsKLQlmZGNfZGF0YV9yYXRlXzI1MCAgPSAyLAotCWZkY19kYXRhX3JhdGVfMzAwICA9IDEsCS8qIGFueSBmZGMgaW4gZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JZmRjX2RhdGFfcmF0ZV81MDAgID0gMCwKLQlmZGNfZGF0YV9yYXRlXzEwMDAgPSAzLAotCWZkY19kYXRhX3JhdGVfMjAwMCA9IDEsCS8qIGk4MjA3OC0xOiB3aGVuIHVzaW5nIERhdGEgUmF0ZSBUYWJsZSAjMiAqLwotfSBmZGNfZGF0YV9yYXRlX3R5cGU7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JZmRjX2lkbGUgICAgICAgICAgPSAwLAotCWZkY19yZWFkaW5nX2RhdGEgID0gRkRDX1JFQUQsCi0JZmRjX3NlZWtpbmcgICAgICAgPSBGRENfU0VFSywKLQlmZGNfd3JpdGluZ19kYXRhICA9IEZEQ19XUklURSwKLQlmZGNfZGVsZXRpbmcgICAgICA9IEZEQ19XUklURV9ERUxFVEVELAotCWZkY19yZWFkaW5nX2lkICAgID0gRkRDX1JFQURJRCwKLQlmZGNfcmVjYWxpYnJhdGluZyA9IEZEQ19SRUNBTCwKLQlmZGNfZm9ybWF0dGluZyAgICA9IEZEQ19GT1JNQVQsCi0JZmRjX3ZlcmlmeWluZyAgICAgPSBGRENfVkVSSUZZCi19IGZkY19tb2RlX2VudW07Ci0KLXR5cGVkZWYgZW51bSB7Ci0Jd2FpdGluZyA9IDAsCi0JcmVhZGluZywKLQl3cml0aW5nLAotCWZvcm1hdHRpbmcsCi0JdmVyaWZ5aW5nLAotCWRlbGV0aW5nLAotCWRvbmUsCi0JZXJyb3IsCi0JbW1hcHBlZCwKLX0gYnVmZmVyX3N0YXRlX2VudW07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlfX3U4ICphZGRyZXNzOwotCXZvbGF0aWxlIGJ1ZmZlcl9zdGF0ZV9lbnVtIHN0YXR1czsKLQl2b2xhdGlsZSBfX3U4ICpwdHI7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGJ5dGVzOwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzZWdtZW50X2lkOwotCi0JLyogYml0bWFwIGZvciByZW1haW5kZXIgb2Ygc2VnbWVudCBub3QgeWV0IGhhbmRsZWQuCi0JICogb25lIGJpdCBzZXQgZm9yIGVhY2ggYmFkIHNlY3RvciB0aGF0IG11c3QgYmUgc2tpcHBlZC4KLQkgKi8KLQl2b2xhdGlsZSBTZWN0b3JNYXAgYmFkX3NlY3Rvcl9tYXA7Ci0KLQkvKiBiaXRtYXAgd2l0aCBiYWQgZGF0YSBibG9ja3MgaW4gZGF0YSBidWZmZXIuCi0JICogdGhlIGVycm9ycyBpbiB0aGlzIG1hcCBtYXkgYmUgcmV0cmllZC4KLQkgKi8KLQl2b2xhdGlsZSBTZWN0b3JNYXAgc29mdF9lcnJvcl9tYXA7Ci0KLQkvKiBiaXRtYXAgd2l0aCBiYWQgZGF0YSBibG9ja3MgaW4gZGF0YSBidWZmZXIKLQkgKiB0aGUgZXJyb3JzIGluIHRoaXMgbWFwIG1heSBub3QgYmUgcmV0cmllZC4KLQkgKi8KLQl2b2xhdGlsZSBTZWN0b3JNYXAgaGFyZF9lcnJvcl9tYXA7Ci0KLQkvKiByZXRyeSBjb3VudGVyIGZvciBzb2Z0IGVycm9ycy4KLQkgKi8KLQl2b2xhdGlsZSBpbnQgcmV0cnk7Ci0KLQkvKiBzZWN0b3JzIHRvIHNraXAgb24gcmV0cnkgPz8/Ci0JICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IHNraXA7Ci0KLQkvKiBuciBvZiBkYXRhIGJsb2NrcyBpbiBkYXRhIGJ1ZmZlcgotCSAqLwotCXZvbGF0aWxlIHVuc2lnbmVkIGludCBkYXRhX29mZnNldDsKLQotCS8qIG9mZnNldCBpbiBzZWdtZW50IGZvciBmaXJzdCBzZWN0b3IgdG8gYmUgaGFuZGxlZC4KLQkgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2VjdG9yX29mZnNldDsKLQotCS8qIHNpemUgb2YgY2x1c3RlciBvZiBnb29kIHNlY3RvcnMgdG8gYmUgaGFuZGxlZC4KLQkgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgc2VjdG9yX2NvdW50OwotCi0JLyogc2l6ZSBvZiByZW1haW5pbmcgcGFydCBvZiBzZWdtZW50IHRvIGJlIGhhbmRsZWQuCi0JICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IHJlbWFpbmluZzsKLQotCS8qIHBvaW50cyB0byBuZXh0IHNlZ21lbnQgKGNvbnRpZ3VvdXMpIHRvIGJlIGhhbmRsZWQsCi0JICogb3IgaXMgemVybyBpZiBubyByZWFkLWFoZWFkIGlzIGFsbG93ZWQuCi0JICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IG5leHRfc2VnbWVudDsKLQotCS8qIGZsYWcgYmVpbmcgc2V0IGlmIGRlbGV0ZWQgZGF0YSB3YXMgcmVhZC4KLQkgKi8KLQl2b2xhdGlsZSBpbnQgZGVsZXRlZDsKLQotCS8qIGZsb3BweSBjb29yZGluYXRlcyBvZiBmaXJzdCBzZWN0b3IgaW4gc2VnbWVudCAqLwotCXZvbGF0aWxlIF9fdTggaGVhZDsKLQl2b2xhdGlsZSBfX3U4IGN5bDsKLQl2b2xhdGlsZSBfX3U4IHNlY3Q7Ci0KLQkvKiBnYXAgdG8gdXNlIHdoZW4gZm9ybWF0dGluZyAqLwotCV9fdTggZ2FwMzsKLQkvKiBmbGFnIHNldCB3aGVuIGJ1ZmZlciBpcyBtbWFwZWQgKi8KLQlpbnQgbW1hcHBlZDsKLX0gYnVmZmVyX3N0cnVjdDsKLQotLyoKLSAqICAgICAgZmRjLWlvLmMgZGVmaW5lZCBwdWJsaWMgdmFyaWFibGVzCi0gKi8KLWV4dGVybiB2b2xhdGlsZSBmZGNfbW9kZV9lbnVtIGZkY19tb2RlOwotZXh0ZXJuIGludCBmZGNfc2V0dXBfZXJyb3I7CS8qIG91dGRhdGVkID8/PyAqLwotZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGZ0YXBlX3dhaXRfaW50cjsKLWV4dGVybiB2b2xhdGlsZSBpbnQgZnRhcGVfY3VycmVudF9jeWxpbmRlcjsgLyogdHJhY2sgbnIgRkRDIHRoaW5rcyB3ZSdyZSBvbiAqLwotZXh0ZXJuIHZvbGF0aWxlIF9fdTggZmRjX2hlYWQ7CS8qIEZEQyBoZWFkICovCi1leHRlcm4gdm9sYXRpbGUgX191OCBmZGNfY3lsOwkvKiBGREMgdHJhY2sgKi8KLWV4dGVybiB2b2xhdGlsZSBfX3U4IGZkY19zZWN0OwkvKiBGREMgc2VjdG9yICovCi1leHRlcm4gZmRjX2NvbmZpZ19pbmZvIGZkYzsJLyogRkRDIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGludCBmdF9mZGNfYmFzZTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZnRfZmRjX2lycTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZnRfZmRjX2RtYTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZnRfZmRjX3RocmVzaG9sZDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgZnRfZmRjX3JhdGVfbGltaXQ7Ci1leHRlcm4gaW50IGZ0X3Byb2JlX2ZjMTA7Ci1leHRlcm4gaW50IGZ0X21hY2gyOwotLyoKLSAqICAgICAgZmRjLWlvLmMgZGVmaW5lZCBwdWJsaWMgZnVuY3Rpb25zCi0gKi8KLWV4dGVybiB2b2lkIGZkY19jYXRjaF9zdHJheV9pbnRlcnJ1cHRzKGludCBjb3VudCk7Ci1leHRlcm4gaW50IGZkY19yZWFkeV93YWl0KHVuc2lnbmVkIGludCB0aW1lb3V0KTsKLWV4dGVybiBpbnQgZmRjX2NvbW1hbmQoY29uc3QgX191OCAqIGNtZF9kYXRhLCBpbnQgY21kX2xlbik7Ci1leHRlcm4gaW50IGZkY19yZXN1bHQoX191OCAqIHJlc19kYXRhLCBpbnQgcmVzX2xlbik7Ci1leHRlcm4gaW50IGZkY19pbnRlcnJ1cHRfd2FpdCh1bnNpZ25lZCBpbnQgdGltZSk7Ci1leHRlcm4gaW50IGZkY19zZWVrKGludCB0cmFjayk7Ci1leHRlcm4gaW50IGZkY19zZW5zZV9kcml2ZV9zdGF0dXMoaW50ICpzdDMpOwotZXh0ZXJuIHZvaWQgZmRjX21vdG9yKGludCBtb3Rvcik7Ci1leHRlcm4gdm9pZCBmZGNfcmVzZXQodm9pZCk7Ci1leHRlcm4gdm9pZCBmZGNfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiBpbnQgZmRjX2ZpZm9fdGhyZXNob2xkKF9fdTggdGhyZXNob2xkLAotCQkJICAgICAgaW50ICpmaWZvX3N0YXRlLCBpbnQgKmxvY2tfc3RhdGUsIGludCAqZmlmb190aHIpOwotZXh0ZXJuIHZvaWQgZmRjX3dhaXRfY2FsaWJyYXRlKHZvaWQpOwotZXh0ZXJuIGludCBmZGNfc2Vuc2VfaW50ZXJydXB0X3N0YXR1cyhpbnQgKnN0MCwgaW50ICpjdXJyZW50X2N5bGluZGVyKTsKLWV4dGVybiB2b2lkIGZkY19zYXZlX2RyaXZlX3NwZWNzKHZvaWQpOwotZXh0ZXJuIHZvaWQgZmRjX3Jlc3RvcmVfZHJpdmVfc3BlY3Modm9pZCk7Ci1leHRlcm4gaW50IGZkY19zZXRfZGF0YV9yYXRlKGludCByYXRlKTsKLWV4dGVybiB2b2lkIGZkY19zZXRfd3JpdGVfcHJlY29tcChpbnQgcHJlY29tcCk7Ci1leHRlcm4gaW50IGZkY19yZWxlYXNlX2lycV9hbmRfZG1hKHZvaWQpOwotZXh0ZXJuIHZvaWQgZmRjX3JlbGVhc2VfcmVnaW9ucyh2b2lkKTsKLWV4dGVybiBpbnQgZmRjX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IGZkY19zZXR1cF9yZWFkX3dyaXRlKGJ1ZmZlcl9zdHJ1Y3QgKiBidWZmLCBfX3U4IG9wZXJhdGlvbik7Ci1leHRlcm4gaW50IGZkY19zZXR1cF9mb3JtYXR0aW5nKGJ1ZmZlcl9zdHJ1Y3QgKiBidWZmKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pc3IuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mZGMtaXNyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMmJjNzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pc3IuYworKysgL2Rldi9udWxsCkBAIC0xLDExNzAgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAgICAgIChDKSAxOTk2LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mZGMtaXNyLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuOSAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8xNyAyMzowMTo1MyAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgYW5kCi0gKiAgICAgIGFzc29jaWF0ZWQgY29kZSBmb3IgdGhlIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyCi0gKiAgICAgICJmdGFwZSIgZm9yIExpbnV4LgotICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KLSNkZWZpbmUgdm9sYXRpbGUJCS8qICovCi0KLSNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3FpYzExNy5oPgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mZGMtaXNyLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1pby5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWNhbGlici5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotCi0vKiAgICAgIEdsb2JhbCB2YXJzLgotICovCi12b2xhdGlsZSBpbnQgZnRfZXhwZWN0ZWRfc3RyYXlfaW50ZXJydXB0czsKLXZvbGF0aWxlIGludCBmdF9pbnRlcnJ1cHRfc2VlbjsKLXZvbGF0aWxlIGludCBmdF9zZWVrX2NvbXBsZXRlZDsKLXZvbGF0aWxlIGludCBmdF9oaWRlX2ludGVycnVwdDsKLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLQlub19lcnJvciA9IDAsIGlkX2FtX2Vycm9yID0gMHgwMSwgaWRfY3JjX2Vycm9yID0gMHgwMiwKLQlkYXRhX2FtX2Vycm9yID0gMHgwNCwgZGF0YV9jcmNfZXJyb3IgPSAweDA4LAotCW5vX2RhdGFfZXJyb3IgPSAweDEwLCBvdmVycnVuX2Vycm9yID0gMHgyMCwKLX0gZXJyb3JfY2F1c2U7Ci1zdGF0aWMgaW50IHN0b3BfcmVhZF9haGVhZDsKLQotCi1zdGF0aWMgdm9pZCBwcmludF9lcnJvcl9jYXVzZShpbnQgY2F1c2UpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCXN3aXRjaCAoY2F1c2UpIHsKLQljYXNlIG5vX2RhdGFfZXJyb3I6Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJubyBkYXRhIGVycm9yIik7Ci0JCWJyZWFrOwotCWNhc2UgaWRfYW1fZXJyb3I6Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJpZCBhbSBlcnJvciIpOwotCQlicmVhazsKLQljYXNlIGlkX2NyY19lcnJvcjoKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImlkIGNyYyBlcnJvciIpOwotCQlicmVhazsKLQljYXNlIGRhdGFfYW1fZXJyb3I6Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJkYXRhIGFtIGVycm9yIik7Ci0JCWJyZWFrOwotCWNhc2UgZGF0YV9jcmNfZXJyb3I6Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJkYXRhIGNyYyBlcnJvciIpOwotCQlicmVhazsKLQljYXNlIG92ZXJydW5fZXJyb3I6Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJvdmVycnVuIGVycm9yIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6OwotCX0KLQlUUkFDRV9FWElUOwotfQotCi1zdGF0aWMgY2hhciAqZmRjX21vZGVfdHh0KGZkY19tb2RlX2VudW0gbW9kZSkKLXsKLQlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIGZkY19pZGxlOgotCQlyZXR1cm4gImZkY19pZGxlIjsKLQljYXNlIGZkY19yZWFkaW5nX2RhdGE6Ci0JCXJldHVybiAiZmRjX3JlYWRpbmdfZGF0YSI7Ci0JY2FzZSBmZGNfc2Vla2luZzoKLQkJcmV0dXJuICJmZGNfc2Vla2luZyI7Ci0JY2FzZSBmZGNfd3JpdGluZ19kYXRhOgotCQlyZXR1cm4gImZkY193cml0aW5nX2RhdGEiOwotCWNhc2UgZmRjX3JlYWRpbmdfaWQ6Ci0JCXJldHVybiAiZmRjX3JlYWRpbmdfaWQiOwotCWNhc2UgZmRjX3JlY2FsaWJyYXRpbmc6Ci0JCXJldHVybiAiZmRjX3JlY2FsaWJyYXRpbmciOwotCWNhc2UgZmRjX2Zvcm1hdHRpbmc6Ci0JCXJldHVybiAiZmRjX2Zvcm1hdHRpbmciOwotCWNhc2UgZmRjX3ZlcmlmeWluZzoKLQkJcmV0dXJuICJmZGNfdmVyaWZ5aW5nIjsKLQlkZWZhdWx0OgotCQlyZXR1cm4gInVua25vd24iOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBlcnJvcl9jYXVzZSBkZWNvZGVfaXJxX2NhdXNlKGZkY19tb2RlX2VudW0gbW9kZSwgX191OCBzdFtdKQotewotCWVycm9yX2NhdXNlIGNhdXNlID0gbm9fZXJyb3I7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qICBWYWxpZCBzdFtdLCBkZWNvZGUgY2F1c2Ugb2YgaW50ZXJydXB0LgotCSAqLwotCXN3aXRjaCAoc3RbMF0gJiBTVDBfSU5UX01BU0spIHsKLQljYXNlIEZEQ19JTlRfTk9STUFMOgotCQlUUkFDRShmdF90X2ZkY19kbWEsIm5vcm1hbCBjb21wbGV0aW9uOiAlcyIsZmRjX21vZGVfdHh0KG1vZGUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBGRENfSU5UX0FCTk9STUFMOgotCQlUUkFDRShmdF90X2Zsb3csICJhYm5vcm1hbCBjb21wbGV0aW9uICVzIiwgZmRjX21vZGVfdHh0KG1vZGUpKTsKLQkJVFJBQ0UoZnRfdF9mZGNfZG1hLCAiU1QwOiAweCUwMngsIFNUMTogMHglMDJ4LCBTVDI6IDB4JTAyeCIsCi0JCSAgICAgIHN0WzBdLCBzdFsxXSwgc3RbMl0pOwotCQlUUkFDRShmdF90X2ZkY19kbWEsCi0JCSAgICAgICJDOiAweCUwMngsIEg6IDB4JTAyeCwgUjogMHglMDJ4LCBOOiAweCUwMngiLAotCQkgICAgICBzdFszXSwgc3RbNF0sIHN0WzVdLCBzdFs2XSk7Ci0JCWlmIChzdFsxXSAmIDB4MDEpIHsKLQkJCWlmIChzdFsyXSAmIDB4MDEpIHsKLQkJCQljYXVzZSA9IGRhdGFfYW1fZXJyb3I7Ci0JCQl9IGVsc2UgewotCQkJCWNhdXNlID0gaWRfYW1fZXJyb3I7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3RbMV0gJiAweDIwKSB7Ci0JCQlpZiAoc3RbMl0gJiAweDIwKSB7Ci0JCQkJY2F1c2UgPSBkYXRhX2NyY19lcnJvcjsKLQkJCX0gZWxzZSB7Ci0JCQkJY2F1c2UgPSBpZF9jcmNfZXJyb3I7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3RbMV0gJiAweDA0KSB7Ci0JCQljYXVzZSA9IG5vX2RhdGFfZXJyb3I7Ci0JCX0gZWxzZSBpZiAoc3RbMV0gJiAweDEwKSB7Ci0JCQljYXVzZSA9IG92ZXJydW5fZXJyb3I7Ci0JCX0KLQkJcHJpbnRfZXJyb3JfY2F1c2UoY2F1c2UpOwotCQlicmVhazsKLQljYXNlIEZEQ19JTlRfSU5WQUxJRDoKLQkJVFJBQ0UoZnRfdF9mbG93LCAiaW52YWxpZCBjb21wbGV0aW9uICVzIiwgZmRjX21vZGVfdHh0KG1vZGUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBGRENfSU5UX1JFQURZQ0g6Ci0JCWlmIChzdFswXSAmIFNUMF9TRUVLX0VORCkgewotCQkJVFJBQ0UoZnRfdF9mbG93LCAiZHJpdmUgcG9sbCBjb21wbGV0ZWQiKTsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3RfZmxvdywgInJlYWR5IGNoYW5nZSAlcyIsZmRjX21vZGVfdHh0KG1vZGUpKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JVFJBQ0VfRVhJVCBjYXVzZTsKLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2hpc3RvcnkoZXJyb3JfY2F1c2UgY2F1c2UpCi17Ci0Jc3dpdGNoIChjYXVzZSkgewotCWNhc2UgaWRfYW1fZXJyb3I6Ci0JCWZ0X2hpc3RvcnkuaWRfYW1fZXJyb3JzKys7Ci0JCWJyZWFrOwotCWNhc2UgaWRfY3JjX2Vycm9yOgotCQlmdF9oaXN0b3J5LmlkX2NyY19lcnJvcnMrKzsKLQkJYnJlYWs7Ci0JY2FzZSBkYXRhX2FtX2Vycm9yOgotCQlmdF9oaXN0b3J5LmRhdGFfYW1fZXJyb3JzKys7Ci0JCWJyZWFrOwotCWNhc2UgZGF0YV9jcmNfZXJyb3I6Ci0JCWZ0X2hpc3RvcnkuZGF0YV9jcmNfZXJyb3JzKys7Ci0JCWJyZWFrOwotCWNhc2Ugb3ZlcnJ1bl9lcnJvcjoKLQkJZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9ycysrOwotCQlicmVhazsKLQljYXNlIG5vX2RhdGFfZXJyb3I6Ci0JCWZ0X2hpc3Rvcnkubm9fZGF0YV9lcnJvcnMrKzsKLQkJYnJlYWs7Ci0JZGVmYXVsdDo7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBza2lwX2JhZF9zZWN0b3IoYnVmZmVyX3N0cnVjdCAqIGJ1ZmYpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qICBNYXJrIHNlY3RvciBhcyBzb2Z0IGVycm9yIGFuZCBza2lwIGl0Ci0JICovCi0JaWYgKGJ1ZmYtPnJlbWFpbmluZyA+IDApIHsKLQkJKytidWZmLT5zZWN0b3Jfb2Zmc2V0OwotCQkrK2J1ZmYtPmRhdGFfb2Zmc2V0OwotCQktLWJ1ZmYtPnJlbWFpbmluZzsKLQkJYnVmZi0+cHRyICs9IEZUX1NFQ1RPUl9TSVpFOwotCQlidWZmLT5iYWRfc2VjdG9yX21hcCA+Pj0gMTsKLQl9IGVsc2UgewotCQkvKiAgSGV5LCB3aGF0IGlzIHRoaXM/Pz8/Pz8/Pz8/Pz8/IEMgY29kZTogaWYgd2Ugc2hpZnQgCi0JCSAqICBtb3JlIHRoYW4gMzEgYml0cywgd2UgZ2V0IG5vIHNoaWZ0LiBUaGF0J3MgYmFkISEhISEhCi0JCSAqLwotCQkrK2J1ZmYtPnNlY3Rvcl9vZmZzZXQ7CS8qIGhhY2sgZm9yIGVycm9yIG1hcHMgKi8KLQkJVFJBQ0UoZnRfdF93YXJuLCAic2tpcHBpbmcgbGFzdCBzZWN0b3IgaW4gc2VnbWVudCIpOwotCX0KLQlUUkFDRV9FWElUOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfZXJyb3JfbWFwcyhidWZmZXJfc3RydWN0ICogYnVmZiwgdW5zaWduZWQgaW50IGVycm9yX29mZnNldCkKLXsKLQlpbnQgaGFyZCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWlmIChidWZmLT5yZXRyeSA8IEZUX1NPRlRfUkVUUklFUykgewotCQlidWZmLT5zb2Z0X2Vycm9yX21hcCB8PSAoMSA8PCBlcnJvcl9vZmZzZXQpOwotCX0gZWxzZSB7Ci0JCWJ1ZmYtPmhhcmRfZXJyb3JfbWFwIHw9ICgxIDw8IGVycm9yX29mZnNldCk7Ci0JCWJ1ZmYtPnNvZnRfZXJyb3JfbWFwICY9IH5idWZmLT5oYXJkX2Vycm9yX21hcDsKLQkJYnVmZi0+cmV0cnkgPSAtMTsgIC8qIHdpbGwgYmUgc2V0IHRvIDAgaW4gc2V0dXBfc2VnbWVudCAqLwotCQloYXJkID0gMTsKLQl9Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgInNlY3RvciAlZCA6ICVzIGVycm9yXG4iCi0JICAgICAgS0VSTl9JTkZPICJoYXJkIG1hcDogMHglMDhseFxuIgotCSAgICAgIEtFUk5fSU5GTyAic29mdCBtYXA6IDB4JTA4bHgiLAotCSAgICAgIEZUX1NFQ1RPUihlcnJvcl9vZmZzZXQpLCBoYXJkID8gImhhcmQiIDogInNvZnQiLAotCSAgICAgIChsb25nKSBidWZmLT5oYXJkX2Vycm9yX21hcCwgKGxvbmcpIGJ1ZmYtPnNvZnRfZXJyb3JfbWFwKTsKLQlUUkFDRV9FWElUOwotfQotCi1zdGF0aWMgdm9pZCBwcmludF9wcm9ncmVzcyhidWZmZXJfc3RydWN0ICpidWZmLCBlcnJvcl9jYXVzZSBjYXVzZSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0Jc3dpdGNoIChjYXVzZSkgewotCWNhc2Ugbm9fZXJyb3I6IAotCQlUUkFDRShmdF90X2Zsb3csIiVkIFNlY3RvcihzKSB0cmFuc2ZlcnJlZCIsIGJ1ZmYtPnNlY3Rvcl9jb3VudCk7Ci0JCWJyZWFrOwotCWNhc2Ugbm9fZGF0YV9lcnJvcjoKLQkJVFJBQ0UoZnRfdF9mbG93LCAiU2VjdG9yICVkIG5vdCBmb3VuZCIsCi0JCSAgICAgIEZUX1NFQ1RPUihidWZmLT5zZWN0b3Jfb2Zmc2V0KSk7Ci0JCWJyZWFrOwotCWNhc2Ugb3ZlcnJ1bl9lcnJvcjoKLQkJLyogIGdvdCBhbiBvdmVycnVuIGVycm9yIG9uIHRoZSBmaXJzdCBieXRlLCBtdXN0IGJlIGEKLQkJICogIGhhcmR3YXJlIHByb2JsZW0KLQkJICovCi0JCVRSQUNFKGZ0X3RfYnVnLAotCQkgICAgICAiVW5leHBlY3RlZCBlcnJvcjogZmFpbGluZyBETUEgb3IgRkRDIGNvbnRyb2xsZXIgPyIpOwotCQlicmVhazsKLQljYXNlIGRhdGFfY3JjX2Vycm9yOgotCQlUUkFDRShmdF90X2Zsb3csICJFcnJvciBpbiBzZWN0b3IgJWQiLAotCQkgICAgICBGVF9TRUNUT1IoYnVmZi0+c2VjdG9yX29mZnNldCAtIDEpKTsKLQkJYnJlYWs7Ci0JY2FzZSBpZF9jcmNfZXJyb3I6Ci0JY2FzZSBpZF9hbV9lcnJvcjoKLQljYXNlIGRhdGFfYW1fZXJyb3I6Ci0JCVRSQUNFKGZ0X3RfZmxvdywgIkVycm9yIGluIHNlY3RvciAlZCIsCi0JCSAgICAgIEZUX1NFQ1RPUihidWZmLT5zZWN0b3Jfb2Zmc2V0KSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVRSQUNFKGZ0X3RfZmxvdywgIlVuZXhwZWN0ZWQgZXJyb3IgYXQgc2VjdG9yICVkIiwKLQkJICAgICAgRlRfU0VDVE9SKGJ1ZmYtPnNlY3Rvcl9vZmZzZXQpKTsKLQkJYnJlYWs7Ci0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLS8qCi0gKiAgRXJyb3IgY2F1c2U6ICAgQW1vdW50IHhmZXJyZWQ6ICBBY3Rpb246Ci0gKgotICogIGlkX2FtX2Vycm9yICAgICAgICAgMCAgICAgICAgICAgbWFyayBiYWQgYW5kIHNraXAKLSAqICBpZF9jcmNfZXJyb3IgICAgICAgIDAgICAgICAgICAgIG1hcmsgYmFkIGFuZCBza2lwCi0gKiAgZGF0YV9hbV9lcnJvciAgICAgICAwICAgICAgICAgICBtYXJrIGJhZCBhbmQgc2tpcAotICogIGRhdGFfY3JjX2Vycm9yICAgICUgMTAyNCAgICAgICAgbWFyayBiYWQgYW5kIHNraXAKLSAqICBub19kYXRhX2Vycm9yICAgICAgIDAgICAgICAgICAgIHJldHJ5IG9uIHdyaXRlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrIGJhZCBhbmQgc2tpcCBvbiByZWFkCi0gKiAgb3ZlcnJ1bl9lcnJvciAgWyAwLi5hbGwtMSBdICAgICBtYXJrIGJhZCBhbmQgc2tpcAotICogIG5vX2Vycm9yICAgICAgICAgICBhbGwgICAgICAgICAgY29udGludWUKLSAqLwotCi0vKiAgdGhlIGFyZyBgc2VjdG9yJyBpcyByZXR1cm5lZCBieSB0aGUgZmRjIGFuZCB0ZWxscyB1cyBhdCB3aGljaCBzZWN0b3Igd2UKLSAqICBhcmUgcG9zaXRpb25lZCBhdCAocmVsYXRpdmUgdG8gc3RhcnRpbmcgc2VjdG9yIG9mIHNlZ21lbnQpCi0gKi8KLXN0YXRpYyB2b2lkIGRldGVybWluZV92ZXJpZnlfcHJvZ3Jlc3MoYnVmZmVyX3N0cnVjdCAqYnVmZiwKLQkJCQkgICAgICBlcnJvcl9jYXVzZSBjYXVzZSwKLQkJCQkgICAgICBfX3U4IHNlY3RvcikKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JaWYgKGNhdXNlID09IG5vX2Vycm9yICYmIHNlY3RvciA9PSAxKSB7Ci0JCWJ1ZmYtPnNlY3Rvcl9vZmZzZXQgPSBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UOwotCQlidWZmLT5yZW1haW5pbmcgICAgID0gMDsKLQkJaWYgKFRSQUNFX0xFVkVMID49IGZ0X3RfZmxvdykgewotCQkJcHJpbnRfcHJvZ3Jlc3MoYnVmZiwgY2F1c2UpOwotCQl9Ci0JfSBlbHNlIHsKLQkJYnVmZi0+c2VjdG9yX29mZnNldCA9IHNlY3RvciAtIGJ1ZmYtPnNlY3Q7Ci0JCWJ1ZmYtPnJlbWFpbmluZyA9IEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgLSBidWZmLT5zZWN0b3Jfb2Zmc2V0OwotCQlUUkFDRShmdF90X25vaXNlLCAiJXNzZWN0b3Igb2Zmc2V0OiAweCUwNHgiLCAKLQkJICAgICAgKGNhdXNlID09IG5vX2Vycm9yKSA/ICJ1bmV4cGVjdGVkICIgOiAiIiwKLQkJICAgICAgYnVmZi0+c2VjdG9yX29mZnNldCk7Ci0JCXN3aXRjaCAoY2F1c2UpIHsKLQkJY2FzZSBvdmVycnVuX2Vycm9yOgotCQkJYnJlYWs7Ci0jaWYgMAotCQljYXNlIG5vX2RhdGFfZXJyb3I6Ci0JCQlidWZmLT5yZXRyeSA9IEZUX1NPRlRfUkVUUklFUzsKLQkJCWlmIChidWZmLT5oYXJkX2Vycm9yX21hcCAgICAmJgotCQkJICAgIGJ1ZmYtPnNlY3Rvcl9vZmZzZXQgPiAxICYmCi0JCQkgICAgKGJ1ZmYtPmhhcmRfZXJyb3JfbWFwICYgCi0JCQkgICAgICgxIDw8IChidWZmLT5zZWN0b3Jfb2Zmc2V0LTIpKSkpIHsKLQkJCQlidWZmLT5yZXRyeSAtLTsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlidWZmLT5yZXRyeSA9IEZUX1NPRlRfUkVUUklFUzsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChUUkFDRV9MRVZFTCA+PSBmdF90X2Zsb3cpIHsKLQkJCXByaW50X3Byb2dyZXNzKGJ1ZmYsIGNhdXNlKTsKLQkJfQotCQkvKiAgU2VjdG9yX29mZnNldCBwb2ludHMgdG8gdGhlIHByb2JsZW0gYXJlYSBOb3cgYWRqdXN0Ci0JCSAqICBzZWN0b3Jfb2Zmc2V0IHNvIGl0IGFsd2F5cyBwb2ludHMgb25lIHBhc3QgaGUgZmFpbGluZwotCQkgKiAgc2VjdG9yLiBJLmUuIHNraXAgdGhlIGJhZCBzZWN0b3IuCi0JCSAqLwotCQkrK2J1ZmYtPnNlY3Rvcl9vZmZzZXQ7Ci0JCS0tYnVmZi0+cmVtYWluaW5nOwotCQl1cGRhdGVfZXJyb3JfbWFwcyhidWZmLCBidWZmLT5zZWN0b3Jfb2Zmc2V0IC0gMSk7Ci0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRldGVybWluZV9wcm9ncmVzcyhidWZmZXJfc3RydWN0ICpidWZmLAotCQkJICAgICAgIGVycm9yX2NhdXNlIGNhdXNlLAotCQkJICAgICAgIF9fdTggc2VjdG9yKQotewotCXVuc2lnbmVkIGludCBkbWFfcmVzaWR1ZTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogIFVzaW5nIGxlc3MgcHJlZmVycmVkIG9yZGVyIG9mIGRpc2FibGVfZG1hIGFuZAotCSAqICBnZXRfZG1hX3Jlc2lkdWUgYmVjYXVzZSB0aGlzIHNlZW1zIHRvIGZhaWwgb24gYXQgbGVhc3Qgb25lCi0JICogIHN5c3RlbSBpZiByZXZlcnNlZCEKLQkgKi8KLQlkbWFfcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShmZGMuZG1hKTsKLQlkaXNhYmxlX2RtYShmZGMuZG1hKTsKLQlpZiAoY2F1c2UgIT0gbm9fZXJyb3IgfHwgZG1hX3Jlc2lkdWUgIT0gMCkgewotCQlUUkFDRShmdF90X25vaXNlLCAiJXNETUEgcmVzaWR1ZTogMHglMDR4IiwgCi0JCSAgICAgIChjYXVzZSA9PSBub19lcnJvcikgPyAidW5leHBlY3RlZCAiIDogIiIsCi0JCSAgICAgIGRtYV9yZXNpZHVlKTsKLQkJLyogYWRqdXN0IHRvIGFjdHVhbCB2YWx1ZTogKi8KLQkJaWYgKGRtYV9yZXNpZHVlID09IDApIHsKLQkJCS8qIHRoaXMgaGFwcGVucyBzb21ldGltZXMgd2l0aCBvdmVycnVuIGVycm9ycy4KLQkJCSAqIEkgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIGNvdWxkIGlnbm9yZSB0aGUKLQkJCSAqIG92ZXJydW4gZXJyb3IuIFBsYXkgc2F2ZS4KLQkJCSAqLwotCQkJYnVmZi0+c2VjdG9yX2NvdW50IC0tOwotCQl9IGVsc2UgewotCQkJYnVmZi0+c2VjdG9yX2NvdW50IC09ICgoZG1hX3Jlc2lkdWUgKyAKLQkJCQkJCShGVF9TRUNUT1JfU0laRSAtIDEpKSAvCi0JCQkJCSAgICAgICBGVF9TRUNUT1JfU0laRSk7Ci0JCX0KLQl9Ci0JLyogIFVwZGF0ZSB2YXIncyBpbmZsdWVuY2VkIGJ5IHRoZSBETUEgb3BlcmF0aW9uLgotCSAqLwotCWlmIChidWZmLT5zZWN0b3JfY291bnQgPiAwKSB7Ci0JCWJ1ZmYtPnNlY3Rvcl9vZmZzZXQgICArPSBidWZmLT5zZWN0b3JfY291bnQ7Ci0JCWJ1ZmYtPmRhdGFfb2Zmc2V0ICAgICArPSBidWZmLT5zZWN0b3JfY291bnQ7Ci0JCWJ1ZmYtPnB0ciAgICAgICAgICAgICArPSAoYnVmZi0+c2VjdG9yX2NvdW50ICoKLQkJCQkJICBGVF9TRUNUT1JfU0laRSk7Ci0JCWJ1ZmYtPnJlbWFpbmluZyAgICAgICAtPSBidWZmLT5zZWN0b3JfY291bnQ7Ci0JCWJ1ZmYtPmJhZF9zZWN0b3JfbWFwID4+PSBidWZmLT5zZWN0b3JfY291bnQ7Ci0JfQotCWlmIChUUkFDRV9MRVZFTCA+PSBmdF90X2Zsb3cpIHsKLQkJcHJpbnRfcHJvZ3Jlc3MoYnVmZiwgY2F1c2UpOwotCX0KLQlpZiAoY2F1c2UgIT0gbm9fZXJyb3IpIHsKLQkJaWYgKGJ1ZmYtPnJlbWFpbmluZyA9PSAwKSB7Ci0JCQlUUkFDRShmdF90X3dhcm4sICJmb28/XG4iCi0JCQkgICAgICBLRVJOX0lORk8gImNvdW50IDogJWRcbiIKLQkJCSAgICAgIEtFUk5fSU5GTyAib2Zmc2V0OiAlZFxuIgotCQkJICAgICAgS0VSTl9JTkZPICJzb2Z0ICA6ICUwOHhcbiIKLQkJCSAgICAgIEtFUk5fSU5GTyAiaGFyZCAgOiAlMDh4IiwKLQkJCSAgICAgIGJ1ZmYtPnNlY3Rvcl9jb3VudCwKLQkJCSAgICAgIGJ1ZmYtPnNlY3Rvcl9vZmZzZXQsCi0JCQkgICAgICBidWZmLT5zb2Z0X2Vycm9yX21hcCwKLQkJCSAgICAgIGJ1ZmYtPmhhcmRfZXJyb3JfbWFwKTsKLQkJfQotCQkvKiAgU2VjdG9yX29mZnNldCBwb2ludHMgdG8gdGhlIHByb2JsZW0gYXJlYSwgZXhjZXB0IGlmIHdlIGdvdAotCQkgKiAgYSBkYXRhX2NyY19lcnJvci4gSW4gdGhhdCBjYXNlIGl0IHBvaW50cyBvbmUgcGFzdCB0aGUKLQkJICogIGZhaWxpbmcgc2VjdG9yLgotCQkgKgotCQkgKiAgTm93IGFkanVzdCBzZWN0b3Jfb2Zmc2V0IHNvIGl0IGFsd2F5cyBwb2ludHMgb25lIHBhc3QgaGUKLQkJICogIGZhaWxpbmcgc2VjdG9yLiBJLmUuIHNraXAgdGhlIGJhZCBzZWN0b3IuICAKLQkJICovCi0JCWlmIChjYXVzZSAhPSBkYXRhX2NyY19lcnJvcikgewotCQkJc2tpcF9iYWRfc2VjdG9yKGJ1ZmYpOwotCQl9Ci0JCXVwZGF0ZV9lcnJvcl9tYXBzKGJ1ZmYsIGJ1ZmYtPnNlY3Rvcl9vZmZzZXQgLSAxKTsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotc3RhdGljIGludCBjYWxjX3N0ZXBzKGludCBjbWQpCi17Ci0JaWYgKGZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgPiBjbWQpIHsKLQkJcmV0dXJuIGZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgLSBjbWQ7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgKyBjbWQ7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwYXVzZV90YXBlKGludCByZXRyeSwgaW50IG1vZGUpCi17Ci0JaW50IHJlc3VsdDsKLQlfX3U4IG91dFszXSA9IHtGRENfU0VFSywgZnRfZHJpdmVfc2VsLCAwfTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogIFdlJ2xsIHVzZSBhIHJhdyBzZWVrIGNvbW1hbmQgdG8gZ2V0IHRoZSB0YXBlIHRvIHJld2luZCBhbmQKLQkgKiAgc3RvcCBmb3IgYSByZXRyeS4KLQkgKi8KLQkrK2Z0X2hpc3RvcnkucmV3aW5kczsKLQlpZiAocWljMTE3X2NtZHNbZnRhcGVfY3VycmVudF9jb21tYW5kXS5ub25faW50cikgewotCQlUUkFDRShmdF90X3dhcm4sICJtb3Rpb24gY29tbWFuZCBtYXkgYmUgaXNzdWVkIHRvbyBzb29uIik7Ci0JfQotCWlmIChyZXRyeSAmJiAobW9kZSA9PSBmZGNfcmVhZGluZ19kYXRhIHx8Ci0JCSAgICAgIG1vZGUgPT0gZmRjX3JlYWRpbmdfaWQgICB8fAotCQkgICAgICBtb2RlID09IGZkY192ZXJpZnlpbmcpKSB7Ci0JCWZ0YXBlX2N1cnJlbnRfY29tbWFuZCA9IFFJQ19NSUNST19TVEVQX1BBVVNFOwotCQlmdGFwZV9taWdodF9iZV9vZmZfdHJhY2sgPSAxOwotCX0gZWxzZSB7Ci0JCWZ0YXBlX2N1cnJlbnRfY29tbWFuZCA9IFFJQ19QQVVTRTsKLQl9Ci0Jb3V0WzJdID0gY2FsY19zdGVwcyhmdGFwZV9jdXJyZW50X2NvbW1hbmQpOwotCXJlc3VsdCA9IGZkY19jb21tYW5kKG91dCwgMyk7IC8qIGlzc3VlIFFJQ18xMTcgY29tbWFuZCAqLwotCWZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgPSBvdXRbIDJdOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJxaWMtcGF1c2UgZmFpbGVkLCBzdGF0dXMgPSAlZCIsIHJlc3VsdCk7Ci0JfSBlbHNlIHsKLQkJZnRfbG9jYXRpb24ua25vd24gID0gMDsKLQkJZnRfcnVubmVyX3N0YXR1cyAgID0gaWRsZTsKLQkJZnRfaGlkZV9pbnRlcnJ1cHQgICAgID0gMTsKLQkJZnRhcGVfdGFwZV9ydW5uaW5nID0gMDsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotc3RhdGljIHZvaWQgY29udGludWVfeGZlcihidWZmZXJfc3RydWN0ICpidWZmLAotCQkJICBmZGNfbW9kZV9lbnVtIG1vZGUsIAotCQkJICB1bnNpZ25lZCBpbnQgc2tpcCkKLXsKLQlpbnQgd3JpdGUgPSAwOwotIAlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JaWYgKG1vZGUgPT0gZmRjX3dyaXRpbmdfZGF0YSB8fCBtb2RlID09IGZkY19kZWxldGluZykgewotCQl3cml0ZSA9IDE7Ci0JfQotCS8qICBUaGlzIHBhcnQgY2FuIGJlIHJlbW92ZWQgaWYgaXQgbmV2ZXIgaGFwcGVucwotCSAqLwotCWlmIChza2lwID4gMCAmJgotCSAgICAoZnRfcnVubmVyX3N0YXR1cyAhPSBydW5uaW5nIHx8Ci0JICAgICAod3JpdGUgJiYgKGJ1ZmYtPnN0YXR1cyAhPSB3cml0aW5nKSkgfHwKLQkgICAgICghd3JpdGUgJiYgKGJ1ZmYtPnN0YXR1cyAhPSByZWFkaW5nICYmIAotCQkJIGJ1ZmYtPnN0YXR1cyAhPSB2ZXJpZnlpbmcpKSkpIHsKLQkJVFJBQ0UoZnRfdF9lcnIsICJ1bmV4cGVjdGVkIHJ1bm5lci9idWZmZXIgc3RhdGUgJWQvJWQiLAotCQkgICAgICBmdF9ydW5uZXJfc3RhdHVzLCBidWZmLT5zdGF0dXMpOwotCQlidWZmLT5zdGF0dXMgPSBlcnJvcjsKLQkJLyogZmluaXNoIHRoaXMgYnVmZmVyOiAqLwotCQkodm9pZClmdGFwZV9uZXh0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsKLQkJZnRfcnVubmVyX3N0YXR1cyA9IGFib3J0aW5nOwotCQlmZGNfbW9kZSAgICAgICAgID0gZmRjX2lkbGU7Ci0JfSBlbHNlIGlmIChidWZmLT5yZW1haW5pbmcgPiAwICYmIGZ0YXBlX2NhbGNfbmV4dF9jbHVzdGVyKGJ1ZmYpID4gMCkgewotCQkvKiAgc3RpbGwgc2VjdG9ycyBsZWZ0IGluIGN1cnJlbnQgc2VnbWVudCwgY29udGludWUKLQkJICogIHdpdGggdGhpcyBzZWdtZW50Ci0JCSAqLwotCQlpZiAoZmRjX3NldHVwX3JlYWRfd3JpdGUoYnVmZiwgbW9kZSkgPCAwKSB7Ci0JCQkvKiBmYWlsZWQsIGFib3J0IG9wZXJhdGlvbgotCQkJICovCi0JCQlidWZmLT5ieXRlcyA9IGJ1ZmYtPnB0ciAtIGJ1ZmYtPmFkZHJlc3M7Ci0JCQlidWZmLT5zdGF0dXMgPSBlcnJvcjsKLQkJCS8qIGZpbmlzaCB0aGlzIGJ1ZmZlcjogKi8KLQkJCSh2b2lkKWZ0YXBlX25leHRfYnVmZmVyKGZ0X3F1ZXVlX2hlYWQpOwotCQkJZnRfcnVubmVyX3N0YXR1cyA9IGFib3J0aW5nOwotCQkJZmRjX21vZGUgICAgICAgICA9IGZkY19pZGxlOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogY3VycmVudCBzZWdtZW50IGNvbXBsZXRlZAotCQkgKi8KLQkJdW5zaWduZWQgaW50IGxhc3Rfc2VnbWVudCA9IGJ1ZmYtPnNlZ21lbnRfaWQ7Ci0JCWludCBlb3QgPSAoKGxhc3Rfc2VnbWVudCArIDEpICUgZnRfc2VnbWVudHNfcGVyX3RyYWNrKSA9PSAwOwotCQl1bnNpZ25lZCBpbnQgbmV4dCA9IGJ1ZmYtPm5leHRfc2VnbWVudDsJLyogMCBtZWFucyBzdG9wICEgKi8KLQotCQlidWZmLT5ieXRlcyA9IGJ1ZmYtPnB0ciAtIGJ1ZmYtPmFkZHJlc3M7Ci0JCWJ1ZmYtPnN0YXR1cyA9IGRvbmU7Ci0JCWJ1ZmYgPSBmdGFwZV9uZXh0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsKLQkJaWYgKGVvdCkgewotCQkJLyogIGZpbmlzaGVkIGxhc3Qgc2VnbWVudCBvbiBjdXJyZW50IHRyYWNrLAotCQkJICogIGNhbid0IGNvbnRpbnVlCi0JCQkgKi8KLQkJCWZ0X3J1bm5lcl9zdGF0dXMgPSBsb2dpY2FsX2VvdDsKLQkJCWZkY19tb2RlICAgICAgICAgPSBmZGNfaWRsZTsKLQkJCVRSQUNFX0VYSVQ7Ci0JCX0KLQkJaWYgKG5leHQgPD0gMCkgewotCQkJLyogIGRvbid0IGNvbnRpbnVlIHdpdGggbmV4dCBzZWdtZW50Ci0JCQkgKi8KLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJubyAlcyBhbGxvd2VkLCBzdG9wcGluZyB0YXBlIiwKLQkJCSAgICAgICh3cml0ZSkgPyAid3JpdGUgbmV4dCIgOiAicmVhZCBhaGVhZCIpOwotCQkJcGF1c2VfdGFwZSgwLCBtb2RlKTsKLQkJCWZ0X3J1bm5lcl9zdGF0dXMgPSBpZGxlOyAgLyogIG5vdCBxdWl0ZSB0cnVlIHVudGlsCi0JCQkJCQkgICAqICBuZXh0IGlycSAKLQkJCQkJCSAgICovCi0JCQlUUkFDRV9FWElUOwotCQl9Ci0JCS8qICBjb250aW51ZSB3aXRoIG5leHQgc2VnbWVudAotCQkgKi8KLQkJaWYgKGJ1ZmYtPnN0YXR1cyAhPSB3YWl0aW5nKSB7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiYWxsIGlucHV0IGJ1ZmZlcnMgJXMsIHBhdXNpbmcgdGFwZSIsCi0JCQkgICAgICAod3JpdGUpID8gImVtcHR5IiA6ICJmdWxsIik7Ci0JCQlwYXVzZV90YXBlKDAsIG1vZGUpOwotCQkJZnRfcnVubmVyX3N0YXR1cyA9IGlkbGU7ICAvKiAgbm90IHF1aXRlIHRydWUgdW50aWwKLQkJCQkJCSAgICogIG5leHQgaXJxIAotCQkJCQkJICAgKi8KLQkJCVRSQUNFX0VYSVQ7Ci0JCX0KLQkJaWYgKHdyaXRlICYmIG5leHQgIT0gYnVmZi0+c2VnbWVudF9pZCkgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgCi0JCQkgICAgICAic2VnbWVudHMgb3V0IG9mIG9yZGVyLCBhYm9ydGluZyB3cml0ZSIpOwotCQkJZnRfcnVubmVyX3N0YXR1cyA9IGRvX2Fib3J0OwotCQkJZmRjX21vZGUgICAgICAgICA9IGZkY19pZGxlOwotCQkJVFJBQ0VfRVhJVDsKLQkJfQotCQlmdGFwZV9zZXR1cF9uZXdfc2VnbWVudChidWZmLCBuZXh0LCAwKTsKLQkJaWYgKHN0b3BfcmVhZF9haGVhZCkgewotCQkJYnVmZi0+bmV4dF9zZWdtZW50ID0gMDsKLQkJCXN0b3BfcmVhZF9haGVhZCA9IDA7Ci0JCX0KLQkJaWYgKGZ0YXBlX2NhbGNfbmV4dF9jbHVzdGVyKGJ1ZmYpID09IDAgfHwKLQkJICAgIGZkY19zZXR1cF9yZWFkX3dyaXRlKGJ1ZmYsIG1vZGUpICE9IDApIHsKLQkJCVRSQUNFKGZ0X3RfZXJyLCAiY291bGRuJ3Qgc3RhcnQgJXMtYWhlYWQiLAotCQkJICAgICAgd3JpdGUgPyAid3JpdGUiIDogInJlYWQiKTsKLQkJCWZ0X3J1bm5lcl9zdGF0dXMgPSBkb19hYm9ydDsKLQkJCWZkY19tb2RlICAgICAgICAgPSBmZGNfaWRsZTsKLQkJfSBlbHNlIHsKLQkJCS8qIGtlZXAgb24gZ29pbmcgKi8KLQkJCXN3aXRjaCAoZnRfZHJpdmVyX3N0YXRlKSB7Ci0JCQljYXNlICAgcmVhZGluZzogYnVmZi0+c3RhdHVzID0gcmVhZGluZzsgICBicmVhazsKLQkJCWNhc2UgdmVyaWZ5aW5nOiBidWZmLT5zdGF0dXMgPSB2ZXJpZnlpbmc7IGJyZWFrOwotCQkJY2FzZSAgIHdyaXRpbmc6IGJ1ZmYtPnN0YXR1cyA9IHdyaXRpbmc7ICAgYnJlYWs7Ci0JCQljYXNlICBkZWxldGluZzogYnVmZi0+c3RhdHVzID0gZGVsZXRpbmc7ICBicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJVFJBQ0UoZnRfdF9lcnIsIAotCQkgICAgICAiQlVHOiBmdF9kcml2ZXJfc3RhdGUgJWQgc2hvdWxkIGJlIG9uZSBvdXQgb2YgIgotCQkgICAgICAie3JlYWRpbmcsIHdyaXRpbmcsIHZlcmlmeWluZywgZGVsZXRpbmd9IiwKLQkJCQkgICAgICBmdF9kcml2ZXJfc3RhdGUpOwotCQkJCWJ1ZmYtPnN0YXR1cyA9IHdyaXRlID8gd3JpdGluZyA6IHJlYWRpbmc7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotc3RhdGljIHZvaWQgcmV0cnlfc2VjdG9yKGJ1ZmZlcl9zdHJ1Y3QgKmJ1ZmYsIAotCQkJIGludCBtb2RlLAotCQkJIHVuc2lnbmVkIGludCBza2lwKQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlUUkFDRShmdF90X25vaXNlLCAiJXMgZXJyb3IsIHdpbGwgcmV0cnkiLAotCSAgICAgIChtb2RlID09IGZkY193cml0aW5nX2RhdGEgfHwgbW9kZSA9PSBmZGNfZGVsZXRpbmcpID8gIndyaXRlIiA6ICJyZWFkIik7Ci0JcGF1c2VfdGFwZSgxLCBtb2RlKTsKLQlmdF9ydW5uZXJfc3RhdHVzID0gYWJvcnRpbmc7Ci0JYnVmZi0+c3RhdHVzICAgICA9IGVycm9yOwotCWJ1ZmYtPnNraXAgICAgICAgPSBza2lwOwotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9yZXN1bWVfcG9pbnQoYnVmZmVyX3N0cnVjdCAqYnVmZikKLXsKLQlpbnQgaSA9IDA7Ci0JU2VjdG9yTWFwIG1hc2s7Ci0JU2VjdG9yTWFwIG1hcDsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogIFRoaXMgZnVuY3Rpb24gaXMgdG8gYmUgY2FsbGVkIGFmdGVyIGFsbCB2YXJpYWJsZXMgaGF2ZSBiZWVuCi0JICogIHVwZGF0ZWQgdG8gcG9pbnQgcGFzdCB0aGUgZmFpbGluZyBzZWN0b3IuCi0JICogIElmIHRoZXJlIGFyZSBhbnkgc29mdCBlcnJvcnMgYmVmb3JlIHRoZSBmYWlsaW5nIHNlY3RvciwKLQkgKiAgZmluZCB0aGUgZmlyc3Qgc29mdCBlcnJvciBhbmQgcmV0dXJuIHRoZSBzZWN0b3Igb2Zmc2V0LgotCSAqICBPdGhlcndpc2UgZmluZCB0aGUgbGFzdCBoYXJkIGVycm9yLgotCSAqICBOb3RlOiB0aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBoYXJkIG9yIHNvZnQgZXJyb3IgIQotCSAqLwotCWlmIChidWZmLT5zZWN0b3Jfb2Zmc2V0IDwgMSB8fCBidWZmLT5zZWN0b3Jfb2Zmc2V0ID4gMzIpIHsKLQkJVFJBQ0UoZnRfdF9idWcsICJCVUc6IHNlY3Rvcl9vZmZzZXQgPSAlZCIsCi0JCSAgICAgIGJ1ZmYtPnNlY3Rvcl9vZmZzZXQpOwotCQlUUkFDRV9FWElUIDA7Ci0JfQotCWlmIChidWZmLT5zZWN0b3Jfb2Zmc2V0ID49IDMyKSB7IC8qIEMtbGltaXRhdGlvbiBvbiBzaGlmdCAhICovCi0JCW1hc2sgPSAweGZmZmZmZmZmOwotCX0gZWxzZSB7Ci0JCW1hc2sgPSAoMSA8PCBidWZmLT5zZWN0b3Jfb2Zmc2V0KSAtIDE7Ci0JfQotCW1hcCA9IGJ1ZmYtPnNvZnRfZXJyb3JfbWFwICYgbWFzazsKLQlpZiAobWFwKSB7Ci0JCXdoaWxlICgobWFwICYgKDEgPDwgaSkpID09IDApIHsKLQkJCSsraTsKLQkJfQotCQlUUkFDRShmdF90X25vaXNlLCAiYXQgc2VjdG9yICVkIiwgRlRfU0VDVE9SKGkpKTsKLQl9IGVsc2UgewotCQltYXAgPSBidWZmLT5oYXJkX2Vycm9yX21hcCAmIG1hc2s7Ci0JCWkgPSBidWZmLT5zZWN0b3Jfb2Zmc2V0IC0gMTsKLQkJaWYgKG1hcCkgewotCQkJd2hpbGUgKChtYXAgJiAoMSA8PCBpKSkgPT0gMCkgewotCQkJCS0taTsKLQkJCX0KLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJhZnRlciBzZWN0b3IgJWQiLCBGVF9TRUNUT1IoaSkpOwotCQkJKytpOyAvKiBmaXJzdCBzZWN0b3IgYWZ0ZXIgbGFzdCBoYXJkIGVycm9yICovCi0JCX0gZWxzZSB7Ci0JCQlUUkFDRShmdF90X2J1ZywgIkJVRzogbm8gc29mdCBvciBoYXJkIGVycm9ycyIpOwotCQl9Ci0JfQotCVRSQUNFX0VYSVQgaTsKLX0KLQotLyogIGNoZWNrIHBvc3NpYmxlIGRtYSByZXNpZHVlIHdoZW4gZm9ybWF0dGluZywgdXBkYXRlIHBvc2l0aW9uIHJlY29yZCBpbgotICogIGJ1ZmZlciBzdHJ1Y3QuIFRoaXMgaXMsIG9mIGNvdXJzZSwgbW9kZWxsZWQgYWZ0ZXIgZGV0ZXJtaW5lX3Byb2dyZXNzKCksIGJ1dAotICogIHdlIGRvbid0IG5lZWQgdG8gc2V0IHVwIGZvciByZXRyaWVzIGJlY2F1c2UgdGhlIGZvcm1hdCBwcm9jZXNzIGNhbm5vdCBiZQotICogIGludGVycnVwdGVkIChleGNlcHQgYXQgdGhlIGVuZCBvZiB0aGUgdGFwZSB0cmFjaykuCi0gKi8KLXN0YXRpYyBpbnQgZGV0ZXJtaW5lX2ZtdF9wcm9ncmVzcyhidWZmZXJfc3RydWN0ICpidWZmLCBlcnJvcl9jYXVzZSBjYXVzZSkKLXsKLQl1bnNpZ25lZCBpbnQgZG1hX3Jlc2lkdWU7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qICBVc2luZyBsZXNzIHByZWZlcnJlZCBvcmRlciBvZiBkaXNhYmxlX2RtYSBhbmQKLQkgKiAgZ2V0X2RtYV9yZXNpZHVlIGJlY2F1c2UgdGhpcyBzZWVtcyB0byBmYWlsIG9uIGF0IGxlYXN0IG9uZQotCSAqICBzeXN0ZW0gaWYgcmV2ZXJzZWQhCi0JICovCi0JZG1hX3Jlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUoZmRjLmRtYSk7Ci0JZGlzYWJsZV9kbWEoZmRjLmRtYSk7Ci0JaWYgKGNhdXNlICE9IG5vX2Vycm9yIHx8IGRtYV9yZXNpZHVlICE9IDApIHsKLQkJVFJBQ0UoZnRfdF9pbmZvLCAiRE1BIHJlc2lkdWUgPSAweCUwNHgiLCBkbWFfcmVzaWR1ZSk7Ci0JCWZkY19tb2RlID0gZmRjX2lkbGU7Ci0JCXN3aXRjaChjYXVzZSkgewotCQljYXNlIG5vX2Vycm9yOgotCQkJZnRfcnVubmVyX3N0YXR1cyA9IGFib3J0aW5nOwotCQkJYnVmZi0+c3RhdHVzID0gaWRsZTsKLQkJCWJyZWFrOwotCQljYXNlIG92ZXJydW5fZXJyb3I6Ci0JCQkvKiAgZ290IGFuIG92ZXJydW4gZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIG11c3QgYmUgYQotCQkJICogIGhhcmR3YXJlIHByb2JsZW0gCi0JCQkgKi8KLQkJCVRSQUNFKGZ0X3RfYnVnLCAKLQkJCSAgICAgICJVbmV4cGVjdGVkIGVycm9yOiBmYWlsaW5nIERNQSBjb250cm9sbGVyID8iKTsKLQkJCWZ0X3J1bm5lcl9zdGF0dXMgPSBkb19hYm9ydDsKLQkJCWJ1ZmYtPnN0YXR1cyA9IGVycm9yOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiVW5leHBlY3RlZCBlcnJvciBhdCBzZWdtZW50ICVkIiwKLQkJCSAgICAgIGJ1ZmYtPnNlZ21lbnRfaWQpOwotCQkJZnRfcnVubmVyX3N0YXR1cyA9IGRvX2Fib3J0OwotCQkJYnVmZi0+c3RhdHVzID0gZXJyb3I7Ci0JCQlicmVhazsKLQkJfQotCQlUUkFDRV9FWElUIC1FSU87IC8qIGNhbiBvbmx5IHJldHJ5IGVudGlyZSB0cmFjayBpbiBmb3JtYXQgbW9kZQotCQkJCSAgKi8KLQl9Ci0JLyogIFVwZGF0ZSB2YXIncyBpbmZsdWVuY2VkIGJ5IHRoZSBETUEgb3BlcmF0aW9uLgotCSAqLwotCWJ1ZmYtPnB0ciAgICAgICAgICAgICArPSBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UICogNDsKLQlidWZmLT5ieXRlcyAgICAgICAgICAgLT0gRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAqIDQ7Ci0JYnVmZi0+cmVtYWluaW5nICAgICAgIC09IEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQ7Ci0JYnVmZi0+c2VnbWVudF9pZCArKzsgLyogZG9uZSB3aXRoIHNlZ21lbnQgKi8KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qCi0gKiAgQ29udGludWUgZm9ybWF0dGluZywgc3dpdGNoIGJ1ZmZlcnMgaWYgdGhlcmUgaXMgbm8gZGF0YSBsZWZ0IGluCi0gKiAgY3VycmVudCBidWZmZXIuIFRoaXMgaXMsIG9mIGNvdXJzZSwgbW9kZWxsZWQgYWZ0ZXIKLSAqICBjb250aW51ZV94ZmVyKCksIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHNldCB1cCBmb3IgcmV0cmllcyBiZWNhdXNlCi0gKiAgdGhlIGZvcm1hdCBwcm9jZXNzIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCAoZXhjZXB0IGF0IHRoZSBlbmQgb2YgdGhlCi0gKiAgdGFwZSB0cmFjaykuCi0gKi8KLXN0YXRpYyB2b2lkIGNvbnRpbnVlX2Zvcm1hdHRpbmcoYnVmZmVyX3N0cnVjdCAqYnVmZikKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JaWYgKGJ1ZmYtPnJlbWFpbmluZyA8PSAwKSB7IC8qICBubyBzcGFjZSBsZWZ0IGluIGRtYSBidWZmZXIgKi8KLQkJdW5zaWduZWQgaW50IG5leHQgPSBidWZmLT5uZXh0X3NlZ21lbnQ7IAotCi0JCWlmIChuZXh0ID09IDApIHsgLyogZW5kIG9mIHRhcGUgdHJhY2sgKi8KLQkJCWJ1ZmYtPnN0YXR1cyAgICAgPSBkb25lOwotCQkJZnRfcnVubmVyX3N0YXR1cyA9IGxvZ2ljYWxfZW90OwotCQkJZmRjX21vZGUgICAgICAgICA9IGZkY19pZGxlOwotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgIkRvbmUgZm9ybWF0dGluZyB0cmFjayAlZCIsCi0JCQkgICAgICBmdF9sb2NhdGlvbi50cmFjayk7Ci0JCQlUUkFDRV9FWElUOwotCQl9Ci0JCS8qCi0JCSAqICBzd2l0Y2ggdG8gbmV4dCBidWZmZXIhCi0JCSAqLwotCQlidWZmLT5zdGF0dXMgICA9IGRvbmU7Ci0JCWJ1ZmYgPSBmdGFwZV9uZXh0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsKLQotCQlpZiAoYnVmZi0+c3RhdHVzICE9IHdhaXRpbmcgIHx8IG5leHQgIT0gYnVmZi0+c2VnbWVudF9pZCkgewotCQkJZ290byBmb3JtYXRfc2V0dXBfZXJyb3I7Ci0JCX0KLQl9Ci0JaWYgKGZkY19zZXR1cF9mb3JtYXR0aW5nKGJ1ZmYpIDwgMCkgewotCQlnb3RvIGZvcm1hdF9zZXR1cF9lcnJvcjsKLQl9Ci0JYnVmZi0+c3RhdHVzID0gZm9ybWF0dGluZzsKLQlUUkFDRShmdF90X2ZkY19kbWEsICJGb3JtYXR0aW5nIHNlZ21lbnQgJWQgb24gdHJhY2sgJWQiLAotCSAgICAgIGJ1ZmYtPnNlZ21lbnRfaWQsIGZ0X2xvY2F0aW9uLnRyYWNrKTsKLQlUUkFDRV9FWElUOwotIGZvcm1hdF9zZXR1cF9lcnJvcjoKLQlmdF9ydW5uZXJfc3RhdHVzID0gZG9fYWJvcnQ7Ci0JZmRjX21vZGUgICAgICAgICA9IGZkY19pZGxlOwotCWJ1ZmYtPnN0YXR1cyAgICAgPSBlcnJvcjsKLQlUUkFDRShmdF90X2VyciwgIkVycm9yIHNldHRpbmcgdXAgZm9yIHNlZ21lbnQgJWQgb24gdHJhY2sgJWQiLAotCSAgICAgIGJ1ZmYtPnNlZ21lbnRfaWQsIGZ0X2xvY2F0aW9uLnRyYWNrKTsKLQlUUkFDRV9FWElUOwotCi19Ci0KLS8qICB0aGlzIGhhbmRsZXMgd3JpdGluZywgcmVhZCBpZCwgcmVhZGluZyBhbmQgZm9ybWF0dGluZwotICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfZmRjX2J1c3koYnVmZmVyX3N0cnVjdCAqYnVmZikKLXsKLQlzdGF0aWMgaW50IG5vX2RhdGFfZXJyb3JfY291bnQ7Ci0JaW50IHJldHJ5ID0gMDsKLQllcnJvcl9jYXVzZSBjYXVzZTsKLQlfX3U4IGluWzddOwotCWludCBza2lwOwotCWZkY19tb2RlX2VudW0gZm1vZGUgPSBmZGNfbW9kZTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JaWYgKGZkY19yZXN1bHQoaW4sIDcpIDwgMCkgeyAvKiBiZXR0ZXIgZ2V0IGl0IGZhc3QgISAqLwotCQlUUkFDRShmdF90X2VyciwgCi0JCSAgICAgICJQcm9iYWJseSBmYXRhbCBlcnJvciBkdXJpbmcgRkRDIFJlc3VsdCBQaGFzZVxuIgotCQkgICAgICBLRVJOX0lORk8KLQkJICAgICAgImRyaXZlIG1heSBoYW5nIHVudGlsIChwb3dlciBvbikgcmVzZXQgOi0oIik7Ci0JCS8qICB3aGF0IHRvIGRvIG5leHQgPz8/PwotCQkgKi8KLQkJVFJBQ0VfRVhJVDsKLQl9Ci0JY2F1c2UgPSBkZWNvZGVfaXJxX2NhdXNlKGZkY19tb2RlLCBpbik7Ci0jaWZkZWYgVEVTVElORwotCXsgaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IChpbnQpZnRfbnJfYnVmZmVyczsgKytpKQotCQlUUkFDRShmdF90X2FueSwgImJ1ZmZlclslZF0gc3RhdHVzOiAlZCwgc2VnbWVudF9pZDogJWQiLAotCQkgICAgICBpLCBmdF9idWZmZXJbaV0tPnN0YXR1cywgZnRfYnVmZmVyW2ldLT5zZWdtZW50X2lkKTsKLQl9Ci0jZW5kaWYKLQlpZiAoZm1vZGUgPT0gZmRjX3JlYWRpbmdfZGF0YSAmJiBmdF9kcml2ZXJfc3RhdGUgPT0gdmVyaWZ5aW5nKSB7Ci0JCWZtb2RlID0gZmRjX3ZlcmlmeWluZzsKLQl9Ci0Jc3dpdGNoIChmbW9kZSkgewotCWNhc2UgZmRjX3ZlcmlmeWluZzoKLQkJaWYgKGZ0X3J1bm5lcl9zdGF0dXMgPT0gYWJvcnRpbmcgfHwKLQkJICAgIGZ0X3J1bm5lcl9zdGF0dXMgPT0gZG9fYWJvcnQpIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsImFib3J0aW5nICVzIixmZGNfbW9kZV90eHQoZmRjX21vZGUpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChidWZmLT5yZXRyeSA+IDApIHsKLQkJCVRSQUNFKGZ0X3RfZmxvdywgInRoaXMgaXMgcmV0cnkgbnIgJWQiLCBidWZmLT5yZXRyeSk7Ci0JCX0KLQkJc3dpdGNoIChjYXVzZSkgewotCQljYXNlIG5vX2Vycm9yOgotCQkJbm9fZGF0YV9lcnJvcl9jb3VudCA9IDA7Ci0JCQlkZXRlcm1pbmVfdmVyaWZ5X3Byb2dyZXNzKGJ1ZmYsIGNhdXNlLCBpbls1XSk7Ci0JCQlpZiAoaW5bMl0gJiAweDQwKSB7Ci0JCQkJLyogIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gd2hlbiB2ZXJpZnlpbmcKLQkJCQkgKi8KLQkJCQlUUkFDRShmdF90X3dhcm4sCi0JCQkJICAgICAgImRlbGV0ZWQgZGF0YSBpbiBzZWdtZW50ICVkLyVkIiwKLQkJCQkgICAgICBidWZmLT5zZWdtZW50X2lkLAotCQkJCSAgICAgIEZUX1NFQ1RPUihidWZmLT5zZWN0b3Jfb2Zmc2V0IC0gMSkpOwotCQkJCWJ1ZmYtPnJlbWFpbmluZyA9IDA7IC8qIGFib3J0IHRyYW5zZmVyICovCi0JCQkJYnVmZi0+aGFyZF9lcnJvcl9tYXAgPSBFTVBUWV9TRUdNRU5UOwotCQkJCXNraXAgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlza2lwID0gMDsKLQkJCX0KLQkJCWNvbnRpbnVlX3hmZXIoYnVmZiwgZmRjX21vZGUsIHNraXApOwotCQkJYnJlYWs7Ci0JCWNhc2Ugbm9fZGF0YV9lcnJvcjoKLQkJCW5vX2RhdGFfZXJyb3JfY291bnQgKys7Ci0JCWNhc2Ugb3ZlcnJ1bl9lcnJvcjoKLQkJCXJldHJ5ICsrOwotCQljYXNlIGlkX2FtX2Vycm9yOgotCQljYXNlIGlkX2NyY19lcnJvcjoKLQkJY2FzZSBkYXRhX2FtX2Vycm9yOgotCQljYXNlIGRhdGFfY3JjX2Vycm9yOgotCQkJZGV0ZXJtaW5lX3ZlcmlmeV9wcm9ncmVzcyhidWZmLCBjYXVzZSwgaW5bNV0pOyAKLQkJCWlmIChjYXVzZSA9PSBub19kYXRhX2Vycm9yKSB7Ci0JCQkJaWYgKG5vX2RhdGFfZXJyb3JfY291bnQgPj0gMikgewotCQkJCQlUUkFDRShmdF90X3dhcm4sCi0JCQkJCSAgICAgICJyZXRyeWluZyBiZWNhdXNlIG9mIHN1Y2Nlc3NpdmUgIgotCQkJCQkgICAgICAibm8gZGF0YSBlcnJvcnMiKTsKLQkJCQkJbm9fZGF0YV9lcnJvcl9jb3VudCA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmV0cnkgLS07Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlub19kYXRhX2Vycm9yX2NvdW50ID0gMDsKLQkJCX0KLQkJCWlmIChyZXRyeSkgewotCQkJCXNraXAgPSBmaW5kX3Jlc3VtZV9wb2ludChidWZmKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2tpcCA9IGJ1ZmYtPnNlY3Rvcl9vZmZzZXQ7Ci0JCQl9Ci0JCQlpZiAocmV0cnkgJiYgc2tpcCA8IDMyKSB7Ci0JCQkJcmV0cnlfc2VjdG9yKGJ1ZmYsIGZkY19tb2RlLCBza2lwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJY29udGludWVfeGZlcihidWZmLCBmZGNfbW9kZSwgc2tpcCk7Ci0JCQl9Ci0JCQl1cGRhdGVfaGlzdG9yeShjYXVzZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCS8qICBEb24ndCBrbm93IHdoeSB0aGlzIGNvdWxkIGhhcHBlbiAKLQkJCSAqICBidXQgZmluZCBvdXQuCi0JCQkgKi8KLQkJCWRldGVybWluZV92ZXJpZnlfcHJvZ3Jlc3MoYnVmZiwgY2F1c2UsIGluWzVdKTsKLQkJCXJldHJ5X3NlY3RvcihidWZmLCBmZGNfbW9kZSwgMCk7Ci0JCQlUUkFDRShmdF90X2VyciwgIkVycm9yOiB1bmV4cGVjdGVkIGVycm9yIik7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIGZkY19yZWFkaW5nX2RhdGE6Ci0jaWZkZWYgVEVTVElORwotCQkvKiBJJ20gc29ycnksIGJ1dDogTk9CT0RZIGV2ZXIgdXNlZCB0aGlzIHRyYWNlCi0JCSAqIG1lc3NhZ2VzIGZvciBhZ2VzLiBJIGd1ZXNzIHRoYXQgQmFzIHdhcyB0aGUgbGFzdCBwZXJzb24KLQkJICogdGhhdCBldmVyIHJlYWxseSB1c2VkIHRoaXMgKHRoYW5rIHlvdSwgYmV0d2VlbiB0aGUgbGluZXMpCi0JCSAqLwotCQlpZiAoY2F1c2UgPT0gbm9fZXJyb3IpIHsKLQkJCVRSQUNFKGZ0X3RfZmxvdywicmVhZGluZyBzZWdtZW50ICVkIixidWZmLT5zZWdtZW50X2lkKTsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJlcnJvciByZWFkaW5nIHNlZ21lbnQgJWQiLAotCQkJICAgICAgYnVmZi0+c2VnbWVudF9pZCk7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiXG4iCi0JCQkgICAgICBLRVJOX0lORk8KLQkJCSAgICAgIklSUTpDOiAweCUwMngsIEg6IDB4JTAyeCwgUjogMHglMDJ4LCBOOiAweCUwMnhcbiIKLQkJCSAgICAgIEtFUk5fSU5GTwotCQkJICAgICAgIkJVRjpDOiAweCUwMngsIEg6IDB4JTAyeCwgUjogMHglMDJ4IiwKLQkJCSAgICAgIGluWzNdLCBpbls0XSwgaW5bNV0sIGluWzZdLAotCQkJICAgICAgYnVmZi0+Y3lsLCBidWZmLT5oZWFkLCBidWZmLT5zZWN0KTsKLQkJfQotI2VuZGlmCi0JCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IGFib3J0aW5nIHx8Ci0JCSAgICBmdF9ydW5uZXJfc3RhdHVzID09IGRvX2Fib3J0KSB7Ci0JCQlUUkFDRShmdF90X25vaXNlLCJhYm9ydGluZyAlcyIsZmRjX21vZGVfdHh0KGZkY19tb2RlKSk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoYnVmZi0+YmFkX3NlY3Rvcl9tYXAgPT0gRkFLRV9TRUdNRU5UKSB7Ci0JCQkvKiBUaGlzIGNvbmRpdGlvbiBvY2N1cnMgd2hlbiByZWFkaW5nIGEgYGZha2UnCi0JCQkgKiBzZWN0b3IgdGhhdCdzIG5vdCBhY2Nlc3NpYmxlLiBEb2Vzbid0Ci0JCQkgKiByZWFsbHkgbWF0dGVyIGFzIHdlIHdvdWxkIGhhdmUgaWdub3JlZCBpdAotCQkJICogYW55d2F5ICEKLQkJCSAqCi0JCQkgKiBDaGFuY2UgaXMgdGhhdCB3ZSdyZSBwYXN0IHRoZSBuZXh0IHNlZ21lbnQKLQkJCSAqIG5vdywgc28gdGhlIG5leHQgb3BlcmF0aW9uIG1heSBmYWlsIGFuZAotCQkJICogcmVzdWx0IGluIGEgcmV0cnkuICAKLQkJCSAqLwotCQkJYnVmZi0+cmVtYWluaW5nID0gMDsJLyogc2tpcCBmYWlsaW5nIHNlY3RvciAqLwotCQkJLyogYnVmZi0+cHRyICAgICAgID0gYnVmZi0+YWRkcmVzczsgKi8KLQkJCS8qIGZha2Ugc3VjY2VzczogKi8KLQkJCWNvbnRpbnVlX3hmZXIoYnVmZiwgZmRjX21vZGUsIDEpOwotCQkJLyogIHRyYWNlIGNhbGxzIGFyZSBleHBlbnNpdmU6IHBsYWNlIHRoZW0gQUZURVIKLQkJCSAqICB0aGUgcmVhbCBzdHVmZiBoYXMgYmVlbiBkb25lLgotCQkJICogIAotCQkJICovCi0JCQlUUkFDRShmdF90X25vaXNlLCAic2tpcHBpbmcgZW1wdHkgc2VnbWVudCAlZCAocmVhZCksIHNpemU/ICVkIiwKLQkJCSAgICAgIGJ1ZmYtPnNlZ21lbnRfaWQsIGJ1ZmYtPnB0ciAtIGJ1ZmYtPmFkZHJlc3MpOwotCQkJVFJBQ0VfRVhJVDsKLQkJfQotCQlpZiAoYnVmZi0+cmV0cnkgPiAwKSB7Ci0JCQlUUkFDRShmdF90X2Zsb3csICJ0aGlzIGlzIHJldHJ5IG5yICVkIiwgYnVmZi0+cmV0cnkpOwotCQl9Ci0JCXN3aXRjaCAoY2F1c2UpIHsKLQkJY2FzZSBub19lcnJvcjoKLQkJCWRldGVybWluZV9wcm9ncmVzcyhidWZmLCBjYXVzZSwgaW5bNV0pOwotCQkJaWYgKGluWzJdICYgMHg0MCkgewotCQkJCS8qICBIYW5kbGUgZGVsZXRlZCBkYXRhIGluIGhlYWRlciBzZWdtZW50cy4KLQkJCQkgKiAgU2tpcCBzZWdtZW50IGFuZCBmb3JjZSByZWFkLWFoZWFkLgotCQkJCSAqLwotCQkJCVRSQUNFKGZ0X3Rfd2FybiwKLQkJCQkgICAgICAiZGVsZXRlZCBkYXRhIGluIHNlZ21lbnQgJWQvJWQiLAotCQkJCSAgICAgIGJ1ZmYtPnNlZ21lbnRfaWQsCi0JCQkJICAgICAgRlRfU0VDVE9SKGJ1ZmYtPnNlY3Rvcl9vZmZzZXQgLSAxKSk7Ci0JCQkJYnVmZi0+ZGVsZXRlZCA9IDE7Ci0JCQkJYnVmZi0+cmVtYWluaW5nID0gMDsvKmFib3J0IHRyYW5zZmVyICovCi0JCQkJYnVmZi0+c29mdF9lcnJvcl9tYXAgfD0KLQkJCQkJCSgtMUwgPDwgYnVmZi0+c2VjdG9yX29mZnNldCk7Ci0JCQkJaWYgKGJ1ZmYtPnNlZ21lbnRfaWQgPT0gMCkgewotCQkJCQkvKiBzdG9wIG9uIG5leHQgc2VnbWVudCAqLwotCQkJCQlzdG9wX3JlYWRfYWhlYWQgPSAxOwotCQkJCX0KLQkJCQkvKiBmb3JjZSByZWFkLWFoZWFkOiAqLwotCQkJCWJ1ZmYtPm5leHRfc2VnbWVudCA9IAotCQkJCQlidWZmLT5zZWdtZW50X2lkICsgMTsKLQkJCQlza2lwID0gKEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgLSAKLQkJCQkJYnVmZi0+c2VjdG9yX29mZnNldCk7Ci0JCQl9IGVsc2UgewotCQkJCXNraXAgPSAwOwotCQkJfQotCQkJY29udGludWVfeGZlcihidWZmLCBmZGNfbW9kZSwgc2tpcCk7Ci0JCQlicmVhazsKLQkJY2FzZSBub19kYXRhX2Vycm9yOgotCQkJLyogVGFwZSBzdGFydGVkIHRvbyBmYXIgYWhlYWQgb2Ygb3IgYmVoaW5kIHRoZQotCQkJICogcmlnaHQgc2VjdG9yLiAgVGhpcyBtYXkgYWxzbyBoYXBwZW4gaW4gdGhlCi0JCQkgKiBtaWRkbGUgb2YgYSBzZWdtZW50ICEKLQkJCSAqCi0JCQkgKiBIYW5kbGUgbm8tZGF0YSBhcyBzb2Z0IGVycm9yLiBJZiBuZXh0Ci0JCQkgKiBzZWN0b3IgZmFpbHMgdG9vLCBhIHJldHJ5ICh3aXRoIG5lZWRlZAotCQkJICogcmVwb3NpdGlvbikgd2lsbCBmb2xsb3cuCi0JCQkgKi8KLQkJCXJldHJ5ICsrOwotCQljYXNlIGlkX2FtX2Vycm9yOgotCQljYXNlIGlkX2NyY19lcnJvcjoKLQkJY2FzZSBkYXRhX2FtX2Vycm9yOgotCQljYXNlIGRhdGFfY3JjX2Vycm9yOgotCQljYXNlIG92ZXJydW5fZXJyb3I6Ci0JCQlyZXRyeSArPSAoYnVmZi0+c29mdF9lcnJvcl9tYXAgIT0gMCB8fAotCQkJCSAgYnVmZi0+aGFyZF9lcnJvcl9tYXAgIT0gMCk7Ci0JCQlkZXRlcm1pbmVfcHJvZ3Jlc3MoYnVmZiwgY2F1c2UsIGluWzVdKTsgCi0jaWYgMSB8fCBkZWZpbmVkKFRFU1RJTkcpCi0JCQlpZiAoY2F1c2UgPT0gb3ZlcnJ1bl9lcnJvcikgcmV0cnkgKys7Ci0jZW5kaWYKLQkJCWlmIChyZXRyeSkgewotCQkJCXNraXAgPSBmaW5kX3Jlc3VtZV9wb2ludChidWZmKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2tpcCA9IGJ1ZmYtPnNlY3Rvcl9vZmZzZXQ7Ci0JCQl9Ci0JCQkvKiAgVHJ5IHRvIHJlc3VtZSB3aXRoIG5leHQgc2VjdG9yIG9uIHNpbmdsZQotCQkJICogIGVycm9ycyAobGV0IGVjYyBjb3JyZWN0IGl0KSwgYnV0IHJldHJ5IG9uCi0JCQkgKiAgbm9fZGF0YSAod2UnbGwgYmUgcGFzdCB0aGUgdGFyZ2V0IHdoZW4gd2UKLQkJCSAqICBnZXQgaGVyZSBzbyB3ZSBjYW5ub3QgcmV0cnkpIG9yIG9uCi0JCQkgKiAgbXVsdGlwbGUgZXJyb3JzIChyZWR1Y2UgY2hhbmNlIG9uIGVjYwotCQkJICogIGZhaWx1cmUpLgotCQkJICovCi0JCQkvKiAgY0g6IDIzLzAyLzk3OiBpZiB0aGUgbGFzdCBzZWN0b3IgaW4gdGhlIAotCQkJICogIHNlZ21lbnQgd2FzIGEgaGFyZCBlcnJvciwgdGhlbiB0aGVyZSBpcyAKLQkJCSAqICBubyBzZW5zZSBpbiBhIHJldHJ5LiBUaGlzIG9jY2FzaW9uIHNlbGRvbQotCQkJICogIG9jY3VycyBidXQgLi4uIEA6s7K4YEAlJqckCi0JCQkgKi8KLQkJCWlmIChyZXRyeSAmJiBza2lwIDwgMzIpIHsKLQkJCQlyZXRyeV9zZWN0b3IoYnVmZiwgZmRjX21vZGUsIHNraXApOwotCQkJfSBlbHNlIHsKLQkJCQljb250aW51ZV94ZmVyKGJ1ZmYsIGZkY19tb2RlLCBza2lwKTsKLQkJCX0KLQkJCXVwZGF0ZV9oaXN0b3J5KGNhdXNlKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogIERvbid0IGtub3cgd2h5IHRoaXMgY291bGQgaGFwcGVuIAotCQkJICogIGJ1dCBmaW5kIG91dC4KLQkJCSAqLwotCQkJZGV0ZXJtaW5lX3Byb2dyZXNzKGJ1ZmYsIGNhdXNlLCBpbls1XSk7Ci0JCQlyZXRyeV9zZWN0b3IoYnVmZiwgZmRjX21vZGUsIDApOwotCQkJVFJBQ0UoZnRfdF9lcnIsICJFcnJvcjogdW5leHBlY3RlZCBlcnJvciIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBmZGNfcmVhZGluZ19pZDoKLQkJaWYgKGNhdXNlID09IG5vX2Vycm9yKSB7Ci0JCQlmZGNfY3lsID0gaW5bM107Ci0JCQlmZGNfaGVhZCA9IGluWzRdOwotCQkJZmRjX3NlY3QgPSBpbls1XTsKLQkJCVRSQUNFKGZ0X3RfZmRjX2RtYSwKLQkJCSAgICAgICJpZCByZWFkOiBDOiAweCUwMngsIEg6IDB4JTAyeCwgUjogMHglMDJ4IiwKLQkJCSAgICAgIGZkY19jeWwsIGZkY19oZWFkLCBmZGNfc2VjdCk7Ci0JCX0gZWxzZSB7CS8qIG5vIHZhbGlkIGluZm9ybWF0aW9uLCB1c2UgaW52YWxpZCBzZWN0b3IgKi8KLQkJCWZkY19jeWwgPSBmZGNfaGVhZCA9IGZkY19zZWN0ID0gMDsKLQkJCVRSQUNFKGZ0X3RfZmxvdywgIkRpZG4ndCBmaW5kIHZhbGlkIHNlY3RvciBJZCIpOwotCQl9Ci0JCWZkY19tb2RlID0gZmRjX2lkbGU7Ci0JCWJyZWFrOwotCWNhc2UgZmRjX2RlbGV0aW5nOgotCWNhc2UgZmRjX3dyaXRpbmdfZGF0YToKLSNpZmRlZiBURVNUSU5HCi0JCWlmIChjYXVzZSA9PSBub19lcnJvcikgewotCQkJVFJBQ0UoZnRfdF9mbG93LCAid3JpdGluZyBzZWdtZW50ICVkIiwgYnVmZi0+c2VnbWVudF9pZCk7Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiZXJyb3Igd3JpdGluZyBzZWdtZW50ICVkIiwKLQkJCSAgICAgIGJ1ZmYtPnNlZ21lbnRfaWQpOwotCQl9Ci0jZW5kaWYKLQkJaWYgKGZ0X3J1bm5lcl9zdGF0dXMgPT0gYWJvcnRpbmcgfHwKLQkJICAgIGZ0X3J1bm5lcl9zdGF0dXMgPT0gZG9fYWJvcnQpIHsKLQkJCVRSQUNFKGZ0X3RfZmxvdywgImFib3J0aW5nICVzIixmZGNfbW9kZV90eHQoZmRjX21vZGUpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChidWZmLT5yZXRyeSA+IDApIHsKLQkJCVRSQUNFKGZ0X3RfZmxvdywgInRoaXMgaXMgcmV0cnkgbnIgJWQiLCBidWZmLT5yZXRyeSk7Ci0JCX0KLQkJaWYgKGJ1ZmYtPmJhZF9zZWN0b3JfbWFwID09IEZBS0VfU0VHTUVOVCkgewotCQkJLyogVGhpcyBjb25kaXRpb24gb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIGEKLQkJCSAqIGBmYWtlJyBzZWN0b3IgdGhhdCdzIG5vdCBhY2Nlc3NpYmxlLiBEb2Vzbid0IHJlYWxseQotCQkJICogbWF0dGVyIGFzIGl0IGlzbid0IHVzZWQgYW55d2F5ICEgTWlnaHQgYmUgbG9jYXRlZAotCQkJICogYXQgd3Jvbmcgc2VnbWVudCwgdGhlbiB3ZSdsbCBmYWlsIG9uIHRoZSBuZXh0Ci0JCQkgKiBzZWdtZW50LgotCQkJICovCi0JCQlUUkFDRShmdF90X25vaXNlLCAic2tpcHBpbmcgZW1wdHkgc2VnbWVudCAod3JpdGUpIik7Ci0JCQlidWZmLT5yZW1haW5pbmcgPSAwOwkvKiBza2lwIGZhaWxpbmcgc2VjdG9yICovCi0JCQkvKiBmYWtlIHN1Y2Nlc3M6ICovCi0JCQljb250aW51ZV94ZmVyKGJ1ZmYsIGZkY19tb2RlLCAxKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXN3aXRjaCAoY2F1c2UpIHsKLQkJY2FzZSBub19lcnJvcjoKLQkJCWRldGVybWluZV9wcm9ncmVzcyhidWZmLCBjYXVzZSwgaW5bNV0pOwotCQkJY29udGludWVfeGZlcihidWZmLCBmZGNfbW9kZSwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBub19kYXRhX2Vycm9yOgotCQljYXNlIGlkX2FtX2Vycm9yOgotCQljYXNlIGlkX2NyY19lcnJvcjoKLQkJY2FzZSBkYXRhX2FtX2Vycm9yOgotCQljYXNlIG92ZXJydW5fZXJyb3I6Ci0JCQl1cGRhdGVfaGlzdG9yeShjYXVzZSk7Ci0JCQlkZXRlcm1pbmVfcHJvZ3Jlc3MoYnVmZiwgY2F1c2UsIGluWzVdKTsKLQkJCXNraXAgPSBmaW5kX3Jlc3VtZV9wb2ludChidWZmKTsKLQkJCXJldHJ5X3NlY3RvcihidWZmLCBmZGNfbW9kZSwgc2tpcCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChpblsxXSAmIDB4MDIpIHsKLQkJCQlUUkFDRShmdF90X2VyciwgIm1lZGlhIG5vdCB3cml0YWJsZSIpOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X2J1ZywgInVuZm9yZXNlZW4gd3JpdGUgZXJyb3IiKTsKLQkJCX0KLQkJCWZkY19tb2RlID0gZmRjX2lkbGU7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsgLyogZmRjX2RlbGV0aW5nIHx8IGZkY193cml0aW5nX2RhdGEgKi8KLQljYXNlIGZkY19mb3JtYXR0aW5nOgotCQkvKiAgVGhlIGludGVycnVwdCBjb21lcyBhZnRlciBmb3JtYXR0aW5nIGEgc2VnbWVudC4gV2UgdGhlbgotCQkgKiAgaGF2ZSB0byBzZXQgdXAgUVVJQ0tMWSBmb3IgdGhlIG5leHQgc2VnbWVudC4gQnV0Ci0JCSAqICBhZnRlcndhcmRzLCB0aGVyZSBpcyBwbGVudHkgb2YgdGltZS4KLQkJICovCi0JCXN3aXRjaCAoY2F1c2UpIHsKLQkJY2FzZSBub19lcnJvcjoKLQkJCS8qICB3b3VsZCBsaWtlIHRvIGtlZXAgbW9zdCBvZiB0aGUgZm9ybWF0dGluZyBzdHVmZgotCQkJICogIG91dHNpZGUgdGhlIGlzciBjb2RlLCBidXQgdGltaW5nIGlzIHRvbyBjcml0aWNhbAotCQkJICovCi0JCQlpZiAoZGV0ZXJtaW5lX2ZtdF9wcm9ncmVzcyhidWZmLCBjYXVzZSkgPj0gMCkgewotCQkJCWNvbnRpbnVlX2Zvcm1hdHRpbmcoYnVmZik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBub19kYXRhX2Vycm9yOgotCQljYXNlIGlkX2FtX2Vycm9yOgotCQljYXNlIGlkX2NyY19lcnJvcjoKLQkJY2FzZSBkYXRhX2FtX2Vycm9yOgotCQljYXNlIG92ZXJydW5fZXJyb3I6Ci0JCWRlZmF1bHQ6Ci0JCQlkZXRlcm1pbmVfZm10X3Byb2dyZXNzKGJ1ZmYsIGNhdXNlKTsKLQkJCXVwZGF0ZV9oaXN0b3J5KGNhdXNlKTsKLQkJCWlmIChpblsxXSAmIDB4MDIpIHsKLQkJCQlUUkFDRShmdF90X2VyciwgIm1lZGlhIG5vdCB3cml0YWJsZSIpOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X2J1ZywgInVuZm9yZXNlZW4gd3JpdGUgZXJyb3IiKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9IC8qIGNhdXNlICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgIldhcm5pbmc6IHVuZXhwZWN0ZWQgaXJxIGR1cmluZzogJXMiLAotCQkgICAgICBmZGNfbW9kZV90eHQoZmRjX21vZGUpKTsKLQkJZmRjX21vZGUgPSBmZGNfaWRsZTsKLQkJYnJlYWs7Ci0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLS8qICAgICAgRkRDIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCi0gKi8KLXZvaWQgZmRjX2lzcih2b2lkKQotewotCXN0YXRpYyBpbnQgaXNyX2FjdGl2ZTsKLSNpZmRlZiBURVNUSU5HCi0JdW5zaWduZWQgaW50IHQwID0gZnRhcGVfdGltZXN0YW1wKCk7Ci0jZW5kaWYKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0gCWlmIChpc3JfYWN0aXZlKyspIHsKLQkJLS1pc3JfYWN0aXZlOwotCQlUUkFDRShmdF90X2J1ZywgIkJVRzogbmVzdGVkIGludGVycnVwdCwgbm90IGdvb2QgISIpOwotCQkqZmRjLmhvb2sgPSBmZGNfaXNyOyAvKiAgaG9vayBvdXIgaGFuZGxlciBpbnRvIHRoZSBmZGMKLQkJCQkgICAgICAqICBjb2RlIGFnYWluIAotCQkJCSAgICAgICovCi0JCVRSQUNFX0VYSVQ7Ci0JfQotCXN0aSgpOwotCWlmIChpbmJfcChmZGMubXNyKSAmIEZEQ19CVVNZKSB7CS8qICBFbnRlcmluZyBSZXN1bHQgUGhhc2UgKi8KLQkJZnRfaGlkZV9pbnRlcnJ1cHQgPSAwOwotCQloYW5kbGVfZmRjX2J1c3koZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKSk7Ci0JCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IGRvX2Fib3J0KSB7Ci0JCQkvKiAgICAgIGNlYXNlIG9wZXJhdGlvbiwgcmVtZW1iZXIgdGFwZSBwb3NpdGlvbgotCQkJICovCi0JCQlUUkFDRShmdF90X2Zsb3csICJydW5uZXIgYWJvcnRpbmciKTsKLQkJCWZ0X3J1bm5lcl9zdGF0dXMgPSBhYm9ydGluZzsKLQkJCSsrZnRfZXhwZWN0ZWRfc3RyYXlfaW50ZXJydXB0czsKLQkJfQotCX0gZWxzZSB7IC8qICFGRENfQlVTWSAqLwotCQkvKiAgY2xlYXIgaW50ZXJydXB0LCBjYXVzZSBzaG91bGQgYmUgZ290dGVuIGJ5IGlzc3VpbmcKLQkJICogIGEgU2Vuc2UgSW50ZXJydXB0IFN0YXR1cyBjb21tYW5kLgotCQkgKi8KLQkJaWYgKGZkY19tb2RlID09IGZkY19yZWNhbGlicmF0aW5nIHx8IGZkY19tb2RlID09IGZkY19zZWVraW5nKSB7Ci0JCQlpZiAoZnRfaGlkZV9pbnRlcnJ1cHQpIHsKLQkJCQlpbnQgc3QwOwotCQkJCWludCBwY247Ci0KLQkJCQlpZiAoZmRjX3NlbnNlX2ludGVycnVwdF9zdGF0dXMoJnN0MCwgJnBjbikgPCAwKQotCQkJCQlUUkFDRShmdF90X2VyciwKLQkJCQkJICAgICAgInNlbnNlIGludGVycnVwdCBzdGF0dXMgZmFpbGVkIik7Ci0JCQkJZnRhcGVfY3VycmVudF9jeWxpbmRlciA9IHBjbjsKLQkJCQlUUkFDRShmdF90X2Zsb3csICJoYW5kbGVkIGhpZGRlbiBpbnRlcnJ1cHQiKTsKLQkJCX0KLQkJCWZ0X3NlZWtfY29tcGxldGVkID0gMTsKLQkJCWZkY19tb2RlID0gZmRjX2lkbGU7Ci0JCX0gZWxzZSBpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJmZ0YXBlX3dhaXRfaW50cikpIHsKLQkJCWlmIChmdF9leHBlY3RlZF9zdHJheV9pbnRlcnJ1cHRzID09IDApIHsKLQkJCQlUUkFDRShmdF90X3dhcm4sICJ1bmV4cGVjdGVkIHN0cmF5IGludGVycnVwdCIpOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X2Zsb3csICJleHBlY3RlZCBzdHJheSBpbnRlcnJ1cHQiKTsKLQkJCQktLWZ0X2V4cGVjdGVkX3N0cmF5X2ludGVycnVwdHM7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZmRjX21vZGUgPT0gZmRjX3JlYWRpbmdfZGF0YSB8fAotCQkJICAgIGZkY19tb2RlID09IGZkY192ZXJpZnlpbmcgICAgfHwKLQkJCSAgICBmZGNfbW9kZSA9PSBmZGNfd3JpdGluZ19kYXRhIHx8Ci0JCQkgICAgZmRjX21vZGUgPT0gZmRjX2RlbGV0aW5nICAgICB8fAotCQkJICAgIGZkY19tb2RlID09IGZkY19mb3JtYXR0aW5nICAgfHwKLQkJCSAgICBmZGNfbW9kZSA9PSBmZGNfcmVhZGluZ19pZCkgewotCQkJCWlmIChpbmJfcChmZGMubXNyKSAmIEZEQ19CVVNZKSB7Ci0JCQkJCVRSQUNFKGZ0X3RfYnVnLAotCQkJCQkiKioqKiogRkRDIGZhaWx1cmUsIGJ1c3kgdG9vIGxhdGUiKTsKLQkJCQl9IGVsc2UgewotCQkJCQlUUkFDRShmdF90X2J1ZywKLQkJCQkJICAgICAgIioqKioqIEZEQyBmYWlsdXJlLCBubyBidXN5Iik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X2ZkY19kbWEsICJhd2FpdGVkIHN0cmF5IGludGVycnVwdCIpOwotCQkJfQotCQl9Ci0JCWZ0X2hpZGVfaW50ZXJydXB0ID0gMDsKLQl9Ci0JLyogICAgSGFuZGxlIHNsZWVwIGNvZGUuCi0JICovCi0JaWYgKCFmdF9oaWRlX2ludGVycnVwdCkgewotCQlmdF9pbnRlcnJ1cHRfc2VlbiArKzsKLQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmZ0YXBlX3dhaXRfaW50cikpIHsKLQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZnRhcGVfd2FpdF9pbnRyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgImhpZGluZyBpbnRlcnJ1cHQgd2hpbGUgJXMiLCAKLQkJICAgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZnRhcGVfd2FpdF9pbnRyKSA/ICJ3YWl0aW5nIjoiYWN0aXZlIik7Ci0JfQotI2lmZGVmIFRFU1RJTkcKLQl0MCA9IGZ0YXBlX3RpbWVkaWZmKHQwLCBmdGFwZV90aW1lc3RhbXAoKSk7Ci0JaWYgKHQwID49IDEwMDApIHsKLQkJLyogb25seSB0ZWxsIHVzIGFib3V0IGxvbmcgY2FsbHMgKi8KLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImlzcigpIGR1cmF0aW9uOiAlNWQgdXNlYyIsIHQwKTsKLQl9Ci0jZW5kaWYKLQkqZmRjLmhvb2sgPSBmZGNfaXNyOwkvKiBob29rIG91ciBoYW5kbGVyIGludG8gdGhlIGZkYyBjb2RlIGFnYWluICovCi0JLS1pc3JfYWN0aXZlOwotCVRSQUNFX0VYSVQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmRjLWlzci5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2ZkYy1pc3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY1YWE5Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZmRjLWlzci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2lmbmRlZiBfRkRDX0lTUl9ICi0jZGVmaW5lIF9GRENfSVNSX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5My0xOTk2IEJhcyBMYWFyaG92ZW4sCi0gKiAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2ZkYy1pc3IuaCx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE4OjA3ICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBkZWNsYXJlcyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBuZWNlc3NhcnkgdG8KLSAqICAgICAgc3luY2hyb25pemUgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKGlzcikgd2l0aCB0aGUKLSAqICAgICAgcmVtYWluZGVyIG9mIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlcgotICogICAgICAiZnRhcGUiIGZvciBMaW51eC4KLSAqLwotCi0vKgotICogICAgICBmZGMtaXNyLmMgZGVmaW5lZCBwdWJsaWMgdmFyaWFibGVzCi0gKi8KLWV4dGVybiB2b2xhdGlsZSBpbnQgZnRfZXhwZWN0ZWRfc3RyYXlfaW50ZXJydXB0czsgLyogbWFza3Mgc3RyYXkgaW50ZXJydXB0cyAqLwotZXh0ZXJuIHZvbGF0aWxlIGludCBmdF9zZWVrX2NvbXBsZXRlZDsJICAgICAgICAgIC8qIGZsYWcgc2V0IGJ5IGlzciAqLwotZXh0ZXJuIHZvbGF0aWxlIGludCBmdF9pbnRlcnJ1cHRfc2VlbjsJICAgICAgICAgIC8qIGZsYWcgc2V0IGJ5IGlzciAqLwotZXh0ZXJuIHZvbGF0aWxlIGludCBmdF9oaWRlX2ludGVycnVwdDsgICAgICAgICAgICAvKiBmbGFnIHNldCBieSBpc3IgKi8KLQotLyoKLSAqICAgICAgZmRjLWlvLmMgZGVmaW5lZCBwdWJsaWMgZnVuY3Rpb25zCi0gKi8KLWV4dGVybiB2b2lkIGZkY19pc3Iodm9pZCk7Ci0KLS8qCi0gKiAgICAgIEEga2VybmVsIGhvb2sgdGhhdCBzdGVhbHMgb25lIGludGVycnVwdCBmcm9tIHRoZSBmbG9wcHkKLSAqICAgICAgZHJpdmVyIChTaG91bGQgYmUgZml4ZWQgd2hlbiB0aGUgbmV3IGZkYyBkcml2ZXIgZ2V0cyByZWFkeSkKLSAqICAgICAgU2VlIHRoZSBsaW51eCBrZXJuZWwgc291cmNlIGZpbGVzOgotICogICAgICAgICAgZHJpdmVycy9ibG9jay9mbG9wcHkuYyAmIGRyaXZlcnMvYmxvY2svYmxrLmgKLSAqICAgICAgZm9yIHRoZSBkZXRhaWxzLgotICovCi1leHRlcm4gdm9pZCAoKmRvX2Zsb3BweSkgKHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ic20uYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ic20uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFhMzAxYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnNtLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OTEgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAgICAgIChDKSAxOTk2LTE5OTcgQ2xhdXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWJzbS5jLHYgJAotICogJFJldmlzaW9uOiAxLjMgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTU6MTUgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBiYWQtc2VjdG9yIG1hcCBoYW5kbGluZyBjb2RlIGZvcgotICogICAgICB0aGUgUUlDLTExNyBmbG9wcHkgdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICogICAgICBRSUMtNDAsIFFJQy04MCwgUUlDLTMwMTAgYW5kIFFJQy0zMDIwIG1hcHMgYXJlIGltcGxlbWVudGVkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLmg+Ci0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJ3LmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLQotLyogICAgICBMb2NhbCB2YXJzLgotICovCi1zdGF0aWMgX191OCAqYmFkX3NlY3Rvcl9tYXA7Ci1zdGF0aWMgU2VjdG9yQ291bnQgKmJzbV9oYXNoX3B0cjsgCi0KLXR5cGVkZWYgZW51bSB7Ci0JZm9yd2FyZCwgYmFja3dhcmQKLX0gbW9kZV90eXBlOwotCi0jaWYgMAotc3RhdGljIHZvaWQgZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoaW50IHNlZ21lbnRfaWQsIFNlY3Rvck1hcCBuZXdfbWFwKTsKLSNlbmRpZgotCi0jaWYgMAotLyogIGZpeF90YXBlIGNvbnZlcnRzIGEgbm9ybWFsIFFJQy04MCB0YXBlIGludG8gYSAnd2lkZScgdGFwZS4KLSAqICBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5ICEKLSAqLwotdm9pZCBmaXhfdGFwZShfX3U4ICogYnVmZmVyLCBmdF9mb3JtYXRfdHlwZSBuZXdfY29kZSkKLXsKLQlzdGF0aWMgX191OCBsaXN0W0JBRF9TRUNUT1JfTUFQX1NJWkVdOwotCVNlY3Rvck1hcCAqc3JjX3B0ciA9IChTZWN0b3JNYXAgKikgbGlzdDsKLQlfX3U4ICpkc3RfcHRyID0gYmFkX3NlY3Rvcl9tYXA7Ci0JU2VjdG9yTWFwIG1hcDsKLQl1bnNpZ25lZCBpbnQgc2VjdG9yID0gMTsKLQlpbnQgaTsKLQotCWlmIChmb3JtYXRfY29kZSAhPSBmbXRfdmFyICYmIGZvcm1hdF9jb2RlICE9IGZtdF9iaWcpIHsKLQkJbWVtY3B5KGxpc3QsIGJhZF9zZWN0b3JfbWFwLCBzaXplb2YobGlzdCkpOwotCQltZW1zZXQoYmFkX3NlY3Rvcl9tYXAsIDAsIHNpemVvZihiYWRfc2VjdG9yX21hcCkpOwotCQl3aGlsZSAoKF9fdTggKikgc3JjX3B0ciAtIGxpc3QgPCBzaXplb2YobGlzdCkpIHsKLQkJCW1hcCA9ICpzcmNfcHRyKys7Ci0JCQlpZiAobWFwID09IEVNUFRZX1NFR01FTlQpIHsKLQkJCQkqKFNlY3Rvck1hcCAqKSBkc3RfcHRyID0gMHg4MDAwMDAgKyBzZWN0b3I7Ci0JCQkJZHN0X3B0ciArPSAzOwotCQkJCXNlY3RvciArPSBTRUNUT1JTX1BFUl9TRUdNRU5UOwotCQkJfSBlbHNlIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgU0VDVE9SU19QRVJfU0VHTUVOVDsgKytpKSB7Ci0JCQkJCWlmIChtYXAgJiAxKSB7Ci0JCQkJCQkqKFNld2N0b3JNYXAgKikgZHN0X3B0ciA9IHNlY3RvcjsKLQkJCQkJCWRzdF9wdHIgKz0gMzsKLQkJCQkJfQotCQkJCQltYXAgPj49IDE7Ci0JCQkJCSsrc2VjdG9yOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQliYWRfc2VjdG9yX21hcF9jaGFuZ2VkID0gMTsKLQkqKGJ1ZmZlciArIDQpID0gbmV3X2NvZGU7CS8qIHB1dCBuZXcgZm9ybWF0IGNvZGUgKi8KLQlpZiAoZm9ybWF0X2NvZGUgIT0gZm10X3ZhciAmJiBuZXdfY29kZSA9PSBmbXRfYmlnKSB7Ci0JCVBVVDQoYnVmZmVyLCBGVF82X0hTRUdfMSwgICAoX191MzIpR0VUMihidWZmZXIsIDYpKTsKLQkJUFVUNChidWZmZXIsIEZUXzZfSFNFR18yLCAgIChfX3UzMilHRVQyKGJ1ZmZlciwgOCkpOwotCQlQVVQ0KGJ1ZmZlciwgRlRfNl9GUlNUX1NFRywgKF9fdTMyKUdFVDIoYnVmZmVyLCAxMCkpOwotCQlQVVQ0KGJ1ZmZlciwgRlRfNl9MQVNUX1NFRywgKF9fdTMyKUdFVDIoYnVmZmVyLCAxMikpOwotCQltZW1zZXQoYnVmZmVyKzYsICdcMCcsIDgpOwotCX0KLQlmb3JtYXRfY29kZSA9IG5ld19jb2RlOwotfQotCi0jZW5kaWYKLQotLyogICBnaXZlbiBidWZmZXIgdGhhdCBjb250YWlucyBhIGhlYWRlciBzZWdtZW50LCBmaW5kIHRoZSBlbmQgb2YKLSAqICAgb2YgdGhlIGJzbSBsaXN0Ci0gKi8KLV9fdTggKiBmdGFwZV9maW5kX2VuZF9vZl9ic21fbGlzdChfX3U4ICogYWRkcmVzcykKLXsKLQlfX3U4ICpwdHIgICA9IGFkZHJlc3MgKyBGVF9IRUFERVJfRU5EOyAvKiBzdGFydCBvZiBic20gbGlzdCAqLwotCV9fdTggKmxpbWl0ID0gYWRkcmVzcyArIEZUX1NFR01FTlRfU0laRTsKLQl3aGlsZSAocHRyICsgMiA8IGxpbWl0KSB7Ci0JCWlmIChwdHJbMF0gfHwgcHRyWzFdIHx8IHB0clsyXSkgewotCQkJcHRyICs9IDM7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gcHRyOwotCQl9Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X3NlY3RvcihTZWN0b3JDb3VudCAqcHRyLCB1bnNpZ25lZCBpbnQgc2VjdG9yKQotewotCXB0ci0+Ynl0ZXNbMF0gPSBzZWN0b3IgJiAweGZmOwotCXNlY3RvciA+Pj0gODsKLQlwdHItPmJ5dGVzWzFdID0gc2VjdG9yICYgMHhmZjsKLQlzZWN0b3IgPj49IDg7Ci0JcHRyLT5ieXRlc1syXSA9IHNlY3RvciAmIDB4ZmY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9zZWN0b3IoU2VjdG9yQ291bnQgKnB0cikKLXsKLSNpZiAxCi0JdW5zaWduZWQgaW50IHNlY3RvcjsKLQotCXNlY3RvciAgPSBwdHItPmJ5dGVzWzBdOwotCXNlY3RvciArPSBwdHItPmJ5dGVzWzFdIDw8ICA4OwotCXNlY3RvciArPSBwdHItPmJ5dGVzWzJdIDw8IDE2OwotCi0JcmV0dXJuIHNlY3RvcjsKLSNlbHNlCi0JLyogIEdFVDQgZ2V0cyB0aGUgbmV4dCBmb3VyIGJ5dGVzIGluIEludGVsIGxpdHRsZSBlbmRpYW4gb3JkZXIKLQkgKiAgYW5kIGNvbnZlcnRzIHRoZW0gdG8gaG9zdCBieXRlIG9yZGVyIGFuZCBoYW5kbGVzIHVuYWxpZ25lZAotCSAqICBhY2Nlc3MuCi0JICovCi0JcmV0dXJuIChHRVQ0KHB0ciwgMCkgJiAweDAwZmZmZmZmKTsgLyogYmFjayB0byBob3N0IGJ5dGUgb3JkZXIgKi8KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBic21fZGVidWdfZmFrZSh2b2lkKQotewotCS8qIGZvciB0ZXN0aW5nIG9mIGJhZCBzZWN0b3IgaGFuZGxpbmcgYXQgZW5kIG9mIHRhcGUKLQkgKi8KLSNpZiAwCi0JZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoc2VnbWVudHNfcGVyX3RyYWNrICogdHJhY2tzX3Blcl90YXBlIC0gMywKLQkJCQkgICAweDAwMDAwM2UwOwotCWZ0YXBlX3B1dF9iYWRfc2VjdG9yX2VudHJ5KHNlZ21lbnRzX3Blcl90cmFjayAqIHRyYWNrc19wZXJfdGFwZSAtIDIsCi0JCQkJICAgMHhmZjNmZmZmZjsKLQlmdGFwZV9wdXRfYmFkX3NlY3Rvcl9lbnRyeShzZWdtZW50c19wZXJfdHJhY2sgKiB0cmFja3NfcGVyX3RhcGUgLSAxLAotCQkJCSAgIDB4ZmZmZmUwMDA7Ci0jZW5kaWYKLQkvKiAgRW5hYmxlIHRvIHRlc3QgYmFkIHNlY3RvciBoYW5kbGluZwotCSAqLwotI2lmIDAKLQlmdGFwZV9wdXRfYmFkX3NlY3Rvcl9lbnRyeSgzMCwgMHhmZmZmZmZmZSkKLQlmdGFwZV9wdXRfYmFkX3NlY3Rvcl9lbnRyeSgzMiwgMHg3ZmZmZmZmZik7Ci0JZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoMzQsIDB4ZmZmZWZmZmYpOwotCWZ0YXBlX3B1dF9iYWRfc2VjdG9yX2VudHJ5KDM2LCAweDU1NTU1NTU1KTsKLQlmdGFwZV9wdXRfYmFkX3NlY3Rvcl9lbnRyeSgzOCwgMHhmZmZmZmZmZik7Ci0JZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoNTAsIDB4ZmZmZjAwMDApOwotCWZ0YXBlX3B1dF9iYWRfc2VjdG9yX2VudHJ5KDUxLCAweGZmZmZmZmZmKTsKLQlmdGFwZV9wdXRfYmFkX3NlY3Rvcl9lbnRyeSg1MiwgMHhmZmZmZmZmZik7Ci0JZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoNTMsIDB4MDAwMGZmZmYpOwotI2VuZGlmCi0JLyogIEVuYWJsZSB3aGVuIHRlc3RpbmcgbXVsdGlwbGUgdm9sdW1lIHRhciBkdW1wcy4KLQkgKi8KLSNpZiAwCi0JewotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSBmdF9maXJzdF9kYXRhX3NlZ21lbnQ7Ci0JCSAgICAgaSA8PSBmdF9sYXN0X2RhdGFfc2VnbWVudCAtIDc7ICsraSkgewotCQkJZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoaSwgRU1QVFlfU0VHTUVOVCk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQkvKiAgRW5hYmxlIHdoZW4gdGVzdGluZyBiaXQgcG9zaXRpb25zIGluICpfZXJyb3JfbWFwCi0JICovCi0jaWYgMAotCXsKLQkJaW50IGk7Ci0JCQotCQlmb3IgKGkgPSBmaXJzdF9kYXRhX3NlZ21lbnQ7IGkgPD0gbGFzdF9kYXRhX3NlZ21lbnQ7ICsraSkgewotCQkJZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoaSwKLQkJCQkJICAgZnRhcGVfZ2V0X2JhZF9zZWN0b3JfZW50cnkoaSkgCi0JCQkJCSAgIHwgMHgwMGZmMDBmZik7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfYmFkX3NlY3Rvcl9tYXAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgZ29vZF9zZWN0b3JzOwotCXVuc2lnbmVkIGludCB0b3RhbF9iYWQgPSAwOwotCWludCBpOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcgfHwgCi0JICAgIGZ0X2Zvcm1hdF9jb2RlID09IGZtdF92YXIgfHwgCi0JICAgIGZ0X2Zvcm1hdF9jb2RlID09IGZtdF8xMTAwZnQpIHsKLQkJU2VjdG9yQ291bnQgKnB0ciA9IChTZWN0b3JDb3VudCAqKWJhZF9zZWN0b3JfbWFwOwotCQl1bnNpZ25lZCBpbnQgc2VjdG9yOwotCQlfX3UxNiAqcHRyMTY7Ci0KLQkJd2hpbGUoKHNlY3RvciA9IGdldF9zZWN0b3IocHRyKyspKSAhPSAwKSB7Ci0JCQlpZiAoKGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcgfHwgCi0JCQkgICAgIGZ0X2Zvcm1hdF9jb2RlID09IGZtdF92YXIpICYmCi0JCQkgICAgc2VjdG9yICYgMHg4MDAwMDApIHsKLQkJCQl0b3RhbF9iYWQgKz0gRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIDM7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImJhZCBzZWdtZW50IGF0IHNlY3RvcjogJTZkIiwKLQkJCQkgICAgICBzZWN0b3IgJiAweDdmZmZmZik7Ci0JCQl9IGVsc2UgewotCQkJCSsrdG90YWxfYmFkOwotCQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJiYWQgc2VjdG9yOiAlNmQiLCBzZWN0b3IpOwotCQkJfQotCQl9Ci0JCS8qICBEaXNwbGF5IG9sZCBmdGFwZSdzIGVuZC1vZi1maWxlIG1hcmtzCi0JCSAqLwotCQlwdHIxNiA9IChfX3UxNiopcHRyOwotCQl3aGlsZSAoKHNlY3RvciA9IGdldF91bmFsaWduZWQocHRyMTYrKykpICE9IDApIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJPbGQgZnRhcGUgZW9mIG1hcms6ICU0ZC8lMmQiLAotCQkJICAgICAgc2VjdG9yLCBnZXRfdW5hbGlnbmVkKHB0cjE2KyspKTsKLQkJfQotCX0gZWxzZSB7IC8qIGZpeGVkIHNpemUgZm9ybWF0ICovCi0JCWZvciAoaSA9IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudDsKLQkJICAgICBpIDwgKGludCkoZnRfc2VnbWVudHNfcGVyX3RyYWNrICogZnRfdHJhY2tzX3Blcl90YXBlKTsgKytpKSB7Ci0JCQlTZWN0b3JNYXAgbWFwID0gKChTZWN0b3JNYXAgKikgYmFkX3NlY3Rvcl9tYXApW2ldOwotCi0JCQlpZiAobWFwKSB7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJCQkgICAgICAiYnNtIGZvciBzZWdtZW50ICU0ZDogMHglMDh4IiwgaSwgKHVuc2lnbmVkIGludCltYXApOwotCQkJCXRvdGFsX2JhZCArPSAoKG1hcCA9PSBFTVBUWV9TRUdNRU5UKQotCQkJCQkgICAgICAgPyBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UIC0gMwotCQkJCQkgICAgICAgOiBjb3VudF9vbmVzKG1hcCkpOwotCQkJfQotCQl9Ci0JfQotCWdvb2Rfc2VjdG9ycyA9Ci0JCSgoZnRfc2VnbWVudHNfcGVyX3RyYWNrICogZnRfdHJhY2tzX3Blcl90YXBlIC0gZnRfZmlyc3RfZGF0YV9zZWdtZW50KQotCQkgKiAoRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIDMpKSAtIHRvdGFsX2JhZDsKLQlUUkFDRShmdF90X2luZm8sICIlZCBLYiB1c2FibGUgb24gdGhpcyB0YXBlIiwgZ29vZF9zZWN0b3JzKTsKLQlpZiAodG90YWxfYmFkID09IDApIHsKLQkJVFJBQ0UoZnRfdF9pbmZvLAotCQkgICAgICAiV0FSTklORzogdGhpcyB0YXBlIGhhcyBubyBiYWQgYmxvY2tzIHJlZ2lzdGVyZWQgISIpOwotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3RfaW5mbywgIiVkIGJhZCBzZWN0b3JzIiwgdG90YWxfYmFkKTsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotCi12b2lkIGZ0YXBlX2V4dHJhY3RfYmFkX3NlY3Rvcl9tYXAoX191OCAqIGJ1ZmZlcikKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogIEZpbGwgdGhlIGJhZCBzZWN0b3IgbWFwIHdpdGggdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlci4KLQkgKi8KLQlpZiAoZnRfZm9ybWF0X2NvZGUgPT0gZm10X3ZhciB8fCBmdF9mb3JtYXRfY29kZSA9PSBmbXRfYmlnKSB7Ci0JCS8qIFFJQy0zMDEwLzMwMjAgYW5kIHdpZGUgUUlDLTgwIHRhcGVzIG5vIGxvbmdlciBoYXZlIGEgZmFpbGVkCi0JCSAqIHNlY3RvciBsb2cgYnV0IHVzZSB0aGlzIGFyZWEgdG8gZXh0ZW5kIHRoZSBiYWQgc2VjdG9yIG1hcC4KLQkJICovCi0JCWJhZF9zZWN0b3JfbWFwID0gJmJ1ZmZlcltGVF9IRUFERVJfRU5EXTsKLQl9IGVsc2UgewotCQkvKiBub24td2lkZSBRSUMtODAgdGFwZXMgaGF2ZSBhIGZhaWxlZCBzZWN0b3IgbG9nIGFyZWEgdGhhdAotCQkgKiBtdXN0bid0IGJlIGluY2x1ZGVkIGluIHRoZSBiYWQgc2VjdG9yIG1hcC4KLQkJICovCi0JCWJhZF9zZWN0b3JfbWFwID0gJmJ1ZmZlcltGVF9GU0wgKyBGVF9GU0xfU0laRV07Ci0JfQotCWlmIChmdF9mb3JtYXRfY29kZSA9PSBmbXRfMTEwMGZ0IHx8IAotCSAgICBmdF9mb3JtYXRfY29kZSA9PSBmbXRfdmFyICAgIHx8Ci0JICAgIGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcpIHsKLQkJYnNtX2hhc2hfcHRyID0gKFNlY3RvckNvdW50ICopYmFkX3NlY3Rvcl9tYXA7Ci0JfSBlbHNlIHsKLQkJYnNtX2hhc2hfcHRyID0gTlVMTDsKLQl9Ci0JYnNtX2RlYnVnX2Zha2UoKTsKLQlpZiAoVFJBQ0VfTEVWRUwgPj0gZnRfdF9pbmZvKSB7Ci0JCXByaW50X2JhZF9zZWN0b3JfbWFwKCk7Ci0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU2VjdG9yTWFwIGN2dDJtYXAodW5zaWduZWQgaW50IHNlY3RvcikKLXsKLQlyZXR1cm4gMSA8PCAoKChzZWN0b3IgJiAweDdmZmZmZikgLSAxKSAlIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBjdnQyc2VnbWVudCh1bnNpZ25lZCBpbnQgc2VjdG9yKQotewotCXJldHVybiAoKHNlY3RvciAmIDB4N2ZmZmZmKSAtIDEpIC8gRlRfU0VDVE9SU19QRVJfU0VHTUVOVDsKLX0KLQotc3RhdGljIGludCBmb3J3YXJkX3NlZWtfZW50cnkoaW50IHNlZ21lbnRfaWQsIAotCQkJICAgICAgU2VjdG9yQ291bnQgKipwdHIsIAotCQkJICAgICAgU2VjdG9yTWFwICptYXApCi17Ci0JdW5zaWduZWQgaW50IHNlY3RvcjsKLQlpbnQgc2VnbWVudDsKLQotCWRvIHsKLQkJc2VjdG9yID0gZ2V0X3NlY3RvcigoKnB0cikrKyk7Ci0JCXNlZ21lbnQgPSBjdnQyc2VnbWVudChzZWN0b3IpOwotCX0gd2hpbGUgKHNlY3RvciAhPSAwICYmIHNlZ21lbnQgPCBzZWdtZW50X2lkKTsKLQkoKnB0cikgLS07IC8qIHBvaW50IHRvIGZpcnN0IHNlY3RvciA+PSBzZWdtZW50X2lkICovCi0JLyogIEdldCBhbGwgc2VjdG9ycyBpbiBzZWdtZW50X2lkCi0JICovCi0JaWYgKHNlY3RvciA9PSAwIHx8IHNlZ21lbnQgIT0gc2VnbWVudF9pZCkgewotCQkqbWFwID0gMDsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIGlmICgoc2VjdG9yICYgMHg4MDAwMDApICYmCi0JCSAgIChmdF9mb3JtYXRfY29kZSA9PSBmbXRfdmFyIHx8IGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcpKSB7Ci0JCSptYXAgPSBFTVBUWV9TRUdNRU5UOwotCQlyZXR1cm4gRlRfU0VDVE9SU19QRVJfU0VHTUVOVDsKLQl9IGVsc2UgewotCQlpbnQgY291bnQgPSAxOwotCQlTZWN0b3JDb3VudCAqdG1wX3B0ciA9ICgqcHRyKSArIDE7Ci0JCQotCQkqbWFwID0gY3Z0Mm1hcChzZWN0b3IpOwotCQl3aGlsZSAoKHNlY3RvciA9IGdldF9zZWN0b3IodG1wX3B0cisrKSkgIT0gMCAmJgotCQkgICAgICAgKHNlZ21lbnQgPSBjdnQyc2VnbWVudChzZWN0b3IpKSA9PSBzZWdtZW50X2lkKSB7Ci0JCQkqbWFwIHw9IGN2dDJtYXAoc2VjdG9yKTsKLQkJCSsrY291bnQ7Ci0JCX0KLQkJcmV0dXJuIGNvdW50OwotCX0KLX0KLQotc3RhdGljIGludCBiYWNrd2FyZHNfc2Vla19lbnRyeShpbnQgc2VnbWVudF9pZCwKLQkJCQlTZWN0b3JDb3VudCAqKnB0ciwKLQkJCQlTZWN0b3JNYXAgKm1hcCkKLXsKLQl1bnNpZ25lZCBpbnQgc2VjdG9yOwotCWludCBzZWdtZW50OyAvKiBtYXggdW5zaWduZWQgaW50ICovCi0KLQlpZiAoKnB0ciA8PSAoU2VjdG9yQ291bnQgKiliYWRfc2VjdG9yX21hcCkgewotCQkqbWFwID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCWRvIHsKLQkJc2VjdG9yICA9IGdldF9zZWN0b3IoLS0oKnB0cikpOwotCQlzZWdtZW50ID0gY3Z0MnNlZ21lbnQoc2VjdG9yKTsKLQl9IHdoaWxlICgqcHRyID4gKFNlY3RvckNvdW50ICopYmFkX3NlY3Rvcl9tYXAgJiYgc2VnbWVudCA+IHNlZ21lbnRfaWQpOwotCWlmIChzZWdtZW50ID4gc2VnbWVudF9pZCkgeyAvKiAgYXQgc3RhcnQgb2YgbGlzdCwgbm8gZW50cnkgZm91bmQgKi8KLQkJKm1hcCA9IDA7Ci0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc2VnbWVudCA8IHNlZ21lbnRfaWQpIHsKLQkJLyogIGJlZm9yZSBzbWFsbGVyIGVudHJ5LCBhZGp1c3QgZm9yIG92ZXJzaG9vdCAqLwotCQkoKnB0cikgKys7Ci0JCSptYXAgPSAwOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKChzZWN0b3IgJiAweDgwMDAwMCkgJiYKLQkJICAgKGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcgfHwgZnRfZm9ybWF0X2NvZGUgPT0gZm10X3ZhcikpIHsKLQkJKm1hcCA9IEVNUFRZX1NFR01FTlQ7Ci0JCXJldHVybiBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UOwotCX0gZWxzZSB7IC8qICBnZXQgYWxsIHNlY3RvcnMgaW4gc2VnbWVudF9pZCAqLwotCQlpbnQgY291bnQgPSAxOwotCi0JCSptYXAgPSBjdnQybWFwKHNlY3Rvcik7Ci0JCXdoaWxlKCpwdHIgPiAoU2VjdG9yQ291bnQgKiliYWRfc2VjdG9yX21hcCkgewotCQkJc2VjdG9yID0gZ2V0X3NlY3RvcigtLSgqcHRyKSk7Ci0JCQlzZWdtZW50ID0gY3Z0MnNlZ21lbnQoc2VjdG9yKTsKLQkJCWlmIChzZWdtZW50ICE9IHNlZ21lbnRfaWQpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCSptYXAgfD0gY3Z0Mm1hcChzZWN0b3IpOwotCQkJKytjb3VudDsKLQkJfQotCQlpZiAoc2VnbWVudCA8IHNlZ21lbnRfaWQpIHsKLQkJCSgqcHRyKSArKzsKLQkJfQotCQlyZXR1cm4gY291bnQ7Ci0JfQotfQotCi0jaWYgMAotc3RhdGljIHZvaWQgZnRhcGVfcHV0X2JhZF9zZWN0b3JfZW50cnkoaW50IHNlZ21lbnRfaWQsIFNlY3Rvck1hcCBuZXdfbWFwKQotewotCVNlY3RvckNvdW50ICpwdHIgPSAoU2VjdG9yQ291bnQgKiliYWRfc2VjdG9yX21hcDsKLQlpbnQgY291bnQ7Ci0JaW50IG5ld19jb3VudDsKLQlTZWN0b3JNYXAgbWFwOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoZnRfZm9ybWF0X2NvZGUgPT0gZm10XzExMDBmdCB8fCAKLQkgICAgZnRfZm9ybWF0X2NvZGUgPT0gZm10X3ZhciB8fCAKLQkgICAgZnRfZm9ybWF0X2NvZGUgPT0gZm10X2JpZykgewotCQljb3VudCA9IGZvcndhcmRfc2Vla19lbnRyeShzZWdtZW50X2lkLCAmcHRyLCAmbWFwKTsKLQkJbmV3X2NvdW50ID0gY291bnRfb25lcyhuZXdfbWFwKTsKLQkJLyogSWYgZm9ybWF0IGNvZGUgPT0gNCBwdXQgZW1wdHkgc2VnbWVudCBpbnN0ZWFkIG9mIDMyCi0JCSAqIGJhZCBzZWN0b3JzLgotCQkgKi8KLQkJaWYgKGZ0X2Zvcm1hdF9jb2RlID09IGZtdF92YXIgfHwgZnRfZm9ybWF0X2NvZGUgPT0gZm10X2JpZykgewotCQkJaWYgKG5ld19jb3VudCA9PSBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UKSB7Ci0JCQkJbmV3X2NvdW50ID0gMTsKLQkJCX0KLQkJCWlmIChjb3VudCA9PSBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UKSB7Ci0JCQkJY291bnQgPSAxOwotCQkJfQotCQl9Ci0JCWlmIChjb3VudCAhPSBuZXdfY291bnQpIHsKLQkJCS8qIGluc2VydCAob3IgZGVsZXRlIGlmIDwgMCkgbmV3X2NvdW50IC0gY291bnQKLQkJCSAqIGVudHJpZXMuICBNb3ZlIHRyYWlsaW5nIHBhcnQgb2YgbGlzdAotCQkJICogaW5jbHVkaW5nIHRlcm1pbmF0aW5nIDAuCi0JCQkgKi8KLQkJCVNlY3RvckNvdW50ICpoaV9wdHIgPSBwdHI7Ci0KLQkJCWRvIHsKLQkJCX0gd2hpbGUgKGdldF9zZWN0b3IoaGlfcHRyKyspICE9IDApOwotCQkJLyogIE5vdGU6IHB0ciBpcyBvZiB0eXBlIGJ5dGUgKiwgYW5kIGVhY2ggYmFkIHNlY3RvcgotCQkJICogIGNvbnN1bWVzIDMgYnl0ZXMuCi0JCQkgKi8KLQkJCW1lbW1vdmUocHRyICsgbmV3X2NvdW50LCBwdHIgKyBjb3VudCwKLQkJCQkoc2l6ZV90KShoaV9wdHIgLSAocHRyICsgY291bnQpKSpzaXplb2YoU2VjdG9yQ291bnQpKTsKLQkJfQotCQlUUkFDRShmdF90X25vaXNlLCAicHV0dGluZyBtYXAgMHglMDh4IGF0ICVwLCBzZWdtZW50ICVkIiwKLQkJICAgICAgKHVuc2lnbmVkIGludCluZXdfbWFwLCBwdHIsIHNlZ21lbnRfaWQpOwotCQlpZiAobmV3X2NvdW50ID09IDEgJiYgbmV3X21hcCA9PSBFTVBUWV9TRUdNRU5UKSB7Ci0JCQlwdXRfc2VjdG9yKHB0cisrLCAoMHg4MDAwMDEgKyAKLQkJCQkJICBzZWdtZW50X2lkICogCi0JCQkJCSAgRlRfU0VDVE9SU19QRVJfU0VHTUVOVCkpOwotCQl9IGVsc2UgewotCQkJaW50IGkgPSAwOwotCi0JCQl3aGlsZSAobmV3X21hcCkgewotCQkJCWlmIChuZXdfbWFwICYgMSkgewotCQkJCQlwdXRfc2VjdG9yKHB0cisrLCAKLQkJCQkJCSAgIDEgKyBzZWdtZW50X2lkICogCi0JCQkJCQkgICBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UICsgaSk7Ci0JCQkJfQotCQkJCSsraTsKLQkJCQluZXdfbWFwID4+PSAxOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJKChTZWN0b3JNYXAgKikgYmFkX3NlY3Rvcl9tYXApW3NlZ21lbnRfaWRdID0gbmV3X21hcDsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KLVNlY3Rvck1hcCBmdGFwZV9nZXRfYmFkX3NlY3Rvcl9lbnRyeShpbnQgc2VnbWVudF9pZCkKLXsKLQlpZiAoZnRfdXNlZF9oZWFkZXJfc2VnbWVudCA9PSAtMSkgewotCQkvKiAgV2hlbiByZWFkaW5nIGhlYWRlciBzZWdtZW50IHdlJ2xsIG5lZWQgYSBibGFuayBtYXAuCi0JCSAqLwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKGJzbV9oYXNoX3B0ciAhPSBOVUxMKSB7Ci0JCS8qICBJbnZhcmlhbnRzOgotCQkgKiAgICBtYXAgLSBtYXNrIHZhbHVlIHJldHVybmVkIG9uIGxhc3QgY2FsbC4KLQkJICogICAgYnNtX2hhc2hfcHRyIC0gcG9pbnRzIHRvIGZpcnN0IHNlY3RvciBncmVhdGVyIG9yIGVxdWFsIHRvCi0JCSAqICAgICAgICAgIGZpcnN0IHNlY3RvciBpbiBsYXN0X3JlZmVyZW5jZWQgc2VnbWVudC4KLQkJICogICAgbGFzdF9yZWZlcmVuY2VkIC0gc2VnbWVudCBpZCB1c2VkIGluIHRoZSBsYXN0IGNhbGwsCi0JCSAqICAgICAgICAgICAgICAgICAgICAgIHNlY3RvciBhbmQgbWFwIGJlbG9uZyB0byB0aGlzIGlkLgotCQkgKiAgVGhpcyBjb2RlIGlzIGRlc2lnbmVkIGZvciBzZXF1ZW50aWFsIGFjY2VzcyBhbmQgcmV0cmllcy4KLQkJICogIEZvciB0cnVlIHJhbmRvbSBhY2Nlc3MgaXQgbWF5IGhhdmUgdG8gYmUgcmVkZXNpZ25lZC4KLQkJICovCi0JCXN0YXRpYyBpbnQgbGFzdF9yZWZlcmVuY2UgPSAtMTsKLQkJc3RhdGljIFNlY3Rvck1hcCBtYXA7Ci0KLQkJaWYgKHNlZ21lbnRfaWQgPiBsYXN0X3JlZmVyZW5jZSkgewotCQkJLyogIFNraXAgYWxsIHNlY3RvcnMgYmVmb3JlIHNlZ21lbnRfaWQKLQkJCSAqLwotCQkJZm9yd2FyZF9zZWVrX2VudHJ5KHNlZ21lbnRfaWQsICZic21faGFzaF9wdHIsICZtYXApOwotCQl9IGVsc2UgaWYgKHNlZ21lbnRfaWQgPCBsYXN0X3JlZmVyZW5jZSkgewotCQkJLyogU2tpcCBiYWNrd2FyZHMgdW50aWwgYmVnaW4gb2YgYnVmZmVyIG9yCi0JCQkgKiBmaXJzdCBzZWN0b3IgaW4gc2VnbWVudF9pZCAKLQkJCSAqLwotCQkJYmFja3dhcmRzX3NlZWtfZW50cnkoc2VnbWVudF9pZCwgJmJzbV9oYXNoX3B0ciwgJm1hcCk7Ci0JCX0JCS8qIHNlZ21lbnRfaWQgPT0gbGFzdF9yZWZlcmVuY2UgOiBrZWVwIG1hcCAqLwotCQlsYXN0X3JlZmVyZW5jZSA9IHNlZ21lbnRfaWQ7Ci0JCXJldHVybiBtYXA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgoU2VjdG9yTWFwICopIGJhZF9zZWN0b3JfbWFwKVtzZWdtZW50X2lkXTsKLQl9Ci19Ci0KLS8qICBUaGlzIGlzIHNpbXBseSBoZXJlIHRvIHByZXZlbnQgdXMgZnJvbSBvdmVyd3JpdGluZyBvdGhlciBrZXJuZWwKLSAqICBkYXRhLiBXcml0ZXMgd2lsbCByZXN1bHQgaW4gTlVMTCBQb2ludGVyIGRlcmVmZXJlbmNlLgotICovCi12b2lkIGZ0YXBlX2luaXRfYnNtKHZvaWQpCi17Ci0JYmFkX3NlY3Rvcl9tYXAgPSBOVUxMOwotCWJzbV9oYXNoX3B0ciAgID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ic20uaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ic20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ0NTQ2NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnNtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9CU01fSAotI2RlZmluZSBfRlRBUEVfQlNNX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2IEJhcyBMYWFyaG92ZW4sCi0gKiAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWJzbS5oLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6MDcgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgYmFkIHNlY3RvciBtYXAgaGFuZGxpbmcKLSAqICAgICAgcm91dGluZXMgZm9yIHRoZSBRSUMtMTE3IGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaD4KLQotI2RlZmluZSBFTVBUWV9TRUdNRU5UICAgICAgICAgICAoMHhmZmZmZmZmZikKLSNkZWZpbmUgRkFLRV9TRUdNRU5UICAgICAgICAgICAgKDB4ZmZmZmZmZmUpCi0KLS8qICBtYXhpbXVtIChmb3JtYXQgY29kZSA0KSBiYWQgc2VjdG9yIG1hcCBzaXplIChieXRlcykuCi0gKi8KLSNkZWZpbmUgQkFEX1NFQ1RPUl9NQVBfU0laRSAgICAgKDI5ICogU0VDVE9SX1NJWkUgLSAyNTYpCi0KLS8qICBmb3JtYXQgY29kZSA0IGJhZCBzZWN0b3IgZW50cnksIGZ0YXBlIHVzZXMgdGhpcwotICogIGludGVybmFsbHkgZm9yIGFsbCBmb3JtYXQgY29kZXMKLSAqLwotdHlwZWRlZiBfX3UzMiBTZWN0b3JNYXA7Ci0vKiAgdmFyaWFibGUgYW5kIDExMDAgZnQgYmFkIHNlY3RvciBtYXAgZW50cnkuIFRoZXNlIHRocmVlIGJ5dGVzIHJlcHJlc2VudAotICogIGEgc2luZ2xlIHNlY3RvciBhZGRyZXNzIG1lYXN1cmVkIGZyb20gQk9ULiAKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgTmV3U2VjdG9yTWFwIHsgICAgICAgICAgCi0JX191OCBieXRlc1szXTsKLX0gU2VjdG9yQ291bnQ7Ci0KLQotLyoKLSAqICAgICAgZnRhcGUtYnNtLmMgZGVmaW5lZCBnbG9iYWwgdmFycy4KLSAqLwotCi0vKgotICogICAgICBmdGFwZS1ic20uYyBkZWZpbmVkIGdsb2JhbCBmdW5jdGlvbnMuCi0gKi8KLWV4dGVybiB2b2lkIHVwZGF0ZV9iYWRfc2VjdG9yX21hcChfX3U4ICogYnVmZmVyKTsKLWV4dGVybiB2b2lkIGZ0YXBlX2V4dHJhY3RfYmFkX3NlY3Rvcl9tYXAoX191OCAqIGJ1ZmZlcik7Ci1leHRlcm4gU2VjdG9yTWFwIGZ0YXBlX2dldF9iYWRfc2VjdG9yX2VudHJ5KGludCBzZWdtZW50X2lkKTsKLWV4dGVybiBfX3U4ICpmdGFwZV9maW5kX2VuZF9vZl9ic21fbGlzdChfX3U4ICogYWRkcmVzcyk7Ci1leHRlcm4gdm9pZCBmdGFwZV9pbml0X2JzbSh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnVmZmVyLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnVmZmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDZmZjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWJ1ZmZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUKLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnVmZmVyLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuMyAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8xNiAyMzozMzoxMSAkCi0gKgotICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYWxsb2NhdG9yL2RlYWxsb2N0b3IgZm9yIGZ0YXBlJ3MgZHluYW1pYyBkbWEKLSAqICBidWZmZXIuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcmVhZC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1idWZmZXIuaCIKLQotLyogIERNQSdhYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHN0dWZmLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hYWxsb2Moc2l6ZV90IHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCi0JaWYgKHNpemUgPT0gMCkgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JYWRkciA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBnZXRfb3JkZXIoc2l6ZSkpOwotCWlmIChhZGRyKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCWZvciAocGFnZSA9IHZpcnRfdG9fcGFnZShhZGRyKTsgcGFnZSA8IHZpcnRfdG9fcGFnZShhZGRyK3NpemUpOyBwYWdlKyspCi0JCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JfQotCXJldHVybiAodm9pZCAqKWFkZHI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFmcmVlKHZvaWQgKmFkZHIsIHNpemVfdCBzaXplKQotewotCWlmIChzaXplID4gMCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCQlmb3IgKHBhZ2UgPSB2aXJ0X3RvX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYWRkcik7Ci0JCSAgICAgcGFnZSA8IHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZylhZGRyK3NpemUpOyBwYWdlKyspCi0JCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYWRkX29uZV9idWZmZXIodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlpZiAoZnRfbnJfYnVmZmVycyA+PSBGVF9NQVhfTlJfQlVGRkVSUykgewotCQlUUkFDRV9FWElUIC1FTk9NRU07Ci0JfQotCWZ0X2J1ZmZlcltmdF9ucl9idWZmZXJzXSA9IGttYWxsb2Moc2l6ZW9mKGJ1ZmZlcl9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZnRfYnVmZmVyW2Z0X25yX2J1ZmZlcnNdID09IE5VTEwpIHsKLQkJVFJBQ0VfRVhJVCAtRU5PTUVNOwotCX0KLQltZW1zZXQoZnRfYnVmZmVyW2Z0X25yX2J1ZmZlcnNdLCAwLCBzaXplb2YoYnVmZmVyX3N0cnVjdCkpOwotCWZ0X2J1ZmZlcltmdF9ucl9idWZmZXJzXS0+YWRkcmVzcyA9IGRtYWFsbG9jKEZUX0JVRkZfU0laRSk7Ci0JaWYgKGZ0X2J1ZmZlcltmdF9ucl9idWZmZXJzXS0+YWRkcmVzcyA9PSBOVUxMKSB7Ci0JCWtmcmVlKGZ0X2J1ZmZlcltmdF9ucl9idWZmZXJzXSk7Ci0JCWZ0X2J1ZmZlcltmdF9ucl9idWZmZXJzXSA9IE5VTEw7Ci0JCVRSQUNFX0VYSVQgLUVOT01FTTsKLQl9Ci0JZnRfbnJfYnVmZmVycyArKzsKLQlUUkFDRShmdF90X2luZm8sICJidWZmZXIgbnIgIyVkIEAgJXAsIGRtYSBhcmVhIEAgJXAiLAotCSAgICAgIGZ0X25yX2J1ZmZlcnMsCi0JICAgICAgZnRfYnVmZmVyW2Z0X25yX2J1ZmZlcnMtMV0sCi0JICAgICAgZnRfYnVmZmVyW2Z0X25yX2J1ZmZlcnMtMV0tPmFkZHJlc3MpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotc3RhdGljIHZvaWQgZGVsX29uZV9idWZmZXIodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQlpZiAoZnRfbnJfYnVmZmVycyA+IDApIHsKLQkJVFJBQ0UoZnRfdF9pbmZvLCAicmVsZWFzaW5nIGJ1ZmZlciBuciAjJWQgQCAlcCwgZG1hIGFyZWEgQCAlcCIsCi0JCSAgICAgIGZ0X25yX2J1ZmZlcnMsCi0JCSAgICAgIGZ0X2J1ZmZlcltmdF9ucl9idWZmZXJzLTFdLAotCQkgICAgICBmdF9idWZmZXJbZnRfbnJfYnVmZmVycy0xXS0+YWRkcmVzcyk7Ci0JCWZ0X25yX2J1ZmZlcnMgLS07Ci0JCWRtYWZyZWUoZnRfYnVmZmVyW2Z0X25yX2J1ZmZlcnNdLT5hZGRyZXNzLCBGVF9CVUZGX1NJWkUpOwotCQlrZnJlZShmdF9idWZmZXJbZnRfbnJfYnVmZmVyc10pOwotCQlmdF9idWZmZXJbZnRfbnJfYnVmZmVyc10gPSBOVUxMOwotCX0KLQlUUkFDRV9FWElUOwotfQotCi1pbnQgZnRhcGVfc2V0X25yX2J1ZmZlcnMoaW50IGNudCkKLXsKLQlpbnQgZGVsdGEgPSBjbnQgLSBmdF9ucl9idWZmZXJzOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGRlbHRhID4gMCkgewotCQl3aGlsZSAoZGVsdGEtLSkgewotCQkJaWYgKGFkZF9vbmVfYnVmZmVyKCkgPCAwKSB7Ci0JCQkJVFJBQ0VfRVhJVCAtRU5PTUVNOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChkZWx0YSA8IDApIHsKLQkJd2hpbGUgKGRlbHRhKyspIHsKLQkJCWRlbF9vbmVfYnVmZmVyKCk7Ci0JCX0KLQl9Ci0JZnRhcGVfemFwX3JlYWRfYnVmZmVycygpOwotCVRSQUNFX0VYSVQgMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1idWZmZXIuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1idWZmZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVjOTljZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnVmZmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9CVUZGRVJfSAotI2RlZmluZSBfRlRBUEVfQlVGRkVSX0gKLQotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtYnVmZmVyLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODowOCAkCi0gKgotICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYWxsb2NhdG9yL2RlYWxsb2N0b3IgZm9yIGZ0YXBlJ3MgZHluYW1pYyBkbWEKLSAqICBidWZmZXIuCi0gKi8KLQotZXh0ZXJuIGludCAgZnRhcGVfc2V0X25yX2J1ZmZlcnMoaW50IGNudCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWNhbGlici5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWNhbGlici5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTUwYmZkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuYyx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE4OjA4ICQKLSAqCi0gKiAgICAgIEdQIGNhbGlicmF0aW9uIHJvdXRpbmUgZm9yIHByb2Nlc3NvciBzcGVlZCBkZXBlbmRlbnQKLSAqICAgICAgZnVuY3Rpb25zLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaWYgZGVmaW5lZChfX2FscGhhX18pCi0jIGluY2x1ZGUgPGFzbS9od3JwYi5oPgotI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotIyBpbmNsdWRlIDxhc20vbXNyLmg+Ci0jIGluY2x1ZGUgPGFzbS90aW1leC5oPgotI2VsaWYgZGVmaW5lZChfX2kzODZfXykKLSMgaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNlbmRpZgotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLmg+Ci0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWNhbGlici5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2ZkYy1pby5oIgotCi0jdW5kZWYgREVCVUcKLQotI2lmICFkZWZpbmVkKF9fYWxwaGFfXykgJiYgIWRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18pCi0jIGVycm9yIEZ0YXBlIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUhCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBwc19wZXJfY3ljbGUgPSAwOwotI2VuZGlmCi0KLXN0YXRpYyBzcGlubG9ja190IGNhbGlicl9sb2NrOwotCi0vKgotICogTm90ZTogT24gSW50ZWwgUENzLCB0aGUgY2xvY2sgdGlja3MgYXQgMTAwIEh6IChIWj09MTAwKSB3aGljaCBpcwotICogdG9vIHNsb3cgZm9yIGNlcnRhaW4gdGltZW91dHMgKGFuZCB0aGF0IGNsb2NrIGRvZXNuJ3QgZXZlbiB0aWNrCi0gKiB3aGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkKS4gIEZvciB0aGF0IHJlYXNvbiwgdGhlIDgyNTQgdGltZXIgaXMKLSAqIHVzZWQgZGlyZWN0bHkgdG8gaW1wbGVtZW50IGZpbmUtZ3JhaW5lZCB0aW1lb3V0cy4gIEhvd2V2ZXIsIG9uCi0gKiBBbHBoYSBQQ3MsIHRoZSA4MjU0IGlzICpub3QqIHVzZWQgdG8gaW1wbGVtZW50IHRoZSBjbG9jayB0aWNrCi0gKiAod2hpY2ggaXMgMTAyNCBIeiwgbm9ybWFsbHkpIGFuZCB0aGUgODI1NCB0aW1lciBydW5zIGF0IHNvbWUKLSAqICJyYW5kb20iIGZyZXF1ZW5jeSAoaXQgc2VlbXMgdG8gcnVuIGF0IDE4SHosIGJ1dCBpdCdzIG5vdCBzYWZlIHRvCi0gKiByZWx5IG9uIHRoaXMgdmFsdWUpLiAgSW5zdGVhZCwgd2UgdXNlIHRoZSBBbHBoYSdzICJycGNjIgotICogaW5zdHJ1Y3Rpb24gdG8gcmVhZCBjeWNsZSBjb3VudHMuICBBcyB0aGlzIGlzIGEgMzIgYml0IGNvdW50ZXIsCi0gKiBpdCB3aWxsIG92ZXJmbG93IG9ubHkgb25jZSBwZXIgMzAgc2Vjb25kcyAob24gYSAyMDBNSHogbWFjaGluZSksCi0gKiB3aGljaCBpcyBwbGVudHkuCi0gKi8KLQotdW5zaWduZWQgaW50IGZ0YXBlX3RpbWVzdGFtcCh2b2lkKQotewotI2lmIGRlZmluZWQoX19hbHBoYV9fKQotCXVuc2lnbmVkIGxvbmcgcjsKLQotCWFzbSB2b2xhdGlsZSAoInJwY2MgJTAiIDogIj1yIiAocikpOwotCXJldHVybiByOwotI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotCXVuc2lnbmVkIGxvbmcgcjsKLQlyZHRzY2wocik7Ci0JcmV0dXJuIHI7Ci0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotCi0vKgotICogTm90ZSB0aGF0IHRoZXJlIGlzIHNvbWUgdGltZSBiZXR3ZWVuIGNvdW50ZXIgdW5kZXJmbG93aW5nIGFuZCBqaWZmaWVzCi0gKiBpbmNyZWFzaW5nLCBzbyB0aGUgY29kZSBiZWxvdyB3b24ndCBhbHdheXMgZ2l2ZSBjb3JyZWN0IG91dHB1dC4KLSAqIC1Wb2p0ZWNoCi0gKi8KLQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JX191MTYgbG87Ci0JX191MTYgaGk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FsaWJyX2xvY2ssIGZsYWdzKTsKLQlvdXRiX3AoMHgwMCwgMHg0Myk7CS8qIGxhdGNoIHRoZSBjb3VudCBBU0FQICovCi0JbG8gPSBpbmJfcCgweDQwKTsJLyogcmVhZCB0aGUgbGF0Y2hlZCBjb3VudCAqLwotCWxvIHw9IGluYigweDQwKSA8PCA4OwotCWhpID0gamlmZmllczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWxpYnJfbG9jaywgZmxhZ3MpOwotCXJldHVybiAoKGhpICsgMSkgKiAodW5zaWduZWQgaW50KSBMQVRDSCkgLSBsbzsgIC8qIGRvd25jb3VudGVyICEgKi8KLSNlbmRpZgotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHNob3J0X2Z0YXBlX3RpbWVzdGFtcCh2b2lkKQotewotI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0JcmV0dXJuIGZ0YXBlX3RpbWVzdGFtcCgpOwotI2VsaWYgZGVmaW5lZChfX2kzODZfXykKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0gCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhbGlicl9sb2NrLCBmbGFncyk7Ci0gCW91dGJfcCgweDAwLCAweDQzKTsJLyogbGF0Y2ggdGhlIGNvdW50IEFTQVAgKi8KLQljb3VudCA9IGluYl9wKDB4NDApOwkvKiByZWFkIHRoZSBsYXRjaGVkIGNvdW50ICovCi0JY291bnQgfD0gaW5iKDB4NDApIDw8IDg7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FsaWJyX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gKExBVENIIC0gY291bnQpOwkvKiBub3JtYWw6IGRvd25jb3VudGVyICovCi0jZW5kaWYKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkaWZmKHVuc2lnbmVkIGludCB0MCwgdW5zaWduZWQgaW50IHQxKQotewotI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0JcmV0dXJuICh0MSAtIHQwKTsKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pCi0JLyoKLQkgKiBUaGlzIGlzIHRyaWNreTogdG8gd29yayBmb3IgYm90aCBzaG9ydCBhbmQgZnVsbCBmdGFwZV90aW1lc3RhbXBzCi0JICogd2UnbGwgaGF2ZSB0byBkaXNjcmltaW5hdGUgYmV0d2VlbiB0aGVzZS4KLQkgKiBJZiBpdCBfbG9va3NfIGxpa2Ugc2hvcnQgc3RhbXBzIHdpdGggd3JhcHBpbmcgYXJvdW5kIHdlJ2xsCi0JICogYXN1bWUgaXQgYXJlLiBUaGlzIHdpbGwgZ2VuZXJhdGUgYSBzbWFsbCBlcnJvciBpZiBpdCByZWFsbHkKLQkgKiB3YXMgYSAodmVyeSBsYXJnZSkgZGVsdGEgZnJvbSBmdWxsIGZ0YXBlX3RpbWVzdGFtcHMuCi0JICovCi0JcmV0dXJuICh0MSA8PSB0MCAmJiB0MCA8PSBMQVRDSCkgPyB0MSArIExBVENIIC0gdDAgOiB0MSAtIHQwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNlY3ModW5zaWduZWQgaW50IGNvdW50KQotewotI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0JcmV0dXJuIChwc19wZXJfY3ljbGUgKiBjb3VudCkgLyAxMDAwMDAwVUw7Ci0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotCXJldHVybiAoMTAwMDAgKiBjb3VudCkgLyAoKENMT0NLX1RJQ0tfUkFURSArIDUwKSAvIDEwMCk7Ci0jZW5kaWYKLX0KLQotdW5zaWduZWQgaW50IGZ0YXBlX3RpbWVkaWZmKHVuc2lnbmVkIGludCB0MCwgdW5zaWduZWQgaW50IHQxKQotewotCS8qCi0JICogIENhbGN1bGF0ZSBkaWZmZXJlbmNlIGluIHVzZWMgZm9yIGZ0YXBlX3RpbWVzdGFtcCByZXN1bHRzIHQwICYgdDEuCi0JICogIE5vdGUgdGhhdCBvbiB0aGUgaTM4NiBwbGF0Zm9ybSB3aXRoIHNob3J0IHRpbWUtc3RhbXBzLCB0aGUKLQkgKiAgbWF4aW11bSBhbGxvd2VkIHRpbWVzcGFuIGlzIDEvSFogb3Igd2UnbGwgbG9zZSB0aWNrcyEKLQkgKi8KLQlyZXR1cm4gdXNlY3MoZGlmZih0MCwgdDEpKTsKLX0KLQotLyogICAgICBUbyBnZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgSS9PIHBlcmZvcm1hbmNlLAotICogICAgICBtZWFzdXJlIHRoZSBkdXJhdGlvbiBvZiB0aGUgaW5iKCkgZnVuY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIHRpbWVfaW5iKHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IHQwLCB0MTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXM7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjYWxpYnJfbG9jaywgZmxhZ3MpOwotCXQwID0gc2hvcnRfZnRhcGVfdGltZXN0YW1wKCk7Ci0JZm9yIChpID0gMDsgaSA8IDEwMDA7ICsraSkgewotCQlzdGF0dXMgPSBpbmIoZmRjLm1zcik7Ci0JfQotCXQxID0gc2hvcnRfZnRhcGVfdGltZXN0YW1wKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FsaWJyX2xvY2ssIGZsYWdzKTsKLQlUUkFDRShmdF90X2luZm8sICJpbmIoKSBkdXJhdGlvbjogJWQgbnNlYyIsIGZ0YXBlX3RpbWVkaWZmKHQwLCB0MSkpOwotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfY2xvY2sodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKQotCXBzX3Blcl9jeWNsZSA9IDEwMDAwMDAwMDBVTCAvIGNwdV9raHo7Ci0jZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykKLQlleHRlcm4gc3RydWN0IGh3cnBiX3N0cnVjdCAqaHdycGI7Ci0JcHNfcGVyX2N5Y2xlID0gKDEwMDAqMTAwMCoxMDAwKjEwMDBVTCkgLyBod3JwYi0+Y3ljbGVfZnJlcTsKLSNlbmRpZgotCVRSQUNFX0VYSVQ7Ci19Ci0KLS8qCi0gKiAgICAgIElucHV0OiAgZnVuY3Rpb24gdGFraW5nIGludCBjb3VudCBhcyBwYXJhbWV0ZXIuCi0gKiAgICAgICAgICAgICAgcG9pbnRlcnMgdG8gY2FsY3VsYXRlZCBjYWxpYnJhdGlvbiB2YXJpYWJsZXMuCi0gKi8KLXZvaWQgZnRhcGVfY2FsaWJyYXRlKGNoYXIgKm5hbWUsCi0JCSAgICB2b2lkICgqZnVuKSAodW5zaWduZWQgaW50KSwgCi0JCSAgICB1bnNpZ25lZCBpbnQgKmNhbGlicl9jb3VudCwgCi0JCSAgICB1bnNpZ25lZCBpbnQgKmNhbGlicl90aW1lKQotewotCXN0YXRpYyBpbnQgZmlyc3RfdGltZSA9IDE7Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IHRjID0gMDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0JdW5zaWduZWQgaW50IHRpbWU7Ci0jaWYgZGVmaW5lZChfX2kzODZfXykKLQl1bnNpZ25lZCBpbnQgb2xkX3RjID0gMDsKLQl1bnNpZ25lZCBpbnQgb2xkX2NvdW50ID0gMTsKLQl1bnNpZ25lZCBpbnQgb2xkX3RpbWUgPSAxOwotI2VuZGlmCi0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlpZiAoZmlyc3RfdGltZSkgeyAgICAgICAgICAgICAvKiBnZXQgaWRlYSBvZiBJL08gcGVyZm9ybWFuY2UgKi8KLQkJaW5pdF9jbG9jaygpOwotCQl0aW1lX2luYigpOwotCQlmaXJzdF90aW1lID0gMDsKLQl9Ci0JLyogICAgdmFsdWUgb2YgdGltZW91dCBtdXN0IGJlIHNldCBzbyB0aGF0IG9uIHZlcnkgc2xvdyBzeXN0ZW1zCi0JICogICAgaXQgd2lsbCBnaXZlIGEgdGltZSBsZXNzIHRoYW4gb25lIGppZmZ5LCBhbmQgb24KLQkgKiAgICB2ZXJ5IGZhc3Qgc3lzdGVtcyBpdCdsbCBnaXZlIHJlYXNvbmFibGUgcHJlY2lzaW9uLgotCSAqLwotCi0JY291bnQgPSA0MDsKLQlmb3IgKGkgPSAwOyBpIDwgMTU7ICsraSkgewotCQl1bnNpZ25lZCBpbnQgdDA7Ci0JCXVuc2lnbmVkIGludCB0MTsKLQkJdW5zaWduZWQgaW50IG9uY2U7Ci0JCXVuc2lnbmVkIGludCBtdWx0aXBsZTsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkqY2FsaWJyX2NvdW50ID0KLQkJKmNhbGlicl90aW1lID0gY291bnQ7CS8qIHNldCBUQyB0byAxICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYWxpYnJfbG9jaywgZmxhZ3MpOwotCQlmdW4oMCk7CQkvKiBkdW1teSwgZ2V0IGNvZGUgaW50byBjYWNoZSAqLwotCQl0MCA9IHNob3J0X2Z0YXBlX3RpbWVzdGFtcCgpOwotCQlmdW4oMCk7CQkvKiBvdmVyaGVhZCArIG9uZSB0ZXN0ICovCi0JCXQxID0gc2hvcnRfZnRhcGVfdGltZXN0YW1wKCk7Ci0JCW9uY2UgPSBkaWZmKHQwLCB0MSk7Ci0JCXQwID0gc2hvcnRfZnRhcGVfdGltZXN0YW1wKCk7Ci0JCWZ1bihjb3VudCk7CQkvKiBvdmVyaGVhZCArIGNvdW50IHRlc3RzICovCi0JCXQxID0gc2hvcnRfZnRhcGVfdGltZXN0YW1wKCk7Ci0JCW11bHRpcGxlID0gZGlmZih0MCwgdDEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYWxpYnJfbG9jaywgZmxhZ3MpOwotCQl0aW1lID0gZnRhcGVfdGltZWRpZmYoMCwgbXVsdGlwbGUgLSBvbmNlKTsKLQkJdGMgPSAoMTAwMCAqIHRpbWUpIC8gKGNvdW50IC0gMSk7Ci0JCVRSQUNFKGZ0X3RfYW55LCAib25jZTolM2QgdXMsJTZkIHRpbWVzOiU2ZCB1cywgVEM6JTVkIG5zIiwKLQkJCXVzZWNzKG9uY2UpLCBjb3VudCAtIDEsIHVzZWNzKG11bHRpcGxlKSwgdGMpOwotI2lmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCi0JCS8qCi0JCSAqIEluY3JlYXNlIHRoZSBjYWxpYnJhdGlvbiBjb3VudCBleHBvbmVudGlhbGx5IHVudGlsIHRoZQotCQkgKiBjYWxpYnJhdGlvbiB0aW1lIGV4Y2VlZHMgMTAwIG1zLgotCQkgKi8KLQkJaWYgKHRpbWUgPj0gMTAwKjEwMDApIHsKLQkJCWJyZWFrOwotCQl9Ci0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotCQkvKgotCQkgKiBpbmNyZWFzZSB0aGUgY291bnQgdW50aWwgdGhlIHJlc3VsdGluZyB0aW1lIG5lYXJzIDIvSFosCi0JCSAqIHRoZW4gdGhlIHRjIHdpbGwgZHJvcCBzaGFycGx5IGJlY2F1c2Ugd2UgbG9zZSBMQVRDSCBjb3VudHMuCi0JCSAqLwotCQlpZiAodGMgPD0gb2xkX3RjIC8gMikgewotCQkJdGltZSA9IG9sZF90aW1lOwotCQkJY291bnQgPSBvbGRfY291bnQ7Ci0JCQlicmVhazsKLQkJfQotCQlvbGRfdGMgPSB0YzsKLQkJb2xkX2NvdW50ID0gY291bnQ7Ci0JCW9sZF90aW1lID0gdGltZTsKLSNlbmRpZgotCQljb3VudCAqPSAyOwotCX0KLQkqY2FsaWJyX2NvdW50ID0gY291bnQgLSAxOwotCSpjYWxpYnJfdGltZSAgPSB0aW1lOwotCVRSQUNFKGZ0X3RfaW5mbywgIlRDIGZvciBgJXMoKScgPSAlZCBuc2VjIChhdCAlZCBjb3VudHMpIiwKLQkgICAgIG5hbWUsICgxMDAwICogKmNhbGlicl90aW1lKSAvICpjYWxpYnJfY291bnQsICpjYWxpYnJfY291bnQpOwotCVRSQUNFX0VYSVQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtY2FsaWJyLmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtY2FsaWJyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjN2U3NTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWNhbGlici5oCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotI2lmbmRlZiBfRlRBUEVfQ0FMSUJSX0gKLSNkZWZpbmUgX0ZUQVBFX0NBTElCUl9ICi0KLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5My0xOTk2IEJhcyBMYWFyaG92ZW4uCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWNhbGlici5oLHYgJAotICogJFJldmlzaW9uOiAxLjEgJAotICogJERhdGU6IDE5OTcvMDkvMTkgMDk6MDU6MjYgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZ3AgY2FsaWJyYXRpb24gcm91dGluZSBmb3IKLSAqICAgICAgaGFyZHdhcmUgZGVwZW5kZW50IHRpbWVvdXQgZnVuY3Rpb25zLgotICovCi0KLWV4dGVybiB2b2lkIGZ0YXBlX2NhbGlicmF0ZShjaGFyICpuYW1lLAotCQkJICAgIHZvaWQgKCpmdW4pICh1bnNpZ25lZCBpbnQpLAotCQkJICAgIHVuc2lnbmVkIGludCAqY2FsaWJyX2NvdW50LAotCQkJICAgIHVuc2lnbmVkIGludCAqY2FsaWJyX3RpbWUpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBmdGFwZV90aW1lc3RhbXAodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IGZ0YXBlX3RpbWVkaWZmKHVuc2lnbmVkIGludCB0MCwgdW5zaWduZWQgaW50IHQxKTsKLQotI2VuZGlmIC8qIF9GVEFQRV9DQUxJQlJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWN0bC5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWN0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDdjMWNlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1jdGwuYworKysgL2Rldi9udWxsCkBAIC0xLDg5NiArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgICAgICAgICAgIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWN0bC5jLHYgJAotICogJFJldmlzaW9uOiAxLjQgJAotICogJERhdGU6IDE5OTcvMTEvMTEgMTQ6Mzc6NDQgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBub24tcmVhZC93cml0ZSBmdGFwZSBmdW5jdGlvbnMgZm9yIHRoZQotICogICAgICBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciAiZnRhcGUiIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvcWljMTE3Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotLyogZWFzZSBwb3J0aW5nIGJldHdlZW4gcHJlLTIuNC54IGFuZCBsYXRlciBrZXJuZWxzICovCi0jZGVmaW5lIHZtYV9nZXRfcGdvZmYodikgICAgICAoKHYpLT52bV9wZ29mZikKLQotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1pby5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXdyaXRlLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcmVhZC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtYnNtLmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLWZ0YXBlX2luZm8gZnRhcGVfc3RhdHVzID0gewotLyogIHZlbmRvciBpbmZvcm1hdGlvbiAqLwotCXsgMCwgfSwgICAgIC8qIGRyaXZlIHR5cGUgKi8KLS8qICBkYXRhIHJhdGVzICovCi0JNTAwLCAgICAgICAgLyogdXNlZCBkYXRhIHJhdGUgKi8KLQk1MDAsICAgICAgICAvKiBkcml2ZSBtYXggcmF0ZSAqLwotCTUwMCwgICAgICAgIC8qIGZkYyBtYXggcmF0ZSAgICovCi0vKiAgZHJpdmUgc2VsZWN0aW9uLCBlaXRoZXIgRlRBUEVfU0VMX0EvQi9DL0QgKi8KLQktMSwgICAgIC8qIGRyaXZlIHNlbGVjdGlvbiAqLwotLyogIGZsYWdzIHNldCBhZnRlciBkZWNvZGUgdGhlIGRyaXZlIGFuZCB0YXBlIHN0YXR1cyAgICovCi0JMCwgICAgICAgICAgLyogZm9ybWF0dGVkICovCi0JMSwgICAgICAgICAgLyogbm8gdGFwZSAqLwotCTEsICAgICAgICAgIC8qIHdyaXRlIHByb3RlY3RlZCAqLwotCTEsICAgICAgICAgIC8qIG5ldyB0YXBlICovCi0vKiAgdmFsdWVzIG9mIGxhc3QgcXVlcmllZCBkcml2ZS90YXBlIHN0YXR1cyBhbmQgZXJyb3IgKi8KLQl7ezAsfX0sICAgICAvKiBsYXN0IGVycm9yIGNvZGUgKi8KLQl7ezAsfX0sICAgICAvKiBkcml2ZSBzdGF0dXMsIGNvbmZpZ3VyYXRpb24sIHRhcGUgc3RhdHVzICovCi0vKiAgY2FydHJpZGdlIGdlb21ldHJ5ICovCi0gICAgICAgIDIwLCAgICAgICAgIC8qIHRyYWNrc19wZXJfdGFwZSAqLwotICAgICAgICAxMDIsICAgICAgICAvKiBzZWdtZW50c19wZXJfdHJhY2sgKi8KLS8qICBsb2NhdGlvbiBvZiBoZWFkZXIgc2VnbWVudHMsIGV0Yy4gKi8KLQktMSwgICAgIC8qIHVzZWRfaGVhZGVyX3NlZ21lbnQgKi8KLQktMSwgICAgIC8qIGhlYWRlcl9zZWdtZW50XzEgKi8KLQktMSwgICAgIC8qIGhlYWRlcl9zZWdtZW50XzIgKi8KLQktMSwgICAgIC8qIGZpcnN0X2RhdGFfc2VnbWVudCAqLwotICAgICAgICAtMSwgICAgIC8qIGxhc3RfZGF0YV9zZWdtZW50ICovCi0vKiAgdGhlIGZvcm1hdCBjb2RlIGFzIHN0b3JlZCBpbiB0aGUgaGVhZGVyIHNlZ21lbnQgICovCi0JZm10X25vcm1hbCwgLyogZm9ybWF0IGNvZGUgKi8KLS8qICB0aGUgZGVmYXVsdCBmb3IgdGhlIHFpYyBzdGQ6IHVua25vd24gKi8KLQktMSwKLS8qICBpcyB0YXBlIHJ1bm5pbmc/ICovCi0JaWRsZSwgICAgICAgLyogcnVubmVyX3N0YXRlICovCi0vKiAgaXMgdGFwZSByZWFkaW5nL3dyaXRpbmcvdmVyaWZ5aW5nL2Zvcm1hdHRpbmcvZGVsZXRpbmcgKi8KLQlpZGxlLCAgICAgICAvKiBkcml2ZXIgc3RhdGUgKi8KLS8qICBmbGFncyBmYXRhbCBoYXJkd2FyZSBlcnJvciAqLwotCTEsICAgICAgICAgIC8qIGZhaWx1cmUgKi8KLS8qICBoaXN0b3J5IHJlY29yZCAqLwotCXsgMCwgfSAgICAgIC8qIGhpc3RvcnkgcmVjb3JkICovCi19OwotCQotaW50IGZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkICAgICA9IDEwMjA7Ci1pbnQgZnRhcGVfc2VnbWVudHNfcGVyX2N5bGluZGVyID0gNDsKLWludCBmdGFwZV9pbml0X2RyaXZlX25lZWRlZCA9IDE7IC8qIG5lZWQgdG8gYmUgZ2xvYmFsIGZvciBmdGFwZV9yZXNldF9kcml2ZSgpCi0JCQkJICAqIGluIGZ0YXBlLWlvLmMKLQkJCQkgICovCi0KLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotc3RhdGljIGNvbnN0IHZlbmRvcl9zdHJ1Y3QgdmVuZG9yc1tdID0gUUlDMTE3X1ZFTkRPUlM7Ci1zdGF0aWMgY29uc3Qgd2FrZXVwX21ldGhvZCBtZXRob2RzW10gPSBXQUtFVVBfTUVUSE9EUzsKLQotY29uc3QgZnRhcGVfaW5mbyAqZnRhcGVfZ2V0X3N0YXR1cyh2b2lkKQotewotI2lmIGRlZmluZWQoU1RBVFVTX1BBUkFOT1lBKQotCXN0YXRpYyBmdGFwZV9pbmZvIGdldF9zdGF0dXM7Ci0KLQlnZXRfc3RhdHVzID0gZnRhcGVfc3RhdHVzOwotCXJldHVybiAmZ2V0X3N0YXR1czsKLSNlbHNlCi0JcmV0dXJuICZmdGFwZV9zdGF0dXM7IC8qICBtYXliZSByZXR1cm4gb25seSBhIGNvcHkgb2YgaXQgdG8gYXNzdXJlIAotCQkJICAgICAgICogIHJlYWQgb25seSBhY2Nlc3MKLQkJCSAgICAgICAqLwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgZnRhcGVfbm90X29wZXJhdGlvbmFsKGludCBzdGF0dXMpCi17Ci0JLyogcmV0dXJuIHRydWUgaWYgc3RhdHVzIGluZGljYXRlcyB0YXBlIGNhbiBub3QgYmUgdXNlZC4KLQkgKi8KLQlyZXR1cm4gKChzdGF0dXMgXiBRSUNfU1RBVFVTX0NBUlRSSURHRV9QUkVTRU5UKSAmCi0JCShRSUNfU1RBVFVTX0VSUk9SIHwKLQkJIFFJQ19TVEFUVVNfQ0FSVFJJREdFX1BSRVNFTlQgfAotCQkgUUlDX1NUQVRVU19ORVdfQ0FSVFJJREdFKSk7Ci19Ci0KLWludCBmdGFwZV9zZWVrX3RvX2VvdCh2b2lkKQotewotCWludCBzdGF0dXM7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCVRSQUNFX0NBVENIKGZ0YXBlX3JlYWR5X3dhaXQoZnRhcGVfdGltZW91dC5wYXVzZSwgJnN0YXR1cyksKTsKLQl3aGlsZSAoKHN0YXR1cyAmIFFJQ19TVEFUVVNfQVRfRU9UKSA9PSAwKSB7Ci0JCWlmIChmdGFwZV9ub3Rfb3BlcmF0aW9uYWwoc3RhdHVzKSkgewotCQkJVFJBQ0VfRVhJVCAtRUlPOwotCQl9Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX2NvbW1hbmRfd2FpdChRSUNfUEhZU0lDQUxfRk9SV0FSRCwKLQkJCQkJICAgICAgIGZ0YXBlX3RpbWVvdXQucmV3aW5kLCZzdGF0dXMpLCk7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotaW50IGZ0YXBlX3NlZWtfdG9fYm90KHZvaWQpCi17Ci0JaW50IHN0YXR1czsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnBhdXNlLCAmc3RhdHVzKSwpOwotCXdoaWxlICgoc3RhdHVzICYgUUlDX1NUQVRVU19BVF9CT1QpID09IDApIHsKLQkJaWYgKGZ0YXBlX25vdF9vcGVyYXRpb25hbChzdGF0dXMpKSB7Ci0JCQlUUkFDRV9FWElUIC1FSU87Ci0JCX0KLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfY29tbWFuZF93YWl0KFFJQ19QSFlTSUNBTF9SRVZFUlNFLAotCQkJCQkgICAgICAgZnRhcGVfdGltZW91dC5yZXdpbmQsJnN0YXR1cyksKTsKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1zdGF0aWMgaW50IGZ0YXBlX25ld19jYXJ0cmlkZ2Uodm9pZCkKLXsKLQlmdF9sb2NhdGlvbi50cmFjayA9IC0xOyAvKiBmb3JjZSBzZWVrIG9uIGZpcnN0IGFjY2VzcyAqLwotCWZ0YXBlX3phcF9yZWFkX2J1ZmZlcnMoKTsKLQlmdGFwZV96YXBfd3JpdGVfYnVmZmVycygpOwotCXJldHVybiAwOwotfQotCi1pbnQgZnRhcGVfYWJvcnRfb3BlcmF0aW9uKHZvaWQpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IHN0YXR1czsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IHJ1bm5pbmcpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImFib3J0aW5nIHJ1bm5lciwgd2FpdGluZyIpOwotCQkKLQkJZnRfcnVubmVyX3N0YXR1cyA9IGRvX2Fib3J0OwotCQkvKiBzZXQgdGltZW91dCBzbyB0aGF0IHRoZSB0YXBlIHdpbGwgcnVuIHRvIGxvZ2ljYWwgRU9UCi0JCSAqIGlmIHdlIG1pc3NlZCB0aGUgbGFzdCBzZWN0b3IgYW5kIHRoZXJlIGFyZSBubyBxdWV1ZSBwdWxzZXMuCi0JCSAqLwotCQlyZXN1bHQgPSBmdGFwZV9kdW1iX3N0b3AoKTsKLQl9Ci0JaWYgKGZ0X3J1bm5lcl9zdGF0dXMgIT0gaWRsZSkgewotCQlpZiAoZnRfcnVubmVyX3N0YXR1cyA9PSBkb19hYm9ydCkgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImZvcmNpbmcgcnVubmVyIGFib3J0Iik7Ci0JCX0KLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInN0b3BwaW5nIHRhcGUiKTsKLQkJcmVzdWx0ID0gZnRhcGVfc3RvcF90YXBlKCZzdGF0dXMpOwotCQlmdF9sb2NhdGlvbi5rbm93biA9IDA7Ci0JCWZ0X3J1bm5lcl9zdGF0dXMgID0gaWRsZTsKLQl9Ci0JZnRhcGVfcmVzZXRfYnVmZmVyKCk7Ci0JZnRhcGVfemFwX3JlYWRfYnVmZmVycygpOwotCWZ0YXBlX3NldF9zdGF0ZShpZGxlKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBsb29rdXBfdmVuZG9yX2lkKHVuc2lnbmVkIGludCB2ZW5kb3JfaWQpCi17Ci0JaW50IGkgPSAwOwotCi0Jd2hpbGUgKHZlbmRvcnNbaV0udmVuZG9yX2lkICE9IHZlbmRvcl9pZCkgewotCQlpZiAoKytpID49IE5SX0lURU1TKHZlbmRvcnMpKSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ0YXBlX2RldGFjaF9kcml2ZSh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlUUkFDRShmdF90X2Zsb3csICJkaXNhYmxpbmcgdGFwZSBkcml2ZSBhbmQgZmRjIik7Ci0JZnRhcGVfcHV0X2RyaXZlX3RvX3NsZWVwKGZ0X2RyaXZlX3R5cGUud2FrZV91cCk7Ci0JZmRjX2NhdGNoX3N0cmF5X2ludGVycnVwdHMoMSk7CS8qIG9uZSBhbHdheXMgY29tZXMgKi8KLQlmZGNfZGlzYWJsZSgpOwotCWZkY19yZWxlYXNlX2lycV9hbmRfZG1hKCk7Ci0JZmRjX3JlbGVhc2VfcmVnaW9ucygpOwotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsZWFyX2hpc3Rvcnkodm9pZCkKLXsKLQlmdF9oaXN0b3J5LnVzZWQgPSAwOwotCWZ0X2hpc3RvcnkuaWRfYW1fZXJyb3JzID0KLQkJZnRfaGlzdG9yeS5pZF9jcmNfZXJyb3JzID0KLQkJZnRfaGlzdG9yeS5kYXRhX2FtX2Vycm9ycyA9Ci0JCWZ0X2hpc3RvcnkuZGF0YV9jcmNfZXJyb3JzID0KLQkJZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9ycyA9Ci0JCWZ0X2hpc3Rvcnkubm9fZGF0YV9lcnJvcnMgPQotCQlmdF9oaXN0b3J5LnJldHJpZXMgPQotCQlmdF9oaXN0b3J5LmNyY19lcnJvcnMgPQotCQlmdF9oaXN0b3J5LmNyY19mYWlsdXJlcyA9Ci0JCWZ0X2hpc3RvcnkuZWNjX2ZhaWx1cmVzID0KLQkJZnRfaGlzdG9yeS5jb3JyZWN0ZWQgPQotCQlmdF9oaXN0b3J5LmRlZmVjdHMgPQotCQlmdF9oaXN0b3J5LnJld2luZHMgPSAwOwotfQotCi1zdGF0aWMgaW50IGZ0YXBlX2FjdGl2YXRlX2RyaXZlKHZlbmRvcl9zdHJ1Y3QgKiBkcml2ZV90eXBlKQotewotCWludCByZXN1bHQgPSAwOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JLyogSWYgd2UgYWxyZWFkeSBrbm93IHRoZSBkcml2ZSB0eXBlLCB3YWtlIGl0IHVwLgotCSAqIEVsc2UgdHJ5IHRvIGZpbmQgb3V0IHdoYXQga2luZCBvZiBkcml2ZSBpcyBhdHRhY2hlZC4KLQkgKi8KLQlpZiAoZHJpdmVfdHlwZS0+d2FrZV91cCAhPSB1bmtub3duX3dha2VfdXApIHsKLQkJVFJBQ0UoZnRfdF9mbG93LCAiZW5hYmxpbmcgdGFwZSBkcml2ZSBhbmQgZmRjIik7Ci0JCXJlc3VsdCA9IGZ0YXBlX3dha2V1cF9kcml2ZShkcml2ZV90eXBlLT53YWtlX3VwKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCVRSQUNFKGZ0X3RfZXJyLCAia25vd24gd2FrZXVwIG1ldGhvZCBmYWlsZWQiKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXdha2VfdXBfdHlwZXMgbWV0aG9kOwotCQljb25zdCBmdF90cmFjZV90IG9sZF90cmFjaW5nID0gVFJBQ0VfTEVWRUw7Ci0JCWlmIChUUkFDRV9MRVZFTCA8IGZ0X3RfZmxvdykgewotCQkJU0VUX1RSQUNFX0xFVkVMKGZ0X3RfYnVnKTsKLQkJfQotCi0JCS8qICBUcnkgdG8gYXdha2VuIHRoZSBkcml2ZSB1c2luZyBhbGwga25vd24gbWV0aG9kcy4KLQkJICogIExvd2VyIHRyYWNpbmcgZm9yIGEgd2hpbGUuCi0JCSAqLwotCQlmb3IgKG1ldGhvZD1ub193YWtlX3VwOyBtZXRob2QgPCBOUl9JVEVNUyhtZXRob2RzKTsgKyttZXRob2QpIHsKLQkJCWRyaXZlX3R5cGUtPndha2VfdXAgPSBtZXRob2Q7Ci0jaWZkZWYgQ09ORklHX0ZUX1RXT19EUklWRVMKLQkJCS8qICBUZXN0IHNldHVwIGZvciBkdWFsIGRyaXZlIGNvbmZpZ3VyYXRpb24uCi0JCQkgKiAgL2Rldi9yZnQyIHVzZXMgbW91bnRhaW4gd2FrZXVwCi0JCQkgKiAgL2Rldi9yZnQzIHVzZXMgY29sb3JhZG8gd2FrZXVwCi0JCQkgKiAgT3RoZXIgc3lzdGVtcyB3aWxsIHVzZSB0aGUgbm9ybWFsIHNjaGVtZS4KLQkJCSAqLwotCQkJaWYgKChmdF9kcml2ZV9zZWwgPCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAotCQkJICAgIChmdF9kcml2ZV9zZWwgPT0gMiAmJiBtZXRob2QgPT0gRlRfV0FLRV9VUF8xKSB8fAotCQkJICAgIChmdF9kcml2ZV9zZWwgPT0gMyAmJiBtZXRob2QgPT0gRlRfV0FLRV9VUF8yKSkgewotCQkJCXJlc3VsdD1mdGFwZV93YWtldXBfZHJpdmUoZHJpdmVfdHlwZS0+d2FrZV91cCk7Ci0JCQl9IGVsc2UgewotCQkJCXJlc3VsdCA9IC1FSU87Ci0JCQl9Ci0jZWxzZQotCQkJcmVzdWx0ID0gZnRhcGVfd2FrZXVwX2RyaXZlKGRyaXZlX3R5cGUtPndha2VfdXApOwotI2VuZGlmCi0JCQlpZiAocmVzdWx0ID49IDApIHsKLQkJCQlUUkFDRShmdF90X3dhcm4sICJkcml2ZSB3YWtldXAgbWV0aG9kOiAlcyIsCi0JCQkJICAgICAgbWV0aG9kc1tkcml2ZV90eXBlLT53YWtlX3VwXS5uYW1lKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlTRVRfVFJBQ0VfTEVWRUwob2xkX3RyYWNpbmcpOwotCi0JCWlmIChtZXRob2QgPj0gTlJfSVRFTVMobWV0aG9kcykpIHsKLQkJCS8qIG5vIHJlc3BvbnNlIGF0IGFsbCwgY2Fubm90IG9wZW4gdGhpcyBkcml2ZSAqLwotCQkJZHJpdmVfdHlwZS0+d2FrZV91cCA9IHVua25vd25fd2FrZV91cDsKLQkJCVRSQUNFKGZ0X3RfZXJyLCAibm8gdGFwZSBkcml2ZSBmb3VuZCAhIik7Ci0JCQlyZXN1bHQgPSAtRU5PREVWOwotCQl9Ci0JfQotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGZ0YXBlX2dldF9kcml2ZV9zdGF0dXModm9pZCkKLXsKLQlpbnQgcmVzdWx0OwotCWludCBzdGF0dXM7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlmdF9ub190YXBlID0gZnRfd3JpdGVfcHJvdGVjdGVkID0gMDsKLQkvKiAgICBUYXBlIGRyaXZlIGlzIGFjdGl2YXRlZCBub3cuCi0JICogICAgRmlyc3QgY2xlYXIgZXJyb3Igc3RhdHVzIGlmIHByZXNlbnQuCi0JICovCi0JZG8gewotCQlyZXN1bHQgPSBmdGFwZV9yZWFkeV93YWl0KGZ0YXBlX3RpbWVvdXQucmVzZXQsICZzdGF0dXMpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJaWYgKHJlc3VsdCA9PSAtRVRJTUUpIHsKLQkJCQlUUkFDRShmdF90X2VyciwgImZ0YXBlX3JlYWR5X3dhaXQgdGltZW91dCIpOwotCQkJfSBlbHNlIGlmIChyZXN1bHQgPT0gLUVJTlRSKSB7Ci0JCQkJVFJBQ0UoZnRfdF9lcnIsICJmdGFwZV9yZWFkeV93YWl0IGFib3J0ZWQiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJVFJBQ0UoZnRfdF9lcnIsICJmdGFwZV9yZWFkeV93YWl0IGZhaWxlZCIpOwotCQkJfQotCQkJVFJBQ0VfRVhJVCAtRUlPOwotCQl9Ci0JCS8qICBDbGVhciBlcnJvciBjb25kaXRpb24gKGRyaXZlIGlzIHJlYWR5ICEpCi0JCSAqLwotCQlpZiAoc3RhdHVzICYgUUlDX1NUQVRVU19FUlJPUikgewotCQkJdW5zaWduZWQgaW50IGVycm9yOwotCQkJcWljMTE3X2NtZF90IGNvbW1hbmQ7Ci0KLQkJCVRSQUNFKGZ0X3RfZXJyLCAiZXJyb3Igc3RhdHVzIHNldCIpOwotCQkJcmVzdWx0ID0gZnRhcGVfcmVwb3J0X2Vycm9yKCZlcnJvciwgJmNvbW1hbmQsIDEpOwotCQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCQlUUkFDRShmdF90X2VyciwKLQkJCQkgICAgICAicmVwb3J0X2Vycm9yX2NvZGUgZmFpbGVkOiAlZCIsIHJlc3VsdCk7Ci0JCQkJLyogaG9wZSBpdCdzIHdvcmtpbmcgbmV4dCB0aW1lICovCi0JCQkJZnRhcGVfcmVzZXRfZHJpdmUoKTsKLQkJCQlUUkFDRV9FWElUIC1FSU87Ci0JCQl9IGVsc2UgaWYgKGVycm9yICE9IDApIHsKLQkJCQlUUkFDRShmdF90X25vaXNlLCAiZXJyb3IgY29kZSAgIDogJWQiLCBlcnJvcik7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImVycm9yIGNvbW1hbmQ6ICVkIiwgY29tbWFuZCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0YXR1cyAmIFFJQ19TVEFUVVNfTkVXX0NBUlRSSURHRSkgewotCQkJdW5zaWduZWQgaW50IGVycm9yOwotCQkJcWljMTE3X2NtZF90IGNvbW1hbmQ7Ci0JCQljb25zdCBmdF90cmFjZV90IG9sZF90cmFjaW5nID0gVFJBQ0VfTEVWRUw7Ci0JCQlTRVRfVFJBQ0VfTEVWRUwoZnRfdF9idWcpOwotCi0JCQkvKiAgVW5kb2N1bWVudGVkIGZlYXR1cmU6IE11c3QgY2xlYXIgKG5vdCBwcmVzZW50ISkKLQkJCSAqICBlcnJvciBoZXJlIG9yIHdlJ2xsIGZhaWwgbGF0ZXIuCi0JCQkgKi8KLQkJCWZ0YXBlX3JlcG9ydF9lcnJvcigmZXJyb3IsICZjb21tYW5kLCAxKTsKLQotCQkJU0VUX1RSQUNFX0xFVkVMKG9sZF90cmFjaW5nKTsKLQkJCVRSQUNFKGZ0X3RfaW5mbywgInN0YXR1czogbmV3IGNhcnRyaWRnZSIpOwotCQkJZnRfbmV3X3RhcGUgPSAxOwotCQl9IGVsc2UgewotCQkJZnRfbmV3X3RhcGUgPSAwOwotCQl9Ci0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQl9IHdoaWxlIChzdGF0dXMgJiBRSUNfU1RBVFVTX0VSUk9SKTsKLQkKLQlmdF9ub190YXBlID0gIShzdGF0dXMgJiBRSUNfU1RBVFVTX0NBUlRSSURHRV9QUkVTRU5UKTsKLQlmdF93cml0ZV9wcm90ZWN0ZWQgPSAoc3RhdHVzICYgUUlDX1NUQVRVU19XUklURV9QUk9URUNUKSAhPSAwOwotCWlmIChmdF9ub190YXBlKSB7Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgIm5vIGNhcnRyaWRnZSBwcmVzZW50Iik7Ci0JfSBlbHNlIHsKLQkJaWYgKGZ0X3dyaXRlX3Byb3RlY3RlZCkgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgIldyaXRlIHByb3RlY3RlZCBjYXJ0cmlkZ2UiKTsKLQkJfQotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ0YXBlX2xvZ192ZW5kb3JfaWQodm9pZCkKLXsKLQlpbnQgdmVuZG9yX2luZGV4OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JZnRhcGVfcmVwb3J0X3ZlbmRvcl9pZCgmZnRfZHJpdmVfdHlwZS52ZW5kb3JfaWQpOwotCXZlbmRvcl9pbmRleCA9IGxvb2t1cF92ZW5kb3JfaWQoZnRfZHJpdmVfdHlwZS52ZW5kb3JfaWQpOwotCWlmIChmdF9kcml2ZV90eXBlLnZlbmRvcl9pZCA9PSBVTktOT1dOX1ZFTkRPUiAmJgotCSAgICBmdF9kcml2ZV90eXBlLndha2VfdXAgPT0gd2FrZV91cF9jb2xvcmFkbykgewotCQl2ZW5kb3JfaW5kZXggPSAwOwotCQkvKiBoYWNrIHRvIGdldCByaWQgb2YgYWxsIHRoaXMgbWFpbCAqLwotCQlmdF9kcml2ZV90eXBlLnZlbmRvcl9pZCA9IDA7Ci0JfQotCWlmICh2ZW5kb3JfaW5kZXggPCAwKSB7Ci0JCS8qIFVua25vd24gdmVuZG9yIGlkLCBmaXJzdCB0aW1lIG9wZW5pbmcgZGV2aWNlLiAgVGhlCi0JCSAqIGRyaXZlX3R5cGUgcmVtYWlucyBzZXQgdG8gdHlwZSBmb3VuZCBhdCB3YWtldXAKLQkJICogdGltZSwgdGhpcyB3aWxsIHByb2JhYmx5IGtlZXAgdGhlIGRyaXZlciBvcGVyYXRpbmcKLQkJICogZm9yIHRoaXMgbmV3IHZlbmRvci4gIAotCQkgKi8KLQkJVFJBQ0UoZnRfdF93YXJuLCAiXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiPT09PT09PT09PT09IHVua25vd24gdmVuZG9yIGlkID09PT09PT09PT09XG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiQSBuZXcsIHlldCB1bnN1cHBvcnRlZCB0YXBlIGRyaXZlIGlzIGZvdW5kXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiUGxlYXNlIHJlcG9ydCB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiIKLQkJICAgICAgS0VSTl9JTkZPICIgICBWZW5kb3IgaWQgICAgIDogMHglMDR4XG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiICAgV2FrZXVwIG1ldGhvZCA6ICVzXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiQW5kIGEgZGVzY3JpcHRpb24gb2YgeW91ciB0YXBlIGRyaXZlXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAidG8gIlRIRV9GVEFQRV9NQUlOVEFJTkVSIlxuIgotCQkgICAgICBLRVJOX0lORk8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIsCi0JCSAgICAgIGZ0X2RyaXZlX3R5cGUudmVuZG9yX2lkLAotCQkgICAgICBtZXRob2RzW2Z0X2RyaXZlX3R5cGUud2FrZV91cF0ubmFtZSk7Ci0JCWZ0X2RyaXZlX3R5cGUuc3BlZWQgPSAwOwkJLyogdW5rbm93biAqLwotCX0gZWxzZSB7Ci0JCWZ0X2RyaXZlX3R5cGUubmFtZSAgPSB2ZW5kb3JzW3ZlbmRvcl9pbmRleF0ubmFtZTsKLQkJZnRfZHJpdmVfdHlwZS5zcGVlZCA9IHZlbmRvcnNbdmVuZG9yX2luZGV4XS5zcGVlZDsKLQkJVFJBQ0UoZnRfdF9pbmZvLCAidGFwZSBkcml2ZSB0eXBlOiAlcyIsIGZ0X2RyaXZlX3R5cGUubmFtZSk7Ci0JCS8qIHNjYW4gYWxsIG1ldGhvZHMgZm9yIHRoaXMgdmVuZG9yX2lkIGluIHRhYmxlICovCi0JCXdoaWxlKGZ0X2RyaXZlX3R5cGUud2FrZV91cCAhPSB2ZW5kb3JzW3ZlbmRvcl9pbmRleF0ud2FrZV91cCkgewotCQkJaWYgKHZlbmRvcl9pbmRleCA8IE5SX0lURU1TKHZlbmRvcnMpIC0gMSAmJgotCQkJICAgIHZlbmRvcnNbdmVuZG9yX2luZGV4ICsgMV0udmVuZG9yX2lkIAotCQkJICAgID09IAotCQkJICAgIGZ0X2RyaXZlX3R5cGUudmVuZG9yX2lkKSB7Ci0JCQkJKyt2ZW5kb3JfaW5kZXg7Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChmdF9kcml2ZV90eXBlLndha2VfdXAgIT0gdmVuZG9yc1t2ZW5kb3JfaW5kZXhdLndha2VfdXApIHsKLQkJCVRSQUNFKGZ0X3Rfd2FybiwgIlxuIgotCQkgICAgIEtFUk5fSU5GTyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCi0JCSAgICAgS0VSTl9JTkZPICJ3YWtldXAgdHlwZSBtaXNtYXRjaDpcbiIKLQkJICAgICBLRVJOX0lORk8gImZvdW5kOiAlcywgZXhwZWN0ZWQ6ICVzXG4iCi0JCSAgICAgS0VSTl9JTkZPICJwbGVhc2UgcmVwb3J0IHRoaXMgdG8gIlRIRV9GVEFQRV9NQUlOVEFJTkVSIlxuIgotCQkgICAgIEtFUk5fSU5GTyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiwKLQkJCSAgICAgIG1ldGhvZHNbZnRfZHJpdmVfdHlwZS53YWtlX3VwXS5uYW1lLAotCQkJICAgICAgbWV0aG9kc1t2ZW5kb3JzW3ZlbmRvcl9pbmRleF0ud2FrZV91cF0ubmFtZSk7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotdm9pZCBmdGFwZV9jYWxjX3RpbWVvdXRzKHVuc2lnbmVkIGludCBxaWNfc3RkLAotCQkJIHVuc2lnbmVkIGludCBkYXRhX3JhdGUsCi0JCQkgdW5zaWduZWQgaW50IHRhcGVfbGVuKQotewotCWludCBzcGVlZDsJCS8qIGRlY2ktaXBzICEgKi8KLQlpbnQgZmZfc3BlZWQ7Ci0JaW50IGxlbmd0aDsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBlIHRyYW5zcG9ydCBzcGVlZAotCSAqICBkYXRhIHJhdGU6ICAgICAgICBRSUMtNDAgICBRSUMtODAgICBRSUMtMzAxMCBRSUMtMzAyMAotCSAqCi0JICogICAgMjUwIEticHMgICAgICAgIDI1IGlwcyAgICAgbi9hICAgICAgbi9hICAgICAgbi9hCi0JICogICAgNTAwIEticHMgICAgICAgIDUwIGlwcyAgIDM0IGlwcyAgIDIyLjYgaXBzICAgbi9hCi0JICogICAgICAxIE1icHMgICAgICAgICAgbi9hICAgIDY4IGlwcyAgIDQ1LjIgaXBzIDIyLjYgaXBzCi0JICogICAgICAyIE1icHMgICAgICAgICAgbi9hICAgICAgbi9hICAgICAgbi9hICAgIDQ1LjIgaXBzCi0JICoKLQkgKiAgZmFzdCB0YXBlIHRyYW5zcG9ydCBzcGVlZCBpcyBhdCBsZWFzdCA2OCBpcHMuCi0JICovCi0Jc3dpdGNoIChxaWNfc3RkKSB7Ci0JY2FzZSBRSUNfVEFQRV9RSUM0MDoKLQkJc3BlZWQgPSAoZGF0YV9yYXRlID09IDI1MCkgPyAyNTAgOiA1MDA7Ci0JCWJyZWFrOwotCWNhc2UgUUlDX1RBUEVfUUlDODA6Ci0JCXNwZWVkID0gKGRhdGFfcmF0ZSA9PSA1MDApID8gMzQwIDogNjgwOwotCQlicmVhazsKLQljYXNlIFFJQ19UQVBFX1FJQzMwMTA6Ci0JCXNwZWVkID0gKGRhdGFfcmF0ZSA9PSA1MDApID8gMjI2IDogNDUyOwotCQlicmVhazsKLQljYXNlIFFJQ19UQVBFX1FJQzMwMjA6Ci0JCXNwZWVkID0gKGRhdGFfcmF0ZSA9PSAxMDAwKSA/IDIyNiA6IDQ1MjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJVFJBQ0UoZnRfdF9idWcsICJVbmtub3duIHFpY19zdGQgKGJ1ZykgPyIpOwotCQlzcGVlZCA9IDUwMDsKLQkJYnJlYWs7Ci0JfQotCWlmIChmdF9kcml2ZV90eXBlLnNwZWVkID09IDApIHsKLQkJdW5zaWduZWQgbG9uZyB0MDsKLQkJc3RhdGljIGludCBkdCA9IDA7ICAgICAvKiBrZWVwIGdjYyBmcm9tIGNvbXBsYWluaW5nICovCi0JCXN0YXRpYyBpbnQgZmlyc3RfdGltZSA9IDE7Ci0KLQkJLyogIE1lYXN1cmUgdGhlIHRpbWUgaXQgdGFrZXMgdG8gd2luZCB0byBFT1QgYW5kIGJhY2sgdG8gQk9ULgotCQkgKiAgSWYgdGhlIHRhcGUgbGVuZ3RoIGlzIGtub3duLCBjYWxjdWxhdGUgdGhlIHJld2luZCBzcGVlZC4KLQkJICogIEVsc2Uga2VlcCB0aGUgdGltZSB2YWx1ZSBmb3IgY2FsY3VsYXRpb24gb2YgdGhlIHJld2luZAotCQkgKiAgc3BlZWQgbGF0ZXIgb24sIHdoZW4gdGhlIGxlbmd0aCBfaXNfIGtub3duLgotCQkgKiAgQXNrIGZvciBhIHJlcG9ydCBvbmx5IHdoZW4gbGVuZ3RoIGFuZCBzcGVlZCBhcmUgYm90aCBrbm93bi4KLQkJICovCi0JCWlmIChmaXJzdF90aW1lKSB7Ci0JCQlmdGFwZV9zZWVrX3RvX2JvdCgpOwotCQkJdDAgPSBqaWZmaWVzOwotCQkJZnRhcGVfc2Vla190b19lb3QoKTsKLQkJCWZ0YXBlX3NlZWtfdG9fYm90KCk7Ci0JCQlkdCA9IChpbnQpICgoKGppZmZpZXMgLSB0MCkgKiBGVF9VU1BUKSAvIDEwMDApOwotCQkJaWYgKGR0IDwgMSkgewotCQkJCWR0ID0gMTsJLyogcHJldmVudCBkaXYgYnkgemVybyBvbiBmYWlsdXJlcyAqLwotCQkJfQotCQkJZmlyc3RfdGltZSA9IDA7Ci0JCQlUUkFDRShmdF90X2luZm8sCi0JCQkgICAgICAidHJ5aW5nIHRvIGRldGVybWluZSBzZWVrIHRpbWVvdXQsIGdvdCAlZCBtc2VjIiwKLQkJCSAgICAgIGR0KTsKLQkJfQotCQlpZiAodGFwZV9sZW4gIT0gMCkgewotCQkJZnRfZHJpdmVfdHlwZS5zcGVlZCA9IAotCQkJCSgyICogMTIgKiB0YXBlX2xlbiAqIDEwMDApIC8gZHQ7Ci0JCQlUUkFDRShmdF90X3dhcm4sICJcbiIKLQkJICAgICBLRVJOX0lORk8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgotCQkgICAgIEtFUk5fSU5GTyAiZHJpdmUgdHlwZTogJXNcbiIKLQkJICAgICBLRVJOX0lORk8gImRlbHRhIHRpbWUgPSAlZCBtcywgbGVuZ3RoID0gJWQgZnRcbiIKLQkJICAgICBLRVJOX0lORk8gImhhcyBhIG1heGltdW0gdGFwZSBzcGVlZCBvZiAlZCBpcHNcbiIKLQkJICAgICBLRVJOX0lORk8gInBsZWFzZSByZXBvcnQgdGhpcyB0byAiVEhFX0ZUQVBFX01BSU5UQUlORVIiXG4iCi0JCSAgICAgS0VSTl9JTkZPICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLAotCQkJICAgICAgZnRfZHJpdmVfdHlwZS5uYW1lLCBkdCwgdGFwZV9sZW4sIAotCQkJICAgICAgZnRfZHJpdmVfdHlwZS5zcGVlZCk7Ci0JCX0KLQl9Ci0JLyogIEhhbmRsZSB1bmtub3duIGxlbmd0aCB0YXBlcyBhcyB2ZXJ5IGxvbmcgb25lcy4gV2UnbGwKLQkgKiAgZGV0ZXJtaW5lIHRoZSBhY3R1YWwgbGVuZ3RoIGZyb20gYSBoZWFkZXIgc2VnbWVudCBsYXRlci4KLQkgKiAgVGhpcyBpcyBub3JtYWwgZm9yIGFsbCBtb2Rlcm4gKFdpZGUsVFIxLzIvMykgZm9ybWF0cy4KLQkgKi8KLQlpZiAodGFwZV9sZW4gPD0gMCkgewotCQlUUkFDRShmdF90X25vaXNlLAotCQkgICAgICAiVW5rbm93biB0YXBlIGxlbmd0aCwgdXNpbmcgbWF4aW1hbCB0aW1lb3V0cyIpOwotCQlsZW5ndGggPSBRSUNfVE9QX1RBUEVfTEVOOwkvKiB1c2Ugd29yc3QgY2FzZSB2YWx1ZXMgKi8KLQl9IGVsc2UgewotCQlsZW5ndGggPSB0YXBlX2xlbjsJCS8qIHVzZSBhY3R1YWwgdmFsdWVzICovCi0JfQotCWlmIChmdF9kcml2ZV90eXBlLnNwZWVkID09IDApIHsKLQkJZmZfc3BlZWQgPSBzcGVlZDsgCi0JfSBlbHNlIHsKLQkJZmZfc3BlZWQgPSBmdF9kcml2ZV90eXBlLnNwZWVkOwotCX0KLQkvKiAgdGltZSB0byBnbyBmcm9tIGJvdCB0byBlb3QgYXQgbm9ybWFsIHNwZWVkIChkYXRhIHJhdGUpOgotCSAqICB0aW1lID0gKDErZGVsdGEpICogbGVuZ3RoIChmdCkgKiAxMiAoaW5jaC9mdCkgLyBzcGVlZCAoaXBzKQotCSAqICBkZWx0YSA9IDEwICUgZm9yIHNlZWsgc3BlZWQsIDIwICUgZm9yIHJld2luZCBzcGVlZC4KLQkgKi8KLQlmdGFwZV90aW1lb3V0LnNlZWsgPSAobGVuZ3RoICogMTMyICogRlRfU0VDT05EKSAvIHNwZWVkOwotCWZ0YXBlX3RpbWVvdXQucmV3aW5kID0gKGxlbmd0aCAqIDE0NCAqIEZUX1NFQ09ORCkgLyAoMTAgKiBmZl9zcGVlZCk7Ci0JZnRhcGVfdGltZW91dC5yZXNldCA9IDIwICogRlRfU0VDT05EICsgZnRhcGVfdGltZW91dC5yZXdpbmQ7Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgInRpbWVvdXRzIGZvciBzcGVlZCA9ICVkLCBsZW5ndGggPSAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAic2VlayB0aW1lb3V0ICA6ICVkIHNlY1xuIgotCSAgICAgIEtFUk5fSU5GTyAicmV3aW5kIHRpbWVvdXQ6ICVkIHNlY1xuIgotCSAgICAgIEtFUk5fSU5GTyAicmVzZXQgdGltZW91dCA6ICVkIHNlYyIsCi0JICAgICAgc3BlZWQsIGxlbmd0aCwKLQkgICAgICAoZnRhcGVfdGltZW91dC5zZWVrICsgNTAwKSAvIDEwMDAsCi0JICAgICAgKGZ0YXBlX3RpbWVvdXQucmV3aW5kICsgNTAwKSAvIDEwMDAsCi0JICAgICAgKGZ0YXBlX3RpbWVvdXQucmVzZXQgKyA1MDApIC8gMTAwMCk7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBjYWxpYnJhdGVzIHRoZSBkYXRhcmF0ZSAoaS5lLiBkZXRlcm1pbmVzIHRoZSBtYXhpbWFsCi0gKiB1c2FibGUgZGF0YSByYXRlKSBhbmQgc2V0cyB0aGUgZ2xvYmFsIHZhcmlhYmxlIGZ0X3FpY19zdGQgdG8gcWljX3N0ZAotICoKLSAqLwotaW50IGZ0YXBlX2NhbGlicmF0ZV9kYXRhX3JhdGUodW5zaWduZWQgaW50IHFpY19zdGQpCi17Ci0JaW50IHJhdGUgPSBmdF9mZGNfcmF0ZV9saW1pdDsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JZnRfcWljX3N0ZCA9IHFpY19zdGQ7Ci0KLQlpZiAoZnRfcWljX3N0ZCA9PSAtMSkgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwKLQkJIlVuYWJsZSB0byBkZXRlcm1pbmUgZGF0YSByYXRlIGlmIFFJQyBzdGFuZGFyZCBpcyB1bmtub3duIik7Ci0JfQotCi0JLyogIFNlbGVjdCBoaWdoZXN0IHJhdGUgc3VwcG9ydGVkIGJ5IGJvdGggZmRjIGFuZCBkcml2ZS4KLQkgKiAgU3RhcnQgd2l0aCBoaWdoZXN0IHJhdGUgc3VwcG9ydGVkIGJ5IHRoZSBmZGMuCi0JICovCi0Jd2hpbGUgKGZkY19zZXRfZGF0YV9yYXRlKHJhdGUpIDwgMCAmJiByYXRlID4gMjUwKSB7Ci0JCXJhdGUgLz0gMjsKLQl9Ci0JVFJBQ0UoZnRfdF9pbmZvLAotCSAgICAgICJIaWdoZXN0IEZEQyBzdXBwb3J0ZWQgZGF0YSByYXRlOiAlZCBLYnBzIiwgcmF0ZSk7Ci0JZnRfZmRjX21heF9yYXRlID0gcmF0ZTsKLQlkbyB7Ci0JCXJlc3VsdCA9IGZ0YXBlX3NldF9kYXRhX3JhdGUocmF0ZSwgZnRfcWljX3N0ZCk7Ci0JfSB3aGlsZSAocmVzdWx0ID09IC1FSU5WQUwgJiYgKHJhdGUgLz0gMikgPiAyNTApOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLCAic2V0IGRhdGFyYXRlIGZhaWxlZCIpOwotCX0KLQlmdF9kYXRhX3JhdGUgPSByYXRlOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotc3RhdGljIGludCBmdGFwZV9pbml0X2RyaXZlKHZvaWQpCi17Ci0JaW50IHN0YXR1czsKLQlxaWNfbW9kZWwgbW9kZWw7Ci0JdW5zaWduZWQgaW50IHFpY19zdGQ7Ci0JdW5zaWduZWQgaW50IGRhdGFfcmF0ZTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWZ0YXBlX2luaXRfZHJpdmVfbmVlZGVkID0gMDsgLyogZG9uJ3QgcmV0cnkgaWYgdGhpcyBmYWlscyA/ICovCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfcmVwb3J0X3Jhd19kcml2ZV9zdGF0dXMoJnN0YXR1cyksKTsKLQlpZiAoc3RhdHVzICYgUUlDX1NUQVRVU19DQVJUUklER0VfUFJFU0VOVCkgewotCQlpZiAoIShzdGF0dXMgJiBRSUNfU1RBVFVTX0FUX0JPVCkpIHsKLQkJCS8qICBBbnRpcXVlIGRyaXZlcyB3aWxsIGdldCBoZXJlIGFmdGVyIGEgc29mdCByZXNldCwKLQkJCSAqICBtb2Rlcm4gb25lcyBvbmx5IGlmIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHdoZW4gdGhlCi0JCQkgKiAgdGFwZSB3YXNuJ3QgcmV3b3VuZCBwcm9wZXJseS4KLQkJCSAqLwotCQkJLyogVGFwZSBzaG91bGQgYmUgYXQgYm90IGlmIG5ldyBjYXJ0cmlkZ2UgISAqLwotCQkJZnRhcGVfc2Vla190b19ib3QoKTsKLQkJfQotCQlpZiAoIShzdGF0dXMgJiBRSUNfU1RBVFVTX1JFRkVSRU5DRUQpKSB7Ci0JCQlUUkFDRShmdF90X2Zsb3csICJzdGFydGluZyBzZWVrX2xvYWRfcG9pbnQiKTsKLQkJCVRSQUNFX0NBVENIKGZ0YXBlX2NvbW1hbmRfd2FpdChRSUNfU0VFS19MT0FEX1BPSU5ULAotCQkJCQkJICAgICAgIGZ0YXBlX3RpbWVvdXQucmVzZXQsCi0JCQkJCQkgICAgICAgJnN0YXR1cyksKTsKLQkJfQotCX0KLQlmdF9mb3JtYXR0ZWQgPSAoc3RhdHVzICYgUUlDX1NUQVRVU19SRUZFUkVOQ0VEKSAhPSAwOwotCWlmICghZnRfZm9ybWF0dGVkKSB7Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgIldhcm5pbmc6IHRhcGUgaXMgbm90IGZvcm1hdHRlZCAhIik7Ci0JfQotCi0JLyogIHJlcG9ydCBjb25maWd1cmF0aW9uIGFib3J0cyB3aGVuIGZ0YXBlX3RhcGVfbGVuID09IC0xCi0JICogIHVua25vd24gcWljX3N0ZCBpcyBva2F5IGlmIG5vdCBmb3JtYXR0ZWQuCi0JICovCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfcmVwb3J0X2NvbmZpZ3VyYXRpb24oJm1vZGVsLAotCQkJCQkgICAgICAgJmRhdGFfcmF0ZSwKLQkJCQkJICAgICAgICZxaWNfc3RkLAotCQkJCQkgICAgICAgJmZ0YXBlX3RhcGVfbGVuKSwpOwotCi0JLyogIE1heWJlIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSAvcHJvYyBlbnRyeQotCSAqLwotCVRSQUNFKGZ0X3RfaW5mbywgIiVzIGRyaXZlIEAgJWQgS2JwcyIsCi0JICAgICAgKG1vZGVsID09IHByZWhpc3RvcmljKSA/ICJwcmVoaXN0b3JpYyIgOgotCSAgICAgICgobW9kZWwgPT0gcHJlX3FpYzExN2MpID8gInByZSBRSUMtMTE3QyIgOgotCSAgICAgICAoKG1vZGVsID09IHBvc3RfcWljMTE3YikgPyAicG9zdCBRSUMtMTE3QiIgOgotCQkicG9zdCBRSUMtMTE3RCIpKSwgZGF0YV9yYXRlKTsKLQotCWlmIChmdF9mb3JtYXR0ZWQpIHsKLQkJLyogIGluaXRpYWxpemUgZnRfdXNlZF9kYXRhX3JhdGUgdG8gbWF4aW11bSB2YWx1ZSAKLQkJICogIGFuZCBzZXQgZnRfcWljX3N0ZAotCQkgKi8KLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfY2FsaWJyYXRlX2RhdGFfcmF0ZShxaWNfc3RkKSwpOwotCQlpZiAoZnRhcGVfdGFwZV9sZW4gPT0gMCkgewotCQkJVFJBQ0UoZnRfdF9pbmZvLCAidW5rbm93biBsZW5ndGggUUlDLSVzIHRhcGUiLAotCQkJICAgICAgKGZ0X3FpY19zdGQgPT0gUUlDX1RBUEVfUUlDNDApID8gIjQwIiA6Ci0JCQkgICAgICAoKGZ0X3FpY19zdGQgPT0gUUlDX1RBUEVfUUlDODApID8gIjgwIiA6Ci0JCQkgICAgICAgKChmdF9xaWNfc3RkID09IFFJQ19UQVBFX1FJQzMwMTApIAotCQkJCT8gIjMwMTAiIDogIjMwMjAiKSkpOwotCQl9IGVsc2UgewotCQkJVFJBQ0UoZnRfdF9pbmZvLCAiJWQgZnQuIFFJQy0lcyB0YXBlIiwgZnRhcGVfdGFwZV9sZW4sCi0JCQkgICAgICAoZnRfcWljX3N0ZCA9PSBRSUNfVEFQRV9RSUM0MCkgPyAiNDAiIDoKLQkJCSAgICAgICgoZnRfcWljX3N0ZCA9PSBRSUNfVEFQRV9RSUM4MCkgPyAiODAiIDoKLQkJCSAgICAgICAoKGZ0X3FpY19zdGQgPT0gUUlDX1RBUEVfUUlDMzAxMCkKLQkJCQk/ICIzMDEwIiA6ICIzMDIwIikpKTsKLQkJfQotCQlmdGFwZV9jYWxjX3RpbWVvdXRzKGZ0X3FpY19zdGQsIGZ0X2RhdGFfcmF0ZSwgZnRhcGVfdGFwZV9sZW4pOwotCQkvKiBzb2Z0IHdyaXRlLXByb3RlY3QgUUlDLTQwL1FJQy04MCBjYXJ0cmlkZ2VzIHVzZWQgd2l0aCBhCi0JCSAqIENvbG9yYWRvIFQzMDAwIGRyaXZlLiBCdWdneSBoYXJkd2FyZSEKLQkJICovCi0JCWlmICgoZnRfZHJpdmVfdHlwZS52ZW5kb3JfaWQgPT0gMHgwMTFjNikgJiYKLQkJICAgICgoZnRfcWljX3N0ZCA9PSBRSUNfVEFQRV9RSUM0MCB8fAotCQkgICAgICBmdF9xaWNfc3RkID09IFFJQ19UQVBFX1FJQzgwKSAmJgotCQkgICAgICFmdF93cml0ZV9wcm90ZWN0ZWQpKSB7Ci0JCQlUUkFDRShmdF90X3dhcm4sICJcbiIKLQlLRVJOX0lORk8gIlRoZSBmYW1vdXMgQ29sb3JhZG8gVDMwMDAgYnVnOlxuIgotCUtFUk5fSU5GTyAiJXMgZHJpdmVzIGNhbid0IHdyaXRlIFFJQzQwIGFuZCBRSUM4MFxuIgotCUtFUk5fSU5GTyAiY2FydHJpZGdlcyBidXQgZG9uJ3Qgc2V0IHRoZSB3cml0ZS1wcm90ZWN0IGZsYWchIiwKLQkJCSAgICAgIGZ0X2RyaXZlX3R5cGUubmFtZSk7Ci0JCQlmdF93cml0ZV9wcm90ZWN0ZWQgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogIERvZXNuJ3QgbWFrZSB0b28gbXVjaCBzZW5zZSB0byBzZXQgdGhlIGRhdGEgcmF0ZQotCQkgKiAgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgdG8gdXNlIGZvciB0aGUgd3JpdGUKLQkJICogIHByZWNvbXBlbnNhdGlvbi4KLQkJICogIE5lZWQgdG8gZG8gdGhpcyBhZ2FpbiB3aGVuIGZvcm1hdHRpbmcgdGhlIGNhcnRyaWRnZS4KLQkJICovCi0JCWZ0X2RhdGFfcmF0ZSA9IGRhdGFfcmF0ZTsKLQkJZnRhcGVfY2FsY190aW1lb3V0cyhRSUNfVEFQRV9RSUM0MCwKLQkJCQkgICAgZGF0YV9yYXRlLAotCQkJCSAgICBmdGFwZV90YXBlX2xlbik7Ci0JfQotCWZ0YXBlX25ld19jYXJ0cmlkZ2UoKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ0YXBlX211bm1hcCh2b2lkKQotewotCWludCBpOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWZvciAoaSA9IDA7IGkgPCBmdF9ucl9idWZmZXJzOyBpKyspIHsKLQkJZnRfYnVmZmVyW2ldLT5tbWFwcGVkID0gMDsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogICBNYXAgdGhlIGRtYSBidWZmZXJzIGludG8gdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBnaXZlbiBieSB2bWEuCi0gKiAgIFdlIG9ubHkgY2hlY2sgdGhlIGNhbGxlciBkb2Vzbid0IG1hcCBub24tZXhpc3RlbnQgYnVmZmVycy4gV2UKLSAqICAgZG9uJ3QgY2hlY2sgZm9yIG11bHRpcGxlIG1hcHBpbmdzLgotICovCi1pbnQgZnRhcGVfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpbnQgbnVtX2J1ZmZlcnM7Ci0JaW50IGk7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYgKGZ0X2ZhaWx1cmUpIHsKLQkJVFJBQ0VfRVhJVCAtRU5PREVWOwotCX0KLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUR8Vk1fV1JJVEUpKSkgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLCBmdF90X2VyciwgIlVuZGVmaW5lZCBtbWFwKCkgYWNjZXNzIik7Ci0JfQotCWlmICh2bWFfZ2V0X3Bnb2ZmKHZtYSkgIT0gMCkgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLCBmdF90X2VyciwgInBhZ2Ugb2Zmc2V0IG11c3QgYmUgMCIpOwotCX0KLQlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgJSBGVF9CVUZGX1NJWkUgIT0gMCkgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLCBmdF90X2VyciwKLQkJCSAgICAic2l6ZSA9ICVsZCwgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgJWQiLAotCQkJICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCSAgICBGVF9CVUZGX1NJWkUpOwotCX0KLQludW1fYnVmZmVycyA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gRlRfQlVGRl9TSVpFOwotCWlmIChudW1fYnVmZmVycyA+IGZ0X25yX2J1ZmZlcnMpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwKLQkJCSAgICBmdF90X2VyciwgInNpemUgPSAlbGQsIHNob3VsZCBiZSBsZXNzIHRoYW4gJWQiLAotCQkJICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKLQkJCSAgICBmdF9ucl9idWZmZXJzICogRlRfQlVGRl9TSVpFKTsKLQl9Ci0JaWYgKGZ0X2RyaXZlcl9zdGF0ZSAhPSBpZGxlKSB7Ci0JCS8qIHRoaXMgYWxzbyBjbGVhcnMgdGhlIGJ1ZmZlciBzdGF0ZXMgCi0JCSAqLwotCQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsKLQl9IGVsc2UgewotCQlmdGFwZV9yZXNldF9idWZmZXIoKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBwZm47Ci0KLQkJcGZuID0gdmlydF90b19waHlzKGZ0X2J1ZmZlcltpXS0+YWRkcmVzcykgPj4gUEFHRV9TSElGVDsKLQkJVFJBQ0VfQ0FUQ0gocmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCArCi0JCQkJCSAgICAgaSAqIEZUX0JVRkZfU0laRSwKLQkJCQkJICAgICBwZm4sCi0JCQkJCSAgICAgRlRfQlVGRl9TSVpFLAotCQkJCQkgICAgIHZtYS0+dm1fcGFnZV9wcm90KSwKLQkJCSAgICBfcmVzID0gLUVBR0FJTik7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJyZW1hcHBlZCBkbWEgYnVmZmVyIEAgJXAgdG8gbG9jYXRpb24gQCAlcCIsCi0JCSAgICAgIGZ0X2J1ZmZlcltpXS0+YWRkcmVzcywKLQkJICAgICAgKHZvaWQgKikodm1hLT52bV9zdGFydCArIGkgKiBGVF9CVUZGX1NJWkUpKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG51bV9idWZmZXJzOyBpKyspIHsKLQkJbWVtc2V0KGZ0X2J1ZmZlcltpXS0+YWRkcmVzcywgMHhBQSwgRlRfQlVGRl9TSVpFKTsKLQkJZnRfYnVmZmVyW2ldLT5tbWFwcGVkKys7Ci0JfQkKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ0YXBlX2luaXRfZHJpdmVyKHZvaWQpOyAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCi0KLS8qICAgICAgT1BFTiByb3V0aW5lIGNhbGxlZCBieSBrZXJuZWwtaW50ZXJmYWNlIGNvZGUKLSAqLwotaW50IGZ0YXBlX2VuYWJsZShpbnQgZHJpdmVfc2VsZWN0aW9uKQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoZnRfZHJpdmVfc2VsID09IC0xIHx8IGZ0X2RyaXZlX3NlbCAhPSBkcml2ZV9zZWxlY3Rpb24pIHsKLQkJLyogT3RoZXIgc2VsZWN0aW9uIHRoYW4gbGFzdCB0aW1lCi0JCSAqLwotCQlmdGFwZV9pbml0X2RyaXZlcigpOwotCX0KLQlmdF9kcml2ZV9zZWwgPSBGVEFQRV9TRUwoZHJpdmVfc2VsZWN0aW9uKTsKLQlmdF9mYWlsdXJlID0gMDsKLQlUUkFDRV9DQVRDSChmZGNfaW5pdCgpLCk7IC8qIGluaXQgJiBkZXRlY3QgZmRjICovCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfYWN0aXZhdGVfZHJpdmUoJmZ0X2RyaXZlX3R5cGUpLAotCQkgICAgZmRjX2Rpc2FibGUoKTsKLQkJICAgIGZkY19yZWxlYXNlX2lycV9hbmRfZG1hKCk7Ci0JCSAgICBmZGNfcmVsZWFzZV9yZWdpb25zKCkpOwotCVRSQUNFX0NBVENIKGZ0YXBlX2dldF9kcml2ZV9zdGF0dXMoKSwgZnRhcGVfZGV0YWNoX2RyaXZlKCkpOwotCWlmIChmdF9kcml2ZV90eXBlLnZlbmRvcl9pZCA9PSBVTktOT1dOX1ZFTkRPUikgewotCQlmdGFwZV9sb2dfdmVuZG9yX2lkKCk7Ci0JfQotCWlmIChmdF9uZXdfdGFwZSkgewotCQlmdGFwZV9pbml0X2RyaXZlX25lZWRlZCA9IDE7Ci0JfQotCWlmICghZnRfbm9fdGFwZSAmJiBmdGFwZV9pbml0X2RyaXZlX25lZWRlZCkgewotCQlUUkFDRV9DQVRDSChmdGFwZV9pbml0X2RyaXZlKCksIGZ0YXBlX2RldGFjaF9kcml2ZSgpKTsKLQl9Ci0JZnRhcGVfbXVubWFwKCk7IC8qIGNsZWFyIHRoZSBtbWFwIGZsYWcgKi8KLQljbGVhcl9oaXN0b3J5KCk7Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi0vKiAgIHJlbGVhc2Ugcm91dGluZSBjYWxsZWQgYnkgdGhlIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIG1vZHVsZXMKLSAqICAgemZ0YXBlIG9yIHNmdGFwZS4KLSAqLwotdm9pZCBmdGFwZV9kaXNhYmxlKHZvaWQpCi17Ci0JaW50IGk7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWZvciAoaSA9IDA7IGkgPCBmdF9ucl9idWZmZXJzOyBpKyspIHsKLQkJaWYgKGZ0X2J1ZmZlcltpXS0+bW1hcHBlZCkgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImZpcnN0IGJ5dGUgb2YgYnVmZmVyICVkOiAweCUwMngiLAotCQkJICAgICAgaSwgKmZ0X2J1ZmZlcltpXS0+YWRkcmVzcyk7Ci0JCX0KLQl9Ci0JaWYgKHNpZ3Rlc3RzZXRtYXNrKCZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCwgX0RPTlRfQkxPQ0spICYmIAotCSAgICAhKHNpZ3Rlc3RzZXRtYXNrKCZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCwgX05FVkVSX0JMT0NLKSkgJiYKLQkgICAgZnRhcGVfdGFwZV9ydW5uaW5nKSB7Ci0JCVRSQUNFKGZ0X3Rfd2FybiwKLQkJICAgICAgIkludGVycnVwdGVkIGJ5IGZhdGFsIHNpZ25hbCBhbmQgdGFwZSBzdGlsbCBydW5uaW5nIik7Ci0JCWZ0YXBlX2R1bWJfc3RvcCgpOwotCQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsgLyogaXQncyBhbm5veWluZyAqLwotCX0gZWxzZSB7Ci0JCWZ0YXBlX3NldF9zdGF0ZShpZGxlKTsKLQl9Ci0JZnRhcGVfZGV0YWNoX2RyaXZlKCk7Ci0JaWYgKGZ0X2hpc3RvcnkudXNlZCkgewotCQlUUkFDRShmdF90X2luZm8sICI9PSBOb24tZmF0YWwgZXJyb3JzIHRoaXMgcnVuOiA9PSIpOwotCQlUUkFDRShmdF90X2luZm8sICJmZGMgaXNyIHN0YXRpc3RpY3M6XG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiIGlkX2FtX2Vycm9ycyAgICAgOiAlM2RcbiIKLQkJICAgICAgS0VSTl9JTkZPICIgaWRfY3JjX2Vycm9ycyAgICA6ICUzZFxuIgotCQkgICAgICBLRVJOX0lORk8gIiBkYXRhX2FtX2Vycm9ycyAgIDogJTNkXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiIGRhdGFfY3JjX2Vycm9ycyAgOiAlM2RcbiIKLQkJICAgICAgS0VSTl9JTkZPICIgb3ZlcnJ1bl9lcnJvcnMgICA6ICUzZFxuIgotCQkgICAgICBLRVJOX0lORk8gIiBub19kYXRhX2Vycm9ycyAgIDogJTNkXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiIHJldHJpZXMgICAgICAgICAgOiAlM2QiLAotCQkgICAgICBmdF9oaXN0b3J5LmlkX2FtX2Vycm9ycywgICBmdF9oaXN0b3J5LmlkX2NyY19lcnJvcnMsCi0JCSAgICAgIGZ0X2hpc3RvcnkuZGF0YV9hbV9lcnJvcnMsIGZ0X2hpc3RvcnkuZGF0YV9jcmNfZXJyb3JzLAotCQkgICAgICBmdF9oaXN0b3J5Lm92ZXJydW5fZXJyb3JzLCBmdF9oaXN0b3J5Lm5vX2RhdGFfZXJyb3JzLAotCQkgICAgICBmdF9oaXN0b3J5LnJldHJpZXMpOwotCQlpZiAoZnRfaGlzdG9yeS51c2VkICYgMSkgewotCQkJVFJBQ0UoZnRfdF9pbmZvLCAiZWNjIHN0YXRpc3RpY3M6XG4iCi0JCQkgICAgICBLRVJOX0lORk8gIiBjcmNfZXJyb3JzICAgICAgIDogJTNkXG4iCi0JCQkgICAgICBLRVJOX0lORk8gIiBjcmNfZmFpbHVyZXMgICAgIDogJTNkXG4iCi0JCQkgICAgICBLRVJOX0lORk8gIiBlY2NfZmFpbHVyZXMgICAgIDogJTNkXG4iCi0JCQkgICAgICBLRVJOX0lORk8gIiBzZWN0b3JzIGNvcnJlY3RlZDogJTNkIiwKLQkJCSAgICAgIGZ0X2hpc3RvcnkuY3JjX2Vycm9ycywgICBmdF9oaXN0b3J5LmNyY19mYWlsdXJlcywKLQkJCSAgICAgIGZ0X2hpc3RvcnkuZWNjX2ZhaWx1cmVzLCBmdF9oaXN0b3J5LmNvcnJlY3RlZCk7Ci0JCX0KLQkJaWYgKGZ0X2hpc3RvcnkuZGVmZWN0cyA+IDApIHsKLQkJCVRSQUNFKGZ0X3Rfd2FybiwgIldhcm5pbmc6ICVkIG1lZGlhIGRlZmVjdHMhIiwKLQkJCSAgICAgIGZ0X2hpc3RvcnkuZGVmZWN0cyk7Ci0JCX0KLQkJaWYgKGZ0X2hpc3RvcnkucmV3aW5kcyA+IDApIHsKLQkJCVRSQUNFKGZ0X3RfaW5mbywgInRhcGUgbW90aW9uIHN0YXRpc3RpY3M6XG4iCi0JCQkgICAgICBLRVJOX0lORk8gInJlcG9zaXRpb25zICAgICAgIDogJTNkIiwKLQkJCSAgICAgIGZ0X2hpc3RvcnkucmV3aW5kcyk7Ci0JCX0KLQl9Ci0JZnRfZmFpbHVyZSA9IDE7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotc3RhdGljIHZvaWQgZnRhcGVfaW5pdF9kcml2ZXIodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWZ0X2RyaXZlX3R5cGUudmVuZG9yX2lkID0gVU5LTk9XTl9WRU5ET1I7Ci0JZnRfZHJpdmVfdHlwZS5zcGVlZCAgICAgPSAwOwotCWZ0X2RyaXZlX3R5cGUud2FrZV91cCAgID0gdW5rbm93bl93YWtlX3VwOwotCWZ0X2RyaXZlX3R5cGUubmFtZSAgICAgID0gIlVua25vd24iOwotCi0JZnRhcGVfdGltZW91dC5zZWVrICAgICAgPSA2NTAgKiBGVF9TRUNPTkQ7Ci0JZnRhcGVfdGltZW91dC5yZXNldCAgICAgPSA2NzAgKiBGVF9TRUNPTkQ7Ci0JZnRhcGVfdGltZW91dC5yZXdpbmQgICAgPSA2NTAgKiBGVF9TRUNPTkQ7Ci0JZnRhcGVfdGltZW91dC5oZWFkX3NlZWsgPSAgMTUgKiBGVF9TRUNPTkQ7Ci0JZnRhcGVfdGltZW91dC5zdG9wICAgICAgPSAgIDUgKiBGVF9TRUNPTkQ7Ci0JZnRhcGVfdGltZW91dC5wYXVzZSAgICAgPSAgMTYgKiBGVF9TRUNPTkQ7Ci0KLQlmdF9xaWNfc3RkICAgICAgICAgICAgID0gLTE7Ci0JZnRhcGVfdGFwZV9sZW4gICAgICAgICA9IDA7ICAvKiB1bmtub3duICovCi0JZnRhcGVfY3VycmVudF9jb21tYW5kICA9IDA7Ci0JZnRhcGVfY3VycmVudF9jeWxpbmRlciA9IC0xOwotCi0JZnRfc2VnbWVudHNfcGVyX3RyYWNrICAgICAgID0gMTAyOwotCWZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkICAgICA9IDEwMjA7Ci0JZnRhcGVfc2VnbWVudHNfcGVyX2N5bGluZGVyID0gNDsKLQlmdF90cmFja3NfcGVyX3RhcGUgICAgICAgICAgPSAyMDsKLQotCWZ0X2ZhaWx1cmUgPSAxOwotCi0JZnRfZm9ybWF0dGVkICAgICAgID0gMDsKLQlmdF9ub190YXBlICAgICAgICAgPSAxOwotCWZ0X3dyaXRlX3Byb3RlY3RlZCA9IDE7Ci0JZnRfbmV3X3RhcGUgICAgICAgID0gMTsKLQotCWZ0X2RyaXZlcl9zdGF0ZSA9IGlkbGU7Ci0KLQlmdF9kYXRhX3JhdGUgPSAKLQkJZnRfZmRjX21heF9yYXRlICAgPSA1MDA7Ci0JZnRfZHJpdmVfbWF4X3JhdGUgPSAwOyAvKiB0cmlnZ2VycyBzZXRfcmF0ZV90ZXN0KCkgKi8KLQotCWZ0YXBlX2luaXRfZHJpdmVfbmVlZGVkID0gMTsKLQotCWZ0X2hlYWRlcl9zZWdtZW50XzEgICAgPSAtMTsKLQlmdF9oZWFkZXJfc2VnbWVudF8yICAgID0gLTE7Ci0JZnRfdXNlZF9oZWFkZXJfc2VnbWVudCA9IC0xOwotCWZ0X2ZpcnN0X2RhdGFfc2VnbWVudCAgPSAtMTsKLQlmdF9sYXN0X2RhdGFfc2VnbWVudCAgID0gLTE7Ci0KLQlmdF9sb2NhdGlvbi50cmFjayA9IC0xOwotCWZ0X2xvY2F0aW9uLmtub3duID0gMDsKLQotCWZ0YXBlX3RhcGVfcnVubmluZyA9IDA7Ci0JZnRhcGVfbWlnaHRfYmVfb2ZmX3RyYWNrID0gMTsKLQotCWZ0YXBlX25ld19jYXJ0cmlkZ2UoKTsJLyogaW5pdCBzb21lIHRhcGUgcmVsYXRlZCB2YXJpYWJsZXMgKi8KLQlmdGFwZV9pbml0X2JzbSgpOwotCVRSQUNFX0VYSVQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtY3RsLmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtY3RsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNWUzMGIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWN0bC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLSNpZm5kZWYgX0ZUQVBFX0NUTF9ICi0jZGVmaW5lIF9GVEFQRV9DVExfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTkzLTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtY3RsLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODowOSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5vbi1zdGFuZGFyZCBJT0NUTCByZWxhdGVkIGRlZmluaXRpb25zCi0gKiAgICAgIGZvciB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMCBmbG9wcHktdGFwZSBkcml2ZXIgImZ0YXBlIiBmb3IKLSAqICAgICAgTGludXguCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRpby5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLXZlbmRvcnMuaD4KLQotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJ3LmgiCi0jaW5jbHVkZSA8bGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludCB1c2VkOwkJLyogYW55IHJlYWRpbmcgb3Igd3JpdGluZyBkb25lICovCi0JLyogaXNyIHN0YXRpc3RpY3MgKi8KLQl1bnNpZ25lZCBpbnQgaWRfYW1fZXJyb3JzOwkvKiBpZCBhZGRyZXNzIG1hcmsgbm90IGZvdW5kICovCi0JdW5zaWduZWQgaW50IGlkX2NyY19lcnJvcnM7CS8qIGNyYyBlcnJvciBpbiBpZCBhZGRyZXNzIG1hcmsgKi8KLQl1bnNpZ25lZCBpbnQgZGF0YV9hbV9lcnJvcnM7CS8qIGRhdGEgYWRkcmVzcyBtYXJrIG5vdCBmb3VuZCAqLwotCXVuc2lnbmVkIGludCBkYXRhX2NyY19lcnJvcnM7CS8qIGNyYyBlcnJvciBpbiBkYXRhIGZpZWxkICovCi0JdW5zaWduZWQgaW50IG92ZXJydW5fZXJyb3JzOwkvKiBmZGMgYWNjZXNzIHRpbWluZyBwcm9ibGVtICovCi0JdW5zaWduZWQgaW50IG5vX2RhdGFfZXJyb3JzOwkvKiBzZWN0b3Igbm90IGZvdW5kICovCi0JdW5zaWduZWQgaW50IHJldHJpZXM7CS8qIG51bWJlciBvZiB0YXBlIHJldHJpZXMgKi8KLQkvKiBlY2Mgc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGludCBjcmNfZXJyb3JzOwkvKiBjcmMgZXJyb3IgaW4gZGF0YSAqLwotCXVuc2lnbmVkIGludCBjcmNfZmFpbHVyZXM7CS8qIGJhZCBkYXRhIHdpdGhvdXQgY3JjIGVycm9yICovCi0JdW5zaWduZWQgaW50IGVjY19mYWlsdXJlczsJLyogZmFpbGVkIHRvIGNvcnJlY3QgKi8KLQl1bnNpZ25lZCBpbnQgY29ycmVjdGVkOwkvKiB0b3RhbCBzZWN0b3JzIGNvcnJlY3RlZCAqLwotCS8qIGdlbmVyYWwgc3RhdGlzdGljcyAqLwotCXVuc2lnbmVkIGludCByZXdpbmRzOwkvKiBudW1iZXIgb2YgdGFwZSByZXdpbmRzICovCi0JdW5zaWduZWQgaW50IGRlZmVjdHM7CS8qIGJhZCBzZWN0b3JzIGR1ZSB0byBtZWRpYSBkZWZlY3RzICovCi19IGhpc3RvcnlfcmVjb3JkOwotCi0vKiB0aGlzIHN0cnVjdHVyZSBjb250YWlucyAqIEFMTCAqIGluZm9ybWF0aW9uIHRoYXQgd2Ugd2FudAotICogb3VyIGNoaWxkIG1vZHVsZXMgdG8ga25vdyBhYm91dCwgYnV0IGRvbid0IHdhbnQgdGhlbSB0bwotICogbW9kaWZ5LiAKLSAqLwotdHlwZWRlZiBzdHJ1Y3QgewotCS8qICB2ZW5kb3IgaW5mb3JtYXRpb24gKi8KLQl2ZW5kb3Jfc3RydWN0IGZ0aV9kcml2ZV90eXBlOwotCS8qICBkYXRhIHJhdGVzICovCi0JdW5zaWduZWQgaW50IGZ0aV91c2VkX2RhdGFfcmF0ZTsKLQl1bnNpZ25lZCBpbnQgZnRpX2RyaXZlX21heF9yYXRlOwotCXVuc2lnbmVkIGludCBmdGlfZmRjX21heF9yYXRlOwotCS8qICBkcml2ZSBzZWxlY3Rpb24sIGVpdGhlciBGVEFQRV9TRUxfQS9CL0MvRCAqLwotCWludCBmdGlfZHJpdmVfc2VsOyAgICAgIAotCS8qICBmbGFncyBzZXQgYWZ0ZXIgZGVjb2RlIHRoZSBkcml2ZSBhbmQgdGFwZSBzdGF0dXMgICAqLwotCXVuc2lnbmVkIGludCBmdGlfZm9ybWF0dGVkICAgICAgOjE7Ci0JdW5zaWduZWQgaW50IGZ0aV9ub190YXBlICAgICAgICA6MTsKLQl1bnNpZ25lZCBpbnQgZnRpX3dyaXRlX3Byb3RlY3RlZDoxOwotCXVuc2lnbmVkIGludCBmdGlfbmV3X3RhcGUgICAgICAgOjE7Ci0JLyogIHZhbHVlcyBvZiBsYXN0IHF1ZXJpZWQgZHJpdmUvdGFwZSBzdGF0dXMgYW5kIGVycm9yICovCi0JZnRfZHJpdmVfZXJyb3IgIGZ0aV9sYXN0X2Vycm9yOwotCWZ0X2RyaXZlX3N0YXR1cyBmdGlfbGFzdF9zdGF0dXM7Ci0JLyogIGNhcnRyaWRnZSBnZW9tZXRyeSAqLwotCXVuc2lnbmVkIGludCBmdGlfdHJhY2tzX3Blcl90YXBlOwotCXVuc2lnbmVkIGludCBmdGlfc2VnbWVudHNfcGVyX3RyYWNrOwotCS8qICBsb2NhdGlvbiBvZiBoZWFkZXIgc2VnbWVudHMsIGV0Yy4gKi8KLQlpbnQgZnRpX3VzZWRfaGVhZGVyX3NlZ21lbnQ7Ci0JaW50IGZ0aV9oZWFkZXJfc2VnbWVudF8xOwotCWludCBmdGlfaGVhZGVyX3NlZ21lbnRfMjsKLQlpbnQgZnRpX2ZpcnN0X2RhdGFfc2VnbWVudDsKLQlpbnQgZnRpX2xhc3RfZGF0YV9zZWdtZW50OwotCS8qICB0aGUgZm9ybWF0IGNvZGUgYXMgc3RvcmVkIGluIHRoZSBoZWFkZXIgc2VnbWVudCAgKi8KLQlmdF9mb3JtYXRfdHlwZSAgZnRpX2Zvcm1hdF9jb2RlOwotCS8qICB0aGUgZm9sbG93aW5nIGlzIHRoZSBzb2xlIHJlYXNvbiBmb3IgdGhlIGZ0YXBlX3NldF9zdGF0dXMoKSBjYWxsICovCi0JdW5zaWduZWQgaW50IGZ0aV9xaWNfc3RkOwotCS8qICBpcyB0YXBlIHJ1bm5pbmc/ICovCi0Jdm9sYXRpbGUgZW51bSBydW5uZXJfc3RhdHVzX2VudW0gZnRpX3J1bm5lcl9zdGF0dXM7Ci0JLyogIGlzIHRhcGUgcmVhZGluZy93cml0aW5nL3ZlcmlmeWluZy9mb3JtYXR0aW5nL2RlbGV0aW5nICovCi0JYnVmZmVyX3N0YXRlX2VudW0gZnRpX3N0YXRlOwotCS8qICBmbGFncyBmYXRhbCBoYXJkd2FyZSBlcnJvciAqLwotCXVuc2lnbmVkIGludCBmdGlfZmFpbHVyZToxOwotCS8qICBoaXN0b3J5IHJlY29yZCAqLwotCWhpc3RvcnlfcmVjb3JkIGZ0aV9oaXN0b3J5OwotfSBmdGFwZV9pbmZvOwotCi0vKiB2ZW5kb3IgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgZnRfZHJpdmVfdHlwZSAgICAgICAgICBmdGFwZV9zdGF0dXMuZnRpX2RyaXZlX3R5cGUKLS8qICBkYXRhIHJhdGVzICovCi0jZGVmaW5lIGZ0X2RhdGFfcmF0ZSAgICAgICAgICAgZnRhcGVfc3RhdHVzLmZ0aV91c2VkX2RhdGFfcmF0ZQotI2RlZmluZSBmdF9kcml2ZV9tYXhfcmF0ZSAgICAgIGZ0YXBlX3N0YXR1cy5mdGlfZHJpdmVfbWF4X3JhdGUKLSNkZWZpbmUgZnRfZmRjX21heF9yYXRlICAgICAgICBmdGFwZV9zdGF0dXMuZnRpX2ZkY19tYXhfcmF0ZQotLyogIGRyaXZlIHNlbGVjdGlvbiwgZWl0aGVyIEZUQVBFX1NFTF9BL0IvQy9EICovCi0jZGVmaW5lIGZ0X2RyaXZlX3NlbCAgICAgICAgICAgZnRhcGVfc3RhdHVzLmZ0aV9kcml2ZV9zZWwKLS8qICBmbGFncyBzZXQgYWZ0ZXIgZGVjb2RlIHRoZSBkcml2ZSBhbmQgdGFwZSBzdGF0dXMgICAqLwotI2RlZmluZSBmdF9mb3JtYXR0ZWQgICAgICAgICAgIGZ0YXBlX3N0YXR1cy5mdGlfZm9ybWF0dGVkCi0jZGVmaW5lIGZ0X25vX3RhcGUgICAgICAgICAgICAgZnRhcGVfc3RhdHVzLmZ0aV9ub190YXBlCi0jZGVmaW5lIGZ0X3dyaXRlX3Byb3RlY3RlZCAgICAgZnRhcGVfc3RhdHVzLmZ0aV93cml0ZV9wcm90ZWN0ZWQKLSNkZWZpbmUgZnRfbmV3X3RhcGUgICAgICAgICAgICBmdGFwZV9zdGF0dXMuZnRpX25ld190YXBlCi0vKiAgdmFsdWVzIG9mIGxhc3QgcXVlcmllZCBkcml2ZS90YXBlIHN0YXR1cyBhbmQgZXJyb3IgKi8KLSNkZWZpbmUgZnRfbGFzdF9lcnJvciAgICAgICAgICBmdGFwZV9zdGF0dXMuZnRpX2xhc3RfZXJyb3IKLSNkZWZpbmUgZnRfbGFzdF9zdGF0dXMgICAgICAgICBmdGFwZV9zdGF0dXMuZnRpX2xhc3Rfc3RhdHVzCi0vKiAgY2FydHJpZGdlIGdlb21ldHJ5ICovCi0jZGVmaW5lIGZ0X3RyYWNrc19wZXJfdGFwZSAgICAgZnRhcGVfc3RhdHVzLmZ0aV90cmFja3NfcGVyX3RhcGUKLSNkZWZpbmUgZnRfc2VnbWVudHNfcGVyX3RyYWNrICBmdGFwZV9zdGF0dXMuZnRpX3NlZ21lbnRzX3Blcl90cmFjawotLyogIHRoZSBmb3JtYXQgY29kZSBhcyBzdG9yZWQgaW4gdGhlIGhlYWRlciBzZWdtZW50ICAqLwotI2RlZmluZSBmdF9mb3JtYXRfY29kZSAgICAgICAgIGZ0YXBlX3N0YXR1cy5mdGlfZm9ybWF0X2NvZGUKLS8qICB0aGUgcWljIHN0YXR1cyBhcyByZXR1cm5lZCBieSByZXBvcnQgZHJpdmUgY29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBmdF9xaWNfc3RkICAgICAgICAgICAgIGZ0YXBlX3N0YXR1cy5mdGlfcWljX3N0ZAotI2RlZmluZSBmdF91c2VkX2hlYWRlcl9zZWdtZW50IGZ0YXBlX3N0YXR1cy5mdGlfdXNlZF9oZWFkZXJfc2VnbWVudAotI2RlZmluZSBmdF9oZWFkZXJfc2VnbWVudF8xICAgIGZ0YXBlX3N0YXR1cy5mdGlfaGVhZGVyX3NlZ21lbnRfMQotI2RlZmluZSBmdF9oZWFkZXJfc2VnbWVudF8yICAgIGZ0YXBlX3N0YXR1cy5mdGlfaGVhZGVyX3NlZ21lbnRfMgotI2RlZmluZSBmdF9maXJzdF9kYXRhX3NlZ21lbnQgIGZ0YXBlX3N0YXR1cy5mdGlfZmlyc3RfZGF0YV9zZWdtZW50Ci0jZGVmaW5lIGZ0X2xhc3RfZGF0YV9zZWdtZW50ICAgZnRhcGVfc3RhdHVzLmZ0aV9sYXN0X2RhdGFfc2VnbWVudAotLyogIGlzIHRhcGUgcnVubmluZz8gKi8KLSNkZWZpbmUgZnRfcnVubmVyX3N0YXR1cyAgICAgICBmdGFwZV9zdGF0dXMuZnRpX3J1bm5lcl9zdGF0dXMKLS8qICBpcyB0YXBlIHJlYWRpbmcvd3JpdGluZy92ZXJpZnlpbmcvZm9ybWF0dGluZy9kZWxldGluZyAqLwotI2RlZmluZSBmdF9kcml2ZXJfc3RhdGUgICAgICAgIGZ0YXBlX3N0YXR1cy5mdGlfc3RhdGUKLS8qICBmbGFncyBmYXRhbCBoYXJkd2FyZSBlcnJvciAqLwotI2RlZmluZSBmdF9mYWlsdXJlICAgICAgICAgICAgIGZ0YXBlX3N0YXR1cy5mdGlfZmFpbHVyZQotLyogIGhpc3RvcnkgcmVjb3JkICovCi0jZGVmaW5lIGZ0X2hpc3RvcnkgICAgICAgICAgICAgZnRhcGVfc3RhdHVzLmZ0aV9oaXN0b3J5Ci0KLS8qCi0gKiAgICAgIGZ0YXBlLWN0bC5jIGRlZmluZWQgZ2xvYmFsIHZhcnMuCi0gKi8KLWV4dGVybiBmdGFwZV9pbmZvIGZ0YXBlX3N0YXR1czsKLWV4dGVybiBpbnQgZnRhcGVfc2VnbWVudHNfcGVyX2hlYWQ7Ci1leHRlcm4gaW50IGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlcjsKLWV4dGVybiBpbnQgZnRhcGVfaW5pdF9kcml2ZV9uZWVkZWQ7Ci0KLS8qCi0gKiAgICAgIGZ0YXBlLWN0bC5jIGRlZmluZWQgZ2xvYmFsIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuIGludCAgZnRhcGVfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1leHRlcm4gaW50ICBmdGFwZV9lbmFibGUoaW50IGRyaXZlX3NlbGVjdGlvbik7Ci1leHRlcm4gdm9pZCBmdGFwZV9kaXNhYmxlKHZvaWQpOwotZXh0ZXJuIGludCAgZnRhcGVfc2Vla190b19ib3Qodm9pZCk7Ci1leHRlcm4gaW50ICBmdGFwZV9zZWVrX3RvX2VvdCh2b2lkKTsKLWV4dGVybiBpbnQgIGZ0YXBlX2Fib3J0X29wZXJhdGlvbih2b2lkKTsKLWV4dGVybiB2b2lkIGZ0YXBlX2NhbGNfdGltZW91dHModW5zaWduZWQgaW50IHFpY19zdGQsCi0JCQkJIHVuc2lnbmVkIGludCBkYXRhX3JhdGUsCi0JCQkJIHVuc2lnbmVkIGludCB0YXBlX2xlbik7Ci1leHRlcm4gaW50ICBmdGFwZV9jYWxpYnJhdGVfZGF0YV9yYXRlKHVuc2lnbmVkIGludCBxaWNfc3RkKTsKLWV4dGVybiBjb25zdCBmdGFwZV9pbmZvICpmdGFwZV9nZXRfc3RhdHVzKHZvaWQpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZWNjLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZWNjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjMyZjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWVjYy5jCisrKyAvZGV2L251bGwKQEAgLTEsODUzICswLDAgQEAKLS8qCi0gKgotICogICAgICBDb3B5cmlnaHQgKGMpIDE5OTMgTmluZyBhbmQgRGF2aWQgTW9zYmVyZ2VyLgotIAotIFRoaXMgaXMgYmFzZWQgb24gY29kZSBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQmFzIExhYXJob3ZlbiAoYmFzQHZpbWVjLm5sKQotIGFuZCBEYXZpZCBMLiBCcm93biwgSnIuLCBhbmQgaW5jb3Jwb3JhdGVzIGltcHJvdmVtZW50cyBzdWdnZXN0ZWQgYnkKLSBLYWkgSGFycmVraWxkZS1QZXRlcnNlbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQKLSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAKLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksCi0gVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWVjYy5jLHYgJAotICogJFJldmlzaW9uOiAxLjMgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6MTAgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBSZWVkLVNvbG9tb24gZXJyb3IgY29ycmVjdGlvbiBjb2RlIAotICogICAgICBmb3IgdGhlIFFJQy00MC84MCBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgotCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWVjYy5oIgotCi0vKiBNYWNoaW5lcyB0aGF0IGFyZSBiaWctZW5kaWFuIHNob3VsZCBkZWZpbmUgbWFjcm8gQklHX0VORElBTi4KLSAqIFVuZm9ydHVuYXRlbHksIHRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgc3RhbmRhcmQgaW5jbHVkZSBmaWxlCi0gKiB0aGF0IHdvcmtzIGZvciBhbGwgT1NzLgotICovCi0KLSNpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX2hwcGEpCi0jZGVmaW5lIEJJR19FTkRJQU4KLSNlbmRpZgkJCQkvKiBfX3NwYXJjX18gfHwgX19ocHBhICovCi0KLSNpZiBkZWZpbmVkKF9fbWlwc19fKQotI2Vycm9yIEZpbmQgYSBzbWFydCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBFbmRpYW5uZXNzIG9mIHRoZSBNSVBTIENQVQotI2VuZGlmCi0KLS8qIE5vdGljZTogdG8gbWluaW1pemUgdGhlIHBvdGVudGlhbCBmb3IgY29uZnVzaW9uLCB3ZSB1c2UgciB0bwotICogICAgICAgICBkZW5vdGUgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlIG9mIHRoZSBwb2x5bm9taWFscyBpbiB0aGUKLSAqICAgICAgICAgR2Fsb2lzIEZpZWxkIEdGKDJeOCkuICBXZSByZXNlcnZlIHggZm9yIHBvbHlub21pYWxzIHRoYXQKLSAqICAgICAgICAgdGhhdCBoYXZlIGNvZWZmaWNpZW50cyBpbiBHRigyXjgpLgotICogICAgICAgICAKLSAqIFRoZSBHYWxvaXMgRmllbGQgaW4gd2hpY2ggY29lZmZpY2llbnQgYXJpdGhtZXRpYyBpcyBwZXJmb3JtZWQgYXJlCi0gKiB0aGUgcG9seW5vbWlhbHMgb3ZlciBaXzIgKGkuZS4sIDAgYW5kIDEpIG1vZHVsbyB0aGUgaXJyZWR1Y2libGUKLSAqIHBvbHlub21pYWwgZihyKSwgd2hlcmUgZihyKT1yXjggKyByXjcgKyByXjIgKyByICsgMS4gIEEgcG9seW5vbWlhbAotICogaXMgcmVwcmVzZW50ZWQgYXMgYSBieXRlIHdpdGggdGhlIE1TQiBhcyB0aGUgY29lZmZpY2llbnQgb2Ygcl43IGFuZAotICogdGhlIExTQiBhcyB0aGUgY29lZmZpY2llbnQgb2Ygcl4wLiAgRm9yIGV4YW1wbGUsIHRoZSBiaW5hcnkKLSAqIHJlcHJlc2VudGF0aW9uIG9mIGYoeCkgaXMgMHgxODcgKG9mIGNvdXJzZSwgdGhpcyBkb2Vzbid0IGZpdCBpbnRvIDgKLSAqIGJpdHMpLiAgSW4gdGhpcyBmaWVsZCwgdGhlIHBvbHlub21pYWwgciBpcyBhIHByaW1pdGl2ZSBlbGVtZW50LgotICogVGhhdCBpcywgcl5pIHdpdGggaSBpbiAwLC4uLiwyNTUgZW51bWVyYXRlcyBhbGwgZWxlbWVudHMgaW4gdGhlCi0gKiBmaWVsZC4KLSAqCi0gKiBUaGUgZ2VuZXJhdG9yIHBvbHlub21pYWwgZm9yIHRoZSBRSUMtODAgRUNDIGlzCi0gKgotICogICAgICBnKHgpID0geF4zICsgcl4xMDUqeF4yICsgcl4xMDUqeCArIDEKLSAqCi0gKiB3aGljaCBjYW4gYmUgZmFjdG9yZWQgaW50bzoKLSAqCi0gKiAgICAgIGcoeCkgPSAoeC1yXi0xKSh4LXJeMCkoeC1yXjEpCi0gKgotICogdGhlIGJ5dGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvZWZmaWNpZW50cyBhcmU6Ci0gKgotICogICAgICByXjEwNSA9IDB4YzAKLSAqICAgICAgcl4tMSAgPSAweGMzCi0gKiAgICAgIHJeMCAgID0gMHgwMQotICogICAgICByXjEgICA9IDB4MDIKLSAqCi0gKiBOb3RpY2UgdGhhdCByXi0xID0gcl4yNTQgYXMgZXhwb25lbnQgYXJpdGhtZXRpYyBpcyBwZXJmb3JtZWQKLSAqIG1vZHVsbyAyXjgtMSA9IDI1NS4KLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBHYWxvaXMgRmllbGRzIGFuZCBSZWVkLVNvbG9tb24gY29kZXMsIHJlZmVyCi0gKiB0byBhbnkgZ29vZCBib29rLiAgSSBmb3VuZCBfQW4gSW50cm9kdWN0aW9uIHRvIEVycm9yIENvcnJlY3RpbmcKLSAqIENvZGVzIHdpdGggQXBwbGljYXRpb25zXyBieSBTLiBBLiBWYW5zdG9uZSBhbmQgUC4gQy4gdmFuIE9vcnNjaG90Ci0gKiB0byBiZSBhIGdvb2QgaW50cm9kdWN0aW9uIGludG8gdGhlIGZvcm1lci4gIF9DT0RJTkcgVEhFT1JZOiBUaGUKLSAqIEVzc2VudGlhbHNfIEkgZm91bmQgdmVyeSB1c2VmdWwgZm9yIGl0cyBjb25jaXNlIGRlc2NyaXB0aW9uIG9mCi0gKiBSZWVkLVNvbG9tb24gZW5jb2RpbmcvZGVjb2RpbmcuCi0gKgotICovCi0KLXR5cGVkZWYgX191OCBNYXRyaXhbM11bM107Ci0KLS8qCi0gKiBnZnBvd1tdIGlzIGRlZmluZWQgc3VjaCB0aGF0IGdmcG93W2ldIHJldHVybnMgcl5pIGlmCi0gKiBpIGlzIGluIHRoZSByYW5nZSBbMC4uMjU1XS4KLSAqLwotc3RhdGljIGNvbnN0IF9fdTggZ2Zwb3dbXSA9Ci17Ci0JMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwKLQkweDg3LCAweDg5LCAweDk1LCAweGFkLCAweGRkLCAweDNkLCAweDdhLCAweGY0LAotCTB4NmYsIDB4ZGUsIDB4M2IsIDB4NzYsIDB4ZWMsIDB4NWYsIDB4YmUsIDB4ZmIsCi0JMHg3MSwgMHhlMiwgMHg0MywgMHg4NiwgMHg4YiwgMHg5MSwgMHhhNSwgMHhjZCwKLQkweDFkLCAweDNhLCAweDc0LCAweGU4LCAweDU3LCAweGFlLCAweGRiLCAweDMxLAotCTB4NjIsIDB4YzQsIDB4MGYsIDB4MWUsIDB4M2MsIDB4NzgsIDB4ZjAsIDB4NjcsCi0JMHhjZSwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHgzNywgMHg2ZSwgMHhkYywKLQkweDNmLCAweDdlLCAweGZjLCAweDdmLCAweGZlLCAweDdiLCAweGY2LCAweDZiLAotCTB4ZDYsIDB4MmIsIDB4NTYsIDB4YWMsIDB4ZGYsIDB4MzksIDB4NzIsIDB4ZTQsCi0JMHg0ZiwgMHg5ZSwgMHhiYiwgMHhmMSwgMHg2NSwgMHhjYSwgMHgxMywgMHgyNiwKLQkweDRjLCAweDk4LCAweGI3LCAweGU5LCAweDU1LCAweGFhLCAweGQzLCAweDIxLAotCTB4NDIsIDB4ODQsIDB4OGYsIDB4OTksIDB4YjUsIDB4ZWQsIDB4NWQsIDB4YmEsCi0JMHhmMywgMHg2MSwgMHhjMiwgMHgwMywgMHgwNiwgMHgwYywgMHgxOCwgMHgzMCwKLQkweDYwLCAweGMwLCAweDA3LCAweDBlLCAweDFjLCAweDM4LCAweDcwLCAweGUwLAotCTB4NDcsIDB4OGUsIDB4OWIsIDB4YjEsIDB4ZTUsIDB4NGQsIDB4OWEsIDB4YjMsCi0JMHhlMSwgMHg0NSwgMHg4YSwgMHg5MywgMHhhMSwgMHhjNSwgMHgwZCwgMHgxYSwKLQkweDM0LCAweDY4LCAweGQwLCAweDI3LCAweDRlLCAweDljLCAweGJmLCAweGY5LAotCTB4NzUsIDB4ZWEsIDB4NTMsIDB4YTYsIDB4Y2IsIDB4MTEsIDB4MjIsIDB4NDQsCi0JMHg4OCwgMHg5NywgMHhhOSwgMHhkNSwgMHgyZCwgMHg1YSwgMHhiNCwgMHhlZiwKLQkweDU5LCAweGIyLCAweGUzLCAweDQxLCAweDgyLCAweDgzLCAweDgxLCAweDg1LAotCTB4OGQsIDB4OWQsIDB4YmQsIDB4ZmQsIDB4N2QsIDB4ZmEsIDB4NzMsIDB4ZTYsCi0JMHg0YiwgMHg5NiwgMHhhYiwgMHhkMSwgMHgyNSwgMHg0YSwgMHg5NCwgMHhhZiwKLQkweGQ5LCAweDM1LCAweDZhLCAweGQ0LCAweDJmLCAweDVlLCAweGJjLCAweGZmLAotCTB4NzksIDB4ZjIsIDB4NjMsIDB4YzYsIDB4MGIsIDB4MTYsIDB4MmMsIDB4NTgsCi0JMHhiMCwgMHhlNywgMHg0OSwgMHg5MiwgMHhhMywgMHhjMSwgMHgwNSwgMHgwYSwKLQkweDE0LCAweDI4LCAweDUwLCAweGEwLCAweGM3LCAweDA5LCAweDEyLCAweDI0LAotCTB4NDgsIDB4OTAsIDB4YTcsIDB4YzksIDB4MTUsIDB4MmEsIDB4NTQsIDB4YTgsCi0JMHhkNywgMHgyOSwgMHg1MiwgMHhhNCwgMHhjZiwgMHgxOSwgMHgzMiwgMHg2NCwKLQkweGM4LCAweDE3LCAweDJlLCAweDVjLCAweGI4LCAweGY3LCAweDY5LCAweGQyLAotCTB4MjMsIDB4NDYsIDB4OGMsIDB4OWYsIDB4YjksIDB4ZjUsIDB4NmQsIDB4ZGEsCi0JMHgzMywgMHg2NiwgMHhjYywgMHgxZiwgMHgzZSwgMHg3YywgMHhmOCwgMHg3NywKLQkweGVlLCAweDViLCAweGI2LCAweGViLCAweDUxLCAweGEyLCAweGMzLCAweDAxCi19OwotCi0vKgotICogVGhpcyBpcyBhIGxvZyB0YWJsZS4gIFRoYXQgaXMsIGdmbG9nW3JeaV0gcmV0dXJucyBpIChtb2R1bG8gZihyKSkuCi0gKiBnZmxvZ1swXSBpcyB1bmRlZmluZWQgYW5kIHRoZSBmaXJzdCBlbGVtZW50IGlzIHRoZXJlZm9yZSBub3QgdmFsaWQuCi0gKi8KLXN0YXRpYyBjb25zdCBfX3U4IGdmbG9nWzI1Nl0gPQotewotCTB4ZmYsIDB4MDAsIDB4MDEsIDB4NjMsIDB4MDIsIDB4YzYsIDB4NjQsIDB4NmEsCi0JMHgwMywgMHhjZCwgMHhjNywgMHhiYywgMHg2NSwgMHg3ZSwgMHg2YiwgMHgyYSwKLQkweDA0LCAweDhkLCAweGNlLCAweDRlLCAweGM4LCAweGQ0LCAweGJkLCAweGUxLAotCTB4NjYsIDB4ZGQsIDB4N2YsIDB4MzEsIDB4NmMsIDB4MjAsIDB4MmIsIDB4ZjMsCi0JMHgwNSwgMHg1NywgMHg4ZSwgMHhlOCwgMHhjZiwgMHhhYywgMHg0ZiwgMHg4MywKLQkweGM5LCAweGQ5LCAweGQ1LCAweDQxLCAweGJlLCAweDk0LCAweGUyLCAweGI0LAotCTB4NjcsIDB4MjcsIDB4ZGUsIDB4ZjAsIDB4ODAsIDB4YjEsIDB4MzIsIDB4MzUsCi0JMHg2ZCwgMHg0NSwgMHgyMSwgMHgxMiwgMHgyYywgMHgwZCwgMHhmNCwgMHgzOCwKLQkweDA2LCAweDliLCAweDU4LCAweDFhLCAweDhmLCAweDc5LCAweGU5LCAweDcwLAotCTB4ZDAsIDB4YzIsIDB4YWQsIDB4YTgsIDB4NTAsIDB4NzUsIDB4ODQsIDB4NDgsCi0JMHhjYSwgMHhmYywgMHhkYSwgMHg4YSwgMHhkNiwgMHg1NCwgMHg0MiwgMHgyNCwKLQkweGJmLCAweDk4LCAweDk1LCAweGY5LCAweGUzLCAweDVlLCAweGI1LCAweDE1LAotCTB4NjgsIDB4NjEsIDB4MjgsIDB4YmEsIDB4ZGYsIDB4NGMsIDB4ZjEsIDB4MmYsCi0JMHg4MSwgMHhlNiwgMHhiMiwgMHgzZiwgMHgzMywgMHhlZSwgMHgzNiwgMHgxMCwKLQkweDZlLCAweDE4LCAweDQ2LCAweGE2LCAweDIyLCAweDg4LCAweDEzLCAweGY3LAotCTB4MmQsIDB4YjgsIDB4MGUsIDB4M2QsIDB4ZjUsIDB4YTQsIDB4MzksIDB4M2IsCi0JMHgwNywgMHg5ZSwgMHg5YywgMHg5ZCwgMHg1OSwgMHg5ZiwgMHgxYiwgMHgwOCwKLQkweDkwLCAweDA5LCAweDdhLCAweDFjLCAweGVhLCAweGEwLCAweDcxLCAweDVhLAotCTB4ZDEsIDB4MWQsIDB4YzMsIDB4N2IsIDB4YWUsIDB4MGEsIDB4YTksIDB4OTEsCi0JMHg1MSwgMHg1YiwgMHg3NiwgMHg3MiwgMHg4NSwgMHhhMSwgMHg0OSwgMHhlYiwKLQkweGNiLCAweDdjLCAweGZkLCAweGM0LCAweGRiLCAweDFlLCAweDhiLCAweGQyLAotCTB4ZDcsIDB4OTIsIDB4NTUsIDB4YWEsIDB4NDMsIDB4MGIsIDB4MjUsIDB4YWYsCi0JMHhjMCwgMHg3MywgMHg5OSwgMHg3NywgMHg5NiwgMHg1YywgMHhmYSwgMHg1MiwKLQkweGU0LCAweGVjLCAweDVmLCAweDRhLCAweGI2LCAweGEyLCAweDE2LCAweDg2LAotCTB4NjksIDB4YzUsIDB4NjIsIDB4ZmUsIDB4MjksIDB4N2QsIDB4YmIsIDB4Y2MsCi0JMHhlMCwgMHhkMywgMHg0ZCwgMHg4YywgMHhmMiwgMHgxZiwgMHgzMCwgMHhkYywKLQkweDgyLCAweGFiLCAweGU3LCAweDU2LCAweGIzLCAweDkzLCAweDQwLCAweGQ4LAotCTB4MzQsIDB4YjAsIDB4ZWYsIDB4MjYsIDB4MzcsIDB4MGMsIDB4MTEsIDB4NDQsCi0JMHg2ZiwgMHg3OCwgMHgxOSwgMHg5YSwgMHg0NywgMHg3NCwgMHhhNywgMHhjMSwKLQkweDIzLCAweDUzLCAweDg5LCAweGZiLCAweDE0LCAweDVkLCAweGY4LCAweDk3LAotCTB4MmUsIDB4NGIsIDB4YjksIDB4NjAsIDB4MGYsIDB4ZWQsIDB4M2UsIDB4ZTUsCi0JMHhmNiwgMHg4NywgMHhhNSwgMHgxNywgMHgzYSwgMHhhMywgMHgzYywgMHhiNwotfTsKLQotLyogVGhpcyBpcyBhIG11bHRpcGxpY2F0aW9uIHRhYmxlIGZvciB0aGUgZmFjdG9yIDB4YzAgKGkuZS4sIHJeMTA1IChtb2QgZihyKSkuCi0gKiBnZm11bF9jMFtmXSByZXR1cm5zIHJeMTA1ICogZihyKSAobW9kdWxvIGYocikpLgotICovCi1zdGF0aWMgY29uc3QgX191OCBnZm11bF9jMFsyNTZdID0KLXsKLQkweDAwLCAweGMwLCAweDA3LCAweGM3LCAweDBlLCAweGNlLCAweDA5LCAweGM5LAotCTB4MWMsIDB4ZGMsIDB4MWIsIDB4ZGIsIDB4MTIsIDB4ZDIsIDB4MTUsIDB4ZDUsCi0JMHgzOCwgMHhmOCwgMHgzZiwgMHhmZiwgMHgzNiwgMHhmNiwgMHgzMSwgMHhmMSwKLQkweDI0LCAweGU0LCAweDIzLCAweGUzLCAweDJhLCAweGVhLCAweDJkLCAweGVkLAotCTB4NzAsIDB4YjAsIDB4NzcsIDB4YjcsIDB4N2UsIDB4YmUsIDB4NzksIDB4YjksCi0JMHg2YywgMHhhYywgMHg2YiwgMHhhYiwgMHg2MiwgMHhhMiwgMHg2NSwgMHhhNSwKLQkweDQ4LCAweDg4LCAweDRmLCAweDhmLCAweDQ2LCAweDg2LCAweDQxLCAweDgxLAotCTB4NTQsIDB4OTQsIDB4NTMsIDB4OTMsIDB4NWEsIDB4OWEsIDB4NWQsIDB4OWQsCi0JMHhlMCwgMHgyMCwgMHhlNywgMHgyNywgMHhlZSwgMHgyZSwgMHhlOSwgMHgyOSwKLQkweGZjLCAweDNjLCAweGZiLCAweDNiLCAweGYyLCAweDMyLCAweGY1LCAweDM1LAotCTB4ZDgsIDB4MTgsIDB4ZGYsIDB4MWYsIDB4ZDYsIDB4MTYsIDB4ZDEsIDB4MTEsCi0JMHhjNCwgMHgwNCwgMHhjMywgMHgwMywgMHhjYSwgMHgwYSwgMHhjZCwgMHgwZCwKLQkweDkwLCAweDUwLCAweDk3LCAweDU3LCAweDllLCAweDVlLCAweDk5LCAweDU5LAotCTB4OGMsIDB4NGMsIDB4OGIsIDB4NGIsIDB4ODIsIDB4NDIsIDB4ODUsIDB4NDUsCi0JMHhhOCwgMHg2OCwgMHhhZiwgMHg2ZiwgMHhhNiwgMHg2NiwgMHhhMSwgMHg2MSwKLQkweGI0LCAweDc0LCAweGIzLCAweDczLCAweGJhLCAweDdhLCAweGJkLCAweDdkLAotCTB4NDcsIDB4ODcsIDB4NDAsIDB4ODAsIDB4NDksIDB4ODksIDB4NGUsIDB4OGUsCi0JMHg1YiwgMHg5YiwgMHg1YywgMHg5YywgMHg1NSwgMHg5NSwgMHg1MiwgMHg5MiwKLQkweDdmLCAweGJmLCAweDc4LCAweGI4LCAweDcxLCAweGIxLCAweDc2LCAweGI2LAotCTB4NjMsIDB4YTMsIDB4NjQsIDB4YTQsIDB4NmQsIDB4YWQsIDB4NmEsIDB4YWEsCi0JMHgzNywgMHhmNywgMHgzMCwgMHhmMCwgMHgzOSwgMHhmOSwgMHgzZSwgMHhmZSwKLQkweDJiLCAweGViLCAweDJjLCAweGVjLCAweDI1LCAweGU1LCAweDIyLCAweGUyLAotCTB4MGYsIDB4Y2YsIDB4MDgsIDB4YzgsIDB4MDEsIDB4YzEsIDB4MDYsIDB4YzYsCi0JMHgxMywgMHhkMywgMHgxNCwgMHhkNCwgMHgxZCwgMHhkZCwgMHgxYSwgMHhkYSwKLQkweGE3LCAweDY3LCAweGEwLCAweDYwLCAweGE5LCAweDY5LCAweGFlLCAweDZlLAotCTB4YmIsIDB4N2IsIDB4YmMsIDB4N2MsIDB4YjUsIDB4NzUsIDB4YjIsIDB4NzIsCi0JMHg5ZiwgMHg1ZiwgMHg5OCwgMHg1OCwgMHg5MSwgMHg1MSwgMHg5NiwgMHg1NiwKLQkweDgzLCAweDQzLCAweDg0LCAweDQ0LCAweDhkLCAweDRkLCAweDhhLCAweDRhLAotCTB4ZDcsIDB4MTcsIDB4ZDAsIDB4MTAsIDB4ZDksIDB4MTksIDB4ZGUsIDB4MWUsCi0JMHhjYiwgMHgwYiwgMHhjYywgMHgwYywgMHhjNSwgMHgwNSwgMHhjMiwgMHgwMiwKLQkweGVmLCAweDJmLCAweGU4LCAweDI4LCAweGUxLCAweDIxLCAweGU2LCAweDI2LAotCTB4ZjMsIDB4MzMsIDB4ZjQsIDB4MzQsIDB4ZmQsIDB4M2QsIDB4ZmEsIDB4M2EKLX07Ci0KLQotLyogUmV0dXJucyBWIG1vZHVsbyAyNTUgcHJvdmlkZWQgViBpcyBpbiB0aGUgcmFuZ2UgLTI1NSwtMjU0LC4uLiw1MDkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgX191OCBtb2QyNTUoaW50IHYpCi17Ci0JaWYgKHYgPiAwKSB7Ci0JCWlmICh2IDwgMjU1KSB7Ci0JCQlyZXR1cm4gdjsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiB2IC0gMjU1OwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHYgKyAyNTU7Ci0JfQotfQotCi0KLS8qIEFkZCB0d28gbnVtYmVycyBpbiB0aGUgZmllbGQuICBBZGRpdGlvbiBpbiB0aGlzIGZpZWxkIGlzIGVxdWl2YWxlbnQKLSAqIHRvIGEgYml0LXdpc2UgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbi0tLXN1YnRyYWN0aW9uIGlzIHRoZXJlZm9yZQotICogaWRlbnRpY2FsIHRvIGFkZGl0aW9uLgotICovCi1zdGF0aWMgaW5saW5lIF9fdTggZ2ZhZGQoX191OCBhLCBfX3U4IGIpCi17Ci0JcmV0dXJuIGEgXiBiOwotfQotCi0KLS8qIEFkZCB0d28gdmVjdG9ycyBvZiBudW1iZXJzIGluIHRoZSBmaWVsZC4gIEVhY2ggYnl0ZSBpbiBBIGFuZCBCIGdldHMKLSAqIGFkZGVkIGluZGl2aWR1YWxseS4KLSAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdmYWRkX2xvbmcodW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpCi17Ci0JcmV0dXJuIGEgXiBiOwotfQotCi0KLS8qIE11bHRpcGx5IHR3byBudW1iZXJzIGluIHRoZSBmaWVsZDoKLSAqLwotc3RhdGljIGlubGluZSBfX3U4IGdmbXVsKF9fdTggYSwgX191OCBiKQotewotCWlmIChhICYmIGIpIHsKLQkJcmV0dXJuIGdmcG93W21vZDI1NShnZmxvZ1thXSArIGdmbG9nW2JdKV07Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi0KLS8qIEp1c3QgbGlrZSBnZm11bCwgZXhjZXB0IHdlIGhhdmUgYWxyZWFkeSBsb29rZWQgdXAgdGhlIGxvZyBvZiB0aGUKLSAqIHNlY29uZCBudW1iZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgX191OCBnZm11bF9leHAoX191OCBhLCBpbnQgYikKLXsKLQlpZiAoYSkgewotCQlyZXR1cm4gZ2Zwb3dbbW9kMjU1KGdmbG9nW2FdICsgYildOwotCX0gZWxzZSB7Ci0JCXJldHVybiAwOwotCX0KLX0KLQotCi0vKiBKdXN0IGxpa2UgZ2ZtdWxfZXhwLCBleGNlcHQgdGhhdCBBIGlzIGEgdmVjdG9yIG9mIG51bWJlcnMuICBUaGF0Ci0gKiBpcywgZWFjaCBieXRlIGluIEEgZ2V0cyBtdWx0aXBsaWVkIGJ5IGdmcG93W21vZDI1NShCKV0uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZm11bF9leHBfbG9uZyh1bnNpZ25lZCBsb25nIGEsIGludCBiKQotewotCV9fdTggdDsKLQotCWlmIChzaXplb2YobG9uZykgPT0gNCkgewotCQlyZXR1cm4gKAotCQkoKHQgPSAoX191MzIpYSA+PiAyNCAmIDB4ZmYpID8KLQkJICgoKF9fdTMyKSBnZnBvd1ttb2QyNTUoZ2Zsb2dbdF0gKyBiKV0pIDw8IDI0KSA6IDApIHwKLQkJKCh0ID0gKF9fdTMyKWEgPj4gMTYgJiAweGZmKSA/Ci0JCSAoKChfX3UzMikgZ2Zwb3dbbW9kMjU1KGdmbG9nW3RdICsgYildKSA8PCAxNikgOiAwKSB8Ci0JCSgodCA9IChfX3UzMilhID4+IDggJiAweGZmKSA/Ci0JCSAoKChfX3UzMikgZ2Zwb3dbbW9kMjU1KGdmbG9nW3RdICsgYildKSA8PCA4KSA6IDApIHwKLQkJKCh0ID0gKF9fdTMyKWEgPj4gMCAmIDB4ZmYpID8KLQkJICgoKF9fdTMyKSBnZnBvd1ttb2QyNTUoZ2Zsb2dbdF0gKyBiKV0pIDw8IDApIDogMCkpOwotCX0gZWxzZSBpZiAoc2l6ZW9mKGxvbmcpID09IDgpIHsKLQkJcmV0dXJuICgKLQkJKCh0ID0gKF9fdTY0KWEgPj4gNTYgJiAweGZmKSA/Ci0JCSAoKChfX3U2NCkgZ2Zwb3dbbW9kMjU1KGdmbG9nW3RdICsgYildKSA8PCA1NikgOiAwKSB8Ci0JCSgodCA9IChfX3U2NClhID4+IDQ4ICYgMHhmZikgPwotCQkgKCgoX191NjQpIGdmcG93W21vZDI1NShnZmxvZ1t0XSArIGIpXSkgPDwgNDgpIDogMCkgfAotCQkoKHQgPSAoX191NjQpYSA+PiA0MCAmIDB4ZmYpID8KLQkJICgoKF9fdTY0KSBnZnBvd1ttb2QyNTUoZ2Zsb2dbdF0gKyBiKV0pIDw8IDQwKSA6IDApIHwKLQkJKCh0ID0gKF9fdTY0KWEgPj4gMzIgJiAweGZmKSA/Ci0JCSAoKChfX3U2NCkgZ2Zwb3dbbW9kMjU1KGdmbG9nW3RdICsgYildKSA8PCAzMikgOiAwKSB8Ci0JCSgodCA9IChfX3U2NClhID4+IDI0ICYgMHhmZikgPwotCQkgKCgoX191NjQpIGdmcG93W21vZDI1NShnZmxvZ1t0XSArIGIpXSkgPDwgMjQpIDogMCkgfAotCQkoKHQgPSAoX191NjQpYSA+PiAxNiAmIDB4ZmYpID8KLQkJICgoKF9fdTY0KSBnZnBvd1ttb2QyNTUoZ2Zsb2dbdF0gKyBiKV0pIDw8IDE2KSA6IDApIHwKLQkJKCh0ID0gKF9fdTY0KWEgPj4gOCAmIDB4ZmYpID8KLQkJICgoKF9fdTY0KSBnZnBvd1ttb2QyNTUoZ2Zsb2dbdF0gKyBiKV0pIDw8IDgpIDogMCkgfAotCQkoKHQgPSAoX191NjQpYSA+PiAwICYgMHhmZikgPwotCQkgKCgoX191NjQpIGdmcG93W21vZDI1NShnZmxvZ1t0XSArIGIpXSkgPDwgMCkgOiAwKSk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQkJVFJBQ0VfQUJPUlQoLTEsIGZ0X3RfZXJyLCAiRXJyb3I6IHNpemUgb2YgbG9uZyBpcyAlZCBieXRlcyIsCi0JCQkgICAgKGludClzaXplb2YobG9uZykpOwotCX0KLX0KLQotCi0vKiBEaXZpZGUgdHdvIG51bWJlcnMgaW4gdGhlIGZpZWxkLiAgUmV0dXJucyBhL2IgKG1vZHVsbyBmKHgpKS4KLSAqLwotc3RhdGljIGlubGluZSBfX3U4IGdmZGl2KF9fdTggYSwgX191OCBiKQotewotCWlmICghYikgewotCQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQlUUkFDRV9BQk9SVCgweGZmLCBmdF90X2J1ZywgIkVycm9yOiBkaXZpc2lvbiBieSB6ZXJvIik7Ci0JfSBlbHNlIGlmIChhID09IDApIHsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGdmcG93W21vZDI1NShnZmxvZ1thXSAtIGdmbG9nW2JdKV07Ci0JfQotfQotCi0KLS8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHJldHVybiB0aGUgaW52ZXJzZSBvZiB0aGUgbWF0cml4IG9mIHRoZQotICogbGluZWFyIHN5c3RlbSB0aGF0IG5lZWRzIHRvIGJlIHNvbHZlZCB0byBkZXRlcm1pbmUgdGhlIGVycm9yCi0gKiBtYWduaXR1ZGVzLiAgVGhlIGZpcnN0IGRlYWxzIHdpdGggbWF0cmljZXMgb2YgcmFuayAzLCB3aGlsZSB0aGUKLSAqIHNlY29uZCBkZWFscyB3aXRoIG1hdHJpY2VzIG9mIHJhbmsgMi4gIFRoZSBlcnJvciBpbmRpY2VzIGFyZSBwYXNzZWQKLSAqIGluIGFyZ3VtZW50cyBMMCwuLixMMiAoMD1maXJzdCBzZWN0b3IsIDMxPWxhc3Qgc2VjdG9yKS4gIFRoZSBlcnJvcgotICogaW5kaWNlcyBtdXN0IGJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIsIGkuZS4sIEwwPEwxPEwyLgotICoKLSAqIFRoZSBsaW5lYXIgc3lzdGVtIHRoYXQgbmVlZHMgdG8gYmUgc29sdmVkIGZvciB0aGUgZXJyb3IgbWFnbml0dWRlcwotICogaXMgQSAqIGIgPSBzLCB3aGVyZSBzIGlzIHRoZSBrbm93biB2ZWN0b3Igb2Ygc3luZHJvbWVzLCBiIGlzIHRoZQotICogdmVjdG9yIG9mIGVycm9yIG1hZ25pdHVkZXMgYW5kIEEgaW4gdGhlIE9SREVSPTMgY2FzZToKLSAqCi0gKiAgICBBXzMgPSB7ezEvcl5MWzBdLCAxL3JeTFsxXSwgMS9yXkxbMl19LAotICogICAgICAgICAgeyAgICAgICAgMSwgICAgICAgIDEsICAgICAgICAxfSwKLSAqICAgICAgICAgIHsgcl5MWzBdLCByXkxbMV0sIHJeTFsyXX19IAotICovCi1zdGF0aWMgaW5saW5lIGludCBnZmludjMoX191OCBsMCwKLQkJCSBfX3U4IGwxLCAKLQkJCSBfX3U4IGwyLCAKLQkJCSBNYXRyaXggQWludikKLXsKLQlfX3U4IGRldDsKLQlfX3U4IHQyMCwgdDEwLCB0MjEsIHQxMiwgdDAxLCB0MDI7Ci0JaW50IGxvZ19kZXQ7Ci0KLQkvKiBjb21wdXRlIHNvbWUgaW50ZXJtZWRpYXRlIHJlc3VsdHM6ICovCi0JdDIwID0gZ2Zwb3dbbDIgLSBsMF07CSAgICAgICAgLyogdDIwID0gcl5sMi9yXmwwICovCi0JdDEwID0gZ2Zwb3dbbDEgLSBsMF07CSAgICAgICAgLyogdDEwID0gcl5sMS9yXmwwICovCi0JdDIxID0gZ2Zwb3dbbDIgLSBsMV07CSAgICAgICAgLyogdDIxID0gcl5sMi9yXmwxICovCi0JdDEyID0gZ2Zwb3dbbDEgLSBsMiArIDI1NV07CS8qIHQxMiA9IHJebDEvcl5sMiAqLwotCXQwMSA9IGdmcG93W2wwIC0gbDEgKyAyNTVdOwkvKiB0MDEgPSByXmwwL3JebDEgKi8KLQl0MDIgPSBnZnBvd1tsMCAtIGwyICsgMjU1XTsJLyogdDAyID0gcl5sMC9yXmwyICovCi0JLyogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBtYXRyaXggQV8zXi0xIChzb21ldGltZXMKLQkgKiBjYWxsZWQgdGhlIFZhbmRlcm1vbmRlIGRldGVybWluYW50KToKLQkgKi8KLQlkZXQgPSBnZmFkZCh0MjAsIGdmYWRkKHQxMCwgZ2ZhZGQodDIxLCBnZmFkZCh0MTIsIGdmYWRkKHQwMSwgdDAyKSkpKSk7Ci0JaWYgKCFkZXQpIHsKLQkJVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQkJVFJBQ0VfQUJPUlQoMCwgZnRfdF9lcnIsCi0JCQkgICAiSW52ZXJzaW9uIGZhaWxlZCAoMyBDUkMgZXJyb3JzLCA+MCBDUkMgZmFpbHVyZXMpIik7Ci0JfQotCWxvZ19kZXQgPSAyNTUgLSBnZmxvZ1tkZXRdOwotCi0JLyogTm93LCBjYWxjdWxhdGUgYWxsIG9mIHRoZSBjb2VmZmljaWVudHM6Ci0JICovCi0JQWludlswXVswXT0gZ2ZtdWxfZXhwKGdmYWRkKGdmcG93W2wxXSwgZ2Zwb3dbbDJdKSwgbG9nX2RldCk7Ci0JQWludlswXVsxXT0gZ2ZtdWxfZXhwKGdmYWRkKHQyMSwgdDEyKSwgbG9nX2RldCk7Ci0JQWludlswXVsyXT0gZ2ZtdWxfZXhwKGdmYWRkKGdmcG93WzI1NSAtIGwxXSwgZ2Zwb3dbMjU1IC0gbDJdKSxsb2dfZGV0KTsKLQotCUFpbnZbMV1bMF09IGdmbXVsX2V4cChnZmFkZChnZnBvd1tsMF0sIGdmcG93W2wyXSksIGxvZ19kZXQpOwotCUFpbnZbMV1bMV09IGdmbXVsX2V4cChnZmFkZCh0MjAsIHQwMiksIGxvZ19kZXQpOwotCUFpbnZbMV1bMl09IGdmbXVsX2V4cChnZmFkZChnZnBvd1syNTUgLSBsMF0sIGdmcG93WzI1NSAtIGwyXSksbG9nX2RldCk7Ci0KLQlBaW52WzJdWzBdPSBnZm11bF9leHAoZ2ZhZGQoZ2Zwb3dbbDBdLCBnZnBvd1tsMV0pLCBsb2dfZGV0KTsKLQlBaW52WzJdWzFdPSBnZm11bF9leHAoZ2ZhZGQodDEwLCB0MDEpLCBsb2dfZGV0KTsKLQlBaW52WzJdWzJdPSBnZm11bF9leHAoZ2ZhZGQoZ2Zwb3dbMjU1IC0gbDBdLCBnZnBvd1syNTUgLSBsMV0pLGxvZ19kZXQpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIGlubGluZSBpbnQgZ2ZpbnYyKF9fdTggbDAsIF9fdTggbDEsIE1hdHJpeCBBaW52KQotewotCV9fdTggZGV0OwotCV9fdTggdDEsIHQyOwotCWludCBsb2dfZGV0OwotCi0JdDEgPSBnZnBvd1syNTUgLSBsMF07Ci0JdDIgPSBnZnBvd1syNTUgLSBsMV07Ci0JZGV0ID0gZ2ZhZGQodDEsIHQyKTsKLQlpZiAoIWRldCkgewotCQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQlUUkFDRV9BQk9SVCgwLCBmdF90X2VyciwKLQkJCSAgICJJbnZlcnNpb24gZmFpbGVkICgyIENSQyBlcnJvcnMsID4wIENSQyBmYWlsdXJlcykiKTsKLQl9Ci0JbG9nX2RldCA9IDI1NSAtIGdmbG9nW2RldF07Ci0KLQkvKiBOb3csIGNhbGN1bGF0ZSBhbGwgb2YgdGhlIGNvZWZmaWNpZW50czoKLQkgKi8KLQlBaW52WzBdWzBdID0gQWludlsxXVswXSA9IGdmcG93W2xvZ19kZXRdOwotCi0JQWludlswXVsxXSA9IGdmbXVsX2V4cCh0MiwgbG9nX2RldCk7Ci0JQWludlsxXVsxXSA9IGdmbXVsX2V4cCh0MSwgbG9nX2RldCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotCi0vKiBNdWx0aXBseSBtYXRyaXggQSBieSB2ZWN0b3IgUyBhbmQgcmV0dXJuIHJlc3VsdCBpbiB2ZWN0b3IgQi4gIE0gaXMKLSAqIGFzc3VtZWQgdG8gYmUgb2Ygb3JkZXIgTnhOLCBTIGFuZCBCIG9mIG9yZGVyIE54MS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGdmbWF0X211bChpbnQgbiwgTWF0cml4IEEsIAotCQkJICAgICBfX3U4ICpzLCBfX3U4ICpiKQotewotCWludCBpLCBqOwotCV9fdTggZG90X3Byb2Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7Ci0JCWRvdF9wcm9kID0gMDsKLQkJZm9yIChqID0gMDsgaiA8IG47ICsraikgewotCQkJZG90X3Byb2QgPSBnZmFkZChkb3RfcHJvZCwgZ2ZtdWwoQVtpXVtqXSwgc1tqXSkpOwotCQl9Ci0JCWJbaV0gPSBkb3RfcHJvZDsKLQl9Ci19Ci0MCi0KLQotLyogVGhlIFJlZWQgU29sb21vbiBFQ0MgY29kZXMgYXJlIGNvbXB1dGVkIG92ZXIgdGhlIE4tdGggYnl0ZSBvZiBlYWNoCi0gKiBibG9jaywgd2hlcmUgTj1TRUNUT1JfU0laRS4gIFRoZXJlIGFyZSB1cCB0byAyOSBibG9ja3Mgb2YgZGF0YSwgYW5kCi0gKiAzIGJsb2NrcyBvZiBFQ0MuICBUaGUgYmxvY2tzIGFyZSBzdG9yZWQgY29udGlndW91c2x5IGluIG1lbW9yeS4gIEEKLSAqIHNlZ21lbnQsIGNvbnNlcXVlbnRseSwgaXMgYXNzdW1lZCB0byBoYXZlIGF0IGxlYXN0IDQgYmxvY2tzOiBvbmUgb3IKLSAqIG1vcmUgZGF0YSBibG9ja3MgcGx1cyB0aHJlZSBFQ0MgYmxvY2tzLgotICoKLSAqIE5vdGljZTogSW4gUUlDLTgwIHNwZWFrLCBhIENSQyBlcnJvciBpcyBhIHNlY3RvciB3aXRoIGFuIGluY29ycmVjdAotICogICAgICAgICBDUkMuICBBIENSQyBmYWlsdXJlIGlzIGEgc2VjdG9yIHdpdGggaW5jb3JyZWN0IGRhdGEsIGJ1dAotICogICAgICAgICBhIHZhbGlkIENSQy4gIEluIHRoZSBlcnJvciBjb250cm9sIGxpdGVyYXR1cmUsIHRoZSBmb3JtZXIKLSAqICAgICAgICAgaXMgdXN1YWxseSBjYWxsZWQgImVyYXN1cmUiLCB0aGUgbGF0dGVyICJlcnJvci4iCi0gKi8KLS8qIENvbXB1dGUgdGhlIHBhcml0eSBieXRlcyBmb3IgQyBjb2x1bW5zIG9mIGRhdGEsIHdoZXJlIEMgaXMgdGhlCi0gKiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBmaXQgaW50byBhIGxvbmcgaW50ZWdlci4gIFdlIHVzZSBhIGxpbmVhcgotICogZmVlZC1iYWNrIHJlZ2lzdGVyIHRvIGRvIHRoaXMuICBUaGUgcGFyaXR5IGJ5dGVzIFBbMF0sIFBbU1RSSURFXSwKLSAqIFBbMipTVFJJREVdIGFyZSBjb21wdXRlZCBzdWNoIHRoYXQ6Ci0gKgotICogICAgICAgICAgICAgIHheayAqIHAoeCkgKyBtKHgpID0gMCAobW9kdWxvIGcoeCkpCi0gKgotICogd2hlcmUgayA9IE5CTE9DS1MsCi0gKiAgICAgICBwKHgpID0gUFswXSArIFBbU1RSSURFXSp4ICsgUFsyKlNUUklERV0qeF4yLCBhbmQKLSAqICAgICAgIG0oeCkgPSBzdW1fe2k9MH1eayBtX2kqeF5pLgotICogICAgICAgbV9pID0gREFUQVtpKlNFQ1RPUl9TSVpFXQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Bhcml0eSh1bnNpZ25lZCBsb25nICpkYXRhLAotCQkJICAgICAgaW50IG5ibG9ja3MsIAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqcCwgCi0JCQkgICAgICBpbnQgc3RyaWRlKQotewotCXVuc2lnbmVkIGxvbmcgcDAsIHAxLCBwMiwgdDEsIHQyLCAqZW5kOwotCi0JZW5kID0gZGF0YSArIG5ibG9ja3MgKiAoRlRfU0VDVE9SX1NJWkUgLyBzaXplb2YobG9uZykpOwotCXAwID0gcDEgPSBwMiA9IDA7Ci0Jd2hpbGUgKGRhdGEgPCBlbmQpIHsKLQkJLyogVGhlIG5ldyBwYXJpdHkgYnl0ZXMgcDBfaSwgcDFfaSwgcDJfaSBhcmUgY29tcHV0ZWQKLQkJICogZnJvbSB0aGUgb2xkIHZhbHVlcyBwMF97aS0xfSwgcDFfe2ktMX0sIHAyX3tpLTF9Ci0JCSAqIHJlY3Vyc2l2ZWx5IGFzOgotCQkgKgotCQkgKiAgICAgICAgcDBfaSA9IHAxX3tpLTF9ICsgcl4xMDUgKiAobV97aS0xfSAtIHAwX3tpLTF9KQotCQkgKiAgICAgICAgcDFfaSA9IHAyX3tpLTF9ICsgcl4xMDUgKiAobV97aS0xfSAtIHAwX3tpLTF9KQotCQkgKiAgICAgICAgcDJfaSA9ICAgICAgICAgICAgICAgICAgICAobV97aS0xfSAtIHAwX3tpLTF9KQotCQkgKgotCQkgKiBXaXRoIHRoZSBpbml0aWFsIGNvbmRpdGlvbjogcDBfMCA9IHAxXzAgPSBwMl8wID0gMC4KLQkJICovCi0JCXQxID0gZ2ZhZGRfbG9uZygqZGF0YSwgcDApOwotCQkvKgotCQkgKiBNdWx0aXBseSBlYWNoIGJ5dGUgaW4gdDEgYnkgMHhjMDoKLQkJICovCi0JCWlmIChzaXplb2YobG9uZykgPT0gNCkgewotCQkJdDI9ICgoKF9fdTMyKSBnZm11bF9jMFsoX191MzIpdDEgPj4gMjQgJiAweGZmXSkgPDwgMjQgfAotCQkJICAgICAoKF9fdTMyKSBnZm11bF9jMFsoX191MzIpdDEgPj4gMTYgJiAweGZmXSkgPDwgMTYgfAotCQkJICAgICAoKF9fdTMyKSBnZm11bF9jMFsoX191MzIpdDEgPj4gIDggJiAweGZmXSkgPDwgIDggfAotCQkJICAgICAoKF9fdTMyKSBnZm11bF9jMFsoX191MzIpdDEgPj4gIDAgJiAweGZmXSkgPDwgIDApOwotCQl9IGVsc2UgaWYgKHNpemVvZihsb25nKSA9PSA4KSB7Ci0JCQl0Mj0gKCgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiA1NiAmIDB4ZmZdKSA8PCA1NiB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiA0OCAmIDB4ZmZdKSA8PCA0OCB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiA0MCAmIDB4ZmZdKSA8PCA0MCB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiAzMiAmIDB4ZmZdKSA8PCAzMiB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiAyNCAmIDB4ZmZdKSA8PCAyNCB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiAxNiAmIDB4ZmZdKSA8PCAxNiB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiAgOCAmIDB4ZmZdKSA8PCAgOCB8Ci0JCQkgICAgICgoX191NjQpIGdmbXVsX2MwWyhfX3U2NCl0MSA+PiAgMCAmIDB4ZmZdKSA8PCAgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQkJVFJBQ0UoZnRfdF9lcnIsICJFcnJvcjogbG9uZyBpcyBvZiBzaXplICVkIiwKLQkJCSAgICAgIChpbnQpIHNpemVvZihsb25nKSk7Ci0JCQlUUkFDRV9FWElUOwotCQl9Ci0JCXAwID0gZ2ZhZGRfbG9uZyh0MiwgcDEpOwotCQlwMSA9IGdmYWRkX2xvbmcodDIsIHAyKTsKLQkJcDIgPSB0MTsKLQkJZGF0YSArPSBGVF9TRUNUT1JfU0laRSAvIHNpemVvZihsb25nKTsKLQl9Ci0JKnAgPSBwMDsKLQlwICs9IHN0cmlkZTsKLQkqcCA9IHAxOwotCXAgKz0gc3RyaWRlOwotCSpwID0gcDI7Ci0JcmV0dXJuOwotfQotCi0KLS8qIENvbXB1dGUgdGhlIDMgc3luZHJvbWUgdmFsdWVzLiAgREFUQSBzaG91bGQgcG9pbnQgdG8gdGhlIGZpcnN0IGJ5dGUKLSAqIG9mIHRoZSBjb2x1bW4gZm9yIHdoaWNoIHRoZSBzeW5kcm9tZXMgYXJlIGRlc2lyZWQuICBUaGUgc3luZHJvbWVzCi0gKiBhcmUgY29tcHV0ZWQgb3ZlciB0aGUgZmlyc3QgTkJMT0NLUyBvZiByb3dzLiAgVGhlIHRocmVlIGJ5dGVzIHdpbGwKLSAqIGJlIHBsYWNlZCBpbiBTWzBdLCBTWzFdLCBhbmQgU1syXS4KLSAqCi0gKiBTW2ldIGlzIHRoZSB2YWx1ZSBvZiB0aGUgIm1lc3NhZ2UiIHBvbHlub21pYWwgbSh4KSBldmFsdWF0ZWQgYXQgdGhlCi0gKiBpLXRoIHJvb3Qgb2YgdGhlIGdlbmVyYXRvciBwb2x5bm9taWFsIGcoeCkuCi0gKgotICogQXMgZyh4KT0oeC1yXi0xKSh4LTEpKHgtcl4xKSB3ZSBldmFsdWF0ZSB0aGUgbWVzc2FnZSBwb2x5bm9taWFsIGF0Ci0gKiB4PXJeLTEgdG8gZ2V0IFNbMF0sIGF0IHg9cl4wPTEgdG8gZ2V0IFNbMV0sIGFuZCBhdCB4PXIgdG8gZ2V0IFNbMl0uCi0gKiBUaGlzIGNvdWxkIGJlIGRvbmUgZGlyZWN0bHkgYW5kIGVmZmljaWVudGx5IHZpYSB0aGUgSG9ybmVyIHNjaGVtZS4KLSAqIEhvd2V2ZXIsIGl0IHdvdWxkIHJlcXVpcmUgbXVsdGlwbGljYXRpb24gdGFibGVzIGZvciB0aGUgZmFjdG9ycwotICogcl4tMSAoMHhjMykgYW5kIHIgKDB4MDIpLiAgVGhlIGZvbGxvd2luZyBzY2hlbWUgZG9lcyBub3QgcmVxdWlyZQotICogYW55IG11bHRpcGxpY2F0aW9uIHRhYmxlcyBiZXlvbmQgd2hhdCdzIG5lZWRlZCBmb3Igc2V0X3Bhcml0eSgpCi0gKiBhbnl3YXkgYW5kIGlzIHNsaWdodGx5IGZhc3RlciBpZiB0aGVyZSBhcmUgbm8gZXJyb3JzIGFuZCBzbGlnaHRseQotICogc2xvd2VyIGlmIHRoZXJlIGFyZSBlcnJvcnMuICBUaGUgbGF0dGVyIGlzIGhvcGVmdWxseSB0aGUgaW5mcmVxdWVudAotICogY2FzZS4KLSAqCi0gKiBUbyB1bmRlcnN0YW5kIHRoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0sIG5vdGljZSB0aGF0IHNldF9wYXJpdHkobSwKLSAqIGssIHApIGNvbXB1dGVzIHBhcml0eSBieXRlcyBzdWNoIHRoYXQ6Ci0gKgotICogICAgICB4XmsgKiBwKHgpID0gbSh4KSAobW9kdWxvIGcoeCkpLgotICoKLSAqIFRoYXQgaXMsIHRvIGV2YWx1YXRlIG0ocl5tKSwgd2hlcmUgcl5tIGlzIGEgcm9vdCBvZiBnKHgpLCB3ZSBjYW4KLSAqIHNpbXBseSBldmFsdWF0ZSAocl5tKV5rKnAocl5tKS4gIEFsc28sIG5vdGljZSB0aGF0IHAgaXMgMCBpZiBhbmQKLSAqIG9ubHkgaWYgcyBpcyB6ZXJvLiAgVGhhdCBpcywgaWYgYWxsIHBhcml0eSBieXRlcyBhcmUgMCwgd2Uga25vdwotICogdGhlcmUgaXMgbm8gZXJyb3IgaW4gdGhlIGRhdGEgYW5kIGNvbnNlcXVlbnRseSB0aGVyZSBpcyBubyBuZWVkIHRvCi0gKiBjb21wdXRlIHMoeCkgYXQgYWxsISAgSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBjb21wdXRlIHMoeCkgZnJvbSBwKHgpCi0gKiBieSBldmFsdWF0aW5nIChyXm0pXmsqcChyXm0pIGZvciBtPS0xLCBtPTAsIGFuZCBtPTEuICBUaGUgcCh4KQotICogcG9seW5vbWlhbCBpcyBldmFsdWF0ZWQgdmlhIHRoZSBIb3JuZXIgc2NoZW1lLgotICovCi1zdGF0aWMgaW50IGNvbXB1dGVfc3luZHJvbWVzKHVuc2lnbmVkIGxvbmcgKmRhdGEsIGludCBuYmxvY2tzLCB1bnNpZ25lZCBsb25nICpzKQotewotCXVuc2lnbmVkIGxvbmcgcFszXTsKLQotCXNldF9wYXJpdHkoZGF0YSwgbmJsb2NrcywgcCwgMSk7Ci0JaWYgKHBbMF0gfCBwWzFdIHwgcFsyXSkgewotCQkvKiBTb21lIG9mIHRoZSBjaGVja2VkIGNvbHVtbnMgZG8gbm90IGhhdmUgYSB6ZXJvCi0JCSAqIHN5bmRyb21lLiAgRm9yIHNpbXBsaWNpdHksIHdlIGNvbXB1dGUgdGhlIHN5bmRyb21lcwotCQkgKiBmb3IgYWxsIGNvbHVtbnMgdGhhdCB3ZSBoYXZlIGNvbXB1dGVkIHRoZQotCQkgKiByZW1haW5kZXJzIGZvci4KLQkJICovCi0JCXNbMF0gPSBnZm11bF9leHBfbG9uZygKLQkJCWdmYWRkX2xvbmcocFswXSwgCi0JCQkJICAgZ2ZtdWxfZXhwX2xvbmcoCi0JCQkJCSAgIGdmYWRkX2xvbmcocFsxXSwgCi0JCQkJCQkgICAgICBnZm11bF9leHBfbG9uZyhwWzJdLCAtMSkpLAotCQkJCQkgICAtMSkpLCAKLQkJCS1uYmxvY2tzKTsKLQkJc1sxXSA9IGdmYWRkX2xvbmcoZ2ZhZGRfbG9uZyhwWzJdLCBwWzFdKSwgcFswXSk7Ci0JCXNbMl0gPSBnZm11bF9leHBfbG9uZygKLQkJCWdmYWRkX2xvbmcocFswXSwgCi0JCQkJICAgZ2ZtdWxfZXhwX2xvbmcoCi0JCQkJCSAgIGdmYWRkX2xvbmcocFsxXSwKLQkJCQkJCSAgICAgIGdmbXVsX2V4cF9sb25nKHBbMl0sIDEpKSwKLQkJCQkJICAgMSkpLAotCQkJbmJsb2Nrcyk7Ci0JCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCXJldHVybiAxOwotCX0KLX0KLQotCi0vKiBDb3JyZWN0IHRoZSBibG9jayBpbiB0aGUgY29sdW1uIHBvaW50ZWQgdG8gYnkgREFUQS4gIFRoZXJlIGFyZSBOQkFECi0gKiBDUkMgZXJyb3JzIGFuZCB0aGVpciBpbmRpY2VzIGFyZSBpbiBCQURfTE9DWzBdLCB1cCB0bwotICogQkFEX0xPQ1tOQkFELTFdLiAgSWYgTkJBRD4xLCBBaW52IGhvbGRzIHRoZSBpbnZlcnNlIG9mIHRoZSBtYXRyaXgKLSAqIG9mIHRoZSBsaW5lYXIgc3lzdGVtIHRoYXQgbmVlZHMgdG8gYmUgc29sdmVkIHRvIGRldGVybWluZSB0aGUgZXJyb3IKLSAqIG1hZ25pdHVkZXMuICBTWzBdLCBTWzFdLCBhbmQgU1syXSBhcmUgdGhlIHN5bmRyb21lIHZhbHVlcy4gIElmIHJvdwotICogaiBnZXRzIGNvcnJlY3RlZCwgdGhlbiBiaXQgaiB3aWxsIGJlIHNldCBpbiBDT1JSRUNUSU9OX01BUC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgY29ycmVjdF9ibG9jayhfX3U4ICpkYXRhLCBpbnQgbmJsb2NrcywKLQkJCQlpbnQgbmJhZCwgaW50ICpiYWRfbG9jLCBNYXRyaXggQWludiwKLQkJCQlfX3U4ICpzLAotCQkJCVNlY3Rvck1hcCAqIGNvcnJlY3Rpb25fbWFwKQotewotCWludCBuY29ycmVjdGVkID0gMDsKLQlpbnQgaTsKLQlfX3U4IHQxLCB0MjsKLQlfX3U4IGMwLCBjMSwgYzI7CS8qIGNoZWNrIGJ5dGVzICovCi0JX191OCBlcnJvcl9tYWdbM10sIGxvZ19lcnJvcl9tYWc7Ci0JX191OCAqZHAsIGwsIGU7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCXN3aXRjaCAobmJhZCkgewotCWNhc2UgMDoKLQkJLyogbWlnaHQgaGF2ZSBhIENSQyBmYWlsdXJlOiAqLwotCQlpZiAoc1swXSA9PSAwKSB7Ci0JCQkvKiBtb3JlIHRoYW4gb25lIGVycm9yICovCi0JCQlUUkFDRV9BQk9SVCgtMSwgZnRfdF9lcnIsCi0JCQkJICJFQ0MgZmFpbGVkICgwIENSQyBlcnJvcnMsID4xIENSQyBmYWlsdXJlcykiKTsKLQkJfQotCQl0MSA9IGdmZGl2KHNbMV0sIHNbMF0pOwotCQlpZiAoKGJhZF9sb2NbbmJhZCsrXSA9IGdmbG9nW3QxXSkgPj0gbmJsb2NrcykgewotCQkJVFJBQ0UoZnRfdF9lcnIsCi0JCQkgICAgICAiRUNDIGZhaWxlZCAoMCBDUkMgZXJyb3JzLCA+MSBDUkMgZmFpbHVyZXMpIik7Ci0JCQlUUkFDRV9BQk9SVCgtMSwgZnRfdF9lcnIsCi0JCQkJICAiYXR0ZW1wdCB0byBjb3JyZWN0IGRhdGEgYXQgJWQiLCBiYWRfbG9jWzBdKTsKLQkJfQotCQllcnJvcl9tYWdbMF0gPSBzWzFdOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXQxID0gZ2ZhZGQoZ2ZtdWxfZXhwKHNbMV0sIGJhZF9sb2NbMF0pLCBzWzJdKTsKLQkJdDIgPSBnZmFkZChnZm11bF9leHAoc1swXSwgYmFkX2xvY1swXSksIHNbMV0pOwotCQlpZiAodDEgPT0gMCAmJiB0MiA9PSAwKSB7Ci0JCQkvKiBvbmUgZXJhc3VyZSwgbm8gZXJyb3I6ICovCi0JCQlBaW52WzBdWzBdID0gZ2Zwb3dbYmFkX2xvY1swXV07Ci0JCX0gZWxzZSBpZiAodDEgPT0gMCB8fCB0MiA9PSAwKSB7Ci0JCQkvKiBvbmUgZXJhc3VyZSBhbmQgbW9yZSB0aGFuIG9uZSBlcnJvcjogKi8KLQkJCVRSQUNFX0FCT1JUKC0xLCBmdF90X2VyciwKLQkJCQkgICAgIkVDQyBmYWlsZWQgKDEgZXJhc3VyZSwgPjEgZXJyb3IpIik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBvbmUgZXJhc3VyZSwgb25lIGVycm9yOiAqLwotCQkJaWYgKChiYWRfbG9jW25iYWQrK10gPSBnZmxvZ1tnZmRpdih0MSwgdDIpXSkgCi0JCQkgICAgPj0gbmJsb2NrcykgewotCQkJCVRSQUNFKGZ0X3RfZXJyLCAiRUNDIGZhaWxlZCAiCi0JCQkJICAgICAgIigxIENSQyBlcnJvcnMsID4xIENSQyBmYWlsdXJlcykiKTsKLQkJCQlUUkFDRV9BQk9SVCgtMSwgZnRfdF9lcnIsCi0JCQkJCSAgICAiYXR0ZW1wdCB0byBjb3JyZWN0IGRhdGEgYXQgJWQiLAotCQkJCQkgICAgYmFkX2xvY1sxXSk7Ci0JCQl9Ci0JCQlpZiAoIWdmaW52MihiYWRfbG9jWzBdLCBiYWRfbG9jWzFdLCBBaW52KSkgewotCQkJCS8qIGludmVyc2lvbiBmYWlsZWQtLS1tdXN0IGhhdmUgbW9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgdGhhbiBvbmUgZXJyb3IgCi0JCQkJICovCi0JCQkJVFJBQ0VfRVhJVCAtMTsKLQkJCX0KLQkJfQotCQkvKiBGQUxMIFRIUk9VR0ggVE8gRVJST1IgTUFHTklUVURFIENPTVBVVEFUSU9OOgotCQkgKi8KLQljYXNlIDI6Ci0JY2FzZSAzOgotCQkvKiBjb21wdXRlIGVycm9yIG1hZ25pdHVkZXM6ICovCi0JCWdmbWF0X211bChuYmFkLCBBaW52LCBzLCBlcnJvcl9tYWcpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVRSQUNFX0FCT1JUKC0xLCBmdF90X2VyciwKLQkJCSAgICAiSW50ZXJuYWwgRXJyb3I6IG51bWJlciBvZiBDUkMgZXJyb3JzID4gMyIpOwotCX0KLQotCS8qIFBlcmZvcm0gY29ycmVjdGlvbiBieSBhZGRpbmcgRVJST1JfTUFHW2ldIHRvIHRoZSBieXRlIGF0Ci0JICogb2Zmc2V0IEJBRF9MT0NbaV0uICBBbHNvIGFkZCB0aGUgdmFsdWUgb2YgdGhlIGNvbXB1dGVkCi0JICogZXJyb3IgcG9seW5vbWlhbCB0byB0aGUgc3luZHJvbWUgdmFsdWVzLiAgSWYgdGhlIGNvcnJlY3Rpb24KLQkgKiB3YXMgc3VjY2Vzc2Z1bCwgdGhlIHJlc3VsdGluZyBjaGVjayBieXRlcyBzaG91bGQgYmUgemVybwotCSAqIChpLmUuLCB0aGUgY29ycmVjdGVkIGRhdGEgaXMgYSB2YWxpZCBjb2RlIHdvcmQpLgotCSAqLwotCWMwID0gc1swXTsKLQljMSA9IHNbMV07Ci0JYzIgPSBzWzJdOwotCWZvciAoaSA9IDA7IGkgPCBuYmFkOyArK2kpIHsKLQkJZSA9IGVycm9yX21hZ1tpXTsKLQkJaWYgKGUpIHsKLQkJCS8qIGNvcnJlY3QgdGhlIGJ5dGUgYXQgb2Zmc2V0IEwgYnkgbWFnbml0dWRlIEU6ICovCi0JCQlsID0gYmFkX2xvY1tpXTsKLQkJCWRwID0gJmRhdGFbbCAqIEZUX1NFQ1RPUl9TSVpFXTsKLQkJCSpkcCA9IGdmYWRkKCpkcCwgZSk7Ci0JCQkqY29ycmVjdGlvbl9tYXAgfD0gMSA8PCBsOwotCQkJKytuY29ycmVjdGVkOwotCi0JCQlsb2dfZXJyb3JfbWFnID0gZ2Zsb2dbZV07Ci0JCQljMCA9IGdmYWRkKGMwLCBnZnBvd1ttb2QyNTUobG9nX2Vycm9yX21hZyAtIGwpXSk7Ci0JCQljMSA9IGdmYWRkKGMxLCBlKTsKLQkJCWMyID0gZ2ZhZGQoYzIsIGdmcG93W21vZDI1NShsb2dfZXJyb3JfbWFnICsgbCldKTsKLQkJfQotCX0KLQlpZiAoYzAgfHwgYzEgfHwgYzIpIHsKLQkJVFJBQ0VfQUJPUlQoLTEsIGZ0X3RfZXJyLAotCQkJICAgICJFQ0Mgc2VsZi1jaGVjayBmYWlsZWQsIHRvbyBtYW55IGVycm9ycyIpOwotCX0KLQlUUkFDRV9FWElUIG5jb3JyZWN0ZWQ7Ci19Ci0KLQotI2lmIGRlZmluZWQoRUNDX1NBTklUWV9DSEVDSykgfHwgZGVmaW5lZChFQ0NfUEFSQU5PSUQpCi0KLS8qIFBlcmZvcm0gYSBzYW5pdHkgY2hlY2sgb24gdGhlIGNvbXB1dGVkIHBhcml0eSBieXRlczoKLSAqLwotc3RhdGljIGludCBzYW5pdHlfY2hlY2sodW5zaWduZWQgbG9uZyAqZGF0YSwgaW50IG5ibG9ja3MpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQl1bnNpZ25lZCBsb25nIHNbM107Ci0KLQlpZiAoIWNvbXB1dGVfc3luZHJvbWVzKGRhdGEsIG5ibG9ja3MsIHMpKSB7Ci0JCVRSQUNFX0FCT1JUKDAsIGZ0X2J1ZywKLQkJCSAgICAiSW50ZXJuYWwgRXJyb3I6IHN5bmRyb21lIHNlbGYtY2hlY2sgZmFpbGVkIik7Ci0JfQotCVRSQUNFX0VYSVQgMTsKLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoRUNDX1NBTklUWV9DSEVDSykgfHwgZGVmaW5lZChFQ0NfUEFSQU5PSUQpICovCi0KLS8qIENvbXB1dGUgdGhlIHBhcml0eSBmb3IgYW4gZW50aXJlIHNlZ21lbnQgb2YgZGF0YS4KLSAqLwotaW50IGZ0YXBlX2VjY19zZXRfc2VnbWVudF9wYXJpdHkoc3RydWN0IG1lbW9yeV9zZWdtZW50ICptc2VnKQotewotCWludCBpOwotCV9fdTggKnBhcml0eV9ieXRlczsKLQotCXBhcml0eV9ieXRlcyA9ICZtc2VnLT5kYXRhWyhtc2VnLT5ibG9ja3MgLSAzKSAqIEZUX1NFQ1RPUl9TSVpFXTsKLQlmb3IgKGkgPSAwOyBpIDwgRlRfU0VDVE9SX1NJWkU7IGkgKz0gc2l6ZW9mKGxvbmcpKSB7Ci0JCXNldF9wYXJpdHkoKHVuc2lnbmVkIGxvbmcgKikgJm1zZWctPmRhdGFbaV0sIG1zZWctPmJsb2NrcyAtIDMsCi0JCQkgICAodW5zaWduZWQgbG9uZyAqKSAmcGFyaXR5X2J5dGVzW2ldLAotCQkJICAgRlRfU0VDVE9SX1NJWkUgLyBzaXplb2YobG9uZykpOwotI2lmZGVmIEVDQ19QQVJBTk9JRAotCQlpZiAoIXNhbml0eV9jaGVjaygodW5zaWduZWQgbG9uZyAqKSAmbXNlZy0+ZGF0YVtpXSwKLQkJCQkgICBtc2VnLT5ibG9ja3MpKSB7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLSNlbmRpZgkJCQkvKiBFQ0NfUEFSQU5PSUQgKi8KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogQ2hlY2tzIGFuZCBjb3JyZWN0cyAoaWYgcG9zc2libGUpIHRoZSBzZWdtZW50IE1TRUcuICBSZXR1cm5zIG9uZSBvZgotICogRUNDX09LLCBFQ0NfQ09SUkVDVEVELCBhbmQgRUNDX0ZBSUxFRC4KLSAqLwotaW50IGZ0YXBlX2VjY19jb3JyZWN0X2RhdGEoc3RydWN0IG1lbW9yeV9zZWdtZW50ICptc2VnKQotewotCWludCBjb2wsIGksIHJlc3VsdDsKLQlpbnQgbmNvcnJlY3RlZCA9IDA7Ci0JaW50IG5lcmFzdXJlcyA9IDA7CS8qICMgb2YgZXJhc3VyZXMgKENSQyBlcnJvcnMpICovCi0JaW50IGVyYXN1cmVfbG9jWzNdOwkvKiBlcmFzdXJlIGxvY2F0aW9ucyAqLwotCXVuc2lnbmVkIGxvbmcgc3NbM107Ci0JX191OCBzWzNdOwotCU1hdHJpeCBBaW52OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JbXNlZy0+Y29ycmVjdGVkID0gMDsKLQotCS8qIGZpbmQgZmlyc3QgY29sdW1uIHRoYXQgaGFzIG5vbi16ZXJvIHN5bmRyb21lczogKi8KLQlmb3IgKGNvbCA9IDA7IGNvbCA8IEZUX1NFQ1RPUl9TSVpFOyBjb2wgKz0gc2l6ZW9mKGxvbmcpKSB7Ci0JCWlmICghY29tcHV0ZV9zeW5kcm9tZXMoKHVuc2lnbmVkIGxvbmcgKikgJm1zZWctPmRhdGFbY29sXSwKLQkJCQkgICAgICAgbXNlZy0+YmxvY2tzLCBzcykpIHsKLQkJCS8qIHNvbWV0aGluZyBpcyB3cm9uZy0tLWhhdmUgdG8gZml4IHRoaW5ncyAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNvbCA+PSBGVF9TRUNUT1JfU0laRSkgewotCQkvKiBhbGwgc3luZHJvbWVzIGFyZSBvaywgdGhlcmVmb3JlIG5vdGhpbmcgdG8gY29ycmVjdCAqLwotCQlUUkFDRV9FWElUIEVDQ19PSzsKLQl9Ci0JLyogY291bnQgdGhlIG51bWJlciBvZiBDUkMgZXJyb3JzIGlmIHRoZXJlIHdlcmUgYW55OiAqLwotCWlmIChtc2VnLT5yZWFkX2JhZCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbXNlZy0+YmxvY2tzOyBpKyspIHsKLQkJCWlmIChCQURfQ0hFQ0sobXNlZy0+cmVhZF9iYWQsIGkpKSB7Ci0JCQkJaWYgKG5lcmFzdXJlcyA+PSAzKSB7Ci0JCQkJCS8qIHRoaXMgaXMgdG9vIG11Y2ggZm9yIEVDQyAqLwotCQkJCQlUUkFDRV9BQk9SVChFQ0NfRkFJTEVELCBmdF90X2VyciwKLQkJCQkJCSJFQ0MgZmFpbGVkICg+MyBDUkMgZXJyb3JzKSIpOwotCQkJCX0JLyogaWYgKi8KLQkJCQllcmFzdXJlX2xvY1tuZXJhc3VyZXMrK10gPSBpOwotCQkJfQotCQl9Ci0JfQotCS8qCi0JICogSWYgdGhlcmUgYXJlIGF0IGxlYXN0IDIgQ1JDIGVycm9ycywgZGV0ZXJtaW5lIGludmVyc2Ugb2YgbWF0cml4Ci0JICogb2YgbGluZWFyIHN5c3RlbSB0byBiZSBzb2x2ZWQ6Ci0JICovCi0Jc3dpdGNoIChuZXJhc3VyZXMpIHsKLQljYXNlIDI6Ci0JCWlmICghZ2ZpbnYyKGVyYXN1cmVfbG9jWzBdLCBlcmFzdXJlX2xvY1sxXSwgQWludikpIHsKLQkJCVRSQUNFX0VYSVQgRUNDX0ZBSUxFRDsKLQkJfQotCQlicmVhazsKLQljYXNlIDM6Ci0JCWlmICghZ2ZpbnYzKGVyYXN1cmVfbG9jWzBdLCBlcmFzdXJlX2xvY1sxXSwKLQkJCSAgICBlcmFzdXJlX2xvY1syXSwgQWludikpIHsKLQkJCVRSQUNFX0VYSVQgRUNDX0ZBSUxFRDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiB0aGlzIGlzIG5vdCBhbiBlcnJvciBjb25kaXRpb24uLi4gKi8KLQkJYnJlYWs7Ci0JfQotCi0JZG8gewotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGxvbmcpOyArK2kpIHsKLQkJCXNbMF0gPSBzc1swXTsKLQkJCXNbMV0gPSBzc1sxXTsKLQkJCXNbMl0gPSBzc1syXTsKLQkJCWlmIChzWzBdIHwgc1sxXSB8IHNbMl0pIHsKLSNpZmRlZiBCSUdfRU5ESUFOCi0JCQkJcmVzdWx0ID0gY29ycmVjdF9ibG9jaygKLQkJCQkJJm1zZWctPmRhdGFbY29sICsgc2l6ZW9mKGxvbmcpIC0gMSAtIGldLAotCQkJCQltc2VnLT5ibG9ja3MsCi0JCQkJCW5lcmFzdXJlcywKLQkJCQkJZXJhc3VyZV9sb2MsCi0JCQkJCUFpbnYsCi0JCQkJCXMsCi0JCQkJCSZtc2VnLT5jb3JyZWN0ZWQpOwotI2Vsc2UKLQkJCQlyZXN1bHQgPSBjb3JyZWN0X2Jsb2NrKCZtc2VnLT5kYXRhW2NvbCArIGldLAotCQkJCQkJICAgICAgIG1zZWctPmJsb2NrcywKLQkJCQkJCSAgICAgICBuZXJhc3VyZXMsCi0JCQkJCQkgICAgICAgZXJhc3VyZV9sb2MsCi0JCQkJCQkgICAgICAgQWludiwKLQkJCQkJCSAgICAgICBzLAotCQkJCQkJICAgICAgICZtc2VnLT5jb3JyZWN0ZWQpOwotI2VuZGlmCi0JCQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCQkJVFJBQ0VfRVhJVCBFQ0NfRkFJTEVEOwotCQkJCX0KLQkJCQluY29ycmVjdGVkICs9IHJlc3VsdDsKLQkJCX0KLQkJCXNzWzBdID4+PSA4OwotCQkJc3NbMV0gPj49IDg7Ci0JCQlzc1syXSA+Pj0gODsKLQkJfQotCi0jaWZkZWYgRUNDX1NBTklUWV9DSEVDSwotCQlpZiAoIXNhbml0eV9jaGVjaygodW5zaWduZWQgbG9uZyAqKSAmbXNlZy0+ZGF0YVtjb2xdLAotCQkJCSAgbXNlZy0+YmxvY2tzKSkgewotCQkJVFJBQ0VfRVhJVCBFQ0NfRkFJTEVEOwotCQl9Ci0jZW5kaWYJCQkJLyogRUNDX1NBTklUWV9DSEVDSyAqLwotCi0JCS8qIGZpbmQgbmV4dCBjb2x1bW4gd2l0aCBub24temVybyBzeW5kcm9tZXM6ICovCi0JCXdoaWxlICgoY29sICs9IHNpemVvZihsb25nKSkgPCBGVF9TRUNUT1JfU0laRSkgewotCQkJaWYgKCFjb21wdXRlX3N5bmRyb21lcygodW5zaWduZWQgbG9uZyAqKQotCQkJCSAgICAmbXNlZy0+ZGF0YVtjb2xdLCBtc2VnLT5ibG9ja3MsIHNzKSkgewotCQkJCS8qIHNvbWV0aGluZyBpcyB3cm9uZy0tLWhhdmUgdG8gZml4IHRoaW5ncyAqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSB3aGlsZSAoY29sIDwgRlRfU0VDVE9SX1NJWkUpOwotCWlmIChuY29ycmVjdGVkICYmIG5lcmFzdXJlcyA9PSAwKSB7Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgImJsb2NrIGNvbnRhaW5lZCBlcnJvciBub3QgY2F1Z2h0IGJ5IENSQyIpOwotCX0KLQlUUkFDRSgobmNvcnJlY3RlZCA+IDApID8gZnRfdF9ub2lzZSA6IGZ0X3RfYW55LCAibnVtYmVyIG9mIGNvcnJlY3Rpb25zOiAlZCIsIG5jb3JyZWN0ZWQpOwotCVRSQUNFX0VYSVQgbmNvcnJlY3RlZCA/IEVDQ19DT1JSRUNURUQgOiBFQ0NfT0s7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZWNjLmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZWNjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MjkxNDYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWVjYy5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotI2lmbmRlZiBfRlRBUEVfRUNDX0hfCi0jZGVmaW5lIF9GVEFQRV9FQ0NfSF8KLQotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkzIE5pbmcgYW5kIERhdmlkIE1vc2Jlcmdlci4KLSAqICAgICAgT3JpZ2luYWw6Ci0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5MyBCYXMgTGFhcmhvdmVuLgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTIgRGF2aWQgTC4gQnJvd24sIEpyLgotIAotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQKLSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAKLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksCi0gVVNBLgotIAotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1lY2MuaCx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE4OjExICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZQotICogICAgICBSZWVkLVNvbG9tb24gZXJyb3IgY29ycmVjdGlvbiBjb2RlIAotICogICAgICBmb3IgdGhlIFFJQy00MC84MCB0YXBlIHN0cmVhbWVyIGRldmljZSBkcml2ZXIuCi0gKi8KLQotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotCi0jZGVmaW5lIEJBRF9DTEVBUihlbnRyeSkgKChlbnRyeSk9MCkKLSNkZWZpbmUgQkFEX1NFVChlbnRyeSxzZWN0b3IpICgoZW50cnkpfD0oMTw8KHNlY3RvcikpKQotI2RlZmluZSBCQURfQ0hFQ0soZW50cnksc2VjdG9yKSAoKGVudHJ5KSYoMTw8KHNlY3RvcikpKQotCi0vKgotICogUmV0dXJuIHZhbHVlcyBmb3IgZWNjX2NvcnJlY3RfZGF0YToKLSAqLwotZW51bSB7Ci0JRUNDX09LLAkJCS8qIERhdGEgd2FzIGNvcnJlY3QuICovCi0JRUNDX0NPUlJFQ1RFRCwJCS8qIENvcnJlY3RhYmxlIGVycm9yIGluIGRhdGEuICovCi0JRUNDX0ZBSUxFRCwJCS8qIENvdWxkIG5vdCBjb3JyZWN0IGRhdGEuICovCi19OwotCi0vKgotICogUmVwcmVzZW50YXRpb24gb2YgYW4gaW4gbWVtb3J5IHNlZ21lbnQuICBNQVJLRURfQkFEIGxpc3RzIHRoZQotICogc2VjdG9ycyB0aGF0IHdlcmUgbWFya2VkIGJhZCBkdXJpbmcgZm9ybWF0dGluZy4gIElmIHRoZSBOLXRoIHNlY3RvcgotICogaW4gYSBzZWdtZW50IGlzIG1hcmtlZCBiYWQsIGJpdCAxPDxOIHdpbGwgYmUgc2V0IGluIE1BUktFRF9CQUQuCi0gKiBUaGUgc2VjdG9ycyBzaG91bGQgYmUgcmVhZCBpbiBmcm9tIHRoZSBkaXNrIGFuZCBwYWNrZWQsIGFzIGlmIHRoZQotICogYmFkIHNlY3RvcnMgd2VyZSBub3QgdGhlcmUsIGFuZCB0aGUgc2VnbWVudCBqdXN0IGNvbnRhaW5lZCBmZXdlcgotICogc2VjdG9ycy4gIFJFQURfU0VDVE9SUyBpcyBhIGJpdG1hcCBvZiBlcnJvcnMgZW5jb3VudGVyZWQgd2hpbGUKLSAqIHJlYWRpbmcgdGhlIGRhdGEuICBUaGVzZSBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byB0aGUgcGFja2VkIGRhdGEuCi0gKiBCTE9DS1MgaXMgYSBjb3VudCBvZiB0aGUgc2VjdG9ycyBub3QgbWFya2VkIGJhZC4gIFRoaXMgaXMganVzdCB0bwotICogcHJldmVudCBoYXZpbmcgdG8gY291bnQgdGhlIHplcm8gYml0cyBpbiBNQVJLRURfQkFEIGVhY2ggdGltZSB0aGlzCi0gKiBpcyBuZWVkZWQuICBEQVRBIGlzIHRoZSBhY3R1YWwgc2VjdG9yIHBhY2tlZCBkYXRhIGZyb20gKG9yIHRvKSB0aGUKLSAqIHRhcGUuCi0gKi8KLSBzdHJ1Y3QgbWVtb3J5X3NlZ21lbnQgewotCVNlY3Rvck1hcCBtYXJrZWRfYmFkOwotCVNlY3Rvck1hcCByZWFkX2JhZDsKLSAJaW50IGJsb2NrczsKLSAJX191OCAqZGF0YTsKLQlTZWN0b3JNYXAgY29ycmVjdGVkOwotIH07Ci0KLS8qCi0gKiBlY2MuYyBkZWZpbmVkIGdsb2JhbCB2YXJpYWJsZXM6Ci0gKi8KLSNpZmRlZiBURVNUCi1leHRlcm4gaW50IGZ0YXBlX2VjY190cmFjaW5nOwotI2VuZGlmCi0KLS8qCi0gKiBlY2MuYyBkZWZpbmVkIGdsb2JhbCBmdW5jdGlvbnM6Ci0gKi8KLWV4dGVybiBpbnQgZnRhcGVfZWNjX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbWVtb3J5X3NlZ21lbnQgKmRhdGEpOwotZXh0ZXJuIGludCBmdGFwZV9lY2Nfc2V0X3NlZ21lbnRfcGFyaXR5KHN0cnVjdCBtZW1vcnlfc2VnbWVudCAqZGF0YSk7Ci0KLSNlbmRpZgkvKiBfRlRBUEVfRUNDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZm9ybWF0LmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZm9ybWF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZDRjNTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWZvcm1hdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1mb3JtYXQuYyx2ICQKLSAqICRSZXZpc2lvbjogMS4yLjQuMSAkCi0gKiAkRGF0ZTogMTk5Ny8xMS8xNCAxNjowNTozOSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdG8gc3VwcG9ydCBmb3JtYXR0aW5nIG9mIGZsb3BweQotICogICAgICB0YXBlIGNhcnRyaWRnZXMgd2l0aCB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMCBmbG9wcHktdGFwZQotICogICAgICBkcml2ZXIgImZ0YXBlIiBmb3IgTGludXguCi0gKi8KLSAKLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9xaWMxMTcuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW8uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1ydy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWVjYy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWZvcm1hdC5oIgotCi0jaWYgZGVmaW5lZChURVNUSU5HKQotI2RlZmluZSBGVF9GTVRfU0VHU19QRVJfQlVGIDUwCi0jZWxzZQotI2RlZmluZSBGVF9GTVRfU0VHU19QRVJfQlVGIChGVF9CVUZGX1NJWkUvKDQqRlRfU0VDVE9SU19QRVJfU0VHTUVOVCkpCi0jZW5kaWYKLQotc3RhdGljIHNwaW5sb2NrX3QgZnRhcGVfZm9ybWF0X2xvY2s7Ci0KLS8qCi0gKiAgZmlyc3Qgc2VnbWVudCBvZiB0aGUgbmV3IGJ1ZmZlcgotICovCi1zdGF0aWMgaW50IHN3aXRjaF9zZWdtZW50OwotCi0vKgotICogIGF0IG1vc3QgMjU2IHNlZ21lbnRzIGZpdCBpbnRvIG9uZSAzMiBrYiBidWZmZXIuICBFdmVuIFRSLTEgY2FydHJpZGdlcyBoYXZlCi0gKiAgbW9yZSB0aGFuIHRoaXMgbWFueSBzZWdtZW50cyBwZXIgdHJhY2ssIHNvIGJldHRlciBiZSBjYXJlZnVsLgotICoKLSAqICBidWZmZXJfc3RydWN0ICpidWZmOiBidWZmZXIgdG8gc3RvcmUgdGhlIGZvcm1hdHRpbmcgY29vcmRpbmF0ZXMgaW4KLSAqICBpbnQgIHN0YXJ0OiBzdGFydGluZyBzZWdtZW50IGZvciB0aGlzIGJ1ZmZlci4KLSAqICBpbnQgICAgc3B0OiBzZWdtZW50cyBwZXIgdHJhY2sKLSAqCi0gKiAgTm90ZTogc2VnbWVudCBpZHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgdHJhY2sgaGVyZS4KLSAqLwotc3RhdGljIHZvaWQgc2V0dXBfZm9ybWF0X2J1ZmZlcihidWZmZXJfc3RydWN0ICpidWZmLCBpbnQgc3RhcnQsIGludCBzcHQsCi0JCQkJX191OCBnYXAzKQotewotCWludCB0b19kbyA9IHNwdCAtIHN0YXJ0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHRvX2RvID4gRlRfRk1UX1NFR1NfUEVSX0JVRikgewotCQl0b19kbyA9IEZUX0ZNVF9TRUdTX1BFUl9CVUY7Ci0JfQotCWJ1ZmYtPnB0ciAgICAgICAgICA9IGJ1ZmYtPmFkZHJlc3M7Ci0JYnVmZi0+cmVtYWluaW5nICAgID0gdG9fZG8gKiBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UOyAvKiAjIHNlY3RvcnMgKi8KLQlidWZmLT5ieXRlcyAgICAgICAgPSBidWZmLT5yZW1haW5pbmcgKiA0OyAvKiBuZWVkIDQgYnl0ZXMgcGVyIHNlY3RvciAqLwotCWJ1ZmYtPmdhcDMgICAgICAgICA9IGdhcDM7Ci0JYnVmZi0+c2VnbWVudF9pZCAgID0gc3RhcnQ7Ci0JYnVmZi0+bmV4dF9zZWdtZW50ID0gc3RhcnQgKyB0b19kbzsKLQlpZiAoYnVmZi0+bmV4dF9zZWdtZW50ID49IHNwdCkgewotCQlidWZmLT5uZXh0X3NlZ21lbnQgPSAwOyAvKiAwIG1lYW5zOiBzdG9wIHJ1bm5lciAqLwotCX0KLQlidWZmLT5zdGF0dXMgICAgICAgPSB3YWl0aW5nOyAvKiB0ZWxscyB0aGUgaXNyIHRoYXQgaXQgY2FuIHVzZQotCQkJCSAgICAgICAqIHRoaXMgYnVmZmVyCi0JCQkJICAgICAgICovCi0JVFJBQ0VfRVhJVDsKLX0KLQotCi0vKgotICogIHN0YXJ0IGZvcm1hdHRpbmcgYSBuZXcgdHJhY2suCi0gKi8KLWludCBmdGFwZV9mb3JtYXRfdHJhY2soY29uc3QgdW5zaWduZWQgaW50IHRyYWNrLCBjb25zdCBfX3U4IGdhcDMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlidWZmZXJfc3RydWN0ICp0YWlsLCAqaGVhZDsKLQlpbnQgc3RhdHVzOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnBhdXNlLCAmc3RhdHVzKSwpOwotCWlmICh0cmFjayAmIDEpIHsKLQkJaWYgKCEoc3RhdHVzICYgUUlDX1NUQVRVU19BVF9FT1QpKSB7Ci0JCQlUUkFDRV9DQVRDSChmdGFwZV9zZWVrX3RvX2VvdCgpLCk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoIShzdGF0dXMgJiBRSUNfU1RBVFVTX0FUX0JPVCkpIHsKLQkJCVRSQUNFX0NBVENIKGZ0YXBlX3NlZWtfdG9fYm90KCksKTsKLQkJfQotCX0KLQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsgLyogdGhpcyBzZXRzIGZ0X2hlYWQgPSBmdF90YWlsID0gMCAqLwotCWZ0YXBlX3NldF9zdGF0ZShmb3JtYXR0aW5nKTsKLQotCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JICAgICAgIkZvcm1hdHRpbmcgdHJhY2sgJWQsIGxvZ2ljYWw6IGZyb20gc2VnbWVudCAlZCB0byAlZCIsCi0JICAgICAgdHJhY2ssIHRyYWNrICogZnRfc2VnbWVudHNfcGVyX3RyYWNrLCAKLQkgICAgICAodHJhY2sgKyAxKSAqIGZ0X3NlZ21lbnRzX3Blcl90cmFjayAtIDEpOwotCQotCS8qCi0JICogIGluaXRpYWxpemUgdGhlIGJ1ZmZlciBzd2l0Y2hpbmcgcHJvdG9jb2wgZm9yIHRoaXMgdHJhY2sKLQkgKi8KLQloZWFkID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsgLyogdGFwZSBpc24ndCBydW5uaW5nIHlldCAqLwotCXRhaWwgPSBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX3RhaWwpOyAvKiB0YXBlIGlzbid0IHJ1bm5pbmcgeWV0ICovCi0Jc3dpdGNoX3NlZ21lbnQgPSAwOwotCWRvIHsKLQkJRlRfU0lHTkFMX0VYSVQoX0RPTlRfQkxPQ0spOwotCQlzZXR1cF9mb3JtYXRfYnVmZmVyKHRhaWwsIHN3aXRjaF9zZWdtZW50LAotCQkJCSAgICBmdF9zZWdtZW50c19wZXJfdHJhY2ssIGdhcDMpOwotCQlzd2l0Y2hfc2VnbWVudCA9IHRhaWwtPm5leHRfc2VnbWVudDsKLQl9IHdoaWxlICgoc3dpdGNoX3NlZ21lbnQgIT0gMCkgJiYKLQkJICgodGFpbCA9IGZ0YXBlX25leHRfYnVmZmVyKGZ0X3F1ZXVlX3RhaWwpKSAhPSBoZWFkKSk7Ci0JLyogZ28gKi8KLQloZWFkLT5zdGF0dXMgPSBmb3JtYXR0aW5nOwotCVRSQUNFX0NBVENIKGZ0YXBlX3NlZWtfaGVhZF90b190cmFjayh0cmFjayksKTsKLQlUUkFDRV9DQVRDSChmdGFwZV9jb21tYW5kKFFJQ19MT0dJQ0FMX0ZPUldBUkQpLCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZ0YXBlX2Zvcm1hdF9sb2NrLCBmbGFncyk7Ci0JVFJBQ0VfQ0FUQ0goZmRjX3NldHVwX2Zvcm1hdHRpbmcoaGVhZCksIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmdGFwZV9mb3JtYXRfbG9jaywgZmxhZ3MpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogICByZXR1cm4gc2VnbWVudCBpZCBvZiBzZWdtZW50IGN1cnJlbnRseSBiZWluZyBmb3JtYXR0ZWQgYW5kIGRvIHRoZQotICogICBidWZmZXIgc3dpdGNoaW5nIHN0dWZmLgotICovCi1pbnQgZnRhcGVfZm9ybWF0X3N0YXR1cyh1bnNpZ25lZCBpbnQgKnNlZ21lbnRfaWQpCi17Ci0JYnVmZmVyX3N0cnVjdCAqdGFpbCA9IGZ0YXBlX2dldF9idWZmZXIoZnRfcXVldWVfdGFpbCk7Ci0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCXdoaWxlIChzd2l0Y2hfc2VnbWVudCAhPSAwICYmCi0JICAgICAgIGZ0YXBlX2dldF9idWZmZXIoZnRfcXVldWVfaGVhZCkgIT0gdGFpbCkgewotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JCS8qICBuZWVkIG1vcmUgYnVmZmVycywgZmlyc3Qgd2FpdCBmb3IgZW1wdHkgYnVmZmVyCi0JCSAqLwotCQlUUkFDRV9DQVRDSChmdGFwZV93YWl0X3NlZ21lbnQoZm9ybWF0dGluZyksKTsKLQkJLyogIGRvbid0IHdvcnJ5IGZvciBnYXAzLiBJZiB3ZSBldmVyIGhpdCB0aGlzIHBpZWNlIG9mIGNvZGUsCi0JCSAqICB0aGVuIGFsbCBidWZmZXIgYWxyZWFkeSBoYXZlIHRoZSBjb3JyZWN0IGdhcDMgc2V0IQotCQkgKi8KLQkJc2V0dXBfZm9ybWF0X2J1ZmZlcih0YWlsLCBzd2l0Y2hfc2VnbWVudCwKLQkJCQkgICAgZnRfc2VnbWVudHNfcGVyX3RyYWNrLCB0YWlsLT5nYXAzKTsKLQkJc3dpdGNoX3NlZ21lbnQgPSB0YWlsLT5uZXh0X3NlZ21lbnQ7Ci0JCWlmIChzd2l0Y2hfc2VnbWVudCAhPSAwKSB7Ci0JCQl0YWlsID0gZnRhcGVfbmV4dF9idWZmZXIoZnRfcXVldWVfdGFpbCk7Ci0JCX0KLQl9Ci0JLyogICAgc2hvdWxkIHJ1bm5lciBzdG9wID8KLQkgKi8KLQlpZiAoZnRfcnVubmVyX3N0YXR1cyA9PSBhYm9ydGluZyB8fCBmdF9ydW5uZXJfc3RhdHVzID09IGRvX2Fib3J0KSB7Ci0JCWJ1ZmZlcl9zdHJ1Y3QgKmhlYWQgPSBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX2hlYWQpOwotCQlUUkFDRShmdF90X3dhcm4sICJFcnJvciBmb3JtYXR0aW5nIHNlZ21lbnQgJWQiLAotCQkgICAgICBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX2hlYWQpLT5zZWdtZW50X2lkKTsKLQkJKHZvaWQpZnRhcGVfYWJvcnRfb3BlcmF0aW9uKCk7Ci0JCVRSQUNFX0VYSVQgKGhlYWQtPnN0YXR1cyAhPSBlcnJvcikgPyAtRUFHQUlOIDogLUVJTzsKLQl9Ci0JLyoKLQkgKiAgZG9uJ3QgY2FyZSBpZiB0aGUgdGltZXIgZXhwaXJlcywgdGhpcyBpcyBqdXN0IGtpbmQgb2YgYQotCSAqICAic2VsZWN0IiBvcGVyYXRpb24gdGhhdCBsZXRzIHRoZSBjYWxsaW5nIHByb2Nlc3Mgc2xlZXAKLQkgKiAgdW50aWwgc29tZXRoaW5nIGhhcyBoYXBwZW5lZAotCSAqLwotCWlmIChmZGNfaW50ZXJydXB0X3dhaXQoNSAqIEZUX1NFQ09ORCkgPCAwKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJFbmQgb2YgdHJhY2sgJWQgYXQgc2VnbWVudCAlZCIsCi0JCSAgICAgIGZ0X2xvY2F0aW9uLnRyYWNrLAotCQkgICAgICBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX2hlYWQpLT5zZWdtZW50X2lkKTsKLQkJcmVzdWx0ID0gMTsgIC8qIGVuZCBvZiB0cmFjaywgdW5sb2NrIG1vZHVsZSAqLwotCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IDA7Ci0JfQotCS8qCi0JICogIHRoZSBjYWxsaW5nIHByb2Nlc3Mgc2hvdWxkIHVzZSB0aGUgc2VnIGlkIHRvIGRldGVybWluZQotCSAqICB3aGljaCBwYXJ0cyBvZiB0aGUgZG1hIGJ1ZmZlcnMgY2FuIGJlIHNhZmVseSBvdmVyd3JpdHRlbgotCSAqICB3aXRoIG5ldyBkYXRhLgotCSAqLwotCSpzZWdtZW50X2lkID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKS0+c2VnbWVudF9pZDsKLQkvKgotCSAqICBJbnRlcm5hbGx5IHdlIHN0YXJ0IGNvdW50aW5nIHNlZ21lbnQgaWRzIGZyb20gdGhlIHN0YXJ0IG9mCi0JICogIGVhY2ggdHJhY2sgd2hlbiBmb3JtYXR0aW5nLCBidXQgZXh0ZXJuYWxseSB3ZSBrZWVwIHRoZW0KLQkgKiAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSB0YXBlOgotCSAqLwotCSpzZWdtZW50X2lkICs9IGZ0X2xvY2F0aW9uLnRyYWNrICogZnRfc2VnbWVudHNfcGVyX3RyYWNrOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0vKgotICogIFRoZSBzZWdtZW50IGlkIGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgdGFwZQotICovCi1pbnQgZnRhcGVfdmVyaWZ5X3NlZ21lbnQoY29uc3QgdW5zaWduZWQgaW50IHNlZ21lbnRfaWQsIFNlY3Rvck1hcCAqYnNtKQotewotCWludCByZXN1bHQ7Ci0JaW50IHZlcmlmeV9kb25lID0gMDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJWZXJpZnlpbmcgc2VnbWVudCAlZCIsIHNlZ21lbnRfaWQpOwotCi0JaWYgKGZ0X2RyaXZlcl9zdGF0ZSAhPSB2ZXJpZnlpbmcpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImNhbGxpbmcgZnRhcGVfYWJvcnRfb3BlcmF0aW9uIik7Ci0JCWlmIChmdGFwZV9hYm9ydF9vcGVyYXRpb24oKSA8IDApIHsKLQkJCVRSQUNFKGZ0X3RfZXJyLCAiZnRhcGVfYWJvcnRfb3BlcmF0aW9uIGZhaWxlZCIpOwotCQkJVFJBQ0VfRVhJVCAtRUlPOwotCQl9Ci0JfQotCSpic20gPSAweDAwMDAwMDAwOwotCWZ0YXBlX3NldF9zdGF0ZSh2ZXJpZnlpbmcpOwotCWZvciAoOzspIHsKLQkJYnVmZmVyX3N0cnVjdCAqdGFpbDsKLQkJLyoKLQkJICogIEFsbG93IGVzY2FwZSBmcm9tIHRoaXMgbG9vcCBvbiBzaWduYWwKLQkJICovCi0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQkJLyoKLQkJICogIFNlYXJjaCBhbGwgZnVsbCBidWZmZXJzIGZvciB0aGUgZmlyc3QgbWF0Y2hpbmcgdGhlCi0JCSAqICB3YW50ZWQgc2VnbWVudC4gIENsZWFyIG90aGVyIGJ1ZmZlcnMgb24gdGhlIGZseS4KLQkJICovCi0JCXRhaWwgPSBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX3RhaWwpOwotCQl3aGlsZSAoIXZlcmlmeV9kb25lICYmIHRhaWwtPnN0YXR1cyA9PSBkb25lKSB7Ci0JCQkvKgotCQkJICogIEFsbG93IGVzY2FwZSBmcm9tIHRoaXMgbG9vcCBvbiBzaWduYWwgIQotCQkJICovCi0JCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JCQlpZiAodGFpbC0+c2VnbWVudF9pZCA9PSBzZWdtZW50X2lkKSB7Ci0JCQkJLyogIElmIG91dCBidWZmZXIgaXMgYWxyZWFkeSBmdWxsLAotCQkJCSAqICByZXR1cm4gaXRzIGNvbnRlbnRzLiAgCi0JCQkJICovCi0JCQkJVFJBQ0UoZnRfdF9mbG93LCAiZm91bmQgc2VnbWVudCBpbiBjYWNoZTogJWQiLAotCQkJCSAgICAgIHNlZ21lbnRfaWQpOwotCQkJCWlmICgodGFpbC0+c29mdF9lcnJvcl9tYXAgfAotCQkJCSAgICAgdGFpbC0+aGFyZF9lcnJvcl9tYXApICE9IDApIHsKLQkJCQkJVFJBQ0UoZnRfdF9pbmZvLCJic21bJWRdID0gMHglMDhseCIsCi0JCQkJCSAgICAgIHNlZ21lbnRfaWQsCi0JCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKQotCQkJCQkgICAgICAodGFpbC0+c29mdF9lcnJvcl9tYXAgfAotCQkJCQkgICAgICB0YWlsLT5oYXJkX2Vycm9yX21hcCkpOwotCQkJCQkqYnNtID0gKHRhaWwtPnNvZnRfZXJyb3JfbWFwIHwKLQkJCQkJCXRhaWwtPmhhcmRfZXJyb3JfbWFwKTsKLQkJCQl9Ci0JCQkJdmVyaWZ5X2RvbmUgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X2Zsb3csInphcHBpbmcgc2VnbWVudCBpbiBjYWNoZTogJWQiLAotCQkJCSAgICAgIHRhaWwtPnNlZ21lbnRfaWQpOwotCQkJfQotCQkJdGFpbC0+c3RhdHVzID0gd2FpdGluZzsKLQkJCXRhaWwgPSBmdGFwZV9uZXh0X2J1ZmZlcihmdF9xdWV1ZV90YWlsKTsKLQkJfQotCQlpZiAoIXZlcmlmeV9kb25lICYmIHRhaWwtPnN0YXR1cyA9PSB2ZXJpZnlpbmcpIHsKLQkJCWlmICh0YWlsLT5zZWdtZW50X2lkID09IHNlZ21lbnRfaWQpIHsKLQkJCQlzd2l0Y2goZnRhcGVfd2FpdF9zZWdtZW50KHZlcmlmeWluZykpIHsKLQkJCQljYXNlIDA6Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgLUVJTlRSOgotCQkJCQlUUkFDRV9BQk9SVCgtRUlOVFIsIGZ0X3Rfd2FybiwKLQkJCQkJCSAgICAiaW50ZXJydXB0ZWQgYnkgIgotCQkJCQkJICAgICJub24tYmxvY2thYmxlIHNpZ25hbCIpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsKLQkJCQkJZnRhcGVfc2V0X3N0YXRlKHZlcmlmeWluZyk7Ci0JCQkJCS8qIGJlIHBpY2t5ICovCi0JCQkJCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3Rfd2FybiwKLQkJCQkJCSAgICAid2FpdF9zZWdtZW50IGZhaWxlZCIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogIFdlJ3JlIHJlYWRpbmcgdGhlIHdyb25nIHNlZ21lbnQsCi0JCQkJICogIHN0b3AgcnVubmVyLgotCQkJCSAqLwotCQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJ2ZXJpZnlpbmcgd3Jvbmcgc2VnbWVudCIpOwotCQkJCWZ0YXBlX2Fib3J0X29wZXJhdGlvbigpOwotCQkJCWZ0YXBlX3NldF9zdGF0ZSh2ZXJpZnlpbmcpOwotCQkJfQotCQl9Ci0JCS8qICAgIHNob3VsZCBydW5uZXIgc3RvcCA/Ci0JCSAqLwotCQlpZiAoZnRfcnVubmVyX3N0YXR1cyA9PSBhYm9ydGluZykgewotCQkJYnVmZmVyX3N0cnVjdCAqaGVhZCA9IGZ0YXBlX2dldF9idWZmZXIoZnRfcXVldWVfaGVhZCk7Ci0JCQlpZiAoaGVhZC0+c3RhdHVzID09IGVycm9yIHx8Ci0JCQkgICAgaGVhZC0+c3RhdHVzID09IHZlcmlmeWluZykgewotCQkJCS8qIG5vIGRhdGEgb3Igb3ZlcnJ1biBlcnJvciAqLwotCQkJCWhlYWQtPnN0YXR1cyA9IHdhaXRpbmc7Ci0JCQl9Ci0JCQlUUkFDRV9DQVRDSChmdGFwZV9kdW1iX3N0b3AoKSwpOwotCQl9IGVsc2UgewotCQkJLyogIElmIGp1c3QgcGFzc2VkIGxhc3Qgc2VnbWVudCBvbiB0YXBlOiB3YWl0Ci0JCQkgKiAgZm9yIEJPVCBvciBFT1QgbWFyay4gU2V0cyBmdF9ydW5uZXJfc3RhdHVzIHRvCi0JCQkgKiAgaWRsZSBpZiBhdCBsRU9UIGFuZCBzdWNjZXNzZnVsIAotCQkJICovCi0JCQlUUkFDRV9DQVRDSChmdGFwZV9oYW5kbGVfbG9naWNhbF9lb3QoKSwpOwotCQl9Ci0JCWlmICh2ZXJpZnlfZG9uZSkgewotCQkJVFJBQ0VfRVhJVCAwOwotCQl9Ci0JCS8qICAgIE5vdyBhdCBsZWFzdCBvbmUgYnVmZmVyIGlzIGlkbGUhCi0JCSAqICAgIFJlc3RhcnQgcnVubmVyICYgdGFwZSBpZiBuZWVkZWQuCi0JCSAqLwotCQkvKiAgV2UgY291bGQgb3B0aW1pemUgdGhlIGZvbGxvd2luZyBhIGxpdHRsZSBiaXQuIFdlIGtub3cgdGhhdCAKLQkJICogIHRoZSBiYWQgc2VjdG9yIG1hcCBpcyBlbXB0eS4KLQkJICovCi0JCXRhaWwgPSBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX3RhaWwpOwotCQlpZiAodGFpbC0+c3RhdHVzID09IHdhaXRpbmcpIHsKLQkJCWJ1ZmZlcl9zdHJ1Y3QgKmhlYWQgPSBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX2hlYWQpOwotCi0JCQlmdGFwZV9zZXR1cF9uZXdfc2VnbWVudChoZWFkLCBzZWdtZW50X2lkLCAtMSk7Ci0JCQlmdGFwZV9jYWxjX25leHRfY2x1c3RlcihoZWFkKTsKLQkJCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IGlkbGUpIHsKLQkJCQlyZXN1bHQgPSBmdGFwZV9zdGFydF90YXBlKHNlZ21lbnRfaWQsCi0JCQkJCQkJICBoZWFkLT5zZWN0b3Jfb2Zmc2V0KTsKLQkJCQlzd2l0Y2gocmVzdWx0KSB7Ci0JCQkJY2FzZSAwOgotCQkJCQlicmVhazsKLQkJCQljYXNlIC1FVElNRToKLQkJCQljYXNlIC1FSU5UUjoKLQkJCQkJVFJBQ0VfQUJPUlQocmVzdWx0LCBmdF90X2VyciwgIkVycm9yOiAiCi0JCQkJCQkgICAgInNlZ21lbnQgJWQgdW5yZWFjaGFibGUiLAotCQkJCQkJICAgIHNlZ21lbnRfaWQpOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQkqYnNtID0gRU1QVFlfU0VHTUVOVDsKLQkJCQkJVFJBQ0VfRVhJVCAwOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQloZWFkLT5zdGF0dXMgPSB2ZXJpZnlpbmc7Ci0JCQlmZGNfc2V0dXBfcmVhZF93cml0ZShoZWFkLCBGRENfVkVSSUZZKTsKLQkJfQotCX0KLQkvKiBub3QgcmVhY2hlZCAqLwotCVRSQUNFX0VYSVQgLUVJTzsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1mb3JtYXQuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1mb3JtYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE1MTYxNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZm9ybWF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9GT1JNQVRfSAotI2RlZmluZSBfRlRBUEVfRk9STUFUX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtZm9ybWF0LmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODoxMyAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxvdyBsZXZlbCBkZWZpbml0aW9ucyBmb3IgdGhlCi0gKiAgICAgIGZvcm1hdHRpbmcgc3VwcG9ydCBmb3IgdGhlIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUKLSAqICAgICAgZHJpdmVyICJmdGFwZSIgZm9yIExpbnV4LgotICovCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi1leHRlcm4gaW50IGZ0YXBlX2Zvcm1hdF90cmFjayhjb25zdCB1bnNpZ25lZCBpbnQgdHJhY2ssIGNvbnN0IF9fdTggZ2FwMyk7Ci1leHRlcm4gaW50IGZ0YXBlX2Zvcm1hdF9zdGF0dXModW5zaWduZWQgaW50ICpzZWdtZW50X2lkKTsKLWV4dGVybiBpbnQgZnRhcGVfdmVyaWZ5X3NlZ21lbnQoY29uc3QgdW5zaWduZWQgaW50IHNlZ21lbnRfaWQsIFNlY3Rvck1hcCAqYnNtKTsKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWluaXQuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5OTgxMzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWluaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdGhhdCBpbnRlcmZhY2VzIHRoZSBrZXJuZWwKLSAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcWljMTE3Lmg+Ci0jaWZkZWYgQ09ORklHX1pGVEFQRQotI2luY2x1ZGUgPGxpbnV4L3pmdGFwZS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW8uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1yZWFkLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtd3JpdGUuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1ydy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2ZkYy1pby5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJ1ZmZlci5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXByb2MuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0KLQotI2lmIGRlZmluZWQoTU9EVUxFKSAmJiAhZGVmaW5lZChDT05GSUdfRlRfTk9fVFJBQ0VfQVRfQUxMKQotc3RhdGljIGludCBmdF90cmFjaW5nID0gLTE7Ci0jZW5kaWYKLQotCi0vKiAgQ2FsbGVkIGJ5IG1vZHVsZXMgcGFja2FnZSB3aGVuIGluc3RhbGxpbmcgdGhlIGRyaXZlcgotICogIG9yIGJ5IGtlcm5lbCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGZ0YXBlX2luaXQodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotI2lmZGVmIE1PRFVMRQotI2lmbmRlZiBDT05GSUdfRlRfTk9fVFJBQ0VfQVRfQUxMCi0JaWYgKGZ0X3RyYWNpbmcgIT0gLTEpIHsKLQkJZnRhcGVfdHJhY2luZyA9IGZ0X3RyYWNpbmc7Ci0JfQotI2VuZGlmCi0JcHJpbnRrKEtFUk5fSU5GTyBGVEFQRV9WRVJTSU9OICJcbiIpOwotICAgICAgICBpZiAoVFJBQ0VfTEVWRUwgPj0gZnRfdF9pbmZvKSB7Ci0JCXByaW50aygKLUtFUk5fSU5GTyAiKGMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuIChiYXNAdmltZWMubmwpXG4iCi1LRVJOX0lORk8gIihjKSAxOTk1LTE5OTYgS2FpIEhhcnJla2lsZGUtUGV0ZXJzZW4gKGtocEBkb2xwaGluaWNzLm5vKVxuIgotS0VSTl9JTkZPICIoYykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZSAoY2xhdXNAbW9tby5tYXRoLnJ3dGgtYWFjaGVuLmRlKVxuIgotS0VSTl9JTkZPICJRSUMtMTE3IGRyaXZlciBmb3IgUUlDLTQwLzgwLzMwMTAvMzAyMCBmbG9wcHkgdGFwZSBkcml2ZXNcbiIpOwotICAgICAgICB9Ci0jZWxzZSAvKiAhTU9EVUxFICovCi0JLyogcHJpbnQgYSBzaG9ydCBuby1ub25zZW5zZSBib290IG1lc3NhZ2UgKi8KLQlwcmludGsoS0VSTl9JTkZPIEZUQVBFX1ZFUlNJT04gIlxuIik7Ci0jZW5kaWYgLyogTU9EVUxFICovCi0JVFJBQ0UoZnRfdF9pbmZvLCAiaW5zdGFsbGluZyBRSUMtMTE3IGZsb3BweSB0YXBlIGhhcmR3YXJlIGRyaXZlIC4uLiAiKTsKLQlUUkFDRShmdF90X2luZm8sICJmdGFwZV9pbml0IEAgMHglcCIsIGZ0YXBlX2luaXQpOwotCS8qICBBbGxvY2F0ZSB0aGUgRE1BIGJ1ZmZlcnMuIFRoZXkgYXJlIGRlYWxsb2NhdGVkIGF0IGNsZWFudXAoKSB0aW1lLgotCSAqLwotI2lmZGVmIFRFU1RJTkcKLSNpZmRlZiBNT0RVTEUKLQl3aGlsZSAoZnRhcGVfc2V0X25yX2J1ZmZlcnMoQ09ORklHX0ZUX05SX0JVRkZFUlMpIDwgMCkgewotCQlmdGFwZV9zbGVlcChGVF9TRUNPTkQvMjApOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCSh2b2lkKWZ0YXBlX3NldF9ucl9idWZmZXJzKDApOwotCQkJVFJBQ0UoZnRfdF9idWcsCi0JCQkgICAgICAiS2lsbGVkIGJ5IHNpZ25hbCB3aGlsZSBhbGxvY2F0aW5nIGJ1ZmZlcnMuIik7Ci0JCQlUUkFDRV9BQk9SVCgtRUlOVFIsIAotCQkJCSAgICBmdF90X2J1ZywgIkZyZWUgdXAgbWVtb3J5IGFuZCByZXRyeSIpOwotCQl9Ci0JfQotI2Vsc2UKLQlUUkFDRV9DQVRDSChmdGFwZV9zZXRfbnJfYnVmZmVycyhDT05GSUdfRlRfTlJfQlVGRkVSUyksCi0JCSAgICAodm9pZClmdGFwZV9zZXRfbnJfYnVmZmVycygwKSk7Ci0jZW5kaWYKLSNlbHNlCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfc2V0X25yX2J1ZmZlcnMoQ09ORklHX0ZUX05SX0JVRkZFUlMpLAotCQkgICAgKHZvaWQpZnRhcGVfc2V0X25yX2J1ZmZlcnMoMCkpOwotI2VuZGlmCi0JZnRfZHJpdmVfc2VsID0gLTE7Ci0JZnRfZmFpbHVyZSAgID0gMTsgICAgICAgICAvKiBpbmhpYml0IGFueSBvcGVyYXRpb24gYnV0IG9wZW4gKi8KLQlmdGFwZV91ZGVsYXlfY2FsaWJyYXRlKCk7IC8qIG11c3QgYmUgYmVmb3JlIGZkY193YWl0X2NhbGlicmF0ZSAhICovCi0JZmRjX3dhaXRfY2FsaWJyYXRlKCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfRlRfUFJPQ19GUykKLQkodm9pZClmdGFwZV9wcm9jX2luaXQoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19aRlRBUEUKLQkodm9pZCl6ZnRfaW5pdCgpOwotI2VuZGlmCi0JVFJBQ0VfRVhJVCAwOwotfQotCi1tb2R1bGVfcGFyYW0oZnRfZmRjX2Jhc2UsICAgICAgIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9mZGNfYmFzZSwgICJCYXNlIGFkZHJlc3Mgb2YgRkRDIGNvbnRyb2xsZXIuIik7Ci1tb2R1bGVfcGFyYW0oZnRfZmRjX2lycSwgICAgICAgIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9mZGNfaXJxLCAgICJJUlEgKGludGVycnVwdCBjaGFubmVsKSB0byB1c2UuIik7Ci1tb2R1bGVfcGFyYW0oZnRfZmRjX2RtYSwgICAgICAgIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9mZGNfZG1hLCAgICJETUEgY2hhbm5lbCB0byB1c2UuIik7Ci1tb2R1bGVfcGFyYW0oZnRfZmRjX3RocmVzaG9sZCwgIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9mZGNfdGhyZXNob2xkLCAgIlRocmVzaG9sZCBvZiB0aGUgRkRDIEZpZm8uIik7Ci1tb2R1bGVfcGFyYW0oZnRfZmRjX3JhdGVfbGltaXQsIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9mZGNfcmF0ZV9saW1pdCwgIk1heGltYWwgZGF0YSByYXRlIGZvciBGREMuIik7Ci1tb2R1bGVfcGFyYW0oZnRfcHJvYmVfZmMxMCwgICAgIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9wcm9iZV9mYzEwLAotCSAgICAiSWYgbm9uLXplcm8sIHByb2JlIGZvciBhIENvbG9yYWRvIEZDLTEwL0ZDLTIwIGNvbnRyb2xsZXIuIik7Ci1tb2R1bGVfcGFyYW0oZnRfbWFjaDIsICAgICAgICAgIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmdF9tYWNoMiwKLQkgICAgIklmIG5vbi16ZXJvLCBwcm9iZSBmb3IgYSBNb3VudGFpbiBNQUNILTIgY29udHJvbGxlci4iKTsKLSNpZiBkZWZpbmVkKE1PRFVMRSkgJiYgIWRlZmluZWQoQ09ORklHX0ZUX05PX1RSQUNFX0FUX0FMTCkKLW1vZHVsZV9wYXJhbShmdF90cmFjaW5nLCAgICAgICAgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZnRfdHJhY2luZywKLQkgICAgIkFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0LCAwIDw9IHRyYWNpbmcgPD0gOCwgZGVmYXVsdCAzLiIpOwotI2VuZGlmCi0KLU1PRFVMRV9BVVRIT1IoCi0JIihjKSAxOTkzLTE5OTYgQmFzIExhYXJob3ZlbiAoYmFzQHZpbWVjLm5sKSwgIgotCSIoYykgMTk5NS0xOTk2IEthaSBIYXJyZWtpbGRlLVBldGVyc2VuIChraHBAZG9scGhpbmljcy5ubyksICIKLQkiKGMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lIChjbGF1c0Btb21vLm1hdGgucnd0aC1hYWNoZW4uZGUpIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oCi0JIlFJQy0xMTcgZHJpdmVyIGZvciBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweSB0YXBlIGRyaXZlcy4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGZ0YXBlX2V4aXQodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICYmIGRlZmluZWQoQ09ORklHX0ZUX1BST0NfRlMpCi0JZnRhcGVfcHJvY19kZXN0cm95KCk7Ci0jZW5kaWYKLQkodm9pZClmdGFwZV9zZXRfbnJfYnVmZmVycygwKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiZnRhcGU6IHVubG9hZGVkLlxuIik7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotbW9kdWxlX2luaXQoZnRhcGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChmdGFwZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pbml0LmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtaW5pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWE3YjhhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pbml0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9JTklUX0gKLSNkZWZpbmUgX0ZUQVBFX0lOSVRfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTkzLTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtaW5pdC5oLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6MTYgJAotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBpbnRlcmZhY2UgdG8gCi0gKiB0aGUgTGludXgga2VybmVsIGZvciBmbG9wcHkgdGFwZSBkcml2ZXIgZnRhcGUuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0KLSNkZWZpbmUgX05FVkVSX0JMT0NLICAgIChzaWdtYXNrKFNJR0tJTEwpIHwgc2lnbWFzayhTSUdTVE9QKSkKLSNkZWZpbmUgX0RPTlRfQkxPQ0sgICAgIChfTkVWRVJfQkxPQ0sgfCBzaWdtYXNrKFNJR0lOVCkpCi0jZGVmaW5lIF9ET19CTE9DSyAgICAgICAoc2lnbWFzayhTSUdQSVBFKSkKLQotI2lmbmRlZiBRSUMxMTdfVEFQRV9NQUpPUgotI2RlZmluZSBRSUMxMTdfVEFQRV9NQUpPUiAyNwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWlvLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5MDE1YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDk5MiArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgICAgICAgKEMpIDE5OTYgICAgICBLYWkgSGFycmVraWxkZS1QZXRlcnNlbiwKLSAqICAgICAgICAgICAgICAgIChDKSAxOTk3ICAgICAgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pby5jLHYgJAotICogJFJldmlzaW9uOiAxLjQgJAotICogJERhdGU6IDE5OTcvMTEvMTEgMTQ6MDI6MzYgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBnZW5lcmFsIGNvbnRyb2wgZnVuY3Rpb25zIGZvciB0aGUKLSAqICAgICAgUUlDLTQwLzgwLzMwMTAvMzAyMCBmbG9wcHktdGFwZSBkcml2ZXIgImZ0YXBlIiBmb3IgTGludXguCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9xaWMxMTcuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW8uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1ydy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXdyaXRlLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcmVhZC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWluaXQuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jYWxpYnIuaCIKLQotLyogICAgICBHbG9iYWwgdmFycy4KLSAqLwotLyogTk9URTogc2VjdG9ycyBzdGFydCBudW1iZXJpbmcgYXQgMSwgYWxsIG90aGVycyBhdCAwICEgKi8KLWZ0X3RpbWVvdXRfdGFibGUgZnRhcGVfdGltZW91dDsKLXVuc2lnbmVkIGludCBmdGFwZV90YXBlX2xlbjsKLXZvbGF0aWxlIHFpYzExN19jbWRfdCBmdGFwZV9jdXJyZW50X2NvbW1hbmQ7Ci1jb25zdCBzdHJ1Y3QgcWljMTE3X2NvbW1hbmRfdGFibGUgcWljMTE3X2NtZHNbXSA9IFFJQzExN19DT01NQU5EUzsKLWludCBmdGFwZV9taWdodF9iZV9vZmZfdHJhY2s7Ci0KLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotc3RhdGljIGludCBkaWFnbm9zdGljX21vZGU7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGZ0YXBlX3VkZWxheV9jb3VudDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnRhcGVfdWRlbGF5X3RpbWU7Ci0KLXZvaWQgZnRhcGVfdWRlbGF5KHVuc2lnbmVkIGludCB1c2VjcykKLXsKLQl2b2xhdGlsZSBpbnQgY291bnQgPSAoZnRhcGVfdWRlbGF5X2NvdW50ICogdXNlY3MgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRhcGVfdWRlbGF5X2NvdW50IC0gMSkgLyBmdGFwZV91ZGVsYXlfdGltZTsKLQl2b2xhdGlsZSBpbnQgaTsKLQotCXdoaWxlIChjb3VudC0tID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgMjA7ICsraSk7Ci0JfQotfQotCi12b2lkIGZ0YXBlX3VkZWxheV9jYWxpYnJhdGUodm9pZCkKLXsKLQlmdGFwZV9jYWxpYnJhdGUoImZ0YXBlX3VkZWxheSIsCi0JCQlmdGFwZV91ZGVsYXksICZmdGFwZV91ZGVsYXlfY291bnQsICZmdGFwZV91ZGVsYXlfdGltZSk7Ci19Ci0KLS8qICAgICAgRGVsYXkgKG1zZWMpIHJvdXRpbmUuCi0gKi8KLXZvaWQgZnRhcGVfc2xlZXAodW5zaWduZWQgaW50IHRpbWUpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCXRpbWUgKj0gMTAwMDsgICAvKiBtc2VjcyAtPiB1c2VjcyAqLwotCWlmICh0aW1lIDwgRlRfVVNQVCkgewotCQkvKiAgVGltZSB0b28gc21hbGwgZm9yIHNjaGVkdWxlciwgZG8gYSBidXN5IHdhaXQgISAqLwotCQlmdGFwZV91ZGVsYXkodGltZSk7Ci0JfSBlbHNlIHsKLQkJbG9uZyB0aW1lb3V0OwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1bnNpZ25lZCBpbnQgdGlja3MgPSAodGltZSArIEZUX1VTUFQgLSAxKSAvIEZUX1VTUFQ7Ci0KLQkJVFJBQ0UoZnRfdF9hbnksICIlZCBtc2VjLCAlZCB0aWNrcyIsIHRpbWUvMTAwMCwgdGlja3MpOwotCQl0aW1lb3V0ID0gdGlja3M7Ci0JCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCQlzdGkoKTsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoamlmZmllc190b19tc2Vjcyh0aW1lb3V0KSk7Ci0JCS8qICBNbW0uIElzbid0IGN1cnJlbnQtPmJsb2NrZWQgPT0gMHhmZmZmZmZmZiA/Ci0JCSAqLwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCVRSQUNFKGZ0X3RfZXJyLCAiYXdva2VuIGJ5IG5vbi1ibG9ja2VkIHNpZ25hbCA6LSgiKTsKLQkJfQotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogIHNlbmQgYSBjb21tYW5kIG9yIHBhcmFtZXRlciB0byB0aGUgZHJpdmUKLSAqICBHZW5lcmF0ZXMgIyBvZiBzdGVwIHB1bHNlcy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgZnRfc2VuZF90b19kcml2ZShpbnQgYXJnKQotewotCS8qICBBbHdheXMgd2FpdCBmb3IgYSBjb21tYW5kX3RpbWVvdXQgcGVyaW9kIHRvIHNlcGFyYXRlCi0JICogIGluZGl2aWR1YWxzIGNvbW1hbmRzIGFuZC9vciBwYXJhbWV0ZXJzLgotCSAqLwotCWZ0YXBlX3NsZWVwKDMgKiBGVF9NSUxMSVNFQ09ORCk7Ci0JLyogIEtlZXAgY3lsaW5kZXIgbnIgd2l0aGluIHJhbmdlLCBzdGVwIHRvd2FyZHMgaG9tZSBpZiBwb3NzaWJsZS4KLQkgKi8KLQlpZiAoZnRhcGVfY3VycmVudF9jeWxpbmRlciA+PSBhcmcpIHsKLQkJcmV0dXJuIGZkY19zZWVrKGZ0YXBlX2N1cnJlbnRfY3lsaW5kZXIgLSBhcmcpOwotCX0gZWxzZSB7Ci0JCXJldHVybiBmZGNfc2VlayhmdGFwZV9jdXJyZW50X2N5bGluZGVyICsgYXJnKTsKLQl9Ci19Ci0KLS8qIGZvcndhcmQgKi8gaW50IGZ0YXBlX3JlcG9ydF9yYXdfZHJpdmVfc3RhdHVzKGludCAqc3RhdHVzKTsKLQotc3RhdGljIGludCBmdF9jaGVja19jbWRfcmVzdHJpY3Rpb25zKHFpYzExN19jbWRfdCBjb21tYW5kKQotewotCWludCBzdGF0dXMgPSAtMTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQotCVRSQUNFKGZ0X3RfZmxvdywgIiVzIiwgcWljMTE3X2NtZHNbY29tbWFuZF0ubmFtZSk7Ci0JLyogQSBuZXcgbW90aW9uIGNvbW1hbmQgZHVyaW5nIGFuIHVuaW50ZXJydXB0aWJsZSAobW90aW9uKQotCSAqICBjb21tYW5kIHJlcXVpcmVzIGEgcmVhZHkgc3RhdHVzIGJlZm9yZSB0aGUgbmV3IGNvbW1hbmQgY2FuCi0JICogIGJlIGlzc3VlZC4gT3RoZXJ3aXNlIGEgbmV3IG1vdGlvbiBjb21tYW5kIG5lZWRzIHRvIGJlCi0JICogIGNoZWNrZWQgYWdhaW5zdCByZXF1aXJlZCBzdGF0dXMuCi0JICovCi0JaWYgKHFpYzExN19jbWRzW2NvbW1hbmRdLmNtZF90eXBlID09IG1vdGlvbiAmJgotCSAgICBxaWMxMTdfY21kc1tmdGFwZV9jdXJyZW50X2NvbW1hbmRdLm5vbl9pbnRyKSB7Ci0JCWZ0YXBlX3JlcG9ydF9yYXdfZHJpdmVfc3RhdHVzKCZzdGF0dXMpOwotCQlpZiAoKHN0YXR1cyAmIFFJQ19TVEFUVVNfUkVBRFkpID09IDApIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JCQkgICAgICAibW90aW9uIGNtZCAoJWQpIGR1cmluZyBub24taW50ciBjbWQgKCVkKSIsCi0JCQkgICAgICBjb21tYW5kLCBmdGFwZV9jdXJyZW50X2NvbW1hbmQpOwotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgIndhaXRpbmcgdW50aWwgZHJpdmUgZ2V0cyByZWFkeSIpOwotCQkJZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnNlZWssCi0JCQkJCSAmc3RhdHVzKTsKLQkJfQotCX0KLQlpZiAocWljMTE3X2NtZHNbY29tbWFuZF0ubWFzayAhPSAwKSB7Ci0JCV9fdTggZGlmZmVyZW5jZTsKLQkJLyogIFNvbWUgY29tbWFuZHMgZG8gcmVxdWlyZSBhIGNlcnRhaW4gc3RhdHVzOgotCQkgKi8KLQkJaWYgKHN0YXR1cyA9PSAtMSkgewkvKiBub3QgeWV0IHNldCAqLwotCQkJZnRhcGVfcmVwb3J0X3Jhd19kcml2ZV9zdGF0dXMoJnN0YXR1cyk7Ci0JCX0KLQkJZGlmZmVyZW5jZSA9ICgoc3RhdHVzIF4gcWljMTE3X2NtZHNbY29tbWFuZF0uc3RhdGUpICYKLQkJCSAgICAgIHFpYzExN19jbWRzW2NvbW1hbmRdLm1hc2spOwotCQkvKiAgV2FpdCB1bnRpbCB0aGUgZHJpdmUgZ2V0cwotCQkgKiAgcmVhZHkuIFRoaXMgbWF5IGxhc3QgZm9yZXZlciBpZgotCQkgKiAgdGhlIGRyaXZlIG5ldmVyIGdldHMgcmVhZHkuLi4gCi0JCSAqLwotCQl3aGlsZSAoKGRpZmZlcmVuY2UgJiBRSUNfU1RBVFVTX1JFQURZKSAhPSAwKSB7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiY29tbWFuZCAlZCBpc3N1ZWQgd2hpbGUgbm90IHJlYWR5IiwKLQkJCSAgICAgIGNvbW1hbmQpOwotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgIndhaXRpbmcgdW50aWwgZHJpdmUgZ2V0cyByZWFkeSIpOwotCQkJaWYgKGZ0YXBlX3JlYWR5X3dhaXQoZnRhcGVfdGltZW91dC5zZWVrLAotCQkJCQkgICAgICZzdGF0dXMpID09IC1FSU5UUikgewotCQkJCS8qICBCYWlsIG91dCBvbiBzaWduYWwgIQotCQkJCSAqLwotCQkJCVRSQUNFX0FCT1JUKC1FSU5UUiwgZnRfdF93YXJuLAotCQkJCSAgICAgICJpbnRlcnJ1cHRlZCBieSBub24tYmxvY2thYmxlIHNpZ25hbCIpOwotCQkJfQotCQkJZGlmZmVyZW5jZSA9ICgoc3RhdHVzIF4gcWljMTE3X2NtZHNbY29tbWFuZF0uc3RhdGUpICYKLQkJCQkgICAgICBxaWMxMTdfY21kc1tjb21tYW5kXS5tYXNrKTsKLQkJfQotCQl3aGlsZSAoKGRpZmZlcmVuY2UgJiBRSUNfU1RBVFVTX0VSUk9SKSAhPSAwKSB7Ci0JCQlpbnQgZXJyOwotCQkJcWljMTE3X2NtZF90IGNtZDsKLQotCQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJCSAgICAgICJjb21tYW5kICVkIGlzc3VlZCB3aGlsZSBlcnJvciBwZW5kaW5nIiwKLQkJCSAgICAgIGNvbW1hbmQpOwotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImNsZWFyaW5nIGVycm9yIHN0YXR1cyIpOwotCQkJZnRhcGVfcmVwb3J0X2Vycm9yKCZlcnIsICZjbWQsIDEpOwotCQkJZnRhcGVfcmVwb3J0X3Jhd19kcml2ZV9zdGF0dXMoJnN0YXR1cyk7Ci0JCQlkaWZmZXJlbmNlID0gKChzdGF0dXMgXiBxaWMxMTdfY21kc1tjb21tYW5kXS5zdGF0ZSkgJgotCQkJCSAgICAgIHFpYzExN19jbWRzW2NvbW1hbmRdLm1hc2spOwotCQkJaWYgKChkaWZmZXJlbmNlICYgUUlDX1NUQVRVU19FUlJPUikgIT0gMCkgewotCQkJCS8qICBCYWlsIG91dCBvbiBmYXRhbCBzaWduYWwgIQotCQkJCSAqLwotCQkJCUZUX1NJR05BTF9FWElUKF9ORVZFUl9CTE9DSyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRpZmZlcmVuY2UpIHsKLQkJCS8qICBBbnkgcmVtYWluaW5nIGRpZmZlcmVuY2UgY2FuJ3QgYmUgc29sdmVkCi0JCQkgKiAgaGVyZS4gIAotCQkJICovCi0JCQlpZiAoZGlmZmVyZW5jZSAmIChRSUNfU1RBVFVTX0NBUlRSSURHRV9QUkVTRU5UIHwKLQkJCQkJICBRSUNfU1RBVFVTX05FV19DQVJUUklER0UgfAotCQkJCQkgIFFJQ19TVEFUVVNfUkVGRVJFTkNFRCkpIHsKLQkJCQlUUkFDRShmdF90X3dhcm4sCi0JCQkJICAgICAgIkZhdGFsOiB0YXBlIHJlbW92ZWQgb3IgcmVpbnNlcnRlZCAhIik7Ci0JCQkJZnRfZmFpbHVyZSA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCVRSQUNFKGZ0X3RfZXJyLCAid3Jvbmcgc3RhdGU6IDB4JTAyeCBzaG91bGQgYmU6IDB4JTAyeCIsCi0JCQkJICAgICAgc3RhdHVzICYgcWljMTE3X2NtZHNbY29tbWFuZF0ubWFzaywKLQkJCQkgICAgICBxaWMxMTdfY21kc1tjb21tYW5kXS5zdGF0ZSk7Ci0JCQl9Ci0JCQlUUkFDRV9FWElUIC1FSU87Ci0JCX0KLQkJaWYgKH5zdGF0dXMgJiBRSUNfU1RBVFVTX1JFQURZICYgcWljMTE3X2NtZHNbY29tbWFuZF0ubWFzaykgewotCQkJVFJBQ0VfQUJPUlQoLUVCVVNZLCBmdF90X2VyciwgIkJhZDogc3RpbGwgYnVzeSEiKTsKLQkJfQotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qICAgICAgSXNzdWUgYSB0YXBlIGNvbW1hbmQ6Ci0gKi8KLWludCBmdGFwZV9jb21tYW5kKHFpYzExN19jbWRfdCBjb21tYW5kKQotewotCWludCByZXN1bHQgPSAwOwotCXN0YXRpYyBpbnQgbGV2ZWw7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWlmICgodW5zaWduZWQgaW50KWNvbW1hbmQgPiBOUl9JVEVNUyhxaWMxMTdfY21kcykpIHsKLQkJLyogIFRoaXMgaXMgYSBidWcgd2UnbGwgd2FudCB0byBrbm93IGFib3V0IHRvby4KLQkJICovCi0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfYnVnLCAiYnVnIC0gYmFkIGNvbW1hbmQ6ICVkIiwgY29tbWFuZCk7Ci0JfQotCWlmICgrK2xldmVsID4gNSkgeyAvKiAgVGhpcyBpcyBhIGJ1ZyB3ZSdsbCB3YW50IHRvIGtub3cgYWJvdXQuICovCi0JCS0tbGV2ZWw7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfYnVnLCAiYnVnIC0gcmVjdXJzaW9uIGZvciBjb21tYW5kOiAlZCIsCi0JCQkgICAgY29tbWFuZCk7Ci0JfQotCS8qICBkaXNhYmxlIGxvZ2dpbmcgYW5kIHJlc3RyaWN0aW9uIGNoZWNrIGZvciBzb21lIGNvbW1hbmRzLAotCSAqICBjaGVjayBhbGwgb3RoZXIgY29tbWFuZHMgdGhhdCBoYXZlIGEgcHJlc2NyaWJlZCBzdGFydGluZwotCSAqICBzdGF0dXMuCi0JICovCi0JaWYgKGRpYWdub3N0aWNfbW9kZSkgewotCQlUUkFDRShmdF90X2Zsb3csICJkaWFnbm9zdGljIGNvbW1hbmQgJWQiLCBjb21tYW5kKTsKLQl9IGVsc2UgaWYgKGNvbW1hbmQgPT0gUUlDX1JFUE9SVF9EUklWRV9TVEFUVVMgfHwKLQkJICAgY29tbWFuZCA9PSBRSUNfUkVQT1JUX05FWFRfQklUKSB7Ci0JCVRSQUNFKGZ0X3RfYW55LCAiJXMiLCBxaWMxMTdfY21kc1tjb21tYW5kXS5uYW1lKTsKLQl9IGVsc2UgewotCQlUUkFDRV9DQVRDSChmdF9jaGVja19jbWRfcmVzdHJpY3Rpb25zKGNvbW1hbmQpLCAtLWxldmVsKTsKLQl9Ci0JLyogIE5vdyBhbGwgY29uZGl0aW9ucyBhcmUgbWV0IG9yIHJlc3VsdCB3YXMgPCAwLgotCSAqLwotCXJlc3VsdCA9IGZ0X3NlbmRfdG9fZHJpdmUoKHVuc2lnbmVkIGludCljb21tYW5kKTsKLQlpZiAocWljMTE3X2NtZHNbY29tbWFuZF0uY21kX3R5cGUgPT0gbW90aW9uICYmCi0JICAgIGNvbW1hbmQgIT0gUUlDX0xPR0lDQUxfRk9SV0FSRCAmJiBjb21tYW5kICE9IFFJQ19TVE9QX1RBUEUpIHsKLQkJZnRfbG9jYXRpb24ua25vd24gPSAwOwotCX0KLQlmdGFwZV9jdXJyZW50X2NvbW1hbmQgPSBjb21tYW5kOwotCS0tbGV2ZWw7Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLS8qICAgICAgU2VuZCBhIHRhcGUgY29tbWFuZCBwYXJhbWV0ZXI6Ci0gKiAgICAgIEdlbmVyYXRlcyBjb21tYW5kICMgb2Ygc3RlcCBwdWxzZXMuCi0gKiAgICAgIFNraXBzIHRhcGUtc3RhdHVzIGNhbGwgIQotICovCi1pbnQgZnRhcGVfcGFyYW1ldGVyKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCVRSQUNFKGZ0X3RfZmxvdywgImNhbGxlZCB3aXRoIHBhcmFtZXRlciA9ICVkIiwgcGFyYW1ldGVyKTsKLQlUUkFDRV9FWElUIGZ0X3NlbmRfdG9fZHJpdmUocGFyYW1ldGVyICsgMik7Ci19Ci0KLS8qICAgICAgV2FpdCBmb3IgdGhlIGRyaXZlIHRvIGdldCByZWFkeS4KLSAqICAgICAgdGltZW91dCB0aW1lIGluIG1pbGxpLXNlY29uZHMKLSAqICAgICAgUmV0dXJuZWQgc3RhdHVzIGlzIHZhbGlkIGlmIHJlc3VsdCAhPSAtRUlPCi0gKgotICogICAgICBTaG91bGQgd2UgYWxsb3cgdG8gYmUga2lsbGVkIGJ5IFNJR0lOVD8gICheQykKLSAqICAgICAgV291bGQgYmUgbmljZSBhdCBsZWFzdCBmb3IgbGFyZ2UgdGltZW91dHMuCi0gKi8KLWludCBmdGFwZV9yZWFkeV93YWl0KHVuc2lnbmVkIGludCB0aW1lb3V0LCBpbnQgKnN0YXR1cykKLXsKLQl1bnNpZ25lZCBsb25nIHQwOwotCXVuc2lnbmVkIGludCBwb2xsX2RlbGF5OwotCWludCBzaWduYWxfcmV0cmllczsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogIHRoZSBmb2xsb3dpbmcgKiogUkVBTExZICoqIHJlZHVjZXMgdGhlIHN5c3RlbSBsb2FkIHdoZW4KLQkgKiAgZS5nLiBvbmUgc2ltcGx5IHJld2luZHMgb3IgcmV0ZW5zaW9ucy4gVGhlIHRhcGUgaXMgc2xvdyAKLQkgKiAgYW55d2F5LiBJdCBpcyByZWFsbHkgbm90IG5lY2Vzc2FyeSB0byBkZXRlY3QgZXJyb3IgCi0JICogIGNvbmRpdGlvbnMgd2l0aCAxLzEwIHNlY29uZHMgZ3JhbnVsYXJpdHkKLQkgKgotCSAqICBPbiBteSBBTUQgMTMzTUhaIDQ4NjogMTAwIG1zOiAyMyUgc3lzdGVtIGxvYWQKLQkgKiAgICAgICAgICAgICAgICAgICAgICAgIDEgIHNlYzogIDUlCi0JICogICAgICAgICAgICAgICAgICAgICAgICA1ICBzZWM6ICAwLjYlLCB5ZWFoCi0JICovCi0JaWYgKHRpbWVvdXQgPD0gRlRfU0VDT05EKSB7Ci0JCXBvbGxfZGVsYXkgPSAxMDAgKiBGVF9NSUxMSVNFQ09ORDsKLQkJc2lnbmFsX3JldHJpZXMgPSAyMDsgLyogdHdvIHNlY29uZHMgKi8KLQl9IGVsc2UgaWYgKHRpbWVvdXQgPCAyMCAqIEZUX1NFQ09ORCkgewotCQlUUkFDRShmdF90X2Zsb3csICJzZXR0aW5nIHBvbGwgZGVsYXkgdG8gMSBzZWNvbmQiKTsKLQkJcG9sbF9kZWxheSA9IEZUX1NFQ09ORDsKLQkJc2lnbmFsX3JldHJpZXMgPSAyOyAvKiB0d28gc2Vjb25kcyAqLwotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgInNldHRpbmcgcG9sbCBkZWxheSB0byA1IHNlY29uZHMiKTsKLQkJcG9sbF9kZWxheSA9IDUgKiBGVF9TRUNPTkQ7Ci0JCXNpZ25hbF9yZXRyaWVzID0gMTsgLyogZml2ZSBzZWNvbmRzICovCi0JfQotCWZvciAoOzspIHsKLQkJdDAgPSBqaWZmaWVzOwotCQlUUkFDRV9DQVRDSChmdGFwZV9yZXBvcnRfcmF3X2RyaXZlX3N0YXR1cyhzdGF0dXMpLCk7Ci0JCWlmICgqc3RhdHVzICYgUUlDX1NUQVRVU19SRUFEWSkgewotCQkJVFJBQ0VfRVhJVCAwOwotCQl9Ci0JCWlmICghc2lnbmFsX3JldHJpZXMtLSkgewotCQkJRlRfU0lHTkFMX0VYSVQoX05FVkVSX0JMT0NLKTsKLQkJfQotCQlpZiAoKGludCl0aW1lb3V0ID49IDApIHsKLQkJCS8qIHRoaXMgd2lsbCBmYWlsIHdoZW4gamlmZmllcyB3cmFwcyBhcm91bmQgYWJvdXQKLQkJCSAqIG9uY2UgZXZlcnkgeWVhciA6LSkKLQkJCSAqLwotCQkJdGltZW91dCAtPSAoKGppZmZpZXMgLSB0MCkgKiBGVF9TRUNPTkQpIC8gSFo7Ci0JCQlpZiAodGltZW91dCA8PSAwKSB7Ci0JCQkJVFJBQ0VfQUJPUlQoLUVUSU1FLCBmdF90X2VyciwgInRpbWVvdXQiKTsKLQkJCX0KLQkJCWZ0YXBlX3NsZWVwKHBvbGxfZGVsYXkpOwotCQkJdGltZW91dCAtPSBwb2xsX2RlbGF5OwotCQl9IGVsc2UgewotCQkJZnRhcGVfc2xlZXAocG9sbF9kZWxheSk7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVCAtRVRJTUU7Ci19Ci0KLS8qICAgICAgSXNzdWUgY29tbWFuZCBhbmQgd2FpdCB1cCB0byB0aW1lb3V0IG1pbGxpIHNlY29uZHMgZm9yIGRyaXZlIHJlYWR5Ci0gKi8KLWludCBmdGFwZV9jb21tYW5kX3dhaXQocWljMTE3X2NtZF90IGNvbW1hbmQsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpbnQgKnN0YXR1cykKLXsKLQlpbnQgcmVzdWx0OwotCi0JLyogRHJpdmUgc2hvdWxkIGJlIHJlYWR5LCBpc3N1ZSBjb21tYW5kCi0JICovCi0JcmVzdWx0ID0gZnRhcGVfY29tbWFuZChjb21tYW5kKTsKLQlpZiAocmVzdWx0ID49IDApIHsKLQkJcmVzdWx0ID0gZnRhcGVfcmVhZHlfd2FpdCh0aW1lb3V0LCBzdGF0dXMpOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGZ0YXBlX3BhcmFtZXRlcl93YWl0KHVuc2lnbmVkIGludCBwYXJtLCB1bnNpZ25lZCBpbnQgdGltZW91dCwgaW50ICpzdGF0dXMpCi17Ci0JaW50IHJlc3VsdDsKLQotCS8qIERyaXZlIHNob3VsZCBiZSByZWFkeSwgaXNzdWUgY29tbWFuZAotCSAqLwotCXJlc3VsdCA9IGZ0YXBlX3BhcmFtZXRlcihwYXJtKTsKLQlpZiAocmVzdWx0ID49IDApIHsKLQkJcmVzdWx0ID0gZnRhcGVfcmVhZHlfd2FpdCh0aW1lb3V0LCBzdGF0dXMpOwotCX0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgIFJlcG9ydCBvcGVyYXRpb25zCi0gKi8KLQotLyogUXVlcnkgdGhlIGRyaXZlIGFib3V0IGl0cyBzdGF0dXMuICBUaGUgY29tbWFuZCBpcyBzZW50IGFuZAotICAgcmVzdWx0X2xlbmd0aCBiaXRzIG9mIHN0YXR1cyBhcmUgcmV0dXJuZWQgKDIgZXh0cmEgYml0cyBhcmUgcmVhZAotICAgZm9yIHN0YXJ0IGFuZCBzdG9wKS4gKi8KLQotaW50IGZ0YXBlX3JlcG9ydF9vcGVyYXRpb24oaW50ICpzdGF0dXMsCi0JCQkgICBxaWMxMTdfY21kX3QgY29tbWFuZCwKLQkJCSAgIGludCByZXN1bHRfbGVuZ3RoKQotewotCWludCBpLCBzdDM7Ci0JdW5zaWduZWQgaW50IHQwOwotCXVuc2lnbmVkIGludCBkdDsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfY29tbWFuZChjb21tYW5kKSwpOwotCXQwID0gZnRhcGVfdGltZXN0YW1wKCk7Ci0JaSA9IDA7Ci0JZG8gewotCQkrK2k7Ci0JCWZ0YXBlX3NsZWVwKDMgKiBGVF9NSUxMSVNFQ09ORCk7CS8qIHNlZSByZW1hcmsgYmVsb3cgKi8KLQkJVFJBQ0VfQ0FUQ0goZmRjX3NlbnNlX2RyaXZlX3N0YXR1cygmc3QzKSwpOwotCQlkdCA9IGZ0YXBlX3RpbWVkaWZmKHQwLCBmdGFwZV90aW1lc3RhbXAoKSk7Ci0JCS8qICBBY2sgc2hvdWxkIGJlIGFzc2VydGVkIHdpdGhpbiBUdGltb3V0ICsgVGFjayA9IDYgbXNlYy4KLQkJICogIExvb2tzIGxpa2Ugc29tZSBkcml2ZXMgZmFpbCB0byBkbyB0aGlzIHNvIGV4dGVuZCB0aGlzCi0JCSAqICBwZXJpb2QgdG8gMzAwIG1zZWMuCi0JCSAqLwotCX0gd2hpbGUgKCEoc3QzICYgU1QzX1RSQUNLXzApICYmIGR0IDwgMzAwMDAwKTsKLQlpZiAoIShzdDMgJiBTVDNfVFJBQ0tfMCkpIHsKLQkJVFJBQ0UoZnRfdF9lcnIsCi0JCSAgICAgICJObyBhY2tub3dsZWRnZSBhZnRlciAldSBtc2VjLiAoJWkgaXRlcikiLCBkdCAvIDEwMDAsIGkpOwotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwgInRpbWVvdXQgb24gQWNrbm93bGVkZ2UiKTsKLQl9Ci0JLyogIGR0IG1heSBiZSBsYXJnZXIgdGhhbiBleHBlY3RlZCBiZWNhdXNlIG9mIG90aGVyIHRhc2tzCi0JICogIHNjaGVkdWxlZCB3aGlsZSB3ZSB3ZXJlIHNsZWVwaW5nLgotCSAqLwotCWlmIChpID4gMSAmJiBkdCA+IDYwMDApIHsKLQkJVFJBQ0UoZnRfdF9lcnIsICJBY2tub3dsZWRnZSBhZnRlciAldSBtc2VjLiAoJWkgaXRlcikiLAotCQkgICAgICBkdCAvIDEwMDAsIGkpOwotCX0KLQkqc3RhdHVzID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgcmVzdWx0X2xlbmd0aCArIDE7IGkrKykgewotCQlUUkFDRV9DQVRDSChmdGFwZV9jb21tYW5kKFFJQ19SRVBPUlRfTkVYVF9CSVQpLCk7Ci0JCVRSQUNFX0NBVENIKGZkY19zZW5zZV9kcml2ZV9zdGF0dXMoJnN0MyksKTsKLQkJaWYgKGkgPCByZXN1bHRfbGVuZ3RoKSB7Ci0JCQkqc3RhdHVzIHw9ICgoc3QzICYgU1QzX1RSQUNLXzApID8gMSA6IDApIDw8IGk7Ci0JCX0gZWxzZSBpZiAoKHN0MyAmIFNUM19UUkFDS18wKSA9PSAwKSB7Ci0JCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwgIm1pc3Npbmcgc3RhdHVzIHN0b3AgYml0Iik7Ci0JCX0KLQl9Ci0JLyogdGhpcyBjb21tYW5kIHdpbGwgcHV0IHRyYWNrIHplcm8gYW5kIGluZGV4IGJhY2sgaW50byBub3JtYWwgc3RhdGUgKi8KLQkodm9pZClmdGFwZV9jb21tYW5kKFFJQ19SRVBPUlRfTkVYVF9CSVQpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogUmVwb3J0IHRoZSBjdXJyZW50IGRyaXZlIHN0YXR1cy4gKi8KLQotaW50IGZ0YXBlX3JlcG9ydF9yYXdfZHJpdmVfc3RhdHVzKGludCAqc3RhdHVzKQotewotCWludCByZXN1bHQ7Ci0JaW50IGNvdW50ID0gMDsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JZG8gewotCQlyZXN1bHQgPSBmdGFwZV9yZXBvcnRfb3BlcmF0aW9uKHN0YXR1cywKLQkJCQkJCVFJQ19SRVBPUlRfRFJJVkVfU1RBVFVTLCA4KTsKLQl9IHdoaWxlIChyZXN1bHQgPCAwICYmICsrY291bnQgPD0gMyk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkgICAgInJlcG9ydF9vcGVyYXRpb24gZmFpbGVkIGFmdGVyICVkIHRyaWFscyIsIGNvdW50KTsKLQl9Ci0JaWYgKCgqc3RhdHVzICYgMHhmZikgPT0gMHhmZikgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwKLQkJCSAgICAiaW1wb3NzaWJsZSBkcml2ZSBzdGF0dXMgMHhmZiIpOwotCX0KLQlpZiAoKnN0YXR1cyAmIFFJQ19TVEFUVVNfUkVBRFkpIHsKLQkJZnRhcGVfY3VycmVudF9jb21tYW5kID0gUUlDX05PX0NPTU1BTkQ7IC8qIGNvbXBsZXRlZCAqLwotCX0KLQlmdF9sYXN0X3N0YXR1cy5zdGF0dXMuZHJpdmVfc3RhdHVzID0gKF9fdTgpKCpzdGF0dXMgJiAweGZmKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLWludCBmdGFwZV9yZXBvcnRfZHJpdmVfc3RhdHVzKGludCAqc3RhdHVzKQotewotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlUUkFDRV9DQVRDSChmdGFwZV9yZXBvcnRfcmF3X2RyaXZlX3N0YXR1cyhzdGF0dXMpLCk7Ci0JaWYgKCpzdGF0dXMgJiBRSUNfU1RBVFVTX05FV19DQVJUUklER0UgfHwKLQkgICAgISgqc3RhdHVzICYgUUlDX1NUQVRVU19DQVJUUklER0VfUFJFU0VOVCkpIHsKLQkJZnRfZmFpbHVyZSA9IDE7CS8qIHdpbGwgaW5oaWJpdCBmdXJ0aGVyIG9wZXJhdGlvbnMgKi8KLQkJVFJBQ0VfRVhJVCAtRUlPOwotCX0KLQlpZiAoKnN0YXR1cyAmIFFJQ19TVEFUVVNfUkVBRFkgJiYgKnN0YXR1cyAmIFFJQ19TVEFUVVNfRVJST1IpIHsKLQkJLyogIExldCBjYWxsZXIgaGFuZGxlIGFsbCBlcnJvcnMgKi8KLQkJVFJBQ0VfQUJPUlQoMSwgZnRfdF93YXJuLCAid2FybmluZzogZXJyb3Igc3RhdHVzIHNldCEiKTsKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1pbnQgZnRhcGVfcmVwb3J0X2Vycm9yKHVuc2lnbmVkIGludCAqZXJyb3IsCi0JCSAgICAgICBxaWMxMTdfY21kX3QgKmNvbW1hbmQsIGludCByZXBvcnQpCi17Ci0Jc3RhdGljIGNvbnN0IGZ0YXBlX2Vycm9yIGZ0YXBlX2Vycm9yc1tdID0gUUlDMTE3X0VSUk9SUzsKLQlpbnQgY29kZTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JVFJBQ0VfQ0FUQ0goZnRhcGVfcmVwb3J0X29wZXJhdGlvbigmY29kZSwgUUlDX1JFUE9SVF9FUlJPUl9DT0RFLCAxNiksKTsKLQkqZXJyb3IgICA9ICh1bnNpZ25lZCBpbnQpKGNvZGUgJiAweGZmKTsKLQkqY29tbWFuZCA9IChxaWMxMTdfY21kX3QpKChjb2RlPj44KSYweGZmKTsKLQkvKiAgcmVtZW1iZXIgaGFyZHdhcmUgc3RhdHVzLCBtYXliZSB1c2VmdWwgZm9yIHN0YXR1cyBpb2N0bHMKLQkgKi8KLQlmdF9sYXN0X2Vycm9yLmVycm9yLmNvbW1hbmQgPSAoX191OCkqY29tbWFuZDsKLQlmdF9sYXN0X2Vycm9yLmVycm9yLmVycm9yICAgPSAoX191OCkqZXJyb3I7Ci0JaWYgKCFyZXBvcnQpIHsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLQlpZiAoKmVycm9yID09IDApIHsKLQkJVFJBQ0VfQUJPUlQoMCwgZnRfdF9pbmZvLCAiTm8gZXJyb3IiKTsKLQl9Ci0JVFJBQ0UoZnRfdF9pbmZvLCAiZXJyb3Jjb2RlOiAlZCIsICplcnJvcik7Ci0JaWYgKCplcnJvciA8IE5SX0lURU1TKGZ0YXBlX2Vycm9ycykpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIiVzRmF0YWwgRVJST1I6IiwKLQkJICAgICAgKGZ0YXBlX2Vycm9yc1sqZXJyb3JdLmZhdGFsID8gIiIgOiAiTm9uLSIpKTsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIiVzIC4uLiIsIGZ0YXBlX2Vycm9yc1sqZXJyb3JdLm1lc3NhZ2UpOwotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJVbmtub3duIEVSUk9SICEiKTsKLQl9Ci0JaWYgKCh1bnNpZ25lZCBpbnQpKmNvbW1hbmQgPCBOUl9JVEVNUyhxaWMxMTdfY21kcykgJiYKLQkgICAgcWljMTE3X2NtZHNbKmNvbW1hbmRdLm5hbWUgIT0gTlVMTCkgewotCQlUUkFDRShmdF90X25vaXNlLCAiLi4uIGNhdXNlZCBieSBjb21tYW5kIFwnJXNcJyIsCi0JCSAgICAgIHFpYzExN19jbWRzWypjb21tYW5kXS5uYW1lKTsKLQl9IGVsc2UgewotCQlUUkFDRShmdF90X25vaXNlLCAiLi4uIGNhdXNlZCBieSB1bmtub3duIGNvbW1hbmQgJWQiLAotCQkgICAgICAqY29tbWFuZCk7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotaW50IGZ0YXBlX3JlcG9ydF9jb25maWd1cmF0aW9uKHFpY19tb2RlbCAqbW9kZWwsCi0JCQkgICAgICAgdW5zaWduZWQgaW50ICpyYXRlLAotCQkJICAgICAgIGludCAqcWljX3N0ZCwKLQkJCSAgICAgICBpbnQgKnRhcGVfbGVuKQotewotCWludCByZXN1bHQ7Ci0JaW50IGNvbmZpZzsKLQlpbnQgc3RhdHVzOwotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcWljX3JhdGVzWyA0XSA9IHsgMjUwLCAyMDAwLCA1MDAsIDEwMDAgfTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JcmVzdWx0ID0gZnRhcGVfcmVwb3J0X29wZXJhdGlvbigmY29uZmlnLAotCQkJCQlRSUNfUkVQT1JUX0RSSVZFX0NPTkZJR1VSQVRJT04sIDgpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWZ0X2xhc3Rfc3RhdHVzLnN0YXR1cy5kcml2ZV9jb25maWcgPSAoX191OCkweDAwOwotCQkqbW9kZWwgPSBwcmVoaXN0b3JpYzsKLQkJKnJhdGUgPSA1MDA7Ci0JCSpxaWNfc3RkID0gUUlDX1RBUEVfUUlDNDA7Ci0JCSp0YXBlX2xlbiA9IDIwNTsKLQkJVFJBQ0VfRVhJVCAwOwotCX0gZWxzZSB7Ci0JCWZ0X2xhc3Rfc3RhdHVzLnN0YXR1cy5kcml2ZV9jb25maWcgPSAoX191OCkoY29uZmlnICYgMHhmZik7Ci0JfQotCSpyYXRlID0gcWljX3JhdGVzWyhjb25maWcgJiBRSUNfQ09ORklHX1JBVEVfTUFTSykgPj4gUUlDX0NPTkZJR19SQVRFX1NISUZUXTsKLQlyZXN1bHQgPSBmdGFwZV9yZXBvcnRfb3BlcmF0aW9uKCZzdGF0dXMsIFFJQ19SRVBPUlRfVEFQRV9TVEFUVVMsIDgpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCWZ0X2xhc3Rfc3RhdHVzLnN0YXR1cy50YXBlX3N0YXR1cyA9IChfX3U4KTB4MDA7Ci0JCS8qIHByZS0gUUlDMTE3IHJldiBDIHNwZWMuIGRyaXZlLCBRSUNfQ09ORklHXzgwIGJpdCBpcyB2YWxpZC4KLQkJICovCi0JCSpxaWNfc3RkID0gKGNvbmZpZyAmIFFJQ19DT05GSUdfODApID8KLQkJCVFJQ19UQVBFX1FJQzgwIDogUUlDX1RBUEVfUUlDNDA7Ci0JCS8qID8/IGhvdydzIGFib3V0IDQyNWZ0IHRhcGVzPyAqLwotCQkqdGFwZV9sZW4gPSAoY29uZmlnICYgUUlDX0NPTkZJR19MT05HKSA/IDMwNyA6IDA7Ci0JCSptb2RlbCA9IHByZV9xaWMxMTdjOwotCQlyZXN1bHQgPSAwOwotCX0gZWxzZSB7Ci0JCWZ0X2xhc3Rfc3RhdHVzLnN0YXR1cy50YXBlX3N0YXR1cyA9IChfX3U4KShzdGF0dXMgJiAweGZmKTsKLQkJKm1vZGVsID0gcG9zdF9xaWMxMTdiOwotCQlUUkFDRShmdF90X2FueSwgInJlcG9ydCB0YXBlIHN0YXR1cyByZXN1bHQgPSAlMDJ4Iiwgc3RhdHVzKTsKLQkJLyogcG9zdC0gUUlDMTE3IHJldiBDIHNwZWMuIGRyaXZlLCBRSUNfQ09ORklHXzgwIGJpdCBpcwotCQkgKiBpbnZhbGlkLiAKLQkJICovCi0JCXN3aXRjaCAoc3RhdHVzICYgUUlDX1RBUEVfU1REX01BU0spIHsKLQkJY2FzZSBRSUNfVEFQRV9RSUM0MDoKLQkJY2FzZSBRSUNfVEFQRV9RSUM4MDoKLQkJY2FzZSBRSUNfVEFQRV9RSUMzMDIwOgotCQljYXNlIFFJQ19UQVBFX1FJQzMwMTA6Ci0JCQkqcWljX3N0ZCA9IHN0YXR1cyAmIFFJQ19UQVBFX1NURF9NQVNLOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkqcWljX3N0ZCA9IC0xOwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChzdGF0dXMgJiBRSUNfVEFQRV9MRU5fTUFTSykgewotCQljYXNlIFFJQ19UQVBFXzIwNUZUOgotCQkJLyogMjA1IG9yIDQyNSsgZnQgNTUwIE9lIHRhcGUgKi8KLQkJCSp0YXBlX2xlbiA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBRSUNfVEFQRV8zMDdGVDoKLQkJCS8qIDMwNy41IGZ0IDU1MCBPZSBFeHRlbmRlZCBMZW5ndGggKFhMKSB0YXBlICovCi0JCQkqdGFwZV9sZW4gPSAzMDc7Ci0JCQlicmVhazsKLQkJY2FzZSBRSUNfVEFQRV9WQVJJQUJMRToKLQkJCS8qIFZhcmlhYmxlIGxlbmd0aCA1NTAgT2UgdGFwZSAqLwotCQkJKnRhcGVfbGVuID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFFJQ19UQVBFXzExMDBGVDoKLQkJCS8qIDExMDAgZnQgNTUwIE9lIHRhcGUgKi8KLQkJCSp0YXBlX2xlbiA9IDExMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBRSUNfVEFQRV9GTEVYOgotCQkJLyogVmFyaWFibGUgbGVuZ3RoIDkwMCBPZSB0YXBlICovCi0JCQkqdGFwZV9sZW4gPSAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkqdGFwZV9sZW4gPSAtMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgqcWljX3N0ZCA9PSAtMSB8fCAqdGFwZV9sZW4gPT0gLTEpIHsKLQkJCVRSQUNFKGZ0X3RfYW55LAotCQkJICAgICAgInBvc3QgcWljLTExN2Igc3BlYyBkcml2ZSB3aXRoIHVua25vd24gdGFwZSIpOwotCQl9Ci0JCXJlc3VsdCA9ICp0YXBlX2xlbiA9PSAtMSA/IC1FSU8gOiAwOwotCQlpZiAoc3RhdHVzICYgUUlDX1RBUEVfV0lERSkgewotCQkJc3dpdGNoICgqcWljX3N0ZCkgewotCQkJY2FzZSBRSUNfVEFQRV9RSUM4MDoKLQkJCQlUUkFDRShmdF90X2luZm8sICJUUi0xIHRhcGUgZGV0ZWN0ZWQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUUlDX1RBUEVfUUlDMzAxMDoKLQkJCQlUUkFDRShmdF90X2luZm8sICJUUi0yIHRhcGUgZGV0ZWN0ZWQiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUUlDX1RBUEVfUUlDMzAyMDoKLQkJCQlUUkFDRShmdF90X2luZm8sICJUUi0zIHRhcGUgZGV0ZWN0ZWQiKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJVFJBQ0UoZnRfdF93YXJuLAotCQkJCSAgICAgICJVbmtub3duIFRyYXZhbiB0YXBlIHR5cGUgZGV0ZWN0ZWQiKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlUUkFDRV9FWElUIChyZXN1bHQgPCAwKSA/IC1FSU8gOiAwOwotfQotCi1zdGF0aWMgaW50IGZ0YXBlX3JlcG9ydF9yb21fdmVyc2lvbihpbnQgKnZlcnNpb24pCi17Ci0KLQlpZiAoZnRhcGVfcmVwb3J0X29wZXJhdGlvbih2ZXJzaW9uLCBRSUNfUkVQT1JUX1JPTV9WRVJTSU9OLCA4KSA8IDApIHsKLQkJcmV0dXJuIC1FSU87Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi12b2lkIGZ0YXBlX3JlcG9ydF92ZW5kb3JfaWQodW5zaWduZWQgaW50ICppZCkKLXsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQkvKiBXZSdsbCB0cnkgdG8gZ2V0IGEgdmVuZG9yIGlkIGZyb20gdGhlIGRyaXZlLiAgRmlyc3QKLQkgKiBhY2NvcmRpbmcgdG8gdGhlIFFJQy0xMTcgc3BlYywgYSAxNi1iaXQgaWQgaXMgcmVxdWVzdGVkLgotCSAqIElmIHRoYXQgZmFpbHMgd2UnbGwgdHJ5IGFuIDgtYml0IHZlcnNpb24sIG90aGVyd2lzZSB3ZSdsbAotCSAqIHRyeSBhbiB1bmRvY3VtZW50ZWQgcXVlcnkuCi0JICovCi0JcmVzdWx0ID0gZnRhcGVfcmVwb3J0X29wZXJhdGlvbigoaW50ICopIGlkLCBRSUNfUkVQT1JUX1ZFTkRPUl9JRCwgMTYpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXJlc3VsdCA9IGZ0YXBlX3JlcG9ydF9vcGVyYXRpb24oKGludCAqKSBpZCwKLQkJCQkJCVFJQ19SRVBPUlRfVkVORE9SX0lELCA4KTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCS8qIFRoZSBmb2xsb3dpbmcgaXMgYW4gdW5kb2N1bWVudGVkIGNhbGwgZm91bmQKLQkJCSAqIGluIHRoZSBDTVMgY29kZS4KLQkJCSAqLwotCQkJcmVzdWx0ID0gZnRhcGVfcmVwb3J0X29wZXJhdGlvbigoaW50ICopIGlkLCAyNCwgOCk7Ci0JCQlpZiAocmVzdWx0IDwgMCkgewotCQkJCSppZCA9IFVOS05PV05fVkVORE9SOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRShmdF90X25vaXNlLCAiZ290IG9sZCA4IGJpdCBpZDogJTA0eCIsCi0JCQkJICAgICAgKmlkKTsKLQkJCQkqaWQgfD0gMHgyMDAwMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJnb3QgOCBiaXQgaWQ6ICUwNHgiLCAqaWQpOwotCQkJKmlkIHw9IDB4MTAwMDA7Ci0JCX0KLQl9IGVsc2UgewotCQlUUkFDRShmdF90X25vaXNlLCAiZ290IDE2IGJpdCBpZDogJTA0eCIsICppZCk7Ci0JfQotCWlmICgqaWQgPT0gMHgwMDQ3KSB7Ci0JCWludCB2ZXJzaW9uOwotCQlpbnQgc2lnbjsKLQotCQlpZiAoZnRhcGVfcmVwb3J0X3JvbV92ZXJzaW9uKCZ2ZXJzaW9uKSA8IDApIHsKLQkJCVRSQUNFKGZ0X3RfYnVnLCAicmVwb3J0IHJvbSB2ZXJzaW9uIGZhaWxlZCIpOwotCQkJVFJBQ0VfRVhJVDsKLQkJfQotCQlUUkFDRShmdF90X25vaXNlLCAiQ01TIHJvbSB2ZXJzaW9uOiAlZCIsIHZlcnNpb24pOwotCQlmdGFwZV9jb21tYW5kKFFJQ19FTlRFUl9ESUFHTk9TVElDXzEpOwotCQlmdGFwZV9jb21tYW5kKFFJQ19FTlRFUl9ESUFHTk9TVElDXzEpOwotCQlkaWFnbm9zdGljX21vZGUgPSAxOwotCQlpZiAoZnRhcGVfcmVwb3J0X29wZXJhdGlvbigmc2lnbiwgOSwgOCkgPCAwKSB7Ci0JCQl1bnNpZ25lZCBpbnQgZXJyb3I7Ci0JCQlxaWMxMTdfY21kX3QgY29tbWFuZDsKLQotCQkJZnRhcGVfcmVwb3J0X2Vycm9yKCZlcnJvciwgJmNvbW1hbmQsIDEpOwotCQkJZnRhcGVfY29tbWFuZChRSUNfRU5URVJfUFJJTUFSWV9NT0RFKTsKLQkJCWRpYWdub3N0aWNfbW9kZSA9IDA7Ci0JCQlUUkFDRV9FWElUOwkvKiBmYWlsdXJlICEgKi8KLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJDTVMgc2lnbmF0dXJlOiAlMDJ4Iiwgc2lnbik7Ci0JCX0KLQkJaWYgKHNpZ24gPT0gMHhhNSkgewotCQkJcmVzdWx0ID0gZnRhcGVfcmVwb3J0X29wZXJhdGlvbigmc2lnbiwgMzcsIDgpOwotCQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCQlpZiAodmVyc2lvbiA+PSA2MykgewotCQkJCQkqaWQgPSAweDg4ODA7Ci0JCQkJCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JCQkJCSAgICAgICJUaGlzIGlzIGFuIElvbWVnYSBkcml2ZSAhIik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKmlkID0gMHgwMDQ3OwotCQkJCQlUUkFDRShmdF90X25vaXNlLAotCQkJCQkgICAgICAiVGhpcyBpcyBhIHJlYWwgQ01TIGRyaXZlICEiKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCSppZCA9IDB4MDA0NzsKLQkJCQlUUkFDRShmdF90X25vaXNlLCAiQ01TIHN0YXR1czogJWQiLCBzaWduKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCSppZCA9IFVOS05PV05fVkVORE9SOwotCQl9Ci0JCWZ0YXBlX2NvbW1hbmQoUUlDX0VOVEVSX1BSSU1BUllfTU9ERSk7Ci0JCWRpYWdub3N0aWNfbW9kZSA9IDA7Ci0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyBpbnQgcWljX3JhdGVfY29kZSh1bnNpZ25lZCBpbnQgcmF0ZSkKLXsKLQlzd2l0Y2ggKHJhdGUpIHsKLQljYXNlIDI1MDoKLQkJcmV0dXJuIFFJQ19DT05GSUdfUkFURV8yNTA7Ci0JY2FzZSA1MDA6Ci0JCXJldHVybiBRSUNfQ09ORklHX1JBVEVfNTAwOwotCWNhc2UgMTAwMDoKLQkJcmV0dXJuIFFJQ19DT05GSUdfUkFURV8xMDAwOwotCWNhc2UgMjAwMDoKLQkJcmV0dXJuIFFJQ19DT05GSUdfUkFURV8yMDAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBRSUNfQ09ORklHX1JBVEVfNTAwOwotCX0KLX0KLQotc3RhdGljIGludCBmdGFwZV9zZXRfcmF0ZV90ZXN0KHVuc2lnbmVkIGludCAqbWF4X3JhdGUpCi17Ci0JdW5zaWduZWQgaW50IGVycm9yOwotCXFpYzExN19jbWRfdCBjb21tYW5kOwotCWludCBzdGF0dXM7Ci0JaW50IHN1cHBvcnRlZCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qICBDaGVjayBpZiB0aGUgZHJpdmUgZG9lcyBzdXBwb3J0IHRoZSBzZWxlY3QgcmF0ZSBjb21tYW5kCi0JICogIGJ5IHRlc3RpbmcgYWxsIGRpZmZlcmVudCBzZXR0aW5ncy4gSWYgYW55IG9uZSBpcyBhY2NlcHRlZAotCSAqICB3ZSBhc3N1bWUgdGhlIGNvbW1hbmQgaXMgc3VwcG9ydGVkLCBlbHNlIG5vdC4KLQkgKi8KLQlmb3IgKCptYXhfcmF0ZSA9IDIwMDA7ICptYXhfcmF0ZSA+PSAyNTA7ICptYXhfcmF0ZSAvPSAyKSB7Ci0JCWlmIChmdGFwZV9jb21tYW5kKFFJQ19TRUxFQ1RfUkFURSkgPCAwKSB7Ci0JCQljb250aW51ZTsKLQkJfQkJCi0JCWlmIChmdGFwZV9wYXJhbWV0ZXJfd2FpdChxaWNfcmF0ZV9jb2RlKCptYXhfcmF0ZSksCi0JCQkJCSAxICogRlRfU0VDT05ELCAmc3RhdHVzKSA8IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChzdGF0dXMgJiBRSUNfU1RBVFVTX0VSUk9SKSB7Ci0JCQlmdGFwZV9yZXBvcnRfZXJyb3IoJmVycm9yLCAmY29tbWFuZCwgMCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlzdXBwb3J0ZWQgPSAxOyAvKiBkaWQgYWNjZXB0IGEgcmVxdWVzdCAqLwotCQlicmVhazsKLQl9Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgIlNlbGVjdCBSYXRlIGNvbW1hbmQgaXMlcyBzdXBwb3J0ZWQiLCAKLQkgICAgICBzdXBwb3J0ZWQgPyAiIiA6ICIgbm90Iik7Ci0JVFJBQ0VfRVhJVCBzdXBwb3J0ZWQ7Ci19Ci0KLWludCBmdGFwZV9zZXRfZGF0YV9yYXRlKHVuc2lnbmVkIGludCBuZXdfcmF0ZSAvKiBLYnBzICovLCB1bnNpZ25lZCBpbnQgcWljX3N0ZCkKLXsKLQlpbnQgc3RhdHVzOwotCWludCByZXN1bHQgPSAwOwotCXVuc2lnbmVkIGludCBkYXRhX3JhdGUgPSBuZXdfcmF0ZTsKLQlzdGF0aWMgaW50IHN1cHBvcnRlZDsKLQlpbnQgcmF0ZV9jaGFuZ2VkID0gMDsKLQlxaWNfbW9kZWwgZHVtbXlfbW9kZWw7Ci0JdW5zaWduZWQgaW50IGR1bW15X3FpY19zdGQsIGR1bW15X3RhcGVfbGVuOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoZnRfZHJpdmVfbWF4X3JhdGUgPT0gMCkgeyAvKiBmaXJzdCB0aW1lICovCi0JCXN1cHBvcnRlZCA9IGZ0YXBlX3NldF9yYXRlX3Rlc3QoJmZ0X2RyaXZlX21heF9yYXRlKTsKLQl9Ci0JaWYgKHN1cHBvcnRlZCkgewotCQlmdGFwZV9jb21tYW5kKFFJQ19TRUxFQ1RfUkFURSk7Ci0JCXJlc3VsdCA9IGZ0YXBlX3BhcmFtZXRlcl93YWl0KHFpY19yYXRlX2NvZGUobmV3X3JhdGUpLAotCQkJCQkgICAgICAxICogRlRfU0VDT05ELCAmc3RhdHVzKTsKLQkJaWYgKHJlc3VsdCA+PSAwICYmICEoc3RhdHVzICYgUUlDX1NUQVRVU19FUlJPUikpIHsKLQkJCXJhdGVfY2hhbmdlZCA9IDE7Ci0JCX0KLQl9Ci0JVFJBQ0VfQ0FUQ0gocmVzdWx0ID0gZnRhcGVfcmVwb3J0X2NvbmZpZ3VyYXRpb24oJmR1bW15X21vZGVsLAotCQkJCQkJCSZkYXRhX3JhdGUsIAotCQkJCQkJCSZkdW1teV9xaWNfc3RkLAotCQkJCQkJCSZkdW1teV90YXBlX2xlbiksKTsKLQlpZiAoZGF0YV9yYXRlICE9IG5ld19yYXRlKSB7Ci0JCWlmICghc3VwcG9ydGVkKSB7Ci0JCQlUUkFDRShmdF90X3dhcm4sICJSYXRlIGNoYW5nZSBub3Qgc3VwcG9ydGVkISIpOwotCQl9IGVsc2UgaWYgKHJhdGVfY2hhbmdlZCkgewotCQkJVFJBQ0UoZnRfdF93YXJuLCAiUmVxdWVzdGVkOiAlZCwgZ290ICVkIiwKLQkJCSAgICAgIG5ld19yYXRlLCBkYXRhX3JhdGUpOwotCQl9IGVsc2UgewotCQkJVFJBQ0UoZnRfdF93YXJuLCAiUmF0ZSBjaGFuZ2UgZmFpbGVkISIpOwotCQl9Ci0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JfQotCS8qCi0JICogIFNldCBkYXRhIHJhdGUgYW5kIHdyaXRlIHByZWNvbXBlbnNhdGlvbiBhcyBzcGVjaWZpZWQ6Ci0JICoKLQkgKiAgICAgICAgICAgIHwgIFFJQy00MC84MCAgfCBRSUMtMzAxMC8zMDIwCi0JICogICByYXRlICAgICB8ICAgcHJlY29tcCAgIHwgICAgcHJlY29tcAotCSAqICAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0KLQkgKiAgMjUwIEticHMuIHwgICAyNTAgbnMuICAgfCAgICAgMCBucy4KLQkgKiAgNTAwIEticHMuIHwgICAxMjUgbnMuICAgfCAgICAgMCBucy4KLQkgKiAgICAxIE1icHMuIHwgICAgNDIgbnMuICAgfCAgICAgMCBucy4KLQkgKiAgICAyIE1icHMgIHwgICAgICBOL0EgICAgfCAgICAgMCBucy4KLQkgKi8KLQlpZiAoKHFpY19zdGQgPT0gUUlDX1RBUEVfUUlDNDAgJiYgZGF0YV9yYXRlID4gNTAwKSB8fCAKLQkgICAgKHFpY19zdGQgPT0gUUlDX1RBUEVfUUlDODAgJiYgZGF0YV9yYXRlID4gMTAwMCkpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwKLQkJCSAgICBmdF90X3dhcm4sICJEYXRhcmF0ZSB0b28gaGlnaCBmb3IgUUlDLW1vZGUiKTsKLQl9Ci0JVFJBQ0VfQ0FUQ0goZmRjX3NldF9kYXRhX3JhdGUoZGF0YV9yYXRlKSxfcmVzID0gLUVJTlZBTCk7Ci0JZnRfZGF0YV9yYXRlID0gZGF0YV9yYXRlOwotCWlmIChxaWNfc3RkID09IFFJQ19UQVBFX1FJQzQwIHx8IHFpY19zdGQgPT0gUUlDX1RBUEVfUUlDODApIHsKLQkJc3dpdGNoIChkYXRhX3JhdGUpIHsKLQkJY2FzZSAyNTA6Ci0JCQlmZGNfc2V0X3dyaXRlX3ByZWNvbXAoMjUwKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIDUwMDoKLQkJCWZkY19zZXRfd3JpdGVfcHJlY29tcCgxMjUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTAwMDoKLQkJCWZkY19zZXRfd3JpdGVfcHJlY29tcCg0Mik7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWZkY19zZXRfd3JpdGVfcHJlY29tcCgwKTsKLQl9Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLS8qICBUaGUgbmV4dCB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNvcGUgd2l0aCBleGNlc3NpdmUgb3ZlcnJ1biBlcnJvcnMKLSAqLwotaW50IGZ0YXBlX2luY3JlYXNlX3RocmVzaG9sZCh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGZkYy50eXBlIDwgaTgyMDc3IHx8IGZ0X2ZkY190aHJlc2hvbGQgPj0gMTIpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsICJjYW5ub3QgaW5jcmVhc2UgZmlmbyB0aHJlc2hvbGQiKTsKLQl9Ci0JaWYgKGZkY19maWZvX3RocmVzaG9sZCgrK2Z0X2ZkY190aHJlc2hvbGQsIE5VTEwsIE5VTEwsIE5VTEwpIDwgMCkgewotCQlUUkFDRShmdF90X2VyciwgImNhbm5vdCBpbmNyZWFzZSBmaWZvIHRocmVzaG9sZCIpOwotCQlmdF9mZGNfdGhyZXNob2xkIC0tOwotCQlmZGNfcmVzZXQoKTsKLQl9Ci0JVFJBQ0UoZnRfdF9pbmZvLCAiTmV3IEZJRk8gdGhyZXNob2xkOiAlZCIsIGZ0X2ZkY190aHJlc2hvbGQpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotaW50IGZ0YXBlX2hhbGZfZGF0YV9yYXRlKHZvaWQpCi17Ci0JaWYgKGZ0X2RhdGFfcmF0ZSA8IDUwMCkgewotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChmdGFwZV9zZXRfZGF0YV9yYXRlKGZ0X2RhdGFfcmF0ZSAvIDIsIGZ0X3FpY19zdGQpIDwgMCkgewotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JZnRhcGVfY2FsY190aW1lb3V0cyhmdF9xaWNfc3RkLCBmdF9kYXRhX3JhdGUsIGZ0YXBlX3RhcGVfbGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogICAgICBTZWVrIHRoZSBoZWFkIHRvIHRoZSBzcGVjaWZpZWQgdHJhY2suCi0gKi8KLWludCBmdGFwZV9zZWVrX2hlYWRfdG9fdHJhY2sodW5zaWduZWQgaW50IHRyYWNrKQotewotCWludCBzdGF0dXM7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWZ0X2xvY2F0aW9uLnRyYWNrID0gLTE7IC8qIHJlbWFpbnMgc2V0IGluIGNhc2Ugb2YgZXJyb3IgKi8KLQlpZiAodHJhY2sgPj0gZnRfdHJhY2tzX3Blcl90YXBlKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsIGZ0X3RfYnVnLCAidHJhY2sgb3V0IG9mIGJvdW5kcyIpOwotCX0KLQlUUkFDRShmdF90X2Zsb3csICJzZWVraW5nIHRyYWNrICVkIiwgdHJhY2spOwotCVRSQUNFX0NBVENIKGZ0YXBlX2NvbW1hbmQoUUlDX1NFRUtfSEVBRF9UT19UUkFDSyksKTsKLQlUUkFDRV9DQVRDSChmdGFwZV9wYXJhbWV0ZXJfd2FpdCh0cmFjaywgZnRhcGVfdGltZW91dC5oZWFkX3NlZWssCi0JCQkJCSAmc3RhdHVzKSwpOwotCWZ0X2xvY2F0aW9uLnRyYWNrID0gdHJhY2s7Ci0JZnRhcGVfbWlnaHRfYmVfb2ZmX3RyYWNrID0gMDsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLWludCBmdGFwZV93YWtldXBfZHJpdmUod2FrZV91cF90eXBlcyBtZXRob2QpCi17Ci0JaW50IHN0YXR1czsKLQlpbnQgbW90b3Jfb24gPSAwOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlzd2l0Y2ggKG1ldGhvZCkgewotCWNhc2Ugd2FrZV91cF9jb2xvcmFkbzoKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfY29tbWFuZChRSUNfUEhBTlRPTV9TRUxFQ1QpLCk7Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX3BhcmFtZXRlcigwIC8qIGZ0X2RyaXZlX3NlbCA/PyAqLyksKTsKLQkJYnJlYWs7Ci0JY2FzZSB3YWtlX3VwX21vdW50YWluOgotCQlUUkFDRV9DQVRDSChmdGFwZV9jb21tYW5kKFFJQ19TT0ZUX1NFTEVDVCksKTsKLQkJZnRhcGVfc2xlZXAoRlRfTUlMTElTRUNPTkQpOwkvKiBORUVERUQgKi8KLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfcGFyYW1ldGVyKDE4KSwpOwotCQlicmVhazsKLQljYXNlIHdha2VfdXBfaW5zaWdodDoKLQkJZnRhcGVfc2xlZXAoMTAwICogRlRfTUlMTElTRUNPTkQpOwotCQltb3Rvcl9vbiA9IDE7Ci0JCWZkY19tb3Rvcihtb3Rvcl9vbik7CS8qIGVuYWJsZSBpcyBkb25lIGJ5IG1vdG9yLW9uICovCi0JY2FzZSBub193YWtlX3VwOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlUUkFDRV9FWElUIC1FTk9ERVY7CS8qIHVua25vd24gd2FrZXVwIG1ldGhvZCAqLwotCQlicmVhazsKLQl9Ci0JLyogIElmIHdha2V1cCBzdWNjZWVkZWQgd2Ugc2hvdWxkbid0IGdldCBhbiBlcnJvciBoZXJlLi4KLQkgKi8KLQlUUkFDRV9DQVRDSChmdGFwZV9yZXBvcnRfcmF3X2RyaXZlX3N0YXR1cygmc3RhdHVzKSwKLQkJICAgIGlmIChtb3Rvcl9vbikgewotCQkJICAgIGZkY19tb3RvcigwKTsKLQkJICAgIH0pOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotaW50IGZ0YXBlX3B1dF9kcml2ZV90b19zbGVlcCh3YWtlX3VwX3R5cGVzIG1ldGhvZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0Jc3dpdGNoIChtZXRob2QpIHsKLQljYXNlIHdha2VfdXBfY29sb3JhZG86Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX2NvbW1hbmQoUUlDX1BIQU5UT01fREVTRUxFQ1QpLCk7Ci0JCWJyZWFrOwotCWNhc2Ugd2FrZV91cF9tb3VudGFpbjoKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfY29tbWFuZChRSUNfU09GVF9ERVNFTEVDVCksKTsKLQkJYnJlYWs7Ci0JY2FzZSB3YWtlX3VwX2luc2lnaHQ6Ci0JCWZkY19tb3RvcigwKTsJLyogZW5hYmxlIGlzIGRvbmUgYnkgbW90b3Itb24gKi8KLQljYXNlIG5vX3dha2VfdXA6CS8qIG5vIHdha2V1cCAvIG5vIHNsZWVwICEgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJVFJBQ0VfRVhJVCAtRU5PREVWOwkvKiB1bmtub3duIHdha2V1cCBtZXRob2QgKi8KLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1pbnQgZnRhcGVfcmVzZXRfZHJpdmUodm9pZCkKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgc3RhdHVzOwotCXVuc2lnbmVkIGludCBlcnJfY29kZTsKLQlxaWMxMTdfY21kX3QgZXJyX2NvbW1hbmQ7Ci0JaW50IGk7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCS8qICBXZSB3YW50IHRvIHJlLWVzdGFibGlzaCBjb250YWN0IHdpdGggb3VyIGRyaXZlLiAgRmlyZSBhCi0JICogIG51bWJlciBvZiByZXNldCBjb21tYW5kcyAoc2luZ2xlIHN0ZXAgcHVsc2VzKSBhbmQgcHJheSBmb3IKLQkgKiAgc3VjY2Vzcy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgIlJlc2V0dGluZyBmZGMiKTsKLQkJZmRjX3Jlc2V0KCk7Ci0JCWZ0YXBlX3NsZWVwKDEwICogRlRfTUlMTElTRUNPTkQpOwotCQlUUkFDRShmdF90X2Zsb3csICJSZXNldCBjb21tYW5kIHRvIGRyaXZlIik7Ci0JCXJlc3VsdCA9IGZ0YXBlX2NvbW1hbmQoUUlDX1JFU0VUKTsKLQkJaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCQlmdGFwZV9zbGVlcCgxICogRlRfU0VDT05EKTsgLyogIGRyaXZlIG5vdAotCQkJCQkJICAgICAqICBhY2Nlc3NpYmxlCi0JCQkJCQkgICAgICogIGR1cmluZyAxIHNlY29uZAotCQkJCQkJICAgICAqLwotCQkJVFJBQ0UoZnRfdF9mbG93LCAiUmUtc2VsZWN0aW5nIGRyaXZlIik7Ci0KLQkJCS8qIFN0cmFuZ2UsIHRoZSBRSUMtMTE3IHNwZWNzIGRvbid0IG1lbnRpb24KLQkJCSAqIHRoaXMgYnV0IHRoZSBkcml2ZSBnZXRzIGRlc2VsZWN0ZWQgYWZ0ZXIgYQotCQkJICogc29mdCByZXNldCAhICBTbyB3ZSBuZWVkIHRvIGVuYWJsZSBpdAotCQkJICogYWdhaW4uCi0JCQkgKi8KLQkJCWlmIChmdGFwZV93YWtldXBfZHJpdmUoZnRfZHJpdmVfdHlwZS53YWtlX3VwKSA8IDApIHsKLQkJCQlUUkFDRShmdF90X2VyciwgIldha2V1cCBmYWlsZWQgISIpOwotCQkJfQotCQkJVFJBQ0UoZnRfdF9mbG93LCAiV2FpdGluZyB1bnRpbCBkcml2ZSBnZXRzIHJlYWR5Iik7Ci0JCQlyZXN1bHQ9IGZ0YXBlX3JlYWR5X3dhaXQoZnRhcGVfdGltZW91dC5yZXNldCwgJnN0YXR1cyk7Ci0JCQlpZiAocmVzdWx0ID09IDAgJiYgKHN0YXR1cyAmIFFJQ19TVEFUVVNfRVJST1IpKSB7Ci0JCQkJcmVzdWx0ID0gZnRhcGVfcmVwb3J0X2Vycm9yKCZlcnJfY29kZSwKLQkJCQkJCQkgICAgJmVycl9jb21tYW5kLCAxKTsKLQkJCQlpZiAocmVzdWx0ID09IDAgJiYgZXJyX2NvZGUgPT0gMjcpIHsKLQkJCQkJLyogIE9rYXksIGRyaXZlIHNhdyByZXNldAotCQkJCQkgKiAgY29tbWFuZCBhbmQgcmVzcG9uZGVkIGFzIGl0Ci0JCQkJCSAqICBzaG91bGQKLQkJCQkJICovCi0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXJlc3VsdCA9IC1FSU87Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlyZXN1bHQgPSAtRUlPOwotCQkJfQotCQl9Ci0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQl9Ci0JaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCVRSQUNFKGZ0X3RfZXJyLCAiR2VuZXJhbCBmYWlsdXJlIHRvIHJlc2V0IHRhcGUgZHJpdmUiKTsKLQl9IGVsc2UgewotCQkvKiAgUmVzdG9yZSBjb3JyZWN0IHNldHRpbmdzOiBrZWVwIG9yaWdpbmFsIHJhdGUgCi0JCSAqLwotCQlmdGFwZV9zZXRfZGF0YV9yYXRlKGZ0X2RhdGFfcmF0ZSwgZnRfcWljX3N0ZCk7Ci0JfQotCWZ0YXBlX2luaXRfZHJpdmVfbmVlZGVkID0gMTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pby5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YTdiYWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLWlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9JT19ICi0jZGVmaW5lIF9GVEFQRV9JT19ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgIChDKSAxOTk3ICAgICAgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1pby5oLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6MTggJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZ2x1ZSBwYXJ0IG9mIHRoZQotICogICAgICBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciAiZnRhcGUiIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcWljMTE3Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnRhcGUtdmVuZG9ycy5oPgotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IHNlZWs7Ci0JdW5zaWduZWQgaW50IHJlc2V0OwotCXVuc2lnbmVkIGludCByZXdpbmQ7Ci0JdW5zaWduZWQgaW50IGhlYWRfc2VlazsKLQl1bnNpZ25lZCBpbnQgc3RvcDsKLQl1bnNpZ25lZCBpbnQgcGF1c2U7Ci19IGZ0X3RpbWVvdXRfdGFibGU7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JcHJlaGlzdG9yaWMsIHByZV9xaWMxMTdjLCBwb3N0X3FpYzExN2IsIHBvc3RfcWljMTE3ZCAKLX0gcWljX21vZGVsOwotCi0vKgotICogICAgICBmdGFwZS1pby5jIGRlZmluZWQgZ2xvYmFsIHZhcnMuCi0gKi8KLWV4dGVybiBmdF90aW1lb3V0X3RhYmxlIGZ0YXBlX3RpbWVvdXQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IGZ0YXBlX3RhcGVfbGVuOwotZXh0ZXJuIHZvbGF0aWxlIHFpYzExN19jbWRfdCBmdGFwZV9jdXJyZW50X2NvbW1hbmQ7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHFpYzExN19jb21tYW5kX3RhYmxlIHFpYzExN19jbWRzW107Ci1leHRlcm4gaW50IGZ0YXBlX21pZ2h0X2JlX29mZl90cmFjazsKLQotLyoKLSAqICAgICAgZnRhcGUtaW8uYyBkZWZpbmVkIGdsb2JhbCBmdW5jdGlvbnMuCi0gKi8KLWV4dGVybiB2b2lkIGZ0YXBlX3VkZWxheSh1bnNpZ25lZCBpbnQgdXNlY3MpOwotZXh0ZXJuIHZvaWQgIGZ0YXBlX3VkZWxheV9jYWxpYnJhdGUodm9pZCk7Ci1leHRlcm4gdm9pZCBmdGFwZV9zbGVlcCh1bnNpZ25lZCBpbnQgdGltZSk7Ci1leHRlcm4gdm9pZCBmdGFwZV9yZXBvcnRfdmVuZG9yX2lkKHVuc2lnbmVkIGludCAqaWQpOwotZXh0ZXJuIGludCAgZnRhcGVfY29tbWFuZChxaWMxMTdfY21kX3QgY29tbWFuZCk7Ci1leHRlcm4gaW50ICBmdGFwZV9jb21tYW5kX3dhaXQocWljMTE3X2NtZF90IGNvbW1hbmQsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsCi0JCQkgICAgICAgaW50ICpzdGF0dXMpOwotZXh0ZXJuIGludCAgZnRhcGVfcGFyYW1ldGVyKHVuc2lnbmVkIGludCBwYXJhbWV0ZXIpOwotZXh0ZXJuIGludCBmdGFwZV9yZXBvcnRfb3BlcmF0aW9uKGludCAqc3RhdHVzLAotCQkJCSAgcWljMTE3X2NtZF90ICBjb21tYW5kLAotCQkJCSAgaW50IHJlc3VsdF9sZW5ndGgpOwotZXh0ZXJuIGludCBmdGFwZV9yZXBvcnRfY29uZmlndXJhdGlvbihxaWNfbW9kZWwgKm1vZGVsLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCAqcmF0ZSwKLQkJCQkgICAgICBpbnQgKnFpY19zdGQsCi0JCQkJICAgICAgaW50ICp0YXBlX2xlbik7Ci1leHRlcm4gaW50IGZ0YXBlX3JlcG9ydF9kcml2ZV9zdGF0dXMoaW50ICpzdGF0dXMpOwotZXh0ZXJuIGludCBmdGFwZV9yZXBvcnRfcmF3X2RyaXZlX3N0YXR1cyhpbnQgKnN0YXR1cyk7Ci1leHRlcm4gaW50IGZ0YXBlX3JlcG9ydF9zdGF0dXMoaW50ICpzdGF0dXMpOwotZXh0ZXJuIGludCBmdGFwZV9yZWFkeV93YWl0KHVuc2lnbmVkIGludCB0aW1lb3V0LCBpbnQgKnN0YXR1cyk7Ci1leHRlcm4gaW50IGZ0YXBlX3NlZWtfaGVhZF90b190cmFjayh1bnNpZ25lZCBpbnQgdHJhY2spOwotZXh0ZXJuIGludCBmdGFwZV9zZXRfZGF0YV9yYXRlKHVuc2lnbmVkIGludCBuZXdfcmF0ZSwgdW5zaWduZWQgaW50IHFpY19zdGQpOwotZXh0ZXJuIGludCBmdGFwZV9yZXBvcnRfZXJyb3IodW5zaWduZWQgaW50ICplcnJvciwKLQkJCSAgICAgIHFpYzExN19jbWRfdCAqY29tbWFuZCwKLQkJCSAgICAgIGludCByZXBvcnQpOwotZXh0ZXJuIGludCBmdGFwZV9yZXNldF9kcml2ZSh2b2lkKTsKLWV4dGVybiBpbnQgZnRhcGVfcHV0X2RyaXZlX3RvX3NsZWVwKHdha2VfdXBfdHlwZXMgbWV0aG9kKTsKLWV4dGVybiBpbnQgZnRhcGVfd2FrZXVwX2RyaXZlKHdha2VfdXBfdHlwZXMgbWV0aG9kKTsKLWV4dGVybiBpbnQgZnRhcGVfaW5jcmVhc2VfdGhyZXNob2xkKHZvaWQpOwotZXh0ZXJuIGludCBmdGFwZV9oYWxmX2RhdGFfcmF0ZSh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXByb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgwNWIxNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUKLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5jLHYgJAotICogJFJldmlzaW9uOiAxLjExICQKLSAqICREYXRlOiAxOTk3LzEwLzI0IDE0OjQ3OjM3ICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcHJvY2ZzIGludGVyZmFjZSBmb3IgdGhlCi0gKiAgICAgIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyICJmdGFwZSIgZm9yIExpbnV4LgotCi0gKglPbGQgY29kZSByZW1vdmVkLCBzd2l0Y2hlZCB0byBkeW5hbWljIHByb2MgZW50cnkuCi0gKi8KLQotCi0jaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfRlRfUFJPQ19GUykKLQotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3FpYzExNy5oPgotCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW8uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1wcm9jLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oIgotCi1zdGF0aWMgc2l6ZV90IGdldF9kcml2ZXJfaW5mbyhjaGFyICpidWYpCi17Ci0JY29uc3QgY2hhciAqZGVidWdfbGV2ZWxbXSA9IHsgImJ1Z3MiICAsCi0JCQkJICAgICAgImVycm9ycyIsCi0JCQkJICAgICAgIndhcm5pbmdzIiwKLQkJCQkgICAgICAiaW5mb3JtYXRpb25hbCIsCi0JCQkJICAgICAgIm5vaXN5IiwKLQkJCQkgICAgICAicHJvZ3JhbSBmbG93IiwKLQkJCQkgICAgICAiZmRjIGFuZCBkbWEiLAotCQkJCSAgICAgICJkYXRhIGZsb3ciLAotCQkJCSAgICAgICJhbnl0aGluZyIgfTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJICAgICAgICJ2ZXJzaW9uICAgICAgIDogJXNcbiIKLQkJICAgICAgICJ1c2VkIGRhdGEgcmF0ZTogJWQga2JpdC9zZWNcbiIKLQkJICAgICAgICJkbWEgbWVtb3J5ICAgIDogJWQga2JcbiIKLQkJICAgICAgICJkZWJ1ZyBtZXNzYWdlczogJXNcbiIsCi0JCSAgICAgICBGVEFQRV9WRVJTSU9OLAotCQkgICAgICAgZnRfZGF0YV9yYXRlLAotCQkgICAgICAgRlRfQlVGRl9TSVpFICogZnRfbnJfYnVmZmVycyA+PiAxMCwKLQkJICAgICAgIGRlYnVnX2xldmVsW1RSQUNFX0xFVkVMXSk7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZ2V0X3RhcGVkcml2ZV9pbmZvKGNoYXIgKmJ1ZikKLXsgCi0JcmV0dXJuIHNwcmludGYoYnVmLAotCQkgICAgICAgInZlbmRvciBpZCA6IDB4JTA0eFxuIgotCQkgICAgICAgImRyaXZlIG5hbWU6ICVzXG4iCi0JCSAgICAgICAid2luZCBzcGVlZDogJWQgaXBzXG4iCi0JCSAgICAgICAid2FrZXVwICAgIDogJXNcbiIKLQkJICAgICAgICJtYXguIHJhdGUgOiAlZCBrYml0L3NlY1xuIiwKLQkJICAgICAgIGZ0X2RyaXZlX3R5cGUudmVuZG9yX2lkLAotCQkgICAgICAgZnRfZHJpdmVfdHlwZS5uYW1lLAotCQkgICAgICAgZnRfZHJpdmVfdHlwZS5zcGVlZCwKLQkJICAgICAgICgoZnRfZHJpdmVfdHlwZS53YWtlX3VwID09IG5vX3dha2VfdXApCi0JCQk/ICJObyB3YWtldXAgbmVlZGVkIiA6Ci0JCQkoKGZ0X2RyaXZlX3R5cGUud2FrZV91cCA9PSB3YWtlX3VwX2NvbG9yYWRvKQotCQkJID8gIkNvbG9yYWRvIiA6Ci0JCQkgKChmdF9kcml2ZV90eXBlLndha2VfdXAgPT0gd2FrZV91cF9tb3VudGFpbikKLQkJCSAgPyAiTW91bnRhaW4iIDoKLQkJCSAgKChmdF9kcml2ZV90eXBlLndha2VfdXAgPT0gd2FrZV91cF9pbnNpZ2h0KQotCQkJICAgPyAiTW90b3Igb24iIDoKLQkJCSAgICJVbmtub3duIikpKSksCi0JCSAgICAgICBmdF9kcml2ZV9tYXhfcmF0ZSk7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZ2V0X2NhcnRyaWRnZV9pbmZvKGNoYXIgKmJ1ZikKLXsKLQlpZiAoZnRhcGVfaW5pdF9kcml2ZV9uZWVkZWQpIHsKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5pbml0aWFsaXplZFxuIik7Ci0JfQotCWlmIChmdF9ub190YXBlKSB7Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIm5vIGNhcnRyaWRnZSBpbnNlcnRlZFxuIik7Ci0JfQotCXJldHVybiBzcHJpbnRmKGJ1ZiwKLQkJICAgICAgICJzZWdtZW50cyAgOiAlNWRcbiIKLQkJICAgICAgICJ0cmFja3MgICAgOiAlNWRcbiIKLQkJICAgICAgICJsZW5ndGggICAgOiAlNWRmdFxuIgotCQkgICAgICAgImZvcm1hdHRlZCA6ICUzc1xuIgotCQkgICAgICAgIndyaXRhYmxlICA6ICUzc1xuIgotCQkgICAgICAgIlFJQyBzcGVjLiA6IFFJQy0lc1xuIgotCQkgICAgICAgImZtdC1jb2RlICA6ICUxZFxuIiwKLQkJICAgICAgIGZ0X3NlZ21lbnRzX3Blcl90cmFjaywKLQkJICAgICAgIGZ0X3RyYWNrc19wZXJfdGFwZSwKLQkJICAgICAgIGZ0YXBlX3RhcGVfbGVuLAotCQkgICAgICAgKGZ0X2Zvcm1hdHRlZCA9PSAxKSA/ICJ5ZXMiIDogIm5vIiwKLQkJICAgICAgIChmdF93cml0ZV9wcm90ZWN0ZWQgPT0gMSkgPyAibm8iIDogInllcyIsCi0JCSAgICAgICAoKGZ0X3FpY19zdGQgPT0gUUlDX1RBUEVfUUlDNDApID8gIjQwIiA6Ci0JCQkoKGZ0X3FpY19zdGQgPT0gUUlDX1RBUEVfUUlDODApID8gIjgwIiA6Ci0JCQkgKChmdF9xaWNfc3RkID09IFFJQ19UQVBFX1FJQzMwMTApID8gIjMwMTAiIDoKLQkJCSAgKChmdF9xaWNfc3RkID09IFFJQ19UQVBFX1FJQzMwMjApID8gIjMwMjAiIDoKLQkJCSAgICI/Pz8iKSkpKSwKLQkJICAgICAgIGZ0X2Zvcm1hdF9jb2RlKTsKLX0KLQotc3RhdGljIHNpemVfdCBnZXRfY29udHJvbGxlcl9pbmZvKGNoYXIgKmJ1ZikKLXsKLQljb25zdCBjaGFyICAqZmRjX25hbWVbXSA9IHsgIm5vIGZkYyIsCi0JCQkJICAgICJpODI3MiIsCi0JCQkJICAgICJpODIwNzciLAotCQkJCSAgICAiaTgyMDc3QUEiLAotCQkJCSAgICAiQ29sb3JhZG8gRkMtMTAgb3IgRkMtMjAiLAotCQkJCSAgICAiaTgyMDc4IiwKLQkJCQkgICAgImk4MjA3OF8xIiB9OwotCi0JcmV0dXJuIHNwcmludGYoYnVmLAotCQkgICAgICAgIkZEQyB0eXBlICA6ICVzXG4iCi0JCSAgICAgICAiRkRDIGJhc2UgIDogMHglMDN4XG4iCi0JCSAgICAgICAiRkRDIGlycSAgIDogJWRcbiIKLQkJICAgICAgICJGREMgZG1hICAgOiAlZFxuIgotCQkgICAgICAgIkZEQyB0aHIuICA6ICVkXG4iCi0JCSAgICAgICAibWF4LiByYXRlIDogJWQga2JpdC9zZWNcbiIsCi0JCSAgICAgICBmdF9tYWNoMiA/ICJNb3VudGFpbiBNQUNILTIiIDogZmRjX25hbWVbZmRjLnR5cGVdLAotCQkgICAgICAgZmRjLnNyYSwgZmRjLmlycSwgZmRjLmRtYSwKLQkJICAgICAgIGZ0X2ZkY190aHJlc2hvbGQsIGZ0X2ZkY19tYXhfcmF0ZSk7Ci19Ci0KLXN0YXRpYyBzaXplX3QgZ2V0X2hpc3RvcnlfaW5mbyhjaGFyICpidWYpCi17Ci0gICAgICAgIHNpemVfdCBsZW47Ci0KLQlsZW4gID0gc3ByaW50ZihidWYsCi0JCSAgICAgICAiXG5GREMgaXNyIHN0YXRpc3RpY3NcbiIKLQkJICAgICAgICIgaWRfYW1fZXJyb3JzICAgICA6ICUzZFxuIgotCQkgICAgICAgIiBpZF9jcmNfZXJyb3JzICAgIDogJTNkXG4iCi0JCSAgICAgICAiIGRhdGFfYW1fZXJyb3JzICAgOiAlM2RcbiIKLQkJICAgICAgICIgZGF0YV9jcmNfZXJyb3JzICA6ICUzZFxuIgotCQkgICAgICAgIiBvdmVycnVuX2Vycm9ycyAgIDogJTNkXG4iCi0JCSAgICAgICAiIG5vX2RhdGFfZXJyb3JzICAgOiAlM2RcbiIKLQkJICAgICAgICIgcmV0cmllcyAgICAgICAgICA6ICUzZFxuIiwKLQkJICAgICAgIGZ0X2hpc3RvcnkuaWRfYW1fZXJyb3JzLCAgIGZ0X2hpc3RvcnkuaWRfY3JjX2Vycm9ycywKLQkJICAgICAgIGZ0X2hpc3RvcnkuZGF0YV9hbV9lcnJvcnMsIGZ0X2hpc3RvcnkuZGF0YV9jcmNfZXJyb3JzLAotCQkgICAgICAgZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9ycywgZnRfaGlzdG9yeS5ub19kYXRhX2Vycm9ycywKLQkJICAgICAgIGZ0X2hpc3RvcnkucmV0cmllcyk7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLAotCQkgICAgICAgIlxuRUNDIHN0YXRpc3RpY3NcbiIKLQkJICAgICAgICIgY3JjX2Vycm9ycyAgICAgICA6ICUzZFxuIgotCQkgICAgICAgIiBjcmNfZmFpbHVyZXMgICAgIDogJTNkXG4iCi0JCSAgICAgICAiIGVjY19mYWlsdXJlcyAgICAgOiAlM2RcbiIKLQkJICAgICAgICIgc2VjdG9ycyBjb3JyZWN0ZWQ6ICUzZFxuIiwKLQkJICAgICAgIGZ0X2hpc3RvcnkuY3JjX2Vycm9ycywgICBmdF9oaXN0b3J5LmNyY19mYWlsdXJlcywKLQkJICAgICAgIGZ0X2hpc3RvcnkuZWNjX2ZhaWx1cmVzLCBmdF9oaXN0b3J5LmNvcnJlY3RlZCk7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLAotCQkgICAgICAgIlxudGFwZSBxdWFsaXR5IHN0YXRpc3RpY3NcbiIKLQkJICAgICAgICIgbWVkaWEgZGVmZWN0cyAgICA6ICUzZFxuIiwKLQkJICAgICAgIGZ0X2hpc3RvcnkuZGVmZWN0cyk7Ci0JbGVuICs9IHNwcmludGYoYnVmICsgbGVuLAotCQkgICAgICAgIlxudGFwZSBtb3Rpb24gc3RhdGlzdGljc1xuIgotCQkgICAgICAgIiByZXBvc2l0aW9ucyAgICAgIDogJTNkXG4iLAotCQkgICAgICAgZnRfaGlzdG9yeS5yZXdpbmRzKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgaW50IGZ0YXBlX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCSAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JY2hhciAqcHRyID0gcGFnZTsKLQlzaXplX3QgbGVuOwotCQotCXB0ciArPSBzcHJpbnRmKHB0ciwgIktlcm5lbCBEcml2ZXJcblxuIik7Ci0JcHRyICs9IGdldF9kcml2ZXJfaW5mbyhwdHIpOwotCXB0ciArPSBzcHJpbnRmKHB0ciwgIlxuVGFwZSBEcml2ZVxuXG4iKTsKLQlwdHIgKz0gZ2V0X3RhcGVkcml2ZV9pbmZvKHB0cik7Ci0JcHRyICs9IHNwcmludGYocHRyLCAiXG5GREMgQ29udHJvbGxlclxuXG4iKTsKLQlwdHIgKz0gZ2V0X2NvbnRyb2xsZXJfaW5mbyhwdHIpOwotCXB0ciArPSBzcHJpbnRmKHB0ciwgIlxuVGFwZSBDYXJ0cmlkZ2VcblxuIik7Ci0JcHRyICs9IGdldF9jYXJ0cmlkZ2VfaW5mbyhwdHIpOwotCXB0ciArPSBzcHJpbnRmKHB0ciwgIlxuSGlzdG9yeSBSZWNvcmRcblxuIik7Ci0JcHRyICs9IGdldF9oaXN0b3J5X2luZm8ocHRyKTsKLQotCWxlbiA9IHN0cmxlbihwYWdlKTsKLQkqc3RhcnQgPSBOVUxMOwotCWlmIChvZmYrY291bnQgPj0gbGVuKSB7Ci0JCSplb2YgPSAxOwotCX0gZWxzZSB7Ci0JCSplb2YgPSAwOwotCX0KLQlyZXR1cm4gbGVuOwotfQotCi1pbnQgX19pbml0IGZ0YXBlX3Byb2NfaW5pdCh2b2lkKQotewotCXJldHVybiBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJmdGFwZSIsIDAsICZwcm9jX3Jvb3QsCi0JCWZ0YXBlX3JlYWRfcHJvYywgTlVMTCkgIT0gTlVMTDsKLX0KLQotdm9pZCBmdGFwZV9wcm9jX2Rlc3Ryb3kodm9pZCkKLXsKLQlyZW1vdmVfcHJvY19lbnRyeSgiZnRhcGUiLCAmcHJvY19yb290KTsKLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICYmIGRlZmluZWQoQ09ORklHX0ZUX1BST0NfRlMpICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXByb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY0ZGZjYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcHJvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotI2lmbmRlZiBfRlRBUEVfUFJPQ19ICi0jZGVmaW5lIF9GVEFQRV9QUk9DX0gKLQotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk3IENsYXVzLUp1c3R1cyBIZWluZQotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1wcm9jLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODoyMCAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBwcm9jZnMgaW50ZXJmYWNlIG9mIHRoZQotICogICAgICBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciAiZnRhcGUiIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotCi1leHRlcm4gaW50ICBmdGFwZV9wcm9jX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBmdGFwZV9wcm9jX2Rlc3Ryb3kodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJlYWQuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1yZWFkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NjdkOGMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDYyMSArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJlYWQuYyx2ICQKLSAqICRSZXZpc2lvbjogMS42ICQKLSAqICREYXRlOiAxOTk3LzEwLzIxIDE0OjM5OjIyICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVhZGluZyBjb2RlCi0gKiAgICAgIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9xaWMxMTcuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcmVhZC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS13cml0ZS5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWVjYy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotCi0vKiAgICAgIEdsb2JhbCB2YXJzLgotICovCi0KLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotCi12b2lkIGZ0YXBlX3phcF9yZWFkX2J1ZmZlcnModm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBmdF9ucl9idWZmZXJzOyArK2kpIHsKLS8qICBjaGFuZ2VkIHRvICJmaXQiIHdpdGggZHluYW1pYyBhbGxvY2F0aW9uIG9mIHRhcGVfYnVmZmVyLiAtLWtocCAgKi8KLQkJZnRfYnVmZmVyW2ldLT5zdGF0dXMgPSB3YWl0aW5nOwotCQlmdF9idWZmZXJbaV0tPmJ5dGVzID0gMDsKLQkJZnRfYnVmZmVyW2ldLT5za2lwID0gMDsKLQkJZnRfYnVmZmVyW2ldLT5yZXRyeSA9IDA7Ci0JfQotLyoJZnRhcGVfcmVzZXRfYnVmZmVyKCk7ICovCi19Ci0KLXN0YXRpYyBTZWN0b3JNYXAgY29udmVydF9zZWN0b3JfbWFwKGJ1ZmZlcl9zdHJ1Y3QgKiBidWZmKQotewotCWludCBpID0gMDsKLQlTZWN0b3JNYXAgYmFkX21hcCA9IGZ0YXBlX2dldF9iYWRfc2VjdG9yX2VudHJ5KGJ1ZmYtPnNlZ21lbnRfaWQpOwotCVNlY3Rvck1hcCBzcmNfbWFwID0gYnVmZi0+c29mdF9lcnJvcl9tYXAgfCBidWZmLT5oYXJkX2Vycm9yX21hcDsKLQlTZWN0b3JNYXAgZHN0X21hcCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWlmIChiYWRfbWFwIHx8IHNyY19tYXApIHsKLQkJVFJBQ0UoZnRfdF9mbG93LCAiYmFkX21hcCA9IDB4JTA4bHgiLCAobG9uZykgYmFkX21hcCk7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgInNyY19tYXAgPSAweCUwOGx4IiwgKGxvbmcpIHNyY19tYXApOwotCX0KLQl3aGlsZSAoYmFkX21hcCkgewotCQl3aGlsZSAoKGJhZF9tYXAgJiAxKSA9PSAwKSB7Ci0JCQlpZiAoc3JjX21hcCAmIDEpIHsKLQkJCQlkc3RfbWFwIHw9ICgxIDw8IGkpOwotCQkJfQotCQkJc3JjX21hcCA+Pj0gMTsKLQkJCWJhZF9tYXAgPj49IDE7Ci0JCQkrK2k7Ci0JCX0KLQkJLyogKGJhZF9tYXAgJiAxKSA9PSAxICovCi0JCXNyY19tYXAgPj49IDE7Ci0JCWJhZF9tYXAgPj49IDE7Ci0JfQotCWlmIChzcmNfbWFwKSB7Ci0JCWRzdF9tYXAgfD0gKHNyY19tYXAgPDwgaSk7Ci0JfQotCWlmIChkc3RfbWFwKSB7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgImRzdF9tYXAgPSAweCUwOGx4IiwgKGxvbmcpIGRzdF9tYXApOwotCX0KLQlUUkFDRV9FWElUIGRzdF9tYXA7Ci19Ci0KLXN0YXRpYyBpbnQgY29ycmVjdF9hbmRfY29weV9mcmFjdGlvbihidWZmZXJfc3RydWN0ICpidWZmLCBfX3U4ICogZGVzdGluYXRpb24sCi0JCQkJICAgICBpbnQgc3RhcnQsIGludCBzaXplKQotewotCXN0cnVjdCBtZW1vcnlfc2VnbWVudCBtc2VnOwotCWludCByZXN1bHQ7Ci0JU2VjdG9yTWFwIHJlYWRfYmFkOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQltc2VnLnJlYWRfYmFkID0gY29udmVydF9zZWN0b3JfbWFwKGJ1ZmYpOwotCW1zZWcubWFya2VkX2JhZCA9IDA7CS8qIG5vdCB1c2VkLi4uICovCi0JbXNlZy5ibG9ja3MgPSBidWZmLT5ieXRlcyAvIEZUX1NFQ1RPUl9TSVpFOwotCW1zZWcuZGF0YSA9IGJ1ZmYtPmFkZHJlc3M7Ci0JLyogICAgSWYgdGhlcmUgYXJlIG5vIGRhdGEgc2VjdG9ycyB3ZSBjYW4gc2tpcCB0aGlzIHNlZ21lbnQuCi0JICovCi0JaWYgKG1zZWcuYmxvY2tzIDw9IDMpIHsKLQkJVFJBQ0VfQUJPUlQoMCwgZnRfdF9ub2lzZSwgImVtcHR5IHNlZ21lbnQiKTsKLQl9Ci0JcmVhZF9iYWQgPSBtc2VnLnJlYWRfYmFkOwotCWZ0X2hpc3RvcnkuY3JjX2Vycm9ycyArPSBjb3VudF9vbmVzKHJlYWRfYmFkKTsKLQlyZXN1bHQgPSBmdGFwZV9lY2NfY29ycmVjdF9kYXRhKCZtc2VnKTsKLQlpZiAocmVhZF9iYWQgIT0gMCB8fCBtc2VnLmNvcnJlY3RlZCAhPSAwKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJjcmMgZXJyb3IgbWFwOiAweCUwOGx4IiwgKHVuc2lnbmVkIGxvbmcpcmVhZF9iYWQpOwotCQlUUkFDRShmdF90X25vaXNlLCAiY29ycmVjdGVkIG1hcDogMHglMDhseCIsICh1bnNpZ25lZCBsb25nKW1zZWcuY29ycmVjdGVkKTsKLQkJZnRfaGlzdG9yeS5jb3JyZWN0ZWQgKz0gY291bnRfb25lcyhtc2VnLmNvcnJlY3RlZCk7Ci0JfQotCWlmIChyZXN1bHQgPT0gRUNDX0NPUlJFQ1RFRCB8fCByZXN1bHQgPT0gRUNDX09LKSB7Ci0JCWlmIChyZXN1bHQgPT0gRUNDX0NPUlJFQ1RFRCkgewotCQkJVFJBQ0UoZnRfdF9pbmZvLCAiZWNjIGNvcnJlY3RlZCBzZWdtZW50OiAlZCIsIGJ1ZmYtPnNlZ21lbnRfaWQpOwotCQl9Ci0JCWlmKHN0YXJ0IDwgMCkgewotCQkJc3RhcnQ9IDA7Ci0JCX0KLQkJaWYoKHN0YXJ0K3NpemUpID4gKChtc2VnLmJsb2NrcyAtIDMpICogRlRfU0VDVE9SX1NJWkUpKSB7Ci0JCQlzaXplID0gKG1zZWcuYmxvY2tzIC0gMykgKiBGVF9TRUNUT1JfU0laRSAgLSBzdGFydDsKLQkJfSAKLQkJaWYgKHNpemUgPCAwKSB7Ci0JCQlzaXplPSAwOwotCQl9Ci0JCWlmKHNpemUgPiAwKSB7Ci0JCQltZW1jcHkoZGVzdGluYXRpb24gKyBzdGFydCwgbXNlZy5kYXRhICsgc3RhcnQsIHNpemUpOwotCQl9Ci0JCWlmICgocmVhZF9iYWQgXiBtc2VnLmNvcnJlY3RlZCkgJiBtc2VnLmNvcnJlY3RlZCkgewotCQkJLyogc2VjdG9ycyBjb3JyZWN0ZWQgd2l0aG91dCBjcmMgZXJyb3JzIHNldCAqLwotCQkJZnRfaGlzdG9yeS5jcmNfZmFpbHVyZXMrKzsKLQkJfQotCQlUUkFDRV9FWElUIHNpemU7IC8qIChtc2VnLmJsb2NrcyAtIDMpICogRlRfU0VDVE9SX1NJWkU7ICovCi0JfSBlbHNlIHsKLQkJZnRfaGlzdG9yeS5lY2NfZmFpbHVyZXMrKzsKLQkJVFJBQ0VfQUJPUlQoLUVBR0FJTiwKLQkJCSAgICBmdF90X2VyciwgImVjYyBmYWlsdXJlIG9uIHNlZ21lbnQgJWQiLAotCQkJICAgIGJ1ZmYtPnNlZ21lbnRfaWQpOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qICAgICAgUmVhZCBnaXZlbiBzZWdtZW50IGludG8gYnVmZmVyIGF0IGFkZHJlc3MuCi0gKi8KLWludCBmdGFwZV9yZWFkX3NlZ21lbnRfZnJhY3Rpb24oY29uc3QgaW50IHNlZ21lbnRfaWQsCi0JCQkJdm9pZCAgKmFkZHJlc3MsIAotCQkJCWNvbnN0IGZ0X3JlYWRfbW9kZV90IHJlYWRfbW9kZSwKLQkJCQljb25zdCBpbnQgc3RhcnQsCi0JCQkJY29uc3QgaW50IHNpemUpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IHJldHJ5ICA9IDA7Ci0JaW50IGJ5dGVzX3JlYWQgPSAwOwotCWludCByZWFkX2RvbmUgID0gMDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWZ0X2hpc3RvcnkudXNlZCB8PSAxOwotCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAic2VnbWVudF9pZCA9ICVkIiwgc2VnbWVudF9pZCk7Ci0JaWYgKGZ0X2RyaXZlcl9zdGF0ZSAhPSByZWFkaW5nKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJjYWxsaW5nIGZ0YXBlX2Fib3J0X29wZXJhdGlvbiIpOwotCQlUUkFDRV9DQVRDSChmdGFwZV9hYm9ydF9vcGVyYXRpb24oKSwpOwotCQlmdGFwZV9zZXRfc3RhdGUocmVhZGluZyk7Ci0JfQotCWZvcig7OykgewotCQlidWZmZXJfc3RydWN0ICp0YWlsOwotCQkvKiAgQWxsb3cgZXNjYXBlIGZyb20gdGhpcyBsb29wIG9uIHNpZ25hbCAhCi0JCSAqLwotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JCS8qICBTZWFyY2ggYWxsIGZ1bGwgYnVmZmVycyBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIHRoZQotCQkgKiAgd2FudGVkIHNlZ21lbnQuICBDbGVhciBvdGhlciBidWZmZXJzIG9uIHRoZSBmbHkuCi0JCSAqLwotCQl0YWlsID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV90YWlsKTsKLQkJd2hpbGUgKCFyZWFkX2RvbmUgJiYgdGFpbC0+c3RhdHVzID09IGRvbmUpIHsKLQkJCS8qICBBbGxvdyBlc2NhcGUgZnJvbSB0aGlzIGxvb3Agb24gc2lnbmFsICEKLQkJCSAqLwotCQkJRlRfU0lHTkFMX0VYSVQoX0RPTlRfQkxPQ0spOwotCQkJaWYgKHRhaWwtPnNlZ21lbnRfaWQgPT0gc2VnbWVudF9pZCkgewotCQkJCS8qICBJZiBvdXQgYnVmZmVyIGlzIGFscmVhZHkgZnVsbCwKLQkJCQkgKiAgcmV0dXJuIGl0cyBjb250ZW50cy4gIAotCQkJCSAqLwotCQkJCVRSQUNFKGZ0X3RfZmxvdywgImZvdW5kIHNlZ21lbnQgaW4gY2FjaGU6ICVkIiwKLQkJCQkgICAgICBzZWdtZW50X2lkKTsKLQkJCQlpZiAodGFpbC0+ZGVsZXRlZCkgewotCQkJCQkvKiAgUmV0dXJuIGEgdmFsdWUgdGhhdAotCQkJCQkgKiAgcmVhZF9oZWFkZXJfc2VnbWVudAotCQkJCQkgKiAgdW5kZXJzdGFuZHMuICBBcyB0aGlzCi0JCQkJCSAqICBzaG91bGQgb25seSBvY2N1ciB3aGVuCi0JCQkJCSAqICBzZWFyY2hpbmcgZm9yIHRoZSBoZWFkZXIKLQkJCQkJICogIHNlZ21lbnRzIGl0IHNob3VsZG4ndCBiZQotCQkJCQkgKiAgbWlzaW50ZXJwcmV0ZWQgZWxzZXdoZXJlLgotCQkJCQkgKi8KLQkJCQkJVFJBQ0VfRVhJVCAwOwotCQkJCX0KLQkJCQlyZXN1bHQgPSBjb3JyZWN0X2FuZF9jb3B5X2ZyYWN0aW9uKAotCQkJCQl0YWlsLAotCQkJCQlhZGRyZXNzLAotCQkJCQlzdGFydCwKLQkJCQkJc2l6ZSk7Ci0JCQkJVFJBQ0UoZnRfdF9mbG93LCAic2VnbWVudCBjb250YWlucyAoYnl0ZXMpOiAlZCIsCi0JCQkJICAgICAgcmVzdWx0KTsKLQkJCQlpZiAocmVzdWx0IDwgMCkgewotCQkJCQlpZiAocmVzdWx0ICE9IC1FQUdBSU4pIHsKLQkJCQkJCVRSQUNFX0VYSVQgcmVzdWx0OwotCQkJCQl9Ci0JCQkJCS8qIGtlZXAgcmVhZF9kb25lID09IDAsIHdpbGwKLQkJCQkJICogdHJpZ2dlcgotCQkJCQkgKiBmdGFwZV9hYm9ydF9vcGVyYXRpb24KLQkJCQkJICogYmVjYXVzZSByZWFkaW5nIHdyb25nCi0JCQkJCSAqIHNlZ21lbnQuCi0JCQkJCSAqLwotCQkJCQlUUkFDRShmdF90X2VyciwgImVjYyBmYWlsZWQsIHJldHJ5Iik7Ci0JCQkJCSsrcmV0cnk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcmVhZF9kb25lID0gMTsKLQkJCQkJYnl0ZXNfcmVhZCA9IHJlc3VsdDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVRSQUNFKGZ0X3RfZmxvdywiemFwcGluZyBzZWdtZW50IGluIGNhY2hlOiAlZCIsCi0JCQkJICAgICAgdGFpbC0+c2VnbWVudF9pZCk7Ci0JCQl9Ci0JCQl0YWlsLT5zdGF0dXMgPSB3YWl0aW5nOwotCQkJdGFpbCA9IGZ0YXBlX25leHRfYnVmZmVyKGZ0X3F1ZXVlX3RhaWwpOwotCQl9Ci0JCWlmICghcmVhZF9kb25lICYmIHRhaWwtPnN0YXR1cyA9PSByZWFkaW5nKSB7Ci0JCQlpZiAodGFpbC0+c2VnbWVudF9pZCA9PSBzZWdtZW50X2lkKSB7Ci0JCQkJc3dpdGNoKGZ0YXBlX3dhaXRfc2VnbWVudChyZWFkaW5nKSkgewotCQkJCWNhc2UgMDoKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAtRUlOVFI6Ci0JCQkJCVRSQUNFX0FCT1JUKC1FSU5UUiwgZnRfdF93YXJuLAotCQkJCQkJICAgICJpbnRlcnJ1cHRlZCBieSAiCi0JCQkJCQkgICAgIm5vbi1ibG9ja2FibGUgc2lnbmFsIik7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JCQkJCSAgICAgICJ3YWl0X3NlZ21lbnQgZmFpbGVkIik7Ci0JCQkJCWZ0YXBlX2Fib3J0X29wZXJhdGlvbigpOwotCQkJCQlmdGFwZV9zZXRfc3RhdGUocmVhZGluZyk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogIFdlJ3JlIHJlYWRpbmcgdGhlIHdyb25nIHNlZ21lbnQsCi0JCQkJICogIHN0b3AgcnVubmVyLgotCQkJCSAqLwotCQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJyZWFkaW5nIHdyb25nIHNlZ21lbnQiKTsKLQkJCQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsKLQkJCQlmdGFwZV9zZXRfc3RhdGUocmVhZGluZyk7Ci0JCQl9Ci0JCX0KLQkJLyogICAgc2hvdWxkIHJ1bm5lciBzdG9wID8KLQkJICovCi0JCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IGFib3J0aW5nKSB7Ci0JCQlidWZmZXJfc3RydWN0ICpoZWFkID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsKLQkJCXN3aXRjaChoZWFkLT5zdGF0dXMpIHsKLQkJCWNhc2UgZXJyb3I6Ci0JCQkJZnRfaGlzdG9yeS5kZWZlY3RzICs9IAotCQkJCQljb3VudF9vbmVzKGhlYWQtPmhhcmRfZXJyb3JfbWFwKTsKLQkJCWNhc2UgcmVhZGluZzoKLQkJCQloZWFkLT5zdGF0dXMgPSB3YWl0aW5nOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJCVRSQUNFX0NBVENIKGZ0YXBlX2R1bWJfc3RvcCgpLCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiAgSWYganVzdCBwYXNzZWQgbGFzdCBzZWdtZW50IG9uIHRhcGU6IHdhaXQKLQkJCSAqICBmb3IgQk9UIG9yIEVPVCBtYXJrLiBTZXRzIGZ0X3J1bm5lcl9zdGF0dXMgdG8KLQkJCSAqICBpZGxlIGlmIGF0IGxFT1QgYW5kIHN1Y2Nlc3NmdWwgCi0JCQkgKi8KLQkJCVRSQUNFX0NBVENIKGZ0YXBlX2hhbmRsZV9sb2dpY2FsX2VvdCgpLCk7Ci0JCX0KLQkJLyogICAgSWYgd2UgZ290IGEgc2VnbWVudDogcXVpdCwgb3IgZWxzZSByZXRyeSB1cCB0byBsaW1pdC4KLQkJICoKLQkJICogICAgSWYgc2VnbWVudCB0byByZWFkIGlzIGVtcHR5LCBkbyBub3Qgc3RhcnQgcnVubmVyIGZvciBpdCwKLQkJICogICAgYnV0IHdhaXQgZm9yIG5leHQgcmVhZCBjYWxsLgotCQkgKi8KLQkJaWYgKHJlYWRfZG9uZSB8fAotCQkgICAgZnRhcGVfZ2V0X2JhZF9zZWN0b3JfZW50cnkoc2VnbWVudF9pZCkgPT0gRU1QVFlfU0VHTUVOVCApIHsKLQkJCS8qIGJ5dGVzX3JlYWQgPSAwOyAgc2hvdWxkIHN0aWxsIGJlIHplcm8gKi8KLQkJCVRSQUNFX0VYSVQgYnl0ZXNfcmVhZDsKLQotCQl9Ci0JCWlmIChyZXRyeSA+IEZUX1JFVFJJRVNfT05fRUNDX0VSUk9SKSB7Ci0JCQlmdF9oaXN0b3J5LmRlZmVjdHMrKzsKLQkJCVRSQUNFX0FCT1JUKC1FTk9EQVRBLCBmdF90X2VyciwKLQkJCQkgICAgInRvbyBtYW55IHJldHJpZXMgb24gZWNjIGZhaWx1cmUiKTsKLQkJfQotCQkvKiAgICBOb3cgYXQgbGVhc3Qgb25lIGJ1ZmZlciBpcyBlbXB0eSAhCi0JCSAqICAgIFJlc3RhcnQgcnVubmVyICYgdGFwZSBpZiBuZWVkZWQuCi0JCSAqLwotCQlUUkFDRShmdF90X2FueSwgImhlYWQ6ICVkLCB0YWlsOiAlZCwgZnRfcnVubmVyX3N0YXR1czogJWQiLAotCQkgICAgICBmdGFwZV9idWZmZXJfaWQoZnRfcXVldWVfaGVhZCksCi0JCSAgICAgIGZ0YXBlX2J1ZmZlcl9pZChmdF9xdWV1ZV90YWlsKSwKLQkJICAgICAgZnRfcnVubmVyX3N0YXR1cyk7Ci0JCVRSQUNFKGZ0X3RfYW55LCAiYnVmZmVyW10uc3RhdHVzLCBbaGVhZF06ICVkLCBbdGFpbF06ICVkIiwKLQkJICAgICAgZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKS0+c3RhdHVzLAotCQkgICAgICBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX3RhaWwpLT5zdGF0dXMpOwotCQl0YWlsID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV90YWlsKTsKLQkJaWYgKHRhaWwtPnN0YXR1cyA9PSB3YWl0aW5nKSB7Ci0JCQlidWZmZXJfc3RydWN0ICpoZWFkID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsKLQotCQkJZnRhcGVfc2V0dXBfbmV3X3NlZ21lbnQoaGVhZCwgc2VnbWVudF9pZCwgLTEpOwotCQkJaWYgKHJlYWRfbW9kZSA9PSBGVF9SRF9TSU5HTEUpIHsKLQkJCQkvKiBkaXNhYmxlIHJlYWQtYWhlYWQgKi8KLQkJCQloZWFkLT5uZXh0X3NlZ21lbnQgPSAwOwotCQkJfQotCQkJZnRhcGVfY2FsY19uZXh0X2NsdXN0ZXIoaGVhZCk7Ci0JCQlpZiAoZnRfcnVubmVyX3N0YXR1cyA9PSBpZGxlKSB7Ci0JCQkJcmVzdWx0ID0gZnRhcGVfc3RhcnRfdGFwZShzZWdtZW50X2lkLAotCQkJCQkJCSAgaGVhZC0+c2VjdG9yX29mZnNldCk7Ci0JCQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCQkJVFJBQ0VfQUJPUlQocmVzdWx0LCBmdF90X2VyciwgIkVycm9yOiAiCi0JCQkJCQkgICAgInNlZ21lbnQgJWQgdW5yZWFjaGFibGUiLAotCQkJCQkJICAgIHNlZ21lbnRfaWQpOwotCQkJCX0KLQkJCX0KLQkJCWhlYWQtPnN0YXR1cyA9IHJlYWRpbmc7Ci0JCQlmZGNfc2V0dXBfcmVhZF93cml0ZShoZWFkLCBGRENfUkVBRCk7Ci0JCX0KLQl9Ci0JLyogbm90IHJlYWNoZWQgKi8KLQlUUkFDRV9FWElUIC1FSU87Ci19Ci0KLWludCBmdGFwZV9yZWFkX2hlYWRlcl9zZWdtZW50KF9fdTggKmFkZHJlc3MpCi17Ci0JaW50IHJlc3VsdDsKLQlpbnQgaGVhZGVyX3NlZ21lbnQ7Ci0JaW50IGZpcnN0X2ZhaWxlZCA9IDA7Ci0JaW50IHN0YXR1czsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWZ0X3VzZWRfaGVhZGVyX3NlZ21lbnQgPSAtMTsKLQlUUkFDRV9DQVRDSChmdGFwZV9yZXBvcnRfZHJpdmVfc3RhdHVzKCZzdGF0dXMpLCk7Ci0JVFJBQ0UoZnRfdF9mbG93LCAicmVhZGluZy4uLiIpOwotCS8qICBXZSdyZSBsb29raW5nIGZvciB0aGUgZmlyc3QgaGVhZGVyIHNlZ21lbnQuCi0JICogIEEgaGVhZGVyIHNlZ21lbnQgY2Fubm90IGNvbnRhaW4gYmFkIHNlY3RvcnMsIHRoZXJlZm9yIGF0IHRoZQotCSAqICB0YXBlIHN0YXJ0LCBzZWdtZW50cyB3aXRoIGJhZCBzZWN0b3JzIGFyZSAoYWNjb3JkaW5nIHRvIFFJQy00MC84MCkKLQkgKiAgd3JpdHRlbiB3aXRoIGRlbGV0ZWQgZGF0YSBtYXJrcyBhbmQgbXVzdCBiZSBza2lwcGVkLgotCSAqLwotCW1lbXNldChhZGRyZXNzLCAnXDAnLCAoRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIDMpICogRlRfU0VDVE9SX1NJWkUpOyAKLQlyZXN1bHQgPSAwOwotI2RlZmluZSBIRUFERVJfU0VHTUVOVF9CT1VOREFSWSA2OCAgLyogd2h5IG5vdCA0Mj8gKi8KLQlmb3IgKGhlYWRlcl9zZWdtZW50ID0gMDsKLQkgICAgIGhlYWRlcl9zZWdtZW50IDwgSEVBREVSX1NFR01FTlRfQk9VTkRBUlkgJiYgcmVzdWx0ID09IDA7Ci0JICAgICArK2hlYWRlcl9zZWdtZW50KSB7Ci0JCS8qICBTZXQgbm8gcmVhZC1haGVhZCwgdGhlIGlzciB3aWxsIGZvcmNlIHJlYWQtYWhlYWQgd2hlbmV2ZXIKLQkJICogIGl0IGVuY291bnRlcnMgZGVsZXRlZCBkYXRhICEKLQkJICovCi0JCXJlc3VsdCA9IGZ0YXBlX3JlYWRfc2VnbWVudChoZWFkZXJfc2VnbWVudCwKLQkJCQkJICAgIGFkZHJlc3MsCi0JCQkJCSAgICBGVF9SRF9TSU5HTEUpOwotCQlpZiAocmVzdWx0IDwgMCAmJiAhZmlyc3RfZmFpbGVkKSB7Ci0JCQlUUkFDRShmdF90X2VyciwgImhlYWRlciBzZWdtZW50IGRhbWFnZWQsIHRyeWluZyBiYWNrdXAiKTsKLQkJCWZpcnN0X2ZhaWxlZCA9IDE7Ci0JCQlyZXN1bHQgPSAwOwkvKiBmb3JjZSByZWFkIG9mIG5leHQgKGJhY2t1cCkgc2VnbWVudCAqLwotCQl9Ci0JfQotCWlmIChyZXN1bHQgPCAwIHx8IGhlYWRlcl9zZWdtZW50ID49IEhFQURFUl9TRUdNRU5UX0JPVU5EQVJZKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJICAgICJubyByZWFkYWJsZSBoZWFkZXIgc2VnbWVudCBmb3VuZCIpOwotCX0KLQlUUkFDRV9DQVRDSChmdGFwZV9hYm9ydF9vcGVyYXRpb24oKSwpOwotCWZ0X3VzZWRfaGVhZGVyX3NlZ21lbnQgPSBoZWFkZXJfc2VnbWVudDsKLQlyZXN1bHQgPSBmdGFwZV9kZWNvZGVfaGVhZGVyX3NlZ21lbnQoYWRkcmVzcyk7Ci0gCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi1pbnQgZnRhcGVfZGVjb2RlX2hlYWRlcl9zZWdtZW50KF9fdTggKmFkZHJlc3MpCi17Ci0JdW5zaWduZWQgaW50IG1heF9mbG9wcHlfc2lkZTsKLQl1bnNpZ25lZCBpbnQgbWF4X2Zsb3BweV90cmFjazsKLQl1bnNpZ25lZCBpbnQgbWF4X2Zsb3BweV9zZWN0b3I7Ci0JdW5zaWduZWQgaW50IG5ld190YXBlX2xlbjsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChHRVQ0KGFkZHJlc3MsIEZUX1NJR05BVFVSRSkgPT0gRlRfRDJHX01BR0lDKSB7Ci0JCS8qIERpdHRvIDJHQiBoZWFkZXIgc2VnbWVudC4gVGhleSBlbmNyeXB0IHRoZSBiYWQgc2VjdG9yIG1hcC4KLQkJICogV2UgZGVjcnlwdCBpdCBhbmQgc3RvcmUgdGhlbSBpbiBub3JtYWwgZm9ybWF0LgotCQkgKiBJIGhvcGUgdGhpcyBpcyBjb3JyZWN0LgotCQkgKi8KLQkJaW50IGk7Ci0JCVRSQUNFKGZ0X3Rfd2FybiwKLQkJICAgICAgIkZvdW5kIERpdHRvIDJHQiB0YXBlLCAiCi0JCSAgICAgICJ0cnlpbmcgdG8gZGVjcnlwdCBiYWQgc2VjdG9yIG1hcCIpOwotCQlmb3IgKGk9MjU2OyBpIDwgMjkgKiBGVF9TRUNUT1JfU0laRTsgaSsrKSB7Ci0JCQlhZGRyZXNzW2ldID0gfihhZGRyZXNzW2ldIC0gKGkmMHhmZikpOwotCQl9Ci0JCVBVVDQoYWRkcmVzcywgMCxGVF9IU0VHX01BR0lDKTsKLQl9IGVsc2UgaWYgKEdFVDQoYWRkcmVzcywgRlRfU0lHTkFUVVJFKSAhPSBGVF9IU0VHX01BR0lDKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJICAgICJ3cm9uZyBzaWduYXR1cmUgaW4gaGVhZGVyIHNlZ21lbnQiKTsKLQl9Ci0JZnRfZm9ybWF0X2NvZGUgPSAoZnRfZm9ybWF0X3R5cGUpIGFkZHJlc3NbRlRfRk1UX0NPREVdOwotCWlmIChmdF9mb3JtYXRfY29kZSAhPSBmbXRfYmlnKSB7Ci0JCWZ0X2hlYWRlcl9zZWdtZW50XzEgICA9IEdFVDIoYWRkcmVzcywgRlRfSFNFR18xKTsKLQkJZnRfaGVhZGVyX3NlZ21lbnRfMiAgID0gR0VUMihhZGRyZXNzLCBGVF9IU0VHXzIpOwotCQlmdF9maXJzdF9kYXRhX3NlZ21lbnQgPSBHRVQyKGFkZHJlc3MsIEZUX0ZSU1RfU0VHKTsKLQkJZnRfbGFzdF9kYXRhX3NlZ21lbnQgID0gR0VUMihhZGRyZXNzLCBGVF9MQVNUX1NFRyk7Ci0JfSBlbHNlIHsKLQkJZnRfaGVhZGVyX3NlZ21lbnRfMSAgID0gR0VUNChhZGRyZXNzLCBGVF82X0hTRUdfMSk7Ci0JCWZ0X2hlYWRlcl9zZWdtZW50XzIgICA9IEdFVDQoYWRkcmVzcywgRlRfNl9IU0VHXzIpOwotCQlmdF9maXJzdF9kYXRhX3NlZ21lbnQgPSBHRVQ0KGFkZHJlc3MsIEZUXzZfRlJTVF9TRUcpOwotCQlmdF9sYXN0X2RhdGFfc2VnbWVudCAgPSBHRVQ0KGFkZHJlc3MsIEZUXzZfTEFTVF9TRUcpOwotCX0KLQlUUkFDRShmdF90X25vaXNlLCAiZmlyc3QgZGF0YSBzZWdtZW50OiAlZCIsIGZ0X2ZpcnN0X2RhdGFfc2VnbWVudCk7Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgImxhc3QgIGRhdGEgc2VnbWVudDogJWQiLCBmdF9sYXN0X2RhdGFfc2VnbWVudCk7Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgImhlYWRlciBzZWdtZW50cyBhcmUgJWQgYW5kICVkIiwKLQkgICAgICBmdF9oZWFkZXJfc2VnbWVudF8xLCBmdF9oZWFkZXJfc2VnbWVudF8yKTsKLQotCS8qICAgIFZlcmlmeSB0YXBlIHBhcmFtZXRlcnMuLi4KLQkgKiAgICBRSUMtNDAvODAgc3BlYzogICAgICAgICAgICAgICAgIHRhcGVfcGFyYW1ldGVyczoKLQkgKgotCSAqICAgIHNlZ21lbnRzLXBlci10cmFjayAgICAgICAgICAgICAgc2VnbWVudHNfcGVyX3RyYWNrCi0JICogICAgdHJhY2tzLXBlci1jYXJ0cmlkZ2UgICAgICAgICAgICB0cmFja3NfcGVyX3RhcGUKLQkgKiAgICBtYXgtZmxvcHB5LXNpZGUgICAgICAgICAgICAgICAgIChzZWdtZW50c19wZXJfdHJhY2sgKgotCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tzX3Blcl90YXBlIC0gMSkgLwotCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRhcGVfc2VnbWVudHNfcGVyX2hlYWQKLQkgKiAgICBtYXgtZmxvcHB5LXRyYWNrICAgICAgICAgICAgICAgIGZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkIC8KLQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlciAtIDEKLQkgKiAgICBtYXgtZmxvcHB5LXNlY3RvciAgICAgICAgICAgICAgIGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlciAqCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UCi0JICovCi0JZnRfc2VnbWVudHNfcGVyX3RyYWNrID0gR0VUMihhZGRyZXNzLCBGVF9TUFQpOwotCWZ0X3RyYWNrc19wZXJfdGFwZSAgICA9IGFkZHJlc3NbRlRfVFBDXTsKLQltYXhfZmxvcHB5X3NpZGUgICAgICAgPSBhZGRyZXNzW0ZUX0ZITV07Ci0JbWF4X2Zsb3BweV90cmFjayAgICAgID0gYWRkcmVzc1tGVF9GVE1dOwotCW1heF9mbG9wcHlfc2VjdG9yICAgICA9IGFkZHJlc3NbRlRfRlNNXTsKLQlUUkFDRShmdF90X25vaXNlLCAiKGZtdC9zcHQvdHBjL2ZobS9mdG0vZnNtKSA9ICVkLyVkLyVkLyVkLyVkLyVkIiwKLQkgICAgICBmdF9mb3JtYXRfY29kZSwgZnRfc2VnbWVudHNfcGVyX3RyYWNrLCBmdF90cmFja3NfcGVyX3RhcGUsCi0JICAgICAgbWF4X2Zsb3BweV9zaWRlLCBtYXhfZmxvcHB5X3RyYWNrLCBtYXhfZmxvcHB5X3NlY3Rvcik7Ci0JbmV3X3RhcGVfbGVuID0gZnRhcGVfdGFwZV9sZW47Ci0Jc3dpdGNoIChmdF9mb3JtYXRfY29kZSkgewotCWNhc2UgZm10XzQyNWZ0OgotCQluZXdfdGFwZV9sZW4gPSA0MjU7Ci0JCWJyZWFrOwotCWNhc2UgZm10X25vcm1hbDoKLQkJaWYgKGZ0YXBlX3RhcGVfbGVuID09IDApIHsJLyogb3RoZXJ3aXNlIDMwNyBmdCAqLwotCQkJbmV3X3RhcGVfbGVuID0gMjA1OwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgZm10XzExMDBmdDoKLQkJbmV3X3RhcGVfbGVuID0gMTEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBmbXRfdmFyOnsKLQkJCWludCBzZWdtZW50c19wZXJfMTAwMF9pbmNoID0gMTsJCS8qIG5vbi16ZXJvIGRlZmF1bHQgZm9yIHN3aXRjaCAqLwotCQkJc3dpdGNoIChmdF9xaWNfc3RkKSB7Ci0JCQljYXNlIFFJQ19UQVBFX1FJQzQwOgotCQkJCXNlZ21lbnRzX3Blcl8xMDAwX2luY2ggPSAzMzI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFFJQ19UQVBFX1FJQzgwOgotCQkJCXNlZ21lbnRzX3Blcl8xMDAwX2luY2ggPSA0ODg7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFFJQ19UQVBFX1FJQzMwMTA6Ci0JCQkJc2VnbWVudHNfcGVyXzEwMDBfaW5jaCA9IDczMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgUUlDX1RBUEVfUUlDMzAyMDoKLQkJCQlzZWdtZW50c19wZXJfMTAwMF9pbmNoID0gMTQzMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW5ld190YXBlX2xlbiA9ICgxMDAwICogZnRfc2VnbWVudHNfcGVyX3RyYWNrICsKLQkJCQkJKHNlZ21lbnRzX3Blcl8xMDAwX2luY2ggLSAxKSkgLyBzZWdtZW50c19wZXJfMTAwMF9pbmNoOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIGZtdF9iaWc6ewotCQkJaW50IHNlZ21lbnRzX3Blcl8xMDAwX2luY2ggPSAxOwkJLyogbm9uLXplcm8gZGVmYXVsdCBmb3Igc3dpdGNoICovCi0JCQlzd2l0Y2ggKGZ0X3FpY19zdGQpIHsKLQkJCWNhc2UgUUlDX1RBUEVfUUlDNDA6Ci0JCQkJc2VnbWVudHNfcGVyXzEwMDBfaW5jaCA9IDMzMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgUUlDX1RBUEVfUUlDODA6Ci0JCQkJc2VnbWVudHNfcGVyXzEwMDBfaW5jaCA9IDQ4ODsKLQkJCQlicmVhazsKLQkJCWNhc2UgUUlDX1RBUEVfUUlDMzAxMDoKLQkJCQlzZWdtZW50c19wZXJfMTAwMF9pbmNoID0gNzMwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBRSUNfVEFQRV9RSUMzMDIwOgotCQkJCXNlZ21lbnRzX3Blcl8xMDAwX2luY2ggPSAxNDMwOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2J1ZywKLQkJCSIleCBRSUMtc3RhbmRhcmQgd2l0aCBmbXQtY29kZSAlZCwgcGxlYXNlIHJlcG9ydCIsCi0JCQkJCSAgICBmdF9xaWNfc3RkLCBmdF9mb3JtYXRfY29kZSk7Ci0JCQl9Ci0JCQluZXdfdGFwZV9sZW4gPSAoKDEwMDAgKiBmdF9zZWdtZW50c19wZXJfdHJhY2sgKwotCQkJCQkgKHNlZ21lbnRzX3Blcl8xMDAwX2luY2ggLSAxKSkgLyAKLQkJCQkJc2VnbWVudHNfcGVyXzEwMDBfaW5jaCk7Ci0JCQlicmVhazsKLQkJfQotCWRlZmF1bHQ6Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJICAgICJ1bmtub3duIHRhcGUgZm9ybWF0LCBwbGVhc2UgcmVwb3J0ICEiKTsKLQl9Ci0JaWYgKG5ld190YXBlX2xlbiAhPSBmdGFwZV90YXBlX2xlbikgewotCQlmdGFwZV90YXBlX2xlbiA9IG5ld190YXBlX2xlbjsKLQkJVFJBQ0UoZnRfdF9pbmZvLCAiY2FsY3VsYXRlZCB0YXBlIGxlbmd0aCBpcyAlZCBmdCIsCi0JCSAgICAgIGZ0YXBlX3RhcGVfbGVuKTsKLQkJZnRhcGVfY2FsY190aW1lb3V0cyhmdF9xaWNfc3RkLCBmdF9kYXRhX3JhdGUsIGZ0YXBlX3RhcGVfbGVuKTsKLQl9Ci0JaWYgKGZ0X3NlZ21lbnRzX3Blcl90cmFjayA9PSAwICYmIGZ0X3RyYWNrc19wZXJfdGFwZSA9PSAwICYmCi0JICAgIG1heF9mbG9wcHlfc2lkZSA9PSAwICYmIG1heF9mbG9wcHlfdHJhY2sgPT0gMCAmJgotCSAgICBtYXhfZmxvcHB5X3NlY3RvciA9PSAwKSB7Ci0JCS8qICBRSUMtNDAgUmV2IEUgYW5kIGVhcmxpZXIgaGFzIG5vIHZhbHVlcyBpbiB0aGUgaGVhZGVyLgotCQkgKi8KLQkJZnRfc2VnbWVudHNfcGVyX3RyYWNrID0gNjg7Ci0JCWZ0X3RyYWNrc19wZXJfdGFwZSA9IDIwOwotCQltYXhfZmxvcHB5X3NpZGUgPSAxOwotCQltYXhfZmxvcHB5X3RyYWNrID0gMTY5OwotCQltYXhfZmxvcHB5X3NlY3RvciA9IDEyODsKLQl9Ci0JLyogIFRoaXMgdGVzdCB3aWxsIGNvbXBlbnNhdGUgZm9yIHRoZSB3cm9uZyBwYXJhbWV0ZXIgb24gdGFwZXMKLQkgKiAgZm9ybWF0dGVkIGJ5IENvbm5lciBzb2Z0d2FyZS4KLQkgKi8KLQlpZiAoZnRfc2VnbWVudHNfcGVyX3RyYWNrID09IDE1MCAmJgotCSAgICBmdF90cmFja3NfcGVyX3RhcGUgPT0gMjggJiYKLQkgICAgbWF4X2Zsb3BweV9zaWRlID09IDcgJiYKLQkgICAgbWF4X2Zsb3BweV90cmFjayA9PSAxNDkgJiYKLQkgICAgbWF4X2Zsb3BweV9zZWN0b3IgPT0gMTI4KSB7Ci1UUkFDRShmdF90X2luZm8sICJ0aGUgZmFtb3VzIENPTk5FUiBidWc6IG1heF9mbG9wcHlfc2lkZSBvZmYgYnkgb25lICEiKTsKLQkJbWF4X2Zsb3BweV9zaWRlID0gNjsKLQl9Ci0JLyogIFRoZXNlIHRlc3RzIHdpbGwgY29tcGVuc2F0ZSBmb3IgdGhlIHdyb25nIHBhcmFtZXRlciBvbiB0YXBlcwotCSAqICBmb3JtYXR0ZWQgYnkgQ29tQnl0ZSBXaW5kb3dzIHNvZnR3YXJlLgotCSAqCi0JICogIEZpcnN0LCBmb3IgMjA1IGZvb3QgdGFwZXMKLQkgKi8KLQlpZiAoZnRfc2VnbWVudHNfcGVyX3RyYWNrID09IDEwMCAmJgotCSAgICBmdF90cmFja3NfcGVyX3RhcGUgPT0gMjggJiYKLQkgICAgbWF4X2Zsb3BweV9zaWRlID09IDkgJiYKLQkgICAgbWF4X2Zsb3BweV90cmFjayA9PSAxNDkgJiYKLQkgICAgbWF4X2Zsb3BweV9zZWN0b3IgPT0gMTI4KSB7Ci1UUkFDRShmdF90X2luZm8sICJ0aGUgQ29tQnl0ZSBidWc6IG1heF9mbG9wcHlfc2lkZSBpbmNvcnJlY3QhIik7Ci0JCW1heF9mbG9wcHlfc2lkZSA9IDQ7Ci0JfQotCS8qIE5leHQsIGZvciAzMDcgZm9vdCB0YXBlcy4gKi8KLQlpZiAoZnRfc2VnbWVudHNfcGVyX3RyYWNrID09IDE1MCAmJgotCSAgICBmdF90cmFja3NfcGVyX3RhcGUgPT0gMjggJiYKLQkgICAgbWF4X2Zsb3BweV9zaWRlID09IDkgJiYKLQkgICAgbWF4X2Zsb3BweV90cmFjayA9PSAxNDkgJiYKLQkgICAgbWF4X2Zsb3BweV9zZWN0b3IgPT0gMTI4KSB7Ci1UUkFDRShmdF90X2luZm8sICJ0aGUgQ29tQnl0ZSBidWc6IG1heF9mbG9wcHlfc2lkZSBpbmNvcnJlY3QhIik7Ci0JCW1heF9mbG9wcHlfc2lkZSA9IDY7Ci0JfQotCS8qICBUaGlzIHRlc3Qgd2lsbCBjb21wZW5zYXRlIGZvciB0aGUgd3JvbmcgcGFyYW1ldGVyIG9uIHRhcGVzCi0JICogIGZvcm1hdHRlZCBieSBDb2xvcmFkbyBXaW5kb3dzIHNvZnR3YXJlLgotCSAqLwotCWlmIChmdF9zZWdtZW50c19wZXJfdHJhY2sgPT0gMTUwICYmCi0JICAgIGZ0X3RyYWNrc19wZXJfdGFwZSA9PSAyOCAmJgotCSAgICBtYXhfZmxvcHB5X3NpZGUgPT0gNiAmJgotCSAgICBtYXhfZmxvcHB5X3RyYWNrID09IDE1MCAmJgotCSAgICBtYXhfZmxvcHB5X3NlY3RvciA9PSAxMjgpIHsKLVRSQUNFKGZ0X3RfaW5mbywgInRoZSBmYW1vdXMgQ29sb3JhZG8gYnVnOiBtYXhfZmxvcHB5X3RyYWNrIG9mZiBieSBvbmUgISIpOwotCQltYXhfZmxvcHB5X3RyYWNrID0gMTQ5OwotCX0KLQlmdGFwZV9zZWdtZW50c19wZXJfaGVhZCA9ICgobWF4X2Zsb3BweV9zZWN0b3IvRlRfU0VDVE9SU19QRVJfU0VHTUVOVCkgKgotCQkJCSAgIChtYXhfZmxvcHB5X3RyYWNrICsgMSkpOwotCS8qICBUaGlzIHRlc3Qgd2lsbCBjb21wZW5zYXRlIGZvciBzb21lIGJ1ZyByZXBvcnRlZCBieSBEaW1hCi0JICogIEJyb2Rza3kuICBTZWVtcyB0byBiZSBhIENvbG9yYWRvIGJ1ZywgZWl0aGVyLiAoZnJlZWJlZQotCSAqICBJbWF0aW9uIHRhcGUgc2hpcHBlZCB0b2dldGhlciB3aXRoIENvbG9yYWRvIFQzMDAwCi0JICovCi0JaWYgKChmdF9mb3JtYXRfY29kZSA9PSBmbXRfdmFyIHx8IGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcpICYmCi0JICAgIGZ0X3RyYWNrc19wZXJfdGFwZSA9PSA1MCAmJgotCSAgICBtYXhfZmxvcHB5X3NpZGUgPT0gNTQgJiYKLQkgICAgbWF4X2Zsb3BweV90cmFjayA9PSAyNTUgJiYKLQkgICAgbWF4X2Zsb3BweV9zZWN0b3IgPT0gMTI4KSB7Ci1UUkFDRShmdF90X2luZm8sICJ0aGUgZmFtb3VzID8/PyBidWc6IG1heF9mbG9wcHlfdHJhY2sgb2ZmIGJ5IG9uZSAhIik7Ci0JCW1heF9mbG9wcHlfdHJhY2sgPSAyNTQ7Ci0JfQotCS8qCi0JICogICAgVmVyaWZ5IGRyaXZlX2NvbmZpZ3VyYXRpb24gd2l0aCB0YXBlIHBhcmFtZXRlcnMKLQkgKi8KLQlpZiAoZnRhcGVfc2VnbWVudHNfcGVyX2hlYWQgPT0gMCB8fCBmdGFwZV9zZWdtZW50c19wZXJfY3lsaW5kZXIgPT0gMCB8fAotCSAgKChmdF9zZWdtZW50c19wZXJfdHJhY2sgKiBmdF90cmFja3NfcGVyX3RhcGUgLSAxKSAvIGZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkCi0JICAgIT0gbWF4X2Zsb3BweV9zaWRlKSB8fAotCSAgICAoZnRhcGVfc2VnbWVudHNfcGVyX2hlYWQgLyBmdGFwZV9zZWdtZW50c19wZXJfY3lsaW5kZXIgLSAxICE9IG1heF9mbG9wcHlfdHJhY2spIHx8Ci0JKGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlciAqIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgIT0gbWF4X2Zsb3BweV9zZWN0b3IpCi0jaWZkZWYgVEVTVElORwotCSAgICB8fCAoKGZ0X2Zvcm1hdF9jb2RlID09IGZtdF92YXIgfHwgZnRfZm9ybWF0X2NvZGUgPT0gZm10X2JpZykgJiYgCi0JCShtYXhfZmxvcHB5X3RyYWNrICE9IDI1NCB8fCBtYXhfZmxvcHB5X3NlY3RvciAhPSAxMjgpKQotI2VuZGlmCi0JICAgKSB7Ci0JCWNoYXIgc2VncGVyaGVhZHogPSBmdGFwZV9zZWdtZW50c19wZXJfaGVhZCA/ICcgJyA6ICc/JzsKLQkJY2hhciBzZWdwZXJjeWx6ICA9IGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlciA/ICcgJyA6ICc/JzsKLQkJVFJBQ0UoZnRfdF9lcnIsIlRhcGUgcGFyYW1ldGVycyBpbmNvbnNpc3RlbmN5LCBwbGVhc2UgcmVwb3J0Iik7Ci0JCVRSQUNFKGZ0X3RfZXJyLCAicmVwb3J0ZWQgPSAlZC8lZC8lZC8lZC8lZC8lZCIsCi0JCSAgICAgIGZ0X2Zvcm1hdF9jb2RlLAotCQkgICAgICBmdF9zZWdtZW50c19wZXJfdHJhY2ssCi0JCSAgICAgIGZ0X3RyYWNrc19wZXJfdGFwZSwKLQkJICAgICAgbWF4X2Zsb3BweV9zaWRlLAotCQkgICAgICBtYXhfZmxvcHB5X3RyYWNrLAotCQkgICAgICBtYXhfZmxvcHB5X3NlY3Rvcik7Ci0JCVRSQUNFKGZ0X3RfZXJyLCAicmVxdWlyZWQgPSAlZC8lZC8lZC8lZCVjLyVkJWMvJWQiLAotCQkgICAgICBmdF9mb3JtYXRfY29kZSwKLQkJICAgICAgZnRfc2VnbWVudHNfcGVyX3RyYWNrLAotCQkgICAgICBmdF90cmFja3NfcGVyX3RhcGUsCi0JCSAgICAgIGZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkID8KLQkJICAgICAgKChmdF9zZWdtZW50c19wZXJfdHJhY2sgKiBmdF90cmFja3NfcGVyX3RhcGUgLTEpIC8gCi0JCSAgICAgICBmdGFwZV9zZWdtZW50c19wZXJfaGVhZCApIDoKLQkJCShmdF9zZWdtZW50c19wZXJfdHJhY2sgKiBmdF90cmFja3NfcGVyX3RhcGUgLTEpLAotCQkJc2VncGVyaGVhZHosCi0JCSAgICAgIGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlciA/Ci0JCSAgICAgIChmdGFwZV9zZWdtZW50c19wZXJfaGVhZCAvIAotCQkgICAgICAgZnRhcGVfc2VnbWVudHNfcGVyX2N5bGluZGVyIC0gMSApIDoKLQkJCWZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkIC0gMSwKLQkJCXNlZ3BlcmN5bHosCi0JCSAgICAgIChmdGFwZV9zZWdtZW50c19wZXJfY3lsaW5kZXIgKiBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UKSk7Ci0JCVRSQUNFX0VYSVQgLUVJTzsKLQl9Ci0JZnRhcGVfZXh0cmFjdF9iYWRfc2VjdG9yX21hcChhZGRyZXNzKTsKLSAJVFJBQ0VfRVhJVCAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJlYWQuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1yZWFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OWY5OWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLSNpZm5kZWYgX0ZUQVBFX1JFQURfSAotI2RlZmluZSBfRlRBUEVfUkVBRF9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgIChDKSAxOTk2LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1yZWFkLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODoyMiAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgcmVhZCBmdW5jdGlvbnMKLSAqICAgICAgZm9yIHRoZSBRSUMtMTE3IGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCi0gKgotICovCi0KLS8qICAgICAgZnRhcGUtcmVhZC5jIGRlZmluZWQgZ2xvYmFsIGZ1bmN0aW9ucy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKLQlGVF9SRF9TSU5HTEUgPSAwLAotCUZUX1JEX0FIRUFEICA9IDEsCi19IGZ0X3JlYWRfbW9kZV90OwotCi1leHRlcm4gaW50IGZ0YXBlX3JlYWRfaGVhZGVyX3NlZ21lbnQoX191OCAqYWRkcmVzcyk7Ci1leHRlcm4gaW50IGZ0YXBlX2RlY29kZV9oZWFkZXJfc2VnbWVudChfX3U4ICphZGRyZXNzKTsKLWV4dGVybiBpbnQgZnRhcGVfcmVhZF9zZWdtZW50X2ZyYWN0aW9uKGNvbnN0IGludCBzZWdtZW50LAotCQkJCSAgICAgICB2b2lkICAqYWRkcmVzcywgCi0JCQkJICAgICAgIGNvbnN0IGZ0X3JlYWRfbW9kZV90IHJlYWRfbW9kZSwKLQkJCQkgICAgICAgY29uc3QgaW50IHN0YXJ0LAotCQkJCSAgICAgICBjb25zdCBpbnQgc2l6ZSk7Ci0jZGVmaW5lIGZ0YXBlX3JlYWRfc2VnbWVudChzZWdtZW50LCBhZGRyZXNzLCByZWFkX21vZGUpCQkJXAotCWZ0YXBlX3JlYWRfc2VnbWVudF9mcmFjdGlvbihzZWdtZW50LCBhZGRyZXNzLCByZWFkX21vZGUsCVwKLQkJCQkgICAgMCwgRlRfU0VHTUVOVF9TSVpFKQotZXh0ZXJuIHZvaWQgZnRhcGVfemFwX3JlYWRfYnVmZmVycyh2b2lkKTsKLQotI2VuZGlmCQkJCS8qIF9GVEFQRV9SRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ydy5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJ3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZDZkYzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJ3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkyICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5My0xOTk2IEJhcyBMYWFyaG92ZW4sCi0gKiAgICAgICAgICAgICAgICAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcncuYyx2ICQKLSAqICRSZXZpc2lvbjogMS43ICQKLSAqICREYXRlOiAxOTk3LzEwLzI4IDE0OjI2OjQ5ICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyBzb21lIGNvbW1vbiBjb2RlIGZvciB0aGUgc2VnbWVudCByZWFkIGFuZAotICogICAgICBzZWdtZW50IHdyaXRlIHJvdXRpbmVzIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yCi0gKiAgICAgIExpbnV4LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9xaWMxMTcuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mZGMtaW8uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW8uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1yZWFkLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtZWNjLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtYnNtLmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLWludCBmdF9ucl9idWZmZXJzOwotYnVmZmVyX3N0cnVjdCAqZnRfYnVmZmVyW0ZUX01BWF9OUl9CVUZGRVJTXTsKLXN0YXRpYyB2b2xhdGlsZSBpbnQgZnRfaGVhZDsKLXN0YXRpYyB2b2xhdGlsZSBpbnQgZnRfdGFpbDsJLyogbm90IHZvbGF0aWxlIGJ1dCBuZWVkIHNhbWUgdHlwZSBhcyBoZWFkICovCi1pbnQgZmRjX3NldHVwX2Vycm9yOwotbG9jYXRpb25fcmVjb3JkIGZ0X2xvY2F0aW9uID0gey0xLCAwfTsKLXZvbGF0aWxlIGludCBmdGFwZV90YXBlX3J1bm5pbmc7Ci0KLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotc3RhdGljIGludCBvdmVycnVuX2NvdW50X29mZnNldDsKLXN0YXRpYyBpbnQgaW5oaWJpdF9jb3JyZWN0aW9uOwotCi0vKiAgbWF4bWltYWwgYWxsb3dlZCBvdmVyc2hvb3Qgd2hlbiBmYXN0IHNlZWtpbmcKLSAqLwotI2RlZmluZSBPVkVSU0hPT1RfTElNSVQgMTAKLQotLyogICAgICBJbmNyZW1lbnQgY3ljbGljIGJ1ZmZlciBuci4KLSAqLwotYnVmZmVyX3N0cnVjdCAqZnRhcGVfbmV4dF9idWZmZXIoZnRfYnVmZmVyX3F1ZXVlX3QgcG9zKQotewotCXN3aXRjaCAocG9zKSB7Ci0JY2FzZSBmdF9xdWV1ZV9oZWFkOgotCQlpZiAoKytmdF9oZWFkID49IGZ0X25yX2J1ZmZlcnMpIHsKLQkJCWZ0X2hlYWQgPSAwOwotCQl9Ci0JCXJldHVybiBmdF9idWZmZXJbZnRfaGVhZF07Ci0JY2FzZSBmdF9xdWV1ZV90YWlsOgotCQlpZiAoKytmdF90YWlsID49IGZ0X25yX2J1ZmZlcnMpIHsKLQkJCWZ0X3RhaWwgPSAwOwotCQl9Ci0JCXJldHVybiBmdF9idWZmZXJbZnRfdGFpbF07Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIE5VTEw7Ci0JfQotfQotaW50IGZ0YXBlX2J1ZmZlcl9pZChmdF9idWZmZXJfcXVldWVfdCBwb3MpCi17Ci0Jc3dpdGNoKHBvcykgewotCWNhc2UgZnRfcXVldWVfaGVhZDogcmV0dXJuIGZ0X2hlYWQ7Ci0JY2FzZSBmdF9xdWV1ZV90YWlsOiByZXR1cm4gZnRfdGFpbDsKLQlkZWZhdWx0OiByZXR1cm4gLTE7Ci0JfQotfQotYnVmZmVyX3N0cnVjdCAqZnRhcGVfZ2V0X2J1ZmZlcihmdF9idWZmZXJfcXVldWVfdCBwb3MpCi17Ci0Jc3dpdGNoKHBvcykgewotCWNhc2UgZnRfcXVldWVfaGVhZDogcmV0dXJuIGZ0X2J1ZmZlcltmdF9oZWFkXTsKLQljYXNlIGZ0X3F1ZXVlX3RhaWw6IHJldHVybiBmdF9idWZmZXJbZnRfdGFpbF07Ci0JZGVmYXVsdDogcmV0dXJuIE5VTEw7Ci0JfQotfQotdm9pZCBmdGFwZV9yZXNldF9idWZmZXIodm9pZCkKLXsKLQlmdF9oZWFkID0gZnRfdGFpbCA9IDA7Ci19Ci0KLWJ1ZmZlcl9zdGF0ZV9lbnVtIGZ0YXBlX3NldF9zdGF0ZShidWZmZXJfc3RhdGVfZW51bSBuZXdfc3RhdGUpCi17Ci0JYnVmZmVyX3N0YXRlX2VudW0gb2xkX3N0YXRlID0gZnRfZHJpdmVyX3N0YXRlOwotCi0JZnRfZHJpdmVyX3N0YXRlID0gbmV3X3N0YXRlOwotCXJldHVybiBvbGRfc3RhdGU7Ci19Ci0vKiAgICAgIENhbGN1bGF0ZSBGbG9wcHkgRGlzayBDb250cm9sbGVyIGFuZCBETUEgcGFyYW1ldGVycyBmb3IgYSBzZWdtZW50LgotICogICAgICBoZWFkOiAgIHNlbGVjdHMgYnVmZmVyIHN0cnVjdCBpbiBhcnJheS4KLSAqICAgICAgb2Zmc2V0OiBudW1iZXIgb2YgcGh5c2ljYWwgc2VjdG9ycyB0byBza2lwIChpbmNsdWRpbmcgYmFkIG9uZXMpLgotICogICAgICBjb3VudDogIG51bWJlciBvZiBwaHlzaWNhbCBzZWN0b3JzIHRvIGhhbmRsZSAoaW5jbHVkaW5nIGJhZCBvbmVzKS4KLSAqLwotc3RhdGljIGludCBzZXR1cF9zZWdtZW50KGJ1ZmZlcl9zdHJ1Y3QgKiBidWZmLCAKLQkJCSBpbnQgc2VnbWVudF9pZCwKLQkJCSB1bnNpZ25lZCBpbnQgc2VjdG9yX29mZnNldCwgCi0JCQkgdW5zaWduZWQgaW50IHNlY3Rvcl9jb3VudCwgCi0JCQkgaW50IHJldHJ5KQotewotCVNlY3Rvck1hcCBvZmZzZXRfbWFzazsKLQlTZWN0b3JNYXAgbWFzazsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JYnVmZi0+c2VnbWVudF9pZCA9IHNlZ21lbnRfaWQ7Ci0JYnVmZi0+c2VjdG9yX29mZnNldCA9IHNlY3Rvcl9vZmZzZXQ7Ci0JYnVmZi0+cmVtYWluaW5nID0gc2VjdG9yX2NvdW50OwotCWJ1ZmYtPmhlYWQgPSBzZWdtZW50X2lkIC8gZnRhcGVfc2VnbWVudHNfcGVyX2hlYWQ7Ci0JYnVmZi0+Y3lsID0gKHNlZ21lbnRfaWQgJSBmdGFwZV9zZWdtZW50c19wZXJfaGVhZCkgLyBmdGFwZV9zZWdtZW50c19wZXJfY3lsaW5kZXI7Ci0JYnVmZi0+c2VjdCA9IChzZWdtZW50X2lkICUgZnRhcGVfc2VnbWVudHNfcGVyX2N5bGluZGVyKSAqIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgKyAxOwotCWJ1ZmYtPmRlbGV0ZWQgPSAwOwotCW9mZnNldF9tYXNrID0gKDEgPDwgYnVmZi0+c2VjdG9yX29mZnNldCkgLSAxOwotCW1hc2sgPSBmdGFwZV9nZXRfYmFkX3NlY3Rvcl9lbnRyeShzZWdtZW50X2lkKSAmIG9mZnNldF9tYXNrOwotCXdoaWxlIChtYXNrKSB7Ci0JCWlmIChtYXNrICYgMSkgewotCQkJb2Zmc2V0X21hc2sgPj49IDE7CS8qIGRvbid0IGNvdW50IGJhZCBzZWN0b3IgKi8KLQkJfQotCQltYXNrID4+PSAxOwotCX0KLQlidWZmLT5kYXRhX29mZnNldCA9IGNvdW50X29uZXMob2Zmc2V0X21hc2spOwkvKiBnb29kIHNlY3RvcnMgdG8gc2tpcCAqLwotCWJ1ZmYtPnB0ciA9IGJ1ZmYtPmFkZHJlc3MgKyBidWZmLT5kYXRhX29mZnNldCAqIEZUX1NFQ1RPUl9TSVpFOwotCVRSQUNFKGZ0X3RfZmxvdywgImRhdGEgb2Zmc2V0ID0gJWQgc2VjdG9ycyIsIGJ1ZmYtPmRhdGFfb2Zmc2V0KTsKLQlpZiAocmV0cnkpIHsKLQkJYnVmZi0+c29mdF9lcnJvcl9tYXAgJj0gb2Zmc2V0X21hc2s7CS8qIGtlZXAgc2tpcHBlZCBwYXJ0ICovCi0JfSBlbHNlIHsKLQkJYnVmZi0+aGFyZF9lcnJvcl9tYXAgPSBidWZmLT5zb2Z0X2Vycm9yX21hcCA9IDA7Ci0JfQotCWJ1ZmYtPmJhZF9zZWN0b3JfbWFwID0gZnRhcGVfZ2V0X2JhZF9zZWN0b3JfZW50cnkoYnVmZi0+c2VnbWVudF9pZCk7Ci0JaWYgKGJ1ZmYtPmJhZF9zZWN0b3JfbWFwICE9IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInNlZ21lbnQ6ICVkLCBiYWQgc2VjdG9yIG1hcDogJTA4bHgiLAotCQkJYnVmZi0+c2VnbWVudF9pZCwgKGxvbmcpYnVmZi0+YmFkX3NlY3Rvcl9tYXApOwotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgInNlZ21lbnQ6ICVkIiwgYnVmZi0+c2VnbWVudF9pZCk7Ci0JfQotCWlmIChidWZmLT5zZWN0b3Jfb2Zmc2V0ID4gMCkgewotCQlidWZmLT5iYWRfc2VjdG9yX21hcCA+Pj0gYnVmZi0+c2VjdG9yX29mZnNldDsKLQl9Ci0JaWYgKGJ1ZmYtPnNlY3Rvcl9vZmZzZXQgIT0gMCB8fCBidWZmLT5yZW1haW5pbmcgIT0gRlRfU0VDVE9SU19QRVJfU0VHTUVOVCkgewotCQlUUkFDRShmdF90X2Zsb3csICJzZWN0b3Igb2Zmc2V0ID0gJWQsIGNvdW50ID0gJWQiLAotCQkJYnVmZi0+c2VjdG9yX29mZnNldCwgYnVmZi0+cmVtYWluaW5nKTsKLQl9Ci0JLyogICAgU2VnbWVudHMgd2l0aCAzIG9yIGxlc3Mgc2VjdG9ycyBhcmUgbm90IHdyaXR0ZW4gd2l0aCB2YWxpZAotCSAqICAgIGRhdGEgYmVjYXVzZSB0aGVyZSBpcyBubyBzcGFjZSBsZWZ0IGZvciB0aGUgZWNjLiAgVGhlCi0JICogICAgZGF0YSB3cml0dGVuIGlzIHdoYXRldmVyIGhhcHBlbnMgdG8gYmUgaW4gdGhlIGJ1ZmZlci4KLQkgKiAgICBSZWFkaW5nIHN1Y2ggYSBzZWdtZW50IHdpbGwgcmV0dXJuIGEgemVybyBieXRlLWNvdW50LgotCSAqICAgIFRvIGFsbG93IHVzIHRvIHJlYWQvd3JpdGUgc2VnbWVudHMgd2l0aCBhbGwgYmFkIHNlY3RvcnMKLQkgKiAgICB3ZSBmYWtlIG9uZSByZWFkYWJsZSBzZWN0b3IgaW4gdGhlIHNlZ21lbnQuIFRoaXMKLQkgKiAgICBwcmV2ZW50cyBoYXZpbmcgdG8gaGFuZGxlIHRoZXNlIHNlZ21lbnRzIGluIGEgdmVyeQotCSAqICAgIHNwZWNpYWwgd2F5LiAgSXQgaXMgbm90IGltcG9ydGFudCBpZiB0aGUgcmVhZGluZyBvZiB0aGlzCi0JICogICAgYmFkIHNlY3RvciBmYWlscyBvciBub3QgKHRoZSBkYXRhIGlzIGlnbm9yZWQpLiBJdCBpcwotCSAqICAgIG9ubHkgcmVhZCB0byBrZWVwIHRoZSBkcml2ZXIgcnVubmluZy4KLQkgKgotCSAqICAgIFRoZSBRSUMtNDAvODAgc3BlYy4gaGFzIG5vIGluZm9ybWF0aW9uIG9uIGhvdyB0byBoYW5kbGUKLQkgKiAgICB0aGlzIGNhc2UsIHNvIHRoaXMgaXMgbXkgaW50ZXJwcmV0YXRpb24uICAKLQkgKi8KLQlpZiAoYnVmZi0+YmFkX3NlY3Rvcl9tYXAgPT0gRU1QVFlfU0VHTUVOVCkgewotCQlUUkFDRShmdF90X2Zsb3csICJlbXB0eSBzZWdtZW50ICVkLCBmYWtlIGZpcnN0IHNlY3RvciBnb29kIiwKLQkJICAgICAgYnVmZi0+c2VnbWVudF9pZCk7Ci0JCWlmIChidWZmLT5wdHIgIT0gYnVmZi0+YWRkcmVzcykgewotCQkJVFJBQ0UoZnRfdF9idWcsICJUaGlzIGlzIGEgYnVnOiAlcC8lcCIsCi0JCQkgICAgICBidWZmLT5wdHIsIGJ1ZmYtPmFkZHJlc3MpOwotCQl9Ci0JCWJ1ZmYtPmJhZF9zZWN0b3JfbWFwID0gRkFLRV9TRUdNRU5UOwotCX0KLQlmZGNfc2V0dXBfZXJyb3IgPSAwOwotCWJ1ZmYtPm5leHRfc2VnbWVudCA9IHNlZ21lbnRfaWQgKyAxOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogICAgICBDYWxjdWxhdGUgRmxvcHB5IERpc2sgQ29udHJvbGxlciBhbmQgRE1BIHBhcmFtZXRlcnMgZm9yIGEgbmV3IHNlZ21lbnQuCi0gKi8KLWludCBmdGFwZV9zZXR1cF9uZXdfc2VnbWVudChidWZmZXJfc3RydWN0ICogYnVmZiwgaW50IHNlZ21lbnRfaWQsIGludCBza2lwKQotewotCWludCByZXN1bHQgPSAwOwotCXN0YXRpYyBpbnQgb2xkX3NlZ21lbnRfaWQgPSAtMTsKLQlzdGF0aWMgYnVmZmVyX3N0YXRlX2VudW0gb2xkX2Z0X2RyaXZlcl9zdGF0ZSA9IGlkbGU7Ci0JaW50IHJldHJ5ID0gMDsKLQl1bnNpZ25lZCBvZmZzZXQgPSAwOwotCWludCBjb3VudCA9IEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlUUkFDRShmdF90X2Zsb3csICIlcyBzZWdtZW50ICVkIChvbGQgPSAlZCkiLAotCSAgICAgIChmdF9kcml2ZXJfc3RhdGUgPT0gcmVhZGluZyB8fCBmdF9kcml2ZXJfc3RhdGUgPT0gdmVyaWZ5aW5nKSAKLQkgICAgICA/ICJyZWFkaW5nIiA6ICJ3cml0aW5nIiwKLQkgICAgICBzZWdtZW50X2lkLCBvbGRfc2VnbWVudF9pZCk7Ci0JaWYgKGZ0X2RyaXZlcl9zdGF0ZSAhPSBvbGRfZnRfZHJpdmVyX3N0YXRlKSB7CS8qIHdoZW4gdmVyaWZ5aW5nICovCi0JCW9sZF9zZWdtZW50X2lkID0gLTE7Ci0JCW9sZF9mdF9kcml2ZXJfc3RhdGUgPSBmdF9kcml2ZXJfc3RhdGU7Ci0JfQotCWlmIChzZWdtZW50X2lkID09IG9sZF9zZWdtZW50X2lkKSB7Ci0JCSsrYnVmZi0+cmV0cnk7Ci0JCSsrZnRfaGlzdG9yeS5yZXRyaWVzOwotCQlUUkFDRShmdF90X2Zsb3csICJzZXR0aW5nIHVwIGZvciByZXRyeSBuciAlZCIsIGJ1ZmYtPnJldHJ5KTsKLQkJcmV0cnkgPSAxOwotCQlpZiAoc2tpcCAmJiBidWZmLT5za2lwID4gMCkgewkvKiBhbGxvdyBza2lwIG9uIHJldHJ5ICovCi0JCQlvZmZzZXQgPSBidWZmLT5za2lwOwotCQkJY291bnQgLT0gb2Zmc2V0OwotCQkJVFJBQ0UoZnRfdF9mbG93LCAic2tpcHBpbmcgJWQgc2VjdG9ycyIsIG9mZnNldCk7Ci0JCX0KLQl9IGVsc2UgewotCQlidWZmLT5yZXRyeSA9IDA7Ci0JCWJ1ZmYtPnNraXAgPSAwOwotCQlvbGRfc2VnbWVudF9pZCA9IHNlZ21lbnRfaWQ7Ci0JfQotCXJlc3VsdCA9IHNldHVwX3NlZ21lbnQoYnVmZiwgc2VnbWVudF9pZCwgb2Zmc2V0LCBjb3VudCwgcmV0cnkpOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0vKiAgICAgIERldGVybWluZSBzaXplIG9mIG5leHQgY2x1c3RlciBvZiBnb29kIHNlY3RvcnMuCi0gKi8KLWludCBmdGFwZV9jYWxjX25leHRfY2x1c3RlcihidWZmZXJfc3RydWN0ICogYnVmZikKLXsKLQkvKiBTa2lwIGJhZCBzZWN0b3JzLgotCSAqLwotCXdoaWxlIChidWZmLT5yZW1haW5pbmcgPiAwICYmIChidWZmLT5iYWRfc2VjdG9yX21hcCAmIDEpICE9IDApIHsKLQkJYnVmZi0+YmFkX3NlY3Rvcl9tYXAgPj49IDE7Ci0JCSsrYnVmZi0+c2VjdG9yX29mZnNldDsKLQkJLS1idWZmLT5yZW1haW5pbmc7Ci0JfQotCS8qIEZpbmQgbmV4dCBjbHVzdGVyIG9mIGdvb2Qgc2VjdG9ycwotCSAqLwotCWlmIChidWZmLT5iYWRfc2VjdG9yX21hcCA9PSAwKSB7CS8qIHNwZWVkIHVwICovCi0JCWJ1ZmYtPnNlY3Rvcl9jb3VudCA9IGJ1ZmYtPnJlbWFpbmluZzsKLQl9IGVsc2UgewotCQlTZWN0b3JNYXAgbWFwID0gYnVmZi0+YmFkX3NlY3Rvcl9tYXA7Ci0KLQkJYnVmZi0+c2VjdG9yX2NvdW50ID0gMDsKLQkJd2hpbGUgKGJ1ZmYtPnNlY3Rvcl9jb3VudCA8IGJ1ZmYtPnJlbWFpbmluZyAmJiAobWFwICYgMSkgPT0gMCkgewotCQkJKytidWZmLT5zZWN0b3JfY291bnQ7Ci0JCQltYXAgPj49IDE7Ci0JCX0KLQl9Ci0JcmV0dXJuIGJ1ZmYtPnNlY3Rvcl9jb3VudDsKLX0KLQotLyogIGlmIGp1c3QgcGFzc2VkIHRoZSBsYXN0IHNlZ21lbnQgb24gYSB0cmFjaywgd2FpdCBmb3IgQk9UCi0gKiAgb3IgRU9UIG1hcmsuCi0gKi8KLWludCBmdGFwZV9oYW5kbGVfbG9naWNhbF9lb3Qodm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IGxvZ2ljYWxfZW90KSB7Ci0JCWludCBzdGF0dXM7Ci0KLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInRhcGUgYXQgbG9naWNhbCBFT1QiKTsKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnNlZWssICZzdGF0dXMpLCk7Ci0JCWlmICgoc3RhdHVzICYgKFFJQ19TVEFUVVNfQVRfQk9UIHwgUUlDX1NUQVRVU19BVF9FT1QpKSA9PSAwKSB7Ci0JCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwgImVvdC9ib3Qgbm90IHJlYWNoZWQiKTsKLQkJfQotCQlmdF9ydW5uZXJfc3RhdHVzID0gZW5kX29mX3RhcGU7Ci0JfQotCWlmIChmdF9ydW5uZXJfc3RhdHVzID09IGVuZF9vZl90YXBlKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJydW5uZXIgc3RvcHBlZCBiZWNhdXNlIG9mIGxvZ2ljYWwgRU9UIik7Ci0JCWZ0X3J1bm5lcl9zdGF0dXMgPSBpZGxlOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfYm90X2VvdChpbnQgc3RhdHVzKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHN0YXR1cyAmIChRSUNfU1RBVFVTX0FUX0JPVCB8IFFJQ19TVEFUVVNfQVRfRU9UKSkgewotCQlmdF9sb2NhdGlvbi5ib3QgPSAoKGZ0X2xvY2F0aW9uLnRyYWNrICYgMSkgPT0gMCA/Ci0JCQkJKHN0YXR1cyAmIFFJQ19TVEFUVVNfQVRfQk9UKSAhPSAwOgotCQkJCShzdGF0dXMgJiBRSUNfU1RBVFVTX0FUX0VPVCkgIT0gMCk7Ci0JCWZ0X2xvY2F0aW9uLmVvdCA9ICFmdF9sb2NhdGlvbi5ib3Q7Ci0JCWZ0X2xvY2F0aW9uLnNlZ21lbnQgPSAoZnRfbG9jYXRpb24udHJhY2sgKwotCQkJKGZ0X2xvY2F0aW9uLmJvdCA/IDAgOiAxKSkgKiBmdF9zZWdtZW50c19wZXJfdHJhY2sgLSAxOwotCQlmdF9sb2NhdGlvbi5zZWN0b3IgPSAtMTsKLQkJZnRfbG9jYXRpb24ua25vd24gID0gMTsKLQkJVFJBQ0UoZnRfdF9mbG93LCAidGFwZSBhdCBsb2dpY2FsICVzIiwKLQkJICAgICAgZnRfbG9jYXRpb24uYm90ID8gImJvdCIgOiAiZW90Iik7Ci0JCVRSQUNFKGZ0X3RfZmxvdywgInNlZ21lbnQgPSAlZCIsIGZ0X2xvY2F0aW9uLnNlZ21lbnQpOwotCX0gZWxzZSB7Ci0JCWZ0X2xvY2F0aW9uLmtub3duID0gMDsKLQl9Ci0JVFJBQ0VfRVhJVCBmdF9sb2NhdGlvbi5rbm93bjsKLX0KLQotLyogICAgICBSZWFkIElkIG9mIGZpcnN0IHNlY3RvciBwYXNzaW5nIHRhcGUgaGVhZC4KLSAqLwotc3RhdGljIGludCBmdGFwZV9yZWFkX2lkKHZvaWQpCi17Ci0JaW50IHN0YXR1czsKLQlfX3U4IG91dFsyXTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCi0JLyogQXNzdW1lIHRhcGUgaXMgcnVubmluZyBvbiBlbnRyeSwgYmUgYWJsZSB0byBoYW5kbGUKLQkgKiBzaXR1YXRpb24gd2hlcmUgaXQgc3RvcHBlZCBvciBpcyBzdG9wcGluZy4KLQkgKi8KLQlmdF9sb2NhdGlvbi5rbm93biA9IDA7CS8qIGRlZmF1bHQgaXMgbG9jYXRpb24gbm90IGtub3duICovCi0Jb3V0WzBdID0gRkRDX1JFQURJRDsKLQlvdXRbMV0gPSBmdF9kcml2ZV9zZWw7Ci0JVFJBQ0VfQ0FUQ0goZmRjX2NvbW1hbmQob3V0LCAyKSwpOwotCXN3aXRjaCAoZmRjX2ludGVycnVwdF93YWl0KDIwICogRlRfU0VDT05EKSkgewotCWNhc2UgMDoKLQkJaWYgKGZkY19zZWN0ID09IDApIHsKLQkJCWlmIChmdGFwZV9yZXBvcnRfZHJpdmVfc3RhdHVzKCZzdGF0dXMpID49IDAgJiYKLQkJCSAgICAoc3RhdHVzICYgUUlDX1NUQVRVU19SRUFEWSkpIHsKLQkJCQlmdGFwZV90YXBlX3J1bm5pbmcgPSAwOwotCQkJCVRSQUNFKGZ0X3RfZmxvdywgInRhcGUgaGFzIHN0b3BwZWQiKTsKLQkJCQljaGVja19ib3RfZW90KHN0YXR1cyk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlmdF9sb2NhdGlvbi5rbm93biA9IDE7Ci0JCQlmdF9sb2NhdGlvbi5zZWdtZW50ID0gKGZ0YXBlX3NlZ21lbnRzX3Blcl9oZWFkCi0JCQkJCSAgICAgICAqIGZkY19oZWFkCi0JCQkJCSAgICAgICArIGZ0YXBlX3NlZ21lbnRzX3Blcl9jeWxpbmRlcgotCQkJCQkgICAgICAgKiBmZGNfY3lsCi0JCQkJCSAgICAgICArIChmZGNfc2VjdCAtIDEpCi0JCQkJCSAgICAgICAvIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQpOwotCQkJZnRfbG9jYXRpb24uc2VjdG9yID0gKChmZGNfc2VjdCAtIDEpCi0JCQkJCSAgICAgICUgRlRfU0VDVE9SU19QRVJfU0VHTUVOVCk7Ci0JCQlmdF9sb2NhdGlvbi5lb3QgPSBmdF9sb2NhdGlvbi5ib3QgPSAwOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgLUVUSU1FOgotCQkvKiAgRGlkbid0IGZpbmQgaWQgb24gdGFwZSwgbXVzdCBiZSBuZWFyIGVuZDogV2FpdAotCQkgKiAgdW50aWwgc3RvcHBlZC4KLQkJICovCi0JCWlmIChmdGFwZV9yZWFkeV93YWl0KEZUX0ZPUkVWRVIsICZzdGF0dXMpID49IDApIHsKLQkJCWZ0YXBlX3RhcGVfcnVubmluZyA9IDA7Ci0JCQlUUkFDRShmdF90X2Zsb3csICJ0YXBlIGhhcyBzdG9wcGVkIik7Ci0JCQljaGVja19ib3RfZW90KHN0YXR1cyk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogIEludGVycnVwdGVkIG9yIG90aGVyd2lzZSBmYWlsaW5nCi0JCSAqICBmZGNfaW50ZXJydXB0X3dhaXQoKSAKLQkJICovCi0JCVRSQUNFKGZ0X3RfZXJyLCAiZmRjX2ludGVycnVwdF93YWl0IGZhaWxlZCIpOwotCQlicmVhazsKLQl9Ci0JaWYgKCFmdF9sb2NhdGlvbi5rbm93bikgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2Zsb3csICJubyBpZCBmb3VuZCIpOwotCX0KLQlpZiAoZnRfbG9jYXRpb24uc2VjdG9yID09IDApIHsKLQkJVFJBQ0UoZnRfdF9mbG93LCAicGFzc2luZyBzZWdtZW50ICVkLyVkIiwKLQkJICAgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yKTsKLQl9IGVsc2UgewotCQlUUkFDRShmdF90X2ZkY19kbWEsICJwYXNzaW5nIHNlZ21lbnQgJWQvJWQiLAotCQkgICAgICBmdF9sb2NhdGlvbi5zZWdtZW50LCBmdF9sb2NhdGlvbi5zZWN0b3IpOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG9naWNhbF9mb3J3YXJkKHZvaWQpCi17Ci0JZnRhcGVfdGFwZV9ydW5uaW5nID0gMTsKLQlyZXR1cm4gZnRhcGVfY29tbWFuZChRSUNfTE9HSUNBTF9GT1JXQVJEKTsKLX0KLQotaW50IGZ0YXBlX3N0b3BfdGFwZShpbnQgKnBzdGF0dXMpCi17Ci0JaW50IHJldHJ5ID0gMDsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JZG8gewotCQlyZXN1bHQgPSBmdGFwZV9jb21tYW5kX3dhaXQoUUlDX1NUT1BfVEFQRSwKLQkJCQkJICAgIGZ0YXBlX3RpbWVvdXQuc3RvcCwgcHN0YXR1cyk7Ci0JCWlmIChyZXN1bHQgPT0gMCkgewotCQkJaWYgKCgqcHN0YXR1cyAmIFFJQ19TVEFUVVNfUkVBRFkpID09IDApIHsKLQkJCQlyZXN1bHQgPSAtRUlPOwotCQkJfSBlbHNlIHsKLQkJCQlmdGFwZV90YXBlX3J1bm5pbmcgPSAwOwotCQkJfQotCQl9Ci0JfSB3aGlsZSAocmVzdWx0IDwgMCAmJiArK3JldHJ5IDw9IDMpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVRSQUNFKGZ0X3RfZXJyLCAiZmFpbGVkICEgKGZhdGFsKSIpOwotCX0KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotaW50IGZ0YXBlX2R1bWJfc3RvcCh2b2lkKQotewotCWludCByZXN1bHQ7Ci0JaW50IHN0YXR1czsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCS8qICBBYm9ydCBjdXJyZW50IGZkYyBvcGVyYXRpb24gaWYgaXQncyBidXN5IChwcm9iYWJseSByZWFkCi0JICogIG9yIHdyaXRlIG9wZXJhdGlvbiBwZW5kaW5nKSB3aXRoIGEgcmVzZXQuCi0JICovCi0JaWYgKGZkY19yZWFkeV93YWl0KDEwMCAvKiB1c2VjICovKSA8IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImFib3J0aW5nIGZkYyBvcGVyYXRpb24iKTsKLQkJZmRjX3Jlc2V0KCk7Ci0JfQotCS8qICBSZWFkaW5nIGlkJ3MgYWZ0ZXIgdGhlIGxhc3Qgc2VnbWVudCBvbiBhIHRyYWNrIG1heSBmYWlsCi0JICogIGJ1dCBldmVudHVhbGx5IHRoZSBkcml2ZSB3aWxsIGJlY29tZSByZWFkeSAobG9naWNhbCBlb3QpLgotCSAqLwotCXJlc3VsdCA9IGZ0YXBlX3JlcG9ydF9kcml2ZV9zdGF0dXMoJnN0YXR1cyk7Ci0JZnRfbG9jYXRpb24ua25vd24gPSAwOwotCWRvIHsKLQkJaWYgKHJlc3VsdCA9PSAwICYmIHN0YXR1cyAmIFFJQ19TVEFUVVNfUkVBRFkpIHsKLQkJCS8qIFRhcGUgaXMgbm90IHJ1bm5pbmcgYW55IG1vcmUuCi0JCQkgKi8KLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJ0YXBlIGFscmVhZHkgaGFsdGVkIik7Ci0JCQljaGVja19ib3RfZW90KHN0YXR1cyk7Ci0JCQlmdGFwZV90YXBlX3J1bm5pbmcgPSAwOwotCQl9IGVsc2UgaWYgKGZ0YXBlX3RhcGVfcnVubmluZykgewotCQkJLyogIFRhcGUgaXMgKHdhcykgc3RpbGwgbW92aW5nLgotCQkJICovCi0jaWZkZWYgVEVTVElORwotCQkJZnRhcGVfcmVhZF9pZCgpOwotI2VuZGlmCi0JCQlyZXN1bHQgPSBmdGFwZV9zdG9wX3RhcGUoJnN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiAgVGFwZSBub3QgeWV0IHJlYWR5IGJ1dCBzdG9wcGVkLgotCQkJICovCi0JCQlyZXN1bHQgPSBmdGFwZV9yZWFkeV93YWl0KGZ0YXBlX3RpbWVvdXQucGF1c2UsJnN0YXR1cyk7Ci0JCX0KLQl9IHdoaWxlIChmdGFwZV90YXBlX3J1bm5pbmcKLQkJICYmICEoc2lndGVzdHNldG1hc2soJmN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsLCBfTkVWRVJfQkxPQ0spKSk7Ci0jaWZuZGVmIFRFU1RJTkcKLQlmdF9sb2NhdGlvbi5rbm93biA9IDA7Ci0jZW5kaWYKLQlpZiAoZnRfcnVubmVyX3N0YXR1cyA9PSBhYm9ydGluZyB8fCBmdF9ydW5uZXJfc3RhdHVzID09IGRvX2Fib3J0KSB7Ci0JCWZ0X3J1bm5lcl9zdGF0dXMgPSBpZGxlOwotCX0KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyogICAgICBXYWl0IHVudGlsIHJ1bm5lciBoYXMgZmluaXNoZWQgdGFpbCBidWZmZXIuCi0gKgotICovCi1pbnQgZnRhcGVfd2FpdF9zZWdtZW50KGJ1ZmZlcl9zdGF0ZV9lbnVtIHN0YXRlKQotewotCWludCBzdGF0dXM7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQl3aGlsZSAoZnRfYnVmZmVyW2Z0X3RhaWxdLT5zdGF0dXMgPT0gc3RhdGUpIHsKLQkJVFJBQ0UoZnRfdF9mbG93LCAic3RhdGU6ICVkIiwgZnRfYnVmZmVyW2Z0X3RhaWxdLT5zdGF0dXMpOwotCQkvKiAgRmlyc3QgYnVmZmVyIHN0aWxsIGJlaW5nIHdvcmtlZCBvbiwgd2FpdCB1cCB0byB0aW1lb3V0LgotCQkgKgotCQkgKiAgTm90ZTogd2UgY2hlY2sgdHdvIHRpbWVzIGZvciBiZWluZyBraWxsZWQuIDUwCi0JCSAqICBzZWNvbmRzIGFyZSBxdWl0ZSBsb25nLiBOb3RlIHRoYXQKLQkJICogIGZkY19pbnRlcnJ1cHRfd2FpdCgpIGlzIG5vdCBraWxsYWJsZSBieSBhbnkKLQkJICogIG1lYW5zLiBmdGFwZV9yZWFkX3NlZ21lbnQoKSB3YW50cyB1cyB0byByZXR1cm4KLQkJICogIC1FSU5UUiBpbiBjYXNlIG9mIGEgc2lnbmFsLiAgCi0JCSAqLwotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JCXJlc3VsdCA9IGZkY19pbnRlcnJ1cHRfd2FpdCg1MCAqIEZUX1NFQ09ORCk7Ci0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCVRSQUNFX0FCT1JUKHJlc3VsdCwKLQkJCQkgICAgZnRfdF9lcnIsICJmZGNfaW50ZXJydXB0X3dhaXQgZmFpbGVkIik7Ci0JCX0KLQkJaWYgKGZkY19zZXR1cF9lcnJvcikgewotCQkJLyogcmVjb3Zlci4uLiBGSVhNRSAqLwotCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsICJzZXR1cCBlcnJvciIpOwotCQl9Ci0JfQotCWlmIChmdF9idWZmZXJbZnRfdGFpbF0tPnN0YXR1cyAhPSBlcnJvcikgewotCQlUUkFDRV9FWElUIDA7Ci0JfQotCVRSQUNFX0NBVENIKGZ0YXBlX3JlcG9ydF9kcml2ZV9zdGF0dXMoJnN0YXR1cyksKTsKLQlUUkFDRShmdF90X25vaXNlLCAiZnRhcGVfcmVwb3J0X2RyaXZlX3N0YXR1czogMHglMDJ4Iiwgc3RhdHVzKTsKLQlpZiAoKHN0YXR1cyAmIFFJQ19TVEFUVVNfUkVBRFkpICYmIAotCSAgICAoc3RhdHVzICYgUUlDX1NUQVRVU19FUlJPUikpIHsKLQkJdW5zaWduZWQgaW50IGVycm9yOwotCQlxaWMxMTdfY21kX3QgY29tbWFuZDsKLQkJCi0JCS8qICBSZXBvcnQgYW5kIGNsZWFyIGVycm9yIHN0YXRlLgotCQkgKiAgSW4gY2FzZSB0aGUgZHJpdmUgY2FuJ3Qgb3BlcmF0ZSBhdCB0aGUgc2VsZWN0ZWQKLQkJICogIHJhdGUsIHNlbGVjdCB0aGUgbmV4dCBsb3dlciBkYXRhIHJhdGUuCi0JCSAqLwotCQlmdGFwZV9yZXBvcnRfZXJyb3IoJmVycm9yLCAmY29tbWFuZCwgMSk7Ci0JCWlmIChlcnJvciA9PSAzMSAmJiBjb21tYW5kID09IFFJQ19MT0dJQ0FMX0ZPUldBUkQpIHsKLQkJCS8qIGRyaXZlIGRvZXMgbm90IGFjY2VwdCB0aGlzIGRhdGEgcmF0ZSAqLwotCQkJaWYgKGZ0X2RhdGFfcmF0ZSA+IDI1MCkgewotCQkJCVRSQUNFKGZ0X3RfaW5mbywKLQkJCQkgICAgICAiUHJvYmFibGUgZGF0YSByYXRlIGNvbmZsaWN0Iik7Ci0JCQkJVFJBQ0UoZnRfdF9pbmZvLAotCQkJCSAgICAgICJMb3dlcmluZyBkYXRhIHJhdGUgdG8gJWQgS2JwcyIsCi0JCQkJICAgICAgZnRfZGF0YV9yYXRlIC8gMik7Ci0JCQkJZnRhcGVfaGFsZl9kYXRhX3JhdGUoKTsKLQkJCQlpZiAoZnRfYnVmZmVyW2Z0X3RhaWxdLT5yZXRyeSA+IDApIHsKLQkJCQkJLyogZ2l2ZSBpdCBhIGNoYW5jZSAqLwotCQkJCQktLWZ0X2J1ZmZlcltmdF90YWlsXS0+cmV0cnk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBubyByYXRlIGlzIGFjY2VwdGVkLi4uICovCi0JCQkJVFJBQ0UoZnRfdF9lcnIsICJXZSdyZSBkZWFkIDooIik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRShmdF90X2VyciwgIlVua25vd24gZXJyb3IiKTsKLQkJfQotCQlUUkFDRV9FWElUIC1FSU87ICAgLyogZy5wLiBlcnJvciAqLwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qIGZvcndhcmQgKi8gc3RhdGljIGludCBzZWVrX2ZvcndhcmQoaW50IHNlZ21lbnRfaWQsIGludCBmYXN0KTsKLQotc3RhdGljIGludCBmYXN0X3NlZWsoaW50IGNvdW50LCBpbnQgcmV2ZXJzZSkKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgc3RhdHVzOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGNvdW50ID4gMCkgewotCQkvKiAgSWYgcG9zaXRpb25lZCBhdCBiZWdpbiBvciBlbmQgb2YgdGFwZSwgZmFzdCBzZWVraW5nIG5lZWRzCi0JCSAqICBzcGVjaWFsIHRyZWF0bWVudC4KLQkJICogIFN0YXJ0aW5nIGZyb20gbG9naWNhbCBib3QgbmVlZHMgYSAoc2xvdykgc2VlayB0byB0aGUgZmlyc3QKLQkJICogIHNlZ21lbnQgYmVmb3JlIHRoZSBoaWdoIHNwZWVkIHNlZWsuIE1vc3QgZHJpdmVzIGRvIHRoaXMKLQkJICogIGF1dG9tYXRpY2FsbHkgYnV0IHNvbWUgb2xkZXIgZG9uJ3QsIHNvIHdlIHRyZWF0IHRoZW0KLQkJICogIGFsbCB0aGUgc2FtZS4KLQkJICogIFN0YXJ0aW5nIGZyb20gbG9naWNhbCBlb3QgaXMgZXZlbiBtb3JlIGRpZmZpY3VsdCBiZWNhdXNlCi0JCSAqICB3ZSBjYW5ub3QgKHNsb3cpIHJldmVyc2Ugc2VlayB0byB0aGUgbGFzdCBzZWdtZW50LgotCQkgKiAgVE8gQkUgSU1QTEVNRU5URUQuCi0JCSAqLwotCQlpbmhpYml0X2NvcnJlY3Rpb24gPSAwOwotCQlpZiAoZnRfbG9jYXRpb24ua25vd24gJiYKLQkJICAgICgoZnRfbG9jYXRpb24uYm90ICYmICFyZXZlcnNlKSB8fAotCQkgICAgIChmdF9sb2NhdGlvbi5lb3QgJiYgcmV2ZXJzZSkpKSB7Ci0JCQlpZiAoIXJldmVyc2UpIHsKLQkJCQkvKiAgKHNsb3cpIHNraXAgdG8gZmlyc3Qgc2VnbWVudCBvbiBhIHRyYWNrCi0JCQkJICovCi0JCQkJc2Vla19mb3J3YXJkKGZ0X2xvY2F0aW9uLnRyYWNrICogZnRfc2VnbWVudHNfcGVyX3RyYWNrLCAwKTsKLQkJCQktLWNvdW50OwotCQkJfSBlbHNlIHsKLQkJCQkvKiAgV2hlbiBzZWVraW5nIGJhY2t3YXJkcyBmcm9tCi0JCQkJICogIGVuZC1vZi10YXBlIHRoZSBudW1iZXIgb2YgZXJhc2VkCi0JCQkJICogIGdhcHMgZm91bmQgc2VlbXMgdG8gYmUgaGlnaGVyIHRoYW4KLQkJCQkgKiAgZXhwZWN0ZWQuICBUaGVyZWZvciB0aGUgZHJpdmUgbXVzdAotCQkJCSAqICBza2lwIHNvbWUgbW9yZSBzZWdtZW50cyB0aGFuCi0JCQkJICogIGNhbGN1bGF0ZWQsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdwotCQkJCSAqICBtYW55LiAgVGh1cyB3ZSB3aWxsIHByZXZlbnQgdGhlCi0JCQkJICogIHJlLWNhbGN1bGF0aW9uIG9mIG9mZnNldCBhbmQKLQkJCQkgKiAgb3ZlcnNob290IHdoZW4gc2Vla2luZyBiYWNrd2FyZHMuCi0JCQkJICovCi0JCQkJaW5oaWJpdF9jb3JyZWN0aW9uID0gMTsKLQkJCQljb3VudCArPSAzOwkvKiBiZXN0IGd1ZXNzICovCi0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlUUkFDRShmdF90X2Zsb3csICJ3YXJuaW5nOiB6ZXJvIG9yIG5lZ2F0aXZlIGNvdW50OiAlZCIsIGNvdW50KTsKLQl9Ci0JaWYgKGNvdW50ID4gMCkgewotCQlpbnQgaTsKLQkJaW50IG5pYmJsZXMgPSBjb3VudCA+IDI1NSA/IDMgOiAyOwotCi0JCWlmIChjb3VudCA+IDQwOTUpIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJza2lwcGluZyBjbGlwcGVkIGF0IDQwOTUgc2VnbWVudCIpOwotCQkJY291bnQgPSA0MDk1OwotCQl9Ci0JCS8qIElzc3VlIHRoaXMgdGFwZSBjb21tYW5kIGZpcnN0LiAqLwotCQlpZiAoIXJldmVyc2UpIHsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJza2lwcGluZyAlZCBzZWdtZW50KHMpIiwgY291bnQpOwotCQkJcmVzdWx0ID0gZnRhcGVfY29tbWFuZChuaWJibGVzID09IDMgPwotCQkJICAgUUlDX1NLSVBfRVhURU5ERURfRk9SV0FSRCA6IFFJQ19TS0lQX0ZPUldBUkQpOwotCQl9IGVsc2UgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImJhY2tpbmcgdXAgJWQgc2VnbWVudChzKSIsIGNvdW50KTsKLQkJCXJlc3VsdCA9IGZ0YXBlX2NvbW1hbmQobmliYmxlcyA9PSAzID8KLQkJCSAgIFFJQ19TS0lQX0VYVEVOREVEX1JFVkVSU0UgOiBRSUNfU0tJUF9SRVZFUlNFKTsKLQkJfQotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgIlNraXAgY29tbWFuZCBmYWlsZWQiKTsKLQkJfSBlbHNlIHsKLQkJCS0tY291bnQ7CS8qIDAgbWVhbnMgb25lIGdhcCBldGMuICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgbmliYmxlczsgKytpKSB7Ci0JCQkJaWYgKHJlc3VsdCA+PSAwKSB7Ci0JCQkJCXJlc3VsdCA9IGZ0YXBlX3BhcmFtZXRlcihjb3VudCAmIDE1KTsKLQkJCQkJY291bnQgLz0gMTY7Ci0JCQkJfQotCQkJfQotCQkJcmVzdWx0ID0gZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnJld2luZCwgJnN0YXR1cyk7Ci0JCQlpZiAocmVzdWx0ID49IDApIHsKLQkJCQlmdGFwZV90YXBlX3J1bm5pbmcgPSAwOwotCQkJfQotCQl9Ci0JfQotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IHZhbGlkYXRlKGludCBpZCkKLXsKLQkvKiBDaGVjayB0byBzZWUgaWYgcG9zaXRpb24gZm91bmQgaXMgb2ZmLXRyYWNrIGFzIHJlcG9ydGVkCi0JICogIG9uY2UuICBCZWNhdXNlIGFsbCB0cmFja3MgaW4gb25lIGRpcmVjdGlvbiBsaWUgbmV4dCB0bwotCSAqICBlYWNoIG90aGVyLCBpZiBvZmYtdHJhY2sgdGhlIGVycm9yIHdpbGwgYmUgYXBwcm94aW1hdGVseQotCSAqICAyICogZnRfc2VnbWVudHNfcGVyX3RyYWNrLgotCSAqLwotCWlmIChmdF9sb2NhdGlvbi50cmFjayA9PSAtMSkgewotCQlyZXR1cm4gMTsgLyogdW5mb3JzZWVuIHNpdHVhdGlvbiwgZG9uJ3QgZ2VuZXJhdGUgZXJyb3IgKi8KLQl9IGVsc2UgewotCQkvKiBVc2UgbWFyZ2luIG9mIGZ0X3NlZ21lbnRzX3Blcl90cmFjayBvbiBib3RoIHNpZGVzCi0JCSAqIGJlY2F1c2UgZnRhcGUgbmVlZHMgc29tZSBtYXJnaW4gYW5kIHRoZSBlcnJvciB3ZSdyZQotCQkgKiBsb29raW5nIGZvciBpcyBtdWNoIGxhcmdlciAhCi0JCSAqLwotCQlpbnQgbG8gPSAoZnRfbG9jYXRpb24udHJhY2sgLSAxKSAqIGZ0X3NlZ21lbnRzX3Blcl90cmFjazsKLQkJaW50IGhpID0gKGZ0X2xvY2F0aW9uLnRyYWNrICsgMikgKiBmdF9zZWdtZW50c19wZXJfdHJhY2s7Ci0KLQkJcmV0dXJuIChpZCA+PSBsbyAmJiBpZCA8IGhpKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2Vla19mb3J3YXJkKGludCBzZWdtZW50X2lkLCBpbnQgZmFzdCkKLXsKLQlpbnQgZmFpbHVyZXMgPSAwOwotCWludCBjb3VudDsKLQlzdGF0aWMgaW50IG1hcmdpbiA9IDE7CS8qIGZpeGVkOiBzdG9wIHRoaXMgYmVmb3JlIHRhcmdldCAqLwotCXN0YXRpYyBpbnQgb3ZlcnNob290ID0gMTsKLQlzdGF0aWMgaW50IG1pbl9jb3VudCA9IDg7Ci0JaW50IGV4cGVjdGVkID0gLTE7Ci0JaW50IHRhcmdldCA9IHNlZ21lbnRfaWQgLSBtYXJnaW47Ci0JaW50IGZhc3Rfc2Vla2luZzsKLQlpbnQgcHJldl9zZWdtZW50ID0gZnRfbG9jYXRpb24uc2VnbWVudDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICghZnRfbG9jYXRpb24ua25vd24pIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkgICAgImZhdGFsOiBjYW5ub3Qgc2VlayBmcm9tIHVua25vd24gbG9jYXRpb24iKTsKLQl9Ci0JaWYgKCF2YWxpZGF0ZShzZWdtZW50X2lkKSkgewotCQlmdGFwZV9zbGVlcCgxICogRlRfU0VDT05EKTsKLQkJZnRfZmFpbHVyZSA9IDE7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJICAgICJmYXRhbDogaGVhZCBvZmYgdHJhY2sgKGJhZCBoYXJkd2FyZT8pIik7Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJmcm9tICVkLyVkIHRvICVkLzAgLSAlZCIsCi0JICAgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yLHNlZ21lbnRfaWQsbWFyZ2luKTsKLQljb3VudCA9IHRhcmdldCAtIGZ0X2xvY2F0aW9uLnNlZ21lbnQgLSBvdmVyc2hvb3Q7Ci0JZmFzdF9zZWVraW5nID0gKGZhc3QgJiYKLQkJCWNvdW50ID4gKG1pbl9jb3VudCArIChmdF9sb2NhdGlvbi5ib3QgPyAxIDogMCkpKTsKLQlpZiAoZmFzdF9zZWVraW5nKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJmYXN0IHNraXBwaW5nICVkIHNlZ21lbnRzIiwgY291bnQpOwotCQlleHBlY3RlZCA9IHNlZ21lbnRfaWQgLSBtYXJnaW47Ci0JCWZhc3Rfc2Vlayhjb3VudCwgMCk7Ci0JfQotCWlmICghZnRhcGVfdGFwZV9ydW5uaW5nKSB7Ci0JCWxvZ2ljYWxfZm9yd2FyZCgpOwotCX0KLQl3aGlsZSAoZnRfbG9jYXRpb24uc2VnbWVudCA8IHNlZ21lbnRfaWQpIHsKLQkJLyogIFRoaXMgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHNlY3RvciBpbiBhIChiYWQpIHNlZ21lbnQgdG8KLQkJICogIGhhdmUgYSB2YWxpZCBhbmQgcmVhZGFibGUgc2VjdG9yIGlkICEKLQkJICogIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyBub3QgZ3VhcmFudGVlZCwgc28gd2UgbXVzdCB0cnkKLQkJICogIHRvIGZpbmQgYSB3YXkgdG8gc2tpcCBhbiBFTVBUWV9TRUdNRU5ULiAhISEgRklYTUUgISEhCi0JCSAqLwotCQlpZiAoZnRhcGVfcmVhZF9pZCgpIDwgMCB8fCAhZnRfbG9jYXRpb24ua25vd24gfHwKLQkJICAgIHNpZ3Rlc3RzZXRtYXNrKCZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCwgX0RPTlRfQkxPQ0spKSB7Ci0JCQlmdF9sb2NhdGlvbi5rbm93biA9IDA7Ci0JCQlpZiAoIWZ0YXBlX3RhcGVfcnVubmluZyB8fAotCQkJICAgICsrZmFpbHVyZXMgPiBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UKSB7Ci0JCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkJCSAgICAicmVhZF9pZCBmYWlsZWQgY29tcGxldGVseSIpOwotCQkJfQotCQkJRlRfU0lHTkFMX0VYSVQoX0RPTlRfQkxPQ0spOwotCQkJVFJBQ0UoZnRfdF9mbG93LCAicmVhZF9pZCBmYWlsZWQsIHJldHJ5ICglZCkiLAotCQkJICAgICAgZmFpbHVyZXMpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGZhc3Rfc2Vla2luZykgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImVuZGVkIGF0ICVkLyVkICglZCwlZCkiLAotCQkJICAgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yLAotCQkJICAgICAgb3ZlcnNob290LCBpbmhpYml0X2NvcnJlY3Rpb24pOwotCQkJaWYgKCFpbmhpYml0X2NvcnJlY3Rpb24gJiYKLQkJCSAgICAoZnRfbG9jYXRpb24uc2VnbWVudCA8IGV4cGVjdGVkIHx8Ci0JCQkgICAgIGZ0X2xvY2F0aW9uLnNlZ21lbnQgPiBleHBlY3RlZCArIG1hcmdpbikpIHsKLQkJCQlpbnQgZXJyb3IgPSBmdF9sb2NhdGlvbi5zZWdtZW50IC0gZXhwZWN0ZWQ7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJCQkgICAgICAiYWRqdXN0aW5nIG92ZXJzaG9vdCBmcm9tICVkIHRvICVkIiwKLQkJCQkgICAgICBvdmVyc2hvb3QsIG92ZXJzaG9vdCArIGVycm9yKTsKLQkJCQlvdmVyc2hvb3QgKz0gZXJyb3I7Ci0JCQkJLyogIEFsbCBvdmVyc2hvb3RzIGhhdmUgdGhlIHNhbWUKLQkJCQkgKiAgZGlyZWN0aW9uLCBzbyBpdCBzaG91bGQgbmV2ZXIKLQkJCQkgKiAgYmVjb21lIG5lZ2F0aXZlLCBidXQgd2hvIGtub3dzLgotCQkJCSAqLwotCQkJCWlmIChvdmVyc2hvb3QgPCAtNSB8fAotCQkJCSAgICBvdmVyc2hvb3QgPiBPVkVSU0hPT1RfTElNSVQpIHsKLQkJCQkJaWYgKG92ZXJzaG9vdCA8IDApIHsKLQkJCQkJCS8qIGtlZXAgc2FuZSB2YWx1ZSAqLwotCQkJCQkJb3ZlcnNob290ID0gLTU7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBrZWVwIHNhbmUgdmFsdWUgKi8KLQkJCQkJCW92ZXJzaG9vdCA9IE9WRVJTSE9PVF9MSU1JVDsKLQkJCQkJfQotCQkJCQlUUkFDRShmdF90X25vaXNlLAotCQkJCQkgICAgICAiY2xpcHBlZCBvdmVyc2hvb3QgdG8gJWQiLAotCQkJCQkgICAgICBvdmVyc2hvb3QpOwotCQkJCX0KLQkJCX0KLQkJCWZhc3Rfc2Vla2luZyA9IDA7Ci0JCX0KLQkJaWYgKGZ0X2xvY2F0aW9uLmtub3duKSB7Ci0JCQlpZiAoZnRfbG9jYXRpb24uc2VnbWVudCA+IHByZXZfc2VnbWVudCArIDEpIHsKLQkJCQlUUkFDRShmdF90X25vaXNlLAotCQkJCSAgICAgICJtaXNzZWQgc2VnbWVudCAlZCB3aGlsZSBza2lwcGluZyIsCi0JCQkJICAgICAgcHJldl9zZWdtZW50ICsgMSk7Ci0JCQl9Ci0JCQlwcmV2X3NlZ21lbnQgPSBmdF9sb2NhdGlvbi5zZWdtZW50OwotCQl9Ci0JfQotCWlmIChmdF9sb2NhdGlvbi5zZWdtZW50ID4gc2VnbWVudF9pZCkgewotCQlUUkFDRV9BQk9SVCgtRUlPLAotCQkJICAgIGZ0X3Rfbm9pc2UsICJmYWlsZWQ6IHNraXAgZW5kZWQgYXQgc2VnbWVudCAlZC8lZCIsCi0JCQkgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yKTsKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1zdGF0aWMgaW50IHNraXBfcmV2ZXJzZShpbnQgc2VnbWVudF9pZCwgaW50ICpwc3RhdHVzKQotewotCWludCBmYWlsdXJlcyA9IDA7Ci0Jc3RhdGljIGludCBvdmVyc2hvb3QgPSAxOwotCXN0YXRpYyBpbnQgbWluX3Jld2luZCA9IDI7CS8qIDEgKyBvdmVyc2hvb3QgKi8KLQlzdGF0aWMgY29uc3QgaW50IG1hcmdpbiA9IDE7CS8qIHN0b3AgdGhpcyBiZWZvcmUgdGFyZ2V0ICovCi0JaW50IGV4cGVjdGVkID0gMDsKLQlpbnQgY291bnQgPSAxOwotCWludCBzaG9ydF9zZWVrOwotCWludCB0YXJnZXQgPSBzZWdtZW50X2lkIC0gbWFyZ2luOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKGZ0X2xvY2F0aW9uLmtub3duICYmICF2YWxpZGF0ZShzZWdtZW50X2lkKSkgewotCQlmdGFwZV9zbGVlcCgxICogRlRfU0VDT05EKTsKLQkJZnRfZmFpbHVyZSA9IDE7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJICAgICJmYXRhbDogaGVhZCBvZmYgdHJhY2sgKGJhZCBoYXJkd2FyZT8pIik7Ci0JfQotCWRvIHsKLQkJaWYgKCFmdF9sb2NhdGlvbi5rbm93bikgewotCQkJVFJBQ0UoZnRfdF93YXJuLCAid2FybmluZzogbG9jYXRpb24gbm90IGtub3duIik7Ci0JCX0KLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImZyb20gJWQvJWQgdG8gJWQvMCAtICVkIiwKLQkJICAgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yLAotCQkgICAgICBzZWdtZW50X2lkLCBtYXJnaW4pOwotCQkvKiAgbWluX3Jld2luZCA9PSAxICsgb3ZlcnNob290X3doZW5fZG9pbmdfbWluaW11bV9yZXdpbmQKLQkJICogIG92ZXJzaG9vdCAgPT0gb3ZlcnNob290X3doZW5fZG9pbmdfbGFyZ2VyX3Jld2luZAotCQkgKiAgSW5pdGlhbGx5IG1pbl9yZXdpbmQgPT0gMSArIG92ZXJzaG9vdCwgb3B0aW1pemF0aW9uCi0JCSAqICBvZiBib3RoIHZhbHVlcyB3aWxsIGJlIGRvbmUgc2VwYXJhdGVseS4KLQkJICogIG92ZXJzaG9vdCBhbmQgbWluX3Jld2luZCBjYW4gYmUgbmVnYXRpdmUgYXMgYm90aCBhcmUKLQkJICogIHN1bXMgb2YgdGhyZWUgY29tcG9uZW50czoKLQkJICogIGFueV9vdmVyc2hvb3QgPT0gcmV3aW5kX292ZXJzaG9vdCAtIAotCQkgKiAgICAgICAgICAgICAgICAgICBzdG9wX292ZXJzaG9vdCAgIC0KLQkJICogICAgICAgICAgICAgICAgICAgc3RhcnRfb3ZlcnNob290Ci0JCSAqLwotCQlpZiAoZnRfbG9jYXRpb24uc2VnbWVudCAtIHRhcmdldCAtIChtaW5fcmV3aW5kIC0gMSkgPCAxKSB7Ci0JCQlzaG9ydF9zZWVrID0gMTsKLQkJfSBlbHNlIHsKLQkJCWNvdW50ID0gZnRfbG9jYXRpb24uc2VnbWVudCAtIHRhcmdldCAtIG92ZXJzaG9vdDsKLQkJCXNob3J0X3NlZWsgPSAoY291bnQgPCAxKTsKLQkJfQotCQlpZiAoc2hvcnRfc2VlaykgewotCQkJY291bnQgPSAxOwkvKiBkbyBzaG9ydGVzdCByZXdpbmQgKi8KLQkJCWV4cGVjdGVkID0gZnRfbG9jYXRpb24uc2VnbWVudCAtIG1pbl9yZXdpbmQ7Ci0JCQlpZiAoZXhwZWN0ZWQvZnRfc2VnbWVudHNfcGVyX3RyYWNrICE9IGZ0X2xvY2F0aW9uLnRyYWNrKSB7Ci0JCQkJZXhwZWN0ZWQgPSAoZnRfbG9jYXRpb24udHJhY2sgKiAKLQkJCQkJICAgIGZ0X3NlZ21lbnRzX3Blcl90cmFjayk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlleHBlY3RlZCA9IHRhcmdldDsKLQkJfQotCQlmYXN0X3NlZWsoY291bnQsIDEpOwotCQlsb2dpY2FsX2ZvcndhcmQoKTsKLQkJaWYgKGZ0YXBlX3JlYWRfaWQoKSA8IDAgfHwgIWZ0X2xvY2F0aW9uLmtub3duIHx8Ci0JCSAgICAoc2lndGVzdHNldG1hc2soJmN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsLCBfRE9OVF9CTE9DSykpKSB7Ci0JCQlpZiAoKCFmdGFwZV90YXBlX3J1bm5pbmcgJiYgIWZ0X2xvY2F0aW9uLmtub3duKSB8fAotCQkJICAgICsrZmFpbHVyZXMgPiBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UKSB7Ci0JCQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkJCSAgICAicmVhZF9pZCBmYWlsZWQgY29tcGxldGVseSIpOwotCQkJfQotCQkJRlRfU0lHTkFMX0VYSVQoX0RPTlRfQkxPQ0spOwotCQkJVFJBQ0VfQ0FUQ0goZnRhcGVfcmVwb3J0X2RyaXZlX3N0YXR1cyhwc3RhdHVzKSwpOwotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImZ0YXBlX3JlYWRfaWQgZmFpbGVkLCByZXRyeSAoJWQpIiwKLQkJCSAgICAgIGZhaWx1cmVzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJlbmRlZCBhdCAlZC8lZCAoJWQsJWQsJWQpIiwgCi0JCSAgICAgIGZ0X2xvY2F0aW9uLnNlZ21lbnQsIGZ0X2xvY2F0aW9uLnNlY3RvciwKLQkJICAgICAgbWluX3Jld2luZCwgb3ZlcnNob290LCBpbmhpYml0X2NvcnJlY3Rpb24pOwotCQlpZiAoIWluaGliaXRfY29ycmVjdGlvbiAmJgotCQkgICAgKGZ0X2xvY2F0aW9uLnNlZ21lbnQgPCBleHBlY3RlZCB8fAotCQkgICAgIGZ0X2xvY2F0aW9uLnNlZ21lbnQgPiBleHBlY3RlZCArIG1hcmdpbikpIHsKLQkJCWludCBlcnJvciA9IGV4cGVjdGVkIC0gZnRfbG9jYXRpb24uc2VnbWVudDsKLQkJCWlmIChzaG9ydF9zZWVrKSB7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJCQkgICAgICAiYWRqdXN0aW5nIG1pbl9yZXdpbmQgZnJvbSAlZCB0byAlZCIsCi0JCQkJICAgICAgbWluX3Jld2luZCwgbWluX3Jld2luZCArIGVycm9yKTsKLQkJCQltaW5fcmV3aW5kICs9IGVycm9yOwotCQkJCWlmIChtaW5fcmV3aW5kIDwgLTUpIHsKLQkJCQkJLyogaXMgdGhpcyByaWdodCA/IEZJWE1FICEgKi8KLQkJCQkJLyoga2VlcCBzYW5lIHZhbHVlICovCi0JCQkJCW1pbl9yZXdpbmQgPSAtNTsKLQkJCQkJVFJBQ0UoZnRfdF9ub2lzZSwgCi0JCQkJCSAgICAgICJjbGlwcGVkIG1pbl9yZXdpbmQgdG8gJWQiLAotCQkJCQkgICAgICBtaW5fcmV3aW5kKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCVRSQUNFKGZ0X3Rfbm9pc2UsCi0JCQkJICAgICAgImFkanVzdGluZyBvdmVyc2hvb3QgZnJvbSAlZCB0byAlZCIsCi0JCQkJICAgICAgb3ZlcnNob290LCBvdmVyc2hvb3QgKyBlcnJvcik7Ci0JCQkJb3ZlcnNob290ICs9IGVycm9yOwotCQkJCWlmIChvdmVyc2hvb3QgPCAtNSB8fAotCQkJCSAgICBvdmVyc2hvb3QgPiBPVkVSU0hPT1RfTElNSVQpIHsKLQkJCQkJaWYgKG92ZXJzaG9vdCA8IDApIHsKLQkJCQkJCS8qIGtlZXAgc2FuZSB2YWx1ZSAqLwotCQkJCQkJb3ZlcnNob290ID0gLTU7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBrZWVwIHNhbmUgdmFsdWUgKi8KLQkJCQkJCW92ZXJzaG9vdCA9IE9WRVJTSE9PVF9MSU1JVDsKLQkJCQkJfQotCQkJCQlUUkFDRShmdF90X25vaXNlLAotCQkJCQkgICAgICAiY2xpcHBlZCBvdmVyc2hvb3QgdG8gJWQiLAotCQkJCQkgICAgICBvdmVyc2hvb3QpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0gd2hpbGUgKGZ0X2xvY2F0aW9uLnNlZ21lbnQgPiBzZWdtZW50X2lkKTsKLQlpZiAoZnRfbG9jYXRpb24ua25vd24pIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImN1cnJlbnQgbG9jYXRpb246ICVkLyVkIiwKLQkJICAgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yKTsKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1zdGF0aWMgaW50IGRldGVybWluZV9wb3NpdGlvbih2b2lkKQotewotCWludCByZXRyeSA9IDA7Ci0JaW50IHN0YXR1czsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKCFmdGFwZV90YXBlX3J1bm5pbmcpIHsKLQkJLyogIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRhcGUgaXMgc3RvcHBlZCBieSBpc3IuCi0JCSAqLwotCQlUUkFDRShmdF90X2Zsb3csICJ3YWl0aW5nIGZvciB0YXBlIHN0b3AiKTsKLQkJaWYgKGZ0YXBlX3JlYWR5X3dhaXQoZnRhcGVfdGltZW91dC5wYXVzZSwgJnN0YXR1cykgPCAwKSB7Ci0JCQlUUkFDRShmdF90X2Zsb3csICJkcml2ZSBzdGlsbCBydW5uaW5nIChmYXRhbCkiKTsKLQkJCWZ0YXBlX3RhcGVfcnVubmluZyA9IDE7CS8qID8gKi8KLQkJfQotCX0gZWxzZSB7Ci0JCWZ0YXBlX3JlcG9ydF9kcml2ZV9zdGF0dXMoJnN0YXR1cyk7Ci0JfQotCWlmIChzdGF0dXMgJiBRSUNfU1RBVFVTX1JFQURZKSB7Ci0JCS8qICBEcml2ZSBtdXN0IGJlIHJlYWR5IHRvIGNoZWNrIGVycm9yIHN0YXRlICEKLQkJICovCi0JCVRSQUNFKGZ0X3RfZmxvdywgImRyaXZlIGlzIHJlYWR5Iik7Ci0JCWlmIChzdGF0dXMgJiBRSUNfU1RBVFVTX0VSUk9SKSB7Ci0JCQl1bnNpZ25lZCBpbnQgZXJyb3I7Ci0JCQlxaWMxMTdfY21kX3QgY29tbWFuZDsKLQotCQkJLyogIFJlcG9ydCBhbmQgY2xlYXIgZXJyb3Igc3RhdGUsIHRyeSB0byBjb250aW51ZS4KLQkJCSAqLwotCQkJVFJBQ0UoZnRfdF9mbG93LCAiZXJyb3Igc3RhdHVzIHNldCIpOwotCQkJZnRhcGVfcmVwb3J0X2Vycm9yKCZlcnJvciwgJmNvbW1hbmQsIDEpOwotCQkJZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnJlc2V0LCAmc3RhdHVzKTsKLQkJCWZ0YXBlX3RhcGVfcnVubmluZyA9IDA7CS8qID8gKi8KLQkJfQotCQlpZiAoY2hlY2tfYm90X2VvdChzdGF0dXMpKSB7Ci0JCQlpZiAoZnRfbG9jYXRpb24uYm90KSB7Ci0JCQkJaWYgKChzdGF0dXMgJiBRSUNfU1RBVFVTX1JFQURZKSA9PSAwKSB7Ci0JCQkJCS8qIHRhcGUgbW92aW5nIGF3YXkgZnJvbQotCQkJCQkgKiBib3QvZW90LCBsZXQncyBzZWUgaWYgd2UKLQkJCQkJICogY2FuIGNhdGNoIHVwIHdpdGggdGhlIGZpcnN0Ci0JCQkJCSAqIHNlZ21lbnQgb24gdGhpcyB0cmFjay4KLQkJCQkJICovCi0JCQkJfSBlbHNlIHsKLQkJCQkJVFJBQ0UoZnRfdF9mbG93LAotCQkJCQkgICAgICAic3RhcnQgdGFwZSBmcm9tIGxvZ2ljYWwgYm90Iik7Ci0JCQkJCWxvZ2ljYWxfZm9yd2FyZCgpOwkvKiBzdGFydCBtb3ZpbmcgKi8KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmICgoc3RhdHVzICYgUUlDX1NUQVRVU19SRUFEWSkgPT0gMCkgewotCQkJCQlUUkFDRShmdF90X25vaXNlLCAid2FpdGluZyBmb3IgbG9naWNhbCBlbmQgb2YgdHJhY2siKTsKLQkJCQkJcmVzdWx0ID0gZnRhcGVfcmVhZHlfd2FpdChmdGFwZV90aW1lb3V0LnJlc2V0LCAmc3RhdHVzKTsKLQkJCQkJLyogZXJyb3IgaGFuZGxpbmcgbmVlZGVkID8gKi8KLQkJCQl9IGVsc2UgewotCQkJCQlUUkFDRShmdF90X25vaXNlLAotCQkJCQkgICAgICAidGFwZSBhdCBsb2dpY2FsIGVuZCBvZiB0cmFjayIpOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCVRSQUNFKGZ0X3RfZmxvdywgInN0YXJ0IHRhcGUiKTsKLQkJCWxvZ2ljYWxfZm9yd2FyZCgpOwkvKiBzdGFydCBtb3ZpbmcgKi8KLQkJCWZ0X2xvY2F0aW9uLmtub3duID0gMDsJLyogbm90IGNsZWFyZWQgYnkgbG9naWNhbCBmb3J3YXJkICEgKi8KLQkJfQotCX0KLQkvKiB0YXBlIHNob3VsZCBiZSBtb3Zpbmcgbm93LCBzdGFydCByZWFkaW5nIGlkJ3MKLQkgKi8KLQl3aGlsZSAoIWZ0X2xvY2F0aW9uLmtub3duICYmCi0JICAgICAgIHJldHJ5KysgPCBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UICYmCi0JICAgICAgIChyZXN1bHQgPSBmdGFwZV9yZWFkX2lkKCkpIDwgMCkgewotCi0JCVRSQUNFKGZ0X3RfZmxvdywgImxvY2F0aW9uIHVua25vd24iKTsKLQotCQkvKiBleGl0IG9uIHNpZ25hbAotCQkgKi8KLQkJRlRfU0lHTkFMX0VYSVQoX0RPTlRfQkxPQ0spOwotCi0JCS8qICByZWFkLWlkIHNvbWVob3cgZmFpbGVkLCB0YXBlIG1heQotCQkgKiAgaGF2ZSByZWFjaGVkIGVuZCBvciBzb21lIG90aGVyCi0JCSAqICBlcnJvciBoYXBwZW5lZC4KLQkJICovCi0JCVRSQUNFKGZ0X3RfZmxvdywgInJlYWQtaWQgZmFpbGVkIik7Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX3JlcG9ydF9kcml2ZV9zdGF0dXMoJnN0YXR1cyksKTsKLQkJVFJBQ0UoZnRfdF9lcnIsICJmdGFwZV9yZXBvcnRfZHJpdmVfc3RhdHVzOiAweCUwMngiLCBzdGF0dXMpOwotCQlpZiAoc3RhdHVzICYgUUlDX1NUQVRVU19SRUFEWSkgewotCQkJZnRhcGVfdGFwZV9ydW5uaW5nID0gMDsKLQkJCVRSQUNFKGZ0X3Rfbm9pc2UsICJ0YXBlIHN0b3BwZWQgZm9yIHVua25vd24gcmVhc29uISAiCi0JCQkgICAgICAic3RhdHVzID0gMHglMDJ4Iiwgc3RhdHVzKTsKLQkJCWlmIChzdGF0dXMgJiBRSUNfU1RBVFVTX0VSUk9SIHx8Ci0JCQkgICAgIWNoZWNrX2JvdF9lb3Qoc3RhdHVzKSkgewotCQkJCS8qIG9vcHMsIHRhcGUgc3RvcHBlZCBidXQgbm90IGF0IGVuZCEKLQkJCQkgKi8KLQkJCQlUUkFDRV9FWElUIC1FSU87Ci0JCQl9Ci0JCX0KLQl9Ci0JVFJBQ0UoZnRfdF9mbG93LAotCSAgICAgICJ0YXBlIGlzIHBvc2l0aW9uZWQgYXQgc2VnbWVudCAlZCIsIGZ0X2xvY2F0aW9uLnNlZ21lbnQpOwotCVRSQUNFX0VYSVQgZnRfbG9jYXRpb24ua25vd24gPyAwIDogLUVJTzsKLX0KLQotLyogICAgICBHZXQgdGhlIHRhcGUgcnVubmluZyBhbmQgcG9zaXRpb24gaXQganVzdCBiZWZvcmUgdGhlCi0gKiAgICAgIHJlcXVlc3RlZCBzZWdtZW50LgotICogICAgICBTZWVrIHRhcGUtdHJhY2sgYW5kIHJlcG9zaXRpb24gYXMgbmVlZGVkLgotICovCi1pbnQgZnRhcGVfc3RhcnRfdGFwZShpbnQgc2VnbWVudF9pZCwgaW50IHNlY3Rvcl9vZmZzZXQpCi17Ci0JaW50IHRyYWNrID0gc2VnbWVudF9pZCAvIGZ0X3NlZ21lbnRzX3Blcl90cmFjazsKLQlpbnQgcmVzdWx0ID0gLUVJTzsKLQlpbnQgc3RhdHVzOwotCXN0YXRpYyBpbnQgbGFzdF9zZWdtZW50ID0gLTE7Ci0Jc3RhdGljIGludCBiYWRfYnVzX3RpbWluZyA9IDA7Ci0JLyogbnVtYmVyIG9mIHNlZ21lbnRzIHBhc3NpbmcgdGhlIGhlYWQgYmV0d2VlbiBzdGFydGluZyB0aGUgdGFwZQotCSAqIGFuZCBiZWluZyBhYmxlIHRvIGFjY2VzcyB0aGUgZmlyc3Qgc2VjdG9yLgotCSAqLwotCXN0YXRpYyBpbnQgc3RhcnRfb2Zmc2V0ID0gMTsKLQlpbnQgcmV0cnk7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQkvKiBJZiBzZWN0b3Jfb2Zmc2V0ID4gMCwgc2VlayBpbnRvIHdhbnRlZCBzZWdtZW50IGluc3RlYWQgb2YKLQkgKiBpbnRvIHByZXZpb3VzLgotCSAqIFRoaXMgYWxsb3dzIGVycm9yIHJlY292ZXJ5IGlmIGEgcGFydCBvZiB0aGUgc2VnbWVudCBpcyBiYWQKLQkgKiAoZXJhc2VkKSBjYXVzaW5nIHRoZSB0YXBlIGRyaXZlIHRvIGdlbmVyYXRlIGFuIGluZGV4IHB1bHNlCi0JICogdGh1cyBjYXVzaW5nIGEgbm8tZGF0YSBlcnJvciBiZWZvcmUgdGhlIHJlcXVlc3RlZCBzZWN0b3IKLQkgKiBpcyByZWFjaGVkLgotCSAqLwotCWZ0YXBlX3RhcGVfcnVubmluZyA9IDA7Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgInRhcmdldCBzZWdtZW50OiAlZC8lZCVzIiwgc2VnbWVudF9pZCwgc2VjdG9yX29mZnNldCwKLQkJZnRfYnVmZmVyW2Z0X2hlYWRdLT5yZXRyeSA+IDAgPyAiIHJldHJ5IiA6ICIiKTsKLQlpZiAoZnRfYnVmZmVyW2Z0X2hlYWRdLT5yZXRyeSA+IDApIHsJLyogdGhpcyBpcyBhIHJldHJ5ICovCi0JCWludCBkaXN0ID0gc2VnbWVudF9pZCAtIGxhc3Rfc2VnbWVudDsKLQotCQlpZiAoKGludClmdF9oaXN0b3J5Lm92ZXJydW5fZXJyb3JzIDwgb3ZlcnJ1bl9jb3VudF9vZmZzZXQpIHsKLQkJCW92ZXJydW5fY291bnRfb2Zmc2V0ID0gZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9yczsKLQkJfSBlbHNlIGlmIChkaXN0IDwgMCB8fCBkaXN0ID4gNTApIHsKLQkJCW92ZXJydW5fY291bnRfb2Zmc2V0ID0gZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9yczsKLQkJfSBlbHNlIGlmICgoZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9ycyAtCi0JCQkgICAgb3ZlcnJ1bl9jb3VudF9vZmZzZXQpID49IDgpIHsKLQkJCWlmIChmdGFwZV9pbmNyZWFzZV90aHJlc2hvbGQoKSA+PSAwKSB7Ci0JCQkJLS1mdF9idWZmZXJbZnRfaGVhZF0tPnJldHJ5OwotCQkJCW92ZXJydW5fY291bnRfb2Zmc2V0ID0KLQkJCQkJZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9yczsKLQkJCQlUUkFDRShmdF90X3dhcm4sICJpbmNyZWFzZWQgdGhyZXNob2xkIGJlY2F1c2UgIgotCQkJCSAgICAgICJvZiBleGNlc3NpdmUgb3ZlcnJ1biBlcnJvcnMiKTsKLQkJCX0gZWxzZSBpZiAoIWJhZF9idXNfdGltaW5nICYmIGZ0X2RhdGFfcmF0ZSA+PSAxMDAwKSB7Ci0JCQkJZnRhcGVfaGFsZl9kYXRhX3JhdGUoKTsKLQkJCQktLWZ0X2J1ZmZlcltmdF9oZWFkXS0+cmV0cnk7Ci0JCQkJYmFkX2J1c190aW1pbmcgPSAxOwotCQkJCW92ZXJydW5fY291bnRfb2Zmc2V0ID0KLQkJCQkJZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9yczsKLQkJCQlUUkFDRShmdF90X3dhcm4sICJyZWR1Y2VkIGRhdGFyYXRlIGJlY2F1c2UgIgotCQkJCSAgICAgICJvZiBleGNlc3NpdmUgb3ZlcnJ1biBlcnJvcnMiKTsKLQkJCX0KLQkJfQotCX0KLQlsYXN0X3NlZ21lbnQgPSBzZWdtZW50X2lkOwotCWlmIChmdF9sb2NhdGlvbi50cmFjayAhPSB0cmFjayB8fAotCSAgICAoZnRhcGVfbWlnaHRfYmVfb2ZmX3RyYWNrICYmIGZ0X2J1ZmZlcltmdF9oZWFkXS0+cmV0cnk9PSAwKSkgewotCQkvKiBjdXJyZW50IHRyYWNrIHVua25vd24gb3Igbm90IGVxdWFsIHRvIGRlc3RpbmF0aW9uCi0JCSAqLwotCQlmdGFwZV9yZWFkeV93YWl0KGZ0YXBlX3RpbWVvdXQuc2VlaywgJnN0YXR1cyk7Ci0JCWZ0YXBlX3NlZWtfaGVhZF90b190cmFjayh0cmFjayk7Ci0JCS8qIG92ZXJydW5fY291bnRfb2Zmc2V0ID0gZnRfaGlzdG9yeS5vdmVycnVuX2Vycm9yczsgKi8KLQl9Ci0JcmVzdWx0ID0gLUVJTzsKLQlyZXRyeSA9IDA7Ci0Jd2hpbGUgKHJlc3VsdCA8IDAgICAgICYmCi0JICAgICAgIHJldHJ5KysgPD0gNSAgICYmCi0JICAgICAgICFmdF9mYWlsdXJlICYmCi0JICAgICAgICEoc2lndGVzdHNldG1hc2soJmN1cnJlbnQtPnBlbmRpbmcuc2lnbmFsLCBfRE9OVF9CTE9DSykpKSB7Ci0JCQotCQlpZiAocmV0cnkgJiYgc3RhcnRfb2Zmc2V0IDwgNSkgewotCQkJc3RhcnRfb2Zmc2V0ICsrOwotCQl9Ci0JCS8qICBDaGVjayBpZiB3ZSBhcmUgYWJsZSB0byBjYXRjaCB0aGUgcmVxdWVzdGVkCi0JCSAqICBzZWdtZW50IGluIHRpbWUuCi0JCSAqLwotCQlpZiAoKGZ0X2xvY2F0aW9uLmtub3duIHx8IChkZXRlcm1pbmVfcG9zaXRpb24oKSA9PSAwKSkgJiYKLQkJICAgIGZ0X2xvY2F0aW9uLnNlZ21lbnQgPj0KLQkJICAgIChzZWdtZW50X2lkIC0KLQkJICAgICAoKGZ0YXBlX3RhcGVfcnVubmluZyB8fCBmdF9sb2NhdGlvbi5ib3QpCi0JCSAgICAgID8gMCA6IHN0YXJ0X29mZnNldCkpKSB7Ci0JCQkvKiAgVG9vIGZhciBhaGVhZCAoaW4gb3IgcGFzdCB0YXJnZXQgc2VnbWVudCkuCi0JCQkgKi8KLQkJCWlmIChmdGFwZV90YXBlX3J1bm5pbmcpIHsKLQkJCQlpZiAoKHJlc3VsdCA9IGZ0YXBlX3N0b3BfdGFwZSgmc3RhdHVzKSkgPCAwKSB7Ci0JCQkJCVRSQUNFKGZ0X3RfZXJyLAotCQkJCQkgICAgICAic3RvcCB0YXBlIGZhaWxlZCB3aXRoIGNvZGUgJWQiLAotCQkJCQkgICAgICByZXN1bHQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwgInRhcGUgc3RvcHBlZCIpOwotCQkJCWZ0YXBlX3RhcGVfcnVubmluZyA9IDA7Ci0JCQl9Ci0JCQlUUkFDRShmdF90X25vaXNlLCAicmVwb3NpdGlvbmluZyIpOwotCQkJKytmdF9oaXN0b3J5LnJld2luZHM7Ci0JCQlpZiAoc2VnbWVudF9pZCAlIGZ0X3NlZ21lbnRzX3Blcl90cmFjayA8IHN0YXJ0X29mZnNldCl7Ci0JCQkJVFJBQ0UoZnRfdF9ub2lzZSwgImVuZCBvZiB0cmFjayBjb25kaXRpb25cbiIKLQkJCQkgICAgICBLRVJOX0lORk8gInNlZ21lbnRfaWQgICAgICAgIDogJWRcbiIKLQkJCQkgICAgICBLRVJOX0lORk8gImZ0X3NlZ21lbnRzX3Blcl90cmFjazogJWRcbiIKLQkJCQkgICAgICBLRVJOX0lORk8gInN0YXJ0X29mZnNldCAgICAgIDogJWQiLAotCQkJCSAgICAgIHNlZ21lbnRfaWQsIGZ0X3NlZ21lbnRzX3Blcl90cmFjaywgCi0JCQkJICAgICAgc3RhcnRfb2Zmc2V0KTsKLQkJCQkgICAgICAKLQkJCQkvKiAgSWYgc2Vla2luZyB0byBmaXJzdCBzZWdtZW50cyBvbgotCQkJCSAqICB0cmFjayBiZXR0ZXIgZG8gYSBjb21wbGV0ZSByZXdpbmQKLQkJCQkgKiAgdG8gbG9naWNhbCBiZWdpbiBvZiB0cmFjayB0byBnZXQgYQotCQkJCSAqICBtb3JlIHN0ZWFkeSB0YXBlIG1vdGlvbi4gIAotCQkJCSAqLwotCQkJCXJlc3VsdCA9IGZ0YXBlX2NvbW1hbmRfd2FpdCgKLQkJCQkJKGZ0X2xvY2F0aW9uLnRyYWNrICYgMSkKLQkJCQkJPyBRSUNfUEhZU0lDQUxfRk9SV0FSRAotCQkJCQk6IFFJQ19QSFlTSUNBTF9SRVZFUlNFLAotCQkJCQlmdGFwZV90aW1lb3V0LnJld2luZCwgJnN0YXR1cyk7Ci0JCQkJY2hlY2tfYm90X2VvdChzdGF0dXMpOwkvKiB1cGRhdGUgbG9jYXRpb24gKi8KLQkJCX0gZWxzZSB7Ci0JCQkJcmVzdWx0PSBza2lwX3JldmVyc2Uoc2VnbWVudF9pZCAtIHN0YXJ0X29mZnNldCwKLQkJCQkJCSAgICAgJnN0YXR1cyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmdF9sb2NhdGlvbi5rbm93bikgewotCQkJVFJBQ0UoZnRfdF9idWcsICJwYW5pYzogbG9jYXRpb24gbm90IGtub3duIik7Ci0JCQlyZXN1bHQgPSAtRUlPOwotCQkJY29udGludWU7IC8qIHdoaWxlKCkgd2lsbCBjaGVjayBmb3IgZmFpbHVyZSAqLwotCQl9Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJjdXJyZW50IHNlZ21lbnQ6ICVkLyVkIiwKLQkJICAgICAgZnRfbG9jYXRpb24uc2VnbWVudCwgZnRfbG9jYXRpb24uc2VjdG9yKTsKLQkJLyogIFdlJ3JlIG9uIHRoZSByaWdodCB0cmFjayBzb21ld2hlcmUgYmVmb3JlIHRoZQotCQkgKiAgd2FudGVkIHNlZ21lbnQuICBTdGFydCB0YXBlIG1vdmVtZW50IGlmIG5lZWRlZCBhbmQKLQkJICogIHNraXAgdG8ganVzdCBiZWZvcmUgb3IgaW5zaWRlIHRoZSByZXF1ZXN0ZWQKLQkJICogIHNlZ21lbnQuIEtlZXAgdGFwZSBydW5uaW5nLiAgCi0JCSAqLwotCQlyZXN1bHQgPSAwOwotCQlpZiAoZnRfbG9jYXRpb24uc2VnbWVudCA8IAotCQkgICAgKHNlZ21lbnRfaWQgLSAoKGZ0YXBlX3RhcGVfcnVubmluZyB8fCBmdF9sb2NhdGlvbi5ib3QpCi0JCQkJICAgPyAwIDogc3RhcnRfb2Zmc2V0KSkpIHsKLQkJCWlmIChzZWN0b3Jfb2Zmc2V0ID4gMCkgewotCQkJCXJlc3VsdCA9IHNlZWtfZm9yd2FyZChzZWdtZW50X2lkLAotCQkJCQkJICAgICAgcmV0cnkgPD0gMyk7Ci0JCQl9IGVsc2UgewotCQkJCXJlc3VsdCA9IHNlZWtfZm9yd2FyZChzZWdtZW50X2lkIC0gMSwKLQkJCQkJCSAgICAgIHJldHJ5IDw9IDMpOwotCQkJfQotCQl9Ci0JCWlmIChyZXN1bHQgPT0gMCAmJgotCQkgICAgZnRfbG9jYXRpb24uc2VnbWVudCAhPQotCQkgICAgKHNlZ21lbnRfaWQgLSAoc2VjdG9yX29mZnNldCA+IDAgPyAwIDogMSkpKSB7Ci0JCQlyZXN1bHQgPSAtRUlPOwotCQl9Ci0JfQotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVRSQUNFKGZ0X3RfZXJyLCAiZmFpbGVkIHRvIHJlcG9zaXRpb24iKTsKLQl9IGVsc2UgewotCQlmdF9ydW5uZXJfc3RhdHVzID0gcnVubmluZzsKLQl9Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtcncuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ydy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmY0ZmVlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1ydy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSNpZm5kZWYgX0ZUQVBFX1JXX0gKLSNkZWZpbmUgX0ZUQVBFX1JXX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5My0xOTk2IEJhcyBMYWFyaG92ZW4sCi0gKiAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXJ3LmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODoyNSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgcmVhZCBhbmQgd3JpdGUKLSAqICAgICAgZnVuY3Rpb25zIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICoKLSAqIENsYXVzLUp1c3R1cyBIZWluZSAoMTk5Ni8wOS8yMCk6IEFkZCBkZWZpbml0aW9uIG9mIGZvcm1hdCBjb2RlIDYKLSAqIENsYXVzLUp1c3R1cyBIZWluZSAoMTk5Ni8xMC8wNCk6IENoYW5nZWQgR0VUL1BVVCBtYWNyb3MgdG8gY2FzdCB0byAoX191OCAqKQotICoKLSAqLwotCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW5pdC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJzbS5oIgotCi0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotCi0jZGVmaW5lIEdFVDIoYWRkcmVzcywgb2Zmc2V0KSBnZXRfdW5hbGlnbmVkKChfX3UxNiopKChfX3U4ICopYWRkcmVzcyArIG9mZnNldCkpCi0jZGVmaW5lIEdFVDQoYWRkcmVzcywgb2Zmc2V0KSBnZXRfdW5hbGlnbmVkKChfX3UzMiopKChfX3U4ICopYWRkcmVzcyArIG9mZnNldCkpCi0jZGVmaW5lIEdFVDgoYWRkcmVzcywgb2Zmc2V0KSBnZXRfdW5hbGlnbmVkKChfX3U2NCopKChfX3U4ICopYWRkcmVzcyArIG9mZnNldCkpCi0jZGVmaW5lIFBVVDIoYWRkcmVzcywgb2Zmc2V0ICwgdmFsdWUpIHB1dF91bmFsaWduZWQoKHZhbHVlKSwgKF9fdTE2KikoKF9fdTggKilhZGRyZXNzICsgb2Zmc2V0KSkKLSNkZWZpbmUgUFVUNChhZGRyZXNzLCBvZmZzZXQgLCB2YWx1ZSkgcHV0X3VuYWxpZ25lZCgodmFsdWUpLCAoX191MzIqKSgoX191OCAqKWFkZHJlc3MgKyBvZmZzZXQpKQotI2RlZmluZSBQVVQ4KGFkZHJlc3MsIG9mZnNldCAsIHZhbHVlKSBwdXRfdW5hbGlnbmVkKCh2YWx1ZSksIChfX3U2NCopKChfX3U4ICopYWRkcmVzcyArIG9mZnNldCkpCi0KLWVudW0gcnVubmVyX3N0YXR1c19lbnVtIHsKLQlpZGxlID0gMCwKLQlydW5uaW5nLAotCWRvX2Fib3J0LAotCWFib3J0aW5nLAotCWxvZ2ljYWxfZW90LAotCWVuZF9vZl90YXBlLAotfTsKLQotdHlwZWRlZiBlbnVtIGZ0X2J1ZmZlcl9xdWV1ZSB7Ci0JZnRfcXVldWVfaGVhZCA9IDAsCi0JZnRfcXVldWVfdGFpbCA9IDEKLX0gZnRfYnVmZmVyX3F1ZXVlX3Q7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgewotCWludCB0cmFjazsJCS8qIHRhcGUgaGVhZCBwb3NpdGlvbiAqLwotCXZvbGF0aWxlIGludCBzZWdtZW50OwkvKiBjdXJyZW50IHNlZ21lbnQgKi8KLQl2b2xhdGlsZSBpbnQgc2VjdG9yOwkvKiBzZWN0b3Igb2Zmc2V0IHdpdGhpbiBjdXJyZW50IHNlZ21lbnQgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYm90OwkvKiBsb2dpY2FsIGJlZ2luIG9mIHRyYWNrICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGVvdDsJLyogbG9naWNhbCBlbmQgb2YgdHJhY2sgKi8KLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQga25vd247CS8qIHZhbGlkYXRlcyBib3QsIHNlZ21lbnQsIHNlY3RvciAqLwotfSBsb2NhdGlvbl9yZWNvcmQ7Ci0KLS8qICAgICAgQ291bnQgbnIgb2YgMSdzIGluIHBhdHRlcm4uCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNvdW50X29uZXModW5zaWduZWQgbG9uZyBtYXNrKQotewotCWludCBiaXRzOwotCi0JZm9yIChiaXRzID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxKSB7Ci0JCWlmIChtYXNrICYgMSkgewotCQkJKytiaXRzOwotCQl9Ci0JfQotCXJldHVybiBiaXRzOwotfQotCi0jZGVmaW5lIEZUX01BWF9OUl9CVUZGRVJTIDE2IC8qIGFyYml0cmFyeSB2YWx1ZSAqLwotLyogICAgICBmdGFwZS1ydy5jIGRlZmluZWQgZ2xvYmFsIHZhcnMuCi0gKi8KLWV4dGVybiBidWZmZXJfc3RydWN0ICpmdF9idWZmZXJbRlRfTUFYX05SX0JVRkZFUlNdOwotZXh0ZXJuIGludCBmdF9ucl9idWZmZXJzOwotZXh0ZXJuIGxvY2F0aW9uX3JlY29yZCBmdF9sb2NhdGlvbjsKLWV4dGVybiB2b2xhdGlsZSBpbnQgZnRhcGVfdGFwZV9ydW5uaW5nOwotCi0vKiAgICAgIGZ0YXBlLXJ3LmMgZGVmaW5lZCBnbG9iYWwgZnVuY3Rpb25zLgotICovCi1leHRlcm4gaW50ICBmdGFwZV9zZXR1cF9uZXdfc2VnbWVudChidWZmZXJfc3RydWN0ICogYnVmZiwKLQkJCQkgICAgaW50IHNlZ21lbnRfaWQsCi0JCQkJICAgIGludCBvZmZzZXQpOwotZXh0ZXJuIGludCAgZnRhcGVfY2FsY19uZXh0X2NsdXN0ZXIoYnVmZmVyX3N0cnVjdCAqIGJ1ZmYpOwotZXh0ZXJuIGJ1ZmZlcl9zdHJ1Y3QgKmZ0YXBlX25leHRfYnVmZmVyIChmdF9idWZmZXJfcXVldWVfdCBwb3MpOwotZXh0ZXJuIGJ1ZmZlcl9zdHJ1Y3QgKmZ0YXBlX2dldF9idWZmZXIgIChmdF9idWZmZXJfcXVldWVfdCBwb3MpOwotZXh0ZXJuIGludCAgICAgICAgICAgIGZ0YXBlX2J1ZmZlcl9pZCAgIChmdF9idWZmZXJfcXVldWVfdCBwb3MpOwotZXh0ZXJuIHZvaWQgICAgICAgICAgIGZ0YXBlX3Jlc2V0X2J1ZmZlcih2b2lkKTsKLWV4dGVybiB2b2lkIGZ0YXBlX3RhcGVfcGFyYW1ldGVycyhfX3U4IGRyaXZlX2NvbmZpZ3VyYXRpb24pOwotZXh0ZXJuIGludCAgZnRhcGVfd2FpdF9zZWdtZW50KGJ1ZmZlcl9zdGF0ZV9lbnVtIHN0YXRlKTsKLWV4dGVybiBpbnQgIGZ0YXBlX2R1bWJfc3RvcCh2b2lkKTsKLWV4dGVybiBpbnQgIGZ0YXBlX3N0YXJ0X3RhcGUoaW50IHNlZ21lbnRfaWQsIGludCBvZmZzZXQpOwotZXh0ZXJuIGludCAgZnRhcGVfc3RvcF90YXBlKGludCAqcHN0YXR1cyk7Ci1leHRlcm4gaW50ICBmdGFwZV9oYW5kbGVfbG9naWNhbF9lb3Qodm9pZCk7Ci1leHRlcm4gYnVmZmVyX3N0YXRlX2VudW0gZnRhcGVfc2V0X3N0YXRlKGJ1ZmZlcl9zdGF0ZV9lbnVtIG5ld19zdGF0ZSk7Ci0jZW5kaWYJCQkJLyogX0ZUQVBFX1JXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS1zZXR1cC5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXNldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ODM0MGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXNldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS1zZXR1cC5jLHYgJAotICogJFJldmlzaW9uOiAxLjcgJAotICogJERhdGU6IDE5OTcvMTAvMTAgMDk6NTc6MDYgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb2RlIGZvciBwcm9jZXNzaW5nIHRoZSBrZXJuZWwgY29tbWFuZAotICogICAgICBsaW5lIG9wdGlvbnMgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlcgotICogICAgICAiZnRhcGUiIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2ZkYy1pby5oIgotCi1zdGF0aWMgc3RydWN0IHBhcmFtX3RhYmxlIHsKLQljb25zdCBjaGFyICpuYW1lOwotCWludCAqdmFyOwotCWludCBkZWZfcGFyYW07Ci0JaW50IG1pbjsKLQlpbnQgbWF4OwotfSBjb25maWdfcGFyYW1zW10gX19pbml0ZGF0YSA9IHsKLSNpZm5kZWYgQ09ORklHX0ZUX05PX1RSQUNFX0FUX0FMTAotCXsgInRyYWNpbmciLCAgICZmdGFwZV90cmFjaW5nLCAgICAgMywgICAgICAgICAgICAgIGZ0X3RfYnVnLCBmdF90X2FueX0sCi0jZW5kaWYKLQl7ICJpb3BvcnQiLCAgICAmZnRfZmRjX2Jhc2UsICAgICAgIENPTkZJR19GVF9GRENfQkFTRSwgICAgIDB4MCwgMHhmZmZ9LAotCXsgImlycSIsICAgICAgICZmdF9mZGNfaXJxLCAgICAgICAgQ09ORklHX0ZUX0ZEQ19JUlEsICAgICAgICAyLCAgICAxNX0sCi0JeyAiZG1hIiwgICAgICAgJmZ0X2ZkY19kbWEsICAgICAgICBDT05GSUdfRlRfRkRDX0RNQSwgICAgICAgIDAsICAgICAzfSwKLQl7ICJ0aHJlc2hvbGQiLCAmZnRfZmRjX3RocmVzaG9sZCwgIENPTkZJR19GVF9GRENfVEhSLCAgICAgICAgIDEsICAgIDE2fSwKLQl7ICJkYXRhcmF0ZSIsICAmZnRfZmRjX3JhdGVfbGltaXQsIENPTkZJR19GVF9GRENfTUFYX1JBVEUsIDUwMCwgIDIwMDB9LAotCXsgImZjMTAiLCAgICAgICZmdF9wcm9iZV9mYzEwLCAgICAgQ09ORklHX0ZUX1BST0JFX0ZDMTAsICAgICAwLCAgICAgMX0sCi0JeyAibWFjaDIiLCAgICAgJmZ0X21hY2gyLCAgICAgICAgICBDT05GSUdfRlRfTUFDSDIsICAgICAgICAgIDAsICAgICAxfQotfTsKLQotc3RhdGljIGludCBfX2luaXQgZnRhcGVfc2V0dXAoY2hhciAqc3RyKQotewotCWludCBpOwotCWludCBwYXJhbTsKLQlpbnQgaW50c1syXTsKLQotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0Jc3RyID0gZ2V0X29wdGlvbnMoc3RyLCBBUlJBWV9TSVpFKGludHMpLCBpbnRzKTsKLQlpZiAoc3RyKSB7Ci0JCWZvciAoaT0wOyBpIDwgTlJfSVRFTVMoY29uZmlnX3BhcmFtcyk7IGkrKykgewotCQkJaWYgKHN0cmNtcChzdHIsY29uZmlnX3BhcmFtc1tpXS5uYW1lKSA9PSAwKXsKLQkJCQlpZiAoaW50c1swXSkgewotCQkJCQlwYXJhbSA9IGludHNbMV07Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcGFyYW0gPSBjb25maWdfcGFyYW1zW2ldLmRlZl9wYXJhbTsKLQkJCQl9Ci0JCQkJaWYgKHBhcmFtIDwgY29uZmlnX3BhcmFtc1tpXS5taW4gfHwKLQkJCQkgICAgcGFyYW0gPiBjb25maWdfcGFyYW1zW2ldLm1heCkgewotCQkJCQlUUkFDRShmdF90X2VyciwKLQkJCQkJInBhcmFtZXRlciAlcyBvdXQgb2YgcmFuZ2UgJWQgLi4uICVkIiwKLQkJCQkJICAgICAgY29uZmlnX3BhcmFtc1tpXS5uYW1lLAotCQkJCQkgICAgICBjb25maWdfcGFyYW1zW2ldLm1pbiwKLQkJCQkJICAgICAgY29uZmlnX3BhcmFtc1tpXS5tYXgpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQkJaWYoY29uZmlnX3BhcmFtc1tpXS52YXIpIHsKLQkJCQkJVFJBQ0UoZnRfdF9pbmZvLCAiJXM9JWQiLCBzdHIsIHBhcmFtKTsKLQkJCQkJKmNvbmZpZ19wYXJhbXNbaV0udmFyID0gcGFyYW07Ci0JCQkJfQotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotCWlmIChzdHIpIHsKLQkJVFJBQ0UoZnRfdF9lcnIsICJ1bmtub3duIGZ0YXBlIG9wdGlvbiBbJXNdIiwgc3RyKTsKLQkJCi0JCVRSQUNFKGZ0X3RfZXJyLCAiYWxsb3dlZCBvcHRpb25zIGFyZToiKTsKLQkJZm9yIChpPTA7IGkgPCBOUl9JVEVNUyhjb25maWdfcGFyYW1zKTsgaSsrKSB7Ci0JCQlUUkFDRShmdF90X2VyciwgIiAlcyIsY29uZmlnX3BhcmFtc1tpXS5uYW1lKTsKLQkJfQotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3RfZXJyLCAiYm90Y2hlZCBmdGFwZSBvcHRpb24iKTsKLQl9Ci0gb3V0OgotCVRSQUNFX0VYSVQgMTsKLX0KLQotX19zZXR1cCgiZnRhcGU9IiwgZnRhcGVfc2V0dXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGM2NTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuYyx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE4OjI3ICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVhZGluZyBjb2RlCi0gKiAgICAgIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCIKLQotLyogICAgICBHbG9iYWwgdmFycy4KLSAqLwotLyogICAgICB0cmFjaW5nCi0gKiAgICAgIHNldCBpdCB0bzogICAgIHRvIGxvZyA6Ci0gKiAgICAgICAwICAgICAgICAgICAgICBidWdzCi0gKiAgICAgICAxICAgICAgICAgICAgICArIGVycm9ycwotICogICAgICAgMiAgICAgICAgICAgICAgKyB3YXJuaW5ncwotICogICAgICAgMyAgICAgICAgICAgICAgKyBpbmZvcm1hdGlvbgotICogICAgICAgNCAgICAgICAgICAgICAgKyBtb3JlIGluZm9ybWF0aW9uCi0gKiAgICAgICA1ICAgICAgICAgICAgICArIHByb2dyYW0gZmxvdwotICogICAgICAgNiAgICAgICAgICAgICAgKyBmZGMvZG1hIGluZm8KLSAqICAgICAgIDcgICAgICAgICAgICAgICsgZGF0YSBmbG93Ci0gKiAgICAgICA4ICAgICAgICAgICAgICArIGV2ZXJ5dGhpbmcgZWxzZQotICovCi1mdF90cmFjZV90IGZ0YXBlX3RyYWNpbmcgPSBmdF90X2luZm87IC8qIERlZmF1bHQgbGV2ZWw6IGluZm9ybWF0aW9uIGFuZCB1cCAqLwotaW50ICBmdGFwZV9mdW5jdGlvbl9uZXN0X2xldmVsOwotCi0vKiAgICAgIExvY2FsIHZhcnMuCi0gKi8KLXN0YXRpYyBfX3U4IHRyYWNlX2lkOwotc3RhdGljIGNoYXIgc3BhY2luZ1tdID0gIiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotCi12b2lkIGZ0YXBlX3RyYWNlX2NhbGwoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQljaGFyICppbmRlbnQ7Ci0KLQkvKiAgICBTaW5jZSBwcmludGsgc2VlbXMgbm90IHRvIHdvcmsgd2l0aCAiJSpzIiBmb3JtYXQKLQkgKiAgICB3ZSdsbCB1c2UgdGhpcyB3b3JrLWFyb3VuZC4KLQkgKi8KLQlpZiAoZnRhcGVfZnVuY3Rpb25fbmVzdF9sZXZlbCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZnVuY3Rpb24gbmVzdCBsZXZlbCAoJWQpIDwgMFxuIiwKLQkJICAgICAgIGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwpOwotCQlmdGFwZV9mdW5jdGlvbl9uZXN0X2xldmVsID0gMDsKLQl9Ci0JaWYgKGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwgPCBzaXplb2Yoc3BhY2luZykpIHsKLQkJaW5kZW50ID0gKHNwYWNpbmcgKwotCQkJICBzaXplb2Yoc3BhY2luZykgLSAxIC0KLQkJCSAgZnRhcGVfZnVuY3Rpb25fbmVzdF9sZXZlbCk7Ci0JfSBlbHNlIHsKLQkJaW5kZW50ID0gc3BhY2luZzsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiWyUwM2RdJXMrJXMgKCVzKVxuIiwKLQkgICAgICAgKGludCkgdHJhY2VfaWQrKywgaW5kZW50LCBmaWxlLCBuYW1lKTsKLX0KLQotdm9pZCBmdGFwZV90cmFjZV9leGl0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JY2hhciAqaW5kZW50OwotCi0JLyogICAgU2luY2UgcHJpbnRrIHNlZW1zIG5vdCB0byB3b3JrIHdpdGggIiUqcyIgZm9ybWF0Ci0JICogICAgd2UnbGwgdXNlIHRoaXMgd29yay1hcm91bmQuCi0JICovCi0JaWYgKGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImZ1bmN0aW9uIG5lc3QgbGV2ZWwgKCVkKSA8IDBcbiIsIGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwpOwotCQlmdGFwZV9mdW5jdGlvbl9uZXN0X2xldmVsID0gMDsKLQl9Ci0JaWYgKGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwgPCBzaXplb2Yoc3BhY2luZykpIHsKLQkJaW5kZW50ID0gKHNwYWNpbmcgKwotCQkJICBzaXplb2Yoc3BhY2luZykgLSAxIC0KLQkJCSAgZnRhcGVfZnVuY3Rpb25fbmVzdF9sZXZlbCk7Ci0JfSBlbHNlIHsKLQkJaW5kZW50ID0gc3BhY2luZzsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiWyUwM2RdJXMtJXMgKCVzKVxuIiwKLQkgICAgICAgKGludCkgdHJhY2VfaWQrKywgaW5kZW50LCBmaWxlLCBuYW1lKTsKLX0KLQotdm9pZCBmdGFwZV90cmFjZV9sb2coY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqZnVuY3Rpb24pCi17Ci0JY2hhciAqaW5kZW50OwotCi0JLyogICAgU2luY2UgcHJpbnRrIHNlZW1zIG5vdCB0byB3b3JrIHdpdGggIiUqcyIgZm9ybWF0Ci0JICogICAgd2UnbGwgdXNlIHRoaXMgd29yay1hcm91bmQuCi0JICovCi0JaWYgKGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImZ1bmN0aW9uIG5lc3QgbGV2ZWwgKCVkKSA8IDBcbiIsIGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwpOwotCQlmdGFwZV9mdW5jdGlvbl9uZXN0X2xldmVsID0gMDsKLQl9Ci0JaWYgKGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwgPCBzaXplb2Yoc3BhY2luZykpIHsKLQkJaW5kZW50ID0gKHNwYWNpbmcgKyAKLQkJCSAgc2l6ZW9mKHNwYWNpbmcpIC0gMSAtIAotCQkJICBmdGFwZV9mdW5jdGlvbl9uZXN0X2xldmVsKTsKLQl9IGVsc2UgewotCQlpbmRlbnQgPSBzcGFjaW5nOwotCX0KLQlwcmludGsoS0VSTl9JTkZPICJbJTAzZF0lcyVzICglcykgLSAiLCAKLQkgICAgICAgKGludCkgdHJhY2VfaWQrKywgaW5kZW50LCBmaWxlLCBmdW5jdGlvbik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk1MDgxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtdHJhY2luZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLSNpZm5kZWYgX0ZUQVBFX1RSQUNJTkdfSAotI2RlZmluZSBfRlRBUEVfVFJBQ0lOR19ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgIChDKSAxOTk2LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxODoyOCAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW5pdGlvbnMgdGhhdCBlYXNlcyB0aGUgZGVidWdnaW5nIG9mIHRoZQotICogICAgICBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciAiZnRhcGUiIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLS8qCi0gKiAgQmUgdmVyeSBjYXJlZnVsIHdpdGggVFJBQ0VfRVhJVCBhbmQgVFJBQ0VfQUJPUlQuCi0gKgotICogIGlmIChzb21ldGhpbmcpIFRSQUNFX0VYSVQgZXJyb3I7Ci0gKgotICogIHdpbGwgTk9UIHdvcmsuIFVzZQotICoKLSAqICBpZiAoc29tZXRoaW5nKSB7Ci0gKiAgICBUUkFDRV9FWElUIGVycm9yOwotICogIH0KLSAqCi0gKiAgaW5zdGVhZC4gTWF5YmUgYSBiaXQgZGFuZ2Vyb3VzLCBidXQgc2F2ZSBsb3RzIG9mIGxpbmVzIG9mIGNvZGUuCi0gKi8KLQotI2RlZmluZSBMTF9YICIlZC8lZCBLQiIKLSNkZWZpbmUgTEwoeCkgKHVuc2lnbmVkIGludCkoKF9fdTY0KSh4KT4+MTApLCAodW5zaWduZWQgaW50KSgoeCkmMTAyMykKLQotdHlwZWRlZiBlbnVtIHsKLQlmdF90X25pbCA9IC0xLAotCWZ0X3RfYnVnLAotCWZ0X3RfZXJyLAotCWZ0X3Rfd2FybiwKLQlmdF90X2luZm8sCi0JZnRfdF9ub2lzZSwKLQlmdF90X2Zsb3csCi0JZnRfdF9mZGNfZG1hLAotCWZ0X3RfZGF0YV9mbG93LAotCWZ0X3RfYW55Ci19IGZ0X3RyYWNlX3Q7Ci0KLSNpZmRlZiAgQ09ORklHX0ZUX05PX1RSQUNFX0FUX0FMTAotLyogIHRoZSBjb21waWxlciB3aWxsIG9wdGltaXplIGF3YXkgbW9zdCBUUkFDRSgpIG1hY3JvcwotICovCi0jZGVmaW5lIEZUX1RSQUNFX1RPUF9MRVZFTAlmdF90X2J1ZwotI2RlZmluZSBUUkFDRV9GVU4obGV2ZWwpCWRvIHt9IHdoaWxlKDApCi0jZGVmaW5lIFRSQUNFX0VYSVQJCXJldHVybgotI2RlZmluZSBUUkFDRShsLCBtLCBpLi4uKQkJCQkJCVwKLXsJCQkJCQkJCQlcCi0JaWYgKChmdF90cmFjZV90KShsKSA9PSBGVF9UUkFDRV9UT1BfTEVWRUwpIHsJCQlcCi0JCXByaW50ayhLRVJOX0lORk8iZnRhcGUlcyglcyk6XG4iCSAgICAgICAgICAgICAgICBcCi0JCSAgICAgICBLRVJOX0lORk8gbSIuXG4iICxfX0ZJTEVfXywgX19GVU5DVElPTl9fICwgIyNpKTsJXAotCX0JCQkJCQkJCVwKLX0KLSNkZWZpbmUgU0VUX1RSQUNFX0xFVkVMKGwpICAgICAgaWYgKChsKSA9PSAobCkpIGRvIHt9IHdoaWxlKDApCi0jZGVmaW5lIFRSQUNFX0xFVkVMCQlGVF9UUkFDRV9UT1BfTEVWRUwKLQotI2Vsc2UKLQotI2lmZGVmIENPTkZJR19GVF9OT19UUkFDRQotLyogIHRoZSBjb21waWxlciB3aWxsIG9wdGltaXplIGF3YXkgbWFueSBUUkFDRSgpIG1hY3JvcwotICogIHRoZSBmdGFwZV9zaW1wbGVfdHJhY2VfY2FsbCgpIGZ1bmN0aW9uIHNpbXBseSBpbmNyZW1lbnRzIAotICogIHRoZSBmdW5jdGlvbiBuZXN0IGxldmVsLgotICovIAotI2RlZmluZSBGVF9UUkFDRV9UT1BfTEVWRUwJZnRfdF93YXJuCi0jZGVmaW5lIFRSQUNFX0ZVTihsZXZlbCkJZnRhcGVfZnVuY3Rpb25fbmVzdF9sZXZlbCsrCi0jZGVmaW5lIFRSQUNFX0VYSVQJCWZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwtLTsgcmV0dXJuCi0KLSNlbHNlCi0jaWZkZWYgQ09ORklHX0ZUX0ZVTExfREVCVUcKLSNkZWZpbmUgRlRfVFJBQ0VfVE9QX0xFVkVMIGZ0X3RfYW55Ci0jZWxzZQotI2RlZmluZSBGVF9UUkFDRV9UT1BfTEVWRUwgZnRfdF9mbG93Ci0jZW5kaWYKLSNkZWZpbmUgVFJBQ0VfRlVOKGxldmVsKQkJCQkJXAotCWNvbnN0IGZ0X3RyYWNlX3QgX3RyYWNpbmcgPSBsZXZlbDsJCQlcCi0JaWYgKGZ0YXBlX3RyYWNpbmcgPj0gKGZ0X3RyYWNlX3QpKGxldmVsKSAmJgkJXAotCSAgICAoZnRfdHJhY2VfdCkobGV2ZWwpIDw9IEZUX1RSQUNFX1RPUF9MRVZFTCkJCVwKLQkJZnRhcGVfdHJhY2VfY2FsbChfX0ZJTEVfXywgX19GVU5DVElPTl9fKTsJXAotCWZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWwgKys7Ci0KLSNkZWZpbmUgVFJBQ0VfRVhJVAkJCQkJCVwKLQktLWZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWw7CQkJCVwKLQlpZiAoZnRhcGVfdHJhY2luZyA+PSAoZnRfdHJhY2VfdCkoX3RyYWNpbmcpICYmCQlcCi0JICAgIChmdF90cmFjZV90KShfdHJhY2luZykgPD0gRlRfVFJBQ0VfVE9QX0xFVkVMKQlcCi0JCWZ0YXBlX3RyYWNlX2V4aXQoX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CVwKLQlyZXR1cm4KLQotI2VuZGlmCi0KLSNkZWZpbmUgVFJBQ0UobCwgbSwgaS4uLikJCQkJCVwKLXsJCQkJCQkJCVwKLQlpZiAoZnRhcGVfdHJhY2luZyA+PSAoZnRfdHJhY2VfdCkobCkgJiYJCQlcCi0JICAgIChmdF90cmFjZV90KShsKSA8PSBGVF9UUkFDRV9UT1BfTEVWRUwpIHsJCVwKLQkJZnRhcGVfdHJhY2VfbG9nKF9fRklMRV9fLCBfX0ZVTkNUSU9OX18pOwlcCi0JCXByaW50ayhtIi5cbiIgLCMjaSk7CQkJCVwKLQl9CQkJCQkJCVwKLX0KLQotI2RlZmluZSBTRVRfVFJBQ0VfTEVWRUwobCkgCQkJCVwKLXsJCQkJCQkJXAotCWlmICgoZnRfdHJhY2VfdCkobCkgPD0gRlRfVFJBQ0VfVE9QX0xFVkVMKSB7CVwKLQkJZnRhcGVfdHJhY2luZyA9IChmdF90cmFjZV90KShsKTsJXAotCX0gZWxzZSB7CQkJCQlcCi0JCWZ0YXBlX3RyYWNpbmcgPSBGVF9UUkFDRV9UT1BfTEVWRUw7CVwKLQl9CQkJCQkJXAotfQotI2RlZmluZSBUUkFDRV9MRVZFTCAgICAJCQkJCQkJICAgICBcCi0oKGZ0YXBlX3RyYWNpbmcgPD0gRlRfVFJBQ0VfVE9QX0xFVkVMKSA/IGZ0YXBlX3RyYWNpbmcgOiBGVF9UUkFDRV9UT1BfTEVWRUwpCi0KLQotLyogICAgICBHbG9iYWwgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRyYWNpbmcuYwotICovCi1leHRlcm4gZnRfdHJhY2VfdCBmdGFwZV90cmFjaW5nOyAgLyogc2V0cyBkZWZhdWx0IGxldmVsICovCi1leHRlcm4gaW50IGZ0YXBlX2Z1bmN0aW9uX25lc3RfbGV2ZWw7Ci0KLS8qICAgICAgR2xvYmFsIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiB0cmFjaW5nLmMKLSAqLwotZXh0ZXJuIHZvaWQgZnRhcGVfdHJhY2VfY2FsbChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIGZ0YXBlX3RyYWNlX2V4aXQoY29uc3QgY2hhciAqZmlsZSwgY29uc3QgY2hhciAqbmFtZSk7Ci1leHRlcm4gdm9pZCBmdGFwZV90cmFjZV9sb2cgKGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKm5hbWUpOwotCi0jZW5kaWYgLyogIWRlZmluZWQoQ09ORklHX0ZUX05PX1RSQUNFX0FUX0FMTCkgKi8KLQotLyoKLSAqICAgQWJvcnQgd2l0aCBhIG1lc3NhZ2UuCi0gKi8KLSNkZWZpbmUgVFJBQ0VfQUJPUlQocmVzLCBpLi4uKQkJCVwKLXsJCQkJCQlcCi0gCVRSQUNFKGkpOwkJCQlcCi0JVFJBQ0VfRVhJVCByZXM7CQkJCVwKLX0KLQotLyogICBUaGUgZm9sbG93aW5nIHRyYW5zZm9ybXMgdGhlIGNvbW1vbiAiaWYocmVzdWx0IDwgMCkgLi4uICIgaW50byBhCi0gKiAgIG9uZS1saW5lci4KLSAqLwotI2RlZmluZSBfVFJBQ0VfQ0FUQ0gobGV2ZWwsIGZ1biwgYWN0aW9uKQkJCQlcCi17CQkJCQkJCQkJXAotCWludCBfcmVzID0gKGZ1bik7CQkJCQkJXAotCWlmIChfcmVzIDwgMCkgewkJCQkJCQlcCi0JCWRvIHsgYWN0aW9uIC8qICovIDsgfSB3aGlsZSgwKTsJCQkJXAotCQlUUkFDRV9BQk9SVChfcmVzLCBsZXZlbCwgIiVzIGZhaWxlZDogJWQiLCAjZnVuLAlfcmVzKTsJXAotCX0JCQkJCQkJCVwKLX0KLQotI2RlZmluZSBUUkFDRV9DQVRDSChmdW4sIGZhaWwpIF9UUkFDRV9DQVRDSChmdF90X2VyciwgZnVuLCBmYWlsKQotCi0vKiAgQWJvcnQgdGhlIGN1cnJlbnQgZnVuY3Rpb24gd2hlbiBzaWduYWxsZWQuIFRoaXMgZG9lc24ndCBiZWxvbmcgaGVyZSwKLSAqICBidXQgcmF0aGVyIGludG8gZnRhcGUtcncuaCAobWF5YmUpCi0gKi8KLSNkZWZpbmUgRlRfU0lHTkFMX0VYSVQoc2lnX21hc2spCQkJCQlcCi0JaWYgKHNpZ3Rlc3RzZXRtYXNrKCZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCwgc2lnX21hc2spKSB7CVwKLQkJVFJBQ0VfQUJPUlQoLUVJTlRSLAkJCQkJXAotCQkJICAgIGZ0X3Rfd2FybiwJCQkJCVwKLQkJCSAgICAiaW50ZXJydXB0ZWQgYnkgbm9uLWJsb2NrYWJsZSBzaWduYWwiKTsJXAotCX0KLQotI2VuZGlmIC8qIF9GVEFQRV9UUkFDSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZS13cml0ZS5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXdyaXRlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NjAxZWMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXdyaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzYgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTkzLTE5OTUgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAgICAgIChDKSAxOTk2LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS13cml0ZS5jLHYgJAotICogJFJldmlzaW9uOiAxLjMuNC4xICQKLSAqICREYXRlOiAxOTk3LzExLzE0IDE4OjA3OjA0ICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgd3JpdGluZyBjb2RlCi0gKiAgICAgIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9mdGFwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3FpYzExNy5oPgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS13cml0ZS5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1pby5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtZWNjLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtYnNtLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZmRjLWlzci5oIgotCi0vKiAgICAgIEdsb2JhbCB2YXJzLgotICovCi0KLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotc3RhdGljIGludCBsYXN0X3dyaXRlX2ZhaWxlZDsKLQotdm9pZCBmdGFwZV96YXBfd3JpdGVfYnVmZmVycyh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGZ0X25yX2J1ZmZlcnM7ICsraSkgewotCQlmdF9idWZmZXJbaV0tPnN0YXR1cyA9IGRvbmU7Ci0JfQotCWZ0YXBlX3Jlc2V0X2J1ZmZlcigpOwotfQotCi1zdGF0aWMgaW50IGNvcHlfYW5kX2dlbl9lY2Modm9pZCAqZGVzdGluYXRpb24sIAotCQkJICAgIGNvbnN0IHZvaWQgKnNvdXJjZSwKLQkJCSAgICBjb25zdCBTZWN0b3JNYXAgYmFkX3NlY3Rvcl9tYXApCi17Ci0JaW50IHJlc3VsdDsKLQlzdHJ1Y3QgbWVtb3J5X3NlZ21lbnQgbXNlZzsKLQlpbnQgYmFkcyA9IGNvdW50X29uZXMoYmFkX3NlY3Rvcl9tYXApOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoYmFkcyA+IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImJhZCBzZWN0b3JzIGluIG1hcDogJWQiLCBiYWRzKTsKLQl9Ci0JaWYgKGJhZHMgKyAzID49IEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImVtcHR5IHNlZ21lbnQiKTsKLQkJbXNlZy5ibG9ja3MgPSAwOyAvKiBza2lwIGVudGlyZSBzZWdtZW50ICovCi0JCXJlc3VsdCA9IDA7ICAgICAgLyogbm90aGluZyB3cml0dGVuICovCi0JfSBlbHNlIHsKLQkJbXNlZy5ibG9ja3MgPSBGVF9TRUNUT1JTX1BFUl9TRUdNRU5UIC0gYmFkczsKLQkJbXNlZy5kYXRhID0gZGVzdGluYXRpb247Ci0JCW1lbWNweShtc2VnLmRhdGEsIHNvdXJjZSwgKG1zZWcuYmxvY2tzIC0gMykgKiBGVF9TRUNUT1JfU0laRSk7Ci0JCXJlc3VsdCA9IGZ0YXBlX2VjY19zZXRfc2VnbWVudF9wYXJpdHkoJm1zZWcpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJVFJBQ0UoZnRfdF9lcnIsICJlY2Nfc2V0X3NlZ21lbnRfcGFyaXR5IGZhaWxlZCIpOwotCQl9IGVsc2UgewotCQkJcmVzdWx0ID0gKG1zZWcuYmxvY2tzIC0gMykgKiBGVF9TRUNUT1JfU0laRTsKLQkJfQotCX0KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotCi1pbnQgZnRhcGVfc3RhcnRfd3JpdGluZyhjb25zdCBmdF93cml0ZV9tb2RlX3QgbW9kZSkKLXsKLQlidWZmZXJfc3RydWN0ICpoZWFkID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKTsKLQlpbnQgc2VnbWVudF9pZCA9IGhlYWQtPnNlZ21lbnRfaWQ7Ci0JaW50IHJlc3VsdDsKLQlidWZmZXJfc3RhdGVfZW51bSB3YW50ZWRfc3RhdGUgPSAobW9kZSA9PSBGVF9XUl9ERUxFVEUKLQkJCQkJICA/IGRlbGV0aW5nCi0JCQkJCSAgOiB3cml0aW5nKTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICgoZnRfZHJpdmVyX3N0YXRlICE9IHdhbnRlZF9zdGF0ZSkgfHwgaGVhZC0+c3RhdHVzICE9IHdhaXRpbmcpIHsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLQlmdGFwZV9zZXR1cF9uZXdfc2VnbWVudChoZWFkLCBzZWdtZW50X2lkLCAxKTsKLQlpZiAobW9kZSA9PSBGVF9XUl9TSU5HTEUpIHsKLQkJLyogc3RvcCB0YXBlIGluc3RlYWQgb2YgcGF1c2UgKi8KLQkJaGVhZC0+bmV4dF9zZWdtZW50ID0gMDsKLQl9Ci0JZnRhcGVfY2FsY19uZXh0X2NsdXN0ZXIoaGVhZCk7IC8qIHByZXBhcmUgKi8KLQloZWFkLT5zdGF0dXMgPSBmdF9kcml2ZXJfc3RhdGU7IC8qIGVpdGhlciB3cml0aW5nIG9yIGRlbGV0aW5nICovCi0JaWYgKGZ0X3J1bm5lcl9zdGF0dXMgPT0gaWRsZSkgewotCQlUUkFDRShmdF90X25vaXNlLAotCQkgICAgICAic3RhcnRpbmcgcnVubmVyIGZvciBzZWdtZW50ICVkIiwgc2VnbWVudF9pZCk7Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX3N0YXJ0X3RhcGUoc2VnbWVudF9pZCxoZWFkLT5zZWN0b3Jfb2Zmc2V0KSwpOwotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJydW5uZXIgbm90IGlkbGUsIG5vdCBzdGFydGluZyB0YXBlIik7Ci0JfQotCS8qIGdvICovCi0JcmVzdWx0ID0gZmRjX3NldHVwX3JlYWRfd3JpdGUoaGVhZCwgKG1vZGUgPT0gRlRfV1JfREVMRVRFCi0JCQkJCSAgICAgPyBGRENfV1JJVEVfREVMRVRFRCA6IEZEQ19XUklURSkpOwotCWZ0YXBlX3NldF9zdGF0ZSh3YW50ZWRfc3RhdGUpOyAvKiBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSAqLwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0vKiAgV2FpdCB1bnRpbCBhbGwgZGF0YSBpcyBhY3R1YWxseSB3cml0dGVuIHRvIHRhcGUuCi0gKiAgCi0gKiAgVGhlcmUgaXMgYSBwcm9ibGVtOiB3aGVuIHRoZSB0YXBlIHJ1bnMgaW50byBsb2dpY2FsIEVPVCwgdGhlbiB0aGlzCi0gKiAgZmFpbGVzLiBXZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHJ1bm5lciBpbiB0aGlzIGNhc2UuCi0gKi8KLWludCBmdGFwZV9sb29wX3VudGlsX3dyaXRlc19kb25lKHZvaWQpCi17Ci0JYnVmZmVyX3N0cnVjdCAqaGVhZDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCXdoaWxlICgoZnRfZHJpdmVyX3N0YXRlID09IHdyaXRpbmcgfHwgZnRfZHJpdmVyX3N0YXRlID09IGRlbGV0aW5nKSAmJiAKLQkgICAgICAgZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV9oZWFkKS0+c3RhdHVzICE9IGRvbmUpIHsKLQkJLyogc2V0IHRoZSBydW5uZXIgc3RhdHVzIHRvIGlkbGUgaWYgYXQgbEVPVCAqLwotCQlUUkFDRV9DQVRDSChmdGFwZV9oYW5kbGVfbG9naWNhbF9lb3QoKSwJbGFzdF93cml0ZV9mYWlsZWQgPSAxKTsKLQkJLyogcmVzdGFydCB0aGUgdGFwZSBpZiBuZWNlc3NhcnkgKi8KLQkJaWYgKGZ0X3J1bm5lcl9zdGF0dXMgPT0gaWRsZSkgewotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgInJ1bm5lciBpcyBpZGxlLCByZXN0YXJ0aW5nIik7Ci0JCQlpZiAoZnRfZHJpdmVyX3N0YXRlID09IGRlbGV0aW5nKSB7Ci0JCQkJVFJBQ0VfQ0FUQ0goZnRhcGVfc3RhcnRfd3JpdGluZyhGVF9XUl9ERUxFVEUpLAotCQkJCQkgICAgbGFzdF93cml0ZV9mYWlsZWQgPSAxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJVFJBQ0VfQ0FUQ0goZnRhcGVfc3RhcnRfd3JpdGluZyhGVF9XUl9NVUxUSSksCi0JCQkJCSAgICBsYXN0X3dyaXRlX2ZhaWxlZCA9IDEpOwotCQkJfQotCQl9Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJ0YWlsOiAlZCwgaGVhZDogJWQiLCAKLQkJICAgICAgZnRhcGVfYnVmZmVyX2lkKGZ0X3F1ZXVlX3RhaWwpLAotCQkgICAgICBmdGFwZV9idWZmZXJfaWQoZnRfcXVldWVfaGVhZCkpOwotCQlUUkFDRV9DQVRDSChmZGNfaW50ZXJydXB0X3dhaXQoNSAqIEZUX1NFQ09ORCksCi0JCQkgICAgbGFzdF93cml0ZV9mYWlsZWQgPSAxKTsKLQkJaGVhZCA9IGZ0YXBlX2dldF9idWZmZXIoZnRfcXVldWVfaGVhZCk7Ci0JCWlmIChoZWFkLT5zdGF0dXMgPT0gZXJyb3IpIHsKLQkJCS8qIEFsbG93IGVzY2FwZSBmcm9tIGxvb3Agd2hlbiBzaWduYWxlZCAhCi0JCQkgKi8KLQkJCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQkJCWlmIChoZWFkLT5oYXJkX2Vycm9yX21hcCAhPSAwKSB7Ci0JCQkJLyogIEltcGxlbWVudCBoYXJkIHdyaXRlIGVycm9yIHJlY292ZXJ5IGhlcmUKLQkJCQkgKi8KLQkJCX0KLQkJCS8qIHJldHJ5IHRoaXMgb25lICovCi0JCQloZWFkLT5zdGF0dXMgPSB3YWl0aW5nOwotCQkJaWYgKGZ0X3J1bm5lcl9zdGF0dXMgPT0gYWJvcnRpbmcpIHsKLQkJCQlmdGFwZV9kdW1iX3N0b3AoKTsKLQkJCX0KLQkJCWlmIChmdF9ydW5uZXJfc3RhdHVzICE9IGlkbGUpIHsKLQkJCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwKLQkJCQkJICAgICJ1bmV4cGVjdGVkIHN0YXRlOiAiCi0JCQkJCSAgICAiZnRfcnVubmVyX3N0YXR1cyAhPSBpZGxlIik7Ci0JCQl9Ci0JCQlmdGFwZV9zdGFydF93cml0aW5nKGZ0X2RyaXZlcl9zdGF0ZSA9PSBkZWxldGluZwotCQkJCQkgICAgPyBGVF9XUl9NVUxUSSA6IEZUX1dSX0RFTEVURSk7Ci0JCX0KLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImxvb3BpbmcgdW50aWwgd3JpdGVzIGRvbmUiKTsKLQl9Ci0JZnRhcGVfc2V0X3N0YXRlKGlkbGUpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogICAgICBXcml0ZSBnaXZlbiBzZWdtZW50IGZyb20gYnVmZmVyIGF0IGFkZHJlc3MgdG8gdGFwZS4KLSAqLwotc3RhdGljIGludCB3cml0ZV9zZWdtZW50KGNvbnN0IGludCBzZWdtZW50X2lkLAotCQkJIGNvbnN0IHZvaWQgKmFkZHJlc3MsIAotCQkJIGNvbnN0IGZ0X3dyaXRlX21vZGVfdCB3cml0ZV9tb2RlKQotewotCWludCBieXRlc193cml0dGVuID0gMDsKLQlidWZmZXJfc3RydWN0ICp0YWlsOwotCWJ1ZmZlcl9zdGF0ZV9lbnVtIHdhbnRlZF9zdGF0ZSA9ICh3cml0ZV9tb2RlID09IEZUX1dSX0RFTEVURQotCQkJCQkgID8gZGVsZXRpbmcgOiB3cml0aW5nKTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJzZWdtZW50X2lkID0gJWQiLCBzZWdtZW50X2lkKTsKLQlpZiAoZnRfZHJpdmVyX3N0YXRlICE9IHdhbnRlZF9zdGF0ZSkgewotCQlpZiAoZnRfZHJpdmVyX3N0YXRlID09IGRlbGV0aW5nIHx8Ci0JCSAgICB3YW50ZWRfc3RhdGUgPT0gZGVsZXRpbmcpIHsKLQkJCVRSQUNFX0NBVENIKGZ0YXBlX2xvb3BfdW50aWxfd3JpdGVzX2RvbmUoKSwpOwotCQl9Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJjYWxsaW5nIGZ0YXBlX2Fib3J0X29wZXJhdGlvbiIpOwotCQlUUkFDRV9DQVRDSChmdGFwZV9hYm9ydF9vcGVyYXRpb24oKSwpOwotCQlmdGFwZV96YXBfd3JpdGVfYnVmZmVycygpOwotCQlmdGFwZV9zZXRfc3RhdGUod2FudGVkX3N0YXRlKTsKLQl9Ci0JLyogICAgaWYgYWxsIGJ1ZmZlcnMgZnVsbCB3ZSdsbCBoYXZlIHRvIHdhaXQuLi4KLQkgKi8KLQlmdGFwZV93YWl0X3NlZ21lbnQod2FudGVkX3N0YXRlKTsKLQl0YWlsID0gZnRhcGVfZ2V0X2J1ZmZlcihmdF9xdWV1ZV90YWlsKTsKLQlzd2l0Y2godGFpbC0+c3RhdHVzKSB7Ci0JY2FzZSBkb25lOgotCQlmdF9oaXN0b3J5LmRlZmVjdHMgKz0gY291bnRfb25lcyh0YWlsLT5oYXJkX2Vycm9yX21hcCk7Ci0JCWJyZWFrOwotCWNhc2Ugd2FpdGluZzoKLQkJLyogdGhpcyBjb3VsZCBoYXBwZW4gd2l0aCBtdWx0aXBsZSBFTVBUWV9TRUdNRU5UcywgYnV0Ci0JCSAqIHNob3VsZG4ndCBoYXBwZW4gYW55IG1vcmUgYXMgd2UgcmUtc3RhcnQgdGhlIHJ1bm5lciBldmVuCi0JCSAqIHdpdGggYW4gZW1wdHkgc2VnbWVudC4KLQkJICovCi0JCWJ5dGVzX3dyaXR0ZW4gPSAtRUFHQUlOOwotCQlicmVhazsKLQljYXNlIGVycm9yOgotCQkvKiAgc2V0dXAgZm9yIGEgcmV0cnkKLQkJICovCi0JCXRhaWwtPnN0YXR1cyA9IHdhaXRpbmc7Ci0JCWJ5dGVzX3dyaXR0ZW4gPSAtRUFHQUlOOyAvKiBmb3JjZSByZXRyeSAqLwotCQlpZiAodGFpbC0+aGFyZF9lcnJvcl9tYXAgIT0gMCkgewotCQkJVFJBQ0UoZnRfdF93YXJuLCAKLQkJCSAgICAgICJ3YXJuaW5nOiAlZCBoYXJkIGVycm9yKHMpIGluIHdyaXR0ZW4gc2VnbWVudCIsCi0JCQkgICAgICBjb3VudF9vbmVzKHRhaWwtPmhhcmRfZXJyb3JfbWFwKSk7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAiaGFyZF9lcnJvcl9tYXAgPSAweCUwOGx4IiwgCi0JCQkgICAgICAobG9uZyl0YWlsLT5oYXJkX2Vycm9yX21hcCk7Ci0JCQkvKiAgSW1wbGVtZW50IGhhcmQgd3JpdGUgZXJyb3IgcmVjb3ZlcnkgaGVyZQotCQkJICovCi0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkgICAgIndhaXQgZm9yIGVtcHR5IHNlZ21lbnQgZmFpbGVkLCB0YWlsIHN0YXR1czogJWQiLAotCQkJICAgIHRhaWwtPnN0YXR1cyk7Ci0JfQotCS8qICAgIHNob3VsZCBydW5uZXIgc3RvcCA/Ci0JICovCi0JaWYgKGZ0X3J1bm5lcl9zdGF0dXMgPT0gYWJvcnRpbmcpIHsKLQkJYnVmZmVyX3N0cnVjdCAqaGVhZCA9IGZ0YXBlX2dldF9idWZmZXIoZnRfcXVldWVfaGVhZCk7Ci0JCWlmIChoZWFkLT5zdGF0dXMgPT0gd2FudGVkX3N0YXRlKSB7Ci0JCQloZWFkLT5zdGF0dXMgPSBkb25lOyAvKiA/Pz8/ICovCi0JCX0KLQkJLyogIGRvbid0IGNhbGwgYWJvcnRfb3BlcmF0aW9uKCksIHdlIGRvbid0IHdhbnQgdG8gemFwCi0JCSAqICB0aGUgZG1hIGJ1ZmZlcnMKLQkJICovCi0JCVRSQUNFX0NBVENIKGZ0YXBlX2R1bWJfc3RvcCgpLCk7Ci0JfSBlbHNlIHsKLQkJLyogIElmIGp1c3QgcGFzc2VkIGxhc3Qgc2VnbWVudCBvbiB0YXBlOiB3YWl0IGZvciBCT1QKLQkJICogIG9yIEVPVCBtYXJrLiBTZXRzIGZ0X3J1bm5lcl9zdGF0dXMgdG8gaWRsZSBpZiBhdCBsRU9UCi0JCSAqICBhbmQgc3VjY2Vzc2Z1bCAKLQkJICovCi0JCVRSQUNFX0NBVENIKGZ0YXBlX2hhbmRsZV9sb2dpY2FsX2VvdCgpLCk7Ci0JfQotCWlmICh0YWlsLT5zdGF0dXMgPT0gZG9uZSkgewotCQkvKiBub3cgYXQgbGVhc3Qgb25lIGJ1ZmZlciBpcyBlbXB0eSwgZmlsbCBpdCB3aXRoIG91cgotCQkgKiBkYXRhLiAgc2tpcCBiYWQgc2VjdG9ycyBhbmQgZ2VuZXJhdGUgZWNjLgotCQkgKiBjb3B5X2FuZF9nZW5fZWNjIHJldHVybiBuciBvZiBieXRlcyB3cml0dGVuLCByYW5nZQotCQkgKiAwLi4yOSBLYiBpbmNsdXNpdmUhICAKLQkJICoKLQkJICogRW1wdHkgc2VnbWVudHMgYXJlIGhhbmRsZWQgaW5zaWRlIGNveXBfYW5kX2dlbl9lY2MoKQotCQkgKi8KLQkJaWYgKHdyaXRlX21vZGUgIT0gRlRfV1JfREVMRVRFKSB7Ci0JCQlUUkFDRV9DQVRDSChieXRlc193cml0dGVuID0gY29weV9hbmRfZ2VuX2VjYygKLQkJCQl0YWlsLT5hZGRyZXNzLCBhZGRyZXNzLAotCQkJCWZ0YXBlX2dldF9iYWRfc2VjdG9yX2VudHJ5KHNlZ21lbnRfaWQpKSwpOwotCQl9Ci0JCXRhaWwtPnNlZ21lbnRfaWQgPSBzZWdtZW50X2lkOwotCQl0YWlsLT5zdGF0dXMgPSB3YWl0aW5nOwotCQl0YWlsID0gZnRhcGVfbmV4dF9idWZmZXIoZnRfcXVldWVfdGFpbCk7Ci0JfQotCS8qICBTdGFydCB0YXBlIG9ubHkgaWYgYWxsIGJ1ZmZlcnMgZnVsbCBvciBmbHVzaCBtb2RlLgotCSAqICBUaGlzIHdpbGwgZ2l2ZSBoaWdoZXIgcHJvYmFiaWxpdHkgb2Ygc3RyZWFtaW5nLgotCSAqLwotCWlmIChmdF9ydW5uZXJfc3RhdHVzICE9IHJ1bm5pbmcgJiYgCi0JICAgICgodGFpbC0+c3RhdHVzID09IHdhaXRpbmcgJiYKLQkgICAgICBmdGFwZV9nZXRfYnVmZmVyKGZ0X3F1ZXVlX2hlYWQpID09IHRhaWwpIHx8Ci0JICAgICB3cml0ZV9tb2RlICE9IEZUX1dSX0FTWU5DKSkgewotCQlUUkFDRV9DQVRDSChmdGFwZV9zdGFydF93cml0aW5nKHdyaXRlX21vZGUpLCk7Ci0JfQotCVRSQUNFX0VYSVQgYnl0ZXNfd3JpdHRlbjsKLX0KLQotLyogIFdyaXRlIGFzIG11Y2ggYXMgZml0cyBmcm9tIGJ1ZmZlciB0byB0aGUgZ2l2ZW4gc2VnbWVudCBvbiB0YXBlCi0gKiAgYW5kIGhhbmRsZSByZXRyaWVzLgotICogIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gKD49IDApLCBvcjoKLSAqICAgICAgLUVJTyAgICAgICAgICB3cml0ZSBmYWlsZWQKLSAqICAgICAgLUVJTlRSICAgICAgICBpbnRlcnJ1cHRlZCBieSBzaWduYWwKLSAqICAgICAgLUVOT1NQQyAgICAgICBkZXZpY2UgZnVsbAotICovCi1pbnQgZnRhcGVfd3JpdGVfc2VnbWVudChjb25zdCBpbnQgc2VnbWVudF9pZCwKLQkJCWNvbnN0IHZvaWQgKmJ1ZmZlciwgCi0JCQljb25zdCBmdF93cml0ZV9tb2RlX3QgZmx1c2gpCi17Ci0JaW50IHJldHJ5ID0gMDsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JZnRfaGlzdG9yeS51c2VkIHw9IDI7Ci0JaWYgKHNlZ21lbnRfaWQgPj0gZnRfdHJhY2tzX3Blcl90YXBlKmZ0X3NlZ21lbnRzX3Blcl90cmFjaykgewotCQkvKiB0YXBlIGZ1bGwgKi8KLQkJVFJBQ0VfQUJPUlQoLUVOT1NQQywgZnRfdF9lcnIsCi0JCQkgICAgImludmFsaWQgc2VnbWVudCBpZDogJWQgKG1heCAlZCkiLCAKLQkJCSAgICBzZWdtZW50X2lkLCAKLQkJCSAgICBmdF90cmFja3NfcGVyX3RhcGUgKiBmdF9zZWdtZW50c19wZXJfdHJhY2sgLTEpOwotCX0KLQlmb3IgKDs7KSB7Ci0JCWlmICgocmVzdWx0ID0gd3JpdGVfc2VnbWVudChzZWdtZW50X2lkLCBidWZmZXIsIGZsdXNoKSkgPj0gMCkgewotCQkJaWYgKHJlc3VsdCA9PSAwKSB7IC8qIGVtcHR5IHNlZ21lbnQgKi8KLQkJCQlUUkFDRShmdF90X25vaXNlLAotCQkJCSAgICAgICJlbXB0eSBzZWdtZW50LCBub3RoaW5nIHdyaXR0ZW4iKTsKLQkJCX0KLQkJCVRSQUNFX0VYSVQgcmVzdWx0OwotCQl9Ci0JCWlmIChyZXN1bHQgPT0gLUVBR0FJTikgewotCQkJaWYgKCsrcmV0cnkgPiAxMDApIHsgLyogZ2l2ZSB1cCAqLwotCQkJCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJCSAgICAgICJ3cml0ZSBmYWlsZWQsID4xMDAgcmV0cmllcyBpbiBzZWdtZW50Iik7Ci0JCQl9Ci0JCQlUUkFDRShmdF90X3dhcm4sICJ3cml0ZSBlcnJvciwgcmV0cnkgJWQgKCVkKSIsCi0JCQkgICAgICByZXRyeSwKLQkJCSAgICAgIGZ0YXBlX2dldF9idWZmZXIoZnRfcXVldWVfdGFpbCktPnNlZ21lbnRfaWQpOwotCQl9IGVsc2UgewotCQkJVFJBQ0VfQUJPUlQocmVzdWx0LCBmdF90X2VyciwKLQkJCQkgICAgIndyaXRlX3NlZ21lbnQgZmFpbGVkLCBlcnJvcjogJWQiLCByZXN1bHQpOwotCQl9Ci0JCS8qIEFsbG93IGVzY2FwZSBmcm9tIGxvb3Agd2hlbiBzaWduYWxlZCAhCi0JCSAqLwotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlLXdyaXRlLmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtd3JpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGU3Zjg5OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvbG93bGV2ZWwvZnRhcGUtd3JpdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSNpZm5kZWYgX0ZUQVBFX1dSSVRFX0gKLSNkZWZpbmUgX0ZUQVBFX1dSSVRFX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk1IEJhcyBMYWFyaG92ZW4sCi0gKiAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZS13cml0ZS5oLHYgJAotICRBdXRob3I6IGNsYXVzICQKLSAqCi0gJFJldmlzaW9uOiAxLjIgJAotICREYXRlOiAxOTk3LzEwLzA1IDE5OjE4OjMwICQKLSAkU3RhdGU6IEV4cCAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgd3JpdGUgZnVuY3Rpb25zCi0gKiAgICAgIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICoKLSAqLwotCi0KLS8qICAgICAgZnRhcGUtd3JpdGUuYyBkZWZpbmVkIGdsb2JhbCBmdW5jdGlvbnMuCi0gKi8KLXR5cGVkZWYgZW51bSB7Ci0JRlRfV1JfQVNZTkMgID0gMCwgLyogc3RhcnQgdGFwZSBvbmx5IHdoZW4gYWxsIGJ1ZmZlcnMgYXJlIGZ1bGwgKi8KLQlGVF9XUl9NVUxUSSAgPSAxLCAvKiBzdGFydCB0YXBlLCBidXQgZG9uJ3QgbmVjZXNzYXJpbHkgc3RvcCAqLwotCUZUX1dSX1NJTkdMRSA9IDIsIC8qIHdyaXRlIGEgc2luZ2xlIHNlZ21lbnQgYW5kIHN0b3AgYWZ0ZXJ3YXJkcyAqLwotCUZUX1dSX0RFTEVURSA9IDMgIC8qIHdyaXRlIGRlbGV0ZWQgZGF0YSBtYXJrcyAqLwotfSBmdF93cml0ZV9tb2RlX3Q7Ci0KLWV4dGVybiBpbnQgIGZ0YXBlX3N0YXJ0X3dyaXRpbmcoY29uc3QgZnRfd3JpdGVfbW9kZV90IG1vZGUpOwotZXh0ZXJuIGludCAgZnRhcGVfd3JpdGVfc2VnbWVudChjb25zdCBpbnQgc2VnbWVudCwKLQkJCQljb25zdCB2b2lkICphZGRyZXNzLCAKLQkJCQljb25zdCBmdF93cml0ZV9tb2RlX3QgZmx1c2hpbmcpOwotZXh0ZXJuIHZvaWQgZnRhcGVfemFwX3dyaXRlX2J1ZmZlcnModm9pZCk7Ci1leHRlcm4gaW50ICBmdGFwZV9sb29wX3VudGlsX3dyaXRlc19kb25lKHZvaWQpOwotCi0jZW5kaWYJCQkJLyogX0ZUQVBFX1dSSVRFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlX3N5bXMuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS9sb3dsZXZlbC9mdGFwZV9zeW1zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMGRjNGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL2xvd2xldmVsL2Z0YXBlX3N5bXMuYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZQotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS9sb3dsZXZlbC9mdGFwZV9zeW1zLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuNCAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8xNyAwMDowMzo1MSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5bWJvbHMgdGhhdCB0aGUgZnRhcGUgbG93IGxldmVsCi0gKiAgICAgIHBhcnQgb2YgdGhlIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyICJmdGFwZSIKLSAqICAgICAgZXhwb3J0cyB0byBpdHMgaGlnaCBsZXZlbCBjbGllbnRzCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUuaD4KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtaW5pdC5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2ZkYy1pby5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS13cml0ZS5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWlvLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1ic20uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1idWZmZXIuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1mb3JtYXQuaCIKLQotLyogYmFkIHNlY3RvciBoYW5kbGluZyBmcm9tIGZ0YXBlLWJzbS5jICovCi1FWFBPUlRfU1lNQk9MKGZ0YXBlX2dldF9iYWRfc2VjdG9yX2VudHJ5KTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfZmluZF9lbmRfb2ZfYnNtX2xpc3QpOwotLyogZnJvbSBmdGFwZS1ydy5jICovCi1FWFBPUlRfU1lNQk9MKGZ0YXBlX3NldF9zdGF0ZSk7Ci0vKiBmcm9tIGZ0YXBlLWN0bC5jICovCi1FWFBPUlRfU1lNQk9MKGZ0YXBlX3NlZWtfdG9fYm90KTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfc2Vla190b19lb3QpOwotRVhQT1JUX1NZTUJPTChmdGFwZV9hYm9ydF9vcGVyYXRpb24pOwotRVhQT1JUX1NZTUJPTChmdGFwZV9nZXRfc3RhdHVzKTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfZW5hYmxlKTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfZGlzYWJsZSk7Ci1FWFBPUlRfU1lNQk9MKGZ0YXBlX21tYXApOwotRVhQT1JUX1NZTUJPTChmdGFwZV9jYWxpYnJhdGVfZGF0YV9yYXRlKTsKLS8qIGZyb20gZnRhcGUtaW8uYyAqLwotRVhQT1JUX1NZTUJPTChmdGFwZV9yZXNldF9kcml2ZSk7Ci1FWFBPUlRfU1lNQk9MKGZ0YXBlX2NvbW1hbmQpOwotRVhQT1JUX1NZTUJPTChmdGFwZV9wYXJhbWV0ZXIpOwotRVhQT1JUX1NZTUJPTChmdGFwZV9yZWFkeV93YWl0KTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfcmVwb3J0X29wZXJhdGlvbik7Ci1FWFBPUlRfU1lNQk9MKGZ0YXBlX3JlcG9ydF9lcnJvcik7Ci0vKiBmcm9tIGZ0YXBlLXJlYWQuYyAqLwotRVhQT1JUX1NZTUJPTChmdGFwZV9yZWFkX3NlZ21lbnRfZnJhY3Rpb24pOwotRVhQT1JUX1NZTUJPTChmdGFwZV96YXBfcmVhZF9idWZmZXJzKTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfcmVhZF9oZWFkZXJfc2VnbWVudCk7Ci1FWFBPUlRfU1lNQk9MKGZ0YXBlX2RlY29kZV9oZWFkZXJfc2VnbWVudCk7Ci0vKiBmcm9tIGZ0YXBlLXdyaXRlLmMgKi8KLUVYUE9SVF9TWU1CT0woZnRhcGVfd3JpdGVfc2VnbWVudCk7Ci1FWFBPUlRfU1lNQk9MKGZ0YXBlX3N0YXJ0X3dyaXRpbmcpOwotRVhQT1JUX1NZTUJPTChmdGFwZV9sb29wX3VudGlsX3dyaXRlc19kb25lKTsKLS8qIGZyb20gZnRhcGUtYnVmZmVyLmggKi8KLUVYUE9SVF9TWU1CT0woZnRhcGVfc2V0X25yX2J1ZmZlcnMpOwotLyogZnJvbSBmdGFwZS1mb3JtYXQuaCAqLwotRVhQT1JUX1NZTUJPTChmdGFwZV9mb3JtYXRfdHJhY2spOwotRVhQT1JUX1NZTUJPTChmdGFwZV9mb3JtYXRfc3RhdHVzKTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfdmVyaWZ5X3NlZ21lbnQpOwotLyogZnJvbSB0cmFjaW5nLmMgKi8KLSNpZm5kZWYgQ09ORklHX0ZUX05PX1RSQUNFX0FUX0FMTAotRVhQT1JUX1NZTUJPTChmdGFwZV90cmFjaW5nKTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfZnVuY3Rpb25fbmVzdF9sZXZlbCk7Ci1FWFBPUlRfU1lNQk9MKGZ0YXBlX3RyYWNlX2NhbGwpOwotRVhQT1JUX1NZTUJPTChmdGFwZV90cmFjZV9leGl0KTsKLUVYUE9SVF9TWU1CT0woZnRhcGVfdHJhY2VfbG9nKTsKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ5MWMxZi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIwotIyAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0jIGFueSBsYXRlciB2ZXJzaW9uLgotIyAKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMgCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0jCi0jICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS96ZnRhcGUvTWFrZWZpbGUsdiAkCi0jICRSZXZpc2lvbjogMS40ICQKLSMgJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6NTggJAotIwotIyAgICAgIE1ha2VmaWxlIGZvciB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMCB6ZnRhcGUgaW50ZXJmYWNlIFZGUyB0bwotIyAgICAgIGZ0YXBlCi0jCi0KLQotIyBaRlRfT0JTT0xFVEUgLSBlbmFibGUgdGhlIE1USU9DX1pGVEFQRV9HRVRCTEtTWiBpb2N0bC4gWW91IHNob3VsZAotIyAgICAgICAgICAgICAgICBsZWF2ZSB0aGlzIGVuYWJsZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0YXBlci4KLQotb2JqLSQoQ09ORklHX1pGVEFQRSkgKz0gemZ0YXBlLm8KLQotemZ0YXBlLW9ianMgOj0gemZ0YXBlLXJ3Lm8gemZ0YXBlLWN0bC5vIHpmdGFwZS1yZWFkLm8gXAotCSAgICAgICB6ZnRhcGUtd3JpdGUubyB6ZnRhcGUtdnRibC5vIHpmdGFwZS1lb2YubyBcCi0JICAgICAgIHpmdGFwZS1pbml0Lm8gemZ0YXBlLWJ1ZmZlcnMubyB6ZnRhcGVfc3ltcy5vCi0KLUVYVFJBX0NGTEFHUyA6PSAtRFpGVF9PQlNPTEVURQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtYnVmZmVycy5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtYnVmZmVycy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWJjZTJlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL3pmdGFwZS96ZnRhcGUtYnVmZmVycy5jLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTg6NTkgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkeW5hbWljIGJ1ZmZlciBhbGxvY2F0aW9uIHJvdXRpbmVzIAotICogICAgICBvZiB6ZnRhcGUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWluaXQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWVvZi5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS13cml0ZS5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtcmVhZC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtcncuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXZ0YmwuaCIKLQotLyogIGdsb2JhbCB2YXJpYWJsZXMKLSAqLwotCi0vKiAgbG9jYWwgdmFyaWJhbGVzCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNlZF9tZW1vcnk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBlYWtfbWVtb3J5OwotCi12b2lkIHpmdF9tZW1vcnlfc3RhdHModm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJNZW1vcnkgdXNhZ2UgKHZtYWxsb2MgYWxsb2NhdGlvbnMpOlxuIgotCSAgICAgIEtFUk5fSU5GTyAidG90YWwgYWxsb2NhdGVkOiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAicGVhayBhbGxvY2F0aW9uOiAlZCIsCi0JICAgICAgdXNlZF9tZW1vcnksIHBlYWtfbWVtb3J5KTsKLQlwZWFrX21lbW9yeSA9IHVzZWRfbWVtb3J5OwotCVRSQUNFX0VYSVQ7Ci19Ci0KLWludCB6ZnRfdmNhbGxvY19vbmNlKHZvaWQgKm5ldywgc2l6ZV90IHNpemUpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JaWYgKHpmdF92bWFsbG9jX29uY2UobmV3LCBzaXplKSA8IDApIHsKLQkJVFJBQ0VfRVhJVCAtRU5PTUVNOwotCX0KLQltZW1zZXQoKih2b2lkICoqKW5ldywgJ1wwJywgc2l6ZSk7Ci0JVFJBQ0VfRVhJVCAwOwotfQotaW50IHpmdF92bWFsbG9jX29uY2Uodm9pZCAqbmV3LCBzaXplX3Qgc2l6ZSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICgqKHZvaWQgKiopbmV3ICE9IE5VTEwgfHwgc2l6ZSA9PSAwKSB7Ci0JCVRSQUNFX0VYSVQgMDsKLQl9Ci0JaWYgKCgqKHZvaWQgKiopbmV3ID0gdm1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQlUUkFDRV9FWElUIC1FTk9NRU07Ci0JfQotCXVzZWRfbWVtb3J5ICs9IHNpemU7Ci0JaWYgKHBlYWtfbWVtb3J5IDwgdXNlZF9tZW1vcnkpIHsKLQkJcGVha19tZW1vcnkgPSB1c2VkX21lbW9yeTsKLQl9Ci0JVFJBQ0VfQUJPUlQoMCwgZnRfdF9ub2lzZSwKLQkJICAgICJhbGxvY2F0ZWQgYnVmZmVyIEAgJXAsICV6ZCBieXRlcyIsICoodm9pZCAqKiluZXcsIHNpemUpOwotfQotaW50IHpmdF92bWFsbG9jX2Fsd2F5cyh2b2lkICpuZXcsIHNpemVfdCBzaXplKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JemZ0X3ZmcmVlKG5ldywgc2l6ZSk7Ci0JVFJBQ0VfRVhJVCB6ZnRfdm1hbGxvY19vbmNlKG5ldywgc2l6ZSk7Ci19Ci12b2lkIHpmdF92ZnJlZSh2b2lkICpvbGQsIHNpemVfdCBzaXplKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKCoodm9pZCAqKilvbGQpIHsKLQkJdmZyZWUoKih2b2lkICoqKW9sZCk7Ci0JCXVzZWRfbWVtb3J5IC09IHNpemU7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJyZWxlYXNlZCBidWZmZXIgQCAlcCwgJXpkIGJ5dGVzIiwKLQkJICAgICAgKih2b2lkICoqKW9sZCwgc2l6ZSk7Ci0JCSoodm9pZCAqKilvbGQgPSBOVUxMOwotCX0KLQlUUkFDRV9FWElUOwotfQotCi12b2lkICp6ZnRfa21hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLQl2b2lkICpuZXc7Ci0KLQl3aGlsZSAoKG5ldyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKLQl9Ci0JbWVtc2V0KG5ldywgMCwgc2l6ZSk7Ci0JdXNlZF9tZW1vcnkgKz0gc2l6ZTsKLQlpZiAocGVha19tZW1vcnkgPCB1c2VkX21lbW9yeSkgewotCQlwZWFrX21lbW9yeSA9IHVzZWRfbWVtb3J5OwotCX0KLQlyZXR1cm4gbmV3OwotfQotCi12b2lkIHpmdF9rZnJlZSh2b2lkICpvbGQsIHNpemVfdCBzaXplKQotewotCWtmcmVlKG9sZCk7Ci0JdXNlZF9tZW1vcnkgLT0gc2l6ZTsKLX0KLQotLyogdGhlcmUgYXJlIHNvbWUgbW9yZSBidWZmZXJzIHRoYXQgYXJlIGFsbG9jYXRlZCBvbiBkZW1hbmQuCi0gKiBjbGVhbnVwX21vZHVsZSgpIGNhbGxlcyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHN1cmUgdG8gaGF2ZSByZWxlYXNlZAotICogdGhlbSAKLSAqLwotdm9pZCB6ZnRfdW5pbml0X21lbSh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JemZ0X3ZmcmVlKCZ6ZnRfaHNlZ19idWYsIEZUX1NFR01FTlRfU0laRSk7Ci0JemZ0X3ZmcmVlKCZ6ZnRfZGVibG9ja19idWYsIEZUX1NFR01FTlRfU0laRSk7IHpmdF9kZWJsb2NrX3NlZ21lbnQgPSAtMTsKLQl6ZnRfZnJlZV92dGJsKCk7Ci0JaWYgKHpmdF9jbXByX2xvY2soMCAvKiBkb24ndCBsb2FkICovKSA9PSAwKSB7Ci0JCSgqemZ0X2NtcHJfb3BzLT5jbGVhbnVwKSgpOwotCQkoKnpmdF9jbXByX29wcy0+cmVzZXQpKCk7IC8qIHVubG9jayBpdCBhZ2FpbiAqLwotCX0KLQl6ZnRfbWVtb3J5X3N0YXRzKCk7Ci0JVFJBQ0VfRVhJVDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuaCBiL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4ZTMxMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1idWZmZXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9EWU5NRU1fSAotI2RlZmluZSBfRlRBUEVfRFlOTUVNX0gKLQotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuaCx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE4OjU5ICQKLSAqCi0gKiAgIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgotICoKLSAqLwotCi0vKiB3ZSBkbyBub3QgYWxsb2NhdGUgYWxsIG9mIHRoZSByZWFsbHkgbGFyZ2UgYnVmZmVyIG1lbW9yeSBiZWZvcmUKLSAqIHNvbWVvbmUgdHJpZXMgdG8gb3BlbiB0aGUgZHJpdmUuIGZ0YXBlX29wZW4oKSBtYXkgZmFpbCB3aXRoCi0gKiAtRU5PTUVNLCBidXQgdGhhdCdzIGJldHRlciBoYXZpbmcgMjAwayBvZiB2bWFsbG9jZWQgbWVtb3J5IHdoaWNoCi0gKiBjYW5ub3QgYmUgc3dhcHBlZCBvdXQuCi0gKi8KLQotZXh0ZXJuIHZvaWQgIHpmdF9tZW1vcnlfc3RhdHModm9pZCk7Ci1leHRlcm4gaW50ICAgemZ0X3ZtYWxsb2Nfb25jZSh2b2lkICpuZXcsIHNpemVfdCBzaXplKTsKLWV4dGVybiBpbnQgICB6ZnRfdmNhbGxvY19vbmNlKHZvaWQgKm5ldywgc2l6ZV90IHNpemUpOwotZXh0ZXJuIGludCAgIHpmdF92bWFsbG9jX2Fsd2F5cyh2b2lkICpuZXcsIHNpemVfdCBzaXplKTsKLWV4dGVybiB2b2lkICB6ZnRfdmZyZWUodm9pZCAqb2xkLCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gdm9pZCAqemZ0X2ttYWxsb2Moc2l6ZV90IHNpemUpOwotZXh0ZXJuIHZvaWQgIHpmdF9rZnJlZSh2b2lkICpvbGQsIHNpemVfdCBzaXplKTsKLQotLyogY2FsbGVkIGJ5IGNsZWFudXBfbW9kdWxlKCkgCi0gKi8KLWV4dGVybiB2b2lkIHpmdF91bmluaXRfbWVtKHZvaWQpOwotCi0jZW5kaWYKLQotCi0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1jdGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiYTBmNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1jdGwuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MTcgKzAsMCBAQAotLyogCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUKLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvemZ0YXBlL3pmdGFwZS1jdGwuYyx2ICQKLSAqICRSZXZpc2lvbjogMS4yLjYuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMS8xNCAxODowNzozMyAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5vbi1yZWFkL3dyaXRlIHpmdGFwZSBmdW5jdGlvbnMKLSAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAvMzAxMC8zMDIwIGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1lb2YuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtd3JpdGUuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS12dGJsLmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLWludCB6ZnRfd3JpdGVfcHJvdGVjdGVkOyAvKiB0aGlzIGlzIHdoZW4gY2FydHJpZGdlIHJkb25seSBvciBPX1JET05MWSAqLwotaW50IHpmdF9oZWFkZXJfcmVhZDsKLWludCB6ZnRfb2ZmbGluZTsKLXVuc2lnbmVkIGludCB6ZnRfdW5pdDsKLWludCB6ZnRfcmVzaWQ7Ci1pbnQgemZ0X210X2NvbXByZXNzaW9uOwotCi0vKiAgICAgIExvY2FsIHZhcnMuCi0gKi8KLXN0YXRpYyBpbnQgZ29pbmdfb2ZmbGluZTsKLQotdHlwZWRlZiBpbnQgKG10X2Z1bikoaW50ICphcmdwdHIpOwotdHlwZWRlZiBpbnQgKCptdF9mdW5wKShpbnQgKmFyZ3B0cik7Ci10eXBlZGVmIHN0cnVjdAotewotCW10X2Z1bnAgZnVuY3Rpb247Ci0JdW5zaWduZWQgb2ZmbGluZSAgICAgICAgIDogMTsgLyogb3AgcGVybWl0dGVkIGlmIG9mZmxpbmUgb3Igbm9fdGFwZSAqLwotCXVuc2lnbmVkIHdyaXRlX3Byb3RlY3RlZCA6IDE7IC8qIG9wIHBlcm1pdHRlZCBpZiB3cml0ZS1wcm90ZWN0ZWQgICAgKi8KLQl1bnNpZ25lZCBub3RfZm9ybWF0dGVkICAgOiAxOyAvKiBvcCBwZXJtaXR0ZWQgaWYgdGFwZSBub3QgZm9ybWF0dGVkICovCi0JdW5zaWduZWQgcmF3X21vZGUgICAgICAgIDogMTsgLyogb3AgcGVybWl0dGVkIGlmIHpmdF9tb2RlID09IDAgICAgKi8KLQl1bnNpZ25lZCBuZWVkX2lkbGVfc3RhdGUgOiAxOyAvKiBuZWVkIHRvIGNhbGwgZGVmX2lkbGVfc3RhdGUgICAgICAgICovCi0JY2hhciAgICAgKm5hbWU7Ci19IGZ1bl9lbnRyeTsKLQotc3RhdGljIG10X2Z1biBtdF9kdW1teSwgbXRfcmVzZXQsIG10X2ZzciwgbXRfYnNyLCBtdF9yZXcsIG10X29mZmwsIG10X25vcCwKLQltdF93ZW9mLCBtdF9lcmFzZSwgbXRfcmFzMiwgbXRfc2V0YmxrLCBtdF9zZXRkZW5zaXR5LAotCW10X3NlZWssIG10X3RlbGwsIG10X3JldGVuLCBtdF9lb20sIG10X2ZzZiwgbXRfYnNmLAotCW10X2ZzZm0sIG10X2JzZm0sIG10X3NldGRydmJ1ZmZlciwgbXRfY29tcHJlc3Npb247Ci0KLXN0YXRpYyBmdW5fZW50cnkgbXRfZnVuc1tdPQoteyAKLQl7bXRfcmVzZXQgICAgICAgLCAxLCAxLCAxLCAxLCAwLCAiTVRfUkVTRVQiIH0sIC8qICAwICovCi0Je210X2ZzZiAgICAgICAgICwgMCwgMSwgMCwgMCwgMSwgIk1UX0ZTRiIgICB9LAotCXttdF9ic2YgICAgICAgICAsIDAsIDEsIDAsIDAsIDEsICJNVF9CU0YiICAgfSwKLQl7bXRfZnNyICAgICAgICAgLCAwLCAxLCAwLCAxLCAxLCAiTVRfRlNSIiAgIH0sCi0Je210X2JzciAgICAgICAgICwgMCwgMSwgMCwgMSwgMSwgIk1UX0JTUiIgICB9LAotCXttdF93ZW9mICAgICAgICAsIDAsIDAsIDAsIDAsIDAsICJNVF9XRU9GIiAgfSwgLyogIDUgKi8KLQl7bXRfcmV3ICAgICAgICAgLCAwLCAxLCAxLCAxLCAwLCAiTVRfUkVXIiAgIH0sCi0Je210X29mZmwgICAgICAgICwgMCwgMSwgMSwgMSwgMCwgIk1UX09GRkwiICB9LAotCXttdF9ub3AgICAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJNVF9OT1AiICAgfSwKLQl7bXRfcmV0ZW4gICAgICAgLCAwLCAxLCAxLCAxLCAwLCAiTVRfUkVURU4iIH0sCi0Je210X2JzZm0gICAgICAgICwgMCwgMSwgMCwgMCwgMSwgIk1UX0JTRk0iICB9LCAvKiAxMCAqLwotCXttdF9mc2ZtICAgICAgICAsIDAsIDEsIDAsIDAsIDEsICJNVF9GU0ZNIiAgfSwKLQl7bXRfZW9tICAgICAgICAgLCAwLCAxLCAwLCAwLCAxLCAiTVRfRU9NIiAgIH0sCi0Je210X2VyYXNlICAgICAgICwgMCwgMCwgMCwgMSwgMCwgIk1UX0VSQVNFIiB9LAotCXttdF9kdW1teSAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJNVF9SQVMxIiAgfSwKLQl7bXRfcmFzMiAgICAgICAgLCAwLCAwLCAwLCAxLCAwLCAiTVRfUkFTMiIgIH0sCi0Je210X2R1bW15ICAgICAgICwgMSwgMSwgMSwgMSwgMCwgIk1UX1JBUzMiICB9LAotCXttdF9kdW1teSAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJVTktOT1dOIiAgfSwKLQl7bXRfZHVtbXkgICAgICAgLCAxLCAxLCAxLCAxLCAwLCAiVU5LTk9XTiIgIH0sCi0Je210X2R1bW15ICAgICAgICwgMSwgMSwgMSwgMSwgMCwgIlVOS05PV04iICB9LAotCXttdF9zZXRibGsgICAgICAsIDEsIDEsIDEsIDEsIDEsICJNVF9TRVRCTEsifSwgLyogMjAgKi8KLQl7bXRfc2V0ZGVuc2l0eSAgLCAxLCAxLCAxLCAxLCAwLCAiTVRfU0VUREVOU0lUWSJ9LAotCXttdF9zZWVrICAgICAgICAsIDAsIDEsIDAsIDEsIDEsICJNVF9TRUVLIiAgfSwKLQl7bXRfZHVtbXkgICAgICAgLCAwLCAxLCAwLCAxLCAxLCAiTVRfVEVMTCIgIH0sIC8qIHdyLW9ubHkgPyEgKi8KLQl7bXRfc2V0ZHJ2YnVmZmVyLCAxLCAxLCAxLCAxLCAwLCAiTVRfU0VURFJWQlVGRkVSIiB9LAotCXttdF9kdW1teSAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJNVF9GU1MiICAgfSwgLyogMjUgKi8KLQl7bXRfZHVtbXkgICAgICAgLCAxLCAxLCAxLCAxLCAwLCAiTVRfQlNTIiAgIH0sCi0Je210X2R1bW15ICAgICAgICwgMSwgMSwgMSwgMSwgMCwgIk1UX1dTTSIgICB9LAotCXttdF9kdW1teSAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJNVF9MT0NLIiAgfSwKLQl7bXRfZHVtbXkgICAgICAgLCAxLCAxLCAxLCAxLCAwLCAiTVRfVU5MT0NLIn0sCi0Je210X2R1bW15ICAgICAgICwgMSwgMSwgMSwgMSwgMCwgIk1UX0xPQUQiICB9LCAvKiAzMCAqLwotCXttdF9kdW1teSAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJNVF9VTkxPQUQifSwKLQl7bXRfY29tcHJlc3Npb24gLCAxLCAxLCAxLCAwLCAxLCAiTVRfQ09NUFJFU1NJT04ifSwKLQl7bXRfZHVtbXkgICAgICAgLCAxLCAxLCAxLCAxLCAwLCAiTVRfU0VUUEFSVCJ9LAotCXttdF9kdW1teSAgICAgICAsIDEsIDEsIDEsIDEsIDAsICJNVF9NS1BBUlQifQotfTsgIAotCi0jZGVmaW5lIE5SX01UX0NNRFMgTlJfSVRFTVMobXRfZnVucykKLQotdm9pZCB6ZnRfcmVzZXRfcG9zaXRpb24oemZ0X3Bvc2l0aW9uICpwb3MpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlwb3MtPnNlZ19ieXRlX3BvcyA9Ci0JCXBvcy0+dm9sdW1lX3BvcyA9IDA7Ci0JaWYgKHpmdF9oZWFkZXJfcmVhZCkgewotCQkvKiBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHZvbHVtZSB0YWJsZSBhbmQKLQkJICogY29tcHJlc3Npb24gbWFwLiBXZSB0aGVyZWZvciBzaW1wbHkKLQkJICogcG9zaXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QKLQkJICogdm9sdW1lLiBUaGlzIGNvdmVycyBvbGQgZnRhcGUgYXJjaGl2ZXMgYXMKLQkJICogd2VsbCBoYXMgdmFyaW91cyBmbGF2b3VycyBvZiB0aGUKLQkJICogY29tcHJlc3Npb24gbWFwIHNlZ21lbnRzLiBUaGUgd29yc3QgY2FzZSBpcwotCQkgKiB0aGF0IHRoZSBjb21wcmVzc2lvbiBtYXAgc2hvd3MgdXAgYXMgYQotCQkgKiBhZGRpdGlvbmFsIHZvbHVtZSBpbiBmcm9udCBvZiBhbGwgb3RoZXJzLgotCQkgKi8KLQkJcG9zLT5zZWdfcG9zICA9IHpmdF9maW5kX3ZvbHVtZSgwKS0+c3RhcnRfc2VnOwotCQlwb3MtPnRhcGVfcG9zID0gemZ0X2NhbGNfdGFwZV9wb3MocG9zLT5zZWdfcG9zKTsKLQl9IGVsc2UgewotCQlwb3MtPnRhcGVfcG9zID0gIDA7Ci0JCXBvcy0+c2VnX3BvcyAgPSAtMTsKLQl9Ci0JemZ0X2p1c3RfYmVmb3JlX2VvZiA9ICAwOwotCXpmdF9kZWJsb2NrX3NlZ21lbnQgPSAtMTsKLQl6ZnRfaW9fc3RhdGUgICAgICAgID0gemZ0X2lkbGU7Ci0JemZ0X3phcF9yZWFkX2J1ZmZlcnMoKTsKLQl6ZnRfcHJldmVudF9mbHVzaCgpOwotCS8qICB1bmxvY2sgdGhlIGNvbXByZXNpc29uIG1vZHVsZSBpZiBpdCBpcyBsb2FkZWQuCi0JICogIFRoZSB6ZXJvIGFyZyBtZWFucyBub3QgdG8gdHJ5IHRvIGxvYWQgdGhlIG1vZHVsZS4KLQkgKi8KLQlpZiAoemZ0X2NtcHJfbG9jaygwKSA9PSAwKSB7Ci0JCSgqemZ0X2NtcHJfb3BzLT5yZXNldCkoKTsgLyogdW5sb2NrICovCi0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHpmdF9pbml0X2RyaXZlcih2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JemZ0X3Jlc2lkID0KLQkJemZ0X2hlYWRlcl9yZWFkICAgICAgICAgID0KLQkJemZ0X29sZF9mdGFwZSAgICAgICAgICAgID0KLQkJemZ0X29mZmxpbmUgICAgICAgICAgICAgID0KLQkJemZ0X3dyaXRlX3Byb3RlY3RlZCAgICAgID0KLQkJZ29pbmdfb2ZmbGluZSAgICAgICAgICAgID0KLQkJemZ0X210X2NvbXByZXNzaW9uICAgICAgID0KLQkJemZ0X2hlYWRlcl9jaGFuZ2VkICAgICAgID0KLQkJemZ0X3ZvbHVtZV90YWJsZV9jaGFuZ2VkID0KLQkJemZ0X3dyaXR0ZW5fc2VnbWVudHMgICAgID0gMDsKLQl6ZnRfYmxrX3N6ID0gQ09ORklHX1pGVF9ERkxUX0JMS19TWjsKLQl6ZnRfcmVzZXRfcG9zaXRpb24oJnpmdF9wb3MpOyAvKiBkb2VzIG1vc3Qgb2YgdGhlIHN0dWZmICovCi0JZnRhcGVfemFwX3JlYWRfYnVmZmVycygpOwotCWZ0YXBlX3NldF9zdGF0ZShpZGxlKTsKLQlUUkFDRV9FWElUOwotfQotCi1pbnQgemZ0X2RlZl9pZGxlX3N0YXRlKHZvaWQpCi17IAotCWludCByZXN1bHQgPSAwOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWlmICghemZ0X2hlYWRlcl9yZWFkKSB7Ci0JCXJlc3VsdCA9IHpmdF9yZWFkX2hlYWRlcl9zZWdtZW50cygpOwotCX0gZWxzZSBpZiAoKHJlc3VsdCA9IHpmdF9mbHVzaF9idWZmZXJzKCkpID49IDAgJiYgemZ0X3FpY19tb2RlKSB7Ci0JCS8qICBkb24ndCBtb3ZlIHBhc3QgZW9mCi0JCSAqLwotCQkodm9pZCl6ZnRfY2xvc2Vfdm9sdW1lKCZ6ZnRfcG9zKTsKLQl9Ci0JaWYgKGZ0YXBlX2Fib3J0X29wZXJhdGlvbigpIDwgMCkgewotCQlUUkFDRShmdF90X3dhcm4sICJmdGFwZV9hYm9ydF9vcGVyYXRpb24oKSBmYWlsZWQiKTsKLQkJcmVzdWx0ID0gLUVJTzsKLQl9Ci0JLyogY2xlYXIgcmVtYWluaW5nIHJlYWQgYnVmZmVycyAqLwotCXpmdF96YXBfcmVhZF9idWZmZXJzKCk7Ci0JemZ0X2lvX3N0YXRlID0gemZ0X2lkbGU7Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgZnVuY3Rpb25zIGZvciB0aGUgTVRJT0NUT1AgY29tbWFuZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IG10X2R1bW15KGludCAqZHVtbXkpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JVFJBQ0VfRVhJVCAtRU5PU1lTOwotfQotCi1zdGF0aWMgaW50IG10X3Jlc2V0KGludCAqZHVtbXkpCi17ICAgICAgICAKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQkodm9pZClmdGFwZV9zZWVrX3RvX2JvdCgpOwotCVRSQUNFX0NBVENIKGZ0YXBlX3Jlc2V0X2RyaXZlKCksCi0JCSAgICB6ZnRfaW5pdF9kcml2ZXIoKTsgemZ0X3VuaW5pdF9tZW0oKTsgemZ0X29mZmxpbmUgPSAxKTsKLQkvKiAgZmFrZSBhIHJlLW9wZW4gb2YgdGhlIGRldmljZS4gVGhpcyB3aWxsIHNldCBhbGwgZmxhZ2UgYW5kIAotCSAqICBhbGxvY2F0ZSBidWZmZXJzIGFzIGFwcHJvcHJpYXRlLiBUaGUgbmV3IHRhcGUgY29uZGl0aW9uIHdpbGwKLQkgKiAgZm9yY2UgdGhlIG9wZW4gcm91dGluZSB0byBkbyBhbnl0aGluZyB3ZSBuZWVkLgotCSAqLwotCVRSQUNFX0NBVENIKF96ZnRfb3BlbigtMSAvKiBmYWtlIHJlb3BlbiAqLywgMCAvKiBkdW1teSAqLyksKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXRfZnNmKGludCAqYXJnKQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlyZXN1bHQgPSB6ZnRfc2tpcF92b2x1bWVzKCphcmcsICZ6ZnRfcG9zKTsKLQl6ZnRfanVzdF9iZWZvcmVfZW9mID0gMDsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF9ic2YoaW50ICphcmcpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYgKCphcmcgIT0gMCkgewotCQlyZXN1bHQgPSB6ZnRfc2tpcF92b2x1bWVzKC0qYXJnICsgMSwgJnpmdF9wb3MpOwotCX0KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBzZWVrX2Jsb2NrKF9fczY0IGRhdGFfb2Zmc2V0LAotCQkgICAgICBfX3M2NCBibG9ja19pbmNyZW1lbnQsCi0JCSAgICAgIHpmdF9wb3NpdGlvbiAqcG9zKQoteyAKLQlpbnQgcmVzdWx0ICAgICAgPSAwOwotCV9fczY0IG5ld19ibG9ja19wb3M7Ci0JX19zNjQgdm9sX2Jsb2NrX2NvdW50OwotCWNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWU7Ci0JaW50IGV4Y2VlZDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQl2b2x1bWUgPSB6ZnRfZmluZF92b2x1bWUocG9zLT5zZWdfcG9zKTsKLQlpZiAodm9sdW1lLT5zdGFydF9zZWcgPT0gMCB8fCB2b2x1bWUtPmVuZF9zZWcgPT0gMCkgewotCQlUUkFDRV9FWElUIC1FSU87Ci0JfQotCW5ld19ibG9ja19wb3MgICA9ICh6ZnRfZGl2X2Jsa3N6KGRhdGFfb2Zmc2V0LCB2b2x1bWUtPmJsa19zeikKLQkJCSAgICsgYmxvY2tfaW5jcmVtZW50KTsKLQl2b2xfYmxvY2tfY291bnQgPSB6ZnRfZGl2X2Jsa3N6KHZvbHVtZS0+c2l6ZSwgdm9sdW1lLT5ibGtfc3opOwotCWlmIChuZXdfYmxvY2tfcG9zIDwgMCkgewotCQlUUkFDRShmdF90X25vaXNlLAotCQkgICAgICAibmV3X2Jsb2NrX3BvcyAiIExMX1ggIiA8IDAiLCBMTChuZXdfYmxvY2tfcG9zKSk7Ci0JCXpmdF9yZXNpZCAgICAgPSAoaW50KW5ld19ibG9ja19wb3M7Ci0JCW5ld19ibG9ja19wb3MgPSAwOwotCQlleGNlZWQgPSAxOwotCX0gZWxzZSBpZiAobmV3X2Jsb2NrX3BvcyA+IHZvbF9ibG9ja19jb3VudCkgewotCQlUUkFDRShmdF90X25vaXNlLAotCQkgICAgICAibmV3X2Jsb2NrX3BvcyAiIExMX1ggIiBleGNlZWRzIHNpemUgb2Ygdm9sdW1lICIgTExfWCwKLQkJICAgICAgTEwobmV3X2Jsb2NrX3BvcyksIExMKHZvbF9ibG9ja19jb3VudCkpOwotCQl6ZnRfcmVzaWQgICAgID0gKGludCkodm9sX2Jsb2NrX2NvdW50IC0gbmV3X2Jsb2NrX3Bvcyk7Ci0JCW5ld19ibG9ja19wb3MgPSB2b2xfYmxvY2tfY291bnQ7Ci0JCWV4Y2VlZCA9IDE7Ci0JfSBlbHNlIHsKLQkJZXhjZWVkID0gMDsKLQl9Ci0JaWYgKHpmdF91c2VfY29tcHJlc3Npb24gJiYgdm9sdW1lLT51c2VfY29tcHJlc3Npb24pIHsKLQkJVFJBQ0VfQ0FUQ0goemZ0X2NtcHJfbG9jaygxIC8qIHRyeSB0byBsb2FkICovKSwpOwotCQlyZXN1bHQgPSAoKnpmdF9jbXByX29wcy0+c2VlaykobmV3X2Jsb2NrX3BvcywgcG9zLCB2b2x1bWUsCi0JCQkJCSAgICAgICB6ZnRfZGVibG9ja19idWYpOwotCQlwb3MtPnRhcGVfcG9zICA9IHpmdF9jYWxjX3RhcGVfcG9zKHBvcy0+c2VnX3Bvcyk7Ci0JCXBvcy0+dGFwZV9wb3MgKz0gcG9zLT5zZWdfYnl0ZV9wb3M7Ci0JfSBlbHNlIHsKLQkJcG9zLT52b2x1bWVfcG9zID0gemZ0X211bF9ibGtzeihuZXdfYmxvY2tfcG9zLCB2b2x1bWUtPmJsa19zeik7Ci0JCXBvcy0+dGFwZV9wb3MgICA9IHpmdF9jYWxjX3RhcGVfcG9zKHZvbHVtZS0+c3RhcnRfc2VnKTsKLQkJcG9zLT50YXBlX3BvcyAgKz0gcG9zLT52b2x1bWVfcG9zOwotCQlwb3MtPnNlZ19wb3MgICAgPSB6ZnRfY2FsY19zZWdfYnl0ZV9jb29yZCgmcG9zLT5zZWdfYnl0ZV9wb3MsCi0JCQkJCQkJICBwb3MtPnRhcGVfcG9zKTsKLQl9Ci0JemZ0X2p1c3RfYmVmb3JlX2VvZiA9IHZvbHVtZS0+c2l6ZSA9PSBwb3MtPnZvbHVtZV9wb3M7Ci0JaWYgKHpmdF9qdXN0X2JlZm9yZV9lb2YpIHsKLQkJLyogd2h5IHRoaXM/IGJlY2F1c2UgemZ0X2ZpbGVfbm8gY2hlY2tzIGFnYWlucyBzdGFydAotCQkgKiBhbmQgZW5kIHNlZ21lbnQgb2YgYSB2b2x1bWUuIFdlIGRvIG5vdCB3YW50IHRvCi0JCSAqIGFkdmFuY2UgdG8gdGhlIG5leHQgdm9sdW1lIHdpdGggdGhpcyBmdW5jdGlvbi4KLQkJICovCi0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJzZXQgemZ0X2p1c3RfYmVmb3JlX2VvZiIpOwotCQl6ZnRfcG9zaXRpb25fYmVmb3JlX2VvZihwb3MsIHZvbHVtZSk7Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJcbiIKLQkgICAgICBLRVJOX0lORk8gIm5ld19zZWdfcG9zIDogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gIm5ld190YXBlX3BvczogIiBMTF9YICJcbiIKLQkgICAgICBLRVJOX0lORk8gInZvbF9zaXplICAgIDogIiBMTF9YICJcbiIKLQkgICAgICBLRVJOX0lORk8gInNlZ19ieXRlX3BvczogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gImJsa19zeiAgOiAlZCIsIAotCSAgICAgIHBvcy0+c2VnX3BvcywgTEwocG9zLT50YXBlX3BvcyksCi0JICAgICAgTEwodm9sdW1lLT5zaXplKSwgcG9zLT5zZWdfYnl0ZV9wb3MsCi0JICAgICAgdm9sdW1lLT5ibGtfc3opOwotCWlmICghZXhjZWVkKSB7Ci0JCXpmdF9yZXNpZCA9IG5ld19ibG9ja19wb3MgLSB6ZnRfZGl2X2Jsa3N6KHBvcy0+dm9sdW1lX3BvcywKLQkJCQkJCQkgIHZvbHVtZS0+YmxrX3N6KTsKLQl9Ci0JaWYgKHpmdF9yZXNpZCA8IDApIHsKLQkJemZ0X3Jlc2lkID0gLXpmdF9yZXNpZDsKLQl9Ci0JVFJBQ0VfRVhJVCAoKGV4Y2VlZCB8fCB6ZnRfcmVzaWQgIT0gMCkgJiYgcmVzdWx0ID49IDApID8gLUVJTlZBTCA6IHJlc3VsdDsKLX0gICAgIAotCi1zdGF0aWMgaW50IG10X2ZzcihpbnQgKmFyZykKLXsgCi0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlyZXN1bHQgPSBzZWVrX2Jsb2NrKHpmdF9wb3Mudm9sdW1lX3BvcywgICphcmcsICZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF9ic3IoaW50ICphcmcpCi17ICAgCi0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlyZXN1bHQgPSBzZWVrX2Jsb2NrKHpmdF9wb3Mudm9sdW1lX3BvcywgLSphcmcsICZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF93ZW9mKGludCAqYXJnKQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JVFJBQ0VfQ0FUQ0goemZ0X2ZsdXNoX2J1ZmZlcnMoKSwpOwotCXJlc3VsdCA9IHpmdF93ZW9mKCphcmcsICZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF9yZXcoaW50ICpkdW1teSkKLXsgICAgICAgICAgCi0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlpZih6ZnRfaGVhZGVyX3JlYWQpIHsKLQkJKHZvaWQpemZ0X2RlZl9pZGxlX3N0YXRlKCk7Ci0JfQotCXJlc3VsdCA9IGZ0YXBlX3NlZWtfdG9fYm90KCk7Ci0JemZ0X3Jlc2V0X3Bvc2l0aW9uKCZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF9vZmZsKGludCAqZHVtbXkpCi17Ci0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlnb2luZ19vZmZsaW5lPSAxOwotCXJlc3VsdCA9IG10X3JldyhOVUxMKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF9ub3AoaW50ICpkdW1teSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkvKiAgc2hvdWxkIHdlIHNldCB0YXBlIHN0YXR1cz8KLQkgKi8KLQlpZiAoIXpmdF9vZmZsaW5lKSB7IC8qIG9mZmxpbmUgaW5jbHVkZXMgbm9fdGFwZSAqLwotCQkodm9pZCl6ZnRfZGVmX2lkbGVfc3RhdGUoKTsKLQl9Ci0JVFJBQ0VfRVhJVCAwOyAKLX0KLQotc3RhdGljIGludCBtdF9yZXRlbihpbnQgKmR1bW15KQoteyAgCi0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlpZih6ZnRfaGVhZGVyX3JlYWQpIHsKLQkJKHZvaWQpemZ0X2RlZl9pZGxlX3N0YXRlKCk7Ci0JfQotCXJlc3VsdCA9IGZ0YXBlX3NlZWtfdG9fZW90KCk7Ci0JaWYgKHJlc3VsdCA+PSAwKSB7Ci0JCXJlc3VsdCA9IGZ0YXBlX3NlZWtfdG9fYm90KCk7Ci0JfQotCVRSQUNFX0VYSVQocmVzdWx0KTsKLX0KLQotc3RhdGljIGludCBmc2Zic2ZtKGludCBhcmcsIHpmdF9wb3NpdGlvbiAqcG9zKQoteyAKLQljb25zdCB6ZnRfdm9saW5mbyAqdnRibDsKLQlfX3M2NCBibG9ja19wb3M7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JLyogV2hhdCB0byBkbz8gVGhpcyBzaG91bGQgc2VlayB0byB0aGUgbmV4dCBmaWxlLW1hcmsgYW5kCi0JICogcG9zaXRpb24gQkVGT1JFLiBUaGF0IGlzLCBhIG5leHQgd3JpdGUgd291bGQganVzdCBleHRlbmQKLQkgKiB0aGUgY3VycmVudCBmaWxlLiAgV2VsbC4gTGV0J3MganVzdCBzZWVrIHRvIHRoZSBlbmQgb2YgdGhlCi0JICogY3VycmVudCBmaWxlLCBpZiBjb3VudCA9PSAxLiAgSWYgY291bnQgPiAxLCB0aGVuIGRvIGEKLQkgKiAibXRfZnNmKGNvdW50IC0gMSkiLCBhbmQgdGhlbiBzZWVrIHRvIHRoZSBlbmQgb2YgdGhhdCBmaWxlLgotCSAqIElmIGNvdW50ID09IDAsIGRvIG5vdGhpbmcKLQkgKi8KLQlpZiAoYXJnID09IDApIHsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLQl6ZnRfanVzdF9iZWZvcmVfZW9mID0gMDsKLQlUUkFDRV9DQVRDSCh6ZnRfc2tpcF92b2x1bWVzKGFyZyA8IDAgPyBhcmcgOiBhcmctMSwgcG9zKSwKLQkJICAgIGlmIChhcmcgPiAwKSB7Ci0JCQkgICAgemZ0X3Jlc2lkICsrOyAKLQkJICAgIH0pOwotCXZ0YmwgICAgICA9IHpmdF9maW5kX3ZvbHVtZShwb3MtPnNlZ19wb3MpOwotCWJsb2NrX3BvcyA9IHpmdF9kaXZfYmxrc3oodnRibC0+c2l6ZSwgdnRibC0+YmxrX3N6KTsKLQkodm9pZClzZWVrX2Jsb2NrKDAsIGJsb2NrX3BvcywgcG9zKTsKLQlpZiAocG9zLT52b2x1bWVfcG9zICE9IHZ0YmwtPnNpemUpIHsKLQkJemZ0X2p1c3RfYmVmb3JlX2VvZiA9IDA7Ci0JCXpmdF9yZXNpZCA9IDE7Ci0JCS8qIHdlIGRpZG4ndCBtYW5hZ2VkIHRvIGdvIHRoZXJlICovCi0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLCAKLQkJCSAgICAid2FudGVkIGZpbGUgcG9zaXRpb24gIiBMTF9YICIsIGFycml2ZWQgYXQgIiBMTF9YLCAKLQkJCSAgICBMTCh2dGJsLT5zaXplKSwgTEwocG9zLT52b2x1bWVfcG9zKSk7Ci0JfQotCXpmdF9qdXN0X2JlZm9yZV9lb2YgPSAxOwotCVRSQUNFX0VYSVQgMDsgCi19Ci0KLXN0YXRpYyBpbnQgbXRfYnNmbShpbnQgKmFyZykKLXsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCXJlc3VsdCA9IGZzZmJzZm0oLSphcmcsICZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBtdF9mc2ZtKGludCAqYXJnKQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JcmVzdWx0ID0gZnNmYnNmbSgqYXJnLCAmemZ0X3Bvcyk7Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXRfZW9tKGludCAqZHVtbXkpCi17ICAgICAgICAgICAgICAKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQl6ZnRfc2tpcF90b19lb20oJnpmdF9wb3MpOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotc3RhdGljIGludCBtdF9lcmFzZShpbnQgKmR1bW15KQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JcmVzdWx0ID0gemZ0X2VyYXNlKCk7Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgbXRfcmFzMihpbnQgKmR1bW15KQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JcmVzdWx0ID0gLUVOT1NZUzsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0gCi0KLS8qICBTZXRzIHRoZSBuZXcgYmxvY2tzaXplIGluIEJZVEVTCi0gKgotICovCi1zdGF0aWMgaW50IG10X3NldGJsayhpbnQgKm5ld19zaXplKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWlmKCh1bnNpZ25lZCBpbnQpKCpuZXdfc2l6ZSkgPiBaRlRfTUFYX0JMS19TWikgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLCBmdF90X2luZm8sCi0JCQkgICAgImRlc2lyZWQgYmxrX3N6ICglZCkgc2hvdWxkIGJlIDw9ICVkIGJ5dGVzIiwKLQkJCSAgICAqbmV3X3NpemUsIFpGVF9NQVhfQkxLX1NaKTsKLQl9Ci0JaWYgKCgqbmV3X3NpemUgJiAoRlRfU0VDVE9SX1NJWkUtMSkpICE9IDApIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9pbmZvLAotCQkJImRlc2lyZWQgYmxrX3N6ICglZCkgbXVzdCBiZSBhIG11bHRpcGxlIG9mICVkIGJ5dGVzIiwKLQkJCSAgICAqbmV3X3NpemUsIEZUX1NFQ1RPUl9TSVpFKTsKLQl9Ci0JaWYgKCpuZXdfc2l6ZSA9PSAwKSB7Ci0JCWlmICh6ZnRfdXNlX2NvbXByZXNzaW9uKSB7Ci0JCQlUUkFDRV9BQk9SVCgtRUlOVkFMLCBmdF90X2luZm8sCi0JCQkJICAgICJWYXJpYWJsZSBibG9jayBzaXplIG5vdCB5ZXQgIgotCQkJCSAgICAic3VwcG9ydGVkIHdpdGggY29tcHJlc3Npb24iKTsKLQkJfQotCQkqbmV3X3NpemUgPSAxOwotCX0KLQl6ZnRfYmxrX3N6ID0gKm5ld19zaXplOwotCVRSQUNFX0VYSVQgMDsKLX0gCi0KLXN0YXRpYyBpbnQgbXRfc2V0ZGVuc2l0eShpbnQgKmFyZykKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlTRVRfVFJBQ0VfTEVWRUwoKmFyZyk7Ci0JVFJBQ0UoVFJBQ0VfTEVWRUwsICJ0cmFjaW5nIHNldCB0byAlZCIsIFRSQUNFX0xFVkVMKTsKLQlpZiAoKGludClUUkFDRV9MRVZFTCAhPSAqYXJnKSB7Ci0JCVRSQUNFX0VYSVQgLUVJTlZBTDsKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfSAgICAgICAgICAKLQotc3RhdGljIGludCBtdF9zZWVrKGludCAqbmV3X2Jsb2NrX3BvcykKLXsgCi0JaW50IHJlc3VsdD0gMDsgICAgICAgIAotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0JCi0JcmVzdWx0ID0gc2Vla19ibG9jaygwLCAoX19zNjQpKm5ld19ibG9ja19wb3MsICZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyogIE9LLCB0aGlzIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20gU0NTSSwgYnV0IHRoZSB3b3JzdCB0aGluZyB0aGF0IGNhbiAKLSAqICBoYXBwZW4gaXMgdGhhdCB0aGVyZSBpcyBub3QgZW5vdWdoIGRlZnJhZ21lbnRhdGVkIG1lbW9yeSB0aGF0IGNhbiBiZSAKLSAqICBhbGxvY2F0ZWQuIEFsc28sIHRoZXJlIGlzIGEgaGFyZHdpcmVkIGxpbWl0IG9mIDE2IGRtYSBidWZmZXJzIGluIHRoZSAKLSAqICBzdG9jayBmdGFwZSBtb2R1bGUuIFRoaXMgc2hvdWxkbid0IGJyaW5nIHRoZSBzeXN0ZW0gZG93bi4KLSAqCi0gKiBOT1RFOiB0aGUgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSB0b3RhbCBudW1iZXIgb2YgZG1hIGJ1ZmZlcnMgdG8gdXNlLgotICogICAgICAgVGhlIGRyaXZlciBuZWVkcyBhdCBsZWFzdCAzIGJ1ZmZlcnMgdG8gZnVuY3Rpb24gYXQgYWxsLgotICogCi0gKi8KLXN0YXRpYyBpbnQgbXRfc2V0ZHJ2YnVmZmVyKGludCAqY250KQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKCpjbnQgPCAzKSB7Ci0JCVRSQUNFX0VYSVQgLUVJTlZBTDsKLQl9Ci0JVFJBQ0VfQ0FUQ0goZnRhcGVfc2V0X25yX2J1ZmZlcnMoKmNudCksKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0vKiByZXR1cm4gdGhlIGJsb2NrIHBvc2l0aW9uIGZyb20gc3RhcnQgb2Ygdm9sdW1lIAotICovCi1zdGF0aWMgaW50IG10X3RlbGwoaW50ICphcmcpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JKmFyZyAgID0gemZ0X2Rpdl9ibGtzeih6ZnRfcG9zLnZvbHVtZV9wb3MsCi0JCQkgICAgICAgemZ0X2ZpbmRfdm9sdW1lKHpmdF9wb3Muc2VnX3BvcyktPmJsa19zeik7Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1zdGF0aWMgaW50IG10X2NvbXByZXNzaW9uKGludCAqYXJnKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCS8qICBPay4gV2UgY291bGQgYWxzbyBjaGVjayB3aGV0aGVyIGNvbXByZXNzaW9uIGlzIGF2YWlsYWJsZSBhdAotCSAqICBhbGwgYnkgdHJ5aW5nIHRvIGxvYWQgdGhlIGNvbXByZXNzaW9uIG1vZHVsZS4gIFdlIGNvdWxkCi0JICogIGFsc28gY2hlY2sgZm9yIGEgYmxvY2sgc2l6ZSBvZiAxIGJ5dGUgd2hpY2ggaXMgaWxsZWdhbAotCSAqICB3aXRoIGNvbXByZXNzaW9uLiAgSW5zdGVhZCBvZiBkb2luZyBpdCBoZXJlIHdlIHJlbHkgb24KLQkgKiAgemZ0YXBlX3dyaXRlKCkgdG8gZG8gdGhlIHByb3BlciBjaGVja3MuCi0JICovCi0JaWYgKCh1bnNpZ25lZCBpbnQpKmFyZyA+IDEpIHsKLQkJVFJBQ0VfRVhJVCAtRUlOVkFMOwotCX0KLQlpZiAoKmFyZyAhPSAwICYmIHpmdF9ibGtfc3ogPT0gMSkgeyAvKiB2YXJpYWJsZSBibG9jayBzaXplICovCi0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsIGZ0X3RfaW5mbywKLQkJCSAgICAiQ29tcHJlc3Npb24gbm90IHlldCBzdXBwb3J0ZWQgIgotCQkJICAgICJ3aXRoIHZhcmlhYmxlIGJsb2NrIHNpemUiKTsKLQl9Ci0JemZ0X210X2NvbXByZXNzaW9uICA9ICphcmc7Ci0JaWYgKCh6ZnRfdW5pdCAmIFpGVF9aSVBfTU9ERSkgPT0gMCkgewotCQl6ZnRfdXNlX2NvbXByZXNzaW9uID0gemZ0X210X2NvbXByZXNzaW9uOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qICBjaGVjayB3aGV0aGVyIHdyaXRlIGFjY2VzcyBpcyBhbGxvd2VkLiBXcml0ZSBhY2Nlc3MgaXMgZGVuaWVkIHdoZW4KLSAqICArIHpmdF93cml0ZV9wcm90ZWN0ZWQgPT0gMSAtLSB0aGlzIGFjY291bnRzIGZvciBlaXRoZXIgaGFyZCB3cml0ZSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0aW9uIG9mIHRoZSBjYXJ0cmlkZ2Ugb3IgZm9yIAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9fUkRPTkxZIGFjY2VzcyBtb2RlIG9mIHRoZSB0YXBlIGRldmljZQotICogICsgemZ0X29mZmxpbmUgPT0gMSAgICAgICAgIC0tIHRoaXMgbWVhbnkgdGhhdCB0aGVyZSBpcyBlaXRoZXIgbm8gdGFwZSAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGF0IHRoZSBNVE9GRkxJTkUgaW9jdGwgaGFzIGJlZW4gCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNseSBpc3N1ZWQgKGBzb2Z0IGVqZWN0JykKLSAqICArIGZ0X2Zvcm1hdHRlZCA9PSAwICAgICAgICAtLSB0aGlzIG1lYW5zIHRoYXQgdGhlIGNhcnRyaWRnZSBpcyBub3QKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQKLSAqICBUaGVuIHdlIGRpc3RpbnVndWlzaCB0d28gY2FzZXMuIFdoZW4gemZ0X3FpY19tb2RlIGlzIFRSVUUsIHRoZW4gd2UgdHJ5Ci0gKiAgdG8gZW11bGF0ZSBhIGB0cmFkaXRpb25hbCcgKGFrYSBTQ1NJIGxpa2UpIFVOKlggdGFwZSBkZXZpY2UuIFRoZXJlZm9yZSB3ZQotICogIGRlbnkgd3JpdGVzIHdoZW4KLSAqICArIHpmdF9xaWNfbW9kZSA9PTEgJiYgCi0gKiAgICAgICAoIXpmdF90YXBlX2F0X2xib3QoKSAmJiAgIC0tIHRhcGUgbm8gYXQgbG9naWNhbCBCT1QKLSAqICAgICAgICAhKHpmdF90YXBlX2F0X2VvbSgpIHx8ICAgLS0gdGFwZSBub3QgYXQgbG9naWNhbCBFT00gKG9yIEVPRCkKLSAqICAgICAgICAgICh6ZnRfdGFwZV9hdF9lb20oKSAmJgotICogICAgICAgICAgIHpmdF9vbGRfZnRhcGUoKSkpKSAgICAtLSB3ZSBjYW4ndCBhZGQgbmV3IHZvbHVtZSB0byB0YXBlcyAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiBieSBvbGQgZnRhcGUgYmVjYXVzZSBmdGFwZQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb24ndCB1c2UgdGhlIHZvbHVtZSB0YWJsZQotICoKLSAqICB3aGVuIHRoZSBkcml2ZSBpcyBpbiB0cnVlIHJhdyBtb2RlIChha2EgL2Rldi9yYXdmdDApIHRoZW4gd2UgZG9uJ3QgCi0gKiAgY2FyZSBhYm91dCBMQk9UIGFuZCBFT00gY29uZGl0aW9ucy4gVGhpcyBkZXZpY2UgaXMgaW50ZW5kZWQgZm9yIGEgCi0gKiAgdXNlciBsZXZlbCBwcm9ncmFtIHRoYXQgd2FudHMgdG8gdHJ1bHkgaW1wbGVtZW50IHRoZSBRSUMtODAgY29tcGxpYW5jZQotICogIGF0IHRoZSBsb2dpY2FsIGRhdGEgbGF5b3V0IGxldmVsIG9mIHRoZSBjYXJ0cmlkZ2UsIGkuZS4gaW1wbGVtZW50IGFsbAotICogIHRoYXQgdm9sdW1lIHRhYmxlIGFuZCB2b2x1bWUgZGlyZWN0b3J5IHN0dWZmIGV0Yy48Ci0gKi8KLWludCB6ZnRfY2hlY2tfd3JpdGVfYWNjZXNzKHpmdF9wb3NpdGlvbiAqcG9zKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHpmdF9vZmZsaW5lKSB7IC8qIG9mZmxpbmUgaW5jbHVkZXMgbm9fdGFwZSAqLwotCQlUUkFDRV9BQk9SVCgtRU5YSU8sCi0JCQkgICAgZnRfdF9pbmZvLCAidGFwZSBpcyBvZmZsaW5lIG9yIG5vIGNhcnRyaWRnZSIpOwotCX0KLQlpZiAoIWZ0X2Zvcm1hdHRlZCkgewotCQlUUkFDRV9BQk9SVCgtRUFDQ0VTLCBmdF90X2luZm8sICJ0YXBlIGlzIG5vdCBmb3JtYXR0ZWQiKTsKLQl9IAotCWlmICh6ZnRfd3JpdGVfcHJvdGVjdGVkKSB7Ci0JCVRSQUNFX0FCT1JUKC1FQUNDRVMsIGZ0X3RfaW5mbywgImNhcnRyaWRnZSB3cml0ZSBwcm90ZWN0ZWQiKTsKLQl9IAotCWlmICh6ZnRfcWljX21vZGUpIHsKLQkJLyogIGNoZWNrIEJPVCBjb25kaXRpb24gKi8KLQkJaWYgKCF6ZnRfdGFwZV9hdF9sYm90KHBvcykpIHsKLQkJCS8qICBwcm90ZWN0IGNhcnRyaWRnZXMgd3JpdHRlbiBieSBvbGQgZnRhcGUgaWYKLQkJCSAqICBub3QgYXQgQk9UIGJlY2F1c2UgdGhleSB1c2UgdGhlIHZ0YmwKLQkJCSAqICBzZWdtZW50IGZvciBzdG9yaW5nIGRhdGEKLQkJCSAqLwotCQkJaWYgKHpmdF9vbGRfZnRhcGUpIHsKLQkJCQlUUkFDRV9BQk9SVCgtRUFDQ0VTLCBmdF90X3dhcm4sIAotICAgICAgIkNhbm5vdCB3cml0ZSB0byBjYXJ0cmlkZ2VzIHdyaXR0ZW4gYnkgb2xkIGZ0YXBlIHdoZW4gbm90IGF0IEJPVCIpOwotCQkJfQotCQkJLyogIG5vdCBhdCBCT1QsIGJ1dCBhbGxvdyB3cml0ZXMgYXQgRU9ELCBvZiBjb3Vyc2UKLQkJCSAqLwotCQkJaWYgKCF6ZnRfdGFwZV9hdF9lb2QocG9zKSkgewotCQkJCVRSQUNFX0FCT1JUKC1FQUNDRVMsIGZ0X3RfaW5mbywKLQkJCQkJICAgICJ0YXBlIG5vdCBhdCBCT1QgYW5kIG5vdCBhdCBFT0QiKTsKLQkJCX0KLQkJfQotCQkvKiAgZmluZS4gTm93IHRoZSB0YXBlIGlzIGVpdGhlciBhdCBCT1Qgb3IgYXQgRU9ELiAqLwotCX0KLQkvKiBvciBpbiByYXcgbW9kZSBpbiB3aGljaCBjYXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgQk9UIGFuZCBFT0QgKi8KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qICAgICAgT1BFTiByb3V0aW5lIGNhbGxlZCBieSBrZXJuZWwtaW50ZXJmYWNlIGNvZGUKLSAqCi0gKiAgICAgIE5PVEU6IHRoaXMgaXMgYWxzbyBjYWxsZWQgYnkgbXRfcmVzZXQoKSB3aXRoIGRldl9taW5vciA9PSAtMQotICogICAgICAgICAgICB0byBmYWtlIGEgcmVvcGVuIGFmdGVyIGEgcmVzZXQuCi0gKi8KLWludCBfemZ0X29wZW4odW5zaWduZWQgaW50IGRldl9taW5vciwgdW5zaWduZWQgaW50IGFjY2Vzc19tb2RlKQotewotCXN0YXRpYyB1bnNpZ25lZCBpbnQgdGFwZV91bml0OwotCXN0YXRpYyB1bnNpZ25lZCBpbnQgZmlsZV9hY2Nlc3NfbW9kZTsKLQlpbnQgcmVzdWx0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKChpbnQpZGV2X21pbm9yID09IC0xKSB7Ci0JCS8qIGZha2UgcmVvcGVuICovCi0JCXpmdF91bml0ICAgID0gdGFwZV91bml0OwotCQlhY2Nlc3NfbW9kZSA9IGZpbGVfYWNjZXNzX21vZGU7Ci0JCXpmdF9pbml0X2RyaXZlcigpOyAvKiByZXNldCBhbGwgc3RhdGljIGRhdGEgdG8gZGVmYXVsdHMgKi8KLQl9IGVsc2UgewotCQl0YXBlX3VuaXQgICAgICAgID0gZGV2X21pbm9yOwotCQlmaWxlX2FjY2Vzc19tb2RlID0gYWNjZXNzX21vZGU7Ci0JCWlmICgocmVzdWx0ID0gZnRhcGVfZW5hYmxlKEZUQVBFX1NFTChkZXZfbWlub3IpKSkgPCAwKSB7Ci0JCQlUUkFDRV9BQk9SVCgtRU5YSU8sIGZ0X3RfZXJyLAotCQkJCSAgICAiZnRhcGVfZW5hYmxlIGZhaWxlZDogJWQiLCByZXN1bHQpOwotCQl9Ci0JCWlmIChmdF9uZXdfdGFwZSB8fCBmdF9ub190YXBlIHx8ICFmdF9mb3JtYXR0ZWQgfHwKLQkJICAgIChGVEFQRV9TRUwoemZ0X3VuaXQpICE9IEZUQVBFX1NFTChkZXZfbWlub3IpKSB8fAotCQkgICAgKHpmdF91bml0ICYgWkZUX1JBV19NT0RFKSAhPSAoZGV2X21pbm9yICYgWkZUX1JBV19NT0RFKSkgewotCQkJLyogcmVzZXQgYWxsIHN0YXRpYyBkYXRhIHRvIGRlZmF1bHRzLAotCQkJICovCi0JCQl6ZnRfaW5pdF9kcml2ZXIoKTsgCi0JCX0KLQkJemZ0X3VuaXQgPSBkZXZfbWlub3I7Ci0JfQotCXpmdF9zZXRfZmxhZ3MoemZ0X3VuaXQpOyAvKiBkZWNvZGUgdGhlIG1pbm9yIGJpdHMgKi8KLQlpZiAoemZ0X2Jsa19zeiA9PSAxICYmIHpmdF91c2VfY29tcHJlc3Npb24pIHsKLQkJZnRhcGVfZGlzYWJsZSgpOyAvKiByZXNldHMgZnRfbm9fdGFwZSAqLwotCQlUUkFDRV9BQk9SVCgtRU5PREVWLCBmdF90X3dhcm4sICJWYXJpYWJsZSBibG9jayBzaXplIG5vdCB5ZXQgIgotCQkJICAgICJzdXBwb3J0ZWQgd2l0aCBjb21wcmVzc2lvbiIpOwotCX0KLQkvKiAgbm8gbmVlZCBmb3IgbW9zdCBvZiB0aGUgYnVmZmVycyB3aGVuIG5vIHRhcGUgb3Igbm90Ci0JICogIGZvcm1hdHRlZC4gIGZvciB0aGUgcmVhZC93cml0ZSBvcGVyYXRpb25zLCBpdCBpcyB0aGUKLQkgKiAgcmVnYXJkbGVzcyB3aGV0aGVyIHRoZXJlIGlzIG5vIHRhcGUsIGEgbm90LWZvcm1hdHRlZCB0YXBlCi0JICogIG9yIHRoZSB3aGV0aGVyIHRoZSBkcml2ZXIgaXMgc29mdCBvZmZsaW5lLiAgCi0JICogIE5ldmVydGhlbGVzcyB3ZSBhbGxvdyBzb21lIGlvY3RscyB3aXRoIG5vbi1mb3JtYXR0ZWQgdGFwZXMsIAotCSAqICBsaWtlIHJld2luZCBhbmQgcmVzZXQuCi0JICovCi0JaWYgKGZ0X25vX3RhcGUgfHwgIWZ0X2Zvcm1hdHRlZCkgewotCQl6ZnRfdW5pbml0X21lbSgpOwotCX0KLQlpZiAoZnRfbm9fdGFwZSkgewotCQl6ZnRfb2ZmbGluZSA9IDE7IC8qIHNvIHdlIG5lZWQgbm90IHRlc3QgdHdvIHZhcmlhYmxlcyAqLwotCX0KLQlpZiAoKGFjY2Vzc19tb2RlID09IE9fV1JPTkxZIHx8IGFjY2Vzc19tb2RlID09IE9fUkRXUikgJiYKLQkgICAgKGZ0X3dyaXRlX3Byb3RlY3RlZCB8fCBmdF9ub190YXBlKSkgewotCQlmdGFwZV9kaXNhYmxlKCk7IC8qIHJlc2V0cyBmdF9ub190YXBlICovCi0JCVRSQUNFX0FCT1JUKGZ0X25vX3RhcGUgPyAtRU5YSU8gOiAtRVJPRlMsCi0JCQkgICAgZnRfdF93YXJuLCAid3JvbmcgYWNjZXNzIG1vZGUgJXMgY2FydHJpZGdlIiwKLQkJCSAgICBmdF9ub190YXBlID8gIndpdGhvdXQgYSIgOiAid2l0aCB3cml0ZSBwcm90ZWN0ZWQiKTsKLQl9Ci0JemZ0X3dyaXRlX3Byb3RlY3RlZCA9IChhY2Nlc3NfbW9kZSA9PSBPX1JET05MWSB8fCAKLQkJCSAgICAgICBmdF93cml0ZV9wcm90ZWN0ZWQgIT0gMCk7Ci0JaWYgKHpmdF93cml0ZV9wcm90ZWN0ZWQpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJICAgICAgInJlYWQgb25seSBhY2Nlc3MgbW9kZTogJWQsICIKLQkJICAgICAgImRyaXZlIHdyaXRlIHByb3RlY3RlZDogJWQiLCAKLQkJICAgICAgYWNjZXNzX21vZGUgPT0gT19SRE9OTFksCi0JCSAgICAgIGZ0X3dyaXRlX3Byb3RlY3RlZCAhPSAwKTsKLQl9Ci0JaWYgKCF6ZnRfb2ZmbGluZSkgewotCQlUUkFDRV9DQVRDSCh6ZnRfdm1hbGxvY19vbmNlKCZ6ZnRfZGVibG9ja19idWYsRlRfU0VHTUVOVF9TSVpFKSwKLQkJCSAgICBmdGFwZV9kaXNhYmxlKCkpOwotCX0KLQkvKiB6ZnRfc2VnX3BvcyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSB2dGJsIHNlZ3BvcyBidXQgbm90Ci0JICogaWYgaW4gY29tcGF0aWJpbGl0eSBtb2RlIGFuZCBvbmx5IGFmdGVyIHdlIHJlYWQgaW4gdGhlCi0JICogaGVhZGVyIHNlZ21lbnRzCi0JICoKLQkgKiBtaWdodCBhbHNvIGJlIGEgcHJvYmxlbSBpZiB0aGUgdXNlciBtYWtlcyBhIGJhY2t1cCB3aXRoIGEKLQkgKiAqcWZ0KiBkZXZpY2UgYW5kIHJld2luZHMgaXQgd2l0aCBhIHJhdyBkZXZpY2UuCi0JICovCi0JaWYgKHpmdF9xaWNfbW9kZSAgICAgICAgICYmCi0JICAgICF6ZnRfb2xkX2Z0YXBlICAgICAgICYmCi0JICAgIHpmdF9wb3Muc2VnX3BvcyA+PSAwICYmCi0JICAgIHpmdF9oZWFkZXJfcmVhZCAgICAgICYmIAotCSAgICB6ZnRfcG9zLnNlZ19wb3MgPD0gZnRfZmlyc3RfZGF0YV9zZWdtZW50KSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJ5b3UgcHJvYmFibHkgbWl4ZWQgdXAgdGhlIHpmdGFwZSBkZXZpY2VzISIpOwotCQl6ZnRfcmVzZXRfcG9zaXRpb24oJnpmdF9wb3MpOyAKLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi0vKiAgICAgIFJFTEVBU0Ugcm91dGluZSBjYWxsZWQgYnkga2VybmVsLWludGVyZmFjZSBjb2RlCi0gKi8KLWludCBfemZ0X2Nsb3NlKHZvaWQpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYgKHpmdF9vZmZsaW5lKSB7Ci0JCS8qIGNhbGwgdGhlIGhhcmR3YXJlIHJlbGVhc2Ugcm91dGluZS4gUHV0cyB0aGUgZHJpdmUgb2ZmbGluZSAqLwotCQlmdGFwZV9kaXNhYmxlKCk7Ci0JCVRSQUNFX0VYSVQgMDsKLQl9Ci0JaWYgKCEoZnRfd3JpdGVfcHJvdGVjdGVkIHx8IHpmdF9vbGRfZnRhcGUpKSB7Ci0JCXJlc3VsdCA9IHpmdF9mbHVzaF9idWZmZXJzKCk7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJ3cml0aW5nIGZpbGUgbWFyayBhdCBjdXJyZW50IHBvc2l0aW9uIik7Ci0JCWlmICh6ZnRfcWljX21vZGUgJiYgemZ0X2Nsb3NlX3ZvbHVtZSgmemZ0X3BvcykgPT0gMCkgewotCQkJemZ0X21vdmVfcGFzdF9lb2YoJnpmdF9wb3MpOwotCQl9Ci0JCWlmICgoemZ0X3RhcGVfYXRfbGJvdCgmemZ0X3BvcykgfHwKLQkJICAgICAhKHpmdF91bml0ICYgRlRBUEVfTk9fUkVXSU5EKSkpIHsKLQkJCWlmIChyZXN1bHQgPj0gMCkgewotCQkJCXJlc3VsdCA9IHpmdF91cGRhdGVfaGVhZGVyX3NlZ21lbnRzKCk7Ci0JCQl9IGVsc2UgewotCQkJCVRSQUNFKGZ0X3RfZXJyLAotCQkJCSJFcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBoZWFkZXIgc2VnbWVudHMiKTsKLQkJCX0KLQkJfQotCX0KLQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsKLQlpZiAoISh6ZnRfdW5pdCAmIEZUQVBFX05PX1JFV0lORCkpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInJld2luZGluZyB0YXBlIik7Ci0JCWlmIChmdGFwZV9zZWVrX3RvX2JvdCgpIDwgMCAmJiByZXN1bHQgPj0gMCkgewotCQkJcmVzdWx0ID0gLUVJTzsgLyoga2VlcCBvbGQgdmFsdWUgKi8KLQkJfQotCQl6ZnRfcmVzZXRfcG9zaXRpb24oJnpmdF9wb3MpOwotCX0gCi0JemZ0X3phcF9yZWFkX2J1ZmZlcnMoKTsKLQkvKiAgbm93IGZyZWUgdXAgbWVtb3J5IGFzIG11Y2ggYXMgcG9zc2libGUuIFdlIGRvbid0IGRlc3Ryb3kKLQkgKiAgdGhlIGRlYmxvY2sgYnVmZmVyIGlmIGl0IGNvbnRhaW5lcyBhIHZhbGlkIHNlZ21lbnQuCi0JICovCi0JaWYgKHpmdF9kZWJsb2NrX3NlZ21lbnQgPT0gLTEpIHsKLQkJemZ0X3ZmcmVlKCZ6ZnRfZGVibG9ja19idWYsIEZUX1NFR01FTlRfU0laRSk7IAotCX0KLQkvKiBoaWdoIGxldmVsIGRyaXZlciBzdGF0dXMsIGZvcmNlcyBjcmVhdGlvbiBvZiBhIG5ldyB2b2x1bWUKLQkgKiB3aGVuIGNhbGxpbmcgZnRhcGVfd3JpdGUgYWdhaW4gYW5kIG5vdCB6ZnRfanVzdF9iZWZvcmVfZW9mCi0JICovCi0JemZ0X2lvX3N0YXRlID0gemZ0X2lkbGU7ICAKLQlpZiAoZ29pbmdfb2ZmbGluZSkgewotCQl6ZnRfaW5pdF9kcml2ZXIoKTsKLQkJemZ0X3VuaW5pdF9tZW0oKTsKLQkJZ29pbmdfb2ZmbGluZSA9IDA7Ci0JCXpmdF9vZmZsaW5lICAgPSAxOwotCX0gZWxzZSBpZiAoemZ0X2NtcHJfbG9jaygwIC8qIGRvbid0IGxvYWQgKi8pID09IDApIHsKLQkJKCp6ZnRfY21wcl9vcHMtPnJlc2V0KSgpOyAvKiB1bmxvY2sgaXQgYWdhaW4gKi8KLQl9Ci0JemZ0X21lbW9yeV9zdGF0cygpOwotCS8qIGNhbGwgdGhlIGhhcmR3YXJlIHJlbGVhc2Ugcm91dGluZS4gUHV0cyB0aGUgZHJpdmUgb2ZmbGluZSAqLwotCWZ0YXBlX2Rpc2FibGUoKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyoKLSAqICB0aGUgd3JhcHBlciBmdW5jdGlvbiBhcm91bmQgdGhlIHdyYXBwZXIgTVRJT0NUT1AgaW9jdGwKLSAqLwotc3RhdGljIGludCBtdGlvY3RvcChzdHJ1Y3QgbXRvcCAqbXRvcCwgaW50IGFyZ19zaXplKQotewotCWludCByZXN1bHQgPSAwOwotCWZ1bl9lbnRyeSAqbXRfZnVuX2VudHJ5OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWlmIChhcmdfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IG10b3ApIHx8IG10b3AtPm10X29wID49IE5SX01UX0NNRFMpIHsKLQkJVFJBQ0VfRVhJVCAtRUlOVkFMOwotCX0KLQlUUkFDRShmdF90X25vaXNlLCAiY2FsbGluZyBNVElPQ1RPUCBjb21tYW5kOiAlcyIsCi0JICAgICAgbXRfZnVuc1ttdG9wLT5tdF9vcF0ubmFtZSk7Ci0JbXRfZnVuX2VudHJ5PSAmbXRfZnVuc1ttdG9wLT5tdF9vcF07Ci0JemZ0X3Jlc2lkID0gbXRvcC0+bXRfY291bnQ7Ci0JaWYgKCFtdF9mdW5fZW50cnktPm9mZmxpbmUgJiYgemZ0X29mZmxpbmUpIHsKLQkJaWYgKGZ0X25vX3RhcGUpIHsKLQkJCVRSQUNFX0FCT1JUKC1FTlhJTywgZnRfdF9pbmZvLCAibm8gdGFwZSBwcmVzZW50Iik7Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRV9BQk9SVCgtRU5YSU8sIGZ0X3RfaW5mbywgImRyaXZlIGlzIG9mZmxpbmUiKTsKLQkJfQotCX0KLQlpZiAoIW10X2Z1bl9lbnRyeS0+bm90X2Zvcm1hdHRlZCAmJiAhZnRfZm9ybWF0dGVkKSB7Ci0JCVRSQUNFX0FCT1JUKC1FQUNDRVMsIGZ0X3RfaW5mbywgInRhcGUgaXMgbm90IGZvcm1hdHRlZCIpOwotCX0KLQlpZiAoIW10X2Z1bl9lbnRyeS0+d3JpdGVfcHJvdGVjdGVkKSB7Ci0JCVRSQUNFX0NBVENIKHpmdF9jaGVja193cml0ZV9hY2Nlc3MoJnpmdF9wb3MpLCk7Ci0JfQotCWlmIChtdF9mdW5fZW50cnktPm5lZWRfaWRsZV9zdGF0ZSAmJiAhKHpmdF9vZmZsaW5lIHx8ICFmdF9mb3JtYXR0ZWQpKSB7Ci0JCVRSQUNFX0NBVENIKHpmdF9kZWZfaWRsZV9zdGF0ZSgpLCk7Ci0JfQotCWlmICghemZ0X3FpY19tb2RlICYmICFtdF9mdW5fZW50cnktPnJhd19tb2RlKSB7Ci0JCVRSQUNFX0FCT1JUKC1FQUNDRVMsIGZ0X3RfaW5mbywgCi0iRHJpdmUgbmVlZHMgdG8gYmUgaW4gUUlDLTgwIGNvbXBhdGliaWxpdHkgbW9kZSBmb3IgdGhpcyBjb21tYW5kIik7Ci0JfQotCXJlc3VsdCA9IChtdF9mdW5fZW50cnktPmZ1bmN0aW9uKSgmbXRvcC0+bXRfY291bnQpOwotCWlmICh6ZnRfdGFwZV9hdF9sYm90KCZ6ZnRfcG9zKSkgewotCQlUUkFDRV9DQVRDSCh6ZnRfdXBkYXRlX2hlYWRlcl9zZWdtZW50cygpLCk7Ci0JfQotCWlmIChyZXN1bHQgPj0gMCkgewotCQl6ZnRfcmVzaWQgPSAwOwotCX0KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyoKLSAqICBzdGFuZGFyZCBNVElPQ0dFVCBpb2N0bAotICovCi1zdGF0aWMgaW50IG10aW9jZ2V0KHN0cnVjdCBtdGdldCAqbXRnZXQsIGludCBhcmdfc2l6ZSkKLXsKLQljb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lOwotCV9fczY0IG1heF90YXBlX3BvczsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlpZiAoYXJnX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBtdGdldCkpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9pbmZvLCAiYmFkIGFyZ3VtZW50IHNpemU6ICVkIiwKLQkJCSAgICBhcmdfc2l6ZSk7Ci0JfQotCW10Z2V0LT5tdF90eXBlICA9IGZ0X2RyaXZlX3R5cGUudmVuZG9yX2lkICsgMHg4MDAwMDA7Ci0JbXRnZXQtPm10X2RzcmVnID0gZnRfbGFzdF9zdGF0dXMuc3BhY2U7Ci0JbXRnZXQtPm10X2VycmVnID0gZnRfbGFzdF9lcnJvci5zcGFjZTsgLyogZXJyb3IgcmVnaXN0ZXIgKi8KLQltdGdldC0+bXRfcmVzaWQgPSB6ZnRfcmVzaWQ7IC8qIHJlc2lkdXVtIG9mIHdyaXRlcywgcmVhZHMgYW5kCi0JCQkJICAgICAgKiBNVElPQ1RPUCBjb21tYW5kcyAKLQkJCQkgICAgICAqLwotCWlmICghemZ0X29mZmxpbmUpIHsgLyogbmVpdGhlciBub190YXBlIG5vciBzb2Z0IG9mZmxpbmUgKi8KLQkJbXRnZXQtPm10X2dzdGF0ID0gR01UX09OTElORSh+MFVMKTsKLQkJLyogc2hvdWxkIHJhdGhlciByZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgY2FydHJpZGdlCi0JCSAqIHRoYW4gdGhlIGFjY2VzcyBtb2RlIG9mIHRoZSBmaWxlLCB0aGVyZWZvciB1c2UKLQkJICogZnRfd3JpdGVfcHJvdGVjdGVkLCBub3QgemZ0X3dyaXRlX3Byb3RlY3RlZCAKLQkJICovCi0JCWlmIChmdF93cml0ZV9wcm90ZWN0ZWQpIHsKLQkJCW10Z2V0LT5tdF9nc3RhdCB8PSBHTVRfV1JfUFJPVCh+MFVMKTsKLQkJfQotCQlpZih6ZnRfaGVhZGVyX3JlYWQpIHsgLyogdGhpcyBjYXRjaGVzIG5vbi1mb3JtYXR0ZWQgKi8KLQkJCXZvbHVtZSA9IHpmdF9maW5kX3ZvbHVtZSh6ZnRfcG9zLnNlZ19wb3MpOwotCQkJbXRnZXQtPm10X2ZpbGVubyA9IHZvbHVtZS0+Y291bnQ7Ci0JCQltYXhfdGFwZV9wb3MgPSB6ZnRfY2FwYWNpdHkgLSB6ZnRfYmxrX3N6OwotCQkJaWYgKHpmdF91c2VfY29tcHJlc3Npb24pIHsKLQkJCQltYXhfdGFwZV9wb3MgLT0gWkZUX0NNUFJfT1ZFUkhFQUQ7Ci0JCQl9Ci0JCQlpZiAoemZ0X3RhcGVfYXRfZW9kKCZ6ZnRfcG9zKSkgewotCQkJCW10Z2V0LT5tdF9nc3RhdCB8PSBHTVRfRU9EKH4wVUwpOwotCQkJfQotCQkJaWYgKHpmdF9wb3MudGFwZV9wb3MgPiBtYXhfdGFwZV9wb3MpIHsKLQkJCQltdGdldC0+bXRfZ3N0YXQgfD0gR01UX0VPVCh+MFVMKTsKLQkJCX0KLQkJCW10Z2V0LT5tdF9ibGtubyA9IHpmdF9kaXZfYmxrc3ooemZ0X3Bvcy52b2x1bWVfcG9zLAotCQkJCQkJCXZvbHVtZS0+YmxrX3N6KTsKLQkJCWlmICh6ZnRfanVzdF9iZWZvcmVfZW9mKSB7Ci0JCQkJbXRnZXQtPm10X2dzdGF0IHw9IEdNVF9FT0YofjBVTCk7Ci0JCQl9Ci0JCQlpZiAoemZ0X3RhcGVfYXRfbGJvdCgmemZ0X3BvcykpIHsKLQkJCQltdGdldC0+bXRfZ3N0YXQgfD0gR01UX0JPVCh+MFVMKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW10Z2V0LT5tdF9maWxlbm8gPSBtdGdldC0+bXRfYmxrbm8gPSAtMTsKLQkJCWlmIChtdGdldC0+bXRfZHNyZWcgJiBRSUNfU1RBVFVTX0FUX0JPVCkgewotCQkJCW10Z2V0LT5tdF9nc3RhdCB8PSBHTVRfQk9UKH4wVUwpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGZ0X25vX3RhcGUpIHsKLQkJCW10Z2V0LT5tdF9nc3RhdCA9IEdNVF9EUl9PUEVOKH4wVUwpOwotCQl9IGVsc2UgewotCQkJbXRnZXQtPm10X2dzdGF0ID0gMFVMOwotCQl9Ci0gCQltdGdldC0+bXRfZmlsZW5vID0gbXRnZXQtPm10X2Jsa25vID0gLTE7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotI2lmZGVmIE1USU9DUkRGVFNFRwotLyoKLSAqICBSZWFkIGEgZmxvcHB5IHRhcGUgc2VnbWVudC4gVGhpcyBpcyB1c2VmdWwgZm9yIG1hbmlwdWxhdGluZyB0aGUKLSAqICB2b2x1bWUgdGFibGUsIGFuZCByZWFkIHRoZSBvbGQgaGVhZGVyIHNlZ21lbnQgYmVmb3JlIHJlLWZvcm1hdHRpbmcKLSAqICB0aGUgY2FydHJpZGdlLgotICovCi1zdGF0aWMgaW50IG10aW9jcmRmdHNlZyhzdHJ1Y3QgbXRmdHNlZyAqIG10ZnRzZWcsIGludCBhcmdfc2l6ZSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlUUkFDRShmdF90X25vaXNlLCAiTWFnIHRhcGUgaW9jdGwgY29tbWFuZDogTVRJT0NSREZUU0VHIik7Ci0JaWYgKHpmdF9xaWNfbW9kZSkgewotCQlUUkFDRV9BQk9SVCgtRUFDQ0VTLCBmdF90X2luZm8sCi0JCQkgICAgImRyaXZlciBuZWVkcyB0byBiZSBpbiByYXcgbW9kZSBmb3IgdGhpcyBpb2N0bCIpOwotCX0gCi0JaWYgKGFyZ19zaXplICE9IHNpemVvZihzdHJ1Y3QgbXRmdHNlZykpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9pbmZvLCAiYmFkIGFyZ3VtZW50IHNpemU6ICVkIiwKLQkJCSAgICBhcmdfc2l6ZSk7Ci0JfQotCWlmICh6ZnRfb2ZmbGluZSkgewotCQlUUkFDRV9FWElUIC1FTlhJTzsKLQl9Ci0JaWYgKG10ZnRzZWctPm10X21vZGUgIT0gRlRfUkRfU0lOR0xFICYmCi0JICAgIG10ZnRzZWctPm10X21vZGUgIT0gRlRfUkRfQUhFQUQpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9pbmZvLCAiaW52YWxpZCByZWFkIG1vZGUiKTsKLQl9Ci0JaWYgKCFmdF9mb3JtYXR0ZWQpIHsKLQkJVFJBQ0VfRVhJVCAtRUFDQ0VTOyAvKiAtRU5YSU8gPyAqLwotCi0JfQotCWlmICghemZ0X2hlYWRlcl9yZWFkKSB7Ci0JCVRSQUNFX0NBVENIKHpmdF9kZWZfaWRsZV9zdGF0ZSgpLCk7Ci0JfQotCWlmIChtdGZ0c2VnLT5tdF9zZWdubyA+IGZ0X2xhc3RfZGF0YV9zZWdtZW50KSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsIGZ0X3RfaW5mbywgInNlZ21lbnQgbnVtYmVyIGlzIHRvbyBsYXJnZSIpOwotCX0KLQltdGZ0c2VnLT5tdF9yZXN1bHQgPSBmdGFwZV9yZWFkX3NlZ21lbnQobXRmdHNlZy0+bXRfc2Vnbm8sCi0JCQkJCQl6ZnRfZGVibG9ja19idWYsCi0JCQkJCQltdGZ0c2VnLT5tdF9tb2RlKTsKLQlpZiAobXRmdHNlZy0+bXRfcmVzdWx0IDwgMCkgewotCQkvKiAgYSBuZWdhdGl2IHJlc3VsdCBpcyBub3QgYW4gaW9jdGwgZXJyb3IuIGlmCi0JCSAqICB0aGUgdXNlciB3YW50cyB0byByZWFkIGRhbWFnZWQgdGFwZXMsCi0JCSAqICBpdCdzIHVwIHRvIGhlci9oaW0KLQkJICovCi0JCVRSQUNFX0VYSVQgMDsKLQl9Ci0JaWYgKGNvcHlfdG9fdXNlcihtdGZ0c2VnLT5tdF9kYXRhLAotCQkJIHpmdF9kZWJsb2NrX2J1ZiwKLQkJCSBtdGZ0c2VnLT5tdF9yZXN1bHQpICE9IDApIHsKLQkJVFJBQ0VfRVhJVCAtRUZBVUxUOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIE1USU9DV1JGVFNFRwotLyoKLSAqICB3cml0ZSBhIGZsb3BweSB0YXBlIHNlZ21lbnQuIFRoaXMgdmVyc2lvbiBmZWF0dXJlcyB3cml0aW5nIG9mCi0gKiAgZGVsZXRlZCBhZGRyZXNzIG1hcmtzLCBhbmQgZ3JhY2VmdWxseSBpZ25vcmVzIHRoZSAoc29mdHdhcmUpCi0gKiAgZnRfZm9ybWF0dGVkIGZsYWcgdG8gc3VwcG9ydCB3cml0aW5nIG9mIGhlYWRlciBzZWdtZW50cyBhZnRlcgotICogIGZvcm1hdHRpbmcuCi0gKi8KLXN0YXRpYyBpbnQgbXRpb2N3cmZ0c2VnKHN0cnVjdCBtdGZ0c2VnICogbXRmdHNlZywgaW50IGFyZ19zaXplKQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIk1hZyB0YXBlIGlvY3RsIGNvbW1hbmQ6IE1USU9DV1JGVFNFRyIpOwotCWlmICh6ZnRfd3JpdGVfcHJvdGVjdGVkIHx8IHpmdF9xaWNfbW9kZSkgewotCQlUUkFDRV9FWElUIC1FQUNDRVM7Ci0JfSAKLQlpZiAoYXJnX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBtdGZ0c2VnKSkgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLCBmdF90X2luZm8sICJiYWQgYXJndW1lbnQgc2l6ZTogJWQiLAotCQkJICAgIGFyZ19zaXplKTsKLQl9Ci0JaWYgKHpmdF9vZmZsaW5lKSB7Ci0JCVRSQUNFX0VYSVQgLUVOWElPOwotCX0KLQlpZiAobXRmdHNlZy0+bXRfbW9kZSAhPSBGVF9XUl9BU1lOQyAgICYmIAotCSAgICBtdGZ0c2VnLT5tdF9tb2RlICE9IEZUX1dSX01VTFRJICAgJiYKLQkgICAgbXRmdHNlZy0+bXRfbW9kZSAhPSBGVF9XUl9TSU5HTEUgICYmCi0JICAgIG10ZnRzZWctPm10X21vZGUgIT0gRlRfV1JfREVMRVRFKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsIGZ0X3RfaW5mbywgImludmFsaWQgd3JpdGUgbW9kZSIpOwotCX0KLQkvKgotCSAqICBXZSBkb24ndCBjaGVjayBmb3IgZnRfZm9ybWF0dGVkLCBiZWNhdXNlIHRoaXMgZ2l2ZXMKLQkgKiAgb25seSB0aGUgc29mdHdhcmUgc3RhdHVzIG9mIHRoZSBkcml2ZXIuCi0JICoKLQkgKiAgV2UgYXNzdW1lIHRoYXQgdGhlIHVzZXIga25vd3Mgd2hhdCBpdCBpcwotCSAqICBkb2luZy4gQW5kIHJlbHkgb24gdGhlIGxvdyBsZXZlbCBzdHVmZiB0byBmYWlsCi0JICogIHdoZW4gdGhlIHRhcGUgaXNuJ3QgZm9ybWF0dGVkLiBXZSBvbmx5IG1ha2Ugc3VyZQotCSAqICB0aGF0IFRoZSBoZWFkZXIgc2VnbWVudCBidWZmZXIgaXMgYWxsb2NhdGVkLAotCSAqICBiZWNhdXNlIGl0IGhvbGRzIHRoZSBiYWQgc2VjdG9yIG1hcC4KLQkgKi8KLQlpZiAoemZ0X2hzZWdfYnVmID09IE5VTEwpIHsKLQkJVFJBQ0VfRVhJVCAtRU5YSU87Ci0JfQotCWlmIChtdGZ0c2VnLT5tdF9tb2RlICE9IEZUX1dSX0RFTEVURSkgewotCQlpZiAoY29weV9mcm9tX3VzZXIoemZ0X2RlYmxvY2tfYnVmLCAKLQkJCQkgICBtdGZ0c2VnLT5tdF9kYXRhLAotCQkJCSAgIEZUX1NFR01FTlRfU0laRSkgIT0gMCkgewotCQkJVFJBQ0VfRVhJVCAtRUZBVUxUOwotCQl9Ci0JfQotCW10ZnRzZWctPm10X3Jlc3VsdCA9IGZ0YXBlX3dyaXRlX3NlZ21lbnQobXRmdHNlZy0+bXRfc2Vnbm8sIAotCQkJCQkJIHpmdF9kZWJsb2NrX2J1ZiwKLQkJCQkJCSBtdGZ0c2VnLT5tdF9tb2RlKTsKLQlpZiAobXRmdHNlZy0+bXRfcmVzdWx0ID49IDAgJiYgbXRmdHNlZy0+bXRfbW9kZSA9PSBGVF9XUl9TSU5HTEUpIHsKLQkJLyogIAotCQkgKiAgYSBuZWdhdGl2IHJlc3VsdCBpcyBub3QgYW4gaW9jdGwgZXJyb3IuIGlmCi0JCSAqICB0aGUgdXNlciB3YW50cyB0byB3cml0ZSBkYW1hZ2VkIHRhcGVzLAotCQkgKiAgaXQncyB1cCB0byBoZXIvaGltCi0JCSAqLwotCQlpZiAoKHJlc3VsdCA9IGZ0YXBlX2xvb3BfdW50aWxfd3JpdGVzX2RvbmUoKSkgPCAwKSB7Ci0JCQltdGZ0c2VnLT5tdF9yZXN1bHQgPSByZXN1bHQ7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotI2VuZGlmCi0gIAotI2lmZGVmIE1USU9DVk9MSU5GTwotLyoKLSAqICBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdm9sdW1lIHBvc2l0aW9uZWQgYXQuCi0gKi8KLXN0YXRpYyBpbnQgbXRpb2N2b2xpbmZvKHN0cnVjdCBtdHZvbGluZm8gKnZvbGluZm8sIGludCBhcmdfc2l6ZSkKLXsKLQljb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJNYWcgdGFwZSBpb2N0bCBjb21tYW5kOiBNVElPQ1ZPTElORk8iKTsKLQlpZiAoYXJnX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBtdHZvbGluZm8pKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsCi0JCQkgICAgZnRfdF9pbmZvLCAiYmFkIGFyZ3VtZW50IHNpemU6ICVkIiwgYXJnX3NpemUpOwotCX0KLQlpZiAoemZ0X29mZmxpbmUpIHsKLQkJVFJBQ0VfRVhJVCAtRU5YSU87Ci0JfQotCWlmICghZnRfZm9ybWF0dGVkKSB7Ci0JCVRSQUNFX0VYSVQgLUVBQ0NFUzsKLQl9Ci0JVFJBQ0VfQ0FUQ0goemZ0X2RlZl9pZGxlX3N0YXRlKCksKTsKLQl2b2x1bWUgPSB6ZnRfZmluZF92b2x1bWUoemZ0X3Bvcy5zZWdfcG9zKTsKLQl2b2xpbmZvLT5tdF92b2xubyAgID0gdm9sdW1lLT5jb3VudDsKLQl2b2xpbmZvLT5tdF9ibGtzeiAgID0gdm9sdW1lLT5ibGtfc3ogPT0gMSA/IDAgOiB2b2x1bWUtPmJsa19zejsKLQl2b2xpbmZvLT5tdF9zaXplICAgID0gdm9sdW1lLT5zaXplID4+IDEwOwotCXZvbGluZm8tPm10X3Jhd3NpemUgPSAoKHpmdF9jYWxjX3RhcGVfcG9zKHZvbHVtZS0+ZW5kX3NlZyArIDEpID4+IDEwKSAtCi0JCQkgICAgICAgKHpmdF9jYWxjX3RhcGVfcG9zKHZvbHVtZS0+c3RhcnRfc2VnKSA+PiAxMCkpOwotCXZvbGluZm8tPm10X2NtcHIgICAgPSB2b2x1bWUtPnVzZV9jb21wcmVzc2lvbjsKLQlUUkFDRV9FWElUIDA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIFpGVF9PQlNPTEVURSAgCi1zdGF0aWMgaW50IG10aW9jX3pmdGFwZV9nZXRibGtzeihzdHJ1Y3QgbXRibGtzeiAqYmxrc3osIGludCBhcmdfc2l6ZSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlUUkFDRShmdF90X25vaXNlLCAiXG4iCi0JICAgICAgS0VSTl9JTkZPICJNYWcgdGFwZSBpb2N0bCBjb21tYW5kOiBNVElPQ19aVEFQRV9HRVRCTEtTWlxuIgotCSAgICAgIEtFUk5fSU5GTyAiVGhpcyBpb2N0bCBpcyBoZXJlIG1lcmVseSBmb3IgY29tcGF0aWJpbGl0eS5cbiIKLQkgICAgICBLRVJOX0lORk8gIlBsZWFzZSB1c2UgTVRJT0NWT0xJTkZPIGluc3RlYWQiKTsKLQlpZiAoYXJnX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBtdGJsa3N6KSkgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLAotCQkJICAgIGZ0X3RfaW5mbywgImJhZCBhcmd1bWVudCBzaXplOiAlZCIsIGFyZ19zaXplKTsKLQl9Ci0JaWYgKHpmdF9vZmZsaW5lKSB7Ci0JCVRSQUNFX0VYSVQgLUVOWElPOwotCX0KLQlpZiAoIWZ0X2Zvcm1hdHRlZCkgewotCQlUUkFDRV9FWElUIC1FQUNDRVM7Ci0JfQotCVRSQUNFX0NBVENIKHpmdF9kZWZfaWRsZV9zdGF0ZSgpLCk7Ci0JYmxrc3otPm10X2Jsa3N6ID0gemZ0X2ZpbmRfdm9sdW1lKHpmdF9wb3Muc2VnX3BvcyktPmJsa19zejsKLQlUUkFDRV9FWElUIDA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIE1USU9DR0VUU0laRQotLyoKLSAqICBnZXQgdGhlIGNhcGFjaXR5IG9mIHRoZSB0YXBlIGNhcnRyaWRnZS4KLSAqLwotc3RhdGljIGludCBtdGlvY2dldHNpemUoc3RydWN0IG10dGFwZXNpemUgKnNpemUsIGludCBhcmdfc2l6ZSkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlUUkFDRShmdF90X25vaXNlLCAiTWFnIHRhcGUgaW9jdGwgY29tbWFuZDogTVRJT0NfWkZUQVBFX0dFVFNJWkUiKTsKLQlpZiAoYXJnX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBtdHRhcGVzaXplKSkgewotCQlUUkFDRV9BQk9SVCgtRUlOVkFMLAotCQkJICAgIGZ0X3RfaW5mbywgImJhZCBhcmd1bWVudCBzaXplOiAlZCIsIGFyZ19zaXplKTsKLQl9Ci0JaWYgKHpmdF9vZmZsaW5lKSB7Ci0JCVRSQUNFX0VYSVQgLUVOWElPOwotCX0KLQlpZiAoIWZ0X2Zvcm1hdHRlZCkgewotCQlUUkFDRV9FWElUIC1FQUNDRVM7Ci0JfQotCVRSQUNFX0NBVENIKHpmdF9kZWZfaWRsZV9zdGF0ZSgpLCk7Ci0Jc2l6ZS0+bXRfY2FwYWNpdHkgPSAodW5zaWduZWQgaW50KSh6ZnRfY2FwYWNpdHk+PjEwKTsKLQlzaXplLT5tdF91c2VkICAgICA9ICh1bnNpZ25lZCBpbnQpKHpmdF9nZXRfZW9tX3BvcygpPj4xMCk7Ci0JVFJBQ0VfRVhJVCAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbXRpb2Nwb3Moc3RydWN0IG10cG9zICptdHBvcywgaW50IGFyZ19zaXplKQotewotCWludCByZXN1bHQ7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIk1hZyB0YXBlIGlvY3RsIGNvbW1hbmQ6IE1USU9DUE9TIik7Ci0JaWYgKGFyZ19zaXplICE9IHNpemVvZihzdHJ1Y3QgbXRwb3MpKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsCi0JCQkgICAgZnRfdF9pbmZvLCAiYmFkIGFyZ3VtZW50IHNpemU6ICVkIiwgYXJnX3NpemUpOwotCX0KLQlyZXN1bHQgPSBtdF90ZWxsKChpbnQgKikmbXRwb3MtPm10X2Jsa25vKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotI2lmZGVmIE1USU9DRlRGT1JNQVQKLS8qCi0gKiBmb3JtYXR0aW5nIG9mIGZsb3BweSB0YXBlIGNhcnRyaWRnZXMuIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZAotICogdG9nZXRoZXIgd2l0aCB0aGUgTVRJT0NGVENNRCBpb2N0bCBhbmQgdGhlIG5ldyBtbWFwIGZlYXR1cmUgCi0gKi8KLQotLyogCi0gKiAgVGhpcyBmdW5jdGlvbiB1c2VzIGZ0YXBlX2RlY29kZV9oZWFkZXJfc2VnbWVudCgpIHRvIGluZm9ybSB0aGUgbG93Ci0gKiAgbGV2ZWwgZnRhcGUgbW9kdWxlIGFib3V0IHRoZSBuZXcgcGFyYW1ldGVycy4KLSAqCi0gKiAgSXQgZXJhc2VzIHRoZSBoc2VnX2J1Zi4gVGhlIGNhbGxpbmcgcHJvY2VzcyBtdXN0IHNwZWNpZnkgYWxsCi0gKiAgcGFyYW1ldGVycyB0byBhc3N1cmUgcHJvcGVyIG9wZXJhdGlvbi4KLSAqCi0gKiAgcmV0dXJuIHZhbHVlczogLUVJTlZBTCAtIHdyb25nIGFyZ3VtZW50IHNpemUKLSAqICAgICAgICAgICAgICAgICAtRUlOVkFMIC0gaWYgZnRhcGVfZGVjb2RlX2hlYWRlcl9zZWdtZW50KCkgZmFpbGVkLgotICovCi1zdGF0aWMgaW50IHNldF9mb3JtYXRfcGFybXMoc3RydWN0IGZ0Zm10cGFybXMgKnAsIF9fdTggKmhzZWdfYnVmKQotewotCWZ0X3RyYWNlX3Qgb2xkX2xldmVsID0gVFJBQ0VfTEVWRUw7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlUUkFDRShmdF90X25vaXNlLCAiTVRJT0NGVEZPUk1BVCBvcGVyYXRpb24gRlRGTVRfU0VUUEFSTVMiKTsKLQltZW1zZXQoaHNlZ19idWYsIDAsIEZUX1NFR01FTlRfU0laRSk7Ci0JUFVUNChoc2VnX2J1ZiwgRlRfU0lHTkFUVVJFLCBGVF9IU0VHX01BR0lDKTsKLQotCS8qICBmaWxsIGluIHVzZXIgc3BlY2lmaWVkIHBhcmFtZXRlcnMKLQkgKi8KLQloc2VnX2J1ZltGVF9GTVRfQ09ERV0gPSAoX191OClwLT5mdF9mbXRjb2RlOwotCVBVVDIoaHNlZ19idWYsIEZUX1NQVCwgcC0+ZnRfc3B0KTsKLQloc2VnX2J1ZltGVF9UUENdICAgICAgPSAoX191OClwLT5mdF90cGM7Ci0JaHNlZ19idWZbRlRfRkhNXSAgICAgID0gKF9fdTgpcC0+ZnRfZmhtOwotCWhzZWdfYnVmW0ZUX0ZUTV0gICAgICA9IChfX3U4KXAtPmZ0X2Z0bTsKLQotCS8qICBmaWxsIGluIHNhbmUgZGVmYXVsdHMgdG8gbWFrZSBmdGFwZSBoYXBweS4KLQkgKi8gCi0JaHNlZ19idWZbRlRfRlNNXSA9IChfX3U4KTEyODsgLyogMTI4IGlzIGhhcmQgd2lyZWQgYWxsIG92ZXIgZnRhcGUgKi8KLQlpZiAocC0+ZnRfZm10Y29kZSA9PSBmbXRfYmlnKSB7Ci0JCVBVVDQoaHNlZ19idWYsIEZUXzZfSFNFR18xLCAgIDApOwotCQlQVVQ0KGhzZWdfYnVmLCBGVF82X0hTRUdfMiwgICAxKTsKLQkJUFVUNChoc2VnX2J1ZiwgRlRfNl9GUlNUX1NFRywgMik7Ci0JCVBVVDQoaHNlZ19idWYsIEZUXzZfTEFTVF9TRUcsIHAtPmZ0X3NwdCAqIHAtPmZ0X3RwYyAtIDEpOwotCX0gZWxzZSB7Ci0JCVBVVDIoaHNlZ19idWYsIEZUX0hTRUdfMSwgICAgMCk7Ci0JCVBVVDIoaHNlZ19idWYsIEZUX0hTRUdfMiwgICAgMSk7Ci0JCVBVVDIoaHNlZ19idWYsIEZUX0ZSU1RfU0VHLCAgMik7Ci0JCVBVVDIoaHNlZ19idWYsIEZUX0xBU1RfU0VHLCBwLT5mdF9zcHQgKiBwLT5mdF90cGMgLSAxKTsKLQl9Ci0KLQkvKiAgU3luY2hyb25pemUgd2l0aCB0aGUgbG93IGxldmVsIG1vZHVsZS4gVGhpcyBpcyBwYXJ0aWN1bGFybHkKLQkgKiAgbmVlZGVkIGZvciB1bmZvcm1hdHRlZCBjYXJ0cmlkZ2VzIGFzIHRoZSBRSUMgc3RkIHdhcyBwcmV2aW91c2x5IAotCSAqICB1bmtub3duIEJVVCBpcyBuZWVkZWQgdG8gc2V0IGRhdGEgcmF0ZSBhbmQgdG8gY2FsY3VsYXRlIHRpbWVvdXRzLgotCSAqLwotCVRSQUNFX0NBVENIKGZ0YXBlX2NhbGlicmF0ZV9kYXRhX3JhdGUocC0+ZnRfcWljc3RkJlFJQ19UQVBFX1NURF9NQVNLKSwKLQkJICAgIF9yZXMgPSAtRUlOVkFMKTsKLQotCS8qICBUaGUgZm9sbG93aW5nIHdpbGwgYWxzbyByZWNhbGN1YWx0ZSB0aGUgdGltZW91dHMgZm9yIHRoZSB0YXBlCi0JICogIGxlbmd0aCBhbmQgUUlDIHN0ZCB3ZSB3YW50IHRvIGZvcm1hdCB0by4KLQkgKiAgYWJvcnQgd2l0aCAtRUlOVkFMIHJhdGhlciB0aGFuIC1FSU8KLQkgKi8KLQlTRVRfVFJBQ0VfTEVWRUwoZnRfdF93YXJuKTsKLQlUUkFDRV9DQVRDSChmdGFwZV9kZWNvZGVfaGVhZGVyX3NlZ21lbnQoaHNlZ19idWYpLAotCQkgICAgU0VUX1RSQUNFX0xFVkVMKG9sZF9sZXZlbCk7IF9yZXMgPSAtRUlOVkFMKTsKLQlTRVRfVFJBQ0VfTEVWRUwob2xkX2xldmVsKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qCi0gKiAgUmV0dXJuIHRoZSBpbnRlcm5hbCBTT0ZUV0FSRSBzdGF0dXMgb2YgdGhlIGtlcm5lbCBkcml2ZXIuIFRoaXMgZG9lcwotICogIE5PVCBxdWVyeSB0aGUgdGFwZSBkcml2ZSBhYm91dCBpdHMgc3RhdHVzLgotICovCi1zdGF0aWMgaW50IGdldF9mb3JtYXRfcGFybXMoc3RydWN0IGZ0Zm10cGFybXMgKnAsIF9fdTggKmhzZWdfYnVmZmVyKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIk1USU9DRlRGT1JNQVQgb3BlcmF0aW9uIEZURk1UX0dFVFBBUk1TIik7Ci0JcC0+ZnRfcWljc3RkICA9IGZ0X3FpY19zdGQ7Ci0JcC0+ZnRfZm10Y29kZSA9IGZ0X2Zvcm1hdF9jb2RlOwotCXAtPmZ0X2ZobSAgICAgPSBoc2VnX2J1ZmZlcltGVF9GSE1dOwotCXAtPmZ0X2Z0bSAgICAgPSBoc2VnX2J1ZmZlcltGVF9GVE1dOwotCXAtPmZ0X3NwdCAgICAgPSBmdF9zZWdtZW50c19wZXJfdHJhY2s7Ci0JcC0+ZnRfdHBjICAgICA9IGZ0X3RyYWNrc19wZXJfdGFwZTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXRpb2NmdGZvcm1hdChzdHJ1Y3QgbXRmdGZvcm1hdCAqbXRmdGZvcm1hdCwgaW50IGFyZ19zaXplKQotewotCWludCByZXN1bHQ7Ci0JdW5pb24gZm10X2FyZyAqYXJnID0gJm10ZnRmb3JtYXQtPmZtdF9hcmc7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlUUkFDRShmdF90X25vaXNlLCAiTWFnIHRhcGUgaW9jdGwgY29tbWFuZDogTVRJT0NGVEZPUk1BVCIpOwotCWlmICh6ZnRfb2ZmbGluZSkgewotCQlpZiAoZnRfbm9fdGFwZSkgewotCQkJVFJBQ0VfQUJPUlQoLUVOWElPLCBmdF90X2luZm8sICJubyB0YXBlIHByZXNlbnQiKTsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFX0FCT1JUKC1FTlhJTywgZnRfdF9pbmZvLCAiZHJpdmUgaXMgb2ZmbGluZSIpOwotCQl9Ci0JfQotCWlmICh6ZnRfcWljX21vZGUpIHsKLQkJVFJBQ0VfQUJPUlQoLUVBQ0NFUywgZnRfdF9pbmZvLAotCQkJICAgICJkcml2ZXIgbmVlZHMgdG8gYmUgaW4gcmF3IG1vZGUgZm9yIHRoaXMgaW9jdGwiKTsKLQl9IAotCWlmICh6ZnRfaHNlZ19idWYgPT0gTlVMTCkgewotCQlUUkFDRV9DQVRDSCh6ZnRfdmNhbGxvY19vbmNlKCZ6ZnRfaHNlZ19idWYsIEZUX1NFR01FTlRfU0laRSksKTsKLQl9Ci0JemZ0X2hlYWRlcl9yZWFkID0gMDsKLQlzd2l0Y2gobXRmdGZvcm1hdC0+Zm10X29wKSB7Ci0JY2FzZSBGVEZNVF9TRVRfUEFSTVM6Ci0JCVRSQUNFX0NBVENIKHNldF9mb3JtYXRfcGFybXMoJmFyZy0+Zm10X3Bhcm1zLCB6ZnRfaHNlZ19idWYpLCk7Ci0JCVRSQUNFX0VYSVQgMDsKLQljYXNlIEZURk1UX0dFVF9QQVJNUzoKLQkJVFJBQ0VfQ0FUQ0goZ2V0X2Zvcm1hdF9wYXJtcygmYXJnLT5mbXRfcGFybXMsIHpmdF9oc2VnX2J1ZiksKTsKLQkJVFJBQ0VfRVhJVCAwOwotCWNhc2UgRlRGTVRfRk9STUFUX1RSQUNLOgotCQlpZiAoKGZ0X2Zvcm1hdHRlZCAmJiB6ZnRfY2hlY2tfd3JpdGVfYWNjZXNzKCZ6ZnRfcG9zKSA8IDApIHx8Ci0JCSAgICAoIWZ0X2Zvcm1hdHRlZCAmJiB6ZnRfd3JpdGVfcHJvdGVjdGVkKSkgewotCQkJVFJBQ0VfQUJPUlQoLUVBQ0NFUywgZnRfdF9pbmZvLCAiV3JpdGUgYWNjZXNzIGRlbmllZCIpOwotCQl9Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX2Zvcm1hdF90cmFjayhhcmctPmZtdF90cmFjay5mdF90cmFjaywKLQkJCQkJICAgICAgIGFyZy0+Zm10X3RyYWNrLmZ0X2dhcDMpLCk7Ci0JCVRSQUNFX0VYSVQgMDsKLQljYXNlIEZURk1UX1NUQVRVUzoKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfZm9ybWF0X3N0YXR1cygmYXJnLT5mbXRfc3RhdHVzLmZ0X3NlZ21lbnQpLCk7Ci0JCVRSQUNFX0VYSVQgMDsKLQljYXNlIEZURk1UX1ZFUklGWToKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfdmVyaWZ5X3NlZ21lbnQoYXJnLT5mbXRfdmVyaWZ5LmZ0X3NlZ21lbnQsCi0JCQkJKFNlY3Rvck1hcCAqKSZhcmctPmZtdF92ZXJpZnkuZnRfYnNtKSwpOwotCQlUUkFDRV9FWElUIDA7Ci0JZGVmYXVsdDoKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9lcnIsICJJbnZhbGlkIGZvcm1hdCBvcGVyYXRpb24iKTsKLQl9Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIE1USU9DRlRDTUQKLS8qCi0gKiAgc2VuZCBhIFFJQy0xMTcgY29tbWFuZCB0byB0aGUgZHJpdmUsIHdpdGggb3B0aW9uYWwgdGltZW91dHMsCi0gKiAgcGFyYW1ldGVyIGFuZCByZXN1bHQgYml0cy4gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvZ2V0aGVyCi0gKiAgd2l0aCB0aGUgZm9ybWF0dGluZyBpb2N0bC4KLSAqLwotc3RhdGljIGludCBtdGlvY2Z0Y21kKHN0cnVjdCBtdGZ0Y21kICpmdGNtZCwgaW50IGFyZ19zaXplKQotewotCWludCBpOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIk1hZyB0YXBlIGlvY3RsIGNvbW1hbmQ6IE1USU9DRlRDTUQiKTsKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJVFJBQ0VfQUJPUlQoLUVQRVJNLCBmdF90X2luZm8sCi0JCQkgICAgIm5lZWQgQ0FQX1NZU19BRE1JTiBjYXBhYmlsaXR5IHRvIHNlbmQgcmF3IHFpYy0xMTcgY29tbWFuZHMiKTsKLQl9Ci0JaWYgKHpmdF9xaWNfbW9kZSkgewotCQlUUkFDRV9BQk9SVCgtRUFDQ0VTLCBmdF90X2luZm8sCi0JCQkgICAgImRyaXZlciBuZWVkcyB0byBiZSBpbiByYXcgbW9kZSBmb3IgdGhpcyBpb2N0bCIpOwotCX0gCi0JaWYgKGFyZ19zaXplICE9IHNpemVvZihzdHJ1Y3QgbXRmdGNtZCkpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwKLQkJCSAgICBmdF90X2luZm8sICJiYWQgYXJndW1lbnQgc2l6ZTogJWQiLCBhcmdfc2l6ZSk7Ci0JfQotCWlmIChmdGNtZC0+ZnRfd2FpdF9iZWZvcmUpIHsKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfcmVhZHlfd2FpdChmdGNtZC0+ZnRfd2FpdF9iZWZvcmUsCi0JCQkJCSAgICAgJmZ0Y21kLT5mdF9zdGF0dXMpLCk7Ci0JfQotCWlmIChmdGNtZC0+ZnRfc3RhdHVzICYgUUlDX1NUQVRVU19FUlJPUikKLQkJZ290byBmdG10Y21kX2Vycm9yOwotCWlmIChmdGNtZC0+ZnRfcmVzdWx0X2JpdHMgIT0gMCkgewotCQlUUkFDRV9DQVRDSChmdGFwZV9yZXBvcnRfb3BlcmF0aW9uKCZmdGNtZC0+ZnRfcmVzdWx0LAotCQkJCQkJICAgZnRjbWQtPmZ0X2NtZCwKLQkJCQkJCSAgIGZ0Y21kLT5mdF9yZXN1bHRfYml0cyksKTsKLQl9IGVsc2UgewotCQlUUkFDRV9DQVRDSChmdGFwZV9jb21tYW5kKGZ0Y21kLT5mdF9jbWQpLCk7Ci0JCWlmIChmdGNtZC0+ZnRfc3RhdHVzICYgUUlDX1NUQVRVU19FUlJPUikKLQkJCWdvdG8gZnRtdGNtZF9lcnJvcjsKLQkJZm9yIChpID0gMDsgaSA8IGZ0Y21kLT5mdF9wYXJtX2NudDsgaSsrKSB7Ci0JCQlUUkFDRV9DQVRDSChmdGFwZV9wYXJhbWV0ZXIoZnRjbWQtPmZ0X3Bhcm1zW2ldJjB4MGYpLCk7Ci0JCQlpZiAoZnRjbWQtPmZ0X3N0YXR1cyAmIFFJQ19TVEFUVVNfRVJST1IpCi0JCQkJZ290byBmdG10Y21kX2Vycm9yOwotCQl9Ci0JfQotCWlmIChmdGNtZC0+ZnRfd2FpdF9hZnRlciAhPSAwKSB7Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX3JlYWR5X3dhaXQoZnRjbWQtPmZ0X3dhaXRfYWZ0ZXIsCi0JCQkJCSAgICAgJmZ0Y21kLT5mdF9zdGF0dXMpLCk7Ci0JfQotZnRtdGNtZF9lcnJvcjoJICAgICAgIAotCWlmIChmdGNtZC0+ZnRfc3RhdHVzICYgUUlDX1NUQVRVU19FUlJPUikgewotCQlUUkFDRShmdF90X25vaXNlLCAiZXJyb3Igc3RhdHVzIHNldCIpOwotCQlUUkFDRV9DQVRDSChmdGFwZV9yZXBvcnRfZXJyb3IoJmZ0Y21kLT5mdF9lcnJvciwKLQkJCQkJICAgICAgICZmdGNtZC0+ZnRfY21kLCAxKSwpOwotCX0KLQlUUkFDRV9FWElUIDA7IC8qIHRoaXMgaXMgbm90IGFuIGkvbyBlcnJvciAqLwotfQotI2VuZGlmCi0KLS8qICBJT0NUTCByb3V0aW5lIGNhbGxlZCBieSBrZXJuZWwtaW50ZXJmYWNlIGNvZGUKLSAqLwotaW50IF96ZnRfaW9jdGwodW5zaWduZWQgaW50IGNvbW1hbmQsIHZvaWQgX191c2VyICogYXJnKQotewotCWludCByZXN1bHQ7Ci0JdW5pb24geyBzdHJ1Y3QgbXRvcCAgICAgICBtdG9wOwotCQlzdHJ1Y3QgbXRnZXQgICAgICBtdGdldDsKLQkJc3RydWN0IG10cG9zICAgICAgbXRwb3M7Ci0jaWZkZWYgTVRJT0NSREZUU0VHCi0JCXN0cnVjdCBtdGZ0c2VnICAgIG10ZnRzZWc7Ci0jZW5kaWYKLSNpZmRlZiBNVElPQ1ZPTElORk8KLQkJc3RydWN0IG10dm9saW5mbyAgbXR2b2xpbmZvOwotI2VuZGlmCi0jaWZkZWYgTVRJT0NHRVRTSVpFCi0JCXN0cnVjdCBtdHRhcGVzaXplIG10dGFwZXNpemU7Ci0jZW5kaWYKLSNpZmRlZiBNVElPQ0ZURk9STUFUCi0JCXN0cnVjdCBtdGZ0Zm9ybWF0IG10ZnRmb3JtYXQ7Ci0jZW5kaWYKLSNpZmRlZiBaRlRfT0JTT0xFVEUKLQkJc3RydWN0IG10Ymxrc3ogbXRibGtzejsKLSNlbmRpZgotI2lmZGVmIE1USU9DRlRDTUQKLQkJc3RydWN0IG10ZnRjbWQgbXRmdGNtZDsKLSNlbmRpZgotCX0ga3JubF9hcmc7Ci0JaW50IGFyZ19zaXplID0gX0lPQ19TSVpFKGNvbW1hbmQpOwotCWludCBkaXIgPSBfSU9DX0RJUihjb21tYW5kKTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCS8qIFRoaXMgY2hlY2sgd2lsbCBvbmx5IGNhdGNoIGFyZ3VtZW50cyB0aGF0IGFyZSB0b28gbGFyZ2UgIQotCSAqLwotCWlmIChkaXIgJiAoX0lPQ19SRUFEIHwgX0lPQ19XUklURSkgJiYgYXJnX3NpemUgPiBzaXplb2Yoa3JubF9hcmcpKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsCi0JCQkgICAgZnRfdF9pbmZvLCAiYmFkIGFyZ3VtZW50IHNpemU6ICVkIiwgYXJnX3NpemUpOwotCX0KLQlpZiAoZGlyICYgX0lPQ19XUklURSkgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmtybmxfYXJnLCBhcmcsIGFyZ19zaXplKSAhPSAwKSB7Ci0JCQlUUkFDRV9FWElUIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0JVFJBQ0UoZnRfdF9mbG93LCAiY2FsbGVkIHdpdGggaW9jdGwgY29tbWFuZDogMHglMDh4IiwgY29tbWFuZCk7Ci0Jc3dpdGNoIChjb21tYW5kKSB7Ci0JY2FzZSBNVElPQ1RPUDoKLQkJcmVzdWx0ID0gbXRpb2N0b3AoJmtybmxfYXJnLm10b3AsIGFyZ19zaXplKTsKLQkJYnJlYWs7Ci0JY2FzZSBNVElPQ0dFVDoKLQkJcmVzdWx0ID0gbXRpb2NnZXQoJmtybmxfYXJnLm10Z2V0LCBhcmdfc2l6ZSk7Ci0JCWJyZWFrOwotCWNhc2UgTVRJT0NQT1M6Ci0JCXJlc3VsdCA9IG10aW9jcG9zKCZrcm5sX2FyZy5tdHBvcywgYXJnX3NpemUpOwotCQlicmVhazsKLSNpZmRlZiBNVElPQ1ZPTElORk8KLQljYXNlIE1USU9DVk9MSU5GTzoKLQkJcmVzdWx0ID0gbXRpb2N2b2xpbmZvKCZrcm5sX2FyZy5tdHZvbGluZm8sIGFyZ19zaXplKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBaRlRfT0JTT0xFVEUKLQljYXNlIE1USU9DX1pGVEFQRV9HRVRCTEtTWjoKLQkJcmVzdWx0ID0gbXRpb2NfemZ0YXBlX2dldGJsa3N6KCZrcm5sX2FyZy5tdGJsa3N6LCBhcmdfc2l6ZSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgTVRJT0NSREZUU0VHCi0JY2FzZSBNVElPQ1JERlRTRUc6IC8qIHJlYWQgYSBzZWdtZW50IHZpYSBpb2N0bCAqLwotCQlyZXN1bHQgPSBtdGlvY3JkZnRzZWcoJmtybmxfYXJnLm10ZnRzZWcsIGFyZ19zaXplKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBNVElPQ1dSRlRTRUcKLQljYXNlIE1USU9DV1JGVFNFRzogLyogd3JpdGUgYSBzZWdtZW50IHZpYSBpb2N0bCAqLwotCQlyZXN1bHQgPSBtdGlvY3dyZnRzZWcoJmtybmxfYXJnLm10ZnRzZWcsIGFyZ19zaXplKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBNVElPQ0dFVFNJWkUKLQljYXNlIE1USU9DR0VUU0laRToKLQkJcmVzdWx0ID0gbXRpb2NnZXRzaXplKCZrcm5sX2FyZy5tdHRhcGVzaXplLCBhcmdfc2l6ZSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgTVRJT0NGVEZPUk1BVAotCWNhc2UgTVRJT0NGVEZPUk1BVDoKLQkJcmVzdWx0ID0gbXRpb2NmdGZvcm1hdCgma3JubF9hcmcubXRmdGZvcm1hdCwgYXJnX3NpemUpOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIE1USU9DRlRDTUQKLQljYXNlIE1USU9DRlRDTUQ6Ci0JCXJlc3VsdCA9IG10aW9jZnRjbWQoJmtybmxfYXJnLm10ZnRjbWQsIGFyZ19zaXplKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXN1bHQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JaWYgKChyZXN1bHQgPj0gMCkgJiYgKGRpciAmIF9JT0NfUkVBRCkpIHsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZrcm5sX2FyZywgYXJnX3NpemUpICE9IDApIHsKLQkJCVRSQUNFX0VYSVQgLUVGQVVMVDsKLQkJfQotCX0KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWN0bC5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNmYyZDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0jaWZuZGVmIF9aRlRBUEVfQ1RMX0gKLSNkZWZpbmUgX1pGVEFQRV9DVExfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uIAotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL3pmdGFwZS96ZnRhcGUtY3RsLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOTowMiAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG5vbi1zdGFuZGFyZCBJT0NUTCByZWxhdGVkIGRlZmluaXRpb25zCi0gKiAgICAgIGZvciB0aGUgUUlDLTQwLzgwIGZsb3BweS10YXBlIGRyaXZlciBmb3IgTGludXguCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRpby5oPgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1ydy5oIgotCi0jaWZkZWYgQ09ORklHX1pGVEFQRV9NT0RVTEUKLSNkZWZpbmUgZnRhcGVfc3RhdHVzICgqemZ0X3N0YXR1cykKLSNlbmRpZgotCi1leHRlcm4gaW50IHpmdF9vZmZsaW5lOwotZXh0ZXJuIGludCB6ZnRfbXRfY29tcHJlc3Npb247Ci1leHRlcm4gaW50IHpmdF93cml0ZV9wcm90ZWN0ZWQ7Ci1leHRlcm4gaW50IHpmdF9oZWFkZXJfcmVhZDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgemZ0X3VuaXQ7Ci1leHRlcm4gaW50IHpmdF9yZXNpZDsKLQotZXh0ZXJuIHZvaWQgemZ0X3Jlc2V0X3Bvc2l0aW9uKHpmdF9wb3NpdGlvbiAqcG9zKTsKLWV4dGVybiBpbnQgIHpmdF9jaGVja193cml0ZV9hY2Nlc3MoemZ0X3Bvc2l0aW9uICpwb3MpOwotZXh0ZXJuIGludCAgemZ0X2RlZl9pZGxlX3N0YXRlKHZvaWQpOwotCi0vKiAgaG9va3MgZm9yIHRoZSBWRlMgaW50ZXJmYWNlIAotICovCi1leHRlcm4gaW50ICBfemZ0X29wZW4odW5zaWduZWQgaW50IGRldl9taW5vciwgdW5zaWduZWQgaW50IGFjY2Vzc19tb2RlKTsKLWV4dGVybiBpbnQgIF96ZnRfY2xvc2Uodm9pZCk7Ci1leHRlcm4gaW50ICBfemZ0X2lvY3RsKHVuc2lnbmVkIGludCBjb21tYW5kLCB2b2lkIF9fdXNlciAqYXJnKTsKLSNlbmRpZgotCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtZW9mLmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1lb2YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNhZGNhZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1lb2YuYworKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotICogICBJIHVzZSB0aGVzZSByb3V0aW5lcyBqdXN0IHRvIGRlY2lkZSB3aGVuIEkgaGF2ZSB0byBmYWtlIGEgCi0gKiAgIHZvbHVtZS10YWJsZSB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHRvIG9yaWdpbmFsIGZ0YXBlLgotICovCi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NSBCYXMgTGFhcmhvdmVuLgotICogICAgICAKLSAqICAgICAgTW9kaWZpZWQgZm9yIHpmdGFwZSAxOTk2LCAxOTk3IENsYXVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL3pmdGFwZS96ZnRhcGUtZW9mLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOTowMiAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGVvZiBtYXJrIGhhbmRsaW5nIGNvZGUKLSAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAgZmxvcHB5LXRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3pmdGFwZS5oPgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1ydy5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtZW9mLmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLQotLyogYSBjb3B5IG9mIHRoZSBmYWlsZWQgc2VjdG9yIGxvZyBmcm9tIHRoZSBoZWFkZXIgc2VnbWVudC4KLSAqLwotZW9mX21hcmtfdW5pb24gKnpmdF9lb2ZfbWFwOwotCi0vKiBudW1iZXIgb2YgZW9mIG1hcmtzIChlbnRyaWVzIGluIGJhZCBzZWN0b3IgbG9nKSBvbiB0YXBlLgotICovCi1pbnQgemZ0X25yX2VvZl9tYXJrcyA9IC0xOwotCi0KLS8qICAgICAgTG9jYWwgdmFycy4KLSAqLwotCi1zdGF0aWMgY2hhciBsaW51eF90YXBlX2xhYmVsW10gPSAiTGludXggcmF3IGZvcm1hdCBWIjsKLWVudW0geyAKLQltaW5fZm10X3ZlcnNpb24gPSAxLCBtYXhfZm10X3ZlcnNpb24gPSAyIAotfTsKLXN0YXRpYyB1bnNpZ25lZCBmdGFwZV9mbXRfdmVyc2lvbiA9IDA7Ci0KLQotLyogRnRhcGUgKG1pcyl1c2VzIHRoZSBiYWQgc2VjdG9yIGxvZyB0byByZWNvcmQgZW5kLW9mLWZpbGUgbWFya3MuCi0gKiBJbml0aWFsbHkgKHdoZW4gdGhlIHRhcGUgaXMgZXJhc2VkKSBhbGwgZW50cmllcyBpbiB0aGUgYmFkIHNlY3RvcgotICogbG9nIGFyZSBhZGRlZCB0byB0aGUgdGFwZSdzIGJhZCBzZWN0b3IgbWFwLiBUaGUgYmFkIHNlY3RvciBsb2cgdGhlbgotICogaXMgY2xlYXJlZC4KLSAqCi0gKiBUaGUgYmFkIHNlY3RvciBsb2cgbm9ybWFsbHkgY29udGFpbnMgZW50cmllcyBvZiB0aGUgZm9ybTogCi0gKiBldmVuIDE2LWJpdCB3b3JkOiBzZWdtZW50IG51bWJlciBvZiBiYWQgc2VjdG9yIAotICogb2RkIDE2LWJpdCB3b3JkOiBlbmNvZGVkIGRhdGUKLSAqIFRoZXJlIGNhbiBiZSBhIHRvdGFsIG9mIDQ0OCBlbnRyaWVzICgxNzkyIGJ5dGVzKS4KLSAqCi0gKiBNeSBndWVzcyBpcyB0aGF0IG5vIHByb2dyYW0gaXMgdXNpbmcgdGhpcyBiYWQgc2VjdG9yIGxvZyAodGhlICoKLSAqIGZvcm1hdCBzZWVtcyB1c2VsZXNzIGFzIHRoZXJlIGlzIG5vIGluZGljYXRpb24gb2YgdGhlIGJhZCBzZWN0b3IKLSAqIGl0c2VsZiwgb25seSB0aGUgc2VnbWVudCkgSG93ZXZlciwgaWYgYW55IHByb2dyYW0gZG9lcyB1c2UgdGhlIGJhZAotICogc2VjdG9yIGxvZywgdGhlIGZvcm1hdCB1c2VkIGJ5IGZ0YXBlIHdpbGwgbGV0IHRoZSBwcm9ncmFtIHRoaW5rCi0gKiB0aGVyZSBhcmUgc29tZSBiYWQgc2VjdG9ycyBhbmQgbm8gaGFybSBpcyBkb25lLgotICogIAotICogVGhlIGVvZiBtYXJrIGVudHJpZXMgdGhhdCBmdGFwZSBzdG9yZXMgaW4gdGhlIGJhZCBzZWN0b3IgbG9nOiBldmVuCi0gKiAxNi1iaXQgd29yZDogc2VnbWVudCBudW1iZXIgb2YgZW9mIG1hcmsgb2RkIDE2LWJpdCB3b3JkOiBzZWN0b3IKLSAqIG51bWJlciBvZiBlb2YgbWFyayBbMS4uMzJdCi0gKiAgCi0gKiBUaGUgemZ0X2VvZl9tYXAgYXMgbWFpbnRhaW5lZCBpcyBhIHNvcnRlZCBsaXN0IG9mIGVvZiBtYXJrIGVudHJpZXMuCi0gKgotICoKLSAqIFRoZSB0YXBlIG5hbWUgZmllbGQgaW4gdGhlIGhlYWRlciBzZWdtZW50cyBpcyB1c2VkIHRvIHN0b3JlIGEgbGludXgKLSAqIHRhcGUgaWRlbnRpZmljYXRpb24gc3RyaW5nIGFuZCBhIHZlcnNpb24gbnVtYmVyLiAgVGhpcyB3YXkgdGhlIHRhcGUKLSAqIGNhbiBiZSByZWNvZ25pemVkIGFzIGEgTGludXggcmF3IGZvcm1hdCB0YXBlIHdoZW4gdXNpbmcgdG9vbHMgdW5kZXIKLSAqIG90aGVyIE9TJ3MuCi0gKgotICogJ1dpZGUnIFFJQyB0YXBlcyAoZm9ybWF0IGNvZGUgNCkgZG9uJ3QgaGF2ZSBhIGZhaWxlZCBzZWN0b3IgbGlzdAotICogYW55bW9yZS4gVGhhdCBzcGFjZSBpcyB1c2VkIGZvciB0aGUgKGxvbmdlcikgYmFkIHNlY3RvciBtYXAgdGhhdAotICogbm93IGlzIGEgdmFyaWFibGUgbGVuZ3RoIGxpc3QgdG9vLiAgV2Ugbm93IHN0b3JlIG91ciBlbmQtb2YtZmlsZQotICogbWFya2VyIGxpc3QgYWZ0ZXIgdGhlIGJhZC1zZWN0b3ItbWFwIG9uIHRhcGUuIFRoZSBsaXN0IGlzIGRlbGltaXRlZAotICogYnkgYSAoX191MzIpIDAgZW50cnkuCi0gKi8KLQotaW50IHpmdF9mdGFwZV92YWxpZGF0ZV9sYWJlbChjaGFyICpsYWJlbCkKLXsKLQlzdGF0aWMgY2hhciB0bXBfbGFiZWxbNDVdOwotCWludCByZXN1bHQgPSAwOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0JCi0JbWVtY3B5KHRtcF9sYWJlbCwgbGFiZWwsIEZUX0xBQkVMX1NaKTsKLQl0bXBfbGFiZWxbRlRfTEFCRUxfU1pdID0gJ1wwJzsKLQlUUkFDRShmdF90X25vaXNlLCAidGFwZSAgbGFiZWwgPSBgJXMnIiwgdG1wX2xhYmVsKTsKLQlmdGFwZV9mbXRfdmVyc2lvbiA9IDA7Ci0JaWYgKG1lbWNtcChsYWJlbCwgbGludXhfdGFwZV9sYWJlbCwgc3RybGVuKGxpbnV4X3RhcGVfbGFiZWwpKSA9PSAwKSB7Ci0JCWludCBwb3MgPSBzdHJsZW4obGludXhfdGFwZV9sYWJlbCk7Ci0JCXdoaWxlIChsYWJlbFtwb3NdID49ICcwJyAmJiBsYWJlbFtwb3NdIDw9ICc5JykgewotCQkJZnRhcGVfZm10X3ZlcnNpb24gKj0gMTA7Ci0JCQlmdGFwZV9mbXRfdmVyc2lvbiA9IGxhYmVsWyBwb3MrK10gLSAnMCc7Ci0JCX0KLQkJcmVzdWx0ID0gKGZ0YXBlX2ZtdF92ZXJzaW9uID49IG1pbl9mbXRfdmVyc2lvbiAmJgotCQkJICBmdGFwZV9mbXRfdmVyc2lvbiA8PSBtYXhfZm10X3ZlcnNpb24pOwotCX0KLQlUUkFDRShmdF90X25vaXNlLCAiZm9ybWF0IHZlcnNpb24gPSAlZCIsIGZ0YXBlX2ZtdF92ZXJzaW9uKTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotc3RhdGljIF9fdTggKiBmaW5kX2VuZF9vZl9lb2ZfbGlzdChfX3U4ICogcHRyLCBfX3U4ICogbGltaXQpCi17Ci0Jd2hpbGUgKHB0ciArIDMgPCBsaW1pdCkgewotCi0JCWlmIChnZXRfdW5hbGlnbmVkKChfX3UzMiopcHRyKSkgewotCQkJcHRyICs9IHNpemVvZihfX3UzMik7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gcHRyOwotCQl9Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi12b2lkIHpmdF9mdGFwZV9leHRyYWN0X2ZpbGVfbWFya3MoX191OCogYWRkcmVzcykKLXsKLQlpbnQgaTsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQotCXpmdF9lb2ZfbWFwID0gTlVMTDsKLQlpZiAoZnRfZm9ybWF0X2NvZGUgPT0gZm10X3ZhciB8fCBmdF9mb3JtYXRfY29kZSA9PSBmbXRfYmlnKSB7Ci0JCV9fdTgqIGVuZDsKLQkJX191OCogc3RhcnQgPSBmdGFwZV9maW5kX2VuZF9vZl9ic21fbGlzdChhZGRyZXNzKTsKLQotCQl6ZnRfbnJfZW9mX21hcmtzID0gMDsKLQkJaWYgKHN0YXJ0KSB7Ci0JCQlzdGFydCArPSAzOyAvKiBza2lwIGVuZCBvZiBsaXN0IG1hcmsgKi8KLQkJCWVuZCA9IGZpbmRfZW5kX29mX2VvZl9saXN0KHN0YXJ0LCAKLQkJCQkJCSAgIGFkZHJlc3MgKyBGVF9TRUdNRU5UX1NJWkUpOwotCQkJaWYgKGVuZCAmJiBlbmQgLSBzdGFydCA8PSBGVF9GU0xfU0laRSkgewotCQkJCXpmdF9ucl9lb2ZfbWFya3MgPSAoKGVuZCAtIHN0YXJ0KSAvIAotCQkJCQkJICAgIHNpemVvZihlb2ZfbWFya191bmlvbikpOwotCQkJCXpmdF9lb2ZfbWFwID0gKGVvZl9tYXJrX3VuaW9uICopc3RhcnQ7Ci0JCQl9IGVsc2UgewotCQkJCVRSQUNFKGZ0X3RfZXJyLAotCQkJCSAgICAgICJFT0YgTWFyayBMaXN0IGlzIHRvbyBsb25nIG9yIGRhbWFnZWQhIik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlUUkFDRShmdF90X2VyciwgCi0JCQkgICAgICAiQmFkIFNlY3RvciBMaXN0IGlzIHRvbyBsb25nIG9yIGRhbWFnZWQgISIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJemZ0X2VvZl9tYXAgPSAoZW9mX21hcmtfdW5pb24gKikmYWRkcmVzc1tGVF9GU0xdOwotCQl6ZnRfbnJfZW9mX21hcmtzID0gR0VUMihhZGRyZXNzLCBGVF9GU0xfQ05UKTsKLQl9Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgIm51bWJlciBvZiBmaWxlIG1hcmtzOiAlZCIsIHpmdF9ucl9lb2ZfbWFya3MpOwotCWlmIChmdGFwZV9mbXRfdmVyc2lvbiA9PSAxKSB7Ci0JCVRSQUNFKGZ0X3RfaW5mbywgInN3YXBwaW5nIHZlcnNpb24gMSBmaWVsZHMiKTsKLQkJLyogdmVyc2lvbiAxIGZvcm1hdCB1c2VzIHN3YXBwZWQgc2VjdG9yIGFuZCBzZWdtZW50Ci0JCSAqIGZpZWxkcywgY29ycmVjdCB0aGF0ICEgIAotCQkgKi8KLQkJZm9yIChpID0gMDsgaSA8IHpmdF9ucl9lb2ZfbWFya3M7ICsraSkgewotCQkJX191MTYgdG1wID0gR0VUMigmemZ0X2VvZl9tYXBbaV0ubWFyay5zZWdtZW50LDApOwotCQkJUFVUMigmemZ0X2VvZl9tYXBbaV0ubWFyay5zZWdtZW50LCAwLCAKLQkJCSAgICAgR0VUMigmemZ0X2VvZl9tYXBbaV0ubWFyay5kYXRlLDApKTsKLQkJCVBVVDIoJnpmdF9lb2ZfbWFwW2ldLm1hcmsuZGF0ZSwgMCwgdG1wKTsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwgemZ0X25yX2VvZl9tYXJrczsgKytpKSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJlb2YgbWFyazogJTVkLyUyZCIsCi0JCQlHRVQyKCZ6ZnRfZW9mX21hcFtpXS5tYXJrLnNlZ21lbnQsIDApLCAKLQkJCUdFVDIoJnpmdF9lb2ZfbWFwW2ldLm1hcmsuZGF0ZSwwKSk7Ci0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLXZvaWQgemZ0X2NsZWFyX2Z0YXBlX2ZpbGVfbWFya3Modm9pZCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkvKiAgQ2xlYXIgZmFpbGVkIHNlY3RvciBsb2c6IHJlbW92ZSBhbGwgdGFwZSBtYXJrcy4gV2UKLQkgKiAgZG9uJ3QgdXNlIG9sZCBmdGFwZS1zdHlsZSBFT0YtbWFya3MuCi0JICovCi0JVFJBQ0UoZnRfdF9pbmZvLCAiQ2xlYXJpbmcgb2xkIGZ0YXBlJ3MgZW9mIG1hcCIpOwotCW1lbXNldCh6ZnRfZW9mX21hcCwgMCwgemZ0X25yX2VvZl9tYXJrcyAqIHNpemVvZihfX3UzMikpOwotCXpmdF9ucl9lb2ZfbWFya3MgPSAwOwotCVBVVDIoemZ0X2hzZWdfYnVmLCBGVF9GU0xfQ05ULCAwKTsgLyogbnIgb2YgZW9mLW1hcmtzICovCi0JemZ0X2hlYWRlcl9jaGFuZ2VkID0gMTsKLQl6ZnRfdXBkYXRlX2xhYmVsKHpmdF9oc2VnX2J1Zik7Ci0JVFJBQ0VfRVhJVDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWVvZi5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtZW9mLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTY4YzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtZW9mLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0jaWZuZGVmIF9aRlRBUEVfRU9GX0gKLSNkZWZpbmUgX1pGVEFQRV9FT0ZfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTUgQmFzIExhYXJob3Zlbi4KLSAqIGFkYXB0YWVkIGZvciB6ZnRhcGUgMTk5NiwgMTk5NyBieSBDbGF1cyBIZWluZQotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS96ZnRhcGUvemZ0YXBlLWVvZi5oLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTk6MDMgJAotICoKLSAqICAgICAgRGVmaW5pdGlvbnMgYW5kIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGVuZCBvZiBmaWxlIG1hcmtlcnMKLSAqICAgICAgZm9yIHRoZSBRSUMtNDAvODAgZmxvcHB5LXRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaD4KLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuaCIKLS8qICBmYWlsZWQgc2VjdG9yIGxvZyBzaXplIChvbmx5IHVzZWQgaWYgZm9ybWF0IGNvZGUgIT0gNCkuCi0gKi8KLQotdHlwZWRlZiB1bmlvbiB7Ci0JZnRfZnNsX2VudHJ5IG1hcms7Ci0JX191MzIgZW50cnk7Ci19IGVvZl9tYXJrX3VuaW9uOwotIAotLyogICAgICBmdGFwZS1lb2YuYyBkZWZpbmVkIGdsb2JhbCB2YXJzLgotICovCi1leHRlcm4gaW50IHpmdF9ucl9lb2ZfbWFya3M7Ci1leHRlcm4gZW9mX21hcmtfdW5pb24gKnpmdF9lb2ZfbWFwOwotCi0vKiAgICAgIGZ0YXBlLWVvZi5jIGRlZmluZWQgZ2xvYmFsIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuIHZvaWQgemZ0X2Z0YXBlX2V4dHJhY3RfZmlsZV9tYXJrcyhfX3U4KiBhZGRyZXNzKTsKLWV4dGVybiBpbnQgIHpmdF9mdGFwZV92YWxpZGF0ZV9sYWJlbChjaGFyKiBsYWJlbCk7Ci1leHRlcm4gdm9pZCB6ZnRfY2xlYXJfZnRhcGVfZmlsZV9tYXJrcyh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1pbml0LmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NGExYWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtaW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdGhhdCByZWdpc3RlcnMgdGhlIHpmdGFwZSBmcm9udGVuZCAKLSAqICAgICAgdG8gdGhlIGZ0YXBlIGZsb3BweSB0YXBlIGRyaXZlciBmb3IgTGludXgKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2lmZGVmIENPTkZJR19LTU9ECi0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1yZWFkLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS13cml0ZS5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1idWZmZXJzLmgiCi0KLU1PRFVMRV9BVVRIT1IoIihjKSAxOTk2LCAxOTk3IENsYXVzLUp1c3R1cyBIZWluZSAiCi0JICAgICAgIihjbGF1c0Btb21vLm1hdGgucnd0aC1hYWNoZW4uZGUpIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oWkZUQVBFX1ZFUlNJT04gIiAtICIKLQkJICAgIlZGUyBpbnRlcmZhY2UgZm9yIHRoZSBMaW51eCBmbG9wcHkgdGFwZSBkcml2ZXIuICIKLQkJICAgIlN1cHBvcnQgZm9yIFFJQy0xMTMgY29tcGF0aWJsZSB2b2x1bWUgdGFibGUgIgotCQkgICAiYW5kIGJ1aWx0aW4gY29tcHJlc3Npb24gKGx6cnczIGFsZ29yaXRobSkiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJjaGFyLW1ham9yLTI3Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLXN0cnVjdCB6ZnRfY21wcl9vcHMgKnpmdF9jbXByX29wcyA9IE5VTEw7Ci1jb25zdCBmdGFwZV9pbmZvICp6ZnRfc3RhdHVzOwotCi0vKiAgICAgIExvY2FsIHZhcnMuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGJ1c3lfZmxhZzsKLQotc3RhdGljIHNpZ3NldF90IG9yaWdfc2lnbWFzazsKLQotLyogIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCB2ZnMgbGF5ZXIKLSAqLwotCi0vKiBOb3RlIGFib3V0IGxsc2VlaygpOgotICoKLSAqIHN0LmMgYW5kIHRwcWljLmMgdXBkYXRlIGZwLT5mX3BvcyBidXQgZG9uJ3QgaW1wbG1lbnQgbGxzZWVrKCkgYW5kCi0gKiBpbml0aWFsaXplIHRoZSBsbHNlZWsgY29tcG9uZW50IG9mIHRoZSBmaWxlX29wcyBzdHJ1Y3Qgd2l0aCBOVUxMLgotICogVGhpcyBtZWFucyB0aGF0IHRoZSB1c2VyIHdpbGwgZ2V0IHRoZSBkZWZhdWx0IHNlZWssIGJ1dCB0aGUgdGFwZQotICogZGV2aWNlIHdpbGwgbm90IHJlc3BlY3QgdGhlIG5ldyBwb3NpdGlvbiwgYnV0IGhhcHBpbHkgcmVhZCBmcm9tIHRoZQotICogb2xkIHBvc2l0aW9uLiBUaGluayBhIHpmdGFwZSBzcGVjaWZpYyBsbHNlZWsoKSBmdW5jdGlvbiB3b3VsZCBiZQotICogYmV0dGVyLCByZXR1cm5pbmcgLUVTUElQRS4gVE9ETy4KLSAqLwotCi1zdGF0aWMgaW50ICB6ZnRfb3BlbiAoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmaWxlcCk7Ci1zdGF0aWMgaW50IHpmdF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGVwKTsKLXN0YXRpYyBpbnQgIHpmdF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotc3RhdGljIGludCAgemZ0X21tYXAoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Ci1zdGF0aWMgc3NpemVfdCB6ZnRfcmVhZCAoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmZiwKLQkJCSBzaXplX3QgcmVxX2xlbiwgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBzc2l6ZV90IHpmdF93cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmLAotCQkJIHNpemVfdCByZXFfbGVuLCBsb2ZmX3QgKnBwb3MpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB6ZnRfY2RldiA9Ci17Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5yZWFkCQk9IHpmdF9yZWFkLAotCS53cml0ZQkJPSB6ZnRfd3JpdGUsCi0JLmlvY3RsCQk9IHpmdF9pb2N0bCwKLQkubW1hcAkJPSB6ZnRfbW1hcCwKLQkub3BlbgkJPSB6ZnRfb3BlbiwKLQkucmVsZWFzZQk9IHpmdF9jbG9zZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnpmdF9jbGFzczsKLQotLyogICAgICBPcGVuIGZsb3BweSB0YXBlIGRldmljZQotICovCi1zdGF0aWMgaW50IHpmdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCi17Ci0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCW5vbnNlZWthYmxlX29wZW4oaW5vLCBmaWxlcCk7Ci0JVFJBQ0UoZnRfdF9mbG93LCAiY2FsbGVkIGZvciBtaW5vciAlZCIsIGltaW5vcihpbm8pKTsKLQlpZiAoIHRlc3RfYW5kX3NldF9iaXQoMCwmYnVzeV9mbGFnKSApIHsKLQkJVFJBQ0VfQUJPUlQoLUVCVVNZLCBmdF90X3dhcm4sICJmYWlsZWQ6IGFscmVhZHkgYnVzeSIpOwotCX0KLQlpZiAoKGltaW5vcihpbm8pICYgfihaRlRfTUlOT1JfT1BfTUFTSyB8IEZUQVBFX05PX1JFV0lORCkpCi0JICAgICA+IAotCSAgICBGVEFQRV9TRUxfRCkgewotCQljbGVhcl9iaXQoMCwmYnVzeV9mbGFnKTsKLQkJVFJBQ0VfQUJPUlQoLUVOWElPLCBmdF90X2VyciwgImZhaWxlZDogaW52YWxpZCB1bml0IG5yIik7Ci0JfQotCW9yaWdfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7Ci0Jc2lnZmlsbHNldCgmY3VycmVudC0+YmxvY2tlZCk7Ci0JcmVzdWx0ID0gX3pmdF9vcGVuKGltaW5vcihpbm8pLCBmaWxlcC0+Zl9mbGFncyAmIE9fQUNDTU9ERSk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJY3VycmVudC0+YmxvY2tlZCA9IG9yaWdfc2lnbWFzazsgLyogcmVzdG9yZSBtYXNrICovCi0JCWNsZWFyX2JpdCgwLCZidXN5X2ZsYWcpOwotCQlUUkFDRV9BQk9SVChyZXN1bHQsIGZ0X3RfZXJyLCAiX2Z0YXBlX29wZW4gZmFpbGVkIik7Ci0JfSBlbHNlIHsKLQkJLyogTWFzayBzaWduYWxzIHRoYXQgd2lsbCBkaXN0dXJiIHByb3BlciBvcGVyYXRpb24gb2YgdGhlCi0JCSAqIHByb2dyYW0gdGhhdCBpcyBjYWxsaW5nLgotCQkgKi8KLQkJY3VycmVudC0+YmxvY2tlZCA9IG9yaWdfc2lnbWFzazsKLQkJc2lnYWRkc2V0bWFzayAoJmN1cnJlbnQtPmJsb2NrZWQsIF9ET19CTE9DSyk7Ci0JCVRSQUNFX0VYSVQgMDsKLQl9Ci19Ci0KLS8qICAgICAgQ2xvc2UgZmxvcHB5IHRhcGUgZGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgemZ0X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCi17Ci0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICggIXRlc3RfYml0KDAsJmJ1c3lfZmxhZykgfHwgaW1pbm9yKGlubykgIT0gemZ0X3VuaXQpIHsKLQkJVFJBQ0UoZnRfdF9lcnIsICJmYWlsZWQ6IG5vdCBidXN5IG9yIHdyb25nIHVuaXQiKTsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLQlzaWdmaWxsc2V0KCZjdXJyZW50LT5ibG9ja2VkKTsKLQlyZXN1bHQgPSBfemZ0X2Nsb3NlKCk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJVFJBQ0UoZnRfdF9lcnIsICJfemZ0X2Nsb3NlIGZhaWxlZCIpOwotCX0KLQljdXJyZW50LT5ibG9ja2VkID0gb3JpZ19zaWdtYXNrOyAvKiByZXN0b3JlIGJlZm9yZSBvcGVuIHN0YXRlICovCi0JY2xlYXJfYml0KDAsJmJ1c3lfZmxhZyk7Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi0vKiAgICAgIElvY3RsIGZvciBmbG9wcHkgdGFwZSBkZXZpY2UKLSAqLwotc3RhdGljIGludCB6ZnRfaW9jdGwoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IHJlc3VsdCA9IC1FSU87Ci0Jc2lnc2V0X3Qgb2xkX3NpZ21hc2s7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlpZiAoICF0ZXN0X2JpdCgwLCZidXN5X2ZsYWcpIHx8IGltaW5vcihpbm8pICE9IHpmdF91bml0IHx8IGZ0X2ZhaWx1cmUpIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkgICAgImZhaWxlZDogbm90IGJ1c3ksIGZhaWx1cmUgb3Igd3JvbmcgdW5pdCIpOwotCX0KLQlvbGRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7IC8qIHNhdmUgbWFzayAqLwotCXNpZ2ZpbGxzZXQoJmN1cnJlbnQtPmJsb2NrZWQpOwotCS8qIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgc2l6ZW9mKHZvaWQgKikgPT0gc2l6ZW9mKGxvbmcpICovCi0JcmVzdWx0ID0gX3pmdF9pb2N0bChjb21tYW5kLCAodm9pZCBfX3VzZXIgKikgYXJnKTsKLQljdXJyZW50LT5ibG9ja2VkID0gb2xkX3NpZ21hc2s7IC8qIHJlc3RvcmUgbWFzayAqLwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0vKiAgICAgIElvY3RsIGZvciBmbG9wcHkgdGFwZSBkZXZpY2UKLSAqLwotc3RhdGljIGludCAgemZ0X21tYXAoc3RydWN0IGZpbGUgKmZpbGVwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlpbnQgcmVzdWx0ID0gLUVJTzsKLQlzaWdzZXRfdCBvbGRfc2lnbWFzazsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICggIXRlc3RfYml0KDAsJmJ1c3lfZmxhZykgfHwgCi0JICAgIGltaW5vcihmaWxlcC0+Zl9kZW50cnktPmRfaW5vZGUpICE9IHpmdF91bml0IHx8IAotCSAgICBmdF9mYWlsdXJlKQotCXsKLQkJVFJBQ0VfQUJPUlQoLUVJTywgZnRfdF9lcnIsCi0JCQkgICAgImZhaWxlZDogbm90IGJ1c3ksIGZhaWx1cmUgb3Igd3JvbmcgdW5pdCIpOwotCX0KLQlvbGRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7IC8qIHNhdmUgbWFzayAqLwotCXNpZ2ZpbGxzZXQoJmN1cnJlbnQtPmJsb2NrZWQpOwotCWlmICgocmVzdWx0ID0gZnRhcGVfbW1hcCh2bWEpKSA+PSAwKSB7Ci0jaWZuZGVmIE1TWU5DX0JVR19XQVNfRklYRUQKLQkJc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBkdW1teSA9IHsgTlVMTCwgfTsKLQkJdm1hLT52bV9vcHMgPSAmZHVtbXk7Ci0jZW5kaWYKLQl9Ci0JY3VycmVudC0+YmxvY2tlZCA9IG9sZF9zaWdtYXNrOyAvKiByZXN0b3JlIG1hc2sgKi8KLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyogICAgICBSZWFkIGZyb20gZmxvcHB5IHRhcGUgZGV2aWNlCi0gKi8KLXN0YXRpYyBzc2l6ZV90IHpmdF9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZmYsCi0JCQlzaXplX3QgcmVxX2xlbiwgbG9mZl90ICpwcG9zKQotewotCWludCByZXN1bHQgPSAtRUlPOwotCXNpZ3NldF90IG9sZF9zaWdtYXNrOwotCXN0cnVjdCBpbm9kZSAqaW5vID0gZnAtPmZfZGVudHJ5LT5kX2lub2RlOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0UoZnRfdF9kYXRhX2Zsb3csICJjYWxsZWQgd2l0aCBjb3VudDogJWxkIiwgKHVuc2lnbmVkIGxvbmcpcmVxX2xlbik7Ci0JaWYgKCF0ZXN0X2JpdCgwLCZidXN5X2ZsYWcpICB8fCBpbWlub3IoaW5vKSAhPSB6ZnRfdW5pdCB8fCBmdF9mYWlsdXJlKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJICAgICJmYWlsZWQ6IG5vdCBidXN5LCBmYWlsdXJlIG9yIHdyb25nIHVuaXQiKTsKLQl9Ci0Jb2xkX3NpZ21hc2sgPSBjdXJyZW50LT5ibG9ja2VkOyAvKiBzYXZlIG1hc2sgKi8KLQlzaWdmaWxsc2V0KCZjdXJyZW50LT5ibG9ja2VkKTsKLQlyZXN1bHQgPSBfemZ0X3JlYWQoYnVmZiwgcmVxX2xlbik7Ci0JY3VycmVudC0+YmxvY2tlZCA9IG9sZF9zaWdtYXNrOyAvKiByZXN0b3JlIG1hc2sgKi8KLQlUUkFDRShmdF90X2RhdGFfZmxvdywgInJldHVybiB3aXRoIGNvdW50OiAlZCIsIHJlc3VsdCk7Ci0JVFJBQ0VfRVhJVCByZXN1bHQ7Ci19Ci0KLS8qICAgICAgV3JpdGUgdG8gdGFwZSBkZXZpY2UKLSAqLwotc3RhdGljIHNzaXplX3QgemZ0X3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmYsCi0JCQkgc2l6ZV90IHJlcV9sZW4sIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgcmVzdWx0ID0gLUVJTzsKLQlzaWdzZXRfdCBvbGRfc2lnbWFzazsKLQlzdHJ1Y3QgaW5vZGUgKmlubyA9IGZwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCVRSQUNFKGZ0X3RfZmxvdywgImNhbGxlZCB3aXRoIGNvdW50OiAlbGQiLCAodW5zaWduZWQgbG9uZylyZXFfbGVuKTsKLQlpZiAoIXRlc3RfYml0KDAsJmJ1c3lfZmxhZykgfHwgaW1pbm9yKGlubykgIT0gemZ0X3VuaXQgfHwgZnRfZmFpbHVyZSkgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwKLQkJCSAgICAiZmFpbGVkOiBub3QgYnVzeSwgZmFpbHVyZSBvciB3cm9uZyB1bml0Iik7Ci0JfQotCW9sZF9zaWdtYXNrID0gY3VycmVudC0+YmxvY2tlZDsgLyogc2F2ZSBtYXNrICovCi0Jc2lnZmlsbHNldCgmY3VycmVudC0+YmxvY2tlZCk7Ci0JcmVzdWx0ID0gX3pmdF93cml0ZShidWZmLCByZXFfbGVuKTsKLQljdXJyZW50LT5ibG9ja2VkID0gb2xkX3NpZ21hc2s7IC8qIHJlc3RvcmUgbWFzayAqLwotCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAicmV0dXJuIHdpdGggY291bnQ6ICVkIiwgcmVzdWx0KTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyogICAgICAgICAgICAgICAgICAgIEVORCBPRiBWRlMgSU5URVJGQUNFIAotICogICAgICAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICBkcml2ZXIvbW9kdWxlIGluaXRpYWxpemF0aW9uCi0gKi8KLQotLyogIHRoZSBjb21wcmVzc2lvbiBtb2R1bGUgaGFzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBob29rIGludG8gdGhlIHpmdGFwZSAKLSAqICBjb2RlCi0gKi8KLWludCB6ZnRfY21wcl9yZWdpc3RlcihzdHJ1Y3QgemZ0X2NtcHJfb3BzICpuZXdfb3BzKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWlmICh6ZnRfY21wcl9vcHMgIT0gTlVMTCkgewotCQlUUkFDRV9FWElUIC1FQlVTWTsKLQl9IGVsc2UgewotCQl6ZnRfY21wcl9vcHMgPSBuZXdfb3BzOwotCQlUUkFDRV9FWElUIDA7Ci0JfQotfQotCi0vKiAgbG9jayB0aGUgemZ0LWNvbXByZXNzb3IoKSBtb2R1bGUuCi0gKi8KLWludCB6ZnRfY21wcl9sb2NrKGludCB0cnlfdG9fbG9hZCkKLXsKLQlpZiAoemZ0X2NtcHJfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfS01PRAotCQlpZiAodHJ5X3RvX2xvYWQpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJ6ZnQtY29tcHJlc3NvciIpOwotCQkJaWYgKHpmdF9jbXByX29wcyA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJfQotI2Vsc2UKLQkJcmV0dXJuIC1FTk9TWVM7Ci0jZW5kaWYKLQl9Ci0JKCp6ZnRfY21wcl9vcHMtPmxvY2spKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfWkZUX0NPTVBSRVNTT1IKLWV4dGVybiBpbnQgemZ0X2NvbXByZXNzb3JfaW5pdCh2b2lkKTsKLSNlbmRpZgotCi0vKiAgQ2FsbGVkIGJ5IG1vZHVsZXMgcGFja2FnZSB3aGVuIGluc3RhbGxpbmcgdGhlIGRyaXZlciBvciBieSBrZXJuZWwKLSAqICBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlCi0gKi8KLWludCBfX2luaXQgemZ0X2luaXQodm9pZCkKLXsKLQlpbnQgaTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotI2lmZGVmIE1PRFVMRQotCXByaW50ayhLRVJOX0lORk8gWkZUQVBFX1ZFUlNJT04gIlxuIik7Ci0gICAgICAgIGlmIChUUkFDRV9MRVZFTCA+PSBmdF90X2luZm8pIHsKLQkJcHJpbnRrKAotS0VSTl9JTkZPCi0iKGMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lIChjbGF1c0Btb21vLm1hdGgucnd0aC1hYWNoZW4uZGUpXG4iCi1LRVJOX0lORk8KLSJ2ZnMgaW50ZXJmYWNlIGZvciBmdGFwZSBmbG9wcHkgdGFwZSBkcml2ZXIuXG4iCi1LRVJOX0lORk8KLSJTdXBwb3J0IGZvciBRSUMtMTEzIGNvbXBhdGlibGUgdm9sdW1lIHRhYmxlLCBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uXG4iCi1LRVJOX0lORk8KLSJhbmQgYnVpbHRpbiBjb21wcmVzc2lvbiAobHpydzMgYWxnb3JpdGhtKS5cbiIpOwotICAgICAgICB9Ci0jZWxzZSAvKiAhTU9EVUxFICovCi0JLyogcHJpbnQgYSBzaG9ydCBuby1ub25zZW5zZSBib290IG1lc3NhZ2UgKi8KLQlwcmludGsoS0VSTl9JTkZPIFpGVEFQRV9WRVJTSU9OICJcbiIpOwotI2VuZGlmIC8qIE1PRFVMRSAqLwotCVRSQUNFKGZ0X3RfaW5mbywgInpmdF9pbml0IEAgMHglcCIsIHpmdF9pbml0KTsKLQlUUkFDRShmdF90X2luZm8sCi0JICAgICAgImluc3RhbGxpbmcgemZ0YXBlIFZGUyBpbnRlcmZhY2UgZm9yIGZ0YXBlIGRyaXZlciAuLi4iKTsKLQlUUkFDRV9DQVRDSChyZWdpc3Rlcl9jaHJkZXYoUUlDMTE3X1RBUEVfTUFKT1IsICJ6ZnQiLCAmemZ0X2NkZXYpLCk7Ci0KLQl6ZnRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJ6ZnQiKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWNsYXNzX2RldmljZV9jcmVhdGUoemZ0X2NsYXNzLCBOVUxMLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSksIE5VTEwsICJxZnQlaSIsIGkpOwotCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyA0KSwgTlVMTCwgIm5xZnQlaSIsIGkpOwotCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAxNiksIE5VTEwsICJ6cWZ0JWkiLCBpKTsKLQkJY2xhc3NfZGV2aWNlX2NyZWF0ZSh6ZnRfY2xhc3MsIE5VTEwsIE1LREVWKFFJQzExN19UQVBFX01BSk9SLCBpICsgMjApLCBOVUxMLCAibnpxZnQlaSIsIGkpOwotCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAzMiksIE5VTEwsICJyYXdxZnQlaSIsIGkpOwotCQljbGFzc19kZXZpY2VfY3JlYXRlKHpmdF9jbGFzcywgTlVMTCwgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAzNiksIE5VTEwsICJucmF3cmF3cWZ0JWkiLCBpKTsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfWkZUX0NPTVBSRVNTT1IKLQkodm9pZCl6ZnRfY29tcHJlc3Nvcl9pbml0KCk7Ci0jZW5kaWYKLQl6ZnRfc3RhdHVzID0gZnRhcGVfZ2V0X3N0YXR1cygpOyAvKiAgZmV0Y2ggZ2xvYmFsIGRhdGEgb2YgZnRhcGUgCi0JCQkJCSAgKiAgaGFyZHdhcmUgZHJpdmVyIAotCQkJCQkgICovCi0JVFJBQ0VfRVhJVCAwOwotfQotCi0KLS8qIENhbGxlZCBieSBtb2R1bGVzIHBhY2thZ2Ugd2hlbiByZW1vdmluZyB0aGUgZHJpdmVyIAotICovCi1zdGF0aWMgdm9pZCB6ZnRfZXhpdCh2b2lkKQotewotCWludCBpOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHVucmVnaXN0ZXJfY2hyZGV2KFFJQzExN19UQVBFX01BSk9SLCAiemZ0IikgIT0gMCkgewotCQlUUkFDRShmdF90X3dhcm4sICJmYWlsZWQiKTsKLQl9IGVsc2UgewotCQlUUkFDRShmdF90X2luZm8sICJzdWNjZXNzZnVsIik7Ci0JfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWNsYXNzX2RldmljZV9kZXN0cm95KHpmdF9jbGFzcywgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkpKTsKLQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koemZ0X2NsYXNzLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDQpKTsKLQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koemZ0X2NsYXNzLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDE2KSk7Ci0JCWNsYXNzX2RldmljZV9kZXN0cm95KHpmdF9jbGFzcywgTUtERVYoUUlDMTE3X1RBUEVfTUFKT1IsIGkgKyAyMCkpOwotCQljbGFzc19kZXZpY2VfZGVzdHJveSh6ZnRfY2xhc3MsIE1LREVWKFFJQzExN19UQVBFX01BSk9SLCBpICsgMzIpKTsKLQkJY2xhc3NfZGV2aWNlX2Rlc3Ryb3koemZ0X2NsYXNzLCBNS0RFVihRSUMxMTdfVEFQRV9NQUpPUiwgaSArIDM2KSk7Ci0JfQotCWNsYXNzX2Rlc3Ryb3koemZ0X2NsYXNzKTsKLQl6ZnRfdW5pbml0X21lbSgpOyAvKiByZWxlYXNlIHJlbWFpbmluZyBtZW1vcnksIGlmIGFueSAqLwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJ6ZnRhcGUgc3VjY2Vzc2Z1bGx5IHVubG9hZGVkLlxuIik7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotbW9kdWxlX2luaXQoemZ0X2luaXQpOwotbW9kdWxlX2V4aXQoemZ0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtaW5pdC5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtaW5pdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzdlNWQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLWluaXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLSNpZm5kZWYgX1pGVEFQRV9JTklUX0gKLSNkZWZpbmUgX1pGVEFQRV9JTklUX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvemZ0YXBlL3pmdGFwZS1pbml0LmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOTowNSAkCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIGFuZCBtYWNybyBmb3IgdGhlIHZmcyAKLSAqIGludGVyZmFjZSBkZWZpbmVkIGJ5IHpmdGFwZQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaD4KLQotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXRyYWNpbmcuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1yZWFkLmgiCi0jaW5jbHVkZSAiLi4vbG93bGV2ZWwvZnRhcGUtd3JpdGUuaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1ic20uaCIKLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS1pby5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWJ1ZmZlci5oIgotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLWZvcm1hdC5oIgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1ydy5oIgotCi0jaWZkZWYgTU9EVUxFCi0jZGVmaW5lIGZ0YXBlX3N0YXR1cyAoKnpmdF9zdGF0dXMpCi0jZW5kaWYKLQotZXh0ZXJuIGNvbnN0ICBmdGFwZV9pbmZvICp6ZnRfc3RhdHVzOyAvKiBuZWVkZWQgZm9yIHpmdGFwZS12dGJsLmggKi8KLQotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtdnRibC5oIgotCi1zdHJ1Y3QgemZ0X2NtcHJfb3BzIHsKLQlpbnQgKCp3cml0ZSkoaW50ICp3cml0ZV9jbnQsCi0JCSAgICAgX191OCAqZHN0X2J1ZiwgY29uc3QgaW50IHNlZ19zeiwKLQkJICAgICBjb25zdCBfX3U4IF9fdXNlciAqc3JjX2J1ZiwgY29uc3QgaW50IHJlcV9sZW4sIAotCQkgICAgIGNvbnN0IHpmdF9wb3NpdGlvbiAqcG9zLCBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lKTsKLQlpbnQgKCpyZWFkKShpbnQgKnJlYWRfY250LAotCQkgICAgX191OCBfX3VzZXIgKmRzdF9idWYsIGNvbnN0IGludCByZXFfbGVuLAotCQkgICAgY29uc3QgX191OCAqc3JjX2J1ZiwgY29uc3QgaW50IHNlZ19zeiwKLQkJICAgIGNvbnN0IHpmdF9wb3NpdGlvbiAqcG9zLCBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lKTsKLQlpbnQgKCpzZWVrKSh1bnNpZ25lZCBpbnQgbmV3X2Jsb2NrX3BvcywKLQkJICAgIHpmdF9wb3NpdGlvbiAqcG9zLCBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lLAotCQkgICAgX191OCAqYnVmZmVyKTsKLQl2b2lkICgqbG9jaykgICAodm9pZCk7Ci0Jdm9pZCAoKnJlc2V0KSAgKHZvaWQpOwotCXZvaWQgKCpjbGVhbnVwKSh2b2lkKTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgemZ0X2NtcHJfb3BzICp6ZnRfY21wcl9vcHM7Ci0vKiB6ZnRhcGUtaW5pdC5jIGRlZmluZWQgZ2xvYmFsIGZ1bmN0aW9ucy4KLSAqLwotZXh0ZXJuIGludCAgICAgICAgICAgICAgICAgIHpmdF9jbXByX3JlZ2lzdGVyKHN0cnVjdCB6ZnRfY21wcl9vcHMgKm5ld19vcHMpOwotZXh0ZXJuIGludCAgICAgICAgICAgICAgICAgIHpmdF9jbXByX2xvY2soaW50IHRyeV90b19sb2FkKTsKLQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtcmVhZC5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtcmVhZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTRiZjAzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXJlYWQuYworKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL3pmdGFwZS96ZnRhcGUtcmVhZC5jLHYgJAotICogJFJldmlzaW9uOiAxLjIgJAotICogJERhdGU6IDE5OTcvMTAvMDUgMTk6MTk6MDYgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBoaWdoIGxldmVsIHJlYWRpbmcgY29kZQotICogICAgICBmb3IgdGhlIFFJQy0xMTcgZmxvcHB5LXRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1lb2YuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtd3JpdGUuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS12dGJsLmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLWludCB6ZnRfanVzdF9iZWZvcmVfZW9mOwotCi0vKiAgICAgIExvY2FsIHZhcnMuCi0gKi8KLXN0YXRpYyBpbnQgYnVmX2xlbl9yZDsKLQotdm9pZCB6ZnRfemFwX3JlYWRfYnVmZmVycyh2b2lkKQotewotCWJ1Zl9sZW5fcmQgPSAwOwotfQotCi1pbnQgemZ0X3JlYWRfaGVhZGVyX3NlZ21lbnRzKHZvaWQpICAgICAgCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQl6ZnRfaGVhZGVyX3JlYWQgPSAwOwotCVRSQUNFX0NBVENIKHpmdF92bWFsbG9jX29uY2UoJnpmdF9oc2VnX2J1ZiwgRlRfU0VHTUVOVF9TSVpFKSwpOwotCVRSQUNFX0NBVENIKGZ0YXBlX3JlYWRfaGVhZGVyX3NlZ21lbnQoemZ0X2hzZWdfYnVmKSwpOwotCVRSQUNFKGZ0X3RfaW5mbywgIlNlZ21lbnRzIHdyaXR0ZW4gc2luY2UgZmlyc3QgZm9ybWF0OiAlZCIsCi0JICAgICAgKGludClHRVQ0KHpmdF9oc2VnX2J1ZiwgRlRfU0VHX0NOVCkpOwotCXpmdF9xaWMxMTMgPSAoZnRfZm9ybWF0X2NvZGUgIT0gZm10X25vcm1hbCAmJgotCQkgICAgICBmdF9mb3JtYXRfY29kZSAhPSBmbXRfMTEwMGZ0ICYmCi0JCSAgICAgIGZ0X2Zvcm1hdF9jb2RlICE9IGZtdF80MjVmdCk7Ci0JVFJBQ0UoZnRfdF9pbmZvLCAiZnRfZmlyc3RfZGF0YV9zZWdtZW50OiAlZCwgZnRfbGFzdF9kYXRhX3NlZ21lbnQ6ICVkIiwgCi0JICAgICAgZnRfZmlyc3RfZGF0YV9zZWdtZW50LCBmdF9sYXN0X2RhdGFfc2VnbWVudCk7Ci0JemZ0X2NhcGFjaXR5ID0gemZ0X2dldF9jYXBhY2l0eSgpOwotCXpmdF9vbGRfZnRhcGUgPSB6ZnRfZnRhcGVfdmFsaWRhdGVfbGFiZWwoJnpmdF9oc2VnX2J1ZltGVF9MQUJFTF0pOwotCWlmICh6ZnRfb2xkX2Z0YXBlKSB7Ci0JCVRSQUNFKGZ0X3RfaW5mbywgCi0iRm91bmQgb2xkIGZ0YXBlZCB0YXBlLCBlbXVsYXRpbmcgZW9mIG1hcmtzLCBlbnRlcmluZyByZWFkLW9ubHkgbW9kZSIpOwotCQl6ZnRfZnRhcGVfZXh0cmFjdF9maWxlX21hcmtzKHpmdF9oc2VnX2J1Zik7Ci0JCVRSQUNFX0NBVENIKHpmdF9mYWtlX3ZvbHVtZV9oZWFkZXJzKHpmdF9lb2ZfbWFwLCAKLQkJCQkJCSAgICB6ZnRfbnJfZW9mX21hcmtzKSwpOwotCX0gZWxzZSB7Ci0JCS8qIHRoZSBzcGVjcyBzYXkgdGhhdCB0aGUgdm9sdW1lIHRhYmxlIG11c3QgYmUKLQkJICogaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvZXMgZHVyaW5nIGZvcm1hdHRpbmcsIHNvIGl0Ci0JCSAqIE1VU1QgYmUgcmVhZGFibGUsIGkuZS4gY29udGFpbiB2YWlkIEVDQwotCQkgKiBpbmZvcm1hdGlvbi4gIAotCQkgKi8KLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfcmVhZF9zZWdtZW50KGZ0X2ZpcnN0X2RhdGFfc2VnbWVudCwgCi0JCQkJCSAgICAgICB6ZnRfZGVibG9ja19idWYsIAotCQkJCQkgICAgICAgRlRfUkRfU0lOR0xFKSwpOwotCQlUUkFDRV9DQVRDSCh6ZnRfZXh0cmFjdF92b2x1bWVfaGVhZGVycyh6ZnRfZGVibG9ja19idWYpLCk7Ci0JfQotCXpmdF9oZWFkZXJfcmVhZCA9IDE7Ci0JemZ0X3NldF9mbGFncyh6ZnRfdW5pdCk7Ci0JemZ0X3Jlc2V0X3Bvc2l0aW9uKCZ6ZnRfcG9zKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLWludCB6ZnRfZmV0Y2hfc2VnbWVudF9mcmFjdGlvbihjb25zdCB1bnNpZ25lZCBpbnQgc2VnbWVudCwgdm9pZCAqYnVmZmVyLAotCQkJICAgICAgIGNvbnN0IGZ0X3JlYWRfbW9kZV90IHJlYWRfbW9kZSwKLQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0JCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUpCi17Ci0JaW50IHNlZ19zejsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChzZWdtZW50ID09IHpmdF9kZWJsb2NrX3NlZ21lbnQpIHsKLQkJVFJBQ0UoZnRfdF9kYXRhX2Zsb3csCi0JCSAgICAgICJyZS11c2luZyBzZWdtZW50ICVkIGFscmVhZHkgaW4gZGVibG9jayBidWZmZXIiLAotCQkgICAgICBzZWdtZW50KTsKLQkJc2VnX3N6ID0gemZ0X2dldF9zZWdfc3ooc2VnbWVudCk7Ci0JCWlmIChzdGFydCA+IHNlZ19zeikgewotCQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9idWcsCi0JCQkJICAgICJ0cnlpbmcgdG8gcmVhZCBiZXlvbmQgZW5kIG9mIHNlZ21lbnQ6XG4iCi0JCQkJICAgIEtFUk5fSU5GTyAic2VnX3N6IDogJWRcbiIKLQkJCQkgICAgS0VSTl9JTkZPICJzdGFydCAgOiAlZFxuIgotCQkJCSAgICBLRVJOX0lORk8gInNlZ21lbnQ6ICVkIiwKLQkJCQkgICAgc2VnX3N6LCBzdGFydCwgc2VnbWVudCk7Ci0JCX0KLQkJaWYgKChzdGFydCArIHNpemUpID4gc2VnX3N6KSB7Ci0JCQlUUkFDRV9FWElUIHNlZ19zeiAtIHN0YXJ0OwotCQl9Ci0JCVRSQUNFX0VYSVQgc2l6ZTsKLQl9Ci0Jc2VnX3N6ID0gZnRhcGVfcmVhZF9zZWdtZW50X2ZyYWN0aW9uKHNlZ21lbnQsIGJ1ZmZlciwgcmVhZF9tb2RlLAotCQkJCQkgICAgIHN0YXJ0LCBzaXplKTsKLQlUUkFDRShmdF90X2RhdGFfZmxvdywgInNlZ21lbnQgJWQsIHJlc3VsdCAlZCIsIHNlZ21lbnQsIHNlZ19zeik7Ci0JaWYgKChpbnQpc2VnX3N6ID49IDAgJiYgc3RhcnQgPT0gMCAmJiBzaXplID09IEZUX1NFR01FTlRfU0laRSkgewotCQkvKiAgdGhpcyBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdCB3ZSBhcmUgYWx3YXlzIGNhbGxlZCB3aXRoCi0JCSAqICBidWZmZXIgPT0gemZ0X2RlYmxvY2tfYnVmIAotCQkgKi8KLQkJemZ0X2RlYmxvY2tfc2VnbWVudCA9IHNlZ21lbnQ7Ci0JfSBlbHNlIHsKLQkJemZ0X2RlYmxvY2tfc2VnbWVudCA9IC0xOwotCX0KLQlUUkFDRV9FWElUIHNlZ19zejsKLX0KLQotLyoKLSAqIG91dDoKLSAqCi0gKiBpbnQgKnJlYWRfY250OiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIHJlbW92ZWQgZnJvbSB0aGUKLSAqICAgICAgICAgICAgICAgIHpmdF9kZWJsb2NrX2J1ZiAocmVzdWx0KQotICoKLSAqIGludCAqdG9fZG8gICA6IHRoZSByZW1haW5pbmcgc2l6ZSBvZiB0aGUgcmVhZC1yZXF1ZXN0LiBJcyBjaGFuZ2VkLgotICoKLSAqIGluOgotICoKLSAqIGNoYXIgKmJ1ZmYgICAgICA6IGJ1ZmYgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIHVzZXIKLSAqICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgdGhhdCBoYXNuJ3QgYmVlbiBmaWxsZWQgd2l0aCBkYXRhIHlldC4KLSAqIGludCBidWZfcG9zX3JlYWQ6IGNvcHkgb2YgYnVmX3Bvc19yZAotICogaW50IGJ1Zl9sZW5fcmVhZDogY29weSBvZiBidWZfbGVuX3JkCi0gKiBjaGFyICp6ZnRfZGVibG9ja19idWY6IGZ0YXBlX3pmdF9kZWJsb2NrX2J1ZgotICoKLSAqIHJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIGFjdHVhbGx5IGNvcGllZCB0byB0aGUgdXNlci1idWZmZXIKLSAqCi0gKiB0b19kbyBNVVNUIE5PVCBTSFJJTksgZXhjZXB0IHRvIGluZGljYXRlIGFuIEVPVC4gSW4gdGhpcyBjYXNlIHRvX2RvCi0gKiBoYXMgdG8gYmUgc2V0IHRvIDAuIFdlIGNhbm5vdCByZXR1cm4gLUVOT1NQQywgYmVjYXVzZSB3ZSByZXR1cm4gdGhlCi0gKiBhbW91bnQgb2YgZGF0YSBhY3R1YWxseSAqIGNvcGllZCB0byB0aGUgdXNlci1idWZmZXIKLSAqLwotc3RhdGljIGludCB6ZnRfc2ltcGxlX3JlYWQgKGludCAqcmVhZF9jbnQsIAotCQkJICAgIF9fdTggIF9fdXNlciAqZHN0X2J1ZiwgCi0JCQkgICAgY29uc3QgaW50IHRvX2RvLCAKLQkJCSAgICBjb25zdCBfX3U4ICpzcmNfYnVmLCAKLQkJCSAgICBjb25zdCBpbnQgc2VnX3N6LCAKLQkJCSAgICBjb25zdCB6ZnRfcG9zaXRpb24gKnBvcywKLQkJCSAgICBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHNlZ19zeiAtIHBvcy0+c2VnX2J5dGVfcG9zIDwgdG9fZG8pIHsKLQkJKnJlYWRfY250ID0gc2VnX3N6IC0gcG9zLT5zZWdfYnl0ZV9wb3M7Ci0JfSBlbHNlIHsKLQkJKnJlYWRfY250ID0gdG9fZG87Ci0JfQotCWlmIChjb3B5X3RvX3VzZXIoZHN0X2J1ZiwgCi0JCQkgc3JjX2J1ZiArIHBvcy0+c2VnX2J5dGVfcG9zLCAqcmVhZF9jbnQpICE9IDApIHsKLQkJVFJBQ0VfRVhJVCAtRUZBVUxUOwotCX0KLQlUUkFDRShmdF90X25vaXNlLCAibnIgYnl0ZXMganVzdCByZWFkOiAlZCIsICpyZWFkX2NudCk7Ci0JVFJBQ0VfRVhJVCAqcmVhZF9jbnQ7Ci19Ci0KLS8qIHJlcV9sZW46IGdldHMgY2xpcHBlZCBkdWUgdG8gRU9UIG9mIEVPRi4KLSAqIHJlcV9jbGlwcGVkOiBpcyBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHJlcV9sZW4gd2FzIGNsaXBwZWQgb3Igbm90Ci0gKiB2b2x1bWU6IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIGN1cnJlbnQgdm9sdW1lIChibGtfc3ogZXRjLikKLSAqLwotc3RhdGljIGludCBjaGVja19yZWFkX2FjY2VzcyhpbnQgKnJlcV9sZW4sIAotCQkJICAgICBjb25zdCB6ZnRfdm9saW5mbyAqKnZvbHVtZSwKLQkJCSAgICAgaW50ICpyZXFfY2xpcHBlZCwgCi0JCQkgICAgIGNvbnN0IHpmdF9wb3NpdGlvbiAqcG9zKQotewotCXN0YXRpYyBfX3M2NCByZW1haW5pbmc7Ci0Jc3RhdGljIGludCBlb2Q7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYgKHpmdF9pb19zdGF0ZSAhPSB6ZnRfcmVhZGluZykgewotCQlpZiAoemZ0X29mZmxpbmUpIHsgLyogb2ZmbGluZSBpbmNsdWRlcyBub190YXBlICovCi0JCQlUUkFDRV9BQk9SVCgtRU5YSU8sIGZ0X3Rfd2FybiwKLQkJCQkgICAgInRhcGUgaXMgb2ZmbGluZSBvciBubyBjYXJ0cmlkZ2UiKTsKLQkJfQotCQlpZiAoIWZ0X2Zvcm1hdHRlZCkgewotCQkJVFJBQ0VfQUJPUlQoLUVBQ0NFUywKLQkJCQkgICAgZnRfdF93YXJuLCAidGFwZSBpcyBub3QgZm9ybWF0dGVkIik7Ci0JCX0KLQkJLyogIG5vdyBlbnRlciBkZWZpbmVkIHN0YXRlLCByZWFkIGhlYWRlciBzZWdtZW50IGlmIG5vdAotCQkgKiAgYWxyZWFkeSBkb25lIGFuZCBmbHVzaCB3cml0ZSBidWZmZXJzCi0JCSAqLwotCQlUUkFDRV9DQVRDSCh6ZnRfZGVmX2lkbGVfc3RhdGUoKSwpOwotCQl6ZnRfaW9fc3RhdGUgPSB6ZnRfcmVhZGluZzsKLQkJaWYgKHpmdF90YXBlX2F0X2VvZChwb3MpKSB7Ci0JCQllb2QgPSAxOwotCQkJVFJBQ0VfRVhJVCAxOwotCQl9Ci0JCWVvZCA9IDA7Ci0JCSp2b2x1bWUgPSB6ZnRfZmluZF92b2x1bWUocG9zLT5zZWdfcG9zKTsKLQkJLyogZ2V0IHRoZSBzcGFjZSBsZWZ0IHVudGlsIEVPRiAqLwotCQlyZW1haW5pbmcgPSB6ZnRfY2hlY2tfZm9yX2VvZigqdm9sdW1lLCBwb3MpOwotCQlidWZfbGVuX3JkID0gMDsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInJlbWFpbmluZzogIiBMTF9YICIsIHZvbF9ubzogJWQiLAotCQkgICAgICBMTChyZW1haW5pbmcpLCAoKnZvbHVtZSktPmNvdW50KTsKLQl9IGVsc2UgaWYgKHpmdF90YXBlX2F0X2VvZChwb3MpKSB7Ci0JCWlmICgrK2VvZCA+IDIpIHsKLQkJCVRSQUNFX0VYSVQgLUVJTzsgLyogc3QuYyBhbHNvIHJldHVybnMgLUVJTyAqLwotCQl9IGVsc2UgewotCQkJVFJBQ0VfRVhJVCAxOwotCQl9Ci0JfQotCWlmICgoKnJlcV9sZW4gJSAoKnZvbHVtZSktPmJsa19zeikgIT0gMCkgewotCQkvKiAgdGhpcyBtZXNzYWdlIGlzIGluZm9ybWF0aW9uYWwgb25seS4gVGhlIHVzZXIgZ2V0cyB0aGUKLQkJICogIHByb3BlciByZXR1cm4gdmFsdWUKLQkJICovCi0JCVRSQUNFX0FCT1JUKC1FSU5WQUwsIGZ0X3RfaW5mbywKLQkJCSAgICAicmVxX2xlbiAlZCBub3QgYSBtdWx0aXBsZSBvZiBibG9jayBzaXplICVkIiwKLQkJCSAgICAqcmVxX2xlbiwgKCp2b2x1bWUpLT5ibGtfc3opOwotCX0KLQkvKiBBcyBHTlUgdGFyIGRvZXNuJ3QgYWNjZXB0IHBhcnRpYWwgcmVhZCBjb3VudHMgd2hlbiB0aGUKLQkgKiBtdWx0aXBsZSB2b2x1bWUgZmxhZyBpcyBzZXQsIHdlIG1ha2Ugc3VyZSB0byByZXR1cm4gdGhlCi0JICogcmVxdWVzdGVkIGFtb3VudCBvZiBkYXRhLiBFeGNlcHQsIG9mIGNvdXJzZSwgYXQgdGhlIGVuZCBvZgotCSAqIHRoZSB0YXBlIG9yIGZpbGUgbWFyay4gIAotCSAqLwotCXJlbWFpbmluZyAtPSAqcmVxX2xlbjsKLQlpZiAocmVtYWluaW5nIDw9IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgCi0JCSAgICAgICJjbGlwcGVkIHJlcXVlc3QgZnJvbSAlZCB0byAlZC4iLCAKLQkJICAgICAgKnJlcV9sZW4sIChpbnQpKCpyZXFfbGVuICsgcmVtYWluaW5nKSk7Ci0JCSpyZXFfbGVuICs9IHJlbWFpbmluZzsKLQkJKnJlcV9jbGlwcGVkID0gMTsKLQl9IGVsc2UgewotCQkqcmVxX2NsaXBwZWQgPSAwOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qIHRoaXNfc2Vnc19zaXplOiB0aGUgY3VycmVudCBzZWdtZW50J3Mgc2l6ZS4KLSAqIGJ1ZmY6IHRoZSBVU0VSLVNQQUNFIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbi4KLSAqIHJlcV9sZW46IGhvdyBtdWNoIGRhdGEgc2hvdWxkIGJlIHJlYWQgYXQgbW9zdC4KLSAqIHZvbHVtZTogY29udGFpbnMgaW5mb3JtYXRpb24gb24gY3VycmVudCB2b2x1bWUgKGJsa19zeiBldGMuKQotICovICAKLXN0YXRpYyBpbnQgZW1wdHlfZGVibG9ja19idWYoX191OCBfX3VzZXIgKnVzcl9idWYsIGNvbnN0IGludCByZXFfbGVuLAotCQkJICAgICBjb25zdCBfX3U4ICpzcmNfYnVmLCBjb25zdCBpbnQgc2VnX3N6LAotCQkJICAgICB6ZnRfcG9zaXRpb24gKnBvcywKLQkJCSAgICAgY29uc3QgemZ0X3ZvbGluZm8gKnZvbHVtZSkKLXsKLQlpbnQgY250OwotCWludCByZXN1bHQgPSAwOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0UoZnRfdF9kYXRhX2Zsb3csICJ0aGlzX3NlZ3Nfc2l6ZTogJWQiLCBzZWdfc3opOwotCWlmICh6ZnRfdXNlX2NvbXByZXNzaW9uICYmIHZvbHVtZS0+dXNlX2NvbXByZXNzaW9uKSB7Ci0JCVRSQUNFX0NBVENIKHpmdF9jbXByX2xvY2soMSAvKiB0cnkgdG8gbG9hZCAqLyksKTsKLQkJVFJBQ0VfQ0FUQ0gocmVzdWx0PSAoKnpmdF9jbXByX29wcy0+cmVhZCkoJmNudCwKLQkJCQkJCQkgIHVzcl9idWYsIHJlcV9sZW4sCi0JCQkJCQkJICBzcmNfYnVmLCBzZWdfc3osCi0JCQkJCQkJICBwb3MsIHZvbHVtZSksKTsKLQl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkJVFJBQ0VfQ0FUQ0gocmVzdWx0PSB6ZnRfc2ltcGxlX3JlYWQgKCZjbnQsCi0JCQkJCQkgICAgIHVzcl9idWYsIHJlcV9sZW4sCi0JCQkJCQkgICAgIHNyY19idWYsIHNlZ19zeiwKLQkJCQkJCSAgICAgcG9zLCB2b2x1bWUpLCk7Ci0JfQotCXBvcy0+dm9sdW1lX3BvcyAgICs9IHJlc3VsdDsKLSAgICAgICAgcG9zLT50YXBlX3BvcyAgICAgKz0gY250OwotCXBvcy0+c2VnX2J5dGVfcG9zICs9IGNudDsKLQlidWZfbGVuX3JkICAgICAgICAtPSBjbnQ7IC8qIHJlbWFpbmluZyBieXRlcyBpbiBidWZmZXIgKi8KLQlUUkFDRShmdF90X2RhdGFfZmxvdywgImJ1Zl9sZW5fcmQ6ICVkLCBjbnQ6ICVkIiwgYnVmX2xlbl9yZCwgY250KTsKLQlpZihwb3MtPnNlZ19ieXRlX3BvcyA+PSBzZWdfc3opIHsKLQkJcG9zLT5zZWdfcG9zKys7Ci0JCXBvcy0+c2VnX2J5dGVfcG9zID0gMDsKLQl9Ci0JVFJBQ0UoZnRfdF9kYXRhX2Zsb3csICJieXRlcyBtb3ZlZCBvdXQgb2YgZGVibG9jay1idWZmZXI6ICVkIiwgY250KTsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotCi0vKiBub3RlOiB3ZSBzdG9yZSB0aGUgc2VnbWVudCBpZCBvZiB0aGUgc2VnbWVudCB0aGF0IGlzIGluc2lkZSB0aGUKLSAqIGRlYmxvY2sgYnVmZmVyLiBUaGlzIHNwYXJlcyBhIGxvdCBvZiBmdGFwZV9yZWFkX3NlZ21lbnQoKXMgd2hlbiB3ZQotICogdXNlIHNtYWxsIGJsb2NrLXNpemVzLiBUaGUgYmxvY2stc2l6ZSBtYXkgYmUgMWtiIChTRUNUT1JfU0laRSkuIEluCi0gKiB0aGlzIGNhc2UgYSBNVEZTUiAyOCBtYXliZSBzdGlsbCBpbnNpZGUgdGhlIHNhbWUgc2VnbWVudC4KLSAqLwotaW50IF96ZnRfcmVhZChjaGFyIF9fdXNlciAqYnVmZiwgaW50IHJlcV9sZW4pCi17Ci0JaW50IHJlcV9jbGlwcGVkOwotCWludCByZXN1bHQgICAgID0gMDsKLQlpbnQgYnl0ZXNfcmVhZCA9IDA7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBzZWdfc3ogPSAwOwotCXN0YXRpYyBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lID0gTlVMTDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQl6ZnRfcmVzaWQgPSByZXFfbGVuOwotCXJlc3VsdCA9IGNoZWNrX3JlYWRfYWNjZXNzKCZyZXFfbGVuLCAmdm9sdW1lLAotCQkJCSAgICZyZXFfY2xpcHBlZCwgJnpmdF9wb3MpOwotCXN3aXRjaChyZXN1bHQpIHsKLQljYXNlIDA6IAotCQlicmVhazsgLyogbm90aGluZyBzcGVjaWFsICovCi0JY2FzZSAxOiAKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIkVPRCByZWFjaGVkIik7Ci0JCVRSQUNFX0VYSVQgMDsgICAvKiBFT0QgKi8KLQlkZWZhdWx0OgotCQlUUkFDRV9BQk9SVChyZXN1bHQsIGZ0X3Rfbm9pc2UsCi0JCQkgICAgImNoZWNrX3JlYWRfYWNjZXNzKCkgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJCSAgICByZXN1bHQpOwotCQlUUkFDRV9FWElUIHJlc3VsdDsKLQl9Ci0Jd2hpbGUgKHJlcV9sZW4gPiAwKSB7IAotCQkvKiAgQWxsb3cgZXNjYXBlIGZyb20gdGhpcyBsb29wIG9uIHNpZ25hbCAhCi0JCSAqLwotCQlGVF9TSUdOQUxfRVhJVChfRE9OVF9CTE9DSyk7Ci0JCS8qIGJ1Zl9sZW5fcmQgPT0gMCBtZWFucyB0aGF0IHdlIG5lZWQgdG8gcmVhZCBhIG5ldwotCQkgKiBzZWdtZW50LgotCQkgKi8KLQkJaWYgKGJ1Zl9sZW5fcmQgPT0gMCkgewotCQkJd2hpbGUoKHJlc3VsdCA9IHpmdF9mZXRjaF9zZWdtZW50KHpmdF9wb3Muc2VnX3BvcywKLQkJCQkJCQkgIHpmdF9kZWJsb2NrX2J1ZiwKLQkJCQkJCQkgIEZUX1JEX0FIRUFEKSkgPT0gMCkgewotCQkJCXpmdF9wb3Muc2VnX3BvcyArKzsKLQkJCQl6ZnRfcG9zLnNlZ19ieXRlX3BvcyA9IDA7Ci0JCQl9Ci0JCQlpZiAocmVzdWx0IDwgMCkgewotCQkJCXpmdF9yZXNpZCAtPSBieXRlc19yZWFkOwotCQkJCVRSQUNFX0FCT1JUKHJlc3VsdCwgZnRfdF9ub2lzZSwKLQkJCQkJICAgICJ6ZnRfZmV0Y2hfc2VnbWVudCgpOiAlZCIsCi0JCQkJCSAgICByZXN1bHQpOwotCQkJfQotCQkJc2VnX3N6ID0gcmVzdWx0OwotCQkJYnVmX2xlbl9yZCA9IHNlZ19zeiAtIHpmdF9wb3Muc2VnX2J5dGVfcG9zOwotCQl9Ci0JCVRSQUNFX0NBVENIKHJlc3VsdCA9IGVtcHR5X2RlYmxvY2tfYnVmKGJ1ZmYsIAotCQkJCQkJICAgICAgIHJlcV9sZW4sCi0JCQkJCQkgICAgICAgemZ0X2RlYmxvY2tfYnVmLCAKLQkJCQkJCSAgICAgICBzZWdfc3osIAotCQkJCQkJICAgICAgICZ6ZnRfcG9zLAotCQkJCQkJICAgICAgIHZvbHVtZSksCi0JCQkgICAgemZ0X3Jlc2lkIC09IGJ5dGVzX3JlYWQpOwotCQlUUkFDRShmdF90X2RhdGFfZmxvdywgImJ5dGVzIGp1c3QgcmVhZDogJWQiLCByZXN1bHQpOwotCQlieXRlc19yZWFkICs9IHJlc3VsdDsgLyogd2hhdCB3ZSBnb3Qgc28gZmFyICAgICAgICovCi0JCWJ1ZmYgICAgICAgKz0gcmVzdWx0OyAvKiBpbmRleCBpbiB1c2VyLWJ1ZmZlciAgICAgKi8KLQkJcmVxX2xlbiAgICAtPSByZXN1bHQ7IC8qIHdoYXQncyBsZWZ0IGZyb20gcmVxX2xlbiAqLwotCX0gLyogd2hpbGUgKHJlcV9sZW4gID4gMCkgKi8KLQlpZiAocmVxX2NsaXBwZWQpIHsKLQkJVFJBQ0UoZnRfdF9kYXRhX2Zsb3csCi0JCSAgICAgICJtYXliZSBwYXJ0aWFsIGNvdW50IGJlY2F1c2Ugb2YgZW9mIG1hcmsiKTsKLQkJaWYgKHpmdF9qdXN0X2JlZm9yZV9lb2YgJiYgYnl0ZXNfcmVhZCA9PSAwKSB7Ci0JCQkvKiByZXFfbGVuIHdhcyA+IDAsIGJ1dCB1c2VyIGRpZG4ndCBnZXQKLQkJCSAqIGFueXRoaW5nIHRoZSB1c2VyIGhhcyByZWFkIGluIHRoZSBlb2YtbWFyayAKLQkJCSAqLwotCQkJemZ0X21vdmVfcGFzdF9lb2YoJnpmdF9wb3MpOwotCQkJZnRhcGVfYWJvcnRfb3BlcmF0aW9uKCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBkb24ndCBza2lwIHRvIHRoZSBuZXh0IGZpbGUgYmVmb3JlIHRoZSB1c2VyCi0JCQkgKiB0cmllZCB0byByZWFkIGEgc2Vjb25kIHRpbWUgcGFzdCBFT0YgSnVzdAotCQkJICogbWFyayB0aGF0IHdlIGFyZSBhdCBFT0YgYW5kIG1heWJlIGRlY3JlbWVudAotCQkJICogemZ0X3NlZ19wb3MgdG8gc3RheSBpbiB0aGUgc2FtZSB2b2x1bWU7Ci0JCQkgKi8KLQkJCXpmdF9qdXN0X2JlZm9yZV9lb2YgPSAxOwotCQkJemZ0X3Bvc2l0aW9uX2JlZm9yZV9lb2YoJnpmdF9wb3MsIHZvbHVtZSk7Ci0JCQlUUkFDRShmdF90X25vaXNlLCAianVzdCBiZWZvcmUgZW9mIik7Ci0JCX0KLQl9Ci0JemZ0X3Jlc2lkIC09IHJlc3VsdDsgLyogZm9yIE1UU1RBVFVTICAgICAgICovCi0JVFJBQ0VfRVhJVCBieXRlc19yZWFkOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtcmVhZC5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtcmVhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjk0MWRlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSNpZm5kZWYgX1pGVEFQRV9SRUFEX0gKLSNkZWZpbmUgX1pGVEFQRV9SRUFEX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUKLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvemZ0YXBlL3pmdGFwZS1yZWFkLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOTowNyAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgcmVhZCBmdW5jdGlvbnMKLSAqICAgICAgZm9yIHRoZSB6ZnRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqCi0gKi8KLQotI2luY2x1ZGUgIi4uL2xvd2xldmVsL2Z0YXBlLXJlYWQuaCIKLQotLyogICAgICBmdGFwZS1yZWFkLmMgZGVmaW5lZCBnbG9iYWwgdmFycy4KLSAqLwotZXh0ZXJuIGludCB6ZnRfanVzdF9iZWZvcmVfZW9mOwotCQotLyogICAgICBmdGFwZS1yZWFkLmMgZGVmaW5lZCBnbG9iYWwgZnVuY3Rpb25zLgotICovCi1leHRlcm4gdm9pZCB6ZnRfemFwX3JlYWRfYnVmZmVycyh2b2lkKTsKLWV4dGVybiBpbnQgIHpmdF9yZWFkX2hlYWRlcl9zZWdtZW50cyh2b2lkKTsKLWV4dGVybiBpbnQgIHpmdF9mZXRjaF9zZWdtZW50X2ZyYWN0aW9uKGNvbnN0IHVuc2lnbmVkIGludCBzZWdtZW50LAotCQkJCSAgICAgICB2b2lkICpidWZmZXIsCi0JCQkJICAgICAgIGNvbnN0IGZ0X3JlYWRfbW9kZV90IHJlYWRfbW9kZSwKLQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHN0YXJ0LAotCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0jZGVmaW5lIHpmdF9mZXRjaF9zZWdtZW50KHNlZ21lbnQsIGFkZHJlc3MsIHJlYWRfbW9kZSkJCVwKLQl6ZnRfZmV0Y2hfc2VnbWVudF9mcmFjdGlvbihzZWdtZW50LCBhZGRyZXNzLCByZWFkX21vZGUsCVwKLQkJCQkgICAwLCBGVF9TRUdNRU5UX1NJWkUpCi0vKiAgIGhvb2sgZm9yIHRoZSBWRlMgaW50ZXJmYWNlCi0gKi8KLWV4dGVybiBpbnQgIF96ZnRfcmVhZChjaGFyIF9fdXNlciAqYnVmZiwgaW50IHJlcV9sZW4pOwotCi0jZW5kaWYgLyogX1pGVEFQRV9SRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXJ3LmMgYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1ydy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWI2MzQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXJ3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3IENsYXVzLUp1c3R1cyBIZWluZQotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS96ZnRhcGUvemZ0YXBlLXJ3LmMsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOTowOCAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgc29tZSBjb21tb24gY29kZSBmb3IgdGhlIHIvdyBjb2RlIGZvcgotICogICAgICB6ZnRhcGUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotI2luY2x1ZGUgPGxpbnV4L3pmdGFwZS5oPgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtaW5pdC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtZW9mLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1jdGwuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXdyaXRlLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1yZWFkLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1ydy5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtdnRibC5oIgotCi0vKiAgICAgIEdsb2JhbCB2YXJzLgotICovCi0KLV9fdTggKnpmdF9kZWJsb2NrX2J1ZjsKLV9fdTggKnpmdF9oc2VnX2J1ZjsKLWludCB6ZnRfZGVibG9ja19zZWdtZW50ID0gLTE7Ci16ZnRfc3RhdHVzX2VudW0gemZ0X2lvX3N0YXRlID0gemZ0X2lkbGU7Ci1pbnQgemZ0X2hlYWRlcl9jaGFuZ2VkOwotaW50IHpmdF9xaWMxMTM7IC8qIGNvbmZvcm0gdG8gb2xkIHNwZWNzLiBhbmQgb2xkIHpmdGFwZSAqLwotaW50IHpmdF91c2VfY29tcHJlc3Npb247Ci16ZnRfcG9zaXRpb24gemZ0X3BvcyA9IHsKLQktMSwgLyogc2VnX3BvcyAqLwotCTAsICAvKiBzZWdfYnl0ZV9wb3MgKi8KLQkwLCAgLyogdGFwZV9wb3MgKi8KLQkwICAgLyogdm9sdW1lX3BvcyAqLwotfTsKLXVuc2lnbmVkIGludCB6ZnRfYmxrX3N6ID0gQ09ORklHX1pGVF9ERkxUX0JMS19TWjsKLV9fczY0IHpmdF9jYXBhY2l0eTsKLQotdW5zaWduZWQgaW50IHpmdF93cml0dGVuX3NlZ21lbnRzOwotaW50IHpmdF9sYWJlbF9jaGFuZ2VkOwotCi0vKiAgICAgIExvY2FsIHZhcnMuCi0gKi8KLQotdW5zaWduZWQgaW50IHpmdF9nZXRfc2VnX3N6KHVuc2lnbmVkIGludCBzZWdtZW50KQotewotCWludCBzaXplOwotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0JCi0Jc2l6ZSA9IEZUX1NFR01FTlRfU0laRSAtIAotCQljb3VudF9vbmVzKGZ0YXBlX2dldF9iYWRfc2VjdG9yX2VudHJ5KHNlZ21lbnQpKSpGVF9TRUNUT1JfU0laRTsKLQlpZiAoc2l6ZSA+IDApIHsKLQkJVFJBQ0VfRVhJVCAodW5zaWduZWQpc2l6ZTsgCi0JfSBlbHNlIHsKLQkJVFJBQ0VfRVhJVCAwOwotCX0KLX0KLQotLyogZnRhcGVfc2V0X2ZsYWdzKCkuIENsYXVzLUp1c3R1cyBIZWluZSwgMTk5NC8xOTk1Ci0gKi8KLXZvaWQgemZ0X3NldF9mbGFncyh1bnNpZ25lZCBtaW5vcl91bml0KQoteyAgICAgCi0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JemZ0X3VzZV9jb21wcmVzc2lvbiA9IHpmdF9xaWNfbW9kZSA9IDA7Ci0Jc3dpdGNoIChtaW5vcl91bml0ICYgWkZUX01JTk9SX09QX01BU0spIHsKLQljYXNlIChaRlRfUTgwX01PREUgfCBaRlRfWklQX01PREUpOgotCWNhc2UgWkZUX1pJUF9NT0RFOgotCQl6ZnRfdXNlX2NvbXByZXNzaW9uID0gMTsKLQljYXNlIDA6Ci0JY2FzZSBaRlRfUTgwX01PREU6Ci0JCXpmdF9xaWNfbW9kZSA9IDE7Ci0JCWlmICh6ZnRfbXRfY29tcHJlc3Npb24pIHsgLyogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgKi8KLQkJCXpmdF91c2VfY29tcHJlc3Npb24gPSAxOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgWkZUX1JBV19NT0RFOgotCQlUUkFDRShmdF90X25vaXNlLCAic3dpdGNoaW5nIHRvIHJhdyBtb2RlIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgIldhcm5pbmc6XG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiV3JvbmcgY29tYmluYXRpb24gb2YgbWlub3IgZGV2aWNlIGJpdHMuXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAiU3dpdGNoaW5nIHRvIHJhdyByZWFkLW9ubHkgbW9kZS4iKTsKLQkJemZ0X3dyaXRlX3Byb3RlY3RlZCA9IDE7Ci0JCWJyZWFrOwotCX0KLQlUUkFDRV9FWElUOwotfQotCi0vKiBjb21wdXRlcyB0aGUgc2VnbWVudCBhbmQgYnl0ZSBvZmZzZXQgaW5zaWRlIHRoZSBzZWdtZW50Ci0gKiBjb3JyZXNwb25kaW5nIHRvIHRhcGVfcG9zLgotICoKLSAqIHRhcGVfcG9zIGdpdmVzIHRoZSBvZmZzZXQgaW4gYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQotICogZnRfZmlyc3RfZGF0YV9zZWdtZW50ICpzZWdfYnl0ZV9wb3MgaXMgdGhlIG9mZnNldCBpbiB0aGUgY3VycmVudAotICogc2VnbWVudCBpbiBieXRlcwotICoKLSAqIE9mLCBpZiB0aGlzIHJvdXRpbmUgd2FzIGNhbGxlZCBvZnRlbiBvbmUgc2hvdWxkIGNhY2hlIHRoZSBsYXN0IGRhdGEKLSAqIHBvcyBpdCB3YXMgY2FsbGVkIHdpdGgsIGJ1dCBhY3R1YWxseSB0aGlzIGlzIG9ubHkgbmVlZGVkIGluCi0gKiBmdGFwZV9zZWVrX2Jsb2NrKCksIHRoYXQgaXMsIGFsbW9zdCBuZXZlci4KLSAqLwotaW50IHpmdF9jYWxjX3NlZ19ieXRlX2Nvb3JkKGludCAqc2VnX2J5dGVfcG9zLCBfX3M2NCB0YXBlX3BvcykKLXsKLQlpbnQgc2VnbWVudDsKLQlpbnQgc2VnX3N6OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWlmICh0YXBlX3BvcyA9PSAwKSB7Ci0JCSpzZWdfYnl0ZV9wb3MgPSAwOwotCQlzZWdtZW50ID0gZnRfZmlyc3RfZGF0YV9zZWdtZW50OwotCX0gZWxzZSB7Ci0JCXNlZ19zeiA9IDA7Ci0JCQotCQlmb3IgKHNlZ21lbnQgPSBmdF9maXJzdF9kYXRhX3NlZ21lbnQ7IAotCQkgICAgICgodGFwZV9wb3MgPiAwKSAmJiAoc2VnbWVudCA8PSBmdF9sYXN0X2RhdGFfc2VnbWVudCkpOwotCQkgICAgIHNlZ21lbnQrKykgewotCQkJc2VnX3N6ID0gemZ0X2dldF9zZWdfc3ooc2VnbWVudCk7IAotCQkJdGFwZV9wb3MgLT0gc2VnX3N6OwotCQl9Ci0JCWlmKHRhcGVfcG9zID49IDApIHsKLQkJCS8qIHRoZSBjYXNlIHRhcGVfcG9zID4gIT0gMCBtZWFucyB0aGF0IHRoZQotCQkJICogYXJndW1lbnQgdGFwZV9wb3MgbGllcyBiZXlvbmQgdGhlIEVPVC4KLQkJCSAqLwotCQkJKnNlZ19ieXRlX3Bvcz0gMDsKLQkJfSBlbHNlIHsgLyogdGFwZV9wb3MgPCAwICovCi0JCQlzZWdtZW50LS07Ci0JCQkqc2VnX2J5dGVfcG9zPSB0YXBlX3BvcyArIHNlZ19zejsKLQkJfQotCX0KLQlUUkFDRV9FWElUKHNlZ21lbnQpOwotfQotCi0vKiBmdGFwZV9jYWxjX3RhcGVfcG9zKCkuCi0gKgotICogY29tcHV0ZXMgdGhlIG9mZnNldCBpbiBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gKiBmdF9maXJzdF9kYXRhX3NlZ21lbnQgaW52ZXJzZSB0byBmdGFwZV9jYWxjX3NlZ19ieXRlX2Nvb3JkCi0gKgotICogV2Ugc2hvdWxkIGRvIHNvbWUgY2FjaGluZy4gQnV0IGhvdzoKLSAqCi0gKiBFYWNoIHRpbWUgdGhlIGhlYWRlciBzZWdtZW50cyBhcmUgcmVhZCBpbiwgdGhpcyByb3V0aW5lIGlzIGNhbGxlZAotICogd2l0aCBmdF90cmFja3NfcGVyX3RhcGUqc2VnbWVudHNfcGVyX3RyYWNrIGFyZ3VtbmV0LiBTbyB0aGlzIHNob3VsZCBiZQotICogdGhlIHRpbWUgdG8gcmVzZXQgdGhlIGNhY2hlLgotICoKLSAqIEFsc28sIGl0IG1pZ2h0IGJlIGluIHRoZSBmdXR1cmUgdGhhdCB0aGUgYmFkIHNlY3RvciBtYXAgZ2V0cwotICogY2hhbmdlZC4gIC0+IHJlc2V0IHRoZSBjYWNoZQotICovCi1zdGF0aWMgaW50IHNlZ19wb3M7Ci1zdGF0aWMgX19zNjQgdGFwZV9wb3M7Ci0KLV9fczY0IHpmdF9nZXRfY2FwYWNpdHkodm9pZCkKLXsKLQlzZWdfcG9zICA9IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudDsKLQl0YXBlX3BvcyA9IDA7Ci0KLQl3aGlsZSAoc2VnX3BvcyA8PSBmdF9sYXN0X2RhdGFfc2VnbWVudCkgewotCQl0YXBlX3BvcyArPSB6ZnRfZ2V0X3NlZ19zeihzZWdfcG9zICsrKTsKLQl9Ci0JcmV0dXJuIHRhcGVfcG9zOwotfQotCi1fX3M2NCB6ZnRfY2FsY190YXBlX3BvcyhpbnQgc2VnbWVudCkKLXsKLQlpbnQgZDEsIGQyLCBkMzsKLQlUUkFDRV9GVU4oZnRfdF9hbnkpOwotCQotCWlmIChzZWdtZW50ID4gZnRfbGFzdF9kYXRhX3NlZ21lbnQpIHsKLQkgICAgICAgIFRSQUNFX0VYSVQgemZ0X2NhcGFjaXR5OwotCX0KLQlpZiAoc2VnbWVudCA8IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudCkgewotCQlUUkFDRV9FWElUIDA7Ci0JfQotCWQyID0gc2VnbWVudCAtIHNlZ19wb3M7Ci0JaWYgKC1kMiA+IDEwKSB7Ci0JCWQxID0gc2VnbWVudCAtIGZ0X2ZpcnN0X2RhdGFfc2VnbWVudDsKLQkJaWYgKC1kMiA+IGQxKSB7Ci0JCQl0YXBlX3BvcyA9IDA7Ci0JCQlzZWdfcG9zID0gZnRfZmlyc3RfZGF0YV9zZWdtZW50OwotCQkJZDIgPSBkMTsKLQkJfQotCX0KLQlpZiAoZDIgPiAxMCkgewotCQlkMyA9IGZ0X2xhc3RfZGF0YV9zZWdtZW50IC0gc2VnbWVudDsKLQkJaWYgKGQyID4gZDMpIHsKLQkJCXRhcGVfcG9zID0gemZ0X2NhcGFjaXR5OwotCQkJc2VnX3BvcyAgPSBmdF9sYXN0X2RhdGFfc2VnbWVudCArIDE7Ci0JCQlkMiA9IC1kMzsKLQkJfQotCX0JCQotCWlmIChkMiA+IDApIHsKLQkJd2hpbGUgKHNlZ19wb3MgPCBzZWdtZW50KSB7Ci0JCQl0YXBlX3BvcyArPSAgemZ0X2dldF9zZWdfc3ooc2VnX3BvcysrKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlIChzZWdfcG9zID4gc2VnbWVudCkgewotCQkJdGFwZV9wb3MgLT0gIHpmdF9nZXRfc2VnX3N6KC0tc2VnX3Bvcyk7Ci0JCX0KLQl9Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgIm5ldyBjYWNoZWQgcG9zOiAlZCIsIHNlZ19wb3MpOwotCi0JVFJBQ0VfRVhJVCB0YXBlX3BvczsKLX0KLQotLyogY29weSBaLWxhYmVsIHN0cmluZyB0byBidWZmZXIsIGtlZXBzIHRyYWNrIG9mIHRoZSBjb3JyZWN0IG9mZnNldCBpbgotICogYGJ1ZmZlcicgCi0gKi8KLXZvaWQgemZ0X3VwZGF0ZV9sYWJlbChfX3U4ICpidWZmZXIpCi17IAotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCWlmIChzdHJuY21wKCZidWZmZXJbRlRfTEFCRUxdLCBaRlRBUEVfTEFCRUwsIAotCQkgICAgc2l6ZW9mKFpGVEFQRV9MQUJFTCktMSkgIT0gMCkgewotCQlUUkFDRShmdF90X2luZm8sICJ1cGRhdGluZyBsYWJlbCBmcm9tIFwiJXNcIiB0byBcIiVzXCIiLAotCQkgICAgICAmYnVmZmVyW0ZUX0xBQkVMXSwgWkZUQVBFX0xBQkVMKTsKLQkJc3RyY3B5KCZidWZmZXJbRlRfTEFCRUxdLCBaRlRBUEVfTEFCRUwpOwotCQltZW1zZXQoJmJ1ZmZlcltGVF9MQUJFTF0gKyBzaXplb2YoWkZUQVBFX0xBQkVMKSAtIDEsICcgJywgCi0JCSAgICAgICBGVF9MQUJFTF9TWiAtIHNpemVvZihaRlRBUEVfTEFCRUwgKyAxKSk7Ci0JCVBVVDQoYnVmZmVyLCBGVF9MQUJFTF9EQVRFLCAwKTsKLQkJemZ0X2xhYmVsX2NoYW5nZWQgPSB6ZnRfaGVhZGVyX2NoYW5nZWQgPSAxOyAvKiBjaGFuZ2VkICovCi0JfQotCVRSQUNFX0VYSVQ7Ci19Ci0KLWludCB6ZnRfdmVyaWZ5X3dyaXRlX3NlZ21lbnRzKHVuc2lnbmVkIGludCBzZWdtZW50LCAKLQkJCSAgICAgIF9fdTggKmRhdGEsIHNpemVfdCBzaXplLAotCQkJICAgICAgX191OCAqYnVmZmVyKQotewotCWludCByZXN1bHQ7Ci0JX191OCAqd3JpdGVfYnVmOwotCV9fdTggKnNyY19idWY7Ci0JaW50IHNpbmdsZTsKLQlpbnQgc2VnX3BvczsKLQlpbnQgc2VnX3N6OwotCWludCByZW1haW5pbmc7Ci0JZnRfd3JpdGVfbW9kZV90IHdyaXRlX21vZGU7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlzZWdfcG9zICAgPSBzZWdtZW50OwotCXNlZ19zeiAgICA9IHpmdF9nZXRfc2VnX3N6KHNlZ19wb3MpOwotCXNyY19idWYgICA9IGRhdGE7Ci0Jc2luZ2xlICAgID0gc2l6ZSA8PSBzZWdfc3o7Ci0JcmVtYWluaW5nID0gc2l6ZTsKLQlkbyB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJcbiIKLQkJICAgICAgS0VSTl9JTkZPICJyZW1haW5pbmc6ICVkXG4iCi0JCSAgICAgIEtFUk5fSU5GTyAic2VnX3N6ICAgOiAlZFxuIgotCQkgICAgICBLRVJOX0lORk8gInNlZ21lbnQgIDogJWQiLAotCQkgICAgICByZW1haW5pbmcsIHNlZ19zeiwgc2VnX3Bvcyk7Ci0JCWlmIChyZW1haW5pbmcgPT0gc2VnX3N6KSB7Ci0JCQl3cml0ZV9idWYgPSBzcmNfYnVmOwotCQkJd3JpdGVfbW9kZSA9IHNpbmdsZSA/IEZUX1dSX1NJTkdMRSA6IEZUX1dSX01VTFRJOwotCQkJcmVtYWluaW5nID0gMDsKLQkJfSBlbHNlIGlmIChyZW1haW5pbmcgPiBzZWdfc3opIHsKLQkJCXdyaXRlX2J1ZiA9IHNyY19idWY7Ci0JCQl3cml0ZV9tb2RlID0gRlRfV1JfQVNZTkM7IC8qIGRvbid0IHN0YXJ0IHRhcGUgKi8KLQkJCXJlbWFpbmluZyAtPSBzZWdfc3o7Ci0JCX0gZWxzZSB7IC8qIHJlbWFpbmluZyA8IHNlZ19zeiAqLwotCQkJd3JpdGVfYnVmID0gYnVmZmVyOwotCQkJbWVtY3B5KHdyaXRlX2J1Ziwgc3JjX2J1ZiwgcmVtYWluaW5nKTsKLQkJCW1lbXNldCgmd3JpdGVfYnVmW3JlbWFpbmluZ10sJ1wwJyxzZWdfc3otcmVtYWluaW5nKTsKLQkJCXdyaXRlX21vZGUgPSBzaW5nbGUgPyBGVF9XUl9TSU5HTEUgOiBGVF9XUl9NVUxUSTsKLQkJCXJlbWFpbmluZyA9IDA7Ci0JCX0KLQkJaWYgKChyZXN1bHQgPSBmdGFwZV93cml0ZV9zZWdtZW50KHNlZ19wb3MsIAotCQkJCQkJICB3cml0ZV9idWYsIAotCQkJCQkJICB3cml0ZV9tb2RlKSkgIT0gc2VnX3N6KSB7Ci0JCQlUUkFDRShmdF90X2VyciwgIkVycm9yOiAiCi0JCQkgICAgICAiQ291bGRuJ3Qgd3JpdGUgc2VnbWVudCAlZCIsIHNlZ19wb3MpOwotCQkJVFJBQ0VfRVhJVCByZXN1bHQgPCAwID8gcmVzdWx0IDogLUVJTzsgLyogYmFpbCBvdXQgKi8KLQkJfQotCQl6ZnRfd3JpdHRlbl9zZWdtZW50cyArKzsKLQkJc2VnX3N6ID0gemZ0X2dldF9zZWdfc3ooKytzZWdfcG9zKTsKLQkJc3JjX2J1ZiArPSByZXN1bHQ7Ci0JfSB3aGlsZSAocmVtYWluaW5nID4gMCk7Ci0JaWYgKGZ0YXBlX2dldF9zdGF0dXMoKS0+ZnRpX3N0YXRlID09IHdyaXRpbmcpIHsKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfbG9vcF91bnRpbF93cml0ZXNfZG9uZSgpLCk7Ci0JCVRSQUNFX0NBVENIKGZ0YXBlX2Fib3J0X29wZXJhdGlvbigpLCk7Ci0JCXpmdF9wcmV2ZW50X2ZsdXNoKCk7Ci0JfQotCXNlZ19wb3MgPSBzZWdtZW50OwotCXNyY19idWYgPSBkYXRhOwotCXJlbWFpbmluZyA9IHNpemU7Ci0JZG8gewotCQlUUkFDRV9DQVRDSChyZXN1bHQgPSBmdGFwZV9yZWFkX3NlZ21lbnQoc2VnX3BvcywgYnVmZmVyLCAKLQkJCQkJCQlzaW5nbGUgPyBGVF9SRF9TSU5HTEUKLQkJCQkJCQk6IEZUX1JEX0FIRUFEKSwpOwotCQlpZiAobWVtY21wKHNyY19idWYsIGJ1ZmZlciwgCi0JCQkgICByZW1haW5pbmcgPiByZXN1bHQgPyByZXN1bHQgOiByZW1haW5pbmcpICE9IDApIHsKLQkJCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfZXJyLAotCQkJCSAgICAiRmFpbGVkIHRvIHZlcmlmeSB3cml0dGVuIHNlZ21lbnQgJWQiLAotCQkJCSAgICBzZWdfcG9zKTsKLQkJfQotCQlyZW1haW5pbmcgLT0gcmVzdWx0OwotCQlUUkFDRShmdF90X25vaXNlLCAidmVyaWZ5IHN1Y2Nlc3NmdWw6XG4iCi0JCSAgICAgIEtFUk5fSU5GTyAic2VnbWVudCAgOiAlZFxuIgotCQkgICAgICBLRVJOX0lORk8gInNlZ3NpemUgIDogJWRcbiIKLQkJICAgICAgS0VSTl9JTkZPICJyZW1haW5pbmc6ICVkIiwKLQkJICAgICAgc2VnX3BvcywgcmVzdWx0LCByZW1haW5pbmcpOwotCQlzcmNfYnVmICAgKz0gc2VnX3N6OwotCQlzZWdfcG9zKys7Ci0JfSB3aGlsZSAocmVtYWluaW5nID4gMCk7Ci0JVFJBQ0VfRVhJVCBzaXplOwotfQotCi0KLS8qIHpmdF9lcmFzZSgpLiAgaW1wbGVtZW50ZWQgY29tcHJlc3Npb24taGFuZGxpbmcKLSAqCi0gKiBjYWxjdWxhdGUgdGhlIGZpcnN0IGRhdGEtc2VnbWVudCB3aGVuIHVzaW5nL25vdCB1c2luZyBjb21wcmVzc2lvbi4KLSAqCi0gKiB1cGRhdGUgaGVhZGVyLXNlZ21lbnQgYW5kIGNvbXByZXNzaW9uLW1hcC1zZWdtZW50LgotICovCi1pbnQgemZ0X2VyYXNlKHZvaWQpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYgKCF6ZnRfaGVhZGVyX3JlYWQpIHsKLQkJVFJBQ0VfQ0FUQ0goemZ0X3ZtYWxsb2Nfb25jZSgodm9pZCAqKikmemZ0X2hzZWdfYnVmLAotCQkJCQkgICAgIEZUX1NFR01FTlRfU0laRSksKTsKLQkJLyogbm8gbmVlZCB0byByZWFkIHRoZSB2dGJsIGFuZCBjb21wcmVzc2lvbiBtYXAgKi8KLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfcmVhZF9oZWFkZXJfc2VnbWVudCh6ZnRfaHNlZ19idWYpLCk7Ci0JCWlmICgoemZ0X29sZF9mdGFwZSA9IAotCQkgICAgIHpmdF9mdGFwZV92YWxpZGF0ZV9sYWJlbCgmemZ0X2hzZWdfYnVmW0ZUX0xBQkVMXSkpKSB7Ci0JCQl6ZnRfZnRhcGVfZXh0cmFjdF9maWxlX21hcmtzKHpmdF9oc2VnX2J1Zik7Ci0JCX0KLQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJICAgICAgImZ0X2ZpcnN0X2RhdGFfc2VnbWVudDogJWQsIGZ0X2xhc3RfZGF0YV9zZWdtZW50OiAlZCIsIAotCQkgICAgICBmdF9maXJzdF9kYXRhX3NlZ21lbnQsIGZ0X2xhc3RfZGF0YV9zZWdtZW50KTsKLQkJemZ0X3FpYzExMyA9IChmdF9mb3JtYXRfY29kZSAhPSBmbXRfbm9ybWFsICYmCi0JCQkgICAgICBmdF9mb3JtYXRfY29kZSAhPSBmbXRfMTEwMGZ0ICYmCi0JCQkgICAgICBmdF9mb3JtYXRfY29kZSAhPSBmbXRfNDI1ZnQpOwotCX0KLQlpZiAoemZ0X29sZF9mdGFwZSkgewotCQl6ZnRfY2xlYXJfZnRhcGVfZmlsZV9tYXJrcygpOwotCQl6ZnRfb2xkX2Z0YXBlID0gMDsgLyogbm8gbG9uZ2VyIG9sZCBmdGFwZSAqLwotCX0KLQlQVVQyKHpmdF9oc2VnX2J1ZiwgRlRfQ01BUF9TVEFSVCwgMCk7Ci0JemZ0X3ZvbHVtZV90YWJsZV9jaGFuZ2VkID0gMTsKLQl6ZnRfY2FwYWNpdHkgPSB6ZnRfZ2V0X2NhcGFjaXR5KCk7Ci0JemZ0X2luaXRfdnRibCgpOwotCS8qIHRoZSByZXN0IG11c3QgYmUgZG9uZSBpbiBmdGFwZV91cGRhdGVfaGVhZGVyX3NlZ21lbnRzIAotCSAqLwotCXpmdF9oZWFkZXJfcmVhZCA9IDE7Ci0JemZ0X2hlYWRlcl9jaGFuZ2VkID0gMTsgLyogZm9yY2UgdXBkYXRlIG9mIHRpbWVzdGFtcCAqLwotCXJlc3VsdCA9IHpmdF91cGRhdGVfaGVhZGVyX3NlZ21lbnRzKCk7Ci0KLQlmdGFwZV9hYm9ydF9vcGVyYXRpb24oKTsKLQotCXpmdF9yZXNldF9wb3NpdGlvbigmemZ0X3Bvcyk7Ci0JemZ0X3NldF9mbGFncyAoemZ0X3VuaXQpOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi11bnNpZ25lZCBpbnQgemZ0X2dldF90aW1lKHZvaWQpIAotewotCXVuc2lnbmVkIGludCBkYXRlID0gRlRfVElNRV9TVEFNUCgyMDk3LCAxMSwgMzAsIDIzLCA1OSwgNTkpOyAvKiBmdW4gKi8KLQlyZXR1cm4gZGF0ZTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXJ3LmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS1ydy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2VlYzIyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXJ3LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotI2lmbmRlZiBfWkZUQVBFX1JXX0gKLSNkZWZpbmUgX1pGVEFQRV9SV19ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lLgotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS96ZnRhcGUvemZ0YXBlLXJ3LmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMiAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOTowOSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlZmluaXRpb25zIGZvciB0aGUgcmVhZCBhbmQgd3JpdGUKLSAqICAgICAgZnVuY3Rpb25zIGZvciB0aGUgUUlDLTExNyBmbG9wcHktdGFwZSBkcml2ZXIgZm9yIExpbnV4LgotICoKLSAqLwotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1idWZmZXJzLmgiCi0KLSNkZWZpbmUgU0VHTUVOVFNfUEVSX1RBUEUgIChmdF9zZWdtZW50c19wZXJfdHJhY2sgKiBmdF90cmFja3NfcGVyX3RhcGUpCi0KLS8qICBRSUMtMTEzIFJldi4gRyBzYXlzIHRoYXQgYGEgbWF4aW11bSBvZiA2MzQ4OCByYXcgYnl0ZXMgbWF5IGJlCi0gKiAgY29tcHJlc3NlZCBpbnRvIGEgc2luZ2xlIGZyYW1lJy4KLSAqICBNYXliZSB3ZSBzaG91bGQgc3RpY2sgdG8gMzJrYiB0byBtYWtlIGl0IG1vcmUgYGJlYXV0aWZ1bCcKLSAqLwotI2RlZmluZSBaRlRfTUFYX0JMS19TWiAgICAgICAgICAgKDYyKjEwMjQpIC8qIGJ5dGVzICovCi0jaWYgIWRlZmluZWQoQ09ORklHX1pGVF9ERkxUX0JMS19TWikKLSMgZGVmaW5lIENPTkZJR19aRlRfREZMVF9CTEtfU1ogICAoMTAqMTAyNCkgLyogYnl0ZXMsIGRlZmF1bHQgb2YgZ251IHRhciAqLwotI2VsaWYgQ09ORklHX1pGVF9ERkxUX0JMS19TWiA9PSAwCi0jIHVuZGVmICBDT05GSUdfWkZUX0RGTFRfQkxLX1NaCi0jIGRlZmluZSBDT05GSUdfWkZUX0RGTFRfQkxLX1NaIDEKLSNlbGlmIChDT05GSUdfWkZUX0RGTFRfQkxLX1NaICUgMTAyNCkgIT0gMAotIyBlcnJvciBDT05GSUdfWkZUX0RGTFRfQkxLX1NaIG11c3QgYmUgMSBvciBhIG11bHRpcGxlIG9mIDEwMjQKLSNlbmRpZgotLyogVGhlICpvcHRpb25hbCogY29tcHJlc3Npb24gcm91dGluZXMgbmVlZCBzb21lIG92ZXJoZWFkIHBlciB0YXBlCi0gKiAgYmxvY2sgZm9yIHRoZWlyIHB1cnBvc2VzLiBJbnN0ZWFkIG9mIGFza2luZyB0aGUgYWN0dWFsIGNvbXByZXNzaW9uCi0gKiAgaW1wbGVtZW50YXRpb24gaG93IG11Y2ggaXQgbmVlZHMsIHdlIHJlc3RyaWN0IHRoaXMgb3ZlcmhlYWQgdG8gYmUKLSAqICBtYXhpbWFsIG9mIFpGVF9DTVBUX09WRVJIRUFEIHNpemUuIFdlIG5lZWQgdGhpcyBmb3IgRU9UCi0gKiAgY29uZGl0aW9ucy4gVGhlIHRhcGUgaXMgYXNzdW1lZCB0byBiZSBsb2dpY2FsIGF0IEVPVCB3aGVuIHRoZQotICogIGRpc3RhbmNlIGZyb20gdGhlIHBoeXNpY2FsIEVPVCBpcyBsZXNzIHRoYW4gCi0gKiAgb25lIHRhcGUgYmxvY2sgKyBaRlRfQ01QUl9PVkVSSEVBRCAKLSAqLwotI2RlZmluZSBaRlRfQ01QUl9PVkVSSEVBRCAxNiAgICAgICAgLyogYnl0ZXMgKi8KLQotdHlwZWRlZiBlbnVtCi17IAotCXpmdF9pZGxlID0gMCwKLQl6ZnRfcmVhZGluZywKLQl6ZnRfd3JpdGluZywKLX0gemZ0X3N0YXR1c19lbnVtOwotCi10eXBlZGVmIHN0cnVjdCAgICAgICAgICAgICAgIC8qICBhbGwgdmFsdWVzIG1lYXN1cmVkIGluIGJ5dGVzICovCi17Ci0JaW50ICAgc2VnX3BvczsgICAgICAgLyogIHNlZ21lbnQgY3VycmVudGx5IHBvc2l0aW9uZWQgYXQgKi8KLQlpbnQgICBzZWdfYnl0ZV9wb3M7ICAvKiAgb2Zmc2V0IGluIGN1cnJlbnQgc2VnbWVudCAqLyAKLQlfX3M2NCB0YXBlX3BvczsgICAgICAvKiAgcmVhbCBvZmZzZXQgZnJvbSBCT1QgKi8KLQlfX3M2NCB2b2x1bWVfcG9zOyAgICAvKiAgcG9zLiBpbiB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0gaW4KLQkJCSAgICAgICogIGN1cnJlbnQgdm9sdW1lIAotCQkJICAgICAgKi8KLX0gemZ0X3Bvc2l0aW9uOyAKLQotZXh0ZXJuIHpmdF9wb3NpdGlvbiB6ZnRfcG9zOwotZXh0ZXJuIF9fdTggKnpmdF9kZWJsb2NrX2J1ZjsKLWV4dGVybiBfX3U4ICp6ZnRfaHNlZ19idWY7Ci1leHRlcm4gaW50IHpmdF9kZWJsb2NrX3NlZ21lbnQ7Ci1leHRlcm4gemZ0X3N0YXR1c19lbnVtIHpmdF9pb19zdGF0ZTsKLWV4dGVybiBpbnQgemZ0X2hlYWRlcl9jaGFuZ2VkOwotZXh0ZXJuIGludCB6ZnRfcWljMTEzOyAvKiBjb25mb3JtIHRvIG9sZCBzcGVjcy4gYW5kIG9sZCB6ZnRhcGUgKi8KLWV4dGVybiBpbnQgemZ0X3VzZV9jb21wcmVzc2lvbjsKLWV4dGVybiB1bnNpZ25lZCBpbnQgemZ0X2Jsa19zejsKLWV4dGVybiBfX3M2NCB6ZnRfY2FwYWNpdHk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHpmdF93cml0dGVuX3NlZ21lbnRzOwotZXh0ZXJuIGludCB6ZnRfbGFiZWxfY2hhbmdlZDsKLQotLyogIHpmdGFwZS1ydy5jIGV4cG9ydGVkIGZ1bmN0aW9ucwotICovCi1leHRlcm4gdW5zaWduZWQgaW50IHpmdF9nZXRfc2VnX3N6KHVuc2lnbmVkIGludCBzZWdtZW50KTsKLWV4dGVybiB2b2lkICB6ZnRfc2V0X2ZsYWdzKHVuc2lnbmVkIGludCBtaW5vcl91bml0KTsKLWV4dGVybiBpbnQgICB6ZnRfY2FsY19zZWdfYnl0ZV9jb29yZChpbnQgKnNlZ19ieXRlX3BvcywgX19zNjQgdGFwZV9wb3MpOwotZXh0ZXJuIF9fczY0IHpmdF9jYWxjX3RhcGVfcG9zKGludCBzZWdtZW50KTsKLWV4dGVybiBfX3M2NCB6ZnRfZ2V0X2NhcGFjaXR5KHZvaWQpOwotZXh0ZXJuIHZvaWQgIHpmdF91cGRhdGVfbGFiZWwoX191OCAqYnVmZmVyKTsKLWV4dGVybiBpbnQgICB6ZnRfZXJhc2Uodm9pZCk7Ci1leHRlcm4gaW50ICAgemZ0X3ZlcmlmeV93cml0ZV9zZWdtZW50cyh1bnNpZ25lZCBpbnQgc2VnbWVudCwgCi0JCQkJICAgICAgIF9fdTggKmRhdGEsIHNpemVfdCBzaXplLCBfX3U4ICpidWZmZXIpOwotZXh0ZXJuIHVuc2lnbmVkIGludCB6ZnRfZ2V0X3RpbWUodm9pZCk7Ci0jZW5kaWYgLyogX1pGVEFQRV9SV19IICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXZ0YmwuYyBiL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlLXZ0YmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ3ZjhiZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS12dGJsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NTcgKzAsMCBAQAotLyoKLSAqICAgICAgQ29weXJpZ2h0IChjKSAxOTk1LTE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lIAotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAotIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAKLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIAotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwKLSBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvemZ0YXBlL3pmdGFwZS12dGJsLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuNy42LjEgJAotICogJERhdGU6IDE5OTcvMTEvMjQgMTM6NDg6MzEgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGRlZmluZXMgYSB2b2x1bWUgdGFibGUgYXMgZGVmaW5lZCBpbiB2YXJpb3VzIFFJQwotICogICAgICBzdGFuZGFyZHMuCi0gKiAKLSAqICAgICAgVGhpcyBpcyBhIG1pbmltYWwgaW1wbGVtZW50YXRpb24sIGp1c3QgYWxsb3dpbmcgb3JkaW5hcnkgRE9TCi0gKiAgICAgIDooIHByZ3JhbXMgdG8gaWRlbnRpZnkgdGhlIGNhcnRyaWRnZSBhcyB1c2VkLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1lb2YuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtd3JpdGUuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS12dGJsLmgiCi0KLSNkZWZpbmUgWkZUX0NNQVBfSEFDSyAvKiBsZWF2ZSB0aGlzIGRlZmluZWQgdG8gaGlkZSB0aGUgY29tcHJlc3Npb24gbWFwICovCi0KLS8qCi0gKiAgZ2xvYmFsIHZhcmlhYmxlcyAKLSAqLwotaW50IHpmdF9xaWNfbW9kZSAgID0gMTsgLyogdXNlIHRoZSB2dGJsICovCi1pbnQgemZ0X29sZF9mdGFwZTsgLyogcHJldmVudHMgb2xkIGZ0YXBlZCB0YXBlcyB0byBiZSBvdmVyd3JpdHRlbiAqLwotaW50IHpmdF92b2x1bWVfdGFibGVfY2hhbmdlZDsgLyogZm9yIHdyaXRlX2hlYWRlcl9zZWdtZW50cygpICovCi0KLS8qCi0gKiAgcHJpdmF0ZSB2YXJpYWJsZXMgKG9ubHkgZXhwb3J0ZWQgZm9yIGlubGluZSBmdW5jdGlvbnMpCi0gKi8KLUxJU1RfSEVBRCh6ZnRfdnRibCk7Ci0KLS8qICBXZSBjb3VsZCBhbHNvIGFsbG9jYXRlIHRoZXNlIGR5bmFtaWNhbGx5IHdoZW4gZXh0cmFjdGluZyB0aGUgdm9sdW1lIHRhYmxlCi0gKiAgc2l6ZW9mKHpmdF92b2xpbmZvKSBpcyBhYm91dCAzMiBvciBzb21ldGhpbmcgY2xvc2UgdG8gdGhhdAotICovCi1zdGF0aWMgemZ0X3ZvbGluZm8gIHRhcGVfdnRibDsKLXN0YXRpYyB6ZnRfdm9saW5mbyAgZW90X3Z0Ymw7Ci1zdGF0aWMgemZ0X3ZvbGluZm8gKmN1cl92dGJsOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgemZ0X25ld192dGJsX2VudHJ5KHZvaWQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wID0gJnpmdF9sYXN0X3Z0YmwtPm5vZGU7Ci0JemZ0X3ZvbGluZm8gKm5ldyA9IHpmdF9rbWFsbG9jKHNpemVvZih6ZnRfdm9saW5mbykpOwotCi0JbGlzdF9hZGQoJm5ldy0+bm9kZSwgdG1wKTsKLQluZXctPmNvdW50ID0gemZ0X2VvbV92dGJsLT5jb3VudCArKzsKLX0KLQotdm9pZCB6ZnRfZnJlZV92dGJsKHZvaWQpCi17Ci0JZm9yICg7OykgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXAgPSB6ZnRfdnRibC5wcmV2OwotCQl6ZnRfdm9saW5mbyAqdnRibDsKLQotCQlpZiAodG1wID09ICZ6ZnRfdnRibCkKLQkJCWJyZWFrOwotCQlsaXN0X2RlbCh0bXApOwotCQl2dGJsID0gbGlzdF9lbnRyeSh0bXAsIHpmdF92b2xpbmZvLCBub2RlKTsKLQkJemZ0X2tmcmVlKHZ0YmwsIHNpemVvZih6ZnRfdm9saW5mbykpOwotCX0KLQlJTklUX0xJU1RfSEVBRCgmemZ0X3Z0YmwpOwotCWN1cl92dGJsID0gTlVMTDsKLX0KLQotLyogIGluaXRpYWxpemUgdnRibCwgY2FsbGVkIGJ5IGZ0YXBlX25ld19jYXJ0cmlkZ2UoKQotICovCi12b2lkIHpmdF9pbml0X3Z0Ymwodm9pZCkKLXsgCi0JemZ0X3ZvbGluZm8gKm5ldzsKLQotCXpmdF9mcmVlX3Z0YmwoKTsKLQkKLQkvKiAgQ3JlYXRlIHRoZSB0d28gZHVtbXkgdnRibCBlbnRyaWVzCi0JICovCi0JbmV3ID0gemZ0X2ttYWxsb2Moc2l6ZW9mKHpmdF92b2xpbmZvKSk7Ci0JbGlzdF9hZGQoJm5ldy0+bm9kZSwgJnpmdF92dGJsKTsKLQluZXcgPSB6ZnRfa21hbGxvYyhzaXplb2YoemZ0X3ZvbGluZm8pKTsKLQlsaXN0X2FkZCgmbmV3LT5ub2RlLCAmemZ0X3Z0YmwpOwotCXpmdF9oZWFkX3Z0YmwtPmVuZF9zZWcgICA9IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudDsKLQl6ZnRfaGVhZF92dGJsLT5ibGtfc3ogICAgPSB6ZnRfYmxrX3N6OwotCXpmdF9oZWFkX3Z0YmwtPmNvdW50ICAgICA9IC0xOwotCXpmdF9lb21fdnRibC0+c3RhcnRfc2VnICA9IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudCArIDE7Ci0JemZ0X2VvbV92dGJsLT5lbmRfc2VnICAgID0gZnRfbGFzdF9kYXRhX3NlZ21lbnQgKyAxOwotCXpmdF9lb21fdnRibC0+YmxrX3N6ICAgICA9IHpmdF9ibGtfc3o7Ci0JemZ0X2VvbV92dGJsLT5jb3VudCAgICAgID0gMDsKLQotCS8qICBSZXNldCB0aGUgcG9pbnRlciBmb3IgemZ0X2ZpbmRfdm9sdW1lKCkKLQkgKi8KLQljdXJfdnRibCA9IHpmdF9lb21fdnRibDsKLQotCS8qIGluaXRpYWxpemUgdGhlIGR1bW15IHZ0YmwgZW50cmllcyBmb3IgemZ0X3FpY19tb2RlID09IDAKLQkgKi8KLQllb3RfdnRibC5zdGFydF9zZWcgICAgICAgPSBmdF9sYXN0X2RhdGFfc2VnbWVudCArIDE7Ci0JZW90X3Z0YmwuZW5kX3NlZyAgICAgICAgID0gZnRfbGFzdF9kYXRhX3NlZ21lbnQgKyAxOwotCWVvdF92dGJsLmJsa19zeiAgICAgICAgICA9IHpmdF9ibGtfc3o7Ci0JZW90X3Z0YmwuY291bnQgICAgICAgICAgID0gLTE7Ci0JdGFwZV92dGJsLnN0YXJ0X3NlZyA9IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudDsKLQl0YXBlX3Z0YmwuZW5kX3NlZyAgID0gZnRfbGFzdF9kYXRhX3NlZ21lbnQ7Ci0JdGFwZV92dGJsLmJsa19zeiAgICA9IHpmdF9ibGtfc3o7Ci0JdGFwZV92dGJsLnNpemUgICAgICA9IHpmdF9jYXBhY2l0eTsKLQl0YXBlX3Z0YmwuY291bnQgICAgID0gMDsKLX0KLQotLyogY2hlY2sgZm9yIGEgdmFsaWQgVlRCTCBzaWduYXR1cmUuIAotICovCi1zdGF0aWMgaW50IHZ0Ymxfc2lnbmF0dXJlX3ZhbGlkKF9fdTggc2lnbmF0dXJlWzRdKQotewotCWNvbnN0IGNoYXIgKnZ0YmxfaWRzW10gPSBWVEJMX0lEUzsgLyogdmFsaWQgc2lnbmF0dXJlcyAqLwotCWludCBqOwotCQotCWZvciAoaiA9IDA7IAotCSAgICAgKGogPCBOUl9JVEVNUyh2dGJsX2lkcykpICYmIChtZW1jbXAoc2lnbmF0dXJlLCB2dGJsX2lkc1tqXSwgNCkgIT0gMCk7Ci0JICAgICBqKyspOwotCXJldHVybiBqIDwgTlJfSVRFTVModnRibF9pZHMpOwotfQotCi0vKiBXZSB1c2VkIHRvIHN0b3JlIHRoZSBibG9jay1zaXplIG9mIHRoZSB2b2x1bWUgaW4gdGhlIHZvbHVtZS1sYWJlbCwKLSAqIHVzaW5nIHRoZSBrZXl3b3JkICJibG9ja3NpemUiLiBUaGUgYmxvY2tzaXplIHdyaXR0ZW4gdG8gdGhlCi0gKiB2b2x1bWUtbGFiZWwgaXMgaW4gYnl0ZXMuCi0gKgotICogV2UgdXNlIHRoaXMgbm93IG9ubHkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgemZ0YXBlIHZlcnNpb24uIFdlCi0gKiBzdG9yZSB0aGUgYmxvY2tzaXplIGRpcmVjdGx5IGFzIGJpbmFyeSBudW1iZXIgaW4gdGhlIHZlbmRvcgotICogZXh0ZW5zaW9uIHBhcnQgb2YgdGhlIHZvbHVtZSBlbnRyeS4KLSAqLwotc3RhdGljIGludCBjaGVja192b2x1bWVfbGFiZWwoY29uc3QgY2hhciAqbGFiZWwsIGludCAqYmxrX3N6KQoteyAKLQlpbnQgdmFsaWRfZm9ybWF0OwotCWNoYXIgKmJsb2Nrc2l6ZTsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlUUkFDRShmdF90X25vaXNlLCAiY2FsbGVkIHdpdGggXCIlc1wiIC8gXCIlc1wiIiwgbGFiZWwsIFpGVF9WT0xfTkFNRSk7Ci0JaWYgKHN0cm5jbXAobGFiZWwsIFpGVF9WT0xfTkFNRSwgc3RybGVuKFpGVF9WT0xfTkFNRSkpICE9IDApIHsKLQkJKmJsa19zeiA9IDE7IC8qIHNtYWxsZXN0IGJsb2NrIHNpemUgdGhhdCB3ZSBhbGxvdyAqLwotCQl2YWxpZF9mb3JtYXQgPSAwOwotCX0gZWxzZSB7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICJnb3Qgb2xkIHN0eWxlIHpmdGFwZSB2dGJsIGVudHJ5Iik7Ci0JCS8qIGdldCB0aGUgZGVmYXVsdCBibG9ja3NpemUgKi8KLQkJLyogdXNlIHRoZSBrZXJuZWwgc3Ryc3RyKCkgICAqLwotCQlibG9ja3NpemU9IHN0cnN0cihsYWJlbCwgIiBibG9ja3NpemUgIik7Ci0JCWlmIChibG9ja3NpemUpIHsKLQkJCWJsb2Nrc2l6ZSArPSBzdHJsZW4oIiBibG9ja3NpemUgIik7Ci0JCQlmb3IoKmJsa19zej0gMDsgCi0JCQkgICAgKmJsb2Nrc2l6ZSA+PSAnMCcgJiYgKmJsb2Nrc2l6ZSA8PSAnOSc7IAotCQkJICAgIGJsb2Nrc2l6ZSsrKSB7Ci0JCQkJKmJsa19zeiAqPSAxMDsKLQkJCQkqYmxrX3N6ICs9ICpibG9ja3NpemUgLSAnMCc7Ci0JCQl9Ci0JCQlpZiAoKmJsa19zeiA+IFpGVF9NQVhfQkxLX1NaKSB7Ci0JCQkJKmJsa19zej0gMTsKLQkJCQl2YWxpZF9mb3JtYXQ9IDA7Ci0JCQl9IGVsc2UgewotCQkJCXZhbGlkX2Zvcm1hdCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkqYmxrX3N6PSAxOwotCQkJdmFsaWRfZm9ybWF0PSAwOwotCQl9Ci0JfQotCVRSQUNFX0VYSVQgdmFsaWRfZm9ybWF0OwotfQotCi0vKiAgIGNoZWNrIGZvciBhIHpmdGFwZSB2b2x1bWUKLSAqLwotc3RhdGljIGludCBjaGVja192b2x1bWUoX191OCAqZW50cnksIHpmdF92b2xpbmZvICp2b2x1bWUpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYoc3RybmNtcCgmZW50cnlbVlRCTF9FWFQrRVhUX1pGVEFQRV9TSUddLCBaRlRBUEVfU0lHLAotCQkgICBzdHJsZW4oWkZUQVBFX1NJRykpID09IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImdvdCBuZXcgc3R5bGUgemZ0YXBlIHZ0YmwgZW50cnkiKTsKLQkJdm9sdW1lLT5ibGtfc3ogPSBHRVQyKGVudHJ5LCBWVEJMX0VYVCtFWFRfWkZUQVBFX0JMS1NaKTsKLQkJdm9sdW1lLT5xaWMxMTMgPSBlbnRyeVtWVEJMX0VYVCtFWFRfWkZUQVBFX1FJQzExM107Ci0JCVRSQUNFX0VYSVQgMTsKLQl9IGVsc2UgewotCQlUUkFDRV9FWElUIGNoZWNrX3ZvbHVtZV9sYWJlbCgmZW50cnlbVlRCTF9ERVNDXSwgJnZvbHVtZS0+YmxrX3N6KTsKLQl9Ci19Ci0KLQotLyogY3JlYXRlIHpmdGFwZSBzcGVjaWZpYyB2dGJsIGVudHJ5LCB0aGUgdm9sdW1lIGJvdW5kcyBhcmUgaW5zZXJ0ZWQKLSAqIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCB6ZnRfY3JlYXRlX3ZvbHVtZV9oZWFkZXJzKCkKLSAqLwotc3RhdGljIHZvaWQgY3JlYXRlX3pmdF92b2x1bWUoX191OCAqZW50cnksIHpmdF92b2xpbmZvICp2dGJsKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JbWVtc2V0KGVudHJ5LCAwLCBWVEJMX1NJWkUpOwotCW1lbWNweSgmZW50cnlbVlRCTF9TSUddLCBWVEJMX0lELCA0KTsKLQlzcHJpbnRmKCZlbnRyeVtWVEJMX0RFU0NdLCBaRlRfVk9MX05BTUUiICUwM2QiLCB2dGJsLT5jb3VudCk7Ci0JZW50cnlbVlRCTF9GTEFHU10gPSAoVlRCTF9GTF9OT1RfVkVSSUZJRUQgfCBWVEJMX0ZMX1NFR19TUEFOTklORyk7Ci0JZW50cnlbVlRCTF9NX05PXSA9IDE7IC8qIG11bHRpX2NhcnRyaWRnZV9jb3VudCAqLwotCXN0cmNweSgmZW50cnlbVlRCTF9FWFQrRVhUX1pGVEFQRV9TSUddLCBaRlRBUEVfU0lHKTsKLQlQVVQyKGVudHJ5LCBWVEJMX0VYVCtFWFRfWkZUQVBFX0JMS1NaLCB2dGJsLT5ibGtfc3opOwotCWlmICh6ZnRfcWljMTEzKSB7Ci0JCVBVVDgoZW50cnksIFZUQkxfREFUQV9TSVpFLCB2dGJsLT5zaXplKTsKLQkJZW50cnlbVlRCTF9DTVBSXSA9IFZUQkxfQ01QUl9VTlJFRzsgCi0JCWlmICh2dGJsLT51c2VfY29tcHJlc3Npb24pIHsgLyogdXNlIGNvbXByZXNzaW9uOiAqLwotCQkJZW50cnlbVlRCTF9DTVBSXSB8PSBWVEJMX0NNUFJfVVNFRDsKLQkJfQotCQllbnRyeVtWVEJMX0VYVCtFWFRfWkZUQVBFX1FJQzExM10gPSAxOwotCX0gZWxzZSB7Ci0JCVBVVDQoZW50cnksIFZUQkxfREFUQV9TSVpFLCB2dGJsLT5zaXplKTsKLQkJZW50cnlbVlRCTF9LX0NNUFJdID0gVlRCTF9DTVBSX1VOUkVHOyAKLQkJaWYgKHZ0YmwtPnVzZV9jb21wcmVzc2lvbikgeyAvKiB1c2UgY29tcHJlc3Npb246ICovCi0JCQllbnRyeVtWVEJMX0tfQ01QUl0gfD0gVlRCTF9DTVBSX1VTRUQ7Ci0JCX0KLQl9Ci0JaWYgKGZ0X2Zvcm1hdF9jb2RlID09IGZtdF9iaWcpIHsKLQkJLyogU0NTSSBsaWtlIHZ0YmwsIHN0b3JlIHRoZSBudW1iZXIgb2YgdXNlZAotCQkgKiBzZWdtZW50cyBhcyA0IGJ5dGUgdmFsdWUgCi0JCSAqLwotCQlQVVQ0KGVudHJ5LCBWVEJMX1NDU0lfU0VHUywgdnRibC0+ZW5kX3NlZy12dGJsLT5zdGFydF9zZWcgKyAxKTsKLQl9IGVsc2UgewotCQkvKiBub3JtYWwsIFFJQy04ME1DIGxpa2UgdnRibCAKLQkJICovCi0JCVBVVDIoZW50cnksIFZUQkxfU1RBUlQsIHZ0YmwtPnN0YXJ0X3NlZyk7Ci0JCVBVVDIoZW50cnksIFZUQkxfRU5ELCB2dGJsLT5lbmRfc2VnKTsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogdGhpcyBvbmUgY3JlYXRlcyB0aGUgdm9sdW1lIGhlYWRlcnMgZm9yIGVhY2ggdm9sdW1lLiBJdCBpcyBhc3N1bWVkCi0gKiB0aGF0IGJ1ZmZlciBhbHJlYWR5IGNvbnRhaW5zIHRoZSBvbGQgdm9sdW1lLXRhYmxlLCBzbyB0aGF0IHZ0YmwKLSAqIGVudHJpZXMgd2l0aG91dCB0aGUgemZ0X3ZvbHVtZSBmbGFnIHNldCBjYW4gc2F2ZWx5IGJlIGlnbm9yZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHpmdF9jcmVhdGVfdm9sdW1lX2hlYWRlcnMoX191OCAqYnVmZmVyKQoteyAgIAotCV9fdTggKmVudHJ5OwotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQl6ZnRfdm9saW5mbyAqdnRibDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLSNpZmRlZiBaRlRfQ01BUF9IQUNLCi0JaWYoKHN0cm5jbXAoJmJ1ZmZlcltWVEJMX0VYVCtFWFRfWkZUQVBFX1NJR10sIFpGVEFQRV9TSUcsCi0JCSAgICBzdHJsZW4oWkZUQVBFX1NJRykpID09IDApICYmIAotCSAgIGJ1ZmZlcltWVEJMX0VYVCtFWFRfWkZUQVBFX0NNQVBdICE9IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImRlbGV0aW5nIGNtYXAgdm9sdW1lIik7Ci0JCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBWVEJMX1NJWkUsCi0JCQlGVF9TRUdNRU5UX1NJWkUgLSBWVEJMX1NJWkUpOwotCX0KLSNlbmRpZgotCWVudHJ5ID0gYnVmZmVyOwotCWZvciAodG1wID0gemZ0X2hlYWRfdnRibC0+bm9kZS5uZXh0OwotCSAgICAgdG1wICE9ICZ6ZnRfZW9tX3Z0YmwtPm5vZGU7Ci0JICAgICB0bXAgPSB0bXAtPm5leHQpIHsKLQkJdnRibCA9IGxpc3RfZW50cnkodG1wLCB6ZnRfdm9saW5mbywgbm9kZSk7Ci0JCS8qIHdlIG5vdyBmaWxsIGluIHRoZSB2YWx1ZXMgb25seSBmb3IgbmV3bHkgY3JlYXRlZCB2b2x1bWVzLgotCQkgKi8KLQkJaWYgKHZ0YmwtPm5ld192b2x1bWUpIHsKLQkJCWNyZWF0ZV96ZnRfdm9sdW1lKGVudHJ5LCB2dGJsKTsKLQkJCXZ0YmwtPm5ld192b2x1bWUgPSAwOyAvKiBjbGVhciB0aGUgZmxhZyAqLwotCQl9Ci0JCQotCQlEVU1QX1ZPTElORk8oZnRfdF9ub2lzZSwgJmVudHJ5W1ZUQkxfREVTQ10sIHZ0YmwpOwotCQllbnRyeSArPSBWVEJMX1NJWkU7Ci0JfQotCW1lbXNldChlbnRyeSwgMCwgRlRfU0VHTUVOVF9TSVpFIC0gemZ0X2VvbV92dGJsLT5jb3VudCAqIFZUQkxfU0laRSk7Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogIHdyaXRlIHZvbHVtZSB0YWJsZSB0byB0YXBlLiBDYWxscyB6ZnRfY3JlYXRlX3ZvbHVtZV9oZWFkZXJzKCkKLSAqLwotaW50IHpmdF91cGRhdGVfdm9sdW1lX3RhYmxlKHVuc2lnbmVkIGludCBzZWdtZW50KQotewotCWludCByZXN1bHQgPSAwOwotCV9fdTggKnZlcmlmeV9idWYgPSBOVUxMOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0VfQ0FUQ0gocmVzdWx0ID0gZnRhcGVfcmVhZF9zZWdtZW50KGZ0X2ZpcnN0X2RhdGFfc2VnbWVudCwgCi0JCQkJCQl6ZnRfZGVibG9ja19idWYsCi0JCQkJCQlGVF9SRF9TSU5HTEUpLCk7Ci0JemZ0X2NyZWF0ZV92b2x1bWVfaGVhZGVycyh6ZnRfZGVibG9ja19idWYpOwotCVRSQUNFKGZ0X3Rfbm9pc2UsICJ3cml0aW5nIHZvbHVtZSB0YWJsZSBzZWdtZW50ICVkIiwgc2VnbWVudCk7Ci0JaWYgKHpmdF92bWFsbG9jX29uY2UoJnZlcmlmeV9idWYsIEZUX1NFR01FTlRfU0laRSkgPT0gMCkgewotCQlUUkFDRV9DQVRDSCh6ZnRfdmVyaWZ5X3dyaXRlX3NlZ21lbnRzKHNlZ21lbnQsIAotCQkJCQkJICAgICAgemZ0X2RlYmxvY2tfYnVmLCByZXN1bHQsCi0JCQkJCQkgICAgICB2ZXJpZnlfYnVmKSwKLQkJCSAgICB6ZnRfdmZyZWUoJnZlcmlmeV9idWYsIEZUX1NFR01FTlRfU0laRSkpOwotCQl6ZnRfdmZyZWUoJnZlcmlmeV9idWYsIEZUX1NFR01FTlRfU0laRSk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0VfQ0FUQ0goZnRhcGVfd3JpdGVfc2VnbWVudChzZWdtZW50LCB6ZnRfZGVibG9ja19idWYsIAotCQkJCQkJRlRfV1JfU0lOR0xFKSwpOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qIG5vbiB6ZnRhcGUgdm9sdW1lcyBhcmUgaGFuZGxlZCBpbiByYXcgbW9kZS4gVGh1cyB3ZSBuZWVkIHRvCi0gKiBjYWxjdWxhdGUgdGhlIHJhdyBhbW91bnQgb2YgZGF0YSBjb250YWluZWQgaW4gdGhvc2Ugc2VnbWVudHMuICAKLSAqLwotc3RhdGljIHZvaWQgZXh0cmFjdF9hbGllbl92b2x1bWUoX191OCAqZW50cnksIHpmdF92b2xpbmZvICp2dGJsKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JdnRibC0+c2l6ZSAgPSAoemZ0X2NhbGNfdGFwZV9wb3MoemZ0X2xhc3RfdnRibC0+ZW5kX3NlZysxKSAtCi0JCSAgICAgICB6ZnRfY2FsY190YXBlX3Bvcyh6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcpKTsKLQl2dGJsLT51c2VfY29tcHJlc3Npb24gPSAwOwotCXZ0YmwtPnFpYzExMyA9IHpmdF9xaWMxMTM7Ci0JaWYgKHZ0YmwtPnFpYzExMykgewotCQlUUkFDRShmdF90X25vaXNlLCAKLQkJICAgICAgIkZha2UgYWxpZW4gdm9sdW1lJ3Mgc2l6ZSBmcm9tICIgTExfWCAiIHRvICIgTExfWCwgCi0JCSAgICAgIExMKEdFVDgoZW50cnksIFZUQkxfREFUQV9TSVpFKSksIExMKHZ0YmwtPnNpemUpKTsKLQl9IGVsc2UgewotCQlUUkFDRShmdF90X25vaXNlLAotCQkgICAgICAiRmFrZSBhbGllbiB2b2x1bWUncyBzaXplIGZyb20gJWQgdG8gIiBMTF9YLCAKLQkJICAgICAgKGludClHRVQ0KGVudHJ5LCBWVEJMX0RBVEFfU0laRSksIExMKHZ0YmwtPnNpemUpKTsKLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotCi0vKiBleHRyYWN0IGFuIHpmdGFwZSBzcGVjaWZpYyB2b2x1bWUKLSAqLwotc3RhdGljIHZvaWQgZXh0cmFjdF96ZnRfdm9sdW1lKF9fdTggKmVudHJ5LCB6ZnRfdm9saW5mbyAqdnRibCkKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICh2dGJsLT5xaWMxMTMpIHsKLQkJdnRibC0+c2l6ZSA9IEdFVDgoZW50cnksIFZUQkxfREFUQV9TSVpFKTsKLQkJdnRibC0+dXNlX2NvbXByZXNzaW9uID0gCi0JCQkoZW50cnlbVlRCTF9DTVBSXSAmIFZUQkxfQ01QUl9VU0VEKSAhPSAwOyAKLQl9IGVsc2UgewotCQl2dGJsLT5zaXplID0gR0VUNChlbnRyeSwgVlRCTF9EQVRBX1NJWkUpOwotCQlpZiAoZW50cnlbVlRCTF9LX0NNUFJdICYgVlRCTF9DTVBSX1VOUkVHKSB7Ci0JCQl2dGJsLT51c2VfY29tcHJlc3Npb24gPSAKLQkJCQkoZW50cnlbVlRCTF9LX0NNUFJdICYgVlRCTF9DTVBSX1VTRUQpICE9IDA7Ci0JCX0gZWxzZSBpZiAoZW50cnlbVlRCTF9DTVBSXSAmIFZUQkxfQ01QUl9VTlJFRykgewotCQkJdnRibC0+dXNlX2NvbXByZXNzaW9uID0gCi0JCQkJKGVudHJ5W1ZUQkxfQ01QUl0gJiBWVEJMX0NNUFJfVVNFRCkgIT0gMDsgCi0JCX0gZWxzZSB7Ci0JCQlUUkFDRShmdF90X3dhcm4sICJHZWVoISBUaGVyZSBpcyBzb21ldGhpbmcgd3Jvbmc6XG4iCi0JCQkgICAgICBLRVJOX0lORk8gIlFJQyBjb21wcmVzc2lvbiAoUmV2ID0gSyk6ICV4XG4iCi0JCQkgICAgICBLRVJOX0lORk8gIlFJQyBjb21wcmVzc2lvbiAoUmV2ID4gSyk6ICV4IiwKLQkJCSAgICAgIGVudHJ5W1ZUQkxfS19DTVBSXSwgZW50cnlbVlRCTF9DTVBSXSk7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVDsKLX0KLQotLyogZXh0cmFjdCB0aGUgdm9sdW1lIHRhYmxlIGZyb20gYnVmZmVyLiAiYnVmZmVyIiBtdXN0IGFscmVhZHkgY29udGFpbgotICogdGhlIHZ0Ymwtc2VnbWVudCAKLSAqLwotaW50IHpmdF9leHRyYWN0X3ZvbHVtZV9oZWFkZXJzKF9fdTggKmJ1ZmZlcikKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIF9fdTggKmVudHJ5OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCXpmdF9pbml0X3Z0YmwoKTsKLQllbnRyeSA9IGJ1ZmZlcjsKLSNpZmRlZiBaRlRfQ01BUF9IQUNLCi0JaWYgKChzdHJuY21wKCZlbnRyeVtWVEJMX0VYVCtFWFRfWkZUQVBFX1NJR10sIFpGVEFQRV9TSUcsCi0JCSAgICAgc3RybGVuKFpGVEFQRV9TSUcpKSA9PSAwKSAmJgotCSAgICBlbnRyeVtWVEJMX0VYVCtFWFRfWkZUQVBFX0NNQVBdICE9IDApIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgImlnbm9yaW5nIGNtYXAgdm9sdW1lIik7Ci0JCWVudHJ5ICs9IFZUQkxfU0laRTsKLQl9IAotI2VuZGlmCi0JLyogdGhlIGVuZCBvZiB0aGUgdnRibCBpcyBpbmRpY2F0ZWQgYnkgYW4gaW52YWxpZCBzaWduYXR1cmUgCi0JICovCi0Jd2hpbGUgKHZ0Ymxfc2lnbmF0dXJlX3ZhbGlkKCZlbnRyeVtWVEJMX1NJR10pICYmCi0JICAgICAgIChlbnRyeSAtIGJ1ZmZlcikgPCBGVF9TRUdNRU5UX1NJWkUpIHsKLQkJemZ0X25ld192dGJsX2VudHJ5KCk7Ci0JCWlmIChmdF9mb3JtYXRfY29kZSA9PSBmbXRfYmlnKSB7Ci0JCQkvKiBTQ1NJIGxpa2UgdnRibCwgc3RvcmVzIG9ubHkgdGhlIG51bWJlciBvZgotCQkJICogc2VnbWVudHMgdXNlZCAKLQkJCSAqLwotCQkJdW5zaWduZWQgaW50IG51bV9zZWdtZW50cz0gR0VUNChlbnRyeSwgVlRCTF9TQ1NJX1NFR1MpOwotCQkJemZ0X2xhc3RfdnRibC0+c3RhcnRfc2VnID0gemZ0X2VvbV92dGJsLT5zdGFydF9zZWc7Ci0JCQl6ZnRfbGFzdF92dGJsLT5lbmRfc2VnID0gCi0JCQkJemZ0X2xhc3RfdnRibC0+c3RhcnRfc2VnICsgbnVtX3NlZ21lbnRzIC0gMTsKLQkJfSBlbHNlIHsKLQkJCS8qIGBub3JtYWwnLCBRSUMtODAgbGlrZSB2dGJsIAotCQkJICovCi0JCQl6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcgPSBHRVQyKGVudHJ5LCBWVEJMX1NUQVJUKTsKLQkJCXpmdF9sYXN0X3Z0YmwtPmVuZF9zZWcgICA9IEdFVDIoZW50cnksIFZUQkxfRU5EKTsKLQkJfQotCQl6ZnRfZW9tX3Z0YmwtPnN0YXJ0X3NlZyAgPSB6ZnRfbGFzdF92dGJsLT5lbmRfc2VnICsgMTsKLQkJLyogY2hlY2sgaWYgd2UgY3JlYXRlZCB0aGlzIHZvbHVtZSBhbmQgZ2V0IHRoZQotCQkgKiBibGtfc3ogCi0JCSAqLwotCQl6ZnRfbGFzdF92dGJsLT56ZnRfdm9sdW1lID0gY2hlY2tfdm9sdW1lKGVudHJ5LCB6ZnRfbGFzdF92dGJsKTsKLQkJaWYgKHpmdF9sYXN0X3Z0YmwtPnpmdF92b2x1bWUgPT0gMCkgewotCQkJZXh0cmFjdF9hbGllbl92b2x1bWUoZW50cnksIHpmdF9sYXN0X3Z0YmwpOwotCQl9IGVsc2UgewotCQkJZXh0cmFjdF96ZnRfdm9sdW1lKGVudHJ5LCB6ZnRfbGFzdF92dGJsKTsKLQkJfQotCQlEVU1QX1ZPTElORk8oZnRfdF9ub2lzZSwgJmVudHJ5W1ZUQkxfREVTQ10sIHpmdF9sYXN0X3Z0YmwpOwotCQllbnRyeSArPVZUQkxfU0laRTsKLQl9Ci0jaWYgMAotLyoKLSAqICB1bmRlZmluZSB0byB0ZXN0IGVuZCBvZiB0YXBlIGhhbmRsaW5nCi0gKi8KLQl6ZnRfbmV3X3Z0YmxfZW50cnkoKTsKLQl6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcgPSB6ZnRfZW9tX3Z0YmwtPnN0YXJ0X3NlZzsKLQl6ZnRfbGFzdF92dGJsLT5lbmRfc2VnICAgPSBmdF9sYXN0X2RhdGFfc2VnbWVudCAtIDEwOwotCXpmdF9sYXN0X3Z0YmwtPmJsa19zeiAgICAgICAgICA9IHpmdF9ibGtfc3o7Ci0JemZ0X2xhc3RfdnRibC0+emZ0X3ZvbHVtZSAgICAgID0gMTsKLQl6ZnRfbGFzdF92dGJsLT5xaWMxMTMgICAgICAgICAgPSB6ZnRfcWljMTEzOwotCXpmdF9sYXN0X3Z0YmwtPnNpemUgPSAoemZ0X2NhbGNfdGFwZV9wb3MoemZ0X2xhc3RfdnRibC0+ZW5kX3NlZysxKQotCQkJICAgICAgIC0gemZ0X2NhbGNfdGFwZV9wb3MoemZ0X2xhc3RfdnRibC0+c3RhcnRfc2VnKSk7Ci0jZW5kaWYKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb25zIHRyYW5zbGF0ZXMgdGhlIGZhaWxlZF9zZWN0b3JfbG9nLCBtaXN1c2VkIGFzCi0gKiBFT0YtbWFya2VyIGxpc3QsIGludG8gYSB2aXJ0dWFsIHZvbHVtZSB0YWJsZS4gVGhlIHRhYmxlIG11c3RuJ3QgYmUKLSAqIHdyaXR0ZW4gdG8gdGFwZSwgYmVjYXVzZSB0aGlzIHdvdWxkIG9jY3VweSB0aGUgZmlyc3QgZGF0YSBzZWdtZW50LAotICogd2hpY2ggc2hvdWxkIGJlIHRoZSB2b2x1bWUgdGFibGUsIGJ1dCBpcyBhY3R1YWxseSB0aGUgZmlyc3Qgc2VnbWVudAotICogdGhhdCBpcyBmaWxsZWQgd2l0aCBkYXRhICh3aGVuIHVzaW5nIHN0YW5kYXJkIGZ0YXBlKS4gIFdlIGFzc3VtZSwKLSAqIHRoYXQgd2UgZ2V0IGEgbm9uLWVtcHR5IGZhaWxlZF9zZWN0b3JfbG9nLgotICovCi1pbnQgemZ0X2Zha2Vfdm9sdW1lX2hlYWRlcnMgKGVvZl9tYXJrX3VuaW9uICplb2ZfbWFwLCBpbnQgbnVtX2ZhaWxlZF9zZWN0b3JzKQotewotCXVuc2lnbmVkIGludCBzZWdtZW50LCBzZWN0b3I7Ci0JaW50IGhhdmVfZW9tID0gMDsKLQlpbnQgdm9sX25vOwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKChudW1fZmFpbGVkX3NlY3RvcnMgPj0gMikgJiYKLQkgICAgKEdFVDIoJmVvZl9tYXBbbnVtX2ZhaWxlZF9zZWN0b3JzIC0gMV0ubWFyay5zZWdtZW50LCAwKSAKLQkgICAgID09IAotCSAgICAgR0VUMigmZW9mX21hcFtudW1fZmFpbGVkX3NlY3RvcnMgLSAyXS5tYXJrLnNlZ21lbnQsIDApICsgMSkgJiYKLQkgICAgKEdFVDIoJmVvZl9tYXBbbnVtX2ZhaWxlZF9zZWN0b3JzIC0gMV0ubWFyay5kYXRlLCAwKSA9PSAxKSkgewotCQkvKiB0aGlzIHNob3VsZCBiZSBlb20uIFdlIGtlZXAgdGhlIHJlbWFpbmRlciBvZiB0aGUKLQkJICogdGFwZSBhcyBhbm90aGVyIHZvbHVtZS4KLQkJICovCi0JCWhhdmVfZW9tID0gMTsKLQl9Ci0JemZ0X2luaXRfdnRibCgpOwotCXpmdF9lb21fdnRibC0+c3RhcnRfc2VnID0gZnRfZmlyc3RfZGF0YV9zZWdtZW50OwotCWZvcih2b2xfbm8gPSAwOyB2b2xfbm8gPCBudW1fZmFpbGVkX3NlY3RvcnMgLSBoYXZlX2VvbTsgdm9sX25vICsrKSB7Ci0JCXpmdF9uZXdfdnRibF9lbnRyeSgpOwotCi0JCXNlZ21lbnQgPSBHRVQyKCZlb2ZfbWFwW3ZvbF9ub10ubWFyay5zZWdtZW50LCAwKTsKLQkJc2VjdG9yICA9IEdFVDIoJmVvZl9tYXBbdm9sX25vXS5tYXJrLmRhdGUsIDApOwotCi0JCXpmdF9sYXN0X3Z0YmwtPnN0YXJ0X3NlZyAgPSB6ZnRfZW9tX3Z0YmwtPnN0YXJ0X3NlZzsKLQkJemZ0X2xhc3RfdnRibC0+ZW5kX3NlZyAgICA9IHNlZ21lbnQ7Ci0JCXpmdF9lb21fdnRibC0+c3RhcnRfc2VnICA9IHNlZ21lbnQgKyAxOwotCQl6ZnRfbGFzdF92dGJsLT5ibGtfc3ogICAgID0gMTsKLQkJemZ0X2xhc3RfdnRibC0+c2l6ZSAgICAgICA9IAotCQkJKHpmdF9jYWxjX3RhcGVfcG9zKHpmdF9sYXN0X3Z0YmwtPmVuZF9zZWcpCi0JCQkgLSB6ZnRfY2FsY190YXBlX3Bvcyh6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcpCi0JCQkgKyAoc2VjdG9yLTEpICogRlRfU0VDVE9SX1NJWkUpOwotCQlUUkFDRShmdF90X25vaXNlLCAKLQkJICAgICAgImZhaWxlZCBzZWN0b3IgbG9nOiBzZWdtZW50OiAlZCwgc2VjdG9yOiAlZCIsIAotCQkgICAgICBzZWdtZW50LCBzZWN0b3IpOwotCQlEVU1QX1ZPTElORk8oZnRfdF9ub2lzZSwgIkZha2VkIHZvbHVtZSIsIHpmdF9sYXN0X3Z0YmwpOwotCX0KLQlpZiAoIWhhdmVfZW9tKSB7Ci0JCXpmdF9uZXdfdnRibF9lbnRyeSgpOwotCQl6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcgPSB6ZnRfZW9tX3Z0YmwtPnN0YXJ0X3NlZzsKLQkJemZ0X2xhc3RfdnRibC0+ZW5kX3NlZyAgID0gZnRfbGFzdF9kYXRhX3NlZ21lbnQ7Ci0JCXpmdF9lb21fdnRibC0+c3RhcnRfc2VnICA9IGZ0X2xhc3RfZGF0YV9zZWdtZW50ICsgMTsKLQkJemZ0X2xhc3RfdnRibC0+c2l6ZSAgICAgID0gemZ0X2NhcGFjaXR5OwotCQl6ZnRfbGFzdF92dGJsLT5zaXplICAgICAtPSB6ZnRfY2FsY190YXBlX3Bvcyh6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcpOwotCQl6ZnRfbGFzdF92dGJsLT5ibGtfc3ogICAgPSAxOwotCQlEVU1QX1ZPTElORk8oZnRfdF9ub2lzZSwgIkZha2VkIHZvbHVtZSIsemZ0X2xhc3RfdnRibCk7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogdXBkYXRlIHRoZSBpbnRlcm5hbCB2b2x1bWUgdGFibGUKLSAqCi0gKiBpZiBiZWZvcmUgc3RhcnQgb2YgbGFzdCB2b2x1bWU6IGVyYXNlIGFsbCBmb2xsb3dpbmcgdm9sdW1lcyBpZgotICogaW5zaWRlIGEgdm9sdW1lOiBzZXQgZW5kIG9mIHZvbHVtZSB0byBpbmZpbml0eQotICoKLSAqIHRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgX2Z0YXBlX3dyaXRlKCkgaXMKLSAqIGNhbGxlZAotICoKLSAqIHJldHVybjogMCBpZiBubyBuZXcgdm9sdW1lIHdhcyBjcmVhdGVkLCAxIGlmIGEgbmV3IHZvbHVtZSB3YXMKLSAqIGNyZWF0ZWQKLSAqCi0gKiBOT1RFOiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB6ZnRfbW9kZSBhcyBmdGFwZV93cml0ZSgpIGRvZXMKLSAqIHRoYXQgYWxyZWFkeS4gVGhpcyBmdW5jdGlvbiBnZXRzIG5ldmVyIGNhbGxlZCB3aXRob3V0IGFjY2Vzc2luZwotICogemZ0YXBlIHZpYSB0aGUgKnFmdCogZGV2aWNlcyAKLSAqLwotCi1pbnQgemZ0X29wZW5fdm9sdW1lKHpmdF9wb3NpdGlvbiAqcG9zLCBpbnQgYmxrX3N6LCBpbnQgdXNlX2NvbXByZXNzaW9uKQoteyAKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlpZiAoIXpmdF9xaWNfbW9kZSkgewotCQlUUkFDRV9FWElUIDA7Ci0JfQotCWlmICh6ZnRfdGFwZV9hdF9sYm90KHBvcykpIHsKLQkJemZ0X2luaXRfdnRibCgpOwotCQlpZih6ZnRfb2xkX2Z0YXBlKSB7Ci0JCQkvKiBjbGVhciBvbGQgZnRhcGUncyBlb2YgbWFya3MgKi8KLQkJCXpmdF9jbGVhcl9mdGFwZV9maWxlX21hcmtzKCk7Ci0JCQl6ZnRfb2xkX2Z0YXBlID0gMDsgLyogbm8gbG9uZ2VyIG9sZCBmdGFwZSAqLwotCQl9Ci0JCXpmdF9yZXNldF9wb3NpdGlvbihwb3MpOwotCX0KLQlpZiAocG9zLT5zZWdfcG9zICE9IHpmdF9sYXN0X3Z0YmwtPmVuZF9zZWcgKyAxKSB7Ci0JCVRSQUNFX0FCT1JUKC1FSU8sIGZ0X3RfYnVnLCAKLQkJICAgICAgIkJVRzogc2VnX3BvczogJWQsIHpmdF9sYXN0X3Z0YmwtPmVuZF9zZWc6ICVkIiwgCi0JCSAgICAgIHBvcy0+c2VnX3BvcywgemZ0X2xhc3RfdnRibC0+ZW5kX3NlZyk7Ci0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQlUUkFDRShmdF90X25vaXNlLCAiY3JlYXRlIG5ldyB2b2x1bWUiKTsKLQlpZiAoemZ0X2VvbV92dGJsLT5jb3VudCA+PSBaRlRfTUFYX1ZPTFVNRVMpIHsKLQkJVFJBQ0VfQUJPUlQoLUVOT1NQQywgZnRfdF9lcnIsCi0JCQkgICAgIkVycm9yOiBtYXhtaW1hbCBudW1iZXIgb2Ygdm9sdW1lcyBleGhhdXN0ZWQgIgotCQkJICAgICIobWF4bWltdW0gaXMgJWQpIiwgWkZUX01BWF9WT0xVTUVTKTsKLQl9Ci0JemZ0X25ld192dGJsX2VudHJ5KCk7Ci0JcG9zLT52b2x1bWVfcG9zID0gcG9zLT5zZWdfYnl0ZV9wb3MgPSAwOwotCXpmdF9sYXN0X3Z0YmwtPnN0YXJ0X3NlZyAgICAgICA9IHBvcy0+c2VnX3BvczsKLQl6ZnRfbGFzdF92dGJsLT5lbmRfc2VnICAgICAgICAgPSBmdF9sYXN0X2RhdGFfc2VnbWVudDsgLyogaW5maW5pdHkgKi8KLQl6ZnRfbGFzdF92dGJsLT5ibGtfc3ogICAgICAgICAgPSBibGtfc3o7Ci0JemZ0X2xhc3RfdnRibC0+c2l6ZSAgICAgICAgICAgID0gemZ0X2NhcGFjaXR5OwotCXpmdF9sYXN0X3Z0YmwtPnpmdF92b2x1bWUgICAgICA9IDE7Ci0JemZ0X2xhc3RfdnRibC0+dXNlX2NvbXByZXNzaW9uID0gdXNlX2NvbXByZXNzaW9uOwotCXpmdF9sYXN0X3Z0YmwtPnFpYzExMyAgICAgICAgICA9IHpmdF9xaWMxMTM7Ci0JemZ0X2xhc3RfdnRibC0+bmV3X3ZvbHVtZSAgICAgID0gMTsKLQl6ZnRfbGFzdF92dGJsLT5vcGVuICAgICAgICAgICAgPSAxOwotCXpmdF92b2x1bWVfdGFibGVfY2hhbmdlZCA9IDE7Ci0JemZ0X2VvbV92dGJsLT5zdGFydF9zZWcgID0gZnRfbGFzdF9kYXRhX3NlZ21lbnQgKyAxOwotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogIHBlcmZvcm0gbXRmc2YsIG10YnNmLCBub3QgYWxsb3dlZCB3aXRob3V0IHpmdF9xaWNfbW9kZQotICovCi1pbnQgemZ0X3NraXBfdm9sdW1lcyhpbnQgY291bnQsIHpmdF9wb3NpdGlvbiAqcG9zKQoteyAKLQljb25zdCB6ZnRfdm9saW5mbyAqdnRibDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQlUUkFDRShmdF90X25vaXNlLCAiY291bnQ6ICVkIiwgY291bnQpOwotCQotCXZ0Ymw9IHpmdF9maW5kX3ZvbHVtZShwb3MtPnNlZ19wb3MpOwotCXdoaWxlIChjb3VudCA+IDAgJiYgdnRibCAhPSB6ZnRfZW9tX3Z0YmwpIHsKLQkJdnRibCA9IGxpc3RfZW50cnkodnRibC0+bm9kZS5uZXh0LCB6ZnRfdm9saW5mbywgbm9kZSk7Ci0JCWNvdW50IC0tOwotCX0KLQl3aGlsZSAoY291bnQgPCAwICYmIHZ0YmwgIT0gemZ0X2ZpcnN0X3Z0YmwpIHsKLQkJdnRibCA9IGxpc3RfZW50cnkodnRibC0+bm9kZS5wcmV2LCB6ZnRfdm9saW5mbywgbm9kZSk7Ci0JCWNvdW50ICsrOwotCX0KLQlwb3MtPnNlZ19wb3MgICAgICAgID0gdnRibC0+c3RhcnRfc2VnOwotCXBvcy0+c2VnX2J5dGVfcG9zICAgPSAwOwotCXBvcy0+dm9sdW1lX3BvcyAgICAgPSAwOwotCXBvcy0+dGFwZV9wb3MgICAgICAgPSB6ZnRfY2FsY190YXBlX3Bvcyhwb3MtPnNlZ19wb3MpOwotCXpmdF9qdXN0X2JlZm9yZV9lb2YgPSB2dGJsLT5zaXplID09IDA7Ci0JaWYgKHpmdF9jbXByX29wcykgewotCQkoKnpmdF9jbXByX29wcy0+cmVzZXQpKCk7Ci0JfQotCXpmdF9kZWJsb2NrX3NlZ21lbnQgPSAtMTsgLyogbm8gbmVlZCB0byBrZWVwIGNhY2hlICovCi0JVFJBQ0UoZnRfdF9ub2lzZSwgInJlcG9zaXRpb25pbmcgdG86XG4iCi0JICAgICAgS0VSTl9JTkZPICJ6ZnRfc2VnX3BvcyAgICAgICAgOiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAiemZ0X3NlZ19ieXRlX3BvcyAgIDogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gInpmdF90YXBlX3BvcyAgICAgICA6ICIgTExfWCAiXG4iCi0JICAgICAgS0VSTl9JTkZPICJ6ZnRfdm9sdW1lX3BvcyAgICAgOiAiIExMX1ggIlxuIgotCSAgICAgIEtFUk5fSU5GTyAiZmlsZSBudW1iZXIgICAgICAgIDogJWQiLAotCSAgICAgIHBvcy0+c2VnX3BvcywgcG9zLT5zZWdfYnl0ZV9wb3MsIAotCSAgICAgIExMKHBvcy0+dGFwZV9wb3MpLCBMTChwb3MtPnZvbHVtZV9wb3MpLCB2dGJsLT5jb3VudCk7Ci0JemZ0X3Jlc2lkID0gY291bnQgPCAwID8gLWNvdW50IDogY291bnQ7Ci0JVFJBQ0VfRVhJVCB6ZnRfcmVzaWQgPyAtRUlOVkFMIDogMDsKLX0KLQotLyogdGhlIGZvbGxvd2luZyBzaW1wbHkgcmV0dXJucyB0aGUgcmF3IGRhdGEgcG9zaXRpb24gb2YgdGhlIEVPTQotICogbWFya2VyLCBNVElPQ1NJWkUgaW9jdGwgCi0gKi8KLV9fczY0IHpmdF9nZXRfZW9tX3Bvcyh2b2lkKQotewotCWlmICh6ZnRfcWljX21vZGUpIHsKLQkJcmV0dXJuIHpmdF9jYWxjX3RhcGVfcG9zKHpmdF9lb21fdnRibC0+c3RhcnRfc2VnKTsKLQl9IGVsc2UgewotCQkvKiB0aGVyZSBpcyBvbmx5IG9uZSB2b2x1bWUgaW4gcmF3IG1vZGUgKi8KLQkJcmV0dXJuIHpmdF9jYXBhY2l0eTsKLQl9Ci19Ci0KLS8qIHNraXAgdG8gZW9tLCB1c2VkIGZvciBNVEVPTQotICovCi12b2lkIHpmdF9za2lwX3RvX2VvbSh6ZnRfcG9zaXRpb24gKnBvcykKLXsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQlwb3MtPnNlZ19wb3MgICAgICA9IHpmdF9lb21fdnRibC0+c3RhcnRfc2VnOwotCXBvcy0+c2VnX2J5dGVfcG9zID0gCi0JCXBvcy0+dm9sdW1lX3BvcyAgICAgPSAKLQkJemZ0X2p1c3RfYmVmb3JlX2VvZiA9IDA7Ci0JcG9zLT50YXBlX3BvcyA9IHpmdF9jYWxjX3RhcGVfcG9zKHBvcy0+c2VnX3Bvcyk7Ci0JVFJBQ0UoZnRfdF9ub2lzZSwgImZ0YXBlIHBvc2l0aW9uZWQgdG8gc2VnbWVudCAlZCwgZGF0YSBwb3MgIiBMTF9YLCAKLQkgICAgICBwb3MtPnNlZ19wb3MsIExMKHBvcy0+dGFwZV9wb3MpKTsKLQlUUkFDRV9FWElUOwotfQotCi0vKiAgd3JpdGUgYW4gRU9GLW1hcmtlciBieSBzZXR0aW5nIHpmdF9sYXN0X3Z0YmwtPmVuZF9zZWcgdG8gc2VnX3Bvcy4KLSAqICBOT1RFOiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB6ZnRfbGFzdF92dGJsIHBvaW50cyB0byBhIHZhbGlkCi0gKiAgdnRibCBlbnRyeQotICoKLSAqICBOT1RFOiB0aGlzIHJvdXRpbmUgYWx3YXlzIHBvc2l0aW9ucyBiZWZvcmUgdGhlIEVPRiBtYXJrZXIKLSAqLwotaW50IHpmdF9jbG9zZV92b2x1bWUoemZ0X3Bvc2l0aW9uICpwb3MpCi17Ci0JVFJBQ0VfRlVOKGZ0X3RfYW55KTsKLQotCWlmICh6ZnRfdnRibF9lbXB0eSB8fCAhemZ0X2xhc3RfdnRibC0+b3BlbikgeyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLwotCQlUUkFDRShmdF90X25vaXNlLCAiVGhlcmUgYXJlIG5vIHZvbHVtZXMgdG8gZmluaXNoIik7Ci0JCVRSQUNFX0VYSVQgLUVJTzsKLQl9Ci0JaWYgKHBvcy0+c2VnX2J5dGVfcG9zID09IDAgJiYgCi0JICAgIHBvcy0+c2VnX3BvcyAhPSB6ZnRfbGFzdF92dGJsLT5zdGFydF9zZWcpIHsKLQkJcG9zLT5zZWdfcG9zIC0tOwotCQlwb3MtPnNlZ19ieXRlX3BvcyAgICAgID0gemZ0X2dldF9zZWdfc3oocG9zLT5zZWdfcG9zKTsKLQl9Ci0JemZ0X2xhc3RfdnRibC0+ZW5kX3NlZyAgID0gcG9zLT5zZWdfcG9zOwotCXpmdF9sYXN0X3Z0YmwtPnNpemUgICAgICA9IHBvcy0+dm9sdW1lX3BvczsKLQl6ZnRfdm9sdW1lX3RhYmxlX2NoYW5nZWQgPSAxOwotCXpmdF9qdXN0X2JlZm9yZV9lb2YgICAgICA9IDE7Ci0JemZ0X2VvbV92dGJsLT5zdGFydF9zZWcgID0gemZ0X2xhc3RfdnRibC0+ZW5kX3NlZyArIDE7Ci0JemZ0X2xhc3RfdnRibC0+b3BlbiAgICAgID0gMDsgLyogY2xvc2VkICovCi0JVFJBQ0VfRVhJVCAwOwotfQotCi0vKiB3cml0ZSBjb3VudCBmaWxlLW1hcmtzIGF0IGN1cnJlbnQgcG9zaXRpb24uIAotICoKLSAqICBUaGUgdGFwZSBpcyBwb3NpdGlvbmVkIGFmdGVyIHRoZSBlb2YtbWFya2VyLCB0aGF0IGlzIGF0IGJ5dGUgMCBvZgotICogIHRoZSBzZWdtZW50IGZvbGxvd2luZyB0aGUgZW9mLW1hcmtlcgotICoKLSAqICB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgYWxsb3dlZCBpbiB6ZnRfcWljX21vZGUKLSAqCi0gKiAgT25seSBhbGxvd2VkIHdoZW4gdGFwZSBpcyBhdCBCT1Qgb3IgRU9ELgotICovCi1pbnQgemZ0X3dlb2YodW5zaWduZWQgaW50IGNvdW50LCB6ZnRfcG9zaXRpb24gKnBvcykKLXsKLQkKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICghY291bnQpIHsgLyogd3JpdGUgemVybyBFT0YgbWFya3Mgc2hvdWxkIGJlIGEgcmVhbCBuby1vcCAqLwotCQlUUkFDRV9FWElUIDA7Ci0JfQotCXpmdF92b2x1bWVfdGFibGVfY2hhbmdlZCA9IDE7Ci0JaWYgKHpmdF90YXBlX2F0X2xib3QocG9zKSkgewotCQl6ZnRfaW5pdF92dGJsKCk7Ci0JCWlmKHpmdF9vbGRfZnRhcGUpIHsKLQkJCS8qIGNsZWFyIG9sZCBmdGFwZSdzIGVvZiBtYXJrcyAqLwotCQkJemZ0X2NsZWFyX2Z0YXBlX2ZpbGVfbWFya3MoKTsKLQkJCXpmdF9vbGRfZnRhcGUgPSAwOyAgICAvKiBubyBsb25nZXIgb2xkIGZ0YXBlICovCi0JCX0KLQl9Ci0JaWYgKHpmdF9sYXN0X3Z0YmwtPm9wZW4pIHsKLQkJemZ0X2Nsb3NlX3ZvbHVtZShwb3MpOwotCQl6ZnRfbW92ZV9wYXN0X2VvZihwb3MpOwotCQljb3VudCAtLTsKLQl9Ci0JLyogbm93IGl0J3MgZWFzeSwganVzdCBhcHBlbmQgZW9mLW1hcmtzLCB0aGF0IGlzIGVtcHR5Ci0JICogdm9sdW1lcywgdG8gdGhlIGVuZCBvZiB0aGUgYWxyZWFkeSByZWNvcmRlZCBtZWRpYS4KLQkgKi8KLQl3aGlsZSAoY291bnQgPiAwICYmIAotCSAgICAgICBwb3MtPnNlZ19wb3MgPD0gZnRfbGFzdF9kYXRhX3NlZ21lbnQgJiYgCi0JICAgICAgIHpmdF9lb21fdnRibC0+Y291bnQgPCBaRlRfTUFYX1ZPTFVNRVMpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwKLQkJICAgICAgIldyaXRpbmcgemVybyBzaXplZCBmaWxlIGF0IHNlZ21lbnQgJWQiLCBwb3MtPnNlZ19wb3MpOwotCQl6ZnRfbmV3X3Z0YmxfZW50cnkoKTsKLQkJemZ0X2xhc3RfdnRibC0+c3RhcnRfc2VnICAgICAgID0gcG9zLT5zZWdfcG9zOwotCQl6ZnRfbGFzdF92dGJsLT5lbmRfc2VnICAgICAgICAgPSBwb3MtPnNlZ19wb3M7Ci0JCXpmdF9sYXN0X3Z0YmwtPnNpemUgICAgICAgICAgICA9IDA7Ci0JCXpmdF9sYXN0X3Z0YmwtPmJsa19zeiAgICAgICAgICA9IHpmdF9ibGtfc3o7Ci0JCXpmdF9sYXN0X3Z0YmwtPnpmdF92b2x1bWUgICAgICA9IDE7Ci0JCXpmdF9sYXN0X3Z0YmwtPnVzZV9jb21wcmVzc2lvbiA9IDA7Ci0JCXBvcy0+dGFwZV9wb3MgKz0gemZ0X2dldF9zZWdfc3oocG9zLT5zZWdfcG9zKTsKLQkJemZ0X2VvbV92dGJsLT5zdGFydF9zZWcgPSArKyBwb3MtPnNlZ19wb3M7Ci0JCWNvdW50IC0tOwotCX0gCi0JaWYgKGNvdW50ID4gMCkgewotCQkvKiAgdGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzOiBlbmQgb2YgdGFwZSwgb3IgdGhlCi0JCSAqICBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyBpcyBleGhhdXN0ZWQuCi0JCSAqLwotCQl6ZnRfcmVzaWQgPSBjb3VudDsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwiTnVtYmVyIG9mIG1hcmtzIE5PVCB3cml0dGVuOiAlZCIsIHpmdF9yZXNpZCk7Ci0JCWlmICh6ZnRfZW9tX3Z0YmwtPmNvdW50ID09IFpGVF9NQVhfVk9MVU1FUykgewotCQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF93YXJuLAotCQkJCSAgICAibWF4aW11bSBhbGxvd2VkIG51bWJlciBvZiBmaWxlcyAiCi0JCQkJICAgICJleGhhdXN0ZWQ6ICVkIiwgWkZUX01BWF9WT0xVTUVTKTsKLQkJfSBlbHNlIHsKLQkJCVRSQUNFX0FCT1JUKC1FTk9TUEMsCi0JCQkJICAgIGZ0X3Rfbm9pc2UsICJyZWFjaGVkIGVuZCBvZiB0YXBlIik7Ci0JCX0KLQl9Ci0JVFJBQ0VfRVhJVCAwOwotfQotCi1jb25zdCB6ZnRfdm9saW5mbyAqemZ0X2ZpbmRfdm9sdW1lKHVuc2lnbmVkIGludCBzZWdfcG9zKQotewotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCQotCVRSQUNFKGZ0X3RfYW55LCAiY2FsbGVkIHdpdGggc2VnX3BvcyAlZCIsc2VnX3Bvcyk7Ci0JaWYgKCF6ZnRfcWljX21vZGUpIHsKLQkJaWYgKHNlZ19wb3MgPiBmdF9sYXN0X2RhdGFfc2VnbWVudCkgewotCQkJVFJBQ0VfRVhJVCAmZW90X3Z0Ymw7Ci0JCX0KLQkJdGFwZV92dGJsLmJsa19zeiA9ICB6ZnRfYmxrX3N6OwotCQlUUkFDRV9FWElUICZ0YXBlX3Z0Ymw7Ci0JfQotCWlmIChzZWdfcG9zIDwgemZ0X2ZpcnN0X3Z0YmwtPnN0YXJ0X3NlZykgewotCQlUUkFDRV9FWElUIChjdXJfdnRibCA9IHpmdF9maXJzdF92dGJsKTsKLQl9Ci0Jd2hpbGUgKHNlZ19wb3MgPiBjdXJfdnRibC0+ZW5kX3NlZykgewotCQljdXJfdnRibCA9IGxpc3RfZW50cnkoY3VyX3Z0YmwtPm5vZGUubmV4dCwgemZ0X3ZvbGluZm8sIG5vZGUpOwotCQlUUkFDRShmdF90X25vaXNlLCAiJWQgLSAlZCIsIGN1cl92dGJsLT5zdGFydF9zZWcsIGN1cl92dGJsLT5lbmRfc2VnKTsKLQl9Ci0Jd2hpbGUgKHNlZ19wb3MgPCBjdXJfdnRibC0+c3RhcnRfc2VnKSB7Ci0JCWN1cl92dGJsID0gbGlzdF9lbnRyeShjdXJfdnRibC0+bm9kZS5wcmV2LCB6ZnRfdm9saW5mbywgbm9kZSk7Ci0JCVRSQUNFKGZ0X3Rfbm9pc2UsICIlZCAtICVkIiwgY3VyX3Z0YmwtPnN0YXJ0X3NlZywgY3VyX3Z0YmwtPmVuZF9zZWcpOwotCX0KLQlpZiAoc2VnX3BvcyA+IGN1cl92dGJsLT5lbmRfc2VnIHx8IHNlZ19wb3MgPCBjdXJfdnRibC0+c3RhcnRfc2VnKSB7Ci0JCVRSQUNFKGZ0X3RfYnVnLCAiVGhpcyBjYW5ub3QgaGFwcGVuIik7Ci0JfQotCURVTVBfVk9MSU5GTyhmdF90X25vaXNlLCAiIiwgY3VyX3Z0YmwpOwotCVRSQUNFX0VYSVQgY3VyX3Z0Ymw7Ci19Ci0KLS8qIHRoaXMgZnVuY3Rpb24gcmVhbGx5IGFzc3VtZXMgdGhhdCB3ZSBhcmUganVzdCBiZWZvcmUgZW9mCi0gKi8KLXZvaWQgemZ0X21vdmVfcGFzdF9lb2YoemZ0X3Bvc2l0aW9uICpwb3MpCi17IAotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIm9sZCBzZWcuIHBvczogJWQiLCBwb3MtPnNlZ19wb3MpOwotCXBvcy0+dGFwZV9wb3MgKz0gemZ0X2dldF9zZWdfc3oocG9zLT5zZWdfcG9zKyspIC0gcG9zLT5zZWdfYnl0ZV9wb3M7Ci0JcG9zLT5zZWdfYnl0ZV9wb3MgPSAwOwotCXBvcy0+dm9sdW1lX3BvcyAgID0gMDsKLQlpZiAoemZ0X2NtcHJfb3BzKSB7Ci0JCSgqemZ0X2NtcHJfb3BzLT5yZXNldCkoKTsKLQl9Ci0JemZ0X2p1c3RfYmVmb3JlX2VvZiA9ICAwOwotCXpmdF9kZWJsb2NrX3NlZ21lbnQgPSAtMTsgLyogbm8gbmVlZCB0byBjYWNoZSBpdCBhbnltb3JlICovCi0JVFJBQ0UoZnRfdF9ub2lzZSwgIm5ldyBzZWcuIHBvczogJWQiLCBwb3MtPnNlZ19wb3MpOwotCVRSQUNFX0VYSVQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS12dGJsLmggYi9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS12dGJsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWQxOTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtdnRibC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLSNpZm5kZWYgX1pGVEFQRV9WVEJMX0gKLSNkZWZpbmUgX1pGVEFQRV9WVEJMX0gKLQotLyoKLSAqICAgICAgQ29weXJpZ2h0IChjKSAxOTk1LTE5OTcgIENsYXVzLUp1c3R1cyBIZWluZQotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAotIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAKLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIAotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwKLSBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvemZ0YXBlL3pmdGFwZS12dGJsLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMyAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8yOCAxNDozMDowOSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgZGVmaW5lcyBhIHZvbHVtZSB0YWJsZSBhcyBkZWZpbmVkIGluIHRoZSBRSUMtODAKLSAqICAgICAgZGV2ZWxvcG1lbnQgc3RhbmRhcmRzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLSNpbmNsdWRlICIuLi9sb3dsZXZlbC9mdGFwZS10cmFjaW5nLmgiCi0KLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWVvZi5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtY3RsLmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1ydy5oIgotCi0jZGVmaW5lIFZUQkxfU0laRSAxMjggLyogYnl0ZXMgKi8KLQotLyogVGhlIGZvbGxvd2luZyBhcmUgb2Zmc2V0cyBpbiB0aGUgdnRibC4gICovCi0jZGVmaW5lIFZUQkxfU0lHICAgMAotI2RlZmluZSBWVEJMX1NUQVJUIDQKLSNkZWZpbmUgVlRCTF9FTkQgICA2Ci0jZGVmaW5lIFZUQkxfREVTQyAgOAotI2RlZmluZSBWVEJMX0RBVEUgIDUyCi0jZGVmaW5lIFZUQkxfRkxBR1MgNTYKLSNkZWZpbmUgVlRCTF9GTF9WRU5ET1JfU1BFQ0lGSUMgKDE8PDApCi0jZGVmaW5lIFZUQkxfRkxfTVVUTElfQ0FSVFJJREdFICgxPDwxKQotI2RlZmluZSBWVEJMX0ZMX05PVF9WRVJJRklFRCAgICAoMTw8MikKLSNkZWZpbmUgVlRCTF9GTF9SRURJUl9JTkhJQklUICAgKDE8PDMpCi0jZGVmaW5lIFZUQkxfRkxfU0VHX1NQQU5OSU5HICAgICgxPDw0KQotI2RlZmluZSBWVEJMX0ZMX0RJUkVDVE9SWV9MQVNUICAoMTw8NSkKLSNkZWZpbmUgVlRCTF9GTF9SRVNFUlZFRF82ICAgICAgKDE8PDYpCi0jZGVmaW5lIFZUQkxfRkxfUkVTRVJWRURfNyAgICAgICgxPDw3KQotI2RlZmluZSBWVEJMX01fTk8gIDU3Ci0jZGVmaW5lIFZUQkxfRVhUICAgNTgKLSNkZWZpbmUgRVhUX1pGVEFQRV9TSUcgICAgIDAKLSNkZWZpbmUgRVhUX1pGVEFQRV9CTEtTWiAgMTAKLSNkZWZpbmUgRVhUX1pGVEFQRV9DTUFQICAgMTIKLSNkZWZpbmUgRVhUX1pGVEFQRV9RSUMxMTMgMTMKLSNkZWZpbmUgVlRCTF9QV0QgICA4NAotI2RlZmluZSBWVEJMX0RJUl9TSVpFIDkyCi0jZGVmaW5lIFZUQkxfREFUQV9TSVpFIDk2Ci0jZGVmaW5lIFZUQkxfT1NfVkVSU0lPTiAxMDQKLSNkZWZpbmUgVlRCTF9TUkNfRFJJVkUgIDEwNgotI2RlZmluZSBWVEJMX0RFViAgICAgICAgMTIyCi0jZGVmaW5lIFZUQkxfUkVTRVJWRURfMSAxMjMKLSNkZWZpbmUgVlRCTF9DTVBSICAgICAgIDEyNAotI2RlZmluZSBWVEJMX0NNUFJfVU5SRUcgMHgzZgotI2RlZmluZSBWVEJMX0NNUFJfVVNFRCAgMHg4MAotI2RlZmluZSBWVEJMX0ZNVCAgICAgICAgMTI1Ci0jZGVmaW5lIFZUQkxfUkVTRVJWRURfMiAxMjYKLSNkZWZpbmUgVlRCTF9SRVNFUlZFRF8zIDEyNwotLyogY29tcGF0aWJpbGl0eSB3aXRoIHByZSByZXZpc2lvbiBLICovCi0jZGVmaW5lIFZUQkxfS19DTVBSICAgICAxMjAgCi0KLS8qICB0aGUgbmV4dCBpcyB1c2VkIGJ5IFFJQy0zMDIwIHRhcGVzIHdpdGggZm9ybWF0IGNvZGUgNiAoPjJeMTYKLSAqICBzZWdtZW50cykgSXQgaXMgc3BlY2lmaWVkIGluIFFJQy0xMTMsIFJldi4gRywgU2VjdGlvbiA1IChTQ1NJCi0gKiAgdm9sdW1lIHRhYmxlKS4gVGhlIGRpZmZlcmVuY2UgaXMgc2ltcGx5LCB0aGF0IHdlIG9ubHkgc3RvcmUgdGhlCi0gKiAgbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQsIG5vdCB0aGUgc3RhcnRpbmcgc2VnbWVudC4KLSAqLwotI2RlZmluZSBWVEJMX1NDU0lfU0VHUyAgNCAvKiBpcyBhIDQgYnl0ZSB2YWx1ZSAqLwotCi0vKiAgb25lIHZ0YmwgaXMgMTI4IGJ5dGVzLCB0aGF0IHJlc3VsdHMgaW4gYSBtYXhpbXVtIG51bWJlciBvZgotICogIDI5KjEwMjQvMTI4ID0gMjMyIHZvbHVtZXMuCi0gKi8KLSNkZWZpbmUgWkZUX01BWF9WT0xVTUVTIChGVF9TRUdNRU5UX1NJWkUvVlRCTF9TSVpFKQotI2RlZmluZSBWVEJMX0lEICAiVlRCTCIKLSNkZWZpbmUgVlRCTF9JRFMgeyBWVEJMX0lELCAiWFRCTCIsICJVVElEIiwgIkVYVlQiIH0gLyogb3RoZXIgdmFsaWQgaWRzICovCi0jZGVmaW5lIFpGVF9WT0xfTkFNRSAiemZ0YXBlIHZvbHVtZSIgLyogdm9sdW1lIGxhYmVsIHVzZWQgYnkgbWUgKi8KLSNkZWZpbmUgWkZUQVBFX1NJRyAiTElOVVggWkZUIgotCi0vKiAgZ2xvYmFsIHZhcmlhYmxlcwotICovCi10eXBlZGVmIHN0cnVjdCB6ZnRfaW50ZXJuYWxfdnRibAotewotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlpbnQgICAgICAgICAgY291bnQ7Ci0JdW5zaWduZWQgaW50IHN0YXJ0X3NlZzsgICAgICAgICAvKiAzMiBiaXRzIGFyZSBlbm91Z2ggZm9yIG5vdyAqLwotCXVuc2lnbmVkIGludCBlbmRfc2VnOyAgICAgICAgICAgLyogMzIgYml0cyBhcmUgZW5vdWdoIGZvciBub3cgKi8KLQlfX3M2NCAgICAgICAgc2l6ZTsgICAgICAgICAgICAgIC8qIHVuY29tcHJlc3NlZCBzaXplICovCi0gICAgICAgIHVuc2lnbmVkIGludCBibGtfc3o7ICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSBmb3IgdGhpcyB2b2x1bWUgKi8KLQl1bnNpZ25lZCBpbnQgemZ0X3ZvbHVtZSAgICAgOjE7IC8qIHpmdGFwZSBjcmVhdGVkIHRoaXMgdm9sdW1lICovCi0JdW5zaWduZWQgaW50IHVzZV9jb21wcmVzc2lvbjoxOyAvKiBjb21wcmVzc2VkIHZvbHVtZSAgKi8KLQl1bnNpZ25lZCBpbnQgcWljMTEzICAgICAgICAgOjE7IC8qIGxheW91dCBvZiBjb21wcmVzc2VkIGJsb2NrCi0JCQkJCSAqIGluZm8gYW5kIHZ0YmwgY29uZm9ybXMgdG8KLQkJCQkJICogUUlDLTExMywgUmV2LiBHIAotCQkJCQkgKi8KLQl1bnNpZ25lZCBpbnQgbmV3X3ZvbHVtZSAgICAgOjE7IC8qIGl0IHdhcyBjcmVhdGVkIGJ5IHVzLCB0aGlzCi0JCQkJCSAqIHJ1bi4gIHRoaXMgYWxsb3dzIHRoZQotCQkJCQkgKiBmaWVsZHMgdGhhdCBhcmVuJ3QgcmVhbGx5Ci0JCQkJCSAqIHVzZWQgYnkgemZ0YXBlIHRvIGJlIGZpbGxlZAotCQkJCQkgKiBpbiBieSBzb21lIHVzZXIgbGV2ZWwKLQkJCQkJICogcHJvZ3JhbS4KLQkJCQkJICovCi0JdW5zaWduZWQgaW50IG9wZW4gICAgICAgICAgIDoxOyAvKiBqdXN0IGluIHByb2dyZXNzIG9mIGJlaW5nIAotCQkJCQkgKiB3cml0dGVuCi0JCQkJCSAqLwotfSB6ZnRfdm9saW5mbzsKLQotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgemZ0X3Z0Ymw7Ci0jZGVmaW5lIHpmdF9oZWFkX3Z0YmwgIGxpc3RfZW50cnkoemZ0X3Z0YmwubmV4dCwgemZ0X3ZvbGluZm8sIG5vZGUpCi0jZGVmaW5lIHpmdF9lb21fdnRibCAgIGxpc3RfZW50cnkoemZ0X3Z0YmwucHJldiwgemZ0X3ZvbGluZm8sIG5vZGUpCi0jZGVmaW5lIHpmdF9sYXN0X3Z0YmwgIGxpc3RfZW50cnkoemZ0X2VvbV92dGJsLT5ub2RlLnByZXYsIHpmdF92b2xpbmZvLCBub2RlKQotI2RlZmluZSB6ZnRfZmlyc3RfdnRibCBsaXN0X2VudHJ5KHpmdF9oZWFkX3Z0YmwtPm5vZGUubmV4dCwgemZ0X3ZvbGluZm8sIG5vZGUpCi0jZGVmaW5lIHpmdF92dGJsX2VtcHR5ICh6ZnRfZW9tX3Z0YmwtPm5vZGUucHJldiA9PSAmemZ0X2hlYWRfdnRibC0+bm9kZSkKLQotI2RlZmluZSBEVU1QX1ZPTElORk8obGV2ZWwsIGRlc2MsIGluZm8pCQkJCQlcCi17CQkJCQkJCQkJXAotCWNoYXIgdG1wWzIxXTsJCQkJCQkJXAotCXN0cmxjcHkodG1wLCBkZXNjLCBzaXplb2YodG1wKSk7CQkJCVwKLQlUUkFDRShsZXZlbCwgIlZvbHVtZSAlZDpcbiIJCQkJCVwKLQkgICAgICBLRVJOX0lORk8gImRlc2NyaXB0aW9uICA6ICVzXG4iCQkJCVwKLQkgICAgICBLRVJOX0lORk8gImZpcnN0IHNlZ21lbnQ6ICVkXG4iCQkJCVwKLQkgICAgICBLRVJOX0lORk8gImxhc3QgIHNlZ21lbnQ6ICVkXG4iCQkJCVwKLQkgICAgICBLRVJOX0lORk8gInNpemUgICAgICAgICA6ICIgTExfWCAiXG4iCQkJXAotCSAgICAgIEtFUk5fSU5GTyAiYmxvY2sgc2l6ZSAgIDogJWRcbiIJCQkJXAotCSAgICAgIEtFUk5fSU5GTyAiY29tcHJlc3Npb24gIDogJWRcbiIJCQkJXAotCSAgICAgIEtFUk5fSU5GTyAiemZ0YXBlIHZvbHVtZTogJWRcbiIJCQkJXAotCSAgICAgIEtFUk5fSU5GTyAiUUlDLTExMyBjb25mLjogJWQiLAkJCQlcCi0JICAgICAgKGluZm8pLT5jb3VudCwgdG1wLCAoaW5mbyktPnN0YXJ0X3NlZywgKGluZm8pLT5lbmRfc2VnLAlcCi0JICAgICAgTEwoKGluZm8pLT5zaXplKSwgKGluZm8pLT5ibGtfc3osCQkJCVwKLQkgICAgICAoaW5mbyktPnVzZV9jb21wcmVzc2lvbiAhPSAwLCAoaW5mbyktPnpmdF92b2x1bWUgIT0gMCwJXAotCSAgICAgIChpbmZvKS0+cWljMTEzICE9IDApOwkJCQkJXAotfQotCi1leHRlcm4gaW50IHpmdF9xaWNfbW9kZTsKLWV4dGVybiBpbnQgemZ0X29sZF9mdGFwZTsKLWV4dGVybiBpbnQgemZ0X3ZvbHVtZV90YWJsZV9jaGFuZ2VkOwotCi0vKiBleHBvcnRlZCBmdW5jdGlvbnMgKi8KLWV4dGVybiB2b2lkICB6ZnRfaW5pdF92dGJsICAgICAgICAgICAgICh2b2lkKTsKLWV4dGVybiB2b2lkICB6ZnRfZnJlZV92dGJsICAgICAgICAgICAgICh2b2lkKTsKLWV4dGVybiBpbnQgICB6ZnRfZXh0cmFjdF92b2x1bWVfaGVhZGVycyhfX3U4ICpidWZmZXIpOwotZXh0ZXJuIGludCAgIHpmdF91cGRhdGVfdm9sdW1lX3RhYmxlICAgKHVuc2lnbmVkIGludCBzZWdtZW50KTsKLWV4dGVybiBpbnQgICB6ZnRfb3Blbl92b2x1bWUgICAgICAgICAgICh6ZnRfcG9zaXRpb24gKnBvcywKLQkJCQkJaW50IGJsa19zeiwgaW50IHVzZV9jb21wcmVzc2lvbik7Ci1leHRlcm4gaW50ICAgemZ0X2Nsb3NlX3ZvbHVtZSAgICAgICAgICAoemZ0X3Bvc2l0aW9uICpwb3MpOwotZXh0ZXJuIGNvbnN0IHpmdF92b2xpbmZvICp6ZnRfZmluZF92b2x1bWUodW5zaWduZWQgaW50IHNlZ19wb3MpOwotZXh0ZXJuIGludCAgIHpmdF9za2lwX3ZvbHVtZXMgICAgICAgICAgKGludCBjb3VudCwgemZ0X3Bvc2l0aW9uICpwb3MpOwotZXh0ZXJuIF9fczY0IHpmdF9nZXRfZW9tX3BvcyAgICAgICAgICAgKHZvaWQpOwotZXh0ZXJuIHZvaWQgIHpmdF9za2lwX3RvX2VvbSAgICAgICAgICAgKHpmdF9wb3NpdGlvbiAqcG9zKTsKLWV4dGVybiBpbnQgICB6ZnRfZmFrZV92b2x1bWVfaGVhZGVycyAgIChlb2ZfbWFya191bmlvbiAqZW9mX21hcCwgCi0JCQkJCWludCBudW1fZmFpbGVkX3NlY3RvcnMpOwotZXh0ZXJuIGludCAgIHpmdF93ZW9mICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCBjb3VudCwgemZ0X3Bvc2l0aW9uICpwb3MpOwotZXh0ZXJuIHZvaWQgIHpmdF9tb3ZlX3Bhc3RfZW9mICAgICAgICAgKHpmdF9wb3NpdGlvbiAqcG9zKTsKLQotc3RhdGljIGlubGluZSBpbnQgICB6ZnRfdGFwZV9hdF9lb2QgICAgICAgICAoY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MpOwotc3RhdGljIGlubGluZSBpbnQgICB6ZnRfdGFwZV9hdF9sYm90ICAgICAgICAoY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MpOwotc3RhdGljIGlubGluZSB2b2lkICB6ZnRfcG9zaXRpb25fYmVmb3JlX2VvZiAoemZ0X3Bvc2l0aW9uICpwb3MsIAotCQkJCQkgICAgIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUpOwotc3RhdGljIGlubGluZSBfX3M2NCB6ZnRfY2hlY2tfZm9yX2VvZihjb25zdCB6ZnRfdm9saW5mbyAqdnRibCwKLQkJCQkgICAgICBjb25zdCB6ZnRfcG9zaXRpb24gKnBvcyk7Ci0KLS8qIHRoaXMgZnVuY3Rpb24gZGVjcmVtZW50cyB0aGUgemZ0X3NlZ19wb3MgY291bnRlciBpZiB3ZSBhcmUgcmlnaHQKLSAqIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzZWdtZW50LiBUaGlzIGlzIHRvIGhhbmRsZSBmc2ZtL2JzZm0gLS0gd2UKLSAqIG5lZWQgdG8gcG9zaXRpb24gYmVmb3JlIHRoZSBlb2YgbWFyay4gIE5PVEU6IHpmdF90YXBlX3BvcyBpcyBub3QKLSAqIGNoYW5nZWQgCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB6ZnRfcG9zaXRpb25fYmVmb3JlX2VvZih6ZnRfcG9zaXRpb24gKnBvcywgCi0JCQkJCSAgIGNvbnN0IHpmdF92b2xpbmZvICp2b2x1bWUpCi17IAotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JaWYgKHBvcy0+c2VnX3BvcyA9PSB2b2x1bWUtPmVuZF9zZWcgKyAxICYmICBwb3MtPnNlZ19ieXRlX3BvcyA9PSAwKSB7Ci0JCXBvcy0+c2VnX3BvcyAtLTsKLQkJcG9zLT5zZWdfYnl0ZV9wb3MgPSB6ZnRfZ2V0X3NlZ19zeihwb3MtPnNlZ19wb3MpOwotCX0KLQlUUkFDRV9FWElUOwotfQotCi0vKiAgTW1taC4gSXMgdGhlIHBvc2l0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxhc3Qgdm9sdW1lLCB0aGF0IGlzIHJpZ2h0Ci0gKiAgYmVmb3JlIHRoZSBsYXN0IEVPRiBtYXJrIGFsc28gbG9naWNhbCBhbiBFT0QgY29uZGl0aW9uPwotICovCi1zdGF0aWMgaW5saW5lIGludCB6ZnRfdGFwZV9hdF9lb2QoY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MpCi17IAotCVRSQUNFX0ZVTihmdF90X2FueSk7Ci0KLQlpZiAoemZ0X3FpY19tb2RlKSB7Ci0JCVRSQUNFX0VYSVQgKHBvcy0+c2VnX3BvcyA+PSB6ZnRfZW9tX3Z0YmwtPnN0YXJ0X3NlZyB8fAotCQkJICAgIHpmdF9sYXN0X3Z0YmwtPm9wZW4pOwotCX0gZWxzZSB7Ci0JCVRSQUNFX0VYSVQgcG9zLT5zZWdfcG9zID4gZnRfbGFzdF9kYXRhX3NlZ21lbnQ7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIGludCB6ZnRfdGFwZV9hdF9sYm90KGNvbnN0IHpmdF9wb3NpdGlvbiAqcG9zKQotewotCWlmICh6ZnRfcWljX21vZGUpIHsKLQkJcmV0dXJuIChwb3MtPnNlZ19wb3MgPD0gemZ0X2ZpcnN0X3Z0YmwtPnN0YXJ0X3NlZyAmJgotCQkJcG9zLT52b2x1bWVfcG9zID09IDApOwotCX0gZWxzZSB7Ci0JCXJldHVybiAocG9zLT5zZWdfcG9zIDw9IGZ0X2ZpcnN0X2RhdGFfc2VnbWVudCAmJiAKLQkJCXBvcy0+dm9sdW1lX3BvcyA9PSAwKTsKLQl9Ci19Ci0KLS8qIFRoaXMgb25lIGNoZWNrcyBmb3IgRU9GLiAgcmV0dXJuIHJlbWFpbmcgc3BhY2UgKG1heSBiZSBuZWdhdGl2ZSkgCi0gKi8KLXN0YXRpYyBpbmxpbmUgX19zNjQgemZ0X2NoZWNrX2Zvcl9lb2YoY29uc3QgemZ0X3ZvbGluZm8gKnZ0YmwsCi0JCQkJICAgICAgY29uc3QgemZ0X3Bvc2l0aW9uICpwb3MpCi17ICAgICAKLQlyZXR1cm4gKF9fczY0KSh2dGJsLT5zaXplIC0gcG9zLT52b2x1bWVfcG9zKTsKLX0KLQotI2VuZGlmIC8qIF9aRlRBUEVfVlRCTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS13cml0ZS5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtd3JpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQzMjdiOC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS13cml0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgzICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1cyBIZWluZQotCi0gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLQotICoKLSAqICRTb3VyY2U6IC9ob21lcy9jdnMvZnRhcGUtc3RhY2tlZC9mdGFwZS96ZnRhcGUvemZ0YXBlLXdyaXRlLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuMyAkCi0gKiAkRGF0ZTogMTk5Ny8xMS8wNiAwMDo1MDoyOSAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHdyaXRpbmcgY29kZQotICogICAgICBmb3IgdGhlIFFJQy0xMTcgZmxvcHB5LXRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1pbml0LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS1lb2YuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWN0bC5oIgotI2luY2x1ZGUgIi4uL3pmdGFwZS96ZnRhcGUtd3JpdGUuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJ3LmgiCi0jaW5jbHVkZSAiLi4vemZ0YXBlL3pmdGFwZS12dGJsLmgiCi0KLS8qICAgICAgR2xvYmFsIHZhcnMuCi0gKi8KLQotLyogICAgICBMb2NhbCB2YXJzLgotICovCi1zdGF0aWMgaW50IGxhc3Rfd3JpdGVfZmFpbGVkOwotc3RhdGljIGludCBuZWVkX2ZsdXNoOwotCi12b2lkIHpmdF9wcmV2ZW50X2ZsdXNoKHZvaWQpCi17Ci0JbmVlZF9mbHVzaCA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgemZ0X3dyaXRlX2hlYWRlcl9zZWdtZW50cyhfX3U4KiBidWZmZXIpCi17Ci0JaW50IGhlYWRlcl8xX29rID0gMDsKLQlpbnQgaGVhZGVyXzJfb2sgPSAwOwotCXVuc2lnbmVkIGludCB0aW1lX3N0YW1wOwotCVRSQUNFX0ZVTihmdF90X25vaXNlKTsKLQkKLQlUUkFDRV9DQVRDSChmdGFwZV9hYm9ydF9vcGVyYXRpb24oKSwpOwotCWZ0YXBlX3NlZWtfdG9fYm90KCk7ICAgIC8qIHByZXZlbnRzIGV4dHJhIHJld2luZCAqLwotCWlmIChHRVQ0KGJ1ZmZlciwgMCkgIT0gRlRfSFNFR19NQUdJQykgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwKLQkJCSAgICAid3JvbmcgaGVhZGVyIHNpZ25hdHVyZSBmb3VuZCwgYWJvcnRpbmciKTsKLQl9IAotCS8qICAgQmUgb3B0aW1pc3RpYzogKi8KLQlQVVQ0KGJ1ZmZlciwgRlRfU0VHX0NOVCwKLQkgICAgIHpmdF93cml0dGVuX3NlZ21lbnRzICsgR0VUNChidWZmZXIsIEZUX1NFR19DTlQpICsgMik7Ci0JaWYgKCh0aW1lX3N0YW1wID0gemZ0X2dldF90aW1lKCkpICE9IDApIHsKLQkJUFVUNChidWZmZXIsIEZUX1dSX0RBVEUsIHRpbWVfc3RhbXApOwotCQlpZiAoemZ0X2xhYmVsX2NoYW5nZWQpIHsKLQkJCVBVVDQoYnVmZmVyLCBGVF9MQUJFTF9EQVRFLCB0aW1lX3N0YW1wKTsKLQkJfQotCX0KLQlUUkFDRShmdF90X25vaXNlLAotCSAgICAgICJ3cml0aW5nIGZpcnN0IGhlYWRlciBzZWdtZW50ICVkIiwgZnRfaGVhZGVyX3NlZ21lbnRfMSk7Ci0JaGVhZGVyXzFfb2sgPSB6ZnRfdmVyaWZ5X3dyaXRlX3NlZ21lbnRzKGZ0X2hlYWRlcl9zZWdtZW50XzEsIAotCQkJCQkJYnVmZmVyLCBGVF9TRUdNRU5UX1NJWkUsCi0JCQkJCQl6ZnRfZGVibG9ja19idWYpID49IDA7Ci0JVFJBQ0UoZnRfdF9ub2lzZSwKLQkgICAgICAid3JpdGluZyBzZWNvbmQgaGVhZGVyIHNlZ21lbnQgJWQiLCBmdF9oZWFkZXJfc2VnbWVudF8yKTsKLQloZWFkZXJfMl9vayA9IHpmdF92ZXJpZnlfd3JpdGVfc2VnbWVudHMoZnRfaGVhZGVyX3NlZ21lbnRfMiwgCi0JCQkJCQlidWZmZXIsIEZUX1NFR01FTlRfU0laRSwKLQkJCQkJCXpmdF9kZWJsb2NrX2J1ZikgPj0gMDsKLQlpZiAoIWhlYWRlcl8xX29rKSB7Ci0JCVRSQUNFKGZ0X3Rfd2FybiwgIldhcm5pbmc6ICIKLQkJICAgICAgInVwZGF0ZSBvZiBmaXJzdCBoZWFkZXIgc2VnbWVudCBmYWlsZWQiKTsKLQl9Ci0JaWYgKCFoZWFkZXJfMl9vaykgewotCQlUUkFDRShmdF90X3dhcm4sICJXYXJuaW5nOiAiCi0JCSAgICAgICJ1cGRhdGUgb2Ygc2Vjb25kIGhlYWRlciBzZWdtZW50IGZhaWxlZCIpOwotCX0KLQlpZiAoIWhlYWRlcl8xX29rICYmICFoZWFkZXJfMl9vaykgewotCQlUUkFDRV9BQk9SVCgtRUlPLCBmdF90X2VyciwgIkVycm9yOiAiCi0JCSAgICAgICJ1cGRhdGUgb2YgYm90aCBoZWFkZXIgc2VnbWVudHMgZmFpbGVkLiIpOwotCX0KLQlUUkFDRV9FWElUIDA7Ci19Ci0KLWludCB6ZnRfdXBkYXRlX2hlYWRlcl9zZWdtZW50cyh2b2lkKQotewotCVRSQUNFX0ZVTihmdF90X25vaXNlKTsKLQkKLQkvKiAgbXVzdCBOT1QgdXNlIHpmdF93cml0ZV9wcm90ZWN0ZWQsIGFzIGl0IGFsc28gaW5jbHVkZXMgdGhlCi0JICogIGZpbGUgYWNjZXNzIG1vZGUuIEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdXBkYXRlIHdoZW4gc29mdAotCSAqICB3cml0ZSBwcm90ZWN0aW9uIGlzIGVuYWJsZWQgKE9fUkRPTkxZKQotCSAqLwotCWlmIChmdF93cml0ZV9wcm90ZWN0ZWQgfHwgemZ0X29sZF9mdGFwZSkgewotCQlUUkFDRV9BQk9SVCgwLCBmdF90X25vaXNlLCAiVGFwZSBzZXQgcmVhZC1vbmx5OiBubyB1cGRhdGUiKTsKLQl9IAotCWlmICghemZ0X2hlYWRlcl9yZWFkKSB7Ci0JCVRSQUNFX0FCT1JUKDAsIGZ0X3Rfbm9pc2UsICJOb3RoaW5nIHRvIHVwZGF0ZSIpOwotCX0KLQlpZiAoIXpmdF9oZWFkZXJfY2hhbmdlZCkgewotCQl6ZnRfaGVhZGVyX2NoYW5nZWQgPSB6ZnRfd3JpdHRlbl9zZWdtZW50cyA+IDA7Ci0JfQotCWlmICghemZ0X2hlYWRlcl9jaGFuZ2VkICYmICF6ZnRfdm9sdW1lX3RhYmxlX2NoYW5nZWQpIHsKLQkJVFJBQ0VfQUJPUlQoMCwgZnRfdF9ub2lzZSwgIk5vdGhpbmcgdG8gdXBkYXRlIik7Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJVcGRhdGluZyBoZWFkZXIgc2VnbWVudHMiKTsKLQlpZiAoZnRhcGVfZ2V0X3N0YXR1cygpLT5mdGlfc3RhdGUgPT0gd3JpdGluZykgewotCQlUUkFDRV9DQVRDSChmdGFwZV9sb29wX3VudGlsX3dyaXRlc19kb25lKCksKTsKLQl9Ci0JVFJBQ0VfQ0FUQ0goZnRhcGVfYWJvcnRfb3BlcmF0aW9uKCksKTsKLQkKLQl6ZnRfZGVibG9ja19zZWdtZW50ID0gLTE7IC8qIGludmFsaWRhdGUgdGhlIGNhY2hlICovCi0JaWYgKHpmdF9oZWFkZXJfY2hhbmdlZCkgewotCQlUUkFDRV9DQVRDSCh6ZnRfd3JpdGVfaGVhZGVyX3NlZ21lbnRzKHpmdF9oc2VnX2J1ZiksKTsKLQl9Ci0JaWYgKHpmdF92b2x1bWVfdGFibGVfY2hhbmdlZCkgewotCQlUUkFDRV9DQVRDSCh6ZnRfdXBkYXRlX3ZvbHVtZV90YWJsZShmdF9maXJzdF9kYXRhX3NlZ21lbnQpLCk7Ci0JfQotCXpmdF9oZWFkZXJfY2hhbmdlZCA9Ci0JCXpmdF92b2x1bWVfdGFibGVfY2hhbmdlZCA9IAotCQl6ZnRfbGFiZWxfY2hhbmdlZCAgICAgICAgPQotCQl6ZnRfd3JpdHRlbl9zZWdtZW50cyAgICAgPSAwOwotCVRSQUNFX0NBVENIKGZ0YXBlX2Fib3J0X29wZXJhdGlvbigpLCk7Ci0JZnRhcGVfc2Vla190b19ib3QoKTsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVhZF9tZXJnZV9idWZmZXIoaW50IHNlZ19wb3MsIF9fdTggKmJ1ZmZlciwgaW50IG9mZnNldCwgaW50IHNlZ19zeikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQljb25zdCBmdF90cmFjZV90IG9sZF90cmFjaW5nID0gVFJBQ0VfTEVWRUw7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0JCi0JaWYgKHpmdF9xaWNfbW9kZSkgewotCQkvKiAgd3JpdGluZyBpbiB0aGUgbWlkZGxlIG9mIGEgdm9sdW1lIGlzIE5PVCBhbGxvd2VkCi0JCSAqCi0JCSAqLwotCQlUUkFDRShmdF90X25vaXNlLCAiTm8gbmVlZCB0byByZWFkIGEgc2VnbWVudCIpOwotCQltZW1zZXQoYnVmZmVyICsgb2Zmc2V0LCAwLCBzZWdfc3ogLSBvZmZzZXQpOwotCQlUUkFDRV9FWElUIDA7Ci0JfQotCVRSQUNFKGZ0X3RfYW55LCAid2FpdGluZyIpOwotCWZ0YXBlX3N0YXJ0X3dyaXRpbmcoRlRfV1JfTVVMVEkpOwotCVRSQUNFX0NBVENIKGZ0YXBlX2xvb3BfdW50aWxfd3JpdGVzX2RvbmUoKSwpOwotCQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJ0cnlpbmcgdG8gcmVhZCBzZWdtZW50ICVkIGZyb20gb2Zmc2V0ICVkIiwKLQkgICAgICBzZWdfcG9zLCBvZmZzZXQpOwotCVNFVF9UUkFDRV9MRVZFTChmdF90X2J1Zyk7Ci0JcmVzdWx0ID0gemZ0X2ZldGNoX3NlZ21lbnRfZnJhY3Rpb24oc2VnX3BvcywgYnVmZmVyLCAKLQkJCQkJICAgIEZUX1JEX1NJTkdMRSwKLQkJCQkJICAgIG9mZnNldCwgc2VnX3N6IC0gb2Zmc2V0KTsKLQlTRVRfVFJBQ0VfTEVWRUwob2xkX3RyYWNpbmcpOwotCWlmIChyZXN1bHQgIT0gKHNlZ19zeiAtIG9mZnNldCkpIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgIklnbm9yZSBlcnJvcjogcmVhZF9zZWdtZW50KCkgcmVzdWx0OiAlZCIsCi0JCSAgICAgIHJlc3VsdCk7Ci0JCW1lbXNldChidWZmZXIgKyBvZmZzZXQsIDAsIHNlZ19zeiAtIG9mZnNldCk7Ci0JfQotCVRSQUNFX0VYSVQgMDsKLX0KLQotLyogZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlciB0byB0YXBlIGFuZCB3cml0ZSBhbiBlb2YtbWFya2VyIGF0IHRoZQotICogY3VycmVudCBwb3NpdGlvbiBpZiBub3QgaW4gcmF3IG1vZGUuICBUaGlzIGZ1bmN0aW9uIGFsd2F5cwotICogcG9zaXRpb25zIHRoZSB0YXBlIGJlZm9yZSB0aGUgZW9mLW1hcmtlci4gIF9mdGFwZV9jbG9zZSgpIHNob3VsZAotICogdGhlbiBhZHZhbmNlIHRvIHRoZSBuZXh0IHNlZ21lbnQuCi0gKgotICogdGhlIHBhcmFtZXRlciAiZmluaXNoX3ZvbHVtZSIgZGVzY3JpYmVzIHdoZXRoZXIgdG8gcG9zaXRpb24gYmVmb3JlCi0gKiBvciBhZnRlciB0aGUgcG9zc2libHkgY3JlYXRlZCBmaWxlLW1hcmsuIFdlIGFsd2F5cyBwb3NpdGlvbiBhZnRlcgotICogdGhlIGZpbGUtbWFyayB3aGVuIGNhbGxlZCBmcm9tIGZ0YXBlX2Nsb3NlKCkgYW5kIGEgZmx1c2ggd2FzIG5lZWRlZAotICogKHRoYXQgaXMgZnRhcGVfd3JpdGUoKSB3YXMgdGhlIGxhc3QgdGFwZSBvcGVyYXRpb24gYmVmb3JlIGNhbGxpbmcKLSAqIGZ0YXBlX2ZsdXNoKSBCdXQgd2UgYWx3YXlzIHBvc2l0aW9uIGJlZm9yZSB0aGUgZmlsZS1tYXJrIHdoZW4gdGhpcwotICogZnVuY3Rpb24gZ2V0J3MgY2FsbGVkIGZyb20gb3V0c2lkZSBmdGFwZV9jbG9zZSgpIAotICovCi1pbnQgemZ0X2ZsdXNoX2J1ZmZlcnModm9pZCkKLXsKLQlpbnQgcmVzdWx0OwotCWludCBkYXRhX3JlbWFpbmluZzsKLQlpbnQgdGhpc19zZWdzX3NpemU7Ci0JVFJBQ0VfRlVOKGZ0X3RfZmxvdyk7Ci0KLQlUUkFDRShmdF90X2RhdGFfZmxvdywKLQkgICAgICAiZW50ZXJlZCwgZnRhcGVfc3RhdGUgPSAlZCIsIGZ0YXBlX2dldF9zdGF0dXMoKS0+ZnRpX3N0YXRlKTsKLQlpZiAoZnRhcGVfZ2V0X3N0YXR1cygpLT5mdGlfc3RhdGUgIT0gd3JpdGluZyAmJiAhbmVlZF9mbHVzaCkgewotCQlUUkFDRV9BQk9SVCgwLCBmdF90X25vaXNlLCAibm8gbmVlZCBmb3IgZmx1c2giKTsKLQl9Ci0JemZ0X2lvX3N0YXRlID0gemZ0X2lkbGU7IC8qICB0cmlnZ2VycyBzb21lIGluaXRpYWxpemF0aW9ucyBmb3IgdGhlCi0JCQkJICAqICByZWFkIGFuZCB3cml0ZSByb3V0aW5lcyAKLQkJCQkgICovCi0JaWYgKGxhc3Rfd3JpdGVfZmFpbGVkKSB7Ci0JCWZ0YXBlX2Fib3J0X29wZXJhdGlvbigpOwotCQlUUkFDRV9FWElUIC1FSU87Ci0JfQotCVRSQUNFKGZ0X3Rfbm9pc2UsICJmbHVzaGluZyB3cml0ZSBidWZmZXJzIik7Ci0JdGhpc19zZWdzX3NpemUgPSB6ZnRfZ2V0X3NlZ19zeih6ZnRfcG9zLnNlZ19wb3MpOwotCWlmICh0aGlzX3NlZ3Nfc2l6ZSA9PSB6ZnRfcG9zLnNlZ19ieXRlX3BvcykgewotCQl6ZnRfcG9zLnNlZ19wb3MgKys7Ci0JCWRhdGFfcmVtYWluaW5nID0gemZ0X3Bvcy5zZWdfYnl0ZV9wb3MgPSAwOwotCX0gZWxzZSB7Ci0JCWRhdGFfcmVtYWluaW5nID0gemZ0X3Bvcy5zZWdfYnl0ZV9wb3M7Ci0JfQotCS8qIElmIHRoZXJlIGlzIGFueSBkYXRhIG5vdCB3cml0dGVuIHRvIHRhcGUgeWV0LCBhcHBlbmQgemVybydzCi0JICogdXAgdG8gdGhlIGVuZCBvZiB0aGUgc2VjdG9yIChpZiB1c2luZyBjb21wcmVzc2lvbikgb3IgbWVyZ2UKLQkgKiBpdCB3aXRoIHRoZSBkYXRhIGV4aXN0aW5nIG9uIHRoZSB0YXBlIFRoZW4gd3JpdGUgdGhlCi0JICogc2VnbWVudChzKSB0byB0YXBlLgotCSAqLwotCVRSQUNFKGZ0X3Rfbm9pc2UsICJQb3NpdGlvbjpcbiIKLQkgICAgICBLRVJOX0lORk8gInNlZ19wb3MgIDogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gImJ5dGUgcG9zIDogJWRcbiIKLQkgICAgICBLRVJOX0lORk8gInJlbWFpbmluZzogJWQiLAotCSAgICAgIHpmdF9wb3Muc2VnX3BvcywgemZ0X3Bvcy5zZWdfYnl0ZV9wb3MsIGRhdGFfcmVtYWluaW5nKTsKLQlpZiAoZGF0YV9yZW1haW5pbmcgPiAwKSB7Ci0JCWRvIHsKLQkJCXRoaXNfc2Vnc19zaXplID0gemZ0X2dldF9zZWdfc3ooemZ0X3Bvcy5zZWdfcG9zKTsKLQkJCWlmICh0aGlzX3NlZ3Nfc2l6ZSA+IGRhdGFfcmVtYWluaW5nKSB7Ci0JCQkJVFJBQ0VfQ0FUQ0gocmVhZF9tZXJnZV9idWZmZXIoemZ0X3Bvcy5zZWdfcG9zLAotCQkJCQkJCSAgICAgIHpmdF9kZWJsb2NrX2J1ZiwKLQkJCQkJCQkgICAgICBkYXRhX3JlbWFpbmluZywKLQkJCQkJCQkgICAgICB0aGlzX3NlZ3Nfc2l6ZSksCi0JCQkJCSAgICBsYXN0X3dyaXRlX2ZhaWxlZCA9IDEpOwotCQkJfQotCQkJcmVzdWx0ID0gZnRhcGVfd3JpdGVfc2VnbWVudCh6ZnRfcG9zLnNlZ19wb3MsIAotCQkJCQkJICAgICB6ZnRfZGVibG9ja19idWYsCi0JCQkJCQkgICAgIEZUX1dSX01VTFRJKTsKLQkJCWlmIChyZXN1bHQgIT0gdGhpc19zZWdzX3NpemUpIHsKLQkJCQlUUkFDRShmdF90X2VyciwgImZsdXNoIGJ1ZmZlcnMgZmFpbGVkIik7Ci0JCQkJemZ0X3Bvcy50YXBlX3BvcyAgICAtPSB6ZnRfcG9zLnNlZ19ieXRlX3BvczsKLQkJCQl6ZnRfcG9zLnNlZ19ieXRlX3BvcyA9IDA7Ci0KLQkJCQlsYXN0X3dyaXRlX2ZhaWxlZCA9IDE7Ci0JCQkJVFJBQ0VfRVhJVCByZXN1bHQ7Ci0JCQl9Ci0JCQl6ZnRfd3JpdHRlbl9zZWdtZW50cyArKzsKLQkJCVRSQUNFKGZ0X3RfZGF0YV9mbG93LAotCQkJICAgICAgImZsdXNoLCBtb3ZlZCBvdXQgYnVmZmVyOiAlZCIsIHJlc3VsdCk7Ci0JCQkvKiBuZWVkIG5leHQgc2VnbWVudCBmb3IgbW9yZSBkYXRhIChlbXB0eSBzZWdtZW50cz8pCi0JCQkgKi8KLQkJCWlmIChyZXN1bHQgPCBkYXRhX3JlbWFpbmluZykgeyAKLQkJCQlpZiAocmVzdWx0ID4gMCkgeyAgICAgICAKLQkJCQkJLyogbW92ZSByZW1haW5kZXIgdG8gYnVmZmVyIGJlZ2lubmluZyAKLQkJCQkJICovCi0JCQkJCW1lbW1vdmUoemZ0X2RlYmxvY2tfYnVmLCAKLQkJCQkJCXpmdF9kZWJsb2NrX2J1ZiArIHJlc3VsdCwKLQkJCQkJCUZUX1NFR01FTlRfU0laRSAtIHJlc3VsdCk7Ci0JCQkJfQotCQkJfSAKLQkJCWRhdGFfcmVtYWluaW5nIC09IHJlc3VsdDsKLQkJCXpmdF9wb3Muc2VnX3BvcyArKzsKLQkJfSB3aGlsZSAoZGF0YV9yZW1haW5pbmcgPiAwKTsKLQkJVFJBQ0UoZnRfdF9hbnksICJyZXN1bHQ6ICVkIiwgcmVzdWx0KTsKLQkJemZ0X2RlYmxvY2tfc2VnbWVudCA9IC0temZ0X3Bvcy5zZWdfcG9zOwotCQlpZiAoZGF0YV9yZW1haW5pbmcgPT0gMCkgeyAgLyogZmlyc3QgYnl0ZSBuZXh0IHNlZ21lbnQgKi8KLQkJCXpmdF9wb3Muc2VnX2J5dGVfcG9zID0gdGhpc19zZWdzX3NpemU7Ci0JCX0gZWxzZSB7IC8qIGFmdGVyIGRhdGEgcHJldmlvdXMgc2VnbWVudCwgZGF0YV9yZW1haW5pbmcgPCAwICovCi0JCQl6ZnRfcG9zLnNlZ19ieXRlX3BvcyA9IGRhdGFfcmVtYWluaW5nICsgcmVzdWx0OwotCQl9Ci0JfSBlbHNlIHsKLQkJVFJBQ0UoZnRfdF9ub2lzZSwgInpmdF9kZWJsb2NrX2J1ZiBlbXB0eSIpOwotCQl6ZnRfcG9zLnNlZ19wb3MgLS07Ci0JCXpmdF9wb3Muc2VnX2J5dGVfcG9zID0gemZ0X2dldF9zZWdfc3ogKHpmdF9wb3Muc2VnX3Bvcyk7Ci0JCWZ0YXBlX3N0YXJ0X3dyaXRpbmcoRlRfV1JfTVVMVEkpOwotCX0KLQlUUkFDRShmdF90X2FueSwgIndhaXRpbmciKTsKLQlpZiAoKHJlc3VsdCA9IGZ0YXBlX2xvb3BfdW50aWxfd3JpdGVzX2RvbmUoKSkgPCAwKSB7Ci0JCS8qIHRoYXQncyByZWFsbHkgYmFkLiBXaGF0IHRvIHRvIHdpdGggemZ0X3RhcGVfcG9zPyAKLQkJICovCi0JCVRSQUNFKGZ0X3RfZXJyLCAiZmx1c2ggYnVmZmVycyBmYWlsZWQiKTsKLQl9Ci0JVFJBQ0UoZnRfdF9hbnksICJ6ZnRfc2VnX3BvczogJWQsIHpmdF9zZWdfYnl0ZV9wb3M6ICVkIiwKLQkgICAgICB6ZnRfcG9zLnNlZ19wb3MsIHpmdF9wb3Muc2VnX2J5dGVfcG9zKTsKLQlsYXN0X3dyaXRlX2ZhaWxlZCAgPQotCQluZWVkX2ZsdXNoID0gMDsKLQlUUkFDRV9FWElUIHJlc3VsdDsKLX0KLQotLyogcmV0dXJuLXZhbHVlOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbW92ZWQgZnJvbSB0aGUgdXNlci1idWZmZXIKLSAqCi0gKiBvdXQ6IAotICogICAgICBpbnQgKndyaXRlX2NudDogaG93IG11Y2ggYWN0dWFsbHkgaGFzIGJlZW4gbW92ZWQgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICB6ZnRfZGVibG9ja19idWYKLSAqICAgICAgaW50IHJlcV9sZW4gIDogTVVTVCBOT1QgQkUgQ0hBTkdFRCwgZXhjZXB0IGF0IEVPVCwgaW4gCi0gKiAgICAgICAgICAgICAgICAgICAgICB3aGljaCBjYXNlIGl0IG1heSBiZSBhZGp1c3RlZAotICogaW4gOiAKLSAqICAgICAgY2hhciAqYnVmZiAgICAgICAgOiB0aGUgdXNlciBidWZmZXIKLSAqICAgICAgaW50IGJ1Zl9wb3Nfd3JpdGUgOiBjb3B5IG9mIGJ1Zl9sZW5fd3IgaW50Ci0gKiAgICAgIHRoaXNfc2Vnc19zaXplICAgIDogdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGFjdHVhbCBzZWdtZW50Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcgotICogICAgICAqemZ0X2RlYmxvY2tfYnVmICAgOiB6ZnRfZGVibG9ja19idWYKLSAqLwotc3RhdGljIGludCB6ZnRfc2ltcGxlX3dyaXRlKGludCAqY250LAotCQkJICAgIF9fdTggKmRzdF9idWYsIGNvbnN0IGludCBzZWdfc3osCi0JCQkgICAgY29uc3QgX191OCBfX3VzZXIgKnNyY19idWYsIGNvbnN0IGludCByZXFfbGVuLCAKLQkJCSAgICBjb25zdCB6ZnRfcG9zaXRpb24gKnBvcyxjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lKQotewotCWludCBzcGFjZV9sZWZ0OwotCVRSQUNFX0ZVTihmdF90X2Zsb3cpOwotCi0JLyogdm9sdW1lLT5zaXplIGhvbGRzIHRoZSB0YXBlIGNhcGFjaXR5IHdoaWxlIHZvbHVtZSBpcyBvcGVuICovCi0JaWYgKHBvcy0+dGFwZV9wb3MgKyB2b2x1bWUtPmJsa19zeiA+IHZvbHVtZS0+c2l6ZSkgewotCQlUUkFDRV9FWElUIC1FTk9TUEM7Ci0JfQotCS8qICByZW1haW5pbmcgc3BhY2UgaW4gdGhpcyBzZWdtZW50LCBOT1QgemZ0X2RlYmxvY2tfYnVmCi0JICovCi0Jc3BhY2VfbGVmdCA9IHNlZ19zeiAtIHBvcy0+c2VnX2J5dGVfcG9zOwotCSpjbnQgPSByZXFfbGVuIDwgc3BhY2VfbGVmdCA/IHJlcV9sZW4gOiBzcGFjZV9sZWZ0OwotCWlmIChjb3B5X2Zyb21fdXNlcihkc3RfYnVmICsgcG9zLT5zZWdfYnl0ZV9wb3MsIHNyY19idWYsICpjbnQpICE9IDApIHsKLQkJVFJBQ0VfRVhJVCAtRUZBVUxUOwotCX0KLQlUUkFDRV9FWElUICpjbnQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfd3JpdGVfYWNjZXNzKGludCByZXFfbGVuLAotCQkJICAgICAgY29uc3QgemZ0X3ZvbGluZm8gKip2b2x1bWUsCi0JCQkgICAgICB6ZnRfcG9zaXRpb24gKnBvcywKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBibGtfc3opCi17Ci0JaW50IHJlc3VsdDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmICgocmVxX2xlbiAlIHpmdF9ibGtfc3opICE9IDApIHsKLQkJVFJBQ0VfQUJPUlQoLUVJTlZBTCwgZnRfdF9pbmZvLAotCQkJICAgICJ3cml0ZS1jb3VudCAlZCBtdXN0IGJlIG11bHRpcGxlIG9mIGJsb2NrLXNpemUgJWQiLAotCQkJICAgIHJlcV9sZW4sIGJsa19zeik7Ci0JfQotCWlmICh6ZnRfaW9fc3RhdGUgPT0gemZ0X3dyaXRpbmcpIHsKLQkJLyogIGFsbCBvdGhlciBlcnJvciBjb25kaXRpb25zIGhhdmUgYmVlbiBjaGVja2VkIGVhcmxpZXIKLQkJICovCi0JCVRSQUNFX0VYSVQgMDsKLQl9Ci0JemZ0X2lvX3N0YXRlID0gemZ0X2lkbGU7Ci0JVFJBQ0VfQ0FUQ0goemZ0X2NoZWNrX3dyaXRlX2FjY2Vzcyhwb3MpLCk7Ci0JLyogIElmIHdlIGhhdmVuJ3QgcmVhZCB0aGUgaGVhZGVyIHNlZ21lbnQgeWV0LCBkbyBpdCBub3cuCi0JICogIFRoaXMgd2lsbCB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24sIGdldCB0aGUgYmFkIHNlY3RvcgotCSAqICB0YWJsZSBhbmQgcmVhZCB0aGUgdm9sdW1lIHRhYmxlIHNlZ21lbnQgCi0JICovCi0JaWYgKCF6ZnRfaGVhZGVyX3JlYWQpIHsKLQkJVFJBQ0VfQ0FUQ0goemZ0X3JlYWRfaGVhZGVyX3NlZ21lbnRzKCksKTsKLQl9Ci0JLyogIGZpbmUuIE5vdyB0aGUgdGFwZSBpcyBlaXRoZXIgYXQgQk9UIG9yIGF0IEVPRCwKLQkgKiAgV3JpdGUgc3RhcnQgb2Ygdm9sdW1lIG5vdwotCSAqLwotCVRSQUNFX0NBVENIKHpmdF9vcGVuX3ZvbHVtZShwb3MsIGJsa19zeiwgemZ0X3VzZV9jb21wcmVzc2lvbiksKTsKLQkqdm9sdW1lID0gemZ0X2ZpbmRfdm9sdW1lKHBvcy0+c2VnX3Bvcyk7Ci0JRFVNUF9WT0xJTkZPKGZ0X3Rfbm9pc2UsICIiLCAqdm9sdW1lKTsKLQl6ZnRfanVzdF9iZWZvcmVfZW9mID0gMDsKLQkvKiBub3cgbWVyZ2Ugd2l0aCBvbGQgZGF0YSBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIXpmdF9xaWNfbW9kZSAmJiBwb3MtPnNlZ19ieXRlX3BvcyAhPSAwKXsKLQkJcmVzdWx0ID0gemZ0X2ZldGNoX3NlZ21lbnQocG9zLT5zZWdfcG9zLAotCQkJCQkgICB6ZnRfZGVibG9ja19idWYsCi0JCQkJCSAgIEZUX1JEX1NJTkdMRSk7Ci0JCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlpZiAocmVzdWx0ID09IC1FSU5UUiB8fCByZXN1bHQgPT0gLUVOT1NQQykgewotCQkJCVRSQUNFX0VYSVQgcmVzdWx0OwotCQkJfQotCQkJVFJBQ0UoZnRfdF9ub2lzZSwgCi0JCQkgICAgICAiZnRhcGVfcmVhZF9zZWdtZW50KCkgcmVzdWx0OiAlZC4gIgotCQkJICAgICAgIlRoaXMgbWlnaHQgYmUgbm9ybWFsIHdoZW4gdXNpbmcgIgotCQkJICAgICAgImEgbmV3bHlcbmZvcm1hdHRlZCB0YXBlIiwgcmVzdWx0KTsKLQkJCW1lbXNldCh6ZnRfZGVibG9ja19idWYsICdcMCcsIHBvcy0+c2VnX2J5dGVfcG9zKTsKLQkJfQotCX0KLQl6ZnRfaW9fc3RhdGUgPSB6ZnRfd3JpdGluZzsKLQlUUkFDRV9FWElUIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZmlsbF9kZWJsb2NrX2J1ZihfX3U4ICpkc3RfYnVmLCBjb25zdCBpbnQgc2VnX3N6LAotCQkJICAgIHpmdF9wb3NpdGlvbiAqcG9zLCBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lLAotCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICp1c3JfYnVmLCBjb25zdCBpbnQgcmVxX2xlbikKLXsKLQlpbnQgY250ID0gMDsKLQlpbnQgcmVzdWx0ID0gMDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQotCWlmIChzZWdfc3ogPT0gMCkgewotCQlUUkFDRV9BQk9SVCgwLCBmdF90X2RhdGFfZmxvdywgImVtcHR5IHNlZ21lbnQiKTsKLQl9Ci0JVFJBQ0UoZnRfdF9kYXRhX2Zsb3csICJcbiIKLQkgICAgICBLRVJOX0lORk8gInJlbWFpbmluZyByZXFfbGVuOiAlZFxuIgotCSAgICAgIEtFUk5fSU5GTyAiICAgICAgICAgIGJ1Zl9wb3M6ICVkIiwgCi0JICAgICAgcmVxX2xlbiwgcG9zLT5zZWdfYnl0ZV9wb3MpOwotCS8qIHpmdF9kZWJsb2NrX2J1ZiB3aWxsIG5vdCBjb250YWluIGEgdmFsaWQgc2VnbWVudCBhbnkgbG9uZ2VyICovCi0JemZ0X2RlYmxvY2tfc2VnbWVudCA9IC0xOwotCWlmICh6ZnRfdXNlX2NvbXByZXNzaW9uKSB7Ci0JCVRSQUNFX0NBVENIKHpmdF9jbXByX2xvY2soMSAvKiB0cnkgdG8gbG9hZCAqLyksKTsKLQkJVFJBQ0VfQ0FUQ0gocmVzdWx0PSAoKnpmdF9jbXByX29wcy0+d3JpdGUpKCZjbnQsCi0JCQkJCQkJICAgZHN0X2J1Ziwgc2VnX3N6LAotCQkJCQkJCSAgIHVzcl9idWYsIHJlcV9sZW4sCi0JCQkJCQkJICAgcG9zLCB2b2x1bWUpLCk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0VfQ0FUQ0gocmVzdWx0PSB6ZnRfc2ltcGxlX3dyaXRlKCZjbnQsCi0JCQkJCQkgICAgIGRzdF9idWYsIHNlZ19zeiwKLQkJCQkJCSAgICAgdXNyX2J1ZiwgcmVxX2xlbiwKLQkJCQkJCSAgICAgcG9zLCB2b2x1bWUpLCk7Ci0JfQotCXBvcy0+dm9sdW1lX3BvcyAgICs9IHJlc3VsdDsKLQlwb3MtPnNlZ19ieXRlX3BvcyArPSBjbnQ7Ci0JcG9zLT50YXBlX3BvcyAgICAgKz0gY250OwotCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAiXG4iCi0JICAgICAgS0VSTl9JTkZPICJyZW1vdmVkIGZyb20gdXNlci1idWZmZXIgOiAlZCBieXRlcy5cbiIKLQkgICAgICBLRVJOX0lORk8gImNvcGllZCB0byB6ZnRfZGVibG9ja19idWY6ICVkIGJ5dGVzLlxuIgotCSAgICAgIEtFUk5fSU5GTyAiemZ0X3RhcGVfcG9zICAgICAgICAgICAgIDogIiBMTF9YICIgYnl0ZXMuIiwKLQkgICAgICByZXN1bHQsIGNudCwgTEwocG9zLT50YXBlX3BvcykpOwotCVRSQUNFX0VYSVQgcmVzdWx0OwotfQotCi0KLS8qICBjYWxsZWQgYnkgdGhlIGtlcm5lbC1pbnRlcmZhY2Ugcm91dGluZSAiemZ0X3dyaXRlKCkiCi0gKi8KLWludCBfemZ0X3dyaXRlKGNvbnN0IGNoYXIgX191c2VyICpidWZmLCBpbnQgcmVxX2xlbikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlpbnQgd3JpdHRlbiA9IDA7Ci0JaW50IHdyaXRlX2NudDsKLQlpbnQgc2VnX3N6OwotCXN0YXRpYyBjb25zdCB6ZnRfdm9saW5mbyAqdm9sdW1lID0gTlVMTDsKLQlUUkFDRV9GVU4oZnRfdF9mbG93KTsKLQkKLQl6ZnRfcmVzaWQgICAgICAgICA9IHJlcV9sZW47CQotCWxhc3Rfd3JpdGVfZmFpbGVkID0gMTsgLyogcmVzZXQgdG8gMCB3aGVuIHN1Y2Nlc3NmdWwgKi8KLQkvKiBjaGVjayBpZiB3cml0ZSBpcyBhbGxvd2VkIAotCSAqLwotCVRSQUNFX0NBVENIKGNoZWNrX3dyaXRlX2FjY2VzcyhyZXFfbGVuLCAmdm9sdW1lLCZ6ZnRfcG9zLHpmdF9ibGtfc3opLCk7Ci0Jd2hpbGUgKHJlcV9sZW4gPiAwKSB7Ci0JCS8qIEFsbG93IHVzIHRvIGVzY2FwZSBmcm9tIHRoaXMgbG9vcCB3aXRoIGEgc2lnbmFsICEKLQkJICovCi0JCUZUX1NJR05BTF9FWElUKF9ET05UX0JMT0NLKTsKLQkJc2VnX3N6ID0gemZ0X2dldF9zZWdfc3ooemZ0X3Bvcy5zZWdfcG9zKTsKLQkJaWYgKCh3cml0ZV9jbnQgPSBmaWxsX2RlYmxvY2tfYnVmKHpmdF9kZWJsb2NrX2J1ZiwKLQkJCQkJCSAgc2VnX3N6LAotCQkJCQkJICAmemZ0X3BvcywKLQkJCQkJCSAgdm9sdW1lLAotCQkJCQkJICBidWZmLAotCQkJCQkJICByZXFfbGVuKSkgPCAwKSB7Ci0JCQl6ZnRfcmVzaWQgLT0gd3JpdHRlbjsKLQkJCWlmICh3cml0ZV9jbnQgPT0gLUVOT1NQQykgewotCQkJCS8qIGxlYXZlIHRoZSByZW1haW5kZXIgdG8gZmx1c2hfYnVmZmVycygpCi0JCQkJICovCi0JCQkJVFJBQ0UoZnRfdF9pbmZvLCAiTm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UiKTsKLQkJCQlsYXN0X3dyaXRlX2ZhaWxlZCA9IDA7Ci0JCQkJaWYgKCFuZWVkX2ZsdXNoKSB7Ci0JCQkJCW5lZWRfZmx1c2ggPSB3cml0dGVuID4gMDsKLQkJCQl9Ci0JCQkJVFJBQ0VfRVhJVCB3cml0dGVuID4gMCA/IHdyaXR0ZW4gOiAtRU5PU1BDOwotCQkJfSBlbHNlIHsKLQkJCQlUUkFDRV9FWElUIHJlc3VsdDsKLQkJCX0KLQkJfQotCQlpZiAoemZ0X3Bvcy5zZWdfYnl0ZV9wb3MgPT0gc2VnX3N6KSB7Ci0JCQlUUkFDRV9DQVRDSChmdGFwZV93cml0ZV9zZWdtZW50KHpmdF9wb3Muc2VnX3BvcywgCi0JCQkJCQkJemZ0X2RlYmxvY2tfYnVmLAotCQkJCQkJCUZUX1dSX0FTWU5DKSwKLQkJCQkgICAgemZ0X3Jlc2lkIC09IHdyaXR0ZW4pOwotCQkJemZ0X3dyaXR0ZW5fc2VnbWVudHMgKys7Ci0JCQl6ZnRfcG9zLnNlZ19ieXRlX3BvcyA9ICAwOwotCQkJemZ0X2RlYmxvY2tfc2VnbWVudCAgPSB6ZnRfcG9zLnNlZ19wb3M7Ci0JCQkrK3pmdF9wb3Muc2VnX3BvczsKLQkJfQotCQl3cml0dGVuICs9IHdyaXRlX2NudDsKLQkJYnVmZiAgICArPSB3cml0ZV9jbnQ7Ci0JCXJlcV9sZW4gLT0gd3JpdGVfY250OwotCX0gLyogd2hpbGUgKHJlcV9sZW4gPiAwKSAqLwotCVRSQUNFKGZ0X3RfZGF0YV9mbG93LCAicmVtYWluaW5nIGluIGJsb2NraW5nIGJ1ZmZlcjogJWQiLAotCSAgICAgICB6ZnRfcG9zLnNlZ19ieXRlX3Bvcyk7Ci0JVFJBQ0UoZnRfdF9kYXRhX2Zsb3csICJqdXN0IHdyaXR0ZW4gYnl0ZXM6ICVkIiwgd3JpdHRlbik7Ci0JbGFzdF93cml0ZV9mYWlsZWQgPSAwOwotCXpmdF9yZXNpZCAtPSB3cml0dGVuOwotCW5lZWRfZmx1c2ggPSBuZWVkX2ZsdXNoIHx8IHdyaXR0ZW4gPiAwOwotCVRSQUNFX0VYSVQgd3JpdHRlbjsgICAgICAgICAgICAgICAvKiBieXRlcyB3cml0dGVuICovCi19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS13cml0ZS5oIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGUtd3JpdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4ODcwMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZnRhcGUvemZ0YXBlL3pmdGFwZS13cml0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotI2lmbmRlZiBfWkZUQVBFX1dSSVRFX0gKLSNkZWZpbmUgX1pGVEFQRV9XUklURV9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcgQ2xhdXMtSnVzdHVzIEhlaW5lCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2Z0YXBlL3pmdGFwZS96ZnRhcGUtd3JpdGUuaCx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE5OjEzICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB3cml0ZSBmdW5jdGlvbnMKLSAqICAgICAgZm9yIHRoZSB6ZnRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqCi0gKi8KLQotZXh0ZXJuIGludCAgemZ0X2ZsdXNoX2J1ZmZlcnModm9pZCk7Ci1leHRlcm4gaW50ICB6ZnRfdXBkYXRlX2hlYWRlcl9zZWdtZW50cyh2b2lkKTsKLWV4dGVybiB2b2lkIHpmdF9wcmV2ZW50X2ZsdXNoKHZvaWQpOwotCi0vKiAgaG9vayBmb3IgdGhlIFZGUyBpbnRlcmZhY2UgCi0gKi8KLWV4dGVybiBpbnQgX3pmdF93cml0ZShjb25zdCBjaGFyIF9fdXNlciAqYnVmZiwgaW50IHJlcV9sZW4pOwotI2VuZGlmIC8qIF9aRlRBUEVfV1JJVEVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGVfc3ltcy5jIGIvZHJpdmVycy9jaGFyL2Z0YXBlL3pmdGFwZS96ZnRhcGVfc3ltcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGIxNDAxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9mdGFwZS96ZnRhcGUvemZ0YXBlX3N5bXMuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiAgICAgIENvcHlyaWdodCAoQykgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUKLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvZnRhcGUvemZ0YXBlL3pmdGFwZV9zeW1zLmMsdiAkCi0gKiAkUmV2aXNpb246IDEuMyAkCi0gKiAkRGF0ZTogMTk5Ny8xMC8wNSAxOToxOToxNCAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHN5bWJvbHMgdGhhdCB0aGUgemZ0YXBlIGZyb250ZW5kIHRvIAotICogICAgICB0aGUgZnRhcGUgZmxvcHB5IHRhcGUgZHJpdmVyIGV4cG9ydHMgCi0gKi8JCSAKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8bGludXgvemZ0YXBlLmg+Ci0KLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWluaXQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLXJlYWQuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWJ1ZmZlcnMuaCIKLSNpbmNsdWRlICIuLi96ZnRhcGUvemZ0YXBlLWN0bC5oIgotCi0vKiB6ZnRhcGUtaW5pdC5jICovCi1FWFBPUlRfU1lNQk9MKHpmdF9jbXByX3JlZ2lzdGVyKTsKLS8qIHpmdGFwZS1yZWFkLmMgKi8KLUVYUE9SVF9TWU1CT0woemZ0X2ZldGNoX3NlZ21lbnRfZnJhY3Rpb24pOwotLyogemZ0YXBlLWJ1ZmZlcnMuYyAqLwotRVhQT1JUX1NZTUJPTCh6ZnRfdm1hbGxvY19vbmNlKTsKLUVYUE9SVF9TWU1CT0woemZ0X3ZtYWxsb2NfYWx3YXlzKTsKLUVYUE9SVF9TWU1CT0woemZ0X3ZmcmVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IDA5MWExMWMuLjIwZGMzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9jb3JlLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwppbmRleCBlYmFjZTIwLi4yNmE4NjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2NvcmUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggZWI2YjEzZi4uZDQwZGYzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTQ2Niw4ICsxNDY2LDggQEAKIGxhdGVfaW5pdGNhbGwoc2VxZ2VuX2luaXQpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1fX3UzMiBzZWN1cmVfdGNwdjZfc2VxdWVuY2VfbnVtYmVyKF9fdTMyICpzYWRkciwgX191MzIgKmRhZGRyLAotCQkJCSAgIF9fdTE2IHNwb3J0LCBfX3UxNiBkcG9ydCkKK19fdTMyIHNlY3VyZV90Y3B2Nl9zZXF1ZW5jZV9udW1iZXIoX19iZTMyICpzYWRkciwgX19iZTMyICpkYWRkciwKKwkJCQkgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCkKIHsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlfX3UzMiBzZXE7CkBAIC0xNDc5LDEwICsxNDc5LDEwIEBACiAJICovCiAKIAltZW1jcHkoaGFzaCwgc2FkZHIsIDE2KTsKLQloYXNoWzRdPShzcG9ydCA8PCAxNikgKyBkcG9ydDsKKwloYXNoWzRdPSgoX19mb3JjZSB1MTYpc3BvcnQgPDwgMTYpICsgKF9fZm9yY2UgdTE2KWRwb3J0OwogCW1lbWNweSgmaGFzaFs1XSxrZXlwdHItPnNlY3JldCxzaXplb2YoX191MzIpICogNyk7CiAKLQlzZXEgPSB0d290aGlyZHNNRDRUcmFuc2Zvcm0oZGFkZHIsIGhhc2gpICYgSEFTSF9NQVNLOworCXNlcSA9IHR3b3RoaXJkc01ENFRyYW5zZm9ybSgoY29uc3QgX191MzIgKilkYWRkciwgaGFzaCkgJiBIQVNIX01BU0s7CiAJc2VxICs9IGtleXB0ci0+Y291bnQ7CiAKIAlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKQEAgLTE0OTYsNyArMTQ5Niw3IEBACiAvKiAgVGhlIGNvZGUgYmVsb3cgaXMgc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoKS4KICAqICBBbGwgYmxhbWVzIHRvIEFuZHJleSBWLiBTYXZvY2hraW4gPHNhd0Btc3UucnU+LgogICovCi1fX3UzMiBzZWN1cmVfaXBfaWQoX191MzIgZGFkZHIpCitfX3UzMiBzZWN1cmVfaXBfaWQoX19iZTMyIGRhZGRyKQogewogCXN0cnVjdCBrZXlkYXRhICprZXlwdHI7CiAJX191MzIgaGFzaFs0XTsKQEAgLTE1MDgsNyArMTUwOCw3IEBACiAJICogIFRoZSBkZXN0IGlwIGFkZHJlc3MgaXMgcGxhY2VkIGluIHRoZSBzdGFydGluZyB2ZWN0b3IsCiAJICogIHdoaWNoIGlzIHRoZW4gaGFzaGVkIHdpdGggcmFuZG9tIGRhdGEuCiAJICovCi0JaGFzaFswXSA9IGRhZGRyOworCWhhc2hbMF0gPSAoX19mb3JjZSBfX3UzMilkYWRkcjsKIAloYXNoWzFdID0ga2V5cHRyLT5zZWNyZXRbOV07CiAJaGFzaFsyXSA9IGtleXB0ci0+c2VjcmV0WzEwXTsKIAloYXNoWzNdID0ga2V5cHRyLT5zZWNyZXRbMTFdOwpAQCAtMTUxOCw4ICsxNTE4LDggQEAKIAogI2lmZGVmIENPTkZJR19JTkVUCiAKLV9fdTMyIHNlY3VyZV90Y3Bfc2VxdWVuY2VfbnVtYmVyKF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwKLQkJCQkgX191MTYgc3BvcnQsIF9fdTE2IGRwb3J0KQorX191MzIgc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KQogewogCXN0cnVjdCB0aW1ldmFsIHR2OwogCV9fdTMyIHNlcTsKQEAgLTE1MzIsOSArMTUzMiw5IEBACiAJICogIE5vdGUgdGhhdCB0aGUgd29yZHMgYXJlIHBsYWNlZCBpbnRvIHRoZSBzdGFydGluZyB2ZWN0b3IsIHdoaWNoIGlzCiAJICogIHRoZW4gbWl4ZWQgd2l0aCBhIHBhcnRpYWwgTUQ0IG92ZXIgcmFuZG9tIGRhdGEuCiAJICovCi0JaGFzaFswXT1zYWRkcjsKLQloYXNoWzFdPWRhZGRyOwotCWhhc2hbMl09KHNwb3J0IDw8IDE2KSArIGRwb3J0OworCWhhc2hbMF09KF9fZm9yY2UgdTMyKXNhZGRyOworCWhhc2hbMV09KF9fZm9yY2UgdTMyKWRhZGRyOworCWhhc2hbMl09KChfX2ZvcmNlIHUxNilzcG9ydCA8PCAxNikgKyAoX19mb3JjZSB1MTYpZHBvcnQ7CiAJaGFzaFszXT1rZXlwdHItPnNlY3JldFsxMV07CiAKIAlzZXEgPSBoYWxmX21kNF90cmFuc2Zvcm0oaGFzaCwga2V5cHRyLT5zZWNyZXQpICYgSEFTSF9NQVNLOwpAQCAtMTU1OSw3ICsxNTU5LDcgQEAKIEVYUE9SVF9TWU1CT0woc2VjdXJlX3RjcF9zZXF1ZW5jZV9udW1iZXIpOwogCiAvKiBHZW5lcmF0ZSBzZWN1cmUgc3RhcnRpbmcgcG9pbnQgZm9yIGVwaGVtZXJhbCBJUFY0IHRyYW5zcG9ydCBwb3J0IHNlYXJjaCAqLwotdTMyIHNlY3VyZV9pcHY0X3BvcnRfZXBoZW1lcmFsKF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwgX191MTYgZHBvcnQpCit1MzIgc2VjdXJlX2lwdjRfcG9ydF9lcGhlbWVyYWwoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCkKIHsKIAlzdHJ1Y3Qga2V5ZGF0YSAqa2V5cHRyID0gZ2V0X2tleXB0cigpOwogCXUzMiBoYXNoWzRdOwpAQCAtMTU2OCwyNSArMTU2OCwyNSBAQAogCSAqICBQaWNrIGEgdW5pcXVlIHN0YXJ0aW5nIG9mZnNldCBmb3IgZWFjaCBlcGhlbWVyYWwgcG9ydCBzZWFyY2gKIAkgKiAgKHNhZGRyLCBkYWRkciwgZHBvcnQpIGFuZCA0OGJpdHMgb2YgcmFuZG9tIGRhdGEuCiAJICovCi0JaGFzaFswXSA9IHNhZGRyOwotCWhhc2hbMV0gPSBkYWRkcjsKLQloYXNoWzJdID0gZHBvcnQgXiBrZXlwdHItPnNlY3JldFsxMF07CisJaGFzaFswXSA9IChfX2ZvcmNlIHUzMilzYWRkcjsKKwloYXNoWzFdID0gKF9fZm9yY2UgdTMyKWRhZGRyOworCWhhc2hbMl0gPSAoX19mb3JjZSB1MzIpZHBvcnQgXiBrZXlwdHItPnNlY3JldFsxMF07CiAJaGFzaFszXSA9IGtleXB0ci0+c2VjcmV0WzExXTsKIAogCXJldHVybiBoYWxmX21kNF90cmFuc2Zvcm0oaGFzaCwga2V5cHRyLT5zZWNyZXQpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi11MzIgc2VjdXJlX2lwdjZfcG9ydF9lcGhlbWVyYWwoY29uc3QgX191MzIgKnNhZGRyLCBjb25zdCBfX3UzMiAqZGFkZHIsIF9fdTE2IGRwb3J0KQordTMyIHNlY3VyZV9pcHY2X3BvcnRfZXBoZW1lcmFsKGNvbnN0IF9fYmUzMiAqc2FkZHIsIGNvbnN0IF9fYmUzMiAqZGFkZHIsIF9fYmUxNiBkcG9ydCkKIHsKIAlzdHJ1Y3Qga2V5ZGF0YSAqa2V5cHRyID0gZ2V0X2tleXB0cigpOwogCXUzMiBoYXNoWzEyXTsKIAogCW1lbWNweShoYXNoLCBzYWRkciwgMTYpOwotCWhhc2hbNF0gPSBkcG9ydDsKKwloYXNoWzRdID0gKF9fZm9yY2UgdTMyKWRwb3J0OwogCW1lbWNweSgmaGFzaFs1XSxrZXlwdHItPnNlY3JldCxzaXplb2YoX191MzIpICogNyk7CiAKLQlyZXR1cm4gdHdvdGhpcmRzTUQ0VHJhbnNmb3JtKGRhZGRyLCBoYXNoKTsKKwlyZXR1cm4gdHdvdGhpcmRzTUQ0VHJhbnNmb3JtKChjb25zdCBfX3UzMiAqKWRhZGRyLCBoYXNoKTsKIH0KICNlbmRpZgogCkBAIC0xNTk1LDE3ICsxNTk1LDE3IEBACiAgKiBiaXQncyAzMi00NyBpbmNyZWFzZSBldmVyeSBrZXkgZXhjaGFuZ2UKICAqICAgICAgIDAtMzEgIGhhc2goc291cmNlLCBkZXN0KQogICovCi11NjQgc2VjdXJlX2RjY3Bfc2VxdWVuY2VfbnVtYmVyKF9fdTMyIHNhZGRyLCBfX3UzMiBkYWRkciwKLQkJCQlfX3UxNiBzcG9ydCwgX191MTYgZHBvcnQpCit1NjQgc2VjdXJlX2RjY3Bfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCV9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KQogewogCXN0cnVjdCB0aW1ldmFsIHR2OwogCXU2NCBzZXE7CiAJX191MzIgaGFzaFs0XTsKIAlzdHJ1Y3Qga2V5ZGF0YSAqa2V5cHRyID0gZ2V0X2tleXB0cigpOwogCi0JaGFzaFswXSA9IHNhZGRyOwotCWhhc2hbMV0gPSBkYWRkcjsKLQloYXNoWzJdID0gKHNwb3J0IDw8IDE2KSArIGRwb3J0OworCWhhc2hbMF0gPSAoX19mb3JjZSB1MzIpc2FkZHI7CisJaGFzaFsxXSA9IChfX2ZvcmNlIHUzMilkYWRkcjsKKwloYXNoWzJdID0gKChfX2ZvcmNlIHUxNilzcG9ydCA8PCAxNikgKyAoX19mb3JjZSB1MTYpZHBvcnQ7CiAJaGFzaFszXSA9IGtleXB0ci0+c2VjcmV0WzExXTsKIAogCXNlcSA9IGhhbGZfbWQ0X3RyYW5zZm9ybShoYXNoLCBrZXlwdHItPnNlY3JldCk7CkBAIC0xNjQxLDcgKzE2NDEsNyBAQAogCSAqIGRyYWluIG9uIGl0KSwgYW5kIHVzZXMgaGFsZk1ENFRyYW5zZm9ybSB3aXRoaW4gdGhlIHNlY29uZC4gV2UKIAkgKiBhbHNvIG1peCBpdCB3aXRoIGppZmZpZXMgYW5kIHRoZSBQSUQ6CiAJICovCi0JcmV0dXJuIHNlY3VyZV9pcF9pZChjdXJyZW50LT5waWQgKyBqaWZmaWVzKTsKKwlyZXR1cm4gc2VjdXJlX2lwX2lkKChfX2ZvcmNlIF9fYmUzMikoY3VycmVudC0+cGlkICsgamlmZmllcykpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKaW5kZXggMDUwY2VkMi4uYmI5YTQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0uaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYwppbmRleCBlNWNiMGZkLi5iMWRjNjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKQEAgLTIxLDYgKzIxLDcgQEAKICAgICBldGMgdm9sdGFnZSAmIGZyZXF1ZW5jeSBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQhCiAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggMjZiZTRlYS4uZThlZjYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjZGVmaW5lIEhEQVBTX0xPV19QT1JUCQkweDE2MDAJLyogZmlyc3QgcG9ydCB1c2VkIGJ5IGhkYXBzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9tZW1vcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCmluZGV4IDA2MDY3NDQuLjVlMTIyNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMgYi9kcml2ZXJzL2lzZG4vZGl2ZXJ0L2lzZG5fZGl2ZXJ0LmMKaW5kZXggMWY1ZWJlOS4uMDMzMTllYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2RpdmVydC9pc2RuX2RpdmVydC5jCisrKyBiL2RyaXZlcnMvaXNkbi9kaXZlcnQvaXNkbl9kaXZlcnQuYwpAQCAtMTAsNiArMTAsOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAKICNpbmNsdWRlICJpc2RuX2RpdmVydC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1pZGUtZGlzay5jIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctaWRlLWRpc2suYwppbmRleCBmYTY1MTg4Li41NGIxNTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkdHJpZy1pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLWlkZS1kaXNrLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYyBiL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKaW5kZXggMjlhODgxOGEuLmQ3NTZiZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9sZWR0cmlnLXRpbWVyLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZHRyaWctdGltZXIuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwppbmRleCA1NWJjODkxLi44YTdkZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlICJkbXhkZXYuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL0tjb25maWcgYi9kcml2ZXJzL21tYy9LY29uZmlnCmluZGV4IGVhNDE4NTIuLmY0ZjhjY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvS2NvbmZpZwpAQCAtNDAsNyArNDAsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE1NQ19QWEEKLQl0cmlzdGF0ZSAiSW50ZWwgUFhBMjU1IE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKKwl0cmlzdGF0ZSAiSW50ZWwgUFhBMjV4LzI2eC8yN3ggTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9QWEEgJiYgTU1DCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBJbnRlbChSKSBQWEEoUikgTXVsdGltZWRpYSBjYXJkIEludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMgYi9kcml2ZXJzL21tYy9hdDkxX21jaS5jCmluZGV4IDQ5NGIyM2YuLjY0OTVjZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYwpAQCAtNzkzLDcgKzc5Myw3IEBACiAJcmV0dXJuIHJlYWRfb25seTsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgYXQ5MV9tY2lfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXQ5MV9tY2lfb3BzID0gewogCS5yZXF1ZXN0CT0gYXQ5MV9tY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IGF0OTFfbWNpX3NldF9pb3MsCiAJLmdldF9ybwkJPSBhdDkxX21jaV9nZXRfcm8sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9hdTF4bW1jLmMgYi9kcml2ZXJzL21tYy9hdTF4bW1jLmMKaW5kZXggNTNmZmNiYi4uNDQ3ZmJhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvYXUxeG1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2F1MXhtbWMuYwpAQCAtODc1LDcgKzg3NSw3IEBACiAJaG9zdC0+cnhfY2hhbiA9IHJ4Y2hhbjsKIH0KIAotc3RydWN0IG1tY19ob3N0X29wcyBhdTF4bW1jX29wcyA9IHsKK3N0cnVjdCBjb25zdCBtbWNfaG9zdF9vcHMgYXUxeG1tY19vcHMgPSB7CiAJLnJlcXVlc3QJPSBhdTF4bW1jX3JlcXVlc3QsCiAJLnNldF9pb3MJPSBhdTF4bW1jX3NldF9pb3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaW14bW1jLmMgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwppbmRleCA2NTlkNGE4Li4wNmU3ZmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9pbXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwpAQCAtODc3LDcgKzg3Nyw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBpbXhtY2lfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgaW14bWNpX29wcyA9IHsKIAkucmVxdWVzdAk9IGlteG1jaV9yZXF1ZXN0LAogCS5zZXRfaW9zCT0gaW14bWNpX3NldF9pb3MsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jLmMgYi9kcml2ZXJzL21tYy9tbWMuYwppbmRleCA3NjZiYzU0NC4uOWQxOTAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jLmMKQEAgLTQsNiArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgUnVzc2VsbCBLaW5nLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogIFNEIHN1cHBvcnQgQ29weXJpZ2h0IChDKSAyMDA0IElhbiBNb2x0b24sIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgU0Qgc3VwcG9ydCBDb3B5cmlnaHQgKEMpIDIwMDUgUGllcnJlIE9zc21hbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBNTUN2NCBzdXBwb3J0IENvcHlyaWdodCAoQykgMjAwNiBQaGlsaXAgTGFuZ2RhbGUsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0zOTYsMjMgKzM5NywyMyBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyoKLQkgKiBEZWZhdWx0IGJ1cyB3aWR0aCBpcyAxIGJpdC4KLQkgKi8KLQlob3N0LT5pb3MuYnVzX3dpZHRoID0gTU1DX0JVU19XSURUSF8xOwotCi0JLyoKLQkgKiBXZSBjYW4gb25seSBjaGFuZ2UgdGhlIGJ1cyB3aWR0aCBvZiB0aGUgc2VsZWN0ZWQKLQkgKiBjYXJkIHNvIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIHB1dCB0aGUgaGFuZGxpbmcKKwkgKiBXZSBjYW4gb25seSBjaGFuZ2UgdGhlIGJ1cyB3aWR0aCBvZiBTRCBjYXJkcyB3aGVuCisJICogdGhleSBhcmUgc2VsZWN0ZWQgc28gd2UgaGF2ZSB0byBwdXQgdGhlIGhhbmRsaW5nCiAJICogaGVyZS4KKwkgKgorCSAqIFRoZSBjYXJkIGlzIGluIDEgYml0IG1vZGUgYnkgZGVmYXVsdCBzbworCSAqIHdlIG9ubHkgbmVlZCB0byBjaGFuZ2UgaWYgaXQgc3VwcG9ydHMgdGhlCisJICogd2lkZXIgdmVyc2lvbi4KIAkgKi8KLQlpZiAoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfNF9CSVRfREFUQSkgeworCWlmIChtbWNfY2FyZF9zZChjYXJkKSAmJgorCQkoY2FyZC0+c2NyLmJ1c193aWR0aHMgJiBTRF9TQ1JfQlVTX1dJRFRIXzQpKSB7CisKIAkJLyoKLQkJICogVGhlIGNhcmQgaXMgaW4gMSBiaXQgbW9kZSBieSBkZWZhdWx0IHNvCi0JCSAqIHdlIG9ubHkgbmVlZCB0byBjaGFuZ2UgaWYgaXQgc3VwcG9ydHMgdGhlCi0JCSAqIHdpZGVyIHZlcnNpb24uCi0JCSAqLwotCQlpZiAobW1jX2NhcmRfc2QoY2FyZCkgJiYKLQkJCShjYXJkLT5zY3IuYnVzX3dpZHRocyAmIFNEX1NDUl9CVVNfV0lEVEhfNCkpIHsKKwkJKiBEZWZhdWx0IGJ1cyB3aWR0aCBpcyAxIGJpdC4KKwkJKi8KKwkJaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfMTsKKworCQlpZiAoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfNF9CSVRfREFUQSkgewogCQkJc3RydWN0IG1tY19jb21tYW5kIGNtZDsKIAkJCWNtZC5vcGNvZGUgPSBTRF9BUFBfU0VUX0JVU19XSURUSDsKIAkJCWNtZC5hcmcgPSBTRF9CVVNfV0lEVEhfNDsKQEAgLTQ1MywxMSArNDU0LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtbWNfZGVsYXkodW5zaWduZWQgaW50IG1zKQogewotCWlmIChtcyA8IEhaIC8gMTAwMCkgewotCQl5aWVsZCgpOworCWlmIChtcyA8IDEwMDAgLyBIWikgeworCQljb25kX3Jlc2NoZWQoKTsKIAkJbWRlbGF5KG1zKTsKIAl9IGVsc2UgewotCQltc2xlZXBfaW50ZXJydXB0aWJsZSAobXMpOworCQltc2xlZXAobXMpOwogCX0KIH0KIApAQCAtOTUzLDYgKzk1NCwxMzcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1tY19wcm9jZXNzX2V4dF9jc2RzKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKKworCXN0cnVjdCBtbWNfcmVxdWVzdCBtcnE7CisJc3RydWN0IG1tY19jb21tYW5kIGNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgZGF0YTsKKworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCS8qCisJICogQXMgdGhlIGV4dF9jc2QgaXMgc28gbGFyZ2UgYW5kIG1vc3RseSB1bnVzZWQsIHdlIGRvbid0IHN0b3JlIHRoZQorCSAqIHJhdyBibG9jayBpbiBtbWNfY2FyZC4KKwkgKi8KKwl1OCAqZXh0X2NzZDsKKwlleHRfY3NkID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOworCWlmICghZXh0X2NzZCkgeworCQlwcmludGsoIiVzOiBjb3VsZCBub3QgYWxsb2NhdGUgYSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZXh0X2NzZC4iCisJCSAgICAgICAibW1jIHY0IGNhcmRzIHdpbGwgYmUgdHJlYXRlZCBhcyB2My5cbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdCkpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmaG9zdC0+Y2FyZHMsIG5vZGUpIHsKKwkJaWYgKGNhcmQtPnN0YXRlICYgKE1NQ19TVEFURV9ERUFEfE1NQ19TVEFURV9QUkVTRU5UKSkKKwkJCWNvbnRpbnVlOworCQlpZiAobW1jX2NhcmRfc2QoY2FyZCkpCisJCQljb250aW51ZTsKKwkJaWYgKGNhcmQtPmNzZC5tbWNhX3ZzbiA8IENTRF9TUEVDX1ZFUl80KQorCQkJY29udGludWU7CisKKwkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGhvc3QsIGNhcmQpOworCQlpZiAoZXJyICE9IE1NQ19FUlJfTk9ORSkgeworCQkJbW1jX2NhcmRfc2V0X2RlYWQoY2FyZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisKKwkJY21kLm9wY29kZSA9IE1NQ19TRU5EX0VYVF9DU0Q7CisJCWNtZC5hcmcgPSAwOworCQljbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOworCisJCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfZGF0YSkpOworCisJCW1tY19zZXRfZGF0YV90aW1lb3V0KCZkYXRhLCBjYXJkLCAwKTsKKworCQlkYXRhLmJsa3N6ID0gNTEyOworCQlkYXRhLmJsb2NrcyA9IDE7CisJCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOworCQlkYXRhLnNnID0gJnNnOworCQlkYXRhLnNnX2xlbiA9IDE7CisKKwkJbWVtc2V0KCZtcnEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX3JlcXVlc3QpKTsKKworCQltcnEuY21kID0gJmNtZDsKKwkJbXJxLmRhdGEgPSAmZGF0YTsKKworCQlzZ19pbml0X29uZSgmc2csIGV4dF9jc2QsIDUxMik7CisKKwkJbW1jX3dhaXRfZm9yX3JlcShob3N0LCAmbXJxKTsKKworCQlpZiAoY21kLmVycm9yICE9IE1NQ19FUlJfTk9ORSB8fCBkYXRhLmVycm9yICE9IE1NQ19FUlJfTk9ORSkgeworCQkJbW1jX2NhcmRfc2V0X2RlYWQoY2FyZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAoZXh0X2NzZFtFWFRfQ1NEX0NBUkRfVFlQRV0pIHsKKwkJY2FzZSBFWFRfQ1NEX0NBUkRfVFlQRV81MiB8IEVYVF9DU0RfQ0FSRF9UWVBFXzI2OgorCQkJY2FyZC0+ZXh0X2NzZC5oc19tYXhfZHRyID0gNTIwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSBFWFRfQ1NEX0NBUkRfVFlQRV8yNjoKKwkJCWNhcmQtPmV4dF9jc2QuaHNfbWF4X2R0ciA9IDI2MDAwMDAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBNTUMgdjQgc3BlYyBzYXlzIHRoaXMgY2Fubm90IGhhcHBlbiAqLworCQkJcHJpbnRrKCIlczogY2FyZCBpcyBtbWMgdjQgYnV0IGRvZXNuJ3Qgc3VwcG9ydCAiCisJCQkgICAgICAgImFueSBoaWdoLXNwZWVkIG1vZGVzLlxuIiwKKwkJCQltbWNfaG9zdG5hbWUoY2FyZC0+aG9zdCkpOworCQkJbW1jX2NhcmRfc2V0X2JhZChjYXJkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQWN0aXZhdGUgaGlnaHNwZWVkIHN1cHBvcnQuICovCisJCWNtZC5vcGNvZGUgPSBNTUNfU1dJVENIOworCQljbWQuYXJnID0gKE1NQ19TV0lUQ0hfTU9ERV9XUklURV9CWVRFIDw8IDI0KSB8CisJCQkgIChFWFRfQ1NEX0hTX1RJTUlORyA8PCAxNikgfAorCQkJICAoMSA8PCA4KSB8CisJCQkgIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUw7CisJCWNtZC5mbGFncyA9IE1NQ19SU1BfUjFCIHwgTU1DX0NNRF9BQzsKKworCQllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGhvc3QsICZjbWQsIENNRF9SRVRSSUVTKTsKKwkJaWYgKGVyciAhPSBNTUNfRVJSX05PTkUpIHsKKwkJCXByaW50aygiJXM6IGZhaWxlZCB0byBzd2l0Y2ggY2FyZCB0byBtbWMgdjQgIgorCQkJICAgICAgICJoaWdoLXNwZWVkIG1vZGUuXG4iLAorCQkJICAgICAgIG1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1tY19jYXJkX3NldF9oaWdoc3BlZWQoY2FyZCk7CisKKwkJLyogQ2hlY2sgZm9yIGhvc3Qgc3VwcG9ydCBmb3Igd2lkZS1idXMgbW9kZXMuICovCisJCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQXzRfQklUX0RBVEEpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEFjdGl2YXRlIDQtYml0IHN1cHBvcnQuICovCisJCWNtZC5vcGNvZGUgPSBNTUNfU1dJVENIOworCQljbWQuYXJnID0gKE1NQ19TV0lUQ0hfTU9ERV9XUklURV9CWVRFIDw8IDI0KSB8CisJCQkgIChFWFRfQ1NEX0JVU19XSURUSCA8PCAxNikgfAorCQkJICAoRVhUX0NTRF9CVVNfV0lEVEhfNCA8PCA4KSB8CisJCQkgIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUw7CisJCWNtZC5mbGFncyA9IE1NQ19SU1BfUjFCIHwgTU1DX0NNRF9BQzsKKworCQllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGhvc3QsICZjbWQsIENNRF9SRVRSSUVTKTsKKwkJaWYgKGVyciAhPSBNTUNfRVJSX05PTkUpIHsKKwkJCXByaW50aygiJXM6IGZhaWxlZCB0byBzd2l0Y2ggY2FyZCB0byAiCisJCQkgICAgICAgIm1tYyB2NCA0LWJpdCBidXMgbW9kZS5cbiIsCisJCQkgICAgICAgbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaG9zdC0+aW9zLmJ1c193aWR0aCA9IE1NQ19CVVNfV0lEVEhfNDsKKwl9CisKKwlrZnJlZShleHRfY3NkKTsKKworCW1tY19kZXNlbGVjdF9jYXJkcyhob3N0KTsKK30KKwogc3RhdGljIHZvaWQgbW1jX3JlYWRfc2NycyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7CiAJaW50IGVycjsKQEAgLTEwMjUsMTQgKzExNTcsMTMzIEBACiAJbW1jX2Rlc2VsZWN0X2NhcmRzKGhvc3QpOwogfQogCitzdGF0aWMgdm9pZCBtbWNfcmVhZF9zd2l0Y2hfY2FwcyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7CisJc3RydWN0IG1tY19yZXF1ZXN0IG1ycTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOworCXN0cnVjdCBtbWNfZGF0YSBkYXRhOworCXVuc2lnbmVkIGNoYXIgKnN0YXR1czsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzdGF0dXMgPSBrbWFsbG9jKDY0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXR1cykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkJInJlYWRpbmcgc3dpdGNoIGNhcGFiaWxpdGllcy5cbiIsCisJCQltbWNfaG9zdG5hbWUoaG9zdCkpOworCQlyZXR1cm47CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmaG9zdC0+Y2FyZHMsIG5vZGUpIHsKKwkJaWYgKGNhcmQtPnN0YXRlICYgKE1NQ19TVEFURV9ERUFEfE1NQ19TVEFURV9QUkVTRU5UKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIW1tY19jYXJkX3NkKGNhcmQpKQorCQkJY29udGludWU7CisJCWlmIChjYXJkLT5zY3Iuc2RhX3ZzbiA8IFNDUl9TUEVDX1ZFUl8xKQorCQkJY29udGludWU7CisKKwkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGhvc3QsIGNhcmQpOworCQlpZiAoZXJyICE9IE1NQ19FUlJfTk9ORSkgeworCQkJbW1jX2NhcmRfc2V0X2RlYWQoY2FyZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1lbXNldCgmY21kLCAwLCBzaXplb2Yoc3RydWN0IG1tY19jb21tYW5kKSk7CisKKwkJY21kLm9wY29kZSA9IFNEX1NXSVRDSDsKKwkJY21kLmFyZyA9IDB4MDBGRkZGRjE7CisJCWNtZC5mbGFncyA9IE1NQ19SU1BfUjEgfCBNTUNfQ01EX0FEVEM7CisKKwkJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2Yoc3RydWN0IG1tY19kYXRhKSk7CisKKwkJbW1jX3NldF9kYXRhX3RpbWVvdXQoJmRhdGEsIGNhcmQsIDApOworCisJCWRhdGEuYmxrc3ogPSA2NDsKKwkJZGF0YS5ibG9ja3MgPSAxOworCQlkYXRhLmZsYWdzID0gTU1DX0RBVEFfUkVBRDsKKwkJZGF0YS5zZyA9ICZzZzsKKwkJZGF0YS5zZ19sZW4gPSAxOworCisJCW1lbXNldCgmbXJxLCAwLCBzaXplb2Yoc3RydWN0IG1tY19yZXF1ZXN0KSk7CisKKwkJbXJxLmNtZCA9ICZjbWQ7CisJCW1ycS5kYXRhID0gJmRhdGE7CisKKwkJc2dfaW5pdF9vbmUoJnNnLCBzdGF0dXMsIDY0KTsKKworCQltbWNfd2FpdF9mb3JfcmVxKGhvc3QsICZtcnEpOworCisJCWlmIChjbWQuZXJyb3IgIT0gTU1DX0VSUl9OT05FIHx8IGRhdGEuZXJyb3IgIT0gTU1DX0VSUl9OT05FKSB7CisJCQltbWNfY2FyZF9zZXRfZGVhZChjYXJkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXR1c1sxM10gJiAweDAyKQorCQkJY2FyZC0+c3dfY2Fwcy5oc19tYXhfZHRyID0gNTAwMDAwMDA7CisKKwkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsKKworCQljbWQub3Bjb2RlID0gU0RfU1dJVENIOworCQljbWQuYXJnID0gMHg4MEZGRkZGMTsKKwkJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKKworCQltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2RhdGEpKTsKKworCQltbWNfc2V0X2RhdGFfdGltZW91dCgmZGF0YSwgY2FyZCwgMCk7CisKKwkJZGF0YS5ibGtzeiA9IDY0OworCQlkYXRhLmJsb2NrcyA9IDE7CisJCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOworCQlkYXRhLnNnID0gJnNnOworCQlkYXRhLnNnX2xlbiA9IDE7CisKKwkJbWVtc2V0KCZtcnEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX3JlcXVlc3QpKTsKKworCQltcnEuY21kID0gJmNtZDsKKwkJbXJxLmRhdGEgPSAmZGF0YTsKKworCQlzZ19pbml0X29uZSgmc2csIHN0YXR1cywgNjQpOworCisJCW1tY193YWl0X2Zvcl9yZXEoaG9zdCwgJm1ycSk7CisKKwkJaWYgKGNtZC5lcnJvciAhPSBNTUNfRVJSX05PTkUgfHwgZGF0YS5lcnJvciAhPSBNTUNfRVJSX05PTkUpIHsKKwkJCW1tY19jYXJkX3NldF9kZWFkKGNhcmQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoKHN0YXR1c1sxNl0gJiAweEYpICE9IDEpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQcm9ibGVtIHN3aXRjaGluZyBjYXJkICIKKwkJCQkiaW50byBoaWdoLXNwZWVkIG1vZGUhXG4iLAorCQkJCW1tY19ob3N0bmFtZShob3N0KSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW1tY19jYXJkX3NldF9oaWdoc3BlZWQoY2FyZCk7CisJfQorCisJa2ZyZWUoc3RhdHVzKTsKKworCW1tY19kZXNlbGVjdF9jYXJkcyhob3N0KTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBtbWNfY2FsY3VsYXRlX2Nsb2NrKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQ7CiAJdW5zaWduZWQgaW50IG1heF9kdHIgPSBob3N0LT5mX21heDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FyZCwgJmhvc3QtPmNhcmRzLCBub2RlKQotCQlpZiAoIW1tY19jYXJkX2RlYWQoY2FyZCkgJiYgbWF4X2R0ciA+IGNhcmQtPmNzZC5tYXhfZHRyKQotCQkJbWF4X2R0ciA9IGNhcmQtPmNzZC5tYXhfZHRyOworCQlpZiAoIW1tY19jYXJkX2RlYWQoY2FyZCkpIHsKKwkJCWlmIChtbWNfY2FyZF9oaWdoc3BlZWQoY2FyZCkgJiYgbW1jX2NhcmRfc2QoY2FyZCkpIHsKKwkJCQlpZiAobWF4X2R0ciA+IGNhcmQtPnN3X2NhcHMuaHNfbWF4X2R0cikKKwkJCQkJbWF4X2R0ciA9IGNhcmQtPnN3X2NhcHMuaHNfbWF4X2R0cjsKKwkJCX0gZWxzZSBpZiAobW1jX2NhcmRfaGlnaHNwZWVkKGNhcmQpICYmICFtbWNfY2FyZF9zZChjYXJkKSkgeworCQkJCWlmIChtYXhfZHRyID4gY2FyZC0+ZXh0X2NzZC5oc19tYXhfZHRyKQorCQkJCQltYXhfZHRyID0gY2FyZC0+ZXh0X2NzZC5oc19tYXhfZHRyOworCQkJfSBlbHNlIGlmIChtYXhfZHRyID4gY2FyZC0+Y3NkLm1heF9kdHIpIHsKKwkJCQltYXhfZHRyID0gY2FyZC0+Y3NkLm1heF9kdHI7CisJCQl9CisJCX0KIAogCXByX2RlYnVnKCIlczogc2VsZWN0ZWQgJWQuJTAzZE1IeiB0cmFuc2ZlciByYXRlXG4iLAogCQkgbW1jX2hvc3RuYW1lKGhvc3QpLApAQCAtMTE1MCw4ICsxNDAxLDExIEBACiAKIAltbWNfcmVhZF9jc2RzKGhvc3QpOwogCi0JaWYgKGhvc3QtPm1vZGUgPT0gTU1DX01PREVfU0QpCisJaWYgKGhvc3QtPm1vZGUgPT0gTU1DX01PREVfU0QpIHsKIAkJbW1jX3JlYWRfc2Nycyhob3N0KTsKKwkJbW1jX3JlYWRfc3dpdGNoX2NhcHMoaG9zdCk7CisJfSBlbHNlCisJCW1tY19wcm9jZXNzX2V4dF9jc2RzKGhvc3QpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY19ibG9jay5jIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKaW5kZXggZjkwMjdjOC4uODc3MTM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAltZC0+dXNhZ2UtLTsKIAlpZiAobWQtPnVzYWdlID09IDApIHsKIAkJcHV0X2Rpc2sobWQtPmRpc2spOwotCQltbWNfY2xlYW51cF9xdWV1ZSgmbWQtPnF1ZXVlKTsKIAkJa2ZyZWUobWQpOwogCX0KIAltdXRleF91bmxvY2soJm9wZW5fbG9jayk7CkBAIC0yMjUsMTAgKzIyNCwxMCBAQAogCXN0cnVjdCBtbWNfYmxrX2RhdGEgKm1kID0gbXEtPmRhdGE7CiAJc3RydWN0IG1tY19jYXJkICpjYXJkID0gbWQtPnF1ZXVlLmNhcmQ7CiAJc3RydWN0IG1tY19ibGtfcmVxdWVzdCBicnE7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMTsKIAogCWlmIChtbWNfY2FyZF9jbGFpbV9ob3N0KGNhcmQpKQotCQlnb3RvIGNtZF9lcnI7CisJCWdvdG8gZmx1c2hfcXVldWU7CiAKIAlkbyB7CiAJCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQ7CkBAIC0zNDUsOCArMzQ0LDYgQEAKIAlyZXR1cm4gMTsKIAogIGNtZF9lcnI6Ci0JcmV0ID0gMTsKLQogIAkvKgogIAkgKiBJZiB0aGlzIGlzIGFuIFNEIGNhcmQgYW5kIHdlJ3JlIHdyaXRpbmcsIHdlIGNhbiBmaXJzdAogIAkgKiBtYXJrIHRoZSBrbm93biBnb29kIHNlY3RvcnMgYXMgb2suCkBAIC0zODAsNiArMzc3LDcgQEAKIAogCW1tY19jYXJkX3JlbGVhc2VfaG9zdChjYXJkKTsKIAorZmx1c2hfcXVldWU6CiAJc3Bpbl9sb2NrX2lycSgmbWQtPmxvY2spOwogCXdoaWxlIChyZXQpIHsKIAkJcmV0ID0gZW5kX3RoYXRfcmVxdWVzdF9jaHVuayhyZXEsIDAsCkBAIC01NTMsMTIgKzU1MSwxMSBAQAogCWlmIChtZCkgewogCQlpbnQgZGV2aWR4OwogCisJCS8qIFN0b3AgbmV3IHJlcXVlc3RzIGZyb20gZ2V0dGluZyBpbnRvIHRoZSBxdWV1ZSAqLwogCQlkZWxfZ2VuZGlzayhtZC0+ZGlzayk7CiAKLQkJLyoKLQkJICogSSB0aGluayB0aGlzIGlzIG5lZWRlZC4KLQkJICovCi0JCW1kLT5kaXNrLT5xdWV1ZSA9IE5VTEw7CisJCS8qIFRoZW4gZmx1c2ggb3V0IGFueSBhbHJlYWR5IGluIHRoZXJlICovCisJCW1tY19jbGVhbnVwX3F1ZXVlKCZtZC0+cXVldWUpOwogCiAJCWRldmlkeCA9IG1kLT5kaXNrLT5maXJzdF9taW5vciA+PiBNTUNfU0hJRlQ7CiAJCV9fY2xlYXJfYml0KGRldmlkeCwgZGV2X3VzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWNfcXVldWUuYyBiL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5jCmluZGV4IDYxYTFkZTguLmExNzQyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5jCkBAIC0xMCwxMyArMTAsMTMgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlICJtbWNfcXVldWUuaCIKIAotI2RlZmluZSBNTUNfUVVFVUVfRVhJVAkJKDEgPDwgMCkKLSNkZWZpbmUgTU1DX1FVRVVFX1NVU1BFTkRFRAkoMSA8PCAxKQorI2RlZmluZSBNTUNfUVVFVUVfU1VTUEVOREVECSgxIDw8IDApCiAKIC8qCiAgKiBQcmVwYXJlIGEgTU1DIHJlcXVlc3QuICBFc3NlbnRpYWxseSwgdGhpcyBtZWFucyBwYXNzaW5nIHRoZQpAQCAtNTksNyArNTksNiBAQAogewogCXN0cnVjdCBtbWNfcXVldWUgKm1xID0gZDsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IG1xLT5xdWV1ZTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAogCS8qCiAJICogU2V0IGlvdGhyZWFkIHRvIGVuc3VyZSB0aGF0IHdlIGFyZW4ndCBwdXQgdG8gc2xlZXAgYnkKQEAgLTY3LDEyICs2Niw3IEBACiAJICovCiAJY3VycmVudC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0N8UEZfTk9GUkVFWkU7CiAKLQlkYWVtb25pemUoIm1tY3FkIik7Ci0KLQljb21wbGV0ZSgmbXEtPnRocmVhZF9jb21wbGV0ZSk7Ci0KIAlkb3duKCZtcS0+dGhyZWFkX3NlbSk7Ci0JYWRkX3dhaXRfcXVldWUoJm1xLT50aHJlYWRfd3EsICZ3YWl0KTsKIAlkbyB7CiAJCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBOVUxMOwogCkBAIC04NCw3ICs3OCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAogCQlpZiAoIXJlcSkgewotCQkJaWYgKG1xLT5mbGFncyAmIE1NQ19RVUVVRV9FWElUKQorCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCQlicmVhazsKIAkJCXVwKCZtcS0+dGhyZWFkX3NlbSk7CiAJCQlzY2hlZHVsZSgpOwpAQCAtOTUsMTAgKzg5LDggQEAKIAogCQltcS0+aXNzdWVfZm4obXEsIHJlcSk7CiAJfSB3aGlsZSAoMSk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJm1xLT50aHJlYWRfd3EsICZ3YWl0KTsKIAl1cCgmbXEtPnRocmVhZF9zZW0pOwogCi0JY29tcGxldGVfYW5kX2V4aXQoJm1xLT50aHJlYWRfY29tcGxldGUsIDApOwogCXJldHVybiAwOwogfQogCkBAIC0xMTEsOSArMTAzLDIyIEBACiBzdGF0aWMgdm9pZCBtbWNfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEpCiB7CiAJc3RydWN0IG1tY19xdWV1ZSAqbXEgPSBxLT5xdWV1ZWRhdGE7CisJc3RydWN0IHJlcXVlc3QgKnJlcTsKKwlpbnQgcmV0OworCisJaWYgKCFtcSkgeworCQlwcmludGsoS0VSTl9FUlIgIk1NQzoga2lsbGluZyByZXF1ZXN0cyBmb3IgZGVhZCBxdWV1ZVxuIik7CisJCXdoaWxlICgocmVxID0gZWx2X25leHRfcmVxdWVzdChxKSkgIT0gTlVMTCkgeworCQkJZG8geworCQkJCXJldCA9IGVuZF90aGF0X3JlcXVlc3RfY2h1bmsocmVxLCAwLAorCQkJCQlyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA8PCA5KTsKKwkJCX0gd2hpbGUgKHJldCk7CisJCX0KKwkJcmV0dXJuOworCX0KIAogCWlmICghbXEtPnJlcSkKLQkJd2FrZV91cCgmbXEtPnRocmVhZF93cSk7CisJCXdha2VfdXBfcHJvY2VzcyhtcS0+dGhyZWFkKTsKIH0KIAogLyoqCkBAIC0xNTIsMzYgKzE1Nyw0MCBAQAogCQkJIEdGUF9LRVJORUwpOwogCWlmICghbXEtPnNnKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBjbGVhbnVwX3F1ZXVlOwogCX0KIAotCWluaXRfY29tcGxldGlvbigmbXEtPnRocmVhZF9jb21wbGV0ZSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmbXEtPnRocmVhZF93cSk7CiAJaW5pdF9NVVRFWCgmbXEtPnRocmVhZF9zZW0pOwogCi0JcmV0ID0ga2VybmVsX3RocmVhZChtbWNfcXVldWVfdGhyZWFkLCBtcSwgQ0xPTkVfS0VSTkVMKTsKLQlpZiAocmV0ID49IDApIHsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmbXEtPnRocmVhZF9jb21wbGV0ZSk7Ci0JCWluaXRfY29tcGxldGlvbigmbXEtPnRocmVhZF9jb21wbGV0ZSk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OworCW1xLT50aHJlYWQgPSBrdGhyZWFkX3J1bihtbWNfcXVldWVfdGhyZWFkLCBtcSwgIm1tY3FkIik7CisJaWYgKElTX0VSUihtcS0+dGhyZWFkKSkgeworCQlyZXQgPSBQVFJfRVJSKG1xLT50aHJlYWQpOworCQlnb3RvIGZyZWVfc2c7CiAJfQogCi0gY2xlYW51cDoKKwlyZXR1cm4gMDsKKworIGZyZWVfc2c6CiAJa2ZyZWUobXEtPnNnKTsKIAltcS0+c2cgPSBOVUxMOwotCisgY2xlYW51cF9xdWV1ZToKIAlibGtfY2xlYW51cF9xdWV1ZShtcS0+cXVldWUpOwotIG91dDoKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChtbWNfaW5pdF9xdWV1ZSk7CiAKIHZvaWQgbW1jX2NsZWFudXBfcXVldWUoc3RydWN0IG1tY19xdWV1ZSAqbXEpCiB7Ci0JbXEtPmZsYWdzIHw9IE1NQ19RVUVVRV9FWElUOwotCXdha2VfdXAoJm1xLT50aHJlYWRfd3EpOwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1xLT50aHJlYWRfY29tcGxldGUpOworCXJlcXVlc3RfcXVldWVfdCAqcSA9IG1xLT5xdWV1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTWFyayB0aGF0IHdlIHNob3VsZCBzdGFydCB0aHJvd2luZyBvdXQgc3RyYWdnbGVycyAqLworCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwlxLT5xdWV1ZWRhdGEgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOworCisJLyogVGhlbiB0ZXJtaW5hdGUgb3VyIHdvcmtlciB0aHJlYWQgKi8KKwlrdGhyZWFkX3N0b3AobXEtPnRocmVhZCk7CiAKIAlrZnJlZShtcS0+c2cpOwogCW1xLT5zZyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWNfcXVldWUuaCBiL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5oCmluZGV4IDcxODJkMmYuLmM5ZjEzOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5oCisrKyBiL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5oCkBAIC02LDggKzYsNyBAQAogCiBzdHJ1Y3QgbW1jX3F1ZXVlIHsKIAlzdHJ1Y3QgbW1jX2NhcmQJCSpjYXJkOwotCXN0cnVjdCBjb21wbGV0aW9uCXRocmVhZF9jb21wbGV0ZTsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl0aHJlYWRfd3E7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CiAJc3RydWN0IHNlbWFwaG9yZQl0aHJlYWRfc2VtOwogCXVuc2lnbmVkIGludAkJZmxhZ3M7CiAJc3RydWN0IHJlcXVlc3QJCSpyZXE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9tbWNpLmMgYi9kcml2ZXJzL21tYy9tbWNpLmMKaW5kZXggODI4NTAzYy4uZTliODBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL21tY2kuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBtbWNpX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY2lfb3BzID0gewogCS5yZXF1ZXN0CT0gbW1jaV9yZXF1ZXN0LAogCS5zZXRfaW9zCT0gbW1jaV9zZXRfaW9zLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL29tYXAuYyBiL2RyaXZlcnMvbW1jL29tYXAuYwppbmRleCBkNTkzZWYzLi40MzVkMzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvb21hcC5jCkBAIC0zOCw3ICszOCw1NyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KICNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgogCi0jaW5jbHVkZSAib21hcC5oIgorI2RlZmluZQlPTUFQX01NQ19SRUdfQ01ECTB4MDAKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0FSR0wJMHgwNAorI2RlZmluZQlPTUFQX01NQ19SRUdfQVJHSAkweDA4CisjZGVmaW5lCU9NQVBfTU1DX1JFR19DT04JMHgwYworI2RlZmluZQlPTUFQX01NQ19SRUdfU1RBVAkweDEwCisjZGVmaW5lCU9NQVBfTU1DX1JFR19JRQkJMHgxNAorI2RlZmluZQlPTUFQX01NQ19SRUdfQ1RPCTB4MTgKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0RUTwkweDFjCisjZGVmaW5lCU9NQVBfTU1DX1JFR19EQVRBCTB4MjAKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0JMRU4JMHgyNAorI2RlZmluZQlPTUFQX01NQ19SRUdfTkJMSwkweDI4CisjZGVmaW5lCU9NQVBfTU1DX1JFR19CVUYJMHgyYworI2RlZmluZSBPTUFQX01NQ19SRUdfU0RJTwkweDM0CisjZGVmaW5lCU9NQVBfTU1DX1JFR19SRVYJMHgzYworI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQMAkweDQwCisjZGVmaW5lCU9NQVBfTU1DX1JFR19SU1AxCTB4NDQKKyNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDIJMHg0OAorI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQMwkweDRjCisjZGVmaW5lCU9NQVBfTU1DX1JFR19SU1A0CTB4NTAKKyNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDUJMHg1NAorI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQNgkweDU4CisjZGVmaW5lCU9NQVBfTU1DX1JFR19SU1A3CTB4NWMKKyNkZWZpbmUJT01BUF9NTUNfUkVHX0lPU1IJMHg2MAorI2RlZmluZQlPTUFQX01NQ19SRUdfU1lTQwkweDY0CisjZGVmaW5lCU9NQVBfTU1DX1JFR19TWVNTCTB4NjgKKworI2RlZmluZQlPTUFQX01NQ19TVEFUX0NBUkRfRVJSCQkoMSA8PCAxNCkKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9DQVJEX0lSUQkJKDEgPDwgMTMpCisjZGVmaW5lCU9NQVBfTU1DX1NUQVRfT0NSX0JVU1kJCSgxIDw8IDEyKQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0FfRU1QVFkJCSgxIDw8IDExKQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0FfRlVMTAkJKDEgPDwgMTApCisjZGVmaW5lCU9NQVBfTU1DX1NUQVRfQ01EX0NSQwkJKDEgPDwgIDgpCisjZGVmaW5lCU9NQVBfTU1DX1NUQVRfQ01EX1RPVVQJCSgxIDw8ICA3KQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0RBVEFfQ1JDCQkoMSA8PCAgNikKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9EQVRBX1RPVVQJCSgxIDw8ICA1KQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0VORF9CVVNZCQkoMSA8PCAgNCkKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9FTkRfT0ZfREFUQQkoMSA8PCAgMykKKyNkZWZpbmUJT01BUF9NTUNfU1RBVF9DQVJEX0JVU1kJCSgxIDw8ICAyKQorI2RlZmluZQlPTUFQX01NQ19TVEFUX0VORF9PRl9DTUQJKDEgPDwgIDApCisKKyNkZWZpbmUgT01BUF9NTUNfUkVBRChob3N0LCByZWcpCV9fcmF3X3JlYWR3KChob3N0KS0+dmlydF9iYXNlICsgT01BUF9NTUNfUkVHXyMjcmVnKQorI2RlZmluZSBPTUFQX01NQ19XUklURShob3N0LCByZWcsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoaG9zdCktPnZpcnRfYmFzZSArIE9NQVBfTU1DX1JFR18jI3JlZykKKworLyoKKyAqIENvbW1hbmQgdHlwZXMKKyAqLworI2RlZmluZSBPTUFQX01NQ19DTURUWVBFX0JDCTAKKyNkZWZpbmUgT01BUF9NTUNfQ01EVFlQRV9CQ1IJMQorI2RlZmluZSBPTUFQX01NQ19DTURUWVBFX0FDCTIKKyNkZWZpbmUgT01BUF9NTUNfQ01EVFlQRV9BRFRDCTMKKwogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJtbWNpLW9tYXAiCiAjZGVmaW5lIFJTUF9UWVBFKHgpCSgoeCkgJiB+KE1NQ19SU1BfQlVTWXxNTUNfUlNQX09QQ09ERSkpCkBAIC02MCw4ICsxMTAsOSBAQAogCXVuc2lnbmVkIGNoYXIJCWlkOyAvKiAxNnh4IGNoaXBzIGhhdmUgMiBNTUMgYmxvY2tzICovCiAJc3RydWN0IGNsayAqCQlpY2xrOwogCXN0cnVjdCBjbGsgKgkJZmNsazsKLQlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7Ci0Jdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSptZW1fcmVzOworCXZvaWQgX19pb21lbQkJKnZpcnRfYmFzZTsKKwl1bnNpZ25lZCBpbnQJCXBoeXNfYmFzZTsKIAlpbnQJCQlpcnE7CiAJdW5zaWduZWQgY2hhcgkJYnVzX21vZGU7CiAJdW5zaWduZWQgY2hhcgkJaHdfYnVzX21vZGU7CkBAIC0xOTEsMTYgKzI0MiwxNiBAQAogCiAJY2xrX2VuYWJsZShob3N0LT5mY2xrKTsKIAotCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENUTywgMjAwKTsKLQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBBUkdMLCBjbWQtPmFyZyAmIDB4ZmZmZik7Ci0JT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQVJHSCwgY21kLT5hcmcgPj4gMTYpOwotCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIElFLAorCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENUTywgMjAwKTsKKwlPTUFQX01NQ19XUklURShob3N0LCBBUkdMLCBjbWQtPmFyZyAmIDB4ZmZmZik7CisJT01BUF9NTUNfV1JJVEUoaG9zdCwgQVJHSCwgY21kLT5hcmcgPj4gMTYpOworCU9NQVBfTU1DX1dSSVRFKGhvc3QsIElFLAogCQkgICAgICAgT01BUF9NTUNfU1RBVF9BX0VNUFRZICAgIHwgT01BUF9NTUNfU1RBVF9BX0ZVTEwgICAgfAogCQkgICAgICAgT01BUF9NTUNfU1RBVF9DTURfQ1JDICAgIHwgT01BUF9NTUNfU1RBVF9DTURfVE9VVCAgfAogCQkgICAgICAgT01BUF9NTUNfU1RBVF9EQVRBX0NSQyAgIHwgT01BUF9NTUNfU1RBVF9EQVRBX1RPVVQgfAogCQkgICAgICAgT01BUF9NTUNfU1RBVF9FTkRfT0ZfQ01EIHwgT01BUF9NTUNfU1RBVF9DQVJEX0VSUiAgfAogCQkgICAgICAgT01BUF9NTUNfU1RBVF9FTkRfT0ZfREFUQSk7Ci0JT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ01ELCBjbWRyZWcpOworCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENNRCwgY21kcmVnKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI5NiwyMiArMzQ3LDIyIEBACiAJCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKIAkJCS8qIHJlc3BvbnNlIHR5cGUgMiAqLwogCQkJY21kLT5yZXNwWzNdID0KLQkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDApIHwKLQkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1AxKSA8PCAxNik7CisJCQkJT01BUF9NTUNfUkVBRChob3N0LCBSU1AwKSB8CisJCQkJKE9NQVBfTU1DX1JFQUQoaG9zdCwgUlNQMSkgPDwgMTYpOwogCQkJY21kLT5yZXNwWzJdID0KLQkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDIpIHwKLQkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1AzKSA8PCAxNik7CisJCQkJT01BUF9NTUNfUkVBRChob3N0LCBSU1AyKSB8CisJCQkJKE9NQVBfTU1DX1JFQUQoaG9zdCwgUlNQMykgPDwgMTYpOwogCQkJY21kLT5yZXNwWzFdID0KLQkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDQpIHwKLQkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A1KSA8PCAxNik7CisJCQkJT01BUF9NTUNfUkVBRChob3N0LCBSU1A0KSB8CisJCQkJKE9NQVBfTU1DX1JFQUQoaG9zdCwgUlNQNSkgPDwgMTYpOwogCQkJY21kLT5yZXNwWzBdID0KLQkJCQlPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDYpIHwKLQkJCQkoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A3KSA8PCAxNik7CisJCQkJT01BUF9NTUNfUkVBRChob3N0LCBSU1A2KSB8CisJCQkJKE9NQVBfTU1DX1JFQUQoaG9zdCwgUlNQNykgPDwgMTYpOwogCQl9IGVsc2UgewogCQkJLyogcmVzcG9uc2UgdHlwZXMgMSwgMWIsIDMsIDQsIDUsIDYgKi8KIAkJCWNtZC0+cmVzcFswXSA9Ci0JCQkJT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A2KSB8Ci0JCQkJKE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgUlNQNykgPDwgMTYpOworCQkJCU9NQVBfTU1DX1JFQUQoaG9zdCwgUlNQNikgfAorCQkJCShPTUFQX01NQ19SRUFEKGhvc3QsIFJTUDcpIDw8IDE2KTsKIAkJfQogCX0KIApAQCAtMzU0LDkgKzQwNSw5IEBACiAJaG9zdC0+ZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IG47CiAKIAlpZiAod3JpdGUpIHsKLQkJX19yYXdfd3JpdGVzdyhob3N0LT5iYXNlICsgT01BUF9NTUNfUkVHX0RBVEEsIGhvc3QtPmJ1ZmZlciwgbik7CisJCV9fcmF3X3dyaXRlc3coaG9zdC0+dmlydF9iYXNlICsgT01BUF9NTUNfUkVHX0RBVEEsIGhvc3QtPmJ1ZmZlciwgbik7CiAJfSBlbHNlIHsKLQkJX19yYXdfcmVhZHN3KGhvc3QtPmJhc2UgKyBPTUFQX01NQ19SRUdfREFUQSwgaG9zdC0+YnVmZmVyLCBuKTsKKwkJX19yYXdfcmVhZHN3KGhvc3QtPnZpcnRfYmFzZSArIE9NQVBfTU1DX1JFR19EQVRBLCBob3N0LT5idWZmZXIsIG4pOwogCX0KIH0KIApAQCAtMzg2LDExICs0MzcsMTEgQEAKIAlpbnQgdHJhbnNmZXJfZXJyb3I7CiAKIAlpZiAoaG9zdC0+Y21kID09IE5VTEwgJiYgaG9zdC0+ZGF0YSA9PSBOVUxMKSB7Ci0JCXN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCk7CisJCXN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgU1RBVCk7CiAJCWRldl9pbmZvKG1tY19kZXYoaG9zdC0+bW1jKSwic3B1cmlvdXMgaXJxIDB4JTA0eFxuIiwgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULCBzdGF0dXMpOwotCQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIDApOworCQkJT01BUF9NTUNfV1JJVEUoaG9zdCwgU1RBVCwgc3RhdHVzKTsKKwkJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIElFLCAwKTsKIAkJfQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQpAQCAtMzk5LDggKzQ1MCw4IEBACiAJZW5kX3RyYW5zZmVyID0gMDsKIAl0cmFuc2Zlcl9lcnJvciA9IDA7CiAKLQl3aGlsZSAoKHN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1RBVCkpICE9IDApIHsKLQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgc3RhdHVzKTsKKwl3aGlsZSAoKHN0YXR1cyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgU1RBVCkpICE9IDApIHsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgU1RBVCwgc3RhdHVzKTsKICNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCiAJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTU1DIElSUSAlMDR4IChDTUQgJWQpOiAiLAogCQkJc3RhdHVzLCBob3N0LT5jbWQgIT0gTlVMTCA/IGhvc3QtPmNtZC0+b3Bjb2RlIDogLTEpOwpAQCAtNDcwLDggKzUyMSw4IEBACiAKIAkJaWYgKHN0YXR1cyAmIE9NQVBfTU1DX1NUQVRfQ0FSRF9FUlIpIHsKIAkJCWlmIChob3N0LT5jbWQgJiYgaG9zdC0+Y21kLT5vcGNvZGUgPT0gTU1DX1NUT1BfVFJBTlNNSVNTSU9OKSB7Ci0JCQkJdTMyIHJlc3BvbnNlID0gT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBSU1A2KQotCQkJCQl8IChPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFJTUDcpIDw8IDE2KTsKKwkJCQl1MzIgcmVzcG9uc2UgPSBPTUFQX01NQ19SRUFEKGhvc3QsIFJTUDYpCisJCQkJCXwgKE9NQVBfTU1DX1JFQUQoaG9zdCwgUlNQNykgPDwgMTYpOwogCQkJCS8qIFNUT1Agc29tZXRpbWVzIHNldHMgbXVzdC1pZ25vcmUgYml0cyAqLwogCQkJCWlmICghKHJlc3BvbnNlICYgKFIxX0NDX0VSUk9SCiAJCQkJCQkJCXwgUjFfSUxMRUdBTF9DT01NQU5ECkBAIC01MzAsMTIgKzU4MSw2IEBACiAJc2NoZWR1bGVfd29yaygmaG9zdC0+c3dpdGNoX3dvcmspOwogfQogCi0vKiBGSVhNRTogSGFuZGxlIGNhcmQgaW5zZXJ0aW9uIGFuZCByZW1vdmFsIHByb3Blcmx5LiBNYXliZSB1c2UgYSBtYXNrCi0gKiBmb3IgTU1DIHN0YXRlPyAqLwotc3RhdGljIHZvaWQgbW1jX29tYXBfc3dpdGNoX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSwgdTggbW1jX21hc2spCi17Ci19Ci0KIHN0YXRpYyB2b2lkIG1tY19vbWFwX3N3aXRjaF9oYW5kbGVyKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QgPSAoc3RydWN0IG1tY19vbWFwX2hvc3QgKikgZGF0YTsKQEAgLTU4MSw3ICs2MjYsNyBAQAogCWludCBkc3RfcG9ydCA9IDA7CiAJaW50IHN5bmNfZGV2ID0gMDsKIAotCWRhdGFfYWRkciA9IGlvX3YycCgodTMyKSBob3N0LT5iYXNlKSArIE9NQVBfTU1DX1JFR19EQVRBOworCWRhdGFfYWRkciA9IGhvc3QtPnBoeXNfYmFzZSArIE9NQVBfTU1DX1JFR19EQVRBOwogCWZyYW1lID0gZGF0YS0+Ymxrc3o7CiAJY291bnQgPSBzZ19kbWFfbGVuKHNnKTsKIApAQCAtNjQyLDcgKzY4Nyw3IEBACiAJLyogTWF4IGxpbWl0IGZvciBETUEgZnJhbWUgY291bnQgaXMgMHhmZmZmICovCiAJQlVHX09OKGNvdW50ID4gMHhmZmZmKTsKIAotCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJVRiwgYnVmKTsKKwlPTUFQX01NQ19XUklURShob3N0LCBCVUYsIGJ1Zik7CiAJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhkbWFfY2gsIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYsCiAJCQkJICAgICBmcmFtZSwgY291bnQsIE9NQVBfRE1BX1NZTkNfRlJBTUUsCiAJCQkJICAgICBzeW5jX2RldiwgMCk7CkBAIC03MjcsMTEgKzc3MiwxMSBAQAogewogCXUxNiByZWc7CiAKLQlyZWcgPSBPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFNESU8pOworCXJlZyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgU0RJTyk7CiAJcmVnICY9IH4oMSA8PCA1KTsKLQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBTRElPLCByZWcpOworCU9NQVBfTU1DX1dSSVRFKGhvc3QsIFNESU8sIHJlZyk7CiAJLyogU2V0IG1heGltdW0gdGltZW91dCAqLwotCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENUTywgMHhmZik7CisJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ1RPLCAweGZmKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9kYXRhX3RpbWVvdXQoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqcmVxKQpAQCAtNzQ1LDE0ICs3OTAsMTQgQEAKIAl0aW1lb3V0ID0gcmVxLT5kYXRhLT50aW1lb3V0X2Nsa3MgKyByZXEtPmRhdGEtPnRpbWVvdXRfbnMgLyA1MDA7CiAKIAkvKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHVzZSB0aW1lb3V0IG11bHRpcGxpZXIgcmVnaXN0ZXIgKi8KLQlyZWcgPSBPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIFNESU8pOworCXJlZyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgU0RJTyk7CiAJaWYgKHRpbWVvdXQgPiAweGZmZmYpIHsKIAkJcmVnIHw9ICgxIDw8IDUpOwogCQl0aW1lb3V0IC89IDEwMjQ7CiAJfSBlbHNlCiAJCXJlZyAmPSB+KDEgPDwgNSk7Ci0JT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgU0RJTywgcmVnKTsKLQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBEVE8sIHRpbWVvdXQpOworCU9NQVBfTU1DX1dSSVRFKGhvc3QsIFNESU8sIHJlZyk7CisJT01BUF9NTUNfV1JJVEUoaG9zdCwgRFRPLCB0aW1lb3V0KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTc2NCwxOSArODA5LDE4IEBACiAKIAlob3N0LT5kYXRhID0gZGF0YTsKIAlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJMRU4sIDApOwotCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBOQkxLLCAwKTsKLQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgQlVGLCAwKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQkxFTiwgMCk7CisJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIE5CTEssIDApOworCQlPTUFQX01NQ19XUklURShob3N0LCBCVUYsIDApOwogCQlob3N0LT5kbWFfaW5fdXNlID0gMDsKIAkJc2V0X2NtZF90aW1lb3V0KGhvc3QsIHJlcSk7CiAJCXJldHVybjsKIAl9CiAKLQogCWJsb2NrX3NpemUgPSBkYXRhLT5ibGtzejsKIAotCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIE5CTEssIGRhdGEtPmJsb2NrcyAtIDEpOwotCU9NQVBfTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEJMRU4sIGJsb2NrX3NpemUgLSAxKTsKKwlPTUFQX01NQ19XUklURShob3N0LCBOQkxLLCBkYXRhLT5ibG9ja3MgLSAxKTsKKwlPTUFQX01NQ19XUklURShob3N0LCBCTEVOLCBibG9ja19zaXplIC0gMSk7CiAJc2V0X2RhdGFfdGltZW91dChob3N0LCByZXEpOwogCiAJLyogY29wZSB3aXRoIGNhbGxpbmcgbGF5ZXIgY29uZnVzaW9uOyBpdCBpc3N1ZXMgInNpbmdsZQpAQCAtODE4LDcgKzg2Miw3IEBACiAKIAkvKiBSZXZlcnQgdG8gUElPPyAqLwogCWlmICghdXNlX2RtYSkgewotCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBCVUYsIDB4MWYxZik7CisJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIEJVRiwgMHgxZjFmKTsKIAkJaG9zdC0+dG90YWxfYnl0ZXNfbGVmdCA9IGRhdGEtPmJsb2NrcyAqIGJsb2NrX3NpemU7CiAJCWhvc3QtPnNnX2xlbiA9IHNnX2xlbjsKIAkJbW1jX29tYXBfc2dfdG9fYnVmKGhvc3QpOwpAQCAtODQ0LDcgKzg4OCw2IEBACiBzdGF0aWMgdm9pZCBpbm5vdmF0b3JfZnBnYV9zb2NrZXRfcG93ZXIoaW50IG9uKQogewogI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfT01BUF9JTk5PVkFUT1IpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCi0KIAlpZiAob24pIHsKIAkJZnBnYV93cml0ZShmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9QT1dFUikgfCAoMSA8PCAzKSwKIAkJICAgICBPTUFQMTUxMF9GUEdBX1BPV0VSKTsKQEAgLTg3MCw4ICs5MTMsOCBAQAogCQkJLyogR1BJTyA0IG9mIFRQUzY1MDEwIHNlbmRzIFNEX0VOIHNpZ25hbCAqLwogCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU80LCBISUdIKTsKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJCXUxNiByZWcgPSBPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7Ci0JCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIHJlZyB8ICgxIDw8IDExKSk7CisJCQl1MTYgcmVnID0gT01BUF9NTUNfUkVBRChob3N0LCBDT04pOworCQkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ09OLCByZWcgfCAoMSA8PCAxMSkpOwogCQl9IGVsc2UKIAkJCWlmIChob3N0LT5wb3dlcl9waW4gPj0gMCkKIAkJCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoaG9zdC0+cG93ZXJfcGluLCAxKTsKQEAgLTg4Myw4ICs5MjYsOCBAQAogCQllbHNlIGlmIChtYWNoaW5lX2lzX29tYXBfaDMoKSkKIAkJCXRwczY1MDEwX3NldF9ncGlvX291dF92YWx1ZShHUElPNCwgTE9XKTsKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJCXUxNiByZWcgPSBPTUFQX01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7Ci0JCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIHJlZyAmIH4oMSA8PCAxMSkpOworCQkJdTE2IHJlZyA9IE9NQVBfTU1DX1JFQUQoaG9zdCwgQ09OKTsKKwkJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIENPTiwgcmVnICYgfigxIDw8IDExKSk7CiAJCX0gZWxzZQogCQkJaWYgKGhvc3QtPnBvd2VyX3BpbiA+PSAwKQogCQkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChob3N0LT5wb3dlcl9waW4sIDApOwpAQCAtOTI2LDcgKzk2OSw3IEBACiAJY2FzZSBNTUNfUE9XRVJfVVA6CiAJY2FzZSBNTUNfUE9XRVJfT046CiAJCW1tY19vbWFwX3Bvd2VyKGhvc3QsIDEpOwotCQlkc29yIHw9IDE8PDExOworCQlkc29yIHw9IDEgPDwgMTE7CiAJCWJyZWFrOwogCX0KIApAQCAtOTQwLDE0ICs5ODMsMTQgQEAKIAkgKiB3aGljaCByZXN1bHRzIGluIHRoZSB3aGlsZSBsb29wIGJlbG93IGdldHRpbmcgc3R1Y2suCiAJICogV3JpdGluZyB0byB0aGUgQ09OIHJlZ2lzdGVyIHR3aWNlIHNlZW1zIHRvIGRvIHRoZSB0cmljay4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQotCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGRzb3IpOworCQlPTUFQX01NQ19XUklURShob3N0LCBDT04sIGRzb3IpOwogCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7CiAJCS8qIFNlbmQgY2xvY2sgY3ljbGVzLCBwb2xsIGNvbXBsZXRpb24gKi8KLQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgSUUsIDApOwotCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBTVEFULCAweGZmZmYpOwotCQlPTUFQX01NQ19XUklURShob3N0LT5iYXNlLCBDTUQsIDE8PDcpOwotCQl3aGlsZSAoMCA9PSAoT01BUF9NTUNfUkVBRChob3N0LT5iYXNlLCBTVEFUKSAmIDEpKTsKLQkJT01BUF9NTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwgMSk7CisJCU9NQVBfTU1DX1dSSVRFKGhvc3QsIElFLCAwKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgU1RBVCwgMHhmZmZmKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgQ01ELCAxIDw8IDcpOworCQl3aGlsZSAoKE9NQVBfTU1DX1JFQUQoaG9zdCwgU1RBVCkgJiAxKSA9PSAwKTsKKwkJT01BUF9NTUNfV1JJVEUoaG9zdCwgU1RBVCwgMSk7CiAJfQogCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOwogfQpAQCAtOTU5LDcgKzEwMDIsNyBAQAogCXJldHVybiBob3N0LT53cF9waW4gJiYgb21hcF9nZXRfZ3Bpb19kYXRhaW4oaG9zdC0+d3BfcGluKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbW1jX29tYXBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgbW1jX29tYXBfb3BzID0gewogCS5yZXF1ZXN0CT0gbW1jX29tYXBfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IG1tY19vbWFwX3NldF9pb3MsCiAJLmdldF9ybwkJPSBtbWNfb21hcF9nZXRfcm8sCkBAIC05NzAsMjUgKzEwMTMsMjkgQEAKIAlzdHJ1Y3Qgb21hcF9tbWNfY29uZiAqbWluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCA9IE5VTEw7Ci0Jc3RydWN0IHJlc291cmNlICpyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQgPSAwOwogCWludCBpcnE7Ci0JCi0JciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlpZiAobWluZm8gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIG1pc3NpbmdcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoIXIgfHwgaXJxIDwgMCkKKwlpZiAocmVzID09IE5VTEwgfHwgaXJxIDwgMCkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXIgPSByZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxLAotCQkJICAgICAgIHBkZXYtPm5hbWUpOwotCWlmICghcikKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKKwkJCSAgICAgICAgIHBkZXYtPm5hbWUpOworCWlmIChyZXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgbW1jX29tYXBfaG9zdCksICZwZGV2LT5kZXYpOwotCWlmICghbW1jKSB7CisJaWYgKG1tYyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OworCQlnb3RvIGVycl9mcmVlX21lbV9yZWdpb247CiAJfQogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CkBAIC0xMDAwLDEzICsxMDQ3LDEzIEBACiAJaG9zdC0+ZG1hX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgaG9zdDsKIAogCWhvc3QtPmlkID0gcGRldi0+aWQ7Ci0JaG9zdC0+cmVzID0gcjsKKwlob3N0LT5tZW1fcmVzID0gcmVzOwogCWhvc3QtPmlycSA9IGlycTsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jX2ljayIpOwogCQlpZiAoSVNfRVJSKGhvc3QtPmljbGspKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIGVycl9mcmVlX21tY19ob3N0OwogCQljbGtfZW5hYmxlKGhvc3QtPmljbGspOwogCX0KIApAQCAtMTAxNyw3ICsxMDY0LDcgQEAKIAogCWlmIChJU19FUlIoaG9zdC0+ZmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5mY2xrKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX2ZyZWVfaWNsazsKIAl9CiAKIAkvKiBSRVZJU0lUOgpAQCAtMTAzMCwxNCArMTA3NywxNSBAQAogCWhvc3QtPnVzZV9kbWEgPSAxOwogCWhvc3QtPmRtYV9jaCA9IC0xOwogCi0JaG9zdC0+aXJxID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7Ci0JaG9zdC0+YmFzZSA9ICh2b2lkIF9faW9tZW0qKUlPX0FERFJFU1Moci0+c3RhcnQpOworCWhvc3QtPmlycSA9IGlycTsKKwlob3N0LT5waHlzX2Jhc2UgPSBob3N0LT5tZW1fcmVzLT5zdGFydDsKKwlob3N0LT52aXJ0X2Jhc2UgPSAodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoaG9zdC0+cGh5c19iYXNlKTsKIAogCW1tYy0+b3BzID0gJm1tY19vbWFwX29wczsKIAltbWMtPmZfbWluID0gNDAwMDAwOwogCW1tYy0+Zl9tYXggPSAyNDAwMDAwMDsKLQltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzN8TU1DX1ZERF8zM18zNDsKLQltbWMtPmNhcHMgPSBNTUNfQ0FQX0JZVEVCTE9DSzsKKwltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCW1tYy0+Y2FwcyA9IE1NQ19DQVBfTVVMVElXUklURSB8IE1NQ19DQVBfQllURUJMT0NLOwogCiAJaWYgKG1pbmZvLT53aXJlNCkKIAkJIG1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CkBAIC0xMDU1LDIwICsxMTAzLDE4IEBACiAJCWlmICgocmV0ID0gb21hcF9yZXF1ZXN0X2dwaW8oaG9zdC0+cG93ZXJfcGluKSkgIT0gMCkgewogCQkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksCiAJCQkJIlVuYWJsZSB0byBnZXQgR1BJTyBwaW4gZm9yIE1NQyBwb3dlclxuIik7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gZXJyX2ZyZWVfZmNsazsKIAkJfQogCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihob3N0LT5wb3dlcl9waW4sIDApOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKGhvc3QtPmlycSwgbW1jX29tYXBfaXJxLCAwLCBEUklWRVJfTkFNRSwgaG9zdCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX2ZyZWVfcG93ZXJfZ3BpbzsKIAogCWhvc3QtPmRldiA9ICZwZGV2LT5kZXY7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CiAKLQltbWNfYWRkX2hvc3QobW1jKTsKLQogCWlmIChob3N0LT5zd2l0Y2hfcGluID49IDApIHsKIAkJSU5JVF9XT1JLKCZob3N0LT5zd2l0Y2hfd29yaywgbW1jX29tYXBfc3dpdGNoX2hhbmRsZXIsIGhvc3QpOwogCQlpbml0X3RpbWVyKCZob3N0LT5zd2l0Y2hfdGltZXIpOwpAQCAtMTEwNiwxMCArMTE1MiwxMSBAQAogCQkJc2NoZWR1bGVfd29yaygmaG9zdC0+c3dpdGNoX3dvcmspOwogCX0KIAotbm9fc3dpdGNoOgorCW1tY19hZGRfaG9zdChtbWMpOworCiAJcmV0dXJuIDA7CiAKLW91dDoKK25vX3N3aXRjaDoKIAkvKiBGSVhNRTogRnJlZSBvdGhlciByZXNvdXJjZXMgdG9vLiAqLwogCWlmIChob3N0KSB7CiAJCWlmIChob3N0LT5pY2xrICYmICFJU19FUlIoaG9zdC0+aWNsaykpCkBAIC0xMTE4LDYgKzExNjUsMjAgQEAKIAkJCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAJCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKIAl9CitlcnJfZnJlZV9wb3dlcl9ncGlvOgorCWlmIChob3N0LT5wb3dlcl9waW4gPj0gMCkKKwkJb21hcF9mcmVlX2dwaW8oaG9zdC0+cG93ZXJfcGluKTsKK2Vycl9mcmVlX2ZjbGs6CisJY2xrX3B1dChob3N0LT5mY2xrKTsKK2Vycl9mcmVlX2ljbGs6CisJaWYgKGhvc3QtPmljbGsgIT0gTlVMTCkgeworCQljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKKwkJY2xrX3B1dChob3N0LT5pY2xrKTsKKwl9CitlcnJfZnJlZV9tbWNfaG9zdDoKKwltbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7CitlcnJfZnJlZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTI3LDMwICsxMTg4LDMxIEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWlmIChob3N0KSB7Ci0JCW1tY19yZW1vdmVfaG9zdChob3N0LT5tbWMpOwotCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCUJVR19PTihob3N0ID09IE5VTEwpOwogCi0JCWlmIChob3N0LT5wb3dlcl9waW4gPj0gMCkKLQkJCW9tYXBfZnJlZV9ncGlvKGhvc3QtPnBvd2VyX3Bpbik7Ci0JCWlmIChob3N0LT5zd2l0Y2hfcGluID49IDApIHsKLQkJCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlX3BvbGwpOwotCQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwotCQkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShob3N0LT5zd2l0Y2hfcGluKSwgaG9zdCk7Ci0JCQlvbWFwX2ZyZWVfZ3Bpbyhob3N0LT5zd2l0Y2hfcGluKTsKLQkJCWhvc3QtPnN3aXRjaF9waW4gPSAtMTsKLQkJCWRlbF90aW1lcl9zeW5jKCZob3N0LT5zd2l0Y2hfdGltZXIpOwotCQkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKLQkJfQotCQlpZiAoaG9zdC0+aWNsayAmJiAhSVNfRVJSKGhvc3QtPmljbGspKQotCQkJY2xrX3B1dChob3N0LT5pY2xrKTsKLQkJaWYgKGhvc3QtPmZjbGsgJiYgIUlTX0VSUihob3N0LT5mY2xrKSkKLQkJCWNsa19wdXQoaG9zdC0+ZmNsayk7Ci0JCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKKwltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKKwlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCisJaWYgKGhvc3QtPnBvd2VyX3BpbiA+PSAwKQorCQlvbWFwX2ZyZWVfZ3Bpbyhob3N0LT5wb3dlcl9waW4pOworCWlmIChob3N0LT5zd2l0Y2hfcGluID49IDApIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVfcG9sbCk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY292ZXJfc3dpdGNoKTsKKwkJZnJlZV9pcnEoT01BUF9HUElPX0lSUShob3N0LT5zd2l0Y2hfcGluKSwgaG9zdCk7CisJCW9tYXBfZnJlZV9ncGlvKGhvc3QtPnN3aXRjaF9waW4pOworCQlob3N0LT5zd2l0Y2hfcGluID0gLTE7CisJCWRlbF90aW1lcl9zeW5jKCZob3N0LT5zd2l0Y2hfdGltZXIpOworCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCX0KKwlpZiAoaG9zdC0+aWNsayAmJiAhSVNfRVJSKGhvc3QtPmljbGspKQorCQljbGtfcHV0KGhvc3QtPmljbGspOworCWlmIChob3N0LT5mY2xrICYmICFJU19FUlIoaG9zdC0+ZmNsaykpCisJCWNsa19wdXQoaG9zdC0+ZmNsayk7CiAKIAlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCQkJICAgcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKworCW1tY19mcmVlX2hvc3QoaG9zdC0+bW1jKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvb21hcC5oIGIvZHJpdmVycy9tbWMvb21hcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTU0ZDM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbW1jL29tYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSNpZm5kZWYJRFJJVkVSU19NRURJQV9NTUNfT01BUF9ICi0jZGVmaW5lCURSSVZFUlNfTUVESUFfTU1DX09NQVBfSAotCi0jZGVmaW5lCU9NQVBfTU1DX1JFR19DTUQJMHgwMAotI2RlZmluZQlPTUFQX01NQ19SRUdfQVJHTAkweDA0Ci0jZGVmaW5lCU9NQVBfTU1DX1JFR19BUkdICTB4MDgKLSNkZWZpbmUJT01BUF9NTUNfUkVHX0NPTgkweDBjCi0jZGVmaW5lCU9NQVBfTU1DX1JFR19TVEFUCTB4MTAKLSNkZWZpbmUJT01BUF9NTUNfUkVHX0lFCQkweDE0Ci0jZGVmaW5lCU9NQVBfTU1DX1JFR19DVE8JMHgxOAotI2RlZmluZQlPTUFQX01NQ19SRUdfRFRPCTB4MWMKLSNkZWZpbmUJT01BUF9NTUNfUkVHX0RBVEEJMHgyMAotI2RlZmluZQlPTUFQX01NQ19SRUdfQkxFTgkweDI0Ci0jZGVmaW5lCU9NQVBfTU1DX1JFR19OQkxLCTB4MjgKLSNkZWZpbmUJT01BUF9NTUNfUkVHX0JVRgkweDJjCi0jZGVmaW5lIE9NQVBfTU1DX1JFR19TRElPCTB4MzQKLSNkZWZpbmUJT01BUF9NTUNfUkVHX1JFVgkweDNjCi0jZGVmaW5lCU9NQVBfTU1DX1JFR19SU1AwCTB4NDAKLSNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDEJMHg0NAotI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQMgkweDQ4Ci0jZGVmaW5lCU9NQVBfTU1DX1JFR19SU1AzCTB4NGMKLSNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDQJMHg1MAotI2RlZmluZQlPTUFQX01NQ19SRUdfUlNQNQkweDU0Ci0jZGVmaW5lCU9NQVBfTU1DX1JFR19SU1A2CTB4NTgKLSNkZWZpbmUJT01BUF9NTUNfUkVHX1JTUDcJMHg1YwotI2RlZmluZQlPTUFQX01NQ19SRUdfSU9TUgkweDYwCi0jZGVmaW5lCU9NQVBfTU1DX1JFR19TWVNDCTB4NjQKLSNkZWZpbmUJT01BUF9NTUNfUkVHX1NZU1MJMHg2OAotCi0jZGVmaW5lCU9NQVBfTU1DX1NUQVRfQ0FSRF9FUlIJCSgxIDw8IDE0KQotI2RlZmluZQlPTUFQX01NQ19TVEFUX0NBUkRfSVJRCQkoMSA8PCAxMykKLSNkZWZpbmUJT01BUF9NTUNfU1RBVF9PQ1JfQlVTWQkJKDEgPDwgMTIpCi0jZGVmaW5lCU9NQVBfTU1DX1NUQVRfQV9FTVBUWQkJKDEgPDwgMTEpCi0jZGVmaW5lCU9NQVBfTU1DX1NUQVRfQV9GVUxMCQkoMSA8PCAxMCkKLSNkZWZpbmUJT01BUF9NTUNfU1RBVF9DTURfQ1JDCQkoMSA8PCAgOCkKLSNkZWZpbmUJT01BUF9NTUNfU1RBVF9DTURfVE9VVAkJKDEgPDwgIDcpCi0jZGVmaW5lCU9NQVBfTU1DX1NUQVRfREFUQV9DUkMJCSgxIDw8ICA2KQotI2RlZmluZQlPTUFQX01NQ19TVEFUX0RBVEFfVE9VVAkJKDEgPDwgIDUpCi0jZGVmaW5lCU9NQVBfTU1DX1NUQVRfRU5EX0JVU1kJCSgxIDw8ICA0KQotI2RlZmluZQlPTUFQX01NQ19TVEFUX0VORF9PRl9EQVRBCSgxIDw8ICAzKQotI2RlZmluZQlPTUFQX01NQ19TVEFUX0NBUkRfQlVTWQkJKDEgPDwgIDIpCi0jZGVmaW5lCU9NQVBfTU1DX1NUQVRfRU5EX09GX0NNRAkoMSA8PCAgMCkKLQotI2RlZmluZSBPTUFQX01NQ19SRUFEKGJhc2UsIHJlZykJX19yYXdfcmVhZHcoKGJhc2UpICsgT01BUF9NTUNfUkVHXyMjcmVnKQotI2RlZmluZSBPTUFQX01NQ19XUklURShiYXNlLCByZWcsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoYmFzZSkgKyBPTUFQX01NQ19SRUdfIyNyZWcpCi0KLS8qCi0gKiBDb21tYW5kIHR5cGVzCi0gKi8KLSNkZWZpbmUgT01BUF9NTUNfQ01EVFlQRV9CQwkwCi0jZGVmaW5lIE9NQVBfTU1DX0NNRFRZUEVfQkNSCTEKLSNkZWZpbmUgT01BUF9NTUNfQ01EVFlQRV9BQwkyCi0jZGVmaW5lIE9NQVBfTU1DX0NNRFRZUEVfQURUQwkzCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9weGFtY2kuYwppbmRleCBhNTI2Njk4Li40NzFlOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9weGFtY2kuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJCSBob3N0LT5jbGtydCwgaG9zdC0+Y21kYXQpOwogfQogCi1zdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBweGFtY2lfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgcHhhbWNpX29wcyA9IHsKIAkucmVxdWVzdAk9IHB4YW1jaV9yZXF1ZXN0LAogCS5nZXRfcm8JCT0gcHhhbWNpX2dldF9ybywKIAkuc2V0X2lvcwk9IHB4YW1jaV9zZXRfaW9zLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKaW5kZXggOWE3ZDM5Yi4uY2Q5ODExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9zZGhjaS5jCkBAIC02MTYsNiArNjE2LDcgQEAKIHN0YXRpYyB2b2lkIHNkaGNpX3NldF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IGNsb2NrKQogewogCWludCBkaXY7CisJdTggY3RybDsKIAl1MTYgY2xrOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIApAQCAtNjI0LDYgKzYyNSwxMyBAQAogCiAJd3JpdGV3KDAsIGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpOwogCisJY3RybCA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJaWYgKGNsb2NrID4gMjUwMDAwMDApCisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9ISVNQRDsKKwllbHNlCisJCWN0cmwgJj0gflNESENJX0NUUkxfSElTUEQ7CisJd3JpdGViKGN0cmwsIGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisKIAlpZiAoY2xvY2sgPT0gMCkKIAkJZ290byBvdXQ7CiAKQEAgLTc4NCw3ICs3OTIsNyBAQAogCXJldHVybiAhKHByZXNlbnQgJiBTREhDSV9XUklURV9QUk9URUNUKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgc2RoY2lfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgc2RoY2lfb3BzID0gewogCS5yZXF1ZXN0CT0gc2RoY2lfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IHNkaGNpX3NldF9pb3MsCiAJLmdldF9ybwkJPSBzZGhjaV9nZXRfcm8sCkBAIC0xMjkxLDYgKzEyOTksMTMgQEAKIAllbHNlIGlmIChjYXBzICYgU0RIQ0lfQ0FOX1ZERF8xODApCiAJCW1tYy0+b2NyX2F2YWlsIHw9IE1NQ19WRERfMTdfMTh8TU1DX1ZERF8xOF8xOTsKIAorCWlmICgoaG9zdC0+bWF4X2NsayA+IDI1MDAwMDAwKSAmJiAhKGNhcHMgJiBTREhDSV9DQU5fRE9fSElTUEQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbnRyb2xsZXIgcmVwb3J0cyA+IDI1IE1IeiBiYXNlIGNsb2NrLCIKKwkJCSIgYnV0IG5vIGhpZ2ggc3BlZWQgc3VwcG9ydC5cbiIsCisJCQlob3N0LT5zbG90X2Rlc2NyKTsKKwkJbW1jLT5mX21heCA9IDI1MDAwMDAwOworCX0KKwogCWlmIChtbWMtPm9jcl9hdmFpbCA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEhhcmR3YXJlIGRvZXNuJ3QgcmVwb3J0IGFueSAiCiAJCQkic3VwcG9ydCB2b2x0YWdlcy5cbiIsIGhvc3QtPnNsb3RfZGVzY3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvc2RoY2kuaCBiL2RyaXZlcnMvbW1jL3NkaGNpLmgKaW5kZXggNzJhNjc5My4uZjlkMWEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvc2RoY2kuaAorKysgYi9kcml2ZXJzL21tYy9zZGhjaS5oCkBAIC03MSw2ICs3MSw3IEBACiAjZGVmaW5lIFNESENJX0hPU1RfQ09OVFJPTCAJMHgyOAogI2RlZmluZSAgU0RIQ0lfQ1RSTF9MRUQJCTB4MDEKICNkZWZpbmUgIFNESENJX0NUUkxfNEJJVEJVUwkweDAyCisjZGVmaW5lICBTREhDSV9DVFJMX0hJU1BECTB4MDQKIAogI2RlZmluZSBTREhDSV9QT1dFUl9DT05UUk9MCTB4MjkKICNkZWZpbmUgIFNESENJX1BPV0VSX09OCQkweDAxCkBAIC0xMzgsNiArMTM5LDcgQEAKICNkZWZpbmUgIFNESENJX0NMT0NLX0JBU0VfU0hJRlQJOAogI2RlZmluZSAgU0RIQ0lfTUFYX0JMT0NLX01BU0sJMHgwMDAzMDAwMAogI2RlZmluZSAgU0RIQ0lfTUFYX0JMT0NLX1NISUZUICAxNgorI2RlZmluZSAgU0RIQ0lfQ0FOX0RPX0hJU1BECTB4MDAyMDAwMDAKICNkZWZpbmUgIFNESENJX0NBTl9ET19ETUEJMHgwMDQwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8zMzAJMHgwMTAwMDAwMAogI2RlZmluZSAgU0RIQ0lfQ0FOX1ZERF8zMDAJMHgwMjAwMDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvd2JzZC5jIGIvZHJpdmVycy9tbWMvd2JzZC5jCmluZGV4IDY4MmU2MmIuLjdhMjgyNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3dic2QuYworKysgYi9kcml2ZXJzL21tYy93YnNkLmMKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAJcmV0dXJuIGNzciAmIFdCU0RfV1JQVDsKIH0KIAotc3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgd2JzZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyB3YnNkX29wcyA9IHsKIAkucmVxdWVzdAk9IHdic2RfcmVxdWVzdCwKIAkuc2V0X2lvcwk9IHdic2Rfc2V0X2lvcywKIAkuZ2V0X3JvCQk9IHdic2RfZ2V0X3JvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODM5MC5jIGIvZHJpdmVycy9uZXQvODM5MC5jCmluZGV4IDNkMWM1OTkuLmE4MjgwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTAuYworKysgYi9kcml2ZXJzL25ldC84MzkwLmMKQEAgLTEsMTEwNCArMSw0MCBAQAotLyogODM5MC5jOiBBIGdlbmVyYWwgTlM4MzkwIGV0aGVybmV0IGRyaXZlciBjb3JlIGZvciBsaW51eC4gKi8KLS8qCi0JV3JpdHRlbiAxOTkyLTk0IGJ5IERvbmFsZCBCZWNrZXIuCi0KLQlDb3B5cmlnaHQgMTk5MyBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgdGhlCi0JRGlyZWN0b3IsIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeS4KLQotCVRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKLQlvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotCi0JVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCBhcyBiZWNrZXJAc2N5bGQuY29tLCBvciBDL08KLQlTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24KLQk0MTAgU2V2ZXJuIEF2ZS4sIFN1aXRlIDIxMAotCUFubmFwb2xpcyBNRCAyMTQwMwotCi0KLSAgVGhpcyBpcyB0aGUgY2hpcC1zcGVjaWZpYyBjb2RlIGZvciBtYW55IDgzOTAtYmFzZWQgZXRoZXJuZXQgYWRhcHRvcnMuCi0gIFRoaXMgaXMgbm90IGEgY29tcGxldGUgZHJpdmVyLCBpdCBtdXN0IGJlIGNvbWJpbmVkIHdpdGggYm9hcmQtc3BlY2lmaWMKLSAgY29kZSBzdWNoIGFzIG5lLmMsIHdkLmMsIDNjNTAzLmMsIGV0Yy4KLQotICBTZWVpbmcgaG93IGF0IGxlYXN0IGVpZ2h0IGRyaXZlcnMgdXNlIHRoaXMgY29kZSwgKG5vdCBjb3VudGluZyB0aGUKLSAgUENNQ0lBIG9uZXMgZWl0aGVyKSBpdCBpcyBlYXN5IHRvIGJyZWFrIHNvbWUgY2FyZCBieSB3aGF0IHNlZW1zIGxpa2UKLSAgYSBzaW1wbGUgaW5ub2NlbnQgY2hhbmdlLiBQbGVhc2UgY29udGFjdCBtZSBvciBEb25hbGQgaWYgeW91IHRoaW5rCi0gIHlvdSBoYXZlIGZvdW5kIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNoYW5naW5nLiAtLSBQRwotCi0KLSAgQ2hhbmdlbG9nOgotCi0gIFBhdWwgR29ydG1ha2VyCTogcmVtb3ZlIHNldF9iaXQgbG9jaywgb3RoZXIgY2xlYW51cHMuCi0gIFBhdWwgR29ydG1ha2VyCTogYWRkIGVpX2dldF84MzkwX2hkcigpIHNvIHdlIGNhbiBwYXNzIHNrYidzIHRvCi0JCQkgIGVpX2Jsb2NrX2lucHV0KCkgZm9yIGV0aF9pb19jb3B5X2FuZF9zdW0oKS4KLSAgUGF1bCBHb3J0bWFrZXIJOiBleGNoYW5nZSBzdGF0aWMgaW50IGVpX3Bpbmdwb25nIGZvciBhICNkZWZpbmUsCi0JCQkgIGFsc28gYWRkIGJldHRlciBUeCBlcnJvciBoYW5kbGluZy4KLSAgUGF1bCBHb3J0bWFrZXIJOiByZXdyaXRlIFJ4IG92ZXJydW4gaGFuZGxpbmcgYXMgcGVyIE5TIHNwZWNzLgotICBBbGV4ZXkgS3V6bmV0c292CTogdXNlIHRoZSA4MzkwJ3Mgc2l4IGJpdCBoYXNoIG11bHRpY2FzdCBmaWx0ZXIuCi0gIFBhdWwgR29ydG1ha2VyCTogdHdlYWsgQU5LJ3MgYWJvdmUgbXVsdGljYXN0IGNoYW5nZXMgYSBiaXQuCi0gIFBhdWwgR29ydG1ha2VyCTogdXBkYXRlIHBhY2tldCBzdGF0aXN0aWNzIGZvciB2Mi4xLngKLSAgQWxhbiBDb3gJCTogc3VwcG9ydCBhcmJpdGFyeSBzdHVwaWQgcG9ydCBtYXBwaW5ncyBvbiB0aGUKLSAgCQkJICA2OEsgTWFjaW50b3NoLiBTdXBwb3J0ID4xNmJpdCBJL08gc3BhY2VzCi0gIFBhdWwgR29ydG1ha2VyCTogYWRkIGttb2Qgc3VwcG9ydCBmb3IgYXV0by1sb2FkaW5nIG9mIHRoZSA4MzkwCi0JCQkgIG1vZHVsZSBieSBhbGwgZHJpdmVycyB0aGF0IHJlcXVpcmUgaXQuCi0gIEFsYW4gQ294CQk6IFNwaW5sb2NraW5nIHdvcmssIGFkZGVkICdCVUdfODNDNjkwJwotICBQYXVsIEdvcnRtYWtlcgk6IFNlcGFyYXRlIG91dCBUeCB0aW1lb3V0IGNvZGUgZnJvbSBUeCBwYXRoLgotICBQYXVsIEdvcnRtYWtlcgk6IFJlbW92ZSBvbGQgdW51c2VkIHNpbmdsZSBUeCBidWZmZXIgY29kZS4KLSAgSGF5YXRvIEZ1aml3YXJhCTogQWRkIG0zMnIgc3VwcG9ydC4KLSAgUGF1bCBHb3J0bWFrZXIJOiB1c2Ugc2tiX3BhZHRvKCkgaW5zdGVhZCBvZiBzdGFjayBzY3JhdGNoIGFyZWEKLQotICBTb3VyY2VzOgotICBUaGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMQU4gRGF0YWJvb2ssIGFuZCB0aGUgM0NvbSAzYzUwMyBkYXRhYm9vay4KLQotICAqLworLyogODM5MCBjb3JlIGZvciB1c3VhbCBkcml2ZXJzICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9CiAgICAgIjgzOTAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdilcbiI7CiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgImxpYjgzOTAuYyIKIAotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0KLSNkZWZpbmUgTlM4MzkwX0NPUkUKLSNpbmNsdWRlICI4MzkwLmgiCi0KLSNkZWZpbmUgQlVHXzgzQzY5MAotCi0vKiBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbmFsIGZ1bmN0aW9uIGludGVyZmFjZXMgdG8gYm9hcmQtc3BlY2lmaWMKLSAgIHJvdXRpbmVzLgotCXZvaWQgcmVzZXRfODM5MChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotCQlSZXNldHMgdGhlIGJvYXJkIGFzc29jaWF0ZWQgd2l0aCBERVYsIGluY2x1ZGluZyBhIGhhcmR3YXJlIHJlc2V0IG9mCi0JCXRoZSA4MzkwLiAgVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzIGEgdHJhbnNtaXQgdGltZW91dCwgYW5kCi0JCWl0IGlzIGFsd2F5cyBmb2xsb3dlZCBieSA4MzkwX2luaXQoKS4KLQl2b2lkIGJsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQkJCQkJICBpbnQgc3RhcnRfcGFnZSkKLQkJV3JpdGUgdGhlIENPVU5UIGJ5dGVzIG9mIEJVRiB0byB0aGUgcGFja2V0IGJ1ZmZlciBhdCBTVEFSVF9QQUdFLiAgVGhlCi0JCSJwYWdlIiB2YWx1ZSB1c2VzIHRoZSA4MzkwJ3MgMjU2LWJ5dGUgcGFnZXMuCi0Jdm9pZCBnZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX2hkciAqaGRyLCBpbnQgcmluZ19wYWdlKQotCQlSZWFkIHRoZSA0IGJ5dGUsIHBhZ2UgYWxpZ25lZCA4MzkwIGhlYWRlci4gKklmKiB0aGVyZSBpcyBhCi0JCXN1YnNlcXVlbnQgcmVhZCwgaXQgd2lsbCBiZSBvZiB0aGUgcmVzdCBvZiB0aGUgcGFja2V0LgotCXZvaWQgYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpCi0JCVJlYWQgQ09VTlQgYnl0ZXMgZnJvbSB0aGUgcGFja2V0IGJ1ZmZlciBpbnRvIHRoZSBza2IgZGF0YSBhcmVhLiBTdGFydAotCQlyZWFkaW5nIGZyb20gUklOR19PRkZTRVQsIHRoZSBhZGRyZXNzIGFzIHRoZSA4MzkwIHNlZXMgaXQuICBUaGlzIHdpbGwgYWx3YXlzCi0JCWZvbGxvdyB0aGUgcmVhZCBvZiB0aGUgODM5MCBoZWFkZXIuCi0qLwotI2RlZmluZSBlaV9yZXNldF84MzkwIChlaV9sb2NhbC0+cmVzZXRfODM5MCkKLSNkZWZpbmUgZWlfYmxvY2tfb3V0cHV0IChlaV9sb2NhbC0+YmxvY2tfb3V0cHV0KQotI2RlZmluZSBlaV9ibG9ja19pbnB1dCAoZWlfbG9jYWwtPmJsb2NrX2lucHV0KQotI2RlZmluZSBlaV9nZXRfODM5MF9oZHIgKGVpX2xvY2FsLT5nZXRfODM5MF9oZHIpCi0KLS8qIHVzZSAwIGZvciBwcm9kdWN0aW9uLCAxIGZvciB2ZXJpZmljYXRpb24sID4yIGZvciBkZWJ1ZyAqLwotI2lmbmRlZiBlaV9kZWJ1ZwotaW50IGVpX2RlYnVnID0gMTsKLSNlbmRpZgotCi0vKiBJbmRleCB0byBmdW5jdGlvbnMuICovCi1zdGF0aWMgdm9pZCBlaV90eF9pbnRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZWlfdHhfZXJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZWlfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGVpX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBlaV9yeF9vdmVycnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0vKiBSb3V0aW5lcyBnZW5lcmljIHRvIE5TODM5MC1iYXNlZCBib2FyZHMuICovCi1zdGF0aWMgdm9pZCBOUzgzOTBfdHJpZ2dlcl9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBsZW5ndGgsCi0JCQkJCQkJCWludCBzdGFydF9wYWdlKTsKLXN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGRvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotLyoKLSAqCVNNUCBhbmQgdGhlIDgzOTAgc2V0dXAuCi0gKgotICoJVGhlIDgzOTAgaXNudCBleGFjdGx5IGRlc2lnbmVkIHRvIGJlIG11bHRpdGhyZWFkZWQgb24gUlgvVFguIFRoZXJlIGlzCi0gKglhIHBhZ2UgcmVnaXN0ZXIgdGhhdCBjb250cm9scyBiYW5rIGFuZCBwYWNrZXQgYnVmZmVyIGFjY2Vzcy4gV2UgZ3VhcmQKLSAqCXRoaXMgd2l0aCBlaV9sb2NhbC0+cGFnZV9sb2NrLiBOb2JvZHkgc2hvdWxkIGFzc3VtZSBvciBzZXQgdGhlIHBhZ2Ugb3RoZXIKLSAqCXRoYW4gemVybyB3aGVuIHRoZSBsb2NrIGlzIG5vdCBoZWxkLiBMb2NrIGhvbGRlcnMgbXVzdCByZXN0b3JlIHBhZ2UgMAotICoJYmVmb3JlIHVubG9ja2luZy4gRXZlbiBwdXJlIHJlYWRlcnMgbXVzdCB0YWtlIHRoZSBsb2NrIHRvIHByb3RlY3QgaW4KLSAqCXBhZ2UgMC4KLSAqCi0gKglUbyBtYWtlIGxpZmUgZGlmZmljdWx0IHRoZSBjaGlwIGNhbiBhbHNvIGJlIHZlcnkgc2xvdy4gV2UgdGhlcmVmb3JlIGNhbid0Ci0gKglqdXN0IHVzZSBzcGlubG9ja3MuIEZvciB0aGUgbG9uZ2VyIGxvY2t1cHMgd2UgZGlzYWJsZSB0aGUgaXJxIHRoZSBkZXZpY2UKLSAqCXNpdHMgb24gYW5kIGhvbGQgdGhlIGxvY2suIFdlIG11c3QgaG9sZCB0aGUgbG9jayBiZWNhdXNlIHRoZXJlIGlzIGEgZHVhbAotICoJcHJvY2Vzc29yIGNhc2Ugb3RoZXIgdGhhbiBpbnRlcnJ1cHRzIChnZXQgc3RhdHMvc2V0IG11bHRpY2FzdCBsaXN0IGluCi0gKglwYXJhbGxlbCB3aXRoIGVhY2ggb3RoZXIgYW5kIHRyYW5zbWl0KS4KLSAqCi0gKglOb3RlOiBpbiB0aGVvcnkgd2UgY2FuIGp1c3QgZGlzYWJsZSB0aGUgaXJxIG9uIHRoZSBjYXJkIF9idXRfIHRoZXJlIGlzCi0gKglhIGxhdGVuY3kgb24gU01QIGlycSBkZWxpdmVyeS4gU28gd2UgY2FuIGVhc2lseSBnbyAiZGlzYWJsZSBpcnEiICJzeW5jIGlycXMiCi0gKgllbnRlciBsb2NrLCB0YWtlIHRoZSBxdWV1ZWQgaXJxLiBTbyB3ZSB3YWRkbGUgaW5zdGVhZCBvZiBmbHlpbmcuCi0gKgotICoJRmluYWxseSBieSBzcGVjaWFsIGFycmFuZ2VtZW50IGZvciB0aGUgcHVycG9zZSBvZiBiZWluZyBnZW5lcmFsbHkKLSAqCWFubm95aW5nIHRoZSB0cmFuc21pdCBmdW5jdGlvbiBpcyBjYWxsZWQgYmggYXRvbWljLiBUaGF0IHBsYWNlcwotICoJcmVzdHJpY3Rpb25zIG9uIHRoZSB1c2VyIGNvbnRleHQgY2FsbGVycyBhcyBkaXNhYmxlX2lycSB3b24ndCBzYXZlCi0gKgl0aGVtLgotICovCi0KLQotCi0vKioKLSAqIGVpX29wZW4gLSBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLgotICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gaW5pdGlhbGl6ZQotICoKLSAqIFRoaXMgcm91dGluZSBnb2VzIGFsbC1vdXQsIHNldHRpbmcgZXZlcnl0aGluZwotICogdXAgYW5ldyBhdCBlYWNoIG9wZW4sIGV2ZW4gdGhvdWdoIG1hbnkgb2YgdGhlc2UgcmVnaXN0ZXJzIHNob3VsZCBvbmx5Ci0gKiBuZWVkIHRvIGJlIHNldCBvbmNlIGF0IGJvb3QuCi0gKi8KIGludCBlaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7Ci0KLQkvKiBUaGUgY2FyZCBJL08gcGFydCBvZiB0aGUgZHJpdmVyIChlLmcuIDNjNTAzKSBjYW4gaG9vayBhIFR4IHRpbWVvdXQKLQkgICAgd3JhcHBlciB0aGF0IGRvZXMgZS5nLiBtZWRpYSBjaGVjayAmIHRoZW4gY2FsbHMgZWlfdHhfdGltZW91dC4gKi8KLQlpZiAoZGV2LT50eF90aW1lb3V0ID09IE5VTEwpCi0JCSBkZXYtPnR4X3RpbWVvdXQgPSBlaV90eF90aW1lb3V0OwotCWlmIChkZXYtPndhdGNoZG9nX3RpbWVvIDw9IDApCi0JCSBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQotCS8qCi0JICoJR3JhYiB0aGUgcGFnZSBsb2NrIHNvIHdlIG93biB0aGUgcmVnaXN0ZXIgc2V0LCB0aGVuIGNhbGwKLQkgKgl0aGUgaW5pdCBmdW5jdGlvbi4KLQkgKi8KLQotICAgICAgCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7Ci0JTlM4MzkwX2luaXQoZGV2LCAxKTsKLQkvKiBTZXQgdGhlIGZsYWcgYmVmb3JlIHdlIGRyb3AgdGhlIGxvY2ssIFRoYXQgd2F5IHRoZSBJUlEgYXJyaXZlcwotCSAgIGFmdGVyIGl0cyBzZXQgYW5kIHdlIGdldCBubyBzaWxseSB3YXJuaW5ncyAqLwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0gICAgICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwotCWVpX2xvY2FsLT5pcnFsb2NrID0gMDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19laV9vcGVuKGRldik7CiB9CiAKLS8qKgotICogZWlfY2xvc2UgLSBzaHV0IGRvd24gbmV0d29yayBkZXZpY2UKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGNsb3NlCi0gKgotICogT3Bwb3NpdGUgb2YgZWlfb3BlbigpLiBPbmx5IHVzZWQgd2hlbiAiaWZjb25maWcgPGRldm5hbWU+IGRvd24iIGlzIGRvbmUuCi0gKi8KIGludCBlaV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKglIb2xkIHRoZSBwYWdlIGxvY2sgZHVyaW5nIGNsb3NlCi0JICovCi0KLSAgICAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwotCU5TODM5MF9pbml0KGRldiwgMCk7Ci0gICAgICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gX19laV9jbG9zZShkZXYpOwogfQogCi0vKioKLSAqIGVpX3R4X3RpbWVvdXQgLSBoYW5kbGUgdHJhbnNtaXQgdGltZSBvdXQgY29uZGl0aW9uCi0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB3aGljaCBoYXMgYXBwYXJlbnRseSBmYWxsZW4gYXNsZWVwCi0gKgotICogQ2FsbGVkIGJ5IGtlcm5lbCB3aGVuIGRldmljZSBuZXZlciBhY2tub3dsZWRnZXMgYSB0cmFuc21pdCBoYXMKLSAqIGNvbXBsZXRlZCAob3IgZmFpbGVkKSAtIGkuZS4gbmV2ZXIgcG9zdGVkIGEgVHggcmVsYXRlZCBpbnRlcnJ1cHQuCi0gKi8KLQotdm9pZCBlaV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB0eHNyLCBpc3IsIHRpY2tzc29mYXIgPSBqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0jaWYgZGVmaW5lZChDT05GSUdfTTMyUikgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCXVuc2lnbmVkIGxvbmcgaWN1Y3I7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWN1Y3IgPSBpbmwoTTMyUl9JQ1VfQ1IxX1BPUlRMKTsKLQlpY3VjciB8PSBNMzJSX0lDVUNSX0lTTU9EMTE7Ci0Jb3V0bChpY3VjciwgTTMyUl9JQ1VfQ1IxX1BPUlRMKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0jZW5kaWYKLQllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7Ci0JdHhzciA9IGluYihlODM5MF9iYXNlK0VOMF9UU1IpOwotCWlzciA9IGluYihlODM5MF9iYXNlK0VOMF9JU1IpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggdGltZWQgb3V0LCAlcyBUU1I9JSMyeCwgSVNSPSUjMngsIHQ9JWQuXG4iLAotCQlkZXYtPm5hbWUsICh0eHNyICYgRU5UU1JfQUJUKSA/ICJleGNlc3MgY29sbGlzaW9ucy4iIDoKLQkJKGlzcikgPyAibG9zdCBpbnRlcnJ1cHQ/IiA6ICJjYWJsZSBwcm9ibGVtPyIsIHR4c3IsIGlzciwgdGlja3Nzb2Zhcik7Ci0KLQlpZiAoIWlzciAmJiAhZWlfbG9jYWwtPnN0YXQudHhfcGFja2V0cykKLQl7Ci0JCS8qIFRoZSA4MzkwIHByb2JhYmx5IGhhc24ndCBnb3R0ZW4gb24gdGhlIGNhYmxlIHlldC4gKi8KLQkJZWlfbG9jYWwtPmludGVyZmFjZV9udW0gXj0gMTsgICAvKiBUcnkgYSBkaWZmZXJlbnQgeGN2ci4gICovCi0JfQotCi0JLyogVWdseSBidXQgYSByZXNldCBjYW4gYmUgc2xvdywgeWV0IG11c3QgYmUgcHJvdGVjdGVkICovCi0KLQlkaXNhYmxlX2lycV9ub3N5bmNfbG9ja2RlcChkZXYtPmlycSk7Ci0Jc3Bpbl9sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLQotCS8qIFRyeSB0byByZXN0YXJ0IHRoZSBjYXJkLiAgUGVyaGFwcyB0aGUgdXNlciBoYXMgZml4ZWQgc29tZXRoaW5nLiAqLwotCWVpX3Jlc2V0XzgzOTAoZGV2KTsKLQlOUzgzOTBfaW5pdChkZXYsIDEpOwotCi0Jc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwotCWVuYWJsZV9pcnFfbG9ja2RlcChkZXYtPmlycSk7Ci0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotfQotCi0vKioKLSAqIGVpX3N0YXJ0X3htaXQgLSBiZWdpbiBwYWNrZXQgdHJhbnNtaXNzaW9uCi0gKiBAc2tiOiBwYWNrZXQgdG8gYmUgc2VudAotICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gd2hpY2ggcGFja2V0IGlzIHNlbnQKLSAqCi0gKiBTZW5kcyBhIHBhY2tldCB0byBhbiA4MzkwIG5ldHdvcmsgZGV2aWNlLgotICovCi0KLXN0YXRpYyBpbnQgZWlfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgc2VuZF9sZW5ndGggPSBza2ItPmxlbiwgb3V0cHV0X3BhZ2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQljaGFyIGJ1ZltFVEhfWkxFTl07Ci0JY2hhciAqZGF0YSA9IHNrYi0+ZGF0YTsKLQotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7Ci0JCW1lbXNldChidWYsIDAsIEVUSF9aTEVOKTsJLyogbW9yZSBlZmZpY2llbnQgdGhhbiBkb2luZyBqdXN0IHRoZSBuZWVkZWQgYml0cyAqLwotCQltZW1jcHkoYnVmLCBkYXRhLCBza2ItPmxlbik7Ci0JCXNlbmRfbGVuZ3RoID0gRVRIX1pMRU47Ci0JCWRhdGEgPSBidWY7Ci0JfQotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGZyb20gdGhlIGV0aGVyY2FyZC4KLQkgICBTTVA6IFdlIGhhdmUgdG8gZ3JhYiB0aGUgbG9jayBoZXJlIG90aGVyd2lzZSB0aGUgSVJRIGhhbmRsZXIKLQkgICBvbiBhbm90aGVyIENQVSBjYW4gZmxpcCB3aW5kb3cgYW5kIHJhY2UgdGhlIElSUSBtYXNrIHNldC4gV2UgZW5kCi0JICAgdXAgdHJhc2hpbmcgdGhlIG1jYXN0IGZpbHRlciBub3QgZGlzYWJsaW5nIGlycXMgaWYgd2UgZG9uJ3QgbG9jayAqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLQlvdXRiX3AoMHgwMCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLQotCi0JLyoKLQkgKglTbG93IHBoYXNlIHdpdGggbG9jayBoZWxkLgotCSAqLwotCi0JZGlzYWJsZV9pcnFfbm9zeW5jX2xvY2tkZXBfaXJxc2F2ZShkZXYtPmlycSwgJmZsYWdzKTsKLQotCXNwaW5fbG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0KLQllaV9sb2NhbC0+aXJxbG9jayA9IDE7Ci0KLQkvKgotCSAqIFdlIGhhdmUgdHdvIFR4IHNsb3RzIGF2YWlsYWJsZSBmb3IgdXNlLiBGaW5kIHRoZSBmaXJzdCBmcmVlCi0JICogc2xvdCwgYW5kIHRoZW4gcGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3MuIFdpdGggdHdvIFR4IGJ1ZnMsCi0JICogeW91IGdldCB2ZXJ5IGNsb3NlIHRvIHRyYW5zbWl0dGluZyBiYWNrLXRvLWJhY2sgcGFja2V0cy4gV2l0aAotCSAqIG9ubHkgb25lIFR4IGJ1ZiwgdGhlIHRyYW5zbWl0dGVyIHNpdHMgaWRsZSB3aGlsZSB5b3UgcmVsb2FkIHRoZQotCSAqIGNhcmQsIGxlYXZpbmcgYSBzdWJzdGFudGlhbCBnYXAgYmV0d2VlbiBlYWNoIHRyYW5zbWl0dGVkIHBhY2tldC4KLQkgKi8KLQotCWlmIChlaV9sb2NhbC0+dHgxID09IDApCi0JewotCQlvdXRwdXRfcGFnZSA9IGVpX2xvY2FsLT50eF9zdGFydF9wYWdlOwotCQllaV9sb2NhbC0+dHgxID0gc2VuZF9sZW5ndGg7Ci0JCWlmIChlaV9kZWJ1ZyAgJiYgIGVpX2xvY2FsLT50eDIgPiAwKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZGxlIHRyYW5zbWl0dGVyIHR4Mj0lZCwgbGFzdHR4PSVkLCB0eGluZz0lZC5cbiIsCi0JCQkJZGV2LT5uYW1lLCBlaV9sb2NhbC0+dHgyLCBlaV9sb2NhbC0+bGFzdHR4LCBlaV9sb2NhbC0+dHhpbmcpOwotCX0KLQllbHNlIGlmIChlaV9sb2NhbC0+dHgyID09IDApCi0JewotCQlvdXRwdXRfcGFnZSA9IGVpX2xvY2FsLT50eF9zdGFydF9wYWdlICsgVFhfUEFHRVMvMjsKLQkJZWlfbG9jYWwtPnR4MiA9IHNlbmRfbGVuZ3RoOwotCQlpZiAoZWlfZGVidWcgICYmICBlaV9sb2NhbC0+dHgxID4gMCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaWRsZSB0cmFuc21pdHRlciwgdHgxPSVkLCBsYXN0dHg9JWQsIHR4aW5nPSVkLlxuIiwKLQkJCQlkZXYtPm5hbWUsIGVpX2xvY2FsLT50eDEsIGVpX2xvY2FsLT5sYXN0dHgsIGVpX2xvY2FsLT50eGluZyk7Ci0JfQotCWVsc2UKLQl7CS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZS4gKi8KLQkJaWYgKGVpX2RlYnVnKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBUeCBidWZmZXJzIGZyZWUhIHR4MT0lZCB0eDI9JWQgbGFzdD0lZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGVpX2xvY2FsLT50eDEsIGVpX2xvY2FsLT50eDIsIGVpX2xvY2FsLT5sYXN0dHgpOwotCQllaV9sb2NhbC0+aXJxbG9jayA9IDA7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJb3V0Yl9wKEVOSVNSX0FMTCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwotCQlzcGluX3VubG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0JCWVuYWJsZV9pcnFfbG9ja2RlcF9pcnFyZXN0b3JlKGRldi0+aXJxLCAmZmxhZ3MpOwotCQllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JLyoKLQkgKiBPa2F5LCBub3cgdXBsb2FkIHRoZSBwYWNrZXQgYW5kIHRyaWdnZXIgYSBzZW5kIGlmIHRoZSB0cmFuc21pdHRlcgotCSAqIGlzbid0IGFscmVhZHkgc2VuZGluZy4gSWYgaXQgaXMgYnVzeSwgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwKLQkgKiB0cmlnZ2VyIHRoZSBzZW5kIGxhdGVyLCB1cG9uIHJlY2VpdmluZyBhIFR4IGRvbmUgaW50ZXJydXB0LgotCSAqLwotCi0JZWlfYmxvY2tfb3V0cHV0KGRldiwgc2VuZF9sZW5ndGgsIGRhdGEsIG91dHB1dF9wYWdlKTsKLQotCWlmICghIGVpX2xvY2FsLT50eGluZykKLQl7Ci0JCWVpX2xvY2FsLT50eGluZyA9IDE7Ci0JCU5TODM5MF90cmlnZ2VyX3NlbmQoZGV2LCBzZW5kX2xlbmd0aCwgb3V0cHV0X3BhZ2UpOwotCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJaWYgKG91dHB1dF9wYWdlID09IGVpX2xvY2FsLT50eF9zdGFydF9wYWdlKQotCQl7Ci0JCQllaV9sb2NhbC0+dHgxID0gLTE7Ci0JCQllaV9sb2NhbC0+bGFzdHR4ID0gLTE7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQllaV9sb2NhbC0+dHgyID0gLTE7Ci0JCQllaV9sb2NhbC0+bGFzdHR4ID0gLTI7Ci0JCX0KLQl9Ci0JZWxzZSBlaV9sb2NhbC0+dHhxdWV1ZSsrOwotCi0JaWYgKGVpX2xvY2FsLT50eDEgICYmICBlaV9sb2NhbC0+dHgyKQotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JZWxzZQotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JLyogVHVybiA4MzkwIGludGVycnVwdHMgYmFjayBvbi4gKi8KLQllaV9sb2NhbC0+aXJxbG9jayA9IDA7Ci0Jb3V0Yl9wKEVOSVNSX0FMTCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwotCi0Jc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwotCWVuYWJsZV9pcnFfbG9ja2RlcF9pcnFyZXN0b3JlKGRldi0+aXJxLCAmZmxhZ3MpOwotCi0JZGV2X2tmcmVlX3NrYiAoc2tiKTsKLQllaV9sb2NhbC0+c3RhdC50eF9ieXRlcyArPSBzZW5kX2xlbmd0aDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGVpX2ludGVycnVwdCAtIGhhbmRsZSB0aGUgaW50ZXJydXB0cyBmcm9tIGFuIDgzOTAKLSAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKLSAqIEBkZXZfaWQ6IGEgcG9pbnRlciB0byB0aGUgbmV0X2RldmljZQotICoKLSAqIEhhbmRsZSB0aGUgZXRoZXIgaW50ZXJmYWNlIGludGVycnVwdHMuIFdlIHB1bGwgcGFja2V0cyBmcm9tCi0gKiB0aGUgODM5MCB2aWEgdGhlIGNhcmQgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBmaXJlIHRoZW0gYXQgdGhlIG5ldHdvcmtpbmcKLSAqIHN0YWNrLiBXZSBhbHNvIGhhbmRsZSB0cmFuc21pdCBjb21wbGV0aW9ucyBhbmQgd2FrZSB0aGUgdHJhbnNtaXQgcGF0aCBpZgotICogbmVjZXNzYXJ5LiBXZSBhbHNvIHVwZGF0ZSB0aGUgY291bnRlcnMgYW5kIGRvIG90aGVyIGhvdXNla2VlcGluZyBhcwotICogbmVlZGVkLgotICovCi0KIGlycXJldHVybl90IGVpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlsb25nIGU4MzkwX2Jhc2U7Ci0JaW50IGludGVycnVwdHMsIG5yX3NlcnZpY2VkID0gMDsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbDsKLQotCWU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLQllaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkvKgotCSAqCVByb3RlY3QgdGhlIGlycSB0ZXN0IHRvby4KLQkgKi8KLQotCXNwaW5fbG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0KLQlpZiAoZWlfbG9jYWwtPmlycWxvY2spCi0JewotI2lmIDEgLyogVGhpcyBtaWdodCBqdXN0IGJlIGFuIGludGVycnVwdCBmb3IgYSBQQ0kgZGV2aWNlIHNoYXJpbmcgdGhpcyBsaW5lICovCi0JCS8qIFRoZSAiaXJxbG9jayIgY2hlY2sgaXMgb25seSBmb3IgdGVzdGluZy4gKi8KLQkJcHJpbnRrKGVpX2xvY2FsLT5pcnFsb2NrCi0JCQkgICA/ICIlczogSW50ZXJydXB0ZWQgd2hpbGUgaW50ZXJydXB0cyBhcmUgbWFza2VkISBpc3I9JSMyeCBpbXI9JSMyeC5cbiIKLQkJCSAgIDogIiVzOiBSZWVudGVyaW5nIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciEgaXNyPSUjMnggaW1yPSUjMnguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBpbmJfcChlODM5MF9iYXNlICsgRU4wX0lTUiksCi0JCQkgICBpbmJfcChlODM5MF9iYXNlICsgRU4wX0lNUikpOwotI2VuZGlmCi0JCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQotCS8qIENoYW5nZSB0byBwYWdlIDAgYW5kIHJlYWQgdGhlIGludHIgc3RhdHVzIHJlZy4gKi8KLQlvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTAsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOwotCWlmIChlaV9kZWJ1ZyA+IDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0KGlzcj0lIzIuMngpLlxuIiwgZGV2LT5uYW1lLAotCQkJICAgaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9JU1IpKTsKLQotCS8qICEhQXNzdW1wdGlvbiEhIC0tIHdlIHN0YXkgaW4gcGFnZSAwLgkgRG9uJ3QgYnJlYWsgdGhpcy4gKi8KLQl3aGlsZSAoKGludGVycnVwdHMgPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0lTUikpICE9IDAKLQkJICAgJiYgKytucl9zZXJ2aWNlZCA8IE1BWF9TRVJWSUNFKQotCXsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpbnRlcnJ1cHQgZnJvbSBzdG9wcGVkIGNhcmRcbiIsIGRldi0+bmFtZSk7Ci0JCQkvKiBybWsgLSBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0cyAqLwotCQkJb3V0Yl9wKGludGVycnVwdHMsIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsKLQkJCWludGVycnVwdHMgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGludGVycnVwdHMgJiBFTklTUl9PVkVSKQotCQkJZWlfcnhfb3ZlcnJ1bihkZXYpOwotCQllbHNlIGlmIChpbnRlcnJ1cHRzICYgKEVOSVNSX1JYK0VOSVNSX1JYX0VSUikpCi0JCXsKLQkJCS8qIEdvdCBhIGdvb2QgKD8pIHBhY2tldC4gKi8KLQkJCWVpX3JlY2VpdmUoZGV2KTsKLQkJfQotCQkvKiBQdXNoIHRoZSBuZXh0IHRvLXRyYW5zbWl0IHBhY2tldCB0aHJvdWdoLiAqLwotCQlpZiAoaW50ZXJydXB0cyAmIEVOSVNSX1RYKQotCQkJZWlfdHhfaW50cihkZXYpOwotCQllbHNlIGlmIChpbnRlcnJ1cHRzICYgRU5JU1JfVFhfRVJSKQotCQkJZWlfdHhfZXJyKGRldik7Ci0KLQkJaWYgKGludGVycnVwdHMgJiBFTklTUl9DT1VOVEVSUykKLQkJewotCQkJZWlfbG9jYWwtPnN0YXQucnhfZnJhbWVfZXJyb3JzICs9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjBfQ09VTlRFUjApOwotCQkJZWlfbG9jYWwtPnN0YXQucnhfY3JjX2Vycm9ycyAgICs9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjBfQ09VTlRFUjEpOwotCQkJZWlfbG9jYWwtPnN0YXQucnhfbWlzc2VkX2Vycm9ycys9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjBfQ09VTlRFUjIpOwotCQkJb3V0Yl9wKEVOSVNSX0NPVU5URVJTLCBlODM5MF9iYXNlICsgRU4wX0lTUik7IC8qIEFjayBpbnRyLiAqLwotCQl9Ci0KLQkJLyogSWdub3JlIGFueSBSREMgaW50ZXJydXB0cyB0aGF0IG1ha2UgaXQgYmFjayB0byBoZXJlLiAqLwotCQlpZiAoaW50ZXJydXB0cyAmIEVOSVNSX1JEQykKLQkJewotCQkJb3V0Yl9wKEVOSVNSX1JEQywgZTgzOTBfYmFzZSArIEVOMF9JU1IpOwotCQl9Ci0KLQkJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUQVJULCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLQl9Ci0KLQlpZiAoaW50ZXJydXB0cyAmJiBlaV9kZWJ1ZykKLQl7Ci0JCW91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVEFSVCwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7Ci0JCWlmIChucl9zZXJ2aWNlZCA+PSBNQVhfU0VSVklDRSkKLQkJewotCQkJLyogMHhGRiBpcyB2YWxpZCBmb3IgYSBjYXJkIHJlbW92YWwgKi8KLQkJCWlmKGludGVycnVwdHMhPTB4RkYpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBzdGF0dXMgJSMyLjJ4XG4iLAotCQkJCSAgIGRldi0+bmFtZSwgaW50ZXJydXB0cyk7Ci0JCQlvdXRiX3AoRU5JU1JfQUxMLCBlODM5MF9iYXNlICsgRU4wX0lTUik7IC8qIEFjay4gbW9zdCBpbnRycy4gKi8KLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmtub3duIGludGVycnVwdCAlIzJ4XG4iLCBkZXYtPm5hbWUsIGludGVycnVwdHMpOwotCQkJb3V0Yl9wKDB4ZmYsIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsgLyogQWNrLiBhbGwgaW50cnMuICovCi0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwotCXJldHVybiBJUlFfUkVUVkFMKG5yX3NlcnZpY2VkID4gMCk7CisJcmV0dXJuIF9fZWlfaW50ZXJydXB0KGlycSwgZGV2X2lkKTsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiB2b2lkIGVpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkaXNhYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKLQllaV9pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldik7Ci0JZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKKwlfX2VpX3BvbGwoZGV2KTsKIH0KICNlbmRpZgogCi0vKioKLSAqIGVpX3R4X2VyciAtIGhhbmRsZSB0cmFuc21pdHRlciBlcnJvcgotICogQGRldjogbmV0d29yayBkZXZpY2Ugd2hpY2ggdGhyZXcgdGhlIGV4Y2VwdGlvbgotICoKLSAqIEEgdHJhbnNtaXR0ZXIgZXJyb3IgaGFzIGhhcHBlbmVkLiBNb3N0IGxpa2VseSBleGNlc3MgY29sbGlzaW9ucyAod2hpY2gKLSAqIGlzIGEgZmFpcmx5IG5vcm1hbCBjb25kaXRpb24pLiBJZiB0aGUgZXJyb3IgaXMgb25lIHdoZXJlIHRoZSBUeCB3aWxsCi0gKiBoYXZlIGJlZW4gYWJvcnRlZCwgd2UgdHJ5IGFuZCBzZW5kIGFub3RoZXIgb25lIHJpZ2h0IGF3YXksIGluc3RlYWQgb2YKLSAqIGxldHRpbmcgdGhlIGZhaWxlZCBwYWNrZXQgc2l0IGFuZCBjb2xsZWN0IGR1c3QgaW4gdGhlIFR4IGJ1ZmZlci4gVGhpcwotICogaXMgYSBtdWNoIGJldHRlciBzb2x1dGlvbiBhcyBpdCBhdm9pZHMga2VybmVsIGJhc2VkIFR4IHRpbWVvdXRzLCBhbmQKLSAqIGFuIHVubmVjZXNzYXJ5IGNhcmQgcmVzZXQuCi0gKgotICogQ2FsbGVkIHdpdGggbG9jayBoZWxkLgotICovCi0KLXN0YXRpYyB2b2lkIGVpX3R4X2VycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBjaGFyIHR4c3IgPSBpbmJfcChlODM5MF9iYXNlK0VOMF9UU1IpOwotCXVuc2lnbmVkIGNoYXIgdHhfd2FzX2Fib3J0ZWQgPSB0eHNyICYgKEVOVFNSX0FCVCtFTlRTUl9GVSk7Ci0KLSNpZmRlZiBWRVJCT1NFX0VSUk9SX0RVTVAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRyYW5zbWl0dGVyIGVycm9yICglIzJ4KTogIiwgZGV2LT5uYW1lLCB0eHNyKTsKLQlpZiAodHhzciAmIEVOVFNSX0FCVCkKLQkJcHJpbnRrKCJleGNlc3MtY29sbGlzaW9ucyAiKTsKLQlpZiAodHhzciAmIEVOVFNSX05EKQotCQlwcmludGsoIm5vbi1kZWZlcnJhbCAiKTsKLQlpZiAodHhzciAmIEVOVFNSX0NSUykKLQkJcHJpbnRrKCJsb3N0LWNhcnJpZXIgIik7Ci0JaWYgKHR4c3IgJiBFTlRTUl9GVSkKLQkJcHJpbnRrKCJGSUZPLXVuZGVycnVuICIpOwotCWlmICh0eHNyICYgRU5UU1JfQ0RIKQotCQlwcmludGsoImxvc3QtaGVhcnRiZWF0ICIpOwotCXByaW50aygiXG4iKTsKLSNlbmRpZgotCi0Jb3V0Yl9wKEVOSVNSX1RYX0VSUiwgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2sgaW50ci4gKi8KLQotCWlmICh0eF93YXNfYWJvcnRlZCkKLQkJZWlfdHhfaW50cihkZXYpOwotCWVsc2UKLQl7Ci0JCWVpX2xvY2FsLT5zdGF0LnR4X2Vycm9ycysrOwotCQlpZiAodHhzciAmIEVOVFNSX0NSUykgZWlfbG9jYWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJaWYgKHR4c3IgJiBFTlRTUl9DREgpIGVpX2xvY2FsLT5zdGF0LnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKLQkJaWYgKHR4c3IgJiBFTlRTUl9PV0MpIGVpX2xvY2FsLT5zdGF0LnR4X3dpbmRvd19lcnJvcnMrKzsKLQl9Ci19Ci0KLS8qKgotICogZWlfdHhfaW50ciAtIHRyYW5zbWl0IGludGVycnVwdCBoYW5kbGVyCi0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSBmb3Igd2hpY2ggdHggaW50ciBpcyBoYW5kbGVkCi0gKgotICogV2UgaGF2ZSBmaW5pc2hlZCBhIHRyYW5zbWl0OiBjaGVjayBmb3IgZXJyb3JzIGFuZCB0aGVuIHRyaWdnZXIgdGhlIG5leHQKLSAqIHBhY2tldCB0byBiZSBzZW50LiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQuCi0gKi8KLQotc3RhdGljIHZvaWQgZWlfdHhfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgc3RhdHVzID0gaW5iKGU4MzkwX2Jhc2UgKyBFTjBfVFNSKTsKLQotCW91dGJfcChFTklTUl9UWCwgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2sgaW50ci4gKi8KLQotCS8qCi0JICogVGhlcmUgYXJlIHR3byBUeCBidWZmZXJzLCBzZWUgd2hpY2ggb25lIGZpbmlzaGVkLCBhbmQgdHJpZ2dlcgotCSAqIHRoZSBzZW5kIG9mIGFub3RoZXIgb25lIGlmIGl0IGV4aXN0cy4KLQkgKi8KLQllaV9sb2NhbC0+dHhxdWV1ZS0tOwotCi0JaWYgKGVpX2xvY2FsLT50eDEgPCAwKQotCXsKLQkJaWYgKGVpX2xvY2FsLT5sYXN0dHggIT0gMSAmJiBlaV9sb2NhbC0+bGFzdHR4ICE9IC0xKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYm9ndXMgbGFzdF90eF9idWZmZXIgJWQsIHR4MT0lZC5cbiIsCi0JCQkJZWlfbG9jYWwtPm5hbWUsIGVpX2xvY2FsLT5sYXN0dHgsIGVpX2xvY2FsLT50eDEpOwotCQllaV9sb2NhbC0+dHgxID0gMDsKLQkJaWYgKGVpX2xvY2FsLT50eDIgPiAwKQotCQl7Ci0JCQllaV9sb2NhbC0+dHhpbmcgPSAxOwotCQkJTlM4MzkwX3RyaWdnZXJfc2VuZChkZXYsIGVpX2xvY2FsLT50eDIsIGVpX2xvY2FsLT50eF9zdGFydF9wYWdlICsgNik7Ci0JCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJCWVpX2xvY2FsLT50eDIgPSAtMSwKLQkJCWVpX2xvY2FsLT5sYXN0dHggPSAyOwotCQl9Ci0JCWVsc2UgZWlfbG9jYWwtPmxhc3R0eCA9IDIwLCBlaV9sb2NhbC0+dHhpbmcgPSAwOwotCX0KLQllbHNlIGlmIChlaV9sb2NhbC0+dHgyIDwgMCkKLQl7Ci0JCWlmIChlaV9sb2NhbC0+bGFzdHR4ICE9IDIgICYmICBlaV9sb2NhbC0+bGFzdHR4ICE9IC0yKQotCQkJcHJpbnRrKCIlczogYm9ndXMgbGFzdF90eF9idWZmZXIgJWQsIHR4Mj0lZC5cbiIsCi0JCQkJZWlfbG9jYWwtPm5hbWUsIGVpX2xvY2FsLT5sYXN0dHgsIGVpX2xvY2FsLT50eDIpOwotCQllaV9sb2NhbC0+dHgyID0gMDsKLQkJaWYgKGVpX2xvY2FsLT50eDEgPiAwKQotCQl7Ci0JCQllaV9sb2NhbC0+dHhpbmcgPSAxOwotCQkJTlM4MzkwX3RyaWdnZXJfc2VuZChkZXYsIGVpX2xvY2FsLT50eDEsIGVpX2xvY2FsLT50eF9zdGFydF9wYWdlKTsKLQkJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQkJZWlfbG9jYWwtPnR4MSA9IC0xOwotCQkJZWlfbG9jYWwtPmxhc3R0eCA9IDE7Ci0JCX0KLQkJZWxzZQotCQkJZWlfbG9jYWwtPmxhc3R0eCA9IDEwLCBlaV9sb2NhbC0+dHhpbmcgPSAwOwotCX0KLS8vCWVsc2UgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuZXhwZWN0ZWQgVFgtZG9uZSBpbnRlcnJ1cHQsIGxhc3R0eD0lZC5cbiIsCi0vLwkJCWRldi0+bmFtZSwgZWlfbG9jYWwtPmxhc3R0eCk7Ci0KLQkvKiBNaW5pbWl6ZSBUeCBsYXRlbmN5OiB1cGRhdGUgdGhlIHN0YXRpc3RpY3MgYWZ0ZXIgd2UgcmVzdGFydCBUWGluZy4gKi8KLQlpZiAoc3RhdHVzICYgRU5UU1JfQ09MKQotCQllaV9sb2NhbC0+c3RhdC5jb2xsaXNpb25zKys7Ci0JaWYgKHN0YXR1cyAmIEVOVFNSX1BUWCkKLQkJZWlfbG9jYWwtPnN0YXQudHhfcGFja2V0cysrOwotCWVsc2UKLQl7Ci0JCWVpX2xvY2FsLT5zdGF0LnR4X2Vycm9ycysrOwotCQlpZiAoc3RhdHVzICYgRU5UU1JfQUJUKQotCQl7Ci0JCQllaV9sb2NhbC0+c3RhdC50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJZWlfbG9jYWwtPnN0YXQuY29sbGlzaW9ucyArPSAxNjsKLQkJfQotCQlpZiAoc3RhdHVzICYgRU5UU1JfQ1JTKQotCQkJZWlfbG9jYWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIEVOVFNSX0ZVKQotCQkJZWlfbG9jYWwtPnN0YXQudHhfZmlmb19lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIEVOVFNSX0NESCkKLQkJCWVpX2xvY2FsLT5zdGF0LnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIEVOVFNSX09XQykKLQkJCWVpX2xvY2FsLT5zdGF0LnR4X3dpbmRvd19lcnJvcnMrKzsKLQl9Ci0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotfQotCi0vKioKLSAqIGVpX3JlY2VpdmUgLSByZWNlaXZlIHNvbWUgcGFja2V0cwotICogQGRldjogbmV0d29yayBkZXZpY2Ugd2l0aCB3aGljaCByZWNlaXZlIHdpbGwgYmUgcnVuCi0gKgotICogV2UgaGF2ZSBhIGdvb2QgcGFja2V0KHMpLCBnZXQgaXQvdGhlbSBvdXQgb2YgdGhlIGJ1ZmZlcnMuCi0gKiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQuCi0gKi8KLQotc3RhdGljIHZvaWQgZWlfcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBjaGFyIHJ4aW5nX3BhZ2UsIHRoaXNfZnJhbWUsIG5leHRfZnJhbWU7Ci0JdW5zaWduZWQgc2hvcnQgY3VycmVudF9vZmZzZXQ7Ci0JaW50IHJ4X3BrdF9jb3VudCA9IDA7Ci0Jc3RydWN0IGU4MzkwX3BrdF9oZHIgcnhfZnJhbWU7Ci0JaW50IG51bV9yeF9wYWdlcyA9IGVpX2xvY2FsLT5zdG9wX3BhZ2UtZWlfbG9jYWwtPnJ4X3N0YXJ0X3BhZ2U7Ci0KLQl3aGlsZSAoKytyeF9wa3RfY291bnQgPCAxMCkKLQl7Ci0JCWludCBwa3RfbGVuLCBwa3Rfc3RhdDsKLQotCQkvKiBHZXQgdGhlIHJ4IHBhZ2UgKGluY29taW5nIHBhY2tldCBwb2ludGVyKS4gKi8KLQkJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UxLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLQkJcnhpbmdfcGFnZSA9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjFfQ1VSUEFHKTsKLQkJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLQotCQkvKiBSZW1vdmUgb25lIGZyYW1lIGZyb20gdGhlIHJpbmcuICBCb3VuZGFyeSBpcyBhbHdheXMgYSBwYWdlIGJlaGluZC4gKi8KLQkJdGhpc19mcmFtZSA9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjBfQk9VTkRBUlkpICsgMTsKLQkJaWYgKHRoaXNfZnJhbWUgPj0gZWlfbG9jYWwtPnN0b3BfcGFnZSkKLQkJCXRoaXNfZnJhbWUgPSBlaV9sb2NhbC0+cnhfc3RhcnRfcGFnZTsKLQotCQkvKiBTb21lZGF5IHdlJ2xsIG9taXQgdGhlIHByZXZpb3VzLCBpZmYgd2UgbmV2ZXIgZ2V0IHRoaXMgbWVzc2FnZS4KLQkJICAgKFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjbG9uZSBjbGFpbWVkIHRvIGhhdmUgYSBwcm9ibGVtLikKLQotCQkgICBLZWVwIHF1aWV0IGlmIGl0IGxvb2tzIGxpa2UgYSBjYXJkIHJlbW92YWwuIE9uZSBwcm9ibGVtIGhlcmUKLQkJICAgaXMgdGhhdCBzb21lIGNsb25lcyBjcmFzaCBpbiByb3VnaGx5IHRoZSBzYW1lIHdheS4KLQkJICovCi0JCWlmIChlaV9kZWJ1ZyA+IDAgICYmICB0aGlzX2ZyYW1lICE9IGVpX2xvY2FsLT5jdXJyZW50X3BhZ2UgJiYgKHRoaXNfZnJhbWUhPTB4MCB8fCByeGluZ19wYWdlIT0weEZGKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1pc21hdGNoZWQgcmVhZCBwYWdlIHBvaW50ZXJzICUyeCB2cyAlMnguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgdGhpc19mcmFtZSwgZWlfbG9jYWwtPmN1cnJlbnRfcGFnZSk7Ci0KLQkJaWYgKHRoaXNfZnJhbWUgPT0gcnhpbmdfcGFnZSkJLyogUmVhZCBhbGwgdGhlIGZyYW1lcz8gKi8KLQkJCWJyZWFrOwkJCQkvKiBEb25lIGZvciBub3cgKi8KLQotCQljdXJyZW50X29mZnNldCA9IHRoaXNfZnJhbWUgPDwgODsKLQkJZWlfZ2V0XzgzOTBfaGRyKGRldiwgJnJ4X2ZyYW1lLCB0aGlzX2ZyYW1lKTsKLQotCQlwa3RfbGVuID0gcnhfZnJhbWUuY291bnQgLSBzaXplb2Yoc3RydWN0IGU4MzkwX3BrdF9oZHIpOwotCQlwa3Rfc3RhdCA9IHJ4X2ZyYW1lLnN0YXR1czsKLQotCQluZXh0X2ZyYW1lID0gdGhpc19mcmFtZSArIDEgKyAoKHBrdF9sZW4rNCk+PjgpOwotCi0JCS8qIENoZWNrIGZvciBib2dvc2l0eSB3YXJuZWQgYnkgM2M1MDMgYm9vazogdGhlIHN0YXR1cyBieXRlIGlzIG5ldmVyCi0JCSAgIHdyaXR0ZW4uICBUaGlzIGhhcHBlbmVkIGEgbG90IGR1cmluZyB0ZXN0aW5nISBUaGlzIGNvZGUgc2hvdWxkIGJlCi0JCSAgIGNsZWFuZWQgdXAgc29tZWRheS4gKi8KLQkJaWYgKHJ4X2ZyYW1lLm5leHQgIT0gbmV4dF9mcmFtZQotCQkJJiYgcnhfZnJhbWUubmV4dCAhPSBuZXh0X2ZyYW1lICsgMQotCQkJJiYgcnhfZnJhbWUubmV4dCAhPSBuZXh0X2ZyYW1lIC0gbnVtX3J4X3BhZ2VzCi0JCQkmJiByeF9mcmFtZS5uZXh0ICE9IG5leHRfZnJhbWUgKyAxIC0gbnVtX3J4X3BhZ2VzKSB7Ci0JCQllaV9sb2NhbC0+Y3VycmVudF9wYWdlID0gcnhpbmdfcGFnZTsKLQkJCW91dGIoZWlfbG9jYWwtPmN1cnJlbnRfcGFnZS0xLCBlODM5MF9iYXNlK0VOMF9CT1VOREFSWSk7Ci0JCQllaV9sb2NhbC0+c3RhdC5yeF9lcnJvcnMrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHBrdF9sZW4gPCA2MCAgfHwgIHBrdF9sZW4gPiAxNTE4KQotCQl7Ci0JCQlpZiAoZWlfZGVidWcpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQgc2l6ZTogJWQsIHN0YXR1cz0lIzJ4IG54cGc9JSMyeC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgcnhfZnJhbWUuY291bnQsIHJ4X2ZyYW1lLnN0YXR1cywKLQkJCQkJICAgcnhfZnJhbWUubmV4dCk7Ci0JCQllaV9sb2NhbC0+c3RhdC5yeF9lcnJvcnMrKzsKLQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJfQotCQkgZWxzZSBpZiAoKHBrdF9zdGF0ICYgMHgwRikgPT0gRU5SU1JfUlhPSykKLQkJewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKzIpOwotCQkJaWYgKHNrYiA9PSBOVUxMKQotCQkJewotCQkJCWlmIChlaV9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ291bGRuJ3QgYWxsb2NhdGUgYSBza19idWZmIG9mIHNpemUgJWQuXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBwa3RfbGVuKTsKLQkJCQllaV9sb2NhbC0+c3RhdC5yeF9kcm9wcGVkKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJc2tiX3Jlc2VydmUoc2tiLDIpOwkvKiBJUCBoZWFkZXJzIG9uIDE2IGJ5dGUgYm91bmRhcmllcyAqLwotCQkJCXNrYi0+ZGV2ID0gZGV2OwotCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsJLyogTWFrZSByb29tICovCi0JCQkJZWlfYmxvY2tfaW5wdXQoZGV2LCBwa3RfbGVuLCBza2IsIGN1cnJlbnRfb2Zmc2V0ICsgc2l6ZW9mKHJ4X2ZyYW1lKSk7Ci0JCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLQkJCQluZXRpZl9yeChza2IpOwotCQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCQkJZWlfbG9jYWwtPnN0YXQucnhfcGFja2V0cysrOwotCQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2J5dGVzICs9IHBrdF9sZW47Ci0JCQkJaWYgKHBrdF9zdGF0ICYgRU5SU1JfUEhZKQotCQkJCQllaV9sb2NhbC0+c3RhdC5tdWx0aWNhc3QrKzsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCWlmIChlaV9kZWJ1ZykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJvZ3VzIHBhY2tldDogc3RhdHVzPSUjMnggbnhwZz0lIzJ4IHNpemU9JWRcbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgcnhfZnJhbWUuc3RhdHVzLCByeF9mcmFtZS5uZXh0LAotCQkJCQkgICByeF9mcmFtZS5jb3VudCk7Ci0JCQllaV9sb2NhbC0+c3RhdC5yeF9lcnJvcnMrKzsKLQkJCS8qIE5COiBUaGUgTklDIGNvdW50cyBDUkMsIGZyYW1lIGFuZCBtaXNzZWQgZXJyb3JzLiAqLwotCQkJaWYgKHBrdF9zdGF0ICYgRU5SU1JfRk8pCi0JCQkJZWlfbG9jYWwtPnN0YXQucnhfZmlmb19lcnJvcnMrKzsKLQkJfQotCQluZXh0X2ZyYW1lID0gcnhfZnJhbWUubmV4dDsKLQotCQkvKiBUaGlzIF9zaG91bGRfIG5ldmVyIGhhcHBlbjogaXQncyBoZXJlIGZvciBhdm9pZGluZyBiYWQgY2xvbmVzLiAqLwotCQlpZiAobmV4dF9mcmFtZSA+PSBlaV9sb2NhbC0+c3RvcF9wYWdlKSB7Ci0JCQlwcmludGsoIiVzOiBuZXh0IGZyYW1lIGluY29uc2lzdGVuY3ksICUjMnhcbiIsIGRldi0+bmFtZSwKLQkJCQkgICBuZXh0X2ZyYW1lKTsKLQkJCW5leHRfZnJhbWUgPSBlaV9sb2NhbC0+cnhfc3RhcnRfcGFnZTsKLQkJfQotCQllaV9sb2NhbC0+Y3VycmVudF9wYWdlID0gbmV4dF9mcmFtZTsKLQkJb3V0Yl9wKG5leHRfZnJhbWUtMSwgZTgzOTBfYmFzZStFTjBfQk9VTkRBUlkpOwotCX0KLQotCS8qIFdlIHVzZWQgdG8gYWxzbyBhY2sgRU5JU1JfT1ZFUiBoZXJlLCBidXQgdGhhdCB3b3VsZCBzb21ldGltZXMgbWFzawotCSAgIGEgcmVhbCBvdmVycnVuLCBsZWF2aW5nIHRoZSA4MzkwIGluIGEgc3RvcHBlZCBzdGF0ZSB3aXRoIHJlYyd2ciBvZmYuICovCi0Jb3V0Yl9wKEVOSVNSX1JYK0VOSVNSX1JYX0VSUiwgZTgzOTBfYmFzZStFTjBfSVNSKTsKLQlyZXR1cm47Ci19Ci0KLS8qKgotICogZWlfcnhfb3ZlcnJ1biAtIGhhbmRsZSByZWNlaXZlciBvdmVycnVuCi0gKiBAZGV2OiBuZXR3b3JrIGRldmljZSB3aGljaCB0aHJldyBleGNlcHRpb24KLSAqCi0gKiBXZSBoYXZlIGEgcmVjZWl2ZXIgb3ZlcnJ1bjogd2UgaGF2ZSB0byBraWNrIHRoZSA4MzkwIHRvIGdldCBpdCBzdGFydGVkCi0gKiBhZ2Fpbi4gUHJvYmxlbSBpcyB0aGF0IHlvdSBoYXZlIHRvIGtpY2sgaXQgZXhhY3RseSBhcyBOUyBwcmVzY3JpYmVzIGluCi0gKiB0aGUgdXBkYXRlZCBkYXRhc2hlZXRzLCBvciAidGhlIE5JQyBtYXkgYWN0IGluIGFuIHVucHJlZGljdGFibGUgbWFubmVyLiIKLSAqIFRoaXMgaW5jbHVkZXMgY2F1c2luZyAidGhlIE5JQyB0byBkZWZlciBpbmRlZmluaXRlbHkgd2hlbiBpdCBpcyBzdG9wcGVkCi0gKiBvbiBhIGJ1c3kgbmV0d29yay4iICBVZ2guCi0gKiBDYWxsZWQgd2l0aCBsb2NrIGhlbGQuIERvbid0IGNhbGwgdGhpcyB3aXRoIHRoZSBpbnRlcnJ1cHRzIG9mZiBvciB5b3VyCi0gKiBjb21wdXRlciB3aWxsIGhhdGUgeW91IC0gaXQgdGFrZXMgMTBtcyBvciBzby4KLSAqLwotCi1zdGF0aWMgdm9pZCBlaV9yeF9vdmVycnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0JdW5zaWduZWQgY2hhciB3YXNfdHhpbmcsIG11c3RfcmVzZW5kID0gMDsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7Ci0KLQkvKgotCSAqIFJlY29yZCB3aGV0aGVyIGEgVHggd2FzIGluIHByb2dyZXNzIGFuZCB0aGVuIGlzc3VlIHRoZQotCSAqIHN0b3AgY29tbWFuZC4KLQkgKi8KLQl3YXNfdHhpbmcgPSBpbmJfcChlODM5MF9iYXNlK0U4MzkwX0NNRCkgJiBFODM5MF9UUkFOUzsKLQlvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RPUCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOwotCi0JaWYgKGVpX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlciBvdmVycnVuLlxuIiwgZGV2LT5uYW1lKTsKLQllaV9sb2NhbC0+c3RhdC5yeF9vdmVyX2Vycm9ycysrOwotCi0JLyoKLQkgKiBXYWl0IGEgZnVsbCBUeCB0aW1lICgxLjJtcykgKyBzb21lIGd1YXJkIHRpbWUsIE5TIHNheXMgMS42bXMgdG90YWwuCi0JICogRWFybHkgZGF0YXNoZWV0cyBzYWlkIHRvIHBvbGwgdGhlIHJlc2V0IGJpdCwgYnV0IG5vdyB0aGV5IHNheSB0aGF0Ci0JICogaXQgImlzIG5vdCBhIHJlbGlhYmxlIGluZGljYXRvciBhbmQgc3Vic2VxdWVudGx5IHNob3VsZCBiZSBpZ25vcmVkLiIKLQkgKiBXZSB3YWl0IGF0IGxlYXN0IDEwbXMuCi0JICovCi0KLQltZGVsYXkoMTApOwotCi0JLyoKLQkgKiBSZXNldCBSQkNSWzAxXSBiYWNrIHRvIHplcm8gYXMgcGVyIG1hZ2ljIGluY2FudGF0aW9uLgotCSAqLwotCW91dGJfcCgweDAwLCBlODM5MF9iYXNlK0VOMF9SQ05UTE8pOwotCW91dGJfcCgweDAwLCBlODM5MF9iYXNlK0VOMF9SQ05USEkpOwotCi0JLyoKLQkgKiBTZWUgaWYgYW55IFR4IHdhcyBpbnRlcnJ1cHRlZCBvciBub3QuIEFjY29yZGluZyB0byBOUywgdGhpcwotCSAqIHN0ZXAgaXMgdml0YWwsIGFuZCBza2lwcGluZyBpdCB3aWxsIGNhdXNlIG5vIGVuZCBvZiBoYXZvYy4KLQkgKi8KLQotCWlmICh3YXNfdHhpbmcpCi0JewotCQl1bnNpZ25lZCBjaGFyIHR4X2NvbXBsZXRlZCA9IGluYl9wKGU4MzkwX2Jhc2UrRU4wX0lTUikgJiAoRU5JU1JfVFgrRU5JU1JfVFhfRVJSKTsKLQkJaWYgKCF0eF9jb21wbGV0ZWQpCi0JCQltdXN0X3Jlc2VuZCA9IDE7Ci0JfQotCi0JLyoKLQkgKiBIYXZlIHRvIGVudGVyIGxvb3BiYWNrIG1vZGUgYW5kIHRoZW4gcmVzdGFydCB0aGUgTklDIGJlZm9yZQotCSAqIHlvdSBhcmUgYWxsb3dlZCB0byBzbHVycCBwYWNrZXRzIHVwIG9mZiB0aGUgcmluZy4KLQkgKi8KLQlvdXRiX3AoRTgzOTBfVFhPRkYsIGU4MzkwX2Jhc2UgKyBFTjBfVFhDUik7Ci0Jb3V0Yl9wKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTAgKyBFODM5MF9TVEFSVCwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7Ci0KLQkvKgotCSAqIENsZWFyIHRoZSBSeCByaW5nIG9mIGFsbCB0aGUgZGVicmlzLCBhbmQgYWNrIHRoZSBpbnRlcnJ1cHQuCi0JICovCi0JZWlfcmVjZWl2ZShkZXYpOwotCW91dGJfcChFTklTUl9PVkVSLCBlODM5MF9iYXNlK0VOMF9JU1IpOwotCi0JLyoKLQkgKiBMZWF2ZSBsb29wYmFjayBtb2RlLCBhbmQgcmVzZW5kIGFueSBwYWNrZXQgdGhhdCBnb3Qgc3RvcHBlZC4KLQkgKi8KLQlvdXRiX3AoRTgzOTBfVFhDT05GSUcsIGU4MzkwX2Jhc2UgKyBFTjBfVFhDUik7Ci0JaWYgKG11c3RfcmVzZW5kKQotICAgIAkJb3V0Yl9wKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTAgKyBFODM5MF9TVEFSVCArIEU4MzkwX1RSQU5TLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLX0KLQotLyoKLSAqCUNvbGxlY3QgdGhlIHN0YXRzLiBUaGlzIGlzIGNhbGxlZCB1bmxvY2tlZCBhbmQgZnJvbSBzZXZlcmFsIGNvbnRleHRzLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIElmIHRoZSBjYXJkIGlzIHN0b3BwZWQsIGp1c3QgcmV0dXJuIHRoZSBwcmVzZW50IHN0YXRzLiAqLwotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gJmVpX2xvY2FsLT5zdGF0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssZmxhZ3MpOwotCS8qIFJlYWQgdGhlIGNvdW50ZXIgcmVnaXN0ZXJzLCBhc3N1bWluZyB3ZSBhcmUgaW4gcGFnZSAwLiAqLwotCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjApOwotCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjEpOwotCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiAmZWlfbG9jYWwtPnN0YXQ7Ci19Ci0KLS8qCi0gKiBGb3JtIHRoZSA2NCBiaXQgODM5MCBtdWx0aWNhc3QgdGFibGUgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2YgYWRkcmVzc2VzCi0gKiBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXYgc3RydWN0dXJlLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX21jX2JpdHModTggKmJpdHMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWk7Ci0KLQlmb3IgKGRtaT1kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pPWRtaS0+bmV4dCkKLQl7Ci0JCXUzMiBjcmM7Ci0JCWlmIChkbWktPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKQotCQl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBtdWx0aWNhc3QgYWRkcmVzcyBsZW5ndGggZ2l2ZW4uXG4iLCBkZXYtPm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBkbWktPmRtaV9hZGRyKTsKLQkJLyoKLQkJICogVGhlIDgzOTAgdXNlcyB0aGUgNiBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlCi0JCSAqIENSQyB0byBpbmRleCB0aGUgbXVsdGljYXN0IHRhYmxlLgotCQkgKi8KLQkJYml0c1tjcmM+PjI5XSB8PSAoMTw8KChjcmM+PjI2KSY3KSk7Ci0JfQotfQotCi0vKioKLSAqIGRvX3NldF9tdWx0aWNhc3RfbGlzdCAtIHNldC9jbGVhciBtdWx0aWNhc3QgZmlsdGVyCi0gKiBAZGV2OiBuZXQgZGV2aWNlIGZvciB3aGljaCBtdWx0aWNhc3QgZmlsdGVyIGlzIGFkanVzdGVkCi0gKgotICoJU2V0IG9yIGNsZWFyIHRoZSBtdWx0aWNhc3QgZmlsdGVyIGZvciB0aGlzIGFkYXB0b3IuIE1heSBiZSBjYWxsZWQKLSAqCWZyb20gYSBCSCBpbiAyLjEueC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCi0gKi8KLQotc3RhdGljIHZvaWQgZG9fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0JaW50IGk7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSopbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWlmICghKGRldi0+ZmxhZ3MmKElGRl9QUk9NSVNDfElGRl9BTExNVUxUSSkpKQotCXsKLQkJbWVtc2V0KGVpX2xvY2FsLT5tY2ZpbHRlciwgMCwgOCk7Ci0JCWlmIChkZXYtPm1jX2xpc3QpCi0JCQltYWtlX21jX2JpdHMoZWlfbG9jYWwtPm1jZmlsdGVyLCBkZXYpOwotCX0KLQllbHNlCi0JCW1lbXNldChlaV9sb2NhbC0+bWNmaWx0ZXIsIDB4RkYsIDgpOwkvKiBtY2FzdCBzZXQgdG8gYWNjZXB0LWFsbCAqLwotCi0JLyoKLQkgKiBEUDgzOTAgbWFudWFscyBkb24ndCBzcGVjaWZ5IGFueSBtYWdpYyBzZXF1ZW5jZSBmb3IgYWx0ZXJpbmcKLQkgKiB0aGUgbXVsdGljYXN0IHJlZ3Mgb24gYW4gYWxyZWFkeSBydW5uaW5nIGNhcmQuIFRvIGJlIHNhZmUsIHdlCi0JICogZW5zdXJlIG11bHRpY2FzdCBtb2RlIGlzIG9mZiBwcmlvciB0byBsb2FkaW5nIHVwIHRoZSBuZXcgaGFzaAotCSAqIHRhYmxlLiBJZiB0aGlzIHByb3ZlcyB0byBiZSBub3QgZW5vdWdoLCB3ZSBjYW4gYWx3YXlzIHJlc29ydAotCSAqIHRvIHN0b3BwaW5nIHRoZSBOSUMsIGxvYWRpbmcgdGhlIHRhYmxlIGFuZCB0aGVuIHJlc3RhcnRpbmcuCi0JICoKLQkgKiBCdWcgQWxlcnQhICBUaGUgTUMgcmVncyBvbiB0aGUgU01DIDgzQzY5MCAoU01DIEVsaXRlIGFuZCBTTUMKLQkgKiBFbGl0ZTE2KSBhcHBlYXIgdG8gYmUgd3JpdGUtb25seS4gVGhlIE5TIDgzOTAgZGF0YSBzaGVldCBsaXN0cwotCSAqIHRoZW0gYXMgci93IHNvIHRoaXMgaXMgYSBidWcuICBUaGUgU01DIDgzQzc5MCAoU01DIFVsdHJhIGFuZAotCSAqIFVsdHJhMzIgRUlTQSkgYXBwZWFycyB0byBoYXZlIHRoaXMgYnVnIGZpeGVkLgotCSAqLwotCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwotCW91dGJfcChFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLQlmb3IoaSA9IDA7IGkgPCA4OyBpKyspCi0JewotCQlvdXRiX3AoZWlfbG9jYWwtPm1jZmlsdGVyW2ldLCBlODM5MF9iYXNlICsgRU4xX01VTFRfU0hJRlQoaSkpOwotI2lmbmRlZiBCVUdfODNDNjkwCi0JCWlmKGluYl9wKGU4MzkwX2Jhc2UgKyBFTjFfTVVMVF9TSElGVChpKSkhPWVpX2xvY2FsLT5tY2ZpbHRlcltpXSkKLQkJCXByaW50ayhLRVJOX0VSUiAiTXVsdGljYXN0IGZpbHRlciByZWFkL3dyaXRlIG1pc21hcCAlZFxuIixpKTsKLSNlbmRpZgotCX0KLQlvdXRiX3AoRTgzOTBfTk9ETUEgKyBFODM5MF9QQUdFMCwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7Ci0KLSAgCWlmKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MpCi0gIAkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHIHwgMHgxOCwgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKLQllbHNlIGlmKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJIHx8IGRldi0+bWNfbGlzdCkKLSAgCQlvdXRiX3AoRTgzOTBfUlhDT05GSUcgfCAweDA4LCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwotICAJZWxzZQotICAJCW91dGJfcChFODM5MF9SWENPTkZJRywgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKLSB9Ci0KLS8qCi0gKglDYWxsZWQgd2l0aG91dCBsb2NrIGhlbGQuIFRoaXMgaXMgaW52b2tlZCBmcm9tIHVzZXIgY29udGV4dCBhbmQgbWF5Ci0gKgliZSBwYXJhbGxlbCB0byBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgZWxzZS4gSXRzIGFsc28gZmFpcmx5IHF1aWNrIGFuZAotICoJbm90IGNhbGxlZCB0b28gb2Z0ZW4uIE11c3QgcHJvdGVjdCBhZ2FpbnN0IGJvdGggYmggYW5kIGlycSB1c2VycwotICovCi0KLXN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSopbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7Ci0JZG9fc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwotfQotCi0vKioKLSAqIGV0aGRldl9zZXR1cCAtIGluaXQgcmVzdCBvZiA4MzkwIGRldmljZSBzdHJ1Y3QKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSB0byBpbml0Ci0gKgotICogSW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgODM5MCBkZXZpY2Ugc3RydWN0dXJlLiAgRG8gTk9UIF9faW5pdAotICogdGhpcywgYXMgaXQgaXMgdXNlZCBieSA4MzkwIGJhc2VkIG1vZHVsYXIgZHJpdmVycyB0b28uCi0gKi8KLQotc3RhdGljIHZvaWQgZXRoZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwotCWlmIChlaV9kZWJ1ZyA+IDEpCi0JCXByaW50ayh2ZXJzaW9uKTsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVpX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJPSBnZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotCi0JZXRoZXJfc2V0dXAoZGV2KTsKLQotCXNwaW5fbG9ja19pbml0KCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLX0KLQotLyoqCi0gKiBhbGxvY19laV9uZXRkZXYgLSBhbGxvY19ldGhlcmRldiBjb3VudGVycGFydCBmb3IgODM5MAotICogQHNpemU6IGV4dHJhIGJ5dGVzIHRvIGFsbG9jYXRlCi0gKgotICogQWxsb2NhdGUgODM5MC1zcGVjaWZpYyBuZXRfZGV2aWNlLgotICovCiBzdHJ1Y3QgbmV0X2RldmljZSAqX19hbGxvY19laV9uZXRkZXYoaW50IHNpemUpCiB7Ci0JcmV0dXJuIGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGVpX2RldmljZSkgKyBzaXplLCAiZXRoJWQiLAotCQkJCWV0aGRldl9zZXR1cCk7CisJcmV0dXJuIF9fX19hbGxvY19laV9uZXRkZXYoc2l6ZSk7CiB9CiAKLQotCi0KLS8qIFRoaXMgcGFnZSBvZiBmdW5jdGlvbnMgc2hvdWxkIGJlIDgzOTAgZ2VuZXJpYyAqLwotLyogRm9sbG93IE5hdGlvbmFsIFNlbWkncyByZWNvbW1lbmRhdGlvbnMgZm9yIGluaXRpYWxpemluZyB0aGUgIk5JQyIuICovCi0KLS8qKgotICogTlM4MzkwX2luaXQgLSBpbml0aWFsaXplIDgzOTAgaGFyZHdhcmUKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGluaXRpYWxpemUKLSAqIEBzdGFydHA6IGJvb2xlYW4uICBub24temVybyB2YWx1ZSB0byBpbml0aWF0ZSBjaGlwIHByb2Nlc3NpbmcKLSAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2sgaGVsZC4KLSAqLwotCiB2b2lkIE5TODM5MF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydHApCiB7Ci0JbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCWludCBlbmRjZmcgPSBlaV9sb2NhbC0+d29yZDE2Ci0JICAgID8gKDB4NDggfCBFTkRDRkdfV1RTIHwgKGVpX2xvY2FsLT5iaWdlbmRpYW4gPyBFTkRDRkdfQk9TIDogMCkpCi0JICAgIDogMHg0ODsKLQotCWlmKHNpemVvZihzdHJ1Y3QgZTgzOTBfcGt0X2hkcikhPTQpCi0gICAgCQlwYW5pYygiODM5MC5jOiBoZWFkZXIgc3RydWN0IG1pc3BhY2tlZFxuIik7Ci0JLyogRm9sbG93IE5hdGlvbmFsIFNlbWkncyByZWNvbW1lbmRhdGlvbnMgZm9yIGluaXRpbmcgdGhlIERQODM5MDIuICovCi0Jb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUT1AsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsgLyogMHgyMSAqLwotCW91dGJfcChlbmRjZmcsIGU4MzkwX2Jhc2UgKyBFTjBfRENGRyk7CS8qIDB4NDggb3IgMHg0OSAqLwotCS8qIENsZWFyIHRoZSByZW1vdGUgYnl0ZSBjb3VudCByZWdpc3RlcnMuICovCi0Jb3V0Yl9wKDB4MDAsICBlODM5MF9iYXNlICsgRU4wX1JDTlRMTyk7Ci0Jb3V0Yl9wKDB4MDAsICBlODM5MF9iYXNlICsgRU4wX1JDTlRISSk7Ci0JLyogU2V0IHRvIG1vbml0b3IgYW5kIGxvb3BiYWNrIG1vZGUgLS0gdGhpcyBpcyB2aXRhbCEuICovCi0Jb3V0Yl9wKEU4MzkwX1JYT0ZGLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOyAvKiAweDIwICovCi0Jb3V0Yl9wKEU4MzkwX1RYT0ZGLCBlODM5MF9iYXNlICsgRU4wX1RYQ1IpOyAvKiAweDAyICovCi0JLyogU2V0IHRoZSB0cmFuc21pdCBwYWdlIGFuZCByZWNlaXZlIHJpbmcuICovCi0Jb3V0Yl9wKGVpX2xvY2FsLT50eF9zdGFydF9wYWdlLCBlODM5MF9iYXNlICsgRU4wX1RQU1IpOwotCWVpX2xvY2FsLT50eDEgPSBlaV9sb2NhbC0+dHgyID0gMDsKLQlvdXRiX3AoZWlfbG9jYWwtPnJ4X3N0YXJ0X3BhZ2UsIGU4MzkwX2Jhc2UgKyBFTjBfU1RBUlRQRyk7Ci0Jb3V0Yl9wKGVpX2xvY2FsLT5zdG9wX3BhZ2UtMSwgZTgzOTBfYmFzZSArIEVOMF9CT1VOREFSWSk7CS8qIDNjNTAzIHNheXMgMHgzZixOUzB4MjYqLwotCWVpX2xvY2FsLT5jdXJyZW50X3BhZ2UgPSBlaV9sb2NhbC0+cnhfc3RhcnRfcGFnZTsJCS8qIGFzc2VydCBib3VuZGFyeSsxICovCi0Jb3V0Yl9wKGVpX2xvY2FsLT5zdG9wX3BhZ2UsIGU4MzkwX2Jhc2UgKyBFTjBfU1RPUFBHKTsKLQkvKiBDbGVhciB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCBtYXNrLiAqLwotCW91dGJfcCgweEZGLCBlODM5MF9iYXNlICsgRU4wX0lTUik7Ci0Jb3V0Yl9wKDB4MDAsICBlODM5MF9iYXNlICsgRU4wX0lNUik7Ci0KLQkvKiBDb3B5IHRoZSBzdGF0aW9uIGFkZHJlc3MgaW50byB0aGUgRFM4MzkwIHJlZ2lzdGVycy4gKi8KLQotCW91dGJfcChFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxICsgRTgzOTBfU1RPUCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOyAvKiAweDYxICovCi0JZm9yKGkgPSAwOyBpIDwgNjsgaSsrKQotCXsKLQkJb3V0Yl9wKGRldi0+ZGV2X2FkZHJbaV0sIGU4MzkwX2Jhc2UgKyBFTjFfUEhZU19TSElGVChpKSk7Ci0JCWlmIChlaV9kZWJ1ZyA+IDEgJiYgaW5iX3AoZTgzOTBfYmFzZSArIEVOMV9QSFlTX1NISUZUKGkpKSE9ZGV2LT5kZXZfYWRkcltpXSkKLQkJCXByaW50ayhLRVJOX0VSUiAiSHcuIGFkZHJlc3MgcmVhZC93cml0ZSBtaXNtYXAgJWRcbiIsaSk7Ci0JfQotCi0Jb3V0Yl9wKGVpX2xvY2FsLT5yeF9zdGFydF9wYWdlLCBlODM5MF9iYXNlICsgRU4xX0NVUlBBRyk7Ci0Jb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUT1AsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKLQotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JZWlfbG9jYWwtPnR4MSA9IGVpX2xvY2FsLT50eDIgPSAwOwotCWVpX2xvY2FsLT50eGluZyA9IDA7Ci0KLQlpZiAoc3RhcnRwKQotCXsKLQkJb3V0Yl9wKDB4ZmYsICBlODM5MF9iYXNlICsgRU4wX0lTUik7Ci0JCW91dGJfcChFTklTUl9BTEwsICBlODM5MF9iYXNlICsgRU4wX0lNUik7Ci0JCW91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVEFSVCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOwotCQlvdXRiX3AoRTgzOTBfVFhDT05GSUcsIGU4MzkwX2Jhc2UgKyBFTjBfVFhDUik7IC8qIHhtaXQgb24uICovCi0JCS8qIDNjNTAzIFRlY2hNYW4gc2F5cyByeGNvbmZpZyBvbmx5IGFmdGVyIHRoZSBOSUMgaXMgc3RhcnRlZC4gKi8KLQkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOyAvKiByeCBvbiwgICovCi0JCWRvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwkvKiAocmUpbG9hZCB0aGUgbWNhc3QgdGFibGUgKi8KLQl9Ci19Ci0KLS8qIFRyaWdnZXIgYSB0cmFuc21pdCBzdGFydCwgYXNzdW1pbmcgdGhlIGxlbmd0aCBpcyB2YWxpZC4KLSAgIEFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgcGFnZSBsb2NrIGhlbGQgKi8KLQotc3RhdGljIHZvaWQgTlM4MzkwX3RyaWdnZXJfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAotCQkJCQkJCQlpbnQgc3RhcnRfcGFnZSkKLXsKLQlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKLSAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgX19hdHRyaWJ1dGUoKHVudXNlZCkpID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLQotCW91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOwotCi0JaWYgKGluYl9wKGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpICYgRTgzOTBfVFJBTlMpCi0JewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJpZ2dlcl9zZW5kKCkgY2FsbGVkIHdpdGggdGhlIHRyYW5zbWl0dGVyIGJ1c3kuXG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlvdXRiX3AobGVuZ3RoICYgMHhmZiwgZTgzOTBfYmFzZSArIEVOMF9UQ05UTE8pOwotCW91dGJfcChsZW5ndGggPj4gOCwgZTgzOTBfYmFzZSArIEVOMF9UQ05USEkpOwotCW91dGJfcChzdGFydF9wYWdlLCBlODM5MF9iYXNlICsgRU4wX1RQU1IpOwotCW91dGJfcChFODM5MF9OT0RNQStFODM5MF9UUkFOUytFODM5MF9TVEFSVCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOworCXJldHVybiBfX05TODM5MF9pbml0KGRldiwgc3RhcnRwKTsKIH0KIAogRVhQT1JUX1NZTUJPTChlaV9vcGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuaCBiL2RyaXZlcnMvbmV0LzgzOTAuaAppbmRleCBmNDRmMTIyLi40MTRkZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmgKKysrIGIvZHJpdmVycy9uZXQvODM5MC5oCkBAIC0xMDcsMzUgKzEwNywxNCBAQAogICogICAgICAtIHJlbW92ZWQgQU1JR0FfUENNQ0lBIGZyb20gdGhpcyBsaXN0LCBoYW5kbGVkIGFzIElTQSBpbyBub3cKICAqLwogCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDKSB8fCAgXAotICAgIGRlZmluZWQoQ09ORklHX1pPUlJPODM5MCkgfHwgZGVmaW5lZChDT05GSUdfWk9SUk84MzkwX01PRFVMRSkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0hZRFJBKSB8fCBkZWZpbmVkKENPTkZJR19IWURSQV9NT0RVTEUpCi0jZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKLSN1bmRlZiBpbmIKLSN1bmRlZiBpbmJfcAotI3VuZGVmIG91dGIKLSN1bmRlZiBvdXRiX3AKKyNpZm5kZWYgZWlfaW5iCisjZGVmaW5lIGVpX2luYihfcCkJaW5iKF9wKQorI2RlZmluZSBlaV9vdXRiKF92LF9wKQlvdXRiKF92LF9wKQorI2RlZmluZSBlaV9pbmJfcChfcCkJaW5iX3AoX3ApCisjZGVmaW5lIGVpX291dGJfcChfdixfcCkgb3V0Yl9wKF92LF9wKQorI2VuZGlmCiAKLSNkZWZpbmUgaW5iKHBvcnQpICAgaW5fOChwb3J0KQotI2RlZmluZSBvdXRiKHZhbCxwb3J0KSAgb3V0XzgocG9ydCx2YWwpCi0jZGVmaW5lIGluYl9wKHBvcnQpICAgaW5fOChwb3J0KQotI2RlZmluZSBvdXRiX3AodmFsLHBvcnQpICBvdXRfOChwb3J0LHZhbCkKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJNX0VUSEVSSCkgfHwgZGVmaW5lZChDT05GSUdfQVJNX0VUSEVSSF9NT0RVTEUpCi0jZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKLSN1bmRlZiBpbmIKLSN1bmRlZiBpbmJfcAotI3VuZGVmIG91dGIKLSN1bmRlZiBvdXRiX3AKLQotI2RlZmluZSBpbmIoX3ApCQlyZWFkYihfcCkKLSNkZWZpbmUgb3V0YihfdixfcCkJd3JpdGViKF92LF9wKQotI2RlZmluZSBpbmJfcChfcCkJaW5iKF9wKQotI2RlZmluZSBvdXRiX3AoX3YsX3ApCW91dGIoX3YsX3ApCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX05FX0g4MzAwKSB8fCBkZWZpbmVkKENPTkZJR19ORV9IODMwMF9NT0RVTEUpCi0jZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKLSNlbHNlCisjaWZuZGVmIEVJX1NISUZUCiAjZGVmaW5lIEVJX1NISUZUKHgpCSh4KQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGI2YzcwYzUuLjlkZTBlZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMTg4LDYgKzE4OCwxNyBAQAogCSAgb3IgaW50ZXJuYWwgZGV2aWNlLiAgSXQgaXMgc2FmZSB0byBzYXkgWSBvciBNIGhlcmUgZXZlbiBpZiB5b3VyCiAJICBldGhlcm5ldCBjYXJkIGxhY2sgTUlJLgogCitjb25maWcgTUFDQgorCXRyaXN0YXRlICJBdG1lbCBNQUNCIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgQVZSMzIKKwlzZWxlY3QgTUlJCisJaGVscAorCSAgVGhlIEF0bWVsIE1BQ0IgZXRoZXJuZXQgaW50ZXJmYWNlIGlzIGZvdW5kIG9uIG1hbnkgQVQzMiBhbmQgQVQ5MQorCSAgcGFydHMuIFNheSBZIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIE1BQ0IgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbWFjYi4KKwogc291cmNlICJkcml2ZXJzL25ldC9hcm0vS2NvbmZpZyIKIAogY29uZmlnIE1BQ0UKQEAgLTE3NjksOCArMTc4MCw4IEBACiAJICBpbmZvcm1hdGlvbi4KIAogY29uZmlnIExBTl9TQUE5NzMwCi0JYm9vbCAiUGhpbGlwcyBTQUE5NzMwIEV0aGVybmV0IHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBORVRfUENJICYmIEVYUEVSSU1FTlRBTCAmJiBNSVBTCisJYm9vbCAiUGhpbGlwcyBTQUE5NzMwIEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfUENJICYmIFBDSSAmJiBNSVBTX0FUTEFTCiAJaGVscAogCSAgVGhlIFNBQTk3MzAgaXMgYSBjb21iaW5lZCBtdWx0aW1lZGlhIGFuZCBwZXJpcGhlcmFsIGNvbnRyb2xsZXIgdXNlZAogCSAgaW4gdGhpbiBjbGllbnRzLCBJbnRlcm5ldCBhY2Nlc3MgdGVybWluYWxzLCBhbmQgZGlza2xlc3MKQEAgLTIyNTEsNiArMjI2MiwxNCBAQAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEdpZ2FiaXQgRXRoZXJuZXQgY2hpcHMgcHJlc2VudCBvbiB0aGUKIAkgIENlbGwgUHJvY2Vzc29yLUJhc2VkIEJsYWRlcyBmcm9tIElCTS4KIAorY29uZmlnIFRTSTEwOF9FVEgKKwkgICB0cmlzdGF0ZSAiVHVuZHJhIFRTSTEwOCBnaWdhYml0IEV0aGVybmV0IHN1cHBvcnQiCisJICAgZGVwZW5kcyBvbiBUU0kxMDhfQlJJREdFCisJICAgaGVscAorCSAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgVHVuZHJhIFRTSTEwOCBnaWdhYml0IEV0aGVybmV0IHBvcnRzLgorCSAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgICAgd2lsbCBiZSBjYWxsZWQgdHNpMTA4X2V0aC4KKwogY29uZmlnIEdJQU5GQVIKIAl0cmlzdGF0ZSAiR2lhbmZhciBFdGhlcm5ldCIKIAlkZXBlbmRzIG9uIDg1eHggfHwgODN4eCB8fCBQUENfODZ4eApAQCAtMjM0MSwxMCArMjM2MCwxMSBAQAogY29uZmlnIENIRUxTSU9fVDEKICAgICAgICAgdHJpc3RhdGUgIkNoZWxzaW8gMTBHYiBFdGhlcm5ldCBzdXBwb3J0IgogICAgICAgICBkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBDUkMzMgogICAgICAgICBoZWxwCi0gICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQ2hlbHNpbyBOMTEwIGFuZCBOMjEwIG1vZGVscyAxMEdiIEV0aGVybmV0Ci0gICAgICAgICAgY2FyZHMuIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWRhcHRlciBmZWF0dXJlcyBhbmQgcGVyZm9ybWFuY2UKLSAgICAgICAgICB0dW5pbmcgaXMgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4Z2IudHh0Pi4KKyAgICAgICAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBDaGVsc2lvIGdpZ2FiaXQgYW5kIDEwLWdpZ2FiaXQKKyAgICAgICAgICBFdGhlcm5ldCBjYXJkcy4gTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBhZGFwdGVyIGZlYXR1cmVzIGFuZAorCSAgcGVyZm9ybWFuY2UgdHVuaW5nIGlzIGluIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9jeGdiLnR4dD4uCiAKICAgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBDaGVsc2lvIGFuZCBvdXIgcHJvZHVjdHMsIHZpc2l0CiAgICAgICAgICAgb3VyIHdlYnNpdGUgYXQgPGh0dHA6Ly93d3cuY2hlbHNpby5jb20+LgpAQCAtMjM1Nyw2ICsyMzc3LDEzIEBACiAgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGN4Z2IuCiAKK2NvbmZpZyBDSEVMU0lPX1QxXzFHCisgICAgICAgIGJvb2wgIkNoZWxzaW8gZ2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIENIRUxTSU9fVDEKKyAgICAgICAgaGVscAorICAgICAgICAgIEVuYWJsZXMgc3VwcG9ydCBmb3IgQ2hlbHNpbydzIGdpZ2FiaXQgRXRoZXJuZXQgUENJIGNhcmRzLiAgSWYgeW91CisgICAgICAgICAgYXJlIHVzaW5nIG9ubHkgMTBHIGNhcmRzIHNheSAnTicgaGVyZS4KKwogY29uZmlnIEVIRUEKIAl0cmlzdGF0ZSAiZUhFQSBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSUJNRUJVUwpAQCAtMjQ0Nyw2ICsyNDc0LDEyIEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIG15cmkxMGdlLgogCitjb25maWcgTkVUWEVOX05JQworCXRyaXN0YXRlICJOZXRYZW4gTXVsdGkgcG9ydCAoMS8xMCkgR2lnYWJpdCBFdGhlcm5ldCBOSUMiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgdGhlIHN1cHBvcnQgZm9yIE5ldFhlbidzIEdpZ2FiaXQgRXRoZXJuZXQgY2FyZC4KKwogZW5kbWVudQogCiBzb3VyY2UgImRyaXZlcnMvbmV0L3Rva2VucmluZy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCBmMjcwYmM0Li40YzBkNGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtODIsNyArODIsNyBAQAogb2JqLSQoQ09ORklHX05FVCkgKz0gU3BhY2UubyBsb29wYmFjay5vCiBvYmotJChDT05GSUdfU0VFUTgwMDUpICs9IHNlZXE4MDA1Lm8KIG9iai0kKENPTkZJR19ORVRfU0IxMDAwKSArPSBzYjEwMDAubwotb2JqLSQoQ09ORklHX01BQzgzOTApICs9IG1hYzgzOTAubyA4MzkwLm8KK29iai0kKENPTkZJR19NQUM4MzkwKSArPSBtYWM4MzkwLm8KIG9iai0kKENPTkZJR19BUE5FKSArPSBhcG5lLm8gODM5MC5vCiBvYmotJChDT05GSUdfUENNQ0lBX1BDTkVUKSArPSA4MzkwLm8KIG9iai0kKENPTkZJR19TSEFQRVIpICs9IHNoYXBlci5vCkBAIC05MCw3ICs5MCw2IEBACiBvYmotJChDT05GSUdfU01DOTE5NCkgKz0gc21jOTE5NC5vCiBvYmotJChDT05GSUdfRkVDKSArPSBmZWMubwogb2JqLSQoQ09ORklHXzY4MzYwX0VORVQpICs9IDY4MzYwZW5ldC5vCi1vYmotJChDT05GSUdfQVJNX0VUSEVSSCkgKz0gODM5MC5vCiBvYmotJChDT05GSUdfV0Q4MHgzKSArPSB3ZC5vIDgzOTAubwogb2JqLSQoQ09ORklHX0VMMikgKz0gM2M1MDMubyA4MzkwLm8KIG9iai0kKENPTkZJR19ORTIwMDApICs9IG5lLm8gODM5MC5vCkBAIC0xMDcsOCArMTA2LDkgQEAKIG9iai0kKENPTkZJR19ORVRfU0IxMjUwX01BQykgKz0gc2IxMjUwLW1hYy5vCiBvYmotJChDT05GSUdfQjQ0KSArPSBiNDQubwogb2JqLSQoQ09ORklHX0ZPUkNFREVUSCkgKz0gZm9yY2VkZXRoLm8KLW9iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubyA4MzkwLm8KK29iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubwogCitvYmotJChDT05GSUdfVFNJMTA4X0VUSCkgKz0gdHNpMTA4X2V0aC5vCiBvYmotJChDT05GSUdfTVY2NDNYWF9FVEgpICs9IG12NjQzeHhfZXRoLm8KIG9iai0kKENPTkZJR19RTEEzWFhYKSArPSBxbGEzeHh4Lm8KIApAQCAtMTY1LDcgKzE2NSw3IEBACiBvYmotJChDT05GSUdfTFA0ODZFKSArPSBscDQ4NmUubwogCiBvYmotJChDT05GSUdfRVRIMTZJKSArPSBldGgxNmkubwotb2JqLSQoQ09ORklHX1pPUlJPODM5MCkgKz0gem9ycm84MzkwLm8gODM5MC5vCitvYmotJChDT05GSUdfWk9SUk84MzkwKSArPSB6b3JybzgzOTAubwogb2JqLSQoQ09ORklHX0hQTEFOQ0UpICs9IGhwbGFuY2UubyA3OTkwLm8KIG9iai0kKENPTkZJR19NVk1FMTQ3X05FVCkgKz0gbXZtZTE0Ny5vIDc5OTAubwogb2JqLSQoQ09ORklHX0VRVUFMSVpFUikgKz0gZXFsLm8KQEAgLTE3OCw3ICsxNzgsNyBAQAogb2JqLSQoQ09ORklHX0FUQVJJX0JJT05FVCkgKz0gYXRhcmlfYmlvbmV0Lm8KIG9iai0kKENPTkZJR19BVEFSSV9QQU1TTkVUKSArPSBhdGFyaV9wYW1zbmV0Lm8KIG9iai0kKENPTkZJR19BMjA2NSkgKz0gYTIwNjUubwotb2JqLSQoQ09ORklHX0hZRFJBKSArPSBoeWRyYS5vIDgzOTAubworb2JqLSQoQ09ORklHX0hZRFJBKSArPSBoeWRyYS5vCiBvYmotJChDT05GSUdfQVJJQURORSkgKz0gYXJpYWRuZS5vCiBvYmotJChDT05GSUdfQ1M4OXgwKSArPSBjczg5eDAubwogb2JqLSQoQ09ORklHX01BQ1NPTklDKSArPSBtYWNzb25pYy5vCkBAIC0xOTcsNiArMTk3LDggQEAKIG9iai0kKENPTkZJR19ETTkwMDApICs9IGRtOTAwMC5vCiBvYmotJChDT05GSUdfRkVDXzhYWCkgKz0gZmVjXzh4eC8KIAorb2JqLSQoQ09ORklHX01BQ0IpICs9IG1hY2IubworCiBvYmotJChDT05GSUdfQVJNKSArPSBhcm0vCiBvYmotJChDT05GSUdfREVWX0FQUExFVEFMSykgKz0gYXBwbGV0YWxrLwogb2JqLSQoQ09ORklHX1RSKSArPSB0b2tlbnJpbmcvCkBAIC0yMTQsMyArMjE2LDQgQEAKIAogb2JqLSQoQ09ORklHX0ZTX0VORVQpICs9IGZzX2VuZXQvCiAKK29iai0kKENPTkZJR19ORVRYRU5fTklDKSArPSBuZXR4ZW4vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9TcGFjZS5jIGIvZHJpdmVycy9uZXQvU3BhY2UuYwppbmRleCBhNjdmNWVmLi42MDJlZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9TcGFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L1NwYWNlLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bGludXgvZGl2ZXJ0Lmg+CiAKIC8qIEEgdW5pZmllZCBldGhlcm5ldCBkZXZpY2UgcHJvYmUuICBUaGlzIGlzIHRoZSBlYXNpZXN0IHdheSB0byBoYXZlIGV2ZXJ5CiAgICBldGhlcm5ldCBhZGFwdG9yIGhhdmUgdGhlIG5hbWUgImV0aFswMTIzLi4uXSIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwppbmRleCBlZjY1ZTU5Li4xODg5NmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKQEAgLTE0OTAsMzIgKzE0OTAsNyBAQAogCWJ1ZlsxMl0gPSByZWFkbChtbWlvICsgU1RBVDApOwogfQogCi0vKgotYW1kODExMWUgY3JjIGdlbmVyYXRvciBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUga2VybmVsCi1ldGhlcl9jcmMoKSBmdW5jdGlvbi4KLSovCi1zdGF0aWMgaW50IGFtZDgxMTFlX2V0aGVyX2NyYyhpbnQgbGVuLCBjaGFyKiBtYWNfYWRkcikKLXsKLQlpbnQgaSxieXRlOwotCXVuc2lnbmVkIGNoYXIgb2N0ZXQ7Ci0JdTMyIGNyYz0gSU5JVENSQzsKIAotCWZvcihieXRlPTA7IGJ5dGUgPCBsZW47IGJ5dGUrKyl7Ci0JCW9jdGV0ID0gbWFjX2FkZHJbYnl0ZV07Ci0JCWZvciggaT0wO2kgPCA4OyBpKyspewotCQkJLypJZiB0aGUgbmV4dCBiaXQgZm9ybSB0aGUgaW5wdXQgc3RyZWFtIGlzIDEsc3VidHJhY3QJCQkJIHRoZSBkaXZpc29yIChDUkMzMikgZnJvbSB0aGUgZGl2aWRlbmQoY3JjKS4qLwotCQkJaWYoIChvY3RldCAmIDB4MSkgXiAoY3JjICYgMHgxKSApewotCQkJCWNyYyA+Pj0gMTsKLQkJCQljcmMgXj0gQ1JDMzI7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJY3JjID4+PSAxOwotCi0JCQlvY3RldCA+Pj0gMTsKLQkJfQotCX0KLQlyZXR1cm4gY3JjOwotfQogLyoKIFRoaXMgZnVuY3Rpb24gc2V0cyBwcm9taXNjdW9zIG1vZGUsIGFsbC1tdWx0aSBtb2RlIG9yIHRoZSBtdWx0aWNhc3QgYWRkcmVzcwogbGlzdCB0byB0aGUgZGV2aWNlLgpAQCAtMTU1Niw3ICsxNTMxLDcgQEAKIAltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwogCWZvciAoaSA9IDAsIG1jX3B0ciA9IGRldi0+bWNfbGlzdDsgbWNfcHRyICYmIGkgPCBkZXYtPm1jX2NvdW50OwogCQkgICAgIGkrKywgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7Ci0JCWJpdF9udW0gPSAoIGFtZDgxMTFlX2V0aGVyX2NyYyhFVEhfQUxFTixtY19wdHItPmRtaV9hZGRyKQkJCQkJCQkgPj4gMjYgKSAmIDB4M2Y7CisJCWJpdF9udW0gPSAoZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY19wdHItPmRtaV9hZGRyKSA+PiAyNikgJiAweDNmOwogCQltY19maWx0ZXJbYml0X251bSA+PiA1XSB8PSAxIDw8IChiaXRfbnVtICYgMzEpOwogCX0KIAlhbWQ4MTExZV93cml0ZXEoKih1NjQqKW1jX2ZpbHRlcixscC0+bW1pbysgTEFEUkYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuaCBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmgKaW5kZXggNzcyN2QzMi4uMjAwNzUxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuaAorKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5oCkBAIC02NTEsMTAgKzY1MSw2IEBACiAvKiBkcml2ZXIgaW9jdGwgcGFyYW1ldGVycyAqLwogI2RlZmluZSBBTUQ4MTExRV9SRUdfRFVNUF9MRU4JIDEzKnNpemVvZih1MzIpCiAKLS8qIGNyYyBnZW5lcmF0b3IgY29uc3RhbnRzICovCi0jZGVmaW5lIENSQzMyIDB4ZWRiODgzMjAKLSNkZWZpbmUgSU5JVENSQyAweEZGRkZGRkZGCi0KIC8qIGFtZDgxMTFlIGRlc3JpcHRvciBmb3JtYXQgKi8KIAogc3RydWN0IGFtZDgxMTFlX3R4X2RyewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCmluZGV4IDRhZTk4OTcuLmYzZmFhNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKQEAgLTUyLDcgKzUyLDEyIEBACiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlICIuLi84MzkwLmgiCisjZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKKworI2RlZmluZSBlaV9pbmIoX3ApCSByZWFkYigodm9pZCBfX2lvbWVtICopX3ApCisjZGVmaW5lIGVpX291dGIoX3YsX3ApCSB3cml0ZWIoX3YsKHZvaWQgX19pb21lbSAqKV9wKQorI2RlZmluZSBlaV9pbmJfcChfcCkJIHJlYWRiKCh2b2lkIF9faW9tZW0gKilfcCkKKyNkZWZpbmUgZWlfb3V0Yl9wKF92LF9wKSB3cml0ZWIoX3YsKHZvaWQgX19pb21lbSAqKV9wKQogCiAjZGVmaW5lIE5FVF9ERUJVRyAgMAogI2RlZmluZSBERUJVR19JTklUIDIKQEAgLTYwLDYgKzY1LDExIEBACiAjZGVmaW5lIERSVl9OQU1FCSJldGhlcmgiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjExIgogCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CisJIkV0aGVySC9FdGhlck0gRHJpdmVyIChjKSAyMDAyLTIwMDQgUnVzc2VsbCBLaW5nICIgRFJWX1ZFUlNJT04gIlxuIjsKKworI2luY2x1ZGUgIi4uL2xpYjgzOTAuYyIKKwogc3RhdGljIHVuc2lnbmVkIGludCBuZXRfZGVidWcgPSBORVRfREVCVUc7CiAKIHN0cnVjdCBldGhlcmhfcHJpdiB7CkBAIC04Nyw5ICs5Nyw2IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkV0aGVySC9FdGhlck0gZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0KLQkiRXRoZXJIL0V0aGVyTSBEcml2ZXIgKGMpIDIwMDItMjAwNCBSdXNzZWxsIEtpbmcgIiBEUlZfVkVSU0lPTiAiXG4iOwotCiAjZGVmaW5lIEVUSEVSSDUwMF9EQVRBUE9SVAkweDgwMAkvKiBNRU1DICovCiAjZGVmaW5lIEVUSEVSSDUwMF9OUzgzOTAJMHgwMDAJLyogTUVNQyAqLwogI2RlZmluZSBFVEhFUkg1MDBfQ1RSTFBPUlQJMHg4MDAJLyogSU9DICAqLwpAQCAtMTc3LDcgKzE4NCw3IEBACiAJc3dpdGNoIChldGhlcmhfcHJpdihkZXYpLT5pZCkgewogCWNhc2UgUFJPRF9JM19FVEhFUkxBTjYwMDoKIAljYXNlIFBST0RfSTNfRVRIRVJMQU42MDBBOgotCQlhZGRyID0gKHZvaWQgKilkZXYtPmJhc2VfYWRkciArIEVOMF9SQ05USEk7CisJCWFkZHIgPSAodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHIgKyBFTjBfUkNOVEhJOwogCiAJCXN3aXRjaCAoZGV2LT5pZl9wb3J0KSB7CiAJCWNhc2UgSUZfUE9SVF8xMEJBU0UyOgpAQCAtMjE4LDcgKzIyNSw3IEBACiAJc3dpdGNoIChldGhlcmhfcHJpdihkZXYpLT5pZCkgewogCWNhc2UgUFJPRF9JM19FVEhFUkxBTjYwMDoKIAljYXNlIFBST0RfSTNfRVRIRVJMQU42MDBBOgotCQlhZGRyID0gKHZvaWQgKilkZXYtPmJhc2VfYWRkciArIEVOMF9SQ05USEk7CisJCWFkZHIgPSAodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHIgKyBFTjBfUkNOVEhJOwogCQlzd2l0Y2ggKGRldi0+aWZfcG9ydCkgewogCQljYXNlIElGX1BPUlRfMTBCQVNFMjoKIAkJCXN0YXQgPSAxOwpAQCAtMjgxLDcgKzI4OCw3IEBACiBldGhlcmhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICphZGRyID0gKHZvaWQgKilkZXYtPmJhc2VfYWRkcjsKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSAodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAKIAl3cml0ZWIoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RPUCwgYWRkcik7CiAKQEAgLTMyNyw3ICszMzQsNyBAQAogCiAJZWlfbG9jYWwtPmRtYWluZyA9IDE7CiAKLQlhZGRyID0gKHZvaWQgKilkZXYtPmJhc2VfYWRkcjsKKwlhZGRyID0gKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyOwogCWRtYV9iYXNlID0gZXRoZXJoX3ByaXYoZGV2KS0+ZG1hX2Jhc2U7CiAKIAljb3VudCA9IChjb3VudCArIDEpICYgfjE7CkBAIC0zNjAsNyArMzY3LDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgVFggUkRDXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCQlldGhlcmhfcmVzZXQgKGRldik7Ci0JCQlOUzgzOTBfaW5pdCAoZGV2LCAxKTsKKwkJCV9fTlM4MzkwX2luaXQgKGRldiwgMSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0zODcsNyArMzk0LDcgQEAKIAogCWVpX2xvY2FsLT5kbWFpbmcgPSAxOwogCi0JYWRkciA9ICh2b2lkICopZGV2LT5iYXNlX2FkZHI7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKIAlkbWFfYmFzZSA9IGV0aGVyaF9wcml2KGRldiktPmRtYV9iYXNlOwogCiAJYnVmID0gc2tiLT5kYXRhOwpAQCAtNDI3LDcgKzQzNCw3IEBACiAKIAllaV9sb2NhbC0+ZG1haW5nID0gMTsKIAotCWFkZHIgPSAodm9pZCAqKWRldi0+YmFzZV9hZGRyOworCWFkZHIgPSAodm9pZCBfX2lvbWVtICopZGV2LT5iYXNlX2FkZHI7CiAJZG1hX2Jhc2UgPSBldGhlcmhfcHJpdihkZXYpLT5kbWFfYmFzZTsKIAogCXdyaXRlYiAoRTgzOTBfTk9ETUEgfCBFODM5MF9QQUdFMCB8IEU4MzkwX1NUQVJULCBhZGRyICsgRTgzOTBfQ01EKTsKQEAgLTQ2NSw3ICs0NzIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpKQorCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgX19laV9pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAkvKgpAQCAtNDkxLDcgKzQ5OCw3IEBACiAJCWV0aGVyaF9zZXRpZihkZXYpOwogCiAJZXRoZXJoX3Jlc2V0KGRldik7Ci0JZWlfb3BlbihkZXYpOworCV9fZWlfb3BlbihkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MDIsNyArNTA5LDcgQEAKIHN0YXRpYyBpbnQKIGV0aGVyaF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWVpX2Nsb3NlIChkZXYpOworCV9fZWlfY2xvc2UgKGRldik7CiAJZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOwogCXJldHVybiAwOwogfQpAQCAtNjUwLDcgKzY1Nyw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXYgPSBfX2FsbG9jX2VpX25ldGRldihzaXplb2Yoc3RydWN0IGV0aGVyaF9wcml2KSk7CisJZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldihzaXplb2Yoc3RydWN0IGV0aGVyaF9wcml2KSk7CiAJaWYgKCFkZXYpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byByZWxlYXNlOwpAQCAtNzM2LDcgKzc0Myw3IEBACiAJZWlfbG9jYWwtPmludGVyZmFjZV9udW0gPSAwOwogCiAJZXRoZXJoX3Jlc2V0KGRldik7Ci0JTlM4MzkwX2luaXQoZGV2LCAwKTsKKwlfX05TODM5MF9pbml0KGRldiwgMCk7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDdkYjNjOGEuLmYwYjY4NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTM2MCw3ICszNjAsOCBAQAogCUJVR19PTighcGh5ZGV2KTsKIAlCVUdfT04ocGh5ZGV2LT5hdHRhY2hlZF9kZXYpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsICZhdTEwMDBfYWRqdXN0X2xpbmssIDApOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLCAmYXUxMDAwX2FkanVzdF9saW5rLCAwLAorCQkJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggMDFiNzZkMy4uZmMyZjFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtNTMsMTEgKzUzLDEyIEBACiAKICNpbmNsdWRlICJibngyLmgiCiAjaW5jbHVkZSAiYm54Ml9mdy5oIgorI2luY2x1ZGUgImJueDJfZncyLmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjQ1IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIlNlcHRlbWJlciAyOSwgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjUuMSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJOb3ZlbWJlciAxNSwgMjAwNiIKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKQEAgLTg1LDYgKzg2LDcgQEAKIAlOQzM3MEYsCiAJQkNNNTcwOCwKIAlCQ001NzA4UywKKwlCQ001NzA5LAogfSBib2FyZF90OwogCiAvKiBpbmRleGVkIGJ5IGJvYXJkX3QsIGFib3ZlICovCkBAIC05OCw2ICsxMDAsNyBAQAogCXsgIkhQIE5DMzcwRiBNdWx0aWZ1bmN0aW9uIEdpZ2FiaXQgU2VydmVyIEFkYXB0ZXIiIH0sCiAJeyAiQnJvYWRjb20gTmV0WHRyZW1lIElJIEJDTTU3MDggMTAwMEJhc2UtVCIgfSwKIAl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcwOCAxMDAwQmFzZS1TWCIgfSwKKwl7ICJCcm9hZGNvbSBOZXRYdHJlbWUgSUkgQkNNNTcwOSAxMDAwQmFzZS1UIiB9LAogCX07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBibngyX3BjaV90YmxbXSA9IHsKQEAgLTExNSw2ICsxMTgsOCBAQAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQkNNNTcwNlMgfSwKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3MDhTLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQkNNNTcwOFMgfSwKKwl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3MDksCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCQ001NzA5IH0sCiAJeyAwLCB9CiB9OwogCkBAIC0yMzYsOCArMjQxLDIzIEBACiBibngyX2N0eF93cihzdHJ1Y3QgYm54MiAqYnAsIHUzMiBjaWRfYWRkciwgdTMyIG9mZnNldCwgdTMyIHZhbCkKIHsKIAlvZmZzZXQgKz0gY2lkX2FkZHI7Ci0JUkVHX1dSKGJwLCBCTlgyX0NUWF9EQVRBX0FEUiwgb2Zmc2V0KTsKLQlSRUdfV1IoYnAsIEJOWDJfQ1RYX0RBVEEsIHZhbCk7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CisJCWludCBpOworCisJCVJFR19XUihicCwgQk5YMl9DVFhfQ1RYX0RBVEEsIHZhbCk7CisJCVJFR19XUihicCwgQk5YMl9DVFhfQ1RYX0NUUkwsCisJCSAgICAgICBvZmZzZXQgfCBCTlgyX0NUWF9DVFhfQ1RSTF9XUklURV9SRVEpOworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQl1MzIgdmFsOworCQkJdmFsID0gUkVHX1JEKGJwLCBCTlgyX0NUWF9DVFhfQ1RSTCk7CisJCQlpZiAoKHZhbCAmIEJOWDJfQ1RYX0NUWF9DVFJMX1dSSVRFX1JFUSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCXVkZWxheSg1KTsKKwkJfQorCX0gZWxzZSB7CisJCVJFR19XUihicCwgQk5YMl9DVFhfREFUQV9BRFIsIG9mZnNldCk7CisJCVJFR19XUihicCwgQk5YMl9DVFhfREFUQSwgdmFsKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQwMyw2ICs0MjMsMTQgQEAKIHsKIAlpbnQgaTsKIAorCWZvciAoaSA9IDA7IGkgPCBicC0+Y3R4X3BhZ2VzOyBpKyspIHsKKwkJaWYgKGJwLT5jdHhfYmxrW2ldKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGJwLT5wZGV2LCBCQ01fUEFHRV9TSVpFLAorCQkJCQkgICAgYnAtPmN0eF9ibGtbaV0sCisJCQkJCSAgICBicC0+Y3R4X2Jsa19tYXBwaW5nW2ldKTsKKwkJCWJwLT5jdHhfYmxrW2ldID0gTlVMTDsKKwkJfQorCX0KIAlpZiAoYnAtPnN0YXR1c19ibGspIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChicC0+cGRldiwgYnAtPnN0YXR1c19zdGF0c19zaXplLAogCQkJCSAgICBicC0+c3RhdHVzX2JsaywgYnAtPnN0YXR1c19ibGtfbWFwcGluZyk7CkBAIC00ODEsNiArNTA5LDE4IEBACiAKIAlicC0+c3RhdHNfYmxrX21hcHBpbmcgPSBicC0+c3RhdHVzX2Jsa19tYXBwaW5nICsgc3RhdHVzX2Jsa19zaXplOwogCisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CisJCWJwLT5jdHhfcGFnZXMgPSAweDIwMDAgLyBCQ01fUEFHRV9TSVpFOworCQlpZiAoYnAtPmN0eF9wYWdlcyA9PSAwKQorCQkJYnAtPmN0eF9wYWdlcyA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCBicC0+Y3R4X3BhZ2VzOyBpKyspIHsKKwkJCWJwLT5jdHhfYmxrW2ldID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYnAtPnBkZXYsCisJCQkJCQlCQ01fUEFHRV9TSVpFLAorCQkJCQkJJmJwLT5jdHhfYmxrX21hcHBpbmdbaV0pOworCQkJaWYgKGJwLT5jdHhfYmxrW2ldID09IE5VTEwpCisJCQkJZ290byBhbGxvY19tZW1fZXJyOworCQl9CisJfQogCXJldHVybiAwOwogCiBhbGxvY19tZW1fZXJyOgpAQCAtODAzLDEzICs4NDMsMTMgQEAKIAogCXZhbCAmPSB+KEJOWDJfRU1BQ19NT0RFX1BPUlQgfCBCTlgyX0VNQUNfTU9ERV9IQUxGX0RVUExFWCB8CiAJCUJOWDJfRU1BQ19NT0RFX01BQ19MT09QIHwgQk5YMl9FTUFDX01PREVfRk9SQ0VfTElOSyB8Ci0JCUJOWDJfRU1BQ19NT0RFXzI1Ryk7CisJCUJOWDJfRU1BQ19NT0RFXzI1R19NT0RFKTsKIAogCWlmIChicC0+bGlua191cCkgewogCQlzd2l0Y2ggKGJwLT5saW5lX3NwZWVkKSB7CiAJCQljYXNlIFNQRUVEXzEwOgotCQkJCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkgewotCQkJCQl2YWwgfD0gQk5YMl9FTUFDX01PREVfUE9SVF9NSUlfMTA7CisJCQkJaWYgKENISVBfTlVNKGJwKSAhPSBDSElQX05VTV81NzA2KSB7CisJCQkJCXZhbCB8PSBCTlgyX0VNQUNfTU9ERV9QT1JUX01JSV8xME07CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTgxNyw3ICs4NTcsNyBAQAogCQkJCXZhbCB8PSBCTlgyX0VNQUNfTU9ERV9QT1JUX01JSTsKIAkJCQlicmVhazsKIAkJCWNhc2UgU1BFRURfMjUwMDoKLQkJCQl2YWwgfD0gQk5YMl9FTUFDX01PREVfMjVHOworCQkJCXZhbCB8PSBCTlgyX0VNQUNfTU9ERV8yNUdfTU9ERTsKIAkJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJCWNhc2UgU1BFRURfMTAwMDoKIAkJCQl2YWwgfD0gQk5YMl9FTUFDX01PREVfUE9SVF9HTUlJOwpAQCAtODYwLDcgKzkwMCw3IEBACiAJdTMyIGJtc3I7CiAJdTggbGlua191cDsKIAotCWlmIChicC0+bG9vcGJhY2sgPT0gTUFDX0xPT1BCQUNLKSB7CisJaWYgKGJwLT5sb29wYmFjayA9PSBNQUNfTE9PUEJBQ0sgfHwgYnAtPmxvb3BiYWNrID09IFBIWV9MT09QQkFDSykgewogCQlicC0+bGlua191cCA9IDE7CiAJCXJldHVybiAwOwogCX0KQEAgLTkwMiw2ICs5NDIsNyBAQAogCQkJdTMyIGJtY3I7CiAKIAkJCWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTUNSLCAmYm1jcik7CisJCQlibWNyICY9IH5CQ001NzA4U19CTUNSX0ZPUkNFXzI1MDA7CiAJCQlpZiAoIShibWNyICYgQk1DUl9BTkVOQUJMRSkpIHsKIAkJCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JNQ1IsIGJtY3IgfAogCQkJCQlCTUNSX0FORU5BQkxFKTsKQEAgLTk4OCw3ICsxMDI5LDIxIEBACiAJCXUzMiBuZXdfYm1jcjsKIAkJaW50IGZvcmNlX2xpbmtfZG93biA9IDA7CiAKLQkJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA4KSB7CisJCWJueDJfcmVhZF9waHkoYnAsIE1JSV9BRFZFUlRJU0UsICZhZHYpOworCQlhZHYgJj0gfihBRFZFUlRJU0VfMTAwMFhGVUxMIHwgQURWRVJUSVNFXzEwMDBYSEFMRik7CisKKwkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNQ1IsICZibWNyKTsKKwkJbmV3X2JtY3IgPSBibWNyICYgfihCTUNSX0FORU5BQkxFIHwgQkNNNTcwOFNfQk1DUl9GT1JDRV8yNTAwKTsKKwkJbmV3X2JtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CisJCWlmIChicC0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfMjUwMCkgeworCQkJbmV3X2JtY3IgfD0gQkNNNTcwOFNfQk1DUl9GT1JDRV8yNTAwOworCQkJYm54Ml9yZWFkX3BoeShicCwgQkNNNTcwOFNfVVAxLCAmdXAxKTsKKwkJCWlmICghKHVwMSAmIEJDTTU3MDhTX1VQMV8yRzUpKSB7CisJCQkJdXAxIHw9IEJDTTU3MDhTX1VQMV8yRzU7CisJCQkJYm54Ml93cml0ZV9waHkoYnAsIEJDTTU3MDhTX1VQMSwgdXAxKTsKKwkJCQlmb3JjZV9saW5rX2Rvd24gPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA4KSB7CiAJCQlibngyX3JlYWRfcGh5KGJwLCBCQ001NzA4U19VUDEsICZ1cDEpOwogCQkJaWYgKHVwMSAmIEJDTTU3MDhTX1VQMV8yRzUpIHsKIAkJCQl1cDEgJj0gfkJDTTU3MDhTX1VQMV8yRzU7CkBAIC05OTcsMTIgKzEwNTIsNiBAQAogCQkJfQogCQl9CiAKLQkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0FEVkVSVElTRSwgJmFkdik7Ci0JCWFkdiAmPSB+KEFEVkVSVElTRV8xMDAwWEZVTEwgfCBBRFZFUlRJU0VfMTAwMFhIQUxGKTsKLQotCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1DUiwgJmJtY3IpOwotCQluZXdfYm1jciA9IGJtY3IgJiB+Qk1DUl9BTkVOQUJMRTsKLQkJbmV3X2JtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CiAJCWlmIChicC0+cmVxX2R1cGxleCA9PSBEVVBMRVhfRlVMTCkgewogCQkJYWR2IHw9IEFEVkVSVElTRV8xMDAwWEZVTEw7CiAJCQluZXdfYm1jciB8PSBCTUNSX0ZVTExEUExYOwpAQCAtMTAyMyw2ICsxMDcyLDcgQEAKIAkJCQlicC0+bGlua191cCA9IDA7CiAJCQkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7CiAJCQkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTUNSLCBuZXdfYm1jcik7CisJCQkJYm54Ml9yZXBvcnRfbGluayhicCk7CiAJCQl9CiAJCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0FEVkVSVElTRSwgYWR2KTsKIAkJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk1DUiwgbmV3X2JtY3IpOwpAQCAtMTA0OCwzMCArMTA5OCwyNiBAQAogCWlmICgoYWR2ICE9IG5ld19hZHYpIHx8ICgoYm1jciAmIEJNQ1JfQU5FTkFCTEUpID09IDApKSB7CiAJCS8qIEZvcmNlIGEgbGluayBkb3duIHZpc2libGUgb24gdGhlIG90aGVyIHNpZGUgKi8KIAkJaWYgKGJwLT5saW5rX3VwKSB7Ci0JCQlpbnQgaTsKLQogCQkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAxMTA7IGkrKykgewotCQkJCXVkZWxheSgxMDApOwotCQkJfQorCQkJc3Bpbl91bmxvY2tfYmgoJmJwLT5waHlfbG9jayk7CisJCQltc2xlZXAoMjApOworCQkJc3Bpbl9sb2NrX2JoKCZicC0+cGh5X2xvY2spOwogCQl9CiAKIAkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9BRFZFUlRJU0UsIG5ld19hZHYpOwogCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JNQ1IsIGJtY3IgfCBCTUNSX0FOUkVTVEFSVCB8CiAJCQlCTUNSX0FORU5BQkxFKTsKLQkJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA2KSB7Ci0JCQkvKiBTcGVlZCB1cCBsaW5rLXVwIHRpbWUgd2hlbiB0aGUgbGluayBwYXJ0bmVyCi0JCQkgKiBkb2VzIG5vdCBhdXRvbmVnb3RpYXRlIHdoaWNoIGlzIHZlcnkgY29tbW9uCi0JCQkgKiBpbiBibGFkZSBzZXJ2ZXJzLiBTb21lIGJsYWRlIHNlcnZlcnMgdXNlCi0JCQkgKiBJUE1JIGZvciBrZXJib2FyZCBpbnB1dCBhbmQgaXQncyBpbXBvcnRhbnQKLQkJCSAqIHRvIG1pbmltaXplIGxpbmsgZGlzcnVwdGlvbnMuIEF1dG9uZWcuIGludm9sdmVzCi0JCQkgKiBleGNoYW5naW5nIGJhc2UgcGFnZXMgcGx1cyAzIG5leHQgcGFnZXMgYW5kCi0JCQkgKiBub3JtYWxseSBjb21wbGV0ZXMgaW4gYWJvdXQgMTIwIG1zZWMuCi0JCQkgKi8KLQkJCWJwLT5jdXJyZW50X2ludGVydmFsID0gU0VSREVTX0FOX1RJTUVPVVQ7Ci0JCQlicC0+c2VyZGVzX2FuX3BlbmRpbmcgPSAxOwotCQkJbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7Ci0JCX0KKwkJLyogU3BlZWQgdXAgbGluay11cCB0aW1lIHdoZW4gdGhlIGxpbmsgcGFydG5lcgorCQkgKiBkb2VzIG5vdCBhdXRvbmVnb3RpYXRlIHdoaWNoIGlzIHZlcnkgY29tbW9uCisJCSAqIGluIGJsYWRlIHNlcnZlcnMuIFNvbWUgYmxhZGUgc2VydmVycyB1c2UKKwkJICogSVBNSSBmb3Iga2VyYm9hcmQgaW5wdXQgYW5kIGl0J3MgaW1wb3J0YW50CisJCSAqIHRvIG1pbmltaXplIGxpbmsgZGlzcnVwdGlvbnMuIEF1dG9uZWcuIGludm9sdmVzCisJCSAqIGV4Y2hhbmdpbmcgYmFzZSBwYWdlcyBwbHVzIDMgbmV4dCBwYWdlcyBhbmQKKwkJICogbm9ybWFsbHkgY29tcGxldGVzIGluIGFib3V0IDEyMCBtc2VjLgorCQkgKi8KKwkJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSBTRVJERVNfQU5fVElNRU9VVDsKKwkJYnAtPnNlcmRlc19hbl9wZW5kaW5nID0gMTsKKwkJbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTUzLDcgKzExOTksNiBAQAogCX0KIAlpZiAobmV3X2JtY3IgIT0gYm1jcikgewogCQl1MzIgYm1zcjsKLQkJaW50IGkgPSAwOwogCiAJCWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTVNSLCAmYm1zcik7CiAJCWJueDJfcmVhZF9waHkoYnAsIE1JSV9CTVNSLCAmYm1zcik7CkBAIC0xMTYxLDEyICsxMjA2LDEyIEBACiAJCWlmIChibXNyICYgQk1TUl9MU1RBVFVTKSB7CiAJCQkvKiBGb3JjZSBsaW5rIGRvd24gKi8KIAkJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyk7Ci0JCQlkbyB7Ci0JCQkJdWRlbGF5KDEwMCk7Ci0JCQkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNU1IsICZibXNyKTsKLQkJCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1TUiwgJmJtc3IpOwotCQkJCWkrKzsKLQkJCX0gd2hpbGUgKChibXNyICYgQk1TUl9MU1RBVFVTKSAmJiAoaSA8IDYyMCkpOworCQkJc3Bpbl91bmxvY2tfYmgoJmJwLT5waHlfbG9jayk7CisJCQltc2xlZXAoNTApOworCQkJc3Bpbl9sb2NrX2JoKCZicC0+cGh5X2xvY2spOworCisJCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1TUiwgJmJtc3IpOworCQkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNU1IsICZibXNyKTsKIAkJfQogCiAJCWJueDJfd3JpdGVfcGh5KGJwLCBNSUlfQk1DUiwgbmV3X2JtY3IpOwpAQCAtMTI1OCw5ICsxMzAzLDggQEAKIHsKIAlicC0+cGh5X2ZsYWdzICY9IH5QSFlfUEFSQUxMRUxfREVURUNUX0ZMQUc7CiAKLQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDYpIHsKLSAgICAgICAgCVJFR19XUihicCwgQk5YMl9NSVNDX1VOVVNFRDAsIDB4MzAwKTsKLQl9CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA2KQorICAgICAgICAJUkVHX1dSKGJwLCBCTlgyX01JU0NfR1BfSFdfQ1RMMCwgMHgzMDApOwogCiAJaWYgKGJwLT5kZXYtPm10dSA+IDE1MDApIHsKIAkJdTMyIHZhbDsKQEAgLTEzOTcsMTMgKzE0NDEsMTMgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQlpZiAoYm54Ml90ZXN0X2xpbmsoYnApID09IDApCiAJCQlicmVhazsKLQkJdWRlbGF5KDEwKTsKKwkJbXNsZWVwKDEwMCk7CiAJfQogCiAJbWFjX21vZGUgPSBSRUdfUkQoYnAsIEJOWDJfRU1BQ19NT0RFKTsKIAltYWNfbW9kZSAmPSB+KEJOWDJfRU1BQ19NT0RFX1BPUlQgfCBCTlgyX0VNQUNfTU9ERV9IQUxGX0RVUExFWCB8CiAJCSAgICAgIEJOWDJfRU1BQ19NT0RFX01BQ19MT09QIHwgQk5YMl9FTUFDX01PREVfRk9SQ0VfTElOSyB8Ci0JCSAgICAgIEJOWDJfRU1BQ19NT0RFXzI1Ryk7CisJCSAgICAgIEJOWDJfRU1BQ19NT0RFXzI1R19NT0RFKTsKIAogCW1hY19tb2RlIHw9IEJOWDJfRU1BQ19NT0RFX1BPUlRfR01JSTsKIAlSRUdfV1IoYnAsIEJOWDJfRU1BQ19NT0RFLCBtYWNfbW9kZSk7CkBAIC0xNDU0LDYgKzE0OTgsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorYm54Ml9pbml0XzU3MDlfY29udGV4dChzdHJ1Y3QgYm54MiAqYnApCit7CisJaW50IGksIHJldCA9IDA7CisJdTMyIHZhbDsKKworCXZhbCA9IEJOWDJfQ1RYX0NPTU1BTkRfRU5BQkxFRCB8IEJOWDJfQ1RYX0NPTU1BTkRfTUVNX0lOSVQgfCAoMSA8PCAxMik7CisJdmFsIHw9IChCQ01fUEFHRV9CSVRTIC0gOCkgPDwgMTY7CisJUkVHX1dSKGJwLCBCTlgyX0NUWF9DT01NQU5ELCB2YWwpOworCWZvciAoaSA9IDA7IGkgPCBicC0+Y3R4X3BhZ2VzOyBpKyspIHsKKwkJaW50IGo7CisKKwkJUkVHX1dSKGJwLCBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEEwLAorCQkgICAgICAgKGJwLT5jdHhfYmxrX21hcHBpbmdbaV0gJiAweGZmZmZmZmZmKSB8CisJCSAgICAgICBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEEwX1ZBTElEKTsKKwkJUkVHX1dSKGJwLCBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEExLAorCQkgICAgICAgKHU2NCkgYnAtPmN0eF9ibGtfbWFwcGluZ1tpXSA+PiAzMik7CisJCVJFR19XUihicCwgQk5YMl9DVFhfSE9TVF9QQUdFX1RCTF9DVFJMLCBpIHwKKwkJICAgICAgIEJOWDJfQ1RYX0hPU1RfUEFHRV9UQkxfQ1RSTF9XUklURV9SRVEpOworCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykgeworCisJCQl2YWwgPSBSRUdfUkQoYnAsIEJOWDJfQ1RYX0hPU1RfUEFHRV9UQkxfQ1RSTCk7CisJCQlpZiAoISh2YWwgJiBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0NUUkxfV1JJVEVfUkVRKSkKKwkJCQlicmVhazsKKwkJCXVkZWxheSg1KTsKKwkJfQorCQlpZiAodmFsICYgQk5YMl9DVFhfSE9TVF9QQUdFX1RCTF9DVFJMX1dSSVRFX1JFUSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQKIGJueDJfaW5pdF9jb250ZXh0KHN0cnVjdCBibngyICpicCkKIHsKQEAgLTE1NzYsOSArMTY1NCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmICh1bmxpa2VseSgoYWxpZ24gPSAodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhICYgMHg3KSkpIHsKLQkJc2tiX3Jlc2VydmUoc2tiLCA4IC0gYWxpZ24pOwotCX0KKwlpZiAodW5saWtlbHkoKGFsaWduID0gKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSAmIChCTlgyX1JYX0FMSUdOIC0gMSkpKSkKKwkJc2tiX3Jlc2VydmUoc2tiLCBCTlgyX1JYX0FMSUdOIC0gYWxpZ24pOwogCiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGJwLT5yeF9idWZfdXNlX3NpemUsCiAJCVBDSV9ETUFfRlJPTURFVklDRSk7CkBAIC0yMDQwLDcgKzIxMTcsOCBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogUHJvbWlzY3VvdXMgbW9kZS4gKi8KIAkJcnhfbW9kZSB8PSBCTlgyX0VNQUNfUlhfTU9ERV9QUk9NSVNDVU9VUzsKLQkJc29ydF9tb2RlIHw9IEJOWDJfUlBNX1NPUlRfVVNFUjBfUFJPTV9FTjsKKwkJc29ydF9tb2RlIHw9IEJOWDJfUlBNX1NPUlRfVVNFUjBfUFJPTV9FTiB8CisJCQkgICAgIEJOWDJfUlBNX1NPUlRfVVNFUjBfUFJPTV9WTEFOOwogCX0KIAllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fTUNfSEFTSF9SRUdJU1RFUlM7IGkrKykgewpAQCAtMjIwOCwxMSArMjI4NiwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIGxvYWRfY3B1X2Z3KHN0cnVjdCBibngyICpicCwgc3RydWN0IGNwdV9yZWcgKmNwdV9yZWcsIHN0cnVjdCBmd19pbmZvICpmdykKIHsKIAl1MzIgb2Zmc2V0OwogCXUzMiB2YWw7CisJaW50IHJjOwogCiAJLyogSGFsdCB0aGUgQ1BVLiAqLwogCXZhbCA9IFJFR19SRF9JTkQoYnAsIGNwdV9yZWctPm1vZGUpOwpAQCAtMjIyMiw3ICsyMzAxLDE4IEBACiAKIAkvKiBMb2FkIHRoZSBUZXh0IGFyZWEuICovCiAJb2Zmc2V0ID0gY3B1X3JlZy0+c3BhZF9iYXNlICsgKGZ3LT50ZXh0X2FkZHIgLSBjcHVfcmVnLT5taXBzX3ZpZXdfYmFzZSk7Ci0JaWYgKGZ3LT50ZXh0KSB7CisJaWYgKGZ3LT5nel90ZXh0KSB7CisJCXUzMiB0ZXh0X2xlbjsKKwkJdm9pZCAqdGV4dDsKKworCQlyYyA9IGJueDJfZ3VuemlwKGJwLCBmdy0+Z3pfdGV4dCwgZnctPmd6X3RleHRfbGVuLCAmdGV4dCwKKwkJCQkgJnRleHRfbGVuKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCisJCWZ3LT50ZXh0ID0gdGV4dDsKKwl9CisJaWYgKGZ3LT5nel90ZXh0KSB7CiAJCWludCBqOwogCiAJCWZvciAoaiA9IDA7IGogPCAoZnctPnRleHRfbGVuIC8gNCk7IGorKywgb2Zmc2V0ICs9IDQpIHsKQEAgLTIyODAsMTMgKzIzNzAsMTUgQEAKIAl2YWwgJj0gfmNwdV9yZWctPm1vZGVfdmFsdWVfaGFsdDsKIAlSRUdfV1JfSU5EKGJwLCBjcHVfcmVnLT5zdGF0ZSwgY3B1X3JlZy0+c3RhdGVfdmFsdWVfY2xlYXIpOwogCVJFR19XUl9JTkQoYnAsIGNwdV9yZWctPm1vZGUsIHZhbCk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogYm54Ml9pbml0X2NwdXMoc3RydWN0IGJueDIgKmJwKQogewogCXN0cnVjdCBjcHVfcmVnIGNwdV9yZWc7Ci0Jc3RydWN0IGZ3X2luZm8gZnc7CisJc3RydWN0IGZ3X2luZm8gKmZ3OwogCWludCByYyA9IDA7CiAJdm9pZCAqdGV4dDsKIAl1MzIgdGV4dF9sZW47CkBAIC0yMzIzLDQ0ICsyNDE1LDE1IEBACiAJY3B1X3JlZy5zcGFkX2Jhc2UgPSBCTlgyX1JYUF9TQ1JBVENIOwogCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7CiAKLQlmdy52ZXJfbWFqb3IgPSBibngyX1JYUF9iMDZGd1JlbGVhc2VNYWpvcjsKLQlmdy52ZXJfbWlub3IgPSBibngyX1JYUF9iMDZGd1JlbGVhc2VNaW5vcjsKLQlmdy52ZXJfZml4ID0gYm54Ml9SWFBfYjA2RndSZWxlYXNlRml4OwotCWZ3LnN0YXJ0X2FkZHIgPSBibngyX1JYUF9iMDZGd1N0YXJ0QWRkcjsKKwlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpCisJCWZ3ID0gJmJueDJfcnhwX2Z3XzA5OworCWVsc2UKKwkJZncgPSAmYm54Ml9yeHBfZndfMDY7CiAKLQlmdy50ZXh0X2FkZHIgPSBibngyX1JYUF9iMDZGd1RleHRBZGRyOwotCWZ3LnRleHRfbGVuID0gYm54Ml9SWFBfYjA2RndUZXh0TGVuOwotCWZ3LnRleHRfaW5kZXggPSAwOwotCi0JcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9SWFBfYjA2RndUZXh0LCBzaXplb2YoYm54Ml9SWFBfYjA2RndUZXh0KSwKLQkJCSAmdGV4dCwgJnRleHRfbGVuKTsKKwlyYyA9IGxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZywgZncpOwogCWlmIChyYykKIAkJZ290byBpbml0X2NwdV9lcnI7CiAKLQlmdy50ZXh0ID0gdGV4dDsKLQotCWZ3LmRhdGFfYWRkciA9IGJueDJfUlhQX2IwNkZ3RGF0YUFkZHI7Ci0JZncuZGF0YV9sZW4gPSBibngyX1JYUF9iMDZGd0RhdGFMZW47Ci0JZncuZGF0YV9pbmRleCA9IDA7Ci0JZncuZGF0YSA9IGJueDJfUlhQX2IwNkZ3RGF0YTsKLQotCWZ3LnNic3NfYWRkciA9IGJueDJfUlhQX2IwNkZ3U2Jzc0FkZHI7Ci0JZncuc2Jzc19sZW4gPSBibngyX1JYUF9iMDZGd1Nic3NMZW47Ci0JZncuc2Jzc19pbmRleCA9IDA7Ci0JZncuc2JzcyA9IGJueDJfUlhQX2IwNkZ3U2JzczsKLQotCWZ3LmJzc19hZGRyID0gYm54Ml9SWFBfYjA2RndCc3NBZGRyOwotCWZ3LmJzc19sZW4gPSBibngyX1JYUF9iMDZGd0Jzc0xlbjsKLQlmdy5ic3NfaW5kZXggPSAwOwotCWZ3LmJzcyA9IGJueDJfUlhQX2IwNkZ3QnNzOwotCi0JZncucm9kYXRhX2FkZHIgPSBibngyX1JYUF9iMDZGd1JvZGF0YUFkZHI7Ci0JZncucm9kYXRhX2xlbiA9IGJueDJfUlhQX2IwNkZ3Um9kYXRhTGVuOwotCWZ3LnJvZGF0YV9pbmRleCA9IDA7Ci0JZncucm9kYXRhID0gYm54Ml9SWFBfYjA2RndSb2RhdGE7Ci0KLQlsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWcsICZmdyk7Ci0KIAkvKiBJbml0aWFsaXplIHRoZSBUWCBQcm9jZXNzb3IuICovCiAJY3B1X3JlZy5tb2RlID0gQk5YMl9UWFBfQ1BVX01PREU7CiAJY3B1X3JlZy5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX1RYUF9DUFVfTU9ERV9TT0ZUX0hBTFQ7CkBAIC0yMzc1LDQ0ICsyNDM4LDE1IEBACiAJY3B1X3JlZy5zcGFkX2Jhc2UgPSBCTlgyX1RYUF9TQ1JBVENIOwogCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7CiAKLQlmdy52ZXJfbWFqb3IgPSBibngyX1RYUF9iMDZGd1JlbGVhc2VNYWpvcjsKLQlmdy52ZXJfbWlub3IgPSBibngyX1RYUF9iMDZGd1JlbGVhc2VNaW5vcjsKLQlmdy52ZXJfZml4ID0gYm54Ml9UWFBfYjA2RndSZWxlYXNlRml4OwotCWZ3LnN0YXJ0X2FkZHIgPSBibngyX1RYUF9iMDZGd1N0YXJ0QWRkcjsKKwlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpCisJCWZ3ID0gJmJueDJfdHhwX2Z3XzA5OworCWVsc2UKKwkJZncgPSAmYm54Ml90eHBfZndfMDY7CiAKLQlmdy50ZXh0X2FkZHIgPSBibngyX1RYUF9iMDZGd1RleHRBZGRyOwotCWZ3LnRleHRfbGVuID0gYm54Ml9UWFBfYjA2RndUZXh0TGVuOwotCWZ3LnRleHRfaW5kZXggPSAwOwotCi0JcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9UWFBfYjA2RndUZXh0LCBzaXplb2YoYm54Ml9UWFBfYjA2RndUZXh0KSwKLQkJCSAmdGV4dCwgJnRleHRfbGVuKTsKKwlyYyA9IGxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZywgZncpOwogCWlmIChyYykKIAkJZ290byBpbml0X2NwdV9lcnI7CiAKLQlmdy50ZXh0ID0gdGV4dDsKLQotCWZ3LmRhdGFfYWRkciA9IGJueDJfVFhQX2IwNkZ3RGF0YUFkZHI7Ci0JZncuZGF0YV9sZW4gPSBibngyX1RYUF9iMDZGd0RhdGFMZW47Ci0JZncuZGF0YV9pbmRleCA9IDA7Ci0JZncuZGF0YSA9IGJueDJfVFhQX2IwNkZ3RGF0YTsKLQotCWZ3LnNic3NfYWRkciA9IGJueDJfVFhQX2IwNkZ3U2Jzc0FkZHI7Ci0JZncuc2Jzc19sZW4gPSBibngyX1RYUF9iMDZGd1Nic3NMZW47Ci0JZncuc2Jzc19pbmRleCA9IDA7Ci0JZncuc2JzcyA9IGJueDJfVFhQX2IwNkZ3U2JzczsKLQotCWZ3LmJzc19hZGRyID0gYm54Ml9UWFBfYjA2RndCc3NBZGRyOwotCWZ3LmJzc19sZW4gPSBibngyX1RYUF9iMDZGd0Jzc0xlbjsKLQlmdy5ic3NfaW5kZXggPSAwOwotCWZ3LmJzcyA9IGJueDJfVFhQX2IwNkZ3QnNzOwotCi0JZncucm9kYXRhX2FkZHIgPSBibngyX1RYUF9iMDZGd1JvZGF0YUFkZHI7Ci0JZncucm9kYXRhX2xlbiA9IGJueDJfVFhQX2IwNkZ3Um9kYXRhTGVuOwotCWZ3LnJvZGF0YV9pbmRleCA9IDA7Ci0JZncucm9kYXRhID0gYm54Ml9UWFBfYjA2RndSb2RhdGE7Ci0KLQlsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWcsICZmdyk7Ci0KIAkvKiBJbml0aWFsaXplIHRoZSBUWCBQYXRjaC11cCBQcm9jZXNzb3IuICovCiAJY3B1X3JlZy5tb2RlID0gQk5YMl9UUEFUX0NQVV9NT0RFOwogCWNwdV9yZWcubW9kZV92YWx1ZV9oYWx0ID0gQk5YMl9UUEFUX0NQVV9NT0RFX1NPRlRfSEFMVDsKQEAgLTI0MjcsNDQgKzI0NjEsMTUgQEAKIAljcHVfcmVnLnNwYWRfYmFzZSA9IEJOWDJfVFBBVF9TQ1JBVENIOwogCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7CiAKLQlmdy52ZXJfbWFqb3IgPSBibngyX1RQQVRfYjA2RndSZWxlYXNlTWFqb3I7Ci0JZncudmVyX21pbm9yID0gYm54Ml9UUEFUX2IwNkZ3UmVsZWFzZU1pbm9yOwotCWZ3LnZlcl9maXggPSBibngyX1RQQVRfYjA2RndSZWxlYXNlRml4OwotCWZ3LnN0YXJ0X2FkZHIgPSBibngyX1RQQVRfYjA2RndTdGFydEFkZHI7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQorCQlmdyA9ICZibngyX3RwYXRfZndfMDk7CisJZWxzZQorCQlmdyA9ICZibngyX3RwYXRfZndfMDY7CiAKLQlmdy50ZXh0X2FkZHIgPSBibngyX1RQQVRfYjA2RndUZXh0QWRkcjsKLQlmdy50ZXh0X2xlbiA9IGJueDJfVFBBVF9iMDZGd1RleHRMZW47Ci0JZncudGV4dF9pbmRleCA9IDA7Ci0KLQlyYyA9IGJueDJfZ3VuemlwKGJwLCBibngyX1RQQVRfYjA2RndUZXh0LCBzaXplb2YoYm54Ml9UUEFUX2IwNkZ3VGV4dCksCi0JCQkgJnRleHQsICZ0ZXh0X2xlbik7CisJcmMgPSBsb2FkX2NwdV9mdyhicCwgJmNwdV9yZWcsIGZ3KTsKIAlpZiAocmMpCiAJCWdvdG8gaW5pdF9jcHVfZXJyOwogCi0JZncudGV4dCA9IHRleHQ7Ci0KLQlmdy5kYXRhX2FkZHIgPSBibngyX1RQQVRfYjA2RndEYXRhQWRkcjsKLQlmdy5kYXRhX2xlbiA9IGJueDJfVFBBVF9iMDZGd0RhdGFMZW47Ci0JZncuZGF0YV9pbmRleCA9IDA7Ci0JZncuZGF0YSA9IGJueDJfVFBBVF9iMDZGd0RhdGE7Ci0KLQlmdy5zYnNzX2FkZHIgPSBibngyX1RQQVRfYjA2RndTYnNzQWRkcjsKLQlmdy5zYnNzX2xlbiA9IGJueDJfVFBBVF9iMDZGd1Nic3NMZW47Ci0JZncuc2Jzc19pbmRleCA9IDA7Ci0JZncuc2JzcyA9IGJueDJfVFBBVF9iMDZGd1Nic3M7Ci0KLQlmdy5ic3NfYWRkciA9IGJueDJfVFBBVF9iMDZGd0Jzc0FkZHI7Ci0JZncuYnNzX2xlbiA9IGJueDJfVFBBVF9iMDZGd0Jzc0xlbjsKLQlmdy5ic3NfaW5kZXggPSAwOwotCWZ3LmJzcyA9IGJueDJfVFBBVF9iMDZGd0JzczsKLQotCWZ3LnJvZGF0YV9hZGRyID0gYm54Ml9UUEFUX2IwNkZ3Um9kYXRhQWRkcjsKLQlmdy5yb2RhdGFfbGVuID0gYm54Ml9UUEFUX2IwNkZ3Um9kYXRhTGVuOwotCWZ3LnJvZGF0YV9pbmRleCA9IDA7Ci0JZncucm9kYXRhID0gYm54Ml9UUEFUX2IwNkZ3Um9kYXRhOwotCi0JbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCAmZncpOwotCiAJLyogSW5pdGlhbGl6ZSB0aGUgQ29tcGxldGlvbiBQcm9jZXNzb3IuICovCiAJY3B1X3JlZy5tb2RlID0gQk5YMl9DT01fQ1BVX01PREU7CiAJY3B1X3JlZy5tb2RlX3ZhbHVlX2hhbHQgPSBCTlgyX0NPTV9DUFVfTU9ERV9TT0ZUX0hBTFQ7CkBAIC0yNDc5LDQ0ICsyNDg0LDM2IEBACiAJY3B1X3JlZy5zcGFkX2Jhc2UgPSBCTlgyX0NPTV9TQ1JBVENIOwogCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7CiAKLQlmdy52ZXJfbWFqb3IgPSBibngyX0NPTV9iMDZGd1JlbGVhc2VNYWpvcjsKLQlmdy52ZXJfbWlub3IgPSBibngyX0NPTV9iMDZGd1JlbGVhc2VNaW5vcjsKLQlmdy52ZXJfZml4ID0gYm54Ml9DT01fYjA2RndSZWxlYXNlRml4OwotCWZ3LnN0YXJ0X2FkZHIgPSBibngyX0NPTV9iMDZGd1N0YXJ0QWRkcjsKKwlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpCisJCWZ3ID0gJmJueDJfY29tX2Z3XzA5OworCWVsc2UKKwkJZncgPSAmYm54Ml9jb21fZndfMDY7CiAKLQlmdy50ZXh0X2FkZHIgPSBibngyX0NPTV9iMDZGd1RleHRBZGRyOwotCWZ3LnRleHRfbGVuID0gYm54Ml9DT01fYjA2RndUZXh0TGVuOwotCWZ3LnRleHRfaW5kZXggPSAwOwotCi0JcmMgPSBibngyX2d1bnppcChicCwgYm54Ml9DT01fYjA2RndUZXh0LCBzaXplb2YoYm54Ml9DT01fYjA2RndUZXh0KSwKLQkJCSAmdGV4dCwgJnRleHRfbGVuKTsKKwlyYyA9IGxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZywgZncpOwogCWlmIChyYykKIAkJZ290byBpbml0X2NwdV9lcnI7CiAKLQlmdy50ZXh0ID0gdGV4dDsKKwkvKiBJbml0aWFsaXplIHRoZSBDb21tYW5kIFByb2Nlc3Nvci4gKi8KKwljcHVfcmVnLm1vZGUgPSBCTlgyX0NQX0NQVV9NT0RFOworCWNwdV9yZWcubW9kZV92YWx1ZV9oYWx0ID0gQk5YMl9DUF9DUFVfTU9ERV9TT0ZUX0hBTFQ7CisJY3B1X3JlZy5tb2RlX3ZhbHVlX3NzdGVwID0gQk5YMl9DUF9DUFVfTU9ERV9TVEVQX0VOQTsKKwljcHVfcmVnLnN0YXRlID0gQk5YMl9DUF9DUFVfU1RBVEU7CisJY3B1X3JlZy5zdGF0ZV92YWx1ZV9jbGVhciA9IDB4ZmZmZmZmOworCWNwdV9yZWcuZ3ByMCA9IEJOWDJfQ1BfQ1BVX1JFR19GSUxFOworCWNwdV9yZWcuZXZtYXNrID0gQk5YMl9DUF9DUFVfRVZFTlRfTUFTSzsKKwljcHVfcmVnLnBjID0gQk5YMl9DUF9DUFVfUFJPR1JBTV9DT1VOVEVSOworCWNwdV9yZWcuaW5zdCA9IEJOWDJfQ1BfQ1BVX0lOU1RSVUNUSU9OOworCWNwdV9yZWcuYnAgPSBCTlgyX0NQX0NQVV9IV19CUkVBS1BPSU5UOworCWNwdV9yZWcuc3BhZF9iYXNlID0gQk5YMl9DUF9TQ1JBVENIOworCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7CiAKLQlmdy5kYXRhX2FkZHIgPSBibngyX0NPTV9iMDZGd0RhdGFBZGRyOwotCWZ3LmRhdGFfbGVuID0gYm54Ml9DT01fYjA2RndEYXRhTGVuOwotCWZ3LmRhdGFfaW5kZXggPSAwOwotCWZ3LmRhdGEgPSBibngyX0NPTV9iMDZGd0RhdGE7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CisJCWZ3ID0gJmJueDJfY3BfZndfMDk7CiAKLQlmdy5zYnNzX2FkZHIgPSBibngyX0NPTV9iMDZGd1Nic3NBZGRyOwotCWZ3LnNic3NfbGVuID0gYm54Ml9DT01fYjA2RndTYnNzTGVuOwotCWZ3LnNic3NfaW5kZXggPSAwOwotCWZ3LnNic3MgPSBibngyX0NPTV9iMDZGd1Nic3M7Ci0KLQlmdy5ic3NfYWRkciA9IGJueDJfQ09NX2IwNkZ3QnNzQWRkcjsKLQlmdy5ic3NfbGVuID0gYm54Ml9DT01fYjA2RndCc3NMZW47Ci0JZncuYnNzX2luZGV4ID0gMDsKLQlmdy5ic3MgPSBibngyX0NPTV9iMDZGd0JzczsKLQotCWZ3LnJvZGF0YV9hZGRyID0gYm54Ml9DT01fYjA2RndSb2RhdGFBZGRyOwotCWZ3LnJvZGF0YV9sZW4gPSBibngyX0NPTV9iMDZGd1JvZGF0YUxlbjsKLQlmdy5yb2RhdGFfaW5kZXggPSAwOwotCWZ3LnJvZGF0YSA9IGJueDJfQ09NX2IwNkZ3Um9kYXRhOwotCi0JbG9hZF9jcHVfZncoYnAsICZjcHVfcmVnLCAmZncpOwotCisJCWxvYWRfY3B1X2Z3KGJwLCAmY3B1X3JlZywgZncpOworCQlpZiAocmMpCisJCQlnb3RvIGluaXRfY3B1X2VycjsKKwl9CiBpbml0X2NwdV9lcnI6CiAJYm54Ml9ndW56aXBfZW5kKGJwKTsKIAlyZXR1cm4gcmM7CkBAIC0zMjg4LDMxICszMjg1LDQ0IEBACiAJICogYmVmb3JlIHdlIGlzc3VlIGEgcmVzZXQuICovCiAJdmFsID0gUkVHX1JEKGJwLCBCTlgyX01JU0NfSUQpOwogCi0JdmFsID0gQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ09SRV9SU1RfUkVRIHwKLQkgICAgICBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19SRUdfV0lORE9XX0VOQSB8Ci0JICAgICAgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfVEFSR0VUX01CX1dPUkRfU1dBUDsKKwlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDkpIHsKKwkJUkVHX1dSKGJwLCBCTlgyX01JU0NfQ09NTUFORCwgQk5YMl9NSVNDX0NPTU1BTkRfU1dfUkVTRVQpOworCQlSRUdfUkQoYnAsIEJOWDJfTUlTQ19DT01NQU5EKTsKKwkJdWRlbGF5KDUpOwogCi0JLyogQ2hpcCByZXNldC4gKi8KLQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHLCB2YWwpOworCQl2YWwgPSBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19SRUdfV0lORE9XX0VOQSB8CisJCSAgICAgIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX1RBUkdFVF9NQl9XT1JEX1NXQVA7CiAKLQlpZiAoKENISVBfSUQoYnApID09IENISVBfSURfNTcwNl9BMCkgfHwKLQkgICAgKENISVBfSUQoYnApID09IENISVBfSURfNTcwNl9BMSkpCi0JCW1zbGVlcCgxNSk7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnAtPnBkZXYsIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHLCB2YWwpOwogCi0JLyogUmVzZXQgdGFrZXMgYXBwcm94aW1hdGUgMzAgdXNlYyAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCXZhbCA9IFJFR19SRChicCwgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUcpOwotCQlpZiAoKHZhbCAmIChCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19DT1JFX1JTVF9SRVEgfAotCQkJICAgIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0NPUkVfUlNUX0JTWSkpID09IDApIHsKLQkJCWJyZWFrOworCX0gZWxzZSB7CisJCXZhbCA9IEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0NPUkVfUlNUX1JFUSB8CisJCSAgICAgIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX1JFR19XSU5ET1dfRU5BIHwKKwkJICAgICAgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfVEFSR0VUX01CX1dPUkRfU1dBUDsKKworCQkvKiBDaGlwIHJlc2V0LiAqLworCQlSRUdfV1IoYnAsIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHLCB2YWwpOworCisJCWlmICgoQ0hJUF9JRChicCkgPT0gQ0hJUF9JRF81NzA2X0EwKSB8fAorCQkgICAgKENISVBfSUQoYnApID09IENISVBfSURfNTcwNl9BMSkpIHsKKwkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7CisJCQlzY2hlZHVsZV90aW1lb3V0KEhaIC8gNTApOwogCQl9Ci0JCXVkZWxheSgxMCk7Ci0JfQogCi0JaWYgKHZhbCAmIChCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19DT1JFX1JTVF9SRVEgfAotCQkgICBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19DT1JFX1JTVF9CU1kpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNoaXAgcmVzZXQgZGlkIG5vdCBjb21wbGV0ZVxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCS8qIFJlc2V0IHRha2VzIGFwcHJveGltYXRlIDMwIHVzZWMgKi8KKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCXZhbCA9IFJFR19SRChicCwgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUcpOworCQkJaWYgKCh2YWwgJiAoQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ09SRV9SU1RfUkVRIHwKKwkJCQkgICAgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ09SRV9SU1RfQlNZKSkgPT0gMCkKKwkJCQlicmVhazsKKwkJCXVkZWxheSgxMCk7CisJCX0KKworCQlpZiAodmFsICYgKEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0NPUkVfUlNUX1JFUSB8CisJCQkgICBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19DT1JFX1JTVF9CU1kpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGlwIHJlc2V0IGRpZCBub3QgY29tcGxldGVcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCX0KIAogCS8qIE1ha2Ugc3VyZSBieXRlIHN3YXBwaW5nIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuICovCkBAIC0zMzkwLDcgKzM0MDAsMTAgQEAKIAogCS8qIEluaXRpYWxpemUgY29udGV4dCBtYXBwaW5nIGFuZCB6ZXJvIG91dCB0aGUgcXVpY2sgY29udGV4dHMuICBUaGUKIAkgKiBjb250ZXh0IGJsb2NrIG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gZW5hYmxlZC4gKi8KLQlibngyX2luaXRfY29udGV4dChicCk7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KQorCQlibngyX2luaXRfNTcwOV9jb250ZXh0KGJwKTsKKwllbHNlCisJCWJueDJfaW5pdF9jb250ZXh0KGJwKTsKIAogCWlmICgocmMgPSBibngyX2luaXRfY3B1cyhicCkpICE9IDApCiAJCXJldHVybiByYzsKQEAgLTM1MDEsMTIgKzM1MTQsNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkCitibngyX2luaXRfdHhfY29udGV4dChzdHJ1Y3QgYm54MiAqYnAsIHUzMiBjaWQpCit7CisJdTMyIHZhbCwgb2Zmc2V0MCwgb2Zmc2V0MSwgb2Zmc2V0Miwgb2Zmc2V0MzsKKworCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOSkgeworCQlvZmZzZXQwID0gQk5YMl9MMkNUWF9UWVBFX1hJOworCQlvZmZzZXQxID0gQk5YMl9MMkNUWF9DTURfVFlQRV9YSTsKKwkJb2Zmc2V0MiA9IEJOWDJfTDJDVFhfVEJEUl9CSEFERFJfSElfWEk7CisJCW9mZnNldDMgPSBCTlgyX0wyQ1RYX1RCRFJfQkhBRERSX0xPX1hJOworCX0gZWxzZSB7CisJCW9mZnNldDAgPSBCTlgyX0wyQ1RYX1RZUEU7CisJCW9mZnNldDEgPSBCTlgyX0wyQ1RYX0NNRF9UWVBFOworCQlvZmZzZXQyID0gQk5YMl9MMkNUWF9UQkRSX0JIQUREUl9ISTsKKwkJb2Zmc2V0MyA9IEJOWDJfTDJDVFhfVEJEUl9CSEFERFJfTE87CisJfQorCXZhbCA9IEJOWDJfTDJDVFhfVFlQRV9UWVBFX0wyIHwgQk5YMl9MMkNUWF9UWVBFX1NJWkVfTDI7CisJQ1RYX1dSKGJwLCBHRVRfQ0lEX0FERFIoY2lkKSwgb2Zmc2V0MCwgdmFsKTsKKworCXZhbCA9IEJOWDJfTDJDVFhfQ01EX1RZUEVfVFlQRV9MMiB8ICg4IDw8IDE2KTsKKwlDVFhfV1IoYnAsIEdFVF9DSURfQUREUihjaWQpLCBvZmZzZXQxLCB2YWwpOworCisJdmFsID0gKHU2NCkgYnAtPnR4X2Rlc2NfbWFwcGluZyA+PiAzMjsKKwlDVFhfV1IoYnAsIEdFVF9DSURfQUREUihjaWQpLCBvZmZzZXQyLCB2YWwpOworCisJdmFsID0gKHU2NCkgYnAtPnR4X2Rlc2NfbWFwcGluZyAmIDB4ZmZmZmZmZmY7CisJQ1RYX1dSKGJwLCBHRVRfQ0lEX0FERFIoY2lkKSwgb2Zmc2V0MywgdmFsKTsKK30KIAogc3RhdGljIHZvaWQKIGJueDJfaW5pdF90eF9yaW5nKHN0cnVjdCBibngyICpicCkKIHsKIAlzdHJ1Y3QgdHhfYmQgKnR4YmQ7Ci0JdTMyIHZhbDsKKwl1MzIgY2lkOwogCiAJYnAtPnR4X3dha2VfdGhyZXNoID0gYnAtPnR4X3Jpbmdfc2l6ZSAvIDI7CiAKQEAgLTM1MjAsMTkgKzM1NjEsMTEgQEAKIAlicC0+aHdfdHhfY29ucyA9IDA7CiAJYnAtPnR4X3Byb2RfYnNlcSA9IDA7CiAKLQl2YWwgPSBCTlgyX0wyQ1RYX1RZUEVfVFlQRV9MMjsKLQl2YWwgfD0gQk5YMl9MMkNUWF9UWVBFX1NJWkVfTDI7Ci0JQ1RYX1dSKGJwLCBHRVRfQ0lEX0FERFIoVFhfQ0lEKSwgQk5YMl9MMkNUWF9UWVBFLCB2YWwpOworCWNpZCA9IFRYX0NJRDsKKwlicC0+dHhfYmlkeF9hZGRyID0gTUJfR0VUX0NJRF9BRERSKGNpZCkgKyBCTlgyX0wyQ1RYX1RYX0hPU1RfQklEWDsKKwlicC0+dHhfYnNlcV9hZGRyID0gTUJfR0VUX0NJRF9BRERSKGNpZCkgKyBCTlgyX0wyQ1RYX1RYX0hPU1RfQlNFUTsKIAotCXZhbCA9IEJOWDJfTDJDVFhfQ01EX1RZUEVfVFlQRV9MMjsKLQl2YWwgfD0gOCA8PCAxNjsKLQlDVFhfV1IoYnAsIEdFVF9DSURfQUREUihUWF9DSUQpLCBCTlgyX0wyQ1RYX0NNRF9UWVBFLCB2YWwpOwotCi0JdmFsID0gKHU2NCkgYnAtPnR4X2Rlc2NfbWFwcGluZyA+PiAzMjsKLQlDVFhfV1IoYnAsIEdFVF9DSURfQUREUihUWF9DSUQpLCBCTlgyX0wyQ1RYX1RCRFJfQkhBRERSX0hJLCB2YWwpOwotCi0JdmFsID0gKHU2NCkgYnAtPnR4X2Rlc2NfbWFwcGluZyAmIDB4ZmZmZmZmZmY7Ci0JQ1RYX1dSKGJwLCBHRVRfQ0lEX0FERFIoVFhfQ0lEKSwgQk5YMl9MMkNUWF9UQkRSX0JIQUREUl9MTywgdmFsKTsKKwlibngyX2luaXRfdHhfY29udGV4dChicCwgY2lkKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM1NDUsOCArMzU3OCw4IEBACiAKIAkvKiA4IGZvciBDUkMgYW5kIFZMQU4gKi8KIAlicC0+cnhfYnVmX3VzZV9zaXplID0gYnAtPmRldi0+bXR1ICsgRVRIX0hMRU4gKyBicC0+cnhfb2Zmc2V0ICsgODsKLQkvKiA4IGZvciBhbGlnbm1lbnQgKi8KLQlicC0+cnhfYnVmX3NpemUgPSBicC0+cnhfYnVmX3VzZV9zaXplICsgODsKKwkvKiBodyBhbGlnbm1lbnQgKi8KKwlicC0+cnhfYnVmX3NpemUgPSBicC0+cnhfYnVmX3VzZV9zaXplICsgQk5YMl9SWF9BTElHTjsKIAogCXJpbmdfcHJvZCA9IHByb2QgPSBicC0+cnhfcHJvZCA9IDA7CiAJYnAtPnJ4X2NvbnMgPSAwOwpAQCAtMzcxMiw3ICszNzQ1LDkgQEAKIAlpZiAoKHJjID0gYm54Ml9yZXNldF9uaWMoYnAsIEJOWDJfRFJWX01TR19DT0RFX1JFU0VUKSkgIT0gMCkKIAkJcmV0dXJuIHJjOwogCisJc3Bpbl9sb2NrX2JoKCZicC0+cGh5X2xvY2spOwogCWJueDJfaW5pdF9waHkoYnApOworCXNwaW5fdW5sb2NrX2JoKCZicC0+cGh5X2xvY2spOwogCWJueDJfc2V0X2xpbmsoYnApOwogCXJldHVybiAwOwogfQpAQCAtMzk1Miw3ICszOTg3LDcgQEAKIAkJYm54Ml9zZXRfbWFjX2xvb3BiYWNrKGJwKTsKIAl9CiAJZWxzZSBpZiAobG9vcGJhY2tfbW9kZSA9PSBCTlgyX1BIWV9MT09QQkFDSykgewotCQlicC0+bG9vcGJhY2sgPSAwOworCQlicC0+bG9vcGJhY2sgPSBQSFlfTE9PUEJBQ0s7CiAJCWJueDJfc2V0X3BoeV9sb29wYmFjayhicCk7CiAJfQogCWVsc2UKQEAgLTM5OTIsOCArNDAyNyw4IEBACiAJYnAtPnR4X3Byb2QgPSBORVhUX1RYX0JEKGJwLT50eF9wcm9kKTsKIAlicC0+dHhfcHJvZF9ic2VxICs9IHBrdF9zaXplOwogCi0JUkVHX1dSMTYoYnAsIE1CX1RYX0NJRF9BRERSICsgQk5YMl9MMkNUWF9UWF9IT1NUX0JJRFgsIGJwLT50eF9wcm9kKTsKLQlSRUdfV1IoYnAsIE1CX1RYX0NJRF9BRERSICsgQk5YMl9MMkNUWF9UWF9IT1NUX0JTRVEsIGJwLT50eF9wcm9kX2JzZXEpOworCVJFR19XUjE2KGJwLCBicC0+dHhfYmlkeF9hZGRyLCBicC0+dHhfcHJvZCk7CisJUkVHX1dSKGJwLCBicC0+dHhfYnNlcV9hZGRyLCBicC0+dHhfcHJvZF9ic2VxKTsKIAogCXVkZWxheSgxMDApOwogCkBAIC00MTYyLDYgKzQxOTcsOTYgQEAKIH0KIAogc3RhdGljIHZvaWQKK2JueDJfNTcwNl9zZXJkZXNfdGltZXIoc3RydWN0IGJueDIgKmJwKQoreworCXNwaW5fbG9jaygmYnAtPnBoeV9sb2NrKTsKKwlpZiAoYnAtPnNlcmRlc19hbl9wZW5kaW5nKQorCQlicC0+c2VyZGVzX2FuX3BlbmRpbmctLTsKKwllbHNlIGlmICgoYnAtPmxpbmtfdXAgPT0gMCkgJiYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19TUEVFRCkpIHsKKwkJdTMyIGJtY3I7CisKKwkJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSBicC0+dGltZXJfaW50ZXJ2YWw7CisKKwkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNQ1IsICZibWNyKTsKKworCQlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJCXUzMiBwaHkxLCBwaHkyOworCisJCQlibngyX3dyaXRlX3BoeShicCwgMHgxYywgMHg3YzAwKTsKKwkJCWJueDJfcmVhZF9waHkoYnAsIDB4MWMsICZwaHkxKTsKKworCQkJYm54Ml93cml0ZV9waHkoYnAsIDB4MTcsIDB4MGYwMSk7CisJCQlibngyX3JlYWRfcGh5KGJwLCAweDE1LCAmcGh5Mik7CisJCQlibngyX3dyaXRlX3BoeShicCwgMHgxNywgMHgwZjAxKTsKKwkJCWJueDJfcmVhZF9waHkoYnAsIDB4MTUsICZwaHkyKTsKKworCQkJaWYgKChwaHkxICYgMHgxMCkgJiYJLyogU0lHTkFMIERFVEVDVCAqLworCQkJCSEocGh5MiAmIDB4MjApKSB7CS8qIG5vIENPTkZJRyAqLworCisJCQkJYm1jciAmPSB+Qk1DUl9BTkVOQUJMRTsKKwkJCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDAwIHwgQk1DUl9GVUxMRFBMWDsKKwkJCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JNQ1IsIGJtY3IpOworCQkJCWJwLT5waHlfZmxhZ3MgfD0gUEhZX1BBUkFMTEVMX0RFVEVDVF9GTEFHOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKChicC0+bGlua191cCkgJiYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19TUEVFRCkgJiYKKwkJIChicC0+cGh5X2ZsYWdzICYgUEhZX1BBUkFMTEVMX0RFVEVDVF9GTEFHKSkgeworCQl1MzIgcGh5MjsKKworCQlibngyX3dyaXRlX3BoeShicCwgMHgxNywgMHgwZjAxKTsKKwkJYm54Ml9yZWFkX3BoeShicCwgMHgxNSwgJnBoeTIpOworCQlpZiAocGh5MiAmIDB4MjApIHsKKwkJCXUzMiBibWNyOworCisJCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1DUiwgJmJtY3IpOworCQkJYm1jciB8PSBCTUNSX0FORU5BQkxFOworCQkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTUNSLCBibWNyKTsKKworCQkJYnAtPnBoeV9mbGFncyAmPSB+UEhZX1BBUkFMTEVMX0RFVEVDVF9GTEFHOworCQl9CisJfSBlbHNlCisJCWJwLT5jdXJyZW50X2ludGVydmFsID0gYnAtPnRpbWVyX2ludGVydmFsOworCisJc3Bpbl91bmxvY2soJmJwLT5waHlfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitibngyXzU3MDhfc2VyZGVzX3RpbWVyKHN0cnVjdCBibngyICpicCkKK3sKKwlpZiAoKGJwLT5waHlfZmxhZ3MgJiBQSFlfMl81R19DQVBBQkxFX0ZMQUcpID09IDApIHsKKwkJYnAtPnNlcmRlc19hbl9wZW5kaW5nID0gMDsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9jaygmYnAtPnBoeV9sb2NrKTsKKwlpZiAoYnAtPnNlcmRlc19hbl9wZW5kaW5nKQorCQlicC0+c2VyZGVzX2FuX3BlbmRpbmctLTsKKwllbHNlIGlmICgoYnAtPmxpbmtfdXAgPT0gMCkgJiYgKGJwLT5hdXRvbmVnICYgQVVUT05FR19TUEVFRCkpIHsKKwkJdTMyIGJtY3I7CisKKwkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNQ1IsICZibWNyKTsKKworCQlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKKwkJCWJtY3IgJj0gfkJNQ1JfQU5FTkFCTEU7CisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFggfCBCQ001NzA4U19CTUNSX0ZPUkNFXzI1MDA7CisJCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JNQ1IsIGJtY3IpOworCQkJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSBTRVJERVNfRk9SQ0VEX1RJTUVPVVQ7CisJCX0gZWxzZSB7CisJCQlibWNyICY9IH4oQk1DUl9GVUxMRFBMWCB8IEJDTTU3MDhTX0JNQ1JfRk9SQ0VfMjUwMCk7CisJCQlibWNyIHw9IEJNQ1JfQU5FTkFCTEU7CisJCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JNQ1IsIGJtY3IpOworCQkJYnAtPnNlcmRlc19hbl9wZW5kaW5nID0gMjsKKwkJCWJwLT5jdXJyZW50X2ludGVydmFsID0gYnAtPnRpbWVyX2ludGVydmFsOworCQl9CisKKwl9IGVsc2UKKwkJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSBicC0+dGltZXJfaW50ZXJ2YWw7CisKKwlzcGluX3VubG9jaygmYnAtPnBoeV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQKIGJueDJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBibngyICpicCA9IChzdHJ1Y3QgYm54MiAqKSBkYXRhOwpAQCAtNDE3OCw2NCArNDMwMywxMSBAQAogCiAJYnAtPnN0YXRzX2Jsay0+c3RhdF9Gd1J4RHJvcCA9IFJFR19SRF9JTkQoYnAsIEJOWDJfRldfUlhfRFJPUF9DT1VOVCk7CiAKLQlpZiAoKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0VSREVTX0ZMQUcpICYmCi0JICAgIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNikpIHsKLQotCQlzcGluX2xvY2soJmJwLT5waHlfbG9jayk7Ci0JCWlmIChicC0+c2VyZGVzX2FuX3BlbmRpbmcpIHsKLQkJCWJwLT5zZXJkZXNfYW5fcGVuZGluZy0tOwotCQl9Ci0JCWVsc2UgaWYgKChicC0+bGlua191cCA9PSAwKSAmJiAoYnAtPmF1dG9uZWcgJiBBVVRPTkVHX1NQRUVEKSkgewotCQkJdTMyIGJtY3I7Ci0KLQkJCWJwLT5jdXJyZW50X2ludGVydmFsID0gYnAtPnRpbWVyX2ludGVydmFsOwotCi0JCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1DUiwgJmJtY3IpOwotCi0JCQlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKLQkJCQl1MzIgcGh5MSwgcGh5MjsKLQotCQkJCWJueDJfd3JpdGVfcGh5KGJwLCAweDFjLCAweDdjMDApOwotCQkJCWJueDJfcmVhZF9waHkoYnAsIDB4MWMsICZwaHkxKTsKLQotCQkJCWJueDJfd3JpdGVfcGh5KGJwLCAweDE3LCAweDBmMDEpOwotCQkJCWJueDJfcmVhZF9waHkoYnAsIDB4MTUsICZwaHkyKTsKLQkJCQlibngyX3dyaXRlX3BoeShicCwgMHgxNywgMHgwZjAxKTsKLQkJCQlibngyX3JlYWRfcGh5KGJwLCAweDE1LCAmcGh5Mik7Ci0KLQkJCQlpZiAoKHBoeTEgJiAweDEwKSAmJgkvKiBTSUdOQUwgREVURUNUICovCi0JCQkJCSEocGh5MiAmIDB4MjApKSB7CS8qIG5vIENPTkZJRyAqLwotCi0JCQkJCWJtY3IgJj0gfkJNQ1JfQU5FTkFCTEU7Ci0JCQkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDAgfAotCQkJCQkJQk1DUl9GVUxMRFBMWDsKLQkJCQkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTUNSLCBibWNyKTsKLQkJCQkJYnAtPnBoeV9mbGFncyB8PQotCQkJCQkJUEhZX1BBUkFMTEVMX0RFVEVDVF9GTEFHOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIGlmICgoYnAtPmxpbmtfdXApICYmIChicC0+YXV0b25lZyAmIEFVVE9ORUdfU1BFRUQpICYmCi0JCQkoYnAtPnBoeV9mbGFncyAmIFBIWV9QQVJBTExFTF9ERVRFQ1RfRkxBRykpIHsKLQkJCXUzMiBwaHkyOwotCi0JCQlibngyX3dyaXRlX3BoeShicCwgMHgxNywgMHgwZjAxKTsKLQkJCWJueDJfcmVhZF9waHkoYnAsIDB4MTUsICZwaHkyKTsKLQkJCWlmIChwaHkyICYgMHgyMCkgewotCQkJCXUzMiBibWNyOwotCi0JCQkJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNQ1IsICZibWNyKTsKLQkJCQlibWNyIHw9IEJNQ1JfQU5FTkFCTEU7Ci0JCQkJYm54Ml93cml0ZV9waHkoYnAsIE1JSV9CTUNSLCBibWNyKTsKLQotCQkJCWJwLT5waHlfZmxhZ3MgJj0gflBIWV9QQVJBTExFTF9ERVRFQ1RfRkxBRzsKLQotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCWJwLT5jdXJyZW50X2ludGVydmFsID0gYnAtPnRpbWVyX2ludGVydmFsOwotCi0JCXNwaW5fdW5sb2NrKCZicC0+cGh5X2xvY2spOworCWlmIChicC0+cGh5X2ZsYWdzICYgUEhZX1NFUkRFU19GTEFHKSB7CisJCWlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNikKKwkJCWJueDJfNTcwNl9zZXJkZXNfdGltZXIoYnApOworCQllbHNlIGlmIChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwOCkKKwkJCWJueDJfNTcwOF9zZXJkZXNfdGltZXIoYnApOwogCX0KIAogYm54Ml9yZXN0YXJ0X3RpbWVyOgpAQCAtNDUwOCw4ICs0NTgwLDggQEAKIAlwcm9kID0gTkVYVF9UWF9CRChwcm9kKTsKIAlicC0+dHhfcHJvZF9ic2VxICs9IHNrYi0+bGVuOwogCi0JUkVHX1dSMTYoYnAsIE1CX1RYX0NJRF9BRERSICsgQk5YMl9MMkNUWF9UWF9IT1NUX0JJRFgsIHByb2QpOwotCVJFR19XUihicCwgTUJfVFhfQ0lEX0FERFIgKyBCTlgyX0wyQ1RYX1RYX0hPU1RfQlNFUSwgYnAtPnR4X3Byb2RfYnNlcSk7CisJUkVHX1dSMTYoYnAsIGJwLT50eF9iaWR4X2FkZHIsIHByb2QpOworCVJFR19XUihicCwgYnAtPnR4X2JzZXFfYWRkciwgYnAtPnR4X3Byb2RfYnNlcSk7CiAKIAltbWlvd2IoKTsKIApAQCAtNDc0MywxMCArNDgxNSwxNCBAQAogCX0KIAllbHNlIHsKIAkJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0VSREVTX0ZMQUcpIHsKLQkJCWlmICgoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKSB8fAotCQkJCShjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpIHsKKwkJCWlmICgoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwICYmCisJCQkgICAgIGNtZC0+c3BlZWQgIT0gU1BFRURfMjUwMCkgfHwKKwkJCSAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQorCisJCQlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8yNTAwICYmCisJCQkgICAgIShicC0+cGh5X2ZsYWdzICYgUEhZXzJfNUdfQ0FQQUJMRV9GTEFHKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQllbHNlIGlmIChjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApIHsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDkwMywxMSArNDk3OSwxMCBAQAogCQltc2xlZXAoMjApOwogCiAJCXNwaW5fbG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKLQkJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA2KSB7Ci0JCQlicC0+Y3VycmVudF9pbnRlcnZhbCA9IFNFUkRFU19BTl9USU1FT1VUOwotCQkJYnAtPnNlcmRlc19hbl9wZW5kaW5nID0gMTsKLQkJCW1vZF90aW1lcigmYnAtPnRpbWVyLCBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWwpOwotCQl9CisKKwkJYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSBTRVJERVNfQU5fVElNRU9VVDsKKwkJYnAtPnNlcmRlc19hbl9wZW5kaW5nID0gMTsKKwkJbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7CiAJfQogCiAJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNQ1IsICZibWNyKTsKQEAgLTUyODgsNiArNTM2Myw4IEBACiAKIAltZW1zZXQoYnVmLCAwLCBzaXplb2YodTY0KSAqIEJOWDJfTlVNX1RFU1RTKTsKIAlpZiAoZXRlc3QtPmZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQlpbnQgaTsKKwogCQlibngyX25ldGlmX3N0b3AoYnApOwogCQlibngyX3Jlc2V0X2NoaXAoYnAsIEJOWDJfRFJWX01TR19DT0RFX0RJQUcpOwogCQlibngyX2ZyZWVfc2ticyhicCk7CkBAIC01MzEyLDkgKzUzODksMTEgQEAKIAkJfQogCiAJCS8qIHdhaXQgZm9yIGxpbmsgdXAgKi8KLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMzAwMCk7Ci0JCWlmICgoIWJwLT5saW5rX3VwKSAmJiAhKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0VSREVTX0ZMQUcpKQotCQkJbXNsZWVwX2ludGVycnVwdGlibGUoNDAwMCk7CisJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJCWlmIChicC0+bGlua191cCkKKwkJCQlicmVhazsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOworCQl9CiAJfQogCiAJaWYgKGJueDJfdGVzdF9udnJhbShicCkgIT0gMCkgewpAQCAtNTYwNCwxMyArNTY4Myw2IEBACiAJCWdvdG8gZXJyX291dF9yZWxlYXNlOwogCX0KIAotCWJwLT5wY2l4X2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QQ0lYKTsKLQlpZiAoYnAtPnBjaXhfY2FwID09IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGZpbmQgUENJWCBjYXBhYmlsaXR5LCBhYm9ydGluZy5cbiIpOwotCQlyYyA9IC1FSU87Ci0JCWdvdG8gZXJyX291dF9yZWxlYXNlOwotCX0KLQogCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSA9PSAwKSB7CiAJCWJwLT5mbGFncyB8PSBVU0lOR19EQUNfRkxBRzsKIAkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNjRCSVRfTUFTSykgIT0gMCkgewpAQCAtNTYzMyw3ICs1NzA1LDcgQEAKIAlJTklUX1dPUksoJmJwLT5yZXNldF90YXNrLCBibngyX3Jlc2V0X3Rhc2ssIGJwKTsKIAogCWRldi0+YmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JbWVtX2xlbiA9IE1CX0dFVF9DSURfQUREUigxNyk7CisJbWVtX2xlbiA9IE1CX0dFVF9DSURfQUREUihUWF9UU1NfQ0lEICsgMSk7CiAJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBtZW1fbGVuOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCkBAIC01NjU3LDYgKzU3MjksMTYgQEAKIAogCWJwLT5jaGlwX2lkID0gUkVHX1JEKGJwLCBCTlgyX01JU0NfSUQpOwogCisJaWYgKENISVBfTlVNKGJwKSAhPSBDSElQX05VTV81NzA5KSB7CisJCWJwLT5wY2l4X2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QQ0lYKTsKKwkJaWYgKGJwLT5wY2l4X2NhcCA9PSAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkNhbm5vdCBmaW5kIFBDSVggY2FwYWJpbGl0eSwgYWJvcnRpbmcuXG4iKTsKKwkJCXJjID0gLUVJTzsKKwkJCWdvdG8gZXJyX291dF91bm1hcDsKKwkJfQorCX0KKwogCS8qIEdldCBidXMgaW5mb3JtYXRpb24uICovCiAJcmVnID0gUkVHX1JEKGJwLCBCTlgyX1BDSUNGR19NSVNDX1NUQVRVUyk7CiAJaWYgKHJlZyAmIEJOWDJfUENJQ0ZHX01JU0NfU1RBVFVTX1BDSVhfREVUKSB7CkBAIC01Nzc2LDEwICs1ODU4LDE1IEBACiAJYnAtPnBoeV9hZGRyID0gMTsKIAogCS8qIERpc2FibGUgV09MIHN1cHBvcnQgaWYgd2UgYXJlIHJ1bm5pbmcgb24gYSBTRVJERVMgY2hpcC4gKi8KLQlpZiAoQ0hJUF9CT05EX0lEKGJwKSAmIENISVBfQk9ORF9JRF9TRVJERVNfQklUKSB7CisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CisJCWlmIChDSElQX0JPTkRfSUQoYnApICE9IEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfQk9ORF9JRF9DKQorCQkJYnAtPnBoeV9mbGFncyB8PSBQSFlfU0VSREVTX0ZMQUc7CisJfSBlbHNlIGlmIChDSElQX0JPTkRfSUQoYnApICYgQ0hJUF9CT05EX0lEX1NFUkRFU19CSVQpCiAJCWJwLT5waHlfZmxhZ3MgfD0gUEhZX1NFUkRFU19GTEFHOworCisJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0VSREVTX0ZMQUcpIHsKIAkJYnAtPmZsYWdzIHw9IE5PX1dPTF9GTEFHOwotCQlpZiAoQ0hJUF9OVU0oYnApID09IENISVBfTlVNXzU3MDgpIHsKKwkJaWYgKENISVBfTlVNKGJwKSAhPSBDSElQX05VTV81NzA2KSB7CiAJCQlicC0+cGh5X2FkZHIgPSAyOwogCQkJcmVnID0gUkVHX1JEX0lORChicCwgYnAtPnNobWVtX2Jhc2UgKwogCQkJCQkgQk5YMl9TSEFSRURfSFdfQ0ZHX0NPTkZJRyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmggYi9kcml2ZXJzL25ldC9ibngyLmgKaW5kZXggY2EzMTkwNC4uMTNiNmY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuaApAQCAtNTYsNiArNTYsNyBAQAogCiB9OwogCisjZGVmaW5lIEJOWDJfUlhfQUxJR04JCQkxNgogCiAvKgogICogIHN0YXR1c19ibG9jayBkZWZpbml0aW9uCkBAIC05MCw2ICs5MSw3IEBACiAJCSNkZWZpbmUgU1RBVFVTX0FUVE5fQklUU19ETUFFX0FCT1JUCQkoMUw8PDI1KQogCQkjZGVmaW5lIFNUQVRVU19BVFROX0JJVFNfRkxTSF9BQk9SVAkJKDFMPDwyNikKIAkJI2RlZmluZSBTVEFUVVNfQVRUTl9CSVRTX0dSQ19BQk9SVAkJKDFMPDwyNykKKwkJI2RlZmluZSBTVEFUVVNfQVRUTl9CSVRTX0VQQl9FUlJPUgkJKDFMPDwzMCkKIAkJI2RlZmluZSBTVEFUVVNfQVRUTl9CSVRTX1BBUklUWV9FUlJPUgkJKDFMPDwzMSkKIAogCXUzMiBzdGF0dXNfYXR0bl9iaXRzX2FjazsKQEAgLTExNyw3ICsxMTksOCBAQAogCXUxNiBzdGF0dXNfY29tcGxldGlvbl9wcm9kdWNlcl9pbmRleDsKIAl1MTYgc3RhdHVzX2NtZF9jb25zdW1lcl9pbmRleDsKIAl1MTYgc3RhdHVzX2lkeDsKLQl1MTYgc3RhdHVzX3VudXNlZDsKKwl1OCBzdGF0dXNfdW51c2VkOworCXU4IHN0YXR1c19ibGtfbnVtOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IHN0YXR1c190eF9xdWlja19jb25zdW1lcl9pbmRleDE7CiAJdTE2IHN0YXR1c190eF9xdWlja19jb25zdW1lcl9pbmRleDA7CkBAIC0xNDEsNyArMTQ0LDggQEAKIAl1MTYgc3RhdHVzX3J4X3F1aWNrX2NvbnN1bWVyX2luZGV4MTQ7CiAJdTE2IHN0YXR1c19jbWRfY29uc3VtZXJfaW5kZXg7CiAJdTE2IHN0YXR1c19jb21wbGV0aW9uX3Byb2R1Y2VyX2luZGV4OwotCXUxNiBzdGF0dXNfdW51c2VkOworCXU4IHN0YXR1c19ibGtfbnVtOworCXU4IHN0YXR1c191bnVzZWQ7CiAJdTE2IHN0YXR1c19pZHg7CiAjZW5kaWYKIH07CkBAIC0zMDEsNiArMzA1LDEwIEBACiAjZGVmaW5lIEJOWDJfTDJDVFhfVFhQX0JJRFgJCQkJMHgwMDAwMDBhOAogI2RlZmluZSBCTlgyX0wyQ1RYX1RYUF9CU0VRCQkJCTB4MDAwMDAwYWMKIAorI2RlZmluZSBCTlgyX0wyQ1RYX1RZUEVfWEkJCQkJMHgwMDAwMDA4MAorI2RlZmluZSBCTlgyX0wyQ1RYX0NNRF9UWVBFX1hJCQkJCTB4MDAwMDAyNDAKKyNkZWZpbmUgQk5YMl9MMkNUWF9UQkRSX0JIQUREUl9ISV9YSQkJCTB4MDAwMDAyNTgKKyNkZWZpbmUgQk5YMl9MMkNUWF9UQkRSX0JIQUREUl9MT19YSQkJCTB4MDAwMDAyNWMKIAogLyoKICAqICBsMl9iZF9jaGFpbl9jb250ZXh0IGRlZmluaXRpb24KQEAgLTMyOCwxMSArMzM2LDE1IEBACiAjZGVmaW5lIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHCQkJCTB4MDAwMDAwNjgKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfVEFSR0VUX0JZVEVfU1dBUAkgKDFMPDwyKQogI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19UQVJHRVRfTUJfV09SRF9TV0FQCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX1JFU0VSVkVEMQkJICgxTDw8NCkKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ0xPQ0tfQ1RMX0VOQQkJICgxTDw8NSkKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfVEFSR0VUX0dSQ19XT1JEX1NXQVAJICgxTDw8NikKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfUkVHX1dJTkRPV19FTkEJCSAoMUw8PDcpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0NPUkVfUlNUX1JFUQkJICgxTDw8OCkKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUlTQ19DT05GSUdfQ09SRV9SU1RfQlNZCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19HUkNfV0lOMV9TV0FQX0VOCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19HUkNfV0lOMl9TV0FQX0VOCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19HUkNfV0lOM19TV0FQX0VOCSAoMUw8PDEyKQogI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19BU0lDX01FVEFMX1JFVgkJICgweGZmTDw8MTYpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0FTSUNfQkFTRV9SRVYJCSAoMHhmTDw8MjQpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0FTSUNfSUQJCQkgKDB4Zkw8PDI4KQpAQCAtMzQ3LDYgKzM1OSw3IEBACiAjZGVmaW5lIEJOWDJfUENJQ0ZHX01JU0NfU1RBVFVTX1BDSVhfU1BFRURfMTAwCQkgKDFMPDw0KQogI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX1NUQVRVU19QQ0lYX1NQRUVEXzEzMwkJICgyTDw8NCkKICNkZWZpbmUgQk5YMl9QQ0lDRkdfTUlTQ19TVEFUVVNfUENJWF9TUEVFRF9QQ0lfTU9ERQkgKDNMPDw0KQorI2RlZmluZSBCTlgyX1BDSUNGR19NSVNDX1NUQVRVU19CQURfTUVNX1dSSVRFX0JFCSAoMUw8PDgpCiAKICNkZWZpbmUgQk5YMl9QQ0lDRkdfUENJX0NMT0NLX0NPTlRST0xfQklUUwkJMHgwMDAwMDA3MAogI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1BDSV9DTEtfU1BEX0RFVAkgKDB4Zkw8PDApCkBAIC0zNjYsNyArMzc5LDcgQEAKICNkZWZpbmUgQk5YMl9QQ0lDRkdfUENJX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19BTFRfU1JDXzEyCSAoMUw8PDgpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX1BDSV9DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfQUxUX1NSQ182CSAoMkw8PDgpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX1BDSV9DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfQUxUX1NSQ182MgkgKDRMPDw4KQotI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1BMQVlfREVBRAkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9QQ0lDRkdfUENJX0NMT0NLX0NPTlRST0xfQklUU19NSU5fUE9XRVIJICgxTDw8MTEpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX1BDSV9DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfUExMX1NQRUVECSAoMHhmTDw8MTIpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX1BDSV9DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfUExMX1NQRUVEXzEwMAkgKDBMPDwxMikKICNkZWZpbmUgQk5YMl9QQ0lDRkdfUENJX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19QTExfU1BFRURfODAJICgxTDw8MTIpCkBAIC0zNzQsMTggKzM4NywyMSBAQAogI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX0NPUkVfQ0xLX1BMTF9TUEVFRF80MAkgKDRMPDwxMikKICNkZWZpbmUgQk5YMl9QQ0lDRkdfUENJX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19QTExfU1BFRURfMjUJICg4TDw8MTIpCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX1BDSV9DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfUExMX1NUT1AJICgxTDw8MTYpCi0jZGVmaW5lIEJOWDJfUENJQ0ZHX1BDSV9DTE9DS19DT05UUk9MX0JJVFNfUENJX1BMTF9TVE9QCSAoMUw8PDE3KQorI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1JFU0VSVkVEXzE3CSAoMUw8PDE3KQogI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1JFU0VSVkVEXzE4CSAoMUw8PDE4KQotI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1VTRV9TUERfREVUCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1JFU0VSVkVEXzE5CSAoMUw8PDE5KQogI2RlZmluZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1JFU0VSVkVECSAoMHhmZmZMPDwyMCkKIAogI2RlZmluZSBCTlgyX1BDSUNGR19SRUdfV0lORE9XX0FERFJFU1MJCQkweDAwMDAwMDc4CisjZGVmaW5lIEJOWDJfUENJQ0ZHX1JFR19XSU5ET1dfQUREUkVTU19WQUwJCSAoMHhmZmZmZkw8PDIpCisKICNkZWZpbmUgQk5YMl9QQ0lDRkdfUkVHX1dJTkRPVwkJCQkweDAwMDAwMDgwCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01ECQkJCTB4MDAwMDAwODQKICNkZWZpbmUgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfSU5ERVgJCQkgKDB4ZmZmZkw8PDApCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElECQkgKDFMPDwxNikKICNkZWZpbmUgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfVVNFX0lOVF9IQ19QQVJBTQkgKDFMPDwxNykKICNkZWZpbmUgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTURfTUFTS19JTlQJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTlRFUlJVUFRfTlVNCQkgKDB4Zkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfUENJQ0ZHX1NUQVRVU19CSVRfU0VUX0NNRAkJCTB4MDAwMDAwODgKICNkZWZpbmUgQk5YMl9QQ0lDRkdfU1RBVFVTX0JJVF9DTEVBUl9DTUQJCTB4MDAwMDAwOGMKQEAgLTM5OCw5ICs0MTQsMTEgQEAKICAqICBvZmZzZXQ6IDB4NDAwCiAgKi8KICNkZWZpbmUgQk5YMl9QQ0lfR1JDX1dJTkRPV19BRERSCQkJMHgwMDAwMDQwMAotI2RlZmluZSBCTlgyX1BDSV9HUkNfV0lORE9XX0FERFJfUENJX0dSQ19XSU5ET1dfQUREUl9WQUxVRQkgKDB4M2ZmZmZMPDw4KQorI2RlZmluZSBCTlgyX1BDSV9HUkNfV0lORE9XX0FERFJfVkFMVUUJCQkgKDB4MWZmTDw8MTMpCisjZGVmaW5lIEJOWDJfUENJX0dSQ19XSU5ET1dfQUREUl9TRVBfV0lOCQkgKDFMPDwzMSkKIAogI2RlZmluZSBCTlgyX1BDSV9DT05GSUdfMQkJCQkweDAwMDAwNDA0CisjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18xX1JFU0VSVkVEMAkJCSAoMHhmZkw8PDApCiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18xX1JFQURfQk9VTkRBUlkJCQkgKDB4N0w8PDgpCiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18xX1JFQURfQk9VTkRBUllfT0ZGCQkgKDBMPDw4KQogI2RlZmluZSBCTlgyX1BDSV9DT05GSUdfMV9SRUFEX0JPVU5EQVJZXzE2CQkgKDFMPDw4KQpAQCAtNDE5LDYgKzQzNyw3IEBACiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18xX1dSSVRFX0JPVU5EQVJZXzI1NgkJICg1TDw8MTEpCiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18xX1dSSVRFX0JPVU5EQVJZXzUxMgkJICg2TDw8MTEpCiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18xX1dSSVRFX0JPVU5EQVJZXzEwMjQJCSAoN0w8PDExKQorI2RlZmluZSBCTlgyX1BDSV9DT05GSUdfMV9SRVNFUlZFRDEJCQkgKDB4M2ZmZmZMPDwxNCkKIAogI2RlZmluZSBCTlgyX1BDSV9DT05GSUdfMgkJCQkweDAwMDAwNDA4CiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18yX0JBUjFfU0laRQkJCSAoMHhmTDw8MCkKQEAgLTQ2OCw5ICs0ODcsMTMgQEAKICNkZWZpbmUgQk5YMl9QQ0lfQ09ORklHXzJfRk9SQ0VfMzJfQklUX01TVFIJCSAoMUw8PDIzKQogI2RlZmluZSBCTlgyX1BDSV9DT05GSUdfMl9GT1JDRV8zMl9CSVRfVEdUCQkgKDFMPDwyNCkKICNkZWZpbmUgQk5YMl9QQ0lfQ09ORklHXzJfS0VFUF9SRVFfQVNTRVJUCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9QQ0lfQ09ORklHXzJfUkVTRVJWRUQwCQkJICgweDNmTDw8MjYpCisjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18yX0JBUl9QUkVGRVRDSF9YSQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18yX1JFU0VSVkVEMF9YSQkJCSAoMHg3ZmZmTDw8MTcpCiAKICNkZWZpbmUgQk5YMl9QQ0lfQ09ORklHXzMJCQkJMHgwMDAwMDQwYwogI2RlZmluZSBCTlgyX1BDSV9DT05GSUdfM19TVElDS1lfQllURQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18zX1JFR19TVElDS1lfQllURQkJICgweGZmTDw8OCkKICNkZWZpbmUgQk5YMl9QQ0lfQ09ORklHXzNfRk9SQ0VfUE1FCQkJICgxTDw8MjQpCiAjZGVmaW5lIEJOWDJfUENJX0NPTkZJR18zX1BNRV9TVEFUVVMJCQkgKDFMPDwyNSkKICNkZWZpbmUgQk5YMl9QQ0lfQ09ORklHXzNfUE1FX0VOQUJMRQkJCSAoMUw8PDI2KQpAQCAtNTAxLDggKzUyNCwxMCBAQAogI2RlZmluZSBCTlgyX1BDSV9WUERfSU5URl9JTlRGX1JFUQkJCSAoMUw8PDApCiAKICNkZWZpbmUgQk5YMl9QQ0lfVlBEX0FERFJfRkxBRwkJCQkweDAwMDAwNDJjCi0jZGVmaW5lIEJOWDJfUENJX1ZQRF9BRERSX0ZMQUdfQUREUkVTUwkJCSAoMHgxZmZmPDwyKQotI2RlZmluZSBCTlgyX1BDSV9WUERfQUREUl9GTEFHX1dSCQkJICgxPDwxNSkKKyNkZWZpbmUgQk5YMl9QQ0lfVlBEX0FERFJfRkxBR19NU0sJCQkweDAwMDBmZmZmCisjZGVmaW5lIEJOWDJfUENJX1ZQRF9BRERSX0ZMQUdfU0wJCQkwTAorI2RlZmluZSBCTlgyX1BDSV9WUERfQUREUl9GTEFHX0FERFJFU1MJCQkgKDB4MWZmZkw8PDIpCisjZGVmaW5lIEJOWDJfUENJX1ZQRF9BRERSX0ZMQUdfV1IJCQkgKDFMPDwxNSkKIAogI2RlZmluZSBCTlgyX1BDSV9WUERfREFUQQkJCQkweDAwMDAwNDMwCiAjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDEJCQkJMHgwMDAwMDQzNApAQCAtNTM1LDE5ICs1NjAsMjYgQEAKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9DQVBfRU5BXzEzCQkJICgxM0w8PDApCiAjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfQ0FQX0VOQV8xNAkJCSAoMTRMPDwwKQogI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X0NBUF9FTkFfMTUJCQkgKDE1TDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9SRVNFUlZFRDAJCQkgKDB4M0w8PDQpCiAjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfUE1fU0NBTEVfUFJHCQkJICgweDNMPDw2KQogI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X1BNX1NDQUxFX1BSR18wCQkJICgwTDw8NikKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9QTV9TQ0FMRV9QUkdfMQkJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfUE1fU0NBTEVfUFJHXzIJCQkgKDJMPDw2KQogI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X1BNX1NDQUxFX1BSR18zCQkJICgzTDw8NikKKyNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9NU0lfUFZfTUFTS19DQVAJCSAoMUw8PDgpCiAjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfTVNJX0xJTUlUCQkJICgweDdMPDw5KQotI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X01TSV9BRFZFUlRJWkUJCQkgKDB4N0w8PDEyKQorI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X01VTFRJX01TR19DQVAJCQkgKDB4N0w8PDEyKQogI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X01TSV9FTkFCTEUJCQkgKDFMPDwxNSkKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9NQVhfNjRfQURWRVJUSVpFCQkgKDFMPDwxNikKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9NQVhfMTMzX0FEVkVSVElaRQkJICgxTDw8MTcpCi0jZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfTUFYX01FTV9SRUFEX1NJWkUJCSAoMHgzTDw8MjEpCi0jZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfTUFYX1NQTElUX1NJWkUJCQkgKDB4N0w8PDIzKQotI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X01BWF9DVU1VTEFUSVZFX1NJWkUJCSAoMHg3TDw8MjYpCisjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfUkVTRVJWRUQyCQkJICgweDdMPDwxOCkKKyNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9NQVhfQ1VNVUxBVElWRV9TSVpFX0IyMQkgKDB4M0w8PDIxKQorI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X01BWF9TUExJVF9TSVpFX0IyMQkJICgweDNMPDwyMykKKyNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9NQVhfQ1VNVUxBVElWRV9TSVpFX0IwCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNF9NQVhfTUVNX1JFQURfU0laRV9CMTAJCSAoMHgzTDw8MjYpCisjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfTUFYX1NQTElUX1NJWkVfQjAJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw0X1JFU0VSVkVEMwkJCSAoMHg3TDw8MjkpCisjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDRfUkVTRVJWRUQzX1hJCQkJICgweGZmZmZMPDwxNikKIAogI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw1CQkJCTB4MDAwMDA0NDQKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNV9EMV9TVVBQT1JUCQkJICgxTDw8MCkKQEAgLTU1Niw2ICs1ODgsMTAgQEAKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNV9QTUVfSU5fRDEJCQkgKDFMPDwzKQogI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw1X1BNRV9JTl9EMgkJCSAoMUw8PDQpCiAjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDVfUE1FX0lOX0QzX0hPVAkJCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDVfUkVTRVJWRUQwX1RFCQkJICgweDNmZmZmZmZMPDw2KQorI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw1X1BNX1ZFUlNJT05fWEkJCQkgKDB4N0w8PDYpCisjZGVmaW5lIEJOWDJfUENJX0lEX1ZBTDVfTk9fU09GVF9SRVNFVF9YSQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNV9SRVNFUlZFRDBfWEkJCQkgKDB4M2ZmZmZmTDw8MTApCiAKICNkZWZpbmUgQk5YMl9QQ0lfUENJWF9FWFRFTkRFRF9TVEFUVVMJCQkweDAwMDAwNDQ4CiAjZGVmaW5lIEJOWDJfUENJX1BDSVhfRVhURU5ERURfU1RBVFVTX05PX1NOT09QCQkgKDFMPDw4KQpAQCAtNTY3LDEyICs2MDMsOTEgQEAKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNl9NQVhfTEFUCQkJICgweGZmTDw8MCkKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNl9NSU5fR05UCQkJICgweGZmTDw8OCkKICNkZWZpbmUgQk5YMl9QQ0lfSURfVkFMNl9CSVNUCQkJCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX1BDSV9JRF9WQUw2X1JFU0VSVkVEMAkJCSAoMHhmZkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfUENJX01TSV9EQVRBCQkJCTB4MDAwMDA0NTAKLSNkZWZpbmUgQk5YMl9QQ0lfTVNJX0RBVEFfUENJX01TSV9EQVRBCQkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1BDSV9NU0lfREFUQV9NU0lfREFUQQkJCSAoMHhmZmZmTDw8MCkKIAogI2RlZmluZSBCTlgyX1BDSV9NU0lfQUREUl9ICQkJCTB4MDAwMDA0NTQKICNkZWZpbmUgQk5YMl9QQ0lfTVNJX0FERFJfTAkJCQkweDAwMDAwNDU4CisjZGVmaW5lIEJOWDJfUENJX01TSV9BRERSX0xfVkFMCQkJCSAoMHgzZmZmZmZmZkw8PDIpCisKKyNkZWZpbmUgQk5YMl9QQ0lfQ0ZHX0FDQ0VTU19DTUQJCQkJMHgwMDAwMDQ1YworI2RlZmluZSBCTlgyX1BDSV9DRkdfQUNDRVNTX0NNRF9BRFIJCQkgKDB4M2ZMPDwyKQorI2RlZmluZSBCTlgyX1BDSV9DRkdfQUNDRVNTX0NNRF9SRF9SRVEJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9QQ0lfQ0ZHX0FDQ0VTU19DTURfV1JfUkVRCQkJICgweGZMPDwyOCkKKworI2RlZmluZSBCTlgyX1BDSV9DRkdfQUNDRVNTX0RBVEEJCQkweDAwMDAwNDYwCisjZGVmaW5lIEJOWDJfUENJX01TSV9NQVNLCQkJCTB4MDAwMDA0NjQKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJX01BU0tfTVNJX01BU0sJCQkgKDB4ZmZmZmZmZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfUENJX01TSV9QRU5ECQkJCTB4MDAwMDA0NjgKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJX1BFTkRfTVNJX1BFTkQJCQkgKDB4ZmZmZmZmZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfUENJX1BNX0RBVEFfQwkJCQkweDAwMDAwNDZjCisjZGVmaW5lIEJOWDJfUENJX1BNX0RBVEFfQ19QTV9EQVRBXzhfUFJHCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1BDSV9QTV9EQVRBX0NfUkVTRVJWRUQwCQkJICgweGZmZmZmZkw8PDgpCisKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9DT05UUk9MCQkJCTB4MDAwMDA0YzAKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9DT05UUk9MX01TSVhfVEJMX1NJWgkJICgweDdmZkw8PDApCisjZGVmaW5lIEJOWDJfUENJX01TSVhfQ09OVFJPTF9SRVNFUlZFRDAJCQkgKDB4MWZmZmZmTDw8MTEpCisKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9UQkxfT0ZGX0JJUgkJCTB4MDAwMDA0YzQKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9UQkxfT0ZGX0JJUl9NU0lYX1RCTF9CSVIJCSAoMHg3TDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9UQkxfT0ZGX0JJUl9NU0lYX1RCTF9PRkYJCSAoMHgxZmZmZmZmZkw8PDMpCisKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9QQkFfT0ZGX0JJVAkJCTB4MDAwMDA0YzgKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9QQkFfT0ZGX0JJVF9NU0lYX1BCQV9CSVIJCSAoMHg3TDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfTVNJWF9QQkFfT0ZGX0JJVF9NU0lYX1BCQV9PRkYJCSAoMHgxZmZmZmZmZkw8PDMpCisKKyNkZWZpbmUgQk5YMl9QQ0lfUENJRV9DQVBBQklMSVRZCQkJMHgwMDAwMDRkMAorI2RlZmluZSBCTlgyX1BDSV9QQ0lFX0NBUEFCSUxJVFlfSU5URVJSVVBUX01TR19OVU0JICgweDFmTDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfUENJRV9DQVBBQklMSVRZX0NPTVBMWV9QQ0lFXzFfMQkgKDFMPDw1KQorCisjZGVmaW5lIEJOWDJfUENJX0RFVklDRV9DQVBBQklMSVRZCQkJMHgwMDAwMDRkNAorI2RlZmluZSBCTlgyX1BDSV9ERVZJQ0VfQ0FQQUJJTElUWV9NQVhfUExfU0laX1NVUFBPUlRFRAkgKDB4N0w8PDApCisjZGVmaW5lIEJOWDJfUENJX0RFVklDRV9DQVBBQklMSVRZX0VYVEVOREVEX1RBR19TVVBQT1JUCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfUENJX0RFVklDRV9DQVBBQklMSVRZX0wwU19BQ0NFUFRBQkxFX0xBVEVOQ1kJICgweDdMPDw2KQorI2RlZmluZSBCTlgyX1BDSV9ERVZJQ0VfQ0FQQUJJTElUWV9MMV9BQ0NFUFRBQkxFX0xBVEVOQ1kJICgweDdMPDw5KQorI2RlZmluZSBCTlgyX1BDSV9ERVZJQ0VfQ0FQQUJJTElUWV9ST0xFX0JBU0VEX0VSUl9SUFQJICgxTDw8MTUpCisKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZCQkJMHgwMDAwMDRkYworI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfTUFYX0xJTktfU1BFRUQJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX01BWF9MSU5LX1NQRUVEXzAwMDEJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX01BWF9MSU5LX1NQRUVEXzAwMTAJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX01BWF9MSU5LX1dJRFRICQkgKDB4MWZMPDw0KQorI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfQ0xLX1BPV0VSX01HTVQJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfUENJX0xJTktfQ0FQQUJJTElUWV9BU1BNX1NVUFBPUlQJCSAoMHgzTDw8MTApCisjZGVmaW5lIEJOWDJfUENJX0xJTktfQ0FQQUJJTElUWV9MMFNfRVhJVF9MQVQJCSAoMHg3TDw8MTIpCisjZGVmaW5lIEJOWDJfUENJX0xJTktfQ0FQQUJJTElUWV9MMFNfRVhJVF9MQVRfMTAxCSAoNUw8PDEyKQorI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfTDBTX0VYSVRfTEFUXzExMAkgKDZMPDwxMikKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX0wxX0VYSVRfTEFUCQkgKDB4N0w8PDE1KQorI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfTDFfRVhJVF9MQVRfMDAxCSAoMUw8PDE1KQorI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfTDFfRVhJVF9MQVRfMDEwCSAoMkw8PDE1KQorI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfTDBTX0VYSVRfQ09NTV9MQVQJICgweDdMPDwxOCkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX0wwU19FWElUX0NPTU1fTEFUXzEwMQkgKDVMPDwxOCkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX0wwU19FWElUX0NPTU1fTEFUXzExMAkgKDZMPDwxOCkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX0wxX0VYSVRfQ09NTV9MQVQJICgweDdMPDwyMSkKKyNkZWZpbmUgQk5YMl9QQ0lfTElOS19DQVBBQklMSVRZX0wxX0VYSVRfQ09NTV9MQVRfMDAxCSAoMUw8PDIxKQorI2RlZmluZSBCTlgyX1BDSV9MSU5LX0NBUEFCSUxJVFlfTDFfRVhJVF9DT01NX0xBVF8wMTAJICgyTDw8MjEpCisjZGVmaW5lIEJOWDJfUENJX0xJTktfQ0FQQUJJTElUWV9QT1JUX05VTQkJICgweGZmTDw8MjQpCisKKyNkZWZpbmUgQk5YMl9QQ0lfUENJRV9ERVZJQ0VfQ0FQQUJJTElUWV8yCQkweDAwMDAwNGU0CisjZGVmaW5lIEJOWDJfUENJX1BDSUVfREVWSUNFX0NBUEFCSUxJVFlfMl9DTVBMX1RPX1JBTkdFX1NVUFAJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX1BDSV9QQ0lFX0RFVklDRV9DQVBBQklMSVRZXzJfQ01QTF9UT19ESVNBQkxfU1VQUAkgKDFMPDw0KQorI2RlZmluZSBCTlgyX1BDSV9QQ0lFX0RFVklDRV9DQVBBQklMSVRZXzJfUkVTRVJWRUQJICgweDdmZmZmZmZMPDw1KQorCisjZGVmaW5lIEJOWDJfUENJX1BDSUVfTElOS19DQVBBQklMSVRZXzIJCQkweDAwMDAwNGU4CisjZGVmaW5lIEJOWDJfUENJX1BDSUVfTElOS19DQVBBQklMSVRZXzJfUkVTRVJWRUQJICgweGZmZmZmZmZmTDw8MCkKKworI2RlZmluZSBCTlgyX1BDSV9HUkNfV0lORE9XMV9BRERSCQkJMHgwMDAwMDYxMAorI2RlZmluZSBCTlgyX1BDSV9HUkNfV0lORE9XMV9BRERSX1ZBTFVFCQkJICgweDFmZkw8PDEzKQorCisjZGVmaW5lIEJOWDJfUENJX0dSQ19XSU5ET1cyX0FERFIJCQkweDAwMDAwNjE0CisjZGVmaW5lIEJOWDJfUENJX0dSQ19XSU5ET1cyX0FERFJfVkFMVUUJCQkgKDB4MWZmTDw8MTMpCisKKyNkZWZpbmUgQk5YMl9QQ0lfR1JDX1dJTkRPVzNfQUREUgkJCTB4MDAwMDA2MTgKKyNkZWZpbmUgQk5YMl9QQ0lfR1JDX1dJTkRPVzNfQUREUl9WQUxVRQkJCSAoMHgxZmZMPDwxMykKIAogCiAvKgpAQCAtNTgyLDEzICs2OTcsMjMgQEAKICNkZWZpbmUgQk5YMl9NSVNDX0NPTU1BTkQJCQkJMHgwMDAwMDgwMAogI2RlZmluZSBCTlgyX01JU0NfQ09NTUFORF9FTkFCTEVfQUxMCQkJICgxTDw8MCkKICNkZWZpbmUgQk5YMl9NSVNDX0NPTU1BTkRfRElTQUJMRV9BTEwJCQkgKDFMPDwxKQotI2RlZmluZSBCTlgyX01JU0NfQ09NTUFORF9DT1JFX1JFU0VUCQkJICgxTDw8NCkKLSNkZWZpbmUgQk5YMl9NSVNDX0NPTU1BTkRfSEFSRF9SRVNFVAkJCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX1NXX1JFU0VUCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NPTU1BTkRfUE9SX1JFU0VUCQkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX0NPTU1BTkRfSERfUkVTRVQJCQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX01JU0NfQ09NTUFORF9DTU5fU1dfUkVTRVQJCQkgKDFMPDw3KQogI2RlZmluZSBCTlgyX01JU0NfQ09NTUFORF9QQVJfRVJST1IJCQkgKDFMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ09NTUFORF9DUzE2X0VSUgkJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX0NTMTZfRVJSX0xPQwkJCSAoMHhmTDw8MTIpCiAjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX1BBUl9FUlJfUkFNCQkJICgweDdmTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX1BPV0VSRE9XTl9FVkVOVAkJICgxTDw8MjMpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX1NXX1NIVVRET1dOCQkJICgxTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX1NIVVRET1dOX0VOCQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX0RJTlRFR19BVFROX0VOCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9NSVNDX0NPTU1BTkRfUENJRV9MSU5LX0lOX0wyMwkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfTUlTQ19DT01NQU5EX1BDSUVfRElTCQkJICgxTDw8MjgpCiAKICNkZWZpbmUgQk5YMl9NSVNDX0NGRwkJCQkJMHgwMDAwMDgwNAotI2RlZmluZSBCTlgyX01JU0NfQ0ZHX1BDSV9HUkNfVE1PVVQJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0dSQ19UTU9VVAkJCQkgKDFMPDwwKQogI2RlZmluZSBCTlgyX01JU0NfQ0ZHX05WTV9XUl9FTgkJCQkgKDB4M0w8PDEpCiAjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTlZNX1dSX0VOX1BST1RFQ1QJCQkgKDBMPDwxKQogI2RlZmluZSBCTlgyX01JU0NfQ0ZHX05WTV9XUl9FTl9QQ0kJCQkgKDFMPDwxKQpAQCAtNTk2LDE2ICs3MjEsNDUgQEAKICNkZWZpbmUgQk5YMl9NSVNDX0NGR19OVk1fV1JfRU5fQUxMT1cyCQkJICgzTDw8MSkKICNkZWZpbmUgQk5YMl9NSVNDX0NGR19CSVNUX0VOCQkJCSAoMUw8PDMpCiAjZGVmaW5lIEJOWDJfTUlTQ19DRkdfQ0syNV9PVVRfQUxUX1NSQwkJCSAoMUw8PDQpCi0jZGVmaW5lIEJOWDJfTUlTQ19DRkdfQllQQVNTX0JTQ0FOCQkJICgxTDw8NSkKLSNkZWZpbmUgQk5YMl9NSVNDX0NGR19CWVBBU1NfRUpUQUcJCQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX1JFU0VSVkVENV9URQkJCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfUkVTRVJWRUQ2X1RFCQkJICgxTDw8NikKICNkZWZpbmUgQk5YMl9NSVNDX0NGR19DTEtfQ1RMX09WRVJSSURFCQkJICgxTDw8NykKLSNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFCQkJCSAoMHgzTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFCQkJCSAoMHg3TDw8OCkKICNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX01BQwkJCSAoMEw8PDgpCi0jZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9HUEhZMQkJCSAoMUw8PDgpCi0jZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9HUEhZMgkJCSAoMkw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9QSFkxX1RFCQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX1BIWTJfVEUJCQkgKDJMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZM19URQkJCSAoM0w8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9QSFk0X1RFCQkJICg0TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX1BIWTVfVEUJCQkgKDVMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZNl9URQkJCSAoNkw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9QSFk3X1RFCQkJICg3TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19NQ1BfR1JDX1RNT1VUX1RFCQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfREJVX0dSQ19UTU9VVF9URQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfWEkJCQkgKDB4Zkw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9NQUNfWEkJCQkgKDBMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZMV9YSQkJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9QSFkyX1hJCQkJICgyTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX1BIWTNfWEkJCQkgKDNMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfTUFDMl9YSQkJCSAoNEw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9QSFk0X1hJCQkJICg1TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX1BIWTVfWEkJCQkgKDZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZNl9YSQkJCSAoN0w8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9NQUMzX1hJCQkJICg4TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX1BIWTdfWEkJCQkgKDlMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZOF9YSQkJCSAoMTBMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZOV9YSQkJCSAoMTFMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfTUFDNF9YSQkJCSAoMTJMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX0xFRE1PREVfUEhZMTBfWEkJCQkgKDEzTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19MRURNT0RFX1BIWTExX1hJCQkJICgxNEw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DRkdfTEVETU9ERV9VTlVTRURfWEkJCQkgKDE1TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NGR19QT1JUX1NFTEVDVF9YSQkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX01JU0NfQ0ZHX1BBUklUWV9NT0RFX1hJCQkJICgxTDw8MTQpCiAKICNkZWZpbmUgQk5YMl9NSVNDX0lECQkJCQkweDAwMDAwODA4CiAjZGVmaW5lIEJOWDJfTUlTQ19JRF9CT05EX0lECQkJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX0lEX0JPTkRfSURfWAkJCQkgKDBMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfSURfQk9ORF9JRF9DCQkJCSAoM0w8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19JRF9CT05EX0lEX1MJCQkJICgxMkw8PDApCiAjZGVmaW5lIEJOWDJfTUlTQ19JRF9DSElQX01FVEFMCQkJCSAoMHhmZkw8PDQpCiAjZGVmaW5lIEJOWDJfTUlTQ19JRF9DSElQX1JFVgkJCQkgKDB4Zkw8PDEyKQogI2RlZmluZSBCTlgyX01JU0NfSURfQ0hJUF9OVU0JCQkJICgweGZmZmZMPDwxNikKQEAgLTYzOSw2ICs3OTMsOCBAQAogI2RlZmluZSBCTlgyX01JU0NfRU5BQkxFX1NUQVRVU19CSVRTX1RJTUVSX0VOQUJMRQkgKDFMPDwyNSkKICNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9TVEFUVVNfQklUU19ETUFfRU5HSU5FX0VOQUJMRQkgKDFMPDwyNikKICNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9TVEFUVVNfQklUU19VTVBfRU5BQkxFCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9TVEFUVVNfQklUU19SVjJQX0NNRF9TQ0hFRFVMRVJfRU5BQkxFCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfRU5BQkxFX1NUQVRVU19CSVRTX1JTVkRfRlVUVVJFX0VOQUJMRQkgKDB4N0w8PDI5KQogCiAjZGVmaW5lIEJOWDJfTUlTQ19FTkFCTEVfU0VUX0JJVFMJCQkweDAwMDAwODEwCiAjZGVmaW5lIEJOWDJfTUlTQ19FTkFCTEVfU0VUX0JJVFNfVFhfU0NIRURVTEVSX0VOQUJMRQkgKDFMPDwwKQpAQCAtNjY5LDYgKzgyNSw4IEBACiAjZGVmaW5lIEJOWDJfTUlTQ19FTkFCTEVfU0VUX0JJVFNfVElNRVJfRU5BQkxFCQkgKDFMPDwyNSkKICNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9TRVRfQklUU19ETUFfRU5HSU5FX0VOQUJMRQkgKDFMPDwyNikKICNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9TRVRfQklUU19VTVBfRU5BQkxFCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9TRVRfQklUU19SVjJQX0NNRF9TQ0hFRFVMRVJfRU5BQkxFCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfRU5BQkxFX1NFVF9CSVRTX1JTVkRfRlVUVVJFX0VOQUJMRQkgKDB4N0w8PDI5KQogCiAjZGVmaW5lIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFMJCQkweDAwMDAwODE0CiAjZGVmaW5lIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFNfVFhfU0NIRURVTEVSX0VOQUJMRQkgKDFMPDwwKQpAQCAtNjk5LDYgKzg1Nyw4IEBACiAjZGVmaW5lIEJOWDJfTUlTQ19FTkFCTEVfQ0xSX0JJVFNfVElNRVJfRU5BQkxFCQkgKDFMPDwyNSkKICNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19ETUFfRU5HSU5FX0VOQUJMRQkgKDFMPDwyNikKICNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19VTVBfRU5BQkxFCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9NSVNDX0VOQUJMRV9DTFJfQklUU19SVjJQX0NNRF9TQ0hFRFVMRVJfRU5BQkxFCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfRU5BQkxFX0NMUl9CSVRTX1JTVkRfRlVUVVJFX0VOQUJMRQkgKDB4N0w8PDI5KQogCiAjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFMJCQkweDAwMDAwODE4CiAjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfUENJX0NMS19TUERfREVUCSAoMHhmTDw8MCkKQEAgLTcxOCwzMCArODc4LDQxIEBACiAjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfQUxUX1NSQ18xMgkgKDFMPDw4KQogI2RlZmluZSBCTlgyX01JU0NfQ0xPQ0tfQ09OVFJPTF9CSVRTX0NPUkVfQ0xLX0FMVF9TUkNfNgkgKDJMPDw4KQogI2RlZmluZSBCTlgyX01JU0NfQ0xPQ0tfQ09OVFJPTF9CSVRTX0NPUkVfQ0xLX0FMVF9TUkNfNjIJICg0TDw8OCkKLSNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19QTEFZX0RFQUQJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX01JU0NfQ0xPQ0tfQ09OVFJPTF9CSVRTX1JFU0VSVkVEMF9YSQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfTUlOX1BPV0VSCQkgKDFMPDwxMSkKICNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19QTExfU1BFRUQJICgweGZMPDwxMikKICNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19QTExfU1BFRURfMTAwCSAoMEw8PDEyKQogI2RlZmluZSBCTlgyX01JU0NfQ0xPQ0tfQ09OVFJPTF9CSVRTX0NPUkVfQ0xLX1BMTF9TUEVFRF84MAkgKDFMPDwxMikKICNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19QTExfU1BFRURfNTAJICgyTDw8MTIpCiAjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfUExMX1NQRUVEXzQwCSAoNEw8PDEyKQogI2RlZmluZSBCTlgyX01JU0NfQ0xPQ0tfQ09OVFJPTF9CSVRTX0NPUkVfQ0xLX1BMTF9TUEVFRF8yNQkgKDhMPDwxMikKKyNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19SRVNFUlZFRDFfWEkJICgweGZMPDwxMikKICNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19DT1JFX0NMS19QTExfU1RPUAkgKDFMPDwxNikKLSNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19QQ0lfUExMX1NUT1AJICgxTDw8MTcpCi0jZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfUkVTRVJWRURfMTgJICgxTDw8MTgpCi0jZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfVVNFX1NQRF9ERVQJICgxTDw8MTkpCi0jZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfUkVTRVJWRUQJCSAoMHhmZmZMPDwyMCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19SRVNFUlZFRF8xN19URQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19SRVNFUlZFRF8xOF9URQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19SRVNFUlZFRF8xOV9URQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19SRVNFUlZFRF9URQkgKDB4ZmZmTDw8MjApCisjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfQUxUX01HTVRfWEkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfUkVTRVJWRUQyX1hJCSAoMHgzZkw8PDE4KQorI2RlZmluZSBCTlgyX01JU0NfQ0xPQ0tfQ09OVFJPTF9CSVRTX0NPUkVfQ0xLX1BMTF9WQ09fWEkJICgweDdMPDwyNCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NMT0NLX0NPTlRST0xfQklUU19SRVNFUlZFRDNfWEkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfTUlTQ19DTE9DS19DT05UUk9MX0JJVFNfQ09SRV9DTEtfUExMX1NQRUVEX1hJCSAoMHhmTDw8MjgpCiAKLSNkZWZpbmUgQk5YMl9NSVNDX0dQSU8JCQkJCTB4MDAwMDA4MWMKLSNkZWZpbmUgQk5YMl9NSVNDX0dQSU9fVkFMVUUJCQkJICgweGZmTDw8MCkKLSNkZWZpbmUgQk5YMl9NSVNDX0dQSU9fU0VUCQkJCSAoMHhmZkw8PDgpCi0jZGVmaW5lIEJOWDJfTUlTQ19HUElPX0NMUgkJCQkgKDB4ZmZMPDwxNikKLSNkZWZpbmUgQk5YMl9NSVNDX0dQSU9fRkxPQVQJCQkJICgweGZmTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19TUElPCQkJCQkweDAwMDAwODFjCisjZGVmaW5lIEJOWDJfTUlTQ19TUElPX1ZBTFVFCQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19TUElPX1NFVAkJCQkgKDB4ZmZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfU1BJT19DTFIJCQkJICgweGZmTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19TUElPX0ZMT0FUCQkJCSAoMHhmZkw8PDI0KQogCi0jZGVmaW5lIEJOWDJfTUlTQ19HUElPX0lOVAkJCQkweDAwMDAwODIwCi0jZGVmaW5lIEJOWDJfTUlTQ19HUElPX0lOVF9JTlRfU1RBVEUJCQkgKDB4Zkw8PDApCi0jZGVmaW5lIEJOWDJfTUlTQ19HUElPX0lOVF9PTERfVkFMVUUJCQkgKDB4Zkw8PDgpCi0jZGVmaW5lIEJOWDJfTUlTQ19HUElPX0lOVF9PTERfU0VUCQkJICgweGZMPDwxNikKLSNkZWZpbmUgQk5YMl9NSVNDX0dQSU9fSU5UX09MRF9DTFIJCQkgKDB4Zkw8PDI0KQorI2RlZmluZSBCTlgyX01JU0NfU1BJT19JTlQJCQkJMHgwMDAwMDgyMAorI2RlZmluZSBCTlgyX01JU0NfU1BJT19JTlRfSU5UX1NUQVRFX1RFCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfU1BJT19JTlRfT0xEX1ZBTFVFX1RFCQkJICgweGZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfU1BJT19JTlRfT0xEX1NFVF9URQkJCSAoMHhmTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19TUElPX0lOVF9PTERfQ0xSX1RFCQkJICgweGZMPDwyNCkKKyNkZWZpbmUgQk5YMl9NSVNDX1NQSU9fSU5UX0lOVF9TVEFURV9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19TUElPX0lOVF9PTERfVkFMVUVfWEkJCQkgKDB4ZmZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfU1BJT19JTlRfT0xEX1NFVF9YSQkJCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfU1BJT19JTlRfT0xEX0NMUl9YSQkJCSAoMHhmZkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfTUlTQ19DT05GSUdfTEZTUgkJCQkweDAwMDAwODI0CiAjZGVmaW5lIEJOWDJfTUlTQ19DT05GSUdfTEZTUl9ESVYJCQkgKDB4ZmZmZkw8PDApCkBAIC03NzUsNiArOTQ2LDggQEAKICNkZWZpbmUgQk5YMl9NSVNDX0xGU1JfTUFTS19CSVRTX1RJTUVSX0VOQUJMRQkJICgxTDw8MjUpCiAjZGVmaW5lIEJOWDJfTUlTQ19MRlNSX01BU0tfQklUU19ETUFfRU5HSU5FX0VOQUJMRQkgKDFMPDwyNikKICNkZWZpbmUgQk5YMl9NSVNDX0xGU1JfTUFTS19CSVRTX1VNUF9FTkFCTEUJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX01JU0NfTEZTUl9NQVNLX0JJVFNfUlYyUF9DTURfU0NIRURVTEVSX0VOQUJMRQkgKDFMPDwyOCkKKyNkZWZpbmUgQk5YMl9NSVNDX0xGU1JfTUFTS19CSVRTX1JTVkRfRlVUVVJFX0VOQUJMRQkgKDB4N0w8PDI5KQogCiAjZGVmaW5lIEJOWDJfTUlTQ19BUkJfUkVRMAkJCQkweDAwMDAwODJjCiAjZGVmaW5lIEJOWDJfTUlTQ19BUkJfUkVRMQkJCQkweDAwMDAwODMwCkBAIC04MzEsMjIgKzEwMDQsMTIgQEAKICNkZWZpbmUgQk5YMl9NSVNDX0FSQl9HTlQzXzMwCQkJCSAoMHg3TDw8MjQpCiAjZGVmaW5lIEJOWDJfTUlTQ19BUkJfR05UM18zMQkJCQkgKDB4N0w8PDI4KQogCi0jZGVmaW5lIEJOWDJfTUlTQ19QUkJTX0NPTlRST0wJCQkJMHgwMDAwMDg3OAotI2RlZmluZSBCTlgyX01JU0NfUFJCU19DT05UUk9MX0VOCQkJICgxTDw8MCkKLSNkZWZpbmUgQk5YMl9NSVNDX1BSQlNfQ09OVFJPTF9SU1RCCQkJICgxTDw8MSkKLSNkZWZpbmUgQk5YMl9NSVNDX1BSQlNfQ09OVFJPTF9JTlYJCQkgKDFMPDwyKQotI2RlZmluZSBCTlgyX01JU0NfUFJCU19DT05UUk9MX0VSUl9DTFIJCQkgKDFMPDwzKQotI2RlZmluZSBCTlgyX01JU0NfUFJCU19DT05UUk9MX09SREVSCQkJICgweDNMPDw0KQotI2RlZmluZSBCTlgyX01JU0NfUFJCU19DT05UUk9MX09SREVSXzdUSAkJICgwTDw8NCkKLSNkZWZpbmUgQk5YMl9NSVNDX1BSQlNfQ09OVFJPTF9PUkRFUl8xNVRICQkgKDFMPDw0KQotI2RlZmluZSBCTlgyX01JU0NfUFJCU19DT05UUk9MX09SREVSXzIzUkQJCSAoMkw8PDQpCi0jZGVmaW5lIEJOWDJfTUlTQ19QUkJTX0NPTlRST0xfT1JERVJfMzFTVAkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1JFU0VSVkVEMQkJCQkweDAwMDAwODc4CisjZGVmaW5lIEJOWDJfTUlTQ19SRVNFUlZFRDFfTUlTQ19SRVNFUlZFRDFfVkFMVUUJICgweDNmTDw8MCkKIAotI2RlZmluZSBCTlgyX01JU0NfUFJCU19TVEFUVVMJCQkJMHgwMDAwMDg3YwotI2RlZmluZSBCTlgyX01JU0NfUFJCU19TVEFUVVNfTE9DSwkJCSAoMUw8PDApCi0jZGVmaW5lIEJOWDJfTUlTQ19QUkJTX1NUQVRVU19TVEtZCQkJICgxTDw8MSkKLSNkZWZpbmUgQk5YMl9NSVNDX1BSQlNfU1RBVFVTX0VSUk9SUwkJCSAoMHgzZmZmTDw8MikKLSNkZWZpbmUgQk5YMl9NSVNDX1BSQlNfU1RBVFVTX1NUQVRFCQkJICgweGZMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX1JFU0VSVkVEMgkJCQkweDAwMDAwODdjCisjZGVmaW5lIEJOWDJfTUlTQ19SRVNFUlZFRDJfUENJRV9ESVMJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUkVTRVJWRUQyX0xJTktfSU5fTDIzCQkJICgxTDw8MSkKIAogI2RlZmluZSBCTlgyX01JU0NfU01fQVNGX0NPTlRST0wJCQkweDAwMDAwODgwCiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9BU0ZfUlNUCQkgKDFMPDwwKQpAQCAtODU3LDEzICsxMDIwLDE1IEBACiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9QTF9UTwkJCSAoMUw8PDUpCiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9SVF9UTwkJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9TTUJfRVZFTlQJCSAoMUw8PDcpCi0jZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9SRVMJCQkgKDB4Zkw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9TVFJFVENIX0VOCQkgKDFMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfU01fQVNGX0NPTlRST0xfU1RSRVRDSF9QVUxTRQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9NSVNDX1NNX0FTRl9DT05UUk9MX1JFUwkJCSAoMHgzTDw8MTApCiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9TTUJfRU4JCQkgKDFMPDwxMikKICNkZWZpbmUgQk5YMl9NSVNDX1NNX0FTRl9DT05UUk9MX1NNQl9CQl9FTgkJICgxTDw8MTMpCiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9TTUJfTk9fQUREUl9GSUxUCSAoMUw8PDE0KQogI2RlZmluZSBCTlgyX01JU0NfU01fQVNGX0NPTlRST0xfU01CX0FVVE9SRUFECQkgKDFMPDwxNSkKLSNkZWZpbmUgQk5YMl9NSVNDX1NNX0FTRl9DT05UUk9MX05JQ19TTUJfQUREUjEJCSAoMHgzZkw8PDE2KQotI2RlZmluZSBCTlgyX01JU0NfU01fQVNGX0NPTlRST0xfTklDX1NNQl9BRERSMgkJICgweDNmTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9OSUNfU01CX0FERFIxCQkgKDB4N2ZMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX1NNX0FTRl9DT05UUk9MX05JQ19TTUJfQUREUjIJCSAoMHg3Zkw8PDIzKQogI2RlZmluZSBCTlgyX01JU0NfU01fQVNGX0NPTlRST0xfRU5fTklDX1NNQl9BRERSXzAJICgxTDw8MzApCiAjZGVmaW5lIEJOWDJfTUlTQ19TTV9BU0ZfQ09OVFJPTF9TTUJfRUFSTFlfQVRUTgkJICgxTDw8MzEpCiAKQEAgLTg5MSwxMyArMTA1NiwxMyBAQAogI2RlZmluZSBCTlgyX01JU0NfU01CX09VVF9TTUJfT1VUX1NUQVRVUwkJICgweGZMPDwyMCkKICNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TVEFUVVNfT0sJCSAoMEw8PDIwKQogI2RlZmluZSBCTlgyX01JU0NfU01CX09VVF9TTUJfT1VUX1NUQVRVU19GSVJTVF9OQUNLCSAoMUw8PDIwKQotI2RlZmluZSBCTlgyX01JU0NfU01CX09VVF9TTUJfT1VUX1NUQVRVU19TVUJfTkFDSwkgKDlMPDwyMCkKICNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TVEFUVVNfVUZMT1cJCSAoMkw8PDIwKQogI2RlZmluZSBCTlgyX01JU0NfU01CX09VVF9TTUJfT1VUX1NUQVRVU19TVE9QCQkgKDNMPDwyMCkKICNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TVEFUVVNfVElNRU9VVAkgKDRMPDwyMCkKICNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TVEFUVVNfRklSU1RfTE9TVAkgKDVMPDwyMCkKKyNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TVEFUVVNfQkFEQUNLCQkgKDZMPDwyMCkKKyNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TVEFUVVNfU1VCX05BQ0sJICg5TDw8MjApCiAjZGVmaW5lIEJOWDJfTUlTQ19TTUJfT1VUX1NNQl9PVVRfU1RBVFVTX1NVQl9MT1NUCSAoMHhkTDw8MjApCi0jZGVmaW5lIEJOWDJfTUlTQ19TTUJfT1VUX1NNQl9PVVRfU1RBVFVTX0JBREFDSwkJICgweDZMPDwyMCkKICNkZWZpbmUgQk5YMl9NSVNDX1NNQl9PVVRfU01CX09VVF9TTEFWRU1PREUJCSAoMUw8PDI0KQogI2RlZmluZSBCTlgyX01JU0NfU01CX09VVF9TTUJfT1VUX0RBVF9FTgkJICgxTDw8MjUpCiAjZGVmaW5lIEJOWDJfTUlTQ19TTUJfT1VUX1NNQl9PVVRfREFUX0lOCQkgKDFMPDwyNikKQEAgLTk1NSw2ICsxMTIwLDM4IEBACiAjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfUkRFX01JU0NfUlBDCQkgKDFMPDwyOSkKICNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SREVfTUlTQ19SUE0JCSAoMUw8PDMwKQogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEwX1JWMlBfTUlTQ19DQjBSRUdTCQkgKDFMPDwzMSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9DT01fRE1BRV9QRVJSX0VOX1hJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEwX0NQX0RNQUVfUEVSUl9FTl9YSQkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SUE1fQUNQSUJFTUVNX1BFUlJfRU5fWEkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9DVFhfVVNBR0VfQ05UX1BFUlJfRU5fWEkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9DVFhfUEdUQkxfUEVSUl9FTl9YSQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEwX0NUWF9DQUNIRV9QRVJSX0VOX1hJCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfQ1RYX01JUlJPUl9QRVJSX0VOX1hJCSAoMUw8PDYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfQ09NX0NUWENfUEVSUl9FTl9YSQkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9DT01fU0NQQURfUEVSUl9FTl9YSQkgKDFMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEwX0NQX0NUWENfUEVSUl9FTl9YSQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9DUF9TQ1BBRF9QRVJSX0VOX1hJCQkgKDFMPDwxMCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SWFBfUkJVRkNfUEVSUl9FTl9YSQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SWFBfQ1RYQ19QRVJSX0VOX1hJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SWFBfU0NQQURfUEVSUl9FTl9YSQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9UUEFUX1NDUEFEX1BFUlJfRU5fWEkJICgxTDw8MTQpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfVFhQX0NUWENfUEVSUl9FTl9YSQkJICgxTDw8MTUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfVFhQX1NDUEFEX1BFUlJfRU5fWEkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfQ1NfVE1FTV9QRVJSX0VOX1hJCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9NUV9DVFhfUEVSUl9FTl9YSQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfUlBNX0RGSUZPTUVNX1BFUlJfRU5fWEkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfUlBDX0RGSUZPTUVNX1BFUlJfRU5fWEkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfUkJVRl9QVFJNRU1fUEVSUl9FTl9YSQkgKDFMPDwyMSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SQlVGX0RBVEFNRU1fUEVSUl9FTl9YSQkgKDFMPDwyMikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9SVjJQX1AySVJBTV9QRVJSX0VOX1hJCSAoMUw8PDIzKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEwX1JWMlBfUDFJUkFNX1BFUlJfRU5fWEkJICgxTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfUlYyUF9DQjFSRUdTX1BFUlJfRU5fWEkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfUlYyUF9DQjBSRUdTX1BFUlJfRU5fWEkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfVFBCVUZfUEVSUl9FTl9YSQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfVEhCVUZfUEVSUl9FTl9YSQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTBfVERNQV9QRVJSX0VOX1hJCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMF9UQkRDX1BFUlJfRU5fWEkJCSAoMUw8PDMwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEwX1RTQ0hfTFJfUEVSUl9FTl9YSQkJICgxTDw8MzEpCiAKICNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMQkJCQkweDAwMDAwOGE4CiAjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfUlYyUF9NSVNDX0NCMVJFR1MJCSAoMUw8PDApCkBAIC05ODksNiArMTE4NiwzNSBAQAogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JYUFFfTUlTQwkJCSAoMUw8PDI5KQogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JYUENRX01JU0MJCQkgKDFMPDwzMCkKICNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9STFVQUV9NSVNDCQkJICgxTDw8MzEpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfUkJEQ19QRVJSX0VOX1hJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JETUFfREZJRk9fUEVSUl9FTl9YSQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX0hDX1NUQVRTX1BFUlJfRU5fWEkJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfSENfTVNJWF9QRVJSX0VOX1hJCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX0hDX1BST0RVQ1NUQl9QRVJSX0VOX1hJCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfSENfQ09OU1VNU1RCX1BFUlJfRU5fWEkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9UUEFUUV9QRVJSX0VOX1hJCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX01DUFFfUEVSUl9FTl9YSQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9URE1BUV9QRVJSX0VOX1hJCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1RYUFFfUEVSUl9FTl9YSQkJICgxTDw8MTApCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfQ09NVFFfUEVSUl9FTl9YSQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfQ09NUV9QRVJSX0VOX1hJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9STFVQUV9QRVJSX0VOX1hJCQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9SWFBRX1BFUlJfRU5fWEkJCSAoMUw8PDE0KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JWMlBQUV9QRVJSX0VOX1hJCQkgKDFMPDwxNSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9SRE1BUV9QRVJSX0VOX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9UQVNRX1BFUlJfRU5fWEkJCSAoMUw8PDE3KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1RCRFJRX1BFUlJfRU5fWEkJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1RTQ0hRX1BFUlJfRU5fWEkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX0NPTVhRX1BFUlJfRU5fWEkJCSAoMUw8PDIwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JYUENRX1BFUlJfRU5fWEkJCSAoMUw8PDIxKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JWMlBUUV9QRVJSX0VOX1hJCQkgKDFMPDwyMikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9SVjJQTVFfUEVSUl9FTl9YSQkJICgxTDw8MjMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfQ1BRX1BFUlJfRU5fWEkJCSAoMUw8PDI0KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX0NTUV9QRVJSX0VOX1hJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9STFVQX0NJRF9QRVJSX0VOX1hJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMV9SVjJQQ1NfVE1FTV9QRVJSX0VOX1hJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkExX1JWMlBDU1FfUEVSUl9FTl9YSQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTFfTVFfSURYX1BFUlJfRU5fWEkJCSAoMUw8PDI5KQogCiAjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTIJCQkJMHgwMDAwMDhhYwogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEyX0NPTVFfTUlTQwkJCSAoMUw8PDApCkBAIC0xMDAwLDE5ICsxMjI2LDQ5OCBAQAogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEyX1RETUFRX01JU0MJCQkgKDFMPDw2KQogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEyX1RQQVRRX01JU0MJCQkgKDFMPDw3KQogI2RlZmluZSBCTlgyX01JU0NfUEVSUl9FTkEyX1RBU1FfTUlTQwkJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTJfVEdUX0ZJRk9fUEVSUl9FTl9YSQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMl9VTVBfVFhfUEVSUl9FTl9YSQkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMl9VTVBfUlhfUEVSUl9FTl9YSQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMl9NQ1BfUk9NX1BFUlJfRU5fWEkJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX0VOQTJfTUNQX1NDUEFEX1BFUlJfRU5fWEkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMl9IQl9NRU1fUEVSUl9FTl9YSQkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfRU5BMl9QQ0lFX1JFUExBWV9QRVJSX0VOX1hJCSAoMUw8PDYpCiAKICNkZWZpbmUgQk5YMl9NSVNDX0RFQlVHX1ZFQ1RPUl9TRUwJCQkweDAwMDAwOGIwCiAjZGVmaW5lIEJOWDJfTUlTQ19ERUJVR19WRUNUT1JfU0VMXzAJCQkgKDB4ZmZmTDw8MCkKICNkZWZpbmUgQk5YMl9NSVNDX0RFQlVHX1ZFQ1RPUl9TRUxfMQkJCSAoMHhmZmZMPDwxMikKKyNkZWZpbmUgQk5YMl9NSVNDX0RFQlVHX1ZFQ1RPUl9TRUxfMV9YSQkJCSAoMHhmZmZMPDwxNSkKIAogI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MCQkJCTB4MDAwMDA4YjQKICNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzIJCQkgKDB4Zkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01BSU5fWEkJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9QTFVTMTRfWEkJICgwTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9QTFVTMTJfWEkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9QTFVTMTBfWEkJICgyTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9QTFVTOF9YSQkgKDNMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NQUlOX1BMVVM2X1hJCSAoNEw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01BSU5fUExVUzRfWEkJICg1TDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9QTFVTMl9YSQkgKDZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NQUlOX05PTV9YSQkJICg3TDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9NSU5VUzJfWEkJICg4TDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9NSU5VUzRfWEkJICg5TDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9NSU5VUzZfWEkJICgxMEw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01BSU5fTUlOVVM4X1hJCSAoMTFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NQUlOX01JTlVTMTBfWEkJICgxMkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01BSU5fTUlOVVMxMl9YSQkgKDEzTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUFJTl9NSU5VUzE0X1hJCSAoMTRMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NQUlOX01JTlVTMTZfWEkJICgxNUw8PDApCiAjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81CQkJICgweGZMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzJfNV9QTFVTMTQJCSAoMEw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81X1BMVVMxMgkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8yXzVfUExVUzEwCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzJfNV9QTFVTOAkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8yXzVfUExVUzYJCSAoNEw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81X1BMVVM0CQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzJfNV9QTFVTMgkJICg2TDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8yXzVfTk9NCQkJICg3TDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8yXzVfTUlOVVMyCQkgKDhMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzJfNV9NSU5VUzQJCSAoOUw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81X01JTlVTNgkJICgxMEw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81X01JTlVTOAkJICgxMUw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81X01JTlVTMTAJCSAoMTJMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzJfNV9NSU5VUzEyCQkgKDEzTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8yXzVfTUlOVVMxNAkJICgxNEw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMl81X01JTlVTMTYJCSAoMTVMPDw0KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UCQkJICgweGZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX1BMVVMxNAkJICgwTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUdNVF9QTFVTMTIJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01HTVRfUExVUzEwCQkgKDJMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX1BMVVM4CQkgKDNMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX1BMVVM2CQkgKDRMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX1BMVVM0CQkgKDVMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX1BMVVMyCQkgKDZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX05PTQkJICg3TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUdNVF9NSU5VUzIJCSAoOEw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01HTVRfTUlOVVM0CQkgKDlMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfVlJFR19DT05UUk9MXzFfMF9NR01UX01JTlVTNgkJICgxMEw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19WUkVHX0NPTlRST0xfMV8wX01HTVRfTUlOVVM4CQkgKDExTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUdNVF9NSU5VUzEwCQkgKDEyTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUdNVF9NSU5VUzEyCQkgKDEzTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUdNVF9NSU5VUzE0CQkgKDE0TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1ZSRUdfQ09OVFJPTF8xXzBfTUdNVF9NSU5VUzE2CQkgKDE1TDw8OCkKIAogI2RlZmluZSBCTlgyX01JU0NfRklOQUxfQ0xLX0NUTF9WQUwJCQkweDAwMDAwOGI4CiAjZGVmaW5lIEJOWDJfTUlTQ19GSU5BTF9DTEtfQ1RMX1ZBTF9NSVNDX0ZJTkFMX0NMS19DVExfVkFMCSAoMHgzZmZmZmZmTDw8NikKIAotI2RlZmluZSBCTlgyX01JU0NfVU5VU0VEMAkJCQkweDAwMDAwOGJjCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwCQkJCTB4MDAwMDA4YmMKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfVFhfRFJJVkUJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9STUlJX01PREUJCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9STUlJX0NSU0RWX1NFTAkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfUlZNSUlfTU9ERQkJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX0ZMQVNIX1NBTVBfU0NMS19ORUdFREdFX1RFCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX0hJRERFTl9SRVZJU0lPTl9JRF9URQkgKDFMPDw1KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9IQ19DTlRMX1RNT1VUX0NUUl9SU1RfVEUJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfUkVTRVJWRUQxX1hJCQkgKDB4N0w8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX0VOQV9DT1JFX1JTVF9PTl9NQUlOX1BXUl9HT0lOR19BV0FZCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX0VOQV9TRUxfVkFVWF9CX0lOX0wyX1RFCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX0dSQ19CTktfRlJFRV9GSVhfVEUJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfTEVEX0FDVF9TRUxfVEUJCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9SRVNFUlZFRDJfWEkJCSAoMHg3TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfVVAxX0RFRjAJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfRklCRVJfTU9ERV9ESVNfREVGCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfRk9SQ0UyNTAwX0RFRgkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX0FVVE9ERVRFQ1RfRElTX0RFRgkJICgxTDw8MTQpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX1BBUkFMTEVMX0RFVEVDVF9ERUYJICgxTDw8MTUpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfREFJCQkgKDB4Zkw8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX0RBSV8zTUEJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX0RBSV8yUDVNQQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfREFJXzJQME1BCQkgKDNMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9EQUlfMVA1TUEJCSAoNUw8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX0RBSV8xUDBNQQkJICg3TDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfREFJX1BXUkROCQkgKDE1TDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfUFJFMkRJUwkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfUFJFMURJUwkJICgxTDw8MjEpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfQ1RBVAkJICgweDNMPDwyMikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9DVEFUX002UAkJICgwTDw8MjIpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfQ1RBVF9NMFAJCSAoMUw8PDIyKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX0NUQVRfUDBQCQkgKDJMPDwyMikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9DVEFUX1A2UAkJICgzTDw8MjIpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfUFRBVAkJICgweDNMPDwyNCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9QVEFUX002UAkJICgwTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfUFRBVF9NMFAJCSAoMUw8PDI0KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX1BUQVRfUDBQCQkgKDJMPDwyNCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9QVEFUX1A2UAkJICgzTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUFNUF9BREoJCSAoMHgzTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUFNUF9BREpfMjQwVUEJICgwTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUFNUF9BREpfMTYwVUEJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUFNUF9BREpfNDAwVUEJICgyTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUFNUF9BREpfMzIwVUEJICgzTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUNCVUZfQURKCQkgKDB4M0w8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX0lDQlVGX0FESl8yNDBVQQkgKDBMPDwyOCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9JQ0JVRl9BREpfMTYwVUEJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfSUNCVUZfQURKXzQwMFVBCSAoMkw8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX0lDQlVGX0FESl8zMjBVQQkgKDNMPDwyOCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9YVEFMX0FESgkJICgweDNMPDwzMCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9YVEFMX0FESl8xUDU3CSAoMEw8PDMwKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMF9PU0NDVFJMX1hUQUxfQURKXzFQNDUJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwwX09TQ0NUUkxfWFRBTF9BREpfMVA2MgkgKDJMPDwzMCkKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDBfT1NDQ1RSTF9YVEFMX0FESl8xUDY2CSAoM0w8PDMwKQorCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwxCQkJCTB4MDAwMDA4YzAKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDFfMV9BVFROX0JUTl9QUlNOVF9URQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMV8xX0FUVE5fSU5EX1BSU05UX1RFCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwxXzFfUFdSX0lORF9QUlNOVF9URQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9NSVNDX0dQX0hXX0NUTDFfMF9QQ0lFX0xPT1BCQUNLX1RFCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX01JU0NfR1BfSFdfQ1RMMV9SRVNFUlZFRF9TT0ZUX1hJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19HUF9IV19DVEwxX1JFU0VSVkVEX0hBUkRfWEkJCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9NSVNDX05FV19IV19DVEwJCQkJMHgwMDAwMDhjNAorI2RlZmluZSBCTlgyX01JU0NfTkVXX0hXX0NUTF9NQUlOX1BPUl9CWVBBU1MJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19ORVdfSFdfQ1RMX1JJTkdPU0NfRU5BQkxFCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfTkVXX0hXX0NUTF9SSU5HT1NDX1NFTDAJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfTUlTQ19ORVdfSFdfQ1RMX1JJTkdPU0NfU0VMMQkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX05FV19IV19DVExfUkVTRVJWRURfU0hBUkVECQkgKDB4ZmZmTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX05FV19IV19DVExfUkVTRVJWRURfU1BMSVQJCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9NSVNDX05FV19DT1JFX0NUTAkJCQkweDAwMDAwOGM4CisjZGVmaW5lIEJOWDJfTUlTQ19ORVdfQ09SRV9DVExfTElOS19IT0xET0ZGX1NVQ0NFU1MJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX05FV19DT1JFX0NUTF9MSU5LX0hPTERPRkZfUkVRCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfTkVXX0NPUkVfQ1RMX1JFU0VSVkVEX0NNTgkJICgweDNmZmZMPDwyKQorI2RlZmluZSBCTlgyX01JU0NfTkVXX0NPUkVfQ1RMX1JFU0VSVkVEX1RDCQkgKDB4ZmZmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfTUlTQ19FQ09fSFdfQ1RMCQkJCTB4MDAwMDA4Y2MKKyNkZWZpbmUgQk5YMl9NSVNDX0VDT19IV19DVExfTEFSR0VfR1JDX1RNT1VUX0VOCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfRUNPX0hXX0NUTF9SRVNFUlZFRF9TT0ZUCQkgKDB4N2ZmZkw8PDEpCisjZGVmaW5lIEJOWDJfTUlTQ19FQ09fSFdfQ1RMX1JFU0VSVkVEX0hBUkQJCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9NSVNDX0VDT19DT1JFX0NUTAkJCQkweDAwMDAwOGQwCisjZGVmaW5lIEJOWDJfTUlTQ19FQ09fQ09SRV9DVExfUkVTRVJWRURfU09GVAkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfRUNPX0NPUkVfQ1RMX1JFU0VSVkVEX0hBUkQJCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9NSVNDX1BQSU8JCQkJCTB4MDAwMDA4ZDQKKyNkZWZpbmUgQk5YMl9NSVNDX1BQSU9fVkFMVUUJCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUFBJT19TRVQJCQkJICgweGZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfUFBJT19DTFIJCQkJICgweGZMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX1BQSU9fRkxPQVQJCQkJICgweGZMPDwyNCkKKworI2RlZmluZSBCTlgyX01JU0NfUFBJT19JTlQJCQkJMHgwMDAwMDhkOAorI2RlZmluZSBCTlgyX01JU0NfUFBJT19JTlRfSU5UX1NUQVRFCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUFBJT19JTlRfT0xEX1ZBTFVFCQkJICgweGZMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfUFBJT19JTlRfT0xEX1NFVAkJCSAoMHhmTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19QUElPX0lOVF9PTERfQ0xSCQkJICgweGZMPDwyNCkKKworI2RlZmluZSBCTlgyX01JU0NfUkVTRVRfTlVNUwkJCQkweDAwMDAwOGRjCisjZGVmaW5lIEJOWDJfTUlTQ19SRVNFVF9OVU1TX05VTV9IQVJEX1JFU0VUUwkJICgweDdMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUkVTRVRfTlVNU19OVU1fUENJRV9SRVNFVFMJCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1JFU0VUX05VTVNfTlVNX1BFUlNUQl9SRVNFVFMJCSAoMHg3TDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1JFU0VUX05VTVNfTlVNX0NNTl9SRVNFVFMJCSAoMHg3TDw8MTIpCisjZGVmaW5lIEJOWDJfTUlTQ19SRVNFVF9OVU1TX05VTV9QT1JUX1JFU0VUUwkJICgweDdMPDwxNikKKworI2RlZmluZSBCTlgyX01JU0NfQ1MxNl9FUlIJCQkJMHgwMDAwMDhlMAorI2RlZmluZSBCTlgyX01JU0NfQ1MxNl9FUlJfRU5BX1BDSQkJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19DUzE2X0VSUl9FTkFfUkRNQQkJCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfTUlTQ19DUzE2X0VSUl9FTkFfVERNQQkJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfTUlTQ19DUzE2X0VSUl9FTkFfRU1BQwkJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19DUzE2X0VSUl9FTkFfQ1RYCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX0VOQV9UQkRSCQkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX0VOQV9SQkRDCQkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX0VOQV9DT00JCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX01JU0NfQ1MxNl9FUlJfRU5BX0NQCQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX1NUQV9QQ0kJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX1NUQV9SRE1BCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfTUlTQ19DUzE2X0VSUl9TVEFfVERNQQkJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX01JU0NfQ1MxNl9FUlJfU1RBX0VNQUMJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX1NUQV9DVFgJCQkgKDFMPDwyMCkKKyNkZWZpbmUgQk5YMl9NSVNDX0NTMTZfRVJSX1NUQV9UQkRSCQkJICgxTDw8MjEpCisjZGVmaW5lIEJOWDJfTUlTQ19DUzE2X0VSUl9TVEFfUkJEQwkJCSAoMUw8PDIyKQorI2RlZmluZSBCTlgyX01JU0NfQ1MxNl9FUlJfU1RBX0NPTQkJCSAoMUw8PDIzKQorI2RlZmluZSBCTlgyX01JU0NfQ1MxNl9FUlJfU1RBX0NQCQkJICgxTDw8MjQpCisKKyNkZWZpbmUgQk5YMl9NSVNDX1NQSU9fRVZFTlQJCQkJMHgwMDAwMDhlNAorI2RlZmluZSBCTlgyX01JU0NfU1BJT19FVkVOVF9FTkFCTEUJCQkgKDB4ZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfTUlTQ19QUElPX0VWRU5UCQkJCTB4MDAwMDA4ZTgKKyNkZWZpbmUgQk5YMl9NSVNDX1BQSU9fRVZFTlRfRU5BQkxFCQkJICgweGZMPDwwKQorCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkwJCQkweDAwMDAwOGVjCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfQk9ORF9JRAkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9CT05EX0lEX1gJCSAoMEw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfQk9ORF9JRF9DCQkgKDNMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX0JPTkRfSURfUwkJICgxMkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfUEhZX0NUUkxfU1RSQVAJICgweDdMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1BPUlRfU1dBUF9QSU4JCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1NFUkRFUzFfU0lHREVUCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1NFUkRFUzBfU0lHREVUCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1BIWTFfU0lHREVUCQkgKDFMPDwxNCkKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9QSFkwX1NJR0RFVAkJICgxTDw8MTUpCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfTENQTExfUlNUCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9TRVJERVMxX1JTVAkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfU0VSREVTMF9SU1QJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1BIWTFfUlNUCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9QSFkwX1JTVAkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfUEhZX0NUUkwJCSAoMHg3TDw8MjEpCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfUE9SVF9TV0FQCQkgKDFMPDwyNCkKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9TVFJBUF9PVkVSUklERQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9QSFlfU0VSREVTX0lERFEJICgweGZMPDwyNikKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9QSFlfU0VSREVTX0lERFFfU0VSMV9JRERRCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX01JU0NfRFVBTF9NRURJQV9DVFJMX1BIWV9TRVJERVNfSUREUV9TRVIwX0lERFEJICgyTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19EVUFMX01FRElBX0NUUkxfUEhZX1NFUkRFU19JRERRX1BIWTFfSUREUQkgKDRMPDwyNikKKyNkZWZpbmUgQk5YMl9NSVNDX0RVQUxfTUVESUFfQ1RSTF9QSFlfU0VSREVTX0lERFFfUEhZMF9JRERRCSAoOEw8PDI2KQorCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMQkJCQkweDAwMDAwOGYwCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9GTU9ERQkJCSAoMHg3TDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQxX0ZNT0RFX0lETEUJCQkgKDBMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX0NNRDFfRk1PREVfV1JJVEUJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX0NNRDFfRk1PREVfSU5JVAkJCSAoMkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9GTU9ERV9TRVQJCQkgKDNMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX0NNRDFfRk1PREVfUlNUCQkJICg0TDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQxX0ZNT0RFX1ZFUklGWQkJCSAoNUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9GTU9ERV9SRVNFUlZFRDAJCSAoNkw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9GTU9ERV9SRVNFUlZFRDEJCSAoN0w8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9VU0VQSU5TCQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQxX1BST0dTRUwJCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX01JU0NfT1RQX0NNRDFfUFJPR1NUQVJUCQkJICgxTDw8MTApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9QQ09VTlQJCQkgKDB4N0w8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfT1RQX0NNRDFfUEJZUAkJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQxX1ZTRUwJCQkJICgweGZMPDwyMCkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQxX1RNCQkJCSAoMHg3TDw8MjcpCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfQ01EMV9TQURCWVAJCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQxX0RFQlVHCQkJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQyCQkJCTB4MDAwMDA4ZjQKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQyX09UUF9ST01fQUREUgkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX0NNRDJfRE9TRUwJCQkgKDB4N2ZMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQyX0RPU0VMXzAJCQkgKDBMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQyX0RPU0VMXzEJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9DTUQyX0RPU0VMXzEyNwkJCSAoMTI3TDw8MTYpCisKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9TVEFUVVMJCQkJMHgwMDAwMDhmOAorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NUQVRVU19EQVRBCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9TVEFUVVNfVkFMSUQJCQkgKDFMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NUQVRVU19CVVNZCQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9TVEFUVVNfQlVTWVNNCQkJICgxTDw8MTApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfU1RBVFVTX0RPTkUJCQkgKDFMPDwxMSkKKworI2RlZmluZSBCTlgyX01JU0NfT1RQX1NISUZUMV9DTUQJCQkweDAwMDAwOGZjCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfU0hJRlQxX0NNRF9SRVNFVF9NT0RFX04JCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfU0hJRlQxX0NNRF9TSElGVF9ET05FCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NISUZUMV9DTURfU0hJRlRfU1RBUlQJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfU0hJRlQxX0NNRF9MT0FEX0RBVEEJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfU0hJRlQxX0NNRF9TSElGVF9TRUxFQ1QJCSAoMHgxZkw8PDgpCisKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9TSElGVDFfREFUQQkJCTB4MDAwMDA5MDAKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9TSElGVDJfQ01ECQkJMHgwMDAwMDkwNAorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NISUZUMl9DTURfUkVTRVRfTU9ERV9OCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NISUZUMl9DTURfU0hJRlRfRE9ORQkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9NSVNDX09UUF9TSElGVDJfQ01EX1NISUZUX1NUQVJUCQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NISUZUMl9DTURfTE9BRF9EQVRBCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX01JU0NfT1RQX1NISUZUMl9DTURfU0hJRlRfU0VMRUNUCQkgKDB4MWZMPDw4KQorCisjZGVmaW5lIEJOWDJfTUlTQ19PVFBfU0hJRlQyX0RBVEEJCQkweDAwMDAwOTA4CisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMAkJCQkweDAwMDAwOTBjCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMF9NQklTVF9FTgkJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMF9CSVNUX1NFVFVQCQkJICgweDNMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzBfTUJJU1RfQVNZTkNfUkVTRVQJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMF9NQklTVF9ET05FCQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MwX01CSVNUX0dPCQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MwX0JJU1RfT1ZFUlJJREUJCSAoMUw8PDMxKQorCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX01FTVNUQVRVUzAJCQkweDAwMDAwOTEwCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMQkJCQkweDAwMDAwOTE0CisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMV9NQklTVF9FTgkJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMV9CSVNUX1NFVFVQCQkJICgweDNMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzFfTUJJU1RfQVNZTkNfUkVTRVQJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMV9NQklTVF9ET05FCQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MxX01CSVNUX0dPCQkJICgxTDw8OSkKKworI2RlZmluZSBCTlgyX01JU0NfQklTVF9NRU1TVEFUVVMxCQkJMHgwMDAwMDkxOAorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzIJCQkJMHgwMDAwMDkxYworI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzJfTUJJU1RfRU4JCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzJfQklTVF9TRVRVUAkJCSAoMHgzTDw8MSkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MyX01CSVNUX0FTWU5DX1JFU0VUCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzJfTUJJU1RfRE9ORQkJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTMl9NQklTVF9HTwkJCSAoMUw8PDkpCisKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfTUVNU1RBVFVTMgkJCTB4MDAwMDA5MjAKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MzCQkJCTB4MDAwMDA5MjQKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MzX01CSVNUX0VOCQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MzX0JJU1RfU0VUVVAJCQkgKDB4M0w8PDEpCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTM19NQklTVF9BU1lOQ19SRVNFVAkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1MzX01CSVNUX0RPTkUJCQkgKDFMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzNfTUJJU1RfR08JCQkgKDFMPDw5KQorCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX01FTVNUQVRVUzMJCQkweDAwMDAwOTI4CisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTNAkJCQkweDAwMDAwOTJjCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTNF9NQklTVF9FTgkJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTNF9CSVNUX1NFVFVQCQkJICgweDNMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzRfTUJJU1RfQVNZTkNfUkVTRVQJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTNF9NQklTVF9ET05FCQkJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1M0X01CSVNUX0dPCQkJICgxTDw8OSkKKworI2RlZmluZSBCTlgyX01JU0NfQklTVF9NRU1TVEFUVVM0CQkJMHgwMDAwMDkzMAorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzUJCQkJMHgwMDAwMDkzNAorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzVfTUJJU1RfRU4JCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzVfQklTVF9TRVRVUAkJCSAoMHgzTDw8MSkKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfQ1M1X01CSVNUX0FTWU5DX1JFU0VUCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX01JU0NfQklTVF9DUzVfTUJJU1RfRE9ORQkJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19CSVNUX0NTNV9NQklTVF9HTwkJCSAoMUw8PDkpCisKKyNkZWZpbmUgQk5YMl9NSVNDX0JJU1RfTUVNU1RBVFVTNQkJCTB4MDAwMDA5MzgKKyNkZWZpbmUgQk5YMl9NSVNDX01FTV9UTTAJCQkJMHgwMDAwMDkzYworI2RlZmluZSBCTlgyX01JU0NfTUVNX1RNMF9QQ0lFX1JFUExBWV9UTQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfTUVNX1RNMF9NQ1BfU0NQQUQJCQkgKDB4Zkw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19NRU1fVE0wX1VNUF9UTQkJCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfTUVNX1RNMF9IQl9NRU1fVE0JCQkgKDB4Zkw8PDI0KQorCisjZGVmaW5lIEJOWDJfTUlTQ19VU1BMTF9DVFJMCQkJCTB4MDAwMDA5NDAKKyNkZWZpbmUgQk5YMl9NSVNDX1VTUExMX0NUUkxfUEhfREVUX0RJUwkJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19VU1BMTF9DVFJMX0ZSRVFfREVUX0RJUwkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9NSVNDX1VTUExMX0NUUkxfTENQWAkJCSAoMHgzZkw8PDIpCisjZGVmaW5lIEJOWDJfTUlTQ19VU1BMTF9DVFJMX1JYCQkJCSAoMHgzTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX1VTUExMX0NUUkxfVkNfRU4JCQkgKDFMPDwxMCkKKyNkZWZpbmUgQk5YMl9NSVNDX1VTUExMX0NUUkxfVkNPX01HCQkJICgweDNMPDwxMSkKKyNkZWZpbmUgQk5YMl9NSVNDX1VTUExMX0NUUkxfS1ZDT19YRgkJCSAoMHg3TDw8MTMpCisjZGVmaW5lIEJOWDJfTUlTQ19VU1BMTF9DVFJMX0tWQ09fWFMJCQkgKDB4N0w8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfVVNQTExfQ1RSTF9URVNURF9FTgkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX01JU0NfVVNQTExfQ1RSTF9URVNURF9TRUwJCQkgKDB4N0w8PDIwKQorI2RlZmluZSBCTlgyX01JU0NfVVNQTExfQ1RSTF9URVNUQV9FTgkJCSAoMUw8PDIzKQorI2RlZmluZSBCTlgyX01JU0NfVVNQTExfQ1RSTF9URVNUQV9TRUwJCQkgKDB4M0w8PDI0KQorI2RlZmluZSBCTlgyX01JU0NfVVNQTExfQ1RSTF9BVFRFTl9GUkVGCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19VU1BMTF9DVFJMX0RJR0lUQUxfUlNUCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9NSVNDX1VTUExMX0NUUkxfQU5BTE9HX1JTVAkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfVVNQTExfQ1RSTF9MT0NLCQkJICgxTDw8MjkpCisKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMAkJCQkweDAwMDAwOTQ0CisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ09NX0RNQUVfUEVSUgkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9DUF9ETUFFX1BFUlIJCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlBNX0FDUElCRU1FTV9QRVJSCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ1RYX1VTQUdFX0NOVF9QRVJSCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ1RYX1BHVEJMX1BFUlIJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ1RYX0NBQ0hFX1BFUlIJCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ1RYX01JUlJPUl9QRVJSCQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMwX0NPTV9DVFhDX1BFUlIJCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ09NX1NDUEFEX1BFUlIJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ1BfQ1RYQ19QRVJSCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMwX0NQX1NDUEFEX1BFUlIJCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMwX1JYUF9SQlVGQ19QRVJSCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9SWFBfQ1RYQ19QRVJSCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9SWFBfU0NQQURfUEVSUgkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfVFBBVF9TQ1BBRF9QRVJSCQkgKDFMPDwxNCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9UWFBfQ1RYQ19QRVJSCQkgKDFMPDwxNSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9UWFBfU0NQQURfUEVSUgkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfQ1NfVE1FTV9QRVJSCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9NUV9DVFhfUEVSUgkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlBNX0RGSUZPTUVNX1BFUlIJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlBDX0RGSUZPTUVNX1BFUlIJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUkJVRl9QVFJNRU1fUEVSUgkJICgxTDw8MjEpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUkJVRl9EQVRBTUVNX1BFUlIJICgxTDw8MjIpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlYyUF9QMklSQU1fUEVSUgkJICgxTDw8MjMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlYyUF9QMUlSQU1fUEVSUgkJICgxTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlYyUF9DQjFSRUdTX1BFUlIJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfUlYyUF9DQjBSRUdTX1BFUlIJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfVFBCVUZfUEVSUgkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfVEhCVUZfUEVSUgkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzBfVERNQV9QRVJSCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMF9UQkRDX1BFUlIJCSAoMUw8PDMwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMwX1RTQ0hfTFJfUEVSUgkJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMQkJCQkweDAwMDAwOTQ4CisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfUkJEQ19QRVJSCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX1JETUFfREZJRk9fUEVSUgkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9IQ19TVEFUU19QRVJSCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX0hDX01TSVhfUEVSUgkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9IQ19QUk9EVUNTVEJfUEVSUgkgKDFMPDw1KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX0hDX0NPTlNVTVNUQl9QRVJSCSAoMUw8PDYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfVFBBVFFfUEVSUgkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9NQ1BRX1BFUlIJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfVERNQVFfUEVSUgkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9UWFBRX1BFUlIJCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX0NPTVRRX1BFUlIJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX0NPTVFfUEVSUgkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfUkxVUFFfUEVSUgkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfUlhQUV9QRVJSCQkgKDFMPDwxNCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9SVjJQUFFfUEVSUgkJICgxTDw8MTUpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfUkRNQVFfUEVSUgkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfVEFTUV9QRVJSCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9UQkRSUV9QRVJSCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9UU0NIUV9QRVJSCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9DT01YUV9QRVJSCQkgKDFMPDwyMCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9SWFBDUV9QRVJSCQkgKDFMPDwyMSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9SVjJQVFFfUEVSUgkJICgxTDw8MjIpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfUlYyUE1RX1BFUlIJCSAoMUw8PDIzKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX0NQUV9QRVJSCQkJICgxTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19QRVJSX1NUQVRVUzFfQ1NRX1BFUlIJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9STFVQX0NJRF9QRVJSCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9SVjJQQ1NfVE1FTV9QRVJSCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMV9SVjJQQ1NRX1BFUlIJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMxX01RX0lEWF9QRVJSCQkgKDFMPDwyOSkKKworI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMyCQkJCTB4MDAwMDA5NGMKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMl9UR1RfRklGT19QRVJSCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMyX1VNUF9UWF9QRVJSCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMyX1VNUF9SWF9QRVJSCQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX01JU0NfUEVSUl9TVEFUVVMyX01DUF9ST01fUEVSUgkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMl9NQ1BfU0NQQURfUEVSUgkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMl9IQl9NRU1fUEVSUgkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX1BFUlJfU1RBVFVTMl9QQ0lFX1JFUExBWV9QRVJSCQkgKDFMPDw2KQorCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMAkJCQkweDAwMDAwOTUwCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9PQUMJCQkgKDB4N0w8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9PQUNfTkVHVFdFTlRZCQkgKDBMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfT0FDX1pFUk8JCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfT0FDX1RXRU5UWQkJICgzTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX09BQ19GT1JUWQkJCSAoN0w8PDApCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9JQ1BfQ1RSTAkJCSAoMHg3TDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX0lDUF9DVFJMXzM2MAkJICgwTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX0lDUF9DVFJMXzQ4MAkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX0lDUF9DVFJMXzYwMAkJICgzTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX0lDUF9DVFJMXzcyMAkJICg3TDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX0JJQVNfQ1RSTAkJCSAoMHgzTDw8NikKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX1BMTF9PQlNFUlZFCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9WVEhfQ1RSTAkJCSAoMHgzTDw8MTEpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9WVEhfQ1RSTF8wCQkgKDBMPDwxMSkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX1ZUSF9DVFJMXzEJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfVlRIX0NUUkxfMgkJICgyTDw8MTEpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9QTExTRVFTVEFSVAkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9SRVNFUlZFRAkJCSAoMUw8PDE0KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfQ0FQUkVUUllfRU4JCSAoMUw8PDE1KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfRlJFUU1PTklUT1JfRU4JCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfRlJFUURFVFJFU1RBUlRfRU4JCSAoMUw8PDE3KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfRlJFUURFVFJFVFJZX0VOCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX1BMTEZPUkNFRkRPTkVfRU4JCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfUExMRk9SQ0VGRE9ORQkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9QTExGT1JDRUZQQVNTCQkgKDFMPDwyMSkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX1BMTEZPUkNFQ0FQRE9ORV9FTgkgKDFMPDwyMikKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwwX1BMTEZPUkNFQ0FQRE9ORQkJICgxTDw8MjMpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9QTExGT1JDRUNBUFBBU1NfRU4JICgxTDw8MjQpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9QTExGT1JDRUNBUFBBU1MJCSAoMUw8PDI1KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDBfQ0FQUkVTVEFSVAkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMF9DQVBTRUxFQ1RNX0VOCQkgKDFMPDwyNykKKworI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDEJCQkJMHgwMDAwMDk1NAorI2RlZmluZSBCTlgyX01JU0NfTENQTExfQ1RSTDFfQ0FQU0VMRUNUTQkJICgweDFmTDw8MCkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwxX0NBUEZPUkNFU0xPV0RPV05fRU4JICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX0NUUkwxX0NBUEZPUkNFU0xPV0RPV04JCSAoMUw8PDYpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9DVFJMMV9TTE9XRE5fWE9SCQkgKDFMPDw3KQorCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9TVEFUVVMJCQkJMHgwMDAwMDk1OAorI2RlZmluZSBCTlgyX01JU0NfTENQTExfU1RBVFVTX0ZSRVFET05FX1NNCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfU1RBVFVTX0ZSRVFQQVNTX1NNCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfU1RBVFVTX1BMTFNFUURPTkUJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfTUlTQ19MQ1BMTF9TVEFUVVNfUExMU0VRUEFTUwkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX1NUQVRVU19QTExTVEFURQkJCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX1NUQVRVU19DQVBTVEFURQkJCSAoMHg3TDw8NykKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX1NUQVRVU19DQVBTRUxFQ1QJCSAoMHgxZkw8PDEwKQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfU1RBVFVTX1NMT1dETl9JTkRJQ0FUT1IJCSAoMUw8PDE1KQorI2RlZmluZSBCTlgyX01JU0NfTENQTExfU1RBVFVTX1NMT1dETl9JTkRJQ0FUT1JfMAkgKDBMPDwxNSkKKyNkZWZpbmUgQk5YMl9NSVNDX0xDUExMX1NUQVRVU19TTE9XRE5fSU5ESUNBVE9SXzEJICgxTDw8MTUpCisKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkwJCQkJMHgwMDAwMDk1YworI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9GUkVRX01PTgkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkxfRlJFUV9NT05fT0ZGCQkgKDBMPDw1KQorI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9GUkVRX01PTl9PTgkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkxfWFRBTF9BREpDTQkJICgweDNMPDw2KQorI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9YVEFMX0FESkNNXzAJCSAoMEw8PDYpCisjZGVmaW5lIEJOWDJfTUlTQ19PU0NGVU5EU19DVFJMX1hUQUxfQURKQ01fMQkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkxfWFRBTF9BREpDTV8yCQkgKDJMPDw2KQorI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9YVEFMX0FESkNNXzMJCSAoM0w8PDYpCisjZGVmaW5lIEJOWDJfTUlTQ19PU0NGVU5EU19DVFJMX0lDQlVGX0FESgkJICgweDNMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9JQ0JVRl9BREpfMAkJICgwTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkxfSUNCVUZfQURKXzEJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfTUlTQ19PU0NGVU5EU19DVFJMX0lDQlVGX0FESl8yCQkgKDJMPDw4KQorI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9JQ0JVRl9BREpfMwkJICgzTDw8OCkKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkxfSUFNUF9BREoJCSAoMHgzTDw8MTApCisjZGVmaW5lIEJOWDJfTUlTQ19PU0NGVU5EU19DVFJMX0lBTVBfQURKXzAJCSAoMEw8PDEwKQorI2RlZmluZSBCTlgyX01JU0NfT1NDRlVORFNfQ1RSTF9JQU1QX0FESl8xCQkgKDFMPDwxMCkKKyNkZWZpbmUgQk5YMl9NSVNDX09TQ0ZVTkRTX0NUUkxfSUFNUF9BREpfMgkJICgyTDw8MTApCisjZGVmaW5lIEJOWDJfTUlTQ19PU0NGVU5EU19DVFJMX0lBTVBfQURKXzMJCSAoM0w8PDEwKQogCiAKIC8qCkBAIC0xMDMxLDExICsxNzM2LDM1IEBACiAjZGVmaW5lIEJOWDJfTlZNX0NPTU1BTkRfV1JESQkJCQkgKDFMPDwxNykKICNkZWZpbmUgQk5YMl9OVk1fQ09NTUFORF9FV1NSCQkJCSAoMUw8PDE4KQogI2RlZmluZSBCTlgyX05WTV9DT01NQU5EX1dSU1IJCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfTlZNX0NPTU1BTkRfUkRfSUQJCQkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfTlZNX0NPTU1BTkRfUkRfU1RBVFVTCQkJICgxTDw8MjEpCisjZGVmaW5lIEJOWDJfTlZNX0NPTU1BTkRfTU9ERV8yNTYJCQkgKDFMPDwyMikKIAogI2RlZmluZSBCTlgyX05WTV9TVEFUVVMJCQkJCTB4MDAwMDY0MDQKICNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1BJX0ZTTV9TVEFURQkJCSAoMHhmTDw8MCkKICNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX0VFX0ZTTV9TVEFURQkJCSAoMHhmTDw8NCkKICNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX0VRX0ZTTV9TVEFURQkJCSAoMHhmTDw8OCkKKyNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1NQSV9GU01fU1RBVEVfWEkJCSAoMHgxZkw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9JRExFX1hJCSAoMEw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9DTUQwX1hJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9DTUQxX1hJCSAoMkw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9DTURfRklOSVNIMF9YSQkgKDNMPDwwKQorI2RlZmluZSBCTlgyX05WTV9TVEFUVVNfU1BJX0ZTTV9TVEFURV9TUElfQ01EX0ZJTklTSDFfWEkJICg0TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1NQSV9GU01fU1RBVEVfU1BJX0FERFIwX1hJCSAoNUw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9XUklURV9EQVRBMF9YSQkgKDZMPDwwKQorI2RlZmluZSBCTlgyX05WTV9TVEFUVVNfU1BJX0ZTTV9TVEFURV9TUElfV1JJVEVfREFUQTFfWEkJICg3TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1NQSV9GU01fU1RBVEVfU1BJX1dSSVRFX0RBVEEyX1hJCSAoOEw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9SRUFEX0RBVEEwX1hJCSAoOUw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9SRUFEX0RBVEExX1hJCSAoMTBMPDwwKQorI2RlZmluZSBCTlgyX05WTV9TVEFUVVNfU1BJX0ZTTV9TVEFURV9TUElfUkVBRF9EQVRBMl9YSQkgKDExTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1NQSV9GU01fU1RBVEVfU1BJX1JFQURfU1RBVFVTX1JESUQwX1hJCSAoMTJMPDwwKQorI2RlZmluZSBCTlgyX05WTV9TVEFUVVNfU1BJX0ZTTV9TVEFURV9TUElfUkVBRF9TVEFUVVNfUkRJRDFfWEkJICgxM0w8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9SRUFEX1NUQVRVU19SRElEMl9YSQkgKDE0TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1NQSV9GU01fU1RBVEVfU1BJX1JFQURfU1RBVFVTX1JESUQzX1hJCSAoMTVMPDwwKQorI2RlZmluZSBCTlgyX05WTV9TVEFUVVNfU1BJX0ZTTV9TVEFURV9TUElfUkVBRF9TVEFUVVNfUkRJRDRfWEkJICgxNkw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9DSEVDS19CVVNZMF9YSQkgKDE3TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fU1RBVFVTX1NQSV9GU01fU1RBVEVfU1BJX1NUX1dSRU5fWEkJICgxOEw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1NUQVRVU19TUElfRlNNX1NUQVRFX1NQSV9XQUlUX1hJCSAoMTlMPDwwKQogCiAjZGVmaW5lIEJOWDJfTlZNX1dSSVRFCQkJCQkweDAwMDA2NDA4CiAjZGVmaW5lIEJOWDJfTlZNX1dSSVRFX05WTV9XUklURV9WQUxVRQkJCSAoMHhmZmZmZmZmZkw8PDApCkBAIC0xMDQ2LDYgKzE3NzUsMTAgQEAKICNkZWZpbmUgQk5YMl9OVk1fV1JJVEVfTlZNX1dSSVRFX1ZBTFVFX0NTX0IJCSAoOEw8PDApCiAjZGVmaW5lIEJOWDJfTlZNX1dSSVRFX05WTV9XUklURV9WQUxVRV9TTwkJICgxNkw8PDApCiAjZGVmaW5lIEJOWDJfTlZNX1dSSVRFX05WTV9XUklURV9WQUxVRV9TSQkJICgzMkw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1dSSVRFX05WTV9XUklURV9WQUxVRV9TSV9YSQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fV1JJVEVfTlZNX1dSSVRFX1ZBTFVFX1NPX1hJCQkgKDJMPDwwKQorI2RlZmluZSBCTlgyX05WTV9XUklURV9OVk1fV1JJVEVfVkFMVUVfQ1NfQl9YSQkJICg0TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fV1JJVEVfTlZNX1dSSVRFX1ZBTFVFX1NDTEtfWEkJCSAoOEw8PDApCiAKICNkZWZpbmUgQk5YMl9OVk1fQUREUgkJCQkJMHgwMDAwNjQwYwogI2RlZmluZSBCTlgyX05WTV9BRERSX05WTV9BRERSX1ZBTFVFCQkJICgweGZmZmZmZkw8PDApCkBAIC0xMDU2LDYgKzE3ODksMTAgQEAKICNkZWZpbmUgQk5YMl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRV9DU19CCQkgKDhMPDwwKQogI2RlZmluZSBCTlgyX05WTV9BRERSX05WTV9BRERSX1ZBTFVFX1NPCQkJICgxNkw8PDApCiAjZGVmaW5lIEJOWDJfTlZNX0FERFJfTlZNX0FERFJfVkFMVUVfU0kJCQkgKDMyTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRV9TSV9YSQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRV9TT19YSQkJICgyTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQUREUl9OVk1fQUREUl9WQUxVRV9DU19CX1hJCQkgKDRMPDwwKQorI2RlZmluZSBCTlgyX05WTV9BRERSX05WTV9BRERSX1ZBTFVFX1NDTEtfWEkJCSAoOEw8PDApCiAKICNkZWZpbmUgQk5YMl9OVk1fUkVBRAkJCQkJMHgwMDAwNjQxMAogI2RlZmluZSBCTlgyX05WTV9SRUFEX05WTV9SRUFEX1ZBTFVFCQkJICgweGZmZmZmZmZmTDw8MCkKQEAgLTEwNjYsNiArMTgwMywxMCBAQAogI2RlZmluZSBCTlgyX05WTV9SRUFEX05WTV9SRUFEX1ZBTFVFX0NTX0IJCSAoOEw8PDApCiAjZGVmaW5lIEJOWDJfTlZNX1JFQURfTlZNX1JFQURfVkFMVUVfU08JCQkgKDE2TDw8MCkKICNkZWZpbmUgQk5YMl9OVk1fUkVBRF9OVk1fUkVBRF9WQUxVRV9TSQkJCSAoMzJMPDwwKQorI2RlZmluZSBCTlgyX05WTV9SRUFEX05WTV9SRUFEX1ZBTFVFX1NJX1hJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX05WTV9SRUFEX05WTV9SRUFEX1ZBTFVFX1NPX1hJCQkgKDJMPDwwKQorI2RlZmluZSBCTlgyX05WTV9SRUFEX05WTV9SRUFEX1ZBTFVFX0NTX0JfWEkJCSAoNEw8PDApCisjZGVmaW5lIEJOWDJfTlZNX1JFQURfTlZNX1JFQURfVkFMVUVfU0NMS19YSQkJICg4TDw8MCkKIAogI2RlZmluZSBCTlgyX05WTV9DRkcxCQkJCQkweDAwMDA2NDE0CiAjZGVmaW5lIEJOWDJfTlZNX0NGRzFfRkxBU0hfTU9ERQkJCSAoMUw8PDApCkBAIC0xMDc3LDE0ICsxODE4LDIxIEBACiAjZGVmaW5lIEJOWDJfTlZNX0NGRzFfU1RBVFVTX0JJVF9CVUZGRVJfUkRZCQkgKDdMPDw0KQogI2RlZmluZSBCTlgyX05WTV9DRkcxX1NQSV9DTEtfRElWCQkJICgweGZMPDw3KQogI2RlZmluZSBCTlgyX05WTV9DRkcxX1NFRV9DTEtfRElWCQkJICgweDdmZkw8PDExKQorI2RlZmluZSBCTlgyX05WTV9DRkcxX1NUUkFQX0NPTlRST0xfMAkJCSAoMUw8PDIzKQogI2RlZmluZSBCTlgyX05WTV9DRkcxX1BST1RFQ1RfTU9ERQkJCSAoMUw8PDI0KQogI2RlZmluZSBCTlgyX05WTV9DRkcxX0ZMQVNIX1NJWkUJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHMV9GV19VU1RSQVBfMQkJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX05WTV9DRkcxX0ZXX1VTVFJBUF8wCQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfTlZNX0NGRzFfRldfVVNUUkFQXzIJCQkgKDFMPDwyOCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHMV9GV19VU1RSQVBfMwkJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX05WTV9DRkcxX0ZXX0ZMQVNIX1RZUEVfRU4JCQkgKDFMPDwzMCkKICNkZWZpbmUgQk5YMl9OVk1fQ0ZHMV9DT01QQVRfQllQQVNTUwkJCSAoMUw8PDMxKQogCiAjZGVmaW5lIEJOWDJfTlZNX0NGRzIJCQkJCTB4MDAwMDY0MTgKICNkZWZpbmUgQk5YMl9OVk1fQ0ZHMl9FUkFTRV9DTUQJCQkJICgweGZmTDw8MCkKICNkZWZpbmUgQk5YMl9OVk1fQ0ZHMl9EVU1NWQkJCQkgKDB4ZmZMPDw4KQogI2RlZmluZSBCTlgyX05WTV9DRkcyX1NUQVRVU19DTUQJCQkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHMl9SRUFEX0lECQkJCSAoMHhmZkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfTlZNX0NGRzMJCQkJCTB4MDAwMDY0MWMKICNkZWZpbmUgQk5YMl9OVk1fQ0ZHM19CVUZGRVJfUkRfQ01ECQkJICgweGZmTDw8MCkKQEAgLTExMTksNiArMTg2NywzNSBAQAogI2RlZmluZSBCTlgyX05WTV9XUklURTFfV1JESV9DTUQJCQkgKDB4ZmZMPDw4KQogI2RlZmluZSBCTlgyX05WTV9XUklURTFfU1JfREFUQQkJCQkgKDB4ZmZMPDwxNikKIAorI2RlZmluZSBCTlgyX05WTV9DRkc0CQkJCQkweDAwMDA2NDJjCisjZGVmaW5lIEJOWDJfTlZNX0NGRzRfRkxBU0hfU0laRQkJCSAoMHg3TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9TSVpFXzFNQklUCQkJICgwTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9TSVpFXzJNQklUCQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9TSVpFXzRNQklUCQkJICgyTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9TSVpFXzhNQklUCQkJICgzTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9TSVpFXzE2TUJJVAkJCSAoNEw8PDApCisjZGVmaW5lIEJOWDJfTlZNX0NGRzRfRkxBU0hfU0laRV8zMk1CSVQJCQkgKDVMPDwwKQorI2RlZmluZSBCTlgyX05WTV9DRkc0X0ZMQVNIX1NJWkVfNjRNQklUCQkJICg2TDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9TSVpFXzEyOE1CSVQJCSAoN0w8PDApCisjZGVmaW5lIEJOWDJfTlZNX0NGRzRfRkxBU0hfVkVORE9SCQkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9GTEFTSF9WRU5ET1JfU1QJCQkgKDBMPDwzKQorI2RlZmluZSBCTlgyX05WTV9DRkc0X0ZMQVNIX1ZFTkRPUl9BVE1FTAkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9NT0RFXzI1Nl9FTVBUWV9CSVRfTE9DCQkgKDB4M0w8PDQpCisjZGVmaW5lIEJOWDJfTlZNX0NGRzRfTU9ERV8yNTZfRU1QVFlfQklUX0xPQ19CSVQ4CSAoMEw8PDQpCisjZGVmaW5lIEJOWDJfTlZNX0NGRzRfTU9ERV8yNTZfRU1QVFlfQklUX0xPQ19CSVQ5CSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfTlZNX0NGRzRfTU9ERV8yNTZfRU1QVFlfQklUX0xPQ19CSVQxMAkgKDJMPDw0KQorI2RlZmluZSBCTlgyX05WTV9DRkc0X01PREVfMjU2X0VNUFRZX0JJVF9MT0NfQklUMTEJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9OVk1fQ0ZHNF9TVEFUVVNfQklUX1BPTEFSSVRZCQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX05WTV9DRkc0X1JFU0VSVkVECQkJCSAoMHgxZmZmZmZmTDw8NykKKworI2RlZmluZSBCTlgyX05WTV9SRUNPTkZJRwkJCQkweDAwMDA2NDMwCisjZGVmaW5lIEJOWDJfTlZNX1JFQ09ORklHX09SSUdfU1RSQVBfVkFMVUUJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fUkVDT05GSUdfT1JJR19TVFJBUF9WQUxVRV9TVAkJICgwTDw8MCkKKyNkZWZpbmUgQk5YMl9OVk1fUkVDT05GSUdfT1JJR19TVFJBUF9WQUxVRV9BVE1FTAkgKDFMPDwwKQorI2RlZmluZSBCTlgyX05WTV9SRUNPTkZJR19SRUNPTkZJR19TVFJBUF9WQUxVRQkJICgweGZMPDw0KQorI2RlZmluZSBCTlgyX05WTV9SRUNPTkZJR19SRVNFUlZFRAkJCSAoMHg3ZmZmZmZMPDw4KQorI2RlZmluZSBCTlgyX05WTV9SRUNPTkZJR19SRUNPTkZJR19ET05FCQkJICgxTDw8MzEpCisKIAogCiAvKgpAQCAtMTE0MCw2ICsxOTE3LDggQEAKICNkZWZpbmUgQk5YMl9ETUFfU1RBVFVTX0JJR19XUklURV9UUkFOU0ZFUlNfU1RBVAkgKDFMPDwyMykKICNkZWZpbmUgQk5YMl9ETUFfU1RBVFVTX0JJR19XUklURV9ERUxBWV9QQ0lfQ0xLU19TVEFUCSAoMUw8PDI0KQogI2RlZmluZSBCTlgyX0RNQV9TVEFUVVNfQklHX1dSSVRFX1JFVFJZX0FGVEVSX0RBVEFfU1RBVAkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9ETUFfU1RBVFVTX0dMT0JBTF9FUlJfWEkJCQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9TVEFUVVNfQk1FX1hJCQkJCSAoMUw8PDQpCiAKICNkZWZpbmUgQk5YMl9ETUFfQ09ORklHCQkJCQkweDAwMDAwYzA4CiAjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19EQVRBX0JZVEVfU1dBUAkJCSAoMUw8PDApCkBAIC0xMTYxLDg1ICsxOTQwLDMxNSBAQAogI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfQklHX1NJWkVfMTI4CQkJICgweDJMPDwyNCkKICNkZWZpbmUgQk5YMl9ETUFfQ09ORklHX0JJR19TSVpFXzI1NgkJCSAoMHg0TDw8MjQpCiAjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19CSUdfU0laRV81MTIJCQkgKDB4OEw8PDI0KQorI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfREFUX1dCU1dBUF9NT0RFX1hJCQkgKDB4M0w8PDApCisjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19DVExfV0JTV0FQX01PREVfWEkJCSAoMHgzTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfQ09ORklHX01BWF9QTF9YSQkJCSAoMHg3TDw8MTIpCisjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19NQVhfUExfMTI4Ql9YSQkJCSAoMEw8PDEyKQorI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfTUFYX1BMXzI1NkJfWEkJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9ETUFfQ09ORklHX01BWF9QTF81MTJCX1hJCQkJICgyTDw8MTIpCisjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19NQVhfUExfRU5fWEkJCQkgKDFMPDwxNSkKKyNkZWZpbmUgQk5YMl9ETUFfQ09ORklHX01BWF9SUlNfWEkJCQkgKDB4N0w8PDE2KQorI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfTUFYX1JSU18xMjhCX1hJCQkJICgwTDw8MTYpCisjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19NQVhfUlJTXzI1NkJfWEkJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9ETUFfQ09ORklHX01BWF9SUlNfNTEyQl9YSQkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfTUFYX1JSU18xMDI0Ql9YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfRE1BX0NPTkZJR19NQVhfUlJTXzIwNDhCX1hJCQkgKDRMPDwxNikKKyNkZWZpbmUgQk5YMl9ETUFfQ09ORklHX01BWF9SUlNfNDA5NkJfWEkJCSAoNUw8PDE2KQorI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfTUFYX1JSU19FTl9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX0RNQV9DT05GSUdfTk9fNjRTV0FQX0VOX1hJCQkJICgxTDw8MzEpCiAKICNkZWZpbmUgQk5YMl9ETUFfQkxBQ0tPVVQJCQkJMHgwMDAwMGMwYwogI2RlZmluZSBCTlgyX0RNQV9CTEFDS09VVF9SRF9SRVRSWV9CTEFDS09VVAkJICgweGZmTDw8MCkKICNkZWZpbmUgQk5YMl9ETUFfQkxBQ0tPVVRfMk5EX1JEX1JFVFJZX0JMQUNLT1VUCQkgKDB4ZmZMPDw4KQogI2RlZmluZSBCTlgyX0RNQV9CTEFDS09VVF9XUl9SRVRSWV9CTEFDS09VVAkJICgweGZmTDw8MTYpCiAKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVAkJCQkweDAwMDAwYzMwCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfQ09NUF9DT0RFXzAJCQkgKDB4N0w8PDApCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfUEFSX0VSUl8wCQkJICgxTDw8MykKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF9DT01QX0NPREVfMQkJCSAoMHg3TDw8NCkKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF9QQVJfRVJSXzEJCQkgKDFMPDw3KQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUX0NPTVBfQ09ERV8yCQkJICgweDdMPDw4KQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUX1BBUl9FUlJfMgkJCSAoMUw8PDExKQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUX0NPTVBfQ09ERV8zCQkJICgweDdMPDwxMikKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF9QQVJfRVJSXzMJCQkgKDFMPDwxNSkKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF9DT01QX0NPREVfNAkJCSAoMHg3TDw8MTYpCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfUEFSX0VSUl80CQkJICgxTDw8MTkpCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfQ09NUF9DT0RFXzUJCQkgKDB4N0w8PDIwKQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUX1BBUl9FUlJfNQkJCSAoMUw8PDIzKQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUX0NPTVBfQ09ERV82CQkJICgweDdMPDwyNCkKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF9QQVJfRVJSXzYJCQkgKDFMPDwyNykKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF9DT01QX0NPREVfNwkJCSAoMHg3TDw8MjgpCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfUEFSX0VSUl83CQkJICgxTDw8MzEpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMAkJCTB4MDAwMDBjMTAKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18wX1RCRENfTk9fU05PT1AJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18wX1RCRENfUkVMQVhfT1JERVIJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18wX1RCRENfUFJJT1JJVFkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18wX1RCRENfVFJBRkZJQ19DTEFTUwkgKDB4N0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9UQkRDX1BBUkFNX0VOCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9SQkRDX05PX1NOT09QCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9SQkRDX1JFTEFYX09SREVSCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9SQkRDX1BSSU9SSVRZCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfUkJEQ19UUkFGRklDX0NMQVNTCSAoMHg3TDw8MTIpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9SQkRDX1BBUkFNX0VOCSAoMUw8PDE1KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfVERNQV9OT19TTk9PUAkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18wX1RETUFfUkVMQVhfT1JERVIJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9URE1BX1BSSU9SSVRZCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfVERNQV9UUkFGRklDX0NMQVNTCSAoMHg3TDw8MjApCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMF9URE1BX1BBUkFNX0VOCSAoMUw8PDIzKQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfQ1RYX05PX1NOT09QCSAoMUw8PDI0KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfQ1RYX1JFTEFYX09SREVSCSAoMUw8PDI1KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfQ1RYX1BSSU9SSVRZCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzBfQ1RYX1RSQUZGSUNfQ0xBU1MJICgweDdMPDwyOCkKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18wX0NUWF9QQVJBTV9FTgkgKDFMPDwzMSkKIAotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUCQkJCTB4MDAwMDBjMzQKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fU1RBVF9DT01QX0NPREVfMAkJCSAoMHg3TDw8MCkKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fU1RBVF9QQVJfRVJSXzAJCQkgKDFMPDwzKQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUX0NPTVBfQ09ERV8xCQkJICgweDdMPDw0KQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUX1BBUl9FUlJfMQkJCSAoMUw8PDcpCi0jZGVmaW5lIEJOWDJfRE1BX1dDSEFOX1NUQVRfQ09NUF9DT0RFXzIJCQkgKDB4N0w8PDgpCi0jZGVmaW5lIEJOWDJfRE1BX1dDSEFOX1NUQVRfUEFSX0VSUl8yCQkJICgxTDw8MTEpCi0jZGVmaW5lIEJOWDJfRE1BX1dDSEFOX1NUQVRfQ09NUF9DT0RFXzMJCQkgKDB4N0w8PDEyKQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUX1BBUl9FUlJfMwkJCSAoMUw8PDE1KQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUX0NPTVBfQ09ERV80CQkJICgweDdMPDwxNikKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fU1RBVF9QQVJfRVJSXzQJCQkgKDFMPDwxOSkKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fU1RBVF9DT01QX0NPREVfNQkJCSAoMHg3TDw8MjApCi0jZGVmaW5lIEJOWDJfRE1BX1dDSEFOX1NUQVRfUEFSX0VSUl81CQkJICgxTDw8MjMpCi0jZGVmaW5lIEJOWDJfRE1BX1dDSEFOX1NUQVRfQ09NUF9DT0RFXzYJCQkgKDB4N0w8PDI0KQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUX1BBUl9FUlJfNgkJCSAoMUw8PDI3KQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9TVEFUX0NPTVBfQ09ERV83CQkJICgweDdMPDwyOCkKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fU1RBVF9QQVJfRVJSXzcJCQkgKDFMPDwzMSkKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18xCQkJMHgwMDAwMGMxNAorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzFfQ09NX05PX1NOT09QCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMV9DT01fUkVMQVhfT1JERVIJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18xX0NPTV9QUklPUklUWQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzFfQ09NX1RSQUZGSUNfQ0xBU1MJICgweDdMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzFfQ09NX1BBUkFNX0VOCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1JFQURfTUFTVEVSX1NFVFRJTkdfMV9DUF9OT19TTk9PUAkgKDFMPDw4KQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzFfQ1BfUkVMQVhfT1JERVIJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9ETUFfUkVBRF9NQVNURVJfU0VUVElOR18xX0NQX1BSSU9SSVRZCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzFfQ1BfVFJBRkZJQ19DTEFTUwkgKDB4N0w8PDEyKQorI2RlZmluZSBCTlgyX0RNQV9SRUFEX01BU1RFUl9TRVRUSU5HXzFfQ1BfUEFSQU1fRU4JICgxTDw8MTUpCiAKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVAkJCTB4MDAwMDBjMzgKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVF8wCQkJICgweGZMPDwwKQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9BU1NJR05NRU5UXzEJCQkgKDB4Zkw8PDQpCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX0FTU0lHTk1FTlRfMgkJCSAoMHhmTDw8OCkKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVF8zCQkJICgweGZMPDwxMikKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVF80CQkJICgweGZMPDwxNikKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVF81CQkJICgweGZMPDwyMCkKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVF82CQkJICgweGZMPDwyNCkKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fQVNTSUdOTUVOVF83CQkJICgweGZMPDwyOCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMAkJCTB4MDAwMDBjMTgKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9IQ19OT19TTk9PUAkgKDFMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18wX0hDX1JFTEFYX09SREVSCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzBfSENfUFJJT1JJVFkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9IQ19DU19WTEQJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9IQ19UUkFGRklDX0NMQVNTCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9IQ19QQVJBTV9FTgkgKDFMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18wX1JETUFfTk9fU05PT1AJICgxTDw8OCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9SRE1BX1JFTEFYX09SREVSCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzBfUkRNQV9QUklPUklUWQkgKDFMPDwxMCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9SRE1BX0NTX1ZMRAkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9SRE1BX1RSQUZGSUNfQ0xBU1MJICgweDdMPDwxMikKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9SRE1BX1BBUkFNX0VOCSAoMUw8PDE1KQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18wX0NUWF9OT19TTk9PUAkgKDFMPDwyNCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9DVFhfUkVMQVhfT1JERVIJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzBfQ1RYX1BSSU9SSVRZCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18wX0NUWF9DU19WTEQJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzBfQ1RYX1RSQUZGSUNfQ0xBU1MJICgweDdMPDwyOCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMF9DVFhfUEFSQU1fRU4JICgxTDw8MzEpCiAKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVAkJCTB4MDAwMDBjM2MKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVF8wCQkJICgweGZMPDwwKQotI2RlZmluZSBCTlgyX0RNQV9XQ0hBTl9BU1NJR05NRU5UXzEJCQkgKDB4Zkw8PDQpCi0jZGVmaW5lIEJOWDJfRE1BX1dDSEFOX0FTU0lHTk1FTlRfMgkJCSAoMHhmTDw8OCkKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVF8zCQkJICgweGZMPDwxMikKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVF80CQkJICgweGZMPDwxNikKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVF81CQkJICgweGZMPDwyMCkKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVF82CQkJICgweGZMPDwyNCkKLSNkZWZpbmUgQk5YMl9ETUFfV0NIQU5fQVNTSUdOTUVOVF83CQkJICgweGZMPDwyOCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMQkJCTB4MDAwMDBjMWMKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMV9DT01fTk9fU05PT1AJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMV9DT01fUkVMQVhfT1JERVIJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMV9DT01fUFJJT1JJVFkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMV9DT01fQ1NfVkxECSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzFfQ09NX1RSQUZGSUNfQ0xBU1MJICgweDdMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18xX0NPTV9QQVJBTV9FTgkgKDFMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18xX0NQX05PX1NOT09QCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzFfQ1BfUkVMQVhfT1JERVIJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMV9DUF9QUklPUklUWQkgKDFMPDwxMCkKKyNkZWZpbmUgQk5YMl9ETUFfV1JJVEVfTUFTVEVSX1NFVFRJTkdfMV9DUF9DU19WTEQJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfRE1BX1dSSVRFX01BU1RFUl9TRVRUSU5HXzFfQ1BfVFJBRkZJQ19DTEFTUwkgKDB4N0w8PDEyKQorI2RlZmluZSBCTlgyX0RNQV9XUklURV9NQVNURVJfU0VUVElOR18xX0NQX1BBUkFNX0VOCSAoMUw8PDE1KQogCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfMDAJCQkJMHgwMDAwMGM0MAotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUXzAwX1JDSEFOX1NUQV9IT1NUX0FERFJfTE9XCSAoMHhmZmZmZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVIJCQkJMHgwMDAwMGMyMAorI2RlZmluZSBCTlgyX0RNQV9BUkJJVEVSX05VTV9SRUFEUwkJCSAoMHg3TDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfQVJCSVRFUl9XUl9BUkJfTU9ERQkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVJfV1JfQVJCX01PREVfU1RSSUNUCQkgKDBMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9BUkJJVEVSX1dSX0FSQl9NT0RFX1JORF9SQk4JCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVJfUkRfQVJCX01PREUJCQkgKDB4M0w8PDUpCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVJfUkRfQVJCX01PREVfU1RSSUNUCQkgKDBMPDw1KQorI2RlZmluZSBCTlgyX0RNQV9BUkJJVEVSX1JEX0FSQl9NT0RFX1JORF9SQk4JCSAoMUw8PDUpCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVJfUkRfQVJCX01PREVfV0dUX1JORF9SQk4JICgyTDw8NSkKKyNkZWZpbmUgQk5YMl9ETUFfQVJCSVRFUl9BTFRfTU9ERV9FTgkJCSAoMUw8PDgpCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVJfUlJfTU9ERQkJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX0FSQklURVJfVElNRVJfTU9ERQkJCSAoMUw8PDEwKQorI2RlZmluZSBCTlgyX0RNQV9BUkJJVEVSX09VU1REX1JFQURfUkVRCQkJICgweGZMPDwxMikKIAotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUXzAxCQkJCTB4MDAwMDBjNDQKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF8wMV9SQ0hBTl9TVEFfSE9TVF9BRERSX0hJR0gJICgweGZmZmZmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfQVJCX1RJTUVSUwkJCQkweDAwMDAwYzI0CisjZGVmaW5lIEJOWDJfRE1BX0FSQl9USU1FUlNfUkRfRFJSX1dBSVRfVElNRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfQVJCX1RJTUVSU19UTV9NSU5fVElNRU9VVAkJICgweGZmTDw8MTIpCisjZGVmaW5lIEJOWDJfRE1BX0FSQl9USU1FUlNfVE1fTUFYX1RJTUVPVVQJCSAoMHhmZmZMPDwyMCkKIAotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUXzAyCQkJCTB4MDAwMDBjNDgKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF8wMl9MRU5HVEgJCQkgKDB4ZmZmZkw8PDApCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfMDJfV09SRF9TV0FQCQkgKDFMPDwxNikKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF8wMl9CWVRFX1NXQVAJCSAoMUw8PDE3KQotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUXzAyX1BSSU9SSVRZX0xWTAkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfRE1BX0RFQlVHX1ZFQ1RfUEVFSwkJCTB4MDAwMDBjMmMKKyNkZWZpbmUgQk5YMl9ETUFfREVCVUdfVkVDVF9QRUVLXzFfVkFMVUUJCSAoMHg3ZmZMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9ERUJVR19WRUNUX1BFRUtfMV9QRUVLX0VOCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9ETUFfREVCVUdfVkVDVF9QRUVLXzFfU0VMCQkJICgweGZMPDwxMikKKyNkZWZpbmUgQk5YMl9ETUFfREVCVUdfVkVDVF9QRUVLXzJfVkFMVUUJCSAoMHg3ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9ETUFfREVCVUdfVkVDVF9QRUVLXzJfUEVFS19FTgkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfRE1BX0RFQlVHX1ZFQ1RfUEVFS18yX1NFTAkJCSAoMHhmTDw8MjgpCiAKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF8xMAkJCQkweDAwMDAwYzRjCi0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfMTEJCQkJMHgwMDAwMGM1MAotI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUXzEyCQkJCTB4MDAwMDBjNTQKLSNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF8yMAkJCQkweDAwMDAwYzU4Ci0jZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfMjEJCQkJMHgwMDAwMGM1YworI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwCQkJCTB4MDAwMDBjMzAKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMF9DSEFOTkVMCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwX01BU1RFUgkJCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMF9NQVNURVJfQ1RYCQkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMF9NQVNURVJfUkJEQwkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDBfTUFTVEVSX1RCREMJCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwX01BU1RFUl9DT00JCQkgKDNMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwX01BU1RFUl9DUAkJCSAoNEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDBfTUFTVEVSX1RETUEJCQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwX1NXQVAJCQkgKDB4M0w8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDBfU1dBUF9DT05GSUcJCQkgKDBMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwX1NXQVBfREFUQQkJCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDBfU1dBUF9DT05UUk9MCQkgKDJMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAwX0ZVTkNUSU9OCQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMF9WQUxJRAkJCSAoMUw8PDEwKQorCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDEJCQkJMHgwMDAwMGMzNAorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAxX0NIQU5ORUwJCQkgKDB4Zkw8PDApCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDFfTUFTVEVSCQkJICgweDdMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAxX01BU1RFUl9DVFgJCQkgKDBMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAxX01BU1RFUl9SQkRDCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMV9NQVNURVJfVEJEQwkJCSAoMkw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDFfTUFTVEVSX0NPTQkJCSAoM0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDFfTUFTVEVSX0NQCQkJICg0TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMV9NQVNURVJfVERNQQkJCSAoNUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDFfU1dBUAkJCSAoMHgzTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMV9TV0FQX0NPTkZJRwkJCSAoMEw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDFfU1dBUF9EQVRBCQkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMV9TV0FQX0NPTlRST0wJCSAoMkw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDFfRlVOQ1RJT04JCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAxX1ZBTElECQkJICgxTDw8MTApCisKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMgkJCQkweDAwMDAwYzM4CisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDJfQ0hBTk5FTAkJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMl9NQVNURVIJCQkgKDB4N0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDJfTUFTVEVSX0NUWAkJCSAoMEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDJfTUFTVEVSX1JCREMJCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAyX01BU1RFUl9UQkRDCQkJICgyTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMl9NQVNURVJfQ09NCQkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMl9NQVNURVJfQ1AJCQkgKDRMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAyX01BU1RFUl9URE1BCQkJICg1TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMl9TV0FQCQkJICgweDNMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAyX1NXQVBfQ09ORklHCQkJICgwTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMl9TV0FQX0RBVEEJCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAyX1NXQVBfQ09OVFJPTAkJICgyTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wMl9GVU5DVElPTgkJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDJfVkFMSUQJCQkgKDFMPDwxMCkKKworI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzCQkJCTB4MDAwMDBjM2MKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wM19DSEFOTkVMCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzX01BU1RFUgkJCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wM19NQVNURVJfQ1RYCQkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wM19NQVNURVJfUkJEQwkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDNfTUFTVEVSX1RCREMJCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzX01BU1RFUl9DT00JCQkgKDNMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzX01BU1RFUl9DUAkJCSAoNEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDNfTUFTVEVSX1RETUEJCQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzX1NXQVAJCQkgKDB4M0w8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDNfU1dBUF9DT05GSUcJCQkgKDBMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzX1NXQVBfREFUQQkJCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDNfU1dBUF9DT05UUk9MCQkgKDJMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzAzX0ZVTkNUSU9OCQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wM19WQUxJRAkJCSAoMUw8PDEwKQorCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDQJCQkJMHgwMDAwMGM0MAorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA0X0NIQU5ORUwJCQkgKDB4Zkw8PDApCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDRfTUFTVEVSCQkJICgweDdMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA0X01BU1RFUl9DVFgJCQkgKDBMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA0X01BU1RFUl9SQkRDCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNF9NQVNURVJfVEJEQwkJCSAoMkw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDRfTUFTVEVSX0NPTQkJCSAoM0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDRfTUFTVEVSX0NQCQkJICg0TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNF9NQVNURVJfVERNQQkJCSAoNUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDRfU1dBUAkJCSAoMHgzTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNF9TV0FQX0NPTkZJRwkJCSAoMEw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDRfU1dBUF9EQVRBCQkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNF9TV0FQX0NPTlRST0wJCSAoMkw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDRfRlVOQ1RJT04JCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA0X1ZBTElECQkJICgxTDw8MTApCisKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNQkJCQkweDAwMDAwYzQ0CisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDVfQ0hBTk5FTAkJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNV9NQVNURVIJCQkgKDB4N0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDVfTUFTVEVSX0NUWAkJCSAoMEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDVfTUFTVEVSX1JCREMJCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA1X01BU1RFUl9UQkRDCQkJICgyTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNV9NQVNURVJfQ09NCQkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNV9NQVNURVJfQ1AJCQkgKDRMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA1X01BU1RFUl9URE1BCQkJICg1TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNV9TV0FQCQkJICgweDNMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA1X1NXQVBfQ09ORklHCQkJICgwTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNV9TV0FQX0RBVEEJCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA1X1NXQVBfQ09OVFJPTAkJICgyTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNV9GVU5DVElPTgkJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDVfVkFMSUQJCQkgKDFMPDwxMCkKKworI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2CQkJCTB4MDAwMDBjNDgKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNl9DSEFOTkVMCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2X01BU1RFUgkJCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNl9NQVNURVJfQ1RYCQkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNl9NQVNURVJfUkJEQwkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDZfTUFTVEVSX1RCREMJCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2X01BU1RFUl9DT00JCQkgKDNMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2X01BU1RFUl9DUAkJCSAoNEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDZfTUFTVEVSX1RETUEJCQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2X1NXQVAJCQkgKDB4M0w8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDZfU1dBUF9DT05GSUcJCQkgKDBMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2X1NXQVBfREFUQQkJCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDZfU1dBUF9DT05UUk9MCQkgKDJMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA2X0ZVTkNUSU9OCQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wNl9WQUxJRAkJCSAoMUw8PDEwKQorCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDcJCQkJMHgwMDAwMGM0YworI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA3X0NIQU5ORUwJCQkgKDB4Zkw8PDApCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDdfTUFTVEVSCQkJICgweDdMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA3X01BU1RFUl9DVFgJCQkgKDBMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA3X01BU1RFUl9SQkRDCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wN19NQVNURVJfVEJEQwkJCSAoMkw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDdfTUFTVEVSX0NPTQkJCSAoM0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDdfTUFTVEVSX0NQCQkJICg0TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wN19NQVNURVJfVERNQQkJCSAoNUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDdfU1dBUAkJCSAoMHgzTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wN19TV0FQX0NPTkZJRwkJCSAoMEw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDdfU1dBUF9EQVRBCQkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wN19TV0FQX0NPTlRST0wJCSAoMkw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDdfRlVOQ1RJT04JCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA3X1ZBTElECQkJICgxTDw8MTApCisKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOAkJCQkweDAwMDAwYzUwCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDhfQ0hBTk5FTAkJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOF9NQVNURVIJCQkgKDB4N0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDhfTUFTVEVSX0NUWAkJCSAoMEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDhfTUFTVEVSX1JCREMJCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA4X01BU1RFUl9UQkRDCQkJICgyTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOF9NQVNURVJfQ09NCQkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOF9NQVNURVJfQ1AJCQkgKDRMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA4X01BU1RFUl9URE1BCQkJICg1TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOF9TV0FQCQkJICgweDNMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA4X1NXQVBfQ09ORklHCQkJICgwTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOF9TV0FQX0RBVEEJCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA4X1NXQVBfQ09OVFJPTAkJICgyTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOF9GVU5DVElPTgkJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDhfVkFMSUQJCQkgKDFMPDwxMCkKKworI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5CQkJCTB4MDAwMDBjNTQKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOV9DSEFOTkVMCQkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5X01BU1RFUgkJCSAoMHg3TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOV9NQVNURVJfQ1RYCQkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOV9NQVNURVJfUkJEQwkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDlfTUFTVEVSX1RCREMJCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5X01BU1RFUl9DT00JCQkgKDNMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5X01BU1RFUl9DUAkJCSAoNEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDlfTUFTVEVSX1RETUEJCQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5X1NXQVAJCQkgKDB4M0w8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDlfU1dBUF9DT05GSUcJCQkgKDBMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5X1NXQVBfREFUQQkJCSAoMUw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMDlfU1dBUF9DT05UUk9MCQkgKDJMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzA5X0ZVTkNUSU9OCQkJICgxTDw8OSkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8wOV9WQUxJRAkJCSAoMUw8PDEwKQorCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTAJCQkJMHgwMDAwMGM1OAorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzEwX0NIQU5ORUwJCQkgKDB4Zkw8PDApCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTBfTUFTVEVSCQkJICgweDdMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzEwX01BU1RFUl9DVFgJCQkgKDBMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzEwX01BU1RFUl9SQkRDCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMF9NQVNURVJfVEJEQwkJCSAoMkw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTBfTUFTVEVSX0NPTQkJCSAoM0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTBfTUFTVEVSX0NQCQkJICg0TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMF9NQVNURVJfVERNQQkJCSAoNUw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTBfU1dBUAkJCSAoMHgzTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMF9TV0FQX0NPTkZJRwkJCSAoMEw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTBfU1dBUF9EQVRBCQkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMF9TV0FQX0NPTlRST0wJCSAoMkw8PDcpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTBfRlVOQ1RJT04JCQkgKDFMPDw5KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzEwX1ZBTElECQkJICgxTDw8MTApCisKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMQkJCQkweDAwMDAwYzVjCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTFfQ0hBTk5FTAkJCSAoMHhmTDw8MCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMV9NQVNURVIJCQkgKDB4N0w8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTFfTUFTVEVSX0NUWAkJCSAoMEw8PDQpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTFfTUFTVEVSX1JCREMJCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzExX01BU1RFUl9UQkRDCQkJICgyTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMV9NQVNURVJfQ09NCQkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMV9NQVNURVJfQ1AJCQkgKDRMPDw0KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzExX01BU1RFUl9URE1BCQkJICg1TDw8NCkKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMV9TV0FQCQkJICgweDNMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzExX1NXQVBfQ09ORklHCQkJICgwTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMV9TV0FQX0RBVEEJCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX0RNQV9UQUdfUkFNXzExX1NXQVBfQ09OVFJPTAkJICgyTDw8NykKKyNkZWZpbmUgQk5YMl9ETUFfVEFHX1JBTV8xMV9GVU5DVElPTgkJCSAoMUw8PDkpCisjZGVmaW5lIEJOWDJfRE1BX1RBR19SQU1fMTFfVkFMSUQJCQkgKDFMPDwxMCkKKwogI2RlZmluZSBCTlgyX0RNQV9SQ0hBTl9TVEFUXzIyCQkJCTB4MDAwMDBjNjAKICNkZWZpbmUgQk5YMl9ETUFfUkNIQU5fU1RBVF8zMAkJCQkweDAwMDAwYzY0CiAjZGVmaW5lIEJOWDJfRE1BX1JDSEFOX1NUQVRfMzEJCQkJMHgwMDAwMGM2OApAQCAtMTMzNiw2ICsyMzQ1LDI1IEBACiAgKi8KICNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORAkJCQkweDAwMDAxMDAwCiAjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfRU5BQkxFRAkJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfRElTQUJMRV9VU0FHRV9DTlQJCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfRElTQUJMRV9QTFJVCQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9ESVNBQkxFX0NPTUJJTkVfUkVBRAkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9GTFVTSF9BSEVBRAkJCSAoMHgxZkw8PDgpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfTUVNX0lOSVQJCQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9QQUdFX1NJWkUJCQkgKDB4Zkw8PDE2KQorI2RlZmluZSBCTlgyX0NUWF9DT01NQU5EX1BBR0VfU0laRV8yNTYJCQkgKDBMPDwxNikKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9QQUdFX1NJWkVfNTEyCQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfUEFHRV9TSVpFXzFLCQkJICgyTDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfUEFHRV9TSVpFXzJLCQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfUEFHRV9TSVpFXzRLCQkJICg0TDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfUEFHRV9TSVpFXzhLCQkJICg1TDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfUEFHRV9TSVpFXzE2SwkJCSAoNkw8PDE2KQorI2RlZmluZSBCTlgyX0NUWF9DT01NQU5EX1BBR0VfU0laRV8zMksJCQkgKDdMPDwxNikKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9QQUdFX1NJWkVfNjRLCQkJICg4TDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NPTU1BTkRfUEFHRV9TSVpFXzEyOEsJCQkgKDlMPDwxNikKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9QQUdFX1NJWkVfMjU2SwkJCSAoMTBMPDwxNikKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9QQUdFX1NJWkVfNTEySwkJCSAoMTFMPDwxNikKKyNkZWZpbmUgQk5YMl9DVFhfQ09NTUFORF9QQUdFX1NJWkVfMU0JCQkgKDEyTDw8MTYpCiAKICNkZWZpbmUgQk5YMl9DVFhfU1RBVFVTCQkJCQkweDAwMDAxMDA0CiAjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19MT0NLX1dBSVQJCQkgKDFMPDwwKQpAQCAtMTM0Myw2ICsyMzcxLDEzIEBACiAjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19XUklURV9TVEFUCQkJICgxTDw8MTcpCiAjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19BQ0NfU1RBTExfU1RBVAkJCSAoMUw8PDE4KQogI2RlZmluZSBCTlgyX0NUWF9TVEFUVVNfTE9DS19TVEFMTF9TVEFUCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19FWFRfUkVBRF9TVEFUCQkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19FWFRfV1JJVEVfU1RBVAkJCSAoMUw8PDIxKQorI2RlZmluZSBCTlgyX0NUWF9TVEFUVVNfTUlTU19TVEFUCQkJICgxTDw8MjIpCisjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19ISVRfU1RBVAkJCSAoMUw8PDIzKQorI2RlZmluZSBCTlgyX0NUWF9TVEFUVVNfREVBRF9MT0NLCQkJICgxTDw8MjQpCisjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19VU0FHRV9DTlRfRVJSCQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfQ1RYX1NUQVRVU19JTlZBTElEX1BBR0UJCQkgKDFMPDwyNikKIAogI2RlZmluZSBCTlgyX0NUWF9WSVJUX0FERFIJCQkJMHgwMDAwMTAwOAogI2RlZmluZSBCTlgyX0NUWF9WSVJUX0FERFJfVklSVF9BRERSCQkJICgweDdmZmZMPDw2KQpAQCAtMTM1NywxMCArMjM5MiwxNSBAQAogI2RlZmluZSBCTlgyX0NUWF9MT0NLCQkJCQkweDAwMDAxMDE4CiAjZGVmaW5lIEJOWDJfQ1RYX0xPQ0tfVFlQRQkJCQkgKDB4N0w8PDApCiAjZGVmaW5lIEJOWDJfQ1RYX0xPQ0tfVFlQRV9MT0NLX1RZUEVfVk9JRAkJICgweDBMPDwwKQotI2RlZmluZSBCTlgyX0NUWF9MT0NLX1RZUEVfTE9DS19UWVBFX0NPTVBMRVRFCQkgKDB4N0w8PDApCiAjZGVmaW5lIEJOWDJfQ1RYX0xPQ0tfVFlQRV9MT0NLX1RZUEVfUFJPVE9DT0wJCSAoMHgxTDw8MCkKICNkZWZpbmUgQk5YMl9DVFhfTE9DS19UWVBFX0xPQ0tfVFlQRV9UWAkJCSAoMHgyTDw8MCkKICNkZWZpbmUgQk5YMl9DVFhfTE9DS19UWVBFX0xPQ0tfVFlQRV9USU1FUgkJICgweDRMPDwwKQorI2RlZmluZSBCTlgyX0NUWF9MT0NLX1RZUEVfTE9DS19UWVBFX0NPTVBMRVRFCQkgKDB4N0w8PDApCisjZGVmaW5lIEJOWDJfQ1RYX0xPQ0tfVFlQRV9WT0lEX1hJCQkJICgwTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfTE9DS19UWVBFX1BST1RPQ09MX1hJCQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfTE9DS19UWVBFX1RYX1hJCQkJICgyTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfTE9DS19UWVBFX1RJTUVSX1hJCQkJICg0TDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfTE9DS19UWVBFX0NPTVBMRVRFX1hJCQkJICg3TDw8MCkKICNkZWZpbmUgQk5YMl9DVFhfTE9DS19DSURfVkFMVUUJCQkJICgweDNmZmZMPDw3KQogI2RlZmluZSBCTlgyX0NUWF9MT0NLX0dSQU5URUQJCQkJICgxTDw8MjYpCiAjZGVmaW5lIEJOWDJfQ1RYX0xPQ0tfTU9ERQkJCQkgKDB4N0w8PDI3KQpAQCAtMTM3MCwyMSArMjQxMCw4OSBAQAogI2RlZmluZSBCTlgyX0NUWF9MT0NLX1NUQVRVUwkJCQkgKDFMPDwzMCkKICNkZWZpbmUgQk5YMl9DVFhfTE9DS19SRVEJCQkJICgxTDw8MzEpCiAKKyNkZWZpbmUgQk5YMl9DVFhfQ1RYX0NUUkwJCQkJMHgwMDAwMTAxYworI2RlZmluZSBCTlgyX0NUWF9DVFhfQ1RSTF9DVFhfQUREUgkJCSAoMHg3ZmZmZkw8PDIpCisjZGVmaW5lIEJOWDJfQ1RYX0NUWF9DVFJMX01PRF9VU0FHRV9DTlQJCQkgKDB4M0w8PDIxKQorI2RlZmluZSBCTlgyX0NUWF9DVFhfQ1RSTF9OT19SQU1fQUNDCQkJICgxTDw8MjMpCisjZGVmaW5lIEJOWDJfQ1RYX0NUWF9DVFJMX1BSRUZFVENIX1NJWkUJCQkgKDB4M0w8PDI0KQorI2RlZmluZSBCTlgyX0NUWF9DVFhfQ1RSTF9BVFRSCQkJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX0NUWF9DVFhfQ1RSTF9XUklURV9SRVEJCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9DVFhfQ1RYX0NUUkxfUkVBRF9SRVEJCQkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX0NUWF9DVFhfREFUQQkJCQkweDAwMDAxMDIwCiAjZGVmaW5lIEJOWDJfQ1RYX0FDQ0VTU19TVEFUVVMJCQkJMHgwMDAwMTA0MAogI2RlZmluZSBCTlgyX0NUWF9BQ0NFU1NfU1RBVFVTX01BU1RFUkVOQ09ERUQJCSAoMHhmTDw8MCkKICNkZWZpbmUgQk5YMl9DVFhfQUNDRVNTX1NUQVRVU19BQ0NFU1NNRU1PUllTTQkJICgweDNMPDwxMCkKICNkZWZpbmUgQk5YMl9DVFhfQUNDRVNTX1NUQVRVU19QQUdFVEFCTEVJTklUU00JCSAoMHgzTDw8MTIpCiAjZGVmaW5lIEJOWDJfQ1RYX0FDQ0VTU19TVEFUVVNfQUNDRVNTTUVNT1JZSU5JVFNNCSAoMHgzTDw8MTQpCiAjZGVmaW5lIEJOWDJfQ1RYX0FDQ0VTU19TVEFUVVNfUVVBTElGSUVEX1JFUVVFU1QJICgweDdmZkw8PDE3KQorI2RlZmluZSBCTlgyX0NUWF9BQ0NFU1NfU1RBVFVTX0NBTU1BU1RFUkVOQ09ERURfWEkJICgweDFmTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfQUNDRVNTX1NUQVRVU19DQUNIRU1BU1RFUkVOQ09ERURfWEkJICgweDFmTDw8NSkKKyNkZWZpbmUgQk5YMl9DVFhfQUNDRVNTX1NUQVRVU19SRVFVRVNUX1hJCQkgKDB4M2ZmZmZmTDw8MTApCiAKICNkZWZpbmUgQk5YMl9DVFhfREJHX0xPQ0tfU1RBVFVTCQkJMHgwMDAwMTA0NAogI2RlZmluZSBCTlgyX0NUWF9EQkdfTE9DS19TVEFUVVNfU00JCQkgKDB4M2ZmTDw8MCkKICNkZWZpbmUgQk5YMl9DVFhfREJHX0xPQ0tfU1RBVFVTX01BVENICQkJICgweDNmZkw8PDIyKQogCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU1RBVFVTCQkJMHgwMDAwMTA0OAorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19SRklGT19PVkVSRkxPVwkgKDFMPDwwKQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19JTlZBTElEX1JFQURfQ09NUAkgKDFMPDwxKQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19GTFVTSF9TVEFSVAkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TVEFUVVNfRlJFRV9FTlRSWV9DTlQJICgweDNmTDw8NykKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TVEFUVVNfQ0FDSEVfRU5UUllfTkVFREVECSAoMHgzZkw8PDEzKQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19SRF9DSEFOMF9BQ1RJVkUJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU1RBVFVTX1JEX0NIQU4xX0FDVElWRQkgKDFMPDwyMCkKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TVEFUVVNfUkRfQ0hBTjJfQUNUSVZFCSAoMUw8PDIxKQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19SRF9DSEFOM19BQ1RJVkUJICgxTDw8MjIpCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU1RBVFVTX1JEX0NIQU40X0FDVElWRQkgKDFMPDwyMykKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TVEFUVVNfUkRfQ0hBTjVfQUNUSVZFCSAoMUw8PDI0KQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19SRF9DSEFONl9BQ1RJVkUJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU1RBVFVTX1JEX0NIQU43X0FDVElWRQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TVEFUVVNfUkRfQ0hBTjhfQUNUSVZFCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NUQVRVU19SRF9DSEFOOV9BQ1RJVkUJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU1RBVFVTX1JEX0NIQU4xMF9BQ1RJVkUJICgxTDw8MjkpCisKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TTV9TVEFUVVMJCQkweDAwMDAxMDRjCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU01fU1RBVFVTX0NTX0RXQwkJICgweDdMPDwwKQorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9DVFJMX1NNX1NUQVRVU19DU19XRklGT0MJCSAoMHg3TDw8MykKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TTV9TVEFUVVNfQ1NfUlRBR0MJCSAoMHg3TDw8NikKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfQ1RSTF9TTV9TVEFUVVNfQ1NfUkZJRk9DCQkgKDB4N0w8PDkpCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0NUUkxfU01fU1RBVFVTX0lOVkFMSURfQkxLX0FERFIJICgweDdmZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9TVEFUVVMJCQkJMHgwMDAwMTA1MAorI2RlZmluZSBCTlgyX0NUWF9DQUNIRV9TVEFUVVNfSEVMRF9FTlRSSUVTCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfQ0FDSEVfU1RBVFVTX01BWF9IRUxEX0VOVFJJRVMJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0NUWF9ETUFfU1RBVFVTCQkJCTB4MDAwMDEwNTQKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFOMF9TVEFUVVMJCSAoMHgzTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFOMV9TVEFUVVMJCSAoMHgzTDw8MikKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFOMl9TVEFUVVMJCSAoMHgzTDw8NCkKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFOM19TVEFUVVMJCSAoMHgzTDw8NikKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFONF9TVEFUVVMJCSAoMHgzTDw8OCkKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFONV9TVEFUVVMJCSAoMHgzTDw8MTApCisjZGVmaW5lIEJOWDJfQ1RYX0RNQV9TVEFUVVNfUkRfQ0hBTjZfU1RBVFVTCQkgKDB4M0w8PDEyKQorI2RlZmluZSBCTlgyX0NUWF9ETUFfU1RBVFVTX1JEX0NIQU43X1NUQVRVUwkJICgweDNMPDwxNCkKKyNkZWZpbmUgQk5YMl9DVFhfRE1BX1NUQVRVU19SRF9DSEFOOF9TVEFUVVMJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0RNQV9TVEFUVVNfUkRfQ0hBTjlfU1RBVFVTCQkgKDB4M0w8PDE4KQorI2RlZmluZSBCTlgyX0NUWF9ETUFfU1RBVFVTX1JEX0NIQU4xMF9TVEFUVVMJCSAoMHgzTDw8MjApCisKKyNkZWZpbmUgQk5YMl9DVFhfUkVQX1NUQVRVUwkJCQkweDAwMDAxMDU4CisjZGVmaW5lIEJOWDJfQ1RYX1JFUF9TVEFUVVNfRVJST1JfRU5UUlkJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9DVFhfUkVQX1NUQVRVU19FUlJPUl9DTElFTlRfSUQJCSAoMHgxZkw8PDEwKQorI2RlZmluZSBCTlgyX0NUWF9SRVBfU1RBVFVTX1VTQUdFX0NOVF9NQVhfRVJSCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9DVFhfUkVQX1NUQVRVU19VU0FHRV9DTlRfTUlOX0VSUgkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfQ1RYX1JFUF9TVEFUVVNfVVNBR0VfQ05UX01JU1NfRVJSCQkgKDFMPDwxOCkKKworI2RlZmluZSBCTlgyX0NUWF9DS1NVTV9FUlJPUl9TVEFUVVMJCQkweDAwMDAxMDVjCisjZGVmaW5lIEJOWDJfQ1RYX0NLU1VNX0VSUk9SX1NUQVRVU19DQUxDVUxBVEVECQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfQ1RYX0NLU1VNX0VSUk9SX1NUQVRVU19FWFBFQ1RFRAkJICgweGZmZmZMPDwxNikKKwogI2RlZmluZSBCTlgyX0NUWF9DSE5MX0xPQ0tfU1RBVFVTXzAJCQkweDAwMDAxMDgwCiAjZGVmaW5lIEJOWDJfQ1RYX0NITkxfTE9DS19TVEFUVVNfMF9DSUQJCQkgKDB4M2ZmZkw8PDApCiAjZGVmaW5lIEJOWDJfQ1RYX0NITkxfTE9DS19TVEFUVVNfMF9UWVBFCQkgKDB4M0w8PDE0KQogI2RlZmluZSBCTlgyX0NUWF9DSE5MX0xPQ0tfU1RBVFVTXzBfTU9ERQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfQ1RYX0NITkxfTE9DS19TVEFUVVNfMF9NT0RFX1hJCQkgKDFMPDwxNCkKKyNkZWZpbmUgQk5YMl9DVFhfQ0hOTF9MT0NLX1NUQVRVU18wX1RZUEVfWEkJCSAoMHg3TDw8MTUpCiAKICNkZWZpbmUgQk5YMl9DVFhfQ0hOTF9MT0NLX1NUQVRVU18xCQkJMHgwMDAwMTA4NAogI2RlZmluZSBCTlgyX0NUWF9DSE5MX0xPQ0tfU1RBVFVTXzIJCQkweDAwMDAxMDg4CkBAIC0xMzk0LDYgKzI1MDIsMjYgQEAKICNkZWZpbmUgQk5YMl9DVFhfQ0hOTF9MT0NLX1NUQVRVU182CQkJMHgwMDAwMTA5OAogI2RlZmluZSBCTlgyX0NUWF9DSE5MX0xPQ0tfU1RBVFVTXzcJCQkweDAwMDAxMDljCiAjZGVmaW5lIEJOWDJfQ1RYX0NITkxfTE9DS19TVEFUVVNfOAkJCTB4MDAwMDEwYTAKKyNkZWZpbmUgQk5YMl9DVFhfQ0hOTF9MT0NLX1NUQVRVU185CQkJMHgwMDAwMTBhNAorCisjZGVmaW5lIEJOWDJfQ1RYX0NBQ0hFX0RBVEEJCQkJMHgwMDAwMTBjNAorI2RlZmluZSBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0NUUkwJCQkweDAwMDAxMGM4CisjZGVmaW5lIEJOWDJfQ1RYX0hPU1RfUEFHRV9UQkxfQ1RSTF9QQUdFX1RCTF9BRERSCSAoMHgxZmZMPDwwKQorI2RlZmluZSBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0NUUkxfV1JJVEVfUkVRCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9DVFhfSE9TVF9QQUdFX1RCTF9DVFJMX1JFQURfUkVRCQkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEEwCQkJMHgwMDAwMTBjYworI2RlZmluZSBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEEwX1ZBTElECQkgKDFMPDwwKQorI2RlZmluZSBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEEwX1ZBTFVFCQkgKDB4ZmZmZmZmTDw8OCkKKworI2RlZmluZSBCTlgyX0NUWF9IT1NUX1BBR0VfVEJMX0RBVEExCQkJMHgwMDAwMTBkMAorI2RlZmluZSBCTlgyX0NUWF9DQU1fQ1RSTAkJCQkweDAwMDAxMGQ0CisjZGVmaW5lIEJOWDJfQ1RYX0NBTV9DVFJMX0NBTV9BRERSCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfQ1RYX0NBTV9DVFJMX1JFU0VUCQkJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX0NUWF9DQU1fQ1RSTF9JTlZBTElEQVRFCQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfQ1RYX0NBTV9DVFJMX1NFQVJDSAkJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX0NUWF9DQU1fQ1RSTF9XUklURV9SRVEJCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9DVFhfQ0FNX0NUUkxfUkVBRF9SRVEJCQkgKDFMPDwzMSkKIAogCiAvKgpAQCAtMTQwNywxNCArMjUzNSwxNiBAQAogI2RlZmluZSBCTlgyX0VNQUNfTU9ERV9QT1JUX05PTkUJCQkgKDBMPDwyKQogI2RlZmluZSBCTlgyX0VNQUNfTU9ERV9QT1JUX01JSQkJCQkgKDFMPDwyKQogI2RlZmluZSBCTlgyX0VNQUNfTU9ERV9QT1JUX0dNSUkJCQkgKDJMPDwyKQotI2RlZmluZSBCTlgyX0VNQUNfTU9ERV9QT1JUX01JSV8xMAkJCSAoM0w8PDIpCisjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX1BPUlRfTUlJXzEwTQkJCSAoM0w8PDIpCiAjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX01BQ19MT09QCQkJCSAoMUw8PDQpCi0jZGVmaW5lIEJOWDJfRU1BQ19NT0RFXzI1RwkJCQkgKDFMPDw1KQorI2RlZmluZSBCTlgyX0VNQUNfTU9ERV8yNUdfTU9ERQkJCQkgKDFMPDw1KQogI2RlZmluZSBCTlgyX0VNQUNfTU9ERV9UQUdHRURfTUFDX0NUTAkJCSAoMUw8PDcpCiAjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX1RYX0JVUlNUCQkJCSAoMUw8PDgpCiAjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX01BWF9ERUZFUl9EUk9QX0VOQQkJICgxTDw8OSkKICNkZWZpbmUgQk5YMl9FTUFDX01PREVfRVhUX0xJTktfUE9MCQkJICgxTDw8MTApCiAjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX0ZPUkNFX0xJTksJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9FTUFDX01PREVfU0VSREVTX01PREUJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9FTUFDX01PREVfQk9ORF9PVlJECQkJICgxTDw8MTMpCiAjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX01QS1QJCQkJICgxTDw8MTgpCiAjZGVmaW5lIEJOWDJfRU1BQ19NT0RFX01QS1RfUkNWRAkJCSAoMUw8PDE5KQogI2RlZmluZSBCTlgyX0VNQUNfTU9ERV9BQ1BJX1JDVkQJCQkgKDFMPDwyMCkKQEAgLTE0MjIsNiArMjU1MiwxMSBAQAogI2RlZmluZSBCTlgyX0VNQUNfU1RBVFVTCQkJCTB4MDAwMDE0MDQKICNkZWZpbmUgQk5YMl9FTUFDX1NUQVRVU19MSU5LCQkJCSAoMUw8PDExKQogI2RlZmluZSBCTlgyX0VNQUNfU1RBVFVTX0xJTktfQ0hBTkdFCQkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfRU1BQ19TVEFUVVNfU0VSREVTX0FVVE9ORUdfQ09NUExFVEUJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfRU1BQ19TVEFUVVNfU0VSREVTX0FVVE9ORUdfQ0hBTkdFCQkgKDFMPDwxNCkKKyNkZWZpbmUgQk5YMl9FTUFDX1NUQVRVU19TRVJERVNfTlhUX1BHX0NIQU5HRQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfRU1BQ19TVEFUVVNfU0VSREVTX1JYX0NPTkZJR19JU18wCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9FTUFDX1NUQVRVU19TRVJERVNfUlhfQ09ORklHX0lTXzBfQ0hBTkdFCSAoMUw8PDE4KQogI2RlZmluZSBCTlgyX0VNQUNfU1RBVFVTX01JX0NPTVBMRVRFCQkJICgxTDw8MjIpCiAjZGVmaW5lIEJOWDJfRU1BQ19TVEFUVVNfTUlfSU5UCQkJCSAoMUw8PDIzKQogI2RlZmluZSBCTlgyX0VNQUNfU1RBVFVTX0FQX0VSUk9SCQkJICgxTDw8MjQpCkBAIC0xNDI5LDYgKzI1NjQsOSBAQAogCiAjZGVmaW5lIEJOWDJfRU1BQ19BVFRFTlRJT05fRU5BCQkJCTB4MDAwMDE0MDgKICNkZWZpbmUgQk5YMl9FTUFDX0FUVEVOVElPTl9FTkFfTElOSwkJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX0VNQUNfQVRURU5USU9OX0VOQV9BVVRPTkVHX0NIQU5HRQkJICgxTDw8MTQpCisjZGVmaW5lIEJOWDJfRU1BQ19BVFRFTlRJT05fRU5BX05YVF9QR19DSEFOR0UJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX0VNQUNfQVRURU5USU9OX0VOQV9TRVJERVNfUlhfQ09ORklHX0lTXzBfQ0hBTkdFCSAoMUw8PDE4KQogI2RlZmluZSBCTlgyX0VNQUNfQVRURU5USU9OX0VOQV9NSV9DT01QTEVURQkJICgxTDw8MjIpCiAjZGVmaW5lIEJOWDJfRU1BQ19BVFRFTlRJT05fRU5BX01JX0lOVAkJCSAoMUw8PDIzKQogI2RlZmluZSBCTlgyX0VNQUNfQVRURU5USU9OX0VOQV9BUF9FUlJPUgkJICgxTDw8MjQpCkBAIC0xNDQ1LDYgKzI1ODMsMTMgQEAKICNkZWZpbmUgQk5YMl9FTUFDX0xFRF8xMDBNQgkJCQkgKDFMPDw4KQogI2RlZmluZSBCTlgyX0VNQUNfTEVEXzEwTUIJCQkJICgxTDw8OSkKICNkZWZpbmUgQk5YMl9FTUFDX0xFRF9UUkFGRklDX1NUQVQJCQkgKDFMPDwxMCkKKyNkZWZpbmUgQk5YMl9FTUFDX0xFRF8yNTAwTUIJCQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfRU1BQ19MRURfMjUwME1CX09WRVJSSURFCQkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfRU1BQ19MRURfQUNUSVZJVFlfU0VMCQkJICgweDNMPDwxNykKKyNkZWZpbmUgQk5YMl9FTUFDX0xFRF9BQ1RJVklUWV9TRUxfMAkJCSAoMEw8PDE3KQorI2RlZmluZSBCTlgyX0VNQUNfTEVEX0FDVElWSVRZX1NFTF8xCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfRU1BQ19MRURfQUNUSVZJVFlfU0VMXzIJCQkgKDJMPDwxNykKKyNkZWZpbmUgQk5YMl9FTUFDX0xFRF9BQ1RJVklUWV9TRUxfMwkJCSAoM0w8PDE3KQogI2RlZmluZSBCTlgyX0VNQUNfTEVEX0JMTktfUkFURQkJCQkgKDB4ZmZmTDw8MTkpCiAjZGVmaW5lIEJOWDJfRU1BQ19MRURfQkxOS19SQVRFX0VOQQkJCSAoMUw8PDMxKQogCkBAIC0xNTE1LDkgKzI2NjAsMTUgQEAKICNkZWZpbmUgQk5YMl9FTUFDX01ESU9fQ09NTV9QSFlfQUREUgkJCSAoMHgxZkw8PDIxKQogI2RlZmluZSBCTlgyX0VNQUNfTURJT19DT01NX0NPTU1BTkQJCQkgKDB4M0w8PDI2KQogI2RlZmluZSBCTlgyX0VNQUNfTURJT19DT01NX0NPTU1BTkRfVU5ERUZJTkVEXzAJCSAoMEw8PDI2KQorI2RlZmluZSBCTlgyX0VNQUNfTURJT19DT01NX0NPTU1BTkRfQUREUkVTUwkJICgwTDw8MjYpCiAjZGVmaW5lIEJOWDJfRU1BQ19NRElPX0NPTU1fQ09NTUFORF9XUklURQkJICgxTDw8MjYpCiAjZGVmaW5lIEJOWDJfRU1BQ19NRElPX0NPTU1fQ09NTUFORF9SRUFECQkgKDJMPDwyNikKKyNkZWZpbmUgQk5YMl9FTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzIyX1hJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9FTUFDX01ESU9fQ09NTV9DT01NQU5EX1dSSVRFXzQ1X1hJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9FTUFDX01ESU9fQ09NTV9DT01NQU5EX1JFQURfMjJfWEkJCSAoMkw8PDI2KQorI2RlZmluZSBCTlgyX0VNQUNfTURJT19DT01NX0NPTU1BTkRfUkVBRF9JTkNfNDVfWEkJICgyTDw8MjYpCiAjZGVmaW5lIEJOWDJfRU1BQ19NRElPX0NPTU1fQ09NTUFORF9VTkRFRklORURfMwkJICgzTDw8MjYpCisjZGVmaW5lIEJOWDJfRU1BQ19NRElPX0NPTU1fQ09NTUFORF9SRUFEXzQ1CQkgKDNMPDwyNikKICNkZWZpbmUgQk5YMl9FTUFDX01ESU9fQ09NTV9GQUlMCQkJICgxTDw8MjgpCiAjZGVmaW5lIEJOWDJfRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWQkJCSAoMUw8PDI5KQogI2RlZmluZSBCTlgyX0VNQUNfTURJT19DT01NX0RJU0VYVAkJCSAoMUw8PDMwKQpAQCAtMTUzNCwxMyArMjY4NSwxNyBAQAogI2RlZmluZSBCTlgyX0VNQUNfTURJT19NT0RFX01ESU9fT0UJCQkgKDFMPDwxMCkKICNkZWZpbmUgQk5YMl9FTUFDX01ESU9fTU9ERV9NREMJCQkJICgxTDw8MTEpCiAjZGVmaW5lIEJOWDJfRU1BQ19NRElPX01PREVfTURJTlQJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9FTUFDX01ESU9fTU9ERV9FWFRfTURJTlQJCQkgKDFMPDwxMykKICNkZWZpbmUgQk5YMl9FTUFDX01ESU9fTU9ERV9DTE9DS19DTlQJCQkgKDB4MWZMPDwxNikKKyNkZWZpbmUgQk5YMl9FTUFDX01ESU9fTU9ERV9DTE9DS19DTlRfWEkJCSAoMHgzZkw8PDE2KQorI2RlZmluZSBCTlgyX0VNQUNfTURJT19NT0RFX0NMQVVTRV80NV9YSQkJICgxTDw8MzEpCiAKICNkZWZpbmUgQk5YMl9FTUFDX01ESU9fQVVUT19TVEFUVVMJCQkweDAwMDAxNGI4CiAjZGVmaW5lIEJOWDJfRU1BQ19NRElPX0FVVE9fU1RBVFVTX0FVVE9fRVJSCQkgKDFMPDwwKQogCiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9NT0RFCQkJCTB4MDAwMDE0YmMKICNkZWZpbmUgQk5YMl9FTUFDX1RYX01PREVfUkVTRVQJCQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9FTUFDX1RYX01PREVfQ1MxNl9URVNUCQkJICgxTDw8MikKICNkZWZpbmUgQk5YMl9FTUFDX1RYX01PREVfRVhUX1BBVVNFX0VOCQkJICgxTDw8MykKICNkZWZpbmUgQk5YMl9FTUFDX1RYX01PREVfRkxPV19FTgkJCSAoMUw8PDQpCiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9NT0RFX0JJR19CQUNLT0ZGCQkJICgxTDw8NSkKQEAgLTE1NTMsNiArMjcwOCw3IEBACiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9TVEFUVVNfWE9OX1NFTlQJCQkgKDFMPDwyKQogI2RlZmluZSBCTlgyX0VNQUNfVFhfU1RBVFVTX0xJTktfVVAJCQkgKDFMPDwzKQogI2RlZmluZSBCTlgyX0VNQUNfVFhfU1RBVFVTX1VOREVSUlVOCQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRVU19DUzE2X0VSUk9SCQkJICgxTDw8NSkKIAogI2RlZmluZSBCTlgyX0VNQUNfVFhfTEVOR1RIUwkJCQkweDAwMDAxNGM0CiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9MRU5HVEhTX1NMT1QJCQkgKDB4ZmZMPDwwKQpAQCAtMTU4Niw2ICsyNzQyLDEwIEBACiAjZGVmaW5lIEJOWDJfRU1BQ19NVUxUSUNBU1RfSEFTSDUJCQkweDAwMDAxNGU0CiAjZGVmaW5lIEJOWDJfRU1BQ19NVUxUSUNBU1RfSEFTSDYJCQkweDAwMDAxNGU4CiAjZGVmaW5lIEJOWDJfRU1BQ19NVUxUSUNBU1RfSEFTSDcJCQkweDAwMDAxNGVjCisjZGVmaW5lIEJOWDJfRU1BQ19DS1NVTV9FUlJPUl9TVEFUVVMJCQkweDAwMDAxNGYwCisjZGVmaW5lIEJOWDJfRU1BQ19DS1NVTV9FUlJPUl9TVEFUVVNfQ0FMQ1VMQVRFRAkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX0VNQUNfQ0tTVU1fRVJST1JfU1RBVFVTX0VYUEVDVEVECQkgKDB4ZmZmZkw8PDE2KQorCiAjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0lGSENJTk9DVEVUUwkJCTB4MDAwMDE1MDAKICNkZWZpbmUgQk5YMl9FTUFDX1JYX1NUQVRfSUZIQ0lOQkFET0NURVRTCQkweDAwMDAxNTA0CiAjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0VUSEVSU1RBVFNGUkFHTUVOVFMJCTB4MDAwMDE1MDgKQEAgLTE2MDgsNyArMjc2OCw3IEBACiAjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0VUSEVSU1RBVFNQS1RTMjU2T0NURVRTVE81MTFPQ1RFVFMJMHgwMDAwMTU0YwogI2RlZmluZSBCTlgyX0VNQUNfUlhfU1RBVF9FVEhFUlNUQVRTUEtUUzUxMk9DVEVUU1RPMTAyM09DVEVUUwkweDAwMDAxNTUwCiAjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0VUSEVSU1RBVFNQS1RTMTAyNE9DVEVUU1RPMTUyMk9DVEVUUwkweDAwMDAxNTU0Ci0jZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0VUSEVSU1RBVFNQS1RTMTUyM09DVEVUU1RPOTAyMk9DVEVUUwkweDAwMDAxNTU4CisjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0VUSEVSU1RBVFNQS1RTT1ZFUjE1MjJPQ1RFVFMJMHgwMDAwMTU1OAogI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUcwCQkJCTB4MDAwMDE1NWMKICNkZWZpbmUgQk5YMl9FTUFDX1JYTUFDX0RFQlVHMQkJCQkweDAwMDAxNTYwCiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzFfTEVOR1RIX05FX0JZVEVfQ09VTlQJICgxTDw8MCkKQEAgLTE2NjEsOSArMjgyMSw5IEBACiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfRklMVF9TVEFURV9VTUFDMgkJICgweDFMPDwxNikKICNkZWZpbmUgQk5YMl9FTUFDX1JYTUFDX0RFQlVHNF9GSUxUX1NUQVRFX1VNQUMzCQkgKDB4Mkw8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUc0X0ZJTFRfU1RBVEVfVU5JCQkgKDB4M0w8PDE2KQotI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUc0X0ZJTFRfU1RBVEVfTU1BQzIJCSAoMHg3TDw8MTYpCiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfRklMVF9TVEFURV9NTUFDMwkJICgweDVMPDwxNikKICNkZWZpbmUgQk5YMl9FTUFDX1JYTUFDX0RFQlVHNF9GSUxUX1NUQVRFX1BTQTEJCSAoMHg2TDw8MTYpCisjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfRklMVF9TVEFURV9NTUFDMgkJICgweDdMPDwxNikKICNkZWZpbmUgQk5YMl9FTUFDX1JYTUFDX0RFQlVHNF9GSUxUX1NUQVRFX1BTQTIJCSAoMHg3TDw8MTYpCiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfRklMVF9TVEFURV9QU0EzCQkgKDB4OEw8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUc0X0ZJTFRfU1RBVEVfTUMyCQkgKDB4OUw8PDE2KQpAQCAtMTcwMSw3ICsyODYxLDcgQEAKICNkZWZpbmUgQk5YMl9FTUFDX1JYTUFDX0RFQlVHNF9TTE9UX0ZJTExFRAkJICgxTDw8MjMpCiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfRkFMU0VfQ0FSUklFUgkJICgxTDw8MjQpCiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfTEFTVF9EQVRBCQkgKDFMPDwyNSkKLSNkZWZpbmUgQk5YMl9FTUFDX1JYTUFDX0RFQlVHNF9zZmRfRk9VTkQJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUc0X1NGRF9GT1VORAkJICgxTDw8MjYpCiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzRfQURWQU5DRQkJCSAoMUw8PDI3KQogI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUc0X1NUQVJUCQkJICgxTDw8MjgpCiAKQEAgLTE3MzMsNiArMjg5Myw3IEBACiAjZGVmaW5lIEJOWDJfRU1BQ19SWE1BQ19ERUJVRzVfSURJX1JQTV9BQ0NFUFQJCSAoMUw8PDE5KQogI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfREVCVUc1X0ZNTEVOCQkJICgweGZmZkw8PDIwKQogCisjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0ZBTFNFQ0FSUklFUkVSUk9SUwkJMHgwMDAwMTU3NAogI2RlZmluZSBCTlgyX0VNQUNfUlhfU1RBVF9BQzAJCQkJMHgwMDAwMTU4MAogI2RlZmluZSBCTlgyX0VNQUNfUlhfU1RBVF9BQzEJCQkJMHgwMDAwMTU4NAogI2RlZmluZSBCTlgyX0VNQUNfUlhfU1RBVF9BQzIJCQkJMHgwMDAwMTU4OApAQCAtMTc1Nyw2ICsyOTE4LDcgQEAKICNkZWZpbmUgQk5YMl9FTUFDX1JYX1NUQVRfQUMyMQkJCQkweDAwMDAxNWQ0CiAjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0FDMjIJCQkJMHgwMDAwMTVkOAogI2RlZmluZSBCTlgyX0VNQUNfUlhNQUNfU1VDX0RCR19PVkVSUlVOVkVDCQkweDAwMDAxNWRjCisjZGVmaW5lIEJOWDJfRU1BQ19SWF9TVEFUX0FDXzI4CQkJCTB4MDAwMDE1ZjQKICNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfSUZIQ09VVE9DVEVUUwkJCTB4MDAwMDE2MDAKICNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfSUZIQ09VVEJBRE9DVEVUUwkJMHgwMDAwMTYwNAogI2RlZmluZSBCTlgyX0VNQUNfVFhfU1RBVF9FVEhFUlNUQVRTQ09MTElTSU9OUwkJMHgwMDAwMTYwOApAQCAtMTc3Nyw3ICsyOTM5LDcgQEAKICNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfRVRIRVJTVEFUU1BLVFMyNTZPQ1RFVFNUTzUxMU9DVEVUUwkweDAwMDAxNjQ0CiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9TVEFUX0VUSEVSU1RBVFNQS1RTNTEyT0NURVRTVE8xMDIzT0NURVRTCTB4MDAwMDE2NDgKICNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfRVRIRVJTVEFUU1BLVFMxMDI0T0NURVRTVE8xNTIyT0NURVRTCTB4MDAwMDE2NGMKLSNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfRVRIRVJTVEFUU1BLVFMxNTIzT0NURVRTVE85MDIyT0NURVRTCTB4MDAwMDE2NTAKKyNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfRVRIRVJTVEFUU1BLVFNPVkVSMTUyMk9DVEVUUwkweDAwMDAxNjUwCiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9TVEFUX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlMJMHgwMDAwMTY1NAogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUcwCQkJCTB4MDAwMDE2NTgKICNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHMQkJCQkweDAwMDAxNjVjCkBAIC0xODQzLDE2ICszMDA1LDE2IEBACiAjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfSURMRQkJICgweDBMPDwxNikKICNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHNF9QQVVTRV9TVEFURV9NQ0ExCQkgKDB4Mkw8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUc0X1BBVVNFX1NUQVRFX01DQTIJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfU1JDMwkJICgweDRMPDwxNikKKyNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHNF9QQVVTRV9TVEFURV9TUkMyCQkgKDB4NUw8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUc0X1BBVVNFX1NUQVRFX01DQTMJCSAoMHg2TDw8MTYpCiAjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfU1JDMQkJICgweDdMPDwxNikKLSNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHNF9QQVVTRV9TVEFURV9TUkMyCQkgKDB4NUw8PDE2KQotI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUc0X1BBVVNFX1NUQVRFX1NSQzMJCSAoMHg0TDw8MTYpCi0jZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfVFlQRQkJICgweGNMPDwxNikKLSNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHNF9QQVVTRV9TVEFURV9DTUQJCSAoMHhlTDw8MTYpCi0jZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfVElNRQkJICgweGFMPDwxNikKICNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHNF9QQVVTRV9TVEFURV9DUkMxCQkgKDB4OEw8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUc0X1BBVVNFX1NUQVRFX0NSQzIJCSAoMHg5TDw8MTYpCisjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfVElNRQkJICgweGFMPDwxNikKKyNkZWZpbmUgQk5YMl9FTUFDX1RYTUFDX0RFQlVHNF9QQVVTRV9TVEFURV9UWVBFCQkgKDB4Y0w8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUc0X1BBVVNFX1NUQVRFX1dBSVQJCSAoMHhkTDw8MTYpCisjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfUEFVU0VfU1RBVEVfQ01ECQkgKDB4ZUw8PDE2KQogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfREVCVUc0X1NUQVRTMF9WQUxJRAkJICgxTDw8MjApCiAjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfQVBQRU5EX0NSQwkJICgxTDw8MjEpCiAjZGVmaW5lIEJOWDJfRU1BQ19UWE1BQ19ERUJVRzRfU0xPVF9GSUxMRUQJCSAoMUw8PDIyKQpAQCAtMTg4Nyw4ICszMDQ5LDExIEBACiAjZGVmaW5lIEJOWDJfRU1BQ19UWF9TVEFUX0FDMTgJCQkJMHgwMDAwMTZjOAogI2RlZmluZSBCTlgyX0VNQUNfVFhfU1RBVF9BQzE5CQkJCTB4MDAwMDE2Y2MKICNkZWZpbmUgQk5YMl9FTUFDX1RYX1NUQVRfQUMyMAkJCQkweDAwMDAxNmQwCi0jZGVmaW5lIEJOWDJfRU1BQ19UWF9TVEFUX0FDMjEJCQkJMHgwMDAwMTZkNAogI2RlZmluZSBCTlgyX0VNQUNfVFhNQUNfU1VDX0RCR19PVkVSUlVOVkVDCQkweDAwMDAxNmQ4CisjZGVmaW5lIEJOWDJfRU1BQ19UWF9SQVRFX0xJTUlUX0NUUkwJCQkweDAwMDAxNmZjCisjZGVmaW5lIEJOWDJfRU1BQ19UWF9SQVRFX0xJTUlUX0NUUkxfVFhfVEhST1RUTEVfSU5DCSAoMHg3Zkw8PDApCisjZGVmaW5lIEJOWDJfRU1BQ19UWF9SQVRFX0xJTUlUX0NUUkxfVFhfVEhST1RUTEVfTlVNCSAoMHg3Zkw8PDE2KQorI2RlZmluZSBCTlgyX0VNQUNfVFhfUkFURV9MSU1JVF9DVFJMX1JBVEVfTElNSVRFUl9FTgkgKDFMPDwzMSkKIAogCiAvKgpAQCAtMTkwOSw4ICszMDc0LDE1IEBACiAjZGVmaW5lIEJOWDJfUlBNX0NPTkZJR19BQ1BJX0tFRVAJCQkgKDFMPDwyKQogI2RlZmluZSBCTlgyX1JQTV9DT05GSUdfTVBfS0VFUAkJCQkgKDFMPDwzKQogI2RlZmluZSBCTlgyX1JQTV9DT05GSUdfU09SVF9WRUNUX1ZBTAkJCSAoMHhmTDw8NCkKKyNkZWZpbmUgQk5YMl9SUE1fQ09ORklHX0RJU0FCTEVfV09MX0FTU0VSVAkJICgxTDw8MzApCiAjZGVmaW5lIEJOWDJfUlBNX0NPTkZJR19JR05PUkVfVkxBTgkJCSAoMUw8PDMxKQogCisjZGVmaW5lIEJOWDJfUlBNX01HTVRfUEtUX0NUUkwJCQkJMHgwMDAwMTgwYworI2RlZmluZSBCTlgyX1JQTV9NR01UX1BLVF9DVFJMX01HTVRfU09SVAkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9NR01UX1BLVF9DVFJMX01HTVRfUlVMRQkJICgweGZMPDw0KQorI2RlZmluZSBCTlgyX1JQTV9NR01UX1BLVF9DVFJMX01HTVRfRElTQ0FSRF9FTgkJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfUlBNX01HTVRfUEtUX0NUUkxfTUdNVF9FTgkJCSAoMUw8PDMxKQorCiAjZGVmaW5lIEJOWDJfUlBNX1ZMQU5fTUFUQ0gwCQkJCTB4MDAwMDE4MTAKICNkZWZpbmUgQk5YMl9SUE1fVkxBTl9NQVRDSDBfUlBNX1ZMQU5fTVRDSDBfVkFMVUUJICgweGZmZkw8PDApCiAKQEAgLTE5MzEsNiArMzEwMyw3IEBACiAjZGVmaW5lIEJOWDJfUlBNX1NPUlRfVVNFUjBfUFJPTV9FTgkJCSAoMUw8PDE5KQogI2RlZmluZSBCTlgyX1JQTV9TT1JUX1VTRVIwX1ZMQU5fRU4JCQkgKDB4Zkw8PDIwKQogI2RlZmluZSBCTlgyX1JQTV9TT1JUX1VTRVIwX1BST01fVkxBTgkJCSAoMUw8PDI0KQorI2RlZmluZSBCTlgyX1JQTV9TT1JUX1VTRVIwX1ZMQU5fTk9UTUFUQ0gJCSAoMUw8PDI1KQogI2RlZmluZSBCTlgyX1JQTV9TT1JUX1VTRVIwX0VOQQkJCQkgKDFMPDwzMSkKIAogI2RlZmluZSBCTlgyX1JQTV9TT1JUX1VTRVIxCQkJCTB4MDAwMDE4MjQKQEAgLTE5NjgsMTEgKzMxNDEsMTg3IEBACiAjZGVmaW5lIEJOWDJfUlBNX1NUQVRfSUZJTkZUUURJU0NBUkRTCQkJMHgwMDAwMTg0OAogI2RlZmluZSBCTlgyX1JQTV9TVEFUX0lGSU5NQlVGRElTQ0FSRAkJCTB4MDAwMDE4NGMKICNkZWZpbmUgQk5YMl9SUE1fU1RBVF9SVUxFX0NIRUNLRVJfUDRfSElUCQkweDAwMDAxODUwCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjAJCTB4MDAwMDE4NTQKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OMF9ORVhUX0hFQURFUl9MRU4JICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OMF9ORVhUX0hFQURFUgkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OMF9ORVhUX0hFQURFUl9MRU5fVFlQRQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OMF9ORVhUX0hFQURFUl9FTgkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT04xCQkweDAwMDAxODU4CisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjFfTkVYVF9IRUFERVJfTEVOCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjFfTkVYVF9IRUFERVIJICgweGZmTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjFfTkVYVF9IRUFERVJfTEVOX1RZUEUJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjFfTkVYVF9IRUFERVJfRU4JICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OMgkJMHgwMDAwMTg1YworI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT04yX05FWFRfSEVBREVSX0xFTgkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT04yX05FWFRfSEVBREVSCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT04yX05FWFRfSEVBREVSX0xFTl9UWVBFCSAoMUw8PDMwKQorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT04yX05FWFRfSEVBREVSX0VOCSAoMUw8PDMxKQorCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjMJCTB4MDAwMDE4NjAKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OM19ORVhUX0hFQURFUl9MRU4JICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OM19ORVhUX0hFQURFUgkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OM19ORVhUX0hFQURFUl9MRU5fVFlQRQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9OM19ORVhUX0hFQURFUl9FTgkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT040CQkweDAwMDAxODY0CisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjRfTkVYVF9IRUFERVJfTEVOCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjRfTkVYVF9IRUFERVIJICgweGZmTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjRfTkVYVF9IRUFERVJfTEVOX1RZUEUJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjRfTkVYVF9IRUFERVJfRU4JICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9ONQkJMHgwMDAwMTg2OAorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT041X05FWFRfSEVBREVSX0xFTgkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT041X05FWFRfSEVBREVSCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT041X05FWFRfSEVBREVSX0xFTl9UWVBFCSAoMUw8PDMwKQorI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT041X05FWFRfSEVBREVSX0VOCSAoMUw8PDMxKQorCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjYJCTB4MDAwMDE4NmMKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9ONl9ORVhUX0hFQURFUl9MRU4JICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9ONl9ORVhUX0hFQURFUgkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9ONl9ORVhUX0hFQURFUl9MRU5fVFlQRQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9SUE1fSVBWNl9QUk9HUkFNTUFCTEVfRVhURU5TSU9ONl9ORVhUX0hFQURFUl9FTgkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX1JQTV9JUFY2X1BST0dSQU1NQUJMRV9FWFRFTlNJT043CQkweDAwMDAxODcwCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjdfTkVYVF9IRUFERVJfTEVOCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjdfTkVYVF9IRUFERVIJICgweGZmTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjdfTkVYVF9IRUFERVJfTEVOX1RZUEUJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfUlBNX0lQVjZfUFJPR1JBTU1BQkxFX0VYVEVOU0lPTjdfTkVYVF9IRUFERVJfRU4JICgxTDw8MzEpCisKICNkZWZpbmUgQk5YMl9SUE1fU1RBVF9BQzAJCQkJMHgwMDAwMTg4MAogI2RlZmluZSBCTlgyX1JQTV9TVEFUX0FDMQkJCQkweDAwMDAxODg0CiAjZGVmaW5lIEJOWDJfUlBNX1NUQVRfQUMyCQkJCTB4MDAwMDE4ODgKICNkZWZpbmUgQk5YMl9SUE1fU1RBVF9BQzMJCQkJMHgwMDAwMTg4YwogI2RlZmluZSBCTlgyX1JQTV9TVEFUX0FDNAkJCQkweDAwMDAxODkwCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTYJCQkJMHgwMDAwMThlMAorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X09GRlNFVAkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfQ0xBU1MJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfUFJJT1JJVFkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNl9QNAkJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNl9IRFJfVFlQRQkJCSAoMHg3TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfSERSX1RZUEVfU1RBUlQJCSAoMEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0hEUl9UWVBFX0lQCQkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfSERSX1RZUEVfVENQCQkgKDJMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNl9IRFJfVFlQRV9VRFAJCSAoM0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0hEUl9UWVBFX0RBVEEJCSAoNEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0hEUl9UWVBFX1RDUF9VRFAJCSAoNUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0hEUl9UWVBFX0lDTVBWNgkJICg2TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfQ09NUAkJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfQ09NUF9FUVVBTAkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0NPTVBfTkVRVUFMCQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfQ09NUF9HUkVBVEVSCQkgKDJMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNl9DT01QX0xFU1MJCQkgKDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNl9NQVAJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfU0JJVAkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0NNRFNFTAkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE2X0RJU0NBUkQJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNl9NQVNLCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfUDEJCQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfUDIJCQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfUDMJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTZfTkJJVAkJCSAoMUw8PDMwKQorCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTYJCQkweDAwMDAxOGU0CisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTZfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTZfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNwkJCQkweDAwMDAxOGU4CisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfT0ZGU0VUCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19DTEFTUwkJCSAoMHg3TDw8OCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19QUklPUklUWQkJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE3X1A0CQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE3X0hEUl9UWVBFCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19IRFJfVFlQRV9TVEFSVAkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfSERSX1RZUEVfSVAJCQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19IRFJfVFlQRV9UQ1AJCSAoMkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE3X0hEUl9UWVBFX1VEUAkJICgzTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfSERSX1RZUEVfREFUQQkJICg0TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfSERSX1RZUEVfVENQX1VEUAkJICg1TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfSERSX1RZUEVfSUNNUFY2CQkgKDZMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19DT01QCQkJICgweDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19DT01QX0VRVUFMCQkJICgwTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfQ09NUF9ORVFVQUwJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19DT01QX0dSRUFURVIJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE3X0NPTVBfTEVTUwkJCSAoM0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE3X01BUAkJCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19TQklUCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfQ01EU0VMCQkJICgweDFmTDw8MjApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTdfRElTQ0FSRAkJCSAoMUw8PDI1KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE3X01BU0sJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19QMQkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19QMgkJCQkgKDFMPDwyOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19QMwkJCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xN19OQklUCQkJICgxTDw8MzApCisKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS18xNwkJCTB4MDAwMDE4ZWMKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS18xN19WQUxVRQkJCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS18xN19NQVNLCQkJICgweGZmZmZMPDwxNikKKworI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4CQkJCTB4MDAwMDE4ZjAKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9PRkZTRVQJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X0NMQVNTCQkJICgweDdMPDw4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X1BSSU9SSVRZCQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMThfUDQJCQkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMThfSERSX1RZUEUJCQkgKDB4N0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X0hEUl9UWVBFX1NUQVJUCQkgKDBMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9IRFJfVFlQRV9JUAkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X0hEUl9UWVBFX1RDUAkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMThfSERSX1RZUEVfVURQCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9IRFJfVFlQRV9EQVRBCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9IRFJfVFlQRV9UQ1BfVURQCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9IRFJfVFlQRV9JQ01QVjYJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X0NPTVAJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X0NPTVBfRVFVQUwJCQkgKDBMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9DT01QX05FUVVBTAkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X0NPTVBfR1JFQVRFUgkJICgyTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMThfQ09NUF9MRVNTCQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMThfTUFQCQkJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X1NCSVQJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9DTURTRUwJCQkgKDB4MWZMPDwyMCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOF9ESVNDQVJECQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMThfTUFTSwkJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X1AxCQkJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X1AyCQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X1AzCQkJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE4X05CSVQJCQkgKDFMPDwzMCkKKworI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzE4CQkJMHgwMDAwMThmNAorI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzE4X1ZBTFVFCQkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzE4X01BU0sJCQkgKDB4ZmZmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTkJCQkJMHgwMDAwMThmOAorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X09GRlNFVAkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfQ0xBU1MJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfUFJJT1JJVFkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOV9QNAkJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOV9IRFJfVFlQRQkJCSAoMHg3TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfSERSX1RZUEVfU1RBUlQJCSAoMEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0hEUl9UWVBFX0lQCQkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfSERSX1RZUEVfVENQCQkgKDJMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOV9IRFJfVFlQRV9VRFAJCSAoM0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0hEUl9UWVBFX0RBVEEJCSAoNEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0hEUl9UWVBFX1RDUF9VRFAJCSAoNUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0hEUl9UWVBFX0lDTVBWNgkJICg2TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfQ09NUAkJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfQ09NUF9FUVVBTAkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0NPTVBfTkVRVUFMCQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfQ09NUF9HUkVBVEVSCQkgKDJMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOV9DT01QX0xFU1MJCQkgKDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOV9NQVAJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfU0JJVAkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0NNRFNFTAkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE5X0RJU0NBUkQJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xOV9NQVNLCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfUDEJCQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfUDIJCQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfUDMJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTlfTkJJVAkJCSAoMUw8PDMwKQorCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTkJCQkweDAwMDAxOGZjCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTlfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTlfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wCQkJCTB4MDAwMDE5MDAKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX09GRlNFVAkJCSAoMHhmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMF9DTEFTUwkJCSAoMHg3TDw8OCkKQEAgLTE5ODQsMTQgKzMzMzMsMTggQEAKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0hEUl9UWVBFX1RDUAkJCSAoMkw8PDEzKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzBfSERSX1RZUEVfVURQCQkJICgzTDw8MTMpCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMF9IRFJfVFlQRV9EQVRBCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0hEUl9UWVBFX1RDUF9VRFAJCSAoNUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzBfSERSX1RZUEVfSUNNUFY2CQkgKDZMPDwxMykKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0NPTVAJCQkJICgweDNMPDwxNikKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0NPTVBfRVFVQUwJCQkgKDBMPDwxNikKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0NPTVBfTkVRVUFMCQkJICgxTDw8MTYpCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMF9DT01QX0dSRUFURVIJCQkgKDJMPDwxNikKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0NPTVBfTEVTUwkJCSAoM0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzBfTUFQX1hJCQkJICgxTDw8MTgpCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMF9TQklUCQkJCSAoMUw8PDE5KQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzBfQ01EU0VMCQkJICgweGZMPDwyMCkKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX01BUAkJCQkgKDFMPDwyNCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzBfRElTQ0FSRAkJCSAoMUw8PDI1KQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzBfTUFTSwkJCQkgKDFMPDwyNikKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8wX1AxCQkJCSAoMUw8PDI3KQpAQCAtMjAwNiw4MSArMzM1OSw1MTggQEAKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xCQkJCTB4MDAwMDE5MDgKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX0EJCQkJICgweDNmZmZmTDw8MCkKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfT0ZGU0VUX1hJCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX0NMQVNTX1hJCQkJICgweDdMPDw4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX1A0X1hJCQkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9IRFJfVFlQRV9YSQkJCSAoMHg3TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9IRFJfVFlQRV9JUF9YSQkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9IRFJfVFlQRV9UQ1BfWEkJCSAoMkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX0hEUl9UWVBFX0RBVEFfWEkJCSAoNEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfSERSX1RZUEVfVENQX1VEUF9YSQkJICg1TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfQ09NUF9YSQkJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9DT01QX0VRVUFMX1hJCQkgKDBMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX0NPTVBfR1JFQVRFUl9YSQkJICgyTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9DT01QX0xFU1NfWEkJCQkgKDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX01BUF9YSQkJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfQ01EU0VMX1hJCQkJICgweDFmTDw8MjApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9ESVNDQVJEX1hJCQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9QMV9YSQkJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzFfUDJfWEkJCQkgKDFMPDwyOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xX1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMV9OQklUX1hJCQkJICgxTDw8MzApCiAKICNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS18xCQkJMHgwMDAwMTkwYworI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzFfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMV9NQVNLCQkJICgweGZmZmZMPDwxNikKKwogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzIJCQkJMHgwMDAwMTkxMAogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfQgkJCQkgKDB4ZmZmTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9PRkZTRVRfWEkJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9QUklPUklUWV9YSQkJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfUDRfWEkJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0hEUl9UWVBFX1NUQVJUX1hJCQkgKDBMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0hEUl9UWVBFX0lQX1hJCQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9IRFJfVFlQRV9VRFBfWEkJCSAoM0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfSERSX1RZUEVfREFUQV9YSQkJICg0TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0hEUl9UWVBFX0lDTVBWNl9YSQkJICg2TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9DT01QX1hJCQkJICgweDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfQ09NUF9ORVFVQUxfWEkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfQ09NUF9HUkVBVEVSX1hJCQkgKDJMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0NPTVBfTEVTU19YSQkJCSAoM0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9TQklUX1hJCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9DTURTRUxfWEkJCQkgKDB4MWZMPDwyMCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX01BU0tfWEkJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX1AxX1hJCQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMl9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzJfUDNfWEkJCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8yX05CSVRfWEkJCQkgKDFMPDwzMCkKIAogI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzIJCQkweDAwMDAxOTE0CisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMl9WQUxVRQkJCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS18yX01BU0sJCQkgKDB4ZmZmZkw8PDE2KQorCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMwkJCQkweDAwMDAxOTE4CiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19BCQkJCSAoMHgzZmZmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19CCQkJCSAoMHhmZmZMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19DTEFTU19YSQkJCSAoMHg3TDw8OCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX1BSSU9SSVRZX1hJCQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfSERSX1RZUEVfWEkJCQkgKDB4N0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfSERSX1RZUEVfU1RBUlRfWEkJCSAoMEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfSERSX1RZUEVfVENQX1hJCQkgKDJMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX0hEUl9UWVBFX1VEUF9YSQkJICgzTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX0hEUl9UWVBFX1RDUF9VRFBfWEkJCSAoNUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfSERSX1RZUEVfSUNNUFY2X1hJCQkgKDZMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfQ09NUF9FUVVBTF9YSQkJICgwTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19DT01QX05FUVVBTF9YSQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfQ09NUF9MRVNTX1hJCQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19NQVBfWEkJCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX1NCSVRfWEkJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfRElTQ0FSRF9YSQkJCSAoMUw8PDI1KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfTUFTS19YSQkJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8zX1AyX1hJCQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfM19QM19YSQkJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzNfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMwkJCTB4MDAwMDE5MWMKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS18zX1ZBTFVFCQkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzNfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80CQkJCTB4MDAwMDE5MjAKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X0EJCQkJICgweDNmZmZmTDw8MCkKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfT0ZGU0VUX1hJCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X0NMQVNTX1hJCQkJICgweDdMPDw4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X1A0X1hJCQkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9IRFJfVFlQRV9YSQkJCSAoMHg3TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9IRFJfVFlQRV9JUF9YSQkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9IRFJfVFlQRV9UQ1BfWEkJCSAoMkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X0hEUl9UWVBFX0RBVEFfWEkJCSAoNEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfSERSX1RZUEVfVENQX1VEUF9YSQkJICg1TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfQ09NUF9YSQkJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9DT01QX0VRVUFMX1hJCQkgKDBMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X0NPTVBfR1JFQVRFUl9YSQkJICgyTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9DT01QX0xFU1NfWEkJCQkgKDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X01BUF9YSQkJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfQ01EU0VMX1hJCQkJICgweDFmTDw8MjApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9ESVNDQVJEX1hJCQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9QMV9YSQkJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzRfUDJfWEkJCQkgKDFMPDwyOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF80X1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNF9OQklUX1hJCQkJICgxTDw8MzApCiAKICNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS180CQkJMHgwMDAwMTkyNAorI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzRfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfNF9NQVNLCQkJICgweGZmZmZMPDwxNikKKwogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzUJCQkJMHgwMDAwMTkyOAogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfQgkJCQkgKDB4ZmZmTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9PRkZTRVRfWEkJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9QUklPUklUWV9YSQkJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfUDRfWEkJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0hEUl9UWVBFX1NUQVJUX1hJCQkgKDBMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0hEUl9UWVBFX0lQX1hJCQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9IRFJfVFlQRV9VRFBfWEkJCSAoM0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfSERSX1RZUEVfREFUQV9YSQkJICg0TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0hEUl9UWVBFX0lDTVBWNl9YSQkJICg2TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9DT01QX1hJCQkJICgweDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfQ09NUF9ORVFVQUxfWEkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfQ09NUF9HUkVBVEVSX1hJCQkgKDJMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0NPTVBfTEVTU19YSQkJCSAoM0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9TQklUX1hJCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9DTURTRUxfWEkJCQkgKDB4MWZMPDwyMCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X01BU0tfWEkJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X1AxX1hJCQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNV9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzVfUDNfWEkJCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF81X05CSVRfWEkJCQkgKDFMPDwzMCkKIAogI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzUJCQkweDAwMDAxOTJjCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfNV9WQUxVRQkJCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS181X01BU0sJCQkgKDB4ZmZmZkw8PDE2KQorCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNgkJCQkweDAwMDAxOTMwCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9BCQkJCSAoMHgzZmZmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9CCQkJCSAoMHhmZmZMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9DTEFTU19YSQkJCSAoMHg3TDw8OCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X1BSSU9SSVRZX1hJCQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfSERSX1RZUEVfWEkJCQkgKDB4N0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfSERSX1RZUEVfU1RBUlRfWEkJCSAoMEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfSERSX1RZUEVfVENQX1hJCQkgKDJMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X0hEUl9UWVBFX1VEUF9YSQkJICgzTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X0hEUl9UWVBFX1RDUF9VRFBfWEkJCSAoNUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfSERSX1RZUEVfSUNNUFY2X1hJCQkgKDZMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfQ09NUF9FUVVBTF9YSQkJICgwTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9DT01QX05FUVVBTF9YSQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfQ09NUF9MRVNTX1hJCQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9NQVBfWEkJCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X1NCSVRfWEkJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfRElTQ0FSRF9YSQkJCSAoMUw8PDI1KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfTUFTS19YSQkJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF82X1AyX1hJCQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfNl9QM19YSQkJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzZfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfNgkJCTB4MDAwMDE5MzQKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS182X1ZBTFVFCQkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzZfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83CQkJCTB4MDAwMDE5MzgKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X0EJCQkJICgweDNmZmZmTDw8MCkKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfT0ZGU0VUX1hJCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X0NMQVNTX1hJCQkJICgweDdMPDw4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X1A0X1hJCQkJICgxTDw8MTIpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19IRFJfVFlQRV9YSQkJCSAoMHg3TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19IRFJfVFlQRV9JUF9YSQkJICgxTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19IRFJfVFlQRV9UQ1BfWEkJCSAoMkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X0hEUl9UWVBFX0RBVEFfWEkJCSAoNEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfSERSX1RZUEVfVENQX1VEUF9YSQkJICg1TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfQ09NUF9YSQkJCSAoMHgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19DT01QX0VRVUFMX1hJCQkgKDBMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X0NPTVBfR1JFQVRFUl9YSQkJICgyTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19DT01QX0xFU1NfWEkJCQkgKDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X01BUF9YSQkJCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfQ01EU0VMX1hJCQkJICgweDFmTDw8MjApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19ESVNDQVJEX1hJCQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19QMV9YSQkJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzdfUDJfWEkJCQkgKDFMPDwyOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF83X1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfN19OQklUX1hJCQkJICgxTDw8MzApCiAKICNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS183CQkJMHgwMDAwMTkzYworI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzdfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfN19NQVNLCQkJICgweGZmZmZMPDwxNikKKwogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzgJCQkJMHgwMDAwMTk0MAogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfQgkJCQkgKDB4ZmZmTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9PRkZTRVRfWEkJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9QUklPUklUWV9YSQkJCSAoMUw8PDExKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfUDRfWEkJCQkgKDFMPDwxMikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0hEUl9UWVBFX1NUQVJUX1hJCQkgKDBMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0hEUl9UWVBFX0lQX1hJCQkgKDFMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9IRFJfVFlQRV9VRFBfWEkJCSAoM0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfSERSX1RZUEVfREFUQV9YSQkJICg0TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0hEUl9UWVBFX0lDTVBWNl9YSQkJICg2TDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9DT01QX1hJCQkJICgweDNMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfQ09NUF9ORVFVQUxfWEkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfQ09NUF9HUkVBVEVSX1hJCQkgKDJMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0NPTVBfTEVTU19YSQkJCSAoM0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9TQklUX1hJCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9DTURTRUxfWEkJCQkgKDB4MWZMPDwyMCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X01BU0tfWEkJCQkgKDFMPDwyNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X1AxX1hJCQkJICgxTDw8MjcpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOF9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzhfUDNfWEkJCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF84X05CSVRfWEkJCQkgKDFMPDwzMCkKIAogI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzgJCQkweDAwMDAxOTQ0CisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfOF9WQUxVRQkJCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS184X01BU0sJCQkgKDB4ZmZmZkw8PDE2KQorCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOQkJCQkweDAwMDAxOTQ4CiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9BCQkJCSAoMHgzZmZmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9CCQkJCSAoMHhmZmZMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9DTEFTU19YSQkJCSAoMHg3TDw8OCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X1BSSU9SSVRZX1hJCQkJICgxTDw8MTEpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfSERSX1RZUEVfWEkJCQkgKDB4N0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfSERSX1RZUEVfU1RBUlRfWEkJCSAoMEw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfSERSX1RZUEVfVENQX1hJCQkgKDJMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X0hEUl9UWVBFX1VEUF9YSQkJICgzTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X0hEUl9UWVBFX1RDUF9VRFBfWEkJCSAoNUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfSERSX1RZUEVfSUNNUFY2X1hJCQkgKDZMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfQ09NUF9FUVVBTF9YSQkJICgwTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9DT01QX05FUVVBTF9YSQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfQ09NUF9MRVNTX1hJCQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9NQVBfWEkJCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X1NCSVRfWEkJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfRElTQ0FSRF9YSQkJCSAoMUw8PDI1KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfTUFTS19YSQkJCSAoMUw8PDI2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF85X1AyX1hJCQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfOV9QM19YSQkJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzlfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfOQkJCTB4MDAwMDE5NGMKKyNkZWZpbmUgQk5YMl9SUE1fUkNfVkFMVUVfTUFTS185X1ZBTFVFCQkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19WQUxVRV9NQVNLXzlfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMAkJCQkweDAwMDAxOTUwCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0NPTVBfTEVTU19YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMF9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEwX1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTBfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTAJCQkweDAwMDAxOTU0CisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTBfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTBfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMQkJCQkweDAwMDAxOTU4CiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0NPTVBfTEVTU19YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMV9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzExX1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTFfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTEJCQkweDAwMDAxOTVjCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTFfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTFfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMgkJCQkweDAwMDAxOTYwCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0NPTVBfTEVTU19YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMl9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEyX1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTJfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTIJCQkweDAwMDAxOTY0CisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTJfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTJfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xMwkJCQkweDAwMDAxOTY4CiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0NPTVBfTEVTU19YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xM19QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzEzX1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTNfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTMJCQkweDAwMDAxOTZjCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTNfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTNfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNAkJCQkweDAwMDAxOTcwCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0NPTVBfTEVTU19YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNF9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE0X1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTRfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTQJCQkweDAwMDAxOTc0CisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTRfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTRfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNQkJCQkweDAwMDAxOTc4CiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfQQkJCQkgKDB4M2ZmZmZMPDwwKQogI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0IJCQkJICgweGZmZkw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X09GRlNFVF9YSQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfQ0xBU1NfWEkJCQkgKDB4N0w8PDgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfUFJJT1JJVFlfWEkJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9QNF9YSQkJCSAoMUw8PDEyKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0hEUl9UWVBFX1hJCQkJICgweDdMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9IRFJfVFlQRV9TVEFSVF9YSQkJICgwTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfSERSX1RZUEVfSVBfWEkJCSAoMUw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0hEUl9UWVBFX1RDUF9YSQkJICgyTDw8MTMpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfSERSX1RZUEVfVURQX1hJCQkgKDNMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9IRFJfVFlQRV9EQVRBX1hJCQkgKDRMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9IRFJfVFlQRV9UQ1BfVURQX1hJCQkgKDVMPDwxMykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9IRFJfVFlQRV9JQ01QVjZfWEkJCSAoNkw8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0NPTVBfWEkJCQkgKDB4M0w8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0NPTVBfRVFVQUxfWEkJCSAoMEw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0NPTVBfTkVRVUFMX1hJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9DT01QX0dSRUFURVJfWEkJCSAoMkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0NPTVBfTEVTU19YSQkJICgzTDw8MTYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfTUFQX1hJCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfU0JJVF9YSQkJCSAoMUw8PDE5KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0NNRFNFTF9YSQkJCSAoMHgxZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X0RJU0NBUkRfWEkJCQkgKDFMPDwyNSkKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9NQVNLX1hJCQkJICgxTDw8MjYpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfUDFfWEkJCQkgKDFMPDwyNykKKyNkZWZpbmUgQk5YMl9SUE1fUkNfQ05UTF8xNV9QMl9YSQkJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DTlRMXzE1X1AzX1hJCQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX1JDX0NOVExfMTVfTkJJVF9YSQkJCSAoMUw8PDMwKQogCiAjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTUJCQkweDAwMDAxOTdjCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTVfVkFMVUUJCQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX1JDX1ZBTFVFX01BU0tfMTVfTUFTSwkJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ09ORklHCQkJCTB4MDAwMDE5ODAKICNkZWZpbmUgQk5YMl9SUE1fUkNfQ09ORklHX1JVTEVfRU5BQkxFCQkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9SQ19DT05GSUdfUlVMRV9FTkFCTEVfWEkJCSAoMHhmZmZmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlBNX1JDX0NPTkZJR19ERUZfQ0xBU1MJCQkgKDB4N0w8PDI0KQorI2RlZmluZSBCTlgyX1JQTV9SQ19DT05GSUdfS05VTV9PVkVSV1JJVEUJCSAoMUw8PDMxKQogCiAjZGVmaW5lIEJOWDJfUlBNX0RFQlVHMAkJCQkJMHgwMDAwMTk4NAogI2RlZmluZSBCTlgyX1JQTV9ERUJVRzBfRk1fQkNOVAkJCQkgKDB4ZmZmZkw8PDApCkBAIC0yMjM2LDYgKzQwMjYsMTYgQEAKICNkZWZpbmUgQk5YMl9SUE1fREVCVUc5X0lORklGT19PVkVSUlVOX09DQ1VSUkVECQkgKDFMPDwyOSkKICNkZWZpbmUgQk5YMl9SUE1fREVCVUc5X0FDUElfTUFUQ0hfSU5UCQkJICgxTDw8MzApCiAjZGVmaW5lIEJOWDJfUlBNX0RFQlVHOV9BQ1BJX0VOQUJMRV9TWU4JCQkgKDFMPDwzMSkKKyNkZWZpbmUgQk5YMl9SUE1fREVCVUc5X0JFTUVNX1JfWEkJCQkgKDB4MWZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfRU9fWEkJCQkJICgxTDw8NSkKKyNkZWZpbmUgQk5YMl9SUE1fREVCVUc5X0FFT0ZfREVfWEkJCQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfU09fWEkJCQkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9SUE1fREVCVUc5X1dENjRfQ1RfWEkJCQkgKDB4MWZMPDw4KQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfRU9GX1ZMREJZVEVfWEkJCQkgKDB4N0w8PDEzKQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfQUNQSV9SREVfUEFUX0lEX1hJCQkgKDB4Zkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfQ0FMQ1JDX1JFU1VMVF9YSQkJICgweDNmZkw8PDIwKQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfREFUQV9JTl9WTF9YSQkJCSAoMUw8PDMwKQorI2RlZmluZSBCTlgyX1JQTV9ERUJVRzlfQ0FMQ1JDX0JVRkZFUl9WTERfWEkJCSAoMUw8PDMxKQogCiAjZGVmaW5lIEJOWDJfUlBNX0FDUElfREJHX0JVRl9XMDAJCQkweDAwMDAxOWMwCiAjZGVmaW5lIEJOWDJfUlBNX0FDUElfREJHX0JVRl9XMDEJCQkweDAwMDAxOWM0CkBAIC0yMjUzLDYgKzQwNTMsNTYgQEAKICNkZWZpbmUgQk5YMl9SUE1fQUNQSV9EQkdfQlVGX1czMQkJCTB4MDAwMDE5ZjQKICNkZWZpbmUgQk5YMl9SUE1fQUNQSV9EQkdfQlVGX1czMgkJCTB4MDAwMDE5ZjgKICNkZWZpbmUgQk5YMl9SUE1fQUNQSV9EQkdfQlVGX1czMwkJCTB4MDAwMDE5ZmMKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9CWVRFX0VOQUJMRV9DVFJMCQkJMHgwMDAwMWEwMAorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX0JZVEVfRU5BQkxFX0NUUkxfQllURV9BRERSRVNTCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9CWVRFX0VOQUJMRV9DVFJMX0RFQlVHUkQJCSAoMUw8PDI4KQorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX0JZVEVfRU5BQkxFX0NUUkxfTU9ERQkJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfQllURV9FTkFCTEVfQ1RSTF9JTklUCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9CWVRFX0VOQUJMRV9DVFJMX1dSCQkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1RSTAkJCTB4MDAwMDFhMDQKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NUUkxfUEFUVEVSTl9JRAkJICgweGZMPDwwKQorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1RSTF9DUkNfU01fQ0xSCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NUUkxfV1IJCQkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX1JQTV9BQ1BJX0RBVEEJCQkJMHgwMDAwMWEwOAorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX0RBVEFfUEFUVEVSTl9CRQkJCSAoMHhmZmZmZmZmZkw8PDApCisKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0xFTjAJCQkweDAwMDAxYTBjCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9MRU4wX1BBVFRFUk5fTEVOMwkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0xFTjBfUEFUVEVSTl9MRU4yCQkgKDB4ZmZMPDw4KQorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fTEVOMF9QQVRURVJOX0xFTjEJCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fTEVOMF9QQVRURVJOX0xFTjAJCSAoMHhmZkw8PDI0KQorCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9MRU4xCQkJMHgwMDAwMWExMAorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fTEVOMV9QQVRURVJOX0xFTjcJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9MRU4xX1BBVFRFUk5fTEVONgkJICgweGZmTDw8OCkKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0xFTjFfUEFUVEVSTl9MRU41CQkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0xFTjFfUEFUVEVSTl9MRU40CQkgKDB4ZmZMPDwyNCkKKworI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1JDMAkJCTB4MDAwMDFhMTgKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NSQzBfUEFUVEVSTl9DUkMwCQkgKDB4ZmZmZmZmZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9DUkMxCQkJMHgwMDAwMWExYworI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1JDMV9QQVRURVJOX0NSQzEJCSAoMHhmZmZmZmZmZkw8PDApCisKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NSQzIJCQkweDAwMDAxYTIwCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9DUkMyX1BBVFRFUk5fQ1JDMgkJICgweGZmZmZmZmZmTDw8MCkKKworI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1JDMwkJCTB4MDAwMDFhMjQKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NSQzNfUEFUVEVSTl9DUkMzCQkgKDB4ZmZmZmZmZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9DUkM0CQkJMHgwMDAwMWEyOAorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1JDNF9QQVRURVJOX0NSQzQJCSAoMHhmZmZmZmZmZkw8PDApCisKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NSQzUJCQkweDAwMDAxYTJjCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9DUkM1X1BBVFRFUk5fQ1JDNQkJICgweGZmZmZmZmZmTDw8MCkKKworI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1JDNgkJCTB4MDAwMDFhMzAKKyNkZWZpbmUgQk5YMl9SUE1fQUNQSV9QQVRURVJOX0NSQzZfUEFUVEVSTl9DUkM2CQkgKDB4ZmZmZmZmZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfUlBNX0FDUElfUEFUVEVSTl9DUkM3CQkJMHgwMDAwMWEzNAorI2RlZmluZSBCTlgyX1JQTV9BQ1BJX1BBVFRFUk5fQ1JDN19QQVRURVJOX0NSQzcJCSAoMHhmZmZmZmZmZkw8PDApCiAKIAogLyoKQEAgLTIyNjMsMTUgKzQxMTMsMjAgQEAKICNkZWZpbmUgQk5YMl9SQlVGX0NPTU1BTkRfRU5BQkxFRAkJCSAoMUw8PDApCiAjZGVmaW5lIEJOWDJfUkJVRl9DT01NQU5EX0ZSRUVfSU5JVAkJCSAoMUw8PDEpCiAjZGVmaW5lIEJOWDJfUkJVRl9DT01NQU5EX1JBTV9JTklUCQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9SQlVGX0NPTU1BTkRfUEtUX09GRlNFVF9PVkZMCQkgKDFMPDwzKQogI2RlZmluZSBCTlgyX1JCVUZfQ09NTUFORF9PVkVSX0ZSRUUJCQkgKDFMPDw0KQogI2RlZmluZSBCTlgyX1JCVUZfQ09NTUFORF9BTExPQ19SRVEJCQkgKDFMPDw1KQorI2RlZmluZSBCTlgyX1JCVUZfQ09NTUFORF9FTl9QUklfQ0hOR0VfVEUJCSAoMUw8PDYpCisjZGVmaW5lIEJOWDJfUkJVRl9DT01NQU5EX0NVX0lTT0xBVEVfWEkJCQkgKDFMPDw1KQorI2RlZmluZSBCTlgyX1JCVUZfQ09NTUFORF9FTl9QUklfQ0hBTkdFX1hJCQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX1JCVUZfQ09NTUFORF9HUkNfRU5ESUFOX0NPTlZfRElTX1hJCSAoMUw8PDcpCiAKICNkZWZpbmUgQk5YMl9SQlVGX1NUQVRVUzEJCQkJMHgwMDIwMDAwNAogI2RlZmluZSBCTlgyX1JCVUZfU1RBVFVTMV9GUkVFX0NPVU5UCQkJICgweDNmZkw8PDApCiAKICNkZWZpbmUgQk5YMl9SQlVGX1NUQVRVUzIJCQkJMHgwMDIwMDAwOAotI2RlZmluZSBCTlgyX1JCVUZfU1RBVFVTMl9GUkVFX1RBSUwJCQkgKDB4M2ZmTDw8MCkKLSNkZWZpbmUgQk5YMl9SQlVGX1NUQVRVUzJfRlJFRV9IRUFECQkJICgweDNmZkw8PDE2KQorI2RlZmluZSBCTlgyX1JCVUZfU1RBVFVTMl9GUkVFX1RBSUwJCQkgKDB4MWZmTDw8MCkKKyNkZWZpbmUgQk5YMl9SQlVGX1NUQVRVUzJfRlJFRV9IRUFECQkJICgweDFmZkw8PDE2KQogCiAjZGVmaW5lIEJOWDJfUkJVRl9DT05GSUcJCQkJMHgwMDIwMDAwYwogI2RlZmluZSBCTlgyX1JCVUZfQ09ORklHX1hPRkZfVFJJUAkJCSAoMHgzZmZMPDwwKQpAQCAtMjI3OSwxNiArNDEzNCwyMSBAQAogCiAjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfQUxMT0MJCQkJMHgwMDIwMDAxMAogI2RlZmluZSBCTlgyX1JCVUZfRldfQlVGX0FMTE9DX1ZBTFVFCQkJICgweDFmZkw8PDcpCisjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfQUxMT0NfVFlQRQkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX1JCVUZfRldfQlVGX0FMTE9DX0FMTE9DX1JFUQkJICgxTDw8MzEpCiAKICNkZWZpbmUgQk5YMl9SQlVGX0ZXX0JVRl9GUkVFCQkJCTB4MDAyMDAwMTQKICNkZWZpbmUgQk5YMl9SQlVGX0ZXX0JVRl9GUkVFX0NPVU5UCQkJICgweDdmTDw8MCkKICNkZWZpbmUgQk5YMl9SQlVGX0ZXX0JVRl9GUkVFX1RBSUwJCQkgKDB4MWZmTDw8NykKICNkZWZpbmUgQk5YMl9SQlVGX0ZXX0JVRl9GUkVFX0hFQUQJCQkgKDB4MWZmTDw8MTYpCisjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfRlJFRV9UWVBFCQkJICgxTDw8MjUpCisjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfRlJFRV9GUkVFX1JFUQkJCSAoMUw8PDMxKQogCiAjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfU0VMCQkJCTB4MDAyMDAwMTgKICNkZWZpbmUgQk5YMl9SQlVGX0ZXX0JVRl9TRUxfQ09VTlQJCQkgKDB4N2ZMPDwwKQogI2RlZmluZSBCTlgyX1JCVUZfRldfQlVGX1NFTF9UQUlMCQkJICgweDFmZkw8PDcpCiAjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfU0VMX0hFQUQJCQkgKDB4MWZmTDw8MTYpCisjZGVmaW5lIEJOWDJfUkJVRl9GV19CVUZfU0VMX1NFTF9SRVEJCQkgKDFMPDwzMSkKIAogI2RlZmluZSBCTlgyX1JCVUZfQ09ORklHMgkJCQkweDAwMjAwMDFjCiAjZGVmaW5lIEJOWDJfUkJVRl9DT05GSUcyX01BQ19EUk9QX1RSSVAJCQkgKDB4M2ZmTDw8MCkKQEAgLTIzNzYsNiArNDIzNiw4IEBACiAjZGVmaW5lIEJOWDJfUlYyUF9JTlNUUl9ISUdIX0hJR0gJCQkgKDB4MWZMPDwwKQogCiAjZGVmaW5lIEJOWDJfUlYyUF9JTlNUUl9MT1cJCQkJMHgwMDAwMjgzNAorI2RlZmluZSBCTlgyX1JWMlBfSU5TVFJfTE9XX0xPVwkJCQkgKDB4ZmZmZmZmZmZMPDwwKQorCiAjZGVmaW5lIEJOWDJfUlYyUF9QUk9DMV9BRERSX0NNRAkJCTB4MDAwMDI4MzgKICNkZWZpbmUgQk5YMl9SVjJQX1BST0MxX0FERFJfQ01EX0FERAkJCSAoMHgzZmZMPDwwKQogI2RlZmluZSBCTlgyX1JWMlBfUFJPQzFfQUREUl9DTURfUkRXUgkJCSAoMUw8PDMxKQpAQCAtMjM5NSw3ICs0MjU3LDI5IEBACiAjZGVmaW5lIEJOWDJfUlYyUF9ERUJVR19WRUNUX1BFRUtfMl9QRUVLX0VOCQkgKDFMPDwyNykKICNkZWZpbmUgQk5YMl9SVjJQX0RFQlVHX1ZFQ1RfUEVFS18yX1NFTAkJCSAoMHhmTDw8MjgpCiAKLSNkZWZpbmUgQk5YMl9SVjJQX1BGVFFfREFUQQkJCQkweDAwMDAyYjQwCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVEwJCQkJMHgwMDAwMmFmYworI2RlZmluZSBCTlgyX1JWMlBfTVBGRV9QRkVfQ1RMX0lOQ19VU0FHRV9DTlQJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkUJCQkgKDB4Zkw8PDQpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkVfMAkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9SVjJQX01QRkVfUEZFX0NUTF9QRkVfU0laRV8xCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX1JWMlBfTVBGRV9QRkVfQ1RMX1BGRV9TSVpFXzIJCSAoMkw8PDQpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkVfMwkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9SVjJQX01QRkVfUEZFX0NUTF9QRkVfU0laRV80CQkgKDRMPDw0KQorI2RlZmluZSBCTlgyX1JWMlBfTVBGRV9QRkVfQ1RMX1BGRV9TSVpFXzUJCSAoNUw8PDQpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkVfNgkJICg2TDw8NCkKKyNkZWZpbmUgQk5YMl9SVjJQX01QRkVfUEZFX0NUTF9QRkVfU0laRV83CQkgKDdMPDw0KQorI2RlZmluZSBCTlgyX1JWMlBfTVBGRV9QRkVfQ1RMX1BGRV9TSVpFXzgJCSAoOEw8PDQpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkVfOQkJICg5TDw8NCkKKyNkZWZpbmUgQk5YMl9SVjJQX01QRkVfUEZFX0NUTF9QRkVfU0laRV8xMAkJICgxMEw8PDQpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkVfMTEJCSAoMTFMPDw0KQorI2RlZmluZSBCTlgyX1JWMlBfTVBGRV9QRkVfQ1RMX1BGRV9TSVpFXzEyCQkgKDEyTDw8NCkKKyNkZWZpbmUgQk5YMl9SVjJQX01QRkVfUEZFX0NUTF9QRkVfU0laRV8xMwkJICgxM0w8PDQpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfUEZFX1NJWkVfMTQJCSAoMTRMPDw0KQorI2RlZmluZSBCTlgyX1JWMlBfTVBGRV9QRkVfQ1RMX1BGRV9TSVpFXzE1CQkgKDE1TDw8NCkKKyNkZWZpbmUgQk5YMl9SVjJQX01QRkVfUEZFX0NUTF9QRkVfQ09VTlQJCSAoMHhmTDw8MTIpCisjZGVmaW5lIEJOWDJfUlYyUF9NUEZFX1BGRV9DVExfT0ZGU0VUCQkJICgweDFmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfUlYyUF9SVjJQUFEJCQkJMHgwMDAwMmI0MAogI2RlZmluZSBCTlgyX1JWMlBfUEZUUV9DTUQJCQkJMHgwMDAwMmI3OAogI2RlZmluZSBCTlgyX1JWMlBfUEZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlYyUF9QRlRRX0NNRF9XUl9UT1AJCQkgKDFMPDwxMCkKQEAgLTI0MTYsNyArNDMwMCw3IEBACiAjZGVmaW5lIEJOWDJfUlYyUF9QRlRRX0NUTF9NQVhfREVQVEgJCQkgKDB4M2ZmTDw8MTIpCiAjZGVmaW5lIEJOWDJfUlYyUF9QRlRRX0NUTF9DVVJfREVQVEgJCQkgKDB4M2ZmTDw8MjIpCiAKLSNkZWZpbmUgQk5YMl9SVjJQX1RGVFFfREFUQQkJCQkweDAwMDAyYjgwCisjZGVmaW5lIEJOWDJfUlYyUF9SVjJQVFEJCQkJMHgwMDAwMmI4MAogI2RlZmluZSBCTlgyX1JWMlBfVEZUUV9DTUQJCQkJMHgwMDAwMmJiOAogI2RlZmluZSBCTlgyX1JWMlBfVEZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlYyUF9URlRRX0NNRF9XUl9UT1AJCQkgKDFMPDwxMCkKQEAgLTI0MzcsNyArNDMyMSw3IEBACiAjZGVmaW5lIEJOWDJfUlYyUF9URlRRX0NUTF9NQVhfREVQVEgJCQkgKDB4M2ZmTDw8MTIpCiAjZGVmaW5lIEJOWDJfUlYyUF9URlRRX0NUTF9DVVJfREVQVEgJCQkgKDB4M2ZmTDw8MjIpCiAKLSNkZWZpbmUgQk5YMl9SVjJQX01GVFFfREFUQQkJCQkweDAwMDAyYmMwCisjZGVmaW5lIEJOWDJfUlYyUF9SVjJQTVEJCQkJMHgwMDAwMmJjMAogI2RlZmluZSBCTlgyX1JWMlBfTUZUUV9DTUQJCQkJMHgwMDAwMmJmOAogI2RlZmluZSBCTlgyX1JWMlBfTUZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlYyUF9NRlRRX0NNRF9XUl9UT1AJCQkgKDFMPDwxMCkKQEAgLTI0NjYsMTggKzQzNTAsMjYgQEAKICAqLwogI2RlZmluZSBCTlgyX01RX0NPTU1BTkQJCQkJCTB4MDAwMDNjMDAKICNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX0VOQUJMRUQJCQkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX0lOSVQJCQkJICgxTDw8MSkKICNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX09WRVJGTE9XCQkJICgxTDw8NCkKICNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX1dSX0VSUk9SCQkJICgxTDw8NSkKICNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX1JEX0VSUk9SCQkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX0lEQl9DRkdfRVJST1IJCQkgKDFMPDw3KQorI2RlZmluZSBCTlgyX01RX0NPTU1BTkRfSURCX09WRVJGTE9XCQkJICgxTDw8MTApCisjZGVmaW5lIEJOWDJfTVFfQ09NTUFORF9OT19CSU5fRVJST1IJCQkgKDFMPDwxMSkKKyNkZWZpbmUgQk5YMl9NUV9DT01NQU5EX05PX01BUF9FUlJPUgkJCSAoMUw8PDEyKQogCiAjZGVmaW5lIEJOWDJfTVFfU1RBVFVTCQkJCQkweDAwMDAzYzA0CiAjZGVmaW5lIEJOWDJfTVFfU1RBVFVTX0NUWF9BQ0NFU1NfU1RBVAkJCSAoMUw8PDE2KQogI2RlZmluZSBCTlgyX01RX1NUQVRVU19DVFhfQUNDRVNTNjRfU1RBVAkJICgxTDw8MTcpCiAjZGVmaW5lIEJOWDJfTVFfU1RBVFVTX1BDSV9TVEFMTF9TVEFUCQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfTVFfU1RBVFVTX0lEQl9PRkxPV19TVEFUCQkJICgxTDw8MTkpCiAKICNkZWZpbmUgQk5YMl9NUV9DT05GSUcJCQkJCTB4MDAwMDNjMDgKICNkZWZpbmUgQk5YMl9NUV9DT05GSUdfVFhfSElHSF9QUkkJCQkgKDFMPDwwKQogI2RlZmluZSBCTlgyX01RX0NPTkZJR19IQUxUX0RJUwkJCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX01RX0NPTkZJR19CSU5fTVFfTU9ERQkJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfTVFfQ09ORklHX0RJU19JREJfRFJPUAkJCSAoMUw8PDMpCiAjZGVmaW5lIEJOWDJfTVFfQ09ORklHX0tOTF9CWVBfQkxLX1NJWkUJCQkgKDB4N0w8PDQpCiAjZGVmaW5lIEJOWDJfTVFfQ09ORklHX0tOTF9CWVBfQkxLX1NJWkVfMjU2CQkgKDBMPDw0KQogI2RlZmluZSBCTlgyX01RX0NPTkZJR19LTkxfQllQX0JMS19TSVpFXzUxMgkJICgxTDw8NCkKQEAgLTI1MzMsNiArNDQyNSw3IEBACiAKICNkZWZpbmUgQk5YMl9NUV9NRU1fV1JfREFUQTIJCQkJMHgwMDAwM2M4MAogI2RlZmluZSBCTlgyX01RX01FTV9XUl9EQVRBMl9WQUxVRQkJCSAoMHgzZmZmZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfTVFfTUVNX1dSX0RBVEEyX1ZBTFVFX1hJCQkJICgweDdmZmZmZmZmTDw8MCkKIAogI2RlZmluZSBCTlgyX01RX01FTV9SRF9BRERSCQkJCTB4MDAwMDNjODQKICNkZWZpbmUgQk5YMl9NUV9NRU1fUkRfQUREUl9WQUxVRQkJCSAoMHgzZkw8PDApCkBAIC0yNTQ1LDYgKzQ0MzgsMTYgQEAKIAogI2RlZmluZSBCTlgyX01RX01FTV9SRF9EQVRBMgkJCQkweDAwMDAzYzkwCiAjZGVmaW5lIEJOWDJfTVFfTUVNX1JEX0RBVEEyX1ZBTFVFCQkJICgweDNmZmZmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9NUV9NRU1fUkRfREFUQTJfVkFMVUVfWEkJCQkgKDB4N2ZmZmZmZmZMPDwwKQorCisKKy8qCisgKiAgdHNjaF9yZWcgZGVmaW5pdGlvbgorICogIG9mZnNldDogMHg0YzAwCisgKi8KKyNkZWZpbmUgQk5YMl9UU0NIX1RTU19DRkcJCQkJMHgwMDAwNGMxYworI2RlZmluZSBCTlgyX1RTQ0hfVFNTX0NGR19UU1NfU1RBUlRfQ0lECQkJICgweDdmZkw8PDgpCisjZGVmaW5lIEJOWDJfVFNDSF9UU1NfQ0ZHX05VTV9PRl9UU1NfQ09OCQkgKDB4Zkw8PDI0KQogCiAKIApAQCAtMjU5NCw3ICs0NDk3LDExIEBACiAjZGVmaW5lIEJOWDJfVEJEUl9ERUJVR19WRUNUX1BFRUtfMl9QRUVLX0VOCQkgKDFMPDwyNykKICNkZWZpbmUgQk5YMl9UQkRSX0RFQlVHX1ZFQ1RfUEVFS18yX1NFTAkJCSAoMHhmTDw8MjgpCiAKLSNkZWZpbmUgQk5YMl9UQkRSX0ZUUV9EQVRBCQkJCTB4MDAwMDUzYzAKKyNkZWZpbmUgQk5YMl9UQkRSX0NLU1VNX0VSUk9SX1NUQVRVUwkJCTB4MDAwMDUwMTAKKyNkZWZpbmUgQk5YMl9UQkRSX0NLU1VNX0VSUk9SX1NUQVRVU19DQUxDVUxBVEVECQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfVEJEUl9DS1NVTV9FUlJPUl9TVEFUVVNfRVhQRUNURUQJCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9UQkRSX1RCRFJRCQkJCQkweDAwMDA1M2MwCiAjZGVmaW5lIEJOWDJfVEJEUl9GVFFfQ01ECQkJCTB4MDAwMDUzZjgKICNkZWZpbmUgQk5YMl9UQkRSX0ZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfVEJEUl9GVFFfQ01EX1dSX1RPUAkJCSAoMUw8PDEwKQpAQCAtMjYyNCw3ICs0NTMxLDE1IEBACiAjZGVmaW5lIEJOWDJfVERNQV9DT01NQU5ECQkJCTB4MDAwMDVjMDAKICNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfRU5BQkxFRAkJCSAoMUw8PDApCiAjZGVmaW5lIEJOWDJfVERNQV9DT01NQU5EX01BU1RFUl9BQk9SVAkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfVERNQV9DT01NQU5EX0NTMTZfRVJSCQkJICgxTDw8NSkKICNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfQkFEX0wyX0xFTkdUSF9BQk9SVAkJICgxTDw8NykKKyNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfTUFTS19DUzEJCQkgKDFMPDwyMCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfTUFTS19DUzIJCQkgKDFMPDwyMSkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfTUFTS19DUzMJCQkgKDFMPDwyMikKKyNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfTUFTS19DUzQJCQkgKDFMPDwyMykKKyNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfRk9SQ0VfSUxPQ0tfQ0tFUlIJCSAoMUw8PDI0KQorI2RlZmluZSBCTlgyX1RETUFfQ09NTUFORF9PRklGT19DTFIJCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTU1BTkRfSUZJRk9fQ0xSCQkJICgxTDw8MzEpCiAKICNkZWZpbmUgQk5YMl9URE1BX1NUQVRVUwkJCQkweDAwMDA1YzA0CiAjZGVmaW5lIEJOWDJfVERNQV9TVEFUVVNfRE1BX1dBSVQJCQkgKDFMPDwwKQpAQCAtMjYzMywxMCArNDU0OCwxOCBAQAogI2RlZmluZSBCTlgyX1RETUFfU1RBVFVTX0xPQ0tfV0FJVAkJCSAoMUw8PDMpCiAjZGVmaW5lIEJOWDJfVERNQV9TVEFUVVNfRlRRX0VOVFJZX0NOVAkJCSAoMUw8PDE2KQogI2RlZmluZSBCTlgyX1RETUFfU1RBVFVTX0JVUlNUX0NOVAkJCSAoMUw8PDE3KQorI2RlZmluZSBCTlgyX1RETUFfU1RBVFVTX01BWF9JRklGT19ERVBUSAkJICgweDNmTDw8MjApCisjZGVmaW5lIEJOWDJfVERNQV9TVEFUVVNfT0ZJRk9fT1ZFUkZMT1cJCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9URE1BX1NUQVRVU19JRklGT19PVkVSRkxPVwkJCSAoMUw8PDMxKQogCiAjZGVmaW5lIEJOWDJfVERNQV9DT05GSUcJCQkJMHgwMDAwNWMwOAogI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX09ORV9ETUEJCQkgKDFMPDwwKQogI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX09ORV9SRUNPUkQJCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX05VTV9ETUFfQ0hBTgkJCSAoMHgzTDw8MikKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19OVU1fRE1BX0NIQU5fMAkJCSAoMEw8PDIpCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfTlVNX0RNQV9DSEFOXzEJCQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX05VTV9ETUFfQ0hBTl8yCQkJICgyTDw8MikKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19OVU1fRE1BX0NIQU5fMwkJCSAoM0w8PDIpCiAjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfTElNSVRfU1oJCQkgKDB4Zkw8PDQpCiAjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfTElNSVRfU1pfNjQJCQkgKDBMPDw0KQogI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0xJTUlUX1NaXzEyOAkJCSAoMHg0TDw8NCkKQEAgLTI2NDksNyArNDU3MiwzNSBAQAogI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0xJTkVfU1pfNTEyCQkJICg4TDw8OCkKICNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19BTElHTl9FTkEJCQkgKDFMPDwxNSkKICNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19DSEtfTDJfQkQJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19DTVBMX0VOVFJZCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfT0ZJRk9fQ01QCQkJICgxTDw8MTkpCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfT0ZJRk9fQ01QXzMJCQkgKDBMPDwxOSkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19PRklGT19DTVBfMgkJCSAoMUw8PDE5KQogI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0ZJRk9fQ01QCQkJICgweGZMPDwyMCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19JRklGT19ERVBUSF9YSQkJCSAoMHg3TDw8MjApCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfSUZJRk9fREVQVEhfMF9YSQkJICgwTDw8MjApCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfSUZJRk9fREVQVEhfNF9YSQkJICgxTDw8MjApCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfSUZJRk9fREVQVEhfOF9YSQkJICgyTDw8MjApCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfSUZJRk9fREVQVEhfMTZfWEkJCSAoM0w8PDIwKQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0lGSUZPX0RFUFRIXzMyX1hJCQkgKDRMPDwyMCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19JRklGT19ERVBUSF82NF9YSQkJICg1TDw8MjApCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfRklGT19DTVBfRU5fWEkJCQkgKDFMPDwyMykKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19CWVRFU19PU1RfWEkJCQkgKDB4N0w8PDI0KQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0JZVEVTX09TVF81MTJfWEkJCSAoMEw8PDI0KQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0JZVEVTX09TVF8xMDI0X1hJCQkgKDFMPDwyNCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19CWVRFU19PU1RfMjA0OF9YSQkJICgyTDw8MjQpCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfQllURVNfT1NUXzQwOTZfWEkJCSAoM0w8PDI0KQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0JZVEVTX09TVF84MTkyX1hJCQkgKDRMPDwyNCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19CWVRFU19PU1RfMTYzODRfWEkJCSAoNUw8PDI0KQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0hDX0JZUEFTU19YSQkJCSAoMUw8PDI3KQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0xDTF9NUlJTX1hJCQkJICgweDdMPDwyOCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19MQ0xfTVJSU18xMjhfWEkJCSAoMEw8PDI4KQorI2RlZmluZSBCTlgyX1RETUFfQ09ORklHX0xDTF9NUlJTXzI1Nl9YSQkJICgxTDw8MjgpCisjZGVmaW5lIEJOWDJfVERNQV9DT05GSUdfTENMX01SUlNfNTEyX1hJCQkgKDJMPDwyOCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19MQ0xfTVJSU18xMDI0X1hJCQkgKDNMPDwyOCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19MQ0xfTVJSU18yMDQ4X1hJCQkgKDRMPDwyOCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19MQ0xfTVJSU180MDk2X1hJCQkgKDVMPDwyOCkKKyNkZWZpbmUgQk5YMl9URE1BX0NPTkZJR19MQ0xfTVJSU19FTl9YSQkJCSAoMUw8PDMxKQogCiAjZGVmaW5lIEJOWDJfVERNQV9QQVlMT0FEX1BST0QJCQkJMHgwMDAwNWMwYwogI2RlZmluZSBCTlgyX1RETUFfUEFZTE9BRF9QUk9EX1ZBTFVFCQkJICgweDFmZmZMPDwzKQpAQCAtMjY4NSw3ICs0NjM2LDIyIEBACiAjZGVmaW5lIEJOWDJfVERNQV9EUl9JTlRGX1NUQVRVU19OWFRfUE5UUgkJICgweGZMPDwxMikKICNkZWZpbmUgQk5YMl9URE1BX0RSX0lOVEZfU1RBVFVTX0JZVEVfQ09VTlQJCSAoMHg3TDw8MTYpCiAKLSNkZWZpbmUgQk5YMl9URE1BX0ZUUV9EQVRBCQkJCTB4MDAwMDVmYzAKKyNkZWZpbmUgQk5YMl9URE1BX1BVU0hfRlNNCQkJCTB4MDAwMDVjOTAKKyNkZWZpbmUgQk5YMl9URE1BX0JEX0lGX0RFQlVHCQkJCTB4MDAwMDVjOTQKKyNkZWZpbmUgQk5YMl9URE1BX0RNQURfSUZfREVCVUcJCQkJMHgwMDAwNWM5OAorI2RlZmluZSBCTlgyX1RETUFfQ1RYX0lGX0RFQlVHCQkJCTB4MDAwMDVjOWMKKyNkZWZpbmUgQk5YMl9URE1BX1RQQlVGX0lGX0RFQlVHCQkJMHgwMDAwNWNhMAorI2RlZmluZSBCTlgyX1RETUFfRFJfSUZfREVCVUcJCQkJMHgwMDAwNWNhNAorI2RlZmluZSBCTlgyX1RETUFfVFBBVFFfSUZfREVCVUcJCQkweDAwMDA1Y2E4CisjZGVmaW5lIEJOWDJfVERNQV9URE1BX0lMT0NLX0NLU1VNCQkJMHgwMDAwNWNhYworI2RlZmluZSBCTlgyX1RETUFfVERNQV9JTE9DS19DS1NVTV9DQUxDVUxBVEVECQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfVERNQV9URE1BX0lMT0NLX0NLU1VNX0VYUEVDVEVECQkgKDB4ZmZmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfVERNQV9URE1BX1BDSUVfQ0tTVU0JCQkweDAwMDA1Y2IwCisjZGVmaW5lIEJOWDJfVERNQV9URE1BX1BDSUVfQ0tTVU1fQ0FMQ1VMQVRFRAkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX1RETUFfVERNQV9QQ0lFX0NLU1VNX0VYUEVDVEVECQkgKDB4ZmZmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfVERNQV9URE1BUQkJCQkJMHgwMDAwNWZjMAogI2RlZmluZSBCTlgyX1RETUFfRlRRX0NNRAkJCQkweDAwMDA1ZmY4CiAjZGVmaW5lIEJOWDJfVERNQV9GVFFfQ01EX09GRlNFVAkJCSAoMHgzZmZMPDwwKQogI2RlZmluZSBCTlgyX1RETUFfRlRRX0NNRF9XUl9UT1AJCQkgKDFMPDwxMCkKQEAgLTI3MjQsNiArNDY5MCw4IEBACiAjZGVmaW5lIEJOWDJfSENfQ09NTUFORF9GT1JDRV9JTlRfTE9XCQkJICgyTDw8MTkpCiAjZGVmaW5lIEJOWDJfSENfQ09NTUFORF9GT1JDRV9JTlRfRlJFRQkJCSAoM0w8PDE5KQogI2RlZmluZSBCTlgyX0hDX0NPTU1BTkRfQ0xSX1NUQVRfTk9XCQkJICgxTDw8MjEpCisjZGVmaW5lIEJOWDJfSENfQ09NTUFORF9NQUlOX1BXUl9JTlQJCQkgKDFMPDwyMikKKyNkZWZpbmUgQk5YMl9IQ19DT01NQU5EX0NPQUxfT05fTkVYVF9FVkVOVAkJICgxTDw8MjcpCiAKICNkZWZpbmUgQk5YMl9IQ19TVEFUVVMJCQkJCTB4MDAwMDY4MDQKICNkZWZpbmUgQk5YMl9IQ19TVEFUVVNfTUFTVEVSX0FCT1JUCQkJICgxTDw8MCkKQEAgLTI3NDYsNiArNDcxNCwyMyBAQAogI2RlZmluZSBCTlgyX0hDX0NPTkZJR19TVEFUSVNUSUNfUFJJT1JJVFkJCSAoMUw8PDUpCiAjZGVmaW5lIEJOWDJfSENfQ09ORklHX1NUQVRVU19QUklPUklUWQkJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfSENfQ09ORklHX1NUQVRfTUVNX0FERFIJCQkgKDB4ZmZMPDw4KQorI2RlZmluZSBCTlgyX0hDX0NPTkZJR19QRVJfTU9ERQkJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfT05FX1NIT1QJCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfSENfQ09ORklHX1VTRV9JTlRfUEFSQU0JCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfU0VUX01BU0tfQVRfUkQJCQkgKDFMPDwxOSkKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfUEVSX0NPTExFQ1RfTElNSVQJCSAoMHhmTDw8MjApCisjZGVmaW5lIEJOWDJfSENfQ09ORklHX1NCX0FERFJfSU5DCQkJICgweDdMPDwyNCkKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfU0JfQUREUl9JTkNfNjRCCQkJICgwTDw8MjQpCisjZGVmaW5lIEJOWDJfSENfQ09ORklHX1NCX0FERFJfSU5DXzEyOEIJCQkgKDFMPDwyNCkKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfU0JfQUREUl9JTkNfMjU2QgkJCSAoMkw8PDI0KQorI2RlZmluZSBCTlgyX0hDX0NPTkZJR19TQl9BRERSX0lOQ181MTJCCQkJICgzTDw8MjQpCisjZGVmaW5lIEJOWDJfSENfQ09ORklHX1NCX0FERFJfSU5DXzEwMjRCCQkgKDRMPDwyNCkKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfU0JfQUREUl9JTkNfMjA0OEIJCSAoNUw8PDI0KQorI2RlZmluZSBCTlgyX0hDX0NPTkZJR19TQl9BRERSX0lOQ180MDk2QgkJICg2TDw8MjQpCisjZGVmaW5lIEJOWDJfSENfQ09ORklHX1NCX0FERFJfSU5DXzgxOTJCCQkgKDdMPDwyNCkKKyNkZWZpbmUgQk5YMl9IQ19DT05GSUdfR0VOX1NUQVRfQVZHX0lOVFIJCSAoMUw8PDI5KQorI2RlZmluZSBCTlgyX0hDX0NPTkZJR19VTk1BU0tfQUxMCQkJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfSENfQ09ORklHX1RYX1NFTAkJCQkgKDFMPDwzMSkKIAogI2RlZmluZSBCTlgyX0hDX0FUVE5fQklUU19FTkFCTEUJCQkweDAwMDA2ODBjCiAjZGVmaW5lIEJOWDJfSENfU1RBVFVTX0FERFJfTAkJCQkweDAwMDA2ODEwCkBAIC0yNzgyLDYgKzQ3NjcsNyBAQAogCiAjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1MJCQkJMHgwMDAwNjgzYwogI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTX0hDX1BFUklPRElDX1RJQ0tTCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU19IQ19JTlRfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwxNikKIAogI2RlZmluZSBCTlgyX0hDX1NUQVRfQ09MTEVDVF9USUNLUwkJCTB4MDAwMDY4NDAKICNkZWZpbmUgQk5YMl9IQ19TVEFUX0NPTExFQ1RfVElDS1NfSENfU1RBVF9DT0xMX1RJQ0tTCSAoMHhmZkw8PDQpCkBAIC0yNzg5LDYgKzQ3NzUsMTAgQEAKICNkZWZpbmUgQk5YMl9IQ19TVEFUU19USUNLUwkJCQkweDAwMDA2ODQ0CiAjZGVmaW5lIEJOWDJfSENfU1RBVFNfVElDS1NfSENfU1RBVF9USUNLUwkJICgweGZmZmZMPDw4KQogCisjZGVmaW5lIEJOWDJfSENfU1RBVFNfSU5URVJSVVBUX1NUQVRVUwkJCTB4MDAwMDY4NDgKKyNkZWZpbmUgQk5YMl9IQ19TVEFUU19JTlRFUlJVUFRfU1RBVFVTX1NCX1NUQVRVUwkgKDB4MWZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUU19JTlRFUlJVUFRfU1RBVFVTX0lOVF9TVEFUVVMJICgweDFmZkw8PDE2KQorCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9NRU1fREFUQQkJCQkweDAwMDA2ODRjCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzAJCQkJMHgwMDAwNjg1MAogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMAkJICgweDdmTDw8MCkKQEAgLTI5MTcsMjQgKzQ5MDcsMTA4IEBACiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8xCQkgKDB4N2ZMPDw4KQogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMgkJICgweDdmTDw8MTYpCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8zCQkgKDB4N2ZMPDwyNCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfWEkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1VNUF9SWF9GUkFNRV9EUk9QX1hJCSAoNTJMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9VTlVTRURfUzBfWEkJICg1N0w8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1VOVVNFRF9TMV9YSQkgKDU4TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfVU5VU0VEX1MyX1hJCSAoODVMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9VTlVTRURfUzNfWEkJICg4Nkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1VOVVNFRF9TNF9YSQkgKDg3TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfVU5VU0VEX1M1X1hJCSAoODhMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9VTlVTRURfUzZfWEkJICg4OUw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1VOVVNFRF9TN19YSQkgKDkwTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfVU5VU0VEX1M4X1hJCSAoOTFMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9VTlVTRURfUzlfWEkJICg5Mkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1VOVVNFRF9TMTBfWEkJICg5M0w8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX01RX0lEQl9PRkxPV19YSQkgKDk0TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfQ1RYX0JMS19SRF9DTlRfWEkJICgxMjNMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9DVFhfQkxLX1dSX0NOVF9YSQkgKDEyNEw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0NUWF9ISVRTX1hJCSAoMTI1TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfQ1RYX01JU1NFU19YSQkgKDEyNkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9TVEFUVVNfQkxPQ0tTX1ZFQzFfWEkJICgxMjhMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fSU5UX0dFTl9WRUMxX1hJCSAoMTI5TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX0lOVF9NQk9YX1dSX1ZFQzFfWEkJICgxMzBMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfVE9fSFdfSU5UQUNLX1ZFQzFfWEkJICgxMzFMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfVE9fU1dfSU5UQUNLX1ZFQzFfWEkJICgxMzJMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfRFVSSU5HX1NXX0lOVEFDS19WRUMxX1hJCSAoMTMzTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX1NUQVRVU19CTE9DS1NfVkVDMl9YSQkgKDEzNEw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9JTlRfR0VOX1ZFQzJfWEkJICgxMzVMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fSU5UX01CT1hfV1JfVkVDMl9YSQkgKDEzNkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19UT19IV19JTlRBQ0tfVkVDMl9YSQkgKDEzN0w8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19UT19TV19JTlRBQ0tfVkVDMl9YSQkgKDEzOEw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19EVVJJTkdfU1dfSU5UQUNLX1ZFQzJfWEkJICgxMzlMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fU1RBVFVTX0JMT0NLU19WRUMzX1hJCSAoMTQwTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX0lOVF9HRU5fVkVDM19YSQkgKDE0MUw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9JTlRfTUJPWF9XUl9WRUMzX1hJCSAoMTQyTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfQ09SRV9DTEtTX1RPX0hXX0lOVEFDS19WRUMzX1hJCSAoMTQzTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfQ09SRV9DTEtTX1RPX1NXX0lOVEFDS19WRUMzX1hJCSAoMTQ0TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfQ09SRV9DTEtTX0RVUklOR19TV19JTlRBQ0tfVkVDM19YSQkgKDE0NUw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9TVEFUVVNfQkxPQ0tTX1ZFQzRfWEkJICgxNDZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fSU5UX0dFTl9WRUM0X1hJCSAoMTQ3TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX0lOVF9NQk9YX1dSX1ZFQzRfWEkJICgxNDhMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfVE9fSFdfSU5UQUNLX1ZFQzRfWEkJICgxNDlMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfVE9fU1dfSU5UQUNLX1ZFQzRfWEkJICgxNTBMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfRFVSSU5HX1NXX0lOVEFDS19WRUM0X1hJCSAoMTUxTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX1NUQVRVU19CTE9DS1NfVkVDNV9YSQkgKDE1Mkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9JTlRfR0VOX1ZFQzVfWEkJICgxNTNMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fSU5UX01CT1hfV1JfVkVDNV9YSQkgKDE1NEw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19UT19IV19JTlRBQ0tfVkVDNV9YSQkgKDE1NUw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19UT19TV19JTlRBQ0tfVkVDNV9YSQkgKDE1Nkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19EVVJJTkdfU1dfSU5UQUNLX1ZFQzVfWEkJICgxNTdMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fU1RBVFVTX0JMT0NLU19WRUM2X1hJCSAoMTU4TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX0lOVF9HRU5fVkVDNl9YSQkgKDE1OUw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9JTlRfTUJPWF9XUl9WRUM2X1hJCSAoMTYwTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfQ09SRV9DTEtTX1RPX0hXX0lOVEFDS19WRUM2X1hJCSAoMTYxTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfQ09SRV9DTEtTX1RPX1NXX0lOVEFDS19WRUM2X1hJCSAoMTYyTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfQ09SRV9DTEtTX0RVUklOR19TV19JTlRBQ0tfVkVDNl9YSQkgKDE2M0w8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9TVEFUVVNfQkxPQ0tTX1ZFQzdfWEkJICgxNjRMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fSU5UX0dFTl9WRUM3X1hJCSAoMTY1TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX0lOVF9NQk9YX1dSX1ZFQzdfWEkJICgxNjZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfVE9fSFdfSU5UQUNLX1ZFQzdfWEkJICgxNjdMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfVE9fU1dfSU5UQUNLX1ZFQzdfWEkJICgxNjhMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19DT1JFX0NMS1NfRFVSSU5HX1NXX0lOVEFDS19WRUM3X1hJCSAoMTY5TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzBfSENfTlVNX1NUQVRVU19CTE9DS1NfVkVDOF9YSQkgKDE3MEw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX05VTV9JTlRfR0VOX1ZFQzhfWEkJICgxNzFMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9IQ19OVU1fSU5UX01CT1hfV1JfVkVDOF9YSQkgKDE3Mkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19UT19IV19JTlRBQ0tfVkVDOF9YSQkgKDE3M0w8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19UT19TV19JTlRBQ0tfVkVDOF9YSQkgKDE3NEw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX0hDX0NPUkVfQ0xLU19EVVJJTkdfU1dfSU5UQUNLX1ZFQzhfWEkJICgxNzVMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8wX0dFTl9TRUxfMF9SVjJQQ1NfQ01EX0NOVF9YSQkgKDE3Nkw8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1JWMlBDU19TTE9UX0NOVF9YSQkgKDE3N0w8PDApCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8wX1JWMlBDU1FfVkFMSURfQ05UX1hJCSAoMTc4TDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzFfWEkJCSAoMHhmZkw8PDgpCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzBfR0VOX1NFTF8yX1hJCQkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMF9HRU5fU0VMXzNfWEkJCSAoMHhmZkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzEJCQkJMHgwMDAwNjg1NAogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8xX0dFTl9TRUxfNAkJICgweDdmTDw8MCkKICNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMV9HRU5fU0VMXzUJCSAoMHg3Zkw8PDgpCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzFfR0VOX1NFTF82CQkgKDB4N2ZMPDwxNikKICNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMV9HRU5fU0VMXzcJCSAoMHg3Zkw8PDI0KQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8xX0dFTl9TRUxfNF9YSQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMV9HRU5fU0VMXzVfWEkJCSAoMHhmZkw8PDgpCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzFfR0VOX1NFTF82X1hJCQkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMV9HRU5fU0VMXzdfWEkJCSAoMHhmZkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzIJCQkJMHgwMDAwNjg1OAogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8yX0dFTl9TRUxfOAkJICgweDdmTDw8MCkKICNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMl9HRU5fU0VMXzkJCSAoMHg3Zkw8PDgpCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzJfR0VOX1NFTF8xMAkJICgweDdmTDw8MTYpCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzJfR0VOX1NFTF8xMQkJICgweDdmTDw8MjQpCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzJfR0VOX1NFTF84X1hJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8yX0dFTl9TRUxfOV9YSQkJICgweGZmTDw8OCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMl9HRU5fU0VMXzEwX1hJCQkgKDB4ZmZMPDwxNikKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfMl9HRU5fU0VMXzExX1hJCQkgKDB4ZmZMPDwyNCkKIAogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8zCQkJCTB4MDAwMDY4NWMKICNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfM19HRU5fU0VMXzEyCQkgKDB4N2ZMPDwwKQogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8zX0dFTl9TRUxfMTMJCSAoMHg3Zkw8PDgpCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzNfR0VOX1NFTF8xNAkJICgweDdmTDw8MTYpCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzNfR0VOX1NFTF8xNQkJICgweDdmTDw8MjQpCisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU0VMXzNfR0VOX1NFTF8xMl9YSQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TRUxfM19HRU5fU0VMXzEzX1hJCQkgKDB4ZmZMPDw4KQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8zX0dFTl9TRUxfMTRfWEkJCSAoMHhmZkw8PDE2KQorI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NFTF8zX0dFTl9TRUxfMTVfWEkJCSAoMHhmZkw8PDI0KQogCiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU1RBVDAJCQkJMHgwMDAwNjg4OAogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NUQVQxCQkJCTB4MDAwMDY4OGMKQEAgLTI5NjgsNiArNTA0Miw3IEBACiAjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU1RBVF9BQzEzCQkJMHgwMDAwNjhmYwogI2RlZmluZSBCTlgyX0hDX1NUQVRfR0VOX1NUQVRfQUMxNAkJCTB4MDAwMDY5MDAKICNkZWZpbmUgQk5YMl9IQ19TVEFUX0dFTl9TVEFUX0FDMTUJCQkweDAwMDA2OTA0CisjZGVmaW5lIEJOWDJfSENfU1RBVF9HRU5fU1RBVF9BQwkJCTB4MDAwMDY4YzgKICNkZWZpbmUgQk5YMl9IQ19WSVMJCQkJCTB4MDAwMDY5MDgKICNkZWZpbmUgQk5YMl9IQ19WSVNfU1RBVF9CVUlMRF9TVEFURQkJCSAoMHhmTDw8MCkKICNkZWZpbmUgQk5YMl9IQ19WSVNfU1RBVF9CVUlMRF9TVEFURV9JRExFCQkgKDBMPDwwKQpAQCAtMzAzOCw2ICs1MTEzLDM0OSBAQAogI2RlZmluZSBCTlgyX0hDX0RFQlVHX1ZFQ1RfUEVFS18yX1BFRUtfRU4JCSAoMUw8PDI3KQogI2RlZmluZSBCTlgyX0hDX0RFQlVHX1ZFQ1RfUEVFS18yX1NFTAkJCSAoMHhmTDw8MjgpCiAKKyNkZWZpbmUgQk5YMl9IQ19DT0FMRVNDRV9OT1cJCQkJMHgwMDAwNjkxNAorI2RlZmluZSBCTlgyX0hDX0NPQUxFU0NFX05PV19DT0FMX05PVwkJCSAoMHgxZmZMPDwxKQorI2RlZmluZSBCTlgyX0hDX0NPQUxFU0NFX05PV19DT0FMX05PV19XT19JTlQJCSAoMHgxZmZMPDwxMSkKKyNkZWZpbmUgQk5YMl9IQ19DT0FMRVNDRV9OT1dfQ09BTF9PTl9OWFRfRVZFTlQJCSAoMHgxZmZMPDwyMSkKKworI2RlZmluZSBCTlgyX0hDX01TSVhfQklUX1ZFQ1RPUgkJCQkweDAwMDA2OTE4CisjZGVmaW5lIEJOWDJfSENfTVNJWF9CSVRfVkVDVE9SX1ZBTAkJCSAoMHgxZmZMPDwwKQorCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzEJCQkJMHgwMDAwNmEwMAorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18xX1JYX1RNUl9NT0RFCQkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfMV9UWF9UTVJfTU9ERQkJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzFfQ09NX1RNUl9NT0RFCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18xX0NNRF9UTVJfTU9ERQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfMV9QRVJfTU9ERQkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18xX09ORV9TSE9UCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzFfVVNFX0lOVF9QQVJBTQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzFfUEVSX0NPTExFQ1RfTElNSVQJCSAoMHhmTDw8MjApCisKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfMQkJCTB4MDAwMDZhMDQKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfMV9WQUxVRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfMV9JTlQJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfMQkJCTB4MDAwMDZhMDgKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF8xX1ZBTFVFCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF8xX0lOVAkJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzEJCQkweDAwMDA2YTBjCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzFfVkFMVUUJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzFfSU5UCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzEJCQkJMHgwMDAwNmExMAorI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzFfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU18xX0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU18xCQkJCTB4MDAwMDZhMTQKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU18xX1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfMV9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzEJCQkJMHgwMDAwNmExOAorI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU18xX1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzFfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU18xCQkJCTB4MDAwMDZhMWMKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfMV9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU18xX0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU18xCQkJMHgwMDAwNmEyMAorI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzFfSENfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzFfSENfSU5UX1BFUklPRElDX1RJQ0tTCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfMgkJCQkweDAwMDA2YTI0CisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzJfUlhfVE1SX01PREUJCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18yX1RYX1RNUl9NT0RFCQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfMl9DT01fVE1SX01PREUJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzJfQ01EX1RNUl9NT0RFCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18yX1BFUl9NT0RFCQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzJfT05FX1NIT1QJCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfMl9VU0VfSU5UX1BBUkFNCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfMl9QRVJfQ09MTEVDVF9MSU1JVAkJICgweGZMPDwyMCkKKworI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF8yCQkJMHgwMDAwNmEyOAorI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF8yX1ZBTFVFCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF8yX0lOVAkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF8yCQkJMHgwMDAwNmEyYworI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzJfVkFMVUUJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzJfSU5UCQkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfMgkJCTB4MDAwMDZhMzAKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfMl9WQUxVRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfMl9JTlQJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfMgkJCQkweDAwMDA2YTM0CisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfMl9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzJfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzIJCQkJMHgwMDAwNmEzOAorI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzJfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU18yX0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfMgkJCQkweDAwMDA2YTNjCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzJfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfMl9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzIJCQkJMHgwMDAwNmE0MAorI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU18yX1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzJfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzIJCQkweDAwMDA2YTQ0CisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfMl9IQ19QRVJJT0RJQ19USUNLUwkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfMl9IQ19JTlRfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18zCQkJCTB4MDAwMDZhNDgKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfM19SWF9UTVJfTU9ERQkJCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzNfVFhfVE1SX01PREUJCQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18zX0NPTV9UTVJfTU9ERQkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfM19DTURfVE1SX01PREUJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzNfUEVSX01PREUJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfM19PTkVfU0hPVAkJCSAoMUw8PDE3KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18zX1VTRV9JTlRfUEFSQU0JCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR18zX1BFUl9DT0xMRUNUX0xJTUlUCQkgKDB4Zkw8PDIwKQorCisjZGVmaW5lIEJOWDJfSENfVFhfUVVJQ0tfQ09OU19UUklQXzMJCQkweDAwMDA2YTRjCisjZGVmaW5lIEJOWDJfSENfVFhfUVVJQ0tfQ09OU19UUklQXzNfVkFMVUUJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfVFhfUVVJQ0tfQ09OU19UUklQXzNfSU5UCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzMJCQkweDAwMDA2YTUwCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfM19WQUxVRQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfM19JTlQJCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUF8zCQkJMHgwMDAwNmE1NAorI2RlZmluZSBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUF8zX1ZBTFVFCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUF8zX0lOVAkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU18zCQkJCTB4MDAwMDZhNTgKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU18zX1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfM19JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfMwkJCQkweDAwMDA2YTVjCisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfM19WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzNfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU18zCQkJCTB4MDAwMDZhNjAKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfM19WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU18zX0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfMwkJCQkweDAwMDA2YTY0CisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzNfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfM19JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfMwkJCTB4MDAwMDZhNjgKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU18zX0hDX1BFUklPRElDX1RJQ0tTCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU18zX0hDX0lOVF9QRVJJT0RJQ19USUNLUwkgKDB4ZmZmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzQJCQkJMHgwMDAwNmE2YworI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR180X1JYX1RNUl9NT0RFCQkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNF9UWF9UTVJfTU9ERQkJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzRfQ09NX1RNUl9NT0RFCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR180X0NNRF9UTVJfTU9ERQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNF9QRVJfTU9ERQkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR180X09ORV9TSE9UCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzRfVVNFX0lOVF9QQVJBTQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzRfUEVSX0NPTExFQ1RfTElNSVQJCSAoMHhmTDw8MjApCisKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfNAkJCTB4MDAwMDZhNzAKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfNF9WQUxVRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfNF9JTlQJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfNAkJCTB4MDAwMDZhNzQKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF80X1ZBTFVFCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF80X0lOVAkJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzQJCQkweDAwMDA2YTc4CisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzRfVkFMVUUJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzRfSU5UCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzQJCQkJMHgwMDAwNmE3YworI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzRfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU180X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU180CQkJCTB4MDAwMDZhODAKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU180X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfNF9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzQJCQkJMHgwMDAwNmE4NAorI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU180X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzRfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU180CQkJCTB4MDAwMDZhODgKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfNF9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU180X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU180CQkJMHgwMDAwNmE4YworI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzRfSENfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzRfSENfSU5UX1BFUklPRElDX1RJQ0tTCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNQkJCQkweDAwMDA2YTkwCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzVfUlhfVE1SX01PREUJCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR181X1RYX1RNUl9NT0RFCQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNV9DT01fVE1SX01PREUJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzVfQ01EX1RNUl9NT0RFCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR181X1BFUl9NT0RFCQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzVfT05FX1NIT1QJCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNV9VU0VfSU5UX1BBUkFNCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNV9QRVJfQ09MTEVDVF9MSU1JVAkJICgweGZMPDwyMCkKKworI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF81CQkJMHgwMDAwNmE5NAorI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF81X1ZBTFVFCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF81X0lOVAkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF81CQkJMHgwMDAwNmE5OAorI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzVfVkFMVUUJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzVfSU5UCQkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfNQkJCTB4MDAwMDZhOWMKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfNV9WQUxVRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfNV9JTlQJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfNQkJCQkweDAwMDA2YWEwCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfNV9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzVfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzUJCQkJMHgwMDAwNmFhNAorI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzVfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU181X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfNQkJCQkweDAwMDA2YWE4CisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzVfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfNV9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzUJCQkJMHgwMDAwNmFhYworI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU181X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzVfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzUJCQkweDAwMDA2YWIwCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfNV9IQ19QRVJJT0RJQ19USUNLUwkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfNV9IQ19JTlRfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR182CQkJCTB4MDAwMDZhYjQKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNl9SWF9UTVJfTU9ERQkJCSAoMUw8PDEpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzZfVFhfVE1SX01PREUJCQkgKDFMPDwyKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR182X0NPTV9UTVJfTU9ERQkJICgxTDw8MykKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNl9DTURfVE1SX01PREUJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzZfUEVSX01PREUJCQkgKDFMPDwxNikKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfNl9PTkVfU0hPVAkJCSAoMUw8PDE3KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR182X1VTRV9JTlRfUEFSQU0JCSAoMUw8PDE4KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR182X1BFUl9DT0xMRUNUX0xJTUlUCQkgKDB4Zkw8PDIwKQorCisjZGVmaW5lIEJOWDJfSENfVFhfUVVJQ0tfQ09OU19UUklQXzYJCQkweDAwMDA2YWI4CisjZGVmaW5lIEJOWDJfSENfVFhfUVVJQ0tfQ09OU19UUklQXzZfVkFMVUUJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfVFhfUVVJQ0tfQ09OU19UUklQXzZfSU5UCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzYJCQkweDAwMDA2YWJjCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfNl9WQUxVRQkJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfNl9JTlQJCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUF82CQkJMHgwMDAwNmFjMAorI2RlZmluZSBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUF82X1ZBTFVFCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUF82X0lOVAkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU182CQkJCTB4MDAwMDZhYzQKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU182X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfNl9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfNgkJCQkweDAwMDA2YWM4CisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfNl9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzZfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU182CQkJCTB4MDAwMDZhY2MKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfNl9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU182X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfNgkJCQkweDAwMDA2YWQwCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzZfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfNl9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfNgkJCTB4MDAwMDZhZDQKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU182X0hDX1BFUklPRElDX1RJQ0tTCSAoMHhmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU182X0hDX0lOVF9QRVJJT0RJQ19USUNLUwkgKDB4ZmZmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzcJCQkJMHgwMDAwNmFkOAorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR183X1JYX1RNUl9NT0RFCQkJICgxTDw8MSkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfN19UWF9UTVJfTU9ERQkJCSAoMUw8PDIpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzdfQ09NX1RNUl9NT0RFCQkgKDFMPDwzKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR183X0NNRF9UTVJfTU9ERQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfN19QRVJfTU9ERQkJCSAoMUw8PDE2KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR183X09ORV9TSE9UCQkJICgxTDw8MTcpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzdfVVNFX0lOVF9QQVJBTQkJICgxTDw8MTgpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzdfUEVSX0NPTExFQ1RfTElNSVQJCSAoMHhmTDw8MjApCisKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfNwkJCTB4MDAwMDZhZGMKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfN19WQUxVRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19UWF9RVUlDS19DT05TX1RSSVBfN19JTlQJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ09NUF9QUk9EX1RSSVBfNwkJCTB4MDAwMDZhZTAKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF83X1ZBTFVFCQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF83X0lOVAkJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzcJCQkweDAwMDA2YWU0CisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzdfVkFMVUUJCSAoMHhmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUlhfUVVJQ0tfQ09OU19UUklQXzdfSU5UCQkgKDB4ZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzcJCQkJMHgwMDAwNmFlOAorI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzdfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19SWF9USUNLU183X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU183CQkJCTB4MDAwMDZhZWMKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU183X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfVFhfVElDS1NfN19JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzcJCQkJMHgwMDAwNmFmMAorI2RlZmluZSBCTlgyX0hDX0NPTV9USUNLU183X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzdfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU183CQkJCTB4MDAwMDZhZjQKKyNkZWZpbmUgQk5YMl9IQ19DTURfVElDS1NfN19WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU183X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19QRVJJT0RJQ19USUNLU183CQkJMHgwMDAwNmFmOAorI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzdfSENfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzdfSENfSU5UX1BFUklPRElDX1RJQ0tTCSAoMHhmZmZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfOAkJCQkweDAwMDA2YWZjCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzhfUlhfVE1SX01PREUJCQkgKDFMPDwxKQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR184X1RYX1RNUl9NT0RFCQkJICgxTDw8MikKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfOF9DT01fVE1SX01PREUJCSAoMUw8PDMpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzhfQ01EX1RNUl9NT0RFCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0hDX1NCX0NPTkZJR184X1BFUl9NT0RFCQkJICgxTDw8MTYpCisjZGVmaW5lIEJOWDJfSENfU0JfQ09ORklHXzhfT05FX1NIT1QJCQkgKDFMPDwxNykKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfOF9VU0VfSU5UX1BBUkFNCQkgKDFMPDwxOCkKKyNkZWZpbmUgQk5YMl9IQ19TQl9DT05GSUdfOF9QRVJfQ09MTEVDVF9MSU1JVAkJICgweGZMPDwyMCkKKworI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF84CQkJMHgwMDAwNmIwMAorI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF84X1ZBTFVFCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUF84X0lOVAkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DT01QX1BST0RfVFJJUF84CQkJMHgwMDAwNmIwNAorI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzhfVkFMVUUJCQkgKDB4ZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX0NPTVBfUFJPRF9UUklQXzhfSU5UCQkJICgweGZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfOAkJCTB4MDAwMDZiMDgKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfOF9WQUxVRQkJICgweGZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19SWF9RVUlDS19DT05TX1RSSVBfOF9JTlQJCSAoMHhmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfOAkJCQkweDAwMDA2YjBjCisjZGVmaW5lIEJOWDJfSENfUlhfVElDS1NfOF9WQUxVRQkJCSAoMHgzZmZMPDwwKQorI2RlZmluZSBCTlgyX0hDX1JYX1RJQ0tTXzhfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzgJCQkJMHgwMDAwNmIxMAorI2RlZmluZSBCTlgyX0hDX1RYX1RJQ0tTXzhfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19UWF9USUNLU184X0lOVAkJCQkgKDB4M2ZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfOAkJCQkweDAwMDA2YjE0CisjZGVmaW5lIEJOWDJfSENfQ09NX1RJQ0tTXzhfVkFMVUUJCQkgKDB4M2ZmTDw8MCkKKyNkZWZpbmUgQk5YMl9IQ19DT01fVElDS1NfOF9JTlQJCQkJICgweDNmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzgJCQkJMHgwMDAwNmIxOAorI2RlZmluZSBCTlgyX0hDX0NNRF9USUNLU184X1ZBTFVFCQkJICgweDNmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfQ01EX1RJQ0tTXzhfSU5UCQkJCSAoMHgzZmZMPDwxNikKKworI2RlZmluZSBCTlgyX0hDX1BFUklPRElDX1RJQ0tTXzgJCQkweDAwMDA2YjFjCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfOF9IQ19QRVJJT0RJQ19USUNLUwkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfSENfUEVSSU9ESUNfVElDS1NfOF9IQ19JTlRfUEVSSU9ESUNfVElDS1MJICgweGZmZmZMPDwxNikKIAogCiAvKgpAQCAtMzA2Myw3ICs1NDgxLDcgQEAKICNkZWZpbmUgQk5YMl9UWFBfQ1BVX1NUQVRFX1BBR0VfMF9EQVRBX0hBTFRFRAkJICgxTDw8MykKICNkZWZpbmUgQk5YMl9UWFBfQ1BVX1NUQVRFX1BBR0VfMF9JTlNUX0hBTFRFRAkJICgxTDw8NCkKICNkZWZpbmUgQk5YMl9UWFBfQ1BVX1NUQVRFX0JBRF9EQVRBX0FERFJfSEFMVEVECQkgKDFMPDw1KQotI2RlZmluZSBCTlgyX1RYUF9DUFVfU1RBVEVfQkFEX3BjX0hBTFRFRAkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9UWFBfQ1BVX1NUQVRFX0JBRF9QQ19IQUxURUQJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfVFhQX0NQVV9TVEFURV9BTElHTl9IQUxURUQJCQkgKDFMPDw3KQogI2RlZmluZSBCTlgyX1RYUF9DUFVfU1RBVEVfRklPX0FCT1JUX0hBTFRFRAkJICgxTDw8OCkKICNkZWZpbmUgQk5YMl9UWFBfQ1BVX1NUQVRFX1NPRlRfSEFMVEVECQkJICgxTDw8MTApCkBAIC0zMTExLDcgKzU1MjksNyBAQAogI2RlZmluZSBCTlgyX1RYUF9DUFVfTEFTVF9CUkFOQ0hfQUREUl9MQkEJCSAoMHgzZmZmZmZmZkw8PDIpCiAKICNkZWZpbmUgQk5YMl9UWFBfQ1BVX1JFR19GSUxFCQkJCTB4MDAwNDUyMDAKLSNkZWZpbmUgQk5YMl9UWFBfRlRRX0RBVEEJCQkJMHgwMDA0NTNjMAorI2RlZmluZSBCTlgyX1RYUF9UWFBRCQkJCQkweDAwMDQ1M2MwCiAjZGVmaW5lIEJOWDJfVFhQX0ZUUV9DTUQJCQkJMHgwMDA0NTNmOAogI2RlZmluZSBCTlgyX1RYUF9GVFFfQ01EX09GRlNFVAkJCQkgKDB4M2ZmTDw8MCkKICNkZWZpbmUgQk5YMl9UWFBfRlRRX0NNRF9XUl9UT1AJCQkJICgxTDw8MTApCkBAIC0zMTU4LDcgKzU1NzYsNyBAQAogI2RlZmluZSBCTlgyX1RQQVRfQ1BVX1NUQVRFX1BBR0VfMF9EQVRBX0hBTFRFRAkJICgxTDw8MykKICNkZWZpbmUgQk5YMl9UUEFUX0NQVV9TVEFURV9QQUdFXzBfSU5TVF9IQUxURUQJCSAoMUw8PDQpCiAjZGVmaW5lIEJOWDJfVFBBVF9DUFVfU1RBVEVfQkFEX0RBVEFfQUREUl9IQUxURUQJICgxTDw8NSkKLSNkZWZpbmUgQk5YMl9UUEFUX0NQVV9TVEFURV9CQURfcGNfSEFMVEVECQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX1RQQVRfQ1BVX1NUQVRFX0JBRF9QQ19IQUxURUQJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfVFBBVF9DUFVfU1RBVEVfQUxJR05fSEFMVEVECQkgKDFMPDw3KQogI2RlZmluZSBCTlgyX1RQQVRfQ1BVX1NUQVRFX0ZJT19BQk9SVF9IQUxURUQJCSAoMUw8PDgpCiAjZGVmaW5lIEJOWDJfVFBBVF9DUFVfU1RBVEVfU09GVF9IQUxURUQJCQkgKDFMPDwxMCkKQEAgLTMyMDYsNyArNTYyNCw3IEBACiAjZGVmaW5lIEJOWDJfVFBBVF9DUFVfTEFTVF9CUkFOQ0hfQUREUl9MQkEJCSAoMHgzZmZmZmZmZkw8PDIpCiAKICNkZWZpbmUgQk5YMl9UUEFUX0NQVV9SRUdfRklMRQkJCQkweDAwMDg1MjAwCi0jZGVmaW5lIEJOWDJfVFBBVF9GVFFfREFUQQkJCQkweDAwMDg1M2MwCisjZGVmaW5lIEJOWDJfVFBBVF9UUEFUUQkJCQkJMHgwMDA4NTNjMAogI2RlZmluZSBCTlgyX1RQQVRfRlRRX0NNRAkJCQkweDAwMDg1M2Y4CiAjZGVmaW5lIEJOWDJfVFBBVF9GVFFfQ01EX09GRlNFVAkJCSAoMHgzZmZMPDwwKQogI2RlZmluZSBCTlgyX1RQQVRfRlRRX0NNRF9XUl9UT1AJCQkgKDFMPDwxMCkKQEAgLTMyNTMsNyArNTY3MSw3IEBACiAjZGVmaW5lIEJOWDJfUlhQX0NQVV9TVEFURV9QQUdFXzBfREFUQV9IQUxURUQJCSAoMUw8PDMpCiAjZGVmaW5lIEJOWDJfUlhQX0NQVV9TVEFURV9QQUdFXzBfSU5TVF9IQUxURUQJCSAoMUw8PDQpCiAjZGVmaW5lIEJOWDJfUlhQX0NQVV9TVEFURV9CQURfREFUQV9BRERSX0hBTFRFRAkJICgxTDw8NSkKLSNkZWZpbmUgQk5YMl9SWFBfQ1BVX1NUQVRFX0JBRF9wY19IQUxURUQJCSAoMUw8PDYpCisjZGVmaW5lIEJOWDJfUlhQX0NQVV9TVEFURV9CQURfUENfSEFMVEVECQkgKDFMPDw2KQogI2RlZmluZSBCTlgyX1JYUF9DUFVfU1RBVEVfQUxJR05fSEFMVEVECQkJICgxTDw8NykKICNkZWZpbmUgQk5YMl9SWFBfQ1BVX1NUQVRFX0ZJT19BQk9SVF9IQUxURUQJCSAoMUw8PDgpCiAjZGVmaW5lIEJOWDJfUlhQX0NQVV9TVEFURV9TT0ZUX0hBTFRFRAkJCSAoMUw8PDEwKQpAQCAtMzMwMSw3ICs1NzE5LDI5IEBACiAjZGVmaW5lIEJOWDJfUlhQX0NQVV9MQVNUX0JSQU5DSF9BRERSX0xCQQkJICgweDNmZmZmZmZmTDw8MikKIAogI2RlZmluZSBCTlgyX1JYUF9DUFVfUkVHX0ZJTEUJCQkJMHgwMDBjNTIwMAotI2RlZmluZSBCTlgyX1JYUF9DRlRRX0RBVEEJCQkJMHgwMDBjNTM4MAorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTAkJCQkweDAwMGM1MzdjCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX0lOQ19VU0FHRV9DTlQJCSAoMUw8PDApCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX1BGRV9TSVpFCQkJICgweGZMPDw0KQorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTF9QRkVfU0laRV8wCQkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfUEZFX1NJWkVfMQkJCSAoMUw8PDQpCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzIJCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTF9QRkVfU0laRV8zCQkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfUEZFX1NJWkVfNAkJCSAoNEw8PDQpCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzUJCQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTF9QRkVfU0laRV82CQkJICg2TDw8NCkKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfUEZFX1NJWkVfNwkJCSAoN0w8PDQpCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzgJCQkgKDhMPDw0KQorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTF9QRkVfU0laRV85CQkJICg5TDw8NCkKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfUEZFX1NJWkVfMTAJCSAoMTBMPDw0KQorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTF9QRkVfU0laRV8xMQkJICgxMUw8PDQpCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzEyCQkgKDEyTDw8NCkKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfUEZFX1NJWkVfMTMJCSAoMTNMPDw0KQorI2RlZmluZSBCTlgyX1JYUF9QRkVfUEZFX0NUTF9QRkVfU0laRV8xNAkJICgxNEw8PDQpCisjZGVmaW5lIEJOWDJfUlhQX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzE1CQkgKDE1TDw8NCkKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfUEZFX0NPVU5UCQkJICgweGZMPDwxMikKKyNkZWZpbmUgQk5YMl9SWFBfUEZFX1BGRV9DVExfT0ZGU0VUCQkJICgweDFmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfUlhQX1JYUENRCQkJCQkweDAwMGM1MzgwCiAjZGVmaW5lIEJOWDJfUlhQX0NGVFFfQ01ECQkJCTB4MDAwYzUzYjgKICNkZWZpbmUgQk5YMl9SWFBfQ0ZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfUlhQX0NGVFFfQ01EX1dSX1RPUAkJCSAoMUw8PDEwKQpAQCAtMzMyMiw3ICs1NzYyLDcgQEAKICNkZWZpbmUgQk5YMl9SWFBfQ0ZUUV9DVExfTUFYX0RFUFRICQkJICgweDNmZkw8PDEyKQogI2RlZmluZSBCTlgyX1JYUF9DRlRRX0NUTF9DVVJfREVQVEgJCQkgKDB4M2ZmTDw8MjIpCiAKLSNkZWZpbmUgQk5YMl9SWFBfRlRRX0RBVEEJCQkJMHgwMDBjNTNjMAorI2RlZmluZSBCTlgyX1JYUF9SWFBRCQkJCQkweDAwMGM1M2MwCiAjZGVmaW5lIEJOWDJfUlhQX0ZUUV9DTUQJCQkJMHgwMDBjNTNmOAogI2RlZmluZSBCTlgyX1JYUF9GVFFfQ01EX09GRlNFVAkJCQkgKDB4M2ZmTDw8MCkKICNkZWZpbmUgQk5YMl9SWFBfRlRRX0NNRF9XUl9UT1AJCQkJICgxTDw8MTApCkBAIC0zMzUwLDYgKzU3OTAsMTAgQEAKICAqICBjb21fcmVnIGRlZmluaXRpb24KICAqICBvZmZzZXQ6IDB4MTAwMDAwCiAgKi8KKyNkZWZpbmUgQk5YMl9DT01fQ0tTVU1fRVJST1JfU1RBVFVTCQkJMHgwMDEwMDAwMAorI2RlZmluZSBCTlgyX0NPTV9DS1NVTV9FUlJPUl9TVEFUVVNfQ0FMQ1VMQVRFRAkJICgweGZmZmZMPDwwKQorI2RlZmluZSBCTlgyX0NPTV9DS1NVTV9FUlJPUl9TVEFUVVNfRVhQRUNURUQJCSAoMHhmZmZmTDw8MTYpCisKICNkZWZpbmUgQk5YMl9DT01fQ1BVX01PREUJCQkJMHgwMDEwNTAwMAogI2RlZmluZSBCTlgyX0NPTV9DUFVfTU9ERV9MT0NBTF9SU1QJCQkgKDFMPDwwKQogI2RlZmluZSBCTlgyX0NPTV9DUFVfTU9ERV9TVEVQX0VOQQkJCSAoMUw8PDEpCkBAIC0zMzY5LDcgKzU4MTMsNyBAQAogI2RlZmluZSBCTlgyX0NPTV9DUFVfU1RBVEVfUEFHRV8wX0RBVEFfSEFMVEVECQkgKDFMPDwzKQogI2RlZmluZSBCTlgyX0NPTV9DUFVfU1RBVEVfUEFHRV8wX0lOU1RfSEFMVEVECQkgKDFMPDw0KQogI2RlZmluZSBCTlgyX0NPTV9DUFVfU1RBVEVfQkFEX0RBVEFfQUREUl9IQUxURUQJCSAoMUw8PDUpCi0jZGVmaW5lIEJOWDJfQ09NX0NQVV9TVEFURV9CQURfcGNfSEFMVEVECQkgKDFMPDw2KQorI2RlZmluZSBCTlgyX0NPTV9DUFVfU1RBVEVfQkFEX1BDX0hBTFRFRAkJICgxTDw8NikKICNkZWZpbmUgQk5YMl9DT01fQ1BVX1NUQVRFX0FMSUdOX0hBTFRFRAkJCSAoMUw8PDcpCiAjZGVmaW5lIEJOWDJfQ09NX0NQVV9TVEFURV9GSU9fQUJPUlRfSEFMVEVECQkgKDFMPDw4KQogI2RlZmluZSBCTlgyX0NPTV9DUFVfU1RBVEVfU09GVF9IQUxURUQJCQkgKDFMPDwxMCkKQEAgLTM0MTcsNyArNTg2MSwyOSBAQAogI2RlZmluZSBCTlgyX0NPTV9DUFVfTEFTVF9CUkFOQ0hfQUREUl9MQkEJCSAoMHgzZmZmZmZmZkw8PDIpCiAKICNkZWZpbmUgQk5YMl9DT01fQ1BVX1JFR19GSUxFCQkJCTB4MDAxMDUyMDAKLSNkZWZpbmUgQk5YMl9DT01fQ09NWFFfRlRRX0RBVEEJCQkJMHgwMDEwNTM0MAorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTAkJCTB4MDAxMDUyYmMKKyNkZWZpbmUgQk5YMl9DT01fQ09NVFFfUEZFX1BGRV9DVExfSU5DX1VTQUdFX0NOVAkgKDFMPDwwKQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRQkJICgweGZMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8wCQkgKDBMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8xCQkgKDFMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8yCQkgKDJMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8zCQkgKDNMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV80CQkgKDRMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV81CQkgKDVMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV82CQkgKDZMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV83CQkgKDdMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV84CQkgKDhMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV85CQkgKDlMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8xMAkJICgxMEw8PDQpCisjZGVmaW5lIEJOWDJfQ09NX0NPTVRRX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzExCQkgKDExTDw8NCkKKyNkZWZpbmUgQk5YMl9DT01fQ09NVFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMTIJCSAoMTJMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8xMwkJICgxM0w8PDQpCisjZGVmaW5lIEJOWDJfQ09NX0NPTVRRX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzE0CQkgKDE0TDw8NCkKKyNkZWZpbmUgQk5YMl9DT01fQ09NVFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMTUJCSAoMTVMPDw0KQorI2RlZmluZSBCTlgyX0NPTV9DT01UUV9QRkVfUEZFX0NUTF9QRkVfQ09VTlQJCSAoMHhmTDw8MTIpCisjZGVmaW5lIEJOWDJfQ09NX0NPTVRRX1BGRV9QRkVfQ1RMX09GRlNFVAkJICgweDFmZkw8PDE2KQorCisjZGVmaW5lIEJOWDJfQ09NX0NPTVhRCQkJCQkweDAwMTA1MzQwCiAjZGVmaW5lIEJOWDJfQ09NX0NPTVhRX0ZUUV9DTUQJCQkJMHgwMDEwNTM3OAogI2RlZmluZSBCTlgyX0NPTV9DT01YUV9GVFFfQ01EX09GRlNFVAkJCSAoMHgzZmZMPDwwKQogI2RlZmluZSBCTlgyX0NPTV9DT01YUV9GVFFfQ01EX1dSX1RPUAkJCSAoMUw8PDEwKQpAQCAtMzQzOCw3ICs1OTA0LDcgQEAKICNkZWZpbmUgQk5YMl9DT01fQ09NWFFfRlRRX0NUTF9NQVhfREVQVEgJCSAoMHgzZmZMPDwxMikKICNkZWZpbmUgQk5YMl9DT01fQ09NWFFfRlRRX0NUTF9DVVJfREVQVEgJCSAoMHgzZmZMPDwyMikKIAotI2RlZmluZSBCTlgyX0NPTV9DT01UUV9GVFFfREFUQQkJCQkweDAwMTA1MzgwCisjZGVmaW5lIEJOWDJfQ09NX0NPTVRRCQkJCQkweDAwMTA1MzgwCiAjZGVmaW5lIEJOWDJfQ09NX0NPTVRRX0ZUUV9DTUQJCQkJMHgwMDEwNTNiOAogI2RlZmluZSBCTlgyX0NPTV9DT01UUV9GVFFfQ01EX09GRlNFVAkJCSAoMHgzZmZMPDwwKQogI2RlZmluZSBCTlgyX0NPTV9DT01UUV9GVFFfQ01EX1dSX1RPUAkJCSAoMUw8PDEwKQpAQCAtMzQ1OSw3ICs1OTI1LDcgQEAKICNkZWZpbmUgQk5YMl9DT01fQ09NVFFfRlRRX0NUTF9NQVhfREVQVEgJCSAoMHgzZmZMPDwxMikKICNkZWZpbmUgQk5YMl9DT01fQ09NVFFfRlRRX0NUTF9DVVJfREVQVEgJCSAoMHgzZmZMPDwyMikKIAotI2RlZmluZSBCTlgyX0NPTV9DT01RX0ZUUV9EQVRBCQkJCTB4MDAxMDUzYzAKKyNkZWZpbmUgQk5YMl9DT01fQ09NUQkJCQkJMHgwMDEwNTNjMAogI2RlZmluZSBCTlgyX0NPTV9DT01RX0ZUUV9DTUQJCQkJMHgwMDEwNTNmOAogI2RlZmluZSBCTlgyX0NPTV9DT01RX0ZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfQ09NX0NPTVFfRlRRX0NNRF9XUl9UT1AJCQkgKDFMPDwxMCkKQEAgLTM0ODksNiArNTk1NSwxMCBAQAogICogIGNwX3JlZyBkZWZpbml0aW9uCiAgKiAgb2Zmc2V0OiAweDE4MDAwMAogICovCisjZGVmaW5lIEJOWDJfQ1BfQ0tTVU1fRVJST1JfU1RBVFVTCQkJMHgwMDE4MDAwMAorI2RlZmluZSBCTlgyX0NQX0NLU1VNX0VSUk9SX1NUQVRVU19DQUxDVUxBVEVECQkgKDB4ZmZmZkw8PDApCisjZGVmaW5lIEJOWDJfQ1BfQ0tTVU1fRVJST1JfU1RBVFVTX0VYUEVDVEVECQkgKDB4ZmZmZkw8PDE2KQorCiAjZGVmaW5lIEJOWDJfQ1BfQ1BVX01PREUJCQkJMHgwMDE4NTAwMAogI2RlZmluZSBCTlgyX0NQX0NQVV9NT0RFX0xPQ0FMX1JTVAkJCSAoMUw8PDApCiAjZGVmaW5lIEJOWDJfQ1BfQ1BVX01PREVfU1RFUF9FTkEJCQkgKDFMPDwxKQpAQCAtMzUwOCw3ICs1OTc4LDcgQEAKICNkZWZpbmUgQk5YMl9DUF9DUFVfU1RBVEVfUEFHRV8wX0RBVEFfSEFMVEVECQkgKDFMPDwzKQogI2RlZmluZSBCTlgyX0NQX0NQVV9TVEFURV9QQUdFXzBfSU5TVF9IQUxURUQJCSAoMUw8PDQpCiAjZGVmaW5lIEJOWDJfQ1BfQ1BVX1NUQVRFX0JBRF9EQVRBX0FERFJfSEFMVEVECQkgKDFMPDw1KQotI2RlZmluZSBCTlgyX0NQX0NQVV9TVEFURV9CQURfcGNfSEFMVEVECQkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9DUF9DUFVfU1RBVEVfQkFEX1BDX0hBTFRFRAkJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfQ1BfQ1BVX1NUQVRFX0FMSUdOX0hBTFRFRAkJCSAoMUw8PDcpCiAjZGVmaW5lIEJOWDJfQ1BfQ1BVX1NUQVRFX0ZJT19BQk9SVF9IQUxURUQJCSAoMUw8PDgpCiAjZGVmaW5lIEJOWDJfQ1BfQ1BVX1NUQVRFX1NPRlRfSEFMVEVECQkJICgxTDw8MTApCkBAIC0zNTU2LDcgKzYwMjYsMjkgQEAKICNkZWZpbmUgQk5YMl9DUF9DUFVfTEFTVF9CUkFOQ0hfQUREUl9MQkEJCSAoMHgzZmZmZmZmZkw8PDIpCiAKICNkZWZpbmUgQk5YMl9DUF9DUFVfUkVHX0ZJTEUJCQkJMHgwMDE4NTIwMAotI2RlZmluZSBCTlgyX0NQX0NQUV9GVFFfREFUQQkJCQkweDAwMTg1M2MwCisjZGVmaW5lIEJOWDJfQ1BfQ1BRX1BGRV9QRkVfQ1RMCQkJCTB4MDAxODUzYmMKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfSU5DX1VTQUdFX0NOVAkJICgxTDw8MCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkUJCSAoMHhmTDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMAkJICgwTDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMQkJICgxTDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMgkJICgyTDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMwkJICgzTDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfNAkJICg0TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfNQkJICg1TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfNgkJICg2TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfNwkJICg3TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfOAkJICg4TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfOQkJICg5TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMTAJCSAoMTBMPDw0KQorI2RlZmluZSBCTlgyX0NQX0NQUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8xMQkJICgxMUw8PDQpCisjZGVmaW5lIEJOWDJfQ1BfQ1BRX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzEyCQkgKDEyTDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX1NJWkVfMTMJCSAoMTNMPDw0KQorI2RlZmluZSBCTlgyX0NQX0NQUV9QRkVfUEZFX0NUTF9QRkVfU0laRV8xNAkJICgxNEw8PDQpCisjZGVmaW5lIEJOWDJfQ1BfQ1BRX1BGRV9QRkVfQ1RMX1BGRV9TSVpFXzE1CQkgKDE1TDw8NCkKKyNkZWZpbmUgQk5YMl9DUF9DUFFfUEZFX1BGRV9DVExfUEZFX0NPVU5UCQkgKDB4Zkw8PDEyKQorI2RlZmluZSBCTlgyX0NQX0NQUV9QRkVfUEZFX0NUTF9PRkZTRVQJCQkgKDB4MWZmTDw8MTYpCisKKyNkZWZpbmUgQk5YMl9DUF9DUFEJCQkJCTB4MDAxODUzYzAKICNkZWZpbmUgQk5YMl9DUF9DUFFfRlRRX0NNRAkJCQkweDAwMTg1M2Y4CiAjZGVmaW5lIEJOWDJfQ1BfQ1BRX0ZUUV9DTURfT0ZGU0VUCQkJICgweDNmZkw8PDApCiAjZGVmaW5lIEJOWDJfQ1BfQ1BRX0ZUUV9DTURfV1JfVE9QCQkJICgxTDw8MTApCkBAIC0zNTg0LDYgKzYwNzYsNTkgQEAKICAqICBtY3BfcmVnIGRlZmluaXRpb24KICAqICBvZmZzZXQ6IDB4MTQwMDAwCiAgKi8KKyNkZWZpbmUgQk5YMl9NQ1BfTUNQX0NPTlRST0wJCQkJMHgwMDE0MDA4MAorI2RlZmluZSBCTlgyX01DUF9NQ1BfQ09OVFJPTF9TTUJVU19TRUwJCQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9NQ1BfTUNQX0NPTlRST0xfTUNQX0lTT0xBVEUJCSAoMUw8PDMxKQorCisjZGVmaW5lIEJOWDJfTUNQX01DUF9BVFRFTlRJT05fU1RBVFVTCQkJMHgwMDE0MDA4NAorI2RlZmluZSBCTlgyX01DUF9NQ1BfQVRURU5USU9OX1NUQVRVU19EUlZfRE9PUkJFTEwJICgxTDw8MjkpCisjZGVmaW5lIEJOWDJfTUNQX01DUF9BVFRFTlRJT05fU1RBVFVTX1dBVENIRE9HX1RJTUVPVVQJICgxTDw8MzApCisjZGVmaW5lIEJOWDJfTUNQX01DUF9BVFRFTlRJT05fU1RBVFVTX0NQVV9FVkVOVAkJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfTUNQX0hFQVJUQkVBVF9DT05UUk9MCQkJMHgwMDE0MDA4OAorI2RlZmluZSBCTlgyX01DUF9NQ1BfSEVBUlRCRUFUX0NPTlRST0xfTUNQX0hFQVJUQkVBVF9FTkFCTEUJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfTUNQX0hFQVJUQkVBVF9TVEFUVVMJCQkweDAwMTQwMDhjCisjZGVmaW5lIEJOWDJfTUNQX01DUF9IRUFSVEJFQVRfU1RBVFVTX01DUF9IRUFSVEJFQVRfUEVSSU9ECSAoMHg3ZmZMPDwwKQorI2RlZmluZSBCTlgyX01DUF9NQ1BfSEVBUlRCRUFUX1NUQVRVU19WQUxJRAkJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfTUNQX0hFQVJUQkVBVAkJCQkweDAwMTQwMDkwCisjZGVmaW5lIEJOWDJfTUNQX01DUF9IRUFSVEJFQVRfTUNQX0hFQVJUQkVBVF9DT1VOVAkgKDB4M2ZmZmZmZmZMPDwwKQorI2RlZmluZSBCTlgyX01DUF9NQ1BfSEVBUlRCRUFUX01DUF9IRUFSVEJFQVRfSU5DCSAoMUw8PDMwKQorI2RlZmluZSBCTlgyX01DUF9NQ1BfSEVBUlRCRUFUX01DUF9IRUFSVEJFQVRfUkVTRVQJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfV0FUQ0hET0dfUkVTRVQJCQkJMHgwMDE0MDA5NAorI2RlZmluZSBCTlgyX01DUF9XQVRDSERPR19SRVNFVF9XQVRDSERPR19SRVNFVAkJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfV0FUQ0hET0dfQ09OVFJPTAkJCTB4MDAxNDAwOTgKKyNkZWZpbmUgQk5YMl9NQ1BfV0FUQ0hET0dfQ09OVFJPTF9XQVRDSERPR19USU1FT1VUCSAoMHhmZmZmZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9NQ1BfV0FUQ0hET0dfQ09OVFJPTF9XQVRDSERPR19BVFROCQkgKDFMPDwyOSkKKyNkZWZpbmUgQk5YMl9NQ1BfV0FUQ0hET0dfQ09OVFJPTF9NQ1BfUlNUX0VOQUJMRQkgKDFMPDwzMCkKKyNkZWZpbmUgQk5YMl9NQ1BfV0FUQ0hET0dfQ09OVFJPTF9XQVRDSERPR19FTkFCTEUJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfQUNDRVNTX0xPQ0sJCQkJMHgwMDE0MDA5YworI2RlZmluZSBCTlgyX01DUF9BQ0NFU1NfTE9DS19MT0NLCQkJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfVE9FX0lECQkJCQkweDAwMTQwMGEwCisjZGVmaW5lIEJOWDJfTUNQX1RPRV9JRF9GVU5DVElPTl9JRAkJCSAoMUw8PDMxKQorCisjZGVmaW5lIEJOWDJfTUNQX01BSUxCT1hfQ0ZHCQkJCTB4MDAxNDAwYTQKKyNkZWZpbmUgQk5YMl9NQ1BfTUFJTEJPWF9DRkdfTUFJTEJPWF9PRkZTRVQJCSAoMHgzZmZmTDw8MCkKKyNkZWZpbmUgQk5YMl9NQ1BfTUFJTEJPWF9DRkdfTUFJTEJPWF9TSVpFCQkgKDB4ZmZmTDw8MjApCisKKyNkZWZpbmUgQk5YMl9NQ1BfTUFJTEJPWF9DRkdfT1RIRVJfRlVOQwkJCTB4MDAxNDAwYTgKKyNkZWZpbmUgQk5YMl9NQ1BfTUFJTEJPWF9DRkdfT1RIRVJfRlVOQ19NQUlMQk9YX09GRlNFVAkgKDB4M2ZmZkw8PDApCisjZGVmaW5lIEJOWDJfTUNQX01BSUxCT1hfQ0ZHX09USEVSX0ZVTkNfTUFJTEJPWF9TSVpFCSAoMHhmZmZMPDwyMCkKKworI2RlZmluZSBCTlgyX01DUF9NQ1BfRE9PUkJFTEwJCQkJMHgwMDE0MDBhYworI2RlZmluZSBCTlgyX01DUF9NQ1BfRE9PUkJFTExfTUNQX0RPT1JCRUxMCQkgKDFMPDwzMSkKKworI2RlZmluZSBCTlgyX01DUF9EUklWRVJfRE9PUkJFTEwJCQkweDAwMTQwMGIwCisjZGVmaW5lIEJOWDJfTUNQX0RSSVZFUl9ET09SQkVMTF9EUklWRVJfRE9PUkJFTEwJICgxTDw8MzEpCisKKyNkZWZpbmUgQk5YMl9NQ1BfRFJJVkVSX0RPT1JCRUxMX09USEVSX0ZVTkMJCTB4MDAxNDAwYjQKKyNkZWZpbmUgQk5YMl9NQ1BfRFJJVkVSX0RPT1JCRUxMX09USEVSX0ZVTkNfRFJJVkVSX0RPT1JCRUxMCSAoMUw8PDMxKQorCiAjZGVmaW5lIEJOWDJfTUNQX0NQVV9NT0RFCQkJCTB4MDAxNDUwMDAKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX01PREVfTE9DQUxfUlNUCQkJICgxTDw8MCkKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX01PREVfU1RFUF9FTkEJCQkgKDFMPDwxKQpAQCAtMzYwMyw3ICs2MTQ4LDcgQEAKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX1NUQVRFX1BBR0VfMF9EQVRBX0hBTFRFRAkJICgxTDw8MykKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX1NUQVRFX1BBR0VfMF9JTlNUX0hBTFRFRAkJICgxTDw8NCkKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX1NUQVRFX0JBRF9EQVRBX0FERFJfSEFMVEVECQkgKDFMPDw1KQotI2RlZmluZSBCTlgyX01DUF9DUFVfU1RBVEVfQkFEX3BjX0hBTFRFRAkJICgxTDw8NikKKyNkZWZpbmUgQk5YMl9NQ1BfQ1BVX1NUQVRFX0JBRF9QQ19IQUxURUQJCSAoMUw8PDYpCiAjZGVmaW5lIEJOWDJfTUNQX0NQVV9TVEFURV9BTElHTl9IQUxURUQJCQkgKDFMPDw3KQogI2RlZmluZSBCTlgyX01DUF9DUFVfU1RBVEVfRklPX0FCT1JUX0hBTFRFRAkJICgxTDw8OCkKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX1NUQVRFX1NPRlRfSEFMVEVECQkJICgxTDw8MTApCkBAIC0zNjUxLDcgKzYxOTYsNyBAQAogI2RlZmluZSBCTlgyX01DUF9DUFVfTEFTVF9CUkFOQ0hfQUREUl9MQkEJCSAoMHgzZmZmZmZmZkw8PDIpCiAKICNkZWZpbmUgQk5YMl9NQ1BfQ1BVX1JFR19GSUxFCQkJCTB4MDAxNDUyMDAKLSNkZWZpbmUgQk5YMl9NQ1BfTUNQUV9GVFFfREFUQQkJCQkweDAwMTQ1M2MwCisjZGVmaW5lIEJOWDJfTUNQX01DUFEJCQkJCTB4MDAxNDUzYzAKICNkZWZpbmUgQk5YMl9NQ1BfTUNQUV9GVFFfQ01ECQkJCTB4MDAxNDUzZjgKICNkZWZpbmUgQk5YMl9NQ1BfTUNQUV9GVFFfQ01EX09GRlNFVAkJCSAoMHgzZmZMPDwwKQogI2RlZmluZSBCTlgyX01DUF9NQ1BRX0ZUUV9DTURfV1JfVE9QCQkJICgxTDw8MTApCkBAIC0zNjk2LDYgKzYyNDEsOCBAQAogCiAvKiA1NzA4IFNlcmRlcyBQSFkgcmVnaXN0ZXJzICovCiAKKyNkZWZpbmUgQkNNNTcwOFNfQk1DUl9GT1JDRV8yNTAwCQkweDIwCisKICNkZWZpbmUgQkNNNTcwOFNfVVAxCQkJCTB4YgogCiAjZGVmaW5lIEJDTTU3MDhTX1VQMV8yRzUJCQkweDEKQEAgLTM4MDQsNiArNjM1MSw3IEBACiAjZGVmaW5lIElOVkFMSURfQ0lEX0FERFIgICAgICAgICAgICAweGZmZmZmZmZmCiAKICNkZWZpbmUgVFhfQ0lECQkxNgorI2RlZmluZSBUWF9UU1NfQ0lECTMyCiAjZGVmaW5lIFJYX0NJRAkJMAogCiAjZGVmaW5lIE1CX1RYX0NJRF9BRERSCU1CX0dFVF9DSURfQUREUihUWF9DSUQpCkBAIC0zODg5LDYgKzY0MzcsOCBAQAogCiAJdTMyCQl0eF9wcm9kX2JzZXEgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKIAl1MTYJCXR4X3Byb2Q7CisJdTMyCQl0eF9iaWR4X2FkZHI7CisJdTMyCQl0eF9ic2VxX2FkZHI7CiAKIAl1MTYJCXR4X2NvbnMgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChMMV9DQUNIRV9CWVRFUykpKTsKIAl1MTYJCWh3X3R4X2NvbnM7CkBAIC0zOTQ1LDYgKzY0OTUsNyBAQAogI2RlZmluZSBDSElQX05VTShicCkJCQkoKChicCktPmNoaXBfaWQpICYgMHhmZmZmMDAwMCkKICNkZWZpbmUgQ0hJUF9OVU1fNTcwNgkJCTB4NTcwNjAwMDAKICNkZWZpbmUgQ0hJUF9OVU1fNTcwOAkJCTB4NTcwODAwMDAKKyNkZWZpbmUgQ0hJUF9OVU1fNTcwOQkJCTB4NTcwOTAwMDAKIAogI2RlZmluZSBDSElQX1JFVihicCkJCQkoKChicCktPmNoaXBfaWQpICYgMHgwMDAwZjAwMCkKICNkZWZpbmUgQ0hJUF9SRVZfQXgJCQkweDAwMDAwMDAwCkBAIC00MDA3LDYgKzY1NTgsMTAgQEAKIAlzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jawkqc3RhdHNfYmxrOwogCWRtYV9hZGRyX3QJCXN0YXRzX2Jsa19tYXBwaW5nOwogCisJaW50CQkJY3R4X3BhZ2VzOworCXZvaWQJCQkqY3R4X2Jsa1s0XTsKKwlkbWFfYWRkcl90CQljdHhfYmxrX21hcHBpbmdbNF07CisKIAl1MzIJCQloY19jbWQ7CiAJdTMyCQkJcnhfbW9kZTsKIApAQCAtNDAzOCw2ICs2NTkzLDcgQEAKIAogCXU4CQkJc2VyZGVzX2FuX3BlbmRpbmc7CiAjZGVmaW5lIFNFUkRFU19BTl9USU1FT1VUCShIWiAvIDMpCisjZGVmaW5lIFNFUkRFU19GT1JDRURfVElNRU9VVAkoSFogLyAxMCkKIAogCXU4CQkJbWFjX2FkZHJbOF07CiAKQEAgLTQxMDQsNDEgKzY2NjAsNDMgQEAKIH07CiAKIHN0cnVjdCBmd19pbmZvIHsKLQl1MzIgdmVyX21ham9yOwotCXUzMiB2ZXJfbWlub3I7Ci0JdTMyIHZlcl9maXg7CisJY29uc3QgdTMyIHZlcl9tYWpvcjsKKwljb25zdCB1MzIgdmVyX21pbm9yOworCWNvbnN0IHUzMiB2ZXJfZml4OwogCi0JdTMyIHN0YXJ0X2FkZHI7CisJY29uc3QgdTMyIHN0YXJ0X2FkZHI7CiAKIAkvKiBUZXh0IHNlY3Rpb24uICovCi0JdTMyIHRleHRfYWRkcjsKLQl1MzIgdGV4dF9sZW47Ci0JdTMyIHRleHRfaW5kZXg7CisJY29uc3QgdTMyIHRleHRfYWRkcjsKKwljb25zdCB1MzIgdGV4dF9sZW47CisJY29uc3QgdTMyIHRleHRfaW5kZXg7CiAJdTMyICp0ZXh0OworCXU4ICpnel90ZXh0OworCWNvbnN0IHUzMiBnel90ZXh0X2xlbjsKIAogCS8qIERhdGEgc2VjdGlvbi4gKi8KLQl1MzIgZGF0YV9hZGRyOwotCXUzMiBkYXRhX2xlbjsKLQl1MzIgZGF0YV9pbmRleDsKLQl1MzIgKmRhdGE7CisJY29uc3QgdTMyIGRhdGFfYWRkcjsKKwljb25zdCB1MzIgZGF0YV9sZW47CisJY29uc3QgdTMyIGRhdGFfaW5kZXg7CisJY29uc3QgdTMyICpkYXRhOwogCiAJLyogU0JTUyBzZWN0aW9uLiAqLwotCXUzMiBzYnNzX2FkZHI7Ci0JdTMyIHNic3NfbGVuOwotCXUzMiBzYnNzX2luZGV4OwotCXUzMiAqc2JzczsKKwljb25zdCB1MzIgc2Jzc19hZGRyOworCWNvbnN0IHUzMiBzYnNzX2xlbjsKKwljb25zdCB1MzIgc2Jzc19pbmRleDsKKwljb25zdCB1MzIgKnNic3M7CiAKIAkvKiBCU1Mgc2VjdGlvbi4gKi8KLQl1MzIgYnNzX2FkZHI7Ci0JdTMyIGJzc19sZW47Ci0JdTMyIGJzc19pbmRleDsKLQl1MzIgKmJzczsKKwljb25zdCB1MzIgYnNzX2FkZHI7CisJY29uc3QgdTMyIGJzc19sZW47CisJY29uc3QgdTMyIGJzc19pbmRleDsKKwljb25zdCB1MzIgKmJzczsKIAogCS8qIFJlYWQtb25seSBzZWN0aW9uLiAqLwotCXUzMiByb2RhdGFfYWRkcjsKLQl1MzIgcm9kYXRhX2xlbjsKLQl1MzIgcm9kYXRhX2luZGV4OwotCXUzMiAqcm9kYXRhOworCWNvbnN0IHUzMiByb2RhdGFfYWRkcjsKKwljb25zdCB1MzIgcm9kYXRhX2xlbjsKKwljb25zdCB1MzIgcm9kYXRhX2luZGV4OworCWNvbnN0IHUzMiAqcm9kYXRhOwogfTsKIAogI2RlZmluZSBSVjJQX1BST0MxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Ml9mdy5oIGIvZHJpdmVycy9uZXQvYm54Ml9mdy5oCmluZGV4IDJkNzUzZGMuLjIxZDM2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJfZncuaAorKysgYi9kcml2ZXJzL25ldC9ibngyX2Z3LmgKQEAgLTE0LDIwICsxNCw2IEBACiAgKiBhY2NvbXBhbnlpbmcgaXQuCiAgKi8KIAotc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd1JlbGVhc2VNYWpvciA9IDB4MTsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndSZWxlYXNlTWlub3IgPSAweDA7Ci1zdGF0aWMgY29uc3QgaW50IGJueDJfQ09NX2IwNkZ3UmVsZWFzZUZpeCA9IDB4MDsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9DT01fYjA2RndTdGFydEFkZHIgPSAweDA4MDAwOGI0Owotc3RhdGljIGNvbnN0IHUzMiBibngyX0NPTV9iMDZGd1RleHRBZGRyID0gMHgwODAwMDAwMDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndUZXh0TGVuID0gMHg1N2JjOwotc3RhdGljIGNvbnN0IHUzMiBibngyX0NPTV9iMDZGd0RhdGFBZGRyID0gMHgwODAwNTg0MDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9DT01fYjA2RndEYXRhTGVuID0gMHgwOwotc3RhdGljIGNvbnN0IHUzMiBibngyX0NPTV9iMDZGd1JvZGF0YUFkZHIgPSAweDA4MDA1N2MwOwotc3RhdGljIGNvbnN0IGludCBibngyX0NPTV9iMDZGd1JvZGF0YUxlbiA9IDB4NTg7Ci1zdGF0aWMgY29uc3QgdTMyIGJueDJfQ09NX2IwNkZ3QnNzQWRkciA9IDB4MDgwMDU4NjA7Ci1zdGF0aWMgY29uc3QgaW50IGJueDJfQ09NX2IwNkZ3QnNzTGVuID0gMHg4ODsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9DT01fYjA2RndTYnNzQWRkciA9IDB4MDgwMDU4NDA7Ci1zdGF0aWMgY29uc3QgaW50IGJueDJfQ09NX2IwNkZ3U2Jzc0xlbiA9IDB4MWM7CiBzdGF0aWMgdTggYm54Ml9DT01fYjA2RndUZXh0W10gPSB7CiAJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHgwOSwgMHg4MywgMHg0MSwgMHg0NCwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKIAkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGVjLCAweDViLCAweDdkLCAweDZjLApAQCAtNjczLDM4OSArNjU5LDc1MiBAQAogc3RhdGljIHUzMiBibngyX0NPTV9iMDZGd0Jzc1soMHg4OC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyB1MzIgYm54Ml9DT01fYjA2RndTYnNzWygweDFjLzQpICsgMV0gPSB7IDB4MCB9OwogCi1zdGF0aWMgaW50IGJueDJfUlhQX2IwNkZ3UmVsZWFzZU1ham9yID0gMHgxOwotc3RhdGljIGludCBibngyX1JYUF9iMDZGd1JlbGVhc2VNaW5vciA9IDB4MDsKLXN0YXRpYyBpbnQgYm54Ml9SWFBfYjA2RndSZWxlYXNlRml4ID0gMHgwOwotc3RhdGljIHUzMiBibngyX1JYUF9iMDZGd1N0YXJ0QWRkciA9IDB4MDgwMDMxODQ7Ci1zdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3VGV4dEFkZHIgPSAweDA4MDAwMDAwOwotc3RhdGljIGludCBibngyX1JYUF9iMDZGd1RleHRMZW4gPSAweDU4OGM7Ci1zdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3RGF0YUFkZHIgPSAweDA4MDA1OGUwOwotc3RhdGljIGludCBibngyX1JYUF9iMDZGd0RhdGFMZW4gPSAweDA7Ci1zdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3Um9kYXRhQWRkciA9IDB4MDgwMDU4OTA7Ci1zdGF0aWMgaW50IGJueDJfUlhQX2IwNkZ3Um9kYXRhTGVuID0gMHgyODsKLXN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndCc3NBZGRyID0gMHgwODAwNTkwMDsKLXN0YXRpYyBpbnQgYm54Ml9SWFBfYjA2RndCc3NMZW4gPSAweDEzYTQ7Ci1zdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3U2Jzc0FkZHIgPSAweDA4MDA1OGUwOwotc3RhdGljIGludCBibngyX1JYUF9iMDZGd1Nic3NMZW4gPSAweDFjOworc3RhdGljIHN0cnVjdCBmd19pbmZvIGJueDJfY29tX2Z3XzA2ID0geworCS52ZXJfbWFqb3IJCQk9IDB4MSwKKwkudmVyX21pbm9yCQkJPSAweDAsCisJLnZlcl9maXgJCQk9IDB4MCwKKworCS5zdGFydF9hZGRyCQkJPSAweDA4MDAwOGI0LAorCisJLnRleHRfYWRkcgkJCT0gMHgwODAwMDAwMCwKKwkudGV4dF9sZW4JCQk9IDB4NTdiYywKKwkudGV4dF9pbmRleAkJCT0gMHgwLAorCS5nel90ZXh0CQkJPSBibngyX0NPTV9iMDZGd1RleHQsCisJLmd6X3RleHRfbGVuCQkJPSBzaXplb2YoYm54Ml9DT01fYjA2RndUZXh0KSwKKworCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDU4NDAsCisJLmRhdGFfbGVuCQkJPSAweDAsCisJLmRhdGFfaW5kZXgJCQk9IDB4MCwKKwkuZGF0YQkJCQk9IGJueDJfQ09NX2IwNkZ3RGF0YSwKKworCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDU4NDAsCisJLnNic3NfbGVuCQkJPSAweDFjLAorCS5zYnNzX2luZGV4CQkJPSAweDAsCisJLnNic3MJCQkJPSBibngyX0NPTV9iMDZGd1Nic3MsCisKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDU4NjAsCisJLmJzc19sZW4JCQk9IDB4ODgsCisJLmJzc19pbmRleAkJCT0gMHgwLAorCS5ic3MJCQkJPSBibngyX0NPTV9iMDZGd0JzcywKKworCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNTdjMCwKKwkucm9kYXRhX2xlbgkJCT0gMHg1OCwKKwkucm9kYXRhX2luZGV4CQkJPSAweDAsCisJLnJvZGF0YQkJCQk9IGJueDJfQ09NX2IwNkZ3Um9kYXRhLAorfTsKKwogc3RhdGljIHU4IGJueDJfUlhQX2IwNkZ3VGV4dFtdID0gewotCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4MDcsIDB4ODcsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCi0JMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhlZCwgMHg1YywgMHg1ZCwgMHg2YywKLQkweDFjLCAweGQ3LCAweDc1LCAweDNlLCAweGYzLCAweDQzLCAweDcxLCAweDQ5LCAweDkxLCAweGQ0LCAweDcwLCAweGI5LAotCTB4NjIsIDB4NTcsIDB4MTIsIDB4NjUsIDB4ZWQsIDB4OGEsIDB4NDMsIDB4NzEsIDB4NmQsIDB4MzEsIDB4Y2UsIDB4NTAsCi0JMHg1OCwgMHhkYiwgMHg4MiwgMHhiMSwgMHg0OCwgMHhjNywgMHhiMywgMHhhNCwgMHhjOCwgMHgyNCwgMHgwMiwgMHg0MiwKLQkweDFiLCAweDQyLCAweGFiLCAweGE0LCAweGE5LCAweGMxLCAweDkwLCAweDcyLCAweDkxLCAweDIyLCAweDJjLCAweGEwLAotCTB4MWEsIDB4NzksIDB4ZjAsIDB4NDMsIDB4MTAsIDB4MmYsIDB4NTYsIDB4M2YsIDB4YTYsIDB4ZDEsIDB4OGQsIDB4OTYsCi0JMHhiNiwgMHgxYywgMHg1MywgMHgwOCwgMHg4MiwgMHg4MiwgMHhlNSwgMHg1MiwgMHg1MiwgMHgwYiwgMHgyYywgMHhiNCwKLQkweDk2LCAweGVkLCAweDM2LCAweDdlLCAweGE4LCAweDIzLCAweDlhLCAweDkyLCAweDhkLCAweGE2LCAweDY4LCAweDgxLAotCTB4MjIsIDB4YWQsIDB4ZDEsIDB4ZjQsIDB4NGQsIDB4OTUsIDB4OWEsIDB4NGEsIDB4NzUsIDB4NWYsIDB4ZDQsIDB4YTIsCi0JMHg0OCwgMHhkYSwgMHg0NiwgMHhjZCwgMHhmNCwgMHhmYiwgMHhlZSwgMHhjYywgMHg4OCwgMHhkNCwgMHg5YSwgMHhiMiwKLQkweDJjLCAweDNiLCAweDBkLCAweDYyLCAweDc0LCAweDBlLCAweDMwLCAweGQ4LCAweGI5LCAweDdmLCAweGU3LCAweGVmLAotCTB4OWUsIDB4NzMsIDB4ZWUsIDB4MzksIDB4NzcsIDB4MjgsIDB4N2QsIDB4YTUsIDB4NDMsIDB4ZGEsIDB4MjUsIDB4ODQsCi0JMHg0ZSwgMHgzYywgMHg5OSwgMHhjMywgMHhjZiwgMHgzYywgMHhmZCwgMHhlMCwgMHhjMywgMHgwZiwgMHhlZSwgMHhjMSwKLQkweGViLCAweGIwLCAweGExLCAweDZkLCAweGQwLCAweGEzLCAweGZlLCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LAotCTB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsCi0JMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwKLQkweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LCAweDYyLCAweDg4LCAweDIxLCAweDg2LCAweDE4LAotCTB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsIDB4MjEsIDB4ODYsIDB4MTgsIDB4NjIsIDB4ODgsCi0JMHgyMSwgMHg4NiwgMHgxOCwgMHg2MiwgMHg4OCwgMHgyMSwgMHg4NiwgMHhmZiwgMHhlZiwgMHg2MCwgMHg4OCwgMHg1OCwKLQkweGZjLCAweGVkLCAweDBjLCAweDFmLCAweDQ5LCAweGU4LCAweDg1LCAweGNiLCAweDA3LCAweDNkLCAweDViLCAweDEyLAotCTB4NDYsIDB4NjEsIDB4NjksIDB4NjYsIDB4ZGEsIDB4MTYsIDB4NzEsIDB4ZWIsIDB4YmIsIDB4MzMsIDB4NDUsIDB4ZjksCi0JMHgxZiwgMHhiZiwgMHg5NCwgMHgzMiwgMHg4NSwgMHhmZCwgMHhkYiwgMHgwYiwgMHgzNywgMHg5ZiwgMHg3ZCwgMHhmMywKLQkweDkxLCAweGVjLCAweDhkLCAweDA1LCAweDQzLCAweDEyLCAweDU2LCAweGUxLCAweGU4LCAweGIwLCAweGI1LCAweDRiLAotCTB4MTIsIDB4N2QsIDB4NTgsIDB4ZjMsIDB4ZGQsIDB4YzEsIDB4Y2YsIDB4NTksIDB4ZDIsIDB4MTUsIDB4ZTEsIDB4YmEsCi0JMHhlZSwgMHhiZiwgMHgzOSwgMHg2OCwgMHhjOSwgMHgyYiwgMHg4ZCwgMHg5NCwgMHg1YywgMHg2OCwgMHg2YywgMHhkZiwKLQkweDI0LCAweDVkLCAweGQ5LCAweDUyLCAweDA5LCAweGZkLCAweDZlLCAweDhhLCAweGUzLCAweDk2LCAweDk0LCAweGFiLAotCTB4MmQsIDB4ZTIsIDB4MmEsIDB4YmEsIDB4N2QsIDB4NWEsIDB4NzEsIDB4ZmUsIDB4M2UsIDB4Y2QsIDB4OWIsIDB4N2YsCi0JMHg5ZSwgMHhmZiwgMHgxZSwgMHgyNCwgMHhhNSwgMHhjYiwgMHg3ZCwgMHg2OCwgMHhmNywgMHhhMSwgMHhjZCwgMHhmNywKLQkweDgxLCAweGY0LCAweDk0LCAweDk4LCAweDcyLCAweGE0LCAweDkxLCAweDkwLCAweGEzLCAweGQ1LCAweDhjLCAweGU4LAotCTB4MDUsIDB4NzEsIDB4YmQsIDB4YmMsIDB4OWQsIDB4MmUsIDB4YTMsIDB4NmYsIDB4ZWEsIDB4MDAsIDB4ZGIsIDB4MjksCi0JMHhlMCwgMHhmOSwgMHgwZSwgMHhkNywgMHg1OSwgMHg1ZSwgMHg1ZSwgMHg0YSwgMHhiNywgMHhjNiwgMHgxNCwgMHgwZCwKLQkweDhlLCAweGIxLCAweDBmLCAweGJmLCAweDU4LCAweDVmLCAweGFlLCAweDc2LCAweDAwLCAweDZmLCAweGQ2LCAweDcxLAotCTB4NDEsIDB4ZGMsIDB4NzMsIDB4MmMsIDB4ZDAsIDB4ZjYsIDB4ZmQsIDB4ZGYsIDB4NzUsIDB4MzIsIDB4YjIsIDB4ZTIsCi0JMHg3NCwgMHg4MSwgMHhhNywgMHgxNiwgMHg2OSwgMHhiNSwgMHhjNSwgMHhkMiwgMHgwYiwgMHhiNiwgMHhiNSwgMHgyMiwKLQkweDZkLCAweDFjLCAweGViLCAweDM0LCAweDBhLCAweGJlLCAweDNmLCAweDlkLCAweDk3LCAweGFlLCAweGEwLCAweDZmLAotCTB4YjcsIDB4ZTIsIDB4NjMsIDB4NzIsIDB4NDIsIDB4YzMsIDB4YmMsIDB4NTcsIDB4NDksIDB4MGYsIDB4M2EsIDB4ZTIsCi0JMHgzYiwgMHg3ZiwgMHhmMywgMHg1MiwgMHhhYywgMHg2YywgMHg5NywgMHhjOSwgMHg1NCwgMHhmNiwgMHhhMCwgMHgxYiwKLQkweGQwLCAweDc0LCAweDNkLCAweDY3LCAweDJiLCAweDcwLCAweDZhLCAweGUwLCAweDRmLCAweGRiLCAweDgxLCAweGY1LAotCTB4ZWUsIDB4MGEsIDB4NjgsIDB4MWEsIDB4ODUsIDB4Y2QsIDB4NjIsIDB4NmMsIDB4NjYsIDB4OWYsIDB4ZTgsIDB4M2IsCi0JMHg4NywgMHg5MywgMHhlMSwgMHg3OCwgMHg5NywgMHgzNiwgMHgzMiwgMHg2ZiwgMHg4OCwgMHg2ZSwgMHhmZiwgMHg4MSwKLQkweGU2LCAweGQ1LCAweDdhLCAweGU1LCAweGQ4LCAweGJjLCAweDhlLCAweDc3LCAweDVkLCAweGFlLCAweGU2LCAweDRiLAotCTB4OWEsIDB4ZGIsIDB4YTgsIDB4NjgsIDB4ZGUsIDB4ZDksIDB4NTksIDB4YWQsIDB4NzgsIDB4ZDYsIDB4OTQsIDB4YTMsCi0JMHhiNiwgMHg3ZiwgMHhlMSwgMHhiNCwgMHg3MywgMHg0MiwgMHgxYiwgMHgzOSwgMHg3YiwgMHg0NiwgMHgxYiwgMHgzZCwKLQkweGZiLCAweDg2LCAweDM2LCAweGRlLCAweGQ4LCAweGIyLCAweDQ5LCAweGRhLCAweGIzLCAweGQwLCAweDFlLCAweDcxLAotCTB4OTAsIDB4YmYsIDB4NGYsIDB4ODcsIDB4YmEsIDB4ZWMsIDB4YTIsIDB4ZGUsIDB4NGEsIDB4ZTQsIDB4N2QsIDB4OWYsCi0JMHhmMywgMHg4NiwgMHhlNiwgMHg1NSwgMHg2ZCwgMHg4YiwgMHhmYiwgMHhlNiwgMHhhNiwgMHgyMiwgMHgxYSwgMHhlZCwKLQkweDcyLCAweDc0LCAweGRlLCAweDk0LCAweDYzLCAweGQ1LCAweDk0LCAweDNjLCAweDU3LCAweDJkLCAweDI5LCAweDVhLAotCTB4ODYsIDB4NWQsIDB4ZDIsIDB4YmMsIDB4MDYsIDB4YzcsIDB4MmIsIDB4YTAsIDB4NzUsIDB4NDIsIDB4ZGIsIDB4MDcsCi0JMHg5YSwgMHhkZSwgMHg1OSwgMHgyOSwgMHg1ZCwgMHg3MSwgMHhlNiwgMHg0MCwgMHhhZiwgMHgwMywgMHg3OCwgMHhmZiwKLQkweDU4LCAweDFiLCAweDZkLCAweGY0LCAweDZhLCAweGRlLCAweGM5LCAweDliLCAweGUyLCAweDM5LCAweDU5LCAweGViLAotCTB4NGIsIDB4NjIsIDB4YmEsIDB4YjAsIDB4MDEsIDB4YzgsIDB4MGMsIDB4ZmQsIDB4MzgsIDB4ZDAsIDB4NDksIDB4Y2EsCi0JMHhmNywgMHhmNSwgMHg4MiwgMHhmZiwgMHgyYywgMHg3NCwgMHg2ZiwgMHg1ZCwgMHhhMSwgMHhmYywgMHg4ZCwgMHg1ZSwKLQkweDI5LCAweGNmLCAweDUzLCAweGQ3LCAweGE2LCAweDM2LCAweDUyLCAweGY1LCAweDJmLCAweDc4LCAweDhlLCAweGY0LAotCTB4MTksIDB4ZTIsIDB4ZmIsIDB4NDcsIDB4OWQsIDB4ODEsIDB4ZjQsIDB4MjEsIDB4MzksIDB4MDMsIDB4ZGMsIDB4NzUsCi0JMHhhZCwgMHhkOCwgMHhhMCwgMHhhZSwgMHhjMSwgMHhkZiwgMHgyZCwgMHgzOSwgMHgwMiwgMHhiZCwgMHgxNSwgMHg5ZCwKLQkweDVlLCAweDk5LCAweGI0LCAweGIyLCAweDJlLCAweGY2LCAweDY4LCAweDUzLCAweDIwLCAweDU3LCAweDMyLCAweGI0LAotCTB4MTcsIDB4ZDIsIDB4ZTcsIDB4ZGUsIDB4NjcsIDB4ZDMsIDB4OWUsIDB4YTEsIDB4Y2IsIDB4NTMsIDB4MmYsIDB4M2QsCi0JMHhkZiwgMHhiMywgMHgzOCwgMHhiNCwgMHg5MSwgMHgzMiwgMHg0MywgMHhmZiwgMHhmMiwgMHg0NSwgMHhjZiwgMHhmNiwKLQkweGI2LCAweGI0LCAweDQ4LCAweDI5LCAweDZkLCAweDQ4LCAweDE2LCAweGZiLCAweGI0LCAweDQzLCAweDRlLCAweDNiLAotCTB4MjIsIDB4ODcsIDB4MmEsIDB4ZDAsIDB4OGQsIDB4NmQsIDB4NWEsIDB4OGIsIDB4NjIsIDB4NjcsIDB4Y2EsIDB4MzIsCi0JMHg1MCwgMHgzMiwgMHg3NSwgMHg3NCwgMHgyNiwgMHg0OSwgMHg5NywgMHgzYSwgMHhkMiwgMHhlNSwgMHg3YSwgMHg5ZSwKLQkweDdhLCAweGEyLCAweDNkLCAweDdmLCAweDI4LCAweDVkLCAweDY5LCAweGFiLCAweGJhLCAweDVhLCAweGQ1LCAweGQzLAotCTB4ZjgsIDB4MmYsIDB4NWQsIDB4NGYsIDB4ZDQsIDB4YzksIDB4NzIsIDB4MjgsIDB4YjcsIDB4MDMsIDB4ZGMsIDB4OGYsCi0JMHg0MCwgMHg1ZiwgMHhlMiwgMHhlYSwgMHhjMywgMHgwZiwgMHhiMSwgMHg2ZiwgMHg5MywgMHg1MSwgMHhiMCwgMHhkMywKLQkweDE3LCAweDYxLCAweDE0LCAweDdhLCAweDYxLCAweDM3LCAweDY0LCAweDE5LCAweGE2LCAweGVlLCAweGUwLCAweGMzLAotCTB4MWYsIDB4NDksIDB4NWUsIDB4ZjksIDB4ZDUsIDB4OTAsIDB4OTcsIDB4ZmMsIDB4ZGIsIDB4MzIsIDB4NTUsIDB4NDksCi0JMHg4MCwgMHgwNiwgMHg2NSwgMHhkNCwgMHhlNSwgMHhiZCwgMHg3YywgMHg2NCwgMHgxYiwgMHg3YiwgMHgyMCwgMHg1ZiwKLQkweDVlLCAweGE2LCAweGJlLCAweDQ1LCAweDdmLCAweGEyLCAweGZkLCAweGYzLCAweDlkLCAweGIyLCAweGZlLCAweGNjLAotCTB4YmYsIDB4ZWUsIDB4N2MsIDB4OTIsIDB4ZjYsIDB4OTYsIDB4N2MsIDB4MjcsIDB4ZTQsIDB4NzgsIDB4MzUsIDB4YzksCi0JMHgzZCwgMHhkNCwgMHg1NiwgMHg1NCwgMHg2YywgMHg4YSwgMHg2NCwgMHgxNCwgMHhkZCwgMHgyOCwgMHg3NCwgMHg0OCwKLQkweDUxLCAweGVkLCAweGY3LCAweDVlLCAweGQwLCAweDQzLCAweDJjLCAweGE4LCAweGYyLCAweGJkLCAweGEwLCAweDY0LAotCTB4OWIsIDB4YjYsIDB4ZWQsIDB4Y2MsIDB4MTEsIDB4YzksIDB4YzIsIDB4YmUsIDB4NDUsIDB4OGUsIDB4Y2MsIDB4OTksCi0JMHgzMiwgMHg2ZCwgMHhmZiwgMHg2MywgMHhhNywgMHhiNCwgMHgyZiwgMHhkZiwgMHg2ZiwgMHhhOCwgMHhiOCwgMHhhZSwKLQkweGY3LCAweDZlLCAweDkwLCAweDRkLCAweGUwLCAweDc3LCAweGY5LCAweDdlLCAweDVkLCAweGU0LCAweGE2LCAweDU5LAotCTB4YzgsIDB4NWEsIDB4MjMsIDB4MDgsIDB4ZjYsIDB4NDYsIDB4ODEsIDB4YjEsIDB4NGMsIDB4NDMsIDB4MmMsIDB4OTMsCi0JMHg0NCwgMHg4YiwgMHg0ZCwgMHg3ZCwgMHhmOSwgMHhmZSwgMHhmOCwgMHhmMCwgMHhkZCwgMHhmNSwgMHg3NSwgMHg2NCwKLQkweDllLCAweGI0LCAweGE5LCAweDJmLCAweGM2LCAweGE4LCAweDEyLCAweGY0LCAweGMxLCAweGY4LCAweDc0LCAweGJiLAotCTB4YWUsIDB4OGEsIDB4YTEsIDB4YWUsIDB4NDYsIDB4ZmUsIDB4ZWYsIDB4ZWQsIDB4YzIsIDB4ZjUsIDB4YWEsIDB4YTIsCi0JMHg3OSwgMHhjZSwgMHhiYiwgMHhhMSwgMHgyZiwgMHhkOCwgMHgzMiwgMHgwMiwgMHg3ZiwgMHgzNywgMHhlYywgMHg0ZiwKLQkweGNiLCAweDkxLCAweDU0LCAweDc2LCAweGMyLCAweDk1LCAweGMwLCAweGU2LCAweGFmLCAweGFkLCAweGIxLCAweGY5LAotCTB4ZDEsIDB4YmIsIDB4YzgsIDB4NzUsIDB4M2MsIDB4OTQsIDB4Y2IsIDB4MGQsIDB4ZTUsIDB4MWEsIDB4ODUsIDB4NWMsCi0JMHg2MywgMHg5MCwgMHg2YiwgMHhlNSwgMHgyMywgMHhjOCwgMHhiNSwgMHhmMiwgMHg5MSwgMHhlNSwgMHhkMiwgMHhhNCwKLQkweGVjLCAweDNjLCAweDA4LCAweDVhLCAweGE2LCAweGZjLCAweGFiLCAweDEzLCAweGQ4LCAweGYyLCAweGJmLCAweDM4LAotCTB4OWYsIDB4MTQsIDB4MTksIDB4N2MsIDB4N2YsIDB4NzAsIDB4ZDgsIDB4MTYsIDB4ZWYsIDB4NWIsIDB4ZTAsIDB4ZDUsCi0JMHg3MSwgMHg0MCwgMHg4YiwgMHhlZiwgMHhlZiwgMHg5NywgMHhlMSwgMHg2ZSwgMHhmZSwgMHgzOCwgMHg4YiwgMHg3ZCwKLQkweDVkLCAweGNmLCAweDFmLCAweDI5LCAweDg3LCAweDNlLCAweDdjLCAweGVmLCAweGZlLCAweGE4LCAweDZiLCAweDFmLAotCTB4NTUsIDB4MGUsIDB4YzYsIDB4OWMsIDB4NGYsIDB4MzUsIDB4OWQsIDB4YWIsIDB4MWYsIDB4NTYsIDB4ODYsIDB4ZjUsCi0JMHg2MywgMHhjYSwgMHgyZiwgMHg0ZiwgMHg4NiwgMHhjNywgMHg2NCwgMHg3MiwgMHgzMywgMHhlZCwgMHhhOSwgMHhhNCwKLQkweDhkLCAweDBjLCAweDkyLCAweGVmLCAweGI1LCAweGZjLCAweDRhLCAweDI2LCAweGUwLCAweDBkLCAweDM5LCAweGQxLAotCTB4ZDIsIDB4NDYsIDB4MzksIDB4YjIsIDB4NjAsIDB4NDksIDB4NjksIDB4ZTksIDB4NGUsIDB4NzEsIDB4NTcsIDB4MDMsCi0JMHg2ZiwgMHhiNCwgMHg0NywgMHhmNiwgMHg3ZCwgMHhkMiwgMHg3YywgMHgyYSwgMHhjOCwgMHgyYiwgMHgyZSwgMHg1NCwKLQkweDkxLCAweDgzLCAweDU2LCAweDEzLCAweDcyLCAweGQ5LCAweDQ4LCAweGNiLCAweDliLCAweDgzLCAweDg3LCAweGU1LAotCTB4ZjMsIDB4ZDUsIDB4MjQsIDB4ZTgsIDB4MzEsIDB4OWYsIDB4MmMsIDB4ZTcsIDB4MTAsIDB4MTcsIDB4YjUsIDB4YjIsCi0JMHg2MywgMHgwOCwgMHg3OSwgMHhhZiwgMHhkOSwgMHg5YywgMHgxMywgMHhjNCwgMHg5NiwgMHg3MiwgMHgxMCwgMHg4MywKLQkweDVkLCAweDZmLCAweDUwLCAweGU1LCAweDE0LCAweDkwLCAweDRmLCAweDY0LCAweDBjLCAweGIxLCAweGI3LCAweDY2LAotCTB4YjMsIDB4Y2QsIDB4ZmUsIDB4YTAsIDB4ZWYsIDB4YjMsIDB4OTUsIDB4NWUsIDB4YWQsIDB4YzgsIDB4YmMsIDB4NjQsCi0JMHhmMCwgMHhhNiwgMHg0YywgMHgzYiwgMHg0MSwgMHhkZiwgMHhlNywgMHgyYSwgMHhhMywgMHg5YiwgMHg5OCwgMHgxZiwKLQkweDFhLCAweDA1LCAweGM5LCAweDk0LCAweDlkLCAweGY3LCAweDdjLCAweGQ3LCAweGJhLCAweDdkLCAweGNkLCAweGZhLAotCTB4NzgsIDB4YjIsIDB4MTMsIDB4ODEsIDB4Y2UsIDB4NDUsIDB4ZmIsIDB4YWEsIDB4YWQsIDB4ZjcsIDB4YjYsIDB4NGEsCi0JMHgwOSwgMHgyNywgMHg1ZCwgMHhkNiwgMHgxYSwgMHg0NywgMHhlNywgMHhiZSwgMHg0YSwgMHg3OSwgMHg1YiwgMHhhYiwKLQkweGRjLCAweDM0LCAweDgwLCAweDNmLCAweDZkLCAweDY4LCAweDYyLCAweDFlLCAweGFhLCAweDk0LCAweGJiLCAweGQ5LAotCTB4YTYsIDB4YmUsIDB4NzQsIDB4NGQsIDB4MTIsIDB4YTMsIDB4MTUsIDB4NWYsIDB4YWUsIDB4M2EsIDB4NDEsIDB4ZWUsCi0JMHg2MywgMHg2OCwgMHg3YSwgMHg2ZiwgMHg1YiwgMHhiOCwgMHg1NiwgMHhkNywgMHg3NiwgMHgzOSwgMHg5NywgMHg0NCwKLQkweDNhLCAweDBlLCAweDU1LCAweGM0LCAweDJhLCAweDU2LCAweDc2LCAweDM5LCAweDZmLCAweDRiLCAweGI5LCAweGE3LAotCTB4NmQsIDB4NzUsIDB4NWQsIDB4OGEsIDB4ZWIsIDB4NzYsIDB4MGUsIDB4YWYsIDB4OWQsIDB4YmIsIDB4Y2IsIDB4YjksCi0JMHgyOCwgMHhlNSwgMHgyZCwgMHg2ZCwgMHhhYiwgMHhiNCwgMHhkMiwgMHg1OCwgMHhkYiwgMHgxNywgMHhhYywgMHhlNSwKLQkweGY4LCAweDY2LCAweDcxLCAweGJiLCAweDM5LCAweDQ3LCAweGVmLCAweDZkLCAweGJmLCAweDQ1LCAweDQzLCAweDMyLAotCTB4YzUsIDB4NGEsIDB4YjksIDB4YTcsIDB4N2QsIDB4MTUsIDB4YWYsIDB4NGQsIDB4YmMsIDB4ZGUsIDB4MWEsIDB4YmMsCi0JMHhjNCwgMHhkOSwgMHhiZSwgMHg4YSwgMHgzMywgMHgwNywgMHg5YywgMHg0MywgMHhhYiwgMHgzOCwgMHgzOSwgMHg3ZSwKLQkweDU4LCAweDhhLCAweDM4LCAweGQzLCAweDVhLCAweDBhLCAweDMyLCAweGJjLCAweDU0LCAweGM5LCAweDQ4LCAweDc5LAotCTB4MjgsIDB4MDEsIDB4ZGQsIDB4ZjcsIDB4MWYsIDB4ZmMsIDB4OWEsIDB4YWEsIDB4NDMsIDB4Y2MsIDB4NjEsIDB4MGYsCi0JMHhiYSwgMHgzMiwgMHg1NSwgMHg1ZSwgMHg4NywgMHhkOCwgMHgwOCwgMHhkYiwgMHhmOCwgMHg1YSwgMHg1ZCwgMHg4NiwKLQkweDE3LCAweGViLCAweGE2LCAweDFjLCAweDZmLCAweDcwLCAweGJmLCAweDk4LCAweGUzLCAweDA1LCAweDc1LCAweGM2LAotCTB4ODUsIDB4NDYsIDB4NGUsIDB4ZGIsIDB4ODcsIDB4YmQsIDB4NjYsIDB4OWQsIDB4YjAsIDB4YWYsIDB4NjEsIDB4NmEsCi0JMHhhMywgMHgzYywgMHgxZiwgMHg4MCwgMHg5NywgMHg3NiwgMHg3ZSwgMHhhYywgMHg0MSwgMHhkYiwgMHg3OSwgMHgwMywKLQkweGI2LCAweDQxLCAweGNlLCAweGEzLCAweDljLCAweGJkLCAweDk1LCAweGI5LCAweDUzLCAweDY2LCAweGQxLCAweDUxLAotCTB4NzUsIDB4ODgsIDB4NTYsIDB4Y2IsIDB4NzcsIDB4MjAsIDB4MDcsIDB4NGQsIDB4YTAsIDB4ZDYsIDB4ODAsIDB4Y2QsCi0JMHhkYiwgMHg3OCwgMHg2ZiwgMHg3MCwgMHhkZSwgMHgzMiwgMHhlNiwgMHg2ZCwgMHhlMCwgMHgzYywgMHhlYywgMHhjZCwKLQkweDI1LCAweGU1LCAweDBmLCAweGE2LCAweGNkLCAweGYxLCAweDc3LCAweGIxLCAweGM3LCAweDY4LCAweGQ3LCAweDU5LAotCTB4NTcsIDB4NTgsIDB4MDIsIDB4NWYsIDB4YzEsIDB4M2UsIDB4YTIsIDB4NmUsIDB4NDgsIDB4ZWQsIDB4NjAsIDB4N2UsCi0JMHg4ZiwgMHhiOSwgMHgxOSwgMHhjYywgMHhjZCwgMHg2NiwgMHgxOCwgMHhjZiwgMHgzZCwgMHhmYiwgMHg5OSwgMHgwZSwKLQkweGU5LCAweDQyLCAweGJiLCAweGNlLCAweDM1LCAweGQ5LCAweDBjLCAweDcyLCAweDViLCAweGRmLCAweGNiLCAweGI3LAotCTB4YzksIDB4NGEsIDB4Y2EsIDB4YmYsIDB4NjAsIDB4ZDgsIDB4ZDEsIDB4ZGMsIDB4MDgsIDB4NmYsIDB4ZjMsIDB4NWMsCi0JMHhlNiwgMHhjNSwgMHhjNCwgMHhiZCwgMHgyMSwgMHhjYywgMHg4MywgMHhjNywgMHhjNSwgMHg2ZCwgMHhmYywgMHg0OSwKLQkweGI3LCAweDc0LCAweGI5LCAweGY4LCAweDhkLCAweGU2LCAweDRjLCAweDZmLCAweDBlLCAweDZhLCAweDJlLCAweGJlLAotCTB4YjcsIDB4NTAsIDB4M2UsIDB4MTcsIDB4ZTcsIDB4YTEsIDB4NTYsIDB4YWMsIDB4NjYsIDB4MjYsIDB4NTksIDB4MWYsCi0JMHgxNSwgMHhlYiwgMHg2YywgMHhlZiwgMHg4NSwgMHgzZiwgMHgwNCwgMHg3NSwgMHhkNywgMHg4NSwgMHg1YiwgMHhiZSwKLQkweDcwLCAweDE5LCAweDdhLCAweDRiLCAweDQzLCAweDZmLCAweDI5LCAweDM5LCAweGRmLCAweDYwLCAweDlkLCAweGU2LAotCTB4NDIsIDB4NWYsIDB4MTksIDB4ZjEsIDB4MWEsIDB4ZTMsIDB4NTgsIDB4MmIsIDB4ODcsIDB4ODEsIDB4MDMsIDB4M2EsCi0JMHgxNywgMHg0NywgMHgyZiwgMHg2NCwgMHg2NSwgMHhjYSwgMHhkYSwgMHgxZCwgMHhmMSwgMHgwMCwgMHg1YywgMHg4OCwKLQkweDFmLCAweDg1LCAweDM2LCAweGY0LCAweGYxLCAweDFkLCAweDlhLCAweDUzLCAweGZmLCAweDg2LCAweDdmLCAweDk0LAotCTB4ZWQsIDB4MDksIDB4YmQsIDB4MzAsIDB4ZDYsIDB4ZDQsIDB4YmYsIDB4NmUsIDB4ZmMsIDB4YTEsIDB4MWMsIDB4NjgsCi0JMHgzMywgMHgwNiwgMHgzMSwgMHhmZSwgMHhlOCwgMHhhOCwgMHhmMywgMHgxOCwgMHg4YiwgMHg0OCwgMHhkNywgMHg5MiwKLQkweDIzLCAweDRiLCAweDIzLCAweGRjLCAweDM3LCAweDhiLCAweGYxLCAweGE3LCAweDVjLCAweGU3LCAweDllLCAweDI5LAotCTB4NWMsIDB4YzAsIDB4MTksIDB4YWQsIDB4ZjEsIDB4ZmQsIDB4MTEsIDB4ODcsIDB4NmIsIDB4N2MsIDB4OTksIDB4NzAsCi0JMHgzYSwgMHhjNCwgMHg0OCwgMHg5NiwgMHhiNCwgMHhjNywgMHgwNywgMHgxMSwgMHg3YiwgMHgxZSwgMHhlMCwgMHgzZSwKLQkweDMyLCAweDA2LCAweDZkLCAweDE3LCAweGIwLCAweGVhLCAweGI0LCAweDNjLCAweDNjLCAweGM4LCAweDc1LCAweGEwLAotCTB4ZGQsIDB4MmEsIDB4N2EsIDB4OTIsIDB4MzQsIDB4ZjMsIDB4MjEsIDB4NGYsIDB4NDMsIDB4ZGQsIDB4ODEsIDB4YmUsCi0JMHgwNiwgMHhhYywgMHg0MCwgMHg3ZiwgMHg5ZiwgMHhlOSwgMHg1ZSwgMHhkNSwgMHgxZiwgMHhkNywgMHgzNSwgMHhmMywKLQkweGNiLCAweDE4LCAweDk2LCAweDkwLCAweDgxLCAweDMzLCAweDFiLCAweDY1LCAweGU3LCAweGEyLCAweDI1LCAweGY2LAotCTB4OTksIDB4NTUsIDB4ZmUsIDB4NzYsIDB4OWUsIDB4NWIsIDB4Y2IsIDB4NWYsIDB4ZjQsIDB4N2YsIDB4MTUsIDB4NWMsCi0JMHhkMCwgMHhjNSwgMHg4ZSwgMHhmYSwgMHgxZSwgMHg0YiwgMHgwNSwgMHhiOCwgMHhhMywgMHhmNiwgMHg3YiwgMHhlMSwKLQkweDVlLCAweGYxLCAweGZkLCAweDk5LCAweDcwLCAweDRmLCAweGIwLCAweDA3LCAweDg4LCAweDk1LCAweGU3LCAweDZmLAotCTB4YzUsIDB4YTksIDB4MGMsIDB4ZjYsIDB4MDYsIDB4YjYsIDB4YTcsIDB4ZTIsIDB4MTEsIDB4ZTMsIDB4MTgsIDB4ZWQsCi0JMHhiYiwgMHg2MywgMHhkMiwgMHgyYywgMHhiMCwgMHg4ZSwgMHhlNiwgMHgzZSwgMHhjOSwgMHg0NCwgMHhiOSwgMHgyMiwKLQkweGE1LCAweGFkLCAweDg1LCAweDY3LCAweDdkLCAweGQ4LCAweGNmLCAweGE0LCAweGE1LCAweDZjLCAweGFmLCAweDYzLAotCTB4YWYsIDB4OTcsIDB4MzcsIDB4YTAsIDB4MWIsIDB4OGMsIDB4YzEsIDB4MjYsIDB4ZjUsIDB4NDIsIDB4NDIsIDB4OGEsCi0JMHg4ZCwgMHg0NCwgMHhjMiwgMHgzYywgMHgzMSwgMHhmMCwgMHgyMywgMHhjZiwgMHg0OCwgMHgyNCwgMHhmNCwgMHgxMywKLQkweDgxLCAweDlkLCAweDRkLCAweGQ2LCAweDZmLCAweDIwLCAweDU2LCAweDZhLCAweDcyLCAweDc0LCAweGU4LCAweDg2LAotCTB4Y2YsIDB4MWEsIDB4ZDgsIDB4ZGIsIDB4MGIsIDB4OWIsIDB4MWIsIDB4ODIsIDB4Y2YsIDB4ODAsIDB4OGYsIDB4NzIsCi0JMHhhMywgMHhhMywgMHgzNywgMHhlMCwgMHhlZCwgMHgyYiwgMHgxMSwgMHg4ZiwgMHhhNiwgMHg4ZSwgMHhkYywgMHhkMywKLQkweGNiLCAweGZiLCAweGJlLCAweDUxLCAweGQ4LCAweDkwLCAweDk4LCAweGNlLCAweDhmLCAweDZmLCAweGQxLCAweGNmLAotCTB4ZWQsIDB4ZGYsIDB4NjIsIDB4OWMsIDB4MmIsIDB4NmQsIDB4MDEsIDB4M2UsIDB4ZGQsIDB4Y2IsIDB4ZTMsIDB4ZjcsCi0JMHg5YywgMHhjOCwgMHg0NCwgMHgxNSwgMHgzYSwgMHhkZiwgMHgwMywgMHgzZCwgMHg1OSwgMHhmMCwgMHhjNSwgMHgzZCwKLQkweGE2LCAweGNhLCAweGQxLCAweGY1LCAweDNkLCAweDJmLCAweDZlLCAweDBhLCAweDcwLCAweGYwLCAweGZkLCAweDI3LAotCTB4N2UsIDB4NzAsIDB4ODYsIDB4NWUsIDB4MGUsIDB4ZmIsIDB4N2UsIDB4M2YsIDB4ZGMsIDB4ODcsIDB4NWYsIDB4NDUsCi0JMHhiOSwgMHg3OCwgMHg1ZSwgMHg0NCwgMHhiMiwgMHhhZCwgMHgzZCwgMHgzNywgMHhiMiwgMHhlMywgMHgyNSwgMHg5YywKLQkweDMzLCAweGE3LCAweDFkLCAweGRmLCAweDdmLCAweDA3LCAweGNmLCAweDM1LCAweGE3LCAweGQ5LCAweDQ2LCAweGRlLAotCTB4N2YsIDB4ZjYsIDB4MzEsIDB4MDcsIDB4ZjgsIDB4MmMsIDB4Y2UsIDB4YmQsIDB4ZDEsIDB4YTYsIDB4YjMsIDB4ZmYsCi0JMHg1ZSwgMHhjZiwgMHhiZCwgMHg3YiwgMHgzZiwgMHhmYiwgMHhjOSwgMHhmMywgMHgxZCwgMHg3ZCwgMHhlZiwgMHgwMywKLQkweGNlLCAweGZlLCAweDBmLCAweDVjLCAweDc3LCAweDBmLCAweDNlLCAweDFiLCAweGQ4LCAweDZkLCAweGIxLCAweGQxLAotCTB4MWMsIDB4NWYsIDB4ZWUsIDB4ZDUsIDB4N2YsIDB4N2YsIDB4YWQsIDB4ZmIsIDB4NzYsIDB4ZmYsIDB4YjUsIDB4YmIsCi0JMHg2ZiwgMHhmNywgMHhkZiwgMHhjZCwgMHhkZCwgMHhiZiwgMHgxOCwgMHhmZiwgMHhjZCwgMHgwMSwgMHgwZiwgMHg3ZCwKLQkweDcwLCAweGFkLCAweGZmLCAweGFlLCAweGU3LCAweDkzLCAweGQ0LCAweGY3LCAweGYzLCAweDNkLCAweGU1LCAweGExLAotCTB4Y2UsIDB4MzAsIDB4MWYsIDB4NTIsIDB4ZTcsIDB4ZjUsIDB4MTcsIDB4YTcsIDB4NmQsIDB4ZWYsIDB4N2UsIDB4NTMsCi0JMHg0YSwgMHhiOSwgMHgxNiwgMHhjOSwgMHhlNiwgMHg2YSwgMHhiMiwgMHg0MywgMHg4ZSwgMHgzYiwgMHgyMiwgMHg0YiwKLQkweGFhLCAweDE2LCAweDMxLCAweDUxLCAweDhiLCAweDBmLCAweGEwLCAweDNlLCAweDBiLCAweGY0LCAweGJhLCAweGE0LAotCTB4ZjQsIDB4ZjIsIDB4MDIsIDB4NzgsIDB4ODksIDB4ZjAsIDB4NzQsIDB4ZGQsIDB4MDUsIDB4MGYsIDB4NzEsIDB4MTAsCi0JMHgxNywgMHhmMSwgMHgwYywgMHhlMiwgMHg3YywgMHhiNywgMHhkNywgMHhjMSwgMHg4NSwgMHg3MywgMHhlYSwgMHgyNSwKLQkweGQ0LCAweDY0LCAweGI2LCAweGRlLCAweGEzLCAweDA3LCAweDY3LCAweGIyLCAweDViLCAweDk2LCAweGRkLCAweGU5LAotCTB4ZWIsIDB4ZjIsIDB4MDUsIDB4OWUsIDB4NTksIDB4MGEsIDB4YWUsIDB4Y2UsIDB4MjEsIDB4NTYsIDB4MGYsIDB4OGQsCi0JMHg4NSwgMHg3NSwgMHhkMiwgMHhkYywgMHg0MSwgMHhjZiwgMHg4ZSwgMHhlZSwgMHg0OSwgMHg3OCwgMHg0NywgMHg5MiwKLQkweDkwLCAweDkyLCAweDlhLCAweGI1LCAweDA0LCAweDFkLCAweDY4LCAweDcyLCAweDBkLCAweDY3LCAweGQwLCAweGQ1LAotCTB4YjksIDB4NzYsIDB4ZTAsIDB4NDUsIDB4ZWUsIDB4NzcsIDB4MjAsIDB4YmIsIDB4NTcsIDB4YjQsIDB4N2UsIDB4YWIsCi0JMHg1NSwgMHg2YiwgMHg4NywgMHgyZiwgMHg2NSwgMHhjNCwgMHg1NSwgMHg2ZCwgMHg5ZSwgMHhkMywgMHhhNywgMHg2NiwKLQkweDE2LCAweDJiLCAweGM4LCAweDAzLCAweDZkLCAweDljLCAweGFmLCAweDc5LCAweGJjLCAweGQ3LCAweDQ5LCAweDQzLAotCTB4OTMsIDB4MmIsIDB4NzMsIDB4YmEsIDB4ZmMsIDB4ZDMsIDB4OWMsIDB4MjEsIDB4ZmYsIDB4OGMsIDB4M2EsIDB4ZjQsCi0JMHg5YSwgMHg3ZCwgMHg2YSwgMHhlNiwgMHhiNCwgMHgyZCwgMHhmNywgMHg4MSwgMHhkNSwgMHhmMCwgMHgwZSwgMHg0ZiwKLQkweDc2LCAweDlhLCAweDQyLCAweDViLCAweDFkLCAweDQ4LCAweGZmLCAweDhlLCAweDIwLCAweGZmLCAweGMxLCAweDlhLAotCTB4MmIsIDB4NzMsIDB4YTQsIDB4YjUsIDB4NzYsIDB4OGQsIDB4ZjQsIDB4MjIsIDB4MWYsIDB4ODMsIDB4NWQsIDB4MGYsCi0JMHgzMCwgMHgyNywgMHhlMiwgMHg3YywgMHhkNCwgMHhhYiwgMHgwMywgMHhkNiwgMHgzZSwgMHhjNSwgMHg1YiwgMHg0MiwKLQkweDE2LCAweGViLCAweDljLCAweDZmLCAweDgyLCAweGI3LCAweDJlLCAweDljLCAweDMxLCAweDU5LCAweDZiLCAweDUyLAotCTB4ZmUsIDB4YjAsIDB4NWIsIDB4ZTUsIDB4YWEsIDB4MWEsIDB4ZmIsIDB4MGQsIDB4YjUsIDB4YzcsIDB4ZWYsIDB4ZWYsCi0JMHhlNywgMHhkZSwgMHgxYiwgMHgzMiwgMHg5NSwgMHg2MiwgMHg5YiwgMHg2MywgMHg1OSwgMHhkNCwgMHg5YywgMHhjNCwKLQkweDk3LCAweGRkLCAweGViLCAweDBhLCAweDc5LCAweDBlLCAweGRlLCAweGFmLCAweDA4LCAweDY1LCAweGRiLCAweDZkLAotCTB4NWQsIDB4OTcsIDB4ZDcsIDB4N2QsIDB4ZjcsIDB4MDAsIDB4ZTUsIDB4ODksIDB4NzIsIDB4OGIsIDB4MzksIDB4OWYsCi0JMHhiMSwgMHhkOCwgMHgyOCwgMHhjYywgMHhjMCwgMHg4ZSwgMHhiZiwgMHgyYSwgMHhkZiwgMHg2ZiwgMHgxYywgMHg5MiwKLQkweGVmLCAweDM1LCAweDI2LCAweGU1LCAweGNmLCAweDFhLCAweDVmLCAweDk2LCAweDNmLCAweDZkLCAweDFjLCAweDk0LAotCTB4ZDcsIDB4MWIsIDB4MDcsIDB4ZTQsIDB4YjUsIDB4YzYsIDB4ODQsIDB4YmMsIDB4ZGEsIDB4ZDgsIDB4MGYsIDB4MWIsCi0JMHgxZiwgMHg4NywgMHg4ZCwgMHg5ZiwgMHg5YSwgMHg5OSwgMHhhYywgMHhmNywgMHhjYiwgMHhkNCwgMHg0OSwgMHhjNCwKLQkweDIwLCAweGU3LCAweDFiLCAweGJhLCAweGJhLCAweGUzLCAweGIzLCAweGU5LCAweGU3LCAweDJkLCAweDMyLCAweGFkLAotCTB4ZWUsIDB4YWYsIDB4MzQsIDB4ZTQsIDB4ODksIDB4MmQsIDB4YmMsIDB4MmIsIDB4N2MsIDB4YzUsIDB4MzMsIDB4MmUsCi0JMHg4NywgMHhmMSwgMHhlOCwgMHhlMSwgMHg5NCwgMHhiNCwgMHgwMywgMHhiZiwgMHhjYSwgMHg0YiwgMHg0ZCwgMHg5ZSwKLQkweGRiLCAweDYyLCAweDg2LCAweGY3LCAweDljLCAweDg3LCAweDI0LCAweGM5LCAweGZiLCAweGIwLCAweDljLCAweDY3LAotCTB4YTAsIDB4ZGUsIDB4NWUsIDB4ZDcsIDB4MjcsIDB4NzMsIDB4YjQsIDB4NjUsIDB4ZTgsIDB4YzYsIDB4OTUsIDB4NDMsCi0JMHhiMCwgMHg1MywgMHhjMywgMHg3ZSwgMHhjYiwgMHhhNSwgMHgxZSwgMHgxNiwgMHg5NywgMHgyOCwgMHhmNywgMHg0NiwKLQkweDU5LCAweDVjLCAweGEwLCAweDZmLCAweGZmLCAweDFiLCAweDY0LCAweDZjLCAweDk3LCAweGRhLCAweDgyLCAweDg5LAotCTB4YjksIDB4NmUsIDB4OTgsIDB4YWIsIDB4NmMsIDB4YTcsIDB4M2QsIDB4MDAsIDB4MWYsIDB4ZjEsIDB4N2UsIDB4MTAsCi0JMHg0ZSwgMHhhYiwgMHgwOSwgMHgyNywgMHhmMSwgMHgyNCwgMHg1NCwgMHgwYywgMHgwOCwgMHg3MCwgMHg1YiwgMHg1MiwKLQkweDViLCAweDRhLCAweGNhLCAweGMyLCAweDQyLCAweDBmLCAweDllLCAweDk0LCAweDJjLCAweGQ0LCAweDZkLCAweDNjLAotCTB4MzksIDB4M2MsIDB4NDMsIDB4NzgsIDB4ZDIsIDB4YjAsIDB4NTMsIDB4Y2EsIDB4YzgsIDB4ZDgsIDB4MTIsIDB4YzksCi0JMHg4OCwgMHg3OCwgMHg1YywgMHhlZCwgMHgwZCwgMHg2YiwgMHgyYSwgMHhmMiwgMHhhMywgMHg4NSwgMHhmYywgMHg3NCwKLQkweDg3LCAweDdkLCAweDFkLCAweDUyLCAweGFiLCAweDM4LCAweDMyLCAweDU1LCAweGZkLCAweDk0LCAweDNlLCAweGE1LAotCTB4NzQsIDB4MDcsIDB4ZmMsIDB4OTUsIDB4MjEsIDB4YjQsIDB4ZWYsIDB4MGYsIDB4ZGIsIDB4OGYsIDB4Y2EsIDB4ZjQsCi0JMHhiYywgMHhjOCwgMHhjYSwgMHhjYiwgMHgwMywgMHg3YSwgMHg1MSwgMHhiNSwgMHhmNywgMHhhMiwgMHhhZCwgMHhhMywKLQkweDlkLCAweDBkLCAweGRiLCAweGNjLCAweDhmLCAweDBlLCAweGUwLCAweDcxLCAweGQ1LCAweGYzLCAweGY1LCAweGVhLAotCTB4YjgsIDB4M2MsIDB4NTUsIDB4ZWQsIDB4NzcsIDB4NWUsIDB4ODcsIDB4Y2QsIDB4YmQsIDB4NjUsIDB4NDYsIDB4ZjcsCi0JMHhkMiwgMHgwNCwgMHgyNCwgMHg3OSwgMHhmNiwgMHg1NiwgMHg3NSwgMHhmNywgMHhmMSwgMHgwNCwgMHhlMiwgMHhhZCwKLQkweDliLCAweDM0LCAweGU1LCAweDZmLCAweDRmLCAweDY0LCAweGFkLCAweGE3LCAweGY1LCAweDVjLCAweDUyLCAweGRhLAotCTB4N2QsIDB4ZmYsIDB4NzEsIDB4M2IsIDB4M2IsIDB4M2IsIDB4YTksIDB4NzcsIDB4Y2EsIDB4ZGYsIDB4YmYsIDB4OTgsCi0JMHg5MSwgMHg4NSwgMHhiMywgMHg1YiwgMHg2NSwgMHhhMSwgMHgwNiwgMHg5OSwgMHgxYSwgMHhiZiwgMHg4ZSwgMHg3ZCwKLQkweDM1LCAweGU1LCAweGVhLCAweDllLCAweDQ3LCAweGIxLCAweDI3LCAweDhjLCAweDVkLCAweDQ5LCAweGU0LCAweDZjLAotCTB4MWIsIDB4YzQsIDB4ZWMsIDB4MjUsIDB4NWQsIDB4NDksIDB4OTgsIDB4ODUsIDB4OWMsIDB4MWMsIDB4ODEsIDB4ZGYsCi0JMHg0ZiwgMHhkYiwgMHhiOSwgMHgxZSwgMHg2OSwgMHhjNywgMHg3YiwgMHg3ZCwgMHgwNCwgMHg3YywgMHg1YiwgMHgzMiwKLQkweGQ1LCAweDZiLCAweGM5LCAweDk5LCAweGMxLCAweDY4LCAweGZmLCAweGI2LCAweDYyLCAweDZlLCAweDQ2LCAweDE2LAotCTB4Y2YsIDB4NjYsIDB4ZjAsIDB4OWIsIDB4ODMsIDB4ZmQsIDB4ZWMsIDB4OTQsIDB4NTcsIDB4NmEsIDB4ZmQsIDB4YjIsCi0JMHg1NCwgMHhkYiwgMHgyYSwgMHg4YiwgMHhiNSwgMHhlNiwgMHg3ZCwgMHhlOCwgMHhlYywgMHgwOSwgMHhlMiwgMHgxZCwKLQkweGYxLCAweGY0LCAweDViLCAweDUzLCAweGZhLCAweDU2LCAweDcxLCAweGNkLCAweDdlLCAweGViLCAweDI5LCAweGZkLAotCTB4MWYsIDB4ZTQsIDB4MzEsIDB4MzMsIDB4YTAsIDB4YTksIDB4MTcsIDB4N2UsIDB4YTQsIDB4ZWUsIDB4ODQsIDB4MjYsCi0JMHg3OSwgMHhmNiwgMHgyYSwgMHhiYywgMHg0ZiwgMHgyNiwgMHg0OSwgMHhmYiwgMHhmNSwgMHhjNiwgMHgwNywgMHhkMSwKLQkweDU5LCAweGNiLCAweGNmLCAweDlkLCAweDY4LCAweDUyLCAweDA2LCAweGUyLCAweGVjLCAweGJmLCAweDcxLCAweDUyLAotCTB4ZWYsIDB4OTUsIDB4ZTUsIDB4NmQsIDB4MGYsIDB4NTgsIDB4NGYsIDB4ZWEsIDB4YWQsIDB4ODgsIDB4MDEsIDB4M2YsCi0JMHg5NywgMHg5ZiwgMHhlZSwgMHhkOSwgMHgyNCwgMHgzZiwgMHhmYywgMHhjZCwgMHhlYywgMHhhOSwgMHg2ZiwgMHgyMiwKLQkweGQ5LCAweGJmLCAweGIyLCAweGE3LCAweDgzLCAweDcxLCAweDAxLCAweGVmLCAweGVjLCAweGNmLCAweGRlLCAweDcwLAotCTB4NzUsIDB4ZWEsIDB4ZTEsIDB4MmYsIDB4YTAsIDB4ODcsIDB4ZWMsIDB4OWMsIDB4YmEsIDB4OWIsIDB4NTYsIDB4M2MsCi0JMHg5MCwgMHgzZSwgMHhmNSwgMHg1MiwgMHgwNiwgMHg2ZiwgMHgxOCwgMHhhYiwgMHhmNywgMHgwMywgMHg1NywgMHg1OSwKLQkweGU5LCAweGY5LCAweDA5LCAweDI3LCAweDdiLCAweDAzLCAweGU5LCAweGIwLCAweGJmLCAweDY4LCAweGY3LCAweGE3LAotCTB4NzcsIDB4ZWEsIDB4M2IsIDB4NjQsIDB4MzIsIDB4ZmQsIDB4ODAsIDB4ZjUsIDB4YjQsIDB4NmMsIDB4MjEsIDB4Y2UsCi0JMHhkOSwgMHgwNSwgMHhjMSwgMHhkYSwgMHg3OSwgMHhlMiwgMHhmYiwgMHgyYiwgMHhlMCwgMHgwYiwgMHg3MCwgMHgyOCwKLQkweGZmLCAweDUxLCAweDM4LCAweDc3LCAweDU5LCAweDVmLCAweGQ3LCAweDc5LCAweGM2LCAweDYzLCAweDBjLCAweDcxLAotCTB4ZTEsIDB4ZTIsIDB4MTAsIDB4NjUsIDB4NDAsIDB4ODIsIDB4OTUsIDB4Y2EsIDB4YTYsIDB4NWQsIDB4ZmQsIDB4YzMsCi0JMHhjOCwgMHg0NywgMHhmYywgMHhmZCwgMHg1NiwgMHg1MSwgMHgyNywgMHgwZiwgMHhlNywgMHhjMCwgMHhjYiwgMHg0ZiwKLQkweGMwLCAweDdmLCAweDNmLCAweDcwLCAweGEyLCAweGY2LCAweDQ4LCAweDQ3LCAweDc0LCAweGZmLCAweDRlLCAweGQxLAotCTB4N2QsIDB4YWQsIDB4MjEsIDB4ZTYsIDB4MmEsIDB4NWQsIDB4ZjQsIDB4ZDUsIDB4NzUsIDB4YzgsIDB4ZGQsIDB4MDcsCi0JMHg3YiwgMHhiNSwgMHhmMCwgMHhjYiwgMHhiZCwgMHhlOSwgMHgwYywgMHhmNywgMHg5OCwgMHhlYiwgMHgyMiwgMHhiYSwKLQkweDExLCAweGJmLCAweDVjLCAweDczLCAweDI3LCAweDFlLCAweGVlLCAweDc1LCAweDNlLCAweGVhLCAweGQ0LCAweDAzLAotCTB4MDksIDB4NzksIDB4ZjcsIDB4NDQsIDB4YjQsIDB4MzcsIDB4MDcsIDB4NjQsIDB4YmEsIDB4MGEsIDB4ZGQsIDB4ZWQsCi0JMHhlYSwgMHgwZiwgMHhmYywgMHgyNywgMHgxZCwgMHhmMSwgMHg0MCwgMHhkZSwgMHhmZiwgMHgwNiwgMHhiYywgMHgwNywKLQkweGI4LCAweDViLCAweDBiLCAweGNkLCAweGJhLCAweGMzLCAweDU4LCAweDNkLCAweGEwLCAweDMxLCAweGI2LCAweDBlLAotCTB4NGYsIDB4NTcsIDB4ZjYsIDB4NDQsIDB4YmUsIDB4OTgsIDB4ODQsIDB4NWYsIDB4ZWQsIDB4YjYsIDB4OWUsIDB4MTAsCi0JMHhkNiwgMHg2MywgMHhjNCwgMHg5YiwgMHg5NCwgMHgxZiwgMHhiZSwgMHgwYywgMHgxZSwgMHg5MiwgMHhmNCwgMHg5MywKLQkweDdmLCAweDVmLCAweGUzLCAweDI3LCAweDFjLCAweGRiLCAweDJhLCAweDM1LCAweGQ0LCAweGQ0LCAweDVlLCAweGRlLAotCTB4OTQsIDB4NjksIDB4MjUsIDB4MDMsIDB4ZGEsIDB4MzUsIDB4ZmEsIDB4NzcsIDB4MjksIDB4ZjQsIDB4ZWYsIDB4NDcsCi0JMHg4MCwgMHhhMywgMHg1ZCwgMHg4YywgMHg0NywgMHgxZiwgMHhjNywgMHg1OSwgMHg5ZCwgMHhjZCwgMHgyYywgMHhlYiwKLQkweGNjLCAweDAzLCAweDc2LCAweDRiLCAweDUxLCAweGRkLCAweDRmLCAweGRmLCAweDhiLCAweGVlLCAweGEyLCAweGQ4LAotCTB4OTQsIDB4OTYsIDB4OGIsIDB4OTUsIDB4MjgsIDB4MmUsIDB4YTUsIDB4NzEsIDB4OWUsIDB4YjQsIDB4Y2IsIDB4YTUsCi0JMHhiOSwgMHgyOCwgMHhlNiwgMHhiNSwgMHhjYiwgMHgxMiwgMHhmMiwgMHg5YSwgMHg5NSwgMHg5NywgMHgyYywgMHg4YywKLQkweDI1LCAweGU1LCAweGUyLCAweDVjLCAweDEyLCAweDMxLCAweGFiLCAweDQ3LCAweDU2LCAweGU2LCAweDdhLCAweDMwLAotCTB4OTYsIDB4YzIsIDB4YmEsIDB4MTQsIDB4ZTYsIDB4ZGIsIDB4YjIsIDB4NTIsIDB4YjEsIDB4ODEsIDB4MjcsIDB4ODcsCi0JMHg3NiwgMHgwZSwgMHhlZCwgMHgyMSwgMHhiOSwgMHhhNCwgMHhiZSwgMHgxNywgMHgzMCwgMHgyZiwgMHgxOCwgMHg0MiwKLQkweGRjLCAweDYyLCAweDVlLCAweDMwLCAweDgyLCAweDE4LCAweDMyLCAweDgxLCAweDI3LCAweDhhLCAweDVkLCAweGE3LAotCTB4NjYsIDB4YTYsIDB4MmEsIDB4YmMsIDB4NzMsIDB4ODQsIDB4MGUsIDB4YWMsIDB4NTMsIDB4MzMsIDB4ZDMsIDB4YjYsCi0JMHg4OSwgMHhiYSwgMHhlZCwgMHgxYiwgMHhkYSwgMHg1NCwgMHg4MywgMHg3MiwgMHg0MSwgMHhiNywgMHg0MywgMHgxZCwKLQkweGEyLCAweDNmLCAweDRhLCAweDliLCAweGU0LCAweDc5LCAweDY3LCAweDIwLCAweGM2LCAweDc3LCAweDAxLCAweDlmLAotCTB4MjMsIDB4ZmEsIDB4NmYsIDB4ZDAsIDB4MTcsIDB4YTAsIDB4YzMsIDB4MjcsIDB4YmEsIDB4ZTQsIDB4ZDIsIDB4Y2IsCi0JMHg4YywgMHgzNSwgMHhhZSwgMHhiYywgMHg3YSwgMHg5NiwgMHgzYSwgMHgyYywgMHhmNiwgMHhhYywgMHhlYSwgMHg5MCwKLQkweDYzLCAweDBmLCAweGUxLCAweDhjLCAweGQ4LCAweDBmLCAweDdiLCAweDMyLCAweDMzLCAweDg3LCAweDkwLCAweGNiLAotCTB4N2MsIDB4MWIsIDB4ZjYsIDB4NTksIDB4NjYsIDB4Y2QsIDB4OWQsIDB4MGUsIDB4NmEsIDB4ODQsIDB4MjAsIDB4MDYsCi0JMHhhMCwgMHhkZCwgMHg0NywgMHg1ZCwgMHhiMSwgMHhkZCwgMHgwNywgMHhiYiwgMHhlMywgMHg1OCwgMHg5ZiwgMHgxYSwKLQkweDViLCAweDA0LCAweDhlLCAweDYwLCAweDhjLCAweGVkLCAweGNkLCAweGIyLCAweGE4LCAweGM2LCAweDBlLCAweGFhLAotCTB4YjEsIDB4YjIsIDB4YjIsIDB4MGYsIDB4OGUsIDB4MWQsIDB4NTIsIDB4YjEsIDB4ZTksIDB4N2MsIDB4MjMsIDB4ZWEsCi0JMHhkZiwgMHg4OCwgMHg1OCwgMHhjMiwgMHg3ZSwgMHhmNiwgMHhlNSwgMHg2MSwgMHhlYiwgMHg3YiwgMHg3MSwgMHhhZSwKLQkweDE1LCAweDY0LCAweGE5LCAweDgxLCAweDNhLCAweDMwLCAweGZmLCAweDdiLCAweDk4LCAweGNiLCAweDNkLCAweGM4LAotCTB4OWUsIDB4MmEsIDB4ZTksIDB4ZTQsIDB4ZjEsIDB4MjAsIDB4Y2UsIDB4ODMsIDB4ZmQsIDB4MjEsIDB4YWQsIDB4YjYsCi0JMHg5MCwgMHhhZiwgMHgwMywgMHg2MSwgMHhiYiwgMHgyNSwgMHhhNCwgMHg0ZCwgMHgzYywgMHgzNiwgMHg3MCwgMHgxYywKLQkweGMzLCAweDVhLCAweDE3LCAweDM4LCAweDE4LCAweDYzLCAweDExLCAweDIzLCAweDUyLCAweDI5LCAweGU4LCAweDgyLAotCTB4MzQsIDB4ZGIsIDB4YTQsIDB4YWMsIDB4ZGUsIDB4ZjcsIDB4YzMsIDB4NzYsIDB4YjksIDB4MTYsIDB4M2EsIDB4YjQsCi0JMHhhMiwgMHg3NSwgMHhhNSwgMHg3MCwgMHhjZiwgMHg1MywgMHhlYSwgMHg5YywgMHhkMSwgMHg5MywgMHg5YiwgMHhjMywKLQkweDljLCAweDEwLCAweDdhLCAweDQ1LCAweDljLCAweGQ1LCAweDkzLCAweDhjLCAweDM3LCAweGVmLCAweDg0LCAweDc2LAotCTB4ZGEsIDB4OGIsIDB4YmUsIDB4ODcsIDB4NDQsIDB4ZWYsIDB4NjUsIDB4ZGYsIDB4NTEsIDB4ZTAsIDB4NjEsIDB4ZWQsCi0JMHgzYywgMHgwYywgMHg5OSwgMHhkOSwgMHhlNiwgMHhmYSwgMHg2YywgMHhkMywgMHhmYSwgMHhjNCwgMHgzYSwgMHhlYiwKLQkweDNiLCAweDlhLCAweGZhLCAweDMyLCAweDUyLCAweDliLCAweGVmLCAweDUyLCAweGYxLCAweGYyLCAweDdjLCAweDE4LAotCTB4MmYsIDB4MTcsIDB4NmIsIDB4OTQsIDB4MDUsIDB4N2UsIDB4OTYsIDB4N2YsIDB4NWIsIDB4ZTksIDB4YTIsIDB4NzYsCi0JMHgzNiwgMHhiMCwgMHhmNSwgMHhhNSwgMHg5MywgMHgzYywgMHgxNywgMHg1NywgMHhlNywgMHhkNSwgMHhkNCwgMHhiYywKLQkweGRmLCAweDA2LCAweGZmLCAweGJhLCAweDFjLCAweDU1LCAweDMyLCAweDcwLCAweDNlLCAweGU2LCAweGQ1LCAweDAyLAotCTB4YmYsIDB4MzEsIDB4NmMsIDB4Y2UsIDB4YTEsIDB4OGYsIDB4NDQsIDB4NmIsIDB4MzgsIDB4ZmYsIDB4ZTcsIDB4YTgsCi0JMHg1NSwgMHhiZSwgMHhhYywgMHhkNiwgMHhhYywgMHhmYSwgMHgwYywgMHhmOSwgMHg3MSwgMHg0MiwgMHg5ZSwgMHg3YiwKLQkweGMwLCAweDVmLCAweDY3LCAweDI4LCAweDQzLCAweDdiLCAweDI4LCAweDAzLCAweGYxLCAweGZkLCAweDI3LCAweDcwLAotCTB4YjcsIDB4NjEsIDB4MWUsIDB4NzksIDB4ZGQsIDB4ODYsIDB4M2UsIDB4YmUsIDB4ZmYsIDB4MTcsIDB4ZmEsIDB4NzYsCi0JMHgyMywgMHhmZiwgMHgyMywgMHg2ZiwgMHg4OSwgMHgyNiwgMHhkZSwgMHhmZSwgMHgwMywgMHg2MywgMHgzZCwgMHg0YSwKLQkweGI3LCAweDM1LCAweGQ0LCAweDI2LCAweDUzLCAweGJjLCAweGVmLCAweDQ4LCAweGUxLCAweDFjLCAweDM4LCAweGI5LAotCTB4NGQsIDB4ZDEsIDB4YWQsIDB4OWQsIDB4YmQsIDB4ODYsIDB4ZjEsIDB4NWUsIDB4YWMsIDB4ODksIDB4ZGEsIDB4Y2QsCi0JMHhiMiwgMHhlOSwgMHg1OCwgMHhmYiwgMHg1MywgMHgyNSwgMHhjZiwgMHg2MiwgMHhlZCwgMHg0ZSwgMHhmMiwgMHg2ZiwKLQkweDViLCAweDIzLCAweDNiLCAweGU1LCAweDI2LCAweDRmLCAweGU0LCAweGE3LCAweDFmLCAweDRmLCAweDJiLCAweDcyLAotCTB4MjEsIDB4ZDgsIDB4NmQsIDB4ZDIsIDB4OTAsIDB4ZDEsIDB4N2MsIDB4OWEsIDB4ZGYsIDB4ZjksIDB4MTIsIDB4YmMsCi0JMHgxNywgMHgxZCwgMHgxOSwgMHhlNCwgMHg5ZSwgMHhhMSwgMHhkZCwgMHg2MCwgMHg0ZSwgMHg0NywgMHg3ZiwgMHg0YiwKLQkweGM4LCAweDMxLCAweGQ0LCAweDI0LCAweGU1LCAweDg1LCAweDhjLCAweDU2LCAweDNjLCAweDk5LCAweDQ1LCAweDE2LAotCTB4YWQsIDB4YmUsIDB4ZDUsIDB4YzksIDB4OGIsIDB4NGIsIDB4YjYsIDB4N2MsIDB4MWIsIDB4N2UsIDB4N2EsIDB4YjIsCi0JMHg5ZSwgMHg0ZCwgMHg3ZiwgMHgxMywgMHhmOSwgMHhjMSwgMHg5MSwgMHgyNSwgMHhlNiwgMHgxMywgMHgzZCwgMHgyOSwKLQkweDY1LCAweDliLCAweGYzLCAweDlhLCAweDZjLCAweDYwLCAweDRjLCAweDliLCAweDQ3LCAweDdlLCAweDZhLCAweGRkLAotCTB4MmQsIDB4NDcsIDB4ODIsIDB4OWYsIDB4NTcsIDB4ZDcsIDB4YzYsIDB4MGMsIDB4Y2EsIDB4YjEsIDB4MzYsIDB4NjYsCi0JMHgxMCwgMHgwZiwgMHg2MywgMHhjNiwgMHg0ZSwgMHhlYywgMHgxMywgMHg2MywgMHgwNiwgMHhmNiwgMHhmZiwgMHgyNCwKLQkweDYzLCAweDg2LCAweDhkLCAweDc1LCAweDhjLCAweDE5LCAweDc5LCAweDU5LCAweGFjLCAweDMyLCAweDY2LCAweGVjLAotCTB4NDUsIDB4OWIsIDB4MzEsIDB4YTMsIDB4ODAsIDB4NzYsIDB4MTAsIDB4MmYsIDB4MTYsIDB4NTUsIDB4YmMsIDB4YzgsCi0JMHg1YSwgMHhjYiwgMHhjMiwgMHgzOCwgMHg4MSwgMHgzYywgMHhiMSwgMHg4YSwgMHgzYywgMHhiMSwgMHg4YSwgMHgzYywKLQkweGIxLCAweDhhLCAweDNjLCAweGIxLCAweDhhLCAweDNjLCAweDExLCAweGI2LCAweGZlLCAweDVhLCAweDE1LCAweDc5LAotCTB4MjIsIDB4ZmMsIDB4ZTcsIDB4M2MsIDB4NzIsIDB4OTIsIDB4YTAsIDB4YTYsIDB4MzgsIDB4OGMsIDB4OWEsIDB4YzIsCi0JMHhkNSwgMHhjNiwgMHhhYSwgMHhlMywgMHhkYSwgMHhiZSwgMHgyYSwgMHg2YSwgMHg0MywgMHhmNSwgMHg5ZCwgMHg1OCwKLQkweDFmLCAweGRhLCAweDgwLCAweGJhLCAweGE4LCAweGU2LCAweDZjLCAweDAxLCAweDVmLCAweGQ3LCAweGUwLCAweDFiLAotCTB4ZDQsIDB4ZDMsIDB4NTYsIDB4OTksIDB4Y2EsIDB4ZWQsIDB4ODAsIDB4N2MsIDB4ZDgsIDB4N2YsIDB4ZmIsIDB4ZmIsCi0JMHhlOCwgMHg0MywgMHgzZSwgMHg5ZiwgMHg2MywgMHgwZCwgMHhjMiwgMHg3OCwgMHhiNSwgMHgwZiwgMHg2ZCwgMHgxZCwKLQkweDZkLCAweGVjLCAweGU5LCAweDA0LCAweDdjLCAweGM0LCAweDdlLCAweDkwLCAweGY5LCAweDYyLCAweDdhLCAweDQxLAotCTB4OWUsIDB4ZGMsIDB4MWMsIDB4ZDgsIDB4ZjQsIDB4NmYsIDB4MzEsIDB4MjcsIDB4NWUsIDB4ZDMsIDB4ZGUsIDB4ODgsCi0JMHgzOSwgMHhmMCwgMHgxNywgMHhkOCwgMHg5NywgMHg1YSwgMHgwMywgMHg1YywgMHhiYSwgMHhmZCwgMHhlNywgMHhjNCwKLQkweGQxLCAweGI3LCAweGUxLCAweGQ2LCAweDFjLCAweGRhLCAweGQ1LCAweGY3LCAweDlhLCAweGZhLCAweGIyLCAweDk4LAotCTB4Y2YsIDB4ZWYsIDB4ZTIsIDB4M2IsIDB4ZjAsIDB4ZmIsIDB4MTYsIDB4N2UsIDB4NjEsIDB4NzcsIDB4ZjYsIDB4MDUsCi0JMHhjYywgMHhlOSwgMHhjMywgMHhlZiwgMHg3NywgMHg5YSwgMHhlNiwgMHg0MiwgMHgwYSwgMHhmYiwgMHgyZiwgMHhkMSwKLQkweDc3LCAweDMxLCAweGE0LCAweGMxLCAweDZmLCAweDg5LCAweDVmLCAweDZhLCAweGUyLCAweGUzLCAweDA3LCAweGU4LAotCTB4ZmIsIDB4NmIsIDB4ZjQsIDB4ZjksIDB4ZmUsIDB4ZGIsIDB4NGUsIDB4ZDQsIDB4MjcsIDB4YTUsIDB4OTYsIDB4NzAsCi0JMHhlZiwgMHg0NiwgMHhkNSwgMHhkZSwgMHg2OSwgMHhjYSwgMHhlNiwgMHg4ZiwgMHgyYywgMHhlOSwgMHhhYSwgMHgwZSwKLQkweDdhLCAweGFlLCAweDhlLCAweGVhLCAweDA4LCAweDcxLCAweGJlLCAweGJjLCAweDEwLCAweGQ0LCAweGFkLCAweGM3LAotCTB4NTEsIDB4NzMsIDB4MTYsIDB4YWIsIDB4YjQsIDB4OTEsIDB4MWMsIDB4ZmEsIDB4NmQsIDB4OWMsIDB4NjksIDB4MzIsCi0JMHg2OSwgMHhkYywgMHhhYSwgMHg2MywgMHgxMywgMHg4OSwgMHhjOSwgMHg3YSwgMHg5YiwgMHg0OCwgMHgzNywgMHg2OSwKLQkweDMyLCAweDRmLCAweDIyLCAweDhlLCAweGQ5LCAweDk5LCAweGUyLCAweGMyLCAweGVjLCAweDhjLCAweDA3LCAweDljLAotCTB4NjMsIDB4NzUsIDB4YWUsIDB4ZTUsIDB4M2MsIDB4OTMsIDB4ZjcsIDB4NjMsIDB4NGQsIDB4NzQsIDB4NjksIDB4MTMsCi0JMHg2MCwgMHgwNiwgMHhmNCwgMHg5ZSwgMHhhYiwgMHg5MywgMHg3ZSwgMHg0MCwgMHhiMywgMHhhYywgMHg2OCwgMHhkYSwKLQkweGU4LCAweDhmLCAweGVhLCAweGM3LCAweDFjLCAweDZhLCAweDVkLCAweDk5LCAweDY0LCAweGVkLCAweDVjLCAweDBjLAotCTB4NjksIDB4YmEsIDB4NzUsIDB4NDksIDB4MjQsIDB4MGEsIDB4Y2QsIDB4ZjgsIDB4ODIsIDB4OGMsIDB4ZjMsIDB4YjksCi0JMHhmYSwgMHhlYywgMHg4YywgMHhmZSwgMHg0MiwgMHgzNiwgMHhjNywgMHgzYiwgMHgxMSwgMHhkNywgMHg5YSwgMHg5ZCwKLQkweDY5LCAweDFkLCAweDQ4LCAweGM4LCAweDhmLCAweDkxLCAweGJiLCAweDFkLCAweDUzLCAweDM0LCAweDY2LCAweDY3LAotCTB4OGMsIDB4MTcsIDB4MDIsIDB4NWIsIDB4MGMsIDB4ZTgsIDB4ZTAsIDB4M2MsIDB4YzksIDB4YjcsIDB4NDMsIDB4NGUsCi0JMHhkMiwgMHg2MiwgMHg0ZCwgMHgxZCwgMHg4YywgMHg0ZiwgMHhhYSwgMHg3YSwgMHhkMSwgMHg5NCwgMHgyYiwgMHgxNSwKLQkweDQ1LCAweDNiLCAweGFjLCAweGRiLCAweGM5LCAweGMzLCAweGVjLCAweDhjLCAweGZjLCAweGQxLCAweDJkLCAweDFlLAotCTB4ZDYsIDB4OTEsIDB4ODcsIDB4NzgsIDB4NDksIDB4MjcsIDB4ZDAsIDB4NWIsIDB4YzAsIDB4N2YsIDB4MTIsIDB4ZjUsCi0JMHg3YiwgMHg1NCwgMHhhYiwgMHhmYiwgMHhmZSwgMHg4YSwgMHg5MywgMHg0MywgMHg1YywgMHhlMCwgMHgzZSwgMHhiNiwKLQkweGE4LCAweDNjLCAweGQ3LCAweDczLCAweDMyLCAweGJjLCAweGVmLCAweDliLCAweGUzLCAweGRmLCAweDM5LCAweDc4LAotCTB4ZjksIDB4MDEsIDB4ZDQsIDB4NGQsIDB4YmMsIDB4MWIsIDB4YTQsIDB4N2YsIDB4ZTEsIDB4ZjcsIDB4MzYsIDB4ZmYsCi0JMHhlMiwgMHg3YywgMHhmNiwgMHg5MywgMHhlNywgMHg4MSwgMHhmNCwgMHg1NSwgMHhmMCwgMHhlNywgMHhlNSwgMHhkMSwKLQkweDg3LCAweDU4LCAweDUxLCAweDZjLCAweDQ0LCAweGI4LCAweDc4LCAweGM3LCAweGNlLCAweDM5LCAweDJhLCAweGZmLAotCTB4NmUsIDB4ZjIsIDB4ZDEsIDB4OTYsIDB4ZjAsIDB4ZGMsIDB4YTUsIDB4OGUsIDB4YzgsIDB4MjcsIDB4ZjksIDB4ZTksCi0JMHg4NCwgMHg0ZCwgMHg5MCwgMHgxNywgMHhjZSwgMHg4ZiwgMHhlZSwgMHgyNSwgMHhkOCwgMHhmZSwgMHhiOCwgMHgzNiwKLQkweDEyLCAweGRkLCAweGE5LCAweDdkLCAweDljLCAweDNkLCAweDhmLCAweDc0LCAweDc2LCAweDM3LCAweDdlLCAweDg4LAotCTB4ODMsIDB4YjQsIDB4MjMsIDB4YmUsIDB4MjIsIDB4OWUsIDB4ODgsIDB4OGYsIDB4ZmMsIDB4NDQsIDB4YmMsIDB4MjgsCi0JMHgxYiwgMHg1ZCwgMHg5NywgMHg5ZiwgMHg2MCwgMHg1ZCwgMHhjMCwgMHg0ZiwgMHg2OSwgMHgyMSwgMHgwZCwgMHg5ZCwKLQkweDkwLCAweGE3LCAweDExLCAweDZkLCAweGE0LCAweGJhLCAweGRlLCAweDFkLCAweGM3LCAweDBmLCAweDVjLCAweGM2LAotCTB4ZDUsIDB4YjEsIDB4MDYsIDB4ZWYsIDB4YTEsIDB4NDgsIDB4OTcsIDB4N2YsIDB4M2IsIDB4YjIsIDB4YTQsIDB4OGQsCi0JMHgzNCwgMHhmOCwgMHg5ZCwgMHhhOSwgMHhhZSwgMHhiOSwgMHg4ZCwgMHg4OCwgMHhkZSwgMHg1YSwgMHg5ZCwgMHg0NiwKLQkweGJmLCAweGJjLCAweDJiLCAweGZmLCAweDBjLCAweGY2LCAweGE5LCAweDNiLCAweGY4LCAweGJiLCAweDE0LCAweDU1LAotCTB4NDcsIDB4YjEsIDB4NmYsIDB4YjksIDB4ZDUsIDB4NzMsIDB4YTIsIDB4YmYsIDB4ZDMsIDB4ZDksIDB4MWYsIDB4ZTYsCi0JMHg0MywgMHg1MSwgMHg2ZCwgMHgxYywgMHhkNSwgMHg1OSwgMHhlYSwgMHg5ZSwgMHg3ZCwgMHhhZiwgMHhlNywgMHg2OCwKLQkweGM4LCAweDRmLCAweDk5LCAweDMzLCAweDA1LCAweDNhLCAweDA4LCAweGYxLCAweGRlLCAweDkxLCAweGNmLCAweDkxLAotCTB4MjYsIDB4M2UsIDB4NDcsIDB4YzEsIDB4ZTcsIDB4M2UsIDB4ZjAsIDB4MzksIDB4NzYsIDB4OGIsIDB4Y2YsIDB4NWIsCi0JMHhiNiwgMHg5NywgMHgyOSwgMHhjMywgMHhmNiwgMHg0NiwgMHhkNiwgMHhiNSwgMHhiZCwgMHg1NSwgMHgzYSwgMHhhYiwKLQkweDczLCAweDgzLCAweGZiLCAweDlhLCAweDkxLCAweDg2LCAweDJmLCAweGM3LCAweDlkLCAweDhmLCAweDUzLCAweDM3LAotCTB4YjcsIDB4Y2IsIDB4OTksIDB4ODUsIDB4YmIsIDB4ZDUsIDB4YjcsIDB4MTEsIDB4YWYsIDB4MmEsIDB4NzcsIDB4OTQsCi0JMHg0YiwgMHhmNSwgMHg4MCwgMHg5ZiwgMHgxZiwgMHgyZiwgMHhiMSwgMHgzZCwgMHgxMiwgMHhlYSwgMHg4YSwgMHgzYSwKLQkweGNiLCAweDNhLCAweDI1LCAweGI5LCAweDFiLCAweDJmLCAweGJmLCAweGY4LCAweDljLCAweDc2LCAweGE1LCAweDEyLAotCTB4OWQsIDB4NGYsIDB4NWEsIDB4NzgsIDB4YzYsIDB4YWUsIDB4ZTUsIDB4MjksIDB4ZmEsIDB4NmUsIDB4MzIsIDB4NjYsCi0JMHg0NSwgMHhmNywgMHg2NywgMHgyMiwgMHhmYywgMHhmZSwgMHhjMCwgMHhlZiwgMHg3NSwgMHg2YiwgMHhiZiwgMHgxMywKLQkweGYwLCAweDdjLCAweDhhLCAweDc4LCAweGQ3LCAweDUzLCAweDNjLCAweDlmLCAweGM2LCAweDljLCAweDY2LCAweDE5LAotCTB4NWMsIDB4ZDgsIDB4YTQsIDB4OWUsIDB4ZTQsIDB4OTgsIDB4ZTcsIDB4ZDAsIDB4MmYsIDB4NGMsIDB4ZDAsIDB4MGMsCi0JMHhlZSwgMHhkZCwgMHg2YSwgMHg0YiwgMHhiZSwgMHg1YywgMHg3NCwgMHgzNiwgMHgwNiwgMHhlNywgMHgyOCwgMHg2NCwKLQkweGJhLCAweDZjLCAweGYxLCAweGZlLCAweDBhLCAweDMxLCAweDhjLCAweDY3LCAweDgzLCAweGIyLCAweGI1LCAweDE2LAotCTB4ZjUsIDB4NWMsIDB4MzksIDB4ZDAsIDB4MGUsIDB4MWQsIDB4YjMsIDB4ZGQsIDB4ZDYsIDB4Y2IsIDB4ZmIsIDB4MGEsCi0JMHhjYSwgMHhiYywgMHhhMCwgMHhmNiwgMHgyMSwgMHhkMiwgMHg3MSwgMHhmNCwgMHg3ZCwgMHhhZSwgMHg1NSwgMHg5NiwKLQkweGMzLCAweGJiLCAweGFkLCAweGM1LCAweDhhLCAweGVmLCAweGJmLCAweDgzLCAweDNjLCAweGZjLCAweDM0LCAweDc0LAotCTB4NWYsIDB4YWUsIDB4ZmYsIDB4Y2MsIDB4NWYsIDB4NGUsIDB4ZjEsIDB4NmYsIDB4YTUsIDB4MjIsIDB4OWIsIDB4ZDgsCi0JMHhkMSwgMHhjYiwgMHg3YiwgMHgyMCwgMHhmOCwgMHg5NiwgMHgxYywgMHhhZiwgMHg4NywgMHg2NSwgMHhiZiwgMHg3MCwKLQkweDljLCAweDdkLCAweGZmLCAweDBkLCAweGJlLCAweDdkLCAweGZmLCAweGY0LCAweGFhLCAweDlkLCAweDAyLCAweGZlLAotCTB4MTcsIDB4MzMsIDB4ZTEsIDB4OWIsIDB4ZGQsIDB4OTAsIDB4NTgsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweGNiLCAweGEzLCAweDQ2LCAweDQ1LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4ZWMsIDB4NWMsIDB4NmYsIDB4NmMsCisJMHgxYywgMHhjNywgMHg3NSwgMHg3ZiwgMHgzYiwgMHhiYiwgMHhhNCwgMHg0ZSwgMHhkNCwgMHg5MSwgMHg1YywgMHgxZSwKKwkweDRmLCAweGY0LCAweDQ5LCAweDY2LCAweDk0LCAweDVkLCAweDcxLCAweDI1LCAweDVlLCAweDJkLCAweGM2LCAweDVkLAorCTB4MzEsIDB4NTcsIDB4OWIsIDB4MDgsIDB4Y2UsIDB4ZjEsIDB4NzksIDB4ZWYsIDB4NjQsIDB4YjEsIDB4ODYsIDB4MGEsCisJMHg1MSwgMHgwZCwgMHgxZCwgMHgxYiwgMHg4NSwgMHg2YiwgMHhiMCwgMHg0NywgMHgzOSwgMHhhZSwgMHhkYiwgMHg3ZSwKKwkweDkwLCAweDY1LCAweDFiLCAweDMwLCAweGRhLCAweDEwLCAweGJlLCAweDFjLCAweGU5LCAweDQ2LCAweDc1LCAweDJmLAorCTB4ZGMsIDB4OGIsIDB4YzQsIDB4OTgsIDB4MDYsIDB4ZmEsIDB4MDcsIDB4NTcsIDB4OTIsIDB4ZmEsIDB4ODMsIDB4ZTAsCisJMHhhMCwgMHg5MywgMHhlMiwgMHgyNiwgMHhmNSwgMHgxNywgMHg1NywgMHg4NCwgMHgyYSwgMHhjNywgMHhmOSwgMHhlMCwKKwkweDAyLCAweDRlLCAweDYzLCAweDIwLCAweDA2LCAweGVhLCAweDE2LCAweGFhLCAweGVjLCAweGQ4LCAweDQ2LCAweDgxLAorCTB4YTIsIDB4NDIsIDB4MWMsIDB4ZDgsIDB4NDYsIDB4ZmMsIDB4NjcsIDB4ZmIsIDB4N2IsIDB4MzMsIDB4YmIsIDB4ZDQsCisJMHg5MSwgMHg5NiwgMHg2ZCwgMHhhMCwgMHgxZiwgMHhmYSwgMHhhNSwgMHgzYiwgMHhjMCwgMHg2MSwgMHg2NywgMHg2NiwKKwkweGU3LCAweGJkLCAweDc5LCAweGYzLCAweGZlLCAweGJmLCAweDU5LCAweDRhLCAweDdmLCAweDkwLCAweGE0LCAweDJlLAorCTB4MGEsIDB4NWIsIDB4MzcsIDB4N2UsIDB4ZDYsIDB4OTEsIDB4YzcsIDB4OGYsIDB4ZGUsIDB4M2MsIDB4NzYsIDB4ZjMsCisJMHgyOCwgMHhkMSwgMHg5NywgMHg0NywgMHhmNSwgMHgxYiwgMHgxMiwgMHgyMiwgMHg5YSwgMHg4ZiwgMHg1YiwgMHhkYywKKwkweGUyLCAweDE2LCAweGI3LCAweGI4LCAweGM1LCAweDJkLCAweDZlLCAweDcxLCAweDhiLCAweDViLCAweGRjLCAweGUyLAorCTB4MTYsIDB4YjcsIDB4YjgsIDB4YzUsIDB4MmQsIDB4NmUsIDB4NzEsIDB4OGIsIDB4NWIsIDB4ZGMsIDB4ZTIsIDB4MTYsCisJMHhiNywgMHhiOCwgMHhjNSwgMHgyZCwgMHg2ZSwgMHg3MSwgMHg4YiwgMHg1YiwgMHhkYywgMHhlMiwgMHgxNiwgMHhiNywKKwkweGI4LCAweGM1LCAweDJkLCAweDZlLCAweDcxLCAweDhiLCAweDViLCAweGRjLCAweGUyLCAweDE2LCAweGI3LCAweGI4LAorCTB4YzUsIDB4MmQsIDB4NmUsIDB4NzEsIDB4OGIsIDB4NWIsIDB4ZGMsIDB4ZTIsIDB4MTYsIDB4YjcsIDB4YjgsIDB4YzUsCisJMHgyZCwgMHg2ZSwgMHg3MSwgMHhmYiwgMHhmZiwgMHhkZSwgMHg3NCwgMHgyMiwgMHg5MywgMHg5ZiwgMHhkZCwgMHhlMSwKKwkweDhmLCAweDEyLCAweDIyLCAweGJmLCAweGZhLCAweDkwLCAweGU3LCAweDUwLCAweDQyLCAweGNmLCAweGJmLCAweDM0LAorCTB4MzMsIDB4ZWQsIDB4MTAsIDB4MTUsIDB4OWEsIDB4N2IsIDB4YWMsIDB4MjIsIDB4N2QsIDB4MTQsIDB4NTQsIDB4ZDIsCisJMHgwNiwgMHhmMSwgMHhmYywgMHgxNywgMHhmMiwgMHgxZiwgMHgzZSwgMHhmMSwgMHhmYywgMHhhZCwgMHhmNiwgMHhkNSwKKwkweDg2LCAweDRlLCAweDA5LCAweDMzLCAweDNmLCAweGI3LCAweGQ3LCAweGRjLCAweDRkLCAweDg5LCAweDQxLCAweGMwLAorCTB4ZmMsIDB4ZjUsIDB4ZjAsIDB4N2YsIDB4ZjQsIDB4NTAsIDB4MGYsIDB4NWQsIDB4YzMsIDB4ZTMsIDB4MjQsIDB4ZTgsCisJMHhiMiwgMHhmZSwgMHg5YywgMHhlNiwgMHhiNSwgMHg4MiwgMHhlMCwgMHhhNCwgMHgxYiwgMHgwNCwgMHgzZiwgMHhjNiwKKwkweGVmLCAweDJkLCAweDE3LCAweDYzLCAweGZmLCAweGUzLCAweGEwLCAweDYwLCAweGU4LCAweDI0LCAweDljLCAweGJmLAorCTB4ZDQsIDB4YmMsIDB4ZTUsIDB4MmUsIDB4YWEsIDB4MmUsIDB4MWEsIDB4MzQsIDB4ZWIsIDB4YTcsIDB4ZTksIDB4OTgsCisJMHg1ZiwgMHhkMSwgMHg0YSwgMHhhZCwgMHg5YSwgMHhiNiwgMHhlZiwgMHhmNCwgMHhiYywgMHg3NiwgMHhlNywgMHhlOSwKKwkweDYzLCAweGRhLCAweGZlLCAweGQzLCAweDc1LCAweGNkLCAweDNiLCAweDRkLCAweDE1LCAweGIxLCAweDM3LCAweDQ5LAorCTB4MDUsIDB4ZjMsIDB4OGMsIDB4NTYsIDB4NmMsIDB4MGQsIDB4NjgsIDB4ZGUsIDB4ODksIDB4MGYsIDB4YzksIDB4NzMsCisJMHg2ZCwgMHhmMywgMHhmNywgMHhjOCwgMHgyOCwgMHg4MCwgMHgxNiwgMHhmMiwgMHg2YSwgMHg0MSwgMHhlMCwgMHhiOSwKKwkweDA2LCAweDE1LCAweGQyLCAweDQxLCAweDIwLCAweGYyLCAweGMxLCAweDEzLCAweDVlLCAweGNlLCAweDMxLCAweDg1LAorCTB4OTYsIDB4YTYsIDB4NmEsIDB4NmIsIDB4MDAsIDB4NzgsIDB4OTMsIDB4NWEsIDB4NzEsIDB4ZDEsIDB4ZDAsIDB4NGEsCisJMHg3ZSwgMHg3MCwgMHhjMSwgMHg3MywgMHg2OSwgMHg1MCwgMHhhNywgMHgyMCwgMHg5OCwgMHg3MywgMHg3NywgMHg2NSwKKwkweDBlLCAweGQzLCAweDI5LCAweGUwLCAweDZkLCAweDAyLCAweDFmLCAweDk5LCAweDIyLCAweGNmLCAweGY0LCAweDMxLAorCTB4OWQsIDB4NGMsIDB4NzIsIDB4NDUsIDB4MmIsIDB4MGUsIDB4NDcsIDB4ZjQsIDB4OTEsIDB4YzUsIDB4ZjQsIDB4OTcsCisJMHg1NywgMHgwNCwgMHhlOCwgMHhkYywgMHg0MiwgMHhlNSwgMHg4NiwgMHg0OSwgMHg1MywgMHgyYiwgMHgxYiwgMHhkNywKKwkweDVmLCAweDBlLCAweDllLCAweDFmLCAweDM2LCAweGU5LCAweDVjLCAweGNiLCAweGFlLCAweDU0LCAweDI4LCAweDQxLAorCTB4NzMsIDB4YmUsIDB4NDUsIDB4MjIsIDB4NGYsIDB4MDUsIDB4MmYsIDB4MzcsIDB4NDgsIDB4MTcsIDB4NWEsIDB4MTksCisJMHhmYSwgMHg0MSwgMHhjYiwgMHhjOSwgMHg1NCwgMHg2OSwgMHgxMywgMHg5NSwgMHhkMywgMHg2OSwgMHgzYSwgMHhkZiwKKwkweDRhLCAweGUzLCAweDhjLCAweGMxLCAweDA1LCAweGUxLCAweDM4LCAweDY2LCAweDE1LCAweDZiLCAweGFiLCAweGFkLAorCTB4OTcsIDB4ZjgsIDB4ZGYsIDB4YmYsIDB4OTgsIDB4ZDMsIDB4MzksIDB4MDksIDB4NTMsIDB4MDEsIDB4ZGQsIDB4ZTEsCisJMHg1YSwgMHgzZSwgMHg4NywgMHg1YywgMHgyYiwgMHhjZiwgMHhhMiwgMHhkNiwgMHg1MiwgMHg2NSwgMHgzYSwgMHg4NywKKwkweGI5LCAweGQ2LCAweDFkLCAweDZiLCAweGZjLCAweDJkLCAweGE0LCAweGY5LCAweDY5LCAweDUyLCAweGQ1LCAweGVmLAorCTB4MDAsIDB4NmYsIDB4YjgsIDB4M2YsIDB4ODgsIDB4YjMsIDB4ZWUsIDB4ZDAsIDB4YmMsIDB4YzUsIDB4N2YsIDB4NjUsCisJMHhiYywgMHg2OSwgMHg0MSwgMHgzYiwgMHgzMCwgMHgxZSwgMHhjNCwgMHg5OCwgMHhmYiwgMHhiYiwgMHgzMiwgMHg2NSwKKwkweDAyLCAweDhmLCAweDViLCAweDQ5LCAweDhjLCAweDk5LCAweGNlLCAweDIwLCAweGQ4LCAweGVmLCAweDkyLCAweDU5LAorCTB4NzUsIDB4N2IsIDB4MDEsIDB4NmIsIDB4NTEsIDB4ZDUsIDB4ZWQsIDB4MDEsIDB4YmUsIDB4MGUsIDB4ZWEsIDB4NzMsCisJMHhmOCwgMHg3YywgMHhiYywgMHhlNywgMHg2NiwgMHhjYywgMHgwNywgMHhkZCwgMHg3YSwgMHgzZSwgMHgwOCwgMHhhNiwKKwkweDczLCAweGQ0LCAweGEzLCAweGU2LCAweGY2LCAweDQ4LCAweDFjLCAweDUzLCAweDEzLCAweDFhLCAweGQ2LCAweGJkLAorCTB4YzMsIDB4N2IsIDB4MjQsIDB4NTIsIDB4NzksIDB4ZWUsIDB4ZjMsIDB4MzMsIDB4NDcsIDB4ZGUsIDB4ZmMsIDB4OGUsCisJMHg5MCwgMHhhNiwgMHgwYywgMHg2OCwgMHhiYSwgMHgzMSwgMHhlYywgMHg0MywgMHgwZSwgMHgzZSwgMHhmOCwgMHhlMSwKKwkweGRlLCAweDgwLCAweGIxLCAweGY2LCAweDQ1LCAweGUwLCAweGM5LCAweDU2LCAweDg5LCAweGY3LCAweGU4LCAweGE3LAorCTB4YTUsIDB4MzQsIDB4ODksIDB4MmIsIDB4NmUsIDB4NWYsIDB4YjgsIDB4YWUsIDB4MDcsIDB4YjQsIDB4NDYsIDB4ZmEsCisJMHgzMCwgMHg0MCwgMHg3MywgMHg4YiwgMHhjYywgMHhmMywgMHgxYSwgMHg2NCwgMHgyNCwgMHg2OCwgMHhlNywgMHgyZCwKKwkweDE1LCAweGFkLCAweGQwLCAweDNhLCAweDg2LCAweGJlLCAweDQxLCAweGQzLCAweDRlLCAweDcwLCAweDYxLCAweGNlLAorCTB4OWQsIDB4ZDcsIDB4OGEsIDB4YTcsIDB4NGYsIDB4NjksIDB4YTUsIDB4ZDMsIDB4Y2YsIDB4NjksIDB4ZmIsIDB4NWEsCisJMHgyZiwgMHg3NiwgMHg1MywgMHg5NywgMHg4ZCwgMHhkMywgMHgyNywgMHhlOCwgMHg0OSwgMHg1ZiwgMHgyMywgMHhhNiwKKwkweDczLCAweDA5LCAweDNjLCAweDJjLCAweDk4LCAweDE1LCAweDMyLCAweDljLCAweDFlLCAweGVkLCAweDRlLCAweGUwLAorCTB4ZTksIDB4NzAsIDB4ZmUsIDB4MmMsIDB4NDksIDB4M2QsIDB4M2EsIDB4NmQsIDB4NzIsIDB4YTIsIDB4YjUsIDB4NjksCisJMHhmYSwgMHg3MywgMHhkMCwgMHg3NCwgMHhkMSwgMHhkZCwgMHhjYSwgMHg3YywgMHhlYiwgMHg1NSwgMHgzMCwgMHhhOSwKKwkweDkwLCAweDBlLCAweGQ2LCAweDJmLCAweDk2LCAweDlmLCAweDZkLCAweDdhLCAweGJhLCAweGEwLCAweGQyLCAweGMyLAorCTB4NWYsIDB4ZjQsIDB4NTcsIDB4NDcsIDB4YjYsIDB4ZjAsIDB4M2EsIDB4ZDgsIDB4YzIsIDB4ZDUsIDB4ODcsIDB4YTYsCisJMHgxZCwgMHhhZiwgMHhjZiwgMHhhMCwgMHg4YSwgMHgyOSwgMHhjOCwgMHgzNiwgMHg4YiwgMHhmNCwgMHg0NSwgMHg5YSwKKwkweDczLCAweDg5LCAweDhhLCAweDM1LCAweGVjLCAweGViLCAweDE4LCAweGUwLCAweDhmLCAweDAzLCAweGZlLCAweGVjLAorCTB4YWEsIDB4ZTgsIDB4ZTIsIDB4MWUsIDB4YTAsIDB4YTksIDB4NjgsIDB4NDYsIDB4YzgsIDB4Y2IsIDB4MjUsIDB4YmEsCisJMHg0YiwgMHhjMiwgMHg4YiwgMHhiYywgMHgwYiwgMHg1ZCwgMHhlZCwgMHhlMiwgMHgzZSwgMHhmNiwgMHg0ZSwgMHhjOCwKKwkweGJkLCAweGY1LCAweGJjLCAweDkzLCAweDU5LCAweDI2LCAweGQyLCAweDQ0LCAweDdlLCAweDBmLCAweGYwLCAweGIxLAorCTB4MGUsIDB4ZjMsIDB4YmEsIDB4NzksIDB4ZDAsIDB4YzksIDB4ZjQsIDB4NzMsIDB4ZGYsIDB4MDEsIDB4NGMsIDB4MDIsCisJMHhmYSwgMHhkZSwgMHhkZCwgMHg0NiwgMHgyYiwgMHhlOCwgMHg0OSwgMHgzMywgMHhiZiwgMHg5OSwgMHg3ZiwgMHhmMiwKKwkweGFjLCAweGRhLCAweGI1LCAweGIzLCAweDdlLCAweDEwLCAweDBjLCAweDhmLCAweDFhLCAweGY0LCAweDYzLCAweDc5LAorCTB4NjYsIDB4YjYsIDB4MzcsIDB4NWUsIDB4OTcsIDB4MGUsIDB4ZjUsIDB4MjMsIDB4MDEsIDB4OWQsIDB4MjIsIDB4YWQsCisJMHhlYywgMHg5YSwgMHg2YiwgMHhiOCwgMHhjYSwgMHg0NCwgMHg0MiwgMHhjZiwgMHgyNywgMHhhOSwgMHgyOCwgMHhlOSwKKwkweDFiLCAweGMzLCAweDVlLCAweDZjLCAweDg3LCAweGIwLCAweDI3LCAweDg3LCAweGNmLCAweGMyLCAweDczLCAweDc5LAorCTB4ZDgsIDB4YmIsIDB4Y2QsIDB4N2QsIDB4MmEsIDB4ZDcsIDB4ZDksIDB4ZjYsIDB4OTksIDB4YjYsIDB4NTUsIDB4NWIsCisJMHhmZSwgMHhkMywgMHgyYywgMHg4OSwgMHg0ZiwgMHgwYywgMHhlOCwgMHhkNCwgMHg0YiwgMHgxMywgMHhlZSwgMHg4NywKKwkweDgxLCAweGQ4LCAweDhkLCAweGY3LCAweDIzLCAweDE5LCAweGQwLCAweDY2LCAweDViLCAweGIwLCAweGNhLCAweDk0LAorCTB4NGUsIDB4MWEsIDB4ZTgsIDB4ZGUsIDB4OTMsIDB4MzEsIDB4YzksIDB4YzEsIDB4ZDksIDB4YzAsIDB4ZGYsIDB4ODksCisJMHg1NSwgMHgzMCwgMHhmZiwgMHhkMywgMHhlOCwgMHg1NCwgMHg3OCwgMHg0MSwgMHg2NiwgMHhjMSwgMHgwMywgMHg4ZCwKKwkweDllLCAweGZiLCAweDY1LCAweGM5LCAweDMzLCAweDEzLCAweGU3LCAweGQ3LCAweGU3LCAweDk5LCAweGJmLCAweDVkLAorCTB4YjAsIDB4MGIsIDB4OGQsIDB4Y2EsIDB4MmUsIDB4ZTMsIDB4OGUsIDB4NzAsIDB4MDgsIDB4MWEsIDB4YmUsIDB4YTUsCisJMHgxZCwgMHg0NywgMHgyNCwgMHg1ZiwgMHhkNiwgMHg1ZCwgMHg4MywgMHg0NiwgMHg0NywgMHg3OSwgMHgyZCwgMHhhZiwKKwkweGUzLCAweGY1LCAweGY2LCAweDk4LCAweDI1LCAweDNlLCAweDA4LCAweGY2LCAweGFlLCAweGRiLCAweGQzLCAweDIxLAorCTB4MzEsIDB4MGYsIDB4OWEsIDB4OTUsIDB4MmMsIDB4YzAsIDB4YzMsIDB4Y2YsIDB4NWIsIDB4Y2IsIDB4NzIsIDB4ZDgsCisJMHhjOCwgMHg2ZiwgMHg1ZSwgMHhkYiwgMHhiZSwgMHgwZSwgMHhmYSwgMHgzYywgMHhjMCwgMHgzNCwgMHg5YywgMHg0YywKKwkweDJhLCAweDNiLCAweDhkLCAweDY4LCAweDhhLCAweDY0LCAweGE5LCAweDg1LCAweDM4LCAweDNlLCAweGViLCAweDFjLAorCTB4YmMsIDB4MWUsIDB4ZmUsIDB4YzMsIDB4ODcsIDB4ZmYsIDB4ODAsIDB4NGYsIDB4M2MsIDB4ZWYsIDB4YzMsIDB4YmYsCisJMHhmOCwgMHhlYywgMHg2ZiwgMHgyYywgMHg3YSwgMHg3ZSwgMHgxOCwgMHhmZSwgMHhmMSwgMHg5YSwgMHg3ZiwgMHg0MiwKKwkweDFiLCAweDQ3LCAweDVmLCAweDkwLCAweDBlLCAweGZmLCAweDM0LCAweGRiLCAweDEwLCAweGIwLCAweDczLCAweGY4LAorCTB4OGEsIDB4MTUsIDB4OWUsIDB4ODMsIDB4NWYsIDB4NTgsIDB4MjksIDB4ZTEsIDB4ZTksIDB4NTAsIDB4YjUsIDB4YzksCisJMHg3YSwgMHgxOCwgMHhmOSwgMHg2MSwgMHhmNiwgMHg1NywgMHgxOSwgMHhmOCwgMHgyNiwgMHhmNiwgMHg0NywgMHhlYywKKwkweGI3LCAweDc4LCAweDZkLCAweDEwLCAweDk0LCAweDVjLCAweDg2LCAweDBkLCAweDIwLCAweDQ3LCAweGI2LCAweGJiLAorCTB4MjQsIDB4ODksIDB4NTQsIDB4NDUsIDB4M2IsIDB4MzQsIDB4MGMsIDB4N2IsIDB4YmMsIDB4ODksIDB4N2QsIDB4MGIsCisJMHhkYiwgMHhlNSwgMHg4ZCwgMHg0NCwgMHg5ZCwgMHhiYywgMHhkZiwgMHhhZiwgMHhiYiwgMHhkNSwgMHhiZiwgMHhkOSwKKwkweGRiLCAweDg0LCAweDM1LCAweGYyLCAweGQ5LCAweGEzLCAweGM2LCAweDY2LCAweGU4LCAweDk3LCAweGY4LCAweGJkLAorCTB4NmQsIDB4MTUsIDB4NjgsIDB4NTcsIDB4MzgsIDB4ZTYsIDB4ZmUsIDB4MWEsIDB4YmQsIDB4YWUsIDB4YjgsIDB4MjUsCisJMHg0MSwgMHgzYiwgMHg0ZiwgMHgyOSwgMHg3ZiwgMHhiYSwgMHg3MywgMHgwOSwgMHg5YSwgMHg3MSwgMHg0YSwgMHhkMSwKKwkweGI4LCAweGYzLCAweDZjLCAweGU0LCAweDU3LCAweDkzLCAweGMwLCAweDA3LCAweGZhLCAweGZjLCAweGI1LCAweDE4LAorCTB4ODIsIDB4ZjYsIDB4OWUsIDB4MDYsIDB4ZDMsIDB4YzIsIDB4ZGMsIDB4NDYsIDB4NWUsIDB4YjAsIDB4MmYsIDB4NjcsCisJMHhmYiwgMHgzNCwgMHhkYiwgMHhlZCwgMHg3MywgMHgyZiwgMHhlYywgMHhkMywgMHhlZCwgMHgyNCwgMHhkYiwgMHhmZCwKKwkweDI3LCAweGQ4LCAweGU3LCAweGI3LCAweDVkLCAweDBkLCAweGJjLCAweDIxLCAweGJhLCAweDU0LCAweGNiLCAweGMwLAorCTB4M2YsIDB4MTgsIDB4OTksIDB4ZDcsIDB4NjksIDB4OTcsIDB4MzUsIDB4MGIsIDB4YmQsIDB4M2MsIDB4YzksIDB4NzMsCisJMHg0ZCwgMHhjYywgMHg0OSwgMHgzZiwgMHhhZSwgMHhmYywgMHhjNywgMHg2NSwgMHhmZCwgMHhiYiwgMHhhMCwgMHgyYiwKKwkweDA4LCAweDY2LCAweDgxLCAweGIzLCAweDNjLCAweGEyLCAweDg3LCAweGI2LCAweDE4LCAweGNkLCAweDVmLCAweDQ1LAorCTB4M2MsIDB4ZjQsIDB4N2UsIDB4NDMsIDB4YTcsIDB4NGEsIDB4YjYsIDB4ODMsIDB4ZWMsIDB4ZWMsIDB4MTIsIDB4NzAsCisJMHg0ZiwgMHhiYiwgMHhjYSwgMHhlZSwgMHhkOSwgMHgzNiwgMHg5NiwgMHg4MSwgMHg3ZiwgMHhjZSwgMHgxZiwgMHg4NiwKKwkweDVmLCAweDYwLCAweGJiLCAweDAxLCAweDVkLCAweGMwLCAweGJmLCAweDBjLCAweGZjLCAweDczLCAweGFkLCAweDBlLAorCTB4ZmEsIDB4OTYsIDB4MTEsIDB4YzUsIDB4ZDksIDB4ZTgsIDB4M2MsIDB4ZGIsIDB4YjAsIDB4MmMsIDB4ZGEsIDB4ZjcsCisJMHgwOCwgMHhkZCwgMHhlNSwgMHhhNywgMHhlMCwgMHg3MywgMHhkOCwgMHgyNywgMHg1NywgMHhiMywgMHhiMCwgMHgyYiwKKwkweGFkLCAweGVhLCAweGYyLCAweGRlLCAweDNhLCAweDJkLCAweGFmLCAweGFkLCAweGExLCAweDQyLCAweDU1LCAweGQ5LAorCTB4NmMsIDB4YzEsIDB4MWIsIDB4YWUsIDB4NjQsIDB4NzQsIDB4ZTksIDB4N2IsIDB4ODgsIDB4ZWUsIDB4ODQsIDB4YWQsCisJMHgyZSwgMHgzYiwgMHgzYywgMHhlNiwgMHg3OSwgMHgzNSwgMHgzNywgMHg1ZSwgMHgxYiwgMHhkMCwgMHg4YSwgMHhlYywKKwkweGJmLCAweDg2LCAweDNmLCAweDA0LCAweDdkLCAweDZhLCAweGVlLCAweGI3LCAweDZiLCAweDBmLCAweGIxLCAweDhjLAorCTB4NzAsIDB4MTYsIDB4YjIsIDB4YWEsIDB4ZWUsIDB4N2YsIDB4MDYsIDB4ZDAsIDB4ZGYsIDB4NzUsIDB4MzAsIDB4ZDcsCisJMHhjNywgMHg2MywgMHg4ZiwgMHgyYiwgMHg5ZCwgMHgyNSwgMHg2ZCwgMHhiZiwgMHgyMywgMHgwNiwgMHgzYSwgMHg0MywKKwkweDlmLCAweGI3LCAweDFmLCAweDkzLCAweGZiLCAweDZhLCAweGQ1LCAweGZlLCAweDRlLCAweGZhLCAweDUwLCAweGU3LAorCTB4MTgsIDB4N2MsIDB4ODUsIDB4YzgsIDB4ZjAsIDB4NmEsIDB4YmIsIDB4YzEsIDB4OGYsIDB4NmEsIDB4NWYsIDB4ZGIsCisJMHg1YywgMHhhMiwgMHg1NCwgMHgwYiwgMHhlOCwgMHhhMiwgMHhhYiwgMHg2MCwgMHgzMCwgMHg0ZSwgMHgxNiwgMHg2YiwKKwkweDYyLCAweDIwLCAweDQxLCAweDZiLCAweDYzLCAweDkzLCAweDYxLCAweDU2LCAweDY4LCAweDc3LCAweDc2LCAweDk5LAorCTB4MjQsIDB4NmMsIDB4N2YsIDB4ZTIsIDB4MWEsIDB4NmMsIDB4YmEsIDB4NTQsIDB4YWIsIDB4ZjYsIDB4YjUsIDB4OGQsCisJMHgzMywgMHg0NSwgMHhlMCwgMHgxMiwgMHg3YiwgMHhkNywgMHg2MCwgMHgwNywgMHhhZiwgMHhjMSwgMHg2ZSwgMHgyNSwKKwkweGFiLCAweDhmLCAweGUxLCAweGM1LCAweGMwLCAweGU2LCAweDZiLCAweGI4LCAweGFkLCAweDkwLCAweDllLCAweGZlLAorCTB4Y2QsIDB4ZDcsIDB4NzAsIDB4MzgsIDB4OGMsIDB4YjMsIDB4NmQsIDB4OWMsIDB4NjUsIDB4OWMsIDB4M2IsIDB4YWYsCisJMHhlMSwgMHgxYywgMHg1OSwgMHg0ZiwgMHhjZiwgMHgxMSwgMHg4MiwgMHgwZiwgMHg0YSwgMHg3NCwgMHhlNiwgMHg2OSwKKwkweGVmLCAweGE1LCAweGRhLCAweGQwLCAweGM0LCAweDVkLCAweDg0LCAweGY4LCAweDM4LCAweGIyLCAweDI5LCAweGY0LAorCTB4ZTEsIDB4YzYsIDB4NWUsIDB4MGYsIDB4YmMsIDB4MzIsIDB4ODgsIDB4N2QsIDB4YTIsIDB4NDYsIDB4NTUsIDB4YzgsCisJMHhmOSwgMHg4ZiwgMHg5YSwgMHhiNCwgMHhmNywgMHg2MiwgMHhkMywgMHgwOCwgMHg3NSwgMHg4OSwgMHg3NSwgMHhlMiwKKwkweDZkLCAweGQ4LCAweDU4LCAweDcyLCAweGNhLCAweDQwLCAweDBjLCAweGJmLCAweDIwLCAweDZkLCAweDhjLCAweDI2LAorCTB4YWEsIDB4MzUsIDB4YWEsIDB4NmMsIDB4Y2YsIDB4M2YsIDB4MTEsIDB4NDAsIDB4MTcsIDB4YTcsIDB4ZTAsIDB4ZDMsCisJMHhjMCwgMHhlMywgMHhlNCwgMHg5OCwgMHg5NywgMHhjMywgMHg3YywgMHg5MywgMHg2ZCwgMHgwYiwgMHg3ZSwgMHgwNSwKKwkweGIwLCAweGQwLCAweGI1LCAweDg0LCAweDNlLCAweGJmLCAweGViLCAweDU1LCAweDRmLCAweGU3LCAweDdkLCAweDJjLAorCTB4ZTQsIDB4NWMsIDB4ODksIDB4ODQsIDB4OTgsIDB4YmYsIDB4MWEsIDB4YjAsIDB4OWUsIDB4NGQsIDB4OGYsIDB4NWMsCisJMHg0NSwgMHg4ZSwgMHg2MywgMHg5MiwgMHgzNywgMHgwNiwgMHhmZiwgMHgwMSwgMHg3ZCwgMHg5ZiwgMHg2ZCwgMHgxMSwKKwkweDcyLCAweDgyLCAweDNmLCAweGVkLCAweDU1LCAweDM2LCAweGY2LCAweDlkLCAweGFkLCAweGVhLCAweDQ5LCAweDA2LAorCTB4ZmIsIDB4ZjIsIDB4ZTksIDB4MWMsIDB4ZTcsIDB4MGYsIDB4OWQsIDB4MDksIDB4MmYsIDB4MzcsIDB4YmUsIDB4NGQsCisJMHgzZiwgMHg3YiwgMHg2MCwgMHg5YiwgMHgzOCwgMHg1YiwgMHhkOSwgMHgyNiwgMHgxMCwgMHgwMywgMHg2MCwgMHg1MywKKwkweGMyLCAweGNiLCAweGExLCAweDdmLCAweDM2LCAweGIyLCAweGExLCAweDBjLCAweDZjLCAweDg4LCAweDY5LCAweDY1LAorCTB4M2EsIDB4N2YsIDB4MDQsIDB4N2IsIDB4OTUsIDB4YjQsIDB4ZDIsIDB4ODQsIDB4MGYsIDB4OWEsIDB4NDYsIDB4M2YsCisJMHg4MiwgMHg5ZSwgMHhlMCwgMHgyYywgMHhmMCwgMHg4MSwgMHgwNSwgMHg3MCwgMHg0OSwgMHg4YywgMHhmZSwgMHgyYSwKKwkweGI0LCAweDY3LCAweGVlLCAweGJmLCAweDFiLCAweGE4LCAweDc4LCAweDcyLCAweDMwLCAweGRjLCAweGZmLCAweDE3LAorCTB4YTEsIDB4MGYsIDB4ODgsIDB4NzAsIDB4MzEsIDB4OWUsIDB4YWMsIDB4MzYsIDB4ODEsIDB4NWMsIDB4NjgsIDB4YTIsCisJMHg2NSwgMHg2OCwgMHhlYywgMHhjZiwgMHg4YiwgMHgzZSwgMHhlNywgMHgzMCwgMHg5YywgMHhiZiwgMHgzYywgMHgxZSwKKwkweGZhLCAweDQ1LCAweGNlLCAweDViLCAweDkyLCAweDIxLCAweDRmLCAweDczLCAweDUxLCAweDVjLCAweDk0LCAweGY2LAorCTB4ODYsIDB4MTgsIDB4NjUsIDB4OTUsIDB4NWQsIDB4OTksIDB4ZDMsIDB4NjgsIDB4ZDMsIDB4YjksIDB4MjQsIDB4ZDYsCisJMHg2MSwgMHhhZSwgMHg4NSwgMHg3MywgMHhjMywgMHgyZiwgMHgyMSwgMHgwZiwgMHhlMiwgMHhkYywgMHgxNCwgMHhlYiwKKwkweDNiLCAweDQzLCAweDliLCAweGJmLCAweDQ0LCAweDY1LCAweGY4LCAweDU0LCAweGMzLCAweGUxLCAweGY3LCAweDVlLAorCTB4MmYsIDB4NzUsIDB4NjEsIDB4ZGMsIDB4YzQsIDB4NWUsIDB4ZjAsIDB4MTMsIDB4YmEsIDB4ZTQsIDB4MzMsIDB4NjIsCisJMHg0MSwgMHhmYSwgMHgwNiwgMHhjZSwgMHhhZiwgMHhiMCwgMHhkNiwgMHhjMiwgMHg1YSwgMHhmNiwgMHhiYiwgMHhiYywKKwkweGY2LCAweDNjLCAweGU4LCAweGMwLCAweGI4LCAweGM5LCAweDMwLCAweGVjLCAweGEzLCAweDgyLCAweGY3LCAweGJjLAorCTB4ZGMsIDB4MWUsIDB4NzMsIDB4ODIsIDB4MTIsIDB4MjEsIDB4NWUsIDB4YWIsIDB4MGQsIDB4ZWYsIDB4YzYsIDB4YjUsCisJMHg5YywgMHhkMywgMHgwNCwgMHgxNywgMHg3NCwgMHg4NywgMHhmMSwgMHg0NywgMHg3OSwgMHgxOCwgMHhkMSwgMHhmNCwKKwkweDA5LCAweGU0LCAweDcxLCAweDRlLCAweDA3LCAweGUyLCAweDE0LCAweDhmLCAweDg2LCAweDRjLCAweDc1LCAweGNlLAorCTB4MDgsIDB4ZTYsIDB4ODEsIDB4ZmUsIDB4ZjUsIDB4ZTMsIDB4YmIsIDB4NTMsIDB4ZDcsIDB4ZmMsIDB4MjMsIDB4NWIsCisJMHgxNywgMHgxNSwgMHgxMCwgMHgxZiwgMHhjMCwgMHgyNywgMHg2YiwgMHg4YSwgMHg3MywgMHhiZiwgMHg2MiwgMHg1MywKKwkweGEyLCAweGM0LCAweGRjLCAweDE4LCAweDdjLCAweGEyLCAweGNhLCAweGEzLCAweDJlLCAweGY4LCAweDFiLCAweGU1LAorCTB4NjYsIDB4ODIsIDB4ZDcsIDB4MDUsIDB4ZjAsIDB4ZDcsIDB4ODIsIDB4ZmUsIDB4OGMsIDB4MDMsIDB4OTYsIDB4OGUsCisJMHgwMCwgMHgwNywgMHhjNywgMHg2YSwgMHg1NywgMHhlNCwgMHg1MywgMHg1NCwgMHgzNiwgMHgzOSwgMHhhNywgMHhlOCwKKwkweDY0LCAweGZhLCAweDBhLCAweDZjLCAweGZiLCAweDIyLCAweGJmLCAweDE5LCAweDczLCAweGRjLCAweDdmLCAweGFjLAorCTB4NTcsIDB4YzksIDB4YWIsIDB4OWIsIDB4YzcsIDB4MTMsIDB4MjIsIDB4ZGYsIDB4YmIsIDB4NjEsIDB4ZmUsIDB4OWYsCisJMHhiYiwgMHgxNSwgMHg2ZCwgMHg3MiwgMHg4YywgMHhmOSwgMHg3ZiwgMHhkYiwgMHgzMCwgMHhmZSwgMHhlMywgMHhkNCwKKwkweGZhLCAweGYxLCAweGRkLCAweGRiLCAweDQyLCAweGZkLCAweDQzLCAweGZmLCAweGYxLCAweDkwLCAweDVlLCAweGQwLAorCTB4YjYsIDB4NDYsIDB4NmIsIDB4OTQsIDB4MmIsIDB4NTMsIDB4NWQsIDB4MjAsIDB4NWYsIDB4ZjQsIDB4NzIsIDB4YmIsCisJMHhhYywgMHgyYSwgMHg2YywgMHhhYSwgMHhkNCwgMHgwMiwgMHhkZCwgMHg2YiwgMHg3MSwgMHg2YywgMHg2ZCwgMHg0ZCwKKwkweGU1LCAweGRhLCAweDFhLCAweGU1LCAweGU3LCAweDRiLCAweGFkLCAweDAwLCAweDc5LCAweDU2LCAweDdiLCAweGNjLAorCTB4Y2IsIDB4YTIsIDB4NWYsIDB4YzEsIDB4M2UsIDB4MDUsIDB4OWEsIDB4ZjYsIDB4MmYsIDB4MTYsIDB4ODQsIDB4NzMsCisJMHg0YywgMHhlNiwgMHg4OSwgMHhjMiwgMHg3OSwgMHg0YSwgMHgyYiwgMHgyZCwgMHg3MywgMHhmZSwgMHgwOCwgMHg1YiwKKwkweDcyLCAweDY0LCAweGRkLCAweDgwLCAweDk4LCAweDcyLCAweDVjLCAweDJiLCAweDljLCAweDVlLCAweDQwLCAweGZlLAorCTB4YjgsIDB4ODIsIDB4ZGYsIDB4MTksIDB4ZmMsIDB4OWEsIDB4ZjgsIDB4NDUsIDB4ZjksIDB4ZmIsIDB4MzMsIDB4YzgsCisJMHhmZiwgMHhhNSwgMHg3ZiwgMHg0NSwgMHgyYywgMHg1MCwgMHhmYiwgMHhmZiwgMHg2MiwgMHgwNSwgMHgzYSwgMHhiNiwKKwkweDkwLCAweGE2LCAweDZmLCAweDNiLCAweGEyLCAweDVmLCAweDI4LCAweDlmLCAweDUyLCAweDQwLCAweGRlLCAweDZiLAorCTB4YmUsIDB4NGQsIDB4YmYsIDB4MTMsIDB4ZTYsIDB4NTAsIDB4NDQsIDB4YWYsIDB4ZDcsIDB4YzEsIDB4YzcsIDB4OTEsCisJMHhmZCwgMHhhMSwgMHhiZSwgMHg2NiwgMHgxZiwgMHhmNCwgMHhhNCwgMHhlZiwgMHgwYywgMHg3MywgMHgyNCwgMHhlNCwKKwkweDZhLCAweDA1LCAweGI5LCAweGVhLCAweGZiLCAweGUwLCAweDhkLCAweDQ2LCAweDZmLCAweDQxLCAweDdmLCAweDVlLAorCTB4YWYsIDB4NzcsIDB4ODEsIDB4MWUsIDB4ODcsIDB4Y2EsIDB4OTMsIDB4ZjYsIDB4MTgsIDB4NjksIDB4NDMsIDB4ZTYsCisJMHgyNiwgMHhhZCwgMHgwYiwgMHgzNiwgMHgwYywgMHhmYiwgMHg5NiwgMHg2MywgMHg0YSwgMHg3NCwgMHhlNCwgMHhjZiwKKwkweGNkLCAweDJjLCAweGQ1LCAweDA0LCAweGQ2LCAweDIyLCAweGVmLCAweGM5LCAweGExLCAweDBmLCAweGQ5LCAweDVmLAorCTB4YTksIDB4MzMsIDB4OWMsIDB4YTAsIDB4MzcsIDB4ZWEsIDB4M2EsIDB4YmQsIDB4ODksIDB4YmMsIDB4ZWIsIDB4MmQsCisJMHhlNywgMHhkYywgMHgwYywgMHg2MiwgMHhkNiwgMHgwMCwgMHhlMiwgMHgwMywgMHg2YSwgMHg5OCwgMHg1ZCwgMHhlYywKKwkweGEzLCAweDc3LCAweDFhLCAweDc4LCAweDk2LCAweGYwLCAweGJiLCAweDEzLCAweDc5LCAweGUzLCAweGY1LCAweDYxLAorCTB4M2UsIDB4NmQsIDB4M2QsIDB4ZDMsIDB4OTYsIDB4MDAsIDB4MGMsIDB4YWYsIDB4MzcsIDB4NDAsIDB4NWIsIDB4MGYsCisJMHhlNCwgMHg2ZiwgMHg5YiwgMHg1MywgMHhmNCwgMHhjYiwgMHg1ZSwgMHg5OSwgMHhhYiwgMHg2OCwgMHgzYywgMHhhZiwKKwkweGZjLCAweGQyLCAweDI3LCAweGU3LCAweDk5LCAweGNmLCAweDNhLCAweDc0LCAweDljLCAweGM3LCAweGZjLCAweDhlLAorCTB4ZmQsIDB4MjcsIDB4ZTMsIDB4YjMsIDB4YzcsIDB4MGEsIDB4MzgsIDB4Y2MsIDB4OTUsIDB4YmEsIDB4ZWEsIDB4NDcsCisJMHg3MywgMHhhNCwgMHg0NSwgMHgzMSwgMHg4YywgMHhmZCwgMHg2MiwgMHg4OSwgMHgwYSwgMHg5MiwgMHhlZiwgMHgxMywKKwkweDI0LCAweDY1LCAweGIwLCAweDRlLCAweDllLCAweDk0LCAweDMwLCAweGYyLCAweGY1LCAweDk5LCAweDM5LCAweDg3LAorCTB4ZTUsIDB4MGEsIDB4ZmYsIDB4NTYsIDB4OGIsIDB4ZTQsIDB4Y2EsIDB4MzIsIDB4ZWEsIDB4YTQsIDB4NmEsIDB4ZmQsCisJMHgyOSwgMHhjOCwgMHg1NSwgMHg4NCwgMHhmNSwgMHgwMSwgMHhlYywgMHg3YiwgMHg4MSwgMHhlNSwgMHg4YiwgMHhiYSwKKwkweGIxLCAweDhlLCAweGJjLCAweGE3LCAweDRlLCAweDI5LCAweDU1LCAweGRmLCAweDFjLCAweDQ3LCAweDVkLCAweDAwLAorCTB4ZjksIDB4ZDUsIDB4MTYsIDB4ODAsIDB4MDMsIDB4MzYsIDB4NWEsIDB4NWIsIDB4YzEsIDB4MTMsIDB4YjUsIDB4NDgsCisJMHhlZCwgMHgwYywgMHg5ZSwgMHg4MywgMHg3OCwgMHgzNiwgMHg1OSwgMHgzNywgMHhjMywgMHgzYywgMHhlMywgMHgxMywKKwkweGY0LCAweGMwLCAweDllLCAweDRhLCAweDZjLCAweDRmLCAweGY0LCAweDhmLCAweGFkLCAweDNjLCAweGZkLCAweDQzLAorCTB4NmIsIDB4OGMsIDB4N2UsIDB4ZDQsIDB4Y2EsIDB4ZDEsIDB4MGYsIDB4NWIsIDB4MmUsIDB4ZmQsIDB4N2QsIDB4NmIsCisJMHg4NCwgMHg5ZSwgMHg2ZCwgMHg2NSwgMHhiOSwgMHg5NiwgMHg0MywgMHhjZSwgMHg2NCwgMHg3MSwgMHhjZSwgMHg0NCwKKwkweDBmLCAweGZhLCAweGI3LCAweGMzLCAweGRlLCAweDU5LCAweGZlLCAweGU3LCAweDY2LCAweDBhLCAweGNkLCAweDIxLAorCTB4MmEsIDB4OWYsIDB4ODAsIDB4NmYsIDB4NzYsIDB4NmYsIDB4ZTMsIDB4MWEsIDB4OTQsIDB4MWUsIDB4NzMsIDB4YjksCisJMHg4NiwgMHhlOCwgMHhlMCwgMHhmNywgMHhhOCwgMHgyMywgMHhlMCwgMHhiYiwgMHhlMSwgMHhjYiwgMHhhNiwgMHhkMiwKKwkweGY2LCAweDM5LCAweDRmLCAweDFmLCAweDA4LCAweDdkLCAweGMwLCAweDVkLCAweDI5LCAweGVhLCAweGMyLCAweDVlLAorCTB4ZjAsIDB4N2YsIDB4MTcsIDB4OWYsIDB4ODYsIDB4MGQsIDB4YzgsIDB4MWEsIDB4MjgsIDB4MDEsIDB4NWYsIDB4YzMsCisJMHg3OSwgMHg4MCwgMHhjMSwgMHg3NiwgMHhjYywgMHhmNSwgMHg4NywgMHhlNSwgMHhlOSwgMHg1YywgMHgxNywgMHhiMiwKKwkweDNkLCAweGViLCAweDA4LCAweDFhLCAweDBjLCAweDM3LCAweDY5LCAweGIyLCAweGRjLCAweDBjLCAweDg3LCAweDdkLAorCTB4NmEsIDB4MjEsIDB4ZjQsIDB4NmYsIDB4ODksIDB4NTAsIDB4MmYsIDB4NGQsIDB4Y2MsIDB4M2YsIDB4MTUsIDB4ZmEsCisJMHhlMywgMHg4ZCwgMHhmYiwgMHgyMCwgMHg1NiwgMHgyMCwgMHg5NywgMHg1NCwgMHhlYiwgMHgxOCwgMHg1NiwgMHgwYiwKKwkweDYxLCAweGZiLCAweGMzLCAweGI5LCAweDI0LCAweGY4LCAweGVkLCAweDUyLCAweGQ5LCAweDdmLCAweDQzLCAweGUzLAorCTB4MWMsIDB4NWIsIDB4MzgsIDB4Y2MsIDB4ZmYsIDB4MTEsIDB4OGMsIDB4MmYsIDB4ODcsIDB4ZTMsIDB4YWYsIDB4ZDAsCisJMHhmNCwgMHgyMiwgMHg4MSwgMHhkNiwgMHhkNywgMHhiNCwgMHhhMiwgMHgxYywgMHg4ZiwgMHg2MSwgMHgyYywgMHgzMCwKKwkweGQ2LCAweGI5LCAweDZlLCAweGUwLCAweDBjLCAweDIzLCAweGM1LCAweGJhLCAweDJlLCAweDljLCAweDcxLCAweGYwLAorCTB4NzEsIDB4MTIsIDB4YmYsIDB4ODIsIDB4ZmMsIDB4M2QsIDB4ZTIsIDB4MGYsIDB4MTUsIDB4ZGUsIDB4NDEsIDB4YmMsCisJMHhkMCwgMHgzYSwgMHhhMiwgMHhkYywgMHg2NywgMHgzYiwgMHg2YSwgMHhjZiwgMHgyMCwgMHgzOCwgMHg4NCwgMHg1YSwKKwkweGRkLCAweDRhLCAweDE5LCAweGY0LCAweDJmLCAweGYzLCAweGI2LCAweDc5LCAweDQ4LCAweGNjLCAweGUxLCAweDRjLAorCTB4NDEsIDB4MzAsIDB4ZTEsIDB4ZDgsIDB4OTUsIDB4ODIsIDB4ZTgsIDB4YTYsIDB4OWYsIDB4MWYsIDB4ZTcsIDB4YjgsCisJMHg1YiwgMHg5ZiwgMHg3OSwgMHgwMSwgMHhiYSwgMHhkNywgMHg1OCwgMHhlOSwgMHhhNCwgMHg0NiwgMHhjMywgMHhhMCwKKwkweDJiLCAweGEzLCAweDQzLCAweGEwLCAweGQzLCAweGE0LCAweDQ2LCAweDMzLCAweDg1LCAweDVjLCAweDZlLCAweDMzLAorCTB4YTEsIDB4M2MsIDB4OTQsIDB4MGUsIDB4NDMsIDB4Y2YsIDB4NjcsIDB4YTUsIDB4OGYsIDB4ZjYsIDB4MWMsIDB4M2MsCisJMHg5YiwgMHgxZiwgMHhmNCwgMHhhZSwgMHgzZiwgMHg3MywgMHgwOSwgMHhmNCwgMHhmNywgMHhhMCwgMHgwYSwgMHhkOSwKKwkweDJlLCAweGU1LCAweDVjLCAweGY2LCAweDg3LCAweDRjLCAweDRmLCAweDIwLCAweDZlLCAweDE5LCAweDQzLCAweGU2LAorCTB4N2UsIDB4ZjEsIDB4YWIsIDB4ZTAsIDB4MGUsIDB4ODMsIDB4NjUsIDB4ZjcsIDB4YWEsIDB4YWMsIDB4NzcsIDB4NjQsCisJMHg5YywgMHhjMywgMHg3ZSwgMHg0YiwgMHgyYiwgMHhhZiwgMHg4MSwgMHgxNiwgMHg5MywgMHg5ZSwgMHg2ZCwgMHg2ZSwKKwkweDBmLCAweGM3LCAweDk2LCAweGU0LCAweGM1LCAweGIzLCAweGNkLCAweDJlLCAweGZhLCAweDYxLCAweDYzLCAweDBiLAorCTB4MmQsIDB4MzcsIDB4ZjgsIDB4N2QsIDB4MjcsIDB4MmQsIDB4MzUsIDB4ODYsIDB4YWUsIDB4MWUsIDB4MTUsIDB4MDMsCisJMHhiNCwgMHg3YSwgMHhlMywgMHg0ZCwgMHhlNiwgMHg1NywgMHgwNSwgMHhmMiwgMHg4MiwgMHhjOSwgMHg4ZiwgMHhlOSwKKwkweGJkLCAweGQxLCAweDVlLCAweGZhLCAweGU5LCAweDNkLCAweDc2LCAweGZkLCAweDdlLCAweDAxLCAweDFiLCAweDE4LAorCTB4NGQsIDB4YjIsIDB4NmQsIDB4YTMsIDB4Y2YsIDB4ZjMsIDB4ZjYsIDB4NTUsIDB4NGIsIDB4YjAsIDB4NmUsIDB4ZmYsCisJMHgwNCwgMHgzYywgMHhiNSwgMHg4ZiwgMHgyOSwgMHgzYiwgMHg2MCwgMHhkYywgMHg4YywgMHgxNywgMHhiYSwgMHhlMSwKKwkweGJjLCAweDA4LCAweDljLCAweDc4LCAweGQ3LCAweDFjLCAweDAyLCAweGFlLCAweDE3LCAweDI1LCAweDJmLCAweDBlLAorCTB4YjksIDB4ZjYsIDB4NTUsIDB4NDIsIDB4MGUsIDB4NzksIDB4YzUsIDB4MTksIDB4Y2EsIDB4MGEsIDB4YjEsIDB4OWQsCisJMHgxYSwgMHg5OSwgMHg5YiwgMHhjYywgMHhmMywgMHhmMCwgMHhmZiwgMHhhOCwgMHhhYiwgMHgyYSwgMHg5NywgMHhhOSwKKwkweDNlLCAweDczLCAweGM5LCAweDYxLCAweGZkLCAweDY3LCAweGJmLCAweGYxLCAweDEyLCAweGYyLCAweDRlLCAweDkzLAorCTB4NGUsIDB4MzQsIDB4ZDksIDB4NWYsIDB4MzIsIDB4MmUsIDB4Y2UsIDB4ZmQsIDB4NzcsIDB4OWIsIDB4NWYsIDB4MTMsCisJMHg5YywgMHgyMywgMHhlMCwgMHgxZCwgMHhlNiwgMHhmNSwgMHgyZiwgMHhiMSwgMHg5YywgMHgzYiwgMHgxOCwgMHgzNiwKKwkweDZiLCAweDg5LCAweDYwLCAweDAzLCAweDhmLCAweDg2LCAweGNjLCAweDVkLCAweDgyLCAweGY3LCAweGZiLCAweDZmLAorCTB4ZWMsIDB4ZmIsIDB4MmUsIDB4NjgsIDB4MWQsIDB4MDIsIDB4MmMsIDB4ZTIsIDB4NjUsIDB4YTYsIDB4N2QsIDB4OGYsCisJMHg1NywgMHhlNCwgMHgxZSwgMHhjNywgMHg5YiwgMHhjOCwgMHhmMywgMHhkNiwgMHhmNiwgMHhjMCwgMHg1YywgMHg1MywKKwkweGUwLCAweDljLCAweDg2LCAweDk0LCAweGNiLCAweDk1LCAweDUxLCAweGU2LCAweGVmLCAweDZkLCAweDdkLCAweDljLAorCTB4NjMsIDB4ZWEsIDB4ZjksIDB4YmYsIDB4MDksIDB4YTIsIDB4NWEsIDB4ZjMsIDB4OTUsIDB4ZjksIDB4NDksIDB4ZjgsCisJMHhlNywgMHgyMCwgMHhhOCwgMHhlZSwgMHgxZSwgMHg1MiwgMHg3MSwgMHg2OCwgMHg5MCwgMHhkZiwgMHgxZiwgMHg5MCwKKwkweGIyLCAweGE4LCAweDhhLCAweDRlLCAweGJhLCAweGMzLCAweGIwLCAweDAwLCAweGNiLCAweDczLCAweDJmLCAweDg3LAorCTB4NzIsIDB4ODQsIDB4MTEsIDB4NzUsIDB4YTEsIDB4ZGYsIDB4OGMsIDB4ZjQsIDB4MzIsIDB4MDUsIDB4MWQsIDB4ZGIsCisJMHg2MywgMHgxZSwgMHgwYSwgMHg2MywgMHgzMiwgMHhjNywgMHhiNCwgMHg5ZiwgMHg0MiwgMHhlNywgMHhhYywgMHgxNCwKKwkweGViLCAweDRkLCAweGFhLCAweGVmLCAweDlhLCAweGRlLCAweGYwLCAweGJiLCAweGZhLCAweDhjLCAweDA3LCAweGRhLAorCTB4OGEsIDB4MGIsIDB4OWQsIDB4NTQsIDB4YWEsIDB4MjcsIDB4OTAsIDB4MDMsIDB4MTksIDB4MzQsIDB4OTcsIDB4YzMsCisJMHgxOCwgMHgzYSwgMHg1NCwgMHg2YSwgMHhiMCwgMHhjZSwgMHg1NywgMHg0MiwgMHg5ZCwgMHg0ZiwgMHg4NiwgMHhiOCwKKwkweDRmLCAweDgyLCAweDE3LCAweGI2LCAweGI1LCAweDJhLCAweGI4LCAweDc2LCAweGRhLCAweDI2LCAweGViLCAweDVmLAorCTB4MWQsIDB4YjYsIDB4NWMsIDB4YWUsIDB4NzEsIDB4ZWQsIDB4ODksIDB4ZmMsIDB4ZGIsIDB4M2MsIDB4MzcsIDB4MzMsCisJMHhlZCwgMHgxOCwgMHhhMCwgMHg2YiwgMHg0NCwgMHgyYiwgMHhiNywgMHgxYywgMHhhZCwgMHhlYywgMHgzMywgMHg3ZCwKKwkweGJiLCAweDQxLCAweGI3LCAweDI2LCAweDZiLCAweGRjLCAweGE1LCAweGQ2LCAweDdiLCAweGMxLCAweGQyLCAweGVlLAorCTB4NGQsIDB4ZTgsIDB4NDMsIDB4ZTcsIDB4MjcsIDB4NTgsIDB4YWUsIDB4NWYsIDB4NjAsIDB4YmEsIDB4YWMsIDB4ODIsCisJMHg2MCwgMHgzZSwgMHhhNywgMHhlOSwgMHhkNCwgMHhmMCwgMHhkZiwgMHhmNSwgMHg3MiwgMHgzZSwgMHg3NSwgMHg3YSwKKwkweDk4LCAweGYxLCAweDgzLCAweDhlLCAweDc0LCAweDlhLCAweDk2LCAweDdkLCAweGRlLCAweGEzLCAweDNlLCAweGMzLAorCTB4M2MsIDB4MmMsIDB4MmYsIDB4OTgsIDB4ZjQsIDB4ODgsIDB4OTQsIDB4ZGIsIDB4NmIsIDB4ZDIsIDB4YTYsIDB4Y2IsCisJMHgyYiwgMHhiMCwgMHhhNSwgMHhkNCwgMHg5MCwgMHg3OSwgMHg5NCwgMHhlYywgMHhhYiwgMHgxNywgMHg3NSwgMHhiYiwKKwkweDNlLCAweDA1LCAweDdiLCAweDVlLCAweDVhLCAweGQ0LCAweDY5LCAweGE3LCAweGFjLCAweGIxLCAweDU4LCAweDM2LAorCTB4ZjYsIDB4MzEsIDB4NTgsIDB4N2MsIDB4NzgsIDB4ZjYsIDB4NDMsIDB4NmQsIDB4NjcsIDB4ZWYsIDB4YTEsIDB4NGIsCisJMHg0ZiwgMHhmZiwgMHgxNiwgMHg3YywgMHgwZCwgMHhmMywgMHhkNSwgMHhiMCwgMHgwZSwgMHgyMywgMHg5ZiwgMHg1OCwKKwkweDQwLCAweGVlLCAweDUxLCAweDQ1LCAweDZlLCAweDVjLCAweGM4LCAweDMwLCAweDZjLCAweGM0LCAweGVmLCAweGFkLAorCTB4OTIsIDB4ZmYsIDB4NDIsIDB4ZjIsIDB4N2YsIDB4MDcsIDB4NTUsIDB4YTUsIDB4MGQsIDB4NjUsIDB4ZTQsIDB4M2IsCisJMHgwMSwgMHgxYywgMHhlYSwgMHgxZCwgMHg4ZiwgMHg5MSwgMHgyYiwgMHhjOSwgMHg3NywgMHhmNywgMHgyYSwgMHgzOCwKKwkweGY2LCAweDExLCAweDE5LCAweDdlLCAweDc3LCAweDE0LCAweDdiLCAweDMyLCAweDhmLCAweGEzLCAweGY5LCAweDZlLAorCTB4NTIsIDB4MzYsIDB4MTQsIDB4ZjEsIDB4MWQsIDB4ODksIDB4NDQsIDB4MzMsIDB4NGQsIDB4YmYsIDB4OGIsIDB4OWEsCisJMHg2NywgMHhiMiwgMHgzOSwgMHg0OCwgMHhhNSwgMHhhNiwgMHgwNSwgMHgxOSwgMHhjYywgMHhmNCwgMHhmMSwgMHhkOSwKKwkweDhhLCAweDJiLCAweDM4LCAweDhmLCAweDYwLCAweDVhLCAweGVmLCAweGE1LCAweGMzLCAweDdlLCAweDQ0LCAweDRmLAorCTB4MzIsIDB4YTQsIDB4NmYsIDB4MzIsIDB4MWMsIDB4MjcsIDB4NDIsIDB4MWEsIDB4ZGEsIDB4ZjEsIDB4MjUsIDB4ODEsCisJMHgwYiwgMHgzMSwgMHgzZSwgMHhmNywgMHg1NywgMHgyMSwgMHgxZSwgMHhmNiwgMHgxZiwgMHhhMCwgMHg3NSwgMHgzMiwKKwkweDQzLCAweDJiLCAweDNlLCAweGQzLCAweGIxLCAweDg1LCAweGFhLCAweDY5LCAweGVlLCAweDFmLCAweDgwLCAweDllLAorCTB4MzEsIDB4OWUsIDB4NGQsIDB4OWMsIDB4YzcsIDB4YWMsIDB4ZTMsIDB4ZjEsIDB4OTEsIDB4NjYsIDB4MDUsIDB4M2MsCisJMHg2NiwgMHhmZSwgMHhmMiwgMHhiYSwgMHgyNCwgMHgyZCwgMHg3ZCwgMHg4NSwgMHhlNSwgMHhiNywgMHgwNywgMHhmOSwKKwkweDNiLCAweGViLCAweGMyLCAweDk2LCAweDUwLCAweGFmLCAweGQ0LCAweDllLCAweGE1LCAweDg1LCAweDFlLCAweGM4LAorCTB4OGEsIDB4ZjcsIDB4ZWQsIDB4YTIsIDB4YmIsIDB4NjEsIDB4ZWYsIDB4YzUsIDB4MDYsIDB4ZWYsIDB4M2YsIDB4MDksCisJMHgzZCwgMHg3YSwgMHg1OSwgMHhlZSwgMHg1ZiwgMHg1YSwgMHgxOSwgMHgwOCwgMHhlMSwgMHgxOSwgMHhiNiwgMHg2NywKKwkweDAzLCAweDZjLCAweDI3LCAweGVkLCAweGFiLCAweDliLCAweGQ3LCAweDgxLCAweGZmLCAweDdkLCAweGMwLCAweDBiLAorCTB4M2EsIDB4OTksIDB4NjMsIDB4NzgsIDB4YzYsIDB4ODMsIDB4NzUsIDB4OGQsIDB4ZjQsIDB4NjcsIDB4ZTAsIDB4NDksCisJMHhjOSwgMHg1YSwgMHhiZSwgMHhkOCwgMHhlOCwgMHhhNCwgMHg2MiwgMHgzZCwgMHhjMiwgMHhjNSwgMHg3OCwgMHgzZSwKKwkweDQ2LCAweGFkLCAweDdiLCAweDlmLCAweGM0LCAweDM1LCAweDJkLCAweDcxLCAweGUxLCAweDdkLCAweDgzLCAweDdkLAorCTB4Y2QsIDB4YWQsIDB4ODAsIDB4NDcsIDB4YmQsIDB4ZWUsIDB4ODAsIDB4YjYsIDB4NTQsIDB4MzcsIDB4MmQsIDB4YzksCisJMHg3YSwgMHhiZCwgMHg0YiwgMHhmOSwgMHg5OCwgMHhkNCwgMHg2NiwgMHhiYywgMHhkZiwgMHgwMiwgMHg1YiwgMHhkZiwKKwkweDgzLCAweDNjLCAweGE2LCAweDA3LCAweDczLCAweGQ2LCAweDg2LCAweGI5LCAweDhkLCAweGY0LCAweDI3LCAweDM2LAorCTB4ZDAsIDB4ZGYsIDB4ODksIDB4NzUsIDB4ZmQsIDB4ZDgsIDB4NTMsIDB4YWQsIDB4MmIsIDB4NjEsIDB4ZGQsIDB4ZWMsCisJMHgwMiwgMHg2YywgMHg4MiwgMHg3MywgMHhmMywgMHgzNCwgMHhjNywgMHhlNCwgMHgxYiwgMHgyNSwgMHgyZCwgMHhiMywKKwkweDJiLCAweGVmLCAweGUxLCAweDVjLCAweDAzLCAweDgwLCAweDhkLCAweGM2LCAweDhhLCAweDBmLCAweDc1LCAweGUwLAorCTB4ZjksIDB4NWUsIDB4NDMsIDB4ZGUsIDB4NGIsIDB4NDAsIDB4MDYsIDB4OWIsIDB4NTMsIDB4N2MsIDB4ZjYsIDB4NmEsCisJMHhlMywgMHhmMywgMHg3OCwgMHg3NiwgMHg2MywgMHgxYiwgMHhiZiwgMHg5OCwgMHg1NywgMHg0YywgMHgyZiwgMHhkMywKKwkweDBhLCAweDNkLCAweDI1LCAweGQ4LCAweDliLCAweDhiLCAweDlhLCAweDJmLCAweGE1LCAweDUzLCAweDI5LCAweDg3LAorCTB4NzgsIDB4ZWUsIDB4ZjMsIDB4NWQsIDB4MmQsIDB4ZGIsIDB4ZTUsIDB4YTAsIDB4YWEsIDB4MGIsIDB4MWMsIDB4OGUsCisJMHhlYiwgMHg4NiwgMHgzYywgMHhmYiwgMHhlMSwgMHgxNSwgMHhiZSwgMHhhZiwgMHhiNSwgMHgxMCwgMHg0ZiwgMHhlZCwKKwkweDJjLCAweGUxLCAweGVjLCAweDBmLCAweGFmLCAweDM4LCAweGY0LCAweDY4LCAweDMzLCAweDRiLCAweDQ3LCAweDliLAorCTB4YjYsIDB4NzksIDB4M2YsIDB4N2MsIDB4NDAsIDB4NzksIDB4ZWQsIDB4MWUsIDB4NzcsIDB4NTcsIDB4OGEsIDB4ZmQsCisJMHg5NiwgMHg4MSwgMHg5YywgMHhiMywgMHhjMywgMHg1MSwgMHgzOSwgMHg0OCwgMHg5NSwgMHhlYiwgMHhiMSwgMHgwNSwKKwkweDliLCAweGVmLCAweDY4LCAweGNjLCAweDA2LCAweDZkLCAweGNjLCAweDUzLCAweGZlLCAweDJmLCAweDczLCAweDE0LAorCTB4ZGUsIDB4OWYsIDB4ZmQsIDB4MzQsIDB4NzIsIDB4MTIsIDB4MWYsIDB4MzksIDB4ODksIDB4OGYsIDB4OWMsIDB4YzQsCisJMHg0NywgMHg0ZSwgMHhlMiwgMHgyMywgMHgyNywgMHhmMSwgMHg5MSwgMHg5MywgMHhmOCwgMHhjOCwgMHg0OSwgMHg3YywKKwkweGU0LCAweDI0LCAweGM4LCAweGZmLCAweDU1LCAweDVkLCAweDMwLCAweDhlLCAweDVjLCAweDFiLCAweGZlLCAweGNiLAorCTB4ZmYsIDB4NmEsIDB4OTgsIDB4NTMsIDB4NDQsIDB4MzEsIDB4OTksIDB4ZTcsIDB4NTYsIDB4MzcsIDB4NzksIDB4NmUsCisJMHg3NCwgMHg0ZiwgMHg3YywgMHgwMCwgMHg3MywgMHgxMywgMHg2MSwgMHhlZSwgMHhjMywgMHg2YiwgMHhhMiwgMHg5OCwKKwkweGNkLCAweGViLCAweDY4LCAweGNjLCAweDQzLCAweGJkLCAweDU5LCAweDk4LCAweGU0LCAweGRjLCAweDQ4LCAweGM1LAorCTB4MmEsIDB4OTUsIDB4OTcsIDB4YmYsIDB4OGEsIDB4ZmMsIDB4YzgsIDB4NDIsIDB4N2UsIDB4MzQsIDB4ODgsIDB4NWMsCisJMHg4OCwgMHhlZiwgMHhiNSwgMHhhMywgMHhmYiwgMHhhMywgMHg4MiwgMHg3NiwgMHhjOCwgMHgxZiwgMHhkNywgMHhiZSwKKwkweGU2LCAweDczLCAweGRlLCAweGVlLCAweDU4LCAweDY1LCAweDIxLCAweDE2LCAweGZhLCAweDI5LCAweGEwLCAweGUyLAorCTB4ZTgsIDB4YjcsIDB4OTAsIDB4MjMsIDB4N2YsIDB4NGYsIDB4ZGUsIDB4OTUsIDB4NGQsIDB4MGMsIDB4YjMsIDB4Y2MsCisJMHgyNywgMHgzZSwgMHgyNSwgMHg0ZiwgMHg4ZSwgMHhmOCwgMHhhYiwgMHhlZSwgMHhmOCwgMHhjNCwgMHgxMiwgMHhmMywKKwkweDhmLCAweGE4LCAweGVmLCAweDJjLCAweDE4LCAweDdlLCAweDM2LCAweDQxLCAweGE5LCAweDUzLCAweDViLCAweDMwLAorCTB4NjcsIDB4NTIsIDB4YmYsIDB4YmMsIDB4MjcsIDB4ODIsIDB4MjgsIDB4Y2YsIDB4ZmUsIDB4MWEsIDB4ZjIsIDB4NzIsCisJMHg0OCwgMHg5YywgMHhlNSwgMHhkYiwgMHgwNCwgMHhjNiwgMHhjYiwgMHhmZSwgMHhiNSwgMHgzMiwgMHg1MywgMHg2YywKKwkweDU0LCAweGE0LCAweDRlLCAweDFkLCAweDZhLCAweDk2LCAweDkwLCAweDNmLCAweGY1LCAweGY2LCAweDUzLCAweDk3LAorCTB4ODEsIDB4MWEsIDB4MmEsIDB4YzIsIDB4Y2QsIDB4MzgsIDB4N2YsIDB4OTksIDB4OTIsIDB4YjUsIDB4Y2QsIDB4ZDksCisJMHgzNSwgMHg3OSwgMHg0MiwgMHhkNiwgMHhiYywgMHg0ZiwgMHg2NSwgMHhhNiwgMHg1YSwgMHhiNywgMHgzMywgMHg1YywKKwkweGQ3LCAweDgyLCAweGQ2LCAweDk5LCAweDI3LCAweDgxLCAweDYzLCAweDE5LCAweDM5LCAweDgxLCAweDJlLCAweGY3LAorCTB4YWUsIDB4Y2MsIDB4Y2MsIDB4ZDYsIDB4ZDUsIDB4NWQsIDB4OTUsIDB4YTIsIDB4MDEsIDB4ZjEsIDB4MmYsIDB4ZDcsCisJMHg0NSwgMHhmYSwgMHg5MiwgMHhiYSwgMHhiMywgMHgxMiwgMHgxMiwgMHg5NiwgMHhlMSwgMHgxOCwgMHhkZSwgMHgwMCwKKwkweDFjLCAweGNiLCAweDJkLCAweDBiLCAweDU4LCAweDk2LCAweDFkLCAweGQzLCAweDUwLCAweDk5LCAweGE5LCAweDM0LAorCTB4ZGEsIDB4NjksIDB4NjAsIDB4M2MsIDB4OGMsIDB4MzcsIDB4M2EsIDB4MGYsIDB4OWYsIDB4MjUsIDB4NDUsIDB4ZTIsCisJMHg1NCwgMHgxMCwgMHg5NCwgMHg0NywgMHgwNywgMHhjMywgMHgzYSwgMHgxMiwgMHhmNSwgMHhlMywgMHgwOSwgMHg0MywKKwkweGVhLCAweGI5LCAweDFhLCAweDdmLCAweDUzLCAweGM2LCAweDI5LCAweDRiLCAweGYwLCAweDNjLCAweDNmLCAweGYxLAorCTB4MmUsIDB4ZjcsIDB4MjQsIDB4ZTYsIDB4MzAsIDB4NWUsIDB4OGUsIDB4ZDYsIDB4OGEsIDB4NzAsIDB4NmQsIDB4NzcsCisJMHgxYiwgMHgzZiwgMHgzYiwgMHhjMiwgMHhmZCwgMHg5OCwgMHgyNiwgMHgzZSwgMHhlNywgMHg2NSwgMHhlYywgMHhjNSwKKwkweDc0LCAweGYxLCAweDFhLCAweDEzLCAweGI0LCAweDQxLCAweDk2LCAweGZlLCAweGZmLCAweDk2LCAweGY3LCAweGVkLAorCTB4NjcsIDB4NjIsIDB4OWUsIDB4MWEsIDB4ODAsIDB4ZTEsIDB4ZjUsIDB4OGMsIDB4MjMsIDB4ODIsIDB4YzEsIDB4OGIsCisJMHhiMywgMHgwYSwgMHg0ZSwgMHhhYywgMHhkZCwgMHhlZCwgMHg3ZCwgMHhkNiwgMHhiZSwgMHhlZCwgMHhiNCwgMHg0NiwKKwkweGZiLCAweDQ3LCAweDc4LCAweGIyLCAweDRhLCAweDZlLCAweDZiLCAweGYwLCAweGYyLCAweGZmLCAweDBhLCAweGMzLAorCTB4MTMsIDB4YmEsIDB4ZjgsIDB4ODksIDB4M2IsIDB4ZDIsIDB4NmMsIDB4NWIsIDB4NmQsIDB4MWMsIDB4ZGQsIDB4MzUsCisJMHg3MCwgMHhjZCwgMHhjZiwgMHgzNSwgMHgzYywgMHg3ZiwgMHg0NywgMHg2OCwgMHhhZiwgMHg0YiwgMHg0YiwgMHg2MSwKKwkweDJjLCAweDgzLCAweDJlLCAweGFhLCAweGJiLCAweGQ0LCAweDcwLCAweDZjLCAweDcwLCAweDZjLCAweDQzLCAweGUzLAorCTB4MWMsIDB4M2YsIDB4YjIsIDB4OTEsIDB4ZjYsIDB4N2IsIDB4NDIsIDB4OTUsIDB4OWIsIDB4OWMsIDB4NTksIDB4OGMsCisJMHg3YywgMHgwZSwgMHhmYywgMHhjMSwgMHhiMCwgMHgxMSwgMHhmYSwgMHhlZCwgMHgyNCwgMHhmYywgMHg1NiwgMHgwZiwKKwkweGVkLCAweDgzLCAweGJmLCAweGI5LCAweDEzLCAweGZlLCAweDY2LCAweDNmLCAweGVhLCAweGNhLCAweGYxLCAweDk1LAorCTB4ZjYsIDB4ZmIsIDB4NTcsIDB4YWUsIDB4NjUsIDB4YWIsIDB4NzQsIDB4NTgsIDB4Y2EsIDB4YWUsIDB4MTIsIDB4ZTgsCisJMHhjZSwgMHhjNywgMHg5MCwgMHhkZiwgMHgyZSwgMHg5OSwgMHhhMywgMHgyOSwgMHg3OSwgMHhjMiwgMHg1NywgMHhiYSwKKwkweGZjLCAweDJkLCAweDYyLCAweGUzLCAweDNkLCAweDZmLCAweDE2LCAweDdhLCAweGRkLCAweDU1LCAweDEwLCAweDMyLAorCTB4ZmYsIDB4NTIsIDB4N2MsIDB4YWIsIDB4MzYsIDB4MTQsIDB4ZGYsIDB4ZTAsIDB4NTMsIDB4ODEsIDB4ZGYsIDB4YTAsCisJMHg0YSwgMHhkMywgMHhhNCwgMHgwYSwgMHhmNiwgMHhhZCwgMHg2MCwgMHhkZiwgMHgwYSwgMHhlYSwgMHhjMSwgMHhkOSwKKwkweDY2LCAweGZiLCAweDc3LCAweGFhLCAweGVlLCAweGIwLCAweGM2LCAweDY2LCAweGQ4LCAweGE4LCAweDZmLCAweDg2LAorCTB4ZTcsIDB4ZDIsIDB4ZGEsIDB4OWUsIDB4YzcsIDB4YzAsIDB4YmIsIDB4NDcsIDB4YzEsIDB4YmIsIDB4MjMsIDB4YTgsCisJMHg4MywgMHhmZSwgMHgwNCwgMHg3NSwgMHhkMCwgMHgxZiwgMHhhMiwgMHgwZSwgMHgzYSwgMHg4YywgMHgzYSwgMHg2OCwKKwkweDBhLCAweDc1LCAweGQwLCAweDdkLCAweGIwLCAweGZkLCAweDdiLCAweDYxLCAweGZiLCAweDkzLCAweGIwLCAweGZkLAorCTB4MDksIDB4NzksIDB4YzcsIDB4NzMsIDB4YzgsIDB4ZGYsIDB4NzgsIDB4ZWYsIDB4MTEsIDB4ZWQsIDB4YzUsIDB4ZWQsCisJMHg0ZCwgMHgyMiwgMHg4OCwgMHhhZiwgMHg3YywgMHg2MiwgMHg5YywgMHgxYSwgMHgyZCwgMHhhZSwgMHg4NywgMHg1YywKKwkweDc5LCAweDdmLCAweDM1LCAweGVkLCAweDRlLCAweDZhLCAweDUzLCAweGM4LCAweGI5LCAweGVmLCAweDFmLCAweGUxLAorCTB4M2EsIDB4MjksIDB4YTUsIDB4ZWUsIDB4MmIsIDB4NzMsIDB4ZjYsIDB4NzMsIDB4MWUsIDB4ZDIsIDB4MmUsIDB4ZTQsCisJMHg2ZCwgMHgzOCwgMHhiMywgMHg3ZCwgMHhhNiwgMHhhOCwgMHg0NywgMHgzNSwgMHg0YSwgMHhkZiwgMHg1YSwgMHg4ZCwKKwkweGIyLCAweDNjLCAweGNmLCAweDM1LCAweGNhLCAweGFiLCAweDZiLCAweDM1LCAweGNhLCAweGYyLCAweDNjLCAweGQ3LAorCTB4MjgsIDB4YWYsIDB4YWMsIDB4YWIsIDB4NTEsIDB4YWUsIDB4M2MsIDB4ZmQsIDB4ZjIsIDB4YmEsIDB4MWEsIDB4ZTUsCisJMHhjYSwgMHhkMywgMHgyZiwgMHg4NSwgMHg2MywgMHhhNiwgMHgwMywgMHg3ZSwgMHhjOSwgMHgwZCwgMHg2OSwgMHgzNSwKKwkweDVkLCAweDNjLCAweDdiLCAweGMzLCAweDdjLCAweGUxLCAweGZiLCAweGZkLCAweGViLCAweGZmLCAweDFmLCAweDNhLAorCTB4NmUsIDB4OWQsIDB4MWEsIDB4MzksIDB4ZGYsIDB4ZDgsIDB4YWEsIDB4ZWEsIDB4OWEsIDB4ZjYsIDB4ZjksIDB4ZGUsCisJMHhiNiwgMHhmOSwgMHg1NSwgMHhmOSwgMHg2ZCwgMHhiNCwgMHg1YywgMHhkYiwgMHhmYywgMHgzZSwgMHhiYywgMHgyNywKKwkweGFkLCAweDBjLCAweGRiLCAweGY1LCAweDAyLCAweDdkLCAweDFjLCAweGYwLCAweGY3LCAweDNkLCAweDRmLCAweDc0LAorCTB4YzksIDB4ZWYsIDB4NmEsIDB4OWUsIDB4Y2MsIDB4OTEsIDB4NjEsIDB4YTMsIDB4YTMsIDB4NDcsIDB4YjcsIDB4MmEsCisJMHgzYiwgMHhlNiwgMHg3ZSwgMHg1YSwgMHg1MywgMHhiZSwgMHhmOSwgMHg0MSwgMHhlMCwgMHgwMSwgMHhhZiwgMHg3ZCwKKwkweDQzLCAweGRlLCAweGUxLCAweGE4LCAweGYzLCAweGFhLCAweGJiLCAweDZjLCAweDIzLCAweGJmLCAweDhhLCAweDM4LAorCTB4MDMsIDB4NTksIDB4NGIsIDB4ZGMsIDB4NWMsIDB4ZjMsIDB4NzEsIDB4OWQsIDB4MTgsIDB4ZjksIDB4ZWYsIDB4MDgsCisJMHhkNywgMHhjZiwgMHhkMiwgMHg4YSwgMHhlZSwgMHhkYiwgMHg1MCwgMHhlZiwgMHhmMSwgMHg5YSwgMHg2OCwgMHhkYywKKwkweDVlLCAweDFmLCAweDI2LCAweGMzLCAweGZiLCAweGFjLCAweDU1LCAweDk1LCAweDEzLCAweDQ5LCAweDdjLCAweDQ2LAorCTB4ODgsIDB4ZWYsIDB4YmYsIDB4MDIsIDB4ZTUsIDB4MzcsIDB4MTgsIDB4ZGUsIDB4NmMsIDB4ODMsIDB4MWYsIDB4NDcsCisJMHg5ZSwgMHhjNiwgMHg3NywgMHgyYiwgMHg5YywgMHg2ZiwgMHgxOSwgMHhmNCwgMHhlZSwgMHg3YywgMHgzNywgMHhiZCwKKwkweDczLCAweDFjLCAweGY5LCAweGE2LCAweDZiLCAweDY3LCAweDVmLCAweDQ2LCAweGJkLCAweDcwLCAweDhhLCAweGYzLAorCTB4ZTIsIDB4NTEsIDB4YTYsIDB4NzMsIDB4YzgsIDB4OWEsIDB4MjUsIDB4YWIsIDB4NWYsIDB4ZTUsIDB4ZDEsIDB4NDcsCisJMHhiNCwgMHg0ZiwgMHhkMiwgMHgyZCwgMHhjMiwgMHg3ZCwgMHg3ZSwgMHhkNiwgMHhiNiwgMHg4ZiwgMHhkNSwgMHhiNiwKKwkweDRmLCAweDgxLCAweGVkLCAweGFkLCAweGYxLCAweDc1LCAweDljLCAweGI5LCAweGIyLCAweGZkLCAweDI2LCAweDMzLAorCTB4MWQsIDB4ZDYsIDB4NTIsIDB4OGYsIDB4OGMsIDB4NmUsIDB4YTYsIDB4ZmEsIDB4ODAsIDB4N2QsIDB4ZWUsIDB4MTUsCisJMHhlNCwgMHhkYSwgMHhlNSwgMHg1MSwgMHhjYywgMHhhNSwgMHg4NywgMHhmMCwgMHg4ZSwgMHhlNywgMHhlZCwgMHgwNiwKKwkweDA5LCAweGZiLCAweDVjLCAweDgzLCAweDkwLCAweDRjLCAweDc3LCAweGQ5LCAweDE1LCAweGJlLCAweDYzLCAweDRiLAorCTB4MGIsIDB4ZWUsIDB4NGIsIDB4ZGEsIDB4MWEsIDB4YTEsIDB4ZmQsIDB4NjYsIDB4MmUsIDB4ZTIsIDB4Y2MsIDB4NTMsCisJMHhhOCwgMHg5OSwgMHg4ZSwgMHhhOCwgMHhiYiwgMHhhZiwgMHg3MCwgMHg5ZiwgMHg1YiwgMHhiNCwgMHg4YiwgMHgzMiwKKwkweGFmLCAweGNkLCAweDY5LCAweDk1LCAweGI0LCAweDNhLCAweGUzLCAweDM3LCAweDYwLCAweGViLCAweGJhLCAweDYwLAorCTB4ZDgsIDB4NzcsIDB4ODEsIDB4NWIsIDB4YTMsIDB4YTUsIDB4ZTMsIDB4YmEsIDB4YmMsIDB4ZWIsIDB4MmMsIDB4OGYsCisJMHhiMiwgMHhhYywgMHhmOSwgMHg3OSwgMHgzZCwgMHhkZSwgMHg0NSwgMHg2NywgMHhmYSwgMHhkYiwgMHhmMCwgMHg0YywKKwkweDVmLCAweDBhLCAweDZiLCAweGVkLCAweGU4LCAweDRjLCAweDA5LCAweDdhLCAweDYzLCAweGRlLCAweDA0LCAweGVjLAorCTB4MDgsIDB4ZjgsIDB4NTEsIDB4YTIsIDB4OTUsIDB4OTYsIDB4ZjUsIDB4MzksIDB4NzgsIDB4NmEsIDB4NmQsIDB4YmMsCisJMHgzMSwgMHgzNiwgMHhjOCwgMHgzMCwgMHhhYSwgMHg1OSwgMHhjMCwgMHg4MywgMHg4OSwgMHgwYywgMHhlYywgMHg3MCwKKwkweGJhLCAweDNmLCAweGJhLCAweDgzLCAweGQ1LCAweDFkLCAweGExLCAweGE5LCAweGRhLCAweDliLCAweGU3LCAweDA3LAorCTB4NjEsIDB4OGIsIDB4MTYsIDB4ZWMsIDB4OTMsIDB4ZjMsIDB4OWQsIDB4MTIsIDB4ZDcsIDB4MTksIDB4ZTEsIDB4ZjcsCisJMHg0YiwgMHhkYiwgMHg5YywgMHhhNCwgMHgyYywgMHg2YSwgMHgxNSwgMHgzZSwgMHg3ZiwgMHg5ZSwgMHg5NiwgMHg1YiwKKwkweDExLCAweDBkLCAweDM5LCAweGQ4LCAweGUzLCAweDE4LCAweDdlLCAweDIzLCAweDc4LCAweGU3LCAweGUyLCAweGM3LAorCTB4NzUsIDB4NGUsIDB4ODEsIDB4MWUsIDB4OTMsIDB4NzksIDB4MzQsIDB4ZjIsIDB4ZTQsIDB4NjEsIDB4YTYsIDB4ZWYsCisJMHgwMCwgMHhkNiwgMHhiMywgMHgzZSwgMHhiMywgMHg5ZSwgMHgxZSwgMHgyMCwgMHg2ZiwgMHg4MCwgMHg3ZCwgMHg0NSwKKwkweDA2LCAweGI4LCAweDAxLCAweGUzLCAweGJmLCAweDBlLCAweDViLCAweDFmLCAweGM0LCAweGQzLCAweDM2LCAweGNiLAorCTB4Y2MsIDB4NWIsIDB4ODksIDB4M2YsIDB4MDgsIDB4ZjQsIDB4MWMsIDB4N2YsIDB4M2IsIDB4MTgsIDB4MGYsIDB4YzcsCisJMHg0MywgMHhlNiwgMHhkZCwgMHhhYywgMHg3YiwgMHg5OSwgMHgxZCwgMHg3NCwgMHg2ZSwgMHgzMSwgMHg4YSwgMHg2MSwKKwkweDMzLCAweGIwLCAweDQxLCAweGJlLCAweDUzLCAweDFkLCAweDA3LCAweDVmLCAweDc4LCAweGFjLCAweDg1LCAweGIxLAorCTB4MGMsIDB4ZjMsIDB4Y2IsIDB4MGIsIDB4MzgsIDB4NzcsIDB4OWUsIDB4NGUsIDB4YTEsIDB4NjYsIDB4YTcsIDB4MDEsCisJMHg3ZSwgMHgyMiwgMHg1NywgMHhmNSwgMHhiNywgMHg4NCwgMHhmYSwgMHhiZSwgMHgxZSwgMHg1ZSwgMHg3NywgMHhiOCwKKwkweDNmLCAweDBlLCAweGZhLCAweDhjLCAweDM2LCAweDc4LCAweDg2LCAweDUxLCAweGI1LCAweGM1LCAweDQ1LCAweDQyLAorCTB4MmMsIDB4Y2QsIDB4MDQsIDB4YjcsIDB4OGIsIDB4ZmMsIDB4N2QsIDB4ZjQsIDB4ODAsIDB4M2MsIDB4NTMsIDB4OWUsCisJMHgwZSwgMHgyZiwgMHgwNiwgMHg4MSwgMHg5NywgMHgxYiwgMHhjYSwgMHgyZSwgMHg5MywgMHg5ZCwgMHg3ZCwgMHg5MiwKKwkweGY2LCAweDk4LCAweGZiLCAweDQ4LCAweDk3LCAweGRmLCAweGUwLCAweDUwLCAweDEzLCAweGRmLCAweGRlLCAweDkxLAorCTB4MGYsIDB4ODIsIDB4OTMsIDB4YTAsIDB4ZmQsIDB4MDUsIDB4YjksIDB4Y2YsIDB4N2QsIDB4YTAsIDB4MWYsIDB4YmMsCisJMHg5MiwgMHhmNSwgMHgwNCwgMHhkMywgMHgwYSwgMHhkZSwgMHhhNCwgMHg5OSwgMHhkZSwgMHgyNCwgMHgxZCwgMHg2ZSwKKwkweDlkLCAweDBmLCAweDY1LCAweGYzLCAweDI4LCAweDc5LCAweGZlLCAweGRiLCAweDNhLCAweGRmLCAweDQ3LCAweDk3LAorCTB4NWIsIDB4NGYsIDB4ODYsIDB4YjQsIDB4ZTUsIDB4NDEsIDB4MmYsIDB4ZjYsIDB4NmYsIDB4YmQsIDB4OTAsIDB4NjYsCisJMHhkZiwgMHhjMCwgMHgzMiwgMHhmNywgMHg5MCwgMHhmMSwgMHg3OSwgMHhhMywgMHhjZiwgMHg0MCwgMHgwNywgMHgzZiwKKwkweGNkLCAweDBmLCAweGE0LCAweDY4LCAweGJkLCAweDFmLCAweDYwLCAweGI4LCAweGQ0LCAweDc1LCAweDc0LCAweDg1LAorCTB4ZTksIDB4MjAsIDB4ZTksIDB4M2YsIDB4ODUsIDB4YjMsIDB4MTksIDB4ZjQsIDB4MzAsIDB4M2UsIDB4N2QsIDB4ODMsCisJMHgyZiwgMHhhOCwgMHhjOCwgMHhlNywgMHhhYSwgMHhjZSwgMHhiZSwgMHg4OSwgMHhlMywgMHgxNCwgMHhlYiwgMHg3MCwKKwkweDBmLCAweGZjLCAweDFmLCAweDc0LCAweDEwLCAweDc2LCAweDVjLCAweDVjLCAweGU0LCAweDNiLCAweDg1LCAweDYxLAorCTB4YmUsIDB4ODcsIDB4M2EsIDB4NTMsIDB4ODIsIDB4NmMsIDB4OTcsIDB4ZjgsIDB4YmIsIDB4NjAsIDB4NWEsIDB4ZTUsCisJMHg4MiwgMHhhYSwgMHg3NiwgMHhiMiwgMHhkOCwgMHgxNywgMHgzMiwgMHhhZiwgMHhhNSwgMHg5ZiwgMHgyYywgMHhjOSwKKwkweGVmLCAweDgwLCAweDI5LCAweGFjLCAweDA5LCAweGYwLCAweDZjLCAweGZmLCAweDliLCAweDg4LCAweDlmLCAweDE0LAorCTB4ZDQsIDB4ZGYsIDB4NDQsIDB4ODQsIDB4ZGYsIDB4NjQsIDB4MWIsIDB4MmEsIDB4MDcsIDB4NzgsIDB4YjgsIDB4NjksCisJMHhkMCwgMHg1NCwgMHgzMywgMHhmYSwgMHgxYiwgMHgwOSwgMHg5NiwgMHg4MywgMHg4MywgMHgzYSwgMHgzZSwgMHg4YSwKKwkweGZiLCAweDgxLCAweDhjLCAweDJmLCAweGQ1LCAweDc1LCAweGIyLCAweGZjLCAweDY2LCAweDk4LCAweGNmLCAweDcwLAorCTB4ZmUsIDB4Y2UsIDB4M2MsIDB4YzQsIDB4NzgsIDB4NTksIDB4YzksIDB4NmYsIDB4NDksIDB4ZWMsIDB4ODQsIDB4ZmMsCisJMHhjMCwgMHg3MywgMHhkZiwgMHg4MCwgMHgyZCwgMHg2NSwgMHhjMiwgMHg5OCwgMHg2YywgMHg3MiwgMHg3ZCwgMHgxOCwKKwkweGQ2LCAweGFjLCAweGRiLCAweGE5LCAweDNhLCAweGM5LCAweGVmLCAweDEzLCAweGY0LCAweGZhLCAweGZjLCAweGEwLAorCTB4N2MsIDB4NWYsIDB4YTYsIDB4NDQsIDB4ZjgsIDB4OWUsIDB4YzcsIDB4MjksIDB4MmEsIDB4Y2IsIDB4ZjcsIDB4ZjcsCisJMHg4NiwgMHhmOCwgMHg1MCwgMHg2MywgMHhkZCwgMHgxYiwgMHg4ZCwgMHgzMywgMHg5MCwgMHhhMywgMHg4MiwgMHg5YiwKKwkweDQ2LCAweDJjLCAweDdiLCAweDBjLCAweDcxLCAweDZjLCAweDFhLCAweDdjLCAweDJmLCAweDRlLCAweDU0LCAweDY4LAorCTB4ODcsIDB4YzMsIDB4M2EsIDB4MGUsIDB4OTksIDB4YTUsIDB4NTgsIDB4YzcsIDB4NTgsIDB4YmYsIDB4MTgsIDB4YTYsCisJMHgxNywgMHg3OSwgMHgyNiwgMHhjZSwgMHgzYiwgMHg0YSwgMHg1MywgMHg3YSwgMHhmZSwgMHhmZCwgMHg4MywgMHhlNSwKKwkweDlhLCAweDZkLCAweDE2LCAweGU4LCAweGEzLCAweGMwLCAweDMzLCAweDc4LCAweGJjLCAweDdhLCAweGYwLCAweDYxLAorCTB4NzUsIDB4NGYsIDB4MmYsIDB4NDQsIDB4ZmUsIDB4ZDIsIDB4YzEsIDB4YjIsIDB4ZWEsIDB4ZTMsIDB4Y2MsIDB4ZWYsCisJMHg4NywgMHg3ZCwgMHg4NiwgMHhkMywgMHhlNSwgMHhmNywgMHhkMywgMHg3ZiwgMHhiZiwgMHhkNSwgMHhhMCwgMHg4YiwKKwkweGI3LCAweDA2LCAweGMxLCAweGZkLCAweGZjLCAweDBkLCAweDI3LCAweGFjLCAweDQxLCAweGQ1LCAweDc3LCAweDcxLAorCTB4OGUsIDB4MTMsIDB4YTgsIDB4MzcsIDB4NDYsIDB4MmQsIDB4YWQsIDB4MDQsIDB4ZGIsIDB4M2QsIDB4ZTUsIDB4YTMsCisJMHg1ZSwgMHgxMSwgMHhmNiwgMHhkOCwgMHhhYSwgMHgzMCwgMHgxMSwgMHg3ZiwgMHhiOSwgMHg5NiwgMHhmZiwgMHhjZCwKKwkweDdlLCAweGZlLCAweDI2LCAweDNjLCAweGU3LCAweGYyLCAweDlhLCAweDZkLCAweGVhLCAweGFlLCAweGVhLCAweGU2LAorCTB4ZGIsIDB4YTQsIDB4Y2YsIDB4MjUsIDB4MGEsIDB4ZTMsIDB4ZDAsIDB4Y2QsIDB4ZWQsIDB4ZjYsIDB4ZDEsIDB4OWUsCisJMHgyMywgMHhiMiwgMHg1ZCwgMHhkMCwgMHg5NCwgMHgwMSwgMHg3YSwgMHhhYSwgMHhiNSwgMHgyOCwgMHhkZiwgMHhlMiwKKwkweGVmLCAweGZkLCAweGFiLCAweDA3LCAweGJmLCAweGRiLCAweGJjLCAweDc0LCAweDcwLCAweDE2LCAweGYyLCAweGUxLAorCTB4MzMsIDB4Y2QsIDB4MzYsIDB4MjMsIDB4ZmQsIDB4OGIsIDB4NzIsIDB4N2UsIDB4ZWUsIDB4MjMsIDB4ZmUsIDB4ZmIsCisJMHg4OCwgMHhmZiwgMHgzZSwgMHhlMiwgMHhiZiwgMHg4ZiwgMHhmOCwgMHhlZiwgMHgyMywgMHhmZSwgMHhmYiwgMHg4OCwKKwkweGZmLCAweGUwLCAweGUxLCAweDBmLCAweGEwLCAweDJmLCAweGU3LCAweGZkLCAweDg5LCAweDMwLCAweGRmLCAweDdhLAorCTB4N2MsIDB4MmQsIDB4ZGYsIDB4M2EsIDB4ZDcsIDB4ZTIsIDB4NmYsIDB4M2YsIDB4OTIsIDB4OTYsIDB4NGEsIDB4ODUsCisJMHg1NCwgMHhiZSwgMHg0YSwgMHg4MiwgMHhmMywgMHg5YiwgMHgyOCwgMHg1ZiwgMHhiZCwgMHhmZSwgMHgzNywgMHgwYywKKwkweDA1LCAweGM3LCAweGI5LCAweDFhLCAweGMzLCAweDU1LCAweDM0LCAweGUxLCAweDMwLCAweDljLCAweGNhLCAweGQ3LAorCTB4YjgsIDB4NDYsIDB4NWEsIDB4MGYsIDB4YzMsIDB4ZGYsIDB4YzksIDB4ZDgsIDB4YjcsIDB4YTksIDB4NmYsIDB4MzQsCisJMHhlYSwgMHg3YiwgMHhkMCwgMHhlMywgMHg1ZiwgMHhmNywgMHgxMCwgMHg4YiwgMHhjYiwgMHg0ZCwgMHgxOSwgMHg4ZiwKKwkweDMxLCAweDdlLCAweDA2LCAweDYzLCAweDgzLCAweGY1LCAweDhmLCAweGRmLCAweGRkLCAweGMzLCAweDc1LCAweDQxLAorCTB4YjksIDB4ODksIDB4YmMsIDB4NjgsIDB4MzksIDB4Y2EsIDB4ODUsIDB4MDAsIDB4ZTcsIDB4YmYsIDB4YTksIDB4OTUsCisJMHhlYSwgMHgyYywgMHg2NywgMHg0MSwgMHhiMywgMHg2OSwgMHgzMCwgMHhjNSwgMHg2OSwgMHhhZiwgMHg3NSwgMHg1ZSwKKwkweDk2LCAweGI1LCAweDhlLCAweGZhLCAweDliLCAweDllLCAweDExLCAweGQwLCAweDE2LCAweGRkLCAweGZkLCAweDEyLAorCTB4ZTksIDB4ZjMsIDB4NjksIDB4ZjksIDB4NzcsIDB4MDAsIDB4MjksIDB4NjcsIDB4NTgsIDB4ZmUsIDB4M2QsIDB4NDIsCisJMHgxZiwgMHhmNiwgMHgxMSwgMHhmMywgMHgzYiwgMHhkYiwgMHhlZSwgMHg1NiwgMHhhOSwgMHhhMCwgMHg3YywgMHg3NiwKKwkweGE3LCAweGZhLCAweDNiLCAweDA4LCAweDkxLCAweDg2LCAweGVkLCAweGRlLCAweGI2LCAweDBkLCAweDY3LCAweDgzLAorCTB4NWMsIDB4NWYsIDB4ZGQsIDB4MmEsIDB4ZjMsIDB4NjcsIDB4ZjgsIDB4ZDEsIDB4OTMsIDB4YzMsIDB4N2QsIDB4MDMsCisJMHhkNCwgMHhiMywgMHg5ZCwgMHg0ZSwgMHgwZCwgMHg3MywgMHhhZCwgMHhiNSwgMHgxOSwgMHhmOCwgMHg3OCwgMHhhZCwKKwkweDlkLCAweDJkLCAweDg4LCAweGVkLCAweDc0LCAweDdhLCAweDExLCAweDdlLCAweDc2LCAweGQxLCAweDc2LCAweDU5LAorCTB4OTcsIDB4OTcsIDB4ODYsIDB4ZDMsIDB4ZjAsIDB4Y2YsIDB4NjMsIDB4MDMsIDB4MWMsIDB4OWYsIDB4OTcsIDB4NWIsCisJMHhhYywgMHgyYiwgMHg3ZCwgMHg4MCwgMHgxZiwgMHg4NCwgMHg1ZSwgMHg2ZSwgMHg4MiwgMHgzZCwgMHgwOSwgMHhlYywKKwkweDFmLCAweGUxLCAweGZlLCAweGI5LCAweGM0LCAweGRkLCAweGU3LCAweGVjLCAweGQ5LCAweDI2LCAweDc1LCAweDQzLAorCTB4ZDgsIDB4YTYsIDB4MjUsIDB4NDAsIDB4ZmIsIDB4MjcsIDB4NmEsIDB4NDQsIDB4OTcsIDB4ZjgsIDB4NmMsIDB4YjMsCisJMHg3ZSwgMHhmYiwgMHhiNywgMHhiYSwgMHgzNywgMHhiNSwgMHg3MiwgMHg5ZCwgMHhmZiwgMHgwZSwgMHg2MSwgMHg5OCwKKwkweGY2LCAweDQxLCAweGJmLCAweDRjLCAweGU3LCAweDRkLCAweGVkLCAweDgxLCAweGM2LCAweGZmLCAweDE0LCAweDZlLAorCTB4NzUsIDB4YjEsIDB4NzEsIDB4NWMsIDB4NTUsIDB4ZjgsIDB4ZGMsIDB4NTksIDB4YWYsIDB4ZWQsIDB4MzgsIDB4NmIsCisJMHg2NywgMHhlMiwgMHg2YywgMHhlYywgMHhiNSwgMHgxNSwgMHhjNCwgMHhjZSwgMHg3YSwgMHgxMiwgMHg0ZiwgMHhiNSwKKwkweDhlLCAweDNhLCAweGI2LCAweDEyLCAweGI0LCAweDQyLCAweDk2LCAweDU4LCAweGVkLCAweDdhLCAweDVkLCAweDg3LAorCTB4OTIsIDB4YjIsIDB4ODUsIDB4NTAsIDB4MDUsIDB4MDksIDB4NTUsIDB4OTYsIDB4OWQsIDB4ZDIsIDB4NTQsIDB4ODAsCisJMHg5MCwgMHhmYSwgMHg4MCwgMHg3OCwgMHhjYiwgMHg2YSwgMHg2ZCwgMHg4NywgMHhhNCwgMHhlYywgMHg3NiwgMHg2ZCwKKwkweDYyLCAweGQ3LCAweDJmLCAweDNjLCAweDJjLCAweGViLCAweDc1LCAweDZhLCAweGJiLCAweDliLCAweGFjLCAweDQyLAorCTB4ZmIsIDB4NTAsIDB4OWUsIDB4NjIsIDB4OTksIDB4OTIsIDB4YzIsIDB4NGIsIDB4ODUsIDB4YzQsIDB4MDMsIDB4MDIsCisJMHg1NCwgMHhhOSwgMHg0YSwgMHhkYSwgMHgzNCwgMHgwZiwgMHgyNSwgMHgxMSwgMHhiYywgMHg1MCwgMHgwYSwgMHhkMiwKKwkweGYwLCAweDdkLCAweDc3LCAweDY2LCAweDFkLCAweDI3LCAweDUwLCAweDYxLCAweDY5LCAweDM1LCAweDc3LCAweGVlLAorCTB4ZGMsIDB4M2IsIDB4NzMsIDB4N2YsIDB4Y2UsIDB4ZjksIDB4Y2UsIDB4NzcsIDB4Y2UsIDB4M2QsIDB4NjYsIDB4MWIsCisJMHgxYiwgMHg2NSwgMHhmYSwgMHhkMywgMHhhYiwgMHg2YSwgMHhhNiwgMHhkYSwgMHgyYiwgMHgwYiwgMHg5MCwgMHhlMywKKwkweGUyLCAweDQ4LCAweDM4LCAweDg4LCAweDk3LCAweDc2LCAweDA1LCAweGZhLCAweDBjLCAweGM3LCAweGRmLCAweGI3LAorCTB4NTcsIDB4OWEsIDB4NTcsIDB4MTYsIDB4Y2QsIDB4NGUsIDB4Y2QsIDB4YWIsIDB4MWUsIDB4N2QsIDB4NzYsIDB4MGEsCisJMHg2MywgMHg4YSwgMHg2MSwgMHgxZCwgMHhiYSwgMHhmYiwgMHgzNCwgMHgzNiwgMHgxOSwgMHhiYywgMHhlZiwgMHg3ZiwKKwkweGVjLCAweGJlLCAweGVmLCAweGIxLCAweGZiLCAweGMzLCAweGZmLCAweGEzLCAweDNkLCAweGNiLCAweDhmLCAweGNiLAorCTB4MDMsIDB4YzcsIDB4NjksIDB4YTUsIDB4ZjgsIDB4OTUsIDB4NjIsIDB4YzksIDB4MzYsIDB4NjYsIDB4NGIsIDB4NTYsCisJMHg5YSwgMHhiYywgMHgyMCwgMHgyYiwgMHg5ZSwgMHhjYSwgMHhiYSwgMHhlZCwgMHhjMCwgMHhiYiwgMHg3NiwgMHg5OSwKKwkweDVmLCAweDg2LCAweGNjLCAweDYzLCAweDFlLCAweDFkLCAweDM2LCAweGNmLCAweGI0LCAweDEzLCAweDdkLCAweGQ0LAorCTB4OTksIDB4NGUsIDB4NmMsIDB4ODMsIDB4NjEsIDB4MGYsIDB4YzUsIDB4ZDAsIDB4Y2UsIDB4N2IsIDB4YzksIDB4NGQsCisJMHg5YSwgMHhlNywgMHg3NCwgMHgxYywgMHg4NiwgMHg3YywgMHhjNiwgMHg1MywgMHg0NSwgMHg5ZCwgMHg5ZiwgMHhjMSwKKwkweDM2LCAweDZkLCAweDcyLCAweGM3LCAweGNlLCAweGY0LCAweDA2LCAweGY5LCAweDNlLCAweGYwLCAweDViLCAweGM3LAorCTB4ZmEsIDB4YzgsIDB4MzUsIDB4NWUsIDB4NzQsIDB4NzcsIDB4ZWIsIDB4Y2MsIDB4ZGIsIDB4YzIsIDB4M2MsIDB4MmEsCisJMHgwOCwgMHhjZCwgMHhiMywgMHgyMiwgMHhkNSwgMHhiYSwgMHhjOCwgMHhlYiwgMHhmOCwgMHhmZCwgMHhhZSwgMHgxZSwKKwkweGY4LCAweDBhLCAweDhhLCAweDNlLCAweGYzLCAweGI4LCAweDZjLCAweDU1LCAweGJlLCAweDJjLCAweDBkLCAweGQ4LAorCTB4OWYsIDB4NGQsIDB4ZDcsIDB4ZjMsIDB4ZWUsIDB4YjksIDB4NzEsIDB4YmQsIDB4ZTYsIDB4M2YsIDB4MjksIDB4MjksCisJMHg0OSwgMHg4YywgMHhkMiwgMHhiZSwgMHhiNSwgMHhjYiwgMHg0ZiwgMHg5NywgMHhkYiwgMHg2NCwgMHhkYiwgMHhiNCwKKwkweGNjLCAweDdiLCAweGMyLCAweDVjLCAweGI2LCAweDk4LCAweDRjLCAweDQ1LCAweDQzLCAweDlhLCAweGEzLCAweGNhLAorCTB4YjcsIDB4YzAsIDB4YTAsIDB4ZjEsIDB4ZWMsIDB4ZWUsIDB4ZjIsIDB4MzMsIDB4N2QsIDB4OGMsIDB4OWQsIDB4N2MsCisJMHhiNCwgMHhjYywgMHg3YiwgMHgwMywgMHg1NywgMHg0MywgMHg3NiwgMHhlYywgMHgxMCwgMHhiOCwgMHgyYywgMHg0MCwKKwkweGM4LCAweGU0LCAweGJhLCAweDczLCAweGJlLCAweGNmLCAweDcxLCAweDZjLCAweGE4LCAweGEzLCAweDJmLCAweGRhLAorCTB4MmUsIDB4YzUsIDB4YTMsIDB4YzAsIDB4NDQsIDB4MzUsIDB4YTQsIDB4NzMsIDB4OGEsIDB4NzYsIDB4YTIsIDB4MWEsCisJMHhhMywgMHg0MywgMHgzNSwgMHhlNiwgMHhjOCwgMHg5OSwgMHhmYiwgMHgzNSwgMHg1ZSwgMHg2NywgMHhhZSwgMHg3ZCwKKwkweDVmLCAweGNmLCAweDA1LCAweGU1LCAweDQyLCAweGNkLCAweGE1LCAweGFjLCAweDlhLCAweGIyLCAweDA5LCAweDVkLAorCTB4ZGIsIDB4NjgsIDB4MmUsIDB4ZjUsIDB4NzMsIDB4YWYsIDB4YjYsIDB4OWEsIDB4M2YsIDB4ZTgsIDB4ZjMsIDB4N2QsCisJMHgyZCwgMHhkNiwgMHhmZCwgMHhiMCwgMHhjZiwgMHhhZiwgMHg4YiwgMHgwNywgMHhiZSwgMHgxMywgMHg3ZCwgMHhhYywKKwkweDJhLCAweGU2LCAweGY2LCAweGIyLCAweDM0LCAweDU3LCAweDdmLCAweDJjLCAweDZmLCAweDU3LCAweDdlLCAweDI0LAorCTB4YmYsIDB4NWEsIDB4M2QsIDB4MGIsIDB4ZmUsIDB4NjEsIDB4NTUsIDB4MGIsIDB4YjAsIDB4MjcsIDB4MzcsIDB4OWEsCisJMHg5ZSwgMHg3NywgMHhjMywgMHgzZCwgMHgwMywgMHg1ZiwgMHhjMSwgMHhmMywgMHhmZSwgMHhlMCwgMHg2ZSwgMHg0YiwKKwkweDYyLCAweGVjLCAweDNiLCAweDk4LCAweDczLCAweDFlLCAweDNhLCAweDQ0LCAweDJjLCAweDljLCAweDgyLCAweGJjLAorCTB4MjUsIDB4ZmIsIDB4YTUsIDB4MmIsIDB4YTIsIDB4ZTUsIDB4NjQsIDB4NjgsIDB4MmMsIDB4OGMsIDB4MzksIDB4MTgsCisJMHgwMSwgMHgyNywgMHhlNywgMHg1YywgMHg0NiwgMHhmYSwgMHgyOSwgMHgzMywgMHg0NiwgMHhmMywgMHgxNSwgMHg3YywKKwkweDNmLCAweDBjLCAweGJkLCAweGQ4LCAweDhmLCAweDlmLCAweDkyLCAweDdiLCAweGEzLCAweDE4LCAweGViLCAweDI4LAorCTB4NjUsIDB4MmYsIDB4MmMsIDB4ODksIDB4MjcsIDB4MzEsIDB4OGYsIDB4N2MsIDB4OWIsIDB4ZGMsIDB4MmYsIDB4NWQsCisJMHhlOSwgMHg2MywgMHg1YywgMHhlZSwgMHg3ZSwgMHg4OSwgMHg2NSwgMHhlMywgMHg0YiwgMHgzZCwgMHhlMiwgMHg0OSwKKwkweDFiLCAweDZjLCAweGY5LCAweGZjLCAweDA5LCAweDlmLCAweDM3LCAweGZkLCAweDVhLCAweDBkLCAweGEzLCAweGJkLAorCTB4NWQsIDB4NzgsIDB4NDcsIDB4OTEsIDB4ZTcsIDB4MTUsIDB4YmMsIDB4MzAsIDB4NzgsIDB4NzksIDB4MGUsIDB4N2MsCisJMHgyOCwgMHhkMywgMHhiYywgMHgyMCwgMHgzYiwgMHhhMywgMHgxMSwgMHhiNCwgMHgyMSwgMHg1ZiwgMHhkMSwgMHg1OCwKKwkweDIyLCAweGQ5LCAweDEyLCAweDczLCAweGIwLCAweDk4LCAweDBmLCAweDg1LCAweDMxLCAweDllLCAweDIxLCAweDZlLAorCTB4NzAsIDB4OGMsIDB4ZWQsIDB4M2MsIDB4YjcsIDB4MGIsIDB4ZWEsIDB4NmMsIDB4YzgsIDB4MDgsIDB4ZWIsIDB4MjgsCisJMHhkZiwgMHg2OSwgMHhjZCwgMHhhOSwgMHg2MCwgMHg0MywgMHhmMSwgMHhiZSwgMHgxMSwgMHhjOSwgMHhlOCwgMHg3MiwKKwkweDBmLCAweGRlLCAweDc3LCAweDQxLCAweGU3LCAweDI1LCAweGZhLCAweGVmLCAweDRjLCAweGExLCAweDBkLCAweDcxLAorCTB4MjYsIDB4MDUsIDB4MmUsIDB4ZjEsIDB4YTEsIDB4OWEsIDB4MDAsIDB4YmQsIDB4OTksIDB4MjksIDB4ZjUsIDB4YzksCisJMHg4NCwgMHhiOSwgMHg2ZiwgMHhjZiwgMHgxYywgMHgwYiwgMHhkYSwgMHg1NywgMHgzMCwgMHg4YywgMHg5MSwgMHg2MCwKKwkweDRjLCAweDNkLCAweDdiLCAweGM2LCAweGM0LCAweGZlLCAweGY4LCAweGMxLCAweGM3LCAweGNkLCAweDJjLCAweDJmLAorCTB4MDIsIDB4YTcsIDB4MTYsIDB4N2YsIDB4OWIsIDB4NzEsIDB4OWYsIDB4OTcsIDB4NmMsIDB4YjQsIDB4NWQsIDB4ZmIsCisJMHgzNiwgMHgzNSwgMHhlYywgMHg0YiwgMHhiNiwgMHhjNCwgMHg3OCwgMHhkNCwgMHhiNywgMHg4MSwgMHg0MywgMHhmYiwKKwkweDgyLCAweDNhLCAweGI2LCAweDE1LCAweDIzLCAweDgzLCAweGI1LCAweDRmLCAweDZiLCAweDNkLCAweDY0LCAweGRkLAorCTB4MTcsIDB4MjUsIDB4YjMsIDB4OTgsIDB4OTcsIDB4NDksIDB4ZGQsIDB4OGYsIDB4NmIsIDB4MzgsIDB4YTgsIDB4NzksCisJMHgwOCwgMHg3NSwgMHgzNSwgMHg3MSwgMHgwOCwgMHg2YiwgMHg5OSwgMHgwYywgMHgwNywgMHg2ZCwgMHhmNywgMHg5MSwKKwkweGM5LCAweGUzLCAweGVmLCAweGQzLCAweDQwLCAweDY3LCAweGYxLCAweGVjLCAweDEwLCAweGY3LCAweGE4LCAweDVkLAorCTB4MTIsIDB4ZGYsIDB4ODQsIDB4YmQsIDB4MmMsIDB4YjUsIDB4ZWEsIDB4MjMsIDB4ZjIsIDB4NDksIDB4ZTksIDB4YjMsCisJMHgzZSwgMHg5ZSwgMHg5MywgMHhmYywgMHhiNSwgMHg2NCwgMHhjYSwgMHg0NywgMHgyNSwgMHg3ZCwgMHg3ZSwgMHgzYSwKKwkweDFkLCAweDEyLCAweGViLCAweGJjLCAweGVmLCAweDY3LCAweDFmLCAweDlkLCAweDllLCAweDU3LCAweDdjLCAweDdlLAorCTB4ZjQsIDB4ZmMsIDB4YmEsIDB4ZWEsIDB4NDQsIDB4ZGIsIDB4MDgsIDB4ZGEsIDB4NzEsIDB4MWMsIDB4YTYsIDB4ZTQsCisJMHg0YSwgMHg3ZiwgMHhmNywgMHg2NiwgMHg4ZSwgMHg3OSwgMHhkZSwgMHhhNCwgMHhjZSwgMHhlMSwgMHg0YSwgMHg5YSwKKwkweGYzLCAweGFhLCAweGM1LCAweGNmLCAweDFkLCAweDI5LCAweDQ1LCAweDNiLCAweGYwLCAweGFkLCAweGE0LCAweGI5LAorCTB4YWUsIDB4OGUsIDB4NjIsIDB4M2MsIDB4MmMsIDB4MWYsIDB4YTIsIDB4NGUsIDB4YzQsIDB4YjYsIDB4ODUsIDB4ZWYsCisJMHhiNywgMHhhNiwgMHhkNiwgMHg1NCwgMHgzMiwgMHgzZSwgMHhhNCwgMHhhYywgMHg3NCwgMHgxMSwgMHhiZiwgMHgzNiwKKwkweGE1LCAweGNmLCAweDFlLCAweDYzLCAweDcxLCAweDA1LCAweGRkLCAweGM1LCAweDljLCAweGVjLCAweGUzLCAweDllLAorCTB4MzcsIDB4NjUsIDB4YjMsIDB4M2UsIDB4NjksIDB4NDYsIDB4MTQsIDB4ZTMsIDB4MjYsIDB4NWQsIDB4ZmEsIDB4OGMsCisJMHhmMiwgMHhkMiwgMHhlMSwgMHhhNCwgMHg3OSwgMHg1YywgMHgxZCwgMHgwYywgMHhlZSwgMHg1MywgMHhjMCwgMHhjYywKKwkweGRkLCAweGY3LCAweDlkLCAweDVkLCAweDUzLCAweGE2LCAweDVjLCAweDJlLCAweDI1LCAweGUzLCAweGIzLCAweGNhLAorCTB4Y2EsIDB4ZTMsIDB4OWQsIDB4ZjksIDB4MDksIDB4NDUsIDB4ZGMsIDB4NDgsIDB4OWEsIDB4NWQsIDB4OGEsIDB4YjEsCisJMHhjZCwgMHgwZSwgMHgzZCwgMHhlZiwgMHgyOSwgMHhmNCwgMHg0ZiwgMHhhYSwgMHhiNiwgMHg2MCwgMHgzYywgMHhkYywKKwkweGFmLCAweGNiLCAweGZkLCAweGJlLCAweGNlLCAweDEwLCAweDczLCAweDA2LCAweDhjLCAweDk5LCAweDQ1LCAweGU2LAorCTB4ODMsIDB4ZTksIDB4M2MsIDB4ODQsIDB4NzQsIDB4NjIsIDB4OGMsIDB4ZjcsIDB4ODYsIDB4M2MsIDB4MzgsIDB4ZjksCisJMHgwZiwgMHhkNCwgMHhhMSwgMHg1YywgMHg2NSwgMHg5ZCwgMHgxMywgMHhlOCwgMHhkYiwgMHgzMSwgMHhjZCwgMHg5ZiwKKwkweDFmLCAweDljLCAweDJjLCAweGU4LCAweGZjLCAweGM0LCAweDFkLCAweDk1LCAweDA4LCAweGU2LCAweGJkLCAweGJiLAorCTB4NjcsIDB4ZjEsIDB4OGMsIDB4ZmIsIDB4MDUsIDB4YmUsIDB4NjcsIDB4MzEsIDB4MzQsIDB4ZGUsIDB4MjEsIDB4Y2MsCisJMHgwNywgMHhjZCwgMHg1NSwgMHg1YSwgMHhiMiwgMHhjMSwgMHhkOCwgMHgwMCwgMHhjZiwgMHhmNywgMHg1YiwgMHg2NywKKwkweGU1LCAweDE3LCAweGM0LCAweDE4LCAweGViLCAweGRjLCAweDIzLCAweDI3LCAweGUwLCAweDlkLCAweGUwLCAweGFiLAorCTB4NzUsIDB4YmMsIDB4YTcsIDB4YjgsIDB4MmMsIDB4MDUsIDB4YmYsIDB4YmYsIDB4NzQsIDB4MzIsIDB4ZmYsIDB4YjQsCisJMHg1OCwgMHhmZiwgMHhiYywgMHg3NywgMHhmOCwgMHgzNiwgMHgzMCwgMHg4NywgMHhmYiwgMHgwNywgMHgyNywgMHgyOSwKKwkweDlmLCAweDVjLCAweDliLCAweGI4LCAweDlhLCAweGJjLCAweGMyLCAweGYxLCAweDBjLCAweDRhLCAweDZlLCAweDE5LAorCTB4ZGMsIDB4MDgsIDB4YmYsIDB4ZjksIDB4NjUsIDB4N2YsIDB4ZGYsIDB4ZDYsIDB4YzEsIDB4YjMsIDB4NzMsIDB4MjUsCisJMHg1MywgMHhlYiwgMHhlYiwgMHhhYywgMHhjYiwgMHhiMywgMHgwZiwgMHhlOCwgMHg4YSwgMHhjZSwgMHg3YiwgMHg2MiwKKwkweDVmLCAweGU2LCAweDBhLCAweDFlLCAweGExLCAweDdkLCAweDc0LCAweDZhLCAweDEyLCAweDQ1LCAweDViLCAweDcyLAorCTB4NTYsIDB4ZDYsIDB4ODMsIDB4YmYsIDB4YzMsIDB4NjYsIDB4MTYsIDB4NWYsIDB4OGQsIDB4MDgsIDB4MzAsIDB4MzksCisJMHgxNSwgMHgwZiwgMHgxZCwgMHg5MCwgMHg3OSwgMHhkNywgMHg5NSwgMHg0NiwgMHhmMywgMHg4NCwgMHg1YywgMHg2YiwKKwkweDNhLCAweGZhLCAweDE5LCAweGVkLCAweGQ5LCAweGMyLCAweDZiLCAweGZhLCAweDVjLCAweDNhLCAweGZlLCAweGExLAorCTB4YjIsIDB4OWMsIDB4YWIsIDB4ZjAsIDB4NmIsIDB4YmUsIDB4N2IsIDB4OGMsIDB4NzksIDB4YzIsIDB4ZTEsIDB4ODEsCisJMHg4NywgMHg3OSwgMHg3MCwgMHhjMCwgMHgwZSwgMHg3MCwgMHg4ZSwgMHhiNywgMHhjMCwgMHgzOSwgMHhkZSwgMHgwNCwKKwkweGU3LCAweGY4LCAweDI1LCAweDM4LCAweGY2LCAweDhkLCAweGNhLCAweDU0LCAweDgwLCAweGZmLCAweGQzLCAweGMwLAorCTB4MjEsIDB4ZGEsIDB4NmEsIDB4ZWIsIDB4MmMsIDB4ZjYsIDB4NzQsIDB4YmEsIDB4MDAsIDB4MTksIDB4ZmMsIDB4MDAsCisJMHhmZSwgMHhjNywgMHg1NiwgMHgyNSwgMHgyMywgMHgxYiwgMHhhYiwgMHg5MywgMHhiMiwgMHhiOSwgMHhlYSwgMHhlNywKKwkweDFjLCAweGJmLCAweGNiLCAweDNjLCAweGFkLCAweDUxLCAweGVlLCAweDkzLCAweDAzLCAweDFjLCAweGRhLCAweDI3LAorCTB4ODksIDB4ZTMsIDB4YzQsIDB4OGYsIDB4NGUsIDB4NTksIDB4MmIsIDB4YWYsIDB4NjksIDB4MWMsIDB4NWEsIDB4MmIsCisJMHhiMywgMHgxYywgMHgxMiwgMHg5ZCwgMHhmMywgMHg3NSwgMHg2NiwgMHg1YiwgMHg2YSwgMHhlZSwgMHgxNiwgMHhlYSwKKwkweGJiLCAweDk5LCAweGRiLCAweDE1LCAweGM0LCAweGQ2LCAweDg5LCAweDk3LCAweDdmLCAweDBlLCAweGY2LCAweDVlLAorCTB4ZTksIDB4NWMsIDB4YjgsIDB4MTksIDB4ZjMsIDB4MDAsIDB4ZGEsIDB4YjUsIDB4YjAsIDB4NmIsIDB4YzgsIDB4M2YsCisJMHgyNywgMHg1NywgMHg3ZiwgMHg0MSwgMHgxYiwgMHg3YywgMHgwMywgMHg5YywgMHhmMSwgMHgyYSwgMHg2YywgMHhjOCwKKwkweDhlLCAweDczLCAweDQwLCAweDczLCAweGJmLCAweDFkLCAweGU3LCAweDg4LCAweGNlLCAweGFkLCAweGU1LCAweDdiLAorCTB4OGEsIDB4NjUsIDB4NWIsIDB4ZTYsIDB4Y2EsIDB4NTYsIDB4YmMsIDB4MDAsIDB4ZjksIDB4YmIsIDB4MDYsIDB4YmYsCisJMHg2ZCwgMHgwMywgMHg3YiwgMHhiMCwgMHg4OSwgMHhiNSwgMHhkOCwgMHg2YSwgMHhkMiwgMHhjZSwgMHhiZiwgMHhhZiwKKwkweGIxLCAweDc3LCAweGFkLCAweGY5LCAweDI3LCAweGJjLCAweGM3LCAweDNhLCAweDliLCAweDk2LCAweDNmLCAweGY2LAorCTB4MTMsIDB4MDMsIDB4OTksIDB4OGYsIDB4OTcsIDB4ZDUsIDB4ZmQsIDB4ZmQsIDB4N2UsIDB4MWIsIDB4NjgsIDB4YmIsCisJMHhkOSwgMHgyNCwgMHgxZSwgMHg4YiwgMHg1YywgMHgyYywgMHhkOSwgMHhiMCwgMHgyNSwgMHgxNywgMHg2MywgMHhlNCwKKwkweDAwLCAweDU1LCAweGQ1LCAweGVhLCAweGU3LCAweDA1LCAweDYzLCAweGY2LCAweGJjLCAweGZkLCAweDM2LCAweGM3LAorCTB4ZTUsIDB4MDQsIDB4YjgsIDB4NGQsIDB4ZGIsIDB4YmYsIDB4YWQsIDB4YjksIDB4NGQsIDB4YTksIDB4ZjIsIDB4YmMsCisJMHg1YywgMHg1ZiwgMHg0ZCwgMHgwNSwgMHgxYywgMHgyNywgMHgyZiwgMHg2ZiwgMHg4MCwgMHhlMywgMHgzNSwgMHgyYiwKKwkweGFkLCAweDFjLCAweGVkLCAweDcxLCAweGFjLCAweDUzLCAweDQ1LCAweGNkLCAweDJkLCAweDc1LCAweGM5LCAweGE1LAorCTB4OTUsIDB4YTIsIDB4YmEsIDB4YmMsIDB4NTIsIDB4NTIsIDB4YWYsIDB4MmMsIDB4OTUsIDB4NTUsIDB4NzEsIDB4YzksCisJMHhmMywgMHhmZSwgMHhlOSwgMHhjZSwgMHhjOCwgMHhkYiwgMHhhYiwgMHg5ZSwgMHg5YywgMHg3NiwgMHg4ZCwgMHg4MSwKKwkweDkwLCAweGI0LCAweGYyLCAweGRmLCAweDNjLCAweGFmLCAweDEzLCAweGQ4LCAweGJjLCAweDc1LCAweGQ4LCAweGYzLAorCTB4OWUsIDB4MTgsIDB4MWQsIDB4MTUsIDB4ZTcsIDB4MzAsIDB4MzksIDB4Y2EsIDB4NzAsIDB4OGMsIDB4MzksIDB4YWMsCisJMHhjNCwgMHg5YywgMHg4YywgMHg2ZCwgMHg5ZiwgMHhhZiwgMHgyOSwgMHgwNSwgMHg3YywgMHgzYiwgMHhlMCwgMHhmMywKKwkweDk3LCAweDI3LCAweGJiLCAweDgzLCAweDMzLCAweDhmLCAweGIzLCAweDJmLCAweDMxLCAweDI2LCAweDFjLCAweGZiLAorCTB4YWYsIDB4OTgsIDB4YjAsIDB4MjksIDB4ZTcsIDB4Y2EsIDB4NTgsIDB4ODgsIDB4YWUsIDB4YTgsIDB4N2MsIDB4YWYsCisJMHgxYywgMHg3OSwgMHhhYywgMHg2YywgMHhlMiwgMHhlYSwgMHgxOCwgMHhjNSwgMHhmMiwgMHg3ZCwgMHg2ZiwgMHg0OCwKKwkweGM3LCAweGZlLCAweGMxLCAweDQ5LCAweDRjLCAweGNmLCAweDliLCAweDc1LCAweGY5LCAweGJkLCAweDAzLCAweDhjLAorCTB4YzksIDB4OTgsIDB4ZGQsIDB4YjAsIDB4ZmYsIDB4YTcsIDB4YjUsIDB4N2QsIDB4YWUsIDB4YWEsIDB4OGMsIDB4NGQsCisJMHhmZCwgMHg4ZSwgMHhjYSwgMHg0NCwgMHgxOSwgMHgzNiwgMHg1ZSwgMHgzMSwgMHgyZiwgMHg5NCwgMHg1YywgMHhjMSwKKwkweDhhLCAweGNkLCAweDAyLCAweDNiLCAweDY2LCAweDgwLCAweDM3LCAweDRmLCAweGViLCAweGIzLCAweGQxLCAweDQzLAorCTB4MWEsIDB4N2IsIDB4ZTYsIDB4NTgsIDB4Y2UsIDB4NGIsIDB4YmEsIDB4ZTYsIDB4ZjYsIDB4ZWEsIDB4ZjUsIDB4YmIsCisJMHg3ZCwgMHhhZCwgMHgxOCwgMHhmMywgMHhmNywgMHgxYywgMHg3YSwgMHg5YywgMHhlNywgMHhmOSwgMHg0MCwgMHhhZiwKKwkweDY0LCAweGQ3LCAweGNmLCAweDQwLCAweDI3LCAweDYyLCAweDU4LCAweGRiLCAweGIwLCAweGQ2LCAweDg3LCAweDFkLAorCTB4ZDgsIDB4ZWYsIDB4MWQsIDB4MjcsIDB4MWMsIDB4NjAsIDB4NmEsIDB4MjcsIDB4ZWUsIDB4ZDksIDB4NmUsIDB4MTIsCisJMHhmZCwgMHgzYSwgMHgyNCwgMHhiMywgMHhkNCwgMHhhZSwgMHg3MSwgMHhmNSwgMHhkMSwgMHhiYSwgMHgzNCwgMHg3OCwKKwkweDQ4LCAweDBlLCAweGU1LCAweDEwLCAweGVhLCAweGUyLCAweDQxLCAweDk5LCAweGRjLCAweDZiLCAweDFhLCAweGU1LAorCTB4MzYsIDB4NWMsIDB4ZDksIDB4ZTYsIDB4MjgsIDB4NzgsIDB4MDUsIDB4YWUsIDB4YmYsIDB4YzAsIDB4ZmIsIDB4NDYsCisJMHgzMSwgMHhlNiwgMHhiYywgMHgyOSwgMHhlZiwgMHg5ZCwgMHhhNCwgMHgyZCwgMHg3MSwgMHgwYywgMHhlNiwgMHgxYSwKKwkweGNmLCAweGRhLCAweGI4LCAweDM2LCAweGNhLCAweDJhLCAweGJiLCAweGM4LCAweDMyLCAweGFlLCAweDU1LCAweGZmLAorCTB4ZjksIDB4MjMsIDB4OTgsIDB4ODQsIDB4M2UsIDB4OTksIDB4MTUsIDB4MWYsIDB4OTMsIDB4ZGUsIDB4ZGIsIDB4YzUsCisJMHgyNCwgMHhkNiwgMHg3NSwgMHhjOCwgMHhjNCwgMHg1MiwgMHg1YywgMHg5ZCwgMHhiYSwgMHg2MiwgMHg0MiwgMHhkZSwKKwkweGJhLCAweDI0LCAweGJiLCAweDEyLCAweGQ1LCAweDdjLCAweGI0LCAweDA2LCAweDU5LCAweDVjLCAweDg3LCAweDVjLAorCTB4YWQsIDB4NDEsIDB4YTYsIDB4MzIsIDB4NjUsIDB4MmIsIDB4MzUsIDB4YWQsIDB4ZTIsIDB4M2EsIDB4MmUsIDB4MzAsCisJMHgwNSwgMHg3OSwgMHgwZCwgMHhiZiwgMHg0YSwgMHgyZSwgMHg0YSwgMHhmZCwgMHg3NSwgMHhkMCwgMHg0NiwgMHg2OCwKKwkweDQ3LCAweGQzLCAweDYxLCAweDY1LCAweDQzLCAweDBlLCAweDIxLCAweDk3LCAweDY1LCAweDVmLCAweDdmLCAweGRmLAorCTB4NTEsIDB4MWEsIDB4NTcsIDB4NTMsIDB4NzcsIDB4MjQsIDB4ZTksIDB4ZGMsIDB4MTEsIDB4Y2IsIDB4ZGQsIDB4YzEsCisJMHhlZiwgMHgzNywgMHhlMiwgMHhjYSwgMHg1NSwgMHhlOCwgMHhmYiwgMHhlYiwgMHhmOCwgMHg0ZSwgMHhmOCwgMHgzNSwKKwkweDQzLCAweDhlLCAweDBkLCAweDZiLCAweDlkLCAweDRlLCAweDQ5LCAweGM4LCAweDcyLCAweDM2LCAweGM1LCAweGQ3LAorCTB4ZjEsIDB4NzUsIDB4YWQsIDB4ZTMsIDB4OTAsIDB4MzcsIDB4NjAsIDB4OTAsIDB4YWYsIDB4ZDMsIDB4ZTksIDB4NDAsCisJMHg0NiwgMHhiZiwgMHgwMSwgMHhmZCwgMHhiNSwgMHhlMCwgMHg5NSwgMHhjNSwgMHg2NSwgMHgxZSwgMHhmYSwgMHg3ZiwKKwkweDE1LCAweGNmLCAweDZmLCAweDM2LCAweDNmLCAweDU2LCAweDczLCAweDhiLCAweDJhLCAweGM4LCAweDNmLCAweDc5LAorCTB4MGUsIDB4M2MsIDB4ZjksIDB4ZjcsIDB4NTgsIDB4YmIsIDB4MWUsIDB4Y2QsIDB4ZGQsIDB4MTMsIDB4YTMsIDB4M2MsCisJMHgwNywgMHhmYiwgMHhiNywgMHhiYSwgMHg2NCwgMHgxZiwgMHg5NywgMHhkYiwgMHgyMywgMHgyNywgMHg1MCwgMHhlZSwKKwkweGM2LCAweGQ1LCAweGMwLCAweDNhLCAweDQ0LCAweGY0LCAweGY5LCAweGY1LCAweDVhLCAweDY5LCAweGM0LCAweDI4LAorCTB4ZWEsIDB4MzMsIDB4ZTYsIDB4MzEsIDB4ZjQsIDB4MjUsIDB4OTYsIDB4MWQsIDB4YzYsIDB4NzMsIDB4YzYsIDB4NjUsCisJMHgzOCwgMHgzNywgMHg3MCwgMHgyNiwgMHgxNSwgMHhkMywgMHgzOSwgMHhhMSwgMHgzNSwgMHg3MCwgMHg4OSwgMHg3NSwKKwkweGJjLCAweGVmLCAweDE2LCAweGUzLCAweDdhLCAweDBkLCAweGU4LCAweGYwLCAweGM4LCAweDY3LCAweDVlLCAweDNhLAorCTB4Y2EsIDB4YmMsIDB4ZjMsIDB4ZjcsIDB4NjMsIDB4YmUsIDB4ZmQsIDB4ZmIsIDB4YzQsIDB4YmIsIDB4NmQsIDB4Y2YsCisJMHhhNSwgMHgwYywgMHhkYywgMHg3YywgMHg2MCwgMHgwMiwgMHhlZiwgMHhjOCwgMHhkYiwgMHg2MSwgMHg4YiwgMHhhYSwKKwkweDVhLCAweDdlLCAweGQ5LCAweGNlLCAweGVmLCAweDViLCAweDZjLCAweDI0LCAweGNkLCAweDc3LCAweGM1LCAweGVmLAorCTB4M2IsIDB4NmYsIDB4ZDMsIDB4ZWUsIDB4NzQsIDB4MDAsIDB4NWYsIDB4ZTIsIDB4OWEsIDB4NTcsIDB4ZGUsIDB4YjIsCisJMHgwYiwgMHg0MCwgMHgwNSwgMHgyYiwgMHgzZSwgMHgwNSwgMHgxOSwgMHg2ZCwgMHgxNywgMHhjYiwgMHhjOSwgMHhjOSwKKwkweGMzLCAweGVmLCAweGNlLCAweGVhLCAweGJlLCAweDZjLCAweGRiLCAweGVhLCAweGRiLCAweGZhLCAweDJlLCAweGM3LAorCTB4Y2YsIDB4YjksIDB4NzAsIDB4MGUsIDB4ZjAsIDB4NmQsIDB4NGMsIDB4NTMsIDB4Y2IsIDB4ZTgsIDB4NGUsIDB4YzMsCisJMHgxOCwgMHhmMCwgMHg2NSwgMHhiNCwgMHgzNSwgMHg4ZiwgMHhlOCwgMHhmZiwgMHg5OSwgMHgwNywgMHhlNSwgMHg2NCwKKwkweGM0LCAweGYwLCAweGNmLCAweGRiLCAweDcxLCAweDZkLCAweDcwLCAweDNkLCAweDNmLCAweDA2LCAweGJmLCAweGRmLAorCTB4MmIsIDB4M2YsIDB4YWQsIDB4MzgsIDB4YTMsIDB4MmYsIDB4M2YsIDB4NGYsIDB4ZWMsIDB4Y2EsIDB4MGYsIDB4N2QsCisJMHhkNCwgMHgyZSwgMHhjOSwgMHhhZCwgMHhkOCwgMHgzMiwgMHg1OSwgMHhkNiwgMHhmYiwgMHgwZCwgMHhhZSwgMHhjOSwKKwkweGY4LCAweGQxLCAweDA5LCAweGM4LCAweDBkLCAweDY1LCAweDlkLCAweGJhLCAweDY1LCAweDRhLCAweDE1LCAweDcyLAorCTB4NTQsIDB4MDUsIDB4M2UsIDB4NTUsIDB4MjEsIDB4NTMsIDB4ZTQsIDB4NDAsIDB4NTUsIDB4ZTAsIDB4NWIsIDB4YjUsCisJMHg2OSwgMHgzOSwgMHg3NSwgMHhjYywgMHg5OSwgMHgzNiwgMHg3YiwgMHgxZCwgMHg3MiwgMHg3NCwgMHhiNSwgMHhjOSwKKwkweGZkLCAweGQ3LCAweDYzLCAweDM2LCAweDY5LCAweDA3LCAweDZmLCAweGVlLCAweGVlLCAweGZkLCAweGE3LCAweGQ4LAorCTB4ZmIsIDB4MjMsIDB4NzIsIDB4MGQsIDB4N2UsIDB4Y2IsIDB4ZjUsIDB4Y2EsIDB4MDgsIDB4MzAsIDB4NDksIDB4ODAsCisJMHg1MSwgMHgyZSwgMHg2NCwgMHgyMywgMHgyNSwgMHgxYiwgMHg5NSwgMHg3MSwgMHhkOSwgMHg4NCwgMHg3ZCwgMHhkYSwKKwkweDVhLCAweDRkLCAweDgwLCAweDRmLCAweDAzLCAweDQ3LCAweGFmLCAweDFjLCAweDkzLCAweDM3LCAweDU2LCAweDk1LAorCTB4Y2MsIDB4ZDgsIDB4YjAsIDB4MzMsIDB4NmIsIDB4OGMsIDB4YzEsIDB4NDMsIDB4OWUsIDB4YWIsIDB4NWQsIDB4ZmEsCisJMHhiYywgMHg3ZCwgMHhhMiwgMHhlZSwgMHhjNywgMHhlMiwgMHg3MywgMHhmNSwgMHgxZSwgMHg5OSwgMHhhYywgMHg5YiwKKwkweGYyLCAweDU0LCAweGJkLCAweDU3LCAweGJlLCAweDVhLCAweDhmLCAweGNhLCAweGU5LCAweDQ2LCAweDRjLCAweGJlLAorCTB4NTYsIDB4MWYsIDB4OTQsIDB4YTcsIDB4ZWIsIDB4NDcsIDB4ZTQsIDB4OTksIDB4NDYsIDB4NWMsIDB4YmUsIDB4MGUsCisJMHhiZiwgMHgzMCwgMHhkZiwgMHg3MCwgMHg2NCwgMHhhYSwgMHgzMSwgMHgyMiwgMHhhNywgMHgxYSwgMHg4YywgMHhiMSwKKwkweGUzLCAweDdiLCAweGY4LCAweDY1LCAweDc3LCAweDYzLCAweDE3LCAweDFjLCAweDU3LCAweDI3LCAweGM2LCAweGU1LAorCTB4YTgsIDB4OWMsIDB4M2UsIDB4NmYsIDB4OTQsIDB4YmMsIDB4MWYsIDB4ZmYsIDB4MTAsIDB4NzksIDB4MDEsIDB4N2QsCisJMHgxNywgMHhhZSwgMHgyOCwgMHhhOSwgMHhlOSwgMHhlZiwgMHhiNywgMHhmZSwgMHg0NywgMHgyNCwgMHhhMiwgMHg3ZCwKKwkweGEzLCAweDE3LCAweGFhLCAweDgzLCAweDY4LCAweDYzLCAweGQzLCAweDI3LCAweDA5LCAweGUyLCAweDIwLCAweGFkLAorCTB4ZjgsIDB4N2YsIDB4Y2IsIDB4ZjcsIDB4MzIsIDB4NzQsIDB4MGMsIDB4ZmIsIDB4MjYsIDB4N2QsIDB4MmYsIDB4YmQsCisJMHhmNiwgMHhjNCwgMHgwZiwgMHhmYSwgMHgzOSwgMHhmNCwgMHhiNSwgMHhmNiwgMHg5ZSwgMHg1MSwgMHhiNCwgMHhiZSwKKwkweGJiLCAweDkwLCAweDdmLCAweGY0LCAweDdmLCAweDUxLCAweGZjLCAweGIzLCAweGE2LCAweDczLCAweDhkLCAweDQxLAorCTB4ZmUsIDB4NGYsIDB4MGEsIDB4YzYsIDB4ZjIsIDB4ZjksIDB4ZjksIDB4ZGQsIDB4OTMsIDB4OTUsIDB4MDksIDB4ZjUsCisJMHg1NCwgMHg4NSwgMHg4YywgMHhjNiwgMHg5MywgMHg4NSwgMHhkZCwgMHgzYywgMHhiYSwgMHhhZiwgMHhjOCwgMHg5YSwKKwkweDFiLCAweGQxLCAweDYzLCAweGYwLCAweGUzLCAweGY2LCAweDY5LCAweDlkLCAweDUzLCAweDM3LCAweDMxLCAweDRjLAorCTB4ZjksIDB4ZTMsIDB4MTksIDB4NWEsIDB4NGYsIDB4NzAsIDB4YjYsIDB4MDAsIDB4NmUsIDB4ZWIsIDB4OWEsIDB4NzIsCisJMHhiMSwgMHhlZSwgMHhjNywgMHhhZiwgMHhlNiwgMHhiNCwgMHhiYywgMHg1YywgMHg4NywgMHhjYywgMHhmMSwgMHhmYywKKwkweGMxLCAweGJmLCAweDE2LCAweGFhLCAweDdlLCAweGRmLCAweGVjLCAweGIwLCAweDQzLCAweDdmLCAweDFjLCAweGYzLAorCTB4MzUsIDB4N2EsIDB4ZjksIDB4MmQsIDB4ZmUsIDB4NGYsIDB4MGUsIDB4Y2EsIDB4YzEsIDB4NzgsIDB4OTksIDB4MGYsCisJMHg2YywgMHg2YiwgMHg1OSwgMHhmNCwgMHhjZiwgMHg2NywgMHgxZCwgMHg3OSwgMHgxMSwgMHg3YiwgMHg1MSwgMHgzMywKKwkweDM5LCAweGZlLCAweDRlLCAweGE5LCAweDM5LCAweGY0LCAweDZkLCAweDg5LCAweGRmLCAweGMzLCAweDUyLCAweGM1LAorCTB4NzcsIDB4NmEsIDB4NGUsIDB4MmIsIDB4MzYsIDB4ZTYsIDB4ZTMsIDB4NmMsIDB4Y2QsIDB4N2MsIDB4ZjgsIDB4ZGQsCisJMHhlOSwgMHhlYSwgMHg0MSwgMHhkYywgMHhhMywgMHhjZSwgMHgwMSwgMHg2NywgMHgzYSwgMHhjMywgMHhmYiwgMHgwNSwKKwkweDk0LCAweDE5LCAweDFiLCAweDk5LCAweGMzLCAweDM1LCAweDE2LCAweGQ0LCAweGZkLCAweDdjLCAweDQwLCAweDczLAorCTB4ZjUsIDB4ZjEsIDB4ODcsIDB4ZmQsIDB4NjYsIDB4YWEsIDB4NTYsIDB4MjEsIDB4MTMsIDB4YmEsIDB4YWIsIDB4OGMsCisJMHg5ZiwgMHhhZCwgMHgwZiwgMHgxMCwgMHg3MywgMHgwZiwgMHhkYSwgMHhmYywgMHg0NSwgMHhlNCwgMHg2ZiwgMHhhNiwKKwkweDhlLCAweDI5LCAweDA0LCAweGNmLCAweGY2LCAweGM5LCAweGIzLCAweDI2LCAweDczLCAweGNkLCAweGQzLCAweDZhLAorCTB4YTIsIDB4ZjIsIDB4NzIsIDB4OTAsIDB4NTcsIDB4N2IsIDB4NTcsIDB4MWQsIDB4YWMsIDB4MzUsIDB4MDcsIDB4ZmMsCisJMHhiYywgMHg3NCwgMHhiZSwgMHg3YiwgMHg2ZiwgMHgyZSwgMHhmYSwgMHg1ZSwgMHgzOSwgMHg2MSwgMHg0ZSwgMHg3YSwKKwkweDA3LCAweDc4LCAweGFiLCAweDM2LCAweDYyLCAweGQwLCAweDQxLCAweGUwLCAweDlkLCAweGRkLCAweGE2LCAweGY1LAorCTB4YjEsIDB4ZDgsIDB4ZjgsIDB4OTcsIDB4YjcsIDB4YWQsIDB4ZjUsIDB4YjksIDB4MTUsIDB4NjMsIDB4YjgsIDB4MzUsCisJMHg0MCwgMHhkZiwgMHg5NiwgMHhiOCwgMHg3MSwgMHhkMSwgMHg4ZiwgMHgxYiwgMHg2OSwgMHgxZiwgMHgxYSwgMHg1OCwKKwkweDgxLCAweDNhLCAweGVhLCAweDJhLCAweGY0LCAweDY0LCAweGI3LCAweDJkLCAweGZmLCAweGZlLCAweDAzLCAweDdkLAorCTB4ZTcsIDB4OTUsIDB4ZjAsIDB4MmMsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAogc3RhdGljIHUzMiBibngyX1JYUF9iMDZGd0RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKLXN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndSb2RhdGFbKDB4MjgvNCkgKyAxXSA9IHsKLQkweDA4MDA0NjhjLCAweDA4MDA0NThjLCAweDA4MDA0NjMwLCAweDA4MDA0NjQ4LCAweDA4MDA0NjYwLCAweDA4MDA0NjgwLAotCTB4MDgwMDQ2OGMsIDB4MDgwMDQ2OGMsIDB4MDgwMDQ1OTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfTsKLXN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndCc3NbKDB4MTNhNC80KSArIDFdID0geyAweDAgfTsKLXN0YXRpYyB1MzIgYm54Ml9SWFBfYjA2RndTYnNzWygweDFjLzQpICsgMV0gPSB7IDB4MCB9Oworc3RhdGljIHUzMiBibngyX1JYUF9iMDZGd1JvZGF0YVsoMHgyNzgvNCkgKyAxXSA9IHsKKwkweDA4MDAzZmRjLCAweDA4MDAzZWRjLCAweDA4MDAzZjgwLCAweDA4MDAzZjk4LCAweDA4MDAzZmIwLCAweDA4MDAzZmQwLAorCTB4MDgwMDNmZGMsIDB4MDgwMDNmZGMsIDB4MDgwMDNlZTQsIDB4MDAwMDAwMDAsIDB4MDgwMDRhMDQsIDB4MDgwMDRhM2MsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGE3NCwgMHgwODAwNGMzOCwKKwkweDA4MDA0YjgwLCAweDA4MDA0YmI4LCAweDA4MDA0YzM4LCAweDA4MDA0YjA4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LAorCTB4MDgwMDRiYjgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGJmOCwKKwkweDA4MDA0YzM4LCAweDA4MDA0YmY4LCAweDA4MDA0YjgwLCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YmY4LAorCTB4MDgwMDRiZjgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwKKwkweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LAorCTB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwKKwkweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LAorCTB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwKKwkweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LAorCTB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwKKwkweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LAorCTB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwgMHgwODAwNGMzOCwKKwkweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LCAweDA4MDA0YzM4LAorCTB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsIDB4MDgwMDRjMzgsCisJMHgwODAwNGFlNCwgMHgwMDAwMDAwMCwgMHgwODAwNjAxOCwgMHgwODAwNjAzMCwgMHgwODAwNjAzMCwgMHgwODAwNjAzMCwKKwkweDA4MDA2MDE4LCAweDA4MDA2MDMwLCAweDA4MDA2MDMwLCAweDA4MDA2MDMwLCAweDA4MDA2MDE4LCAweDA4MDA2MDMwLAorCTB4MDgwMDYwMzAsIDB4MDgwMDYwMzAsIDB4MDgwMDYwMTgsIDB4MDgwMDYwMzAsIDB4MDgwMDYwMzAsIDB4MDgwMDYwMzAsCisJMHgwODAwNjAyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9OworCitzdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3QnNzWygweDEzZGMvNCkgKyAxXSA9IHsgMHgwIH07CitzdGF0aWMgdTMyIGJueDJfUlhQX2IwNkZ3U2Jzc1soMHgyYy80KSArIDFdID0geyAweDAgfTsKKworc3RhdGljIHN0cnVjdCBmd19pbmZvIGJueDJfcnhwX2Z3XzA2ID0geworCS52ZXJfbWFqb3IJCQk9IDB4MiwKKwkudmVyX21pbm9yCQkJPSAweDgsCisJLnZlcl9maXgJCQk9IDB4MTcsCisKKwkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMzE4NCwKKworCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDAwMDAsCisJLnRleHRfbGVuCQkJPSAweDY3MjgsCisJLnRleHRfaW5kZXgJCQk9IDB4MCwKKwkuZ3pfdGV4dAkJCT0gYm54Ml9SWFBfYjA2RndUZXh0LAorCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfUlhQX2IwNkZ3VGV4dCksCisKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDA2OWMwLAorCS5kYXRhX2xlbgkJCT0gMHgwLAorCS5kYXRhX2luZGV4CQkJPSAweDAsCisJLmRhdGEJCQkJPSBibngyX1JYUF9iMDZGd0RhdGEsCisKKwkuc2Jzc19hZGRyCQkJPSAweDA4MDA2OWMwLAorCS5zYnNzX2xlbgkJCT0gMHgyYywKKwkuc2Jzc19pbmRleAkJCT0gMHgwLAorCS5zYnNzCQkJCT0gYm54Ml9SWFBfYjA2RndTYnNzLAorCisJLmJzc19hZGRyCQkJPSAweDA4MDA2OWYwLAorCS5ic3NfbGVuCQkJPSAweDEzZGMsCisJLmJzc19pbmRleAkJCT0gMHgwLAorCS5ic3MJCQkJPSBibngyX1JYUF9iMDZGd0JzcywKKworCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNjcyOCwKKwkucm9kYXRhX2xlbgkJCT0gMHgyNzgsCisJLnJvZGF0YV9pbmRleAkJCT0gMHgwLAorCS5yb2RhdGEJCQkJPSBibngyX1JYUF9iMDZGd1JvZGF0YSwKK307CiAKIHN0YXRpYyB1OCBibngyX3J2MnBfcHJvYzFbXSA9IHsKIAkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweDVlLCAweGQwLCAweDQxLCAweDQ0LCAweDAwLCAweDAzLCAweDc0LCAweDY1LApAQCAtMTMxNiwyMCArMTY2NSw2IEBACiAJMHg2MywgMHhkNiwgMHgxMSwgMHg4ZiwgMHg0NywgMHhkNSwgMHg1ZiwgMHgzZiwgMHg5NywgMHg4ZiwgMHgzMSwgMHhkOCwKIAkweDE3LCAweDAwLCAweDAwLCAweDAwIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3UmVsZWFzZU1ham9yID0gMHgxOwotc3RhdGljIGNvbnN0IGludCBibngyX1RQQVRfYjA2RndSZWxlYXNlTWlub3IgPSAweDA7Ci1zdGF0aWMgY29uc3QgaW50IGJueDJfVFBBVF9iMDZGd1JlbGVhc2VGaXggPSAweDA7Ci1zdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1N0YXJ0QWRkciA9IDB4MDgwMDA4NjA7Ci1zdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1RleHRBZGRyID0gMHgwODAwMDgwMDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3VGV4dExlbiA9IDB4MTIyYzsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9UUEFUX2IwNkZ3RGF0YUFkZHIgPSAweDA4MDAxYTYwOwotc3RhdGljIGNvbnN0IGludCBibngyX1RQQVRfYjA2RndEYXRhTGVuID0gMHgwOwotc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA2RndSb2RhdGFBZGRyID0gMHgwMDAwMDAwMDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3Um9kYXRhTGVuID0gMHgwOwotc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA2RndCc3NBZGRyID0gMHgwODAwMWFhMDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3QnNzTGVuID0gMHgyNTA7Ci1zdGF0aWMgY29uc3QgdTMyIGJueDJfVFBBVF9iMDZGd1Nic3NBZGRyID0gMHgwODAwMWE2MDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UUEFUX2IwNkZ3U2Jzc0xlbiA9IDB4MzQ7CiBzdGF0aWMgdTggYm54Ml9UUEFUX2IwNkZ3VGV4dFtdID0gewogCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4NDcsIDB4ZDIsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCiAJMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhjNSwgMHg1NywgMHg0ZCwgMHg2OCwKQEAgLTE1MjksMjAgKzE4NjQsNDAgQEAKIHN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3QnNzWygweDI1MC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyB1MzIgYm54Ml9UUEFUX2IwNkZ3U2Jzc1soMHgzNC80KSArIDFdID0geyAweDAgfTsKIAotc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd1JlbGVhc2VNYWpvciA9IDB4MTsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndSZWxlYXNlTWlub3IgPSAweDA7Ci1zdGF0aWMgY29uc3QgaW50IGJueDJfVFhQX2IwNkZ3UmVsZWFzZUZpeCA9IDB4MDsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9UWFBfYjA2RndTdGFydEFkZHIgPSAweDA4MDAzNGIwOwotc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd1RleHRBZGRyID0gMHgwODAwMDAwMDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndUZXh0TGVuID0gMHg1NzQ4Owotc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd0RhdGFBZGRyID0gMHgwODAwNTc2MDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndEYXRhTGVuID0gMHgwOwotc3RhdGljIGNvbnN0IHUzMiBibngyX1RYUF9iMDZGd1JvZGF0YUFkZHIgPSAweDAwMDAwMDAwOwotc3RhdGljIGNvbnN0IGludCBibngyX1RYUF9iMDZGd1JvZGF0YUxlbiA9IDB4MDsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9UWFBfYjA2RndCc3NBZGRyID0gMHgwODAwNTdhMDsKLXN0YXRpYyBjb25zdCBpbnQgYm54Ml9UWFBfYjA2RndCc3NMZW4gPSAweDFjNDsKLXN0YXRpYyBjb25zdCB1MzIgYm54Ml9UWFBfYjA2RndTYnNzQWRkciA9IDB4MDgwMDU3NjA7Ci1zdGF0aWMgY29uc3QgaW50IGJueDJfVFhQX2IwNkZ3U2Jzc0xlbiA9IDB4Mzg7CitzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml90cGF0X2Z3XzA2ID0geworCS52ZXJfbWFqb3IJCQk9IDB4MSwKKwkudmVyX21pbm9yCQkJPSAweDAsCisJLnZlcl9maXgJCQk9IDB4MCwKKworCS5zdGFydF9hZGRyCQkJPSAweDA4MDAwODYwLAorCisJLnRleHRfYWRkcgkJCT0gMHgwODAwMDgwMCwKKwkudGV4dF9sZW4JCQk9IDB4MTIyYywKKwkudGV4dF9pbmRleAkJCT0gMHgwLAorCS5nel90ZXh0CQkJPSBibngyX1RQQVRfYjA2RndUZXh0LAorCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfVFBBVF9iMDZGd1RleHQpLAorCisJLmRhdGFfYWRkcgkJCT0gMHgwODAwMWE2MCwKKwkuZGF0YV9sZW4JCQk9IDB4MCwKKwkuZGF0YV9pbmRleAkJCT0gMHgwLAorCS5kYXRhCQkJCT0gYm54Ml9UUEFUX2IwNkZ3RGF0YSwKKworCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDFhNjAsCisJLnNic3NfbGVuCQkJPSAweDM0LAorCS5zYnNzX2luZGV4CQkJPSAweDAsCisJLnNic3MJCQkJPSBibngyX1RQQVRfYjA2RndTYnNzLAorCisJLmJzc19hZGRyCQkJPSAweDA4MDAxYWEwLAorCS5ic3NfbGVuCQkJPSAweDI1MCwKKwkuYnNzX2luZGV4CQkJPSAweDAsCisJLmJzcwkJCQk9IGJueDJfVFBBVF9iMDZGd0JzcywKKworCS5yb2RhdGFfYWRkcgkJCT0gMHgwMDAwMDAwMCwKKwkucm9kYXRhX2xlbgkJCT0gMHgwLAorCS5yb2RhdGFfaW5kZXgJCQk9IDB4MCwKKwkucm9kYXRhCQkJCT0gYm54Ml9UUEFUX2IwNkZ3Um9kYXRhLAorfTsKKwogc3RhdGljIHU4IGJueDJfVFhQX2IwNkZ3VGV4dFtdID0gewogCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4MjEsIDB4ZDMsIDB4NDEsIDB4NDQsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCiAJMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhlZCwgMHg1YywgMHg2ZCwgMHg2YywKQEAgLTE5NjQsMyArMjMxOSwzOCBAQAogc3RhdGljIHUzMiBibngyX1RYUF9iMDZGd1JvZGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIHUzMiBibngyX1RYUF9iMDZGd0Jzc1soMHgxYzQvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgdTMyIGJueDJfVFhQX2IwNkZ3U2Jzc1soMHgzOC80KSArIDFdID0geyAweDAgfTsKKworc3RhdGljIHN0cnVjdCBmd19pbmZvIGJueDJfdHhwX2Z3XzA2ID0geworCS52ZXJfbWFqb3IJCQk9IDB4MSwKKwkudmVyX21pbm9yCQkJPSAweDAsCisJLnZlcl9maXgJCQk9IDB4MCwKKworCS5zdGFydF9hZGRyCQkJPSAweDA4MDAzNGIwLAorCisJLnRleHRfYWRkcgkJCT0gMHgwODAwMDAwMCwKKwkudGV4dF9sZW4JCQk9IDB4NTc0OCwKKwkudGV4dF9pbmRleAkJCT0gMHgwLAorCS5nel90ZXh0CQkJPSBibngyX1RYUF9iMDZGd1RleHQsCisJLmd6X3RleHRfbGVuCQkJPSBzaXplb2YoYm54Ml9UWFBfYjA2RndUZXh0KSwKKworCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDU3NjAsCisJLmRhdGFfbGVuCQkJPSAweDAsCisJLmRhdGFfaW5kZXgJCQk9IDB4MCwKKwkuZGF0YQkJCQk9IGJueDJfVFhQX2IwNkZ3RGF0YSwKKworCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDU3NjAsCisJLnNic3NfbGVuCQkJPSAweDM4LAorCS5zYnNzX2luZGV4CQkJPSAweDAsCisJLnNic3MJCQkJPSBibngyX1RYUF9iMDZGd1Nic3MsCisKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDU3YTAsCisJLmJzc19sZW4JCQk9IDB4MWM0LAorCS5ic3NfaW5kZXgJCQk9IDB4MCwKKwkuYnNzCQkJCT0gYm54Ml9UWFBfYjA2RndCc3MsCisKKwkucm9kYXRhX2FkZHIJCQk9IDB4MDAwMDAwMDAsCisJLnJvZGF0YV9sZW4JCQk9IDB4MCwKKwkucm9kYXRhX2luZGV4CQkJPSAweDAsCisJLnJvZGF0YQkJCQk9IGJueDJfVFhQX2IwNkZ3Um9kYXRhLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Ml9mdzIuaCBiL2RyaXZlcnMvbmV0L2JueDJfZncyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwYzc2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2JueDJfZncyLmgKQEAgLTAsMCArMSw0MDg2IEBACisvKiBibngyX2Z3Mi5oOiBCcm9hZGNvbSBOWDIgbmV0d29yayBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBleGNlcHQgYXMgbm90ZWQgYmVsb3cuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA2IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KKworc3RhdGljIHU4IGJueDJfQ09NX2IwOUZ3VGV4dFtdID0geworCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4YWMsIDB4ZmIsIDB4MmYsIDB4NDUsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCisJMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhkYywgMHg1YiwgMHg2YiwgMHg3MCwKKwkweDFiLCAweGQ3LCAweDc1LCAweDNlLCAweGZiLCAweDAwLCAweDA5LCAweDkxLCAweDEwLCAweGI1LCAweGE0LCAweDYwLAorCTB4MWEsIDB4OTYsIDB4NjgsIDB4MDcsIDB4MjAsIDB4NTcsIDB4MjIsIDB4NmEsIDB4YjEsIDB4MjksIDB4NGMsIDB4MzMsCisJMHgxNiwgMHg5YiwgMHhjMiwgMHgxMiwgMHgwMiwgMHg1MCwgMHhhZSwgMHgyNiwgMHhjMywgMHgzYSwgMHg5NCwgMHhjZCwKKwkweGQ4LCAweDRhLCAweGFhLCAweGM5LCAweDMwLCAweDAwLCAweGE1LCAweGY0LCAweDYxLCAweGI3LCAweDkyLCAweGFiLAorCTB4YTksIDB4NWQsIDB4ZDcsIDB4YWEsIDB4MjEsIDB4OTIsIDB4NmEsIDB4ZjUsIDB4ODMsIDB4ZTUsIDB4MmEsIDB4MTYsCisJMHg0MywgMHhhOSwgMHhkMywgMHg3NCwgMHhjMiwgMHgxMiwgMHg1NiwgMHhhYywgMHg0ZSwgMHgzMSwgMHg4NSwgMHhmYywKKwkweGQ2LCAweDM4LCAweGIxLCAweGM5LCAweDRhLCAweDc2LCAweGViLCAweGY0LCAweGUxLCAweGE2LCAweDMzLCAweGNkLAorCTB4YTMsIDB4OWQsIDB4MzYsIDB4ZjYsIDB4YTgsIDB4M2YsIDB4ZWEsIDB4ZTksIDB4ZDMsIDB4MzMsIDB4NmUsIDB4YTcsCisJMHhlYSwgMHhkOCwgMHgwZSwgMHhmYSwgMHg3ZCwgMHg3NywgMHg3NywgMHg4MSwgMHgyNSwgMHg0OCwgMHhiZCwgMHhmYywKKwkweGM4LCAweDhmLCAweDcwLCAweDA2LCAweGIzLCAweDdiLCAweGVmLCAweGRlLCAweGJkLCAweGY3LCAweGRjLCAweGYzLAorCTB4ZjgsIDB4Y2UsIDB4NjMsIDB4MmYsIDB4ZmIsIDB4NDQsIDB4NWEsIDB4YzQsIDB4ZmIsIDB4NWIsIDB4OGIsIDB4NWYsCisJMHhmYywgMHhmZSwgMHg1ZiwgMHgyZCwgMHg3YywgMHg3YywgMHhmMCwgMHhlMywgMHhmZCwgMHgyMiwgMHhiNywgMHhkYywKKwkweGEyLCAweGI3LCAweDg2LCAweDc1LCAweGY2LCAweDFiLCAweGY4LCAweDQ1LCAweGYxLCAweGViLCAweGY3LCAweGVlLAorCTB4NTcsIDB4ZmIsIDB4YjMsIDB4ZjAsIDB4N2IsIDB4MTMsIDB4MGYsIDB4YzcsIDB4ZmUsIDB4NTUsIDB4NDQsIDB4YmIsCisJMHhjNCwgMHg5OCwgMHhlMCwgMHg1ZiwgMHhiNSwgMHg3YSwgMHhmOSwgMHhlNywgMHg1YywgMHgzOCwgMHg3ZSwgMHg4OSwKKwkweDY3LCAweDg2LCAweGJiLCAweDljLCAweGEyLCAweDk3LCAweDNmLCAweDA5LCAweGViLCAweDY5LCAweDM5LCAweDk0LAorCTB4YjUsIDB4MjUsIDB4NmMsIDB4YTQsIDB4ZGYsIDB4M2MsIDB4NTQsIDB4YjAsIDB4NDUsIDB4MzIsIDB4ZTUsIDB4MmQsCisJMHhmMSwgMHg5YywgMHhiYywgMHg1NywgMHgyZCwgMHg0NiwgMHg0ZCwgMHg2MSwgMHhmZiwgMHg4ZCwgMHhlOSwgMHg3NywKKwkweGJmLCAweGY2LCAweGUyLCAweGQ2LCAweGM0LCAweDViLCAweGYzLCAweDg2LCAweDg0LCAweGFkLCAweGY0LCAweDE5LAorCTB4YjEsIDB4MzYsIDB4NGIsIDB4YjgsIDB4MGIsIDB4ZWYsIDB4N2MsIDB4YjUsIDB4ZjcsIDB4M2QsIDB4OTEsIDB4MzYsCisJMHg3ZiwgMHhhZSwgMHgzNywgMHhhYiwgMHgyZiwgMHhmNiwgMHg0YSwgMHg3MSwgMHg0MywgMHgzYSwgMHgyYywgMHg3YSwKKwkweDdhLCAweGQzLCAweGY3LCAweGIzLCAweDg2LCAweDM1LCAweDY2LCAweGE0LCAweDJkLCAweDU5LCAweGFjLCAweGM4LAorCTB4YzgsIDB4ZGUsIDB4NjksIDB4MDksIDB4ODcsIDB4ZDMsIDB4NDcsIDB4OWIsIDB4OWIsIDB4MzcsIDB4NDksIDB4ZDgsCisJMHg0YywgMHg4ZiwgMHgxZCwgMHhmYSwgMHg2ZCwgMHhmYiwgMHhkMSwgMHhhYSwgMHg2ZSwgMHhkYiwgMHhjOSwgMHgwNSwKKwkweDg5LCAweDBjLCAweDllLCAweDFhLCAweGMwLCAweGYzLCAweDcyLCAweDIyLCAweDI5LCAweGIyLCAweDU1LCAweDc0LAorCTB4YmIsIDB4MTgsIDB4MzEsIDB4ZWMsIDB4YjAsIDB4NjQsIDB4MmIsIDB4YjYsIDB4ZTQsIDB4MmEsIDB4MjIsIDB4N2YsCisJMHg1ZSwgMHhkNiwgMHhlNCwgMHg5NCwgMHhkZCwgMHgyOSwgMHgwYiwgMHg3ZCwgMHhlZiwgMHg1NiwgMHgzMywgMHhhMCwKKwkweGU1LCAweGNmLCAweGVjLCAweGIxLCAweDQzLCAweDUzLCAweDM2LCAweGU5LCAweDlkLCAweDZkLCAweDc2LCAweGU5LAorCTB4OWQsIDB4NmEsIDB4MmEsIDB4ZDgsIDB4YTYsIDB4NGMsIDB4OTQsIDB4ZDksIDB4MzcsIDB4YTIsIDB4YjMsIDB4MmYsCisJMHg5NCwgMHg3ZSwgMHg2OCwgMHhjZCwgMHgyOSwgMHgzYiwgMHhlMiwgMHhmNSwgMHhlZCwgMHhkYywgMHg5ZSwgMHhjNSwKKwkweDdjLCAweDkzLCAweDY1LCAweDhlLCAweDNkLCAweDkzLCAweDJhLCAweGQ4LCAweDUxLCAweGFmLCAweDNmLCAweDc5LAorCTB4NWIsIDB4ZDYsIDB4OGUsIDB4YTEsIDB4YmYsIDB4Y2IsIDB4N2IsIDB4NzYsIDB4ZjIsIDB4YmUsIDB4ODIsIDB4NmQsCisJMHg3YiwgMHhjZiwgMHhiZSwgMHg4YSwgMHhiOSwgMHg5MywgMHg1ZSwgMHhmZiwgMHg3ZCwgMHhkYiwgMHgwYSwgMHg3NiwKKwkweDlmLCAweGQ3LCAweDNmLCAweGJkLCAweDJkLCAweDZiLCAweGE3LCAweGJjLCAweGZlLCAweGU0LCAweGVlLCAweDgyLAorCTB4M2QsIDB4ZTAsIDB4ZjUsIDB4OWYsIDB4YmQsIDB4M2QsIDB4NmIsIDB4MGYsIDB4N2EsIDB4ZmQsIDB4MGYsIDB4NmQsCisJMHgyZCwgMHhkOCwgMHg2OSwgMHhmNCwgMHgxZiwgMHg2ZCwgMHhkNiwgMHgzNywgMHg1OSwgMHg3MiwgMHhhNCwgMHgxYywKKwkweGM3LCAweDJmLCAweDgzLCAweDY3LCAweDQzLCAweGU4LCAweGRiLCAweDg5LCAweGRmLCAweDMwLCAweDdlLCAweGJmLAorCTB4YjgsIDB4NGUsIDB4ZGEsIDB4NDYsIDB4NzAsIDB4ZmQsIDB4YzYsIDB4NDYsIDB4OTcsIDB4NzcsIDB4ZTAsIDB4OTEsCisJMHgxMywgMHg5NiwgMHgzNywgMHg4YywgMHg5OCwgMHhiYywgMHhkOCwgMHhmYiwgMHgwNiwgMHg3OCwgMHg2OCwgMHhjOSwKKwkweDk5LCAweDhhLCAweDY4LCAweDIzLCAweGJkLCAweDMxLCAweGYwLCAweDJlLCAweDJhLCAweDRmLCAweDU2LCAweDVhLAorCTB4YzUsIDB4NzgsIDB4Y2MsIDB4MDAsIDB4NmYsIDB4M2UsIDB4MmYsIDB4ZjksIDB4NjgsIDB4NTgsIDB4ZGEsIDB4ZTcsCisJMHgzNCwgMHhlOSwgMHhlZSwgMHgwZiwgMHg0YiwgMHhjNiwgMHg1MiwgMHg3MiwgMHgxMywgMHg3ZCwgMHgyNiwgMHgyYSwKKwkweGM2LCAweDVjLCAweDY2LCAweGJkLCAweDJlLCAweDliLCAweGFjLCAweDljLCAweDE0LCAweGMxLCAweGJiLCAweGVmLAorCTB4NTEsIDB4MjcsIDB4ZjEsIDB4MmMsIDB4MmUsIDB4YjksIDB4ZTksIDB4OWIsIDB4NjUsIDB4Y2MsIDB4MjIsIDB4NWQsCisJMHgzYiwgMHg2ZiwgMHg3NCwgMHhkNywgMHgwYSwgMHg2YiwgMHhkOSwgMHgxMywgMHgyMywgMHg3MiwgMHhjNCwgMHg4OSwKKwkweDY4LCAweGI5LCAweDEzLCAweGRiLCAweDI0LCAweDliLCAweDkyLCAweDI4LCAweGRlLCAweDhiLCAweGU1LCAweGYxLAorCTB4YTQsIDB4NTQsIDB4MWUsIDB4OTEsIDB4MjksIDB4NDcsIDB4YjQsIDB4YWMsIDB4NDMsIDB4N2UsIDB4NzYsIDB4ZTIsCisJMHg3OSwgMHg5YiwgMHgxYSwgMHg4YiwgMHhiZSwgMHgyZSwgMHg0MywgMHhjZCwgMHgxZCwgMHg0NiwgMHhiZiwgMHg4NSwKKwkweGZlLCAweDBlLCAweDZkLCAweDQ4LCAweGNkLCAweGExLCAweGZhLCAweGUzLCAweDkzLCAweDEyLCAweDkxLCAweGM3LAorCTB4Y2IsIDB4NTEsIDB4NmYsIDB4NmMsIDB4YjUsIDB4OWEsIDB4NGQsIDB4NTksIDB4MTgsIDB4MzcsIDB4MjIsIDB4OTMsCisJMHg0ZSwgMHg1NCwgMHhjNiwgMHg3MCwgMHg5ZCwgMHg3MCwgMHhiOCwgMHg3ZSwgMHgwYywgMHgzYSwgMHhmNSwgMHhkYSwKKwkweGExLCAweGZjLCAweGFjLCAweDlhLCAweDJmLCAweDZlLCAweGE0LCAweDM5LCAweDVmLCAweDE3LCAweGM2LCAweDRkLAorCTB4ODAsIDB4MmUsIDB4NGQsIDB4NGMsIDB4MjUsIDB4Y2IsIDB4OGMsIDB4ZTQsIDB4YTcsIDB4MzUsIDB4ZTgsIDB4MWIsCisJMHhhZSwgMHg4YSwgMHhhZiwgMHg0MywgMHhhMCwgMHhkZiwgMHgxNCwgMHhiYiwgMHg1ZiwgMHg5MywgMHgwMiwgMHg2NCwKKwkweDU1LCAweGI0LCAweGQwLCAweDJlLCAweDlmLCAweGQ1LCAweGIzLCAweDRlLCAweGIzLCAweGU0LCAweGNjLCAweGI4LAorCTB4MTgsIDB4MzMsIDB4NGEsIDB4OTcsIDB4NjQsIDB4MTIsIDB4ZWYsIDB4ZTgsIDB4MzYsIDB4YzcsIDB4NWMsIDB4YzQsCisJMHhiZSwgMHhjNywgMHg5NCwgMHgxYywgMHg5YSwgMHhkMiwgMHg0NSwgMHgzZCwgMHg1NywgMHhlOSwgMHgxNCwgMHg3ZCwKKwkweDZlLCAweDhmLCAweGJjLCAweDNjLCAweDJkLCAweDk2LCAweDkxLCAweDdlLCAweGI3LCAweDlhLCAweGI1LCAweGE3LAorCTB4ZjQsIDB4ZWMsIDB4MTMsIDB4YTYsIDB4ODQsIDB4NjYsIDB4MzQsIDB4OTksIDB4YjIsIDB4MTMsIDB4YjAsIDB4ODAsCisJMHhhMywgMHhmYSwgMHg4ZSwgMHhjYSwgMHg1OSwgMHg4YywgMHhlMywgMHg3YiwgMHgxOCwgMHg1NywgMHhkNiwgMHhjMSwKKwkweDU3LCAweGRlLCAweDZmLCAweGIxLCAweDc0LCAweGE1LCAweGNmLCAweDFjLCAweDAzLCAweDE5LCAweDYwLCAweDFmLAorCTB4NGYsIDB4M2EsIDB4OTAsIDB4ODksIDB4OTIsIDB4NTEsIDB4MWMsIDB4MzIsIDB4N2EsIDB4MTUsIDB4MzIsIDB4MWEsCisJMHg4MCwgMHg2YywgMHg1MiwgMHhmMiwgMHg1MiwgMHhhNSwgMHg0ZiwgMHg5ZSwgMHhhZiwgMHgyNCwgMHhlNSwgMHgzOSwKKwkweGU4LCAweGViLCAweGIzLCAweDk1LCAweGI4LCAweDNjLCAweDUzLCAweGU5LCAweDkyLCAweGE3LCAweDJiLCAweDMxLAorCTB4NzksIDB4NGEsIDB4YzksIDB4MmQsIDB4MDcsIDB4ZGIsIDB4NTAsIDB4YjIsIDB4MGMsIDB4NWYsIDB4OWYsIDB4OTYsCisJMHg3MCwgMHgyNywgMHhlNCwgMHhkMSwgMHgwMSwgMHhmZCwgMHg2OSwgMHg4NywgMHg2ZSwgMHg3ZSwgMHhhNSwgMHgzNywKKwkweDJjLCAweGIzLCAweGJkLCAweDkyLCAweDU5LCAweDhmLCAweGZlLCAweDliLCAweGQyLCAweGE2LCAweGUyLCAweDkxLAorCTB4ODksIDB4ZTcsIDB4OTMsIDB4ZDMsIDB4MjEsIDB4YzksIDB4NTksIDB4OGYsIDB4Y2IsIDB4ODUsIDB4MTksIDB4NTMsCisJMHgyNiwgMHgyYiwgMHhkYiwgMHg2ZiwgMHg3MiwgMHg2NSwgMHhjNiwgMHhmNiwgMHhiYywgMHg5YywgMHg5ZiwgMHg2OSwKKwkweGMyLCAweGIzLCAweDc5LCAweDc5LCAweDc5LCAweGIzLCAweDJlLCAweDEzLCAweGIzLCAweDZmLCAweDg5LCAweDA5LAorCTB4MWUsIDB4MGUsIDB4MjksIDB4NzksIDB4M2YsIDB4MmUsIDB4ZmYsIDB4ZmMsIDB4MjcsIDB4MjIsIDB4MjMsIDB4ZTAsCisJMHg4YiwgMHhkZSwgMHhmZiwgMHhlZiwgMHhkNSwgMHg4YywgMHgwNSwgMHg3ZSwgMHhmNCwgMHhmNywgMHg0MSwgMHgzZiwKKwkweDc0LCAweDVjLCAweDI5LCAweGNmLCAweDM4LCAweGM2LCAweDk4LCAweDVhLCAweGNlLCAweDM5LCAweDBkLCAweDliLAorCTB4NmEsIDB4ZDUsIDB4YjIsIDB4YzcsIDB4NDUsIDB4MGEsIDB4YzcsIDB4YWIsIDB4NTIsIDB4NDgsIDB4ODUsIDB4ZTQsCisJMHgwMSwgMHhhYiwgMHgyYSwgMHg0MywgMHhhOSwgMHgyNiwgMHgzOSwgMHg2MCwgMHg3NSwgMHhjYSwgMHg0NCwgMHhkZiwKKwkweGNmLCAweDY4LCAweDNlLCAweDk2LCAweDdkLCAweGE1LCAweDkyLCAweGM2LCAweDNkLCAweGZiLCAweDQ0LCAweDY2LAorCTB4ZDUsIDB4YmQsIDB4ZGIsIDB4NWYsIDB4YWMsIDB4ODQsIDB4MjQsIDB4MTMsIDB4MmQsIDB4YzYsIDB4NGMsIDB4YjksCisJMHhhMCwgMHhiOSwgMHhiNCwgMHhlZCwgMHhmNCwgMHg5ZiwgMHg0MSwgMHg1ZSwgMHg2MywgMHhjMCwgMHg5MCwgMHg4NCwKKwkweGQyLCAweGE1LCAweGZjLCAweGY0LCAweDlhLCAweDhiLCAweDE5LCAweGQ1LCAweDFkLCAweDUyLCAweDdhLCAweDZhLAorCTB4YTQsIDB4NGQsIDB4ZDIsIDB4MzEsIDB4YTYsIDB4YTUsIDB4YTMsIDB4ZDIsIDB4YWQsIDB4ZWMsIDB4NjQsIDB4MDAsCisJMHg2MywgMHgwNiwgMHhiNSwgMHhiYiwgMHgyYiwgMHg5NCwgMHgzNywgMHhlZSwgMHhjYiwgMHhhNCwgMHg3NSwgMHgwMywKKwkweGM2LCAweDlhLCAweGI4LCAweDY2LCAweDNjLCAweDlhLCAweDgzLCAweDc0LCAweDcyLCAweDJlLCAweGQyLCAweGM5LAorCTB4ZWIsIDB4ZGUsIDB4MDAsIDB4OWQsIDB4ZmIsIDB4NmEsIDB4ZjcsIDB4YjMsIDB4ODEsIDB4ZmIsIDB4NjIsIDB4ZTUsCisJMHhkNywgMHg1YiwgMHg1YywgMHhmYSwgMHhjOCwgMHhkNywgMHg0MSwgMHg5OSwgMHg5OCwgMHg3ZSwgMHhjOCwgMHg1YiwKKwkweDBiLCAweGY3LCAweDY1LCAweGFlLCAweGIxLCAweDAwLCAweDNlLCAweGE5LCAweDkxLCAweDU3LCAweDU4LCAweGFiLAorCTB4MTgsIDB4NTgsIDB4ZWIsIDB4NzAsIDB4NjAsIDB4YWQsIDB4YzMsIDB4ODEsIDB4YjUsIDB4OGEsIDB4ZTAsIDB4YWQsCisJMHhhYywgMHhkMywgMHg4MSwgMHgzMywgMHg3OSwgMHhjMiwgMHhiYywgMHgxYywgMHhjNSwgMHg5YywgMHg2ZiwgMHg4OCwKKwkweDkxLCAweGE2LCAweDJkLCAweGY4LCAweDM2LCAweGY5LCAweDA3LCAweDE4LCAweDlmLCAweDk2LCAweDczLCAweDBlLAorCTB4NzgsIDB4NzMsIDB4M2MsIDB4MjQsIDB4NzcsIDB4YTksIDB4NzEsIDB4ZmYsIDB4YjEsIDB4YzYsIDB4YTUsIDB4MzEsCisJMHhmOCwgMHgyYywgMHgyYywgMHhiYiwgMHhhMiwgMHhiYywgMHhmNywgMHg5ZiwgMHg5OSwgMHhlMCwgMHgzNywgMHhkYiwKKwkweDkzLCAweDM3LCAweGI4LCAweDZkLCAweGRlLCAweDlmLCAweGY1LCAweGY2LCAweGQyLCAweGVlLCAweGJlLCAweDU3LAorCTB4NzksIDB4NTMsIDB4NjEsIDB4YzYsIDB4NjIsIDB4ODUsIDB4YjYsIDB4MmQsIDB4MjksIDB4YzMsIDB4OTYsIDB4ZmQsCisJMHg0MywgMHhhOSwgMHg0ZSwgMHg5OSwgMHhiNCwgMHhiNCwgMHhkNCwgMHg0NCwgMHhiMiwgMHg5OSwgMHhmYywgMHhjZiwKKwkweGU4LCAweDc2LCAweDJiLCAweGVjLCAweDQ3LCAweGUyLCAweDNhLCAweDcxLCAweDUxLCAweGVkLCAweGViLCAweDViLAorCTB4MWUsIDB4ZmQsIDB4MTYsIDB4ZGIsIDB4MjMsIDB4YmEsIDB4ZGQsIDB4ZDEsIDB4ZDAsIDB4NGYsIDB4ZmQsIDB4ZmYsCisJMHg0YiwgMHhkYywgMHhkMywgMHgwNiwgMHhmYSwgMHg3NSwgMHg3NywgMHhlZCwgMHhiZiwgMHg0MiwgMHg5YiwgMHg1OCwKKwkweDE1LCAweGYxLCAweGRhLCAweGZlLCAweGYzLCAweGZmLCAweDMyLCAweDk2LCAweGI3LCAweDhmLCAweDZkLCAweDVjLAorCTB4ZGUsIDB4ZjYsIDB4NmQsIDB4MjksIDB4ODgsIDB4NzMsIDB4ZGMsIDB4MmIsIDB4NmMsIDB4ZDgsIDB4YTYsIDB4ZmUsCisJMHg4NSwgMHg0MCwgMHg2YiwgMHgwYSwgMHgzNiwgMHhkYywgMHhlYywgMHhkMSwgMHhmMCwgMHhiYSwgMHg0NywgMHgwMywKKwkweDY4LCAweGM1LCAweGI4LCAweDg5LCAweDBhLCAweGRmLCAweDUxLCAweGEyLCAweDZjLCAweDY4LCAweDkzLCAweGY3LAorCTB4ZmUsIDB4ZmQsIDB4NWEsIDB4ZjUsIDB4ZmMsIDB4MGQsIDB4ODMsIDB4ZWIsIDB4ZjgsIDB4NTcsIDB4ZDEsIDB4ODYsCisJMHg2MCwgMHg2NywgMHg5MywgMHhiMywgMHhhNiwgMHhlNCwgMHg1MywgMHgzMSwgMHg2NSwgMHgwZiwgMHhmOSwgMHg1NCwKKwkweDFkLCAweDNmLCAweDI2LCAweGE3LCAweDFiLCAweGYxLCAweDgzLCAweGVmLCAweDExLCAweDNmLCAweDVjLCAweGVjLAorCTB4OTgsIDB4OTgsIDB4MjUsIDB4OGUsIDB4ZDQsIDB4NzEsIDB4ZTMsIDB4YzgsIDB4YjQsIDB4OGYsIDB4MjUsIDB4OWMsCisJMHg5YiwgMHgxOCwgMHhlMiwgMHhlMywgMHgwNywgMHhkZiwgMHgyMywgMHg3ZSwgMHgxOCwgMHg5MCwgMHgxNSwgMHhlNywKKwkweGY0LCAweGQ3LCAweDlmLCAweDZhLCAweDk4LCAweDdiLCAweDRhLCAweDYxLCAweDkzLCAweDhiLCAweGNiLCAweDZmLAorCTB4MDYsIDB4NzAsIDB4YmUsIDB4MGIsIDB4MTgsIDB4MWQsIDB4ODUsIDB4ZmMsIDB4N2MsIDB4OGMsIDB4MjYsIDB4NzYsCisJMHhjNiwgMHg4MCwgMHhlYiwgMHhlMCwgMHg5MSwgMHhjMiwgMHhlNCwgMHgwOCwgMHg3MCwgMHhjYywgMHhmNCwgMHgzMCwKKwkweDM1LCAweGVjLCAweDYxLCAweDZhLCAweDA0LCAweDc4LCAweGNhLCAweGI2LCAweGU1LCAweGI1LCAweGEzLCAweDVlLAorCTB4M2IsIDB4ODYsIDB4MzYsIDB4ZmMsIDB4ZWYsIDB4MWMsIDB4NmQsIDB4ZWMsIDB4YjUsIDB4NDMsIDB4ZTMsIDB4YjMsCisJMHgwYSwgMHhhNywgMHg4OSwgMHhmMSwgMHhjMCwgMHgwYSwgMHhlMiwgMHgyYywgMHhmMSwgMHhiNiwgMHg0YiwgMHgxNiwKKwkweGNhLCAweDU4LCAweGFmLCAweDg2LCAweDY5LCAweDk0LCAweDQ3LCAweDkwLCAweDFlLCAweGQyLCAweGIyLCAweDQ2LAorCTB4ZjQsIDB4YzcsIDB4ZGMsIDB4ZmQsIDB4ZTgsIDB4ZTksIDB4Y2YsIDB4ZWIsIDB4ZDIsIDB4YzIsIDB4N2QsIDB4OTAsCisJMHhlZSwgMHgxYiwgMHg0MSwgMHgyYiwgMHhmNywgMHhmNiwgMHhhMywgMHhhNCwgMHg5NSwgMHhlYiwgMHgzNSwgMHhkMiwKKwkweDdiLCAweDFhLCAweGY0LCAweDY2LCAweDgwLCAweGI3LCAweGEyLCAweDhkLCAweGY2LCAweDhlLCAweDgyLCAweGRlLAorCTB4MTEsIDB4NjAsIDB4ZjEsIDB4MzAsIDB4YjAsIDB4NzgsIDB4MjcsIDB4YjAsIDB4NzgsIDB4MDgsIDB4NTgsIDB4OWMsCisJMHgwNiwgMHgwZSwgMHgwZiwgMHgwMiwgMHg4NywgMHgwNywgMHg4MCwgMHhjMywgMHgyOSwgMHhlYywgMHgyYiwgMHgyYSwKKwkweGYzLCAweGMwLCAweGU1LCAweDc5LCAweGUwLCAweGYzLCAweDNjLCAweGU0LCAweDM1LCAweDMxLCAweDI3LCAweGRhLAorCTB4MTcsIDB4YjAsIDB4ZmUsIDB4NjMsIDB4MzMsIDB4ODksIDB4ZDMsIDB4ZDAsIDB4Y2QsIDB4NTgsIDB4NTEsIDB4ODcsCisJMHgzZCwgMHhhNSwgMHgwNiwgMHhhMSwgMHgyMywgMHg0OSwgMHgyOSwgMHg1NSwgMHg0NiwgMHhhNSwgMHg0MCwgMHgzZiwKKwkweGI2LCAweGI5LCAweDA3LCAweGI2LCAweDBiLCAweGZiLCAweDg5LCAweGY5LCAweDcxLCAweGQzLCAweDVhLCAweGVmLAorCTB4ZmEsIDB4ZjcsIDB4MjIsIDB4ZjYsIDB4MWYsIDB4ODMsIDB4MjcsIDB4ODksIDB4YjgsIDB4YzgsIDB4YjAsIDB4ZTQsCisJMHg5ZCwgMHgxZSwgMHgyYiwgMHhhYiwgMHgyNywgMHgzMSwgMHg4ZSwgMHhlZCwgMHhiOCwgMHhiNiwgMHhmNywgMHg3OCwKKwkweDQyLCAweDFiLCAweDNmLCAweGNlLCAweDNkLCAweDRkLCAweDAzLCAweGUzLCAweGFhLCAweDMyLCAweDk1LCAweGEyLAorCTB4YWQsIDB4NTYsIDB4ZTUsIDB4NTQsIDB4MmEsIDB4MzEsIDB4NTgsIDB4OTQsIDB4NTYsIDB4MzksIDB4MTIsIDB4OWQsCisJMHg1NiwgMHhmZSwgMHhjZCwgMHg0YywgMHgxZiwgMHg1MywgMHhmYSwgMHg1MSwgMHhiMCwgMHg3MSwgMHgyZCwgMHg3NywKKwkweDZiLCAweGY5LCAweGUzLCAweGY0LCAweDNiLCAweDNkLCAweGY4LCAweDg1LCAweDQwLCAweDBiLCAweGU3LCAweDM3LAorCTB4NjUsIDB4NjgsIDB4NDAsIDB4YjQsIDB4N2QsIDB4YmQsIDB4NDUsIDB4YTAsIDB4NjIsIDB4YzIsIDB4M2EsIDB4ODcsCisJMHg5NSwgMHg3MywgMHhkMywgMHgzZCwgMHhiMSwgMHg5YywgMHg2ZSwgMHhjYSwgMHg5OCwgMHhhOSwgMHhjOSwgMHgwNCwKKwkweGVjLCAweDY1LCAweDI4LCAweGY1LCAweDdmLCAweGQ1LCAweDIzLCAweDUxLCAweDNlLCAweDZmLCAweDk2LCAweGRmLAorCTB4NTEsIDB4MzgsIDB4OGIsIDB4YjUsIDB4NGIsIDB4YjMsIDB4NTgsIDB4MzcsIDB4MDQsIDB4ZmUsIDB4NzEsIDB4NWQsCisJMHhjZSwgMHg4MywgMHgzNiwgMHgzMCwgMHhjZiwgMHhiNCwgMHgxMywgMHhhNywgMHg4YiwgMHhiMiwgMHgxZCwgMHg3NiwKKwkweGI3LCAweDRlLCAweGIyLCAweDdkLCAweDRkLCAweDkyLCAweDE5LCAweDg5LCAweGNiLCAweGM0LCAweGNjLCAweDc2LAorCTB4ZTAsIDB4MWUsIDB4NjQsIDB4NjAsIDB4YjcsIDB4NDgsIDB4N2UsIDB4MzQsIDB4MmUsIDB4NWYsIDB4OWUsIDB4NjEsCisJMHg1ZiwgMHgwNiwgMHhmYiwgMHg0ZiwgMHgxYywgMHhjZCwgMHgwOCwgMHhmNywgMHgxZiwgMHg1MiwgMHhmYiwgMHg4YSwKKwkweGViLCAweDE5LCAweDM5LCAweGUwLCAweGJjLCAweGE0LCAweGJiLCAweDc2LCAweGU5LCAweGI2LCAweGY3LCAweDQyLAorCTB4MWUsIDB4YTcsIDB4YzAsIDB4ZWYsIDB4YmMsIDB4NjMsIDB4Y2IsIDB4MDIsIDB4ZmMsIDB4NGEsIDB4ZWUsIDB4MzgsCisJMHg3MCwgMHhkNSwgMHg2ZSwgMHgwMywgMHgwNiwgMHgyNiwgMHhjZSwgMHhkMiwgMHgzZSwgMHgwYywgMHhjNCwgMHg1YSwKKwkweDI1LCAweGM1LCAweGViLCAweDJlLCAweDM5LCAweDNlLCAweGEzLCAweGNiLCAweGIzLCAweGI3LCAweGM1LCAweGQxLAorCTB4MDYsIDB4ZDYsIDB4YTYsIDB4MTIsIDB4NjcsIDB4YzYsIDB4ZjQsIDB4MmUsIDB4YjksIDB4YjUsIDB4MjMsIDB4ODYsCisJMHhmNywgMHg1MiwgMHg1YSwgMHhkZSwgMHhmOSwgMHgzNywgMHhmMiwgMHhmMiwgMHg2NCwgMHg1YywgMHhlNywgMHg1OCwKKwkweDVkLCAweDcyLCAweDI5LCAweDAzLCAweDNhLCAweDU2LCAweGM0LCAweGY4LCAweDdmLCAweDQwLCAweDdmLCAweDk3LAorCTB4Y2MsIDB4MjEsIDB4YmUsIDB4OTksIDB4MDMsIDB4NGQsIDB4ZDksIDB4MTQsIDB4YjEsIDB4MzAsIDB4NzEsIDB4NzIsCisJMHg0OSwgMHgwNywgMHg2NiwgMHhjZCwgMHg0MSwgMHgzNywgMHg0NywgMHgxMSwgMHgzZiwgMHhjYywgMHhmYywgMHgzNywKKwkweGM2LCAweGM0LCAweDIxLCAweGQzLCAweDFlLCAweDZiLCAweDAyLCAweGY4LCAweDkyLCAweGU5LCAweGUyLCAweDNkLAorCTB4ZTcsIDB4YjQsIDB4ZTUsIDB4OTQsIDB4NDMsIDB4MWQsIDB4OGEsIDB4Y2IsIDB4ZTMsIDB4MTUsIDB4YmUsIDB4ZDcsCisJMHg3MywgMHhmNiwgMHg2OSwgMHhiMSwgMHhlNSwgMHg0MSwgMHhlNywgMHg3ZiwgMHgzMCwgMHhmZSwgMHgxZCwgMHhjNCwKKwkweDllLCAweDk2LCAweDk0LCAweDIwLCAweGI3LCAweDAyLCAweDc4LCAweDk5LCAweDg5LCAweGI5LCAweGVkLCAweDg5LAorCTB4YjksIDB4YzQsIDB4ZDksIDB4MGIsIDB4M2EsIDB4ZWYsIDB4ZWQsIDB4ZTIsIDB4ODIsIDB4N2UsIDB4YjMsIDB4NDgsCisJMHgwNywgMHhmOSwgMHg5OSwgMHgwMiwgMHgyZiwgMHg2ZCwgMHg0YiwgMHhkNywgMHgzNywgMHg3YiwgMHhmMSwgMHgxNiwKKwkweDZkLCAweGMwLCAweDA2LCAweDdkLCAweGE2LCAweDJjLCAweGY0LCAweDA3LCAweDZkLCAweDgwLCAweDdlLCAweGQ2LAorCTB4YjcsIDB4ODEsIDB4NDQsIDB4NmMsIDB4NDksIDB4ZDcsIDB4ZjEsIDB4ZGMsIDB4OTQsIDB4NjMsIDB4YWEsIDB4YWQsCisJMHg4MSwgMHhkNiwgMHg0NCwgMHg4YywgMHhmYiwgMHg5YiwgMHgyYywgMHgyNywgMHhlNSwgMHg3MSwgMHg4NywgMHhlMywKKwkweGMxLCAweGU3LCAweGU5LCAweDg4LCAweDM3LCAweDFlLCAweGYxLCAweDhlLCAweGMzLCAweDk4LCAweDI5LCAweDA5LAorCTB4OWEsIDB4NWQsIDB4YmIsIDB4NTgsIDB4OTgsIDB4OGUsIDB4YWEsIDB4NjcsIDB4NDcsIDB4MWMsIDB4MzcsIDB4MzYsCisJMHhkMiwgMHgxMSwgMHgzZiwgMHhjZCwgMHgyMywgMHg3ZSwgMHhjYSwgMHgyOSwgMHgxYiwgMHhiMSwgMHgzMiwgMHg4OCwKKwkweGFmLCAweGUxLCAweDY3LCAweDVkLCAweGZiLCAweDI4LCAweDk1LCAweDQ5LCAweGNiLCAweDNkLCAweGEwLCAweDJmLAorCTB4NTEsIDB4MDQsIDB4MzEsIDB4YzcsIDB4NzQsIDB4YjgsIDB4ZWIsIDB4ZWMsIDB4ODAsIDB4MTQsIDB4MTksIDB4NjMsCisJMHg5ZCwgMHgzMywgMHgxZSwgMHg5MSwgMHhiMSwgMHgxMiwgMHhmZCwgMHgxYiwgMHg3ZSwgMHg4ZSwgMHg2ZCwgMHgzMSwKKwkweGE2LCAweGNmLCAweDI4LCAweGRmLCAweGQzLCAweDAzLCAweDNkLCAweDgwLCAweDVmLCAweDRhLCAweGI1LCAweDhiLAorCTB4ZWIsIDB4MDcsIDB4ZjcsIDB4NDAsIDB4OWUsIDB4YzMsIDB4OTAsIDB4N2IsIDB4NWEsIDB4YzYsIDB4NGYsIDB4OGMsCisJMHg1MywgMHhhNywgMHg5MywgMHgyNSwgMHg0OSwgMHgyNCwgMHg4ZiwgMHhjOCwgMHgxNiwgMHg2YiwgMHgwMSwgMHhiZSwKKwkweDMwLCAweDMzLCAweDVhLCAweGRkLCAweGFlLCAweGE3LCAweGY5LCAweGNlLCAweGEzLCAweDc4LCAweDA3LCAweGQ3LAorCTB4ZDIsIDB4YjgsIDB4M2MsIDB4NTAsIDB4NjEsIDB4ZGYsIDB4OWQsIDB4ODYsIDB4YjQsIDB4YzAsIDB4NTYsIDB4MDYsCisJMHhmNiwgMHg3OCwgMHg3NiwgMHg4MCwgMHhmOSwgMHg0YywgMHg3ZiwgMHhiZSwgMHg3MSwgMHg2ZiwgMHgzZSwgMHg4ZSwKKwkweGUzLCAweDE4LCAweGJlLCAweDUzLCAweDlmLCAweDc3LCAweDA3LCAweDdkLCAweDFiLCAweGIwLCAweDY0LCAweDg3LAorCTB4NWUsIDB4ZGQsIDB4MWUsIDB4YzIsIDB4ZjMsIDB4NTMsIDB4MDMsIDB4YmMsIDB4YzcsIDB4M2MsIDB4ZjAsIDB4NmQsCisJMHg5NiwgMHgzZCwgMHg4YywgMHhiMSwgMHhhMywgMHg5OCwgMHg3MywgMHg4ZCwgMHg2NCwgMHgzYiwgMHg3ZCwgMHg3YSwKKwkweGE5LCAweDAzLCAweDhjLCAweDNmLCAweGQ4LCAweDhlLCAweGFlLCAweDc3LCAweDc5LCAweGZmLCAweDI1LCAweGMzLAorCTB4ZDUsIDB4YzksIDB4MTEsIDB4YjQsIDB4NjksIDB4N2YsIDB4MDcsIDB4MjUsIDB4ZTcsIDB4MjQsIDB4YjAsIDB4NGYsCisJMHhmMCwgMHhiNiwgMHgzMiwgMHhlMSwgMHhlZCwgMHgxMSwgMHhmYywgMHgxZiwgMHgzOSwgMHgwYywgMHgzZSwgMHg0OCwKKwkweGQxLCAweGU1LCAweDBkLCAweGY5LCAweDQyLCAweDllLCAweGZjLCAweDE2LCAweDc0LCAweGZmLCAweDYxLCAweDhjLAorCTB4ODEsIDB4N2YsIDB4NTAsIDB4M2MsIDB4NTgsIDB4ZWEsIDB4NzAsIDB4NjMsIDB4ZDEsIDB4NDQsIDB4MzEsIDB4YzMsCisJMHhmYywgMHhhOSwgMHg4MywgMHg5OCwgMHgwNywgMHhmYywgMHhhOSwgMHg0MCwgMHhiMSwgMHgzMCwgMHhmNywgMHg5MiwKKwkweGJlLCAweDg2LCAweGY0LCAweGM2LCAweDk3LCAweDBjLCAweDgzLCAweGVkLCAweGU0LCAweDEyLCAweDc0LCAweGI4LAorCTB4MDQsIDB4ZjksIDB4NjQsIDB4ZmIsIDB4NjgsIDB4YjMsIDB4MzYsIDB4ZTQsIDB4MzEsIDB4NjMsIDB4NTAsIDB4NWYsCisJMHg0YiwgMHg4OCwgMHgwNSwgMHhmMywgMHhjZSwgMHgxNiwgMHhlYiwgMHg1ZSwgMHhmMiwgMHhjZCwgMHhiMiwgMHhlNCwKKwkweDY5LCAweDI3LCAweDg4LCAweDFkLCAweDNiLCAweDMwLCAweDk0LCAweDdhLCAweDE4LCAweDg1LCAweDFlLCAweDk4LAorCTB4ZjAsIDB4YzksIDB4MzEsIDB4YzgsIDB4ZmMsIDB4YzUsIDB4MGUsIDB4NzcsIDB4MmYsIDB4YmMsIDB4MzcsIDB4NjUsCisJMHhkZSwgMHhjMiwgMHg5YSwgMHhjZSwgMHhlZiwgMHhhZiwgMHg3MywgMHhmYiwgMHg3OCwgMHhjZiwgMHhiOCwgMHhjOCwKKwkweDk3LCAweGFiLCAweDRmLCAweDNiLCAweGU1LCAweGRiLCAweDI4LCAweGQzLCAweDQzLCAweGQ4LCAweDBiLCAweGZiLAorCTB4NzEsIDB4MmQsIDB4MWQsIDB4OTQsIDB4NzEsIDB4ZDAsIDB4NTYsIDB4MTgsIDB4ZDgsIDB4MTQsIDB4M2IsIDB4OGYsCisJMHhmMSwgMHgzOSwgMHhlMCwgMHg3OSwgMHhkMSwgMHhlNCwgMHhiMywgMHg4YiwgMHg1YSwgMHhmZCwgMHgxZCwgMHhjNCwKKwkweDVjLCAweDM2LCAweGZkLCAweGQ5LCAweDkyLCAweGY2LCAweDg1LCAweGNhLCAweGNiLCAweDVhLCAweGI2LCAweDc0LAorCTB4NTEsIDB4Y2IsIDB4NDEsIDB4NGYsIDB4NGEsIDB4MGUsIDB4NzMsIDB4MDYsIDB4ZGEsIDB4OGYsIDB4ODUsIDB4YjUsCisJMHgxMywgMHhiMSwgMHhiNywgMHhmNSwgMHg5ZSwgMHhmOCwgMHgwMiwgMHhiMCwgMHg2MCwgMHgyZiwgMHg2YywgMHgzYSwKKwkweDY3LCAweGVlLCAweDk0LCAweDAyLCAweGIwLCAweDM1LCAweDdmLCAweDYyLCAweDBiLCAweGVjLCAweDJkLCAweDFlLAorCTB4YTAsIDB4OGIsIDB4NzgsIDB4NTYsIDB4YTQsIDB4NGYsIDB4ZDUsIDB4NzYsIDB4MzgsIDB4NTIsIDB4NmMsIDB4NGEsCisJMHgxMywgMHhkNywgMHgzNiwgMHg0MSwgMHg3NywgMHhkMCwgMHg1NywgMHhhZSwgMHhlYiwgMHhkZiwgMHgxZCwgMHgyYiwKKwkweDY4LCAweDQ1LCAweDdlLCAweDM5LCAweGIwLCAweDljLCAweGRlLCAweDkyLCAweDVjLCAweDk5LCAweGRlLCAweDFkLAorCTB4MzUsIDB4N2EsIDB4ODksIDB4MTksIDB4YzAsIDB4N2YsIDB4ZDgsIDB4Y2QsIDB4NGIsIDB4ZDAsIDB4ZGYsIDB4ZTcsCisJMHgxZCwgMHhlMCwgMHhiZiwgMHgwMywgMHhmYywgMHg4NywgMHg0ZCwgMHgzZCwgMHgwMywgMHhkZCwgMHg3YiwgMHhkYSwKKwkweDgxLCAweDBmLCAweDcwLCAweGUwLCAweDAzLCAweDFjLCAweGY4LCAweDAwLCAweDI3LCAweDBiLCAweDM5LCAweDExLAorCTB4ZTcsIDB4ZTksIDB4NDMsIDB4NzYsIDB4ZDcsIDB4N2MsIDB4OWUsIDB4MWIsIDB4MzcsIDB4ZGQsIDB4ZTAsIDB4YzUsCisJMHgyMiwgMHhhMywgMHg4OCwgMHg0NSwgMHgzNiwgMHhjOCwgMHg0NCwgMHhmMiwgMHg3YSwgMHhlYywgMHhhZCwgMHgwNSwKKwkweGQ3LCAweDU2LCAweDVjLCAweGIxLCAweDQ2LCAweGYyLCAweDc2LCAweGNmLCAweDRlLCAweDFlLCAweDA2LCAweDVkLAorCTB4ODgsIDB4YmYsIDB4OTMsIDB4M2YsIDB4MGQsIDB4M2QsIDB4NmMsIDB4MDIsIDB4M2QsIDB4M2YsIDB4ZTUsIDB4YzUsCisJMHgyYywgMHgwZiwgMHg5YSwgMHhhZSwgMHgxZSwgMHhiNiwgMHhhMiwgMHhlZiwgMHg5MywgMHhlOCwgMHg2YiwgMHhjNSwKKwkweDk4LCAweDAzLCAweDE4LCAweGMzLCAweDk4LCAweGE3LCAweGNkLCAweGViLCAweDBiLCAweDhlLCAweDYzLCAweGVjLAorCTB4ZjMsIDB4MTksIDB4YWMsIDB4OTUsIDB4YzAsIDB4YjgsIDB4MzYsIDB4Y2MsIDB4ZGQsIDB4ODUsIDB4MzEsIDB4ZGIsCisJMHgzMCwgMHhlNiwgMHg0NiwgMHhiNCwgMHgxOSwgMHgzMywgMHg2ZiwgMHg0NCwgMHhmYiwgMHgxMywgMHgwZCwgMHhlZiwKKwkweDdjLCAweDBjLCAweDdkLCAweGI3LCAweDM3LCAweGY0LCAweDlkLCAweDQzLCAweDFmLCAweGYyLCAweDUwLCAweGViLAorCTB4YmMsIDB4ZjcsIDB4NWUsIDB4MTEsIDB4ZWQsIDB4Y2UsIDB4ODYsIDB4MzEsIDB4YWYsIDB4YTIsIDB4MGYsIDB4NzEsCisJMHhhZiwgMHhmNSwgMHgyZCwgMHg1YywgMHg5MSwgMHg3ZiwgMHg1YSwgMHhhNCwgMHhjOSwgMHg3ZiwgMHhjNiwgMHhiOCwKKwkweDM3LCAweDhlLCAweGZlLCAweDkwLCAweDE3LCAweGJiLCAweGZlLCAweGE2LCAweDA5LCAweGJkLCAweGQzLCAweDg2LAorCTB4OWMsIDB4ZGYsIDB4MzAsIDB4ZGQsIDB4NTgsIDB4ZWYsIDB4NGUsIDB4Y2IsIDB4ZDUsIDB4NDMsIDB4YmYsIDB4ZmQsCisJMHg3MCwgMHg0MywgMHg5YiwgMHg2MywgMHgxNywgMHgxYSwgMHhmYSwgMHhmZSwgMHhhNSwgMHhhMSwgMHhmZCwgMHhkZCwKKwkweGQwLCAweGNhLCAweDc3LCAweDA2LCAweGRiLCAweDk3LCAweGY3LCAweDE1LCAweDNhLCAweDk2LCAweGI3LCAweGVkLAorCTB4YTYsIDB4OTUsIDB4ZWYsIDB4ZTgsIDB4ZWIsIDB4OTYsIDB4ZjcsIDB4ZGQsIDB4YjgsIDB4YmUsIDB4NjEsIDB4MGMsCisJMHg3NCwgMHgyYSwgMHg4YSwgMHgxYywgMHhjOSwgMHgxZiwgMHgxZiwgMHhiZSwgMHhjZSwgMHg3ZCwgMHg0ZSwgMHhmZSwKKwkweDM2LCAweGVhLCAweDkyLCAweGRhLCAweDNhLCAweGRhLCAweDNhLCAweGU0LCAweGIwLCAweGE0LCAweGMxLCAweDllLAorCTB4MmMsIDB4M2QsIDB4ZmQsIDB4YjIsIDB4OTYsIDB4ODMsIDB4NGUsIDB4NjUsIDB4MmIsIDB4ZmUsIDB4N2MsIDB4YjQsCisJMHhkOSwgMHhjNiwgMHhkYywgMHhkYywgMHhjZiwgMHhjOSwgMHgxOSwgMHgyYiwgMHg0NSwgMHhhMCwgMHgzNywgMHhmNywKKwkweGQwLCAweDI3LCAweDFkLCAweDJkLCAweDRhLCAweGRkLCAweDNlLCAweGJiLCAweGY1LCAweDRiLCAweGQ5LCAweGU3LAorCTB4ZWQsIDB4MWUsIDB4NDYsIDB4MWQsIDB4MDYsIDB4OWQsIDB4NTUsIDB4MTksIDB4NDksIDB4MzUsIDB4ZDMsIDB4YzcsCisJMHg3OCwgMHhkOCwgMHg0NSwgMHhkYywgMHhhOSwgMHg1NiwgMHg4ZCwgMHhjZCwgMHg1NSwgMHhkOSwgMHg5ZiwgMHg3YSwKKwkweGE3LCAweDJhLCAweDBhLCAweGYzLCAweDA2LCAweDE1LCAweGVlLCAweGM0LCAweGY1LCAweDFlLCAweGM4LCAweGM4LAorCTB4NDIsIDB4NmUsIDB4ODIsIDB4N2MsIDB4M2EsIDB4NGEsIDB4OWYsIDB4NzQsIDB4OTAsIDB4ZjEsIDB4YzksIDB4YTMsCisJMHgyZSwgMHhhNiwgMHgxMiwgMHg3NywgMHhkMCwgMHg0NiwgMHg1ZSwgMHg5NiwgMHgzZiwgMHhjZSwgMHhmNSwgMHg3MSwKKwkweDJkLCAweDExLCAweGM3LCAweDQ3LCAweDk1LCAweDRmLCAweGM5LCAweDViLCAweDljLCAweDc3LCAweDM1LCAweDZjLAorCTB4M2MsIDB4NmIsIDB4MzIsIDB4YTYsIDB4MzMsIDB4ZWQsIDB4ZDMsIDB4ZjAsIDB4NmYsIDB4N2MsIDB4YzYsIDB4NTgsCisJMHhlMSwgMHgzNCwgMHhlMywgMHg5MiwgMHgwMCwgMHg1NiwgMHg2ZCwgMHgzNSwgMHhlMCwgMHgzMiwgMHg4YiwgMHhjYiwKKwkweGY3LCAweGI1LCAweDgxLCAweDc5LCAweGM0LCAweDU1LCAweGVjLCAweDc1LCAweDc1LCAweDJjLCAweGVhLCAweGQxLAorCTB4YWYsIDB4NmMsIDB4ZGIsIDB4YmIsIDB4NmEsIDB4YjYsIDB4ZWQsIDB4ZWIsIDB4ZGUsIDB4NmEsIDB4MzksIDB4ZjgsCisJMHhmNywgMHg5NSwgMHgyYywgMHg5ZSwgMHhhYSwgMHgyNCwgMHg4ZSwgMHgxNSwgMHg2MSwgMHg0YiwgMHg4YiwgMHgyYSwKKwkweGVmLCAweGY2LCAweGU1LCAweGMyLCAweDE4LCAweDI3LCAweDcxLCAweDcyLCAweDFlLCAweDZmLCAweDhlLCAweGFiLAorCTB4MWMsIDB4ODMsIDB4ZjksIDB4NDUsIDB4NTUsIDB4NzYsIDB4YTQsIDB4NWEsIDB4YTMsIDB4ZTQsIDB4NDMsIDB4NDYsCisJMHhmZiwgMHg3NiwgMHg4OCwgMHgzMSwgMHhjMywgMHhhMiwgMHg0MywgMHg5ZSwgMHhhNSwgMHhmMCwgMHgzYywgMHgwNSwKKwkweDRjLCAweGY4LCAweDI3LCAweGM5LCAweDQ1LCAweGQ5LCAweGY3LCAweDc2LCAweDc1LCAweDAxLCAweDcxLCAweDk1LAorCTB4OGEsIDB4OGYsIDB4OTQsIDB4YmYsIDB4NjcsIDB4N2MsIDB4YjcsIDB4MWYsIDB4ZmMsIDB4MjIsIDB4NGYsIDB4NDcsCisJMHhjMCwgMHg2NywgMHgzZiwgMHgwNiwgMHg3OCwgMHg4ZCwgMHg3NSwgMHgxNSwgMHg1OSwgMHgxZSwgMHgwNywgMHg4YiwKKwkweDNjLCAweDUwLCAweDdlLCAweDE5LCAweDczLCAweGVhLCAweDZlLCAweGFjLCAweGMyLCAweDNjLCAweGRjLCAweDY2LAorCTB4N2YsIDB4NDcsIDB4ODgsIDB4YjEsIDB4OWMsIDB4ZWIsIDB4ZWIsIDB4MGQsIDB4YWMsIDB4ODcsIDB4ZGMsIDB4YmUsCisJMHhmYywgMHg4ZiwgMHgyYSwgMHg2ZSwgMHgyYSwgMHgyOCwgMHg3OSwgMHgyMCwgMHg4NiwgMHhhYSwgMHhmMCwgMHgxOSwKKwkweGZiLCAweGMyLCAweDVlLCAweGVjLCAweDFjLCAweGYxLCAweDYyLCAweDY1LCAweGNiLCAweDhiLCAweDk1LCAweDQ5LAorCTB4MDcsIDB4NmIsIDB4NmYsIDB4N2UsIDB4NWMsIDB4NDAsIDB4OTksIDB4MmQsIDB4MWQsIDB4ZDIsIDB4MzcsIDB4MzMsCisJMHgyZSwgMHg2OCwgMHg5MywgMHhkNSwgMHhlMywgMHgwMiwgMHg5ZiwgMHhhNiwgMHg2ZCwgMHhhMCwgMHg4OSwgMHg3MSwKKwkweDllLCAweGFhLCAweGJkLCAweDc0LCAweGI4LCAweGY1LCAweDFlLCAweGQyLCAweGUwLCAweGZiLCAweDQ3LCAweGU1LAorCTB4ODcsIDB4OGYsIDB4YzIsIDB4ZTUsIDB4NjEsIDB4NmYsIDB4NjksIDB4ZDAsIDB4YmEsIDB4NTMsIDB4YjIsIDB4ZDMsCisJMHhkYiwgMHgzYywgMHg3ZiwgMHhjYiwgMHgxYywgMHg4MCwgMHhmMSwgMHhiNywgMHhhYiwgMHhiMywgMHhkOSwgMHhkNCwKKwkweDg0LCAweDNmLCAweDRmLCAweDI3LCAweDNjLCAweDY0LCAweGEwLCAweDJlLCAweGM0LCAweGI1LCAweDE4LCAweGM3LAorCTB4ZjgsIDB4MzEsIDB4Y2QsIDB4NGUsIDB4MmYsIDB4YTYsIDB4MTksIDB4OTYsIDB4ZmQsIDB4OGUsIDB4MWIsIDB4ZjMsCisJMHg4ZiwgMHhhMCwgMHgzZiwgMHhlZiwgMHgyOCwgMHhkYSwgMHg2MywgMHg4YywgMHgyZCwgMHg3NSwgMHhjNCwgMHhkYywKKwkweDk5LCAweDNkLCAweDA5LCAweDI0LCAweDBmLCAweGVlLCAweDVlLCAweGJhLCAweGIxLCAweDk3LCAweDUyLCAweDZkLAorCTB4MmYsIDB4YWQsIDB4NGIsIDB4Y2IsIDB4ZjcsIDB4MzIsIDB4YWEsIDB4ZGUsIDB4OWQsIDB4NWEsIDB4ZjEsIDB4YWUsCisJMHg2MCwgMHgxZiwgMHhiYiwgMHgyZiwgMHhmMSwgMHg4YywgMHg3YiwgMHg2NCwgMHhkYywgMHg2MCwgMHg3OSwgMHg3YiwKKwkweGY0LCAweGU1LCAweDc0LCAweDAwLCAweDdiLCAweDRjLCAweDZhLCAweDc5LCAweDE1LCAweDZiLCAweGVkLCAweDUxLAorCTB4M2MsIDB4Y2YsIDB4OTcsIDB4YzcsIDB4NzAsIDB4YTUsIDB4N2QsIDB4YTgsIDB4NzksIDB4OTQsIDB4OGQsIDB4NGMsCisJMHgyOCwgMHgzZSwgMHg4ZiwgMHhhYiwgMHg3ZCwgMHgyYywgMHg5NCwgMHg3ZiwgMHg0MSwgMHgwYSwgMHgyNywgMHg3ZSwKKwkweDA5LCAweDdlLCAweDJmLCAweDU4LCAweDBmLCAweDYzLCAweDJkLCAweDkxLCAweGZjLCAweDI4LCAweDA2LCAweGYwLAorCTB4OTMsIDB4N2IsIDB4NjUsIDB4YWQsIDB4ZWIsIDB4MGYsIDB4NDMsIDB4NmUsIDB4N2UsIDB4MTAsIDB4ODEsIDB4OGMsCisJMHgzNSwgMHhmNywgMHhiOSwgMHg1YSwgMHhkZiwgMHhlNywgMHg2YiwgMHg1MywgMHg4MCwgMHg5ZSwgMHgyYSwgMHg2MiwKKwkweGNlLCAweDE4LCAweDY4LCAweDA4LCAweGJlLCAweDczLCAweDUwLCAweDg2LCAweDFjLCAweGNhLCAweGEzLCAweDI3LAorCTB4MzYsIDB4MmUsIDB4YjYsIDB4OTUsIDB4MTcsIDB4M2YsIDB4Y2UsIDB4ZTAsIDB4ZmEsIDB4YjQsIDB4ZjksIDB4NWMsCisJMHhjYywgMHgxMCwgMHhkNiwgMHgyZiwgMHg3ZCwgMHhkZSwgMHhmOSwgMHg3YywgMHg4YiwgMHgyYywgMHgzNSwgMHhlYSwKKwkweGMwLCAweDE0LCAweGU4LCAweDI5LCAweDM4LCAweGU0LCAweDkzLCAweGFmLCAweDliLCAweGZlLCAweGRhLCAweGFmLAorCTB4YWEsIDB4ZmQsIDB4NGMsIDB4YWEsIDB4OWEsIDB4ZGQsIDB4NzMsIDB4MzUsIDB4MWQsIDB4OWQsIDB4NDAsIDB4MGMsCisJMHhlMiwgMHhlYSwgMHhkYywgMHg3ZCwgMHgxZSwgMHg2ZiwgMHg3YywgMHhkZCwgMHg4YywgMHg3OCwgMHg3MiwgMHg2NiwKKwkweDFlLCAweDQ3LCAweGRiLCAweGYxLCAweGY1LCAweDYwLCAweDkzLCAweDc1LCAweGI3LCAweGUyLCAweDA1LCAweDlmLAorCTB4MTEsIDB4NTMsIDB4NWMsIDB4NTksIDB4OGUsIDB4ZDUsIDB4NjQsIDB4YjksIDB4YjYsIDB4NDEsIDB4MmYsIDB4YmYsCisJMHhiNywgMHhjZSwgMHhiNSwgMHg0MywgMHhkYSwgMHgxYiwgMHhlYywgMHgxNiwgMHhmNCwgMHgzZCwgMHhiNSwgMHhjYywKKwkweGJlLCAweDkzLCAweDk3LCAweGE4LCAweDgzLCAweDQ2LCAweGM0LCAweDk4LCAweGZiLCAweDUzLCAweGYwLCAweGYyLAorCTB4NjMsIDB4YzgsIDB4NTUsIDB4NDQsIDB4Y2MsIDB4MTksIDB4ZTIsIDB4MTAsIDB4ZTMsIDB4OGQsIDB4N2EsIDB4YmMsCisJMHhiYiwgMHgyMCwgMHhhYiwgMHhjNSwgMHhiYSwgMHg1NywgMHg4YSwgMHgzNSwgMHg3ZSwgMHhmMiwgMHgyYSwgMHg2MywKKwkweDhkLCAweDc4LCAweDkzLCAweGI0LCAweDEwLCAweDhiLCAweDg2LCAweDExLCAweGRiLCAweDZhLCAweGQyLCAweDY0LAorCTB4M2YsIDB4MDgsIDB4MWYsIDB4NzYsIDB4YzYsIDB4NmMsIDB4YjYsIDB4N2QsIDB4NGMsIDB4ODgsIDB4NDgsIDB4ZmIsCisJMHhkYywgMHgwNiwgMHg4NSwgMHgwYiwgMHhkNiwgMHg0YywgMHgxZCwgMHgxNywgMHgyNiwgMHhjMCwgMHhmYiwgMHgxMSwKKwkweGI3LCAweGI2LCAweDFhLCAweDZkLCAweDk3LCAweGFiLCAweGNkLCAweDhkLCAweGViLCAweDcxLCAweGZmLCAweDU4LAorCTB4MmQsIDB4ZWUsIDB4YmYsIDB4YTEsIDB4ODEsIDB4OGYsIDB4YWIsIDB4ZTEsIDB4ZTIsIDB4MTksIDB4ZjAsIDB4MmQsCisJMHg4ZCwgMHhmYywgMHg5NywgMHg3OSwgMHhlZCwgMHgxMCwgMHhmMiwgMHg2MSwgMHhlNiwgMHg2MiwgMHgxOSwgMHhlNCwKKwkweGM0LCAweDg5LCAweDMzLCAweGMwLCAweDJhLCAweGU0LCAweGM4LCAweDg5LCAweGI3LCAweGUwLCAweDU3LCAweDkwLAorCTB4MzcsIDB4MjcsIDB4ZTYsIDB4OTksIDB4YmIsIDB4MmUsIDB4MjIsIDB4M2YsIDB4N2UsIDB4MWEsIDB4ZjksIDB4ZjEsCisJMHg1MywgMHg5NSwgMHgzZSwgMHhmMCwgMHgzNywgMHhhOSwgMHhiMCwgMHg3MywgMHhlZiwgMHg3MSwgMHhkMSwgMHhlZSwKKwkweDUyLCAweGY1LCAweDYxLCAweGRhLCAweDczLCAweDE0LCAweDdlLCAweGI0LCAweDVhLCAweDNkLCAweDkwLCAweGVhLAorCTB4NDEsIDB4NGUsIDB4MWUsIDB4OTcsIDB4NGYsIDB4OTksIDB4Y2MsIDB4NjMsIDB4MzUsIDB4YjMsIDB4YmIsIDB4N2YsCisJMHhjMSwgMHgwOCwgMHhjNiwgMHhhNCwgMHhkOSwgMHgyYiwgMHhmYSwgMHg4MSwgMHg5NSwgMHhiYywgMHhjZiwgMHgyOSwKKwkweDVmLCAweDcwLCAweGNjLCAweGI4LCAweDFjLCAweGVmLCAweGVmLCAweGFhLCAweGYxLCAweGZlLCAweGMyLCAweDFhLAorCTB4NjksIDB4MTksIDB4NTYsIDB4MzUsIDB4ODAsIDB4ZWUsIDB4ZmUsIDB4MDMsIDB4YzQsIDB4YWIsIDB4MTQsIDB4ZmMsCisJMHgzYSwgMHhmYywgMHg2ZiwgMHg1NSwgMHhlZSwgMHg0OCwgMHg1ZCwgMHhhYywgMHg5ZSwgMHhiNywgMHhkNywgMHg0OSwKKwkweGJlLCAweGVmLCAweDhiLCAweDFlLCAweDY2LCAweDhmLCAweDNkLCAweDkyLCAweGI1LCAweDhiLCAweGIwLCAweDBmLAorCTB4YjcsIDB4MTYsIDB4MzksIDB4M2UsIDB4MWQsIDB4NDYsIDB4MTQsIDB4Y2EsIDB4YmYsIDB4MGUsIDB4NTksIDB4MTgsCisJMHhmYywgMHgxYiwgMHhjOCwgMHg3MCwgMHhjYiwgMHg2OSwgMHgxNiwgMHhiMCwgMHg3NCwgMHhlMCwgMHhmMCwgMHg0MiwKKwkweDM0LCAweGEyLCAweGVhLCAweDMzLCAweGQ3LCAweGQ5LCAweGVjLCAweGI3LCAweDIwLCAweGQzLCAweDUxLCAweDU5LAorCTB4NDAsIDB4ZmMsIDB4NTAsIDB4MWEsIDB4MDQsIDB4OGQsIDB4N2QsIDB4OWQsIDB4MTgsIDB4NGYsIDB4YmIsIDB4MjMsCisJMHhjZiwgMHg0NywgMHhlMSwgMHg3YiwgMHhjOSwgMHhkMywgMHgyOCwgMHhjNiwgMHhlZiwgMHhjMiwgMHg5OCwgMHgwZSwKKwkweDVjLCAweGJmLCAweDY4LCAweDJjLCAweDU4LCAweGNjLCAweDlkLCAweDdmLCAweDBlLCAweDZkLCAweGNlLCAweDExLAorCTB4ZjQsIDB4OWQsIDB4OWYsIDB4MGUsIDB4ODksIDB4OWEsIDB4OTMsIDB4ZWYsIDB4NzQsIDB4MmEsIDB4ZmIsIDB4YWYsCisJMHhhZiwgMHhjNSwgMHg3NSwgMHhmOCwgMHhlYywgMHhiZCwgMHhlYSwgMHgyZCwgMHhmZCwgMHg4MywgMHg4MSwgMHhmNSwKKwkweGRhLCAweDAyLCAweGViLCAweDBkLCAweDA2LCAweGQ2LCAweDIzLCAweDlkLCAweDFkLCAweDAxLCAweDNhLCAweDNiLAorCTB4ZjAsIDB4N2UsIDB4MGUsIDB4NmIsIDB4MGYsIDB4YWIsIDB4OTgsIDB4YTcsIDB4YmUsIDB4ZTYsIDB4ZmQsIDB4ODEsCisJMHgzNSwgMHhmZCwgMHhmZCwgMHg3NSwgMHgwNiwgMHhkZSwgMHg3YiwgMHgwNywgMHhlYiwgMHhiMSwgMHgyZiwgMHgxYSwKKwkweGU4LCAweDIzLCAweDBkLCAweGViLCAweGQxLCAweGM3LCAweDc2LCAweDQ3LCAweDgwLCAweDJlLCAweGQyLCAweGJhLAorCTB4MTYsIDB4ZmQsIDB4MmEsIDB4N2UsIDB4MDIsIDB4OWYsIDB4NWIsIDB4ZTAsIDB4YjcsIDB4NzQsIDB4ZjgsIDB4MGUsCisJMHhkNiwgMHhhMCwgMHgxYiwgMHhmNywgMHhmYSwgMHg2NSwgMHhhYywgMHhlYiwgMHhjZiwgMHgxNywgMHhjNSwgMHgxYywKKwkweDFjLCAweGNmLCAweGIxLCAweDg2LCAweGY3LCAweDNlLCAweGZiLCAweGY5LCAweGZjLCAweDFiLCAweGQ1LCAweGFmLAorCTB4MmIsIDB4YmUsIDB4YWQsIDB4MDcsIDB4ZWQsIDB4YWEsIDB4ZWUsIDB4MjIsIDB4ZjMsIDB4MWQsIDB4MjYsIDB4ZTQsCisJMHhjOSwgMHhmYywgMHg1OCwgMHg5MywgMHg5YiwgMHg2YywgMHg1ZCwgMHhlYiwgMHhlOSwgMHhhNywgMHhlYywgMHhkNywKKwkweDc5LCAweDU4LCAweGRhLCAweGEyLCAweDY1LCAweDhmLCAweGIzLCAweDVlLCAweGQwLCAweGVhLCAweGU1LCAweDdjLAorCTB4YzgsIDB4M2QsIDB4OTQsIDB4OGYsIDB4MzEsIDB4YmQsIDB4ZTcsIDB4ZjQsIDB4MzEsIDB4OGMsIDB4NWIsIDB4ZTgsCisJMHgzZiwgMHgzMywgMHhkZSwgMHgzZCwgMHhhZSwgMHhkMCwgMHhlMSwgMHg3ZCwgMHhhNSwgMHgwZSwgMHgzOSwgMHhhZiwKKwkweDc4LCAweDZhLCAweGM5LCAweGI5LCAweDFhLCAweDRmLCAweDQzLCAweGRlLCAweGI3LCAweDkwLCAweDgzLCAweGRlLAorCTB4NzcsIDB4MDYsIDB4MDMsIDB4NzEsIDB4MTEsIDB4ZWUsIDB4Y2IsIDB4MTksIDB4ZDAsIDB4MTAsIDB4OTcsIDB4OWUsCisJMHg3ZSwgMHhlNiwgMHg2ZSwgMHg0NSwgMHg1YywgMHg1OSwgMHhhNywgMHhkMCwgMHg3MCwgMHg3NSwgMHhlYiwgMHgxNywKKwkweDNkLCAweGZkLCAweGYwLCAweDRiLCAweGMwLCAweGExLCAweDllLCAweGZlLCAweGVmLCAweGE4LCAweDdjLCAweGFlLAorCTB4NTQsIDB4YjEsIDB4YjQsIDB4M2IsIDB4MWMsIDB4YjcsIDB4NDYsIDB4NzQsIDB4Y2UsIDB4YmUsIDB4NWMsIDB4OGQsCisJMHg2OCwgMHhhMCwgMHg5OSwgMHg3NSwgMHgwZCwgMHhiZiwgMHg0NiwgMHg3NCwgMHg0ZSwgMHg1NCwgMHg4ZCwgMHhlOCwKKwkweGU0LCAweDE1LCAweDZhLCAweDQ0LCAweDk5LCAweGFiLCAweGFmLCAweDExLCAweDcxLCAweDdlLCAweDUzLCAweGVlLAorCTB4MWUsIDB4MTAsIDB4ZWQsIDB4NGIsIDB4NWUsIDB4OGQsIDB4ZTgsIDB4ODIsIDB4YjgsIDB4MzUsIDB4YTIsIDB4ZjMsCisJMHhiMiwgMHg3YSwgMHg4ZCwgMHhlOCwgMHg2OCwgMHg0MywgMHg4ZCwgMHg2OCwgMHhiZCwgMHhhYSwgMHgxMSwgMHg3MSwKKwkweDFlLCAweGI3LCAweDQ2LCAweGM0LCAweDc2LCAweGJlLCAweDdmLCAweDMwLCAweDUwLCAweGViLCAweDAwLCAweGZlLAorCTB4M2EsIDB4YjcsIDB4ODIsIDB4NmYsIDB4OTYsIDB4MzYsIDB4ZWEsIDB4ZjgsIDB4OTgsIDB4NDYsIDB4ZWMsIDB4YmYsCisJMHhiZSwgMHhlNiwgMHhiZiwgMHhlYSwgMHhmOCwgMHhhNiwgMHgyOSwgMHg5ZCwgMHhiYiwgMHgxMiwgMHhiZSwgMHg4ZCwKKwkweGJhLCAweDcxLCAweGM5LCAweDMyLCAweDZjLCAweDliLCAweGFhLCAweGM1LCAweDJlLCAweGJmLCAweGRjLCAweGNjLAorCTB4MWMsIDB4N2EsIDB4YjIsIDB4NWMsIDB4OWYsIDB4NzcsIDB4MTIsIDB4ZjIsIDB4MWUsIDB4YWIsIDB4ZDUsIDB4NDksCisJMHgyZSwgMHgxNSwgMHgxZiwgMHg0NSwgMHhlNSwgMHhlMCwgMHhhYSwgMHhkZiwgMHg5YSwgMHg2MiwgMHg5OSwgMHg5NSwKKwkweGRmLCAweDlhLCAweDM0LCAweDg5LCAweDgyLCAweGNlLCAweDdjLCAweDdmLCAweDVlLCAweGU1LCAweDVkLCAweDBiLAorCTB4Y2UsIDB4Y2YsIDB4Y2IsIDB4ZDIsIDB4YmQsIDB4MTYsIDB4ZjAsIDB4YzcsIDB4YWYsIDB4OWYsIDB4NTAsIDB4YmUsCisJMHg3NSwgMHg5ZiwgMHg5MiwgMHhkNSwgMHgzZiwgMHhiYSwgMHgxYSwgMHhjYSwgMHgzZSwgMHg1NSwgMHg0MywgMHhmOSwKKwkweDVhLCAweDczLCAweGIwLCAweDg2LCAweDcyLCAweDRlLCAweDJlLCAweDVmLCAweDQzLCAweGQ5LCAweGI3LCAweDRhLAorCTB4MGQsIDB4ZTUsIDB4MTUsIDB4YTksIDB4ZDcsIDB4NTAsIDB4NWUsIDB4MTEsIDB4YmYsIDB4ODYsIDB4NjIsIDB4YzgsCisJMHhkMiwgMHg3YSwgMHhjZSwgMHhiMywgMHgxZiwgMHhlZiwgMHg4YywgMHhlMCwgMHgzNywgMHg4YywgMHg5ZiwgMHg1YiwKKwkweDUzLCAweDM5LCAweDU3LCAweGEzLCAweDdmLCAweGI1LCAweDlhLCAweGNhLCAweDM3LCAweDliLCAweGRmLCAweDRmLAorCTB4NGQsIDB4YzUsIDB4ZjUsIDB4MDEsIDB4N2UsIDB4NGQsIDB4YTUsIDB4MDUsIDB4ZjEsIDB4MGUsIDB4N2MsIDB4OGUsCisJMHgxZSwgMHhhYywgMHhhOSwgMHhmYywgMHgyZCwgMHhlZCwgMHgwMSwgMHg3ZCwgMHgyYSwgMHg0NiwgMHg0MCwgMHgzZiwKKwkweGVjLCAweDAyLCAweDdlLCAweDI5LCAweGEzLCAweDZhLCAweDFjLCAweDlmLCAweGY2LCAweDc4LCAweGI4LCAweDFiLAorCTB4N2IsIDB4OGUsIDB4NDMsIDB4MTYsIDB4ZTQsIDB4NjMsIDB4OGYsIDB4OGEsIDB4MmQsIDB4MzMsIDB4NjYsIDB4NGMsCisJMHhjYiwgMHhmNiwgMHhjMiwgMHg5YiwgMHg0ZCwgMHhmMywgMHg1YiwgMHg3NCwgMHg0YywgMHhjNiwgMHgyYiwgMHhkNCwKKwkweGYxLCAweDJlLCAweGM0LCAweGUyLCAweDI2LCAweGZhLCAweDc2LCAweGEzLCAweGVkLCAweGM3LCAweDU0LCAweGZkLAorCTB4YjUsIDB4MzksIDB4NjgsIDB4OWIsIDB4MGIsIDB4YzAsIDB4NTksIDB4ZTAsIDB4YzQsIDB4NTUsIDB4ZjgsIDB4YTgsCisJMHg2ZCwgMHhhMCwgMHgzOSwgMHhiOCwgMHg4ZiwgMHgyMiwgMHhmYywgMHgxMywgMHhmYSwgMHg5NCwgMHhjYywgMHgxOSwKKwkweDViLCAweGZhLCAweGI0LCAweGM0LCAweDY5LCAweGU3LCAweDU3LCAweDMxLCAweDFmLCAweGZiLCAweGI2LCAweGE5LAorCTB4N2MsIDB4YWMsIDB4MzAsIDB4YzAsIDB4YmQsIDB4ZDIsIDB4ZDcsIDB4MmQsIDB4ODIsIDB4M2UsIDB4ZjQsIDB4OTUsCisJMHg5OCwgMHgwMywgMHhkMiwgMHhlZiwgMHhmOSwgMHgzOSwgMHg1YSwgMHg0NCwgMHhlNSwgMHg2OCwgMHg5ZCwgMHg4YSwKKwkweDFmLCAweGU0LCAweGY1LCAweDhkLCAweDYxLCAweDYyLCAweDY1LCAweGE3LCAweGNkLCAweDNkLCAweDBjLCAweDdiLAorCTB4NTgsIDB4YzcsIDB4YjYsIDB4OWIsIDB4MGIsIDB4NjYsIDB4NzQsIDB4ZGUsIDB4M2YsIDB4MDIsIDB4YjksIDB4YjIsCisJMHg0ZSwgMHhlMywgMHhjYiwgMHhlZiwgMHgyMSwgMHg2ZiwgMHhkZiwgMHg4MywgMHg1MiwgMHhlYywgMHg5NCwgMHhmMCwKKwkweDdhLCAweGQwLCAweDkzLCAweDlmLCAweDYxLCAweGRjLCAweGZkLCAweDA5LCAweDk1LCAweDgzLCAweDQ0LCAweGVkLAorCTB4NGIsIDB4ZGIsIDB4ZWQsIDB4NWQsIDB4ZDcsIDB4NjAsIDB4YjcsIDB4MjMsIDB4OTcsIDB4YjUsIDB4ZGIsIDB4Y2YsCisJMHg4NSwgMHg4MywgMHg3NiwgMHg3YiwgMHhkNywgMHgzNSwgMHhkOCwgMHhlZCwgMHhmZSwgMHg2YiwgMHhiMiwgMHg1YiwKKwkweGVlLCAweDhkLCAweDk4LCAweGU0LCAweGQ3LCAweGM0LCAweDU2LCAweGM2LCAweDU5LCAweGZlLCAweGJhLCAweDEzLAorCTB4NTgsIDB4MzMsIDB4NzMsIDB4ODksIDB4MzUsIDB4YzcsIDB4MmUsIDB4NTksIDB4NWIsIDB4NmQsIDB4OGMsIDB4YjEsCisJMHhhZSwgMHg0NiwgMHhkZSwgMHhjYywgMHhhZCwgMHhlOCwgMHg2ZiwgMHgyMywgMHg5ZSwgMHg1ZiwgMHhiYSwgMHhkZCwKKwkweGNiLCAweGU3LCAweGZkLCAweGJjLCAweDNlLCAweDY4LCAweDNmLCAweGQ0LCAweDBiLCAweGVhLCAweGMyLCAweDYzLAorCTB4ZTAsIDB4MTcsIDB4ZjUsIDB4YzEsIDB4YjcsIDB4YjksIDB4OWUsIDB4MDYsIDB4MWQsIDB4NWMsIDB4NDQsIDB4YmUsCisJMHhkZiwgMHhlMywgMHhlOSwgMHgyMCwgMHg2NSwgMHhkZCwgMHhhYiwgMHhiZSwgMHgxMSwgMHg5NSwgMHg5YywgMHg0NywKKwkweGRjLCAweDNjLCAweDFmLCAweDNhLCAweDkwLCAweDJmLCAweGY5LCAweGI2LCAweDA2LCAweDllLCAweDQ0LCAweGZkLAorCTB4NjcsIDB4ZTQsIDB4YTMsIDB4OGQsIDB4OTgsIDB4NjcsIDB4MGIsIDB4ZTIsIDB4MzUsIDB4ZjAsIDB4NDgsIDB4ZjUsCisJMHgyZiwgMHhhZiwgMHgwOSwgMHg1ZiwgMHgxZSwgMHhjZiwgMHhhNCwgMHgxOCwgMHhjMiwgMHhkOCwgMHg1MywgMHgwMywKKwkweGIwLCAweGYxLCAweDAxLCAweDYyLCAweDU0LCAweDFhLCAweDc5LCAweDBmLCAweGY1LCAweDkwLCAweGJhLCAweGI5LAorCTB4MjksIDB4YjksIDB4NDMsIDB4NjcsIDB4NGMsIDB4YjUsIDB4MDcsIDB4YjYsIDB4NDcsIDB4N2QsIDB4OGQsIDB4Y2IsCisJMHg4ZSwgMHhjYSwgMHhhNiwgMHgzMywgMHhlNywgMHg3NCwgMHhhZSwgMHg1MSwgMHhhZCwgMHhlNiwgMHg5OSwgMHgyYiwKKwkweDVhLCAweGEyLCAweDc3LCAweGY3LCAweGZmLCAweDQ1LCAweDk4LCAweDdlLCAweGU5LCAweDdhLCAweGRiLCAweGYwLAorCTB4NzQsIDB4MmQsIDB4ODMsIDB4N2IsIDB4ZWEsIDB4ZWQsIDB4ZWIsIDB4ZjAsIDB4ZjcsIDB4ZmMsIDB4YzYsIDB4ZmUsCisJMHgwMywgMHhmNCwgMHhjNywgMHg2MCwgMHhmMywgMHhmNCwgMHhlZiwgMHhjYywgMHg0NywgMHhiNiwgMHg3YSwgMHhlMywKKwkweDdhLCAweGQ0LCAweGY3LCAweGNmLCAweDZjLCAweGVhLCAweDU2LCAweGVmLCAweGJiLCAweDEzLCAweGZkLCAweDRmLAorCTB4ODIsIDB4M2UsIDB4N2IsIDB4OTksIDB4OWMsIDB4NzksIDB4NDYsIDB4MjEsIDB4YTcsIDB4ZjIsIDB4MTksIDB4YmUsCisJMHhhZiwgMHg3NCwgMHgxMiwgMHgzOSwgMHg4OCwgMHgxOSwgMHhhOCwgMHhhNSwgMHg4NywgMHhiZCwgMHhkYywgMHg4ZCwKKwkweDM2LCAweDE2LCAweDgxLCAweDBjLCAweGI3LCAweDdiLCAweGI5LCAweDBhLCAweGYzLCAweGQ3LCAweGU1LCAweDY3LAorCTB4MTMsIDB4NTYsIDB4ZDcsIDB4ODEsIDB4MGQsIDB4ZWYsIDB4NDMsIDB4MDcsIDB4MWEsIDB4ZTUsIDB4MTcsIDB4ODYsCisJMHhlZCwgMHhmYiwgMHhmMiwgMHhmMywgMHhlMywgMHg5OCwgMHg3OSwgMHg2ZiwgMHhkZiwgMHgzZCwgMHhhZSwgMHgwYywKKwkweDdmLCAweDJjLCAweGY2LCAweGE5LCAweDA1LCAweGY2LCAweGU5LCAweGUzLCAweGQxLCAweDNlLCAweDZmLCAweDlmLAorCTB4NWIsIDB4MWIsIDB4ZjAsIDB4NjgsIDB4YTQsIDB4YzEsIDB4NjYsIDB4M2YsIDB4NGEsIDB4M2MsIDB4M2EsIDB4YjQsCisJMHhlNiwgMHhhMywgMHhjNywgMHgyMywgMHhlZSwgMHg2YiwgMHhlMywgMHhhYSwgMHgzOCwgMHhlNCwgMHhlZSwgMHhlMywKKwkweDc3LCAweDQ1LCAweDRmLCAweDdmLCAweDk4LCAweGY5LCAweGRlLCAweGZiLCAweDkxLCAweDRmLCAweDEwLCAweDQ3LAorCTB4MjgsIDB4OTMsIDB4MzYsIDB4MTUsIDB4YzMsIDB4YmEsIDB4YjYsIDB4MDcsIDB4NWYsIDB4NWUsIDB4MGEsIDB4YzksCisJMHgxYiwgMHhmNywgMHg4NCwgMHhlNSwgMHg3ZiwgMHg2ZiwgMHhlMywgMHhmNywgMHgzMCwgMHhkMywgMHhhYiwgMHg2OSwKKwkweGIxLCAweGZkLCAweGMyLCAweDFhLCAweGQ3LCAweDBmLCAweGJkLCAweGQwLCAweGVlLCAweGZhLCAweDFkLCAweGJlLAorCTB4ZTMsIDB4ZGIsIDB4YjMsIDB4ODUsIDB4ZTcsIDB4N2MsIDB4YjYsIDB4OTEsIDB4NWYsIDB4NGMsIDB4YWUsIDB4MjEsCisJMHgwNywgMHhkYywgMHg2NCwgMHg1ZCwgMHhkMCwgMHg1NywgMHhjYiwgMHgwMSwgMHgyZiwgMHg1ZiwgMHgwZiwgMHhhYywKKwkweGU3LCAweDgwLCAweGM0LCAweGQ5LCAweDBlLCAweGE1LCAweDFiLCAweGY5LCAweDI4LCAweDczLCAweDFmLCAweGMzLAorCTB4YzMsIDB4NGUsIDB4ZGUsIDB4MjMsIDB4YjcsIDB4NzUsIDB4OTAsIDB4ZWYsIDB4NDIsIDB4YjYsIDB4Y2YsIDB4MjEsCisJMHg1ZSwgMHg3YSwgMHhkNiwgMHg0MSwgMHg4ZSwgMHhlYiwgMHgyMCwgMHhiNywgMHg3NSwgMHg5MCwgMHhkYiwgMHgzYSwKKwkweGM4LCAweDZkLCAweDlkLCAweGE0LCAweDk3LCAweDIzLCAweDhmLCAweDc4LCAweDc1LCAweDdmLCAweDdlLCAweGUzLAorCTB4NjYsIDB4N2QsIDB4YTEsIDB4MDgsIDB4NWYsIDB4MzIsIDB4YzUsIDB4NzMsIDB4MTMsIDB4N2EsIDB4MzYsIDB4YjUsCisJMHhjNiwgMHhkYiwgMHg5ZiwgMHg1ZiwgMHgxMywgMHhlZiwgMHhmMiwgMHg2YSwgMHgzNiwgMHhkZiwgMHg1NCwgMHg3NSwKKwkweDQzLCAweGQxLCAweDFmLCAweDY4LCAweDcxLCAweGJmLCAweDgzLCAweGYzLCAweDdjLCAweGM3LCAweGFmLCAweDIxLAorCTB4MmUsIDB4NTEsIDB4NjcsIDB4ODgsIDB4NjgsIDB4YTMsIDB4NTUsIDB4M2QsIDB4Y2QsIDB4OWEsIDB4OGMsIDB4ZTgsCisJMHg3YSwgMHhmYSwgMHgxNiwgMHhiYywgMHhiMywgMHhjNSwgMHhjZCwgMHgwOSwgMHhhMiwgMHg2MiwgMHhlOCwgMHhlOSwKKwkweDU2LCAweGYyLCAweDU0LCAweGQzLCAweGQzLCAweDZiLCAweGJkLCAweGI5LCAweGY2LCAweGI3LCAweGI4LCAweGIxLAorCTB4NTUsIDB4MmYsIDB4ZGIsIDB4YTYsIDB4Y2UsIDB4MzgsIDB4NDEsIDB4YzUsIDB4ZGEsIDB4N2UsIDB4ZmYsIDB4YzUsCisJMHhmNiwgMHhlNSwgMHg2YiwgMHg4NSwgMHgxNCwgMHhiZSwgMHg2NywgMHg1MywgMHhmNywgMHg2MiwgMHgzZSwgMHhiNiwKKwkweGViLCAweGZjLCAweGQ2LCAweDJmLCAweGM5LCAweGVmLCAweDkwLCAweGM3LCAweDZmLCAweDk3LCAweGM3LCAweDA2LAorCTB4YzcsIDB4YTksIDB4YmEsIDB4MzAsIDB4NzksIDB4ZWQsIDB4Y2YsIDB4YTcsIDB4ZWEsIDB4N2EsIDB4NTgsIDB4NDcsCisJMHg5ZCwgMHhjZCwgMHhjMCwgMHhmNSwgMHgwNywgMHhhNiwgMHhiNCwgMHg4ZCwgMHhlZSwgMHgwZSwgMHhkOSwgMHhjMSwKKwkweDc1LCAweGZkLCAweDZmLCAweGUyLCAweDU3LCAweGIzLCAweDY2LCAweDhmLCAweGZhLCAweDhlLCAweGU2LCAweGZhLAorCTB4OGMsIDB4OTAsIDB4ZDIsIDB4NDEsIDB4MzMsIDB4Y2QsIDB4N2QsIDB4ZmQsIDB4NTAsIDB4OWQsIDB4YTksIDB4YTEsCisJMHhmZSwgMHhlNSwgMHg5MCwgMHhjNywgMHg0YywgMHgwZCwgMHg2YywgMHg4YSwgMHg5YiwgMHhmYSwgMHg0OCwgMHgwYiwKKwkweGViLCAweGFmLCAweDQzLCAweDE1LCAweDFmLCAweGY3LCAweGI4LCAweDVlLCAweGEzLCAweDFmLCAweDY3LCAweDVkLAorCTB4Y2QsIDB4YzcsIDB4MzMsIDB4ZDksIDB4ZTAsIDB4ZDYsIDB4ZGIsIDB4M2UsIDB4ODgsIDB4MmQsIDB4YjUsIDB4MzQsCisJMHhkOCwgMHg5MiwgMHhiZiwgMHg0ZiwgMHhlZSwgMHg5ZiwgMHhkNywgMHhkNSwgMHhjZiwgMHg0MywgMHgyYywgMHg1NiwKKwkweDAyLCAweGRmLCAweDQ3LCAweDZhLCAweGJhLCAweGMxLCAweGIzLCAweDJhLCAweDlmLCAweDg1LCAweDBlLCAweGYyLAorCTB4ZGIsIDB4YzAsIDB4NGUsIDB4ZDgsIDB4NTEsIDB4YjUsIDB4M2EsIDB4YzQsIDB4MWEsIDB4NzMsIDB4ZGYsIDB4NjcsCisJMHg1NCwgMHg3ZSwgMHhhOSwgMHhhNywgMHhlNywgMHg1NSwgMHhmZCwgMHhjMSwgMHg1YywgMHg1MSwgMHg3ZiwgMHgxOCwKKwkweDgyLCAweGFlLCAweDIwLCAweDA2LCAweDcwLCAweGRhLCAweDU0LCAweDRjLCAweGE3LCAweGUyLCAweDg1LCAweDRhLAorCTB4ZTMsIDB4ZjcsIDB4OTcsIDB4ZmIsIDB4NWIsIDB4NWQsIDB4M2UsIDB4ZmMsIDB4NWQsIDB4OGIsIDB4ZmIsIDB4MGQsCisJMHhlMiwgMHg4ZiwgMHhhMiwgMHhjYiwgMHhkYiwgMHg3YywgMHhmZiwgMHhhZiwgMHg1YiwgMHhmYywgMHhiMywgMHgzYiwKKwkweDg1LCAweDEzLCAweDQzLCAweGQwLCAweDQ1LCAweGU0LCAweGU0LCAweDZhLCAweDNlLCAweGM0LCAweGJiLCAweDRmLAorCTB4Y2MsIDB4NzYsIDB4MmMsIDB4MWYsIDB4OGYsIDB4YmUsIDB4MTMsIDB4ZmUsIDB4ZjgsIDB4OGUsIDB4ODYsIDB4ZjEsCisJMHgxZCwgMHgxOCwgMHhmZiwgMHg3YiwgMHgwZCwgMHhlMywgMHgzYiwgMHgwMiwgMHhlMywgMHhhMywgMHgwZCwgMHhlMywKKwkweGEzLCAweDE4LCAweGZmLCAweDdjLCAweGMzLCAweGY4LCAweDY4LCAweDYwLCAweDdjLCAweDY3LCAweGMzLCAweGY4LAorCTB4NGUsIDB4OGMsIDB4N2YsIDB4YTEsIDB4NjEsIDB4M2MsIDB4ZmEsIDB4NGUsIDB4MzQsIDB4NzksIDB4ZGYsIDB4YzUsCisJMHg4OCwgMHhiMSwgMHhmYiwgMHhiZCwgMHg1YywgMHgxYywgMHhkNywgMHg3MiwgMHhlMywgMHhiNywgMHgxNiwgMHhlYSwKKwkweDVkLCAweDE3LCAweDY0LCAweGUwLCAweDlmLCAweGE3LCAweGEzLCAweGJkLCAweDY2LCAweDYwLCAweGFmLCAweGY1LAorCTB4NTgsIDB4YzYsIDB4ZDUsIDB4YzcsIDB4YTAsIDB4MmUsIDB4MTIsIDB4MWYsIDB4OGEsIDB4NjIsIDB4ZDgsIDB4ZDAsCisJMHg5ZCwgMHgxMiwgMHg3NCwgMHhhOCwgMHhlNCwgMHhmYiwgMHgyNCwgMHg5ZSwgMHg4MywgMHhlMiwgMHgxOSwgMHg1MywKKwkweGQ3LCAweGY3LCAweDg2LCAweGVjLCAweDQ1LCAweDJmLCAweDA3LCAweDdiLCAweDliLCAweGI0LCAweDAzLCAweDJmLAorCTB4N2QsIDB4Y2MsIDB4OTQsIDB4NjMsIDB4YWUsIDB4ZGQsIDB4NTAsIDB4N2YsIDB4MzksIDB4YmYsIDB4NjcsIDB4M2YsCisJMHhkNCwgMHg1NSwgMHg2ZiwgMHg5ZCwgMHhhMSwgMHgxNSwgMHhiOCwgMHgxNiwgMHg1ZiwgMHg1MSwgMHhkYiwgMHgzMiwKKwkweGFlLCAweDAyLCAweGQ3LCAweDQ2LCAweDZhLCAweGI4LCAweGY2LCAweDU5LCAweDk5LCAweGFmLCAweGU1LCAweGRiLAorCTB4YzMsIDB4NzIsIDB4YzAsIDB4ZDksIDB4YzUsIDB4MzMsIDB4MzYsIDB4YzcsIDB4MzIsIDB4ZjIsIDB4ZTEsIDB4ZTQsCisJMHhkYiwgMHhiYiwgMHg2YSwgMHg3ZSwgMHg5MiwgMHg2NywgMHgzYSwgMHg5NiwgMHgwZSwgMHgzMSwgMHg4NywgMHhmMiwKKwkweDZiLCAweGIzLCAweDUzLCAweGNlLCAweGNmLCAweGI2LCAweDQyLCAweDJlLCAweGIwLCAweDhkLCAweDZiLCAweGNkLAorCTB4YjcsIDB4MzksIDB4NWYsIDB4NTQsIDB4MGUsIDB4YjgsIDB4ZTcsIDB4MWQsIDB4NmEsIDB4ZjMsIDB4MTYsIDB4NmIsCisJMHhmMywgMHhjNiwgMHgzYywgMHg3YiwgMHhhMywgMHgwZiwgMHhhZSwgMHhmYiwgMHhjYiwgMHgxYywgMHhmYywgMHhlNSwKKwkweDE4LCAweDcyLCAweGVlLCAweDQ1LCAweDY3LCAweGI1LCAweGZhLCAweGU4LCAweGI1LCAweGZhLCAweGNiLCAweGM2LAorCTB4M2EsIDB4NzMsIDB4YTMsIDB4YmYsIDB4ZTQsIDB4M2EsIDB4OGQsIDB4YjUsIDB4ZTUsIDB4NzgsIDB4MDMsIDB4ZmUsCisJMHg1MywgMHg5ZiwgMHgwZSwgMHg3YiwgMHgzMSwgMHgzNSwgMHhhZSwgMHhhNSwgMHhjMywgMHhiMCwgMHg0NywgMHg1ZCwKKwkweGM2LCAweDk0LCAweGZlLCAweGIyLCAweGVkLCAweGU3LCAweDk2LCAweGJiLCAweDZiLCAweGI5LCAweDY1LCAweDNkLAorCTB4MWYsIDB4NDQsIDB4ZWMsIDB4OWEsIDB4ZmMsIDB4YTQsIDB4ODcsIDB4OGYsIDB4OGMsIDB4OTEsIDB4YTcsIDB4ZDAsCisJMHg3ZiwgMHgwYywgMHgzYSwgMHhjMCwgMHg2NywgMHhhYywgMHg5NywgMHhkZSwgMHgyYywgMHg5ZiwgMHgzMiwgMHg1ZCwKKwkweGZmLCAweGU0LCAweGQ2LCAweGE2LCAweDc2LCAweGFiLCAweGY4LCAweDlmLCAweGRmLCAweDBiLCAweDBhLCAweGE5LAorCTB4NzYsIDB4MmYsIDB4ZGUsIDB4YmIsIDB4MTIsIDB4YWUsIDB4MmUsIDB4Y2YsIDB4NGQsIDB4NzUsIDB4ZmQsIDB4NTEsCisJMHhiYywgMHhjYiwgMHhkYywgMHhkNCwgMHg4YywgMHgxMCwgMHg0MywgMHhiMywgMHg5NSwgMHhjYiwgMHhiZSwgMHg1ZiwKKwkweGE0LCAweDdmLCAweDI5LCAweGE4LCAweGVmLCAweDgyLCAweDJhLCAweDBmLCAweGM1LCAweGI4LCAweDQ1LCAweGVmLAorCTB4N2QsIDB4MzcsIDB4MGYsIDB4Y2QsIDB4NTYsIDB4YmUsIDB4ZGQsIDB4ZWEsIDB4ZTIsIDB4ZTAsIDB4ZTUsIDB4NzIsCisJMHg5NiwgMHg5ZiwgMHg4OCwgMHhiMCwgMHhhZSwgMHhiNywgMHhlOCwgMHg1YywgMHg4OSwgMHhkNiwgMHg5NSwgMHg3OSwKKwkweGFmLCAweGIxLCAweDIyLCAweGVmLCAweDFkLCAweGY1LCAweGYyLCAweGRhLCAweGNmLCAweGE5LCAweGJjLCAweGQ3LAorCTB4ZTUsIDB4MzEsIDB4ZjcsIDB4MTIsIDB4Y2MsIDB4YTMsIDB4NmMsIDB4NjAsIDB4MjEsIDB4YmYsIDB4YTksIDB4MTAsCisJMHgxZiwgMHgyNiwgMHg5NCwgMHhkZiwgMHhjYSwgMHg0ZiwgMHhkZiwgMHgwOSwgMHgzZSwgMHg0NywgMHg1NywgMHhkMSwKKwkweDliLCAweDhmLCAweGRhLCAweDRmLCAweGY4LCAweDdiLCAweDNmLCAweDJjLCAweDZlLCAweGJkLCAweDZlLCAweDI3LAorCTB4NjgsIDB4NjEsIDB4NmUsIDB4MTUsIDB4ZjIsIDB4ZjQsIDB4ZTEsIDB4YmIsIDB4ZGUsIDB4MzksIDB4NTMsIDB4N2YsCisJMHg5YywgMHg5ZiwgMHhjNywgMHhkNywgMHhiZSwgMHhiYiwgMHgxNiwgMHgzMywgMHhjYiwgMHhlYSwgMHgyNywgMHgxYiwKKwkweDA5LCAweGMzLCAweDkwLCAweDdiLCAweGU2LCAweDFhLCAweGJlLCAweDViLCAweDdjLCAweDkwLCAweGYzLCAweDExLAorCTB4OGQsIDB4N2UsIDB4OGQsIDB4ZGYsIDB4NGQsIDB4ZjksIDB4YWQsIDB4NTQsIDB4YjQsIDB4YmIsIDB4N2IsIDB4NmQsCisJMHhkOCwgMHgwMCwgMHhjZiwgMHgyYywgMHgwNywgMHhmMSwgMHgzNSwgMHgyYywgMHhmOSwgMHgzOSwgMHgwOSwgMHg0NywKKwkweGQzLCAweGZjLCAweDA2LCAweDQwLCAweGZmLCAweGZmLCAweGJhLCAweGI3LCAweGNmLCAweDk4LCAweGVjLCAweDlmLAorCTB4NzEsIDB4NmIsIDB4OWUsIDB4ZmEsIDB4NjUsIDB4Y2YsIDB4YzUsIDB4MWQsIDB4MDAsIDB4MWYsIDB4MTIsIDB4NDcsCisJMHhmZCwgMHg5YSwgMHhhNywgMHhlZSwgMHg5ZSwgMHg4YiwgMHgzYiwgMHhmYSwgMHhlMSwgMHg5ZCwgMHg4YiwgMHhlMywKKwkweGZjLCAweGE2LCAweGVjLCAweDVhLCAweGU1LCAweDVjLCAweDljLCAweDcxLCAweDk1LCAweGU3LCAweGUyLCAweGRhLAorCTB4NTUsIDB4Y2QsIDB4OTMsIDB4ZjMsIDB4YjgsIDB4MzUsIDB4NGYsIDB4YjYsIDB4YmIsIDB4ZmIsIDB4NTksIDB4MmIsCisJMHhlMSwgMHhkOSwgMHhiNywgMHgwMSwgMHg3NSwgMHgwNiwgMHhiOSwgMHhiYiwgMHhmZiwgMHg0NywgMHg5MSwgMHhhMywKKwkweDdjLCAweDNkLCAweGYyLCAweGQxLCAweGU3LCAweDI4LCAweGRjLCAweGNiLCAweGFmLCAweGI4LCAweGRmLCAweDc3LAorCTB4ZTUsIDB4NWEsIDB4ZWEsIDB4MDAsIDB4MWYsIDB4YWMsIDB4YWUsIDB4YjksIDB4NWYsIDB4ZDUsIDB4MzUsIDB4YmYsCisJMHgxMywgMHgwOSwgMHhkNiwgMHgzNSwgMHhmNSwgMHgyYiwgMHg5YywgMHgwZCwgMHhkYiwgMHhiZiwgMHg0YSwgMHg1ZCwKKwkweDMzLCAweDE0LCAweDM4LCAweDFiLCAweDE2LCAweGYyLCAweGNlLCAweDg2LCAweGI1LCAweGRiLCAweGM4LCAweDI1LAorCTB4YmQsIDB4M2EsIDB4YTYsIDB4N2UsIDB4ZDksIDB4YjMsIDB4NjEsIDB4ZmYsIDB4MTksIDB4ZjksIDB4ZTAsIDB4NzUsCisJMHhjYywgMHgxNSwgMHg2NywgMHhjMywgMHhlMCwgMHhlYiwgMHgzNiwgMHg0OCwgMHhmYywgMHg5YSwgMHhmMiwgMHg5ZSwKKwkweDBmLCAweDkyLCAweGYzLCAweGYwLCAweGJjLCAweDdlLCAweDEzLCAweGY2LCAweDFjLCAweDkyLCAweDVkLCAweDUxLAorCTB4ZWEsIDB4MjcsIDB4Y2YsIDB4MzYsIDB4ZjYsIDB4YzIsIDB4MTYsIDB4NzAsIDB4YWQsIDB4YjAsIDB4OWQsIDB4YTQsCisJMHg4YywgMHhiNCwgMHg5MSwgMHhkZSwgMHhlNSwgMHhlNywgMHgxMCwgMHhlYSwgMHhlNywgMHg3MSwgMHhjMywgMHhiNSwKKwkweGYzLCAweGI4LCAweDQ3LCAweGEwLCAweDM3LCAweGZhLCAweDRjLCAweDU4LCAweDE2LCAweDAyLCAweDNhLCAweDM1LAorCTB4ODUsIDB4NzgsIDB4NGYsIDB4OWYsIDB4YjMsIDB4YmMsIDB4ZTcsIDB4ZmMsIDB4OWYsIDB4OGEsIDB4MjgsIDB4MzAsCisJMHg4ZiwgMHg2NywgMHg3OCwgMHhkYiwgMHhjNCwgMHg5OCwgMHg3MywgMHhiZiwgMHg1OSwgMHhiYSwgMHhmZiwgMHg1NywKKwkweDEyLCAweGMzLCAweDE4LCAweDllLCAweGYxLCAweDBjLCAweGM5LCAweDAxLCAweDU1LCAweGIzLCAweGYwLCAweDc1LAorCTB4NzksIDB4YzcsIDB4NWEsIDB4NjksIDB4NTksIDB4OWYsIDB4YTksIDB4YjcsIDB4YTMsIDB4YWIsIDB4ZjgsIDB4N2QsCisJMHhjNCwgMHg5MSwgMHgzMywgMHhkNCwgMHhlNywgMHg1YiwgMHgyNSwgMHhlNywgMHhkNSwgMHg4MywgMHgwYSwgMHg5NSwKKwkweDZkLCAweDVlLCAweDdlLCAweGExLCAweGJlLCAweGVkLCAweDgwLCAweDk3LCAweGRkLCAweDllLCAweDBmLCAweGM2LAorCTB4YjUsIDB4ZDQsIDB4NGQsIDB4OWYsIDB4ODcsIDB4MzUsIDB4NGUsIDB4Y2EsIDB4ZDAsIDB4ZjQsIDB4OTYsIDB4ZDgsCisJMHgzOCwgMHhmMCwgMHg2ZSwgMHg0YywgMHhhZCwgMHg3OSwgMHgyZCwgMHgzYywgMHhkNywgMHgyZSwgMHhmMSwgMHhiZCwKKwkweGYxLCAweDZhLCAweGY5LCAweGVlLCAweGM3LCAweGM3LCAweDhmLCAweDYyLCAweDdmLCAweGRkLCAweGQwLCAweDhmLAorCTB4ODcsIDB4MjUsIDB4NzcsIDB4ZTIsIDB4NjYsIDB4MTksIDB4OWEsIDB4NGQsIDB4ODAsIDB4OWUsIDB4MWYsIDB4NTYsCisJMHgwYiwgMHgyOSwgMHhjNCwgMHhkMiwgMHg0ZiwgMHhmMCwgMHhkYywgMHgxOCwgMHgzMCwgMHgxNCwgMHg3YywgMHg3YiwKKwkweDY2LCAweGM1LCAweDc3LCAweGVjLCAweGUwLCAweDU5LCAweGIzLCAweDY0LCAweGVkLCAweGVjLCAweGQwLCAweDUzLAorCTB4MTUsIDB4MDksIDB4NzcsIDB4OTAsIDB4ZTYsIDB4OTksIDB4ZmEsIDB4ZDksIDB4ZWYsIDB4YzUsIDB4Y2EsIDB4MGUsCisJMHhlNSwgMHhkYiwgMHg5ZSwgMHhhYywgMHgyYywgMHhhYiwgMHhmZCwgMHgyOCwgMHgxOSwgMHg0ZSwgMHg5NCwgMHg5ZiwKKwkweDA0LCAweDJmLCAweDVlLCAweDUxLCAweGZlLCAweGVkLCAweDg4LCAweDIzLCAweDM3LCAweDE5LCAweDQyLCAweDc5LAorCTB4ODgsIDB4MDYsIDB4MWUsIDB4YTgsIDB4MzMsIDB4MWMsIDB4ZWUsIDB4ZjcsIDB4ZmQsIDB4MmUsIDB4MjUsIDB4NTcsCisJMHgxNywgMHgyYiwgMHg3NiwgMHgwNiwgMHhjZSwgMHg2MCwgMHhkNCwgMHg2NSwgMHhlYiwgMHg5ZSwgMHhjZCwgMHg3MCwKKwkweDY1LCAweGUxLCAweDllLCAweDFmLCAweDIxLCAweDNmLCAweDk3LCAweDBlLCAweGVkLCAweGIyLCAweGRkLCAweGYzLAorCTB4MjMsIDB4M2QsIDB4NzMsIDB4ZWMsIDB4ZWIsIDB4NmMsIDB4ZjAsIDB4N2QsIDB4NjEsIDB4ZTgsIDB4MDAsIDB4Y2YsCisJMHgxZCwgMHhmMSwgMHhjYywgMHgzNywgMHg2OSwgMHg1NiwgMHhiNSwgMHg4ZSwgMHg1NSwgMHhiZiwgMHg2ZCwgMHg1ZiwKKwkweDViLCAweGNkLCAweGQ1LCAweDVkLCAweGIzLCAweDViLCAweGFkLCAweDc5LCAweDlkLCAweDg3LCAweDU5LCAweGZlLAorCTB4NTksIDB4ZWYsIDB4OTQsIDB4ZjYsIDB4ZmYsIDB4ZDQsIDB4NWQsIDB4N2IsIDB4NmMsIDB4MWIsIDB4ZjcsIDB4N2QsCisJMHhmZiwgMHhmMiwgMHg0OCwgMHgzZCwgMHhhYywgMHhlNywgMHg0OSwgMHhhNiwgMHg2NCwgMHg1YSwgMHg1MiwgMHg5NCwKKwkweDNiLCAweGU5LCAweDY0LCAweDI5LCAweGIxLCAweDEyLCAweDcwLCAweDllLCAweGJhLCAweDBhLCAweDg4LCAweDlhLAorCTB4YjAsIDB4MjQsIDB4ZmQsIDB4NTgsIDB4MTAsIDB4MGMsIDB4YjQsIDB4YWQsIDB4NjQsIDB4ZWUsIDB4OTIsIDB4YWQsCisJMHgwZSwgMHgyNSwgMHhhNywgMHgxZCwgMHgzMCwgMHg2MCwgMHg2ZSwgMHhkNiwgMHgwMiwgMHg2OSwgMHgwNywgMHhjNywKKwkweDBjLCAweDY1LCAweDI3LCAweGM2LCAweGFhLCAweDg4LCAweDRjLCAweGNjLCAweDZhLCAweDFkLCAweGIwLCAweDYyLAorCTB4MWMsIDB4YTUsIDB4MzgsIDB4NjksIDB4YTcsIDB4ODAsIDB4NjksIDB4ZGEsIDB4MDQsIDB4YzUsIDB4ZmUsIDB4YjEsCisJMHgyNiwgMHgzYiwgMHg3YiwgMHg2MSwgMHg3ZiwgMHgwNCwgMHhkYiwgMHg4MCwgMHgxYSwgMHg1YiwgMHg4MSwgMHhiYSwKKwkweDc2LCAweDhhLCAweDY1LCAweDFiLCAweGUwLCAweDM0LCAweGRiLCAweGIwLCAweDc1LCAweDU4LCAweDBiLCAweGVlLAorCTB4ZmIsIDB4ZjksIDB4M2QsIDB4YzgsIDB4MjMsIDB4NzksIDB4ZDQsIDB4YzMsIDB4NzEsIDB4MDYsIDB4NGMsIDB4ODAsCisJMHg0MCwgMHhkZSwgMHhmMSwgMHg3NywgMHg3NywgMHhiZiwgMHhkZiwgMHhmNywgMHhmNywgMHg3ZCwgMHhiZiwgMHg2ZSwKKwkweDJlLCAweDMzLCAweDFlLCAweGYyLCAweDMzLCAweDdlLCAweGNmLCAweDE1LCAweDYxLCAweDVmLCAweDM3LCAweGQyLAorCTB4ZTEsIDB4MzYsIDB4ODMsIDB4NjcsIDB4YTQsIDB4MGUsIDB4OWUsIDB4ZDUsIDB4MzQsIDB4YzEsIDB4ZjYsIDB4NzgsCisJMHg5OSwgMHg3NywgMHg0YiwgMHhkOCwgMHhjOSwgMHhmMywgMHhjOCwgMHg2MywgMHhkNywgMHgzOSwgMHgwZSwgMHgxMiwKKwkweDc2LCAweDY1LCAweDFhLCAweDVhLCAweDcyLCAweGU3LCAweDM3LCAweDU0LCAweDYwLCAweDc3LCAweGIyLCAweDBjLAorCTB4YmIsIDB4M2QsIDB4ZmYsIDB4OGYsIDB4NjAsIDB4NzcsIDB4NGQsIDB4ZTgsIDB4YmYsIDB4ZGYsIDB4MmUsIDB4MjIsCisJMHg2ZiwgMHg0ZCwgMHhlYiwgMHgwMCwgMHhiYSwgMHg2ZSwgMHgwOSwgMHg3MCwgMHgwNCwgMHgzZiwgMHhiNSwgMHhmMywKKwkweGViLCAweDA0LCAweDllLCAweDhhLCAweGJjLCAweGUyLCAweDUyLCAweGU5LCAweDNiLCAweGUxLCAweGIyLCAweDlmLAorCTB4OTIsIDB4ZWQsIDB4MTIsIDB4ZDgsIDB4MjcsIDB4ZjAsIDB4ZTcsIDB4MzUsIDB4OTYsIDB4OTEsIDB4NDcsIDB4NmYsCisJMHg0YiwgMHg0NiwgMHg0MiwgMHg1NywgMHhhYSwgMHhiNSwgMHg0ZiwgMHg3ZSwgMHhiYiwgMHhjYiwgMHg2ZCwgMHg5ZiwKKwkweDFjLCAweGRkLCAweGExLCAweDdkLCAweDcyLCAweDVhLCAweGRhLCAweDI3LCAweGE5LCAweGVkLCAweGRiLCAweDI3LAorCTB4MDMsIDB4NzUsIDB4NzksIDB4NWQsIDB4OTUsIDB4ZjUsIDB4ZWMsIDB4ZGMsIDB4M2UsIDB4MzEsIDB4MzYsIDB4YjUsCisJMHg0ZiwgMHg0NiwgMHg1ZCwgMHhiZSwgMHgxOCwgMHhjYywgMHhmNywgMHg1NywgMHgyOSwgMHg3NSwgMHgwYywgMHgzYywKKwkweDRlLCAweGMzLCAweDE5LCAweDMwLCAweDNlLCAweDU2LCAweGUzLCAweDE3LCAweGZlLCAweDM4LCAweDYxLCAweGZkLAorCTB4ZDcsIDB4ZmYsIDB4YzcsIDB4YjAsIDB4MWUsIDB4YWMsIDB4ZjMsIDB4NzksIDB4NTcsIDB4ZDYsIDB4MDMsIDB4MjEsCisJMHhmZSwgMHg1MSwgMHg2MCwgMHgzZCwgMHhkOCwgMHhkMCwgMHg3NywgMHhkYSwgMHgzOCwgMHg2NywgMHhiMSwgMHhkYSwKKwkweDc3LCAweDNhLCAweDYyLCAweDM0LCAweGUyLCAweGVkLCAweDdmLCAweGU0LCAweGYyLCAweGE5LCAweGJhLCAweGY5LAorCTB4M2IsIDB4NjgsIDB4OGEsIDB4N2MsIDB4NDcsIDB4YzcsIDB4ZjUsIDB4YjMsIDB4NDAsIDB4NGIsIDB4NzYsIDB4MmEsCisJMHg0NSwgMHhiMCwgMHg5OSwgMHhmMCwgMHhiYywgMHg5MCwgMHhhMCwgMHhiNSwgMHgxYSwgMHg3ZCwgMHg4YiwgMHg5ZiwKKwkweGM3LCAweGViLCAweDdiLCAweGY1LCAweDA5LCAweDIxLCAweGE3LCAweGE0LCAweGZmLCAweDAxLCAweGUzLCAweDI3LAorCTB4N2MsIDB4ZjMsIDB4NjIsIDB4YWMsIDB4Y2MsIDB4NmYsIDB4NTIsIDB4ZmUsIDB4MDgsIDB4YTUsIDB4ZmIsIDB4MzcsCisJMHhmMiwgMHg0MywgMHhkNCwgMHhjYiwgMHhiYywgMHg5ZCwgMHhkOSwgMHgwYSwgMHg5YSwgMHhjNiwgMHhlZiwgMHhlNiwKKwkweDdkLCAweDA5LCAweDU1LCAweGQ5LCAweDVhLCAweGUwLCAweDlmLCAweGE3LCAweDU5LCAweDJmLCAweDE4LCAweDI5LAorCTB4ZWIsIDB4MDQsIDB4ZDUsIDB4N2IsIDB4NzMsIDB4NGUsIDB4ZDgsIDB4NzQsIDB4OWEsIDB4NzcsIDB4MjYsIDB4NjQsCisJMHhlZSwgMHhhOSwgMHgzOCwgMHgwZiwgMHgzZCwgMHg0ZCwgMHhmMywgMHhjZSwgMHg1YSwgMHgzZCwgMHhmOCwgMHg2ZSwKKwkweDBmLCAweGJjLCAweGYwLCAweGNhLCAweDY5LCAweDJhLCAweGVmLCAweDlkLCAweDg1LCAweDljLCAweGYzLCAweGI4LAorCTB4ZTcsIDB4ZGUsIDB4OTUsIDB4NmIsIDB4YzIsIDB4NTIsIDB4OTUsIDB4YjEsIDB4ZjIsIDB4ZmEsIDB4YjgsIDB4NTgsCisJMHhkNywgMHgwZiwgMHg4ZSwgMHg0NCwgMHg1MSwgMHhmYiwgMHg1NiwgMHhhZSwgMHgxNywgMHhhYiwgMHhhZCwgMHg3NywKKwkweDgyLCAweDFjLCAweGQwLCAweDc0LCAweGE4LCAweDZiLCAweGEyLCAweDAxLCAweDhiLCAweDYxLCAweDhmLCAweDdhLAorCTB4MjcsIDB4YjcsIDB4MmMsIDB4YzEsIDB4NzUsIDB4YjUsIDB4YjAsIDB4YTgsIDB4YzgsIDB4OTEsIDB4ZjMsIDB4NGEsCisJMHg4ZSwgMHgxNCwgMHg1YywgMHg3YywgMHhiYywgMHg1ZSwgMHg2ZiwgMHhlZiwgMHhmNSwgMHhkMCwgMHhkYiwgMHhiZCwKKwkweDZhLCAweDllLCAweDMwLCAweGE3LCAweDY3LCAweDU4LCAweDBmLCAweGI5LCAweDFmLCAweDdhLCAweDg4LCAweDg5LAorCTB4YmEsIDB4MjUsIDB4YTksIDB4OGIsIDB4ZTAsIDB4NzcsIDB4OTYsIDB4MzUsIDB4YWYsIDB4ODYsIDB4MTgsIDB4NTcsCisJMHg4ZSwgMHhkMCwgMHg1MywgMHhhYywgMHg2YiwgMHg1ZiwgMHhhMiwgMHg3YiwgMHg5NCwgMHg3ZCwgMHgxNiwgMHg3MSwKKwkweGU1LCAweDk5LCAweDIyLCAweDhmLCAweGRmLCAweDQ3LCAweGE5LCAweDI3LCAweGVjLCAweDg5LCAweDA4LCAweDFkLAorCTB4YTEsIDB4NTMsIDB4MjIsIDB4NjcsIDB4MDYsIDB4ZjEsIDB4M2QsIDB4ZTQsIDB4MWMsIDB4ZGMsIDB4MmIsIDB4OWUsCisJMHgyZiwgMHg3ZCwgMHgxOSwgMHg3NywgMHgyMiwgMHhhNywgMHg2ZSwgMHhmYiwgMHhmOSwgMHhmYiwgMHhiYSwgMHg1NiwKKwkweDJmLCAweDJhLCAweDllLCAweGI5LCAweGFhLCAweDY4LCAweDRhLCAweDljLCAweGUzLCAweGViLCAweDlmLCAweDMxLAorCTB4ZWEsIDB4YWYsIDB4OGYsIDB4MTgsIDB4ZjEsIDB4NjIsIDB4ZGMsIDB4ODgsIDB4YWUsIDB4NjAsIDB4ZGMsIDB4MzMsCisJMHg0NiwgMHhhYywgMHgwOCwgMHgxYiwgMHg1MiwgMHhlMywgMHg4OCwgMHgxZCwgMHgwNiwgMHhiZCwgMHg2ZCwgMHhkMCwKKwkweGQ2LCAweGIxLCAweDg4LCAweDAyLCAweGQ1LCAweGQ0LCAweDQ5LCAweDZjLCAweDYzLCAweGRlLCAweDg3LCAweGFhLAorCTB4ZTYsIDB4YWQsIDB4ZTEsIDB4OGIsIDB4ZWYsIDB4ZjAsIDB4ZjcsIDB4NDQsIDB4MTgsIDB4YTYsIDB4NWEsIDB4YWYsCisJMHg2ZCwgMHg4MywgMHg3ZiwgMHg3ZCwgMHgyMiwgMHg0NSwgMHg5YiwgMHhlOSwgMHhiNSwgMHg3NiwgMHg5ZCwgMHg1ZSwKKwkweDViLCAweGQ4LCAweDcyLCAweGRlLCAweDFmLCAweDk1LCAweGM2LCAweDY1LCAweDNkLCAweGEyLCAweGRmLCAweDExLAorCTB4ZmEsIDB4MmIsIDB4Y2YsIDB4YmIsIDB4NGEsIDB4YjcsIDB4YWQsIDB4YzEsIDB4MjksIDB4OGMsIDB4ZDEsIDB4N2UsCisJMHg3MCwgMHhlZCwgMHgwNywgMHhlYiwgMHg1MiwgMHhmOSwgMHhjMCwgMHgzYSwgMHgzZiwgMHhhMSwgMHgwZCwgMHhmNSwKKwkweDVlLCAweGE2LCAweGNjLCAweDZiLCAweDg1LCAweDhkLCAweGI1LCAweGNlLCAweGYzLCAweDgzLCAweGJkLCAweGY1LAorCTB4YTAsIDB4OTgsIDB4MjMsIDB4ZGIsIDB4NWIsIDB4NTYsIDB4OGMsIDB4YTQsIDB4YWYsIDB4N2IsIDB4YmUsIDB4NTgsCisJMHg1NSwgMHhmZiwgMHhlOSwgMHg1MSwgMHgwNywgMHgzOSwgMHhlMiwgMHg1MSwgMHgwNywgMHhlOSwgMHhhNiwgMHhiNSwKKwkweDgwLCAweDhiLCAweGQ2LCAweDQyLCAweDJlLCAweGJkLCAweDZkLCAweDg4LCAweGVkLCAweDk2LCAweDBlLCAweGU2LAorCTB4MjEsIDB4YjAsIDB4NWIsIDB4ZGEsIDB4YzgsIDB4ZmYsIDB4YjIsIDB4ZGIsIDB4NmUsIDB4YTksIDB4YWQsIDB4NDUsCisJMHgwNywgMHhkZCwgMHg0MSwgMHgzNywgMHg5MywgMHgzNiwgMHg0YywgMHgzYywgMHg1NywgMHhhZSwgMHg2MywgMHhlNywKKwkweDc1LCAweDU3LCAweDZhLCAweDBlLCAweDU3LCAweGVhLCAweGVhLCAweDIzLCAweGJkLCAweGU2LCAweDNiLCAweDVjLAorCTB4MzcsIDB4NWYsIDB4YzgsIDB4YWYsIDB4NDgsIDB4NDMsIDB4OWQsIDB4Y2UsIDB4Y2IsIDB4YWUsIDB4YmEsIDB4NTMsCisJMHhmMywgMHhhYiwgMHhlNSwgMHg2NywgMHg3OCwgMHhkNiwgMHg4OCwgMHhmMCwgMHg3OSwgMHhhNywgMHhjYSwgMHhiYywKKwkweDZjLCAweDVhLCAweGNlLCAweDM3LCAweDUzLCAweDZkLCAweDY3LCAweGY4LCAweDk3LCAweDQ4LCAweGMxLCAweGNlLAorCTB4OWIsIDB4YjcsIDB4ZWYsIDB4Y2MsIDB4N2YsIDB4ZDYsIDB4NWUsIDB4MjMsIDB4NzcsIDB4ZGYsIDB4MzMsIDB4YTUsCisJMHg1ZiwgMHhhYywgMHg0OSwgMHhlNSwgMHg2MSwgMHhmNywgMHgyOSwgMHg3YiwgMHg2ZiwgMHgyYiwgMHg3YywgMHhjNywKKwkweGI5LCAweDI2LCAweGU1LCAweDRiLCAweGI0LCAweGFkLCAweDNjLCAweDAxLCAweGNmLCAweDhmLCAweDlkLCAweDY4LAorCTB4NzIsIDB4NGMsIDB4MTUsIDB4Y2IsIDB4NDIsIDB4YmMsIDB4MGEsIDB4NzgsIDB4YWYsIDB4ZWYsIDB4MGYsIDB4OWUsCisJMHhiZCwgMHg5ZCwgMHgzZCwgMHhiMywgMHhlYSwgMHhmNiwgMHg0YywgMHhlMiwgMHgxNSwgMHg2YywgMHgyZCwgMHhlNCwKKwkweDE3LCAweDRmLCAweGQ2LCAweGU0LCAweDc4LCAweDdmLCAweDE0LCAweDU4LCAweDc0LCAweDc5LCAweGU0LCAweDNkLAorCTB4MjMsIDB4NmYsIDB4YjksIDB4ZDEsIDB4M2MsIDB4YWYsIDB4YmIsIDB4ZjQsIDB4NzIsIDB4Y2MsIDB4YjcsIDB4NTQsCisJMHg3YSwgMHgyMywgMHgzYywgMHgyMCwgMHg2NSwgMHg3MSwgMHhkMSwgMHg1YiwgMHg0NywgMHgzMiwgMHhiNywgMHgzZCwKKwkweGJmLCAweDVhLCAweGQ5LCAweGJiLCAweDc3LCAweDliLCAweGIyLCAweDU3LCAweGY0LCAweGY0LCAweGYwLCAweDFkLAorCTB4MTQsIDB4M2MsIDB4YTAsIDB4ODMsIDB4NTYsIDB4NzIsIDB4YzgsIDB4YmYsIDB4ZmUsIDB4MDUsIDB4ZDAsIDB4M2MsCisJMHhmMywgMHg1OSwgMHg1NywgMHg0ZCwgMHg5YSwgMHhmNywgMHgzZSwgMHg5NiwgMHg2MywgMHgyYSwgMHg4MSwgMHgxOSwKKwkweGM0LCAweGZlLCAweDkwLCAweDViLCAweGQyLCAweGNiLCAweGJjLCAweDA3LCAweGUzLCAweGM3LCAweGFjLCAweGFiLAorCTB4ZjAsIDB4ZjcsIDB4MmEsIDB4ZmYsIDB4NTMsIDB4NWMsIDB4YzksIDB4OTcsIDB4ODMsIDB4ZGIsIDB4ODgsIDB4YWQsCisJMHhlYywgMHg4YywgMHg0ZiwgMHhkYiwgMHhkNiwgMHgzYSwgMHgyMSwgMHhlZSwgMHg4MywgMHg3YywgMHhlMSwgMHhmYiwKKwkweGJhLCAweGE4LCAweGViLCAweDMzLCAweDJkLCAweDJkLCAweGNlLCAweDk3LCAweDdhLCAweDY0LCAweDJjLCAweDBhLAorCTB4YmYsIDB4NzUsIDB4ZDAsIDB4MmIsIDB4MzksIDB4ZTQsIDB4NzIsIDB4ZTMsIDB4YjcsIDB4ZGYsIDB4ZTAsIDB4ZGYsCisJMHhiYywgMHg3OCwgMHg5NCwgMHhjZSwgMHg0NSwgMHg4NywgMHgyZSwgMHgyNywgMHhmNywgMHgyNywgMHg0ZiwgMHhiMCwKKwkweDk1LCAweDRhLCAweGY0LCAweGI3LCAweGUxLCAweDVmLCAweDk0LCAweGYxLCAweDhjLCAweGUyLCAweDlkLCAweDhlLAorCTB4ZDUsIDB4NzgsIDB4ZjksIDB4MGIsIDB4ZGYsIDB4ZWMsIDB4YjksIDB4ZGQsIDB4ZGMsIDB4YzgsIDB4MmYsIDB4NmMsCisJMHhjYiwgMHg1ZiwgMHg4OCwgMHgzOCwgMHhmZiwgMHg3NiwgMHg2MiwgMHgyNiwgMHgzYSwgMHgzNiwgMHgzYywgMHgyNSwKKwkweDZhLCAweDRlLCAweGRkLCAweDc4LCAweDcwLCAweDY3LCAweGUyLCAweGMzLCAweGMwLCAweDg3LCAweGUxLCAweDNhLAorCTB4NWUsIDB4ZjUsIDB4ZDEsIDB4ZmQsIDB4ZmQsIDB4YjUsIDB4NzAsIDB4NmQsIDB4ZjMsIDB4ZjQsIDB4NTUsIDB4NzksCisJMHhjNywgMHg4MSwgMHgxMSwgMHhmMywgMHg4NywgMHg5ZiwgMHhmYSwgMHgyMSwgMHg5YSwgMHhiZiwgMHgwOCwgMHgxYywKKwkweDM2LCAweDE4LCAweGRiLCAweDQ2LCAweDY5LCAweDIxLCAweDg4LCAweGJhLCAweDIyLCAweDUxLCAweDliLCAweGEzLAorCTB4ZTIsIDB4ODYsIDB4YjIsIDB4NTYsIDB4NjgsIDB4NWUsIDB4ZDQsIDB4NDAsIDB4OGUsIDB4ODUsIDB4NmUsIDB4ZjIsCisJMHhiYywgMHhlNywgMHg4YiwgMHgyOSwgMHgzYSwgMHhjNSwgMHgzMiwgMHhmNiwgMHhkNCwgMHg0YSwgMHg0NSwgMHg3NywKKwkweGFmLCAweGFmLCAweDgzLCAweGFjLCAweGM2LCAweGYxLCAweDliLCAweDAyLCAweGM3LCAweDg3LCAweDM2LCAweGM1LAorCTB4ZjEsIDB4YzMsIDB4NjUsIDB4MWMsIDB4ZmYsIDB4NDQsIDB4YWYsIDB4YzQsIDB4ZTcsIDB4NjcsIDB4ZjksIDB4NWUsCisJMHg1ZCwgMHg3NCwgMHg1MCwgMHhkYywgMHgzNywgMHhjNSwgMHhkZiwgMHhkYiwgMHhlOSwgMHhhMCwgMHhlYywgMHg2MSwKKwkweGMxLCAweGNmLCAweDY2LCAweDFlLCAweDlmLCAweDQ5LCAweGQxLCAweDUzLCAweDE3LCAweDUzLCAweGJlLCAweGI4LAorCTB4YTgsIDB4NWYsIDB4NzAsIDB4ZjcsIDB4ZTgsIDB4ZDAsIDB4ZDcsIDB4NjMsIDB4NWMsIDB4MjMsIDB4ZmMsIDB4ZDcsCisJMHg3YywgMHg0OSwgMHhkNiwgMHg1YywgMHhlNSwgMHgyNSwgMHg3ZiwgMHhhMiwgMHg3NywgMHhjMywgMHg4MywgMHgzNSwKKwkweGY4LCAweDVmLCAweDZkLCAweDNiLCAweDllLCAweDU2LCAweDMyLCAweGYwLCAweGQ4LCAweDI2LCAweDdlLCAweDhkLAorCTB4N2EsIDB4YmMsIDB4ZWMsIDB4ZjEsIDB4ZDAsIDB4ODcsIDB4N2YsIDB4YmQsIDB4NTcsIDB4YzYsIDB4YTksIDB4MzYsCisJMHhmMywgMHg2YiwgMHhiOCwgMHg3MSwgMHhiNCwgMHgyYSwgMHg2ZSwgMHhjZiwgMHg3YywgMHhmZiwgMHhiZiwgMHg1NSwKKwkweDFjLCAweGZkLCAweGE1LCAweDVlLCAweDI5LCAweDJmLCAweDUwLCAweDFmLCAweDk4LCAweDYwLCAweDM4LCAweDljLAorCTB4NjQsIDB4NWQsIDB4NjUsIDB4OTAsIDB4OWEsIDB4NWYsIDB4ZDYsIDB4NmIsIDB4MWQsIDB4MTQsIDB4ZmMsIDB4ZDYsCisJMHhlZCwgMHhhNywgMHgzOSwgMHhhNywgMHg2YSwgMHhiYiwgMHhkMywgMHhhZSwgMHgzNSwgMHg5ZCwgMHgxMywgMHgzNiwKKwkweDRlLCAweDYzLCAweDdhLCAweDZiLCAweDljLCAweDczLCAweDM1LCAweDU0LCAweDIzLCAweDEzLCAweDZhLCAweGYxLAorCTB4MGQsIDB4YmQsIDB4NGYsIDB4YjAsIDB4YmYsIDB4NjQsIDB4NDgsIDB4M2QsIDB4NzgsIDB4OWEsIDB4ZjUsIDB4ZGIsCisJMHg5ZCwgMHhjNiwgMHg4YiwgMHgzZSwgMHhhYSwgMHg4ZSwgMHg1OCwgMHhkYiwgMHg1MywgMHhhMywgMHhmNiwgMHgzYiwKKwkweGY2LCAweDQxLCAweGRhLCAweDFjLCAweGM5LCAweDU3LCAweDFmLCAweDEyLCAweGJjLCAweGUwLCAweGRjLCAweDY0LAorCTB4ODksIDB4NjIsIDB4ZTEsIDB4NGUsIDB4NGEsIDB4NGUsIDB4ZjIsIDB4YjMsIDB4YTcsIDB4MWQsIDB4YjYsIDB4YmQsCisJMHhmYywgMHg5NCwgMHg2MiwgMHhmYSwgMHg0ZCwgMHg0ZSwgMHhlZSwgMHg1MiwgMHhmYSwgMHhhMiwgMHhmNiwgMHhhNywKKwkweGI3LCAweGE4LCAweDNjLCAweDg3LCAweDY3LCAweDQ1LCAweDVjLCAweDUyLCAweGY2LCAweGM2LCAweGUwLCAweGVmLAorCTB4MmIsIDB4ZmEsIDB4ZGUsIDB4Y2YsIDB4OGEsIDB4ZjgsIDB4NjgsIDB4ZjIsIDB4NjIsIDB4YjMsIDB4MWEsIDB4ZDcsCisJMHhlZSwgMHgxYSwgMHg4NywgMHgzMSwgMHhlZCwgMHg2YSwgMHgyYywgMHhlZSwgMHhhOSwgMHg3NSwgMHg4YSwgMHg1NiwKKwkweGM1LCAweDZmLCAweDFmLCAweDExLCAweDc1LCAweDYwLCAweGIyLCAweDU2LCAweDBmLCAweGJmLCAweDlmLCAweGE2LAorCTB4YjksIDB4ZjIsIDB4NWEsIDB4ZGEsIDB4NzksIDB4ZWMsIDB4Y2YsIDB4NGEsIDB4MTEsIDB4NjEsIDB4Y2IsIDB4YjUsCisJMHhiMywgMHhjZSwgMHg4YiwgMHg3OSwgMHhkNywgMHhjZiwgMHgwOSwgMHg2YiwgMHhmMSwgMHg4YiwgMHhmOCwgMHgxMCwKKwkweDdmLCAweDU3LCAweGNmLCAweDM5LCAweDU5LCAweDllLCAweDEzLCAweDcyLCAweDM0LCAweGVjLCAweDkwLCAweGJjLAorCTB4OTcsIDB4MWUsIDB4ZDcsIDB4ZWUsIDB4MWEsIDB4YTcsIDB4NzksIDB4ODUsIDB4OGUsIDB4M2YsIDB4ZmMsIDB4ODAsCisJMHhlNywgMHhmMSwgMHgzNywgMHgyYSwgMHg4NywgMHhkNywgMHgxNCwgMHhmMSwgMHg1MywgMHg5OSwgMHhhMywgMHhhMSwKKwkweGJmLCAweGMzLCAweGJmLCAweDhjLCAweDljLCAweDBhLCAweGU0LCAweDQ5LCAweGI4LCAweGY5LCAweDhkLCAweDVjLAorCTB4NmYsIDB4MDAsIDB4YjIsIDB4YTgsIDB4ODgsIDB4YjgsIDB4MjksIDB4ZTIsIDB4MTUsIDB4OGQsIDB4NzQsIDB4ZTcsCisJMHhiZCwgMHhjOCwgMHhjZCwgMHhkZiwgMHg4MSwgMHgwZSwgMHhiYSwgMHgxZCwgMHhmYSwgMHhiMywgMHgzYywgMHhlOCwKKwkweGNmLCAweGZkLCAweDdjLCAweGQ0LCAweGMxLCAweGExLCAweDFlLCAweDJlLCAweDM1LCAweDYxLCAweDUwLCAweDg5LAorCTB4NmQsIDB4MDUsIDB4ODMsIDB4ZjIsIDB4YTYsIDB4OGYsIDB4OWUsIDB4NzIsIDB4ZWMsIDB4ZjAsIDB4MGEsIDB4YzksCisJMHg5YSwgMHhjOSwgMHhkOCwgMHhhMiwgMHgzZCwgMHhiMSwgMHg0ZSwgMHhmYiwgMHg0NSwgMHhjZCwgMHgzOCwgMHg3YSwKKwkweDFmLCAweGU0LCAweDU5LCAweDA2LCAweDlmLCAweGE0LCAweDA5LCAweGI2LCAweDhmLCAweGQ4LCAweGZlLCAweDljLAorCTB4NDUsIDB4YmMsIDB4NDUsIDB4ZWYsIDB4MGIsIDB4NmEsIDB4ZTAsIDB4ZjEsIDB4MzksIDB4YzEsIDB4NzAsIDB4N2EsCisJMHg2YywgMHgzNywgMHhiNSwgMHg0NSwgMHhmOCwgMHg5ZSwgMHgxMywgMHhlMCwgMHg0ZiwgMHhlOCwgMHhlNywgMHg0NSwKKwkweDUxLCAweGI2LCAweDkzLCAweDYwLCAweGIzLCAweDllLCAweDljLCAweGI1LCAweGNkLCAweDNjLCAweDE5LCAweDNjLAorCTB4MTYsIDB4YjYsIDB4MmIsIDB4ZWUsIDB4ODMsIDB4ZWIsIDB4MjMsIDB4NjYsIDB4MTMsIDB4ZDUsIDB4ZDYsIDB4ZTQsCisJMHgzZSwgMHgyYiwgMHhlYSwgMHgxNCwgMHhkZiwgMHgwZCwgMHhkZiwgMHg0NywgMHg0NiwgMHgzZiwgMHhmOCwgMHgxNSwKKwkweGY2LCAweGVkLCAweDVlLCAweDE1LCAweDI3LCAweDNhLCAweGNiLCAweGRmLCAweGM3LCAweGQ1LCAweGY3LCAweGFmLAorCTB4ODgsIDB4ZmQsIDB4OTQsIDB4ZGYsIDB4MzUsIDB4N2UsIDB4ZTMsIDB4ZWYsIDB4NWYsIDB4NWEsIDB4YzgsIDB4ZjksCisJMHhhMSwgMHhjYSwgMHg1OSwgMHhhOSwgMHhjYSwgMHgwNSwgMHgwOSwgMHg4ZCwgMHgxYSwgMHg1ZiwgMHhhMSwgMHhkMywKKwkweDJiLCAweDliLCAweGY5LCAweDVmLCAweGJjLCAweDZhLCAweDVkLCAweGJiLCAweGI3LCAweDU5LCAweGViLCAweGZhLAorCTB4MDcsIDB4YmIsIDB4NjUsIDB4NmQsIDB4OTksIDB4N2IsIDB4MmUsIDB4ZmYsIDB4YzksIDB4NzMsIDB4ZjEsIDB4ZDIsCisJMHhjOSwgMHhlYSwgMHhmNCwgMHg0NCwgMHg1ZSwgMHg2ZiwgMHg4OSwgMHhmZSwgMHgyOSwgMHhmYywgMHg0OSwgMHhiYSwKKwkweDFlLCAweDBjLCAweGE5LCAweDljLCAweDI1LCAweGU0LCAweDI4LCAweGRkLCAweGE3LCAweGYwLCAweDVhLCAweGYzLAorCTB4N2UsIDB4ZjIsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODksIDB4NWMsIDB4NGQsIDB4MjksIDB4M2IsIDB4MDYsIDB4MTUsCisJMHgzYywgMHgwMCwgMHhiMywgMHg5MCwgMHgwYiwgMHg2NiwgMHg3ZCwgMHgyZSwgMHg5OCwgMHgxOSwgMHhlYSwgMHg3YiwKKwkweGE3LCAweDM4LCAweDNlLCAweGJkLCAweGYyLCAweDk5LCAweDZlLCAweDU5LCAweDJmLCAweDhlLCAweDU4LCAweGUyLAorCTB4YmMsIDB4ZmEsIDB4YmUsIDB4ZDUsIDB4N2EsIDB4N2YsIDB4Y2UsIDB4NmIsIDB4MTUsIDB4ZmUsIDB4MjYsIDB4ZDcsCisJMHg1YSwgMHg1ZiwgMHgyNywgMHg3MiwgMHg1YSwgMHg4MiwgMHhmNSwgMHgzMCwgMHhmOCwgMHg4ZSwgMHhlYiwgMHgzYywKKwkweGU2LCAweDM4LCAweGU2LCAweDlhLCAweGUzLCAweDg4LCAweDZiLCAweDhlLCAweDc3LCAweDM3LCAweDk4LCAweDIzLAorCTB4ZjMsIDB4ZjgsIDB4ZTIsIDB4NjksIDB4ZmUsIDB4YmYsIDB4ZGQsIDB4YjksIDB4Y2EsIDB4NzksIDB4Y2UsIDB4MGIsCisJMHg3OCwgMHhiNiwgMHg1MywgMHgzYSwgMHgxOCwgMHg1MiwgMHhiMiwgMHhlMywgMHhmYiwgMHhhYSwgMHgxNiwgMHhkZCwKKwkweDZiLCAweGNlLCAweGZmLCAweDQwLCAweDhkLCAweGY3LCAweGNkLCAweDhkLCAweGFiLCAweGVlLCAweGZhLCAweGUzLAorCTB4OTcsIDB4MjgsIDB4MjYsIDB4ZWIsIDB4YzgsIDB4MTUsIDB4NmQsIDB4N2YsIDB4YjUsIDB4ODEsIDB4MWYsIDB4ZmEsCisJMHg0MSwgMHhhMSwgMHhmZiwgMHhjYywgMHhjYiwgMHg3OCwgMHhkMCwgMHg4MCwgMHhlYywgMHhiZiwgMHgxNiwgMHhhMCwKKwkweGQ1LCAweDcyLCAweDJkLCAweGFmLCAweDVmLCAweGQ1LCAweGVlLCAweGRjLCAweDFmLCAweGJjLCAweGIzLCAweDc1LAorCTB4YmMsIDB4MzgsIDB4ZmYsIDB4ODgsIDB4ZjAsIDB4ZTUsIDB4YzksIDB4ZjgsIDB4NTEsIDB4NDIsIDB4ZDUsIDB4MjMsCisJMHhkYiwgMHgxNiwgMHg3MiwgMHgwMywgMHgwYSwgMHg2YiwgMHhmMCwgMHhiZiwgMHgzNiwgMHhhYSwgMHhkZCwgMHhjNSwKKwkweGI1LCAweGYwLCAweDAzLCAweDZhLCAweDNiLCAweGZlLCAweDg0LCAweGUwLCAweDg5LCAweGQyLCAweDNmLCAweDI2LAorCTB4ZWIsIDB4NmYsIDB4MGIsIDB4NmIsIDB4MjcsIDB4NDUsIDB4Y2QsIDB4NmIsIDB4NTQsIDB4ZDUsIDB4ZjEsIDB4MjYsCisJMHhhOSwgMHg0MywgMHhlOCwgMHhiOSwgMHhiNywgMHg1ZiwgMHg3ZiwgMHhmYiwgMHg1YywgMHg3MCwgMHhlNywgMHhmNSwKKwkweGI3LCAweGVlLCAweDZiLCAweDc2LCAweDU2LCAweDdmLCAweDZiLCAweGYyLCAweGRhLCAweDhkLCAweDY1LCAweDU5LAorCTB4N2YsIDB4NWIsIDB4MWQsIDB4OTMsIDB4OTEsIDB4ZmUsIDB4YzAsIDB4YTQsIDB4NGIsIDB4N2YsIDB4OTAsIDB4ZmEsCisJMHhmYSwgMHg2ZiwgMHhiOSwgMHhmMiwgMHhiNywgMHg2NSwgMHg2ZCwgMHg2ZCwgMHhhMSwgMHhhYywgMHhiMywgMHhjYSwKKwkweGRhLCAweDVhLCAweDk5LCAweGVmLCAweGVkLCAweGVlLCAweDAzLCAweDIzLCAweDYzLCAweDNmLCAweGYyLCAweDM5LAorCTB4OWQsIDB4MzUsIDB4YjEsIDB4MWYsIDB4NTksIDB4NTMsIDB4NmIsIDB4MTksIDB4OGQsIDB4NmMsIDB4MzgsIDB4ZDEsCisJMHhlNywgMHhhMiwgMHg4ZiwgMHhiYSwgMHgyMiwgMHg4YywgMHhiYiwgMHhlZCwgMHgwZCwgMHhmYSwgMHgyMSwgMHg0NCwKKwkweDFhLCAweGY0LCAweDQzLCAweDcwLCAweGYzLCAweDdlLCAweGI3LCAweDhlLCAweDA1LCAweDlkLCAweDE4LCAweGIyLAorCTB4MTEsIDB4YmEsIDB4MzAsIDB4ZmEsIDB4MTksIDB4ODQsIDB4ZTksIDB4NzQsIDB4NTksIDB4ZjcsIDB4YmMsIDB4OGYsCisJMHgxMiwgMHg0YSwgMHhmNywgMHgzYywgMHhiZCwgMHhhMiwgMHhmOSwgMHhkMSwgMHg0OCwgMHgwZCwgMHgzZiwgMHhmMiwKKwkweGQyLCAweDQ1LCAweDZkLCAweDk1LCAweGU3LCAweGEzLCAweGU5LCAweDM1LCAweGU1LCAweGEyLCAweGQ3LCAweDk0LAorCTB4MDcsIDB4YmQsIDB4OGEsIDB4NjcsIDB4MzQsIDB4OTgsIDB4ZjcsIDB4ZjcsIDB4ZDUsIDB4MzUsIDB4ZjgsIDB4NGYsCisJMHg4NCwgMHhkMCwgMHhiMywgMHg4NSwgMHg3OSwgMHg2YSwgMHg1MCwgMHhlOSwgMHg3ZiwgMHgyZSwgMHg3YSwgMHgzZCwKKwkweGM1LCAweGY0LCAweGFhLCAweGNmLCAweDYzLCAweGJlLCAweDBkLCAweDczLCAweDQxLCAweDk1LCAweGNlLCAweDM4LAorCTB4ZTgsIDB4M2IsIDB4NzQsIDB4ZjEsIDB4MWIsIDB4MjIsIDB4NGYsIDB4YWEsIDB4ZGEsIDB4NWUsIDB4ZDQsIDB4ZmEsCisJMHhjNCwgMHgzZSwgMHg0MSwgMHg0YiwgMHhkNywgMHhmZCwgMHhjOCwgMHg1YiwgMHhkMSwgMHhlNywgMHg0YywgMHhlNSwKKwkweDI3LCAweGQzLCAweGIwLCAweDY4LCAweGFlLCAweGQyLCAweDM5LCAweDJhLCAweGZhLCAweDg2LCAweGM4LCAweGYxLAorCTB4NzUsIDB4Y2QsIDB4ZWQsIDB4NDMsIDB4OWUsIDB4OWIsIDB4M2UsIDB4YWYsIDB4NjUsIDB4ZTYsIDB4YjUsIDB4MmEsCisJMHg3ZiwgMHhjNiwgMHhlNSwgMHhhYSwgMHg5ZSwgMHg4MywgMHhmMCwgMHgxZCwgMHg3NSwgMHgyNiwgMHgwYywgMHgyNywKKwkweDJlLCAweDcyLCAweDRjLCAweDdiLCAweDFjLCAweGY4LCAweGM5LCAweGEyLCAweDRjLCAweGZiLCAweDNkLCAweDA5LAorCTB4ZTQsIDB4MzMsIDB4ZjcsIDB4MmMsIDB4NTksIDB4NzQsIDB4M2MsIDB4NzMsIDB4ZmYsIDB4NWQsIDB4MTIsIDB4NTcsCisJMHhjZSwgMHg4YSwgMHgzZSwgMHg5MiwgMHhlOCwgMHg2NywgMHgxNiwgMHg2MywgMHhmOSwgMHgxYywgMHhmNSwgMHg0ZiwKKwkweGQzLCAweGY5LCAweDYyLCAweDBiLCAweDE1LCAweDU4LCAweGJiLCAweGY3LCAweDNiLCAweDc5LCAweGUxLCAweGViLAorCTB4NjMsIDB4OWUsIDB4OTQsIDB4NDUsIDB4MmYsIDB4NTEsIDB4NjMsIDB4YjksIDB4OTksIDB4ZWYsIDB4ZGIsIDB4NGYsCisJMHhhYiwgMHhiOSwgMHgzMSwgMHhkMSwgMHgxMywgMHg0YSwgMHhmNiwgMHgxNywgMHhjMSwgMHg1OCwgMHgxZiwgMHhmNSwKKwkweDNhLCAweDA3LCAweGZiLCAweGE4LCAweGVkLCAweGIzLCAweDIyLCAweGM3LCAweGIyLCAweDkwLCAweDNkLCAweDJiLAorCTB4M2YsIDB4ZjMsIDB4MGYsIDB4YTgsIDB4NjcsIDB4ZjAsIDB4ZjMsIDB4OGEsIDB4N2YsIDB4NGEsIDB4OTEsIDB4NWUsCisJMHhjYiwgMHg2NSwgMHhjYiwgMHhiOSwgMHhmZiwgMHhiYywgMHhmNSwgMHg5NSwgMHhhMywgMHgzYiwgMHhkMiwgMHg1NywKKwkweDUyLCAweDg5LCAweDhhLCAweGJlLCAweGUyLCAweGJlLCAweDc3LCAweDM5LCAweDA3LCAweGE2LCAweDVmLCAweGY2LAorCTB4N2IsIDB4MDAsIDB4MGMsIDB4ZGEsIDB4YTEsIDB4OGIsIDB4MjUsIDB4MDAsIDB4NGIsIDB4NjMsIDB4YzYsIDB4MGUsCisJMHg0NSwgMHhmZCwgMHg1MywgMHhiNCwgMHg1MCwgMHgxYywgMHgzMiwgMHg5MiwgMHg1OSwgMHhlOCwgMHhjYywgMHhmYywKKwkweDk5LCAweDhmLCAweGVlLCAweDkxLCAweDNlLCAweDFhLCAweDdkLCAweDBkLCAweGY4LCAweGNhLCAweDZlLCAweDFlLAorCTB4ZmYsIDB4N2EsIDB4YmYsIDB4Y2MsIDB4Y2IsIDB4NzYsIDB4OWYsIDB4ZWYsIDB4ZTIsIDB4ZjMsIDB4N2IsIDB4NDIsCisJMHhkNSwgMHhlNywgMHg3NywgMHhmMSwgMHhmOSwgMHhkZSwgMHgwNCwgMHhmNiwgMHhkMCwgMHg1OCwgMHg4MiwgMHg1ZiwKKwkweGQyLCAweGExLCAweDM0LCAweGVmLCAweGNkLCAweDQyLCAweDkxLCAweDY1LCAweGViLCAweGNiLCAweGNjLCAweDQ3LAorCTB4NTcsIDB4ZjQsIDB4YjgsIDB4M2UsIDB4ZDQsIDB4ZWMsIDB4ODgsIDB4M2QsIDB4MzEsIDB4NzgsIDB4Y2MsIDB4YjksCisJMHhjYywgMHgwNCwgMHg4ZiwgMHgxYiwgMHgyNCwgMHhmZiwgMHhjYiwgMHg2YywgMHg4YiwgMHhhZSwgMHg2OCwgMHg1YywKKwkweGQ1LCAweGY5LCAweGY2LCAweGRmLCAweGU4LCAweDkzLCAweDM5LCAweDU1LCAweGRmLCAweGRkLCAweDIzLCAweGUxLAorCTB4ZTcsIDB4MDgsIDB4OWUsIDB4NzIsIDB4OWUsIDB4ZTEsIDB4ZjIsIDB4YmMsIDB4YzAsIDB4NDMsIDB4N2IsIDB4ZGEsCisJMHgyYSwgMHgzZiwgMHhiZiwgMHgxMywgMHg3OCwgMHhkNSwgMHg4YSwgMHhiYywgMHhkOSwgMHhjMCwgMHgxMiwgMHhmMywKKwkweGM1LCAweDE5LCAweGM3LCAweDRjLCAweDk3LCAweDczLCAweGQ1LCAweDFlLCAweDFmLCAweDkwLCAweGQ3LCAweGJmLAorCTB4ZDksIDB4MjcsIDB4ZmIsIDB4ODMsIDB4N2UsIDB4NmIsIDB4NDAsIDB4ZjcsIDB4NDgsIDB4OTQsIDB4MzIsIDB4MDcsCisJMHhmOSwgMHhjYiwgMHgzZSwgMHgwMSwgMHgxYiwgMHhmZiwgMHgzMiwgMHhmOCwgMHhhNSwgMHhjMSwgMHhkZiwgMHg3OSwKKwkweDNkLCAweDA5LCAweGNjLCAweGYxLCAweDRhLCAweDlmLCAweGVlLCAweDE3LCAweDIzLCAweGQ3LCAweDE1LCAweGU3LAorCTB4ZjksIDB4NDYsIDB4NzgsIDB4NWQsIDB4ZmEsIDB4ZmMsIDB4MGMsIDB4MWYsIDB4N2IsIDB4ZWQsIDB4MmYsIDB4ZWUsCisJMHhkNSwgMHg5NiwgMHg5MCwgMHhmZCwgMHhjNSwgMHhkYSwgMHgxMiwgMHhjOSwgMHgwOSwgMHhiOSwgMHhjZiwgMHgxNSwKKwkweDlmLCAweDZlLCAweGE4LCAweGVjLCAweGQzLCAweDNkLCAweDlmLCAweGI5LCAweGQ1LCAweDA3LCAweGZmLCAweDg2LAorCTB4YjEsIDB4YzQsIDB4ZmIsIDB4MWQsIDB4N2MsIDB4OWUsIDB4YzcsIDB4YTIsIDB4NTYsIDB4MjEsIDB4Y2QsIDB4OWYsCisJMHgxZCwgMHgyYSwgMHhhZiwgMHhhNywgMHgxZSwgMHg1NywgMHg2NCwgMHg5ZSwgMHg4NCwgMHg5NiwgMHg1YiwgMHhiOCwKKwkweGY2LCAweDQzLCAweGJlLCAweDg3LCAweDk0LCAweDVkLCAweDhkLCAweDlmLCAweDQzLCAweDc1LCAweDc5LCAweDMwLAorCTB4ZjUsIDB4MzgsIDB4YjYsIDB4OTksIDB4MWYsIDB4NTYsIDB4YzQsIDB4MTMsIDB4M2QsIDB4ZjAsIDB4NmMsIDB4YjMsCisJMHg3ZSwgMHgwNiwgMHhkNywgMHg4NCwgMHgxZiwgMHgyZCwgMHg1NiwgMHg0NywgMHhhZiwgMHhhMCwgMHhlMywgMHgwMCwKKwkweGZkLCAweGNlLCAweDYyLCAweDhhLCAweDc2LCAweGYxLCAweDVlLCAweGZkLCAweGE2LCAweGYxLCAweDAwLCAweGUyLAorCTB4ZWQsIDB4MjQsIDB4NzMsIDB4OWUsIDB4MTgsIDB4YzYsIDB4MTksIDB4NjcsIDB4ZTIsIDB4OTQsIDB4MTEsIDB4MDEsCisJMHhiZiwgMHgyYywgMHgwNSwgMHg5YywgMHgwZSwgMHg2YSwgMHg2NiwgMHg1YSwgMHhmZCwgMHg2NSwgMHgxYSwgMHg2NSwKKwkweGZiLCAweDBmLCAweDM0LCAweGViLCAweDg0LCAweGUyLCAweDA0LCAweDdhLCAweGIzLCAweGNkLCAweDQzLCAweGFjLAorCTB4MTMsIDB4YzcsIDB4OGEsIDB4YzAsIDB4NjcsIDB4ODMsIDB4M2UsIDB4OWYsIDB4MjMsIDB4ZmEsIDB4NWMsIDB4NmUsCisJMHhkNCwgMHhmYywgMHgyNiwgMHgzOSwgMHg1NiwgMHhlNSwgMHg3NywgMHhkYiwgMHg4YywgMHhmMiwgMHgzYywgMHhlMiwKKwkweGM1LCAweDJmLCAweGQzLCAweGZiLCAweGEyLCAweGNmLCAweDA5LCAweGUwLCAweGE4LCAweGY3LCAweGZkLCAweDRiLAorCTB4NzQsIDB4MzIsIDB4ODEsIDB4NzksIDB4NmYsIDB4OWYsIDB4M2UsIDB4OGYsIDB4ZWYsIDB4ODgsIDB4M2UsIDB4ZGIsCisJMHgzYywgMHhlOCwgMHhmMywgMHhjNSwgMHg3ZSwgMHg4OSwgMHgzNywgMHgyNSwgMHhjNiwgMHhkMSwgMHgzNiwgMHg5YSwKKwkweGNiLCAweDIyLCAweDA3LCAweGVjLCAweGQzLCAweGU4LCAweDNiLCAweDk1LCAweDRkLCAweDMyLCAweDVmLCAweDRhLAorCTB4NTYsIDB4ZjgsIDB4ZDIsIDB4ODUsIDB4MjgsIDB4MWIsIDB4YzMsIDB4NGMsIDB4ZTMsIDB4ZTgsIDB4Y2IsIDB4YTYsCisJMHhmMiwgMHg3ZSwgMHhiMCwgMHg4ZSwgMHgwMSwgMHgxYSwgMHg1ZCwgMHg2ZSwgMHhlNywgMHg2YiwgMHg2OSwgMHgzZCwKKwkweDNhLCAweDE1LCAweDUxLCAweGI1LCAweGZlLCAweGI2LCAweDE1LCAweDYzLCAweGZlLCAweDc4LCAweDllLCAweDY5LAorCTB4MzksIDB4OWQsIDB4YmQsIDB4OTcsIDB4MGEsIDB4YzEsIDB4MjEsIDB4MWEsIDB4NTksIDB4ZDYsIDB4ZmQsIDB4NGQsCisJMHg0NCwgMHhjZSwgMHhjNiwgMHhhMCwgMHhlNCwgMHg0OSwgMHg3YSwgMHhkZCwgMHg5ZiwgMHgxMCwgMHhiZSwgMHgwYiwKKwkweGViLCAweGQyLCAweGM3LCAweGI1LCAweGVlLCAweGY2LCAweDJkLCAweGY4LCAweGQyLCAweDI1LCAweDQ1LCAweGIzLAorCTB4YTUsIDB4Y2IsIDB4ZDEsIDB4MzAsIDB4YTUsIDB4YTIsIDB4NTMsIDB4YWYsIDB4ZjQsIDB4MDMsIDB4ZmYsIDB4NDcsCisJMHgyZSwgMHhjMSwgMHgwZiwgMHgwNywgMHgxZSwgMHg2ZCwgMHg1MSwgMHgyMiwgMHg1MywgMHgwYiwgMHg4YiwgMHgyMSwKKwkweDVlLCAweDM3LCAweDdlLCAweDJmLCAweDdkLCAweDMwLCAweDE3LCAweDdlLCAweDQwLCAweGM4LCAweGZlLCAweGQxLAorCTB4NGIsIDB4M2MsIDB4NGUsIDB4Y2EsIDB4MjYsIDB4YzUsIDB4MzcsIDB4YmMsIDB4ZjAsIDB4NTAsIDB4ZjcsIDB4YzUsCisJMHhkNCwgMHhiOCwgMHgyOCwgMHg3MywgMHgzZCwgMHg1OSwgMHg3ZiwgMHgzMywgMHgxMywgMHhmZSwgMHg1YSwgMHg5YywKKwkweGJjLCAweGU2LCAweDNiLCAweGJhLCAweDY4LCAweGQxLCAweGIxLCAweDhjLCAweGZkLCAweGY1LCAweDE0LCAweDRkLAorCTB4MzEsIDB4NWQsIDB4YmIsIDB4ZTUsIDB4MDUsIDB4OGYsIDB4MjcsIDB4ZTAsIDB4ZDksIDB4MzQsIDB4ZDMsIDB4M2UsCisJMHhkYiwgMHhjZCwgMHg1OSwgMHg0YiwgMHhlNiwgMHhkZCwgMHg4OSwgMHhkZSwgMHg3MywgMHgzOCwgMHg0NiwgMHhkZCwKKwkweGYxLCAweDVmLCAweGY1LCAweDZiLCAweDc5LCAweDkwLCAweGNjLCAweGEyLCAweDhlLCAweDkwLCAweDNmLCAweGYzLAorCTB4M2MsIDB4MWUsIDB4YjksIDB4ZmYsIDB4MzksIDB4ZGMsIDB4MDcsIDB4ZjIsIDB4MGUsIDB4NzMsIDB4ZTcsIDB4ZTMsCisJMHg1NSwgMHhiOSwgMHhhZiwgMHgyMywgMHg3YywgMHg2ZiwgMHhkNCwgMHhkZCwgMHgxZiwgMHgyYiwgMHg0ZSwgMHhmMiwKKwkweGZlLCAweDc2LCAweDA5LCAweGRlLCAweDJjLCAweGY3LCAweDczLCAweDlhLCAweGNlLCAweDc5LCAweGYyLCAweDE1LAorCTB4YjksIDB4MmYsIDB4NDksIDB4MTcsIDB4N2QsIDB4MjcsIDB4MDUsIDB4N2QsIDB4NGYsIDB4OGIsIDB4ZmQsIDB4NDgsCisJMHhlNiwgMHgwYywgMHhkNiwgMHhkNywgMHhiNCwgMHhlZiwgMHg4MSwgMHhlZCwgMHhlYywgMHg1YywgMHg0MCwgMHhlNywKKwkweDA2LCAweGYyLCAweGY3LCAweDBmLCAweGZiLCAweDQ1LCAweDVlLCAweDIyLCAweGVjLCAweGVmLCAweDFjLCAweDNlLAorCTB4YTcsIDB4ZTksIDB4NzksIDB4OTYsIDB4ZWIsIDB4MmYsIDB4NjQsIDB4NWEsIDB4ZTgsIDB4NmEsIDB4YjYsIDB4ODUsCisJMHhkZSwgMHhjOSwgMHgwZSwgMHhkMSwgMHg5NSwgMHhjNSwgMHg2ZSwgMHgzYSwgMHhjNywgMHgzYSwgMHhmMywgMHgzOSwKKwkweDI3LCAweDYwLCAweGE1LCAweGE5LCAweDFiLCAweGYxLCAweDQ1LCAweGU0LCAweDBjLCAweDMxLCAweGRkLCAweDYxLAorCTB4M2MsIDB4ZjQsIDB4YmYsIDB4ZTgsIDB4NWUsIDB4YzYsIDB4MzksIDB4ZDYsIDB4YmQsIDB4NWIsIDB4ZTksIDB4M2QsCisJMHg3ZSwgMHg2NiwgMHgzYSwgMHhhMywgMHg3MywgMHgxZCwgMHhlMCwgMHg5MywgMHgxZiwgMHgyYiwgMHhlYiwgMHhhZiwKKwkweDViLCAweGUzLCAweDg4LCAweGI5LCAweDA1LCAweDhlLCAweDRjLCAweDhiLCAweGY4LCAweGQ2LCAweGMyLCAweDIyLAorCTB4ZmYsIDB4YmUsIDB4MDgsIDB4ZmYsIDB4MzksIDB4YzMsIDB4OWIsIDB4ZjksIDB4ZjMsIDB4OTMsIDB4MDEsIDB4OGMsCisJMHhjNywgMHgzOSwgMHg0NywgMHhlNiwgMHg0YSwgMHg4YSwgMHhiNSwgMHg4NSwgMHhmOCwgMHhkOCwgMHgyNywgMHg2YSwKKwkweGE0LCAweDI1LCAweDFjLCAweDVhLCAweDc5LCAweDdkLCAweDNlLCAweDMxLCAweDNlLCAweGI5LCAweGRhLCAweDRhLAorCTB4ZjMsIDB4MzksIDB4ZDYsIDB4NDEsIDB4NzIsIDB4N2UsIDB4YjYsIDB4NjEsIDB4MzAsIDB4ZjYsIDB4ZWYsIDB4NTQsCisJMHg2ZiwgMHg2MSwgMHhkYywgMHhiZiwgMHg4YiwgMHhkMiwgMHg2MiwgMHgxYywgMHg3ZiwgMHhhZSwgMHg3NiwgMHhkMSwKKwkweDQyLCAweGFlLCAweDQzLCAweDFkLCAweGRmLCAweDJiLCAweDcyLCAweGRjLCAweDY1LCAweDFmLCAweDIzLCAweGZjLAorCTB4YjYsIDB4MTksIDB4N2YsIDB4N2IsIDB4OTcsIDB4NzEsIDB4MGEsIDB4MzIsIDB4NTUsIDB4ZGEsIDB4YTUsIDB4ZTAsCisJMHgzNSwgMHg5NywgMHhlYiwgMHg3YSwgMHgyMiwgMHgwMywgMHhlNywgMHhhNiwgMHhlOCwgMHgyNSwgMHg5NiwgMHhiNywKKwkweDIzLCAweDJmLCAweGMzLCAweDdmLCAweGZjLCAweDM4LCAweGYwLCAweDI2LCAweDlmLCAweGEyLCAweDQxLCAweDNlLAorCTB4NDYsIDB4NWYsIDB4MjQsIDB4YmYsIDB4YTgsIDB4NzMsIDB4OGEsIDB4MDUsIDB4MjcsIDB4NDQsIDB4NmQsIDB4ODgsCisJMHhhNCwgMHhkMSwgMHg1OSwgMHhkMSwgMHg4YiwgMHhlZSwgMHgyZCwgMHhjMSwgMHg5YiwgMHhlYywgMHg5NCwgMHg2NSwKKwkweDQwLCAweDFmLCAweDgxLCAweDBmLCAweDQ2LCAweGU2LCAweDYwLCAweDFkLCAweDc3LCAweDdhLCAweGRlLCAweGVkLAorCTB4OWIsIDB4MTksIDB4YTcsIDB4NDgsIDB4M2YsIDB4ZjAsIDB4NWUsIDB4ZDIsIDB4YWMsIDB4ZWEsIDB4MmYsIDB4MjAsCisJMHhmOCwgMHhiZCwgMHhiOSwgMHg0ZiwgMHhkNywgMHg0YiwgMHhlYSwgMHg2MywgMHgyZCwgMHgyYiwgMHhmNCwgMHg3MSwKKwkweDQ3LCAweGNkLCAweGVmLCAweDY2LCAweGNkLCAweGVmLCAweGU1LCAweDdjLCAweDM5LCAweDk2LCAweDc5LCAweDJjLAorCTB4ZTcsIDB4NDksIDB4ZjYsIDB4MjgsIDB4NGEsIDB4MmUsIDB4NGIsIDB4ZmMsIDB4MzMsIDB4ZjcsIDB4OGQsIDB4OTksCisJMHg4ZiwgMHgyYSwgMHgxZCwgMHgzYywgMHhiOSwgMHgzNiwgMHgxYSwgMHhlYSwgMHgzMSwgMHgyNiwgMHg4YywgMHhlNCwKKwkweGU0LCAweDNmLCAweDk2LCAweDIyLCAweDA5LCAweGU4LCAweDQ1LCAweDRmLCAweGVlLCAweDUxLCAweGY5LCAweGE3LAorCTB4M2MsIDB4YWYsIDB4NTQsIDB4MTgsIDB4YWEsIDB4ZGIsIDB4ZWMsIDB4NWEsIDB4MDcsIDB4YWQsIDB4OGIsIDB4OWUsCisJMHg1YywgMHg0MiwgMHhjNywgMHhlMCwgMHhlYiwgMHg3MSwgMHg5ZiwgMHg5NCwgMHhkOSwgMHg0NCwgMHhlOCwgMHg3MywKKwkweDBlLCAweDFhLCAweGRmLCAweDFmLCAweGJhLCAweGM0LCAweGZiLCAweDE5LCAweDVmLCAweGZiLCAweDY5LCAweGU5LAorCTB4YTQsIDB4ZTgsIDB4NzEsIDB4ODMsIDB4YjEsIDB4NWQsIDB4MzQsIDB4MjcsIDB4NzQsIDB4N2UsIDB4ZDYsIDB4NWYsCisJMHhhYSwgMHhlYywgMHhhYSwgMHgyOSwgMHhjYywgMHgzMywgMHg4NSwgMHhkOCwgMHg4YSwgMHhlMSwgMHhmYywgMHhiZSwKKwkweDJmLCAweDk5LCAweDk3LCAweGIxLCAweGYyLCAweDc4LCAweDRkLCAweGFjLCAweDdjLCAweDU2LCAweGM0LCAweGNhLAorCTB4MTEsIDB4MjcsIDB4MDcsIDB4NWMsIDB4MDEsIDB4NGIsIDB4YWYsIDB4OWMsIDB4MTYsIDB4ZWMsIDB4NjMsIDB4OTgsCisJMHg5MCwgMHgxYiwgMHg3ZSwgMHhlZSwgMHhhMiwgMHhlMCwgMHgzNywgMHhlMSwgMHg5OCwgMHg1ZiwgMHhlNiwgMHg1NywKKwkweGM3LCAweDc5LCAweGM2LCAweDA2LCAweDVkLCAweDYwLCAweDdjLCAweGIwLCAweDI3LCAweDM2LCAweDU4LCAweDk3LAorCTB4NTgsIDB4YzksIDB4N2UsIDB4OTksIDB4YWUsIDB4ZTQsIDB4OWIsIDB4NTgsIDB4ZDcsIDB4NWIsIDB4YTAsIDB4OGQsCisJMHgzYywgMHhiMSwgMHg0ZSwgMHhkOCwgMHg0ZCwgMHgwYiwgMHg2MSwgMHhjNiwgMHhiMSwgMHg4OSwgMHgzNiwgMHhkZSwKKwkweDRmLCAweGQ2LCAweDZiLCAweDI3LCAweDk4LCAweGVlLCAweDc4LCAweGVlLCAweDJiLCAweGI5LCAweGQyLCAweDhmLAorCTB4ZDIsIDB4ZTEsIDB4ODgsIDB4MTUsIDB4OWQsIDB4ZWEsIDB4NjAsIDB4YmIsIDB4YzUsIDB4ZTQsIDB4N2YsIDB4ODcsCisJMHhmZiwgMHg3NywgMHg4NSwgMHgwMCwgMHg5MywgMHhjMiwgMHgyYSwgMHg3ZSwgMHg2NywgMHg5ZCwgMHgyNywgMHg1MywKKwkweGZhLCAweGQxLCAweDFjLCAweDhmLCAweDk5LCAweDliLCAweDgyLCAweGZkLCAweDAzLCAweDNiLCAweGNmLCAweGUxLAorCTB4N2YsIDB4MzksIDB4NjYsIDB4NjUsIDB4OTUsIDB4ZjEsIDB4ZmIsIDB4NjIsIDB4MmEsIDB4NjQsIDB4MDgsIDB4ZGUsCisJMHhiZSwgMHhjZSwgMHgzYywgMHhmZSwgMHgwMiwgMHhjZCwgMHhmMSwgMHgxYywgMHhhZSwgMHgxMCwgMHhhZSwgMHhiNSwKKwkweDI4LCAweDE5LCAweGRlLCAweGM3LCAweDc4LCAweGRmLCAweGNkLCAweDlmLCAweGE4LCAweGJmLCAweDZhLCAweGE3LAorCTB4ODUsIDB4YzksIDB4MzEsIDB4NTUsIDB4N2YsIDB4ZjUsIDB4YmQsIDB4MDYsIDB4ZjUsIDB4NTcsIDB4YjgsIDB4OGUsCisJMHhlNSwgMHhmZSwgMHg2MiwgMHhlOSwgMHhlNiwgMHg1YywgMHhkOCwgMHhmZCwgMHgzYywgMHgzMiwgMHg5MiwgMHhlMSwKKwkweDRlLCAweGExLCAweDIzLCAweGFkLCAweGFjLCAweGZhLCAweGY4LCAweGQ5LCAweDExLCAweDJiLCAweDM5LCAweGM1LAorCTB4NzMsIDB4Y2MsIDB4YjksIDB4ZTcsIDB4NWQsIDB4YmEsIDB4MTksIDB4MGIsIDB4NjMsIDB4OWMsIDB4YmYsIDB4NjYsCisJMHgxYywgMHhkYiwgMHhjYSwgMHg1MywgMHg3MiwgMHgzZCwgMHg4NSwgMHg1YywgMHhlOSwgMHhlNywgMHhkMSwgMHhiMCwKKwkweDVlLCAweDlmLCAweGZiLCAweDVhLCAweGFjLCAweDAzLCAweGY0LCAweGM0LCAweDlmLCAweDJiLCAweDVkLCAweGJlLAorCTB4MmIsIDB4NTksIDB4ZDgsIDB4ZGYsIDB4MDYsIDB4ZTMsIDB4MzksIDB4NjYsIDB4MzQsIDB4NDQsIDB4YTksIDB4MTUsCisJMHhhNiwgMHhlZiwgMHg4YiwgMHgxZCwgMHhiZSwgMHg4ZCwgMHhlYywgMHg5NSwgMHg1MiwgMHhiMiwgMHgyYSwgMHg5NywKKwkweGE1LCAweGRhLCAweGVmLCAweDJlLCAweDZkLCAweGFlLCAweDIxLCAweDcyLCAweDk2LCAweDIwLCAweDMzLCAweDIxLAorCTB4MmYsIDB4NTMsIDB4MjUsIDB4YmYsIDB4MDMsIDB4ZmQsIDB4MGUsIDB4YjYsIDB4ZDAsIDB4NTksIDB4ZTYsIDB4NTcsCisJMHgzMiwgMHgxZiwgMHg4OSwgMHg3OSwgMHgyNywgMHhmMywgMHgyYywgMHg0OSwgMHgyZiwgMHhmMSwgMHhhYSwgMHhkNywKKwkweDBkLCAweDQ4LCAweDljLCAweDFkLCAweGE5LCAweGU0LCAweDQxLCAweGJhLCAweGUyLCAweGU5LCAweDAxLCAweDU3LAorCTB4M2MsIDB4ZGQsIDB4NzQsIDB4ZTUsIDB4NDEsIDB4MDYsIDB4ODUsIDB4M2UsIDB4NTYsIDB4ZDEsIDB4YTEsIDB4ODIsCisJMHg0YSwgMHg4NywgMHg4MiwgMHhhZSwgMHgyNSwgMHg3OSwgMHg1OSwgMHhhMSwgMHhjYywgMHhjYiwgMHg3NiwgMHg2ZiwKKwkweGMxLCAweGNiLCAweGJjLCAweDZjLCAweGQzLCAweDc1LCAweGM1LCAweDM3LCAweGVjLCAweDMwLCAweGU0LCAweGZjLAorCTB4ZTUsIDB4ZTIsIDB4MzQsIDB4YmQsIDB4Y2QsIDB4M2MsIDB4ZTIsIDB4YWQsIDB4NjIsIDB4OTgsIDB4ZjksIDB4YzYsCisJMHgyNCwgMHhmMywgMHg4ZCwgMHgwOSwgMHhlNiwgMHgxYiwgMHgwZSwgMHhjMywgMHhjMCwgMHhlMiwgMHhiNSwgMHg1ZiwKKwkweGYzLCAweDVkLCAweDU5LCAweDg0LCAweGJjLCAweDk4LCAweGEyLCAweGU3LCAweDhiLCAweGUwLCAweGMxLCAweDkzLAorCTB4YWMsIDB4ZjMsIDB4NWMsIDB4ZjMsIDB4NmQsIDB4MmMsIDB4NzYsIDB4MzEsIDB4YmUsIDB4NGEsIDB4M2QsIDB4YTcsCisJMHhkYSwgMHg4ZSwgMHg0MSwgMHhhZiwgMHgxNSwgMHhmOCwgMHg4NywgMHhhZiwgMHg4MiwgMHhjZiwgMHhiYywgMHg5MSwKKwkweGEyLCAweDRlLCAweDg2LCAweDNkLCAweGUwLCAweGJjLCAweDhlLCAweGRlLCAweDE0LCAweGFmLCAweDgxLCAweDk2LAorCTB4ZDEsIDB4MTMsIDB4ZjgsIDB4YmIsIDB4ZTMsIDB4NTMsIDB4M2MsIDB4ZjcsIDB4NGUsIDB4ZGYsIDB4MDIsIDB4ZWYsCisJMHhjYiwgMHhkMywgMHhlMSwgMHg5NCwgMHhkOSwgMHhjYiwgMHgzOCwgMHg3ZiwgMHhhYywgMHg4MiwgMHhmMywgMHhhOSwKKwkweDM0LCAweGFmLCAweGEwLCAweDY3LCAweGI5LCAweDliLCAweGM2LCAweDBlLCAweDQ0LCAweGY3LCAweGY2LCAweDMwLAorCTB4OWQsIDB4MjIsIDB4MzcsIDB4YTIsIDB4ZDIsIDB4YTcsIDB4YzcsIDB4NGYsIDB4MjcsIDB4ODMsIDB4NmQsIDB4YWEsCisJMHhiZiwgMHg4ZiwgMHhjNSwgMHhmMiwgMHhmMSwgMHgwMywgMHhiZSwgMHhjZiwgMHgyZCwgMHg1ZiwgMHgzYSwgMHhmYiwKKwkweDJhLCAweDNmLCAweDAzLCAweGM3LCAweDVmLCAweDg1LCAweGZmLCAweDkzLCAweGVkLCAweDgzLCAweDU2LCAweGUxLAorCTB4M2YsIDB4MmEsIDB4ODgsIDB4YjEsIDB4MzgsIDB4YjYsIDB4MjcsIDB4OTgsIDB4OTcsIDB4ODUsIDB4ZDcsIDB4MGQsCisJMHg3YiwgMHgzYSwgMHg2MiwgMHgzMCwgMHhkMSwgMHg3NSwgMHg5OSwgMHhiYywgMHhkZSwgMHhkMiwgMHhhMCwgMHg4YywKKwkweGMxLCAweGVkLCAweGRkLCAweDJiLCAweGY5LCAweDA2LCAweGUzLCAweDY2LCAweDMwLCAweDIyLCAweDZjLCAweGI0LAorCTB4YTYsIDB4MjUsIDB4MjksIDB4MjcsIDB4MGIsIDB4YmMsIDB4Y2YsIDB4MmIsIDB4ZTEsIDB4MDksIDB4ZGUsIDB4ZTcsCisJMHgwZSwgMHgyNSwgMHgyMywgMHg1MywgMHhmYywgMHhiYiwgMHg5MCwgMHhiZiwgMHgyYywgMHgyYiwgMHg4NywgMHhkMCwKKwkweGIzLCAweGRhLCAweDE0LCAweGZkLCAweDIwLCAweDY2LCAweGQxLCAweDZmLCAweGE3LCAweDgzLCAweGVmLCAweDZiLAorCTB4MzMsIDB4ZDYsIDB4ODIsIDB4NGYsIDB4N2MsIDB4ZTAsIDB4NGIsIDB4NjYsIDB4ZjEsIDB4NWMsIDB4ZTAsIDB4MjEsCisJMHg3ZiwgMHhjZiwgMHg0ZiwgMHhkMSwgMHg4NSwgMHg4YywgMHg5ZSwgMHhjMywgMHg4MCwgMHg2MSwgMHhiYywgMHg4NCwKKwkweDc5LCAweGY4LCAweDY4LCAweGI3LCAweGYzLCAweDQzLCAweDg2LCAweDE3LCAweDFmLCAweGZmLCAweDcxLCAweGVkLAorCTB4OWMsIDB4ODYsIDB4ZDUsIDB4OWMsIDB4ZDAsIDB4ZDMsIDB4YjIsIDB4MDUsIDB4M2QsIDB4N2MsIDB4MDgsIDB4YmQsCisJMHg4ZiwgMHgwYSwgMHhhMiwgMHhlNywgMHg2NCwgMHhiMywgMHhiMCwgMHg0ZCwgMHgwYiwgMHhjMiwgMHhjNiwgMHgyOCwKKwkweDg1LCAweDJhLCAweDdkLCAweDMwLCAweGVmLCAweGE5LCAweDM5LCAweGY3LCAweDEzLCAweDVmLCAweDdhLCAweGYxLAorCTB4YTAsIDB4ZDAsIDB4YzUsIDB4NDYsIDB4MGUsIDB4ZWMsIDB4NTUsIDB4ZjUsIDB4YTcsIDB4NWQsIDB4ZTIsIDB4YmUsCisJMHhjNiwgMHgzMiwgMHg3ZSwgMHg3YiwgMHg1MCwgMHhmZCwgMHhmNiwgMHg0OSwgMHhhMSwgMHgwMywgMHgyMywgMHgyZiwKKwkweDJlLCAweGIwLCAweDI0LCAweGYwLCAweDljLCAweGY3LCAweGQ3LCAweDk5LCAweDYwLCAweDNjLCAweDBmLCAweGFkLAorCTB4YzAsIDB4NzcsIDB4MmYsIDB4ZTAsIDB4YTksIDB4ZTEsIDB4MDEsIDB4NTgsIDB4MDAsIDB4ZjcsIDB4M2IsIDB4MTQsCisJMHhkZSwgMHhkYiwgMHg1NiwgMHhkYywgMHhhZiwgMHhkNywgMHhkZCwgMHgwOCwgMHhjZSwgMHhhYywgMHhkMywgMHg2NCwKKwkweGIwLCAweDU2LCAweGFjLCAweDY5LCAweDhmLCAweDJmLCAweDkyLCAweGI3LCAweDhjLCAweGY0LCAweDIyLCAweDZjLAorCTB4MWEsIDB4ZDQsIDB4YjUsIDB4ZGMsIDB4ODUsIDB4YmMsIDB4MjksIDB4OWUsIDB4YzMsIDB4MWUsIDB4OGEsIDB4MjQsCisJMHgzMCwgMHgyZiwgMHg4YywgMHhkMywgMHgzMCwgMHhmOCwgMHhiNywgMHgxYSwgMHg1OCwgMHhiOCwgMHhhZiwgMHhlYiwKKwkweDU2LCAweGQ3LCAweGI1LCAweDhhLCAweGJkLCAweDIwLCAweDAzLCAweGNmLCAweGQxLCAweGNmLCAweGM2LCAweDczLAorCTB4ZjEsIDB4N2MsIDB4NWMsIDB4ODcsIDB4ZmIsIDB4YzksIDB4ZmIsIDB4ZjYsIDB4MzEsIDB4N2YsIDB4OGUsIDB4NGUsCisJMHhjOSwgMHg3YiwgMHgxOSwgMHg5NywgMHhlNCwgMHg2ZiwgMHg3ZCwgMHg4ZSwgMHhmNywgMHg3YywgMHhlNSwgMHhmZSwKKwkweGY5LCAweDU0LCAweGJmLCAweDFlLCAweGVjLCAweDVmLCAweDM3LCAweGU1LCAweDg1LCAweDhmLCAweDEzLCAweGJmLAorCTB4NzUsIDB4OGEsIDB4ZGYsIDB4YTIsIDB4NGUsIDB4YTcsIDB4ZDgsIDB4ZDcsIDB4ZjMsIDB4N2MsIDB4M2MsIDB4OWYsCisJMHhlZCwgMHhmMiwgMHhjMSwgMHgzNiwgMHg0ZiwgMHgyNywgMHgzYSwgMHg3ZCwgMHhmOSwgMHgzYywgMHhkNiwgMHhkYiwKKwkweGU5LCAweDhiLCAweDMzLCAweGVlLCAweGM3LCAweGIyLCAweGYxLCAweGQyLCAweDgyLCAweGUwLCAweDMxLCAweGFjLAorCTB4ZDMsIDB4ZjYsIDB4ZGEsIDB4ZTYsIDB4NDksIDB4ZTMsIDB4NGYsIDB4ODYsIDB4NjQsIDB4NmYsIDB4NWIsIDB4N2MsCisJMHg2NywgMHhmYSwgMHhjYiwgMHgzMCwgMHhmZCwgMHg2NSwgMHg5OCwgMHhmZSwgMHgzMiwgMHg0YywgMHg3ZiwgMHgxOSwKKwkweGE2LCAweDNmLCAweGI2LCAweDRiLCAweGRmLCAweDY0LCAweDk5LCAweGYxLCAweDZkLCAweDk2LCAweDE5LCAweDkyLAorCTB4NjYsIDB4MjMsIDB4Y2EsIDB4OGYsIDB4YTksIDB4NjksIDB4YjYsIDB4YjYsIDB4M2UsIDB4NTMsIDB4ZDMsIDB4MjgsCisJMHhlNCwgMHgzNCwgMHhmOSwgMHgwZSwgMHg4ZiwgMHg1NywgMHhkMywgMHhlYSwgMHg1NSwgMHhhNiwgMHhkNSwgMHhhNiwKKwkweDk5LCAweDdlLCAweGJhLCAweDkxLCAweGMzLCAweDllLCAweGQ5LCAweGQ2LCAweDc5LCAweGU2LCAweGQxLCAweDcxLAorCTB4M2YsIDB4NzQsIDB4YWEsIDB4MDAsIDB4ZDMsIDB4MTMsIDB4NzQsIDB4NGEsIDB4OWIsIDB4ZTEsIDB4ZGUsIDB4NGYsCisJMHgzNywgMHg5OSwgMHg0ZiwgMHhkZiwgMHhjOCwgMHg4MSwgMHg3NiwgMHhlZiwgMHg1MiwgMHhjNywgMHgxOSwgMHhhNiwKKwkweDVkLCAweGM4LCAweGI5LCAweDI1LCAweGRmLCAweGQ1LCAweGFjLCAweGMxLCAweGJhLCAweDU3LCAweGMwLCAweDRjLAorCTB4MTIsIDB4ZjgsIDB4YTgsIDB4ZDAsIDB4YzcsIDB4NzgsIDB4ZGYsIDB4ZDcsIDB4OTksIDB4ZGYsIDB4YzMsIDB4NTcsCisJMHg4NywgMHhiZSwgMHg1ZiwgMHg3OSwgMHgxZiwgMHhjYiwgMHg4OSwgMHhkMCwgMHgxNSwgMHhlNiwgMHhhMywgMHhhNywKKwkweDczLCAweDRiLCAweDRjLCAweGVmLCAweGJkLCAweGY0LCAweDg1LCAweDFjLCAweGU0LCAweDMxLCAweDYwLCAweGM0LAorCTB4YzcsIDB4NzksIDB4MTIsIDB4M2UsIDB4MzAsIDB4NjMsIDB4MDYsIDB4NmIsIDB4MWYsIDB4NGIsIDB4MTksIDB4MDIsCisJMHg0ZiwgMHg5ZSwgMHgwMSwgMHgxYywgMHgxOCwgMHhmNiwgMHg2NywgMHhmNiwgMHhhMiwgMHg2NywgMHg3ZCwgMHhjNCwKKwkweDY4LCAweDU2LCAweDNlLCAweDQ1LCAweDdjLCAweGM3LCAweDc4LCAweDhjLCAweDA1LCAweGRjLCAweDcwLCAweGRjLAorCTB4MjgsIDB4ZmUsIDB4ODgsIDB4ZjcsIDB4NDIsIDB4ODQsIDB4MTksIDB4MWUsIDB4YjUsIDB4N2MsIDB4ZWIsIDB4MDIsCisJMHg3YSwgMHg5MSwgMHgwMiwgMHg1ZSwgMHhkMywgMHg1MSwgMHgzZiwgMHg2YSwgMHhjNSwgMHhlOSwgMHgzOSwgMHhiYywKKwkweGZmLCAweGUwLCAweDg1LCAweDIyLCAweGU2LCAweGJkLCAweDQ4LCAweDBiLCAweDQxLCAweGYwLCAweDIxLCAweDNiLAorCTB4N2MsIDB4OWQsIDB4MjQsIDB4ZWMsIDB4NWEsIDB4NTksIDB4YmYsIDB4ZmMsIDB4YmMsIDB4MzcsIDB4NmYsIDB4YjMsCisJMHhhMiwgMHg0MiwgMHgxZiwgMHg2ZSwgMHg2MSwgMHhmYiwgMHgwNiwgMHhiMCwgMHg3OSwgMHg4YiwgMHg3MSwgMHgyZCwKKwkweDBjLCAweDliLCAweDVmLCAweGYxLCAweGI1LCAweDM3LCAweDk5LCAweGU3LCAweDYwLCAweGNmLCAweDNhLCAweDg1LAorCTB4OGMsIDB4ZjEsIDB4ZTIsIDB4NjUsIDB4MWIsIDB4OGEsIDB4OTcsIDB4MzksIDB4MmUsIDB4NWUsIDB4OTYsIDB4MmUsCisJMHhmMywgMHgzMiwgMHhjNiwgMHgwOSwgMHhjMSwgMHhjMywgMHhjMCwgMHhhMywgMHg2NiwgMHg1OSwgMHg0ZiwgMHg5NCwKKwkweGRmLCAweGExLCAweGZmLCAweGVkLCAweDE2LCAweDNjLCAweDhiLCAweDc5LCAweDNkLCAweGRiLCAweDBkLCAweDg1LAorCTB4NjIsIDB4Y2EsIDB4NzcsIDB4NDgsIDB4ZjAsIDB4MGUsIDB4OGQsIDB4ZDcsIDB4ZmYsIDB4YTMsIDB4ZTgsIDB4YTEsCisJMHg1NSwgMHhmMCwgMHg4MSwgMHhmNCwgMHgyYywgMHhmOCwgMHg5NSwgMHhkNywgMHhmOCwgMHhmZiwgMHgwMiwgMHg2YywKKwkweDc5LCAweGJjLCAweDEzLCAweDdhLCAweDhkLCAweGY5LCAweDU4LCAweDIxLCAweDBjLCAweDliLCAweGI1LCAweDQzLAorCTB4ZDksIDB4MzYsIDB4ZTgsIDB4YmIsIDB4YjUsIDB4MDcsIDB4YjksIDB4OTYsIDB4NTYsIDB4YjQsIDB4Y2MsIDB4YzcsCisJMHg3NiwgMHgyYiwgMHhiZiwgMHgwNSwgMHhmYywgMHg4YywgMHhkOCwgMHhlYiwgMHgzYSwgMHg1ZCwgMHhjMCwgMHg4MiwKKwkweDJlLCAweGMwLCAweDYzLCAweDAzLCAweDBjLCAweDFmLCAweGQxLCAweDFiLCAweDljLCAweGU4LCAweDE2LCAweGMzLAorCTB4MDEsIDB4ZmIsIDB4N2MsIDB4MGIsIDB4ZmIsIDB4Y2MsIDB4YmEsIDB4MmMsIDB4MDUsIDB4ZTYsIDB4YTYsIDB4MDIsCisJMHgwMywgMHg5OCwgMHhkZiwgMHhjMiwgMHg2YSwgMHg4NSwgMHgxZiwgMHg5ZSwgMHhjZiwgMHgwYywgMHgxOCwgMHg4NSwKKwkweGFjLCAweDljLCAweGUzLCAweGNhLCAweGI4LCAweGU0LCAweDc5LCAweDg1LCAweDNjLCAweDdhLCAweDdiLCAweDg5LAorCTB4YjksIDB4ZjIsIDB4MWMsIDB4ZjUsIDB4ZmEsIDB4MDQsIDB4ZmYsIDB4NTIsIDB4NzQsIDB4YmYsIDB4MWQsIDB4NWEsCisJMHg0YiwgMHgzMCwgMHg1ZCwgMHg2MSwgMHg0ZiwgMHg1MiwgMHgyZSwgMHg5YywgMHg3OSwgMHg5NCwgMHg5ZiwgMHg4ZiwKKwkweDczLCAweDhkLCAweGQ3LCAweDcxLCAweGIzLCAweGJjLCAweDhlLCAweDA4LCAweGFmLCAweDAzLCAweDYzLCAweDZmLAorCTB4ZjksIDB4NmUsIDB4YTgsIDB4NzUsIDB4ZGMsIDB4MjgsIDB4YWYsIDB4NjMsIDB4NTYsIDB4YWQsIDB4ODMsIDB4ZDIsCisJMHhjNiwgMHhjYywgMHg2ZSwgMHhhNSwgMHhjNywgMHg2ZiwgMHg3OSwgMHhjZiwgMHhkNiwgMHgyOCwgMHhlYiwgMHgyNywKKwkweGU5LCAweDU1LCAweGMwLCAweGYzLCAweDFlLCAweDg1LCAweDJmLCAweDZlLCAweDdmLCAweGE4LCAweDdiLCAweDZlLAorCTB4ZjYsIDB4YzQsIDB4NzUsIDB4ZmEsIDB4NWQsIDB4YmEsIDB4MjksIDB4ZjQsIDB4OTMsIDB4NjEsIDB4ZDYsIDB4NGYsCisJMHg3MCwgMHg5ZSwgMHgxNiwgMHhjMCwgMHg4NywgMHhkMywgMHg0MSwgMHhmNCwgMHg5YiwgMHgxZCwgMHg2NCwgMHg5OCwKKwkweGIxLCAweDVkLCAweDM1LCAweGM1LCAweDlmLCAweGMyLCAweDRmLCAweDg2LCAweGZiLCAweGU4LCAweGViLCAweGJmLAorCTB4NDgsIDB4MzcsIDB4MTcsIDB4YzEsIDB4YWIsIDB4YTEsIDB4OGYsIDB4Y2EsIDB4OWUsIDB4YjQsIDB4MzcsIDB4ZDcsCisJMHhhNCwgMHg5ZiwgMHgzNiwgMHhlZSwgMHhlOSwgMHhhNywgMHg4NSwgMHg4ZiwgMHgzNiwgMHgwYywgMHg3ZCwgMHhkZCwKKwkweDg0LCAweDNmLCAweDM3LCAweDI2LCAweGRlLCAweDY3LCAweGMxLCAweGM3LCAweDQ1LCAweGRjLCAweGNiLCAweDhiLAorCTB4ZWYsIDB4NGMsIDB4YmIsIDB4NzIsIDB4ZGMsIDB4OTAsIDB4NzMsIDB4OTIsIDB4NjIsIDB4M2UsIDB4ZTIsIDB4OTgsCisJMHg0ZCwgMHg4NiwgMHhhYywgMHg5ZCwgMHhiOSwgMHg1YywgMHhkNCwgMHgzYSwgMHg1MSwgMHg5YywgMHhmNywgMHhjOCwKKwkweDA5LCAweDFiLCAweDQ2LCAweDQ0LCAweGY4LCAweDBjLCAweDVhLCAweDlkLCAweDBlLCAweDZhLCAweDYxLCAweDM5LAorCTB4NzksIDB4OGEsIDB4ZDAsIDB4MTMsIDB4Y2QsIDB4YjYsIDB4ZTAsIDB4Y2IsIDB4YmYsIDB4YzAsIDB4YjgsIDB4YjcsCisJMHgxMCwgMHhiNiwgMHg0MywgMHg5ZiwgMHgxMywgMHhmNiwgMHgyNSwgMHhlNCwgMHgwNywgMHhkZSwgMHhhNywgMHgwMiwKKwkweDE4LCAweDYzLCAweDBlLCAweGZjLCAweDdkLCAweDE1LCAweGZkLCAweDMwLCAweGMzLCAweGJjLCAweDdlLCAweGY4LAorCTB4ODEsIDB4NDcsIDB4YWQsIDB4NzcsIDB4NTgsIDB4ZWUsIDB4NWMsIDB4MTAsIDB4ZmUsIDB4OTUsIDB4YjMsIDB4OTQsCisJMHg2NiwgMHgzYSwgMHgzYywgMHgyYywgMHhlOCwgMHhkMCwgMHgxOCwgMHg2NiwgMHg2YSwgMHg2MSwgMHhmYSwgMHg0MSwKKwkweDhlLCAweGMxLCAweDk4LCAweGU4LCAweGJmLCAweDIzLCAweDZkLCAweDE2LCAweDVlLCAweGU1LCAweDlhLCAweGVhLAorCTB4NmIsIDB4OTAsIDB4MDAsIDB4NmYsIDB4ZDgsIDB4YmUsIDB4NmYsIDB4MjEsIDB4ZjEsIDB4OTEsIDB4N2QsIDB4MmEsCisJMHg2ZSwgMHg1ZCwgMHhhYiwgMHhkNiwgMHg4NywgMHgwZCwgMHhmYiwgMHhjYywgMHgxMiwgMHg3ZCwgMHgxZiwgMHgwMSwKKwkweDNiLCAweGUxLCAweDE3LCAweDM0LCAweDI2LCAweDE5LCAweDZlLCAweGZhLCAweGRkLCAweDM1LCAweDZlLCAweGZiLAorCTB4ZmYsIDB4MjksIDB4NTEsIDB4OWYsIDB4ZmYsIDB4NDYsIDB4NTEsIDB4Y2EsIDB4ZDgsIDB4MzQsIDB4ZGIsIDB4ZTYsCisJMHgwYiwgMHgwNywgMHhkYywgMHgzYSwgMHg4NywgMHg5ZCwgMHg4ZCwgMHgwOSwgMHg5ZiwgMHhjYywgMHgwMCwgMHg0NSwKKwkweDk3LCAweDI3LCAweGU5LCAweGIxLCAweDBjLCAweDc4LCAweDE0LCAweDVkLCAweDhmLCAweDNhLCAweDc4LCAweGMzLAorCTB4MDYsIDB4NjgsIDB4NzksIDB4OTIsIDB4ZTIsIDB4NDUsIDB4YzAsIDB4YzgsIDB4NDcsIDB4MGIsIDB4MmMsIDB4MDUsCisJMHhkMiwgMHg1OSwgMHhjNCwgMHhlZSwgMHhmOSwgMHg3YiwgMHgxZSwgMHhlZiwgMHg1NywgMHhmOSwgMHgxNSwgMHhlNSwKKwkweGY3LCAweDFlLCAweGEyLCAweGQ4LCAweDMyLCAweGE1LCAweDkyLCAweGUxLCAweDg3LCAweDQ1LCAweGNmLCAweGVhLAorCTB4NjQsIDB4NzgsIDB4NWMsIDB4ZjksIDB4NjgsIDB4NDIsIDB4N2MsIDB4MWUsIDB4N2UsIDB4MmYsIDB4OGIsIDB4MWUsCisJMHhjZCwgMHhkOCwgMHhhOSwgMHgyNCwgMHg0OSwgMHhkZiwgMHgwMywgMHhmMSwgMHgxYywgMHgwYywgMHg5NiwgMHhhZCwKKwkweGJiLCAweDk5LCAweDU3LCAweDFjLCAweDE3LCAweGZlLCAweDA3LCAweGQ2LCAweDQ0LCAweDE2LCAweDMxLCAweDFlLAorCTB4YmUsIDB4ODMsIDB4NWUsIDB4ODIsIDB4YmQsIDB4OTUsIDB4Y2MsIDB4M2UsIDB4YTAsIDB4YzYsIDB4OTYsIDB4YzgsCisJMHg2NCwgMHg1YywgMHgzMCwgMHg3ZiwgMHhjOSwgMHg0OSwgMHg4NSwgMHg4ZCwgMHhjYSwgMHhmNSwgMHhmMCwgMHg1ZCwKKwkweDFjLCAweDE3LCAweGZhLCAweGUxLCAweDMwLCAweGRiLCAweDMwLCAweDYyLCAweDVjLCAweDY5LCAweDRlLCAweGY4LAorCTB4MjEsIDB4ZjgsIDB4MzgsIDB4ZmYsIDB4ZDMsIDB4MDEsIDB4ZmQsIDB4NmUsIDB4MDMsIDB4OWMsIDB4OTcsIDB4ZmUsCisJMHgwOSwgMHhiZSwgMHg2NywgMHg5ZSwgMHhlNywgMHg1MSwgMHg5NSwgMHgxNywgMHgzZiwgMHg0NCwgMHg5MSwgMHgxZCwKKwkweGY4LCAweDhiLCAweDY2LCAweGVmLCAweGE4LCAweGJmLCAweDg4LCAweDYxLCAweGNkLCAweGIyLCAweGU1LCAweDMyLAorCTB4ZDMsIDB4YzYsIDB4ZGIsIDB4NWIsIDB4ZGEsIDB4NzEsIDB4ZWYsIDB4NmIsIDB4MTksIDB4Y2QsIDB4YjAsIDB4MzIsCisJMHhjNSwgMHhmYiwgMHgyZiwgMHhkMCwgMHhlYiwgMHg3MywgMHhhMSwgMHhmOCwgMHgyOSwgMHhiYywgMHg0NywgMHhjNiwKKwkweDk3LCAweDEwLCAweDNhLCAweDZmLCAweDg4LCAweDc1LCAweDE3LCAweGU4LCAweDMwLCAweGEzLCAweDIyLCAweGJlLAorCTB4MTUsIDB4NzksIDB4YzIsIDB4MzIsIDB4MTYsIDB4ZDYsIDB4ZmEsIDB4YzksIDB4MGYsIDB4YmYsIDB4OWEsIDB4YTMsCisJMHg3MywgMHgyMiwgMHg1YSwgMHg0NSwgMHhmZSwgMHhiYSwgMHg4YywgMHgyYiwgMHg0MiwgMHhmZSwgMHg4MiwgMHgwNywKKwkweGZlLCAweGM0LCAweDk3LCAweDVjLCAweGYzLCAweGY3LCAweGU5LCAweDdjLCAweGI3LCAweDQ4LCAweGIwLCAweDljLAorCTB4NGYsIDB4YTMsIDB4NzgsIDB4OGEsIDB4YzYsIDB4M2QsIDB4MWQsIDB4YjMsIDB4NzAsIDB4YmYsIDB4ZDcsIDB4MGEsCisJMHhiNCwgMHhlYiwgMHhkNiwgMHgxOSwgMHhlMCwgMHg2NywgMHgxMiwgMHg3YiwgMHg3NCwgMHgwMSwgMHg3MSwgMHg1YywKKwkweGEzLCAweDJhLCAweDFlLCAweGQxLCAweGMyLCAweGZiLCAweDA0LCAweDNiLCAweDBmLCAweGZlLCAweGJiLCAweGNmLAorCTB4ZjIsIDB4MjcsIDB4ZTIsIDB4MGEsIDB4MjcsIDB4MDcsIDB4YTEsIDB4MjcsIDB4ZjUsIDB4MzgsIDB4OGMsIDB4MzMsCisJMHg1MywgMHgzOCwgMHhlZSwgMHg2NywgMHhiYiwgMHg0YiwgMHhlYiwgMHhiNSwgMHhkMiwgMHhhNywgMHhjNCwgMHhiNiwKKwkweDk4LCAweGRhLCAweDJmLCAweGY4LCAweDkzLCAweDQ2LCAweDU0LCAweGJmLCAweDAxLCAweDliLCAweGFjLCAweDVlLAorCTB4YzAsIDB4ZTksIDB4ZTMsIDB4YTIsIDB4YzcsIDB4YWQsIDB4NjIsIDB4MTAsIDB4ZGIsIDB4YzksIDB4NTksIDB4YzIsCisJMHgzYiwgMHhiNywgMHhkMCwgMHg3NywgMHhmMywgMHg2ZSwgMHhjMCwgMHg5ZSwgMHhmNywgMHhjOCwgMHgxZCwgMHhhMywKKwkweGY4LCAweDk0LCAweDdhLCAweGZmLCAweGNmLCAweDlkLCAweGRhLCAweGI3LCAweDVkLCAweDFlLCAweGZiLCAweGY2LAorCTB4YmQsIDB4NDEsIDB4MTksIDB4MDMsIDB4YmIsIDB4NGIsIDB4OGQsIDB4ZjEsIDB4Y2EsIDB4NTMsIDB4ZmQsIDB4ZmIsCisJMHhhNywgMHhlMSwgMHg0ZiwgMHhhYSwgMHhkNCwgMHg1MSwgMHg1YywgMHgxMywgMHg3YywgMHhhNSwgMHhkZSwgMHhhNywKKwkweDFkLCAweDYyLCAweDdlLCAweDJhLCAweGU5LCAweGY4LCAweGI4LCAweDA3LCAweDFkLCAweGY3LCAweGNlLCAweDQwLAorCTB4MmYsIDB4YjksIDB4N2QsIDB4M2EsIDB4M2UsIDB4ZDYsIDB4OTAsIDB4OGUsIDB4ZmYsIDB4NzUsIDB4NTAsIDB4ZmEsCisJMHg1NCwgMHhlYiwgMHhlOSwgMHgxOCwgMHhiNSwgMHgzYywgMHhjNywgMHg4YiwgMHg4ZCwgMHhmYywgMHg1NywgMHhkOCwKKwkweDA3LCAweGQ0LCAweGE0LCAweGMzLCAweGU3LCAweDAxLCAweDU4LCAweDY5LCAweGJmLCAweDA3LCAweGUyLCAweDdlLAorCTB4YzAsIDB4NDcsIDB4YzQsIDB4NGUsIDB4ZmUsIDB4OTAsIDB4ZTIsIDB4OGIsIDB4YjUsIDB4YjEsIDB4ZDAsIDB4Y2QsCisJMHhhZSwgMHhmOSwgMHg5NiwgMHhjNywgMHgzNSwgMHhkMCwgMHhjNSwgMHg0MSwgMHgwYiwgMHg3NiwgMHg0OCwgMHhkYSwKKwkweGY0LCAweDFhLCAweDVlLCAweGVmLCAweGY5LCAweDBlLCAweGU1LCAweGVjLCAweDU0LCAweDllLCAweGUwLCAweGEzLAorCTB4MGUsIDB4ZDIsIDB4NTMsIDB4ODgsIDB4MmIsIDB4MmIsIDB4MWYsIDB4ZjAsIDB4ZDEsIDB4OGMsIDB4NWMsIDB4YjcsCisJMHg3OSwgMHg0MCwgMHhlMCwgMHgwMywgMHhmNCwgMHhkNSwgMHg1MCwgMHhjMiwgMHg5ZiwgMHhlMCwgMHgzZCwgMHg5NSwKKwkweGZlLCAweGRmLCAweGU0LCAweDZhLCAweDQ4LCAweGVkLCAweDEzLCAweDhmLCAweGM1LCAweGZkLCAweDNjLCAweGViLAorCTB4ZmMsIDB4YjAsIDB4M2YsIDB4ZjYsIDB4ZDcsIDB4ZDcsIDB4Y2IsIDB4NzksIDB4YzUsIDB4OTAsIDB4MDUsIDB4MjUsCisJMHhmYSwgMHgwZiwgMHg5NiwgMHg3MywgMHhmZSwgMHgwMywgMHhhNiwgMHhlOCwgMHhiOSwgMHg3MCwgMHhiOSwgMHg3OCwKKwkweDgwLCAweGY1LCAweDQ3LCAweGVjLCAweDIxLCAweDdjLCAweDg3LCAweGRhLCAweGI3LCAweGZiLCAweGY2LCAweDMwLAorCTB4NzUsIDB4ZWQsIDB4NjcsIDB4YTksIDB4NmYsIDB4OTAsIDB4YzMsIDB4N2EsIDB4YTMsIDB4NzEsIDB4MDAsIDB4ZjksCisJMHhlMSwgMHgxNiwgMHg1ZiwgMHg4MywgMHg1ZSwgMHg1MSwgMHg2MywgMHg1NiwgMHg5YywgMHgzYSwgMHhlMCwgMHg0ZiwKKwkweDQwLCAweDBmLCAweDY4LCAweDJiLCAweDVkLCAweDQ1LCAweDUzLCAweGIzLCAweDgyLCAweGE2LCAweGUyLCAweDZiLAorCTB4YjMsIDB4OGEsIDB4YTYsIDB4NjYsIDB4OTUsIDB4ZmYsIDB4N2MsIDB4NTYsIDB4ZDEsIDB4ZDQsIDB4YWMsIDB4YTIsCisJMHhhOSwgMHg1OSwgMHg0NSwgMHg1MywgMHhiMywgMHg4YywgMHhkNywgMHhhMywgMHhhYywgMHhhZiwgMHg0MiwgMHhmNywKKwkweGQwLCAweGZlLCAweGNiLCAweDJlLCAweDRhLCAweGU2LCAweDcwLCAweDFlLCAweGYyLCAweGI4LCAweDk2LCAweGFlLAorCTB4N2UsIDB4NmQsIDB4NTgsIDB4ZmIsIDB4NDcsIDB4MGIsIDB4MzIsIDB4Y2YsIDB4OGUsIDB4OWYsIDB4ODUsIDB4M2QsCisJMHg3OCwgMHg5OCwgMHhlMSwgMHg3NywgMHhjZCwgMHgzNywgMHhiZiwgMHg4OCwgMHhiOSwgMHhmYSwgMHgyOCwgMHgyNiwKKwkweDdhLCAweGMwLCAweDM2LCAweDUxLCAweGQ0LCAweGFkLCAweGUzLCAweDlhLCAweGE4LCAweGViLCAweDkyLCAweGI2LAorCTB4NWMsIDB4YWEsIDB4NjEsIDB4OGQsIDB4OTcsIDB4YzYsIDB4OGIsIDB4NjksIDB4YjUsIDB4NWYsIDB4YjUsIDB4NzYsCisJMHg0ZSwgMHgwYiwgMHgyNSwgMHhiMiwgMHg4MCwgMHgyYiwgMHg3MiwgMHgyMSwgMHgyZCwgMHhkZSwgMHgxYiwgMHgwMSwKKwkweGE3LCAweDk0LCAweGU5LCAweDAxLCAweDgzLCAweGEzLCAweDBhLCAweDA2LCAweDRmLCAweDhiLCAweDM1LCAweDIyLAorCTB4OTcsIDB4MTAsIDB4M2UsIDB4YzgsIDB4YzYsIDB4NzAsIDB4NDgsIDB4NjcsIDB4NDYsIDB4ZjksIDB4M2UsIDB4OGMsCisJMHhmYiwgMHgwNywgMHg0MiwgMHhjYywgMHg4MywgMHhiNiwgMHgwYiwgMHgwNywgMHhmNywgMHhkYSwgMHgxYiwgMHhmMSwKKwkweDlhLCAweGVkLCAweGQ2LCAweGQzLCAweDVjLCAweDc3LCAweGM5LCAweDhlLCAweDkwLCAweDkyLCAweDFiLCAweDUyLAorCTB4ZWYsIDB4ZGQsIDB4ZTUsIDB4ZDgsIDB4ODksIDB4MTQsIDB4Y2YsIDB4ZWQsIDB4MmYsIDB4YzIsIDB4N2YsIDB4MzksCisJMHg0NCwgMHg2ZCwgMHgyNSwgMHgzYSwgMHgxMiwgMHgwNiwgMHgzZSwgMHg3NywgMHhiMSwgMHg1ZCwgMHhjOSwgMHg3MywKKwkweDE4LCAweDJiLCAweGQxLCAweDg1LCAweGYwLCAweDNlLCAweGI2LCAweDVkLCAweGY2LCAweGIzLCAweDBlLCAweDNhLAorCTB4Y2EsIDB4ZmYsIDB4NGUsIDB4YzQsIDB4ZWYsIDB4YzMsIDB4YmMsIDB4M2EsIDB4ZjgsIDB4ZGEsIDB4N2UsIDB4MzIsCisJMHg3YSwgMHg1MiwgMHg2NiwgMHgyYiwgMHhlYiwgMHgwNywgMHg0NywgMHgyYSwgMHhmNiwgMHg4OCwgMHgwNSwgMHhmZiwKKwkweDFjLCAweGViLCAweGI2LCAweGM2LCAweDVjLCAweGI4LCAweDViLCAweGQ1LCAweDljLCAweGMxLCAweDg3LCAweDhkLAorCTB4ZjgsIDB4ZDYsIDB4M2YsIDB4OTcsIDB4NjQsIDB4YWYsIDB4ODAsIDB4MjEsIDB4NzUsIDB4ZmMsIDB4ZTMsIDB4NTIsCisJMHg2NCwgMHgwOCwgMHhjNywgMHg3OCwgMHhlNywgMHg5MCwgMHgzZCwgMHgxMSwgMHhmMSwgMHhmZCwgMHg1OCwgMHhlYSwKKwkweGYyLCAweDNlLCAweGZiLCAweDg4LCAweDdjLCAweDNmLCAweDgwLCAweDZkLCAweDVhLCAweDNlLCAweDJmLCAweGJjLAorCTB4OTcsIDB4M2EsIDB4NGYsIDB4MjUsIDB4NWYsIDB4MTUsIDB4NzQsIDB4NTAsIDB4YTIsIDB4N2YsIDB4NjcsIDB4OWEsCisJMHgzNSwgMHgwOSwgMHhiMSwgMHg4YywgMHgyOSwgMHg1MSwgMHgwYiwgMHg4ZCwgMHg3YywgMHhlNSwgMHhmOSwgMHg0NSwKKwkweDNkLCAweDJmLCAweDQ3LCAweGVkLCAweGY1LCAweGZkLCAweGM4LCAweDM3LCAweGNiLCAweDE2LCAweDY4LCAweDczLAorCTB4OTksIDB4MDEsIDB4M2YsIDB4ZGEsIDB4ZTgsIDB4ZjIsIDB4NDYsIDB4NGYsIDB4NTAsIDB4ZDQsIDB4NjYsIDB4NzcsCisJMHhiMywgMHg4ZSwgMHhhMywgMHhmMywgMHg5MiwgMHhjNywgMHhmOCwgMHhmZSwgMHgwMSwgMHhmMSwgMHhiZSwgMHhiOSwKKwkweGQ4LCAweDEyLCAweGM2LCAweDM1LCAweGQzLCAweGM4LCAweDcyLCAweGU5LCAweDIxLCAweGZlLCAweDVkLCAweGM0LAorCTB4MTEsIDB4OTMsIDB4ZDQsIDB4YWEsIDB4NjIsIDB4MDQsIDB4MWQsIDB4MmEsIDB4YWUsIDB4MTQsIDB4NjIsIDB4NWEsCisJMHhhYSwgMHhkNCwgMHgxYywgMHg4ZiwgMHg5NCwgMHg3ZCwgMHg2ZCwgMHhjMCwgMHhmMSwgMHg1YSwgMHg1ZiwgMHhkYiwKKwkweDczLCAweDViLCAweGM4LCAweDliLCAweGFkLCAweGYwLCAweDFhLCAweDM5LCAweGE1LCAweDJkLCAweGE0LCAweDdjLAorCTB4ODgsIDB4ZDYsIDB4MDIsIDB4NmQsIDB4YjcsIDB4YjYsIDB4NmUsIDB4YzcsIDB4ZDcsIDB4YjQsIDB4MzYsIDB4Y2YsCisJMHhhYywgMHg5ZiwgMHg3OSwgMHhjNywgMHg2OSwgMHg1MywgMHhmOCwgMHhkNCwgMHg0YywgMHhmMywgMHhiOSwgMHgzNiwKKwkweDk2LCAweGQ5LCAweGE4LCAweDk3LCAweDAyLCAweGJjLCAweGZjLCAweDQzLCAweGE4LCAweDM3LCAweDc5LCAweDMyLAorCTB4ZDAsIDB4NGMsIDB4YWIsIDB4YWIsIDB4YzgsIDB4NzksIDB4NzgsIDB4ZmMsIDB4MmUsIDB4OTksIDB4ZTcsIDB4ZmIsCisJMHgwOCwgMHhjMywgMHg2NSwgMHgzZiwgMHhjYiwgMHgzNywgMHg0MywgMHhjNSwgMHg3MCwgMHg3MCwgMHgwZSwgMHhiYywKKwkweDQxLCAweGY0LCAweGZkLCAweDBjLCAweDNjLCAweDNjLCAweGRlLCAweGM2LCAweDdhLCAweGJkLCAweDhjLCAweDAxLAorCTB4MWMsIDB4ZTQsIDB4N2IsIDB4N2YsIDB4MzMsIDB4ZjcsIDB4MDgsIDB4ZmMsIDB4NTksIDB4ZTYsIDB4NjEsIDB4YmUsCisJMHg3ZiwgMHg4YywgMHhmNSwgMHg4MSwgMHgwOCwgMHgzNSwgMHhkMywgMHhjYSwgMHg2YSwgMHgzMywgMHhlYiwgMHhmNSwKKwkweGNkLCAweGFjLCAweDBmLCAweDhjLCAweDlhLCAweDIzLCAweDNlLCAweGYxLCAweDJjLCAweDUxLCAweGRiLCAweGYyLAorCTB4ZTksIDB4YzAsIDB4N2UsIDB4YzYsIDB4NDEsIDB4M2MsIDB4ZWIsIDB4OGIsIDB4ZWEsIDB4NTksIDB4YjUsIDB4Y2YsCisJMHhiOCwgMHg1NSwgMHhjMiwgMHhmMSwgMHg2MSwgMHhmZiwgMHhmYSwgMHg5OSwgMHhhYiwgMHg3OCwgMHgyZiwgMHhkNCwKKwkweGUyLCAweDM0LCAweGViLCAweGJlLCAweDQxLCAweGYxLCAweDZlLCAweDQ2LCAweDYzLCAweDY2LCAweDg2LCAweGVkLAorCTB4ODAsIDB4MzAsIDB4MWYsIDB4MWYsIDB4YTEsIDB4NTQsIDB4MzEsIDB4NDEsIDB4YmYsIDB4NTcsIDB4NzQsIDB4ZmIsCisJMHg2YSwgMHg4ZiwgMHhmMCwgMHg5YywgMHg2NSwgMHg2ZCwgMHg3ZCwgMHgwYiwgMHhjZiwgMHhlYiwgMHg3ZCwgMHhhNywKKwkweDk2LCAweDY3LCAweGI0LCAweDkxLCAweGZmLCAweDZiLCAweDQxLCAweDZhLCAweDdlLCAweDExLCAweGJlLCAweDkxLAorCTB4MTIsIDB4NjUsIDB4YzMsIDB4ZjYsIDB4ODUsIDB4ZWIsIDB4ZTIsIDB4YmQsIDB4MWIsIDB4MTYsIDB4YmQsIDB4MjIsCisJMHhmMiwgMHg1YiwgMHhmOSwgMHg3YSwgMHhiZSwgMHhlNywgMHg3OSwgMHg4YywgMHg3YiwgMHhjNSwgMHhhMiwgMHgyYiwKKwkweDhlLCAweDg0LCAweGY3LCAweDlmLCAweDA1LCAweDgyLCAweGU0LCAweDdmLCAweDFkLCAweDM5LCAweDQ4LCAweGQwLAorCTB4YjUsIDB4ZDYsIDB4Y2YsIDB4MzgsIDB4ZmIsIDB4OTgsIDB4NWYsIDB4YmYsIDB4ODgsIDB4ZWIsIDB4ZjgsIDB4ZjMsCisJMHg3NSwgMHgxYywgMHhiNywgMHhmMSwgMHgzYSwgMHgyMSwgMHg2ZiwgMHg5MSwgMHg3NywgMHgwMiwgMHgzZSwgMHhiNywKKwkweDNmLCAweDY0LCAweDBhLCAweGZjLCAweDNiLCAweGMyLCAweDM4LCAweGQ1LCAweDI0LCAweDdjLCAweDgxLCAweGJkLAorCTB4MTgsIDB4ZWIsIDB4MGMsIDB4YjIsIDB4NmUsIDB4YjAsIDB4N2UsIDB4NjYsIDB4N2MsIDB4MWYsIDB4OGUsIDB4MjMsCisJMHgzZCwgMHg3ZSwgMHg4NiwgMHg5MSwgMHhjNCwgMHhhMSwgMHhiMCwgMHg3OCwgMHhmZiwgMHhhMSwgMHhlYiwgMHgyZiwKKwkweDcwLCAweDcwLCAweDljLCAweDc4LCAweDNmLCAweGExLCAweDNmLCAweGYwLCAweDdlLCAweDlhLCAweGU4LCAweGIzLAorCTB4ZDQsIDB4NDYsIDB4NzEsIDB4N2UsIDB4NDYsIDB4MmMsIDB4MjcsIDB4ZDcsIDB4N2QsIDB4YmUsIDB4ZTgsIDB4MjcsCisJMHhlOSwgMHg0NywgMHg2YSwgMHgxZSwgMHhkNiwgMHhlZiwgMHgyOSwgMHhhNCwgMHg3ZSwgMHhkYywgMHg1YiwgMHhkMywKKwkweDBhLCAweGJlLCAweDc3LCAweGQxLCAweDhkLCAweDVjLCAweDA3LCAweGRkLCAweDU0LCAweGIxLCAweGE1LCAweDFiLAorCTB4YzIsIDB4YWUsIDB4NjIsIDB4OWUsIDB4OWMsIDB4ZTgsIDB4YTIsIDB4ZWIsIDB4YWIsIDB4NGQsIDB4NDQsIDB4YmQsCisJMHg2ZCwgMHgyMiwgMHhmNiwgMHg3YiwgMHgyMywgMHg5NywgMHhjNywgMHhmMywgMHg4NywgMHhhNSwgMHhkZiwgMHhhNSwKKwkweDgyLCAweDIzLCAweDM3LCAweDNjLCAweDcwLCAweGU0LCAweDNkLCAweDgxLCAweDIzLCAweGVmLCAweDZkLCAweDgxLAorCTB4MjMsIDB4N2IsIDB4OTUsIDB4MmQsIDB4ZDEsIDB4NDYsIDB4Y2QsIDB4MGEsIDB4M2YsIDB4NWUsIDB4NjMsIDB4ZmMsCisJMHg3OCwgMHg4MSwgMHhmMSwgMHhlMywgMHg1MCwgMHgwMywgMHhmYywgMHgzMCwgMHg2YSwgMHhmMCwgMHhlMywgMHhiMCwKKwkweGMwLCAweDhmLCAweDlmLCAweDZkLCAweDhhLCAweDFmLCAweDg3LCAweGZjLCAweDliLCAweGY5LCAweDgyLCAweDM0LAorCTB4NmUsIDB4MGUsIDB4ZDAsIDB4NGEsIDB4Y2UsIDB4YTEsIDB4ZDUsIDB4NDUsIDB4OWIsIDB4MmQsIDB4N2IsIDB4ZDgsCisJMHhlNiwgMHg4OCwgMHgxOSwgMHhjZSwgMHg4OCwgMHg3YSwgMHg5NywgMHg4MiwgMHhjMCwgMHgyYiwgMHg5NiwgMHhlMywKKwkweDMzLCAweGE4LCAweDY5LCAweGFhLCAweGRiLCAweDAzLCAweDEyLCAweGVmLCAweGE1LCAweDE0LCAweGYwLCAweDk3LAorCTB4N2IsIDB4MTIsIDB4Y2IsIDB4YWMsIDB4OWYsIDB4ZjksIDB4NzMsIDB4ZGUsIDB4YzcsIDB4MmIsIDB4NmIsIDB4ODEsCisJMHgwMCwgMHg3ZSwgMHhmMywgMHhjZiwgMHgwNCwgMHg2OSwgMHg2MywgMHg4ZCwgMHhlZCwgMHg1NCwgMHhjNiwgMHhiMSwKKwkweGFiLCAweGI5LCAweDIxLCAweGJhLCAweDkyLCAweDFiLCAweGEwLCAweDhkLCAweGRjLCAweDMwLCAweGJkLCAweDkzLAorCTB4YzMsIDB4MzMsIDB4MDAsIDB4NzMsIDB4M2UsIDB4MTYsIDB4MzAsIDB4MzcsIDB4ZTgsIDB4NjAsIDB4OTAsIDB4YzcsCisJMHhhYywgMHgwZSwgMHhkMCwgMHhmYSwgMHhhYSwgMHhjNiwgMHg1NywgMHhlMCwgMHgyYSwgMHhmNiwgMHgzZiwgMHhkMiwKKwkweDIzLCAweGViLCAweGQwLCAweGVhLCAweDcxLCAweDIwLCAweDU2LCAweDg1LCAweDAzLCAweGYyLCAweDFhLCAweGVjLAorCTB4ZmQsIDB4NDIsIDB4N2QsIDB4MGQsIDB4NmQsIDB4YWIsIDB4MzksIDB4ODMsIDB4MWMsIDB4YjgsIDB4MzYsIDB4YjYsCisJMHhjOSwgMHg2ZCwgMHhlMSwgMHg3MywgMHgzZCwgMHhlOCwgMHg4NywgMHg0ZSwgMHg2YiwgMHhkYywgMHg0ZCwgMHg1ZCwKKwkweGJjLCAweDA3LCAweDBlLCAweGYyLCAweDg3LCAweDg2LCAweDU5LCAweDNmLCAweGVkLCAweDE2LCAweGZhLCAweDY4LAorCTB4ZDQsIDB4MDksIDB4ODQsIDB4NjIsIDB4NTQsIDB4M2EsIDB4NmIsIDB4MzgsIDB4ZTgsIDB4OTMsIDB4ZjgsIDB4MDgsCisJMHhkZiwgMHhjZiwgMHg1MCwgMHg3ZSwgMHg5ZSwgMHg0ZSwgMHgxNywgMHgzZSwgMHhkNSwgMHhlYSwgMHg5ZSwgMHg4OCwKKwkweGQxLCAweDllLCAweGUwLCAweDM5LCAweDQzLCAweDRlLCAweDU2LCAweGUyLCAweDIyLCAweDU0LCAweDhlLCAweDhiLAorCTB4YjQsIDB4ZjIsIDB4YmEsIDB4MjUsIDB4MmQsIDB4Y2QsIDB4MzksIDB4M2MsIDB4YWUsIDB4YzgsIDB4ZTMsIDB4OGEsCisJMHg4OCwgMHhhOSwgMHhmMSwgMHhmOSwgMHg1NSwgMHhjNCwgMHg3MywgMHg4NywgMHg2OCwgMHg2MywgMHgxMSwgMHgzNCwKKwkweDA3LCAweGZmLCAweDQ0LCAweDI1LCAweDg2LCAweGJhLCAweGIxLCAweDg2LCAweGYzLCAweGYwLCAweDUxLCAweDU0LAorCTB4NjIsIDB4YTgsIDB4MWIsIDB4MmEsIDB4ODYsIDB4YmEsIDB4YjEsIDB4MzYsIDB4MmQsIDB4ZjgsIDB4ZjAsIDB4NDIsCisJMHg4ZSwgMHg3OSwgMHg0MCwgMHhjZSwgMHhhZiwgMHhmMiwgMHgwNywgMHhmNywgMHhhOSwgMHg3NywgMHhmNiwgMHg5YywKKwkweDEwLCAweDNlLCAweGU0LCAweDFlLCAweDY3LCAweDczLCAweDE4LCAweDFlLCAweGFjLCAweDgzLCAweGUxLCAweGI0LAorCTB4ZDAsIDB4ODMsIDB4ZTIsIDB4N2MsIDB4Y2YsIDB4NTgsIDB4ZWUsIDB4MDQsIDB4YzMsIDB4NzMsIDB4OTYsIDB4NjksCisJMHg2OSwgMHhiNywgMHhhMiwgMHgyNSwgMHgxZCwgMHg5MywgMHhlZCwgMHgyNiwgMHhmNSwgMHhmZSwgMHgxZiwgMHhhMSwKKwkweGViLCAweDRiLCAweGZlLCAweDMzLCAweDU0LCAweGMzLCAweDdmLCAweDI4LCAweDEwLCAweDFkLCAweDk3LCAweGQ3LAorCTB4YTcsIDB4OGIsIDB4YWYsIDB4MGMsIDB4NmIsIDB4ZmYsIDB4NWIsIDB4OWEsIDB4ZWYsIDB4YmIsIDB4OTAsIDB4ZGIsCisJMHg0OSwgMHg0YywgMHg5NywgMHhlNSwgMHhhNiwgMHg2NywgMHhjZSwgMHhlMCwgMHg3NiwgMHg5ZiwgMHhhZCwgMHg3MSwKKwkweGUxLCAweGM0LCAweDZkLCAweGUwLCAweDkzLCAweGJjLCAweDQ3LCAweDA1LCAweDlmLCAweGZlLCAweDc3LCAweDE2LAorCTB4YzAsIDB4YjIsIDB4OTMsIDB4MDUsIDB4OTgsIDB4NTcsIDB4ODQsIDB4ODAsIDB4ZjUsIDB4MDMsIDB4MDMsIDB4YjQsCisJMHg4ZSwgMHgzOSwgMHgwMCwgMHgxZSwgMHg1MywgMHg2OCwgMHgwMiwgMHhlNiwgMHgxOSwgMHhhNywgMHhmNSwgMHg0MCwKKwkweGZiLCAweGZiLCAweDk1LCAweGMxLCAweGViLCAweDVkLCAweDFiLCAweGEwLCAweDY3LCAweDRmLCAweDJkLCAweGVhLAorCTB4NzksIDB4MmMsIDB4MDcsIDB4Y2EsIDB4YTMsIDB4NGUsIDB4MmEsIDB4MGMsIDB4MjQsIDB4ZTYsIDB4MjcsIDB4OTAsCisJMHhmZiwgMHg4MCwgMHhmZSwgMHgwMCwgMHhmOSwgMHgxMSwgMHg5OCwgMHg5ZiwgMHg5YywgMHg4MSwgMHg3MiwgMHhhMCwKKwkweDM1LCAweDUzLCAweGNkLCAweDZiLCAweDQwLCAweGZhLCAweDQwLCAweDYxLCAweDA4LCAweDJhLCAweDUzLCAweDQxLAorCTB4NjMsIDB4MWQsIDB4NDAsIDB4ZjYsIDB4MTIsIDB4MjEsIDB4NjgsIDB4ZDgsIDB4MDEsIDB4NjksIDB4MjAsIDB4YmIsCisJMHg3OSwgMHg4YSwgMHgwOCwgMHg5OCwgMHg5ZiwgMHgxNCwgMHgyMCwgMHhjNCwgMHhkMCwgMHgwMCwgMHhjZiwgMHg0ZiwKKwkweGVjLCAweDQwLCAweDk3LCAweGMyLCAweGRjLCAweGY0LCAweGZmLCAweGZmLCAweDMxLCAweDE1LCAweDE2LCAweDYwLAorCTB4ZGEsIDB4MDMsIDB4YWQsIDB4ZjksIDB4ZmMsIDB4ZmQsIDB4ZmYsIDB4ODAsIDB4MDgsIDB4MGIsIDB4NDMsIDB4MGIsCisJMHg3YywgMHhlZCwgMHg5ZSwgMHhiMCwgMHgzYywgMHhhOCwgMHg5YywgMHg1YiwgMHgwMCwgMHg2NCwgMHhiNSwgMHhjMSwKKwkweGViLCAweDZkLCAweDE2LCAweGYwLCAweDdkLCAweGM0LCAweDBiLCAweDE4LCAweDdlLCAweDAxLCAweGNiLCAweDk1LAorCTB4ZmYsIDB4ZmYsIDB4OTcsIDB4YzIsIDB4ZDUsIDB4ODIsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4YzIsIDB4Y2IsIDB4NDIsCisJMHg2MCwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCB9Oworc3RhdGljIHUzMiBibngyX0NPTV9iMDlGd0RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKK3N0YXRpYyB1MzIgYm54Ml9DT01fYjA5RndSb2RhdGFbKDB4ODgvNCkgKyAxXSA9IHsKKwkweDA4MDAxYWQ4LCAweDA4MDAxYjE0LCAweDA4MDAxYjE0LCAweDA4MDAxYjE0LCAweDA4MDAxYjE0LCAweDA4MDAxYjE0LAorCTB4MDgwMDFhMjQsIDB4MDgwMDFiMTQsIDB4MDgwMDFhOTgsIDB4MDgwMDFiMTQsIDB4MDgwMDE5YWMsIDB4MDgwMDFiMTQsCisJMHgwODAwMWIxNCwgMHgwODAwMWIxNCwgMHgwODAwMTliOCwgMHgwLCAweDA4MDAyYTJjLCAweDA4MDAyYTdjLAorCTB4MDgwMDJhYWMsIDB4MDgwMDJhZGMsIDB4MDgwMDJiMGMsIDB4MCwgMHgwODAwNWZhYywgMHgwODAwNWZhYywKKwkweDA4MDA1ZmFjLCAweDA4MDA1ZmFjLCAweDA4MDA1ZmFjLCAweDA4MDA1ZmQ4LCAweDA4MDA1ZmQ4LCAweDA4MDA2MDE4LAorCTB4MDgwMDYwMjQsIDB4MDgwMDYwMjQsIDB4MDgwMDVmYWMsIDB4MCwgMHgwIH07CitzdGF0aWMgdTMyIGJueDJfQ09NX2IwOUZ3QnNzWygweDg4LzQpICsgMV0gPSB7IDB4MCB9Oworc3RhdGljIHUzMiBibngyX0NPTV9iMDlGd1Nic3NbKDB4NWMvNCkgKyAxXSA9IHsgMHgwIH07CisKK3N0YXRpYyBzdHJ1Y3QgZndfaW5mbyBibngyX2NvbV9md18wOSA9IHsKKwkudmVyX21ham9yCQkJPSAweDEsCisJLnZlcl9taW5vcgkJCT0gMHgwLAorCS52ZXJfZml4CQkJPSAweDAsCisKKwkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMDBiMCwKKworCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDAwMDAsCisJLnRleHRfbGVuCQkJPSAweDdjNWMsCisJLnRleHRfaW5kZXgJCQk9IDB4MCwKKwkuZ3pfdGV4dAkJCT0gYm54Ml9DT01fYjA5RndUZXh0LAorCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfQ09NX2IwOUZ3VGV4dCksCisKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDA3ZDAwLAorCS5kYXRhX2xlbgkJCT0gMHgwLAorCS5kYXRhX2luZGV4CQkJPSAweDAsCisJLmRhdGEJCQkJPSBibngyX0NPTV9iMDlGd0RhdGEsCisKKwkuc2Jzc19hZGRyCQkJPSAweDA4MDA3ZDAwLAorCS5zYnNzX2xlbgkJCT0gMHg1YywKKwkuc2Jzc19pbmRleAkJCT0gMHgwLAorCS5zYnNzCQkJCT0gYm54Ml9DT01fYjA5RndTYnNzLAorCisJLmJzc19hZGRyCQkJPSAweDA4MDA3ZDYwLAorCS5ic3NfbGVuCQkJPSAweDg4LAorCS5ic3NfaW5kZXgJCQk9IDB4MCwKKwkuYnNzCQkJCT0gYm54Ml9DT01fYjA5RndCc3MsCisKKwkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDdjNjAsCisJLnJvZGF0YV9sZW4JCQk9IDB4ODgsCisJLnJvZGF0YV9pbmRleAkJCT0gMHgwLAorCS5yb2RhdGEJCQkJPSBibngyX0NPTV9iMDlGd1JvZGF0YSwKK307CisKK3N0YXRpYyB1OCBibngyX0NQX2IwOUZ3VGV4dFtdID0geworCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDgsIDB4OGUsIDB4ZmMsIDB4MmYsIDB4NDUsIDB4MDAsIDB4MDMsIDB4NzQsIDB4NjUsCisJMHg3MywgMHg3NCwgMHgzMSwgMHgyZSwgMHg2MiwgMHg2OSwgMHg2ZSwgMHgwMCwgMHhiZCwgMHg3ZCwgMHgwZCwgMHg3NCwKKwkweDVjLCAweDU3LCAweDdkLCAweGU3LCAweGZmLCAweGRkLCAweDc5LCAweDkyLCAweGM2LCAweGIyLCAweDJjLCAweDNmLAorCTB4Y2IsIDB4NjMsIDB4NjUsIDB4MjIsIDB4MGIsIDB4N2IsIDB4NDYsIDB4N2EsIDB4YjIsIDB4OTUsIDB4NTgsIDB4NjQsCisJMHhjNywgMHhhZSwgMHgwMCwgMHg2ZCwgMHgzYiwgMHg4NSwgMHhlOSwgMHg0OCwgMHhiMiwgMHg5ZCwgMHgwZiwgMHg4YSwKKwkweDRjLCAweDQ0LCAweDRmLCAweDVhLCAweGU4LCAweDIyLCAweGM2LCAweDc2LCAweDQ4LCAweDgwLCAweGIyLCAweDRlLAorCTB4MDksIDB4NjksIDB4ODAsIDB4MDQsIDB4MGYsIDB4MjMsIDB4ZjksIDB4ODMsIDB4NzQsIDB4ZWMsIDB4NTEsIDB4MTIsCisJMHhjNSwgMHg3NiwgMHg0ZiwgMHg3MywgMHg1OCwgMHg1NSwgMHg5MiwgMHgxZCwgMHg0MywgMHhhNywgMHgxZSwgMHgyNywKKwkweDcxLCAweDY4LCAweGY2LCAweDZjLCAweDY4LCAweGI0LCAweDRhLCAweGUyLCAweGE2LCAweDNkLCAweGQ5LCAweGQ2LAorCTB4ZjQsIDB4ODQsIDB4NmUsIDB4ZGEsIDB4NDMsIDB4NzcsIDB4ODUsIDB4NzEsIDB4ODgsIDB4NGIsIDB4YjMsIDB4NGIsCisJMHhmOCwgMHg2OCwgMHg2MSwgMHhhMSwgMHhlNSwgMHhlZCwgMHhlZiwgMHg3NywgMHhlZiwgMHg3ZCwgMHhkMiwgMHhlOCwKKwkweGMzLCAweDA5LCAweGExLCAweGJiLCAweGY1LCAweDM5LCAweGNmLCAweDZmLCAweGRlLCAweGZkLCAweGZjLCAweGRmLAorCTB4ZmYsIDB4ZmQsIDB4N2YsIDB4ZGYsIDB4MGYsIDB4YWQsIDB4MTcsIDB4YTksIDB4MTcsIDB4ZmIsIDB4NmYsIDB4MTUsCisJMHg5ZSwgMHg2ZCwgMHg4OSwgMHg3ZCwgMHhiYiwgMHhiNywgMHg1ZSwgMHhkNywgMHg3MywgMHgxZCwgMHg3ZSwgMHg2ZSwKKwkweDc1LCAweDU3LCAweDQ2LCAweDk1LCAweGJjLCAweDg5LCAweDdmLCAweDg5LCAweDlmLCAweGExLCAweDRjLCAweDQ0LAorCTB4YzQsIDB4MGIsIDB4ZmIsIDB4ZTIsIDB4MjMsIDB4NTEsIDB4OTUsIDB4MWUsIDB4ZmMsIDB4NjQsIDB4ZDYsIDB4OTcsCisJMHg2OCwgMHgyNCwgMHg3ZCwgMHhmNiwgMHhiMywgMHhiYiwgMHg3ZCwgMHg5MSwgMHg0YywgMHg3OSwgMHg0YiwgMHhhMiwKKwkweDU3LCAweGZlLCAweDI1LCAweGM4LCAweGM3LCAweDVjLCAweDYxLCAweGZhLCAweDViLCAweGQyLCAweGZmLCAweGZjLAorCTB4OWYsIDB4YmUsIDB4ZjIsIDB4OGUsIDB4ZTQsIDB4NmIsIDB4ZTMsIDB4MTEsIDB4ODksIDB4N2EsIDB4ZTksIDB4OGYsCisJMHg4OSwgMHhiNywgMHg0OSwgMHhhMiwgMHhhZCwgMHhlOSwgMHg4MSwgMHg0ZiwgMHgzZSwgMHhiYywgMHhmOSwgMHg2ZiwKKwkweDQ0LCAweDFhLCAweGMzLCAweGI2LCAweDJlLCAweDA3LCAweDVmLCAweGQ5LCAweDJjLCAweGY5LCAweDk2LCAweDc0LAorCTB4N2MsIDB4YzgsIDB4NGQsIDB4N2IsIDB4ZjIsIDB4NzQsIDB4NDUsIDB4MDYsIDB4MGEsIDB4YzUsIDB4YTgsIDB4NDQsCisJMHhkMiwgMHgxZCwgMHgyZiwgMHhmNSwgMHg0NiwgMHhmNiwgMHgwNywgMHgxMSwgMHhkZiwgMHhmNywgMHg3YSwgMHhhNSwKKwkweGExLCAweDI3LCAweGRiLCAweDhkLCAweGY0LCAweGYyLCAweDU2LCAweDUxLCAweDdlLCAweDU0LCAweGIyLCAweDE1LAorCTB4NjksIDB4NTAsIDB4YmUsIDB4OGYsIDB4NzcsIDB4YmQsIDB4YTgsIDB4NzQsIDB4ZDIsIDB4Y2IsIDB4NDYsIDB4NWMsCisJMHgyOSwgMHg1NCwgMHgyZSwgMHhhYywgMHgzMCwgMHg2ZCwgMHg5NiwgMHhlYywgMHhmYiwgMHg2ZiwgMHhhMiwgMHhlNiwKKwkweDhkLCAweDM2LCAweDRiLCAweDUxLCAweDk5LCAweDhkLCAweGM0LCAweDA1LCAweGZkLCAweDAwLCAweGU2LCAweDA2LAorCTB4MTksIDB4MmUsIDB4MjUsIDB4MjQsIDB4NWIsIDB4NjQsIDB4YmYsIDB4YWUsIDB4ZTQsIDB4M2MsIDB4ZjYsIDB4ZDksCisJMHg4MCwgMHhmYSwgMHgyYiwgMHg5ZCwgMHhlNSwgMHhjYiwgMHhiMywgMHhlYywgMHg0YiwgMHgyOCwgMHg5YiwgMHg0MCwKKwkweGI5LCAweDU2LCAweDc5LCAweGJjLCAweDEyLCAweDk3LCAweGM3LCAweDJhLCAweDMxLCAweDc5LCAweGI0LCAweDcyLAorCTB4ODcsIDB4NjQsIDB4NTAsIDB4ZjcsIDB4NmMsIDB4MDUsIDB4N2QsIDB4OTcsIDB4NmEsIDB4YTUsIDB4NzcsIDB4YWMsCisJMHg1ZSwgMHhiMiwgMHg2MywgMHhlZCwgMHhmMSwgMHg5YywgMHgwNCwgMHhjMSwgMHgyNywgMHg1MiwgMHgxZiwgMHg5NSwKKwkweGExLCAweDI2LCAweDk0LCAweDJmLCAweDMxLCAweDJmLCAweGJlLCAweDIwLCAweDJmLCAweDk3LCAweGRhLCAweGUyLAorCTB4ZTUsIDB4OTQsIDB4MjMsIDB4OTksIDB4YzEsIDB4NjQsIDB4N2MsIDB4NDgsIDB4ZjEsIDB4YmIsIDB4NDYsIDB4YjIsCisJMHg1ZCwgMHhmOCwgMHgxZSwgMHg3MCwgMHgyNSwgMHhlMiwgMHgwNywgMHhjMSwgMHgxZCwgMHhhOSwgMHgyNiwgMHhjMCwKKwkweDkxLCAweDRjLCAweDI0LCAweDE0LCAweGViLCAweGIyLCAweDVlLCAweDMyLCAweDlmLCAweDUwLCAweDUxLCAweGM5LAorCTB4NTcsIDB4YWUsIDB4OTMsIDB4NDQsIDB4NTMsIDB4MTAsIDB4YmMsIDB4MzcsIDB4ZTUsIDB4MjEsIDB4NWQsIDB4YTQsCisJMHhiNywgMHgyOCwgMHhmYiwgMHg1NCwgMHhkYSwgMHg0NywgMHg5YiwgMHg5MiwgMHg1MiwgMHhlOSwgMHhiNSwgMHgxOCwKKwkweGM3LCAweDE2LCAweGUwLCAweGE5LCAweDU2LCAweDMyLCAweDMxLCAweGM5LCAweGE4LCAweGI0LCAweDI0LCAweDU0LAorCTB4N2EsIDB4MDUsIDB4ZDIsIDB4MWMsIDB4YTksIDB4ZjEsIDB4YTcsIDB4MmMsIDB4OWQsIDB4YWMsIDB4YzYsIDB4YjcsCisJMHgwYywgMHhhOCwgMHg3NCwgMHhkMywgMHhhMiwgMHhmNCwgMHg2NCwgMHg0MiwgMHhkNCwgMHg4ZiwgMHhlYSwgMHhkMCwKKwkweDY3LCAweDY3LCAweDQ2LCAweDMxLCAweDBkLCAweDZmLCAweDlkLCAweDc2LCAweGZkLCAweDMyLCAweDY5LCAweDFmLAorCTB4NzQsIDB4MTYsIDB4YTYsIDB4M2QsIDB4YjUsIDB4OGEsIDB4YjAsIDB4OGEsIDB4ZTIsIDB4ZWYsIDB4MjgsIDB4ZTAsCisJMHg2YSwgMHg0MSwgMHhmZiwgMHhlZCwgMHg1ZSwgMHgwZCwgMHhjNiwgMHgzNSwgMHg5MCwgMHg0YSwgMHg3YSwgMHhmZCwKKwkweGVhLCAweGM1LCAweDQwLCAweDlhLCAweDA5LCAweDMzLCAweGYzLCAweDE0LCAweGYyLCAweDUwLCAweDM0LCAweDlkLAorCTB4YzIsIDB4YmMsIDB4YjksIDB4NzIsIDB4MDgsIDB4NjMsIDB4YmIsIDB4MzgsIDB4OTYsIDB4ZjQsIDB4ZGEsIDB4MTQsCisJMHhkZSwgMHg1MywgMHhmYywgMHhkZCwgMHgzNCwgMHgxNCwgMHg0OSwgMHgwNywgMHg0MSwgMHgzNiwgMHgzNSwgMHgyZSwKKwkweGI5LCAweDcyLCAweGQyLCAweDliLCAweDA1LCAweDcwLCAweGJkLCAweDYzLCAweDcxLCAweDhjLCAweDFmLCAweGUzLAorCTB4ODgsIDB4NjUsIDB4OTIsIDB4NmIsIDB4YTQsIDB4Y2IsIDB4Y2UsIDB4Y2YsIDB4NWYsIDB4YTIsIDB4ZWYsIDB4NzYsCisJMHhlZiwgMHgwZSwgMHhkNSwgMHhlZSwgMHhhNSwgMHg1NCwgMHhkMiwgMHg5YiwgMHg5MCwgMHgzZiwgMHhjNCwgMHg3NywKKwkweDEwLCAweGVjLCAweDRhLCAweDI1LCAweGUzLCAweDc5LCAweGNjLCAweGRkLCAweGE1LCAweDYyLCAweDRjLCAweDVlLAorCTB4MmUsIDB4MjYsIDB4NDEsIDB4YTksIDB4YzksIDB4Y2UsIDB4NDksIDB4ZDksIDB4OTIsIDB4OWEsIDB4MDQsIDB4ZGMsCisJMHgwNSwgMHgzYywgMHgwNywgMHg5OSwgMHg1NywgMHg0NiwgMHg1ZSwgMHg5OSwgMHg3NSwgMHg4MywgMHhlMCwgMHhlNiwKKwkweGQ0LCAweDg5LCAweDYwLCAweGE4LCAweGQ5LCAweGQwLCAweGZlLCAweGQzLCAweDI1LCAweGNjLCAweDJiLCAweGU2LAorCTB4ZTksIDB4YjEsIDB4MTIsIDB4ZTYsIDB4YjUsIDB4ODQsIDB4MzksIDB4ZDUsIDB4ZjMsIDB4ZGYsIDB4ODksIDB4ZjksCisJMHgyNywgMHg4ZCwgMHg5MCwgMHgzZSwgMHhiNiwgMHg1OSwgMHg3YSwgMHg3ZCwgMHhiNywgMHg3ZCwgMHg4YiwgMHg2NCwKKwkweDRiLCAweDhlLCAweDY0LCAweDUzLCAweDNmLCAweDA5LCAweDMyLCAweDlhLCAweDI3LCAweGM0LCAweGU5LCAweDJkLAorCTB4OTEsIDB4MjYsIDB4NmIsIDB4MDAsIDB4MmIsIDB4M2YsIDB4N2YsIDB4ZGQsIDB4OTYsIDB4OGIsIDB4M2EsIDB4MTgsCisJMHgwNiwgMHhlNywgMHg4MywgMHhmOSwgMHg1MSwgMHhlNSwgMHhkNywgMHhkOSwgMHhmYywgMHg5MCwgMHhmNiwgMHhmOSwKKwkweDBmLCAweDc0LCAweGU3LCAweGNmLCAweDk3LCAweGNiLCAweDkyLCAweDM2LCAweDJiLCAweDIyLCAweGI5LCAweDA3LAorCTB4MDMsIDB4ZTksIDB4NGQsIDB4MDEsIDB4NWYsIDB4NmMsIDB4ZDMsIDB4NGIsIDB4ODksIDB4YWUsIDB4ZWIsIDB4YjEsCisJMHg4YywgMHgyZSwgMHg4YiwgMHg3ZiwgMHgzZiwgMHhhZSwgMHg0MSwgMHgxZiwgMHg0ZSwgMHg1ZiwgMHg2OSwgMHhiZSwKKwkweDZlLCAweDVmLCAweGU5LCAweDg1LCAweDk4LCAweDg1LCAweDBmLCAweGRmLCAweDNkLCAweDRlLCAweGI2LCAweGYyLAorCTB4NzcsIDB4NzYsIDB4OGUsIDB4YzMsIDB4NzEsIDB4NzQsIDB4MmQsIDB4NDMsIDB4ZTMsIDB4MmUsIDB4ZjgsIDB4YzEsCisJMHg5MywgMHg1YywgMHhiMSwgMHgwNywgMHhmZCwgMHhjNiwgMHhmMCwgMHgwZSwgMHg4MiwgMHg5MSwgMHg1NCwgMHgyNiwKKwkweGU5LCAweDRhLCAweDFhLCAweGRmLCAweDAzLCAweDk4LCAweGFmLCAweDBlLCAweGUwLCAweDRmLCAweGRjLCAweGVjLAorCTB4ZTYsIDB4OTQsIDB4ZjQsIDB4NTUsIDB4NDAsIDB4N2IsIDB4OTUsIDB4MzcsIDB4OTYsIDB4MTQsIDB4N2EsIDB4MGMsCisJMHhhOSwgMHg3ZiwgMHhiMSwgMHhiOCwgMHg2MSwgMHgzZiwgMHg3YywgMHhiYiwgMHgzMiwgMHgwMiwgMHhmYSwgMHgyOCwKKwkweDhjLCAweGY5LCAweDMyLCAweDVjLCAweDljLCAweGY2LCAweDk0LCAweDI0LCAweDQxLCAweGJiLCAweDY5LCAweGU5LAorCTB4YWQsIDB4ZjgsIDB4NTIsIDB4MjgsIDB4ZTIsIDB4NWQsIDB4NmEsIDB4MDcsIDB4ZmQsIDB4YmEsIDB4OTIsIDB4ODksCisJMHg5YiwgMHgzOSwgMHgyOSwgMHgxNCwgMHg3ZiwgMHgwOSwgMHhlMywgMHgwMiwgMHg4ZSwgMHg3ZCwgMHhmZSwgMHhlZSwKKwkweGIxLCAweGIwLCAweDgwLCAweGY3LCAweGJiLCAweDUzLCAweDFhLCAweDNmLCAweDZmLCAweDBlLCAweDA2LCAweGY2LAorCTB4OGQsIDB4MzEsIDB4NjAsIDB4OWMsIDB4ODUsIDB4YjIsIDB4OGIsIDB4NzcsIDB4MGMsIDB4ZWYsIDB4OTAsIDB4MTYsCisJMHhlMywgMHg4MCwgMHhhOSwgMHg1NSwgMHg4NiwgMHg0MSwgMHg4YiwgMHhiZCwgMHg4MiwgMHhkZiwgMHg1MywgMHg4NCwKKwkweDkxLCAweGZkLCAweGI2LCAweGU4LCAweGRmLCAweGMzLCAweDYzLCAweDFiLCAweGY0LCAweDc3LCAweDZlLCAweGEwLAorCTB4NDUsIDB4ZjIsIDB4NTMsIDB4ZTEsIDB4NTgsIDB4MjgsIDB4MGYsIDB4MjgsIDB4MDMsIDB4OTIsIDB4ODcsIDB4NDUsCisJMHgyOCwgMHgxMywgMHg4MiwgMHhlMCwgMHhjMSwgMHgxNCwgMHhlNSwgMHg0MiwgMHgxMCwgMHgzYywgMHg5NiwgMHhhMiwKKwkweDljLCAweDM4LCAweDA3LCAweGZlLCAweGE3LCAweDZjLCAweDIwLCAweGFmLCAweGFlLCAweDU1LCAweDljLCAweDgzLAorCTB4NmMsIDB4MTEsIDB4N2QsIDB4NDAsIDB4NGUsIDB4ZTQsIDB4YmEsIDB4NGUsIDB4NDAsIDB4NmUsIDB4NTAsIDB4YWUsCisJMHg1YywgMHhmOCwgMHg0NCwgMHhkNiwgMHhjZiwgMHhjNywgMHgyMywgMHgxYSwgMHgwZiwgMHg5OCwgMHg2ZiwgMHhjOCwKKwkweGJjLCAweDhjLCAweDg2LCAweGJjLCAweDRkLCAweDBhLCAweDVkLCAweGEzLCAweGI2LCAweGNjLCAweDY1LCAweDVkLAorCTB4YzYsIDB4NWQsIDB4NTIsIDB4ZTYsIDB4NzYsIDB4NjUsIDB4ZjgsIDB4YWUsIDB4MTUsIDB4ZjMsIDB4YjEsIDB4NDIsCisJMHgxMSwgMHg0ZiwgMHg2ZCwgMHg5YiwgMHhmOCwgMHgyZCwgMHhkMSwgMHg5YSwgMHhmNCwgMHg5NywgMHg5MCwgMHgzNywKKwkweDdkLCAweGQ3LCAweDQ5LCAweDdmLCAweGI5LCAweGJjLCAweDU5LCAweDc3LCAweDY5LCAweGRlLCAweDg4LCAweGI4LAorCTB4N2UsIDB4YjIsIDB4NzMsIDB4OTcsIDB4OWEsIDB4MDEsIDB4M2QsIDB4MDUsIDB4YzEsIDB4YzksIDB4NTQsIDB4OTgsCisJMHhmZSwgMHg4ZiwgMHhlZSwgMHhkMiwgMHgzZSwgMHgxMiwgMHgzNSwgMHg0YiwgMHhkMywgMHhlZSwgMHg1ZCwgMHgyNiwKKwkweGVkLCAweGM0LCAweDMyLCAweDY5LCAweDFiLCAweDZhLCAweDk3LCAweGE2LCAweGJkLCAweDdmLCAweDk5LCAweGI0LAorCTB4ZmIsIDB4OTcsIDB4NDksIDB4ZmIsIDB4NWYsIDB4Y2IsIDB4YTQsIDB4N2QsIDB4NjcsIDB4OTksIDB4YjQsIDB4ZWYsCisJMHgyZCwgMHg5MywgMHhkNiwgMHg1MiwgMHhiNywgMHgzNCwgMHhjZCwgMHgwNSwgMHgzZiwgMHg2ZCwgMHg5MiwgMHg0MiwKKwkweGVjLCAweDczLCAweDFjLCAweGJiLCAweGM1LCAweGNkLCAweGZlLCAweGM4LCAweDUyLCAweGRjLCAweGQ0LCAweGEwLAorCTB4NWMsIDB4ZWIsIDB4YTIsIDB4NzIsIDB4NTMsIDB4Y2IsIDB4OTQsIDB4YWIsIDB4NDUsIDB4YjksIDB4YTYsIDB4NDUsCisJMHhlNSwgMHg5MiwgMHhjYiwgMHhlMCwgMHhiYSwgMHg0ZSwgMHhlYiwgMHhhZiwgMHg4NSwgMHhlNSwgMHgwYSwgMHhjYiwKKwkweDk0LCAweDYzLCAweGZhLCAweDFlLCAweGRiLCAweGNmLCAweDE2LCAweDY4LCAweDk5LCAweGQ3LCAweDliLCAweGFmLAorCTB4NWEsIDB4OTEsIDB4NjYsIDB4YTYsIDB4YjcsIDB4NDIsIDB4NDcsIDB4YWMsIDB4NTAsIDB4ODYsIDB4ZGYsIDB4MjksCisJMHg1YiwgMHg5OCwgMHhlNiwgMHg4MSwgMHhlZSwgMHhhMywgMHhhMCwgMHgzYiwgMHhjYSwgMHg0NywgMHhmMCwgMHg5MSwKKwkweDRmLCAweGZlLCAweDVkLCAweDI1LCAweDQzLCAweGIxLCAweDJkLCAweGRlLCAweDJmLCAweGE4LCAweDA2LCAweGQwLAorCTB4NTgsIDB4ZDIsIDB4NGIsIDB4MjgsIDB4ZjIsIDB4OTcsIDB4ZTQsIDB4MjMsIDB4NjksIDB4M2YsIDB4ZGYsIDB4MmIsCisJMHgyYSwgMHhhNiwgMHgyNCwgMHg5MCwgMHhiZSwgMHg5NCwgMHg2YSwgMHg1MiwgMHhiMiwgMHgxZiwgMHhmYywgMHg5MywKKwkweDgxLCAweDRlLCAweGRhLCAweDE1LCAweGY0LCAweDZhLCAweDFlLCAweDMyLCAweDY1LCAweGFmLCAweDJjLCAweDJiLAorCTB4N2QsIDB4MzksIDB4NDgsIDB4MTksIDB4OTcsIDB4Y2UsIDB4ZGMsIDB4OTUsIDB4ZjUsIDB4YTcsIDB4N2IsIDB4NmEsCisJMHg0MSwgMHhiMywgMHgxNywgMHg1MSwgMHg2NywgMHgwNywgMHg2YSwgMHhlZSwgMHgyZCwgMHhiYiwgMHhkMiwgMHg1NywKKwkweGVlLCAweDA0LCAweDJmLCAweDM4LCAweDcyLCAweGRlLCAweDVmLCAweDJkLCAweGU3LCAweDUzLCAweDI4LCAweDViLAorCTB4ODksIDB4YzgsIDB4NGMsIDB4Y2MsIDB4OTEsIDB4MTksIDB4N2MsIDB4NjcsIDB4NTMsIDB4YzgsIDB4YWIsIDB4ODQsCisJMHhiYywgMHhkNSwgMHgyOSwgMHgwNywgMHg0YSwgMHhiZSwgMHgxYywgMHgyZSwgMHhmZCwgMHg5MiwgMHgwYSwgMHhmNSwKKwkweDU2LCAweDdmLCAweDZhLCAweGE1LCAweDljLCAweGY2LCAweDRjLCAweGRiLCAweDNiLCAweGZjLCAweDY5LCAweDY4LAorCTB4NGMsIDB4NTcsIDB4MmUsIDB4ZmEsIDB4YzksIDB4ZjgsIDB4OGMsIDB4ZTYsIDB4ODksIDB4MWYsIDB4MDYsIDB4N2QsCisJMHg2OCwgMHg2NywgMHhjMiwgMHg0ZiwgMHg3YSwgMHg3ZiwgMHg4YSwgMHhlZiwgMHhhMSwgMHgzMiwgMHhlZCwgMHg5MCwKKwkweGY5LCAweGI2LCAweDg2LCAweGQxLCAweGQ2LCAweGExLCAweGQyLCAweDJhLCAweGY5LCAweGIwLCAweGFkLCAweGJmLAorCTB4ZGQsIDB4OWYsIDB4ZWUsIDB4MDQsIDB4Y2YsIDB4NzksIDB4YTcsIDB4MjgsIDB4MjMsIDB4OGEsIDB4ODAsIDB4NmIsCisJMHgxMCwgMHhiYywgMHg4ZCwgMHhiYSwgMHhjZiwgMHg2OSwgMHgzOSwgMHgwNSwgMHhiYiwgMHhhNSwgMHhiOCwgMHgxYSwKKwkweDcyLCAweGY3LCAweDFmLCAweDgzLCAweDBmLCAweGM3LCAweDU4LCAweDllLCAweDY5LCAweGQ0LCAweDI1LCAweDMyLAorCTB4YWEsIDB4ZDIsIDB4OTAsIDB4MDksIDB4ZGQsIDB4OTQsIDB4ODUsIDB4MDksIDB4YzgsIDB4NDEsIDB4YzgsIDB4OTYsCisJMHhkMiwgMHg0ZiwgMHg4MywgMHg4YywgMHg1YiwgMHgyZCwgMHhkZiwgMHgyNCwgMHgzZiwgMHg1ZiwgMHg4NiwgMHg2OSwKKwkweDA5LCAweDIzLCAweDJmLCAweDRiLCAweGIzLCAweDczLCAweGIyLCAweDIyLCAweDBmLCAweGY5LCAweGYyLCAweDc0LAorCTB4ODUsIDB4NzIsIDB4ZTEsIDB4N2EsIDB4ZjAsIDB4NjgsIDB4YWIsIDB4ZjQsIDB4MTUsIDB4OTMsIDB4ZjksIDB4OGMsCisJMHg2YywgMHhjMiwgMHhmYywgMHg3ZCwgMHgxZSwgMHg3MywgMHhlYSwgMHhlMiwgMHhiOSwgMHhhZiwgMHg1ZSwgMHgxYSwKKwkweDUzLCAweGQwLCAweGNkLCAweDRjLCAweDQ3LCAweGEzLCAweGNkLCAweDUxLCAweGM4LCAweGE4LCAweGRmLCAweDAzLAorCTB4MWUsIDB4ODYsIDB4MzksIDB4ZTcsIDB4ZjEsIDB4NmMsIDB4YzQsIDB4MTksIDB4YTAsIDB4M2QsIDB4MzIsIDB4NDAsCisJMHhmZCwgMHg1MCwgMHg2NiwgMHhkYiwgMHg4NCwgMHgzNywgMHg2ZSwgMHg3ZiwgMHg0NywgMHhiNSwgMHg4YywgMHgzMSwKKwkweGJmLCAweDFiLCAweGYwLCAweDNiLCAweDYxLCAweDdmLCAweDdiLCAweGY4LCAweGVkLCAweGRiLCAweGRmLCAweDMxLAorCTB4ZmMsIDB4ZWUsIDB4YjQsIDB4YmYsIDB4YTEsIDB4NWIsIDB4OGIsIDB4NWQsIDB4ZmEsIDB4ZjcsIDB4NDgsIDB4NjksCisJMHhmYiwgMHg3NiwgMHhlNSwgMHg1ZiwgMHgyNywgMHhiOSwgMHhhOSwgMHg1NiwgMHgzOSwgMHg1MCwgMHhmNCwgMHhhZCwKKwkweDZjLCAweGMxLCAweDIzLCAweDRmLCAweDNhLCAweDY2LCAweDljLCAweDgwLCAweDliLCAweGIyLCAweGIzLCAweDk0LAorCTB4NzcsIDB4MDYsIDB4MDgsIDB4M2YsIDB4NjgsIDB4YTAsIDB4YjcsIDB4YjgsIDB4YzUsIDB4NWIsIDB4MjMsIDB4YTQsCisJMHg4MSwgMHgxMSwgMHhhNywgMHhiNywgMHhlMiwgMHg2NCwgMHg2MCwgMHhhZiwgMHhjNSwgMHg4NywgMHhlNSwgMHgzMCwKKwkweDdlLCAweDhiLCAweDE3LCAweDQ5LCAweDNmLCAweDg5LCAweGI3LCAweGMxLCAweDAxLCAweGY1LCAweGNlLCAweDcwLAorCTB4ODksIDB4ZjIsIDB4ZDIsIDB4YzcsIDB4ZDgsIDB4MTMsIDB4NzIsIDB4NmUsIDB4ODEsIDB4MGQsIDB4NDUsIDB4NWMsCisJMHgyOCwgMHhjOSwgMHg4ZCwgMHgyNSwgMHg0ZiwgMHhlNCwgMHgyNSwgMHg5OSwgMHgxZiwgMHgwNywgMHg0MywgMHhlYywKKwkweDRhLCAweGI5LCAweGYyLCAweGRlLCAweDE0LCAweDY4LCAweGY3LCAweDNhLCAweDQ3LCAweGI2LCAweDVmLCAweGU3LAorCTB4YzIsIDB4ZTYsIDB4ZjEsIDB4YzcsIDB4YjcsIDB4ODMsIDB4ZmUsIDB4MzEsIDB4Y2YsIDB4OWEsIDB4MWUsIDB4ZDQsCisJMHgxOSwgMHg4MSwgMHg5ZCwgMHgwOCwgMHg2YywgMHg5ZiwgMHhlOSwgMHhlYSwgMHgxYiwgMHgyZSwgMHhlNiwgMHgzZSwKKwkweGE2LCAweGQyLCAweGZiLCAweDNlLCAweDk1LCAweGVkLCAweGJlLCAweDQ2LCAweDcyLCAweDgzLCAweDBhLCAweDM4LAorCTB4NmEsIDB4MWUsIDB4ODIsIDB4MWUsIDB4YzQsIDB4YjgsIDB4ODIsIDB4MDAsIDB4ZjQsIDB4MGMsIDB4NzksIDB4N2UsCisJMHhmMywgMHhjZCwgMHg5MSwgMHg3NCwgMHg4ZCwgMHhmNCwgMHgwZSwgMHgzNiwgMHhhMywgMHgwZSwgMHhmMywgMHg4OCwKKwkweGFmLCAweGFmLCAweGEyLCAweDlkLCAweDY0LCAweGEyLCAweDRmLCAweGU0LCAweDllLCAweDkxLCAweGVlLCAweDU5LAorCTB4NjcsIDB4NzgsIDB4ZjQsIDB4MzcsIDB4YzAsIDB4OTMsIDB4NWIsIDB4NTEsIDB4ZmYsIDB4MDEsIDB4ZDQsIDB4N2YsCisJMHhjZCwgMHgyOSwgMHg4YywgMHhmZCwgMHhjOCwgMHgxOSwgMHgxZSwgMHhmYiwgMHg5ZSwgMHgzMywgMHgzMiwgMHhiNiwKKwkweDYxLCAweDQzLCAweDdmLCAweGNmLCAweDg2LCAweDBkLCAweGJiLCAweDdiLCAweDVjLCAweDk5LCAweDAwLCAweDhmLAorCTB4NjUsIDB4YmMsIDB4MGQsIDB4MWIsIDB4NDYsIDB4N2EsIDB4YmEsIDB4ODAsIDB4ODMsIDB4MmQsIDB4NWUsIDB4OWYsCisJMHhmOCwgMHhkZSwgMHg3NiwgMHgwMSwgMHhmZiwgMHhjNCwgMHhkOCwgMHg2NywgMHgxNCwgMHhmOSwgMHg0OSwgMHhlNCwKKwkweGIzLCAweDdlLCAweDVjLCAweGU3LCAweGY3LCAweGNhLCAweDk2LCAweDc4LCAweDkzLCAweGIwLCAweGZmLCAweDg4LAorCTB4MmQsIDB4NTMsIDB4MTMsIDB4OTEsIDB4ZmEsIDB4MDcsIDB4ZWMsIDB4ZmMsIDB4NjYsIDB4OWMsIDB4MWEsIDB4OWYsCisJMHhlOSwgMHgxYywgMHgwYiwgMHhkMywgMHgzOSwgMHhiNywgMHg3ZiwgMHg2NywgMHg2ZCwgMHhkNSwgMHhkNSwgMHg0OCwKKwkweGU3LCAweDM3LCAweDcxLCAweDQ2LCAweGJjLCAweGQwLCAweGM2LCAweGE4LCAweGQxLCAweGI2LCAweDYxLCAweGFlLAorCTB4NDgsIDB4OWEsIDB4NzEsIDB4NjUsIDB4NGYsIDB4ZDEsIDB4NDEsIDB4MWQsIDB4ZDAsIDB4YzUsIDB4MTksIDB4ZmIsCisJMHgxYywgMHgwNSwgMHg2YywgMHg4MywgMHg2OCwgMHhlYiwgMHhlOCwgMHgyMSwgMHhkNCwgMHhhMywgMHhjYywgMHg0OCwKKwkweDc2LCAweDhhLCAweGZhLCAweDAwLCAweGNhLCAweDZjLCAweGYxLCAweGQ2LCAweDBhLCAweDZkLCAweDg5LCAweDNiLAorCTB4MjUsIDB4NTcsIDB4MjIsIDB4N2YsIDB4NzcsIDB4MDAsIDB4OWUsIDB4YTgsIDB4MjQsIDB4OWEsIDB4ZjEsIDB4NWQsCisJMHg4MSwgMHg0ZCwgMHhmMSwgMHg2MCwgMHg4ZCwgMHg1OCwgMHhkYiwgMHg0NSwgMHhlNiwgMHg2ZCwgMHg5MSwgMHgzYiwKKwkweDk0LCAweGMwLCAweGRlLCAweDE4LCAweDlhLCAweDVjLCAweDhmLCAweDcyLCAweDBlLCAweGYwLCAweDQyLCAweGZiLAorCTB4MDMsIDB4YjQsIDB4MzYsIDB4OTksIDB4OTEsIDB4ZWMsIDB4MjYsIDB4ZjAsIDB4YzksIDB4YTQsIDB4ODcsIDB4NmYsCisJMHhjMCwgMHgzNSwgMHhmOSwgMHgxNiwgMHhiYywgMHgyMywgMHhmYSwgMHhkYiwgMHhjMCwgMHgwOSwgMHhiYywgMHhhNiwKKwkweDIyLCAweDU2LCAweDY3LCAweDc1LCAweGExLCAweGVmLCAweGY3LCAweDQ4LCAweDc2LCAweDM0LCAweDRlLCAweDViLAorCTB4NjIsIDB4NzUsIDB4ZDYsIDB4Y2YsIDB4NDAsIDB4ZDcsIDB4MmIsIDB4MjgsIDB4NDEsIDB4OGMsIDB4NjEsIDB4ZDIsCisJMHg4MSwgMHgzYywgMHhhOSwgMHg5NSwgMHhkZCwgMHg4ZiwgMHhlMCwgMHhmNywgMHg4MywgMHhjNiwgMHhlNiwgMHhkZCwKKwkweDNkLCAweGM5LCAweDdlLCAweDFhLCAweDAwLCAweDEzLCAweDZjLCAweDkwLCAweDQ3LCAweDYwLCAweDliLCAweDNlLAorCTB4MDIsIDB4MWIsIDB4ZTQsIDB4OTEsIDB4NjYsIDB4M2MsIDB4MWMsIDB4MWIsIDB4ZGIsIDB4OWYsIDB4NTksIDB4MDMsCisJMHgzMSwgMHhhOSwgMHhiZiwgMHg3MywgMHhhNCwgMHg1NywgMHhkOCwgMHhlYSwgMHhiOSwgMHg2MiwgMHhjYSwgMHg5NCwKKwkweDJmLCAweDc2LCAweGViLCAweGI3LCAweGExLCAweGViLCAweDFlLCAweGZiLCAweDNiLCAweGFlLCAweGY5LCAweDNhLAorCTB4ZGYsIDB4MDQsIDB4OWEsIDB4YWYsIDB4NzQsIDB4NjksIDB4OTksIDB4OTMsIDB4ZjUsIDB4ZjEsIDB4ODYsIDB4Y2QsCisJMHg5OSwgMHg2OSwgMHhlMiwgMHgxOCwgMHhlMywgMHgzNiwgMHgyZCwgMHhhZSwgMHhkMywgMHgxMiwgMHg0ZCwgMHhkNiwKKwkweGRlLCAweDI4LCAweDU5LCAweDViLCAweDAzLCAweGI4LCAweDE5LCAweDZhLCAweDA2LCAweGM0LCAweDk0LCAweGNmLAorCTB4MTIsIDB4ZTIsIDB4OTMsIDB4MzIsIDB4MDAsIDB4ZjQsIDB4MGIsIDB4OWIsIDB4ZTIsIDB4ZGMsIDB4MTUsIDB4ZTUsCisJMHhkZiwgMHhhYywgMHhiNiwgMHhiMSwgMHhjZSwgMHg1NiwgMHg0OCwgMHhjNywgMHhhNCwgMHhlZCwgMHgyMCwgMHhiOCwKKwkweDNmLCAweDU1LCAweDg3LCAweGY2LCAweGM5LCAweGYzLCAweGIwLCAweDQwLCAweDhlLCAweDAyLCAweDI2LCAweDYwLAorCTB4YTIsIDB4YzYsIDB4M2YsIDB4YWIsIDB4NjksIDB4YTAsIDB4ZDYsIDB4MjcsIDB4MGQsIDB4NTcsIDB4ZjMsIDB4OTcsCisJMHhlOCwgMHhmMSwgMHg5ZSwgMHgwNSwgMHg4ZiwgMHhjMSwgMHhiZSwgMHg4MSwgMHhmZCwgMHhkNiwgMHgwMSwgMHhkYiwKKwkweDk4LCAweDdkLCAweDFjLCAweGU2LCAweGI3LCAweGE3LCAweGMwLCAweDUzLCAweGQ5LCAweDM5LCAweDllLCAweDEyLAorCTB4OTksIDB4MjgsIDB4MTIsIDB4MzcsIDB4YTEsIDB4NWQsIDB4YzcsIDB4NzksIDB4MjYsIDB4N2UsIDB4MzIsIDB4MTgsCisJMHgzMywgMHhkZiwgMHg3ZCwgMHgxNiwgMHg0ZiwgMHgzYiwgMHgyZCwgMHg5ZSwgMHg2ZSwgMHhiMiwgMHhlZiwgMHgxMSwKKwkweGJjLCAweDY5LCAweGUzLCAweDBkLCAweGUwLCAweGNkLCAweGY5LCAweDE5LCAweGM0LCAweDliLCAweGJjLCAweDc1LAorCTB4MGIsIDB4ZGUsIDB4MjgsIDB4NWIsIDB4Y2EsIDB4YzgsIDB4NmUsIDB4NmQsIDB4ODcsIDB4NDUsIDB4ZTQsIDB4NTcsCisJMHhiNCwgMHg2YywgMHhmYiwgMHgwMiwgMHhlNiwgMHhiMiwgMHg0OCwgMHhmYSwgMHg5NSwgMHg3YywgMHgyYywgMHgwMiwKKwkweDljLCAweDE0LCAweGYwLCAweGZiLCAweDRlLCAweGQ3LCAweGQwLCAweDJhLCAweDcxLCAweGIyLCAweGMwLCAweDU3LAorCTB4YWEsIDB4ODIsIDB4MjksIDB4NjYsIDB4ZTUsIDB4NWMsIDB4NDIsIDB4ZGIsIDB4ZmEsIDB4YjksIDB4ZTIsIDB4MDcsCisJMHgzNCwgMHg1YywgMHhiNywgMHg0MiwgMHhkZSwgMHhlNSwgMHg0NSwgMHgzNSwgMHg0MywgMHgzNywgMHg4MCwgMHgxNiwKKwkweDU0LCAweDBjLCAweDlhLCAweDJiLCAweDc4LCAweDA2LCAweDdhLCAweDI5LCAweDM3LCAweDQ5LCAweGRiLCAweGI4LAorCTB4OGQsIDB4N2UsIDB4NDksIDB4MzQsIDB4ZDcsIDB4ZDUsIDB4NDgsIDB4M2EsIDB4NTIsIDB4MGEsIDB4ZjYsIDB4MTcsCisJMHhiZSwgMHg1NSwgMHhhZSwgMHg0YiwgMHhkMywgMHhhOSwgMHhhMywgMHhmYywgMHg5OCwgMHhiNiwgMHg3ZiwgMHg1ZCwKKwkweDFmLCAweGQyLCAweGQ2LCAweGY4LCAweGJkLCAweGFlLCAweGYyLCAweGQ3LCAweDJlLCAweDRlLCAweDRiLCAweDUwLAorCTB4MGYsIDB4YTMsIDB4NWUsIDB4MjIsIDB4ZDcsIDB4ZDUsIDB4NGMsIDB4MWUsIDB4ZjMsIDB4NDAsIDB4YmYsIDB4MTksCisJMHhlNSwgMHg2YiwgMHhkZiwgMHgyNywgMHhhZiwgMHhiYSwgMHg1NywgMHgyZiwgMHgyYSwgMHhhZiwgMHhkZiwgMHg4ZSwKKwkweGZkLCAweDc2LCAweGVkLCAweGRiLCAweGIzLCAweGVmLCAweDg0LCAweDdkLCAweGU3LCAweGRkLCAweDZlLCAweGJlLAorCTB4MWQsIDB4NzEsIDB4ZDMsIDB4N2MsIDB4ODMsIDB4OTIsIDB4ZDMsIDB4NmMsIDB4NDMsIDB4ZjMsIDB4OTUsIDB4OTUsCisJMHgzMywgMHgxZCwgMHg1ZSwgMHg0MSwgMHhjOCwgMHg1NywgMHg5ZiwgMHg5MywgMHg1YiwgMHgyNywgMHg4ZCwgMHhmYywKKwkweGRkLCAweDBlLCAweDE5LCAweDA0LCAweGZmLCAweGNjLCAweDliLCAweDExLCAweGMwLCAweDNmLCAweDk4LCAweDk2LAorCTB4NWIsIDB4MmIsIDB4YzQsIDB4ZGIsIDB4ZWYsIDB4MDIsIDB4N2YsIDB4NjAsIDB4ZTIsIDB4N2EsIDB4ZWEsIDB4NzQsCisJMHhjYSwgMHhkZCwgMHgzYiwgMHg2MSwgMHhmNywgMHhhMiwgMHg3YywgMHg5MSwgMHgzOCwgMHgxZiwgMHhkMiwgMHg3MywKKwkweDUzLCAweDI4LCAweGVlLCAweGQxLCAweDczLCAweDczLCAweGIwLCAweDM4LCAweDAzLCAweGZjLCAweGRjLCAweDA2LAorCTB4YmEsIDB4MGYsIDB4ODIsIDB4OTksIDB4NTQsIDB4MDEsIDB4OTQsIDB4ZjMsIDB4MTEsIDB4ZmMsIDB4ODYsIDB4MWQsCisJMHg1MCwgMHhmYywgMHgxOCwgMHhmMiwgMHgxYiwgMHhhNSwgMHgzMCwgMHg0YSwgMHg5ZSwgMHg3MywgMHgyZCwgMHgwZiwKKwkweGJmLCAweDEzLCAweGZjLCAweDE0LCAweDQ1LCAweGJiLCAweDQ4LCAweGViLCAweGU2LCAweGVmLCAweDlmLCAweDIwLAorCTB4MGYsIDB4ZWYsIDB4NDksIDB4NGMsIDB4NjIsIDB4MzMsIDB4NmQsIDB4MWQsIDB4ZjYsIDB4Y2QsIDB4YjksIDB4ZTMsCisJMHg5YywgMHhjNSwgMHhiNCwgMHgyYywgMHgzZiwgMHgzYiwgMHgzNywgMHg2ZiwgMHg5NywgMHhlNywgMHhlOCwgMHgzNiwKKwkweDRmLCAweDFmLCAweDhmLCAweGY5LCAweDFhLCAweDU2LCAweGQyLCAweGZkLCAweGI3LCAweGI0LCAweDVjLCAweDcyLAorCTB4OGYsIDB4Y2UsIDB4YWMsIDB4MzAsIDB4ZWYsIDB4YzUsIDB4NzUsIDB4MzksIDB4ZTcsIDB4ZDUsIDB4MzQsIDB4NDgsCisJMHhiZiwgMHgyNSwgMHhkOSwgMHg5MywgMHgwNywgMHgzZiwgMHg2MSwgMHg5YywgMHhkMiwgMHhhNywgMHg3ZCwgMHgxZCwKKwkweGQyLCAweDA0LCAweDY5LCAweDYwLCAweGRjLCAweGQyLCAweGU2LCAweDk0LCAweGE1LCAweGNkLCAweDI3LCAweGYxLAorCTB4YzYsIDB4NTMsIDB4YmEsIDB4NjAsIDB4NjksIDB4ZjMsIDB4MjksIDB4YmMsIDB4ZjEsIDB4OTQsIDB4NWUsIDB4OWMsCisJMHhlMywgMHhlMywgMHg1ZSwgMHhmOCwgMHg3MiwgMHhkYiwgMHhhMSwgMHhkZiwgMHg3NiwgMHg1NywgMHg0MCwgMHhiZiwKKwkweGUwLCAweGJiLCAweDFjLCAweDdjLCAweDgwLCAweDVjLCAweDY5LCAweDFmLCAweGRlLCAweGVjLCAweDY3LCAweGEzLAorCTB4NmQsIDB4M2YsIDB4MjMsIDB4N2IsIDB4NGEsIDB4MDEsIDB4YzYsIDB4NzgsIDB4MzcsIDB4YzYsIDB4ZmIsIDB4MzksCisJMHhiYywgMHgzZiwgMHhhMywgMHhlNSwgMHg4YywgMHhmMiwgMHgwZiwgMHg1YiwgMHg3OSwgMHhmNSwgMHg3OSwgMHhiYywKKwkweGRiLCAweGUzLCAweDA3LCAweGE1LCAweGRkLCAweDhiLCAweGM4LCAweDM0LCAweGRhLCAweGZhLCAweGJhLCAweGVjLAorCTB4YTksIDB4Y2MsIDB4ZTIsIDB4YjksIDB4ODQsIDB4ZTcsIDB4NTUsIDB4M2MsIDB4OTcsIDB4ZDEsIDB4ZGUsIDB4MGIsCisJMHg0OCwgMHg1ZiwgMHgyOSwgMHhkMywgMHg1ZSwgMHgzZCwgMHhjYSwgMHhiZiwgMHg4NiwgMHhkZiwgMHhjZiwgMHhjYiwKKwkweGQwLCAweDIzLCAweDJmLCAweGUxLCAweGY5LCAweDAxLCAweGYyLCAweDlmLCAweDQ1LCAweGZkLCAweDYwLCAweGY1LAorCTB4OGMsIDB4NGYsIDB4MTksIDB4ZjYsIDB4OWMsIDB4NmQsIDB4M2IsIDB4ZTUsIDB4ZTQsIDB4MmEsIDB4YTAsIDB4ZTksCisJMHhkMiwgMHgwMCwgMHhmYSwgMHhkZSwgMHhhMywgMHg3OSwgMHhhNiwgMHgwZiwgMHgzMiwgMHgzZiwgMHgwNywgMHgxOSwKKwkweDM3LCAweGE0LCAweDYxLCAweDZhLCAweDA3LCAweDdjLCAweDc5LCAweGNjLCAweDA1LCAweGRlLCAweDkzLCAweGI1LAorCTB4MzIsIDB4MWIsIDB4YTMsIDB4MWQsIDB4NzksIDB4OTMsIDB4MmUsIDB4OWYsIDB4MmIsIDB4MzUsIDB4NjksIDB4YmIsCisJMHg3YSwgMHg3YywgMHgwOSwgMHhmZiwgMHhkMCwgMHhlZiwgMHgwYSwgMHhlNSwgMHg4MSwgMHg5MSwgMHhjNiwgMHgxMywKKwkweDQ1LCAweGNhLCAweDAyLCAweGU4LCAweDlmLCAweGUyLCAweDA4LCAweGRlLCAweGI1LCAweDVhLCAweDI2LCAweDE0LAorCTB4MjQsIDB4OTQsIDB4MDcsIDB4YWMsIDB4NDcsIDB4OTksIDB4NTAsIDB4MmQsIDB4NzcsIDB4MjgsIDB4NmIsIDB4MjgsCisJMHg3YiwgMHgyOCwgMHg0YiwgMHhjYywgMHg3YywgMHhlYywgMHg3ZSwgMHg5MCwgMHgzMiwgMHgxYywgMHhiNCwgMHgxMCwKKwkweGEzLCAweGZkLCAweGUxLCAweDE5LCAweDFmLCAweDY0LCAweGVjLCAweDNlLCAweDJiLCAweDRmLCAweDQ3LCAweGY1LAorCTB4NWMsIDB4ZWMsIDB4MjksIDB4YWEsIDB4OTgsIDB4MmIsIDB4YTcsIDB4OTEsIDB4ODYsIDB4ZTcsIDB4ZjgsIDB4YzMsCisJMHg3OCwgMHg3ZiwgMHg0OSwgMHhmNiwgMHhlMCwgMHhjOSwgMHgxZCwgMHhmZiwgMHgwMiwgMHg3ZSwgMHg3MywgMHg2ZSwKKwkweGNhLCAweDI4LCAweDg3LCAweGE3LCAweDc0LCAweDAyLCAweDZmLCAweDNjLCAweGE1LCAweDMxLCAweDJiLCAweDQ3LAorCTB4YzYsIDB4YWQsIDB4MWMsIDB4ZTEsIDB4OWMsIDB4ZGUsIDB4MDQsIDB4M2MsIDB4NzAsIDB4N2MsIDB4NGEsIDB4YzcsCisJMHgxNywgMHhjMCwgMHhjZiwgMHg0ZSwgMHg2ZSwgMHhmMiwgMHg1ZCwgMHhkNiwgMHg4ZiwgMHg2ZCwgMHgxNCwgMHhjMywKKwkweDgzLCAweDc4LCAweDNhLCAweGM5LCAweGNmLCAweDBkLCAweGRhLCAweDBlLCAweGNlLCAweDY5LCAweGRhLCAweGZkLAorCTB4MmIsIDB4ZDcsIDB4ZjAsIDB4NjIsIDB4Y2MsIDB4ZTgsIDB4MTQsIDB4YWYsIDB4NTksIDB4MzQsIDB4ZWYsIDB4Y2YsCisJMHhlMSwgMHgzMSwgMHg2MywgMHhmMSwgMHhjOCwgMHhkZiwgMHhjYSwgMHhmZSwgMHg4NiwgMHhkYywgMHg4MiwgMHg0ZCwKKwkweDliLCAweGY1LCAweDdkLCAweGNjLCAweDAzLCAweGM2LCAweDcyLCAweDdjLCAweDE0LCAweDdkLCAweDNiLCAweGIyLAorCTB4ZGIsIDB4YTcsIDB4MGMsIDB4NjcsIDB4MGMsIDB4ODEsIDB4ZTMsIDB4NjMsIDB4YmIsIDB4NDgsIDB4ZDcsIDB4MzgsCisJMHg0OCwgMHhjOSwgMHhiYywgMHg2ZiwgMHg3ZSwgMHgxMywgMHhlNiwgMHgyYywgMHgyMywgMHg3YiwgMHg0YiwgMHhmNywKKwkweDZhLCAweDVmLCAweGI5LCAweGY2LCAweDY4LCAweDkzLCAweGY1LCAweDczLCAweGMyLCAweDcyLCAweGEwLCAweGQ1LAorCTB4MTgsIDB4NmQsIDB4OWIsIDB4MmYsIDB4YzUsIDB4MGMsIDB4Y2QsIDB4ZjMsIDB4MzcsIDB4ZTUsIDB4NzMsIDB4YjUsCisJMHhiYywgMHgzNywgMHg3NiwgMHg0ZCwgMHg2MSwgMHg4MSwgMHhhYywgMHhhMywgMHg2ZCwgMHg4MSwgMHgzOSwgMHgyYiwKKwkweDU3LCAweGUzLCAweDlkLCAweGJlLCAweDNiLCAweGY5LCAweDhhLCAweGZjLCAweDc0LCAweDEwLCAweDNjLCAweGYxLAorCTB4NWQsIDB4Y2IsIDB4ZmIsIDB4ZjQsIDB4MzUsIDB4ZDgsIDB4ZTcsIDB4NjIsIDB4N2UsIDB4ZjIsIDB4NjAsIDB4ZmIsCisJMHhiYSwgMHg3MiwgMHgwYSwgMHhiNiwgMHhkYiwgMHhmNiwgMHhiOSwgMHgzNiwgMHhhZSwgMHgwNiwgMHgzYywgMHg1MSwKKwkweDc5LCAweGE0LCAweGQ4LCAweDIwLCAweDkzLCAweDQ1LCAweGQ1LCAweDFjLCAweGIxLCAweGIyLCAweDMzLCAweDIyLAorCTB4MDksIDB4NGQsIDB4ZGYsIDB4YjQsIDB4ZWYsIDB4N2EsIDB4YzcsIDB4MjIsIDB4OTYsIDB4ZWUsIDB4ZDYsIDB4ZDUsCisJMHg0OCwgMHhmZCwgMHhlZiwgMHg0MiwgMHhjNywgMHhhNiwgMHhhMSwgMHg2MywgMHgxYiwgMHhhMSwgMHg4MywgMHgxNywKKwkweGNiLCAweDg4LCAweDM1LCAweDM1LCAweDRiLCAweDY1LCAweDA0LCAweGViLCAweDI0LCAweGUxLCAweDc1LCAweDFmLAorCTB4NDQsIDB4YmQsIDB4OTAsIDB4ZmUsIDB4YTIsIDB4OWEsIDB4ZDYsIDB4NzIsIDB4OTIsIDB4NzcsIDB4YjYsIDB4NTcsCisJMHg0NiwgMHg5YywgMHgxZCwgMHg5NSwgMHhjNSwgMHgzYSwgMHg2OCwgMHg4YiwgMHhlNywgMHg4YSwgMHg4MSwgMHhmNSwKKwkweDkxLCAweDIyLCAweDZkLCAweGQ0LCAweDY0LCAweDJhLCAweDBiLCAweDljLCAweGVjLCAweDAwLCAweGNjLCAweGNmLAorCTB4OGMsIDB4YzIsIDB4NGYsIDB4YTcsIDB4NWMsIDB4MDYsIDB4Y2MsIDB4YTcsIDB4MDEsIDB4ZjMsIDB4YzQsIDB4YTgsCisJMHgxMywgMHhkYSwgMHgwNiwgMHhjMiwgMHhhMCwgMHhjOCwgMHhjNCwgMHg1OCwgMHg5NywgMHhjYywgMHg0YywgMHg5MSwKKwkweDBlLCAweDIxLCAweDAzLCAweDQ2LCAweDMxLCAweDlmLCAweGE5LCAweDE1LCAweGIwLCAweDAzLCAweGQ4LCAweDNmLAorCTB4ZTQsIDB4ZjYsIDB4NTgsIDB4OGIsIDB4Y2UsIDB4MzMsIDB4ZmEsIDB4YmMsIDB4NTUsIDB4NjYsIDB4Y2EsIDB4NjksCisJMHgwYiwgMHhkYiwgMHhlMSwgMHgyYSwgMHhkOCwgMHg1NiwgMHhjYywgMHhjMSwgMHhiNiwgMHgwMywgMHhiMCwgMHhlZCwKKwkweDVjLCAweDE2LCAweGI2LCAweGU1LCAweDc0LCAweDcxLCAweDFiLCAweDZjLCAweDFhLCAweGEzLCAweDhiLCAweDBkLAorCTB4NWUsIDB4OWIsIDB4MmQsIDB4M2QsIDB4YmMsIDB4ZGYsIDB4ZGEsIDB4YmIsIDB4YjQsIDB4ODksIDB4N2UsIDB4MGEsCisJMHg3OCwgMHg0OCwgMHg2MywgMHhmOCwgMHgzZCwgMHg3OSwgMHgyZiwgMHg2NSwgMHgxOSwgMHhkMiwgMHhmOSwgMHhiZCwKKwkweDA3LCAweDY1LCAweGYwLCAweDNkLCAweGY5LCAweDY3LCAweDJiLCAweDRjLCAweGQ5LCAweGJiLCAweDJkLCAweDJjLAorCTB4YjQsIDB4MTMsIDB4MzIsIDB4YjAsIDB4ODksIDB4ZmIsIDB4OWMsIDB4ZWMsIDB4MjQsIDB4NjEsIDB4ZjgsIDB4OGYsCisJMHg4MCwgMHgxNywgMHg3OSwgMHg5NSwgMHhlYSwgMHgzNiwgMHhmOSwgMHg2NiwgMHhiYiwgMHhkNywgMHhkYSwgMHg3NiwKKwkweGQ4LCAweDc2LCAweDM4LCAweDk2LCAweDk1LCAweDU2LCAweGNmLCAweDg3LCAweGY0LCAweDE1LCAweGRhLCAweGQ3LAorCTB4MjMsIDB4NGUsIDB4NjYsIDB4YzksIDB4YjgsIDB4YWEsIDB4NjksIDB4OGUsIDB4ZjIsIDB4ZDYsIDB4OTUsIDB4N2UsCisJMHhkMCwgMHg0OSwgMHhmZiwgMHgwMiwgMHg1YSwgMHgzMywgMHg3MiwgMHhjMywgMHhkMCwgMHhmMSwgMHgwYSwgMHgzYiwKKwkweGJlLCAweDFhLCAweGMzLCAweDM3LCAweGE5LCAweDI4LCAweGY0LCAweDIxLCAweGU1LCAweGNkLCAweDBlLCAweGUzLAorCTB4OWIsIDB4Y2IsIDB4NDMsIDB4ODAsIDB4MzUsIDB4ZmMsIDB4M2UsIDB4YTgsIDB4NmQsIDB4Y2UsIDB4YTcsIDB4NGIsCisJMHg5NCwgMHg0OSwgMHhmMywgMHhiNCwgMHg2OCwgMHg3YywgMHg5NywgMHg1NiwgMHhmNCwgMHg1NSwgMHg2ZCwgMHhhZiwKKwkweGJiLCAweDMyLCAweDYwLCAweGU2LCAweGZjLCAweDMwLCAweGU3LCAweDljLCAweGJlLCAweDQ4LCAweGZiLCAweDAzLAorCTB4MDMsIDB4OTYsIDB4YmYsIDB4OTIsIDB4YTMsIDB4NzksIDB4NzksIDB4YmIsIDB4MWQsIDB4ZmIsIDB4MWYsIDB4MmUsCisJMHgzMywgMHg3NywgMHg4ZCwgMHg3MywgMHg3MywgMHgzNywgMHg1MCwgMHg1OSwgMHgzYywgMHg0NiwgMHg5MSwgMHhiNiwKKwkweDA3LCAweDU4LCAweGNmLCAweDg1LCAweDhkLCAweDk0LCAweDkyLCAweDVhLCAweDlmLCAweGYyLCAweDkzLCAweGI2LAorCTB4MTIsIDB4ZDIsIDB4MjcsIDB4YjYsIDB4NzgsIDB4NGQsIDB4ZjAsIDB4MDEsIDB4OWUsIDB4NWUsIDB4NjIsIDB4NzcsCisJMHgyNSwgMHhhYywgMHhkYywgMHhhNCwgMHgxZiwgMHgxYywgMHhmNiwgMHg5MSwgMHhiNywgMHg3MiwgMHgzMiwgMHg4ZiwKKwkweGY2LCAweDQ3LCAweDljLCAweGZlLCAweGNhLCAweDcyLCAweGYyLCAweDMyLCAweDk0LCAweDkzLCAweDFjLCAweDhmLAorCTB4MjMsIDB4NzcsIDB4M2MsIDB4NDgsIDB4MWUsIDB4N2QsIDB4YmYsIDB4YjYsIDB4YWYsIDB4YjcsIDB4NmUsIDB4YWIsCisJMHgwMSwgMHhmZSwgMHgwOCwgMHhjNywgMHhjYywgMHgxYSwgMHhhMiwgMHgzMywgMHhmNywgMHgwOCwgMHg2YywgMHgyMiwKKwkweDNiLCAweDZmLCAweGJiLCAweGU3LCAweGU2LCAweDVmLCAweGQzLCAweDA1LCAweDdlLCAweDMzLCAweDhlLCAweDZhLAorCTB4NjgsIDB4YTQsIDB4YzYsIDB4NzcsIDB4MzQsIDB4MmQsIDB4ZDQsIDB4MmUsIDB4YjEsIDB4NjUsIDB4MzksIDB4MDYsCisJMHhkYSwgMHhiMywgMHhiNSwgMHhjNiwgMHgxNiwgMHgyYywgMHhkMSwgMHhmZSwgMHhhNCwgMHhlYywgMHhhMiwgMHhmZCwKKwkweGY5LCAweDQzLCAweGUwLCAweDg4LCAweGUzLCAweGU5LCAweGIyLCAweDY5LCAweGI0LCAweDUzLCAweDE3LCAweDhmLAorCTB4NmYsIDB4YjEsIDB4ZmYsIDB4NDgsIDB4MzgsIDB4MDksIDB4YjcsIDB4YTEsIDB4YWQsIDB4ODQsIDB4MjIsIDB4NmMsCisJMHg4MSwgMHgwYywgMHg4MCwgMHg5NywgMHgzOSwgMHgwNywgMHg4YSwgMHhiNiwgMHhlYiwgMHhiNiwgMHhiZiwgMHhhOCwKKwkweDMxLCAweDMxLCAweGU0LCAweGQ1LCAweGI1LCAweDUyLCAweGNmLCAweDNlLCAweGM5LCAweDdmLCAweDdjLCAweGFmLAorCTB4ZDIsIDB4ZjYsIDB4ZWYsIDB4NTIsIDB4NTksIDB4NTYsIDB4YWQsIDB4N2IsIDB4YWUsIDB4OWUsIDB4YzMsIDB4NWYsCisJMHhmZiwgMHg4MiwgMHgzOSwgMHgwYSwgMHhmMSwgMHgxNywgMHhkMiwgMHg0NSwgMHgzNSwgMHgwZSwgMHg0OSwgMHgxMywKKwkweDg2LCAweDE2LCAweDBjLCAweDJkLCAweDZlLCAweGI0LCAweGZhLCAweDI2LCAweGE0LCAweGJkLCAweGFiLCAweDQwLAorCTB4N2IsIDB4ZjcsIDB4ODEsIDB4YzYsIDB4MjgsIDB4YzMsIDB4MTksIDB4OTcsIDB4NWIsIDB4OGIsIDB4ZWYsIDB4MjMsCisJMHhmOCwgMHgwZSwgMHhmOSwgMHhlNCwgMHg0YSwgMHgzMiwgMHg5YywgMHhmMiwgMHg5YiwgMHg3NSwgMHhiMiwgMHg1NiwKKwkweGVlLCAweDg3LCAweDdlLCAweDJlLCAweGViLCAweDcwLCAweGRjLCAweDk0LCAweGZmLCAweGZmLCAweDE1LCAweGVkLAorCTB4YWMsIDB4YWQsIDB4MzUsIDB4ZjYsIDB4Y2EsIDB4OGQsIDB4YjUsIDB4OTQsIDB4YWYsIDB4NmIsIDB4ZTQsIDB4NjAsCisJMHg1NSwgMHhkYSwgMHg5NSwgMHhlNCwgMHg3NywgMHhmNSwgMHg5OCwgMHhkNywgMHhmZiwgMHgzZiwgMHgxOCwgMHg3MywKKwkweDdjLCAweGQxLCAweDk4LCAweDNkLCAweDNiLCAweGU2LCAweDc3LCAweDIxLCAweGJmLCAweGM5LCAweGY4LCAweDM4LAorCTB4MWUsIDB4ZjksIDB4MmUsIDB4MWMsIDB4YjMsIDB4YzUsIDB4ODUsIDB4MWUsIDB4NTcsIDB4YjUsIDB4OWMsIDB4MDgsCisJMHg2NSwgMHgwNCwgMHhjNywgMHgzNSwgMHg2MCwgMHhjNywgMHhmMCwgMHhiOSwgMHhhYSwgMHg3MSwgMHgwZCwgMHhiYywKKwkweDg5LCAweDcxLCAweGI1LCAweDJlLCAweDE4LCAweGQ3LCAweGY2LCAweDJiLCAweDhlLCAweDZiLCAweDM5LCAweDFlLAorCTB4MjcsIDB4MmYsIDB4ODcsIDB4ZTMsIDB4OGIsIDB4Y2EsIDB4YWUsIDB4MjIsIDB4YzcsIDB4ZDgsIDB4OGYsIDB4MzEsCisJMHgxZSwgMHhkNCwgMHhmZSwgMHg4MCwgMHgxOSwgMHg2MywgMHhkYSwgMHg4ZSwgMHg1MSwgMHg1NCwgMHhkYiwgMHhiNiwKKwkweDdmLCAweDhmLCAweGRmLCAweGQ1LCAweGUzLCAweGEzLCAweGVlLCAweGZmLCAweDNlLCAweDY4LCAweGJhLCAweDRlLAorCTB4YjIsIDB4NWQsIDB4NzUsIDB4NTYsIDB4ZmUsIDB4ZGYsIDB4MjQsIDB4MWYsIDB4MmUsIDB4NzEsIDB4YWUsIDB4OTMsCisJMHgxOSwgMHg5MSwgMHg1MSwgMHhlOCwgMHhlMCwgMHhmZiwgMHg1YywgMHhjYiwgMHhkOCwgMHhmZCwgMHhmNiwgMHg5NCwKKwkweGQ1LCAweDYzLCAweGQwLCAweDE3LCAweDNiLCAweDYwLCAweGYzLCAweGY1LCAweDE3LCAweDU1LCAweDc3LCAweDQ0LAorCTB4ODIsIDB4ZTAsIDB4YjYsIDB4ZDQsIDB4YTcsIDB4ZDEsIDB4ZjcsIDB4N2UsIDB4ZWQsIDB4YWIsIDB4MmUsIDB4OGQsCisJMHg5YiwgMHgzZiwgMHg1NywgMHgyYiwgMHgzZSwgMHhlZCwgMHgwZCwgMHhlYSwgMHg3MywgMHhlOCwgMHhiYiwgMHhlMywKKwkweGI0LCAweGMxLCAweGIyLCAweGIwLCAweDkzLCAweDMzLCAweGYxLCAweDg4LCAweGI2LCAweGM1LCAweGE4LCAweDEzLAorCTB4OTMsIDB4ZjEsIDB4OGMsIDB4YTQsIDB4ZDEsIDB4NWYsIDB4MjYsIDB4YWUsIDB4ODQsIDB4N2QsIDB4YzAsIDB4NTYsCisJMHg4MywgMHgwZCwgMHhmOSwgMHhlMSwgMHhjYSwgMHgzZSwgMHgzYywgMHgwZiwgMHhjYiwgMHhhZCwgMHhiMCwgMHg3NywKKwkweDZlLCAweDdkLCAweGU0LCAweDBiLCAweDcyLCAweDFiLCAweDZjLCAweDlkLCAweGRiLCAweDFlLCAweDE5LCAweDkzLAorCTB4YmQsIDB4YjAsIDB4NmQsIDB4ZjYsIDB4YzIsIDB4Y2UsIDB4ZDksIDB4NWIsIDB4YTEsIDB4ZWQsIDB4MzksIDB4OGUsCisJMHhiMiwgMHhhZCwgMHg1NSwgMHhiNCwgMHg0NiwgMHgxYiwgMHg4NywgMHhlMywgMHgyMywgMHhlZSwgMHgwZiwgMHg3MiwKKwkweDBlLCAweDUyLCAweDA5LCAweGY1LCAweDhhLCAweDllLCAweDk3LCAweGE2LCAweDA1LCAweDY5LCAweGFmLCAweDI3LAorCTB4YWIsIDB4NDIsIDB4ZmQsIDB4YjQsIDB4Y2EsIDB4YzYsIDB4OGQsIDB4OGMsIDB4MGQsIDB4NzgsIDB4NjUsIDB4ZGEsCisJMHgyMiwgMHg4ZCwgMHg3OCwgMHhjMCwgMHgzMywgMHhmMSwgMHg0NywgMHhkYSwgMHhhYSwgMHgxZSwgMHg3ZiwgMHg2MywKKwkweDlkLCAweGY4LCAweDJiLCAweGViLCAweGE0LCAweGZlLCAweDczLCAweDkwLCAweGFmLCAweGQ1LCAweDM0LCAweGM1LAorCTB4YjcsIDB4NjcsIDB4NzUsIDB4MGQsIDB4NjksIDB4OGIsIDB4MzIsIDB4MzgsIDB4YTQsIDB4ODcsIDB4OGQsIDB4YWYsCisJMHgyMywgMHg3ZiwgMHhhZiwgMHg0OCwgMHg0ZiwgMHhmYiwgMHhiOSwgMHgyZSwgMHhiMywgMHhiYiwgMHg1YiwgMHg1NiwKKwkweDMzLCAweDFlLCAweDkwLCAweGFkLCAweGNjLCAweGM3LCAweDA0LCAweDk0LCAweDVmLCAweDFkLCAweDEzLCAweGEwLAorCTB4OWYsIDB4ZjUsIDB4MDEsIDB4ZTAsIDB4ZWMsIDB4MTYsIDB4M2MsIDB4ZmIsIDB4NjQsIDB4ODgsIDB4NzEsIDB4ODcsCisJMHg0YSwgMHg2OCwgMHg5NywgMHg3ZiwgMHhkNSwgMHhkYSwgMHhlNSwgMHgyMSwgMHgxYywgMHgwOSwgMHhjMCwgMHg2MSwKKwkweGU0LCAweGYzLCAweDUyLCAweDNkLCAweGI3LCAweDUwLCAweDdmLCAweGU3LCAweGU3LCAweDZjLCAweGRhLCAweDg0LAorCTB4ZWMsIDB4MmEsIDB4NzEsIDB4ZGMsIDB4OTQsIDB4YzEsIDB4YzQsIDB4NGQsIDB4YjUsIDB4MGMsIDB4OGUsIDB4NWIsCisJMHgzYiwgMHgwYSwgMHg2NSwgMHhiNCwgMHhmYywgMHg1YywgMHgyYSwgMHgzYiwgMHgyOSwgMHhmNywgMHgxOCwgMHg5ZiwKKwkweDdmLCAweDIwLCAweDQ1LCAweDVhLCAweDdmLCAweGI3LCAweDY0LCAweGU2LCAweGUyLCAweGYzLCAweDAyLCAweDdhLAorCTB4OTMsIDB4NTQsIDB4MjQsIDB4YWQsIDB4ZDcsIDB4ZDMsIDB4YmMsIDB4MDksIDB4ZDksIDB4MjEsIDB4YmQsIDB4MzEsCisJMHhjNiwgMHgzYSwgMHgxOSwgMHhjZiwgMHhmMywgMHhmMywgMHgxMywgMHhiMCwgMHgxZiwgMHg4NiwgMHg0YiwgMHgwYSwKKwkweDE2LCAweDdjLCAweGFkLCAweDBjLCAweDc5LCAweDgxLCAweDZjLCAweDRmLCAweDM5LCAweDNhLCAweDc2LCAweDZjLAorCTB4NzQsIDB4NmQsIDB4YTksIDB4Y2UsIDB4ZDgsIDB4YWUsIDB4OGUsIDB4OGUsIDB4ZmYsIDB4Y2UsIDB4ODAsIDB4ZmEsCisJMHg2NiwgMHhiNCwgMHg3ZCwgMHhhYiwgMHhiNCwgMHhmZSwgMHg5ZCwgMHhkNiwgMHg2NSwgMHg0NiwgMHhlYiwgMHhjMiwKKwkweDM4LCAweGU2LCAweDhjLCAweDE3LCAweGIxLCAweGU1LCAweGFhLCAweGQzLCAweGE3LCAweGVhLCAweDQyLCAweDViLAorCTB4YjAsIDB4NTAsIDB4MDksIDB4ZDMsIDB4OWUsIDB4NWMsIDB4MjYsIDB4ZWQsIDB4ODUsIDB4NjUsIDB4ZDIsIDB4ZmUsCisJMHg3NiwgMHg5OSwgMHgzNCwgMHgxMywgMHgxNywgMHhlYywgMHgyZiwgMHg1ZSwgMHg0NiwgMHhkZSwgMHg4OCwgMHhlNiwKKwkweDU1LCAweDY5LCAweDM2LCAweGY2LCAweDc1LCAweDdlLCAweGFlLCAweGNjLCAweDJhLCAweGViLCAweDk3LCAweDMxLAorCTB4NDYsIDB4NmMsIDB4NjIsIDB4YzMsIDB4MzksIDB4MWQsIDB4MWIsIDB4ZGUsIDB4ZTIsIDB4NmQsIDB4NTMsIDB4OGMsCisJMHg3NSwgMHgxMSwgMHgxNywgMHgwOSwgMHhkOSwgMHhhYiwgMHhmMSwgMHg0MiwgMHg5YywgMHg3YywgMHg4NSwgMHgzMSwKKwkweGUwLCAweDNjLCAweGQ3LCAweDVhLCAweDEzLCAweGVhLCAweDRhLCAweGI0LCAweDNkLCAweDZmLCAweDliLCAweDk4LAorCTB4NzksIDB4OGIsIDB4ZTksIDB4NzUsIDB4ZDUsIDB4M2UsIDB4ZDgsIDB4MGEsIDB4ZmQsIDB4YzUsIDB4MjYsIDB4ZDksCisJMHgzZSwgMHg5NiwgMHg1OCwgMHg0MSwgMHhiZCwgMHhiNSwgMHg2MywgMHhjYywgMHhmOCwgMHg4MywgMHg3YiwgMHhjMSwKKwkweDU3LCAweDE5LCAweDIxLCAweDhjLCAweGM5LCAweDk0LCAweDA4LCAweDZkLCAweGUyLCAweGE1LCAweGI2LCAweGYwLAorCTB4ZWIsIDB4YjcsIDB4ZDcsIDB4N2IsIDB4ODUsIDB4ZjYsIDB4MWMsIDB4ZDgsIDB4MGUsIDB4M2YsIDB4NmIsIDB4N2IsCisJMHhmNSwgMHhkMiwgMHgzNywgMHgxNiwgMHhlMiwgMHg0YSwgMHhmZCwgMHg5YywgMHhmNSwgMHgyMiwgMHg1NywgMHhhOCwKKwkweGE3LCAweGVkLCAweDEyLCAweDc5LCAweDY2LCAweDRlLCAweDE2LCAweDZmLCAweDg0LCAweGNkLCAweDI0LCAweDQxLAorCTB4YjYsIDB4NWIsIDB4NWEsIDB4MjMsIDB4YTIsIDB4NjMsIDB4M2MsIDB4MjksIDB4MjMsIDB4OWIsIDB4M2IsIDB4YjgsCisJMHhiNiwgMHgwMywgMHhmYSwgMHgzNywgMHhiNiwgMHg4YSwgMHg4OSwgMHg5YiwgMHg4NiwgMHg3NiwgMHhjYSwgMHg3MiwKKwkweGI0LCAweDdiLCAweGJkLCAweGE1LCAweDVkLCAweGFlLCAweGE5LCAweGVlLCAweGEwLCAweGNjLCAweGM1LCAweDljLAorCTB4MTgsIDB4M2EsIDB4ZGUsIDB4NWUsIDB4OTQsIDB4NDQsIDB4NDgsIDB4YzcsIDB4MzMsIDB4ZjAsIDB4OGIsIDB4YWIsCisJMHhlOSwgMHg3OCwgMHg0NiwgMHg1MiwgMHg5YSwgMHg4ZSwgMHg2YiwgMHgxNywgMHhkMCwgMHg3MSwgMHhhYiwgMHhhNSwKKwkweGUzLCAweDc3LCAweDQ0LCAweDBkLCAweDVkLCAweDI4LCAweGFkLCAweGE3LCAweDQ4LCAweGE3LCAweDg2LCAweDhlLAorCTB4MWQsIDB4NGQsIDB4YzcsIDB4MzMsIDB4NzgsIDB4YmIsIDB4N2UsIDB4OGYsIDB4MmQsIDB4MTMsIDB4YjEsIDB4NjksCisJMHhmYywgMHgxZCwgMHhhNiwgMHg1MSwgMHgyZSwgMHhmZSwgMHg2NiwgMHhkNCwgMHhlOCwgMHhhNSwgMHgxNCwgMHhlOCwKKwkweDI4LCAweDRjLCAweGZmLCAweDYwLCAweGQ0LCAweGQwLCAweDY3LCAweDc1LCAweDlhLCAweDg5LCAweDhmLCAweGY0LAorCTB4MTcsIDB4ZGYsIDB4MTMsIDB4NWQsIDB4NDgsIDB4OWYsIDB4MjksIDB4ZDAsIDB4NjcsIDB4NTgsIDB4ZTYsIDB4ZjUsCisJMHhlOCwgMHhiMywgMHhkZSwgMHhhZSwgMHg1YiwgMHg0NCwgMHhmNSwgMHhiYSwgMHg3YiwgMHgyNiwgMHg2NiwgMHg2OCwKKwkweGY1LCAweDU2LCAweDNkLCAweDc2LCAweDhlLCAweGZiLCAweGQ5LCAweDlmLCAweDgxLCAweDU2LCAweGNkLCAweGRjLAorCTB4OWMsIDB4OWYsIDB4ZjcsIDB4YjcsIDB4MTksIDB4OGIsIDB4NGEsIDB4OTgsIDB4MTgsIDB4MzYsIDB4ZTMsIDB4YTQsCisJMHg1NywgMHhiMiwgMHgxZCwgMHg4ZCwgMHg3YywgMHhhYSwgMHhkMSwgMHhmMiwgMHhhOSwgMHg3MSwgMHg0OCwgMHhhNSwKKwkweGFiLCAweDY1LCAweDc2LCAweDM3LCAweDc0LCAweDA1LCAweDZkLCAweDZjLCAweDJkLCAweGE3LCAweDkxLCAweGQ3LAorCTB4OWEsIDB4YzgsIDB4MTYsIDB4ZmYsIDB4ZDksIDB4ZWUsIDB4NWYsIDB4ZTAsIDB4YmEsIDB4ODAsIDB4MGMsIDB4MzksCisJMHg0OCwgMHg2YiwgMHgyYiwgMHg5YiwgMHg3MSwgMHgyOSwgMHhiZiwgMHgxMSwgMHhkZiwgMHhkZCwgMHhkMiwgMHg1NiwKKwkweDU2LCAweDcyLCAweGZiLCAweDU4LCAweDgzLCAweGVjLCAweDJiLCAweGJhLCAweGYyLCAweDUxLCAweGQ0LCAweGZmLAorCTB4NDgsIDB4ZDEsIDB4ODMsIDB4M2YsIDB4M2UsIDB4MWUsIDB4YTUsIDB4NWQsIDB4YjgsIDB4YjcsIDB4YzgsIDB4ZjUsCisJMHg0OSwgMHhjNywgMHhhYywgMHgxOSwgMHgyZCwgMHg1OCwgMHhmMywgMHg4YywgMHg0OCwgMHg1YiwgMHg0NywgMHgwMSwKKwkweDllLCAweDhhLCAweGI4LCAweDNiLCAweDAxLCAweDQ3LCAweDVkLCAweDNhLCAweDJkLCAweGFmLCAweDc0LCAweDBmLAorCTB4MzgsIDB4ZGEsIDB4OTcsIDB4NzAsIDB4N2EsIDB4ZTQsIDB4YzYsIDB4NGEsIDB4NWEsIDB4NmUsIDB4YTgsIDB4OTgsCisJMHg3NSwgMHhkMiwgMHhmOSwgMHg3NSwgMHhkMCwgMHhhNCwgMHgzNywgMHgwZCwgMHg5ZCwgMHg5MywgMHhmMSwgMHg4MiwKKwkweGUwLCAweDNjLCAweGU0LCAweGI3LCAweDNhLCAweGUyLCAweDRhLCAweGI0LCAweDIzLCAweDE5LCAweDlmLCAweDE2LAorCTB4ZjMsIDB4N2QsIDB4YjEsIDB4ZmMsIDB4ZTMsIDB4NjAsIDB4MjgsIDB4ZTYsIDB4Y2EsIDB4MmIsIDB4M2UsIDB4YzcsCisJMHhkNSwgMHgyMywgMHhkNywgMHg5NywgMHhhYiwgMHhmYiwgMHhlMywgMHg1YSwgMHhlOSwgMHgxMywgMHg1MSwgMHhhZSwKKwkweDRkLCAweDY0LCAweDJiLCAweGU1LCAweDI4LCAweGUzLCAweGU3LCAweDIyLCAweDc5LCAweDY5LCAweDdiLCAweDJiLAorCTB4N2MsIDB4MzcsIDB4NDgsIDB4ZWIsIDB4YjYsIDB4YjcsIDB4ODIsIDB4NTYsIDB4NjIsIDB4ZDAsIDB4ZjMsIDB4NWIsCisJMHgwMSwgMHhkNywgMHg1NiwgMHhjNiwgMHhiYiwgMHgxOCwgMHhlNywgMHhlMiwgMHhmNywgMHg1ZiwgMHhhMiwgMHg1ZiwKKwkweGQ2LCAweGZkLCAweDVkLCAweGJkLCAweDY2LCAweDI1LCAweDhhLCAweDczLCAweDZlLCAweGY4LCAweDY1LCAweDc5LAorCTB4NWQsIDB4ZDMsIDB4MzgsIDB4MTQsIDB4NGQsIDB4OGIsIDB4MTMsIDB4N2QsIDB4NWIsIDB4NWMsIDB4NTYsIDB4ZjgsCisJMHhkNSwgMHhmZCwgMHg3MywgMHhlZCwgMHg1NywgMHgxNCwgMHg3MCwgMHhlOCwgMHhlZSwgMHhkOCwgMHhkYywgMHgyMywKKwkweDdkLCAweDE4LCAweDVmLCAweGZmLCAweDkyLCAweGYxLCAweGVkLCAweDE3LCAweGM2LCAweDU0LCAweDJmLCAweDE2LAorCTB4MzksIDB4ODYsIDB4ZjksIDB4NzEsIDB4YTksIDB4M2YsIDB4MzIsIDB4ZTMsIDB4OGEsIDB4NzYsIDB4MmMsIDB4MWUsCisJMHg4ZiwgMHhhZSwgMHhhZiwgMHg0ZSwgMHgwMSwgMHg5NiwgMHhlNywgMHhmNCwgMHgxZSwgMHg4MSwgMHgyMCwgMHhiOCwKKwkweGE2LCAweGUzLCAweDYyLCAweDkwLCAweDU4LCAweDk3LCAweGVjLCAweDljLCAweDllLCAweDVmLCAweGQzLCAweDE5LAorCTB4OGEsIDB4YTQsIDB4MzMsIDB4MWEsIDB4ZmYsIDB4ZjgsIDB4NGUsIDB4ZTQsIDB4Y2EsIDB4ZGQsIDB4OTgsIDB4M2IsCisJMHg3MSwgMHg3MywgMHg1ZCwgMHhhZSwgMHhlNiwgMHg4ZCwgMHg5YywgMHhkZiwgMHg2ZCwgMHhkNywgMHhhZCwgMHg0MiwKKwkweGJmLCAweDI5LCAweDA4LCAweDk0LCAweGJmLCAweDU4LCAweDU2LCAweDUwLCAweDQ3LCAweDYxLCAweGVjLCAweGIyLAorCTB4ZGIsIDB4ZWUsIDB4NGIsIDB4NDksIDB4MzEsIDB4NmUsIDB4MzgsIDB4ZTQsIDB4YTYsIDB4YTMsIDB4ODksIDB4NDIsCisJMHhiOSwgMHgwYiwgMHhiZiwgMHgxYiwgMHhmMCwgMHhmZSwgMHg0NSwgMHhkOCwgMHgyOCwgMHgzZCwgMHhiMCwgMHg2MSwKKwkweDI0LCAweGE2LCAweDhjLCAweDNjLCAweDAwLCAweGZkLCAweDc2LCAweGU0LCAweDk1LCAweDIyLCAweDNmLCAweDdhLAorCTB4ODksIDB4ZTEsIDB4NzIsIDB4MmMsIDB4MzEsIDB4NWEsIDB4ZGUsIDB4Y2IsIDB4ZmEsIDB4MjgsIDB4N2IsIDB4YTUsCisJMHhmOCwgMHgxZCwgMHhmYiwgMHg2MiwgMHgxZiwgMHhmNCwgMHg3OSwgMHg3ZiwgMHg5NiwgMHgzZSwgMHg1YywgMHhkYiwKKwkweDM2LCAweGRiLCAweDBjLCAweGYxLCAweGUyLCAweGQyLCAweDBkLCAweGM3LCAweGJmLCAweDZlLCAweGViLCAweDhmLAorCTB4NzAsIDB4N2MsIDB4N2IsIDB4MmQsIDB4ZGMsIDB4OGIsIDB4ZmIsIDB4N2QsIDB4NDksIDB4ZGIsIDB4MmMsIDB4OGYsCisJMHg1NSwgMHg2OCwgMHgyNywgMHg3MiwgMHg0ZCwgMHgyNywgMHg3OSwgMHg2MiwgMHg1YywgMHgwOCwgMHg0NywgMHgxMCwKKwkweDVjLCAweDQ4LCAweDE5LCAweDdkLCAweGZkLCAweDc0LCAweDg1LCAweGViLCAweDFhLCAweDQxLCAweGYwLCAweDVkLAorCTB4ZGEsIDB4YzIsIDB4ODMsIDB4MjUsIDB4ZjQsIDB4MTcsIDB4ZTIsIDB4NjAsIDB4NjMsIDB4ZGUsIDB4ODUsIDB4MmMsCisJMHgxYywgMHhlOSwgMHgyNiwgMHg3ZSwgMHgwNSwgMHg1ZSwgMHg2OSwgMHg4NywgMHhiNywgMHg0YiwgMHhhMiwgMHg4OSwKKwkweGRmLCAweDJlLCAweDM3LCAweDI0LCAweDNlLCAweDUxLCAweGY2LCAweDgwLCAweDY3LCAweDhlLCAweDNiLCAweDk2LAorCTB4ZDgsIDB4NjMsIDB4YzcsIDB4Y2MsIDB4ZmQsIDB4MjAsIDB4YWYsIDB4YmYsIDB4NGYsIDB4ZTMsIDB4YTUsIDB4MDUsCisJMHgzZSwgMHgxMiwgMHg2MSwgMHg5YSwgMHg4NywgMHg4NSwgMHhiMCwgMHgyNSwgMHgyYywgMHg2ZSwgMHg4MiwgMHhlMCwKKwkweGZiLCAweDI5LCAweGY2LCAweGQ5LCAweGNkLCAweGZkLCAweDAwLCAweDIzLCAweGU4LCAweDM3LCAweGJmLCAweDU2LAorCTB4MTEsIDB4MGYsIDB4ZDEsIDB4YzQsIDB4MWQsIDB4ZTgsIDB4ZmIsIDB4YjcsIDB4ZDEsIDB4ZjcsIDB4YmUsIDB4MzIsCisJMHhmYiwgMHg4MywgMHg3YywgMHhjMCwgMHhkOCwgMHg0NywgMHgyYSwgMHgyMSwgMHhiYywgMHhjYiwgMHhmNSwgMHgxZCwKKwkweGNlLCAweDc5LCAweGE3LCAweGI1LCAweGViLCAweGMyLCAweDZmLCAweDhkLCAweDQ4LCAweDRmLCAweGMxLCAweDk3LAorCTB4Y2IsIDB4NTYsIDB4NjYsIDB4ZDYsIDB4YjgsIDB4ZjIsIDB4MmUsIDB4YzgsIDB4ZGEsIDB4NDAsIDB4NGUsIDB4NDIsCisJMHg4NiwgMHhjZCwgMHg2OCwgMHhiYSwgMHhjOSwgMHhhZSwgMHhlNywgMHhmZiwgMHgxMSwgMHhmOSwgMHhlNCwgMHgwYSwKKwkweGM2LCAweDk0LCAweDdiLCAweDdkLCAweGRhLCAweGFiLCAweGIzLCAweGMxLCAweDhjLCAweDRmLCAweDk5LCAweGJjLAorCTB4NGEsIDB4YzYsIDB4YmQsIDB4N2MsIDB4MjcsIDB4ZjQsIDB4MDMsIDB4ZDIsIDB4MWEsIDB4ZTksIDB4NjMsIDB4MjcsCisJMHhiMiwgMHg5MSwgMHg2NCwgMHg2MiwgMHg1OCwgMHhiOCwgMHhjNywgMHg4OSwgMHhmYiwgMHgxMywgMHhiOCwgMHhlZiwKKwkweDg3LCAweGYyLCAweGMwLCAweDg1LCAweDljLCAweGUzLCAweDFjLCAweDlhLCAweGZlLCAweDg2LCAweGNiLCAweGYzLAorCTB4NjUsIDB4MGYsIDB4MDgsIDB4ZDcsIDB4MDksIDB4OTMsIDB4ZjEsIDB4YmQsIDB4ZGEsIDB4MjYsIDB4MDEsIDB4ZDUsCisJMHgxNSwgMHg1OSwgMHg3NiwgMHgzMywgMHgyYywgMHgxMiwgMHhiZiwgMHhhYSwgMHhiYywgMHhkZSwgMHg3MywgMHgwNSwKKwkweDNlLCAweDY3LCAweDFjLCAweDIxLCAweDFhLCAweGNkLCAweDE2LCAweGU1LCAweGI1LCAweDQ4LCAweGI3LCAweGJjLAorCTB4OTYsIDB4NGQsIDB4ZDUsIDB4NGIsIDB4YWYsIDB4OTYsIDB4ZjksIDB4Y2MsIDB4ZDMsIDB4ZTksIDB4YjMsIDB4MjYsCisJMHhkZCwgMHg4NSwgMHgyZSwgMHhlMSwgMHg5YywgMHhmNCwgMHg0MCwgMHg0NiwgMHg0ZiwgMHgwMCwgMHg2ZSwgMHhlMiwKKwkweGIwLCAweDg3LCAweDMyLCAweDg5LCAweGYzLCAweGE3LCAweDU0LCAweDNhLCAweDE2LCAweGNkLCAweDk1LCAweGE1LAorCTB4MmYsIDB4NTcsIDB4YjQsIDB4YjEsIDB4OWUsIDB4MDEsIDB4OGUsIDB4N2YsIDB4OTUsIDB4YzUsIDB4NDMsIDB4YTMsCisJMHhiOCwgMHg4MCwgMHhhZCwgMHgyZiwgMHg5MiwgMHg3MCwgMHhlMCwgMHgyYiwgMHg0MywgMHhkNywgMHgzZiwgMHhiYSwKKwkweDRhLCAweDFhLCAweDg5LCAweDliLCAweDFlLCAweGYwLCAweDUyLCAweDBkLCAweDc0LCAweGQxLCAweGZkLCAweGNkLAorCTB4NWMsIDB4MzcsIDB4ZDUsIDB4MzYsIDB4NjQsIDB4ZWMsIDB4NjMsIDB4YmYsIDB4YWMsIDB4ZDIsIDB4N2YsIDB4MWIsCisJMHg1NywgMHhlOSwgMHg1MSwgMHgyYiwgMHgyZiwgMHhhMywgMHg3ZCwgMHg5NCwgMHg5NywgMHg0ZiwgMHg5NywgMHgwOCwKKwkweDhmLCAweDc4LCAweDExLCAweDNmLCAweGQxLCAweGQ3LCAweDViLCAweDE2LCAweDE1LCAweDQ5LCAweDdiLCAweGQxLAorCTB4ZGUsIDB4ZjIsIDB4NDIsIDB4ZmEsIDB4N2YsIDB4YmEsIDB4ZjIsIDB4NjEsIDB4NmIsIDB4MGIsIDB4NTYsIDB4YzcsCisJMHg1NCwgMHhhYiwgMHhmMywgMHhjOCwgMHg4MywgMHhjYiwgMHhlNSwgMHgxMSwgMHgyNiwgMHg4OSwgMHhhZSwgMHg0OCwKKwkweDVmLCAweGY4LCAweDU0LCAweDdiLCAweDQ3LCAweGRlLCAweGFiLCAweDE1LCAweGUyLCAweDM5LCAweDgwLCAweGRjLAorCTB4MDYsIDB4YWUsIDB4Y2IsIDB4NWMsIDB4YWYsIDB4ZGUsIDB4OGYsIDB4NzksIDB4ZmIsIDB4M2YsIDB4NDEsIDB4MjYsCisJMHhjNiwgMHg3YywgMHg0ZiwgMHhlYSwgMHhlMCwgMHhkYiwgMHhiZSwgMHgwYywgMHhkZCwgMHhmOSwgMHg4YSwgMHg3ZiwKKwkweGUxLCAweDUzLCAweDlkLCAweDFkLCAweDQxLCAweGYwLCAweGFjLCAweDlmLCAweDRmLCAweGI4LCAweDkwLCAweDFmLAorCTB4ODcsIDB4MmQsIDB4YmUsIDB4ODcsIDB4ODEsIDB4ZWYsIDB4ODksIDB4MzksIDB4N2MsIDB4MjcsIDB4ZTQsIDB4NjIsCisJMHhkNywgMHhmNywgMHgwMywgMHhhZSwgMHhmNSwgMHgwZCwgMHg5NywgMHg2ZiwgMHhiZCwgMHg1NSwgMHhhNSwgMHgzZiwKKwkweGZlLCAweGExLCAweDZjLCAweDM3LCAweGZiLCAweDFiLCAweDkxLCAweGMzLCAweDk1LCAweDliLCAweDg4LCAweGJmLAorCTB4MjgsIDB4YzYsIDB4N2EsIDB4NGYsIDB4OWYsIDB4NmYsIDB4ZmEsIDB4ZWQsIDB4NWIsIDB4ZDAsIDB4MmYsIDB4ZTksCisJMHhlNSwgMHg0NywgMHhhYywgMHg4YiwgMHgzMiwgMHhkNSwgMHg3NSwgMHgzMywgMHhhMCwgMHhjYiwgMHhiYywgMHhhZCwKKwkweDNiLCAweDcwLCAweDg1LCAweGJhLCAweGRlLCAweDE1LCAweGVhLCAweDFlLCAweDQ2LCAweGRkLCAweDNkLCAweGI2LAorCTB4ZWUsIDB4ODUsIDB4Y2YsIDB4YmMsIDB4YjksIDB4N2UsIDB4MDcsIDB4YjgsIDB4YzcsIDB4MGUsIDB4M2UsIDB4ODAsCisJMHhiOCwgMHgxMSwgMHhmZiwgMHgzNiwgMHhmYywgMHhiZSwgMHg4NSwgMHhlZCwgMHgyOCwgMHhkYSwgMHhmNywgMHgyMywKKwkweDk1LCAweDIxLCAweDE5LCAweGFlLCAweGVjLCAweGM0LCAweDMzLCAweDg4LCAweGI0LCAweDNlLCAweDNjLCAweGZiLAorCTB4ZjAsIDB4M2IsIDB4OGQsIDB4NDcsIDB4YTIsIDB4NmUsIDB4ZmEsIDB4YzIsIDB4NWQsIDB4YzMsIDB4N2UsIDB4ODgsCisJMHg1NywgMHhhZSwgMHhjZCwgMHhiMywgMHgwZiwgMHhkOCwgMHgxNywgMHg1ZCwgMHgzZiwgMHg0MSwgMHgxZiwgMHg2MSwKKwkweGZhLCAweDA3LCAweDUwLCAweDY3LCAweDFhLCAweDY5LCAweDJiLCAweDY5LCAweDdiLCAweDYyLCAweGFlLCAweGFiLAorCTB4ZWIsIDB4NTQsIDB4YzMsIDB4MzYsIDB4MWQsIDB4Y2UsIDB4MDUsIDB4ZjIsIDB4MGQsIDB4OGQsIDB4ZjYsIDB4MTYsCisJMHg0MywgMHgxOCwgMHhlZiwgMHg0NCwgMHgxYiwgMHhlMywgMHg1NywgMHgyOSwgMHhmZiwgMHgxZSwgMHhjMiwgMHgxNSwKKwkweDU3LCAweGZlLCAweGM3LCAweGYwLCAweDdlLCAweDJkLCAweGQ4LCAweDlkLCAweDYyLCAweDRjLCAweDllLCAweGYzLAorCTB4N2UsIDB4ZGQsIDB4YWEsIDB4YTUsIDB4N2IsIDB4OWYsIDB4NDIsIDB4MWEsIDB4ZTgsIDB4ODQsIDB4NGUsIDB4NjksCisJMHhiMCwgMHg3NCwgMHg1YSwgMHg4MCwgMHhlNSwgMHg0MywgMHgxYSwgMHhlNSwgMHg5OCwgMHgxNywgMHg5NywgMHg0ZCwKKwkweDc2LCAweGU2LCAweGE1LCAweDA3LCAweGJhLCAweDhjLCAweGIyLCAweGY2LCAweGQzLCAweGY1LCAweDI2LCAweDBlLAorCTB4MDMsIDB4Y2IsIDB4ZDEsIDB4ZWYsIDB4MDQsIDB4M2QsIDB4MzcsIDB4ODgsIDB4ODcsIDB4ZmEsIDB4MDMsIDB4MTEsCisJMHgwZiwgMHgzNCwgMHgxOCwgMHhkNiwgMHg0ZiwgMHg3YSwgMHgwMywgMHgxMSwgMHg4ZSwgMHgxOSwgMHgxYywgMHg1ZiwKKwkweGU2LCAweGJhLCAweDM0LCAweDZkLCAweDZiLCAweGQ2LCAweDBmLCAweDZkLCAweDFjLCAweGZlLCAweDdiLCAweDU5LAorCTB4YzQsIDB4NjcsIDB4MWEsIDB4ZGIsIDB4MGIsIDB4ZGUsIDB4NTUsIDB4ZTMsIDB4MmYsIDB4NTksIDB4NjMsIDB4YzEsCisJMHgzOCwgMHhmMywgMHg0OSwgMHg2OCwgMHgzMCwgMHhhZiwgMHg0ZiwgMHhjYiwgMHhlOSwgMHhmYywgMHgzNSwgMHgzNSwKKwkweGQyLCAweGUwLCAweGY1LCAweGViLCAweGRmLCAweDJjLCAweGQzLCAweGUwLCAweDgxLCAweDRmLCAweDE3LCAweDk1LAorCTB4NjEsIDB4MWEsIDB4ZjMsIDB4MGEsIDB4NmIsIDB4OTQsIDB4ZGUsIDB4YWIsIDB4YTQsIDB4ZjcsIDB4MjgsIDB4YzksCisJMHg4MywgMHhhOSwgMHg2NCwgMHg2MiwgMHg0OCwgMHgyNSwgMHhiZCwgMHg3MSwgMHhkOSwgMHgwZiwgMHhiOSwgMHg0MywKKwkweDM5LCAweDM5LCAweDczLCAweDdmLCAweDQ0LCAweGI4LCAweDlmLCAweGVmLCAweDVkLCAweDkyLCAweGY1LCAweDI5LAorCTB4M2YsIDB4MGIsIDB4OWYsIDB4NTcsIDB4OTQsIDB4NzUsIDB4OTUsIDB4OTcsIDB4MWEsIDB4Y2MsIDB4ZDgsIDB4YjgsCisJMHgwZiwgMHgwMSwgMHg3MCwgMHgzNiwgMHhkMSwgMHg4NiwgMHhiYiwgMHhiNSwgMHg4MSwgMHgzYywgMHg5NCwgMHg1MCwKKwkweDExLCAweGQ5LCAweDQ1LCAweDNmLCAweDVmLCAweDdkLCAweGIxLCAweDVlLCAweGVhLCAweGE3LCAweGQ3LCAweDc4LAorCTB4NTIsIDB4ZDEsIDB4ZTksIDB4NjYsIDB4N2YsIDB4NjAsIDB4YjIsIDB4NzMsIDB4NDgsIDB4ODksIDB4MWUsIDB4N2IsCisJMHg0NiwgMHhiZCwgMHg5MSwgMHhjYywgMHg5ZSwgMHhiNSwgMHhmYSwgMHgyMywgMHg5MCwgMHhjNywgMHhiNCwgMHhiZSwKKwkweDk4LCAweGY5LCAweGJjLCAweDJiLCAweDE3LCAweDgyLCAweGI2LCAweDRkLCAweDE3LCAweGRhLCAweGIzLCAweDVkLAorCTB4YjQsIDB4NzMsIDB4NTcsIDB4ZDksIDB4ZmQsIDB4OTUsIDB4OGMsIDB4NjMsIDB4YmQsIDB4NGIsIDB4OWUsIDB4ZjMsCisJMHgwYiwgMHgxOCwgMHhmNywgMHg3ZSwgMHhiOSwgMHhlMCwgMHhiMywgMHhiZiwgMHg5OSwgMHhjZiwgMHg3OSwgMHhjMiwKKwkweDc0LCAweGMyLCAweDZlLCAweGZhLCAweDEzLCAweGY1LCAweGE3LCAweDgwLCAweDg3LCAweDdkLCAweDUyLCAweDA3LAorCTB4NWYsIDB4YzksIDB4ZWUsIDB4NGIsIDB4MGUsIDB4ZTQsIDB4NDUsIDB4Y2YsIDB4NGIsIDB4OGYsIDB4YTAsIDB4YWQsCisJMHgxNSwgMHgzZSwgMHhmOCwgMHgxMCwgMHg3NiwgMHg3MywgMHhjZCwgMHg5MSwgMHhhYiwgMHgyMSwgMHg3NywgMHgxZCwKKwkweGJkLCAweGM3LCAweDAyLCAweDkzLCAweGUxLCAweDRkLCAweDYxLCAweGRlLCAweDMzLCAweDAzLCAweDJjLCAweDU3LAorCTB4MmYsIDB4ZDMsIDB4MzEsIDB4ZjIsIDB4YmEsIDB4ZTYsIDB4OTcsIDB4NGYsIDB4NjUsIDB4ZmQsIDB4NzYsIDB4NGYsCisJMHgzOSwgMHhjMywgMHg4YywgMHgzMSwgMHgwMCwgMHhhZiwgMHhhNCwgMHhjZCwgMHg1NCwgMHg2YywgMHhiYiwgMHhjZiwKKwkweGI2LCAweDU4LCAweGU2LCAweDJhLCAweGY5LCAweGY2LCAweGMwLCAweDg1LCAweDdmLCAweDc4LCAweGQ2LCAweGZmLAorCTB4N2IsIDB4YzAsIDB4OTEsIDB4ODEsIDB4NGMsIDB4ZTAsIDB4ZjMsIDB4NmEsIDB4OTAsIDB4OGYsIDB4MzEsIDB4YTYsCisJMHhmNSwgMHhiZiwgMHhlYiwgMHhhZCwgMHg5ZCwgMHhhYywgMHg3OSwgMHg3ZiwgMHg1OCwgMHhlZiwgMHg5MywgMHg3OSwKKwkweGZlLCAweDMzLCAweDU5LCAweGFlLCAweDc3LCAweGMwLCAweDM2LCAweGM5LCAweDY5LCAweGI5LCAweDE4LCAweGZkLAorCTB4NjksIDB4MGUsIDB4ZjAsIDB4MTQsIDB4MmEsIDB4YjQsIDB4NDMsIDB4ZmUsIDB4MDYsIDB4NzYsIDB4ODgsIDB4ZDYsCisJMHg5MywgMHhmMiwgMHhlZCwgMHg0MSwgMHhlNiwgMHhiMSwgMHhkZCwgMHhlYywgMHhkNSwgMHhhZSwgMHhkNiwgMHgwYiwKKwkweDIxLCAweDJjLCAweGM5LCAweGNlLCAweDFjLCAweGYyLCAweDQ3LCAweGI0LCAweDFkLCAweGVmLCAweGM5LCAweGFjLAorCTB4ZTcsIDB4ZWEsIDB4N2QsIDB4MjcsIDB4ZjksIDB4YzEsIDB4MjAsIDB4NzgsIDB4YzUsIDB4NzcsIDB4ZTUsIDB4YTQsCisJMHg4NiwgMHhmOSwgMHgwNSwgMHhmNCwgMHhlMSwgMHhjOCwgMHhjNCwgMHg4MCwgMHhmYiwgMHhkMywgMHg5MywgMHgzZSwKKwkweGM3LCAweGM3LCAweDNjLCAweGFlLCAweDJiLCAweDZkLCAweDhlLCAweDFiLCAweGY4LCAweDY4LCAweDliLCAweDdlLAorCTB4MmYsIDB4OTgsIDB4OGQsIDB4NzEsIDB4ZGQsIDB4MDIsIDB4M2MsIDB4NWQsIDB4NmEsIDB4ZjcsIDB4NmUsIDB4OTAsCisJMHhkYiwgMHhlNiwgMHg2YywgMHg5YSwgMHg2OSwgMHgzMSwgMHgzNiwgMHhhMywgMHhkMSwgMHg2OSwgMHgxNywgMHhmZSwKKwkweDYxLCAweGM0LCAweGJmLCAweGIwLCAweGJhLCAweDgwLCAweGI5LCAweDgxLCAweDBlLCAweDViLCAweDBjLCAweDRiLAorCTB4OGEsIDB4YjAsIDB4MGMsIDB4NmIsIDB4NTgsIDB4NjIsIDB4YzAsIDB4YTUsIDB4MGIsIDB4ZDksIDB4NzcsIDB4OWIsCisJMHgxYywgMHgwMiwgMHhkZSwgMHg4NywgMHgwNiwgMHg0NSwgMHg5ZSwgMHg4NSwgMHg0ZCwgMHg3NiwgMHhiZSwgMHgwYSwKKwkweDllLCAweDE5LCAweGMwLCAweDczLCAweGRlLCAweGU3LCAweDVlLCAweDAwLCAweGU2LCAweGY5LCAweGRlLCAweGIwLAorCTB4NzAsIDB4MmYsIDB4MDAsIDB4NzEsIDB4ZDgsIDB4ODEsIDB4ZGYsIDB4MjIsIDB4MzMsIDB4ZDAsIDB4YmYsIDB4MjcsCisJMHhmZCwgMHhkNywgMHg4MiwgMHhmMSwgMHgxOCwgMHg3NSwgMHgyMywgMHhkYSwgMHg5OSwgMHhkYiwgMHgxYiwgMHgxNCwKKwkweGM4LCAweGU3LCAweDUzLCAweGQ0LCAweDQzLCAweGI1LCAweGQyLCAweGI2LCAweDhlLCAweDdlLCAweDg4LCAweDkxLAorCTB4OWYsIDB4MzcsIDB4ZjgsIDB4MTksIDB4ZjQsIDB4ZjUsIDB4NWIsIDB4MmIsIDB4YTUsIDB4M2UsIDB4MmYsIDB4ZmQsCisJMHgxZCwgMHg3NSwgMHhjOCwgMHg3MywgMHg2ZCwgMHhkZSwgMHg4MCwgMHhjZSwgMHhlYiwgMHhlZiwgMHgzOCwgMHg4YywKKwkweGZjLCAweDhmLCAweGFmLCAweDY0LCAweGJjLCAweGRiLCAweGY1LCAweGQ3LCAweDRiLCAweGRiLCAweDFhLCAweGU2LAorCTB4NTUsIDB4ZjMsIDB4ZTAsIDB4YWIsIDB4ZGMsIDB4ODMsIDB4NjksIDB4NzUsIDB4MzgsIDB4NjQsIDB4NTksIDB4MjksCisJMHhlZiwgMHg3MSwgMHhhNywgMHhkZCwgMHgyMSwgMHhjYywgMHhjNSwgMHg2ZSwgMHg5ZiwgMHhiMiwgMHhlZCwgMHhiZiwKKwkweGEzLCAweDZlLCAweDRhLCAweDZlLCAweGY0LCAweDA3LCAweDkxLCAweDM3LCAweDhkLCAweGJjLCAweGMzLCAweDM2LAorCTB4NmYsIDB4ZDAsIDB4ZTYsIDB4NmQsIDB4NDMsIDB4ZGUsIDB4M2UsIDB4ZTAsIDB4ZWYsIDB4NmUsIDB4OWQsIDB4OWUsCisJMHhlNSwgMHg2ZiwgMHg1MywgMHhjNywgMHg1YiwgMHhkOSwgMHg3MSwgMHhlMSwgMHgzMywgMHgzNywgMHhmOCwgMHg4NCwKKwkweDBiLCAweDc5LCAweDI1LCAweGFlLCAweDhiLCAweGRlLCAweDI2LCAweDc5LCAweDJmLCAweDc5LCAweDBiLCAweDdiLAorCTB4ZmQsIDB4NjYsIDB4YjEsIDB4MGUsIDB4YjIsIDB4ODksIDB4N2IsIDB4ODAsIDB4NjksIDB4YjMsIDB4NmUsIDB4ZjEsCisJMHg1ZSwgMHg5NiwgMHhmZiwgMHg0MCwgMHhiYSwgMHhlYiwgMHhjOSwgMHgzOCwgMHg1ZiwgMHg1YiwgMHhjOSwgMHhiOCwKKwkweGQ4LCAweDg4LCAweDRmLCAweGZiLCAweDNhLCAweDkwLCAweDljLCAweDVlLCAweDNmLCAweGExLCAweDdmLCAweDViLAorCTB4NDQsIDB4M2EsIDB4ZTksIDB4NDEsIDB4MzUsIDB4NDUsIDB4ZjQsIDB4M2UsIDB4MmQsIDB4N2UsIDB4NDcsIDB4NjEsCisJMHhmNywgMHgwNiwgMHg0MiwgMHg5ZiwgMHg4ZiwgMHgzNiwgMHg1ZCwgMHhjNiwgMHhlMywgMHhkYSwgMHg1MCwgMHg5OCwKKwkweGU3LCAweDIxLCAweDRmLCAweDZkLCAweDhhLCAweGMwLCAweDI2LCAweGFhLCAweGY1LCAweDFkLCAweDFkLCAweGEzLAorCTB4MmUsIDB4ZTgsIDB4NzUsIDB4MDAsIDB4YzYsIDB4ZGYsIDB4MzIsIDB4ZjAsIDB4NjMsIDB4MDIsIDB4ZTksIDB4NDcsCisJMHhkZiwgMHhhNCwgMHhmZCwgMHg2OCwgMHg4NywgMHhlZiwgMHgxZCwgMHgxMCwgMHhlZSwgMHg2NywgMHg2NSwgMHg3YSwKKwkweGJiLCAweGY3LCAweDZkLCAweDk5LCAweGE3LCAweGYzLCAweDE5LCAweDQ5LCAweDY2LCAweDk0LCAweDAzLCAweGZmLAorCTB4NzUsIDB4YWIsIDB4MjMsIDB4ZjUsIDB4YjAsIDB4M2QsIDB4NmUsIDB4MzAsIDB4ZmEsIDB4Y2QsIDB4ZTMsIDB4OWUsCisJMHhjNCwgMHg4YiwgMHhkYSwgMHg1NiwgMHg2YiwgMHhiNCwgMHhmMywgMHg5MSwgMHgwNSwgMHg2ZSwgMHhiOCwgMHgxZiwKKwkweDdjLCAweGUwLCAweDllLCAweGRkLCAweDdlLCAweDIxLCAweDA5LCAweDZhLCAweGQ0LCAweGJhLCAweDcxLCAweDE4LAorCTB4YjQsIDB4OTEsIDB4NGQsIDB4MTksIDB4ZGQsIDB4NzgsIDB4YzMsIDB4OWMsIDB4NmUsIDB4ZmMsIDB4ZjMsIDB4OTUsCisJMHhlNCwgMHg4OSwgMHhlMSwgMHg3MiwgMHgxYywgMHg3NSwgMHhmNSwgMHgzYSwgMHg0YSwgMHg4MiwgMHg3NSwgMHg2YiwKKwkweDMxLCAweDlmLCAweGU3LCAweGZkLCAweGVjLCAweDM1LCAweGEwLCAweDJmLCAweGM4LCAweGUxLCAweDY0LCAweGU3LAorCTB4MjksIDB4ZDQsIDB4MmQsIDB4YTAsIDB4ZWUsIDB4ZTQsIDB4NWMsIDB4NWQsIDB4NDcsIDB4NDYsIDB4N2MsIDB4YmQsCisJMHhlZiwgMHg1OSwgMHgyNiwgMHhjYiwgMHgyMSwgMHgxZCwgMHgyNiwgMHhlMywgMHhiNywgMHg2YSwgMHg1ZSwgMHhlMCwKKwkweDdlLCAweDMwLCAweDM3LCAweDcxLCAweDlmLCAweDZjLCAweGQ2LCAweGI0LCAweGRkLCAweDI3LCAweGRjLCAweDI3LAorCTB4YzUsIDB4YjYsIDB4ZWYsIDB4MGIsIDB4ZGEsIDB4ZDYsIDB4MTAsIDB4YmUsIDB4MTIsIDB4ZGUsIDB4YTQsIDB4OGQsCisJMHgzMSwgMHhiYywgMHhjMywgMHhmOSwgMHgzNywgMHhmMywgMHgzZSwgMHhlNCwgMHgxMCwgMHhkZiwgMHhiZiwgMHgxZiwKKwkweGU0LCAweDA3LCAweDM5LCAweDJmLCAweGZjLCAweDllLCAweGE3LCAweGI5LCAweDExLCAweGQwLCAweDVjLCAweGM0LAorCTB4N2YsIDB4YmIsIDB4MGMsIDB4ZWIsIDB4M2QsIDB4MTAsIDB4MjksIDB4OTksIDB4ZDAsIDB4ZjEsIDB4Y2MsIDB4MGIsCisJMHhjMSwgMHgyMywgMHgwYiwgMHhlNCwgMHhmOCwgMHg0NywgMHg5NCwgMHhhMSwgMHgyMSwgMHhmZSwgMHgyZSwgMHgyNCwKKwkweGVhLCAweDY0LCAweDY2LCAweDRkLCAweDlkLCAweGRlLCAweGYxLCAweDQxLCAweDdjLCAweDhjLCAweGRlLCAweDczLAorCTB4M2IsIDB4ZjgsIDB4ZjUsIDB4ZmEsIDB4YjksIDB4YjEsIDB4MDAsIDB4ZGYsIDB4YzAsIDB4ZTMsIDB4NGUsIDB4NjMsCisJMHhlYiwgMHg2MywgMHgxYywgMHgxOSwgMHhlZCwgMHhiZiwgMHg2NywgMHg4YiwgMHg0YSwgMHhlZiwgMHgwYiwgMHhhMiwKKwkweDhlLCAweDNmLCAweDAwLCAweDlkLCAweDZhLCAweGY2LCAweGE0LCAweGUwLCAweDVkLCAweGUxLCAweGJjLCAweDI5LAorCTB4ZWQsIDB4NzMsIDB4MWMsIDB4MDQsIDB4MGYsIDB4MWYsIDB4ZjQsIDB4YjMsIDB4NmIsIDB4NmEsIDB4NzUsIDB4ZGIsCisJMHg0OSwgMHhlZiwgMHg3YSwgMHg2ZCwgMHgxMywgMHg2ZSwgMHg5NCwgMHg5OSwgMHgxNCwgMHhkYiwgMHgyMywgMHg1ZSwKKwkweGZlLCAweDQ3LCAweDMwLCAweGU0LCAweGNkLCAweGEwLCAweDdmLCAweDQzLCAweGZmLCAweDU5LCAweDVmLCAweGI1LAorCTB4ZDQsIDB4NDksIDB4ZjUsIDB4M2UsIDB4NTMsIDB4ZTIsIDB4YzksIDB4ODUsIDB4YmQsIDB4ZDIsIDB4MDEsIDB4ZmMsCisJMHgxOCwgMHg3OCwgMHg3MywgMHhlNSwgMHhiNywgMHg0OSwgMHgyMSwgMHhlNiwgMHhkYSwgMHhiMSwgMHg0NSwgMHhiNCwKKwkweDJmLCAweDM3LCAweDkxLCAweGFhLCAweDgzLCAweDJkLCAweGY4LCAweDE3LCAweGMxLCAweGU0LCAweDgyLCAweDMxLAorCTB4MWUsIDB4YWMsIDB4MWEsIDB4ZTMsIDB4NGMsIDB4MDIsIDB4ZDgsIDB4NjgsIDB4ODksIDB4Y2MsIDB4YzksIDB4MDEsCisJMHhmNiwgMHg2NSwgMHg2NCwgMHg1MiwgMHgzOCwgMHhjNiwgMHgzYSwgMHg4YywgMHg3MSwgMHhjNywgMHhkYywgMHgxOCwKKwkweDBmLCAweDJmLCAweDFhLCAweGUzLCAweDYxLCAweDhjLCAweDExLCAweGY2LCAweDQyLCAweDI5LCAweGQzLCAweGU5LAorCTB4Y2UsIDB4Y2YsIDB4ZmIsIDB4ZDUsIDB4MzUsIDB4NzMsIDB4ZjMsIDB4MjksIDB4ZGMsIDB4ZWIsIDB4ODQsIDB4ZjEsCisJMHhkMywgMHhhNiwgMHhkOCwgMHgwOCwgMHg3OCwgMHg3NCwgMHg1YiwgMHg5MCwgMHg3MSwgMHgwZSwgMHg2NCwgMHg1YiwKKwkweDc2LCAweDRkLCAweDhkLCAweDFkLCAweGZmLCAweDc2LCAweDk2LCAweDJiLCAweDFiLCAweDFjLCAweDljLCAweDRjLAorCTB4YjksIDB4OWQsIDB4OGYsIDB4YTAsIDB4YmYsIDB4YmQsIDB4NzYsIDB4NWMsIDB4YmQsIDB4ZTUsIDB4YWIsIDB4MzEsCisJMHhhZSwgMHgwYiwgMHhkZiwgMHhjMSwgMHgxOCwgMHhlMCwgMHhiMywgMHg5ZCwgMHhhMCwgMHgwZiwgMHg5YywgMHgxOCwKKwkweDkyLCAweDA1LCAweGIyLCAweGViLCAweDMzLCAweGYzLCAweDcyLCAweGQ0LCAweGMwLCAweDRjLCAweGRiLCAweGJhLAorCTB4MzAsIDB4MDcsIDB4ZjMsIDB4ZGQsIDB4OGIsIDB4NjAsIDB4YmUsIDB4MWIsIDB4MzAsIDB4ZWYsIDB4YjMsIDB4ZjMsCisJMHhiMiwgMHhhZiwgMHg2YSwgMHhjZiwgMHg2MiwgMHg0OCwgMHg0NywgMHhmYywgMHhmZCwgMHhiYywgMHhmNSwgMHg0NSwKKwkweDNlLCAweDIwLCAweGY3LCAweDk3LCAweDNhLCAweGU1LCAweGNiLCAweDk1LCAweGU0LCAweDU5LCAweGM2LCAweGQxLAorCTB4Y2YsIDB4NTUsIDB4OTIsIDB4ZTMsIDB4MjIsIDB4NWQsIDB4ZjIsIDB4YzcsIDB4YjAsIDB4NzMsIDB4YWUsIDB4ODIsCisJMHg2ZiwgMHhmMSwgMHgzNCwgMHhmYywgMHhkNywgMHgzZiwgMHhhOSwgMHhmOCwgMHhmMiwgMHhjNCwgMHhkYywgMHg3ZSwKKwkweDM4LCAweGVhLCAweGJhLCAweGI0LCAweDljLCAweDg0LCAweDRmLCAweGJiLCAweGVkLCAweDY4LCAweDFiLCAweGY3LAorCTB4MmEsIDB4MTEsIDB4YmUsIDB4YmIsIDB4YTgsIDB4NzMsIDB4ZGEsIDB4OTQsIDB4ZTYsIDB4YzUsIDB4ZWYsIDB4NjIsCisJMHhiYywgMHhhNywgMHhhOSwgMHg2YiwgMHhkNiwgMHhmYSwgMHhiZSwgMHg3NywgMHhiMywgMHg1YSwgMHg0NywgMHg5OSwKKwkweDkwLCAweGZmLCAweDVhLCAweGU0LCAweDAzLCAweGY1LCAweDI2LCAweGM2LCAweDkyLCAweGYxLCAweDlhLCAweGM5LAorCTB4MWIsIDB4ZGIsIDB4M2EsIDB4MTIsIDB4N2QsIDB4NDIsIDB4NWIsIDB4ODIsIDB4ZmUsIDB4MzYsIDB4NmMsIDB4YTEsCisJMHhkMiwgMHhlNiwgMHhmOCwgMHg1YSwgMHhhMSwgMHg0YywgMHhhMiwgMHg1ZCwgMHg5NCwgMHg5NiwgMHgwOSwgMHhjMCwKKwkweDNlLCAweDA2LCAweDg5LCAweDUwLCAweDY4LCAweGY2LCAweDQ3LCAweDdiLCAweGQ1LCAweDQ0LCAweDAzLCAweDc5LAorCTB4NzAsIDB4ZGIsIDB4MTksIDB4ZDAsIDB4ZDcsIDB4MzYsIDB4OGMsIDB4YTksIDB4MmIsIDB4NzksIDB4NzYsIDB4NDYsCisJMHg2NSwgMHg0ZSwgMHhhYywgMHg5NSwgMHg1NywgMHg4MiwgMHhhMSwgMHg2NiwgMHg0NywgMHg5ZSwgMHhkOCwgMHhjNCwKKwkweDNjLCAweDJkLCAweGI3LCAweDNmLCAweGQ1LCAweDBiLCAweGY5LCAweGQ0LCAweGNlLCAweDczLCAweDBiLCAweDAzLAorCTB4ZjIsIDB4MmYsIDB4NzcsIDB4ODAsIDB4MDYsIDB4N2YsIDB4YjgsIDB4ZTksIDB4NmIsIDB4YzEsIDB4NmMsIDB4YjMsCisJMHgyYiwgMHg1YiwgMHgzNywgMHgyNSwgMHhiZCwgMHhiYywgMHhjMiwgMHg3OCwgMHg0YSwgMHgxOCwgMHg0ZiwgMHgwOSwKKwkweGUzLCAweGUzLCAweDk4LCAweDRiLCAweDE4LCAweGQ3LCAweDE1LCAweGY3LCAweDRhLCAweGY1LCAweDJjLCAweDg4LAorCTB4Y2IsIDB4MWEsIDB4M2YsIDB4MmQsIDB4OTMsIDB4NzcsIDB4NjUsIDB4ODMsIDB4ZGQsIDB4MmIsIDB4MzUsIDB4NWMsCisJMHgxZiwgMHhhZSwgMHhiMSwgMHg2NSwgMHg2NCwgMHgzYywgMHgyOCwgMHhmOCwgMHg3ZiwgMHg3MCwgMHg1NSwgMHhiNiwKKwkweDJiLCAweGI2LCAweDU4LCAweGU3LCAweGRjLCAweDM1LCAweGFmLCAweDczLCAweDQ0LCAweDllLCAweDMzLCAweGYzLAorCTB4ODYsIDB4MzksIDB4ZjMsIDB4YmQsIDB4NDksIDB4NmUsIDB4ODYsIDB4ODcsIDB4MGUsIDB4ZGMsIDB4YWEsIDB4ZjcsCisJMHgzYywgMHg3NywgMHhlMCwgMHg5YiwgMHgzNiwgMHhkNSwgMHhhNywgMHhmNSwgMHgzYSwgMHhlMiwgMHg0YywgMHhmOSwKKwkweDFlLCAweDNiLCAweDc3LCAweGY3LCAweDY4LCAweDNkLCAweGJiLCAweDc1LCAweGQzLCAweGE1LCAweDgwLCAweGZiLAorCTB4ZGMsIDB4YmMsIDB4NGQsIDB4Y2IsIDB4YzUsIDB4MjIsIDB4NjgsIDB4ZWYsIDB4ZDUsIDB4NjksIDB4ZGUsIDB4ZTcsCisJMHg3YSwgMHg3NiwgMHg0MSwgMHg5ZiwgMHgxMywgMHgwMSwgMHhkZSwgMHhlNiwgMHhlMiwgMHg2MiwgMHhmNSwgMHg0OCwKKwkweGEzLCAweGJlLCAweGY4LCAweDY5LCAweDgzLCAweDU5LCAweDQ3LCAweGE1LCAweDZjLCAweDU4LCAweDgzLCAweDM0LAorCTB4ZDcsIDB4ZWMsIDB4MDUsIDB4NWUsIDB4OTAsIDB4ZjcsIDB4ZGYsIDB4ZWEsIDB4Y2QsIDB4OWUsIDB4OGYsIDB4ZWEsCisJMHhiMiwgMHhlMCwgMHgzMSwgMHhiZCwgMHgyZiwgMHg4NCwgMHhmYiwgMHgwMywgMHg3ZiwgMHg3OSwgMHhhNSwgMHhiMSwKKwkweDRkLCAweGMzLCAweDdjLCAweGE2LCAweGZmLCAweDM4LCAweDk4LCAweGQwLCAweDMxLCAweDM2LCAweGY2LCAweGY1LAorCTB4NDMsIDB4ZmMsIDB4NWUsIDB4YmMsIDB4NWYsIDB4MjQsIDB4YjQsIDB4NWQsIDB4ZWIsIDB4NDAsIDB4ZjcsIDB4ZGEsCisJMHg1ZiwgMHgxNiwgMHg5NCwgMHg4OSwgMHhlNywgMHgyNSwgMHgyMiwgMHgxMywgMHg1NSwgMHgzMCwgMHg0ZSwgMHgxMCwKKwkweGVlLCAweDUyLCAweGQ3LCAweGFhLCAweGY5LCAweGQ4LCAweGRkLCAweDZhLCAweGE0LCAweDExLCAweGM2LCAweDc1LAorCTB4OGIsIDB4ZjIsIDB4YzgsIDB4MWIsIDB4YWQsIDB4MmIsIDB4NDksIDB4MzcsIDB4ZDMsIDB4YzIsIDB4YjQsIDB4ZjksCisJMHgzMSwgMHhjZCwgMHg2OCwgMHhmYiwgMHhiOSwgMHg2ZCwgMHg5NSwgMHhkZSwgMHhmYiwgMHhjNCwgMHgzNSwgMHg0NiwKKwkweGM2LCAweDA4LCAweDYzLCAweDI2LCAweGRmLCAweGY1LCAweGZmLCAweDU2LCAweGQ3LCAweDE5LCAweDlhLCAweGFiLAorCTB4YTMsIDB4ZTcsIDB4MDIsIDB4ZjksIDB4NmUsIDB4NTUsIDB4NWUsIDB4MzUsIDB4ZGMsIDB4ZDQsIDB4NWYsIDB4NDMsCisJMHg5ZCwgMHg3NSwgMHhkMCwgMHg4OSwgMHgxNywgMHg1MywgMHhhYiwgMHhjMywgMHhiZCwgMHhmMCwgMHhiMCwgMHgyMSwKKwkweGIyLCAweGQ3LCAweGQ0LCAweDVhLCAweDk5LCAweDNmLCAweDgxLCAweDc5LCAweDdkLCAweDI2LCAweDY1LCAweDc4LAorCTB4NTEsIDB4ZjMsIDB4NjEsIDB4ZjEsIDB4MzYsIDB4ZjgsIDB4ZWIsIDB4YTEsIDB4ZGUsIDB4YTAsIDB4OWMsIDB4MjYsCisJMHg2ZiwgMHgyMiwgMHhhZCwgMHg0MiwgMHg5ZiwgMHhlMCwgMHhjMiwgMHhlYSwgMHg5OSwgMHhhZSwgMHg1NywgMHgwMywKKwkweGVlLCAweGIzLCAweDdjLCAweDQ1LCAweGRiLCAweDUxLCAweDQzLCAweGIyLCAweGIwLCAweGVkLCAweGQxLCAweDdiLAorCTB4NWUsIDB4YmYsIDB4ZWQsIDB4YTEsIDB4NjUsIDB4ZGEsIDB4MWUsIDB4YjIsIDB4NmQsIDB4OGIsIDB4NmIsIDB4ZGEsCisJMHg4ZSwgMHg1ZSwgMHhhMSwgMHhlZCwgMHg4MSwgMHgzNywgMHg2OCwgMHg3YiwgMHg3MCwgMHg5OSwgMHhiNiwgMHgwNywKKwkweGMzLCAweGI2LCAweDk1LCAweDY5LCAweGRiLCAweDBiLCAweGRiLCAweDRlLCAweDJjLCAweGMyLCAweGM5LCAweDY3LAorCTB4NWUsIDB4YmYsIDB4ZWQsIDB4N2QsIDB4Y2IsIDB4YjQsIDB4YmQsIDB4NmYsIDB4MTEsIDB4ZGMsIDB4YzQsIDB4NDksCisJMHgyZCwgMHg3NCwgMHhmZiwgMHgzZCwgMHhkYSwgMHhlNiwgMHhhYywgMHgwMywgMHhkZiwgMHg1YywgMHg4NCwgMHhmYywKKwkweDM2LCAweGZlLCAweGM4LCAweDg1LCAweGJiLCAweDY2LCAweGNiLCAweGUwLCAweDJiLCAweGY4LCAweGQ3LCAweDk5LAorCTB4NzIsIDB4MDMsIDB4OWUsIDB4NzEsIDB4ZDgsIDB4MzMsIDB4MjgsIDB4MDcsIDB4N2IsIDB4YmMsIDB4MjYsIDB4MWQsCisJMHhjOCwgMHhjOSwgMHg2ZSwgMHg5NiwgMHhjZCwgMHhjNywgMHg2YiwgMHhlNywgMHhmNCwgMHhjNiwgMHgzZCwgMHhlOCwKKwkweDhmLCAweDZkLCAweGZiLCAweDVlLCAweGJmLCAweGJjLCAweGE2LCAweGZiLCAweGNiLCAweDk1LCAweGU5LCAweDhmLAorCTB4MjEsIDB4YmQsIDB4NDIsIDB4MWYsIDB4OTcsIDB4ZjUsIDB4NDIsIDB4MTksIDB4NTgsIDB4NjcsIDB4ZDcsIDB4M2UsCisJMHg2OCwgMHg2YiwgMHgzMiwgMHgwZSwgMHhhNywgMHhlZCwgMHg1MSwgMHgyOSwgMHg5NCwgMHg3ZiwgMHgxMiwgMHg0YywKKwkweDgzLCAweDJlLCAweDQ2LCAweGU2LCAweDc0LCAweGM4LCAweDkzLCAweGFiLCAweDY4LCAweGIzLCAweDhmLCAweDUzLAorCTB4YjMsIDB4NTQsIDB4YzUsIDB4YTAsIDB4NDYsIDB4N2MsIDB4YTYsIDB4ZmQsIDB4OTgsIDB4NmQsIDB4YzIsIDB4MGUsCisJMHgwYywgMHhjYiwgMHgzMiwgMHg2ZSwgMHg2YywgMHg2MiwgMHg0ZSwgMHg2NywgMHgyMSwgMHgzMywgMHhjZCwgMHg5ZSwKKwkweDBlLCAweGZhLCAweDJhLCAweDRmLCAweDgxLCAweDk3LCAweGY3LCAweDQzLCAweDc2LCAweDI0LCAweGYzLCAweDIyLAorCTB4M2QsIDB4OGQsIDB4ZTYsIDB4YWMsIDB4NDUsIDB4NGMsIDB4NzIsIDB4NWQsIDB4YmYsIDB4NjksIDB4ZjEsIDB4YjgsCisJMHhlZiwgMHhjZSwgMHhlNSwgMHhjZiwgMHg1OSwgMHg0MCwgMHgzZSwgMHgzOCwgMHg5NCwgMHg5MSwgMHhkNywgMHgzNywKKwkweDlhLCAweDc1LCAweGJiLCAweGI3LCAweDM2LCAweDMyLCAweDFlLCAweGEzLCAweDM2LCAweDc1LCAweGFmLCAweGQ2LAorCTB4ZjIsIDB4YzcsIDB4MDksIDB4YmYsIDB4YmYsIDB4YjIsIDB4ZTgsIDB4M2IsIDB4YWMsIDB4ZjcsIDB4OTMsIDB4ZDUsCisJMHgwYiwgMHhlYiwgMHg4NSwgMHhlOSwgMHg3MCwgMHg0ZCwgMHgxNiwgMHhhNCwgMHgxZiwgMHg1OCwgMHhiMywgMHhiMCwKKwkweDdlLCAweGFjLCAweDY5LCAweGUxLCAweGY3LCAweGUwLCAweGEyLCAweGVmLCAweGNmLCAweDJjLCAweGZhLCAweDdlLAorCTB4NjEsIDB4ZDEsIDB4ZjcsIDB4NzUsIDB4NmIsIDB4MTcsIDB4OTUsIDB4NWYsIDB4ZjQsIDB4ZmQsIDB4ZTUsIDB4YjUsCisJMHhjYiwgMHhjMywgMHhmYiwgMHg1NywgMHg2YiwgMHgxNywgMHhjMiwgMHhmNSwgMHg5NCwgMHg1ZSwgMHg3MywgMHgxZCwKKwkweGFmLCAweGI4LCAweGIyLCAweGJkLCAweDg4LCAweDdjLCAweGU3LCAweGQ2LCAweDE4LCAweGYyLCAweGUxLCAweGNiLAorCTB4NTQsIDB4ZTcsIDB4NzMsIDB4OGQsIDB4ZTMsIDB4MWQsIDB4YjEsIDB4ODUsIDB4ZWQsIDB4Y2QsIDB4ZDcsIDB4ZGIsCisJMHgzMSwgMHg1ZiwgMHgyZiwgMHgzNSwgMHg1ZiwgMHhjZiwgMHhmOCwgMHgyMywgMHgxMywgMHgxNSwgMHhlNiwgMHgzMSwKKwkweDNkLCAweDZjLCAweGQ3LCAweGQ0LCAweDFkLCAweDI5LCAweDc5LCAweGZhLCAweDNjLCAweGMyLCAweDgwLCAweDNlLAorCTB4OGYsIDB4OTAsIDB4ODAsIDB4NmYsIDB4ZjQsIDB4OTQsIDB4OGUsIDB4ZWIsIDB4YWYsIDB4NTEsIDB4NDgsIDB4YWYsCisJMHgzNCwgMHhlYSwgMHhkOCwgMHhiZSwgMHhlOCwgMHgzMywgMHgwOSwgMHgwMywgMHhiMCwgMHhiOSwgMHg3OCwgMHgwZSwKKwkweDIxLCAweDkwLCAweDlkLCAweDI5LCAweGYzLCAweDM2LCAweGU3LCAweDEyLCAweDBlLCAweDA3LCAweGJkLCAweDVlLAorCTB4MTAsIDB4MGMsIDB4ZmIsIDB4NjcsIDB4YWQsIDB4MmMsIDB4YzcsIDB4YmIsIDB4NjIsIDB4ZWEsIDB4ZDAsIDB4ZDcsCisJMHg3YywgMHgxNCwgMHhmYSwgMHg2NiwgMHhkZSwgMHhjNywgMHg3YywgMHg4YSwgMHhmNiwgMHgzYSwgMHg2OCwgMHhhNiwKKwkweDFiLCAweDdhLCAweDM3LCAweGY5LCAweGE0LCAweDY4LCAweGRkLCAweGQxLCAweDA1LCAweDlkLCAweGViLCAweGRkLAorCTB4ZmIsIDB4M2UsIDB4ZDgsIDB4M2EsIDB4NWYsIDB4MDYsIDB4YWQsIDB4MWYsIDB4NGIsIDB4ZjUsIDB4NjgsIDB4ZmYsCisJMHhmZiwgMHgxYywgMHg3NCwgMHgzMSwgMHhlMywgMHg4NCwgMHg4ZiwgMHg2OSwgMHhkYSwgMHgyMiwgMHg4ZCwgMHgzNSwKKwkweGU4LCAweGIzLCAweDUwLCAweDI3LCAweDUzLCAweDRlLCAweDM0LCAweGRiLCAweDc1LCAweGRlLCAweGM0LCAweGNkLAorCTB4NTMsIDB4ZWQsIDB4ZGUsIDB4NzMsIDB4ZTAsIDB4YjUsIDB4N2UsIDB4N2YsIDB4MDMsIDB4NmMsIDB4NjYsIDB4ZDEsCisJMHgzYSwgMHhiZiwgMHg1MCwgMHg1YSwgMHg2ZiwgMHg2ZCwgMHg4MywgMHg2NiwgMHgxOSwgMHg3NywgMHhiOSwgMHg1NiwKKwkweDkzLCAweGVjLCAweDE5LCAweDMyLCAweDNlLCAweDY2LCAweDNjLCAweGExLCAweDE4LCAweDIzLCAweGU2LCAweGZhLAorCTB4MDUsIDB4Y2YsIDB4MzksIDB4NzAsIDB4OWQsIDB4OWIsIDB4ZjEsIDB4OTAsIDB4ZjEsIDB4N2IsIDB4NDcsIDB4ZmMsCisJMHhiYywgMHgxNywgMHhiMSwgMHg2NywgMHgyMywgMHhiMiwgMHg0NSwgMHg0MywgMHg5YiwgMHg3YiwgMHhiNCwgMHhhZCwKKwkweDFhLCAweDA1LCAweDNmLCAweDdkLCAweDBmLCAweDc0LCAweGNmLCAweGJhLCAweGE0LCAweGZkLCAweGVmLCAweDA0LAorCTB4OTMsIDB4YWUsIDB4ODksIDB4NGYsIDB4MjksIDB4ZDQsIDB4Y2IsIDB4NmEsIDB4NWMsIDB4M2QsIDB4MjUsIDB4MDcsCisJMHg0YSwgMHhlNCwgMHhmZiwgMHhhOCwgMHg5NiwgMHhlNSwgMHhiYiwgMHg1MywgMHg5NCwgMHgwNywgMHg1MSwgMHhlMCwKKwkweDcxLCAweDBhLCAweGY4LCAweDZiLCAweDkwLCAweGRkLCAweDVkLCAweDQ1LCAweDk0LCAweDg5LCAweGM4LCAweGQwLAorCTB4NDAsIDB4MDMsIDB4NzgsIDB4OGYsIDB4NzYsIDB4MDksIDB4ZGYsIDB4MmUsIDB4Y2EsIDB4N2IsIDB4MzIsIDB4NTUsCisJMHgxYywgMHhkNywgMHg3YiwgMHg5ZSwgMHgxZiwgMHg0MywgMHhkZCwgMHhjNywgMHhmMSwgMHg0YywgMHgxNCwgMHhjYiwKKwkweGE4LCAweGYzLCAweGIwLCAweDJlLCAweDNmLCAweDMxLCAweGNhLCAweDczLCAweDIyLCAweDAyLCAweDdiLCAweGZmLAorCTB4NDksIDB4MjksIDB4NGMsIDB4YjYsIDB4YzEsIDB4MmYsIDB4OTksIDB4MWUsIDB4NzcsIDB4ZTcsIDB4ZTIsIDB4ZTQsCisJMHhmZiwgMHhhNSwgMHg5MSwgMHhlYiwgMHhjYywgMHg4NSwgMHhlYiwgMHhiOCwgMHgyNywgMHg0NywgMHhkYywgMHg4MSwKKwkweGNkLCAweGFhLCAweGIzLCAweDQ5LCAweGFmLCAweGY5LCAweGY0LCAweDQ4LCAweDNmLCAweDZjLCAweDhhLCAweDliLAorCTB4MmIsIDB4Y2YsIDB4YzQsIDB4Y2MsIDB4ZGEsIDB4YzAsIDB4ODIsIDB4ZjUsIDB4ODYsIDB4YzMsIDB4YzQsIDB4OGEsCisJMHgzYSwgMHhlYSwgMHhmMiwgMHhkYywgMHhhNywgMHg0YywgMHg5YywgMHg4MSwgMHhmNiwgMHgzOSwgMHgxYSwgMHhhZSwKKwkweGU3LCAweDMwLCAweGNkLCAweDkzLCAweGI2LCAweGViLCAweDAwLCAweGQ3LCAweDk5LCAweDdmLCAweGQyLCAweGYyLAorCTB4ZjUsIDB4ODksIDB4NGQsIDB4NjEsIDB4NWYsIDB4ZjksIDB4NjAsIDB4NmMsIDB4NTMsIDB4NWUsIDB4M2UsIDB4ODEsCisJMHgyNywgMHg3NywgMHg1ZCwgMHg3MiwgMHgzNCwgMHhhYiwgMHhkOCwgMHhlZiwgMHgzNywgMHgwMiwgMHhjNiwgMHgwMiwKKwkweDU0LCAweGJhLCAweDU1LCAweGYyLCAweDRkLCAweGQ1LCAweGZkLCAweDMzLCAweGFkLCAweGMzLCAweDJiLCAweGE4LAorCTB4ZDcsIDB4ODMsIDB4NjMsIDB4MjYsIDB4MTEsIDB4MDMsIDB4MGUsIDB4ZjIsIDB4NmYsIDB4MDgsIDB4Y2YsIDB4MTYsCisJMHhjZiwgMHg1NywgMHhjYiwgMHhjMSwgMHg3MywgMHhjMiwgMHhhZSwgMHhkNywgMHg3MCwgMHgwZCwgMHg2NiwgMHgwNSwKKwkweGYwLCAweGQyLCAweDgwLCAweGY0LCAweDA5LCAweDE5LCAweDM5LCAweGZlLCAweDNiLCAweDMxLCAweGVlLCAweDE3LAorCTB4YWEsIDB4ZDEsIDB4N2UsIDB4ZjUsIDB4N2QsIDB4ZjUsIDB4MjYsIDB4MDYsIDB4ZjIsIDB4MmMsIDB4Y2EsIDB4MzAsCisJMHg3ZiwgMHgxYywgMHg3NSwgMHg5MiwgMHhmOSwgMHg2YywgMHg2NCwgMHhhZCwgMHgwYywgMHhlOSwgMHg3ZSwgMHg4MywKKwkweDQ4LCAweGRiLCAweGI2LCAweDdhLCAweGJkLCAweDRmLCAweDVmLCAweGNlLCAweDMwLCAweDZlLCAweDExLCAweGQ2LAorCTB4N2QsIDB4NTYsIDB4ZWYsIDB4ODMsIDB4NzMsIDB4ZDMsIDB4YzksIDB4N2MsIDB4NWYsIDB4ODQsIDB4ZjIsIDB4YTksCisJMHg1MywgMHg3YSwgMHhiOSwgMHhjZSwgMHg3MywgMHg2NiwgMHg1YywgMHhkMywgMHg3NiwgMHhmYiwgMHgyNiwgMHg5ZSwKKwkweDA3LCAweGRkLCAweDAyLCAweGZiLCAweGVmLCAweDNiLCAweDgwLCAweDg5LCAweDMwLCAweDllLCAweDQwLCAweDNhLAorCTB4N2MsIDB4YzIsIDB4ZDcsIDB4ODUsIDB4NjEsIDB4ZmEsIDB4NGQsIDB4YzIsIDB4MzAsIDB4ZmQsIDB4MjYsIDB4NjEsCisJMHgyMCwgMHgyZSwgMHgwMCwgMHg0NywgMHhhNSwgMHg3ZCwgMHg3NSwgMHg2OCwgMHg1MywgMHg1YywgMHg4NSwgMHg3MSwKKwkweDFjLCAweDJjLCAweDRkLCAweGMzLCAweGJmLCAweGQ1LCAweDMxLCAweDk0LCAweGNlLCAweDY5LCAweDQ1LCAweDllLAorCTB4ZjcsIDB4YzAsIDB4NzMsIDB4ZTAsIDB4YWQsIDB4MTIsIDB4NzgsIDB4MGYsIDB4YjYsIDB4ZTEsIDB4OTcsIDB4NjEsCisJMHgxYiwgMHgzZSwgMHgwMSwgMHhkYiwgMHhmMCwgMHgxYywgMHg2YywgMHhjMywgMHhjNywgMHgzMSwgMHgzNywgMHg4ZiwKKwkweDJkLCAweGUwLCAweGQ1LCAweDhjLCAweGU2LCAweGQ1LCAweDQyLCAweGU5LCAweDAyLCAweDc4LCAweGI1LCAweGViLAorCTB4MGEsIDB4ZmMsIDB4ZTgsIDB4YzIsIDB4YzYsIDB4YTcsIDB4MGQsIDB4ZWQsIDB4YzAsIDB4OTYsIDB4ZmYsIDB4YjgsCisJMHhmNiwgMHg4YiwgMHgxZiwgMHg0YywgMHg4ZCwgMHhiMSwgMHgwZSwgMHg2OCwgMHgzOCwgMHg0OSwgMHg5ZiwgMHgxNiwKKwkweGYyLCAweDNmLCAweDk5LCAweDA3LCAweGVmLCAweDYxLCAweGFjLCAweDhlLCAweGEzLCAweGFlLCAweDViLCAweDIzLAorCTB4ZDQsIDB4MWYsIDB4ZWUsIDB4MzYsIDB4ZWUsIDB4ZWYsIDB4ZTYsIDB4NTgsIDB4MTMsIDB4OGIsIDB4ZjAsIDB4NjQsCisJMHhmOCwgMHg3MywgMHg4ZiwgMHg0ZiwgMHgzZCwgMHg0MiwgMHhiZSwgMHg0YywgMHg3YywgMHg3NiwgMHhjNCwgMHhhZiwKKwkweGU2LCAweGM1LCAweDFkLCAweDFjLCAweDVmLCAweGUwLCAweDZkLCAweDVhLCAweGFlLCAweGVlLCAweDdjLCAweGY5LAorCTB4MzUsIDB4NzMsIDB4ZTUsIDB4NzUsIDB4ZmYsIDB4YTMsIDB4ZTQsIDB4MzcsIDB4ZTgsIDB4NmUsIDB4ZTIsIDB4M2UsCisJMHg5MSwgMHg4ZCwgMHg2YywgMHhiMCwgMHhiOCwgMHhkZiwgMHgyZiwgMHg2ZCwgMHhkYiwgMHg2MCwgMHhhZiwgMHgwZiwKKwkweDgyLCAweDdlLCAweGE3LCAweDAyLCAweGYxLCAweGI3LCAweDg1LCAweDZkLCAweGNlLCAweGI3LCAweGUzLCAweGQ5LAorCTB4NzYsIDB4NzYsIDB4YzMsIDB4OTYsIDB4ZWQsIDB4ZGIsIDB4YzQsIDB4YjUsIDB4NWUsIDB4ZDgsIDB4ZjIsIDB4YTksCisJMHg3MCwgMHgzZSwgMHg2MCwgMHhmOSwgMHhlYSwgMHgzOSwgMHhhNywgMHgwYywgMHhhNSwgMHhlYywgMHg2YywgMHhiMCwKKwkweGYxLCAweDdlLCAweGI2LCAweDc3LCAweDYxLCAweGQxLCAweDNjLCAweDVkLCAweDBhLCAweDc4LCAweGNlLCAweDc2LAorCTB4YzQsIDB4MWYsIDB4YWIsIDB4YTIsIDB4OTUsIDB4YmYsIDB4YjIsIDB4YjQsIDB4YTIsIDB4MTYsIDB4OGQsIDB4ZTMsCisJMHg5YywgMHhhNSwgMHg5NSwgMHgxMCwgMHhkZSwgMHg1OCwgMHg0OCwgMHgyYiwgMHg3NSwgMHgyMSwgMHhhZCwgMHhlNCwKKwkweGM3LCAweDQzLCAweDVhLCAweDYxLCAweGRkLCAweDczLCAweDIxLCAweGFkLCAweDI0LCAweGFhLCAweDY5LCAweDI1LAorCTB4M2YsIDB4ZWUsIDB4ZTAsIDB4NTksIDB4MGMsIDB4MDcsIDB4ZTksIDB4ODUsIDB4ZWQsIDB4OTAsIDB4NWUsIDB4MDAsCisJMHg0YiwgMHhhNSwgMHgzMiwgMHg0NywgMHgyZiwgMHgzMSwgMHhiNCwgMHg3MywgMHhhOCwgMHhhNCwgMHgzNCwgMHhhZCwKKwkweDBjLCAweGE5LCAweDUwLCAweDQ3LCAweDc4LCAweDk4LCAweDczLCAweGNjLCAweGZkLCAweDE1LCAweDY5LCAweDI0LAorCTB4NjUsIDB4NjksIDB4NjQsIDB4ZmUsIDB4MmMsIDB4ZDEsIDB4MjIsIDB4ZGEsIDB4MDAsIDB4ZWUsIDB4NzksIDB4NWUsCisJMHg2MCwgMHhiMywgMHhhNiwgMHg4ZCwgMHhmYiwgMHg1MywgMHgyZiwgMHhhMCwgMHhlYywgMHgyOCwgMHg2OCwgMHgyMywKKwkweGM0LCAweGMxLCAweDAzLCAweDE2LCAweDA3LCAweDhiLCAweGU3LCAweGYyLCAweGI0LCAweGM1LCAweGMxLCAweGE4LAorCTB4YzUsIDB4ODEsIDB4ZTYsIDB4OTcsIDB4M2MsIDB4ZTcsIDB4NGMsIDB4NjksIDB4MWMsIDB4ZDQsIDB4NjksIDB4MWMsCisJMHg4OCwgMHgwYSwgMHhlYiwgMHg5ZSwgMHg1ZSwgMHgwNiwgMHgwNywgMHgyYywgMHgzMywgMHhhYSwgMHhjNywgMHgxZiwKKwkweGMxLCAweGY4LCAweGY3LCAweDYxLCAweGZjLCAweDRhLCAweDhmLCAweDlmLCAweGYzLCAweGMwLCAweGYxLCAweDAzLAorCTB4OTYsIDB4Y2EsIDB4NzcsIDB4ZTYsIDB4YzYsIDB4ZGYsIDB4ODQsIDB4MzYsIDB4MGUsIDB4NmEsIDB4ZGIsIDB4OTksCisJMHhmMSwgMHg1NCwgMHhlYSwgMHg0NiwgMHgzMywgMHhmZSwgMHhjNywgMHgyYSwgMHhlNiwgMHg4YywgMHhjOSwgMHg2MywKKwkweDRiLCAweGY0LCAweGQ4LCAweDBiLCAweDk2LCAweDM3LCAweDdjLCAweGJkLCAweGNlLCAweGM2LCAweDczLCAweDZkLAorCTB4ZTcsIDB4YTAsIDB4YmIsIDB4YzYsIDB4NTIsIDB4MDksIDB4N2IsIDB4ZTYsIDB4ZDQsIDB4ZDgsIDB4NDMsIDB4NWYsCisJMHg0ZCwgMHg5MSwgMHg3NywgMHgzZSwgMHhhYSwgMHhmNywgMHhmYSwgMHg5ZCwgMHhhNSwgMHg1ZCwgMHg1NCwgMHg2YSwKKwkweDkyLCAweGJlLCAweGIxLCAweDZhLCAweGI4LCAweDA5LCAweDZmLCAweDNlLCAweDUwLCAweDNlLCAweDYzLCAweDM3LAorCTB4ZmIsIDB4YTEsIDB4M2IsIDB4NGMsIDB4ZGMsIDB4MWEsIDB4YjQsIDB4ODQsIDB4ZjQsIDB4NjQsIDB4YmUsIDB4MzcsCisJMHg1MiwgMHgyNywgMHhlYSwgMHg4MSwgMHgwZiwgMHg2MCwgMHhjYywgMHgyZSwgMHg3YywgMHhjYywgMHg3NiwgMHg2ZiwKKwkweDliLCAweGEyLCAweGFlLCAweGJiLCAweGJhLCAweDRhLCAweGQ3LCAweDM1LCAweDViLCAweDVkLCAweGI3LCAweDg2LAorCTB4YmEsIDB4MGUsIDB4NzAsIDB4M2YsIDB4MjUsIDB4ODcsIDB4NGIsIDB4OWMsIDB4YmYsIDB4N2MsIDB4YTIsIDB4NGUsCisJMHhjNywgMHg0MCwgMHgxZCwgMHgxYiwgMHhlNywgMHg0YiwgMHhjNiwgMHgwZiwgMHg2YiwgMHg1YSwgMHhhNiwgMHhjZSwKKwkweDRhLCAweGVhLCAweGI4LCAweGU0LCAweDRjLCAweGQ3LCAweDNmLCAweGQ5LCAweDc1LCAweDEwLCAweGVhLCAweGI1LAorCTB4ZWYsIDB4MDcsIDB4N2YsIDB4YjAsIDB4OGMsIDB4NWUsIDB4ODMsIDB4ZmUsIDB4ZDEsIDB4ZjYsIDB4NTksIDB4MGQsCisJMHg2NCwgMHhhZCwgMHg5YywgMHg2YSwgMHhjNiwgMHhiMywgMHg5YSwgMHhlNywgMHhjMSwgMHgzYSwgMHgzYiwgMHg1NCwKKwkweGJkLCAweGQ0LCAweDljLCAweDZhLCAweDk0LCAweDNkLCAweDYzLCAweDdhLCAweGRkLCAweDVjLCAweGQ0LCAweDI5LAorCTB4ZTAsIDB4ZmYsIDB4MTQsIDB4Y2YsIDB4MTQsIDB4ODgsIDB4M2UsIDB4MDMsIDB4OTUsIDB4MWIsIDB4ODUsIDB4M2YsCisJMHgzMywgMHhmMSwgMHg5NCwgMHhkOSwgMHgxYiwgMHgzOCwgMHg1NiwgMHhhMywgMHg3ZiwgMHhkMywgMHhjNiwgMHgyOCwKKwkweGE0LCAweDMyLCAweGZhLCAweGVjLCAweGQwLCAweDFlLCAweGI0LCAweGQ5LCAweGJlLCAweGE5LCAweDE2LCAweDYzLAorCTB4OGUsIDB4YTEsIDB4MmUsIDB4ZjcsIDB4MTYsIDB4YWEsIDB4MzYsIDB4NTcsIDB4NmEsIDB4YzUsIDB4OWQsIDB4ODgsCisJMHhlYSwgMHhmMywgMHg0YiwgMHgzYywgMHg3ZiwgMHg5ZiwgMHhlZCwgMHg2OSwgMHg0MiwgMHg1ZSwgMHg0NCwgMHhhZiwKKwkweDE1LCAweGQ0LCAweDljLCAweDlhLCAweDNmLCAweGE3LCAweGFlLCAweDhlLCAweDhhLCAweDVkLCAweGMzLCAweDRmLAorCTB4NmIsIDB4YmQsIDB4MTIsIDB4MzksIDB4NGEsIDB4OWQsIDB4YzMsIDB4ZmQsIDB4NTUsIDB4M2QsIDB4OTgsIDB4ZjcsCisJMHhlNSwgMHhmNCwgMHg4ZCwgMHgzMSwgMHg2MiwgMHhiMywgMHg5OCwgMHgzZiwgMHg3NSwgMHg4NiwgMHg2NywgMHg4ZCwKKwkweDViLCAweGYxLCAweDBlLCAweGRiLCAweDBiLCAweGY1LCAweDA4LCAweDc0LCAweGRmLCAweGRiLCAweDNmLCAweGUxLAorCTB4NDksIDB4M2QsIDB4ZjAsIDB4M2QsIDB4YTEsIDB4ODAsIDB4NmIsIDB4NTcsIDB4ZDMsIDB4NDIsIDB4NWUsIDB4ODUsCisJMHhiMSwgMHg2OSwgMHg0MywgMHgwZiwgMHg4ZiwgMHhiZiwgMHgyMSwgMHgzZiwgMHg5MCwgMHgyNiwgMHgzYSwgMHg2ZCwKKwkweDZjLCAweGMxLCAweGI3LCAweDMxLCAweDdlLCAweGQyLCAweGI2LCAweGExLCAweDg3LCAweDQ3LCAweDUzLCAweDE5LAorCTB4YzUsIDB4YmQsIDB4NTEsIDB4NjYsIDB4MWQsIDB4OTQsIDB4YjQsIDB4NDEsIDB4OWEsIDB4NGYsIDB4ZTgsIDB4ZjUsCisJMHhkMSwgMHg4YywgMHhiYywgMHgyYywgMHg5OSwgMHhhNiwgMHg3NiwgMHhkOCwgMHg1ZCwgMHhmZiwgMHhiNiwgMHg3MywKKwkweDZjLCAweGVlLCAweDJlLCAweGQwLCAweDM0LCAweDA3LCAweGRkLCAweGM0LCAweDdkLCAweGNhLCAweDlkLCAweGYyLAorCTB4NWUsIDB4OWUsIDB4NTcsIDB4OTgsIDB4NzAsIDB4YTAsIDB4OTQsIDB4OWYsIDB4ZDIsIDB4N2IsIDB4YmYsIDB4NzcsCisJMHgxNCwgMHg1NywgMHhjYiwgMHhhZCwgMHhhOSwgMHhhOCwgMHg1ZCwgMHhlNywgMHhhYywgMHgwNSwgMHgxZCwgMHg0MCwKKwkweDUwLCAweDlmLCAweGFhLCAweGM1LCAweDEzLCAweDc1LCAweDM4LCAweDdmLCAweDE3LCAweDUzLCAweDk5LCAweGE0LAorCTB4MjIsIDB4YjMsIDB4YzMsIDB4ZTcsIDB4OWYsIDB4OTEsIDB4MmQsIDB4ZGUsIDB4MWUsIDB4N2QsIDB4Y2UsIDB4NGUsCisJMHg5YywgMHhiYSwgMHg1MywgMHg3ZiwgMHhlOSwgMHhkMSwgMHgwNiwgMHgyNSwgMHhmZCwgMHhjYywgMHhmOCwgMHhiNSwKKwkweDdhLCAweDVkLCAweGFiLCAweDNmLCAweDE1LCAweDA0LCAweDM5LCAweGNjLCAweDVmLCAweDQxLCAweDRjLCAweGZjLAorCTB4NmMsIDB4YzIsIDB4NjcsIDB4MWEsIDB4ZmQsIDB4ZGEsIDB4MDYsIDB4YTcsIDB4ZjYsIDB4NGMsIDB4YTMsIDB4NjMsCisJMHg2OCwgMHg0NSwgMHgyMiwgMHgyYSwgMHg1ZCwgMHhlZiwgMHhkNCwgMHg5YywgMHhiYSwgMHg5MywgMHg3MywgMHgwNiwKKwkweGJhLCAweGYyLCAweDFjLCAweDQzLCAweDU3LCAweDMxLCAweDY3LCAweDllLCAweGFlLCAweGQ2LCAweGQ5LCAweGRmLAorCTB4MmEsIDB4NWQsIDB4MjcsIDB4OTksIDB4NjQsIDB4MWQsIDB4YzYsIDB4ZGIsIDB4NWIsIDB4MGMsIDB4NjEsIDB4M2MsCisJMHgwYywgMHhiOCwgMHgwOCwgMHhjZiwgMHhkZCwgMHgxOCwgMHhjMywgMHgzMCwgMHg5ZSwgMHgzYywgMHg2MCwgMHgwMSwKKwkweGIzLCAweDlmLCAweDJhLCAweDAwLCAweGU2LCAweDgzLCAweDc4LCAweDE4LCAweDI3LCAweDZiLCAweDc2LCAweDIyLAorCTB4MTMsIDB4ZDUsIDB4ZjAsIDB4MTIsIDB4YzYsIDB4MWYsIDB4NWIsIDB4NzgsIDB4NWYsIDB4MGYsIDB4NTYsIDB4NGYsCisJMHg2NiwgMHhiYSwgMHg4YiwgMHg4MCwgMHg4NywgMHg3MCwgMHhkZSwgMHgwNywgMHgxOCwgMHg2OSwgMHg5NywgMHg4ZSwKKwkweGUyLCAweGRiLCAweDAzLCAweDdjLCAweDYzLCAweDE2LCAweDI2LCAweGQwLCAweGUzLCAweGQ4LCAweDQzLCAweGYzLAorCTB4YmYsIDB4OGIsIDB4YjQsIDB4OTMsIDB4OGYsIDB4ZDksIDB4ZWYsIDB4ZDYsIDB4NDUsIDB4MzIsIDB4ZTAsIDB4MTUsCisJMHg4NywgMHg3OCwgMHgxZSwgMHgyOSwgMHhiZCwgMHhlNiwgMHhjMCwgMHgwZSwgMHgwMCwgMHhkZiwgMHhiZiwgMHhlNCwKKwkweDQ0LCAweGNlLCAweGM0LCAweGU1LCAweDUwLCAweDkxLCAweDMxLCAweDg0LCAweGUzLCAweDBlLCAweGU3LCAweDQxLAorCTB4ZjksIDB4NTcsIDB4YTEsIDB4NGMsIDB4NWMsIDB4YzksIDB4YzQsIDB4ZDUsIDB4NzgsIDB4ZGUsIDB4ODIsIDB4NjcsCisJMHgwMywgMHg5ZSwgMHg4ZCwgMHg3OCwgMHhkNiwgMHhlMywgMHg2OSwgMHhjNSwgMHhmMywgMHgyZCwgMHg5NCwgMHg1MywKKwkweGIxLCAweDNhLCAweGUxLCAweDdlLCAweGQ1LCAweDE2LCAweGE1LCAweDM0LCAweDFmLCAweDcxLCAweGNmLCAweGMyLAorCTB4NjUsIDB4YzAsIDB4ZTUsIDB4MmIsIDB4ZDAsIDB4M2IsIDB4MWUsIDB4OWUsIDB4ZjEsIDB4ZjgsIDB4M2EsIDB4ZmEsCisJMHg5OCwgMHhjNSwgMHhkMywgMHhhOSwgMHhlNCwgMHg0YywgMHgxNywgMHg5ZSwgMHgxNCwgMHg5ZSwgMHg2ZSwgMHgzYywKKwkweDNkLCAweDc4LCAweGQyLCAweDc4LCAweDVlLCAweDc1LCAweDBjLCAweGNmLCAweDVkLCAweDAyLCAweGJlLCAweDQyLAorCTB4MWUsIDB4MDEsIDB4Y2UsIDB4MTcsIDB4ZjAsIDB4OWMsIDB4ZTcsIDB4YmMsIDB4MDksIDB4OWUsIDB4NzMsIDB4MmMsCisJMHhjZiwgMHgzOSwgMHhmMywgMHgzYywgMHg1NywgMHhlYiwgMHhhOCwgMHg2MywgMHhmNSwgMHg0ZSwgMHhlNCwgMHgxOCwKKwkweDdkLCAweDg1LCAweDVhLCAweGM3LCAweGYwLCAweDdmLCAweDQ0LCAweDdhLCAweDA3LCAweDQxLCAweDRiLCAweGM3LAorCTB4MzAsIDB4NjcsIDB4YzcsIDB4NDgsIDB4NTcsIDB4MmUsIDB4ZDIsIDB4YzcsIDB4MTYsIDB4ZjUsIDB4M2IsIDB4ZmEsCisJMHgyNiwgMHhmYSwgMHgzZCwgMHg2MSwgMHhmYiwgMHg3ZCwgMHhiOCwgMHhhYSwgMHhkZiwgMHg4MywgMHg2OCwgMHhmYiwKKwkweDNlLCAweGRiLCAweGVmLCAweGMxLCAweGFhLCAweDdlLCAweDQxLCAweDJiLCAweGM3LCAweGYyLCAweDc4LCAweDQ4LAorCTB4MTcsIDB4MjMsIDB4NDgsIDB4MGYsIDB4NjUsIDB4YzIsIDB4ZGQsIDB4NmIsIDB4YTQsIDB4YmUsIDB4NDYsIDB4OWYsCisJMHgyNywgMHg4ZCwgMHhmOSwgMHgzNSwgMHg3MywgMHhiYSwgMHgzMSwgMHg1MywgMHhhNSwgMHgxZiwgMHg3ZSwgMHgxNiwKKwkweGZkLCAweDM4LCAweDVjLCAweGEyLCAweDhkLCAweDM4LCAweDVkLCAweDI1LCAweDE3LCAweGU4LCAweGZiLCAweDA0LAorCTB4NzIsIDB4NWMsIDB4ZmIsIDB4MzksIDB4ZjQsIDB4NzksIDB4ZTgsIDB4ZmYsIDB4MmMsIDB4YjYsIDB4YWQsIDB4M2UsCisJMHhhZSwgMHhmNywgMHhlNywgMHhkZSwgMHg1NSwgMHg2YywgMHg5NSwgMHg0ZiwgMHgxNCwgMHg2OSwgMHgxMywgMHg5MiwKKwkweDVlLCAweDgyLCAweDYwLCAweGNmLCAweDM2LCAweGRhLCAweGE3LCAweGY5LCAweDYwLCAweDlkLCAweDlmLCAweGQ0LAorCTB4YjEsIDB4YjUsIDB4NGYsIDB4MmUsIDB4ZDUsIDB4MTksIDB4YTMsIDB4YmQsIDB4ZjAsIDB4Y2QsIDB4YjMsIDB4NDcsCisJMHgzZiwgMHgwOCwgMHg5ZCwgMHg1MSwgMHgwMywgMHhiOCwgMHg5ZiwgMHhkMiwgMHg3NywgMHg4MCwgMHhlYywgMHgxYSwKKwkweDU1LCAweDIzLCAweDZiLCAweDI1LCAweDJlLCAweDM3LCAweDE3LCAweDZiLCAweDYxLCAweGY3LCAweDMwLCAweDU2LAorCTB4NWUsIDB4MmYsIDB4ZWQsIDB4ZGIsIDB4YTIsIDB4ZTYsIDB4NmMsIDB4OGQsIDB4MTcsIDB4YzMsIDB4NmYsIDB4Y2YsCisJMHg5YywgMHhmNSwgMHg4OSwgMHhjNSwgMHg5MSwgMHgxZiwgMHg2OSwgMHhhMiwgMHgxYywgMHg4YywgMHhmOSwgMHhlZiwKKwkweGQ0LCAweGZiLCAweDI2LCAweGRiLCAweGI2LCAweGQxLCAweDZlLCAweGI5LCAweDQxLCAweGViLCAweDcwLCAweDc3LAorCTB4ODksIDB4OWQsIDB4YTQsIDB4NWEsIDB4M2MsIDB4OTksIDB4YjcsIDB4ZDEsIDB4NzYsIDB4MTcsIDB4OTMsIDB4MDksCisJMHhjMiwgMHhmNSwgMHg5MCwgMHg3MCwgMHgzZiwgMHhjMSwgMHg3ZSwgMHgyOSwgMHhhNCwgMHgxYSwgMHgyNSwgMHg5MiwKKwkweGU2LCAweGJhLCAweDVjLCAweGIyLCAweDkzLCAweGI2LCAweGQxLCAweGM0LCAweDk4LCAweDY3LCAweGNmLCAweDllLAorCTB4YWMsIDB4OTYsIDB4MGIsIDB4YmEsIDB4OWYsIDB4NWEsIDB4MGQsIDB4YTMsIDB4MzksIDB4OGYsIDB4YzYsIDB4MzUsCisJMHgyZiwgMHg5ZSwgMHg4MSwgMHg3MiwgMHhmMSwgMHg2ZSwgMHhkMCwgMHg3YSwgMHg2NywgMHhhMiwgMHhjYywgMHhiMywKKwkweDRlLCAweGYwLCAweDk3LCAweGNhLCAweDMxLCAweDdkLCAweGM2LCAweGQ0LCAweDdiLCAweDNiLCAweGZjLCAweGQ4LAorCTB4ZjIsIDB4MDYsIDB4ZDksIDB4M2QsIDB4YjYsIDB4ODIsIDB4ZWIsIDB4MjgsIDB4YjEsIDB4YjUsIDB4ZDAsIDB4MWYsCisJMHhhYywgMHhkMywgMHhiNiwgMHgwZCwgMHhmZSwgMHhkZiwgMHhmOCwgMHg0NiwgMHg3OSwgMHg3YywgMHg5YywgMHg2ZCwKKwkweGI3LCAweGM4LCAweGU0LCAweDk0LCAweDM4LCAweGRlLCAweGRiLCAweDU3LCAweGEyLCAweDhjLCAweGM3LCAweGYxLAorCTB4MDgsIDB4ZjcsIDB4M2MsIDB4YjUsIDB4NmQsIDB4MTMsIDB4ZTUsIDB4YmQsIDB4ZGQsIDB4OTUsIDB4ZjMsIDB4ZGQsCisJMHgxMSwgMHhiZCwgMHgyNiwgMHhlMywgMHg4MiwgMHg0ZSwgMHhkOCwgMHhkZSwgMHhmOSwgMHhlZSwgMHg1NiwgMHgzOSwKKwkweDNiLCAweDA1LCAweDlhLCAweDgwLCAweGRjLCAweGVmLCAweDNiLCAweDQ1LCAweDk4LCAweDQ0LCAweGI2LCAweDRmLAorCTB4YzAsIDB4NWUsIDB4OTAsIDB4NzYsIDB4M2MsIDB4YTAsIDB4MGYsIDB4YzgsIDB4ZWYsIDB4NWIsIDB4YmIsIDB4ZDksCisJMHgxNywgMHhmNCwgMHgxMiwgMHg3NCwgMHg1YywgMHhkYiwgMHgzNiwgMHgyMywgMHgwYiwgMHgzMiwgMHgxMywgMHgzNSwKKwkweDQ4LCAweDY3LCAweGJiLCAweGYwLCAweDBmLCAweDA3LCAweGQ5LCAweDRlLCAweDU4LCAweDU3LCAweDYxLCAweDRjLAorCTB4YjUsIDB4OWEsIDB4NWUsIDB4NjYsIDB4MTcsIDB4ZTksIDB4OGYsIDB4NzMsIDB4M2YsIDB4OTcsIDB4ZmQsIDB4Y2QsCisJMHgzNiwgMHgzYSwgMHg0MSwgMHgyYiwgMHhiZSwgMHhkZSwgMHhjMywgMHg2MywgMHg2YywgMHgyYiwgMHhjZSwgMHgwOSwKKwkweDZkLCAweDIyLCAweGRhLCAweDU1LCAweGQ3LCAweDZhLCAweGZiLCAweDYyLCAweGIyLCAweGMyLCAweDE5LCAweGU0LAorCTB4ZGEsIDB4NDgsIDB4MzgsIDB4NDcsIDB4NzEsIDB4MzksIDB4NTksIDB4OWEsIDB4OWIsIDB4YTcsIDB4MGQsIDB4MzUsCisJMHgwYiwgMHhlNywgMHg4OSwgMHhiNCwgMHg5MiwgMHgxYSwgMHhiMiwgMHhiNiwgMHhjNywgMHg4YywgMHgzYywgMHgwZiwKKwkweGJiLCAweGFjLCAweDUzLCAweGNmLCAweGQ5LCAweDBjLCAweDZjLCAweDU5LCAweDNiLCAweDY3LCAweGRhLCAweDllLAorCTB4MmQsIDB4ODQsIDB4NzMsIDB4MzYsIDB4MDAsIDB4OGQsIDB4NTMsIDB4YmUsIDB4NDEsIDB4Y2YsIDB4OTksIDB4MDcsCisJMHhiYSwgMHhjOSwgMHgwMywgMHhlZiwgMHg3OSwgMHhjYywgMHg1MywgMHgxZSwgMHg3MywgMHg5NCwgMHgyZiwgMHhiNywKKwkweGM4LCAweGM0LCAweDcxLCAweGQ1LCAweDVhLCAweDIzLCAweDkyLCAweGQ4LCAweGVkLCAweGI3LCAweGM4LCAweGYwLAorCTB4MTQsIDB4NjMsIDB4MDUsIDB4MWIsIDB4NjAsIDB4ODMsIDB4NmQsIDB4YzQsIDB4ZDMsIDB4OGEsIDB4NmYsIDB4ZDYsCisJMHhlMywgMHgxZCwgMHgxZiwgMHgwYSwgMHg3NSwgMHhlYiwgMHg5NiwgMHhkOCwgMHg1OSwgMHg2NywgMHhkMSwgMHhmNywKKwkweGQzLCAweGMwLCAweGMzLCAweGEzLCAweGMwLCAweGMzLCAweDNjLCAweGVmLCAweGJjLCAweDUwLCAweDE1LCAweDVmLAorCTB4ZTIsIDB4NTgsIDB4YjUsIDB4MGUsIDB4YzUsIDB4NzgsIDB4NjMsIDB4N2EsIDB4M2UsIDB4NzUsIDB4OWMsIDB4YTksCisJMHg1NCwgMHhmYiwgMHg2NiwgMHhlYywgMHhhOSwgMHgzOCwgMHhlZCwgMHhhOSwgMHhkYywgMHhhOCwgMHg2NywgMHhjZSwKKwkweDYwLCAweDBkLCAweGMwLCAweDc3LCAweGYyLCAweGY3LCAweDY5LCAweDVhLCAweDFmLCAweDFhLCAweDI3LCAweDVjLAorCTB4ZDEsIDB4MTAsIDB4YWUsIDB4MDUsIDB4NzMsIDB4YzYsIDB4MzMsIDB4YjMsIDB4NGIsIDB4ZTMsIDB4MTgsIDB4MmYsCisJMHhjYywgMHhlZCwgMHgxMSwgMHg4NywgMHgyZSwgMHg5NywgMHhkMSwgMHgxNCwgMHhlMywgMHgyNCwgMHhhZCwgMHhjYiwKKwkweGMwLCAweGY0LCAweDk0LCAweGI2LCAweDYxLCAweDQ1LCAweDlkLCAweDk2LCAweDAzLCAweDI1LCAweDllLCAweGI3LAorCTB4ZTUsIDB4MWEsIDB4Y2MsIDB4ZWYsIDB4MzEsIDB4N2UsIDB4ZDQsIDB4MzksIDB4MjEsIDB4YzcsIDB4ZDAsIDB4MzcsCisJMHhkNywgMHhjNSwgMHg5NSwgMHg4ZCwgMHhjZiwgMHhhYywgMHhiMiwgMHg3YiwgMHhmMiwgMHhhYSwgMHg2MywgMHgzNCwKKwkweDY2LCAweGRkLCAweDdjLCAweGUxLCAweGQ5LCAweDkzLCAweGU0LCAweGMwLCAweGFjLCAweDVlLCAweDc3LCAweGU1LAorCTB4OWEsIDB4YTEsIDB4OGMsIDB4NDYsIDB4YTAsIDB4ZmQsIDB4NzYsIDB4NzcsIDB4MjcsIDB4N2IsIDB4Y2MsIDB4NTksCisJMHhjMywgMHg4NCwgMHhmNCwgMHg5NywgMHhjYywgMHhmOCwgMHgyZiwgMHhlYSwgMHg3ZCwgMHg5MywgMHg2NiwgMHg3ZiwKKwkweGI4LCAweGQ5LCAweDUzLCAweGI5LCAweDVmLCAweDJlLCAweGE2LCAweGEyLCAweDU1LCAweDczLCAweDViLCAweDI3LAorCTB4YzMsIDB4YzAsIDB4ODUsIDB4NWUsIDB4Y2IsIDB4ODQsIDB4NWQsIDB4OWMsIDB4ZWIsIDB4N2UsIDB4YmMsIDB4ODksCisJMHg2NywgMHhkMSwgMHhhMiwgMHg5OCwgMHg5ZiwgMHhjMiwgMHgzOCwgMHhjZiwgMHhhNywgMHhiMywgMHhkZCwgMHgyYiwKKwkweGI1LCAweDQ1LCAweDMxLCAweGNiLCAweGIzLCAweDRlLCAweDkwLCAweDk1LCAweDZmLCAweGRkLCAweDEyLCAweGFmLAorCTB4ZDcsIDB4ZjksIDB4MmIsIDB4ZWMsIDB4OTksIDB4MTYsIDB4ZDgsIDB4MGQsIDB4YmIsIDB4MDIsIDB4ZjksIDB4MzMsCisJMHhlOCwgMHhjOSwgMHhkMywgMHg3NiwgMHg0YywgMHgwOSwgMHgxZCwgMHg5MywgMHg5MiwgMHhlMCwgMHg3YywgMHgyYSwKKwkweDZlLCAweGUzLCAweGNlLCAweDFjLCAweGNiLCAweDk4LCAweGE1LCAweDZmLCAweDYzLCAweGZmLCAweGNjLCAweGRiLAorCTB4ZDAsIDB4NWQsIDB4OWEsIDB4ZDYsIDB4MWYsIDB4ZDcsIDB4YjIsIDB4YjAsIDB4Y2IsIDB4ZGEsIDB4Y2UsIDB4M2EsCisJMHg4ZSwgMHg3MywgMHg0MiwgMHhmNCwgMHgxZSwgMHhhYywgMHhkMCwgMHgzNywgMHhlYSwgMHhhOCwgMHhmMiwgMHgwYiwKKwkweDhjLCAweDJmLCAweDU3LCAweDE4LCAweDViLCAweDRlLCAweDQ2LCAweGNkLCAweGZiLCAweDg0LCAweGY0LCAweGU1LAorCTB4ZjYsIDB4NmMsIDB4ZTIsIDB4ZGQsIDB4MzAsIDB4YTEsIDB4MmYsIDB4ZDcsIDB4NjUsIDB4N2QsIDB4YjksIDB4NDYsCisJMHhlZCwgMHhjYiwgMHg5OSwgMHhkOCwgMHg0MywgMHhlMywgMHg5YywgMHgyZiwgMHg1NywgMHgxOCwgMHhjYiwgMHg4MywKKwkweDU2LCAweDZhLCAweGVkLCAweDU5LCAweDA5LCAweDYzLCAweDBiLCAweDBkLCAweDE3LCAweDVkLCAweGJkLCAweDZmLAorCTB4MjQsIDB4MzcsIDB4YTAsIDB4ZTAsIDB4MzcsIDB4MTgsIDB4MWYsIDB4OGIsIDB4YjEsIDB4MGEsIDB4YTUsIDB4ZmUsCisJMHhjZSwgMHhmYSwgMHgxNywgMHgxYiwgMHgyNCwgMHhkMywgMHhiYywgMHgwMiwgMHhlMywgMHg3ZSwgMHg0YSwgMHhjZiwKKwkweGI5LCAweDU5LCAweGMzLCAweDgyLCAweDVjLCAweDFiLCAweDY0LCAweGNjLCAweDg3LCAweDY3LCAweDQ3LCAweDM1LAorCTB4N2YsIDB4MjUsIDB4N2EsIDB4MjMsIDB4OWQsIDB4YzYsIDB4OWUsIDB4ZjUsIDB4MTMsIDB4NmIsIDB4YTUsIDB4ZmUsCisJMHhiOCwgMHg1MywgMHgxOCwgMHg4ZiwgMHhkYSwgMHg3ZSwgMHgxMywgMHg4MCwgMHhhOSwgMHgwNiwgMHg3MywgMHhmMywKKwkweDRlLCAweDJiLCAweDkzLCAweGQ5LCAweGY3LCAweDNiLCAweGVhLCAweDE4LCAweDFiLCAweDk4LCAweDJhLCAweDlhLAorCTB4MTgsIDB4NjAsIDB4NWYsIDB4MzEsIDB4MTIsIDB4OWUsIDB4NWIsIDB4NTcsIDB4NWMsIDB4NDcsIDB4Y2UsIDB4MGMsCisJMHhhZSwgMHgwMCwgMHgyYywgMHgyYiwgMHg5NiwgMHhiNSwgMHg1OSwgMHgxZiwgMHg3YiwgMHg0MywgMHgxZCwgMHg0NSwKKwkweDlhLCAweDdhLCAweDRhLCAweGVmLCAweDJmLCAweDVjLCAweGQ5LCAweDlkLCAweGRjLCAweGE5LCAweGNmLCAweDIzLAorCTB4ZTksIDB4NTgsIDB4NjIsIDB4NWUsIDB4YjgsIDB4N2YsIDB4ZjcsIDB4OWIsIDB4ZjIsIDB4MzYsIDB4MmQsIDB4ZmIsCisJMHgwZiwgMHhhNCwgMHhhOCwgMHhjNywgMHhiNiwgMHhlOSwgMHhkZiwgMHhiNSwgMHhlOSwgMHgyMCwgMHgzOCwgMHhkZiwKKwkweGZkLCAweDJjLCAweDZjLCAweDE2LCAweGRmLCAweGZiLCAweDk2LCAweGI0LCAweGM3LCAweDdiLCAweGI1LCAweDBkLAorCTB4ODUsIDB4YjksIDB4MWEsIDB4YWMsIDB4OTcsIDB4MTUsIDB4ZmUsIDB4YjgsIDB4ZGQsIDB4YWIsIDB4NjgsIDB4ZDYsCisJMHgwMywgMHgwYiwgMHhjMiwgMHhmYiwgMHgxNywgMHgzYSwgMHg2YywgMHg1ZSwgMHgzZSwgMHhhOCwgMHgwNywgMHgzZCwKKwkweDdkLCAweDQ0LCAweDhjLCAweGFjLCAweGM5LCAweGNkLCAweGNiLCAweDFhLCAweGVlLCAweGE3LCAweGNiLCAweDkwLAorCTB4YTAsIDB4ZGQsIDB4MjMsIDB4OTIsIDB4ZTQsIDB4ZGQsIDB4NDksIDB4ZWMsIDB4YmIsIDB4MjAsIDB4NTcsIDB4NDEsCisJMHgzZiwgMHhiMywgMHgxZSwgMHg2ZCwgMHg1NiwgMHg3ZSwgMHg3MywgMHgwZiwgMHg4YSwgMHhlZiwgMHgxZCwgMHg4NCwKKwkweDhlLCAweGI5LCAweDYxLCAweGE5LCAweDhlLCAweDg5LCAweGQzLCAweGJmLCAweGNmLCAweDhkLCAweGQyLCAweDQ3LAorCTB4NWMsIDB4ODksIDB4M2EsIDB4MmQsIDB4ZjIsIDB4ZDEsIDB4YjEsIDB4ZGYsIDB4NWEsIDB4NGIsIDB4MWUsIDB4MWIsCisJMHg4MiwgMHg3YywgMHg1NywgMHhmNywgMHg4NywgMHhlNywgMHgyZSwgMHg5OSwgMHhjNiwgMHg3YywgMHhiNiwgMHg1YiwKKwkweDI3LCAweDg5LCAweGY3LCAweDc5LCAweGYyLCAweGM1LCAweDRhLCAweDMyLCAweDMxLCAweDBiLCAweDFkLCAweDM1LAorCTB4ZTQsIDB4MGMsIDB4YjcsIDB4OWEsIDB4ZDgsIDB4ZTksIDB4YTcsIDB4ZDYsIDB4OWEsIDB4NzMsIDB4NWEsIDB4ZjUsCisJMHhjMCwgMHg2OSwgMHgxOCwgMHg0ZiwgMHhhZCwgMHhhNiwgMHhkZCwgMHg1OSwgMHgyYiwgMHg5NywgMHg4MywgMHhhMCwKKwkweGJlLCAweDViLCAweGNiLCAweGUyLCAweDlkLCAweDk0LCAweGM1LCAweDA3LCAweDUyLCAweDFkLCAweDg2LCAweDA3LAorCTB4YjQsIDB4ZWYsIDB4YzQsIDB4M2QsIDB4MDAsIDB4YzAsIDB4NDMsIDB4YjcsIDB4Y2IsIDB4YmQsIDB4ZDAsIDB4OTYsCisJMHg0ZiwgMHhmZCwgMHhjYywgMHg4YywgMHg5NSwgMHg0ZiwgMHhjYSwgMHg1OSwgMHhjYSwgMHg5ZiwgMHg2YSwgMHg2YiwKKwkweDc0LCAweDgxLCAweGVjLCAweDNkLCAweDM0LCAweDQ2LCAweGJkLCAweDljLCAweDlhLCAweGZlLCAweDI2LCAweGU0LAorCTB4NTUsIDB4NGUsIDB4ZTMsIDB4YTEsIDB4NDUsIDB4ZWUsIDB4MWIsIDB4OTMsIDB4Y2MsIDB4NDUsIDB4ZTgsIDB4YWMsCisJMHhjMiwgMHhkNCwgMHg0MiwgMHgxZSwgMHg1ZCwgMHhkYSwgMHgxZSwgMHhjNywgMHg3YSwgMHg3YSwgMHhhZCwgMHhmMSwKKwkweDcxLCAweDE3LCAweDhlLCAweDc1LCAweDlhLCAweDdiLCAweDhjLCAweGY0LCAweDU4LCAweGI5LCAweDM3LCAweGZmLAorCTB4OWMsIDB4MWQsIDB4ZWIsIDB4Y2EsIDB4NzAsIDB4YWMsIDB4M2QsIDB4MGIsIDB4YzcsIDB4MWEsIDB4ZmEsIDB4ZjgsCisJMHhhMSwgMHhmYywgMHg0ZCwgMHhlOCwgMHhiMywgMHg0OSwgMHhmYSwgMHg0YywgMHhjYywgMHhkOCwgMHg0YSwgMHhlOSwKKwkweDFkLCAweDZkLCAweGI0LCAweDcyLCAweGQzLCAweDgzLCAweDBlLCAweGUyLCAweDc5LCAweGExLCAweGU5LCAweGNmLAorCTB4NzksIDB4NjIsIDB4NzEsIDB4YTYsIDB4ODgsIDB4MDcsIDB4Y2EsIDB4ZGMsIDB4MjYsIDB4N2QsIDB4OWUsIDB4NzEsCisJMHgwMiwgMHg3ZSwgMHhkNiwgMHg4NywgMHg4YiwgMHgyYywgMHgxYiwgMHhlNiwgMHg1ZiwgMHgyOSwgMHg0NiwgMHgxYywKKwkweGZhLCAweGQ2LCAweGY0LCAweDlmLCAweDNhLCAweDk3LCAweGM0LCAweDE2LCAweDRjLCAweDFjLCAweDk4LCAweGYxLAorCTB4NWYsIDB4NzMsIDB4Y2YsIDB4MDIsIDB4ZjcsIDB4N2QsIDB4ZGYsIDB4MDEsIDB4ZGUsIDB4ZmEsIDB4ZWQsIDB4NjIsCisJMHhiMiwgMHgyNywgMHgxYiwgMHhhMSwgMHgzYywgMHg5ZCwgMHg5NSwgMHg0MywgMHg5NSwgMHgzZSwgMHg2OSwgMHhkMywKKwkweDY3LCAweGVkLCAweGRmLCAweDMwLCAweDQ2LCAweDljLCAweGE5LCAweDhlLCAweDExLCAweDhiLCAweDYzLCAweDYyLAorCTB4YzQsIDB4M2IsIDB4N2YsIDB4OGUsIDB4MTgsIDB4YjEsIDB4MzgsIDB4MjYsIDB4NDYsIDB4YmMsIDB4OWMsIDB4OWYsCisJMHgzNSwgMHg1MiwgMHg5YSwgMHhjNSwgMHhiOCwgMHhlYSwgMHgyMSwgMHg1MywgMHg5NCwgMHg5MywgMHg5YiwgMHg2YSwKKwkweGMwLCAweGJiLCAweDE2LCAweDZmLCAweGMwLCAweDMyLCAweDU2LCAweGMwLCAweGRiLCAweGMzLCAweGZiLCAweDIwLAorCTB4ZGUsIDB4MzEsIDB4MTksIDB4OTksIDB4ZDMsIDB4MWQsIDB4YjMsIDB4OTAsIDB4MWYsIDB4ZDQsIDB4NjksIDB4YWMsCisJMHg2YiwgMHhmYywgMHg4MiwgMHhjOSwgMHg3MiwgMHgzMywgMHhjYSwgMHg1ZCwgMHg3MiwgMHgyNiwgMHg1OCwgMHhhZiwKKwkweGQ0LCAweDI4LCAweGMzLCAweDYzLCAweDk0LCAweGRkLCAweDRkLCAweDMyLCAweDNhLCAweDE2LCAweGRhLCAweGI4LAorCTB4OWYsIDB4NWQsIDB4Y2YsIDB4YjUsIDB4ODEsIDB4MjEsIDB4MDksIDB4NmQsIDB4ZDgsIDB4NjcsIDB4ZDYsIDB4OWIsCisJMHhiNSwgMHhkYiwgMHgyZCwgMHgzMSwgMHhhOSwgMHg1ZiwgMHg4ZCwgMHgzOSwgMHgzOCwgMHhlZSwgMHg1YywgMHgxYywKKwkweDVmLCAweGJkLCAweGMwLCAweDk2LCAweDRkLCAweGQ4LCAweGQ4LCAweGUwLCAweGI4LCAweGQ1LCAweGMxLCAweGNiLAorCTB4Y2IsIDB4ODgsIDB4ZWEsIDB4ZjksIDB4OGYsIDB4ZGIsIDB4NzMsIDB4YmMsIDB4NTEsIDB4N2IsIDB4ZDcsIDB4NWYsCisJMHg0MiwgMHhjZiwgMHhjZiwgMHg0MCwgMHg2NSwgMHgxNiwgMHhmZCwgMHhhZCwgMHg1NywgMHg5OSwgMHg3MSwgMHg4ZSwKKwkweDczLCAweGVlLCAweDdlLCAweDFlLCAweGM4LCAweGM1LCAweDU2LCAweDM1LCAweDM0LCAweGJlLCAweDgwLCAweDJlLAorCTB4NDEsIDB4YjcsIDB4MWMsIDB4OWIsIDB4MDMsIDB4ZGEsIDB4YmQsIDB4NTcsIDB4MjYsIDB4NDYsIDB4MDksIDB4NWYsCisJMHg0NywgMHgzYywgMHhhMiwgMHhjZiwgMHhmNSwgMHhlMiwgMHg3YiwgMHhkYywgMHg5YywgMHgyNywgMHhlYSwgMHhhZCwKKwkweDg0LCAweDY3LCAweDdhLCAweGQ3LCAweDAwLCAweGRlLCAweGM1LCAweGU3LCAweDdhLCAweGFkLCAweDllLCAweGQ2LAorCTB4MzYsIDB4MDQsIDB4Y2YsIDB4ZjcsIDB4ODYsIDB4NjMsIDB4NTgsIDB4OGUsIDB4OWUsIDB4MDIsIDB4MTksIDB4ZDYsCisJMHhmYiwgMHg3ZCwgMHhkNywgMHhjYSwgMHhlOSwgMHgwNywgMHhlNywgMHhjZSwgMHgxNywgMHgzNCwgMHhjMSwgMHg1NiwKKwkweDY5LCAweDg1LCAweGE5LCAweDNjLCAweGUwLCAweGE2LCAweGI5LCAweGVmLCAweDgyLCAweGZiLCAweDBiLCAweDNhLAorCTB4ZTIsIDB4YjcsIDB4ZTksIDB4NzMsIDB4MWYsIDB4ZjMsIDB4NjcsIDB4YWMsIDB4ZTcsIDB4Y2YsIDB4N2UsIDB4ODQsCisJMHg2NywgMHg1YSwgMHhlMywgMHhkMiwgMHgwNywgMHgzYSwgMHhlYywgMHhkNywgMHhlOSwgMHgzMSwgMHg4YywgMHg4NywKKwkweDZiLCAweGJlLCAweDFhLCAweDBmLCAweDkwLCAweDNkLCAweDVjLCAweGZiLCAweGM1LCAweGQ4LCAweDJiLCAweDJkLAorCTB4MmEsIDB4YTcsIDB4Y2YsIDB4NTgsIDB4NDcsIDB4MmQsIDB4OGQsIDB4NWQsIDB4NzYsIDB4ZjYsIDB4OTQsIDB4MTMsCisJMHg2YSwgMHg0ZiwgMHhkOSwgMHg1NywgMHg3YiwgMHhjYiwgMHgzNiwgMHhhZiwgMHhmYiwgMHgwMSwgMHhjYywgMHgwNywKKwkweDdlLCAweDhmLCAweDE3LCAweDlkLCAweDIxLCAweGUwLCAweGFiLCAweDUwLCAweDNhLCAweGUyLCAweDY0LCAweGY0LAorCTB4ZmIsIDB4YTgsIDB4N2QsIDB4NDMsIDB4MGUsIDB4NjAsIDB4YWUsIDB4N2EsIDB4YzcsIDB4YTMsIDB4NWEsIDB4ZGUsCisJMHhjZiwgMHhkZiwgMHhkMywgMHgxNywgMHhjZSwgMHhlYiwgMHgwYiwgMHg3YSwgMHgwZCwgMHg2OCwgMHg1YSwgMHg4OCwKKwkweDZiLCAweGNmLCAweGRhLCAweDEwLCAweGM3LCAweDlkLCAweDljLCAweGM2LCAweDNkLCAweGNiLCAweDdjLCAweDRiLAorCTB4ZmYsIDB4MDYsIDB4OWQsIDB4MmIsIDB4ZDMsIDB4NWUsIDB4MmIsIDB4ZGUsIDB4OGIsIDB4ZjcsIDB4NGQsIDB4ODYsCisJMHhmYSwgMHg4NiwgMHg3MCwgMHhkZiwgMHgwOSwgMHhiZCwgMHgxNiwgMHhlYywgMHgzNywgMHhmMiwgMHg2YSwgMHg1NiwKKwkweDQ2LCAweDJhLCAweDVjLCAweGMzLCAweDY0LCAweDNiLCAweDQ4LCAweDJmLCAweGQ3LCAweGMwLCAweDFlLCAweDU4LAorCTB4NzgsIDB4YmUsIDB4YmEsIDB4N2YsIDB4N2UsIDB4MWUsIDB4MTIsIDB4ZTMsIDB4NDIsIDB4NTgsIDB4ZWUsIDB4ZDYsCisJMHg2NywgMHgxNywgMHhhYiwgMHhlZiwgMHgxZSwgMHhiOSwgMHhmMiwgMHhiZiwgMHg3MCwgMHhmZCwgMHhkMCwgMHhjOCwKKwkweDUwLCAweDBiLCAweDQ3LCAweDg2LCAweGYyLCAweGNlLCAweGM4LCAweDk1LCAweGFmLCAweGNiLCAweDQxLCAweGUwLAorCTB4ZjEsIDB4MzAsIDB4NjAsIDB4NTIsIDB4ZjcsIDB4ZjMsIDB4Y2UsIDB4YWIsIDB4NTcsIDB4YTUsIDB4MzAsIDB4NTksCisJMHgyZiwgMHhlYSwgMHhhMSwgMHg4MiwgMHhlMywgMHgzZSwgMHg1NCwgMHgyYiwgMHg5MSwgMHg4NywgMHg5NCwgMHg1MywKKwkweGYzLCAweDUwLCAweGJiLCAweGY2LCAweGNmLCAweDc3LCAweGE0LCAweGRhLCAweGUzLCAweDdiLCAweGU1LCAweGI4LAorCTB4ZTMsIDB4ZGUsIDB4YWYsIDB4ZjQsIDB4NTksIDB4ZGIsIDB4ODIsIDB4YzcsIDB4NTgsIDB4ZGYsIDB4NzEsIDB4MjcsCisJMHg3MiwgMHg3ZiwgMHhkNCwgMHg5ZSwgMHhkMywgMHgzNywgMHhmMSwgMHhiZCwgMHg1OSwgMHhjZCwgMHhmNywgMHhkZiwKKwkweDU4LCAweDQ3LCAweDljLCAweGNkLCAweDBhLCAweGYxLCAweGYxLCAweDU5LCAweGM4LCAweGFkLCAweDRmLCAweDRiLAorCTB4NzYsIDB4MzQsIDB4MzEsIDB4NTcsIDB4YzYsIDB4ZWMsIDB4YjMsIDB4ZGYsIDB4YjAsIDB4Y2UsIDB4ZjAsIDB4MGIsCisJMHhjYiwgMHhiYywgMHhlMiwgMHhmMCwgMHhjZSwgMHgxYywgMHhhMywgMHgzMywgMHgzZSwgMHhkZiwgMHgxMiwgMHhlZSwKKwkweGI5LCAweDM3LCAweDczLCAweGNhLCAweGZjLCAweGM2LCAweDc1LCAweDUyLCAweGZmLCAweDBhLCAweGU2LCAweDhiLAorCTB4ZmQsIDB4MTEsIDB4NTcsIDB4YWIsIDB4ZjQsIDB4M2QsIDB4MDUsIDB4OWUsIDB4NmMsIDB4ODksIDB4ZDcsIDB4Y2QsCisJMHhkOSwgMHg0MywgMHg0NiwgMHhmNiwgMHhkNiwgMHgwMSwgMHg2ZSwgMHhjMCwgMHg2ZiwgMHhlYywgMHgzYiwgMHgyMSwKKwkweDlkLCAweDBhLCAweDI0LCAweDM3LCAweDY5LCAweGI2LCAweGEzLCAweDY3LCAweDg3LCAweDk4LCAweDM5LCAweDMzLAorCTB4MzQsIDB4YjMsIDB4YzIsIDB4ZDgsIDB4OTEsIDB4ZjgsIDB4MzYsIDB4NzQsIDB4YTEsIDB4NjQsIDB4ZmIsIDB4ZDgsCisJMHg0YiwgMHg0ZSwgMHgzZiwgMHhjZiwgMHgzYywgMHg4YSwgMHhiNiwgMHgxYiwgMHg5NywgMHhiMywgMHgwOSwgMHhjMSwKKwkweDRiLCAweGNmLCAweDViLCAweGZmLCAweDMyLCAweDA4LCAweGM2LCAweDUyLCAweDI5LCAweGRlLCAweDJiLCAweGI4LAorCTB4OGMsIDB4NGYsIDB4YjksIDB4Y2EsIDB4OTksIDB4MWMsIDB4NmQsIDB4NzAsIDB4MjYsIDB4NDYsIDB4MDMsIDB4ZDksCisJMHg5MywgMHhlMiwgMHg5ZCwgMHg0OSwgMHhkYywgMHg5MywgMHhhMCwgMHhlMywgMHhlMywgMHg0OCwgMHg2YiwgMHg4NywKKwkweDZlLCAweDdkLCAweGM3LCAweDNhLCAweGVlLCAweDcxLCAweGJiLCAweGQ5LCAweDZmLCAweGI0LCAweGU1LCAweDg4LAorCTB4NjMsIDB4ZmEsIDB4Y2EsIDB4ZWQsIDB4MjcsIDB4NzIsIDB4YzIsIDB4YmIsIDB4OGIsIDB4YjYsIDB4YzQsIDB4NjMsCisJMHg3YSwgMHg3ZiwgMHhlMiwgMHgxNywgMHg1MCwgMHgwZiwgMHg3ZCwgMHg5NCwgMHhkOCwgMHhhZiwgMHhlYiwgMHg0YywKKwkweDQwLCAweDllLCAweDRkLCAweDhlLCAweGYxLCAweGJlLCAweDE0LCAweDllLCAweDYzLCAweDg4LCAweGI0LCAweDJhLAorCTB4YjksIDB4ZDYsIDB4MWIsIDB4YjYsIDB4ZjcsIDB4NjksIDB4ZTYsIDB4ZTEsIDB4MGEsIDB4NDUsIDB4NzQsIDB4ZGEsCisJMHgxNiwgMHg2ZiwgMHhmNywgMHhkYywgMHgxZCwgMHg5YiwgMHg2MSwgMHg1YSwgMHg3OCwgMHhkNywgMHhhNiwgMHhkMiwKKwkweDY3LCAweDU2LCAweGUwLCAweGQzLCAweDllLCAweDFlLCAweDkyLCAweGI4LCAweDMzLCAweDU1LCAweDZjLCAweDc1LAorCTB4NGUsIDB4MTYsIDB4MzMsIDB4NWIsIDB4ZDcsIDB4ODEsIDB4M2UsIDB4Y2UsIDB4YTcsIDB4M2UsIDB4NDYsIDB4ZjksCisJMHgwNSwgMHhkYiwgMHhlZiwgMHg0NSwgMHhjOSwgMHg1NywgMHgzZSwgMHgyNCwgMHhlMywgMHgyZCwgMHhlZCwgMHhkZSwKKwkweGZkLCAweDdhLCAweDZlLCAweDJlLCAweDAzLCAweDY3LCAweDJkLCAweDJhLCAweDNiLCAweGZhLCAweGM0LCAweDNhLAorCTB4ZWEsIDB4YjcsIDB4ZGQsIDB4NDUsIDB4MDUsIDB4NWUsIDB4NTYsIDB4YmYsIDB4ODgsIDB4MDcsIDB4MzYsIDB4NmUsCisJMHhhZCwgMHhiNiwgMHg1MSwgMHhmNiwgMHhhNiwgMHg1OCwgMHhhZSwgMHhjMSwgMHhlOSwgMHgxZCwgMHg1ZCwgMHg4NSwKKwkweDc5LCAweGRjLCAweDA1LCAweGZkLCAweGU5LCAweGMwLCAweDQ2LCAweDIyLCAweGFlLCAweDFiLCAweDljLCAweDNkLAorCTB4YTMsIDB4NzksIDB4ZjQsIDB4YzgsIDB4N2QsIDB4ZDYsIDB4YmMsIDB4ZjcsIDB4ZjAsIDB4MzAsIDB4YzYsIDB4YTgsCisJMHhlNSwgMHgyYiwgMHg3OCwgMHhmNywgMHgxMiwgMHhkNywgMHhkYiwgMHg4MywgMHg0OSwgMHhkOCwgMHgwNiwgMHhiOSwKKwkweGFlLCAweDdmLCAweDY3LCAweGQ3LCAweGFiLCAweGE3LCAweGFmLCAweGIwLCAweDVlLCAweGVkLCAweGM5LCAweDIzLAorCTB4MTUsIDB4N2QsIDB4NmYsIDB4NDgsIDB4ZTcsIDB4YjgsIDB4ZTIsIDB4M2EsIDB4NmUsIDB4ZjMsIDB4NTUsIDB4N2EsCisJMHg3ZSwgMHg1NCwgMHg4NywgMHhkZCwgMHgxYiwgMHg3OCwgMHg3MiwgMHg5ZCwgMHhiZCwgMHhkMywgMHgwNiwgMHg3MCwKKwkweDVjLCAweDA1LCAweDE4LCAweDM2LCAweDYyLCAweGZjLCAweDg0LCAweGMxLCAweGQ0LCAweDExLCAweDc1LCAweDRiLAorCTB4OWMsIDB4M2EsIDB4NzAsIDB4NTYsIDB4NGUsIDB4YWYsIDB4MGIsIDB4ZjcsIDB4N2IsIDB4YTAsIDB4MWQsIDB4YzgsCisJMHhiNSwgMHg0NywgMHhlMywgMHg0NiwgMHgzNywgMHhhZSwgMHg1ZCwgMHhhNiwgMHg5ZCwgMHg3MCwgMHgzYywgMHg4ZSwKKwkweDFkLCAweDBmLCAweDY5LCAweDc1LCAweDQzLCAweDBiLCAweGZkLCAweDg5LCAweDU5LCAweGE5LCAweDViLCAweDU0LAorCTB4OWUsIDB4ZjEsIDB4ZmMsIDB4NWQsIDB4YWQsIDB4NjYsIDB4ZGYsIDB4MTEsIDB4Y2IsIDB4N2EsIDB4YjAsIDB4NGIsCisJMHg2OSwgMHhlMywgMHgxMiwgMHg3NywgMHg3YSwgMHhhZSwgMHg4YSwgMHhkYywgMHg1YiwgMHg5YywgMHhmMywgMHgyZiwKKwkweDQzLCAweDllLCAweDVjLCAweGViLCAweGJkLCAweDRkLCAweDkxLCAweGY2LCAweDQyLCAweGZjLCAweDEyLCAweGI3LAorCTB4MDksIDB4ZTAsIDB4OTUsIDB4NzEsIDB4OTUsIDB4ZDMsIDB4NDEsIDB4NjYsIDB4ODAsIDB4N2MsIDB4YzUsIDB4MzYsCisJMHg5OCwgMHhmZiwgMHhhMiwgMHg4ZSwgMHhlNSwgMHgwZSwgMHhhNiwgMHgxOCwgMHgyNywgMHg2YSwgMHgzZiwgMHg3MSwKKwkweDg3LCAweDBhLCAweDY1LCAweGQzLCAweDJjLCAweGQ3LCAweDEwLCAweDFjLCAweGRlLCAweDIxLCAweGJhLCAweDBiLAorCTB4MWQsIDB4NWUsIDB4OWMsIDB4NTIsIDB4Y2UsIDB4MzcsIDB4YzcsIDB4NWMsIDB4N2MsIDB4ZDcsIDB4ZDgsIDB4ZmIsCisJMHg0MiwgMHg4ZCwgMHg2ZSwgMHgxMiwgMHhmOSwgMHhlYiwgMHg3MCwgMHhiYywgMHhmMSwgMHgzYywgMHhlNiwgMHhmYiwKKwkweDEyLCAweGU2LCAweDdiLCAweGY5LCAweGZiLCAweDQxLCAweDkxLCAweDU3LCAweDQ2LCAweDVlLCAweGY5LCAweDQzLAorCTB4NDEsIDB4YTYsIDB4ODksIDB4ZjQsIDB4NDcsIDB4OWEsIDB4N2IsIDB4M2QsIDB4OWYsIDB4NTksIDB4ZWYsIDB4NjMsCisJMHgwMiwgMHg2YywgMHg2NywgMHhjMSwgMHgwYiwgMHgxOSwgMHhhZSwgMHgyNSwgMHgwNywgMHhjNywgMHg1MiwgMHgzNywKKwkweDgxLCAweDE3LCAweDc2LCAweGNhLCAweDlmLCAweGMwLCAweDE2LCAweGY4LCAweGUzLCAweDRhLCAweDFhLCAweDNjLAorCTB4ZDEsIDB4MDMsIDB4MWUsIDB4ZTksIDB4MDYsIDB4NWYsIDB4YTQsIDB4YjQsIDB4NWQsIDB4ZmMsIDB4MjgsIDB4NzQsCisJMHhkZSwgMHhkOSwgMHg0YSwgMHhjOSwgMHhkOSwgMHgzYiwgMHg1YSwgMHg3NCwgMHg3MiwgMHhhMywgMHg0NywgMHg0MSwKKwkweDE3LCAweGRjLCAweDAzLCAweGFiLCAweGFlLCAweGE5LCAweDExLCAweDM3LCAweDNlLCAweDI5LCAweGE0LCAweGZmLAorCTB4NzYsIDB4ZWUsIDB4ZWQsIDB4NjgsIDB4MDYsIDB4YWUsIDB4Y2UsIDB4MTAsIDB4NTcsIDB4OTMsIDB4OTUsIDB4MmQsCisJMHhkZSwgMHgzYSwgMHhmMCwgMHg0MSwgMHhiMywgMHhlNiwgMHg4MywgMHg0NiwgMHgyNywgMHhlMywgMHhkZCwgMHg2NCwKKwkweGY5LCAweDYwLCAweDA0LCAweDdjLCAweDUwLCAweDU4LCAweGMyLCAweDA3LCAweGNmLCAweDU4LCAweDlhLCAweDlmLAorCTB4YWUsIDB4ZTIsIDB4ODMsIDB4NDksIDB4OWIsIDB4MzYsIDB4N2UsIDB4MDUsIDB4M2UsIDB4YjgsIDB4Y2EsIDB4NGYsCisJMHgzZSwgMHgzOSwgMHgyNCwgMHgyNywgMHhjMCwgMHgwNywgMHgwZiwgMHg2YiwgMHgzZSwgMHhiOCwgMHg0YSwgMHhmMywKKwkweDAxLCAweGUzLCAweDQ2LCAweGU0LCAweDg1LCAweDU2LCAweGM4LCAweDBlLCAweGYyLCAweGMyLCAweGIzLCAweDMyLAorCTB4MGIsIDB4NWUsIDB4NzgsIDB4NTEsIDB4YjEsIDB4ZWYsIDB4Y2IsIDB4YjQsIDB4MGYsIDB4NDYsIDB4ZTksIDB4OGYsCisJMHg5ZCwgMHgyYSwgMHgxNSwgMHhjMSwgMHhiYiwgMHg0YSwgMHhiZSwgMHgzMCwgMHgxNiwgMHgwNCwgMHgzMywgMHhmMCwKKwkweGQxLCAweDFmLCAweDg0LCAweDBkLCAweGVmLCAweGVhLCAweDNiLCAweDY5LCAweGE3LCAweDYxLCAweGJiLCAweDEwLAorCTB4MzYsIDB4ZGEsIDB4ZTQsIDB4ZTMsIDB4MGUsIDB4ZTgsIDB4ZmQsIDB4ZjAsIDB4MDQsIDB4YzYsIDB4YjAsIDB4NDcsCisJMHhmZCwgMHgzZSwgMHhmYywgMHg2MCwgMHgwZiwgMHhmMywgMHg0YSwgMHhkYiwgMHhmZSwgMHhiOCwgMHhlNiwgMHg5YiwKKwkweDFhLCAweGU4LCAweDgwLCAweDkzLCAweGRkLCAweDhjLCAweDMzLCAweGY5LCAweGRlLCAweDVlLCAweGQ1LCAweDllLAorCTB4ZWYsIDB4MDMsIDB4Y2MsIDB4MTEsIDB4NzUsIDB4YmYsIDB4MzAsIDB4YzYsIDB4ZDEsIDB4YjQsIDB4YzgsIDB4YjYsCisJMHhhNywgMHg1YywgMHgxOCwgMHg5MCwgMHhmYiwgMHg2YywgMHg1ZSwgMHgzZSwgMHhhOCwgMHg4MywgMHgxZCwgMHg1YSwKKwkweGE3LCAweDhjLCAweDVkLCAweGFlLCAweGI2LCAweDI1LCAweGJkLCAweGRmLCAweDgwLCAweGQwLCAweGFjLCAweDRkLAorCTB4OWIsIDB4M2QsIDB4ODEsIDB4N2QsIDB4YzUsIDB4NmEsIDB4YmIsIDB4ZmUsIDB4NWUsIDB4ZDgsIDB4ZjUsIDB4YWMsCisJMHgyMywgMHhhZSwgMHhiMSwgMHhlYiwgMHhlZiwgMHhiMiwgMHhiYywgMHhjNiwgMHhkZiwgMHg5ZSwgMHhiNiwgMHhmMSwKKwkweDBmLCAweDAwLCAweGJlLCAweDFkLCAweDczLCAweDM2LCAweDNlLCAweGRiLCAweGEwLCAweGFkLCAweDIxLCAweDcyLAorCTB4MDMsIDB4ZWMsIDB4YmMsIDB4MWIsIDB4YzEsIDB4ODMsIDB4MzcsIDB4YzEsIDB4OGYsIDB4N2EsIDB4NzcsIDB4ZDEsCisJMHg5MywgMHg5ZCwgMHhjNSwgMHg2NiwgMHhmOCwgMHhkYiwgMHhhZCwgMHhmMiwgMHhhYiwgMHg2MywgMHgxYiwgMHhhNSwKKwkweDdmLCAweGY0LCAweDc3LCAweDlhLCAweGExLCAweDU3LCAweDYxLCAweDk3LCAweGJlLCAweDA4LCAweDM4LCAweDIzLAorCTB4NTYsIDB4NTYsIDB4NDcsIDB4YzEsIDB4MDMsIDB4ZWQsIDB4ODksIDB4MWYsIDB4YTgsIDB4NDQsIDB4YWIsIDB4OTEsCisJMHhlZCwgMHgzYywgMHg0YiwgMHhiZSwgMHg1YywgMHgzYiwgMHgzMSwgMHhkNCwgMHg2NywgMHgxYywgMHhhNSwgMHg0NSwKKwkweGNlLCAweDFjLCAweGE3LCAweGU3LCAweDk1LCAweDgwLCAweDJkLCAweDllLCAweDgyLCAweDFkLCAweGIyLCAweDAxLAorCTB4ZWQsIDB4MzEsIDB4OTYsIDB4YmMsIDB4NWEsIDB4OWUsIDB4ZDksIDB4ZWEsIDB4ZGUsIDB4OWQsIDB4ZDMsIDB4N2MsCisJMHg3OCwgMHhjOSwgMHhjOSwgMHg4ZSwgMHhkZCwgMHgyNCwgMHg4NSwgMHhjMSwgMHgyOCwgMHhjNiwgMHhhMCwgMHg5YSwKKwkweGQ3LCAweGNhLCAweGY1LCAweGQyLCAweGFmLCAweGM3LCAweDczLCAweDU5LCAweDBlLCAweDQyLCAweDFmLCAweGZmLAorCTB4NjksIDB4YjEsIDB4NWYsIDB4NjYsIDB4MDcsIDB4OWEsIDB4ZjAsIDB4MWQsIDB4OTUsIDB4NjcsIDB4OGEsIDB4NWIsCisJMHhlMCwgMHhlZiwgMHhmYywgMHgwYSwgMHg3MCwgMHg1NCwgMHg4YiwgMHhlZiwgMHg1YSwgMHhlOSwgMHg1ZCwgMHg0NywKKwkweDVlLCAweDZkLCAweDkwLCAweDE5LCAweGE0LCAweGRmLCAweDI4LCAweGJmLCAweDY0LCAweGQzLCAweDk5LCAweDQ2LAorCTB4ZGUsIDB4NjgsIDB4NDAsIDB4ZGQsIDB4YTgsIDB4OWMsIDB4MmYsIDB4ZDIsIDB4OTYsIDB4ZDQsIDB4M2MsIDB4ZDEsCisJMHhmMywgMHhiMiwgMHg2YywgMHhjOSwgMHhiYywgMHgwYywgMHhkYiwgMHhmNCwgMHg1OSwgMHgzYywgMHhjZiwgMHg0YiwKKwkweDcyLCAweGU3LCAweDZlLCAweDY3LCAweDRiLCAweGEyLCAweGRkLCAweDgxLCAweGJlLCAweGM0LCAweGUzLCAweDNhLAorCTB4NWIsIDB4YmMsIDB4NWEsIDB4ZTcsIDB4NWEsIDB4ZGIsIDB4NDYsIDB4OGQsIDB4M2MsIDB4M2YsIDB4YTgsIDB4ZTIsCisJMHgwZCwgMHg5OCwgMHg5MywgMHhjZCwgMHg0ZSwgMHg4NywgMHg0ZCwgMHhlMywgMHhiNywgMHhiZSwgMHgyZiwgMHg1MSwKKwkweGRhLCAweGNmLCAweGE4LCAweDBkLCAweGFiLCAweDQ0LCAweGRhLCAweDFhLCAweDYwLCAweGU3LCAweGVjLCAweDExLAorCTB4ZDUsIDB4ZGMsIDB4MjAsIDB4YWUsIDB4YjQsIDB4NGYsIDB4YTgsIDB4NTYsIDB4YTQsIDB4ZjksIDB4MzYsIDB4MmQsCisJMHhkNiwgMHgwMCwgMHg5ZCwgMHg4MCwgMHhiNCwgMHgxNiwgMHhhNCwgMHg2ZCwgMHhiMiwgMHg2OSwgMHg0ZCwgMHgwZCwKKwkweDUyLCAweDhiLCAweGI0LCAweGNiLCAweDlhLCAweGU3LCAweDJmLCAweDc2LCAweGY4LCAweDVlLCAweGNlLCAweGE5LAorCTB4OTcsIDB4YjYsIDB4NTMsIDB4MGQsIDB4OTAsIDB4MGQsIDB4YWIsIDB4NjUsIDB4NjYsIDB4NmIsIDB4OWQsIDB4YjQsCisJMHgyMSwgMHg4ZiwgMHgzMSwgMHhlZSwgMHhkNCwgMHhhOSwgMHhhOCwgMHhiYywgMHhmMywgMHg1NCwgMHg3YiwgMHhmYywKKwkweGEzLCAweDE4LCAweDQzLCAweGZiLCAweDE5LCAweGM2LCAweGJjLCAweGZmLCAweGFjLCAweDk5LCAweDMxLCAweDlmLAorCTB4YjYsIDB4MzMsIDB4N2MsIDB4ZDcsIDB4NjksIDB4ZjksIDB4NDMsIDB4N2MsIDB4OTgsIDB4M2IsIDB4ZGYsIDB4NjAsCisJMHg2MywgMHg5NCwgMHg4ZSwgMHgzYiwgMHhjMywgMHhhMywgMHhkNCwgMHhkYiwgMHhlZCwgMHhmNiwgMHg3ZSwgMHhhMiwKKwkweGZmLCAweGQ5LCAweDRjLCAweDVmLCAweDZkLCAweDgyLCAweDM2LCAweDU0LCAweDg5LCAweGZjLCAweDQ4LCAweGRkLAorCTB4ODMsIDB4ZjcsIDB4YjgsIDB4MjMsIDB4ODUsIDB4NzksIDB4OTksIDB4MzUsIDB4NDUsIDB4YmUsIDB4M2EsIDB4YWUsCisJMHhiOCwgMHg0ZiwgMHgwNSwgMHg2OSwgMHg5NSwgMHg3NywgMHgwNSwgMHg2NiwgMHg4ZSwgMHhjOSwgMHgwYiwgMHg0NiwKKwkweDJlLCAweGZkLCAweDlhLCAweDkxLCAweDRiLCAweGE3LCAweGNmLCAweDJkLCAweDkwLCAweDRiLCAweDA1LCAweDJkLAorCTB4OTcsIDB4MDYsIDB4MDUsIDB4ZWYsIDB4YTksIDB4MDIsIDB4ZTQsIDB4ZDIsIDB4MDgsIDB4YmUsIDB4M2QsIDB4MmQsCisJMHg5NywgMHg2MiwgMHg2MiwgMHg2ZCwgMHg2NCwgMHg4OSwgMHg1ZSwgMHhjNSwgMHhmZSwgMHgyNywgMHg0YiwgMHhhZSwKKwkweGI2LCAweGE1LCAweDBhLCAweGUzLCAweGIwLCAweDQzLCAweDRhLCAweDIzLCAweDU2LCAweDY3LCAweDRiLCAweGJhLAorCTB4NDksIDB4M2EsIDB4N2EsIDB4N2UsIDB4MmEsIDB4YTEsIDB4OWQsIDB4MzksIDB4ZGIsIDB4Y2MsIDB4M2IsIDB4OGYsCisJMHg1ZiwgMHg1NCwgMHg5NCwgMHg2MSwgMHgyNywgMHgyMCwgMHhjMywgMHgxZSwgMHhiZSwgMHg4MiwgMHgwYywgMHg0MywKKwkweDVlLCAweDE5LCAweDc5LCAweDY1LCAweGI2LCAweGZiLCAweGRkLCAweDlmLCAweDBlLCAweDc5LCAweDk0LCAweDFmLAorCTB4OTQsIDB4MTksIDB4OTAsIDB4NDksIDB4MjUsIDB4YzgsIDB4YTQsIDB4MTIsIDB4ZTQsIDB4NTQsIDB4MDksIDB4NzIsCisJMHhhOSwgMHgwNCwgMHhiOSwgMHg1NCwgMHg4MiwgMHg1YywgMHgyYSwgMHg0MSwgMHgyZSwgMHg0MSwgMHhjNiwgMHgzZCwKKwkweDBhLCAweDE5LCAweDY3LCAweDY0LCAweGRhLCAweDAwLCAweGVkLCAweDM1LCAweGI5LCAweGNmLCAweGVhLCAweDc3LAorCTB4MTMsIDB4MjcsIDB4ZTksIDB4YjIsIDB4N2UsIDB4OTEsIDB4ZDksIDB4YjMsIDB4N2EsIDB4YWUsIDB4MmEsIDB4MmUsCisJMHhiOCwgMHhlYiwgMHg4OCwgMHhlNiwgMHg3NywgMHhjZiwgMHg1NywgMHhkNywgMHgzYSwgMHhkYywgMHgxZiwgMHhmMywKKwkweDAzLCAweGVkLCAweGIzLCAweDZmLCAweGU2LCAweDZmLCAweGE5LCAweDAzLCAweDVmLCAweGJmLCAweDYyLCAweGY5LAorCTB4N2EsIDB4ZjMsIDB4MWMsIDB4NWYsIDB4MjcsIDB4MWQsIDB4YzYsIDB4ODksIDB4OTcsIDB4ZTcsIDB4ZWIsIDB4MTYsCisJMHg5YiwgMHg5NywgMHgwZiwgMHg1NiwgMHg4MCwgMHhhZiwgMHg1NywgMHgyYywgMHhlMiwgMHhlYiwgMHgyOCwgMHhmOCwKKwkweDdhLCAweGU3LCAweDEyLCAweGJlLCAweDVlLCAweGU1LCAweGY0LCAweGVhLCAweDNhLCAweDNjLCAweDgzLCAweGM2LAorCTB4ZWYsIDB4NWEsIDB4NjcsIDB4OWUsIDB4YWYsIDB4ZjcsIDB4NmIsIDB4YmUsIDB4M2UsIDB4MDQsIDB4YmUsIDB4YmUsCisJMHhiZSwgMHg4YSwgMHhhZiwgMHg3NywgMHg0YSwgMHhmMiwgMHg5NiwgMHg2YywgMHg2NCwgMHhhMywgMHhlYywgMHhiZSwKKwkweDVmLCAweDM1LCAweGFmLCAweDkxLCAweDdmLCAweDExLCAweDUzLCAweGRmLCAweGYwLCAweDU4LCAweGVmLCAweDU4LAorCTB4YjMsIDB4ZTQsIDB4MWUsIDB4ZmEsIDB4MTEsIDB4ZDcsIDB4MDYsIDB4YzgsIDB4MjMsIDB4NDMsIDB4MTksIDB4YzcsCisJMHg5MywgMHg4MywgMHg0NywgMHg3ZSwgMHgyMCwgMHhkMywgMHg5YSwgMHhiNywgMHg0NCwgMHhmNiwgMHgxYywgMHg4OSwKKwkweGNhLCAweGYwLCAweDExLCAweGM2LCAweDFlLCAweGJlLCAweDYzLCAweGU5LCAweGJkLCAweDRlLCAweDg2LCAweDA3LAorCTB4YjksIDB4NWYsIDB4ZDIsIDB4OTUsIDB4ZGQsIDB4NDcsIDB4ZTAsIDB4NjMsIDB4MWQsIDB4NjEsIDB4ZWMsIDB4ZTEsCisJMHhmMiwgMHgxYywgMHg4ZiwgMHg0ZCwgMHg0MywgMHhiNiwgMHhlYywgMHgzZSwgMHhhMiwgMHhlNywgMHgxYSwgMHhlZCwKKwkweDM0LCAweGM4LCAweGExLCAweDIzLCAweDIyLCAweGI3LCAweDFkLCAweDcxLCAweGU1LCAweGY2LCAweDIzLCAweDczLAorCTB4YmMsIDB4MzYsIDB4MTAsIDB4ZjIsIDB4ZGEsIDB4OWYsIDB4ODMsIDB4ZDcsIDB4ZGEsIDB4MmQsIDB4YWYsIDB4YTksCisJMHgzOSwgMHg1ZSwgMHhmYiwgMHg1YSwgMHgxNSwgMHhhZiwgMHhiMSwgMHgzZSwgMHg3OSwgMHhlZCwgMHg4MiwgMHg0ZCwKKwkweGUzLCAweGI3LCAweDJiLCAweDdiLCAweDhmLCAweGI0LCAweGNhLCAweGVlLCAweDg3LCAweGRlLCAweDIyLCAweDdiLAorCTB4ZWUsIDB4MjcsIDB4YWMsIDB4ZTYsIDB4OWUsIDB4M2MsIDB4ZGEsIDB4NWYsIDB4ZTMsIDB4OTUsIDB4NzYsIDB4YjQsCisJMHgxZiwgMHhlZSwgMHgwZiwgMHhkMiwgMHg3NywgMHg2NSwgMHg3NSwgMHg0ZSwgMHg0OCwgMHgzMiwgMHhjZiwgMHhmZSwKKwkweDZhLCAweGUxLCAweDNiLCAweDlmLCAweDgyLCAweDRmLCAweGIxLCAweDE3LCAweDMwLCAweGRkLCAweDdhLCAweDQ0LAorCTB4OTIsIDB4YWUsIDB4YmMsIDB4MjYsIDB4MjMsIDB4YTksIDB4NDcsIDB4NWIsIDB4OGQsIDB4M2QsIDB4NzEsIDB4MDksCisJMHhiYywgMHg0MiwgMHhmYSwgMHhjZiwgMHg0OCwgMHhlZSwgMHhlZCwgMHg4MSwgMHhmNiwgMHgyYiwgMHg0NiwgMHhjYiwKKwkweDQyLCAweGZmLCAweDlmLCAweDMxLCAweDczLCAweGM3LCAweGRjLCAweDc3LCAweGM3LCAweGYzLCAweGJlLCAweDM1LAorCTB4ZmEsIDB4YmMsIDB4OWIsIDB4OGUsIDB4ZDcsIDB4NzYsIDB4MzMsIDB4YmYsIDB4NDYsIDB4ZWYsIDB4MzcsIDB4Y2QsCisJMHhlOSwgMHhiMywgMHhkYywgMHhhYywgMHhjZiwgMHg3NiwgMHg2MiwgMHgzYSwgMHg5ZSwgMHg1ZSwgMHgyOCwgMHhmMywKKwkweDhlLCAweDMwLCAweGRlLCAweGJkLCAweGNjLCAweGJiLCAweDA2LCAweGZmLCAweGY4LCAweDJhLCAweDEzLCAweDliLAorCTB4MjUsIDB4ZGYsIDB4N2QsIDB4ZGQsIDB4YzksIDB4MTUsIDB4MmYsIDB4ZTksIDB4N2QsIDB4ODUsIDB4NTksIDB4MWYsCisJMHhiZiwgMHhjYiwgMHhmYywgMHg2NiwgMHhmOSwgMHg0YiwgMHg4YywgMHg3MSwgMHgyNCwgMHgxMiwgMHhlYSwgMHg4MSwKKwkweDU2LCAweGVlLCAweDNiLCAweDE4LCAweDljLCAweDMyLCAweDc2LCAweDk0LCAweGUxLCAweGQxLCAweDA2LCAweGVkLAorCTB4NmIsIDB4OGMsIDB4ZTAsIDB4N2IsIDB4ZjcsIDB4NjgsIDB4YTMsIDB4NTMsIDB4YTAsIDB4NmQsIDB4MzIsIDB4ZDAsCisJMHhlMCwgMHhlNCwgMHhjNywgMHhmNywgMHhiNCwgMHgxYSwgMHg5YiwgMHg3OSwgMHgyMCwgMHhjZSwgMHgzZCwgMHg4NSwKKwkweDE5LCAweGI1LCAweDU0LCAweDI2LCAweDlmLCAweDkyLCAweDUwLCAweDI2LCAweDI3LCAweDZmLCAweGM5LCAweGMwLAorCTB4YjYsIDB4Y2UsIDB4MWQsIDB4ZDEsIDB4ZjcsIDB4ZjcsIDB4MjUsIDB4ZGEsIDB4MTUsIDB4YzcsIDB4ZjQsIDB4MDksCisJMHhjOCwgMHhkNywgMHg5MCwgMHgxNiwgMHhlMiwgMHhmMiwgMHhmMSwgMHgyMywgMHhhNCwgMHgwNywgMHgxNSwgMHg2YiwKKwkweDk0LCAweGRmLCAweGIyLCAweGY0LCAweDcwLCAweDU5LCAweDhhLCAweDkwLCAweDNiLCAweDQ3LCAweDhlLCAweGRjLAorCTB4MmUsIDB4ZTMsIDB4YmIsIDB4MTYsIDB4ZDMsIDB4YzMsIDB4OWUsIDB4NzksIDB4N2EsIDB4ODgsIDB4YzEsIDB4M2UsCisJMHg3MywgMHhhYSwgMHhlOSwgMHhlMSwgMHgzNywgMHhlNywgMHhlOCwgMHg2MSwgMHhkYywgMHhmOSwgMHhkNywgMHhkMiwKKwkweGMzLCAweDBkLCAweDBiLCAweGU4LCAweDYxLCAweDQ0LCAweGQzLCAweDQzLCAweGZmLCAweDFjLCAweDNkLCAweDhjLAorCTB4MWMsIDB4NjEsIDB4YmYsIDB4N2EsIDB4NWQsIDB4ZDQsIDB4OWIsIDB4NzEsIDB4MzgsIDB4ZTcsIDB4NzMsIDB4YjQsCisJMHg5MCwgMHgxOCwgMHhkNiwgMHhmYiwgMHg0NCwgMHg5MywgMHg3OSwgMHg5ZSwgMHgyNSwgMHg1ZCwgMHhhNSwgMHgxOCwKKwkweDFiLCAweDk5LCAweDlmLCAweGZmLCAweGM2LCAweDdmLCAweGQzLCAweGY5LCAweDdmLCAweDQ3LCAweGZjLCAweGZmLAorCTB4ZWYsIDB4ZmMsIDB4NWYsIDB4OGYsIDB4ZjYsIDB4MjksIDB4OGIsIDB4NDMsIDB4NzksIDB4MWMsIDB4ZDIsIDB4YzMsCisJMHg3YiwgMHhlMiwgMHg0NiwgMHgyZiwgMHg3MCwgMHg4ZSwgMHhmOSwgMHg2ZCwgMHhmNiwgMHhhYywgMHg5ZiwgMHg4MywKKwkweGZjLCAweDdiLCAweDFjLCAweGYyLCAweGVmLCAweGIxLCAweDA1LCAweGViLCAweDAxLCAweDNkLCAweDM2LCAweDA2LAorCTB4MTEsIDB4YzgsIDB4YzEsIDB4ZDQsIDB4M2MsIDB4M2UsIDB4NjYsIDB4YmEsIDB4ODksIDB4MGYsIDB4YjMsIDB4ZjcsCisJMHhlNCwgMHg2YywgMHg2NSwgMHgzMSwgMHg0ZSwgMHg1YywgMHhiZCwgMHhkZiwgMHhlOCwgMHg2NCwgMHhhYSwgMHgxYSwKKwkweDI3LCAweDg0LCAweDdiLCAweGI2LCAweDZhLCAweDhjLCAweGY4LCAweDVkLCAweGU2LCAweGY3LCAweDY1LCAweGJkLAorCTB4ODcsIDB4YTQsIDB4YTAsIDB4ZDcsIDB4OWYsIDB4ODgsIDB4MTcsIDB4YWUsIDB4M2YsIDB4MTEsIDB4MjcsIDB4YWUsCisJMHhiNiwgMHhmNywgMHgwYiwgMHhlNSwgMHgzYSwgMHhiZCwgMHgyZiwgMHhmYywgMHhjMCwgMHg1NCwgMHg0YywgMHg2NiwKKwkweDYyLCAweDhjLCAweGViLCAweGYxLCAweGRlLCAweDU3LCAweGZhLCAweGNhLCAweDdlLCAweGJjLCAweDIwLCAweDc5LAorCTB4N2IsIDB4ZDYsIDB4NjcsIDB4OTUsIDB4YTUsIDB4NmQsIDB4YzYsIDB4MDMsIDB4NzksIDB4MjcsIDB4NDIsIDB4YjgsCisJMHgwZSwgMHhkMSwgMHg2OSwgMHg2NSwgMHg1ZCwgMHg0MywgMHg1NSwgMHg5YywgMHgxMiwgMHg3OCwgMHgxZiwgMHg5MywKKwkweDQ0LCAweGI2LCAweDFiLCAweGVmLCAweDI5LCAweGY2LCAweGZkLCAweGE0LCAweDhjLCAweDNjLCAweDU4LCAweDg2LAorCTB4MmQsIDB4ZjcsIDB4MzAsIDB4NzQsIDB4OGUsIDB4MjMsIDB4MTAsIDB4OTMsIDB4ZmEsIDB4MmUsIDB4MTQsIDB4YzIsCisJMHgzMCwgMHhhMSwgMHhlZiwgMHhmNSwgMHhhMywgMHhkZiwgMHg0NywgMHg3YSwgMHg4OCwgMHhlMywgMHhmYiwgMHhiMiwKKwkweDhkLCAweDI1LCAweGM1LCAweGE1LCAweDUwLCAweGZjLCAweDAxLCAweGUwLCAweGU3LCAweDFkLCAweDk0LCAweDNmLAorCTB4YzIsIDB4ZmIsIDB4OGQsIDB4ZTYsIDB4YzMsIDB4ZjgsIDB4MjEsIDB4MDMsIDB4ZmEsIDB4Y2QsIDB4YjksIDB4NzksCisJMHhjZCwgMHhjOSwgMHg5NCwgMHhjZCwgMHhmZSwgMHg5NiwgMHhhYSwgMHhmYiwgMHhmNSwgMHhlNSwgMHhiMCwgMHhiNiwKKwkweDlmLCAweGQzLCAweDc2LCAweDVmLCAweDBiLCAweGNmLCAweGU3LCAweDE5LCAweDFiLCAweGZhLCAweGNiLCAweGIwLAorCTB4YTEsIDB4OWYsIDB4YTgsIDB4NjQsIDB4ZjQsIDB4MWEsIDB4ZDYsIDB4NjMsIDB4YjAsIDB4YTEsIDB4MWYsIDB4ODUsCisJMHhlZSwgMHhhMSwgMHhjZSwgMHg4OSwgMHg1OSwgMHg5ZCwgMHgzMywgMHhhMiwgMHg3NiwgMHg2OSwgMHg5ZCwgMHhmMywKKwkweGQ3LCAweDVhLCAweGU3LCAweGZjLCAweGVhLCAweDEyLCAweDlkLCAweDczLCAweDQ4LCAweGI1LCAweDhmLCAweDUyLAorCTB4ZTcsIDB4ZjQsIDB4YWEsIDB4OWQsIDB4MGUsIDB4ZWQsIDB4YzUsIDB4YjUsIDB4Y2IsIDB4ZTgsIDB4OWMsIDB4ZjcsCisJMHhjYSwgMHhhZiwgMHhkOCwgMHhiYywgMHhmZCwgMHhmMiwgMHhiZSwgMHg2ZCwgMHg3YSwgMHhkZCwgMHhjNiwgMHg5YiwKKwkweDUwLCAweGJjLCAweGNiLCAweGNlLCAweGU4LCAweGEwLCAweGViLCAweDU1LCAweGE3LCAweDVlLCAweGVmLCAweGZkLAorCTB4NmEsIDB4OTUsIDB4Y2UsIDB4NjksIDB4NTMsIDB4ZGQsIDB4NGUsIDB4YWYsIDB4YWUsIDB4YzMsIDB4NzgsIDB4MDQsCisJMHhiZiwgMHg1MywgMHg0ZSwgMHg2NiwgMHhhMCwgMHgwZSwgMHhkZiwgMHg3MSwgMHg4OSwgMHgxYywgMHhjMSwgMHhkOCwKKwkweGNkLCAweDdkLCAweDdiLCAweGNhLCAweGU0LCAweDVkLCAweDYzLCAweGYzLCAweDU0LCAweDk4LCAweGVlLCAweDlhLAorCTB4ZjQsIDB4NzYsIDB4OWIsIDB4NmUsIDB4NzQsIDB4NTUsIDB4OWIsIDB4NmEsIDB4ZDUsIDB4YmEsIDB4NmEsIDB4MzMsCisJMHgxOCwgMHg2YSwgMHgwMiwgMHhmYSwgMHg3NSwgMHhhMiwgMHgxNCwgMHhlYSwgMHgyYywgMHhmZSwgMHg2NiwgMHhiYywKKwkweDk5LCAweDcxLCAweDg5LCAweDMwLCAweDZlLCAweDlkLCAweDQwLCAweDE5LCAweDNjLCAweGE1LCAweGQwLCAweGE2LAorCTB4ZTQsIDB4NmYsIDB4ZjgsIDB4MGEsIDB4NzgsIDB4YTYsIDB4ODAsIDB4ZDcsIDB4NWIsIDB4YzAsIDB4M2YsIDB4YmYsCisJMHg1ZSwgMHg2NCwgMHhkYywgMHhiMywgMHg1OSwgMHg4ZSwgMHg4ZSwgMHg1NSwgMHhlNywgMHhiNSwgMHhjYSwgMHhiYiwKKwkweGM3LCAweDM2LCAweGM4LCAweGJlLCAweDUxLCAweGZmLCAweDZhLCAweGE5LCAweGRmLCAweDI4LCAweDIzLCAweGEzLAorCTB4MmYsIDB4ZWEsIDB4ZmIsIDB4NDAsIDB4ZDYsIDB4ZTgsIDB4N2IsIDB4OTIsIDB4NzgsIDB4N2YsIDB4OTgsIDB4OTEsCisJMHg5MSwgMHhmZCwgMHg4ZSwgMHg5MSwgMHg5MSwgMHgxOSwgMHgzNSwgMHg2ZiwgMHhiMywgMHg4NiwgMHg2ZCwgMHhmMiwKKwkweDZlLCAweGE2LCAweGJlLCAweGQxLCAweGI4LCAweGJlLCAweDQzLCAweDdhLCAweGEyLCAweDcyLCAweGFkLCAweGZjLAorCTB4ZDEsIDB4NzEsIDB4NzUsIDB4YTcsIDB4OWEsIDB4YmYsIDB4NGIsIDB4NDEsIDB4ZGIsIDB4YWMsIDB4OTMsIDB4MGIsCisJMHg2YywgMHhkNiwgMHhiZiwgMHg5NywgMHg5OSwgMHhmNywgMHg0NSwgMHgzMSwgMHg0ZSwgMHhkMCwgMHhmMCwgMHg3NSwKKwkweDJmLCAweDczLCAweDFkLCAweGI0LCAweDM5LCAweDI2LCAweDk3LCAweGE0LCAweDRmLCAweGUzLCAweDhmLCAweGYyLAorCTB4YjQsIDB4MDEsIDB4NzIsIDB4NzAsIDB4NTYsIDB4ZWIsIDB4ZDcsIDB4YjUsIDB4YmMsIDB4ZjMsIDB4ZjgsIDB4MDgsCisJMHg2ZCwgMHhkNywgMHhhZiwgMHg2YiwgMHg3OSwgMHhiNiwgMHhkNiwgMHhkYSwgMHhhZSwgMHhkMywgMHg5MCwgMHhkMywKKwkweDk0LCAweGEzLCAweDM3LCAweGNhLCAweDVmLCAweGRiLCAweDc0LCAweGE2LCAweDI1LCAweGUzLCAweGIzLCAweDQyLAorCTB4N2QsIDB4MTcsIDB4ODMsIDB4MGMsIDB4YTUsIDB4M2MsIDB4ZmQsIDB4NTksIDB4NmQsIDB4ZDcsIDB4ZTcsIDB4NmMsCisJMHgxYiwgMHg5NCwgMHg5ZiwgMHg0NiwgMHg3NiwgMHg2ZiwgMHg3NiwgMHhhNiwgMHg2ZCwgMHgxYSwgMHhiZiwgMHhjMywKKwkweDE4LCAweGJhLCAweDlmLCAweGM5LCAweDU5LCAweDNlLCAweDUzLCAweGNlLCAweDkzLCAweGM4LCAweDVmLCAweDgzLAorCTB4N2MsIDB4ZjIsIDB4ZDksIDB4NjMsIDB4OWEsIDB4Y2YsIDB4YjQsIDB4N2QsIDB4ZTIsIDB4NzQsIDB4ZDksIDB4MzUsCisJMHg4NSwgMHhiOSwgMHhmNSwgMHg4MCwgMHgzYywgMHhmOSwgMHg0YywgMHgxZCwgMHhmNSwgMHhhNiwgMHg4ZCwgMHgzYywKKwkweGYwLCAweDkwLCAweGZlLCAweDQ1LCAweGU4LCAweDBlLCAweGQ2LCAweDQ1LCAweGZhLCAweGIxLCAweDBjLCAweGU2LAorCTB4ZjAsIDB4MjQsIDB4ZmMsIDB4OWYsIDB4NDYsIDB4N2MsIDB4MzcsIDB4ZTMsIDB4N2IsIDB4NDIsIDB4N2UsIDB4NzUsCisJMHgzMCwgMHhhYSwgMHhjNywgMHgzZCwgMHg4MiwgMHg3MSwgMHgxYywgMHgzOCwgMHg4MiwgMHgzMSwgMHgzOSwgMHhjNiwKKwkweDc2LCAweDc2LCAweGNmLCAweGI4LCAweDUyLCAweDczLCAweDg2LCAweDdjLCAweGM3LCAweDMzLCAweDg2LCAweDQxLAorCTB4YjAsIDB4YjcsIDB4OGIsIDB4NzQsIDB4OWIsIDB4ZjQsIDB4ZmEsIDB4ZjUsIDB4ZjksIDB4YjcsIDB4Y2QsIDB4ZjEsCisJMHgwOCwgMHg3MCwgMHg3MiwgMHgwMCwgMHhmMywgMHgzMSwgMHg1MiwgMHhmNCwgMHhiZCwgMHhhYywgMHhlMywgMHhjNywKKwkweDMxLCAweDRlLCAweGQ4LCAweDgwLCAweGVkLCAweGIwLCAweDA1LCAweGRiLCAweDYxLCAweDA3LCAweGI2LCAweGMzLAorCTB4MGUsIDB4NWMsIDB4MmQsIDB4YTcsIDB4YjYsIDB4NzIsIDB4N2YsIDB4NDksIDB4ZmUsIDB4OWQsIDB4YmMsIDB4NzcsCisJMHhmOSwgMHgxYiwgMHgzYSwgMHgzNiwgMHg1ZiwgMHg3YiwgMHg0YiwgMHgxZiwgMHg3YywgMHg3NiwgMHhmMSwgMHg5MiwKKwkweDAzLCAweGRjLCAweDYzLCAweDNmLCAweGViLCAweGQ1LCAweGRlLCAweGQyLCAweDJmLCAweGVkLCAweDNkLCAweGM4LAorCTB4ZWYsIDB4YjksIDB4MjQsIDB4MWQsIDB4YjcsIDB4N2MsIDB4ZDgsIDB4YTksIDB4MWQsIDB4ZTgsIDB4MDMsIDB4MWUsCisJMHgzMywgMHg0ZSwgMHgzMiwgMHgzZSwgMHhlNCwgMHgzMCwgMHg0ZSwgMHg5MSwgMHhkZCwgMHgxYywgMHhkMSwgMHg2NywKKwkweGM0LCAweGE2LCAweDE5LCAweDhiLCAweGI4LCAweGE1LCAweDNkLCAweGIyLCAweDI1LCAweGIxLCAweGRiLCAweDQ5LAorCTB4MGUsIDB4YTgsIDB4NDgsIDB4NzIsIDB4YTAsIDB4Y2YsIDB4MDksIDB4Y2IsIDB4ZjEsIDB4MGUsIDB4NmEsIDB4YzgsCisJMHgxOSwgMHhjMCwgMHg3YSwgMHhhMCwgMHhmNCwgMHg3NSwgMHhkMCwgMHhkMywgMHg3OSwgMHgyOSwgMHgxYywgMHg2ZiwKKwkweDkwLCAweGE5LCAweDYyLCAweGJiLCAweDk3LCAweDU1LCAweDMxLCAweGUxLCAweGJlLCAweDEyLCAweDc1LCAweDBhLAorCTB4NDQsIDB4N2YsIDB4MjYsIDB4MmEsIDB4MTMsIDB4YTMsIDB4MWIsIDB4NDUsIDB4NjksIDB4ZGIsIDB4YmQsIDB4NDUsCisJMHhiMiwgMHg2MywgMHhhMywgMHg3MiwgMHhiZSwgMHg1YiwgMHg5YSwgMHgxNCwgMHhkYSwgMHhlNywgMHhkZCwgMHhkZSwKKwkweGVhLCAweDE0LCAweGQ3LCAweDExLCAweDQzLCAweDVlLCAweDU4LCAweDRmLCAweDNlLCAweDE5LCAweDA1LCAweDBlLAorCTB4NDEsIDB4YjcsIDB4OGMsIDB4ZWIsIDB4ZDYsIDB4MDksIDB4ZTUsIDB4ZGUsIDB4ZWQsIDB4M2EsIDB4NjYsIDB4Y2EsCisJMHgzOCwgMHg2ZCwgMHhmNSwgMHg3YSwgMHgwMywgMHhmOSwgMHgyMywgMHhiYSwgMHgyYywgMHg3ZiwgMHg0YywgMHg5NiwKKwkweGI4LCAweDM2LCAweDIzLCAweDc5LCAweDk3LCAweDcxLCAweDYxLCAweDFmLCAweGJmLCAweGM3LCAweDU5LCAweGI2LAorCTB4NGUsIDB4NDYsIDB4YmEsIDB4ZjMsIDB4NzYsIDB4OGYsIDB4YzcsIDB4MzcsIDB4YzEsIDB4MDcsIDB4MWMsIDB4OWYsCisJMHg1ZSwgMHgyNywgMHgwMSwgMHhhZiwgMHgyZiwgMHg1ZSwgMHhjZiwgMHg4OCwgMHg1NiwgMHhjOSwgMHgwMywgMHg0NywKKwkweDY2LCAweDQ2LCAweGMzLCAweGY1LCAweDBmLCAweGI2LCAweDg3LCAweGVmLCAweDcxLCAweDIzLCAweDZmLCAweGIzLAorCTB4NGIsIDB4ZWEsIDB4MTEsIDB4MmUsIDB4YWUsIDB4NTUsIDB4MmUsIDB4OTQsIDB4YjEsIDB4NGEsIDB4OWYsIDB4MTMsCisJMHhmNiwgMHhiNCwgMHg3YywgMHgzZCwgMHg1ZCwgMHgzMSwgMHhiMiwgMHg3NSwgMHhiYywgMHgxMiwgMHhlYSwgMHg5NiwKKwkweGE4LCAweGQxLCAweGE1LCAweDRiLCAweGY0LCAweDg5LCAweDg5LCAweDYwLCAweGNlLCAweGViLCAweDkzLCAweDRiLAorCTB4M2EsIDB4NDYsIDB4ZjcsIDB4NmIsIDB4NTMsIDB4MmQsIDB4ZTIsIDB4MWUsIDB4OTMsIDB4ZDksIDB4MTEsIDB4ZmYsCisJMHg1NCwgMHgyYiwgMHhmNywgMHg2OSwgMHg4YywgMHhhNCwgMHhkZSwgMHg4YywgMHg3ZSwgMHg4YywgMHhiNSwgMHg1MCwKKwkweDFmLCAweDBlLCAweGE5LCAweGI1LCAweDc4LCAweGFmLCAweGQxLCAweGY0LCAweDA3LCAweDllLCAweGMyLCAweGI3LAorCTB4ZjEsIDB4MTMsIDB4YmUsIDB4MGMsIDB4M2YsIDB4ZTEsIDB4MDksIDB4ZTgsIDB4YmEsIDB4NzMsIDB4ZjAsIDB4MTMsCisJMHgxZSwgMHg4NywgMHg5ZiwgMHhmMCwgMHgxOCwgMHhmYywgMHg4NCwgMHg0NywgMHhhMSwgMHgyNywgMHhhYiwgMHhmZCwKKwkweDgzLCAweGUxLCAweDA1LCAweGZlLCAweDQxLCAweGEwLCAweGY5LCAweDlmLCAweDMxLCAweGMwLCAweGM3LCAweGFiLAorCTB4N2MsIDB4ODMsIDB4YmQsIDB4NDYsIDB4NWYsIDB4YzEsIDB4ZWYsIDB4MzcsIDB4N2MsIDB4ZDQsIDB4YTYsIDB4NmUsCisJMHhkNiwgMHhmYSwgMHhkMSwgMHhlYywgMHhkOSwgMHgxZCwgMHg5OCwgMHhkMywgMHg1NywgMHg2ZCwgMHhjYSwgMHhlOCwKKwkweGFiLCAweDg5LCAweDc5LCAweDdkLCAweDY1LCAweGY4LCAweGU4LCAweGQ4LCAweGE4LCAweDQ0LCAweGZjLCAweGQxLAorCTB4ZTksIDB4NmMsIDB4NmEsIDB4YmIsIDB4ZTYsIDB4YTEsIDB4MjYsIDB4N2YsIDB4YTMsIDB4NDQsIDB4MWUsIDB4NTAsCisJMHhjZCwgMHgzNSwgMHg5MiwgMHhiNSwgMHhkZiwgMHhhMCwgMHhhZiwgMHhhMywgMHg1ZiwgMHg0NywgMHg1YiwgMHhlZiwKKwkweDk0LCAweDljLCAweGI2LCAweGNmLCAweGFlLCAweDhjLCAweGVmLCAweDQ3LCAweDE3LCAweGUxLCAweGJiLCAweDUwLAorCTB4N2EsIDB4NTYsIDB4ZTMsIDB4ZmMsIDB4N2UsIDB4N2QsIDB4MjYsIDB4YmYsIDB4NDEsIDB4ODYsIDB4Y2IsIDB4MjEsCisJMHhjZSwgMHg3OSwgMHgwNiwgMHg4ZSwgMHhmYiwgMHgzMCwgMHg1YSwgMHgyNSwgMHg3MiwgMHhhYywgMHg0NSwgMHhmYSwKKwkweDUzLCAweGEyLCAweDcyLCAweGE5LCAweDk1LCAweDdhLCAweGZmLCAweGNhLCAweGE5LCAweDZlLCAweDg5LCAweGU3LAorCTB4YmEsIDB4NDksIDB4YWIsIDB4ZjcsIDB4YzksIDB4ODQsIDB4OWUsIDB4OGIsIDB4MTYsIDB4YTksIDB4MzksIDB4NDYsCisJMHgxYiwgMHgyNSwgMHg1YywgMHhjMywgMHhiYiwgMHhiZCwgMHhjNSwgMHhkZSwgMHg0MSwgMHgxZCwgMHgzNSwgMHhlNSwKKwkweDQ0LCAweDBlLCAweGVhLCAweGY5LCAweDlhLCAweGQ1LCAweDdiLCAweDBjLCAweDZmLCAweDllLCAweDYyLCAweDJjLAorCTB4OWUsIDB4ZjcsIDB4ZmQsIDB4MzEsIDB4MGUsIDB4ZmYsIDB4YWYsIDB4OTksIDB4YmYsIDB4NDIsIDB4OGIsIDB4YjEsCisJMHg2NywgMHhkNiwgMHg1OCwgMHgzYiwgMHhjNiwgMHhjNCwgMHhhOSwgMHg5NiwgMHhiNywgMHg2MSwgMHhkOCwgMHg0ZSwKKwkweGY1LCAweDFkLCAweGI1LCAweGFiLCAweGUwLCAweDAzLCAweDM3LCAweGEwLCAweDRkLCAweGFlLCAweDYzLCAweGRiLAorCTB4YmYsIDB4MTcsIDB4ZTQsIDB4ZmQsIDB4YjMsIDB4NzMsIDB4YzAsIDB4NWYsIDB4ODUsIDB4YjQsIDB4MDYsIDB4ZTQsCisJMHgzMSwgMHg2NiwgMHhmMywgMHg4NSwgMHgxNiwgMHhjNiwgMHg2NSwgMHhiMywgMHg3ZSwgMHhhMywgMHg0ZCwgMHg1YiwKKwkweGU1LCAweDhjLCAweDhjLCAweGI2LCAweGMzLCAweDM3LCAweGU3LCAweDM5LCAweDc2LCAweGU2LCAweGY3LCAweDczLAorCTB4ZWUsIDB4ODQsIDB4N2YsIDB4YWIsIDB4NjksIDB4MTIsIDB4ZjIsIDB4NjcsIDB4OGYsIDB4NWMsIDB4NmIsIDB4ZTMsCisJMHhjZSwgMHhkNCwgMHhjMywgMHhiZiwgMHhiOCwgMHg2MCwgMHhiZCwgMHhmNiwgMHgxMCwgMHhmNCwgMHhkOCwgMHhhZCwKKwkweDkwLCAweDQ3LCAweGQ0LCAweGMzLCAweDg3LCAweGU0LCAweDE3LCAweDJjLCAweDNkLCAweDJmLCAweGQ0LCAweGMzLAorCTB4MTcsIDB4ODUsIDB4YjEsIDB4ZTEsIDB4MmUsIDB4ZTQsIDB4ZTUsIDB4ODMsIDB4MjgsIDB4ZTgsIDB4ZTEsIDB4NzAsCisJMHg5NSwgMHhhZiwgMHg0NiwgMHhiZiwgMHhhZiwgMHgyZSwgMHg2ZCwgMHhkNiwgMHhjMCwgMHgxNiwgMHhmYSwgMHg3ZCwKKwkweDkwLCAweDAzLCAweGIxLCAweGQwLCAweGNmLCAweGFiLCAweDlkLCAweDViLCAweGEzLCAweGRkLCAweDY5LCAweGViLAorCTB4OGUsIDB4YTQsIDB4NWUsIDB4MjIsIDB4OGUsIDB4MTIsIDB4ODcsIDB4ZTQsIDB4ZjYsIDB4ZjUsIDB4YmMsIDB4MjYsCisJMHhjZiwgMHhmNSwgMHhiZiwgMHhhNSwgMHg3MSwgMHgyNiwgMHg4YSwgMHhiNCwgMHhiNywgMHg0NiwgMHhjMywgMHg2OCwKKwkweGU1LCAweDdjLCAweDIyLCAweGRjLCAweGJmLCAweDUxLCAweGIwLCAweDc1LCAweGY3LCAweGQ4LCAweGY1LCAweGY4LAorCTB4ODIsIDB4N2MsIDB4OWIsIDB4NzEsIDB4Y2UsIDB4NDQsIDB4NWYsIDB4NjQsIDB4MjUsIDB4Y2YsIDB4NjQsIDB4YTMsCisJMHhlZSwgMHhlZCwgMHhkYSwgMHg2ZiwgMHhjZiwgMHg0OCwgMHhkOCwgMHgxNiwgMHhiZiwgMHg2YiwgMHhhYSwgMHhkYSwKKwkweGE2LCAweDFkLCAweGM1LCAweGY3LCAweGUyLCAweGZiLCAweDFiLCAweDllLCAweGQ3LCAweDZiLCAweDhiLCAweGU2LAorCTB4NmUsIDB4OWEsIDB4OTAsIDB4NGYsIDB4YzgsIDB4M2IsIDB4MDksIDB4N2QsIDB4OGUsIDB4YzksIDB4M2YsIDB4NDYsCisJMHhiYiwgMHg4NywgMHhlYiwgMHhhZSwgMHhkZSwgMHhmNCwgMHg3MCwgMHhlYSwgMHgyMywgMHhmYSwgMHgwZSwgMHhkNSwKKwkweDcxLCAweDExLCAweGE3LCAweDkwLCAweGRhLCAweGFiLCAweGY3LCAweDlkLCAweDE0LCAweDc0LCAweDdjLCAweDM5LAorCTB4OGYsIDB4ZjcsIDB4YmMsIDB4OGYsIDB4ZGEsIDB4NzYsIDB4OGMsIDB4N2YsIDB4MGIsIDB4ODgsIDB4NjksIDB4MWYsCisJMHgwNCwgMHg2YywgMHhkNCwgMHgyMSwgMHg5NCwgMHhiZCwgMHgzMSwgMHg2OSwgMHgzYiwgMHhmYSwgMHg3ZSwgMHhjZCwKKwkweDBiLCAweDZiLCAweGUxLCAweDBiLCAweGY0LCAweDFlLCAweDg1LCAweGFlLCAweDNlLCAweDFhLCAweDk3LCAweGZlLAorCTB4YTMsIDB4NWEsIDB4MzcsIDB4NjYsIDB4OTYsIDB4YzYsIDB4MGEsIDB4YjYsIDB4NzgsIDB4MmUsIDB4ZmQsIDB4ODksCisJMHg5OCwgMHgyNywgMHhkNywgMHgxYywgMHg4ZCwgMHhjOCwgMHhlMSwgMHhkOCwgMHgxNiwgMHhhZiwgMHhjMywgMHhiOSwKKwkweGQxLCAweGVhLCAweDQyLCAweDQzLCAweDdmLCAweGEwLCAweDE1LCAweGQ0LCAweDM3LCAweGViLCAweDkwLCAweGJkLAorCTB4ZjMsIDB4YjEsIDB4NmIsIDB4ZDQsIDB4N2YsIDB4NDksIDB4NDYsIDB4YzgsIDB4NGIsIDB4OTUsIDB4ODgsIDB4OGMsCisJMHgwZiwgMHhiNiwgMHgwMiwgMHg5ZSwgMHhiNywgMHhhZSwgMHgwNywgMHgwZSwgMHg0MCwgMHg1MywgMHg5OCwgMHgxZiwKKwkweGZkLCAweGY3LCAweDNjLCAweGRjLCAweDM4LCAweGU1LCAweDU3LCAweDFiLCAweGZhLCAweGVmLCAweDNiLCAweDRhLAorCTB4MWQsIDB4ZTYsIDB4NmIsIDB4YmUsIDB4NDYsIDB4YmYsIDB4NWUsIDB4OGQsIDB4ZjYsIDB4M2QsIDB4YzgsIDB4OGIsCisJMHg2ZiwgMHgxMSwgMHhmZiwgMHgwMSwgMHhjOCwgMHhiNSwgMHhhMywgMHg1MSwgMHhlOSwgMHgzOCwgMHhkYSwgMHgyMCwKKwkweDliLCAweDhlLCAweGQyLCAweGY3LCAweGE4LCAweGY2LCAweDQ1LCAweDY5LCAweDhiLCAweDVlLCAweGMyLCAweGI4LAorCTB4NmUsIDB4MzQsIDB4ZjcsIDB4MGQsIDB4NGUsIDB4NDUsIDB4NjUsIDB4MWYsIDB4ZjksIDB4MTUsIDB4NjUsIDB4NzMsCisJMHhiMCwgMHg5MywgMHhiMywgMHg0NywgMHgzZCwgMHhiZCwgMHgxNiwgMHg5YSwgMHhjNSwgMHgzOCwgMHhmOSwgMHgzNywKKwkweDJjLCAweGZhLCAweDhlLCAweDFhLCAweDM5LCAweDUzLCAweGEwLCAweDZmLCAweDMyLCAweGQwLCAweDAyLCAweGJjLAorCTB4M2UsIDB4NjAsIDB4ZjksIDB4ZTUsIDB4M2QsIDB4ZWIsIDB4MmQsIDB4NWYsIDB4ZmUsIDB4OWMsIDB4ZmMsIDB4OTYsCisJMHg1YiwgMHg2ZiwgMHhlNCwgMHhlNSwgMHg4NywgMHhkNiwgMHg3MywgMHgyZiwgMHhkMiwgMHg1YSwgMHg5ZiwgMHhlZiwKKwkweDNhLCAweDZkLCAweDQzLCAweDE4LCAweGI5LCAweGY5LCAweDdhLCAweGZjLCAweDI3LCAweGMwLCAweDUxLCAweGI4LAorCTB4ZmUsIDB4NDQsIDB4M2UsIDB4ZTQsIDB4MWEsIDB4YjIsIDB4M2UsIDB4YjMsIDB4OTIsIDB4OWEsIDB4ZDEsIDB4N2YsCisJMHg1MywgMHg4OSwgMHg2YiwgMHg2MSwgMHhmMywgMHhmNywgMHg1OSwgMHg2ZCwgMHhhZiwgMHgzMCwgMHgzNiwgMHhmZSwKKwkweDRjLCAweGY4LCAweDM3LCAweDljLCAweGFhLCAweGY2LCAweDE5LCAweDU2LCAweGFmLCAweDc1LCAweDMxLCAweGJlLAorCTB4MzQsIDB4YjcsIDB4MTcsIDB4MjgsIDB4MTgsIDB4ZDUsIDB4NzcsIDB4YzIsIDB4YzUsIDB4OWMsIDB4OGIsIDB4YzUsCisJMHg1YSwgMHhlNywgMHg5YiwgMHg2MywgMHgxMiwgMHhiOCwgMHg3ZSwgMHhkYywgMHhmOSwgMHg5NiwgMHhjZiwgMHhiNSwKKwkweDcxLCAweGNmLCAweDc5LCAweGI5LCAweGU4LCAweDgzLCAweGY3LCAweGZlLCAweDAyLCAweGUzLCAweDY4LCAweDc1LAorCTB4NWUsIDB4YzEsIDB4OWMsIDB4MWUsIDB4MmMsIDB4NjUsIDB4OTIsIDB4OWUsIDB4OGQsIDB4ODMsIDB4M2YsIDB4NWIsCisJMHg2YywgMHg3NSwgMHg5ZSwgMHg5YiwgMHg4ZiwgMHgyMSwgMHhmNSwgMHg4NCwgMHg3NCwgMHg3MSwgMHg4OCwgMHg3OSwKKwkweDY1LCAweGU0LCAweDk1LCAweDE5LCAweGViLCAweGFkLCAweDc3LCAweDI2LCAweGM3LCAweGVjLCAweDdlLCAweDEyLAorCTB4YTMsIDB4OGIsIDB4ZTYsIDB4ZDYsIDB4NWYsIDB4MDYsIDB4ZjQsIDB4ZmEsIDB4ODQsIDB4ZWIsIDB4NGMsIDB4NGUsCisJMHg0ZCwgMHhhZiwgMHgzNywgMHhmYiwgMHg4YSwgMHg2YSwgMHg5MSwgMHg2NywgMHhmNiwgMHg1OCwgMHg0ZSwgMHg0YywKKwkweGQ1LCAweGEyLCAweDRjLCAweGJkLCAweDMzLCAweGExLCAweDYzLCAweDVlLCAweGRhLCAweGY2LCAweDcwLCAweGM2LAorCTB4YTcsIDB4ZWEsIDB4OWQsIDB4MjksIDB4YmQsIDB4ZDYsIDB4MWMsIDB4NzUsIDB4NGUsIDB4OGUsIDB4YjEsIDB4ZWQsCisJMHgyOCwgMHhjYSwgMHg4OCwgMHg3MywgMHgwYSwgMHhlZCwgMHg0ZCwgMHg4ZCwgMHhiNSwgMHhjNywgMHhmNywgMHg0OSwKKwkweDNiLCAweDZjLCAweDAxLCAweGZlLCAweDhkLCAweDM0LCAweGRlLCAweDE3LCAweGUwLCAweDNhLCAweDUzLCAweDczLAorCTB4ZWQsIDB4MmEsIDB4YjQsIDB4YzMsIDB4YjIsIDB4YTQsIDB4NDEsIDB4ZjYsIDB4ZWIsIDB4YTIsIDB4ZmQsIDB4YTUsCisJMHg2YiwgMHg1MiwgMHg0YiwgMHg3MSwgMHgzMiwgMHgwNiwgMHg5YywgMHgxYywgMHhiNCwgMHgzOCwgMHgzOSwgMHg2MSwKKwkweDcxLCAweDMyLCAweDVhLCAweDg1LCAweDkzLCAweDg3LCAweDE3LCAweGUxLCAweGU0LCAweDA0LCAweDcwLCAweGYyLAorCTB4ZjAsIDB4MTUsIDB4NzAsIDB4ODIsIDB4YmMsIDB4ZjIsIDB4YzMsIDB4MTYsIDB4MjcsIDB4ZjcsIDB4MmQsIDB4YzIsCisJMHg0OSwgMHg3ZSwgMHgyZSwgMHgxNiwgMHg2ZiwgMHg3MCwgMHgzMiwgMHgwMiwgMHg5YywgMHhkNCwgMHhiNCwgMHgxYSwKKwkweGQ4LCAweDBmLCAweDVhLCAweDljLCAweGUwLCAweDNkLCAweDc1LCAweDEwLCAweDY1LCAweGVlLCAweGFiLCAweGMyLAorCTB4YzksIDB4NDEsIDB4ZTAsIDB4ZTQsIDB4M2UsIDB4OGIsIDB4OTMsIDB4YzMsIDB4MTYsIDB4MjcsIDB4ODcsIDB4NTEsCisJMHgyNiwgMHgwZiwgMHg5YywgMHgxNCwgMHg5NiwgMHhjMSwgMHhjOSwgMHgwOCwgMHg3MCwgMHgxMiwgMHhiNiwgMHg1YiwKKwkweDQwLCAweDNiLCAweDg3LCAweGFiLCAweDcwLCAweDMyLCAweGIyLCAweDBjLCAweDRlLCAweGI4LCAweGU2LCAweDFhLAorCTB4ZWUsIDB4ZTEsIDB4YmUsIDB4ZmMsIDB4MDYsIDB4N2IsIDB4YjgsIDB4NTMsIDB4OWYsIDB4N2QsIDB4ZTMsIDB4M2QsCisJMHhkYywgMHgyYywgMHg3MywgMHhiOSwgMHhlYSwgMHhjYywgMHhmYiwgMHhiMywgMHg3NiwgMHg0ZiwgMHg5YSwgMHhkOSwKKwkweGZiLCAweDM3LCAweDdmLCAweDBmLCAweDVlLCAweDNiLCAweGY4LCAweGJjLCAweDkwLCAweGY3LCAweGM0LCAweGVjLAorCTB4MjEsIDB4NzUsIDB4YjcsIDB4NGQsIDB4ODEsIDB4ZDcsIDB4OGUsIDB4Y2EsIDB4ODEsIDB4ZTMsIDB4YjUsIDB4ODcsCisJMHg3MywgMHgzNiwgMHhjZCwgMHhkZiwgMHhkNiwgMHg5ZSwgMHg1NywgMHg4YSwgMHg3OSwgMHhlMSwgMHhkZSwgMHg4MywKKwkweDE3LCAweGNkLCAweDVkLCAweDUwLCAweDMxLCAweDllLCAweGM3LCAweGE4LCAweDVlLCAweDdiLCAweDdlLCAweGQxLAorCTB4ZGUsIDB4NTUsIDB4ZTQsIDB4ZGQsIDB4OWIsIDB4ZjUsIDB4YTcsIDB4MTMsIDB4ZGMsIDB4NTcsIDB4NTUsIDB4ZDAsCisJMHhmMCwgMHg3MiwgMHgyZCwgMHhhZCwgMHg0NywgMHhlZiwgMHhhNSwgMHhjYSwgMHgxNiwgMHg2OSwgMHg2NywgMHgyNywKKwkweGI4LCAweDI3LCAweDBkLCAweGY2LCAweDMxLCAweGY3LCAweGVkLCAweDlhLCAweDdkLCAweGJhLCAweGJkLCAweDBiLAorCTB4ZjYsIDB4ZTksIDB4NTYsIDB4OWYsIDB4ZWYsIDB4MjYsIDB4ZGYsIDB4Y2QsIDB4ZDMsIDB4Y2QsIDB4YzEsIDB4YjksCisJMHhiYiwgMHg1NywgMHg4ZiwgMHgzYiwgMHhjZiwgMHhlOCwgMHhmOCwgMHg3MCwgMHgzZCwgMHhlNiwgMHgyNywgMHgwOCwKKwkweDRlLCAweGE3LCAweDRjLCAweDVjLCAweDc2LCAweDQ2LCAweGM3LCAweDY1LCAweDA1LCAweDFlLCAweGY4LCAweGIwLAorCTB4OGQsIDB4Y2QsIDB4NzYsIDB4ZjQsIDB4NWMsIDB4OWUsIDB4OGIsIDB4Y2IsIDB4MmUsIDB4ZDgsIDB4YTMsIDB4YTMsCisJMHhlZiwgMHhmZiwgMHhjOCwgMHg4ZSwgMHg1ZSwgMHhkMiwgMHg3YiwgMHg3MSwgMHhmYSwgMHg1MiwgMHg4ZSwgMHgxNCwKKwkweDIwLCAweDIzLCAweGY2LCAweDhjLCAweGJmLCAweDJhLCAweGMzLCAweDBmLCAweGYyLCAweDliLCAweDNhLCAweDJkLAorCTB4MDIsIDB4YmQsIDB4NDUsIDB4YjksIDB4OWQsIDB4OTcsIDB4NmMsIDB4MGYsIDB4ZDMsIDB4NGMsIDB4OWQsIDB4M2UsCisJMHhlZCwgMHgyMywgMHgxZiwgMHg3NywgMHg3YSwgMHhlNywgMHhmYSwgMHgyNywgMHg3ZSwgMHhjMywgMHgzNSwgMHg3MCwKKwkweGZlLCAweGE2LCAweDlkLCAweDkzLCAweDcxLCAweGIyLCAweDE1LCAweGU2LCAweDg3LCAweDZiLCAweGUxLCAweDc3LAorCTB4ZGIsIDB4ZmIsIDB4MDgsIDB4OTksIDB4NWYsIDB4N2QsIDB4ZmYsIDB4YjUsIDB4ZTEsIDB4ZDMsIDB4YWMsIDB4ZmUsCisJMHgzYiwgMHgyMiwgMHgyMywgMHg0ZSwgMHgxZiwgMHhlYSwgMHg0YywgMHg3YiwgMHgwZCwgMHgwMywgMHgyYSwgMHg3ZCwKKwkweGQzLCAweDAwLCAweGNmLCAweGNhLCAweDRkLCAweDJjLCAweGY5LCAweGZiLCAweDAxLCAweGYzLCAweGJhLCAweGIwLAorCTB4YTAsIDB4ZTcsIDB4OTQsIDB4ZmIsIDB4YjAsIDB4YTYsIDB4NDEsIDB4OGIsIDB4OWEsIDB4YjYsIDB4MzQsIDB4ZmQsCisJMHgxZiwgMHg5OCwgMHhkMywgMHg5MSwgMHhkNCwgMHhhZCwgMHhkNCwgMHg5MywgMHhhMSwgMHg4ZSwgMHg0YywgMHhjNiwKKwkweGZiLCAweDc4LCAweDdmLCAweDg0LCAweGE2LCAweDcxLCAweDdiLCAweDk3LCAweGM0LCAweGQ0LCAweDM5LCAweGFkLAorCTB4ZGYsIDB4NDcsIDB4NTIsIDB4YmMsIDB4NWYsIDB4NjYsIDB4OTksIDB4YjIsIDB4YTMsIDB4NTUsIDB4NjUsIDB4ZjUsCisJMHhiOCwgMHgzZCwgMHhmOSwgMHg0MywgMHhjYywgMHhjZCwgMHgxNywgMHg2MSwgMHg2ZiwgMHhmNiwgMHg4ZSwgMHhiZCwKKwkweDBhLCAweDlmLCAweDMxLCAweDJlLCAweDVmLCAweDJhLCAweGJkLCAweDA0LCAweDdhLCAweGNkLCAweGFmLCAweGI1LAorCTB4NzcsIDB4ZTEsIDB4NjUsIDB4MDEsIDB4MzcsIDB4Y2YsIDB4MzgsIDB4ZWIsIDB4ZmQsIDB4YzMsIDB4OTEsIDB4M2YsCisJMHgwMiwgMHg1ZCwgMHhmYywgMHhjMSwgMHg0YiwgMHhlYywgMHgwMywgMHhiMCwgMHg0NCwgMHg2MCwgMHhjZiwgMHhjMywKKwkweDM2LCAweDE4LCAweDdmLCAweDQ5LCAweGVmLCAweDk1LCAweGJiLCAweGJlLCAweGZjLCAweDkyLCAweDhlLCAweDUzLAorCTB4ZjQsIDB4OTcsIDB4NWIsIDB4NjUsIDB4N2IsIDB4YjksIDB4NDEsIDB4NzYsIDB4NDAsIDB4MmYsIDB4ZWMsIDB4MjgsCisJMHhmYiwgMHg3OCwgMHhhMiwgMHg3MiwgMHg2MywgMHhkOSwgMHhjYywgMHhkMywgMHg0NywgMHhjYSwgMHg5YywgMHhlZiwKKwkweDZkLCAweDMyLCAweDcxLCAweGJjLCAweDlhLCAweDY2LCAweGE3LCAweGVkLCAweGRlLCAweDMxLCAweGQyLCAweDBmLAorCTB4OWUsIDB4NTIsIDB4MzIsIDB4M2YsIDB4YWQsIDB4YzcsIDB4Y2UsIDB4NWQsIDB4YWMsIDB4YzksIDB4YzMsIDB4YjMsCisJMHhjMiwgMHhiZCwgMHhmOCwgMHhmYywgMHgxYiwgMHg3NCwgMHhkZiwgMHg2OCwgMHhlNSwgMHgxOSwgMHg3NywgMHhkZSwKKwkweDhmLCAweGQ4LCAweDVmLCAweDA5LCAweGY3LCAweDg2LCAweGJmLCAweGZlLCAweDE5LCAweDEwLCAweGZkLCAweDc3LAorCTB4NWQsIDB4ZjQsIDB4ZGUsIDB4NzAsIDB4NGQsIDB4N2IsIDB4ZDIsIDB4NzYsIDB4MjYsIDB4YTYsIDB4NzUsIDB4ODQsCisJMHhhMSwgMHhmMSwgMHhmOSwgMHhiZiwgMHhlNywgMHgyMiwgMHhmMiwgMHg3ZiwgMHgwMSwgMHg5NSwgMHhmNiwgMHgyZCwKKwkweDU4LCAweGQwLCAweDczLCAweDAwLCAweDAwLCAweDAwIH07CitzdGF0aWMgdTMyIGJueDJfQ1BfYjA5RndEYXRhWygweDUwLzQpICsgMV0gPSB7CisJMHgwMDAxMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMSwgMHgwMDAxMGZkMCwgMHgwMDAwMGZkMCwKKwkweDAwMDAxNDMwLCAweDAwMDAwMDdmLCAweDAwMDMwNDAwLCAweDAwMDAxMDAwLCAweDAwMDAwMDMwLCAweDAwMDAwMDIwLAorCTB4MDAwNTAyMDAsIDB4MDAwMDEwMDAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMTAsIDB4MDAwMTA0MDAsIDB4MDAwMDA0MDAsCisJMHgwMDAwMTAzMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAwMCB9Oworc3RhdGljIHUzMiBibngyX0NQX2IwOUZ3Um9kYXRhWygweDExOC80KSArIDFdID0geworCTB4MDgwMDA1ZDgsIDB4MDgwMDA3ZjgsIDB4MDgwMDA3M2MsIDB4MDgwMDA3NjQsIDB4MDgwMDA3OGMsIDB4MDgwMDA3YjQsCisJMHgwODAwMDYxMCwgMHgwODAwMDVmYywgMHgwODAwMDgyMCwgMHgwODAwMDgyMCwgMHgwODAwMDYyYywgMHgwODAwMDY0OCwKKwkweDA4MDAwNjQ4LCAweDA4MDAwODIwLCAweDA4MDAwNjYwLCAweDA4MDAwNjc0LCAweDA4MDAwODIwLCAweDA4MDAwNjg4LAorCTB4MDgwMDA4MjAsIDB4MDgwMDA4MjAsIDB4MDgwMDA2OWMsIDB4MDgwMDA4MjAsIDB4MDgwMDA4MjAsIDB4MDgwMDA4MjAsCisJMHgwODAwMDgyMCwgMHgwODAwMDgyMCwgMHgwODAwMDgyMCwgMHgwODAwMDgyMCwgMHgwODAwMDgyMCwgMHgwODAwMDgyMCwKKwkweDA4MDAwODIwLCAweDA4MDAwNmIwLCAweDA4MDAwODIwLCAweDA4MDAwNmM0LCAweDA4MDAwNmQ4LCAweDA4MDAwNmVjLAorCTB4MDgwMDA4MjAsIDB4MDgwMDA3MDAsIDB4MDgwMDA3MTQsIDB4MDgwMDA3MjgsIDB4MDgwMDM3NDAsIDB4MDgwMDM3NTgsCisJMHgwODAwMzc2OCwgMHgwODAwMzc3OCwgMHgwODAwMzc5MCwgMHgwODAwMzdhOCwgMHgwODAwMzdiOCwgMHgwODAwMzdjOCwKKwkweDA4MDAzN2U4LCAweDA4MDAzN2Y4LCAweDA4MDAzODA4LCAweDA4MDAzODk4LCAweDA4MDAzN2Q4LCAweDA4MDAzODE4LAorCTB4MDgwMDM4MjgsIDB4MDgwMDM4NDAsIDB4MDgwMDM4NjAsIDB4MDgwMDM4OTgsIDB4MDgwMDM4NzgsIDB4MDgwMDM4NzgsCisJMHgwODAwNTVmMCwgMHgwODAwNTVmMCwgMHgwODAwNTVmMCwgMHgwODAwNTVmMCwgMHgwODAwNTVmMCwgMHgwODAwNTYxOCwKKwkweDA4MDA1NjE4LCAweDA4MDA1NjQwLCAweDA4MDA1NjkwLCAweDA4MDA1NjYwLCAweDAwMDAwMDAwIH07CitzdGF0aWMgdTMyIGJueDJfQ1BfYjA5RndCc3NbKDB4ODcwLzQpICsgMV0gPSB7IDB4MCB9Oworc3RhdGljIHUzMiBibngyX0NQX2IwOUZ3U2Jzc1soMHhlOS80KSArIDFdID0geyAweDAgfTsKKworc3RhdGljIHN0cnVjdCBmd19pbmZvIGJueDJfY3BfZndfMDkgPSB7CisJLnZlcl9tYWpvcgkJCT0gMHgxLAorCS52ZXJfbWlub3IJCQk9IDB4MCwKKwkudmVyX2ZpeAkJCT0gMHgwLAorCisJLnN0YXJ0X2FkZHIJCQk9IDB4MDgwMDAwNmMsCisKKwkudGV4dF9hZGRyCQkJPSAweDA4MDAwMDAwLAorCS50ZXh0X2xlbgkJCT0gMHg3M2NjLAorCS50ZXh0X2luZGV4CQkJPSAweDAsCisJLmd6X3RleHQJCQk9IGJueDJfQ1BfYjA5RndUZXh0LAorCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfQ1BfYjA5RndUZXh0KSwKKworCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDc1MDAsCisJLmRhdGFfbGVuCQkJPSAweDUwLAorCS5kYXRhX2luZGV4CQkJPSAweDAsCisJLmRhdGEJCQkJPSBibngyX0NQX2IwOUZ3RGF0YSwKKworCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDc1NTQsCisJLnNic3NfbGVuCQkJPSAweGU5LAorCS5zYnNzX2luZGV4CQkJPSAweDAsCisJLnNic3MJCQkJPSBibngyX0NQX2IwOUZ3U2JzcywKKworCS5ic3NfYWRkcgkJCT0gMHgwODAwNzY0MCwKKwkuYnNzX2xlbgkJCT0gMHg4NzAsCisJLmJzc19pbmRleAkJCT0gMHgwLAorCS5ic3MJCQkJPSBibngyX0NQX2IwOUZ3QnNzLAorCisJLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA3M2QwLAorCS5yb2RhdGFfbGVuCQkJPSAweDExOCwKKwkucm9kYXRhX2luZGV4CQkJPSAweDAsCisJLnJvZGF0YQkJCQk9IGJueDJfQ1BfYjA5RndSb2RhdGEsCit9OworCitzdGF0aWMgdTggYm54Ml9SWFBfYjA5RndUZXh0W10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHgxOSwgMHhmZCwgMHgyZiwgMHg0NSwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGVjLCAweDVjLCAweDZiLCAweDZjLAorCTB4MWMsIDB4ZDcsIDB4NzUsIDB4M2UsIDB4ZjMsIDB4MjAsIDB4YjUsIDB4YTIsIDB4ZjgsIDB4MTgsIDB4MmUsIDB4NTcsCisJMHhjYywgMHg0YSwgMHg2NiwgMHhlYywgMHg1ZCwgMHg3MSwgMHgyNCwgMHhiMiwgMHgxNiwgMHg2YiwgMHg4YywgMHhkOCwKKwkweGFkLCAweDRkLCAweDA0LCAweDZiLCAweDdiLCAweDMzLCAweGJiLCAweDkyLCAweDk4LCAweDU0LCAweDg1LCAweDI5LAorCTB4ODcsIDB4NzUsIDB4MGMsIDB4YzMsIDB4NzUsIDB4ZDksIDB4YTUsIDB4MWEsIDB4YmIsIDB4YWUsIDB4NTEsIDB4YzgsCisJMHg4ZiwgMHhjNCwgMHgwNiwgMHg2YSwgMHhkNiwgMHg5YiwgMHgyNSwgMHhkZCwgMHhhOCwgMHhlOSwgMHg4MiwgMHg0MywKKwkweDRiLCAweGFhLCAweGU5LCAweDAyLCAweDY5LCAweGJiLCAweDIwLCAweGE5LCAweGM3LCAweDhmLCAweDg1LCAweDU2LAorCTB4NzYsIDB4NTIsIDB4YzcsIDB4ZjksIDB4ZTEsIDB4NDgsIDB4NTAsIDB4OTUsIDB4MjAsIDB4MjgsIDB4MGMsIDB4NDMsCisJMHg0OCwgMHg4ZCwgMHhkNiwgMHgzZiwgMHhkYSwgMHg0MCwgMHg5NSwgMHg5ZiwgMHg2OCwgMHg5MiwgMHg0MiwgMHg0MSwKKwkweDBiLCAweGM3LCAweDY4LCAweDZjLCAweDRmLCAweGJmLCAweGVmLCAweGNlLCAweDBjLCAweGI5LCAweGE0LCAweDVmLAorCTB4NDAsIDB4N2YsIDB4ZjQsIDB4NGYsIDB4ZTcsIDB4MDIsIDB4OGIsIDB4YjksIDB4ZjcsIDB4Y2UsIDB4M2QsIDB4ZTcsCisJMHg5ZSwgMHg3YiwgMHhkZSwgMHhlNywgMHgwZSwgMHhhNSwgMHhkZiwgMHhlZiwgMHg5NCwgMHgwZSwgMHgwOSwgMHg1YiwKKwkweDE3LCAweDdlLCAweDk5LCAweGMzLCAweDhmLCAweDNkLCAweDc0LCAweGMzLCAweGQ4LCAweDBkLCAweGEzLCAweDIyLAorCTB4N2IsIDB4ZjYsIDB4MTgsIDB4NWIsIDB4MTIsIDB4N2EsIDB4MzQsIDB4MWYsIDB4YjcsIDB4YjgsIDB4YzUsIDB4MmQsCisJMHg2ZSwgMHg3MSwgMHg4YiwgMHg1YiwgMHhkYywgMHhlMiwgMHgxNiwgMHhiNywgMHhiOCwgMHhjNSwgMHgyZCwgMHg2ZSwKKwkweDcxLCAweDhiLCAweDViLCAweGRjLCAweGUyLCAweDE2LCAweGI3LCAweGI4LCAweGM1LCAweDJkLCAweDZlLCAweDcxLAorCTB4OGIsIDB4NWIsIDB4ZGMsIDB4ZTIsIDB4MTYsIDB4YjcsIDB4YjgsIDB4YzUsIDB4MmQsIDB4NmUsIDB4NzEsIDB4OGIsCisJMHg1YiwgMHhkYywgMHhlMiwgMHgxNiwgMHhiNywgMHhiOCwgMHhjNSwgMHgyZCwgMHg2ZSwgMHg3MSwgMHg4YiwgMHg1YiwKKwkweGRjLCAweGUyLCAweDE2LCAweGI3LCAweGI4LCAweGM1LCAweDJkLCAweDZlLCAweDcxLCAweDhiLCAweDViLCAweGRjLAorCTB4ZTIsIDB4ZjYsIDB4ZmYsIDB4YmQsIDB4MTksIDB4MjIsIDB4MTYsIDB4OWYsIDB4NWQsIDB4ZTEsIDB4NGYsIDB4MTIsCisJMHg3YSwgMHhmZSwgMHhmMiwgMHgxZiwgMHhiYSwgMHhiNiwgMHgyNCwgMHg4YywgMHhmYywgMHhjZiwgMHg2NiwgMHhhNiwKKwkweDZkLCAweDkxLCAweDQyLCAweDYzLCAweDc3LCAweGE2LCAweDI4LCAweGVmLCAweGZiLCAweDk1LCAweDk0LCAweDI5LAorCTB4OWMsIDB4ZmYsIDB4NmMsIDB4ZmUsIDB4YmQsIDB4YmYsIDB4N2QsIDB4ZjEsIDB4YTYsIDB4ZWMsIDB4ZDUsIDB4YmEsCisJMHgyMSwgMHgwOSwgMHgyYiwgMHgzZiwgMHhiNywgMHhjNywgMHhkYSwgMHgyNSwgMHg4OSwgMHgwMSwgMHhjMCwgMHg3YywKKwkweDZiLCAweGU4LCAweGM3LCAweGRkLCAweGQyLCAweDJkLCAweDZiLCAweDc4LCAweGVjLCAweDg0LCAweDVjLCAweDM2LAorCTB4NWUsIDB4ZDAsIDB4ZGMsIDB4YTYsIDB4ZWYsIDB4OWYsIDB4NzAsIDB4N2MsIDB4ZmYsIDB4ODcsIDB4ZjgsIDB4YmQsCisJMHhlNSwgMHg2MCwgMHhlYywgMHg3ZCwgMHhlMCwgMHgxNywgMHg0YywgMHg0MywgMHg3NCwgMHhmYiwgMHgyZiwgMHgzNCwKKwkweDc3LCAweGI5LCAweDQzLCAweGFhLCAweDhiLCAweGE2LCAweGNjLCAweDdhLCAweDI5LCAweDM5LCAweGUyLCAweDU1LAorCTB4YjQsIDB4NTIsIDB4YjMsIDB4YTYsIDB4ZWQsIDB4M2QsIDB4MzUsIDB4YWYsIDB4ZWQsIDB4M2IsIDB4NzUsIDB4NDQsCisJMHhkYiwgMHg3ZiwgMHg2YSwgMHg0MSwgMHg3MywgMHg0ZiwgMHg0OSwgMHg0NSwgMHhkZiwgMHhkMywgMHgyOSwgMHgwNSwKKwkweGViLCAweGI0LCAweDU2LCAweDZjLCAweGY2LCAweDZiLCAweGVlLCAweGUyLCAweDdiLCAweGJlLCAweGViLCAweDY0LAorCTB4YWQsIDB4YmIsIDB4YzQsIDB4MmMsIDB4ODAsIDB4MTYsIDB4NzEsIDB4NmIsIDB4M2UsIDB4YzYsIDB4YTYsIDB4MTQsCisJMHg1MiwgMHhiZSwgMHhhZiwgMHhlNywgMHhmZCwgMHgyNywgMHhkYywgMHg5YywgMHg2ZCwgMHhlOSwgMHg1YSwgMHg0YSwKKwkweGFhLCAweGNkLCAweDdlLCAweGUwLCAweGVkLCAweGQ0LCAweDhhLCAweDhiLCAweGE2LCAweDU2LCAweGYyLCAweGZjLAorCTB4NzMsIDB4YWUsIDB4MjMsIDB4MDMsIDB4ODYsIDB4ZjgsIDB4ZmUsIDB4OWMsIDB4YjMsIDB4MzMsIDB4N2QsIDB4NDgsCisJMHg0ZSwgMHgwMiwgMHg2ZiwgMHgwMywgMHhmOCwgMHhjNCwgMHhkMiwgMHhmMywgMHhhNCwgMHg4ZiwgMHg3NCwgMHg5MiwKKwkweGU0LCAweDhhLCAweDU2LCAweDFjLCAweDhhLCAweGU4LCAweDkzLCAweDBjLCAweGU5LCAweDJmLCAweGFmLCAweGU4LAorCTB4YTAsIDB4NzMsIDB4OGIsIDB4OTQsIDB4ZWIsIDB4OTYsIDB4NGMsIDB4YWQsIDB4NmMsIDB4NWMsIDB4N2YsIDB4ZDksCisJMHg3ZiwgMHg3MSwgMHgyOCwgMHgyNSwgMHhjZiwgMHgzNiwgMHhiMywgMHg0NywgMHgyYSwgMHg5MiwgMHg5MCwgMHgzOSwKKwkweDJmLCAweDIzLCAweDdhLCAweDVlLCAweDBhLCAweDZlLCAweDZlLCAweDQwLCAweGNlLCAweDM1LCAweGQzLCAweGYyLAorCTB4NWMsIDB4ZDMsIDB4NGUsIDB4NTcsIDB4NjUsIDB4OTMsIDB4OTQsIDB4NTMsIDB4OTYsIDB4OWMsIDB4NmQsIDB4YTYsCisJMHg3MCwgMHg0NiwgMHhmZiwgMHg5YywgMHg2ZSwgMHhkYiwgMHg1NiwgMHgxNSwgMHg2YiwgMHhhYiwgMHhjZCwgMHg5NywKKwkweGY4LCAweGVmLCAweDVmLCAweGFjLCAweGU5LCAweDljLCAweDgyLCAweGE5LCAweDgwLCAweGVlLCAweDcwLCAweDJkLAorCTB4Y2YsIDB4YTEsIDB4ZDYsIDB4YWEsIDB4YjMsIDB4MDQsIDB4NmIsIDB4YTUsIDB4MzIsIDB4OWQsIDB4YzMsIDB4NWMsCisJMHg3MywgMHgzNCwgMHhlNCwgMHhlZiwgMHgxNiwgMHg5YywgMHg5NywgMHg0ZiwgMHg0YiwgMHhhYSwgMHg5ZSwgMHgwMSwKKwkweGRlLCAweGIwLCAweGZmLCAweGNmLCAweGMwLCAweDM3LCAweDgwLCAweGYzLCAweDVlLCAweGFiLCAweDdlLCAweGVlLAorCTB4YTIsIDB4YTQsIDB4NzQsIDB4ZDksIDB4OTksIDB4MmUsIDB4MGIsIDB4NzgsIDB4ZGIsIDB4ZWMsIDB4YzQsIDB4OTgsCisJMHhmNCwgMHhmOSwgMHhmZSwgMHg3ZSwgMHg0NywgMHhhYywgMHhhYSwgMHhkMywgMHgwMywgMHg5OCwgMHg4YywgMHg1NCwKKwkweDlkLCAweDZlLCAweGUwLCAweDY5LCAweDEzLCAweGNiLCAweGU2LCAweGI5LCAweGI4LCAweGQ3LCAweDY2LCAweGNjLAorCTB4ZmIsIDB4NWQsIDB4NDYsIDB4ZGUsIDB4ZjcsIDB4YTcsIDB4NzMsIDB4ZDIsIDB4MWQsIDB4Y2MsIDB4ZWQsIDB4NTYsCisJMHgzOCwgMHhhNiwgMHgyNiwgMHgzNCwgMHhhYywgMHhmYiwgMHgwNSwgMHg2OSwgMHg0ZSwgMHgyNCwgMHhmMywgMHhlYywKKwkweGYzLCAweDk5LCAweDEzLCAweDc3LCAweGZlLCAweGRhLCAweDkwLCAweDk2LCAweDM0LCAweDY4LCAweGI5LCAweDI2LAorCTB4ZWMsIDB4ODMsIDB4ZmYsIDB4MWUsIDB4ZjgsIDB4ZTAsIDB4N2MsIDB4MDYsIDB4NjMsIDB4ZWQsIDB4M2EsIDB4ZTAsCisJMHgxOSwgMHhhZSwgMHgwYSwgMHhmNywgMHhlOCwgMHg5MywgMHhhNSwgMHg5NCwgMHhlOCwgMHg1NywgMHg5YywgMHhkZSwKKwkweDcwLCAweDVkLCAweDM3LCAweDY4LCAweDhkLCAweGY0LCAweGEwLCAweDVmLCAweGU2LCAweDE2LCAweGM5LCAweGViLAorCTB4MWEsIDB4NjQsIDB4ODMsIDB4ZTcsIDB4OGQsIDB4MTUsIDB4YWQsIDB4ZDAsIDB4M2MsIDB4ODIsIDB4YmUsIDB4MjksCisJMHhkMywgMHhiNiwgMHg3ZiwgMHg2ZSwgMHhjZSwgMHg5OSwgMHhkNywgMHg4YSwgMHhhNywgMHg0ZSwgMHg2YSwgMHhhNSwKKwkweDUzLCAweDJmLCAweDY4LCAweDdiLCAweDliLCAweDJmLCAweDc0LCAweDQ5LCAweDQ3LCAweDE2LCAweGE3LCAweDRlLAorCTB4YzgsIDB4OTMsIDB4OWUsIDB4MjYsIDB4YTQsIDB4NzMsIDB4MDksIDB4YmMsIDB4MmIsIDB4NTgsIDB4MTUsIDB4MzEsCisJMHhlZCwgMHg2ZSwgMHg2ZCwgMHgxZiwgMHhmMCwgMHhiNCwgMHhkOSwgMHg3ZiwgMHhkMiwgMHgyOSwgMHhkZCwgMHg4NiwKKwkweDZjLCAweGIyLCAweGEzLCAweGI1LCAweDI5LCAweGY5LCAweDMzLCAweGQwLCAweDc0LCAweGMxLCAweDQ5LCAweDkxLAorCTB4NWYsIDB4M2QsIDB4MDEsIDB4NGMsIDB4NDQsIDB4MDcsIDB4ZjUsIDB4OGEsIDB4M2EsIDB4YTUsIDB4MTcsIDB4NGEsCisJMHhjNywgMHhmZiwgMHhiYywgMHhhZiwgMHgzYSwgMHhiMiwgMHg4NSwgMHg2YiwgMHhhMCwgMHhmZiwgMHhkNiwgMHhmZCwKKwkweGQzLCAweGI2LCAweGRiLCAweDZiLCAweDRhLCAweGM1LCAweGQyLCAweDI1LCAweDZiLCAweDE1LCAweGU1LCAweDNhLAorCTB4OTksIDB4NzMsIDB4NDQsIDB4OGEsIDB4MzUsIDB4ZWMsIDB4NjksIDB4OWIsIDB4ZTAsIDB4OGQsIDB4MGQsIDB4ZGUsCisJMHhlYywgMHgzYywgMHgzMiwgMHhhOCwgMHhmZiwgMHg5NiwgMHg2NCwgMHhmYSwgMHgyYiwgMHg5YSwgMHgxOSwgMHhmMiwKKwkweDcxLCAweDQ5LCAweDZlLCAweDUxLCAweGYwLCAweDdhLCAweGRlLCAweDgxLCAweDdlLCAweDc2LCAweGIwLCAweDhmLAorCTB4N2QsIDB4MTMsIDB4NmEsIDB4NWYsIDB4MjMsIDB4NmYsIDB4YTcsIDB4OTcsIDB4NDUsIDB4MzQsIDB4M2QsIDB4YmYsCisJMHgxYiwgMHhmOCwgMHhhOCwgMHhiNywgMHg1YywgMHhmNywgMHgwNCwgMHg2OCwgMHgyNCwgMHhlZCwgMHhlYywgMHhkYiwKKwkweDgwLCAweDQ5LCAweDg4LCAweGViLCAweDc0LCAweGI1LCAweGQwLCAweDQ5LCAweDc5LCAweDkzLCAweGQ3LCAweGU0LAorCTB4OWQsIDB4M2EsIDB4YTcsIDB4YjYsIDB4NzYsIDB4Y2UsIDB4NWYsIDB4ZjksIDB4OWIsIDB4NDYsIDB4NGQsIDB4ZjksCisJMHhhMSwgMHgzYSwgMHgyZiwgMHg2ZCwgMHg4YywgMHhlYiwgMHg1MiwgMHhhMSwgMHg0ZSwgMHgyNCwgMHhhMCwgMHg0NywKKwkweGEyLCAweDk1LCAweDFkLCAweDZiLCAweDE1LCAweDU3LCAweDU5LCAweDQ0LCAweDM3LCAweGYyLCAweDlkLCAweDUyLAorCTB4NTQsIDB4ZjQsIDB4OGQsIDB4NjEsIDB4MmYsIDB4ZGEsIDB4MWUsIDB4NmMsIDB4YzgsIDB4ZTYsIDB4NTksIDB4MzgsCisJMHg5NywgMHg4NywgMHg4ZCwgMHg2NywgMHhkOSwgMHg5NywgMHhmMiwgMHgwMiwgMHhlZCwgMHg5ZCwgMHhiNCwgMHg5ZCwKKwkweGNmLCAweGFhLCAweDdmLCAweDhlLCAweDQ1LCAweDVkLCAweDNjLCAweGQ2LCAweDAzLCAweGRhLCAweDM4LCAweDg2LAorCTB4MWQsIDB4ZGEsIDB4NzgsIDB4M2YsIDB4YTIsIDB4ODksIDB4M2IsIDB4MzYsIDB4MDgsIDB4ZmUsIDB4NzAsIDB4OWQsCisJMHg5ZCwgMHg4MSwgMHg5YywgMHgwYiwgMHgyZSwgMHhmNiwgMHg3NCwgMHg5ZCwgMHhkZiwgMHg1MCwgMHgzYywgMHhlOCwKKwkweGM1LCAweDc5LCAweDA2LCAweGU3LCAweGM5LCAweGFmLCAweDBlLCAweGU4LCAweGI2LCAweDI2LCAweDY1LCAweDI3LAorCTB4OWIsIDB4YTEsIDB4ZGMsIDB4MDMsIDB4ZGEsIDB4NzUsIDB4ZDksIDB4NzQsIDB4NjMsIDB4MmIsIDB4ZWQsIDB4OTEsCisJMHhhYywgMHhhOCwgMHg4NywgMHhhNiwgMHgyNCwgMHg0NywgMHhiOSwgMHg5NiwgMHhlYiwgMHhiOCwgMHgzZSwgMHgzYiwKKwkweDI2LCAweGZhLCAweGFmLCAweDdjLCAweDZiLCAweGRkLCAweDU5LCAweDZkLCAweGQ5LCAweDMxLCAweDBmLCAweDFhLAorCTB4MDIsIDB4ZGUsIDB4ODIsIDB4MjcsIDB4OWYsIDB4YjYsIDB4OTYsIDB4N2MsIDB4ZGQsIDB4YzgsIDB4M2YsIDB4YWUsCisJMHg2ZCwgMHg1ZCwgMHgwNywgMHg5ZCwgMHhlOCwgMHgyNywgMHgwZCwgMHgyNywgMHgzYSwgMHgwMywgMHg1YiwgMHg4YiwKKwkweDY4LCAweDhhLCAweDY0LCAweGEzLCAweDg1LCAweDM4LCAweDNlLCAweGU5LCAweDFjLCAweDVjLCAweDBmLCAweDFmLAorCTB4ZTAsIDB4YzEsIDB4MDcsIDB4YzAsIDB4YWYsIDB4M2QsIDB4ZWIsIDB4YzEsIDB4ZmUsIDB4M2QsIDB4ZmEsIDB4OGMsCisJMHg4YywgMHhiYywgMHgzOCwgMHgwNCwgMHgxZiwgMHhiNywgMHhlNiwgMHg2MywgMHhkMCwgMHhjNiwgMHhkMSwgMHhkNywKKwkweGM1LCAweDgwLCAweDhmLCAweDk5LCAweGFkLCAweGViLCAweGIwLCAweDU5LCAweGYwLCAweDc4LCAweDg1LCAweDczLAorCTB4YjAsIDB4ZWQsIDB4OTUsIDB4MTIsIDB4OWUsIDB4YjYsIDB4NTQsIDB4MWIsIDB4ZDQsIDB4YWIsIDB4YzgsIDB4OTcsCisJMHhkMiwgMHhlNywgMHhhNCwgMHhlMSwgMHg1ZiwgMHhlOCwgMHg3NywgMHhlOCwgMHg1NywgMHhiOCwgMHhkNiwgMHhmNywKKwkweDRiLCAweDBlLCAweDYxLCAweDdkLCAweDk5LCAweDcwLCAweDY4LCAweDQzLCAweDlkLCAweGEyLCAweDI3LCAweDJiLAorCTB4ZGEsIDB4YzEsIDB4MjEsIDB4ZDgsIDB4ZDYsIDB4ZjUsIDB4NmQsIDB4YTAsIDB4OTUsIDB4MzYsIDB4NzYsIDB4OGQsCisJMHg0OCwgMHgzYiwgMHhmNywgMHhmYiwgMHg2OSwgMHg1NywgMHhmMCwgMHhlZiwgMHhlZSwgMHgzNiwgMHg2MSwgMHgwZCwKKwkweDlmLCAweGVmLCAweDg2LCAweDYzLCAweDJkLCAweGY0LCAweDJkLCAweDdjLCAweDlmLCAweGNkLCAweDE0LCAweGE0LAorCTB4M2YsIDB4MWMsIDB4YjMsIDB4YmYsIDB4NGEsIDB4YWYsIDB4YTMsIDB4ZGYsIDB4OTgsIDB4OTAsIDB4MWQsIDB4MjcsCisJMHgwMywgMHg5ZiwgMHhiOCwgMHg2MywgMHhjOSwgMHgxMiwgMHhmYiwgMHg2NCwgMHg0MCwgMHhlMywgMHg4ZSwgMHgzMywKKwkweDkxLCAweDZmLCAweDdjLCAweDFmLCAweGYwLCAweGEwLCAweGNmLCAweDViLCAweDhkLCAweDAzLCAweDY4LCAweDNmLAorCTB4ZDMsIDB4NjAsIDB4MmEsIDB4OTgsIDB4ZGIsIDB4YzgsIDB4MGIsIDB4ZmEsIDB4NjMsIDB4ZGEsIDB4OWIsIDB4ZDUsCisJMHg2YSwgMHg2ZiwgMHg3YiwgMHg2MCwgMHg2ZiwgMHg0ZSwgMHhiYiwgMHg2NCwgMHg5ZCwgMHhiZiwgMHg4NywgMHhiZCwKKwkweDdkLCAweGMzLCAweGQxLCAweGMwLCAweDFiLCAweDkxLCAweDhiLCAweGI1LCAweDM0LCAweDZjLCAweGRkLCAweDRjLAorCTB4YmYsIDB4MjYsIDB4M2IsIDB4MzMsIDB4YjMsIDB4YTIsIDB4YzksIDB4MDksIDB4Y2UsIDB4MzUsIDB4MzAsIDB4YTcsCisJMHg3YywgMHg3MSwgMHhlMCwgMHgwYiwgMHgyZSwgMHgxYiwgMHg0ZiwgMHg4MSwgMHgyZSwgMHhkZiwgMHg5ZiwgMHgwNSwKKwkweGNlLCAweGYyLCAweDg4LCAweDExLCAweGRhLCAweDU2LCAweDM0LCAweDZmLCAweGRkLCAweGVmLCAweGRhLCAweGVlLAorCTB4YWYsIDB4MTksIDB4NTIsIDB4MTksIDB4NmUsIDB4OTMsIDB4ZWMsIDB4ZjAsIDB4MTIsIDB4NzAsIDB4NGYsIDB4M2IsCisJMHg4MSwgMHgxZCwgMHg1MywgMHhkNywgMHg5NywgMHg4MSwgMHg3ZiwgMHhjZSwgMHgxYiwgMHg4MiwgMHgxZSwgMHhkMywKKwkweDBlLCAweDQwLCAweDE3LCAweGYwLCAweDJmLCAweDAzLCAweGZmLCAweDVjLCAweGIzLCAweDRkLCAweGJlLCAweDZlLAorCTB4NDYsIDB4YjEsIDB4MzIsIDB4M2EsIDB4NGYsIDB4MzcsIDB4OTYsIDB4NDUsIDB4ZmIsIDB4MWUsIDB4OTYsIDB4MmYsCisJMHg3YSwgMHg0OSwgMHhjZCwgMHgzZCwgMHg0NiwgMHhmZiwgMHg1YSwgMHgxZCwgMHg4NiwgMHg5ZCwgMHg2OCwgMHg1NSwKKwkweDg3LCAweDdiLCAweDFiLCAweGIyLCAweGJjLCAweGJhLCAweDQ2LCAweDBhLCAweGQ1LCAweGMwLCAweDA2LCAweDBiLAorCTB4ZWUsIDB4NTAsIDB4MjUsIDB4NmQsIDB4MjgsIDB4NWYsIDB4MjIsIDB4YjIsIDB4MGYsIDB4YjYsIDB4YjcsIDB4NmMsCisJMHg3MywgMHhjYywgMHhmOSwgMHg2MCwgMHg2ZSwgMHhiYywgMHhkNiwgMHgwZiwgMHg5ZiwgMHhjOCwgMHhmMSwgMHg3YiwKKwkweGZlLCAweGI0LCAweDEzLCAweGNjLCAweDdkLCAweGExLCAweDc2LCAweDU3LCAweDM3LCAweGZkLCAweDJlLCAweGUyLAorCTB4NDQsIDB4YTYsIDB4ZWEsIDB4ZmMsIDB4YmIsIDB4MGYsIDB4ZmQsIDB4NWQsIDB4MDcsIDB4ZjMsIDB4ZDEsIDB4NzgsCisJMHhiMiwgMHhlMywgMHg4MSwgMHhjZSwgMHg4YSwgMHhiNiwgMHhkZiwgMHhkNiwgMHhmYiwgMHhkYiwgMHg0MywgMHgxZiwKKwkweGI2LCAweDFmLCAweDkzLCAweDdiLCAweDZiLCAweGQ1LCAweGJlLCAweDc2LCAweDc5LCAweGNmLCAweDYwLCAweDFjLAorCTB4YmQsIDB4MjIsIDB4NjIsIDB4YmEsIDB4YjUsIDB4NWQsIDB4ZTAsIDB4NDcsIDB4YjUsIDB4YjcsIDB4NjUsIDB4MmUsCisJMHg1MSwgMHhhYSwgMHhmOSwgMHg3MiwgMHhjMSwgMHgwOSwgMHg2MCwgMHgzMCwgMHhlZSwgMHgyYywgMHhkNiwgMHhmNCwKKwkweGZlLCAweDg0LCAweGFjLCAweDhlLCAweDJkLCAweGMyLCAweGFjLCAweGM4LCAweGFlLCAweGUxLCAweDY1LCAweDUxLAorCTB4YjAsIDB4N2QsIDB4ODksIDB4MzUsIDB4ZDgsIDB4NTQsIDB4YTksIDB4NTYsIDB4ZWQsIDB4NmQsIDB4MTksIDB4YTcsCisJMHg4YiwgMHhjMCwgMHhhNSwgMHhlZiwgMHg1OSwgMHg4NSwgMHgxZCwgMHg1OCwgMHg4MywgMHhkZCwgMHgyYSwgMHg5OSwKKwkweDVlLCAweGMyLCAweGViLCAweGZkLCAweDliLCAweGQ3LCAweDcwLCAweDY3LCAweDQyLCAweDdhLCAweGZhLCAweDM2LAorCTB4YWYsIDB4ZTEsIDB4YjAsIDB4ODksIDB4YjMsIDB4NjUsIDB4M2MsIDB4NGMsIDB4OWMsIDB4M2IsIDB4ZDYsIDB4NzAsCisJMHg4ZSwgMHhhYywgMHhhNywgMHhlNywgMHhiMCwgMHhjMCwgMHgwNywgMHgyNSwgMHhkYSwgMHhmMywgMHhiMiwgMHhlNywKKwkweDYyLCAweDZkLCAweDcwLCAweGUyLCAweDhiLCAweDgyLCAweDU4LCAweDM3LCAweGIyLCAweDI5LCAweGY0LCAweGM5LAorCTB4ZTYsIDB4MWUsIDB4MTcsIDB4YmMsIDB4MzIsIDB4ODUsIDB4M2UsIDB4NGUsIDB4OTMsIDB4MmEsIDB4ZTQsIDB4N2MsCisJMHg3ZiwgMHg0MywgMHhmNiwgMHg1YywgMHg2OCwgMHg5OCwgMHhhMSwgMHgyZSwgMHg1MSwgMHgyNywgMHhkZSwgMHg4NiwKKwkweDhkLCAweDc1LCAweDRlLCAweDk5LCAweDg4LCAweGMzLCAweGU3LCAweDk0LCAweDhkLCAweGM5LCAweDQ0LCAweGI1LAorCTB4MjYsIDB4OTUsIDB4ZWQsIDB4ZjksIDB4MjcsIDB4N2MsIDB4ZTgsIDB4ZTIsIDB4OTQsIDB4MDUsIDB4M2YsIDB4NWEsCisJMHg5NCwgMHhjZSwgMHgzMSwgMHgzNywgMHg4NywgMHhmOSwgMHgwNiwgMHg2ZCwgMHgwYiwgMHg3ZSwgMHgwNSwgMHhiMCwKKwkweGQwLCAweGI1LCAweDg0LCAweDMxLCAweGJmLCAweGYzLCAweDU1LCAweGQ3LCAweGUwLCAweDNlLCAweDE5LCAweGU0LAorCTB4NGQsIDB4ODksIDB4ODQsIDB4M2UsIDB4N2YsIDB4ZDUsIDB4YTcsIDB4OWUsIDB4NGQsIDB4OGYsIDB4NWMsIDB4NDUsCisJMHg5ZSwgMHg2MiwgMHhjMSwgMHg1NywgMHhjMiwgMHg3ZiwgMHg0MCwgMHhkZiwgMHg2NywgMHg5YiwgMHg4MiwgMHhiOCwKKwkweGZlLCAweDQwLCAweDRmLCAweDYwLCAweDYzLCAweDQ3LCAweGI3LCAweDA2LCAweDRmLCAweDMxLCAweGU5LCAweDliLAorCTB4YTcsIDB4NzMsIDB4Y2MsIDB4MDEsIDB4ZGEsIDB4MTMsIDB4NmUsIDB4NmUsIDB4N2MsIDB4OWIsIDB4NzEsIDB4ZTYsCisJMHhjMCwgMHgzNiwgMHhmZCwgMHg0YywgMHg2NSwgMHg5YiwgMHgwZSwgMHg5ZiwgMHgwZSwgMHg5YiwgMHhkMiwgMHhkZCwKKwkweDFjLCAweGZhLCAweDY3LCAweDIyLCAweDFiLCAweDRhLCAweGMzLCAweDg2LCAweGRlLCAweDU2LCAweDM5LCAweGM4LAorCTB4YjksIDB4ZTYsIDB4MjksIDB4ZDgsIDB4YWIsIDB4YTIsIDB4NTUsIDB4MjYsIDB4OTAsIDB4MTMsIDB4ZTgsIDB4YTMsCisJMHhlZiwgMHg0MywgMHg0ZiwgMHg3MCwgMHgxNiwgMHhmOCwgMHhjMCwgMHgwMiwgMHhiOCwgMHhhNCwgMHg4ZiwgMHhiZSwKKwkweDExLCAweGRhLCAweDMzLCAweGZiLCAweGVmLCAweGY4LCAweDQxLCAweDdjLCAweGY4LCAweDdjLCAweGI4LCAweGZmLAorCTB4M2YsIDB4NzUsIDB4MDcsIDB4M2UsIDB4MjAsIDB4YzIsIDB4NDUsIDB4M2MsIDB4YzMsIDB4ZGEsIDB4MDQsIDB4ZjIsCisJMHg5OSwgMHg4OSwgMHhhNiwgMHhhOSwgMHhkMSwgMHg5ZiwgMHgxNywgMHgzZCwgMHhlNiwgMHgyMSwgMHhjYywgMHg0MSwKKwkweDFlLCAweDBiLCAweGZkLCAweDIyLCAweDczLCAweDhmLCAweGNlLCAweDkwLCAweGE3LCAweGI5LCAweDI4LCAweGNlLAorCTB4MjksIDB4N2IsIDB4NDMsIDB4Y2MsIDB4YzksIDB4OTQsIDB4OWQsIDB4MzYsIDB4ZTUsIDB4OTMsIDB4YTcsIDB4NzMsCisJMHg5ZCwgMHg1OCwgMHg4NywgMHhiOSwgMHgyNiwgMHhjZSwgMHgwZCwgMHhiZiwgMHg4NCwgMHg1YywgMHgwNiwgMHg2YiwKKwkweGNlLCAweDYzLCAweDdkLCAweDdiLCAweDY4LCAweGYzLCAweDE3LCAweGE1LCAweDBjLCAweDlmLCAweDZhLCAweGRhLAorCTB4N2MsIDB4OWYsIDB4ZWIsIDB4OTEsIDB4MGUsIDB4OGMsIDB4MWIsIDB4ZDgsIDB4MGIsIDB4N2UsIDB4YzIsIDB4NTAsCisJMHg3YywgMHg0NiwgMHgyYywgMHg0OCwgMHg1ZCwgMHhjNywgMHgxYywgMHgwOSwgMHg2YiwgMHgzMywgMHg1OCwgMHg0YiwKKwkweGJmLCAweGNiLCAweGI1LCAweGNmLCAweDgyLCAweDBlLCAweDhjLCAweDFiLCAweDg0LCAweGExLCAweDhmLCAweDEyLAorCTB4ZGYsIDB4Y2QsIDB4NmQsIDB4ODYsIDB4MjYsIDB4ZjksIDB4ZTcsIDB4MGMsIDB4M2IsIDB4NWEsIDB4MWIsIDB4ZTEsCisJMHhkZCwgMHhiOCwgMHg5NiwgMHhmOSwgMHgwOSwgMHg3MSwgMHhmNywgMHg4NCwgMHhmMSwgMHg3ZiwgMHg1YywgMHgwYSwKKwkweGNkLCAweDAyLCAweDdlLCAweDIyLCAweGQzLCAweGM3LCAweDkwLCAweDhmLCAweGQ5LCAweDZkLCAweDg4LCAweDU1LAorCTB4OWMsIDB4ZGYsIDB4NmEsIDB4MDUsIDB4NjcsIDB4OGQsIDB4ZTAsIDB4ZWUsIDB4ZWYsIDB4NWIsIDB4M2YsIDB4ZmUsCisJMHg0MiwgMHg3MiwgMHhjZCwgMHg0NywgMHhkMiwgMHhjMiwgMHhhNCwgMHg4MCwgMHgxOCwgMHgwMSwgMHg1ZSwgMHg2NSwKKwkweGE2LCAweDk4LCAweGMzLCAweDE1LCAweDFiLCAweDRhLCAweGE2LCAweDk4LCAweDFiLCAweDgzLCAweDVmLCAweDBjLAorCTB4ZjIsIDB4YTIsIDB4NzMsIDB4ZGUsIDB4NDYsIDB4ZDksIDB4NTksIDB4ZTAsIDB4NzcsIDB4MDEsIDB4M2MsIDB4Y2UsCisJMHg0MCwgMHg4NywgMHhjNiwgMHgwMSwgMHgyYiwgMHg4NywgMHg4MSwgMHg4MywgMHhmMSwgMHhkNywgMHhkMSwgMHhmMywKKwkweDQ5LCAweDI5LCAweDViLCAweGNjLCAweDEzLCAweGRhLCAweDQ5LCAweDY3LCAweDgxLCAweGY2LCAweGFmLCAweGU3LAorCTB4MzcsIDB4NjMsIDB4OGUsIDB4ZmQsIDB4N2IsIDB4N2IsIDB4MDIsIDB4OTksIDB4NzUsIDB4NzEsIDB4M2MsIDB4YTEsCisJMHhlNywgMHg3YiwgMHgzNiwgMHhjYywgMHg3ZiwgMHhiZiwgMHgyYiwgMHhhMCwgMHg0ZCwgMHg4ZCwgMHgzMSwgMHhmZiwKKwkweGYyLCAweDg2LCAweGYxLCAweGVmLCAweDI1LCAweGQ3LCAweDhmLCAweGVmLCAweGRhLCAweDE2LCAweGVhLCAweDIwLAorCTB4ZmEsIDB4OGYsIDB4ODUsIDB4ZjQsIDB4ODIsIDB4YjYsIDB4NTUsIDB4NWEsIDB4YTMsIDB4OWMsIDB4NTcsIDB4MTYsCisJMHg3NCwgMHhlNCwgMHg3ZiwgMHg2ZSwgMHg2ZSwgMHgyNywgMHg2MiwgMHg3ZCwgMHg0NiwgMHg0YSwgMHg0ZCwgMHhkMCwKKwkweGJkLCAweDFhLCAweGNiLCAweDU2LCAweGQ3LCAweDU0LCAweGQ2LCAweGQ2LCAweDA0LCAweGJlLCAweGJlLCAweGQ0LAorCTB4ZjQsIDB4OTEsIDB4M2IsIDB4YjUsIDB4YzYsIDB4YmQsIDB4NjEsIDB4ZjQsIDB4MmIsIDB4ZDgsIDB4YTcsIDB4MjAsCisJMHhkMywgMHhkZSwgMHg4NSwgMHg4MiwgMHg2ZSwgMHgxZiwgMHgwOSwgMHhmMiwgMHgzZSwgMHhmYiwgMHg5YiwgMHg1YSwKKwkweDY5LCAweDk5LCAweGY5LCAweDIwLCAweGVjLCAweGM5LCAweDU2LCAweGY5LCAweDNmLCAweGUyLCAweGNhLCAweDUxLAorCTB4YWQsIDB4NzAsIDB4ZWEsIDB4MzgsIDB4ZjIsIDB4YzEsIDB4MTUsIDB4ZmMsIDB4NGUsIDB4ZTMsIDB4ZDcsIDB4YzAsCisJMHgyZiwgMHhjYSwgMHhjMywgMHg5ZiwgMHg0MSwgMHgxZSwgMHhhZiwgMHg3YywgMHgyYywgMHhlMiwgMHg0MSwgMHhiMCwKKwkweGZmLCAweDFiLCAweDJiLCAweGQwLCAweGIzLCAweGUzLCAweDI5LCAweGY5LCAweDg2LCAweGFkLCAweGY3LCAweGU5LAorCTB4ODEsIDB4NWYsIDB4MjksIDB4MjAsIDB4OGYsIDB4YjUsIDB4ZGUsIDB4OTYsIDB4ZGYsIDB4MGUsIDB4ZjMsIDB4MjIsCisJMHg5MSwgMHhkNywgMHgxNiwgMHhjMCwgMHhjNywgMHg5MSwgMHhmZCwgMHhhMSwgMHhjZSwgMHgxNiwgMHhlZSwgMHg3NSwKKwkweDk1LCAweGZmLCAweDBjLCAweGYzLCAweDFlLCAweGU0LCAweDVmLCAweDA1LCAweGI1LCAweGVhLCAweDViLCAweGUwLAorCTB4OGQsIDB4MjYsIDB4NmYsIDB4NDEsIDB4ODcsIDB4NWUsIDB4NWIsIDB4ZTgsIDB4MDAsIDB4M2QsIDB4YjYsIDB4OTQsCisJMHgyNywgMHg5MSwgMHgyZiwgMHg2OCwgMHg4MywgMHhkNiwgMHgyNiwgMHhhZCwgMHgwMywgMHg3NiwgMHgwYywgMHgxYiwKKwkweDU3LCAweDYzLCAweDQ5LCAweGI0LCAweGU1LCAweDJmLCAweGNkLCAweDJjLCAweGQ1LCAweDc0LCAweGFjLCAweDQ1LAorCTB4ZWUsIDB4OTMsIDB4NDMsIDB4MWYsIDB4YjIsIDB4YmYsIDB4YjIsIDB4NDAsIDB4MzgsIDB4NWQsIDB4NWUsIDB4NWYsCisJMHgzMCwgMHhlNCwgMHg0ZCwgMHhlNCwgMHg1MiwgMHg2ZiwgMHhkOSwgMHg5NywgMHg2NiwgMHgxMCwgMHhiNywgMHhmYSwKKwkweDExLCAweDIzLCAweDUwLCAweDhiLCAweGVjLCAweGE0LCAweDlmLCAweGRlLCAweDYxLCAweGUyLCAweDU5LCAweGMyLAorCTB4NmYsIDB4MWYsIDB4NzIsIDB4YzEsIDB4OGYsIDB4ODYsIDB4ZjksIDB4YjgsIDB4ZjUsIDB4YTQsIDB4MmQsIDB4MDEsCisJMHgxOCwgMHhhZSwgMHgzNywgMHg0MSwgMHg1YiwgMHgzNywgMHhlNCwgMHg5ZiwgMHhiNSwgMHhhNiwgMHhlNCwgMHhmNSwKKwkweDFlLCAweDk1LCAweGFmLCAweDY4LCAweDljLCAweDBmLCAweDdjLCAweGQzLCAweDg3LCAweGU3LCAweGM5LCAweDY3LAorCTB4MDMsIDB4M2EsIDB4Y2UsIDB4MzEsIDB4ZGYsIDB4ZDEsIDB4ODcsIDB4MTIsIDB4NWYsIDB4NzYsIDB4YWMsIDB4ODAsCisJMHhjMywgMHg1YywgMHg1OSwgMHgwOCwgMHhmYSwgMHhkMSwgMHg5YywgMHg2OCwgMHg1MSwgMHgxYywgMHhhMywgMHg2ZiwKKwkweDJjLCAweGMxLCAweDRlLCAweDM4LCAweDllLCAweDEwLCAweDI1LCAweDgzLCAweDc1LCAweGYyLCAweDk0LCAweDg0LAorCTB4OTksIDB4M2YsIDB4M2IsIDB4MzMsIDB4NjcsIDB4NTMsIDB4YWUsIDB4ZjAsIDB4NzEsIDB4YjUsIDB4NDgsIDB4YWUsCisJMHg5NCwgMHg1MSwgMHhiYiwgMHg1NCwgMHgxNywgMHhiZSwgMHgwOSwgMHhiOSwgMHhlYSwgMHg2MSwgMHhiZSwgMHgwZiwKKwkweDFiLCAweDNmLCAweDRlLCAweGY5LCAweGEyLCAweGZlLCAweDViLCAweDQwLCAweGVlLCAweGIzLCAweDIwLCAweGM5LAorCTB4YTAsIDB4NWUsIDB4MzksIDB4OGEsIDB4M2MsIDB4MWYsIDB4ZjIsIDB4YWIsIDB4MWQsIDB4MDcsIDB4MGUsIDB4ZDgsCisJMHg2OSwgMHg2ZCwgMHgwNSwgMHg0ZiwgMHhkNCwgMHgxNiwgMHhiNSwgMHhkMywgMHg3OCwgMHgwZSwgMHhlMCwgMHhkOSwKKwkweGEwLCAweDZlLCAweDg2LCAweGI5LCAweGM2LCAweDg3LCAweGU4LCAweDgxLCAweDNkLCAweDk1LCAweDY4LCAweDRmLAorCTB4ZjIsIDB4ZmQsIDB4NjYsIDB4NWUsIDB4YmUsIDB4ZGIsIDB4MWMsIDB4OTMsIDB4ZTcsIDB4OWIsIDB4MzksIDB4ZjksCisJMHhiYiwgMHhhNiwgMHgyMywgMHhkZiwgMHg2OSwgMHg4ZSwgMHhjOCwgMHhiNywgMHg5YiwgMHhjMywgMHhhYywgMHhjOSwKKwkweDkwLCAweDM3LCAweDY1LCAweDk4LCAweDM3LCAweGM5LCAweGJkLCAweGRlLCAweGFkLCAweGIwLCAweDc3LCAweGNhLAorCTB4ZmYsIDB4ZDIsIDB4NGMsIDB4YTEsIDB4MzEsIDB4MjgsIDB4ZTUsIDB4NjMsIDB4ZjAsIDB4Y2YsIDB4Y2UsIDB4Y2QsCisJMHhhYywgMHgyNSwgMHhlNSwgMHgxMSwgMHg4NywgMHgzNSwgMHg0MSwgMHgxYiwgMHhkZiwgMHhhMywgMHhjZSwgMHg4NCwKKwkweGZmLCAweDg2LCAweDNmLCAweDliLCAweDRhLCAweDY1LCAweDRmLCAweGJiLCAweDQ2LCAweDQ3LCAweGU4LCAweDAzLAorCTB4NmUsIDB4NDksIDB4NGEsIDB4MDcsIDB4ZjYsIDB4ODIsIDB4MGYsIDB4NWMsIDB4N2EsIDB4MWEsIDB4MzYsIDB4YTAsCisJMHg2YSwgMHg5YSwgMHgwNCwgMHhmYywgMHgwZCwgMHg3MywgMHgwMSwgMHg5MywgMHg3NiwgMHg4YywgMHgzYSwgMHgzMCwKKwkweDliLCAweDcxLCAweDBkLCAweGQ2LCAweDc3LCAweGI0LCAweDY3LCAweDAzLCAweDgxLCAweDgzLCAweDcwLCAweGZiLAorCTB4MmMsIDB4Y2EsIDB4Y2QsIDB4YjQsIDB4ZTksIDB4NTcsIDB4MGIsIDB4YTEsIDB4OGYsIDB4NGIsIDB4ODQsIDB4N2EsCisJMHg2OSwgMHg2MSwgMHhmZSwgMHhmMSwgMHhkMCwgMHgyNywgMHg2ZiwgMHhkYywgMHgwNywgMHhmMSwgMHgwMiwgMHhmOSwKKwkweDY0LCAweGIwLCAweDhlLCAweGIwLCAweDVhLCAweDA4LCAweGRiLCAweDE3LCAweGNlLCAweDc1LCAweDgyLCAweGRmLAorCTB4OGUsIDB4OTQsIDB4YmQsIDB4MzcsIDB4MzUsIDB4ZTYsIDB4ZDksIDB4YzgsIDB4NzcsIDB4MzAsIDB4MWUsIDB4YzEsCisJMHhmOCwgMHg0YSwgMHgzOCwgMHhmZSwgMHg5YywgMHg0YywgMHgyZiwgMHgwYSwgMHg2OCwgMHhmZCwgMHg4OSwgMHg1NiwKKwkweDU0LCAweGUzLCAweDMxLCAweDhjLCAweDc1LCAweDhjLCAweDBkLCAweGQ2LCAweDAyLCAweDY4LCAweDM3LCAweDI3LAorCTB4YTksIDB4ZWIsIDB4YmEsIDB4NGQsIDB4NWYsIDB4MzgsIDB4MTksIDB4ZmEsIDB4YzMsIDB4ODIsIDB4MWMsIDB4ZjYsCisJMHgwNiwgMHgwYiwgMHg1NywgMHgxMSwgMHgzMywgMHhiNCwgMHhiNiwgMHgyOCwgMHhmZiwgMHhkOSwgMHgwZSwgMHhiZSwKKwkweGY4LCAweGZlLCAweGVkLCAweGFjLCAweGI5LCAweDkzLCAweGE2LCAweDdjLCAweDdiLCAweDNlLCAweDZiLCAweDNkLAorCTB4YTQsIDB4N2YsIDB4MGQsIDB4NjcsIDB4ZjIsIDB4ZmQsIDB4ODMsIDB4NzYsIDB4ZjYsIDB4YzgsIDB4OTQsIDB4ZGUsCisJMHgyNSwgMHhkZiwgMHgzZCwgMHhjYSwgMHhkOCwgMHg3YiwgMHg3NiwgMHhlNiwgMHgwNywgMHhkMCwgMHhiZCwgMHhmYSwKKwkweDRhLCAweGJiLCAweGQ0LCAweGViLCAweGE2LCAweDVjLCAweDE5LCAweDFkLCAweDA0LCAweDlkLCAweDk2LCAweGQ0LAorCTB4MWIsIDB4NDksIDB4ZTQsIDB4NzMsIDB4OWIsIDB4NjUsIDB4YjYsIDB4NWYsIDB4MTksIDB4MTgsIDB4ZmMsIDB4ZjQsCisJMHhiMCwgMHhmMiwgMHhkMywgMHhhZSwgMHg4ZCwgMHg2NywgMHhlMywgMHhlNywgMHgzZCwgMHhlYiwgMHhjZiwgMHg1YywKKwkweDAyLCAweGZkLCAweGQwLCAweGViLCAweGU0LCAweDc2LCAweDI1LCAweGU3LCAweGIyLCAweDM3LCAweDY4LCAweDk1LAorCTB4NzUsIDB4YzQsIDB4MmUsIDB4NzMsIDB4ZDAsIDB4YmEsIDB4NTcsIDB4ZmYsIDB4MmYsIDB4ZmYsIDB4ZjMsIDB4MjYsCisJMHg2NSwgMHhmNywgMHhhYSwgMHhhYSwgMHg2MSwgMHg1NCwgMHhhYywgMHhjMywgMHg3ZSwgMHg0YiwgMHgyYiwgMHgyZiwKKwkweDgzLCAweDE2LCAweGY4LCAweGQ4LCAweGM2LCAweGY2LCAweDcwLCAweDljLCAweDUxLCAweGJjLCAweDM4LCAweGRiLAorCTB4ZTgsIDB4OTAsIDB4ZWYsIDB4ZDQsIDB4YjcsIDB4YzgsIDB4NzIsIDB4OWQsIDB4ZWYsIDB4ZGIsIDB4NjUsIDB4YTksCisJMHgzZSwgMHg3OCwgMHhiNSwgMHg0ZiwgMHhlZiwgMHg5NywgMHhmMywgMHhkNywgMHg1YywgMHg2ZiwgMHhkZCwgMHhhMywKKwkweDIzLCAweDM3LCAweDk4LCAweGZjLCAweDQwLCAweDdlLCAweDM5LCAweGRhLCAweDIzLCAweDNmLCAweGZlLCAweDcyLAorCTB4ZjYsIDB4OTksIDB4M2YsIDB4ZDUsIDB4NjEsIDB4MDMsIDB4YTMsIDB4OWQsIDB4YjQsIDB4NmQsIDB4ZjQsIDB4MzksCisJMHg5ZiwgMHhiZCwgMHg1YSwgMHhkMCwgMHhhOSwgMHhkYiwgMHgzZiwgMHgwMiwgMHg0ZiwgMHhiMywgMHgwYiwgMHg4MSwKKwkweDFkLCAweDEwLCAweDM3LCAweGYxLCAweDQyLCAweDM3LCAweGVjLCAweGVmLCAweDAxLCAweDI3LCAweGRlLCAweDM1LAorCTB4MDYsIDB4ODEsIDB4ZWIsIDB4N2IsIDB4OGEsIDB4MTcsIDB4YjcsIDB4M2IsIDB4ZDksIDB4YWIsIDB4MDgsIDB4NDksCisJMHhmZSwgMHgxNSwgMHg3YiwgMHg3MCwgMHg3OCwgMHg4NywgMHhiZSwgMHg1ZCwgMHhlYSwgMHhlOSwgMHhlYiwgMHhhZCwKKwkweGU3LCAweGUwLCAweGZmLCAweDBiLCAweGE5LCAweGVjLCAweDkxLCAweGNiLCAweDcyLCAweDc2LCAweGU2LCAweGEyLAorCTB4NGQsIDB4ZmQsIDB4YTcsIDB4ZGYsIDB4NzgsIDB4MDksIDB4YjksIDB4YTcsIDB4MjUsIDB4MGIsIDB4MGQsIDB4ZmEsCisJMHg0YiwgMHhlMiwgMHg2MiwgMHhmZSwgMHhiZiwgMHhjYiwgMHgzYSwgMHhhYywgMHgzMywgMHg0ZiwgMHhjMCwgMHgzYiwKKwkweGNjLCAweDFiLCAweGJmLCAweDRlLCAweDM5LCAweGI3LCAweDExLCAweDc2LCAweGI4LCAweGEwLCAweGZmLCAweDYyLAorCTB4MDMsIDB4OGYsIDB4MDYsIDB4YWQsIDB4YmQsIDB4M2EsIDB4ZjcsIDB4ZmIsIDB4MzcsIDB4ZWMsIDB4ZmIsIDB4MGUsCisJMHg2OCwgMHgxZCwgMHgwNCwgMHgyYywgMHg2MiwgMHg2NiwgMHhiYSwgMHg3NSwgMHg4ZiwgMHg1NywgMHhkNCwgMHgxZSwKKwkweGM3LCAweDFhLCAweGM4LCAweGY1LCAweDU2LCAweGY3LCAweGMwLCAweDVjLCAweDQzLCAweGM3LCAweDM5LCAweDRkLAorCTB4MjUsIDB4OTcsIDB4MmIsIDB4YTMsIDB4ZTQsIDB4ZWYsIDB4OWUsIDB4NWUsIDB4ZTYsIDB4OTksIDB4NDYsIDB4ZmUsCisJMHhhZiwgMHhmZCwgMHhhOCwgMHg3ZSwgMHg3YywgMHg3ZSwgMHg3ZSwgMHgxMiwgMHhmZSwgMHhkOSwgMHhmNywgMHgyZiwKKwkweGVjLCAweDFhLCAweDA0LCAweDBkLCAweGE4LCAweDQzLCAweGQzLCAweGU0LCAweGY5LCAweGQ5LCAweDE5LCAweDE3LAorCTB4MzgsIDB4OGEsIDB4MGEsIDB4ZjcsIDB4MjUsIDB4NTksIDB4MDEsIDB4ZWUsIDB4MDksIDB4ZjIsIDB4MDEsIDB4YjgsCisJMHhlNywgMHgzOCwgMHhhZiwgMHg2NCwgMHg4MCwgMHhmOSwgMHg0NiwgMHgwNiwgMHg3OCwgMHgyMywgMHhmZCwgMHg0YywKKwkweDQyLCAweGQ3LCAweDc2LCAweDViLCAweGI3LCAweDA3LCAweGJhLCAweDllLCAweDYwLCAweDZjLCAweDdiLCAweDBlLAorCTB4YmEsIDB4NTcsIDB4NDgsIDB4NTIsIDB4N2YsIDB4ZGEsIDB4N2IsIDB4ZDcsIDB4ZjQsIDB4YTcsIDB4MTUsIDB4N2YsCisJMHhiYiwgMHg5NCwgMHgxNiwgMHgxMiwgMHhjMCwgMHg2YiwgMHhjYSwgMHg1YywgMHg4ZSwgMHg3OCwgMHgzMSwgMHhhZSwKKwkweDUzLCAweGY3LCAweDJiLCAweGExLCAweGVlLCAweDc3LCAweDg2LCAweGI4LCAweDE3LCAweGMxLCAweDkzLCAweDZjLAorCTB4YTYsIDB4YWUsIDB4YjMsIDB4OGUsIDB4ZGEsIDB4YTYsIDB4NmEsIDB4NWIsIDB4MDMsIDB4MzYsIDB4NWQsIDB4YWUsCisJMHhiMSwgMHgwZSwgMHhlNSwgMHhmZCwgMHhjOCwgMHhhNSwgMHg5OSwgMHg2OSwgMHhkNCwgMHhhYSwgMHhlNSwgMHhkYSwKKwkweDg4LCAweDU2LCAweDZlLCAweGRhLCAweDVhLCAweGQ5LCAweGEzLCAweGJlLCAweGVkLCAweGIyLCAweDJlLCAweDI4LAorCTB4MWUsIDB4YTcsIDB4NjUsIDB4YTksIDB4ZjksIDB4NGIsIDB4YmYsIDB4YmEsIDB4NmIsIDB4MTMsIDB4ZmEsIDB4ZDAsCisJMHhmZCwgMHgwOSwgMHhjYSwgMHhmNywgMHhiMywgMHhhNCwgMHgwYiwgMHg0MSwgMHg5YywgMHhmYywgMHg0ZSwgMHhjOSwKKwkweGM5LCAweDIxLCAweDE0LCAweGJkLCAweGM4LCAweGFkLCAweDRlLCAweDBkLCAweDExLCAweDNmLCAweGU4LCAweDQ4LAorCTB4YTUsIDB4NjQsIDB4ZDksIDB4ZTMsIDB4MWUsIDB4NjcsIDB4NjcsIDB4YzgsIDB4Y2IsIDB4ZjIsIDB4NzEsIDB4NGIsCisJMHgwZSwgMHgyYiwgMHhmOSwgMHhiZCwgMHhhYywgMHg2YywgMHhiYiwgMHhiYywgMHg2MiwgMHhjOCwgMHg3NCwgMHg3MiwKKwkweGQwLCAweDdhLCAweDU4LCAweGIyLCAweDU3LCAweDJmLCAweDE4LCAweGQ5LCAweDY3LCAweGE2LCAweDYwLCAweGQ3LAorCTB4NGIsIDB4OGIsIDB4ODYsIDB4YjgsIDB4YWEsIDB4ZGUsIDB4YTIsIDB4OGMsIDB4YjIsIDB4MGIsIDB4YjAsIDB4ZmMsCisJMHhmMCwgMHhlYywgMHg3YiwgMHg1YiwgMHhjZSwgMHhkZSwgMHgyZCwgMHgyYiwgMHg0ZiwgMHhmZiwgMHgyNiwgMHg3YywKKwkweGNlLCAweDAxLCAweGM4LCAweGMyLCAweGNjLCAweDFjLCAweDQyLCAweDVlLCAweGYxLCAweGI0LCAweDBjLCAweDVhLAorCTB4NTUsIDB4ZTQsIDB4YzksIDB4ZTAsIDB4M2IsIDB4ZGEsIDB4MDEsIDB4NjUsIDB4MDMsIDB4MTcsIDB4NzQsIDB4OGMsCisJMHgwNywgMHhjOCwgMHgyNywgMHg4ZSwgMHhhZiwgMHg5NSwgMHgwYiwgMHhjYSwgMHg5NiwgMHhkMiwgMHhlYSwgMHhkZCwKKwkweDBlLCAweGUwLCAweDA4LCAweGRlLCAweDcxLCAweGZjLCAweDE5LCAweGQ5LCAweGExLCAweGRlLCAweGRkLCAweGE5LAorCTB4ZGUsIDB4NTUsIDB4ZTksIDB4MmIsIDB4OTQsIDB4ZmMsIDB4YmUsIDB4ODIsIDB4M2QsIDB4YzksIDB4ZTMsIDB4NjgsCisJMHhiZSwgMHg0YiwgMHgwMiwgMHg1YiwgMHg4YSwgMHhmOCwgMHg2ZSwgMHhjOSwgMHhjMSwgMHg0NiwgMHg0YSwgMHhiZSwKKwkweDg0LCAweGZhLCAweGU3LCAweDhlLCAweGM2LCAweDgwLCAweDk0LCAweDIwLCAweGM3LCAweGU5LCAweGRjLCAweDgzLAorCTB4YmQsIDB4M2MsIDB4NWIsIDB4NzEsIDB4MjUsIDB4ZmIsIDB4OGMsIDB4ZTgsIDB4YTQsIDB4ZjUsIDB4NGUsIDB4MzksCisJMHhlNCwgMHg0NSwgMHhmNCwgMHg3NCwgMHg4NiwgMHhmNCwgMHg0ZCwgMHg4NiwgMHhlMywgMHg0NCwgMHg0OCwgMHg0MywKKwkweDJiLCAweGJlLCAweDRlLCAweGUwLCAweDQyLCAweGFjLCAweGNmLCAweDc5LCAweDIxLCAweDFlLCAweGZhLCAweDExLAorCTB4ZDAsIDB4M2EsIDB4OTksIDB4OTYsIDB4MTUsIDB4OGYsIDB4NzQsIDB4NmMsIDB4OTEsIDB4NmEsIDB4OGEsIDB4ZmQsCisJMHgwMywgMHhkMCwgMHgzNywgMHhlMiwgMHhkOSwgMHhjNCwgMHg3YywgMHg2NiwgMHgxZCwgMHg4ZiwgMHgxZiwgMHg2YywKKwkweDU0LCAweGMwLCAweDYzLCAweGYyLCAweDk3LCAweGViLCAweDEwLCAweDIzLCAweDNlLCAweDQ3LCAweGY5LCAweGVkLAorCTB4NDYsIDB4MmUsIDB4NmYsIDB4MDcsIDB4YmEsIDB4NjksIDB4YWQsIDB4ZWQsIDB4NTksIDB4M2EsIDB4ZGUsIDB4MGQsCisJMHg1OSwgMHg3MSwgMHhkZiwgMHgwZSwgMHg5OSwgMHg4NCwgMHhkZCwgMHgxNywgMHhlYiwgMHhkYywgMHg3ZiwgMHgxMiwKKwkweDdhLCAweDc0LCAweDUxLCAweGVkLCAweDVmLCAweDVhLCAweGU5LCAweDBmLCAweGUxLCAweDA5LCAweGRiLCAweGJkLAorCTB4MDEsIDB4YjYsIDB4NWQsIDB4ZjYsIDB4MmUsIDB4NTgsIDB4MWYsIDB4MDEsIDB4ZmYsIDB4YmIsIDB4ODAsIDB4ZDcsCisJMHhlNSwgMHg0NCwgMHg4ZSwgMHhmMCwgMHhjNCwgMHg4MywgMHg3NSwgMHhmNSwgMHhkNCwgMHgyNywgMHhlMCwgMHg0OSwKKwkweGFhLCAweGJhLCAweGJlLCAweDU4LCAweDZmLCAweDk3LCAweGUyLCAweDQyLCAweDg0LCAweDhiLCAweDc4LCAweDNlLAorCTB4NDAsIDB4ZGQsIDB4N2IsIDB4YjcsIDB4YzIsIDB4MzUsIDB4YWQsIDB4NzAsIDB4ZTEsIDB4N2QsIDB4OWQsIDB4M2UsCisJMHhlNywgMHgyNiwgMHhjMCwgMHhhMywgMHg3NiwgMHhiNywgMHg0MSwgMHg1YiwgMHhiMiwgMHg0YiwgMHhhYSwgMHhhYSwKKwkweDc2LCAweGVmLCAweDUwLCAweGJlLCAweGE2LCAweDlhLCAweGRjLCAweDhjLCAweGY3LCAweDNlLCAweGY2LCAweGRjLAorCTB4OGQsIDB4N2MsIDB4YTYsIDB4MWIsIDB4NzMsIDB4OTksIDB4MGQsIDB4NzMsIDB4MWIsIDB4ZTksIDB4NGYsIDB4NmMsCisJMHhhMCwgMHhmZiwgMHhiZiwgMHg3YiwgMHgxOSwgMHg1MiwgMHhlNiwgMHg3MiwgMHhjMSwgMHhiYSwgMHgxMiwgMHhkNiwKKwkweGNkLCAweDFlLCAweDg3LCAweDRkLCAweDMwLCAweDRmLCAweDRmLCAweDMxLCAweDM2LCAweDVmLCAweGEzLCAweDY4LAorCTB4OTksIDB4NWQsIDB4ZjksIDB4MjksIDB4ZDYsIDB4ZjUsIDB4MDMsIDB4MzYsIDB4MWEsIDB4MDcsIDB4N2MsIDB4NzgsCisJMHgwYSwgMHg3OCwgMHg4ZSwgMHhkNywgMHhkNSwgMHgxZCwgMHgwNSwgMHg2NCwgMHhmMCwgMHhiZSwgMHgzYSwgMHg3YiwKKwkweGI1LCAweGZlLCAweDY5LCAweDNjLCAweGJiLCAweGE2LCAweDg1LCAweDVmLCAweGU0LCAweDE1LCAweGU5LCAweDI1LAorCTB4YWQsIDB4YmMsIDB4MmYsIDB4ODIsIDB4YmQsIDB4MzksIDB4ZDAsIDB4ZTMsIDB4YTQsIDB4MjEsIDB4YTUsIDB4MWMsCisJMHhlMiwgMHhiYSwgMHhjNywgMHhiYiwgMHg1NywgMHhkYSwgMHhlNSwgMHg0MCwgMHg1MCwgMHgyMywgMHhkOCwgMHg4YywKKwkweGVmLCAweGE2LCAweDNhLCAweGZiLCAweGExLCAweDE1LCAweGRlLCAweGJmLCAweDY2LCAweDc4LCAweDQ3LCAweDM3LAorCTB4OGMsIDB4ZGEsIDB4NWIsIDB4MWUsIDB4NWEsIDB4YjEsIDB4ZTUsIDB4NmIsIDB4OGQsIDB4NjEsIDB4NzksIDB4YjgsCisJMHg5MSwgMHhiNSwgMHhlZSwgMHg4MSwgMHgwZiwgMHgyOCwgMHhhZiwgMHhkZSwgMHhjYiwgMHg2ZSwgMHg0YiwgMHhkMiwKKwkweDdmLCAweDk5LCAweGM4LCAweDNkLCAweGRiLCAweGVjLCAweDIwLCAweDE3LCAweGE5LCAweGIyLCAweDM2LCAweDNiLAorCTB4OWUsIDB4ZTUsIDB4N2QsIDB4OGQsIDB4NTUsIDB4OTcsIDB4OGQsIDB4ZjksIDB4Y2EsIDB4ZmYsIDB4NjUsIDB4YWUsCisJMHhjMiwgMHhmZCwgMHhlOSwgMHhhZiwgMHg5MSwgMHg5YiwgMHg3OCwgMHhjOCwgMHg0ZCwgMHgzYywgMHhlNCwgMHgyNiwKKwkweDFlLCAweDcyLCAweDEzLCAweDBmLCAweGI5LCAweDg5LCAweDg3LCAweGRjLCAweGM0LCAweDQzLCAweDZlLCAweGUyLAorCTB4MjEsIDB4MzcsIDB4NDEsIDB4MWQsIDB4MTAsIDB4ZDQsIDB4MDcsIDB4ZTMsIDB4YzgsIDB4YjksIDB4ZTEsIDB4YmYsCisJMHhiYywgMHg1YiwgMHhjMiwgMHhkYywgMHgyMiwgMHg4YSwgMHhjZCwgMHg5YywgMHgzYiwgMHhiZiwgMHhjOSwgMHgwZCwKKwkweGVhLCAweDJiLCAweGU1LCAweDEzLCAweDBhLCAweGNkLCAweDg5LCAweDMwLCAweDA3LCAweGUyLCAweDlhLCAweDI4LAorCTB4NzYsIDB4NzMsIDB4OWQsIDB4OGMsIDB4YjksIDB4YTgsIDB4M2QsIDB4MGIsIDB4OTMsIDB4Y2MsIDB4OTEsIDB4ODIsCisJMHg5OCwgMHgxNSwgMHhlNCwgMHhlNywgMHhhZiwgMHgyMiwgMHg0ZiwgMHhjYSwgMHgyMCwgMHg0ZiwgMHgxYSwgMHg0MCwKKwkweDRlLCAweGM0LCAweDdiLCAweGVhLCAweGU4LCAweDJlLCAweGE5LCAweGEwLCAweDFkLCAweGY0LCAweGM2LCAweGI1LAorCTB4MmYsIDB4NzksIDB4Y2MsIDB4ZGYsIDB4ZWQsIDB4NGMsIDB4NTksIDB4ZDcsIDB4OGYsIDB4ZjcsIDB4ODksIDB4MmYsCisJMHhjNSwgMHhkMSwgMHhhZiwgMHgyMywgMHg1NywgMHhmZSwgMHg0YiwgMHg3NSwgMHg2ZiwgMHgzNiwgMHgzMSwgMHg0NCwKKwkweDk5LCAweGRmLCAweGY3LCAweDMxLCAweGY5LCAweDcyLCAweGM0LCAweGRmLCAweGUwLCAweGJlLCAweDRmLCAweDVmLAorCTB4MjIsIDB4ZmYsIDB4NDQsIDB4N2EsIDB4Y2YsIDB4ODAsIDB4ZTEsIDB4NjcsIDB4MTIsIDB4OTIsIDB4M2MsIDB4YjksCisJMHgwNSwgMHg3MywgMHg5NiwgMHhmNCwgMHhhOSwgMHgzYiwgMHgyMywgMHg4OCwgMHhmMiwgMHhjYywgMHg3ZiwgMHg0MCwKKwkweDVlLCAweGI2LCAweGU4LCAweDY3LCAweDc4LCAweGIzLCAweDQwLCAweGJjLCAweGY0LCAweGFmLCAweGY1LCAweDk5LAorCTB4NjIsIDB4YmQsIDB4YWUsIDB4NzQsIDB4ZWEsIDB4NjAsIDB4YTMsIDB4ODQsIDB4M2MsIDB4Y2EsIDB4ZTgsIDB4OTMsCisJMHgwZSwgMHgxMywgMHhiNSwgMHg1NCwgMHg4NCwgMHg5YiwgMHgzOCwgMHhkZiwgMHg0YywgMHhhYSwgMHgxYSwgMHhlNywKKwkweGNjLCAweGFhLCAweDNjLCAweDIxLCAweDZiLCAweGVlLCAweDUzLCAweDlmLCAweGE5LCAweDJlLCAweDY0LCAweGQzLAorCTB4YWMsIDB4NzEsIDB4MGIsIDB4NTYsIDB4N2QsIDB4ZTYsIDB4NDksIDB4ZTAsIDB4NTgsIDB4NDYsIDB4NmUsIDB4NjAsCisJMHhhOCwgMHhiZCwgMHhlYiwgMHgzMywgMHhiMywgMHgwYiwgMHhjMSwgMHhiZCwgMHg1NSwgMHg0MCwgMHgwMywgMHhlMywKKwkweDU1LCAweDg3LCAweDE4LCAweDRiLCAweGMxLCAweGZkLCAweDk1LCAweGFlLCAweDYwLCAweDA5LCAweDQ3LCAweDc4LAorCTB4MTMsIDB4NzAsIDB4OTQsIDB4ZGIsIDB4MzAsIDB4NjAsIDB4MjksIDB4M2IsIDB4ZDIsIDB4NTAsIDB4OWYsIDB4YTksCisJMHhkNCwgMHg1YiwgMHg2OSwgMHgyMCwgMHgxZSwgMHhlMiwgMHg4ZCwgMHhjZSwgMHhjMywgMHhiMywgMHgyNCwgMHg0NSwKKwkweDNmLCAweGU5LCAweGZiLCAweGU1LCAweGQxLCAweDgxLCAweGIwLCAweGFlLCAweDQ0LCAweDFkLCAweDc5LCAweGNjLAorCTB4MGMsIDB4ZjQsIDB4NWMsIDB4OGQsIDB4ZmYsIDB4NTgsIDB4YzUsIDB4YTksIDB4OGMsIDB4Y2UsIDB4NzksIDB4M2UsCisJMHhmMSwgMHgyZSwgMHhmNywgMHgyOCwgMHhlNiwgMHgzMCwgMHg1ZSwgMHg4ZSwgMHhkNiwgMHhlYSwgMHhlMSwgMHhkYSwKKwkweGFlLCAweDE2LCAweDdlLCAweGI2LCAweDg1LCAweGZiLCAweDkxLCAweDI2LCAweDllLCAweGYzLCAweDE1LCAweGVjLAorCTB4NDUsIDB4YmEsIDB4YjgsIDB4YzYsIDB4MDQsIDB4NmQsIDB4OTAsIDB4YTUsIDB4ZjcsIDB4YmYsIDB4ZTUsIDB4N2QsCisJMHhlYiwgMHg5OSwgMHhjOCwgMHg1MywgMHgxMywgMHgzMCwgMHg1YywgMHg0ZiwgMHgxYywgMHgxMSwgMHgwYywgMHg1ZSwKKwkweDljLCAweDA5LCAweGUwLCAweGY0LCAweGQ1LCAweDdiLCAweGJlLCAweDRmLCAweGRhLCAweGI3LCAweDk1LCAweGQ2LAorCTB4NjgsIDB4ZmYsIDB4MDgsIDB4Y2YsIDB4NzAsIDB4MjAsIDB4YjcsIDB4NTUsIDB4NzgsIDB4ZjUsIDB4N2YsIDB4N2YsCisJMHhlMSwgMHgwOSwgMHg1ZCwgMHhmYywgMHhkMCwgMHg3ZCwgMHhlOSwgMHg3MCwgMHg0YiwgMHg4ZCwgMHgxYywgMHhkZCwKKwkweDNiLCAweGIwLCAweGZlLCAweDY3LCAweDNkLCAweGNmLCAweGVmLCAweDAzLCAweGFkLCAweGY1LCAweDY5LCAweDI5LAorCTB4OGMsIDB4NjUsIDB4ZGIsIDB4YTQsIDB4NjAsIDB4YjIsIDB4NTYsIDB4MTksIDB4MGYsIDB4YzcsIDB4NWIsIDB4MTEsCisJMHhkYiwgMHgzOCwgMHhiZSwgMHgxNSwgMHhmYywgMHg4NSwgMHgyZSwgMHgzYiwgMHgxZCwgMHg2MSwgMHhhZCwgMHg5NCwKKwkweDBjLCAweGJlLCAweGViLCAweDBjLCAweGQzLCAweDhlLCAweDU4LCAweDZiLCAweDZlLCAweDBlLCAweGU3LCAweDIyLAorCTB4M2IsIDB4YTIsIDB4MWYsIDB4MzYsIDB4YzMsIDB4MzksIDB4ZmEsIDB4NWIsIDB4MWQsIDB4ZjUsIDB4MTIsIDB4ZmIsCisJMHhjMCwgMHhiMywgMHhkYywgMHg2YSwgMHg0YiwgMHhkMSwgMHgzMywgMHgyOSwgMHhhNywgMHgxNywgMHgyMywgMHhiZiwKKwkweDA1LCAweDlmLCAweDMyLCAweDY0LCAweDg2LCAweGJlLCAweGJmLCAweDEzLCAweGJlLCAweGFmLCAweDViLCAweGY2LAorCTB4YzIsIDB4NjcsIDB4ZWQsIDB4ODMsIDB4Y2YsIDB4ZGEsIDB4OGYsIDB4MWEsIDB4NzUsIDB4N2MsIDB4YTUsIDB4ZjUsCisJMHgzZSwgMHg5NywgMHg3NSwgMHg3MSwgMHg1NSwgMHgwZSwgMHgyOSwgMHhmOSwgMHg1NywgMHg3YywgMHhjMywgMHhmZSwKKwkweDAwLCAweDNhLCAweGIwLCAweDUzLCAweGU1LCAweDdiLCAweDgxLCAweDRlLCAweGMwLCAweGRmLCAweDNhLCAweDQ5LAorCTB4ZTgsIDB4YzQsIDB4YzYsIDB4N2IsIDB4ZTMsIDB4NjEsIDB4ZDgsIDB4NDYsIDB4NDcsIDB4NDEsIDB4YzUsIDB4ODYsCisJMHg5NSwgMHg4MCwgMHhmNywgMHhkNSwgMHg3YSwgMHhjMCwgMHg3YiwgMHhmOCwgMHg2NSwgMHhlMCwgMHgzNywgMHhhNSwKKwkweGQyLCAweGIwLCAweGE0LCAweDgyLCAweDdkLCAweDJiLCAweGQ4LCAweGI3LCAweDgyLCAweGRhLCAweDcyLCAweGI2LAorCTB4ZDEsIDB4ZmEsIDB4ZWQsIDB4YWEsIDB4MmIsIDB4YTQsIDB4OWQsIDB4YjAsIDB4NTEsIDB4ZGYsIDB4NmEsIDB4MzksCisJMHg3ZiwgMHhmNCwgMHgzYywgMHgwMiwgMHhmZSwgMHgzZiwgMHgwMiwgMHhmZSwgMHgxZiwgMHg0NiwgMHg0ZCwgMHhmNSwKKwkweDAwLCAweDZhLCAweGFhLCAweGZiLCAweDUwLCAweDUzLCAweDFkLCAweDQyLCAweDRkLCAweDM1LCAweDg1LCAweDlhLAorCTB4ZWEsIDB4NmUsIDB4ZjgsIDB4OGYsIDB4M2IsIDB4ZTEsIDB4M2YsIDB4MjYsIDB4ZTEsIDB4M2YsIDB4MjYsIDB4ZDQsCisJMHg5ZCwgMHhkMSwgMHg0MSwgMHg2ZiwgMHhlMywgMHgxZCwgMHg0YSwgMHhiNCwgMHgxNywgMHhkYiwgMHgxYiwgMHgyMiwKKwkweDUwLCAweDgxLCAweGYyLCAweGIxLCAweDcxLCAweGE5LCAweDM3LCAweDU5LCAweDViLCAweDM5LCAweGVhLCAweDNlLAorCTB4NmMsIDB4ZGEsIDB4OTksIDB4ZDQsIDB4YTYsIDB4OTAsIDB4YmYsIDB4ZGYsIDB4MzMsIDB4YzIsIDB4OWEsIDB4MmIsCisJMHhhOSwgMHgxNSwgMHg1NSwgMHhjZCwgMHg5NSwgMHg3ZCwgMHhjMSwgMHg0NSwgMHg4YSwgMHg4NCwgMHhkYywgMHgwZiwKKwkweDY3LCAweGNlLCAweDllLCAweDJlLCAweDFhLCAweDUxLCAweGJkLCAweGQzLCAweGJiLCAweDVhLCAweGVmLCAweDJjLAorCTB4Y2YsIDB4YjMsIDB4ZGUsIDB4NzksIDB4NzUsIDB4YjUsIDB4ZGUsIDB4NTksIDB4OWUsIDB4NjcsIDB4YmQsIDB4ZjMsCisJMHhjYSwgMHhiYSwgMHg3YSwgMHhlNywgMHhjYSwgMHhkMywgMHg5NywgMHhkNiwgMHhkNSwgMHgzYiwgMHg1NywgMHg5ZSwKKwkweDdlLCAweDI5LCAweDFjLCAweDRiLCAweGE4LCAweDBmLCAweDIxLCAweGFkLCAweDk2LCAweDgzLCAweDY3LCAweDRmLAorCTB4OTgsIDB4NzMsIDB4MzQsIDB4ZmIsIDB4ZDYsIDB4ZmYsIDB4ZGYsIDB4NzQsIDB4Y2EsIDB4OTYsIDB4MzUsIDB4YjEsCisJMHhmZiwgMHg2OCwgMHg2YiwgMHg1MCwgMHgyMywgMHhiNSwgMHhjZSwgMHg3NywgMHhiNywgMHhjYywgMHg1ZiwgMHg1NiwKKwkweGRmLCAweDRiLCAweGNiLCAweGI1LCAweGNkLCAweGVmLCAweGMyLCAweDAzLCAweGNiLCAweGNhLCAweDEwLCAweGYzLAorCTB4YmMsIDB4MGYsIDB4N2MsIDB4N2UsIDB4ZjMsIDB4NzMsIDB4ZjUsIDB4MGUsIDB4ZjUsIDB4Y2QsIDB4Y2QsIDB4NTUsCisJMHhmOSwgMHgzNiwgMHhlYywgMHg3YywgMHhmNCwgMHhkMSwgMHhhZCwgMHg4MSwgMHgyZiwgMHg2MCwgMHgzZiwgMHhhNSwKKwkweDA1LCAweGZlLCAweGZkLCAweDAxLCAweGUwLCAweDAxLCAweGFmLCAweDNkLCAweDUzLCAweGRkLCAweDA3LCAweDA1LAorCTB4ZTcsIDB4MGQsIDB4ZWUsIDB4YzYsIDB4Y2QsIDB4ZmMsIDB4ZTUsIDB4MTksIDB4ZTYsIDB4ZDYsIDB4NTUsIDB4ODUsCisJMHg5YiwgMHhmNSwgMHgyMywgMHg2YiwgMHhjZSwgMHgyOCwgMHgwNiwgMHg0NCwgMHhiOCwgMHg1ZSwgMHg0ZCwgMHgwNSwKKwkweDc0LCAweGJiLCAweGE4LCAweDFkLCAweGI5LCAweDI2LCAweDFhLCAweGI3LCAweGQ2LCAweDlhLCAweDlkLCAweGUxLAorCTB4YmQsIDB4ZGIsIDB4ZTUsIDB4MjAsIDB4YWYsIDB4NTIsIDB4ZjgsIDB4Y2MsIDB4MTAsIDB4ZGYsIDB4Y2YsIDB4ZmQsCisJMHhjMCwgMHhmNywgMHgxMCwgMHhkZSwgMHg2YSwgMHg4MSwgMHgxZiwgMHg0NywgMHhhZSwgMHhjNywgMHg3YiwgMHgxYSwKKwkweGU2LCAweDZjLCAweGE2LCAweGJjLCAweDMzLCAweGRmLCAweDI1LCAweGZmLCAweDc5LCAweGQ0LCAweGY3LCAweDI3LAorCTB4OWMsIDB4ZWMsIDB4ZjAsIDB4MjUsIDB4ZDQsIDB4MWUsIDB4MjcsIDB4NjksIDB4MjcsIDB4YTMsIDB4YTQsIDB4NzMsCisJMHgzMCwgMHgzMywgMHgyYiwgMHhhOSwgMHgzZSwgMHhkMiwgMHg3MiwgMHg1ZSwgMHgzZiwgMHhhYywgMHg3ZCwgMHg5OCwKKwkweDZlLCAweDNkLCAweGRjLCAweGU3LCAweDFmLCAweDViLCAweGY2LCAweGM5LCAweGI0LCAweGVjLCAweDUzLCAweGEwLAorCTB4Y2QsIDB4ZDYsIDB4ZWYsIDB4YzAsIDB4OTksIDB4MmIsIDB4ZGIsIDB4YWYsIDB4YjcsIDB4NTIsIDB4NjEsIDB4NWQsCisJMHhmNiwgMHhmMCwgMHhlOCwgMHg2NiwgMHg1OSwgMHhlOCwgMHhjZiwgMHg5ZSwgMHg3ZCwgMHgwNSwgMHhmOSwgMHg3YSwKKwkweDc5LCAweDE0LCAweDczLCAweGE5LCAweDQxLCAweGJjLCAweGUzLCAweDdjLCAweGI2LCAweDhlLCAweDVjLCAweGY0LAorCTB4NmMsIDB4NWQsIDB4YjYsIDB4MDEsIDB4M2UsIDB4NWIsIDB4MTEsIDB4ZTEsIDB4M2MsIDB4ZmIsIDB4OGEsIDB4YjYsCisJMHg3YSwgMHhlOCwgMHgwMywgMHhkMiwgMHgxNywgMHg3MCwgMHhlNiwgMHgyOSwgMHhkNCwgMHg1ZiwgMHg4NywgMHg4MywKKwkweDdiLCAweGI0LCAweDcwLCAweDlmLCAweDFiLCAweGI1LCAweDIwLCAweDZmLCAweGNlLCAweDY5LCAweDk1LCAweGYwLAorCTB4MGUsIDB4ZjAsIDB4MmIsIDB4ZjAsIDB4MTcsIDB4ODYsIDB4NGUsIDB4ZDgsIDB4NzcsIDB4ODAsIDB4NWIsIDB4OTMsCisJMHhhNSwgMHhhMywgMHg4NiwgMHhiYSwgMHgzYiwgMHgyZCwgMHg4ZiwgMHg1MiwgMHhkNiwgMHg3YywgMHg3ZSwgMHgxNCwKKwkweGVmLCAweGEyLCAweDMzLCAweGZkLCAweDRkLCAweDc4LCAweGE2LCAweGQxLCAweGIwLCAweDZlLCAweDhmLCAweGNlLAorCTB4OTQsIDB4OTAsIDB4ZDcsIDB4ZTcsIDB4MmQsIDB4YzAsIDB4OGUsIDB4ODAsIDB4MWYsIDB4MjUsIDB4NTksIDB4NjksCisJMHg2NiwgMHgzZSwgMHgwNSwgMHg0ZiwgMHhhZCwgMHg4NSwgMHgzNywgMHhlNiwgMHgwNiwgMHgxOSwgMHg0NiwgMHg3NSwKKwkweDBmLCAweDc4LCAweDMwLCAweDkxLCAweDg2LCAweDFkLCAweGRlLCAweGQ3LCAweDE3LCAweGRkLCAweGU5LCAweDFhLAorCTB4YjYsIDB4YWUsIDB4MDUsIDB4NzUsIDB4M2MsIDB4ZTcsIDB4MDcsIDB4NjAsIDB4OGIsIDB4MTksIDB4ZDgsIDB4MjcsCisJMHg3MywgMHhhNiwgMHgxMiwgMHg2YiwgMHgxNSwgMHhkYSwgMHg5MywgMHhlNSwgMHgxYSwgMHg1OSwgMHg2YiwgMHg1MiwKKwkweDg2LCAweDUxLCAweGVmLCAweGYwLCAweGZjLCAweDc5LCAweDU5LCAweDZlLCAweDQ2LCAweDM0LCAweGU0LCAweDYwLAorCTB4OGYsIDB4NjMsIDB4ZjgsIDB4OGQsIDB4ZTAsIDB4OWQsIDB4ODMsIDB4MWYsIDB4NmIsIDB4YTUsIDB4ODIsIDB4N2MsCisJMHg1NSwgMHhlNSwgMHhlMiwgMHhjOCwgMHhiNSwgMHg4NywgMHg0OCwgMHhkZiwgMHgwMSwgMHhhYywgMHhhNywgMHgzZSwKKwkweDUzLCAweDRmLCAweDBmLCAweDg4LCAweGRiLCAweDRmLCAweDVmLCAweDkxLCAweDA2LCAweDZlLCAweGMwLCAweDc4LAorCTB4YWYsIDB4YzEsIDB4ZDYsIDB4MDcsIDB4ZjAsIDB4Y2MsIDB4NWEsIDB4NjUsIDB4ZjIsIDB4NTYsIDB4ZTEsIDB4ZjcsCisJMHg3ZCwgMHgyMywgMHhjNywgMHg2ZiwgMHgxMSwgMHhlMywgMHhlMSwgMHg3OCwgMHhkMCwgMHhmYSwgMHgxZCwgMHhlYSwKKwkweDVlLCAweGZhLCAweDVhLCAweDM5LCAweGJiLCAweDE4LCAweGM1LCAweGMxLCAweDE5LCAweGQ4LCAweDIwLCAweGVmLAorCTB4NjgsIDB4YzcsIDB4YzEsIDB4MTcsIDB4OGUsIDB4YjUsIDB4MzAsIDB4MWUsIDB4NjIsIDB4N2UsIDB4ZjksIDB4YWYsCisJMHg3MCwgMHhlZSwgMHhiYywgMHg5YywgMHg0NCwgMHhmZCwgMHgyZiwgMHhmZCwgMHg3YywgMHg2NiwgMHg4MCwgMHg3ZiwKKwkweDRiLCAweGE4LCAweGVmLCAweGViLCAweGUxLCAweDBkLCAweDliLCAweGZkLCAweDcxLCAweGQwLCAweDY3LCAweGI2LAorCTB4YzAsIDB4MTMsIDB4MjYsIDB4YWMsIDB4NGYsIDB4MDQsIDB4ZjEsIDB4MzgsIDB4ZWQsIDB4ZGYsIDB4YWEsIDB4ZTcsCisJMHhlZiwgMHg5NiwgMHgzZiwgMHg1MCwgMHg2NywgMHhjYSwgMHhjYiwgMHhhMSwgMHg0NSwgMHhkZiwgMHg3NywgMHg3MywKKwkweDgzLCAweGMzLCAweGNiLCAweDkyLCAweDFkLCAweDdlLCAweDUyLCAweDc2LCAweDViLCAweDdiLCAweDU5LCAweDhmLAorCTB4NTksIDB4YzQsIDB4ZTMsIDB4ZGYsIDB4ZGEsIDB4OTYsIDB4ZjcsIDB4ZmQsIDB4MTMsIDB4YTAsIDB4ZmQsIDB4MDcsCisJMHg2YSwgMHg5ZiwgMHhiYiwgMHg0MSwgMHgzZiwgMHg3OCwgMHhhNSwgMHg2YSwgMHgxMiwgMHhkMiwgMHgwYSwgMHhkZSwKKwkweGE0LCAweDQ4LCAweDZmLCAweGE3LCAweDFjLCAweDZhLCAweDNlLCAweDFmLCAweGNhLCAweGU2LCAweDExLCAweDcxLAorCTB4YmQsIDB4YjcsIDB4MGQsIDB4ZGUsIDB4NmYsIDB4OTcsIDB4OWIsIDB4OGYsIDB4ODYsIDB4YjQsIDB4ZTUsIDB4NDEsCisJMHgyZiwgMHhmNiwgMHg2ZiwgMHhmZSwgMHg0MywgMHg4YSwgMHhiZSwgMHg4MSwgMHgzMiwgMHg3NywgMHg5MSwgMHgzNSwKKwkweGJhLCAweGEzLCAweGNmLCAweDQwLCAweDA3LCAweDNmLCAweGNlLCAweDBmLCAweDI0LCAweDY1LCAweGJkLCAweDFmLAorCTB4MjAsIDB4NWMsIDB4ZjIsIDB4MjMsIDB4NzQsIDB4ODUsIDB4NzQsIDB4ODgsIDB4ZjIsIDB4OWYsIDB4MmEsIDB4NmUsCisJMHgyOSwgMHg3YywgMHhjNiwgMHgwNiwgMHg1ZiwgMHhmMCwgMHhhNCwgMHg3YSwgMHg5ZSwgMHgzNywgMHhlOCwgMHg5YiwKKwkweDE4LCAweGZmLCAweGE4LCAweGMzLCAweGRkLCAweGYwLCAweDdmLCAweGQwLCAweDQxLCAweGQ4LCAweDcxLCAweDcxLAorCTB4OTEsIDB4ZjcsIDB4MTMsIDB4NDMsIDB4ZWEsIDB4NGUsIDB4YWIsIDB4MDQsIDB4ZDksIDB4MmUsIDB4ZjEsIDB4M2IsCisJMHg2MywgMHgyYSwgMHhjOCwgMHgyNywgMHg4MywgMHhmYSwgMHgyYiwgMHg0MywgMHg1ZiwgMHg4OCwgMHhmNiwgMHhiOCwKKwkweGYyLCAweDkzLCAweDI1LCAweGY1LCAweDVkLCAweDMxLCAweDg5LCAweDM1LCAweDNlLCAweDllLCAweGFkLCAweDdmLAorCTB4MjcsIDB4ZjEsIDB4YTMsIDB4NDIsIDB4ZjAsIDB4NzcsIDB4MTIsIDB4ZTEsIDB4MzcsIDB4ZGUsIDB4N2EsIDB4OTAsCisJMHg0NywgMHgzYywgMHhkOCwgMHgzMCwgMHg2NSwgMHhhYSwgMHgxMSwgMHhmZCwgMHhkZCwgMHgwNCwgMHhlNSwgMHg2MCwKKwkweDRiLCAweGI5LCAweDExLCAweGU1LCAweDBlLCAweDdlLCAweDUwLCAweGQzLCAweGFjLCAweDkzLCAweGU1LCAweGUzLAorCTB4NjEsIDB4NGUsIDB4YzQsIDB4MWEsIDB4ODAsIDB4M2MsIDB4YzQsIDB4NzgsIDB4MzksIDB4OTAsIDB4ZGYsIDB4OTIsCisJMHhiZSwgMHgwMywgMHhmMiwgMHgwMywgMHhjZiwgMHgzZCwgMHgxMywgMHhiNiwgMHg5NCwgMHgwZSwgMHhlMywgMHhiYSwKKwkweGM1LCAweDFhLCAweDMzLCAweGFjLCAweDdiLCAweGI3LCAweDRiLCAweDc1LCAweDkyLCAweGVmLCAweDEzLCAweGYyLAorCTB4ZGEsIDB4ZmMsIDB4NDAsIDB4NzAsIDB4NGYsIDB4MjQsIDB4ODksIDB4ZjAsIDB4M2QsIDB4YzcsIDB4NDksIDB4MjksCisJMHhhYiwgMHhmNywgMHg3NywgMHg4NiwgMHhmOCwgMHg1MCwgMHhhNywgMHhkZCwgMHgxOSwgMHg4ZCwgMHhkMywgMHg5MCwKKwkweDYzLCAweDAwLCAweDM3LCAweDhkLCAweDU4LCAweGY2LCAweDU1LCAweGM0LCAweGIxLCAweDY5LCAweGYwLCAweGJkLAorCTB4MzgsIDB4NTEsIDB4OTEsIDB4NmIsIDB4NmQsIDB4NGIsIDB4YzUsIDB4N2QsIDB4MzcsIDB4NDksIDB4MWQsIDB4YTMsCisJMHg3ZSwgMHgxMSwgMHhhNiwgMHgwNywgMHhiOSwgMHgyYSwgMHhjZSwgMHgzYiwgMHgyYSwgMHg1MywgMHg0NiwgMHhmZSwKKwkweGRkLCAweGRiLCAweGNhLCAweGI1LCAweGFjLCAweDU1LCAweDkwLCAweGY3LCAweDdkLCAweGQ3LCAweGU0LCAweGY4LAorCTB4ZmMsIDB4NmQsIDB4MGYsIDB4MDYsIDB4NzcsIDB4ZmUsIDB4YmEsIDB4OWUsIDB4YmYsIDB4NzgsIDB4NWIsIDB4MzksCisJMHhlOCwgMHhlMywgMHhjYywgMHhlZiwgMHg4NiwgMHg3ZCwgMHhjMiwgMHgxOSwgMHhlYSwgMHg3YiwgMHhlYywgMHg0ZiwKKwkweDZlLCAweDMyLCAweGU1LCAweGMyLCAweDRkLCAweGJlLCAweDdmLCAweDBmLCAweGJmLCAweDA5LCAweDg1LCAweDc1LAorCTB4YWMsIDB4YTUsIDB4ZWEsIDB4ZDgsIDB4MGUsIDB4OTUsIDB4OGYsIDB4YjgsIDB4YTMsIDB4MTksIDB4YWQsIDB4MDQsCisJMHhkYiwgMHgzZCwgMHhlOSwgMHhhMSwgMHhlNiwgMHhkMSwgMHhiMywgMHg2MywgMHhlNywgMHg3NSwgMHgwYiwgMHhmMSwKKwkweDM3LCAweDliLCAweDM5LCAweDJlLCAweGI5LCAweDNlLCAweDdlLCAweDYzLCAweDllLCAweDczLCAweGI4LCAweDY2LAorCTB4NWIsIDB4NzAsIDB4ZWYsIDB4NzUsIDB4ODMsIDB4YWIsIDB4N2MsIDB4YWUsIDB4NDgsIDB4MTgsIDB4ODcsIDB4NmUsCisJMHg2OCwgMHhiNSwgMHg4ZiwgMHhkNiwgMHgzYywgMHg5MywgMHg3NiwgMHgyMSwgMHg1MywgMHgyNiwgMHhlOCwgMHhhOSwKKwkweGQ2LCAweGEyLCAweDljLCAweDhkLCAweDdmLCAweDBmLCAweDcwLCAweGZlLCAweGI2LCAweGE3LCAweDFhLCAweDE3LAorCTB4NmYsIDB4OWIsIDB4ODUsIDB4N2MsIDB4NzgsIDB4YTYsIDB4ZDksIDB4NDYsIDB4YTQsIDB4N2YsIDB4NTEsIDB4ZGQsCisJMHhjMCwgMHgzZSwgMHhlMiwgMHhiZiwgMHg4NywgMHhmOCwgMHhlZiwgMHgyMSwgMHhmZSwgMHg3YiwgMHg4OCwgMHhmZiwKKwkweDFlLCAweGUyLCAweGJmLCAweDg3LCAweGY4LCAweDBmLCAweDFlLCAweDNlLCAweDA3LCAweDdkLCAweDc5LCAweGQ2LAorCTB4OWIsIDB4MDgsIDB4NzMsIDB4YjYsIDB4YzcsIDB4NTYsIDB4NzMsIDB4MzYsIDB4ZmUsIDB4Y2QsIDB4Y2IsIDB4YjksCisJMHhhNiwgMHhhMiwgMHhhNSwgMHg1MiwgMHg5MSwgMHgyMCwgMHhlNywgMHgxNSwgMHg5ZCwgMHhmOSwgMHg0ZCwgMHg5NCwKKwkweGYzLCAweDdlLCAweGY0LCAweGY3LCAweDkwLCAweDAwLCAweDhlLCAweGY5LCAweDFlLCAweGUxLCAweDJhLCAweDlhLAorCTB4NmUsIDB4MTMsIDB4MmUsIDB4YzgsIDB4ZjksIDB4NTgsIDB4NjcsIDB4YWQsIDB4ODcsIDB4ZTEsIDB4NzcsIDB4MzcsCisJMHhmYSwgMHhiNiwgMHhlMCwgMHg5YiwgMHg0ZiwgMHhmMCwgMHg3ZCwgMHhhOSwgMHg3NiwgMHg4NywgMHg4YiwgMHg1OCwKKwkweDVjLCAweDZlLCAweGE4LCAweDc4LCAweDhjLCAweDcxLCAweGUzLCAweDBlLCAweGZlLCAweGFkLCAweDAyLCAweDY0LAorCTB4YzAsIDB4NzcsIDB4NWYsIDB4NjYsIDB4NmQsIDB4NTEsIDB4NmUsIDB4MjAsIDB4MmYsIDB4NWEsIDB4OGUsIDB4NzIsCisJMHgyMSwgMHhjMCwgMHg3OSwgMHg2ZiwgMHg2YSwgMHhhNSwgMHgwNSwgMHhjYSwgMHg1OSwgMHg5NywgMHhkOSwgMHgxNCwKKwkweDk4LCAweDYyLCAweGI3LCAweGU2LCAweDc4LCAweDk3LCAweDU0LCAweGJkLCAweDc0LCAweGI2LCAweDQ5LCAweDdhLAorCTB4NDYsIDB4NDAsIDB4NWIsIDB4NzQsIDB4OGYsIDB4MmMsIDB4NjIsIDB4Y2MsIDB4YTcsIDB4NDQsIDB4OWYsIDB4NDcsCisJMHg3ZSwgMHg2YiwgMHgwZiwgMHhhOSwgMHhiZiwgMHg2ZiwgMHhlOCwgMHhjNSwgMHgzZSwgMHhmYSwgMHhmYywgMHg4ZSwKKwkweDk2LCAweDdiLCAweDVhLCAweDI5LCAweDA0LCAweDNlLCAweDliLCAweGIxLCAweDg3LCAweGU3LCAweDQ4LCAweGMxLAorCTB4NzYsIDB4ZGQsIDB4NmQsIDB4MzgsIDB4MWIsIDB4ZTQsIDB4ZmEsIDB4YWYsIDB4NWIsIDB4NTUsIDB4MGUsIDB4MGUsCisJMHgzZiwgMHg3YSwgMHg2MiwgMHhhOCwgMHhiZiwgMHg1ZiwgMHhiYSwgMHhiNywgMHhjYiwgMHhjOSwgMHgyMSwgMHhkNiwKKwkweDZiLCAweDliLCAweDgxLCAweDhmLCAweDZiLCAweDc5LCAweGZmLCAweGI0LCAweDVkLCAweDRlLCAweDJkLCAweGMyLAorCTB4Y2YsIDB4MmUsIDB4NjYsIDB4MWQsIDB4ZWEsIDB4ZjIsIDB4ZDIsIDB4NTAsIDB4MGEsIDB4ZmUsIDB4ZjksIDB4ZTYsCisJMHg3ZSwgMHhjNiwgMHhlNywgMHhlNSwgMHgyNiwgMHg3NSwgMHhhNSwgMHgxNywgMHhmMCwgMHgwMywgMHhkMCwgMHhjYiwKKwkweDRkLCAweGIwLCAweDI3LCAweDFkLCAweGZiLCAweDQ3LCAweGI4LCAweGZmLCAweDQ1LCAweGUxLCAweGVlLCAweGI1LAorCTB4OWQsIDB4NmQsIDB4NGEsIDB4MzcsIDB4ZjQsIDB4YWMsIDB4OTUsIDB4ZDEsIDB4NDEsIDB4ZmIsIDB4ZmYsIDB4MTQsCisJMHg2ZSwgMHg2ZCwgMHgzMSwgMHg3MSwgMHg1YywgMHg2NywgMHhmOCwgMHgzZiwgMHhiMywgMHhkYywgMHg4YywgMHhkNywKKwkweDMwLCAweDg2LCAweGY1LCAweGIyLCAweDU4LCAweGFlLCAweGJhLCAweDAzLCAweDYzLCAweDMzLCAweGQxLCAweDYyLAorCTB4NjUsIDB4YjAsIDB4ZWMsIDB4MTYsIDB4NTUsIDB4OTYsIDB4YmEsIDB4ZGEsIDB4MDUsIDB4NDIsIDB4ZTIsIDB4M2EsCisJMHhkZCwgMHgyNCwgMHhiNCwgMHg3MiwgMHhkNSwgMHgyYSwgMHg0MiwgMHg2MCwgMHgzNywgMHg4ZSwgMHhmYSwgMHhkMiwKKwkweDQ2LCAweDU1LCAweGRiLCAweDM3LCAweGFmLCAweDE2LCAweGVjLCAweDM4LCAweGNkLCAweGFjLCAweDE3LCAweDM3LAorCTB4MzgsIDB4ZjQsIDB4NzEsIDB4YjMsIDB4MmMsIDB4MGUsIDB4OTAsIDB4NzUsIDB4NTYsIDB4NmUsIDB4ZjIsIDB4OTAsCisJMHgzZSwgMHgxOSwgMHg2ZCwgMHhhMiwgMHgyNCwgMHg1NSwgMHhhNSwgMHhiYywgMHg1NCwgMHg3ZCwgMHhhYiwgMHg1YSwKKwkweDBiLCAweDI3LCAweGM0LCAweDBmLCAweGE5LCAweGFkLCAweGY2LCAweGE1LCAweDc3LCAweDRkLCAweGJmLCAweGVmLAorCTB4Y2MsIDB4MmMsIDB4YzYsIDB4YTQsIDB4NTEsIDB4OTEsIDB4NTYsIDB4NzMsIDB4ZTYsIDB4Y2MsIDB4YjksIDB4OWYsCisJMHhmZiwgMHhmMiwgMHhmZCwgMHgxNywgMHgzZSwgMHg2NywgMHg2NywgMHhiYSwgMHhjMiwgMHhiZCwgMHhjZCwgMHg5NSwKKwkweDc2LCAweGM2LCAweGZlLCAweGI2LCAweGQ0LCAweGNjLCAweDAyLCAweGYzLCAweDFhLCAweDg2LCAweDY0LCAweGRjLAorCTB4NjQsIDB4YWUsIDB4Y2YsIDB4OTYsIDB4M2EsIDB4NTcsIDB4NjYsIDB4MWIsIDB4MWIsIDB4NjUsIDB4ZGEsIDB4ZTQsCisJMHg0YiwgMHg2YSwgMHhhNiwgMHhkYywgMHgyMywgMHgxNywgMHg0MSwgMHhjNywgMHg4NSwgMHhlMSwgMHhkNiwgMHhkMCwKKwkweGY3LCAweGRhLCAweDE5LCAweGYyLCAweDczLCAweDc3LCAweDNjLCAweGQ0LCAweDU3LCAweDFhLCAweDU3LCAweDE2LAorCTB4MzQsIDB4YjYsIDB4ZWUsIDB4ZGUsIDB4ZjUsIDB4ZWQsIDB4NDksIDB4YWMsIDB4MjksIDB4NDEsIDB4NWYsIDB4NzksCisJMHg1YywgMHhjYiwgMHgyNiwgMHg4MywgMHhlZiwgMHg3ZCwgMHhiYiwgMHhkZSwgMHhlMywgMHhiYiwgMHhkZSwgMHgwZiwKKwkweGZjLCAweDhmLCAweGY2LCAweDJjLCAweGVmLCAweGE2LCAweDA3LCAweGFlLCAweGQzLCAweDFhLCAweGU1LCAweDJjLAorCTB4MDUsIDB4Y2YsIDB4MzYsIDB4NjYsIDB4M2QsIDB4MmIsIDB4NGQsIDB4NWMsIDB4OTAsIDB4MTUsIDB4NWYsIDB4NjUsCisJMHhkZCwgMHgzNiwgMHhjOCwgMHhiYiwgMHgzNiwgMHg5OSwgMHg1ZiwgMHgwNCwgMHhjZCwgMHg2MywgMHgxZiwgMHhlZCwKKwkweDM2LCAweDYzLCAweGU0LCAweDQzLCAweDcxLCAweGYyLCAweDRjLCAweDA3LCAweGFlLCAweGMxLCAweGIwLCAweDA3LAorCTB4MTMsIDB4NjgsIDB4ZTcsIDB4M2YsIDB4ZWYsIDB4YTYsIDB4Y2MsIDB4YjMsIDB4ZGEsIDB4OTcsIDB4NDMsIDB4M2MsCisJMHhlMywgMHhhYiwgMHg4MiwgMHhjZSwgMHhmNywgMHg2MCwgMHg5YiwgMHgxNiwgMHhiOSwgMHg2MywgMHg2NywgMHg3YSwKKwkweGMyLCAweDdjLCAweDIwLCAweGQ4LCAweGJlLCAweDVmLCAweDhkLCAweDEzLCAweDZiLCAweDNjLCAweGU3LCAweDZlLAorCTB4ZDcsIDB4OTksIDB4OWIsIDB4YzIsIDB4MWMsIDB4MmIsIDB4MTAsIDB4Y2QsIDB4NTMsIDB4MjIsIDB4ZTUsIDB4YWEsCisJMHhjOCwgMHhlYiwgMHhmOCwgMHhmZCwgMHhhNiwgMHgxYSwgMHhjNiwgMHg0ZiwgMHgxNCwgMHhlZCwgMHhlZSwgMHg5MywKKwkweGIyLCAweDVlLCAweGZhLCAweDlhLCAweGQ0LCAweGEwLCAweDdmLCAweGQ2LCAweDVjLCAweGRmLCAweGJmLCAweGViLAorCTB4MjYsIDB4ZjUsIDB4OTksIDB4YmYsIDB4ZTgsIDB4MjksIDB4MTksIDB4MTgsIDB4YTEsIDB4N2UsIDB4NmIsIDB4OTMsCisJMHg5NywgMHgxNywgMHg1YiwgMHg2NCwgMHhjMywgMHhiNCwgMHhjYywgMHhiYiwgMHg0NCwgMHgwMSwgMHg1ZSwgMHg0MiwKKwkweDI2LCAweDYzLCAweDExLCAweDhkLCAweDUxLCAweGU1LCAweDViLCAweDIyLCAweDViLCAweGY4LCAweGI2LCAweGI1LAorCTB4ZjgsIDB4NGMsIDB4OWMsIDB4ZmUsIDB4OTcsIDB4NGYsIDB4MTYsIDB4ZjksIDB4NmUsIDB4ZTAsIDB4NjksIDB4NDgsCisJMHhjMywgMHg4ZSwgMHgwMCwgMHhjYiwgMHg0MiwgMHgwOCwgMHg5OSwgMHgzYywgMHg3NywgMHhlZSwgMHhmNywgMHhiYiwKKwkweDVjLCAweDFiLCAweGVhLCAweDY4LCAweGNmLCAweGI2LCAweDQ5LCAweGUxLCAweDMwLCAweDY0LCAweGEyLCAweDFhLAorCTB4ZDQsIDB4MzksIDB4NDcsIDB4OGQsIDB4OTgsIDB4OTYsIDB4ZDEsIDB4OTEsIDB4MGEsIDB4N2QsIDB4ZjgsIDB4ZTYsCisJMHg1ZSwgMHgyZCwgMHhhZiwgMHgzMywgMHgzNywgMHg3ZSwgMHhhNCwgMHhmNywgMHg4MiwgMHg3MiwgMHhiZSwgMHhlMiwKKwkweDkyLCAweDU2LCAweDRkLCAweDU5LCAweDAzLCAweGFmLCAweGFkLCAweGQ2LCAweDVmLCAweGVkLCAweGUzLCAweDVkLAorCTB4YWQsIDB4ZDcsIDB4NWYsIDB4ODgsIDB4MDcsIDB4ZjYsIDB4MWEsIDB4ZWIsIDB4N2UsIDB4MWMsIDB4MGYsIDB4ZWEsCisJMHg5MiwgMHhhMSwgMHhmZCwgMHg0NSwgMHgzYiwgMHhhZCwgMHg4YywgMHhiZCwgMHhiZCwgMHgyMCwgMHhmNSwgMHhhNSwKKwkweDlmLCAweGM5LCAweDNiLCAweGE1LCAweDlmLCAweGM4LCAweGFmLCAweDk3LCAweGNlLCAweDAwLCAweDdmLCAweDU4LAorCTB4ZTUsIDB4M2MsIDB4ZjQsIDB4YzksIDB4Y2QsIDB4YmEsIDB4ZWYsIDB4ZGYsIDB4NzQsIDB4YTcsIDB4NjAsIDB4MmIsCisJMHhmOCwgMHhmZSwgMHhlZiwgMHhkYywgMHgwZCwgMHgxOSwgMHgzOCwgMHhmNiwgMHgzZCwgMHhlYywgMHgzOSwgMHgwNywKKwkweDFlLCAweGEyLCAweDJjLCAweDljLCAweDA0LCAweGJkLCAweGI5LCAweDdkLCAweGQyLCAweDE5LCAweGQ1LCAweDc0LAorCTB4MzIsIDB4NzgsIDB4YWMsIDB4MTUsIDB4N2IsIDB4MzAsIDB4NDIsIDB4NGMsIDB4Y2UsIDB4YmQsIDB4OGMsIDB4ZjQsCisJMHg5MSwgMHg2NiwgMHg4YywgMHg3YSwgMHgwOSwgMHhmMywgMHhiNywgMHg4MiwgMHgyZiwgMHhmNiwgMHhlMiwgMHhhNywKKwkweGU0LCAweGVlLCAweDA4LCAweGQ2LCAweDNhLCAweDQyLCAweGRhLCAweDZiLCAweDk1LCAweDgxLCAweDQ3LCAweGIxLAorCTB4OGYsIDB4NWMsIDB4OGIsIDB4ZGMsIDB4ZjMsIDB4N2UsIDB4MTksIDB4YTcsIDB4NmYsIDB4ZWYsIDB4OWUsIDB4YzcsCisJMHhiMiwgMHhmMSwgMHg5NSwgMHgyZSwgMHhmMSwgMHhhNSwgMHgwNSwgMHhiYSwgMHg3YywgMHhmZSwgMHg3OCwgMHg4MCwKKwkweDliLCAweGRlLCAweDU1LCAweDQzLCAweDY4LCAweDZmLCAweGU3LCAweGRmLCAweDUzLCAweGM0LCAweDc5LCAweDc5LAorCTB4YmYsIDB4MTUsIDB4YjgsIDB4N2MsIDB4MWMsIDB4NzgsIDB4MjgsIDB4NTMsIDB4YmYsIDB4MjAsIDB4OGQsIDB4OTEsCisJMHgyOCwgMHhkYSwgMHgxMCwgMHhhZiwgMHg2OCwgMHg1OSwgMHgyMiwgMHg1OSwgMHg4ZiwgMHgzOSwgMHg1YSwgMHhjYywKKwkweDk3LCAweGMyLCAweDFhLCAweGE3LCAweDc0LCAweDJlLCAweDU3LCAweDFmLCAweGNmLCAweDljLCAweDU4LCAweDNlLAorCTB4YTgsIDB4YjMsIDB4NDEsIDB4MjMsIDB4YWMsIDB4MjMsIDB4N2QsIDB4YTcsIDB4MzUsIDB4YTYsIDB4ODIsIDB4MGUsCisJMHhjNSwgMHg3OCwgMHhjMywgMHg5MiwgMHhkMSwgMHhlNSwgMHgyZSwgMHg4YywgMHg3NywgMHg0MSwgMHgzMiwgMHg2ZSwKKwkweDczLCAweGNjLCAweDUxLCAweGI0LCAweGExLCAweDljLCAweDE5LCAweDA1LCAweDk2LCAweGY4LCAweDU4LCAweDhkLAorCTB4MmQsIDB4YzYsIDB4YTAsIDB4Y2IsIDB4ZTMsIDB4MzIsIDB4NjYsIDB4ZWUsIDB4ZDksIDB4YjEsIDB4YzcsIDB4YmMsCisJMHhiNiwgMHgxNSwgMHgwYywgMHg2MywgMHgzOCwgMHg1YywgMHg1MywgMHhkNywgMHg4ZSwgMHgzNSwgMHhiMSwgMHgzZiwKKwkweDdlLCAweGIwLCAweDkzLCAweDMzLCAweDhiLCAweDBiLCAweDkwLCAweDUzLCAweDBiLCAweDFmLCAweDY2LCAweGRjLAorCTB4NjcsIDB4MjUsIDB4MWIsIDB4NmIsIDB4ZDMsIDB4YjYsIDB4NGQsIDB4MDUsIDB4ZjcsIDB4OTIsIDB4ZjUsIDB4ZTgsCisJMHhkMywgMHhmYSwgMHgwZSwgMHhlNCwgMHhkMCwgMHg5ZSwgMHhiMCwgMHg4ZSwgMHg2ZCwgMHhjNSwgMHhjOCwgMHhlMCwKKwkweGVjLCAweDAzLCAweDFiLCAweDk3LCAweDc1LCAweDVmLCAweDk2LCAweGNjLCAweDQyLCAweDRlLCAweDI2LCAweDc0LAorCTB4M2YsIDB4OWUsIDB4ZTEsIDB4NDEsIDB4OGQsIDB4NDMsIDB4YzgsIDB4YWIsIDB4MDMsIDB4YmQsIDB4MzgsIDB4Y2IsCisJMHhkNCwgMHgwMywgMHg3YiwgMHgzOCwgMHhkOSwgMHg0YiwgMHgyZSwgMHhmYSwgMHg0ZiwgMHhjOCwgMHhiMywgMHhmOCwKKwkweGQ2LCAweGNiLCAweDNiLCAweDZhLCAweDkzLCAweDgxLCAweDY3LCAweGEwLCAweDJmLCAweGJkLCAweDY2LCAweDdkLAorCTB4NTQsIDB4M2UsIDB4ZjMsIDB4ZmMsIDB4MzgsIDB4NjMsIDB4MmUsIDB4N2YsIDB4ZjYsIDB4NGMsIDB4ZjksIDB4YzQsCisJMHhkMywgMHhiMSwgMHhkOCwgMHhlOSwgMHg4OCwgMHg1OCwgMHhlNywgMHgwMywgMHg1YiwgMHhmZCwgMHhmMCwgMHhmNCwKKwkweGJjLCAweGUyLCAweGY3LCAweGMzLCAweGU3LCAweDU3LCAweDU0LCAweDA3LCAweGRhLCAweDQ2LCAweGQxLCAweDhlLAorCTB4ZWIsIDB4MzAsIDB4NjUsIDB4ZGMsIDB4ZmIsIDB4YWIsIDB4M2YsIDB4NzMsIDB4YzQsIDB4ZjcsIDB4MjcsIDB4NzQsCisJMHg0ZSwgMHg1OCwgMHhjYSwgMHg5YywgMHg1NywgMHg0ZCwgMHg3YywgMHhlZSwgMHg4OCwgMHgxNywgMHg2YiwgMHhjNywKKwkweDVjLCAweDI5LCAweDczLCAweDQ1LCAweDFkLCAweGM2LCAweDdhLCAweDU4LCAweGVlLCAweDI1LCAweDRmLCAweDI0LAorCTB4MzYsIDB4ODQsIDB4ZTMsIDB4NWIsIDB4OTMsIDB4Y2IsIDB4MmEsIDB4OTUsIDB4MWMsIDB4NTQsIDB4NTYsIDB4YmEsCisJMHg4MCwgMHg1ZiwgMHg4YiwgMHhkMiwgMHg3MSwgMHhjYywgMHg0NCwgMHg1MiwgMHg4MSwgMHg3NywgMHhiMSwgMHgyNywKKwkweGZiLCAweGE4LCAweGVmLCAweDRmLCAweGRhLCAweGFjLCAweDRmLCAweDk5LCAweDUxLCAweDQ1LCAweGRmLCAweDRiLAorCTB4YTcsIDB4OGUsIDB4NzcsIDB4NWUsIDB4M2UsIDB4OTAsIDB4MzIsIDB4OGYsIDB4YWEsIDB4ZmQsIDB4ZTEsIDB4ZmIsCisJMHgyOCwgMHg2NCwgMHhlNiwgMHhmNiwgMHg3OCwgMHg2NywgMHg5NiwgMHg5NSwgMHgyOSwgMHgyZiwgMHg3OSwgMHhhOSwKKwkweGU0LCAweGFjLCAweGIyLCAweDcyLCAweDE4LCAweDMzLCAweDM3LCAweGE2LCAweDI4LCAweDM3LCAweDUyLCAweDY2LAorCTB4YTcsIDB4YTIsIDB4N2YsIDB4YjQsIDB4NWQsIDB4ZWYsIDB4N2IsIDB4MTIsIDB4ZmQsIDB4NTMsIDB4YWEsIDB4MjUsCisJMHg1YywgMHgwZiwgMHhlZiwgMHhlYiwgMHg0YSwgMHg1ZiwgMHhjMCwgMHgzMywgMHg5NCwgMHgzOSwgMHhmZCwgMHhjNiwKKwkweGNjLCAweDAyLCAweGYzLCAweGNiLCAweDc0LCAweDVlLCAweDQzLCAweDdhLCAweGUwLCAweDE4LCAweGRmLCAweDBkLAorCTB4YjksIDB4N2YsIDB4ZTIsIDB4NmYsIDB4YTgsIDB4NDMsIDB4YjksIDB4Y2MsIDB4M2EsIDB4MjcsIDB4ZTQsIDB4YjcsCisJMHgyMywgMHgxYSwgMHgzZiwgMHhkZiwgMHgzZiwgMHg5MSwgMHhkNywgMHhiOSwgMHg4YiwgMHgwZCwgMHgzNSwgMHgxMCwKKwkweGVlLCAweDdiLCAweGZiLCAweGNlLCAweDkyLCAweDE5LCAweGY3LCAweDRiLCAweDFjLCAweDY3LCAweDIxLCAweDcyLAorCTB4YjIsIDB4NWQsIDB4OTgsIDB4MjMsIDB4M2EsIDB4NWUsIDB4NmEsIDB4ZDIsIDB4MDYsIDB4N2QsIDB4MDMsIDB4Y2MsCisJMHgxNSwgMHg2OCwgMHhjNiwgMHhkZCwgMHgyZiwgMHg4OCwgMHg3MSwgMHhhYywgMHg2MywgMHgwNywgMHg5ZCwgMHgwMCwKKwkweDc3LCAweDAyLCAweGFmLCAweDU2LCAweDMxLCAweDRlLCAweDYxLCAweDUxLCAweGYyLCAweDQxLCAweDdmLCAweGU5LAorCTB4NjAsIDB4NGUsIDB4NmEsIDB4YTEsIDB4ZmEsIDB4NDUsIDB4NjMsIDB4MDQsIDB4M2EsIDB4NzAsIDB4MWMsIDB4ZWYsCisJMHhmNywgMHg0ZiwgMHg5MCwgMHgzZSwgMHg3OSwgMHgzNiwgMHg0OSwgMHgzNSwgMHhiZSwgMHhjNCwgMHhmNSwgMHgxYywKKwkweDk0LCAweDg5LCAweDQ1LCAweDYwLCAweDIzLCAweGZjLCAweGU2LCAweDE3LCAweDgzLCAweDdiLCAweGJiLCAweDBlLAorCTB4OWMsIDB4M2QsIDB4ZTEsIDB4OTksIDB4OWEsIDB4NWYsIDB4NjcsIDB4NWQsIDB4YzYsIDB4NGYsIDB4YzAsIDB4MmIsCisJMHgzYSwgMHg4ZiwgMHg4YSwgMHg3ZCwgMHg5OSwgMHg0YiwgMHg3OCwgMHg4OCwgMHhmYSwgMHhkMSwgMHg2ZCwgMHg0OCwKKwkweDBjLCAweDZkLCAweDg5LCAweDU5LCAweDU5LCAweDZmLCAweDhkLCAweDI2LCAweDIzLCAweGRkLCAweDMyLCAweDBmLAorCTB4NzksIDB4NTcsIDB4ODEsIDB4ZWUsIDB4MmMsIDB4NWMsIDB4ODksIDB4Y2EsIDB4YWMsIDB4YTcsIDB4ZTMsIDB4ZDksCisJMHhjOSwgMHg4ZiwgMHg5NSwgMHgyYiwgMHhiNSwgMHhmYSwgMHg3MSwgMHhiOSwgMHg1MSwgMHg3NywgMHhmNCwgMHgzNywKKwkweGVhLCAweGI1LCAweGMyLCAweGFiLCAweDg2LCAweDdjLCAweGZmLCAweDg4LCAweGNlLCAweGE1LCAweDczLCAweDJhLAorCTB4ZDIsIDB4ZDksIDB4NGYsIDB4Y2MsIDB4YjMsIDB4YTIsIDB4ZjMsIDB4ZWEsIDB4MjAsIDB4M2IsIDB4ODAsIDB4MzksCisJMHhkZSwgMHgwNiwgMHhlNiwgMHg3OCwgMHgwYiwgMHg5OCwgMHhlMywgMHg1NywgMHhjMCwgMHhkOCwgMHgzNywgMHg0YiwKKwkweDkzLCAweGExLCAweGZjLCAweDlmLCAweDg2LCAweDFjLCAweGEyLCAweGFlLCAweGI2LCAweGNlLCAweGUwLCAweDRlLAorCTB4YTcsIDB4ZjMsIDB4YTAsIDB4YzEsIDB4ZGIsIDB4YjAsIDB4M2YsIDB4ZDYsIDB4NGIsIDB4MTksIDB4NTksIDB4NWQsCisJMHg5YSwgMHg5MCwgMHhiNSwgMHhhNSwgMHgyMCwgMHgwZiwgMHhmOSwgMHgwMywgMHhlNiwgMHg3ZCwgMHg4ZCwgMHhmMCwKKwkweDllLCAweDFjLCAweGM4LCAweGExLCAweDNkLCAweDMyLCAweDcwLCAweDk0LCAweGYyLCAweGEzLCAweDQzLCAweDk2LAorCTB4OGIsIDB4YWIsIDB4NWEsIDB4MGUsIDB4MmQsIDB4MTcsIDB4NTksIDB4OGUsIDB4ODgsIDB4Y2UsIDB4MjEsIDB4OWIsCisJMHhkYSwgMHg5MCwgMHg4YSwgMHg1YiwgMHg0NywgMHhmZCwgMHgzZSwgMHhlZCwgMHgwZiwgMHgwYSwgMHhmYywgMHhmMywKKwkweDk0LCAweDk3LCAweDdmLCAweDBhLCAweGVmLCAweDVlLCAweGU5LCAweGRjLCAweGJhLCAweDE5LCAweGIzLCAweDFiLAorCTB4ZWQsIDB4OWEsIDB4YjIsIDB4NmIsIDB4MzAsIDB4ODgsIDB4YjksIDB4YWIsIDB4ZGIsIDB4NjgsIDB4ODMsIDB4MzksCisJMHg4MCwgMHgxOSwgMHhhZiwgMHg0MywgMHg4NywgMHgzNCwgMHg5YywgMHg2ZSwgMHg4ZCwgMHhmZCwgMHgxYSwgMHhjZSwKKwkweDIxLCAweDlkLCAweDc3LCAweGNiLCAweDcxLCAweDBhLCAweDQ1LCAweDViLCAweGU2LCAweDhhLCAweDU2LCAweDMyLAorCTB4MGYsIDB4ZmEsIDB4YmIsIDB4MDEsIDB4YmIsIDB4NmQsIDB4MTUsIDB4NzcsIDB4YjAsIDB4ODYsIDB4MzMsIDB4NTgsCisJMHhhZiwgMHg1MywgMHhjZiwgMHg2ZiwgMHg2YSwgMHhkOSwgMHhiYiwgMHg1YywgMHhmZiwgMHgyMywgMHhjNiwgMHhiMSwKKwkweGNlLCAweGE0LCAweGU1LCAweDBmLCAweDdkLCAweDk0LCAweDgxLCAweGY0LCAweDRkLCAweDY1LCAweDc1LCAweGZmLAorCTB4YTAsIDB4ZGYsIDB4MmEsIDB4ZGEsIDB4YWUsIDB4ZDUsIDB4MjksIDB4OGYsIDB4NDUsIDB4MmUsIDB4NzksIDB4MzYsCisJMHg3NCwgMHhjOSwgMHhjYiwgMHgwOSwgMHg2MiwgMHg4MCwgMHhiMiwgMHg2YSwgMHhmNiwgMHhmMywgMHhjMywgMHgzNSwKKwkweGZiLCAweGZlLCAweDVlLCAweDliLCAweGViLCAweDcyLCAweDQyLCAweGI5LCAweDRkLCAweGRkLCAweGJmLCAweGExLAorCTB4YjEsIDB4OGQsIDB4NTcsIDB4N2EsIDB4NTYsIDB4ZGUsIDB4YzQsIDB4N2QsIDB4MDcsIDB4MTgsIDB4MjcsIDB4MjcsCisJMHg2ZiwgMHgwMCwgMHhlMywgMHhkNSwgMHg0YiwgMHhjZCwgMHhiYywgMHhlZCwgMHg5MywgMHgzOCwgMHhhNywgMHg5MiwKKwkweDlhLCAweGJiLCAweGRhLCAweDI5LCAweDk3LCAweGFmLCAweDE1LCAweGQ0LCAweDRiLCAweGQ3LCAweDNjLCAweGY1LAorCTB4ZjMsIDB4YWIsIDB4NDUsIDB4NTUsIDB4YjgsIDB4ZWEsIDB4ZmIsIDB4ZmYsIDB4NzAsIDB4NjcsIDB4ZTQsIDB4OWQsCisJMHgyNSwgMHg1ZiwgMHg0ZSwgMHhiYiwgMHg0NiwgMHg3ZiwgMHg0NCwgMHg5YSwgMHhmOSwgMHg3NCwgMHhiZSwgMHhkZiwKKwkweDAxLCAweGQ5LCAweGJjLCAweDdlLCAweGMwLCAweGY3LCAweDFmLCAweDE5LCAweDE5LCAweDExLCAweGU3LCAweDAwLAorCTB4MzEsIDB4Y2EsIDB4NzAsIDB4ODIsIDB4MzksIDB4YWUsIDB4OTQsIDB4MzksIDB4MTksIDB4ZGIsIDB4M2UsIDB4NWYsCisJMHg1MSwgMHgwYSwgMHhmMiwgMHhhZCwgMHgzYiwgMHhjMCwgMHgyZiwgMHg4ZiwgMHhlZSwgMHgwYiwgMHhlMywgMHgyNiwKKwkweDNmLCAweDdjLCAweDllLCAweDdlLCAweGU1LCAweGM0LCAweGU3LCAweGZjLCAweGNhLCAweGE2LCAweDljLCAweDJkLAorCTB4ZjYsIDB4YTIsIDB4N2YsIDB4NGMsIDB4N2UsIDB4NTAsIDB4OGMsIDB4ZWUsIDB4MmEsIDB4OWIsIDB4NzgsIDB4M2EsCisJMHg0NiwgMHhhMSwgMHg3OCwgMHhjZiwgMHgxZiwgMHhkNCwgMHhmMSwgMHgwMywgMHg2MCwgMHgxMiwgMHhkMywgMHhmNywKKwkweDY3LCAweDVkLCAweGNlLCAweGQ3LCAweDhkLCAweGY5LCAweDM2LCAweGNjLCAweDdkLCAweGQwLCAweGZmLCAweGE3LAorCTB4YjUsIDB4N2UsIDB4MmUsIDB4MmIsIDB4ZDgsIDB4YzEsIDB4ZTAsIDB4ZWYsIDB4OTgsIDB4OGMsIDB4MTUsIDB4YTEsCisJMHhlMywgMHgxNSwgMHhmMywgMHg0YywgMHg4OSwgMHgxNSwgMHhhYywgMHhjNCwgMHgyYywgMHg2NCwgMHhjNywgMHgwYywKKwkweGU0LCAweGNkLCAweDI5LCAweDFkLCAweDY3LCAweGVkLCAweGQ1LCAweGIyLCAweDY3LCAweDhlLCAweGU1LCAweDljLAorCTB4YTQsIDB4MmIsIDB4NmUsIDB4OGYsIDB4M2UsIDB4YmYsIDB4Y2QsIDB4MWIsIDB4MmYsIDB4MjYsIDB4ODIsIDB4M2IsCisJMHgwNywgMHgxZiwgMHhlNywgMHg5NCwgMHhiNCwgMHhjMSwgMHgxZSwgMHhjYSwgMHhhZSwgMHg0YywgMHg4MSwgMHgyNywKKwkweDEyLCAweDM4LCAweGRiLCAweDU2LCAweGNkLCAweDBmLCAweDBkLCAweGU4LCAweGVmLCAweDg2LCAweGY2LCAweDI5LAorCTB4MDYsIDB4YjEsIDB4OGIsIDB4ODYsIDB4YzksIDB4NzYsIDB4YTcsIDB4ZDAsIDB4YWYsIDB4NWQsIDB4MzIsIDB4NTcsCisJMHhkYiwgMHhiNCwgMHg1YywgMHg3ZCwgMHhiOCwgMHgyZSwgMHgwZCwgMHgxYywgMHhmMiwgMHgwNCwgMHhjYSwgMHgxMSwKKwkweGQ0LCAweDI1LCAweGMzLCAweGIyLCAweDgxLCAweGYyLCAweDM0LCAweGNhLCAweDJkLCAweDc4LCAweGIyLCAweGNkLAorCTB4NjEsIDB4ZTAsIDB4MGEsIDB4M2MsIDB4NWYsIDB4YzMsIDB4NzgsIDB4MjMsIDB4NTgsIDB4NzMsIDB4Y2UsIDB4OTQsCisJMHg4ZiwgMHg0ZSwgMHg1MCwgMHg5NywgMHgzOCwgMHgwNiwgMHg3MywgMHg5MSwgMHg2NywgMHg2ZCwgMHgzYywgMHg2YiwKKwkweDQ1LCAweDk1LCAweDVkLCAweDYwLCAweDE5LCAweGNmLCAweDcyLCAweGYwLCAweGZkLCAweDIxLCAweDk5LCAweDg0LAorCTB4M2UsIDB4OTksIDB4NmIsIDB4ODEsIDB4NGMsIDB4ZmEsIDB4NjgsIDB4NWIsIDB4MjYsIDB4YjEsIDB4YWUsIDB4NWQsCisJMHhjNiwgMHhhZSwgMHg5MiwgMHhkNywgMHg0ZCwgMHhkMCwgMHg1YiwgMHhhNywgMHg2NCwgMHhhZiwgMHhjNSwgMHgzNCwKKwkweDFlLCAweGFkLCAweDgwLCAweDE2LCAweGFmLCAweDgzLCAweGFlLCAweDk2LCAweDQxLCAweDUzLCAweDk5LCAweGEyLAorCTB4MzUsIDB4M2EsIDB4YWQsIDB4OTIsIDB4ZGEsIDB4MmYsIDB4ZjAsIDB4MzgsIDB4ZTgsIDB4YjUsIDB4ZTMsIDB4MGEsCisJMHhiMSwgMHgyOCwgMHg3OSwgMHhkOSwgMHgwMSwgMHhlZCwgMHg4OSwgMHhkZiwgMHg2MSwgMHhkYiwgMHg5MywgMHg4ZSwKKwkweGIyLCAweDQxLCAweDgzLCAweGEwLCAweGNiLCAweDYyLCAweGMwLCAweGQzLCAweGVmLCAweDI5LCAweDJkLCAweDU3LAorCTB4NDcsIDB4ZWYsIDB4NDgsIDB4MmEsIDB4N2QsIDB4NDcsIDB4MmMsIDB4YzgsIDB4MDIsIDB4Y2IsIDB4ZmQsIDB4NTAsCisJMHg1YywgMHg4YywgMHg3OSwgMHg1YywgMHg1ZSwgMHhjNywgMHgzYywgMHgwNiwgMHhmOCwgMHhmYiwgMHhjOCwgMHg5MCwKKwkweGU2LCAweGVmLCAweDUxLCAweDg5LCAweGVjLCAweGU2LCAweDcxLCAweGQwLCAweDFiLCAweDY0LCAweDUwLCAweGMwLAorCTB4ZDMsIDB4ZTksIDB4OTAsIDB4NDYsIDB4OWYsIDB4MDYsIDB4ZmYsIDB4NWEsIDB4YjAsIDB4Y2EsIDB4OTIsIDB4MzIsCisJMHgwZiwgMHhmZSwgMHhiZiwgMHg4ZSwgMHhlZiwgMHhiNywgMHhlYSwgMHg5ZiwgMHhhYSwgMHhiOSwgMHgwNSwgMHgxNSwKKwkweGU2LCAweGIyLCAweDdjLCAweDFiLCAweDM4LCAweGY5LCAweGY3LCAweDM4LCAweGJiLCAweDJlLCAweDhkLCAweGRkLAorCTB4MDcsIDB4NDYsIDB4MTgsIDB4NGIsIDB4ZmIsIDB4YjcsIDB4YmEsIDB4NmMsIDB4MWYsIDB4OTUsIDB4Y2QsIDB4ZTEsCisJMHhlMywgMHgyOCwgMHhlZiwgMHhjMywgMHhkMywgMHhjMCwgMHgzOSwgMHg0NCwgMHg3NSwgMHgyYywgMHg3YywgMHhkOSwKKwkweDFiLCAweDM2LCAweDBhLCAweDNhLCAweGVmLCAweGUwLCAweDk4LCAweGNlLCAweGNmLCAweDM3LCAweGVjLCAweDAzLAorCTB4ZjgsIDB4NGUsIDB4YmYsIDB4MGMsIDB4ZjcsIDB4MDYsIDB4Y2MsIDB4YTQsIDB4MTIsIDB4M2EsIDB4YzcsIDB4YjQsCisJMHgwMiwgMHgyYywgMHhiMSwgMHg4MiwgMHhmMSwgMHhkZSwgMHhhNywgMHg1ZiwgMHhhZiwgMHgwNiwgMHgxZSwgMHgxZSwKKwkweGZlLCAweGE3LCAweDlmLCAweDhlLCAweDMxLCAweDI3LCAweDdkLCAweDMzLCAweDExLCAweGU4LCAweGJmLCAweGNmLAorCTB4ZmMsIDB4NGQsIDB4N2IsIDB4NmUsIDB4ZDQsIDB4YzAsIDB4Y2IsIDB4NmQsIDB4MzMsIDB4ODYsIDB4YjYsIDB4ZDAsCisJMHg2NSwgMHhkMCwgMHg0NSwgMHg2NSwgMHg0ZCwgMHhiZiwgMHg2YywgMHgxNywgMHhmNCwgMHgyZCwgMHhkNCwgMHg1MiwKKwkweGU2LCAweDA3LCAweDEyLCAweGY0LCAweDlkLCAweGI3LCAweGE5LCAweDc3LCAweGRhLCAweDIxLCAweDVmLCAweDkyLAorCTB4MWEsIDB4NTcsIDB4YmUsIDB4NmYsIDB4ZTcsIDB4MjEsIDB4MTUsIDB4YWMsIDB4ZTQsIDB4MjQsIDB4NjgsIDB4YjQsCisJMHg0ZCwgMHgyYywgMHg2NywgMHg1YywgMHgxZSwgMHhjYywgMHgzYiwgMHhhYiwgMHhmYiwgMHhiMiwgMHg2ZCwgMHhiMywKKwkweDZmLCAweDczLCAweDVlLCAweGFlLCAweDlmLCAweDdiLCAweGUxLCAweDFlLCAweGU4LCAweGE3LCAweDM2LCAweDM1LAorCTB4OGQsIDB4MzYsIDB4NmEsIDB4ZWQsIDB4ZmQsIDB4MDEsIDB4OGQsIDB4MzYsIDB4ZjcsIDB4MTEsIDB4ZmIsIDB4M2YsCisJMHhmYiwgMHgyMCwgMHg5ZCwgMHgwYywgMHgxYiwgMHg0MSwgMHgwZSwgMHgwNiwgMHg5ZSwgMHgzNSwgMHg5ZSwgMHhlNywKKwkweGE3LCAweGMwLCAweGY3LCAweDNiLCAweGU5LCAweGE3LCAweGU5LCAweDY3LCAweDBjLCAweGU4LCAweGU3LCAweDkxLAorCTB4NmQsIDB4ZmEsIDB4MjEsIDB4ZGQsIDB4NzQsIDB4Y2EsIDB4ZDgsIDB4MzUsIDB4NWIsIDB4MjYsIDB4OGEsIDB4ZmEsCisJMHhiZSwgMHg4MSwgMHgzNSwgMHhlOSwgMHgzZiwgMHgzYSwgMHgwZSwgMHhiYSwgMHgyMSwgMHhhZCwgMHg5MywgMHhiNywKKwkweDRjLCAweDI5LCAweDgzLCAweDhlLCAweGNhLCAweDkwLCAweDRmLCAweDY1LCAweGQwLCAweDE0LCAweDMxLCAweDUwLAorCTB4MTksIDB4ZjIsIDB4YWQsIDB4NWMsIDB4YjcsIDB4OWMsIDB4MmEsIDB4ZjYsIDB4NGMsIDB4OWQsIDB4YmQsIDB4MDIsCisJMHgzYSwgMHhiYSwgMHg1ZSwgMHhlNywgMHhmZCwgMHhlYiwgMHgzNSwgMHg5YiwgMHhkNCwgMHg4MywgMHhiNywgMHhiNiwKKwkweGVmLCAweGZlLCAweGVmLCAweGI4LCAweGZiLCAweDQzLCAweDcyLCAweDAzLCAweDc2LCAweGNiLCAweDliLCAweGE1LAorCTB4NjEsIDB4YzgsIDB4MjQsIDB4MjEsIDB4NWUsIDB4MDQsIDB4NmQsIDB4OGMsIDB4Y2EsIDB4NmEsIDB4ZTksIDB4YTQsCisJMHhhYywgMHg0MSwgMHgzZiwgMHhhZCwgMHgyZiwgMHgwZCwgMHgwMCwgMHg0ZiwgMHg0MywgMHg4ZSwgMHhiZSwgMHg3MiwKKwkweDQ0LCAweGRlLCAweDU4LCAweDUyLCAweDMyLCAweDYzLCAweDQzLCAweGJmLCAweDJjLCAweGQzLCAweDA3LCAweDBmLAorCTB4N2EsIDB4MmUsIDB4NzcsIDB4ZWEsIDB4OTgsIDB4ZmQsIDB4NTgsIDB4MzUsIDB4ZjAsIDB4YzUsIDB4OGYsIDB4NTcsCisJMHhiYiwgMHg2NCwgMHhhMiwgMHg2YSwgMHhjYSwgMHg2MywgMHhkNSwgMHgxZSwgMHg3OSwgMHhhMiwgMHgxYSwgMHg5MywKKwkweGQzLCAweGI1LCAweDg0LCAweDdjLCAweGEzLCAweDdhLCAweDUwLCAweDRlLCAweDU1LCAweDBmLCAweGM5LCAweDkzLAorCTB4YjUsIDB4YTQsIDB4N2MsIDB4MTMsIDB4NzYsIDB4NjEsIDB4YWUsIDB4ZTYsIDB4YzgsIDB4NjQsIDB4NmQsIDB4NTgsCisJMHgxZSwgMHhhZiwgMHhkMSwgMHhjNywgMHg4ZSwgMHhmOSwgMHhmMCwgMHhjYiwgMHg2ZSwgMHhmYiwgMHgyZSwgMHhiOCwKKwkweGFlLCAweDBlLCAweGFjLCAweGNiLCAweDUxLCAweGUzLCAweDNhLCAweDY2LCAweDI5LCAweGI5LCAweGMwLCAweGZmLAorCTB4MjEsIDB4NzIsIDB4MGUsIDB4N2QsIDB4MmYsIDB4YmUsIDB4YTIsIDB4YTQsIDB4YTIsIDB4ZTcsIDB4NmYsIDB4ZmUsCisJMHhkZiwgMHg0OCwgMHg1NCwgMHhkYiwgMHg0NiwgMHhlNywgMHhjYSwgMHgwNywgMHhkMSwgMHhjNiwgMHhhNiwgMHg0ZCwKKwkweDEyLCAweGZhLCAweDQxLCAweDlhLCAweGZlLCAweGZmLCAweGE2LCAweGVkLCAweDY1LCAweDY4LCAweDFmLCAweGY2LAorCTB4MmQsIDB4ZGEsIDB4NWUsIDB4ZmEsIDB4ZWMsIDB4MjksIDB4M2YsIDB4NjgsIDB4ZTcsIDB4ZDAsIDB4ZDYsIDB4ZGEsCisJMHgxOSwgMHhlNywgMHg2OCwgMHhjZSwgMHg3YiwgMHgzMSwgMHhmNywgMHhmMCwgMHhmZiwgMHhhNywgMHgwNCwgMHhmMSwKKwkweGFhLCAweGIzLCAweGI1LCAweDgzLCAweGZjLCAweDNmLCAweDE1LCAweGFjLCAweGU1LCAweDhiLCAweGYzLCAweGM1LAorCTB4MjcsIDB4NGEsIDB4NjMsIDB4ZWEsIDB4YjEsIDB4MTIsIDB4MTEsIDB4OGQsIDB4MmYsIDB4MTcsIDB4YjcsIDB4NzMsCisJMHhmMiwgMHhiZSwgMHgyZSwgMHhjYiwgMHg2ZSwgMHg1NCwgMHhhZiwgMHgyMSwgMHhmMCwgMHhkYiwgMHhhNywgMHg3NSwKKwkweDdlLCAweGRlLCAweGQ4LCAweDEwLCAweGU5LCAweDhmLCAweDcxLCAweGI4LCAweGFlLCAweDMwLCAweGI2LCAweDAwLAorCTB4NmMsIDB4ZWIsIDB4OWEsIDB4NzIsIDB4YTksIDB4MWEsIDB4ZjgsIDB4YWYsIDB4ZTYsIDB4MzQsIDB4YmQsIDB4YmMsCisJMHgwNSwgMHg5YSwgMHg2MywgMHhmYywgMHgyMSwgMHg3OCwgMHhlNiwgMHhjYiwgMHg0MSwgMHhkZiwgMHhlYywgMHg5MCwKKwkweDQzLCAweDdiLCAweDFjLCAweGZiLCAweDM1LCAweDdhLCAweDM4LCAweDE3LCAweGZmLCAweDRmLCAweDA3LCAweGU1LAorCTB4NzAsIDB4YmQsIDB4Y2MsIDB4MmYsIDB4YjYsIDB4MzUsIDB4MmQsIDB4MDYsIDB4MzEsIDB4NWUsIDB4NDcsIDB4OWUsCisJMHhjMywgMHg1ZCwgMHg1NCwgMHg0YywgMHhhZSwgMHhiZiwgMHg0MywgMHgyYSwgMHgwZSwgMHg2ZCwgMHg1YiwgMHhjYSwKKwkweGVmLCAweDIxLCAweDI5LCAweDYzLCAweDllLCAweDhhLCAweGQzLCAweGY0LCAweDhkLCAweDA1LCAweDcyLCAweGI2LAorCTB4NjIsIDB4M2UsIDB4OTgsIDB4NzcsIDB4YmEsIDB4YmMsIDB4MWYsIDB4ZWYsIDB4YTgsIDB4NzMsIDB4ODAsIDB4OTksCisJMHhhNiwgMHhmOCwgMHg3ZSwgMHgxMSwgMHg2NSwgMHhmYSwgMHg0NiwgMHhlNiwgMHhmMCwgMHg0YywgMHg4NCwgMHg3NSwKKwkweGFmLCAweGY1LCAweDZiLCAweGFjLCAweDdlLCAweGYyLCAweDQxLCAweGJmLCAweDk5LCAweGIyLCAweDk1LCAweGNmLAorCTB4NDQsIDB4YjYsIDB4OTQsIDB4ZjEsIDB4OGIsIDB4ZjUsIDB4N2UsIDB4Y2EsIDB4ZGMsIDB4ZmQsIDB4MzYsIDB4N2YsCisJMHg1MSwgMHhmOSwgMHg4YiwgMHhhOSwgMHg3ZCwgMHgwYSwgMHhlMSwgMHhiNywgMHgzZCwgMHhmMiwgMHg5NCwgMHhjOSwKKwkweGRjLCAweGY1LCAweGI0LCAweDFhLCAweDJiLCAweGZkLCAweDM0LCAweGNjLCAweGQzLCAweGRkLCAweDUyLCAweGZiLAorCTB4MmIsIDB4NmYsIDB4ZjcsIDB4MDcsIDB4NzksIDB4ZWUsIDB4MWMsIDB4N2IsIDB4NjcsIDB4NmUsIDB4ZmIsIDB4NGUsCisJMHgzYSwgMHg2MSwgMHg4ZSwgMHg3YiwgMHgzYiwgMHg3MCwgMHhhYiwgMHg1NiwgMHg2MiwgMHhlMCwgMHg0MSwgMHhjOCwKKwkweDNiLCAweGJiLCAweDQ1LCAweGYzLCAweDYzLCAweGExLCAweGY2LCAweDJmLCAweDdmLCAweDQzLCAweGYzLCAweDczLAorCTB4ZDMsIDB4YzcsIDB4ZjAsIDB4ZGIsIDB4N2UsIDB4ZGEsIDB4YjYsIDB4OTQsIDB4MWIsIDB4OTcsIDB4MDIsIDB4YmYsCisJMHg5MSwgMHhiNiwgMHhhMSwgMHgyMSwgMHgyYiwgMHg1MCwgMHg0NywgMHg1ZSwgMHgwNSwgMHg5ZiwgMHg2YywgMHhiNywKKwkweGU1LCAweGRmLCAweDdmLCAweDAxLCAweDk5LCAweGU3LCAweGQzLCAweDQ2LCAweDQwLCAweDY3LCAweDAwLCAweDAwLAorCTB4MDAgfTsKK3N0YXRpYyB1MzIgYm54Ml9SWFBfYjA5RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CitzdGF0aWMgdTMyIGJueDJfUlhQX2IwOUZ3Um9kYXRhWygweDI3OC80KSArIDFdID0geworCTB4MDgwMDNmYTQsIDB4MDgwMDNlYTQsIDB4MDgwMDNmNDgsIDB4MDgwMDNmNjAsIDB4MDgwMDNmNzgsIDB4MDgwMDNmOTgsCisJMHgwODAwM2ZhNCwgMHgwODAwM2ZhNCwgMHgwODAwM2VhYywgMHgwMDAwMDAwMCwgMHgwODAwNDlkNCwgMHgwODAwNGEwYywKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YTQ0LCAweDA4MDA0YzA4LAorCTB4MDgwMDRiNTAsIDB4MDgwMDRiODgsIDB4MDgwMDRjMDgsIDB4MDgwMDRhZDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsCisJMHgwODAwNGI4OCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YmM4LAorCTB4MDgwMDRjMDgsIDB4MDgwMDRiYzgsIDB4MDgwMDRiNTAsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRiYzgsCisJMHgwODAwNGJjOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LAorCTB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsCisJMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LAorCTB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsCisJMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LAorCTB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsCisJMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LAorCTB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsCisJMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LCAweDA4MDA0YzA4LAorCTB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsIDB4MDgwMDRjMDgsCisJMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwgMHgwODAwNGMwOCwKKwkweDA4MDA0YWI0LCAweDAwMDAwMDAwLCAweDA4MDA2MDJjLCAweDA4MDA2MDQ0LCAweDA4MDA2MDQ0LCAweDA4MDA2MDQ0LAorCTB4MDgwMDYwMmMsIDB4MDgwMDYwNDQsIDB4MDgwMDYwNDQsIDB4MDgwMDYwNDQsIDB4MDgwMDYwMmMsIDB4MDgwMDYwNDQsCisJMHgwODAwNjA0NCwgMHgwODAwNjA0NCwgMHgwODAwNjAyYywgMHgwODAwNjA0NCwgMHgwODAwNjA0NCwgMHgwODAwNjA0NCwKKwkweDA4MDA2MDM4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH07CitzdGF0aWMgdTMyIGJueDJfUlhQX2IwOUZ3QnNzWygweDEzZGMvNCkgKyAxXSA9IHsgMHgwIH07CitzdGF0aWMgdTMyIGJueDJfUlhQX2IwOUZ3U2Jzc1soMHgyYy80KSArIDFdID0geyAweDAgfTsKKworc3RhdGljIHN0cnVjdCBmd19pbmZvIGJueDJfcnhwX2Z3XzA5ID0geworCS52ZXJfbWFqb3IJCQk9IDB4MSwKKwkudmVyX21pbm9yCQkJPSAweDAsCisJLnZlcl9maXgJCQk9IDB4MCwKKworCS5zdGFydF9hZGRyCQkJPSAweDA4MDAzMTg0LAorCisJLnRleHRfYWRkcgkJCT0gMHgwODAwMDAwMCwKKwkudGV4dF9sZW4JCQk9IDB4NjczYywKKwkudGV4dF9pbmRleAkJCT0gMHgwLAorCS5nel90ZXh0CQkJPSBibngyX1JYUF9iMDlGd1RleHQsCisJLmd6X3RleHRfbGVuCQkJPSBzaXplb2YoYm54Ml9SWFBfYjA5RndUZXh0KSwKKworCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDY5ZTAsCisJLmRhdGFfbGVuCQkJPSAweDAsCisJLmRhdGFfaW5kZXgJCQk9IDB4MCwKKwkuZGF0YQkJCQk9IGJueDJfUlhQX2IwOUZ3RGF0YSwKKworCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDY5ZTAsCisJLnNic3NfbGVuCQkJPSAweDJjLAorCS5zYnNzX2luZGV4CQkJPSAweDAsCisJLnNic3MJCQkJPSBibngyX1JYUF9iMDlGd1Nic3MsCisKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDZhMTAsCisJLmJzc19sZW4JCQk9IDB4MTNkYywKKwkuYnNzX2luZGV4CQkJPSAweDAsCisJLmJzcwkJCQk9IGJueDJfUlhQX2IwOUZ3QnNzLAorCisJLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA2NzQwLAorCS5yb2RhdGFfbGVuCQkJPSAweDI3OCwKKwkucm9kYXRhX2luZGV4CQkJPSAweDAsCisJLnJvZGF0YQkJCQk9IGJueDJfUlhQX2IwOUZ3Um9kYXRhLAorfTsKKworc3RhdGljIHU4IGJueDJfVFBBVF9iMDlGd1RleHRbXSA9IHsKKwkweDFmLCAweDhiLCAweDA4LCAweDA4LCAweGRiLCAweGZkLCAweDJmLCAweDQ1LCAweDAwLCAweDAzLCAweDc0LCAweDY1LAorCTB4NzMsIDB4NzQsIDB4MzEsIDB4MmUsIDB4NjIsIDB4NjksIDB4NmUsIDB4MDAsIDB4YzUsIDB4NTgsIDB4NWQsIDB4NmMsCisJMHgxYywgMHg1NywgMHgxNSwgMHgzZSwgMHhmMywgMHhiYiwgMHgxMywgMHg3NywgMHhlZCwgMHhiZCwgMHg0OSwgMHg5NywKKwkweDZhLCAweDEzLCAweGI5LCAweDc0LCAweGM2LCAweDFlLCAweDNiLCAweDhiLCAweDFjLCAweDM1LCAweDkzLCAweGIwLAorCTB4MjQsIDB4MTYsIDB4NWEsIDB4ZDEsIDB4YzksIDB4Y2MsIDB4YWUsIDB4NmIsIDB4ZTUsIDB4MjksIDB4ODYsIDB4YmMsCisJMHhmMSwgMHhiMiwgMHhhYywgMHhlZCwgMHg0NiwgMHg1NCwgMHg0OCwgMHg0ZCwgMHg1MSwgMHg4NCwgMHgyMiwgMHg4MSwKKwkweDk0LCAweDY1LCAweDc2LCAweDUzLCAweDQwLCAweDVhLCAweDY1LCAweGMxLCAweGEwLCAweDA0LCAweDIxLCAweDg0LAorCTB4MjIsIDB4OWIsIDB4NjYsIDB4OTEsIDB4NTgsIDB4M2MsIDB4NGQsIDB4ZTksIDB4NmIsIDB4OTQsIDB4YmMsIDB4OTAsCisJMHg5NiwgMHgxNywgMHg5ZSwgMHg0YiwgMHg5ZSwgMHhhYywgMHgwMiwgMHgxMiwgMHgwZiwgMHhhOCwgMHg4YSwgMHg3OCwKKwkweDQwLCAweDE1LCAweDBkLCAweDFlLCAweGJlLCAweDMzLCAweDNmLCAweDliLCAweDVkLCAweGQ3LCAweDI5LCAweDc5LAorCTB4YTgsIDB4ODQsIDB4YTUsIDB4ZjEsIDB4Y2MsIDB4ZmQsIDB4MzksIDB4ZjcsIDB4ZTcsIDB4N2MsIDB4ZGYsIDB4NzcsCisJMHhlZSwgMHhiOSwgMHg1YiwgMHg5MiwgMHg2OSwgMHg4MiwgMHhkMiwgMHhiZiwgMHg0OSwgMHgzYywgMHg5NywgMHhiZSwKKwkweDcxLCAweGYxLCAweGQyLCAweGUyLCAweDhiLCAweDI3LCAweDRkLCAweDNhLCAweDcxLCAweGUyLCAweDQ1LCAweGU5LAorCTB4MTksIDB4NDMsIDB4YTYsIDB4Y2YsIDB4ZTAsIDB4NGYsIDB4MjEsIDB4MTIsIDB4ZDksIDB4ZjgsIDB4ZmMsIDB4OTAsCisJMHgyMSwgMHg1NywgMHg2ZiwgMHg0ZSwgMHg3YiwgMHgzNiwgMHgxOSwgMHg0YSwgMHhkNSwgMHg3OSwgMHg2MSwgMHhkNSwKKwkweDI2LCAweDcyLCAweDA3LCAweDBiLCAweGE2LCAweDRmLCAweGZmLCAweDg5LCAweDVhLCAweDQ1LCAweDk1LCAweGI4LAorCTB4ZmUsIDB4ZjksIDB4ZWEsIDB4YTMsIDB4ZTMsIDB4NzcsIDB4NGUsIDB4NWIsIDB4MGYsIDB4NmYsIDB4MmEsIDB4NjQsCisJMHg4OCwgMHg2YSwgMHhjMywgMHgxMCwgMHhmMywgMHg2NCwgMHg0YywgMHhjMywgMHhlNiwgMHg5NywgMHg0NywgMHg1NywKKwkweDM0LCAweDlhLCAweGNhLCAweGM2LCAweDEyLCAweDE0LCAweGY0LCAweDBjLCAweGFhLCAweDc3LCAweDMxLCAweDhlLAorCTB4N2QsIDB4NTksIDB4ZjIsIDB4NDMsIDB4NTUsIDB4ZjIsIDB4NmYsIDB4MTgsIDB4MjQsIDB4NTcsIDB4NWQsIDB4YzksCisJMHgwYiwgMHg2ZCwgMHhiNCwgMHg0OSwgMHhlNCwgMHgzOSwgMHgzOSwgMHg3MiwgMHg0NSwgMHgxNCwgMHg3ZCwgMHhkMywKKwkweDkxLCAweDQ5LCAweGI2LCAweDc3LCAweGEzLCAweGQ5LCAweGI5LCAweDI1LCAweGM5LCAweGViLCAweDJmLCAweDRiLAorCTB4N2UsIDB4ZGYsIDB4ZTMsIDB4N2QsIDB4NjMsIDB4MWQsIDB4NGIsIDB4OTIsIDB4ZGIsIDB4ZTcsIDB4NzcsIDB4ZDUsCisJMHhmMCwgMHhiYiwgMHg1MywgMHhkNCwgMHgyOCwgMHg1MiwgMHg0MSwgMHhiNiwgMHhkOSwgMHhkNiwgMHgyNCwgMHhkZiwKKwkweDU5LCAweDI4LCAweDI5LCAweDM0LCAweDhiLCAweGU3LCAweDAwLCAweGFkLCAweDNiLCAweDk0LCAweGY3LCAweDFjLAorCTB4NTIsIDB4MTUsIDB4NWIsIDB4MjYsIDB4YmYsIDB4MjgsIDB4ZDEsIDB4YWYsIDB4MmIsIDB4MWEsIDB4OWUsIDB4YjMsCisJMHg1MiwgMHhhZCwgMHhiZiwgMHg5NiwgMHg4ZSwgMHg1MywgMHhhNCwgMHgzNiwgMHhkNiwgMHhkMiwgMHgyYywgMHhmMiwKKwkweGRhLCAweDEyLCAweDdiLCAweGNmLCAweDU5LCAweDEwLCAweDMyLCAweGNkLCAweGUyLCAweDk5LCAweGM0LCAweDc3LAorCTB4MTMsIDB4ZmQsIDB4MzQsIDB4ZjIsIDB4MmEsIDB4N2IsIDB4ZGIsIDB4MGUsIDB4ZTAsIDB4MWIsIDB4ZWIsIDB4YzQsCisJMHg1OCwgMHg1ZSwgMHhiYywgMHgwZSwgMHgxMywgMHhlYiwgMHhiMCwgMHhhOSwgMHhkMywgMHg1YiwgMHhjNiwgMHgzZSwKKwkweGU2LCAweDRhLCAweDRkLCAweGQyLCAweGE5LCAweDEzLCAweGFmLCAweDdkLCAweDkyLCAweDAyLCAweGExLCAweDUwLAorCTB4NzAsIDB4NGMsIDB4MjMsIDB4ZjcsIDB4OWMsIDB4OGEsIDB4ZjIsIDB4MjEsIDB4NmEsIDB4MDksIDB4MDksIDB4N2QsCisJMHgzYSwgMHgyOSwgMHg3ZSwgMHgzOSwgMHhiNCwgMHhlYiwgMHhhOCwgMHgyZiwgMHg1MCwgMHg1MCwgMHgzYywgMHgyOCwKKwkweGM5LCAweGQ1LCAweGVmLCAweGExLCAweDdlLCAweDRlLCAweDM0LCAweGU5LCAweGJiLCAweDc4LCAweDRiLCAweDI4LAorCTB4MWYsIDB4ZTQsIDB4ZjEsIDB4NTAsIDB4OTYsIDB4NDgsIDB4YjEsIDB4NDksIDB4NzgsIDB4YTEsIDB4NDksIDB4ZWQsCisJMHgzMCwgMHhiMywgMHhlNSwgMHhmYSwgMHhhNCwgMHhhZSwgMHgxNSwgMHhlZSwgMHhjNSwgMHgwZSwgMHhmZCwgMHg3YSwKKwkweDc1LCAweDZhLCAweDA4LCAweDZhLCAweGE5LCAweDU1LCAweGY0LCAweGU5LCAweGQ5LCAweGEyLCAweDA2LCAweDljLAorCTB4ZGMsIDB4MTgsIDB4Y2YsIDB4OTcsIDB4YjgsIDB4OWUsIDB4ZmYsIDB4NTAsIDB4NmYsIDB4OTIsIDB4NTIsIDB4YjUsCisJMHg4NSwgMHg0ZiwgMHg1ZiwgMHhhNiwgMHhhNCwgMHg4ZCwgMHhmNywgMHgyOSwgMHg2MywgMHg2ZiwgMHhhNywgMHhkMiwKKwkweDcyLCAweDUxLCAweDc4LCAweDM3LCAweGJlLCAweDQ4LCAweDZlLCAweGVjLCAweDFmLCAweDAzLCAweGRmLCAweDAyLAorCTB4N2IsIDB4ZDQsIDB4ODEsIDB4NzUsIDB4ZTAsIDB4Y2EsIDB4ZDQsIDB4MmEsIDB4MTksIDB4NjQsIDB4MmQsIDB4YWUsCisJMHhhMSwgMHhlNSwgMHg2ZiwgMHg1ZCwgMHgwNSwgMHg3ZSwgMHg2NywgMHhkYywgMHhkNCwgMHhkNCwgMHg4ZSwgMHg3MSwKKwkweGZlLCAweDIzLCAweGQ2LCAweGQ5LCAweDEyLCAweDA2LCAweGYwLCAweDZlLCAweDljLCAweDhmLCAweGEyLCAweDM3LAorCTB4OWQsIDB4MjgsIDB4ZDIsIDB4YWIsIDB4NzYsIDB4ZjksIDB4MTYsIDB4MmQsIDB4OTQsIDB4MzQsIDB4OWEsIDB4MTcsCisJMHg3OCwgMHhjMywgMHg4ZiwgMHgzNiwgMHg3YywgMHhhNSwgMHg2NSwgMHhlYiwgMHhjOSwgMHg3OCwgMHg4NiwgMHhiZiwKKwkweGNiLCAweDEyLCAweDk2LCAweDQyLCAweDFmLCAweDc0LCAweGRmLCAweDYzLCAweDdmLCAweDk0LCAweDk3LCAweDYyLAorCTB4OWIsIDB4MjgsIDB4ZGEsIDB4NWMsIDB4ZmMsIDB4MzQsIDB4OWIsIDB4ZWYsIDB4YTcsIDB4MzYsIDB4NTEsIDB4NTQsCisJMHhhZiwgMHhmMCwgMHhiYywgMHgxNiwgMHhmNiwgMHhjYywgMHg1YywgMHgyNSwgMHhhYSwgMHgwZiwgMHgxYywgMHhhMywKKwkweGQ5LCAweGM1LCAweGZhLCAweDZjLCAweGJjLCAweDA3LCAweDI1LCAweGVjLCAweGMxLCAweDJhLCAweDliLCAweDkyLAorCTB4NDEsIDB4ODEsIDB4MWQsIDB4YmQsIDB4MDAsIDB4N2UsIDB4YjgsIDB4YmUsIDB4NmQsIDB4YmQsIDB4ZWYsIDB4MmIsCisJMHgwNSwgMHhkYSwgMHg3MiwgMHhmMiwgMHhkNCwgMHgwOSwgMHg0YiwgMHgxNCwgMHg4NCwgMHgxZCwgMHhmMiwgMHg0MiwKKwkweDE5LCAweDczLCAweDE0LCAweDY4LCAweGQzLCAweDdlLCAweDE4LCAweGQ1LCAweDFkLCAweDA3LCAweDdlLCAweDIxLAorCTB4YjYsIDB4MmIsIDB4ZDUsIDB4NjksIDB4MWEsIDB4ZWQsIDB4MGIsIDB4NjIsIDB4OGQsIDB4MWMsIDB4NjAsIDB4MjEsCisJMHhjMywgMHgzNywgMHhiMywgMHhmMSwgMHg3NywgMHgxMCwgMHgzYSwgMHg2OCwgMHhhNywgMHg5NiwgMHg1YywgMHhiMSwKKwkweDQ0LCAweDQwLCAweDU2LCAweGM5LCAweDUzLCAweDQ4LCAweGM4LCAweDU1LCAweDgxLCAweDNlLCAweDJkLCAweGFhLAorCTB4ODUsIDB4MDYsIDB4ZWQsIDB4MjgsIDB4OTcsIDB4NjMsIDB4N2UsIDB4YjcsIDB4N2IsIDB4M2IsIDB4ZDEsIDB4OWQsCisJMHhhMywgMHgyNSwgMHhiYSwgMHgxYiwgMHgxNiwgMHhlOSwgMHg3NiwgMHg0OCwgMHg3MiwgMHhkMywgMHgwMSwgMHgzNywKKwkweDhhLCAweDgyLCAweGRlLCAweDBhLCAweDQ3LCAweGY3LCAweGYyLCAweDFiLCAweGVjLCAweDI1LCAweDM4LCAweGEyLAorCTB4NDAsIDB4ODMsIDB4YWIsIDB4Y2UsIDB4M2QsIDB4MzAsIDB4YzgsIDB4MDIsIDB4NDYsIDB4MmQsIDB4ZWMsIDB4M2QsCisJMHg3YiwgMHhmMywgMHhiZSwgMHg3NiwgMHhhNiwgMHg1NywgMHg2ZCwgMHhlYiwgMHg4NywgMHgzZSwgMHhhMywgMHg3NiwKKwkweDRkLCAweDQzLCAweGVkLCAweDVlLCAweDdmLCAweDBjLCAweDMwLCAweDg2LCAweGEwLCAweGFiLCAweGQwLCAweDkzLAorCTB4MGMsIDB4YmYsIDB4Y2MsIDB4NmMsIDB4MWIsIDB4ZDQsIDB4ZWYsIDB4ZTYsIDB4YzgsIDB4ZGMsIDB4NTQsIDB4YTksCisJMHhkOSwgMHgyYiwgMHg5MiwgMHgzMywgMHg2ZiwgMHg5OSwgMHgyNCwgMHhjYiwgMHg0NSwgMHg5OSwgMHg1NCwgMHg5YSwKKwkweGQ5LCAweDhjLCAweDY4LCAweDA5LCAweGViLCAweGI4LCAweDZmLCAweGZmLCAweDQ4LCAweGE3LCAweGE5LCAweGMwLAorCTB4ZDEsIDB4ODksIDB4ZmIsIDB4MTgsIDB4MzQsIDB4NzMsIDB4Y2IsIDB4OTAsIDB4ZmMsIDB4MWUsIDB4ZWYsIDB4ODMsCisJMHg3ZCwgMHg2ZSwgMHhhNCwgMHgzZSwgMHg1NywgMHgyNSwgMHhlZiwgMHg0NiwgMHg4ZSwgMHg2NiwgMHgzNywgMHhmZSwKKwkweDExLCAweDc5LCAweDM2LCAweDdjLCAweDBkLCAweDllLCAweGFmLCAweDU2LCAweGJlLCAweGEwLCAweGQwLCAweDA0LAorCTB4ZWEsIDB4MzYsIDB4YjksIDB4ZWQsIDB4NjEsIDB4NWEsIDB4Y2YsIDB4NjMsIDB4NDQsIDB4OTEsIDB4ZTcsIDB4M2MsCisJMHg0YiwgMHgxZSwgMHhmMywgMHhmZiwgMHgzYywgMHhkYiwgMHhlNCwgMHg2OCwgMHg2NiwgMHg4MywgMHg3NSwgMHg4MywKKwkweGY3LCAweDI2LCAweDk3LCAweDc5LCAweDZkLCAweDA3LCAweGE4LCAweDg5LCAweDFkLCAweDM1LCAweGNiLCAweDQ1LAorCTB4ZjgsIDB4NDEsIDB4OGUsIDB4MzUsIDB4ZDIsIDB4YzQsIDB4OGUsIDB4NjUsIDB4N2IsIDB4MDIsIDB4NmYsIDB4OWUsCisJMHhlZiwgMHhhYywgMHg5MiwgMHhmMCwgMHg5ZCwgMHhlMywgMHg0NiwgMHg5ZSwgMHg3YywgMHhlMCwgMHhhYiwgMHg2MiwKKwkweDNkLCAweDZiLCAweDM0LCAweDU3LCAweDVhLCAweDhmLCAweGRiLCAweDUwLCAweDM3LCAweGUwLCAweDM2LCAweGIxLAorCTB4YTcsIDB4MGQsIDB4ZTUsIDB4NDEsIDB4YjYsIDB4MDYsIDB4NzAsIDB4ZGEsIDB4NmUsIDB4NjMsIDB4MTYsIDB4MmQsCisJMHhkZSwgMHg2YiwgMHhkZCwgMHhlMSwgMHhmZSwgMHhkYywgMHhiNywgMHg1NSwgMHhkNiwgMHhjOCwgMHgyYSwgMHg2ZiwKKwkweDYyLCAweGY0LCAweDdlLCAweDE3LCAweGZiLCAweGJkLCAweGNlLCAweGIxLCAweGM4LCAweDM2LCAweGZmLCAweDRhLAorCTB4ZGMsIDB4N2YsIDB4MTYsIDB4N2IsIDB4OWUsIDB4NWIsIDB4NmMsIDB4NzMsIDB4ZGIsIDB4NDAsIDB4MjMsIDB4N2IsCisJMHhhMywgMHgyNSwgMHg1NCwgMHhmOCwgMHg1ZiwgMHg4NiwgMHhmMywgMHhmZCwgMHgxZiwgMHhmZiwgMHgyYiwgMHhkMiwKKwkweGFhLCAweGUwLCAweDc0LCAweGE1LCAweDAwLCAweDdjLCAweDJjLCAweGIzLCAweDBkLCAweGJkLCAweGRiLCAweDE4LAorCTB4MzcsIDB4NzAsIDB4MTQsIDB4ZDgsIDB4MjUsIDB4MzgsIDB4NzEsIDB4YmYsIDB4YTUsIDB4NmUsIDB4NDQsIDB4ZWQsCisJMHg3OCwgMHhhZSwgMHgyYiwgMHgzYywgMHgxNywgMHg2MiwgMHg5MiwgMHhiZCwgMHhmOCwgMHgwNywgMHg3MCwgMHhhMywKKwkweDQ5LCAweDc5LCAweDlhLCAweGRmLCAweGNlLCAweGQzLCAweDg1LCAweDQxLCAweDllLCAweDY2LCAweGFlLCAweGU5LAorCTB4ZjAsIDB4NDMsIDB4MTQsIDB4NzUsIDB4MmEsIDB4YWMsIDB4NTEsIDB4ZTAsIDB4NmQsIDB4NzMsIDB4M2YsIDB4YWIsCisJMHhhNCwgMHhjOCwgMHhiYywgMHgwZSwgMHhiNCwgMHg2ZiwgMHgxMywgMHhhZCwgMHgwZCwgMHg3NCwgMHhmOCwgMHg0ZCwKKwkweDFkLCAweDE5LCAweDViLCAweGE2LCAweDk3LCAweDdmLCAweDQ2LCAweGY0LCAweGYyLCAweDgwLCAweDZkLCAweDc5LAorCTB4ZmMsIDB4YzQsIDB4YTYsIDB4ODksIDB4M2QsIDB4Y2IsIDB4YzAsIDB4ZmMsIDB4YzIsIDB4NDAsIDB4NDYsIDB4YmMsCisJMHg0MCwgMHgzYywgMHhlZCwgMHg3YiwgMHg4OCwgMHg5MywgMHgzNSwgMHgzYywgMHg0YiwgMHg4OCwgMHg5ZCwgMHg4YywKKwkweDBkLCAweGM3LCAweDkxLCAweDVkLCAweGUwLCAweGIzLCAweDhjLCAweGI2LCAweGIzLCAweGE4LCAweDRiLCAweGY0LAorCTB4YWUsIDB4ZDgsIDB4M2EsIDB4ZDUsIDB4OWMsIDB4NDksIDB4NmEsIDB4NjcsIDB4YjEsIDB4NGEsIDB4NzAsIDB4YWMsCisJMHgzYSwgMHgwOCwgMHg0ZSwgMHgxZCwgMHg0MCwgMHhmYywgMHhmOSwgMHg5ZCwgMHgzMiwgMHgxZSwgMHhhYiwgMHgxMCwKKwkweGQzLCAweDhhLCAweDg3LCAweDExLCAweDliLCAweGZhLCAweGE4LCAweGU3LCAweGYxLCAweDZlLCAweGUxLCAweDdkLAorCTB4MDAsIDB4ZTUsIDB4YzMsIDB4ZTgsIDB4M2IsIDB4MWEsIDB4YTcsIDB4MzIsIDB4YmIsIDB4MjcsIDB4YzUsIDB4MjgsCisJMHhmMCwgMHg2ZSwgMHhjMywgMHg0MCwgMHg3ZiwgMHgxMywgMHhiYSwgMHg2MSwgMHg3ZiwgMHhlNywgMHgxMCwgMHgzZiwKKwkweGQ4LCAweGU3LCAweDM5LCAweGY4LCAweDU0LCAweGM3LCAweGRjLCAweDgyLCAweDY2LCAweGI3LCAweGE5LCAweGE1LAorCTB4YTQsIDB4ZjEsIDB4Y2IsIDB4MWYsIDB4YzYsIDB4YWYsIDB4NTIsIDB4Y2MsIDB4ODMsIDB4MjAsIDB4MTQsIDB4YjAsCisJMHg2MSwgMHhmZCwgMHg2NiwgMHg3YSwgMHg2NSwgMHhlYywgMHhjOCwgMHhmNSwgMHhhMCwgMHg2NSwgMHg0ZiwgMHg4OSwKKwkweGEyLCAweDU1LCAweGE3LCAweDQwLCAweDRkLCAweGUwLCAweGVlLCAweDQyLCAweGMzLCAweDRkLCAweDY4LCAweGQ4LAorCTB4MWYsIDB4ZDEsIDB4YjAsIDB4ZmYsIDB4M2YsIDB4MzUsIDB4MGMsIDB4N2QsIDB4NDIsIDB4MjMsIDB4YjcsIDB4YzEsCisJMHhhOSwgMHhiNywgMHg3YSwgMHhmYiwgMHhlOSwgMHg5OSwgMHhiNSwgMHhjYywgMHg5YSwgMHgzNiwgMHhlOSwgMHhjZSwKKwkweGQxLCAweGE3LCAweGQ1LCAweDc0LCAweDQ5LCAweDdlLCAweDRhLCAweDRkLCAweGI3LCAweDU4LCAweGQzLCAweDJhLAorCTB4NmIsIDB4YmEsIDB4YjgsIDB4NTcsIDB4ZDMsIDB4ZDMsIDB4MTgsIDB4MjMsIDB4ZDEsIDB4ZTYsIDB4MTksIDB4YjUsCisJMHg0OCwgMHhkYSwgMHgzYywgMHhmMCwgMHhkOCwgMHhjOCwgMHg5MywgMHg3MiwgMHhlZCwgMHgzMSwgMHhlZiwgMHg5OCwKKwkweGNiLCAweGZlLCAweDAwLCAweGZmLCAweGI2LCAweDM1LCAweGI0LCAweDQ5LCAweGUzLCAweGY1LCAweDg4LCAweDgxLAorCTB4NmEsIDB4ZDUsIDB4MmEsIDB4YWQsIDB4YzUsIDB4N2QsIDB4NTQsIDB4ZDIsIDB4ZTEsIDB4ZmYsIDB4ZDcsIDB4OGYsCisJMHg1YSwgMHhhNiwgMHgyOSwgMHg4ZiwgMHg2YSwgMHgxZiwgMHhlYSwgMHhkZiwgMHg4OCwgMHhhZSwgMHg2OCwgMHg1NSwKKwkweDllLCAweGE3LCAweDY1LCAweDgyLCAweGYzLCAweGU2LCAweDRmLCAweDgwLCAweDU1LCAweGJiLCAweGNiLCAweDdjLAorCTB4YjcsIDB4NDUsIDB4M2QsIDB4ZTYsIDB4MTksIDB4Y2EsIDB4ZDAsIDB4ODQsIDB4MDYsIDB4ZGUsIDB4ZTYsIDB4ZDAsCisJMHg0ZiwgMHhkZCwgMHg0OCwgMHg3NCwgMHg3NCwgMHgxYiwgMHhlMywgMHg2ZSwgMHg3NSwgMHg5OSwgMHg2NywgMHgwNiwKKwkweGU5LCAweGQ3LCAweGVkLCAweGQyLCAweDg1LCAweDM4LCAweDA2LCAweGNmLCAweDhhLCAweDI1LCAweDYyLCAweDBkLAorCTB4ZjIsIDB4YjksIDB4ODgsIDB4ZjYsIDB4NDEsIDB4OGUsIDB4OTQsIDB4NTgsIDB4ZjcsIDB4MTMsIDB4YTksIDB4ZWUsCisJMHg5ZiwgMHg4NywgMHhhZiwgMHgyNiwgMHg1MCwgMHg2NiwgMHhlZCwgMHgxZiwgMHg0ZSwgMHhiNSwgMHgzZiwgMHg4NSwKKwkweDM3LCAweGQ3LCAweGFkLCAweGE4LCAweDA5LCAweDg3LCAweGMwLCAweGM3LCAweDBkLCAweGM2LCAweDM3LCAweDhmLAorCTB4NTgsIDB4YzcsIDB4ZjMsIDB4ZmYsIDB4MzMsIDB4NWEsIDB4YjUsIDB4MTksIDB4NjMsIDB4ZGIsIDB4ZmMsIDB4MDEsCisJMHhjZCwgMHg0MSwgMHg3ZiwgMHhhOCwgMHhkZiwgMHhlNiwgMHhiZSwgMHg2YywgMHg5MywgMHhmNSwgMHgxNSwgMHg2OSwKKwkweGRmLCAweDBmLCAweGY3LCAweGY0LCAweDQ1LCAweGZkLCAweDM2LCAweGY3LCAweDYzLCAweDdkLCAweDFjLCAweDIyLAorCTB4ZTUsIDB4M2EsIDB4OWYsIDB4ZGIsIDB4MWUsIDB4ZWIsIDB4MDMsIDB4NzYsIDB4MzUsIDB4ZDQsIDB4NzEsIDB4NmUsCisJMHhjMSwgMHhmNiwgMHg3YywgMHg4NiwgMHhmMywgMHgzYSwgMHgzOSwgMHhlZiwgMHhlMCwgMHg3MywgMHg3ZSwgMHhjZiwKKwkweDc5LCAweDNlLCAweGQ0LCAweGM4LCAweDE5LCAweGYwLCAweGZlLCAweDNiLCAweGVhLCAweDI3LCAweDM1LCAweGIyLAorCTB4MDIsIDB4NGQsIDB4NWMsIDB4NTQsIDB4MTMsIDB4OGQsIDB4YmMsIDB4ODYsIDB4ZjcsIDB4MTksIDB4OTQsIDB4NTcsCisJMHhmNiwgMHg2OCwgMHgyNCwgMHhiMywgMHg3YiwgMHhmMiwgMHgzOSwgMHgxZSwgMHhmNCwgMHg0YSwgMHhmMSwgMHg5OSwKKwkweGNiLCAweGYzLCAweDI5LCAweDFiLCAweGQ0LCAweGQyLCAweDUyLCAweDNkLCAweGQ0LCAweDg3LCAweDdhLCAweDk4LAorCTB4NDAsIDB4Y2MsIDB4YzgsIDB4YTUsIDB4NWMsIDB4YzcsIDB4ZGIsIDB4ZmUsIDB4NDgsIDB4ZjEsIDB4MWQsIDB4NGIsCisJMHhiNCwgMHg4OSwgMHhiNSwgMHgzMSwgMHg3YSwgMHg5ZSwgMHhmZCwgMHhiZiwgMHhmNCwgMHg0MSwgMHhlMCwgMHg1MSwKKwkweDNjLCAweDM3LCAweDcyLCAweDExLCAweDNlLCAweDE3LCAweGEyLCAweGU4LCAweDE1LCAweDA3LCAweGVkLCAweDU5LAorCTB4NGUsIDB4MTIsIDB4NjMsIDB4OWYsIDB4YzMsIDB4ZDksIDB4Y2IsIDB4NzgsIDB4MjAsIDB4MGYsIDB4YjQsIDB4NjcsCisJMHhhMSwgMHgwNywgMHg4ZSwgMHgwNSwgMHhiYiwgMHhkMSwgMHg5NiwgMHhlZCwgMHhhMSwgMHhhZSwgMHgwNiwgMHhmZiwKKwkweDMzLCAweDI2LCAweGNiLCAweGQyLCAweDUyLCAweGRmLCAweDYwLCAweDNiLCAweGU4LCAweDZkLCAweGJmLCAweDVjLAorCTB4NGMsIDB4ODcsIDB4YWUsIDB4MWUsIDB4ZTMsIDB4YzQsIDB4M2MsIDB4NmEsIDB4OGUsIDB4ZTAsIDB4ZDQsIDB4ODgsCisJMHg3MSwgMHhkYSwgMHgxOSwgMHhlMiwgMHhkNCwgMHg0YywgMHg3MSwgMHg2YSwgMHhjNiwgMHgzOCwgMHgzZCwgMHg0OCwKKwkweDcxLCAweGZhLCAweGYzLCAweDEzLCAweDcwLCAweGRhLCAweDc5LCAweDBhLCAweDljLCAweDBjLCAweGRhLCAweGIyLAorCTB4NGIsIDB4MzgsIDB4NmYsIDB4ZjUsIDB4MzgsIDB4NzcsIDB4YmQsIDB4ZWYsIDB4ZWMsIDB4OTcsIDB4N2IsIDB4YjEsCisJMHhkZiwgMHhjNywgMHhiMCwgMHg4YSwgMHgxOCwgMHhhYiwgMHgyZCwgMHgxYSwgMHhjZCwgMHg0MywgMHgyYywgMHhmMywKKwkweDFlLCAweDE1LCAweDcwLCAweDZlLCAweGU0LCAweGU5LCAweGVhLCAweDllLCAweDVjLCAweDI0LCAweDAwLCAweDRlLAorCTB4YjUsIDB4MTQsIDB4YTcsIDB4YWIsIDB4YzAsIDB4YTksIDB4OTYsIDB4ZTIsIDB4YjQsIDB4M2UsIDB4ODIsIDB4ZDMsCisJMHhmYSwgMHgxOCwgMHg0ZSwgMHgxYywgMHg1MywgMHgyYSwgMHhjNiwgMHg3YSwgMHgzNywgMHhjMywgMHgyOCwgMHhjMywKKwkweDQ3LCAweGE3LCAweDliLCAweDYyLCAweDBhLCAweGZiLCAweDNmLCAweDRlLCAweGVkLCAweDlmLCAweGFhLCAweDljLAorCTB4ZmYsIDB4MDIsIDB4YmIsIDB4OTcsIDB4NTQsIDB4MzksIDB4M2UsIDB4MTcsIDB4ZjgsIDB4ZmIsIDB4NzEsIDB4YmUsCisJMHg4MiwgMHhiOSwgMHg1YywgMHhjZiwgMHhlMSwgMHgzZCwgMHgyMSwgMHhjZiwgMHhiNSwgMHg0NywgMHg2MywgMHhkMSwKKwkweDA3LCAweDg4LCAweDQ1LCAweDVjLCAweGM3LCAweGZkLCAweDU0LCAweGE5LCAweDA2LCAweGNkLCAweDJiLCAweGM4LAorCTB4ZTEsIDB4ZmQsIDB4NjEsIDB4MGUsIDB4OWYsIDB4ZjgsIDB4ZTEsIDB4NmEsIDB4OWEsIDB4YzMsIDB4NmYsIDB4ZDksCisJMHg5YywgMHhjMywgMHg5ZiwgMHhkMCwgMHg2OCwgMHg2MiwgMHgzOSwgMHhjNSwgMHg5MywgMHg3OSwgMHgzZCwgMHg4OSwKKwkweGI2LCAweGIzLCAweDMxLCAweGVlLCAweDZkLCAweGM0LCAweGYyLCAweDU1LCAweGY4LCAweGEwLCAweDE5LCAweGYzLAorCTB4MTMsIDB4NzksIDB4NTcsIDB4Y2EsIDB4NWQsIDB4ZTQsIDB4YmIsIDB4ZTQsIDB4ODcsIDB4MDksIDB4NGYsIDB4M2YsCisJMHhkYiwgMHg1YywgMHhlYywgMHhlZiwgMHg4OCwgMHhkOSwgMHg0NiwgMHg0MywgMHhjNSwgMHgxZCwgMHhlMCwgMHg2ZSwKKwkweDE4LCAweGM3LCAweGVhLCAweDczLCAweDQxLCAweDk3LCAweDVhLCAweDQ3LCAweGFhLCAweDU3LCAweDIyLCAweGUwLAorCTB4ZWUsIDB4N2UsIDB4ZmQsIDB4MzQsIDB4OWYsIDB4MzksIDB4ZjksIDB4NDUsIDB4YWYsIDB4ODIsIDB4ZmEsIDB4ODEsCisJMHg0MSwgMHhjOCwgMHg4MywgMHg3MCwgMHhhNywgMHhhMSwgMHg5NiwgMHg3NywgMHg1YSwgMHg0MiwgMHhiZSwgMHg4MywKKwkweDMyLCAweDZjLCAweDgyLCAweDcwLCAweGJhLCAweDIxLCAweDU3LCAweDRiLCAweGUwLCAweDQzLCAweDhiLCAweDVjLAorCTB4YWMsIDB4ZDMsIDB4MGQsIDB4ZTMsIDB4N2IsIDB4NGQsIDB4NDMsIDB4YTksIDB4MWEsIDB4YzgsIDB4MzcsIDB4YzksCisJMHhjMCwgMHg5OSwgMHgwZiwgMHg5ZiwgMHg5OCwgMHg0NiwgMHg3YiwgMHg4MCwgMHg5YywgMHgwOCwgMHg3OSwgMHg4MCwKKwkweGI3LCAweDA4LCAweGJmLCAweDFjLCAweDAzLCAweDc2LCAweGExLCAweDBhLCAweGRiLCAweDZmLCAweGU5LCAweGM5LAorCTB4OWQsIDB4ODgsIDB4YzgsIDB4OGIsIDB4ZmQsIDB4ZjUsIDB4NzEsIDB4Y2EsIDB4OTEsIDB4MzgsIDB4ZTcsIDB4OTIsCisJMHg2YSwgMHgzZCwgMHgzMiwgMHg5YiwgMHgwZSwgMHhiOCwgMHg4ZSwgMHgzMywgMHhhNSwgMHgxMywgMHg3MiwgMHg1ZSwKKwkweDdkLCAweGNjLCAweDkwLCAweGFmLCAweDcxLCAweDNjLCAweDdmLCAweDAwLCAweDFmLCAweGUyLCAweDdiLCAweDliLAorCTB4Y2YsIDB4MTksIDB4ODUsIDB4NzMsIDB4NzMsIDB4ZGMsIDB4N2QsIDB4Y2EsIDB4ODgsIDB4MzcsIDB4MzQsIDB4ODksCisJMHhkOCwgMHg4NywgMHhkOCwgMHgzYiwgMHhjZCwgMHg1OCwgMHhiOSwgMHhjOSwgMHgxOSwgMHhjNCwgMHhlMywgMHgxZCwKKwkweDk3LCAweDkzLCAweDc5LCAweGZlLCAweGE0LCAweDI1LCAweDFjLCAweGM2LCAweDdkLCAweDA3LCAweGZlLCAweDViLAorCTB4ZWQsIDB4MzksIDB4MWMsIDB4NzMsIDB4M2YsIDB4YWYsIDB4ZDAsIDB4NDMsIDB4OGEsIDB4MzksIDB4MjksIDB4NGUsCisJMHgyMCwgMHgxNiwgMHg5ZiwgMHg4NiwgMHg4ZCwgMHgxYiwgMHhlYiwgMHgzMSwgMHhjOSwgMHhiZCwgMHgzMiwgMHg5YiwKKwkweDBmLCAweGY3LCAweDhjLCAweGYxLCAweDE3LCAweDY1LCAweGJjLCAweGVjLCAweDgyLCAweGQzLCAweDk1LCAweDc0LAorCTB4YmUsIDB4NTEsIDB4OGUsIDB4MmMsIDB4MjAsIDB4ZTUsIDB4NzksIDB4YTAsIDB4MGQsIDB4ZjMsIDB4YjcsIDB4YTIsCisJMHg4ZSwgMHg3ZSwgMHhiYywgMHg0NiwgMHhkNiwgMHgyNSwgMHhkYiwgMHgxYywgMHhkMSwgMHhjNiwgMHhjNywgMHg5OSwKKwkweGRkLCAweDY3LCAweDhjLCAweGVhLCAweGM4LCAweDE4LCAweDQ1LCAweGRlLCAweDliLCAweDY4LCAweDNhLCAweGNmLAorCTB4YTQsIDB4ZjcsIDB4MGMsIDB4OGUsIDB4MmQsIDB4MDIsIDB4M2EsIDB4OTUsIDB4OWYsIDB4OTMsIDB4YjEsIDB4MGYsCisJMHgwZiwgMHg3YiwgMHhmNiwgMHhlMywgMHhmYSwgMHg1ZiwgMHhlOSwgMHhlMywgMHhlMywgMHhmZSwgMHg1NiwgMHg0ZCwKKwkweGNhLCAweGM3LCAweDEyLCAweDZlLCAweGRhLCAweDc4LCAweDg3LCAweDBmLCAweDQ2LCAweGQ2LCAweGFlLCAweGVkLAorCTB4MzMsIDB4ZWYsIDB4ZDcsIDB4MzgsIDB4NWQsIDB4NDMsIDB4YmMsIDB4MjEsIDB4NTcsIDB4YzEsIDB4MWQsIDB4Y2MsCisJMHgyNywgMHg3YywgMHg4NywgMHhhZiwgMHg2NywgMHgzZSwgMHgwNCwgMHg2ZiwgMHhlOCwgMHg1YywgMHgzYiwgMHhlNSwKKwkweDhiLCAweDljLCAweGYwLCAweDg1LCAweGYzLCAweGJhLCAweGM1LCAweDU1LCAweGYwLCAweGE1LCAweDBkLCAweGJlLAorCTB4YzAsIDB4YWUsIDB4YTEsIDB4NTUsIDB4YTcsIDB4YzEsIDB4MDUsIDB4OGUsIDB4NGQsIDB4MjgsIDB4ODcsIDB4Y2MsCisJMHgxZCwgMHhlNiwgMHgwYSwgMHhmMywgMHhlNiwgMHgzMSwgMHg1ZiwgMHg1ZSwgMHhlOSwgMHgxYSwgMHhjNiwgMHhlNiwKKwkweGE3LCAweDcwLCAweGU1LCAweDhkLCAweDk4LCAweDJiLCAweGNjLCAweGQ5LCAweDI0LCAweDdlLCAweDc0LCAweDgwLAorCTB4NTUsIDB4OTAsIDB4YzYsIDB4OGYsIDB4MDAsIDB4ZjEsIDB4YTMsIDB4YzYsIDB4ZjksIDB4NGYsIDB4MWMsIDB4MGIsCisJMHgxMiwgMHhmZCwgMHhhYywgMHg0MSwgMHgzZiwgMHgzNSwgMHg4NSwgMHhmMywgMHgyMywgMHhkNiwgMHgwZSwgMHhkYiwKKwkweGIxLCAweDdlLCAweGQ4LCAweGFlLCAweDkwLCAweGRhLCAweDhkLCAweGM3LCAweDkxLCAweDc2LCAweGNmLCAweDMyLAorCTB4YjMsIDB4MzgsIDB4ZDIsIDB4ODYsIDB4NzYsIDB4M2EsIDB4YTksIDB4OGUsIDB4ZGEsIDB4YTksIDB4OGUsIDB4ZDAsCisJMHhhNywgMHhhNSwgMHg1NCwgMHhmOCwgMHg0YywgMHhiMCwgMHg0YywgMHgxZiwgMHhmMSwgMHhhMywgMHgxMywgMHg4ZiwKKwkweGQ5LCAweGEyLCAweGU0LCAweDJlLCAweGMzLCAweGRhLCAweGU2LCAweGI4LCAweDNiLCAweDEyLCAweDZmLCAweGQzLAorCTB4N2IsIDB4NmUsIDB4MjMsIDB4YmUsIDB4ZTcsIDB4N2UsIDB4NDUsIDB4MWYsIDB4OGYsIDB4YjcsIDB4MzgsIDB4NmIsCisJMHhlMiwgMHg3YiwgMHhlZSwgMHgyOSwgMHg5ZCwgMHhlZiwgMHhiOSwgMHgwMSwgMHg3ZCwgMHg0OSwgMHgxZiwgMHhiZCwKKwkweGU3LCAweDA2LCAweDYzLCAweGY3LCAweGRjLCAweGNjLCAweDk2LCAweGViLCAweGY3LCAweDhiLCAweGJiLCAweDk5LAorCTB4NGYsIDB4MzgsIDB4ZjYsIDB4MzIsIDB4OWYsIDB4ZjYsIDB4Y2IsIDB4MTUsIDB4YjMsIDB4M2UsIDB4MWMsIDB4OTMsCisJMHg1OCwgMHhlZiwgMHgxYywgMHhjYiwgMHg5MiwgMHhkYywgMHhlYywgMHg2ZSwgMHg5OCwgMHhlOSwgMHhlMiwgMHg1NSwKKwkweGNjLCAweDgzLCAweDcyLCAweDZmLCAweDNmLCAweDVkLCAweDE4LCAweGE5LCAweDJlLCAweDI2LCAweDEzLCAweDliLAorCTB4ZGUsIDB4YTgsIDB4MzYsIDB4NWUsIDB4ZDUsIDB4YzcsIDB4YjUsIDB4OTEsIDB4OGQsIDB4OTMsIDB4NjksIDB4MjMsCisJMHgxOSwgMHg3MywgMHg0NywgMHgyOSwgMHhlMSwgMHgwYywgMHgyYywgMHgyMywgMHgxZSwgMHgwOSwgMHhiZSwgMHhhMywKKwkweDIxLCAweDVlLCAweDU0LCAweGYzLCAweGI4LCAweGE3LCAweDE0LCAweDc4LCAweGVjLCAweDc2LCAweGY4LCAweDJjLAorCTB4MzUsIDB4OGEsIDB4OGMsIDB4MGIsIDB4YWYsIDB4ZmYsIDB4NjEsIDB4N2MsIDB4N2YsIDB4YzAsIDB4YmEsIDB4MGIsCisJMHgwMSwgMHhmZiwgMHhmZSwgMHhmMSwgMHgwOSwgMHgzZSwgMHhiZSwgMHgwNiwgMHgzZSwgMHg2NiwgMHhmYiwgMHgxOSwKKwkweGFkLCAweGJmLCAweDM0LCAweDUyLCAweDVmLCAweDRlLCAweDMxLCAweDRmLCAweDdjLCAweDdlLCAweDJmLCAweGQ1LAorCTB4YzgsIDB4MjYsIDB4NzIsIDB4YjcsIDB4ZmIsIDB4YzgsIDB4OGIsIDB4ZGUsIDB4NDQsIDB4ZmMsIDB4MGUsIDB4MDYsCisJMHgxZiwgMHg0NywgMHhmNywgMHg4YSwgMHgyYSwgMHg3NSwgMHg4NiwgMHgzNiwgMHhiZiwgMHhjMCwgMHhiYSwgMHgyZCwKKwkweDcxLCAweDEzLCAweDVmLCAweDZmLCAweDBjLCAweGIyLCAweGIxLCAweGI5LCAweDlkLCAweGViLCAweGZlLCAweDhkLAorCTB4ZjMsIDB4MTksIDB4NzksIDB4ZGYsIDB4YjAsIDB4ZWYsIDB4ZmIsIDB4MTEsIDB4ZTcsIDB4YmIsIDB4NzcsIDB4ODEsCisJMHhjNSwgMHgzYiwgMHhlMSwgMHgzNCwgMHhmZCwgMHgxZSwgMHgxYywgMHg3YiwgMHgzYiwgMHhjZSwgMHg3OSwgMHg5MywKKwkweDVjLCAweDE3LCAweGZlLCAweGMzLCAweDk5LCAweGM3LCAweDY3LCAweGJkLCAweGY3LCAweDM5LCAweDk5LCAweDJlLAorCTB4ZDMsIDB4NTcsIDB4MWQsIDB4YWUsIDB4OTMsIDB4YTksIDB4N2UsIDB4MmEsIDB4OGEsIDB4MmUsIDB4ZTIsIDB4ZGMsCisJMHg1ZiwgMHgxOSwgMHgzYiwgMHhmNywgMHg3MSwgMHgwNywgMHgzYywgMHhjOSwgMHhmOSwgMHg3ZiwgMHg5NiwgMHhmMywKKwkweGVmLCAweDQ2LCAweDMzLCAweGYzLCAweGQ2LCAweDRkLCAweDk3LCAweDVjLCAweGE5LCAweGRlLCAweGU3LCAweDdjLAorCTB4NmMsIDB4OTgsIDB4OGIsIDB4MTEsIDB4MWQsIDB4N2EsIDB4MTQsIDB4YzksIDB4ZjMsIDB4N2MsIDB4MzYsIDB4YmQsCisJMHg5YiwgMHhmYSwgMHgxYywgMHg2ZCwgMHgzNywgMHgxZSwgMHhlMSwgMHgxZSwgMHg1MywgMHg4YiwgMHg3ZiwgMHgxNywKKwkweDcyLCAweGZiLCAweDNjLCAweDBmLCAweDk3LCAweGYxLCAweDBlLCAweDM5LCAweDQ3LCAweDc4LCAweGQyLCAweDZmLAorCTB4MzUsIDB4MmEsIDB4ZjAsIDB4YjUsIDB4Y2MsIDB4NzUsIDB4ODUsIDB4ZTIsIDB4N2IsIDB4MjEsIDB4ZWUsIDB4NmUsCisJMHgzZiwgMHg2ZiwgMHg1MywgMHgxMiwgMHgzYiwgMHg2YSwgMHhjZSwgMHgzOSwgMHhhYywgMHgwNSwgMHg5OCwgMHg4OCwKKwkweDA2LCAweDMwLCAweDllLCAweDQ3LCAweGFjLCAweGIyLCAweGNjLCAweDkzLCAweDcyLCAweGYyLCAweDViLCAweGQ1LAorCTB4MWEsIDB4YzYsIDB4NTYsIDB4NGUsIDB4NzIsIDB4MmUsIDB4ZjksIDB4NTEsIDB4YjQsIDB4MzYsIDB4ODgsIDB4Y2YsCisJMHg0NCwgMHg4NywgMHhiOSwgMHhlNiwgMHg4NywgMHgwNywgMHg2NSwgMHg3ZSwgMHhiYiwgMHgyMSwgMHg3ZiwgMHhlYiwKKwkweDk4LCAweGM3LCAweDdjLCAweDAyLCAweDBmLCAweDhiLCAweGEyLCAweDc2LCAweGMzLCAweDE0LCAweGY1LCAweDllLAorCTB4MjksIDB4OTYsIDB4N2EsIDB4MzIsIDB4NTQsIDB4NTIsIDB4YzgsIDB4ZDEsIDB4MTQsIDB4ZTcsIDB4MDgsIDB4M2EsCisJMHhkMSwgMHg3MywgMHg1OCwgMHhjYiwgMHgyZCwgMHg1MywgMHhmOCwgMHhjOCwgMHhhMywgMHhiZSwgMHhhZCwgMHg1OCwKKwkweDYyLCAweDg1LCAweDc2LCAweGIxLCAweGM3LCAweDQ3LCAweDUxLCAweDcyLCAweGE3LCAweDM1LCAweDQ1LCAweDZkLAorCTB4MzgsIDB4ZjcsIDB4MjMsIDB4Y2MsIDB4Y2QsIDB4NmIsIDB4NjIsIDB4MmQsIDB4ZjMsIDB4NzksIDB4YjYsIDB4MmMsCisJMHg5ZCwgMHg4MywgMHg4ZiwgMHhjZSwgMHhmNywgMHg3NywgMHgxMSwgMHg0MywgMHhmOSwgMHgzYywgMHhjYiwgMHgyMywKKwkweGU2LCAweDU5LCAweDI2LCAweDVmLCAweGY2LCAweGVmLCAweDYyLCAweGZmLCAweGVmLCAweGY0LCAweDgwLCAweDBmLAorCTB4NzIsIDB4YzcsIDB4YjcsIDB4ODcsIDB4NzksIDB4MWEsIDB4NjMsIDB4NTgsIDB4MDYsIDB4MTcsIDB4ZDksIDB4M2UsCisJMHg4YSwgMHg4MiwgMHhjNSwgMHgzOCwgMHg0NywgMHhjMSwgMHg1YSwgMHhlNiwgMHhjYSwgMHhiNywgMHg5MCwgMHhhNywKKwkweGQ3LCAweDY5LCAweGExLCAweDVjLCAweDhmLCAweGRmLCAweDExLCAweDcyLCAweDEyLCAweGZlLCAweDVkLCAweGMwLAorCTB4MTIsIDB4NGQsIDB4N2MsIDB4ZDcsIDB4ZDIsIDB4ZWYsIDB4ODAsIDB4NzMsIDB4ZjgsIDB4NDUsIDB4MWUsIDB4ODMsCisJMHg3MywgMHg3OSwgMHhkNiwgMHhlMSwgMHg3ZiwgMHgwMSwgMHgxNywgMHhjNiwgMHhmMSwgMHhiMiwgMHg4NCwgMHgxNCwKKwkweDAwLCAweDAwLCAweDAwIH07CitzdGF0aWMgdTMyIGJueDJfVFBBVF9iMDlGd0RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKK3N0YXRpYyB1MzIgYm54Ml9UUEFUX2IwOUZ3Um9kYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CitzdGF0aWMgdTMyIGJueDJfVFBBVF9iMDlGd0Jzc1soMHgyNTAvNCkgKyAxXSA9IHsgMHgwIH07CitzdGF0aWMgdTMyIGJueDJfVFBBVF9iMDlGd1Nic3NbKDB4MzQvNCkgKyAxXSA9IHsgMHgwIH07CisKK3N0YXRpYyBzdHJ1Y3QgZndfaW5mbyBibngyX3RwYXRfZndfMDkgPSB7CisJLnZlcl9tYWpvcgkJCT0gMHgxLAorCS52ZXJfbWlub3IJCQk9IDB4MCwKKwkudmVyX2ZpeAkJCT0gMHgwLAorCisJLnN0YXJ0X2FkZHIJCQk9IDB4MDgwMDA4NjAsCisKKwkudGV4dF9hZGRyCQkJPSAweDA4MDAwODAwLAorCS50ZXh0X2xlbgkJCT0gMHgxNDgwLAorCS50ZXh0X2luZGV4CQkJPSAweDAsCisJLmd6X3RleHQJCQk9IGJueDJfVFBBVF9iMDlGd1RleHQsCisJLmd6X3RleHRfbGVuCQkJPSBzaXplb2YoYm54Ml9UUEFUX2IwOUZ3VGV4dCksCisKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDAxY2EwLAorCS5kYXRhX2xlbgkJCT0gMHgwLAorCS5kYXRhX2luZGV4CQkJPSAweDAsCisJLmRhdGEJCQkJPSBibngyX1RQQVRfYjA5RndEYXRhLAorCisJLnNic3NfYWRkcgkJCT0gMHgwODAwMWNhMCwKKwkuc2Jzc19sZW4JCQk9IDB4MzQsCisJLnNic3NfaW5kZXgJCQk9IDB4MCwKKwkuc2JzcwkJCQk9IGJueDJfVFBBVF9iMDlGd1Nic3MsCisKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDFjZTAsCisJLmJzc19sZW4JCQk9IDB4MjUwLAorCS5ic3NfaW5kZXgJCQk9IDB4MCwKKwkuYnNzCQkJCT0gYm54Ml9UUEFUX2IwOUZ3QnNzLAorCisJLnJvZGF0YV9hZGRyCQkJPSAweDAwMDAwMDAwLAorCS5yb2RhdGFfbGVuCQkJPSAweDAsCisJLnJvZGF0YV9pbmRleAkJCT0gMHgwLAorCS5yb2RhdGEJCQkJPSBibngyX1RQQVRfYjA5RndSb2RhdGEsCit9OworCitzdGF0aWMgdTggYm54Ml9UWFBfYjA5RndUZXh0W10gPSB7CisJMHgxZiwgMHg4YiwgMHgwOCwgMHgwOCwgMHg1MSwgMHhmZSwgMHgyZiwgMHg0NSwgMHgwMCwgMHgwMywgMHg3NCwgMHg2NSwKKwkweDczLCAweDc0LCAweDMxLCAweDJlLCAweDYyLCAweDY5LCAweDZlLCAweDAwLCAweGNkLCAweDdiLCAweDdmLCAweDcwLAorCTB4MWIsIDB4ZTcsIDB4OTksIDB4ZGUsIDB4YmIsIDB4MGIsIDB4ODAsIDB4MDQsIDB4MjksIDB4OGEsIDB4NWEsIDB4MzEsCisJMHgzMCwgMHg4MywgMHgzOCwgMHhiNCwgMHg4ZCwgMHgxNSwgMHgxNywgMHgzNCwgMHg2ZCwgMHhmMiwgMHgxYywgMHg1OCwKKwkweGU1LCAweGY5LCAweGQ4LCAweDA2LCAweGI1LCAweGQ3LCAweGMwLCAweDkyLCAweGEyLCAweDYzLCAweDI2LCAweDQ3LAorCTB4YmIsIDB4Y2MsIDB4OWQsIDB4OTIsIDB4NTEsIDB4N2QsIDB4MjgsIDB4NDgsIDB4MjksIDB4NmUsIDB4ZTMsIDB4YjQsCisJMHhhYSwgMHhlMywgMHgzZiwgMHgzNCwgMHg0ZCwgMHg1YiwgMHhjMywgMHgwMCwgMHgyNSwgMHhjYiwgMHgyZSwgMHg0NCwKKwkweGQwLCAweDE2LCAweDYzLCAweGE1LCAweDMzLCAweDM3LCAweDUzLCAweDE4LCAweDgwLCAweDI4LCAweGU3LCAweGJhLAorCTB4MjQsIDB4ZGMsIDB4ZTQsIDB4MmUsIDB4ZTksIDB4MWYsIDB4YzksIDB4OTksIDB4YTUsIDB4NmMsIDB4YzUsIDB4NmQsCisJMHhhZSwgMHgzMywgMHhiZSwgMHgzZiwgMHhkYSwgMHhhNiwgMHgzNywgMHhkNywgMHgxOSwgMHg4ZCwgMHhmYywgMHgyMywKKwkweGNlLCAweDhmLCAweGI5LCAweGI4LCAweDY5LCAweDdhLCAweDU2LCAweDViLCAweGQ5LCAweGU4LCAweGYzLCAweDdjLAorCTB4YmIsIDB4NGIsIDB4ODIsIDB4MzIsIDB4MTUsIDB4NWIsIDB4ZDcsIDB4NzYsIDB4YTYsIDB4OWMsIDB4YzEsIDB4MTAsCisJMHhmYiwgMHhlZCwgMHhiNywgMHhkZiwgMHhmNywgMHhmZSwgMHg3ZSwgMHhkZiwgMHhlNywgMHhmZCwgMHgxNiwgMHg3MSwKKwkweDkxLCAweDZlLCAweGYxLCAweGZmLCAweDc2LCAweGUzLCAweDkzLCAweDM4LCAweDdhLCAweGVjLCAweGIxLCAweDNiLAorCTB4YzYsIDB4ZWYsIDB4ZDgsIDB4MmYsIDB4NzIsIDB4ZTcsIDB4OWQsIDB4YjIsIDB4MmIsIDB4YWEsIDB4ZjMsIDB4ZTYsCisJMHhkYiwgMHgyMSwgMHg5MSwgMHhkYywgMHg0ZiwgMHhlNSwgMHhhZiwgMHhmYywgMHg4NywgMHhjNywgMHg4ZCwgMHg2MCwKKwkweDdkLCAweDdlLCAweDI0LCAweGFhLCAweGE3LCAweDVmLCAweGNjLCAweDY0LCAweDJjLCAweDg5LCAweDg2LCAweGQyLAorCTB4MzMsIDB4OWYsIDB4OWQsIDB4YjMsIDB4NDQsIDB4NmMsIDB4NzcsIDB4MjQsIDB4OTEsIDB4OTUsIDB4ZjcsIDB4NWEsCisJMHg4NSwgMHg1OCwgMHg1OCwgMHgzOCwgMHg3ZSwgMHg1MywgMHhmYSwgMHhjYSwgMHhlMywgMHhkZiwgMHhmZiwgMHgyZCwKKwkweGYzLCAweDlkLCAweDZhLCAweDQ4LCAweGEyLCAweDQ2LCAweDNhLCAweDI3LCAweGM2LCAweDkwLCAweDQ0LCAweDA3LAorCTB4ZjAsIDB4Y2MsIDB4ZWYsIDB4ZGYsIDB4M2EsIDB4YTUsIDB4NGIsIDB4NmYsIDB4YjAsIDB4NTYsIDB4NWMsIDB4MTYsCisJMHgyYSwgMHg2ZiwgMHhiNywgMHhiZSwgMHg3ZiwgMHg2YiwgMHg0YywgMHhmZSwgMHg1NSwgMHhkMywgMHg5MCwgMHgxNywKKwkweDliLCAweDYxLCAweDZkLCAweGIyLCAweGQyLCAweDIzLCAweGE1LCAweDhhLCAweDJiLCAweGM3LCAweGNiLCAweDA1LAorCTB4YzksIDB4MzYsIDB4NWYsIDB4OTAsIDB4ZTIsIDB4YjIsIDB4ZDEsIDB4OWIsIDB4MzksIDB4ZjcsIDB4MDcsIDB4NTIsCisJMHg1YSwgMHhlZSwgMHhlYiwgMHhjZCwgMHg5ZSwgMHg3MywgMHhhNSwgMHg1OCwgMHg4ZSwgMHhmNywgMHg2NiwgMHg5YSwKKwkweDQ2LCAweDZmLCAweGY2LCAweDRjLCAweDBjLCAweGQ3LCAweDdkLCAweGJkLCAweDk5LCAweDMzLCAweDY2LCAweDQxLAorCTB4YTQsIDB4MWYsIDB4NzMsIDB4ZTIsIDB4YmQsIDB4ZDksIDB4OGEsIDB4OTksIDB4MTMsIDB4MTksIDB4NGMsIDB4YmQsCisJMHgyMiwgMHgwMywgMHhiZCwgMHhkOSwgMHg2NiwgMHg0ZCwgMHg1YiwgMHgzNywgMHgzNCwgMHgyOSwgMHhmZSwgMHg4NiwKKwkweDE4LCAweGJkLCAweGU5LCAweGNiLCAweGFkLCAweDRmLCAweDU4LCAweDg2LCAweGVjLCAweGI1LCAweDY0LCAweGNmLAorCTB4MWUsIDB4NGIsIDB4OWUsIDB4ODgsIDB4YTcsIDB4YTMsIDB4OTIsIDB4M2YsIDB4ZGQsIDB4MjUsIDB4YjYsIDB4ZTIsCisJMHhjOSwgMHg5MCwgMHhmYywgMHg5OSwgMHgxMSwgMHg2MywgMHg0MywgMHgyMiwgMHg2MiwgMHhjNywgMHg4MiwgMHhlYiwKKwkweDU2LCAweDJiLCAweDkzLCAweGZhLCAweDAyLCAweGU1LCAweDhhLCAweGJkLCAweGE0LCAweDc3LCAweGIyLCAweDI5LAorCTB4OTIsIDB4YTksIDB4NDQsIDB4MjUsIDB4OTMsIDB4N2EsIDB4YWYsIDB4ZTUsIDB4M2QsIDB4MTMsIDB4YzUsIDB4YmUsCisJMHhlMSwgMHhkZSwgMHg4OSwgMHg0YSwgMHhhYiwgMHhlNSwgMHhhNCwgMHhiMCwgMHg0NywgMHgyYSwgMHg3OCwgMHgzNiwKKwkweDIyLCAweGQ1LCAweDk4LCAweDVkLCAweDJkLCAweGE1LCAweDRjLCAweGRkLCAweGQzLCAweDA5LCAweDc5LCAweGU0LAorCTB4YjUsIDB4MmQsIDB4YmEsIDB4ZjUsIDB4ZGIsIDB4OTIsIDB4OGYsIDB4NDksIDB4YjUsIDB4OTgsIDB4YmEsIDB4NGIsCisJMHg5ZSwgMHg0ZSwgMHgxOSwgMHg3MiwgMHgxMiwgMHhlYiwgMHgzZCwgMHg5NSwgMHg4MiwgMHgxYywgMHhhZCwgMHg2MywKKwkweDVhLCAweGE2LCAweDY5LCAweGM2LCAweDQ1LCAweDdiLCAweDVhLCAweDMyLCAweDY3LCAweDA2LCAweDhkLCAweGFjLAorCTB4NjAsIDB4NmYsIDB4YWIsIDB4NzUsIDB4NGIsIDB4MjYsIDB4ODUsIDB4ZmQsIDB4NDYsIDB4ZmYsIDB4NjcsIDB4Y2IsCisJMHg4ZSwgMHg5OSwgMHhiOSwgMHhhYSwgMHgwYywgMHg0OCwgMHhiMSwgMHgzMiwgMHg5OCwgMHhmYSwgMHgxMywgMHhkMSwKKwkweGE0LCAweGQzLCAweGEyLCAweDdjLCAweDVhLCAweDcyLCAweDNmLCAweGY2LCAweGNkLCAweDU4LCAweDE4LCAweDZmLAorCTB4OGEsIDB4YWQsIDB4MjcsIDB4MjMsIDB4ZjIsIDB4MGYsIDB4MGMsIDB4MzMsIDB4OTEsIDB4MDksIDB4ZjUsIDB4NGIsCisJMHhmMSwgMHg3NCwgMHgyNywgMHhlOCwgMHhiNCwgMHhmYiwgMHg3NCwgMHhjYywgMHgzZCwgMHgzMCwgMHgyNiwgMHhiMSwKKwkweDVkLCAweDIyLCAweDVhLCAweDI4LCAweDlkLCAweGM0LCAweGJhLCAweDIyLCAweDQ1LCAweDc3LCAweDAwLCAweGNmLAorCTB4MjYsIDB4YzcsIDB4N2YsIDB4MmEsIDB4N2IsIDB4MjQsIDB4YjEsIDB4MzcsIDB4MmMsIDB4MjUsIDB4YjcsIDB4MWIsCisJMHg3MiwgMHgzNCwgMHhhMCwgMHg4MywgMHhlNCwgMHhmOCwgMHg1ZiwgMHg0MCwgMHgyOSwgMHhiYSwgMHg5NSwgMHg4YywKKwkweDFmLCAweDkzLCAweDljLCAweDk2LCAweDZkLCAweDc2LCAweDQ4LCAweDI5LCAweDE5LCAweDk1LCAweDA1LCAweGQwLAorCTB4YjEsIDB4OTAsIDB4ZmEsIDB4YTIsIDB4OTYsIDB4MzksIDB4NzcsIDB4NTAsIDB4Y2IsIDB4OWUsIDB4YzMsIDB4YmMsCisJMHg2NiwgMHhkZCwgMHhiNywgMHgzNSwgMHgwMywgMHhlYiwgMHhlOCwgMHg1MiwgMHg0YywgMHgxZSwgMHhjNCwgMHhiZCwKKwkweGE4LCAweGNjLCAweDYxLCAweGRlLCAweDFjLCAweDc4LCAweDJhLCAweDM1LCAweGY3LCAweGM4LCAweGZhLCAweDZjLAorCTB4YWMsIDB4MzcsIDB4MDMsIDB4MWQsIDB4MTYsIDB4NzEsIDB4ZmYsIDB4YjcsIDB4NjcsIDB4MzQsIDB4MzEsIDB4MmMsCisJMHg1YiwgMHg3ZSwgMHgzYywgMHgwNiwgMHgxZCwgMHg5ZSwgMHg4MSwgMHhmZSwgMHhjZSwgMHhjNCwgMHhlNSwgMHg3OCwKKwkweDQ1LCAweDYyLCAweGJhLCAweDI0LCAweGUzLCAweDc5LCAweDc5LCAweDQxLCAweGVhLCAweDJlLCAweGY1LCAweDBmLAorCTB4N2QsIDB4NDIsIDB4ZGYsIDB4NDUsIDB4OTcsIDB4Y2YsIDB4NDEsIDB4NmYsIDB4MTUsIDB4MDcsIDB4ZjIsIDB4OTgsCisJMHgwMiwgMHgwZCwgMHgwZiwgMHg2YSwgMHhmNywgMHhkNywgMHg2NywgMHhiNSwgMHgwMywgMHhjZCwgMHgxZiwgMHg2YiwKKwkweGQyLCAweDdkLCAweDRjLCAweGZiLCAweDVjLCAweGYzLCAweDg4LCAweGU2LCAweGNiLCAweDFlLCAweGJhLCAweDhiLAorCTB4OGEsIDB4M2QsIDB4MTMsIDB4OTUsIDB4OTUsIDB4YTYsIDB4YTcsIDB4YmIsIDB4MWEsIDB4ZWMsIDB4ZDMsIDB4MzYsCisJMHg2YywgMHhlOCwgMHhlMSwgMHg2ZiwgMHg2ZiwgMHhjZSwgMHg1OSwgMHg2OSwgMHhjNiwgMHg2NCwgMHgwMSwgMHhiNCwKKwkweDFkLCAweDZmLCAweDcyLCAweGZlLCAweGVmLCAweDQxLCAweDNmLCAweDUxLCAweDcxLCAweDZmLCAweGVkLCAweDkxLAorCTB4MWMsIDB4YzYsIDB4OGIsIDB4NjcsIDB4YzQsIDB4Y2UsIDB4YTQsIDB4NzQsIDB4M2MsIDB4ZDMsIDB4MmIsIDB4MjEsCisJMHhhYiwgMHgxZiwgMHg5ZiwgMHg2ZSwgMHg5OSwgMHhhYiwgMHg3NywgMHhkYSwgMHgyMSwgMHgyYiwgMHgyNiwgMHg3MywKKwkweDRkLCAweGNhLCAweDEwLCAweGZmLCAweDJiLCAweDgxLCAweDFjLCAweDQ5LCAweDJiLCAweGM3LCAweGY5LCAweDFjLAorCTB4YzcsIDB4MGQsIDB4OGMsIDB4YjcsIDB4OGYsIDB4ZDEsIDB4MmUsIDB4N2EsIDB4NDEsIDB4OGYsIDB4MzksIDB4MmMsCisJMHgxOCwgMHhjYiwgMHg1NywgMHg5MiwgMHhjNiwgMHhlNywgMHhmOCwgMHhiZiwgMHg0OSwgMHhkOSwgMHgwNiwgMHgzMiwKKwkweDBkLCAweDYzLCAweGFlLCAweDJlLCAweGY5LCAweDNhLCAweGY2LCAweDM5LCAweDdkLCAweGE1LCAweDE1LCAweDE5LAorCTB4YzMsIDB4YjUsIDB4ZjUsIDB4NGIsIDB4YzgsIDB4OTIsIDB4ZmIsIDB4ODYsIDB4NDEsIDB4OTMsIDB4MmUsIDB4YjksCisJMHgzYSwgMHhkNywgMHhlMiwgMHg3ZCwgMHg4MSwgMHhlZSwgMHg4YiwgMHg3YiwgMHg3NSwgMHgxOSwgMHg4NiwgMHg3ZSwKKwkweDRkLCAweGVjLCAweGQzLCAweDg1LCAweDM5LCAweDNkLCAweDkwLCAweDFmLCAweDc4LCAweDNkLCAweDg3LCAweGVmLAorCTB4ZTAsIDB4NWQsIDB4YjcsIDB4NzQsIDB4M2MsIDB4ZGYsIDB4MjksIDB4NzMsIDB4MjksIDB4ZGEsIDB4MGIsIDB4ZTksCisJMHhkYywgMHg4NSwgMHhiNSwgMHhiYiwgMHg2NCwgMHhmZSwgMHgzNCwgMHhlNSwgMHgwMSwgMHhiYiwgMHhhYSwgMHhjNCwKKwkweGE0LCAweDc0LCAweGM2LCAweDM0LCAweDFjLCAweDMxLCAweDIxLCAweDFiLCAweDFiLCAweGYzLCAweDNhLCAweDI1LAorCTB4NjcsIDB4YjQsIDB4NWEsIDB4MTMsIDB4YTksIDB4MTEsIDB4ZTMsIDB4OWIsIDB4Y2EsIDB4Y2UsIDB4NDcsIDB4OGMsCisJMHhhNCwgMHgyNiwgMHg4NSwgMHg4ZSwgMHhmNCwgMHgxMCwgMHg2NCwgMHg2YiwgMHgxZSwgMHgxNCwgMHhlMSwgMHhmNSwKKwkweDBmLCAweGM0LCAweDllLCAweGE1LCAweGZmLCAweGM0LCAweGI4LCAweDE3LCAweGZjLCAweGE5LCAweDFmLCAweGY0LAorCTB4ZDMsIDB4ZTcsIDB4MDYsIDB4YTAsIDB4OTcsIDB4YjgsIDB4ZjIsIDB4ODMsIDB4ODksIDB4MWQsIDB4ZmQsIDB4YzAsCisJMHg5YywgMHhhYSwgMHg4MiwgMHhkZiwgMHhlMiwgMHhiOSwgMHgzMCwgMHhmZCwgMHgyZiwgMHgwNSwgMHg3MywgMHg5MywKKwkweDVkLCAweDU2LCAweDE0LCAweGI2LCAweDQwLCAweDVhLCAweGM2LCAweGIxLCAweDdlLCAweGFiLCAweGY1LCAweGQ5LAorCTB4OTQsIDB4NDcsIDB4NTMsIDB4ZjEsIDB4OGMsIDB4OGQsIDB4NjcsIDB4YzMsIDB4OTAsIDB4YmIsIDB4ZjksIDB4NzAsCisJMHg0MiwgMHhlZCwgMHgzZiwgMHhlZSwgMHhlZiwgMHg2ZiwgMHhjOCwgMHgxYywgMHhlOCwgMHgyZSwgMHg1NiwgMHg0MiwKKwkweDkyLCAweDM1LCAweGI4LCAweGM2LCAweDlmLCAweDcxLCAweDNjLCAweGU3LCAweGFkLCAweDA1LCAweGJiLCAweDNkLAorCTB4MzUsIDB4NjgsIDB4ZGMsIDB4MDcsIDB4NWYsIDB4YTIsIDB4OGYsIDB4MTUsIDB4NTcsIDB4MjksIDB4NjMsIDB4YWMsCisJMHgzMywgMHg0NiwgMHgxOSwgMHgxYiwgMHg4YSwgMHhjNiwgMHhjYywgMHgxOSwgMHhkYSwgMHg5MSwgMHgwYywgMHg4NCwKKwkweDg0LCAweDc2LCAweDhlLCAweDk4LCAweDAxLCAweGJiLCAweDJhLCAweGY5LCAweDc2LCAweDk1LCAweDc3LCAweGE5LAorCTB4ZmYsIDB4YmIsIDB4N2QsIDB4ZmYsIDB4ZDQsIDB4NjUsIDB4MjgsIDB4NDksIDB4N2IsIDB4N2YsIDB4NWEsIDB4YjIsCisJMHhmMCwgMHhmMSwgMHgzOSwgMHhlYywgMHg1NCwgMHgwNywgMHg0ZiwgMHhiNSwgMHhjYSwgMHgyMCwgMHg2NCwgMHgxNSwKKwkweGY4LCAweDFkLCAweGY0LCAweDNiLCAweGZhLCAweDZlLCAweDJiLCAweDg4LCAweDA1LCAweGM1LCAweDBhLCAweDdkLAorCTB4YTYsIDB4NjgsIDB4ZTgsIDB4NTIsIDB4YzAsIDB4MDcsIDB4NzYsIDB4NjMsIDB4OTksIDB4YzMsIDB4OTksIDB4OTAsCisJMHgzOSwgMHg5MywgMHgwMywgMHg2ZCwgMHhiMCwgMHg3YiwgMHhjOSwgMHhkYywgMHg0OSwgMHg3YiwgMHhjNiwgMHg5YywKKwkweGE2LCAweGVjLCAweDBmLCAweGZjLCAweGFjLCAweGU2LCAweDUyLCAweDRmLCAweGRkLCAweGQ4LCAweDM3LCAweGEwLAorCTB4MjksIDB4OGMsIDB4MzEsIDB4YWUsIDB4MTMsIDB4ODUsIDB4Y2QsIDB4MDcsIDB4MzYsIDB4NDMsIDB4ZmIsIDB4MzMsCisJMHhlZCwgMHg3NSwgMHhlOSwgMHg5MCwgMHhlMSwgMHgyNCwgMHg2MiwgMHhkOSwgMHgxOSwgMHgxZCwgMHhmYSwgMHgxYiwKKwkweDQwLCAweDRjLCAweDA5LCAweGNiLCAweDExLCAweGM4LCAweGVhLCAweDRiLCAweDE1LCAweGQyLCAweGU3LCAweGMwLAorCTB4ZWYsIDB4MTAsIDB4ZGIsIDB4Y2UsIDB4NGMsIDB4YzIsIDB4Y2YsIDB4YTYsIDB4YjQsIDB4MDksIDB4ZjgsIDB4YzQsCisJMHg2NywgMHhlYSwgMHhhNCwgMHhhOSwgMHgyNSwgMHhmNCwgMHg0YiwgMHhlNywgMHg1YywgMHg0ZSwgMHg5YiwgMHg2YywKKwkweDFlLCAweGQ0LCAweGE2LCAweGNlLCAweGQxLCAweDRmLCAweGU4LCAweDIzLCAweGE2LCAweGYxLCAweDgwLCAweDc4LAorCTB4M2MsIDB4MTQsIDB4OWIsIDB4YWYsIDB4NjgsIDB4ZjQsIDB4ZDUsIDB4ZTIsIDB4YTksIDB4MmUsIDB4ZDAsIDB4YjEsCisJMHgwYiwgMHhmNCwgMHgxOCwgMHhmMCwgMHgzZCwgMHhkOCwgMHg5NywgMHg2NSwgMHhjZSwgMHhkMCwgMHg2NiwgMHg5YywKKwkweGE0LCAweDk1LCAweGY4LCAweGU3LCAweGYyLCAweDQxLCAweDM5LCAweDRjLCAweDZjLCAweGNhLCAweDYxLCAweDA0LAorCTB4MzIsIDB4ZDksIDB4MmUsIDB4ODcsIDB4ODUsIDB4MGYsIDB4Y2EsIDB4YzEsIDB4MmUsIDB4NDAsIDB4MGUsIDB4MGIsCisJMHg4OCwgMHg0MywgMHgwYiwgMHg0ZCwgMHhmMiwgMHhkYywgMHgxMiwgMHhmZCwgMHg0ZSwgMHg4MSwgMHg3NSwgMHhjYSwKKwkweGJkLCAweDdhLCAweDlhLCAweDM2LCAweDRhLCAweDNmLCAweDQ5LCAweDI2LCAweDRhLCAweDU4LCAweGExLCAweGUxLAorCTB4ZjYsIDB4MjgsIDB4ZGYsIDB4OTgsIDB4NTQsIDB4YjIsIDB4ZjgsIDB4MzAsIDB4N2UsIDB4YzksIDB4ZGYsIDB4MTYsCisJMHhjZiwgMHg1MywgMHg3NSwgMHhjNiwgMHgxYiwgMHhkOCwgMHg3OSwgMHhkMiwgMHgzMiwgMHhiZSwgMHgyMCwgMHg1YiwKKwkweDdjLCAweGRmLCAweGI3LCAweGM1LCAweDM3LCAweGY2LCAweDA5LCAweDYyLCAweDEwLCAweDc5LCAweDBlLCAweGUyLAorCTB4MzEsIDB4NmQsIDB4ZTUsIDB4YTUsIDB4NTYsIDB4YzgsIDB4YjIsIDB4YTAsIDB4MDMsIDB4ZGEsIDB4MGIsIDB4NjksCisJMHgzMCwgMHg4ZCwgMHhjZiwgMHgwYSwgMHhmZSwgMHgyMywgMHgyZSwgMHhkMCwgMHg5NywgMHg3MiwgMHg2YSwgMHg1ZSwKKwkweDg3LCAweGU0LCAweGY2LCAweDdhLCAweGYzLCAweGU3LCAweDJhLCAweGFkLCAweDVmLCAweGU4LCAweGU5LCAweGY3LAorCTB4NWIsIDB4OTksIDB4MzEsIDB4Y2IsIDB4ZjcsIDB4ZjEsIDB4YTgsIDB4N2MsIDB4YjksIDB4NmUsIDB4ZTYsIDB4MTIsCisJMHg1YSwgMHg4ZiwgMHgxNCwgMHg2ZSwgMHg0MCwgMHg1YywgMHhhOSwgMHhkMCwgMHgzZiwgMHhmYSwgMHhhZiwgMHgxMSwKKwkweGNiLCAweDA2LCAweGZjLCAweDU4LCAweGY2LCAweDEzLCAweGM4LCAweDllLCAweGI5LCAweGU3LCAweGYwLCAweGZiLAorCTB4ZWIsIDB4MzEsIDB4ZmUsIDB4NGYsIDB4MWEsIDB4MzMsIDB4ZjIsIDB4MDUsIDB4ZTYsIDB4OWIsIDB4M2QsIDB4YmEsCisJMHg4YSwgMHhkZiwgMHgxNiwgMHg3MywgMHg0MSwgMHgyMSwgMHg5YywgMHhlZSwgMHg5NiwgMHhjMiwgMHg1ZSwgMHgyOSwKKwkweDg0LCAweGQyLCAweGY0LCAweDIzLCAweGZhLCAweDQ2LCAweDg3LCAweDRmLCAweDc3LCAweDkwLCAweDNiLCAweGY4LAorCTB4NzcsIDB4NGMsIDB4MTcsIDB4OGIsIDB4NzMsIDB4OTAsIDB4MjcsIDB4MmEsIDB4ZTQsIDB4ZTMsIDB4YmQsIDB4NDAsCisJMHgyNywgMHg3OCwgMHg0NiwgMHgyMiwgMHg5ZSwgMHhjZCwgMHg0ZCwgMHgyMywgMHg2NiwgMHg1MiwgMHhhNiwgMHhlZCwKKwkweGY2LCAweGMyLCAweDU4LCAweDJhLCAweDA5LCAweGRkLCAweDYyLCAweDJjLCAweDE1LCAweDIzLCAweDk0LCAweDdlLAorCTB4NTAsIDB4YjMsIDB4ZWIsIDB4NWYsIDB4ZDQsIDB4NmMsIDB4YzgsIDB4Y2UsIDB4ODYsIDB4ZWMsIDB4NmMsIDB4YzgsCisJMHgyZSwgMHgwMywgMHhkOSwgMHg2NSwgMHg5YiwgMHhhNCwgMHg4NywgMHhiNCwgMHg3OCwgMHhlYiwgMHgzYiwgMHhkZSwKKwkweGZhLCAweGEwLCAweGIzLCAweDVmLCAweGYyLCAweGNhLCAweGM3LCAweGM5LCAweDJmLCAweDYyLCAweGIyLCAweDhhLAorCTB4MDcsIDB4OTMsIDB4OWEsIDB4MTcsIDB4MGYsIDB4YjgsIDB4ZGUsIDB4MTQsIDB4OWUsIDB4YmYsIDB4MWIsIDB4NzksCisJMHhjZSwgMHhkNiwgMHg3NSwgMHg2YiwgMHg0YiwgMHgyNiwgMHgwYiwgMHg2ZCwgMHgzMiwgMHgyOSwgMHhiOSwgMHg5NCwKKwkweDExLCAweGU3LCAweGQzLCAweDk3LCAweDVkLCAweGU4LCAweDNkLCAweDkwLCAweGNiLCAweDM0LCAweDY4LCAweGU4LAorCTB4MjQsIDB4ZWYsIDB4M2UsIDB4MWYsIDB4NWMsIDB4YmYsIDB4Y2YsIDB4NWYsIDB4ZmYsIDB4ZDMsIDB4NTgsIDB4OTMsCisJMHhiZSwgMHhiYiwgMHhkMywgMHhiZSwgMHhkYywgMHg5MywgMHhiOSwgMHhmNCwgMHhkNywgMHhmMSwgMHg4MywgMHg1YSwKKwkweDAyLCAweDMxLCAweGZhLCAweDQ1LCAweGY4LCAweGRhLCAweGM1LCAweDUwLCAweDVjLCAweGJlLCAweDdmLCAweGViLAorCTB4NmIsIDB4YTgsIDB4MmYsIDB4YTQsIDB4NzAsIDB4NjMsIDB4YmEsIDB4OTUsIDB4MDgsIDB4YTcsIDB4ZGYsIDB4NmIsCisJMHgyZCwgMHg4YywgMHgyMSwgMHg3ZSwgMHhhNiwgMHhjZCwgMHg3OCwgMHgyNiwgMHgzNCwgMHgyYSwgMHgyZiwgMHgzNSwKKwkweDg3LCAweGU1LCAweDNiLCAweDRkLCAweDRiLCAweGZlLCAweGE4LCAweDk5LCAweDkwLCAweDNmLCAweDZjLCAweDBlLAorCTB4YzgsIDB4YjcsIDB4OWIsIDB4NzEsIDB4ZjksIDB4NTYsIDB4MzMsIDB4YTgsIDB4NDUsIDB4ZTIsIDB4YjQsIDB4YTUsCisJMHg1ZSwgMHhhNywgMHhiOSwgMHg1MywgMHgzZCwgMHgwNCwgMHgzYiwgMHhjNywgMHg1YSwgMHg5OSwgMHhiMSwgMHg3MCwKKwkweDJlLCAweDk0LCAweDU2LCAweDM1LCAweGMyLCAweGNjLCAweGQxLCAweGYyLCAweGUzLCAweDJkLCAweGRkLCAweGIyLAorCTB4MGEsIDB4YmEsIDB4ZGUsIDB4MzMsIDB4NmUsIDB4ZGMsIDB4MjUsIDB4MzksIDB4M2QsIDB4OGQsIDB4MzEsIDB4NzcsCisJMHgzYywgMHhlYywgMHg5NCwgMHhiYiwgMHg5MCwgMHg1ZiwgMHhhMiwgMHhhOCwgMHg2NSwgMHgwNiwgMHhhNCwgMHg4MCwKKwkweDc1LCAweDBiLCAweGNkLCAweDU2LCAweDZiLCAweDI5LCAweGY1LCAweDBmLCAweDNmLCAweDY1LCAweGZjLCAweDhkLAorCTB4N2YsIDB4ZDksIDB4MjksIDB4YmQsIDB4ZGYsIDB4NWUsIDB4MzcsIDB4ODYsIDB4ZmUsIDB4YmIsIDB4NWYsIDB4MGYsCisJMHhhMSwgMHhjNiwgMHhlYSwgMHg1NywgMHg4YiwgMHhlNywgMHhiNCwgMHhmNCwgMHhhOCwgMHg5MywgMHg3MCwgMHgzNywKKwkweDcwLCAweDVmLCAweGEyLCAweGZkLCAweGQ2LCAweGNmLCAweDUxLCAweDg1LCAweGM4LCAweGVlLCAweDk4LCAweGM1LAorCTB4OWEsIDB4NmIsIDB4MjYsIDB4ZmIsIDB4NzksIDB4ZmMsIDB4ZmYsIDB4NTgsIDB4NWEsIDB4ZjYsIDB4ZjQsIDB4ZTEsCisJMHhmZiwgMHhkZSwgMHgzNCwgMHg0YywgMHgyYSwgMHhjZCwgMHg5OCwgMHhhYywgMHhiNSwgMHhjNSwgMHg2NCwgMHhkMSwKKwkweDFjLCAweGU0LCAweGRmLCAweDA1LCAweGYwLCAweGU0LCAweDQwLCAweDFlLCAweGJmLCAweGQzLCAweDhjLCAweDZhLAorCTB4ZDksIDB4ZDMsIDB4ZmQsIDB4NTIsIDB4YWEsIDB4MzMsIDB4YWYsIDB4NzEsIDB4NWUsIDB4ZDQsIDB4YWYsIDB4N2IsCisJMHg3OCwgMHhkZCwgMHg4MSwgMHg2YiwgMHg0MSwgMHhhZSwgMHhmOSwgMHg5NCwgMHg0OCwgMHhhZiwgMHhmOSwgMHhhMywKKwkweGNmLCAweDRiLCAweGRkLCAweGFmLCAweDViLCAweDIyLCAweGIyLCAweGFjLCAweDZjLCAweDhjLCAweGUzLCAweGFmLAorCTB4NjUsIDB4YmYsIDB4MzYsIDB4YjQsIDB4MzUsIDB4ZmUsIDB4ZWMsIDB4ZTYsIDB4ZjgsIDB4M2IsIDB4ZDksIDB4NGYsCisJMHg2ZiwgMHg4ZSwgMHg3NywgMHg4NywgMHgzZCwgMHgxZSwgMHhjNiwgMHhiNSwgMHg5OSwgMHg2NiwgMHhjMSwgMHgxZiwKKwkweGJiLCAweDBjLCAweGI5LCAweGI3LCAweDVhLCAweDBiLCAweGM4LCAweDNkLCAweDQ1LCAweGViLCAweDMyLCAweGVhLAorCTB4MjQsIDB4YzYsIDB4OWYsIDB4ZWIsIDB4ODksIDB4MzcsIDB4ZGIsIDB4NjIsIDB4OGQsIDB4OTEsIDB4MDksIDB4NTEsCisJMHg5ZiwgMHg1MSwgMHhmMSwgMHhkNiwgMHhlNCwgMHhmZCwgMHg0ZSwgMHhjNCwgMHg5ZCwgMHhjYiwgMHhmOCwgMHhjZSwKKwkweDNjLCAweDE3LCAweGM0LCAweDNjLCAweGNlLCAweGUxLCAweGYzLCAweDZmLCAweDVmLCAweDQzLCAweGU3LCAweDMxLAorCTB4ZTgsIDB4ZmMsIDB4ZmYsIDB4MWIsIDB4ZGQsIDB4ZTIsIDB4NGYsIDB4ZTksIDB4NTYsIDB4YzUsIDB4OWQsIDB4OTcsCisJMHhiNiwgMHhkOSwgMHgyYywgMHhlOSwgMHhlZiwgMHhmNiwgMHg2OSwgMHg5NiwgMHg2OCwgMHgzOCwgMHg2ZCwgMHgzOCwKKwkweDBiLCAweGQ2LCAweDhkLCAweDEyLCAweDQxLCAweDBkLCAweDRiLCAweDliLCAweDJkLCAweDM1LCAweGJmLCAweDhiLAorCTB4ZTcsIDB4OTksIDB4MjcsIDB4MjUsIDB4MWEsIDB4NDksIDB4ZDMsIDB4MmUsIDB4ZDYsIDB4MDcsIDB4MzIsIDB4ZDYsCisJMHgzMSwgMHhhNywgMHhlNiwgMHgxZSwgMHg3MywgMHhjZSwgMHgyYSwgMHgzYiwgMHg1OSwgMHhiZiwgMHhjOSwgMHhhYiwKKwkweGNkLCAweDdmLCAweDc0LCAweDEzLCAweDZhLCAweDczLCAweDNjLCAweGNmLCAweDk4LCAweGNiLCAweGYxLCAweDQ2LAorCTB4NGYsIDB4YzYsIDB4NjIsIDB4MGUsIDB4NWEsIDB4NzIsIDB4OGEsIDB4ZjgsIDB4MmMsIDB4YTgsIDB4YjksIDB4YWYsCisJMHgwZSwgMHg3MCwgMHg2ZSwgMHg2NywgMHgzYSwgMHg3NiwgMHhkMywgMHg4ZiwgMHhmMSwgMHhiZiwgMHgyMywgMHhmZCwKKwkweGNlLCAweDRkLCAweDE3LCAweDJjLCAweGFlLCAweDNiLCAweDc1LCAweGQzLCAweDU5LCAweGI1LCAweDQ2LCAweDE4LAorCTB4ZjEsIDB4OGMsIDB4ZjMsIDB4MmUsIDB4ZGYsIDB4YzQsIDB4NjcsIDB4OWYsIDB4NDQsIDB4MWMsIDB4M2YsIDB4ZTEsCisJMHg0MiwgMHg5NywgMHhlZSwgMHg4YiwgMHg0ZSwgMHgxZSwgMHg5ZiwgMHgzOSwgMHhkMiwgMHg1NCwgMHhlMSwgMHg3ZCwKKwkweGUzLCAweGU2LCAweDhjLCAweDE1LCAweDU2LCAweGY5LCAweGY2LCAweDRiLCAweDk4LCAweDczLCAweDA0LCAweDczLAorCTB4MGUsIDB4YmIsIDB4MDEsIDB4M2YsIDB4ZWEsIDB4YmUsIDB4OTMsIDB4YzUsIDB4ZmQsIDB4YzMsIDB4NjUsIDB4YzMsCisJMHg3MSwgMHhjYSwgMHhlNiwgMHgzOCwgMHg2YSwgMHg4ZSwgMHhmOCwgMHg3MSwgMHhlNCwgMHhlMywgMHgxYywgMHg3MiwKKwkweGEwLCAweDJkLCAweGU2LCAweDcwLCAweDQxLCAweGQyLCAweDVkLCAweDkzLCAweGE4LCAweGU1LCAweDU2LCAweDkwLAorCTB4NGYsIDB4NTAsIDB4ODcsIDB4YTQsIDB4YWEsIDB4MzIsIDB4ZDgsIDB4OTUsIDB4MzksIDB4YWQsIDB4YzMsIDB4M2UsCisJMHhlZiwgMHg4MCwgMHhiZCwgMHgxYSwgMHg4ZSwgMHg5ZSwgMHg0NCwgMHg1YywgMHg0NywgMHhkYywgMHg1YywgMHhhOCwKKwkweDU4LCAweDVhLCAweGI2LCAweDNjLCAweDY4LCAweDk0LCAweGU0LCAweDU2LCAweDU5LCAweDM3LCAweGNjLCAweGY4LAorCTB4YTQsIDB4ZWMsIDB4OTIsIDB4NmMsIDB4MTgsIDB4ZjMsIDB4ODYsIDB4M2YsIDB4MmUsIDB4YjksIDB4YjgsIDB4ODYsCisJMHhkOCwgMHg3MCwgMHgwMywgMHhlMiwgMHgxNiwgMHhlYiwgMHhlNCwgMHhmNiwgMHgxOCwgMHhmYSwgMHgwYiwgMHgxMSwKKwkweGViLCAweDhiLCAweDIxLCAweGM2LCAweDllLCAweDRlLCAweDhiLCAweDc1LCAweDNmLCAweGU3LCAweGVkLCAweDkyLAorCTB4OGQsIDB4MGYsIDB4Y2MsIDB4N2IsIDB4YjcsIDB4NmQsIDB4NWUsIDB4ZmIsIDB4ZjgsIDB4N2IsIDB4MTgsIDB4ZGYsCisJMHgyNSwgMHgxNywgMHg0MSwgMHg0NywgMHgzOCwgMHgzOSwgMHgyNiwgMHgyNSwgMHhmMCwgMHgxMCwgMHgzOSwgMHhkNSwKKwkweDZhLCAweDVkLCAweDAwLCAweDNmLCAweDNhLCAweGY4LCAweDJmLCAweDU2LCAweDU5LCAweDBiLCAweDg0LCAweGE0LAorCTB4NmEsIDB4ZTAsIDB4OWUsIDB4ZGIsIDB4NmEsIDB4ZDUsIDB4MTAsIDB4NDYsIDB4ZjUsIDB4NTUsIDB4ZDIsIDB4MWMsCisJMHg5NSwgMHg0OSwgMHg3NywgMHg0OCwgMHhlYywgMHgwNiwgMHhlNSwgMHg2MCwgMHhjMiwgMHhlYiwgMHhmZSwgMHhhYywKKwkweDJiLCAweDdiLCAweDg2LCAweDM5LCAweDEzLCAweDE2LCAweGIxLCAweGZhLCAweGU3LCAweDVkLCAweDE5LCAweGU0LAorCTB4M2UsIDB4N2QsIDB4ZjUsIDB4NjIsIDB4NTcsIDB4MTYsIDB4N2EsIDB4MGYsIDB4YWQsIDB4ZmUsIDB4ZTcsIDB4MmUsCisJMHhlNywgMHgzNCwgMHhlOSwgMHgwYSwgMHgyMSwgMHhmNywgMHhkZCwgMHgyMiwgMHg0NSwgMHhhMywgMHgyNSwgMHhkZiwKKwkweDQ0LCAweDhkLCAweDUwLCAweDFjLCAweDQ2LCAweDJlLCAweDgzLCAweDE3LCAweGU4LCAweGEwLCAweGJiLCAweDYwLAorCTB4NDgsIDB4YjQsIDB4M2IsIDB4ZmQsIDB4N2QsIDB4ZDAsIDB4MzcsIDB4MDYsIDB4ZDksIDB4ZWMsIDB4YzIsIDB4OWMsCisJMHgxMCwgMHhjNiwgMHg4NywgMHhmMCwgMHhiZiwgMHg3ZCwgMHhmYywgMHg4ZCwgMHgyZSwgMHhlNCwgMHgwNSwgMHhjNCwKKwkweDYwLCAweDg5LCAweDY2LCAweGM2LCAweDdhLCAweGIwLCAweGZlLCAweGY3LCAweDMwLCAweDhlLCAweDA5LCAweGM5LAorCTB4Y2QsIDB4ZjEsIDB4MjcsIDB4YmMsIDB4ZjEsIDB4YjcsIDB4NDEsIDB4MGIsIDB4OWYsIDB4NjMsIDB4OGQsIDB4MjIsCisJMHhkMSwgMHhiOSwgMHgzMSwgMHgwMywgMHgzNCwgMHg3MCwgMHg2ZSwgMHg0YywgMHhjZCwgMHg3NSwgMHhjZSwgMHhkMCwKKwkweDA2LCAweDBjLCAweGE3LCAweDY2LCAweGRkLCAweDJjLCAweGQ5LCAweGU1LCAweDdlLCAweDk5LCAweDVjLCAweGVlLAorCTB4OTMsIDB4MDMsIDB4Y2IsIDB4ZTYsIDB4NGMsIDB4OTUsIDB4ZDgsIDB4MGYsIDB4M2MsIDB4MGIsIDB4ZWEsIDB4MzAsCisJMHg3ZCwgMHg1NSwgMHgyMCwgMHgwMSwgMHgzMywgMHg3ZSwgMHg0NCwgMHgwNiwgMHhlMywgMHg1ZiwgMHg5MiwgMHg1ZiwKKwkweGI2LCAweDkwLCAweGVmLCAweDkxLCAweGViLCAweDdiLCAweDI0LCAweGFjLCAweGQ2LCAweDg5LCAweDA3LCAweDdiLAorCTB4ZDIsIDB4NDYsIDB4YjcsIDB4ZWQsIDB4ZWIsIDB4OWMsIDB4YjksIDB4ZDYsIDB4YmEsIDB4NzAsIDB4ZmUsIDB4ZDUsCisJMHhmOCwgMHg1NSwgMHhlYiwgMHhmZSwgMHg4NSwgMHhiZiwgMHhhZSwgMHg4MSwgMHg3NSwgMHgwNywgMHhiMCwgMHgyNiwKKwkweDc5LCAweDM0LCAweGJiLCAweDI2LCAweDRlLCAweDhiLCAweGRkLCAweDA5LCAweGZhLCAweDljLCAweGU0LCAweDhkLAorCTB4YzAsIDB4ODYsIDB4ZmQsIDB4NzIsIDB4NjIsIDB4OTksIDB4ZjEsIDB4NDIsIDB4ZmEsIDB4ZjEsIDB4MTksIDB4OGQsCisJMHg0OCwgMHg3MiwgMHhmOCwgMHgxYywgMHhlYSwgMHhhZSwgMHgwOSwgMHhiNSwgMHg4NiwgMHg1NywgMHg5MywgMHhlOSwKKwkweGFiLCAweDI5LCAweGQ0LCAweGM0LCAweDNmLCAweDA1LCAweDNkLCAweGFjLCAweDE1LCAweGM4LCAweDczLCAweDE4LAorCTB4ZmMsIDB4YTYsIDB4NTAsIDB4OGIsIDB4MTEsIDB4NDcsIDB4YjUsIDB4MWUsIDB4Y2YsIDB4YTQsIDB4ZjAsIDB4ZmQsCisJMHg1YywgMHhhMiwgMHgyYiwgMHg4YiwgMHg5OCwgMHgwOCwgMHhmZiwgMHhiZSwgMHgzOSwgMHhhNCwgMHg3MiwgMHgxOCwKKwkweGY1LCAweDMyLCAweGRhLCAweDQ1LCAweDNjLCAweDgzLCAweGU3LCAweGExLCAweDI3LCAweGNhLCAweDY4LCAweGJjLAorCTB4Y2IsIDB4YTksIDB4NTAsIDB4NDYsIDB4MDIsIDB4N2EsIDB4MmMsIDB4ZDgsIDB4NjQsIDB4NTgsIDB4NjEsIDB4MjksCisJMHg3ZCwgMHhkNSwgMHhjNiwgMHhiYywgMHhiNywgMHg0MiwgMHhhYywgMHg3NywgMHgzMywgMHgxNiwgMHhiZiwgMHgyMywKKwkweGU2LCAweGFjLCAweDRlLCAweDYxLCAweDJlLCAweGJmLCAweGRmLCAweDg1LCAweDc1LCAweDA3LCAweDg3LCAweDhiLAorCTB4ZDIsIDB4MzEsIDB4N2MsIDB4MTgsIDB4ZjEsIDB4NGUsIDB4MWYsIDB4MWIsIDB4MDEsIDB4NmQsIDB4YjQsIDB4ZjMsCisJMHgxNiwgMHhiMCwgMHhjMCwgMHg2ZiwgMHg4MSwgMHgxZiwgMHhmOCwgMHg0NiwgMHhkMiwgMHg5MiwgMHhmOSwgMHgyNSwKKwkweGNhLCAweDU1LCAweDNlLCAweDBlLCAweDFlLCAweGMwLCAweDdmLCAweDEyLCAweDcxLCAweDhkLCAweDNjLCAweDcwLAorCTB4NmYsIDB4NDEsIDB4OGUsIDB4YmUsIDB4NWIsIDB4ZjIsIDB4NGIsIDB4NTEsIDB4NTUsIDB4ZWIsIDB4ZGIsIDB4MDYsCisJMHhmNywgMHhkNywgMHgzNCwgMHgzZCwgMHhkZCwgMHgwZCwgMHgxZCwgMHg5MywgMHhiNywgMHgxYywgMHg2OCwgMHg3YiwKKwkweDBjLCAweDc5LCAweDgwLCAweGJjLCAweDkxLCAweDJmLCAweGZhLCAweGNhLCAweDI4LCAweGZjLCAweDg0LCAweGY0LAorCTB4ZmIsIDB4YjYsIDB4YTcsIDB4YWQsIDB4MjMsIDB4YTYsIDB4YTgsIDB4MzgsIDB4OTgsIDB4Y2EsIDB4MjAsIDB4YjAsCisJMHhiZCwgMHhkNCwgMHgxYywgMHg5NywgMHgzZiwgMHg2ZSwgMHg4ZSwgMHhjOSwgMHg3NywgMHg5YiwgMHgyOSwgMHhlNCwKKwkweGMwLCAweDUxLCAweGU0LCAweGMwLCAweDYxLCAweGU0LCAweDQwLCAweDBiLCAweDM5LCAweDMwLCAweDgxLCAweDFjLAorCTB4MzgsIDB4ODAsIDB4MWMsIDB4MTgsIDB4NDcsIDB4OWMsIDB4MTQsIDB4MzksIDB4YTEsIDB4ZjIsIDB4NmQsIDB4MmMsCisJMHgwYSwgMHhjYywgMHgxZCwgMHhiNSwgMHg5YiwgMHgwZSwgMHg3OCwgMHg5OSwgMHhjMSwgMHg1ZSwgMHhiMywgMHhlMCwKKwkweGViLCAweDUwLCAweGQ3LCAweDQ0LCAweDY1LCAweDFjLCAweDMxLCAweGQ3LCAweDQyLCAweDNjLCAweDRhLCAweDIwLAorCTB4ZGYsIDB4OGMsIDB4MDEsIDB4NmIsIDB4ODksIDB4NmMsIDB4MmMsIDB4MjUsIDB4MTAsIDB4MTMsIDB4NWIsIDB4ZTIsCisJMHgwMCwgMHgxMywgMHg5NywgMHg4YywgMHgxNCwgMHg5ZSwgMHhkZCwgMHhhYiwgMHhlYywgMHgzMywgMHg5NCwgMHhiZSwKKwkweDNiLCAweDJjLCAweGRkLCAweGEzLCAweDkyLCAweDJmLCAweDlmLCAweGM0LCAweDU4LCAweDFjLCAweGViLCAweDc1LAorCTB4MjEsIDB4MmYsIDB4MzEsIDB4MmUsIDB4MzAsIDB4MDYsIDB4MmMsIDB4MzksIDB4YmYsIDB4NmIsIDB4ZDEsIDB4ZDcsCisJMHhiYSwgMHhiNSwgMHhjYywgMHhlOSwgMHg4MiwgMHgzMCwgMHg5NiwgMHgyMywgMHgwZiwgMHhjMCwgMHgxZSwgMHgzOCwKKwkweDM2LCAweDg5LCAweGU3LCAweGY4LCAweGZkLCAweDJmLCAweGZkLCAweDk4LCAweGY5LCAweGIxLCAweDRlLCAweDgxLAorCTB4ZDEsIDB4YmUsIDB4YzQsIDB4OWMsIDB4NjcsIDB4NjEsIDB4M2QsIDB4YjcsIDB4ZGQsIDB4NGYsIDB4OWYsIDB4NDcsCisJMHhhZCwgMHgxNCwgMHhkYywgMHgyNywgMHhhZSwgMHg2NiwgMHgzZiwgMHhlMSwgMHgyNCwgMHg2OCwgMHgxZSwgMHgwNCwKKwkweGJlLCAweDQ3LCAweDZkLCAweDc1LCAweGIwLCAweDhhLCAweGVmLCAweGVkLCAweGYzLCAweDVkLCAweGNjLCAweDU3LAorCTB4NjMsIDB4NTEsIDB4MjMsIDB4NmQsIDB4YjEsIDB4OWUsIDB4NDMsIDB4YWMsIDB4M2MsIDB4ODYsIDB4YjgsIDB4NjgsCisJMHgzYiwgMHhmYSwgMHg1YSwgMHgwMywgMHg3YywgMHg0MiwgMHg4ZSwgMHg2NSwgMHhkYiwgMHgwOSwgMHgwZiwgMHhiZCwKKwkweGQ2LCAweDdhLCAweGQ2LCAweDFhLCAweDk2LCAweDg5LCAweGI1LCAweDMxLCAweGM5LCAweGFlLCAweDBkLCAweGM2LAorCTB4Y2YsIDB4NGIsIDB4ZDcsIDB4NjUsIDB4NWIsIDB4NWUsIDB4NmIsIDB4OTUsIDB4NWMsIDB4ZjMsIDB4YTQsIDB4MGQsCisJMHhiYiwgMHhkYywgMHhiNywgMHhkZiwgMHg5MCwgMHgxYSwgMHgzMCwgMHhkYywgMHhiZSwgMHhmZCwgMHg5ZCwgMHhhYywKKwkweGU5LCAweDVmLCAweDE0LCAweDNkLCAweDIxLCAweDk5LCAweDQ1LCAweDViLCAweGM2LCAweGY2LCAweDA3LCAweGI1LAorCTB4ZTcsIDB4MmYsIDB4M2IsIDB4YTQsIDB4MWIsIDB4NjMsIDB4NmIsIDB4MDksIDB4Y2MsIDB4NjEsIDB4ZGQsIDB4YWYsCisJMHhmYSwgMHgyNywgMHhlMCwgMHg1OSwgMHhmMywgMHg5ZSwgMHg1MSwgMHgzOSwgMHg4ZiwgMHg5OCwgMHgxOSwgMHhiYywKKwkweDM3LCAweDZkLCAweGU3LCAweGZjLCAweDIyLCAweDcwLCAweDBkLCAweGU0LCAweDk5LCAweDU5LCAweDI0LCAweGVlLAorCTB4ZGEsIDB4MDUsIDB4MzksIDB4NDUsIDB4NjAsIDB4MjMsIDB4ZDQsIDB4ZmQsIDB4MjAsIDB4OWUsIDB4NmQsIDB4YzksCisJMHg1NywgMHg1MywgMHhiNCwgMHg4NywgMHhjNywgMHgyMCwgMHg0YiwgMHhhYywgMHgxNSwgMHgwZSwgMHhmOCwgMHhmOSwKKwkweDlhLCAweGNjLCAweDJkLCAweDUxLCAweDdlLCAweDcxLCAweGQ0LCAweDk2LCAweGRjLCAweDViLCAweGEyLCAweDVkLAorCTB4ZTksIDB4YWIsIDB4ZWIsIDB4NDYsIDB4ZGIsIDB4ZDksIDB4NTgsIDB4YzQsIDB4ZmEsIDB4NDMsIDB4YzQsIDB4ZDgsCisJMHg4OCwgMHhkNSwgMHg2NSwgMHhmNiwgMHgwNiwgMHg1OCwgMHg1MywgMHgxZCwgMHg4MCwgMHg0ZSwgMHhhNiwgMHgxNSwKKwkweGU2LCAweGNlLCAweGQ0LCAweDUzLCAweDYyLCAweDlkLCAweDYyLCAweGFjLCAweDkyLCAweDQ0LCAweGM4LCAweDIyLAorCTB4YmUsIDB4MTcsIDB4NDMsIDB4NGYsIDB4Y2YsIDB4ZTIsIDB4MWUsIDB4ZTUsIDB4YzksIDB4NWEsIDB4MWYsIDB4ZjcsCisJMHg1NywgMHhmZiwgMHhhMywgMHhkMiwgMHg0OSwgMHgwOCwgMHhiYSwgMHhjYiwgMHhlZiwgMHg2NywgMHgxMSwgMHgyMiwKKwkweDRiLCAweGExLCAweDM0LCAweDYyLCAweGUwLCAweDE4LCAweDc5LCAweDUwLCAweDdiLCAweGEzLCAweDllLCAweGE0LAorCTB4ZGYsIDB4ODEsIDB4NjcsIDB4ZDgsIDB4NDYsIDB4NWIsIDB4NWQsIDB4YTksIDB4ZmUsIDB4NGEsIDB4OTUsIDB4MDgsCisJMHg2YywgMHg1OSwgMHgwYSwgMHg5MSwgMHgzNCwgMHg3OCwgMHgxYSwgMHhjMywgMHg3NywgMHgzOCwgMHhmZiwgMHgwOSwKKwkweGU4LCAweGYzLCAweDJjLCAweDllLCAweDVmLCAweDAwLCAweDVmLCAweDFiLCAweDY1LCAweGQyLCAweDlkLCAweDRjLAorCTB4MWMsIDB4NTcsIDB4YmUsIDB4OGIsIDB4NmIsIDB4OTcsIDB4YjUsIDB4Y2MsIDB4ZDcsIDB4ZTQsIDB4YmMsIDB4ZTIsCisJMHhlZiwgMHgxMywgMHhhYywgMHg5ZCwgMHhhMSwgMHhhNywgMHhlYiwgMHhlMSwgMHg2ZiwgMHhmMiwgMHgzYSwgMHhmOSwKKwkweGYzLCAweGQ2LCAweDY3LCAweGNlLCAweGNhLCAweDU4LCAweDA5LCAweGM5LCAweDk2LCAweDVmLCAweDZhLCAweDg1LAorCTB4MmQsIDB4MmIsIDB4M2UsIDB4ZWYsIDB4ZWIsIDB4MzEsIDB4ZWIsIDB4NDYsIDB4NDEsIDB4MDcsIDB4ZmIsIDB4MDAsCisJMHhmYiwgMHg5NSwgMHgyZSwgMHg0MSwgMHgwNywgMHg2ZCwgMHhhNywgMHgxMCwgMHg0ZCwgMHgzZiwgMHgyZSwgMHgyYiwKKwkweDRiLCAweGZmLCAweDU0LCAweDZhLCAweDRiLCAweDA1LCAweGE5LCAweDJmLCAweGZkLCAweDIzLCAweDM5LCAweGI3LAorCTB4ZDQsIDB4OTIsIDB4MGIsIDB4MjksIDB4MTUsIDB4OTMsIDB4YWMsIDB4MGUsIDB4ZTUsIDB4Y2YsIDB4NzIsIDB4YTMsCisJMHg4NywgMHgwNywgMHg5MywgMHhlMywgMHg5NywgMHgyMCwgMHhjMCwgMHg5NSwgMHhhYSwgMHg0NywgMHhmYiwgMHg1NCwKKwkweDFiLCAweGVkLCAweDE3LCAweDYwLCAweDZiLCAweGFmLCAweDU4LCAweGE0LCAweDdmLCAweDRjLCAweDZhLCAweDY1LAorCTB4ZDIsIDB4ZmUsIDB4YTAsIDB4YTIsIDB4ZmQsIDB4YzAsIDB4MjYsIDB4ZWQsIDB4OTIsIDB4MGIsIDB4NTksIDB4YTQsCisJMHg3ZiwgMHgyNywgMHhkYSwgMHg4MSwgMHhmMywgMHhmYiwgMHg0OSwgMHg3ZiwgMHgwMiwgMHhjZiwgMHg3ZSwgMHhkMCwKKwkweGZlLCAweDZhLCAweGVlLCAweDZiLCAweGFkLCAweDhkLCAweDcyLCAweDQ0LCAweGQxLCAweDFjLCAweDRhLCAweDhmLAorCTB4NDEsIDB4M2UsIDB4YWYsIDB4YjUsIDB4ZDYsIDB4NWQsIDB4ZmEsIDB4MTEsIDB4YmUsIDB4YmIsIDB4ZjcsIDB4MjAsCisJMHg0NiwgMHhmNSwgMHg2MSwgMHhhZiwgMHg1ZSwgMHhjOSwgMHhjZiwgMHg0NiwgMHgxMSwgMHgyNywgMHhjNywgMHhhMSwKKwkweGRiLCAweDJlLCAweGU1LCAweDg3LCAweDA4LCAweDE3LCAweGQwLCAweGQ5LCAweDM0LCAweGU2LCAweDFmLCAweGEyLAorCTB4YmYsIDB4MjksIDB4YjksIDB4MzgsIDB4OTAsIDB4NGIsIDB4YjEsIDB4OWMsIDB4OGUsIDB4YTAsIDB4ZmUsIDB4YzcsCisJMHgzZSwgMHg4NiwgMHg5MywgMHg3MywgMHhmOSwgMHhjYywgMHgwMCwgMHg2MiwgMHgxYSwgMHhmZiwgMHg3ZiwgMHg2NCwKKwkweDdiLCAweDI4LCAweDIwLCAweGQ2LCAweDQyLCAweGU3LCAweDNkLCAweDkwLCAweDFmLCAweGU4LCAweDE4LCAweDliLAorCTB4NDEsIDB4NmUsIDB4NGQsIDB4MGUsIDB4ZDcsIDB4NTQsIDB4N2YsIDB4OTEsIDB4NzEsIDB4ZTUsIDB4MjgsIDB4ZjIsCisJMHhlOSwgMHgyMSwgMHg3YywgMHhiYywgMHhmZCwgMHgyNiwgMHg5YSwgMHhkYywgMHg3MywgMHgzYiwgMHg0ZiwgMHg0NSwKKwkweDc3LCAweDdkLCAweDJmLCAweDAxLCAweDUyLCAweGE2LCAweGM5LCAweDdkLCAweDBiLCAweDEyLCAweDRhLCAweDg3LAorCTB4YjAsIDB4MmYsIDB4YzcsIDB4N2EsIDB4MTAsIDB4NjMsIDB4MDYsIDB4YTIsIDB4ZDksIDB4ZTYsIDB4Y2YsIDB4MzEsCisJMHg0ZSwgMHg1ZiwgMHg2NiwgMHg3YywgMHgwZiwgMHg2OCwgMHgxZiwgMHhjNSwgMHg5YSwgMHg4YywgMHhiYiwgMHg2MywKKwkweGUwLCAweDk5LCAweDM1LCAweDI2LCAweGUzLCAweDI2LCAweGYyLCAweDQ4LCAweGUzLCAweDQ3LCAweGNjLCAweDJkLAorCTB4ZjgsIDB4M2UsIDB4ZTAsIDB4N2YsIDB4ZTcsIDB4N2QsIDB4ODksIDB4ZGUsIDB4OWMsIDB4MzYsIDB4YWIsIDB4MDUsCisJMHgzMSwgMHhiMSwgMHgyNywgMHg3NCwgMHg2ZSwgMHhjNSwgMHhhNSwgMHhkOCwgMHgzMCwgMHg1ZiwgMHgyMCwgMHg2NiwKKwkweGQ0LCAweDI5LCAweDgzLCAweDM1LCAweGNhLCAweDg5LCAweGZkLCAweDI3LCAweGQ0LCAweDdmLCAweGI1LCAweGU3LAorCTB4MjEsIDB4OGYsIDB4YTgsIDB4ZWMsIDB4YjUsIDB4MGUsIDB4MjIsIDB4YTYsIDB4ODAsIDB4ZmUsIDB4Y2EsIDB4MTgsCisJMHg3OCwgMHg2MywgMHg4ZiwgMHg2NiwgMHgxMCwgMHhmOSwgMHgyYiwgMHgwNCwgMHgyMSwgMHhhMCwgMHg5NiwgMHg1YSwKKwkweDBiLCAweGM5LCAweGJkLCAweGUxLCAweDExLCAweGEzLCAweDI4LCAweDhmLCAweDQ2LCAweDU4LCAweDM2LCAweDE3LAorCTB4ZDYsIDB4OTgsIDB4MDcsIDB4YzIsIDB4YjIsIDB4YjAsIDB4MjYsIDB4NzIsIDB4NjksIDB4OTEsIDB4NzEsIDB4NDUsCisJMHhmZCwgMHg0MSwgMHhlNiwgMHg4NiwgMHgzMywgMHg4ZiwgMHgzYywgMHg1YiwgMHg1YSwgMHg2MiwgMHg4YywgMHg2MSwKKwkweDljLCAweGI4LCAweDAxLCAweGJhLCAweDQ4LCAweDdlLCAweGUzLCAweGFiLCAweGM4LCAweDQ5LCAweGE1LCAweGYyLAorCTB4MjAsIDB4NjIsIDB4YTYsIDB4YWMsIDB4ZWIsIDB4OTAsIDB4MjksIDB4NzIsIDB4MTksIDB4NmIsIDB4ZDQsIDB4MWQsCisJMHhmYSwgMHgzMiwgMHg0MSwgMHg0ZiwgMHgyNiwgMHgyYSwgMHhjNSwgMHg0NSwgMHhmNiwgMHg2MywgMHhhMiwgMHhhMCwKKwkweDg1LCAweDM1LCAweDc2LCAweDQ4LCAweGQ1LCAweDNmLCAweDM3LCAweGE4LCAweGQ4LCAweGNhLCAweGZmLCAweGUxLAorCTB4YjYsIDB4N2QsIDB4OTMsIDB4MjcsIDB4ZjcsIDB4ZTksIDB4OGMsIDB4NjMsIDB4MzcsIDB4OGIsIDB4M2QsIDB4NjMsCisJMHg3NywgMHgxZCwgMHhhOCwgMHg3NCwgMHg0OCwgMHhiNSwgMHg4ZiwgMHg3NiwgMHg0OSwgMHhmZCwgMHhiZiwgMHhhMCwKKwkweDYyLCAweGVkLCAweDAyLCAweDc4LCAweDJhLCAweDJlLCAweDEyLCAweGUzLCAweDg2LCAweDMxLCAweDJmLCAweGU2LAorCTB4Y2YsIDB4YTMsIDB4NWMsIDB4ZmYsIDB4ODksIDB4Y2MsIDB4ZWQsIDB4N2YsIDB4MTcsIDB4NzQsIDB4NzksIDB4NzEsCisJMHgyZCwgMHhiZiwgMHgxZiwgMHhmMSwgMHg3NiwgMHg0NiwgMHg5NywgMHgzYiwgMHhlZiwgMHgxYSwgMHhjNywgMHhiMywKKwkweGNjLCAweDgxLCAweGVmLCAweGY4LCAweDc4LCAweDkyLCAweDYzLCAweGVjLCAweDYxLCAweDgxLCAweGJlLCAweDE1LAorCTB4MDMsIDB4ZmYsIDB4ZmIsIDB4YTQsIDB4YjAsIDB4MTIsIDB4ODUsIDB4MWMsIDB4OTAsIDB4NGIsIDB4NmIsIDB4ZGUsCisJMHg1YSwgMHhhYywgMHg3NywgMHg0ZiwgMHg0MiwgMHg0NywgMHhmYSwgMHhhOSwgMHhhOCwgMHg0NCwgMHg0ZSwgMHhmNSwKKwkweDQ5LCAweGY4LCAweGViLCAweGRkLCAweGQyLCAweGYxLCAweGY1LCAweDIxLCAweDA5LCAweDdkLCAweGRkLCAweDY0LAorCTB4NGUsIDB4NGYsIDB4OWMsIDB4ODAsIDB4YmUsIDB4ZTYsIDB4NjUsIDB4NWMsIDB4OWUsIDB4NDQsIDB4ZGUsIDB4NjIsCisJMHg1ZSwgMHg1NywgMHg3NiwgMHg2YSwgMHhmNCwgMHg0YiwgMHgwOCwgMHgwNSwgMHhhYiwgMHhmZSwgMHg4YywgMHgyZCwKKwkweDhmLCAweGVlLCAweGZmLCAweDg1LCAweGVhLCAweDMzLCAweDAxLCAweGMzLCAweDhiLCAweGZlLCAweGZjLCAweDk0LAorCTB4ZDgsIDB4Y2QsIDB4NzcsIDB4MjEsIDB4NmIsIDB4YzMsIDB4NzksIDB4ZWQsIDB4ZDYsIDB4YTAsIDB4YTYsIDB4MWMsCisJMHg1NiwgMHhmZCwgMHhjMiwgMHg0NywgMHhmNywgMHg3YiwgMHgzNSwgMHgyNSwgMHhmMCwgMHhiOCwgMHhlNiwgMHhhOCwKKwkweDlhLCAweDEyLCAweGYxLCAweDM1LCAweGNjLCAweDc5LCAweGZkLCAweGEyLCAweDYzLCAweGFmLCAweGJjLCAweDBjLAorCTB4NDIsIDB4NGYsIDB4YjcsIDB4ODgsIDB4N2QsIDB4MDgsIDB4N2UsIDB4ZjEsIDB4OWMsIDB4MmMsIDB4ZTksIDB4NjksCisJMHg0ZCwgMHhhZCwgMHgxOSwgMHg3YSwgMHg4NiwgMHg3MSwgMHg4YSwgMHhmMSwgMHg4YiwgMHgzNiwgMHg5ZSwgMHg0YywKKwkweDE0LCAweDYxLCAweDdmLCAweGExLCAweGU3LCAweDE5LCAweGEzLCAweDNjLCAweGRiLCAweDllLCAweDY4LCAweDhiLAorCTB4NzUsIDB4MGIsIDB4OTUsIDB4N2IsIDB4YTAsIDB4NDMsIDB4ZDQsIDB4ZjIsIDB4MTYsIDB4ZTIsIDB4OWMsIDB4ODEsCisJMHg1YywgMHg2ZSwgMHhmMSwgMHhkYSwgMHhlYiwgMHhlMSwgMHhlNSwgMHg2MywgMHgzMSwgMHg3NSwgMHg1ZCwgMHhhYywKKwkweDdhLCAweDE4LCAweGRjLCAweDViLCAweDlmLCAweDc1LCAweDA3LCAweDYyLCAweDRjLCAweDkzLCAweDc0LCAweDcwLAorCTB4ZGYsIDB4MDEsIDB4MDksIDB4M2QsIDB4MTcsIDB4OTMsIDB4ZjAsIDB4NzMsIDB4YjQsIDB4M2YsIDB4MzMsIDB4ZTEsCisJMHg0MCwgMHg3ZSwgMHgwYiwgMHgxNiwgMHgzMSwgMHhkMCwgMHgwYSwgMHhiMCwgMHhjNSwgMHhjZCwgMHhhMiwgMHhhZiwKKwkweDBjLCAweGMwLCAweDc3LCAweGNjLCAweDc4LCAweDU1LCAweDkyLCAweDEyLCAweGFhLCAweDQ1LCAweGU1LCAweGFkLAorCTB4NDUsIDB4MzMsIDB4NDEsIDB4N2IsIDB4MzksIDB4NmIsIDB4NjEsIDB4YmMsIDB4ZDksIDB4NzUsIDB4NzksIDB4NWQsCisJMHg1MSwgMHhjMSwgMHhiMSwgMHgyZiwgMHg4NywgMHg4MCwgMHgxOSwgMHg4NiwgMHg2ZCwgMHhiZCwgMHg0NywgMHg1ZSwKKwkweDg3LCAweGJlLCAweDczLCAweDZhLCAweGVjLCAweDY2LCAweGFjLCAweDBiLCAweDFhLCAweDllLCAweDMzLCAweGMxLAorCTB4MDMsIDB4ZDcsIDB4ZmQsIDB4MWUsIDB4ZDYsIDB4NTQsIDB4ZjgsIDB4Y2EsIDB4ZDksIDB4NjAsIDB4NGQsIDB4YmEsCisJMHg0OCwgMHhkYiwgMHhlZCwgMHg4MywgMHhkZCwgMHhlMSwgMHhiYSwgMHhkOSwgMHgyMSwgMHhiOSwgMHhkOSwgMHg4NCwKKwkweGU4LCAweDhiLCAweDlmLCAweDkxLCAweGMxLCAweGZkLCAweGJhLCAweGM3LCAweDhmLCAweGUyLCAweDkxLCAweDYzLAorCTB4ZWMsIDB4YzcsIDB4ZGQsIDB4YWUsIDB4ZmMsIDB4NTEsIDB4NWYsIDB4ODMsIDB4Y2QsIDB4M2MsIDB4NDgsIDB4MWQsCisJMHgyMywgMHhmNywgMHgyMywgMHg4ZiwgMHgzMSwgMHg4ZSwgMHg4NSwgMHg5MCwgMHhjNywgMHhiMiwgMHg0ZCwgMHg0ZiwKKwkweGVmLCAweGQ1LCAweDA3LCAweGZiLCAweGU1LCAweGM5LCAweGU3LCAweDY4LCAweDRmLCAweGI4LCAweGI3LCAweDY5LAorCTB4NTMsIDB4NDEsIDB4MGYsIDB4OTgsIDB4ZjcsIDB4MmMsIDB4MzksIDB4ZjksIDB4NmMsIDB4NTAsIDB4NzMsIDB4YjAsCisJMHhiZSwgMHgzMiwgMHhlMywgMHgwNywgMHhjMCwgMHg4ZiwgMHg3ZSwgMHgyNywgMHhlMywgMHg4MSwgMHhhZSwgMHg2YywKKwkweDM3LCAweDZmLCAweDU5LCAweDVlLCAweGRkLCAweDUxLCAweDQ5LCAweGIwLCAweDJmLCAweDZlLCAweGIwLCAweDRlLAorCTB4YjMsIDB4ZTMsIDB4OWUsIDB4YmMsIDB4OGIsIDB4MTgsIDB4MmIsIDB4MzUsIDB4NjcsIDB4MTEsIDB4YTMsIDB4MjMsCisJMHg3MiwgMHg3MSwgMHhkNiwgMHg4NiwgMHhlZSwgMHgzZiwgMHgwYiwgMHhiYSwgMHgwZSwgMHg3NSwgMHgxMSwgMHgyMywKKwkweDVmLCAweDljLCAweDc1LCAweDcwLCAweDdkLCAweDQ4LCAweGQ1LCAweDY2LCAweGExLCAweDNiLCAweDYxLCAweGM3LAorCTB4Y2QsIDB4N2UsIDB4ZmEsIDB4OTEsIDB4YWYsIDB4YTcsIDB4ODQsIDB4NTYsIDB4NWMsIDB4MzIsIDB4YjUsIDB4MTIsCisJMHg2MiwgMHhmNiwgMHg2NCwgMHg4YSwgMHgzOSwgMHhiZSwgMHg1MywgMHhmNSwgMHg0ZCwgMHhkOSwgMHhhZiwgMHhjOSwKKwkweDJiLCAweGJjLCAweGIwLCAweDRmLCAweDJiLCAweDU2LCAweDE5LCAweGU3LCAweDBiLCAweGYxLCAweDBlLCAweDIxLAorCTB4MGUsIDB4MTEsIDB4YWQsIDB4NjYsIDB4NTEsIDB4MjcsIDB4OWEsIDB4OWMsIDB4NTcsIDB4YmQsIDB4NTgsIDB4MTEsCisJMHhjNywgMHgzZCwgMHg0MiwgMHgxOSwgMHg2OCwgMHhmNSwgMHhlYSwgMHgzZSwgMHhhZCwgMHg1MCwgMHgwZCwgMHhjOSwKKwkweGM1LCAweDE4LCAweGU5LCAweDRlLCAweGE4LCAweGZhLCAweDdkLCAweGJmLCAweGIyLCAweGI1LCAweDFlLCAweGU0LAorCTB4MTIsIDB4ZDgsIDB4NGMsIDB4ZWEsIDB4OTMsIDB4ZDgsIDB4NTcsIDB4OGQsIDB4YzEsIDB4YTYsIDB4YTgsIDB4N2IsCisJMHhlYSwgMHg1ZCwgMHhjNSwgMHg0OCwgMHg1ZiwgMHhmNywgMHgzYiwgMHhlNSwgMHg0YywgMHhkMCwgMHg1MSwgMHgyNiwKKwkweDdlLCAweGVmLCAweGY0LCAweGYxLCAweGZiLCAweGEyLCAweDVmLCAweDBmLCAweDNkLCAweDI2LCAweGFjLCAweDUzLAorCTB4MTYsIDB4MmEsIDB4YTQsIDB4MDUsIDB4ZjEsIDB4ZDYsIDB4ZGQsIDB4YzksIDB4OTYsIDB4MjgsIDB4NDcsIDB4MmYsCisJMHhhNiwgMHgxYywgMHg0NSwgMHgxZCwgMHhhMywgMHhhZiwgMHgxOSwgMHhiZSwgMHgwZCwgMHhmMCwgMHg2ZiwgMHgxNCwKKwkweGY3LCAweGJjLCAweDVhLCAweGFhLCAweGQ4LCAweDhjLCAweGMwLCAweGRmLCAweGE3LCAweDIxLCAweDIzLCAweGVhLAorCTB4MDYsIDB4ZmEsIDB4NWIsIDB4ZTMsIDB4OTksIDB4MGEsIDB4ZjQsIDB4YjcsIDB4ZjYsIDB4ZjIsIDB4ZmIsIDB4NzYsCisJMHgxZiwgMHg2MywgMHhkZSwgMHhiMCwgMHgzYywgMHg4OSwgMHhmMSwgMHgxMywgMHg2NywgMHg0OCwgMHhjZiwgMHhiOCwKKwkweDhmLCAweGM3LCAweDEyLCAweDkwLCAweDA5LCAweDYzLCAweGZjLCAweGE4LCAweGJjLCAweGQ1LCAweDcwLCAweDE0LAorCTB4ZmUsIDB4ZGIsIDB4YjcsIDB4N2YsIDB4NDYsIDB4ZTYsIDB4ZGQsIDB4NTksIDB4ZTAsIDB4M2YsIDB4YzgsIDB4ZGYsCisJMHg0OCwgMHhjMCwgMHgzZiwgMHhlMywgMHgyYSwgMHgzZSwgMHgxZSwgMHhmZSwgMHg2OCwgMHgzNSwgMHg0OSwgMHhkOCwKKwkweGNiLCAweGQ5LCAweGY3LCAweDVlLCAweDY3LCAweGNlLCAweGRlLCAweDBkLCAweGZjLCAweGY1LCAweDkxLCAweGQ2LAorCTB4MGYsIDB4NzksIDB4ZWIsIDB4ZmYsIDB4MTcsIDB4ZTgsIDB4ZWEsIDB4NzMsIDB4ZDgsIDB4MjMsIDB4MGEsIDB4ZmEsCisJMHhmYSwgMHgyOSwgMHhkMywgMHgwZiwgMHg3YiwgMHg0ZSwgMHhmNywgMHg5ZSwgMHhiYiwgMHhmZiwgMHgzYSwgMHhlOSwKKwkweDMyLCAweGE0LCAweDAxLCAweDhjLCAweDUwLCAweDUwLCAweDc5LCAweDk0LCAweGI1LCAweDYyLCAweGM0LCAweGQ3LAorCTB4ZGYsIDB4MzEsIDB4NjAsIDB4NjcsIDB4YWUsIDB4MWIsIDB4YzQsIDB4ZGUsIDB4NGUsIDB4MjksIDB4ZjQsIDB4MDUsCisJMHhmNSwgMHgyNywgMHg2MiwgMHhmNiwgMHhlNiwgMHg3OCwgMHg1MCwgMHhjZiwgMHhmMiwgMHhmOSwgMHg5NCwgMHg5MywKKwkweDJmLCAweGIzLCAweDRmLCAweGM4LCAweDVjLCAweGMwLCAweDMxLCAweDY1LCAweDg3LCAweDFmLCAweDQyLCAweGI3LAorCTB4MDksIDB4Y2YsIDB4MjAsIDB4ZGQsIDB4ZjcsIDB4MjksIDB4YmEsIDB4MWQsIDB4NDUsIDB4MzcsIDB4ZmQsIDB4OGIsCisJMHg2NywgMHgzYSwgMHhlYywgMHhhMywgMHgwNSwgMHg3ZCwgMHgzMywgMHhhZSwgMHgwNywgMHg0YywgMHgwMCwgMHg3ZCwKKwkweDdmLCAweDE3LCAweDNhLCAweGZlLCAweDRlLCAweDA1LCAweDk4LCAweGEwLCAweDAyLCAweDRjLCAweDgwLCAweDNkLAorCTB4YmUsIDB4MGQsIDB4MWQsIDB4N2YsIDB4YWIsIDB4MDIsIDB4NGMsIDB4NTAsIDB4ODksIDB4ZmIsIDB4M2QsIDB4MGEsCisJMHg5YiwgMHg5OCwgMHhmZSwgMHgyMywgMHhkYSwgMHg2ZSwgMHhkMCwgMHg5MywgMHhiOSwgMHhkYSwgMHgyZSwgMHgzOSwKKwkweGNlLCAweGY5LCAweDAxLCAweDM2LCAweDhlLCAweGMyLCAweDhlLCAweDc4LCAweDZlLCAweDExLCAweGY0LCAweDNiLAorCTB4ZmMsIDB4MWMsIDB4ZDEsIDB4ZTAsIDB4YjksIDB4MDAsIDB4NzIsIDB4NDQsIDB4ODMsIDB4ZTcsIDB4MTgsIDB4MjMsCisJMHhmMSwgMHgxMCwgMHgzMCwgMHg2MSwgMHg0OCwgMHhlMiwgMHhjMiwgMHg1ZSwgMHhlZiwgMHhkYywgMHgxOCwgMHhkNiwKKwkweDFhLCAweDFkLCAweDg0LCAweDI3LCAweDc1LCAweGE4LCAweGJlLCAweGQ2LCAweDcxLCAweGQ1LCAweDZmLCAweDQwLAorCTB4NWMsIDB4YTgsIDB4MDYsIDB4YjUsIDB4NWIsIDB4NTIsIDB4MjYsIDB4OTYsIDB4ODgsIDB4MzMsIDB4NjUsIDB4YWYsCisJMHg5ZSwgMHg4NiwgMHgwZSwgMHg1YywgMHg2MiwgMHhjMywgMHhjZCwgMHhiZSwgMHhmNCwgMHg3MCwgMHgxZCwgMHg3YiwKKwkweDE2LCAweDJkLCAweDhmLCAweGJlLCAweGUzLCAweGVlLCAweGQ2LCAweDMzLCAweDA3LCAweDEwLCAweDlmLCAweGE3LAorCTB4Y2EsIDB4MDksIDB4OTksIDB4MmMsIDB4N2IsIDB4OTgsIDB4MDAsIDB4ZjUsIDB4Y2YsIDB4NTUsIDB4ZmQsIDB4NTEsCisJMHg5YiwgMHg3YSwgMHg4MCwgMHhmZSwgMHgzNiwgMHg2ZCwgMHgyMywgMHg3MSwgMHgzZSwgMHg0NSwgMHgxOSwgMHg1MywKKwkweGZmLCAweGQzLCAweGFhLCAweDY3LCAweDdkLCAweGEwLCAweGVlLCAweGY1LCAweGU1LCAweDI3LCAweDk1LCAweDJkLAorCTB4ODQsIDB4MTksIDB4NjcsIDB4YTgsIDB4M2YsIDB4Y2YsIDB4ODcsIDB4NjEsIDB4MTcsIDB4NzksIDB4MzcsIDB4OTAsCisJMHg0YiwgMHgzYiwgMHgxZSwgMHhmOSwgMHhiYywgMHgyNiwgMHhkNiwgMHg0ZSwgMHhlMywgMHhiOSwgMHhiNiwgMHhmMSwKKwkweGNkLCAweGZiLCAweDNlLCAweGJkLCAweDg4LCAweDdkLCAweDliLCAweDNkLCAweDA2LCAweGM2LCAweGE5LCAweGFkLAorCTB4ZjEsIDB4MTAsIDB4ZWEsIDB4ODcsIDB4YjAsIDB4YmEsIDB4OGYsIDB4MTgsIDB4ZGUsIDB4ODgsIDB4NDksIDB4YjYsCisJMHg2MSwgMHg4OSwgMHg1MywgMHhlNSwgMHgzYywgMHhmNiwgMHgyZCwgMHgxOCwgMHg4ZiwgMHg5ZSwgMHg5MCwgMHhlYywKKwkweDUyLCAweGFmLCAweGU0LCAweDYyLCAweDY2LCAweGNhLCAweDk2LCAweGJmLCAweDI3LCAweDFiLCAweGNiLCAweDg1LAorCTB4MDQsIDB4Y2YsIDB4MGQsIDB4MGIsIDB4MzMsIDB4MWEsIDB4OWUsIDB4N2IsIDB4MTgsIDB4ZDcsIDB4YTQsIDB4ZDksCisJMHg5MiwgMHhjMywgMHg2NSwgMHhlNiwgMHg5ZCwgMHg5MSwgMHg3OCwgMHgwMywgMHhmNywgMHg3MiwgMHhiMywgMHhlYywKKwkweGQ1LCAweDU0LCAweDYxLCAweDkzLCAweDY2LCAweGEyLCAweDhhLCAweDc4LCAweGYwLCAweDcyLCAweDk5LCAweGZiLAorCTB4MDEsIDB4MWIsIDB4OTUsIDB4ZDksIDB4Y2YsIDB4MDksIDB4ZWUsIDB4M2YsIDB4MDEsIDB4MWMsIDB4ODgsIDB4NTgsCisJMHgxZCwgMHhmMywgMHhlNywgMHgyOCwgMHg1ZSwgMHg2ZCwgMHgyMywgMHgyYywgMHg4MSwgMHhhZSwgMHgzYiwgMHg2NSwKKwkweGRkLCAweDhmLCAweGJiLCAweGI1LCAweGIyLCAweGQ3LCAweDQ3LCAweDM5LCAweDRiLCAweDdhLCAweGRjLCAweGZmLAorCTB4ZDUsIDB4NWEsIDB4OGYsIDB4YTEsIDB4MTYsIDB4ZGEsIDB4ZTQsIDB4ZjUsIDB4OGYsIDB4YjksIDB4OGYsIDB4ODEsCisJMHhiMCwgMHgyYiwgMHgyNywgMHhkYywgMHg0MCwgMHgyNiwgMHhiYywgMHhjZiwgMHgzMSwgMHg5ZSwgMHg4ZCwgMHhiNiwKKwkweDVhLCAweDY3LCAweGFkLCAweGY2LCAweDllLCAweGRmLCAweGY1LCAweGY0LCAweGNjLCAweGRlLCAweGI4LCAweDJkLAorCTB4NjMsIDB4YmQsIDB4ZTYsIDB4YTAsIDB4MjYsIDB4ZjYsIDB4N2IsIDB4NjYsIDB4ODcsIDB4NDYsIDB4YmMsIDB4OWUsCisJMHhkOSwgMHhmYywgMHhjOCwgMHhmNiwgMHg5ZSwgMHhkOSwgMHhjZiwgMHg2ZiwgMHhmMywgMHg3YSwgMHg2NiwgMHgxNywKKwkweDlkLCAweDIyLCAweDNlLCAweDVlLCAweGNmLCAweDZjLCAweGY4LCAweDc2LCAweGFmLCAweDY3LCAweGY2LCAweGYwLAorCTB4ZWQsIDB4NWUsIDB4Y2YsIDB4ZWMsIDB4OTEsIDB4MTEsIDB4YWYsIDB4NjcsIDB4ZjYsIDB4ZmIsIDB4YjcsIDB4NmYsCisJMHhlZiwgMHg5OSwgMHgzZCwgMHgzNiwgMHhiMiwgMHhiZCwgMHg2NywgMHgyNiwgMHgxMywgMHhjOCwgMHg3NywgMHgxMywKKwkweDViLCAweDNkLCAweGIzLCAweGYyLCAweGM4LCAweGI1LCAweDdiLCAweDY2LCAweGFmLCAweDA2LCAweDc4LCAweDFkLAorCTB4ZmMsIDB4OGMsIDB4ODEsIDB4ODcsIDB4MTQsIDB4ZjAsIDB4ZmEsIDB4MjgsIDB4ZjAsIDB4ZmEsIDB4YWYsIDB4ZWIsCisJMHg1OSwgMHg4NywgMHhjMSwgMHhlNywgMHhjZCwgMHg3ZSwgMHg1ZSwgMHhiOCwgMHgxZSwgMHhkYywgMHg3ZSwgMHhiYiwKKwkweGZmLCAweDhjLCAweGEwLCAweGRlLCAweDRkLCAweGY4LCAweGI1LCAweDBhLCAweGIxLCAweGZiLCAweDFlLCAweGJmLAorCTB4NjYsIDB4ZmIsIDB4NmIsIDB4ZDEsIDB4YWQsIDB4ZjMsIDB4ZWMsIDB4ZjYsIDB4ZmYsIDB4MzcsIDB4YTAsIDB4ZjQsCisJMHgwZSwgMHhmMCwgMHgzYywgMHhmOSwgMHg3OSwgMHgwZCwgMHhiNSwgMHgxZiwgMHhmOSwgMHg0NywgMHhhMiwgMHhlZiwKKwkweGJlLCAweGU4LCAweDdjLCAweGQ1LCAweDIyLCAweGM2LCAweDdmLCAweDFjLCAweGJlLCAweDZhLCAweGVmLCAweDBkLAorCTB4YzksIDB4M2EsIDB4ZmMsIDB4OTYsIDB4MzksIDB4ZWEsIDB4YTQsIDB4NjQsIDB4MzEsIDB4M2YsIDB4YWIsIDB4ZTYsCisJMHgyNywgMHgyNiwgMHhiNiwgMHhlNiwgMHhhNywgMHgyNiwgMHhiZSwgMHhhYSwgMHg2YSwgMHg1MiwgMHhmMywgMHg1ZiwKKwkweGUzLCAweGYzLCAweDBkLCAweDY1LCAweGRmLCAweDk2LCAweDg3LCAweGUxLCAweDlkLCAweDRhLCAweDgwLCAweGI3LAorCTB4YzIsIDB4M2UsIDB4NzYsIDB4MzYsIDB4MWMsIDB4ZGIsIDB4OWQsIDB4YzAsIDB4MzMsIDB4ZTYsIDB4OGIsIDB4YjYsCisJMHgzNCwgMHgxNCwgMHg3ZSwgMHgwZiwgMHhhNSwgMHhjZCwgMHgxNywgMHg3MywgMHhhYSwgMHg1ZSwgMHgzMywgMHg5YywKKwkweGJjLCAweDFiLCAweGQ0LCAweGRmLCAweGE4LCAweGExLCAweDg2LCAweDA2LCAweGQ1LCAweGY5LCAweDliLCAweGJlLAorCTB4MzYsIDB4OGMsIDB4M2MsIDB4ZDYsIDB4NWUsIDB4NjMsIDB4YjMsIDB4YWUsIDB4ZDYsIDB4ZmQsIDB4YmEsIDB4ZGEsCisJMHg5MCwgMHhiYiwgMHhmNywgMHhiNywgMHg2MywgMHg3MywgMHg5OSwgMHhmOCwgMHg1YiwgMHgwYSwgMHg5YiwgMHhlZiwKKwkweDQyLCAweDZkLCAweDRlLCAweGVjLCAweDRkLCAweDFjLCAweDQzLCAweDBjLCAweDQxLCAweDdjLCAweGNlLCAweDdlLAorCTB4MDEsIDB4ZWIsIDB4MTksIDB4ZTYsIDB4NDYsIDB4ZDYsIDB4MzcsIDB4MzEsIDB4N2MsIDB4ZjgsIDB4YmUsIDB4NDEsCisJMHg4MCwgMHhkMSwgMHgzYiwgMHhmYywgMHhmOCwgMHhjZSwgMHhiYSwgMHgyOCwgMHhjMCwgMHgyYSwgMHg3NywgMHg3NSwKKwkweDdiLCAweGI1LCAweGQxLCAweDJlLCAweGNkLCAweGFiLCAweDNmLCAweDEzLCAweGZlLCAweDljLCAweGYwLCAweDI2LAorCTB4MTYsIDB4MGUsIDB4NmYsIDB4NjIsIDB4ZTEsIDB4NmQsIDB4ZTcsIDB4MzAsIDB4YTIsIDB4ZGUsIDB4NmQsIDB4NTAsCisJMHhlNywgMHgzOSwgMHgzYywgMHhkZiwgMHgxMSwgMHg0ZCwgMHg0ZiwgMHhmMywgMHg4YywgMHgwNywgMHgzOCwgMHhjNywKKwkweGUyLCAweDk5LCAweDBmLCAweDdkLCAweGU5LCAweDQxLCAweDJkLCAweDViLCAweDM3LCAweDEwLCAweGVmLCAweDk5LAorCTB4N2YsIDB4OTAsIDB4NmIsIDB4Y2IsIDB4YzEsIDB4ZDksIDB4NjIsIDB4YTAsIDB4MjcsIDB4Y2EsIDB4OGUsIDB4NjMsCisJMHg3ZiwgMHhhYSwgMHhhMSwgMHhlNiwgMHg0ZCwgMHg0NSwgMHhhYywgMHg0MywgMHhhMCwgMHg2NSwgMHgwYSwgMHhmZiwKKwkweDAzLCAweDk5LCAweGRlLCAweGEzLCAweDcyLCAweDVmLCAweDI3LCAweDZjLCAweGY2LCAweDc4LCAweDg1LCAweGQ4LAorCTB4ZjUsIDB4NzEsIDB4NjksIDB4ZjgsIDB4ZjgsIDB4NzUsIDB4NjUsIDB4YzksIDB4YzMsIDB4YWUsIDB4ZTEsIDB4ZWQsCisJMHhkOCwgMHgzNSwgMHhiNSwgMHgyMSwgMHgxZSwgMHg4ZCwgMHgwNywgMHg3NiwgMHhhNCwgMHhkMSwgMHg3MCwgMHg1ZSwKKwkweDE5LCAweDIyLCAweDY2LCAweDI1LCAweDlkLCAweGNjLCAweDNkLCAweGQzLCAweDg4LCAweDgxLCAweGNjLCAweDM5LAorCTB4Y2MsIDB4MzcsIDB4YzQsIDB4YTUsIDB4ZDcsIDB4YTIsIDB4NGYsIDB4OGQsIDB4MWQsIDB4ZWQsIDB4YjAsIDB4YTIsCisJMHhmOCwgMHhjYywgMHg4MywgMHg4ZSwgMHgxOSwgMHgzYywgMHg5MywgMHg5NiwgMHg4NSwgMHhkMywgMHg1ZiwgMHhkMSwKKwkweDljLCAweGZhLCAweDNjLCAweGU4LCAweDk5LCAweDQyLCAweGFlLCAweGEzLCAweDJkLCAweDE1LCAweDBjLCAweGNmLAorCTB4OGUsIDB4ZDYsIDB4MTEsIDB4ZjcsIDB4NWQsIDB4YzYsIDB4MDIsIDB4ZDQsIDB4YWUsIDB4YTgsIDB4NDcsIDB4Y2EsCisJMHg4YywgMHhiZCwgMHgzYywgMHhlYiwgMHgwYSwgMHg2MiwgMHgyZSwgMHhmYiwgMHgyNiwgMHhhOCwgMHg1OSwgMHg1OSwKKwkweGJiLCAweDJlLCAweDcyLCAweGRmLCAweGVkLCAweGJhLCAweGE4LCAweGI5LCAweGM0LCAweDVkLCAweDg2LCAweGIzLAorCTB4YmUsIDB4NDYsIDB4ZGMsIDB4ZjgsIDB4NTEsIDB4MzEsIDB4YTQsIDB4ZTEsIDB4YmMsIDB4M2MsIDB4NDQsIDB4MWMsCisJMHg3OSwgMHgzZCwgMHhmOCwgMHhkMSwgMHg4NCwgMHgzNCwgMHhjZCwgMHgxNywgMHhkNiwgMHhmNSwgMHg3NiwgMHhmYywKKwkweGU4LCAweDYxLCAweGM3LCAweGNjLCAweGRhLCAweDQxLCAweGFjLCAweGM5LCAweGRhLCAweDhjLCAweDM4LCAweGQxLAorCTB4NDQsIDB4OTgsIDB4MWIsIDB4YzQsIDB4YjMsIDB4ODMsIDB4ZTAsIDB4YzcsIDB4YzMsIDB4OGEsIDB4NTksIDB4NjAsCisJMHhjNSwgMHhiZiwgMHgwMywgMHhhYywgMHg1OCwgMHg5MiwgMHhmNywgMHhhMiwgMHhjNCwgMHg4YSwgMHhiNiwgMHg4ZiwKKwkweDE1LCAweDFkLCAweGQ4LCAweDcxLCAweDdlLCAweDliLCAweDFkLCAweDZiLCAweGFhLCAweDA3LCAweGM1LCAweDdiLAorCTB4NzksIDB4NjAsIDB4YmQsIDB4ZWMsIDB4YTIsIDB4NzksIDB4MWQsIDB4ZjgsIDB4NTAsIDB4OTMsIDB4OTgsIDB4M2EsCisJMHhhZiwgMHgwZiwgMHhiNywgMHhhZCwgMHgxOSwgMHhlMCwgMHhjMCwgMHg3ZCwgMHgwYSwgMHhkZiwgMHhkZCwgMHg1NywKKwkweGQ5LCAweDg1LCAweGRhLCAweDQ0LCAweGUxLCAweDNkLCAweGZmLCAweDljLCAweDJmLCAweDdjLCAweGQ1LCAweGQ5LAorCTB4NjcsIDB4YjgsIDB4ZWQsIDB4ZWMsIDB4NzMsIDB4MGIsIDB4MTcsIDB4ZTIsIDB4MzksIDB4YmYsIDB4YzcsIDB4MTcsCisJMHg4MSwgMHhkZSwgMHhmZSwgMHgwNywgMHg2OSwgMHg4MiwgMHg1ZiwgMHhkMSwgMHgwNywgMHgzNCwgMHhjZiwgMHg0ZiwKKwkweGI2LCAweGUxLCAweGMzLCAweGZmLCAweDdhLCAweDE1LCAweDNlLCAweDQ0LCAweGNlLCAweDVhLCAweDg5LCAweDQ5LAorCTB4MDYsIDB4ZDgsIDB4ZDAsIDB4NWUsIDB4ZTMsIDB4NWEsIDB4ZjQsIDB4ZTUsIDB4NTEsIDB4ZTksIDB4MDAsIDB4N2YsCisJMHg5ZCwgMHg4YiwgMHg3ZCwgMHhjMCwgMHg0NCwgMHhkZCwgMHgxMiwgMHgwNSwgMHgzNiwgMHg4YSwgMHgyOCwgMHg2YywKKwkweDM0LCAweDQ0LCAweDBjLCAweDMzLCAweDdjLCAweDE4LCAweDk4LCAweGE2LCAweGIxLCAweDg5LCAweDhmLCAweGNjLAorCTB4ZDQsIDB4MGYsIDB4YTAsIDB4OTcsIDB4ODcsIDB4OTUsIDB4YWQsIDB4OGMsIDB4Y2IsIDB4NTMsIDB4ODgsIDB4OWQsCisJMHgxZCwgMHg2YiwgMHhjMCwgMHg3NSwgMHgyYiwgMHgxZSwgMHg2ZSwgMHg4YSwgMHg1YywgMHg4NSwgMHg5YiwgMHg4ZSwKKwkweGVjLCAweDg4LCAweDliLCAweDU0LCAweGJmLCAweDdlLCAweDljLCAweDMyLCAweDc5LCAweGRkLCAweGY1LCAweGZhLAorCTB4ZjUsIDB4OTcsIDB4NWMsIDB4YWYsIDB4NWYsIDB4ZmYsIDB4YmEsIDB4ZGIsIDB4ZGUsIDB4YWYsIDB4YmYsIDB4NDksCisJMHg4YSwgMHg4NiwgMHg2OSwgMHg1ZiwgMHg5NCwgMHhhYiwgMHhmYSwgMHhmNSwgMHgzMywgMHhlYywgMHg3ZiwgMHg1NywKKwkweGJiLCAweGJjLCAweGJlLCAweDdjLCAweGI3LCAweGRmLCAweGFmLCAweDM3LCAweGE1LCAweGI4LCAweDZkLCAweGRjLAorCTB4OTAsIDB4YjcsIDB4YWQsIDB4YTAsIDB4NWYsIDB4ZmYsIDB4MmYsIDB4MzAsIDB4ZDYsIDB4ODMsIDB4M2QsIDB4YjYsCisJMHhmNywgMHhlYSwgMHgyZiwgMHhiOSwgMHhlYywgMHhkNSwgMHhjNywgMHgzOCwgMHhjZiwgMHhlZiwgMHhkNSwgMHg3MywKKwkweDFlLCAweDZhLCAweDc4LCAweDk3LCAweDdkLCAweGZhLCAweDliLCAweDIxLCAweDhiLCAweDdlLCAweGM4LCAweGExLAorCTB4NGYsIDB4M2EsIDB4OWUsIDB4OGIsIDB4NzMsIDB4OGUsIDB4ZWEsIDB4Y2YsIDB4NWYsIDB4NzQsIDB4NjMsIDB4NzgsCisJMHhjZSwgMHhlYiwgMHhhMywgMHgxZiwgMHg4NiwgMHg1ZCwgMHgxZCwgMHhkOSwgMHhlYywgMHhjZiwgMHg3YiwgMHg3YiwKKwkweGJjLCAweGUxLCAweDZlLCAweDVmLCAweDdmLCAweGZiLCAweDNhLCAweDAzLCAweGZlLCAweDNhLCAweDMxLCAweGFjLAorCTB4MTMsIDB4YmYsIDB4NmEsIDB4OWQsIDB4YWQsIDB4N2UsIDB4ZmMsIDB4MWIsIDB4YWUsIDB4ZDcsIDB4OGIsIDB4NzcsCisJMHg0ZSwgMHg4YiwgMHhkZCwgMHg4MSwgMHg5OCwgMHhmYywgMHhlMiwgMHhkMCwgMHg4ZCwgMHhmZSwgMHgxYSwgMHg5YiwKKwkweGJkLCAweDc4LCAweGM2LCAweDBlLCAweGUwLCAweDc1LCAweGM2LCAweDBmLCAweDNlLCAweGZmLCAweGZmLCAweGJlLAorCTB4MTcsIDB4Y2YsIDB4M2UsIDB4YmMsIDB4NzcsIDB4OWUsIDB4NDIsIDB4ZmYsIDB4MDQsIDB4MmUsIDB4N2YsIDB4ZDYsCisJMHhlYiwgMHhjMSwgMHg0ZiwgMHg1NCwgMHg4MiwgMHhkZSwgMHgzYSwgMHhlYiwgMHhjNiwgMHhlMCwgMHhiZCwgMHg4YywKKwkweGMxLCAweGM0LCAweDcxLCAweGExLCAweGFkLCAweDkwLCAweDNlLCAweGFlLCAweGRiLCAweDIzLCAweDczLCAweDBhLAorCTB4MTcsIDB4YzEsIDB4YTYsIDB4OTIsIDB4ZDcsIDB4YzYsIDB4YzYsIDB4YjUsIDB4YzUsIDB4MDAsIDB4MWIsIDB4YzcsCisJMHgxNCwgMHgzNiwgMHhhZSwgMHhhZCwgMHgwNSwgMHhkOCwgMHgzOCwgMHg3MywgMHgwZCwgMHg2YywgMHhmYywgMHhkZiwKKwkweGJhLCAweGJjLCAweGY4LCAweDFmLCAweDk1LCAweDgyLCAweGMyLCAweGM2LCAweGQ3LCAweDdhLCAweGM3LCAweDg2LAorCTB4ZjcsIDB4YmEsIDB4ODksIDB4MDMsIDB4YzQsIDB4M2IsIDB4MTcsIDB4ZWYsIDB4YmIsIDB4ODYsIDB4YWYsIDB4MDUsCisJMHg3OCwgMHg5OSwgMHhiOSwgMHhiZSwgMHg1ZiwgMHg2NiwgMHg5ZSwgMHhkYiwgMHhjMiwgMHhjYiwgMHgxZSwgMHgyNiwKKwkweDM2LCAweDEzLCAweDQ3LCAweDU1LCAweDJlLCAweDA0LCAweDNlLCAweDY4LCAweGIyLCAweGVmLCAweDdkLCAweDQ4LAorCTB4ZDksIDB4NmUsIDB4YTksIDB4MzIsIDB4YWIsIDB4NzAsIDB4NTksIDB4MWUsIDB4YjUsIDB4NmQsIDB4NTEsIDB4ZTEsCisJMHg2MCwgMHg2MiwgMHhlMCwgMHgyZSwgMHg5MSwgMHhiZSwgMHgyMCwgMHgxNywgMHgwNSwgMHgxOCwgMHgzMywgMHhlYywKKwkweGM3LCAweDY3LCAweDllLCAweDI5LCAweGJjLCAweDFkLCAweGNhLCAweDEwLCAweDAzLCAweGJiLCAweDQxLCAweDhkLAorCTB4NDAsIDB4MzksIDB4MGYsIDB4MjMsIDB4NzYsIDB4MTksIDB4YmUsIDB4YWMsIDB4M2MsIDB4OWYsIDB4ZGQsIDB4YjcsCisJMHhmZiwgMHg4NywgMHhlZiwgMHhkYiwgMHgwNiwgMHhlMywgMHg1YSwgMHg4MCwgMHgxMSwgMHg1MSwgMHgwMywgMHg1NSwKKwkweGM2LCAweGQ1LCAweGJiLCAweDBlLCAweDFlLCAweDQ2LCAweGY0LCAweGYwLCAweDYxLCAweGQ2LCAweDlkLCAweDAxLAorCTB4NGUsIDB4OWUsIDB4OTUsIDB4MDksIDB4ZTAsIDB4ZjMsIDB4ZjUsIDB4ZGYsIDB4NjUsIDB4ZWYsIDB4MjksIDB4YzAsCisJMHg0NCwgMHgzNiwgMHhmZSwgMHhiNywgMHhmNywgMHhhMiwgMHg3OCwgMHhkZCwgMHhhMSwgMHhjZSwgMHhmZSwgMHhjZSwKKwkweDBmLCAweDQ1LCAweGRiLCAweGM2LCAweGZmLCAweDNlLCAweGUyLCAweDM3LCAweGVhLCAweGExLCAweDBhLCAweDczLAorCTB4MWQsIDB4YjEsIDB4ZDAsIDB4NmYsIDB4NDAsIDB4MDcsIDB4NjMsIDB4ZDcsIDB4YzAsIDB4NDIsIDB4NTcsIDB4ZTcsCisJMHgyNiwgMHhlNiwgMHhjYiwgMHhhZCwgMHhiYywgMHhlNCwgMHg2YywgMHhlNiwgMHgyNSwgMHhlZSwgMHhmMSwgMHhlYiwKKwkweDcyLCAweDI3LCAweGM3LCAweDZjLCAweDIzLCAweDYyLCAweDRkLCAweGUxLCAweDMzLCAweDhmLCAweDdjLCAweGJkLAorCTB4M2QsIDB4MzcsIDB4Y2QsIDB4NWQsIDB4NDcsIDB4NmUsIDB4OWEsIDB4NTAsIDB4YjksIDB4ODksIDB4ZjQsIDB4YTIsCisJMHg5ZSwgMHg4MywgMHg0YywgMHhiZSwgMHgwYiwgMHg1OSwgMHg3ZSwgMHgwNywgMHhiNCwgMHhmZiwgMHgxMSwgMHhmOCwKKwkweGY5LCAweDQzLCAweDYwLCAweGFjLCAweDZmLCAweDAzLCAweDYzLCAweDdkLCAweGFiLCAweGQyLCAweGZlLCAweDBlLAorCTB4YzMsIDB4YjgsIDB4YjAsIDB4MGUsIDB4ZjQsIDB4ZWEsIDB4NjYsIDB4MGYsIDB4YzMsIDB4MWYsIDB4ODYsIDB4NTcsCisJMHgzNSwgMHhjYSwgMHg4NiwgMHgzMywgMHg1NywgMHgxZSwgMHgzMSwgMHhlNiwgMHhiZCwgMHhmMywgMHhkMiwgMHg0NCwKKwkweDRlLCAweGQyLCAweDg4LCAweDExLCAweGNjLCAweDE1LCAweGVhLCAweDNhLCAweGNlLCAweDdlLCAweDI1LCAweGIxLAorCTB4NDIsIDB4NWQsIDB4ZDUsIDB4OTMsIDB4NDMsIDB4NTIsIDB4NmQsIDB4NzgsIDB4ZjgsIDB4NmEsIDB4ZTEsIDB4OGMsCisJMHhiNywgMHhjNiwgMHg5YywgMHg4ZiwgMHhhZiwgMHhmMiwgMHgzZSwgMHhiZSwgMHhjYSwgMHgzNSwgMHgzNiwgMHgxMiwKKwkweGFjLCAweGNmLCAweDE3LCAweDUyLCAweGRiLCAweDMxLCAweGQ1LCAweDYxLCAweDFmLCAweDUzLCAweGNkLCAweGZmLAorCTB4MTUsIDB4MzEsIDB4MTUsIDB4ZjcsIDB4Y2EsIDB4ZTMsIDB4OTksIDB4YzksIDB4YTUsIDB4ODQsIDB4MWMsIDB4ODAsCisJMHg3YywgMHgyNywgMHhjYSwgMHhkNCwgMHg5MywgMHg2OSwgMHhjMywgMHg2ZSwgMHgzZSwgMHg0NCwgMHg1NywgMHg4ZSwKKwkweGQyLCAweDRiLCAweDI4LCAweGU5LCAweGU5LCAweDY5LCAweDEyLCAweDdhLCAweDlhLCAweGY4LCAweGI1LCAweGY1LAorCTB4OGQsIDB4MWEsIDB4MzMsIDB4ZGUsIDB4MWMsIDB4OGIsIDB4ZTIsIDB4ZjMsIDB4N2YsIDB4YWEsIDB4MjMsIDB4ZDIsCisJMHg0ZiwgMHgzZCwgMHg1ZCwgMHg4ZCwgMHhiOSwgMHhhZSwgMHgwNywgMHg3YiwgMHg2ZCwgMHhjNywgMHg1ZCwgMHhiNiwKKwkweGMyLCAweDVkLCAweDFkLCAweGZlLCAweDljLCAweDk5LCAweDg5LCAweDQ5LCAweGU4LCAweGYwLCAweGRmLCAweDYzLAorCTB4Y2UsIDB4OWYsIDB4YzAsIDB4YjcsIDB4N2UsIDB4ODgsIDB4NzgsIDB4ZmQsIDB4ZWYsIDB4YTAsIDB4OGIsIDB4N2YsCisJMHg4YiwgMHhkYSwgMHhlMCwgMHg1NSwgMHhlNCwgMHg5ZiwgMHgxZiwgMHg2MCwgMHg2YywgMHgwYiwgMHhjNywgMHhhOCwKKwkweDMzLCAweGZhLCAweGQxLCAweDhjLCAweDk1LCAweDk4LCAweDI4LCAweGJhLCAweDg5LCAweDA5LCAweDBmLCAweDdmLAorCTB4ZmMsIDB4ZWEsIDB4NmYsIDB4NjYsIDB4YWMsIDB4MjksIDB4YmUsIDB4YzMsIDB4MDAsIDB4ZjksIDB4ZmUsIDB4ZjksCisJMHhkZCwgMHg3MywgMHgwYSwgMHg3YiwgMHgwNCwgMHg5OCwgMHgyMywgMHg2NywgMHg3MywgMHhmZiwgMHg5MiwgMHg5YiwKKwkweDlhLCAweGE4LCAweGUxLCAweGUzLCAweDYxLCAweDliLCAweGVmLCAweGQ5LCAweDFlLCAweGI2LCAweDU5LCAweGZhLAorCTB4ZWIsIDB4ZDQsIDB4YmIsIDB4ODcsIDB4NmIsIDB4MWUsIDB4NGUsIDB4ZDMsIDB4YWYsIDB4ZWIsIDB4YzAsIDB4MWMsCisJMHgzNSwgMHhmOCwgMHg2NCwgMHhhMSwgMHg2OSwgMHhhYiwgMHhjZiwgMHhmMSwgMHg4YSwgMHg2ZCwgMHg0NiwgMHgyMCwKKwkweDFmLCAweGY2LCAweDU4LCAweDRmLCAweGQxLCAweDBiLCAweDVkLCAweGQzLCAweDI4LCAweDEzLCAweDgxLCAweGJhLAorCTB4NjYsIDB4ZmMsIDB4OWYsIDB4ZjksIDB4ZDcsIDB4NGYsIDB4ZmIsIDB4ZDcsIDB4NGYsIDB4ZjksIDB4ZDcsIDB4MjcsCisJMHg5MSwgMHg3NywgMHg5ZiwgMHg1NCwgMHhiOSwgMHg5MywgMHhlMywgMHgxYywgMHg4MywgMHg3MiwgMHg1ZCwgMHhhYywKKwkweDg1LCAweGY1LCAweGNlLCAweDhlLCAweGZlLCAweGI0LCAweDU1LCAweDhkLCAweDc5LCAweGZlLCAweDVjLCAweDY4LAorCTB4M2EsIDB4ZjgsIDB4ZmMsIDB4NjMsIDB4N2MsIDB4MGUsIDB4ZTIsIDB4MzMsIDB4OGQsIDB4Y2YsIDB4NjMsIDB4ZjgsCisJMHg2YywgMHhjYSwgMHg1NCwgMHhjYiwgMHg1NiwgMHhhOCwgMHhhMywgMHg2MSwgMHhjOSwgMHg2MiwgMHhiYywgMHg4OCwKKwkweDNhLCAweDM0LCAweDkzLCAweDdhLCAweDQ0LCAweDhhLCAweGY1LCAweDkyLCAweDk0LCAweDk2LCAweDM0LCAweGU5LAorCTB4YjYsIDB4ZDIsIDB4NTIsIDB4YWEsIDB4MWYsIDB4OTMsIDB4ZTMsIDB4NGIsIDB4ZGUsIDB4YjksIDB4NjEsIDB4NTcsCisJMHhkYSwgMHhjNiwgMHhkYywgMHg5NiwgMHgzYywgMHg5YywgMHg3YSwgMHg1YywgMHhmNCwgMHgzYiwgMHg4ZiwgMHg2MSwKKwkweDllLCAweGU4LCAweGM1LCAweGQxLCAweGRiLCAweGQ0LCAweGY5LCAweDU4LCAweDNkLCAweGU1LCAweGM5LCAweGY4LAorCTB4ODAsIDB4NjUsIDB4OWIsIDB4YzgsIDB4NWIsIDB4YzMsIDB4NGYsIDB4NjIsIDB4ZWQsIDB4OGMsIDB4N2EsIDB4M2YsCisJMHgzMCwgMHgyZCwgMHgyNywgMHg0ZSwgMHg2ZiwgMHhlYywgMHhmNSwgMHg2MiwgMHhhOSwgMHg2OSwgMHhiYywgMHg4MSwKKwkweDRkLCAweGViLCAweGUwLCAweGMzLCAweDQ2LCAweGVjLCAweDliLCAweDgyLCAweDlkLCAweDFmLCAweDcxLCAweGMzLAorCTB4ZGEsIDB4MDQsIDB4NjIsIDB4ZTAsIDB4ODQsIDB4YWIsIDB4NmEsIDB4M2QsIDB4YzQsIDB4MmEsIDB4YzMsIDB4NDksCisJMHg5ZSwgMHg4YSwgMHhlMSwgMHg5YSwgMHhlZiwgMHhkMCwgMHgyMCwgMHgwZiwgMHgyYSwgMHg1YiwgMHhkOSwgMHgwMCwKKwkweDhlLCAweGQxLCAweDU0LCAweGJmLCAweGFmLCAweGI0LCAweDc5LCAweDBlLCAweGE0LCAweGZhLCAweGZmLCAweDRlLAorCTB4MzIsIDB4YTksIDB4NGIsIDB4N2UsIDB4OGMsIDB4MzgsIDB4ZDYsIDB4NTYsIDB4YjksIDB4YTgsIDB4NTEsIDB4YjYsCisJMHgzZiwgMHhjMSwgMHhkYSwgMHhmMCwgMHg3NSwgMHg2MSwgMHg1ZSwgMHhiYiwgMHgwNywgMHhmMywgMHgwNiwgMHgxMCwKKwkweDdmLCAweDcxLCAweGFmLCAweDA5LCAweDVlLCAweDRlLCAweDkzLCAweDU3LCAweDNlLCAweDgzLCAweGRhLCAweGI2LAorCTB4ZmEsIDB4NDksIDB4YmQsIDB4YjgsIDB4ZTQsIDB4ZDcsIDB4NDQsIDB4YWEsIDB4NzYsIDB4NDgsIDB4NDgsIDB4N2QsCisJMHhmMywgMHhjYywgMHhjOSwgMHhlYiwgMHg5MywgMHhkNCwgMHhkZCwgMHgwMCwgMHgzYiwgMHhmNCwgMHg2MCwgMHgwZSwKKwkweGViLCAweDA4LCAweGM4LCAweGM4LCAweDNiLCAweDI3LCAweDUzLCAweDY3LCAweDY0LCAweDQ1LCAweGY3LCAweDkzLAorCTB4N2EsIDB4NjksIDB4MjksIDB4ODMsIDB4NzEsIDB4ZjYsIDB4YTQsIDB4ZjEsIDB4YmQsIDB4YWEsIDB4MmIsIDB4ZWMsCisJMHg3ZiwgMHgzMSwgMHg3NCwgMHg1OCwgMHgxYSwgMHhkNSwgMHgxNiwgMHhlOCwgMHg0NSwgMHg4ZSwgMHhkZCwgMHg3YiwKKwkweDU4LCAweDZhLCAweGQ1LCAweDc5LCAweDc5LCAweGExLCAweGJhLCAweGIxLCAweDBiLCAweGQ4LCAweDA5LCAweDMyLAorCTB4MjUsIDB4ZmQsIDB4M2QsIDB4M2UsIDB4ZmQsIDB4NTQsIDB4NDEsIDB4MzAsIDB4MGUsIDB4NzksIDB4OWUsIDB4MmUsCisJMHhjNCwgMHhiZCwgMHhiYSwgMHg5NiwgMHhiOCwgMHhlZCwgMHgyNCwgMHhkZiwgMHgxYiwgMHg4YywgMHhmMywgMHgzZCwKKwkweGJlLCAweDIzLCAweGNiLCAweGI0LCAweGM5LCAweDhiLCAweGY3LCAweDJlLCAweDU4LCAweDlmLCAweDkyLCAweDBiLAorCTB4YTksIDB4M2QsIDB4YjIsIDB4OTEsIDB4NTIsIDB4ZjUsIDB4MmYsIDB4ZjEsIDB4MDEsIDB4N2MsIDB4ZGIsIDB4MzQsCisJMHhkNiwgMHhlNSwgMHg2ZSwgMHgzOSwgMHgwMSwgMHgzZiwgMHhiZCwgMHg5MCwgMHhjYSwgMHhhOSwgMHhmMywgMHg5YiwKKwkweGUzLCAweDRkLCAweDYyLCAweGZiLCAweDc5LCAweGQ2LCAweDU0LCAweGIyLCAweGFlLCAweDdhLCAweDYwLCAweGFkLAorCTB4ZDYsIDB4NjQsIDB4OGEsIDB4YjEsIDB4YTcsIDB4NDMsIDB4MzYsIDB4MTQsIDB4ZDYsIDB4ZjIsIDB4N2EsIDB4ZTMsCisJMHgxYiwgMHhiMywgMHg5ZSwgMHg2ZiwgMHg4NCwgMHg5NCwgMHhiZCwgMHhmZiwgMHgxYiwgMHhkMCwgMHg3MSwgMHgwYywKKwkweDM2LCAweDFiLCAweDUxLCAweDczLCAweDQyLCAweGU5LCAweDRlLCAweDdmLCAweDhlLCAweGMyLCAweDY2LCAweDZkLAorCTB4NzMsIDB4YzYsIDB4YzcsIDB4MzMsIDB4OTYsIDB4ZjEsIDB4YTksIDB4OGMsIDB4MzUsIDB4MzYsIDB4ZTEsIDB4ZjUsCisJMHg1MywgMHg0YywgMHhjMywgMHhkNiwgMHgyZSwgMHhiNiwgMHg4MiwgMHhmNywgMHg0ZCwgMHhhNiwgMHhlMCwgMHg0ZiwKKwkweDJmLCAweDZkLCAweDYyLCAweDYzLCAweDE4LCAweGU3LCAweGYzLCAweDBiLCAweGQwLCAweDZiLCAweDU4LCAweDNhLAorCTB4NGUsIDB4YjUsIDB4ZWUsIDB4OTksIDB4NGIsIDB4OGQsIDB4MjQsIDB4OGUsIDB4MDgsIDB4ZGYsIDB4MzAsIDB4NjIsCisJMHhmZCwgMHg2YywgMHg4MiwgMHhkYSwgMHgwNSwgMHhlNCwgMHhjMywgMHgyYiwgMHhjNCwgMHgwOCwgMHhjMywgMHhlNywKKwkweGU1LCAweGNhLCAweDNkLCAweDk5LCAweGQ0LCAweDdlLCAweGFkLCAweDM2LCAweDhiLCAweGVhLCAweGU0LCAweGY5LAorCTB4MjksIDB4ZTYsIDB4ZDMsIDB4YTMsIDB4ZWMsIDB4N2QsIDB4ODYsIDB4NGUsIDB4YmQsIDB4YWQsIDB4MzksIDB4NjUsCisJMHhmNSwgMHg4ZSwgMHgzOSwgMHhmNCwgMHhkMiwgMHhkMiwgMHhlNiwgMHgyMSwgMHgzNywgMHgzYywgMHgzZiwgMHhjMywKKwkweDA0LCAweGE4LCAweDViLCAweDgzLCAweDA5LCAweDQ3LCAweDcyLCAweGVjLCAweDcxLCAweDQ5LCAweDdlLCAweDU5LAorCTB4ZjYsIDB4NjUsIDB4MTAsIDB4NDcsIDB4ZWQsIDB4OTksIDB4MGUsIDB4OTksIDB4NmYsIDB4MTgsIDB4Y2UsIDB4ZTAsCisJMHhlMiwgMHg1MSwgMHhhYywgMHgzMSwgMHg4NywgMHhiNSwgMHhhNiwgMHg1MSwgMHg4MywgMHhjYywgMHgyMiwgMHgyNywKKwkweDUzLCAweGFlLCAweDhjLCAweGQ1LCAweDBmLCAweDQzLCAweDQ2LCAweDM3LCAweGYxLCAweGNjLCAweDc4LCAweDNjLAorCTB4MjcsIDB4ZTYsIDB4NGMsIDB4NDEsIDB4YWQsIDB4ZmIsIDB4OWUsIDB4OTYsIDB4MWYsIDB4ZmQsIDB4MTgsIDB4NzIsCisJMHg1YSwgMHg1OCwgMHgwZSwgMHgyNCwgMHg0NSwgMHg5ZiwgMHg0ZSwgMHg4NiwgMHhkZiwgMHg5ZiwgMHhiMywgMHgzOCwKKwkweDE2LCAweGU1LCAweDk4LCAweDhlLCAweGIxLCAweGYwLCAweGU3LCAweDkyLCAweDUxLCAweDNkLCAweDkzLCAweDM0LAorCTB4YzcsIDB4ZDksIDB4ZWYsIDB4MGQsIDB4NTksIDB4NzMsIDB4MTIsIDB4N2EsIDB4YmUsIDB4YjcsIDB4NDcsIDB4YmEsCisJMHhhNywgMHhhNSwgMHg3NywgMHhkNSwgMHgxYywgMHg3ZiwgMHgxZCwgMHhiNCwgMHg4NCwgMHg1NSwgMHg2YywgMHg5ZiwKKwkweDEzLCAweGRkLCAweDFmLCAweGVmLCAweGQ5LCAweDFjLCAweDBmLCAweGZiLCAweGUzLCAweGQzLCAweGQyLCAweGJkLAorCTB4M2EsIDB4NjIsIDB4YmMsIDB4MjksIDB4ODcsIDB4YjEsIDB4NjYsIDB4NDgsIDB4MmUsIDB4YTEsIDB4YTYsIDB4YjEsCisJMHg4NiwgMHhlNiwgMHhlMCwgMHg3MywgMHgwZiwgMHg5MSwgMHg5NiwgMHg4MywgMHhjMCwgMHgxNCwgMHhmMCwgMHgwOSwKKwkweGQ0LCAweGQ5LCAweGQ2LCAweDI3LCAweGU1LCAweDRiLCAweDQ2LCAweDk3LCAweGU0LCAweDU1LCAweDRkLCAweDFiLAorCTB4ZjYsIDB4N2EsIDB4YTUsIDB4YjAsIDB4ZjMsIDB4NWIsIDB4ODcsIDB4YTYsIDB4NzcsIDB4N2IsIDB4ZmQsIDB4MDAsCisJMHg5ZSwgMHg2NywgMHg4YywgMHg2MiwgMHhlYywgMHg0YSwgMHg2YiwgMHhjNSwgMHhlMiwgMHgxOCwgMHhlZiwgMHg1ZCwKKwkweDY5LCAweGQ1LCAweGFkLCAweDExLCAweDIzLCAweGFiLCAweDQ1LCAweGZkLCAweDczLCAweGVkLCAweDc5LCAweGM1LAorCTB4N2IsIDB4YTEsIDB4M2EsIDB4NjgsIDB4ZDQsIDB4ZTQsIDB4MTYsIDB4MmQsIDB4N2IsIDB4MDMsIDB4ZjIsIDB4ODMsCisJMHhmYiwgMHgxOSwgMHhjYywgMHhiZCwgMHhkMiwgMHhjYSwgMHg1OCwgMHhmMywgMHhhYSwgMHg3ZiwgMHg1ZiwgMHg5MywKKwkweGUwLCAweDlhLCAweGViLCAweDhjLCAweDE4LCAweDkzLCAweGVhLCAweGQ5LCAweDExLCAweGUzLCAweDg0LCAweGQ2LAorCTB4ZmUsIDB4YWMsIDB4YTEsIDB4NGQsIDB4NmUsIDB4N2IsIDB4YjYsIDB4NWIsIDB4YzksIDB4MjgsIDB4NjQsIDB4NzksCisJMHg3MywgMHg0YSwgMHhkNSwgMHg2OSwgMHg3OSwgMHhkYSwgMHhlNSwgMHhiYywgMHgyYiwgMHhhZCwgMHhhYywgMHgxNSwKKwkweGQxLCAweDRlLCAweGRjLCAweGMwLCAweDE4LCAweGM4LCAweGI5LCAweDk3LCAweGFmLCAweGRhLCAweDg3LCAweGQ3LAorCTB4ZDcsIDB4ZGEsIDB4ZTMsIDB4NWQsIDB4ZDksIDB4YmUsIDB4YzcsIDB4MmUsIDB4MzUsIDB4ZTcsIDB4ODIsIDB4OWEsCisJMHgxMywgMHg1NiwgMHhiMiwgMHhkZSwgMHhiZSwgMHhjZiwgMHhjZiwgMHg2NCwgMHhmYiwgMHgzZSwgMHhkZCwgMHg5YiwKKwkweDNjLCAweDk3LCAweGIwLCAweGU2LCAweDkzLCAweDk4LCAweDViLCAweDc2LCAweDA3LCAweGUzLCAweDc1LCAweGI5LAorCTB4ZGMsIDB4Y2EsIDB4NWIsIDB4MTcsIDB4ZTUsIDB4YzIsIDB4ZTYsIDB4ZGEsIDB4YmYsIDB4YzIsIDB4NzUsIDB4M2IsCisJMHg0ZCwgMHhiZiwgMHhmMiwgMHg2OSwgMHhlNCwgMHg3NywgMHg4ZSwgMHgzZCwgMHhhYSwgMHhlNCwgMHhiZCwgMHhkYiwKKwkweDFhLCAweDNjLCAweDU4LCAweGQzLCAweGNjLCAweGYxLCAweDlmLCAweDA5LCAweDc1LCAweDc1LCAweDQ0LCAweGM1LAorCTB4OTgsIDB4ZGIsIDB4YTAsIDB4YTcsIDB4N2QsIDB4Y2YsIDB4YzAsIDB4NjcsIDB4NDcsIDB4NmQsIDB4MzUsIDB4ZTcsCisJMHg5MiwgMHgzNSwgMHgyZCwgMHhmYiwgMHg0ZSwgMHgwZCwgMHgxYSwgMHg5NywgMHgxMCwgMHhkYiwgMHg5YywgMHgxOCwKKwkweGFmLCAweDUxLCAweDJiLCAweDU5LCAweDdjLCAweDI3LCAweGZlLCAweDRlLCAweGQ2LCAweDAxLCAweGQwLCAweGU1LAorCTB4ZTAsIDB4ZjAsIDB4Y2YsIDB4ZTQsIDB4YTgsIDB4OWMsIDB4YTgsIDB4MWMsIDB4NDMsIDB4MmUsIDB4OWMsIDB4OTMsCisJMHhlMSwgMHg2NywgMHg5MCwgMHgzNywgMHgyYSwgMHgwNSwgMHgzYywgMHg0OSwgMHg5ZiwgMHhmNSwgMHg3MiwgMHhlMCwKKwkweDljLCAweDdhLCAweGNmLCAweGZjLCAweDI0LCAweGVhLCAweDY0LCAweGQ4LCAweDZlLCAweDc5LCAweDcwLCAweDc4LAorCTB4MDUsIDB4Y2YsIDB4YmMsIDB4YTAsIDB4NzAsIDB4YTgsIDB4MmIsIDB4MGQsIDB4ZjgsIDB4NDAsIDB4ZTIsIDB4ZjksCisJMHgzZCwgMHhiMiwgMHhmYiwgMHgwMSwgMHhkYSwgMHgyMiwgMHgzMiwgMHhmZCwgMHg2ZCwgMHgxMSwgMHhmNSwgMHhlZSwKKwkweGJkLCAweDZlLCAweDc1LCAweDhhLCAweGVjLCAweGE1LCAweGRkLCAweDM0LCAweDYxLCAweDYzLCAweDczLCAweGRlLAorCTB4OTksIDB4ZDYsIDB4YjYsIDB4NmIsIDB4NzMsIDB4ZTYsIDB4YTIsIDB4YWMsIDB4MmEsIDB4ZmIsIDB4YmIsIDB4N2QsCisJMHhkNSwgMHhmYiwgMHgzZiwgMHhiYSwgMHg4YSwgMHg3MiwgMHgzOCwgMHgzOSwgMHgyZCwgMHg3NywgMHhhYywgMHg3YSwKKwkweGY2LCAweDU2LCAweDVhLCAweDNhLCAweGFhLCAweGU0LCAweDNhLCAweGE3LCAweGU0LCAweGRhLCAweDkyLCAweGMzLAorCTB4MjksIDB4Y2EsIDB4OWMsIDB4YmMsIDB4ZjAsIDB4YmQsIDB4NDAsIDB4NGYsIDB4MTYsIDB4ZjcsIDB4ZmIsIDB4ZjYsCisJMHgzMywgMHhmOCwgMHgwYywgMHg3ZiwgMHg1NywgMHg0MiwgMHhkOSwgMHhiMCwgMHhlZSwgMHhiZSwgMHg3ZiwgMHgzNywKKwkweGNmLCAweDU5LCAweGY3LCAweGFkLCAweDkyLCAweGNmLCAweDFiLCAweGI3LCAweGYxLCAweGY5LCAweDE0LCAweDYyLAorCTB4ZWEsIDB4ZDAsIDB4OTAsIDB4YzcsIDB4ZWIsIDB4YWIsIDB4NGIsIDB4MWYsIDB4Y2UsIDB4ZWIsIDB4MzcsIDB4MzcsCisJMHg3OSwgMHgwZCwgMHg0OSwgMHg0MywgMHhkNSwgMHhhZiwgMHg1ZCwgMHhiZCwgMHhkMiwgMHg4ZCwgMHhhOCwgMHgwNywKKwkweDdiLCAweGY4LCAweDA5LCAweGY2LCAweDlhLCAweDEyLCAweGQyLCAweGUwLCAweGVkLCAweGI3LCAweGUxLCAweDkyLAorCTB4OTYsIDB4ODAsIDB4NzYsIDB4ZDIsIDB4NzMsIDB4OWYsIDB4YWYsIDB4MmYsIDB4ZWUsIDB4N2YsIDB4NzQsIDB4YzcsCisJMHg3YiwgMHg5NywgMHhjNCwgMHg3MCwgMHg4NiwgMHgzMSwgMHhhNiwgMHgyYiwgMHg5ZCwgMHg2NSwgMHg3ZCwgMHhmZiwKKwkweDlhLCAweDE2LCAweDVkLCAweGU5LCAweGNjLCAweGRlLCAweGQ0LCAweGQ5LCAweGViLCAweGQwLCAweDU5LCAweDVkLAorCTB4N2UsIDB4MTMsIDB4YmMsIDB4YzAsIDB4OWYsIDB4OWYsIDB4MTksIDB4MzEsIDB4MGUsIDB4MTMsIDB4NWIsIDB4MTgsCisJMHg1YywgMHgwZiwgMHgzMSwgMHhkNCwgMHhkNywgMHg1ZCwgMHhjNywgMHg0NywgMHhkMCwgMHhkZCwgMHg5YiwgMHhhMiwKKwkweGY0LCAweDA3LCAweDdlLCAweDkwLCAweDdmLCAweGQ0LCAweGYzLCAweDhjLCAweDYxLCAweGU0LCAweGE5LCAweDQzLAorCTB4ZjksIDB4M2UsIDB4NjksIDB4NTMsIDB4NjcsIDB4ZmMsIDB4MzMsIDB4OWUsIDB4M2UsIDB4OTUsIDB4NmYsIDB4ZmIsCisJMHhmYSwgMHhjYywgMHhjZCwgMHg1MCwgMHg2NywgMHhlNiwgMHg2ZSwgMHg0ZiwgMHg3ZiwgMHg5ZCwgMHg2YSwgMHhjZSwKKwkweDYyLCAweDMyLCAweGExLCAweGZjLCAweGRhLCAweDFhLCAweGJhLCAweDY1LCAweDM3LCAweDc1LCAweGY4LCAweGI0LAorCTB4ZWIsIDB4ZmQsIDB4MmYsIDB4YmIsIDB4ZDMsIDB4YjIsIDB4ZTgsIDB4N2UsIDB4OTgsIDB4MWUsIDB4M2QsIDB4MWQsCisJMHg0ZSwgMHg4OCwgMHhlNywgMHgzZiwgMHg1NywgMHhlYiwgMHg0ZiwgMHg1ZiwgMHgwZCwgMHgyYiwgMHg1YiwgMHg5ZCwKKwkweDgwLCAweGVjLCAweDRlLCAweDU2LCAweDNlLCAweGU2LCAweGRiLCAweGI3LCAweGM3LCAweGViLCAweGQwLCAweDg3LAorCTB4ZjAsIDB4N2EsIDB4YjgsIDB4M2MsIDB4NjgsIDB4YmMsIDB4OGQsIDB4YjUsIDB4MjYsIDB4MTUsIDB4ODYsIDB4OGIsCisJMHg4OCwgMHhlMywgMHhmMywgMHg5YSwgMHhkOCwgMHhlNCwgMHgzNSwgMHhhMCwgMHhjZCwgMHg5YiwgMHg5NywgMHg2NSwKKwkweDVkLCAweGVhLCAweDMyLCAweDNlLCAweDNkLCAweGFhLCAweGRlLCAweGJmLCAweDdmLCAweGEzLCAweGNjLCAweGI4LAorCTB4MGMsIDB4Y2MsIDB4MTMsIDB4ZWIsIDB4OTMsIDB4NGIsIDB4OGQsIDB4ODQsIDB4NWMsIDB4MjIsIDB4OTYsIDB4MTgsCisJMHhjMywgMHg3ZiwgMHhmNywgMHg5OCwgMHg5ZiwgMHg5YiwgMHhhMywgMHhmMiwgMHg2NiwgMHhiOSwgMHhiZCwgMHg1NiwKKwkweDFjLCAweDk1LCAweGQ3LCAweGNiLCAweDQxLCAweGJkLCAweDQ4LCAweDJjLCAweGNiLCAweGZjLCAweDNmLCAweDI3LAorCTB4NmYsIDB4MmQsIDB4MGQsIDB4Y2EsIDB4ZmEsIDB4MGMsIDB4ZjIsIDB4ZjgsIDB4MTAsIDB4NjUsIDB4MzAsIDB4NjIsCisJMHg3YywgMHg0NiwgMHhmZCwgMHhiZSwgMHhlMiwgMHg0YSwgMHhlYiwgMHhiYywgMHg4NSwgMHg3NSwgMHg5NywgMHg1YiwKKwkweDcyLCAweDg0LCAweGU3LCAweGQwLCAweGZjLCAweGRlLCAweGY4LCAweDA0LCAweDU2LCAweGUxLCAweGJjLCAweDNlLAorCTB4YTksIDB4MmQsIDB4YTMsIDB4MmUsIDB4MmYsIDB4NzMsIDB4NWQsIDB4Y2EsIDB4NjksIDB4NWEsIDB4N2QsIDB4OWYsCisJMHhjNCwgMHgzZSwgMHhmNywgMHhmMywgMHhiZCwgMHhmNCwgMHgxOCwgMHg3NSwgMHg3MSwgMHhhNSwgMHhiNSwgMHg2MSwKKwkweGYxLCAweDFjLCAweDcyLCAweDRlLCAweDFhLCAweGQwLCAweGQ3LCAweDk3LCAweDkzLCAweDNjLCAweDI3LCAweGNmLAorCTB4MGIsIDB4N2YsIDB4OWYsIDB4NTIsIDB4NmIsIDB4Y2MsIDB4YTAsIDB4MTYsIDB4YjgsIDB4ZDIsIDB4NWEsIDB4YjAsCisJMHg5ZSwgMHg1MiwgMHg3YSwgMHg2YSwgMHg1NCwgMHgxZiwgMHhmMCwgMHhjNywgMHg3OSwgMHhjZCwgMHg3YiwgMHg4NiwKKwkweGIzLCAweDZmLCAweDg4LCAweGY1LCAweGU3LCAweDAzLCAweGM4LCAweGZmLCAweGFjLCAweDNkLCAweDg5LCAweGI3LAorCTB4MjgsIDB4OGIsIDB4MDQsIDB4NmEsIDB4NWMsIDB4YWUsIDB4YzUsIDB4ZGYsIDB4MDQsIDB4MjUsIDB4ODcsIDB4ZjMsCisJMHgzMiwgMHgwOSwgMHg3YSwgMHg4MCwgMHhjYiwgMHg1YywgMHhjNiwgMHhmZCwgMHg1YiwgMHg2NSwgMHgyMywgMHhlNiwKKwkweGM1LCAweDc3LCAweGJlLCAweGFmLCAweGI1LCAweDgxLCAweDk4LCAweGJmLCAweGIxLCAweDE5LCAweGYzLCAweGZiLAorCTB4NzEsIDB4NmQsIDB4MzgsIDB4YTksIDB4YTEsIDB4ZmYsIDB4ODQsIDB4ZjUsIDB4ZDksIDB4NzcsIDB4NjEsIDB4Y2MsCisJMHgxZiwgMHhjNywgMHg3YywgMHg4ZSwgMHhmNSwgMHg0OSwgMHg2OSwgMHg1OSwgMHg2YywgMHhmNiwgMHg5OSwgMHg2YSwKKwkweGMyLCAweDc3LCAweDMxLCAweDcyLCAweGIyLCAweGQ4LCAweDE4LCAweDhjLCAweDlmLCAweGQ3LCAweDFjLCAweGY1LAorCTB4Y2UsIDB4NDYsIDB4NzIsIDB4ODgsIDB4N2QsIDB4YjcsIDB4M2UsIDB4NjksIDB4MmMsIDB4NGIsIDB4MjIsIDB4OTQsCisJMHg3ZSwgMHg0OCwgMHhkYywgMHg4NiwgMHg4NywgMHhiOSwgMHgxNywgMHgzNCwgMHhmNiwgMHhkZiwgMHg2YywgMHg2OSwKKwkweDZjLCAweDlmLCAweDYzLCAweDg0LCAweGQyLCAweDg3LCAweGU0LCAweDBmLCAweGZjLCAweDM5LCAweDhlLCAweDlhLAorCTB4ZjMsIDB4MWYsIDB4NzYsIDB4ZjMsIDB4ZWMsIDB4YWIsIDB4ZTEsIDB4ZjYsIDB4ODIsIDB4MDYsIDB4ZDIsIDB4NzYsCisJMHg2MywgMHhmYiwgMHhiZSwgMHg4OSwgMHhhZCwgMHg3ZCwgMHhiOSwgMHgyNywgMHg2YSwgMHg5OCwgMHhiZCwgMHgzNiwKKwkweGY2LCAweDdkLCAweDE1LCAweGNmLCAweDNjLCAweDA0LCAweDNhLCAweGFlLCAweDg0LCAweDc0LCAweGViLCAweDIxLAorCTB4MjksIDB4MzYsIDB4YWUsIDB4ZGUsIDB4YTMsIDB4OWQsIDB4MDYsIDB4M2UsIDB4YzMsIDB4ZjUsIDB4YjksIDB4Y2YsCisJMHgyMSwgMHhkMCwgMHg3NywgMHg0NSwgMHhkMywgMHhhZCwgMHg0MywgMHg5MCwgMHhhNSwgMHhiNywgMHg0NywgMHhlOCwKKwkweDM5LCAweGQzLCAweGY4LCAweGExLCAweDBjLCAweDg5LCAweGJlLCAweGEyLCAweDI5LCAweGY5LCAweGViLCAweGI1LAorCTB4NTEsIDB4MzgsIDB4YzQsIDB4OTQsIDB4NzQsIDB4YWYsIDB4Y2QsIDB4NGEsIDB4NjgsIDB4OGQsIDB4M2QsIDB4MDAsCisJMHhkYSwgMHgyMiwgMHhmNSwgMHhiOCwgMHgwYiwgMHg3ZSwgMHgyYywgMHg3NiwgMHhkOCwgMHgyMiwgMHhkZSwgMHg2NywKKwkweDFmLCAweDc3LCAweGI1LCAweDU3LCAweDdhLCAweDg5LCAweGY3LCAweDU5LCAweDBmLCAweDFjLCAweGM0LCAweDdmLAorCTB4ZDYsIDB4MDQsIDB4MmYsIDB4YjUsIDB4MzIsIDB4YTksIDB4NzcsIDB4NTQsIDB4ZGUsIDB4Y2MsIDB4MzcsIDB4NzgsCisJMHhkZiwgMHg0YywgMHg4OCwgMHhmMCwgMHgxZSwgMHhlMywgMHg0MywgMHg5ZiwgMHg0NCwgMHhiZSwgMHgzZSwgMHg4YywKKwkweDk4LCAweDkwLCAweDAzLCAweDc2LCAweGM2LCAweGJhLCAweGE3LCAweDg2LCAweDI0LCAweGVjLCAweGJkLCAweGViLAorCTB4YTAsIDB4ZmEsIDB4MjUsIDB4NmYsIDB4MmQsIDB4OWIsIDB4ZmUsIDB4ZWYsIDB4NTMsIDB4NjQsIDB4ZGYsIDB4ZjksCisJMHgxNCwgMHg3YiwgMHg5YSwgMHgwMywgMHhiMCwgMHg1MywgMHhkNiwgMHgyMywgMHhhMiwgMHg2ZiwgMHhhMCwgMHhkZSwKKwkweGJjLCAweGQ0LCAweDg4LCAweGY2LCAweGYyLCAweDdkLCAweGNiLCAweGQ3LCAweDVkLCAweDVjLCAweDEzLCAweGJiLAorCTB4YzcsIDB4MTQsIDB4NTYsIDB4ZjQsIDB4ZWYsIDB4ZjEsIDB4M2IsIDB4ZWEsIDB4YTAsIDB4NmQsIDB4OTgsIDB4MzIsCisJMHgwMSwgMHg0YywgMHhjOSwgMHgzYSwgMHg2OSwgMHhjYSwgMHg3ZiwgMHhlNywgMHhjZCwgMHg3MCwgMHg0ZSwgMHg2YywKKwkweGFiLCAweDk1LCAweDg2LCAweDY1LCAweDAzLCAweDM4LCAweDZiLCAweGRkLCAweGI1LCAweDEwLCAweDA3LCAweGRmLAorCTB4ZDYsIDB4ZWEsIDB4NjUsIDB4ZjUsIDB4YmIsIDB4MzQsIDB4ZWQsIDB4MDEsIDB4NjAsIDB4YWMsIDB4NDQsIDB4OWYsCisJMHhhYSwgMHg3NSwgMHg0ZSwgMHgzZSwgMHgyMCwgMHg5ZSwgMHhiZCwgMHhjMywgMHhjYSwgMHg1NCwgMHhjYywgMHg1YSwKKwkweGFmLCAweDdhLCAweGI1LCAweGM1LCAweDQ2LCAweDc1LCAweDRhLCAweGZlLCAweGQ0LCAweDVkLCAweDUwLCAweGJkLAorCTB4ZDIsIDB4MjUsIDB4ZDQsIDB4MWIsIDB4ZTEsIDB4NDUsIDB4NTUsIDB4NmIsIDB4YjUsIDB4ZTEsIDB4NTQsIDB4YzQsCisJMHhiNywgMHg2NywgMHg4ZiwgMHhjMCwgMHgwNywgMHg0ZCwgMHhmNSwgMHg2ZSwgMHg4MSwgMHhiZSwgMHhkMiwgMHg2YSwKKwkweDY1LCAweDExLCAweDJmLCAweDc0LCAweGNiLCAweDMyLCAweDhhLCAweGM4LCAweDczLCAweDU5LCAweGY1LCAweDdlLAorCTB4MGEsIDB4ZmQsIDB4ZjcsIDB4ZjcsIDB4NTQsIDB4MWMsIDB4OTYsIDB4MWEsIDB4NjQsIDB4ZjMsIDB4NWMsIDB4MDIsCisJMHhlYiwgMHg2OCwgMHhjYSwgMHgzZSwgMHg0MywgMHg0YSwgMHgwZiwgMHgwZiwgMHgyOCwgMHhlYywgMHgxYSwgMHg1YSwKKwkweDQxLCAweDgwLCAweDVhLCAweDFiLCAweDEyLCAweDU5LCAweDgxLCAweGJmLCAweGMyLCAweDc3LCAweGMzLCAweDZiLAorCTB4ZDQsIDB4MDEsIDB4NjUsIDB4M2IsIDB4MmIsIDB4MTEsIDB4YzgsIDB4OWUsIDB4NTgsIDB4MjIsIDB4YjQsIDB4NDgsCisJMHgxOSwgMHhjNywgMHg2MSwgMHgxNywgMHg1YywgMHgwNywgMHgzMiwgMHhlNiwgMHhiYiwgMHgyYywgMHhjYiwgMHgxZCwKKwkweGYyLCAweDRjLCAweGMzLCAweGY0LCAweGRmLCAweDNkLCAweDdmLCAweDg5LCAweGVmLCAweGEzLCAweGViLCAweDczLAorCTB4NjMsIDB4MDMsIDB4YzQsIDB4NGYsIDB4NTIsIDB4NmEsIDB4MDAsIDB4NjMsIDB4OWMsIDB4NjYsIDB4MGQsIDB4Y2UsCisJMHgxOCwgMHg1MCwgMHg4OCwgMHg0NywgMHg5NCwgMHhhZiwgMHhiMywgMHgwNiwgMHhmNiwgMHg3YywgMHg5ZiwgMHhmOCwKKwkweDNhLCAweDYyLCAweDExLCAweGRiLCAweDhlLCAweDYyLCAweDhmLCAweDlkLCAweGU0LCAweGVhLCAweGQ1LCAweDllLAorCTB4OTMsIDB4YTAsIDB4ZjMsIDB4ZmMsIDB4OTIsIDB4MzksIDB4NTUsIDB4OTAsIDB4MTQsIDB4ZGYsIDB4NzEsIDB4OWUsCisJMHhiMSwgMHhjMSwgMHhmNywgMHgwNiwgMHhlMiwgMHhlNCwgMHg0MiwgMHg4NSwgMHhlZiwgMHgzMywgMHgxNywgMHhlMSwKKwkweDU5LCAweDUzLCAweDcyLCAweGJlLCAweGNjLCAweDFhLCAweGYwLCAweDc2LCAweGU4LCAweDhiLCAweGQ3LCAweGM1LAorCTB4ZjEsIDB4MTAsIDB4ZmMsIDB4ZmYsIDB4YTIsIDB4YzEsIDB4ZGYsIDB4OTEsIDB4ZjEsIDB4NzcsIDB4NDEsIDB4NjYsCisJMHgyYSwgMHhhMSwgMHgxZCwgMHg4NCwgMHg4ZSwgMHgwYiwgMHg0NiwgMHhjNCwgMHhiNywgMHgwMywgMHhhNywgMHg0YywKKwkweDhjLCAweDM1LCAweDYyLCAweDljLCAweGMzLCAweGY3LCAweDk3LCAweGRkLCAweGNiLCAweDJkLCAweGQ2LCAweDNmLAorCTB4MTcsIDB4MTAsIDB4ZTcsIDB4YTYsIDB4OTIsIDB4NTMsIDB4YjAsIDB4OWQsIDB4NDIsIDB4YmMsIDB4MTMsIDB4YjQsCisJMHhmZSwgMHg1ZCwgMHhkYywgMHhjYiwgMHhiYiwgMHhkYywgMHhjNywgMHg0YywgMHg1ZCwgMHg5NCwgMHgyMiwgMHgzMCwKKwkweGZkLCAweDQ4LCAweGUyLCAweDY1LCAweGQ5LCAweDgzLCAweDNhLCAweDU1LCAweDkzLCAweDM3LCAweDJkLCAweDczLAorCTB4NWMsIDB4MzQsIDB4YjUsIDB4ZGUsIDB4ZjAsIDB4N2QsIDB4YjAsIDB4YmQsIDB4MzcsIDB4MTAsIDB4ZGYsIDB4M2EsCisJMHhmYywgMHhkYSwgMHgzZCwgMHg1YiwgMHgyNiwgMHgxNiwgMHgzYSwgMHhhYSwgMHhkZSwgMHgwNSwgMHhiOCwgMHg2MCwKKwkweGIxLCAweDdmLCAweGM3LCAweGRmLCAweDQ0LCAweGZlLCAweGE1LCAweGRhLCAweDYzLCAweGViLCAweDhjLCAweDhkLAorCTB4ZmQsIDB4NjMsIDB4ZDIsIDB4ZTcsIDB4ZjEsIDB4NzgsIDB4YzAsIDB4ZjIsIDB4NjgsIDB4ZTQsIDB4M2EsIDB4OTEsCisJMHhiNiwgMHg3NSwgMHhjZSwgMHhmYiwgMHhlYiwgMHg5YywgMHhmNSwgMHhkNywgMHhhOSwgMHhmOSwgMHhlYiwgMHg1YywKKwkweGQ4LCAweDVjLCAweGU3LCAweDZlLCAweGU4LCAweGJmLCAweGQ1LCAweDdhLCAweDBhLCAweGY4LCAweDIxLCAweDkzLAorCTB4NmEsIDB4YjUsIDB4MWMsIDB4ZDQsIDB4NTksIDB4YTUsIDB4ZDEsIDB4NzksIDB4NzUsIDB4NDYsIDB4YWEsIDB4YTcsCisJMHhiZiwgMHg3MSwgMHg2ZiwgMHhjNiwgMHgyYSwgMHhjNCwgMHhjMywgMHgwYSwgMHg3YiwgMHhhMCwgMHg5MiwgMHg4MiwKKwkweDFkLCAweDE2LCAweGM0LCAweGMzLCAweGRjLCAweDNjLCAweGI3LCAweGYzLCAweGNlLCAweGY1LCAweGJhLCAweGExLAorCTB4YzMsIDB4MWMsIDB4NzIsIDB4ODYsIDB4OTEsIDB4MzksIDB4NjcsIDB4NDksIDB4NjEsIDB4ZGYsIDB4NmYsIDB4ZWEsCisJMHhiMCwgMHhmMywgMHg1ZSwgMHhlNCwgMHg4NywgMHg5ZiwgMHhjMCwgMHg2NiwgMHg4YywgMHg0YywgMHhiZCwgMHg5MSwKKwkweDQzLCAweGJkLCAweGMzLCAweGY5LCAweDc3LCAweDQwLCAweDhmLCAweDg1LCAweDRjLCAweGFkLCAweDUxLCAweGM4LAorCTB4OWMsIDB4ZTUsIDB4NzksIDB4MGUsIDB4ZTYsIDB4ZDUsIDB4MWEsIDB4M2QsIDB4OTAsIDB4N2IsIDB4OGYsIDB4ZWEsCisJMHg4YiwgMHhiYywgMHg1YywgMHg4ZSwgMHgzMSwgMHgwNiwgMHhjMSwgMHhkNiwgMHg2MywgMHgxOCwgMHg4YiwgMHhhYiwKKwkweGRmLCAweDY4LCAweGQ1LCAweGRkLCAweDY1LCAweGY4LCAweDc0LCAweDAyLCAweGUzLCAweGQ1LCAweGFlLCAweDQ5LAorCTB4ODUsIDB4NDcsIDB4MmQsIDB4NTksIDB4NzEsIDB4N2YsIDB4YTUsIDB4MTUsIDB4Y2IsIDB4OTcsIDB4YjUsIDB4NTIsCisJMHg3OSwgMHgxOCwgMHg3MywgMHg0NiwgMHhmOSwgMHg1YiwgMHg5ZiwgMHgzZCwgMHhjMCwgMHg0OSwgMHg1MywgMHhkNSwKKwkweDFkLCAweDY5LCAweDRhLCAweDgwLCAweDI2LCAweGJkLCAweDhkLCAweGE2LCAweDA0LCAweGU4LCAweDQxLCAweGNjLAorCTB4M2MsIDB4YzUsIDB4ZGUsIDB4ZjEsIDB4YTgsIDB4OWMsIDB4MjgsIDB4ZjMsIDB4OWQsIDB4MjYsIDB4ZmUsIDB4NDYsCisJMHhkNSwgMHg5MCwgMHgzMCwgMHhiMCwgMHg2NSwgMHhlNCwgMHg5NCwgMHgxOSwgMHg1ZiwgMHg1NywgMHhiZCwgMHgxYSwKKwkweDczLCAweGI4LCAweDJlLCAweDIzLCAweGE5LCAweGJhLCAweGE4LCAweGZjLCAweDkyLCAweDM4LCAweDgxLCAweDdjLAorCTB4ZjUsIDB4ODYsIDB4ZGIsIDB4MjMsIDB4NmYsIDB4ZmEsIDB4N2IsIDB4NWQsIDB4MTQsIDB4OWUsIDB4MzMsIDB4NmUsCisJMHhkZiwgMHhlYiwgMHhjOSwgMHg0YSwgMHgyYSwgMHhmMywgMHg4YSwgMHgxNSwgMHhmMiwgMHhmOSwgMHhlYSwgMHhjMywKKwkweDVlLCAweDdiLCAweDMwLCAweDM3LCAweDk1LCAweDM5LCAweGRmLCAweGQ4LCAweDY5LCAweGFlLCAweDgzLCAweGI5LAorCTB4OTEsIDB4YjYsIDB4YjksIDB4MGUsIDB4ZTYsIDB4ZjUsIDB4MjAsIDB4ZWYsIDB4ZjUsIDB4MjgsIDB4OWUsIDB4NGEsCisJMHhhMCwgMHhlYiwgMHg1MiwgMHg5OSwgMHgzYywgMHhmMSwgMHgwYywgMHg4MiwgMHg3YiwgMHgxYSwgMHhjNCwgMHhjNiwKKwkweDUzLCAweGUyLCAweDlmLCAweGQ5LCAweGYyLCAweGY3LCAweDdhLCAweDU3LCAweGY1LCAweDZiLCAweDk0LCAweDBkLAorCTB4NGMsIDB4NTgsIDB4M2MsIDB4OWIsIDB4OTksIDB4ZDEsIDB4YjIsIDB4ZjUsIDB4M2MsIDB4NzIsIDB4ZDUsIDB4OGQsCisJMHhjNCwgMHg0MywgMHgyOSwgMHgxYiwgMHhiOSwgMHg5MiwgMHhlNywgMHgzYywgMHg4ZCwgMHg3MiwgMHg4MSwgMHhlZiwKKwkweDNkLCAweGMzLCAweDJlLCAweGRlLCAweDIxLCAweDVlLCAweGJlLCAweDMxLCAweGE0LCAweGRlLCAweDQzLCAweDcwLAorCTB4ZmMsIDB4NzMsIDB4MjAsIDB4MzEsIDB4MzIsIDB4NjMsIDB4N2MsIDB4ZjcsIDB4ZTAsIDB4NmUsIDB4YTksIDB4MmYsCisJMHg3ZiwgMHgxMSwgMHg2MywgMHgxOSwgMHhlNCwgMHhjNSwgMHg0MywgMHg1YSwgMHhlNiwgMHhkYywgMHgyNCwgMHhhZSwKKwkweDFmLCAweGMyLCAweDM1LCAweGUyLCAweGYwLCAweDcyLCAweDBlLCAweGY3LCAweDFmLCAweGMyLCAweGY1LCAweGJjLAorCTB4OTYsIDB4NmQsIDB4ZTYsIDB4NzAsIDB4ZmQsIDB4MzAsIDB4YWUsIDB4MjcsIDB4NDgsIDB4OWIsIDB4ZjMsIDB4OGEsCisJMHgzNSwgMHhhNSwgMHhkOSwgMHg1OCwgMHhjYiwgMHgzZSwgMHgzNywgMHg4OSwgMHg0ZiwgMHhmYiwgMHg3YSwgMHhiYywKKwkweDA3LCAweDNkLCAweDk1LCAweDc5LCAweDNlLCAweDk2LCAweDA0LCAweDRkLCAweDBmLCAweDZhLCAweDRlLCAweGJkLAorCTB4MWIsIDB4NmIsIDB4MGMsIDB4ZTEsIDB4NzksIDB4ZGEsIDB4NTQsIDB4ZmIsIDB4MzksIDB4ZDQsIDB4NmQsIDB4YWEsCisJMHg2NywgMHgxNCwgMHg0YSwgMHhhNywgMHg4MSwgMHg3NywgMHgxZiwgMHg0MSwgMHhkZSwgMHhkNywgMHhjNCwgMHhiMSwKKwkweDFlLCAweDk3LCAweDYyLCAweDJhLCAweDJkLCAweDBiLCAweGY1LCAweDkwLCAweDY0LCAweDYzLCAweDA1LCAweDdjLAorCTB4MmYsIDB4NDgsIDB4NjYsIDB4MWMsIDB4ZjcsIDB4ZWIsIDB4YjQsIDB4MDUsIDB4Y2UsIDB4MmIsIDB4NDksIDB4YjEsCisJMHg0YSwgMHhmYywgMHhjZSwgMHg3ZSwgMHhkMSwgMHg1NywgMHhjMCwgMHgzNywgMHhmYiwgMHg0NCwgMHg3OSwgMHhjOCwKKwkweDIwLCAweDQ2LCAweGZiLCAweGRkLCAweGExLCAweGE3LCAweGU1LCAweGJkLCAweGQzLCAweDhjLCAweDdjLCAweGFjLAorCTB4NjUsIDB4ZWEsIDB4ZmUsIDB4NTksIDB4OWQsIDB4YzUsIDB4ZGYsIDB4MmIsIDB4YjEsIDB4NDcsIDB4MjUsIDB4YzUsCisJMHg1MCwgMHg5YSwgMHg3ZCwgMHgwZSwgMHhkNSwgMHgxNywgMHg0ZiwgMHg3OSwgMHg2NywgMHg3YSwgMHhlZCwgMHhlZiwKKwkweDkwLCAweDA0LCAweGZlLCAweGMyLCAweDdkLCAweGJmLCAweDgyLCAweGU3LCAweGJkLCAweGJlLCAweDU0LCAweGI2LAorCTB4ZjksIDB4NDEsIDB4NWQsIDB4ZjAsIDB4NWQsIDB4ZmQsIDB4MTUsIDB4ZTgsIDB4ZTIsIDB4ZmMsIDB4ODcsIDB4ZjYsCisJMHhiOSwgMHhkOCwgMHhlMywgMHg5YSwgMHg0NywgMHgyYywgMHg2MiwgMHg3ZiwgMHgyYywgMHg5MCwgMHhkZiwgMHhkNSwKKwkweDM0LCAweDkyLCAweGJlLCAweGMzLCAweDU4LCAweDRiLCAweDUyLCAweDhjLCAweGIzLCAweGI5LCAweDU4LCAweDQyLAorCTB4ZDUsIDB4YmUsIDB4MWIsIDB4NGIsIDB4ZjIsIDB4YzQsIDB4MTYsIDB4YmQsIDB4YTQsIDB4OTUsIDB4NzIsIDB4NzgsCisJMHgwNCwgMHhmNSwgMHgxYSwgMHg3ZiwgMHhmZiwgMHhmMCwgMHhiOCwgMHhlNCwgMHg1MywgMHhlYywgMHhkMSwgMHg4NCwKKwkweDkwLCAweDBiLCAweDBiLCAweGY4LCAweGJlLCAweDI1LCAweGI3LCAweDkyLCAweDJmLCAweGI3LCAweDdjLCAweGY1LAorCTB4NWIsIDB4NGEsIDB4NzcsIDB4MzUsIDB4OGIsIDB4ZmIsIDB4MDUsIDB4YmQsIDB4OGIsIDB4NjksIDB4YTUsIDB4YjMsCisJMHg5YSwgMHg3YSwgMHhjZiwgMHgzNiwgMHhlMCwgMHgzZCwgMHhlOCwgMHhiZiwgMHhlZCwgMHg2YywgMHg3MywgMHg5MywKKwkweDE2LCAweDY5LCAweGZiLCAweDM4LCAweGRmLCAweDViLCAweDE4LCAweGI2LCAweDg1LCAweGY0LCAweDkzLCAweDBmLAorCTB4ZTYsIDB4YWMsIDB4ZTAsIDB4NWMsIDB4MzQsIDB4ZTAsIDB4MjEsIDB4ZTAsIDB4ZjMsIDB4YTMsIDB4Y2EsIDB4ODUsCisJMHg3NCwgMHhlZSwgMHgzMSwgMHhhNCwgMHg3YiwgMHhjYSwgMHgwOCwgMHg1OSwgMHhjYywgMHgwMSwgMHg5ZiwgMHhmNiwKKwkweGZiLCAweGY4LCAweGZmLCAweDM3LCAweGU1LCAweGVhLCAweGYxLCAweDFlLCAweDg2LCAweGE4LCAweGZjLCAweGRmLAorCTB4OGIsIDB4ZWUsIDB4YTAsIDB4ZjcsIDB4YWIsIDB4Y2YsIDB4ODAsIDB4MGQsIDB4ZTcsIDB4YWMsIDB4YjUsIDB4YzUsCisJMHg2NywgMHg2ZCwgMHgwNywgMHgzZSwgMHg2YiwgMHgzZSwgMHg5ZiwgMHgxZiwgMHg3ZSwgMHg0ZSwgMHhlYSwgMHhkMSwKKwkweDU5LCAweDViLCAweGIyLCAweGMxLCAweDIzLCAweDZkLCAweDZhLCAweDI3LCAweDdiLCAweGUzLCAweDZmLCAweDljLAorCTB4ZDQsIDB4ZWYsIDB4YWQsIDB4YTIsIDB4YjYsIDB4N2IsIDB4YWQsIDB4NWUsIDB4MjcsIDB4ZWIsIDB4NjQsIDB4Y2YsCisJMHhlZSwgMHhjZSwgMHgyMiwgMHhkNywgMHg1NSwgMHhhYiwgMHg1ZSwgMHhjZCwgMHg1YywgMHg3NSwgMHhkOSwgMHg2YiwKKwkweGRlLCAweDY5LCAweDZmLCAweDBkLCAweDM0LCAweGZmLCAweDhlLCAweDdhLCAweGVmLCAweGE0LCAweGU0LCAweDdhLAorCTB4N2QsIDB4YTksIDB4NmEsIDB4YjUsIDB4M2QsIDB4NTcsIDB4ZGUsIDB4YzAsIDB4M2MsIDB4MzksIDB4NWMsIDB4OTAsCisJMHgxOSwgMHhlOCwgMHgzMSwgMHg4OSwgMHhlYiwgMHg5YiwgMHhlNSwgMHhlNSwgMHg2NSwgMHg3NSwgMHg4NiwgMHhlNCwKKwkweDlmLCAweGQ1LCAweGYwLCAweDBjLCAweDQ2LCAweDlkLCAweDQzLCAweDIzLCAweDVlLCAweGNkLCAweGFhLCAweDc4LAorCTB4YmQsIDB4YjEsIDB4YWMsIDB4ZWUsIDB4YTksIDB4ZGYsIDB4M2MsIDB4ZDQsIDB4ZGQsIDB4MTksIDB4YzQsIDB4NzMsCisJMHhkNCwgMHgwNiwgMHhkNiwgMHg2ZSwgMHgyOSwgMHhhMiwgMHg4NiwgMHgzZSwgMHg2YiwgMHhjZCwgMHgxOCwgMHhjNCwKKwkweDI5LCAweDVjLCAweDZiLCAweDAzLCAweDZiLCAweDlkLCAweDVmLCAweDk2LCAweGJkLCAweDdjLCAweGE3LCAweGEzLAorCTB4YWEsIDB4Y2UsIDB4YmQsIDB4YmMsIDB4N2UsIDB4ZjUsIDB4YmMsIDB4MDQsIDB4YmYsIDB4ZDcsIDB4OGQsIDB4ZmEsCisJMHgzOSwgMHg4ZSwgMHhlZiwgMHg5NSwgMHhmMCwgMHhiNywgMHhhNywgMHg4YywgMHgwMSwgMHhhOCwgMHg2YiwgMHg2NiwKKwkweDBhLCAweDU4LCAweGFmLCAweGQ1LCAweGYyLCAweGZhLCAweGQ5LCAweDJkLCAweGQ4LCAweDdkLCAweDg0LCAweGJmLAorCTB4NjUsIDB4YzAsIDB4ZGYsIDB4MjMsIDB4YjAsIDB4MTMsIDB4ZjgsIDB4YzEsIDB4ZTYsIDB4MzgsIDB4YWYsIDB4NTksCisJMHg0YiwgMHgwNCwgMHhkNywgMHg0YywgMHg1OCwgMHhmZiwgMHgxYiwgMHhlZCwgMHhjYywgMHhmYSwgMHhhMSwgMHg5OCwKKwkweDQxLCAweDAwLCAweDAwLCAweDAwIH07CitzdGF0aWMgdTMyIGJueDJfVFhQX2IwOUZ3RGF0YVsoMHhkMC80KSArIDFdID0geworCTB4MDAwMDAwMDAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTAsCisJMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwKKwkweDAwMDA4MDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA4MDAyLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA2LAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH07CitzdGF0aWMgdTMyIGJueDJfVFhQX2IwOUZ3Um9kYXRhWygweDMwLzQpICsgMV0gPSB7CisJMHgwODAwM2JlOCwgMHgwODAwM2MxNCwgMHgwODAwM2M1YywgMHgwODAwM2M1YywgMHgwODAwM2FlOCwgMHgwODAwM2IxNCwKKwkweDA4MDAzYjE0LCAweDA4MDAzYzVjLCAweDA4MDAzYzVjLCAweDA4MDAzYzVjLCAweDA4MDAzYjdjLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAgfTsKK3N0YXRpYyB1MzIgYm54Ml9UWFBfYjA5RndCc3NbKDB4YTIwLzQpICsgMV0gPSB7IDB4MCB9Oworc3RhdGljIHUzMiBibngyX1RYUF9iMDlGd1Nic3NbKDB4ODAvNCkgKyAxXSA9IHsgMHgwIH07CisKK3N0YXRpYyBzdHJ1Y3QgZndfaW5mbyBibngyX3R4cF9md18wOSA9IHsKKwkudmVyX21ham9yCQkJPSAweDEsCisJLnZlcl9taW5vcgkJCT0gMHgwLAorCS52ZXJfZml4CQkJPSAweDAsCisKKwkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMDA2MCwKKworCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDAwMDAsCisJLnRleHRfbGVuCQkJPSAweDQxOTQsCisJLnRleHRfaW5kZXgJCQk9IDB4MCwKKwkuZ3pfdGV4dAkJCT0gYm54Ml9UWFBfYjA5RndUZXh0LAorCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfVFhQX2IwOUZ3VGV4dCksCisKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDA0MWUwLAorCS5kYXRhX2xlbgkJCT0gMHhkMCwKKwkuZGF0YV9pbmRleAkJCT0gMHgwLAorCS5kYXRhCQkJCT0gYm54Ml9UWFBfYjA5RndEYXRhLAorCisJLnNic3NfYWRkcgkJCT0gMHgwODAwNDJiMCwKKwkuc2Jzc19sZW4JCQk9IDB4ODAsCisJLnNic3NfaW5kZXgJCQk9IDB4MCwKKwkuc2JzcwkJCQk9IGJueDJfVFhQX2IwOUZ3U2JzcywKKworCS5ic3NfYWRkcgkJCT0gMHgwODAwNDMzMCwKKwkuYnNzX2xlbgkJCT0gMHhhMjAsCisJLmJzc19pbmRleAkJCT0gMHgwLAorCS5ic3MJCQkJPSBibngyX1RYUF9iMDlGd0JzcywKKworCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNDE5OCwKKwkucm9kYXRhX2xlbgkJCT0gMHgzMCwKKwkucm9kYXRhX2luZGV4CQkJPSAweDAsCisJLnJvZGF0YQkJCQk9IGJueDJfVFhQX2IwOUZ3Um9kYXRhLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggMTdhNDYxMS4uNDg4ZDhlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0xMzM2LDYgKzEzMzYsMTMgQEAKIAkJZ290byBlcnJfdW5kb19mbGFnczsKIAl9CiAKKwlpZiAoc2xhdmVfZGV2LT5nZXRfc3RhdHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgRFJWX05BTUUKKwkJCSI6ICVzOiB0aGUgZHJpdmVyIGZvciBzbGF2ZSBkZXZpY2UgJXMgZG9lcyBub3QgcHJvdmlkZSAiCisJCQkiZ2V0X3N0YXRzIGZ1bmN0aW9uLCBuZXR3b3JrIHN0YXRpc3RpY3Mgd2lsbCBiZSAiCisJCQkiaW5hY2N1cmF0ZS5cbiIsIGJvbmRfZGV2LT5uYW1lLCBzbGF2ZV9kZXYtPm5hbWUpOworCX0KKwogCW5ld19zbGF2ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGF2ZSksIEdGUF9LRVJORUwpOwogCWlmICghbmV3X3NsYXZlKSB7CiAJCXJlcyA9IC1FTk9NRU07CkBAIC0zNjA1LDMzICszNjEyLDM1IEBACiAJcmVhZF9sb2NrX2JoKCZib25kLT5sb2NrKTsKIAogCWJvbmRfZm9yX2VhY2hfc2xhdmUoYm9uZCwgc2xhdmUsIGkpIHsKLQkJc3N0YXRzID0gc2xhdmUtPmRldi0+Z2V0X3N0YXRzKHNsYXZlLT5kZXYpOworCQlpZiAoc2xhdmUtPmRldi0+Z2V0X3N0YXRzKSB7CisJCQlzc3RhdHMgPSBzbGF2ZS0+ZGV2LT5nZXRfc3RhdHMoc2xhdmUtPmRldik7CiAKLQkJc3RhdHMtPnJ4X3BhY2tldHMgKz0gc3N0YXRzLT5yeF9wYWNrZXRzOwotCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc3N0YXRzLT5yeF9ieXRlczsKLQkJc3RhdHMtPnJ4X2Vycm9ycyArPSBzc3RhdHMtPnJ4X2Vycm9yczsKLQkJc3RhdHMtPnJ4X2Ryb3BwZWQgKz0gc3N0YXRzLT5yeF9kcm9wcGVkOworCQkJc3RhdHMtPnJ4X3BhY2tldHMgKz0gc3N0YXRzLT5yeF9wYWNrZXRzOworCQkJc3RhdHMtPnJ4X2J5dGVzICs9IHNzdGF0cy0+cnhfYnl0ZXM7CisJCQlzdGF0cy0+cnhfZXJyb3JzICs9IHNzdGF0cy0+cnhfZXJyb3JzOworCQkJc3RhdHMtPnJ4X2Ryb3BwZWQgKz0gc3N0YXRzLT5yeF9kcm9wcGVkOwogCi0JCXN0YXRzLT50eF9wYWNrZXRzICs9IHNzdGF0cy0+dHhfcGFja2V0czsKLQkJc3RhdHMtPnR4X2J5dGVzICs9IHNzdGF0cy0+dHhfYnl0ZXM7Ci0JCXN0YXRzLT50eF9lcnJvcnMgKz0gc3N0YXRzLT50eF9lcnJvcnM7Ci0JCXN0YXRzLT50eF9kcm9wcGVkICs9IHNzdGF0cy0+dHhfZHJvcHBlZDsKKwkJCXN0YXRzLT50eF9wYWNrZXRzICs9IHNzdGF0cy0+dHhfcGFja2V0czsKKwkJCXN0YXRzLT50eF9ieXRlcyArPSBzc3RhdHMtPnR4X2J5dGVzOworCQkJc3RhdHMtPnR4X2Vycm9ycyArPSBzc3RhdHMtPnR4X2Vycm9yczsKKwkJCXN0YXRzLT50eF9kcm9wcGVkICs9IHNzdGF0cy0+dHhfZHJvcHBlZDsKIAotCQlzdGF0cy0+bXVsdGljYXN0ICs9IHNzdGF0cy0+bXVsdGljYXN0OwotCQlzdGF0cy0+Y29sbGlzaW9ucyArPSBzc3RhdHMtPmNvbGxpc2lvbnM7CisJCQlzdGF0cy0+bXVsdGljYXN0ICs9IHNzdGF0cy0+bXVsdGljYXN0OworCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gc3N0YXRzLT5jb2xsaXNpb25zOwogCi0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzICs9IHNzdGF0cy0+cnhfbGVuZ3RoX2Vycm9yczsKLQkJc3RhdHMtPnJ4X292ZXJfZXJyb3JzICs9IHNzdGF0cy0+cnhfb3Zlcl9lcnJvcnM7Ci0JCXN0YXRzLT5yeF9jcmNfZXJyb3JzICs9IHNzdGF0cy0+cnhfY3JjX2Vycm9yczsKLQkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyArPSBzc3RhdHMtPnJ4X2ZyYW1lX2Vycm9yczsKLQkJc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzICs9IHNzdGF0cy0+cnhfZmlmb19lcnJvcnM7Ci0JCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IHNzdGF0cy0+cnhfbWlzc2VkX2Vycm9yczsKKwkJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzICs9IHNzdGF0cy0+cnhfbGVuZ3RoX2Vycm9yczsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSBzc3RhdHMtPnJ4X292ZXJfZXJyb3JzOworCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMgKz0gc3N0YXRzLT5yeF9jcmNfZXJyb3JzOworCQkJc3RhdHMtPnJ4X2ZyYW1lX2Vycm9ycyArPSBzc3RhdHMtPnJ4X2ZyYW1lX2Vycm9yczsKKwkJCXN0YXRzLT5yeF9maWZvX2Vycm9ycyArPSBzc3RhdHMtPnJ4X2ZpZm9fZXJyb3JzOworCQkJc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgKz0gc3N0YXRzLT5yeF9taXNzZWRfZXJyb3JzOwogCi0JCXN0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArPSBzc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzOwotCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgKz0gc3N0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKLQkJc3RhdHMtPnR4X2ZpZm9fZXJyb3JzICs9IHNzdGF0cy0+dHhfZmlmb19lcnJvcnM7Ci0JCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzICs9IHNzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9yczsKLQkJc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgKz0gc3N0YXRzLT50eF93aW5kb3dfZXJyb3JzOworCQkJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICs9IHNzdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnM7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgKz0gc3N0YXRzLT50eF9jYXJyaWVyX2Vycm9yczsKKwkJCXN0YXRzLT50eF9maWZvX2Vycm9ycyArPSBzc3RhdHMtPnR4X2ZpZm9fZXJyb3JzOworCQkJc3RhdHMtPnR4X2hlYXJ0YmVhdF9lcnJvcnMgKz0gc3N0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzOworCQkJc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgKz0gc3N0YXRzLT50eF93aW5kb3dfZXJyb3JzOworCQl9CiAJfQogCiAJcmVhZF91bmxvY2tfYmgoJmJvbmQtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IDUyMWM1YjcuLmZkMmNjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTI4MjUsNyArMjgyNSw3IEBACiAJCXU2NCBjc3VtX3N0YXJ0X29mZiwgY3N1bV9zdHVmZl9vZmY7CiAKIAkJY3N1bV9zdGFydF9vZmYgPSAodTY0KSAoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSk7Ci0JCWNzdW1fc3R1ZmZfb2ZmID0gKHU2NCkgKChza2ItPmgucmF3ICsgc2tiLT5jc3VtKSAtIHNrYi0+ZGF0YSk7CisJCWNzdW1fc3R1ZmZfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItPmNzdW1fb2Zmc2V0OwogCiAJCWN0cmwgPSAgVFhfREVTQ19DU1VNX0VOIHwKIAkJCUNBU19CQVNFKFRYX0RFU0NfQ1NVTV9TVEFSVCwgY3N1bV9zdGFydF9vZmYpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jaGVsc2lvL01ha2VmaWxlCmluZGV4IDU0Yzc4ZDkuLjM4MmQyM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9NYWtlZmlsZQpAQCAtMSwxMSArMSwxMSBAQAogIwotIyBDaGVsc2lvIDEwR2IgTklDIGRyaXZlciBmb3IgTGludXguCisjIENoZWxzaW8gVDEgZHJpdmVyCiAjCiAKIG9iai0kKENPTkZJR19DSEVMU0lPX1QxKSArPSBjeGdiLm8KIAotRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9uZXQvY2hlbHNpbyAkKERFQlVHX0ZMQUdTKQorY3hnYi0kKENPTkZJR19DSEVMU0lPX1QxXzFHKSArPSBpeGYxMDEwLm8gbWFjLm8gbXY4OGUxeHh4Lm8gdnNjNzMyNi5vIHZzYzgyNDQubworY3hnYi1vYmpzIDo9IGN4Z2IyLm8gZXNwaS5vIHRwLm8gcG0zMzkzLm8gc2dlLm8gc3Vici5vIFwKKwkgICAgIG12ODh4MjAxeC5vIG15MzEyNi5vICQoY3hnYi15KQogCiAKLWN4Z2Itb2JqcyA6PSBjeGdiMi5vIGVzcGkubyBwbTMzOTMubyBzZ2UubyBzdWJyLm8gbXY4OHgyMDF4Lm8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKaW5kZXggNWQ5ZGQxNC4uYjI2NTk0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNTMsMTMgKzU0LDMwIEBACiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OICJDaGVsc2lvIDEwR2IgRXRoZXJuZXQgRHJpdmVyIgogI2RlZmluZSBEUlZfTkFNRSAiY3hnYiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMS4xIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4yIgogI2RlZmluZSBQRlggICAgICBEUlZfTkFNRSAiOiAiCiAKICNkZWZpbmUgQ0hfRVJSKGZtdCwgLi4uKSAgIHByaW50ayhLRVJOX0VSUiBQRlggZm10LCAjIyBfX1ZBX0FSR1NfXykKICNkZWZpbmUgQ0hfV0FSTihmbXQsIC4uLikgIHByaW50ayhLRVJOX1dBUk5JTkcgUEZYIGZtdCwgIyMgX19WQV9BUkdTX18pCiAjZGVmaW5lIENIX0FMRVJUKGZtdCwgLi4uKSBwcmludGsoS0VSTl9BTEVSVCBQRlggZm10LCAjIyBfX1ZBX0FSR1NfXykKIAorLyoKKyAqIE1vcmUgcG93ZXJmdWwgbWFjcm8gdGhhdCBzZWxlY3RpdmVseSBwcmludHMgbWVzc2FnZXMgYmFzZWQgb24gbXNnX2VuYWJsZS4KKyAqIEZvciBpbmZvIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisgKi8KKyNkZWZpbmUgQ0hfTVNHKGFkYXB0ZXIsIGxldmVsLCBjYXRlZ29yeSwgZm10LCAuLi4pIGRvIHsgXAorCWlmICgoYWRhcHRlciktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfIyNjYXRlZ29yeSkgXAorCQlwcmludGsoS0VSTl8jI2xldmVsIFBGWCAiJXM6ICIgZm10LCAoYWRhcHRlciktPm5hbWUsIFwKKwkJICAgICAgICMjIF9fVkFfQVJHU19fKTsgXAorfSB3aGlsZSAoMCkKKworI2lmZGVmIERFQlVHCisjIGRlZmluZSBDSF9EQkcoYWRhcHRlciwgY2F0ZWdvcnksIGZtdCwgLi4uKSBcCisJQ0hfTVNHKGFkYXB0ZXIsIERFQlVHLCBjYXRlZ29yeSwgZm10LCAjIyBfX1ZBX0FSR1NfXykKKyNlbHNlCisjIGRlZmluZSBDSF9EQkcoZm10LCAuLi4pCisjZW5kaWYKKwogI2RlZmluZSBDSF9ERVZJQ0UoZGV2aWQsIHNzaWQsIGlkeCkgXAogCXsgUENJX1ZFTkRPUl9JRF9DSEVMU0lPLCBkZXZpZCwgUENJX0FOWV9JRCwgc3NpZCwgMCwgMCwgaWR4IH0KIApAQCAtNzEsMTAgKzg5LDYgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgYWRhcHRlciBhZGFwdGVyX3Q7CiAKLXZvaWQgdDFfZWxtZXIwX2V4dF9pbnRyKGFkYXB0ZXJfdCAqYWRhcHRlcik7Ci12b2lkIHQxX2xpbmtfY2hhbmdlZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0dXMsCi0JCQlpbnQgc3BlZWQsIGludCBkdXBsZXgsIGludCBmYyk7Ci0KIHN0cnVjdCB0MV9yeF9tb2RlIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXUzMiBpZHg7CkBAIC05NywyNiArMTExLDUzIEBACiB9CiAKICNkZWZpbmUJTUFYX05QT1JUUyA0CisjZGVmaW5lIFBPUlRfTUFTSyAoKDEgPDwgTUFYX05QT1JUUykgLSAxKQorI2RlZmluZSBOTVRVUyAgICAgIDgKKyNkZWZpbmUgVENCX1NJWkUgICAxMjgKIAogI2RlZmluZSBTUEVFRF9JTlZBTElEIDB4ZmZmZgogI2RlZmluZSBEVVBMRVhfSU5WQUxJRCAweGZmCiAKIGVudW0gewogCUNIQlRfQk9BUkRfTjExMCwKLQlDSEJUX0JPQVJEX04yMTAKKwlDSEJUX0JPQVJEX04yMTAsCisJQ0hCVF9CT0FSRF83NTAwLAorCUNIQlRfQk9BUkRfODAwMCwKKwlDSEJUX0JPQVJEX0NIVDEwMSwKKwlDSEJUX0JPQVJEX0NIVDExMCwKKwlDSEJUX0JPQVJEX0NIVDIxMCwKKwlDSEJUX0JPQVJEX0NIVDIwNCwKKwlDSEJUX0JPQVJEX0NIVDIwNFYsCisJQ0hCVF9CT0FSRF9DSFQyMDRFLAorCUNIQlRfQk9BUkRfQ0hOMjA0LAorCUNIQlRfQk9BUkRfQ09VR0FSLAorCUNIQlRfQk9BUkRfNjgwMCwKKwlDSEJUX0JPQVJEX1NJTVVMLAogfTsKIAogZW51bSB7CisJQ0hCVF9URVJNX0ZQR0EsCiAJQ0hCVF9URVJNX1QxLAotCUNIQlRfVEVSTV9UMgorCUNIQlRfVEVSTV9UMiwKKwlDSEJUX1RFUk1fVDMKIH07CiAKIGVudW0geworCUNIQlRfTUFDX0NIRUxTSU9fQSwKKwlDSEJUX01BQ19JWEYxMDEwLAogCUNIQlRfTUFDX1BNMzM5MywKKwlDSEJUX01BQ19WU0M3MzIxLAorCUNIQlRfTUFDX0RVTU1ZCiB9OwogCiBlbnVtIHsKKwlDSEJUX1BIWV84OEUxMDQxLAorCUNIQlRfUEhZXzg4RTExMTEsCiAJQ0hCVF9QSFlfODhYMjAxMCwKKwlDSEJUX1BIWV9YUEFLLAorCUNIQlRfUEhZX01ZMzEyNiwKKwlDSEJUX1BIWV84MjQ0LAorCUNIQlRfUEhZX0RVTU1ZCiB9OwogCiBlbnVtIHsKQEAgLTE1MCwxNiArMTkxLDQ0IEBACiAJdW5zaWduZWQgY2hhciAgaXNfcGNpeDsKIH07CiAKK3N0cnVjdCB0cF9wYXJhbXMgeworCXVuc2lnbmVkIGludCBwbV9zaXplOworCXVuc2lnbmVkIGludCBjbV9zaXplOworCXVuc2lnbmVkIGludCBwbV9yeF9iYXNlOworCXVuc2lnbmVkIGludCBwbV90eF9iYXNlOworCXVuc2lnbmVkIGludCBwbV9yeF9wZ19zaXplOworCXVuc2lnbmVkIGludCBwbV90eF9wZ19zaXplOworCXVuc2lnbmVkIGludCBwbV9yeF9udW1fcGdzOworCXVuc2lnbmVkIGludCBwbV90eF9udW1fcGdzOworCXVuc2lnbmVkIGludCByeF9jb2FsZXNjaW5nX3NpemU7CisJdW5zaWduZWQgaW50IHVzZV81dHVwbGVfbW9kZTsKK307CisKK3N0cnVjdCBtYzVfcGFyYW1zIHsKKwl1bnNpZ25lZCBpbnQgbW9kZTsgICAgICAgLyogc2VsZWN0cyBNQzUgd2lkdGggKi8KKwl1bnNpZ25lZCBpbnQgbnNlcnZlcnM7ICAgLyogc2l6ZSBvZiBzZXJ2ZXIgcmVnaW9uICovCisJdW5zaWduZWQgaW50IG5yb3V0ZXM7ICAgIC8qIHNpemUgb2Ygcm91dGluZyByZWdpb24gKi8KK307CisKKy8qIERlZmF1bHQgTUM1IHJlZ2lvbiBzaXplcyAqLworI2RlZmluZSBERUZBVUxUX1NFUlZFUl9SRUdJT05fTEVOIDI1NgorI2RlZmluZSBERUZBVUxUX1JUX1JFR0lPTl9MRU4gMTAyNAorCiBzdHJ1Y3QgYWRhcHRlcl9wYXJhbXMgewogCXN0cnVjdCBzZ2VfcGFyYW1zIHNnZTsKKwlzdHJ1Y3QgbWM1X3BhcmFtcyBtYzU7CisJc3RydWN0IHRwX3BhcmFtcyAgdHA7CiAJc3RydWN0IGNoZWxzaW9fcGNpX3BhcmFtcyBwY2k7CiAKIAljb25zdCBzdHJ1Y3QgYm9hcmRfaW5mbyAqYnJkX2luZm87CiAKKwl1bnNpZ25lZCBzaG9ydCBtdHVzW05NVFVTXTsKIAl1bnNpZ25lZCBpbnQgICBucG9ydHM7ICAgICAgICAgIC8qICMgb2YgZXRoZXJuZXQgcG9ydHMgKi8KIAl1bnNpZ25lZCBpbnQgICBzdGF0c191cGRhdGVfcGVyaW9kOwogCXVuc2lnbmVkIHNob3J0IGNoaXBfcmV2aXNpb247CiAJdW5zaWduZWQgY2hhciAgY2hpcF92ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgIGlzX2FzaWM7CisJdW5zaWduZWQgY2hhciAgaGFzX21zaTsKIH07CiAKIHN0cnVjdCBsaW5rX2NvbmZpZyB7CkBAIC0yMDcsMTcgKzI3NiwyMCBAQAogCS8qIFRlcm1pbmF0b3IgbW9kdWxlcy4gKi8KIAlzdHJ1Y3Qgc2dlICAgICpzZ2U7CiAJc3RydWN0IHBlZXNwaSAqZXNwaTsKKwlzdHJ1Y3QgcGV0cCAgICp0cDsKIAogCXN0cnVjdCBwb3J0X2luZm8gcG9ydFtNQVhfTlBPUlRTXTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhdHNfdXBkYXRlX3Rhc2s7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdHNfdXBkYXRlX3RpbWVyOwogCi0Jc3RydWN0IHNlbWFwaG9yZSBtaWJfbXV0ZXg7CiAJc3BpbmxvY2tfdCB0cGlfbG9jazsKIAlzcGlubG9ja190IHdvcmtfbG9jazsKKwlzcGlubG9ja190IG1hY19sb2NrOworCiAJLyogZ3VhcmRzIGFzeW5jIG9wZXJhdGlvbnMgKi8KIAlzcGlubG9ja190IGFzeW5jX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCXUzMiBzbG93X2ludHJfbWFzazsKKwlpbnQgdDFwb3dlcnNhdmU7CiB9OwogCiBlbnVtIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRhcHRlciBmbGFncyAqLwpAQCAtMjU2LDYgKzMyOCwxMSBAQAogCWNvbnN0IGNoYXIgICAgICAgICAgICAgKmRlc2M7CiB9OwogCitzdGF0aWMgaW5saW5lIGludCB0MV9pc19hc2ljKGNvbnN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlyZXR1cm4gYWRhcHRlci0+cGFyYW1zLmlzX2FzaWM7Cit9CisKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0MV9wY2lfdGJsW107CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFkYXB0ZXJfbWF0Y2hlc190eXBlKGNvbnN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKQEAgLTI4NSwxMyArMzYyLDE1IEBACiAJcmV0dXJuIGJvYXJkX2luZm8oYWRhcCktPmNsb2NrX2NvcmUgLyAxMDAwMDAwOwogfQogCitleHRlcm4gaW50IF9fdDFfdHBpX3JlYWQoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyICp2YWxwKTsKK2V4dGVybiBpbnQgX190MV90cGlfd3JpdGUoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIHZhbHVlKTsKIGV4dGVybiBpbnQgdDFfdHBpX3dyaXRlKGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiB2YWx1ZSk7CiBleHRlcm4gaW50IHQxX3RwaV9yZWFkKGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiAqdmFsdWUpOwogCiBleHRlcm4gdm9pZCB0MV9pbnRlcnJ1cHRzX2VuYWJsZShhZGFwdGVyX3QgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgdDFfaW50ZXJydXB0c19kaXNhYmxlKGFkYXB0ZXJfdCAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCB0MV9pbnRlcnJ1cHRzX2NsZWFyKGFkYXB0ZXJfdCAqYWRhcHRlcik7Ci1leHRlcm4gaW50IGVsbWVyMF9leHRfaW50cl9oYW5kbGVyKGFkYXB0ZXJfdCAqYWRhcHRlcik7CitleHRlcm4gaW50IHQxX2VsbWVyMF9leHRfaW50cl9oYW5kbGVyKGFkYXB0ZXJfdCAqYWRhcHRlcik7CiBleHRlcm4gaW50IHQxX3Nsb3dfaW50cl9oYW5kbGVyKGFkYXB0ZXJfdCAqYWRhcHRlcik7CiAKIGV4dGVybiBpbnQgdDFfbGlua19zdGFydChzdHJ1Y3QgY3BoeSAqcGh5LCBzdHJ1Y3QgY21hYyAqbWFjLCBzdHJ1Y3QgbGlua19jb25maWcgKmxjKTsKQEAgLTMwNSw5ICszODQsNyBAQAogZXh0ZXJuIGludCB0MV9pbml0X3N3X21vZHVsZXMoYWRhcHRlcl90ICphZGFwdGVyLCBjb25zdCBzdHJ1Y3QgYm9hcmRfaW5mbyAqYmkpOwogZXh0ZXJuIHZvaWQgdDFfZnJlZV9zd19tb2R1bGVzKGFkYXB0ZXJfdCAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCB0MV9mYXRhbF9lcnIoYWRhcHRlcl90ICphZGFwdGVyKTsKLQotZXh0ZXJuIHZvaWQgdDFfdHBfc2V0X3VkcF9jaGVja3N1bV9vZmZsb2FkKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IGVuYWJsZSk7Ci1leHRlcm4gdm9pZCB0MV90cF9zZXRfdGNwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKLWV4dGVybiB2b2lkIHQxX3RwX3NldF9pcF9jaGVja3N1bV9vZmZsb2FkKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IGVuYWJsZSk7Ci0KK2V4dGVybiB2b2lkIHQxX2xpbmtfY2hhbmdlZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKK2V4dGVybiB2b2lkIHQxX2xpbmtfbmVnb3RpYXRlZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0LAorCQkJICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgaW50IHBhdXNlKTsKICNlbmRpZiAvKiBfQ1hHQl9DT01NT05fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3BoeS5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jcGh5LmgKaW5kZXggMzQxMjM0Mi4uNjA5MDFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jcGh5LmgKQEAgLTUyLDcgKzUyLDE0IEBACiAvKiBQSFkgaW50ZXJydXB0IHR5cGVzICovCiBlbnVtIHsKIAljcGh5X2NhdXNlX2xpbmtfY2hhbmdlID0gMHgxLAotCWNwaHlfY2F1c2VfZXJyb3IgPSAweDIKKwljcGh5X2NhdXNlX2Vycm9yID0gMHgyLAorCWNwaHlfY2F1c2VfZmlmb19lcnJvciA9IDB4MworfTsKKworZW51bSB7CisJUEhZX0xJTktfVVAgPSAweDEsCisJUEhZX0FVVE9ORUdfUkRZID0gMHgyLAorCVBIWV9BVVRPTkVHX0VOID0gMHg0CiB9OwogCiBzdHJ1Y3QgY3BoeTsKQEAgLTgxLDcgKzg4LDE4IEBACiAvKiBBIFBIWSBpbnN0YW5jZSAqLwogc3RydWN0IGNwaHkgewogCWludCBhZGRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQSFkgYWRkcmVzcyAqLworCWludCBzdGF0ZTsJLyogTGluayBzdGF0dXMgc3RhdGUgbWFjaGluZSAqLwogCWFkYXB0ZXJfdCAqYWRhcHRlcjsgICAgICAgICAgICAgICAgICAvKiBhc3NvY2lhdGVkIGFkYXB0ZXIgKi8KKworCXN0cnVjdCB3b3JrX3N0cnVjdCBwaHlfdXBkYXRlOworCisJdTE2IGJtc3I7CisJaW50IGNvdW50OworCWludCBhY3RfY291bnQ7CisJaW50IGFjdF9vbjsKKworCXUzMiBlbG1lcl9ncG87CisKIAlzdHJ1Y3QgY3BoeV9vcHMgKm9wczsgICAgICAgICAgICAgICAgLyogUEhZIG9wZXJhdGlvbnMgKi8KIAlpbnQgKCptZGlvX3JlYWQpKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IHBoeV9hZGRyLCBpbnQgbW1kX2FkZHIsCiAJCQkgaW50IHJlZ19hZGRyLCB1bnNpZ25lZCBpbnQgKnZhbCk7CkBAIC0xNDIsNiArMTYwLDEwIEBACiAJaW50ICgqcmVzZXQpKGFkYXB0ZXJfdCAqYWRhcHRlcik7CiB9OwogCitleHRlcm4gc3RydWN0IGdwaHkgdDFfbXkzMTI2X29wczsKK2V4dGVybiBzdHJ1Y3QgZ3BoeSB0MV9tdjg4ZTF4eHhfb3BzOworZXh0ZXJuIHN0cnVjdCBncGh5IHQxX3ZzYzgyNDRfb3BzOworZXh0ZXJuIHN0cnVjdCBncGh5IHQxX3hwYWtfb3BzOwogZXh0ZXJuIHN0cnVjdCBncGh5IHQxX212ODh4MjAxeF9vcHM7CiBleHRlcm4gc3RydWN0IGdwaHkgdDFfZHVtbXlfcGh5X29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jcGw1X2NtZC5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jcGw1X2NtZC5oCmluZGV4IDViMzU3ZDkuLjM1ZjU2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3BsNV9jbWQuaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2NwbDVfY21kLmgKQEAgLTQ2LDI0ICs0NiwzODUgQEAKICNlbmRpZgogCiBlbnVtIENQTF9vcGNvZGUgeworCUNQTF9QQVNTX09QRU5fUkVRICAgICA9IDB4MSwKKwlDUExfUEFTU19PUEVOX1JQTCAgICAgPSAweDIsCisJQ1BMX1BBU1NfRVNUQUJMSVNIICAgID0gMHgzLAorCUNQTF9QQVNTX0FDQ0VQVF9SRVEgICA9IDB4RSwKKwlDUExfUEFTU19BQ0NFUFRfUlBMICAgPSAweDQsCisJQ1BMX0FDVF9PUEVOX1JFUSAgICAgID0gMHg1LAorCUNQTF9BQ1RfT1BFTl9SUEwgICAgICA9IDB4NiwKKwlDUExfQ0xPU0VfQ09OX1JFUSAgICAgPSAweDcsCisJQ1BMX0NMT1NFX0NPTl9SUEwgICAgID0gMHg4LAorCUNQTF9DTE9TRV9MSVNUU1JWX1JFUSA9IDB4OSwKKwlDUExfQ0xPU0VfTElTVFNSVl9SUEwgPSAweEEsCisJQ1BMX0FCT1JUX1JFUSAgICAgICAgID0gMHhCLAorCUNQTF9BQk9SVF9SUEwgICAgICAgICA9IDB4QywKKwlDUExfUEVFUl9DTE9TRSAgICAgICAgPSAweEQsCisJQ1BMX0FDVF9FU1RBQkxJU0ggICAgID0gMHgxNywKKworCUNQTF9HRVRfVENCICAgICAgICAgICA9IDB4MjQsCisJQ1BMX0dFVF9UQ0JfUlBMICAgICAgID0gMHgyNSwKKwlDUExfU0VUX1RDQiAgICAgICAgICAgPSAweDI2LAorCUNQTF9TRVRfVENCX0ZJRUxEICAgICA9IDB4MjcsCisJQ1BMX1NFVF9UQ0JfUlBMICAgICAgID0gMHgyOCwKKwlDUExfUENNRCAgICAgICAgICAgICAgPSAweDI5LAorCisJQ1BMX1BDTURfUkVBRCAgICAgICAgID0gMHgzMSwKKwlDUExfUENNRF9SRUFEX1JQTCAgICAgPSAweDMyLAorCisKKwlDUExfUlhfREFUQSAgICAgICAgICAgPSAweEEwLAorCUNQTF9SWF9EQVRBX0REUCAgICAgICA9IDB4QTEsCisJQ1BMX1JYX0RBVEFfQUNLICAgICAgID0gMHhBMywKIAlDUExfUlhfUEtUICAgICAgICAgICAgPSAweEFELAorCUNQTF9SWF9JU0NTSV9IRFIgICAgICA9IDB4QUYsCisJQ1BMX1RYX0RBVEFfQUNLICAgICAgID0gMHhCMCwKKwlDUExfVFhfREFUQSAgICAgICAgICAgPSAweEIxLAogCUNQTF9UWF9QS1QgICAgICAgICAgICA9IDB4QjIsCiAJQ1BMX1RYX1BLVF9MU08gICAgICAgID0gMHhCNiwKKworCUNQTF9SVEVfREVMRVRFX1JFUSAgICA9IDB4QzAsCisJQ1BMX1JURV9ERUxFVEVfUlBMICAgID0gMHhDMSwKKwlDUExfUlRFX1dSSVRFX1JFUSAgICAgPSAweEMyLAorCUNQTF9SVEVfV1JJVEVfUlBMICAgICA9IDB4RDMsCisJQ1BMX1JURV9SRUFEX1JFUSAgICAgID0gMHhDMywKKwlDUExfUlRFX1JFQURfUlBMICAgICAgPSAweEM0LAorCUNQTF9MMlRfV1JJVEVfUkVRICAgICA9IDB4QzUsCisJQ1BMX0wyVF9XUklURV9SUEwgICAgID0gMHhENCwKKwlDUExfTDJUX1JFQURfUkVRICAgICAgPSAweEM2LAorCUNQTF9MMlRfUkVBRF9SUEwgICAgICA9IDB4QzcsCisJQ1BMX1NNVF9XUklURV9SRVEgICAgID0gMHhDOCwKKwlDUExfU01UX1dSSVRFX1JQTCAgICAgPSAweEQ1LAorCUNQTF9TTVRfUkVBRF9SRVEgICAgICA9IDB4QzksCisJQ1BMX1NNVF9SRUFEX1JQTCAgICAgID0gMHhDQSwKKwlDUExfQVJQX01JU1NfUkVRICAgICAgPSAweENELAorCUNQTF9BUlBfTUlTU19SUEwgICAgICA9IDB4Q0UsCisJQ1BMX01JR1JBVEVfQzJUX1JFUSAgID0gMHhEQywKKwlDUExfTUlHUkFURV9DMlRfUlBMICAgPSAweERELAorCUNQTF9FUlJPUiAgICAgICAgICAgICA9IDB4RDcsCisKKyAgICAvKiBpbnRlcm5hbDogZHJpdmVyIC0+IFRPTSAqLworCUNQTF9NU1NfQ0hBTkdFICAgICAgICA9IDB4RTEKIH07CiAKLWVudW0geyAgICAgICAgICAgICAgICAvKiBUWF9QS1RfTFNPIGV0aGVybmV0IHR5cGVzICovCisjZGVmaW5lIE5VTV9DUExfQ01EUyAyNTYKKworZW51bSBDUExfZXJyb3IgeworCUNQTF9FUlJfTk9ORSAgICAgICAgICAgICAgID0gMCwKKwlDUExfRVJSX1RDQU1fUEFSSVRZICAgICAgICA9IDEsCisJQ1BMX0VSUl9UQ0FNX0ZVTEwgICAgICAgICAgPSAzLAorCUNQTF9FUlJfQ09OTl9SRVNFVCAgICAgICAgID0gMjAsCisJQ1BMX0VSUl9DT05OX0VYSVNUICAgICAgICAgPSAyMiwKKwlDUExfRVJSX0FSUF9NSVNTICAgICAgICAgICA9IDIzLAorCUNQTF9FUlJfQkFEX1NZTiAgICAgICAgICAgID0gMjQsCisJQ1BMX0VSUl9DT05OX1RJTUVET1VUICAgICAgPSAzMCwKKwlDUExfRVJSX1hNSVRfVElNRURPVVQgICAgICA9IDMxLAorCUNQTF9FUlJfUEVSU0lTVF9USU1FRE9VVCAgID0gMzIsCisJQ1BMX0VSUl9GSU5XQUlUMl9USU1FRE9VVCAgPSAzMywKKwlDUExfRVJSX0tFRVBBTElWRV9USU1FRE9VVCA9IDM0LAorCUNQTF9FUlJfQUJPUlRfRkFJTEVEICAgICAgID0gNDIsCisJQ1BMX0VSUl9HRU5FUkFMICAgICAgICAgICAgPSA5OQorfTsKKworZW51bSB7CisJQ1BMX0NPTk5fUE9MSUNZX0FVVE8gPSAwLAorCUNQTF9DT05OX1BPTElDWV9BU0sgID0gMSwKKwlDUExfQ09OTl9QT0xJQ1lfREVOWSA9IDMKK307CisKK2VudW0geworCVVMUF9NT0RFX05PTkUgICA9IDAsCisJVUxQX01PREVfVENQRERQID0gMSwKKwlVTFBfTU9ERV9JU0NTSSAgPSAyLAorCVVMUF9NT0RFX0lXQVJQICA9IDMsCisJVUxQX01PREVfU1NMICAgID0gNAorfTsKKworZW51bSB7CisJQ1BMX1BBU1NfT1BFTl9BQ0NFUFQsCisJQ1BMX1BBU1NfT1BFTl9SRUpFQ1QKK307CisKK2VudW0geworCUNQTF9BQk9SVF9TRU5EX1JTVCA9IDAsCisJQ1BMX0FCT1JUX05PX1JTVCwKKwlDUExfQUJPUlRfUE9TVF9DTE9TRV9SRVEgPSAyCit9OworCitlbnVtIHsgICAgICAgICAgICAgICAgLy8gVFhfUEtUX0xTTyBldGhlcm5ldCB0eXBlcwogCUNQTF9FVEhfSUksCiAJQ1BMX0VUSF9JSV9WTEFOLAogCUNQTF9FVEhfODAyXzMsCiAJQ1BMX0VUSF84MDJfM19WTEFOCiB9OwogCi1zdHJ1Y3QgY3BsX3J4X2RhdGEgewordW5pb24gb3Bjb2RlX3RpZCB7CisgICAgdTMyIG9wY29kZV90aWQ7CisgICAgdTggb3Bjb2RlOworfTsKKworI2RlZmluZSBTX09QQ09ERSAyNAorI2RlZmluZSBWX09QQ09ERSh4KSAoKHgpIDw8IFNfT1BDT0RFKQorI2RlZmluZSBHX09QQ09ERSh4KSAoKCh4KSA+PiBTX09QQ09ERSkgJiAweEZGKQorI2RlZmluZSBHX1RJRCh4KSAgICAoKHgpICYgMHhGRkZGRkYpCisKKy8qIHRpZCBpcyBhc3N1bWVkIHRvIGJlIDI0LWJpdHMgKi8KKyNkZWZpbmUgTUtfT1BDT0RFX1RJRChvcGNvZGUsIHRpZCkgKFZfT1BDT0RFKG9wY29kZSkgfCAodGlkKSkKKworI2RlZmluZSBPUENPREVfVElEKGNtZCkgKChjbWQpLT5vdC5vcGNvZGVfdGlkKQorCisvKiBleHRyYWN0IHRoZSBUSUQgZnJvbSBhIENQTCBjb21tYW5kICovCisjZGVmaW5lIEdFVF9USUQoY21kKSAoR19USUQobnRvaGwoT1BDT0RFX1RJRChjbWQpKSkpCisKK3N0cnVjdCB0Y3Bfb3B0aW9ucyB7CisJdTE2IG1zczsKKwl1OCB3c2Y7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJdTggcnN2ZDo0OworCXU4IGVjbjoxOworCXU4IHNhY2s6MTsKKwl1OCB0c3RhbXA6MTsKKyNlbHNlCisJdTggdHN0YW1wOjE7CisJdTggc2FjazoxOworCXU4IGVjbjoxOworCXU4IHJzdmQ6NDsKKyNlbmRpZgorfTsKKworc3RydWN0IGNwbF9wYXNzX29wZW5fcmVxIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUxNiBsb2NhbF9wb3J0OworCXUxNiBwZWVyX3BvcnQ7CisJdTMyIGxvY2FsX2lwOworCXUzMiBwZWVyX2lwOworCXUzMiBvcHQwaDsKKwl1MzIgb3B0MGw7CisJdTMyIHBlZXJfbmV0bWFzazsKKwl1MzIgb3B0MTsKK307CisKK3N0cnVjdCBjcGxfcGFzc19vcGVuX3JwbCB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MTYgbG9jYWxfcG9ydDsKKwl1MTYgcGVlcl9wb3J0OworCXUzMiBsb2NhbF9pcDsKKwl1MzIgcGVlcl9pcDsKKwl1OCByZXN2ZFs3XTsKKwl1OCBzdGF0dXM7Cit9OworCitzdHJ1Y3QgY3BsX3Bhc3NfZXN0YWJsaXNoIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUxNiBsb2NhbF9wb3J0OworCXUxNiBwZWVyX3BvcnQ7CisJdTMyIGxvY2FsX2lwOworCXUzMiBwZWVyX2lwOworCXUzMiB0b3NfdGlkOworCXU4ICBsMnRfaWR4OworCXU4ICByc3ZkWzNdOworCXUzMiBzbmRfaXNuOworCXUzMiByY3ZfaXNuOworfTsKKworc3RydWN0IGNwbF9wYXNzX2FjY2VwdF9yZXEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTE2IGxvY2FsX3BvcnQ7CisJdTE2IHBlZXJfcG9ydDsKKwl1MzIgbG9jYWxfaXA7CisJdTMyIHBlZXJfaXA7CisJdTMyIHRvc190aWQ7CisgICAgc3RydWN0IHRjcF9vcHRpb25zIHRjcF9vcHRpb25zOworCXU4ICBkc3RfbWFjWzZdOworCXUxNiB2bGFuX3RhZzsKKwl1OCAgc3JjX21hY1s2XTsKKwl1OCAgcnN2ZFsyXTsKKwl1MzIgcmN2X2lzbjsKKwl1MzIgdW5rbm93bl90Y3Bfb3B0aW9uczsKK307CisKK3N0cnVjdCBjcGxfcGFzc19hY2NlcHRfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OwogCXUzMiByc3ZkMDsKKwl1MzIgcnN2ZDE7CisJdTMyIHBlZXJfaXA7CisJdTMyIG9wdDBoOworCXVuaW9uIHsKKwl1MzIgb3B0MGw7CisJc3RydWN0IHsKKwkgICAgdTggcnN2ZFszXTsKKwkgICAgdTggc3RhdHVzOworCX07CisgICAgfTsKK307CisKK3N0cnVjdCBjcGxfYWN0X29wZW5fcmVxIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUxNiBsb2NhbF9wb3J0OworCXUxNiBwZWVyX3BvcnQ7CisJdTMyIGxvY2FsX2lwOworCXUzMiBwZWVyX2lwOworCXUzMiBvcHQwaDsKKwl1MzIgb3B0MGw7CisJdTMyIGlmZl92bGFudGFnOworCXUzMiByc3ZkOworfTsKKworc3RydWN0IGNwbF9hY3Rfb3Blbl9ycGwgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTE2IGxvY2FsX3BvcnQ7CisJdTE2IHBlZXJfcG9ydDsKKwl1MzIgbG9jYWxfaXA7CisJdTMyIHBlZXJfaXA7CisJdTMyIG5ld190aWQ7CisJdTggIHJzdmRbM107CisJdTggIHN0YXR1czsKK307CisKK3N0cnVjdCBjcGxfYWN0X2VzdGFibGlzaCB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MTYgbG9jYWxfcG9ydDsKKwl1MTYgcGVlcl9wb3J0OworCXUzMiBsb2NhbF9pcDsKKwl1MzIgcGVlcl9pcDsKKwl1MzIgdG9zX3RpZDsKKwl1MzIgcnN2ZDsKKwl1MzIgc25kX2lzbjsKKwl1MzIgcmN2X2lzbjsKK307CisKK3N0cnVjdCBjcGxfZ2V0X3RjYiB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MzIgcnN2ZDsKK307CisKK3N0cnVjdCBjcGxfZ2V0X3RjYl9ycGwgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTE2IGxlbjsKKwl1OCByc3ZkOworCXU4IHN0YXR1czsKK307CisKK3N0cnVjdCBjcGxfc2V0X3RjYiB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MTYgbGVuOworCXUxNiByc3ZkOworfTsKKworc3RydWN0IGNwbF9zZXRfdGNiX2ZpZWxkIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXU4IHJzdmRbM107CisJdTggb2Zmc2V0OworCXUzMiBtYXNrOworCXUzMiB2YWw7Cit9OworCitzdHJ1Y3QgY3BsX3NldF90Y2JfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXU4IHJzdmRbM107CisJdTggc3RhdHVzOworfTsKKworc3RydWN0IGNwbF9wY21kIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUxNiBkbGVuX2luOworCXUxNiBkbGVuX291dDsKKwl1MzIgcGNtZF9wYXJtWzJdOworfTsKKworc3RydWN0IGNwbF9wY21kX3JlYWQgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIHJzdmQxOworCXUxNiByc3ZkMjsKKwl1MzIgYWRkcjsKKwl1MTYgbGVuOworfTsKKworc3RydWN0IGNwbF9wY21kX3JlYWRfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUxNiBsZW47Cit9OworCitzdHJ1Y3QgY3BsX2Nsb3NlX2Nvbl9yZXEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIHJzdmQ7Cit9OworCitzdHJ1Y3QgY3BsX2Nsb3NlX2Nvbl9ycGwgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTggcnN2ZFszXTsKKwl1OCBzdGF0dXM7CisJdTMyIHNuZF9ueHQ7CisJdTMyIHJjdl9ueHQ7Cit9OworCitzdHJ1Y3QgY3BsX2Nsb3NlX2xpc3RzZXJ2X3JlcSB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MzIgcnN2ZDsKK307CisKK3N0cnVjdCBjcGxfY2xvc2VfbGlzdHNlcnZfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXU4IHJzdmRbM107CisJdTggc3RhdHVzOworfTsKKworc3RydWN0IGNwbF9hYm9ydF9yZXEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIHJzdmQwOworCXU4ICByc3ZkMTsKKwl1OCAgY21kOworCXU4ICByc3ZkMls2XTsKK307CisKK3N0cnVjdCBjcGxfYWJvcnRfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUzMiByc3ZkMDsKKwl1OCAgcnN2ZDE7CisJdTggIHN0YXR1czsKKwl1OCAgcnN2ZDJbNl07Cit9OworCitzdHJ1Y3QgY3BsX3BlZXJfY2xvc2UgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIHJzdmQ7Cit9OworCitzdHJ1Y3QgY3BsX3R4X2RhdGEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIGxlbjsKKwl1MzIgcnN2ZDA7CisJdTE2IHVyZzsKKwl1MTYgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY3BsX3R4X2RhdGFfYWNrIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUzMiBhY2tfc2VxOworfTsKKworc3RydWN0IGNwbF9yeF9kYXRhIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OwogCXUzMiBsZW47CiAJdTMyIHNlcTsKIAl1MTYgdXJnOwotCXU4ICByc3ZkMTsKKwl1OCAgcnN2ZDsKKwl1OCAgc3RhdHVzOworfTsKKworc3RydWN0IGNwbF9yeF9kYXRhX2FjayB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MzIgY3JlZGl0OworfTsKKworc3RydWN0IGNwbF9yeF9kYXRhX2RkcCB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MzIgbGVuOworCXUzMiBzZXE7CisJdTMyIG54dF9zZXE7CisJdTMyIHVscF9jcmM7CisJdTE2IGRkcF9zdGF0dXM7CisJdTggIHJzdmQ7CiAJdTggIHN0YXR1czsKIH07CiAKQEAgLTk5LDkgKzQ2MCw5IEBACiAJdTggaXBfY3N1bV9kaXM6MTsKIAl1OCBsNF9jc3VtX2RpczoxOwogCXU4IHZsYW5fdmFsaWQ6MTsKLQl1OCByc3ZkOjE7CisJdTggOjE7CiAjZWxzZQotCXU4IHJzdmQ6MTsKKwl1OCA6MTsKIAl1OCB2bGFuX3ZhbGlkOjE7CiAJdTggbDRfY3N1bV9kaXM6MTsKIAl1OCBpcF9jc3VtX2RpczoxOwpAQCAtMTEwLDggKzQ3MSw3IEBACiAJdTE2IHZsYW47CiAJX19iZTMyIGxlbjsKIAotCXUzMiByc3ZkMjsKLQl1OCByc3ZkMzsKKwl1OCByc3ZkWzVdOwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCXU4IHRjcF9oZHJfd29yZHM6NDsKIAl1OCBpcF9oZHJfd29yZHM6NDsKQEAgLTEzOCw4ICs0OTgsMTQyIEBACiAJdTggaWZmOjQ7CiAjZW5kaWYKIAl1MTYgY3N1bTsKLQlfX2JlMTYgdmxhbjsKKwl1MTYgdmxhbjsKIAl1MTYgbGVuOwogfTsKIAorc3RydWN0IGNwbF9sMnRfd3JpdGVfcmVxIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUzMiBwYXJhbXM7CisJdTggcnN2ZDFbMl07CisJdTggZHN0X21hY1s2XTsKK307CisKK3N0cnVjdCBjcGxfbDJ0X3dyaXRlX3JwbCB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1OCBzdGF0dXM7CisJdTggcnN2ZFszXTsKK307CisKK3N0cnVjdCBjcGxfbDJ0X3JlYWRfcmVxIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXU4IHJzdmRbM107CisJdTggbDJ0X2lkeDsKK307CisKK3N0cnVjdCBjcGxfbDJ0X3JlYWRfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUzMiBwYXJhbXM7CisJdTggcnN2ZDFbMl07CisJdTggZHN0X21hY1s2XTsKK307CisKK3N0cnVjdCBjcGxfc210X3dyaXRlX3JlcSB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1OCByc3ZkMDsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwl1OCByc3ZkMToxOworCXU4IG10dV9pZHg6MzsKKwl1OCBpZmY6NDsKKyNlbHNlCisJdTggaWZmOjQ7CisJdTggbXR1X2lkeDozOworCXU4IHJzdmQxOjE7CisjZW5kaWYKKwl1MTYgcnN2ZDI7CisJdTE2IHJzdmQzOworCXU4ICBzcmNfbWFjMVs2XTsKKwl1MTYgcnN2ZDQ7CisJdTggIHNyY19tYWMwWzZdOworfTsKKworc3RydWN0IGNwbF9zbXRfd3JpdGVfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXU4IHN0YXR1czsKKwl1OCByc3ZkWzNdOworfTsKKworc3RydWN0IGNwbF9zbXRfcmVhZF9yZXEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTggcnN2ZDA7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJdTggcnN2ZDE6NDsKKwl1OCBpZmY6NDsKKyNlbHNlCisJdTggaWZmOjQ7CisJdTggcnN2ZDE6NDsKKyNlbmRpZgorCXUxNiByc3ZkMjsKK307CisKK3N0cnVjdCBjcGxfc210X3JlYWRfcnBsIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXU4IHN0YXR1czsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwl1OCByc3ZkMToxOworCXU4IG10dV9pZHg6MzsKKwl1OCByc3ZkMDo0OworI2Vsc2UKKwl1OCByc3ZkMDo0OworCXU4IG10dV9pZHg6MzsKKwl1OCByc3ZkMToxOworI2VuZGlmCisJdTE2IHJzdmQyOworCXUxNiByc3ZkMzsKKwl1OCAgc3JjX21hYzFbNl07CisJdTE2IHJzdmQ0OworCXU4ICBzcmNfbWFjMFs2XTsKK307CisKK3N0cnVjdCBjcGxfcnRlX2RlbGV0ZV9yZXEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIHBhcmFtczsKK307CisKK3N0cnVjdCBjcGxfcnRlX2RlbGV0ZV9ycGwgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTggc3RhdHVzOworCXU4IHJzdmRbM107Cit9OworCitzdHJ1Y3QgY3BsX3J0ZV93cml0ZV9yZXEgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTMyIHBhcmFtczsKKwl1MzIgbmV0bWFzazsKKwl1MzIgZmFkZHI7Cit9OworCitzdHJ1Y3QgY3BsX3J0ZV93cml0ZV9ycGwgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTggc3RhdHVzOworCXU4IHJzdmRbM107Cit9OworCitzdHJ1Y3QgY3BsX3J0ZV9yZWFkX3JlcSB7CisJdW5pb24gb3Bjb2RlX3RpZCBvdDsKKwl1MzIgcGFyYW1zOworfTsKKworc3RydWN0IGNwbF9ydGVfcmVhZF9ycGwgeworCXVuaW9uIG9wY29kZV90aWQgb3Q7CisJdTggc3RhdHVzOworCXU4IHJzdmQwWzJdOworCXU4IGwydF9pZHg7CisjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisJdTggcnN2ZDE6NzsKKwl1OCBzZWxlY3Q6MTsKKyNlbHNlCisJdTggc2VsZWN0OjE7CisJdTggcnN2ZDE6NzsKKyNlbmRpZgorCXU4IHJzdmQyWzNdOworCXUzMiBhZGRyOworfTsKKworc3RydWN0IGNwbF9tc3NfY2hhbmdlIHsKKwl1bmlvbiBvcGNvZGVfdGlkIG90OworCXUzMiBtc3M7Cit9OworCiAjZW5kaWYgLyogX0NYR0JfQ1BMNV9DTURfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCmluZGV4IGFkN2ZmOTYuLjUzYmVjNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTU0LDM2ICs1MywxMCBAQAogI2luY2x1ZGUgImdtYWMuaCIKICNpbmNsdWRlICJjcGh5LmgiCiAjaW5jbHVkZSAic2dlLmgiCisjaW5jbHVkZSAidHAuaCIKICNpbmNsdWRlICJlc3BpLmgiCisjaW5jbHVkZSAiZWxtZXIwLmgiCiAKLSNpZmRlZiB3b3JrX3N0cnVjdAotI2luY2x1ZGUgPGxpbnV4L3RxdWV1ZS5oPgotI2RlZmluZSBJTklUX1dPUksgSU5JVF9UUVVFVUUKLSNkZWZpbmUgc2NoZWR1bGVfd29yayBzY2hlZHVsZV90YXNrCi0jZGVmaW5lIGZsdXNoX3NjaGVkdWxlZF93b3JrIGZsdXNoX3NjaGVkdWxlZF90YXNrcwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2NoZWR1bGVfbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYWRhcHRlciAqYXAsIGludCBzZWNzKQotewotCW1vZF90aW1lcigmYXAtPnN0YXRzX3VwZGF0ZV90aW1lciwgamlmZmllcyArIHNlY3MgKiBIWik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYW5jZWxfbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYWRhcHRlciAqYXApCi17Ci0JZGVsX3RpbWVyX3N5bmMoJmFwLT5zdGF0c191cGRhdGVfdGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF90YXNrcygpOwotfQotCi0vKgotICogU3RhdHMgdXBkYXRlIHRpbWVyIGZvciAyLjQuICBJdCBzY2hlZHVsZXMgYSB0YXNrIHRvIGRvIHRoZSBhY3R1YWwgdXBkYXRlIGFzCi0gKiB3ZSBuZWVkIHRvIGFjY2VzcyBNQUMgc3RhdGlzdGljcyBpbiBwcm9jZXNzIGNvbnRleHQuCi0gKi8KLXN0YXRpYyB2b2lkIG1hY19zdGF0c190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFwID0gKHN0cnVjdCBhZGFwdGVyICopZGF0YTsKLQotCXNjaGVkdWxlX3Rhc2soJmFwLT5zdGF0c191cGRhdGVfdGFzayk7Ci19Ci0jZWxzZQogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NoZWR1bGVfbWFjX3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYWRhcHRlciAqYXAsIGludCBzZWNzKQpAQCAtOTUsNyArNjgsNiBAQAogewogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFwLT5zdGF0c191cGRhdGVfdGFzayk7CiB9Ci0jZW5kaWYKIAogI2RlZmluZSBNQVhfQ01EUV9FTlRSSUVTIDE2Mzg0CiAjZGVmaW5lIE1BWF9DTURRMV9FTlRSSUVTIDEwMjQKQEAgLTEwMywxMCArNzUsOSBAQAogI2RlZmluZSBNQVhfUlhfSlVNQk9fQlVGRkVSUyAxNjM4NAogI2RlZmluZSBNQVhfVFhfQlVGRkVSU19ISUdICTE2Mzg0VQogI2RlZmluZSBNQVhfVFhfQlVGRkVSU19MT1cJMTUzNlUKKyNkZWZpbmUgTUFYX1RYX0JVRkZFUlMJCTE0NjBVCiAjZGVmaW5lIE1JTl9GTF9FTlRSSUVTIDMyCiAKLSNkZWZpbmUgUE9SVF9NQVNLICgoMSA8PCBNQVhfTlBPUlRTKSAtIDEpCi0KICNkZWZpbmUgREZMVF9NU0dfRU5BQkxFIChORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTksgfCBcCiAJCQkgTkVUSUZfTVNHX1RJTUVSIHwgTkVUSUZfTVNHX0lGRE9XTiB8IE5FVElGX01TR19JRlVQIHxcCiAJCQkgTkVUSUZfTVNHX1JYX0VSUiB8IE5FVElGX01TR19UWF9FUlIpCkBAIC0xMjQsOCArOTUsMjEgQEAKIHN0YXRpYyBpbnQgZGZsdF9tc2dfZW5hYmxlID0gREZMVF9NU0dfRU5BQkxFOwogCiBtb2R1bGVfcGFyYW0oZGZsdF9tc2dfZW5hYmxlLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZmx0X21zZ19lbmFibGUsICJDaGVsc2lvIFQxIG1lc3NhZ2UgZW5hYmxlIGJpdG1hcCIpOworTU9EVUxFX1BBUk1fREVTQyhkZmx0X21zZ19lbmFibGUsICJDaGVsc2lvIFQxIGRlZmF1bHQgbWVzc2FnZSBlbmFibGUgYml0bWFwIik7CiAKKyNkZWZpbmUgSENMT0NLIDB4MAorI2RlZmluZSBMQ0xPQ0sgMHgxCisKKy8qIFQxIGNhcmRzIHBvd2Vyc2F2ZSBtb2RlICovCitzdGF0aWMgaW50IHQxX2Nsb2NrKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgbW9kZSk7CitzdGF0aWMgaW50IHQxcG93ZXJzYXZlID0gMTsJLyogSFcgZGVmYXVsdCBpcyBwb3dlcnNhdmUgbW9kZS4gKi8KKworbW9kdWxlX3BhcmFtKHQxcG93ZXJzYXZlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0MXBvd2Vyc2F2ZSwgIkVuYWJsZS9EaXNhYmxlIFQxIHBvd2Vyc2F2aW5nIG1vZGUiKTsKKworc3RhdGljIGludCBkaXNhYmxlX21zaSA9IDA7Cittb2R1bGVfcGFyYW0oZGlzYWJsZV9tc2ksIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfbXNpLCAiRGlzYWJsZSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCAoTVNJKSIpOwogCiBzdGF0aWMgY29uc3QgY2hhciBwY2lfc3BlZWRbXVs0XSA9IHsKIAkiMzMiLCAiNjYiLCAiMTAwIiwgIjEzMyIKQEAgLTE0OSw3ICsxMzMsNyBAQAogc3RhdGljIHZvaWQgbGlua19yZXBvcnQoc3RydWN0IHBvcnRfaW5mbyAqcCkKIHsKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2socC0+ZGV2KSkKLSAgICAgICAgCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIHAtPmRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIHAtPmRldi0+bmFtZSk7CiAJZWxzZSB7CiAJCWNvbnN0IGNoYXIgKnMgPSAiMTBNYnBzIjsKIApAQCAtMTU5LDEzICsxNDMsMTMgQEAKIAkJCWNhc2UgU1BFRURfMTAwOiAgIHMgPSAiMTAwTWJwcyI7IGJyZWFrOwogCQl9CiAKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdXAsICVzLCAlcy1kdXBsZXhcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxpbmsgdXAsICVzLCAlcy1kdXBsZXhcbiIsCiAJCSAgICAgICBwLT5kZXYtPm5hbWUsIHMsCiAJCSAgICAgICBwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiZnVsbCIgOiAiaGFsZiIpOwogCX0KIH0KIAotdm9pZCB0MV9saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0LAordm9pZCB0MV9saW5rX25lZ290aWF0ZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkLCBpbnQgbGlua19zdGF0LAogCQkJaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBpbnQgcGF1c2UpCiB7CiAJc3RydWN0IHBvcnRfaW5mbyAqcCA9ICZhZGFwdGVyLT5wb3J0W3BvcnRfaWRdOwpAQCAtMTc3LDYgKzE2MSwyMiBAQAogCQkJbmV0aWZfY2Fycmllcl9vZmYocC0+ZGV2KTsKIAkJbGlua19yZXBvcnQocCk7CiAKKwkJLyogbXVsdGktcG9ydHM6IGluZm9ybSB0b2UgKi8KKwkJaWYgKChzcGVlZCA+IDApICYmIChhZGFwdGVyLT5wYXJhbXMubnBvcnRzID4gMSkpIHsKKwkJCXVuc2lnbmVkIGludCBzY2hlZF9zcGVlZCA9IDEwOworCQkJc3dpdGNoIChzcGVlZCkgeworCQkJY2FzZSBTUEVFRF8xMDAwOgorCQkJCXNjaGVkX3NwZWVkID0gMTAwMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BFRURfMTAwOgorCQkJCXNjaGVkX3NwZWVkID0gMTAwOworCQkJCWJyZWFrOworCQkJY2FzZSBTUEVFRF8xMDoKKwkJCQlzY2hlZF9zcGVlZCA9IDEwOworCQkJCWJyZWFrOworCQkJfQorCQkJdDFfc2NoZWRfdXBkYXRlX3Bhcm1zKGFkYXB0ZXItPnNnZSwgcG9ydF9pZCwgMCwgc2NoZWRfc3BlZWQpOworCQl9CiAJfQogfQogCkBAIC0xOTUsOCArMTk1LDEwIEBACiBzdGF0aWMgdm9pZCBlbmFibGVfaHdfY3N1bShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBUU09fQ0FQQUJMRSkKLQkJdDFfdHBfc2V0X2lwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlciwgMSk7IC8qIGZvciBUU08gb25seSAqLwotCXQxX3RwX3NldF90Y3BfY2hlY2tzdW1fb2ZmbG9hZChhZGFwdGVyLCAxKTsKKwkJdDFfdHBfc2V0X2lwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlci0+dHAsIDEpOwkvKiBmb3IgVFNPIG9ubHkgKi8KKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBVRFBfQ1NVTV9DQVBBQkxFKQorCQl0MV90cF9zZXRfdWRwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlci0+dHAsIDEpOworCXQxX3RwX3NldF90Y3BfY2hlY2tzdW1fb2ZmbG9hZChhZGFwdGVyLT50cCwgMSk7CiB9CiAKIC8qCkBAIC0yMTcsMTEgKzIxOSwxOSBAQAogCX0KIAogCXQxX2ludGVycnVwdHNfY2xlYXIoYWRhcHRlcik7Ci0JaWYgKChlcnIgPSByZXF1ZXN0X2lycShhZGFwdGVyLT5wZGV2LT5pcnEsCi0JCQkgICAgICAgdDFfc2VsZWN0X2ludHJfaGFuZGxlcihhZGFwdGVyKSwgSVJRRl9TSEFSRUQsCi0JCQkgICAgICAgYWRhcHRlci0+bmFtZSwgYWRhcHRlcikpKSB7CisKKwlhZGFwdGVyLT5wYXJhbXMuaGFzX21zaSA9ICFkaXNhYmxlX21zaSAmJiBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KSA9PSAwOworCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwKKwkJCSAgdDFfc2VsZWN0X2ludHJfaGFuZGxlcihhZGFwdGVyKSwKKwkJCSAgYWRhcHRlci0+cGFyYW1zLmhhc19tc2kgPyAwIDogSVJRRl9TSEFSRUQsCisJCQkgIGFkYXB0ZXItPm5hbWUsIGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJaWYgKGFkYXB0ZXItPnBhcmFtcy5oYXNfbXNpKQorCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCiAJCWdvdG8gb3V0X2VycjsKIAl9CisKIAl0MV9zZ2Vfc3RhcnQoYWRhcHRlci0+c2dlKTsKIAl0MV9pbnRlcnJ1cHRzX2VuYWJsZShhZGFwdGVyKTsKICBvdXRfZXJyOgpAQCAtMjM2LDYgKzI0Niw4IEBACiAJdDFfc2dlX3N0b3AoYWRhcHRlci0+c2dlKTsKIAl0MV9pbnRlcnJ1cHRzX2Rpc2FibGUoYWRhcHRlcik7CiAJZnJlZV9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBhZGFwdGVyKTsKKwlpZiAoYWRhcHRlci0+cGFyYW1zLmhhc19tc2kpCisJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIH0KIAogc3RhdGljIGludCBjeGdiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI5MCw3ICszMDIsNyBAQAogCiAJLyogRG8gYSBmdWxsIHVwZGF0ZSBvZiB0aGUgTUFDIHN0YXRzICovCiAJcHN0YXRzID0gcC0+bWFjLT5vcHMtPnN0YXRpc3RpY3NfdXBkYXRlKHAtPm1hYywKLQkJCQkJCSAgICAgIE1BQ19TVEFUU19VUERBVEVfRlVMTCk7CisJCQkJCQlNQUNfU1RBVFNfVVBEQVRFX0ZVTEwpOwogCiAJbnMtPnR4X3BhY2tldHMgPSBwc3RhdHMtPlR4VW5pY2FzdEZyYW1lc09LICsKIAkJcHN0YXRzLT5UeE11bHRpY2FzdEZyYW1lc09LICsgcHN0YXRzLT5UeEJyb2FkY2FzdEZyYW1lc09LOwpAQCAtMzQ0LDQ3ICszNTYsNTMgQEAKIH0KIAogc3RhdGljIGNoYXIgc3RhdHNfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7Ci0gICAgICAgICJUeE9jdGV0c09LIiwKLSAgICAgICAgIlR4T2N0ZXRzQmFkIiwKLSAgICAgICAgIlR4VW5pY2FzdEZyYW1lc09LIiwKLSAgICAgICAgIlR4TXVsdGljYXN0RnJhbWVzT0siLAotICAgICAgICAiVHhCcm9hZGNhc3RGcmFtZXNPSyIsCi0gICAgICAgICJUeFBhdXNlRnJhbWVzIiwKLSAgICAgICAgIlR4RnJhbWVzV2l0aERlZmVycmVkWG1pc3Npb25zIiwKLSAgICAgICAgIlR4TGF0ZUNvbGxpc2lvbnMiLAotICAgICAgICAiVHhUb3RhbENvbGxpc2lvbnMiLAotICAgICAgICAiVHhGcmFtZXNBYm9ydGVkRHVlVG9YU0NvbGxpc2lvbnMiLAotICAgICAgICAiVHhVbmRlcnJ1biIsCi0gICAgICAgICJUeExlbmd0aEVycm9ycyIsCi0gICAgICAgICJUeEludGVybmFsTUFDWG1pdEVycm9yIiwKLSAgICAgICAgIlR4RnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsIiwKLSAgICAgICAgIlR4RkNTRXJyb3JzIiwKKwkiVHhPY3RldHNPSyIsCisJIlR4T2N0ZXRzQmFkIiwKKwkiVHhVbmljYXN0RnJhbWVzT0siLAorCSJUeE11bHRpY2FzdEZyYW1lc09LIiwKKwkiVHhCcm9hZGNhc3RGcmFtZXNPSyIsCisJIlR4UGF1c2VGcmFtZXMiLAorCSJUeEZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9ucyIsCisJIlR4TGF0ZUNvbGxpc2lvbnMiLAorCSJUeFRvdGFsQ29sbGlzaW9ucyIsCisJIlR4RnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xsaXNpb25zIiwKKwkiVHhVbmRlcnJ1biIsCisJIlR4TGVuZ3RoRXJyb3JzIiwKKwkiVHhJbnRlcm5hbE1BQ1htaXRFcnJvciIsCisJIlR4RnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsIiwKKwkiVHhGQ1NFcnJvcnMiLAogCi0gICAgICAgICJSeE9jdGV0c09LIiwKLSAgICAgICAgIlJ4T2N0ZXRzQmFkIiwKLSAgICAgICAgIlJ4VW5pY2FzdEZyYW1lc09LIiwKLSAgICAgICAgIlJ4TXVsdGljYXN0RnJhbWVzT0siLAotICAgICAgICAiUnhCcm9hZGNhc3RGcmFtZXNPSyIsCi0gICAgICAgICJSeFBhdXNlRnJhbWVzIiwKLSAgICAgICAgIlJ4RkNTRXJyb3JzIiwKLSAgICAgICAgIlJ4QWxpZ25FcnJvcnMiLAotICAgICAgICAiUnhTeW1ib2xFcnJvcnMiLAotICAgICAgICAiUnhEYXRhRXJyb3JzIiwKLSAgICAgICAgIlJ4U2VxdWVuY2VFcnJvcnMiLAotICAgICAgICAiUnhSdW50RXJyb3JzIiwKLSAgICAgICAgIlJ4SmFiYmVyRXJyb3JzIiwKLSAgICAgICAgIlJ4SW50ZXJuYWxNQUNSY3ZFcnJvciIsCi0gICAgICAgICJSeEluUmFuZ2VMZW5ndGhFcnJvcnMiLAotICAgICAgICAiUnhPdXRPZlJhbmdlTGVuZ3RoRmllbGQiLAotICAgICAgICAiUnhGcmFtZVRvb0xvbmdFcnJvcnMiLAorCSJSeE9jdGV0c09LIiwKKwkiUnhPY3RldHNCYWQiLAorCSJSeFVuaWNhc3RGcmFtZXNPSyIsCisJIlJ4TXVsdGljYXN0RnJhbWVzT0siLAorCSJSeEJyb2FkY2FzdEZyYW1lc09LIiwKKwkiUnhQYXVzZUZyYW1lcyIsCisJIlJ4RkNTRXJyb3JzIiwKKwkiUnhBbGlnbkVycm9ycyIsCisJIlJ4U3ltYm9sRXJyb3JzIiwKKwkiUnhEYXRhRXJyb3JzIiwKKwkiUnhTZXF1ZW5jZUVycm9ycyIsCisJIlJ4UnVudEVycm9ycyIsCisJIlJ4SmFiYmVyRXJyb3JzIiwKKwkiUnhJbnRlcm5hbE1BQ1JjdkVycm9yIiwKKwkiUnhJblJhbmdlTGVuZ3RoRXJyb3JzIiwKKwkiUnhPdXRPZlJhbmdlTGVuZ3RoRmllbGQiLAorCSJSeEZyYW1lVG9vTG9uZ0Vycm9ycyIsCiAKLQkiVFNPIiwKLQkiVkxBTmV4dHJhY3Rpb25zIiwKLQkiVkxBTmluc2VydGlvbnMiLAorCS8qIFBvcnQgc3RhdHMgKi8KKwkiUnhQYWNrZXRzIiwKIAkiUnhDc3VtR29vZCIsCisJIlR4UGFja2V0cyIsCiAJIlR4Q3N1bU9mZmxvYWQiLAotCSJSeERyb3BzIgorCSJUeFRzbyIsCisJIlJ4VmxhbiIsCisJIlR4VmxhbiIsCiAKKwkvKiBJbnRlcnJ1cHQgc3RhdHMgKi8KKwkicnggZHJvcHMiLAorCSJwdXJlX3JzcHMiLAorCSJ1bmhhbmRsZWQgaXJxcyIsCiAJInJlc3BRX2VtcHR5IiwKIAkicmVzcFFfb3ZlcmZsb3ciLAogCSJmcmVlbGlzdFFfZW1wdHkiLApAQCAtMzkyLDExICs0MTAsNyBAQAogCSJwa3RfbWlzbWF0Y2giLAogCSJjbWRRX2Z1bGwwIiwKIAkiY21kUV9mdWxsMSIsCi0JInR4X2lwZnJhZ3MiLAotCSJ0eF9yZWdfcGt0cyIsCi0JInR4X2xzb19wa3RzIiwKLQkidHhfZG9fY2tzdW0iLAotCQorCiAJImVzcGlfRElQMlBhcml0eUVyciIsCiAJImVzcGlfRElQNEVyciIsCiAJImVzcGlfUnhEcm9wcyIsCkBAIC00MDQsNyArNDE4LDcgQEAKIAkiZXNwaV9SeE92ZmwiLAogCSJlc3BpX1Bhcml0eUVyciIKIH07Ci0gCisKICNkZWZpbmUgVDJfUkVHTUFQX1NJWkUgKDMgKiAxMDI0KQogCiBzdGF0aWMgaW50IGdldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDM5LDY1ICs0NTMsNzcgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgY21hYyAqbWFjID0gYWRhcHRlci0+cG9ydFtkZXYtPmlmX3BvcnRdLm1hYzsKIAljb25zdCBzdHJ1Y3QgY21hY19zdGF0aXN0aWNzICpzOwotCWNvbnN0IHN0cnVjdCBzZ2VfcG9ydF9zdGF0cyAqc3M7CiAJY29uc3Qgc3RydWN0IHNnZV9pbnRyX2NvdW50cyAqdDsKKwlzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgc3M7CiAKIAlzID0gbWFjLT5vcHMtPnN0YXRpc3RpY3NfdXBkYXRlKG1hYywgTUFDX1NUQVRTX1VQREFURV9GVUxMKTsKLQlzcyA9IHQxX3NnZV9nZXRfcG9ydF9zdGF0cyhhZGFwdGVyLT5zZ2UsIGRldi0+aWZfcG9ydCk7CisKKwkqZGF0YSsrID0gcy0+VHhPY3RldHNPSzsKKwkqZGF0YSsrID0gcy0+VHhPY3RldHNCYWQ7CisJKmRhdGErKyA9IHMtPlR4VW5pY2FzdEZyYW1lc09LOworCSpkYXRhKysgPSBzLT5UeE11bHRpY2FzdEZyYW1lc09LOworCSpkYXRhKysgPSBzLT5UeEJyb2FkY2FzdEZyYW1lc09LOworCSpkYXRhKysgPSBzLT5UeFBhdXNlRnJhbWVzOworCSpkYXRhKysgPSBzLT5UeEZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9uczsKKwkqZGF0YSsrID0gcy0+VHhMYXRlQ29sbGlzaW9uczsKKwkqZGF0YSsrID0gcy0+VHhUb3RhbENvbGxpc2lvbnM7CisJKmRhdGErKyA9IHMtPlR4RnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xsaXNpb25zOworCSpkYXRhKysgPSBzLT5UeFVuZGVycnVuOworCSpkYXRhKysgPSBzLT5UeExlbmd0aEVycm9yczsKKwkqZGF0YSsrID0gcy0+VHhJbnRlcm5hbE1BQ1htaXRFcnJvcjsKKwkqZGF0YSsrID0gcy0+VHhGcmFtZXNXaXRoRXhjZXNzaXZlRGVmZXJyYWw7CisJKmRhdGErKyA9IHMtPlR4RkNTRXJyb3JzOworCisJKmRhdGErKyA9IHMtPlJ4T2N0ZXRzT0s7CisJKmRhdGErKyA9IHMtPlJ4T2N0ZXRzQmFkOworCSpkYXRhKysgPSBzLT5SeFVuaWNhc3RGcmFtZXNPSzsKKwkqZGF0YSsrID0gcy0+UnhNdWx0aWNhc3RGcmFtZXNPSzsKKwkqZGF0YSsrID0gcy0+UnhCcm9hZGNhc3RGcmFtZXNPSzsKKwkqZGF0YSsrID0gcy0+UnhQYXVzZUZyYW1lczsKKwkqZGF0YSsrID0gcy0+UnhGQ1NFcnJvcnM7CisJKmRhdGErKyA9IHMtPlJ4QWxpZ25FcnJvcnM7CisJKmRhdGErKyA9IHMtPlJ4U3ltYm9sRXJyb3JzOworCSpkYXRhKysgPSBzLT5SeERhdGFFcnJvcnM7CisJKmRhdGErKyA9IHMtPlJ4U2VxdWVuY2VFcnJvcnM7CisJKmRhdGErKyA9IHMtPlJ4UnVudEVycm9yczsKKwkqZGF0YSsrID0gcy0+UnhKYWJiZXJFcnJvcnM7CisJKmRhdGErKyA9IHMtPlJ4SW50ZXJuYWxNQUNSY3ZFcnJvcjsKKwkqZGF0YSsrID0gcy0+UnhJblJhbmdlTGVuZ3RoRXJyb3JzOworCSpkYXRhKysgPSBzLT5SeE91dE9mUmFuZ2VMZW5ndGhGaWVsZDsKKwkqZGF0YSsrID0gcy0+UnhGcmFtZVRvb0xvbmdFcnJvcnM7CisKKwl0MV9zZ2VfZ2V0X3BvcnRfc3RhdHMoYWRhcHRlci0+c2dlLCBkZXYtPmlmX3BvcnQsICZzcyk7CisJKmRhdGErKyA9IHNzLnJ4X3BhY2tldHM7CisJKmRhdGErKyA9IHNzLnJ4X2Nzb19nb29kOworCSpkYXRhKysgPSBzcy50eF9wYWNrZXRzOworCSpkYXRhKysgPSBzcy50eF9jc287CisJKmRhdGErKyA9IHNzLnR4X3RzbzsKKwkqZGF0YSsrID0gc3Mudmxhbl94dHJhY3Q7CisJKmRhdGErKyA9IHNzLnZsYW5faW5zZXJ0OworCiAJdCA9IHQxX3NnZV9nZXRfaW50cl9jb3VudHMoYWRhcHRlci0+c2dlKTsKKwkqZGF0YSsrID0gdC0+cnhfZHJvcHM7CisJKmRhdGErKyA9IHQtPnB1cmVfcnNwczsKKwkqZGF0YSsrID0gdC0+dW5oYW5kbGVkX2lycXM7CisJKmRhdGErKyA9IHQtPnJlc3BRX2VtcHR5OworCSpkYXRhKysgPSB0LT5yZXNwUV9vdmVyZmxvdzsKKwkqZGF0YSsrID0gdC0+ZnJlZWxpc3RRX2VtcHR5OworCSpkYXRhKysgPSB0LT5wa3RfdG9vX2JpZzsKKwkqZGF0YSsrID0gdC0+cGt0X21pc21hdGNoOworCSpkYXRhKysgPSB0LT5jbWRRX2Z1bGxbMF07CisJKmRhdGErKyA9IHQtPmNtZFFfZnVsbFsxXTsKIAotICAgICAgICAqZGF0YSsrID0gcy0+VHhPY3RldHNPSzsKLSAgICAgICAgKmRhdGErKyA9IHMtPlR4T2N0ZXRzQmFkOwotICAgICAgICAqZGF0YSsrID0gcy0+VHhVbmljYXN0RnJhbWVzT0s7Ci0gICAgICAgICpkYXRhKysgPSBzLT5UeE11bHRpY2FzdEZyYW1lc09LOwotICAgICAgICAqZGF0YSsrID0gcy0+VHhCcm9hZGNhc3RGcmFtZXNPSzsKLSAgICAgICAgKmRhdGErKyA9IHMtPlR4UGF1c2VGcmFtZXM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5UeEZyYW1lc1dpdGhEZWZlcnJlZFhtaXNzaW9uczsKLSAgICAgICAgKmRhdGErKyA9IHMtPlR4TGF0ZUNvbGxpc2lvbnM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5UeFRvdGFsQ29sbGlzaW9uczsKLSAgICAgICAgKmRhdGErKyA9IHMtPlR4RnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xsaXNpb25zOwotICAgICAgICAqZGF0YSsrID0gcy0+VHhVbmRlcnJ1bjsKLSAgICAgICAgKmRhdGErKyA9IHMtPlR4TGVuZ3RoRXJyb3JzOwotICAgICAgICAqZGF0YSsrID0gcy0+VHhJbnRlcm5hbE1BQ1htaXRFcnJvcjsKLSAgICAgICAgKmRhdGErKyA9IHMtPlR4RnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsOwotICAgICAgICAqZGF0YSsrID0gcy0+VHhGQ1NFcnJvcnM7CisJaWYgKGFkYXB0ZXItPmVzcGkpIHsKKwkJY29uc3Qgc3RydWN0IGVzcGlfaW50cl9jb3VudHMgKmU7CiAKLSAgICAgICAgKmRhdGErKyA9IHMtPlJ4T2N0ZXRzT0s7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeE9jdGV0c0JhZDsKLSAgICAgICAgKmRhdGErKyA9IHMtPlJ4VW5pY2FzdEZyYW1lc09LOwotICAgICAgICAqZGF0YSsrID0gcy0+UnhNdWx0aWNhc3RGcmFtZXNPSzsKLSAgICAgICAgKmRhdGErKyA9IHMtPlJ4QnJvYWRjYXN0RnJhbWVzT0s7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeFBhdXNlRnJhbWVzOwotICAgICAgICAqZGF0YSsrID0gcy0+UnhGQ1NFcnJvcnM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeEFsaWduRXJyb3JzOwotICAgICAgICAqZGF0YSsrID0gcy0+UnhTeW1ib2xFcnJvcnM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeERhdGFFcnJvcnM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeFNlcXVlbmNlRXJyb3JzOwotICAgICAgICAqZGF0YSsrID0gcy0+UnhSdW50RXJyb3JzOwotICAgICAgICAqZGF0YSsrID0gcy0+UnhKYWJiZXJFcnJvcnM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeEludGVybmFsTUFDUmN2RXJyb3I7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeEluUmFuZ2VMZW5ndGhFcnJvcnM7Ci0gICAgICAgICpkYXRhKysgPSBzLT5SeE91dE9mUmFuZ2VMZW5ndGhGaWVsZDsKLSAgICAgICAgKmRhdGErKyA9IHMtPlJ4RnJhbWVUb29Mb25nRXJyb3JzOwotCi0JKmRhdGErKyA9IHNzLT50c287Ci0JKmRhdGErKyA9IHNzLT52bGFuX3h0cmFjdDsKLQkqZGF0YSsrID0gc3MtPnZsYW5faW5zZXJ0OwotCSpkYXRhKysgPSBzcy0+cnhfY3NvX2dvb2Q7Ci0JKmRhdGErKyA9IHNzLT50eF9jc287Ci0JKmRhdGErKyA9IHNzLT5yeF9kcm9wczsKLQotCSpkYXRhKysgPSAodTY0KXQtPnJlc3BRX2VtcHR5OwotCSpkYXRhKysgPSAodTY0KXQtPnJlc3BRX292ZXJmbG93OwotCSpkYXRhKysgPSAodTY0KXQtPmZyZWVsaXN0UV9lbXB0eTsKLQkqZGF0YSsrID0gKHU2NCl0LT5wa3RfdG9vX2JpZzsKLQkqZGF0YSsrID0gKHU2NCl0LT5wa3RfbWlzbWF0Y2g7Ci0JKmRhdGErKyA9ICh1NjQpdC0+Y21kUV9mdWxsWzBdOwotCSpkYXRhKysgPSAodTY0KXQtPmNtZFFfZnVsbFsxXTsKLQkqZGF0YSsrID0gKHU2NCl0LT50eF9pcGZyYWdzOwotCSpkYXRhKysgPSAodTY0KXQtPnR4X3JlZ19wa3RzOwotCSpkYXRhKysgPSAodTY0KXQtPnR4X2xzb19wa3RzOwotCSpkYXRhKysgPSAodTY0KXQtPnR4X2RvX2Nrc3VtOworCQllID0gdDFfZXNwaV9nZXRfaW50cl9jb3VudHMoYWRhcHRlci0+ZXNwaSk7CisJCSpkYXRhKysgPSBlLT5ESVAyX3Bhcml0eV9lcnI7CisJCSpkYXRhKysgPSBlLT5ESVA0X2VycjsKKwkJKmRhdGErKyA9IGUtPnJ4X2Ryb3BzOworCQkqZGF0YSsrID0gZS0+dHhfZHJvcHM7CisJCSpkYXRhKysgPSBlLT5yeF9vdmZsdzsKKwkJKmRhdGErKyA9IGUtPnBhcml0eV9lcnI7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnX2Jsb2NrX2R1bXAoc3RydWN0IGFkYXB0ZXIgKmFwLCB2b2lkICpidWYsCkBAIC01MjEsNiArNTQ3LDE1IEBACiAKIAltZW1zZXQoYnVmLCAwLCBUMl9SRUdNQVBfU0laRSk7CiAJcmVnX2Jsb2NrX2R1bXAoYXAsIGJ1ZiwgMCwgQV9TR19SRVNQQUNDVVRJTUVSKTsKKwlyZWdfYmxvY2tfZHVtcChhcCwgYnVmLCBBX01DM19DRkcsIEFfTUM0X0lOVF9DQVVTRSk7CisJcmVnX2Jsb2NrX2R1bXAoYXAsIGJ1ZiwgQV9UUElfQUREUiwgQV9UUElfUEFSKTsKKwlyZWdfYmxvY2tfZHVtcChhcCwgYnVmLCBBX1RQX0lOX0NPTkZJRywgQV9UUF9UWF9EUk9QX0NPVU5UKTsKKwlyZWdfYmxvY2tfZHVtcChhcCwgYnVmLCBBX1JBVF9ST1VURV9DT05UUk9MLCBBX1JBVF9JTlRSX0NBVVNFKTsKKwlyZWdfYmxvY2tfZHVtcChhcCwgYnVmLCBBX0NTUElfUlhfQUVfV00sIEFfQ1NQSV9JTlRSX0VOQUJMRSk7CisJcmVnX2Jsb2NrX2R1bXAoYXAsIGJ1ZiwgQV9FU1BJX1NDSF9UT0tFTjAsIEFfRVNQSV9HT1NUQVQpOworCXJlZ19ibG9ja19kdW1wKGFwLCBidWYsIEFfVUxQX1VMSU1JVCwgQV9VTFBfUElPX0NUUkwpOworCXJlZ19ibG9ja19kdW1wKGFwLCBidWYsIEFfUExfRU5BQkxFLCBBX1BMX0NBVVNFKTsKKwlyZWdfYmxvY2tfZHVtcChhcCwgYnVmLCBBX01DNV9DT05GSUcsIEFfTUM1X01BU0tfV1JJVEVfQ01EKTsKIH0KIAogc3RhdGljIGludCBnZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCkBAIC01MzksMTIgKzU3NCwxMiBAQAogCQljbWQtPmR1cGxleCA9IC0xOwogCX0KIAotICAgICAgICBjbWQtPnBvcnQgPSAoY21kLT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfVFApID8gUE9SVF9UUCA6IFBPUlRfRklCUkU7Ci0gICAgICAgIGNtZC0+cGh5X2FkZHJlc3MgPSBwLT5waHktPmFkZHI7Ci0gICAgICAgIGNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOwotICAgICAgICBjbWQtPmF1dG9uZWcgPSBwLT5saW5rX2NvbmZpZy5hdXRvbmVnOwotICAgICAgICBjbWQtPm1heHR4cGt0ID0gMDsKLSAgICAgICAgY21kLT5tYXhyeHBrdCA9IDA7CisJY21kLT5wb3J0ID0gKGNtZC0+c3VwcG9ydGVkICYgU1VQUE9SVEVEX1RQKSA/IFBPUlRfVFAgOiBQT1JUX0ZJQlJFOworCWNtZC0+cGh5X2FkZHJlc3MgPSBwLT5waHktPmFkZHI7CisJY21kLT50cmFuc2NlaXZlciA9IFhDVlJfRVhURVJOQUw7CisJY21kLT5hdXRvbmVnID0gcC0+bGlua19jb25maWcuYXV0b25lZzsKKwljbWQtPm1heHR4cGt0ID0gMDsKKwljbWQtPm1heHJ4cGt0ID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzE1LDcgKzc1MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgRlVMTF9JTklUX0RPTkUpCi0gICAgICAgIHJldHVybiAtRUJVU1k7CisJcmV0dXJuIC1FQlVTWTsKIAogCWFkYXB0ZXItPnBhcmFtcy5zZ2UuZnJlZWxRX3NpemVbIWp1bWJvX2ZsXSA9IGUtPnJ4X3BlbmRpbmc7CiAJYWRhcHRlci0+cGFyYW1zLnNnZS5mcmVlbFFfc2l6ZVtqdW1ib19mbF0gPSBlLT5yeF9qdW1ib19wZW5kaW5nOwpAQCAtNzU5LDcgKzc5NCw5IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByZXR1cm4gRUVQUk9NX1NJWkU7CisgCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gZGV2LT5wcml2OworCisgCXJldHVybiB0MV9pc19hc2ljKGFkYXB0ZXIpID8gRUVQUk9NX1NJWkUgOiAwOwogfQogCiAjZGVmaW5lIEVFUFJPTV9NQUdJQyhhcCkgXApAQCAtODA5LDQ3ICs4NDYsMzYgQEAKIAkuc2V0X3RzbyAgICAgICAgICAgPSBzZXRfdHNvLAogfTsKIAotc3RhdGljIHZvaWQgY3hnYl9wcm9jX2NsZWFudXAoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyKQotewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JbmFtZSA9IGFkYXB0ZXItPm5hbWU7Ci0JcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgZGlyKTsKLX0KLS8vI2RlZmluZSBjaHRvZV9zZXR1cF90b2VkZXYoYWRhcHRlcikgTlVMTAotI2RlZmluZSB1cGRhdGVfbXR1X3RhYihhZGFwdGVyKQotI2RlZmluZSB3cml0ZV9zbXRfZW50cnkoYWRhcHRlciwgaWR4KQotCiBzdGF0aWMgaW50IHQxX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcmVxLCBpbnQgY21kKQogewotICAgICAgICBzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKLSAgICAgICAgc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJlcSk7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPnByaXY7CisJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJlcSk7CiAKIAlzd2l0Y2ggKGNtZCkgewotICAgICAgICBjYXNlIFNJT0NHTUlJUEhZOgotICAgICAgICAgICAgICAgIGRhdGEtPnBoeV9pZCA9IGFkYXB0ZXItPnBvcnRbZGV2LT5pZl9wb3J0XS5waHktPmFkZHI7Ci0gICAgICAgICAgICAgICAgLyogRkFMTFRIUlUgKi8KLSAgICAgICAgY2FzZSBTSU9DR01JSVJFRzogeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCWRhdGEtPnBoeV9pZCA9IGFkYXB0ZXItPnBvcnRbZGV2LT5pZl9wb3J0XS5waHktPmFkZHI7CisJCS8qIEZBTExUSFJVICovCisJY2FzZSBTSU9DR01JSVJFRzogewogCQlzdHJ1Y3QgY3BoeSAqcGh5ID0gYWRhcHRlci0+cG9ydFtkZXYtPmlmX3BvcnRdLnBoeTsKIAkJdTMyIHZhbDsKIAogCQlpZiAoIXBoeS0+bWRpb19yZWFkKQotICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworCSAgICByZXR1cm4gLUVPUE5PVFNVUFA7CiAJCXBoeS0+bWRpb19yZWFkKGFkYXB0ZXIsIGRhdGEtPnBoeV9pZCwgMCwgZGF0YS0+cmVnX251bSAmIDB4MWYsCiAJCQkgICAgICAgJnZhbCk7Ci0gICAgICAgICAgICAgICAgZGF0YS0+dmFsX291dCA9IHZhbDsKLSAgICAgICAgICAgICAgICBicmVhazsKKwkJZGF0YS0+dmFsX291dCA9IHZhbDsKKwkJYnJlYWs7CiAJfQotICAgICAgICBjYXNlIFNJT0NTTUlJUkVHOiB7CisJY2FzZSBTSU9DU01JSVJFRzogewogCQlzdHJ1Y3QgY3BoeSAqcGh5ID0gYWRhcHRlci0+cG9ydFtkZXYtPmlmX3BvcnRdLnBoeTsKIAotICAgICAgICAgICAgICAgIGlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUEVSTTsKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQkgICAgcmV0dXJuIC1FUEVSTTsKIAkJaWYgKCFwaHktPm1kaW9fd3JpdGUpCi0gICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisJICAgIHJldHVybiAtRU9QTk9UU1VQUDsKIAkJcGh5LT5tZGlvX3dyaXRlKGFkYXB0ZXIsIGRhdGEtPnBoeV9pZCwgMCwgZGF0YS0+cmVnX251bSAmIDB4MWYsCiAJCQkgICAgICAgIGRhdGEtPnZhbF9pbik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCX0KIAogCWRlZmF1bHQ6CkBAIC04NjUsOSArODkxLDkgQEAKIAlzdHJ1Y3QgY21hYyAqbWFjID0gYWRhcHRlci0+cG9ydFtkZXYtPmlmX3BvcnRdLm1hYzsKIAogCWlmICghbWFjLT5vcHMtPnNldF9tdHUpCi0gICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKG5ld19tdHUgPCA2OCkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKChyZXQgPSBtYWMtPm9wcy0+c2V0X210dShtYWMsIG5ld19tdHUpKSkKIAkJcmV0dXJuIHJldDsKIAlkZXYtPm10dSA9IG5ld19tdHU7CkBAIC05MTgsNyArOTQ0LDcgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICAgICAgdDFfc2VsZWN0X2ludHJfaGFuZGxlcihhZGFwdGVyKShhZGFwdGVyLT5wZGV2LT5pcnEsIGFkYXB0ZXIpOworCXQxX3NlbGVjdF9pbnRyX2hhbmRsZXIoYWRhcHRlcikoYWRhcHRlci0+cGRldi0+aXJxLCBhZGFwdGVyKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAjZW5kaWYKQEAgLTk1NSwxNCArOTgxLDE0IEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOwogCi0JZWxtZXIwX2V4dF9pbnRyX2hhbmRsZXIoYWRhcHRlcik7CisJdDFfZWxtZXIwX2V4dF9pbnRyX2hhbmRsZXIoYWRhcHRlcik7CiAKIAkvKiBOb3cgcmVlbmFibGUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwogCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPmFzeW5jX2xvY2spOwogCWFkYXB0ZXItPnNsb3dfaW50cl9tYXNrIHw9IEZfUExfSU5UUl9FWFQ7CiAJd3JpdGVsKEZfUExfSU5UUl9FWFQsIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0NBVVNFKTsKIAl3cml0ZWwoYWRhcHRlci0+c2xvd19pbnRyX21hc2sgfCBGX1BMX0lOVFJfU0dFX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmVncyArIEFfUExfRU5BQkxFKTsKKwkJICAgYWRhcHRlci0+cmVncyArIEFfUExfRU5BQkxFKTsKIAlzcGluX3VubG9ja19pcnEoJmFkYXB0ZXItPmFzeW5jX2xvY2spOwogfQogCkBAIC05NzgsNyArMTAwNCw3IEBACiAJICovCiAJYWRhcHRlci0+c2xvd19pbnRyX21hc2sgJj0gfkZfUExfSU5UUl9FWFQ7CiAJd3JpdGVsKGFkYXB0ZXItPnNsb3dfaW50cl9tYXNrIHwgRl9QTF9JTlRSX1NHRV9EQVRBLAotICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisJCSAgIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CiAJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+ZXh0X2ludHJfaGFuZGxlcl90YXNrKTsKIH0KIApAQCAtMTAxMSw3ICsxMDM3LDcgQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCi0gICAgICAgIHJldHVybiBlcnI7CisJCXJldHVybiBlcnI7CiAKIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKIAkJQ0hfRVJSKCIlczogY2Fubm90IGZpbmQgUENJIGRldmljZSBtZW1vcnkgYmFzZSBhZGRyZXNzXG4iLApAQCAtMTA0Myw3ICsxMDY5LDcgQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0gICAgbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAliaSA9IHQxX2dldF9ib2FyZF9pbmZvKGVudC0+ZHJpdmVyX2RhdGEpOwogCkBAIC0xMDgxLDIxICsxMTA3LDE1IEBACiAJCQlhZGFwdGVyLT5tc2dfZW5hYmxlID0gZGZsdF9tc2dfZW5hYmxlOwogCQkJYWRhcHRlci0+bW1pb19sZW4gPSBtbWlvX2xlbjsKIAotCQkJaW5pdF9NVVRFWCgmYWRhcHRlci0+bWliX211dGV4KTsKIAkJCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50cGlfbG9jayk7CiAJCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+d29ya19sb2NrKTsKIAkJCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5hc3luY19sb2NrKTsKKwkJCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5tYWNfbG9jayk7CiAKIAkJCUlOSVRfV09SSygmYWRhcHRlci0+ZXh0X2ludHJfaGFuZGxlcl90YXNrLAogCQkJCSAgZXh0X2ludHJfdGFzaywgYWRhcHRlcik7CiAJCQlJTklUX1dPUksoJmFkYXB0ZXItPnN0YXRzX3VwZGF0ZV90YXNrLCBtYWNfc3RhdHNfdGFzaywKIAkJCQkgIGFkYXB0ZXIpOwotI2lmZGVmIHdvcmtfc3RydWN0Ci0JCQlpbml0X3RpbWVyKCZhZGFwdGVyLT5zdGF0c191cGRhdGVfdGltZXIpOwotCQkJYWRhcHRlci0+c3RhdHNfdXBkYXRlX3RpbWVyLmZ1bmN0aW9uID0gbWFjX3N0YXRzX3RpbWVyOwotCQkJYWRhcHRlci0+c3RhdHNfdXBkYXRlX3RpbWVyLmRhdGEgPQotCQkJCSh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7Ci0jZW5kaWYKIAogCQkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CiAJCX0KQEAgLTExMjIsMTYgKzExNDIsMTkgQEAKIAkJCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IHZsYW5fcnhfcmVnaXN0ZXI7CiAJCQluZXRkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSB2bGFuX3J4X2tpbGxfdmlkOwogI2VuZGlmCi0JCQlhZGFwdGVyLT5mbGFncyB8PSBUU09fQ0FQQUJMRTsKLQkJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisKKwkJCS8qIFQyMDQ6IGRpc2FibGUgVFNPICovCisJCQlpZiAoIShpc19UMihhZGFwdGVyKSkgfHwgYmktPnBvcnRfbnVtYmVyICE9IDQpIHsKKwkJCQlhZGFwdGVyLT5mbGFncyB8PSBUU09fQ0FQQUJMRTsKKwkJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCQkJfQogCQl9CiAKIAkJbmV0ZGV2LT5vcGVuID0gY3hnYl9vcGVuOwogCQluZXRkZXYtPnN0b3AgPSBjeGdiX2Nsb3NlOwogCQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHQxX3N0YXJ0X3htaXQ7CiAJCW5ldGRldi0+aGFyZF9oZWFkZXJfbGVuICs9IChhZGFwdGVyLT5mbGFncyAmIFRTT19DQVBBQkxFKSA/Ci0JCQlzaXplb2Yoc3RydWN0IGNwbF90eF9wa3RfbHNvKSA6Ci0JCQlzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpOworCQkJc2l6ZW9mKHN0cnVjdCBjcGxfdHhfcGt0X2xzbykgOiBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpOwogCQluZXRkZXYtPmdldF9zdGF0cyA9IHQxX2dldF9zdGF0czsKIAkJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB0MV9zZXRfcnhtb2RlOwogCQluZXRkZXYtPmRvX2lvY3RsID0gdDFfaW9jdGw7CkBAIC0xMTQyLDcgKzExNjUsNyBAQAogI2VuZGlmCiAJCW5ldGRldi0+d2VpZ2h0ID0gNjQ7CiAKLSAgICAgICAgU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJnQxX2V0aHRvb2xfb3BzKTsKKwkJU0VUX0VUSFRPT0xfT1BTKG5ldGRldiwgJnQxX2V0aHRvb2xfb3BzKTsKIAl9CiAKIAlpZiAodDFfaW5pdF9zd19tb2R1bGVzKGFkYXB0ZXIsIGJpKSA8IDApIHsKQEAgLTExNjksNyArMTE5Miw3IEBACiAJCQlpZiAoIWFkYXB0ZXItPnJlZ2lzdGVyZWRfZGV2aWNlX21hcCkKIAkJCQlhZGFwdGVyLT5uYW1lID0gYWRhcHRlci0+cG9ydFtpXS5kZXYtPm5hbWU7CiAKLSAgICAgICAgICAgICAgICBfX3NldF9iaXQoaSwgJmFkYXB0ZXItPnJlZ2lzdGVyZWRfZGV2aWNlX21hcCk7CisJCQlfX3NldF9iaXQoaSwgJmFkYXB0ZXItPnJlZ2lzdGVyZWRfZGV2aWNlX21hcCk7CiAJCX0KIAl9CiAJaWYgKCFhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApIHsKQEAgLTExODIsMTggKzEyMDUsMjggQEAKIAkgICAgICAgYmktPmRlc2MsIGFkYXB0ZXItPnBhcmFtcy5jaGlwX3JldmlzaW9uLAogCSAgICAgICBhZGFwdGVyLT5wYXJhbXMucGNpLmlzX3BjaXggPyAiUENJWCIgOiAiUENJIiwKIAkgICAgICAgYWRhcHRlci0+cGFyYW1zLnBjaS5zcGVlZCwgYWRhcHRlci0+cGFyYW1zLnBjaS53aWR0aCk7CisKKwkvKgorCSAqIFNldCB0aGUgVDFCIEFTSUMgYW5kIG1lbW9yeSBjbG9ja3MuCisJICovCisJaWYgKHQxcG93ZXJzYXZlKQorCQlhZGFwdGVyLT50MXBvd2Vyc2F2ZSA9IExDTE9DSzsJLyogSFcgZGVmYXVsdCBpcyBwb3dlcnNhdmUgbW9kZS4gKi8KKwllbHNlCisJCWFkYXB0ZXItPnQxcG93ZXJzYXZlID0gSENMT0NLOworCWlmICh0MV9pc19UMUIoYWRhcHRlcikpCisJCXQxX2Nsb2NrKGFkYXB0ZXIsIHQxcG93ZXJzYXZlKTsKKwogCXJldHVybiAwOwogCiAgb3V0X3JlbGVhc2VfYWRhcHRlcl9yZXM6CiAJdDFfZnJlZV9zd19tb2R1bGVzKGFkYXB0ZXIpOwogIG91dF9mcmVlX2RldjoKIAlpZiAoYWRhcHRlcikgewotCQlpZiAoYWRhcHRlci0+cmVncykgaW91bm1hcChhZGFwdGVyLT5yZWdzKTsKKwkJaWYgKGFkYXB0ZXItPnJlZ3MpCisJCQlpb3VubWFwKGFkYXB0ZXItPnJlZ3MpOwogCQlmb3IgKGkgPSBiaS0+cG9ydF9udW1iZXIgLSAxOyBpID49IDA7IC0taSkKLQkJCWlmIChhZGFwdGVyLT5wb3J0W2ldLmRldikgewotCQkJCWN4Z2JfcHJvY19jbGVhbnVwKGFkYXB0ZXIsIHByb2Nfcm9vdF9kcml2ZXIpOwotCQkJCWtmcmVlKGFkYXB0ZXItPnBvcnRbaV0uZGV2KTsKLQkJCX0KKwkJCWlmIChhZGFwdGVyLT5wb3J0W2ldLmRldikKKwkJCQlmcmVlX25ldGRldihhZGFwdGVyLT5wb3J0W2ldLmRldik7CiAJfQogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAgb3V0X2Rpc2FibGVfcGRldjoKQEAgLTEyMDIsNiArMTIzNSwxNTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBiaXRfYmFuZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGJpdGRhdGEsIGludCBuYml0cykKK3sKKwlpbnQgZGF0YTsKKwlpbnQgaTsKKwl1MzIgdmFsOworCisJZW51bSB7CisJCVNfQ0xPQ0sgPSAxIDw8IDMsCisJCVNfREFUQSA9IDEgPDwgNAorCX07CisKKwlmb3IgKGkgPSAobmJpdHMgLSAxKTsgaSA+IC0xOyBpLS0pIHsKKworCQl1ZGVsYXkoNTApOworCisJCWRhdGEgPSAoKGJpdGRhdGEgPj4gaSkgJiAweDEpOworCQlfX3QxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisKKwkJaWYgKGRhdGEpCisJCQl2YWwgfD0gU19EQVRBOworCQllbHNlCisJCQl2YWwgJj0gflNfREFUQTsKKworCQl1ZGVsYXkoNTApOworCisJCS8qIFNldCBTQ0xPQ0sgbG93ICovCisJCXZhbCAmPSB+U19DTE9DSzsKKwkJX190MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCisJCXVkZWxheSg1MCk7CisKKwkJLyogV3JpdGUgU0NMT0NLIGhpZ2ggKi8KKwkJdmFsIHw9IFNfQ0xPQ0s7CisJCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgdmFsKTsKKworCX0KK30KKworc3RhdGljIGludCB0MV9jbG9jayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IG1vZGUpCit7CisJdTMyIHZhbDsKKwlpbnQgTV9DT1JFX1ZBTDsKKwlpbnQgTV9NRU1fVkFMOworCisJZW51bSB7CisJCU1fQ09SRV9CSVRTID0gOSwKKwkJVF9DT1JFX1ZBTCA9IDAsCisJCVRfQ09SRV9CSVRTID0gMiwKKwkJTl9DT1JFX1ZBTCA9IDAsCisJCU5fQ09SRV9CSVRTID0gMiwKKwkJTV9NRU1fQklUUyA9IDksCisJCVRfTUVNX1ZBTCA9IDAsCisJCVRfTUVNX0JJVFMgPSAyLAorCQlOX01FTV9WQUwgPSAwLAorCQlOX01FTV9CSVRTID0gMiwKKwkJTlBfTE9BRCA9IDEgPDwgMTcsCisJCVNfTE9BRF9NRU0gPSAxIDw8IDUsCisJCVNfTE9BRF9DT1JFID0gMSA8PCA2LAorCQlTX0NMT0NLID0gMSA8PCAzCisJfTsKKworCWlmICghdDFfaXNfVDFCKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVOT0RFVjsJLyogQ2FuJ3QgcmUtY2xvY2sgdGhpcyBjaGlwLiAqLworCisJaWYgKG1vZGUgJiAyKSB7CisJCXJldHVybiAwOwkvKiBzaG93IGN1cnJlbnQgbW9kZS4gKi8KKwl9CisKKwlpZiAoKGFkYXB0ZXItPnQxcG93ZXJzYXZlICYgMSkgPT0gKG1vZGUgJiAxKSkKKwkJcmV0dXJuIC1FQUxSRUFEWTsJLyogQVNJQyBhbHJlYWR5IHJ1bm5pbmcgaW4gbW9kZS4gKi8KKworCWlmICgobW9kZSAmIDEpID09IEhDTE9DSykgeworCQlNX0NPUkVfVkFMID0gMHgxNDsKKwkJTV9NRU1fVkFMID0gMHgxODsKKwkJYWRhcHRlci0+dDFwb3dlcnNhdmUgPSBIQ0xPQ0s7CS8qIG92ZXJjbG9jayAqLworCX0gZWxzZSB7CisJCU1fQ09SRV9WQUwgPSAweGU7CisJCU1fTUVNX1ZBTCA9IDB4MTA7CisJCWFkYXB0ZXItPnQxcG93ZXJzYXZlID0gTENMT0NLOwkvKiB1bmRlcmNsb2NrICovCisJfQorCisJLyogRG9uJ3QgaW50ZXJydXB0IHRoaXMgc2VyaWFsIHN0cmVhbSEgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKKworCS8qIEluaXRpYWxpemUgZm9yIEFTSUMgY29yZSAqLworCV9fdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmdmFsKTsKKwl2YWwgfD0gTlBfTE9BRDsKKwl1ZGVsYXkoNTApOworCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgdmFsKTsKKwl1ZGVsYXkoNTApOworCV9fdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmdmFsKTsKKwl2YWwgJj0gflNfTE9BRF9DT1JFOworCXZhbCAmPSB+U19DTE9DSzsKKwlfX3QxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIHZhbCk7CisJdWRlbGF5KDUwKTsKKworCS8qIFNlcmlhbCBwcm9ncmFtIHRoZSBBU0lDIGNsb2NrIHN5bnRoZXNpemVyICovCisJYml0X2JhbmcoYWRhcHRlciwgVF9DT1JFX1ZBTCwgVF9DT1JFX0JJVFMpOworCWJpdF9iYW5nKGFkYXB0ZXIsIE5fQ09SRV9WQUwsIE5fQ09SRV9CSVRTKTsKKwliaXRfYmFuZyhhZGFwdGVyLCBNX0NPUkVfVkFMLCBNX0NPUkVfQklUUyk7CisJdWRlbGF5KDUwKTsKKworCS8qIEZpbmlzaCBBU0lDIGNvcmUgKi8KKwlfX3QxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJdmFsIHw9IFNfTE9BRF9DT1JFOworCXVkZWxheSg1MCk7CisJX190MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCXVkZWxheSg1MCk7CisJX190MV90cGlfcmVhZChhZGFwdGVyLCBBX0VMTUVSMF9HUE8sICZ2YWwpOworCXZhbCAmPSB+U19MT0FEX0NPUkU7CisJdWRlbGF5KDUwKTsKKwlfX3QxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIHZhbCk7CisJdWRlbGF5KDUwKTsKKworCS8qIEluaXRpYWxpemUgZm9yIG1lbW9yeSAqLworCV9fdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmdmFsKTsKKwl2YWwgfD0gTlBfTE9BRDsKKwl1ZGVsYXkoNTApOworCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgdmFsKTsKKwl1ZGVsYXkoNTApOworCV9fdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmdmFsKTsKKwl2YWwgJj0gflNfTE9BRF9NRU07CisJdmFsICY9IH5TX0NMT0NLOworCXVkZWxheSg1MCk7CisJX190MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCXVkZWxheSg1MCk7CisKKwkvKiBTZXJpYWwgcHJvZ3JhbSB0aGUgbWVtb3J5IGNsb2NrIHN5bnRoZXNpemVyICovCisJYml0X2JhbmcoYWRhcHRlciwgVF9NRU1fVkFMLCBUX01FTV9CSVRTKTsKKwliaXRfYmFuZyhhZGFwdGVyLCBOX01FTV9WQUwsIE5fTUVNX0JJVFMpOworCWJpdF9iYW5nKGFkYXB0ZXIsIE1fTUVNX1ZBTCwgTV9NRU1fQklUUyk7CisJdWRlbGF5KDUwKTsKKworCS8qIEZpbmlzaCBtZW1vcnkgKi8KKwlfX3QxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJdmFsIHw9IFNfTE9BRF9NRU07CisJdWRlbGF5KDUwKTsKKwlfX3QxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIHZhbCk7CisJdWRlbGF5KDUwKTsKKwlfX3QxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJdmFsICY9IH5TX0xPQURfTUVNOworCXVkZWxheSg1MCk7CisJX190MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdDFfc3dfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBBX1BDSUNGR19QTV9DU1IsIDMpOwpAQCAtMTIyMywxMCArMTQwNSw5IEBACiAJCXQxX2ZyZWVfc3dfbW9kdWxlcyhhZGFwdGVyKTsKIAkJaW91bm1hcChhZGFwdGVyLT5yZWdzKTsKIAkJd2hpbGUgKC0taSA+PSAwKQotCQkJaWYgKGFkYXB0ZXItPnBvcnRbaV0uZGV2KSB7Ci0JCQkJY3hnYl9wcm9jX2NsZWFudXAoYWRhcHRlciwgcHJvY19yb290X2RyaXZlcik7Ci0JCQkJa2ZyZWUoYWRhcHRlci0+cG9ydFtpXS5kZXYpOwotCQkJfQorCQkJaWYgKGFkYXB0ZXItPnBvcnRbaV0uZGV2KQorCQkJCWZyZWVfbmV0ZGV2KGFkYXB0ZXItPnBvcnRbaV0uZGV2KTsKKwogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZWxtZXIwLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL2VsbWVyMC5oCmluZGV4IDU1OTBjYjIuLjllYmVjYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZWxtZXIwLmgKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9lbG1lcjAuaApAQCAtMzksNiArMzksMTIgQEAKICNpZm5kZWYgX0NYR0JfRUxNRVIwX0hfCiAjZGVmaW5lIF9DWEdCX0VMTUVSMF9IXwogCisvKiBFTE1FUjAgZmxhdm9ycyAqLworZW51bSB7CisJRUxNRVIwX1hDMlMzMDBFXzZGVDI1Nl9DLAorCUVMTUVSMF9YQzJTMTAwRV82VFExNDRfQworfTsKKwogLyogRUxNRVIwIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBX0VMTUVSMF9WRVJTSU9OIDB4MTAwMDAwCiAjZGVmaW5lIEFfRUxNRVIwX1BIWV9DRkcgMHgxMDAwMDQKQEAgLTE0OSwzICsxNTUsNCBAQAogI2RlZmluZSBNSTFfT1BfSU5ESVJFQ1RfUkVBRCAgICAgMwogCiAjZW5kaWYgLyogX0NYR0JfRUxNRVIwX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9lc3BpLmMKaW5kZXggNTQyZTVlMC4uNDE5MmYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9lc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9lc3BpLmMKQEAgLTgxLDQ2ICs4MSwzNiBAQAogCXJldHVybiBidXN5OwogfQogCi0vKiAxLiBEZWFzc2VydCByeF9yZXNldF9jb3JlLiAqLwotLyogMi4gUHJvZ3JhbSBUUklDTl9DTkZHIHJlZ2lzdGVycy4gKi8KLS8qIDMuIERlYXNzZXJ0IHJ4X3Jlc2V0X2xpbmsgKi8KIHN0YXRpYyBpbnQgdHJpY25faW5pdChhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0JaW50ICAgICBpICAgICAgICAgICAgICAgPSAwOwotCWludCAgICAgc3RhdCAgICAgICAgICAgID0gMDsKLQlpbnQgICAgIHRpbWVvdXQgICAgICAgICA9IDA7Ci0JaW50ICAgICBpc19yZWFkeSAgICAgICAgPSAwOworCWludCBpLCBzbWUgPSAxOwogCi0JLyogMSAqLwotCXRpbWVvdXQ9MTAwMDsKLQlkbyB7Ci0JCXN0YXQgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX1JFU0VUKTsKLQkJaXNfcmVhZHkgPSAoc3RhdCAmIDB4NCk7Ci0JCXRpbWVvdXQtLTsKLQkJdWRlbGF5KDUpOwotCX0gd2hpbGUgKCFpc19yZWFkeSB8fCAodGltZW91dD09MCkpOwotCXdyaXRlbCgweDIsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfUlhfUkVTRVQpOwotCWlmICh0aW1lb3V0PT0wKQotCXsKLQkJQ0hfRVJSKCJFU1BJIDogRVJST1IgOiBUaW1lb3V0IHRyaWNuX2luaXQoKSBcbiIpOwotCQl0MV9mYXRhbF9lcnIoYWRhcHRlcik7CisJaWYgKCEocmVhZGwoYWRhcHRlci0+cmVncyArIEFfRVNQSV9SWF9SRVNFVCkgICYgRl9SWF9DTEtfU1RBVFVTKSkgeworCQlDSF9FUlIoIiVzOiBFU1BJIGNsb2NrIG5vdCByZWFkeVxuIiwgYWRhcHRlci0+bmFtZSk7CisJCXJldHVybiAtMTsKIAl9CiAKLQkvKiAyICovCi0JdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMCwgMCwgVFJJQ05fQ05GRywgMHg4MSk7Ci0JdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMSwgMCwgVFJJQ05fQ05GRywgMHg4MSk7Ci0JdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMiwgMCwgVFJJQ05fQ05GRywgMHg4MSk7Ci0JZm9yIChpPTE7IGk8PSA4OyBpKyspIHRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDAsIGksIFRSSUNOX0NORkcsIDB4ZjEpOwotCWZvciAoaT0xOyBpPD0gMjsgaSsrKSB0cmljbl93cml0ZShhZGFwdGVyLCAwLCAxLCBpLCBUUklDTl9DTkZHLCAweGYxKTsKLQlmb3IgKGk9MTsgaTw9IDM7IGkrKykgdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMiwgaSwgVFJJQ05fQ05GRywgMHhlMSk7Ci0JZm9yIChpPTQ7IGk8PSA0OyBpKyspIHRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIGksIFRSSUNOX0NORkcsIDB4ZjEpOwotCWZvciAoaT01OyBpPD0gNTsgaSsrKSB0cmljbl93cml0ZShhZGFwdGVyLCAwLCAyLCBpLCBUUklDTl9DTkZHLCAweGUxKTsKLQlmb3IgKGk9NjsgaTw9IDY7IGkrKykgdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMiwgaSwgVFJJQ05fQ05GRywgMHhmMSk7Ci0JZm9yIChpPTc7IGk8PSA3OyBpKyspIHRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIGksIFRSSUNOX0NORkcsIDB4ODApOwotCWZvciAoaT04OyBpPD0gODsgaSsrKSB0cmljbl93cml0ZShhZGFwdGVyLCAwLCAyLCBpLCBUUklDTl9DTkZHLCAweGYxKTsKKwl3cml0ZWwoRl9FU1BJX1JYX0NPUkVfUlNULCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX1JFU0VUKTsKIAotCS8qIDMgKi8KLQl3cml0ZWwoMHgzLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX1JFU0VUKTsKKwlpZiAoc21lKSB7CisJCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDAsIDAsIFRSSUNOX0NORkcsIDB4ODEpOworCQl0cmljbl93cml0ZShhZGFwdGVyLCAwLCAxLCAwLCBUUklDTl9DTkZHLCAweDgxKTsKKwkJdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMiwgMCwgVFJJQ05fQ05GRywgMHg4MSk7CisJfQorCWZvciAoaSA9IDE7IGkgPD0gODsgaSsrKQorCQl0cmljbl93cml0ZShhZGFwdGVyLCAwLCAwLCBpLCBUUklDTl9DTkZHLCAweGYxKTsKKwlmb3IgKGkgPSAxOyBpIDw9IDI7IGkrKykKKwkJdHJpY25fd3JpdGUoYWRhcHRlciwgMCwgMSwgaSwgVFJJQ05fQ05GRywgMHhmMSk7CisJZm9yIChpID0gMTsgaSA8PSAzOyBpKyspCisJCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIGksIFRSSUNOX0NORkcsIDB4ZTEpOworCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIDQsIFRSSUNOX0NORkcsIDB4ZjEpOworCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIDUsIFRSSUNOX0NORkcsIDB4ZTEpOworCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIDYsIFRSSUNOX0NORkcsIDB4ZjEpOworCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIDcsIFRSSUNOX0NORkcsIDB4ODApOworCXRyaWNuX3dyaXRlKGFkYXB0ZXIsIDAsIDIsIDgsIFRSSUNOX0NORkcsIDB4ZjEpOworCisJd3JpdGVsKEZfRVNQSV9SWF9DT1JFX1JTVCB8IEZfRVNQSV9SWF9MTktfUlNULAorCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX1JFU0VUKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQzLDYgKzEzMyw3IEBACiAKIHZvaWQgdDFfZXNwaV9pbnRyX2NsZWFyKHN0cnVjdCBwZWVzcGkgKmVzcGkpCiB7CisJcmVhZGwoZXNwaS0+YWRhcHRlci0+cmVncyArIEFfRVNQSV9ESVAyX0VSUl9DT1VOVCk7CiAJd3JpdGVsKDB4ZmZmZmZmZmYsIGVzcGktPmFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfSU5UUl9TVEFUVVMpOwogCXdyaXRlbChGX1BMX0lOVFJfRVNQSSwgZXNwaS0+YWRhcHRlci0+cmVncyArIEFfUExfQ0FVU0UpOwogfQpAQCAtMTU3LDcgKzE0OCw2IEBACiAKIGludCB0MV9lc3BpX2ludHJfaGFuZGxlcihzdHJ1Y3QgcGVlc3BpICplc3BpKQogewotCXUzMiBjbnQ7CiAJdTMyIHN0YXR1cyA9IHJlYWRsKGVzcGktPmFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfSU5UUl9TVEFUVVMpOwogCiAJaWYgKHN0YXR1cyAmIEZfRElQNEVSUikKQEAgLTE3Nyw3ICsxNjcsNyBAQAogCQkgKiBNdXN0IHJlYWQgdGhlIGVycm9yIGNvdW50IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQKIAkJICogdGhhdCBpdCBjYXVzZXMuCiAJCSAqLwotCQljbnQgPSByZWFkbChlc3BpLT5hZGFwdGVyLT5yZWdzICsgQV9FU1BJX0RJUDJfRVJSX0NPVU5UKTsKKwkJcmVhZGwoZXNwaS0+YWRhcHRlci0+cmVncyArIEFfRVNQSV9ESVAyX0VSUl9DT1VOVCk7CiAJfQogCiAJLyoKQEAgLTE5Miw3ICsxODIsNyBAQAogCiBjb25zdCBzdHJ1Y3QgZXNwaV9pbnRyX2NvdW50cyAqdDFfZXNwaV9nZXRfaW50cl9jb3VudHMoc3RydWN0IHBlZXNwaSAqZXNwaSkKIHsKLSAgICByZXR1cm4gJmVzcGktPmludHJfY250OworCXJldHVybiAmZXNwaS0+aW50cl9jbnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGVzcGlfc2V0dXBfZm9yX3BtMzM5MyhhZGFwdGVyX3QgKmFkYXB0ZXIpCkBAIC0yMTAsMTcgKzIwMCw0NSBAQAogCXdyaXRlbChWX1JYX05QT1JUUygxKSB8IFZfVFhfTlBPUlRTKDEpLCBhZGFwdGVyLT5yZWdzICsgQV9QT1JUX0NPTkZJRyk7CiB9CiAKLS8qIFQyIEluaXQgcGFydCAtLSAgKi8KLS8qIDEuIFNldCBUX0VTUElfTUlTQ0NUUkxfQUREUiAqLwotLyogMi4gSW5pdCBFU1BJIHJlZ2lzdGVycy4gKi8KLS8qIDMuIEluaXQgVHJpQ04gSGFyZCBNYWNybyAqLworc3RhdGljIHZvaWQgZXNwaV9zZXR1cF9mb3JfdnNjNzMyMShhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisgICAgICAgIHdyaXRlbCgweDFmNCwgYWRhcHRlci0+cmVncyArIEFfRVNQSV9TQ0hfVE9LRU4wKTsKKyAgICAgICAgd3JpdGVsKDB4MWY0MDFmNCwgYWRhcHRlci0+cmVncyArIEFfRVNQSV9TQ0hfVE9LRU4xKTsKKyAgICAgICAgd3JpdGVsKDB4MWY0LCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1NDSF9UT0tFTjIpOworCXdyaXRlbCgweGEwMCwgYWRhcHRlci0+cmVncyArIEFfRVNQSV9SWF9GSUZPX0FMTU9TVF9GVUxMX1dBVEVSTUFSSyk7CisJd3JpdGVsKDB4MWZmLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX0ZJRk9fQUxNT1NUX0VNUFRZX1dBVEVSTUFSSyk7CisJd3JpdGVsKDEsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfQ0FMRU5EQVJfTEVOR1RIKTsKKwl3cml0ZWwoVl9SWF9OUE9SVFMoNCkgfCBWX1RYX05QT1JUUyg0KSwgYWRhcHRlci0+cmVncyArIEFfUE9SVF9DT05GSUcpOworCisJd3JpdGVsKDB4MDgwMDAwMDgsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfVFJBSU4pOworfQorCisvKgorICogTm90ZSB0aGF0IFQxQiByZXF1aXJlcyBhdCBsZWFzdCAyIHBvcnRzIGZvciBJWEYxMDEwIGR1ZSB0byBhIEhXIGJ1Zy4KKyAqLworc3RhdGljIHZvaWQgZXNwaV9zZXR1cF9mb3JfaXhmMTAxMChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBucG9ydHMpCit7CisJd3JpdGVsKDEsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfQ0FMRU5EQVJfTEVOR1RIKTsKKwlpZiAobnBvcnRzID09IDQpIHsKKwkJaWYgKGlzX1QyKGFkYXB0ZXIpKSB7CisJCQl3cml0ZWwoMHhmMDAsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfUlhfRklGT19BTE1PU1RfRlVMTF9XQVRFUk1BUkspOworCQkJd3JpdGVsKDB4M2MwLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX0ZJRk9fQUxNT1NUX0VNUFRZX1dBVEVSTUFSSyk7CisJCX0gZWxzZSB7CisJCQl3cml0ZWwoMHg3ZmYsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfUlhfRklGT19BTE1PU1RfRlVMTF9XQVRFUk1BUkspOworCQkJd3JpdGVsKDB4MWZmLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX0ZJRk9fQUxNT1NUX0VNUFRZX1dBVEVSTUFSSyk7CisJCX0KKwl9IGVsc2UgeworCQl3cml0ZWwoMHgxZmZmLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX0ZJRk9fQUxNT1NUX0ZVTExfV0FURVJNQVJLKTsKKwkJd3JpdGVsKDB4N2ZmLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX0ZJRk9fQUxNT1NUX0VNUFRZX1dBVEVSTUFSSyk7CisJfQorCXdyaXRlbChWX1JYX05QT1JUUyhucG9ydHMpIHwgVl9UWF9OUE9SVFMobnBvcnRzKSwgYWRhcHRlci0+cmVncyArIEFfUE9SVF9DT05GSUcpOworCit9CisKIGludCB0MV9lc3BpX2luaXQoc3RydWN0IHBlZXNwaSAqZXNwaSwgaW50IG1hY190eXBlLCBpbnQgbnBvcnRzKQogewotCXUzMiBjbnQ7Ci0KIAl1MzIgc3RhdHVzX2VuYWJsZV9leHRyYSA9IDA7CiAJYWRhcHRlcl90ICphZGFwdGVyID0gZXNwaS0+YWRhcHRlcjsKLQl1MzIgc3RhdHVzLCBidXJzdHZhbCA9IDB4ODAwMTAwOwogCiAJLyogRGlzYWJsZSBFU1BJIHRyYWluaW5nLiAgTUFDcyB0aGF0IGNhbiBoYW5kbGUgaXQgZW5hYmxlIGl0IGJlbG93LiAqLwogCXdyaXRlbCgwLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1RSQUlOKTsKQEAgLTIyOSwzOCArMjQ3LDIwIEBACiAJCXdyaXRlbChWX09VVF9PRl9TWU5DX0NPVU5UKDQpIHwKIAkJICAgICAgIFZfRElQMl9QQVJJVFlfRVJSX1RIUkVTKDMpIHwKIAkJICAgICAgIFZfRElQNF9USFJFUygxKSwgYWRhcHRlci0+cmVncyArIEFfRVNQSV9NSVNDX0NPTlRST0wpOwotCQlpZiAobnBvcnRzID09IDQpIHsKLQkJCS8qIFQyMDQ6IG1heGJ1cnN0MSA9IDB4NDAsIG1heGJ1cnN0MiA9IDB4MjAgKi8KLQkJCWJ1cnN0dmFsID0gMHgyMDAwNDA7Ci0JCX0KLQl9Ci0Jd3JpdGVsKGJ1cnN0dmFsLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX01BWEJVUlNUMV9NQVhCVVJTVDIpOworICAgICAgICAJd3JpdGVsKG5wb3J0cyA9PSA0ID8gMHgyMDAwNDAgOiAweDEwMDAwODAsCisJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX01BWEJVUlNUMV9NQVhCVVJTVDIpOworCX0gZWxzZQorICAgICAgICAJd3JpdGVsKDB4ODAwMTAwLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX01BWEJVUlNUMV9NQVhCVVJTVDIpOwogCi0Jc3dpdGNoIChtYWNfdHlwZSkgewotCWNhc2UgQ0hCVF9NQUNfUE0zMzkzOgorCWlmIChtYWNfdHlwZSA9PSBDSEJUX01BQ19QTTMzOTMpCiAJCWVzcGlfc2V0dXBfZm9yX3BtMzM5MyhhZGFwdGVyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwllbHNlIGlmIChtYWNfdHlwZSA9PSBDSEJUX01BQ19WU0M3MzIxKQorCQllc3BpX3NldHVwX2Zvcl92c2M3MzIxKGFkYXB0ZXIpOworCWVsc2UgaWYgKG1hY190eXBlID09IENIQlRfTUFDX0lYRjEwMTApIHsKKwkJc3RhdHVzX2VuYWJsZV9leHRyYSA9IEZfSU5URUwxMDEwTU9ERTsKKwkJZXNwaV9zZXR1cF9mb3JfaXhmMTAxMChhZGFwdGVyLCBucG9ydHMpOworCX0gZWxzZQogCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoKLQkgKiBNYWtlIHN1cmUgYW55IHBlbmRpbmcgaW50ZXJydXB0cyBmcm9tIHRoZSBTUEkgYXJlCi0JICogQ2xlYXJlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIGludGVycnVwdC4KLQkgKi8KLQl3cml0ZWwoRVNQSV9JTlRSX01BU0ssIGVzcGktPmFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfSU5UUl9FTkFCTEUpOwotCXN0YXR1cyA9IHJlYWRsKGVzcGktPmFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfSU5UUl9TVEFUVVMpOwotCWlmIChzdGF0dXMgJiBGX0RJUDJQQVJJVFlFUlIpIHsKLQkJY250ID0gcmVhZGwoZXNwaS0+YWRhcHRlci0+cmVncyArIEFfRVNQSV9ESVAyX0VSUl9DT1VOVCk7Ci0JfQotCi0JLyoKLQkgKiBGb3IgVDFCIHdlIG5lZWQgdG8gd3JpdGUgMSB0byBjbGVhciBFU1BJIGludGVycnVwdHMuICBGb3IgVDIrIHdlCi0JICogd3JpdGUgdGhlIHN0YXR1cyBhcyBpcy4KLQkgKi8KLQlpZiAoc3RhdHVzICYmIHQxX2lzX1QxQihlc3BpLT5hZGFwdGVyKSkKLQkJc3RhdHVzID0gMTsKLQl3cml0ZWwoc3RhdHVzLCBlc3BpLT5hZGFwdGVyLT5yZWdzICsgQV9FU1BJX0lOVFJfU1RBVFVTKTsKIAogCXdyaXRlbChzdGF0dXNfZW5hYmxlX2V4dHJhIHwgRl9SWFNUQVRVU0VOQUJMRSwKIAkgICAgICAgYWRhcHRlci0+cmVncyArIEFfRVNQSV9GSUZPX1NUQVRVU19FTkFCTEUpOwpAQCAtMjcxLDkgKzI3MSwxMSBAQAogCQkgKiBBbHdheXMgcG9zaXRpb24gdGhlIGNvbnRyb2wgYXQgdGhlIDFzdCBwb3J0IGVncmVzcyBJTgogCQkgKiAoc29wLGVvcCkgY291bnRlciB0byByZWR1Y2UgUElPcyBmb3IgVC9OMjEwIHdvcmthcm91bmQuCiAJCSAqLwotCQllc3BpLT5taXNjX2N0cmwgPSAocmVhZGwoYWRhcHRlci0+cmVncyArIEFfRVNQSV9NSVNDX0NPTlRST0wpCi0JCQkJICAgJiB+TU9OX01BU0spIHwgKEZfTU9OSVRPUkVEX0RJUkVDVElPTgotCQkJCSAgIHwgRl9NT05JVE9SRURfSU5URVJGQUNFKTsKKwkJZXNwaS0+bWlzY19jdHJsID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEFfRVNQSV9NSVNDX0NPTlRST0wpOworCQllc3BpLT5taXNjX2N0cmwgJj0gfk1PTl9NQVNLOworCQllc3BpLT5taXNjX2N0cmwgfD0gRl9NT05JVE9SRURfRElSRUNUSU9OOworCQlpZiAoYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9PSAxKQorCQkJZXNwaS0+bWlzY19jdHJsIHw9IEZfTU9OSVRPUkVEX0lOVEVSRkFDRTsKIAkJd3JpdGVsKGVzcGktPm1pc2NfY3RybCwgYWRhcHRlci0+cmVncyArIEFfRVNQSV9NSVNDX0NPTlRST0wpOwogCQlzcGluX2xvY2tfaW5pdCgmZXNwaS0+bG9jayk7CiAJfQpAQCAtMjk5LDggKzMwMSw3IEBACiB7CiAJc3RydWN0IHBlZXNwaSAqZXNwaSA9IGFkYXB0ZXItPmVzcGk7CiAKLQlpZiAoIWlzX1QyKGFkYXB0ZXIpKQotCQlyZXR1cm47CisJaWYgKCFpc19UMihhZGFwdGVyKSkgcmV0dXJuOwogCXNwaW5fbG9jaygmZXNwaS0+bG9jayk7CiAJZXNwaS0+bWlzY19jdHJsID0gKHZhbCAmIH5NT05fTUFTSykgfAogCQkJICAoZXNwaS0+bWlzY19jdHJsICYgTU9OX01BU0spOwpAQCAtMzEwLDI3ICszMTEsNjEgQEAKIAogdTMyIHQxX2VzcGlfZ2V0X21vbihhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCB3YWl0KQogewotCXUzMiBzZWw7Ci0KIAlzdHJ1Y3QgcGVlc3BpICplc3BpID0gYWRhcHRlci0+ZXNwaTsKKwl1MzIgc2VsOwogCiAJaWYgKCFpc19UMihhZGFwdGVyKSkKIAkJcmV0dXJuIDA7CisKIAlzZWwgPSBWX01PTklUT1JFRF9QT1JUX05VTSgoYWRkciAmIDB4M2MpID4+IDIpOwogCWlmICghd2FpdCkgewogCQlpZiAoIXNwaW5fdHJ5bG9jaygmZXNwaS0+bG9jaykpCiAJCQlyZXR1cm4gMDsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlzcGluX2xvY2soJmVzcGktPmxvY2spOworCiAJaWYgKChzZWwgIT0gKGVzcGktPm1pc2NfY3RybCAmIE1PTl9NQVNLKSkpIHsKIAkJd3JpdGVsKCgoZXNwaS0+bWlzY19jdHJsICYgfk1PTl9NQVNLKSB8IHNlbCksCiAJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX01JU0NfQ09OVFJPTCk7CiAJCXNlbCA9IHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfU0NIX1RPS0VOMyk7CiAJCXdyaXRlbChlc3BpLT5taXNjX2N0cmwsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfTUlTQ19DT05UUk9MKTsKLQl9Ci0JZWxzZQorCX0gZWxzZQogCQlzZWwgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1NDSF9UT0tFTjMpOwogCXNwaW5fdW5sb2NrKCZlc3BpLT5sb2NrKTsKIAlyZXR1cm4gc2VsOwogfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBmb3IgVDIwNCBvbmx5LgorICogY29tcGFyZSB3aXRoIHQxX2VzcGlfZ2V0X21vbigpLCBpdCByZWFkcyBlc3BpSW5UeFNvcFswIH4gM10gaW4KKyAqIG9uZSBzaG90LCBzaW5jZSB0aGVyZSBpcyBubyBwZXIgcG9ydCBjb3VudGVyIG9uIHRoZSBvdXQgc2lkZS4KKyAqLworaW50Cit0MV9lc3BpX2dldF9tb25fdDIwNChhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiAqdmFscCwgdTggd2FpdCkKK3sKKyAgICAgICAgc3RydWN0IHBlZXNwaSAqZXNwaSA9IGFkYXB0ZXItPmVzcGk7CisJdTggaSwgbnBvcnQgPSAodTgpYWRhcHRlci0+cGFyYW1zLm5wb3J0czsKKworICAgICAgICBpZiAoIXdhaXQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNwaW5fdHJ5bG9jaygmZXNwaS0+bG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmZXNwaS0+bG9jayk7CisKKwlpZiAoIChlc3BpLT5taXNjX2N0cmwgJiBNT05fTUFTSykgIT0gRl9NT05JVE9SRURfRElSRUNUSU9OICkgeworCQllc3BpLT5taXNjX2N0cmwgPSAoZXNwaS0+bWlzY19jdHJsICYgfk1PTl9NQVNLKSB8CisJCQkJCUZfTU9OSVRPUkVEX0RJUkVDVElPTjsKKyAgICAgICAgICAgICAgICB3cml0ZWwoZXNwaS0+bWlzY19jdHJsLCBhZGFwdGVyLT5yZWdzICsgQV9FU1BJX01JU0NfQ09OVFJPTCk7CisgCX0KKwlmb3IgKGkgPSAwIDsgaSA8IG5wb3J0OyBpKyssIHZhbHArKykgeworCQlpZiAoaSkgeworCQkJd3JpdGVsKGVzcGktPm1pc2NfY3RybCB8IFZfTU9OSVRPUkVEX1BPUlRfTlVNKGkpLAorCQkJICAgICAgIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfTUlTQ19DT05UUk9MKTsKKwkJfQorICAgICAgICAgICAgICAgICp2YWxwID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEFfRVNQSV9TQ0hfVE9LRU4zKTsKKyAgICAgICAgfQorCisgICAgICAgIHdyaXRlbChlc3BpLT5taXNjX2N0cmwsIGFkYXB0ZXItPnJlZ3MgKyBBX0VTUElfTUlTQ19DT05UUk9MKTsKKyAgICAgICAgc3Bpbl91bmxvY2soJmVzcGktPmxvY2spOworICAgICAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9lc3BpLmgKaW5kZXggYzkwZTM3Zi4uODRmMmM5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9lc3BpLmgKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9lc3BpLmgKQEAgLTY0LDUgKzY0LDYgQEAKIAogdm9pZCB0MV9lc3BpX3NldF9taXNjX2N0cmwoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgdmFsKTsKIHUzMiB0MV9lc3BpX2dldF9tb24oYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTggd2FpdCk7CitpbnQgdDFfZXNwaV9nZXRfbW9uX3QyMDQoYWRhcHRlcl90ICosIHUzMiAqLCB1OCk7CiAKICNlbmRpZiAvKiBfQ1hHQl9FU1BJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2ZwZ2FfZGVmcy5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9mcGdhX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2EzYzJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9mcGdhX2RlZnMuaApAQCAtMCwwICsxLDIzMiBAQAorLyogJERhdGU6IDIwMDUvMDMvMDcgMjM6NTk6MDUgJCAkUkNTZmlsZTogZnBnYV9kZWZzLmgsdiAkICRSZXZpc2lvbjogMS40ICQgKi8KKworLyoKKyAqIEZQR0Egc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fQ0hFTFNJT19GUEdBX0RFRlNfSF9fCisjZGVmaW5lIF9fQ0hFTFNJT19GUEdBX0RFRlNfSF9fCisKKyNkZWZpbmUgRlBHQV9QQ0lYX0FERFJfVkVSU0lPTiAgICAgICAgICAgICAgIDB4QTA4CisjZGVmaW5lIEZQR0FfUENJWF9BRERSX1NUQVQgICAgICAgICAgICAgICAgICAweEEwQworCisvKiBGUEdBIG1hc3RlciBpbnRlcnJ1cHQgQ2F1c2UvRW5hYmxlIGJpdHMgKi8KKyNkZWZpbmUgRlBHQV9QQ0lYX0lOVEVSUlVQVF9TR0VfRVJST1IgICAgICAgIDB4MQorI2RlZmluZSBGUEdBX1BDSVhfSU5URVJSVVBUX1NHRV9EQVRBICAgICAgICAgMHgyCisjZGVmaW5lIEZQR0FfUENJWF9JTlRFUlJVUFRfVFAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgRlBHQV9QQ0lYX0lOVEVSUlVQVF9NQzMgICAgICAgICAgICAgIDB4OAorI2RlZmluZSBGUEdBX1BDSVhfSU5URVJSVVBUX0dNQUMgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBGUEdBX1BDSVhfSU5URVJSVVBUX1BDSVggICAgICAgICAgICAgMHgyMAorCisvKiBUUCBpbnRlcnJ1cHQgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisjZGVmaW5lIEZQR0FfVFBfQUREUl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAweEExMAorI2RlZmluZSBGUEdBX1RQX0FERFJfSU5URVJSVVBUX0NBVVNFICAgICAgICAgMHhBMTQKKyNkZWZpbmUgRlBHQV9UUF9BRERSX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4QTE4CisKKy8qIFRQIGludGVycnVwdCBDYXVzZS9FbmFibGUgYml0cyAqLworI2RlZmluZSBGUEdBX1RQX0lOVEVSUlVQVF9NQzQgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIEZQR0FfVFBfSU5URVJSVVBUX01DNSAgICAgICAgICAgICAgICAweDIKKworLyoKKyAqIFBNIGludGVycnVwdCByZWdpc3RlciBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBGUEdBX01DM19SRUdfSU5UUkVOQUJMRSAgICAgICAgICAgICAgMHhBMjAKKyNkZWZpbmUgRlBHQV9NQzNfUkVHX0lOVFJDQVVTRSAgICAgICAgICAgICAgIDB4QTI0CisjZGVmaW5lIEZQR0FfTUMzX1JFR19WRVJTSU9OICAgICAgICAgICAgICAgICAweEEyOAorCisvKgorICogR01BQyBpbnRlcnJ1cHQgcmVnaXN0ZXIgYWRkcmVzc2VzCisgKi8KKyNkZWZpbmUgRlBHQV9HTUFDX0FERFJfSU5URVJSVVBUX0VOQUJMRSAgICAgIDB4QTMwCisjZGVmaW5lIEZQR0FfR01BQ19BRERSX0lOVEVSUlVQVF9DQVVTRSAgICAgICAweEEzNAorI2RlZmluZSBGUEdBX0dNQUNfQUREUl9WRVJTSU9OICAgICAgICAgICAgICAgMHhBMzgKKworLyogR01BQyBDYXVzZS9FbmFibGUgYml0cyAqLworI2RlZmluZSBGUEdBX0dNQUNfSU5URVJSVVBUX1BPUlQwICAgICAgICAgICAgMHgxCisjZGVmaW5lIEZQR0FfR01BQ19JTlRFUlJVUFRfUE9SVDEgICAgICAgICAgICAweDIKKyNkZWZpbmUgRlBHQV9HTUFDX0lOVEVSUlVQVF9QT1JUMiAgICAgICAgICAgIDB4NAorI2RlZmluZSBGUEdBX0dNQUNfSU5URVJSVVBUX1BPUlQzICAgICAgICAgICAgMHg4CisKKy8qIE1JMCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQV9NSTBfQ0xLIDB4YjAwCisKKyNkZWZpbmUgU19NSTBfQ0xLX0RJViAgICAwCisjZGVmaW5lIE1fTUkwX0NMS19ESVYgICAgMHhmZgorI2RlZmluZSBWX01JMF9DTEtfRElWKHgpICgoeCkgPDwgU19NSTBfQ0xLX0RJVikKKyNkZWZpbmUgR19NSTBfQ0xLX0RJVih4KSAoKCh4KSA+PiBTX01JMF9DTEtfRElWKSAmIE1fTUkwX0NMS19ESVYpCisKKyNkZWZpbmUgU19NSTBfQ0xLX0NOVCAgICA4CisjZGVmaW5lIE1fTUkwX0NMS19DTlQgICAgMHhmZgorI2RlZmluZSBWX01JMF9DTEtfQ05UKHgpICgoeCkgPDwgU19NSTBfQ0xLX0NOVCkKKyNkZWZpbmUgR19NSTBfQ0xLX0NOVCh4KSAoKCh4KSA+PiBTX01JMF9DTEtfQ05UKSAmIE1fTUkwX0NMS19DTlQpCisKKyNkZWZpbmUgQV9NSTBfQ1NSIDB4YjA0CisKKyNkZWZpbmUgU19NSTBfQ1NSX1BPTEwgICAgMAorI2RlZmluZSBWX01JMF9DU1JfUE9MTCh4KSAoKHgpIDw8IFNfTUkwX0NTUl9QT0xMKQorI2RlZmluZSBGX01JMF9DU1JfUE9MTCAgICBWX01JMF9DU1JfUE9MTCgxVSkKKworI2RlZmluZSBTX01JMF9QUkVBTUJMRSAgICAxCisjZGVmaW5lIFZfTUkwX1BSRUFNQkxFKHgpICgoeCkgPDwgU19NSTBfUFJFQU1CTEUpCisjZGVmaW5lIEZfTUkwX1BSRUFNQkxFICAgIFZfTUkwX1BSRUFNQkxFKDFVKQorCisjZGVmaW5lIFNfTUkwX0lOVFJfRU5BQkxFICAgIDIKKyNkZWZpbmUgVl9NSTBfSU5UUl9FTkFCTEUoeCkgKCh4KSA8PCBTX01JMF9JTlRSX0VOQUJMRSkKKyNkZWZpbmUgRl9NSTBfSU5UUl9FTkFCTEUgICAgVl9NSTBfSU5UUl9FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19NSTBfQlVTWSAgICAzCisjZGVmaW5lIFZfTUkwX0JVU1koeCkgKCh4KSA8PCBTX01JMF9CVVNZKQorI2RlZmluZSBGX01JMF9CVVNZICAgIFZfTUkwX0JVU1koMVUpCisKKyNkZWZpbmUgU19NSTBfTURJTyAgICA0CisjZGVmaW5lIFZfTUkwX01ESU8oeCkgKCh4KSA8PCBTX01JMF9NRElPKQorI2RlZmluZSBGX01JMF9NRElPICAgIFZfTUkwX01ESU8oMVUpCisKKyNkZWZpbmUgQV9NSTBfQUREUiAweGIwOAorCisjZGVmaW5lIFNfTUkwX1BIWV9SRUdfQUREUiAgICAwCisjZGVmaW5lIE1fTUkwX1BIWV9SRUdfQUREUiAgICAweDFmCisjZGVmaW5lIFZfTUkwX1BIWV9SRUdfQUREUih4KSAoKHgpIDw8IFNfTUkwX1BIWV9SRUdfQUREUikKKyNkZWZpbmUgR19NSTBfUEhZX1JFR19BRERSKHgpICgoKHgpID4+IFNfTUkwX1BIWV9SRUdfQUREUikgJiBNX01JMF9QSFlfUkVHX0FERFIpCisKKyNkZWZpbmUgU19NSTBfUEhZX0FERFIgICAgNQorI2RlZmluZSBNX01JMF9QSFlfQUREUiAgICAweDFmCisjZGVmaW5lIFZfTUkwX1BIWV9BRERSKHgpICgoeCkgPDwgU19NSTBfUEhZX0FERFIpCisjZGVmaW5lIEdfTUkwX1BIWV9BRERSKHgpICgoKHgpID4+IFNfTUkwX1BIWV9BRERSKSAmIE1fTUkwX1BIWV9BRERSKQorCisjZGVmaW5lIEFfTUkwX0RBVEFfRVhUIDB4YjBjCisjZGVmaW5lIEFfTUkwX0RBVEFfSU5UIDB4YjEwCisKKy8qIEdNQUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFfR01BQ19NQUNJRF9MTyAweDI4CisjZGVmaW5lIEFfR01BQ19NQUNJRF9ISSAweDJjCisjZGVmaW5lIEFfR01BQ19DU1IgMHgzMAorCisjZGVmaW5lIFNfSU5URVJGQUNFICAgIDAKKyNkZWZpbmUgTV9JTlRFUkZBQ0UgICAgMHgzCisjZGVmaW5lIFZfSU5URVJGQUNFKHgpICgoeCkgPDwgU19JTlRFUkZBQ0UpCisjZGVmaW5lIEdfSU5URVJGQUNFKHgpICgoKHgpID4+IFNfSU5URVJGQUNFKSAmIE1fSU5URVJGQUNFKQorCisjZGVmaW5lIFNfTUFDX1RYX0VOQUJMRSAgICAyCisjZGVmaW5lIFZfTUFDX1RYX0VOQUJMRSh4KSAoKHgpIDw8IFNfTUFDX1RYX0VOQUJMRSkKKyNkZWZpbmUgRl9NQUNfVFhfRU5BQkxFICAgIFZfTUFDX1RYX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX01BQ19SWF9FTkFCTEUgICAgMworI2RlZmluZSBWX01BQ19SWF9FTkFCTEUoeCkgKCh4KSA8PCBTX01BQ19SWF9FTkFCTEUpCisjZGVmaW5lIEZfTUFDX1JYX0VOQUJMRSAgICBWX01BQ19SWF9FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19NQUNfTEJfRU5BQkxFICAgIDQKKyNkZWZpbmUgVl9NQUNfTEJfRU5BQkxFKHgpICgoeCkgPDwgU19NQUNfTEJfRU5BQkxFKQorI2RlZmluZSBGX01BQ19MQl9FTkFCTEUgICAgVl9NQUNfTEJfRU5BQkxFKDFVKQorCisjZGVmaW5lIFNfTUFDX1NQRUVEICAgIDUKKyNkZWZpbmUgTV9NQUNfU1BFRUQgICAgMHgzCisjZGVmaW5lIFZfTUFDX1NQRUVEKHgpICgoeCkgPDwgU19NQUNfU1BFRUQpCisjZGVmaW5lIEdfTUFDX1NQRUVEKHgpICgoKHgpID4+IFNfTUFDX1NQRUVEKSAmIE1fTUFDX1NQRUVEKQorCisjZGVmaW5lIFNfTUFDX0hEX0ZDX0VOQUJMRSAgICA3CisjZGVmaW5lIFZfTUFDX0hEX0ZDX0VOQUJMRSh4KSAoKHgpIDw8IFNfTUFDX0hEX0ZDX0VOQUJMRSkKKyNkZWZpbmUgRl9NQUNfSERfRkNfRU5BQkxFICAgIFZfTUFDX0hEX0ZDX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX01BQ19IQUxGX0RVUExFWCAgICA4CisjZGVmaW5lIFZfTUFDX0hBTEZfRFVQTEVYKHgpICgoeCkgPDwgU19NQUNfSEFMRl9EVVBMRVgpCisjZGVmaW5lIEZfTUFDX0hBTEZfRFVQTEVYICAgIFZfTUFDX0hBTEZfRFVQTEVYKDFVKQorCisjZGVmaW5lIFNfTUFDX1BST01JU0MgICAgOQorI2RlZmluZSBWX01BQ19QUk9NSVNDKHgpICgoeCkgPDwgU19NQUNfUFJPTUlTQykKKyNkZWZpbmUgRl9NQUNfUFJPTUlTQyAgICBWX01BQ19QUk9NSVNDKDFVKQorCisjZGVmaW5lIFNfTUFDX01DX0VOQUJMRSAgICAxMAorI2RlZmluZSBWX01BQ19NQ19FTkFCTEUoeCkgKCh4KSA8PCBTX01BQ19NQ19FTkFCTEUpCisjZGVmaW5lIEZfTUFDX01DX0VOQUJMRSAgICBWX01BQ19NQ19FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19NQUNfUkVTRVQgICAgMTEKKyNkZWZpbmUgVl9NQUNfUkVTRVQoeCkgKCh4KSA8PCBTX01BQ19SRVNFVCkKKyNkZWZpbmUgRl9NQUNfUkVTRVQgICAgVl9NQUNfUkVTRVQoMVUpCisKKyNkZWZpbmUgU19NQUNfUlhfUEFVU0VfRU5BQkxFICAgIDEyCisjZGVmaW5lIFZfTUFDX1JYX1BBVVNFX0VOQUJMRSh4KSAoKHgpIDw8IFNfTUFDX1JYX1BBVVNFX0VOQUJMRSkKKyNkZWZpbmUgRl9NQUNfUlhfUEFVU0VfRU5BQkxFICAgIFZfTUFDX1JYX1BBVVNFX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX01BQ19UWF9QQVVTRV9FTkFCTEUgICAgMTMKKyNkZWZpbmUgVl9NQUNfVFhfUEFVU0VfRU5BQkxFKHgpICgoeCkgPDwgU19NQUNfVFhfUEFVU0VfRU5BQkxFKQorI2RlZmluZSBGX01BQ19UWF9QQVVTRV9FTkFCTEUgICAgVl9NQUNfVFhfUEFVU0VfRU5BQkxFKDFVKQorCisjZGVmaW5lIFNfTUFDX0xXTV9FTkFCTEUgICAgMTQKKyNkZWZpbmUgVl9NQUNfTFdNX0VOQUJMRSh4KSAoKHgpIDw8IFNfTUFDX0xXTV9FTkFCTEUpCisjZGVmaW5lIEZfTUFDX0xXTV9FTkFCTEUgICAgVl9NQUNfTFdNX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX01BQ19NQUdJQ19QS1RfRU5BQkxFICAgIDE1CisjZGVmaW5lIFZfTUFDX01BR0lDX1BLVF9FTkFCTEUoeCkgKCh4KSA8PCBTX01BQ19NQUdJQ19QS1RfRU5BQkxFKQorI2RlZmluZSBGX01BQ19NQUdJQ19QS1RfRU5BQkxFICAgIFZfTUFDX01BR0lDX1BLVF9FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19NQUNfSVNMX0VOQUJMRSAgICAxNgorI2RlZmluZSBWX01BQ19JU0xfRU5BQkxFKHgpICgoeCkgPDwgU19NQUNfSVNMX0VOQUJMRSkKKyNkZWZpbmUgRl9NQUNfSVNMX0VOQUJMRSAgICBWX01BQ19JU0xfRU5BQkxFKDFVKQorCisjZGVmaW5lIFNfTUFDX0pVTUJPX0VOQUJMRSAgICAxNworI2RlZmluZSBWX01BQ19KVU1CT19FTkFCTEUoeCkgKCh4KSA8PCBTX01BQ19KVU1CT19FTkFCTEUpCisjZGVmaW5lIEZfTUFDX0pVTUJPX0VOQUJMRSAgICBWX01BQ19KVU1CT19FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19NQUNfUlhfUEFEX0VOQUJMRSAgICAxOAorI2RlZmluZSBWX01BQ19SWF9QQURfRU5BQkxFKHgpICgoeCkgPDwgU19NQUNfUlhfUEFEX0VOQUJMRSkKKyNkZWZpbmUgRl9NQUNfUlhfUEFEX0VOQUJMRSAgICBWX01BQ19SWF9QQURfRU5BQkxFKDFVKQorCisjZGVmaW5lIFNfTUFDX1JYX0NSQ19FTkFCTEUgICAgMTkKKyNkZWZpbmUgVl9NQUNfUlhfQ1JDX0VOQUJMRSh4KSAoKHgpIDw8IFNfTUFDX1JYX0NSQ19FTkFCTEUpCisjZGVmaW5lIEZfTUFDX1JYX0NSQ19FTkFCTEUgICAgVl9NQUNfUlhfQ1JDX0VOQUJMRSgxVSkKKworI2RlZmluZSBBX0dNQUNfSUZTIDB4MzQKKworI2RlZmluZSBTX01BQ19JRlMyICAgIDAKKyNkZWZpbmUgTV9NQUNfSUZTMiAgICAweDNmCisjZGVmaW5lIFZfTUFDX0lGUzIoeCkgKCh4KSA8PCBTX01BQ19JRlMyKQorI2RlZmluZSBHX01BQ19JRlMyKHgpICgoKHgpID4+IFNfTUFDX0lGUzIpICYgTV9NQUNfSUZTMikKKworI2RlZmluZSBTX01BQ19JRlMxICAgIDgKKyNkZWZpbmUgTV9NQUNfSUZTMSAgICAweDdmCisjZGVmaW5lIFZfTUFDX0lGUzEoeCkgKCh4KSA8PCBTX01BQ19JRlMxKQorI2RlZmluZSBHX01BQ19JRlMxKHgpICgoKHgpID4+IFNfTUFDX0lGUzEpICYgTV9NQUNfSUZTMSkKKworI2RlZmluZSBBX0dNQUNfSlVNQk9fRlJBTUVfTEVOIDB4MzgKKyNkZWZpbmUgQV9HTUFDX0xOS19ETFkgMHgzYworI2RlZmluZSBBX0dNQUNfUEFVU0VUSU1FIDB4NDAKKyNkZWZpbmUgQV9HTUFDX01DQVNUX0xPIDB4NDQKKyNkZWZpbmUgQV9HTUFDX01DQVNUX0hJIDB4NDgKKyNkZWZpbmUgQV9HTUFDX01DQVNUX01BU0tfTE8gMHg0YworI2RlZmluZSBBX0dNQUNfTUNBU1RfTUFTS19ISSAweDUwCisjZGVmaW5lIEFfR01BQ19STVRfQ05UIDB4NTQKKyNkZWZpbmUgQV9HTUFDX1JNVF9EQVRBIDB4NTgKKyNkZWZpbmUgQV9HTUFDX0JBQ0tPRkZfU0VFRCAweDVjCisjZGVmaW5lIEFfR01BQ19UWEZfVEhSRVMgMHg2MAorCisjZGVmaW5lIFNfVFhGX1JFQURfVEhSRVNIT0xEICAgIDAKKyNkZWZpbmUgTV9UWEZfUkVBRF9USFJFU0hPTEQgICAgMHhmZgorI2RlZmluZSBWX1RYRl9SRUFEX1RIUkVTSE9MRCh4KSAoKHgpIDw8IFNfVFhGX1JFQURfVEhSRVNIT0xEKQorI2RlZmluZSBHX1RYRl9SRUFEX1RIUkVTSE9MRCh4KSAoKCh4KSA+PiBTX1RYRl9SRUFEX1RIUkVTSE9MRCkgJiBNX1RYRl9SRUFEX1RIUkVTSE9MRCkKKworI2RlZmluZSBTX1RYRl9XUklURV9USFJFU0hPTEQgICAgMTYKKyNkZWZpbmUgTV9UWEZfV1JJVEVfVEhSRVNIT0xEICAgIDB4ZmYKKyNkZWZpbmUgVl9UWEZfV1JJVEVfVEhSRVNIT0xEKHgpICgoeCkgPDwgU19UWEZfV1JJVEVfVEhSRVNIT0xEKQorI2RlZmluZSBHX1RYRl9XUklURV9USFJFU0hPTEQoeCkgKCgoeCkgPj4gU19UWEZfV1JJVEVfVEhSRVNIT0xEKSAmIE1fVFhGX1dSSVRFX1RIUkVTSE9MRCkKKworI2RlZmluZSBNQUNfUkVHX0JBU0UgMHg2MDAKKyNkZWZpbmUgTUFDX1JFR19BRERSKGlkeCwgcmVnKSAoTUFDX1JFR19CQVNFICsgKGlkeCkgKiAxMjggKyAocmVnKSkKKworI2RlZmluZSBNQUNfUkVHX0lETE8oaWR4KSAgICAgICAgICAgICAgTUFDX1JFR19BRERSKGlkeCwgQV9HTUFDX01BQ0lEX0xPKQorI2RlZmluZSBNQUNfUkVHX0lESEkoaWR4KSAgICAgICAgICAgICAgTUFDX1JFR19BRERSKGlkeCwgQV9HTUFDX01BQ0lEX0hJKQorI2RlZmluZSBNQUNfUkVHX0NTUihpZHgpICAgICAgICAgICAgICAgTUFDX1JFR19BRERSKGlkeCwgQV9HTUFDX0NTUikKKyNkZWZpbmUgTUFDX1JFR19JRlMoaWR4KSAgICAgICAgICAgICAgIE1BQ19SRUdfQUREUihpZHgsIEFfR01BQ19JRlMpCisjZGVmaW5lIE1BQ19SRUdfTEFSR0VGUkFNRUxFTkdUSChpZHgpIE1BQ19SRUdfQUREUihpZHgsIEFfR01BQ19KVU1CT19GUkFNRV9MRU4pCisjZGVmaW5lIE1BQ19SRUdfTElOS0RMWShpZHgpICAgICAgICAgICBNQUNfUkVHX0FERFIoaWR4LCBBX0dNQUNfTE5LX0RMWSkKKyNkZWZpbmUgTUFDX1JFR19QQVVTRVRJTUUoaWR4KSAgICAgICAgIE1BQ19SRUdfQUREUihpZHgsIEFfR01BQ19QQVVTRVRJTUUpCisjZGVmaW5lIE1BQ19SRUdfQ0FTVExPKGlkeCkgICAgICAgICAgICBNQUNfUkVHX0FERFIoaWR4LCBBX0dNQUNfTUNBU1RfTE8pCisjZGVmaW5lIE1BQ19SRUdfTUNBU1RISShpZHgpICAgICAgICAgICBNQUNfUkVHX0FERFIoaWR4LCBBX0dNQUNfTUNBU1RfSEkpCisjZGVmaW5lIE1BQ19SRUdfQ0FTVE1BU0tMTyhpZHgpICAgICAgICBNQUNfUkVHX0FERFIoaWR4LCBBX0dNQUNfTUNBU1RfTUFTS19MTykKKyNkZWZpbmUgTUFDX1JFR19NQ0FTVE1BU0tISShpZHgpICAgICAgIE1BQ19SRUdfQUREUihpZHgsIEFfR01BQ19NQ0FTVF9NQVNLX0hJKQorI2RlZmluZSBNQUNfUkVHX1JNQ05UKGlkeCkgICAgICAgICAgICAgTUFDX1JFR19BRERSKGlkeCwgQV9HTUFDX1JNVF9DTlQpCisjZGVmaW5lIE1BQ19SRUdfUk1EQVRBKGlkeCkgICAgICAgICAgICBNQUNfUkVHX0FERFIoaWR4LCBBX0dNQUNfUk1UX0RBVEEpCisjZGVmaW5lIE1BQ19SRUdfR01SQU5EQkFDS09GRlNFRUQoaWR4KSBNQUNfUkVHX0FERFIoaWR4LCBBX0dNQUNfQkFDS09GRl9TRUVEKQorI2RlZmluZSBNQUNfUkVHX1RYRlRIUkVTSE9MRFMoaWR4KSAgICAgTUFDX1JFR19BRERSKGlkeCwgQV9HTUFDX1RYRl9USFJFUykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2dtYWMuaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZ21hYy5oCmluZGV4IDc0NmIwZWUuLmEyYjhhZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZ21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZ21hYy5oCkBAIC02Miw2ICs2Miw4IEBACiAJdTY0IFR4SW50ZXJuYWxNQUNYbWl0RXJyb3I7CiAJdTY0IFR4RnJhbWVzV2l0aEV4Y2Vzc2l2ZURlZmVycmFsOwogCXU2NCBUeEZDU0Vycm9yczsKKwl1NjQgVHhKdW1ib0ZyYW1lc09LOworCXU2NCBUeEp1bWJvT2N0ZXRzT0s7CiAKIAkvKiBSZWNlaXZlICovCiAJdTY0IFJ4T2N0ZXRzT0s7CkBAIC04MSw2ICs4Myw4IEBACiAJdTY0IFJ4SW5SYW5nZUxlbmd0aEVycm9yczsKIAl1NjQgUnhPdXRPZlJhbmdlTGVuZ3RoRmllbGQ7CiAJdTY0IFJ4RnJhbWVUb29Mb25nRXJyb3JzOworCXU2NCBSeEp1bWJvRnJhbWVzT0s7CisJdTY0IFJ4SnVtYm9PY3RldHNPSzsKIH07CiAKIHN0cnVjdCBjbWFjX29wcyB7CkBAIC0xMjgsNiArMTMyLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZ21hYyB0MV9wbTMzOTNfb3BzOwogZXh0ZXJuIHN0cnVjdCBnbWFjIHQxX2NoZWxzaW9fbWFjX29wczsKIGV4dGVybiBzdHJ1Y3QgZ21hYyB0MV92c2M3MzIxX29wczsKK2V4dGVybiBzdHJ1Y3QgZ21hYyB0MV92c2M3MzI2X29wczsKIGV4dGVybiBzdHJ1Y3QgZ21hYyB0MV9peGYxMDEwX29wczsKIGV4dGVybiBzdHJ1Y3QgZ21hYyB0MV9kdW1teV9tYWNfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2l4ZjEwMTAuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vaXhmMTAxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViOGYxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2l4ZjEwMTAuYwpAQCAtMCwwICsxLDQ4NSBAQAorLyogJERhdGU6IDIwMDUvMTEvMTIgMDI6MTM6NDkgJCAkUkNTZmlsZTogaXhmMTAxMC5jLHYgJCAkUmV2aXNpb246IDEuMzYgJCAqLworI2luY2x1ZGUgImdtYWMuaCIKKyNpbmNsdWRlICJlbG1lcjAuaCIKKworLyogVXBkYXRlIGZhc3QgY2hhbmdpbmcgc3RhdGlzdGljcyBldmVyeSAxNSBzZWNvbmRzICovCisjZGVmaW5lIFNUQVRTX1RJQ0tfU0VDUyAxNQorLyogMzAgbWludXRlcyBmb3IgZnVsbCBzdGF0aXN0aWNzIHVwZGF0ZSAqLworI2RlZmluZSBNQUpPUl9VUERBVEVfVElDS1MgKDE4MDAgLyBTVEFUU19USUNLX1NFQ1MpCisKKy8qCisgKiBUaGUgSVhGMTAxMCBjYW4gaGFuZGxlIGZyYW1lcyB1cCB0byAxNjM4MyBieXRlcyBidXQgaXQncyBvcHRpbWl6ZWQgZm9yCisgKiBmcmFtZXMgdXAgdG8gOTgzMSAoMHgyNjY3KSBieXRlcywgc28gd2UgbGltaXQganVtYm8gZnJhbWUgc2l6ZSB0byB0aGlzLgorICogVGhpcyBsZW5ndGggaW5jbHVkZXMgZXRoZXJuZXQgaGVhZGVyIGFuZCBGQ1MuCisgKi8KKyNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUgMHgyNjY3CisKKy8qIE1BQyByZWdpc3RlcnMgKi8KK2VudW0geworCS8qIFBlci1wb3J0IHJlZ2lzdGVycyAqLworCVJFR19NQUNBRERSX0xPVyA9IDAsCisJUkVHX01BQ0FERFJfSElHSCA9IDB4NCwKKwlSRUdfRkRGQ19UWVBFID0gMHhDLAorCVJFR19GQ19UWF9USU1FUl9WQUxVRSA9IDB4MWMsCisJUkVHX0lQR19SWF9USU1FMSA9IDB4MjgsCisJUkVHX0lQR19SWF9USU1FMiA9IDB4MmMsCisJUkVHX0lQR19UWF9USU1FID0gMHgzMCwKKwlSRUdfUEFVU0VfVEhSRVMgPSAweDM4LAorCVJFR19NQVhfRlJBTUVfU0laRSA9IDB4M2MsCisJUkVHX1JHTUlJX1NQRUVEID0gMHg0MCwKKwlSRUdfRkNfRU5BQkxFID0gMHg0OCwKKwlSRUdfRElTQ0FSRF9DVFJMX0ZSQU1FUyA9IDB4NTQsCisJUkVHX0RJVkVSU0VfQ09ORklHID0gMHg2MCwKKwlSRUdfUlhfRklMVEVSID0gMHg2NCwKKwlSRUdfTUNfQUREUl9MT1cgPSAweDY4LAorCVJFR19NQ19BRERSX0hJR0ggPSAweDZjLAorCisJUkVHX1JYX09DVEVUU19PSyA9IDB4ODAsCisJUkVHX1JYX09DVEVUU19CQUQgPSAweDg0LAorCVJFR19SWF9VQ19QS1RTID0gMHg4OCwKKwlSRUdfUlhfTUNfUEtUUyA9IDB4OGMsCisJUkVHX1JYX0JDX1BLVFMgPSAweDkwLAorCVJFR19SWF9GQ1NfRVJSID0gMHhiMCwKKwlSRUdfUlhfVEFHR0VEID0gMHhiNCwKKwlSRUdfUlhfREFUQV9FUlIgPSAweGI4LAorCVJFR19SWF9BTElHTl9FUlIgPSAweGJjLAorCVJFR19SWF9MT05HX0VSUiA9IDB4YzAsCisJUkVHX1JYX0pBQkJFUl9FUlIgPSAweGM0LAorCVJFR19SWF9QQVVTRV9GUkFNRVMgPSAweGM4LAorCVJFR19SWF9VTktOT1dOX0NUUkxfRlJBTUVTID0gMHhjYywKKwlSRUdfUlhfVkVSWV9MT05HX0VSUiA9IDB4ZDAsCisJUkVHX1JYX1JVTlRfRVJSID0gMHhkNCwKKwlSRUdfUlhfU0hPUlRfRVJSID0gMHhkOCwKKwlSRUdfUlhfU1lNQk9MX0VSUiA9IDB4ZTQsCisKKwlSRUdfVFhfT0NURVRTX09LID0gMHgxMDAsCisJUkVHX1RYX09DVEVUU19CQUQgPSAweDEwNCwKKwlSRUdfVFhfVUNfUEtUUyA9IDB4MTA4LAorCVJFR19UWF9NQ19QS1RTID0gMHgxMGMsCisJUkVHX1RYX0JDX1BLVFMgPSAweDExMCwKKwlSRUdfVFhfRVhDRVNTSVZFX0xFTl9EUk9QID0gMHgxNGMsCisJUkVHX1RYX1VOREVSUlVOID0gMHgxNTAsCisJUkVHX1RYX1RBR0dFRCA9IDB4MTU0LAorCVJFR19UWF9QQVVTRV9GUkFNRVMgPSAweDE1QywKKworCS8qIEdsb2JhbCByZWdpc3RlcnMgKi8KKwlSRUdfUE9SVF9FTkFCTEUgPSAweDE0MDAsCisKKwlSRUdfSlRBR19JRCA9IDB4MTQzMCwKKworCVJYX0ZJRk9fSElHSF9XQVRFUk1BUktfQkFTRSA9IDB4MTYwMCwKKwlSWF9GSUZPX0xPV19XQVRFUk1BUktfQkFTRSA9IDB4MTYyOCwKKwlSWF9GSUZPX0ZSQU1FU19SRU1PVkVEX0JBU0UgPSAweDE2NTAsCisKKwlSRUdfUlhfRVJSX0RST1AgPSAweDE2N2MsCisJUkVHX1JYX0ZJRk9fT1ZFUkZMT1dfRVZFTlQgPSAweDE2ODAsCisKKwlUWF9GSUZPX0hJR0hfV0FURVJNQVJLX0JBU0UgPSAweDE4MDAsCisJVFhfRklGT19MT1dfV0FURVJNQVJLX0JBU0UgPSAweDE4MjgsCisJVFhfRklGT19YRkVSX1RIUkVTX0JBU0UgPSAweDE4NTAsCisKKwlSRUdfVFhfRklGT19PVkVSRkxPV19FVkVOVCA9IDB4MTg3OCwKKwlSRUdfVFhfRklGT19PT1NfRVZFTlQgPSAweDE4ODQsCisKKwlUWF9GSUZPX0ZSQU1FU19SRU1PVkVEX0JBU0UgPSAweDE4ODgsCisKKwlSRUdfU1BJX1JYX0JVUlNUID0gMHgxYzAwLAorCVJFR19TUElfUlhfVFJBSU5JTkcgPSAweDFjMDQsCisJUkVHX1NQSV9SWF9DQUxFTkRBUiA9IDB4MWMwOCwKKwlSRUdfU1BJX1RYX1NZTkMgPSAweDFjMGMKK307CisKK2VudW0geyAgICAgICAgICAgICAgICAgICAgIC8qIFJNT04gcmVnaXN0ZXJzICovCisJUkVHX1J4T2N0ZXRzVG90YWxPSyA9IDB4ODAsCisJUkVHX1J4T2N0ZXRzQmFkID0gMHg4NCwKKwlSRUdfUnhVQ1BrdHMgPSAweDg4LAorCVJFR19SeE1DUGt0cyA9IDB4OGMsCisJUkVHX1J4QkNQa3RzID0gMHg5MCwKKwlSRUdfUnhKdW1ib1BrdHMgPSAweGFjLAorCVJFR19SeEZDU0Vycm9ycyA9IDB4YjAsCisJUkVHX1J4RGF0YUVycm9ycyA9IDB4YjgsCisJUkVHX1J4QWxpZ25FcnJvcnMgPSAweGJjLAorCVJFR19SeExvbmdFcnJvcnMgPSAweGMwLAorCVJFR19SeEphYmJlckVycm9ycyA9IDB4YzQsCisJUkVHX1J4UGF1c2VNYWNDb250cm9sQ291bnRlciA9IDB4YzgsCisJUkVHX1J4VmVyeUxvbmdFcnJvcnMgPSAweGQwLAorCVJFR19SeFJ1bnRFcnJvcnMgPSAweGQ0LAorCVJFR19SeFNob3J0RXJyb3JzID0gMHhkOCwKKwlSRUdfUnhTZXF1ZW5jZUVycm9ycyA9IDB4ZTAsCisJUkVHX1J4U3ltYm9sRXJyb3JzID0gMHhlNCwKKworCVJFR19UeE9jdGV0c1RvdGFsT0sgPSAweDEwMCwKKwlSRUdfVHhPY3RldHNCYWQgPSAweDEwNCwKKwlSRUdfVHhVQ1BrdHMgPSAweDEwOCwKKwlSRUdfVHhNQ1BrdHMgPSAweDEwYywKKwlSRUdfVHhCQ1BrdHMgPSAweDExMCwKKwlSRUdfVHhKdW1ib1BrdHMgPSAweDEyQywKKwlSRUdfVHhUb3RhbENvbGxpc2lvbnMgPSAweDEzNCwKKwlSRUdfVHhFeGNlc3NpdmVMZW5ndGhEcm9wID0gMHgxNGMsCisJUkVHX1R4VW5kZXJydW4gPSAweDE1MCwKKwlSRUdfVHhDUkNFcnJvcnMgPSAweDE1OCwKKwlSRUdfVHhQYXVzZUZyYW1lcyA9IDB4MTVjCit9OworCitlbnVtIHsKKwlESVZFUlNFX0NPTkZJR19QQURfRU5BQkxFID0gMHg4MCwKKwlESVZFUlNFX0NPTkZJR19DUkNfQUREID0gMHg0MAorfTsKKworI2RlZmluZSBNQUNSRUdfQkFTRSAgICAgICAgICAgIDAKKyNkZWZpbmUgTUFDUkVHKG1hYywgbWFjX3JlZykgICAoKG1hYyktPmluc3RhbmNlLT5tYWNfYmFzZSArIChtYWNfcmVnKSkKKworc3RydWN0IF9jbWFjX2luc3RhbmNlIHsKKwl1MzIgbWFjX2Jhc2U7CisJdTMyIGluZGV4OworCXUzMiB2ZXJzaW9uOworCXUzMiB0aWNrczsKK307CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfcG9ydChzdHJ1Y3QgY21hYyAqbWFjKQoreworCXUzMiB2YWw7CisKKwl0MV90cGlfcmVhZChtYWMtPmFkYXB0ZXIsIFJFR19QT1JUX0VOQUJMRSwgJnZhbCk7CisJdmFsICY9IH4oMSA8PCBtYWMtPmluc3RhbmNlLT5pbmRleCk7CisJdDFfdHBpX3dyaXRlKG1hYy0+YWRhcHRlciwgUkVHX1BPUlRfRU5BQkxFLCB2YWwpOworfQorCisjZGVmaW5lIFJNT05fVVBEQVRFKG1hYywgbmFtZSwgc3RhdF9uYW1lKSBcCisJdDFfdHBpX3JlYWQoKG1hYyktPmFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR18jI25hbWUpLCAmdmFsKTsgXAorCShtYWMpLT5zdGF0cy5zdGF0X25hbWUgKz0gdmFsOworCisvKgorICogUmVhZCB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIFJNT04gY291bnRlcnMgYW5kIGFkZCB0aGVtIHRvIHRoZSBjdW11bGF0aXZlCisgKiBwb3J0IHN0YXRpc3RpY3MuICBUaGUgSFcgUk1PTiBjb3VudGVycyBhcmUgY2xlYXJlZCBieSB0aGlzIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9zdGF0c191cGRhdGUoc3RydWN0IGNtYWMgKm1hYykKK3sKKwl1MzIgdmFsOworCisJLyogUnggc3RhdHMgKi8KKwlSTU9OX1VQREFURShtYWMsIFJ4T2N0ZXRzVG90YWxPSywgUnhPY3RldHNPSyk7CisJUk1PTl9VUERBVEUobWFjLCBSeE9jdGV0c0JhZCwgUnhPY3RldHNCYWQpOworCVJNT05fVVBEQVRFKG1hYywgUnhVQ1BrdHMsIFJ4VW5pY2FzdEZyYW1lc09LKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4TUNQa3RzLCBSeE11bHRpY2FzdEZyYW1lc09LKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4QkNQa3RzLCBSeEJyb2FkY2FzdEZyYW1lc09LKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4SnVtYm9Qa3RzLCBSeEp1bWJvRnJhbWVzT0spOworCVJNT05fVVBEQVRFKG1hYywgUnhGQ1NFcnJvcnMsIFJ4RkNTRXJyb3JzKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4QWxpZ25FcnJvcnMsIFJ4QWxpZ25FcnJvcnMpOworCVJNT05fVVBEQVRFKG1hYywgUnhMb25nRXJyb3JzLCBSeEZyYW1lVG9vTG9uZ0Vycm9ycyk7CisJUk1PTl9VUERBVEUobWFjLCBSeFZlcnlMb25nRXJyb3JzLCBSeEZyYW1lVG9vTG9uZ0Vycm9ycyk7CisJUk1PTl9VUERBVEUobWFjLCBSeFBhdXNlTWFjQ29udHJvbENvdW50ZXIsIFJ4UGF1c2VGcmFtZXMpOworCVJNT05fVVBEQVRFKG1hYywgUnhEYXRhRXJyb3JzLCBSeERhdGFFcnJvcnMpOworCVJNT05fVVBEQVRFKG1hYywgUnhKYWJiZXJFcnJvcnMsIFJ4SmFiYmVyRXJyb3JzKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4UnVudEVycm9ycywgUnhSdW50RXJyb3JzKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4U2hvcnRFcnJvcnMsIFJ4UnVudEVycm9ycyk7CisJUk1PTl9VUERBVEUobWFjLCBSeFNlcXVlbmNlRXJyb3JzLCBSeFNlcXVlbmNlRXJyb3JzKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4U3ltYm9sRXJyb3JzLCBSeFN5bWJvbEVycm9ycyk7CisKKwkvKiBUeCBzdGF0cyAoc2tpcCBjb2xsaXNpb24gc3RhdHMgYXMgd2UgYXJlIGZ1bGwtZHVwbGV4IG9ubHkpICovCisJUk1PTl9VUERBVEUobWFjLCBUeE9jdGV0c1RvdGFsT0ssIFR4T2N0ZXRzT0spOworCVJNT05fVVBEQVRFKG1hYywgVHhPY3RldHNCYWQsIFR4T2N0ZXRzQmFkKTsKKwlSTU9OX1VQREFURShtYWMsIFR4VUNQa3RzLCBUeFVuaWNhc3RGcmFtZXNPSyk7CisJUk1PTl9VUERBVEUobWFjLCBUeE1DUGt0cywgVHhNdWx0aWNhc3RGcmFtZXNPSyk7CisJUk1PTl9VUERBVEUobWFjLCBUeEJDUGt0cywgVHhCcm9hZGNhc3RGcmFtZXNPSyk7CisJUk1PTl9VUERBVEUobWFjLCBUeEp1bWJvUGt0cywgVHhKdW1ib0ZyYW1lc09LKTsKKwlSTU9OX1VQREFURShtYWMsIFR4UGF1c2VGcmFtZXMsIFR4UGF1c2VGcmFtZXMpOworCVJNT05fVVBEQVRFKG1hYywgVHhFeGNlc3NpdmVMZW5ndGhEcm9wLCBUeExlbmd0aEVycm9ycyk7CisJUk1PTl9VUERBVEUobWFjLCBUeFVuZGVycnVuLCBUeFVuZGVycnVuKTsKKwlSTU9OX1VQREFURShtYWMsIFR4Q1JDRXJyb3JzLCBUeEZDU0Vycm9ycyk7Cit9CisKKy8qIE5vLW9wIGludGVycnVwdCBvcGVyYXRpb24gYXMgdGhpcyBNQUMgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnJ1cHRzICovCitzdGF0aWMgaW50IG1hY19pbnRyX29wKHN0cnVjdCBjbWFjICptYWMpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIEV4cGVjdCBNQUMgYWRkcmVzcyB0byBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuICovCitzdGF0aWMgaW50IG1hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgY21hYyAqbWFjLCB1OCBhZGRyWzZdKQoreworCXUzMiBhZGRyX2xvLCBhZGRyX2hpOworCisJYWRkcl9sbyA9IGFkZHJbMl07CisJYWRkcl9sbyA9IChhZGRyX2xvIDw8IDgpIHwgYWRkclszXTsKKwlhZGRyX2xvID0gKGFkZHJfbG8gPDwgOCkgfCBhZGRyWzRdOworCWFkZHJfbG8gPSAoYWRkcl9sbyA8PCA4KSB8IGFkZHJbNV07CisKKwlhZGRyX2hpID0gYWRkclswXTsKKwlhZGRyX2hpID0gKGFkZHJfaGkgPDwgOCkgfCBhZGRyWzFdOworCisJdDFfdHBpX3dyaXRlKG1hYy0+YWRhcHRlciwgTUFDUkVHKG1hYywgUkVHX01BQ0FERFJfTE9XKSwgYWRkcl9sbyk7CisJdDFfdHBpX3dyaXRlKG1hYy0+YWRhcHRlciwgTUFDUkVHKG1hYywgUkVHX01BQ0FERFJfSElHSCksIGFkZHJfaGkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19nZXRfYWRkcmVzcyhzdHJ1Y3QgY21hYyAqbWFjLCB1OCBhZGRyWzZdKQoreworCXUzMiBhZGRyX2xvLCBhZGRyX2hpOworCisJdDFfdHBpX3JlYWQobWFjLT5hZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfTUFDQUREUl9MT1cpLCAmYWRkcl9sbyk7CisJdDFfdHBpX3JlYWQobWFjLT5hZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfTUFDQUREUl9ISUdIKSwgJmFkZHJfaGkpOworCisJYWRkclswXSA9ICh1OCkgKGFkZHJfaGkgPj4gOCk7CisJYWRkclsxXSA9ICh1OCkgYWRkcl9oaTsKKwlhZGRyWzJdID0gKHU4KSAoYWRkcl9sbyA+PiAyNCk7CisJYWRkclszXSA9ICh1OCkgKGFkZHJfbG8gPj4gMTYpOworCWFkZHJbNF0gPSAodTgpIChhZGRyX2xvID4+IDgpOworCWFkZHJbNV0gPSAodTgpIGFkZHJfbG87CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaXMgaW50ZW5kZWQgdG8gcmVzZXQgYSBwb3J0LCBub3QgdGhlIHdob2xlIE1BQyAqLworc3RhdGljIGludCBtYWNfcmVzZXQoc3RydWN0IGNtYWMgKm1hYykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfc2V0X3J4X21vZGUoc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IHQxX3J4X21vZGUgKnJtKQoreworCXUzMiB2YWwsIG5ld19tb2RlOworCWFkYXB0ZXJfdCAqYWRhcHRlciA9IG1hYy0+YWRhcHRlcjsKKwl1MzIgYWRkcl9sbywgYWRkcl9oaTsKKwl1OCAqYWRkcjsKKworCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19SWF9GSUxURVIpLCAmdmFsKTsKKwluZXdfbW9kZSA9IHZhbCAmIH43OworCWlmICghdDFfcnhfbW9kZV9wcm9taXNjKHJtKSAmJiBtYWMtPmluc3RhbmNlLT52ZXJzaW9uID4gMCkKKwkJbmV3X21vZGUgfD0gMTsgICAgIC8qIG9ubHkgc2V0IGlmIHZlcnNpb24gPiAwIGR1ZSB0byBlcnJhdHVtICovCisJaWYgKCF0MV9yeF9tb2RlX3Byb21pc2Mocm0pICYmICF0MV9yeF9tb2RlX2FsbG11bHRpKHJtKQorCSAgICAgJiYgdDFfcnhfbW9kZV9tY19jbnQocm0pIDw9IDEpCisJCW5ld19tb2RlIHw9IDI7CisJaWYgKG5ld19tb2RlICE9IHZhbCkKKwkJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19SWF9GSUxURVIpLCBuZXdfbW9kZSk7CisJc3dpdGNoICh0MV9yeF9tb2RlX21jX2NudChybSkpIHsKKwljYXNlIDA6CisJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfTUNfQUREUl9MT1cpLCAwKTsKKwkJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19NQ19BRERSX0hJR0gpLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlhZGRyID0gdDFfZ2V0X25leHRfbWNhZGRyKHJtKTsKKwkJYWRkcl9sbyA9IChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKKwkJCWFkZHJbNV07CisJCWFkZHJfaGkgPSAoYWRkclswXSA8PCA4KSB8IGFkZHJbMV07CisJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfTUNfQUREUl9MT1cpLCBhZGRyX2xvKTsKKwkJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19NQ19BRERSX0hJR0gpLCBhZGRyX2hpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19zZXRfbXR1KHN0cnVjdCBjbWFjICptYWMsIGludCBtdHUpCit7CisJLyogTUFYX0ZSQU1FX1NJWkUgaW5sdWRlcyBoZWFkZXIgKyBGQ1MsIG10dSBkb2Vzbid0ICovCisJaWYgKG10dSA+IChNQVhfRlJBTUVfU0laRSAtIDE0IC0gNCkpIHJldHVybiAtRUlOVkFMOworCXQxX3RwaV93cml0ZShtYWMtPmFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19NQVhfRlJBTUVfU0laRSksCisJCSAgICAgbXR1ICsgMTQgKyA0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfc2V0X3NwZWVkX2R1cGxleF9mYyhzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisJCQkJICAgaW50IGZjKQoreworCXUzMiB2YWw7CisKKwlpZiAoc3BlZWQgPj0gMCAmJiBzcGVlZCAhPSBTUEVFRF8xMDAgJiYgc3BlZWQgIT0gU1BFRURfMTAwMCkKKwkJcmV0dXJuIC0xOworCWlmIChkdXBsZXggPj0gMCAmJiBkdXBsZXggIT0gRFVQTEVYX0ZVTEwpCisJCXJldHVybiAtMTsKKworCWlmIChzcGVlZCA+PSAwKSB7CisJCXZhbCA9IHNwZWVkID09IFNQRUVEXzEwMCA/IDEgOiAyOworCQl0MV90cGlfd3JpdGUobWFjLT5hZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfUkdNSUlfU1BFRUQpLCB2YWwpOworCX0KKworCXQxX3RwaV9yZWFkKG1hYy0+YWRhcHRlciwgTUFDUkVHKG1hYywgUkVHX0ZDX0VOQUJMRSksICZ2YWwpOworCXZhbCAmPSB+MzsKKwlpZiAoZmMgJiBQQVVTRV9SWCkKKwkJdmFsIHw9IDE7CisJaWYgKGZjICYgUEFVU0VfVFgpCisJCXZhbCB8PSAyOworCXQxX3RwaV93cml0ZShtYWMtPmFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19GQ19FTkFCTEUpLCB2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19nZXRfc3BlZWRfZHVwbGV4X2ZjKHN0cnVjdCBjbWFjICptYWMsIGludCAqc3BlZWQsIGludCAqZHVwbGV4LAorCQkJCSAgIGludCAqZmMpCit7CisJdTMyIHZhbDsKKworCWlmIChkdXBsZXgpCisJCSpkdXBsZXggPSBEVVBMRVhfRlVMTDsKKwlpZiAoc3BlZWQpIHsKKwkJdDFfdHBpX3JlYWQobWFjLT5hZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfUkdNSUlfU1BFRUQpLAorCQkJICZ2YWwpOworCQkqc3BlZWQgPSAodmFsICYgMikgPyBTUEVFRF8xMDAwIDogU1BFRURfMTAwOworCX0KKwlpZiAoZmMpIHsKKwkJdDFfdHBpX3JlYWQobWFjLT5hZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfRkNfRU5BQkxFKSwgJnZhbCk7CisJCSpmYyA9IDA7CisJCWlmICh2YWwgJiAxKQorCQkJKmZjIHw9IFBBVVNFX1JYOworCQlpZiAodmFsICYgMikKKwkJCSpmYyB8PSBQQVVTRV9UWDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9wb3J0KHN0cnVjdCBjbWFjICptYWMpCit7CisJdTMyIHZhbDsKKwl1MzIgaW5kZXggPSBtYWMtPmluc3RhbmNlLT5pbmRleDsKKwlhZGFwdGVyX3QgKmFkYXB0ZXIgPSBtYWMtPmFkYXB0ZXI7CisKKwl0MV90cGlfcmVhZChhZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfRElWRVJTRV9DT05GSUcpLCAmdmFsKTsKKwl2YWwgfD0gRElWRVJTRV9DT05GSUdfQ1JDX0FERCB8IERJVkVSU0VfQ09ORklHX1BBRF9FTkFCTEU7CisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIE1BQ1JFRyhtYWMsIFJFR19ESVZFUlNFX0NPTkZJRyksIHZhbCk7CisJaWYgKG1hYy0+aW5zdGFuY2UtPnZlcnNpb24gPiAwKQorCQl0MV90cGlfd3JpdGUoYWRhcHRlciwgTUFDUkVHKG1hYywgUkVHX1JYX0ZJTFRFUiksIDMpOworCWVsc2UgLyogRG9uJ3QgZW5hYmxlIHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXJpbmcgZHVlIHRvIElYRjEwMTAgYnVnICovCisJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBNQUNSRUcobWFjLCBSRUdfUlhfRklMVEVSKSwgMik7CisKKwl0MV90cGlfcmVhZChhZGFwdGVyLCBSRUdfUlhfRVJSX0RST1AsICZ2YWwpOworCXZhbCB8PSAoMSA8PCBpbmRleCk7CisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIFJFR19SWF9FUlJfRFJPUCwgdmFsKTsKKworCS8qCisJICogQ2xlYXIgdGhlIHBvcnQgUk1PTiByZWdpc3RlcnMgYnkgYWRkaW5nIHRoZWlyIGN1cnJlbnQgdmFsdWVzIHRvIHRoZQorCSAqIGN1bXVsYXRpY2UgcG9ydCBzdGF0cyBhbmQgdGhlbiBjbGVhcmluZyB0aGUgc3RhdHMuICBSZWFsbHkuCisJICovCisJcG9ydF9zdGF0c191cGRhdGUobWFjKTsKKwltZW1zZXQoJm1hYy0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgY21hY19zdGF0aXN0aWNzKSk7CisJbWFjLT5pbnN0YW5jZS0+dGlja3MgPSAwOworCisJdDFfdHBpX3JlYWQoYWRhcHRlciwgUkVHX1BPUlRfRU5BQkxFLCAmdmFsKTsKKwl2YWwgfD0gKDEgPDwgaW5kZXgpOworCXQxX3RwaV93cml0ZShhZGFwdGVyLCBSRUdfUE9SVF9FTkFCTEUsIHZhbCk7CisKKyAgICAgICAJaW5kZXggPDw9IDI7CisgICAgICAgIGlmIChpc19UMihhZGFwdGVyKSkgeworCQkvKiBUMjA0OiBzZXQgdGhlIEZpZm8gd2F0ZXIgbGV2ZWwgJiB0aHJlc2hvbGQgKi8KKwkJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIFJYX0ZJRk9fSElHSF9XQVRFUk1BUktfQkFTRSArIGluZGV4LCAweDc0MCk7CisJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBSWF9GSUZPX0xPV19XQVRFUk1BUktfQkFTRSArIGluZGV4LCAweDczMCk7CisJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBUWF9GSUZPX0hJR0hfV0FURVJNQVJLX0JBU0UgKyBpbmRleCwgMHg2MDApOworCQl0MV90cGlfd3JpdGUoYWRhcHRlciwgVFhfRklGT19MT1dfV0FURVJNQVJLX0JBU0UgKyBpbmRleCwgMHgxZDApOworCQl0MV90cGlfd3JpdGUoYWRhcHRlciwgVFhfRklGT19YRkVSX1RIUkVTX0JBU0UgKyBpbmRleCwgMHgxMTAwKTsKKwl9IGVsc2UgeworCS8qCisJICogU2V0IHRoZSBUWCBGaWZvIFRocmVzaG9sZCB0byAweDQwMCBpbnN0ZWFkIG9mIDB4MTAwIHRvIHdvcmsgYXJvdW5kCisJICogVW5kZXJydW4gcHJvYmxlbS4gSW50ZWwgaGFzIGJsZXNzZWQgdGhpcyBzb2x1dGlvbi4KKwkgKi8KKwkJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIFRYX0ZJRk9fWEZFUl9USFJFU19CQVNFICsgaW5kZXgsIDB4NDAwKTsKKwl9Cit9CisKKy8qIElYRjEwMTAgcG9ydHMgZG8gbm90IGhhdmUgc2VwYXJhdGUgZW5hYmxlcyBmb3IgVFggYW5kIFJYICovCitzdGF0aWMgaW50IG1hY19lbmFibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKQoreworCWlmICh3aGljaCAmIChNQUNfRElSRUNUSU9OX1JYIHwgTUFDX0RJUkVDVElPTl9UWCkpCisJCWVuYWJsZV9wb3J0KG1hYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjX2Rpc2FibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKQoreworCWlmICh3aGljaCAmIChNQUNfRElSRUNUSU9OX1JYIHwgTUFDX0RJUkVDVElPTl9UWCkpCisJCWRpc2FibGVfcG9ydChtYWMpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcGVyaW9kaWNhbGx5IHRvIGFjY3VtdWxhdGUgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIHRoZQorICogUk1PTiBjb3VudGVycyBpbnRvIHRoZSBwb3J0IHN0YXRpc3RpY3MuICBTaW5jZSB0aGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cworICogc29tZSBvZiB0aGVtIGNhbiBvdmVyZmxvdyBpbiBsZXNzIHRoYW4gYSBtaW51dGUgYXQgR2lnRSBzcGVlZHMsIHNvIHRoaXMKKyAqIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZXZlcnkgMzAgc2Vjb25kcyBvciBzby4KKyAqCisgKiBUbyBjdXQgZG93biBvbiByZWFkaW5nIGNvc3RzIHdlIHVwZGF0ZSBvbmx5IHRoZSBvY3RldCBjb3VudGVycyBhdCBlYWNoIHRpY2sKKyAqIGFuZCBkbyBhIGZ1bGwgdXBkYXRlIGF0IG1ham9yIHRpY2tzLCB3aGljaCBjYW4gYmUgZXZlcnkgMzAgbWludXRlcyBvciBtb3JlLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNtYWNfc3RhdGlzdGljcyAqbWFjX3VwZGF0ZV9zdGF0aXN0aWNzKHN0cnVjdCBjbWFjICptYWMsCisJCQkJCQkJICAgaW50IGZsYWcpCit7CisJaWYgKGZsYWcgPT0gTUFDX1NUQVRTX1VQREFURV9GVUxMIHx8CisJICAgIE1BSk9SX1VQREFURV9USUNLUyA8PSBtYWMtPmluc3RhbmNlLT50aWNrcykgeworCQlwb3J0X3N0YXRzX3VwZGF0ZShtYWMpOworCQltYWMtPmluc3RhbmNlLT50aWNrcyA9IDA7CisJfSBlbHNlIHsKKwkJdTMyIHZhbDsKKworCQlSTU9OX1VQREFURShtYWMsIFJ4T2N0ZXRzVG90YWxPSywgUnhPY3RldHNPSyk7CisJCVJNT05fVVBEQVRFKG1hYywgVHhPY3RldHNUb3RhbE9LLCBUeE9jdGV0c09LKTsKKwkJbWFjLT5pbnN0YW5jZS0+dGlja3MrKzsKKwl9CisJcmV0dXJuICZtYWMtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBtYWNfZGVzdHJveShzdHJ1Y3QgY21hYyAqbWFjKQoreworCWtmcmVlKG1hYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY21hY19vcHMgaXhmMTAxMF9vcHMgPSB7CisJLmRlc3Ryb3kgICAgICAgICAgICAgICAgICA9IG1hY19kZXN0cm95LAorCS5yZXNldCAgICAgICAgICAgICAgICAgICAgPSBtYWNfcmVzZXQsCisJLmludGVycnVwdF9lbmFibGUgICAgICAgICA9IG1hY19pbnRyX29wLAorCS5pbnRlcnJ1cHRfZGlzYWJsZSAgICAgICAgPSBtYWNfaW50cl9vcCwKKwkuaW50ZXJydXB0X2NsZWFyICAgICAgICAgID0gbWFjX2ludHJfb3AsCisJLmVuYWJsZSAgICAgICAgICAgICAgICAgICA9IG1hY19lbmFibGUsCisJLmRpc2FibGUgICAgICAgICAgICAgICAgICA9IG1hY19kaXNhYmxlLAorCS5zZXRfbXR1ICAgICAgICAgICAgICAgICAgPSBtYWNfc2V0X210dSwKKwkuc2V0X3J4X21vZGUgICAgICAgICAgICAgID0gbWFjX3NldF9yeF9tb2RlLAorCS5zZXRfc3BlZWRfZHVwbGV4X2ZjICAgICAgPSBtYWNfc2V0X3NwZWVkX2R1cGxleF9mYywKKwkuZ2V0X3NwZWVkX2R1cGxleF9mYyAgICAgID0gbWFjX2dldF9zcGVlZF9kdXBsZXhfZmMsCisJLnN0YXRpc3RpY3NfdXBkYXRlICAgICAgICA9IG1hY191cGRhdGVfc3RhdGlzdGljcywKKwkubWFjYWRkcmVzc19nZXQgICAgICAgICAgID0gbWFjX2dldF9hZGRyZXNzLAorCS5tYWNhZGRyZXNzX3NldCAgICAgICAgICAgPSBtYWNfc2V0X2FkZHJlc3MsCit9OworCitzdGF0aWMgaW50IGl4ZjEwMTBfbWFjX3Jlc2V0KGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwl1MzIgdmFsOworCisJdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmdmFsKTsKKwlpZiAoKHZhbCAmIDEpICE9IDApIHsKKwkJdmFsICY9IH4xOworCQl0MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCQl1ZGVsYXkoMik7CisJfQorCXZhbCB8PSAxOworCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIHZhbCk7CisJdWRlbGF5KDIpOworCisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIFJFR19QT1JUX0VOQUJMRSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY21hYyAqaXhmMTAxMF9tYWNfY3JlYXRlKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IGluZGV4KQoreworCXN0cnVjdCBjbWFjICptYWM7CisJdTMyIHZhbDsKKworCWlmIChpbmRleCA+IDkpIHJldHVybiBOVUxMOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoKm1hYykgKyBzaXplb2YoY21hY19pbnN0YW5jZSksIEdGUF9LRVJORUwpOworCWlmICghbWFjKSByZXR1cm4gTlVMTDsKKworCW1hYy0+b3BzID0gJml4ZjEwMTBfb3BzOworCW1hYy0+aW5zdGFuY2UgPSAoY21hY19pbnN0YW5jZSAqKShtYWMgKyAxKTsKKworCW1hYy0+aW5zdGFuY2UtPm1hY19iYXNlID0gTUFDUkVHX0JBU0UgKyAoaW5kZXggKiAweDIwMCk7CisJbWFjLT5pbnN0YW5jZS0+aW5kZXggICAgPSBpbmRleDsKKwltYWMtPmFkYXB0ZXIgID0gYWRhcHRlcjsKKwltYWMtPmluc3RhbmNlLT50aWNrcyAgICA9IDA7CisKKwl0MV90cGlfcmVhZChhZGFwdGVyLCBSRUdfSlRBR19JRCwgJnZhbCk7CisJbWFjLT5pbnN0YW5jZS0+dmVyc2lvbiA9IHZhbCA+PiAyODsKKwlyZXR1cm4gbWFjOworfQorCitzdHJ1Y3QgZ21hYyB0MV9peGYxMDEwX29wcyA9IHsKKwlTVEFUU19USUNLX1NFQ1MsCisJaXhmMTAxMF9tYWNfY3JlYXRlLAorCWl4ZjEwMTBfbWFjX3Jlc2V0Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9tYWMuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmMzlkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbWFjLmMKQEAgLTAsMCArMSwzNjggQEAKKy8qICREYXRlOiAyMDA1LzEwLzIyIDAwOjQyOjU5ICQgJFJDU2ZpbGU6IG1hYy5jLHYgJCAkUmV2aXNpb246IDEuMzIgJCAqLworI2luY2x1ZGUgImdtYWMuaCIKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAiZnBnYV9kZWZzLmgiCisKKyNkZWZpbmUgTUFDX0NTUl9JTlRFUkZBQ0VfR01JSSAgICAgIDB4MAorI2RlZmluZSBNQUNfQ1NSX0lOVEVSRkFDRV9UQkkgICAgICAgMHgxCisjZGVmaW5lIE1BQ19DU1JfSU5URVJGQUNFX01JSSAgICAgICAweDIKKyNkZWZpbmUgTUFDX0NTUl9JTlRFUkZBQ0VfUk1JSSAgICAgIDB4MworCisvKiBDaGVsc2lvJ3MgTUFDIHN0YXRpc3RpY3MuICovCitzdHJ1Y3QgbWFjX3N0YXRpc3RpY3MgeworCisJLyogVHJhbnNtaXQgKi8KKwl1MzIgVHhGcmFtZXNUcmFuc21pdHRlZE9LOworCXUzMiBUeFJlc2VydmVkMTsKKwl1MzIgVHhSZXNlcnZlZDI7CisJdTMyIFR4T2N0ZXRzVHJhbnNtaXR0ZWRPSzsKKwl1MzIgVHhGcmFtZXNXaXRoRGVmZXJyZWRYbWlzc2lvbnM7CisJdTMyIFR4TGF0ZUNvbGxpc2lvbnM7CisJdTMyIFR4RnJhbWVzQWJvcnRlZER1ZVRvWFNDb2xsaXNpb25zOworCXUzMiBUeEZyYW1lc0xvc3REdWVUb0ludE1BQ1htaXRFcnJvcjsKKwl1MzIgVHhSZXNlcnZlZDM7CisJdTMyIFR4TXVsdGljYXN0RnJhbWVYbWl0dGVkT0s7CisJdTMyIFR4QnJvYWRjYXN0RnJhbWVzWG1pdHRlZE9LOworCXUzMiBUeEZyYW1lc1dpdGhFeGNlc3NpdmVEZWZlcnJhbDsKKwl1MzIgVHhQQVVTRU1BQ0N0cmxGcmFtZXNUcmFuc21pdHRlZDsKKworCS8qIFJlY2VpdmUgKi8KKwl1MzIgUnhGcmFtZXNSZWNlaXZlZE9LOworCXUzMiBSeEZyYW1lQ2hlY2tTZXF1ZW5jZUVycm9yczsKKwl1MzIgUnhBbGlnbm1lbnRFcnJvcnM7CisJdTMyIFJ4T2N0ZXRzUmVjZWl2ZWRPSzsKKwl1MzIgUnhGcmFtZXNMb3N0RHVlVG9JbnRNQUNSY3ZFcnJvcjsKKwl1MzIgUnhNdWx0aWNhc3RGcmFtZXNSZWNlaXZlZE9LOworCXUzMiBSeEJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkT0s7CisJdTMyIFJ4SW5SYW5nZUxlbmd0aEVycm9yczsKKwl1MzIgUnhUeE91dE9mUmFuZ2VMZW5ndGhGaWVsZDsKKwl1MzIgUnhGcmFtZVRvb0xvbmdFcnJvcnM7CisJdTMyIFJ4UEFVU0VNQUNDdHJsRnJhbWVzUmVjZWl2ZWQ7Cit9OworCitzdGF0aWMgaW50IHN0YXRpY19hUG9ydHNbXSA9IHsKKwlGUEdBX0dNQUNfSU5URVJSVVBUX1BPUlQwLAorCUZQR0FfR01BQ19JTlRFUlJVUFRfUE9SVDEsCisJRlBHQV9HTUFDX0lOVEVSUlVQVF9QT1JUMiwKKwlGUEdBX0dNQUNfSU5URVJSVVBUX1BPUlQzCit9OworCitzdHJ1Y3QgX2NtYWNfaW5zdGFuY2UgeworCXUzMiBpbmRleDsKK307CisKK3N0YXRpYyBpbnQgbWFjX2ludHJfZW5hYmxlKHN0cnVjdCBjbWFjICptYWMpCit7CisJdTMyIG1hY19pbnRyOworCisJaWYgKHQxX2lzX2FzaWMobWFjLT5hZGFwdGVyKSkgeworCQkvKiBBU0lDICovCisKKwkJLyogV2UgZG9uJ3QgdXNlIHRoZSBvbiBjaGlwIE1BQyBmb3IgQVNJQyBwcm9kdWN0cy4gKi8KKwl9IGVsc2UgeworCQkvKiBGUEdBICovCisKKwkJLyogU2V0IHBhcmVudCBnbWFjIGludGVycnVwdC4gKi8KKwkJbWFjX2ludHIgPSByZWFkbChtYWMtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisJCW1hY19pbnRyIHw9IEZQR0FfUENJWF9JTlRFUlJVUFRfR01BQzsKKwkJd3JpdGVsKG1hY19pbnRyLCBtYWMtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisKKwkJbWFjX2ludHIgPSByZWFkbChtYWMtPmFkYXB0ZXItPnJlZ3MgKyBGUEdBX0dNQUNfQUREUl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJbWFjX2ludHIgfD0gc3RhdGljX2FQb3J0c1ttYWMtPmluc3RhbmNlLT5pbmRleF07CisJCXdyaXRlbChtYWNfaW50ciwKKwkJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArIEZQR0FfR01BQ19BRERSX0lOVEVSUlVQVF9FTkFCTEUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19pbnRyX2Rpc2FibGUoc3RydWN0IGNtYWMgKm1hYykKK3sKKwl1MzIgbWFjX2ludHI7CisKKwlpZiAodDFfaXNfYXNpYyhtYWMtPmFkYXB0ZXIpKSB7CisJCS8qIEFTSUMgKi8KKworCQkvKiBXZSBkb24ndCB1c2UgdGhlIG9uIGNoaXAgTUFDIGZvciBBU0lDIHByb2R1Y3RzLiAqLworCX0gZWxzZSB7CisJCS8qIEZQR0EgKi8KKworCQkvKiBTZXQgcGFyZW50IGdtYWMgaW50ZXJydXB0LiAqLworCQltYWNfaW50ciA9IHJlYWRsKG1hYy0+YWRhcHRlci0+cmVncyArIEFfUExfRU5BQkxFKTsKKwkJbWFjX2ludHIgJj0gfkZQR0FfUENJWF9JTlRFUlJVUFRfR01BQzsKKwkJd3JpdGVsKG1hY19pbnRyLCBtYWMtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisKKwkJbWFjX2ludHIgPSByZWFkbChtYWMtPmFkYXB0ZXItPnJlZ3MgKyBGUEdBX0dNQUNfQUREUl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJbWFjX2ludHIgJj0gfihzdGF0aWNfYVBvcnRzW21hYy0+aW5zdGFuY2UtPmluZGV4XSk7CisJCXdyaXRlbChtYWNfaW50ciwKKwkJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArIEZQR0FfR01BQ19BRERSX0lOVEVSUlVQVF9FTkFCTEUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19pbnRyX2NsZWFyKHN0cnVjdCBjbWFjICptYWMpCit7CisJdTMyIG1hY19pbnRyOworCisJaWYgKHQxX2lzX2FzaWMobWFjLT5hZGFwdGVyKSkgeworCQkvKiBBU0lDICovCisKKwkJLyogV2UgZG9uJ3QgdXNlIHRoZSBvbiBjaGlwIE1BQyBmb3IgQVNJQyBwcm9kdWN0cy4gKi8KKwl9IGVsc2UgeworCQkvKiBGUEdBICovCisKKwkJLyogU2V0IHBhcmVudCBnbWFjIGludGVycnVwdC4gKi8KKwkJd3JpdGVsKEZQR0FfUENJWF9JTlRFUlJVUFRfR01BQywKKwkJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArICBBX1BMX0NBVVNFKTsKKwkJbWFjX2ludHIgPSByZWFkbChtYWMtPmFkYXB0ZXItPnJlZ3MgKyBGUEdBX0dNQUNfQUREUl9JTlRFUlJVUFRfQ0FVU0UpOworCQltYWNfaW50ciB8PSAoc3RhdGljX2FQb3J0c1ttYWMtPmluc3RhbmNlLT5pbmRleF0pOworCQl3cml0ZWwobWFjX2ludHIsCisJCSAgICAgICBtYWMtPmFkYXB0ZXItPnJlZ3MgKyBGUEdBX0dNQUNfQUREUl9JTlRFUlJVUFRfQ0FVU0UpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19nZXRfYWRkcmVzcyhzdHJ1Y3QgY21hYyAqbWFjLCB1OCBhZGRyWzZdKQoreworCXUzMiBkYXRhMzJfbG8sIGRhdGEzMl9oaTsKKworCWRhdGEzMl9sbyA9IHJlYWRsKG1hYy0+YWRhcHRlci0+cmVncworCQkJICArIE1BQ19SRUdfSURMTyhtYWMtPmluc3RhbmNlLT5pbmRleCkpOworCWRhdGEzMl9oaSA9IHJlYWRsKG1hYy0+YWRhcHRlci0+cmVncworCQkJICArIE1BQ19SRUdfSURISShtYWMtPmluc3RhbmNlLT5pbmRleCkpOworCisJYWRkclswXSA9ICh1OCkgKChkYXRhMzJfaGkgPj4gOCkgJiAweEZGKTsKKwlhZGRyWzFdID0gKHU4KSAoKGRhdGEzMl9oaSkgJiAweEZGKTsKKwlhZGRyWzJdID0gKHU4KSAoKGRhdGEzMl9sbyA+PiAyNCkgJiAweEZGKTsKKwlhZGRyWzNdID0gKHU4KSAoKGRhdGEzMl9sbyA+PiAxNikgJiAweEZGKTsKKwlhZGRyWzRdID0gKHU4KSAoKGRhdGEzMl9sbyA+PiA4KSAmIDB4RkYpOworCWFkZHJbNV0gPSAodTgpICgoZGF0YTMyX2xvKSAmIDB4RkYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQoreworCXUzMiBkYXRhMzI7CisJaW50IG1hY19pbl9yZXNldCwgdGltZV9vdXQgPSAxMDA7CisJaW50IGlkeCA9IG1hYy0+aW5zdGFuY2UtPmluZGV4OworCisJZGF0YTMyID0gcmVhZGwobWFjLT5hZGFwdGVyLT5yZWdzICsgTUFDX1JFR19DU1IoaWR4KSk7CisJd3JpdGVsKGRhdGEzMiB8IEZfTUFDX1JFU0VULAorCSAgICAgICBtYWMtPmFkYXB0ZXItPnJlZ3MgKyBNQUNfUkVHX0NTUihpZHgpKTsKKworCWRvIHsKKwkJZGF0YTMyID0gcmVhZGwobWFjLT5hZGFwdGVyLT5yZWdzICsgTUFDX1JFR19DU1IoaWR4KSk7CisKKwkJbWFjX2luX3Jlc2V0ID0gZGF0YTMyICYgRl9NQUNfUkVTRVQ7CisJCWlmIChtYWNfaW5fcmVzZXQpCisJCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAobWFjX2luX3Jlc2V0ICYmIC0tdGltZV9vdXQpOworCisJaWYgKG1hY19pbl9yZXNldCkgeworCQlDSF9FUlIoIiVzOiBNQUMgJWQgcmVzZXQgdGltZWQgb3V0XG4iLAorCQkgICAgICAgbWFjLT5hZGFwdGVyLT5uYW1lLCBpZHgpOworCQlyZXR1cm4gMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfc2V0X3J4X21vZGUoc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IHQxX3J4X21vZGUgKnJtKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSByZWFkbChtYWMtPmFkYXB0ZXItPnJlZ3MKKwkJCSAgICArIE1BQ19SRUdfQ1NSKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisJdmFsICY9IH4oRl9NQUNfUFJPTUlTQyB8IEZfTUFDX01DX0VOQUJMRSk7CisJdmFsIHw9IFZfTUFDX1BST01JU0ModDFfcnhfbW9kZV9wcm9taXNjKHJtKSAhPSAwKTsKKwl2YWwgfD0gVl9NQUNfTUNfRU5BQkxFKHQxX3J4X21vZGVfYWxsbXVsdGkocm0pICE9IDApOworCXdyaXRlbCh2YWwsCisJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArIE1BQ19SRUdfQ1NSKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfc2V0X3NwZWVkX2R1cGxleF9mYyhzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisJCQkJICAgaW50IGZjKQoreworCXUzMiBkYXRhMzI7CisKKwlkYXRhMzIgPSByZWFkbChtYWMtPmFkYXB0ZXItPnJlZ3MKKwkJCSAgICAgICArIE1BQ19SRUdfQ1NSKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisJZGF0YTMyICY9IH4oRl9NQUNfSEFMRl9EVVBMRVggfCBWX01BQ19TUEVFRChNX01BQ19TUEVFRCkgfAorCQlWX0lOVEVSRkFDRShNX0lOVEVSRkFDRSkgfCBGX01BQ19UWF9QQVVTRV9FTkFCTEUgfAorCQlGX01BQ19SWF9QQVVTRV9FTkFCTEUpOworCisJc3dpdGNoIChzcGVlZCkgeworCWNhc2UgU1BFRURfMTA6CisJY2FzZSBTUEVFRF8xMDA6CisJCWRhdGEzMiB8PSBWX0lOVEVSRkFDRShNQUNfQ1NSX0lOVEVSRkFDRV9NSUkpOworCQlkYXRhMzIgfD0gVl9NQUNfU1BFRUQoc3BlZWQgPT0gU1BFRURfMTAgPyAwIDogMSk7CisJCWJyZWFrOworCWNhc2UgU1BFRURfMTAwMDoKKwkJZGF0YTMyIHw9IFZfSU5URVJGQUNFKE1BQ19DU1JfSU5URVJGQUNFX0dNSUkpOworCQlkYXRhMzIgfD0gVl9NQUNfU1BFRUQoMik7CisJCWJyZWFrOworCX0KKworCWlmIChkdXBsZXggPj0gMCkKKwkJZGF0YTMyIHw9IFZfTUFDX0hBTEZfRFVQTEVYKGR1cGxleCA9PSBEVVBMRVhfSEFMRik7CisKKwlpZiAoZmMgPj0gMCkgeworCQlkYXRhMzIgfD0gVl9NQUNfUlhfUEFVU0VfRU5BQkxFKChmYyAmIFBBVVNFX1JYKSAhPSAwKTsKKwkJZGF0YTMyIHw9IFZfTUFDX1RYX1BBVVNFX0VOQUJMRSgoZmMgJiBQQVVTRV9UWCkgIT0gMCk7CisJfQorCisJd3JpdGVsKGRhdGEzMiwKKwkgICAgICAgbWFjLT5hZGFwdGVyLT5yZWdzICsgTUFDX1JFR19DU1IobWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfZW5hYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwobWFjLT5hZGFwdGVyLT5yZWdzCisJCQkgICAgKyBNQUNfUkVHX0NTUihtYWMtPmluc3RhbmNlLT5pbmRleCkpOworCWlmICh3aGljaCAmIE1BQ19ESVJFQ1RJT05fUlgpCisJCXZhbCB8PSBGX01BQ19SWF9FTkFCTEU7CisJaWYgKHdoaWNoICYgTUFDX0RJUkVDVElPTl9UWCkKKwkJdmFsIHw9IEZfTUFDX1RYX0VOQUJMRTsKKwl3cml0ZWwodmFsLAorCSAgICAgICBtYWMtPmFkYXB0ZXItPnJlZ3MgKyBNQUNfUkVHX0NTUihtYWMtPmluc3RhbmNlLT5pbmRleCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19kaXNhYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVhZGwobWFjLT5hZGFwdGVyLT5yZWdzCisJCQkgICAgKyBNQUNfUkVHX0NTUihtYWMtPmluc3RhbmNlLT5pbmRleCkpOworCWlmICh3aGljaCAmIE1BQ19ESVJFQ1RJT05fUlgpCisJCXZhbCAmPSB+Rl9NQUNfUlhfRU5BQkxFOworCWlmICh3aGljaCAmIE1BQ19ESVJFQ1RJT05fVFgpCisJCXZhbCAmPSB+Rl9NQUNfVFhfRU5BQkxFOworCXdyaXRlbCh2YWwsCisJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArIE1BQ19SRUdfQ1NSKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZiAwCitzdGF0aWMgaW50IG1hY19zZXRfaWZzKHN0cnVjdCBjbWFjICptYWMsIHUzMiBtb2RlKQoreworCXQxX3dyaXRlX3JlZ180KG1hYy0+YWRhcHRlciwKKwkJICAgICAgIE1BQ19SRUdfSUZTKG1hYy0+aW5zdGFuY2UtPmluZGV4KSwKKwkJICAgICAgIG1vZGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19lbmFibGVfaXNsKHN0cnVjdCBjbWFjICptYWMpCit7CisJdTMyIGRhdGEzMiA9IHJlYWRsKG1hYy0+YWRhcHRlci0+cmVncworCQkJCSAgICsgTUFDX1JFR19DU1IobWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKwlkYXRhMzIgfD0gRl9NQUNfUlhfRU5BQkxFIHwgRl9NQUNfVFhfRU5BQkxFOworCXQxX3dyaXRlX3JlZ180KG1hYy0+YWRhcHRlciwKKwkJICAgICAgIE1BQ19SRUdfQ1NSKG1hYy0+aW5zdGFuY2UtPmluZGV4KSwKKwkJICAgICAgIGRhdGEzMik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBtYWNfc2V0X210dShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgbXR1KQoreworCWlmIChtdHUgPiA5NjAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl3cml0ZWwobXR1ICsgRVRIX0hMRU4gKyBWTEFOX0hMRU4sCisJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArIE1BQ19SRUdfTEFSR0VGUkFNRUxFTkdUSChtYWMtPmluc3RhbmNlLT5pbmRleCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21hY19zdGF0aXN0aWNzICptYWNfdXBkYXRlX3N0YXRpc3RpY3Moc3RydWN0IGNtYWMgKm1hYywKKwkJCQkJCQkgICBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbWFjX3N0YXRpc3RpY3Mgc3Q7CisJdTMyICpwID0gKHUzMiAqKSAmIHN0LCBpOworCisJd3JpdGVsKDAsCisJICAgICAgIG1hYy0+YWRhcHRlci0+cmVncyArIE1BQ19SRUdfUk1DTlQobWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3QpIC8gc2l6ZW9mKHUzMik7IGkrKykKKwkJKnArKyA9IHJlYWRsKG1hYy0+YWRhcHRlci0+cmVncworCQkJICAgICArIE1BQ19SRUdfUk1EQVRBKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisKKwkvKiBYWFggY29udmVydCBzdGF0cyAqLworCXJldHVybiAmbWFjLT5zdGF0czsKK30KKworc3RhdGljIHZvaWQgbWFjX2Rlc3Ryb3koc3RydWN0IGNtYWMgKm1hYykKK3sKKwlrZnJlZShtYWMpOworfQorCitzdGF0aWMgc3RydWN0IGNtYWNfb3BzIGNoZWxzaW9fbWFjX29wcyA9IHsKKwkuZGVzdHJveSAgICAgICAgICAgICAgICAgPSBtYWNfZGVzdHJveSwKKwkucmVzZXQgICAgICAgICAgICAgICAgICAgPSBtYWNfcmVzZXQsCisJLmludGVycnVwdF9lbmFibGUgICAgICAgID0gbWFjX2ludHJfZW5hYmxlLAorCS5pbnRlcnJ1cHRfZGlzYWJsZSAgICAgICA9IG1hY19pbnRyX2Rpc2FibGUsCisJLmludGVycnVwdF9jbGVhciAgICAgICAgID0gbWFjX2ludHJfY2xlYXIsCisJLmVuYWJsZSAgICAgICAgICAgICAgICAgID0gbWFjX2VuYWJsZSwKKwkuZGlzYWJsZSAgICAgICAgICAgICAgICAgPSBtYWNfZGlzYWJsZSwKKwkuc2V0X210dSAgICAgICAgICAgICAgICAgPSBtYWNfc2V0X210dSwKKwkuc2V0X3J4X21vZGUgICAgICAgICAgICAgPSBtYWNfc2V0X3J4X21vZGUsCisJLnNldF9zcGVlZF9kdXBsZXhfZmMgICAgID0gbWFjX3NldF9zcGVlZF9kdXBsZXhfZmMsCisJLm1hY2FkZHJlc3NfZ2V0ICAgICAgICAgID0gbWFjX2dldF9hZGRyZXNzLAorCS5zdGF0aXN0aWNzX3VwZGF0ZSAgICAgICA9IG1hY191cGRhdGVfc3RhdGlzdGljcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21hYyAqbWFjX2NyZWF0ZShhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY21hYyAqbWFjOworCXUzMiBkYXRhMzI7CisKKwlpZiAoaW5kZXggPj0gNCkKKwkJcmV0dXJuIE5VTEw7CisKKwltYWMgPSBremFsbG9jKHNpemVvZigqbWFjKSArIHNpemVvZihjbWFjX2luc3RhbmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYWMpCisJCXJldHVybiBOVUxMOworCisJbWFjLT5vcHMgPSAmY2hlbHNpb19tYWNfb3BzOworCW1hYy0+aW5zdGFuY2UgPSAoY21hY19pbnN0YW5jZSAqKSAobWFjICsgMSk7CisKKwltYWMtPmluc3RhbmNlLT5pbmRleCA9IGluZGV4OworCW1hYy0+YWRhcHRlciA9IGFkYXB0ZXI7CisKKwlkYXRhMzIgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgTUFDX1JFR19DU1IobWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKwlkYXRhMzIgJj0gfihGX01BQ19SRVNFVCB8IEZfTUFDX1BST01JU0MgfCBGX01BQ19QUk9NSVNDIHwKKwkJICAgIEZfTUFDX0xCX0VOQUJMRSB8IEZfTUFDX1JYX0VOQUJMRSB8IEZfTUFDX1RYX0VOQUJMRSk7CisJZGF0YTMyIHw9IEZfTUFDX0pVTUJPX0VOQUJMRTsKKwl3cml0ZWwoZGF0YTMyLCBhZGFwdGVyLT5yZWdzICsgTUFDX1JFR19DU1IobWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHJhbmRvbSBiYWNrb2ZmIHNlZWQuICovCisJZGF0YTMyID0gMHg1NWFhICsgKDMgKiBpbmRleCk7CisJd3JpdGVsKGRhdGEzMiwKKwkgICAgICAgYWRhcHRlci0+cmVncyArIE1BQ19SRUdfR01SQU5EQkFDS09GRlNFRUQobWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKworCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbWFjIGFkZHJlc3MgbmVlZHMgdG8gYmUgc2V0IG1hbnVhbGx5LiAqLworCWRhdGEzMiA9IHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBNQUNfUkVHX0lETE8obWFjLT5pbnN0YW5jZS0+aW5kZXgpKTsKKwlpZiAoZGF0YTMyID09IDAgfHwgZGF0YTMyID09IDB4ZmZmZmZmZmYpIHsKKwkJLyoKKwkJICogQWRkIGEgZGVmYXVsdCBNQUMgYWRkcmVzcyBpZiB3ZSBjYW4ndCByZWFkIG9uZS4KKwkJICovCisJCXdyaXRlbCgweDQzRkZGRkZGIC0gaW5kZXgsCisJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgTUFDX1JFR19JRExPKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisJCXdyaXRlbCgweDAwMDcsCisJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgTUFDX1JFR19JREhJKG1hYy0+aW5zdGFuY2UtPmluZGV4KSk7CisJfQorCisJKHZvaWQpIG1hY19zZXRfbXR1KG1hYywgMTUwMCk7CisJcmV0dXJuIG1hYzsKK30KKworc3RydWN0IGdtYWMgdDFfY2hlbHNpb19tYWNfb3BzID0geworCS5jcmVhdGUgPSBtYWNfY3JlYXRlCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9tdjg4ZTF4eHguYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhYzkzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmMKQEAgLTAsMCArMSwzOTcgQEAKKy8qICREYXRlOiAyMDA1LzEwLzI0IDIzOjE4OjEzICQgJFJDU2ZpbGU6IG12ODhlMXh4eC5jLHYgJCAkUmV2aXNpb246IDEuNDkgJCAqLworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm12ODhlMXh4eC5oIgorI2luY2x1ZGUgImNwaHkuaCIKKyNpbmNsdWRlICJlbG1lcjAuaCIKKworLyogTVY4OEUxWFhYIE1ESSBjcm9zc292ZXIgcmVnaXN0ZXIgdmFsdWVzICovCisjZGVmaW5lIENST1NTT1ZFUl9NREkgICAwCisjZGVmaW5lIENST1NTT1ZFUl9NRElYICAxCisjZGVmaW5lIENST1NTT1ZFUl9BVVRPICAzCisKKyNkZWZpbmUgSU5UUl9FTkFCTEVfTUFTSyAweDZDQTAKKworLyoKKyAqIFNldCB0aGUgYml0cyBnaXZlbiBieSAnYml0dmFsJyBpbiBQSFkgcmVnaXN0ZXIgJ3JlZycuCisgKi8KK3N0YXRpYyB2b2lkIG1kaW9fc2V0X2JpdChzdHJ1Y3QgY3BoeSAqY3BoeSwgaW50IHJlZywgdTMyIGJpdHZhbCkKK3sKKwl1MzIgdmFsOworCisJKHZvaWQpIHNpbXBsZV9tZGlvX3JlYWQoY3BoeSwgcmVnLCAmdmFsKTsKKwkodm9pZCkgc2ltcGxlX21kaW9fd3JpdGUoY3BoeSwgcmVnLCB2YWwgfCBiaXR2YWwpOworfQorCisvKgorICogQ2xlYXIgdGhlIGJpdHMgZ2l2ZW4gYnkgJ2JpdHZhbCcgaW4gUEhZIHJlZ2lzdGVyICdyZWcnLgorICovCitzdGF0aWMgdm9pZCBtZGlvX2NsZWFyX2JpdChzdHJ1Y3QgY3BoeSAqY3BoeSwgaW50IHJlZywgdTMyIGJpdHZhbCkKK3sKKwl1MzIgdmFsOworCisJKHZvaWQpIHNpbXBsZV9tZGlvX3JlYWQoY3BoeSwgcmVnLCAmdmFsKTsKKwkodm9pZCkgc2ltcGxlX21kaW9fd3JpdGUoY3BoeSwgcmVnLCB2YWwgJiB+Yml0dmFsKTsKK30KKworLyoKKyAqIE5BTUU6ICAgcGh5X3Jlc2V0CisgKgorICogREVTQzogICBSZXNldCB0aGUgZ2l2ZW4gUEhZJ3MgcG9ydC4gTk9URTogVGhpcyBpcyBub3QgYSBnbG9iYWwKKyAqICAgICAgICAgY2hpcCByZXNldC4KKyAqCisgKiBQQVJBTVM6IGNwaHkgICAgIC0gUG9pbnRlciB0byBQSFkgaW5zdGFuY2UgZGF0YS4KKyAqCisgKiBSRVRVUk46ICAwIC0gU3VjY2Vzc2Z1bGwgcmVzZXQuCisgKiAgICAgICAgIC0xIC0gVGltZW91dC4KKyAqLworc3RhdGljIGludCBtdjg4ZTF4eHhfcmVzZXQoc3RydWN0IGNwaHkgKmNwaHksIGludCB3YWl0KQoreworCXUzMiBjdGw7CisJaW50IHRpbWVfb3V0ID0gMTAwMDsKKworCW1kaW9fc2V0X2JpdChjcGh5LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisKKwlkbyB7CisJCSh2b2lkKSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIE1JSV9CTUNSLCAmY3RsKTsKKwkJY3RsICY9IEJNQ1JfUkVTRVQ7CisJCWlmIChjdGwpCisJCQl1ZGVsYXkoMSk7CisJfSB3aGlsZSAoY3RsICYmIC0tdGltZV9vdXQpOworCisJcmV0dXJuIGN0bCA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBtdjg4ZTF4eHhfaW50ZXJydXB0X2VuYWJsZShzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwkvKiBFbmFibGUgUEhZIGludGVycnVwdHMuICovCisJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKGNwaHksIE1WODhFMVhYWF9JTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLAorCQkgICBJTlRSX0VOQUJMRV9NQVNLKTsKKworCS8qIEVuYWJsZSBNYXJ2ZWxsIGludGVycnVwdHMgdGhyb3VnaCBFbG1lcjAuICovCisJaWYgKHQxX2lzX2FzaWMoY3BoeS0+YWRhcHRlcikpIHsKKwkJdTMyIGVsbWVyOworCisJCXQxX3RwaV9yZWFkKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsICZlbG1lcik7CisJCWVsbWVyIHw9IEVMTUVSMF9HUF9CSVQxOworCQlpZiAoaXNfVDIoY3BoeS0+YWRhcHRlcikpIHsKKwkJICAgIGVsbWVyIHw9IEVMTUVSMF9HUF9CSVQyfEVMTUVSMF9HUF9CSVQzfEVMTUVSMF9HUF9CSVQ0OworICAgICAgICAgICAgICAgIH0KKwkJdDFfdHBpX3dyaXRlKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsIGVsbWVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY4OGUxeHh4X2ludGVycnVwdF9kaXNhYmxlKHN0cnVjdCBjcGh5ICpjcGh5KQoreworCS8qIERpc2FibGUgYWxsIHBoeSBpbnRlcnJ1cHRzLiAqLworCSh2b2lkKSBzaW1wbGVfbWRpb193cml0ZShjcGh5LCBNVjg4RTFYWFhfSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgMCk7CisKKwkvKiBEaXNhYmxlIE1hcnZlbGwgaW50ZXJydXB0cyB0aHJvdWdoIEVsbWVyMC4gKi8KKwlpZiAodDFfaXNfYXNpYyhjcGh5LT5hZGFwdGVyKSkgeworCQl1MzIgZWxtZXI7CisKKwkJdDFfdHBpX3JlYWQoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0VOQUJMRSwgJmVsbWVyKTsKKwkJZWxtZXIgJj0gfkVMTUVSMF9HUF9CSVQxOworCQlpZiAoaXNfVDIoY3BoeS0+YWRhcHRlcikpIHsKKwkJICAgIGVsbWVyICY9IH4oRUxNRVIwX0dQX0JJVDJ8RUxNRVIwX0dQX0JJVDN8RUxNRVIwX0dQX0JJVDQpOworICAgICAgICAgICAgICAgIH0KKwkJdDFfdHBpX3dyaXRlKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsIGVsbWVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY4OGUxeHh4X2ludGVycnVwdF9jbGVhcihzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwl1MzIgZWxtZXI7CisKKwkvKiBDbGVhciBQSFkgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSByZWdpc3Rlci4gKi8KKwkodm9pZCkgc2ltcGxlX21kaW9fcmVhZChjcGh5LAorCQkJTVY4OEUxWFhYX0lOVEVSUlVQVF9TVEFUVVNfUkVHSVNURVIsICZlbG1lcik7CisKKwkvKiBDbGVhciBNYXJ2ZWxsIGludGVycnVwdHMgdGhyb3VnaCBFbG1lcjAuICovCisJaWYgKHQxX2lzX2FzaWMoY3BoeS0+YWRhcHRlcikpIHsKKwkJdDFfdHBpX3JlYWQoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0NBVVNFLCAmZWxtZXIpOworCQllbG1lciB8PSBFTE1FUjBfR1BfQklUMTsKKwkJaWYgKGlzX1QyKGNwaHktPmFkYXB0ZXIpKSB7CisJCSAgICBlbG1lciB8PSBFTE1FUjBfR1BfQklUMnxFTE1FUjBfR1BfQklUM3xFTE1FUjBfR1BfQklUNDsKKyAgICAgICAgICAgICAgICB9CisJCXQxX3RwaV93cml0ZShjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9JTlRfQ0FVU0UsIGVsbWVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIFBIWSBzcGVlZCBhbmQgZHVwbGV4LiAgVGhpcyBhbHNvIGRpc2FibGVzIGF1dG8tbmVnb3RpYXRpb24sIGV4Y2VwdAorICogZm9yIDFHYi9zLCB3aGVyZSBhdXRvLW5lZ290aWF0aW9uIGlzIG1hbmRhdG9yeS4KKyAqLworc3RhdGljIGludCBtdjg4ZTF4eHhfc2V0X3NwZWVkX2R1cGxleChzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgc3BlZWQsIGludCBkdXBsZXgpCit7CisJdTMyIGN0bDsKKworCSh2b2lkKSBzaW1wbGVfbWRpb19yZWFkKHBoeSwgTUlJX0JNQ1IsICZjdGwpOworCWlmIChzcGVlZCA+PSAwKSB7CisJCWN0bCAmPSB+KEJNQ1JfU1BFRUQxMDAgfCBCTUNSX1NQRUVEMTAwMCB8IEJNQ1JfQU5FTkFCTEUpOworCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwKQorCQkJY3RsIHw9IEJNQ1JfU1BFRUQxMDA7CisJCWVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMDApCisJCQljdGwgfD0gQk1DUl9TUEVFRDEwMDA7CisJfQorCWlmIChkdXBsZXggPj0gMCkgeworCQljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9BTkVOQUJMRSk7CisJCWlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQljdGwgfD0gQk1DUl9GVUxMRFBMWDsKKwl9CisJaWYgKGN0bCAmIEJNQ1JfU1BFRUQxMDAwKSAgLyogYXV0by1uZWdvdGlhdGlvbiByZXF1aXJlZCBmb3IgMUdiL3MgKi8KKwkJY3RsIHw9IEJNQ1JfQU5FTkFCTEU7CisJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKHBoeSwgTUlJX0JNQ1IsIGN0bCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY4OGUxeHh4X2Nyb3Nzb3Zlcl9zZXQoc3RydWN0IGNwaHkgKmNwaHksIGludCBjcm9zc292ZXIpCit7CisJdTMyIGRhdGEzMjsKKworCSh2b2lkKSBzaW1wbGVfbWRpb19yZWFkKGNwaHksCisJCQlNVjg4RTFYWFhfU1BFQ0lGSUNfQ05UUkxfUkVHSVNURVIsICZkYXRhMzIpOworCWRhdGEzMiAmPSB+Vl9QU0NSX01ESV9YT1ZFUl9NT0RFKE1fUFNDUl9NRElfWE9WRVJfTU9ERSk7CisJZGF0YTMyIHw9IFZfUFNDUl9NRElfWE9WRVJfTU9ERShjcm9zc292ZXIpOworCSh2b2lkKSBzaW1wbGVfbWRpb193cml0ZShjcGh5LAorCQkJTVY4OEUxWFhYX1NQRUNJRklDX0NOVFJMX1JFR0lTVEVSLCBkYXRhMzIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12ODhlMXh4eF9hdXRvbmVnX2VuYWJsZShzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwl1MzIgY3RsOworCisJKHZvaWQpIG12ODhlMXh4eF9jcm9zc292ZXJfc2V0KGNwaHksIENST1NTT1ZFUl9BVVRPKTsKKworCSh2b2lkKSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIE1JSV9CTUNSLCAmY3RsKTsKKwkvKiByZXN0YXJ0IGF1dG9uZWcgZm9yIGNoYW5nZSB0byB0YWtlIGVmZmVjdCAqLworCWN0bCB8PSBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQ7CisJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKGNwaHksIE1JSV9CTUNSLCBjdGwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12ODhlMXh4eF9hdXRvbmVnX2Rpc2FibGUoc3RydWN0IGNwaHkgKmNwaHkpCit7CisJdTMyIGN0bDsKKworCS8qCisJICogQ3Jvc3NvdmVyICptdXN0KiBiZSBzZXQgdG8gbWFudWFsIGluIG9yZGVyIHRvIGRpc2FibGUgYXV0by1uZWcuCisJICogVGhlIEFsYXNrYSBGQVFzIGRvY3VtZW50IGhpZ2hsaWdodHMgdGhpcyBwb2ludC4KKwkgKi8KKwkodm9pZCkgbXY4OGUxeHh4X2Nyb3Nzb3Zlcl9zZXQoY3BoeSwgQ1JPU1NPVkVSX01ESSk7CisKKwkvKgorCSAqIE11c3QgaW5jbHVkZSBhdXRvbmVnIHJlc2V0IHdoZW4gZGlzYWJsaW5nIGF1dG8tbmVnLiBUaGlzCisJICogaXMgZGVzY3JpYmVkIGluIHRoZSBBbGFza2EgRkFRIGRvY3VtZW50LgorCSAqLworCSh2b2lkKSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIE1JSV9CTUNSLCAmY3RsKTsKKwljdGwgJj0gfkJNQ1JfQU5FTkFCTEU7CisJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKGNwaHksIE1JSV9CTUNSLCBjdGwgfCBCTUNSX0FOUkVTVEFSVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY4OGUxeHh4X2F1dG9uZWdfcmVzdGFydChzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwltZGlvX3NldF9iaXQoY3BoeSwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdjg4ZTF4eHhfYWR2ZXJ0aXNlKHN0cnVjdCBjcGh5ICpwaHksIHVuc2lnbmVkIGludCBhZHZlcnRpc2VfbWFwKQoreworCXUzMiB2YWwgPSAwOworCisJaWYgKGFkdmVydGlzZV9tYXAgJgorCSAgICAoQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKSB7CisJCSh2b2lkKSBzaW1wbGVfbWRpb19yZWFkKHBoeSwgTUlJX0dCQ1IsICZ2YWwpOworCQl2YWwgJj0gfihHQkNSX0FEVl8xMDAwSEFMRiB8IEdCQ1JfQURWXzEwMDBGVUxMKTsKKwkJaWYgKGFkdmVydGlzZV9tYXAgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKQorCQkJdmFsIHw9IEdCQ1JfQURWXzEwMDBIQUxGOworCQlpZiAoYWR2ZXJ0aXNlX21hcCAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCisJCQl2YWwgfD0gR0JDUl9BRFZfMTAwMEZVTEw7CisJfQorCSh2b2lkKSBzaW1wbGVfbWRpb193cml0ZShwaHksIE1JSV9HQkNSLCB2YWwpOworCisJdmFsID0gMTsKKwlpZiAoYWR2ZXJ0aXNlX21hcCAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQorCQl2YWwgfD0gQURWRVJUSVNFXzEwSEFMRjsKKwlpZiAoYWR2ZXJ0aXNlX21hcCAmIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsKQorCQl2YWwgfD0gQURWRVJUSVNFXzEwRlVMTDsKKwlpZiAoYWR2ZXJ0aXNlX21hcCAmIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikKKwkJdmFsIHw9IEFEVkVSVElTRV8xMDBIQUxGOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQorCQl2YWwgfD0gQURWRVJUSVNFXzEwMEZVTEw7CisJaWYgKGFkdmVydGlzZV9tYXAgJiBBRFZFUlRJU0VEX1BBVVNFKQorCQl2YWwgfD0gQURWRVJUSVNFX1BBVVNFOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF9BU1lNX1BBVVNFKQorCQl2YWwgfD0gQURWRVJUSVNFX1BBVVNFX0FTWU07CisJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdjg4ZTF4eHhfc2V0X2xvb3BiYWNrKHN0cnVjdCBjcGh5ICpjcGh5LCBpbnQgb24pCit7CisJaWYgKG9uKQorCQltZGlvX3NldF9iaXQoY3BoeSwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0spOworCWVsc2UKKwkJbWRpb19jbGVhcl9iaXQoY3BoeSwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG12ODhlMXh4eF9nZXRfbGlua19zdGF0dXMoc3RydWN0IGNwaHkgKmNwaHksIGludCAqbGlua19vaywKKwkJCQkgICAgIGludCAqc3BlZWQsIGludCAqZHVwbGV4LCBpbnQgKmZjKQoreworCXUzMiBzdGF0dXM7CisJaW50IHNwID0gLTEsIGRwbHggPSAtMSwgcGF1c2UgPSAwOworCisJKHZvaWQpIHNpbXBsZV9tZGlvX3JlYWQoY3BoeSwKKwkJCU1WODhFMVhYWF9TUEVDSUZJQ19TVEFUVVNfUkVHSVNURVIsICZzdGF0dXMpOworCWlmICgoc3RhdHVzICYgVl9QU1NSX1NUQVRVU19SRVNPTFZFRCkgIT0gMCkgeworCQlpZiAoc3RhdHVzICYgVl9QU1NSX1JYX1BBVVNFKQorCQkJcGF1c2UgfD0gUEFVU0VfUlg7CisJCWlmIChzdGF0dXMgJiBWX1BTU1JfVFhfUEFVU0UpCisJCQlwYXVzZSB8PSBQQVVTRV9UWDsKKwkJZHBseCA9IChzdGF0dXMgJiBWX1BTU1JfRFVQTEVYKSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJCXNwID0gR19QU1NSX1NQRUVEKHN0YXR1cyk7CisJCWlmIChzcCA9PSAwKQorCQkJc3AgPSBTUEVFRF8xMDsKKwkJZWxzZSBpZiAoc3AgPT0gMSkKKwkJCXNwID0gU1BFRURfMTAwOworCQllbHNlCisJCQlzcCA9IFNQRUVEXzEwMDA7CisJfQorCWlmIChsaW5rX29rKQorCQkqbGlua19vayA9IChzdGF0dXMgJiBWX1BTU1JfTElOSykgIT0gMDsKKwlpZiAoc3BlZWQpCisJCSpzcGVlZCA9IHNwOworCWlmIChkdXBsZXgpCisJCSpkdXBsZXggPSBkcGx4OworCWlmIChmYykKKwkJKmZjID0gcGF1c2U7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY4OGUxeHh4X2Rvd25zaGlmdF9zZXQoc3RydWN0IGNwaHkgKmNwaHksIGludCBkb3duc2hpZnRfZW5hYmxlKQoreworCXUzMiB2YWw7CisKKwkodm9pZCkgc2ltcGxlX21kaW9fcmVhZChjcGh5LAorCQlNVjg4RTFYWFhfRVhUX1BIWV9TUEVDSUZJQ19DTlRSTF9SRUdJU1RFUiwgJnZhbCk7CisKKwkvKgorCSAqIFNldCB0aGUgZG93bnNoaWZ0IGNvdW50ZXIgdG8gMiBzbyB3ZSB0cnkgdG8gZXN0YWJsaXNoIEdiIGxpbmsKKwkgKiB0d2ljZSBiZWZvcmUgZG93bnNoaWZ0aW5nLgorCSAqLworCXZhbCAmPSB+KFZfRE9XTlNISUZUX0VOQUJMRSB8IFZfRE9XTlNISUZUX0NOVChNX0RPV05TSElGVF9DTlQpKTsKKworCWlmIChkb3duc2hpZnRfZW5hYmxlKQorCQl2YWwgfD0gVl9ET1dOU0hJRlRfRU5BQkxFIHwgVl9ET1dOU0hJRlRfQ05UKDIpOworCSh2b2lkKSBzaW1wbGVfbWRpb193cml0ZShjcGh5LAorCQkJTVY4OEUxWFhYX0VYVF9QSFlfU1BFQ0lGSUNfQ05UUkxfUkVHSVNURVIsIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXY4OGUxeHh4X2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBjcGh5ICpjcGh5KQoreworCWludCBjcGh5X2NhdXNlID0gMDsKKwl1MzIgc3RhdHVzOworCisJLyoKKwkgKiBMb29wIHVudGlsIGNhdXNlIHJlYWRzIHplcm8uIE5lZWQgdG8gaGFuZGxlIGJvdW5jaW5nIGludGVycnVwdHMuCisgICAgICAgICAqLworCXdoaWxlICgxKSB7CisJCXUzMiBjYXVzZTsKKworCQkodm9pZCkgc2ltcGxlX21kaW9fcmVhZChjcGh5LAorCQkJCU1WODhFMVhYWF9JTlRFUlJVUFRfU1RBVFVTX1JFR0lTVEVSLAorCQkJCSZjYXVzZSk7CisJCWNhdXNlICY9IElOVFJfRU5BQkxFX01BU0s7CisJCWlmICghY2F1c2UpIGJyZWFrOworCisJCWlmIChjYXVzZSAmIE1WODhFMVhYWF9JTlRSX0xJTktfQ0hORykgeworCQkJKHZvaWQpIHNpbXBsZV9tZGlvX3JlYWQoY3BoeSwKKwkJCQlNVjg4RTFYWFhfU1BFQ0lGSUNfU1RBVFVTX1JFR0lTVEVSLCAmc3RhdHVzKTsKKworCQkJaWYgKHN0YXR1cyAmIE1WODhFMVhYWF9JTlRSX0xJTktfQ0hORykgeworCQkJCWNwaHktPnN0YXRlIHw9IFBIWV9MSU5LX1VQOworCQkJfSBlbHNlIHsKKwkJCQljcGh5LT5zdGF0ZSAmPSB+UEhZX0xJTktfVVA7CisJCQkJaWYgKGNwaHktPnN0YXRlICYgUEhZX0FVVE9ORUdfRU4pCisJCQkJCWNwaHktPnN0YXRlICY9IH5QSFlfQVVUT05FR19SRFk7CisJCQkJY3BoeV9jYXVzZSB8PSBjcGh5X2NhdXNlX2xpbmtfY2hhbmdlOworCQkJfQorCQl9CisKKwkJaWYgKGNhdXNlICYgTVY4OEUxWFhYX0lOVFJfQVVUT05FR19ET05FKQorCQkJY3BoeS0+c3RhdGUgfD0gUEhZX0FVVE9ORUdfUkRZOworCisJCWlmICgoY3BoeS0+c3RhdGUgJiAoUEhZX0xJTktfVVAgfCBQSFlfQVVUT05FR19SRFkpKSA9PQorCQkJKFBIWV9MSU5LX1VQIHwgUEhZX0FVVE9ORUdfUkRZKSkKKwkJCQljcGh5X2NhdXNlIHw9IGNwaHlfY2F1c2VfbGlua19jaGFuZ2U7CisJfQorCXJldHVybiBjcGh5X2NhdXNlOworfQorCitzdGF0aWMgdm9pZCBtdjg4ZTF4eHhfZGVzdHJveShzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwlrZnJlZShjcGh5KTsKK30KKworc3RhdGljIHN0cnVjdCBjcGh5X29wcyBtdjg4ZTF4eHhfb3BzID0geworCS5kZXN0cm95ICAgICAgICAgICAgICA9IG12ODhlMXh4eF9kZXN0cm95LAorCS5yZXNldCAgICAgICAgICAgICAgICA9IG12ODhlMXh4eF9yZXNldCwKKwkuaW50ZXJydXB0X2VuYWJsZSAgICAgPSBtdjg4ZTF4eHhfaW50ZXJydXB0X2VuYWJsZSwKKwkuaW50ZXJydXB0X2Rpc2FibGUgICAgPSBtdjg4ZTF4eHhfaW50ZXJydXB0X2Rpc2FibGUsCisJLmludGVycnVwdF9jbGVhciAgICAgID0gbXY4OGUxeHh4X2ludGVycnVwdF9jbGVhciwKKwkuaW50ZXJydXB0X2hhbmRsZXIgICAgPSBtdjg4ZTF4eHhfaW50ZXJydXB0X2hhbmRsZXIsCisJLmF1dG9uZWdfZW5hYmxlICAgICAgID0gbXY4OGUxeHh4X2F1dG9uZWdfZW5hYmxlLAorCS5hdXRvbmVnX2Rpc2FibGUgICAgICA9IG12ODhlMXh4eF9hdXRvbmVnX2Rpc2FibGUsCisJLmF1dG9uZWdfcmVzdGFydCAgICAgID0gbXY4OGUxeHh4X2F1dG9uZWdfcmVzdGFydCwKKwkuYWR2ZXJ0aXNlICAgICAgICAgICAgPSBtdjg4ZTF4eHhfYWR2ZXJ0aXNlLAorCS5zZXRfbG9vcGJhY2sgICAgICAgICA9IG12ODhlMXh4eF9zZXRfbG9vcGJhY2ssCisJLnNldF9zcGVlZF9kdXBsZXggICAgID0gbXY4OGUxeHh4X3NldF9zcGVlZF9kdXBsZXgsCisJLmdldF9saW5rX3N0YXR1cyAgICAgID0gbXY4OGUxeHh4X2dldF9saW5rX3N0YXR1cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3BoeSAqbXY4OGUxeHh4X3BoeV9jcmVhdGUoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgcGh5X2FkZHIsCisJCQkJCSBzdHJ1Y3QgbWRpb19vcHMgKm1kaW9fb3BzKQoreworCXN0cnVjdCBjcGh5ICpjcGh5ID0ga3phbGxvYyhzaXplb2YoKmNwaHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY3BoeSkgcmV0dXJuIE5VTEw7CisKKwljcGh5X2luaXQoY3BoeSwgYWRhcHRlciwgcGh5X2FkZHIsICZtdjg4ZTF4eHhfb3BzLCBtZGlvX29wcyk7CisKKwkvKiBDb25maWd1cmUgcGFydGljdWxhciBQSFkncyB0byBydW4gaW4gYSBkaWZmZXJlbnQgbW9kZS4gKi8KKwlpZiAoKGJvYXJkX2luZm8oYWRhcHRlciktPmNhcHMgJiBTVVBQT1JURURfVFApICYmCisJICAgIGJvYXJkX2luZm8oYWRhcHRlciktPmNoaXBfcGh5ID09IENIQlRfUEhZXzg4RTExMTEpIHsKKwkJLyoKKwkJICogQ29uZmlndXJlIHRoZSBQSFkgdHJhbnNtaXR0ZXIgYXMgY2xhc3MgQSB0byByZWR1Y2UgRU1JLgorCQkgKi8KKwkJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKGNwaHksCisJCQkJTVY4OEUxWFhYX0VYVEVOREVEX0FERFJfUkVHSVNURVIsIDB4Qik7CisJCSh2b2lkKSBzaW1wbGVfbWRpb193cml0ZShjcGh5LAorCQkJCU1WODhFMVhYWF9FWFRFTkRFRF9SRUdJU1RFUiwgMHg4MDA0KTsKKwl9CisJKHZvaWQpIG12ODhlMXh4eF9kb3duc2hpZnRfc2V0KGNwaHksIDEpOyAgIC8qIEVuYWJsZSBkb3duc2hpZnQgKi8KKworICAgICAgICAvKiBMRUQgKi8KKwlpZiAoaXNfVDIoYWRhcHRlcikpIHsKKwkJKHZvaWQpIHNpbXBsZV9tZGlvX3dyaXRlKGNwaHksCisJCQkJTVY4OEUxWFhYX0xFRF9DT05UUk9MX1JFR0lTVEVSLCAweDEpOworICAgICAgICB9CisKKwlyZXR1cm4gY3BoeTsKK30KKworc3RhdGljIGludCBtdjg4ZTF4eHhfcGh5X3Jlc2V0KGFkYXB0ZXJfdCogYWRhcHRlcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGdwaHkgdDFfbXY4OGUxeHh4X29wcyA9IHsKKwltdjg4ZTF4eHhfcGh5X2NyZWF0ZSwKKwltdjg4ZTF4eHhfcGh5X3Jlc2V0Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9tdjg4ZTF4eHguaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3Y2M0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OGUxeHh4LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qICREYXRlOiAyMDA1LzAzLzA3IDIzOjU5OjA1ICQgJFJDU2ZpbGU6IG12ODhlMXh4eC5oLHYgJCAkUmV2aXNpb246IDEuMTMgJCAqLworI2lmbmRlZiBDSEVMU0lPX01WOEUxWFhYX0gKKyNkZWZpbmUgQ0hFTFNJT19NVjhFMVhYWF9ICisKKyNpZm5kZWYgQk1DUl9TUEVFRDEwMDAKKyMgZGVmaW5lIEJNQ1JfU1BFRUQxMDAwIDB4NDAKKyNlbmRpZgorCisjaWZuZGVmIEFEVkVSVElTRV9QQVVTRQorIyBkZWZpbmUgQURWRVJUSVNFX1BBVVNFIDB4NDAwCisjZW5kaWYKKyNpZm5kZWYgQURWRVJUSVNFX1BBVVNFX0FTWU0KKyMgZGVmaW5lIEFEVkVSVElTRV9QQVVTRV9BU1lNIDB4ODAwCisjZW5kaWYKKworLyogR2lnYWJpdCBNSUkgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1JSV9HQkNSIDkgICAgICAgLyogMTAwMEJhc2UtVCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9HQlNSIDEwICAgICAgLyogMTAwMEJhc2UtVCBzdGF0dXMgcmVnaXN0ZXIgKi8KKworLyogMTAwMEJhc2UtVCBjb250cm9sIHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBHQkNSX0FEVl8xMDAwSEFMRiAgICAgICAgIDB4MTAwCisjZGVmaW5lIEdCQ1JfQURWXzEwMDBGVUxMICAgICAgICAgMHgyMDAKKyNkZWZpbmUgR0JDUl9QUkVGRVJfTUFTVEVSICAgICAgICAweDQwMAorI2RlZmluZSBHQkNSX01BTlVBTF9BU19NQVNURVIgICAgIDB4ODAwCisjZGVmaW5lIEdCQ1JfTUFOVUFMX0NPTkZJR19FTkFCTEUgMHgxMDAwCisKKy8qIDEwMDBCYXNlLVQgc3RhdHVzIHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBHQlNSX0xQXzEwMDBIQUxGICAweDQwMAorI2RlZmluZSBHQlNSX0xQXzEwMDBGVUxMICAweDgwMAorI2RlZmluZSBHQlNSX1JFTU9URV9PSyAgICAweDEwMDAKKyNkZWZpbmUgR0JTUl9MT0NBTF9PSyAgICAgMHgyMDAwCisjZGVmaW5lIEdCU1JfTE9DQUxfTUFTVEVSIDB4NDAwMAorI2RlZmluZSBHQlNSX01BU1RFUl9GQVVMVCAweDgwMDAKKworLyogTWFydmVsbCBQSFkgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiAqLworI2RlZmluZSBNVjg4RTFYWFhfSU5UUl9KQUJCRVIgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE1WODhFMVhYWF9JTlRSX1BPTEFSSVRZX0NITkcgICAweDAwMDIKKyNkZWZpbmUgTVY4OEUxWFhYX0lOVFJfRU5HX0RFVEVDVF9DSE5HIDB4MDAxMAorI2RlZmluZSBNVjg4RTFYWFhfSU5UUl9ET1dOU0hJRlQgICAgICAgMHgwMDIwCisjZGVmaW5lIE1WODhFMVhYWF9JTlRSX01ESV9YT1ZFUl9DSE5HICAweDAwNDAKKyNkZWZpbmUgTVY4OEUxWFhYX0lOVFJfRklGT19PVkVSX1VOREVSIDB4MDA4MAorI2RlZmluZSBNVjg4RTFYWFhfSU5UUl9GQUxTRV9DQVJSSUVSICAgMHgwMTAwCisjZGVmaW5lIE1WODhFMVhYWF9JTlRSX1NZTUJPTF9FUlJPUiAgICAweDAyMDAKKyNkZWZpbmUgTVY4OEUxWFhYX0lOVFJfTElOS19DSE5HICAgICAgIDB4MDQwMAorI2RlZmluZSBNVjg4RTFYWFhfSU5UUl9BVVRPTkVHX0RPTkUgICAgMHgwODAwCisjZGVmaW5lIE1WODhFMVhYWF9JTlRSX1BBR0VfUkVDViAgICAgICAweDEwMDAKKyNkZWZpbmUgTVY4OEUxWFhYX0lOVFJfRFVQTEVYX0NITkcgICAgIDB4MjAwMAorI2RlZmluZSBNVjg4RTFYWFhfSU5UUl9TUEVFRF9DSE5HICAgICAgMHg0MDAwCisjZGVmaW5lIE1WODhFMVhYWF9JTlRSX0FVVE9ORUdfRVJSICAgICAweDgwMDAKKworLyogTWFydmVsbCBQSFkgc3BlY2lmaWMgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBNVjg4RTFYWFhfU1BFQ0lGSUNfQ05UUkxfUkVHSVNURVIgICAgICAgICAgICAgICAxNgorI2RlZmluZSBNVjg4RTFYWFhfU1BFQ0lGSUNfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgICAxNworI2RlZmluZSBNVjg4RTFYWFhfSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiAgICAgICAgICAgICAxOAorI2RlZmluZSBNVjg4RTFYWFhfSU5URVJSVVBUX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAxOQorI2RlZmluZSBNVjg4RTFYWFhfRVhUX1BIWV9TUEVDSUZJQ19DTlRSTF9SRUdJU1RFUiAgICAgICAyMAorI2RlZmluZSBNVjg4RTFYWFhfUkVDVl9FUlJfQ05UUl9SRUdJU1RFUiAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBNVjg4RTFYWFhfUkVTX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBNVjg4RTFYWFhfR0xPQkFMX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAgICAyMworI2RlZmluZSBNVjg4RTFYWFhfTEVEX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBNVjg4RTFYWFhfTUFOVUFMX0xFRF9PVkVSUklERV9SRUdJU1RFUiAgICAgICAgICAyNQorI2RlZmluZSBNVjg4RTFYWFhfRVhUX1BIWV9TUEVDSUZJQ19DTlRSTF8yX1JFR0lTVEVSICAgICAyNgorI2RlZmluZSBNVjg4RTFYWFhfRVhUX1BIWV9TUEVDSUZJQ19TVEFUVVNfUkVHSVNURVIgICAgICAyNworI2RlZmluZSBNVjg4RTFYWFhfVklSVFVBTF9DQUJMRV9URVNURVJfUkVHSVNURVIgICAgICAgICAyOAorI2RlZmluZSBNVjg4RTFYWFhfRVhURU5ERURfQUREUl9SRUdJU1RFUiAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBNVjg4RTFYWFhfRVhURU5ERURfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAzMAorCisvKiBQSFkgc3BlY2lmaWMgY29udHJvbCByZWdpc3RlciBmaWVsZHMgKi8KKyNkZWZpbmUgU19QU0NSX01ESV9YT1ZFUl9NT0RFICAgIDUKKyNkZWZpbmUgTV9QU0NSX01ESV9YT1ZFUl9NT0RFICAgIDB4MworI2RlZmluZSBWX1BTQ1JfTURJX1hPVkVSX01PREUoeCkgKCh4KSA8PCBTX1BTQ1JfTURJX1hPVkVSX01PREUpCisjZGVmaW5lIEdfUFNDUl9NRElfWE9WRVJfTU9ERSh4KSAoKCh4KSA+PiBTX1BTQ1JfTURJX1hPVkVSX01PREUpICYgTV9QU0NSX01ESV9YT1ZFUl9NT0RFKQorCisvKiBFeHRlbmRlZCBQSFkgc3BlY2lmaWMgY29udHJvbCByZWdpc3RlciBmaWVsZHMgKi8KKyNkZWZpbmUgU19ET1dOU0hJRlRfRU5BQkxFIDgKKyNkZWZpbmUgVl9ET1dOU0hJRlRfRU5BQkxFICgxIDw8IFNfRE9XTlNISUZUX0VOQUJMRSkKKworI2RlZmluZSBTX0RPV05TSElGVF9DTlQgICAgOQorI2RlZmluZSBNX0RPV05TSElGVF9DTlQgICAgMHg3CisjZGVmaW5lIFZfRE9XTlNISUZUX0NOVCh4KSAoKHgpIDw8IFNfRE9XTlNISUZUX0NOVCkKKyNkZWZpbmUgR19ET1dOU0hJRlRfQ05UKHgpICgoKHgpID4+IFNfRE9XTlNISUZUX0NOVCkgJiBNX0RPV05TSElGVF9DTlQpCisKKy8qIFBIWSBzcGVjaWZpYyBzdGF0dXMgcmVnaXN0ZXIgZmllbGRzICovCisjZGVmaW5lIFNfUFNTUl9KQUJCRVIgMAorI2RlZmluZSBWX1BTU1JfSkFCQkVSICgxIDw8IFNfUFNTUl9KQUJCRVIpCisKKyNkZWZpbmUgU19QU1NSX1BPTEFSSVRZIDEKKyNkZWZpbmUgVl9QU1NSX1BPTEFSSVRZICgxIDw8IFNfUFNTUl9QT0xBUklUWSkKKworI2RlZmluZSBTX1BTU1JfUlhfUEFVU0UgMgorI2RlZmluZSBWX1BTU1JfUlhfUEFVU0UgKDEgPDwgU19QU1NSX1JYX1BBVVNFKQorCisjZGVmaW5lIFNfUFNTUl9UWF9QQVVTRSAzCisjZGVmaW5lIFZfUFNTUl9UWF9QQVVTRSAoMSA8PCBTX1BTU1JfVFhfUEFVU0UpCisKKyNkZWZpbmUgU19QU1NSX0VORVJHWV9ERVRFQ1QgNAorI2RlZmluZSBWX1BTU1JfRU5FUkdZX0RFVEVDVCAoMSA8PCBTX1BTU1JfRU5FUkdZX0RFVEVDVCkKKworI2RlZmluZSBTX1BTU1JfRE9XTlNISUZUX1NUQVRVUyA1CisjZGVmaW5lIFZfUFNTUl9ET1dOU0hJRlRfU1RBVFVTICgxIDw8IFNfUFNTUl9ET1dOU0hJRlRfU1RBVFVTKQorCisjZGVmaW5lIFNfUFNTUl9NREkgNgorI2RlZmluZSBWX1BTU1JfTURJICgxIDw8IFNfUFNTUl9NREkpCisKKyNkZWZpbmUgU19QU1NSX0NBQkxFX0xFTiAgICA3CisjZGVmaW5lIE1fUFNTUl9DQUJMRV9MRU4gICAgMHg3CisjZGVmaW5lIFZfUFNTUl9DQUJMRV9MRU4oeCkgKCh4KSA8PCBTX1BTU1JfQ0FCTEVfTEVOKQorI2RlZmluZSBHX1BTU1JfQ0FCTEVfTEVOKHgpICgoKHgpID4+IFNfUFNTUl9DQUJMRV9MRU4pICYgTV9QU1NSX0NBQkxFX0xFTikKKworI2RlZmluZSBTX1BTU1JfTElOSyAxMAorI2RlZmluZSBWX1BTU1JfTElOSyAoMSA8PCBTX1BTU1JfTElOSykKKworI2RlZmluZSBTX1BTU1JfU1RBVFVTX1JFU09MVkVEIDExCisjZGVmaW5lIFZfUFNTUl9TVEFUVVNfUkVTT0xWRUQgKDEgPDwgU19QU1NSX1NUQVRVU19SRVNPTFZFRCkKKworI2RlZmluZSBTX1BTU1JfUEFHRV9SRUNFSVZFRCAxMgorI2RlZmluZSBWX1BTU1JfUEFHRV9SRUNFSVZFRCAoMSA8PCBTX1BTU1JfUEFHRV9SRUNFSVZFRCkKKworI2RlZmluZSBTX1BTU1JfRFVQTEVYIDEzCisjZGVmaW5lIFZfUFNTUl9EVVBMRVggKDEgPDwgU19QU1NSX0RVUExFWCkKKworI2RlZmluZSBTX1BTU1JfU1BFRUQgICAgMTQKKyNkZWZpbmUgTV9QU1NSX1NQRUVEICAgIDB4MworI2RlZmluZSBWX1BTU1JfU1BFRUQoeCkgKCh4KSA8PCBTX1BTU1JfU1BFRUQpCisjZGVmaW5lIEdfUFNTUl9TUEVFRCh4KSAoKCh4KSA+PiBTX1BTU1JfU1BFRUQpICYgTV9QU1NSX1NQRUVEKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OHgyMDF4LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL212ODh4MjAxeC5jCmluZGV4IGRiNTAzNDI4Li5jOGU4OTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL212ODh4MjAxeC5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXY4OHgyMDF4LmMKQEAgLTg1LDI5ICs4NSwzMyBAQAogCiBzdGF0aWMgaW50IG12ODh4MjAxeF9pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBjcGh5ICpjcGh5KQogewotCXUzMiBlbG1lcjsKLQogCS8qIEVuYWJsZSBQSFkgTEFTSSBpbnRlcnJ1cHRzLiAqLwogCW1kaW9fd3JpdGUoY3BoeSwgMHgxLCAweDkwMDIsIDB4MSk7CiAKIAkvKiBFbmFibGUgTWFydmVsbCBpbnRlcnJ1cHRzIHRocm91Z2ggRWxtZXIwLiAqLwotCXQxX3RwaV9yZWFkKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsICZlbG1lcik7Ci0JZWxtZXIgfD0gRUxNRVIwX0dQX0JJVDY7Ci0JdDFfdHBpX3dyaXRlKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsIGVsbWVyKTsKKwlpZiAodDFfaXNfYXNpYyhjcGh5LT5hZGFwdGVyKSkgeworCQl1MzIgZWxtZXI7CisKKwkJdDFfdHBpX3JlYWQoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0VOQUJMRSwgJmVsbWVyKTsKKwkJZWxtZXIgfD0gRUxNRVIwX0dQX0JJVDY7CisJCXQxX3RwaV93cml0ZShjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9JTlRfRU5BQkxFLCBlbG1lcik7CisJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG12ODh4MjAxeF9pbnRlcnJ1cHRfZGlzYWJsZShzdHJ1Y3QgY3BoeSAqY3BoeSkKIHsKLQl1MzIgZWxtZXI7Ci0KIAkvKiBEaXNhYmxlIFBIWSBMQVNJIGludGVycnVwdHMuICovCiAJbWRpb193cml0ZShjcGh5LCAweDEsIDB4OTAwMiwgMHgwKTsKIAogCS8qIERpc2FibGUgTWFydmVsbCBpbnRlcnJ1cHRzIHRocm91Z2ggRWxtZXIwLiAqLwotCXQxX3RwaV9yZWFkKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsICZlbG1lcik7Ci0JZWxtZXIgJj0gfkVMTUVSMF9HUF9CSVQ2OwotCXQxX3RwaV93cml0ZShjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9JTlRfRU5BQkxFLCBlbG1lcik7CisJaWYgKHQxX2lzX2FzaWMoY3BoeS0+YWRhcHRlcikpIHsKKwkJdTMyIGVsbWVyOworCisJCXQxX3RwaV9yZWFkKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsICZlbG1lcik7CisJCWVsbWVyICY9IH5FTE1FUjBfR1BfQklUNjsKKwkJdDFfdHBpX3dyaXRlKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsIGVsbWVyKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MCw5ICsxNDQsMTEgQEAKICNlbmRpZgogCiAJLyogQ2xlYXIgTWFydmVsbCBpbnRlcnJ1cHRzIHRocm91Z2ggRWxtZXIwLiAqLwotCXQxX3RwaV9yZWFkKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9DQVVTRSwgJmVsbWVyKTsKLQllbG1lciB8PSBFTE1FUjBfR1BfQklUNjsKLQl0MV90cGlfd3JpdGUoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0NBVVNFLCBlbG1lcik7CisJaWYgKHQxX2lzX2FzaWMoY3BoeS0+YWRhcHRlcikpIHsKKwkJdDFfdHBpX3JlYWQoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0NBVVNFLCAmZWxtZXIpOworCQllbG1lciB8PSBFTE1FUjBfR1BfQklUNjsKKwkJdDFfdHBpX3dyaXRlKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9DQVVTRSwgZWxtZXIpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA1LDExICsyMTEsMTEgQEAKIAkJCQkJIHN0cnVjdCBtZGlvX29wcyAqbWRpb19vcHMpCiB7CiAJdTMyIHZhbDsKLQlzdHJ1Y3QgY3BoeSAqY3BoeSA9IGttYWxsb2Moc2l6ZW9mKCpjcGh5KSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGNwaHkgKmNwaHkgPSBremFsbG9jKHNpemVvZigqY3BoeSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFjcGh5KQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoY3BoeSwgMCwgc2l6ZW9mKCpjcGh5KSk7CisKIAljcGh5X2luaXQoY3BoeSwgYWRhcHRlciwgcGh5X2FkZHIsICZtdjg4eDIwMXhfb3BzLCBtZGlvX29wcyk7CiAKIAkvKiBDb21tYW5kcyB0aGUgUEhZIHRvIGVuYWJsZSBYRlAncyBjbG9jay4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vbXkzMTI2LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL215MzEyNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTAwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL215MzEyNi5jCkBAIC0wLDAgKzEsMjA0IEBACisvKiAkRGF0ZTogMjAwNS8xMS8xMiAwMjoxMzo0OSAkICRSQ1NmaWxlOiBteTMxMjYuYyx2ICQgJFJldmlzaW9uOiAxLjE1ICQgKi8KKyNpbmNsdWRlICJjcGh5LmgiCisjaW5jbHVkZSAiZWxtZXIwLmgiCisjaW5jbHVkZSAic3VuaTF4MTBnZXhwX3JlZ3MuaCIKKworLyogUG9ydCBSZXNldCAqLworc3RhdGljIGludCBteTMxMjZfcmVzZXQoc3RydWN0IGNwaHkgKmNwaHksIGludCB3YWl0KQoreworCS8qCisJICogVGhpcyBjYW4gYmUgZG9uZSB0aHJvdWdoIHJlZ2lzdGVycy4gIEl0IGlzIG5vdCByZXF1aXJlZCBzaW5jZQorCSAqIGEgZnVsbCBjaGlwIHJlc2V0IGlzIHVzZWQuCisJICovCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludCBteTMxMjZfaW50ZXJydXB0X2VuYWJsZShzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNwaHktPnBoeV91cGRhdGUsIEhaLzMwKTsKKwl0MV90cGlfcmVhZChjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9HUE8sICZjcGh5LT5lbG1lcl9ncG8pOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgbXkzMTI2X2ludGVycnVwdF9kaXNhYmxlKHN0cnVjdCBjcGh5ICpjcGh5KQoreworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmNwaHktPnBoeV91cGRhdGUpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgbXkzMTI2X2ludGVycnVwdF9jbGVhcihzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwlyZXR1cm4gKDApOworfQorCisjZGVmaW5lIE9GRlNFVChSRUdfQUREUikgICAgKFJFR19BRERSIDw8IDIpCisKK3N0YXRpYyBpbnQgbXkzMTI2X2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBjcGh5ICpjcGh5KQoreworCXUzMiB2YWw7CisJdTE2IHZhbDE2OworCXUxNiBzdGF0dXM7CisJdTMyIGFjdF9jb3VudDsKKwlhZGFwdGVyX3QgKmFkYXB0ZXI7CisJYWRhcHRlciA9IGNwaHktPmFkYXB0ZXI7CisKKwlpZiAoY3BoeS0+Y291bnQgPT0gNTApIHsKKwkJbWRpb19yZWFkKGNwaHksIDB4MSwgMHgxLCAmdmFsKTsKKwkJdmFsMTYgPSAodTE2KSB2YWw7CisJCXN0YXR1cyA9IGNwaHktPmJtc3IgXiB2YWwxNjsKKworCQlpZiAoc3RhdHVzICYgQk1TUl9MU1RBVFVTKQorCQkJdDFfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIDApOworCQljcGh5LT5ibXNyID0gdmFsMTY7CisKKwkJLyogV2UgaGF2ZSBvbmx5IGVuYWJsZWQgbGluayBjaGFuZ2UgaW50ZXJydXB0cyBzbyBpdAorCQkgICBtdXN0IGJlIHRoYXQKKwkJICovCisJCWNwaHktPmNvdW50ID0gMDsKKwl9CisKKwl0MV90cGlfd3JpdGUoYWRhcHRlciwgT0ZGU0VUKFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09OVFJPTCksCisJCVNVTkkxeDEwR0VYUF9CSVRNU0tfTVNUQVRfU05BUCk7CisJdDFfdHBpX3JlYWQoYWRhcHRlciwKKwkJT0ZGU0VUKFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl8xX0xPVyksICZhY3RfY291bnQpOworCXQxX3RwaV9yZWFkKGFkYXB0ZXIsCisJCU9GRlNFVChTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzNfTE9XKSwgJnZhbCk7CisJYWN0X2NvdW50ICs9IHZhbDsKKworCS8qIFBvcHVsYXRlIGVsbWVyX2dwbyB3aXRoIHRoZSByZWdpc3RlciB2YWx1ZSAqLworCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJY3BoeS0+ZWxtZXJfZ3BvID0gdmFsOworCisJaWYgKCAodmFsICYgKDEgPDwgOCkpIHx8ICh2YWwgJiAoMSA8PCAxOSkpIHx8CisJICAgICAoY3BoeS0+YWN0X2NvdW50ID09IGFjdF9jb3VudCkgfHwgY3BoeS0+YWN0X29uICkgeworCQlpZiAoaXNfVDIoYWRhcHRlcikpCisJCQl2YWwgfD0gKDEgPDwgOSk7CisJCWVsc2UgaWYgKHQxX2lzX1QxQihhZGFwdGVyKSkKKwkJCXZhbCB8PSAoMSA8PCAyMCk7CisJCWNwaHktPmFjdF9vbiA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGlzX1QyKGFkYXB0ZXIpKQorCQkJdmFsICY9IH4oMSA8PCA5KTsKKwkJZWxzZSBpZiAodDFfaXNfVDFCKGFkYXB0ZXIpKQorCQkJdmFsICY9IH4oMSA8PCAyMCk7CisJCWNwaHktPmFjdF9vbiA9IDE7CisJfQorCisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgdmFsKTsKKworCWNwaHktPmVsbWVyX2dwbyA9IHZhbDsKKwljcGh5LT5hY3RfY291bnQgPSBhY3RfY291bnQ7CisJY3BoeS0+Y291bnQrKzsKKworCXJldHVybiBjcGh5X2NhdXNlX2xpbmtfY2hhbmdlOworfQorCitzdGF0aWMgdm9pZCBteTMyMTZfcG9sbCh2b2lkICphcmcpCit7CisJbXkzMTI2X2ludGVycnVwdF9oYW5kbGVyKGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgbXkzMTI2X3NldF9sb29wYmFjayhzdHJ1Y3QgY3BoeSAqY3BoeSwgaW50IG9uKQoreworCXJldHVybiAoMCk7Cit9CisKKy8qIFRvIGNoZWNrIHRoZSBhY3Rpdml0eSBMRUQgKi8KK3N0YXRpYyBpbnQgbXkzMTI2X2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgY3BoeSAqY3BoeSwKKwkJCWludCAqbGlua19vaywgaW50ICpzcGVlZCwgaW50ICpkdXBsZXgsIGludCAqZmMpCit7CisJdTMyIHZhbDsKKwl1MTYgdmFsMTY7CisJYWRhcHRlcl90ICphZGFwdGVyOworCisJYWRhcHRlciA9IGNwaHktPmFkYXB0ZXI7CisJbWRpb19yZWFkKGNwaHksIDB4MSwgMHgxLCAmdmFsKTsKKwl2YWwxNiA9ICh1MTYpIHZhbDsKKworCS8qIFBvcHVsYXRlIGVsbWVyX2dwbyB3aXRoIHRoZSByZWdpc3RlciB2YWx1ZSAqLworCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJY3BoeS0+ZWxtZXJfZ3BvID0gdmFsOworCisJKmxpbmtfb2sgPSAodmFsMTYgJiBCTVNSX0xTVEFUVVMpOworCisJaWYgKCpsaW5rX29rKSB7CisJCS8qIFR1cm4gb24gdGhlIExFRC4gKi8KKwkJaWYgKGlzX1QyKGFkYXB0ZXIpKQorCQkJIHZhbCAmPSB+KDEgPDwgOCk7CisJCWVsc2UgaWYgKHQxX2lzX1QxQihhZGFwdGVyKSkKKwkJCSB2YWwgJj0gfigxIDw8IDE5KTsKKwl9IGVsc2UgeworCQkvKiBUdXJuIG9mZiB0aGUgTEVELiAqLworCQlpZiAoaXNfVDIoYWRhcHRlcikpCisJCQkgdmFsIHw9ICgxIDw8IDgpOworCQllbHNlIGlmICh0MV9pc19UMUIoYWRhcHRlcikpCisJCQkgdmFsIHw9ICgxIDw8IDE5KTsKKwl9CisKKwl0MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCWNwaHktPmVsbWVyX2dwbyA9IHZhbDsKKwkqc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkqZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisKKwkvKiBuZWVkIHRvIGFkZCBmbG93IGNvbnRyb2wgKi8KKwlpZiAoZmMpCisJCSpmYyA9IFBBVVNFX1JYIHwgUEFVU0VfVFg7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZCBteTMxMjZfZGVzdHJveShzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwlrZnJlZShjcGh5KTsKK30KKworc3RhdGljIHN0cnVjdCBjcGh5X29wcyBteTMxMjZfb3BzID0geworCS5kZXN0cm95CQk9IG15MzEyNl9kZXN0cm95LAorCS5yZXNldAkJCT0gbXkzMTI2X3Jlc2V0LAorCS5pbnRlcnJ1cHRfZW5hYmxlCT0gbXkzMTI2X2ludGVycnVwdF9lbmFibGUsCisJLmludGVycnVwdF9kaXNhYmxlCT0gbXkzMTI2X2ludGVycnVwdF9kaXNhYmxlLAorCS5pbnRlcnJ1cHRfY2xlYXIJPSBteTMxMjZfaW50ZXJydXB0X2NsZWFyLAorCS5pbnRlcnJ1cHRfaGFuZGxlcgk9IG15MzEyNl9pbnRlcnJ1cHRfaGFuZGxlciwKKwkuZ2V0X2xpbmtfc3RhdHVzCT0gbXkzMTI2X2dldF9saW5rX3N0YXR1cywKKwkuc2V0X2xvb3BiYWNrCQk9IG15MzEyNl9zZXRfbG9vcGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IGNwaHkgKm15MzEyNl9waHlfY3JlYXRlKGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCWludCBwaHlfYWRkciwgc3RydWN0IG1kaW9fb3BzICptZGlvX29wcykKK3sKKwlzdHJ1Y3QgY3BoeSAqY3BoeSA9IGt6YWxsb2Moc2l6ZW9mICgqY3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKGNwaHkpCisJCWNwaHlfaW5pdChjcGh5LCBhZGFwdGVyLCBwaHlfYWRkciwgJm15MzEyNl9vcHMsIG1kaW9fb3BzKTsKKworCUlOSVRfV09SSygmY3BoeS0+cGh5X3VwZGF0ZSwgbXkzMjE2X3BvbGwsIGNwaHkpOworCWNwaHktPmJtc3IgPSAwOworCisJcmV0dXJuIChjcGh5KTsKK30KKworLyogQ2hpcCBSZXNldCAqLworc3RhdGljIGludCBteTMxMjZfcGh5X3Jlc2V0KGFkYXB0ZXJfdCAqIGFkYXB0ZXIpCit7CisJdTMyIHZhbDsKKworCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJdmFsICY9IH40OworCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIHZhbCk7CisJbXNsZWVwKDEwMCk7CisKKwl0MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwgfCA0KTsKKwltc2xlZXAoMTAwMCk7CisKKwkvKiBOb3cgbGV0cyBlbmFibGUgdGhlIExhc2VyLiBEZWxheSAxMDB1cyAqLworCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgJnZhbCk7CisJdmFsIHw9IDB4ODAwMDsKKwl0MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCB2YWwpOworCXVkZWxheSgxMDApOworCXJldHVybiAoMCk7Cit9CisKK3N0cnVjdCBncGh5IHQxX215MzEyNl9vcHMgPSB7CisJbXkzMTI2X3BoeV9jcmVhdGUsCisJbXkzMTI2X3BoeV9yZXNldAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jCmluZGV4IDA0YTE0MDQuLjYzY2FiZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9wbTMzOTMuYwpAQCAtNDMsMjEgKzQzLDcgQEAKICNpbmNsdWRlICJlbG1lcjAuaCIKICNpbmNsdWRlICJzdW5pMXgxMGdleHBfcmVncy5oIgogCi0vKiA4MDIuM2FlIDEwR2IvcyBNRElPIE1hbmFnZWFibGUgRGV2aWNlKE1NRCkKLSAqLwotZW51bSB7Ci0gICAgTU1EX1JFU0VSVkVELAotICAgIE1NRF9QTUFQTUQsCi0gICAgTU1EX1dJUywKLSAgICBNTURfUENTLAotICAgIE1NRF9QSFlfWEdYUywJLyogWEdNSUkgRXh0ZW5kZXIgU3VibGF5ZXIgKi8KLSAgICBNTURfRFRFX1hHWFMsCi19OwotCi1lbnVtIHsKLSAgICBQSFlfWEdYU19DVFJMXzEsCi0gICAgUEhZX1hHWFNfU1RBVFVTXzEKLX07CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIAogI2RlZmluZSBPRkZTRVQoUkVHX0FERFIpICAgIChSRUdfQUREUiA8PCAyKQogCkBAIC04OCw2ICs3NCw4IEBACiAJUnhKYWJiZXJzID0gU1VOSTF4MTBHRVhQX1JFR19NU1RBVF9DT1VOVEVSXzE2X0xPVywKIAlSeEZyYWdtZW50cyA9IFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl8xN19MT1csCiAJUnhVbmRlcnNpemVkRnJhbWVzID0gIFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl8xOF9MT1csCisJUnhKdW1ib0ZyYW1lc1JlY2VpdmVkT0sgPSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjVfTE9XLAorCVJ4SnVtYm9PY3RldHNSZWNlaXZlZE9LID0gU1VOSTF4MTBHRVhQX1JFR19NU1RBVF9DT1VOVEVSXzI2X0xPVywKIAogCVR4T2N0ZXRzVHJhbnNtaXR0ZWRPSyA9IFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl8zM19MT1csCiAJVHhGcmFtZXNMb3N0RHVlVG9JbnRlcm5hbE1BQ1RyYW5zbWlzc2lvbkVycm9yID0gU1VOSTF4MTBHRVhQX1JFR19NU1RBVF9DT1VOVEVSXzM1X0xPVywKQEAgLTk1LDcgKzgzLDkgQEAKIAlUeFVuaWNhc3RGcmFtZXNUcmFuc21pdHRlZE9LID0gU1VOSTF4MTBHRVhQX1JFR19NU1RBVF9DT1VOVEVSXzM4X0xPVywKIAlUeE11bHRpY2FzdEZyYW1lc1RyYW5zbWl0dGVkT0sgPSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDBfTE9XLAogCVR4QnJvYWRjYXN0RnJhbWVzVHJhbnNtaXR0ZWRPSyA9IFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl80Ml9MT1csCi0JVHhQQVVTRU1BQ0N0cmxGcmFtZXNUcmFuc21pdHRlZCA9IFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl80M19MT1cKKwlUeFBBVVNFTUFDQ3RybEZyYW1lc1RyYW5zbWl0dGVkID0gU1VOSTF4MTBHRVhQX1JFR19NU1RBVF9DT1VOVEVSXzQzX0xPVywKKwlUeEp1bWJvRnJhbWVzUmVjZWl2ZWRPSyA9IFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl81MV9MT1csCisJVHhKdW1ib09jdGV0c1JlY2VpdmVkT0sgPSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTJfTE9XCiB9OwogCiBzdHJ1Y3QgX2NtYWNfaW5zdGFuY2UgewpAQCAtMTI0LDEyICsxMTQsMTIgQEAKIAogLyoKICAqIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciB0aGUgUE0zMzkzCi0KLQkxLiBFbmFibGUgUE0zMzkzIEJMT0NLIGludGVycnVwdHMuCi0JMi4gRW5hYmxlIFBNMzM5MyBNYXN0ZXIgSW50ZXJydXB0IGJpdChJTlRFKQotCTMuIEVuYWJsZSBFTE1FUidzIFBNMzM5MyBiaXQuCi0JNC4gRW5hYmxlIFRlcm1pbmF0b3IgZXh0ZXJuYWwgaW50ZXJydXB0LgotKi8KKyAqCisgKgkxLiBFbmFibGUgUE0zMzkzIEJMT0NLIGludGVycnVwdHMuCisgKgkyLiBFbmFibGUgUE0zMzkzIE1hc3RlciBJbnRlcnJ1cHQgYml0KElOVEUpCisgKgkzLiBFbmFibGUgRUxNRVIncyBQTTMzOTMgYml0LgorICoJNC4gRW5hYmxlIFRlcm1pbmF0b3IgZXh0ZXJuYWwgaW50ZXJydXB0LgorICovCiBzdGF0aWMgaW50IHBtMzM5M19pbnRlcnJ1cHRfZW5hYmxlKHN0cnVjdCBjbWFjICpjbWFjKQogewogCXUzMiBwbF9pbnRyOwpAQCAtMjU3LDE0ICsyNDcsMTIgQEAKIHN0YXRpYyBpbnQgcG0zMzkzX2ludGVycnVwdF9oYW5kbGVyKHN0cnVjdCBjbWFjICpjbWFjKQogewogCXUzMiBtYXN0ZXJfaW50cl9zdGF0dXM7Ci0vKgotCTEuIFJlYWQgbWFzdGVyIGludGVycnVwdCByZWdpc3Rlci4KLQkyLiBSZWFkIEJMT0NLJ3MgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcnMuCi0JMy4gSGFuZGxlIEJMT0NLIGludGVycnVwdHMuCi0qLworCiAJLyogUmVhZCB0aGUgbWFzdGVyIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuICovCiAJcG1yZWFkKGNtYWMsIFNVTkkxeDEwR0VYUF9SRUdfTUFTVEVSX0lOVEVSUlVQVF9TVEFUVVMsCiAJICAgICAgICZtYXN0ZXJfaW50cl9zdGF0dXMpOworCUNIX0RCRyhjbWFjLT5hZGFwdGVyLCBJTlRSLCAiUE0zMzkzIGludHIgY2F1c2UgMHgleFxuIiwKKwkgICAgICAgbWFzdGVyX2ludHJfc3RhdHVzKTsKIAogCS8qIFRCRCBYWFggTGV0cyBqdXN0IGNsZWFyIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwogCXBtMzM5M19pbnRlcnJ1cHRfY2xlYXIoY21hYyk7CkBAIC0zMDcsMTEgKzI5NSw3IEBACiAJICogVGhlIFBIWSBkb2Vzbid0IGdpdmUgdXMgbGluayBzdGF0dXMgaW5kaWNhdGlvbiBvbiBpdHMgb3duIHNvIGhhdmUKIAkgKiB0aGUgbGluayBtYW5hZ2VtZW50IGNvZGUgcXVlcnkgaXQgaW5zdGVhZC4KIAkgKi8KLQl7Ci0JCWV4dGVybiB2b2lkIGxpbmtfY2hhbmdlZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKLQotCQlsaW5rX2NoYW5nZWQoY21hYy0+YWRhcHRlciwgMCk7Ci0JfQorCXQxX2xpbmtfY2hhbmdlZChjbWFjLT5hZGFwdGVyLCAwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYzLDMzICszNDcsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdTMyIGNhbGNfY3JjKHU4ICpiLCBpbnQgbGVuKQotewotCWludCBpOwotCXUzMiBjcmMgPSAodTMyKX4wOwotCi0JLyogY2FsY3VsYXRlIGNyYyBvbmUgYml0IGF0IGEgdGltZSAqLwotCXdoaWxlIChsZW4tLSkgewotCQljcmMgXj0gKmIrKzsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJaWYgKGNyYyAmIDB4MSkKLQkJCQljcmMgPSAoY3JjID4+IDEpIF4gMHhlZGI4ODMyMDsKLQkJCWVsc2UKLQkJCQljcmMgPSAoY3JjID4+IDEpOwotCQl9Ci0JfQotCi0JLyogcmV2ZXJzZSBiaXRzICovCi0JY3JjID0gKChjcmMgPj4gNCkgJiAweDBmMGYwZjBmKSB8ICgoY3JjIDw8IDQpICYgMHhmMGYwZjBmMCk7Ci0JY3JjID0gKChjcmMgPj4gMikgJiAweDMzMzMzMzMzKSB8ICgoY3JjIDw8IDIpICYgMHhjY2NjY2NjYyk7Ci0JY3JjID0gKChjcmMgPj4gMSkgJiAweDU1NTU1NTU1KSB8ICgoY3JjIDw8IDEpICYgMHhhYWFhYWFhYSk7Ci0JLyogc3dhcCBieXRlcyAqLwotCWNyYyA9IChjcmMgPj4gMTYpIHwgKGNyYyA8PCAxNik7Ci0JY3JjID0gKGNyYyA+PiA4ICYgMHgwMGZmMDBmZikgfCAoY3JjIDw8IDggJiAweGZmMDBmZjAwKTsKLQotCXJldHVybiBjcmM7Ci19Ci0KIHN0YXRpYyBpbnQgcG0zMzkzX3NldF9yeF9tb2RlKHN0cnVjdCBjbWFjICpjbWFjLCBzdHJ1Y3QgdDFfcnhfbW9kZSAqcm0pCiB7CiAJaW50IGVuYWJsZWQgPSBjbWFjLT5pbnN0YW5jZS0+ZW5hYmxlZCAmIE1BQ19ESVJFQ1RJT05fUlg7CkBAIC00MjMsNyArMzgwLDcgQEAKIAkJdTE2IG1jX2ZpbHRlcls0XSA9IHsgMCwgfTsKIAogCQl3aGlsZSAoKGFkZHIgPSB0MV9nZXRfbmV4dF9tY2FkZHIocm0pKSkgewotCQkJYml0ID0gKGNhbGNfY3JjKGFkZHIsIEVUSF9BTEVOKSA+PiAyMykgJiAweDNmOwkvKiBiaXRbMjM6MjhdICovCisJCQliaXQgPSAoZXRoZXJfY3JjKEVUSF9BTEVOLCBhZGRyKSA+PiAyMykgJiAweDNmOwkvKiBiaXRbMjM6MjhdICovCiAJCQltY19maWx0ZXJbYml0ID4+IDRdIHw9IDEgPDwgKGJpdCAmIDB4Zik7CiAJCX0KIAkJcG13cml0ZShjbWFjLCBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfTVVMVElDQVNUX0hBU0hfTE9XLCBtY19maWx0ZXJbMF0pOwpAQCAtNDcxLDIwICs0MjgsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcG0zMzkzX3Jtb25fdXBkYXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgb2ZmcywgdTY0ICp2YWwsCisJCQkgICAgICAgaW50IG92ZXIpCit7CisJdTMyIHZhbDAsIHZhbDEsIHZhbDI7CisKKwl0MV90cGlfcmVhZChhZGFwdGVyLCBvZmZzLCAmdmFsMCk7CisJdDFfdHBpX3JlYWQoYWRhcHRlciwgb2ZmcyArIDQsICZ2YWwxKTsKKwl0MV90cGlfcmVhZChhZGFwdGVyLCBvZmZzICsgOCwgJnZhbDIpOworCisJKnZhbCAmPSB+MHVsbCA8PCA0MDsKKwkqdmFsIHw9IHZhbDAgJiAweGZmZmY7CisJKnZhbCB8PSAodmFsMSAmIDB4ZmZmZikgPDwgMTY7CisJKnZhbCB8PSAodTY0KSh2YWwyICYgMHhmZikgPDwgMzI7CisKKwlpZiAob3ZlcikKKwkJKnZhbCArPSAxdWxsIDw8IDQwOworfQorCiAjZGVmaW5lIFJNT05fVVBEQVRFKG1hYywgbmFtZSwgc3RhdF9uYW1lKSBcCi0JeyBcCi0JCXQxX3RwaV9yZWFkKChtYWMpLT5hZGFwdGVyLCBPRkZTRVQobmFtZSksICZ2YWwwKTsJXAotCQl0MV90cGlfcmVhZCgobWFjKS0+YWRhcHRlciwgT0ZGU0VUKCgobmFtZSkrMSkpLCAmdmFsMSk7IFwKLQkJdDFfdHBpX3JlYWQoKG1hYyktPmFkYXB0ZXIsIE9GRlNFVCgoKG5hbWUpKzIpKSwgJnZhbDIpOyBcCi0JCShtYWMpLT5zdGF0cy5zdGF0X25hbWUgPSAoKHU2NCl2YWwwICYgMHhmZmZmKSB8IFwKLQkJCQkJCSgoKHU2NCl2YWwxICYgMHhmZmZmKSA8PCAxNikgfCBcCi0JCQkJCQkoKCh1NjQpdmFsMiAmIDB4ZmYpIDw8IDMyKSB8IFwKLQkJCQkJCSgobWFjKS0+c3RhdHMuc3RhdF9uYW1lICYgXAotCQkJCQkJCSh+KHU2NCkwIDw8IDQwKSk7IFwKLQkJaWYgKHJvICYJXAotCQkJKChuYW1lIC0gIFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl8wX0xPVykgPj4gMikpIFwKLQkJCShtYWMpLT5zdGF0cy5zdGF0X25hbWUgKz0gKCh1NjQpMSA8PCA0MCk7IFwKLQl9CisJcG0zMzkzX3Jtb25fdXBkYXRlKChtYWMpLT5hZGFwdGVyLCBPRkZTRVQobmFtZSksIAkJXAorCQkJICAgJihtYWMpLT5zdGF0cy5zdGF0X25hbWUsCQkJXAorCQkgICAocm8gJigobmFtZSAtIFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl8wX0xPVykgPj4gMikpKQorCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY21hY19zdGF0aXN0aWNzICpwbTMzOTNfdXBkYXRlX3N0YXRpc3RpY3Moc3RydWN0IGNtYWMgKm1hYywKIAkJCQkJCQkgICAgICBpbnQgZmxhZykKQEAgLTUxOSw2ICs0ODUsOCBAQAogCVJNT05fVVBEQVRFKG1hYywgUnhKYWJiZXJzLCBSeEphYmJlckVycm9ycyk7CiAJUk1PTl9VUERBVEUobWFjLCBSeEZyYWdtZW50cywgUnhSdW50RXJyb3JzKTsKIAlSTU9OX1VQREFURShtYWMsIFJ4VW5kZXJzaXplZEZyYW1lcywgUnhSdW50RXJyb3JzKTsKKwlSTU9OX1VQREFURShtYWMsIFJ4SnVtYm9GcmFtZXNSZWNlaXZlZE9LLCBSeEp1bWJvRnJhbWVzT0spOworCVJNT05fVVBEQVRFKG1hYywgUnhKdW1ib09jdGV0c1JlY2VpdmVkT0ssIFJ4SnVtYm9PY3RldHNPSyk7CiAKIAkvKiBUeCBzdGF0cyAqLwogCVJNT05fVVBEQVRFKG1hYywgVHhPY3RldHNUcmFuc21pdHRlZE9LLCBUeE9jdGV0c09LKTsKQEAgLTUyOSw2ICs0OTcsOCBAQAogCVJNT05fVVBEQVRFKG1hYywgVHhNdWx0aWNhc3RGcmFtZXNUcmFuc21pdHRlZE9LLCBUeE11bHRpY2FzdEZyYW1lc09LKTsKIAlSTU9OX1VQREFURShtYWMsIFR4QnJvYWRjYXN0RnJhbWVzVHJhbnNtaXR0ZWRPSywgVHhCcm9hZGNhc3RGcmFtZXNPSyk7CiAJUk1PTl9VUERBVEUobWFjLCBUeFBBVVNFTUFDQ3RybEZyYW1lc1RyYW5zbWl0dGVkLCBUeFBhdXNlRnJhbWVzKTsKKwlSTU9OX1VQREFURShtYWMsIFR4SnVtYm9GcmFtZXNSZWNlaXZlZE9LLCBUeEp1bWJvRnJhbWVzT0spOworCVJNT05fVVBEQVRFKG1hYywgVHhKdW1ib09jdGV0c1JlY2VpdmVkT0ssIFR4SnVtYm9PY3RldHNPSyk7CiAKIAlyZXR1cm4gJm1hYy0+c3RhdHM7CiB9CkBAIC02MzEsMTAgKzYwMSw5IEBACiB7CiAJc3RydWN0IGNtYWMgKmNtYWM7CiAKLQljbWFjID0ga21hbGxvYyhzaXplb2YoKmNtYWMpICsgc2l6ZW9mKGNtYWNfaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwljbWFjID0ga3phbGxvYyhzaXplb2YoKmNtYWMpICsgc2l6ZW9mKGNtYWNfaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtYWMpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChjbWFjLCAwLCBzaXplb2YoKmNtYWMpKTsKIAogCWNtYWMtPm9wcyA9ICZwbTMzOTNfb3BzOwogCWNtYWMtPmluc3RhbmNlID0gKGNtYWNfaW5zdGFuY2UgKikgKGNtYWMgKyAxKTsKQEAgLTgxNSw2ICs3ODQsMTIgQEAKIAogCQlzdWNjZXNzZnVsX3Jlc2V0ID0gKGlzX3BsNF9yZXNldF9maW5pc2hlZCAmJiAhaXNfcGw0X291dG9mX2xvY2sKIAkJCQkgICAgJiYgaXNfeGF1aV9tYWJjX3BsbF9sb2NrZWQpOworCisJCUNIX0RCRyhhZGFwdGVyLCBIVywKKwkJICAgICAgICJQTTMzOTMgSFcgcmVzZXQgJWQ6IHBsNF9yZXNldCAweCV4LCB2YWwgMHgleCwgIgorCQkgICAgICAgImlzX3BsNF9vdXRvZl9sb2NrIDB4JXgsIHhhdWlfbG9ja2VkIDB4JXhcbiIsCisJCSAgICAgICBpLCBpc19wbDRfcmVzZXRfZmluaXNoZWQsIHZhbCwgaXNfcGw0X291dG9mX2xvY2ssCisJCSAgICAgICBpc194YXVpX21hYmNfcGxsX2xvY2tlZCk7CiAJfQogCXJldHVybiBzdWNjZXNzZnVsX3Jlc2V0ID8gMCA6IDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vcmVncy5oCmluZGV4IGI5MGUxMWYuLmM4MGJmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vcmVncy5oCkBAIC03MSw2ICs3MSwxMCBAQAogI2RlZmluZSBWX0NNRFFfUFJJT1JJVFkoeCkgKCh4KSA8PCBTX0NNRFFfUFJJT1JJVFkpCiAjZGVmaW5lIEdfQ01EUV9QUklPUklUWSh4KSAoKCh4KSA+PiBTX0NNRFFfUFJJT1JJVFkpICYgTV9DTURRX1BSSU9SSVRZKQogCisjZGVmaW5lIFNfRElTQUJMRV9DTURRMF9HVFMgICAgOAorI2RlZmluZSBWX0RJU0FCTEVfQ01EUTBfR1RTKHgpICgoeCkgPDwgU19ESVNBQkxFX0NNRFEwX0dUUykKKyNkZWZpbmUgRl9ESVNBQkxFX0NNRFEwX0dUUyAgICBWX0RJU0FCTEVfQ01EUTBfR1RTKDFVKQorCiAjZGVmaW5lIFNfRElTQUJMRV9DTURRMV9HVFMgICAgOQogI2RlZmluZSBWX0RJU0FCTEVfQ01EUTFfR1RTKHgpICgoeCkgPDwgU19ESVNBQkxFX0NNRFExX0dUUykKICNkZWZpbmUgRl9ESVNBQkxFX0NNRFExX0dUUyAgICBWX0RJU0FCTEVfQ01EUTFfR1RTKDFVKQpAQCAtODcsMTIgKzkxLDE4IEBACiAjZGVmaW5lIFZfRU5BQkxFX0JJR19FTkRJQU4oeCkgKCh4KSA8PCBTX0VOQUJMRV9CSUdfRU5ESUFOKQogI2RlZmluZSBGX0VOQUJMRV9CSUdfRU5ESUFOICAgIFZfRU5BQkxFX0JJR19FTkRJQU4oMVUpCiAKKyNkZWZpbmUgU19GTF9TRUxFQ1RJT05fQ1JJVEVSSUEgICAgMTMKKyNkZWZpbmUgVl9GTF9TRUxFQ1RJT05fQ1JJVEVSSUEoeCkgKCh4KSA8PCBTX0ZMX1NFTEVDVElPTl9DUklURVJJQSkKKyNkZWZpbmUgRl9GTF9TRUxFQ1RJT05fQ1JJVEVSSUEgICAgVl9GTF9TRUxFQ1RJT05fQ1JJVEVSSUEoMVUpCisKICNkZWZpbmUgU19JU0NTSV9DT0FMRVNDRSAgICAxNAogI2RlZmluZSBWX0lTQ1NJX0NPQUxFU0NFKHgpICgoeCkgPDwgU19JU0NTSV9DT0FMRVNDRSkKICNkZWZpbmUgRl9JU0NTSV9DT0FMRVNDRSAgICBWX0lTQ1NJX0NPQUxFU0NFKDFVKQogCiAjZGVmaW5lIFNfUlhfUEtUX09GRlNFVCAgICAxNQorI2RlZmluZSBNX1JYX1BLVF9PRkZTRVQgICAgMHg3CiAjZGVmaW5lIFZfUlhfUEtUX09GRlNFVCh4KSAoKHgpIDw8IFNfUlhfUEtUX09GRlNFVCkKKyNkZWZpbmUgR19SWF9QS1RfT0ZGU0VUKHgpICgoKHgpID4+IFNfUlhfUEtUX09GRlNFVCkgJiBNX1JYX1BLVF9PRkZTRVQpCiAKICNkZWZpbmUgU19WTEFOX1hUUkFDVCAgICAxOAogI2RlZmluZSBWX1ZMQU5fWFRSQUNUKHgpICgoeCkgPDwgU19WTEFOX1hUUkFDVCkKQEAgLTEwOCwxNiArMTE4LDExNCBAQAogI2RlZmluZSBBX1NHX0ZMMUJBU0VMV1IgMHgyMAogI2RlZmluZSBBX1NHX0ZMMUJBU0VVUFIgMHgyNAogI2RlZmluZSBBX1NHX0NNRDBTSVpFIDB4MjgKKworI2RlZmluZSBTX0NNRFEwX1NJWkUgICAgMAorI2RlZmluZSBNX0NNRFEwX1NJWkUgICAgMHgxZmZmZgorI2RlZmluZSBWX0NNRFEwX1NJWkUoeCkgKCh4KSA8PCBTX0NNRFEwX1NJWkUpCisjZGVmaW5lIEdfQ01EUTBfU0laRSh4KSAoKCh4KSA+PiBTX0NNRFEwX1NJWkUpICYgTV9DTURRMF9TSVpFKQorCiAjZGVmaW5lIEFfU0dfRkwwU0laRSAweDJjCisKKyNkZWZpbmUgU19GTDBfU0laRSAgICAwCisjZGVmaW5lIE1fRkwwX1NJWkUgICAgMHgxZmZmZgorI2RlZmluZSBWX0ZMMF9TSVpFKHgpICgoeCkgPDwgU19GTDBfU0laRSkKKyNkZWZpbmUgR19GTDBfU0laRSh4KSAoKCh4KSA+PiBTX0ZMMF9TSVpFKSAmIE1fRkwwX1NJWkUpCisKICNkZWZpbmUgQV9TR19SU1BTSVpFIDB4MzAKKworI2RlZmluZSBTX1JFU1BRX1NJWkUgICAgMAorI2RlZmluZSBNX1JFU1BRX1NJWkUgICAgMHgxZmZmZgorI2RlZmluZSBWX1JFU1BRX1NJWkUoeCkgKCh4KSA8PCBTX1JFU1BRX1NJWkUpCisjZGVmaW5lIEdfUkVTUFFfU0laRSh4KSAoKCh4KSA+PiBTX1JFU1BRX1NJWkUpICYgTV9SRVNQUV9TSVpFKQorCiAjZGVmaW5lIEFfU0dfUlNQQkFTRUxXUiAweDM0CiAjZGVmaW5lIEFfU0dfUlNQQkFTRVVQUiAweDM4CiAjZGVmaW5lIEFfU0dfRkxUSFJFU0hPTEQgMHgzYworCisjZGVmaW5lIFNfRkxfVEhSRVNIT0xEICAgIDAKKyNkZWZpbmUgTV9GTF9USFJFU0hPTEQgICAgMHhmZmZmCisjZGVmaW5lIFZfRkxfVEhSRVNIT0xEKHgpICgoeCkgPDwgU19GTF9USFJFU0hPTEQpCisjZGVmaW5lIEdfRkxfVEhSRVNIT0xEKHgpICgoKHgpID4+IFNfRkxfVEhSRVNIT0xEKSAmIE1fRkxfVEhSRVNIT0xEKQorCiAjZGVmaW5lIEFfU0dfUlNQUVVFVUVDUkVESVQgMHg0MAorCisjZGVmaW5lIFNfUkVTUFFfQ1JFRElUICAgIDAKKyNkZWZpbmUgTV9SRVNQUV9DUkVESVQgICAgMHgxZmZmZgorI2RlZmluZSBWX1JFU1BRX0NSRURJVCh4KSAoKHgpIDw8IFNfUkVTUFFfQ1JFRElUKQorI2RlZmluZSBHX1JFU1BRX0NSRURJVCh4KSAoKCh4KSA+PiBTX1JFU1BRX0NSRURJVCkgJiBNX1JFU1BRX0NSRURJVCkKKwogI2RlZmluZSBBX1NHX1NMRUVQSU5HIDB4NDgKKworI2RlZmluZSBTX1NMRUVQSU5HICAgIDAKKyNkZWZpbmUgTV9TTEVFUElORyAgICAweGZmZmYKKyNkZWZpbmUgVl9TTEVFUElORyh4KSAoKHgpIDw8IFNfU0xFRVBJTkcpCisjZGVmaW5lIEdfU0xFRVBJTkcoeCkgKCgoeCkgPj4gU19TTEVFUElORykgJiBNX1NMRUVQSU5HKQorCiAjZGVmaW5lIEFfU0dfSU5UUlRJTUVSIDB4NGMKKworI2RlZmluZSBTX0lOVEVSUlVQVF9USU1FUl9DT1VOVCAgICAwCisjZGVmaW5lIE1fSU5URVJSVVBUX1RJTUVSX0NPVU5UICAgIDB4ZmZmZmZmCisjZGVmaW5lIFZfSU5URVJSVVBUX1RJTUVSX0NPVU5UKHgpICgoeCkgPDwgU19JTlRFUlJVUFRfVElNRVJfQ09VTlQpCisjZGVmaW5lIEdfSU5URVJSVVBUX1RJTUVSX0NPVU5UKHgpICgoKHgpID4+IFNfSU5URVJSVVBUX1RJTUVSX0NPVU5UKSAmIE1fSU5URVJSVVBUX1RJTUVSX0NPVU5UKQorCisjZGVmaW5lIEFfU0dfQ01EMFBUUiAweDUwCisKKyNkZWZpbmUgU19DTURRMF9QT0lOVEVSICAgIDAKKyNkZWZpbmUgTV9DTURRMF9QT0lOVEVSICAgIDB4ZmZmZgorI2RlZmluZSBWX0NNRFEwX1BPSU5URVIoeCkgKCh4KSA8PCBTX0NNRFEwX1BPSU5URVIpCisjZGVmaW5lIEdfQ01EUTBfUE9JTlRFUih4KSAoKCh4KSA+PiBTX0NNRFEwX1BPSU5URVIpICYgTV9DTURRMF9QT0lOVEVSKQorCisjZGVmaW5lIFNfQ1VSUkVOVF9HRU5FUkFUSU9OX0JJVCAgICAxNgorI2RlZmluZSBWX0NVUlJFTlRfR0VORVJBVElPTl9CSVQoeCkgKCh4KSA8PCBTX0NVUlJFTlRfR0VORVJBVElPTl9CSVQpCisjZGVmaW5lIEZfQ1VSUkVOVF9HRU5FUkFUSU9OX0JJVCAgICBWX0NVUlJFTlRfR0VORVJBVElPTl9CSVQoMVUpCisKKyNkZWZpbmUgQV9TR19DTUQxUFRSIDB4NTQKKworI2RlZmluZSBTX0NNRFExX1BPSU5URVIgICAgMAorI2RlZmluZSBNX0NNRFExX1BPSU5URVIgICAgMHhmZmZmCisjZGVmaW5lIFZfQ01EUTFfUE9JTlRFUih4KSAoKHgpIDw8IFNfQ01EUTFfUE9JTlRFUikKKyNkZWZpbmUgR19DTURRMV9QT0lOVEVSKHgpICgoKHgpID4+IFNfQ01EUTFfUE9JTlRFUikgJiBNX0NNRFExX1BPSU5URVIpCisKKyNkZWZpbmUgQV9TR19GTDBQVFIgMHg1OAorCisjZGVmaW5lIFNfRkwwX1BPSU5URVIgICAgMAorI2RlZmluZSBNX0ZMMF9QT0lOVEVSICAgIDB4ZmZmZgorI2RlZmluZSBWX0ZMMF9QT0lOVEVSKHgpICgoeCkgPDwgU19GTDBfUE9JTlRFUikKKyNkZWZpbmUgR19GTDBfUE9JTlRFUih4KSAoKCh4KSA+PiBTX0ZMMF9QT0lOVEVSKSAmIE1fRkwwX1BPSU5URVIpCisKKyNkZWZpbmUgQV9TR19GTDFQVFIgMHg1YworCisjZGVmaW5lIFNfRkwxX1BPSU5URVIgICAgMAorI2RlZmluZSBNX0ZMMV9QT0lOVEVSICAgIDB4ZmZmZgorI2RlZmluZSBWX0ZMMV9QT0lOVEVSKHgpICgoeCkgPDwgU19GTDFfUE9JTlRFUikKKyNkZWZpbmUgR19GTDFfUE9JTlRFUih4KSAoKCh4KSA+PiBTX0ZMMV9QT0lOVEVSKSAmIE1fRkwxX1BPSU5URVIpCisKKyNkZWZpbmUgQV9TR19WRVJTSU9OIDB4NmMKKworI2RlZmluZSBTX0RBWSAgICAwCisjZGVmaW5lIE1fREFZICAgIDB4MWYKKyNkZWZpbmUgVl9EQVkoeCkgKCh4KSA8PCBTX0RBWSkKKyNkZWZpbmUgR19EQVkoeCkgKCgoeCkgPj4gU19EQVkpICYgTV9EQVkpCisKKyNkZWZpbmUgU19NT05USCAgICA1CisjZGVmaW5lIE1fTU9OVEggICAgMHhmCisjZGVmaW5lIFZfTU9OVEgoeCkgKCh4KSA8PCBTX01PTlRIKQorI2RlZmluZSBHX01PTlRIKHgpICgoKHgpID4+IFNfTU9OVEgpICYgTV9NT05USCkKKwogI2RlZmluZSBBX1NHX0NNRDFTSVpFIDB4YjAKKworI2RlZmluZSBTX0NNRFExX1NJWkUgICAgMAorI2RlZmluZSBNX0NNRFExX1NJWkUgICAgMHgxZmZmZgorI2RlZmluZSBWX0NNRFExX1NJWkUoeCkgKCh4KSA8PCBTX0NNRFExX1NJWkUpCisjZGVmaW5lIEdfQ01EUTFfU0laRSh4KSAoKCh4KSA+PiBTX0NNRFExX1NJWkUpICYgTV9DTURRMV9TSVpFKQorCiAjZGVmaW5lIEFfU0dfRkwxU0laRSAweGI0CisKKyNkZWZpbmUgU19GTDFfU0laRSAgICAwCisjZGVmaW5lIE1fRkwxX1NJWkUgICAgMHgxZmZmZgorI2RlZmluZSBWX0ZMMV9TSVpFKHgpICgoeCkgPDwgU19GTDFfU0laRSkKKyNkZWZpbmUgR19GTDFfU0laRSh4KSAoKCh4KSA+PiBTX0ZMMV9TSVpFKSAmIE1fRkwxX1NJWkUpCisKICNkZWZpbmUgQV9TR19JTlRfRU5BQkxFIDB4YjgKIAogI2RlZmluZSBTX1JFU1BRX0VYSEFVU1RFRCAgICAwCkBAIC0xNDQsMjEgKzI1MiwzNjkgQEAKICNkZWZpbmUgQV9TR19SRVNQQUNDVVRJTUVSIDB4YzAKIAogLyogTUMzIHJlZ2lzdGVycyAqLworI2RlZmluZSBBX01DM19DRkcgMHgxMDAKKworI2RlZmluZSBTX0NMS19FTkFCTEUgICAgMAorI2RlZmluZSBWX0NMS19FTkFCTEUoeCkgKCh4KSA8PCBTX0NMS19FTkFCTEUpCisjZGVmaW5lIEZfQ0xLX0VOQUJMRSAgICBWX0NMS19FTkFCTEUoMVUpCiAKICNkZWZpbmUgU19SRUFEWSAgICAxCiAjZGVmaW5lIFZfUkVBRFkoeCkgKCh4KSA8PCBTX1JFQURZKQogI2RlZmluZSBGX1JFQURZICAgIFZfUkVBRFkoMVUpCiAKLS8qIE1DNCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU19SRUFEX1RPX1dSSVRFX0RFTEFZICAgIDIKKyNkZWZpbmUgTV9SRUFEX1RPX1dSSVRFX0RFTEFZICAgIDB4NworI2RlZmluZSBWX1JFQURfVE9fV1JJVEVfREVMQVkoeCkgKCh4KSA8PCBTX1JFQURfVE9fV1JJVEVfREVMQVkpCisjZGVmaW5lIEdfUkVBRF9UT19XUklURV9ERUxBWSh4KSAoKCh4KSA+PiBTX1JFQURfVE9fV1JJVEVfREVMQVkpICYgTV9SRUFEX1RPX1dSSVRFX0RFTEFZKQogCisjZGVmaW5lIFNfV1JJVEVfVE9fUkVBRF9ERUxBWSAgICA1CisjZGVmaW5lIE1fV1JJVEVfVE9fUkVBRF9ERUxBWSAgICAweDcKKyNkZWZpbmUgVl9XUklURV9UT19SRUFEX0RFTEFZKHgpICgoeCkgPDwgU19XUklURV9UT19SRUFEX0RFTEFZKQorI2RlZmluZSBHX1dSSVRFX1RPX1JFQURfREVMQVkoeCkgKCgoeCkgPj4gU19XUklURV9UT19SRUFEX0RFTEFZKSAmIE1fV1JJVEVfVE9fUkVBRF9ERUxBWSkKKworI2RlZmluZSBTX01DM19CQU5LX0NZQ0xFICAgIDgKKyNkZWZpbmUgTV9NQzNfQkFOS19DWUNMRSAgICAweGYKKyNkZWZpbmUgVl9NQzNfQkFOS19DWUNMRSh4KSAoKHgpIDw8IFNfTUMzX0JBTktfQ1lDTEUpCisjZGVmaW5lIEdfTUMzX0JBTktfQ1lDTEUoeCkgKCgoeCkgPj4gU19NQzNfQkFOS19DWUNMRSkgJiBNX01DM19CQU5LX0NZQ0xFKQorCisjZGVmaW5lIFNfUkVGUkVTSF9DWUNMRSAgICAxMgorI2RlZmluZSBNX1JFRlJFU0hfQ1lDTEUgICAgMHhmCisjZGVmaW5lIFZfUkVGUkVTSF9DWUNMRSh4KSAoKHgpIDw8IFNfUkVGUkVTSF9DWUNMRSkKKyNkZWZpbmUgR19SRUZSRVNIX0NZQ0xFKHgpICgoKHgpID4+IFNfUkVGUkVTSF9DWUNMRSkgJiBNX1JFRlJFU0hfQ1lDTEUpCisKKyNkZWZpbmUgU19QUkVDSEFSR0VfQ1lDTEUgICAgMTYKKyNkZWZpbmUgTV9QUkVDSEFSR0VfQ1lDTEUgICAgMHgzCisjZGVmaW5lIFZfUFJFQ0hBUkdFX0NZQ0xFKHgpICgoeCkgPDwgU19QUkVDSEFSR0VfQ1lDTEUpCisjZGVmaW5lIEdfUFJFQ0hBUkdFX0NZQ0xFKHgpICgoKHgpID4+IFNfUFJFQ0hBUkdFX0NZQ0xFKSAmIE1fUFJFQ0hBUkdFX0NZQ0xFKQorCisjZGVmaW5lIFNfQUNUSVZFX1RPX1JFQURfV1JJVEVfREVMQVkgICAgMTgKKyNkZWZpbmUgVl9BQ1RJVkVfVE9fUkVBRF9XUklURV9ERUxBWSh4KSAoKHgpIDw8IFNfQUNUSVZFX1RPX1JFQURfV1JJVEVfREVMQVkpCisjZGVmaW5lIEZfQUNUSVZFX1RPX1JFQURfV1JJVEVfREVMQVkgICAgVl9BQ1RJVkVfVE9fUkVBRF9XUklURV9ERUxBWSgxVSkKKworI2RlZmluZSBTX0FDVElWRV9UT19QUkVDSEFSR0VfREVMQVkgICAgMTkKKyNkZWZpbmUgTV9BQ1RJVkVfVE9fUFJFQ0hBUkdFX0RFTEFZICAgIDB4NworI2RlZmluZSBWX0FDVElWRV9UT19QUkVDSEFSR0VfREVMQVkoeCkgKCh4KSA8PCBTX0FDVElWRV9UT19QUkVDSEFSR0VfREVMQVkpCisjZGVmaW5lIEdfQUNUSVZFX1RPX1BSRUNIQVJHRV9ERUxBWSh4KSAoKCh4KSA+PiBTX0FDVElWRV9UT19QUkVDSEFSR0VfREVMQVkpICYgTV9BQ1RJVkVfVE9fUFJFQ0hBUkdFX0RFTEFZKQorCisjZGVmaW5lIFNfV1JJVEVfUkVDT1ZFUllfREVMQVkgICAgMjIKKyNkZWZpbmUgTV9XUklURV9SRUNPVkVSWV9ERUxBWSAgICAweDMKKyNkZWZpbmUgVl9XUklURV9SRUNPVkVSWV9ERUxBWSh4KSAoKHgpIDw8IFNfV1JJVEVfUkVDT1ZFUllfREVMQVkpCisjZGVmaW5lIEdfV1JJVEVfUkVDT1ZFUllfREVMQVkoeCkgKCgoeCkgPj4gU19XUklURV9SRUNPVkVSWV9ERUxBWSkgJiBNX1dSSVRFX1JFQ09WRVJZX0RFTEFZKQorCisjZGVmaW5lIFNfREVOU0lUWSAgICAyNAorI2RlZmluZSBNX0RFTlNJVFkgICAgMHgzCisjZGVmaW5lIFZfREVOU0lUWSh4KSAoKHgpIDw8IFNfREVOU0lUWSkKKyNkZWZpbmUgR19ERU5TSVRZKHgpICgoKHgpID4+IFNfREVOU0lUWSkgJiBNX0RFTlNJVFkpCisKKyNkZWZpbmUgU19PUkdBTklaQVRJT04gICAgMjYKKyNkZWZpbmUgVl9PUkdBTklaQVRJT04oeCkgKCh4KSA8PCBTX09SR0FOSVpBVElPTikKKyNkZWZpbmUgRl9PUkdBTklaQVRJT04gICAgVl9PUkdBTklaQVRJT04oMVUpCisKKyNkZWZpbmUgU19CQU5LUyAgICAyNworI2RlZmluZSBWX0JBTktTKHgpICgoeCkgPDwgU19CQU5LUykKKyNkZWZpbmUgRl9CQU5LUyAgICBWX0JBTktTKDFVKQorCisjZGVmaW5lIFNfVU5SRUdJU1RFUkVEICAgIDI4CisjZGVmaW5lIFZfVU5SRUdJU1RFUkVEKHgpICgoeCkgPDwgU19VTlJFR0lTVEVSRUQpCisjZGVmaW5lIEZfVU5SRUdJU1RFUkVEICAgIFZfVU5SRUdJU1RFUkVEKDFVKQorCisjZGVmaW5lIFNfTUMzX1dJRFRIICAgIDI5CisjZGVmaW5lIE1fTUMzX1dJRFRIICAgIDB4MworI2RlZmluZSBWX01DM19XSURUSCh4KSAoKHgpIDw8IFNfTUMzX1dJRFRIKQorI2RlZmluZSBHX01DM19XSURUSCh4KSAoKCh4KSA+PiBTX01DM19XSURUSCkgJiBNX01DM19XSURUSCkKKworI2RlZmluZSBTX01DM19TTE9XICAgIDMxCisjZGVmaW5lIFZfTUMzX1NMT1coeCkgKCh4KSA8PCBTX01DM19TTE9XKQorI2RlZmluZSBGX01DM19TTE9XICAgIFZfTUMzX1NMT1coMVUpCisKKyNkZWZpbmUgQV9NQzNfTU9ERSAweDEwNAorCisjZGVmaW5lIFNfTUMzX01PREUgICAgMAorI2RlZmluZSBNX01DM19NT0RFICAgIDB4M2ZmZgorI2RlZmluZSBWX01DM19NT0RFKHgpICgoeCkgPDwgU19NQzNfTU9ERSkKKyNkZWZpbmUgR19NQzNfTU9ERSh4KSAoKCh4KSA+PiBTX01DM19NT0RFKSAmIE1fTUMzX01PREUpCisKKyNkZWZpbmUgU19CVVNZICAgIDMxCisjZGVmaW5lIFZfQlVTWSh4KSAoKHgpIDw8IFNfQlVTWSkKKyNkZWZpbmUgRl9CVVNZICAgIFZfQlVTWSgxVSkKKworI2RlZmluZSBBX01DM19FWFRfTU9ERSAweDEwOAorCisjZGVmaW5lIFNfTUMzX0VYVEVOREVEX01PREUgICAgMAorI2RlZmluZSBNX01DM19FWFRFTkRFRF9NT0RFICAgIDB4M2ZmZgorI2RlZmluZSBWX01DM19FWFRFTkRFRF9NT0RFKHgpICgoeCkgPDwgU19NQzNfRVhURU5ERURfTU9ERSkKKyNkZWZpbmUgR19NQzNfRVhURU5ERURfTU9ERSh4KSAoKCh4KSA+PiBTX01DM19FWFRFTkRFRF9NT0RFKSAmIE1fTUMzX0VYVEVOREVEX01PREUpCisKKyNkZWZpbmUgQV9NQzNfUFJFQ0hBUkcgMHgxMGMKKyNkZWZpbmUgQV9NQzNfUkVGUkVTSCAweDExMAorCisjZGVmaW5lIFNfUkVGUkVTSF9FTkFCTEUgICAgMAorI2RlZmluZSBWX1JFRlJFU0hfRU5BQkxFKHgpICgoeCkgPDwgU19SRUZSRVNIX0VOQUJMRSkKKyNkZWZpbmUgRl9SRUZSRVNIX0VOQUJMRSAgICBWX1JFRlJFU0hfRU5BQkxFKDFVKQorCisjZGVmaW5lIFNfUkVGUkVTSF9ESVZJU09SICAgIDEKKyNkZWZpbmUgTV9SRUZSRVNIX0RJVklTT1IgICAgMHgzZmZmCisjZGVmaW5lIFZfUkVGUkVTSF9ESVZJU09SKHgpICgoeCkgPDwgU19SRUZSRVNIX0RJVklTT1IpCisjZGVmaW5lIEdfUkVGUkVTSF9ESVZJU09SKHgpICgoKHgpID4+IFNfUkVGUkVTSF9ESVZJU09SKSAmIE1fUkVGUkVTSF9ESVZJU09SKQorCisjZGVmaW5lIEFfTUMzX1NUUk9CRSAweDExNAorCisjZGVmaW5lIFNfTUFTVEVSX0RMTF9SRVNFVCAgICAwCisjZGVmaW5lIFZfTUFTVEVSX0RMTF9SRVNFVCh4KSAoKHgpIDw8IFNfTUFTVEVSX0RMTF9SRVNFVCkKKyNkZWZpbmUgRl9NQVNURVJfRExMX1JFU0VUICAgIFZfTUFTVEVSX0RMTF9SRVNFVCgxVSkKKworI2RlZmluZSBTX01BU1RFUl9ETExfVEFQX0NPVU5UICAgIDEKKyNkZWZpbmUgTV9NQVNURVJfRExMX1RBUF9DT1VOVCAgICAweGZmCisjZGVmaW5lIFZfTUFTVEVSX0RMTF9UQVBfQ09VTlQoeCkgKCh4KSA8PCBTX01BU1RFUl9ETExfVEFQX0NPVU5UKQorI2RlZmluZSBHX01BU1RFUl9ETExfVEFQX0NPVU5UKHgpICgoKHgpID4+IFNfTUFTVEVSX0RMTF9UQVBfQ09VTlQpICYgTV9NQVNURVJfRExMX1RBUF9DT1VOVCkKKworI2RlZmluZSBTX01BU1RFUl9ETExfTE9DS0VEICAgIDkKKyNkZWZpbmUgVl9NQVNURVJfRExMX0xPQ0tFRCh4KSAoKHgpIDw8IFNfTUFTVEVSX0RMTF9MT0NLRUQpCisjZGVmaW5lIEZfTUFTVEVSX0RMTF9MT0NLRUQgICAgVl9NQVNURVJfRExMX0xPQ0tFRCgxVSkKKworI2RlZmluZSBTX01BU1RFUl9ETExfTUFYX1RBUF9DT1VOVCAgICAxMAorI2RlZmluZSBWX01BU1RFUl9ETExfTUFYX1RBUF9DT1VOVCh4KSAoKHgpIDw8IFNfTUFTVEVSX0RMTF9NQVhfVEFQX0NPVU5UKQorI2RlZmluZSBGX01BU1RFUl9ETExfTUFYX1RBUF9DT1VOVCAgICBWX01BU1RFUl9ETExfTUFYX1RBUF9DT1VOVCgxVSkKKworI2RlZmluZSBTX01BU1RFUl9ETExfVEFQX0NPVU5UX09GRlNFVCAgICAxMQorI2RlZmluZSBNX01BU1RFUl9ETExfVEFQX0NPVU5UX09GRlNFVCAgICAweDNmCisjZGVmaW5lIFZfTUFTVEVSX0RMTF9UQVBfQ09VTlRfT0ZGU0VUKHgpICgoeCkgPDwgU19NQVNURVJfRExMX1RBUF9DT1VOVF9PRkZTRVQpCisjZGVmaW5lIEdfTUFTVEVSX0RMTF9UQVBfQ09VTlRfT0ZGU0VUKHgpICgoKHgpID4+IFNfTUFTVEVSX0RMTF9UQVBfQ09VTlRfT0ZGU0VUKSAmIE1fTUFTVEVSX0RMTF9UQVBfQ09VTlRfT0ZGU0VUKQorCisjZGVmaW5lIFNfU0xBVkVfRExMX1JFU0VUICAgIDExCisjZGVmaW5lIFZfU0xBVkVfRExMX1JFU0VUKHgpICgoeCkgPDwgU19TTEFWRV9ETExfUkVTRVQpCisjZGVmaW5lIEZfU0xBVkVfRExMX1JFU0VUICAgIFZfU0xBVkVfRExMX1JFU0VUKDFVKQorCisjZGVmaW5lIFNfU0xBVkVfRExMX0RFTFRBICAgIDEyCisjZGVmaW5lIE1fU0xBVkVfRExMX0RFTFRBICAgIDB4ZgorI2RlZmluZSBWX1NMQVZFX0RMTF9ERUxUQSh4KSAoKHgpIDw8IFNfU0xBVkVfRExMX0RFTFRBKQorI2RlZmluZSBHX1NMQVZFX0RMTF9ERUxUQSh4KSAoKCh4KSA+PiBTX1NMQVZFX0RMTF9ERUxUQSkgJiBNX1NMQVZFX0RMTF9ERUxUQSkKKworI2RlZmluZSBTX1NMQVZFX0RFTEFZX0xJTkVfTUFOVUFMX1RBUF9DT1VOVCAgICAxNworI2RlZmluZSBNX1NMQVZFX0RFTEFZX0xJTkVfTUFOVUFMX1RBUF9DT1VOVCAgICAweDNmCisjZGVmaW5lIFZfU0xBVkVfREVMQVlfTElORV9NQU5VQUxfVEFQX0NPVU5UKHgpICgoeCkgPDwgU19TTEFWRV9ERUxBWV9MSU5FX01BTlVBTF9UQVBfQ09VTlQpCisjZGVmaW5lIEdfU0xBVkVfREVMQVlfTElORV9NQU5VQUxfVEFQX0NPVU5UKHgpICgoKHgpID4+IFNfU0xBVkVfREVMQVlfTElORV9NQU5VQUxfVEFQX0NPVU5UKSAmIE1fU0xBVkVfREVMQVlfTElORV9NQU5VQUxfVEFQX0NPVU5UKQorCisjZGVmaW5lIFNfU0xBVkVfREVMQVlfTElORV9NQU5VQUxfVEFQX0NPVU5UX0VOQUJMRSAgICAyMworI2RlZmluZSBWX1NMQVZFX0RFTEFZX0xJTkVfTUFOVUFMX1RBUF9DT1VOVF9FTkFCTEUoeCkgKCh4KSA8PCBTX1NMQVZFX0RFTEFZX0xJTkVfTUFOVUFMX1RBUF9DT1VOVF9FTkFCTEUpCisjZGVmaW5lIEZfU0xBVkVfREVMQVlfTElORV9NQU5VQUxfVEFQX0NPVU5UX0VOQUJMRSAgICBWX1NMQVZFX0RFTEFZX0xJTkVfTUFOVUFMX1RBUF9DT1VOVF9FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19TTEFWRV9ERUxBWV9MSU5FX1RBUF9DT1VOVCAgICAyNAorI2RlZmluZSBNX1NMQVZFX0RFTEFZX0xJTkVfVEFQX0NPVU5UICAgIDB4M2YKKyNkZWZpbmUgVl9TTEFWRV9ERUxBWV9MSU5FX1RBUF9DT1VOVCh4KSAoKHgpIDw8IFNfU0xBVkVfREVMQVlfTElORV9UQVBfQ09VTlQpCisjZGVmaW5lIEdfU0xBVkVfREVMQVlfTElORV9UQVBfQ09VTlQoeCkgKCgoeCkgPj4gU19TTEFWRV9ERUxBWV9MSU5FX1RBUF9DT1VOVCkgJiBNX1NMQVZFX0RFTEFZX0xJTkVfVEFQX0NPVU5UKQorCisjZGVmaW5lIEFfTUMzX0VDQ19DTlRMIDB4MTE4CisKKyNkZWZpbmUgU19FQ0NfR0VORVJBVElPTl9FTkFCTEUgICAgMAorI2RlZmluZSBWX0VDQ19HRU5FUkFUSU9OX0VOQUJMRSh4KSAoKHgpIDw8IFNfRUNDX0dFTkVSQVRJT05fRU5BQkxFKQorI2RlZmluZSBGX0VDQ19HRU5FUkFUSU9OX0VOQUJMRSAgICBWX0VDQ19HRU5FUkFUSU9OX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX0VDQ19DSEVDS19FTkFCTEUgICAgMQorI2RlZmluZSBWX0VDQ19DSEVDS19FTkFCTEUoeCkgKCh4KSA8PCBTX0VDQ19DSEVDS19FTkFCTEUpCisjZGVmaW5lIEZfRUNDX0NIRUNLX0VOQUJMRSAgICBWX0VDQ19DSEVDS19FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCAgICAyCisjZGVmaW5lIE1fQ09SUkVDVEFCTEVfRVJST1JfQ09VTlQgICAgMHhmZgorI2RlZmluZSBWX0NPUlJFQ1RBQkxFX0VSUk9SX0NPVU5UKHgpICgoeCkgPDwgU19DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCkKKyNkZWZpbmUgR19DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCh4KSAoKCh4KSA+PiBTX0NPUlJFQ1RBQkxFX0VSUk9SX0NPVU5UKSAmIE1fQ09SUkVDVEFCTEVfRVJST1JfQ09VTlQpCisKKyNkZWZpbmUgU19VTkNPUlJFQ1RBQkxFX0VSUk9SX0NPVU5UICAgIDEwCisjZGVmaW5lIE1fVU5DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCAgICAweGZmCisjZGVmaW5lIFZfVU5DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCh4KSAoKHgpIDw8IFNfVU5DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCkKKyNkZWZpbmUgR19VTkNPUlJFQ1RBQkxFX0VSUk9SX0NPVU5UKHgpICgoKHgpID4+IFNfVU5DT1JSRUNUQUJMRV9FUlJPUl9DT1VOVCkgJiBNX1VOQ09SUkVDVEFCTEVfRVJST1JfQ09VTlQpCisKKyNkZWZpbmUgQV9NQzNfQ0VfQUREUiAweDExYworCisjZGVmaW5lIFNfTUMzX0NFX0FERFIgICAgNAorI2RlZmluZSBNX01DM19DRV9BRERSICAgIDB4ZmZmZmZmZgorI2RlZmluZSBWX01DM19DRV9BRERSKHgpICgoeCkgPDwgU19NQzNfQ0VfQUREUikKKyNkZWZpbmUgR19NQzNfQ0VfQUREUih4KSAoKCh4KSA+PiBTX01DM19DRV9BRERSKSAmIE1fTUMzX0NFX0FERFIpCisKKyNkZWZpbmUgQV9NQzNfQ0VfREFUQTAgMHgxMjAKKyNkZWZpbmUgQV9NQzNfQ0VfREFUQTEgMHgxMjQKKyNkZWZpbmUgQV9NQzNfQ0VfREFUQTIgMHgxMjgKKyNkZWZpbmUgQV9NQzNfQ0VfREFUQTMgMHgxMmMKKyNkZWZpbmUgQV9NQzNfQ0VfREFUQTQgMHgxMzAKKyNkZWZpbmUgQV9NQzNfVUVfQUREUiAweDEzNAorCisjZGVmaW5lIFNfTUMzX1VFX0FERFIgICAgNAorI2RlZmluZSBNX01DM19VRV9BRERSICAgIDB4ZmZmZmZmZgorI2RlZmluZSBWX01DM19VRV9BRERSKHgpICgoeCkgPDwgU19NQzNfVUVfQUREUikKKyNkZWZpbmUgR19NQzNfVUVfQUREUih4KSAoKCh4KSA+PiBTX01DM19VRV9BRERSKSAmIE1fTUMzX1VFX0FERFIpCisKKyNkZWZpbmUgQV9NQzNfVUVfREFUQTAgMHgxMzgKKyNkZWZpbmUgQV9NQzNfVUVfREFUQTEgMHgxM2MKKyNkZWZpbmUgQV9NQzNfVUVfREFUQTIgMHgxNDAKKyNkZWZpbmUgQV9NQzNfVUVfREFUQTMgMHgxNDQKKyNkZWZpbmUgQV9NQzNfVUVfREFUQTQgMHgxNDgKKyNkZWZpbmUgQV9NQzNfQkRfQUREUiAweDE0YworI2RlZmluZSBBX01DM19CRF9EQVRBMCAweDE1MAorI2RlZmluZSBBX01DM19CRF9EQVRBMSAweDE1NAorI2RlZmluZSBBX01DM19CRF9EQVRBMiAweDE1OAorI2RlZmluZSBBX01DM19CRF9EQVRBMyAweDE1YworI2RlZmluZSBBX01DM19CRF9EQVRBNCAweDE2MAorI2RlZmluZSBBX01DM19CRF9PUCAweDE2NAorCisjZGVmaW5lIFNfQkFDS19ET09SX09QRVJBVElPTiAgICAwCisjZGVmaW5lIFZfQkFDS19ET09SX09QRVJBVElPTih4KSAoKHgpIDw8IFNfQkFDS19ET09SX09QRVJBVElPTikKKyNkZWZpbmUgRl9CQUNLX0RPT1JfT1BFUkFUSU9OICAgIFZfQkFDS19ET09SX09QRVJBVElPTigxVSkKKworI2RlZmluZSBBX01DM19CSVNUX0FERFJfQkVHIDB4MTY4CisjZGVmaW5lIEFfTUMzX0JJU1RfQUREUl9FTkQgMHgxNmMKKyNkZWZpbmUgQV9NQzNfQklTVF9EQVRBIDB4MTcwCisjZGVmaW5lIEFfTUMzX0JJU1RfT1AgMHgxNzQKKworI2RlZmluZSBTX09QICAgIDAKKyNkZWZpbmUgVl9PUCh4KSAoKHgpIDw8IFNfT1ApCisjZGVmaW5lIEZfT1AgICAgVl9PUCgxVSkKKworI2RlZmluZSBTX0RBVEFfUEFUVEVSTiAgICAxCisjZGVmaW5lIE1fREFUQV9QQVRURVJOICAgIDB4MworI2RlZmluZSBWX0RBVEFfUEFUVEVSTih4KSAoKHgpIDw8IFNfREFUQV9QQVRURVJOKQorI2RlZmluZSBHX0RBVEFfUEFUVEVSTih4KSAoKCh4KSA+PiBTX0RBVEFfUEFUVEVSTikgJiBNX0RBVEFfUEFUVEVSTikKKworI2RlZmluZSBTX0NPTlRJTlVPVVMgICAgMworI2RlZmluZSBWX0NPTlRJTlVPVVMoeCkgKCh4KSA8PCBTX0NPTlRJTlVPVVMpCisjZGVmaW5lIEZfQ09OVElOVU9VUyAgICBWX0NPTlRJTlVPVVMoMVUpCisKKyNkZWZpbmUgQV9NQzNfSU5UX0VOQUJMRSAweDE3OAorCisjZGVmaW5lIFNfTUMzX0NPUlJfRVJSICAgIDAKKyNkZWZpbmUgVl9NQzNfQ09SUl9FUlIoeCkgKCh4KSA8PCBTX01DM19DT1JSX0VSUikKKyNkZWZpbmUgRl9NQzNfQ09SUl9FUlIgICAgVl9NQzNfQ09SUl9FUlIoMVUpCisKKyNkZWZpbmUgU19NQzNfVU5DT1JSX0VSUiAgICAxCisjZGVmaW5lIFZfTUMzX1VOQ09SUl9FUlIoeCkgKCh4KSA8PCBTX01DM19VTkNPUlJfRVJSKQorI2RlZmluZSBGX01DM19VTkNPUlJfRVJSICAgIFZfTUMzX1VOQ09SUl9FUlIoMVUpCisKKyNkZWZpbmUgU19NQzNfUEFSSVRZX0VSUiAgICAyCisjZGVmaW5lIE1fTUMzX1BBUklUWV9FUlIgICAgMHhmZgorI2RlZmluZSBWX01DM19QQVJJVFlfRVJSKHgpICgoeCkgPDwgU19NQzNfUEFSSVRZX0VSUikKKyNkZWZpbmUgR19NQzNfUEFSSVRZX0VSUih4KSAoKCh4KSA+PiBTX01DM19QQVJJVFlfRVJSKSAmIE1fTUMzX1BBUklUWV9FUlIpCisKKyNkZWZpbmUgU19NQzNfQUREUl9FUlIgICAgMTAKKyNkZWZpbmUgVl9NQzNfQUREUl9FUlIoeCkgKCh4KSA8PCBTX01DM19BRERSX0VSUikKKyNkZWZpbmUgRl9NQzNfQUREUl9FUlIgICAgVl9NQzNfQUREUl9FUlIoMVUpCisKKyNkZWZpbmUgQV9NQzNfSU5UX0NBVVNFIDB4MTdjCisKKy8qIE1DNCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQV9NQzRfQ0ZHIDB4MTgwCisKKyNkZWZpbmUgU19QT1dFUl9VUCAgICAwCisjZGVmaW5lIFZfUE9XRVJfVVAoeCkgKCh4KSA8PCBTX1BPV0VSX1VQKQorI2RlZmluZSBGX1BPV0VSX1VQICAgIFZfUE9XRVJfVVAoMVUpCisKKyNkZWZpbmUgU19NQzRfQkFOS19DWUNMRSAgICA4CisjZGVmaW5lIE1fTUM0X0JBTktfQ1lDTEUgICAgMHg3CisjZGVmaW5lIFZfTUM0X0JBTktfQ1lDTEUoeCkgKCh4KSA8PCBTX01DNF9CQU5LX0NZQ0xFKQorI2RlZmluZSBHX01DNF9CQU5LX0NZQ0xFKHgpICgoKHgpID4+IFNfTUM0X0JBTktfQ1lDTEUpICYgTV9NQzRfQkFOS19DWUNMRSkKKworI2RlZmluZSBTX01DNF9OQVJST1cgICAgMjQKKyNkZWZpbmUgVl9NQzRfTkFSUk9XKHgpICgoeCkgPDwgU19NQzRfTkFSUk9XKQorI2RlZmluZSBGX01DNF9OQVJST1cgICAgVl9NQzRfTkFSUk9XKDFVKQorCiAjZGVmaW5lIFNfTUM0X1NMT1cgICAgMjUKICNkZWZpbmUgVl9NQzRfU0xPVyh4KSAoKHgpIDw8IFNfTUM0X1NMT1cpCiAjZGVmaW5lIEZfTUM0X1NMT1cgICAgVl9NQzRfU0xPVygxVSkKIAotLyogVFBJIHJlZ2lzdGVycyAqLworI2RlZmluZSBTX01DNEFfV0lEVEggICAgMjQKKyNkZWZpbmUgTV9NQzRBX1dJRFRIICAgIDB4MworI2RlZmluZSBWX01DNEFfV0lEVEgoeCkgKCh4KSA8PCBTX01DNEFfV0lEVEgpCisjZGVmaW5lIEdfTUM0QV9XSURUSCh4KSAoKCh4KSA+PiBTX01DNEFfV0lEVEgpICYgTV9NQzRBX1dJRFRIKQogCisjZGVmaW5lIFNfTUM0QV9TTE9XICAgIDI2CisjZGVmaW5lIFZfTUM0QV9TTE9XKHgpICgoeCkgPDwgU19NQzRBX1NMT1cpCisjZGVmaW5lIEZfTUM0QV9TTE9XICAgIFZfTUM0QV9TTE9XKDFVKQorCisjZGVmaW5lIEFfTUM0X01PREUgMHgxODQKKworI2RlZmluZSBTX01DNF9NT0RFICAgIDAKKyNkZWZpbmUgTV9NQzRfTU9ERSAgICAweDdmZmYKKyNkZWZpbmUgVl9NQzRfTU9ERSh4KSAoKHgpIDw8IFNfTUM0X01PREUpCisjZGVmaW5lIEdfTUM0X01PREUoeCkgKCgoeCkgPj4gU19NQzRfTU9ERSkgJiBNX01DNF9NT0RFKQorCisjZGVmaW5lIEFfTUM0X0VYVF9NT0RFIDB4MTg4CisKKyNkZWZpbmUgU19NQzRfRVhURU5ERURfTU9ERSAgICAwCisjZGVmaW5lIE1fTUM0X0VYVEVOREVEX01PREUgICAgMHg3ZmZmCisjZGVmaW5lIFZfTUM0X0VYVEVOREVEX01PREUoeCkgKCh4KSA8PCBTX01DNF9FWFRFTkRFRF9NT0RFKQorI2RlZmluZSBHX01DNF9FWFRFTkRFRF9NT0RFKHgpICgoKHgpID4+IFNfTUM0X0VYVEVOREVEX01PREUpICYgTV9NQzRfRVhURU5ERURfTU9ERSkKKworI2RlZmluZSBBX01DNF9SRUZSRVNIIDB4MTkwCisjZGVmaW5lIEFfTUM0X1NUUk9CRSAweDE5NAorI2RlZmluZSBBX01DNF9FQ0NfQ05UTCAweDE5OAorI2RlZmluZSBBX01DNF9DRV9BRERSIDB4MTljCisKKyNkZWZpbmUgU19NQzRfQ0VfQUREUiAgICA0CisjZGVmaW5lIE1fTUM0X0NFX0FERFIgICAgMHhmZmZmZmYKKyNkZWZpbmUgVl9NQzRfQ0VfQUREUih4KSAoKHgpIDw8IFNfTUM0X0NFX0FERFIpCisjZGVmaW5lIEdfTUM0X0NFX0FERFIoeCkgKCgoeCkgPj4gU19NQzRfQ0VfQUREUikgJiBNX01DNF9DRV9BRERSKQorCisjZGVmaW5lIEFfTUM0X0NFX0RBVEEwIDB4MWEwCisjZGVmaW5lIEFfTUM0X0NFX0RBVEExIDB4MWE0CisjZGVmaW5lIEFfTUM0X0NFX0RBVEEyIDB4MWE4CisjZGVmaW5lIEFfTUM0X0NFX0RBVEEzIDB4MWFjCisjZGVmaW5lIEFfTUM0X0NFX0RBVEE0IDB4MWIwCisjZGVmaW5lIEFfTUM0X1VFX0FERFIgMHgxYjQKKworI2RlZmluZSBTX01DNF9VRV9BRERSICAgIDQKKyNkZWZpbmUgTV9NQzRfVUVfQUREUiAgICAweGZmZmZmZgorI2RlZmluZSBWX01DNF9VRV9BRERSKHgpICgoeCkgPDwgU19NQzRfVUVfQUREUikKKyNkZWZpbmUgR19NQzRfVUVfQUREUih4KSAoKCh4KSA+PiBTX01DNF9VRV9BRERSKSAmIE1fTUM0X1VFX0FERFIpCisKKyNkZWZpbmUgQV9NQzRfVUVfREFUQTAgMHgxYjgKKyNkZWZpbmUgQV9NQzRfVUVfREFUQTEgMHgxYmMKKyNkZWZpbmUgQV9NQzRfVUVfREFUQTIgMHgxYzAKKyNkZWZpbmUgQV9NQzRfVUVfREFUQTMgMHgxYzQKKyNkZWZpbmUgQV9NQzRfVUVfREFUQTQgMHgxYzgKKyNkZWZpbmUgQV9NQzRfQkRfQUREUiAweDFjYworCisjZGVmaW5lIFNfTUM0X0JBQ0tfRE9PUl9BRERSICAgIDAKKyNkZWZpbmUgTV9NQzRfQkFDS19ET09SX0FERFIgICAgMHhmZmZmZmZmCisjZGVmaW5lIFZfTUM0X0JBQ0tfRE9PUl9BRERSKHgpICgoeCkgPDwgU19NQzRfQkFDS19ET09SX0FERFIpCisjZGVmaW5lIEdfTUM0X0JBQ0tfRE9PUl9BRERSKHgpICgoKHgpID4+IFNfTUM0X0JBQ0tfRE9PUl9BRERSKSAmIE1fTUM0X0JBQ0tfRE9PUl9BRERSKQorCisjZGVmaW5lIEFfTUM0X0JEX0RBVEEwIDB4MWQwCisjZGVmaW5lIEFfTUM0X0JEX0RBVEExIDB4MWQ0CisjZGVmaW5lIEFfTUM0X0JEX0RBVEEyIDB4MWQ4CisjZGVmaW5lIEFfTUM0X0JEX0RBVEEzIDB4MWRjCisjZGVmaW5lIEFfTUM0X0JEX0RBVEE0IDB4MWUwCisjZGVmaW5lIEFfTUM0X0JEX09QIDB4MWU0CisKKyNkZWZpbmUgU19PUEVSQVRJT04gICAgMAorI2RlZmluZSBWX09QRVJBVElPTih4KSAoKHgpIDw8IFNfT1BFUkFUSU9OKQorI2RlZmluZSBGX09QRVJBVElPTiAgICBWX09QRVJBVElPTigxVSkKKworI2RlZmluZSBBX01DNF9CSVNUX0FERFJfQkVHIDB4MWU4CisjZGVmaW5lIEFfTUM0X0JJU1RfQUREUl9FTkQgMHgxZWMKKyNkZWZpbmUgQV9NQzRfQklTVF9EQVRBIDB4MWYwCisjZGVmaW5lIEFfTUM0X0JJU1RfT1AgMHgxZjQKKyNkZWZpbmUgQV9NQzRfSU5UX0VOQUJMRSAweDFmOAorCisjZGVmaW5lIFNfTUM0X0NPUlJfRVJSICAgIDAKKyNkZWZpbmUgVl9NQzRfQ09SUl9FUlIoeCkgKCh4KSA8PCBTX01DNF9DT1JSX0VSUikKKyNkZWZpbmUgRl9NQzRfQ09SUl9FUlIgICAgVl9NQzRfQ09SUl9FUlIoMVUpCisKKyNkZWZpbmUgU19NQzRfVU5DT1JSX0VSUiAgICAxCisjZGVmaW5lIFZfTUM0X1VOQ09SUl9FUlIoeCkgKCh4KSA8PCBTX01DNF9VTkNPUlJfRVJSKQorI2RlZmluZSBGX01DNF9VTkNPUlJfRVJSICAgIFZfTUM0X1VOQ09SUl9FUlIoMVUpCisKKyNkZWZpbmUgU19NQzRfQUREUl9FUlIgICAgMgorI2RlZmluZSBWX01DNF9BRERSX0VSUih4KSAoKHgpIDw8IFNfTUM0X0FERFJfRVJSKQorI2RlZmluZSBGX01DNF9BRERSX0VSUiAgICBWX01DNF9BRERSX0VSUigxVSkKKworI2RlZmluZSBBX01DNF9JTlRfQ0FVU0UgMHgxZmMKKworLyogVFBJIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBX1RQSV9BRERSIDB4MjgwCisKKyNkZWZpbmUgU19UUElfQUREUkVTUyAgICAwCisjZGVmaW5lIE1fVFBJX0FERFJFU1MgICAgMHhmZmZmZmYKKyNkZWZpbmUgVl9UUElfQUREUkVTUyh4KSAoKHgpIDw8IFNfVFBJX0FERFJFU1MpCisjZGVmaW5lIEdfVFBJX0FERFJFU1MoeCkgKCgoeCkgPj4gU19UUElfQUREUkVTUykgJiBNX1RQSV9BRERSRVNTKQorCiAjZGVmaW5lIEFfVFBJX1dSX0RBVEEgMHgyODQKICNkZWZpbmUgQV9UUElfUkRfREFUQSAweDI4OAogI2RlZmluZSBBX1RQSV9DU1IgMHgyOGMKQEAgLTE3MSw2ICs2MjcsMTAgQEAKICNkZWZpbmUgVl9UUElSRFkoeCkgKCh4KSA8PCBTX1RQSVJEWSkKICNkZWZpbmUgRl9UUElSRFkgICAgVl9UUElSRFkoMVUpCiAKKyNkZWZpbmUgU19JTlRfRElSICAgIDMxCisjZGVmaW5lIFZfSU5UX0RJUih4KSAoKHgpIDw8IFNfSU5UX0RJUikKKyNkZWZpbmUgRl9JTlRfRElSICAgIFZfSU5UX0RJUigxVSkKKwogI2RlZmluZSBBX1RQSV9QQVIgMHgyOWMKIAogI2RlZmluZSBTX1RQSVBBUiAgICAwCkBAIC0xNzgsMTQgKzYzOCwyNiBAQAogI2RlZmluZSBWX1RQSVBBUih4KSAoKHgpIDw8IFNfVFBJUEFSKQogI2RlZmluZSBHX1RQSVBBUih4KSAoKCh4KSA+PiBTX1RQSVBBUikgJiBNX1RQSVBBUikKIAotLyogVFAgcmVnaXN0ZXJzICovCiAKKy8qIFRQIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBX1RQX0lOX0NPTkZJRyAweDMwMAogCisjZGVmaW5lIFNfVFBfSU5fQ1NQSV9UVU5ORUwgICAgMAorI2RlZmluZSBWX1RQX0lOX0NTUElfVFVOTkVMKHgpICgoeCkgPDwgU19UUF9JTl9DU1BJX1RVTk5FTCkKKyNkZWZpbmUgRl9UUF9JTl9DU1BJX1RVTk5FTCAgICBWX1RQX0lOX0NTUElfVFVOTkVMKDFVKQorCisjZGVmaW5lIFNfVFBfSU5fQ1NQSV9FVEhFUk5FVCAgICAxCisjZGVmaW5lIFZfVFBfSU5fQ1NQSV9FVEhFUk5FVCh4KSAoKHgpIDw8IFNfVFBfSU5fQ1NQSV9FVEhFUk5FVCkKKyNkZWZpbmUgRl9UUF9JTl9DU1BJX0VUSEVSTkVUICAgIFZfVFBfSU5fQ1NQSV9FVEhFUk5FVCgxVSkKKwogI2RlZmluZSBTX1RQX0lOX0NTUElfQ1BMICAgIDMKICNkZWZpbmUgVl9UUF9JTl9DU1BJX0NQTCh4KSAoKHgpIDw8IFNfVFBfSU5fQ1NQSV9DUEwpCiAjZGVmaW5lIEZfVFBfSU5fQ1NQSV9DUEwgICAgVl9UUF9JTl9DU1BJX0NQTCgxVSkKIAorI2RlZmluZSBTX1RQX0lOX0NTUElfUE9TICAgIDQKKyNkZWZpbmUgVl9UUF9JTl9DU1BJX1BPUyh4KSAoKHgpIDw8IFNfVFBfSU5fQ1NQSV9QT1MpCisjZGVmaW5lIEZfVFBfSU5fQ1NQSV9QT1MgICAgVl9UUF9JTl9DU1BJX1BPUygxVSkKKwogI2RlZmluZSBTX1RQX0lOX0NTUElfQ0hFQ0tfSVBfQ1NVTSAgICA1CiAjZGVmaW5lIFZfVFBfSU5fQ1NQSV9DSEVDS19JUF9DU1VNKHgpICgoeCkgPDwgU19UUF9JTl9DU1BJX0NIRUNLX0lQX0NTVU0pCiAjZGVmaW5lIEZfVFBfSU5fQ1NQSV9DSEVDS19JUF9DU1VNICAgIFZfVFBfSU5fQ1NQSV9DSEVDS19JUF9DU1VNKDFVKQpAQCAtMTk0LDEwICs2NjYsMjIgQEAKICNkZWZpbmUgVl9UUF9JTl9DU1BJX0NIRUNLX1RDUF9DU1VNKHgpICgoeCkgPDwgU19UUF9JTl9DU1BJX0NIRUNLX1RDUF9DU1VNKQogI2RlZmluZSBGX1RQX0lOX0NTUElfQ0hFQ0tfVENQX0NTVU0gICAgVl9UUF9JTl9DU1BJX0NIRUNLX1RDUF9DU1VNKDFVKQogCisjZGVmaW5lIFNfVFBfSU5fRVNQSV9UVU5ORUwgICAgNworI2RlZmluZSBWX1RQX0lOX0VTUElfVFVOTkVMKHgpICgoeCkgPDwgU19UUF9JTl9FU1BJX1RVTk5FTCkKKyNkZWZpbmUgRl9UUF9JTl9FU1BJX1RVTk5FTCAgICBWX1RQX0lOX0VTUElfVFVOTkVMKDFVKQorCiAjZGVmaW5lIFNfVFBfSU5fRVNQSV9FVEhFUk5FVCAgICA4CiAjZGVmaW5lIFZfVFBfSU5fRVNQSV9FVEhFUk5FVCh4KSAoKHgpIDw8IFNfVFBfSU5fRVNQSV9FVEhFUk5FVCkKICNkZWZpbmUgRl9UUF9JTl9FU1BJX0VUSEVSTkVUICAgIFZfVFBfSU5fRVNQSV9FVEhFUk5FVCgxVSkKIAorI2RlZmluZSBTX1RQX0lOX0VTUElfQ1BMICAgIDEwCisjZGVmaW5lIFZfVFBfSU5fRVNQSV9DUEwoeCkgKCh4KSA8PCBTX1RQX0lOX0VTUElfQ1BMKQorI2RlZmluZSBGX1RQX0lOX0VTUElfQ1BMICAgIFZfVFBfSU5fRVNQSV9DUEwoMVUpCisKKyNkZWZpbmUgU19UUF9JTl9FU1BJX1BPUyAgICAxMQorI2RlZmluZSBWX1RQX0lOX0VTUElfUE9TKHgpICgoeCkgPDwgU19UUF9JTl9FU1BJX1BPUykKKyNkZWZpbmUgRl9UUF9JTl9FU1BJX1BPUyAgICBWX1RQX0lOX0VTUElfUE9TKDFVKQorCiAjZGVmaW5lIFNfVFBfSU5fRVNQSV9DSEVDS19JUF9DU1VNICAgIDEyCiAjZGVmaW5lIFZfVFBfSU5fRVNQSV9DSEVDS19JUF9DU1VNKHgpICgoeCkgPDwgU19UUF9JTl9FU1BJX0NIRUNLX0lQX0NTVU0pCiAjZGVmaW5lIEZfVFBfSU5fRVNQSV9DSEVDS19JUF9DU1VNICAgIFZfVFBfSU5fRVNQSV9DSEVDS19JUF9DU1VNKDFVKQpAQCAtMjEyLDE0ICs2OTYsNDIgQEAKIAogI2RlZmluZSBBX1RQX09VVF9DT05GSUcgMHgzMDQKIAorI2RlZmluZSBTX1RQX09VVF9DX0VUSCAgICAwCisjZGVmaW5lIFZfVFBfT1VUX0NfRVRIKHgpICgoeCkgPDwgU19UUF9PVVRfQ19FVEgpCisjZGVmaW5lIEZfVFBfT1VUX0NfRVRIICAgIFZfVFBfT1VUX0NfRVRIKDFVKQorCiAjZGVmaW5lIFNfVFBfT1VUX0NTUElfQ1BMICAgIDIKICNkZWZpbmUgVl9UUF9PVVRfQ1NQSV9DUEwoeCkgKCh4KSA8PCBTX1RQX09VVF9DU1BJX0NQTCkKICNkZWZpbmUgRl9UUF9PVVRfQ1NQSV9DUEwgICAgVl9UUF9PVVRfQ1NQSV9DUEwoMVUpCiAKKyNkZWZpbmUgU19UUF9PVVRfQ1NQSV9QT1MgICAgMworI2RlZmluZSBWX1RQX09VVF9DU1BJX1BPUyh4KSAoKHgpIDw8IFNfVFBfT1VUX0NTUElfUE9TKQorI2RlZmluZSBGX1RQX09VVF9DU1BJX1BPUyAgICBWX1RQX09VVF9DU1BJX1BPUygxVSkKKworI2RlZmluZSBTX1RQX09VVF9DU1BJX0dFTkVSQVRFX0lQX0NTVU0gICAgNAorI2RlZmluZSBWX1RQX09VVF9DU1BJX0dFTkVSQVRFX0lQX0NTVU0oeCkgKCh4KSA8PCBTX1RQX09VVF9DU1BJX0dFTkVSQVRFX0lQX0NTVU0pCisjZGVmaW5lIEZfVFBfT1VUX0NTUElfR0VORVJBVEVfSVBfQ1NVTSAgICBWX1RQX09VVF9DU1BJX0dFTkVSQVRFX0lQX0NTVU0oMVUpCisKKyNkZWZpbmUgU19UUF9PVVRfQ1NQSV9HRU5FUkFURV9UQ1BfQ1NVTSAgICA1CisjZGVmaW5lIFZfVFBfT1VUX0NTUElfR0VORVJBVEVfVENQX0NTVU0oeCkgKCh4KSA8PCBTX1RQX09VVF9DU1BJX0dFTkVSQVRFX1RDUF9DU1VNKQorI2RlZmluZSBGX1RQX09VVF9DU1BJX0dFTkVSQVRFX1RDUF9DU1VNICAgIFZfVFBfT1VUX0NTUElfR0VORVJBVEVfVENQX0NTVU0oMVUpCisKICNkZWZpbmUgU19UUF9PVVRfRVNQSV9FVEhFUk5FVCAgICA2CiAjZGVmaW5lIFZfVFBfT1VUX0VTUElfRVRIRVJORVQoeCkgKCh4KSA8PCBTX1RQX09VVF9FU1BJX0VUSEVSTkVUKQogI2RlZmluZSBGX1RQX09VVF9FU1BJX0VUSEVSTkVUICAgIFZfVFBfT1VUX0VTUElfRVRIRVJORVQoMVUpCiAKKyNkZWZpbmUgU19UUF9PVVRfRVNQSV9UQUdfRVRIRVJORVQgICAgNworI2RlZmluZSBWX1RQX09VVF9FU1BJX1RBR19FVEhFUk5FVCh4KSAoKHgpIDw8IFNfVFBfT1VUX0VTUElfVEFHX0VUSEVSTkVUKQorI2RlZmluZSBGX1RQX09VVF9FU1BJX1RBR19FVEhFUk5FVCAgICBWX1RQX09VVF9FU1BJX1RBR19FVEhFUk5FVCgxVSkKKworI2RlZmluZSBTX1RQX09VVF9FU1BJX0NQTCAgICA4CisjZGVmaW5lIFZfVFBfT1VUX0VTUElfQ1BMKHgpICgoeCkgPDwgU19UUF9PVVRfRVNQSV9DUEwpCisjZGVmaW5lIEZfVFBfT1VUX0VTUElfQ1BMICAgIFZfVFBfT1VUX0VTUElfQ1BMKDFVKQorCisjZGVmaW5lIFNfVFBfT1VUX0VTUElfUE9TICAgIDkKKyNkZWZpbmUgVl9UUF9PVVRfRVNQSV9QT1MoeCkgKCh4KSA8PCBTX1RQX09VVF9FU1BJX1BPUykKKyNkZWZpbmUgRl9UUF9PVVRfRVNQSV9QT1MgICAgVl9UUF9PVVRfRVNQSV9QT1MoMVUpCisKICNkZWZpbmUgU19UUF9PVVRfRVNQSV9HRU5FUkFURV9JUF9DU1VNICAgIDEwCiAjZGVmaW5lIFZfVFBfT1VUX0VTUElfR0VORVJBVEVfSVBfQ1NVTSh4KSAoKHgpIDw8IFNfVFBfT1VUX0VTUElfR0VORVJBVEVfSVBfQ1NVTSkKICNkZWZpbmUgRl9UUF9PVVRfRVNQSV9HRU5FUkFURV9JUF9DU1VNICAgIFZfVFBfT1VUX0VTUElfR0VORVJBVEVfSVBfQ1NVTSgxVSkKQEAgLTIzMyw2ICs3NDUsMTYgQEAKICNkZWZpbmUgU19JUF9UVEwgICAgMAogI2RlZmluZSBNX0lQX1RUTCAgICAweGZmCiAjZGVmaW5lIFZfSVBfVFRMKHgpICgoeCkgPDwgU19JUF9UVEwpCisjZGVmaW5lIEdfSVBfVFRMKHgpICgoKHgpID4+IFNfSVBfVFRMKSAmIE1fSVBfVFRMKQorCisjZGVmaW5lIFNfVENBTV9TRVJWRVJfUkVHSU9OX1VTQUdFICAgIDgKKyNkZWZpbmUgTV9UQ0FNX1NFUlZFUl9SRUdJT05fVVNBR0UgICAgMHgzCisjZGVmaW5lIFZfVENBTV9TRVJWRVJfUkVHSU9OX1VTQUdFKHgpICgoeCkgPDwgU19UQ0FNX1NFUlZFUl9SRUdJT05fVVNBR0UpCisjZGVmaW5lIEdfVENBTV9TRVJWRVJfUkVHSU9OX1VTQUdFKHgpICgoKHgpID4+IFNfVENBTV9TRVJWRVJfUkVHSU9OX1VTQUdFKSAmIE1fVENBTV9TRVJWRVJfUkVHSU9OX1VTQUdFKQorCisjZGVmaW5lIFNfUU9TX01BUFBJTkcgICAgMTAKKyNkZWZpbmUgVl9RT1NfTUFQUElORyh4KSAoKHgpIDw8IFNfUU9TX01BUFBJTkcpCisjZGVmaW5lIEZfUU9TX01BUFBJTkcgICAgVl9RT1NfTUFQUElORygxVSkKIAogI2RlZmluZSBTX1RDUF9DU1VNICAgIDExCiAjZGVmaW5lIFZfVENQX0NTVU0oeCkgKCh4KSA8PCBTX1RDUF9DU1VNKQpAQCAtMjQ2LDMxICs3NjgsNDc2IEBACiAjZGVmaW5lIFZfSVBfQ1NVTSh4KSAoKHgpIDw8IFNfSVBfQ1NVTSkKICNkZWZpbmUgRl9JUF9DU1VNICAgIFZfSVBfQ1NVTSgxVSkKIAorI2RlZmluZSBTX0lQX0lEX1NQTElUICAgIDE0CisjZGVmaW5lIFZfSVBfSURfU1BMSVQoeCkgKCh4KSA8PCBTX0lQX0lEX1NQTElUKQorI2RlZmluZSBGX0lQX0lEX1NQTElUICAgIFZfSVBfSURfU1BMSVQoMVUpCisKICNkZWZpbmUgU19QQVRIX01UVSAgICAxNQogI2RlZmluZSBWX1BBVEhfTVRVKHgpICgoeCkgPDwgU19QQVRIX01UVSkKICNkZWZpbmUgRl9QQVRIX01UVSAgICBWX1BBVEhfTVRVKDFVKQogCiAjZGVmaW5lIFNfNVRVUExFX0xPT0tVUCAgICAxNworI2RlZmluZSBNXzVUVVBMRV9MT09LVVAgICAgMHgzCiAjZGVmaW5lIFZfNVRVUExFX0xPT0tVUCh4KSAoKHgpIDw8IFNfNVRVUExFX0xPT0tVUCkKKyNkZWZpbmUgR181VFVQTEVfTE9PS1VQKHgpICgoKHgpID4+IFNfNVRVUExFX0xPT0tVUCkgJiBNXzVUVVBMRV9MT09LVVApCisKKyNkZWZpbmUgU19JUF9GUkFHTUVOVF9EUk9QICAgIDE5CisjZGVmaW5lIFZfSVBfRlJBR01FTlRfRFJPUCh4KSAoKHgpIDw8IFNfSVBfRlJBR01FTlRfRFJPUCkKKyNkZWZpbmUgRl9JUF9GUkFHTUVOVF9EUk9QICAgIFZfSVBfRlJBR01FTlRfRFJPUCgxVSkKKworI2RlZmluZSBTX1BJTkdfRFJPUCAgICAyMAorI2RlZmluZSBWX1BJTkdfRFJPUCh4KSAoKHgpIDw8IFNfUElOR19EUk9QKQorI2RlZmluZSBGX1BJTkdfRFJPUCAgICBWX1BJTkdfRFJPUCgxVSkKKworI2RlZmluZSBTX1BST1RFQ1RfTU9ERSAgICAyMQorI2RlZmluZSBWX1BST1RFQ1RfTU9ERSh4KSAoKHgpIDw8IFNfUFJPVEVDVF9NT0RFKQorI2RlZmluZSBGX1BST1RFQ1RfTU9ERSAgICBWX1BST1RFQ1RfTU9ERSgxVSkKKworI2RlZmluZSBTX1NZTl9DT09LSUVfQUxHT1JJVEhNICAgIDIyCisjZGVmaW5lIFZfU1lOX0NPT0tJRV9BTEdPUklUSE0oeCkgKCh4KSA8PCBTX1NZTl9DT09LSUVfQUxHT1JJVEhNKQorI2RlZmluZSBGX1NZTl9DT09LSUVfQUxHT1JJVEhNICAgIFZfU1lOX0NPT0tJRV9BTEdPUklUSE0oMVUpCisKKyNkZWZpbmUgU19BVFRBQ0tfRklMVEVSICAgIDIzCisjZGVmaW5lIFZfQVRUQUNLX0ZJTFRFUih4KSAoKHgpIDw8IFNfQVRUQUNLX0ZJTFRFUikKKyNkZWZpbmUgRl9BVFRBQ0tfRklMVEVSICAgIFZfQVRUQUNLX0ZJTFRFUigxVSkKKworI2RlZmluZSBTX0lOVEVSRkFDRV9UWVBFICAgIDI0CisjZGVmaW5lIFZfSU5URVJGQUNFX1RZUEUoeCkgKCh4KSA8PCBTX0lOVEVSRkFDRV9UWVBFKQorI2RlZmluZSBGX0lOVEVSRkFDRV9UWVBFICAgIFZfSU5URVJGQUNFX1RZUEUoMVUpCisKKyNkZWZpbmUgU19ESVNBQkxFX1JYX0ZMT1dfQ09OVFJPTCAgICAyNQorI2RlZmluZSBWX0RJU0FCTEVfUlhfRkxPV19DT05UUk9MKHgpICgoeCkgPDwgU19ESVNBQkxFX1JYX0ZMT1dfQ09OVFJPTCkKKyNkZWZpbmUgRl9ESVNBQkxFX1JYX0ZMT1dfQ09OVFJPTCAgICBWX0RJU0FCTEVfUlhfRkxPV19DT05UUk9MKDFVKQogCiAjZGVmaW5lIFNfU1lOX0NPT0tJRV9QQVJBTUVURVIgICAgMjYKKyNkZWZpbmUgTV9TWU5fQ09PS0lFX1BBUkFNRVRFUiAgICAweDNmCiAjZGVmaW5lIFZfU1lOX0NPT0tJRV9QQVJBTUVURVIoeCkgKCh4KSA8PCBTX1NZTl9DT09LSUVfUEFSQU1FVEVSKQorI2RlZmluZSBHX1NZTl9DT09LSUVfUEFSQU1FVEVSKHgpICgoKHgpID4+IFNfU1lOX0NPT0tJRV9QQVJBTUVURVIpICYgTV9TWU5fQ09PS0lFX1BBUkFNRVRFUikKKworI2RlZmluZSBBX1RQX0dMT0JBTF9SWF9DUkVESVRTIDB4MzBjCisjZGVmaW5lIEFfVFBfQ01fU0laRSAweDMxMAorI2RlZmluZSBBX1RQX0NNX01NX0JBU0UgMHgzMTQKKworI2RlZmluZSBTX0NNX01FTU1HUl9CQVNFICAgIDAKKyNkZWZpbmUgTV9DTV9NRU1NR1JfQkFTRSAgICAweGZmZmZmZmYKKyNkZWZpbmUgVl9DTV9NRU1NR1JfQkFTRSh4KSAoKHgpIDw8IFNfQ01fTUVNTUdSX0JBU0UpCisjZGVmaW5lIEdfQ01fTUVNTUdSX0JBU0UoeCkgKCgoeCkgPj4gU19DTV9NRU1NR1JfQkFTRSkgJiBNX0NNX01FTU1HUl9CQVNFKQorCisjZGVmaW5lIEFfVFBfQ01fVElNRVJfQkFTRSAweDMxOAorCisjZGVmaW5lIFNfQ01fVElNRVJfQkFTRSAgICAwCisjZGVmaW5lIE1fQ01fVElNRVJfQkFTRSAgICAweGZmZmZmZmYKKyNkZWZpbmUgVl9DTV9USU1FUl9CQVNFKHgpICgoeCkgPDwgU19DTV9USU1FUl9CQVNFKQorI2RlZmluZSBHX0NNX1RJTUVSX0JBU0UoeCkgKCgoeCkgPj4gU19DTV9USU1FUl9CQVNFKSAmIE1fQ01fVElNRVJfQkFTRSkKKworI2RlZmluZSBBX1RQX1BNX1NJWkUgMHgzMWMKKyNkZWZpbmUgQV9UUF9QTV9UWF9CQVNFIDB4MzIwCisjZGVmaW5lIEFfVFBfUE1fREVGUkFHX0JBU0UgMHgzMjQKKyNkZWZpbmUgQV9UUF9QTV9SWF9CQVNFIDB4MzI4CisjZGVmaW5lIEFfVFBfUE1fUlhfUEdfU0laRSAweDMyYworI2RlZmluZSBBX1RQX1BNX1JYX01BWF9QR1MgMHgzMzAKKyNkZWZpbmUgQV9UUF9QTV9UWF9QR19TSVpFIDB4MzM0CisjZGVmaW5lIEFfVFBfUE1fVFhfTUFYX1BHUyAweDMzOAorI2RlZmluZSBBX1RQX1RDUF9PUFRJT05TIDB4MzQwCisKKyNkZWZpbmUgU19USU1FU1RBTVAgICAgMAorI2RlZmluZSBNX1RJTUVTVEFNUCAgICAweDMKKyNkZWZpbmUgVl9USU1FU1RBTVAoeCkgKCh4KSA8PCBTX1RJTUVTVEFNUCkKKyNkZWZpbmUgR19USU1FU1RBTVAoeCkgKCgoeCkgPj4gU19USU1FU1RBTVApICYgTV9USU1FU1RBTVApCisKKyNkZWZpbmUgU19XSU5ET1dfU0NBTEUgICAgMgorI2RlZmluZSBNX1dJTkRPV19TQ0FMRSAgICAweDMKKyNkZWZpbmUgVl9XSU5ET1dfU0NBTEUoeCkgKCh4KSA8PCBTX1dJTkRPV19TQ0FMRSkKKyNkZWZpbmUgR19XSU5ET1dfU0NBTEUoeCkgKCgoeCkgPj4gU19XSU5ET1dfU0NBTEUpICYgTV9XSU5ET1dfU0NBTEUpCisKKyNkZWZpbmUgU19TQUNLICAgIDQKKyNkZWZpbmUgTV9TQUNLICAgIDB4MworI2RlZmluZSBWX1NBQ0soeCkgKCh4KSA8PCBTX1NBQ0spCisjZGVmaW5lIEdfU0FDSyh4KSAoKCh4KSA+PiBTX1NBQ0spICYgTV9TQUNLKQorCisjZGVmaW5lIFNfRUNOICAgIDYKKyNkZWZpbmUgTV9FQ04gICAgMHgzCisjZGVmaW5lIFZfRUNOKHgpICgoeCkgPDwgU19FQ04pCisjZGVmaW5lIEdfRUNOKHgpICgoKHgpID4+IFNfRUNOKSAmIE1fRUNOKQorCisjZGVmaW5lIFNfU0FDS19BTEdPUklUSE0gICAgOAorI2RlZmluZSBNX1NBQ0tfQUxHT1JJVEhNICAgIDB4MworI2RlZmluZSBWX1NBQ0tfQUxHT1JJVEhNKHgpICgoeCkgPDwgU19TQUNLX0FMR09SSVRITSkKKyNkZWZpbmUgR19TQUNLX0FMR09SSVRITSh4KSAoKCh4KSA+PiBTX1NBQ0tfQUxHT1JJVEhNKSAmIE1fU0FDS19BTEdPUklUSE0pCisKKyNkZWZpbmUgU19NU1MgICAgMTAKKyNkZWZpbmUgVl9NU1MoeCkgKCh4KSA8PCBTX01TUykKKyNkZWZpbmUgRl9NU1MgICAgVl9NU1MoMVUpCisKKyNkZWZpbmUgU19ERUZBVUxUX1BFRVJfTVNTICAgIDE2CisjZGVmaW5lIE1fREVGQVVMVF9QRUVSX01TUyAgICAweGZmZmYKKyNkZWZpbmUgVl9ERUZBVUxUX1BFRVJfTVNTKHgpICgoeCkgPDwgU19ERUZBVUxUX1BFRVJfTVNTKQorI2RlZmluZSBHX0RFRkFVTFRfUEVFUl9NU1MoeCkgKCgoeCkgPj4gU19ERUZBVUxUX1BFRVJfTVNTKSAmIE1fREVGQVVMVF9QRUVSX01TUykKKworI2RlZmluZSBBX1RQX0RBQ0tfQ09ORklHIDB4MzQ0CisKKyNkZWZpbmUgU19EQUNLX01PREUgICAgMAorI2RlZmluZSBWX0RBQ0tfTU9ERSh4KSAoKHgpIDw8IFNfREFDS19NT0RFKQorI2RlZmluZSBGX0RBQ0tfTU9ERSAgICBWX0RBQ0tfTU9ERSgxVSkKKworI2RlZmluZSBTX0RBQ0tfQVVUT19NR01UICAgIDEKKyNkZWZpbmUgVl9EQUNLX0FVVE9fTUdNVCh4KSAoKHgpIDw8IFNfREFDS19BVVRPX01HTVQpCisjZGVmaW5lIEZfREFDS19BVVRPX01HTVQgICAgVl9EQUNLX0FVVE9fTUdNVCgxVSkKKworI2RlZmluZSBTX0RBQ0tfQVVUT19DQVJFRlVMICAgIDIKKyNkZWZpbmUgVl9EQUNLX0FVVE9fQ0FSRUZVTCh4KSAoKHgpIDw8IFNfREFDS19BVVRPX0NBUkVGVUwpCisjZGVmaW5lIEZfREFDS19BVVRPX0NBUkVGVUwgICAgVl9EQUNLX0FVVE9fQ0FSRUZVTCgxVSkKKworI2RlZmluZSBTX0RBQ0tfTVNTX1NFTEVDVE9SICAgIDMKKyNkZWZpbmUgTV9EQUNLX01TU19TRUxFQ1RPUiAgICAweDMKKyNkZWZpbmUgVl9EQUNLX01TU19TRUxFQ1RPUih4KSAoKHgpIDw8IFNfREFDS19NU1NfU0VMRUNUT1IpCisjZGVmaW5lIEdfREFDS19NU1NfU0VMRUNUT1IoeCkgKCgoeCkgPj4gU19EQUNLX01TU19TRUxFQ1RPUikgJiBNX0RBQ0tfTVNTX1NFTEVDVE9SKQorCisjZGVmaW5lIFNfREFDS19CWVRFX1RIUkVTSE9MRCAgICA1CisjZGVmaW5lIE1fREFDS19CWVRFX1RIUkVTSE9MRCAgICAweGZmZmZmCisjZGVmaW5lIFZfREFDS19CWVRFX1RIUkVTSE9MRCh4KSAoKHgpIDw8IFNfREFDS19CWVRFX1RIUkVTSE9MRCkKKyNkZWZpbmUgR19EQUNLX0JZVEVfVEhSRVNIT0xEKHgpICgoKHgpID4+IFNfREFDS19CWVRFX1RIUkVTSE9MRCkgJiBNX0RBQ0tfQllURV9USFJFU0hPTEQpCiAKICNkZWZpbmUgQV9UUF9QQ19DT05GSUcgMHgzNDgKKworI2RlZmluZSBTX1RQX0FDQ0VTU19MQVRFTkNZICAgIDAKKyNkZWZpbmUgTV9UUF9BQ0NFU1NfTEFURU5DWSAgICAweGYKKyNkZWZpbmUgVl9UUF9BQ0NFU1NfTEFURU5DWSh4KSAoKHgpIDw8IFNfVFBfQUNDRVNTX0xBVEVOQ1kpCisjZGVmaW5lIEdfVFBfQUNDRVNTX0xBVEVOQ1koeCkgKCgoeCkgPj4gU19UUF9BQ0NFU1NfTEFURU5DWSkgJiBNX1RQX0FDQ0VTU19MQVRFTkNZKQorCisjZGVmaW5lIFNfSEVMRF9GSU5fRElTQUJMRSAgICA0CisjZGVmaW5lIFZfSEVMRF9GSU5fRElTQUJMRSh4KSAoKHgpIDw8IFNfSEVMRF9GSU5fRElTQUJMRSkKKyNkZWZpbmUgRl9IRUxEX0ZJTl9ESVNBQkxFICAgIFZfSEVMRF9GSU5fRElTQUJMRSgxVSkKKworI2RlZmluZSBTX0REUF9GQ19FTkFCTEUgICAgNQorI2RlZmluZSBWX0REUF9GQ19FTkFCTEUoeCkgKCh4KSA8PCBTX0REUF9GQ19FTkFCTEUpCisjZGVmaW5lIEZfRERQX0ZDX0VOQUJMRSAgICBWX0REUF9GQ19FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19SRE1BX0VSUl9FTkFCTEUgICAgNgorI2RlZmluZSBWX1JETUFfRVJSX0VOQUJMRSh4KSAoKHgpIDw8IFNfUkRNQV9FUlJfRU5BQkxFKQorI2RlZmluZSBGX1JETUFfRVJSX0VOQUJMRSAgICBWX1JETUFfRVJSX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX0ZBU1RfUERVX0RFTElWRVJZICAgIDcKKyNkZWZpbmUgVl9GQVNUX1BEVV9ERUxJVkVSWSh4KSAoKHgpIDw8IFNfRkFTVF9QRFVfREVMSVZFUlkpCisjZGVmaW5lIEZfRkFTVF9QRFVfREVMSVZFUlkgICAgVl9GQVNUX1BEVV9ERUxJVkVSWSgxVSkKKworI2RlZmluZSBTX0NMRUFSX0ZJTiAgICA4CisjZGVmaW5lIFZfQ0xFQVJfRklOKHgpICgoeCkgPDwgU19DTEVBUl9GSU4pCisjZGVmaW5lIEZfQ0xFQVJfRklOICAgIFZfQ0xFQVJfRklOKDFVKQorCiAjZGVmaW5lIFNfRElTX1RYX0ZJTExfV0lOX1BVU0ggICAgMTIKICNkZWZpbmUgVl9ESVNfVFhfRklMTF9XSU5fUFVTSCh4KSAoKHgpIDw8IFNfRElTX1RYX0ZJTExfV0lOX1BVU0gpCiAjZGVmaW5lIEZfRElTX1RYX0ZJTExfV0lOX1BVU0ggICAgVl9ESVNfVFhfRklMTF9XSU5fUFVTSCgxVSkKIAogI2RlZmluZSBTX1RQX1BDX1JFViAgICAzMAogI2RlZmluZSBNX1RQX1BDX1JFViAgICAweDMKKyNkZWZpbmUgVl9UUF9QQ19SRVYoeCkgKCh4KSA8PCBTX1RQX1BDX1JFVikKICNkZWZpbmUgR19UUF9QQ19SRVYoeCkgKCgoeCkgPj4gU19UUF9QQ19SRVYpICYgTV9UUF9QQ19SRVYpCisKKyNkZWZpbmUgQV9UUF9CQUNLT0ZGMCAweDM1MAorCisjZGVmaW5lIFNfRUxFTUVOVDAgICAgMAorI2RlZmluZSBNX0VMRU1FTlQwICAgIDB4ZmYKKyNkZWZpbmUgVl9FTEVNRU5UMCh4KSAoKHgpIDw8IFNfRUxFTUVOVDApCisjZGVmaW5lIEdfRUxFTUVOVDAoeCkgKCgoeCkgPj4gU19FTEVNRU5UMCkgJiBNX0VMRU1FTlQwKQorCisjZGVmaW5lIFNfRUxFTUVOVDEgICAgOAorI2RlZmluZSBNX0VMRU1FTlQxICAgIDB4ZmYKKyNkZWZpbmUgVl9FTEVNRU5UMSh4KSAoKHgpIDw8IFNfRUxFTUVOVDEpCisjZGVmaW5lIEdfRUxFTUVOVDEoeCkgKCgoeCkgPj4gU19FTEVNRU5UMSkgJiBNX0VMRU1FTlQxKQorCisjZGVmaW5lIFNfRUxFTUVOVDIgICAgMTYKKyNkZWZpbmUgTV9FTEVNRU5UMiAgICAweGZmCisjZGVmaW5lIFZfRUxFTUVOVDIoeCkgKCh4KSA8PCBTX0VMRU1FTlQyKQorI2RlZmluZSBHX0VMRU1FTlQyKHgpICgoKHgpID4+IFNfRUxFTUVOVDIpICYgTV9FTEVNRU5UMikKKworI2RlZmluZSBTX0VMRU1FTlQzICAgIDI0CisjZGVmaW5lIE1fRUxFTUVOVDMgICAgMHhmZgorI2RlZmluZSBWX0VMRU1FTlQzKHgpICgoeCkgPDwgU19FTEVNRU5UMykKKyNkZWZpbmUgR19FTEVNRU5UMyh4KSAoKCh4KSA+PiBTX0VMRU1FTlQzKSAmIE1fRUxFTUVOVDMpCisKKyNkZWZpbmUgQV9UUF9CQUNLT0ZGMSAweDM1NAorI2RlZmluZSBBX1RQX0JBQ0tPRkYyIDB4MzU4CisjZGVmaW5lIEFfVFBfQkFDS09GRjMgMHgzNWMKKyNkZWZpbmUgQV9UUF9QQVJBX1JFRzAgMHgzNjAKKworI2RlZmluZSBTX1ZBUl9NVUxUICAgIDAKKyNkZWZpbmUgTV9WQVJfTVVMVCAgICAweGYKKyNkZWZpbmUgVl9WQVJfTVVMVCh4KSAoKHgpIDw8IFNfVkFSX01VTFQpCisjZGVmaW5lIEdfVkFSX01VTFQoeCkgKCgoeCkgPj4gU19WQVJfTVVMVCkgJiBNX1ZBUl9NVUxUKQorCisjZGVmaW5lIFNfVkFSX0dBSU4gICAgNAorI2RlZmluZSBNX1ZBUl9HQUlOICAgIDB4ZgorI2RlZmluZSBWX1ZBUl9HQUlOKHgpICgoeCkgPDwgU19WQVJfR0FJTikKKyNkZWZpbmUgR19WQVJfR0FJTih4KSAoKCh4KSA+PiBTX1ZBUl9HQUlOKSAmIE1fVkFSX0dBSU4pCisKKyNkZWZpbmUgU19TUlRUX0dBSU4gICAgOAorI2RlZmluZSBNX1NSVFRfR0FJTiAgICAweGYKKyNkZWZpbmUgVl9TUlRUX0dBSU4oeCkgKCh4KSA8PCBTX1NSVFRfR0FJTikKKyNkZWZpbmUgR19TUlRUX0dBSU4oeCkgKCgoeCkgPj4gU19TUlRUX0dBSU4pICYgTV9TUlRUX0dBSU4pCisKKyNkZWZpbmUgU19SVFRWQVJfSU5JVCAgICAxMgorI2RlZmluZSBNX1JUVFZBUl9JTklUICAgIDB4ZgorI2RlZmluZSBWX1JUVFZBUl9JTklUKHgpICgoeCkgPDwgU19SVFRWQVJfSU5JVCkKKyNkZWZpbmUgR19SVFRWQVJfSU5JVCh4KSAoKCh4KSA+PiBTX1JUVFZBUl9JTklUKSAmIE1fUlRUVkFSX0lOSVQpCisKKyNkZWZpbmUgU19EVVBfVEhSRVNIICAgIDIwCisjZGVmaW5lIE1fRFVQX1RIUkVTSCAgICAweGYKKyNkZWZpbmUgVl9EVVBfVEhSRVNIKHgpICgoeCkgPDwgU19EVVBfVEhSRVNIKQorI2RlZmluZSBHX0RVUF9USFJFU0goeCkgKCgoeCkgPj4gU19EVVBfVEhSRVNIKSAmIE1fRFVQX1RIUkVTSCkKKworI2RlZmluZSBTX0lOSVRfQ09OR19XSU4gICAgMjQKKyNkZWZpbmUgTV9JTklUX0NPTkdfV0lOICAgIDB4NworI2RlZmluZSBWX0lOSVRfQ09OR19XSU4oeCkgKCh4KSA8PCBTX0lOSVRfQ09OR19XSU4pCisjZGVmaW5lIEdfSU5JVF9DT05HX1dJTih4KSAoKCh4KSA+PiBTX0lOSVRfQ09OR19XSU4pICYgTV9JTklUX0NPTkdfV0lOKQorCisjZGVmaW5lIEFfVFBfUEFSQV9SRUcxIDB4MzY0CisKKyNkZWZpbmUgU19JTklUSUFMX1NMT1dfU1RBUlRfVEhSRVNIT0xEICAgIDAKKyNkZWZpbmUgTV9JTklUSUFMX1NMT1dfU1RBUlRfVEhSRVNIT0xEICAgIDB4ZmZmZgorI2RlZmluZSBWX0lOSVRJQUxfU0xPV19TVEFSVF9USFJFU0hPTEQoeCkgKCh4KSA8PCBTX0lOSVRJQUxfU0xPV19TVEFSVF9USFJFU0hPTEQpCisjZGVmaW5lIEdfSU5JVElBTF9TTE9XX1NUQVJUX1RIUkVTSE9MRCh4KSAoKCh4KSA+PiBTX0lOSVRJQUxfU0xPV19TVEFSVF9USFJFU0hPTEQpICYgTV9JTklUSUFMX1NMT1dfU1RBUlRfVEhSRVNIT0xEKQorCisjZGVmaW5lIFNfUkVDRUlWRV9CVUZGRVJfU0laRSAgICAxNgorI2RlZmluZSBNX1JFQ0VJVkVfQlVGRkVSX1NJWkUgICAgMHhmZmZmCisjZGVmaW5lIFZfUkVDRUlWRV9CVUZGRVJfU0laRSh4KSAoKHgpIDw8IFNfUkVDRUlWRV9CVUZGRVJfU0laRSkKKyNkZWZpbmUgR19SRUNFSVZFX0JVRkZFUl9TSVpFKHgpICgoKHgpID4+IFNfUkVDRUlWRV9CVUZGRVJfU0laRSkgJiBNX1JFQ0VJVkVfQlVGRkVSX1NJWkUpCisKKyNkZWZpbmUgQV9UUF9QQVJBX1JFRzIgMHgzNjgKKworI2RlZmluZSBTX1JYX0NPQUxFU0NFX1NJWkUgICAgMAorI2RlZmluZSBNX1JYX0NPQUxFU0NFX1NJWkUgICAgMHhmZmZmCisjZGVmaW5lIFZfUlhfQ09BTEVTQ0VfU0laRSh4KSAoKHgpIDw8IFNfUlhfQ09BTEVTQ0VfU0laRSkKKyNkZWZpbmUgR19SWF9DT0FMRVNDRV9TSVpFKHgpICgoKHgpID4+IFNfUlhfQ09BTEVTQ0VfU0laRSkgJiBNX1JYX0NPQUxFU0NFX1NJWkUpCisKKyNkZWZpbmUgU19NQVhfUlhfU0laRSAgICAxNgorI2RlZmluZSBNX01BWF9SWF9TSVpFICAgIDB4ZmZmZgorI2RlZmluZSBWX01BWF9SWF9TSVpFKHgpICgoeCkgPDwgU19NQVhfUlhfU0laRSkKKyNkZWZpbmUgR19NQVhfUlhfU0laRSh4KSAoKCh4KSA+PiBTX01BWF9SWF9TSVpFKSAmIE1fTUFYX1JYX1NJWkUpCisKKyNkZWZpbmUgQV9UUF9QQVJBX1JFRzMgMHgzNmMKKworI2RlZmluZSBTX1JYX0NPQUxFU0NJTkdfUFNIX0RFTElWRVIgICAgMAorI2RlZmluZSBWX1JYX0NPQUxFU0NJTkdfUFNIX0RFTElWRVIoeCkgKCh4KSA8PCBTX1JYX0NPQUxFU0NJTkdfUFNIX0RFTElWRVIpCisjZGVmaW5lIEZfUlhfQ09BTEVTQ0lOR19QU0hfREVMSVZFUiAgICBWX1JYX0NPQUxFU0NJTkdfUFNIX0RFTElWRVIoMVUpCisKKyNkZWZpbmUgU19SWF9DT0FMRVNDSU5HX0VOQUJMRSAgICAxCisjZGVmaW5lIFZfUlhfQ09BTEVTQ0lOR19FTkFCTEUoeCkgKCh4KSA8PCBTX1JYX0NPQUxFU0NJTkdfRU5BQkxFKQorI2RlZmluZSBGX1JYX0NPQUxFU0NJTkdfRU5BQkxFICAgIFZfUlhfQ09BTEVTQ0lOR19FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19UQUhPRV9FTkFCTEUgICAgMgorI2RlZmluZSBWX1RBSE9FX0VOQUJMRSh4KSAoKHgpIDw8IFNfVEFIT0VfRU5BQkxFKQorI2RlZmluZSBGX1RBSE9FX0VOQUJMRSAgICBWX1RBSE9FX0VOQUJMRSgxVSkKKworI2RlZmluZSBTX01BWF9SRU9SREVSX0ZSQUdNRU5UUyAgICAxMgorI2RlZmluZSBNX01BWF9SRU9SREVSX0ZSQUdNRU5UUyAgICAweDcKKyNkZWZpbmUgVl9NQVhfUkVPUkRFUl9GUkFHTUVOVFMoeCkgKCh4KSA8PCBTX01BWF9SRU9SREVSX0ZSQUdNRU5UUykKKyNkZWZpbmUgR19NQVhfUkVPUkRFUl9GUkFHTUVOVFMoeCkgKCgoeCkgPj4gU19NQVhfUkVPUkRFUl9GUkFHTUVOVFMpICYgTV9NQVhfUkVPUkRFUl9GUkFHTUVOVFMpCisKKyNkZWZpbmUgQV9UUF9USU1FUl9SRVNPTFVUSU9OIDB4MzkwCisKKyNkZWZpbmUgU19ERUxBWUVEX0FDS19USU1FUl9SRVNPTFVUSU9OICAgIDAKKyNkZWZpbmUgTV9ERUxBWUVEX0FDS19USU1FUl9SRVNPTFVUSU9OICAgIDB4M2YKKyNkZWZpbmUgVl9ERUxBWUVEX0FDS19USU1FUl9SRVNPTFVUSU9OKHgpICgoeCkgPDwgU19ERUxBWUVEX0FDS19USU1FUl9SRVNPTFVUSU9OKQorI2RlZmluZSBHX0RFTEFZRURfQUNLX1RJTUVSX1JFU09MVVRJT04oeCkgKCgoeCkgPj4gU19ERUxBWUVEX0FDS19USU1FUl9SRVNPTFVUSU9OKSAmIE1fREVMQVlFRF9BQ0tfVElNRVJfUkVTT0xVVElPTikKKworI2RlZmluZSBTX0dFTkVSSUNfVElNRVJfUkVTT0xVVElPTiAgICAxNgorI2RlZmluZSBNX0dFTkVSSUNfVElNRVJfUkVTT0xVVElPTiAgICAweDNmCisjZGVmaW5lIFZfR0VORVJJQ19USU1FUl9SRVNPTFVUSU9OKHgpICgoeCkgPDwgU19HRU5FUklDX1RJTUVSX1JFU09MVVRJT04pCisjZGVmaW5lIEdfR0VORVJJQ19USU1FUl9SRVNPTFVUSU9OKHgpICgoKHgpID4+IFNfR0VORVJJQ19USU1FUl9SRVNPTFVUSU9OKSAmIE1fR0VORVJJQ19USU1FUl9SRVNPTFVUSU9OKQorCisjZGVmaW5lIEFfVFBfMk1TTCAweDM5NAorCisjZGVmaW5lIFNfMk1TTCAgICAwCisjZGVmaW5lIE1fMk1TTCAgICAweDNmZmZmZmZmCisjZGVmaW5lIFZfMk1TTCh4KSAoKHgpIDw8IFNfMk1TTCkKKyNkZWZpbmUgR18yTVNMKHgpICgoKHgpID4+IFNfMk1TTCkgJiBNXzJNU0wpCisKKyNkZWZpbmUgQV9UUF9SWFRfTUlOIDB4Mzk4CisKKyNkZWZpbmUgU19SRVRSQU5TTUlUX1RJTUVSX01JTiAgICAwCisjZGVmaW5lIE1fUkVUUkFOU01JVF9USU1FUl9NSU4gICAgMHhmZmZmCisjZGVmaW5lIFZfUkVUUkFOU01JVF9USU1FUl9NSU4oeCkgKCh4KSA8PCBTX1JFVFJBTlNNSVRfVElNRVJfTUlOKQorI2RlZmluZSBHX1JFVFJBTlNNSVRfVElNRVJfTUlOKHgpICgoKHgpID4+IFNfUkVUUkFOU01JVF9USU1FUl9NSU4pICYgTV9SRVRSQU5TTUlUX1RJTUVSX01JTikKKworI2RlZmluZSBBX1RQX1JYVF9NQVggMHgzOWMKKworI2RlZmluZSBTX1JFVFJBTlNNSVRfVElNRVJfTUFYICAgIDAKKyNkZWZpbmUgTV9SRVRSQU5TTUlUX1RJTUVSX01BWCAgICAweDNmZmZmZmZmCisjZGVmaW5lIFZfUkVUUkFOU01JVF9USU1FUl9NQVgoeCkgKCh4KSA8PCBTX1JFVFJBTlNNSVRfVElNRVJfTUFYKQorI2RlZmluZSBHX1JFVFJBTlNNSVRfVElNRVJfTUFYKHgpICgoKHgpID4+IFNfUkVUUkFOU01JVF9USU1FUl9NQVgpICYgTV9SRVRSQU5TTUlUX1RJTUVSX01BWCkKKworI2RlZmluZSBBX1RQX1BFUlNfTUlOIDB4M2EwCisKKyNkZWZpbmUgU19QRVJTSVNUX1RJTUVSX01JTiAgICAwCisjZGVmaW5lIE1fUEVSU0lTVF9USU1FUl9NSU4gICAgMHhmZmZmCisjZGVmaW5lIFZfUEVSU0lTVF9USU1FUl9NSU4oeCkgKCh4KSA8PCBTX1BFUlNJU1RfVElNRVJfTUlOKQorI2RlZmluZSBHX1BFUlNJU1RfVElNRVJfTUlOKHgpICgoKHgpID4+IFNfUEVSU0lTVF9USU1FUl9NSU4pICYgTV9QRVJTSVNUX1RJTUVSX01JTikKKworI2RlZmluZSBBX1RQX1BFUlNfTUFYIDB4M2E0CisKKyNkZWZpbmUgU19QRVJTSVNUX1RJTUVSX01BWCAgICAwCisjZGVmaW5lIE1fUEVSU0lTVF9USU1FUl9NQVggICAgMHgzZmZmZmZmZgorI2RlZmluZSBWX1BFUlNJU1RfVElNRVJfTUFYKHgpICgoeCkgPDwgU19QRVJTSVNUX1RJTUVSX01BWCkKKyNkZWZpbmUgR19QRVJTSVNUX1RJTUVSX01BWCh4KSAoKCh4KSA+PiBTX1BFUlNJU1RfVElNRVJfTUFYKSAmIE1fUEVSU0lTVF9USU1FUl9NQVgpCisKKyNkZWZpbmUgQV9UUF9LRUVQX0lETEUgMHgzYWMKKworI2RlZmluZSBTX0tFRVBfQUxJVkVfSURMRV9USU1FICAgIDAKKyNkZWZpbmUgTV9LRUVQX0FMSVZFX0lETEVfVElNRSAgICAweDNmZmZmZmZmCisjZGVmaW5lIFZfS0VFUF9BTElWRV9JRExFX1RJTUUoeCkgKCh4KSA8PCBTX0tFRVBfQUxJVkVfSURMRV9USU1FKQorI2RlZmluZSBHX0tFRVBfQUxJVkVfSURMRV9USU1FKHgpICgoKHgpID4+IFNfS0VFUF9BTElWRV9JRExFX1RJTUUpICYgTV9LRUVQX0FMSVZFX0lETEVfVElNRSkKKworI2RlZmluZSBBX1RQX0tFRVBfSU5UVkwgMHgzYjAKKworI2RlZmluZSBTX0tFRVBfQUxJVkVfSU5URVJWQUxfVElNRSAgICAwCisjZGVmaW5lIE1fS0VFUF9BTElWRV9JTlRFUlZBTF9USU1FICAgIDB4M2ZmZmZmZmYKKyNkZWZpbmUgVl9LRUVQX0FMSVZFX0lOVEVSVkFMX1RJTUUoeCkgKCh4KSA8PCBTX0tFRVBfQUxJVkVfSU5URVJWQUxfVElNRSkKKyNkZWZpbmUgR19LRUVQX0FMSVZFX0lOVEVSVkFMX1RJTUUoeCkgKCgoeCkgPj4gU19LRUVQX0FMSVZFX0lOVEVSVkFMX1RJTUUpICYgTV9LRUVQX0FMSVZFX0lOVEVSVkFMX1RJTUUpCisKKyNkZWZpbmUgQV9UUF9JTklUX1NSVFQgMHgzYjQKKworI2RlZmluZSBTX0lOSVRJQUxfU1JUVCAgICAwCisjZGVmaW5lIE1fSU5JVElBTF9TUlRUICAgIDB4ZmZmZgorI2RlZmluZSBWX0lOSVRJQUxfU1JUVCh4KSAoKHgpIDw8IFNfSU5JVElBTF9TUlRUKQorI2RlZmluZSBHX0lOSVRJQUxfU1JUVCh4KSAoKCh4KSA+PiBTX0lOSVRJQUxfU1JUVCkgJiBNX0lOSVRJQUxfU1JUVCkKKworI2RlZmluZSBBX1RQX0RBQ0tfVElNRSAweDNiOAorCisjZGVmaW5lIFNfREVMQVlFRF9BQ0tfVElNRSAgICAwCisjZGVmaW5lIE1fREVMQVlFRF9BQ0tfVElNRSAgICAweDdmZgorI2RlZmluZSBWX0RFTEFZRURfQUNLX1RJTUUoeCkgKCh4KSA8PCBTX0RFTEFZRURfQUNLX1RJTUUpCisjZGVmaW5lIEdfREVMQVlFRF9BQ0tfVElNRSh4KSAoKCh4KSA+PiBTX0RFTEFZRURfQUNLX1RJTUUpICYgTV9ERUxBWUVEX0FDS19USU1FKQorCisjZGVmaW5lIEFfVFBfRklOV0FJVDJfVElNRSAweDNiYworCisjZGVmaW5lIFNfRklOV0FJVDJfVElNRSAgICAwCisjZGVmaW5lIE1fRklOV0FJVDJfVElNRSAgICAweDNmZmZmZmZmCisjZGVmaW5lIFZfRklOV0FJVDJfVElNRSh4KSAoKHgpIDw8IFNfRklOV0FJVDJfVElNRSkKKyNkZWZpbmUgR19GSU5XQUlUMl9USU1FKHgpICgoKHgpID4+IFNfRklOV0FJVDJfVElNRSkgJiBNX0ZJTldBSVQyX1RJTUUpCisKKyNkZWZpbmUgQV9UUF9GQVNUX0ZJTldBSVQyX1RJTUUgMHgzYzAKKworI2RlZmluZSBTX0ZBU1RfRklOV0FJVDJfVElNRSAgICAwCisjZGVmaW5lIE1fRkFTVF9GSU5XQUlUMl9USU1FICAgIDB4M2ZmZmZmZmYKKyNkZWZpbmUgVl9GQVNUX0ZJTldBSVQyX1RJTUUoeCkgKCh4KSA8PCBTX0ZBU1RfRklOV0FJVDJfVElNRSkKKyNkZWZpbmUgR19GQVNUX0ZJTldBSVQyX1RJTUUoeCkgKCgoeCkgPj4gU19GQVNUX0ZJTldBSVQyX1RJTUUpICYgTV9GQVNUX0ZJTldBSVQyX1RJTUUpCisKKyNkZWZpbmUgQV9UUF9TSElGVF9DTlQgMHgzYzQKKworI2RlZmluZSBTX0tFRVBBTElWRV9NQVggICAgMAorI2RlZmluZSBNX0tFRVBBTElWRV9NQVggICAgMHhmZgorI2RlZmluZSBWX0tFRVBBTElWRV9NQVgoeCkgKCh4KSA8PCBTX0tFRVBBTElWRV9NQVgpCisjZGVmaW5lIEdfS0VFUEFMSVZFX01BWCh4KSAoKCh4KSA+PiBTX0tFRVBBTElWRV9NQVgpICYgTV9LRUVQQUxJVkVfTUFYKQorCisjZGVmaW5lIFNfV0lORE9XUFJPQkVfTUFYICAgIDgKKyNkZWZpbmUgTV9XSU5ET1dQUk9CRV9NQVggICAgMHhmZgorI2RlZmluZSBWX1dJTkRPV1BST0JFX01BWCh4KSAoKHgpIDw8IFNfV0lORE9XUFJPQkVfTUFYKQorI2RlZmluZSBHX1dJTkRPV1BST0JFX01BWCh4KSAoKCh4KSA+PiBTX1dJTkRPV1BST0JFX01BWCkgJiBNX1dJTkRPV1BST0JFX01BWCkKKworI2RlZmluZSBTX1JFVFJBTlNNSVNTSU9OX01BWCAgICAxNgorI2RlZmluZSBNX1JFVFJBTlNNSVNTSU9OX01BWCAgICAweGZmCisjZGVmaW5lIFZfUkVUUkFOU01JU1NJT05fTUFYKHgpICgoeCkgPDwgU19SRVRSQU5TTUlTU0lPTl9NQVgpCisjZGVmaW5lIEdfUkVUUkFOU01JU1NJT05fTUFYKHgpICgoKHgpID4+IFNfUkVUUkFOU01JU1NJT05fTUFYKSAmIE1fUkVUUkFOU01JU1NJT05fTUFYKQorCisjZGVmaW5lIFNfU1lOX01BWCAgICAyNAorI2RlZmluZSBNX1NZTl9NQVggICAgMHhmZgorI2RlZmluZSBWX1NZTl9NQVgoeCkgKCh4KSA8PCBTX1NZTl9NQVgpCisjZGVmaW5lIEdfU1lOX01BWCh4KSAoKCh4KSA+PiBTX1NZTl9NQVgpICYgTV9TWU5fTUFYKQorCisjZGVmaW5lIEFfVFBfUU9TX1JFRzAgMHgzZTAKKworI2RlZmluZSBTX0wzX1ZBTFVFICAgIDAKKyNkZWZpbmUgTV9MM19WQUxVRSAgICAweDNmCisjZGVmaW5lIFZfTDNfVkFMVUUoeCkgKCh4KSA8PCBTX0wzX1ZBTFVFKQorI2RlZmluZSBHX0wzX1ZBTFVFKHgpICgoKHgpID4+IFNfTDNfVkFMVUUpICYgTV9MM19WQUxVRSkKKworI2RlZmluZSBBX1RQX1FPU19SRUcxIDB4M2U0CisjZGVmaW5lIEFfVFBfUU9TX1JFRzIgMHgzZTgKKyNkZWZpbmUgQV9UUF9RT1NfUkVHMyAweDNlYworI2RlZmluZSBBX1RQX1FPU19SRUc0IDB4M2YwCisjZGVmaW5lIEFfVFBfUU9TX1JFRzUgMHgzZjQKKyNkZWZpbmUgQV9UUF9RT1NfUkVHNiAweDNmOAorI2RlZmluZSBBX1RQX1FPU19SRUc3IDB4M2ZjCisjZGVmaW5lIEFfVFBfTVRVX1JFRzAgMHg0MDQKKyNkZWZpbmUgQV9UUF9NVFVfUkVHMSAweDQwOAorI2RlZmluZSBBX1RQX01UVV9SRUcyIDB4NDBjCisjZGVmaW5lIEFfVFBfTVRVX1JFRzMgMHg0MTAKKyNkZWZpbmUgQV9UUF9NVFVfUkVHNCAweDQxNAorI2RlZmluZSBBX1RQX01UVV9SRUc1IDB4NDE4CisjZGVmaW5lIEFfVFBfTVRVX1JFRzYgMHg0MWMKKyNkZWZpbmUgQV9UUF9NVFVfUkVHNyAweDQyMAogI2RlZmluZSBBX1RQX1JFU0VUIDB4NDRjCisKICNkZWZpbmUgU19UUF9SRVNFVCAgICAwCiAjZGVmaW5lIFZfVFBfUkVTRVQoeCkgKCh4KSA8PCBTX1RQX1JFU0VUKQogI2RlZmluZSBGX1RQX1JFU0VUICAgIFZfVFBfUkVTRVQoMVUpCiAKKyNkZWZpbmUgU19DTV9NRU1NR1JfSU5JVCAgICAxCisjZGVmaW5lIFZfQ01fTUVNTUdSX0lOSVQoeCkgKCh4KSA8PCBTX0NNX01FTU1HUl9JTklUKQorI2RlZmluZSBGX0NNX01FTU1HUl9JTklUICAgIFZfQ01fTUVNTUdSX0lOSVQoMVUpCisKKyNkZWZpbmUgQV9UUF9NSUJfSU5ERVggMHg0NTAKKyNkZWZpbmUgQV9UUF9NSUJfREFUQSAweDQ1NAorI2RlZmluZSBBX1RQX1NZTkNfVElNRV9ISSAweDQ1OAorI2RlZmluZSBBX1RQX1NZTkNfVElNRV9MTyAweDQ1YworI2RlZmluZSBBX1RQX0NNX01NX1JYX0ZMU1RfQkFTRSAweDQ2MAorCisjZGVmaW5lIFNfQ01fTUVNTUdSX1JYX0ZSRUVfTElTVF9CQVNFICAgIDAKKyNkZWZpbmUgTV9DTV9NRU1NR1JfUlhfRlJFRV9MSVNUX0JBU0UgICAgMHhmZmZmZmZmCisjZGVmaW5lIFZfQ01fTUVNTUdSX1JYX0ZSRUVfTElTVF9CQVNFKHgpICgoeCkgPDwgU19DTV9NRU1NR1JfUlhfRlJFRV9MSVNUX0JBU0UpCisjZGVmaW5lIEdfQ01fTUVNTUdSX1JYX0ZSRUVfTElTVF9CQVNFKHgpICgoKHgpID4+IFNfQ01fTUVNTUdSX1JYX0ZSRUVfTElTVF9CQVNFKSAmIE1fQ01fTUVNTUdSX1JYX0ZSRUVfTElTVF9CQVNFKQorCisjZGVmaW5lIEFfVFBfQ01fTU1fVFhfRkxTVF9CQVNFIDB4NDY0CisKKyNkZWZpbmUgU19DTV9NRU1NR1JfVFhfRlJFRV9MSVNUX0JBU0UgICAgMAorI2RlZmluZSBNX0NNX01FTU1HUl9UWF9GUkVFX0xJU1RfQkFTRSAgICAweGZmZmZmZmYKKyNkZWZpbmUgVl9DTV9NRU1NR1JfVFhfRlJFRV9MSVNUX0JBU0UoeCkgKCh4KSA8PCBTX0NNX01FTU1HUl9UWF9GUkVFX0xJU1RfQkFTRSkKKyNkZWZpbmUgR19DTV9NRU1NR1JfVFhfRlJFRV9MSVNUX0JBU0UoeCkgKCgoeCkgPj4gU19DTV9NRU1NR1JfVFhfRlJFRV9MSVNUX0JBU0UpICYgTV9DTV9NRU1NR1JfVFhfRlJFRV9MSVNUX0JBU0UpCisKKyNkZWZpbmUgQV9UUF9DTV9NTV9QX0ZMU1RfQkFTRSAweDQ2OAorCisjZGVmaW5lIFNfQ01fTUVNTUdSX1BTVFJVQ1RfRlJFRV9MSVNUX0JBU0UgICAgMAorI2RlZmluZSBNX0NNX01FTU1HUl9QU1RSVUNUX0ZSRUVfTElTVF9CQVNFICAgIDB4ZmZmZmZmZgorI2RlZmluZSBWX0NNX01FTU1HUl9QU1RSVUNUX0ZSRUVfTElTVF9CQVNFKHgpICgoeCkgPDwgU19DTV9NRU1NR1JfUFNUUlVDVF9GUkVFX0xJU1RfQkFTRSkKKyNkZWZpbmUgR19DTV9NRU1NR1JfUFNUUlVDVF9GUkVFX0xJU1RfQkFTRSh4KSAoKCh4KSA+PiBTX0NNX01FTU1HUl9QU1RSVUNUX0ZSRUVfTElTVF9CQVNFKSAmIE1fQ01fTUVNTUdSX1BTVFJVQ1RfRlJFRV9MSVNUX0JBU0UpCisKKyNkZWZpbmUgQV9UUF9DTV9NTV9NQVhfUCAweDQ2YworCisjZGVmaW5lIFNfQ01fTUVNTUdSX01BWF9QU1RSVUNUICAgIDAKKyNkZWZpbmUgTV9DTV9NRU1NR1JfTUFYX1BTVFJVQ1QgICAgMHhmZmZmZmZmCisjZGVmaW5lIFZfQ01fTUVNTUdSX01BWF9QU1RSVUNUKHgpICgoeCkgPDwgU19DTV9NRU1NR1JfTUFYX1BTVFJVQ1QpCisjZGVmaW5lIEdfQ01fTUVNTUdSX01BWF9QU1RSVUNUKHgpICgoKHgpID4+IFNfQ01fTUVNTUdSX01BWF9QU1RSVUNUKSAmIE1fQ01fTUVNTUdSX01BWF9QU1RSVUNUKQorCiAjZGVmaW5lIEFfVFBfSU5UX0VOQUJMRSAweDQ3MAorCisjZGVmaW5lIFNfVFhfRlJFRV9MSVNUX0VNUFRZICAgIDAKKyNkZWZpbmUgVl9UWF9GUkVFX0xJU1RfRU1QVFkoeCkgKCh4KSA8PCBTX1RYX0ZSRUVfTElTVF9FTVBUWSkKKyNkZWZpbmUgRl9UWF9GUkVFX0xJU1RfRU1QVFkgICAgVl9UWF9GUkVFX0xJU1RfRU1QVFkoMVUpCisKKyNkZWZpbmUgU19SWF9GUkVFX0xJU1RfRU1QVFkgICAgMQorI2RlZmluZSBWX1JYX0ZSRUVfTElTVF9FTVBUWSh4KSAoKHgpIDw8IFNfUlhfRlJFRV9MSVNUX0VNUFRZKQorI2RlZmluZSBGX1JYX0ZSRUVfTElTVF9FTVBUWSAgICBWX1JYX0ZSRUVfTElTVF9FTVBUWSgxVSkKKwogI2RlZmluZSBBX1RQX0lOVF9DQVVTRSAweDQ3NAorI2RlZmluZSBBX1RQX1RJTUVSX1NFUEFSQVRPUiAweDRhNAorCisjZGVmaW5lIFNfRElTQUJMRV9QQVNUX1RJTUVSX0lOU0VSVElPTiAgICAwCisjZGVmaW5lIFZfRElTQUJMRV9QQVNUX1RJTUVSX0lOU0VSVElPTih4KSAoKHgpIDw8IFNfRElTQUJMRV9QQVNUX1RJTUVSX0lOU0VSVElPTikKKyNkZWZpbmUgRl9ESVNBQkxFX1BBU1RfVElNRVJfSU5TRVJUSU9OICAgIFZfRElTQUJMRV9QQVNUX1RJTUVSX0lOU0VSVElPTigxVSkKKworI2RlZmluZSBTX01PRFVMQVRJT05fVElNRVJfU0VQQVJBVE9SICAgIDEKKyNkZWZpbmUgTV9NT0RVTEFUSU9OX1RJTUVSX1NFUEFSQVRPUiAgICAweDdmZmYKKyNkZWZpbmUgVl9NT0RVTEFUSU9OX1RJTUVSX1NFUEFSQVRPUih4KSAoKHgpIDw8IFNfTU9EVUxBVElPTl9USU1FUl9TRVBBUkFUT1IpCisjZGVmaW5lIEdfTU9EVUxBVElPTl9USU1FUl9TRVBBUkFUT1IoeCkgKCgoeCkgPj4gU19NT0RVTEFUSU9OX1RJTUVSX1NFUEFSQVRPUikgJiBNX01PRFVMQVRJT05fVElNRVJfU0VQQVJBVE9SKQorCisjZGVmaW5lIFNfR0xPQkFMX1RJTUVSX1NFUEFSQVRPUiAgICAxNgorI2RlZmluZSBNX0dMT0JBTF9USU1FUl9TRVBBUkFUT1IgICAgMHhmZmZmCisjZGVmaW5lIFZfR0xPQkFMX1RJTUVSX1NFUEFSQVRPUih4KSAoKHgpIDw8IFNfR0xPQkFMX1RJTUVSX1NFUEFSQVRPUikKKyNkZWZpbmUgR19HTE9CQUxfVElNRVJfU0VQQVJBVE9SKHgpICgoKHgpID4+IFNfR0xPQkFMX1RJTUVSX1NFUEFSQVRPUikgJiBNX0dMT0JBTF9USU1FUl9TRVBBUkFUT1IpCisKKyNkZWZpbmUgQV9UUF9DTV9GQ19NT0RFIDB4NGIwCisjZGVmaW5lIEFfVFBfUENfQ09OR0VTVElPTl9DTlRMIDB4NGI0CiAjZGVmaW5lIEFfVFBfVFhfRFJPUF9DT05GSUcgMHg0YjgKIAogI2RlZmluZSBTX0VOQUJMRV9UWF9EUk9QICAgIDMxCkBAIC0yODIsMTIgKzEyNDksMTA4IEBACiAjZGVmaW5lIEZfRU5BQkxFX1RYX0VSUk9SICAgIFZfRU5BQkxFX1RYX0VSUk9SKDFVKQogCiAjZGVmaW5lIFNfRFJPUF9USUNLU19DTlQgICAgNAorI2RlZmluZSBNX0RST1BfVElDS1NfQ05UICAgIDB4M2ZmZmZmZgogI2RlZmluZSBWX0RST1BfVElDS1NfQ05UKHgpICgoeCkgPDwgU19EUk9QX1RJQ0tTX0NOVCkKKyNkZWZpbmUgR19EUk9QX1RJQ0tTX0NOVCh4KSAoKCh4KSA+PiBTX0RST1BfVElDS1NfQ05UKSAmIE1fRFJPUF9USUNLU19DTlQpCiAKICNkZWZpbmUgU19OVU1fUEtUU19EUk9QUEVEICAgIDAKKyNkZWZpbmUgTV9OVU1fUEtUU19EUk9QUEVEICAgIDB4ZgogI2RlZmluZSBWX05VTV9QS1RTX0RST1BQRUQoeCkgKCh4KSA8PCBTX05VTV9QS1RTX0RST1BQRUQpCisjZGVmaW5lIEdfTlVNX1BLVFNfRFJPUFBFRCh4KSAoKCh4KSA+PiBTX05VTV9QS1RTX0RST1BQRUQpICYgTV9OVU1fUEtUU19EUk9QUEVEKQorCisjZGVmaW5lIEFfVFBfVFhfRFJPUF9DT1VOVCAweDRiYworCisvKiBSQVQgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFfUkFUX1JPVVRFX0NPTlRST0wgMHg1ODAKKworI2RlZmluZSBTX1VTRV9ST1VURV9UQUJMRSAgICAwCisjZGVmaW5lIFZfVVNFX1JPVVRFX1RBQkxFKHgpICgoeCkgPDwgU19VU0VfUk9VVEVfVEFCTEUpCisjZGVmaW5lIEZfVVNFX1JPVVRFX1RBQkxFICAgIFZfVVNFX1JPVVRFX1RBQkxFKDFVKQorCisjZGVmaW5lIFNfRU5BQkxFX0NTUEkgICAgMQorI2RlZmluZSBWX0VOQUJMRV9DU1BJKHgpICgoeCkgPDwgU19FTkFCTEVfQ1NQSSkKKyNkZWZpbmUgRl9FTkFCTEVfQ1NQSSAgICBWX0VOQUJMRV9DU1BJKDFVKQorCisjZGVmaW5lIFNfRU5BQkxFX1BDSVggICAgMgorI2RlZmluZSBWX0VOQUJMRV9QQ0lYKHgpICgoeCkgPDwgU19FTkFCTEVfUENJWCkKKyNkZWZpbmUgRl9FTkFCTEVfUENJWCAgICBWX0VOQUJMRV9QQ0lYKDFVKQorCisjZGVmaW5lIEFfUkFUX1JPVVRFX1RBQkxFX0lOREVYIDB4NTg0CisKKyNkZWZpbmUgU19ST1VURV9UQUJMRV9JTkRFWCAgICAwCisjZGVmaW5lIE1fUk9VVEVfVEFCTEVfSU5ERVggICAgMHhmCisjZGVmaW5lIFZfUk9VVEVfVEFCTEVfSU5ERVgoeCkgKCh4KSA8PCBTX1JPVVRFX1RBQkxFX0lOREVYKQorI2RlZmluZSBHX1JPVVRFX1RBQkxFX0lOREVYKHgpICgoKHgpID4+IFNfUk9VVEVfVEFCTEVfSU5ERVgpICYgTV9ST1VURV9UQUJMRV9JTkRFWCkKKworI2RlZmluZSBBX1JBVF9ST1VURV9UQUJMRV9EQVRBIDB4NTg4CisjZGVmaW5lIEFfUkFUX05PX1JPVVRFIDB4NThjCisKKyNkZWZpbmUgU19DUExfT1BDT0RFICAgIDAKKyNkZWZpbmUgTV9DUExfT1BDT0RFICAgIDB4ZmYKKyNkZWZpbmUgVl9DUExfT1BDT0RFKHgpICgoeCkgPDwgU19DUExfT1BDT0RFKQorI2RlZmluZSBHX0NQTF9PUENPREUoeCkgKCgoeCkgPj4gU19DUExfT1BDT0RFKSAmIE1fQ1BMX09QQ09ERSkKKworI2RlZmluZSBBX1JBVF9JTlRSX0VOQUJMRSAweDU5MAorCisjZGVmaW5lIFNfWkVST1JPVVRFRVJST1IgICAgMAorI2RlZmluZSBWX1pFUk9ST1VURUVSUk9SKHgpICgoeCkgPDwgU19aRVJPUk9VVEVFUlJPUikKKyNkZWZpbmUgRl9aRVJPUk9VVEVFUlJPUiAgICBWX1pFUk9ST1VURUVSUk9SKDFVKQorCisjZGVmaW5lIFNfQ1NQSUZSQU1JTkdFUlJPUiAgICAxCisjZGVmaW5lIFZfQ1NQSUZSQU1JTkdFUlJPUih4KSAoKHgpIDw8IFNfQ1NQSUZSQU1JTkdFUlJPUikKKyNkZWZpbmUgRl9DU1BJRlJBTUlOR0VSUk9SICAgIFZfQ1NQSUZSQU1JTkdFUlJPUigxVSkKKworI2RlZmluZSBTX1NHRUZSQU1JTkdFUlJPUiAgICAyCisjZGVmaW5lIFZfU0dFRlJBTUlOR0VSUk9SKHgpICgoeCkgPDwgU19TR0VGUkFNSU5HRVJST1IpCisjZGVmaW5lIEZfU0dFRlJBTUlOR0VSUk9SICAgIFZfU0dFRlJBTUlOR0VSUk9SKDFVKQorCisjZGVmaW5lIFNfVFBGUkFNSU5HRVJST1IgICAgMworI2RlZmluZSBWX1RQRlJBTUlOR0VSUk9SKHgpICgoeCkgPDwgU19UUEZSQU1JTkdFUlJPUikKKyNkZWZpbmUgRl9UUEZSQU1JTkdFUlJPUiAgICBWX1RQRlJBTUlOR0VSUk9SKDFVKQorCisjZGVmaW5lIEFfUkFUX0lOVFJfQ0FVU0UgMHg1OTQKIAogLyogQ1NQSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQV9DU1BJX1JYX0FFX1dNIDB4ODEwCisjZGVmaW5lIEFfQ1NQSV9SWF9BRl9XTSAweDgxNAorI2RlZmluZSBBX0NTUElfQ0FMRU5EQVJfTEVOIDB4ODE4CisKKyNkZWZpbmUgU19DQUxFTkRBUkxFTkdUSCAgICAwCisjZGVmaW5lIE1fQ0FMRU5EQVJMRU5HVEggICAgMHhmZmZmCisjZGVmaW5lIFZfQ0FMRU5EQVJMRU5HVEgoeCkgKCh4KSA8PCBTX0NBTEVOREFSTEVOR1RIKQorI2RlZmluZSBHX0NBTEVOREFSTEVOR1RIKHgpICgoKHgpID4+IFNfQ0FMRU5EQVJMRU5HVEgpICYgTV9DQUxFTkRBUkxFTkdUSCkKKworI2RlZmluZSBBX0NTUElfRklGT19TVEFUVVNfRU5BQkxFIDB4ODIwCisKKyNkZWZpbmUgU19GSUZPU1RBVFVTRU5BQkxFICAgIDAKKyNkZWZpbmUgVl9GSUZPU1RBVFVTRU5BQkxFKHgpICgoeCkgPDwgU19GSUZPU1RBVFVTRU5BQkxFKQorI2RlZmluZSBGX0ZJRk9TVEFUVVNFTkFCTEUgICAgVl9GSUZPU1RBVFVTRU5BQkxFKDFVKQorCisjZGVmaW5lIEFfQ1NQSV9NQVhCVVJTVDFfTUFYQlVSU1QyIDB4ODI4CisKKyNkZWZpbmUgU19NQVhCVVJTVDEgICAgMAorI2RlZmluZSBNX01BWEJVUlNUMSAgICAweGZmZmYKKyNkZWZpbmUgVl9NQVhCVVJTVDEoeCkgKCh4KSA8PCBTX01BWEJVUlNUMSkKKyNkZWZpbmUgR19NQVhCVVJTVDEoeCkgKCgoeCkgPj4gU19NQVhCVVJTVDEpICYgTV9NQVhCVVJTVDEpCisKKyNkZWZpbmUgU19NQVhCVVJTVDIgICAgMTYKKyNkZWZpbmUgTV9NQVhCVVJTVDIgICAgMHhmZmZmCisjZGVmaW5lIFZfTUFYQlVSU1QyKHgpICgoeCkgPDwgU19NQVhCVVJTVDIpCisjZGVmaW5lIEdfTUFYQlVSU1QyKHgpICgoKHgpID4+IFNfTUFYQlVSU1QyKSAmIE1fTUFYQlVSU1QyKQorCisjZGVmaW5lIEFfQ1NQSV9UUkFJTiAweDgyYworCisjZGVmaW5lIFNfQ1NQSV9UUkFJTl9BTFBIQSAgICAwCisjZGVmaW5lIE1fQ1NQSV9UUkFJTl9BTFBIQSAgICAweGZmZmYKKyNkZWZpbmUgVl9DU1BJX1RSQUlOX0FMUEhBKHgpICgoeCkgPDwgU19DU1BJX1RSQUlOX0FMUEhBKQorI2RlZmluZSBHX0NTUElfVFJBSU5fQUxQSEEoeCkgKCgoeCkgPj4gU19DU1BJX1RSQUlOX0FMUEhBKSAmIE1fQ1NQSV9UUkFJTl9BTFBIQSkKKworI2RlZmluZSBTX0NTUElfVFJBSU5fREFUQV9NQVhUICAgIDE2CisjZGVmaW5lIE1fQ1NQSV9UUkFJTl9EQVRBX01BWFQgICAgMHhmZmZmCisjZGVmaW5lIFZfQ1NQSV9UUkFJTl9EQVRBX01BWFQoeCkgKCh4KSA8PCBTX0NTUElfVFJBSU5fREFUQV9NQVhUKQorI2RlZmluZSBHX0NTUElfVFJBSU5fREFUQV9NQVhUKHgpICgoKHgpID4+IFNfQ1NQSV9UUkFJTl9EQVRBX01BWFQpICYgTV9DU1BJX1RSQUlOX0RBVEFfTUFYVCkKKworI2RlZmluZSBBX0NTUElfSU5UUl9TVEFUVVMgMHg4NDgKIAogI2RlZmluZSBTX0RJUDRFUlIgICAgMAogI2RlZmluZSBWX0RJUDRFUlIoeCkgKCh4KSA8PCBTX0RJUDRFUlIpCkBAIC0zMDksMjIgKzEzNzIsNjMgQEAKICNkZWZpbmUgVl9SQU1QQVJJVFlFUlIoeCkgKCh4KSA8PCBTX1JBTVBBUklUWUVSUikKICNkZWZpbmUgRl9SQU1QQVJJVFlFUlIgICAgVl9SQU1QQVJJVFlFUlIoMVUpCiAKLS8qIEVTUEkgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFfQ1NQSV9JTlRSX0VOQUJMRSAweDg0YwogCisvKiBFU1BJIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBX0VTUElfU0NIX1RPS0VOMCAweDg4MAorCisjZGVmaW5lIFNfU0NIVE9LRU4wICAgIDAKKyNkZWZpbmUgTV9TQ0hUT0tFTjAgICAgMHhmZmZmCisjZGVmaW5lIFZfU0NIVE9LRU4wKHgpICgoeCkgPDwgU19TQ0hUT0tFTjApCisjZGVmaW5lIEdfU0NIVE9LRU4wKHgpICgoKHgpID4+IFNfU0NIVE9LRU4wKSAmIE1fU0NIVE9LRU4wKQorCiAjZGVmaW5lIEFfRVNQSV9TQ0hfVE9LRU4xIDB4ODg0CisKKyNkZWZpbmUgU19TQ0hUT0tFTjEgICAgMAorI2RlZmluZSBNX1NDSFRPS0VOMSAgICAweGZmZmYKKyNkZWZpbmUgVl9TQ0hUT0tFTjEoeCkgKCh4KSA8PCBTX1NDSFRPS0VOMSkKKyNkZWZpbmUgR19TQ0hUT0tFTjEoeCkgKCgoeCkgPj4gU19TQ0hUT0tFTjEpICYgTV9TQ0hUT0tFTjEpCisKICNkZWZpbmUgQV9FU1BJX1NDSF9UT0tFTjIgMHg4ODgKKworI2RlZmluZSBTX1NDSFRPS0VOMiAgICAwCisjZGVmaW5lIE1fU0NIVE9LRU4yICAgIDB4ZmZmZgorI2RlZmluZSBWX1NDSFRPS0VOMih4KSAoKHgpIDw8IFNfU0NIVE9LRU4yKQorI2RlZmluZSBHX1NDSFRPS0VOMih4KSAoKCh4KSA+PiBTX1NDSFRPS0VOMikgJiBNX1NDSFRPS0VOMikKKwogI2RlZmluZSBBX0VTUElfU0NIX1RPS0VOMyAweDg4YworCisjZGVmaW5lIFNfU0NIVE9LRU4zICAgIDAKKyNkZWZpbmUgTV9TQ0hUT0tFTjMgICAgMHhmZmZmCisjZGVmaW5lIFZfU0NIVE9LRU4zKHgpICgoeCkgPDwgU19TQ0hUT0tFTjMpCisjZGVmaW5lIEdfU0NIVE9LRU4zKHgpICgoKHgpID4+IFNfU0NIVE9LRU4zKSAmIE1fU0NIVE9LRU4zKQorCiAjZGVmaW5lIEFfRVNQSV9SWF9GSUZPX0FMTU9TVF9FTVBUWV9XQVRFUk1BUksgMHg4OTAKKworI2RlZmluZSBTX0FMTU9TVEVNUFRZICAgIDAKKyNkZWZpbmUgTV9BTE1PU1RFTVBUWSAgICAweGZmZmYKKyNkZWZpbmUgVl9BTE1PU1RFTVBUWSh4KSAoKHgpIDw8IFNfQUxNT1NURU1QVFkpCisjZGVmaW5lIEdfQUxNT1NURU1QVFkoeCkgKCgoeCkgPj4gU19BTE1PU1RFTVBUWSkgJiBNX0FMTU9TVEVNUFRZKQorCiAjZGVmaW5lIEFfRVNQSV9SWF9GSUZPX0FMTU9TVF9GVUxMX1dBVEVSTUFSSyAweDg5NAorCisjZGVmaW5lIFNfQUxNT1NURlVMTCAgICAwCisjZGVmaW5lIE1fQUxNT1NURlVMTCAgICAweGZmZmYKKyNkZWZpbmUgVl9BTE1PU1RGVUxMKHgpICgoeCkgPDwgU19BTE1PU1RGVUxMKQorI2RlZmluZSBHX0FMTU9TVEZVTEwoeCkgKCgoeCkgPj4gU19BTE1PU1RGVUxMKSAmIE1fQUxNT1NURlVMTCkKKwogI2RlZmluZSBBX0VTUElfQ0FMRU5EQVJfTEVOR1RIIDB4ODk4CiAjZGVmaW5lIEFfUE9SVF9DT05GSUcgMHg4OWMKIAogI2RlZmluZSBTX1JYX05QT1JUUyAgICAwCisjZGVmaW5lIE1fUlhfTlBPUlRTICAgIDB4ZmYKICNkZWZpbmUgVl9SWF9OUE9SVFMoeCkgKCh4KSA8PCBTX1JYX05QT1JUUykKKyNkZWZpbmUgR19SWF9OUE9SVFMoeCkgKCgoeCkgPj4gU19SWF9OUE9SVFMpICYgTV9SWF9OUE9SVFMpCiAKICNkZWZpbmUgU19UWF9OUE9SVFMgICAgOAorI2RlZmluZSBNX1RYX05QT1JUUyAgICAweGZmCiAjZGVmaW5lIFZfVFhfTlBPUlRTKHgpICgoeCkgPDwgU19UWF9OUE9SVFMpCisjZGVmaW5lIEdfVFhfTlBPUlRTKHgpICgoKHgpID4+IFNfVFhfTlBPUlRTKSAmIE1fVFhfTlBPUlRTKQogCiAjZGVmaW5lIEFfRVNQSV9GSUZPX1NUQVRVU19FTkFCTEUgMHg4YTAKIApAQCAtMzMyLDEyICsxNDM2LDEyNCBAQAogI2RlZmluZSBWX1JYU1RBVFVTRU5BQkxFKHgpICgoeCkgPDwgU19SWFNUQVRVU0VOQUJMRSkKICNkZWZpbmUgRl9SWFNUQVRVU0VOQUJMRSAgICBWX1JYU1RBVFVTRU5BQkxFKDFVKQogCisjZGVmaW5lIFNfVFhEUk9QRU5BQkxFICAgIDEKKyNkZWZpbmUgVl9UWERST1BFTkFCTEUoeCkgKCh4KSA8PCBTX1RYRFJPUEVOQUJMRSkKKyNkZWZpbmUgRl9UWERST1BFTkFCTEUgICAgVl9UWERST1BFTkFCTEUoMVUpCisKKyNkZWZpbmUgU19SWEVORElBTk1PREUgICAgMgorI2RlZmluZSBWX1JYRU5ESUFOTU9ERSh4KSAoKHgpIDw8IFNfUlhFTkRJQU5NT0RFKQorI2RlZmluZSBGX1JYRU5ESUFOTU9ERSAgICBWX1JYRU5ESUFOTU9ERSgxVSkKKworI2RlZmluZSBTX1RYRU5ESUFOTU9ERSAgICAzCisjZGVmaW5lIFZfVFhFTkRJQU5NT0RFKHgpICgoeCkgPDwgU19UWEVORElBTk1PREUpCisjZGVmaW5lIEZfVFhFTkRJQU5NT0RFICAgIFZfVFhFTkRJQU5NT0RFKDFVKQorCiAjZGVmaW5lIFNfSU5URUwxMDEwTU9ERSAgICA0CiAjZGVmaW5lIFZfSU5URUwxMDEwTU9ERSh4KSAoKHgpIDw8IFNfSU5URUwxMDEwTU9ERSkKICNkZWZpbmUgRl9JTlRFTDEwMTBNT0RFICAgIFZfSU5URUwxMDEwTU9ERSgxVSkKIAogI2RlZmluZSBBX0VTUElfTUFYQlVSU1QxX01BWEJVUlNUMiAweDhhOAogI2RlZmluZSBBX0VTUElfVFJBSU4gMHg4YWMKKworI2RlZmluZSBTX01BWFRSQUlOQUxQSEEgICAgMAorI2RlZmluZSBNX01BWFRSQUlOQUxQSEEgICAgMHhmZmZmCisjZGVmaW5lIFZfTUFYVFJBSU5BTFBIQSh4KSAoKHgpIDw8IFNfTUFYVFJBSU5BTFBIQSkKKyNkZWZpbmUgR19NQVhUUkFJTkFMUEhBKHgpICgoKHgpID4+IFNfTUFYVFJBSU5BTFBIQSkgJiBNX01BWFRSQUlOQUxQSEEpCisKKyNkZWZpbmUgU19NQVhUUkFJTkRBVEEgICAgMTYKKyNkZWZpbmUgTV9NQVhUUkFJTkRBVEEgICAgMHhmZmZmCisjZGVmaW5lIFZfTUFYVFJBSU5EQVRBKHgpICgoeCkgPDwgU19NQVhUUkFJTkRBVEEpCisjZGVmaW5lIEdfTUFYVFJBSU5EQVRBKHgpICgoKHgpID4+IFNfTUFYVFJBSU5EQVRBKSAmIE1fTUFYVFJBSU5EQVRBKQorCisjZGVmaW5lIEFfUkFNX1NUQVRVUyAweDhiMAorCisjZGVmaW5lIFNfUlhGSUZPUEFSSVRZRVJST1IgICAgMAorI2RlZmluZSBNX1JYRklGT1BBUklUWUVSUk9SICAgIDB4M2ZmCisjZGVmaW5lIFZfUlhGSUZPUEFSSVRZRVJST1IoeCkgKCh4KSA8PCBTX1JYRklGT1BBUklUWUVSUk9SKQorI2RlZmluZSBHX1JYRklGT1BBUklUWUVSUk9SKHgpICgoKHgpID4+IFNfUlhGSUZPUEFSSVRZRVJST1IpICYgTV9SWEZJRk9QQVJJVFlFUlJPUikKKworI2RlZmluZSBTX1RYRklGT1BBUklUWUVSUk9SICAgIDEwCisjZGVmaW5lIE1fVFhGSUZPUEFSSVRZRVJST1IgICAgMHgzZmYKKyNkZWZpbmUgVl9UWEZJRk9QQVJJVFlFUlJPUih4KSAoKHgpIDw8IFNfVFhGSUZPUEFSSVRZRVJST1IpCisjZGVmaW5lIEdfVFhGSUZPUEFSSVRZRVJST1IoeCkgKCgoeCkgPj4gU19UWEZJRk9QQVJJVFlFUlJPUikgJiBNX1RYRklGT1BBUklUWUVSUk9SKQorCisjZGVmaW5lIFNfUlhGSUZPT1ZFUkZMT1cgICAgMjAKKyNkZWZpbmUgTV9SWEZJRk9PVkVSRkxPVyAgICAweDNmZgorI2RlZmluZSBWX1JYRklGT09WRVJGTE9XKHgpICgoeCkgPDwgU19SWEZJRk9PVkVSRkxPVykKKyNkZWZpbmUgR19SWEZJRk9PVkVSRkxPVyh4KSAoKCh4KSA+PiBTX1JYRklGT09WRVJGTE9XKSAmIE1fUlhGSUZPT1ZFUkZMT1cpCisKKyNkZWZpbmUgQV9UWF9EUk9QX0NPVU5UMCAweDhiNAorCisjZGVmaW5lIFNfVFhQT1JUMERST1BDTlQgICAgMAorI2RlZmluZSBNX1RYUE9SVDBEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1RYUE9SVDBEUk9QQ05UKHgpICgoeCkgPDwgU19UWFBPUlQwRFJPUENOVCkKKyNkZWZpbmUgR19UWFBPUlQwRFJPUENOVCh4KSAoKCh4KSA+PiBTX1RYUE9SVDBEUk9QQ05UKSAmIE1fVFhQT1JUMERST1BDTlQpCisKKyNkZWZpbmUgU19UWFBPUlQxRFJPUENOVCAgICAxNgorI2RlZmluZSBNX1RYUE9SVDFEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1RYUE9SVDFEUk9QQ05UKHgpICgoeCkgPDwgU19UWFBPUlQxRFJPUENOVCkKKyNkZWZpbmUgR19UWFBPUlQxRFJPUENOVCh4KSAoKCh4KSA+PiBTX1RYUE9SVDFEUk9QQ05UKSAmIE1fVFhQT1JUMURST1BDTlQpCisKKyNkZWZpbmUgQV9UWF9EUk9QX0NPVU5UMSAweDhiOAorCisjZGVmaW5lIFNfVFhQT1JUMkRST1BDTlQgICAgMAorI2RlZmluZSBNX1RYUE9SVDJEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1RYUE9SVDJEUk9QQ05UKHgpICgoeCkgPDwgU19UWFBPUlQyRFJPUENOVCkKKyNkZWZpbmUgR19UWFBPUlQyRFJPUENOVCh4KSAoKCh4KSA+PiBTX1RYUE9SVDJEUk9QQ05UKSAmIE1fVFhQT1JUMkRST1BDTlQpCisKKyNkZWZpbmUgU19UWFBPUlQzRFJPUENOVCAgICAxNgorI2RlZmluZSBNX1RYUE9SVDNEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1RYUE9SVDNEUk9QQ05UKHgpICgoeCkgPDwgU19UWFBPUlQzRFJPUENOVCkKKyNkZWZpbmUgR19UWFBPUlQzRFJPUENOVCh4KSAoKCh4KSA+PiBTX1RYUE9SVDNEUk9QQ05UKSAmIE1fVFhQT1JUM0RST1BDTlQpCisKKyNkZWZpbmUgQV9SWF9EUk9QX0NPVU5UMCAweDhiYworCisjZGVmaW5lIFNfUlhQT1JUMERST1BDTlQgICAgMAorI2RlZmluZSBNX1JYUE9SVDBEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1JYUE9SVDBEUk9QQ05UKHgpICgoeCkgPDwgU19SWFBPUlQwRFJPUENOVCkKKyNkZWZpbmUgR19SWFBPUlQwRFJPUENOVCh4KSAoKCh4KSA+PiBTX1JYUE9SVDBEUk9QQ05UKSAmIE1fUlhQT1JUMERST1BDTlQpCisKKyNkZWZpbmUgU19SWFBPUlQxRFJPUENOVCAgICAxNgorI2RlZmluZSBNX1JYUE9SVDFEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1JYUE9SVDFEUk9QQ05UKHgpICgoeCkgPDwgU19SWFBPUlQxRFJPUENOVCkKKyNkZWZpbmUgR19SWFBPUlQxRFJPUENOVCh4KSAoKCh4KSA+PiBTX1JYUE9SVDFEUk9QQ05UKSAmIE1fUlhQT1JUMURST1BDTlQpCisKKyNkZWZpbmUgQV9SWF9EUk9QX0NPVU5UMSAweDhjMAorCisjZGVmaW5lIFNfUlhQT1JUMkRST1BDTlQgICAgMAorI2RlZmluZSBNX1JYUE9SVDJEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1JYUE9SVDJEUk9QQ05UKHgpICgoeCkgPDwgU19SWFBPUlQyRFJPUENOVCkKKyNkZWZpbmUgR19SWFBPUlQyRFJPUENOVCh4KSAoKCh4KSA+PiBTX1JYUE9SVDJEUk9QQ05UKSAmIE1fUlhQT1JUMkRST1BDTlQpCisKKyNkZWZpbmUgU19SWFBPUlQzRFJPUENOVCAgICAxNgorI2RlZmluZSBNX1JYUE9SVDNEUk9QQ05UICAgIDB4ZmZmZgorI2RlZmluZSBWX1JYUE9SVDNEUk9QQ05UKHgpICgoeCkgPDwgU19SWFBPUlQzRFJPUENOVCkKKyNkZWZpbmUgR19SWFBPUlQzRFJPUENOVCh4KSAoKCh4KSA+PiBTX1JYUE9SVDNEUk9QQ05UKSAmIE1fUlhQT1JUM0RST1BDTlQpCisKKyNkZWZpbmUgQV9ESVA0X0VSUk9SX0NPVU5UIDB4OGM0CisKKyNkZWZpbmUgU19ESVA0RVJST1JDTlQgICAgMAorI2RlZmluZSBNX0RJUDRFUlJPUkNOVCAgICAweGZmZgorI2RlZmluZSBWX0RJUDRFUlJPUkNOVCh4KSAoKHgpIDw8IFNfRElQNEVSUk9SQ05UKQorI2RlZmluZSBHX0RJUDRFUlJPUkNOVCh4KSAoKCh4KSA+PiBTX0RJUDRFUlJPUkNOVCkgJiBNX0RJUDRFUlJPUkNOVCkKKworI2RlZmluZSBTX0RJUDRFUlJPUkNOVFNIQURPVyAgICAxMgorI2RlZmluZSBNX0RJUDRFUlJPUkNOVFNIQURPVyAgICAweGZmZgorI2RlZmluZSBWX0RJUDRFUlJPUkNOVFNIQURPVyh4KSAoKHgpIDw8IFNfRElQNEVSUk9SQ05UU0hBRE9XKQorI2RlZmluZSBHX0RJUDRFUlJPUkNOVFNIQURPVyh4KSAoKCh4KSA+PiBTX0RJUDRFUlJPUkNOVFNIQURPVykgJiBNX0RJUDRFUlJPUkNOVFNIQURPVykKKworI2RlZmluZSBTX1RSSUNOX1JYX1RSQUlOX0VSUiAgICAyNAorI2RlZmluZSBWX1RSSUNOX1JYX1RSQUlOX0VSUih4KSAoKHgpIDw8IFNfVFJJQ05fUlhfVFJBSU5fRVJSKQorI2RlZmluZSBGX1RSSUNOX1JYX1RSQUlOX0VSUiAgICBWX1RSSUNOX1JYX1RSQUlOX0VSUigxVSkKKworI2RlZmluZSBTX1RSSUNOX1JYX1RSQUlOSU5HICAgIDI1CisjZGVmaW5lIFZfVFJJQ05fUlhfVFJBSU5JTkcoeCkgKCh4KSA8PCBTX1RSSUNOX1JYX1RSQUlOSU5HKQorI2RlZmluZSBGX1RSSUNOX1JYX1RSQUlOSU5HICAgIFZfVFJJQ05fUlhfVFJBSU5JTkcoMVUpCisKKyNkZWZpbmUgU19UUklDTl9SWF9UUkFJTl9PSyAgICAyNgorI2RlZmluZSBWX1RSSUNOX1JYX1RSQUlOX09LKHgpICgoeCkgPDwgU19UUklDTl9SWF9UUkFJTl9PSykKKyNkZWZpbmUgRl9UUklDTl9SWF9UUkFJTl9PSyAgICBWX1RSSUNOX1JYX1RSQUlOX09LKDFVKQorCiAjZGVmaW5lIEFfRVNQSV9JTlRSX1NUQVRVUyAweDhjOAogCiAjZGVmaW5lIFNfRElQMlBBUklUWUVSUiAgICA1CkBAIC0zNDcsMTkgKzE1NjMsNTYgQEAKICNkZWZpbmUgQV9FU1BJX0lOVFJfRU5BQkxFIDB4OGNjCiAjZGVmaW5lIEFfUlhfRFJPUF9USFJFU0hPTEQgMHg4ZDAKICNkZWZpbmUgQV9FU1BJX1JYX1JFU0VUIDB4OGVjCisKKyNkZWZpbmUgU19FU1BJX1JYX0xOS19SU1QgICAgMAorI2RlZmluZSBWX0VTUElfUlhfTE5LX1JTVCh4KSAoKHgpIDw8IFNfRVNQSV9SWF9MTktfUlNUKQorI2RlZmluZSBGX0VTUElfUlhfTE5LX1JTVCAgICBWX0VTUElfUlhfTE5LX1JTVCgxVSkKKworI2RlZmluZSBTX0VTUElfUlhfQ09SRV9SU1QgICAgMQorI2RlZmluZSBWX0VTUElfUlhfQ09SRV9SU1QoeCkgKCh4KSA8PCBTX0VTUElfUlhfQ09SRV9SU1QpCisjZGVmaW5lIEZfRVNQSV9SWF9DT1JFX1JTVCAgICBWX0VTUElfUlhfQ09SRV9SU1QoMVUpCisKKyNkZWZpbmUgU19SWF9DTEtfU1RBVFVTICAgIDIKKyNkZWZpbmUgVl9SWF9DTEtfU1RBVFVTKHgpICgoeCkgPDwgU19SWF9DTEtfU1RBVFVTKQorI2RlZmluZSBGX1JYX0NMS19TVEFUVVMgICAgVl9SWF9DTEtfU1RBVFVTKDFVKQorCiAjZGVmaW5lIEFfRVNQSV9NSVNDX0NPTlRST0wgMHg4ZjAKIAogI2RlZmluZSBTX09VVF9PRl9TWU5DX0NPVU5UICAgIDAKKyNkZWZpbmUgTV9PVVRfT0ZfU1lOQ19DT1VOVCAgICAweGYKICNkZWZpbmUgVl9PVVRfT0ZfU1lOQ19DT1VOVCh4KSAoKHgpIDw8IFNfT1VUX09GX1NZTkNfQ09VTlQpCisjZGVmaW5lIEdfT1VUX09GX1NZTkNfQ09VTlQoeCkgKCgoeCkgPj4gU19PVVRfT0ZfU1lOQ19DT1VOVCkgJiBNX09VVF9PRl9TWU5DX0NPVU5UKQorCisjZGVmaW5lIFNfRElQMl9DT1VOVF9NT0RFX0VOQUJMRSAgICA0CisjZGVmaW5lIFZfRElQMl9DT1VOVF9NT0RFX0VOQUJMRSh4KSAoKHgpIDw8IFNfRElQMl9DT1VOVF9NT0RFX0VOQUJMRSkKKyNkZWZpbmUgRl9ESVAyX0NPVU5UX01PREVfRU5BQkxFICAgIFZfRElQMl9DT1VOVF9NT0RFX0VOQUJMRSgxVSkKIAogI2RlZmluZSBTX0RJUDJfUEFSSVRZX0VSUl9USFJFUyAgICA1CisjZGVmaW5lIE1fRElQMl9QQVJJVFlfRVJSX1RIUkVTICAgIDB4ZgogI2RlZmluZSBWX0RJUDJfUEFSSVRZX0VSUl9USFJFUyh4KSAoKHgpIDw8IFNfRElQMl9QQVJJVFlfRVJSX1RIUkVTKQorI2RlZmluZSBHX0RJUDJfUEFSSVRZX0VSUl9USFJFUyh4KSAoKCh4KSA+PiBTX0RJUDJfUEFSSVRZX0VSUl9USFJFUykgJiBNX0RJUDJfUEFSSVRZX0VSUl9USFJFUykKIAogI2RlZmluZSBTX0RJUDRfVEhSRVMgICAgOQorI2RlZmluZSBNX0RJUDRfVEhSRVMgICAgMHhmZmYKICNkZWZpbmUgVl9ESVA0X1RIUkVTKHgpICgoeCkgPDwgU19ESVA0X1RIUkVTKQorI2RlZmluZSBHX0RJUDRfVEhSRVMoeCkgKCgoeCkgPj4gU19ESVA0X1RIUkVTKSAmIE1fRElQNF9USFJFUykKKworI2RlZmluZSBTX0RJUDRfVEhSRVNfRU5BQkxFICAgIDIxCisjZGVmaW5lIFZfRElQNF9USFJFU19FTkFCTEUoeCkgKCh4KSA8PCBTX0RJUDRfVEhSRVNfRU5BQkxFKQorI2RlZmluZSBGX0RJUDRfVEhSRVNfRU5BQkxFICAgIFZfRElQNF9USFJFU19FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19GT1JDRV9ESVNBQkxFX1NUQVRVUyAgICAyMgorI2RlZmluZSBWX0ZPUkNFX0RJU0FCTEVfU1RBVFVTKHgpICgoeCkgPDwgU19GT1JDRV9ESVNBQkxFX1NUQVRVUykKKyNkZWZpbmUgRl9GT1JDRV9ESVNBQkxFX1NUQVRVUyAgICBWX0ZPUkNFX0RJU0FCTEVfU1RBVFVTKDFVKQorCisjZGVmaW5lIFNfRFlOQU1JQ19ERVNLRVcgICAgMjMKKyNkZWZpbmUgVl9EWU5BTUlDX0RFU0tFVyh4KSAoKHgpIDw8IFNfRFlOQU1JQ19ERVNLRVcpCisjZGVmaW5lIEZfRFlOQU1JQ19ERVNLRVcgICAgVl9EWU5BTUlDX0RFU0tFVygxVSkKIAogI2RlZmluZSBTX01PTklUT1JFRF9QT1JUX05VTSAgICAyNQorI2RlZmluZSBNX01PTklUT1JFRF9QT1JUX05VTSAgICAweDMKICNkZWZpbmUgVl9NT05JVE9SRURfUE9SVF9OVU0oeCkgKCh4KSA8PCBTX01PTklUT1JFRF9QT1JUX05VTSkKKyNkZWZpbmUgR19NT05JVE9SRURfUE9SVF9OVU0oeCkgKCgoeCkgPj4gU19NT05JVE9SRURfUE9SVF9OVU0pICYgTV9NT05JVE9SRURfUE9SVF9OVU0pCiAKICNkZWZpbmUgU19NT05JVE9SRURfRElSRUNUSU9OICAgIDI3CiAjZGVmaW5lIFZfTU9OSVRPUkVEX0RJUkVDVElPTih4KSAoKHgpIDw8IFNfTU9OSVRPUkVEX0RJUkVDVElPTikKQEAgLTM3MCwzMyArMTYyMywxMjUgQEAKICNkZWZpbmUgRl9NT05JVE9SRURfSU5URVJGQUNFICAgIFZfTU9OSVRPUkVEX0lOVEVSRkFDRSgxVSkKIAogI2RlZmluZSBBX0VTUElfRElQMl9FUlJfQ09VTlQgMHg4ZjQKKworI2RlZmluZSBTX0RJUDJfRVJSX0NOVCAgICAwCisjZGVmaW5lIE1fRElQMl9FUlJfQ05UICAgIDB4ZgorI2RlZmluZSBWX0RJUDJfRVJSX0NOVCh4KSAoKHgpIDw8IFNfRElQMl9FUlJfQ05UKQorI2RlZmluZSBHX0RJUDJfRVJSX0NOVCh4KSAoKCh4KSA+PiBTX0RJUDJfRVJSX0NOVCkgJiBNX0RJUDJfRVJSX0NOVCkKKwogI2RlZmluZSBBX0VTUElfQ01EX0FERFIgMHg4ZjgKIAogI2RlZmluZSBTX1dSSVRFX0RBVEEgICAgMAorI2RlZmluZSBNX1dSSVRFX0RBVEEgICAgMHhmZgogI2RlZmluZSBWX1dSSVRFX0RBVEEoeCkgKCh4KSA8PCBTX1dSSVRFX0RBVEEpCisjZGVmaW5lIEdfV1JJVEVfREFUQSh4KSAoKCh4KSA+PiBTX1dSSVRFX0RBVEEpICYgTV9XUklURV9EQVRBKQogCiAjZGVmaW5lIFNfUkVHSVNURVJfT0ZGU0VUICAgIDgKKyNkZWZpbmUgTV9SRUdJU1RFUl9PRkZTRVQgICAgMHhmCiAjZGVmaW5lIFZfUkVHSVNURVJfT0ZGU0VUKHgpICgoeCkgPDwgU19SRUdJU1RFUl9PRkZTRVQpCisjZGVmaW5lIEdfUkVHSVNURVJfT0ZGU0VUKHgpICgoKHgpID4+IFNfUkVHSVNURVJfT0ZGU0VUKSAmIE1fUkVHSVNURVJfT0ZGU0VUKQogCiAjZGVmaW5lIFNfQ0hBTk5FTF9BRERSICAgIDEyCisjZGVmaW5lIE1fQ0hBTk5FTF9BRERSICAgIDB4ZgogI2RlZmluZSBWX0NIQU5ORUxfQUREUih4KSAoKHgpIDw8IFNfQ0hBTk5FTF9BRERSKQorI2RlZmluZSBHX0NIQU5ORUxfQUREUih4KSAoKCh4KSA+PiBTX0NIQU5ORUxfQUREUikgJiBNX0NIQU5ORUxfQUREUikKIAogI2RlZmluZSBTX01PRFVMRV9BRERSICAgIDE2CisjZGVmaW5lIE1fTU9EVUxFX0FERFIgICAgMHgzCiAjZGVmaW5lIFZfTU9EVUxFX0FERFIoeCkgKCh4KSA8PCBTX01PRFVMRV9BRERSKQorI2RlZmluZSBHX01PRFVMRV9BRERSKHgpICgoKHgpID4+IFNfTU9EVUxFX0FERFIpICYgTV9NT0RVTEVfQUREUikKIAogI2RlZmluZSBTX0JVTkRMRV9BRERSICAgIDIwCisjZGVmaW5lIE1fQlVORExFX0FERFIgICAgMHgzCiAjZGVmaW5lIFZfQlVORExFX0FERFIoeCkgKCh4KSA8PCBTX0JVTkRMRV9BRERSKQorI2RlZmluZSBHX0JVTkRMRV9BRERSKHgpICgoKHgpID4+IFNfQlVORExFX0FERFIpICYgTV9CVU5ETEVfQUREUikKIAogI2RlZmluZSBTX1NQSTRfQ09NTUFORCAgICAyNAorI2RlZmluZSBNX1NQSTRfQ09NTUFORCAgICAweGZmCiAjZGVmaW5lIFZfU1BJNF9DT01NQU5EKHgpICgoeCkgPDwgU19TUEk0X0NPTU1BTkQpCisjZGVmaW5lIEdfU1BJNF9DT01NQU5EKHgpICgoKHgpID4+IFNfU1BJNF9DT01NQU5EKSAmIE1fU1BJNF9DT01NQU5EKQogCiAjZGVmaW5lIEFfRVNQSV9HT1NUQVQgMHg4ZmMKKworI2RlZmluZSBTX1JFQURfREFUQSAgICAwCisjZGVmaW5lIE1fUkVBRF9EQVRBICAgIDB4ZmYKKyNkZWZpbmUgVl9SRUFEX0RBVEEoeCkgKCh4KSA8PCBTX1JFQURfREFUQSkKKyNkZWZpbmUgR19SRUFEX0RBVEEoeCkgKCgoeCkgPj4gU19SRUFEX0RBVEEpICYgTV9SRUFEX0RBVEEpCisKICNkZWZpbmUgU19FU1BJX0NNRF9CVVNZICAgIDgKICNkZWZpbmUgVl9FU1BJX0NNRF9CVVNZKHgpICgoeCkgPDwgU19FU1BJX0NNRF9CVVNZKQogI2RlZmluZSBGX0VTUElfQ01EX0JVU1kgICAgVl9FU1BJX0NNRF9CVVNZKDFVKQogCi0vKiBQTCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU19FUlJPUl9BQ0sgICAgOQorI2RlZmluZSBWX0VSUk9SX0FDSyh4KSAoKHgpIDw8IFNfRVJST1JfQUNLKQorI2RlZmluZSBGX0VSUk9SX0FDSyAgICBWX0VSUk9SX0FDSygxVSkKIAorI2RlZmluZSBTX1VOTUFQUEVEX0VSUiAgICAxMAorI2RlZmluZSBWX1VOTUFQUEVEX0VSUih4KSAoKHgpIDw8IFNfVU5NQVBQRURfRVJSKQorI2RlZmluZSBGX1VOTUFQUEVEX0VSUiAgICBWX1VOTUFQUEVEX0VSUigxVSkKKworI2RlZmluZSBTX1RSQU5TQUNUSU9OX1RJTUVSICAgIDE2CisjZGVmaW5lIE1fVFJBTlNBQ1RJT05fVElNRVIgICAgMHhmZgorI2RlZmluZSBWX1RSQU5TQUNUSU9OX1RJTUVSKHgpICgoeCkgPDwgU19UUkFOU0FDVElPTl9USU1FUikKKyNkZWZpbmUgR19UUkFOU0FDVElPTl9USU1FUih4KSAoKCh4KSA+PiBTX1RSQU5TQUNUSU9OX1RJTUVSKSAmIE1fVFJBTlNBQ1RJT05fVElNRVIpCisKKworLyogVUxQIHJlZ2lzdGVycyAqLworI2RlZmluZSBBX1VMUF9VTElNSVQgMHg5ODAKKyNkZWZpbmUgQV9VTFBfVEFHTUFTSyAweDk4NAorI2RlZmluZSBBX1VMUF9IUkVHX0lOREVYIDB4OTg4CisjZGVmaW5lIEFfVUxQX0hSRUdfREFUQSAweDk4YworI2RlZmluZSBBX1VMUF9JTlRfRU5BQkxFIDB4OTkwCisjZGVmaW5lIEFfVUxQX0lOVF9DQVVTRSAweDk5NAorCisjZGVmaW5lIFNfSFJFR19QQVJfRVJSICAgIDAKKyNkZWZpbmUgVl9IUkVHX1BBUl9FUlIoeCkgKCh4KSA8PCBTX0hSRUdfUEFSX0VSUikKKyNkZWZpbmUgRl9IUkVHX1BBUl9FUlIgICAgVl9IUkVHX1BBUl9FUlIoMVUpCisKKyNkZWZpbmUgU19FR1JTX0RBVEFfUEFSX0VSUiAgICAxCisjZGVmaW5lIFZfRUdSU19EQVRBX1BBUl9FUlIoeCkgKCh4KSA8PCBTX0VHUlNfREFUQV9QQVJfRVJSKQorI2RlZmluZSBGX0VHUlNfREFUQV9QQVJfRVJSICAgIFZfRUdSU19EQVRBX1BBUl9FUlIoMVUpCisKKyNkZWZpbmUgU19JTkdSU19EQVRBX1BBUl9FUlIgICAgMgorI2RlZmluZSBWX0lOR1JTX0RBVEFfUEFSX0VSUih4KSAoKHgpIDw8IFNfSU5HUlNfREFUQV9QQVJfRVJSKQorI2RlZmluZSBGX0lOR1JTX0RBVEFfUEFSX0VSUiAgICBWX0lOR1JTX0RBVEFfUEFSX0VSUigxVSkKKworI2RlZmluZSBTX1BNX0lOVFIgICAgMworI2RlZmluZSBWX1BNX0lOVFIoeCkgKCh4KSA8PCBTX1BNX0lOVFIpCisjZGVmaW5lIEZfUE1fSU5UUiAgICBWX1BNX0lOVFIoMVUpCisKKyNkZWZpbmUgU19QTV9FMkNfU1lOQ19FUlIgICAgNAorI2RlZmluZSBWX1BNX0UyQ19TWU5DX0VSUih4KSAoKHgpIDw8IFNfUE1fRTJDX1NZTkNfRVJSKQorI2RlZmluZSBGX1BNX0UyQ19TWU5DX0VSUiAgICBWX1BNX0UyQ19TWU5DX0VSUigxVSkKKworI2RlZmluZSBTX1BNX0MyRV9TWU5DX0VSUiAgICA1CisjZGVmaW5lIFZfUE1fQzJFX1NZTkNfRVJSKHgpICgoeCkgPDwgU19QTV9DMkVfU1lOQ19FUlIpCisjZGVmaW5lIEZfUE1fQzJFX1NZTkNfRVJSICAgIFZfUE1fQzJFX1NZTkNfRVJSKDFVKQorCisjZGVmaW5lIFNfUE1fRTJDX0VNUFRZX0VSUiAgICA2CisjZGVmaW5lIFZfUE1fRTJDX0VNUFRZX0VSUih4KSAoKHgpIDw8IFNfUE1fRTJDX0VNUFRZX0VSUikKKyNkZWZpbmUgRl9QTV9FMkNfRU1QVFlfRVJSICAgIFZfUE1fRTJDX0VNUFRZX0VSUigxVSkKKworI2RlZmluZSBTX1BNX0MyRV9FTVBUWV9FUlIgICAgNworI2RlZmluZSBWX1BNX0MyRV9FTVBUWV9FUlIoeCkgKCh4KSA8PCBTX1BNX0MyRV9FTVBUWV9FUlIpCisjZGVmaW5lIEZfUE1fQzJFX0VNUFRZX0VSUiAgICBWX1BNX0MyRV9FTVBUWV9FUlIoMVUpCisKKyNkZWZpbmUgU19QTV9QQVJfRVJSICAgIDgKKyNkZWZpbmUgTV9QTV9QQVJfRVJSICAgIDB4ZmZmZgorI2RlZmluZSBWX1BNX1BBUl9FUlIoeCkgKCh4KSA8PCBTX1BNX1BBUl9FUlIpCisjZGVmaW5lIEdfUE1fUEFSX0VSUih4KSAoKCh4KSA+PiBTX1BNX1BBUl9FUlIpICYgTV9QTV9QQVJfRVJSKQorCisjZGVmaW5lIFNfUE1fRTJDX1dSVF9GVUxMICAgIDI0CisjZGVmaW5lIFZfUE1fRTJDX1dSVF9GVUxMKHgpICgoeCkgPDwgU19QTV9FMkNfV1JUX0ZVTEwpCisjZGVmaW5lIEZfUE1fRTJDX1dSVF9GVUxMICAgIFZfUE1fRTJDX1dSVF9GVUxMKDFVKQorCisjZGVmaW5lIFNfUE1fQzJFX1dSVF9GVUxMICAgIDI1CisjZGVmaW5lIFZfUE1fQzJFX1dSVF9GVUxMKHgpICgoeCkgPDwgU19QTV9DMkVfV1JUX0ZVTEwpCisjZGVmaW5lIEZfUE1fQzJFX1dSVF9GVUxMICAgIFZfUE1fQzJFX1dSVF9GVUxMKDFVKQorCisjZGVmaW5lIEFfVUxQX1BJT19DVFJMIDB4OTk4CisKKy8qIFBMIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBX1BMX0VOQUJMRSAweGEwMAogCiAjZGVmaW5lIFNfUExfSU5UUl9TR0VfRVJSICAgIDAKQEAgLTQwNywxNCArMTc1MiwzOCBAQAogI2RlZmluZSBWX1BMX0lOVFJfU0dFX0RBVEEoeCkgKCh4KSA8PCBTX1BMX0lOVFJfU0dFX0RBVEEpCiAjZGVmaW5lIEZfUExfSU5UUl9TR0VfREFUQSAgICBWX1BMX0lOVFJfU0dFX0RBVEEoMVUpCiAKKyNkZWZpbmUgU19QTF9JTlRSX01DMyAgICAyCisjZGVmaW5lIFZfUExfSU5UUl9NQzMoeCkgKCh4KSA8PCBTX1BMX0lOVFJfTUMzKQorI2RlZmluZSBGX1BMX0lOVFJfTUMzICAgIFZfUExfSU5UUl9NQzMoMVUpCisKKyNkZWZpbmUgU19QTF9JTlRSX01DNCAgICAzCisjZGVmaW5lIFZfUExfSU5UUl9NQzQoeCkgKCh4KSA8PCBTX1BMX0lOVFJfTUM0KQorI2RlZmluZSBGX1BMX0lOVFJfTUM0ICAgIFZfUExfSU5UUl9NQzQoMVUpCisKKyNkZWZpbmUgU19QTF9JTlRSX01DNSAgICA0CisjZGVmaW5lIFZfUExfSU5UUl9NQzUoeCkgKCh4KSA8PCBTX1BMX0lOVFJfTUM1KQorI2RlZmluZSBGX1BMX0lOVFJfTUM1ICAgIFZfUExfSU5UUl9NQzUoMVUpCisKKyNkZWZpbmUgU19QTF9JTlRSX1JBVCAgICA1CisjZGVmaW5lIFZfUExfSU5UUl9SQVQoeCkgKCh4KSA8PCBTX1BMX0lOVFJfUkFUKQorI2RlZmluZSBGX1BMX0lOVFJfUkFUICAgIFZfUExfSU5UUl9SQVQoMVUpCisKICNkZWZpbmUgU19QTF9JTlRSX1RQICAgIDYKICNkZWZpbmUgVl9QTF9JTlRSX1RQKHgpICgoeCkgPDwgU19QTF9JTlRSX1RQKQogI2RlZmluZSBGX1BMX0lOVFJfVFAgICAgVl9QTF9JTlRSX1RQKDFVKQogCisjZGVmaW5lIFNfUExfSU5UUl9VTFAgICAgNworI2RlZmluZSBWX1BMX0lOVFJfVUxQKHgpICgoeCkgPDwgU19QTF9JTlRSX1VMUCkKKyNkZWZpbmUgRl9QTF9JTlRSX1VMUCAgICBWX1BMX0lOVFJfVUxQKDFVKQorCiAjZGVmaW5lIFNfUExfSU5UUl9FU1BJICAgIDgKICNkZWZpbmUgVl9QTF9JTlRSX0VTUEkoeCkgKCh4KSA8PCBTX1BMX0lOVFJfRVNQSSkKICNkZWZpbmUgRl9QTF9JTlRSX0VTUEkgICAgVl9QTF9JTlRSX0VTUEkoMVUpCiAKKyNkZWZpbmUgU19QTF9JTlRSX0NTUEkgICAgOQorI2RlZmluZSBWX1BMX0lOVFJfQ1NQSSh4KSAoKHgpIDw8IFNfUExfSU5UUl9DU1BJKQorI2RlZmluZSBGX1BMX0lOVFJfQ1NQSSAgICBWX1BMX0lOVFJfQ1NQSSgxVSkKKwogI2RlZmluZSBTX1BMX0lOVFJfUENJWCAgICAxMAogI2RlZmluZSBWX1BMX0lOVFJfUENJWCh4KSAoKHgpIDw8IFNfUExfSU5UUl9QQ0lYKQogI2RlZmluZSBGX1BMX0lOVFJfUENJWCAgICBWX1BMX0lOVFJfUENJWCgxVSkKQEAgLTQyNiw0MyArMTc5NSwzNzQgQEAKICNkZWZpbmUgQV9QTF9DQVVTRSAweGEwNAogCiAvKiBNQzUgcmVnaXN0ZXJzICovCi0KICNkZWZpbmUgQV9NQzVfQ09ORklHIDB4YzA0CiAKKyNkZWZpbmUgU19NT0RFICAgIDAKKyNkZWZpbmUgVl9NT0RFKHgpICgoeCkgPDwgU19NT0RFKQorI2RlZmluZSBGX01PREUgICAgVl9NT0RFKDFVKQorCiAjZGVmaW5lIFNfVENBTV9SRVNFVCAgICAxCiAjZGVmaW5lIFZfVENBTV9SRVNFVCh4KSAoKHgpIDw8IFNfVENBTV9SRVNFVCkKICNkZWZpbmUgRl9UQ0FNX1JFU0VUICAgIFZfVENBTV9SRVNFVCgxVSkKIAorI2RlZmluZSBTX1RDQU1fUkVBRFkgICAgMgorI2RlZmluZSBWX1RDQU1fUkVBRFkoeCkgKCh4KSA8PCBTX1RDQU1fUkVBRFkpCisjZGVmaW5lIEZfVENBTV9SRUFEWSAgICBWX1RDQU1fUkVBRFkoMVUpCisKKyNkZWZpbmUgU19EQkdJX0VOQUJMRSAgICA0CisjZGVmaW5lIFZfREJHSV9FTkFCTEUoeCkgKCh4KSA8PCBTX0RCR0lfRU5BQkxFKQorI2RlZmluZSBGX0RCR0lfRU5BQkxFICAgIFZfREJHSV9FTkFCTEUoMVUpCisKICNkZWZpbmUgU19NX0JVU19FTkFCTEUgICAgNQogI2RlZmluZSBWX01fQlVTX0VOQUJMRSh4KSAoKHgpIDw8IFNfTV9CVVNfRU5BQkxFKQogI2RlZmluZSBGX01fQlVTX0VOQUJMRSAgICBWX01fQlVTX0VOQUJMRSgxVSkKIAotLyogUENJQ0ZHIHJlZ2lzdGVycyAqLworI2RlZmluZSBTX1BBUklUWV9FTkFCTEUgICAgNgorI2RlZmluZSBWX1BBUklUWV9FTkFCTEUoeCkgKCh4KSA8PCBTX1BBUklUWV9FTkFCTEUpCisjZGVmaW5lIEZfUEFSSVRZX0VOQUJMRSAgICBWX1BBUklUWV9FTkFCTEUoMVUpCiAKKyNkZWZpbmUgU19TWU5fSVNTVUVfTU9ERSAgICA3CisjZGVmaW5lIE1fU1lOX0lTU1VFX01PREUgICAgMHgzCisjZGVmaW5lIFZfU1lOX0lTU1VFX01PREUoeCkgKCh4KSA8PCBTX1NZTl9JU1NVRV9NT0RFKQorI2RlZmluZSBHX1NZTl9JU1NVRV9NT0RFKHgpICgoKHgpID4+IFNfU1lOX0lTU1VFX01PREUpICYgTV9TWU5fSVNTVUVfTU9ERSkKKworI2RlZmluZSBTX0JVSUxEICAgIDE2CisjZGVmaW5lIFZfQlVJTEQoeCkgKCh4KSA8PCBTX0JVSUxEKQorI2RlZmluZSBGX0JVSUxEICAgIFZfQlVJTEQoMVUpCisKKyNkZWZpbmUgU19DT01QUkVTU0lPTl9FTkFCTEUgICAgMTcKKyNkZWZpbmUgVl9DT01QUkVTU0lPTl9FTkFCTEUoeCkgKCh4KSA8PCBTX0NPTVBSRVNTSU9OX0VOQUJMRSkKKyNkZWZpbmUgRl9DT01QUkVTU0lPTl9FTkFCTEUgICAgVl9DT01QUkVTU0lPTl9FTkFCTEUoMVUpCisKKyNkZWZpbmUgU19OVU1fTElQICAgIDE4CisjZGVmaW5lIE1fTlVNX0xJUCAgICAweDNmCisjZGVmaW5lIFZfTlVNX0xJUCh4KSAoKHgpIDw8IFNfTlVNX0xJUCkKKyNkZWZpbmUgR19OVU1fTElQKHgpICgoKHgpID4+IFNfTlVNX0xJUCkgJiBNX05VTV9MSVApCisKKyNkZWZpbmUgU19UQ0FNX1BBUlRfQ05UICAgIDI0CisjZGVmaW5lIE1fVENBTV9QQVJUX0NOVCAgICAweDMKKyNkZWZpbmUgVl9UQ0FNX1BBUlRfQ05UKHgpICgoeCkgPDwgU19UQ0FNX1BBUlRfQ05UKQorI2RlZmluZSBHX1RDQU1fUEFSVF9DTlQoeCkgKCgoeCkgPj4gU19UQ0FNX1BBUlRfQ05UKSAmIE1fVENBTV9QQVJUX0NOVCkKKworI2RlZmluZSBTX1RDQU1fUEFSVF9UWVBFICAgIDI2CisjZGVmaW5lIE1fVENBTV9QQVJUX1RZUEUgICAgMHgzCisjZGVmaW5lIFZfVENBTV9QQVJUX1RZUEUoeCkgKCh4KSA8PCBTX1RDQU1fUEFSVF9UWVBFKQorI2RlZmluZSBHX1RDQU1fUEFSVF9UWVBFKHgpICgoKHgpID4+IFNfVENBTV9QQVJUX1RZUEUpICYgTV9UQ0FNX1BBUlRfVFlQRSkKKworI2RlZmluZSBTX1RDQU1fUEFSVF9TSVpFICAgIDI4CisjZGVmaW5lIE1fVENBTV9QQVJUX1NJWkUgICAgMHgzCisjZGVmaW5lIFZfVENBTV9QQVJUX1NJWkUoeCkgKCh4KSA8PCBTX1RDQU1fUEFSVF9TSVpFKQorI2RlZmluZSBHX1RDQU1fUEFSVF9TSVpFKHgpICgoKHgpID4+IFNfVENBTV9QQVJUX1NJWkUpICYgTV9UQ0FNX1BBUlRfU0laRSkKKworI2RlZmluZSBTX1RDQU1fUEFSVF9UWVBFX0hJICAgIDMwCisjZGVmaW5lIFZfVENBTV9QQVJUX1RZUEVfSEkoeCkgKCh4KSA8PCBTX1RDQU1fUEFSVF9UWVBFX0hJKQorI2RlZmluZSBGX1RDQU1fUEFSVF9UWVBFX0hJICAgIFZfVENBTV9QQVJUX1RZUEVfSEkoMVUpCisKKyNkZWZpbmUgQV9NQzVfU0laRSAweGMwOAorCisjZGVmaW5lIFNfU0laRSAgICAwCisjZGVmaW5lIE1fU0laRSAgICAweDNmZmZmZgorI2RlZmluZSBWX1NJWkUoeCkgKCh4KSA8PCBTX1NJWkUpCisjZGVmaW5lIEdfU0laRSh4KSAoKCh4KSA+PiBTX1NJWkUpICYgTV9TSVpFKQorCisjZGVmaW5lIEFfTUM1X1JPVVRJTkdfVEFCTEVfSU5ERVggMHhjMGMKKworI2RlZmluZSBTX1NUQVJUX09GX1JPVVRJTkdfVEFCTEUgICAgMAorI2RlZmluZSBNX1NUQVJUX09GX1JPVVRJTkdfVEFCTEUgICAgMHgzZmZmZmYKKyNkZWZpbmUgVl9TVEFSVF9PRl9ST1VUSU5HX1RBQkxFKHgpICgoeCkgPDwgU19TVEFSVF9PRl9ST1VUSU5HX1RBQkxFKQorI2RlZmluZSBHX1NUQVJUX09GX1JPVVRJTkdfVEFCTEUoeCkgKCgoeCkgPj4gU19TVEFSVF9PRl9ST1VUSU5HX1RBQkxFKSAmIE1fU1RBUlRfT0ZfUk9VVElOR19UQUJMRSkKKworI2RlZmluZSBBX01DNV9TRVJWRVJfSU5ERVggMHhjMTQKKworI2RlZmluZSBTX1NUQVJUX09GX1NFUlZFUl9JTkRFWCAgICAwCisjZGVmaW5lIE1fU1RBUlRfT0ZfU0VSVkVSX0lOREVYICAgIDB4M2ZmZmZmCisjZGVmaW5lIFZfU1RBUlRfT0ZfU0VSVkVSX0lOREVYKHgpICgoeCkgPDwgU19TVEFSVF9PRl9TRVJWRVJfSU5ERVgpCisjZGVmaW5lIEdfU1RBUlRfT0ZfU0VSVkVSX0lOREVYKHgpICgoKHgpID4+IFNfU1RBUlRfT0ZfU0VSVkVSX0lOREVYKSAmIE1fU1RBUlRfT0ZfU0VSVkVSX0lOREVYKQorCisjZGVmaW5lIEFfTUM1X0xJUF9SQU1fQUREUiAweGMxOAorCisjZGVmaW5lIFNfTE9DQUxfSVBfUkFNX0FERFIgICAgMAorI2RlZmluZSBNX0xPQ0FMX0lQX1JBTV9BRERSICAgIDB4M2YKKyNkZWZpbmUgVl9MT0NBTF9JUF9SQU1fQUREUih4KSAoKHgpIDw8IFNfTE9DQUxfSVBfUkFNX0FERFIpCisjZGVmaW5lIEdfTE9DQUxfSVBfUkFNX0FERFIoeCkgKCgoeCkgPj4gU19MT0NBTF9JUF9SQU1fQUREUikgJiBNX0xPQ0FMX0lQX1JBTV9BRERSKQorCisjZGVmaW5lIFNfUkFNX1dSSVRFX0VOQUJMRSAgICA4CisjZGVmaW5lIFZfUkFNX1dSSVRFX0VOQUJMRSh4KSAoKHgpIDw8IFNfUkFNX1dSSVRFX0VOQUJMRSkKKyNkZWZpbmUgRl9SQU1fV1JJVEVfRU5BQkxFICAgIFZfUkFNX1dSSVRFX0VOQUJMRSgxVSkKKworI2RlZmluZSBBX01DNV9MSVBfUkFNX0RBVEEgMHhjMWMKKyNkZWZpbmUgQV9NQzVfUlNQX0xBVEVOQ1kgMHhjMjAKKworI2RlZmluZSBTX1NFQVJDSF9SRVNQT05TRV9MQVRFTkNZICAgIDAKKyNkZWZpbmUgTV9TRUFSQ0hfUkVTUE9OU0VfTEFURU5DWSAgICAweDFmCisjZGVmaW5lIFZfU0VBUkNIX1JFU1BPTlNFX0xBVEVOQ1koeCkgKCh4KSA8PCBTX1NFQVJDSF9SRVNQT05TRV9MQVRFTkNZKQorI2RlZmluZSBHX1NFQVJDSF9SRVNQT05TRV9MQVRFTkNZKHgpICgoKHgpID4+IFNfU0VBUkNIX1JFU1BPTlNFX0xBVEVOQ1kpICYgTV9TRUFSQ0hfUkVTUE9OU0VfTEFURU5DWSkKKworI2RlZmluZSBTX0xFQVJOX1JFU1BPTlNFX0xBVEVOQ1kgICAgOAorI2RlZmluZSBNX0xFQVJOX1JFU1BPTlNFX0xBVEVOQ1kgICAgMHgxZgorI2RlZmluZSBWX0xFQVJOX1JFU1BPTlNFX0xBVEVOQ1koeCkgKCh4KSA8PCBTX0xFQVJOX1JFU1BPTlNFX0xBVEVOQ1kpCisjZGVmaW5lIEdfTEVBUk5fUkVTUE9OU0VfTEFURU5DWSh4KSAoKCh4KSA+PiBTX0xFQVJOX1JFU1BPTlNFX0xBVEVOQ1kpICYgTV9MRUFSTl9SRVNQT05TRV9MQVRFTkNZKQorCisjZGVmaW5lIEFfTUM1X1BBUklUWV9MQVRFTkNZIDB4YzI0CisKKyNkZWZpbmUgU19TUkNITEFUICAgIDAKKyNkZWZpbmUgTV9TUkNITEFUICAgIDB4MWYKKyNkZWZpbmUgVl9TUkNITEFUKHgpICgoeCkgPDwgU19TUkNITEFUKQorI2RlZmluZSBHX1NSQ0hMQVQoeCkgKCgoeCkgPj4gU19TUkNITEFUKSAmIE1fU1JDSExBVCkKKworI2RlZmluZSBTX1BBUkxBVCAgICA4CisjZGVmaW5lIE1fUEFSTEFUICAgIDB4MWYKKyNkZWZpbmUgVl9QQVJMQVQoeCkgKCh4KSA8PCBTX1BBUkxBVCkKKyNkZWZpbmUgR19QQVJMQVQoeCkgKCgoeCkgPj4gU19QQVJMQVQpICYgTV9QQVJMQVQpCisKKyNkZWZpbmUgQV9NQzVfV1JfTFJOX1ZFUklGWSAweGMyOAorCisjZGVmaW5lIFNfUE9WRVJFTiAgICAwCisjZGVmaW5lIFZfUE9WRVJFTih4KSAoKHgpIDw8IFNfUE9WRVJFTikKKyNkZWZpbmUgRl9QT1ZFUkVOICAgIFZfUE9WRVJFTigxVSkKKworI2RlZmluZSBTX0xSTlZFUkVOICAgIDEKKyNkZWZpbmUgVl9MUk5WRVJFTih4KSAoKHgpIDw8IFNfTFJOVkVSRU4pCisjZGVmaW5lIEZfTFJOVkVSRU4gICAgVl9MUk5WRVJFTigxVSkKKworI2RlZmluZSBTX1ZXVkVSRU4gICAgMgorI2RlZmluZSBWX1ZXVkVSRU4oeCkgKCh4KSA8PCBTX1ZXVkVSRU4pCisjZGVmaW5lIEZfVldWRVJFTiAgICBWX1ZXVkVSRU4oMVUpCisKKyNkZWZpbmUgQV9NQzVfUEFSVF9JRF9JTkRFWCAweGMyYworCisjZGVmaW5lIFNfSURJTkRFWCAgICAwCisjZGVmaW5lIE1fSURJTkRFWCAgICAweGYKKyNkZWZpbmUgVl9JRElOREVYKHgpICgoeCkgPDwgU19JRElOREVYKQorI2RlZmluZSBHX0lESU5ERVgoeCkgKCgoeCkgPj4gU19JRElOREVYKSAmIE1fSURJTkRFWCkKKworI2RlZmluZSBBX01DNV9SRVNFVF9NQVggMHhjMzAKKworI2RlZmluZSBTX1JTVE1BWCAgICAwCisjZGVmaW5lIE1fUlNUTUFYICAgIDB4MWZmCisjZGVmaW5lIFZfUlNUTUFYKHgpICgoeCkgPDwgU19SU1RNQVgpCisjZGVmaW5lIEdfUlNUTUFYKHgpICgoKHgpID4+IFNfUlNUTUFYKSAmIE1fUlNUTUFYKQorCisjZGVmaW5lIEFfTUM1X0lOVF9FTkFCTEUgMHhjNDAKKworI2RlZmluZSBTX01DNV9JTlRfSElUX09VVF9BQ1RJVkVfUkVHSU9OX0VSUiAgICAwCisjZGVmaW5lIFZfTUM1X0lOVF9ISVRfT1VUX0FDVElWRV9SRUdJT05fRVJSKHgpICgoeCkgPDwgU19NQzVfSU5UX0hJVF9PVVRfQUNUSVZFX1JFR0lPTl9FUlIpCisjZGVmaW5lIEZfTUM1X0lOVF9ISVRfT1VUX0FDVElWRV9SRUdJT05fRVJSICAgIFZfTUM1X0lOVF9ISVRfT1VUX0FDVElWRV9SRUdJT05fRVJSKDFVKQorCisjZGVmaW5lIFNfTUM1X0lOVF9ISVRfSU5fQUNUSVZFX1JFR0lPTl9FUlIgICAgMQorI2RlZmluZSBWX01DNV9JTlRfSElUX0lOX0FDVElWRV9SRUdJT05fRVJSKHgpICgoeCkgPDwgU19NQzVfSU5UX0hJVF9JTl9BQ1RJVkVfUkVHSU9OX0VSUikKKyNkZWZpbmUgRl9NQzVfSU5UX0hJVF9JTl9BQ1RJVkVfUkVHSU9OX0VSUiAgICBWX01DNV9JTlRfSElUX0lOX0FDVElWRV9SRUdJT05fRVJSKDFVKQorCisjZGVmaW5lIFNfTUM1X0lOVF9ISVRfSU5fUlRfUkVHSU9OX0VSUiAgICAyCisjZGVmaW5lIFZfTUM1X0lOVF9ISVRfSU5fUlRfUkVHSU9OX0VSUih4KSAoKHgpIDw8IFNfTUM1X0lOVF9ISVRfSU5fUlRfUkVHSU9OX0VSUikKKyNkZWZpbmUgRl9NQzVfSU5UX0hJVF9JTl9SVF9SRUdJT05fRVJSICAgIFZfTUM1X0lOVF9ISVRfSU5fUlRfUkVHSU9OX0VSUigxVSkKKworI2RlZmluZSBTX01DNV9JTlRfTUlTU19FUlIgICAgMworI2RlZmluZSBWX01DNV9JTlRfTUlTU19FUlIoeCkgKCh4KSA8PCBTX01DNV9JTlRfTUlTU19FUlIpCisjZGVmaW5lIEZfTUM1X0lOVF9NSVNTX0VSUiAgICBWX01DNV9JTlRfTUlTU19FUlIoMVUpCisKKyNkZWZpbmUgU19NQzVfSU5UX0xJUDBfRVJSICAgIDQKKyNkZWZpbmUgVl9NQzVfSU5UX0xJUDBfRVJSKHgpICgoeCkgPDwgU19NQzVfSU5UX0xJUDBfRVJSKQorI2RlZmluZSBGX01DNV9JTlRfTElQMF9FUlIgICAgVl9NQzVfSU5UX0xJUDBfRVJSKDFVKQorCisjZGVmaW5lIFNfTUM1X0lOVF9MSVBfTUlTU19FUlIgICAgNQorI2RlZmluZSBWX01DNV9JTlRfTElQX01JU1NfRVJSKHgpICgoeCkgPDwgU19NQzVfSU5UX0xJUF9NSVNTX0VSUikKKyNkZWZpbmUgRl9NQzVfSU5UX0xJUF9NSVNTX0VSUiAgICBWX01DNV9JTlRfTElQX01JU1NfRVJSKDFVKQorCisjZGVmaW5lIFNfTUM1X0lOVF9QQVJJVFlfRVJSICAgIDYKKyNkZWZpbmUgVl9NQzVfSU5UX1BBUklUWV9FUlIoeCkgKCh4KSA8PCBTX01DNV9JTlRfUEFSSVRZX0VSUikKKyNkZWZpbmUgRl9NQzVfSU5UX1BBUklUWV9FUlIgICAgVl9NQzVfSU5UX1BBUklUWV9FUlIoMVUpCisKKyNkZWZpbmUgU19NQzVfSU5UX0FDVElWRV9SRUdJT05fRlVMTCAgICA3CisjZGVmaW5lIFZfTUM1X0lOVF9BQ1RJVkVfUkVHSU9OX0ZVTEwoeCkgKCh4KSA8PCBTX01DNV9JTlRfQUNUSVZFX1JFR0lPTl9GVUxMKQorI2RlZmluZSBGX01DNV9JTlRfQUNUSVZFX1JFR0lPTl9GVUxMICAgIFZfTUM1X0lOVF9BQ1RJVkVfUkVHSU9OX0ZVTEwoMVUpCisKKyNkZWZpbmUgU19NQzVfSU5UX05GQV9TUkNIX0VSUiAgICA4CisjZGVmaW5lIFZfTUM1X0lOVF9ORkFfU1JDSF9FUlIoeCkgKCh4KSA8PCBTX01DNV9JTlRfTkZBX1NSQ0hfRVJSKQorI2RlZmluZSBGX01DNV9JTlRfTkZBX1NSQ0hfRVJSICAgIFZfTUM1X0lOVF9ORkFfU1JDSF9FUlIoMVUpCisKKyNkZWZpbmUgU19NQzVfSU5UX1NZTl9DT09LSUUgICAgOQorI2RlZmluZSBWX01DNV9JTlRfU1lOX0NPT0tJRSh4KSAoKHgpIDw8IFNfTUM1X0lOVF9TWU5fQ09PS0lFKQorI2RlZmluZSBGX01DNV9JTlRfU1lOX0NPT0tJRSAgICBWX01DNV9JTlRfU1lOX0NPT0tJRSgxVSkKKworI2RlZmluZSBTX01DNV9JTlRfU1lOX0NPT0tJRV9CQUQgICAgMTAKKyNkZWZpbmUgVl9NQzVfSU5UX1NZTl9DT09LSUVfQkFEKHgpICgoeCkgPDwgU19NQzVfSU5UX1NZTl9DT09LSUVfQkFEKQorI2RlZmluZSBGX01DNV9JTlRfU1lOX0NPT0tJRV9CQUQgICAgVl9NQzVfSU5UX1NZTl9DT09LSUVfQkFEKDFVKQorCisjZGVmaW5lIFNfTUM1X0lOVF9TWU5fQ09PS0lFX09GRiAgICAxMQorI2RlZmluZSBWX01DNV9JTlRfU1lOX0NPT0tJRV9PRkYoeCkgKCh4KSA8PCBTX01DNV9JTlRfU1lOX0NPT0tJRV9PRkYpCisjZGVmaW5lIEZfTUM1X0lOVF9TWU5fQ09PS0lFX09GRiAgICBWX01DNV9JTlRfU1lOX0NPT0tJRV9PRkYoMVUpCisKKyNkZWZpbmUgU19NQzVfSU5UX1VOS05PV05fQ01EICAgIDE1CisjZGVmaW5lIFZfTUM1X0lOVF9VTktOT1dOX0NNRCh4KSAoKHgpIDw8IFNfTUM1X0lOVF9VTktOT1dOX0NNRCkKKyNkZWZpbmUgRl9NQzVfSU5UX1VOS05PV05fQ01EICAgIFZfTUM1X0lOVF9VTktOT1dOX0NNRCgxVSkKKworI2RlZmluZSBTX01DNV9JTlRfUkVRVUVTVFFfUEFSSVRZX0VSUiAgICAxNgorI2RlZmluZSBWX01DNV9JTlRfUkVRVUVTVFFfUEFSSVRZX0VSUih4KSAoKHgpIDw8IFNfTUM1X0lOVF9SRVFVRVNUUV9QQVJJVFlfRVJSKQorI2RlZmluZSBGX01DNV9JTlRfUkVRVUVTVFFfUEFSSVRZX0VSUiAgICBWX01DNV9JTlRfUkVRVUVTVFFfUEFSSVRZX0VSUigxVSkKKworI2RlZmluZSBTX01DNV9JTlRfRElTUEFUQ0hRX1BBUklUWV9FUlIgICAgMTcKKyNkZWZpbmUgVl9NQzVfSU5UX0RJU1BBVENIUV9QQVJJVFlfRVJSKHgpICgoeCkgPDwgU19NQzVfSU5UX0RJU1BBVENIUV9QQVJJVFlfRVJSKQorI2RlZmluZSBGX01DNV9JTlRfRElTUEFUQ0hRX1BBUklUWV9FUlIgICAgVl9NQzVfSU5UX0RJU1BBVENIUV9QQVJJVFlfRVJSKDFVKQorCisjZGVmaW5lIFNfTUM1X0lOVF9ERUxfQUNUX0VNUFRZICAgIDE4CisjZGVmaW5lIFZfTUM1X0lOVF9ERUxfQUNUX0VNUFRZKHgpICgoeCkgPDwgU19NQzVfSU5UX0RFTF9BQ1RfRU1QVFkpCisjZGVmaW5lIEZfTUM1X0lOVF9ERUxfQUNUX0VNUFRZICAgIFZfTUM1X0lOVF9ERUxfQUNUX0VNUFRZKDFVKQorCisjZGVmaW5lIEFfTUM1X0lOVF9DQVVTRSAweGM0NAorI2RlZmluZSBBX01DNV9JTlRfVElEIDB4YzQ4CisjZGVmaW5lIEFfTUM1X0lOVF9QVElEIDB4YzRjCisjZGVmaW5lIEFfTUM1X0RCR0lfQ09ORklHIDB4Yzc0CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0NNRCAweGM3OAorCisjZGVmaW5lIFNfQ01ETU9ERSAgICAwCisjZGVmaW5lIE1fQ01ETU9ERSAgICAweDcKKyNkZWZpbmUgVl9DTURNT0RFKHgpICgoeCkgPDwgU19DTURNT0RFKQorI2RlZmluZSBHX0NNRE1PREUoeCkgKCgoeCkgPj4gU19DTURNT0RFKSAmIE1fQ01ETU9ERSkKKworI2RlZmluZSBTX1NBRFJTRUwgICAgNAorI2RlZmluZSBWX1NBRFJTRUwoeCkgKCh4KSA8PCBTX1NBRFJTRUwpCisjZGVmaW5lIEZfU0FEUlNFTCAgICBWX1NBRFJTRUwoMVUpCisKKyNkZWZpbmUgU19XUklURV9CVVJTVF9TSVpFICAgIDIyCisjZGVmaW5lIE1fV1JJVEVfQlVSU1RfU0laRSAgICAweDNmZgorI2RlZmluZSBWX1dSSVRFX0JVUlNUX1NJWkUoeCkgKCh4KSA8PCBTX1dSSVRFX0JVUlNUX1NJWkUpCisjZGVmaW5lIEdfV1JJVEVfQlVSU1RfU0laRSh4KSAoKCh4KSA+PiBTX1dSSVRFX0JVUlNUX1NJWkUpICYgTV9XUklURV9CVVJTVF9TSVpFKQorCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0FERFIwIDB4YzdjCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0FERFIxIDB4YzgwCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0FERFIyIDB4Yzg0CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0RBVEEwIDB4Yzg4CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0RBVEExIDB4YzhjCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0RBVEEyIDB4YzkwCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0RBVEEzIDB4Yzk0CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX0RBVEE0IDB4Yzk4CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX01BU0swIDB4YzljCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX01BU0sxIDB4Y2EwCisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX01BU0syIDB4Y2E0CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX01BU0szIDB4Y2E4CisjZGVmaW5lIEFfTUM1X0RCR0lfUkVRX01BU0s0IDB4Y2FjCisjZGVmaW5lIEFfTUM1X0RCR0lfUlNQX1NUQVRVUyAweGNiMAorCisjZGVmaW5lIFNfREJHSV9SU1BfVkFMSUQgICAgMAorI2RlZmluZSBWX0RCR0lfUlNQX1ZBTElEKHgpICgoeCkgPDwgU19EQkdJX1JTUF9WQUxJRCkKKyNkZWZpbmUgRl9EQkdJX1JTUF9WQUxJRCAgICBWX0RCR0lfUlNQX1ZBTElEKDFVKQorCisjZGVmaW5lIFNfREJHSV9SU1BfSElUICAgIDEKKyNkZWZpbmUgVl9EQkdJX1JTUF9ISVQoeCkgKCh4KSA8PCBTX0RCR0lfUlNQX0hJVCkKKyNkZWZpbmUgRl9EQkdJX1JTUF9ISVQgICAgVl9EQkdJX1JTUF9ISVQoMVUpCisKKyNkZWZpbmUgU19EQkdJX1JTUF9FUlIgICAgMgorI2RlZmluZSBWX0RCR0lfUlNQX0VSUih4KSAoKHgpIDw8IFNfREJHSV9SU1BfRVJSKQorI2RlZmluZSBGX0RCR0lfUlNQX0VSUiAgICBWX0RCR0lfUlNQX0VSUigxVSkKKworI2RlZmluZSBTX0RCR0lfUlNQX0VSUl9SRUFTT04gICAgOAorI2RlZmluZSBNX0RCR0lfUlNQX0VSUl9SRUFTT04gICAgMHg3CisjZGVmaW5lIFZfREJHSV9SU1BfRVJSX1JFQVNPTih4KSAoKHgpIDw8IFNfREJHSV9SU1BfRVJSX1JFQVNPTikKKyNkZWZpbmUgR19EQkdJX1JTUF9FUlJfUkVBU09OKHgpICgoKHgpID4+IFNfREJHSV9SU1BfRVJSX1JFQVNPTikgJiBNX0RCR0lfUlNQX0VSUl9SRUFTT04pCisKKyNkZWZpbmUgQV9NQzVfREJHSV9SU1BfREFUQTAgMHhjYjQKKyNkZWZpbmUgQV9NQzVfREJHSV9SU1BfREFUQTEgMHhjYjgKKyNkZWZpbmUgQV9NQzVfREJHSV9SU1BfREFUQTIgMHhjYmMKKyNkZWZpbmUgQV9NQzVfREJHSV9SU1BfREFUQTMgMHhjYzAKKyNkZWZpbmUgQV9NQzVfREJHSV9SU1BfREFUQTQgMHhjYzQKKyNkZWZpbmUgQV9NQzVfREJHSV9SU1BfTEFTVF9DTUQgMHhjYzgKKyNkZWZpbmUgQV9NQzVfUE9QRU5fREFUQV9XUl9DTUQgMHhjY2MKKyNkZWZpbmUgQV9NQzVfUE9QRU5fTUFTS19XUl9DTUQgMHhjZDAKKyNkZWZpbmUgQV9NQzVfQU9QRU5fU1JDSF9DTUQgMHhjZDQKKyNkZWZpbmUgQV9NQzVfQU9QRU5fTFJOX0NNRCAweGNkOAorI2RlZmluZSBBX01DNV9TWU5fU1JDSF9DTUQgMHhjZGMKKyNkZWZpbmUgQV9NQzVfU1lOX0xSTl9DTUQgMHhjZTAKKyNkZWZpbmUgQV9NQzVfQUNLX1NSQ0hfQ01EIDB4Y2U0CisjZGVmaW5lIEFfTUM1X0FDS19MUk5fQ01EIDB4Y2U4CisjZGVmaW5lIEFfTUM1X0lMT09LVVBfQ01EIDB4Y2VjCisjZGVmaW5lIEFfTUM1X0VMT09LVVBfQ01EIDB4Y2YwCisjZGVmaW5lIEFfTUM1X0RBVEFfV1JJVEVfQ01EIDB4Y2Y0CisjZGVmaW5lIEFfTUM1X0RBVEFfUkVBRF9DTUQgMHhjZjgKKyNkZWZpbmUgQV9NQzVfTUFTS19XUklURV9DTUQgMHhjZmMKKworLyogUENJQ0ZHIHJlZ2lzdGVycyAqLwogI2RlZmluZSBBX1BDSUNGR19QTV9DU1IgMHg0NAogI2RlZmluZSBBX1BDSUNGR19WUERfQUREUiAweDRhCiAKKyNkZWZpbmUgU19WUERfQUREUiAgICAwCisjZGVmaW5lIE1fVlBEX0FERFIgICAgMHg3ZmZmCisjZGVmaW5lIFZfVlBEX0FERFIoeCkgKCh4KSA8PCBTX1ZQRF9BRERSKQorI2RlZmluZSBHX1ZQRF9BRERSKHgpICgoKHgpID4+IFNfVlBEX0FERFIpICYgTV9WUERfQUREUikKKwogI2RlZmluZSBTX1ZQRF9PUF9GTEFHICAgIDE1CiAjZGVmaW5lIFZfVlBEX09QX0ZMQUcoeCkgKCh4KSA8PCBTX1ZQRF9PUF9GTEFHKQogI2RlZmluZSBGX1ZQRF9PUF9GTEFHICAgIFZfVlBEX09QX0ZMQUcoMVUpCiAKICNkZWZpbmUgQV9QQ0lDRkdfVlBEX0RBVEEgMHg0YwotCisjZGVmaW5lIEFfUENJQ0ZHX1BDSVhfQ01EIDB4NjAKICNkZWZpbmUgQV9QQ0lDRkdfSU5UUl9FTkFCTEUgMHhmNAotI2RlZmluZSBBX1BDSUNGR19JTlRSX0NBVVNFIDB4ZjgKIAorI2RlZmluZSBTX01BU1RFUl9QQVJJVFlfRVJSICAgIDAKKyNkZWZpbmUgVl9NQVNURVJfUEFSSVRZX0VSUih4KSAoKHgpIDw8IFNfTUFTVEVSX1BBUklUWV9FUlIpCisjZGVmaW5lIEZfTUFTVEVSX1BBUklUWV9FUlIgICAgVl9NQVNURVJfUEFSSVRZX0VSUigxVSkKKworI2RlZmluZSBTX1NJR19UQVJHRVRfQUJPUlQgICAgMQorI2RlZmluZSBWX1NJR19UQVJHRVRfQUJPUlQoeCkgKCh4KSA8PCBTX1NJR19UQVJHRVRfQUJPUlQpCisjZGVmaW5lIEZfU0lHX1RBUkdFVF9BQk9SVCAgICBWX1NJR19UQVJHRVRfQUJPUlQoMVUpCisKKyNkZWZpbmUgU19SQ1ZfVEFSR0VUX0FCT1JUICAgIDIKKyNkZWZpbmUgVl9SQ1ZfVEFSR0VUX0FCT1JUKHgpICgoeCkgPDwgU19SQ1ZfVEFSR0VUX0FCT1JUKQorI2RlZmluZSBGX1JDVl9UQVJHRVRfQUJPUlQgICAgVl9SQ1ZfVEFSR0VUX0FCT1JUKDFVKQorCisjZGVmaW5lIFNfUkNWX01BU1RFUl9BQk9SVCAgICAzCisjZGVmaW5lIFZfUkNWX01BU1RFUl9BQk9SVCh4KSAoKHgpIDw8IFNfUkNWX01BU1RFUl9BQk9SVCkKKyNkZWZpbmUgRl9SQ1ZfTUFTVEVSX0FCT1JUICAgIFZfUkNWX01BU1RFUl9BQk9SVCgxVSkKKworI2RlZmluZSBTX1NJR19TWVNfRVJSICAgIDQKKyNkZWZpbmUgVl9TSUdfU1lTX0VSUih4KSAoKHgpIDw8IFNfU0lHX1NZU19FUlIpCisjZGVmaW5lIEZfU0lHX1NZU19FUlIgICAgVl9TSUdfU1lTX0VSUigxVSkKKworI2RlZmluZSBTX0RFVF9QQVJJVFlfRVJSICAgIDUKKyNkZWZpbmUgVl9ERVRfUEFSSVRZX0VSUih4KSAoKHgpIDw8IFNfREVUX1BBUklUWV9FUlIpCisjZGVmaW5lIEZfREVUX1BBUklUWV9FUlIgICAgVl9ERVRfUEFSSVRZX0VSUigxVSkKKworI2RlZmluZSBTX1BJT19QQVJJVFlfRVJSICAgIDYKKyNkZWZpbmUgVl9QSU9fUEFSSVRZX0VSUih4KSAoKHgpIDw8IFNfUElPX1BBUklUWV9FUlIpCisjZGVmaW5lIEZfUElPX1BBUklUWV9FUlIgICAgVl9QSU9fUEFSSVRZX0VSUigxVSkKKworI2RlZmluZSBTX1dGX1BBUklUWV9FUlIgICAgNworI2RlZmluZSBWX1dGX1BBUklUWV9FUlIoeCkgKCh4KSA8PCBTX1dGX1BBUklUWV9FUlIpCisjZGVmaW5lIEZfV0ZfUEFSSVRZX0VSUiAgICBWX1dGX1BBUklUWV9FUlIoMVUpCisKKyNkZWZpbmUgU19SRl9QQVJJVFlfRVJSICAgIDgKKyNkZWZpbmUgTV9SRl9QQVJJVFlfRVJSICAgIDB4MworI2RlZmluZSBWX1JGX1BBUklUWV9FUlIoeCkgKCh4KSA8PCBTX1JGX1BBUklUWV9FUlIpCisjZGVmaW5lIEdfUkZfUEFSSVRZX0VSUih4KSAoKCh4KSA+PiBTX1JGX1BBUklUWV9FUlIpICYgTV9SRl9QQVJJVFlfRVJSKQorCisjZGVmaW5lIFNfQ0ZfUEFSSVRZX0VSUiAgICAxMAorI2RlZmluZSBNX0NGX1BBUklUWV9FUlIgICAgMHgzCisjZGVmaW5lIFZfQ0ZfUEFSSVRZX0VSUih4KSAoKHgpIDw8IFNfQ0ZfUEFSSVRZX0VSUikKKyNkZWZpbmUgR19DRl9QQVJJVFlfRVJSKHgpICgoKHgpID4+IFNfQ0ZfUEFSSVRZX0VSUikgJiBNX0NGX1BBUklUWV9FUlIpCisKKyNkZWZpbmUgQV9QQ0lDRkdfSU5UUl9DQVVTRSAweGY4CiAjZGVmaW5lIEFfUENJQ0ZHX01PREUgMHhmYwogCiAjZGVmaW5lIFNfUENJX01PREVfNjRCSVQgICAgMAogI2RlZmluZSBWX1BDSV9NT0RFXzY0QklUKHgpICgoeCkgPDwgU19QQ0lfTU9ERV82NEJJVCkKICNkZWZpbmUgRl9QQ0lfTU9ERV82NEJJVCAgICBWX1BDSV9NT0RFXzY0QklUKDFVKQogCisjZGVmaW5lIFNfUENJX01PREVfNjZNSFogICAgMQorI2RlZmluZSBWX1BDSV9NT0RFXzY2TUhaKHgpICgoeCkgPDwgU19QQ0lfTU9ERV82Nk1IWikKKyNkZWZpbmUgRl9QQ0lfTU9ERV82Nk1IWiAgICBWX1BDSV9NT0RFXzY2TUhaKDFVKQorCisjZGVmaW5lIFNfUENJX01PREVfUENJWF9JTklUUEFUICAgIDIKKyNkZWZpbmUgTV9QQ0lfTU9ERV9QQ0lYX0lOSVRQQVQgICAgMHg3CisjZGVmaW5lIFZfUENJX01PREVfUENJWF9JTklUUEFUKHgpICgoeCkgPDwgU19QQ0lfTU9ERV9QQ0lYX0lOSVRQQVQpCisjZGVmaW5lIEdfUENJX01PREVfUENJWF9JTklUUEFUKHgpICgoKHgpID4+IFNfUENJX01PREVfUENJWF9JTklUUEFUKSAmIE1fUENJX01PREVfUENJWF9JTklUUEFUKQorCiAjZGVmaW5lIFNfUENJX01PREVfUENJWCAgICA1CiAjZGVmaW5lIFZfUENJX01PREVfUENJWCh4KSAoKHgpIDw8IFNfUENJX01PREVfUENJWCkKICNkZWZpbmUgRl9QQ0lfTU9ERV9QQ0lYICAgIFZfUENJX01PREVfUENJWCgxVSkKIAogI2RlZmluZSBTX1BDSV9NT0RFX0NMSyAgICA2CiAjZGVmaW5lIE1fUENJX01PREVfQ0xLICAgIDB4MworI2RlZmluZSBWX1BDSV9NT0RFX0NMSyh4KSAoKHgpIDw8IFNfUENJX01PREVfQ0xLKQogI2RlZmluZSBHX1BDSV9NT0RFX0NMSyh4KSAoKCh4KSA+PiBTX1BDSV9NT0RFX0NMSykgJiBNX1BDSV9NT0RFX0NMSykKIAogI2VuZGlmIC8qIF9DWEdCX1JFR1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCmluZGV4IDk3OTljMTIuLjBjYThkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwpAQCAtNDIsMTIgKzQyLDE0IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpAQCAtNTcsMTAgKzU5LDggQEAKICNpbmNsdWRlICJyZWdzLmgiCiAjaW5jbHVkZSAiZXNwaS5oIgogCi0KLSNpZmRlZiBORVRJRl9GX1RTTwotI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgotI2VuZGlmCisvKiBUaGlzIGJlbG9uZ3MgaW4gaWZfZXRoZXIuaCAqLworI2RlZmluZSBFVEhfUF9DUEw1IDB4ZgogCiAjZGVmaW5lIFNHRV9DTURRX04JCTIKICNkZWZpbmUgU0dFX0ZSRUVMUV9OCQkyCkBAIC03Myw2ICs3Myw3IEBACiAjZGVmaW5lIFNHRV9JTlRSVElNRVJfTlJFUwkxMDAwCiAjZGVmaW5lIFNHRV9SWF9DT1BZX1RIUkVTCTI1NgogI2RlZmluZSBTR0VfUlhfU01fQlVGX1NJWkUJMTUzNgorI2RlZmluZSBTR0VfVFhfREVTQ19NQVhfUExFTgkxNjM4NAogCiAjIGRlZmluZSBTR0VfUlhfRFJPUF9USFJFUyAyCiAKQEAgLTE4NCwxNyArMTg1LDE3IEBACiAJdW5zaWduZWQgbG9uZyAgIHN0YXR1czsgICAgICAgICAvKiBIVyBETUEgZmV0Y2ggc3RhdHVzICovCiAJdW5zaWduZWQgaW50ICAgIGluX3VzZTsgICAgICAgICAvKiAjIG9mIGluLXVzZSBjb21tYW5kIGRlc2NyaXB0b3JzICovCiAJdW5zaWduZWQgaW50CXNpemU7CSAgICAgICAgLyogIyBvZiBkZXNjcmlwdG9ycyAqLwotCXVuc2lnbmVkIGludAlwcm9jZXNzZWQ7ICAgICAgLyogdG90YWwgIyBvZiBkZXNjcyBIVyBoYXMgcHJvY2Vzc2VkICovCi0JdW5zaWduZWQgaW50CWNsZWFuZWQ7ICAgICAgICAvKiB0b3RhbCAjIG9mIGRlc2NzIFNXIGhhcyByZWNsYWltZWQgKi8KLQl1bnNpZ25lZCBpbnQJc3RvcF90aHJlczsgICAgIC8qIFNXIFRYIHF1ZXVlIHN1c3BlbmQgdGhyZXNob2xkICovCisJdW5zaWduZWQgaW50ICAgIHByb2Nlc3NlZDsgICAgICAvKiB0b3RhbCAjIG9mIGRlc2NzIEhXIGhhcyBwcm9jZXNzZWQgKi8KKwl1bnNpZ25lZCBpbnQgICAgY2xlYW5lZDsgICAgICAgIC8qIHRvdGFsICMgb2YgZGVzY3MgU1cgaGFzIHJlY2xhaW1lZCAqLworCXVuc2lnbmVkIGludCAgICBzdG9wX3RocmVzOyAgICAgLyogU1cgVFggcXVldWUgc3VzcGVuZCB0aHJlc2hvbGQgKi8KIAl1MTYJCXBpZHg7ICAgICAgICAgICAvKiBwcm9kdWNlciBpbmRleCAoU1cpICovCiAJdTE2CQljaWR4OyAgICAgICAgICAgLyogY29uc3VtZXIgaW5kZXggKEhXKSAqLwogCXU4CQlnZW5iaXQ7ICAgICAgICAgLyogY3VycmVudCBnZW5lcmF0aW9uICg9dmFsaWQpIGJpdCAqLwotCXU4CQlzb3A7ICAgICAgICAgICAgLyogaXMgbmV4dCBlbnRyeSBzdGFydCBvZiBwYWNrZXQ/ICovCisJdTggICAgICAgICAgICAgIHNvcDsgICAgICAgICAgICAvKiBpcyBuZXh0IGVudHJ5IHN0YXJ0IG9mIHBhY2tldD8gKi8KIAlzdHJ1Y3QgY21kUV9lICAqZW50cmllczsgICAgICAgIC8qIEhXIGNvbW1hbmQgZGVzY3JpcHRvciBRICovCiAJc3RydWN0IGNtZFFfY2UgKmNlbnRyaWVzOyAgICAgICAvKiBTVyBjb21tYW5kIGNvbnRleHQgZGVzY3JpcHRvciBRICovCi0Jc3BpbmxvY2tfdAlsb2NrOyAgICAgICAgICAgLyogTG9jayB0byBwcm90ZWN0IGNtZFEgZW5xdWV1aW5nICovCiAJZG1hX2FkZHJfdAlkbWFfYWRkcjsgICAgICAgLyogRE1BIGFkZHIgSFcgY29tbWFuZCBkZXNjcmlwdG9yIFEgKi8KKyAJc3BpbmxvY2tfdAlsb2NrOyAgICAgICAgICAgLyogTG9jayB0byBwcm90ZWN0IGNtZFEgZW5xdWV1aW5nICovCiB9OwogCiBzdHJ1Y3QgZnJlZWxRIHsKQEAgLTIwMyw4ICsyMDQsOCBAQAogCXUxNgkJcGlkeDsgICAgICAgICAgIC8qIHByb2R1Y2VyIGluZGV4IChTVykgKi8KIAl1MTYJCWNpZHg7ICAgICAgICAgICAvKiBjb25zdW1lciBpbmRleCAoSFcpICovCiAJdTE2CQlyeF9idWZmZXJfc2l6ZTsgLyogQnVmZmVyIHNpemUgb24gdGhpcyBmcmVlIGxpc3QgKi8KLQl1MTYJCWRtYV9vZmZzZXQ7ICAgICAvKiBETUEgb2Zmc2V0IHRvIGFsaWduIElQIGhlYWRlcnMgKi8KLQl1MTYJCXJlY3ljbGVxX2lkeDsgICAvKiBza2IgcmVjeWNsZSBxIHRvIHVzZSAqLworCXUxNiAgICAgICAgICAgICBkbWFfb2Zmc2V0OyAgICAgLyogRE1BIG9mZnNldCB0byBhbGlnbiBJUCBoZWFkZXJzICovCisJdTE2ICAgICAgICAgICAgIHJlY3ljbGVxX2lkeDsgICAvKiBza2IgcmVjeWNsZSBxIHRvIHVzZSAqLwogCXU4CQlnZW5iaXQ7CSAgICAgICAgLyogY3VycmVudCBnZW5lcmF0aW9uICg9dmFsaWQpIGJpdCAqLwogCXN0cnVjdCBmcmVlbFFfZQkqZW50cmllczsgICAgICAgLyogSFcgZnJlZWxpc3QgZGVzY3JpcHRvciBRICovCiAJc3RydWN0IGZyZWVsUV9jZSAqY2VudHJpZXM7ICAgICAvKiBTVyBmcmVlbGlzdCBjb250ZXh0IGRlc2NyaXB0b3IgUSAqLwpAQCAtMjI2LDYgKzIyNywyOSBAQAogCUNNRFFfU1RBVF9MQVNUX1BLVF9EQiA9IDIgICAgICAgLyogbGFzdCBwYWNrZXQgcnVuZyB0aGUgZG9vcmJlbGwgKi8KIH07CiAKKy8qIFQyMDQgVFggU1cgc2NoZWR1bGVyICovCisKKy8qIFBlciBUMjA0IFRYIHBvcnQgKi8KK3N0cnVjdCBzY2hlZF9wb3J0IHsKKwl1bnNpZ25lZCBpbnQJYXZhaWw7CQkvKiBhdmFpbGFibGUgYml0cyAtIHF1b3RhICovCisJdW5zaWduZWQgaW50CWRyYWluX2JpdHNfcGVyXzEwMjRuczsgLyogZHJhaW4gcmF0ZSAqLworCXVuc2lnbmVkIGludAlzcGVlZDsJCS8qIGRyYWluIHJhdGUsIG1icHMgKi8KKwl1bnNpZ25lZCBpbnQJbXR1OwkJLyogbXR1IHNpemUgKi8KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYnE7CS8qIHBlbmRpbmcgc2ticyAqLworfTsKKworLyogUGVyIFQyMDQgZGV2aWNlICovCitzdHJ1Y3Qgc2NoZWQgeworCWt0aW1lX3QgICAgICAgICBsYXN0X3VwZGF0ZWQ7ICAgLyogbGFzdCB0aW1lIHF1b3RhcyB3ZXJlIGNvbXB1dGVkICovCisJdW5zaWduZWQgaW50IAltYXhfYXZhaWw7CS8qIG1heCBiaXRzIHRvIGJlIHNlbnQgdG8gYW55IHBvcnQgKi8KKwl1bnNpZ25lZCBpbnQgCXBvcnQ7CQkvKiBwb3J0IGluZGV4IChyb3VuZCByb2JpbiBwb3J0cykgKi8KKwl1bnNpZ25lZCBpbnQgCW51bTsJCS8qIG51bSBza2JzIGluIHBlciBwb3J0IHF1ZXVlcyAqLworCXN0cnVjdCBzY2hlZF9wb3J0IHBbTUFYX05QT1JUU107CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNjaGVkX3RzazsvKiB0YXNrbGV0IHVzZWQgdG8gcnVuIHNjaGVkdWxlciAqLworfTsKK3N0YXRpYyB2b2lkIHJlc3RhcnRfc2NoZWQodW5zaWduZWQgbG9uZyk7CisKKwogLyoKICAqIE1haW4gU0dFIGRhdGEgc3RydWN0dXJlCiAgKgpAQCAtMjQzLDE4ICsyNjcsMjQwIEBACiAJdW5zaWduZWQgaW50CXJ4X3BrdF9wYWQ7ICAgICAvKiBSWCBwYWRkaW5nIGZvciBMMiBwYWNrZXRzICovCiAJdW5zaWduZWQgaW50CWp1bWJvX2ZsOyAgICAgICAvKiBqdW1ibyBmcmVlbGlzdCBRIGluZGV4ICovCiAJdW5zaWduZWQgaW50CWludHJ0aW1lcl9ucmVzOwkvKiBuby1yZXNvdXJjZSBpbnRlcnJ1cHQgdGltZXIgKi8KLQl1bnNpZ25lZCBpbnQJZml4ZWRfaW50cnRpbWVyOy8qIG5vbi1hZGFwdGl2ZSBpbnRlcnJ1cHQgdGltZXIgKi8KKwl1bnNpZ25lZCBpbnQgICAgZml4ZWRfaW50cnRpbWVyOy8qIG5vbi1hZGFwdGl2ZSBpbnRlcnJ1cHQgdGltZXIgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0eF9yZWNsYWltX3RpbWVyOyAvKiByZWNsYWltcyBUWCBidWZmZXJzICovCiAJc3RydWN0IHRpbWVyX2xpc3QgZXNwaWJ1Z190aW1lcjsKLQl1bnNpZ25lZCBpbnQJZXNwaWJ1Z190aW1lb3V0OwotCXN0cnVjdCBza19idWZmCSplc3BpYnVnX3NrYjsKKwl1bnNpZ25lZCBsb25nCWVzcGlidWdfdGltZW91dDsKKwlzdHJ1Y3Qgc2tfYnVmZgkqZXNwaWJ1Z19za2JbTUFYX05QT1JUU107CiAJdTMyCQlzZ2VfY29udHJvbDsJLyogc2hhZG93IHZhbHVlIG9mIHNnZSBjb250cm9sIHJlZyAqLwogCXN0cnVjdCBzZ2VfaW50cl9jb3VudHMgc3RhdHM7Ci0Jc3RydWN0IHNnZV9wb3J0X3N0YXRzIHBvcnRfc3RhdHNbTUFYX05QT1JUU107CisJc3RydWN0IHNnZV9wb3J0X3N0YXRzICpwb3J0X3N0YXRzW01BWF9OUE9SVFNdOworCXN0cnVjdCBzY2hlZAkqdHhfc2NoZWQ7CiAJc3RydWN0IGNtZFEgY21kUVtTR0VfQ01EUV9OXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogfTsKIAogLyoKKyAqIHN0b3AgdGFza2xldCBhbmQgZnJlZSBhbGwgcGVuZGluZyBza2IncworICovCitzdGF0aWMgdm9pZCB0eF9zY2hlZF9zdG9wKHN0cnVjdCBzZ2UgKnNnZSkKK3sKKwlzdHJ1Y3Qgc2NoZWQgKnMgPSBzZ2UtPnR4X3NjaGVkOworCWludCBpOworCisJdGFza2xldF9raWxsKCZzLT5zY2hlZF90c2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykKKwkJX19za2JfcXVldWVfcHVyZ2UoJnMtPnBbcy0+cG9ydF0uc2ticSk7Cit9CisKKy8qCisgKiB0MV9zY2hlZF91cGRhdGVfcGFybXMoKSBpcyBjYWxsZWQgd2hlbiB0aGUgTVRVIG9yIGxpbmsgc3BlZWQgY2hhbmdlcy4gSXQKKyAqIHJlLWNvbXB1dGVzIHNjaGVkdWxlciBwYXJhbWV0ZXJzIHRvIHNjb3BlIHdpdGggdGhlIGNoYW5nZS4KKyAqLwordW5zaWduZWQgaW50IHQxX3NjaGVkX3VwZGF0ZV9wYXJtcyhzdHJ1Y3Qgc2dlICpzZ2UsIHVuc2lnbmVkIGludCBwb3J0LAorCQkJCSAgIHVuc2lnbmVkIGludCBtdHUsIHVuc2lnbmVkIGludCBzcGVlZCkKK3sKKwlzdHJ1Y3Qgc2NoZWQgKnMgPSBzZ2UtPnR4X3NjaGVkOworCXN0cnVjdCBzY2hlZF9wb3J0ICpwID0gJnMtPnBbcG9ydF07CisJdW5zaWduZWQgaW50IG1heF9hdmFpbF9zZWdzOworCisJcHJfZGVidWcoInQxX3NjaGVkX3VwZGF0ZV9wYXJhbXMgbXR1PSVkIHNwZWVkPSVkXG4iLCBtdHUsIHNwZWVkKTsKKwlpZiAoc3BlZWQpCisJCXAtPnNwZWVkID0gc3BlZWQ7CisJaWYgKG10dSkKKwkJcC0+bXR1ID0gbXR1OworCisJaWYgKHNwZWVkIHx8IG10dSkgeworCQl1bnNpZ25lZCBsb25nIGxvbmcgZHJhaW4gPSAxMDI0VUxMICogcC0+c3BlZWQgKiAocC0+bXR1IC0gNDApOworCQlkb19kaXYoZHJhaW4sIChwLT5tdHUgKyA1MCkgKiAxMDAwKTsKKwkJcC0+ZHJhaW5fYml0c19wZXJfMTAyNG5zID0gKHVuc2lnbmVkIGludCkgZHJhaW47CisKKwkJaWYgKHAtPnNwZWVkIDwgMTAwMCkKKwkJCXAtPmRyYWluX2JpdHNfcGVyXzEwMjRucyA9CisJCQkJOTAgKiBwLT5kcmFpbl9iaXRzX3Blcl8xMDI0bnMgLyAxMDA7CisJfQorCisJaWYgKGJvYXJkX2luZm8oc2dlLT5hZGFwdGVyKS0+Ym9hcmQgPT0gQ0hCVF9CT0FSRF9DSFQyMDQpIHsKKwkJcC0+ZHJhaW5fYml0c19wZXJfMTAyNG5zIC09IDE2OworCQlzLT5tYXhfYXZhaWwgPSBtYXgoNDA5NlUsIHAtPm10dSArIDE2ICsgMTQgKyA0KTsKKwkJbWF4X2F2YWlsX3NlZ3MgPSBtYXgoMVUsIDQwOTYgLyAocC0+bXR1IC0gNDApKTsKKwl9IGVsc2UgeworCQlzLT5tYXhfYXZhaWwgPSAxNjM4NDsKKwkJbWF4X2F2YWlsX3NlZ3MgPSBtYXgoMVUsIDkwMDAgLyAocC0+bXR1IC0gNDApKTsKKwl9CisKKwlwcl9kZWJ1ZygidDFfc2NoZWRfdXBkYXRlX3Bhcm1zOiBtdHUgJXUgc3BlZWQgJXUgbWF4X2F2YWlsICV1ICIKKwkJICJtYXhfYXZhaWxfc2VncyAldSBkcmFpbl9iaXRzX3Blcl8xMDI0bnMgJXVcbiIsIHAtPm10dSwKKwkJIHAtPnNwZWVkLCBzLT5tYXhfYXZhaWwsIG1heF9hdmFpbF9zZWdzLAorCQkgcC0+ZHJhaW5fYml0c19wZXJfMTAyNG5zKTsKKworCXJldHVybiBtYXhfYXZhaWxfc2VncyAqIChwLT5tdHUgLSA0MCk7Cit9CisKKy8qCisgKiB0MV9zY2hlZF9tYXhfYXZhaWxfYnl0ZXMoKSB0ZWxscyB0aGUgc2NoZWR1bGVyIHRoZSBtYXhpbXVtIGFtb3VudCBvZgorICogZGF0YSB0aGF0IGNhbiBiZSBwdXNoZWQgcGVyIHBvcnQuCisgKi8KK3ZvaWQgdDFfc2NoZWRfc2V0X21heF9hdmFpbF9ieXRlcyhzdHJ1Y3Qgc2dlICpzZ2UsIHVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IHNjaGVkICpzID0gc2dlLT50eF9zY2hlZDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXMtPm1heF9hdmFpbCA9IHZhbDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05QT1JUUzsgaSsrKQorCQl0MV9zY2hlZF91cGRhdGVfcGFybXMoc2dlLCBpLCAwLCAwKTsKK30KKworLyoKKyAqIHQxX3NjaGVkX3NldF9kcmFpbl9iaXRzX3Blcl91cygpIHRlbGxzIHRoZSBzY2hlZHVsZXIgYXQgd2hpY2ggcmF0ZSBhIHBvcnQKKyAqIGlzIGRyYWluaW5nLgorICovCit2b2lkIHQxX3NjaGVkX3NldF9kcmFpbl9iaXRzX3Blcl91cyhzdHJ1Y3Qgc2dlICpzZ2UsIHVuc2lnbmVkIGludCBwb3J0LAorCQkJCQkgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3Qgc2NoZWQgKnMgPSBzZ2UtPnR4X3NjaGVkOworCXN0cnVjdCBzY2hlZF9wb3J0ICpwID0gJnMtPnBbcG9ydF07CisJcC0+ZHJhaW5fYml0c19wZXJfMTAyNG5zID0gdmFsICogMTAyNCAvIDEwMDA7CisJdDFfc2NoZWRfdXBkYXRlX3Bhcm1zKHNnZSwgcG9ydCwgMCwgMCk7Cit9CisKKworLyoKKyAqIGdldF9jbG9jaygpIGltcGxlbWVudHMgYSBucyBjbG9jayAoc2VlIGt0aW1lX2dldCkKKyAqLworc3RhdGljIGlubGluZSBrdGltZV90IGdldF9jbG9jayh2b2lkKQoreworCXN0cnVjdCB0aW1lc3BlYyB0czsKKworCWt0aW1lX2dldF90cygmdHMpOworCXJldHVybiB0aW1lc3BlY190b19rdGltZSh0cyk7Cit9CisKKy8qCisgKiB0eF9zY2hlZF9pbml0KCkgYWxsb2NhdGVzIHJlc291cmNlcyBhbmQgZG9lcyBiYXNpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIGludCB0eF9zY2hlZF9pbml0KHN0cnVjdCBzZ2UgKnNnZSkKK3sKKwlzdHJ1Y3Qgc2NoZWQgKnM7CisJaW50IGk7CisKKwlzID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBzY2hlZCksIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcl9kZWJ1ZygidHhfc2NoZWRfaW5pdFxuIik7CisJdGFza2xldF9pbml0KCZzLT5zY2hlZF90c2ssIHJlc3RhcnRfc2NoZWQsICh1bnNpZ25lZCBsb25nKSBzZ2UpOworCXNnZS0+dHhfc2NoZWQgPSBzOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykgeworCQlza2JfcXVldWVfaGVhZF9pbml0KCZzLT5wW2ldLnNrYnEpOworCQl0MV9zY2hlZF91cGRhdGVfcGFybXMoc2dlLCBpLCAxNTAwLCAxMDAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNjaGVkX3VwZGF0ZV9hdmFpbCgpIGNvbXB1dGVzIHRoZSBkZWx0YSBzaW5jZSB0aGUgbGFzdCB0aW1lIGl0IHdhcyBjYWxsZWQKKyAqIGFuZCB1cGRhdGVzIHRoZSBwZXIgcG9ydCBxdW90YSAobnVtYmVyIG9mIGJpdHMgdGhhdCBjYW4gYmUgc2VudCB0byB0aGUgYW55CisgKiBwb3J0KS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2NoZWRfdXBkYXRlX2F2YWlsKHN0cnVjdCBzZ2UgKnNnZSkKK3sKKwlzdHJ1Y3Qgc2NoZWQgKnMgPSBzZ2UtPnR4X3NjaGVkOworCWt0aW1lX3Qgbm93ID0gZ2V0X2Nsb2NrKCk7CisJdW5zaWduZWQgaW50IGk7CisJbG9uZyBsb25nIGRlbHRhX3RpbWVfbnM7CisKKwlkZWx0YV90aW1lX25zID0ga3RpbWVfdG9fbnMoa3RpbWVfc3ViKG5vdywgcy0+bGFzdF91cGRhdGVkKSk7CisKKwlwcl9kZWJ1Zygic2NoZWRfdXBkYXRlX2F2YWlsIGRlbHRhPSVsbGRcbiIsIGRlbHRhX3RpbWVfbnMpOworCWlmIChkZWx0YV90aW1lX25zIDwgMTUwMDApCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykgeworCQlzdHJ1Y3Qgc2NoZWRfcG9ydCAqcCA9ICZzLT5wW2ldOworCQl1bnNpZ25lZCBpbnQgZGVsdGFfYXZhaWw7CisKKwkJZGVsdGFfYXZhaWwgPSAocC0+ZHJhaW5fYml0c19wZXJfMTAyNG5zICogZGVsdGFfdGltZV9ucykgPj4gMTM7CisJCXAtPmF2YWlsID0gbWluKHAtPmF2YWlsICsgZGVsdGFfYXZhaWwsIHMtPm1heF9hdmFpbCk7CisJfQorCisJcy0+bGFzdF91cGRhdGVkID0gbm93OworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBzY2hlZF9za2IoKSBpcyBjYWxsZWQgZnJvbSB0d28gZGlmZmVyZW50IHBsYWNlcy4gSW4gdGhlIHR4IHBhdGgsIGFueQorICogcGFja2V0IGdlbmVyYXRpbmcgbG9hZCBvbiBhbiBvdXRwdXQgcG9ydCB3aWxsIGNhbGwgc2NoZWRfc2tiKCkKKyAqIChza2IgIT0gTlVMTCkuIEluIGFkZGl0aW9uLCBzY2hlZF9za2IoKSBpcyBjYWxsZWQgZnJvbSB0aGUgaXJxL3NvZnQgaXJxCisgKiBjb250ZXh0IChza2IgPT0gTlVMTCkuCisgKiBUaGUgc2NoZWR1bGVyIG9ubHkgcmV0dXJucyBhIHNrYiAod2hpY2ggd2lsbCB0aGVuIGJlIHNlbnQpIGlmIHRoZQorICogbGVuZ3RoIG9mIHRoZSBza2IgaXMgPD0gdGhlIGN1cnJlbnQgcXVvdGEgb2YgdGhlIG91dHB1dCBwb3J0LgorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNjaGVkX3NrYihzdHJ1Y3Qgc2dlICpzZ2UsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJdW5zaWduZWQgaW50IGNyZWRpdHMpCit7CisJc3RydWN0IHNjaGVkICpzID0gc2dlLT50eF9zY2hlZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JxOworCXVuc2lnbmVkIGludCBpLCBsZW4sIHVwZGF0ZSA9IDE7CisKKwlwcl9kZWJ1Zygic2NoZWRfc2tiICVwXG4iLCBza2IpOworCWlmICghc2tiKSB7CisJCWlmICghcy0+bnVtKQorCQkJcmV0dXJuIE5VTEw7CisJfSBlbHNlIHsKKwkJc2ticSA9ICZzLT5wW3NrYi0+ZGV2LT5pZl9wb3J0XS5za2JxOworCQlfX3NrYl9xdWV1ZV90YWlsKHNrYnEsIHNrYik7CisJCXMtPm51bSsrOworCQlza2IgPSBOVUxMOworCX0KKworCWlmIChjcmVkaXRzIDwgTUFYX1NLQl9GUkFHUyArIDEpCisJCWdvdG8gb3V0OworCisgYWdhaW46CisJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykgeworCQlzLT5wb3J0ID0gKytzLT5wb3J0ICYgKE1BWF9OUE9SVFMgLSAxKTsKKwkJc2ticSA9ICZzLT5wW3MtPnBvcnRdLnNrYnE7CisKKwkJc2tiID0gc2tiX3BlZWsoc2ticSk7CisKKwkJaWYgKCFza2IpCisJCQljb250aW51ZTsKKworCQlsZW4gPSBza2ItPmxlbjsKKwkJaWYgKGxlbiA8PSBzLT5wW3MtPnBvcnRdLmF2YWlsKSB7CisJCQlzLT5wW3MtPnBvcnRdLmF2YWlsIC09IGxlbjsKKwkJCXMtPm51bS0tOworCQkJX19za2JfdW5saW5rKHNrYiwgc2ticSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlza2IgPSBOVUxMOworCX0KKworCWlmICh1cGRhdGUtLSAmJiBzY2hlZF91cGRhdGVfYXZhaWwoc2dlKSkKKwkJZ290byBhZ2FpbjsKKworIG91dDoKKyAJLyogSWYgdGhlcmUgYXJlIG1vcmUgcGVuZGluZyBza2JzLCB3ZSB1c2UgdGhlIGhhcmR3YXJlIHRvIHNjaGVkdWxlIHVzCisJICogYWdhaW4uCisJICovCisJaWYgKHMtPm51bSAmJiAhc2tiKSB7CisJCXN0cnVjdCBjbWRRICpxID0gJnNnZS0+Y21kUVswXTsKKwkJY2xlYXJfYml0KENNRFFfU1RBVF9MQVNUX1BLVF9EQiwgJnEtPnN0YXR1cyk7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KENNRFFfU1RBVF9SVU5OSU5HLCAmcS0+c3RhdHVzKSA9PSAwKSB7CisJCQlzZXRfYml0KENNRFFfU1RBVF9MQVNUX1BLVF9EQiwgJnEtPnN0YXR1cyk7CisJCQl3cml0ZWwoRl9DTURRMF9FTkFCTEUsIHNnZS0+YWRhcHRlci0+cmVncyArIEFfU0dfRE9PUkJFTEwpOworCQl9CisJfQorCXByX2RlYnVnKCJzY2hlZF9za2IgcmV0ICVwXG4iLCBza2IpOworCisJcmV0dXJuIHNrYjsKK30KKworLyoKICAqIFBJTyB0byBpbmRpY2F0ZSB0aGF0IG1lbW9yeSBtYXBwZWQgUSBjb250YWlucyB2YWxpZCBkZXNjcmlwdG9yKHMpLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZG9vcmJlbGxfcGlvKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdmFsKQpAQCAtMzM1LDEwICs1ODEsOSBAQAogCQkJZ290byBlcnJfbm9fbWVtOwogCQltZW1zZXQocS0+ZW50cmllcywgMCwgc2l6ZSk7CiAJCXNpemUgPSBzaXplb2Yoc3RydWN0IGZyZWVsUV9jZSkgKiBxLT5zaXplOwotCQlxLT5jZW50cmllcyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXEtPmNlbnRyaWVzID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFxLT5jZW50cmllcykKIAkJCWdvdG8gZXJyX25vX21lbTsKLQkJbWVtc2V0KHEtPmNlbnRyaWVzLCAwLCBzaXplKTsKIAl9CiAKIAkvKgpAQCAtMzUxLDggKzU5NiwxMSBAQAogCXNnZS0+ZnJlZWxRWyFzZ2UtPmp1bWJvX2ZsXS5yeF9idWZmZXJfc2l6ZSA9IFNHRV9SWF9TTV9CVUZfU0laRSArCiAJCXNpemVvZihzdHJ1Y3QgY3BsX3J4X2RhdGEpICsKIAkJc2dlLT5mcmVlbFFbIXNnZS0+anVtYm9fZmxdLmRtYV9vZmZzZXQ7Ci0Jc2dlLT5mcmVlbFFbc2dlLT5qdW1ib19mbF0ucnhfYnVmZmVyX3NpemUgPSAoMTYgKiAxMDI0KSAtCi0JCVNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSk7CisKKwkJc2l6ZSA9ICgxNiAqIDEwMjQpIC0KKwkJICAgIFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvKSk7CisKKwlzZ2UtPmZyZWVsUVtzZ2UtPmp1bWJvX2ZsXS5yeF9idWZmZXJfc2l6ZSA9IHNpemU7CiAKIAkvKgogCSAqIFNldHVwIHdoaWNoIHNrYiByZWN5Y2xlIFEgc2hvdWxkIGJlIHVzZWQgd2hlbiByZWN5Y2xpbmcgYnVmZmVycyBmcm9tCkBAIC0zODksMTcgKzYzNywyMyBAQAogCXEtPmluX3VzZSAtPSBuOwogCWNlID0gJnEtPmNlbnRyaWVzW2NpZHhdOwogCXdoaWxlIChuLS0pIHsKLQkJaWYgKHEtPnNvcCkKLQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIoY2UsIGRtYV9hZGRyKSwKLQkJCSAJCSBwY2lfdW5tYXBfbGVuKGNlLCBkbWFfbGVuKSwKLQkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQllbHNlCi0JCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBwY2lfdW5tYXBfYWRkcihjZSwgZG1hX2FkZHIpLAotCQkJIAkgICAgICAgcGNpX3VubWFwX2xlbihjZSwgZG1hX2xlbiksCi0JCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlxLT5zb3AgPSAwOworCQlpZiAocS0+c29wKSB7CisJCQlpZiAobGlrZWx5KHBjaV91bm1hcF9sZW4oY2UsIGRtYV9sZW4pKSkgeworCQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwKKwkJCQkJCSBwY2lfdW5tYXBfYWRkcihjZSwgZG1hX2FkZHIpLAorCQkJIAkJCSBwY2lfdW5tYXBfbGVuKGNlLCBkbWFfbGVuKSwKKwkJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlxLT5zb3AgPSAwOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGxpa2VseShwY2lfdW5tYXBfbGVuKGNlLCBkbWFfbGVuKSkpIHsKKwkJCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBwY2lfdW5tYXBfYWRkcihjZSwgZG1hX2FkZHIpLAorCQkJIAkJICAgICAgIHBjaV91bm1hcF9sZW4oY2UsIGRtYV9sZW4pLAorCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl9CisJCX0KIAkJaWYgKGNlLT5za2IpIHsKLQkJCWRldl9rZnJlZV9za2IoY2UtPnNrYik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShjZS0+c2tiKTsKIAkJCXEtPnNvcCA9IDE7CiAJCX0KIAkJY2UrKzsKQEAgLTQ2MywxMCArNzE3LDkgQEAKIAkJCWdvdG8gZXJyX25vX21lbTsKIAkJbWVtc2V0KHEtPmVudHJpZXMsIDAsIHNpemUpOwogCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjbWRRX2NlKSAqIHEtPnNpemU7Ci0JCXEtPmNlbnRyaWVzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJcS0+Y2VudHJpZXMgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXEtPmNlbnRyaWVzKQogCQkJZ290byBlcnJfbm9fbWVtOwotCQltZW1zZXQocS0+Y2VudHJpZXMsIDAsIHNpemUpOwogCX0KIAogCS8qCkBAIC01MDYsNyArNzU5LDcgQEAKIAkJc2dlLT5zZ2VfY29udHJvbCB8PSBGX1ZMQU5fWFRSQUNUOwogCWlmIChhZGFwdGVyLT5vcGVuX2RldmljZV9tYXApIHsKIAkJd3JpdGVsKHNnZS0+c2dlX2NvbnRyb2wsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX0NPTlRST0wpOwotCQlyZWFkbChhZGFwdGVyLT5yZWdzICsgQV9TR19DT05UUk9MKTsgLyogZmx1c2ggKi8KKwkJcmVhZGwoYWRhcHRlci0+cmVncyArIEFfU0dfQ09OVFJPTCk7ICAgLyogZmx1c2ggKi8KIAl9CiB9CiAKQEAgLTU0MCw3ICs3OTMsNiBAQAogCXNnZS0+c2dlX2NvbnRyb2wgPSBGX0NNRFEwX0VOQUJMRSB8IEZfQ01EUTFfRU5BQkxFIHwgRl9GTDBfRU5BQkxFIHwKIAkJRl9GTDFfRU5BQkxFIHwgRl9DUExfRU5BQkxFIHwgRl9SRVNQT05TRV9RVUVVRV9FTkFCTEUgfAogCQlWX0NNRFFfUFJJT1JJVFkoMikgfCBGX0RJU0FCTEVfQ01EUTFfR1RTIHwgRl9JU0NTSV9DT0FMRVNDRSB8Ci0JCUZfRElTQUJMRV9GTDBfR1RTIHwgRl9ESVNBQkxFX0ZMMV9HVFMgfAogCQlWX1JYX1BLVF9PRkZTRVQoc2dlLT5yeF9wa3RfcGFkKTsKIAogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQpAQCAtNTY4LDkgKzgyMCwxMiBAQAogICovCiB2b2lkIHQxX3NnZV9kZXN0cm95KHN0cnVjdCBzZ2UgKnNnZSkKIHsKLQlpZiAoc2dlLT5lc3BpYnVnX3NrYikKLQkJa2ZyZWVfc2tiKHNnZS0+ZXNwaWJ1Z19za2IpOworCWludCBpOwogCisJZm9yX2VhY2hfcG9ydChzZ2UtPmFkYXB0ZXIsIGkpCisJCWZyZWVfcGVyY3B1KHNnZS0+cG9ydF9zdGF0c1tpXSk7CisKKwlrZnJlZShzZ2UtPnR4X3NjaGVkKTsKIAlmcmVlX3R4X3Jlc291cmNlcyhzZ2UpOwogCWZyZWVfcnhfcmVzb3VyY2VzKHNnZSk7CiAJa2ZyZWUoc2dlKTsKQEAgLTczNSwxNCArOTkwLDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBzZ2VfaW50cl9jb3VudHMgKnQxX3NnZV9nZXRfaW50cl9jb3VudHMoc3RydWN0IHNnZSAqc2dlKQorY29uc3Qgc3RydWN0IHNnZV9pbnRyX2NvdW50cyAqdDFfc2dlX2dldF9pbnRyX2NvdW50cyhjb25zdCBzdHJ1Y3Qgc2dlICpzZ2UpCiB7CiAJcmV0dXJuICZzZ2UtPnN0YXRzOwogfQogCi1jb25zdCBzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgKnQxX3NnZV9nZXRfcG9ydF9zdGF0cyhzdHJ1Y3Qgc2dlICpzZ2UsIGludCBwb3J0KQordm9pZCB0MV9zZ2VfZ2V0X3BvcnRfc3RhdHMoY29uc3Qgc3RydWN0IHNnZSAqc2dlLCBpbnQgcG9ydCwKKwkJCSAgIHN0cnVjdCBzZ2VfcG9ydF9zdGF0cyAqc3MpCiB7Ci0JcmV0dXJuICZzZ2UtPnBvcnRfc3RhdHNbcG9ydF07CisJaW50IGNwdTsKKworCW1lbXNldChzcywgMCwgc2l6ZW9mKCpzcykpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IHNnZV9wb3J0X3N0YXRzICpzdCA9IHBlcl9jcHVfcHRyKHNnZS0+cG9ydF9zdGF0c1twb3J0XSwgY3B1KTsKKworCQlzcy0+cnhfcGFja2V0cyArPSBzdC0+cnhfcGFja2V0czsKKwkJc3MtPnJ4X2Nzb19nb29kICs9IHN0LT5yeF9jc29fZ29vZDsKKwkJc3MtPnR4X3BhY2tldHMgKz0gc3QtPnR4X3BhY2tldHM7CisJCXNzLT50eF9jc28gKz0gc3QtPnR4X2NzbzsKKwkJc3MtPnR4X3RzbyArPSBzdC0+dHhfdHNvOworCQlzcy0+dmxhbl94dHJhY3QgKz0gc3QtPnZsYW5feHRyYWN0OworCQlzcy0+dmxhbl9pbnNlcnQgKz0gc3QtPnZsYW5faW5zZXJ0OworCX0KIH0KIAogLyoqCkBAIC04NTYsNiArMTEyNSw5OSBAQAogfQogCiAvKgorICogVDEvVDIgU0dFIGxpbWl0cyB0aGUgbWF4aW11bSBETUEgc2l6ZSBwZXIgVFggZGVzY3JpcHRvciB0bworICogU0dFX1RYX0RFU0NfTUFYX1BMRU4gKDE2S0IpLiBJZiB0aGUgUEFHRV9TSVpFIGlzIGxhcmdlciB0aGFuIDE2S0IsIHRoZQorICogc3RhY2sgbWlnaHQgc2VuZCBtb3JlIHRoYW4gU0dFX1RYX0RFU0NfTUFYX1BMRU4gaW4gYSBjb250aWd1b3VzIG1hbm5lci4KKyAqIE5vdGUgdGhhdCB0aGUgKl9sYXJnZV9wYWdlX3R4X2Rlc2NzIHN0dWZmIHdpbGwgYmUgb3B0aW1pemVkIG91dCB3aGVuCisgKiBQQUdFX1NJWkUgPD0gU0dFX1RYX0RFU0NfTUFYX1BMRU4uCisgKgorICogY29tcHV0ZV9sYXJnZV9wYWdlX2Rlc2NzKCkgY29tcHV0ZXMgaG93IG1hbnkgYWRkaXRpb25hbCBkZXNjcmlwdG9ycyBhcmUKKyAqIHJlcXVpcmVkIHRvIGJyZWFrIGRvd24gdGhlIHN0YWNrJ3MgcmVxdWVzdC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY29tcHV0ZV9sYXJnZV9wYWdlX3R4X2Rlc2NzKHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlpZiAoUEFHRV9TSVpFID4gU0dFX1RYX0RFU0NfTUFYX1BMRU4pIHsKKwkJdW5zaWduZWQgaW50IG5mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCXVuc2lnbmVkIGludCBpLCBsZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJCXdoaWxlIChsZW4gPiBTR0VfVFhfREVTQ19NQVhfUExFTikgeworCQkJY291bnQrKzsKKwkJCWxlbiAtPSBTR0VfVFhfREVTQ19NQVhfUExFTjsKKwkJfQorCQlmb3IgKGkgPSAwOyBuZnJhZ3MtLTsgaSsrKSB7CisJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQlsZW4gPSBmcmFnLT5zaXplOworCQkJd2hpbGUgKGxlbiA+IFNHRV9UWF9ERVNDX01BWF9QTEVOKSB7CisJCQkJY291bnQrKzsKKwkJCQlsZW4gLT0gU0dFX1RYX0RFU0NfTUFYX1BMRU47CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogV3JpdGUgYSBjbWRRIGVudHJ5LgorICoKKyAqIFNpbmNlIHRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSAnZmxhZ3MnIGZpZWxkLCBpdCBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiB3cml0ZSB0aGUgZmlyc3QgY21kUSBlbnRyeS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3R4X2Rlc2Moc3RydWN0IGNtZFFfZSAqZSwgZG1hX2FkZHJfdCBtYXBwaW5nLAorCQkJCSB1bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgZ2VuLAorCQkJCSB1bnNpZ25lZCBpbnQgZW9wKQoreworCWlmICh1bmxpa2VseShsZW4gPiBTR0VfVFhfREVTQ19NQVhfUExFTikpCisJCUJVRygpOworCWUtPmFkZHJfbG8gPSAodTMyKW1hcHBpbmc7CisJZS0+YWRkcl9oaSA9ICh1NjQpbWFwcGluZyA+PiAzMjsKKwllLT5sZW5fZ2VuID0gVl9DTURfTEVOKGxlbikgfCBWX0NNRF9HRU4xKGdlbik7CisJZS0+ZmxhZ3MgPSBGX0NNRF9EQVRBVkFMSUQgfCBWX0NNRF9FT1AoZW9wKSB8IFZfQ01EX0dFTjIoZ2VuKTsKK30KKworLyoKKyAqIFNlZSBjb21tZW50IGZvciBwcmV2aW91cyBmdW5jdGlvbi4KKyAqCisgKiB3cml0ZV90eF9kZXNjc19sYXJnZV9wYWdlKCkgd3JpdGVzIGFkZGl0aW9uYWwgU0dFIHR4IGRlc2NyaXB0b3JzIGlmCisgKiAqZGVzY19sZW4gZXhjZWVkcyBIVydzIGNhcGFiaWxpdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHdyaXRlX2xhcmdlX3BhZ2VfdHhfZGVzY3ModW5zaWduZWQgaW50IHBpZHgsCisJCQkJCQkgICAgIHN0cnVjdCBjbWRRX2UgKiplLAorCQkJCQkJICAgICBzdHJ1Y3QgY21kUV9jZSAqKmNlLAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmdlbiwKKwkJCQkJCSAgICAgZG1hX2FkZHJfdCAqZGVzY19tYXBwaW5nLAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRlc2NfbGVuLAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgbmZyYWdzLAorCQkJCQkJICAgICBzdHJ1Y3QgY21kUSAqcSkKK3sKKwlpZiAoUEFHRV9TSVpFID4gU0dFX1RYX0RFU0NfTUFYX1BMRU4pIHsKKwkJc3RydWN0IGNtZFFfZSAqZTEgPSAqZTsKKwkJc3RydWN0IGNtZFFfY2UgKmNlMSA9ICpjZTsKKworCQl3aGlsZSAoKmRlc2NfbGVuID4gU0dFX1RYX0RFU0NfTUFYX1BMRU4pIHsKKwkJCSpkZXNjX2xlbiAtPSBTR0VfVFhfREVTQ19NQVhfUExFTjsKKwkJCXdyaXRlX3R4X2Rlc2MoZTEsICpkZXNjX21hcHBpbmcsIFNHRV9UWF9ERVNDX01BWF9QTEVOLAorCQkJCSAgICAgICpnZW4sIG5mcmFncyA9PSAwICYmICpkZXNjX2xlbiA9PSAwKTsKKwkJCWNlMS0+c2tiID0gTlVMTDsKKwkJCXBjaV91bm1hcF9sZW5fc2V0KGNlMSwgZG1hX2xlbiwgMCk7CisJCQkqZGVzY19tYXBwaW5nICs9IFNHRV9UWF9ERVNDX01BWF9QTEVOOworCQkJaWYgKCpkZXNjX2xlbikgeworCQkJCWNlMSsrOworCQkJCWUxKys7CisJCQkJaWYgKCsrcGlkeCA9PSBxLT5zaXplKSB7CisJCQkJCXBpZHggPSAwOworCQkJCQkqZ2VuIF49IDE7CisJCQkJCWNlMSA9IHEtPmNlbnRyaWVzOworCQkJCQllMSA9IHEtPmVudHJpZXM7CisJCQkJfQorCQkJfQorCQl9CisJCSplID0gZTE7CisJCSpjZSA9IGNlMTsKKwl9CisJcmV0dXJuIHBpZHg7Cit9CisKKy8qCiAgKiBXcml0ZSB0aGUgY29tbWFuZCBkZXNjcmlwdG9ycyB0byB0cmFuc21pdCB0aGUgZ2l2ZW4gc2tiIHN0YXJ0aW5nIGF0CiAgKiBkZXNjcmlwdG9yIHBpZHggd2l0aCB0aGUgZ2l2ZW4gZ2VuZXJhdGlvbi4KICAqLwpAQCAtODYzLDUwICsxMjI1LDg0IEBACiAJCQkJICB1bnNpZ25lZCBpbnQgcGlkeCwgdW5zaWduZWQgaW50IGdlbiwKIAkJCQkgIHN0cnVjdCBjbWRRICpxKQogewotCWRtYV9hZGRyX3QgbWFwcGluZzsKKwlkbWFfYWRkcl90IG1hcHBpbmcsIGRlc2NfbWFwcGluZzsKIAlzdHJ1Y3QgY21kUV9lICplLCAqZTE7CiAJc3RydWN0IGNtZFFfY2UgKmNlOwotCXVuc2lnbmVkIGludCBpLCBmbGFncywgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl1bnNpZ25lZCBpbnQgaSwgZmxhZ3MsIGZpcnN0X2Rlc2NfbGVuLCBkZXNjX2xlbiwKKwkgICAgbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKworCWUgPSBlMSA9ICZxLT5lbnRyaWVzW3BpZHhdOworCWNlID0gJnEtPmNlbnRyaWVzW3BpZHhdOwogCiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkgc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQljZSA9ICZxLT5jZW50cmllc1twaWR4XTsKKwkJCQlza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJZGVzY19tYXBwaW5nID0gbWFwcGluZzsKKwlkZXNjX2xlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKworCWZsYWdzID0gRl9DTURfREFUQVZBTElEIHwgRl9DTURfU09QIHwKKwkgICAgVl9DTURfRU9QKG5mcmFncyA9PSAwICYmIGRlc2NfbGVuIDw9IFNHRV9UWF9ERVNDX01BWF9QTEVOKSB8CisJICAgIFZfQ01EX0dFTjIoZ2VuKTsKKwlmaXJzdF9kZXNjX2xlbiA9IChkZXNjX2xlbiA8PSBTR0VfVFhfREVTQ19NQVhfUExFTikgPworCSAgICBkZXNjX2xlbiA6IFNHRV9UWF9ERVNDX01BWF9QTEVOOworCWUtPmFkZHJfbG8gPSAodTMyKWRlc2NfbWFwcGluZzsKKwllLT5hZGRyX2hpID0gKHU2NClkZXNjX21hcHBpbmcgPj4gMzI7CisJZS0+bGVuX2dlbiA9IFZfQ01EX0xFTihmaXJzdF9kZXNjX2xlbikgfCBWX0NNRF9HRU4xKGdlbik7CisJY2UtPnNrYiA9IE5VTEw7CisJcGNpX3VubWFwX2xlbl9zZXQoY2UsIGRtYV9sZW4sIDApOworCisJaWYgKFBBR0VfU0laRSA+IFNHRV9UWF9ERVNDX01BWF9QTEVOICYmCisJICAgIGRlc2NfbGVuID4gU0dFX1RYX0RFU0NfTUFYX1BMRU4pIHsKKwkJZGVzY19tYXBwaW5nICs9IGZpcnN0X2Rlc2NfbGVuOworCQlkZXNjX2xlbiAtPSBmaXJzdF9kZXNjX2xlbjsKKwkJZTErKzsKKwkJY2UrKzsKKwkJaWYgKCsrcGlkeCA9PSBxLT5zaXplKSB7CisJCQlwaWR4ID0gMDsKKwkJCWdlbiBePSAxOworCQkJZTEgPSBxLT5lbnRyaWVzOworCQkJY2UgPSBxLT5jZW50cmllczsKKwkJfQorCQlwaWR4ID0gd3JpdGVfbGFyZ2VfcGFnZV90eF9kZXNjcyhwaWR4LCAmZTEsICZjZSwgJmdlbiwKKwkJCQkJCSAmZGVzY19tYXBwaW5nLCAmZGVzY19sZW4sCisJCQkJCQkgbmZyYWdzLCBxKTsKKworCQlpZiAobGlrZWx5KGRlc2NfbGVuKSkKKwkJCXdyaXRlX3R4X2Rlc2MoZTEsIGRlc2NfbWFwcGluZywgZGVzY19sZW4sIGdlbiwKKwkJCQkgICAgICBuZnJhZ3MgPT0gMCk7CisJfQorCiAJY2UtPnNrYiA9IE5VTEw7CiAJcGNpX3VubWFwX2FkZHJfc2V0KGNlLCBkbWFfYWRkciwgbWFwcGluZyk7CiAJcGNpX3VubWFwX2xlbl9zZXQoY2UsIGRtYV9sZW4sIHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbik7CiAKLQlmbGFncyA9IEZfQ01EX0RBVEFWQUxJRCB8IEZfQ01EX1NPUCB8IFZfQ01EX0VPUChuZnJhZ3MgPT0gMCkgfAotCQlWX0NNRF9HRU4yKGdlbik7Ci0JZSA9ICZxLT5lbnRyaWVzW3BpZHhdOwotCWUtPmFkZHJfbG8gPSAodTMyKW1hcHBpbmc7Ci0JZS0+YWRkcl9oaSA9ICh1NjQpbWFwcGluZyA+PiAzMjsKLQllLT5sZW5fZ2VuID0gVl9DTURfTEVOKHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbikgfCBWX0NNRF9HRU4xKGdlbik7Ci0JZm9yIChlMSA9IGUsIGkgPSAwOyBuZnJhZ3MtLTsgaSsrKSB7CisJZm9yIChpID0gMDsgbmZyYWdzLS07IGkrKykgewogCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0KLQkJY2UrKzsKIAkJZTErKzsKKwkJY2UrKzsKIAkJaWYgKCsrcGlkeCA9PSBxLT5zaXplKSB7CiAJCQlwaWR4ID0gMDsKIAkJCWdlbiBePSAxOwotCQkJY2UgPSBxLT5jZW50cmllczsKIAkJCWUxID0gcS0+ZW50cmllczsKKwkJCWNlID0gcS0+Y2VudHJpZXM7CiAJCX0KIAogCQltYXBwaW5nID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIGZyYWctPnBhZ2UsCiAJCQkJICAgICAgIGZyYWctPnBhZ2Vfb2Zmc2V0LCBmcmFnLT5zaXplLAogCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZGVzY19tYXBwaW5nID0gbWFwcGluZzsKKwkJZGVzY19sZW4gPSBmcmFnLT5zaXplOworCisJCXBpZHggPSB3cml0ZV9sYXJnZV9wYWdlX3R4X2Rlc2NzKHBpZHgsICZlMSwgJmNlLCAmZ2VuLAorCQkJCQkJICZkZXNjX21hcHBpbmcsICZkZXNjX2xlbiwKKwkJCQkJCSBuZnJhZ3MsIHEpOworCQlpZiAobGlrZWx5KGRlc2NfbGVuKSkKKwkJCXdyaXRlX3R4X2Rlc2MoZTEsIGRlc2NfbWFwcGluZywgZGVzY19sZW4sIGdlbiwKKwkJCQkgICAgICBuZnJhZ3MgPT0gMCk7CiAJCWNlLT5za2IgPSBOVUxMOwogCQlwY2lfdW5tYXBfYWRkcl9zZXQoY2UsIGRtYV9hZGRyLCBtYXBwaW5nKTsKIAkJcGNpX3VubWFwX2xlbl9zZXQoY2UsIGRtYV9sZW4sIGZyYWctPnNpemUpOwotCi0JCWUxLT5hZGRyX2xvID0gKHUzMiltYXBwaW5nOwotCQllMS0+YWRkcl9oaSA9ICh1NjQpbWFwcGluZyA+PiAzMjsKLQkJZTEtPmxlbl9nZW4gPSBWX0NNRF9MRU4oZnJhZy0+c2l6ZSkgfCBWX0NNRF9HRU4xKGdlbik7Ci0JCWUxLT5mbGFncyA9IEZfQ01EX0RBVEFWQUxJRCB8IFZfQ01EX0VPUChuZnJhZ3MgPT0gMCkgfAotCQkJICAgIFZfQ01EX0dFTjIoZ2VuKTsKIAl9Ci0KIAljZS0+c2tiID0gc2tiOwogCXdtYigpOwogCWUtPmZsYWdzID0gZmxhZ3M7CkBAIC05MjAsMjYgKzEzMTYsNTYgQEAKIAl1bnNpZ25lZCBpbnQgcmVjbGFpbSA9IHEtPnByb2Nlc3NlZCAtIHEtPmNsZWFuZWQ7CiAKIAlpZiAocmVjbGFpbSkgeworCQlwcl9kZWJ1ZygicmVjbGFpbV9jb21wbGV0ZWRfdHggcHJvY2Vzc2VkOiVkIGNsZWFuZWQ6JWRcbiIsCisJCQkgcS0+cHJvY2Vzc2VkLCBxLT5jbGVhbmVkKTsKIAkJZnJlZV9jbWRRX2J1ZmZlcnMoc2dlLCBxLCByZWNsYWltKTsKIAkJcS0+Y2xlYW5lZCArPSByZWNsYWltOwogCX0KIH0KIAotI2lmbmRlZiBTRVRfRVRIVE9PTF9PUFMKLSMgZGVmaW5lIF9fbmV0aWZfcnhfY29tcGxldGUoZGV2KSBuZXRpZl9yeF9jb21wbGV0ZShkZXYpCi0jZW5kaWYKLQogLyoKLSAqIFdlIGNhbm5vdCB1c2UgdGhlIHN0YW5kYXJkIG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoKSBiZWNhdXNlIHdlIGhhdmUgbXVsdGlwbGUKLSAqIHBvcnRzIHBsdXMgdGhlIFRPRSBhbGwgbXVsdGlwbGV4aW5nIG9udG8gYSBzaW5nbGUgcmVzcG9uc2UgcXVldWUsIHRoZXJlZm9yZQotICogYWNjZXB0aW5nIG5ldyByZXNwb25zZXMgY2Fubm90IGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgYW55IHBhcnRpY3VsYXIgcG9ydC4KLSAqIFNvIGRlZmluZSBvdXIgb3duIGVxdWl2YWxlbnQgdGhhdCBvbWl0cyB0aGUgbmV0aWZfcnVubmluZygpIHRlc3QuCisgKiBDYWxsZWQgZnJvbSB0YXNrbGV0LiBDaGVja3MgdGhlIHNjaGVkdWxlciBmb3IgYW55CisgKiBwZW5kaW5nIHNrYnMgdGhhdCBjYW4gYmUgc2VudC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbmFwaV9zY2hlZHVsZV9wcmVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCByZXN0YXJ0X3NjaGVkKHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXJldHVybiAhdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVfUlhfU0NIRUQsICZkZXYtPnN0YXRlKTsKLX0KKwlzdHJ1Y3Qgc2dlICpzZ2UgPSAoc3RydWN0IHNnZSAqKSBhcmc7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZ2UtPmFkYXB0ZXI7CisJc3RydWN0IGNtZFEgKnEgPSAmc2dlLT5jbWRRWzBdOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGNyZWRpdHMsIHF1ZXVlZF9za2IgPSAwOwogCisJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKKwlyZWNsYWltX2NvbXBsZXRlZF90eChzZ2UsIHEpOworCisJY3JlZGl0cyA9IHEtPnNpemUgLSBxLT5pbl91c2U7CisJcHJfZGVidWcoInJlc3RhcnRfc2NoZWQgY3JlZGl0cz0lZFxuIiwgY3JlZGl0cyk7CisJd2hpbGUgKChza2IgPSBzY2hlZF9za2Ioc2dlLCBOVUxMLCBjcmVkaXRzKSkgIT0gTlVMTCkgeworCQl1bnNpZ25lZCBpbnQgZ2VuYml0LCBwaWR4LCBjb3VudDsKKwkgICAgICAgIGNvdW50ID0gMSArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisgICAgICAgCQljb3VudCArPSBjb21wdXRlX2xhcmdlX3BhZ2VfdHhfZGVzY3Moc2tiKTsKKwkJcS0+aW5fdXNlICs9IGNvdW50OworCQlnZW5iaXQgPSBxLT5nZW5iaXQ7CisJCXBpZHggPSBxLT5waWR4OworCQlxLT5waWR4ICs9IGNvdW50OworCQlpZiAocS0+cGlkeCA+PSBxLT5zaXplKSB7CisJCQlxLT5waWR4IC09IHEtPnNpemU7CisJCQlxLT5nZW5iaXQgXj0gMTsKKwkJfQorCQl3cml0ZV90eF9kZXNjcyhhZGFwdGVyLCBza2IsIHBpZHgsIGdlbmJpdCwgcSk7CisJICAgICAgICBjcmVkaXRzID0gcS0+c2l6ZSAtIHEtPmluX3VzZTsKKwkJcXVldWVkX3NrYiA9IDE7CisJfQorCisJaWYgKHF1ZXVlZF9za2IpIHsKKwkJY2xlYXJfYml0KENNRFFfU1RBVF9MQVNUX1BLVF9EQiwgJnEtPnN0YXR1cyk7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0KENNRFFfU1RBVF9SVU5OSU5HLCAmcS0+c3RhdHVzKSA9PSAwKSB7CisJCQlzZXRfYml0KENNRFFfU1RBVF9MQVNUX1BLVF9EQiwgJnEtPnN0YXR1cyk7CisJCQl3cml0ZWwoRl9DTURRMF9FTkFCTEUsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX0RPT1JCRUxMKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcS0+bG9jayk7Cit9CiAKIC8qKgogICoJc2dlX3J4IC0gcHJvY2VzcyBhbiBpbmdyZXNzIGV0aGVybmV0IHBhY2tldApAQCAtOTU0LDMxICsxMzgwLDM5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgY3BsX3J4X3BrdCAqcDsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IHNnZS0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgKnN0OwogCi0Jc2dlLT5zdGF0cy5ldGhlcm5ldF9wa3RzKys7CiAJc2tiID0gZ2V0X3BhY2tldChhZGFwdGVyLT5wZGV2LCBmbCwgbGVuIC0gc2dlLT5yeF9wa3RfcGFkLAogCQkJIHNnZS0+cnhfcGt0X3BhZCwgMiwgU0dFX1JYX0NPUFlfVEhSRVMsCiAJCQkgU0dFX1JYX0RST1BfVEhSRVMpOwotCWlmICghc2tiKSB7Ci0JCXNnZS0+cG9ydF9zdGF0c1swXS5yeF9kcm9wcysrOyAvKiBjaGFyZ2Ugb25seSBwb3J0IDAgZm9yIG5vdyAqLworCWlmICh1bmxpa2VseSghc2tiKSkgeworCQlzZ2UtPnN0YXRzLnJ4X2Ryb3BzKys7CiAJCXJldHVybiAwOwogCX0KIAogCXAgPSAoc3RydWN0IGNwbF9yeF9wa3QgKilza2ItPmRhdGE7CiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnApKTsKKwlpZiAocC0+aWZmID49IGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKwogCXNrYi0+ZGV2ID0gYWRhcHRlci0+cG9ydFtwLT5pZmZdLmRldjsKIAlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJc3QgPSBwZXJfY3B1X3B0cihzZ2UtPnBvcnRfc3RhdHNbcC0+aWZmXSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdC0+cnhfcGFja2V0cysrOworCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwogCWlmICgoYWRhcHRlci0+ZmxhZ3MgJiBSWF9DU1VNX0VOQUJMRUQpICYmIHAtPmNzdW0gPT0gMHhmZmZmICYmCiAJICAgIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApICYmCiAJICAgIChza2ItPmRhdGFbOV0gPT0gSVBQUk9UT19UQ1AgfHwgc2tiLT5kYXRhWzldID09IElQUFJPVE9fVURQKSkgewotCQlzZ2UtPnBvcnRfc3RhdHNbcC0+aWZmXS5yeF9jc29fZ29vZCsrOworCQkrK3N0LT5yeF9jc29fZ29vZDsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9IGVsc2UKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJaWYgKHVubGlrZWx5KGFkYXB0ZXItPnZsYW5fZ3JwICYmIHAtPnZsYW5fdmFsaWQpKSB7Ci0JCXNnZS0+cG9ydF9zdGF0c1twLT5pZmZdLnZsYW5feHRyYWN0Kys7CisJCXN0LT52bGFuX3h0cmFjdCsrOwogCQlpZiAoYWRhcHRlci0+cGFyYW1zLnNnZS5wb2xsaW5nKQogCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCiAJCQkJCQkgbnRvaHMocC0+dmxhbikpOwpAQCAtMTAzOSwxOCArMTQ3MywyNCBAQAogCXN0cnVjdCBjbWRRICpjbWRxID0gJnNnZS0+Y21kUVswXTsKIAogCWNtZHEtPnByb2Nlc3NlZCArPSBwcjA7Ci0KKwlpZiAoZmxhZ3MgJiAoRl9GTDBfRU5BQkxFIHwgRl9GTDFfRU5BQkxFKSkgeworCQlmcmVlbFFzX2VtcHR5KHNnZSk7CisJCWZsYWdzICY9IH4oRl9GTDBfRU5BQkxFIHwgRl9GTDFfRU5BQkxFKTsKKwl9CiAJaWYgKGZsYWdzICYgRl9DTURRMF9FTkFCTEUpIHsKIAkJY2xlYXJfYml0KENNRFFfU1RBVF9SVU5OSU5HLCAmY21kcS0+c3RhdHVzKTsKLQkKKwogCQlpZiAoY21kcS0+Y2xlYW5lZCArIGNtZHEtPmluX3VzZSAhPSBjbWRxLT5wcm9jZXNzZWQgJiYKIAkJICAgICF0ZXN0X2FuZF9zZXRfYml0KENNRFFfU1RBVF9MQVNUX1BLVF9EQiwgJmNtZHEtPnN0YXR1cykpIHsKIAkJCXNldF9iaXQoQ01EUV9TVEFUX1JVTk5JTkcsICZjbWRxLT5zdGF0dXMpOwogCQkJd3JpdGVsKEZfQ01EUTBfRU5BQkxFLCBhZGFwdGVyLT5yZWdzICsgQV9TR19ET09SQkVMTCk7CiAJCX0KLQkgCWZsYWdzICY9IH5GX0NNRFEwX0VOQUJMRTsKKwkJaWYgKHNnZS0+dHhfc2NoZWQpCisJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzZ2UtPnR4X3NjaGVkLT5zY2hlZF90c2spOworCisJCWZsYWdzICY9IH5GX0NNRFEwX0VOQUJMRTsKIAl9Ci0JCisKIAlpZiAodW5saWtlbHkoc2dlLT5zdG9wcGVkX3R4X3F1ZXVlcyAhPSAwKSkKIAkJcmVzdGFydF90eF9xdWV1ZXMoc2dlKTsKIApAQCAtMTI0MSwyMCArMTY4MSwyMSBAQAogCQlpZiAoZS0+R2VuZXJhdGlvbkJpdCA9PSBxLT5nZW5iaXQpIHsKIAkJCWlmIChlLT5EYXRhVmFsaWQgfHwKIAkJCSAgICBwcm9jZXNzX3B1cmVfcmVzcG9uc2VzKGFkYXB0ZXIsIGUpKSB7Ci0JCQkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoc2dlLT5uZXRkZXYpKSkKKwkJCQlpZiAobGlrZWx5KF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChzZ2UtPm5ldGRldikpKQogCQkJCQlfX25ldGlmX3J4X3NjaGVkdWxlKHNnZS0+bmV0ZGV2KTsKLQkJCQllbHNlCi0JCQkJCXByaW50ayhLRVJOX0NSSVQKKwkJCQllbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkJICAgICAgICJOQVBJIHNjaGVkdWxlIGZhaWx1cmUhXG4iKTsKIAkJCX0gZWxzZQotCQkJd3JpdGVsKHEtPmNpZHgsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX1NMRUVQSU5HKTsKKwkJCQl3cml0ZWwocS0+Y2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOworCiAJCQloYW5kbGVkID0gMTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9IGVsc2UKLQkJd3JpdGVsKHEtPmNpZHgsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX1NMRUVQSU5HKTsKLQl9ICBlbHNlCi0JaWYgKHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0NBVVNFKSAmIEZfUExfSU5UUl9TR0VfREFUQSkKLQkJcHJpbnRrKEtFUk5fRVJSICJkYXRhIGludGVycnVwdCB3aGlsZSBOQVBJIHJ1bm5pbmdcbiIpOworCQkJd3JpdGVsKHEtPmNpZHgsIGFkYXB0ZXItPnJlZ3MgKyBBX1NHX1NMRUVQSU5HKTsKKwl9ICBlbHNlIGlmIChyZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSkgJiBGX1BMX0lOVFJfU0dFX0RBVEEpIHsKKwkgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGF0YSBpbnRlcnJ1cHQgd2hpbGUgTkFQSSBydW5uaW5nXG4iKTsKKwl9CiAJCiAJaGFuZGxlZCA9IHQxX3Nsb3dfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwogCWlmICghaGFuZGxlZCkKQEAgLTEzMzUsMzQgKzE3NzYsNTkgQEAKIHsKIAlzdHJ1Y3Qgc2dlICpzZ2UgPSBhZGFwdGVyLT5zZ2U7CiAJc3RydWN0IGNtZFEgKnEgPSAmc2dlLT5jbWRRW3FpZF07Ci0JdW5zaWduZWQgaW50IGNyZWRpdHMsIHBpZHgsIGdlbmJpdCwgY291bnQ7CisJdW5zaWduZWQgaW50IGNyZWRpdHMsIHBpZHgsIGdlbmJpdCwgY291bnQsIHVzZV9zY2hlZF9za2IgPSAwOwogCi0Jc3Bpbl9sb2NrKCZxLT5sb2NrKTsKKwlpZiAoIXNwaW5fdHJ5bG9jaygmcS0+bG9jaykpCisJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOworCiAJcmVjbGFpbV9jb21wbGV0ZWRfdHgoc2dlLCBxKTsKIAogCXBpZHggPSBxLT5waWR4OwogCWNyZWRpdHMgPSBxLT5zaXplIC0gcS0+aW5fdXNlOwogCWNvdW50ID0gMSArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJY291bnQgKz0gY29tcHV0ZV9sYXJnZV9wYWdlX3R4X2Rlc2NzKHNrYik7CiAKLQl7CS8qIEV0aGVybmV0IHBhY2tldCAqLwotCSAJaWYgKHVubGlrZWx5KGNyZWRpdHMgPCBjb3VudCkpIHsKKwkvKiBFdGhlcm5ldCBwYWNrZXQgKi8KKwlpZiAodW5saWtlbHkoY3JlZGl0cyA8IGNvdW50KSkgeworCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQkJc2V0X2JpdChkZXYtPmlmX3BvcnQsICZzZ2UtPnN0b3BwZWRfdHhfcXVldWVzKTsKIAkJCXNnZS0+c3RhdHMuY21kUV9mdWxsWzJdKys7Ci0JCQlzcGluX3VubG9jaygmcS0+bG9jayk7Ci0JCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKLQkJCQlDSF9FUlIoIiVzOiBUeCByaW5nIGZ1bGwgd2hpbGUgcXVldWUgYXdha2UhXG4iLAotCQkJCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKLQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJCUNIX0VSUigiJXM6IFR4IHJpbmcgZnVsbCB3aGlsZSBxdWV1ZSBhd2FrZSFcbiIsCisJCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCX0KLQkJaWYgKHVubGlrZWx5KGNyZWRpdHMgLSBjb3VudCA8IHEtPnN0b3BfdGhyZXMpKSB7Ci0JCQlzZ2UtPnN0YXRzLmNtZFFfZnVsbFsyXSsrOwotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkJc2V0X2JpdChkZXYtPmlmX3BvcnQsICZzZ2UtPnN0b3BwZWRfdHhfcXVldWVzKTsKLQkJfQorCQlzcGluX3VubG9jaygmcS0+bG9jayk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CisKKwlpZiAodW5saWtlbHkoY3JlZGl0cyAtIGNvdW50IDwgcS0+c3RvcF90aHJlcykpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlzZXRfYml0KGRldi0+aWZfcG9ydCwgJnNnZS0+c3RvcHBlZF90eF9xdWV1ZXMpOworCQlzZ2UtPnN0YXRzLmNtZFFfZnVsbFsyXSsrOworCX0KKworCS8qIFQyMDQgY21kUTAgc2ticyB0aGF0IGFyZSBkZXN0aW5lZCBmb3IgYSBjZXJ0YWluIHBvcnQgaGF2ZSB0byBnbworCSAqIHRocm91Z2ggdGhlIHNjaGVkdWxlci4KKwkgKi8KKwlpZiAoc2dlLT50eF9zY2hlZCAmJiAhcWlkICYmIHNrYi0+ZGV2KSB7CisJdXNlX3NjaGVkOgorCQl1c2Vfc2NoZWRfc2tiID0gMTsKKwkJLyogTm90ZSB0aGF0IHRoZSBzY2hlZHVsZXIgbWlnaHQgcmV0dXJuIGEgZGlmZmVyZW50IHNrYiB0aGFuCisJCSAqIHRoZSBvbmUgcGFzc2VkIGluLgorCQkgKi8KKwkJc2tiID0gc2NoZWRfc2tiKHNnZSwgc2tiLCBjcmVkaXRzKTsKKwkJaWYgKCFza2IpIHsKKwkJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CisJCX0KKwkJcGlkeCA9IHEtPnBpZHg7CisJCWNvdW50ID0gMSArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCWNvdW50ICs9IGNvbXB1dGVfbGFyZ2VfcGFnZV90eF9kZXNjcyhza2IpOworCX0KKwogCXEtPmluX3VzZSArPSBjb3VudDsKIAlnZW5iaXQgPSBxLT5nZW5iaXQ7CisJcGlkeCA9IHEtPnBpZHg7CiAJcS0+cGlkeCArPSBjb3VudDsKIAlpZiAocS0+cGlkeCA+PSBxLT5zaXplKSB7CiAJCXEtPnBpZHggLT0gcS0+c2l6ZTsKQEAgLTEzODgsNiArMTg1NCwxNCBAQAogCQkJd3JpdGVsKEZfQ01EUTBfRU5BQkxFLCBhZGFwdGVyLT5yZWdzICsgQV9TR19ET09SQkVMTCk7CiAJCX0KIAl9CisKKwlpZiAodXNlX3NjaGVkX3NrYikgeworCQlpZiAoc3Bpbl90cnlsb2NrKCZxLT5sb2NrKSkgeworCQkJY3JlZGl0cyA9IHEtPnNpemUgLSBxLT5pbl91c2U7CisJCQlza2IgPSBOVUxMOworCQkJZ290byB1c2Vfc2NoZWQ7CisJCX0KKwl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMTQxMiwxNiArMTg4NiwyMCBAQAogaW50IHQxX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGRldi0+cHJpdjsKLQlzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgKnN0ID0gJmFkYXB0ZXItPnNnZS0+cG9ydF9zdGF0c1tkZXYtPmlmX3BvcnRdOwogCXN0cnVjdCBzZ2UgKnNnZSA9IGFkYXB0ZXItPnNnZTsKKwlzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgKnN0ID0gcGVyX2NwdV9wdHIoc2dlLT5wb3J0X3N0YXRzW2Rldi0+aWZfcG9ydF0sIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJc3RydWN0IGNwbF90eF9wa3QgKmNwbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IgPSBza2I7CisJaW50IHJldDsKIAotI2lmZGVmIE5FVElGX0ZfVFNPCi0JaWYgKHNrYl9pc19nc28oc2tiKSkgeworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0NQTDUpKQorCQlnb3RvIHNlbmQ7CisKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgewogCQlpbnQgZXRoX3R5cGU7CiAJCXN0cnVjdCBjcGxfdHhfcGt0X2xzbyAqaGRyOwogCi0JCXN0LT50c28rKzsKKwkJKytzdC0+dHhfdHNvOwogCiAJCWV0aF90eXBlID0gc2tiLT5uaC5yYXcgLSBza2ItPmRhdGEgPT0gRVRIX0hMRU4gPwogCQkJQ1BMX0VUSF9JSSA6IENQTF9FVEhfSUlfVkxBTjsKQEAgLTE0MzIsMTMgKzE5MTAsMTAgQEAKIAkJaGRyLT5pcF9oZHJfd29yZHMgPSBza2ItPm5oLmlwaC0+aWhsOwogCQloZHItPnRjcF9oZHJfd29yZHMgPSBza2ItPmgudGgtPmRvZmY7CiAJCWhkci0+ZXRoX3R5cGVfbXNzID0gaHRvbnMoTUtfRVRIX1RZUEVfTVNTKGV0aF90eXBlLAotCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkpOworCQkJCQkJCSAgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkpOwogCQloZHItPmxlbiA9IGh0b25sKHNrYi0+bGVuIC0gc2l6ZW9mKCpoZHIpKTsKIAkJY3BsID0gKHN0cnVjdCBjcGxfdHhfcGt0ICopaGRyOwotCQlzZ2UtPnN0YXRzLnR4X2xzb19wa3RzKys7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJfSBlbHNlIHsKIAkJLyoKIAkgCSAqIFBhY2tldHMgc2hvcnRlciB0aGFuIEVUSF9ITEVOIGNhbiBicmVhayB0aGUgTUFDLCBkcm9wIHRoZW0KIAkJICogZWFybHkuICBBbHNvLCB3ZSBtYXkgZ2V0IG92ZXJzaXplZCBwYWNrZXRzIGJlY2F1c2Ugc29tZQpAQCAtMTQ0Nyw2ICsxOTIyLDggQEAKIAkJICovCiAJCWlmICh1bmxpa2VseShza2ItPmxlbiA8IEVUSF9ITEVOIHx8CiAJCQkgICAgIHNrYi0+bGVuID4gZGV2LT5tdHUgKyBldGhfaGRyX2xlbihza2ItPmRhdGEpKSkgeworCQkJcHJfZGVidWcoIiVzOiBwYWNrZXQgc2l6ZSAlZCBoZHIgJWQgbXR1JWRcbiIsIGRldi0+bmFtZSwKKwkJCQkgc2tiLT5sZW4sIGV0aF9oZHJfbGVuKHNrYi0+ZGF0YSksIGRldi0+bXR1KTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCQl9CkBAIC0xNDU2LDkgKzE5MzMsOSBAQAogCQkgKiBjb21wb25lbnRzLCBzdWNoIGFzIHBrdGdlbiwgZG8gbm90IGhhbmRsZSBpdCByaWdodC4KIAkJICogQ29tcGxhaW4gd2hlbiB0aGlzIGhhcHBlbnMgYnV0IHRyeSB0byBmaXggdGhpbmdzIHVwLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwKLQkJCSAgICAgZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSBFVEhfSExFTikpIHsKLQkJCXN0cnVjdCBza19idWZmICpvcmlnX3NrYiA9IHNrYjsKKwkJaWYgKHVubGlrZWx5KHNrYl9oZWFkcm9vbShza2IpIDwgZGV2LT5oYXJkX2hlYWRlcl9sZW4gLSBFVEhfSExFTikpIHsKKwkJCXByX2RlYnVnKCIlczogaGVhZHJvb20gJWQgaGVhZGVyX2xlbiAlZFxuIiwgZGV2LT5uYW1lLAorCQkJCSBza2JfaGVhZHJvb20oc2tiKSwgZGV2LT5oYXJkX2hlYWRlcl9sZW4pOwogCiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGluYWRlcXVhdGUgaGVhZHJvb20gaW4gIgpAQCAtMTQ3MSwxOSArMTk0OCwyMSBAQAogCiAJCWlmICghKGFkYXB0ZXItPmZsYWdzICYgVURQX0NTVU1fQ0FQQUJMRSkgJiYKIAkJICAgIHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwgJiYKLQkJICAgIHNrYi0+bmguaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkKKwkJICAgIHNrYi0+bmguaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgewogCQkJaWYgKHVubGlrZWx5KHNrYl9jaGVja3N1bV9oZWxwKHNrYikpKSB7CisJCQkJcHJfZGVidWcoIiVzOiB1bmFibGUgdG8gZG8gdWRwIGNoZWNrc3VtXG4iLCBkZXYtPm5hbWUpOwogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAkJCX0KKwkJfQogCiAJCS8qIEhtbW0sIGFzc3VtaW5nIHRvIGNhdGNoIHRoZSBncmF0aW91cyBhcnAuLi4gYW5kIHdlJ2xsIHVzZQogCQkgKiBpdCB0byBmbHVzaCBvdXQgc3R1Y2sgZXNwaSBwYWNrZXRzLi4uCi0JCSAgKi8KLQkJaWYgKHVubGlrZWx5KCFhZGFwdGVyLT5zZ2UtPmVzcGlidWdfc2tiKSkgeworCQkgKi8KKwkJaWYgKCh1bmxpa2VseSghYWRhcHRlci0+c2dlLT5lc3BpYnVnX3NrYltkZXYtPmlmX3BvcnRdKSkpIHsKIAkJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0FSUCkgJiYKIAkJCSAgICBza2ItPm5oLmFycGgtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpKSB7Ci0JCQkJYWRhcHRlci0+c2dlLT5lc3BpYnVnX3NrYiA9IHNrYjsKKwkJCQlhZGFwdGVyLT5zZ2UtPmVzcGlidWdfc2tiW2Rldi0+aWZfcG9ydF0gPSBza2I7CiAJCQkJLyogV2Ugd2FudCB0byByZS11c2UgdGhpcyBza2IgbGF0ZXIuIFdlCiAJCQkJICogc2ltcGx5IGJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudCBhbmQgaXQKIAkJCQkgKiB3aWxsIG5vdCBiZSBmcmVlZC4uLgpAQCAtMTQ5OSw4ICsxOTc4LDYgQEAKIAkJLyogdGhlIGxlbmd0aCBmaWVsZCBpc24ndCB1c2VkIHNvIGRvbid0IGJvdGhlciBzZXR0aW5nIGl0ICovCiAKIAkJc3QtPnR4X2NzbyArPSAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCk7Ci0JCXNnZS0+c3RhdHMudHhfZG9fY2tzdW0gKz0gKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpOwotCQlzZ2UtPnN0YXRzLnR4X3JlZ19wa3RzKys7CiAJfQogCWNwbC0+aWZmID0gZGV2LT5pZl9wb3J0OwogCkBAIC0xNTEzLDggKzE5OTAsMTkgQEAKICNlbmRpZgogCQljcGwtPnZsYW5fdmFsaWQgPSAwOwogCitzZW5kOgorCXN0LT50eF9wYWNrZXRzKys7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIHQxX3NnZV90eChza2IsIGFkYXB0ZXIsIDAsIGRldik7CisJcmV0ID0gdDFfc2dlX3R4KHNrYiwgYWRhcHRlciwgMCwgZGV2KTsKKworCS8qIElmIHRyYW5zbWl0IGJ1c3ksIGFuZCB3ZSByZWFsbG9jYXRlZCBza2IncyBkdWUgdG8gaGVhZHJvb20gbGltaXQsCisJICogdGhlbiBzaWxlbnRseSBkaXNjYXJkIHRvIGF2b2lkIGxlYWsuCisJICovCisJaWYgKHVubGlrZWx5KHJldCAhPSBORVRERVZfVFhfT0sgJiYgc2tiICE9IG9yaWdfc2tiKSkgeworIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0ID0gTkVUREVWX1RYX09LOworIAl9CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE1MzIsMTAgKzIwMjAsOSBAQAogCQkJY29udGludWU7CiAKIAkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoc2dlLCBxKTsKLQkJaWYgKGkgPT0gMCAmJiBxLT5pbl91c2UpICAgLyogZmx1c2ggcGVuZGluZyBjcmVkaXRzICovCi0JCQl3cml0ZWwoRl9DTURRMF9FTkFCTEUsCi0JCQkJc2dlLT5hZGFwdGVyLT5yZWdzICsgQV9TR19ET09SQkVMTCk7Ci0KKwkJaWYgKGkgPT0gMCAmJiBxLT5pbl91c2UpIHsgICAgLyogZmx1c2ggcGVuZGluZyBjcmVkaXRzICovCisJCQl3cml0ZWwoRl9DTURRMF9FTkFCTEUsIHNnZS0+YWRhcHRlci0+cmVncyArIEFfU0dfRE9PUkJFTEwpOworCQl9CiAJCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKIAl9CiAJbW9kX3RpbWVyKCZzZ2UtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CkBAIC0xNTgyLDExICsyMDY5LDIwIEBACiAgKi8KIHZvaWQgdDFfc2dlX3N0b3Aoc3RydWN0IHNnZSAqc2dlKQogeworCWludCBpOwogCXdyaXRlbCgwLCBzZ2UtPmFkYXB0ZXItPnJlZ3MgKyBBX1NHX0NPTlRST0wpOwotCSh2b2lkKSByZWFkbChzZ2UtPmFkYXB0ZXItPnJlZ3MgKyBBX1NHX0NPTlRST0wpOyAvKiBmbHVzaCAqLworCXJlYWRsKHNnZS0+YWRhcHRlci0+cmVncyArIEFfU0dfQ09OVFJPTCk7IC8qIGZsdXNoICovCisKIAlpZiAoaXNfVDIoc2dlLT5hZGFwdGVyKSkKIAkJZGVsX3RpbWVyX3N5bmMoJnNnZS0+ZXNwaWJ1Z190aW1lcik7CisKIAlkZWxfdGltZXJfc3luYygmc2dlLT50eF9yZWNsYWltX3RpbWVyKTsKKwlpZiAoc2dlLT50eF9zY2hlZCkKKwkJdHhfc2NoZWRfc3RvcChzZ2UpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykKKwkJaWYgKHNnZS0+ZXNwaWJ1Z19za2JbaV0pCisJCQlrZnJlZV9za2Ioc2dlLT5lc3BpYnVnX3NrYltpXSk7CiB9CiAKIC8qCkBAIC0xNTk5LDQ0ICsyMDk1LDgyIEBACiAKIAl3cml0ZWwoc2dlLT5zZ2VfY29udHJvbCwgc2dlLT5hZGFwdGVyLT5yZWdzICsgQV9TR19DT05UUk9MKTsKIAlkb29yYmVsbF9waW8oc2dlLT5hZGFwdGVyLCBGX0ZMMF9FTkFCTEUgfCBGX0ZMMV9FTkFCTEUpOwotCSh2b2lkKSByZWFkbChzZ2UtPmFkYXB0ZXItPnJlZ3MgKyBBX1NHX0NPTlRST0wpOyAvKiBmbHVzaCAqLworCXJlYWRsKHNnZS0+YWRhcHRlci0+cmVncyArIEFfU0dfQ09OVFJPTCk7IC8qIGZsdXNoICovCiAKIAltb2RfdGltZXIoJnNnZS0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKIAotCWlmIChpc19UMihzZ2UtPmFkYXB0ZXIpKSAKKwlpZiAoaXNfVDIoc2dlLT5hZGFwdGVyKSkKIAkJbW9kX3RpbWVyKCZzZ2UtPmVzcGlidWdfdGltZXIsIGppZmZpZXMgKyBzZ2UtPmVzcGlidWdfdGltZW91dCk7CiB9CiAKIC8qCiAgKiBDYWxsYmFjayBmb3IgdGhlIFQyIEVTUEkgJ3N0dWNrIHBhY2tldCBmZWF0dXJlJyB3b3JrYW9ydW5kCiAgKi8KLXN0YXRpYyB2b2lkIGVzcGlidWdfd29ya2Fyb3VuZCh2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgZXNwaWJ1Z193b3JrYXJvdW5kX3QyMDQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopZGF0YTsKKwlzdHJ1Y3Qgc2dlICpzZ2UgPSBhZGFwdGVyLT5zZ2U7CisJdW5zaWduZWQgaW50IG5wb3J0cyA9IGFkYXB0ZXItPnBhcmFtcy5ucG9ydHM7CisJdTMyIHNlb3BbTUFYX05QT1JUU107CisKKwlpZiAoYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwICYgUE9SVF9NQVNLKSB7CisJCWludCBpOworCQlpZiAodDFfZXNwaV9nZXRfbW9uX3QyMDQoYWRhcHRlciwgJihzZW9wWzBdKSwgMCkgPCAwKSB7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5wb3J0czsgaSsrKSB7CisJICAgICAgICAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNnZS0+ZXNwaWJ1Z19za2JbaV07CisJCQlpZiAoIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPnBvcnRbaV0uZGV2KSkgJiYKKwkJCSAgICAgIShuZXRpZl9xdWV1ZV9zdG9wcGVkKGFkYXB0ZXItPnBvcnRbaV0uZGV2KSkgJiYKKwkJCSAgICAgKHNlb3BbaV0gJiYgKChzZW9wW2ldICYgMHhmZmYpID09IDApKSAmJgorCQkJICAgICBza2IgKSB7CisJICAgICAgICAgICAgICAgIAlpZiAoIXNrYi0+Y2JbMF0pIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICAJdTggY2hfbWFjX2FkZHJbRVRIX0FMRU5dID0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgCXsweDAsIDB4NywgMHg0MywgMHgwLCAweDAsIDB4MH07CisJICAgICAgICAgICAgICAgICAgICAgICAgCW1lbWNweShza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJY2hfbWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAJbWVtY3B5KHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gMTAsCisJCQkJCQljaF9tYWNfYWRkciwgRVRIX0FMRU4pOworCSAgICAgICAgICAgICAgICAgICAgICAgIAlza2ItPmNiWzBdID0gMHhmZjsKKwkgICAgICAgICAgICAgICAgCX0KKworCSAgICAgICAgICAgICAgICAJLyogYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGF2b2lkIGZyZWVpbmcgb2YKKwkgICAgICAgICAgICAgICAgIAkgKiB0aGUgc2tiIG9uY2UgdGhlIERNQSBoYXMgY29tcGxldGVkLgorCSAgICAgICAgICAgICAgICAgCSAqLworCSAgICAgICAgICAgICAgICAJc2tiID0gc2tiX2dldChza2IpOworCSAgICAgICAgICAgICAgICAJdDFfc2dlX3R4KHNrYiwgYWRhcHRlciwgMCwgYWRhcHRlci0+cG9ydFtpXS5kZXYpOworCQkJfQorCQl9CisJfQorCW1vZF90aW1lcigmc2dlLT5lc3BpYnVnX3RpbWVyLCBqaWZmaWVzICsgc2dlLT5lc3BpYnVnX3RpbWVvdXQpOworfQorCitzdGF0aWMgdm9pZCBlc3BpYnVnX3dvcmthcm91bmQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopZGF0YTsKIAlzdHJ1Y3Qgc2dlICpzZ2UgPSBhZGFwdGVyLT5zZ2U7CiAKIAlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5wb3J0WzBdLmRldikpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNnZS0+ZXNwaWJ1Z19za2I7CisJICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2dlLT5lc3BpYnVnX3NrYlswXTsKKwkgICAgICAgIHUzMiBzZW9wID0gdDFfZXNwaV9nZXRfbW9uKGFkYXB0ZXIsIDB4OTMwLCAwKTsKIAotCQl1MzIgc2VvcCA9IHQxX2VzcGlfZ2V0X21vbihhZGFwdGVyLCAweDkzMCwgMCk7CisJICAgICAgICBpZiAoKHNlb3AgJiAweGZmZjBmZmYpID09IDB4ZmZmICYmIHNrYikgeworCSAgICAgICAgICAgICAgICBpZiAoIXNrYi0+Y2JbMF0pIHsKKwkgICAgICAgICAgICAgICAgICAgICAgICB1OCBjaF9tYWNfYWRkcltFVEhfQUxFTl0gPQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MHgwLCAweDcsIDB4NDMsIDB4MCwgMHgwLCAweDB9OworCSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IGNwbF90eF9wa3QpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaF9tYWNfYWRkciwgRVRIX0FMRU4pOworCSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShza2ItPmRhdGEgKyBza2ItPmxlbiAtIDEwLCBjaF9tYWNfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVRIX0FMRU4pOworCSAgICAgICAgICAgICAgICAgICAgICAgIHNrYi0+Y2JbMF0gPSAweGZmOworCSAgICAgICAgICAgICAgICB9CiAKLQkJaWYgKChzZW9wICYgMHhmZmYwZmZmKSA9PSAweGZmZiAmJiBza2IpIHsKLQkJCWlmICghc2tiLT5jYlswXSkgewotCQkJCXU4IGNoX21hY19hZGRyW0VUSF9BTEVOXSA9Ci0JCQkJICAgIHsweDAsIDB4NywgMHg0MywgMHgwLCAweDAsIDB4MH07Ci0JCQkJbWVtY3B5KHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgY3BsX3R4X3BrdCksCi0JCQkJICAgIGNoX21hY19hZGRyLCBFVEhfQUxFTik7Ci0JCQkJbWVtY3B5KHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gMTAsIGNoX21hY19hZGRyLAotCQkJCSAgICBFVEhfQUxFTik7Ci0JCQkJc2tiLT5jYlswXSA9IDB4ZmY7Ci0JCQl9Ci0KLQkJCS8qIGJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBhdm9pZCBmcmVlaW5nIG9mIHRoZQotCQkJICogc2tiIG9uY2UgdGhlIERNQSBoYXMgY29tcGxldGVkLgotCQkJICovCi0JCQlza2IgPSBza2JfZ2V0KHNrYik7Ci0JCQl0MV9zZ2VfdHgoc2tiLCBhZGFwdGVyLCAwLCBhZGFwdGVyLT5wb3J0WzBdLmRldik7Ci0JCX0KKwkgICAgICAgICAgICAgICAgLyogYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGF2b2lkIGZyZWVpbmcgb2YgdGhlCisJICAgICAgICAgICAgICAgICAqIHNrYiBvbmNlIHRoZSBETUEgaGFzIGNvbXBsZXRlZC4KKwkgICAgICAgICAgICAgICAgICovCisJICAgICAgICAgICAgICAgIHNrYiA9IHNrYl9nZXQoc2tiKTsKKwkgICAgICAgICAgICAgICAgdDFfc2dlX3R4KHNrYiwgYWRhcHRlciwgMCwgYWRhcHRlci0+cG9ydFswXS5kZXYpOworCSAgICAgICAgfQogCX0KIAltb2RfdGltZXIoJnNnZS0+ZXNwaWJ1Z190aW1lciwgamlmZmllcyArIHNnZS0+ZXNwaWJ1Z190aW1lb3V0KTsKIH0KQEAgLTE2NDcsMjYgKzIxODEsNDIgQEAKIHN0cnVjdCBzZ2UgKiBfX2RldmluaXQgdDFfc2dlX2NyZWF0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICAgIHN0cnVjdCBzZ2VfcGFyYW1zICpwKQogewotCXN0cnVjdCBzZ2UgKnNnZSA9IGttYWxsb2Moc2l6ZW9mKCpzZ2UpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3Qgc2dlICpzZ2UgPSBremFsbG9jKHNpemVvZigqc2dlKSwgR0ZQX0tFUk5FTCk7CisJaW50IGk7CiAKIAlpZiAoIXNnZSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KHNnZSwgMCwgc2l6ZW9mKCpzZ2UpKTsKIAogCXNnZS0+YWRhcHRlciA9IGFkYXB0ZXI7CiAJc2dlLT5uZXRkZXYgPSBhZGFwdGVyLT5wb3J0WzBdLmRldjsKIAlzZ2UtPnJ4X3BrdF9wYWQgPSB0MV9pc19UMUIoYWRhcHRlcikgPyAwIDogMjsKIAlzZ2UtPmp1bWJvX2ZsID0gdDFfaXNfVDFCKGFkYXB0ZXIpID8gMSA6IDA7CiAKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJc2dlLT5wb3J0X3N0YXRzW2ldID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzZ2VfcG9ydF9zdGF0cyk7CisJCWlmICghc2dlLT5wb3J0X3N0YXRzW2ldKQorCQkJZ290byBub21lbV9wb3J0OworCX0KKwogCWluaXRfdGltZXIoJnNnZS0+dHhfcmVjbGFpbV90aW1lcik7CiAJc2dlLT50eF9yZWNsYWltX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzZ2U7CiAJc2dlLT50eF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uID0gc2dlX3R4X3JlY2xhaW1fY2I7CiAKIAlpZiAoaXNfVDIoc2dlLT5hZGFwdGVyKSkgewogCQlpbml0X3RpbWVyKCZzZ2UtPmVzcGlidWdfdGltZXIpOwotCQlzZ2UtPmVzcGlidWdfdGltZXIuZnVuY3Rpb24gPSAodm9pZCAqKSZlc3BpYnVnX3dvcmthcm91bmQ7CisKKwkJaWYgKGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgPiAxKSB7CisJCQl0eF9zY2hlZF9pbml0KHNnZSk7CisJCQlzZ2UtPmVzcGlidWdfdGltZXIuZnVuY3Rpb24gPSBlc3BpYnVnX3dvcmthcm91bmRfdDIwNDsKKwkJfSBlbHNlIHsKKwkJCXNnZS0+ZXNwaWJ1Z190aW1lci5mdW5jdGlvbiA9IGVzcGlidWdfd29ya2Fyb3VuZDsKKwkJfQogCQlzZ2UtPmVzcGlidWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXNnZS0+YWRhcHRlcjsKKwogCQlzZ2UtPmVzcGlidWdfdGltZW91dCA9IDE7CisJCS8qIGZvciBUMjA0LCBldmVyeSAxMG1zICovCisJCWlmIChhZGFwdGVyLT5wYXJhbXMubnBvcnRzID4gMSkKKwkJCXNnZS0+ZXNwaWJ1Z190aW1lb3V0ID0gSFovMTAwOwogCX0KIAkgCiAKQEAgLTE2NzQsMTAgKzIyMjQsMjUgQEAKIAlwLT5jbWRRX3NpemVbMV0gPSBTR0VfQ01EUTFfRV9OOwogCXAtPmZyZWVsUV9zaXplWyFzZ2UtPmp1bWJvX2ZsXSA9IFNHRV9GUkVFTF9TSVpFOwogCXAtPmZyZWVsUV9zaXplW3NnZS0+anVtYm9fZmxdID0gU0dFX0pVTUJPX0ZSRUVMX1NJWkU7Ci0JcC0+cnhfY29hbGVzY2VfdXNlY3MgPSAgNTA7CisJaWYgKHNnZS0+dHhfc2NoZWQpIHsKKwkJaWYgKGJvYXJkX2luZm8oc2dlLT5hZGFwdGVyKS0+Ym9hcmQgPT0gQ0hCVF9CT0FSRF9DSFQyMDQpCisJCQlwLT5yeF9jb2FsZXNjZV91c2VjcyA9IDE1OworCQllbHNlCisJCQlwLT5yeF9jb2FsZXNjZV91c2VjcyA9IDUwOworCX0gZWxzZQorCQlwLT5yeF9jb2FsZXNjZV91c2VjcyA9IDUwOworCiAJcC0+Y29hbGVzY2VfZW5hYmxlID0gMDsKIAlwLT5zYW1wbGVfaW50ZXJ2YWxfdXNlY3MgPSAwOwogCXAtPnBvbGxpbmcgPSAwOwogCiAJcmV0dXJuIHNnZTsKK25vbWVtX3BvcnQ6CisJd2hpbGUgKGkgPj0gMCkgeworCQlmcmVlX3BlcmNwdShzZ2UtPnBvcnRfc3RhdHNbaV0pOworCQktLWk7CisJfQorCWtmcmVlKHNnZSk7CisJcmV0dXJuIE5VTEw7CisKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5oCmluZGV4IDkxYWY0N2IuLjdjZWIwMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmgKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuaApAQCAtNDQsNiArNDQsOSBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogc3RydWN0IHNnZV9pbnRyX2NvdW50cyB7CisJdW5zaWduZWQgaW50IHJ4X2Ryb3BzOyAgICAgICAgLyogIyBvZiBwYWNrZXRzIGRyb3BwZWQgZHVlIHRvIG5vIG1lbSAqLworCXVuc2lnbmVkIGludCBwdXJlX3JzcHM7ICAgICAgICAvKiAjIG9mIG5vbi1wYXlsb2FkIHJlc3BvbnNlcyAqLworCXVuc2lnbmVkIGludCB1bmhhbmRsZWRfaXJxczsgICAvKiAjIG9mIHVuaGFuZGxlZCBpbnRlcnJ1cHRzICovCiAJdW5zaWduZWQgaW50IHJlc3BRX2VtcHR5OyAgICAgIC8qICMgdGltZXMgcmVzcFEgZW1wdHkgKi8KIAl1bnNpZ25lZCBpbnQgcmVzcFFfb3ZlcmZsb3c7ICAgLyogIyByZXNwUSBvdmVyZmxvdyAoZmF0YWwpICovCiAJdW5zaWduZWQgaW50IGZyZWVsaXN0UV9lbXB0eTsgIC8qICMgdGltZXMgZnJlZWxpc3QgZW1wdHkgKi8KQEAgLTUxLDI0ICs1NCwxNiBAQAogCXVuc2lnbmVkIGludCBwa3RfbWlzbWF0Y2g7CiAJdW5zaWduZWQgaW50IGNtZFFfZnVsbFszXTsgICAgIC8qIG5vdCBIVyBJUlEsIGhvc3QgY21kUVtdIGZ1bGwgKi8KIAl1bnNpZ25lZCBpbnQgY21kUV9yZXN0YXJ0ZWRbM107LyogIyBvZiB0aW1lcyBjbWRRIFggd2FzIHJlc3RhcnRlZCAqLwotCXVuc2lnbmVkIGludCBldGhlcm5ldF9wa3RzOyAgICAvKiAjIG9mIEV0aGVybmV0IHBhY2tldHMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBpbnQgb2ZmbG9hZF9wa3RzOyAgICAgLyogIyBvZiBvZmZsb2FkIHBhY2tldHMgcmVjZWl2ZWQgKi8KLQl1bnNpZ25lZCBpbnQgb2ZmbG9hZF9idW5kbGVzOyAgLyogIyBvZiBvZmZsb2FkIHBrdCBidW5kbGVzIGRlbGl2ZXJlZCAqLwotCXVuc2lnbmVkIGludCBwdXJlX3JzcHM7ICAgICAgICAvKiAjIG9mIG5vbi1wYXlsb2FkIHJlc3BvbnNlcyAqLwotCXVuc2lnbmVkIGludCB1bmhhbmRsZWRfaXJxczsgICAvKiAjIG9mIHVuaGFuZGxlZCBpbnRlcnJ1cHRzICovCi0JdW5zaWduZWQgaW50IHR4X2lwZnJhZ3M7Ci0JdW5zaWduZWQgaW50IHR4X3JlZ19wa3RzOwotCXVuc2lnbmVkIGludCB0eF9sc29fcGt0czsKLQl1bnNpZ25lZCBpbnQgdHhfZG9fY2tzdW07CiB9OwogCiBzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgewotCXVuc2lnbmVkIGxvbmcgcnhfY3NvX2dvb2Q7ICAgICAvKiAjIG9mIHN1Y2Nlc3NmdWwgUlggY3N1bSBvZmZsb2FkcyAqLwotCXVuc2lnbmVkIGxvbmcgdHhfY3NvOyAgICAgICAgICAvKiAjIG9mIFRYIGNoZWNrc3VtIG9mZmxvYWRzICovCi0JdW5zaWduZWQgbG9uZyB2bGFuX3h0cmFjdDsgICAgIC8qICMgb2YgVkxBTiB0YWcgZXh0cmFjdGlvbnMgKi8KLQl1bnNpZ25lZCBsb25nIHZsYW5faW5zZXJ0OyAgICAgLyogIyBvZiBWTEFOIHRhZyBleHRyYWN0aW9ucyAqLwotCXVuc2lnbmVkIGxvbmcgdHNvOyAgICAgICAgICAgICAvKiAjIG9mIFRTTyByZXF1ZXN0cyAqLwotCXVuc2lnbmVkIGxvbmcgcnhfZHJvcHM7ICAgICAgICAvKiAjIG9mIHBhY2tldHMgZHJvcHBlZCBkdWUgdG8gbm8gbWVtICovCisJdTY0IHJ4X3BhY2tldHM7ICAgICAgLyogIyBvZiBFdGhlcm5ldCBwYWNrZXRzIHJlY2VpdmVkICovCisJdTY0IHJ4X2Nzb19nb29kOyAgICAgLyogIyBvZiBzdWNjZXNzZnVsIFJYIGNzdW0gb2ZmbG9hZHMgKi8KKwl1NjQgdHhfcGFja2V0czsgICAgICAvKiAjIG9mIFRYIHBhY2tldHMgKi8KKwl1NjQgdHhfY3NvOyAgICAgICAgICAvKiAjIG9mIFRYIGNoZWNrc3VtIG9mZmxvYWRzICovCisJdTY0IHR4X3RzbzsgICAgICAgICAgLyogIyBvZiBUU08gcmVxdWVzdHMgKi8KKwl1NjQgdmxhbl94dHJhY3Q7ICAgICAvKiAjIG9mIFZMQU4gdGFnIGV4dHJhY3Rpb25zICovCisJdTY0IHZsYW5faW5zZXJ0OyAgICAgLyogIyBvZiBWTEFOIHRhZyBpbnNlcnRpb25zICovCiB9OwogCiBzdHJ1Y3Qgc2tfYnVmZjsKQEAgLTkwLDcgKzg1LDExIEBACiB2b2lkIHQxX3NnZV9pbnRyX2VuYWJsZShzdHJ1Y3Qgc2dlICopOwogdm9pZCB0MV9zZ2VfaW50cl9kaXNhYmxlKHN0cnVjdCBzZ2UgKik7CiB2b2lkIHQxX3NnZV9pbnRyX2NsZWFyKHN0cnVjdCBzZ2UgKik7Ci1jb25zdCBzdHJ1Y3Qgc2dlX2ludHJfY291bnRzICp0MV9zZ2VfZ2V0X2ludHJfY291bnRzKHN0cnVjdCBzZ2UgKnNnZSk7Ci1jb25zdCBzdHJ1Y3Qgc2dlX3BvcnRfc3RhdHMgKnQxX3NnZV9nZXRfcG9ydF9zdGF0cyhzdHJ1Y3Qgc2dlICpzZ2UsIGludCBwb3J0KTsKK2NvbnN0IHN0cnVjdCBzZ2VfaW50cl9jb3VudHMgKnQxX3NnZV9nZXRfaW50cl9jb3VudHMoY29uc3Qgc3RydWN0IHNnZSAqc2dlKTsKK3ZvaWQgdDFfc2dlX2dldF9wb3J0X3N0YXRzKGNvbnN0IHN0cnVjdCBzZ2UgKnNnZSwgaW50IHBvcnQsIHN0cnVjdCBzZ2VfcG9ydF9zdGF0cyAqKTsKK3ZvaWQgdDFfc2NoZWRfc2V0X21heF9hdmFpbF9ieXRlcyhzdHJ1Y3Qgc2dlICosIHVuc2lnbmVkIGludCk7Cit2b2lkIHQxX3NjaGVkX3NldF9kcmFpbl9iaXRzX3Blcl91cyhzdHJ1Y3Qgc2dlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKK3Vuc2lnbmVkIGludCB0MV9zY2hlZF91cGRhdGVfcGFybXMoc3RydWN0IHNnZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKKwkJCSAgIHVuc2lnbmVkIGludCk7CiAKICNlbmRpZiAvKiBfQ1hHQl9TR0VfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3Vici5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKaW5kZXggMTJlNGU5Ni4uMjJlZDlhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJnbWFjLmgiCiAjaW5jbHVkZSAiY3BoeS5oIgogI2luY2x1ZGUgInNnZS5oIgorI2luY2x1ZGUgInRwLmgiCiAjaW5jbHVkZSAiZXNwaS5oIgogCiAvKioKQEAgLTU5LDcgKzYwLDcgQEAKICAqCW90aGVyd2lzZS4KICAqLwogc3RhdGljIGludCB0MV93YWl0X29wX2RvbmUoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgcmVnLCB1MzIgbWFzaywgaW50IHBvbGFyaXR5LAotCQkgICAgaW50IGF0dGVtcHRzLCBpbnQgZGVsYXkpCisJCQkgICBpbnQgYXR0ZW1wdHMsIGludCBkZWxheSkKIHsKIAl3aGlsZSAoMSkgewogCQl1MzIgdmFsID0gcmVhZGwoYWRhcHRlci0+cmVncyArIHJlZykgJiBtYXNrOwpAQCAtNzgsNyArNzksNyBAQAogLyoKICAqIFdyaXRlIGEgcmVnaXN0ZXIgb3ZlciB0aGUgVFBJIGludGVyZmFjZSAodW5sb2NrZWQgYW5kIGxvY2tlZCB2ZXJzaW9ucykuCiAgKi8KLXN0YXRpYyBpbnQgX190MV90cGlfd3JpdGUoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIHZhbHVlKQoraW50IF9fdDFfdHBpX3dyaXRlKGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIGFkZHIsIHUzMiB2YWx1ZSkKIHsKIAlpbnQgdHBpX2J1c3k7CiAKQEAgLTk4LDE2ICs5OSwxNiBAQAogewogCWludCByZXQ7CiAKLQlzcGluX2xvY2soJihhZGFwdGVyKS0+dHBpX2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+dHBpX2xvY2spOwogCXJldCA9IF9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIGFkZHIsIHZhbHVlKTsKLQlzcGluX3VubG9jaygmKGFkYXB0ZXIpLT50cGlfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKgogICogUmVhZCBhIHJlZ2lzdGVyIG92ZXIgdGhlIFRQSSBpbnRlcmZhY2UgKHVubG9ja2VkIGFuZCBsb2NrZWQgdmVyc2lvbnMpLgogICovCi1zdGF0aWMgaW50IF9fdDFfdHBpX3JlYWQoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyICp2YWxwKQoraW50IF9fdDFfdHBpX3JlYWQoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyICp2YWxwKQogewogCWludCB0cGlfYnVzeTsKIApAQCAtMTI4LDE4ICsxMjksMjYgQEAKIHsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrKCYoYWRhcHRlciktPnRwaV9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKIAlyZXQgPSBfX3QxX3RwaV9yZWFkKGFkYXB0ZXIsIGFkZHIsIHZhbHApOwotCXNwaW5fdW5sb2NrKCYoYWRhcHRlciktPnRwaV9sb2NrKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+dHBpX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCisgKiBTZXQgYSBUUEkgcGFyYW1ldGVyLgorICovCitzdGF0aWMgdm9pZCB0MV90cGlfcGFyKGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIHZhbHVlKQoreworCXdyaXRlbChWX1RQSVBBUih2YWx1ZSksIGFkYXB0ZXItPnJlZ3MgKyBBX1RQSV9QQVIpOworfQorCisvKgogICogQ2FsbGVkIHdoZW4gYSBwb3J0J3MgbGluayBzZXR0aW5ncyBjaGFuZ2UgdG8gcHJvcGFnYXRlIHRoZSBuZXcgdmFsdWVzIHRvIHRoZQogICogYXNzb2NpYXRlZCBQSFkgYW5kIE1BQy4gIEFmdGVyIHBlcmZvcm1pbmcgdGhlIGNvbW1vbiB0YXNrcyBpdCBpbnZva2VzIGFuCiAgKiBPUy1zcGVjaWZpYyBoYW5kbGVyLgogICovCi0vKiBzdGF0aWMgKi8gdm9pZCBsaW5rX2NoYW5nZWQoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgcG9ydF9pZCkKK3ZvaWQgdDFfbGlua19jaGFuZ2VkKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IHBvcnRfaWQpCiB7CiAJaW50IGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjOwogCXN0cnVjdCBjcGh5ICpwaHkgPSBhZGFwdGVyLT5wb3J0W3BvcnRfaWRdLnBoeTsKQEAgLTE1OSwyMyArMTY4LDgzIEBACiAJCW1hYy0+b3BzLT5zZXRfc3BlZWRfZHVwbGV4X2ZjKG1hYywgc3BlZWQsIGR1cGxleCwgZmMpOwogCQlsYy0+ZmMgPSAodW5zaWduZWQgY2hhcilmYzsKIAl9Ci0JdDFfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIHBvcnRfaWQsIGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjKTsKKwl0MV9saW5rX25lZ290aWF0ZWQoYWRhcHRlciwgcG9ydF9pZCwgbGlua19vaywgc3BlZWQsIGR1cGxleCwgZmMpOwogfQogCiBzdGF0aWMgaW50IHQxX3BjaV9pbnRyX2hhbmRsZXIoYWRhcHRlcl90ICphZGFwdGVyKQogewogCXUzMiBwY2l4X2NhdXNlOwogCi0gICAgCXBjaV9yZWFkX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBBX1BDSUNGR19JTlRSX0NBVVNFLCAmcGNpeF9jYXVzZSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPnBkZXYsIEFfUENJQ0ZHX0lOVFJfQ0FVU0UsICZwY2l4X2NhdXNlKTsKIAogCWlmIChwY2l4X2NhdXNlKSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWRhcHRlci0+cGRldiwgQV9QQ0lDRkdfSU5UUl9DQVVTRSwKLQkJCQkJIHBjaXhfY2F1c2UpOworCQkJCSAgICAgICBwY2l4X2NhdXNlKTsKIAkJdDFfZmF0YWxfZXJyKGFkYXB0ZXIpOyAgICAvKiBQQ0kgZXJyb3JzIGFyZSBmYXRhbCAqLwogCX0KIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUgorI2luY2x1ZGUgImNzcGkuaCIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxXzFHCisjaW5jbHVkZSAiZnBnYV9kZWZzLmgiCisKKy8qCisgKiBQSFkgaW50ZXJydXB0IGhhbmRsZXIgZm9yIEZQR0EgYm9hcmRzLgorICovCitzdGF0aWMgaW50IGZwZ2FfcGh5X2ludHJfaGFuZGxlcihhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaW50IHA7CisJdTMyIGNhdXNlID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEZQR0FfR01BQ19BRERSX0lOVEVSUlVQVF9DQVVTRSk7CisKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHApCisJCWlmIChjYXVzZSAmICgxIDw8IHApKSB7CisJCQlzdHJ1Y3QgY3BoeSAqcGh5ID0gYWRhcHRlci0+cG9ydFtwXS5waHk7CisJCQlpbnQgcGh5X2NhdXNlID0gcGh5LT5vcHMtPmludGVycnVwdF9oYW5kbGVyKHBoeSk7CisKKwkJCWlmIChwaHlfY2F1c2UgJiBjcGh5X2NhdXNlX2xpbmtfY2hhbmdlKQorCQkJCXQxX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBwKTsKKwkJfQorCXdyaXRlbChjYXVzZSwgYWRhcHRlci0+cmVncyArIEZQR0FfR01BQ19BRERSX0lOVEVSUlVQVF9DQVVTRSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTbG93IHBhdGggaW50ZXJydXB0IGhhbmRsZXIgZm9yIEZQR0FzLgorICovCitzdGF0aWMgaW50IGZwZ2Ffc2xvd19pbnRyKGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwl1MzIgY2F1c2UgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7CisKKwljYXVzZSAmPSB+Rl9QTF9JTlRSX1NHRV9EQVRBOworCWlmIChjYXVzZSAmIEZfUExfSU5UUl9TR0VfRVJSKQorCQl0MV9zZ2VfaW50cl9lcnJvcl9oYW5kbGVyKGFkYXB0ZXItPnNnZSk7CisKKwlpZiAoY2F1c2UgJiBGUEdBX1BDSVhfSU5URVJSVVBUX0dNQUMpCisgICAgICAgICAgICAgICAgZnBnYV9waHlfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOworCisJaWYgKGNhdXNlICYgRlBHQV9QQ0lYX0lOVEVSUlVQVF9UUCkgeworICAgICAgICAgICAgICAgIC8qCisJCSAqIEZQR0EgZG9lc24ndCBzdXBwb3J0IE1DNCBpbnRlcnJ1cHRzIGFuZCBpdCByZXF1aXJlcworCQkgKiB0aGlzIG9kZCBsYXllciBvZiBpbmRpcmVjdGlvbiBmb3IgTUM1LgorICAgICAgICAgICAgICAgICAqLworCQl1MzIgdHBfY2F1c2UgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgRlBHQV9UUF9BRERSX0lOVEVSUlVQVF9DQVVTRSk7CisKKwkJLyogQ2xlYXIgVFAgaW50ZXJydXB0ICovCisJCXdyaXRlbCh0cF9jYXVzZSwgYWRhcHRlci0+cmVncyArIEZQR0FfVFBfQUREUl9JTlRFUlJVUFRfQ0FVU0UpOworCX0KKwlpZiAoY2F1c2UgJiBGUEdBX1BDSVhfSU5URVJSVVBUX1BDSVgpCisJCXQxX3BjaV9pbnRyX2hhbmRsZXIoYWRhcHRlcik7CisKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0cyBqdXN0IHByb2Nlc3NlZC4gKi8KKwlpZiAoY2F1c2UpCisJCXdyaXRlbChjYXVzZSwgYWRhcHRlci0+cmVncyArIEFfUExfQ0FVU0UpOworCisJcmV0dXJuIGNhdXNlICE9IDA7Cit9CisjZW5kaWYKIAogLyoKICAqIFdhaXQgdW50aWwgRWxtZXIncyBNSTEgaW50ZXJmYWNlIGlzIHJlYWR5IGZvciBuZXcgb3BlcmF0aW9ucy4KQEAgLTIxMiwxMiArMjgxLDYyIEBACiAJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9DRkcsIHZhbCk7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxXzFHKSB8fCBkZWZpbmVkKENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUikKKy8qCisgKiBFbG1lciBNSTEgTURJTyByZWFkL3dyaXRlIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgbWkxX21kaW9fcmVhZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBwaHlfYWRkciwgaW50IG1tZF9hZGRyLAorCQkJIGludCByZWdfYWRkciwgdW5zaWduZWQgaW50ICp2YWxwKQoreworCXUzMiBhZGRyID0gVl9NSTFfUkVHX0FERFIocmVnX2FkZHIpIHwgVl9NSTFfUEhZX0FERFIocGh5X2FkZHIpOworCisJaWYgKG1tZF9hZGRyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+dHBpX2xvY2spOworCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9BRERSLCBhZGRyKTsKKwlfX3QxX3RwaV93cml0ZShhZGFwdGVyLAorCQkJQV9FTE1FUjBfUE9SVDBfTUkxX09QLCBNSTFfT1BfRElSRUNUX1JFQUQpOworCW1pMV93YWl0X3VudGlsX3JlYWR5KGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9PUCk7CisJX190MV90cGlfcmVhZChhZGFwdGVyLCBBX0VMTUVSMF9QT1JUMF9NSTFfREFUQSwgdmFscCk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtaTFfbWRpb193cml0ZShhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBwaHlfYWRkciwgaW50IG1tZF9hZGRyLAorCQkJICBpbnQgcmVnX2FkZHIsIHVuc2lnbmVkIGludCB2YWwpCit7CisJdTMyIGFkZHIgPSBWX01JMV9SRUdfQUREUihyZWdfYWRkcikgfCBWX01JMV9QSFlfQUREUihwaHlfYWRkcik7CisKKwlpZiAobW1kX2FkZHIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT50cGlfbG9jayk7CisJX190MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfUE9SVDBfTUkxX0FERFIsIGFkZHIpOworCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9EQVRBLCB2YWwpOworCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsCisJCQlBX0VMTUVSMF9QT1JUMF9NSTFfT1AsIE1JMV9PUF9ESVJFQ1RfV1JJVEUpOworCW1pMV93YWl0X3VudGlsX3JlYWR5KGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9PUCk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0NIRUxTSU9fVDFfMUcpIHx8IGRlZmluZWQoQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSKQorc3RhdGljIHN0cnVjdCBtZGlvX29wcyBtaTFfbWRpb19vcHMgPSB7CisJbWkxX21kaW9faW5pdCwKKwltaTFfbWRpb19yZWFkLAorCW1pMV9tZGlvX3dyaXRlCit9OworI2VuZGlmCisKKyNlbmRpZgorCiBzdGF0aWMgaW50IG1pMV9tZGlvX2V4dF9yZWFkKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IHBoeV9hZGRyLCBpbnQgbW1kX2FkZHIsCiAJCQkgICAgIGludCByZWdfYWRkciwgdW5zaWduZWQgaW50ICp2YWxwKQogewogCXUzMiBhZGRyID0gVl9NSTFfUkVHX0FERFIobW1kX2FkZHIpIHwgVl9NSTFfUEhZX0FERFIocGh5X2FkZHIpOwogCi0Jc3Bpbl9sb2NrKCYoYWRhcHRlciktPnRwaV9sb2NrKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKIAogCS8qIFdyaXRlIHRoZSBhZGRyZXNzIHdlIHdhbnQuICovCiAJX190MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfUE9SVDBfTUkxX0FERFIsIGFkZHIpOwpAQCAtMjI3LDEyICszNDYsMTMgQEAKIAltaTFfd2FpdF91bnRpbF9yZWFkeShhZGFwdGVyLCBBX0VMTUVSMF9QT1JUMF9NSTFfT1ApOwogCiAJLyogV3JpdGUgdGhlIG9wZXJhdGlvbiB3ZSB3YW50LiAqLwotCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9PUCwgTUkxX09QX0lORElSRUNUX1JFQUQpOworCV9fdDFfdHBpX3dyaXRlKGFkYXB0ZXIsCisJCQlBX0VMTUVSMF9QT1JUMF9NSTFfT1AsIE1JMV9PUF9JTkRJUkVDVF9SRUFEKTsKIAltaTFfd2FpdF91bnRpbF9yZWFkeShhZGFwdGVyLCBBX0VMTUVSMF9QT1JUMF9NSTFfT1ApOwogCiAJLyogUmVhZCB0aGUgZGF0YS4gKi8KIAlfX3QxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX1BPUlQwX01JMV9EQVRBLCB2YWxwKTsKLQlzcGluX3VubG9jaygmKGFkYXB0ZXIpLT50cGlfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQxLDcgKzM2MSw3IEBACiB7CiAJdTMyIGFkZHIgPSBWX01JMV9SRUdfQUREUihtbWRfYWRkcikgfCBWX01JMV9QSFlfQUREUihwaHlfYWRkcik7CiAKLQlzcGluX2xvY2soJihhZGFwdGVyKS0+dHBpX2xvY2spOworCXNwaW5fbG9jaygmYWRhcHRlci0+dHBpX2xvY2spOwogCiAJLyogV3JpdGUgdGhlIGFkZHJlc3Mgd2Ugd2FudC4gKi8KIAlfX3QxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9QT1JUMF9NSTFfQUREUiwgYWRkcik7CkBAIC0yNTQsNyArMzc0LDcgQEAKIAlfX3QxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9QT1JUMF9NSTFfREFUQSwgdmFsKTsKIAlfX3QxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9QT1JUMF9NSTFfT1AsIE1JMV9PUF9JTkRJUkVDVF9XUklURSk7CiAJbWkxX3dhaXRfdW50aWxfcmVhZHkoYWRhcHRlciwgQV9FTE1FUjBfUE9SVDBfTUkxX09QKTsKLQlzcGluX3VubG9jaygmKGFkYXB0ZXIpLT50cGlfbG9jayk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnRwaV9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY1LDEyICszODUsMjUgQEAKIH07CiAKIGVudW0geworCUNIX0JSRF9UMTEwXzFDVSwKIAlDSF9CUkRfTjExMF8xRiwKIAlDSF9CUkRfTjIxMF8xRiwKKwlDSF9CUkRfVDIxMF8xRiwKKwlDSF9CUkRfVDIxMF8xQ1UsCisJQ0hfQlJEX04yMDRfNENVLAogfTsKIAogc3RhdGljIHN0cnVjdCBib2FyZF9pbmZvIHQxX2JvYXJkW10gPSB7CiAKK3sgQ0hCVF9CT0FSRF9DSFQxMTAsIDEvKnBvcnRzIyovLAorICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIC8qY2FwcyovLCBDSEJUX1RFUk1fVDEsCisgIENIQlRfTUFDX1BNMzM5MywgQ0hCVF9QSFlfTVkzMTI2LAorICAxMjUwMDAwMDAvKmNsay1jb3JlKi8sIDE1MDAwMDAwMC8qY2xrLW1jMyovLCAxMjUwMDAwMDAvKmNsay1tYzQqLywKKyAgMS8qZXNwaS1wb3J0cyovLCAwLypjbGstY3NwaSovLCA0NC8qY2xrLWVsbWVyMCovLCAxLyptZGllbiovLAorICAxLyptZGlpbnYqLywgMS8qbWRjKi8sIDEvKnBoeWJhc2VhZGRyKi8sICZ0MV9wbTMzOTNfb3BzLAorICAmdDFfbXkzMTI2X29wcywgJm1pMV9tZGlvX2V4dF9vcHMsCisgICJDaGVsc2lvIFQxMTAgMXgxMEdCYXNlLUNYNCBUT0UiIH0sCisKIHsgQ0hCVF9CT0FSRF9OMTEwLCAxLypwb3J0cyMqLywKICAgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9GSUJSRSAvKmNhcHMqLywgQ0hCVF9URVJNX1QxLAogICBDSEJUX01BQ19QTTMzOTMsIENIQlRfUEhZXzg4WDIwMTAsCkBAIC0yODksMTIgKzQyMiw0NyBAQAogICAmdDFfbXY4OHgyMDF4X29wcywgJm1pMV9tZGlvX2V4dF9vcHMsCiAgICJDaGVsc2lvIE4yMTAgMXgxMEdCYXNlWCBOSUMiIH0sCiAKK3sgQ0hCVF9CT0FSRF9DSFQyMTAsIDEvKnBvcnRzIyovLAorICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIC8qY2FwcyovLCBDSEJUX1RFUk1fVDIsCisgIENIQlRfTUFDX1BNMzM5MywgQ0hCVF9QSFlfODhYMjAxMCwKKyAgMTI1MDAwMDAwLypjbGstY29yZSovLCAxMzMwMDAwMDAvKmNsay1tYzMqLywgMTI1MDAwMDAwLypjbGstbWM0Ki8sCisgIDEvKmVzcGktcG9ydHMqLywgMC8qY2xrLWNzcGkqLywgNDQvKmNsay1lbG1lcjAqLywgMC8qbWRpZW4qLywKKyAgMC8qbWRpaW52Ki8sIDEvKm1kYyovLCAwLypwaHliYXNlYWRkciovLCAmdDFfcG0zMzkzX29wcywKKyAgJnQxX212ODh4MjAxeF9vcHMsICZtaTFfbWRpb19leHRfb3BzLAorICAiQ2hlbHNpbyBUMjEwIDF4MTBHQmFzZVggVE9FIiB9LAorCit7IENIQlRfQk9BUkRfQ0hUMjEwLCAxLypwb3J0cyMqLywKKyAgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCAvKmNhcHMqLywgQ0hCVF9URVJNX1QyLAorICBDSEJUX01BQ19QTTMzOTMsIENIQlRfUEhZX01ZMzEyNiwKKyAgMTI1MDAwMDAwLypjbGstY29yZSovLCAxMzMwMDAwMDAvKmNsay1tYzMqLywgMTI1MDAwMDAwLypjbGstbWM0Ki8sCisgIDEvKmVzcGktcG9ydHMqLywgMC8qY2xrLWNzcGkqLywgNDQvKmNsay1lbG1lcjAqLywgMS8qbWRpZW4qLywKKyAgMS8qbWRpaW52Ki8sIDEvKm1kYyovLCAxLypwaHliYXNlYWRkciovLCAmdDFfcG0zMzkzX29wcywKKyAgJnQxX215MzEyNl9vcHMsICZtaTFfbWRpb19leHRfb3BzLAorICAiQ2hlbHNpbyBUMjEwIDF4MTBHQmFzZS1DWDQgVE9FIiB9LAorCisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfMUcKK3sgQ0hCVF9CT0FSRF9DSE4yMDQsIDQvKnBvcnRzIyovLAorICBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKyAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfQXV0b25lZyB8CisgIFNVUFBPUlRFRF9QQVVTRSB8IFNVUFBPUlRFRF9UUCAvKmNhcHMqLywgQ0hCVF9URVJNX1QyLCBDSEJUX01BQ19WU0M3MzIxLCBDSEJUX1BIWV84OEUxMTExLAorICAxMDAwMDAwMDAvKmNsay1jb3JlKi8sIDAvKmNsay1tYzMqLywgMC8qY2xrLW1jNCovLAorICA0Lyplc3BpLXBvcnRzKi8sIDAvKmNsay1jc3BpKi8sIDQ0LypjbGstZWxtZXIwKi8sIDAvKm1kaWVuKi8sCisgIDAvKm1kaWludiovLCAxLyptZGMqLywgNC8qcGh5YmFzZWFkZHIqLywgJnQxX3ZzYzczMjZfb3BzLAorICAmdDFfbXY4OGUxeHh4X29wcywgJm1pMV9tZGlvX29wcywKKyAgIkNoZWxzaW8gTjIwNCA0eDEwMC8xMDAwQmFzZVQgTklDIiB9LAorI2VuZGlmCisKIH07CiAKIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHQxX3BjaV90YmxbXSA9IHsKKwlDSF9ERVZJQ0UoOCwgMCwgQ0hfQlJEX1QxMTBfMUNVKSwKKwlDSF9ERVZJQ0UoOCwgMSwgQ0hfQlJEX1QxMTBfMUNVKSwKIAlDSF9ERVZJQ0UoNywgMCwgQ0hfQlJEX04xMTBfMUYpLAogCUNIX0RFVklDRSgxMCwgMSwgQ0hfQlJEX04yMTBfMUYpLAotCXsgMCwgfQorCUNIX0RFVklDRSgxMSwgMSwgQ0hfQlJEX1QyMTBfMUYpLAorCUNIX0RFVklDRSgxNCwgMSwgQ0hfQlJEX1QyMTBfMUNVKSwKKwlDSF9ERVZJQ0UoMTYsIDEsIENIX0JSRF9OMjA0XzRDVSksCisJeyAwIH0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0MV9wY2lfdGJsKTsKQEAgLTM5MCw5ICs1NTgsMTQgQEAKIAlpZiAobGMtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9BdXRvbmVnKSB7CiAJCWxjLT5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfQVNZTV9QQVVTRSB8IEFEVkVSVElTRURfUEFVU0UpOwogCQlpZiAoZmMpIHsKLQkJCWxjLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FTWU1fUEFVU0U7Ci0JCQlpZiAoZmMgPT0gKFBBVVNFX1JYIHwgUEFVU0VfVFgpKQorCQkJaWYgKGZjID09ICgoUEFVU0VfUlggfCBQQVVTRV9UWCkgJgorCQkJCSAgIChtYWMtPmFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgPCAyKSkpCiAJCQkJbGMtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfUEFVU0U7CisJCQllbHNlIHsKKwkJCQlsYy0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BU1lNX1BBVVNFOworCQkJCWlmIChmYyA9PSBQQVVTRV9SWCkKKwkJCQkJbGMtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfUEFVU0U7CisJCQl9CiAJCX0KIAkJcGh5LT5vcHMtPmFkdmVydGlzZShwaHksIGxjLT5hZHZlcnRpc2luZyk7CiAKQEAgLTQwMywxMSArNTc2LDE1IEBACiAJCQltYWMtPm9wcy0+c2V0X3NwZWVkX2R1cGxleF9mYyhtYWMsIGxjLT5zcGVlZCwKIAkJCQkJCSAgICAgIGxjLT5kdXBsZXgsIGZjKTsKIAkJCS8qIEFsc28gZGlzYWJsZXMgYXV0b25lZyAqLworCQkJcGh5LT5zdGF0ZSA9IFBIWV9BVVRPTkVHX1JEWTsKIAkJCXBoeS0+b3BzLT5zZXRfc3BlZWRfZHVwbGV4KHBoeSwgbGMtPnNwZWVkLCBsYy0+ZHVwbGV4KTsKIAkJCXBoeS0+b3BzLT5yZXNldChwaHksIDApOwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKKwkJCXBoeS0+c3RhdGUgPSBQSFlfQVVUT05FR19FTjsKIAkJCXBoeS0+b3BzLT5hdXRvbmVnX2VuYWJsZShwaHkpOyAvKiBhbHNvIHJlc2V0cyBQSFkgKi8KKwkJfQogCX0gZWxzZSB7CisJCXBoeS0+c3RhdGUgPSBQSFlfQVVUT05FR19SRFk7CiAJCW1hYy0+b3BzLT5zZXRfc3BlZWRfZHVwbGV4X2ZjKG1hYywgLTEsIC0xLCBmYyk7CiAJCWxjLT5mYyA9ICh1bnNpZ25lZCBjaGFyKWZjOwogCQlwaHktPm9wcy0+cmVzZXQocGh5LCAwKTsKQEAgLTQxOCwyNCArNTk1LDEwOSBAQAogLyoKICAqIEV4dGVybmFsIGludGVycnVwdCBoYW5kbGVyIGZvciBib2FyZHMgdXNpbmcgZWxtZXIwLgogICovCi1pbnQgZWxtZXIwX2V4dF9pbnRyX2hhbmRsZXIoYWRhcHRlcl90ICphZGFwdGVyKQoraW50IHQxX2VsbWVyMF9leHRfaW50cl9oYW5kbGVyKGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLSAgICAJc3RydWN0IGNwaHkgKnBoeTsKKwlzdHJ1Y3QgY3BoeSAqcGh5OwogCWludCBwaHlfY2F1c2U7Ci0gICAgCXUzMiBjYXVzZTsKKwl1MzIgY2F1c2U7CiAKIAl0MV90cGlfcmVhZChhZGFwdGVyLCBBX0VMTUVSMF9JTlRfQ0FVU0UsICZjYXVzZSk7CiAKIAlzd2l0Y2ggKGJvYXJkX2luZm8oYWRhcHRlciktPmJvYXJkKSB7CisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfMUcKKyAgICAgICAgY2FzZSBDSEJUX0JPQVJEX0NIVDIwNDoKKyAgICAgICAgY2FzZSBDSEJUX0JPQVJEX0NIVDIwNEU6CisgICAgICAgIGNhc2UgQ0hCVF9CT0FSRF9DSE4yMDQ6CisgICAgICAgIGNhc2UgQ0hCVF9CT0FSRF9DSFQyMDRWOiB7CisgICAgICAgICAgICAgICAgaW50IGksIHBvcnRfYml0OworCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpIHsKKwkJCXBvcnRfYml0ID0gaSArIDE7CisJCQlpZiAoIShjYXVzZSAmICgxIDw8IHBvcnRfYml0KSkpIGNvbnRpbnVlOworCisJICAgICAgICAgICAgICAgIHBoeSA9IGFkYXB0ZXItPnBvcnRbaV0ucGh5OworCQkJcGh5X2NhdXNlID0gcGh5LT5vcHMtPmludGVycnVwdF9oYW5kbGVyKHBoeSk7CisJCQlpZiAocGh5X2NhdXNlICYgY3BoeV9jYXVzZV9saW5rX2NoYW5nZSkKKwkJCQl0MV9saW5rX2NoYW5nZWQoYWRhcHRlciwgaSk7CisJCX0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCWNhc2UgQ0hCVF9CT0FSRF9DSFQxMDE6CisJCWlmIChjYXVzZSAmIEVMTUVSMF9HUF9CSVQxKSB7IC8qIE1hcnZlbGwgODhFMTExMSBpbnRlcnJ1cHQgKi8KKwkJCXBoeSA9IGFkYXB0ZXItPnBvcnRbMF0ucGh5OworCQkJcGh5X2NhdXNlID0gcGh5LT5vcHMtPmludGVycnVwdF9oYW5kbGVyKHBoeSk7CisJCQlpZiAocGh5X2NhdXNlICYgY3BoeV9jYXVzZV9saW5rX2NoYW5nZSkKKwkJCQl0MV9saW5rX2NoYW5nZWQoYWRhcHRlciwgMCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSEJUX0JPQVJEXzc1MDA6IHsKKwkJaW50IHA7CisgICAgCQkvKgorCQkgKiBFbG1lcjAncyBpbnRlcnJ1cHQgY2F1c2UgaXNuJ3QgdXNlZnVsIGhlcmUgYmVjYXVzZSB0aGVyZSBpcworCQkgKiBvbmx5IG9uZSBiaXQgdGhhdCBjYW4gYmUgc2V0IGZvciBhbGwgNCBwb3J0cy4gIFRoaXMgbWVhbnMKKwkJICogd2UgYXJlIGZvcmNlZCB0byBjaGVjayBldmVyeSBQSFkncyBpbnRlcnJ1cHQgc3RhdHVzCisJCSAqIHJlZ2lzdGVyIHRvIHNlZSB3aG8gaW5pdGlhdGVkIHRoZSBpbnRlcnJ1cHQuCisgICAgIAkJICovCisgICAgCQlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIHApIHsKKwkJCXBoeSA9IGFkYXB0ZXItPnBvcnRbcF0ucGh5OworCQkJcGh5X2NhdXNlID0gcGh5LT5vcHMtPmludGVycnVwdF9oYW5kbGVyKHBoeSk7CisJCQlpZiAocGh5X2NhdXNlICYgY3BoeV9jYXVzZV9saW5rX2NoYW5nZSkKKwkJCSAgICB0MV9saW5rX2NoYW5nZWQoYWRhcHRlciwgcCk7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlmCisJY2FzZSBDSEJUX0JPQVJEX0NIVDIxMDoKIAljYXNlIENIQlRfQk9BUkRfTjIxMDoKIAljYXNlIENIQlRfQk9BUkRfTjExMDoKIAkJaWYgKGNhdXNlICYgRUxNRVIwX0dQX0JJVDYpIHsgLyogTWFydmVsbCA4OHgyMDEwIGludGVycnVwdCAqLwogCQkJcGh5ID0gYWRhcHRlci0+cG9ydFswXS5waHk7CiAJCQlwaHlfY2F1c2UgPSBwaHktPm9wcy0+aW50ZXJydXB0X2hhbmRsZXIocGh5KTsKIAkJCWlmIChwaHlfY2F1c2UgJiBjcGh5X2NhdXNlX2xpbmtfY2hhbmdlKQotCQkJCWxpbmtfY2hhbmdlZChhZGFwdGVyLCAwKTsKKwkJCQl0MV9saW5rX2NoYW5nZWQoYWRhcHRlciwgMCk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBDSEJUX0JPQVJEXzgwMDA6CisJY2FzZSBDSEJUX0JPQVJEX0NIVDExMDoKKyAgICAJCUNIX0RCRyhhZGFwdGVyLCBJTlRSLCAiRXh0ZXJuYWwgaW50ZXJydXB0IGNhdXNlIDB4JXhcbiIsCisJCSAgICAgICBjYXVzZSk7CisJCWlmIChjYXVzZSAmIEVMTUVSMF9HUF9CSVQxKSB7ICAgICAgICAvKiBQTUMzMzkzIElOVEIgKi8KKwkJCXN0cnVjdCBjbWFjICptYWMgPSBhZGFwdGVyLT5wb3J0WzBdLm1hYzsKKworCQkJbWFjLT5vcHMtPmludGVycnVwdF9oYW5kbGVyKG1hYyk7CisJCX0KKwkJaWYgKGNhdXNlICYgRUxNRVIwX0dQX0JJVDUpIHsgICAgICAgIC8qIFhQQUsgTU9EX0RFVEVDVCAqLworCQkJdTMyIG1vZF9kZXRlY3Q7CisKKwkJCXQxX3RwaV9yZWFkKGFkYXB0ZXIsCisJCQkJCUFfRUxNRVIwX0dQSV9TVEFULCAmbW9kX2RldGVjdCk7CisJICAgIAkJQ0hfTVNHKGFkYXB0ZXIsIElORk8sIExJTkssICJYUEFLICVzXG4iLAorCQkJICAgICAgIG1vZF9kZXRlY3QgPyAicmVtb3ZlZCIgOiAiaW5zZXJ0ZWQiKTsKKyAgICAJCX0KKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCisJY2FzZSBDSEJUX0JPQVJEX0NPVUdBUjoKKwkJaWYgKGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMgPT0gMSkgeworCQkJaWYgKGNhdXNlICYgRUxNRVIwX0dQX0JJVDEpIHsgICAgICAgICAvKiBWaXRlc3NlIE1BQyAqLworCQkJCXN0cnVjdCBjbWFjICptYWMgPSBhZGFwdGVyLT5wb3J0WzBdLm1hYzsKKwkJCQltYWMtPm9wcy0+aW50ZXJydXB0X2hhbmRsZXIobWFjKTsKKwkJCX0KKwkJCWlmIChjYXVzZSAmIEVMTUVSMF9HUF9CSVQ1KSB7ICAgICAvKiBYUEFLIE1PRF9ERVRFQ1QgKi8KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWludCBpLCBwb3J0X2JpdDsKKworCQkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CisJCQkJcG9ydF9iaXQgPSBpID8gaSArIDEgOiAwOworCQkJCWlmICghKGNhdXNlICYgKDEgPDwgcG9ydF9iaXQpKSkgY29udGludWU7CisKKwkJCQlwaHkgPSBhZGFwdGVyLT5wb3J0W2ldLnBoeTsKKwkJCQlwaHlfY2F1c2UgPSBwaHktPm9wcy0+aW50ZXJydXB0X2hhbmRsZXIocGh5KTsKKwkJCQlpZiAocGh5X2NhdXNlICYgY3BoeV9jYXVzZV9saW5rX2NoYW5nZSkKKwkJCQkJdDFfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIGkpOworCQkJfQorCQl9CisJCWJyZWFrOworI2VuZGlmCiAJfQogCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9JTlRfQ0FVU0UsIGNhdXNlKTsKIAlyZXR1cm4gMDsKQEAgLTQ0NSwxMSArNzA3LDExIEBACiB2b2lkIHQxX2ludGVycnVwdHNfZW5hYmxlKGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQl1MzIgcGxfaW50cjsKIAotCWFkYXB0ZXItPnNsb3dfaW50cl9tYXNrID0gRl9QTF9JTlRSX1NHRV9FUlI7CisJYWRhcHRlci0+c2xvd19pbnRyX21hc2sgPSBGX1BMX0lOVFJfU0dFX0VSUiB8IEZfUExfSU5UUl9UUDsKIAogCXQxX3NnZV9pbnRyX2VuYWJsZShhZGFwdGVyLT5zZ2UpOworCXQxX3RwX2ludHJfZW5hYmxlKGFkYXB0ZXItPnRwKTsKIAlpZiAoYWRhcHRlci0+ZXNwaSkgewogCQlhZGFwdGVyLT5zbG93X2ludHJfbWFzayB8PSBGX1BMX0lOVFJfRVNQSTsKIAkJdDFfZXNwaV9pbnRyX2VuYWJsZShhZGFwdGVyLT5lc3BpKTsKQEAgLTQ2MiwxNSArNzI0LDE3IEBACiAJfQogCiAJLyogRW5hYmxlIFBDSVggJiBleHRlcm5hbCBjaGlwIGludGVycnVwdHMgb24gQVNJQyBib2FyZHMuICovCi0JcGxfaW50ciA9IHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisJaWYgKHQxX2lzX2FzaWMoYWRhcHRlcikpIHsKKwkJdTMyIHBsX2ludHIgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOwogCi0JLyogUENJLVggaW50ZXJydXB0cyAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWRhcHRlci0+cGRldiwgQV9QQ0lDRkdfSU5UUl9FTkFCTEUsCi0JCQkgICAgICAgMHhmZmZmZmZmZik7CisJCS8qIFBDSS1YIGludGVycnVwdHMgKi8KKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBBX1BDSUNGR19JTlRSX0VOQUJMRSwKKwkJCQkgICAgICAgMHhmZmZmZmZmZik7CiAKLQlhZGFwdGVyLT5zbG93X2ludHJfbWFzayB8PSBGX1BMX0lOVFJfRVhUIHwgRl9QTF9JTlRSX1BDSVg7Ci0JcGxfaW50ciB8PSBGX1BMX0lOVFJfRVhUIHwgRl9QTF9JTlRSX1BDSVg7Ci0Jd3JpdGVsKHBsX2ludHIsIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisJCWFkYXB0ZXItPnNsb3dfaW50cl9tYXNrIHw9IEZfUExfSU5UUl9FWFQgfCBGX1BMX0lOVFJfUENJWDsKKwkJcGxfaW50ciB8PSBGX1BMX0lOVFJfRVhUIHwgRl9QTF9JTlRSX1BDSVg7CisJCXdyaXRlbChwbF9pbnRyLCBhZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOworCX0KIH0KIAogLyogRGlzYWJsZXMgYWxsIGludGVycnVwdHMuICovCkBAIC00NzksNiArNzQzLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXQxX3NnZV9pbnRyX2Rpc2FibGUoYWRhcHRlci0+c2dlKTsKKwl0MV90cF9pbnRyX2Rpc2FibGUoYWRhcHRlci0+dHApOwogCWlmIChhZGFwdGVyLT5lc3BpKQogCQl0MV9lc3BpX2ludHJfZGlzYWJsZShhZGFwdGVyLT5lc3BpKTsKIApAQCAtNDg5LDcgKzc1NCw4IEBACiAJfQogCiAJLyogRGlzYWJsZSBQQ0lYICYgZXh0ZXJuYWwgY2hpcCBpbnRlcnJ1cHRzLiAqLwotCXdyaXRlbCgwLCBhZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOworCWlmICh0MV9pc19hc2ljKGFkYXB0ZXIpKQorCSAgICAJd3JpdGVsKDAsIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CiAKIAkvKiBQQ0ktWCBpbnRlcnJ1cHRzICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBBX1BDSUNGR19JTlRSX0VOQUJMRSwgMCk7CkBAIC01MDEsMTAgKzc2Nyw5IEBACiB2b2lkIHQxX2ludGVycnVwdHNfY2xlYXIoYWRhcHRlcl90KiBhZGFwdGVyKQogewogCXVuc2lnbmVkIGludCBpOwotCXUzMiBwbF9pbnRyOwotCiAKIAl0MV9zZ2VfaW50cl9jbGVhcihhZGFwdGVyLT5zZ2UpOworCXQxX3RwX2ludHJfY2xlYXIoYWRhcHRlci0+dHApOwogCWlmIChhZGFwdGVyLT5lc3BpKQogCQl0MV9lc3BpX2ludHJfY2xlYXIoYWRhcHRlci0+ZXNwaSk7CiAKQEAgLTUxNSwxMCArNzgwLDEyIEBACiAJfQogCiAJLyogRW5hYmxlIGludGVycnVwdHMgZm9yIGV4dGVybmFsIGRldmljZXMuICovCi0gICAgCXBsX2ludHIgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7CisJaWYgKHQxX2lzX2FzaWMoYWRhcHRlcikpIHsKKwkJdTMyIHBsX2ludHIgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7CiAKLQl3cml0ZWwocGxfaW50ciB8IEZfUExfSU5UUl9FWFQgfCBGX1BMX0lOVFJfUENJWCwKLQkgICAgICAgYWRhcHRlci0+cmVncyArIEFfUExfQ0FVU0UpOworCQl3cml0ZWwocGxfaW50ciB8IEZfUExfSU5UUl9FWFQgfCBGX1BMX0lOVFJfUENJWCwKKwkJICAgICAgIGFkYXB0ZXItPnJlZ3MgKyBBX1BMX0NBVVNFKTsKKwl9CiAKIAkvKiBQQ0ktWCBpbnRlcnJ1cHRzICovCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChhZGFwdGVyLT5wZGV2LCBBX1BDSUNGR19JTlRSX0NBVVNFLCAweGZmZmZmZmZmKTsKQEAgLTUyNyw3ICs3OTQsNyBAQAogLyoKICAqIFNsb3cgcGF0aCBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgQVNJQ3MuCiAgKi8KLWludCB0MV9zbG93X2ludHJfaGFuZGxlcihhZGFwdGVyX3QgKmFkYXB0ZXIpCitzdGF0aWMgaW50IGFzaWNfc2xvd19pbnRyKGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKIAl1MzIgY2F1c2UgPSByZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7CiAKQEAgLTUzNiw4OSArODAzLDU0IEBACiAJCXJldHVybiAwOwogCWlmIChjYXVzZSAmIEZfUExfSU5UUl9TR0VfRVJSKQogCQl0MV9zZ2VfaW50cl9lcnJvcl9oYW5kbGVyKGFkYXB0ZXItPnNnZSk7CisJaWYgKGNhdXNlICYgRl9QTF9JTlRSX1RQKQorCQl0MV90cF9pbnRyX2hhbmRsZXIoYWRhcHRlci0+dHApOwogCWlmIChjYXVzZSAmIEZfUExfSU5UUl9FU1BJKQogCQl0MV9lc3BpX2ludHJfaGFuZGxlcihhZGFwdGVyLT5lc3BpKTsKIAlpZiAoY2F1c2UgJiBGX1BMX0lOVFJfUENJWCkKIAkJdDFfcGNpX2ludHJfaGFuZGxlcihhZGFwdGVyKTsKIAlpZiAoY2F1c2UgJiBGX1BMX0lOVFJfRVhUKQotCQl0MV9lbG1lcjBfZXh0X2ludHIoYWRhcHRlcik7CisJCXQxX2VsbWVyMF9leHRfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwogCiAJLyogQ2xlYXIgdGhlIGludGVycnVwdHMganVzdCBwcm9jZXNzZWQuICovCiAJd3JpdGVsKGNhdXNlLCBhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7Ci0JKHZvaWQpcmVhZGwoYWRhcHRlci0+cmVncyArIEFfUExfQ0FVU0UpOyAvKiBmbHVzaCB3cml0ZXMgKi8KKwlyZWFkbChhZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7IC8qIGZsdXNoIHdyaXRlcyAqLwogCXJldHVybiAxOwogfQogCi0vKiBQYXVzZSBkZWFkbG9jayBhdm9pZGFuY2UgcGFyYW1ldGVycyAqLwotI2RlZmluZSBEUk9QX01TRUMgMTYKLSNkZWZpbmUgRFJPUF9QS1RTX0NOVCAgMQotCi1zdGF0aWMgdm9pZCBzZXRfY3N1bV9vZmZsb2FkKGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIGNzdW1fYml0LCBpbnQgZW5hYmxlKQoraW50IHQxX3Nsb3dfaW50cl9oYW5kbGVyKGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQl1MzIgdmFsID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEFfVFBfR0xPQkFMX0NPTkZJRyk7Ci0KLQlpZiAoZW5hYmxlKQotCQl2YWwgfD0gY3N1bV9iaXQ7Ci0JZWxzZQotCQl2YWwgJj0gfmNzdW1fYml0OwotCXdyaXRlbCh2YWwsIGFkYXB0ZXItPnJlZ3MgKyBBX1RQX0dMT0JBTF9DT05GSUcpOworI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxXzFHCisJaWYgKCF0MV9pc19hc2ljKGFkYXB0ZXIpKQorCQlyZXR1cm4gZnBnYV9zbG93X2ludHIoYWRhcHRlcik7CisjZW5kaWYKKwlyZXR1cm4gYXNpY19zbG93X2ludHIoYWRhcHRlcik7CiB9CiAKLXZvaWQgdDFfdHBfc2V0X2lwX2NoZWNrc3VtX29mZmxvYWQoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgZW5hYmxlKQorLyogUG93ZXIgc2VxdWVuY2luZyBpcyBhIHdvcmstYXJvdW5kIGZvciBJbnRlbCdzIFhQQUtzLiAqLworc3RhdGljIHZvaWQgcG93ZXJfc2VxdWVuY2VfeHBhayhhZGFwdGVyX3QqIGFkYXB0ZXIpCiB7Ci0Jc2V0X2NzdW1fb2ZmbG9hZChhZGFwdGVyLCBGX0lQX0NTVU0sIGVuYWJsZSk7Ci19CisgICAgCXUzMiBtb2RfZGV0ZWN0OworICAgIAl1MzIgZ3BvOwogCi12b2lkIHQxX3RwX3NldF91ZHBfY2hlY2tzdW1fb2ZmbG9hZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBlbmFibGUpCi17Ci0Jc2V0X2NzdW1fb2ZmbG9hZChhZGFwdGVyLCBGX1VEUF9DU1VNLCBlbmFibGUpOwotfQotCi12b2lkIHQxX3RwX3NldF90Y3BfY2hlY2tzdW1fb2ZmbG9hZChhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBlbmFibGUpCi17Ci0Jc2V0X2NzdW1fb2ZmbG9hZChhZGFwdGVyLCBGX1RDUF9DU1VNLCBlbmFibGUpOwotfQotCi1zdGF0aWMgdm9pZCB0MV90cF9yZXNldChhZGFwdGVyX3QgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCB0cF9jbGspCi17Ci0JdTMyIHZhbDsKLQotCXZhbCA9IEZfVFBfSU5fQ1NQSV9DUEwgfCBGX1RQX0lOX0NTUElfQ0hFQ0tfSVBfQ1NVTSB8Ci0JICAgICAgRl9UUF9JTl9DU1BJX0NIRUNLX1RDUF9DU1VNIHwgRl9UUF9JTl9FU1BJX0VUSEVSTkVUOwotCXZhbCB8PSBGX1RQX0lOX0VTUElfQ0hFQ0tfSVBfQ1NVTSB8Ci0JICAgICAgIEZfVFBfSU5fRVNQSV9DSEVDS19UQ1BfQ1NVTTsKLQl3cml0ZWwodmFsLCBhZGFwdGVyLT5yZWdzICsgQV9UUF9JTl9DT05GSUcpOwotCXdyaXRlbChGX1RQX09VVF9DU1BJX0NQTCB8Ci0JICAgICAgIEZfVFBfT1VUX0VTUElfRVRIRVJORVQgfAotCSAgICAgICBGX1RQX09VVF9FU1BJX0dFTkVSQVRFX0lQX0NTVU0gfAotCSAgICAgICBGX1RQX09VVF9FU1BJX0dFTkVSQVRFX1RDUF9DU1VNLAotCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9UUF9PVVRfQ09ORklHKTsKLQotCXZhbCA9IHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX1RQX0dMT0JBTF9DT05GSUcpOwotCXZhbCAmPSB+KEZfSVBfQ1NVTSB8IEZfVURQX0NTVU0gfCBGX1RDUF9DU1VNKTsKLQl3cml0ZWwodmFsLCBhZGFwdGVyLT5yZWdzICsgQV9UUF9HTE9CQUxfQ09ORklHKTsKLQotCS8qCi0JICogRW5hYmxlIHBhdXNlIGZyYW1lIGRlYWRsb2NrIHByZXZlbnRpb24uCi0JICovCi0JaWYgKGlzX1QyKGFkYXB0ZXIpKSB7Ci0JCXUzMiBkcm9wX3RpY2tzID0gRFJPUF9NU0VDICogKHRwX2NsayAvIDEwMDApOwotCi0JCXdyaXRlbChGX0VOQUJMRV9UWF9EUk9QIHwgRl9FTkFCTEVfVFhfRVJST1IgfAotCQkgICAgICAgVl9EUk9QX1RJQ0tTX0NOVChkcm9wX3RpY2tzKSB8Ci0JCSAgICAgICBWX05VTV9QS1RTX0RST1BQRUQoRFJPUF9QS1RTX0NOVCksCi0JCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9UUF9UWF9EUk9QX0NPTkZJRyk7CisgICAgCS8qIENoZWNrIGZvciBYUEFLICovCisgICAgCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIEFfRUxNRVIwX0dQSV9TVEFULCAmbW9kX2RldGVjdCk7CisJaWYgKCEoRUxNRVIwX0dQX0JJVDUgJiBtb2RfZGV0ZWN0KSkgeworCQkvKiBYUEFLIGlzIHByZXNlbnQgKi8KKwkJdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmZ3BvKTsKKwkJZ3BvIHw9IEVMTUVSMF9HUF9CSVQxODsKKwkJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgZ3BvKTsKIAl9Ci0KLQl3cml0ZWwoRl9UUF9SRVNFVCwgYWRhcHRlci0+cmVncyArIEFfVFBfUkVTRVQpOwogfQogCiBpbnQgX19kZXZpbml0IHQxX2dldF9ib2FyZF9yZXYoYWRhcHRlcl90ICphZGFwdGVyLCBjb25zdCBzdHJ1Y3QgYm9hcmRfaW5mbyAqYmksCiAJCQkgICAgICAgc3RydWN0IGFkYXB0ZXJfcGFyYW1zICpwKQogewogCXAtPmNoaXBfdmVyc2lvbiA9IGJpLT5jaGlwX3Rlcm07CisJcC0+aXNfYXNpYyA9IChwLT5jaGlwX3ZlcnNpb24gIT0gQ0hCVF9URVJNX0ZQR0EpOwogCWlmIChwLT5jaGlwX3ZlcnNpb24gPT0gQ0hCVF9URVJNX1QxIHx8Ci0JICAgIHAtPmNoaXBfdmVyc2lvbiA9PSBDSEJUX1RFUk1fVDIpIHsKKwkgICAgcC0+Y2hpcF92ZXJzaW9uID09IENIQlRfVEVSTV9UMiB8fAorCSAgICBwLT5jaGlwX3ZlcnNpb24gPT0gQ0hCVF9URVJNX0ZQR0EpIHsKIAkJdTMyIHZhbCA9IHJlYWRsKGFkYXB0ZXItPnJlZ3MgKyBBX1RQX1BDX0NPTkZJRyk7CiAKIAkJdmFsID0gR19UUF9QQ19SRVYodmFsKTsKQEAgLTY0MCwxMSArODcyLDM4IEBACiBzdGF0aWMgaW50IGJvYXJkX2luaXQoYWRhcHRlcl90ICphZGFwdGVyLCBjb25zdCBzdHJ1Y3QgYm9hcmRfaW5mbyAqYmkpCiB7CiAJc3dpdGNoIChiaS0+Ym9hcmQpIHsKKwljYXNlIENIQlRfQk9BUkRfODAwMDoKIAljYXNlIENIQlRfQk9BUkRfTjExMDoKIAljYXNlIENIQlRfQk9BUkRfTjIxMDoKLQkJd3JpdGVsKFZfVFBJUEFSKDB4ZiksIGFkYXB0ZXItPnJlZ3MgKyBBX1RQSV9QQVIpOworCWNhc2UgQ0hCVF9CT0FSRF9DSFQyMTA6CisJY2FzZSBDSEJUX0JPQVJEX0NPVUdBUjoKKyAgICAJCXQxX3RwaV9wYXIoYWRhcHRlciwgMHhmKTsKICAgICAJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIDB4ODAwKTsKIAkJYnJlYWs7CisJY2FzZSBDSEJUX0JPQVJEX0NIVDExMDoKKyAgICAJCXQxX3RwaV9wYXIoYWRhcHRlciwgMHhmKTsKKyAgICAJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIDB4MTgwMCk7CisKKyAgICAJCS8qIFRCRCBYWFggTWlnaHQgbm90IG5lZWQuICBUaGlzIGZpeGVzIGEgcHJvYmxlbQorICAgICAJCSAqICAgICAgICAgZGVzY3JpYmVkIGluIHRoZSBJbnRlbCBTUiBYUEFLIGVycmF0YS4KKyAgICAgCQkgKi8KKyAgICAJCXBvd2VyX3NlcXVlbmNlX3hwYWsoYWRhcHRlcik7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxXzFHCisgICAgY2FzZSBDSEJUX0JPQVJEX0NIVDIwNEU6CisJCSAgICAgICAgLyogYWRkIGNvbmZpZyBzcGFjZSB3cml0ZSBoZXJlICovCisJY2FzZSBDSEJUX0JPQVJEX0NIVDIwNDoKKwljYXNlIENIQlRfQk9BUkRfQ0hUMjA0VjoKKwljYXNlIENIQlRfQk9BUkRfQ0hOMjA0OgorICAgICAgICAgICAgICAgIHQxX3RwaV9wYXIoYWRhcHRlciwgMHhmKTsKKyAgICAgICAgICAgICAgICB0MV90cGlfd3JpdGUoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAweDgwNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisJY2FzZSBDSEJUX0JPQVJEX0NIVDEwMToKKwljYXNlIENIQlRfQk9BUkRfNzUwMDoKKyAgICAJCXQxX3RwaV9wYXIoYWRhcHRlciwgMHhmKTsKKyAgICAJCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIDB4MTgwNCk7CisJCWJyZWFrOworI2VuZGlmCiAJfQogCXJldHVybiAwOwogfQpAQCAtNjY2LDExICs5MjUsMTYgQEAKIAkJICAgICAgIGFkYXB0ZXItPnJlZ3MgKyBBX01DNV9DT05GSUcpOwogCX0KIAorI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUgorCWlmIChhZGFwdGVyLT5jc3BpICYmIHQxX2NzcGlfaW5pdChhZGFwdGVyLT5jc3BpKSkKKwkJZ290byBvdXRfZXJyOworI2VuZGlmCiAJaWYgKGFkYXB0ZXItPmVzcGkgJiYgdDFfZXNwaV9pbml0KGFkYXB0ZXItPmVzcGksIGJpLT5jaGlwX21hYywKIAkJCQkJICBiaS0+ZXNwaV9ucG9ydHMpKQogCQlnb3RvIG91dF9lcnI7CiAKLQl0MV90cF9yZXNldChhZGFwdGVyLCBiaS0+Y2xvY2tfY29yZSk7CisJaWYgKHQxX3RwX3Jlc2V0KGFkYXB0ZXItPnRwLCAmYWRhcHRlci0+cGFyYW1zLnRwLCBiaS0+Y2xvY2tfY29yZSkpCisJCWdvdG8gb3V0X2VycjsKIAogCWVyciA9IHQxX3NnZV9jb25maWd1cmUoYWRhcHRlci0+c2dlLCAmYWRhcHRlci0+cGFyYW1zLnNnZSk7CiAJaWYgKGVycikKQEAgLTcxNCw4ICs5NzgsMTQgQEAKIAogCWlmIChhZGFwdGVyLT5zZ2UpCiAJCXQxX3NnZV9kZXN0cm95KGFkYXB0ZXItPnNnZSk7CisJaWYgKGFkYXB0ZXItPnRwKQorCQl0MV90cF9kZXN0cm95KGFkYXB0ZXItPnRwKTsKIAlpZiAoYWRhcHRlci0+ZXNwaSkKIAkJdDFfZXNwaV9kZXN0cm95KGFkYXB0ZXItPmVzcGkpOworI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUgorICAgICAgICBpZiAoYWRhcHRlci0+Y3NwaSkKKwkJdDFfY3NwaV9kZXN0cm95KGFkYXB0ZXItPmNzcGkpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2xpbmtfY29uZmlnKHN0cnVjdCBsaW5rX2NvbmZpZyAqbGMsCkBAIC03MzUsNiArMTAwNSwxMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxX0NPVUdBUgorCWlmIChiaS0+Y2xvY2tfY3NwaSAmJiAhKGFkYXB0ZXItPmNzcGkgPSB0MV9jc3BpX2NyZWF0ZShhZGFwdGVyKSkpIHsKKwkJQ0hfRVJSKCIlczogQ1NQSSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKKwkJZ290byBlcnJvcjsKKyAgICAgICAgfQorI2VuZGlmCiAKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaG9sZCB0aGUgU1cgc3RhdGUgb2YKQEAgLTc2Miw2ICsxMDM5LDEzIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCisJYWRhcHRlci0+dHAgPSB0MV90cF9jcmVhdGUoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy50cCk7CisJaWYgKCFhZGFwdGVyLT50cCkgeworCQlDSF9FUlIoIiVzOiBUUCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKKwkJZ290byBlcnJvcjsKKwl9CisKIAlib2FyZF9pbml0KGFkYXB0ZXIsIGJpKTsKIAliaS0+bWRpb19vcHMtPmluaXQoYWRhcHRlciwgYmkpOwogCWlmIChiaS0+Z3BoeS0+cmVzZXQpCkBAIC03OTMsNyArMTA3Nyw5IEBACiAJCSAqIEdldCB0aGUgcG9ydCdzIE1BQyBhZGRyZXNzZXMgZWl0aGVyIGZyb20gdGhlIEVFUFJPTSBpZiBvbmUKIAkJICogZXhpc3RzIG9yIHRoZSBvbmUgaGFyZGNvZGVkIGluIHRoZSBNQUMuCiAJCSAqLwotCQlpZiAodnBkX21hY2FkZHJlc3NfZ2V0KGFkYXB0ZXIsIGksIGh3X2FkZHIpKSB7CisJCWlmICghdDFfaXNfYXNpYyhhZGFwdGVyKSB8fCBiaS0+Y2hpcF9tYWMgPT0gQ0hCVF9NQUNfRFVNTVkpCisJCQltYWMtPm9wcy0+bWFjYWRkcmVzc19nZXQobWFjLCBod19hZGRyKTsKKwkJZWxzZSBpZiAodnBkX21hY2FkZHJlc3NfZ2V0KGFkYXB0ZXIsIGksIGh3X2FkZHIpKSB7CiAJCQlDSF9FUlIoIiVzOiBjb3VsZCBub3QgcmVhZCBNQUMgYWRkcmVzcyBmcm9tIFZQRCBST01cbiIsCiAJCQkgICAgICAgYWRhcHRlci0+cG9ydFtpXS5kZXYtPm5hbWUpOwogCQkJZ290byBlcnJvcjsKQEAgLTgwNiw3ICsxMDkyLDcgQEAKIAl0MV9pbnRlcnJ1cHRzX2NsZWFyKGFkYXB0ZXIpOwogCXJldHVybiAwOwogCi0gZXJyb3I6CitlcnJvcjoKIAl0MV9mcmVlX3N3X21vZHVsZXMoYWRhcHRlcik7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdW5pMXgxMGdleHBfcmVncy5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zdW5pMXgxMGdleHBfcmVncy5oCmluZGV4IDgxODE2YzIuLjI2OWQwOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vc3VuaTF4MTBnZXhwX3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1bmkxeDEwZ2V4cF9yZWdzLmgKQEAgLTMyLDYgKzMyLDMwIEBACiAjaWZuZGVmIF9DWEdCX1NVTkkxeDEwR0VYUF9SRUdTX0hfCiAjZGVmaW5lIF9DWEdCX1NVTkkxeDEwR0VYUF9SRUdTX0hfCiAKKy8qCisqKiBTcGFjZSBhbGxvY2F0ZWQgZm9yIGVhY2ggRXhhY3QgTWF0Y2ggRmlsdGVyCisqKiAgICAgVGhlcmUgYXJlIDggZmlsdGVyIGNvbmZpZ3VyYXRpb25zCisqLworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1NJWkVPRl9NQUNfRklMVEVSIDB4MDAwMworCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfTUFDX0ZJTFRFUl9PRkZTRVQoZmlsdGVySWQpICAgICAgICggKGZpbHRlcklkKSAqIFNVTkkxeDEwR0VYUF9SRUdfU0laRU9GX01BQ19GSUxURVIgKQorCisvKgorKiogU3BhY2UgYWxsb2NhdGVkIGZvciBWTEFOLUlkIEZpbHRlcgorKiogICAgICBUaGVyZSBhcmUgOCBmaWx0ZXIgY29uZmlndXJhdGlvbnMKKyovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfU0laRU9GX01BQ19WSURfRklMVEVSIDB4MDAwMQorCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfTUFDX1ZJRF9GSUxURVJfT0ZGU0VUKGZpbHRlcklkKSAgICggKGZpbHRlcklkKSAqIFNVTkkxeDEwR0VYUF9SRUdfU0laRU9GX01BQ19WSURfRklMVEVSICkKKworLyoKKyoqIFNwYWNlIGFsbG9jYXRlZCBmb3IgZWFjaCBNU1RBVCBDb3VudGVyCisqLworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1NJWkVPRl9NU1RBVF9DT1VOVCAweDAwMDQKKworI2RlZmluZSBtU1VOSTF4MTBHRVhQX01TVEFUX0NPVU5UX09GRlNFVChjb3VudElkKSAgICAgICAoIChjb3VudElkKSAqIFNVTkkxeDEwR0VYUF9SRUdfU0laRU9GX01TVEFUX0NPVU5UICkKKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqIFMvVU5JLTF4MTBHRS1YUCBSRUdJU1RFUiBBRERSRVNTIE1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zOSwzMyArNjMsMTI1IEBACiAvKiB0byB0aGUgUy9VTkktMXgxMEdFLVhQIERhdGEgU2hlZXQgZm9yIHRoZSBzaWduaWZpY2F0aW9uIG9mIGVhY2ggYml0ICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfSURFTlRJRklDQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUFJPRFVDVF9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfQ09ORklHX0FORF9SRVNFVF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfTE9PUEJBQ0tfTUlTQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfREVWSUNFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfR0xPQkFMX1BFUkZPUk1BTkNFX01PTklUT1JfVVBEQVRFICAgICAgICAgICAgICAgMHgwMDA1CisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19NRElPX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19NRElPX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDcKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19NRElPX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19NTURfUEhZX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19NTURfQ09OVFJPTF9BRERSRVNTX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEEKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19NRElPX1JFQURfU1RBVFVTX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMEIKKworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX09BTV9JTlRGX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01BU1RFUl9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRAogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX0dMT0JBTF9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX0ZSRUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRgorCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfWFRFRl9NSVNDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfWFJGX01JU0NfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDExCisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19TRVJERVNfMzEyNV9DT05GSUdfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19TRVJERVNfMzEyNV9DT05GSUdfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDEKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19TRVJERVNfMzEyNV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAweDAxMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19TRVJERVNfMzEyNV9JTlRFUlJVUFRfVklTSUJMRSAgICAgICAgICAgICAgICAgICAweDAxMDMKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19TRVJERVNfMzEyNV9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDAxMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19TRVJERVNfMzEyNV9URVNUX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDcKKwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfQ09ORklHXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfQ09ORklHXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0MQogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfQ09ORklHXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0MgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0MwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfTUFYX0ZSQU1FX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0NQogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfU0FfMTVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0NgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfU0FfMzFfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0NwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfU0FfNDdfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYWEdfUkVDRUlWRV9GSUZPX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAgICAgIDB4MjA0OQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX1JFR19SWFhHX0VYQUNUX01BVENIX0FERFJfTE9XKGZpbHRlcklkKSAoMHgyMDRBICsgbVNVTkkxeDEwR0VYUF9NQUNfRklMVEVSX09GRlNFVChmaWx0ZXJJZCkpCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfUkVHX1JYWEdfRVhBQ1RfTUFUQ0hfQUREUl9NSUQoZmlsdGVySWQpICgweDIwNEIgKyBtU1VOSTF4MTBHRVhQX01BQ19GSUxURVJfT0ZGU0VUKGZpbHRlcklkKSkKKyNkZWZpbmUgbVNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSX0hJR0goZmlsdGVySWQpKDB4MjA0QyArIG1TVU5JMXgxMEdFWFBfTUFDX0ZJTFRFUl9PRkZTRVQoZmlsdGVySWQpKQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX1JFR19SWFhHX0VYQUNUX01BVENIX1ZJRChmaWx0ZXJJZCkgICAgICAoMHgyMDYyICsgbVNVTkkxeDEwR0VYUF9NQUNfVklEX0ZJTFRFUl9PRkZTRVQoZmlsdGVySWQpCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzBfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDRBCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzBfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDRCCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzBfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDRDCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzFfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDRECiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzFfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDRFCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzFfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDRGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzJfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDUwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzJfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDUxCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzJfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDUyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzNfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDUzCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzNfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDU0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzNfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDU1CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzRfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDU2CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzRfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDU3CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzRfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDU4CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzVfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDU5CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzVfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDVBCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzVfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDVCCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzZfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDVDCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzZfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDVECisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzZfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDVFCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzdfTE9XICAgICAgICAgICAgICAgICAgICAgMHgyMDVGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzdfTUlEICAgICAgICAgICAgICAgICAgICAgMHgyMDYwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9BRERSXzdfSElHSCAgICAgICAgICAgICAgICAgICAgMHgyMDYxCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDYyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDYzCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDY0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDY1CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfNCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDY2CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfNSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDY3CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfNiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDY4CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19FWEFDVF9NQVRDSF9WSURfNyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDY5CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19NVUxUSUNBU1RfSEFTSF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDZBCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19NVUxUSUNBU1RfSEFTSF9NSURMT1cgICAgICAgICAgICAgICAgICAgICAgMHgyMDZCCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19NVUxUSUNBU1RfSEFTSF9NSURISUdIICAgICAgICAgICAgICAgICAgICAgMHgyMDZDCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19NVUxUSUNBU1RfSEFTSF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDZECiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19BRERSRVNTX0ZJTFRFUl9DT05UUk9MXzAgICAgICAgICAgICAgICAgICAgMHgyMDZFCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19BRERSRVNTX0ZJTFRFUl9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHgyMDZGCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUlhYR19BRERSRVNTX0ZJTFRFUl9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHgyMDcwCisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfUEFUVEVSTl9HRU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwODEKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfOEJUQl9FUlJfQ09VTlRfTEFORV8wICAgICAgICAgICAgICAgICAgICAgICAweDIwODQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfOEJUQl9FUlJfQ09VTlRfTEFORV8xICAgICAgICAgICAgICAgICAgICAgICAweDIwODUKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfOEJUQl9FUlJfQ09VTlRfTEFORV8yICAgICAgICAgICAgICAgICAgICAgICAweDIwODYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfOEJUQl9FUlJfQ09VTlRfTEFORV8zICAgICAgICAgICAgICAgICAgICAgICAweDIwODcKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfSU5URVJSVVBUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwODgKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwODkKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfRVJSX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwOEEKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfRElBR19JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAweDIwOEIKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfRElBR19JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAweDIwOEMKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19YUkZfQ09ERV9FUlJfVEhSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwOTIKKworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl8xX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl8yX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0NPTkZJR18yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0hFQ19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0hFQ19FUlJfVEhSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDNQogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0lOVEVSUlVQVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDNwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0hFQ19FUlJfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJRk9fT1ZFUkZMT1dfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgIDB4MjBDQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl9NSVNNQVRDSF9DT1VOVF9MU0IgICAgICAgICAgICAgICAgIDB4MjBDQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl9NSVNNQVRDSF9DT1VOVF9NU0IgICAgICAgICAgICAgICAgIDB4MjBDRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl8xX01JU01BVENIX0NPVU5UX0xTQiAgICAgICAgICAgICAgIDB4MjBDRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl8xX01JU01BVENIX0NPVU5UX01TQiAgICAgICAgICAgICAgIDB4MjBDRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl8yX01JU01BVENIX0NPVU5UX0xTQiAgICAgICAgICAgICAgIDB4MjBEMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl8yX01JU01BVENIX0NPVU5UX01TQiAgICAgICAgICAgICAgIDB4MjBEMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX09BTV9FWFRSQUNUX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgIDB4MjBEMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX09BTV9FWFRSQUNUX0NPVU5UX01TQiAgICAgICAgICAgICAgICAgICAgIDB4MjBEMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX01JTklfUEFDS0VUX0NPVU5UX0xTQiAgICAgICAgICAgICAgICAgICAgIDB4MjBENAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX01JTklfUEFDS0VUX0NPVU5UX01TQiAgICAgICAgICAgICAgICAgICAgIDB4MjBENQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl9NSVNNQVRDSF9USFJFU19MU0IgICAgICAgICAgICAgICAgIDB4MjBENgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1JYT0FNX0ZJTFRFUl9NSVNNQVRDSF9USFJFU19NU0IgICAgICAgICAgICAgICAgIDB4MjBENworCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTAwCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl9ST0xMT1ZFUl8wICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTAxCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl9ST0xMT1ZFUl8xICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTAyCkBAIC03NSw1MCArMTkxLDMyMSBAQAogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0lOVEVSUlVQVF9NQVNLXzEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwNgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0lOVEVSUlVQVF9NQVNLXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwNwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0lOVEVSUlVQVF9NQVNLXzMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfV1JJVEVfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgIDB4MjEwOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfV1JJVEVfREFUQV9MT1cgICAgICAgICAgICAgICAgICAgIDB4MjEwQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfV1JJVEVfREFUQV9NSURETEUgICAgICAgICAgICAgICAgIDB4MjEwQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfV1JJVEVfREFUQV9ISUdIICAgICAgICAgICAgICAgICAgIDB4MjEwQworI2RlZmluZSBtU1VOSTF4MTBHRVhQX1JFR19NU1RBVF9DT1VOVEVSX0xPVyhjb3VudElkKSAgICgweDIxMTAgKyBtU1VOSTF4MTBHRVhQX01TVEFUX0NPVU5UX09GRlNFVChjb3VudElkKSkKKyNkZWZpbmUgbVNVTkkxeDEwR0VYUF9SRUdfTVNUQVRfQ09VTlRFUl9NSUQoY291bnRJZCkgICAoMHgyMTExICsgbVNVTkkxeDEwR0VYUF9NU1RBVF9DT1VOVF9PRkZTRVQoY291bnRJZCkpCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfSElHSChjb3VudElkKSAgKDB4MjExMiArIG1TVU5JMXgxMEdFWFBfTVNUQVRfQ09VTlRfT0ZGU0VUKGNvdW50SWQpKQogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMF9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMF9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExMwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMV9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMV9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExNworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMl9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMl9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfM19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfM19NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfM19ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfM19SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjExRgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNF9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNF9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyMwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNV9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNV9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyNwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNl9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNl9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNl9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNl9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfN19MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfN19NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfN19ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfN19SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEyRgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOF9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOF9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOF9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOF9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOV9MT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOV9NSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfOV9SRVNWRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzNwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTBfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTBfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTBfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTBfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzQgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTFfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTFfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEzRgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTJfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTJfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTJfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0MwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTNfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTNfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTNfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0NgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTNfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0NworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTRfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0QQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTRfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0QgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0QworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTVfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0RAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTVfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0RQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTVfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE0RgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTZfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTZfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1MwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTdfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTdfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1NgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTdfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1NwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMThfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMThfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMThfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1QQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMThfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1QgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTlfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1QworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTlfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1RAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTlfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1RQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMTlfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE1RgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjBfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjBfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjBfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjBfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2MworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjFfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2NgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjFfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2NworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjJfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjJfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2QQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjJfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2QgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjNfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2QworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjNfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2RAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjNfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2RQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjNfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE2RgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjRfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjRfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3MworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjVfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjVfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3NgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjVfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3NworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjZfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3YQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjZfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3YgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjdfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3YworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjdfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3ZAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3ZQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjdfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE3ZgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjhfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjhfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjhfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjhfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjlfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjlfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjlfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4NgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMjlfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4NworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzBfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzBfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzBfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4QQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzBfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4QgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4QworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzFfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4RAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4RQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzFfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4RgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzJfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzJfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzJfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5MwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzNfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzNfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzNfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5NgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzNfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5NworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5OAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzRfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5QQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzRfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5QgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5QworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzVfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5RAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzVfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5RQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzVfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE5RgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzZfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzZfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzdfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzdfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzdfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBNwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzhfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzhfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzhfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzhfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzlfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzlfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzlfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfMzlfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFBRgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDBfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDBfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDBfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDBfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDFfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDFfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCNwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDJfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDJfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDJfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCQgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDNfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDNfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDNfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDNfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFCRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDRfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDRfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDRfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDRfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDVfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDVfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDVfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDVfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDNworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDZfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDZfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDZfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDZfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDdfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDdfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDRAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDdfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDRQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDdfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFDRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDhfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDhfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDhfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDhfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDlfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFENAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDlfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFENQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDlfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFENgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNDlfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFENworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTBfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTBfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTBfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEQQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTBfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEQgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTFfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFEQworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTFfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFERAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTFfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFERQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTFfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFERgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTJfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTJfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFMQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTJfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTJfUkVTVkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFMworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTNfTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTNfTUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFNQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01TVEFUX0NPVU5URVJfNTNfSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjFFNgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQ05UUl9NQUNfRVRIRVJORVRfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxCisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0dMT0JBTF9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0NIQU5ORUxfUFJPVklTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDEKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0ZJRk9fT1ZFUkZMT1dfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAweDIyMDkKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0ZJRk9fT1ZFUkZMT1dfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAweDIyMEEKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0lORElSX0NIQU5ORUxfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAweDIyMEQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0lORElSX0xPR0lDQUxfRklGT19MT1dfTElNSVRfUFJPVklTSU9OICAgICAweDIyMEUKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0lORElSX0xPR0lDQUxfRklGT19ISUdIX0xJTUlUICAgICAgICAgICAgICAweDIyMEYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0lORElSX0ZVTExfQUxNT1NUX0ZVTExfU1RBVFVTX0xJTUlUICAgICAgICAweDIyMTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19JRkxYX0lORElSX0VNUFRZX0FMTU9TVF9FTVBUWV9TVEFUVVNfTElNSVQgICAgICAweDIyMTEKKworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1BMNE1PU19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1BMNE1PU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1BMNE1PU19GQUlSTkVTU19NQVNLSU5HICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0MgorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1BMNE1PU19NQVhCVVJTVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0MworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1BMNE1PU19NQVhCVVJTVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0NAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1BMNE1PU19UUkFOU0ZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjI0NQorCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUEw0T0RQX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjgwCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUEw0T0RQX0lOVEVSUlVQVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjgyCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUEw0T0RQX0lOVEVSUlVQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjgzCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfUEw0T0RQX0NPTkZJR19NQVhfVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjg0CisKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJT19MT0NLX0RFVEVDVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAweDIzMDAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJT19MT0NLX0RFVEVDVF9DSEFOR0UgICAgICAgICAgICAgICAgICAgICAgICAweDIzMDEKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJT19MT0NLX0RFVEVDVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweDIzMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJT19MT0NLX0RFVEVDVF9MSU1JVFMgICAgICAgICAgICAgICAgICAgICAgICAweDIzMDMKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJT19DQUxFTkRBUl9SRVBFVElUSU9OUyAgICAgICAgICAgICAgICAgICAgICAweDIzMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJT19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIzMDUKKwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfQ09ORklHXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfQ09ORklHXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0MQogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfQ09ORklHXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0MgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0MworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0NAogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfTUFYX0ZSQU1FX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0NQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfTUlOX0ZSQU1FX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0NgogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfU0FfMTVfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0NwogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfU0FfMzFfMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0OAogI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfU0FfNDdfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0OQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfUEFVU0VfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0RAorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfUEFVU0VfVElNRVJfSU5URVJWQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0RQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfRklMVEVSX0VSUk9SX0NPVU5URVIgICAgICAgICAgICAgICAgICAgICAgIDB4MzA1MQorI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX1RYWEdfUEFVU0VfUVVBTlRVTV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgIDB4MzA1MgorCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfWFRFRl9DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDgwCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfWFRFRl9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDg0CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfWFRFRl9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDg1CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfWFRFRl9WSVNJQklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDg2CisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9PQU1fQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9NSU5JX1JBVEVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzEKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9NSU5JX0dBUF9GSUZPX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAweDMwQzIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9QMVAyX1NUQVRJQ19WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzMKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9QM1A0X1NUQVRJQ19WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9QNVA2X1NUQVRJQ19WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzUKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9JTlRFUlJVUFRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzYKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9JTlRFUlJVUFRfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzcKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9JTlNFUlRfQ09VTlRfTFNCICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9JTlNFUlRfQ09VTlRfTVNCICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQzkKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9PQU1fTUlOSV9DT1VOVF9MU0IgICAgICAgICAgICAgICAgICAgICAgICAweDMwQ0EKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9PQU1fTUlOSV9DT1VOVF9NU0IgICAgICAgICAgICAgICAgICAgICAgICAweDMwQ0IKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9QMVAyX01JTklfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQ0MKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9QM1A0X01JTklfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQ0QKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9QNVA2X01JTklfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQ0UKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9DT1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwQ0YKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9FTVBUWV9GSUZPX0lOU19PUF9DTlRfTFNCICAgICAgICAgICAgICAgICAweDMwRDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9FTVBUWV9GSUZPX0lOU19PUF9DTlRfTVNCICAgICAgICAgICAgICAgICAweDMwRDEKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9TVEFUSUNfVkFMVUVfTUlOSV9DT1VOVF9MU0IgICAgICAgICAgICAgICAweDMwRDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19UWE9BTV9TVEFUSUNfVkFMVUVfTUlOSV9DT1VOVF9NU0IgICAgICAgICAgICAgICAweDMwRDMKKworCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9HTE9CQUxfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9FUkNVX0dMT0JBTF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMjAxCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9JTkRJUl9DSEFOTkVMX0FERFJFU1MgICAgICAgICAgICAgICAgICAgICAgMHgzMjAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9JTkRJUl9GSUZPX0xPV19MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgMHgzMjAzCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9JTkRJUl9GSUZPX0hJR0hfTElNSVQgICAgICAgICAgICAgICAgICAgICAgMHgzMjA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9JTkRJUl9GVUxMX0FMTU9TVF9GVUxMX1NUQVRVU19BTkRfTElNSVQgICAgMHgzMjA1CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9JTkRJUl9FTVBUWV9BTE1PU1RfRU1QVFlfU1RBVFVTX0FORF9MSU1JVCAgMHgzMjA2CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9JTkRJUl9GSUZPX0NVVF9USFJPVUdIX1RIUkVTSE9MRCAgICAgICAgICAgMHgzMjA3CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9GSUZPX09WRVJGTE9XX0VSUk9SX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgzMjBDCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9GSUZPX09WRVJGTE9XX0VSUk9SX0lORElDQVRJT04gICAgICAgICAgICAgMHgzMjBECisjZGVmaW5lIFNVTkkxeDEwR0VYUF9SRUdfRUZMWF9DSEFOTkVMX1BST1ZJU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMjEwCisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJRFVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMyODAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJRFVfSU5URVJSVVBUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMyODIKICNkZWZpbmUgU1VOSTF4MTBHRVhQX1JFR19QTDRJRFVfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMyODMKIAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfUkVHX01BWF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzQ4MAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgIC0tIEVuZCByZWdpc3RlciBvZmZzZXQgZGVmaW5pdGlvbnMgLS0gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMjcsNiArNTE0LDgxIEBACiAvKiogU1VOSS0xeDEwR0UtWFAgUkVHSVNURVIgQklUIE1BU0tTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfMSAgIDB4MDAwMDEKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzIgICAweDAwMDAzCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18zICAgMHgwMDAwNworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfNCAgIDB4MDAwMGYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzUgICAweDAwMDFmCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU182ICAgMHgwMDAzZgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfNyAgIDB4MDAwN2YKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzggICAweDAwMGZmCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU185ICAgMHgwMDFmZgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfMTAgIDB4MDAzZmYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzExICAweDAwN2ZmCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18xMiAgMHgwMGZmZgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfMTMgIDB4MDFmZmYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzE0ICAweDAzZmZmCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18xNSAgMHgwN2ZmZgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfMTYgIDB4MGZmZmYKKworI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMSh2KSAgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18xNSkKKyNkZWZpbmUgbVNVTkkxeDEwR0VYUF9DTFJfTVNCSVRTXzIodikgICgodikgJiBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfMTQpCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfQ0xSX01TQklUU18zKHYpICAoKHYpICYgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzEzKQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfNCh2KSAgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18xMikKKyNkZWZpbmUgbVNVTkkxeDEwR0VYUF9DTFJfTVNCSVRTXzUodikgICgodikgJiBTVU5JMXgxMEdFWFBfQklUTVNLX0JJVFNfMTEpCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfQ0xSX01TQklUU182KHYpICAoKHYpICYgU1VOSTF4MTBHRVhQX0JJVE1TS19CSVRTXzEwKQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfNyh2KSAgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU185KQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfOCh2KSAgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU184KQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfOSh2KSAgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU183KQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMTAodikgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU182KQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMTEodikgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU181KQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMTIodikgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU180KQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMTModikgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18zKQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMTQodikgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18yKQorI2RlZmluZSBtU1VOSTF4MTBHRVhQX0NMUl9NU0JJVFNfMTUodikgKCh2KSAmIFNVTkkxeDEwR0VYUF9CSVRNU0tfQklUU18xKQorCisjZGVmaW5lIG1TVU5JMXgxMEdFWFBfR0VUX0JJVCh2YWwsIGJpdE1zaykgKCgodmFsKSYoYml0TXNrKSkgPyAxOjApCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAwMTogUy9VTkktMXgxMEdFLVhQIFByb2R1Y3QgUmV2aXNpb24KKyAqICAgIEJpdCAzLTAgIFJFVklTSU9OCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JFVklTSU9OICAweDAwMEYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDAwMDI6IFMvVU5JLTF4MTBHRS1YUCBDb25maWd1cmF0aW9uIGFuZCBSZXNldCBDb250cm9sCisgKiAgICBCaXQgMiAgWEFVSV9BUkVTRVRCCisgKiAgICBCaXQgMSAgUEw0X0FSRVNFVEIKKyAqICAgIEJpdCAwICBEUkVTRVRCCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1hBVUlfQVJFU0VUICAweDAwMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRfQVJFU0VUICAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRFJFU0VUQiAgICAgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAwMzogUy9VTkktMXgxMEdFLVhQIExvb3AgQmFjayBhbmQgTWlzY2VsbGFuZW91cyBDb250cm9sCisgKiAgICBCaXQgMTEgIFBMNElPX09VVENMS1NFTAorICogICAgQml0IDkgICBTWVNQQ1NMQgorICogICAgQml0IDggICBMSU5FUENTTEIKKyAqICAgIEJpdCA3ICAgTVNUQVRfQllQQVNTCisgKiAgICBCaXQgNiAgIFJYWEdfQllQQVNTCisgKiAgICBCaXQgNSAgIFRYWEdfQllQQVNTCisgKiAgICBCaXQgNCAgIFNPUF9QQURfRU4KKyAqICAgIEJpdCAxICAgTE9TX0lOVgorICogICAgQml0IDAgICBPVkVSUklERV9MT1MKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fT1VUQ0xLU0VMICAweDA4MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19TWVNQQ1NMQiAgICAgICAgIDB4MDIwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0xJTkVQQ1NMQiAgICAgICAgMHgwMTAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTVNUQVRfQllQQVNTICAgICAweDAwODAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0JZUEFTUyAgICAgIDB4MDA0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYWEdfQllQQVNTICAgICAgMHgwMDIwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfU09QX1BBRF9FTiAgICAgICAweDAwMTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19MT1NfSU5WICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX09WRVJSSURFX0xPUyAgICAgMHgwMDAxCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUmVnaXN0ZXIgMHgwMDA0OiBTL1VOSS0xeDEwR0UtWFAgRGV2aWNlIFN0YXR1cwogICogICAgQml0IDkgVE9QX1NYUkFfRVhQSVJFRApAQCAtMTQxLDcgKzYwMywxMCBAQAogICogICAgQml0IDAgVE9QX1BMNF9PVVRfUk9PTAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfU1hSQV9FWFBJUkVEICAweDAyMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfTURJT19CVVNZICAgICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfRFRSQiAgICAgICAgICAweDAwODAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfRVhQSVJFRCAgICAgICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfUEFVU0VEICAgICAgICAweDAwMjAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfUEw0X0lEX0RPT0wgICAweDAwMTAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfUEw0X0lTX0RPT0wgICAweDAwMDgKICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfUEw0X0lEX1JPT0wgICAweDAwMDQKQEAgLTE0OSwxMiArNjE0LDIxOSBAQAogI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9QTDRfT1VUX1JPT0wgIDB4MDAwMQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAwNTogR2xvYmFsIFBlcmZvcm1hbmNlIFVwZGF0ZSBhbmQgQ2xvY2sgTW9uaXRvcnMKKyAqICAgIEJpdCAxNSBUSVAKKyAqICAgIEJpdCA4ICBYQVVJX1JFRl9DTEtBCisgKiAgICBCaXQgNyAgUlhMQU5FM0NMS0EKKyAqICAgIEJpdCA2ICBSWExBTkUyQ0xLQQorICogICAgQml0IDUgIFJYTEFORTFDTEtBCisgKiAgICBCaXQgNCAgUlhMQU5FMENMS0EKKyAqICAgIEJpdCAzICBDU1VDTEtBCisgKiAgICBCaXQgMiAgVERDTEtBCisgKiAgICBCaXQgMSAgUlNDTEtBCisgKiAgICBCaXQgMCAgUkRDTEtBCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RJUCAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1hBVUlfUkVGX0NMS0EgIDB4MDEwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYTEFORTNDTEtBICAgIDB4MDA4MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYTEFORTJDTEtBICAgIDB4MDA0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYTEFORTFDTEtBICAgIDB4MDAyMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYTEFORTBDTEtBICAgIDB4MDAxMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0NTVUNMS0EgICAgICAgIDB4MDAwOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1REQ0xLQSAgICAgICAgIDB4MDAwNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JTQ0xLQSAgICAgICAgIDB4MDAwMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JEQ0xLQSAgICAgICAgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAwNjogTURJTyBDb21tYW5kCisgKiAgICBCaXQgNCBNRElPX1JESU5DCisgKiAgICBCaXQgMyBNRElPX1JTVEFUCisgKiAgICBCaXQgMiBNRElPX0xDVExECisgKiAgICBCaXQgMSBNRElPX0xDVExBCisgKiAgICBCaXQgMCBNRElPX1NQUkUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTURJT19SRElOQyAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTURJT19SU1RBVCAgMHgwMDA4CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTURJT19MQ1RMRCAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTURJT19MQ1RMQSAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTURJT19TUFJFICAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgwMDA3OiBNRElPIEludGVycnVwdCBFbmFibGUKKyAqICAgIEJpdCAwIE1ESU9fQlVTWV9FTgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NRElPX0JVU1lfRU4gIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAwODogTURJTyBJbnRlcnJ1cHQgU3RhdHVzCisgKiAgICBCaXQgMCBNRElPX0JVU1lJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX01ESU9fQlVTWUkgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAwOTogTU1EIFBIWSBBZGRyZXNzCisgKiAgICBCaXQgMTItOCBNRElPX0RFVkFEUgorICogICAgQml0IDQtMCBNRElPX1BSVEFEUgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NRElPX0RFVkFEUiAgMHgxRjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfTURJT19ERVZBRFIgIDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NRElPX1BSVEFEUiAgMHgwMDFGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfTURJT19QUlRBRFIgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDAwMEM6IE9BTSBJbnRlcmZhY2UgQ29udHJvbAorICogICAgQml0IDYgTURPX09EX0VOQgorICogICAgQml0IDUgTURJX0lOVgorICogICAgQml0IDQgTURJX1NFTAorICogICAgQml0IDMgUlhPQU1FTgorICogICAgQml0IDIgUlhPQU1DTEtFTgorICogICAgQml0IDEgVFhPQU1FTgorICogICAgQml0IDAgVFhPQU1DTEtFTgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NRE9fT0RfRU5CICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NRElfSU5WICAgICAweDAwMjAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NRElfU0VMICAgICAweDAwMTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTUVOICAgICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTUNMS0VOICAweDAwMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTUVOICAgICAweDAwMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTUNMS0VOICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDAwMEQ6IFMvVU5JLTF4MTBHRS1YUCBNYXN0ZXIgSW50ZXJydXB0IFN0YXR1cworICogICAgQml0IDE1IFRPUF9QTDRJT19JTlQKKyAqICAgIEJpdCAxNCBUT1BfSVJBTV9JTlQKKyAqICAgIEJpdCAxMyBUT1BfRVJBTV9JTlQKKyAqICAgIEJpdCAxMiBUT1BfWEFVSV9JTlQKKyAqICAgIEJpdCAxMSBUT1BfTVNUQVRfSU5UCisgKiAgICBCaXQgMTAgVE9QX1JYWEdfSU5UCisgKiAgICBCaXQgOSBUT1BfVFhYR19JTlQKKyAqICAgIEJpdCA4IFRPUF9YUkZfSU5UCisgKiAgICBCaXQgNyBUT1BfWFRFRl9JTlQKKyAqICAgIEJpdCA2IFRPUF9NRElPX0JVU1lfSU5UCisgKiAgICBCaXQgNSBUT1BfUlhPQU1fSU5UCisgKiAgICBCaXQgNCBUT1BfVFhPQU1fSU5UCisgKiAgICBCaXQgMyBUT1BfSUZMWF9JTlQKKyAqICAgIEJpdCAyIFRPUF9FRkxYX0lOVAorICogICAgQml0IDEgVE9QX1BMNE9EUF9JTlQKKyAqICAgIEJpdCAwIFRPUF9QTDRJRFVfSU5UCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9QTDRJT19JTlQgICAgICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfSVJBTV9JTlQgICAgICAgMHg0MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVE9QX0VSQU1fSU5UICAgICAgIDB4MjAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9YQVVJX0lOVCAgICAgICAweDEwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfTVNUQVRfSU5UICAgICAgMHgwODAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVE9QX1JYWEdfSU5UICAgICAgIDB4MDQwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9UWFhHX0lOVCAgICAgICAweDAyMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfWFJGX0lOVCAgICAgICAgMHgwMTAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVE9QX1hURUZfSU5UICAgICAgIDB4MDA4MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9NRElPX0JVU1lfSU5UICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfUlhPQU1fSU5UICAgICAgMHgwMDIwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVE9QX1RYT0FNX0lOVCAgICAgIDB4MDAxMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9JRkxYX0lOVCAgICAgICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UT1BfRUZMWF9JTlQgICAgICAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVE9QX1BMNE9EUF9JTlQgICAgIDB4MDAwMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RPUF9QTDRJRFVfSU5UICAgICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBSZWdpc3RlciAweDAwMEU6UE0zMzkzIEdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlCiAgKiAgICBCaXQgMTUgVE9QX0lOVEUKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVE9QX0lOVEUgIDB4ODAwMAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDAxMDogWFRFRiBNaXNjZWxsYW5lb3VzIENvbnRyb2wKKyAqICAgIEJpdCA3IFJGX1ZBTAorICogICAgQml0IDYgUkZfT1ZFUlJJREUKKyAqICAgIEJpdCA1IExGX1ZBTAorICogICAgQml0IDQgTEZfT1ZFUlJJREUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUkZfVkFMICAgICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JGX09WRVJSSURFICAgICAgICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19MRl9WQUwgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEZfT1ZFUlJJREUgICAgICAgIDB4MDAxMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0xGUkZfT1ZFUlJJREVfVkFMICAweDAwRjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDAwMTE6IFhSRiBNaXNjZWxsYW5lb3VzIENvbnRyb2wKKyAqICAgIEJpdCA2LTQgRU5fSURMRV9SRVAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRU5fSURMRV9SRVAgIDB4MDA3MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDEwMDogU0VSREVTIDMxMjUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgKiAgICBCaXQgMTAgUlhFUUJfMworICogICAgQml0IDggIFJYRVFCXzIKKyAqICAgIEJpdCA2ICBSWEVRQl8xCisgKiAgICBCaXQgNCAgUlhFUUJfMAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWEVRQiAgICAweDBGRjAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9SWEVRQl8zICAxMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1JYRVFCXzIgIDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9SWEVRQl8xICA2CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUlhFUUJfMCAgNAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDEwMTogU0VSREVTIDMxMjUgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCisgKiAgICBCaXQgMTIgWVNFTAorICogICAgQml0ICA3IFBSRV9FTVBIXzMKKyAqICAgIEJpdCAgNiBQUkVfRU1QSF8yCisgKiAgICBCaXQgIDUgUFJFX0VNUEhfMQorICogICAgQml0ICA0IFBSRV9FTVBIXzAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfWVNFTCAgICAgICAgMHgxMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUFJFX0VNUEggICAgMHgwMEYwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUFJFX0VNUEhfMyAgMHgwMDgwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUFJFX0VNUEhfMiAgMHgwMDQwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUFJFX0VNUEhfMSAgMHgwMDIwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUFJFX0VNUEhfMCAgMHgwMDEwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgwMTAyOiBTRVJERVMgMzEyNSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCisgKiAgICBCaXQgMyBMQVNJRQorICogICAgQml0IDIgU1BMTF9SQUUKKyAqICAgIEJpdCAxIE1QTExfUkFFCisgKiAgICBCaXQgMCBQTExfTE9DS0UKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFTSUUgICAgICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19TUExMX1JBRSAgIDB4MDAwNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX01QTExfUkFFICAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUExMX0xPQ0tFICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDAxMDM6IFNFUkRFUyAzMTI1IEludGVycnVwdCBWaXNpYmlsaXR5IFJlZ2lzdGVyCisgKiAgICBCaXQgMyBMQVNJVgorICogICAgQml0IDIgU1BMTF9SQVYKKyAqICAgIEJpdCAxIE1QTExfUkFWCisgKiAgICBCaXQgMCBQTExfTE9DS1YKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFTSVYgICAgICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19TUExMX1JBViAgIDB4MDAwNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX01QTExfUkFWICAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUExMX0xPQ0tWICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDAxMDQ6IFNFUkRFUyAzMTI1IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIKKyAqICAgIEJpdCAzIExBU0lJCisgKiAgICBCaXQgMiBTUExMX1JBSQorICogICAgQml0IDEgTVBMTF9SQUkKKyAqICAgIEJpdCAwIFBMTF9MT0NLSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19MQVNJSSAgICAgIDB4MDAwOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1NQTExfUkFJICAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTVBMTF9SQUkgICAweDAwMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTExfTE9DS0kgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDEwNzogU0VSREVTIDMxMjUgVGVzdCBDb25maWd1cmF0aW9uCisgKiAgICBCaXQgMTIgRFVBTFRYCisgKiAgICBCaXQgMTAgSENfMQorICogICAgQml0ICA5IEhDXzAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRFVBTFRYICAweDEwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19IQyAgICAgIDB4MDYwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0hDXzAgICAgOQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFJlZ2lzdGVyIDB4MjA0MDogUlhYRyBDb25maWd1cmF0aW9uIDEKICAqICAgIEJpdCAxNSAgUlhYR19SWEVOCiAgKiAgICBCaXQgMTQgIFJYWEdfUk9DRgpAQCAtMTY4LDExICs4NDAsODQgQEAKICAqICAgIEJpdCAyLTAgUlhYR19NSUZHCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfUlhFTiAgICAgICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX1JPQ0YgICAgICAgMHg0MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19QQURfU1RSSVAgIDB4MjAwMAogI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfUFVSRVAgICAgICAweDA0MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0xPTkdQICAgICAgMHgwMjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19QQVJGICAgICAgIDB4MDEwMAogI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfRkxDSEsgICAgICAweDAwODAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX1BBU1NfQ1RSTCAgMHgwMDIwCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19DUkNfU1RSSVAgIDB4MDAwOAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MDIwNDE6IFJYWEcgQ29uZmlndXJhdGlvbiAyCisgKiAgICBCaXQgNy0wIFJYWEdfSERSU0laRQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0hEUlNJWkUgIDB4MDBGRgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjA0MjogUlhYRyBDb25maWd1cmF0aW9uIDMKKyAqICAgIEJpdCAxNSBSWFhHX01JTl9MRVJSRQorICogICAgQml0IDE0IFJYWEdfTUFYX0xFUlJFCisgKiAgICBCaXQgMTIgUlhYR19MSU5FX0VSUkUKKyAqICAgIEJpdCAxMCBSWFhHX1JYX09WUkUKKyAqICAgIEJpdCA5ICBSWFhHX0FEUl9GSUxURVJFCisgKiAgICBCaXQgOCAgUlhYR19FUlJfRklMVEVSRQorICogICAgQml0IDUgIFJYWEdfUFJNQl9FUlJFCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfTUlOX0xFUlJFICAgICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX01BWF9MRVJSRSAgICAgMHg0MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19MSU5FX0VSUkUgICAgIDB4MTAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfUlhfT1ZSRSAgICAgICAweDA0MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0FEUl9GSUxURVJFICAgMHgwMjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19FUlJfRklMVEVSUkUgIDB4MDEwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfUFJNQl9FUlJFICAgICAweDAwMjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwNDM6IFJYWEcgSW50ZXJydXB0CisgKiAgICBCaXQgMTUgUlhYR19NSU5fTEVSUkkKKyAqICAgIEJpdCAxNCBSWFhHX01BWF9MRVJSSQorICogICAgQml0IDEyIFJYWEdfTElORV9FUlJJCisgKiAgICBCaXQgMTAgUlhYR19SWF9PVlJJCisgKiAgICBCaXQgOSAgUlhYR19BRFJfRklMVEVSSQorICogICAgQml0IDggIFJYWEdfRVJSX0ZJTFRFUkkKKyAqICAgIEJpdCA1ICBSWFhHX1BSTUJfRVJSRQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX01JTl9MRVJSSSAgICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX01BWF9MRVJSSSAgICAweDQwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0xJTkVfRVJSSSAgICAweDEwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX1JYX09WUkkgICAgICAweDA0MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0FEUl9GSUxURVJJICAweDAyMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0VSUl9GSUxURVJJICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX1BSTUJfRVJSRSAgICAweDAwMjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwNDk6IFJYWEcgUmVjZWl2ZSBGSUZPIFRocmVzaG9sZAorICogICAgQml0IDItMCBSWFhHX0NVVF9USFJVCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYWEdfQ1VUX1RIUlUgIDB4MDAwNworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1JYWEdfQ1VUX1RIUlUgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwNjJIIC0gMHgyMDY5OiBSWFhHIEV4YWN0IE1hdGNoIFZJRAorICogICAgQml0IDExLTAgUlhYR19WSURfTUFUQ0gKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19WSURfTUFUQ0ggIDB4MEZGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1JYWEdfVklEX01BVENIICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMDZFSCAtIDB4MjA2RjogUlhYRyBBZGRyZXNzIEZpbHRlciBDb250cm9sCisgKiAgICBCaXQgMyBSWFhHX0ZPUldBUkRfRU5BQkxFCisgKiAgICBCaXQgMiBSWFhHX1ZMQU5fRU5BQkxFCisgKiAgICBCaXQgMSBSWFhHX1NSQ19BRERSCisgKiAgICBCaXQgMCBSWFhHX01BVENIX0VOQUJMRQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX0ZPUldBUkRfRU5BQkxFICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX1ZMQU5fRU5BQkxFICAgICAweDAwMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX1NSQ19BRERSICAgICAgICAweDAwMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX01BVENIX0VOQUJMRSAgICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBSZWdpc3RlciAweDIwNzA6IFJYWEcgQWRkcmVzcyBGaWx0ZXIgQ29udHJvbCAyCiAgKiAgICBCaXQgMSBSWFhHX1BNT0RFCiAgKiAgICBCaXQgMCBSWFhHX01IQVNIX0VOCkBAIC0xODEsMTUgKzkyNiw0NDYgQEAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWFhHX01IQVNIX0VOICAweDAwMDEKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwODE6IFhSRiBDb250cm9sIFJlZ2lzdGVyIDIKKyAqICAgIEJpdCA2ICAgRU5fUEtUX0dFTgorICogICAgQml0IDQtMiBQQVRUCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VOX1BLVF9HRU4gIDB4MDA0MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BBVFQgICAgICAgIDB4MDAxQworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1BBVFQgICAgICAgIDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwODg6IFhSRiBJbnRlcnJ1cHQgRW5hYmxlCisgKiAgICBCaXQgMTItOSBMQU5FX0hJQ0VSRQorICogICAgQml0IDgtNSAgSFNfU0RfTEFORUUKKyAqICAgIEJpdCA0ICAgIEFMSUdOX1NUQVRVU19FUlJFCisgKiAgICBCaXQgMy0wICBMQU5FX1NZTkNfU1RBVF9FUlJFCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0xBTkVfSElDRVJFICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0xBTkVfSElDRVJFICAgICAgICAgIDkKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19IU19TRF9MQU5FRSAgICAgICAgICAweDAxRTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9IU19TRF9MQU5FRSAgICAgICAgICA1CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQUxJR05fU1RBVFVTX0VSUkUgICAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORV9TWU5DX1NUQVRfRVJSRSAgMHgwMDBGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfTEFORV9TWU5DX1NUQVRfRVJSRSAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjA4OTogWFJGIEludGVycnVwdCBTdGF0dXMKKyAqICAgIEJpdCAxMi05IExBTkVfSElDRVJJCisgKiAgICBCaXQgOC01ICBIU19TRF9MQU5FSQorICogICAgQml0IDQgICAgQUxJR05fU1RBVFVTX0VSUkkKKyAqICAgIEJpdCAzLTAgIExBTkVfU1lOQ19TVEFUX0VSUkkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORV9ISUNFUkkgICAgICAgICAgMHgxRTAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfTEFORV9ISUNFUkkgICAgICAgICAgOQorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0hTX1NEX0xBTkVJICAgICAgICAgIDB4MDFFMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0hTX1NEX0xBTkVJICAgICAgICAgIDUKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19BTElHTl9TVEFUVVNfRVJSSSAgICAweDAwMTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19MQU5FX1NZTkNfU1RBVF9FUlJJICAweDAwMEYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9MQU5FX1NZTkNfU1RBVF9FUlJJICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMDhBOiBYUkYgRXJyb3IgU3RhdHVzCisgKiAgICBCaXQgOC01ICBIU19TRF9MQU5FCisgKiAgICBCaXQgNCAgICBBTElHTl9TVEFUVVNfRVJSCisgKiAgICBCaXQgMy0wICBMQU5FX1NZTkNfU1RBVF9FUlIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSFNfU0RfTEFORTMgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSFNfU0RfTEFORTIgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSFNfU0RfTEFORTEgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSFNfU0RfTEFORTAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfQUxJR05fU1RBVFVTX0VSUiAgICAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORTNfU1lOQ19TVEFUX0VSUiAgMHgwMDA4CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORTJfU1lOQ19TVEFUX0VSUiAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORTFfU1lOQ19TVEFUX0VSUiAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORTBfU1lOQ19TVEFUX0VSUiAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMDhCOiBYUkYgRGlhZ25vc3RpYyBJbnRlcnJ1cHQgRW5hYmxlCisgKiAgICBCaXQgNy00IExBTkVfT1ZFUlJVTkUKKyAqICAgIEJpdCAzLTAgTEFORV9VTkRFUlJVTkUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORV9PVkVSUlVORSAgIDB4MDBGMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0xBTkVfT1ZFUlJVTkUgICA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORV9VTkRFUlJVTkUgIDB4MDAwRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0xBTkVfVU5ERVJSVU5FICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMDhDOiBYUkYgRGlhZ25vc3RpYyBJbnRlcnJ1cHQgU3RhdHVzCisgKiAgICBCaXQgNy00IExBTkVfT1ZFUlJVTkkKKyAqICAgIEJpdCAzLTAgTEFORV9VTkRFUlJVTkkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORV9PVkVSUlVOSSAgIDB4MDBGMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0xBTkVfT1ZFUlJVTkkgICA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTEFORV9VTkRFUlJVTkkgIDB4MDAwRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0xBTkVfVU5ERVJSVU5JICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMEMwOiBSWE9BTSBDb25maWd1cmF0aW9uCisgKiAgICBCaXQgMTUgICAgUlhPQU1fQlVTWQorICogICAgQml0IDE0LTEyIFJYT0FNX0YyX1NFTAorICogICAgQml0IDEwLTggIFJYT0FNX0YxX1NFTAorICogICAgQml0IDctNiAgIFJYT0FNX0ZJTFRFUl9DVFJMCisgKiAgICBCaXQgNS0wICAgUlhPQU1fUFhfRU4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fQlVTWSAgICAgICAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYT0FNX0YyX1NFTCAgICAgICAweDcwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9SWE9BTV9GMl9TRUwgICAgICAgMTIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9GMV9TRUwgICAgICAgMHgwNzAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUlhPQU1fRjFfU0VMICAgICAgIDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9GSUxURVJfQ1RSTCAgMHgwMEMwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUlhPQU1fRklMVEVSX0NUUkwgIDYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9QWF9FTiAgICAgICAgMHgwMDNGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUlhPQU1fUFhfRU4gICAgICAgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwQzEsMHgyMEMyOiBSWE9BTSBGaWx0ZXIgQ29uZmlndXJhdGlvbgorICogICAgQml0IDE1LTggUlhPQU1fRlhfTUFTSworICogICAgQml0IDctMCAgUlhPQU1fRlhfVkFMCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYT0FNX0ZYX01BU0sgIDB4RkYwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1JYT0FNX0ZYX01BU0sgIDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9GWF9WQUwgICAweDAwRkYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9SWE9BTV9GWF9WQWwgICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMEMzOiBSWE9BTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIKKyAqICAgIEJpdCAxMyAgICBSWE9BTV9SRUNfQllURV9WQUwKKyAqICAgIEJpdCAxMS0xMCBSWE9BTV9CWVBBU1NfTU9ERQorICogICAgQml0IDUtMCAgIFJYT0FNX1BYX0NMRUFSCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1JYT0FNX1JFQ19CWVRFX1ZBTCAgMHgyMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fQllQQVNTX01PREUgICAweDBDMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9SWE9BTV9CWVBBU1NfTU9ERSAgIDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fUFhfQ0xFQVIgICAgICAweDAwM0YKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9SWE9BTV9QWF9DTEVBUiAgICAgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwQzQ6IFJYT0FNIEhFQyBDb25maWd1cmF0aW9uCisgKiAgICBCaXQgMTUtOCBSWE9BTV9DT1NFVAorICogICAgQml0IDIgICAgUlhPQU1fSEVDX0VSUl9QS1QKKyAqICAgIEJpdCAwICAgIFJYT0FNX0hFQ19FTgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9DT1NFVCAgICAgICAgMHhGRjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUlhPQU1fQ09TRVQgICAgICAgIDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9IRUNfRVJSX1BLVCAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fSEVDX0VOICAgICAgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjBDNzogUlhPQU0gSW50ZXJydXB0IEVuYWJsZQorICogICAgQml0IDEwIFJYT0FNX0ZJTFRFUl9USFJTSEUKKyAqICAgIEJpdCA5ICBSWE9BTV9PQU1fRVJSRQorICogICAgQml0IDggIFJYT0FNX0hFQ0VfVEhSU0hFCisgKiAgICBCaXQgNyAgUlhPQU1fU09QRQorICogICAgQml0IDYgIFJYT0FNX1JGRQorICogICAgQml0IDUgIFJYT0FNX0xGRQorICogICAgQml0IDQgIFJYT0FNX0RWX0VSUkUKKyAqICAgIEJpdCAzICBSWE9BTV9EQVRBX0lOVkFMSURFCisgKiAgICBCaXQgMiAgUlhPQU1fRklMVEVSX0RST1BFCisgKiAgICBCaXQgMSAgUlhPQU1fSEVDRQorICogICAgQml0IDAgIFJYT0FNX09GTEUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fRklMVEVSX1RIUlNIRSAgMHgwNDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fT0FNX0VSUkUgICAgICAgMHgwMjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fSEVDRV9USFJTSEUgICAgMHgwMTAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fU09QRSAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fUkZFICAgICAgICAgICAgMHgwMDQwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fTEZFICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fRFZfRVJSRSAgICAgICAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fREFUQV9JTlZBTElERSAgMHgwMDA4CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fRklMVEVSX0RST1BFICAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fSEVDRSAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhPQU1fT0ZMRSAgICAgICAgICAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMEM4OiBSWE9BTSBJbnRlcnJ1cHQgU3RhdHVzCisgKiAgICBCaXQgMTAgUlhPQU1fRklMVEVSX1RIUlNISQorICogICAgQml0IDkgIFJYT0FNX09BTV9FUlJJCisgKiAgICBCaXQgOCAgUlhPQU1fSEVDRV9USFJTSEkKKyAqICAgIEJpdCA3ICBSWE9BTV9TT1BJCisgKiAgICBCaXQgNiAgUlhPQU1fUkZJCisgKiAgICBCaXQgNSAgUlhPQU1fTEZJCisgKiAgICBCaXQgNCAgUlhPQU1fRFZfRVJSSQorICogICAgQml0IDMgIFJYT0FNX0RBVEFfSU5WQUxJREkKKyAqICAgIEJpdCAyICBSWE9BTV9GSUxURVJfRFJPUEkKKyAqICAgIEJpdCAxICBSWE9BTV9IRUNJCisgKiAgICBCaXQgMCAgUlhPQU1fT0ZMSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9GSUxURVJfVEhSU0hJICAweDA0MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9PQU1fRVJSSSAgICAgICAweDAyMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9IRUNFX1RIUlNISSAgICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9TT1BJICAgICAgICAgICAweDAwODAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9SRkkgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9MRkkgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9EVl9FUlJJICAgICAgICAweDAwMTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9EQVRBX0lOVkFMSURJICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9GSUxURVJfRFJPUEkgICAweDAwMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9IRUNJICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9PRkxJICAgICAgICAgICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIwQzk6IFJYT0FNIFN0YXR1cworICogICAgQml0IDEwIFJYT0FNX0ZJTFRFUl9USFJTSFYKKyAqICAgIEJpdCA4ICBSWE9BTV9IRUNFX1RIUlNIVgorICogICAgQml0IDYgIFJYT0FNX1JGVgorICogICAgQml0IDUgIFJYT0FNX0xGVgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9GSUxURVJfVEhSU0hWICAweDA0MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9IRUNFX1RIUlNIViAgICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9SRlYgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19SWE9BTV9MRlYgICAgICAgICAgICAweDAwMjAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBSZWdpc3RlciAweDIxMDA6IE1TVEFUIENvbnRyb2wKICAqICAgIEJpdCAyIE1TVEFUX1dSSVRFCiAgKiAgICBCaXQgMSBNU1RBVF9DTEVBUgogICogICAgQml0IDAgTVNUQVRfU05BUAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19NU1RBVF9XUklURSAgMHgwMDA0CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfTVNUQVRfQ0xFQVIgIDB4MDAwMgogI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX01TVEFUX1NOQVAgICAweDAwMDEKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIxMDk6IE1TVEFUIENvdW50ZXIgV3JpdGUgQWRkcmVzcworICogICAgQml0IDUtMCBNU1RBVF9XUklURV9BRERSRVNTCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX01TVEFUX1dSSVRFX0FERFJFU1MgMHgwMDNGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfTVNUQVRfV1JJVEVfQUREUkVTUyAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMjAwOiBJRkxYIEdsb2JhbCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKiAgICBCaXQgMTUgICBJRkxYX0lSQ1VfRU5BQkxFCisgKiAgICBCaXQgMTQgICBJRkxYX0lEU1dUX0VOQUJMRQorICogICAgQml0IDEzLTAgSUZMWF9JRkRfQ05UCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0lGTFhfSVJDVV9FTkFCTEUgICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19JRkxYX0lEU1dUX0VOQUJMRSAgMHg0MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9JRkRfQ05UICAgICAgIDB4M0ZGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0lGTFhfSUZEX0NOVCAgICAgICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMjA5OiBJRkxYIEZJRk8gT3ZlcmZsb3cgRW5hYmxlCisgKiAgICBCaXQgMCBJRkxYX09WRkUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9PVkZFIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjIwQTogSUZMWCBGSUZPIE92ZXJmbG93IEludGVycnVwdAorICogICAgQml0IDAgSUZMWF9PVkZJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0lGTFhfT1ZGSSAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIyMEQ6IElGTFggSW5kaXJlY3QgQ2hhbm5lbCBBZGRyZXNzCisgKiAgICBCaXQgMTUgSUZMWF9CVVNZCisgKiAgICBCaXQgMTQgSUZMWF9SV0IKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9CVVNZICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19JRkxYX1JXQiAgIDB4NDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjIwRTogSUZMWCBJbmRpcmVjdCBMb2dpY2FsIEZJRk8gTG93IExpbWl0ICYgUHJvdmlzaW9uCisgKiAgICBCaXQgOS0wIElGTFhfTE9MSU0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9MT0xJTSAgMHgwM0ZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfSUZMWF9MT0xJTSAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjIwRjogSUZMWCBJbmRpcmVjdCBMb2dpY2FsIEZJRk8gSGlnaCBMaW1pdAorICogICAgQml0IDktMCBJRkxYX0hJTElNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0lGTFhfSElMSU0gIDB4MDNGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0lGTFhfSElMSU0gIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIyMTA6IElGTFggSW5kaXJlY3QgRnVsbC9BbG1vc3QgRnVsbCBTdGF0dXMgJiBMaW1pdAorICogICAgQml0IDE1ICAgSUZMWF9GVUxMCisgKiAgICBCaXQgMTQgICBJRkxYX0FGVUxMCisgKiAgICBCaXQgMTMtMCBJRkxYX0FGVEgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9GVUxMICAgMHg4MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9BRlVMTCAgMHg0MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9BRlRIICAgMHgzRkZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfSUZMWF9BRlRIICAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjIxMTogSUZMWCBJbmRpcmVjdCBFbXB0eS9BbG1vc3QgRW1wdHkgU3RhdHVzICYgTGltaXQKKyAqICAgIEJpdCAxNSAgIElGTFhfRU1QVFkKKyAqICAgIEJpdCAxNCAgIElGTFhfQUVNUFRZCisgKiAgICBCaXQgMTMtMCBJRkxYX0FFVEgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfSUZMWF9FTVBUWSAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0lGTFhfQUVNUFRZICAweDQwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19JRkxYX0FFVEggICAgMHgzRkZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfSUZMWF9BRVRIICAgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIyNDA6IFBMNE1PUyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKiAgICBCaXQgMyBQTDRNT1NfUkVfSU5JVAorICogICAgQml0IDIgUEw0TU9TX0VOCisgKiAgICBCaXQgMSBQTDRNT1NfTk9fU1RBVFVTCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE1PU19SRV9JTklUICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE1PU19FTiAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE1PU19OT19TVEFUVVMgICAgICAgIDB4MDAwMgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjI0MzogUEw0TU9TIE1heEJ1cnN0MSBSZWdpc3RlcgorICogICAgQml0IDExLTAgUEw0TU9TX01BWF9CVVJTVDEKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0TU9TX01BWF9CVVJTVDEgIDB4MEZGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1BMNE1PU19NQVhfQlVSU1QxICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMjQ0OiBQTDRNT1MgTWF4QnVyc3QyIFJlZ2lzdGVyCisgKiAgICBCaXQgMTEtMCBQTDRNT1NfTUFYX0JVUlNUMgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRNT1NfTUFYX0JVUlNUMiAgMHgwRkZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUEw0TU9TX01BWF9CVVJTVDIgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIyNDU6IFBMNE1PUyBUcmFuc2ZlciBTaXplIFJlZ2lzdGVyCisgKiAgICBCaXQgNy0wIFBMNE1PU19NQVhfVFJBTlNGRVIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0TU9TX01BWF9UUkFOU0ZFUiAgMHgwMEZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUEw0TU9TX01BWF9UUkFOU0ZFUiAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjI4MDogUEw0T0RQIENvbmZpZ3VyYXRpb24KKyAqICAgIEJpdCAxNS0xMiBQTDRPRFBfUkVQRUFUX1QKKyAqICAgIEJpdCA4ICAgICBQTDRPRFBfU09QX1JVTEUKKyAqICAgIEJpdCAxICAgICBQTDRPRFBfRU5fUE9SVFMKKyAqICAgIEJpdCAwICAgICBQTDRPRFBfRU5fREZXRAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRPRFBfUkVQRUFUX1QgICAweEYwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9QTDRPRFBfUkVQRUFUX1QgICAxMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9TT1BfUlVMRSAgIDB4MDEwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9FTl9QT1JUUyAgIDB4MDAwMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9FTl9ERldEICAgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MjI4MjogUEw0T0RQIEludGVycnVwdCBNYXNrCisgKiAgICBCaXQgMCBQTDRPRFBfT1VUX0RJU0UKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0T0RQX09VVF9ESVNFICAgICAweDAwMDEKKworCisKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRPRFBfUFBFX0VPUEVPQkUgIDB4MDA4MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9QUEVfRVJSRU9QRSAgMHgwMDQwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0T0RQX1BQRV9NRU9QRSAgICAweDAwMDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRPRFBfUFBFX01TT1BFICAgIDB4MDAwNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9FU19PVlJFICAgICAgMHgwMDAyCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIyODM6IFBMNE9EUCBJbnRlcnJ1cHQKKyAqICAgIEJpdCAwIFBMNE9EUF9PVVRfRElTSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRPRFBfT1VUX0RJU0kgICAgIDB4MDAwMQorCisKKworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9QUEVfRU9QRU9CSSAgMHgwMDgwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0T0RQX1BQRV9FUlJFT1BJICAweDAwNDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRPRFBfUFBFX01FT1BJICAgIDB4MDAwOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNE9EUF9QUEVfTVNPUEkgICAgMHgwMDA0CisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0T0RQX0VTX09WUkkgICAgICAweDAwMDIKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIzMDA6ICBQTDRJTyBMb2NrIERldGVjdCBTdGF0dXMKKyAqICAgIEJpdCAxNSBQTDRJT19PVVRfUk9PTFYKKyAqICAgIEJpdCAxMiBQTDRJT19JU19ST09MVgorICogICAgQml0IDExIFBMNElPX0RJUDJfRVJSVgorICogICAgQml0IDggIFBMNElPX0lEX1JPT0xWCisgKiAgICBCaXQgNCAgUEw0SU9fSVNfRE9PTFYKKyAqICAgIEJpdCAwICBQTDRJT19JRF9ET09MVgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19PVVRfUk9PTFYgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0lTX1JPT0xWICAgMHgxMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fRElQMl9FUlJWICAweDA4MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19JRF9ST09MViAgIDB4MDEwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0lTX0RPT0xWICAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fSURfRE9PTFYgICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIzMDE6ICBQTDRJTyBMb2NrIERldGVjdCBDaGFuZ2UKKyAqICAgIEJpdCAxNSBQTDRJT19PVVRfUk9PTEkKKyAqICAgIEJpdCAxMiBQTDRJT19JU19ST09MSQorICogICAgQml0IDExIFBMNElPX0RJUDJfRVJSSQorICogICAgQml0IDggIFBMNElPX0lEX1JPT0xJCisgKiAgICBCaXQgNCAgUEw0SU9fSVNfRE9PTEkKKyAqICAgIEJpdCAwICBQTDRJT19JRF9ET09MSQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19PVVRfUk9PTEkgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0lTX1JPT0xJICAgMHgxMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fRElQMl9FUlJJICAweDA4MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19JRF9ST09MSSAgIDB4MDEwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0lTX0RPT0xJICAgMHgwMDEwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fSURfRE9PTEkgICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIzMDI6ICBQTDRJTyBMb2NrIERldGVjdCBNYXNrCisgKiAgICBCaXQgMTUgUEw0SU9fT1VUX1JPT0xFCisgKiAgICBCaXQgMTIgUEw0SU9fSVNfUk9PTEUKKyAqICAgIEJpdCAxMSBQTDRJT19ESVAyX0VSUkUKKyAqICAgIEJpdCA4ICBQTDRJT19JRF9ST09MRQorICogICAgQml0IDQgIFBMNElPX0lTX0RPT0xFCisgKiAgICBCaXQgMCAgUEw0SU9fSURfRE9PTEUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fT1VUX1JPT0xFICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19JU19ST09MRSAgIDB4MTAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0RJUDJfRVJSRSAgMHgwODAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fSURfUk9PTEUgICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19JU19ET09MRSAgIDB4MDAxMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0lEX0RPT0xFICAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMzAzOiAgUEw0SU8gTG9jayBEZXRlY3QgTGltaXRzCisgKiAgICBCaXQgMTUtOCBQTDRJT19SRUZfTElNSVQKKyAqICAgIEJpdCA3LTAgIFBMNElPX1RSQU5fTElNSVQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fUkVGX0xJTUlUICAgMHhGRjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUEw0SU9fUkVGX0xJTUlUICAgOAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX1RSQU5fTElNSVQgIDB4MDBGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1BMNElPX1RSQU5fTElNSVQgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDIzMDQ6ICBQTDRJTyBDYWxlbmRhciBSZXBldGl0aW9ucworICogICAgQml0IDE1LTggUEw0SU9fSU5fTVVMCisgKiAgICBCaXQgNy0wICBQTDRJT19PVVRfTVVMCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0lOX01VTCAgIDB4RkYwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1BMNElPX0lOX01VTCAgIDgKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19PVVRfTVVMICAweDAwRkYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9QTDRJT19PVVRfTVVMICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgyMzA1OiAgUEw0SU8gQ29uZmlndXJhdGlvbgorICogICAgQml0IDE1ICBQTDRJT19ESVAyX0VSUl9DSEsKKyAqICAgIEJpdCAxMSAgUEw0SU9fT0RBVF9ESVMKKyAqICAgIEJpdCAxMCAgUEw0SU9fVFJBSU5fRElTCisgKiAgICBCaXQgOSAgIFBMNElPX09TVEFUX0RJUworICogICAgQml0IDggICBQTDRJT19JU1RBVF9ESVMKKyAqICAgIEJpdCA3ICAgUEw0SU9fTk9fSVNUQVQKKyAqICAgIEJpdCA2ICAgUEw0SU9fU1RBVF9PVVRTRUwKKyAqICAgIEJpdCA1ICAgUEw0SU9fSU5TRUwKKyAqICAgIEJpdCA0ICAgUEw0SU9fRExTRUwKKyAqICAgIEJpdCAxLTAgUEw0SU9fT1VUU0VMCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX0RJUDJfRVJSX0NISyAgMHg4MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fT0RBVF9ESVMgICAgICAweDA4MDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19UUkFJTl9ESVMgICAgIDB4MDQwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX09TVEFUX0RJUyAgICAgMHgwMjAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fSVNUQVRfRElTICAgICAweDAxMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19OT19JU1RBVCAgICAgIDB4MDA4MAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX1NUQVRfT1VUU0VMICAgMHgwMDQwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SU9fSU5TRUwgICAgICAgICAweDAwMjAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJT19ETFNFTCAgICAgICAgIDB4MDAxMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElPX09VVFNFTCAgICAgICAgMHgwMDAzCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfUEw0SU9fT1VUU0VMICAgICAgICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogUmVnaXN0ZXIgMHgzMDQwOiBUWFhHIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQogICogICAgQml0IDE1ICAgVFhYR19UWEVOMAogICogICAgQml0IDEzICAgVFhYR19IT1NUUEFVU0UKQEAgLTIwMiwxMiArMTM3OCwyNjYgQEAKICAqICAgIEJpdCAwICAgIFRYWEdfU1BSRQogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX1RYRU4wICAgICAgICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX0hPU1RQQVVTRSAgICAweDIwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX0lQR1QgICAgICAgICAweDFGODAKICNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9UWFhHX0lQR1QgICAgICAgICA3CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR18zMkJJVF9BTElHTiAgMHgwMDIwCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19DUkNFTiAgICAgICAgMHgwMDEwCiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19GQ1RYICAgICAgICAgMHgwMDA4CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19GQ1JYICAgICAgICAgMHgwMDA0CiAjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19QQURFTiAgICAgICAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19TUFJFICAgICAgICAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMDQxOiBUWFhHIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgorICogICAgQml0IDctMCAgIFRYWEdfSERSU0laRQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX0hEUlNJWkUgIDB4MDBGRgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzA0MjogVFhYRyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKKyAqICAgIEJpdCAxNSBUWFhHX0ZJRk9fRVJSRQorICogICAgQml0IDE0IFRYWEdfRklGT19VRFJFCisgKiAgICBCaXQgMTMgVFhYR19NQVhfTEVSUkUKKyAqICAgIEJpdCAxMiBUWFhHX01JTl9MRVJSRQorICogICAgQml0IDExIFRYWEdfWEZFUkUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19GSUZPX0VSUkUgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYWEdfRklGT19VRFJFICAweDQwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX01BWF9MRVJSRSAgMHgyMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19NSU5fTEVSUkUgIDB4MTAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYWEdfWEZFUkUgICAgICAweDA4MDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMwNDM6IFRYWEcgSW50ZXJydXB0CisgKiAgICBCaXQgMTUgVFhYR19GSUZPX0VSUkkKKyAqICAgIEJpdCAxNCBUWFhHX0ZJRk9fVURSSQorICogICAgQml0IDEzIFRYWEdfTUFYX0xFUlJJCisgKiAgICBCaXQgMTIgVFhYR19NSU5fTEVSUkkKKyAqICAgIEJpdCAxMSBUWFhHX1hGRVJJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYWEdfRklGT19FUlJJICAweDgwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX0ZJRk9fVURSSSAgMHg0MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19NQVhfTEVSUkkgIDB4MjAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYWEdfTUlOX0xFUlJJICAweDEwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWFhHX1hGRVJJICAgICAgMHgwODAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMDQ0OiBUWFhHIFN0YXR1cyBSZWdpc3RlcgorICogICAgQml0IDEgVFhYR19UWEFDVElWRQorICogICAgQml0IDAgVFhYR19QQVVTRUQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19UWEFDVElWRSAgMHgwMDAyCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19QQVVTRUQgICAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMDQ2OiBUWFhHIFRYX01JTkZSIC0gIFRyYW5zbWl0IE1pbiBGcmFtZSBTaXplIFJlZ2lzdGVyCisgKiAgICBCaXQgNy0wIFRYWEdfVFhfTUlORlIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhYR19UWF9NSU5GUiAgMHgwMEZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfVFhYR19UWF9NSU5GUiAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzA1MjogVFhYRyBQYXVzZSBRdWFudHVtIFZhbHVlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKyAqICAgIEJpdCA3LTAgVFhYR19GQ19QQVVTRV9RTlRNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYWEdfRkNfUEFVU0VfUU5UTSAgMHgwMEZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfVFhYR19GQ19QQVVTRV9RTlRNICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMDgwOiBYVEVGIENvbnRyb2wKKyAqICAgIEJpdCAzLTAgWFRFRl9GT1JDRV9QQVJJVFlfRVJSCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1hURUZfRk9SQ0VfUEFSSVRZX0VSUiAgMHgwMDBGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfWFRFRl9GT1JDRV9QQVJJVFlfRVJSICAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMDg0OiBYVEVGIEludGVycnVwdCBFdmVudCBSZWdpc3RlcgorICogICAgQml0IDAgWFRFRl9MT1NUX1NZTkNJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1hURUZfTE9TVF9TWU5DSSAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMDg1OiBYVEVGIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIKKyAqICAgIEJpdCAwIFhURUZfTE9TVF9TWU5DRQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19YVEVGX0xPU1RfU1lOQ0UgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzA4NjogWFRFRiBWaXNpYmlsaXR5IFJlZ2lzdGVyCisgKiAgICBCaXQgMCBYVEVGX0xPU1RfU1lOQ1YKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfWFRFRl9MT1NUX1NZTkNWICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMwQzA6IFRYT0FNIE9BTSBDb25maWd1cmF0aW9uCisgKiAgICBCaXQgMTUgICBUWE9BTV9IRUNfRU4KKyAqICAgIEJpdCAxNCAgIFRYT0FNX0VNUFRZQ09ERV9FTgorICogICAgQml0IDEzICAgVFhPQU1fRk9SQ0VfSURMRQorICogICAgQml0IDEyICAgVFhPQU1fSUdOT1JFX0lETEUKKyAqICAgIEJpdCAxMS02IFRYT0FNX1BYX09WRVJXUklURQorICogICAgQml0IDUtMCAgVFhPQU1fUFhfU0VMCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX0hFQ19FTiAgICAgICAgMHg4MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhPQU1fRU1QVFlDT0RFX0VOICAweDQwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9GT1JDRV9JRExFICAgIDB4MjAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX0lHTk9SRV9JRExFICAgMHgxMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhPQU1fUFhfT1ZFUldSSVRFICAweDBGQzAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9UWE9BTV9QWF9PVkVSV1JJVEUgIDYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9QWF9TRUwgICAgICAgIDB4MDAzRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX1RYT0FNX1BYX1NFTCAgICAgICAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzBDMTogVFhPQU0gTWluaS1QYWNrZXQgUmF0ZSBDb25maWd1cmF0aW9uCisgKiAgICBCaXQgMTUgICBUWE9BTV9NSU5JRElTCisgKiAgICBCaXQgMTQgICBUWE9BTV9CVVNZCisgKiAgICBCaXQgMTMgICBUWE9BTV9UUkFOU19FTgorICogICAgQml0IDEwLTAgVFhPQU1fTUlOSVJBVEUKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhPQU1fTUlOSURJUyAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX0JVU1kgICAgICAweDQwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9UUkFOU19FTiAgMHgyMDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhPQU1fTUlOSVJBVEUgIDB4MDdGRgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzBDMjogVFhPQU0gTWluaS1QYWNrZXQgR2FwIGFuZCBGSUZPIENvbmZpZ3VyYXRpb24KKyAqICAgIEJpdCAxMy0xMCBUWE9BTV9GVEhSRVNICisgKiAgICBCaXQgOS02ICAgVFhPQU1fTUlOSVBPU1QKKyAqICAgIEJpdCA1LTAgICBUWE9BTV9NSU5JUFJFCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX0ZUSFJFU0ggICAweDNDMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE9GRl9UWE9BTV9GVEhSRVNIICAgMTAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9NSU5JUE9TVCAgMHgwM0MwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfVFhPQU1fTUlOSVBPU1QgIDYKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9NSU5JUFJFICAgMHgwMDNGCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMEM2OiBUWE9BTSBJbnRlcnJ1cHQgRW5hYmxlCisgKiAgICBCaXQgMiBUWE9BTV9TT1BfRVJSRQorICogICAgQml0IDEgVFhPQU1fT0ZMRQorICogICAgQml0IDAgVFhPQU1fRVJSRQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9TT1BfRVJSRSAgICAweDAwMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9PRkxFICAgICAgICAweDAwMDIKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19UWE9BTV9FUlJFICAgICAgICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMwQzc6IFRYT0FNIEludGVycnVwdCBTdGF0dXMKKyAqICAgIEJpdCAyIFRYT0FNX1NPUF9FUlJJCisgKiAgICBCaXQgMSBUWE9BTV9PRkxJCisgKiAgICBCaXQgMCBUWE9BTV9FUlJJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX1NPUF9FUlJJICAgIDB4MDAwNAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX09GTEkgICAgICAgIDB4MDAwMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1RYT0FNX0VSUkkgICAgICAgIDB4MDAwMQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzBDRjogVFhPQU0gQ29zZXQKKyAqICAgIEJpdCA3LTAgVFhPQU1fQ09TRVQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfVFhPQU1fQ09TRVQgIDB4MDBGRgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzIwMDogRUZMWCBHbG9iYWwgQ29uZmlndXJhdGlvbgorICogICAgQml0IDE1IEVGTFhfRVJDVV9FTgorICogICAgQml0IDcgIEVGTFhfRU5fRURTV1QKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRUZMWF9FUkNVX0VOICAgMHg4MDAwCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRUZMWF9FTl9FRFNXVCAgMHgwMDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMjAxOiBFRkxYIEVSQ1UgR2xvYmFsIFN0YXR1cworICogICAgQml0IDEzIEVGTFhfT1ZGX0VSUgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19FRkxYX09WRl9FUlIgIDB4MjAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzIwMjogRUZMWCBJbmRpcmVjdCBDaGFubmVsIEFkZHJlc3MKKyAqICAgIEJpdCAxNSBFRkxYX0JVU1kKKyAqICAgIEJpdCAxNCBFRkxYX1JEV1JCCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfQlVTWSAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfUkRXUkIgIDB4NDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzIwMzogRUZMWCBJbmRpcmVjdCBMb2dpY2FsIEZJRk8gTG93IExpbWl0CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfTE9MSU0gICAgICAgICAgICAgICAgICAgIDB4MDNGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0VGTFhfTE9MSU0gICAgICAgICAgICAgICAgICAgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMyMDQ6IEVGTFggSW5kaXJlY3QgTG9naWNhbCBGSUZPIEhpZ2ggTGltaXQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRUZMWF9ISUxJTSAgICAgICAgICAgICAgICAgICAgMHgwM0ZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfRUZMWF9ISUxJTSAgICAgICAgICAgICAgICAgICAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzIwNTogRUZMWCBJbmRpcmVjdCBGdWxsL0FsbW9zdC1GdWxsIFN0YXR1cyBhbmQgTGltaXQKKyAqICAgIEJpdCAxNSAgIEVGTFhfRlVMTAorICogICAgQml0IDE0ICAgRUZMWF9BRlVMTAorICogICAgQml0IDEzLTAgRUZMWF9BRlRICisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfRlVMTCAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfQUZVTEwgIDB4NDAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfQUZUSCAgIDB4M0ZGRgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUT0ZGX0VGTFhfQUZUSCAgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMyMDY6IEVGTFggSW5kaXJlY3QgRW1wdHkvQWxtb3N0LUVtcHR5IFN0YXR1cyBhbmQgTGltaXQKKyAqICAgIEJpdCAxNSAgIEVGTFhfRU1QVFkKKyAqICAgIEJpdCAxNCAgIEVGTFhfQUVNUFRZCisgKiAgICBCaXQgMTMtMCBFRkxYX0FFVEgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRUZMWF9FTVBUWSAgIDB4ODAwMAorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfQUVNUFRZICAweDQwMDAKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19FRkxYX0FFVEggICAgMHgzRkZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfRUZMWF9BRVRIICAgIDAKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMyMDc6IEVGTFggSW5kaXJlY3QgRklGTyBDdXQtVGhyb3VnaCBUaHJlc2hvbGQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRUZMWF9DVVRfVEhSVSAgICAgICAgICAgICAgICAgMHgzRkZGCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRPRkZfRUZMWF9DVVRfVEhSVSAgICAgICAgICAgICAgICAgMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJlZ2lzdGVyIDB4MzIwQzogRUZMWCBGSUZPIE92ZXJmbG93IEVycm9yIEVuYWJsZQorICogICAgQml0IDAgRUZMWF9PVkZFCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfT1ZGRSAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMjBEOiBFRkxYIEZJRk8gT3ZlcmZsb3cgRXJyb3IgSW5kaWNhdGlvbgorICogICAgQml0IDAgRUZMWF9PVkZJCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX0VGTFhfT1ZGSSAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMjEwOiBFRkxYIENoYW5uZWwgUHJvdmlzaW9uCisgKiAgICBCaXQgMCBFRkxYX1BST1YKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfRUZMWF9QUk9WICAweDAwMDEKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSZWdpc3RlciAweDMyODA6IFBMNElEVSBDb25maWd1cmF0aW9uCisgKiAgICBCaXQgMiBQTDRJRFVfU1lOQ0hfT05fVFJBSU4KKyAqICAgIEJpdCAxIFBMNElEVV9FTl9QT1JUUworICogICAgQml0IDAgUEw0SURVX0VOX0RGV0QKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SURVX1NZTkNIX09OX1RSQUlOICAweDAwMDQKKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJRFVfRU5fUE9SVFMgICAgICAgIDB4MDAwMgorI2RlZmluZSBTVU5JMXgxMEdFWFBfQklUTVNLX1BMNElEVV9FTl9ERldEICAgICAgICAgMHgwMDAxCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMjgyOiBQTDRJRFUgSW50ZXJydXB0IE1hc2sKKyAqICAgIEJpdCAxIFBMNElEVV9ESVA0RQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgU1VOSTF4MTBHRVhQX0JJVE1TS19QTDRJRFVfRElQNEUgICAgICAgMHgwMDAyCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXIgMHgzMjgzOiBQTDRJRFUgSW50ZXJydXB0CisgKiAgICBCaXQgMSBQTDRJRFVfRElQNEkKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFNVTkkxeDEwR0VYUF9CSVRNU0tfUEw0SURVX0RJUDRJICAgICAgIDB4MDAwMgogCiAjZW5kaWYgLyogX0NYR0JfU1VOSTF4MTBHRVhQX1JFR1NfSF8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby90cC5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby90cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYTBiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmMKQEAgLTAsMCArMSwxNzggQEAKKy8qICREYXRlOiAyMDA2LzAyLzA3IDA0OjIxOjU0ICQgJFJDU2ZpbGU6IHRwLmMsdiAkICRSZXZpc2lvbjogMS43MyAkICovCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAicmVncy5oIgorI2luY2x1ZGUgInRwLmgiCisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfMUcKKyNpbmNsdWRlICJmcGdhX2RlZnMuaCIKKyNlbmRpZgorCitzdHJ1Y3QgcGV0cCB7CisJYWRhcHRlcl90ICphZGFwdGVyOworfTsKKworLyogUGF1c2UgZGVhZGxvY2sgYXZvaWRhbmNlIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgRFJPUF9NU0VDIDE2CisjZGVmaW5lIERST1BfUEtUU19DTlQgIDEKKworc3RhdGljIHZvaWQgdHBfaW5pdChhZGFwdGVyX3QgKiBhcCwgY29uc3Qgc3RydWN0IHRwX3BhcmFtcyAqcCwKKwkJICAgIHVuc2lnbmVkIGludCB0cF9jbGspCit7CisJaWYgKHQxX2lzX2FzaWMoYXApKSB7CisJCXUzMiB2YWw7CisKKwkJdmFsID0gRl9UUF9JTl9DU1BJX0NQTCB8IEZfVFBfSU5fQ1NQSV9DSEVDS19JUF9DU1VNIHwKKwkJICAgIEZfVFBfSU5fQ1NQSV9DSEVDS19UQ1BfQ1NVTSB8IEZfVFBfSU5fRVNQSV9FVEhFUk5FVDsKKwkJaWYgKCFwLT5wbV9zaXplKQorCQkJdmFsIHw9IEZfT0ZGTE9BRF9ESVNBQkxFOworCQllbHNlCisJCQl2YWwgfD0gRl9UUF9JTl9FU1BJX0NIRUNLX0lQX0NTVU0gfAorCQkJICAgIEZfVFBfSU5fRVNQSV9DSEVDS19UQ1BfQ1NVTTsKKwkJd3JpdGVsKHZhbCwgYXAtPnJlZ3MgKyBBX1RQX0lOX0NPTkZJRyk7CisJCXdyaXRlbChGX1RQX09VVF9DU1BJX0NQTCB8CisJCSAgICAgICBGX1RQX09VVF9FU1BJX0VUSEVSTkVUIHwKKwkJICAgICAgIEZfVFBfT1VUX0VTUElfR0VORVJBVEVfSVBfQ1NVTSB8CisJCSAgICAgICBGX1RQX09VVF9FU1BJX0dFTkVSQVRFX1RDUF9DU1VNLAorCQkgICAgICAgYXAtPnJlZ3MgKyBBX1RQX09VVF9DT05GSUcpOworCQl3cml0ZWwoVl9JUF9UVEwoNjQpIHwKKwkJICAgICAgIEZfUEFUSF9NVFUgLyogSVAgREYgYml0ICovICB8CisJCSAgICAgICBWXzVUVVBMRV9MT09LVVAocC0+dXNlXzV0dXBsZV9tb2RlKSB8CisJCSAgICAgICBWX1NZTl9DT09LSUVfUEFSQU1FVEVSKDI5KSwKKwkJICAgICAgIGFwLT5yZWdzICsgQV9UUF9HTE9CQUxfQ09ORklHKTsKKwkJLyoKKwkJICogRW5hYmxlIHBhdXNlIGZyYW1lIGRlYWRsb2NrIHByZXZlbnRpb24uCisJCSAqLworCQlpZiAoaXNfVDIoYXApICYmIGFwLT5wYXJhbXMubnBvcnRzID4gMSkgeworCQkJdTMyIGRyb3BfdGlja3MgPSBEUk9QX01TRUMgKiAodHBfY2xrIC8gMTAwMCk7CisKKwkJCXdyaXRlbChGX0VOQUJMRV9UWF9EUk9QIHwgRl9FTkFCTEVfVFhfRVJST1IgfAorCQkJICAgICAgIFZfRFJPUF9USUNLU19DTlQoZHJvcF90aWNrcykgfAorCQkJICAgICAgIFZfTlVNX1BLVFNfRFJPUFBFRChEUk9QX1BLVFNfQ05UKSwKKwkJCSAgICAgICBhcC0+cmVncyArIEFfVFBfVFhfRFJPUF9DT05GSUcpOworCQl9CisKKwl9Cit9CisKK3ZvaWQgdDFfdHBfZGVzdHJveShzdHJ1Y3QgcGV0cCAqdHApCit7CisJa2ZyZWUodHApOworfQorCitzdHJ1Y3QgcGV0cCAqX19kZXZpbml0IHQxX3RwX2NyZWF0ZShhZGFwdGVyX3QgKiBhZGFwdGVyLCBzdHJ1Y3QgdHBfcGFyYW1zICpwKQoreworCXN0cnVjdCBwZXRwICp0cCA9IGt6YWxsb2Moc2l6ZW9mKCp0cCksIEdGUF9LRVJORUwpOworCWlmICghdHApCisJCXJldHVybiBOVUxMOworCisJdHAtPmFkYXB0ZXIgPSBhZGFwdGVyOworCisJcmV0dXJuIHRwOworfQorCit2b2lkIHQxX3RwX2ludHJfZW5hYmxlKHN0cnVjdCBwZXRwICp0cCkKK3sKKwl1MzIgdHBfaW50ciA9IHJlYWRsKHRwLT5hZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOworCisjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfMUcKKwlpZiAoIXQxX2lzX2FzaWModHAtPmFkYXB0ZXIpKSB7CisJCS8qIEZQR0EgKi8KKwkJd3JpdGVsKDB4ZmZmZmZmZmYsCisJCSAgICAgICB0cC0+YWRhcHRlci0+cmVncyArIEZQR0FfVFBfQUREUl9JTlRFUlJVUFRfRU5BQkxFKTsKKwkJd3JpdGVsKHRwX2ludHIgfCBGUEdBX1BDSVhfSU5URVJSVVBUX1RQLAorCQkgICAgICAgdHAtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCS8qIFdlIGRvbid0IHVzZSBhbnkgVFAgaW50ZXJydXB0cyAqLworCQl3cml0ZWwoMCwgdHAtPmFkYXB0ZXItPnJlZ3MgKyBBX1RQX0lOVF9FTkFCTEUpOworCQl3cml0ZWwodHBfaW50ciB8IEZfUExfSU5UUl9UUCwKKwkJICAgICAgIHRwLT5hZGFwdGVyLT5yZWdzICsgQV9QTF9FTkFCTEUpOworCX0KK30KKwordm9pZCB0MV90cF9pbnRyX2Rpc2FibGUoc3RydWN0IHBldHAgKnRwKQoreworCXUzMiB0cF9pbnRyID0gcmVhZGwodHAtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisKKyNpZmRlZiBDT05GSUdfQ0hFTFNJT19UMV8xRworCWlmICghdDFfaXNfYXNpYyh0cC0+YWRhcHRlcikpIHsKKwkJLyogRlBHQSAqLworCQl3cml0ZWwoMCwgdHAtPmFkYXB0ZXItPnJlZ3MgKyBGUEdBX1RQX0FERFJfSU5URVJSVVBUX0VOQUJMRSk7CisJCXdyaXRlbCh0cF9pbnRyICYgfkZQR0FfUENJWF9JTlRFUlJVUFRfVFAsCisJCSAgICAgICB0cC0+YWRhcHRlci0+cmVncyArIEFfUExfRU5BQkxFKTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJd3JpdGVsKDAsIHRwLT5hZGFwdGVyLT5yZWdzICsgQV9UUF9JTlRfRU5BQkxFKTsKKwkJd3JpdGVsKHRwX2ludHIgJiB+Rl9QTF9JTlRSX1RQLAorCQkgICAgICAgdHAtPmFkYXB0ZXItPnJlZ3MgKyBBX1BMX0VOQUJMRSk7CisJfQorfQorCit2b2lkIHQxX3RwX2ludHJfY2xlYXIoc3RydWN0IHBldHAgKnRwKQoreworI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxXzFHCisJaWYgKCF0MV9pc19hc2ljKHRwLT5hZGFwdGVyKSkgeworCQl3cml0ZWwoMHhmZmZmZmZmZiwKKwkJICAgICAgIHRwLT5hZGFwdGVyLT5yZWdzICsgRlBHQV9UUF9BRERSX0lOVEVSUlVQVF9DQVVTRSk7CisJCXdyaXRlbChGUEdBX1BDSVhfSU5URVJSVVBUX1RQLCB0cC0+YWRhcHRlci0+cmVncyArIEFfUExfQ0FVU0UpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJd3JpdGVsKDB4ZmZmZmZmZmYsIHRwLT5hZGFwdGVyLT5yZWdzICsgQV9UUF9JTlRfQ0FVU0UpOworCXdyaXRlbChGX1BMX0lOVFJfVFAsIHRwLT5hZGFwdGVyLT5yZWdzICsgQV9QTF9DQVVTRSk7Cit9CisKK2ludCB0MV90cF9pbnRyX2hhbmRsZXIoc3RydWN0IHBldHAgKnRwKQoreworCXUzMiBjYXVzZTsKKworI2lmZGVmIENPTkZJR19DSEVMU0lPX1QxXzFHCisJLyogRlBHQSBkb2Vzbid0IHN1cHBvcnQgVFAgaW50ZXJydXB0cy4gKi8KKwlpZiAoIXQxX2lzX2FzaWModHAtPmFkYXB0ZXIpKQorCQlyZXR1cm4gMTsKKyNlbmRpZgorCisJY2F1c2UgPSByZWFkbCh0cC0+YWRhcHRlci0+cmVncyArIEFfVFBfSU5UX0NBVVNFKTsKKwl3cml0ZWwoY2F1c2UsIHRwLT5hZGFwdGVyLT5yZWdzICsgQV9UUF9JTlRfQ0FVU0UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfY3N1bV9vZmZsb2FkKHN0cnVjdCBwZXRwICp0cCwgdTMyIGNzdW1fYml0LCBpbnQgZW5hYmxlKQoreworCXUzMiB2YWwgPSByZWFkbCh0cC0+YWRhcHRlci0+cmVncyArIEFfVFBfR0xPQkFMX0NPTkZJRyk7CisKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gY3N1bV9iaXQ7CisJZWxzZQorCQl2YWwgJj0gfmNzdW1fYml0OworCXdyaXRlbCh2YWwsIHRwLT5hZGFwdGVyLT5yZWdzICsgQV9UUF9HTE9CQUxfQ09ORklHKTsKK30KKwordm9pZCB0MV90cF9zZXRfaXBfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpCit7CisJc2V0X2NzdW1fb2ZmbG9hZCh0cCwgRl9JUF9DU1VNLCBlbmFibGUpOworfQorCit2b2lkIHQxX3RwX3NldF91ZHBfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpCit7CisJc2V0X2NzdW1fb2ZmbG9hZCh0cCwgRl9VRFBfQ1NVTSwgZW5hYmxlKTsKK30KKwordm9pZCB0MV90cF9zZXRfdGNwX2NoZWNrc3VtX29mZmxvYWQoc3RydWN0IHBldHAgKnRwLCBpbnQgZW5hYmxlKQoreworCXNldF9jc3VtX29mZmxvYWQodHAsIEZfVENQX0NTVU0sIGVuYWJsZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIFRQIHN0YXRlLiAgdHBfcGFyYW1zIGNvbnRhaW5zIGluaXRpYWwgc2V0dGluZ3MgZm9yIHNvbWUgVFAKKyAqIHBhcmFtZXRlcnMsIHBhcnRpY3VsYXJseSB0aGUgb25lLXRpbWUgUE0gYW5kIENNIHNldHRpbmdzLgorICovCitpbnQgdDFfdHBfcmVzZXQoc3RydWN0IHBldHAgKnRwLCBzdHJ1Y3QgdHBfcGFyYW1zICpwLCB1bnNpZ25lZCBpbnQgdHBfY2xrKQoreworCWFkYXB0ZXJfdCAqYWRhcHRlciA9IHRwLT5hZGFwdGVyOworCisJdHBfaW5pdChhZGFwdGVyLCBwLCB0cF9jbGspOworCXdyaXRlbChGX1RQX1JFU0VULCBhZGFwdGVyLT5yZWdzICsgIEFfVFBfUkVTRVQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby90cC5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby90cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZmM3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3RwLmgKQEAgLTAsMCArMSw3MyBAQAorLyogJERhdGU6IDIwMDUvMDMvMDcgMjM6NTk6MDUgJCAkUkNTZmlsZTogdHAuaCx2ICQgJFJldmlzaW9uOiAxLjIwICQgKi8KKyNpZm5kZWYgQ0hFTFNJT19UUF9ICisjZGVmaW5lIENIRUxTSU9fVFBfSAorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKKyNkZWZpbmUgVFBfTUFYX1JYX0NPQUxFU0NJTkdfU0laRSAxNjIyNFUKKworc3RydWN0IHRwX21pYl9zdGF0aXN0aWNzIHsKKworCS8qIElQICovCisJdTMyIGlwSW5SZWNlaXZlX2hpOworCXUzMiBpcEluUmVjZWl2ZV9sbzsKKwl1MzIgaXBJbkhkckVycm9yc19oaTsKKwl1MzIgaXBJbkhkckVycm9yc19sbzsKKwl1MzIgaXBJbkFkZHJFcnJvcnNfaGk7CisJdTMyIGlwSW5BZGRyRXJyb3JzX2xvOworCXUzMiBpcEluVW5rbm93blByb3Rvc19oaTsKKwl1MzIgaXBJblVua25vd25Qcm90b3NfbG87CisJdTMyIGlwSW5EaXNjYXJkc19oaTsKKwl1MzIgaXBJbkRpc2NhcmRzX2xvOworCXUzMiBpcEluRGVsaXZlcnNfaGk7CisJdTMyIGlwSW5EZWxpdmVyc19sbzsKKwl1MzIgaXBPdXRSZXF1ZXN0c19oaTsKKwl1MzIgaXBPdXRSZXF1ZXN0c19sbzsKKwl1MzIgaXBPdXREaXNjYXJkc19oaTsKKwl1MzIgaXBPdXREaXNjYXJkc19sbzsKKwl1MzIgaXBPdXROb1JvdXRlc19oaTsKKwl1MzIgaXBPdXROb1JvdXRlc19sbzsKKwl1MzIgaXBSZWFzbVRpbWVvdXQ7CisJdTMyIGlwUmVhc21SZXFkczsKKwl1MzIgaXBSZWFzbU9LczsKKwl1MzIgaXBSZWFzbUZhaWxzOworCisJdTMyIHJlc2VydmVkWzhdOworCisJLyogVENQICovCisJdTMyIHRjcEFjdGl2ZU9wZW5zOworCXUzMiB0Y3BQYXNzaXZlT3BlbnM7CisJdTMyIHRjcEF0dGVtcHRGYWlsczsKKwl1MzIgdGNwRXN0YWJSZXNldHM7CisJdTMyIHRjcE91dFJzdHM7CisJdTMyIHRjcEN1cnJFc3RhYjsKKwl1MzIgdGNwSW5TZWdzX2hpOworCXUzMiB0Y3BJblNlZ3NfbG87CisJdTMyIHRjcE91dFNlZ3NfaGk7CisJdTMyIHRjcE91dFNlZ3NfbG87CisJdTMyIHRjcFJldHJhbnNTZWdfaGk7CisJdTMyIHRjcFJldHJhbnNTZWdfbG87CisJdTMyIHRjcEluRXJyc19oaTsKKwl1MzIgdGNwSW5FcnJzX2xvOworCXUzMiB0Y3BSdG9NaW47CisJdTMyIHRjcFJ0b01heDsKK307CisKK3N0cnVjdCBwZXRwOworc3RydWN0IHRwX3BhcmFtczsKKworc3RydWN0IHBldHAgKnQxX3RwX2NyZWF0ZShhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCB0cF9wYXJhbXMgKnApOwordm9pZCB0MV90cF9kZXN0cm95KHN0cnVjdCBwZXRwICp0cCk7CisKK3ZvaWQgdDFfdHBfaW50cl9kaXNhYmxlKHN0cnVjdCBwZXRwICp0cCk7Cit2b2lkIHQxX3RwX2ludHJfZW5hYmxlKHN0cnVjdCBwZXRwICp0cCk7Cit2b2lkIHQxX3RwX2ludHJfY2xlYXIoc3RydWN0IHBldHAgKnRwKTsKK2ludCB0MV90cF9pbnRyX2hhbmRsZXIoc3RydWN0IHBldHAgKnRwKTsKKwordm9pZCB0MV90cF9nZXRfbWliX3N0YXRpc3RpY3MoYWRhcHRlcl90ICphZGFwLCBzdHJ1Y3QgdHBfbWliX3N0YXRpc3RpY3MgKnRwcyk7Cit2b2lkIHQxX3RwX3NldF91ZHBfY2hlY2tzdW1fb2ZmbG9hZChzdHJ1Y3QgcGV0cCAqdHAsIGludCBlbmFibGUpOwordm9pZCB0MV90cF9zZXRfdGNwX2NoZWNrc3VtX29mZmxvYWQoc3RydWN0IHBldHAgKnRwLCBpbnQgZW5hYmxlKTsKK3ZvaWQgdDFfdHBfc2V0X2lwX2NoZWNrc3VtX29mZmxvYWQoc3RydWN0IHBldHAgKnRwLCBpbnQgZW5hYmxlKTsKK2ludCB0MV90cF9zZXRfY29hbGVzY2luZ19zaXplKHN0cnVjdCBwZXRwICp0cCwgdW5zaWduZWQgaW50IHNpemUpOworaW50IHQxX3RwX3Jlc2V0KHN0cnVjdCBwZXRwICp0cCwgc3RydWN0IHRwX3BhcmFtcyAqcCwgdW5zaWduZWQgaW50IHRwX2Nsayk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjNzMyNi5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkYzNiMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjNzMyNi5jCkBAIC0wLDAgKzEsNzI1IEBACisvKiAkRGF0ZTogMjAwNi8wNC8yOCAxOToyMDowNiAkICRSQ1NmaWxlOiB2c2M3MzI2LmMsdiAkICRSZXZpc2lvbjogMS4xOSAkICovCisKKy8qIERyaXZlciBmb3IgVml0ZXNzZSBWU0M3MzI2IChTY2hhdW1idXJnKSBNQUMgKi8KKworI2luY2x1ZGUgImdtYWMuaCIKKyNpbmNsdWRlICJlbG1lcjAuaCIKKyNpbmNsdWRlICJ2c2M3MzI2X3JlZy5oIgorCisvKiBVcGRhdGUgZmFzdCBjaGFuZ2luZyBzdGF0aXN0aWNzIGV2ZXJ5IDE1IHNlY29uZHMgKi8KKyNkZWZpbmUgU1RBVFNfVElDS19TRUNTIDE1CisvKiAzMCBtaW51dGVzIGZvciBmdWxsIHN0YXRpc3RpY3MgdXBkYXRlICovCisjZGVmaW5lIE1BSk9SX1VQREFURV9USUNLUyAoMTgwMCAvIFNUQVRTX1RJQ0tfU0VDUykKKworI2RlZmluZSBNQVhfTVRVIDk2MDAKKworLyogVGhlIGVncmVzcyBXTSB2YWx1ZSAweDAxYTAxZmZmIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiB0aGUKKyAqIGludGVyZmFjZSBpcyBkb3duIChNQUMgcG9ydCBkaXNhYmxlZCkuIFRoaXMgaXMgYSB3b3JrYXJvdW5kCisgKiBmb3IgZGlzYWJsaW5nIHRoZSBUMi9NQUMgZmxvdy1jb250cm9sLiBXaGVuIHRoZSBpbnRlcmZhY2UgaXMKKyAqIGVuYWJsZWQsIHRoZSBXTSB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIDB4MDE0YTAzRjAuCisgKi8KKyNkZWZpbmUgV01fRElTQUJMRQkweDAxYTAxZmZmCisjZGVmaW5lIFdNX0VOQUJMRQkweDAxNGEwM0YwCisKK3N0cnVjdCBpbml0X3RhYmxlIHsKKwl1MzIgYWRkcjsKKwl1MzIgZGF0YTsKK307CisKK3N0cnVjdCBfY21hY19pbnN0YW5jZSB7CisJdTMyIGluZGV4OworCXUzMiB0aWNrczsKK307CisKKyNkZWZpbmUgSU5JVEJMT0NLX1NMRUVQCTB4ZmZmZmZmZmYKKworc3RhdGljIHZvaWQgdnNjX3JlYWQoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyICp2YWwpCit7CisJdTMyIHN0YXR1cywgdmxvLCB2aGk7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1hY19sb2NrKTsKKwl0MV90cGlfcmVhZChhZGFwdGVyLCAoYWRkciA8PCAyKSArIDQsICZ2bG8pOworCWkgPSAwOworCWRvIHsKKwkJdDFfdHBpX3JlYWQoYWRhcHRlciwgKFJFR19MT0NBTF9TVEFUVVMgPDwgMikgKyA0LCAmdmxvKTsKKwkJdDFfdHBpX3JlYWQoYWRhcHRlciwgUkVHX0xPQ0FMX1NUQVRVUyA8PCAyLCAmdmhpKTsKKwkJc3RhdHVzID0gKHZoaSA8PCAxNikgfCB2bG87CisJCWkrKzsKKwl9IHdoaWxlICgoKHN0YXR1cyAmIDEpID09IDApICYmIChpIDwgNTApKTsKKwlpZiAoaSA9PSA1MCkKKwkJQ0hfRVJSKCJJbnZhbGlkIHRwaSByZWFkIGZyb20gTUFDLCBicmVha2luZyBsb29wLlxuIik7CisKKwl0MV90cGlfcmVhZChhZGFwdGVyLCAoUkVHX0xPQ0FMX0RBVEEgPDwgMikgKyA0LCAmdmxvKTsKKwl0MV90cGlfcmVhZChhZGFwdGVyLCBSRUdfTE9DQUxfREFUQSA8PCAyLCAmdmhpKTsKKworCSp2YWwgPSAodmhpIDw8IDE2KSB8IHZsbzsKKworCS8qIENIX0VSUigicmQ6IGJsb2NrOiAweCV4ICBzdWJsb2NrOiAweCV4ICByZWc6IDB4JXggIGRhdGE6IDB4JXhcbiIsCisJCSgoYWRkciYweGUwMDApPj4xMyksICgoYWRkciYweDFlMDApPj45KSwKKwkJKChhZGRyJjB4MDFmZSk+PjEpLCAqdmFsKTsgKi8KKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWFjX2xvY2spOworfQorCitzdGF0aWMgdm9pZCB2c2Nfd3JpdGUoYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tYWNfbG9jayk7CisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIChhZGRyIDw8IDIpICsgNCwgZGF0YSAmIDB4RkZGRik7CisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIGFkZHIgPDwgMiwgKGRhdGEgPj4gMTYpICYgMHhGRkZGKTsKKwkvKiBDSF9FUlIoIndyOiBibG9jazogMHgleCAgc3VibG9jazogMHgleCAgcmVnOiAweCV4ICBkYXRhOiAweCV4XG4iLAorCQkoKGFkZHImMHhlMDAwKT4+MTMpLCAoKGFkZHImMHgxZTAwKT4+OSksCisJCSgoYWRkciYweDAxZmUpPj4xKSwgZGF0YSk7ICovCisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1hY19sb2NrKTsKK30KKworLyogSGFyZCByZXNldCB0aGUgTUFDLiAgVGhpcyB3aXBlcyBvdXQgKmFsbCogY29uZmlndXJhdGlvbi4gKi8KK3N0YXRpYyB2b2lkIHZzYzczMjZfZnVsbF9yZXNldChhZGFwdGVyX3QqIGFkYXB0ZXIpCit7CisJdTMyIHZhbDsKKwl1MzIgcmVzdWx0ID0gMHhmZmZmOworCisJdDFfdHBpX3JlYWQoYWRhcHRlciwgQV9FTE1FUjBfR1BPLCAmdmFsKTsKKwl2YWwgJj0gfjE7CisJdDFfdHBpX3dyaXRlKGFkYXB0ZXIsIEFfRUxNRVIwX0dQTywgdmFsKTsKKwl1ZGVsYXkoMik7CisJdmFsIHw9IDB4MTsJLyogRW5hYmxlIG1hYyBNQUMgaXRzZWxmICovCisJdmFsIHw9IDB4ODAwOwkvKiBUdXJuIG9mZiB0aGUgcmVkIExFRCAqLworCXQxX3RwaV93cml0ZShhZGFwdGVyLCBBX0VMTUVSMF9HUE8sIHZhbCk7CisJbWRlbGF5KDEpOworCXZzY193cml0ZShhZGFwdGVyLCBSRUdfU1dfUkVTRVQsIDB4ODAwMDAwMDEpOworCWRvIHsKKwkJbWRlbGF5KDEpOworCQl2c2NfcmVhZChhZGFwdGVyLCBSRUdfU1dfUkVTRVQsICZyZXN1bHQpOworCX0gd2hpbGUgKHJlc3VsdCAhPSAweDApOworfQorCitzdGF0aWMgc3RydWN0IGluaXRfdGFibGUgdnNjNzMyNl9yZXNldFtdID0geworCXsgICAgICBSRUdfSUZBQ0VfTU9ERSwgMHgwMDAwMDAwMCB9LAorCXsgICAgICAgICBSRUdfQ1JDX0NGRywgMHgwMDAwMDAyMCB9LAorCXsgICBSRUdfUExMX0NMS19TUEVFRCwgMHgwMDA1MGMwMCB9LAorCXsgICBSRUdfUExMX0NMS19TUEVFRCwgMHgwMDA1MGMwMCB9LAorCXsgICAgICAgICAgICBSRUdfTVNDSCwgMHgwMDAwMmYxNCB9LAorCXsgICAgICAgUkVHX1NQSTRfTUlTQywgMHgwMDA0MDQwOSB9LAorCXsgICAgIFJFR19TUEk0X0RFU0tFVywgMHgwMDA4MDAwMCB9LAorCXsgUkVHX1NQSTRfSU5HX1NFVFVQMiwgMHgwODA4MDAwNCB9LAorCXsgUkVHX1NQSTRfSU5HX1NFVFVQMCwgMHgwNDExMTAwNCB9LAorCXsgUkVHX1NQSTRfRUdSX1NFVFVQMCwgMHg4MDAwMWEwNCB9LAorCXsgUkVHX1NQSTRfSU5HX1NFVFVQMSwgMHgwMjAxMDAwMCB9LAorCXsgICAgICBSRUdfQUdFX0lOQygwKSwgMHgwMDAwMDAwMCB9LAorCXsgICAgICBSRUdfQUdFX0lOQygxKSwgMHgwMDAwMDAwMCB9LAorCXsgICAgIFJFR19JTkdfQ09OVFJPTCwgMHgwYTIwMDAxMSB9LAorCXsgICAgIFJFR19FR1JfQ09OVFJPTCwgMHhhMDAxMDA5MSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbml0X3RhYmxlIHZzYzczMjZfcG9ydGluaXRbNF1bMjJdID0geworCXsJLyogUG9ydCAwICovCisJCQkvKiBGSUZPIHNldHVwICovCisJCXsgICAgICAgICAgIFJFR19EQkcoMCksIDB4MDAwMDA0ZjAgfSwKKwkJeyAgICAgICAgICAgUkVHX0hEWCgwKSwgMHgwMDA3MzEwMSB9LAorCQl7ICAgICAgICBSRUdfVEVTVCgwLDApLCAweDAwMDAwMDIyIH0sCisJCXsgICAgICAgIFJFR19URVNUKDEsMCksIDB4MDAwMDAwMjIgfSwKKwkJeyAgUkVHX1RPUF9CT1RUT00oMCwwKSwgMHgwMDNmMDAwMCB9LAorCQl7ICBSRUdfVE9QX0JPVFRPTSgxLDApLCAweDAwMTIwMDAwIH0sCisJCXsgUkVHX0hJR0hfTE9XX1dNKDAsMCksIDB4MDc0NjA3NTcgfSwKKwkJeyBSRUdfSElHSF9MT1dfV00oMSwwKSwgV01fRElTQUJMRSB9LAorCQl7ICAgUkVHX0NUX1RIUkhMRCgwLDApLCAweDAwMDAwMDAwIH0sCisJCXsgICBSRUdfQ1RfVEhSSExEKDEsMCksIDB4MDAwMDAwMDAgfSwKKwkJeyAgICAgICAgIFJFR19CVUNLRSgwKSwgMHgwMDAyZmZmZiB9LAorCQl7ICAgICAgICAgUkVHX0JVQ0tJKDApLCAweDAwMDJmZmZmIH0sCisJCXsgICAgICAgIFJFR19URVNUKDAsMCksIDB4MDAwMDAwMjAgfSwKKwkJeyAgICAgICAgUkVHX1RFU1QoMSwwKSwgMHgwMDAwMDAyMCB9LAorCQkJLyogUG9ydCBjb25maWcgKi8KKwkJeyAgICAgICBSRUdfTUFYX0xFTigwKSwgMHgwMDAwMjcxMCB9LAorCQl7ICAgICBSRUdfUE9SVF9GQUlMKDApLCAweDAwMDAwMDAyIH0sCisJCXsgICAgUkVHX05PUk1BTElaRVIoMCksIDB4MDAwMDBhNjQgfSwKKwkJeyAgICAgICAgUkVHX0RFTk9STSgwKSwgMHgwMDAwMDAxMCB9LAorCQl7ICAgICBSRUdfU1RJQ0tfQklUKDApLCAweDAzYmFhMzcwIH0sCisJCXsgICAgIFJFR19ERVZfU0VUVVAoMCksIDB4MDAwMDAwODMgfSwKKwkJeyAgICAgUkVHX0RFVl9TRVRVUCgwKSwgMHgwMDAwMDA4MiB9LAorCQl7ICAgICAgUkVHX01PREVfQ0ZHKDApLCAweDAyMDAyNTlmIH0sCisJfSwKKwl7CS8qIFBvcnQgMSAqLworCQkJLyogRklGTyBzZXR1cCAqLworCQl7ICAgICAgICAgICBSRUdfREJHKDEpLCAweDAwMDAwNGYwIH0sCisJCXsgICAgICAgICAgIFJFR19IRFgoMSksIDB4MDAwNzMxMDEgfSwKKwkJeyAgICAgICAgUkVHX1RFU1QoMCwxKSwgMHgwMDAwMDAyMiB9LAorCQl7ICAgICAgICBSRUdfVEVTVCgxLDEpLCAweDAwMDAwMDIyIH0sCisJCXsgIFJFR19UT1BfQk9UVE9NKDAsMSksIDB4MDA3ZTAwM2YgfSwKKwkJeyAgUkVHX1RPUF9CT1RUT00oMSwxKSwgMHgwMDI0MDAxMiB9LAorCQl7IFJFR19ISUdIX0xPV19XTSgwLDEpLCAweDA3NDYwNzU3IH0sCisJCXsgUkVHX0hJR0hfTE9XX1dNKDEsMSksIFdNX0RJU0FCTEUgfSwKKwkJeyAgIFJFR19DVF9USFJITEQoMCwxKSwgMHgwMDAwMDAwMCB9LAorCQl7ICAgUkVHX0NUX1RIUkhMRCgxLDEpLCAweDAwMDAwMDAwIH0sCisJCXsgICAgICAgICBSRUdfQlVDS0UoMSksIDB4MDAwMmZmZmYgfSwKKwkJeyAgICAgICAgIFJFR19CVUNLSSgxKSwgMHgwMDAyZmZmZiB9LAorCQl7ICAgICAgICBSRUdfVEVTVCgwLDEpLCAweDAwMDAwMDIwIH0sCisJCXsgICAgICAgIFJFR19URVNUKDEsMSksIDB4MDAwMDAwMjAgfSwKKwkJCS8qIFBvcnQgY29uZmlnICovCisJCXsgICAgICAgUkVHX01BWF9MRU4oMSksIDB4MDAwMDI3MTAgfSwKKwkJeyAgICAgUkVHX1BPUlRfRkFJTCgxKSwgMHgwMDAwMDAwMiB9LAorCQl7ICAgIFJFR19OT1JNQUxJWkVSKDEpLCAweDAwMDAwYTY0IH0sCisJCXsgICAgICAgIFJFR19ERU5PUk0oMSksIDB4MDAwMDAwMTAgfSwKKwkJeyAgICAgUkVHX1NUSUNLX0JJVCgxKSwgMHgwM2JhYTM3MCB9LAorCQl7ICAgICBSRUdfREVWX1NFVFVQKDEpLCAweDAwMDAwMDgzIH0sCisJCXsgICAgIFJFR19ERVZfU0VUVVAoMSksIDB4MDAwMDAwODIgfSwKKwkJeyAgICAgIFJFR19NT0RFX0NGRygxKSwgMHgwMjAwMjU5ZiB9LAorCX0sCisJewkvKiBQb3J0IDIgKi8KKwkJCS8qIEZJRk8gc2V0dXAgKi8KKwkJeyAgICAgICAgICAgUkVHX0RCRygyKSwgMHgwMDAwMDRmMCB9LAorCQl7ICAgICAgICAgICBSRUdfSERYKDIpLCAweDAwMDczMTAxIH0sCisJCXsgICAgICAgIFJFR19URVNUKDAsMiksIDB4MDAwMDAwMjIgfSwKKwkJeyAgICAgICAgUkVHX1RFU1QoMSwyKSwgMHgwMDAwMDAyMiB9LAorCQl7ICBSRUdfVE9QX0JPVFRPTSgwLDIpLCAweDAwYmQwMDdlIH0sCisJCXsgIFJFR19UT1BfQk9UVE9NKDEsMiksIDB4MDAzNjAwMjQgfSwKKwkJeyBSRUdfSElHSF9MT1dfV00oMCwyKSwgMHgwNzQ2MDc1NyB9LAorCQl7IFJFR19ISUdIX0xPV19XTSgxLDIpLCBXTV9ESVNBQkxFIH0sCisJCXsgICBSRUdfQ1RfVEhSSExEKDAsMiksIDB4MDAwMDAwMDAgfSwKKwkJeyAgIFJFR19DVF9USFJITEQoMSwyKSwgMHgwMDAwMDAwMCB9LAorCQl7ICAgICAgICAgUkVHX0JVQ0tFKDIpLCAweDAwMDJmZmZmIH0sCisJCXsgICAgICAgICBSRUdfQlVDS0koMiksIDB4MDAwMmZmZmYgfSwKKwkJeyAgICAgICAgUkVHX1RFU1QoMCwyKSwgMHgwMDAwMDAyMCB9LAorCQl7ICAgICAgICBSRUdfVEVTVCgxLDIpLCAweDAwMDAwMDIwIH0sCisJCQkvKiBQb3J0IGNvbmZpZyAqLworCQl7ICAgICAgIFJFR19NQVhfTEVOKDIpLCAweDAwMDAyNzEwIH0sCisJCXsgICAgIFJFR19QT1JUX0ZBSUwoMiksIDB4MDAwMDAwMDIgfSwKKwkJeyAgICBSRUdfTk9STUFMSVpFUigyKSwgMHgwMDAwMGE2NCB9LAorCQl7ICAgICAgICBSRUdfREVOT1JNKDIpLCAweDAwMDAwMDEwIH0sCisJCXsgICAgIFJFR19TVElDS19CSVQoMiksIDB4MDNiYWEzNzAgfSwKKwkJeyAgICAgUkVHX0RFVl9TRVRVUCgyKSwgMHgwMDAwMDA4MyB9LAorCQl7ICAgICBSRUdfREVWX1NFVFVQKDIpLCAweDAwMDAwMDgyIH0sCisJCXsgICAgICBSRUdfTU9ERV9DRkcoMiksIDB4MDIwMDI1OWYgfSwKKwl9LAorCXsJLyogUG9ydCAzICovCisJCQkvKiBGSUZPIHNldHVwICovCisJCXsgICAgICAgICAgIFJFR19EQkcoMyksIDB4MDAwMDA0ZjAgfSwKKwkJeyAgICAgICAgICAgUkVHX0hEWCgzKSwgMHgwMDA3MzEwMSB9LAorCQl7ICAgICAgICBSRUdfVEVTVCgwLDMpLCAweDAwMDAwMDIyIH0sCisJCXsgICAgICAgIFJFR19URVNUKDEsMyksIDB4MDAwMDAwMjIgfSwKKwkJeyAgUkVHX1RPUF9CT1RUT00oMCwzKSwgMHgwMGZjMDBiZCB9LAorCQl7ICBSRUdfVE9QX0JPVFRPTSgxLDMpLCAweDAwNDgwMDM2IH0sCisJCXsgUkVHX0hJR0hfTE9XX1dNKDAsMyksIDB4MDc0NjA3NTcgfSwKKwkJeyBSRUdfSElHSF9MT1dfV00oMSwzKSwgV01fRElTQUJMRSB9LAorCQl7ICAgUkVHX0NUX1RIUkhMRCgwLDMpLCAweDAwMDAwMDAwIH0sCisJCXsgICBSRUdfQ1RfVEhSSExEKDEsMyksIDB4MDAwMDAwMDAgfSwKKwkJeyAgICAgICAgIFJFR19CVUNLRSgzKSwgMHgwMDAyZmZmZiB9LAorCQl7ICAgICAgICAgUkVHX0JVQ0tJKDMpLCAweDAwMDJmZmZmIH0sCisJCXsgICAgICAgIFJFR19URVNUKDAsMyksIDB4MDAwMDAwMjAgfSwKKwkJeyAgICAgICAgUkVHX1RFU1QoMSwzKSwgMHgwMDAwMDAyMCB9LAorCQkJLyogUG9ydCBjb25maWcgKi8KKwkJeyAgICAgICBSRUdfTUFYX0xFTigzKSwgMHgwMDAwMjcxMCB9LAorCQl7ICAgICBSRUdfUE9SVF9GQUlMKDMpLCAweDAwMDAwMDAyIH0sCisJCXsgICAgUkVHX05PUk1BTElaRVIoMyksIDB4MDAwMDBhNjQgfSwKKwkJeyAgICAgICAgUkVHX0RFTk9STSgzKSwgMHgwMDAwMDAxMCB9LAorCQl7ICAgICBSRUdfU1RJQ0tfQklUKDMpLCAweDAzYmFhMzcwIH0sCisJCXsgICAgIFJFR19ERVZfU0VUVVAoMyksIDB4MDAwMDAwODMgfSwKKwkJeyAgICAgUkVHX0RFVl9TRVRVUCgzKSwgMHgwMDAwMDA4MiB9LAorCQl7ICAgICAgUkVHX01PREVfQ0ZHKDMpLCAweDAyMDAyNTlmIH0sCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHJ1bl90YWJsZShhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBpbml0X3RhYmxlICppYiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoaWJbaV0uYWRkciA9PSBJTklUQkxPQ0tfU0xFRVApIHsKKwkJCXVkZWxheSggaWJbaV0uZGF0YSApOworCQkJQ0hfRVJSKCJzbGVlcCAlZCB1c1xuIixpYltpXS5kYXRhKTsKKwkJfSBlbHNlIHsKKwkJCXZzY193cml0ZSggYWRhcHRlciwgaWJbaV0uYWRkciwgaWJbaV0uZGF0YSApOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGJpc3RfcmQoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgbW9kdWxlaWQsIGludCBhZGRyZXNzKQoreworCWludCBkYXRhPTA7CisJdTMyIHJlc3VsdD0wOworCisJaWYoCShhZGRyZXNzICE9IDB4MCkgJiYKKwkJKGFkZHJlc3MgIT0gMHgxKSAmJgorCQkoYWRkcmVzcyAhPSAweDIpICYmCisJCShhZGRyZXNzICE9IDB4ZCkgJiYKKwkJKGFkZHJlc3MgIT0gMHhlKSkKKwkJCUNIX0VSUigiTm8gYmlzdCBhZGRyZXNzOiAweCV4XG4iLCBhZGRyZXNzKTsKKworCWRhdGEgPSAoKDB4MDAgPDwgMjQpIHwgKChhZGRyZXNzICYgMHhmZikgPDwgMTYpIHwgKDB4MDAgPDwgOCkgfAorCQkoKG1vZHVsZWlkICYgMHhmZikgPDwgMCkpOworCXZzY193cml0ZShhZGFwdGVyLCBSRUdfUkFNX0JJU1RfQ01ELCBkYXRhKTsKKworCXVkZWxheSgxMCk7CisKKwl2c2NfcmVhZChhZGFwdGVyLCBSRUdfUkFNX0JJU1RfUkVTVUxULCAmcmVzdWx0KTsKKwlpZigocmVzdWx0ICYgKDE8PDkpKSAhPSAweDApCisJCUNIX0VSUigiU3RpbGwgaW4gYmlzdCByZWFkOiAweCV4XG4iLCByZXN1bHQpOworCWVsc2UgaWYoKHJlc3VsdCAmICgxPDw4KSkgIT0gMHgwKQorCQlDSF9FUlIoImJpc3QgcmVhZCBlcnJvcjogMHgleFxuIiwgcmVzdWx0KTsKKworCXJldHVybihyZXN1bHQgJiAweGZmKTsKK30KKworc3RhdGljIGludCBiaXN0X3dyKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IG1vZHVsZWlkLCBpbnQgYWRkcmVzcywgaW50IHZhbHVlKQoreworCWludCBkYXRhPTA7CisJdTMyIHJlc3VsdD0wOworCisJaWYoCShhZGRyZXNzICE9IDB4MCkgJiYKKwkJKGFkZHJlc3MgIT0gMHgxKSAmJgorCQkoYWRkcmVzcyAhPSAweDIpICYmCisJCShhZGRyZXNzICE9IDB4ZCkgJiYKKwkJKGFkZHJlc3MgIT0gMHhlKSkKKwkJCUNIX0VSUigiTm8gYmlzdCBhZGRyZXNzOiAweCV4XG4iLCBhZGRyZXNzKTsKKworCWlmKCB2YWx1ZT4yNTUgKQorCQlDSF9FUlIoIlN1c3BpY2lvdXMgd3JpdGUgb3V0IG9mIHJhbmdlIHZhbHVlOiAweCV4XG4iLCB2YWx1ZSk7CisKKwlkYXRhID0gKCgweDAxIDw8IDI0KSB8ICgoYWRkcmVzcyAmIDB4ZmYpIDw8IDE2KSB8ICh2YWx1ZSA8PCA4KSB8CisJCSgobW9kdWxlaWQgJiAweGZmKSA8PCAwKSk7CisJdnNjX3dyaXRlKGFkYXB0ZXIsIFJFR19SQU1fQklTVF9DTUQsIGRhdGEpOworCisJdWRlbGF5KDUpOworCisJdnNjX3JlYWQoYWRhcHRlciwgUkVHX1JBTV9CSVNUX0NNRCwgJnJlc3VsdCk7CisJaWYoKHJlc3VsdCAmICgxPDwyNykpICE9IDB4MCkKKwkJQ0hfRVJSKCJTdGlsbCBpbiBiaXN0IHdyaXRlOiAweCV4XG4iLCByZXN1bHQpOworCWVsc2UgaWYoKHJlc3VsdCAmICgxPDwyNikpICE9IDB4MCkKKwkJQ0hfRVJSKCJiaXN0IHdyaXRlIGVycm9yOiAweCV4XG4iLCByZXN1bHQpOworCisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50IHJ1bl9iaXN0KGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IG1vZHVsZWlkKQoreworCS8qcnVuIGJpc3QqLworCSh2b2lkKSBiaXN0X3dyKGFkYXB0ZXIsbW9kdWxlaWQsIDB4MDAsIDB4MDIpOworCSh2b2lkKSBiaXN0X3dyKGFkYXB0ZXIsbW9kdWxlaWQsIDB4MDEsIDB4MDEpOworCisJcmV0dXJuKDApOworfQorCitzdGF0aWMgaW50IGNoZWNrX2Jpc3QoYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgbW9kdWxlaWQpCit7CisJaW50IHJlc3VsdD0wOworCWludCBjb2x1bW49MDsKKwkvKmNoZWNrIGJpc3QqLworCXJlc3VsdCA9IGJpc3RfcmQoYWRhcHRlcixtb2R1bGVpZCwgMHgwMik7CisJY29sdW1uID0gKChiaXN0X3JkKGFkYXB0ZXIsbW9kdWxlaWQsIDB4MGUpPDw4KSArCisJCQkoYmlzdF9yZChhZGFwdGVyLG1vZHVsZWlkLCAweDBkKSkpOworCWlmICgocmVzdWx0ICYgMykgIT0gMHgzKQorCQlDSF9FUlIoIlJlc3VsdDogMHgleCAgQklTVCBlcnJvciBpbiByYW0gJWQsIGNvbHVtbjogMHglMDR4XG4iLAorCQkJcmVzdWx0LCBtb2R1bGVpZCwgY29sdW1uKTsKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX21lbShhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCBtb2R1bGVpZCkKK3sKKwkvKmVuYWJsZSBtZW0qLworCSh2b2lkKSBiaXN0X3dyKGFkYXB0ZXIsbW9kdWxlaWQsIDB4MDAsIDB4MDApOworCXJldHVybigwKTsKK30KKworc3RhdGljIGludCBydW5fYmlzdF9hbGwoYWRhcHRlcl90ICphZGFwdGVyKQoreworCWludCBwb3J0PTA7CisJdTMyIHZhbD0wOworCisJdnNjX3dyaXRlKGFkYXB0ZXIsIFJFR19NRU1fQklTVCwgMHg1KTsKKwl2c2NfcmVhZChhZGFwdGVyLCBSRUdfTUVNX0JJU1QsICZ2YWwpOworCisJZm9yKHBvcnQ9MDsgcG9ydDwxMjsgcG9ydCsrKXsKKwkJdnNjX3dyaXRlKGFkYXB0ZXIsIFJFR19ERVZfU0VUVVAocG9ydCksIDB4MCk7CisJfQorCisJdWRlbGF5KDMwMCk7CisJdnNjX3dyaXRlKGFkYXB0ZXIsIFJFR19TUEk0X01JU0MsIDB4MDAwNDA0MDkpOworCXVkZWxheSgzMDApOworCisJKHZvaWQpIHJ1bl9iaXN0KGFkYXB0ZXIsMTMpOworCSh2b2lkKSBydW5fYmlzdChhZGFwdGVyLDE0KTsKKwkodm9pZCkgcnVuX2Jpc3QoYWRhcHRlciwyMCk7CisJKHZvaWQpIHJ1bl9iaXN0KGFkYXB0ZXIsMjEpOworCW1kZWxheSgyMDApOworCSh2b2lkKSBjaGVja19iaXN0KGFkYXB0ZXIsMTMpOworCSh2b2lkKSBjaGVja19iaXN0KGFkYXB0ZXIsMTQpOworCSh2b2lkKSBjaGVja19iaXN0KGFkYXB0ZXIsMjApOworCSh2b2lkKSBjaGVja19iaXN0KGFkYXB0ZXIsMjEpOworCXVkZWxheSgxMDApOworCSh2b2lkKSBlbmFibGVfbWVtKGFkYXB0ZXIsMTMpOworCSh2b2lkKSBlbmFibGVfbWVtKGFkYXB0ZXIsMTQpOworCSh2b2lkKSBlbmFibGVfbWVtKGFkYXB0ZXIsMjApOworCSh2b2lkKSBlbmFibGVfbWVtKGFkYXB0ZXIsMjEpOworCXVkZWxheSgzMDApOworCXZzY193cml0ZShhZGFwdGVyLCBSRUdfU1BJNF9NSVNDLCAweDYwMDQwNDAwKTsKKwl1ZGVsYXkoMzAwKTsKKwlmb3IocG9ydD0wOyBwb3J0PDEyOyBwb3J0KyspeworCQl2c2Nfd3JpdGUoYWRhcHRlciwgUkVHX0RFVl9TRVRVUChwb3J0KSwgMHgxKTsKKwl9CisJdWRlbGF5KDMwMCk7CisJdnNjX3dyaXRlKGFkYXB0ZXIsIFJFR19NRU1fQklTVCwgMHgwKTsKKwltZGVsYXkoMTApOworCXJldHVybigwKTsKK30KKworc3RhdGljIGludCBtYWNfaW50cl9oYW5kbGVyKHN0cnVjdCBjbWFjICptYWMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjX2ludHJfZW5hYmxlKHN0cnVjdCBjbWFjICptYWMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjX2ludHJfZGlzYWJsZShzdHJ1Y3QgY21hYyAqbWFjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19pbnRyX2NsZWFyKHN0cnVjdCBjbWFjICptYWMpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIEV4cGVjdCBNQUMgYWRkcmVzcyB0byBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuICovCitzdGF0aWMgaW50IG1hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgY21hYyogbWFjLCB1OCBhZGRyWzZdKQoreworCXUzMiB2YWw7CisJaW50IHBvcnQgPSBtYWMtPmluc3RhbmNlLT5pbmRleDsKKworCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19NQUNfTE9XX0FERFIocG9ydCksCisJCSAgKGFkZHJbM10gPDwgMTYpIHwgKGFkZHJbNF0gPDwgOCkgfCBhZGRyWzVdKTsKKwl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfTUFDX0hJR0hfQUREUihwb3J0KSwKKwkJICAoYWRkclswXSA8PCAxNikgfCAoYWRkclsxXSA8PCA4KSB8IGFkZHJbMl0pOworCisJdnNjX3JlYWQobWFjLT5hZGFwdGVyLCBSRUdfSU5HX0ZGSUxUX1VNX0VOLCAmdmFsKTsKKwl2YWwgJj0gfjB4ZjAwMDAwMDA7CisJdnNjX3dyaXRlKG1hYy0+YWRhcHRlciwgUkVHX0lOR19GRklMVF9VTV9FTiwgdmFsIHwgKHBvcnQgPDwgMjgpKTsKKworCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19JTkdfRkZJTFRfTUFTSzAsCisJCSAgMHhmZmZmMDAwMCB8IChhZGRyWzRdIDw8IDgpIHwgYWRkcls1XSk7CisJdnNjX3dyaXRlKG1hYy0+YWRhcHRlciwgUkVHX0lOR19GRklMVF9NQVNLMSwKKwkJICAweGZmZmYwMDAwIHwgKGFkZHJbMl0gPDwgOCkgfCBhZGRyWzNdKTsKKwl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfSU5HX0ZGSUxUX01BU0syLAorCQkgIDB4ZmZmZjAwMDAgfCAoYWRkclswXSA8PCA4KSB8IGFkZHJbMV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19nZXRfYWRkcmVzcyhzdHJ1Y3QgY21hYyAqbWFjLCB1OCBhZGRyWzZdKQoreworCXUzMiBhZGRyX2xvLCBhZGRyX2hpOworCWludCBwb3J0ID0gbWFjLT5pbnN0YW5jZS0+aW5kZXg7CisKKwl2c2NfcmVhZChtYWMtPmFkYXB0ZXIsIFJFR19NQUNfTE9XX0FERFIocG9ydCksICZhZGRyX2xvKTsKKwl2c2NfcmVhZChtYWMtPmFkYXB0ZXIsIFJFR19NQUNfSElHSF9BRERSKHBvcnQpLCAmYWRkcl9oaSk7CisKKwlhZGRyWzBdID0gKHU4KSAoYWRkcl9oaSA+PiAxNik7CisJYWRkclsxXSA9ICh1OCkgKGFkZHJfaGkgPj4gOCk7CisJYWRkclsyXSA9ICh1OCkgYWRkcl9oaTsKKwlhZGRyWzNdID0gKHU4KSAoYWRkcl9sbyA+PiAxNik7CisJYWRkcls0XSA9ICh1OCkgKGFkZHJfbG8gPj4gOCk7CisJYWRkcls1XSA9ICh1OCkgYWRkcl9sbzsKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpcyBpbnRlbmRlZCB0byByZXNldCBhIHBvcnQsIG5vdCB0aGUgd2hvbGUgTUFDICovCitzdGF0aWMgaW50IG1hY19yZXNldChzdHJ1Y3QgY21hYyAqbWFjKQoreworCWludCBpbmRleCA9IG1hYy0+aW5zdGFuY2UtPmluZGV4OworCisJcnVuX3RhYmxlKG1hYy0+YWRhcHRlciwgdnNjNzMyNl9wb3J0aW5pdFtpbmRleF0sCisJCSAgQVJSQVlfU0laRSh2c2M3MzI2X3BvcnRpbml0W2luZGV4XSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjX3NldF9yeF9tb2RlKHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCB0MV9yeF9tb2RlICpybSkKK3sKKwl1MzIgdjsKKwlpbnQgcG9ydCA9IG1hYy0+aW5zdGFuY2UtPmluZGV4OworCisJdnNjX3JlYWQobWFjLT5hZGFwdGVyLCBSRUdfSU5HX0ZGSUxUX1VNX0VOLCAmdik7CisJdiB8PSAxIDw8IDEyOworCisJaWYgKHQxX3J4X21vZGVfcHJvbWlzYyhybSkpCisJCXYgJj0gfigxIDw8IChwb3J0ICsgMTYpKTsKKwllbHNlCisJCXYgfD0gMSA8PCAocG9ydCArIDE2KTsKKworCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19JTkdfRkZJTFRfVU1fRU4sIHYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19zZXRfbXR1KHN0cnVjdCBjbWFjICptYWMsIGludCBtdHUpCit7CisJaW50IHBvcnQgPSBtYWMtPmluc3RhbmNlLT5pbmRleDsKKworCWlmIChtdHUgPiBNQVhfTVRVKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1heF9sZW4gaW5jbHVkZXMgaGVhZGVyIGFuZCBGQ1MgKi8KKwl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfTUFYX0xFTihwb3J0KSwgbXR1ICsgMTQgKyA0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfc2V0X3NwZWVkX2R1cGxleF9mYyhzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsCisJCQkJICAgaW50IGZjKQoreworCXUzMiB2OworCWludCBlbmFibGUsIHBvcnQgPSBtYWMtPmluc3RhbmNlLT5pbmRleDsKKworCWlmIChzcGVlZCA+PSAwICYmIHNwZWVkICE9IFNQRUVEXzEwICYmIHNwZWVkICE9IFNQRUVEXzEwMCAmJgorCSAgICBzcGVlZCAhPSBTUEVFRF8xMDAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGR1cGxleCA+IDAgJiYgZHVwbGV4ICE9IERVUExFWF9GVUxMKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc3BlZWQgPj0gMCkgeworCQl2c2NfcmVhZChtYWMtPmFkYXB0ZXIsIFJFR19NT0RFX0NGRyhwb3J0KSwgJnYpOworCQllbmFibGUgPSB2ICYgMzsgICAgICAgICAgICAgLyogc2F2ZSB0eC9yeCBlbmFibGVzICovCisJCXYgJj0gfjB4ZjsKKwkJdiB8PSA0OyAgICAgICAgICAgICAgICAgICAgIC8qIGZ1bGwgZHVwbGV4ICovCisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQorCQkJdiB8PSA4OyAgICAgICAgICAgICAvKiBHaWdFICovCisJCWVuYWJsZSB8PSB2OworCQl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfTU9ERV9DRkcocG9ydCksIHYpOworCisJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQorCQkJdiA9IDB4ODI7CisJCWVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKKwkJCXYgPSAweDg0OworCQllbHNlCS8qIFNQRUVEXzEwICovCisJCQl2ID0gMHg4NjsKKwkJdnNjX3dyaXRlKG1hYy0+YWRhcHRlciwgUkVHX0RFVl9TRVRVUChwb3J0KSwgdiB8IDEpOyAvKiByZXNldCAqLworCQl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfREVWX1NFVFVQKHBvcnQpLCB2KTsKKwkJdnNjX3JlYWQobWFjLT5hZGFwdGVyLCBSRUdfREJHKHBvcnQpLCAmdik7CisJCXYgJj0gfjB4ZmYwMDsKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMDApCisJCQl2IHw9IDB4NDAwOworCQllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApCisJCQl2IHw9IDB4MjAwMDsKKwkJZWxzZQkvKiBTUEVFRF8xMCAqLworCQkJdiB8PSAweGZmMDA7CisJCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19EQkcocG9ydCksIHYpOworCisJCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19UWF9JRkcocG9ydCksCisJCQkgIHNwZWVkID09IFNQRUVEXzEwMDAgPyA1IDogMHgxMSk7CisJCWlmIChkdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCQllbmFibGUgPSAweDA7CS8qIDEwMCBvciAxMCAqLworCQllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQorCQkJZW5hYmxlID0gMHhjOworCQllbHNlCS8qIFNQRUVEXzEwMCBvciAxMCAqLworCQkJZW5hYmxlID0gMHg0OworCQllbmFibGUgfD0gMHg5IDw8IDEwOwkvKiBJRkcxICovCisJCWVuYWJsZSB8PSAweDYgPDwgNjsJLyogSUZHMiAqLworCQllbmFibGUgfD0gMHgxIDw8IDQ7CS8qIFZMQU4gKi8KKwkJZW5hYmxlIHw9IDB4MzsJCS8qIFJYL1RYIEVOICovCisJCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19NT0RFX0NGRyhwb3J0KSwgZW5hYmxlKTsKKworCX0KKworCXZzY19yZWFkKG1hYy0+YWRhcHRlciwgUkVHX1BBVVNFX0NGRyhwb3J0KSwgJnYpOworCXYgJj0gMHhmZmYwZmZmZjsKKwl2IHw9IDB4MjAwMDA7ICAgICAgLyogeG9uL3hvZmYgKi8KKwlpZiAoZmMgJiBQQVVTRV9SWCkKKwkJdiB8PSAweDQwMDAwOworCWlmIChmYyAmIFBBVVNFX1RYKQorCQl2IHw9IDB4ODAwMDA7CisJaWYgKGZjID09IChQQVVTRV9SWCB8IFBBVVNFX1RYKSkKKwkJdiB8PSAweDEwMDAwOworCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19QQVVTRV9DRkcocG9ydCksIHYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hY19lbmFibGUoc3RydWN0IGNtYWMgKm1hYywgaW50IHdoaWNoKQoreworCXUzMiB2YWw7CisJaW50IHBvcnQgPSBtYWMtPmluc3RhbmNlLT5pbmRleDsKKworCS8qIFdyaXRlIHRoZSBjb3JyZWN0IFdNIHZhbHVlIHdoZW4gdGhlIHBvcnQgaXMgZW5hYmxlZC4gKi8KKwl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfSElHSF9MT1dfV00oMSxwb3J0KSwgV01fRU5BQkxFKTsKKworCXZzY19yZWFkKG1hYy0+YWRhcHRlciwgUkVHX01PREVfQ0ZHKHBvcnQpLCAmdmFsKTsKKwlpZiAod2hpY2ggJiBNQUNfRElSRUNUSU9OX1JYKQorCQl2YWwgfD0gMHgyOworCWlmICh3aGljaCAmIE1BQ19ESVJFQ1RJT05fVFgpCisJCXZhbCB8PSAxOworCXZzY193cml0ZShtYWMtPmFkYXB0ZXIsIFJFR19NT0RFX0NGRyhwb3J0KSwgdmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWNfZGlzYWJsZShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgd2hpY2gpCit7CisJdTMyIHZhbDsKKwlpbnQgaSwgcG9ydCA9IG1hYy0+aW5zdGFuY2UtPmluZGV4OworCisJLyogUmVzZXQgdGhlIHBvcnQsIHRoaXMgYWxzbyB3cml0ZXMgdGhlIGNvcnJlY3QgV00gdmFsdWUgKi8KKwltYWNfcmVzZXQobWFjKTsKKworCXZzY19yZWFkKG1hYy0+YWRhcHRlciwgUkVHX01PREVfQ0ZHKHBvcnQpLCAmdmFsKTsKKwlpZiAod2hpY2ggJiBNQUNfRElSRUNUSU9OX1JYKQorCQl2YWwgJj0gfjB4MjsKKwlpZiAod2hpY2ggJiBNQUNfRElSRUNUSU9OX1RYKQorCQl2YWwgJj0gfjB4MTsKKwl2c2Nfd3JpdGUobWFjLT5hZGFwdGVyLCBSRUdfTU9ERV9DRkcocG9ydCksIHZhbCk7CisJdnNjX3JlYWQobWFjLT5hZGFwdGVyLCBSRUdfTU9ERV9DRkcocG9ydCksICZ2YWwpOworCisJLyogQ2xlYXIgc3RhdHMgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDB4M2E7ICsraSkKKwkJdnNjX3dyaXRlKG1hYy0+YWRhcHRlciwgQ1JBKDQsIHBvcnQsIGkpLCAwKTsKKworCS8qIENsZWFyIHNvZndhcmUgY291bnRlcnMgKi8KKwltZW1zZXQoJm1hYy0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgY21hY19zdGF0aXN0aWNzKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcm1vbl91cGRhdGUoc3RydWN0IGNtYWMgKm1hYywgdW5zaWduZWQgaW50IGFkZHIsIHU2NCAqc3RhdCkKK3sKKwl1MzIgdiwgbG87CisKKwl2c2NfcmVhZChtYWMtPmFkYXB0ZXIsIGFkZHIsICZ2KTsKKwlsbyA9ICpzdGF0OworCSpzdGF0ID0gKnN0YXQgLSBsbyArIHY7CisKKwlpZiAodiA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAodiA8IGxvKQorCQkqc3RhdCArPSAoMVVMTCA8PCAzMik7Cit9CisKK3N0YXRpYyB2b2lkIHBvcnRfc3RhdHNfdXBkYXRlKHN0cnVjdCBjbWFjICptYWMpCit7CisJaW50IHBvcnQgPSBtYWMtPmluc3RhbmNlLT5pbmRleDsKKworCS8qIFJ4IHN0YXRzICovCisJcm1vbl91cGRhdGUobWFjLCBSRUdfUlhfT0tfQllURVMocG9ydCksICZtYWMtPnN0YXRzLlJ4T2N0ZXRzT0spOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1JYX0JBRF9CWVRFUyhwb3J0KSwgJm1hYy0+c3RhdHMuUnhPY3RldHNCYWQpOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1JYX1VOSUNBU1QocG9ydCksICZtYWMtPnN0YXRzLlJ4VW5pY2FzdEZyYW1lc09LKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9NVUxUSUNBU1QocG9ydCksCisJCSAgICAmbWFjLT5zdGF0cy5SeE11bHRpY2FzdEZyYW1lc09LKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9CUk9BRENBU1QocG9ydCksCisJCSAgICAmbWFjLT5zdGF0cy5SeEJyb2FkY2FzdEZyYW1lc09LKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19DUkMocG9ydCksICZtYWMtPnN0YXRzLlJ4RkNTRXJyb3JzKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9BTElHTk1FTlQocG9ydCksICZtYWMtPnN0YXRzLlJ4QWxpZ25FcnJvcnMpOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1JYX09WRVJTSVpFKHBvcnQpLAorCQkgICAgJm1hYy0+c3RhdHMuUnhGcmFtZVRvb0xvbmdFcnJvcnMpOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1JYX1BBVVNFKHBvcnQpLCAmbWFjLT5zdGF0cy5SeFBhdXNlRnJhbWVzKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9KQUJCRVJTKHBvcnQpLCAmbWFjLT5zdGF0cy5SeEphYmJlckVycm9ycyk7CisJcm1vbl91cGRhdGUobWFjLCBSRUdfUlhfRlJBR01FTlRTKHBvcnQpLCAmbWFjLT5zdGF0cy5SeFJ1bnRFcnJvcnMpOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1JYX1VOREVSU0laRShwb3J0KSwgJm1hYy0+c3RhdHMuUnhSdW50RXJyb3JzKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9TWU1CT0xfQ0FSUklFUihwb3J0KSwKKwkJICAgICZtYWMtPnN0YXRzLlJ4U3ltYm9sRXJyb3JzKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9TSVpFXzE1MTlfVE9fTUFYKHBvcnQpLAorICAgICAgICAgICAgJm1hYy0+c3RhdHMuUnhKdW1ib0ZyYW1lc09LKTsKKworCS8qIFR4IHN0YXRzIChza2lwIGNvbGxpc2lvbiBzdGF0cyBhcyB3ZSBhcmUgZnVsbC1kdXBsZXggb25seSkgKi8KKwlybW9uX3VwZGF0ZShtYWMsIFJFR19UWF9PS19CWVRFUyhwb3J0KSwgJm1hYy0+c3RhdHMuVHhPY3RldHNPSyk7CisJcm1vbl91cGRhdGUobWFjLCBSRUdfVFhfVU5JQ0FTVChwb3J0KSwgJm1hYy0+c3RhdHMuVHhVbmljYXN0RnJhbWVzT0spOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1RYX01VTFRJQ0FTVChwb3J0KSwKKwkJICAgICZtYWMtPnN0YXRzLlR4TXVsdGljYXN0RnJhbWVzT0spOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1RYX0JST0FEQ0FTVChwb3J0KSwKKwkJICAgICZtYWMtPnN0YXRzLlR4QnJvYWRjYXN0RnJhbWVzT0spOworCXJtb25fdXBkYXRlKG1hYywgUkVHX1RYX1BBVVNFKHBvcnQpLCAmbWFjLT5zdGF0cy5UeFBhdXNlRnJhbWVzKTsKKwlybW9uX3VwZGF0ZShtYWMsIFJFR19UWF9VTkRFUlJVTihwb3J0KSwgJm1hYy0+c3RhdHMuVHhVbmRlcnJ1bik7CisJcm1vbl91cGRhdGUobWFjLCBSRUdfVFhfU0laRV8xNTE5X1RPX01BWChwb3J0KSwKKyAgICAgICAgICAgICZtYWMtPnN0YXRzLlR4SnVtYm9GcmFtZXNPSyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBwZXJpb2RpY2FsbHkgdG8gYWNjdW11bGF0ZSB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlCisgKiBSTU9OIGNvdW50ZXJzIGludG8gdGhlIHBvcnQgc3RhdGlzdGljcy4gIFNpbmNlIHRoZSBjb3VudGVycyBhcmUgb25seSAzMiBiaXRzCisgKiBzb21lIG9mIHRoZW0gY2FuIG92ZXJmbG93IGluIGxlc3MgdGhhbiBhIG1pbnV0ZSBhdCBHaWdFIHNwZWVkcywgc28gdGhpcworICogZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBldmVyeSAzMCBzZWNvbmRzIG9yIHNvLgorICoKKyAqIFRvIGN1dCBkb3duIG9uIHJlYWRpbmcgY29zdHMgd2UgdXBkYXRlIG9ubHkgdGhlIG9jdGV0IGNvdW50ZXJzIGF0IGVhY2ggdGljaworICogYW5kIGRvIGEgZnVsbCB1cGRhdGUgYXQgbWFqb3IgdGlja3MsIHdoaWNoIGNhbiBiZSBldmVyeSAzMCBtaW51dGVzIG9yIG1vcmUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21hY19zdGF0aXN0aWNzICptYWNfdXBkYXRlX3N0YXRpc3RpY3Moc3RydWN0IGNtYWMgKm1hYywKKwkJCQkJCQkgICBpbnQgZmxhZykKK3sKKwlpZiAoZmxhZyA9PSBNQUNfU1RBVFNfVVBEQVRFX0ZVTEwgfHwKKwkgICAgbWFjLT5pbnN0YW5jZS0+dGlja3MgPj0gTUFKT1JfVVBEQVRFX1RJQ0tTKSB7CisJCXBvcnRfc3RhdHNfdXBkYXRlKG1hYyk7CisJCW1hYy0+aW5zdGFuY2UtPnRpY2tzID0gMDsKKwl9IGVsc2UgeworCQlpbnQgcG9ydCA9IG1hYy0+aW5zdGFuY2UtPmluZGV4OworCisJCXJtb25fdXBkYXRlKG1hYywgUkVHX1JYX09LX0JZVEVTKHBvcnQpLAorCQkJICAgICZtYWMtPnN0YXRzLlJ4T2N0ZXRzT0spOworCQlybW9uX3VwZGF0ZShtYWMsIFJFR19SWF9CQURfQllURVMocG9ydCksCisJCQkgICAgJm1hYy0+c3RhdHMuUnhPY3RldHNCYWQpOworCQlybW9uX3VwZGF0ZShtYWMsIFJFR19UWF9PS19CWVRFUyhwb3J0KSwKKwkJCSAgICAmbWFjLT5zdGF0cy5UeE9jdGV0c09LKTsKKwkJbWFjLT5pbnN0YW5jZS0+dGlja3MrKzsKKwl9CisJcmV0dXJuICZtYWMtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBtYWNfZGVzdHJveShzdHJ1Y3QgY21hYyAqbWFjKQoreworCWtmcmVlKG1hYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY21hY19vcHMgdnNjNzMyNl9vcHMgPSB7CisJLmRlc3Ryb3kgICAgICAgICAgICAgICAgICA9IG1hY19kZXN0cm95LAorCS5yZXNldCAgICAgICAgICAgICAgICAgICAgPSBtYWNfcmVzZXQsCisJLmludGVycnVwdF9oYW5kbGVyICAgICAgICA9IG1hY19pbnRyX2hhbmRsZXIsCisJLmludGVycnVwdF9lbmFibGUgICAgICAgICA9IG1hY19pbnRyX2VuYWJsZSwKKwkuaW50ZXJydXB0X2Rpc2FibGUgICAgICAgID0gbWFjX2ludHJfZGlzYWJsZSwKKwkuaW50ZXJydXB0X2NsZWFyICAgICAgICAgID0gbWFjX2ludHJfY2xlYXIsCisJLmVuYWJsZSAgICAgICAgICAgICAgICAgICA9IG1hY19lbmFibGUsCisJLmRpc2FibGUgICAgICAgICAgICAgICAgICA9IG1hY19kaXNhYmxlLAorCS5zZXRfbXR1ICAgICAgICAgICAgICAgICAgPSBtYWNfc2V0X210dSwKKwkuc2V0X3J4X21vZGUgICAgICAgICAgICAgID0gbWFjX3NldF9yeF9tb2RlLAorCS5zZXRfc3BlZWRfZHVwbGV4X2ZjICAgICAgPSBtYWNfc2V0X3NwZWVkX2R1cGxleF9mYywKKwkuc3RhdGlzdGljc191cGRhdGUgICAgICAgID0gbWFjX3VwZGF0ZV9zdGF0aXN0aWNzLAorCS5tYWNhZGRyZXNzX2dldCAgICAgICAgICAgPSBtYWNfZ2V0X2FkZHJlc3MsCisJLm1hY2FkZHJlc3Nfc2V0ICAgICAgICAgICA9IG1hY19zZXRfYWRkcmVzcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21hYyAqdnNjNzMyNl9tYWNfY3JlYXRlKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IGluZGV4KQoreworCXN0cnVjdCBjbWFjICptYWM7CisJdTMyIHZhbDsKKwlpbnQgaTsKKworCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKCptYWMpICsgc2l6ZW9mKGNtYWNfaW5zdGFuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hYykgcmV0dXJuIE5VTEw7CisKKwltYWMtPm9wcyA9ICZ2c2M3MzI2X29wczsKKwltYWMtPmluc3RhbmNlID0gKGNtYWNfaW5zdGFuY2UgKikobWFjICsgMSk7CisJbWFjLT5hZGFwdGVyICA9IGFkYXB0ZXI7CisKKwltYWMtPmluc3RhbmNlLT5pbmRleCA9IGluZGV4OworCW1hYy0+aW5zdGFuY2UtPnRpY2tzID0gMDsKKworCWkgPSAwOworCWRvIHsKKwkJdTMyIHZoaSwgdmxvOworCisJCXZoaSA9IHZsbyA9IDA7CisJCXQxX3RwaV9yZWFkKGFkYXB0ZXIsIChSRUdfTE9DQUxfU1RBVFVTIDw8IDIpICsgNCwgJnZsbyk7CisJCXVkZWxheSgxKTsKKwkJdDFfdHBpX3JlYWQoYWRhcHRlciwgUkVHX0xPQ0FMX1NUQVRVUyA8PCAyLCAmdmhpKTsKKwkJdWRlbGF5KDUpOworCQl2YWwgPSAodmhpIDw8IDE2KSB8IHZsbzsKKwl9IHdoaWxlICgoKytpIDwgMTAwMDApICYmICh2YWwgPT0gMHhmZmZmZmZmZikpOworCisJcmV0dXJuIG1hYzsKK30KKworc3RhdGljIGludCB2c2M3MzI2X21hY19yZXNldChhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJdnNjNzMyNl9mdWxsX3Jlc2V0KGFkYXB0ZXIpOworCSh2b2lkKSBydW5fYmlzdF9hbGwoYWRhcHRlcik7CisJcnVuX3RhYmxlKGFkYXB0ZXIsIHZzYzczMjZfcmVzZXQsIEFSUkFZX1NJWkUodnNjNzMyNl9yZXNldCkpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZ21hYyB0MV92c2M3MzI2X29wcyA9IHsKKwkuc3RhdHNfdXBkYXRlX3BlcmlvZCA9IFNUQVRTX1RJQ0tfU0VDUywKKwkuY3JlYXRlICAgICAgICAgICAgICA9IHZzYzczMjZfbWFjX2NyZWF0ZSwKKwkucmVzZXQgICAgICAgICAgICAgICA9IHZzYzczMjZfbWFjX3Jlc2V0LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjNzMyNl9yZWcuaCBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjNzMyNl9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFiY2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2X3JlZy5oCkBAIC0wLDAgKzEsMjg2IEBACisvKiAkRGF0ZTogMjAwNi8wNC8yOCAxOToyMDoxNyAkICRSQ1NmaWxlOiB2c2M3MzI2X3JlZy5oLHYgJCAkUmV2aXNpb246IDEuNSAkICovCisjaWZuZGVmIF9WU0M3MzIxX1JFR19IXworI2RlZmluZSBfVlNDNzMyMV9SRUdfSF8KKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIFZpdGVzc2UgVlNDNzMyMSAoTWVpZ3MgSUkpIE1BQworICoKKyAqIFN0cmFpZ2h0IG9mZiB0aGUgZGF0YSBzaGVldCwgVk1EUy0xMDAzOCBSZXYgMi4wIGFuZAorICogUEQwMDExLTAxLTE0LU1laWdzLUlJIDIwMDItMTItMTIKKyAqLworCisvKiBKdXN0ICdjYXVzZSBpdCdzIGluIGhlcmUgZG9lc24ndCBtZWFuIGl0J3MgdXNlZC4gKi8KKworI2RlZmluZSBDUkEoYmxrLHN1YixhZHIpICgoKChibGspICYgMHg3KSA8PCAxMykgfCAoKChzdWIpICYgMHhmKSA8PCA5KSB8ICgoKGFkcikgJiAweGZmKSA8PCAxKSkKKworLyogU3lzdGVtIGFuZCBDUFUgY29tbSdzIHJlZ2lzdGVycyAqLworI2RlZmluZSBSRUdfQ0hJUF9JRAkJQ1JBKDB4NywweGYsMHgwMCkJLyogQ2hpcCBJRCAqLworI2RlZmluZSBSRUdfQkxBREVfSUQJCUNSQSgweDcsMHhmLDB4MDEpCS8qIEJsYWRlIElEICovCisjZGVmaW5lIFJFR19TV19SRVNFVAkJQ1JBKDB4NywweGYsMHgwMikJLyogR2xvYmFsIFNvZnQgUmVzZXQgKi8KKyNkZWZpbmUgUkVHX01FTV9CSVNUCQlDUkEoMHg3LDB4ZiwweDA0KQkvKiBtZW0gKi8KKyNkZWZpbmUgUkVHX0lGQUNFX01PREUJCUNSQSgweDcsMHhmLDB4MDcpCS8qIEludGVyZmFjZSBtb2RlICovCisjZGVmaW5lIFJFR19NU0NICQlDUkEoMHg3LDB4MiwweDA2KQkvKiBDUkMgZXJyb3IgY291bnQgKi8KKyNkZWZpbmUgUkVHX0NSQ19DTlQJCUNSQSgweDcsMHgyLDB4MGEpCS8qIENSQyBlcnJvciBjb3VudCAqLworI2RlZmluZSBSRUdfQ1JDX0NGRwkJQ1JBKDB4NywweDIsMHgwYikJLyogQ1JDIGNvbmZpZyAqLworI2RlZmluZSBSRUdfU0lfVFJBTlNGRVJfU0VMCUNSQSgweDcsMHhmLDB4MTgpCS8qIFNJIFRyYW5zZmVyIFNlbGVjdCAqLworI2RlZmluZSBSRUdfUExMX0NMS19TUEVFRAlDUkEoMHg3LDB4ZiwweDE5KQkvKiBDbG9jayBTcGVlZCBTZWxlY3Rpb24gKi8KKyNkZWZpbmUgUkVHX1NZU19DTEtfU0VMRUNUCUNSQSgweDcsMHhmLDB4MWMpCS8qIFN5c3RlbSBDbG9jayBTZWxlY3QgKi8KKyNkZWZpbmUgUkVHX0dQSU9fQ1RSTAkJQ1JBKDB4NywweGYsMHgxZCkJLyogR1BJTyBDb250cm9sICovCisjZGVmaW5lIFJFR19HUElPX09VVAkJQ1JBKDB4NywweGYsMHgxZSkJLyogR1BJTyBPdXQgKi8KKyNkZWZpbmUgUkVHX0dQSU9fSU4JCUNSQSgweDcsMHhmLDB4MWYpCS8qIEdQSU8gSW4gKi8KKyNkZWZpbmUgUkVHX0NQVV9UUkFOU0ZFUl9TRUwJQ1JBKDB4NywweGYsMHgyMCkJLyogQ1BVIFRyYW5zZmVyIFNlbGVjdCAqLworI2RlZmluZSBSRUdfTE9DQUxfREFUQQkJQ1JBKDB4NywweGYsMHhmZSkJLyogTG9jYWwgQ1BVIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xPQ0FMX1NUQVRVUwlDUkEoMHg3LDB4ZiwweGZmKQkvKiBMb2NhbCBDUFUgU3RhdHVzIFJlZ2lzdGVyICovCisKKy8qIEFnZ3JlZ2F0b3IgcmVnaXN0ZXJzICovCisjZGVmaW5lIFJFR19BR0dSX1NFVFVQCQlDUkEoMHg3LDB4MSwweDAwKQkvKiBBZ2dyZWdhdG9yIFNldHVwICovCisjZGVmaW5lIFJFR19QTUFQX1RBQkxFCQlDUkEoMHg3LDB4MSwweDAxKQkvKiBQb3J0IG1hcCB0YWJsZSAqLworI2RlZmluZSBSRUdfTVBMU19CSVQwCQlDUkEoMHg3LDB4MSwweDA4KQkvKiBNUExTIGJpdDAgcG9zaXRpb24gKi8KKyNkZWZpbmUgUkVHX01QTFNfQklUMQkJQ1JBKDB4NywweDEsMHgwOSkJLyogTVBMUyBiaXQxIHBvc2l0aW9uICovCisjZGVmaW5lIFJFR19NUExTX0JJVDIJCUNSQSgweDcsMHgxLDB4MGEpCS8qIE1QTFMgYml0MiBwb3NpdGlvbiAqLworI2RlZmluZSBSRUdfTVBMU19CSVQzCQlDUkEoMHg3LDB4MSwweDBiKQkvKiBNUExTIGJpdDMgcG9zaXRpb24gKi8KKyNkZWZpbmUgUkVHX01QTFNfQklUTUFTSwlDUkEoMHg3LDB4MSwweDBjKQkvKiBNUExTIGJpdCBtYXNrICovCisjZGVmaW5lIFJFR19QUkVfQklUMFBPUwkJQ1JBKDB4NywweDEsMHgxMCkJLyogUHJlYW1ibGUgYml0MCBwb3NpdGlvbiAqLworI2RlZmluZSBSRUdfUFJFX0JJVDFQT1MJCUNSQSgweDcsMHgxLDB4MTEpCS8qIFByZWFtYmxlIGJpdDEgcG9zaXRpb24gKi8KKyNkZWZpbmUgUkVHX1BSRV9CSVQyUE9TCQlDUkEoMHg3LDB4MSwweDEyKQkvKiBQcmVhbWJsZSBiaXQyIHBvc2l0aW9uICovCisjZGVmaW5lIFJFR19QUkVfQklUM1BPUwkJQ1JBKDB4NywweDEsMHgxMykJLyogUHJlYW1ibGUgYml0MyBwb3NpdGlvbiAqLworI2RlZmluZSBSRUdfUFJFX0VSUl9DTlQJCUNSQSgweDcsMHgxLDB4MTQpCS8qIFByZWFtYmxlIHBhcml0eSBlcnJvciBjb3VudCAqLworCisvKiBCSVNUIHJlZ2lzdGVycyAqLworLyojZGVmaW5lIFJFR19SQU1fQklTVF9DTUQJQ1JBKDB4NywweDIsMHgwMCkqLwkvKiBSQU0gQklTVCBDb21tYW5kIFJlZ2lzdGVyICovCisvKiNkZWZpbmUgUkVHX1JBTV9CSVNUX1JFU1VMVAlDUkEoMHg3LDB4MiwweDAxKSovCS8qIFJBTSBCSVNUIFJlYWQgU3RhdHVzL1Jlc3VsdCAqLworI2RlZmluZSBSRUdfUkFNX0JJU1RfQ01ECUNSQSgweDcsMHgxLDB4MDApCS8qIFJBTSBCSVNUIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1JBTV9CSVNUX1JFU1VMVAlDUkEoMHg3LDB4MSwweDAxKQkvKiBSQU0gQklTVCBSZWFkIFN0YXR1cy9SZXN1bHQgKi8KKyNkZWZpbmUgICBCSVNUX1BPUlRfU0VMRUNUCTB4MDAJCQkvKiBCSVNUIHBvcnQgc2VsZWN0ICovCisjZGVmaW5lICAgQklTVF9DT01NQU5ECQkweDAxCQkJLyogQklTVCBlbmFibGUvZGlzYWJsZSAqLworI2RlZmluZSAgIEJJU1RfU1RBVFVTCQkweDAyCQkJLyogQklTVCBvcGVyYXRpb24gc3RhdHVzICovCisjZGVmaW5lICAgQklTVF9FUlJfQ05UX0xTQgkweDAzCQkJLyogQklTVCBlcnJvciBjb3VudCBsbyA4YiAqLworI2RlZmluZSAgIEJJU1RfRVJSX0NOVF9NU0IJMHgwNAkJCS8qIEJJU1QgZXJyb3IgY291bnQgaGkgOGIgKi8KKyNkZWZpbmUgICBCSVNUX0VSUl9TRUxfTFNCCTB4MDUJCQkvKiBCSVNUIGVycm9yIHNlbGVjdCBsbyA4YiAqLworI2RlZmluZSAgIEJJU1RfRVJSX1NFTF9NU0IJMHgwNgkJCS8qIEJJU1QgZXJyb3Igc2VsZWN0IGhpIDhiICovCisjZGVmaW5lICAgQklTVF9FUlJPUl9TVEFURQkweDA3CQkJLyogQklTVCBlbmdpbmUgaW50ZXJuYWwgc3RhdGUgKi8KKyNkZWZpbmUgICBCSVNUX0VSUl9BRFIwCQkweDA4CQkJLyogQklTVCBlcnJvciBhZGRyZXNzIGxvIDhiICovCisjZGVmaW5lICAgQklTVF9FUlJfQURSMQkJMHgwOQkJCS8qIEJJU1QgZXJyb3IgYWRkcmVzcyBsb21pZCA4YiAqLworI2RlZmluZSAgIEJJU1RfRVJSX0FEUjIJCTB4MGEJCQkvKiBCSVNUIGVycm9yIGFkZHJlc3MgaGltaWQgOGIgKi8KKyNkZWZpbmUgICBCSVNUX0VSUl9BRFIzCQkweDBiCQkJLyogQklTVCBlcnJvciBhZGRyZXNzIGhpIDhiICovCisKKy8qIEZJRk8gcmVnaXN0ZXJzCisgKiAgIGllID0gMCBmb3IgaW5ncmVzcywgMSBmb3IgZWdyZXNzCisgKiAgIGZuID0gRklGTyBudW1iZXIsIDAtOQorICovCisjZGVmaW5lIFJFR19URVNUKGllLGZuKQkJQ1JBKDB4MixpZSYxLDB4MDArZm4pCS8qIE1vZGUgJiBUZXN0IFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19UT1BfQk9UVE9NKGllLGZuKQlDUkEoMHgyLGllJjEsMHgxMCtmbikJLyogRklGTyBCdWZmZXIgVG9wICYgQm90dG9tICovCisjZGVmaW5lIFJFR19UQUlMKGllLGZuKQkJQ1JBKDB4MixpZSYxLDB4MjArZm4pCS8qIEZJRk8gV3JpdGUgUG9pbnRlciAqLworI2RlZmluZSBSRUdfSEVBRChpZSxmbikJCUNSQSgweDIsaWUmMSwweDMwK2ZuKQkvKiBGSUZPIFJlYWQgUG9pbnRlciAqLworI2RlZmluZSBSRUdfSElHSF9MT1dfV00oaWUsZm4pCUNSQSgweDIsaWUmMSwweDQwK2ZuKQkvKiBGbG93IENvbnRyb2wgV2F0ZXIgTWFya3MgKi8KKyNkZWZpbmUgUkVHX0NUX1RIUkhMRChpZSxmbikJQ1JBKDB4MixpZSYxLDB4NTArZm4pCS8qIEN1dCBUaHJvdWdoIFRocmVzaG9sZCAqLworI2RlZmluZSBSRUdfRklGT19EUk9QX0NOVChpZSxmbikgQ1JBKDB4MixpZSYxLDB4NjArZm4pCS8qIERyb3AgJiBDUkMgRXJyb3IgQ291bnRlciAqLworI2RlZmluZSBSRUdfREVCVUdfQlVGX0NOVChpZSxmbikgQ1JBKDB4MixpZSYxLDB4NzArZm4pCS8qIElucHV0IFNpZGUgRGVidWcgQ291bnRlciAqLworI2RlZmluZSBSRUdfQlVDS0koZm4pIENSQSgweDIsMiwweDIwK2ZuKQkvKiBJbnB1dCBTaWRlIERlYnVnIENvdW50ZXIgKi8KKyNkZWZpbmUgUkVHX0JVQ0tFKGZuKSBDUkEoMHgyLDMsMHgyMCtmbikJLyogSW5wdXQgU2lkZSBEZWJ1ZyBDb3VudGVyICovCisKKy8qIFRyYWZmaWMgc2hhcGVyIGJ1Y2tldHMKKyAqICAgaWUgPSAwIGZvciBpbmdyZXNzLCAxIGZvciBlZ3Jlc3MKKyAqICAgYm4gPSBidWNrZXQgbnVtYmVyIDAtMTAgKHllcywgMTEgYnVja2V0cykKKyAqLworLyogT0ssIHRoaXMgb25lJ3Mga2luZGEgdWdseS4gIFNvbWUgaGFyZHdhcmUgZGVzaWduZXJzIGFyZSBwZXJ2ZXJzZS4gKi8KKyNkZWZpbmUgUkVHX1RSQUZGSUNfU0hBUEVSX0JVQ0tFVChpZSxibikgQ1JBKDB4MixpZSYxLDB4MGEgKyAoYm4+NykgfCAoKGJuJjcpPDw0KSkKKyNkZWZpbmUgUkVHX1RSQUZGSUNfU0hBUEVSX0NPTlRST0woaWUpCUNSQSgweDIsaWUmMSwweDNiKQorCisjZGVmaW5lIFJFR19TUkFNX0FEUihpZSkJQ1JBKDB4MixpZSYxLDB4MGUpCS8qIEZJRk8gU1JBTSBhZGRyZXNzICovCisjZGVmaW5lIFJFR19TUkFNX1dSX1NUUkIoaWUpCUNSQSgweDIsaWUmMSwweDFlKQkvKiBGSUZPIFNSQU0gd3JpdGUgc3Ryb2JlICovCisjZGVmaW5lIFJFR19TUkFNX1JEX1NUUkIoaWUpCUNSQSgweDIsaWUmMSwweDJlKQkvKiBGSUZPIFNSQU0gcmVhZCBzdHJvYmUgKi8KKyNkZWZpbmUgUkVHX1NSQU1fREFUQV8wKGllKQlDUkEoMHgyLGllJjEsMHgzZSkJLyogRklGTyBTUkFNIGRhdGEgbG8gOGIgKi8KKyNkZWZpbmUgUkVHX1NSQU1fREFUQV8xKGllKQlDUkEoMHgyLGllJjEsMHg0ZSkJLyogRklGTyBTUkFNIGRhdGEgbG9taWQgOGIgKi8KKyNkZWZpbmUgUkVHX1NSQU1fREFUQV8yKGllKQlDUkEoMHgyLGllJjEsMHg1ZSkJLyogRklGTyBTUkFNIGRhdGEgaGltaWQgOGIgKi8KKyNkZWZpbmUgUkVHX1NSQU1fREFUQV8zKGllKQlDUkEoMHgyLGllJjEsMHg2ZSkJLyogRklGTyBTUkFNIGRhdGEgaGkgOGIgKi8KKyNkZWZpbmUgUkVHX1NSQU1fREFUQV9CTEtfVFlQRShpZSkgQ1JBKDB4MixpZSYxLDB4N2UpCS8qIEZJRk8gU1JBTSB0YWcgKi8KKy8qIFJFR19JTkdfQ09OVFJPTCBlcXVhbHMgUkVHX0NPTlRST0wgd2l0aCBpZSA9IDAsIGxpa2V3aXNlIFJFR19FR1JfQ09OVFJPTCBpcyBpZSA9IDEgKi8KKyNkZWZpbmUgUkVHX0NPTlRST0woaWUpCQlDUkEoMHgyLGllJjEsMHgwZikJLyogRklGTyBjb250cm9sICovCisjZGVmaW5lIFJFR19JTkdfQ09OVFJPTAkJQ1JBKDB4MiwweDAsMHgwZikJLyogSW5ncmVzcyBjb250cm9sIChhbGlhcykgKi8KKyNkZWZpbmUgUkVHX0VHUl9DT05UUk9MCQlDUkEoMHgyLDB4MSwweDBmKQkvKiBFZ3Jlc3MgY29udHJvbCAoYWxpYXMpICovCisjZGVmaW5lIFJFR19BR0VfVElNRVIoaWUpCUNSQSgweDIsaWUmMSwweDFmKQkvKiBBZ2luZyB0aW1lciAqLworI2RlZmluZSBSRUdfQUdFX0lOQyhpZSkJCUNSQSgweDIsaWUmMSwweDJmKQkvKiBBZ2luZyBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgREVCVUdfT1VUKGllKQkJQ1JBKDB4MixpZSYxLDB4M2YpCS8qIE91dHB1dCBkZWJ1ZyBjb3VudGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgREVCVUdfQ05UKGllKQkJQ1JBKDB4MixpZSYxLDB4NGYpCS8qIE91dHB1dCBkZWJ1ZyBjb3VudGVyICovCisKKy8qIFNQSTQgaW50ZXJmYWNlICovCisjZGVmaW5lIFJFR19TUEk0X01JU0MJCUNSQSgweDUsMHgwLDB4MDApCS8qIE1pc2MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1NQSTRfU1RBVFVTCQlDUkEoMHg1LDB4MCwweDAxKQkvKiBDTUwgU3RhdHVzICovCisjZGVmaW5lIFJFR19TUEk0X0lOR19TRVRVUDAJQ1JBKDB4NSwweDAsMHgwMikJLyogSW5ncmVzcyBTdGF0dXMgQ2hhbm5lbCBTZXR1cCAqLworI2RlZmluZSBSRUdfU1BJNF9JTkdfU0VUVVAxCUNSQSgweDUsMHgwLDB4MDMpCS8qIEluZ3Jlc3MgRGF0YSBUcmFpbmluZyBTZXR1cCAqLworI2RlZmluZSBSRUdfU1BJNF9JTkdfU0VUVVAyCUNSQSgweDUsMHgwLDB4MDQpCS8qIEluZ3Jlc3MgRGF0YSBCdXJzdCBTaXplIFNldHVwICovCisjZGVmaW5lIFJFR19TUEk0X0VHUl9TRVRVUDAJQ1JBKDB4NSwweDAsMHgwNSkJLyogRWdyZXNzIFN0YXR1cyBDaGFubmVsIFNldHVwICovCisjZGVmaW5lIFJFR19TUEk0X0RCR19DTlQobikJQ1JBKDB4NSwweDAsMHgxMCtuKQkvKiBEZWJ1ZyBjb3VudGVycyAwLTkgKi8KKyNkZWZpbmUgUkVHX1NQSTRfREJHX1NFVFVQCUNSQSgweDUsMHgwLDB4MUEpCS8qIERlYnVnIGNvdW50ZXJzIHNldHVwICovCisjZGVmaW5lIFJFR19TUEk0X1RFU1QJCUNSQSgweDUsMHgwLDB4MjApCS8qIFRlc3QgU2V0dXAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX1RQR0VOX1VQMAkJQ1JBKDB4NSwweDAsMHgyMSkJLyogVGVzdCBQYXR0ZXJuIGdlbmVyYXRvciB1c2VyIHBhdHRlcm4gMCAqLworI2RlZmluZSBSRUdfVFBHRU5fVVAxCQlDUkEoMHg1LDB4MCwweDIyKQkvKiBUZXN0IFBhdHRlcm4gZ2VuZXJhdG9yIHVzZXIgcGF0dGVybiAxICovCisjZGVmaW5lIFJFR19UUENIS19VUDAJCUNSQSgweDUsMHgwLDB4MjMpCS8qIFRlc3QgUGF0dGVybiBjaGVja2VyIHVzZXIgcGF0dGVybiAwICovCisjZGVmaW5lIFJFR19UUENIS19VUDEJCUNSQSgweDUsMHgwLDB4MjQpCS8qIFRlc3QgUGF0dGVybiBjaGVja2VyIHVzZXIgcGF0dGVybiAxICovCisjZGVmaW5lIFJFR19UUFNBTV9QMAkJQ1JBKDB4NSwweDAsMHgyNSkJLyogU2FtcGxlZCBwYXR0ZXJuIDAgKi8KKyNkZWZpbmUgUkVHX1RQU0FNX1AxCQlDUkEoMHg1LDB4MCwweDI2KQkvKiBTYW1wbGVkIHBhdHRlcm4gMSAqLworI2RlZmluZSBSRUdfVFBFUlJfQ05UCQlDUkEoMHg1LDB4MCwweDI3KQkvKiBQYXR0ZXJuIGNoZWNrZXIgZXJyb3IgY291bnRlciAqLworI2RlZmluZSBSRUdfU1BJNF9TVElDS1kJCUNSQSgweDUsMHgwLDB4MzApCS8qIFN0aWNreSBiaXRzIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19TUEk0X0RCR19JTkgJQ1JBKDB4NSwweDAsMHgzMSkJLyogQ29yZSBlZ3Jlc3MgJiBpbmdyZXNzIGluaGliaXQgKi8KKyNkZWZpbmUgUkVHX1NQSTRfREJHX1NUQVRVUwlDUkEoMHg1LDB4MCwweDMyKQkvKiBTYW1wbGVkIGluZ3Jlc3Mgc3RhdHVzICovCisjZGVmaW5lIFJFR19TUEk0X0RCR19HUkFOVAlDUkEoMHg1LDB4MCwweDMzKQkvKiBJbmdyZXNzIGNyYW50ZWQgY3JlZGl0IHZhbHVlICovCisKKyNkZWZpbmUgUkVHX1NQSTRfREVTS0VXIAlDUkEoMHg1LDB4MCwweDQzKQkvKiBJbmdyZXNzIGNyYW50ZWQgY3JlZGl0IHZhbHVlICovCisKKy8qIDEwR2JFIE1BQyBCbG9jayBSZWdpc3RlcnMgKi8KKy8qIE5vdGUgdGhhdCB0aG9zZSByZWdpc3RlcnMgdGhhdCBhcmUgZXhhY3RseSB0aGUgc2FtZSBmb3IgMTBHYkUgYXMgZm9yCisgKiB0cmktc3BlZWQgYXJlIG9ubHkgZGVmaW5lZCB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgbmVlZHMgYSBwb3J0IG51bWJlci4KKyAqIFBhc3MgMHhhIGluIHRob3NlIGNhc2VzLgorICoKKyAqIEFsc28gbm90ZSB0aGF0IGRlc3BpdGUgdGhlIHByZXNlbmNlIG9mIGEgTUFDIGFkZHJlc3MgcmVnaXN0ZXIsIHRoaXMgcGFydAorICogZG9lcyBubyBpbmdyZXNzIE1BQyBhZGRyZXNzIGZpbHRlcmluZy4gIFRoYXQgcmVnaXN0ZXIgaXMgdXNlZCBvbmx5IGZvcgorICogcGF1c2UgZnJhbWUgZGV0ZWN0aW9uIGFuZCBnZW5lcmF0aW9uLgorICovCisvKiAxMEdiRSBzcGVjaWZpYywgYW5kIGRpZmZlcmVudCBmcm9tIHRyaS1zcGVlZCAqLworI2RlZmluZSBSRUdfTUlTQ18xMEcJCUNSQSgweDEsMHhhLDB4MDApCS8qIE1pc2MgMTBHYkUgc2V0dXAgKi8KKyNkZWZpbmUgUkVHX1BBVVNFXzEwRwkJQ1JBKDB4MSwweGEsMHgwMSkJLyogUGF1c2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX05PUk1BTElaRVJfMTBHCUNSQSgweDEsMHhhLDB4MDUpCS8qIDEwRyBub3JtYWxpemVyICovCisjZGVmaW5lIFJFR19TVElDS1lfUlgJCUNSQSgweDEsMHhhLDB4MDYpCS8qIFJYIGRlYnVnIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19ERU5PUk1fMTBHCQlDUkEoMHgxLDB4YSwweDA3KQkvKiBEZW5vcm1hbGl6ZXIgICovCisjZGVmaW5lIFJFR19TVElDS1lfVFgJCUNSQSgweDEsMHhhLDB4MDgpCS8qIFRYIHN0aWNreSBiaXRzICovCisjZGVmaW5lIFJFR19NQVhfUlhISUdICQlDUkEoMHgxLDB4YSwweDBhKQkvKiBYR01JSSBsYW5lIDAtMyBkZWJ1ZyAqLworI2RlZmluZSBSRUdfTUFYX1JYTE9XCQlDUkEoMHgxLDB4YSwweDBiKQkvKiBYR01JSSBsYW5lIDQtNyBkZWJ1ZyAqLworI2RlZmluZSBSRUdfTUFDX1RYX1NUSUNLWQlDUkEoMHgxLDB4YSwweDBjKQkvKiBNQUMgVHggc3RhdGUgc3RpY2t5IGRlYnVnICovCisjZGVmaW5lIFJFR19NQUNfVFhfUlVOTklORwlDUkEoMHgxLDB4YSwweDBkKQkvKiBNQUMgVHggc3RhdGUgcnVubmluZyBkZWJ1ZyAqLworI2RlZmluZSBSRUdfVFhfQUJPUlRfQUdFCUNSQSgweDEsMHhhLDB4MTQpCS8qIEFnZWQgVHggZnJhbWVzIGRpc2NhcmRlZCAqLworI2RlZmluZSBSRUdfVFhfQUJPUlRfU0hPUlQJQ1JBKDB4MSwweGEsMHgxNSkJLyogU2hvcnQgVHggZnJhbWVzIGRpc2NhcmRlZCAqLworI2RlZmluZSBSRUdfVFhfQUJPUlRfVEFYSQlDUkEoMHgxLDB4YSwweDE2KQkvKiBUYXhpIGVycm9yIGZyYW1lcyBkaXNjYXJkZWQgKi8KKyNkZWZpbmUgUkVHX1RYX0FCT1JUX1VOREVSUlVOCUNSQSgweDEsMHhhLDB4MTcpCS8qIFR4IFVuZGVycnVuIGFib3J0IGNvdW50ZXIgKi8KKyNkZWZpbmUgUkVHX1RYX0RFTk9STV9ESVNDQVJECUNSQSgweDEsMHhhLDB4MTgpCS8qIFR4IGRlbm9ybWFsaXplciBkaXNjYXJkcyAqLworI2RlZmluZSBSRUdfWEFVSV9TVEFUX0EJCUNSQSgweDEsMHhhLDB4MjApCS8qIFhBVUkgc3RhdHVzIEEgKi8KKyNkZWZpbmUgUkVHX1hBVUlfU1RBVF9CCQlDUkEoMHgxLDB4YSwweDIxKQkvKiBYQVVJIHN0YXR1cyBCICovCisjZGVmaW5lIFJFR19YQVVJX1NUQVRfQwkJQ1JBKDB4MSwweGEsMHgyMikJLyogWEFVSSBzdGF0dXMgQyAqLworI2RlZmluZSBSRUdfWEFVSV9DT05GX0EJCUNSQSgweDEsMHhhLDB4MjMpCS8qIFhBVUkgY29uZmlndXJhdGlvbiBBICovCisjZGVmaW5lIFJFR19YQVVJX0NPTkZfQgkJQ1JBKDB4MSwweGEsMHgyNCkJLyogWEFVSSBjb25maWd1cmF0aW9uIEIgKi8KKyNkZWZpbmUgUkVHX1hBVUlfQ09ERV9HUlBfQ05UCUNSQSgweDEsMHhhLDB4MjUpCS8qIFhBVUkgY29kZSBncm91cCBlcnJvciBjb3VudCAqLworI2RlZmluZSBSRUdfWEFVSV9DT05GX1RFU1RfQQlDUkEoMHgxLDB4YSwweDI2KQkvKiBYQVVJIHRlc3QgcmVnaXN0ZXIgQSAqLworI2RlZmluZSBSRUdfUERFUlJDTlQJCUNSQSgweDEsMHhhLDB4MjcpCS8qIFhBVUkgdGVzdCByZWdpc3RlciBCICovCisKKy8qIHBuID0gcG9ydCBudW1iZXIgMC05IGZvciB0cmktc3BlZWQsIDEwIGZvciAxMEdiRSAqLworLyogQm90aCB0cmktc3BlZWQgYW5kIDEwR2JFICovCisjZGVmaW5lIFJFR19NQVhfTEVOKHBuKQkJQ1JBKDB4MSxwbiwweDAyKQkvKiBNYXggbGVuZ3RoICovCisjZGVmaW5lIFJFR19NQUNfSElHSF9BRERSKHBuKQlDUkEoMHgxLHBuLDB4MDMpCS8qIFVwcGVyIDI0IGJpdHMgb2YgTUFDIGFkZHIgKi8KKyNkZWZpbmUgUkVHX01BQ19MT1dfQUREUihwbikJQ1JBKDB4MSxwbiwweDA0KQkvKiBMb3dlciAyNCBiaXRzIG9mIE1BQyBhZGRyICovCisKKy8qIHRyaS1zcGVlZCBvbmx5CisgKiBwbiA9IHBvcnQgbnVtYmVyLCAwLTkKKyAqLworI2RlZmluZSBSRUdfTU9ERV9DRkcocG4pCUNSQSgweDEscG4sMHgwMCkJLyogTW9kZSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFJFR19QQVVTRV9DRkcocG4pCUNSQSgweDEscG4sMHgwMSkJLyogUGF1c2UgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBSRUdfTk9STUFMSVpFUihwbikJQ1JBKDB4MSxwbiwweDA1KQkvKiBOb3JtYWxpemVyICovCisjZGVmaW5lIFJFR19UQklfU1RBVFVTKHBuKQlDUkEoMHgxLHBuLDB4MDYpCS8qIFRCSSBzdGF0dXMgKi8KKyNkZWZpbmUgUkVHX1BDU19TVEFUVVNfREJHKHBuKQlDUkEoMHgxLHBuLDB4MDcpCS8qIFBDUyBzdGF0dXMgZGVidWcgKi8KKyNkZWZpbmUgUkVHX1BDU19DVFJMKHBuKQlDUkEoMHgxLHBuLDB4MDgpCS8qIFBDUyBjb250cm9sICovCisjZGVmaW5lIFJFR19UQklfQ09ORklHKHBuKQlDUkEoMHgxLHBuLDB4MDkpCS8qIFRCSSBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFJFR19TVElDS19CSVQocG4pCUNSQSgweDEscG4sMHgwYSkJLyogU3RpY2t5IGJpdHMgKi8KKyNkZWZpbmUgUkVHX0RFVl9TRVRVUChwbikJQ1JBKDB4MSxwbiwweDBiKQkvKiBNQUMgY2xvY2svcmVzZXQgc2V0dXAgKi8KKyNkZWZpbmUgUkVHX0RST1BfQ05UKHBuKQlDUkEoMHgxLHBuLDB4MGMpCS8qIERyb3AgY291bnRlciAqLworI2RlZmluZSBSRUdfUE9SVF9QT1MocG4pCUNSQSgweDEscG4sMHgwZCkJLyogUHJlYW1ibGUgcG9ydCBwb3NpdGlvbiAqLworI2RlZmluZSBSRUdfUE9SVF9GQUlMKHBuKQlDUkEoMHgxLHBuLDB4MGUpCS8qIFByZWFtYmxlIHBvcnQgcG9zaXRpb24gKi8KKyNkZWZpbmUgUkVHX1NFUkRFU19DT05GKHBuKQlDUkEoMHgxLHBuLDB4MGYpCS8qIFNlckRlcyBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIFJFR19TRVJERVNfVEVTVChwbikJQ1JBKDB4MSxwbiwweDEwKQkvKiBTZXJEZXMgdGVzdCAqLworI2RlZmluZSBSRUdfU0VSREVTX1NUQVQocG4pCUNSQSgweDEscG4sMHgxMSkJLyogU2VyRGVzIHN0YXR1cyAqLworI2RlZmluZSBSRUdfU0VSREVTX0NPTV9DTlQocG4pCUNSQSgweDEscG4sMHgxMikJLyogU2VyRGVzIGNvbW1hIGNvdW50ZXIgKi8KKyNkZWZpbmUgUkVHX0RFTk9STShwbikJCUNSQSgweDEscG4sMHgxNSkJLyogRnJhbWUgZGVub3JtYWxpemF0aW9uICovCisjZGVmaW5lIFJFR19EQkcocG4pCQlDUkEoMHgxLHBuLDB4MTYpCS8qIERldmljZSAxRyBkZWJ1ZyAqLworI2RlZmluZSBSRUdfVFhfSUZHKHBuKQkJQ1JBKDB4MSxwbiwweDE4KQkvKiBUeCBJRkcgY29uZmlnICovCisjZGVmaW5lIFJFR19IRFgocG4pCQlDUkEoMHgxLHBuLDB4MTkpCS8qIEhhbGYtZHVwbGV4IGNvbmZpZyAqLworCisvKiBTdGF0aXN0aWNzICovCisvKiBwbiA9IHBvcnQgbnVtYmVyLCAwLWEsIGEgPSAxMEdiRSAqLworI2RlZmluZSBSRUdfUlhfSU5fQllURVMocG4pCUNSQSgweDQscG4sMHgwMCkJLyogIyBSeCBpbiBvY3RldHMgKi8KKyNkZWZpbmUgUkVHX1JYX1NZTUJPTF9DQVJSSUVSKHBuKSBDUkEoMHg0LHBuLDB4MDEpCS8qIEZyYW1lcyB3LyBzeW1ib2wgZXJyb3JzICovCisjZGVmaW5lIFJFR19SWF9QQVVTRShwbikJQ1JBKDB4NCxwbiwweDAyKQkvKiAjIHBhdXNlIGZyYW1lcyByZWNlaXZlZCAqLworI2RlZmluZSBSRUdfUlhfVU5TVVBfT1BDT0RFKHBuKQlDUkEoMHg0LHBuLDB4MDMpCS8qICMgY29udHJvbCBmcmFtZXMgd2l0aCB1bnN1cHBvcnRlZCBvcGNvZGUgKi8KKyNkZWZpbmUgUkVHX1JYX09LX0JZVEVTKHBuKQlDUkEoMHg0LHBuLDB4MDQpCS8qICMgb2N0ZXRzIGluIGdvb2QgZnJhbWVzICovCisjZGVmaW5lIFJFR19SWF9CQURfQllURVMocG4pCUNSQSgweDQscG4sMHgwNSkJLyogIyBvY3RldHMgaW4gYmFkIGZyYW1lcyAqLworI2RlZmluZSBSRUdfUlhfVU5JQ0FTVChwbikJQ1JBKDB4NCxwbiwweDA2KQkvKiAjIGdvb2QgdW5pY2FzdCBmcmFtZXMgKi8KKyNkZWZpbmUgUkVHX1JYX01VTFRJQ0FTVChwbikJQ1JBKDB4NCxwbiwweDA3KQkvKiAjIGdvb2QgbXVsdGljYXN0IGZyYW1lcyAqLworI2RlZmluZSBSRUdfUlhfQlJPQURDQVNUKHBuKQlDUkEoMHg0LHBuLDB4MDgpCS8qICMgZ29vZCBicm9hZGNhc3QgZnJhbWVzICovCisjZGVmaW5lIFJFR19DUkMocG4pCQlDUkEoMHg0LHBuLDB4MDkpCS8qICMgZnJhbWVzIHcvIGJhZCBDUkMgb25seSAqLworI2RlZmluZSBSRUdfUlhfQUxJR05NRU5UKHBuKQlDUkEoMHg0LHBuLDB4MGEpCS8qICMgZnJhbWVzIHcvIGFsaWdubWVudCBlcnIgKi8KKyNkZWZpbmUgUkVHX1JYX1VOREVSU0laRShwbikJQ1JBKDB4NCxwbiwweDBiKQkvKiAjIGZyYW1lcyB1bmRlcnNpemUgKi8KKyNkZWZpbmUgUkVHX1JYX0ZSQUdNRU5UUyhwbikJQ1JBKDB4NCxwbiwweDBjKQkvKiAjIGZyYW1lcyB1bmRlcnNpemUgdy8gY3JjIGVyciAqLworI2RlZmluZSBSRUdfUlhfSU5fUkFOR0VfTEVOR1RIX0VSUk9SKHBuKSBDUkEoMHg0LHBuLDB4MGQpCS8qICMgZnJhbWVzIHdpdGggbGVuZ3RoIGVycm9yICovCisjZGVmaW5lIFJFR19SWF9PVVRfT0ZfUkFOR0VfRVJST1IocG4pIENSQSgweDQscG4sMHgwZSkJLyogIyBmcmFtZXMgd2l0aCBpbGxlZ2FsIGxlbmd0aCBmaWVsZCAqLworI2RlZmluZSBSRUdfUlhfT1ZFUlNJWkUocG4pCUNSQSgweDQscG4sMHgwZikJLyogIyBmcmFtZXMgb3ZlcnNpemUgKi8KKyNkZWZpbmUgUkVHX1JYX0pBQkJFUlMocG4pCUNSQSgweDQscG4sMHgxMCkJLyogIyBmcmFtZXMgb3ZlcnNpemUgdy8gY3JjIGVyciAqLworI2RlZmluZSBSRUdfUlhfU0laRV82NChwbikJQ1JBKDB4NCxwbiwweDExKQkvKiAjIGZyYW1lcyA2NCBvY3RldHMgbG9uZyAqLworI2RlZmluZSBSRUdfUlhfU0laRV82NV9UT18xMjcocG4pIENSQSgweDQscG4sMHgxMikJLyogIyBmcmFtZXMgNjUtMTI3IG9jdGV0cyAqLworI2RlZmluZSBSRUdfUlhfU0laRV8xMjhfVE9fMjU1KHBuKSBDUkEoMHg0LHBuLDB4MTMpCS8qICMgZnJhbWVzIDEyOC0yNTUgKi8KKyNkZWZpbmUgUkVHX1JYX1NJWkVfMjU2X1RPXzUxMShwbikgQ1JBKDB4NCxwbiwweDE0KQkvKiAjIGZyYW1lcyAyNTYtNTExICovCisjZGVmaW5lIFJFR19SWF9TSVpFXzUxMl9UT18xMDIzKHBuKSBDUkEoMHg0LHBuLDB4MTUpCS8qICMgZnJhbWVzIDUxMi0xMDIzICovCisjZGVmaW5lIFJFR19SWF9TSVpFXzEwMjRfVE9fMTUxOChwbikgQ1JBKDB4NCxwbiwweDE2KQkvKiAjIGZyYW1lcyAxMDI0LTE1MTggKi8KKyNkZWZpbmUgUkVHX1JYX1NJWkVfMTUxOV9UT19NQVgocG4pIENSQSgweDQscG4sMHgxNykJLyogIyBmcmFtZXMgMTUxOS1tYXggKi8KKworI2RlZmluZSBSRUdfVFhfT1VUX0JZVEVTKHBuKQlDUkEoMHg0LHBuLDB4MTgpCS8qICMgb2N0ZXRzIHR4ICovCisjZGVmaW5lIFJFR19UWF9QQVVTRShwbikJQ1JBKDB4NCxwbiwweDE5KQkvKiAjIHBhdXNlIGZyYW1lcyBzZW50ICovCisjZGVmaW5lIFJFR19UWF9PS19CWVRFUyhwbikJQ1JBKDB4NCxwbiwweDFhKQkvKiAjIG9jdGV0cyB0eCBPSyAqLworI2RlZmluZSBSRUdfVFhfVU5JQ0FTVChwbikJQ1JBKDB4NCxwbiwweDFiKQkvKiAjIGZyYW1lcyB1bmljYXN0ICovCisjZGVmaW5lIFJFR19UWF9NVUxUSUNBU1QocG4pCUNSQSgweDQscG4sMHgxYykJLyogIyBmcmFtZXMgbXVsdGljYXN0ICovCisjZGVmaW5lIFJFR19UWF9CUk9BRENBU1QocG4pCUNSQSgweDQscG4sMHgxZCkJLyogIyBmcmFtZXMgYnJvYWRjYXN0ICovCisjZGVmaW5lIFJFR19UWF9NVUxUSVBMRV9DT0xMKHBuKSBDUkEoMHg0LHBuLDB4MWUpCS8qICMgZnJhbWVzIHR4IGFmdGVyIG11bHRpcGxlIGNvbGxpc2lvbnMgKi8KKyNkZWZpbmUgUkVHX1RYX0xBVEVfQ09MTChwbikJQ1JBKDB4NCxwbiwweDFmKQkvKiAjIGxhdGUgY29sbGlzaW9ucyBkZXRlY3RlZCAqLworI2RlZmluZSBSRUdfVFhfWENPTEwocG4pCUNSQSgweDQscG4sMHgyMCkJLyogIyBmcmFtZXMgbG9zdCwgZXhjZXNzaXZlIGNvbGxpc2lvbnMgKi8KKyNkZWZpbmUgUkVHX1RYX0RFRkVSKHBuKQlDUkEoMHg0LHBuLDB4MjEpCS8qICMgZnJhbWVzIGRlZmVycmVkIG9uIGZpcnN0IHR4IGF0dGVtcHQgKi8KKyNkZWZpbmUgUkVHX1RYX1hERUZFUihwbikJQ1JBKDB4NCxwbiwweDIyKQkvKiAjIGZyYW1lcyBleGNlc3NpdmVseSBkZWZlcnJlZCAqLworI2RlZmluZSBSRUdfVFhfQ1NFTlNFKHBuKQlDUkEoMHg0LHBuLDB4MjMpCS8qIGNhcnJpZXIgc2Vuc2UgZXJyb3JzIGF0IGZyYW1lIGVuZCAqLworI2RlZmluZSBSRUdfVFhfU0laRV82NChwbikJQ1JBKDB4NCxwbiwweDI0KQkvKiAjIGZyYW1lcyA2NCBvY3RldHMgbG9uZyAqLworI2RlZmluZSBSRUdfVFhfU0laRV82NV9UT18xMjcocG4pIENSQSgweDQscG4sMHgyNSkJLyogIyBmcmFtZXMgNjUtMTI3IG9jdGV0cyAqLworI2RlZmluZSBSRUdfVFhfU0laRV8xMjhfVE9fMjU1KHBuKSBDUkEoMHg0LHBuLDB4MjYpCS8qICMgZnJhbWVzIDEyOC0yNTUgKi8KKyNkZWZpbmUgUkVHX1RYX1NJWkVfMjU2X1RPXzUxMShwbikgQ1JBKDB4NCxwbiwweDI3KQkvKiAjIGZyYW1lcyAyNTYtNTExICovCisjZGVmaW5lIFJFR19UWF9TSVpFXzUxMl9UT18xMDIzKHBuKSBDUkEoMHg0LHBuLDB4MjgpCS8qICMgZnJhbWVzIDUxMi0xMDIzICovCisjZGVmaW5lIFJFR19UWF9TSVpFXzEwMjRfVE9fMTUxOChwbikgQ1JBKDB4NCxwbiwweDI5KQkvKiAjIGZyYW1lcyAxMDI0LTE1MTggKi8KKyNkZWZpbmUgUkVHX1RYX1NJWkVfMTUxOV9UT19NQVgocG4pIENSQSgweDQscG4sMHgyYSkJLyogIyBmcmFtZXMgMTUxOS1tYXggKi8KKyNkZWZpbmUgUkVHX1RYX1NJTkdMRV9DT0xMKHBuKQlDUkEoMHg0LHBuLDB4MmIpCS8qICMgZnJhbWVzIHR4IGFmdGVyIHNpbmdsZSBjb2xsaXNpb24gKi8KKyNkZWZpbmUgUkVHX1RYX0JBQ0tPRkYyKHBuKQlDUkEoMHg0LHBuLDB4MmMpCS8qICMgZnJhbWVzIHR4IG9rIGFmdGVyIDIgYmFja29mZnMvY29sbGlzaW9ucyAqLworI2RlZmluZSBSRUdfVFhfQkFDS09GRjMocG4pCUNSQSgweDQscG4sMHgyZCkJLyogICBhZnRlciAzIGJhY2tvZmZzL2NvbGxpc2lvbnMgKi8KKyNkZWZpbmUgUkVHX1RYX0JBQ0tPRkY0KHBuKQlDUkEoMHg0LHBuLDB4MmUpCS8qICAgYWZ0ZXIgNCAqLworI2RlZmluZSBSRUdfVFhfQkFDS09GRjUocG4pCUNSQSgweDQscG4sMHgyZikJLyogICBhZnRlciA1ICovCisjZGVmaW5lIFJFR19UWF9CQUNLT0ZGNihwbikJQ1JBKDB4NCxwbiwweDMwKQkvKiAgIGFmdGVyIDYgKi8KKyNkZWZpbmUgUkVHX1RYX0JBQ0tPRkY3KHBuKQlDUkEoMHg0LHBuLDB4MzEpCS8qICAgYWZ0ZXIgNyAqLworI2RlZmluZSBSRUdfVFhfQkFDS09GRjgocG4pCUNSQSgweDQscG4sMHgzMikJLyogICBhZnRlciA4ICovCisjZGVmaW5lIFJFR19UWF9CQUNLT0ZGOShwbikJQ1JBKDB4NCxwbiwweDMzKQkvKiAgIGFmdGVyIDkgKi8KKyNkZWZpbmUgUkVHX1RYX0JBQ0tPRkYxMChwbikJQ1JBKDB4NCxwbiwweDM0KQkvKiAgIGFmdGVyIDEwICovCisjZGVmaW5lIFJFR19UWF9CQUNLT0ZGMTEocG4pCUNSQSgweDQscG4sMHgzNSkJLyogICBhZnRlciAxMSAqLworI2RlZmluZSBSRUdfVFhfQkFDS09GRjEyKHBuKQlDUkEoMHg0LHBuLDB4MzYpCS8qICAgYWZ0ZXIgMTIgKi8KKyNkZWZpbmUgUkVHX1RYX0JBQ0tPRkYxMyhwbikJQ1JBKDB4NCxwbiwweDM3KQkvKiAgIGFmdGVyIDEzICovCisjZGVmaW5lIFJFR19UWF9CQUNLT0ZGMTQocG4pCUNSQSgweDQscG4sMHgzOCkJLyogICBhZnRlciAxNCAqLworI2RlZmluZSBSRUdfVFhfQkFDS09GRjE1KHBuKQlDUkEoMHg0LHBuLDB4MzkpCS8qICAgYWZ0ZXIgMTUgKi8KKyNkZWZpbmUgUkVHX1RYX1VOREVSUlVOKHBuKQlDUkEoMHg0LHBuLDB4M2EpCS8qICMgZnJhbWVzIGRyb3BwZWQgZnJvbSB1bmRlcnJ1biAqLworI2RlZmluZSBSRUdfUlhfWEdNSUlfUFJPVF9FUlIJQ1JBKDB4NCwweGEsMHgzYikJLyogIyBwcm90b2NvbCBlcnJvcnMgZGV0ZWN0ZWQgb24gWEdNSUkgaW50ZXJmYWNlICovCisjZGVmaW5lIFJFR19SWF9JUEdfU0hSSU5LKHBuKQlDUkEoMHg0LHBuLDB4M2MpCS8qICMgb2YgSVBHIHNocmlua3MgZGV0ZWN0ZWQgKi8KKworI2RlZmluZSBSRUdfU1RBVF9TVElDS1kxRyhwbikJQ1JBKDB4NCxwbiwweDNlKQkvKiB0cmktc3BlZWQgc3RpY2t5IGJpdHMgKi8KKyNkZWZpbmUgUkVHX1NUQVRfU1RJQ0tZMTBHCUNSQSgweDQsMHhhLDB4M2UpCS8qIDEwR2JFIHN0aWNreSBiaXRzICovCisjZGVmaW5lIFJFR19TVEFUX0lOSVQocG4pCUNSQSgweDQscG4sMHgzZikJLyogQ2xlYXIgYWxsIHN0YXRpc3RpY3MgKi8KKworLyogTUlJLU1hbmFnZW1lbnQgQmxvY2sgcmVnaXN0ZXJzICovCisvKiBUaGVzZSBhcmUgZm9yIE1JSS1NIGludGVyZmFjZSAwLCB3aGljaCBpcyB0aGUgYmlkaXJlY3Rpb25hbCBMVlRUTCBvbmUuICBJZgorICogd2UgaG9va2VkIHVwIHRvIHRoZSBvbmUgd2l0aCBzZXBhcmF0ZSBkaXJlY3Rpb25zLCB0aGUgbWlkZGxlIDB4MCBuZWVkcyB0bworICogY2hhbmdlIHRvIDB4MS4gIEFuZCB0aGUgY3VycmVudCBlcnJhdGEgc3RhdGVzIHRoYXQgTUlJLU0gMSBkb2Vzbid0IHdvcmsuCisgKi8KKworI2RlZmluZSBSRUdfTUlJTV9TVEFUVVMJCUNSQSgweDMsMHgwLDB4MDApCS8qIE1JSS1NIFN0YXR1cyAqLworI2RlZmluZSBSRUdfTUlJTV9DTUQJCUNSQSgweDMsMHgwLDB4MDEpCS8qIE1JSS1NIENvbW1hbmQgKi8KKyNkZWZpbmUgUkVHX01JSU1fREFUQQkJQ1JBKDB4MywweDAsMHgwMikJLyogTUlJLU0gRGF0YSAqLworI2RlZmluZSBSRUdfTUlJTV9QUkVTQ0FMRQlDUkEoMHgzLDB4MCwweDAzKQkvKiBNSUktTSBNREMgUHJlc2NhbGUgKi8KKworI2RlZmluZSBSRUdfSU5HX0ZGSUxUX1VNX0VOCUNSQSgweDIsIDAsIDB4ZCkKKyNkZWZpbmUgUkVHX0lOR19GRklMVF9CRV9FTglDUkEoMHgyLCAwLCAweDFkKQorI2RlZmluZSBSRUdfSU5HX0ZGSUxUX1ZBTDAJQ1JBKDB4MiwgMCwgMHgyZCkKKyNkZWZpbmUgUkVHX0lOR19GRklMVF9WQUwxCUNSQSgweDIsIDAsIDB4M2QpCisjZGVmaW5lIFJFR19JTkdfRkZJTFRfTUFTSzAJQ1JBKDB4MiwgMCwgMHg0ZCkKKyNkZWZpbmUgUkVHX0lOR19GRklMVF9NQVNLMQlDUkEoMHgyLCAwLCAweDVkKQorI2RlZmluZSBSRUdfSU5HX0ZGSUxUX01BU0syCUNSQSgweDIsIDAsIDB4NmQpCisjZGVmaW5lIFJFR19JTkdfRkZJTFRfRVRZUEUJQ1JBKDB4MiwgMCwgMHg3ZCkKKworCisvKiBXaGV3LiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjODI0NC5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby92c2M4MjQ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ5M2U3OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjODI0NC5jCkBAIC0wLDAgKzEsMzY4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENoZWxzaW8gVDIgRXRoZXJuZXQgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBDaGVsc2lvIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbmNsdWRlZCBpbiB0aGlzCisgKiByZWxlYXNlIGZvciBsaWNlbnNpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImNwaHkuaCIKKyNpbmNsdWRlICJlbG1lcjAuaCIKKworI2lmbmRlZiBBRFZFUlRJU0VfUEFVU0VfQ0FQCisjIGRlZmluZSBBRFZFUlRJU0VfUEFVU0VfQ0FQIDB4NDAwCisjZW5kaWYKKyNpZm5kZWYgQURWRVJUSVNFX1BBVVNFX0FTWU0KKyMgZGVmaW5lIEFEVkVSVElTRV9QQVVTRV9BU1lNIDB4ODAwCisjZW5kaWYKKworLyogR2lnYWJpdCBNSUkgcmVnaXN0ZXJzICovCisjaWZuZGVmIE1JSV9DVFJMMTAwMAorIyBkZWZpbmUgTUlJX0NUUkwxMDAwIDkKKyNlbmRpZgorCisjaWZuZGVmIEFEVkVSVElTRV8xMDAwRlVMTAorIyBkZWZpbmUgQURWRVJUSVNFXzEwMDBGVUxMIDB4MjAwCisjIGRlZmluZSBBRFZFUlRJU0VfMTAwMEhBTEYgMHgxMDAKKyNlbmRpZgorCisvKiBWU0M4MjQ0IFBIWSBzcGVjaWZpYyByZWdpc3RlcnMuICovCitlbnVtIHsKKwlWU0M4MjQ0X0lOVFJfRU5BQkxFICAgPSAyNSwKKwlWU0M4MjQ0X0lOVFJfU1RBVFVTICAgPSAyNiwKKwlWU0M4MjQ0X0FVWF9DVFJMX1NUQVQgPSAyOCwKK307CisKK2VudW0geworCVZTQ19JTlRSX1JYX0VSUiAgICAgPSAxIDw8IDAsCisJVlNDX0lOVFJfTVNfRVJSICAgICA9IDEgPDwgMSwgIC8qIG1hc3Rlci9zbGF2ZSByZXNvbHV0aW9uIGVycm9yICovCisJVlNDX0lOVFJfQ0FCTEUgICAgICA9IDEgPDwgMiwgIC8qIGNhYmxlIGltcGFpcm1lbnQgKi8KKwlWU0NfSU5UUl9GQUxTRV9DQVJSID0gMSA8PCAzLCAgLyogZmFsc2UgY2FycmllciAqLworCVZTQ19JTlRSX01FRElBX0NIRyAgPSAxIDw8IDQsICAvKiBBTVMgbWVkaWEgY2hhbmdlICovCisJVlNDX0lOVFJfUlhfRklGTyAgICA9IDEgPDwgNSwgIC8qIFJ4IEZJRk8gb3Zlci91bmRlcmZsb3cgKi8KKwlWU0NfSU5UUl9UWF9GSUZPICAgID0gMSA8PCA2LCAgLyogVHggRklGTyBvdmVyL3VuZGVyZmxvdyAqLworCVZTQ19JTlRSX0RFU0NSQU1CTCAgPSAxIDw8IDcsICAvKiBkZXNjcmFtYmxlciBsb2NrLWxvc3QgKi8KKwlWU0NfSU5UUl9TWU1CT0xfRVJSID0gMSA8PCA4LCAgLyogc3ltYm9sIGVycm9yICovCisJVlNDX0lOVFJfTkVHX0RPTkUgICA9IDEgPDwgMTAsIC8qIGF1dG9uZWcgZG9uZSAqLworCVZTQ19JTlRSX05FR19FUlIgICAgPSAxIDw8IDExLCAvKiBhdXRvbmVnIGVycm9yICovCisJVlNDX0lOVFJfTElOS19DSEcgICA9IDEgPDwgMTMsIC8qIGxpbmsgY2hhbmdlICovCisJVlNDX0lOVFJfRU5BQkxFICAgICA9IDEgPDwgMTUsIC8qIGludGVycnVwdCBlbmFibGUgKi8KK307CisKKyNkZWZpbmUgQ0ZHX0NIR19JTlRSX01BU0sgKFZTQ19JTlRSX0xJTktfQ0hHIHwgVlNDX0lOVFJfTkVHX0VSUiB8IFwKKwkgCQkgICBWU0NfSU5UUl9ORUdfRE9ORSkKKyNkZWZpbmUgSU5UUl9NQVNLIChDRkdfQ0hHX0lOVFJfTUFTSyB8IFZTQ19JTlRSX1RYX0ZJRk8gfCBWU0NfSU5UUl9SWF9GSUZPIHwgXAorCQkgICBWU0NfSU5UUl9FTkFCTEUpCisKKy8qIFBIWSBzcGVjaWZpYyBhdXhpbGlhcnkgY29udHJvbCAmIHN0YXR1cyByZWdpc3RlciBmaWVsZHMgKi8KKyNkZWZpbmUgU19BQ1NSX0FDVElQSFlfVE1SICAgIDAKKyNkZWZpbmUgTV9BQ1NSX0FDVElQSFlfVE1SICAgIDB4MworI2RlZmluZSBWX0FDU1JfQUNUSVBIWV9UTVIoeCkgKCh4KSA8PCBTX0FDU1JfQUNUSVBIWV9UTVIpCisKKyNkZWZpbmUgU19BQ1NSX1NQRUVEICAgIDMKKyNkZWZpbmUgTV9BQ1NSX1NQRUVEICAgIDB4MworI2RlZmluZSBHX0FDU1JfU1BFRUQoeCkgKCgoeCkgPj4gU19BQ1NSX1NQRUVEKSAmIE1fQUNTUl9TUEVFRCkKKworI2RlZmluZSBTX0FDU1JfRFVQTEVYIDUKKyNkZWZpbmUgRl9BQ1NSX0RVUExFWCAoMSA8PCBTX0FDU1JfRFVQTEVYKQorCisjZGVmaW5lIFNfQUNTUl9BQ1RJUEhZIDYKKyNkZWZpbmUgRl9BQ1NSX0FDVElQSFkgKDEgPDwgU19BQ1NSX0FDVElQSFkpCisKKy8qCisgKiBSZXNldCB0aGUgUEhZLiAgVGhpcyBQSFkgY29tcGxldGVzIHJlc2V0IGltbWVkaWF0ZWx5IHNvIHdlIG5ldmVyIHdhaXQuCisgKi8KK3N0YXRpYyBpbnQgdnNjODI0NF9yZXNldChzdHJ1Y3QgY3BoeSAqY3BoeSwgaW50IHdhaXQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgY3RsOworCisJZXJyID0gc2ltcGxlX21kaW9fcmVhZChjcGh5LCBNSUlfQk1DUiwgJmN0bCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWN0bCAmPSB+Qk1DUl9QRE9XTjsKKwljdGwgfD0gQk1DUl9SRVNFVDsKKwlyZXR1cm4gc2ltcGxlX21kaW9fd3JpdGUoY3BoeSwgTUlJX0JNQ1IsIGN0bCk7Cit9CisKK3N0YXRpYyBpbnQgdnNjODI0NF9pbnRyX2VuYWJsZShzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwlzaW1wbGVfbWRpb193cml0ZShjcGh5LCBWU0M4MjQ0X0lOVFJfRU5BQkxFLCBJTlRSX01BU0spOworCisgICAgLyogRW5hYmxlIGludGVycnVwdHMgdGhyb3VnaCBFbG1lciAqLworCWlmICh0MV9pc19hc2ljKGNwaHktPmFkYXB0ZXIpKSB7CisJCXUzMiBlbG1lcjsKKworCQl0MV90cGlfcmVhZChjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9JTlRfRU5BQkxFLCAmZWxtZXIpOworCQllbG1lciB8PSBFTE1FUjBfR1BfQklUMTsKKwkJaWYgKGlzX1QyKGNwaHktPmFkYXB0ZXIpKSB7CisJCSAgICBlbG1lciB8PSBFTE1FUjBfR1BfQklUMnxFTE1FUjBfR1BfQklUM3xFTE1FUjBfR1BfQklUNDsKKyAgICAgICAgICAgICAgICB9CisJCXQxX3RwaV93cml0ZShjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9JTlRfRU5BQkxFLCBlbG1lcik7CisJfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnNjODI0NF9pbnRyX2Rpc2FibGUoc3RydWN0IGNwaHkgKmNwaHkpCit7CisJc2ltcGxlX21kaW9fd3JpdGUoY3BoeSwgVlNDODI0NF9JTlRSX0VOQUJMRSwgMCk7CisKKwlpZiAodDFfaXNfYXNpYyhjcGh5LT5hZGFwdGVyKSkgeworCQl1MzIgZWxtZXI7CisKKwkJdDFfdHBpX3JlYWQoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0VOQUJMRSwgJmVsbWVyKTsKKwkJZWxtZXIgJj0gfkVMTUVSMF9HUF9CSVQxOworCQlpZiAoaXNfVDIoY3BoeS0+YWRhcHRlcikpIHsKKwkJICAgIGVsbWVyICY9IH4oRUxNRVIwX0dQX0JJVDJ8RUxNRVIwX0dQX0JJVDN8RUxNRVIwX0dQX0JJVDQpOworICAgICAgICAgICAgICAgIH0KKwkJdDFfdHBpX3dyaXRlKGNwaHktPmFkYXB0ZXIsIEFfRUxNRVIwX0lOVF9FTkFCTEUsIGVsbWVyKTsKKwl9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c2M4MjQ0X2ludHJfY2xlYXIoc3RydWN0IGNwaHkgKmNwaHkpCit7CisJdTMyIHZhbDsKKyAgICB1MzIgZWxtZXI7CisKKwkvKiBDbGVhciBQSFkgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSByZWdpc3Rlci4gKi8KKwlzaW1wbGVfbWRpb19yZWFkKGNwaHksIFZTQzgyNDRfSU5UUl9FTkFCTEUsICZ2YWwpOworCisJaWYgKHQxX2lzX2FzaWMoY3BoeS0+YWRhcHRlcikpIHsKKwkJdDFfdHBpX3JlYWQoY3BoeS0+YWRhcHRlciwgQV9FTE1FUjBfSU5UX0NBVVNFLCAmZWxtZXIpOworCQllbG1lciB8PSBFTE1FUjBfR1BfQklUMTsKKwkJaWYgKGlzX1QyKGNwaHktPmFkYXB0ZXIpKSB7CisJCSAgICBlbG1lciB8PSBFTE1FUjBfR1BfQklUMnxFTE1FUjBfR1BfQklUM3xFTE1FUjBfR1BfQklUNDsKKyAgICAgICAgICAgICAgICB9CisJCXQxX3RwaV93cml0ZShjcGh5LT5hZGFwdGVyLCBBX0VMTUVSMF9JTlRfQ0FVU0UsIGVsbWVyKTsKKwl9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEZvcmNlIHRoZSBQSFkgc3BlZWQgYW5kIGR1cGxleC4gIFRoaXMgYWxzbyBkaXNhYmxlcyBhdXRvLW5lZ290aWF0aW9uLCBleGNlcHQKKyAqIGZvciAxR2Ivcywgd2hlcmUgYXV0by1uZWdvdGlhdGlvbiBpcyBtYW5kYXRvcnkuCisgKi8KK3N0YXRpYyBpbnQgdnNjODI0NF9zZXRfc3BlZWRfZHVwbGV4KHN0cnVjdCBjcGh5ICpwaHksIGludCBzcGVlZCwgaW50IGR1cGxleCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBjdGw7CisKKwllcnIgPSBzaW1wbGVfbWRpb19yZWFkKHBoeSwgTUlJX0JNQ1IsICZjdGwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoc3BlZWQgPj0gMCkgeworCQljdGwgJj0gfihCTUNSX1NQRUVEMTAwIHwgQk1DUl9TUEVFRDEwMDAgfCBCTUNSX0FORU5BQkxFKTsKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKKwkJCWN0bCB8PSBCTUNSX1NQRUVEMTAwOworCQllbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKQorCQkJY3RsIHw9IEJNQ1JfU1BFRUQxMDAwOworCX0KKwlpZiAoZHVwbGV4ID49IDApIHsKKwkJY3RsICY9IH4oQk1DUl9GVUxMRFBMWCB8IEJNQ1JfQU5FTkFCTEUpOworCQlpZiAoZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJY3RsIHw9IEJNQ1JfRlVMTERQTFg7CisJfQorCWlmIChjdGwgJiBCTUNSX1NQRUVEMTAwMCkgIC8qIGF1dG8tbmVnb3RpYXRpb24gcmVxdWlyZWQgZm9yIDFHYi9zICovCisJCWN0bCB8PSBCTUNSX0FORU5BQkxFOworCXJldHVybiBzaW1wbGVfbWRpb193cml0ZShwaHksIE1JSV9CTUNSLCBjdGwpOworfQorCitpbnQgdDFfbWRpb19zZXRfYml0cyhzdHJ1Y3QgY3BoeSAqcGh5LCBpbnQgbW1kLCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgYml0cykKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGludCB2YWw7CisKKyAgICByZXQgPSBtZGlvX3JlYWQocGh5LCBtbWQsIHJlZywgJnZhbCk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldCA9IG1kaW9fd3JpdGUocGh5LCBtbWQsIHJlZywgdmFsIHwgYml0cyk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2c2M4MjQ0X2F1dG9uZWdfZW5hYmxlKHN0cnVjdCBjcGh5ICpjcGh5KQoreworCXJldHVybiB0MV9tZGlvX3NldF9iaXRzKGNwaHksIDAsIE1JSV9CTUNSLAorCQkJCUJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7Cit9CisKK3N0YXRpYyBpbnQgdnNjODI0NF9hdXRvbmVnX3Jlc3RhcnQoc3RydWN0IGNwaHkgKmNwaHkpCit7CisJcmV0dXJuIHQxX21kaW9fc2V0X2JpdHMoY3BoeSwgMCwgTUlJX0JNQ1IsIEJNQ1JfQU5SRVNUQVJUKTsKK30KKworc3RhdGljIGludCB2c2M4MjQ0X2FkdmVydGlzZShzdHJ1Y3QgY3BoeSAqcGh5LCB1bnNpZ25lZCBpbnQgYWR2ZXJ0aXNlX21hcCkKK3sKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCB2YWwgPSAwOworCisJZXJyID0gc2ltcGxlX21kaW9fcmVhZChwaHksIE1JSV9DVFJMMTAwMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXZhbCAmPSB+KEFEVkVSVElTRV8xMDAwSEFMRiB8IEFEVkVSVElTRV8xMDAwRlVMTCk7CisJaWYgKGFkdmVydGlzZV9tYXAgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKQorCQl2YWwgfD0gQURWRVJUSVNFXzEwMDBIQUxGOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKKwkJdmFsIHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKKworCWVyciA9IHNpbXBsZV9tZGlvX3dyaXRlKHBoeSwgTUlJX0NUUkwxMDAwLCB2YWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl2YWwgPSAxOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYpCisJCXZhbCB8PSBBRFZFUlRJU0VfMTBIQUxGOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpCisJCXZhbCB8PSBBRFZFUlRJU0VfMTBGVUxMOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmKQorCQl2YWwgfD0gQURWRVJUSVNFXzEwMEhBTEY7CisJaWYgKGFkdmVydGlzZV9tYXAgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwpCisJCXZhbCB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwlpZiAoYWR2ZXJ0aXNlX21hcCAmIEFEVkVSVElTRURfUEFVU0UpCisJCXZhbCB8PSBBRFZFUlRJU0VfUEFVU0VfQ0FQOworCWlmIChhZHZlcnRpc2VfbWFwICYgQURWRVJUSVNFRF9BU1lNX1BBVVNFKQorCQl2YWwgfD0gQURWRVJUSVNFX1BBVVNFX0FTWU07CisJcmV0dXJuIHNpbXBsZV9tZGlvX3dyaXRlKHBoeSwgTUlJX0FEVkVSVElTRSwgdmFsKTsKK30KKworc3RhdGljIGludCB2c2M4MjQ0X2dldF9saW5rX3N0YXR1cyhzdHJ1Y3QgY3BoeSAqY3BoeSwgaW50ICpsaW5rX29rLAorCQkJCSAgICAgaW50ICpzcGVlZCwgaW50ICpkdXBsZXgsIGludCAqZmMpCit7CisJdW5zaWduZWQgaW50IGJtY3IsIHN0YXR1cywgbHBhLCBhZHY7CisJaW50IGVyciwgc3AgPSAtMSwgZHBseCA9IC0xLCBwYXVzZSA9IDA7CisKKwllcnIgPSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIE1JSV9CTUNSLCAmYm1jcik7CisJaWYgKCFlcnIpCisJCWVyciA9IHNpbXBsZV9tZGlvX3JlYWQoY3BoeSwgTUlJX0JNU1IsICZzdGF0dXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobGlua19vaykgeworCQkvKgorCQkgKiBCTVNSX0xTVEFUVVMgaXMgbGF0Y2gtbG93LCBzbyBpZiBpdCBpcyAwIHdlIG5lZWQgdG8gcmVhZCBpdAorCQkgKiBvbmNlIG1vcmUgdG8gZ2V0IHRoZSBjdXJyZW50IGxpbmsgc3RhdGUuCisJCSAqLworCQlpZiAoIShzdGF0dXMgJiBCTVNSX0xTVEFUVVMpKQorCQkJZXJyID0gc2ltcGxlX21kaW9fcmVhZChjcGh5LCBNSUlfQk1TUiwgJnN0YXR1cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQkqbGlua19vayA9IChzdGF0dXMgJiBCTVNSX0xTVEFUVVMpICE9IDA7CisJfQorCWlmICghKGJtY3IgJiBCTUNSX0FORU5BQkxFKSkgeworCQlkcGx4ID0gKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJCWlmIChibWNyICYgQk1DUl9TUEVFRDEwMDApCisJCQlzcCA9IFNQRUVEXzEwMDA7CisJCWVsc2UgaWYgKGJtY3IgJiBCTUNSX1NQRUVEMTAwKQorCQkJc3AgPSBTUEVFRF8xMDA7CisJCWVsc2UKKwkJCXNwID0gU1BFRURfMTA7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBCTVNSX0FORUdDT01QTEVURSkgeworCQllcnIgPSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIFZTQzgyNDRfQVVYX0NUUkxfU1RBVCwgJnN0YXR1cyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWRwbHggPSAoc3RhdHVzICYgRl9BQ1NSX0RVUExFWCkgPyBEVVBMRVhfRlVMTCA6IERVUExFWF9IQUxGOworCQlzcCA9IEdfQUNTUl9TUEVFRChzdGF0dXMpOworCQlpZiAoc3AgPT0gMCkKKwkJCXNwID0gU1BFRURfMTA7CisJCWVsc2UgaWYgKHNwID09IDEpCisJCQlzcCA9IFNQRUVEXzEwMDsKKwkJZWxzZQorCQkJc3AgPSBTUEVFRF8xMDAwOworCisJCWlmIChmYyAmJiBkcGx4ID09IERVUExFWF9GVUxMKSB7CisJCQllcnIgPSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIE1JSV9MUEEsICZscGEpOworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gc2ltcGxlX21kaW9fcmVhZChjcGh5LCBNSUlfQURWRVJUSVNFLAorCQkJCQkJICAgICAgICZhZHYpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQlpZiAobHBhICYgYWR2ICYgQURWRVJUSVNFX1BBVVNFX0NBUCkKKwkJCQlwYXVzZSA9IFBBVVNFX1JYIHwgUEFVU0VfVFg7CisJCQllbHNlIGlmICgobHBhICYgQURWRVJUSVNFX1BBVVNFX0NBUCkgJiYKKwkJCQkgKGxwYSAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKSAmJgorCQkJCSAoYWR2ICYgQURWRVJUSVNFX1BBVVNFX0FTWU0pKQorCQkJCXBhdXNlID0gUEFVU0VfVFg7CisJCQllbHNlIGlmICgobHBhICYgQURWRVJUSVNFX1BBVVNFX0FTWU0pICYmCisJCQkJIChhZHYgJiBBRFZFUlRJU0VfUEFVU0VfQ0FQKSkKKwkJCQlwYXVzZSA9IFBBVVNFX1JYOworCQl9CisJfQorCWlmIChzcGVlZCkKKwkJKnNwZWVkID0gc3A7CisJaWYgKGR1cGxleCkKKwkJKmR1cGxleCA9IGRwbHg7CisJaWYgKGZjKQorCQkqZmMgPSBwYXVzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2c2M4MjQ0X2ludHJfaGFuZGxlcihzdHJ1Y3QgY3BoeSAqY3BoeSkKK3sKKwl1bnNpZ25lZCBpbnQgY2F1c2U7CisJaW50IGVyciwgY3BoeV9jYXVzZSA9IDA7CisKKwllcnIgPSBzaW1wbGVfbWRpb19yZWFkKGNwaHksIFZTQzgyNDRfSU5UUl9TVEFUVVMsICZjYXVzZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNhdXNlICY9IElOVFJfTUFTSzsKKwlpZiAoY2F1c2UgJiBDRkdfQ0hHX0lOVFJfTUFTSykKKwkJY3BoeV9jYXVzZSB8PSBjcGh5X2NhdXNlX2xpbmtfY2hhbmdlOworCWlmIChjYXVzZSAmIChWU0NfSU5UUl9SWF9GSUZPIHwgVlNDX0lOVFJfVFhfRklGTykpCisJCWNwaHlfY2F1c2UgfD0gY3BoeV9jYXVzZV9maWZvX2Vycm9yOworCXJldHVybiBjcGh5X2NhdXNlOworfQorCitzdGF0aWMgdm9pZCB2c2M4MjQ0X2Rlc3Ryb3koc3RydWN0IGNwaHkgKmNwaHkpCit7CisJa2ZyZWUoY3BoeSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3BoeV9vcHMgdnNjODI0NF9vcHMgPSB7CisJLmRlc3Ryb3kgICAgICAgICAgICAgID0gdnNjODI0NF9kZXN0cm95LAorCS5yZXNldCAgICAgICAgICAgICAgICA9IHZzYzgyNDRfcmVzZXQsCisJLmludGVycnVwdF9lbmFibGUgICAgID0gdnNjODI0NF9pbnRyX2VuYWJsZSwKKwkuaW50ZXJydXB0X2Rpc2FibGUgICAgPSB2c2M4MjQ0X2ludHJfZGlzYWJsZSwKKwkuaW50ZXJydXB0X2NsZWFyICAgICAgPSB2c2M4MjQ0X2ludHJfY2xlYXIsCisJLmludGVycnVwdF9oYW5kbGVyICAgID0gdnNjODI0NF9pbnRyX2hhbmRsZXIsCisJLmF1dG9uZWdfZW5hYmxlICAgICAgID0gdnNjODI0NF9hdXRvbmVnX2VuYWJsZSwKKwkuYXV0b25lZ19yZXN0YXJ0ICAgICAgPSB2c2M4MjQ0X2F1dG9uZWdfcmVzdGFydCwKKwkuYWR2ZXJ0aXNlICAgICAgICAgICAgPSB2c2M4MjQ0X2FkdmVydGlzZSwKKwkuc2V0X3NwZWVkX2R1cGxleCAgICAgPSB2c2M4MjQ0X3NldF9zcGVlZF9kdXBsZXgsCisJLmdldF9saW5rX3N0YXR1cyAgICAgID0gdnNjODI0NF9nZXRfbGlua19zdGF0dXMKK307CisKK3N0YXRpYyBzdHJ1Y3QgY3BoeSogdnNjODI0NF9waHlfY3JlYXRlKGFkYXB0ZXJfdCAqYWRhcHRlciwgaW50IHBoeV9hZGRyLCBzdHJ1Y3QgbWRpb19vcHMgKm1kaW9fb3BzKQoreworCXN0cnVjdCBjcGh5ICpjcGh5ID0ga3phbGxvYyhzaXplb2YoKmNwaHkpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY3BoeSkgcmV0dXJuIE5VTEw7CisKKwljcGh5X2luaXQoY3BoeSwgYWRhcHRlciwgcGh5X2FkZHIsICZ2c2M4MjQ0X29wcywgbWRpb19vcHMpOworCisJcmV0dXJuIGNwaHk7Cit9CisKKworc3RhdGljIGludCB2c2M4MjQ0X3BoeV9yZXNldChhZGFwdGVyX3QqIGFkYXB0ZXIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBncGh5IHQxX3ZzYzgyNDRfb3BzID0geworCXZzYzgyNDRfcGh5X2NyZWF0ZSwKKwl2c2M4MjQ0X3BoeV9yZXNldAorfTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzgyNDRfcmVnLmggYi9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzgyNDRfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjMTgyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vdnNjODI0NF9yZWcuaApAQCAtMCwwICsxLDE3MiBAQAorLyogJERhdGU6IDIwMDUvMTEvMjMgMTY6Mjg6NTMgJCAkUkNTZmlsZTogdnNjODI0NF9yZWcuaCx2ICQgJFJldmlzaW9uOiAxLjEgJCAqLworI2lmbmRlZiBDSEVMU0lPX01WOEUxWFhYX0gKKyNkZWZpbmUgQ0hFTFNJT19NVjhFMVhYWF9ICisKKyNpZm5kZWYgQk1DUl9TUEVFRDEwMDAKKyMgZGVmaW5lIEJNQ1JfU1BFRUQxMDAwIDB4NDAKKyNlbmRpZgorCisjaWZuZGVmIEFEVkVSVElTRV9QQVVTRQorIyBkZWZpbmUgQURWRVJUSVNFX1BBVVNFIDB4NDAwCisjZW5kaWYKKyNpZm5kZWYgQURWRVJUSVNFX1BBVVNFX0FTWU0KKyMgZGVmaW5lIEFEVkVSVElTRV9QQVVTRV9BU1lNIDB4ODAwCisjZW5kaWYKKworLyogR2lnYWJpdCBNSUkgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1JSV9HQk1SIDEgICAgICAgLyogMTAwMEJhc2UtVCBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9HQkNSIDkgICAgICAgLyogMTAwMEJhc2UtVCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9HQlNSIDEwICAgICAgLyogMTAwMEJhc2UtVCBzdGF0dXMgcmVnaXN0ZXIgKi8KKworLyogMTAwMEJhc2UtVCBjb250cm9sIHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBHQkNSX0FEVl8xMDAwSEFMRiAgICAgICAgIDB4MTAwCisjZGVmaW5lIEdCQ1JfQURWXzEwMDBGVUxMICAgICAgICAgMHgyMDAKKyNkZWZpbmUgR0JDUl9QUkVGRVJfTUFTVEVSICAgICAgICAweDQwMAorI2RlZmluZSBHQkNSX01BTlVBTF9BU19NQVNURVIgICAgIDB4ODAwCisjZGVmaW5lIEdCQ1JfTUFOVUFMX0NPTkZJR19FTkFCTEUgMHgxMDAwCisKKy8qIDEwMDBCYXNlLVQgc3RhdHVzIHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBHQlNSX0xQXzEwMDBIQUxGICAweDQwMAorI2RlZmluZSBHQlNSX0xQXzEwMDBGVUxMICAweDgwMAorI2RlZmluZSBHQlNSX1JFTU9URV9PSyAgICAweDEwMDAKKyNkZWZpbmUgR0JTUl9MT0NBTF9PSyAgICAgMHgyMDAwCisjZGVmaW5lIEdCU1JfTE9DQUxfTUFTVEVSIDB4NDAwMAorI2RlZmluZSBHQlNSX01BU1RFUl9GQVVMVCAweDgwMDAKKworLyogVml0ZXNzZSBQSFkgaW50ZXJydXB0IHN0YXR1cyBiaXRzLiAqLworI2lmIDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0pBQkJFUiAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1BPTEFSSVRZX0NITkcgICAweDAwMDIKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0VOR19ERVRFQ1RfQ0hORyAweDAwMTAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0RPV05TSElGVCAgICAgICAweDAwMjAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX01ESV9YT1ZFUl9DSE5HICAweDAwNDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0ZJRk9fT1ZFUl9VTkRFUiAweDAwODAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0ZBTFNFX0NBUlJJRVIgICAweDAxMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1NZTUJPTF9FUlJPUiAgICAweDAyMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0xJTktfQ0hORyAgICAgICAweDA0MDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0FVVE9ORUdfRE9ORSAgICAweDA4MDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1BBR0VfUkVDViAgICAgICAweDEwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0RVUExFWF9DSE5HICAgICAweDIwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1NQRUVEX0NITkcgICAgICAweDQwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0FVVE9ORUdfRVJSICAgICAweDgwMDAKKyNlbHNlCisvLyNkZWZpbmUgVlNDODI0NF9JTlRSX0pBQkJFUiAgICAgICAgICAweDAwMDEKKy8vI2RlZmluZSBWU0M4MjQ0X0lOVFJfUE9MQVJJVFlfQ0hORyAgIDB4MDAwMgorLy8jZGVmaW5lIFZTQzgyNDRfSU5UUl9CSVQyICAgICAgICAgICAgMHgwMDA0CisvLyNkZWZpbmUgVlNDODI0NF9JTlRSX0JJVDMgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1JYX0VSUiAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgVlNDODI0NF9JTlRSX01BU1RFUl9TTEFWRSAgICAweDAwMDIKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0NBQkxFX0lNUEFJUkVEICAweDAwMDQKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0ZBTFNFX0NBUlJJRVIgICAweDAwMDgKKy8vI2RlZmluZSBWU0M4MjQ0X0lOVFJfRU5HX0RFVEVDVF9DSE5HIDB4MDAxMAorLy8jZGVmaW5lIFZTQzgyNDRfSU5UUl9ET1dOU0hJRlQgICAgICAgMHgwMDIwCisvLyNkZWZpbmUgVlNDODI0NF9JTlRSX01ESV9YT1ZFUl9DSE5HICAweDAwNDAKKy8vI2RlZmluZSBWU0M4MjQ0X0lOVFJfRklGT19PVkVSX1VOREVSIDB4MDA4MAorI2RlZmluZSBWU0M4MjQ0X0lOVFJfQklUNCAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBWU0M4MjQ0X0lOVFJfRklGT19SWCAgICAgICAgIDB4MDAyMAorI2RlZmluZSBWU0M4MjQ0X0lOVFJfRklGT19PVkVSX1VOREVSIDB4MDA0MAorI2RlZmluZSBWU0M4MjQ0X0lOVFJfTE9DS19MT1NUICAgICAgIDB4MDA4MAorLy8jZGVmaW5lIFZTQzgyNDRfSU5UUl9GQUxTRV9DQVJSSUVSICAgMHgwMTAwCisvLyNkZWZpbmUgVlNDODI0NF9JTlRSX1NZTUJPTF9FUlJPUiAgICAweDAyMDAKKy8vI2RlZmluZSBWU0M4MjQ0X0lOVFJfTElOS19DSE5HICAgICAgIDB4MDQwMAorLy8jZGVmaW5lIFZTQzgyNDRfSU5UUl9BVVRPTkVHX0RPTkUgICAgMHgwODAwCisjZGVmaW5lIFZTQzgyNDRfSU5UUl9TWU1CT0xfRVJST1IgICAgMHgwMTAwCisjZGVmaW5lIFZTQzgyNDRfSU5UUl9FTkdfREVURUNUX0NITkcgMHgwMjAwCisjZGVmaW5lIFZTQzgyNDRfSU5UUl9BVVRPTkVHX0RPTkUgICAgMHgwNDAwCisjZGVmaW5lIFZTQzgyNDRfSU5UUl9BVVRPTkVHX0VSUiAgICAgMHgwODAwCisvLyNkZWZpbmUgVlNDODI0NF9JTlRSX1BBR0VfUkVDViAgICAgICAweDEwMDAKKy8vI2RlZmluZSBWU0M4MjQ0X0lOVFJfRFVQTEVYX0NITkcgICAgIDB4MjAwMAorLy8jZGVmaW5lIFZTQzgyNDRfSU5UUl9TUEVFRF9DSE5HICAgICAgMHg0MDAwCisvLyNkZWZpbmUgVlNDODI0NF9JTlRSX0FVVE9ORUdfRVJSICAgICAweDgwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0RVUExFWF9DSE5HICAgICAweDEwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX0xJTktfQ0hORyAgICAgICAweDIwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1NQRUVEX0NITkcgICAgICAweDQwMDAKKyNkZWZpbmUgVlNDODI0NF9JTlRSX1NUQVRVUyAgICAgICAgICAweDgwMDAKKyNlbmRpZgorCisKKy8qIFZpdGVzc2UgUEhZIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgVlNDODI0NF9TUEVDSUZJQ19DTlRSTF9SRUdJU1RFUiAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIFZTQzgyNDRfU1BFQ0lGSUNfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgICAweDFjCisjZGVmaW5lIFZTQzgyNDRfSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFZTQzgyNDRfSU5URVJSVVBUX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAweDFhCisjZGVmaW5lIFZTQzgyNDRfRVhUX1BIWV9TUEVDSUZJQ19DTlRSTF9SRUdJU1RFUiAgICAgICAyMAorI2RlZmluZSBWU0M4MjQ0X1JFQ1ZfRVJSX0NOVFJfUkVHSVNURVIgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgVlNDODI0NF9SRVNfUkVHSVNURVIgICAgICAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFZTQzgyNDRfR0xPQkFMX1NUQVRVU19SRUdJU1RFUiAgICAgICAgICAgICAgICAyMworI2RlZmluZSBWU0M4MjQ0X0xFRF9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgVlNDODI0NF9NQU5VQUxfTEVEX09WRVJSSURFX1JFR0lTVEVSICAgICAgICAgIDI1CisjZGVmaW5lIFZTQzgyNDRfRVhUX1BIWV9TUEVDSUZJQ19DTlRSTF8yX1JFR0lTVEVSICAgICAyNgorI2RlZmluZSBWU0M4MjQ0X0VYVF9QSFlfU1BFQ0lGSUNfU1RBVFVTX1JFR0lTVEVSICAgICAgMjcKKyNkZWZpbmUgVlNDODI0NF9WSVJUVUFMX0NBQkxFX1RFU1RFUl9SRUdJU1RFUiAgICAgICAgIDI4CisjZGVmaW5lIFZTQzgyNDRfRVhURU5ERURfQUREUl9SRUdJU1RFUiAgICAgICAgICAgICAgICAyOQorI2RlZmluZSBWU0M4MjQ0X0VYVEVOREVEX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMzAKKworLyogUEhZIHNwZWNpZmljIGNvbnRyb2wgcmVnaXN0ZXIgZmllbGRzICovCisjZGVmaW5lIFNfUFNDUl9NRElfWE9WRVJfTU9ERSAgICA1CisjZGVmaW5lIE1fUFNDUl9NRElfWE9WRVJfTU9ERSAgICAweDMKKyNkZWZpbmUgVl9QU0NSX01ESV9YT1ZFUl9NT0RFKHgpICgoeCkgPDwgU19QU0NSX01ESV9YT1ZFUl9NT0RFKQorI2RlZmluZSBHX1BTQ1JfTURJX1hPVkVSX01PREUoeCkgKCgoeCkgPj4gU19QU0NSX01ESV9YT1ZFUl9NT0RFKSAmIE1fUFNDUl9NRElfWE9WRVJfTU9ERSkKKworLyogRXh0ZW5kZWQgUEhZIHNwZWNpZmljIGNvbnRyb2wgcmVnaXN0ZXIgZmllbGRzICovCisjZGVmaW5lIFNfRE9XTlNISUZUX0VOQUJMRSA4CisjZGVmaW5lIFZfRE9XTlNISUZUX0VOQUJMRSAoMSA8PCBTX0RPV05TSElGVF9FTkFCTEUpCisKKyNkZWZpbmUgU19ET1dOU0hJRlRfQ05UICAgIDkKKyNkZWZpbmUgTV9ET1dOU0hJRlRfQ05UICAgIDB4NworI2RlZmluZSBWX0RPV05TSElGVF9DTlQoeCkgKCh4KSA8PCBTX0RPV05TSElGVF9DTlQpCisjZGVmaW5lIEdfRE9XTlNISUZUX0NOVCh4KSAoKCh4KSA+PiBTX0RPV05TSElGVF9DTlQpICYgTV9ET1dOU0hJRlRfQ05UKQorCisvKiBQSFkgc3BlY2lmaWMgc3RhdHVzIHJlZ2lzdGVyIGZpZWxkcyAqLworI2RlZmluZSBTX1BTU1JfSkFCQkVSIDAKKyNkZWZpbmUgVl9QU1NSX0pBQkJFUiAoMSA8PCBTX1BTU1JfSkFCQkVSKQorCisjZGVmaW5lIFNfUFNTUl9QT0xBUklUWSAxCisjZGVmaW5lIFZfUFNTUl9QT0xBUklUWSAoMSA8PCBTX1BTU1JfUE9MQVJJVFkpCisKKyNkZWZpbmUgU19QU1NSX1JYX1BBVVNFIDIKKyNkZWZpbmUgVl9QU1NSX1JYX1BBVVNFICgxIDw8IFNfUFNTUl9SWF9QQVVTRSkKKworI2RlZmluZSBTX1BTU1JfVFhfUEFVU0UgMworI2RlZmluZSBWX1BTU1JfVFhfUEFVU0UgKDEgPDwgU19QU1NSX1RYX1BBVVNFKQorCisjZGVmaW5lIFNfUFNTUl9FTkVSR1lfREVURUNUIDQKKyNkZWZpbmUgVl9QU1NSX0VORVJHWV9ERVRFQ1QgKDEgPDwgU19QU1NSX0VORVJHWV9ERVRFQ1QpCisKKyNkZWZpbmUgU19QU1NSX0RPV05TSElGVF9TVEFUVVMgNQorI2RlZmluZSBWX1BTU1JfRE9XTlNISUZUX1NUQVRVUyAoMSA8PCBTX1BTU1JfRE9XTlNISUZUX1NUQVRVUykKKworI2RlZmluZSBTX1BTU1JfTURJIDYKKyNkZWZpbmUgVl9QU1NSX01ESSAoMSA8PCBTX1BTU1JfTURJKQorCisjZGVmaW5lIFNfUFNTUl9DQUJMRV9MRU4gICAgNworI2RlZmluZSBNX1BTU1JfQ0FCTEVfTEVOICAgIDB4NworI2RlZmluZSBWX1BTU1JfQ0FCTEVfTEVOKHgpICgoeCkgPDwgU19QU1NSX0NBQkxFX0xFTikKKyNkZWZpbmUgR19QU1NSX0NBQkxFX0xFTih4KSAoKCh4KSA+PiBTX1BTU1JfQ0FCTEVfTEVOKSAmIE1fUFNTUl9DQUJMRV9MRU4pCisKKy8vI2RlZmluZSBTX1BTU1JfTElOSyAxMAorLy8jZGVmaW5lIFNfUFNTUl9MSU5LIDEzCisjZGVmaW5lIFNfUFNTUl9MSU5LIDIKKyNkZWZpbmUgVl9QU1NSX0xJTksgKDEgPDwgU19QU1NSX0xJTkspCisKKy8vI2RlZmluZSBTX1BTU1JfU1RBVFVTX1JFU09MVkVEIDExCisvLyNkZWZpbmUgU19QU1NSX1NUQVRVU19SRVNPTFZFRCAxMAorI2RlZmluZSBTX1BTU1JfU1RBVFVTX1JFU09MVkVEIDE1CisjZGVmaW5lIFZfUFNTUl9TVEFUVVNfUkVTT0xWRUQgKDEgPDwgU19QU1NSX1NUQVRVU19SRVNPTFZFRCkKKworI2RlZmluZSBTX1BTU1JfUEFHRV9SRUNFSVZFRCAxMgorI2RlZmluZSBWX1BTU1JfUEFHRV9SRUNFSVZFRCAoMSA8PCBTX1BTU1JfUEFHRV9SRUNFSVZFRCkKKworLy8jZGVmaW5lIFNfUFNTUl9EVVBMRVggMTMKKy8vI2RlZmluZSBTX1BTU1JfRFVQTEVYIDEyCisjZGVmaW5lIFNfUFNTUl9EVVBMRVggNQorI2RlZmluZSBWX1BTU1JfRFVQTEVYICgxIDw8IFNfUFNTUl9EVVBMRVgpCisKKy8vI2RlZmluZSBTX1BTU1JfU1BFRUQgICAgMTQKKy8vI2RlZmluZSBTX1BTU1JfU1BFRUQgICAgMTQKKyNkZWZpbmUgU19QU1NSX1NQRUVEICAgIDMKKyNkZWZpbmUgTV9QU1NSX1NQRUVEICAgIDB4MworI2RlZmluZSBWX1BTU1JfU1BFRUQoeCkgKCh4KSA8PCBTX1BTU1JfU1BFRUQpCisjZGVmaW5lIEdfUFNTUl9TUEVFRCh4KSAoKCh4KSA+PiBTX1BTU1JfU1BFRUQpICYgTV9QU1NSX1NQRUVEKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggNGZmYzliNC4uZGVjNzBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3M4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKQEAgLTU4OCwxMCArNTg4LDEwIEBACiAJCQkJZ290byBvdXQyOwogCQkJfQogCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiUFBfYWRkciBhdCAleFsleF06IDB4JXhcbiIsCi0JCQlpb2FkZHIsIEFERF9QT1JULCByZWFkd29yZChpb2FkZHIsIEFERF9QT1JUKSk7CiAKIAlpb2FkZHIgJj0gfjM7CisJcHJpbnRrKEtFUk5fREVCVUcgIlBQX2FkZHIgYXQgJXhbJXhdOiAweCV4XG4iLAorCQkJaW9hZGRyLCBBRERfUE9SVCwgcmVhZHdvcmQoaW9hZGRyLCBBRERfUE9SVCkpOwogCXdyaXRld29yZChpb2FkZHIsIEFERF9QT1JULCBQUF9DaGlwSUQpOwogCiAJdG1wID0gcmVhZHdvcmQoaW9hZGRyLCBEQVRBX1BPUlQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVmeHguYyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKaW5kZXggOGY1MTRjYy4uZGMzYWIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0xOTIsNiArMTkyLDcgQEAKICAqCQkwNCBBdWcgMjAwMwltYWNybwkJQ29udmVydGVkIHRvIHRoZSBETUEgQVBJLgogICoJCTE0IEF1ZyAyMDA0CW1hY3JvCQlGaXggZGV2aWNlIG5hbWVzIHJlcG9ydGVkLgogICoJCTE0IEp1biAyMDA1CW1hY3JvCQlVc2UgaXJxcmV0dXJuX3QuCisgKgkJMjMgT2N0IDIwMDYJbWFjcm8JCUJpZy1lbmRpYW4gaG9zdCBzdXBwb3J0LgogICovCiAKIC8qIEluY2x1ZGUgZmlsZXMgKi8KQEAgLTIxOCw4ICsyMTksOCBAQAogCiAvKiBWZXJzaW9uIGluZm9ybWF0aW9uIHN0cmluZyBzaG91bGQgYmUgdXBkYXRlZCBwcmlvciB0byBlYWNoIG5ldyByZWxlYXNlISAgKi8KICNkZWZpbmUgRFJWX05BTUUgImRlZnh4IgotI2RlZmluZSBEUlZfVkVSU0lPTiAidjEuMDgiCi0jZGVmaW5lIERSVl9SRUxEQVRFICIyMDA1LzA2LzE0IgorI2RlZmluZSBEUlZfVkVSU0lPTiAidjEuMDkiCisjZGVmaW5lIERSVl9SRUxEQVRFICIyMDA2LzEwLzIzIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJRFJWX05BTUUgIjogIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKQEAgLTg1OSw2ICs4NjAsNyBAQAogCQkgICAgICAgcHJpbnRfbmFtZSk7CiAJCXJldHVybihERlhfS19GQUlMVVJFKTsKIAl9CisJZGF0YSA9IGNwdV90b19sZTMyKGRhdGEpOwogCW1lbWNweSgmYnAtPmZhY3RvcnlfbWFjX2FkZHJbMF0sICZkYXRhLCBzaXplb2YodTMyKSk7CiAKIAlpZiAoZGZ4X2h3X3BvcnRfY3RybF9yZXEoYnAsIFBJX1BDVFJMX01fTUxBLCBQSV9QREFUQV9BX01MQV9LX0hJLCAwLApAQCAtODY3LDYgKzg2OSw3IEBACiAJCSAgICAgICBwcmludF9uYW1lKTsKIAkJcmV0dXJuKERGWF9LX0ZBSUxVUkUpOwogCX0KKwlkYXRhID0gY3B1X3RvX2xlMzIoZGF0YSk7CiAJbWVtY3B5KCZicC0+ZmFjdG9yeV9tYWNfYWRkcls0XSwgJmRhdGEsIHNpemVvZih1MTYpKTsKIAogCS8qCkBAIC0xMDg1LDI3ICsxMDg4LDIzIEBACiAJCX0KIAogCS8qCi0JICogU2V0IGJhc2UgYWRkcmVzcyBvZiBEZXNjcmlwdG9yIEJsb2NrIGFuZCBicmluZyBhZGFwdGVyIHRvIERNQV9BVkFJTEFCTEUgc3RhdGUKKwkgKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyBvZiBEZXNjcmlwdG9yIEJsb2NrIGFuZCBicmluZyBhZGFwdGVyCisJICogdG8gRE1BX0FWQUlMQUJMRSBzdGF0ZS4KIAkgKgotCSAqIE5vdGU6IFdlIGFsc28gc2V0IHRoZSBsaXRlcmFsIGFuZCBkYXRhIHN3YXBwaW5nIHJlcXVpcmVtZW50cyBpbiB0aGlzCi0JICoJICAgICBjb21tYW5kLiAgU2luY2UgdGhpcyBkcml2ZXIgcHJlc2VudGx5IHJ1bnMgb24gSW50ZWwgcGxhdGZvcm1zCi0JICoJCSB3aGljaCBhcmUgTGl0dGxlIEVuZGlhbiwgd2UnbGwgdGVsbCB0aGUgYWRhcHRlciB0byBieXRlIHN3YXAKLQkgKgkJIGRhdGEgb25seS4gIFRoaXMgY29kZSB3aWxsIG5lZWQgdG8gY2hhbmdlIHdoZW4gd2Ugc3VwcG9ydAotCSAqCQkgQmlnIEVuZGlhbiBzeXN0ZW1zIChlZy4gUG93ZXJQQykuCisJICogTm90ZTogV2UgYWxzbyBzZXQgdGhlIGxpdGVyYWwgYW5kIGRhdGEgc3dhcHBpbmcgcmVxdWlyZW1lbnRzCisJICogICAgICAgaW4gdGhpcyBjb21tYW5kLgogCSAqCi0JICogQXNzdW1wdGlvbjogMzItYml0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgZGVzY3JpcHRvciBibG9jayBpcyA4S2J5dGUKLQkgKiAgICAgICAgICAgICBhbGlnbmVkLiAgVGhhdCBpcywgYml0cyAwLTEyIG9mIHRoZSBhZGRyZXNzIG11c3QgYmUgemVyby4KKwkgKiBBc3N1bXB0aW9uOiAzMi1iaXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBkZXNjcmlwdG9yIGJsb2NrCisJICogICAgICAgaXMgOEtieXRlIGFsaWduZWQuCiAJICovCi0KLQlpZiAoZGZ4X2h3X3BvcnRfY3RybF9yZXEoYnAsCi0JCQkJCQkJUElfUENUUkxfTV9JTklULAotCQkJCQkJCSh1MzIpIChicC0+ZGVzY3JfYmxvY2tfcGh5cyB8IFBJX1BEQVRBX0FfSU5JVF9NX0JTV0FQX0RBVEEpLAotCQkJCQkJCTAsCi0JCQkJCQkJTlVMTCkgIT0gREZYX0tfU1VDQ0VTUykKLQkJewotCQlwcmludGsoIiVzOiBDb3VsZCBub3Qgc2V0IGRlc2NyaXB0b3IgYmxvY2sgYWRkcmVzcyFcbiIsIGJwLT5kZXYtPm5hbWUpOwotCQlyZXR1cm4oREZYX0tfRkFJTFVSRSk7Ci0JCX0KKwlpZiAoZGZ4X2h3X3BvcnRfY3RybF9yZXEoYnAsIFBJX1BDVFJMX01fSU5JVCwKKwkJCQkgKHUzMikoYnAtPmRlc2NyX2Jsb2NrX3BoeXMgfAorCQkJCSAgICAgICBQSV9QREFUQV9BX0lOSVRfTV9CU1dBUF9JTklUKSwKKwkJCQkgMCwgTlVMTCkgIT0gREZYX0tfU1VDQ0VTUykgeworCQlwcmludGsoIiVzOiBDb3VsZCBub3Qgc2V0IGRlc2NyaXB0b3IgYmxvY2sgYWRkcmVzcyFcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIERGWF9LX0ZBSUxVUkU7CisJfQogCiAJLyogU2V0IHRyYW5zbWl0IGZsdXNoIHRpbWVvdXQgdmFsdWUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVmeHguaCBiL2RyaXZlcnMvbmV0L2RlZnh4LmgKaW5kZXggOGIxZTlhMS4uMmNlOGY5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguaAorKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5oCkBAIC0yNSw2ICsyNSw3IEBACiAgKgkJCQkJCQltYWNyb3MgdG8gREVGWFguQy4KICAqCQkxMi1TZXAtOTYJTFZTCQlSZW1vdmVkIHBhY2tldCByZXF1ZXN0IGhlYWRlciBwb2ludGVycy4KICAqCQkwNCBBdWcgMjAwMwltYWNybwkJQ29udmVydGVkIHRvIHRoZSBETUEgQVBJLgorICoJCTIzIE9jdCAyMDA2CW1hY3JvCQlCaWctZW5kaWFuIGhvc3Qgc3VwcG9ydC4KICAqLwogCiAjaWZuZGVmIF9ERUZYWF9IXwpAQCAtMTM0NCw3ICsxMzQ1LDcgQEAKIAogLyogUmVnaXN0ZXIgZGVmaW5pdGlvbiBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGZvciBib3RoIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiBzeXN0ZW1zICovCiAKLSNpZm5kZWYgIEJJR19FTkRJQU4KKyNpZm5kZWYgX19CSUdfRU5ESUFOCiAKIC8qIExpdHRsZSBlbmRpYW4gZm9ybWF0IG9mIFR5cGUgMSBQcm9kdWNlciByZWdpc3RlciAqLwogCkBAIC0xNDAyLDcgKzE0MDMsMTEgQEAKIAkJfSBpbmRleDsKIAl9IFBJX1RZUEVfMl9DT05TVU1FUjsKIAotI2Vsc2UKKy8qIERlZmluZSBzd2FwcGluZyByZXF1aXJlZCBieSBETUEgdHJhbnNmZXJzLiAgKi8KKyNkZWZpbmUgUElfUERBVEFfQV9JTklUX01fQlNXQVBfSU5JVAlcCisJKFBJX1BEQVRBX0FfSU5JVF9NX0JTV0FQX0RBVEEpCisKKyNlbHNlIC8qIF9fQklHX0VORElBTiAqLwogCiAvKiBCaWcgZW5kaWFuIGZvcm1hdCBvZiBUeXBlIDEgUHJvZHVjZXIgcmVnaXN0ZXIgKi8KIApAQCAtMTQ2MCw3ICsxNDY1LDExIEBACiAJCX0gaW5kZXg7CiAJfSBQSV9UWVBFXzJfQ09OU1VNRVI7CiAKLSNlbmRpZgkvKiAjaWZuZGVmIEJJR19FTkRJQU4gKi8KKy8qIERlZmluZSBzd2FwcGluZyByZXF1aXJlZCBieSBETUEgdHJhbnNmZXJzLiAgKi8KKyNkZWZpbmUgUElfUERBVEFfQV9JTklUX01fQlNXQVBfSU5JVAlcCisJKFBJX1BEQVRBX0FfSU5JVF9NX0JTV0FQX0RBVEEgfCBQSV9QREFUQV9BX0lOSVRfTV9CU1dBUF9MSVRFUkFMKQorCisjZW5kaWYgLyogX19CSUdfRU5ESUFOICovCiAKIC8qIERlZmluZSBFSVNBIGNvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCBmODdmNmUzLi41MTEzZWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTEyNTIsMjQgKzEyNTIsMjIgQEAKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHAgPSAoc3RydWN0IGRlcGNhX3ByaXZhdGUgKikgZGV2LT5wcml2OwogCXVfbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotCWlmIChkZXYpIHsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQl3aGlsZSAobHAtPnR4X29sZCAhPSBscC0+dHhfbmV3KTsJLyogV2FpdCBmb3IgdGhlIHJpbmcgdG8gZW1wdHkgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJd2hpbGUgKGxwLT50eF9vbGQgIT0gbHAtPnR4X25ldyk7CS8qIFdhaXQgZm9yIHRoZSByaW5nIHRvIGVtcHR5ICovCiAKLQkJU1RPUF9ERVBDQTsJLyogVGVtcG9yYXJpbHkgc3RvcCB0aGUgZGVwY2EuICAqLwotCQlkZXBjYV9pbml0X3JpbmcoZGV2KTsJLyogSW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciByaW5ncyAqLworCVNUT1BfREVQQ0E7CS8qIFRlbXBvcmFyaWx5IHN0b3AgdGhlIGRlcGNhLiAgKi8KKwlkZXBjYV9pbml0X3JpbmcoZGV2KTsJLyogSW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciByaW5ncyAqLwogCi0JCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJLyogU2V0IHByb21pc2N1b3VzIG1vZGUgKi8KLQkJCWxwLT5pbml0X2Jsb2NrLm1vZGUgfD0gUFJPTTsKLQkJfSBlbHNlIHsKLQkJCVNldE11bHRpY2FzdEZpbHRlcihkZXYpOwotCQkJbHAtPmluaXRfYmxvY2subW9kZSAmPSB+UFJPTTsJLyogVW5zZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwotCQl9Ci0KLQkJTG9hZENTUnMoZGV2KTsJLyogUmVsb2FkIENTUjMgKi8KLQkJSW5pdFJlc3RhcnREZXBjYShkZXYpOwkvKiBSZXN1bWUgbm9ybWFsIG9wZXJhdGlvbi4gKi8KLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsJLyogVW5sb2NrIHRoZSBUWCByaW5nICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLworCQlscC0+aW5pdF9ibG9jay5tb2RlIHw9IFBST007CisJfSBlbHNlIHsKKwkJU2V0TXVsdGljYXN0RmlsdGVyKGRldik7CisJCWxwLT5pbml0X2Jsb2NrLm1vZGUgJj0gflBST007CS8qIFVuc2V0IHByb21pc2N1b3VzIG1vZGUgKi8KIAl9CisKKwlMb2FkQ1NScyhkZXYpOwkvKiBSZWxvYWQgQ1NSMyAqLworCUluaXRSZXN0YXJ0RGVwY2EoZGV2KTsJLyogUmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uICovCisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsJLyogVW5sb2NrIHRoZSBUWCByaW5nICovCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAppbmRleCA3ZWNjZTQzLi5mMDkxMDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKQEAgLTU5LDYgKzU5LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2lmZGVmIE5FVElGX0ZfVFNPNgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KQEAgLTI1NCw2ICsyNTcsMTcgQEAKIAlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAjZW5kaWYKIAlhdG9taWNfdCBpcnFfc2VtOworCXVuc2lnbmVkIGludCBkZXRlY3RfbGluazsKKwl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXM7CisJdW5zaWduZWQgaW50IHRvdGFsX3R4X3BhY2tldHM7CisJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzOworCXVuc2lnbmVkIGludCB0b3RhbF9yeF9wYWNrZXRzOworCS8qIEludGVycnVwdCBUaHJvdHRsZSBSYXRlICovCisJdWludDMyX3QgaXRyOworCXVpbnQzMl90IGl0cl9zZXR0aW5nOworCXVpbnQxNl90IHR4X2l0cjsKKwl1aW50MTZfdCByeF9pdHI7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfdGFzazsKIAl1aW50OF90IGZjX2F1dG9uZWc7CiAKQEAgLTI2Miw2ICsyNzYsNyBAQAogCiAJLyogVFggKi8KIAlzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZzsgICAgICAvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLworCXVuc2lnbmVkIGludCByZXN0YXJ0X3F1ZXVlOwogCXVuc2lnbmVkIGxvbmcgdHhfcXVldWVfbGVuOwogCXVpbnQzMl90IHR4ZF9jbWQ7CiAJdWludDMyX3QgdHhfaW50X2RlbGF5OwpAQCAtMzEwLDggKzMyNSw2IEBACiAJdWludDY0X3QgZ29yY2xfb2xkOwogCXVpbnQxNl90IHJ4X3BzX2JzaXplMDsKIAotCS8qIEludGVycnVwdCBUaHJvdHRsZSBSYXRlICovCi0JdWludDMyX3QgaXRyOwogCiAJLyogT1MgZGVmaW5lZCBzdHJ1Y3RzICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCBjNTY0YWRiLi5kYTQ1OWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC04NSw2ICs4NSw3IEBACiAJeyAidHhfc2luZ2xlX2NvbGxfb2siLCBFMTAwMF9TVEFUKHN0YXRzLnNjYykgfSwKIAl7ICJ0eF9tdWx0aV9jb2xsX29rIiwgRTEwMDBfU1RBVChzdGF0cy5tY2MpIH0sCiAJeyAidHhfdGltZW91dF9jb3VudCIsIEUxMDAwX1NUQVQodHhfdGltZW91dF9jb3VudCkgfSwKKwl7ICJ0eF9yZXN0YXJ0X3F1ZXVlIiwgRTEwMDBfU1RBVChyZXN0YXJ0X3F1ZXVlKSB9LAogCXsgInJ4X2xvbmdfbGVuZ3RoX2Vycm9ycyIsIEUxMDAwX1NUQVQoc3RhdHMucm9jKSB9LAogCXsgInJ4X3Nob3J0X2xlbmd0aF9lcnJvcnMiLCBFMTAwMF9TVEFUKHN0YXRzLnJ1YykgfSwKIAl7ICJyeF9hbGlnbl9lcnJvcnMiLCBFMTAwMF9TVEFUKHN0YXRzLmFsZ25lcnJjKSB9LApAQCAtMTMzLDkgKzEzNCw3IEBACiAKIAkJaWYgKGh3LT5hdXRvbmVnID09IDEpIHsKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKLQogCQkJLyogdGhlIGUxMDAwIGF1dG9uZWcgc2VlbXMgdG8gbWF0Y2ggZXRodG9vbCBuaWNlbHkgKi8KLQogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZDsKIAkJfQogCkBAIC0yODUsNyArMjg0LDcgQEAKIAkJCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwogCX0gZWxzZQogCQlyZXR2YWwgPSAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpID8KLQkJCSAgIGUxMDAwX3NldHVwX2xpbmsoaHcpIDogZTEwMDBfZm9yY2VfbWFjX2ZjKGh3KSk7CisJCQkgIGUxMDAwX3NldHVwX2xpbmsoaHcpIDogZTEwMDBfZm9yY2VfbWFjX2ZjKGh3KSk7CiAKIAljbGVhcl9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKQEAgLTM1MCw2ICszNDksMTMgQEAKIAllbHNlCiAJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwogCisjaWZkZWYgTkVUSUZfRl9UU082CisJaWYgKGRhdGEpCisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCWVsc2UKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OworI2VuZGlmCisKIAlEUFJJTlRLKFBST0JFLCBJTkZPLCAiVFNPIGlzICVzXG4iLCBkYXRhID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CiAJYWRhcHRlci0+dHNvX2ZvcmNlID0gVFJVRTsKIAlyZXR1cm4gMDsKQEAgLTc3NCw3ICs3ODAsNyBAQAogCS8qIFRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgUmVhZCBPbmx5LCBzbyBhIHdyaXRlIHNob3VsZCBmYWlsLgogCSAqIFNvbWUgYml0cyB0aGF0IGdldCB0b2dnbGVkIGFyZSBpZ25vcmVkLgogCSAqLwotICAgICAgICBzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hY190eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewogCS8qIHRoZXJlIGFyZSBzZXZlcmFsIGJpdHMgb24gbmV3ZXIgaGFyZHdhcmUgdGhhdCBhcmUgci93ICovCiAJY2FzZSBlMTAwMF84MjU3MToKIAljYXNlIGUxMDAwXzgyNTcyOgpAQCAtODAyLDEyICs4MDgsMTQgQEAKIAl9CiAJLyogcmVzdG9yZSBwcmV2aW91cyBzdGF0dXMgKi8KIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMsIGJlZm9yZSk7CisKIAlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbikgewogCQlSRUdfUEFUVEVSTl9URVNUKEZDQUwsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpOwogCQlSRUdfUEFUVEVSTl9URVNUKEZDQUgsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYpOwogCQlSRUdfUEFUVEVSTl9URVNUKEZDVCwgMHgwMDAwRkZGRiwgMHhGRkZGRkZGRik7CiAJCVJFR19QQVRURVJOX1RFU1QoVkVULCAweDAwMDBGRkZGLCAweEZGRkZGRkZGKTsKIAl9CisKIAlSRUdfUEFUVEVSTl9URVNUKFJEVFIsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYpOwogCVJFR19QQVRURVJOX1RFU1QoUkRCQUgsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpOwogCVJFR19QQVRURVJOX1RFU1QoUkRMRU4sIDB4MDAwRkZGODAsIDB4MDAwRkZGRkYpOwpAQCAtODIwLDggKzgyOCw5IEBACiAJUkVHX1BBVFRFUk5fVEVTVChURExFTiwgMHgwMDBGRkY4MCwgMHgwMDBGRkZGRik7CiAKIAlSRUdfU0VUX0FORF9DSEVDSyhSQ1RMLCAweEZGRkZGRkZGLCAweDAwMDAwMDAwKTsKKwogCWJlZm9yZSA9IChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuID8KLQkJCTB4MDZDM0IzM0UgOiAweDA2REZCM0ZFKTsKKwkgICAgICAgICAgMHgwNkMzQjMzRSA6IDB4MDZERkIzRkUpOwogCVJFR19TRVRfQU5EX0NIRUNLKFJDVEwsIGJlZm9yZSwgMHgwMDNGRkZGQik7CiAJUkVHX1NFVF9BTkRfQ0hFQ0soVENUTCwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCk7CiAKQEAgLTgzNCwxMCArODQzLDEwIEBACiAJCVJFR19QQVRURVJOX1RFU1QoVERCQUwsIDB4RkZGRkZGRjAsIDB4RkZGRkZGRkYpOwogCQlSRUdfUEFUVEVSTl9URVNUKFRJRFYsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYpOwogCQl2YWx1ZSA9IChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuID8KLQkJCQlFMTAwMF9SQVJfRU5UUklFU19JQ0g4TEFOIDogRTEwMDBfUkFSX0VOVFJJRVMpOworCQkgICAgICAgICBFMTAwMF9SQVJfRU5UUklFU19JQ0g4TEFOIDogRTEwMDBfUkFSX0VOVFJJRVMpOwogCQlmb3IgKGkgPSAwOyBpIDwgdmFsdWU7IGkrKykgewogCQkJUkVHX1BBVFRFUk5fVEVTVChSQSArICgoKGkgPDwgMSkgKyAxKSA8PCAyKSwgMHg4MDAzRkZGRiwKLQkJCQkJIDB4RkZGRkZGRkYpOworCQkJICAgICAgICAgICAgICAgICAweEZGRkZGRkZGKTsKIAkJfQogCiAJfSBlbHNlIHsKQEAgLTg4Myw4ICs4OTIsNyBAQAogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QKLWUxMDAwX3Rlc3RfaW50cihpbnQgaXJxLAotCQl2b2lkICpkYXRhKQorZTEwMDBfdGVzdF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTkwNSwxMSArOTEzLDExIEBACiAKIAkvKiBOT1RFOiB3ZSBkb24ndCB0ZXN0IE1TSSBpbnRlcnJ1cHRzIGhlcmUsIHlldCAqLwogCS8qIEhvb2sgdXAgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciBqdXN0IGZvciB0aGlzIHRlc3QgKi8KLQlpZiAoIXJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgSVJRRl9QUk9CRV9TSEFSRUQsCi0JCQkgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKQorCWlmICghcmVxdWVzdF9pcnEoaXJxLCAmZTEwMDBfdGVzdF9pbnRyLCBJUlFGX1BST0JFX1NIQVJFRCwgbmV0ZGV2LT5uYW1lLAorCSAgICAgICAgICAgICAgICAgbmV0ZGV2KSkKIAkJc2hhcmVkX2ludCA9IEZBTFNFOwogCWVsc2UgaWYgKHJlcXVlc3RfaXJxKGlycSwgJmUxMDAwX3Rlc3RfaW50ciwgSVJRRl9TSEFSRUQsCi0JCQkgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpIHsKKwkgICAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpIHsKIAkJKmRhdGEgPSAxOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtOTI1LDYgKzkzMyw3IEBACiAKIAkJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4gJiYgaSA9PSA4KQogCQkJY29udGludWU7CisKIAkJLyogSW50ZXJydXB0IHRvIHRlc3QgKi8KIAkJbWFzayA9IDEgPDwgaTsKIApAQCAtMTY3NCw3ICsxNjgzLDcgQEAKIAkJaWYgKGUxMDAwX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVs0XSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCi0JCS8qIE9mZmxpbmUgdGVzdHMgYXJlbid0IHJ1bjsgcGFzcyBieSBkZWZhdWx0ICovCisJCS8qIE9ubGluZSB0ZXN0cyBhcmVuJ3QgcnVuOyBwYXNzIGJ5IGRlZmF1bHQgKi8KIAkJZGF0YVswXSA9IDA7CiAJCWRhdGFbMV0gPSAwOwogCQlkYXRhWzJdID0gMDsKQEAgLTE3MTcsNiArMTcyNiw3IEBACiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9RVUFEX0NPUFBFUl9MT1dQUk9GSUxFOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVJfS1NQMzoKIAkJLyogcXVhZCBwb3J0IGFkYXB0ZXJzIG9ubHkgc3VwcG9ydCBXb0wgb24gcG9ydCBBICovCiAJCWlmICghYWRhcHRlci0+cXVhZF9wb3J0X2EpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IDc5NmM0ZjdkLi4zNjU1ZDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKQEAgLTM4NSw2ICszODUsNyBAQAogICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfRklCRVI6CiAgICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9TRVJERVM6CiAgICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9RVUFEX0NPUFBFUjoKKyAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1FVQURfQ09QUEVSX0xPV1BST0ZJTEU6CiAgICAgICAgICAgICBody0+bWFjX3R5cGUgPSBlMTAwMF84MjU3MTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzJFSV9DT1BQRVI6CkBAIC00MDgsNiArNDA5LDggQEAKICAgICBjYXNlIEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9BTVQ6CiAgICAgY2FzZSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfQzoKICAgICBjYXNlIEUxMDAwX0RFVl9JRF9JQ0g4X0lGRToKKyAgICBjYXNlIEUxMDAwX0RFVl9JRF9JQ0g4X0lGRV9HVDoKKyAgICBjYXNlIEUxMDAwX0RFVl9JRF9JQ0g4X0lGRV9HOgogICAgIGNhc2UgRTEwMDBfREVWX0lEX0lDSDhfSUdQX006CiAgICAgICAgIGh3LT5tYWNfdHlwZSA9IGUxMDAwX2ljaDhsYW47CiAgICAgICAgIGJyZWFrOwpAQCAtMjM2Nyw2ICsyMzcwLDcgQEAKIAogICAgICAgICAvKiBOZWVkIHRvIHJlc2V0IHRoZSBQSFkgb3IgdGhlc2UgY2hhbmdlcyB3aWxsIGJlIGlnbm9yZWQgKi8KICAgICAgICAgbWlpX2N0cmxfcmVnIHw9IE1JSV9DUl9SRVNFVDsKKwogICAgIC8qIERpc2FibGUgTURJLVggc3VwcG9ydCBmb3IgMTAvMTAwICovCiAgICAgfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lmZSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJRkVfUEhZX01ESVhfQ09OVFJPTCwgJnBoeV9kYXRhKTsKQEAgLTIzNzksNiArMjM4Myw3IEBACiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJRkVfUEhZX01ESVhfQ09OVFJPTCwgcGh5X2RhdGEpOwogICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOworCiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgSUdQIHJlcXVpcmVzIE1ESQogICAgICAgICAgKiBmb3JjZWQgd2hlbmV2ZXIgc3BlZWQgb3IgZHVwbGV4IGFyZSBmb3JjZWQuCkBAIC0zOTQwLDE0ICszOTQ1LDE1IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgUEhZX0NUUkwsIHJlZyB8IEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFIHwKICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX1BIWV9DVFJMX05PTkQwQV9HQkVfRElTQUJMRSk7CiAKLSAgICAgICAgLyogV3JpdGUgVlIgcG93ZXItZG93biBlbmFibGUgKi8KKyAgICAgICAgLyogV3JpdGUgVlIgcG93ZXItZG93biBlbmFibGUgLSBiaXRzIDk6OCBzaG91bGQgYmUgMTBiICovCiAgICAgICAgIGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQM19WUl9DVFJMLCAmcGh5X2RhdGEpOwotICAgICAgICBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AzX1ZSX0NUUkwsIHBoeV9kYXRhIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AzX1ZSX0NUUkxfTU9ERV9TSFVUKTsKKyAgICAgICAgcGh5X2RhdGEgfD0gKDEgPDwgOSk7CisgICAgICAgIHBoeV9kYXRhICY9IH4oMSA8PCA4KTsKKyAgICAgICAgZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQM19WUl9DVFJMLCBwaHlfZGF0YSk7CiAKICAgICAgICAgLyogUmVhZCBpdCBiYWNrIGFuZCB0ZXN0ICovCiAgICAgICAgIGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQM19WUl9DVFJMLCAmcGh5X2RhdGEpOwotICAgICAgICBpZiAoKHBoeV9kYXRhICYgSUdQM19WUl9DVFJMX01PREVfU0hVVCkgfHwgcmV0cnkpCisgICAgICAgIGlmICgoKHBoeV9kYXRhICYgSUdQM19WUl9DVFJMX01PREVfTUFTSykgPT0gSUdQM19WUl9DVFJMX01PREVfU0hVVCkgfHwgcmV0cnkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvKiBJc3N1ZSBQSFkgcmVzZXQgYW5kIHJlcGVhdCBhdCBtb3N0IG9uZSBtb3JlIHRpbWUgKi8KQEAgLTQ1NDksNyArNDU1NSw3IEBACiAgICAgY2FzZSBlMTAwMF9pY2g4bGFuOgogICAgICAgICB7CiAgICAgICAgIGludDMyX3QgIGkgPSAwOwotICAgICAgICB1aW50MzJfdCBmbGFzaF9zaXplID0gRTEwMDBfUkVBRF9JQ0g4X1JFRyhodywgSUNIOF9GTEFTSF9HRlBSRUcpOworICAgICAgICB1aW50MzJfdCBmbGFzaF9zaXplID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHKGh3LCBJQ0hfRkxBU0hfR0ZQUkVHKTsKIAogICAgICAgICBlZXByb20tPnR5cGUgPSBlMTAwMF9lZXByb21faWNoODsKICAgICAgICAgZWVwcm9tLT51c2VfZWVyZCA9IEZBTFNFOwpAQCAtNDU2NSwxMiArNDU3MSwxNCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaHctPmZsYXNoX2Jhc2VfYWRkciA9IChmbGFzaF9zaXplICYgSUNIOF9HRlBSRUdfQkFTRV9NQVNLKSAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ0g4X0ZMQVNIX1NFQ1RPUl9TSVpFOworICAgICAgICBody0+Zmxhc2hfYmFzZV9hZGRyID0gKGZsYXNoX3NpemUgJiBJQ0hfR0ZQUkVHX0JBU0VfTUFTSykgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNIX0ZMQVNIX1NFQ1RPUl9TSVpFOwogCi0gICAgICAgIGh3LT5mbGFzaF9iYW5rX3NpemUgPSAoKGZsYXNoX3NpemUgPj4gMTYpICYgSUNIOF9HRlBSRUdfQkFTRV9NQVNLKSArIDE7Ci0gICAgICAgIGh3LT5mbGFzaF9iYW5rX3NpemUgLT0gKGZsYXNoX3NpemUgJiBJQ0g4X0dGUFJFR19CQVNFX01BU0spOwotICAgICAgICBody0+Zmxhc2hfYmFua19zaXplICo9IElDSDhfRkxBU0hfU0VDVE9SX1NJWkU7CisgICAgICAgIGh3LT5mbGFzaF9iYW5rX3NpemUgPSAoKGZsYXNoX3NpemUgPj4gMTYpICYgSUNIX0dGUFJFR19CQVNFX01BU0spICsgMTsKKyAgICAgICAgaHctPmZsYXNoX2Jhbmtfc2l6ZSAtPSAoZmxhc2hfc2l6ZSAmIElDSF9HRlBSRUdfQkFTRV9NQVNLKTsKKworICAgICAgICBody0+Zmxhc2hfYmFua19zaXplICo9IElDSF9GTEFTSF9TRUNUT1JfU0laRTsKKwogICAgICAgICBody0+Zmxhc2hfYmFua19zaXplIC89IDIgKiBzaXplb2YodWludDE2X3QpOwogCiAgICAgICAgIGJyZWFrOwpAQCAtNTYyMCw4ICs1NjI4LDggQEAKICAgICAgICAgICAgICAgICAgKiBzaWduYXR1cmUgaXMgdmFsaWQuICBXZSB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgdGhlIHdyaXRlCiAgICAgICAgICAgICAgICAgICogaGFzIGNvbXBsZXRlZCBzbyB0aGF0IHdlIGRvbid0IG1hcmsgdGhlIHNlZ21lbnQgdmFsaWQKICAgICAgICAgICAgICAgICAgKiB3aGlsZSB0aGUgd3JpdGUgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KLSAgICAgICAgICAgICAgICBpZiAoaSA9PSBFMTAwMF9JQ0g4X05WTV9TSUdfV09SRCkKLSAgICAgICAgICAgICAgICAgICAgaGlnaF9ieXRlID0gRTEwMDBfSUNIOF9OVk1fU0lHX01BU0sgfCBoaWdoX2J5dGU7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gRTEwMDBfSUNIX05WTV9TSUdfV09SRCkKKyAgICAgICAgICAgICAgICAgICAgaGlnaF9ieXRlID0gRTEwMDBfSUNIX05WTV9TSUdfTUFTSyB8IGhpZ2hfYnl0ZTsKIAogICAgICAgICAgICAgICAgIGVycm9yID0gZTEwMDBfdmVyaWZ5X3dyaXRlX2ljaDhfYnl0ZShodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSA8PCAxKSArIG5ld19iYW5rX29mZnNldCArIDEsIGhpZ2hfYnl0ZSk7CkBAIC01NjQzLDE4ICs1NjUxLDE4IEBACiAgICAgICAgICAgICAgKiBlcmFzZSBhcyB3ZWxsIHNpbmNlIHRoZXNlIGJpdHMgYXJlIDExIHRvIHN0YXJ0IHdpdGgKICAgICAgICAgICAgICAqIGFuZCB3ZSBuZWVkIHRvIGNoYW5nZSBiaXQgMTQgdG8gMGIgKi8KICAgICAgICAgICAgIGUxMDAwX3JlYWRfaWNoOF9ieXRlKGh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfSUNIOF9OVk1fU0lHX1dPUkQgKiAyICsgMSArIG5ld19iYW5rX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0lDSF9OVk1fU0lHX1dPUkQgKiAyICsgMSArIG5ld19iYW5rX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaWdoX2J5dGUpOwogICAgICAgICAgICAgaGlnaF9ieXRlICY9IDB4QkY7CiAgICAgICAgICAgICBlcnJvciA9IGUxMDAwX3ZlcmlmeV93cml0ZV9pY2g4X2J5dGUoaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9JQ0g4X05WTV9TSUdfV09SRCAqIDIgKyAxICsgbmV3X2Jhbmtfb2Zmc2V0LCBoaWdoX2J5dGUpOworICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfSUNIX05WTV9TSUdfV09SRCAqIDIgKyAxICsgbmV3X2Jhbmtfb2Zmc2V0LCBoaWdoX2J5dGUpOwogICAgICAgICAgICAgLyogQW5kIGludmFsaWRhdGUgdGhlIHByZXZpb3VzbHkgdmFsaWQgc2VnbWVudCBieSBzZXR0aW5nCiAgICAgICAgICAgICAgKiBpdHMgc2lnbmF0dXJlIHdvcmQgKDB4MTMpIGhpZ2hfYnl0ZSB0byAwYi4gVGhpcyBjYW4gYmUKICAgICAgICAgICAgICAqIGRvbmUgd2l0aG91dCBhbiBlcmFzZSBiZWNhdXNlIGZsYXNoIGVyYXNlIHNldHMgYWxsIGJpdHMKICAgICAgICAgICAgICAqIHRvIDEncy4gV2UgY2FuIHdyaXRlIDEncyB0byAwJ3Mgd2l0aG91dCBhbiBlcmFzZSAqLwogICAgICAgICAgICAgaWYgKGVycm9yID09IEUxMDAwX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBlcnJvciA9IGUxMDAwX3ZlcmlmeV93cml0ZV9pY2g4X2J5dGUoaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfSUNIOF9OVk1fU0lHX1dPUkQgKiAyICsgMSArIG9sZF9iYW5rX29mZnNldCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfSUNIX05WTV9TSUdfV09SRCAqIDIgKyAxICsgb2xkX2Jhbmtfb2Zmc2V0LCAwKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogQ2xlYXIgdGhlIG5vdyBub3QgdXNlZCBlbnRyeSBpbiB0aGUgY2FjaGUgKi8KQEAgLTU4NDEsNiArNTg0OSw3IEBACiAgICAgaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIDB4N0Y7CiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQogICAgICAgICBoYXNoX3JlZyAmPSAweDFGOworCiAgICAgaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKIAogICAgIG10YSA9IEUxMDAwX1JFQURfUkVHX0FSUkFZKGh3LCBNVEEsIGhhc2hfcmVnKTsKQEAgLTYwMjYsNiArNjAzNSw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGVlcHJvbV9kYXRhID0gSURfTEVEX0RFRkFVTFQ7CiAgICAgfQorCiAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgICB0ZW1wID0gKGVlcHJvbV9kYXRhID4+IChpIDw8IDIpKSAmIGxlZF9tYXNrOwogICAgICAgICBzd2l0Y2ggKHRlbXApIHsKQEAgLTg0ODYsNyArODQ5Niw3IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2ljaDhfY3ljbGVfaW5pdCIpOwogCi0gICAgaHNmc3RzLnJlZ3ZhbCA9IEUxMDAwX1JFQURfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZTVFMpOworICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSF9GTEFTSF9SRUcxNihodywgSUNIX0ZMQVNIX0hTRlNUUyk7CiAKICAgICAvKiBNYXkgYmUgY2hlY2sgdGhlIEZsYXNoIERlcyBWYWxpZCBiaXQgaW4gSHcgc3RhdHVzICovCiAgICAgaWYgKGhzZnN0cy5oc2Zfc3RhdHVzLmZsZGVzdmFsaWQgPT0gMCkgewpAQCAtODQ5OSw3ICs4NTA5LDcgQEAKICAgICBoc2ZzdHMuaHNmX3N0YXR1cy5mbGNlcnIgPSAxOwogICAgIGhzZnN0cy5oc2Zfc3RhdHVzLmRhZWwgPSAxOwogCi0gICAgRTEwMDBfV1JJVEVfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOworICAgIEUxMDAwX1dSSVRFX0lDSF9GTEFTSF9SRUcxNihodywgSUNIX0ZMQVNIX0hTRlNUUywgaHNmc3RzLnJlZ3ZhbCk7CiAKICAgICAvKiBFaXRoZXIgd2Ugc2hvdWxkIGhhdmUgYSBoYXJkd2FyZSBTUEkgY3ljbGUgaW4gcHJvZ3Jlc3MgYml0IHRvIGNoZWNrCiAgICAgICogYWdhaW5zdCwgaW4gb3JkZXIgdG8gc3RhcnQgYSBuZXcgY3ljbGUgb3IgRkRPTkUgYml0IHNob3VsZCBiZSBjaGFuZ2VkCkBAIC04NTE0LDEzICs4NTI0LDEzIEBACiAgICAgICAgIC8qIFRoZXJlIGlzIG5vIGN5Y2xlIHJ1bm5pbmcgYXQgcHJlc2VudCwgc28gd2UgY2FuIHN0YXJ0IGEgY3ljbGUgKi8KICAgICAgICAgLyogQmVnaW4gYnkgc2V0dGluZyBGbGFzaCBDeWNsZSBEb25lLiAqLwogICAgICAgICBoc2ZzdHMuaHNmX3N0YXR1cy5mbGNkb25lID0gMTsKLSAgICAgICAgRTEwMDBfV1JJVEVfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOworICAgICAgICBFMTAwMF9XUklURV9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOwogICAgICAgICBlcnJvciA9IEUxMDAwX1NVQ0NFU1M7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogb3RoZXJ3aXNlIHBvbGwgZm9yIHNvbWV0aW1lIHNvIHRoZSBjdXJyZW50IGN5Y2xlIGhhcyBhIGNoYW5jZQogICAgICAgICAgKiB0byBlbmQgYmVmb3JlIGdpdmluZyB1cC4gKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IElDSDhfRkxBU0hfQ09NTUFORF9USU1FT1VUOyBpKyspIHsKLSAgICAgICAgICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSDhfUkVHMTYoaHcsIElDSDhfRkxBU0hfSFNGU1RTKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElDSF9GTEFTSF9DT01NQU5EX1RJTUVPVVQ7IGkrKykgeworICAgICAgICAgICAgaHNmc3RzLnJlZ3ZhbCA9IEUxMDAwX1JFQURfSUNIX0ZMQVNIX1JFRzE2KGh3LCBJQ0hfRkxBU0hfSFNGU1RTKTsKICAgICAgICAgICAgIGlmIChoc2ZzdHMuaHNmX3N0YXR1cy5mbGNpbnByb2cgPT0gMCkgewogICAgICAgICAgICAgICAgIGVycm9yID0gRTEwMDBfU1VDQ0VTUzsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg1MzEsNyArODU0MSw3IEBACiAgICAgICAgICAgICAvKiBTdWNjZXNzZnVsIGluIHdhaXRpbmcgZm9yIHByZXZpb3VzIGN5Y2xlIHRvIHRpbWVvdXQsCiAgICAgICAgICAgICAgKiBub3cgc2V0IHRoZSBGbGFzaCBDeWNsZSBEb25lLiAqLwogICAgICAgICAgICAgaHNmc3RzLmhzZl9zdGF0dXMuZmxjZG9uZSA9IDE7Ci0gICAgICAgICAgICBFMTAwMF9XUklURV9JQ0g4X1JFRzE2KGh3LCBJQ0g4X0ZMQVNIX0hTRlNUUywgaHNmc3RzLnJlZ3ZhbCk7CisgICAgICAgICAgICBFMTAwMF9XUklURV9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZTVFMsIGhzZnN0cy5yZWd2YWwpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgREVCVUdPVVQoIkZsYXNoIGNvbnRyb2xsZXIgYnVzeSwgY2Fubm90IGdldCBhY2Nlc3MiKTsKICAgICAgICAgfQpAQCAtODU1MywxMyArODU2MywxMyBAQAogICAgIHVpbnQzMl90IGkgPSAwOwogCiAgICAgLyogU3RhcnQgYSBjeWNsZSBieSB3cml0aW5nIDEgaW4gRmxhc2ggQ3ljbGUgR28gaW4gSHcgRmxhc2ggQ29udHJvbCAqLwotICAgIGhzZmxjdGwucmVndmFsID0gRTEwMDBfUkVBRF9JQ0g4X1JFRzE2KGh3LCBJQ0g4X0ZMQVNIX0hTRkNUTCk7CisgICAgaHNmbGN0bC5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSF9GTEFTSF9SRUcxNihodywgSUNIX0ZMQVNIX0hTRkNUTCk7CiAgICAgaHNmbGN0bC5oc2ZfY3RybC5mbGNnbyA9IDE7Ci0gICAgRTEwMDBfV1JJVEVfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZDVEwsIGhzZmxjdGwucmVndmFsKTsKKyAgICBFMTAwMF9XUklURV9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZDVEwsIGhzZmxjdGwucmVndmFsKTsKIAogICAgIC8qIHdhaXQgdGlsbCBGRE9ORSBiaXQgaXMgc2V0IHRvIDEgKi8KICAgICBkbyB7Ci0gICAgICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSDhfUkVHMTYoaHcsIElDSDhfRkxBU0hfSFNGU1RTKTsKKyAgICAgICAgaHNmc3RzLnJlZ3ZhbCA9IEUxMDAwX1JFQURfSUNIX0ZMQVNIX1JFRzE2KGh3LCBJQ0hfRkxBU0hfSFNGU1RTKTsKICAgICAgICAgaWYgKGhzZnN0cy5oc2Zfc3RhdHVzLmZsY2RvbmUgPT0gMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB1ZGVsYXkoMSk7CkBAIC04NTkzLDEwICs4NjAzLDEwIEBACiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWFkX2ljaDhfZGF0YSIpOwogCiAgICAgaWYgKHNpemUgPCAxICB8fCBzaXplID4gMiB8fCBkYXRhID09IDB4MCB8fAotICAgICAgICBpbmRleCA+IElDSDhfRkxBU0hfTElORUFSX0FERFJfTUFTSykKKyAgICAgICAgaW5kZXggPiBJQ0hfRkxBU0hfTElORUFSX0FERFJfTUFTSykKICAgICAgICAgcmV0dXJuIGVycm9yOwogCi0gICAgZmxhc2hfbGluZWFyX2FkZHJlc3MgPSAoSUNIOF9GTEFTSF9MSU5FQVJfQUREUl9NQVNLICYgaW5kZXgpICsKKyAgICBmbGFzaF9saW5lYXJfYWRkcmVzcyA9IChJQ0hfRkxBU0hfTElORUFSX0FERFJfTUFTSyAmIGluZGV4KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+Zmxhc2hfYmFzZV9hZGRyOwogCiAgICAgZG8gewpAQCAtODYwNiwyNSArODYxNiwyNSBAQAogICAgICAgICBpZiAoZXJyb3IgIT0gRTEwMDBfU1VDQ0VTUykKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGhzZmxjdGwucmVndmFsID0gRTEwMDBfUkVBRF9JQ0g4X1JFRzE2KGh3LCBJQ0g4X0ZMQVNIX0hTRkNUTCk7CisgICAgICAgIGhzZmxjdGwucmVndmFsID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZDVEwpOwogICAgICAgICAvKiAwYi8xYiBjb3JyZXNwb25kcyB0byAxIG9yIDIgYnl0ZSBzaXplLCByZXNwZWN0aXZlbHkuICovCiAgICAgICAgIGhzZmxjdGwuaHNmX2N0cmwuZmxkYmNvdW50ID0gc2l6ZSAtIDE7Ci0gICAgICAgIGhzZmxjdGwuaHNmX2N0cmwuZmxjeWNsZSA9IElDSDhfQ1lDTEVfUkVBRDsKLSAgICAgICAgRTEwMDBfV1JJVEVfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZDVEwsIGhzZmxjdGwucmVndmFsKTsKKyAgICAgICAgaHNmbGN0bC5oc2ZfY3RybC5mbGN5Y2xlID0gSUNIX0NZQ0xFX1JFQUQ7CisgICAgICAgIEUxMDAwX1dSSVRFX0lDSF9GTEFTSF9SRUcxNihodywgSUNIX0ZMQVNIX0hTRkNUTCwgaHNmbGN0bC5yZWd2YWwpOwogCiAgICAgICAgIC8qIFdyaXRlIHRoZSBsYXN0IDI0IGJpdHMgb2YgaW5kZXggaW50byBGbGFzaCBMaW5lYXIgYWRkcmVzcyBmaWVsZCBpbgogICAgICAgICAgKiBGbGFzaCBBZGRyZXNzICovCiAgICAgICAgIC8qIFRPRE86IFRCRCBtYXliZSBjaGVjayB0aGUgaW5kZXggYWdhaW5zdCB0aGUgc2l6ZSBvZiBmbGFzaCAqLwogCi0gICAgICAgIEUxMDAwX1dSSVRFX0lDSDhfUkVHKGh3LCBJQ0g4X0ZMQVNIX0ZBRERSLCBmbGFzaF9saW5lYXJfYWRkcmVzcyk7CisgICAgICAgIEUxMDAwX1dSSVRFX0lDSF9GTEFTSF9SRUcoaHcsIElDSF9GTEFTSF9GQUREUiwgZmxhc2hfbGluZWFyX2FkZHJlc3MpOwogCi0gICAgICAgIGVycm9yID0gZTEwMDBfaWNoOF9mbGFzaF9jeWNsZShodywgSUNIOF9GTEFTSF9DT01NQU5EX1RJTUVPVVQpOworICAgICAgICBlcnJvciA9IGUxMDAwX2ljaDhfZmxhc2hfY3ljbGUoaHcsIElDSF9GTEFTSF9DT01NQU5EX1RJTUVPVVQpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIEZDRVJSIGlzIHNldCB0byAxLCBpZiBzZXQgdG8gMSwgY2xlYXIgaXQgYW5kIHRyeSB0aGUgd2hvbGUKICAgICAgICAgICogc2VxdWVuY2UgYSBmZXcgbW9yZSB0aW1lcywgZWxzZSByZWFkIGluIChzaGlmdCBpbikgdGhlIEZsYXNoIERhdGEwLAogICAgICAgICAgKiB0aGUgb3JkZXIgaXMgbGVhc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCBtc2IgdG8gbHNiICovCiAgICAgICAgIGlmIChlcnJvciA9PSBFMTAwMF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBmbGFzaF9kYXRhID0gRTEwMDBfUkVBRF9JQ0g4X1JFRyhodywgSUNIOF9GTEFTSF9GREFUQTApOworICAgICAgICAgICAgZmxhc2hfZGF0YSA9IEUxMDAwX1JFQURfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0ZEQVRBMCk7CiAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgKmRhdGEgPSAodWludDhfdCkoZmxhc2hfZGF0YSAmIDB4MDAwMDAwRkYpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChzaXplID09IDIpIHsKQEAgLTg2MzQsOSArODY0NCw5IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBJZiB3ZSd2ZSBnb3R0ZW4gaGVyZSwgdGhlbiB0aGluZ3MgYXJlIHByb2JhYmx5IGNvbXBsZXRlbHkgaG9zZWQsCiAgICAgICAgICAgICAgKiBidXQgaWYgdGhlIGVycm9yIGNvbmRpdGlvbiBpcyBkZXRlY3RlZCwgaXQgd29uJ3QgaHVydCB0byBnaXZlCi0gICAgICAgICAgICAgKiBpdCBhbm90aGVyIHRyeS4uLklDSDhfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UIHRpbWVzLgorICAgICAgICAgICAgICogaXQgYW5vdGhlciB0cnkuLi5JQ0hfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UIHRpbWVzLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBoc2ZzdHMucmVndmFsID0gRTEwMDBfUkVBRF9JQ0g4X1JFRzE2KGh3LCBJQ0g4X0ZMQVNIX0hTRlNUUyk7CisgICAgICAgICAgICBoc2ZzdHMucmVndmFsID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZTVFMpOwogICAgICAgICAgICAgaWYgKGhzZnN0cy5oc2Zfc3RhdHVzLmZsY2VyciA9PSAxKSB7CiAgICAgICAgICAgICAgICAgLyogUmVwZWF0IGZvciBzb21lIHRpbWUgYmVmb3JlIGdpdmluZyB1cC4gKi8KICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTg2NDUsNyArODY1NSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IHdoaWxlIChjb3VudCsrIDwgSUNIOF9GTEFTSF9DWUNMRV9SRVBFQVRfQ09VTlQpOworICAgIH0gd2hpbGUgKGNvdW50KysgPCBJQ0hfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UKTsKIAogICAgIHJldHVybiBlcnJvcjsKIH0KQEAgLTg2NzIsMTAgKzg2ODIsMTAgQEAKICAgICBERUJVR0ZVTkMoImUxMDAwX3dyaXRlX2ljaDhfZGF0YSIpOwogCiAgICAgaWYgKHNpemUgPCAxICB8fCBzaXplID4gMiB8fCBkYXRhID4gc2l6ZSAqIDB4ZmYgfHwKLSAgICAgICAgaW5kZXggPiBJQ0g4X0ZMQVNIX0xJTkVBUl9BRERSX01BU0spCisgICAgICAgIGluZGV4ID4gSUNIX0ZMQVNIX0xJTkVBUl9BRERSX01BU0spCiAgICAgICAgIHJldHVybiBlcnJvcjsKIAotICAgIGZsYXNoX2xpbmVhcl9hZGRyZXNzID0gKElDSDhfRkxBU0hfTElORUFSX0FERFJfTUFTSyAmIGluZGV4KSArCisgICAgZmxhc2hfbGluZWFyX2FkZHJlc3MgPSAoSUNIX0ZMQVNIX0xJTkVBUl9BRERSX01BU0sgJiBpbmRleCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmZsYXNoX2Jhc2VfYWRkcjsKIAogICAgIGRvIHsKQEAgLTg2ODUsMzQgKzg2OTUsMzQgQEAKICAgICAgICAgaWYgKGVycm9yICE9IEUxMDAwX1NVQ0NFU1MpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBoc2ZsY3RsLnJlZ3ZhbCA9IEUxMDAwX1JFQURfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZDVEwpOworICAgICAgICBoc2ZsY3RsLnJlZ3ZhbCA9IEUxMDAwX1JFQURfSUNIX0ZMQVNIX1JFRzE2KGh3LCBJQ0hfRkxBU0hfSFNGQ1RMKTsKICAgICAgICAgLyogMGIvMWIgY29ycmVzcG9uZHMgdG8gMSBvciAyIGJ5dGUgc2l6ZSwgcmVzcGVjdGl2ZWx5LiAqLwogICAgICAgICBoc2ZsY3RsLmhzZl9jdHJsLmZsZGJjb3VudCA9IHNpemUgLTE7Ci0gICAgICAgIGhzZmxjdGwuaHNmX2N0cmwuZmxjeWNsZSA9IElDSDhfQ1lDTEVfV1JJVEU7Ci0gICAgICAgIEUxMDAwX1dSSVRFX0lDSDhfUkVHMTYoaHcsIElDSDhfRkxBU0hfSFNGQ1RMLCBoc2ZsY3RsLnJlZ3ZhbCk7CisgICAgICAgIGhzZmxjdGwuaHNmX2N0cmwuZmxjeWNsZSA9IElDSF9DWUNMRV9XUklURTsKKyAgICAgICAgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRzE2KGh3LCBJQ0hfRkxBU0hfSFNGQ1RMLCBoc2ZsY3RsLnJlZ3ZhbCk7CiAKICAgICAgICAgLyogV3JpdGUgdGhlIGxhc3QgMjQgYml0cyBvZiBpbmRleCBpbnRvIEZsYXNoIExpbmVhciBhZGRyZXNzIGZpZWxkIGluCiAgICAgICAgICAqIEZsYXNoIEFkZHJlc3MgKi8KLSAgICAgICAgRTEwMDBfV1JJVEVfSUNIOF9SRUcoaHcsIElDSDhfRkxBU0hfRkFERFIsIGZsYXNoX2xpbmVhcl9hZGRyZXNzKTsKKyAgICAgICAgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0ZBRERSLCBmbGFzaF9saW5lYXJfYWRkcmVzcyk7CiAKICAgICAgICAgaWYgKHNpemUgPT0gMSkKICAgICAgICAgICAgIGZsYXNoX2RhdGEgPSAodWludDMyX3QpZGF0YSAmIDB4MDBGRjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZmxhc2hfZGF0YSA9ICh1aW50MzJfdClkYXRhOwogCi0gICAgICAgIEUxMDAwX1dSSVRFX0lDSDhfUkVHKGh3LCBJQ0g4X0ZMQVNIX0ZEQVRBMCwgZmxhc2hfZGF0YSk7CisgICAgICAgIEUxMDAwX1dSSVRFX0lDSF9GTEFTSF9SRUcoaHcsIElDSF9GTEFTSF9GREFUQTAsIGZsYXNoX2RhdGEpOwogCiAgICAgICAgIC8qIGNoZWNrIGlmIEZDRVJSIGlzIHNldCB0byAxICwgaWYgc2V0IHRvIDEsIGNsZWFyIGl0IGFuZCB0cnkgdGhlIHdob2xlCiAgICAgICAgICAqIHNlcXVlbmNlIGEgZmV3IG1vcmUgdGltZXMgZWxzZSBkb25lICovCi0gICAgICAgIGVycm9yID0gZTEwMDBfaWNoOF9mbGFzaF9jeWNsZShodywgSUNIOF9GTEFTSF9DT01NQU5EX1RJTUVPVVQpOworICAgICAgICBlcnJvciA9IGUxMDAwX2ljaDhfZmxhc2hfY3ljbGUoaHcsIElDSF9GTEFTSF9DT01NQU5EX1RJTUVPVVQpOwogICAgICAgICBpZiAoZXJyb3IgPT0gRTEwMDBfU1VDQ0VTUykgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBJZiB3ZSdyZSBoZXJlLCB0aGVuIHRoaW5ncyBhcmUgbW9zdCBsaWtlbHkgY29tcGxldGVseSBob3NlZCwKICAgICAgICAgICAgICAqIGJ1dCBpZiB0aGUgZXJyb3IgY29uZGl0aW9uIGlzIGRldGVjdGVkLCBpdCB3b24ndCBodXJ0IHRvIGdpdmUKLSAgICAgICAgICAgICAqIGl0IGFub3RoZXIgdHJ5Li4uSUNIOF9GTEFTSF9DWUNMRV9SRVBFQVRfQ09VTlQgdGltZXMuCisgICAgICAgICAgICAgKiBpdCBhbm90aGVyIHRyeS4uLklDSF9GTEFTSF9DWUNMRV9SRVBFQVRfQ09VTlQgdGltZXMuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSDhfUkVHMTYoaHcsIElDSDhfRkxBU0hfSFNGU1RTKTsKKyAgICAgICAgICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSF9GTEFTSF9SRUcxNihodywgSUNIX0ZMQVNIX0hTRlNUUyk7CiAgICAgICAgICAgICBpZiAoaHNmc3RzLmhzZl9zdGF0dXMuZmxjZXJyID09IDEpIHsKICAgICAgICAgICAgICAgICAvKiBSZXBlYXQgZm9yIHNvbWUgdGltZSBiZWZvcmUgZ2l2aW5nIHVwLiAqLwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODcyMSw3ICs4NzMxLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gd2hpbGUgKGNvdW50KysgPCBJQ0g4X0ZMQVNIX0NZQ0xFX1JFUEVBVF9DT1VOVCk7CisgICAgfSB3aGlsZSAoY291bnQrKyA8IElDSF9GTEFTSF9DWUNMRV9SRVBFQVRfQ09VTlQpOwogCiAgICAgcmV0dXJuIGVycm9yOwogfQpAQCAtODg0MCw3ICs4ODUwLDcgQEAKICAgICBpbnQzMl90ICBqID0gMDsKICAgICBpbnQzMl90ICBlcnJvcl9mbGFnID0gMDsKIAotICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSDhfUkVHMTYoaHcsIElDSDhfRkxBU0hfSFNGU1RTKTsKKyAgICBoc2ZzdHMucmVndmFsID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZTVFMpOwogCiAgICAgLyogRGV0ZXJtaW5lIEhXIFNlY3RvciBzaXplOiBSZWFkIEJFUkFTRSBiaXRzIG9mIEh3IGZsYXNoIFN0YXR1cyByZWdpc3RlciAqLwogICAgIC8qIDAwOiBUaGUgSHcgc2VjdG9yIGlzIDI1NiBieXRlcywgaGVuY2Ugd2UgbmVlZCB0byBlcmFzZSAxNgpAQCAtODg1MywxOSArODg2MywxNCBAQAogICAgICAqIDExOiBUaGUgSHcgc2VjdG9yIHNpemUgaXMgNjRLIGJ5dGVzICovCiAgICAgaWYgKGhzZnN0cy5oc2Zfc3RhdHVzLmJlcmFzZXN6ID09IDB4MCkgewogICAgICAgICAvKiBIdyBzZWN0b3Igc2l6ZSAyNTYgKi8KLSAgICAgICAgc3ViX3NlY3Rvcl9zaXplID0gSUNIOF9GTEFTSF9TRUdfU0laRV8yNTY7Ci0gICAgICAgIGJhbmtfc2l6ZSA9IElDSDhfRkxBU0hfU0VDVE9SX1NJWkU7Ci0gICAgICAgIGl0ZXJhdGlvbiA9IElDSDhfRkxBU0hfU0VDVE9SX1NJWkUgLyBJQ0g4X0ZMQVNIX1NFR19TSVpFXzI1NjsKKyAgICAgICAgc3ViX3NlY3Rvcl9zaXplID0gSUNIX0ZMQVNIX1NFR19TSVpFXzI1NjsKKyAgICAgICAgYmFua19zaXplID0gSUNIX0ZMQVNIX1NFQ1RPUl9TSVpFOworICAgICAgICBpdGVyYXRpb24gPSBJQ0hfRkxBU0hfU0VDVE9SX1NJWkUgLyBJQ0hfRkxBU0hfU0VHX1NJWkVfMjU2OwogICAgIH0gZWxzZSBpZiAoaHNmc3RzLmhzZl9zdGF0dXMuYmVyYXNlc3ogPT0gMHgxKSB7Ci0gICAgICAgIGJhbmtfc2l6ZSA9IElDSDhfRkxBU0hfU0VHX1NJWkVfNEs7Ci0gICAgICAgIGl0ZXJhdGlvbiA9IDE7Ci0gICAgfSBlbHNlIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfaWNoOGxhbiAmJgotICAgICAgICAgICAgICAgaHNmc3RzLmhzZl9zdGF0dXMuYmVyYXNlc3ogPT0gMHgyKSB7Ci0gICAgICAgIC8qIDhLIGVyYXNlIHNpemUgaW52YWxpZCBmb3IgSUNIOCAtIGFkZGVkIGluIGZvciBJQ0g5ICovCi0gICAgICAgIGJhbmtfc2l6ZSA9IElDSDlfRkxBU0hfU0VHX1NJWkVfOEs7CisgICAgICAgIGJhbmtfc2l6ZSA9IElDSF9GTEFTSF9TRUdfU0laRV80SzsKICAgICAgICAgaXRlcmF0aW9uID0gMTsKICAgICB9IGVsc2UgaWYgKGhzZnN0cy5oc2Zfc3RhdHVzLmJlcmFzZXN6ID09IDB4MykgewotICAgICAgICBiYW5rX3NpemUgPSBJQ0g4X0ZMQVNIX1NFR19TSVpFXzY0SzsKKyAgICAgICAgYmFua19zaXplID0gSUNIX0ZMQVNIX1NFR19TSVpFXzY0SzsKICAgICAgICAgaXRlcmF0aW9uID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICByZXR1cm4gZXJyb3I7CkBAIC04ODgzLDkgKzg4ODgsOSBAQAogCiAgICAgICAgICAgICAvKiBXcml0ZSBhIHZhbHVlIDExIChibG9jayBFcmFzZSkgaW4gRmxhc2ggQ3ljbGUgZmllbGQgaW4gSHcgZmxhc2gKICAgICAgICAgICAgICAqIENvbnRyb2wgKi8KLSAgICAgICAgICAgIGhzZmxjdGwucmVndmFsID0gRTEwMDBfUkVBRF9JQ0g4X1JFRzE2KGh3LCBJQ0g4X0ZMQVNIX0hTRkNUTCk7Ci0gICAgICAgICAgICBoc2ZsY3RsLmhzZl9jdHJsLmZsY3ljbGUgPSBJQ0g4X0NZQ0xFX0VSQVNFOwotICAgICAgICAgICAgRTEwMDBfV1JJVEVfSUNIOF9SRUcxNihodywgSUNIOF9GTEFTSF9IU0ZDVEwsIGhzZmxjdGwucmVndmFsKTsKKyAgICAgICAgICAgIGhzZmxjdGwucmVndmFsID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZDVEwpOworICAgICAgICAgICAgaHNmbGN0bC5oc2ZfY3RybC5mbGN5Y2xlID0gSUNIX0NZQ0xFX0VSQVNFOworICAgICAgICAgICAgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRzE2KGh3LCBJQ0hfRkxBU0hfSFNGQ1RMLCBoc2ZsY3RsLnJlZ3ZhbCk7CiAKICAgICAgICAgICAgIC8qIFdyaXRlIHRoZSBsYXN0IDI0IGJpdHMgb2YgYW4gaW5kZXggd2l0aGluIHRoZSBibG9jayBpbnRvIEZsYXNoCiAgICAgICAgICAgICAgKiBMaW5lYXIgYWRkcmVzcyBmaWVsZCBpbiBGbGFzaCBBZGRyZXNzLiAgVGhpcyBwcm9iYWJseSBuZWVkcyB0bwpAQCAtODg5MywxNyArODg5OCwxNyBAQAogICAgICAgICAgICAgICogdGhlIHNvZnR3YXJlIGJhbmsgc2l6ZSAoNCwgOCBvciA2NCBLQnl0ZXMpICovCiAgICAgICAgICAgICBmbGFzaF9saW5lYXJfYWRkcmVzcyA9IGJhbmsgKiBiYW5rX3NpemUgKyBqICogc3ViX3NlY3Rvcl9zaXplOwogICAgICAgICAgICAgZmxhc2hfbGluZWFyX2FkZHJlc3MgKz0gaHctPmZsYXNoX2Jhc2VfYWRkcjsKLSAgICAgICAgICAgIGZsYXNoX2xpbmVhcl9hZGRyZXNzICY9IElDSDhfRkxBU0hfTElORUFSX0FERFJfTUFTSzsKKyAgICAgICAgICAgIGZsYXNoX2xpbmVhcl9hZGRyZXNzICY9IElDSF9GTEFTSF9MSU5FQVJfQUREUl9NQVNLOwogCi0gICAgICAgICAgICBFMTAwMF9XUklURV9JQ0g4X1JFRyhodywgSUNIOF9GTEFTSF9GQUREUiwgZmxhc2hfbGluZWFyX2FkZHJlc3MpOworICAgICAgICAgICAgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRyhodywgSUNIX0ZMQVNIX0ZBRERSLCBmbGFzaF9saW5lYXJfYWRkcmVzcyk7CiAKLSAgICAgICAgICAgIGVycm9yID0gZTEwMDBfaWNoOF9mbGFzaF9jeWNsZShodywgSUNIOF9GTEFTSF9FUkFTRV9USU1FT1VUKTsKKyAgICAgICAgICAgIGVycm9yID0gZTEwMDBfaWNoOF9mbGFzaF9jeWNsZShodywgSUNIX0ZMQVNIX0VSQVNFX1RJTUVPVVQpOwogICAgICAgICAgICAgLyogQ2hlY2sgaWYgRkNFUlIgaXMgc2V0IHRvIDEuICBJZiAxLCBjbGVhciBpdCBhbmQgdHJ5IHRoZSB3aG9sZQogICAgICAgICAgICAgICogc2VxdWVuY2UgYSBmZXcgbW9yZSB0aW1lcyBlbHNlIERvbmUgKi8KICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFMTAwMF9TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhzZnN0cy5yZWd2YWwgPSBFMTAwMF9SRUFEX0lDSDhfUkVHMTYoaHcsIElDSDhfRkxBU0hfSFNGU1RTKTsKKyAgICAgICAgICAgICAgICBoc2ZzdHMucmVndmFsID0gRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoaHcsIElDSF9GTEFTSF9IU0ZTVFMpOwogICAgICAgICAgICAgICAgIGlmIChoc2ZzdHMuaHNmX3N0YXR1cy5mbGNlcnIgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvKiByZXBlYXQgZm9yIHNvbWUgdGltZSBiZWZvcmUgZ2l2aW5nIHVwICovCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtODkxMiw3ICs4OTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9IHdoaWxlICgoY291bnQgPCBJQ0g4X0ZMQVNIX0NZQ0xFX1JFUEVBVF9DT1VOVCkgJiYgIWVycm9yX2ZsYWcpOworICAgICAgICB9IHdoaWxlICgoY291bnQgPCBJQ0hfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UKSAmJiAhZXJyb3JfZmxhZyk7CiAgICAgICAgIGlmIChlcnJvcl9mbGFnID09IDEpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC05MDEzLDUgKzkwMTgsMyBAQAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggNDQ5YTYwMy4uMzMyMWZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC0xMjgsMTEgKzEyOCwxMyBAQAogLyogUENJIGJ1cyB3aWR0aHMgKi8KIHR5cGVkZWYgZW51bSB7CiAgICAgZTEwMDBfYnVzX3dpZHRoX3Vua25vd24gPSAwLAorICAgIC8qIFRoZXNlIFBDSWUgdmFsdWVzIHNob3VsZCBsaXRlcmFsbHkgbWF0Y2ggdGhlIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMKKyAgICAgKiBmcm9tIGNvbmZpZyBzcGFjZSAqLworICAgIGUxMDAwX2J1c193aWR0aF9wY2lleF8xID0gMSwKKyAgICBlMTAwMF9idXNfd2lkdGhfcGNpZXhfMiA9IDIsCisgICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzQgPSA0LAogICAgIGUxMDAwX2J1c193aWR0aF8zMiwKICAgICBlMTAwMF9idXNfd2lkdGhfNjQsCi0gICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzEsCi0gICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzIsCi0gICAgZTEwMDBfYnVzX3dpZHRoX3BjaWV4XzQsCiAgICAgZTEwMDBfYnVzX3dpZHRoX3Jlc2VydmVkCiB9IGUxMDAwX2J1c193aWR0aDsKIApAQCAtMzI2LDYgKzMyOCw3IEBACiBpbnQzMl90IGUxMDAwX3BoeV9yZXNldChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGludDMyX3QgZTEwMDBfcGh5X2dldF9pbmZvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5X2luZm8pOwogaW50MzJfdCBlMTAwMF92YWxpZGF0ZV9tZGlfc2V0dGluZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKwogdm9pZCBlMTAwMF9waHlfcG93ZXJkb3duX3dvcmthcm91bmQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKIC8qIEVFUFJPTSBGdW5jdGlvbnMgKi8KQEAgLTM5MCw3ICszOTMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGxlbmd0aCk7CiBib29sZWFuX3QgZTEwMDBfY2hlY2tfbW5nX21vZGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBib29sZWFuX3QgZTEwMDBfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci0KIGludDMyX3QgZTEwMDBfcmVhZF9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgcmVnLCB1aW50MTZfdCB3b3JkcywgdWludDE2X3QgKmRhdGEpOwogaW50MzJfdCBlMTAwMF92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodyk7CiBpbnQzMl90IGUxMDAwX3VwZGF0ZV9lZXByb21fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC00NzMsNiArNDc1LDcgQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTcxRUJfRklCRVIgICAgICAgMHgxMDVGCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFUyAgICAgIDB4MTA2MAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzFFQl9RVUFEX0NPUFBFUiAweDEwQTQKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVJfTE9XUFJPRklMRSAgMHgxMEJDCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3MkVJX0NPUFBFUiAgICAgIDB4MTA3RAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzJFSV9GSUJFUiAgICAgICAweDEwN0UKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTcyRUlfU0VSREVTICAgICAgMHgxMDdGCkBAIC00OTAsNiArNDkzLDggQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEX0lDSDhfSUdQX0FNVCAgICAgICAgMHgxMDRBCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF9JQ0g4X0lHUF9DICAgICAgICAgIDB4MTA0QgogI2RlZmluZSBFMTAwMF9ERVZfSURfSUNIOF9JRkUgICAgICAgICAgICAweDEwNEMKKyNkZWZpbmUgRTEwMDBfREVWX0lEX0lDSDhfSUZFX0dUICAgICAgICAgMHgxMEM0CisjZGVmaW5lIEUxMDAwX0RFVl9JRF9JQ0g4X0lGRV9HICAgICAgICAgIDB4MTBDNQogI2RlZmluZSBFMTAwMF9ERVZfSURfSUNIOF9JR1BfTSAgICAgICAgICAweDEwNEQKIAogCkBAIC01NzYsNiArNTgxLDcgQEAKICAqIEUxMDAwX1JBUl9FTlRSSUVTIC0gMSBtdWx0aWNhc3QgYWRkcmVzc2VzLgogICovCiAjZGVmaW5lIEUxMDAwX1JBUl9FTlRSSUVTIDE1CisKICNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVNfSUNIOExBTiAgNgogCiAjZGVmaW5lIE1JTl9OVU1CRVJfT0ZfREVTQ1JJUFRPUlMgIDgKQEAgLTEzMzUsOSArMTM0MSw5IEBACiAgICAgdWludDY0X3QgZ290Y2g7CiAgICAgdWludDY0X3Qgcm5iYzsKICAgICB1aW50NjRfdCBydWM7CisgICAgdWludDY0X3QgcmZjOwogICAgIHVpbnQ2NF90IHJvYzsKICAgICB1aW50NjRfdCBybGVycmM7Ci0gICAgdWludDY0X3QgcmZjOwogICAgIHVpbnQ2NF90IHJqYzsKICAgICB1aW50NjRfdCBtZ3ByYzsKICAgICB1aW50NjRfdCBtZ3BkYzsKQEAgLTE1NzcsOCArMTU4Myw4IEBACiAjZGVmaW5lIEUxMDAwX0hJQ1JfRldfUkVTRVQgIDB4QzAKIAogI2RlZmluZSBFMTAwMF9TSEFET1dfUkFNX1dPUkRTICAgICAyMDQ4Ci0jZGVmaW5lIEUxMDAwX0lDSDhfTlZNX1NJR19XT1JEICAgIDB4MTMKLSNkZWZpbmUgRTEwMDBfSUNIOF9OVk1fU0lHX01BU0sgICAgMHhDMAorI2RlZmluZSBFMTAwMF9JQ0hfTlZNX1NJR19XT1JEICAgICAweDEzCisjZGVmaW5lIEUxMDAwX0lDSF9OVk1fU0lHX01BU0sgICAgIDB4QzAKIAogLyogRUVQUk9NIFJlYWQgKi8KICNkZWZpbmUgRTEwMDBfRUVSRF9TVEFSVCAgICAgIDB4MDAwMDAwMDEgLyogU3RhcnQgUmVhZCAqLwpAQCAtMzE3Miw2ICszMTc4LDcgQEAKICNkZWZpbmUgSUdQM19WUl9DVFJMIFwKICAgICAgICAgUEhZX1JFRyg3NzYsIDE4KSAvKiBWb2x0YWdlIHJlZ3VsYXRvciBjb250cm9sIHJlZ2lzdGVyICovCiAjZGVmaW5lIElHUDNfVlJfQ1RSTF9NT0RFX1NIVVQgICAgICAgMHgwMjAwIC8qIEVudGVyIHBvd2VyZG93biwgc2h1dGRvd24gVlJzICovCisjZGVmaW5lIElHUDNfVlJfQ1RSTF9NT0RFX01BU0sgICAgICAgMHgwMzAwIC8qIFNodXRkb3duIFZSIE1hc2sgKi8KIAogI2RlZmluZSBJR1AzX0NBUEFCSUxJVFkgXAogICAgICAgICBQSFlfUkVHKDc3NiwgMTkpIC8qIElHUDMgQ2FwYWJpbGl0eSBSZWdpc3RlciAqLwpAQCAtMzI1Niw0MSArMzI2Myw0MCBAQAogI2RlZmluZSBJRkVfUFNDTF9QUk9CRV9MRURTX09GRiAgICAgICAgICAgICAgMHgwMDA2ICAvKiBGb3JjZSBMRURzIDAgYW5kIDIgb2ZmICovCiAjZGVmaW5lIElGRV9QU0NMX1BST0JFX0xFRFNfT04gICAgICAgICAgICAgICAweDAwMDcgIC8qIEZvcmNlIExFRHMgMCBhbmQgMiBvbiAqLwogCi0jZGVmaW5lIElDSDhfRkxBU0hfQ09NTUFORF9USU1FT1VUICAgICAgICAgICA1MDAwICAgIC8qIDUwMDAgdVNlY3MgLSBhZGp1c3RlZCAqLwotI2RlZmluZSBJQ0g4X0ZMQVNIX0VSQVNFX1RJTUVPVVQgICAgICAgICAgICAgMzAwMDAwMCAvKiBVcCB0byAzIHNlY29uZHMgLSB3b3JzdCBjYXNlICovCi0jZGVmaW5lIElDSDhfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UICAgICAgICAxMCAgICAgIC8qIDEwIGN5Y2xlcyAqLwotI2RlZmluZSBJQ0g4X0ZMQVNIX1NFR19TSVpFXzI1NiAgICAgICAgICAgICAgMjU2Ci0jZGVmaW5lIElDSDhfRkxBU0hfU0VHX1NJWkVfNEsgICAgICAgICAgICAgICA0MDk2Ci0jZGVmaW5lIElDSDlfRkxBU0hfU0VHX1NJWkVfOEsgICAgICAgICAgICAgICA4MTkyCi0jZGVmaW5lIElDSDhfRkxBU0hfU0VHX1NJWkVfNjRLICAgICAgICAgICAgICA2NTUzNgorI2RlZmluZSBJQ0hfRkxBU0hfQ09NTUFORF9USU1FT1VUICAgICAgICAgICAgNTAwMCAgICAvKiA1MDAwIHVTZWNzIC0gYWRqdXN0ZWQgKi8KKyNkZWZpbmUgSUNIX0ZMQVNIX0VSQVNFX1RJTUVPVVQgICAgICAgICAgICAgIDMwMDAwMDAgLyogVXAgdG8gMyBzZWNvbmRzIC0gd29yc3QgY2FzZSAqLworI2RlZmluZSBJQ0hfRkxBU0hfQ1lDTEVfUkVQRUFUX0NPVU5UICAgICAgICAgMTAgICAgICAvKiAxMCBjeWNsZXMgKi8KKyNkZWZpbmUgSUNIX0ZMQVNIX1NFR19TSVpFXzI1NiAgICAgICAgICAgICAgIDI1NgorI2RlZmluZSBJQ0hfRkxBU0hfU0VHX1NJWkVfNEsgICAgICAgICAgICAgICAgNDA5NgorI2RlZmluZSBJQ0hfRkxBU0hfU0VHX1NJWkVfNjRLICAgICAgICAgICAgICAgNjU1MzYKIAotI2RlZmluZSBJQ0g4X0NZQ0xFX1JFQUQgICAgICAgICAgICAgICAgICAgICAgMHgwCi0jZGVmaW5lIElDSDhfQ1lDTEVfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAweDEKLSNkZWZpbmUgSUNIOF9DWUNMRV9XUklURSAgICAgICAgICAgICAgICAgICAgIDB4MgotI2RlZmluZSBJQ0g4X0NZQ0xFX0VSQVNFICAgICAgICAgICAgICAgICAgICAgMHgzCisjZGVmaW5lIElDSF9DWUNMRV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgSUNIX0NZQ0xFX1JFU0VSVkVEICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBJQ0hfQ1lDTEVfV1JJVEUgICAgICAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lIElDSF9DWUNMRV9FUkFTRSAgICAgICAgICAgICAgICAgICAgICAweDMKIAotI2RlZmluZSBJQ0g4X0ZMQVNIX0dGUFJFRyAgIDB4MDAwMAotI2RlZmluZSBJQ0g4X0ZMQVNIX0hTRlNUUyAgIDB4MDAwNAotI2RlZmluZSBJQ0g4X0ZMQVNIX0hTRkNUTCAgIDB4MDAwNgotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZBRERSICAgIDB4MDAwOAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZEQVRBMCAgIDB4MDAxMAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZSQUNDICAgIDB4MDA1MAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZSRUcwICAgIDB4MDA1NAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZSRUcxICAgIDB4MDA1OAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZSRUcyICAgIDB4MDA1QwotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZSRUczICAgIDB4MDA2MAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZQUjAgICAgIDB4MDA3NAotI2RlZmluZSBJQ0g4X0ZMQVNIX0ZQUjEgICAgIDB4MDA3OAotI2RlZmluZSBJQ0g4X0ZMQVNIX1NTRlNUUyAgIDB4MDA5MAotI2RlZmluZSBJQ0g4X0ZMQVNIX1NTRkNUTCAgIDB4MDA5MgotI2RlZmluZSBJQ0g4X0ZMQVNIX1BSRU9QICAgIDB4MDA5NAotI2RlZmluZSBJQ0g4X0ZMQVNIX09QVFlQRSAgIDB4MDA5NgotI2RlZmluZSBJQ0g4X0ZMQVNIX09QTUVOVSAgIDB4MDA5OAorI2RlZmluZSBJQ0hfRkxBU0hfR0ZQUkVHICAgMHgwMDAwCisjZGVmaW5lIElDSF9GTEFTSF9IU0ZTVFMgICAweDAwMDQKKyNkZWZpbmUgSUNIX0ZMQVNIX0hTRkNUTCAgIDB4MDAwNgorI2RlZmluZSBJQ0hfRkxBU0hfRkFERFIgICAgMHgwMDA4CisjZGVmaW5lIElDSF9GTEFTSF9GREFUQTAgICAweDAwMTAKKyNkZWZpbmUgSUNIX0ZMQVNIX0ZSQUNDICAgIDB4MDA1MAorI2RlZmluZSBJQ0hfRkxBU0hfRlJFRzAgICAgMHgwMDU0CisjZGVmaW5lIElDSF9GTEFTSF9GUkVHMSAgICAweDAwNTgKKyNkZWZpbmUgSUNIX0ZMQVNIX0ZSRUcyICAgIDB4MDA1QworI2RlZmluZSBJQ0hfRkxBU0hfRlJFRzMgICAgMHgwMDYwCisjZGVmaW5lIElDSF9GTEFTSF9GUFIwICAgICAweDAwNzQKKyNkZWZpbmUgSUNIX0ZMQVNIX0ZQUjEgICAgIDB4MDA3OAorI2RlZmluZSBJQ0hfRkxBU0hfU1NGU1RTICAgMHgwMDkwCisjZGVmaW5lIElDSF9GTEFTSF9TU0ZDVEwgICAweDAwOTIKKyNkZWZpbmUgSUNIX0ZMQVNIX1BSRU9QICAgIDB4MDA5NAorI2RlZmluZSBJQ0hfRkxBU0hfT1BUWVBFICAgMHgwMDk2CisjZGVmaW5lIElDSF9GTEFTSF9PUE1FTlUgICAweDAwOTgKIAotI2RlZmluZSBJQ0g4X0ZMQVNIX1JFR19NQVBTSVpFICAgICAgMHgwMEEwCi0jZGVmaW5lIElDSDhfRkxBU0hfU0VDVE9SX1NJWkUgICAgICA0MDk2Ci0jZGVmaW5lIElDSDhfR0ZQUkVHX0JBU0VfTUFTSyAgICAgICAweDFGRkYKLSNkZWZpbmUgSUNIOF9GTEFTSF9MSU5FQVJfQUREUl9NQVNLIDB4MDBGRkZGRkYKKyNkZWZpbmUgSUNIX0ZMQVNIX1JFR19NQVBTSVpFICAgICAgMHgwMEEwCisjZGVmaW5lIElDSF9GTEFTSF9TRUNUT1JfU0laRSAgICAgIDQwOTYKKyNkZWZpbmUgSUNIX0dGUFJFR19CQVNFX01BU0sgICAgICAgMHgxRkZGCisjZGVmaW5lIElDSF9GTEFTSF9MSU5FQVJfQUREUl9NQVNLIDB4MDBGRkZGRkYKIAogLyogSUNIOCBHYkUgRmxhc2ggSGFyZHdhcmUgU2VxdWVuY2luZyBGbGFzaCBTdGF0dXMgUmVnaXN0ZXIgYml0IGJyZWFrZG93biAqLwogLyogT2Zmc2V0IDA0aCBIU0ZTVFMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA3MjZlYzVlLi4zMmRkZTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0yNyw2ICsyNyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZTEwMDAuaCIKKyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAKIGNoYXIgZTEwMDBfZHJpdmVyX25hbWVbXSA9ICJlMTAwMCI7CiBzdGF0aWMgY2hhciBlMTAwMF9kcml2ZXJfc3RyaW5nW10gPSAiSW50ZWwoUikgUFJPLzEwMDAgTmV0d29yayBEcml2ZXIiOwpAQCAtMzUsNyArMzYsNyBAQAogI2Vsc2UKICNkZWZpbmUgRFJJVkVSTkFQSSAiLU5BUEkiCiAjZW5kaWYKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjcuMi45LWs0IkRSSVZFUk5BUEkKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjcuMy4xNS1rMiJEUklWRVJOQVBJCiBjaGFyIGUxMDAwX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjaGFyIGUxMDAwX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA2IEludGVsIENvcnBvcmF0aW9uLiI7CiAKQEAgLTEwMyw2ICsxMDQsOSBAQAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQjkpLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQkEpLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQkIpLAorCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQkMpLAorCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQzQpLAorCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwQzUpLAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCx9CiB9OwpAQCAtMTU0LDYgKzE1OCw5IEBACiBzdGF0aWMgaW50IGUxMDAwX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIGludCBlMTAwMF9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApOwogc3RhdGljIGlycXJldHVybl90IGUxMDAwX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKK3N0YXRpYyBpcnFyZXR1cm5fdCBlMTAwMF9pbnRyX21zaShpbnQgaXJxLCB2b2lkICpkYXRhKTsKKyNlbmRpZgogc3RhdGljIGJvb2xlYW5fdCBlMTAwMF9jbGVhbl90eF9pcnEoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfdHhfcmluZyAqdHhfcmluZyk7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKQEAgLTI4NSw3ICsyOTIsNyBAQAogCiAJZmxhZ3MgPSBJUlFGX1NIQVJFRDsKICNpZmRlZiBDT05GSUdfUENJX01TSQotCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CisJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTcxKSB7CiAJCWFkYXB0ZXItPmhhdmVfbXNpID0gVFJVRTsKIAkJaWYgKChlcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KSkpIHsKIAkJCURQUklOVEsoUFJPQkUsIEVSUiwKQEAgLTI5Myw4ICszMDAsMTQgQEAKIAkJCWFkYXB0ZXItPmhhdmVfbXNpID0gRkFMU0U7CiAJCX0KIAl9Ci0JaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQorCWlmIChhZGFwdGVyLT5oYXZlX21zaSkgewogCQlmbGFncyAmPSB+SVJRRl9TSEFSRUQ7CisJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSwgJmUxMDAwX2ludHJfbXNpLCBmbGFncywKKwkJICAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpOworCQlpZiAoZXJyKQorCQkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKKwl9IGVsc2UKICNlbmRpZgogCWlmICgoZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmZTEwMDBfaW50ciwgZmxhZ3MsCiAJICAgICAgICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUsIG5ldGRldikpKQpAQCAtMzc1LDcgKzM4OCw3IEBACiAgKiBlMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2wgcmVzZXRzIHtDVFJMX0VYVHxGV1NNfTpEUlZfTE9BRCBiaXQuCiAgKiBGb3IgQVNGIGFuZCBQYXNzIFRocm91Z2ggdmVyc2lvbnMgb2YgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUKICAqIGRyaXZlciBpcyBubyBsb25nZXIgbG9hZGVkLiBGb3IgQU1UIHZlcnNpb24gKG9ubHkgd2l0aCA4MjU3MykgaQotICogb2YgdGhlIGYvdyB0aGlzIG1lYW5zIHRoYXQgdGhlIG5ldG93cmsgaS9mIGlzIGNsb3NlZC4KKyAqIG9mIHRoZSBmL3cgdGhpcyBtZWFucyB0aGF0IHRoZSBuZXR3b3JrIGkvZiBpcyBjbG9zZWQuCiAgKgogICoqLwogCkBAIC00MTYsNyArNDI5LDcgQEAKICAqIGUxMDAwX2dldF9od19jb250cm9sIHNldHMge0NUUkxfRVhUfEZXU019OkRSVl9MT0FEIGJpdC4KICAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBvZiBmL3cgdGhpcyBtZWFucyB0aGF0CiAgKiB0aGUgZHJpdmVyIGlzIGxvYWRlZC4gRm9yIEFNVCB2ZXJzaW9uIChvbmx5IHdpdGggODI1NzMpCi0gKiBvZiB0aGUgZi93IHRoaXMgbWVhbnMgdGhhdCB0aGUgbmV0b3dyayBpL2YgaXMgb3Blbi4KKyAqIG9mIHRoZSBmL3cgdGhpcyBtZWFucyB0aGF0IHRoZSBuZXR3b3JrIGkvZiBpcyBvcGVuLgogICoKICAqKi8KIApAQCAtNDI2LDYgKzQzOSw3IEBACiAJdWludDMyX3QgY3RybF9leHQ7CiAJdWludDMyX3Qgc3dzbTsKIAl1aW50MzJfdCBleHRjbmY7CisKIAkvKiBMZXQgZmlybXdhcmUga25vdyB0aGUgZHJpdmVyIGhhcyB0YWtlbiBvdmVyICovCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzE6CkBAIC02MDEsOSArNjE1LDYgQEAKIGUxMDAwX3Jlc2V0KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXVpbnQzMl90IHBiYSwgbWFuYzsKLSNpZmRlZiBESVNBQkxFX01VTFIKLQl1aW50MzJfdCB0Y3RsOwotI2VuZGlmCiAJdWludDE2X3QgZmNfaGlnaF93YXRlcl9tYXJrID0gRTEwMDBfRkNfSElHSF9ESUZGOwogCiAJLyogUmVwYXJ0aXRpb24gUGJhIGZvciBncmVhdGVyIHRoYW4gOWsgbXR1CkBAIC02NzAsMTIgKzY4MSw3IEBACiAJZTEwMDBfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKIAlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDQpCiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIFdVQywgMCk7Ci0jaWZkZWYgRElTQUJMRV9NVUxSCi0JLyogZGlzYWJsZSBNdWx0aXBsZSBSZWFkcyBpbiBUcmFuc21pdCBDb250cm9sIFJlZ2lzdGVyIGZvciBkZWJ1Z2dpbmcgKi8KLQl0Y3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRDVEwpOwotCUUxMDAwX1dSSVRFX1JFRyhodywgVENUTCwgdGN0bCAmIH5FMTAwMF9UQ1RMX01VTFIpOwogCi0jZW5kaWYKIAlpZiAoZTEwMDBfaW5pdF9odygmYWRhcHRlci0+aHcpKQogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJIYXJkd2FyZSBFcnJvclxuIik7CiAJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwpAQCAtODUxLDkgKzg1Nyw5IEBACiAJICAgKGFkYXB0ZXItPmh3Lm1hY190eXBlICE9IGUxMDAwXzgyNTQ3KSkKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAotI2lmZGVmIE5FVElGX0ZfVFNPX0lQVjYKKyNpZmRlZiBORVRJRl9GX1RTTzYKIAlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPiBlMTAwMF84MjU0N19yZXZfMikKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTT19JUFY2OworCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKICNlbmRpZgogI2VuZGlmCiAJaWYgKHBjaV91c2luZ19kYWMpCkBAIC05NjgsNiArOTc0LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9RVUFEX0NPUFBFUl9MT1dQUk9GSUxFOgogCQkvKiBpZiBxdWFkIHBvcnQgYWRhcHRlciwgZGlzYWJsZSBXb0wgb24gYWxsIGJ1dCBwb3J0IEEgKi8KIAkJaWYgKGdsb2JhbF9xdWFkX3BvcnRfYSAhPSAwKQogCQkJYWRhcHRlci0+ZWVwcm9tX3dvbCA9IDA7CkBAIC0xMjc5LDEyICsxMjg2LDEwIEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9ycyAqLwotCiAJaWYgKChlcnIgPSBlMTAwMF9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpKSkKIAkJZ290byBlcnJfc2V0dXBfdHg7CiAKIAkvKiBhbGxvY2F0ZSByZWNlaXZlIGRlc2NyaXB0b3JzICovCi0KIAlpZiAoKGVyciA9IGUxMDAwX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcikpKQogCQlnb3RvIGVycl9zZXR1cF9yeDsKIApAQCAtMTU2OSw2ICsxNTc0LDggQEAKIAogCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzEgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTcyKSB7CiAJCXRhcmMgPSBFMTAwMF9SRUFEX1JFRyhodywgVEFSQzApOworCQkvKiBzZXQgdGhlIHNwZWVkIG1vZGUgYml0LCB3ZSdsbCBjbGVhciBpdCBpZiB3ZSdyZSBub3QgYXQKKwkJICogZ2lnYWJpdCBsaW5rIGxhdGVyICovCiAJCXRhcmMgfD0gKDEgPDwgMjEpOwogCQlFMTAwMF9XUklURV9SRUcoaHcsIFRBUkMwLCB0YXJjKTsKIAl9IGVsc2UgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikgewpAQCAtMTU4Myw4ICsxNTkwLDExIEBACiAJZTEwMDBfY29uZmlnX2NvbGxpc2lvbl9kaXN0KGh3KTsKIAogCS8qIFNldHVwIFRyYW5zbWl0IERlc2NyaXB0b3IgU2V0dGluZ3MgZm9yIGVvcCBkZXNjcmlwdG9yICovCi0JYWRhcHRlci0+dHhkX2NtZCA9IEUxMDAwX1RYRF9DTURfSURFIHwgRTEwMDBfVFhEX0NNRF9FT1AgfAotCQlFMTAwMF9UWERfQ01EX0lGQ1M7CisJYWRhcHRlci0+dHhkX2NtZCA9IEUxMDAwX1RYRF9DTURfRU9QIHwgRTEwMDBfVFhEX0NNRF9JRkNTOworCisJLyogb25seSBzZXQgSURFIGlmIHdlIGFyZSBkZWxheWluZyBpbnRlcnJ1cHRzIHVzaW5nIHRoZSB0aW1lcnMgKi8KKwlpZiAoYWRhcHRlci0+dHhfaW50X2RlbGF5KQorCQlhZGFwdGVyLT50eGRfY21kIHw9IEUxMDAwX1RYRF9DTURfSURFOwogCiAJaWYgKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKQogCQlhZGFwdGVyLT50eGRfY21kIHw9IEUxMDAwX1RYRF9DTURfUlBTOwpAQCAtMTgyMSw4ICsxODMxLDExIEBACiAJCS8qIENvbmZpZ3VyZSBleHRyYSBwYWNrZXQtc3BsaXQgcmVnaXN0ZXJzICovCiAJCXJmY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSRkNUTCk7CiAJCXJmY3RsIHw9IEUxMDAwX1JGQ1RMX0VYVEVOOwotCQkvKiBkaXNhYmxlIElQdjYgcGFja2V0IHNwbGl0IHN1cHBvcnQgKi8KLQkJcmZjdGwgfD0gRTEwMDBfUkZDVExfSVBWNl9ESVM7CisJCS8qIGRpc2FibGUgcGFja2V0IHNwbGl0IHN1cHBvcnQgZm9yIElQdjYgZXh0ZW5zaW9uIGhlYWRlcnMsCisJCSAqIGJlY2F1c2Ugc29tZSBtYWxmb3JtZWQgSVB2NiBoZWFkZXJzIGNhbiBoYW5nIHRoZSBSWCAqLworCQlyZmN0bCB8PSAoRTEwMDBfUkZDVExfSVBWNl9FWF9ESVMgfAorCQkgICAgICAgICAgRTEwMDBfUkZDVExfTkVXX0lQVjZfRVhUX0RJUyk7CisKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkZDVEwsIHJmY3RsKTsKIAogCQlyY3RsIHw9IEUxMDAwX1JDVExfRFRZUF9QUzsKQEAgLTE4ODUsNyArMTg5OCw3IEBACiAKIAlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQwKSB7CiAJCUUxMDAwX1dSSVRFX1JFRyhodywgUkFEViwgYWRhcHRlci0+cnhfYWJzX2ludF9kZWxheSk7Ci0JCWlmIChhZGFwdGVyLT5pdHIgPiAxKQorCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgIT0gMCkKIAkJCUUxMDAwX1dSSVRFX1JFRyhodywgSVRSLAogCQkJCTEwMDAwMDAwMDAgLyAoYWRhcHRlci0+aXRyICogMjU2KSk7CiAJfQpAQCAtMTg5NSwxMSArMTkwOCwxMSBAQAogCQkvKiBSZXNldCBkZWxheSB0aW1lcnMgYWZ0ZXIgZXZlcnkgaW50ZXJydXB0ICovCiAJCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX0lOVF9USU1FUl9DTFI7CiAjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKLQkJLyogQXV0by1NYXNrIGludGVycnVwdHMgdXBvbiBJQ1IgcmVhZC4gKi8KKwkJLyogQXV0by1NYXNrIGludGVycnVwdHMgdXBvbiBJQ1IgYWNjZXNzICovCiAJCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX0lBTUU7CisJCUUxMDAwX1dSSVRFX1JFRyhodywgSUFNLCAweGZmZmZmZmZmKTsKICNlbmRpZgogCQlFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7Ci0JCUUxMDAwX1dSSVRFX1JFRyhodywgSUFNLCB+MCk7CiAJCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKIAl9CiAKQEAgLTE5MzgsNiArMTk1MSwxMiBAQAogCQlFMTAwMF9XUklURV9SRUcoaHcsIFJYQ1NVTSwgcnhjc3VtKTsKIAl9CiAKKwkvKiBlbmFibGUgZWFybHkgcmVjZWl2ZXMgb24gODI1NzMsIG9ubHkgdGFrZXMgZWZmZWN0IGlmIHVzaW5nID4gMjA0OAorCSAqIGJ5dGUgdG90YWwgZnJhbWUgc2l6ZS4gIGZvciBleGFtcGxlIG9ubHkgZm9yIGp1bWJvIGZyYW1lcyAqLworI2RlZmluZSBFMTAwMF9FUlRfMjA0OCAweDEwMAorCWlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpCisJCUUxMDAwX1dSSVRFX1JFRyhodywgRVJULCBFMTAwMF9FUlRfMjA0OCk7CisKIAkvKiBFbmFibGUgUmVjZWl2ZXMgKi8KIAlFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOwogfQpAQCAtMTk5MSwxMCArMjAxMCwxMyBAQAogCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCiAJCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKIAkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IDA7CiAJfQotCWlmIChidWZmZXJfaW5mby0+c2tiKQorCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOwotCW1lbXNldChidWZmZXJfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBlMTAwMF9idWZmZXIpKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJfQorCS8qIGJ1ZmZlcl9pbmZvIG11c3QgYmUgY29tcGxldGVseSBzZXQgdXAgaW4gdGhlIHRyYW5zbWl0IHBhdGggKi8KIH0KIAogLyoqCkBAIC0yNDE4LDYgKzI0NDAsNyBAQAogCQlEUFJJTlRLKExJTkssIElORk8sCiAJCQkiR2lnYWJpdCBoYXMgYmVlbiBkaXNhYmxlZCwgZG93bmdyYWRpbmcgc3BlZWRcbiIpOwogCX0KKwogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgewogCQllMTAwMF9lbmFibGVfdHhfcGt0X2ZpbHRlcmluZygmYWRhcHRlci0+aHcpOwogCQlpZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0gYWRhcHRlci0+aHcubW5nX2Nvb2tpZS52bGFuX2lkKQpAQCAtMjQ2MiwxMyArMjQ4NSwxMiBAQAogCQkJaWYgKChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MSB8fAogCQkJICAgICBhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MikgJiYKIAkJCSAgICB0eGIyYiA9PSAwKSB7Ci0jZGVmaW5lIFNQRUVEX01PREVfQklUICgxIDw8IDIxKQogCQkJCXVpbnQzMl90IHRhcmMwOwogCQkJCXRhcmMwID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBUQVJDMCk7Ci0JCQkJdGFyYzAgJj0gflNQRUVEX01PREVfQklUOworCQkJCXRhcmMwICY9IH4oMSA8PCAyMSk7CiAJCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVEFSQzAsIHRhcmMwKTsKIAkJCX0KLQkJCQkKKwogI2lmZGVmIE5FVElGX0ZfVFNPCiAJCQkvKiBkaXNhYmxlIFRTTyBmb3IgcGNpZSBhbmQgMTAvMTAwIHNwZWVkcywgdG8gYXZvaWQKIAkJCSAqIHNvbWUgaGFyZHdhcmUgaXNzdWVzICovCkBAIC0yNDgwLDkgKzI1MDIsMTUgQEAKIAkJCQkJRFBSSU5USyhQUk9CRSxJTkZPLAogCQkJCSAgICAgICAgIjEwLzEwMCBzcGVlZDogZGlzYWJsaW5nIFRTT1xuIik7CiAJCQkJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOworI2lmZGVmIE5FVElGX0ZfVFNPNgorCQkJCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzY7CisjZW5kaWYKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBTUEVFRF8xMDAwOgogCQkJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworI2lmZGVmIE5FVElGX0ZfVFNPNgorCQkJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKKyNlbmRpZgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgogCQkJCQkvKiBvb3BzICovCkBAIC0yNTQ5LDE5ICsyNTc3LDYgQEAKIAkJfQogCX0KIAotCS8qIER5bmFtaWMgbW9kZSBmb3IgSW50ZXJydXB0IFRocm90dGxlIFJhdGUgKElUUikgKi8KLQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYgYWRhcHRlci0+aXRyID09IDEpIHsKLQkJLyogU3ltbWV0cmljIFR4L1J4IGdldHMgYSByZWR1Y2VkIElUUj0yMDAwOyBUb3RhbAotCQkgKiBhc3ltbWV0cmljYWwgVHggb3IgUnggZ2V0cyBJVFI9ODAwMDsgZXZlcnlvbmUKLQkJICogZWxzZSBpcyBiZXR3ZWVuIDIwMDAtODAwMC4gKi8KLQkJdWludDMyX3QgZ29jID0gKGFkYXB0ZXItPmdvdGNsICsgYWRhcHRlci0+Z29yY2wpIC8gMTAwMDA7Ci0JCXVpbnQzMl90IGRpZiA9IChhZGFwdGVyLT5nb3RjbCA+IGFkYXB0ZXItPmdvcmNsID8KLQkJCWFkYXB0ZXItPmdvdGNsIC0gYWRhcHRlci0+Z29yY2wgOgotCQkJYWRhcHRlci0+Z29yY2wgLSBhZGFwdGVyLT5nb3RjbCkgLyAxMDAwMDsKLQkJdWludDMyX3QgaXRyID0gZ29jID4gMCA/IChkaWYgKiA2MDAwIC8gZ29jICsgMjAwMCkgOiA4MDAwOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJVFIsIDEwMDAwMDAwMDAgLyAoaXRyICogMjU2KSk7Ci0JfQotCiAJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5nIGlzIGNsZWFuZWQgKi8KIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJQ1MsIEUxMDAwX0lDU19SWERNVDApOwogCkBAIC0yNTc3LDYgKzI1OTIsMTM1IEBACiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDIgKiBIWik7CiB9CiAKK2VudW0gbGF0ZW5jeV9yYW5nZSB7CisJbG93ZXN0X2xhdGVuY3kgPSAwLAorCWxvd19sYXRlbmN5ID0gMSwKKwlidWxrX2xhdGVuY3kgPSAyLAorCWxhdGVuY3lfaW52YWxpZCA9IDI1NQorfTsKKworLyoqCisgKiBlMTAwMF91cGRhdGVfaXRyIC0gdXBkYXRlIHRoZSBkeW5hbWljIElUUiB2YWx1ZSBiYXNlZCBvbiBzdGF0aXN0aWNzCisgKiAgICAgIFN0b3JlcyBhIG5ldyBJVFIgdmFsdWUgYmFzZWQgb24gcGFja2V0cyBhbmQgYnl0ZQorICogICAgICBjb3VudHMgZHVyaW5nIHRoZSBsYXN0IGludGVycnVwdC4gIFRoZSBhZHZhbnRhZ2Ugb2YgcGVyIGludGVycnVwdAorICogICAgICBjb21wdXRhdGlvbiBpcyBmYXN0ZXIgdXBkYXRlcyBhbmQgbW9yZSBhY2N1cmF0ZSBJVFIgZm9yIHRoZSBjdXJyZW50CisgKiAgICAgIHRyYWZmaWMgcGF0dGVybi4gIENvbnN0YW50cyBpbiB0aGlzIGZ1bmN0aW9uIHdlcmUgY29tcHV0ZWQKKyAqICAgICAgYmFzZWQgb24gdGhlb3JldGljYWwgbWF4aW11bSB3aXJlIHNwZWVkIGFuZCB0aHJlc2hvbGRzIHdlcmUgc2V0IGJhc2VkCisgKiAgICAgIG9uIHRlc3RpbmcgZGF0YSBhcyB3ZWxsIGFzIGF0dGVtcHRpbmcgdG8gbWluaW1pemUgcmVzcG9uc2UgdGltZQorICogICAgICB3aGlsZSBpbmNyZWFzaW5nIGJ1bGsgdGhyb3VnaHB1dC4KKyAqICAgICAgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSBtb2R1bGUKKyAqICAgICAgcGFyYW1ldGVyIChzZWUgZTEwMDBfcGFyYW0uYykKKyAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGFkYXB0ZXIKKyAqIEBpdHJfc2V0dGluZzogY3VycmVudCBhZGFwdGVyLT5pdHIKKyAqIEBwYWNrZXRzOiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgZHVyaW5nIHRoaXMgbWVhc3VyZW1lbnQgaW50ZXJ2YWwKKyAqIEBieXRlczogdGhlIG51bWJlciBvZiBieXRlcyBkdXJpbmcgdGhpcyBtZWFzdXJlbWVudCBpbnRlcnZhbAorICoqLworc3RhdGljIHVuc2lnbmVkIGludCBlMTAwMF91cGRhdGVfaXRyKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBpdHJfc2V0dGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhY2tldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBieXRlcykKK3sKKwl1bnNpZ25lZCBpbnQgcmV0dmFsID0gaXRyX3NldHRpbmc7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmICh1bmxpa2VseShody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MCkpCisJCWdvdG8gdXBkYXRlX2l0cl9kb25lOworCisJaWYgKHBhY2tldHMgPT0gMCkKKwkJZ290byB1cGRhdGVfaXRyX2RvbmU7CisKKworCXN3aXRjaCAoaXRyX3NldHRpbmcpIHsKKwljYXNlIGxvd2VzdF9sYXRlbmN5OgorCQlpZiAoKHBhY2tldHMgPCA1KSAmJiAoYnl0ZXMgPiA1MTIpKQorCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CisJCWJyZWFrOworCWNhc2UgbG93X2xhdGVuY3k6ICAvKiA1MCB1c2VjIGFrYSAyMDAwMCBpbnRzL3MgKi8KKwkJaWYgKGJ5dGVzID4gMTAwMDApIHsKKwkJCWlmICgocGFja2V0cyA8IDEwKSB8fAorCQkJICAgICAoKGJ5dGVzL3BhY2tldHMpID4gMTIwMCkpCisJCQkJcmV0dmFsID0gYnVsa19sYXRlbmN5OworCQkJZWxzZSBpZiAoKHBhY2tldHMgPiAzNSkpCisJCQkJcmV0dmFsID0gbG93ZXN0X2xhdGVuY3k7CisJCX0gZWxzZSBpZiAocGFja2V0cyA8PSAyICYmIGJ5dGVzIDwgNTEyKQorCQkJcmV0dmFsID0gbG93ZXN0X2xhdGVuY3k7CisJCWJyZWFrOworCWNhc2UgYnVsa19sYXRlbmN5OiAvKiAyNTAgdXNlYyBha2EgNDAwMCBpbnRzL3MgKi8KKwkJaWYgKGJ5dGVzID4gMjUwMDApIHsKKwkJCWlmIChwYWNrZXRzID4gMzUpCisJCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CisJCX0gZWxzZSB7CisJCQlpZiAoYnl0ZXMgPCA2MDAwKQorCQkJCXJldHZhbCA9IGxvd19sYXRlbmN5OworCQl9CisJCWJyZWFrOworCX0KKwordXBkYXRlX2l0cl9kb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGUxMDAwX3NldF9pdHIoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1aW50MTZfdCBjdXJyZW50X2l0cjsKKwl1aW50MzJfdCBuZXdfaXRyID0gYWRhcHRlci0+aXRyOworCisJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQwKSkKKwkJcmV0dXJuOworCisJLyogZm9yIG5vbi1naWdhYml0IHNwZWVkcywganVzdCBmaXggdGhlIGludGVycnVwdCByYXRlIGF0IDQwMDAgKi8KKwlpZiAodW5saWtlbHkoYWRhcHRlci0+bGlua19zcGVlZCAhPSBTUEVFRF8xMDAwKSkgeworCQljdXJyZW50X2l0ciA9IDA7CisJCW5ld19pdHIgPSA0MDAwOworCQlnb3RvIHNldF9pdHJfbm93OworCX0KKworCWFkYXB0ZXItPnR4X2l0ciA9IGUxMDAwX3VwZGF0ZV9pdHIoYWRhcHRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dHhfaXRyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT50b3RhbF90eF9ieXRlcyk7CisJYWRhcHRlci0+cnhfaXRyID0gZTEwMDBfdXBkYXRlX2l0cihhZGFwdGVyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yeF9pdHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzKTsKKworCWN1cnJlbnRfaXRyID0gbWF4KGFkYXB0ZXItPnJ4X2l0ciwgYWRhcHRlci0+dHhfaXRyKTsKKworCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIGVsaW1pbmF0ZXMgdGhlIGxvd2VzdF9sYXRlbmN5IHNldHRpbmcgKi8KKwlpZiAoY3VycmVudF9pdHIgPT0gbG93ZXN0X2xhdGVuY3kgJiYgKGFkYXB0ZXItPml0cl9zZXR0aW5nID09IDMpKQorCQljdXJyZW50X2l0ciA9IGxvd19sYXRlbmN5OworCisJc3dpdGNoIChjdXJyZW50X2l0cikgeworCS8qIGNvdW50cyBhbmQgcGFja2V0cyBpbiB1cGRhdGVfaXRyIGFyZSBkZXBlbmRlbnQgb24gdGhlc2UgbnVtYmVycyAqLworCWNhc2UgbG93ZXN0X2xhdGVuY3k6CisJCW5ld19pdHIgPSA3MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBsb3dfbGF0ZW5jeToKKwkJbmV3X2l0ciA9IDIwMDAwOyAvKiBha2EgaHdpdHIgPSB+MjAwICovCisJCWJyZWFrOworCWNhc2UgYnVsa19sYXRlbmN5OgorCQluZXdfaXRyID0gNDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitzZXRfaXRyX25vdzoKKwlpZiAobmV3X2l0ciAhPSBhZGFwdGVyLT5pdHIpIHsKKwkJLyogdGhpcyBhdHRlbXB0cyB0byBiaWFzIHRoZSBpbnRlcnJ1cHQgcmF0ZSB0b3dhcmRzIEJ1bGsKKwkJICogYnkgYWRkaW5nIGludGVybWVkaWF0ZSBzdGVwcyB3aGVuIGludGVycnVwdCByYXRlIGlzCisJCSAqIGluY3JlYXNpbmcgKi8KKwkJbmV3X2l0ciA9IG5ld19pdHIgPiBhZGFwdGVyLT5pdHIgPworCQkgICAgICAgICAgICAgbWluKGFkYXB0ZXItPml0ciArIChuZXdfaXRyID4+IDIpLCBuZXdfaXRyKSA6CisJCSAgICAgICAgICAgICBuZXdfaXRyOworCQlhZGFwdGVyLT5pdHIgPSBuZXdfaXRyOworCQlFMTAwMF9XUklURV9SRUcoaHcsIElUUiwgMTAwMDAwMDAwMCAvIChuZXdfaXRyICogMjU2KSk7CisJfQorCisJcmV0dXJuOworfQorCiAjZGVmaW5lIEUxMDAwX1RYX0ZMQUdTX0NTVU0JCTB4MDAwMDAwMDEKICNkZWZpbmUgRTEwMDBfVFhfRkxBR1NfVkxBTgkJMHgwMDAwMDAwMgogI2RlZmluZSBFMTAwMF9UWF9GTEFHU19UU08JCTB4MDAwMDAwMDQKQEAgLTI2MTcsNyArMjc2MSw3IEBACiAJCQkJCQkgICAwKTsKIAkJCWNtZF9sZW5ndGggPSBFMTAwMF9UWERfQ01EX0lQOwogCQkJaXBjc2UgPSBza2ItPmgucmF3IC0gc2tiLT5kYXRhIC0gMTsKLSNpZmRlZiBORVRJRl9GX1RTT19JUFY2CisjaWZkZWYgTkVUSUZfRl9UU082CiAJCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewogCQkJc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4gPSAwOwogCQkJc2tiLT5oLnRoLT5jaGVjayA9CkBAIC0yNjUzLDYgKzI3OTcsNyBAQAogCQljb250ZXh0X2Rlc2MtPmNtZF9hbmRfbGVuZ3RoID0gY3B1X3RvX2xlMzIoY21kX2xlbmd0aCk7CiAKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJaWYgKCsraSA9PSB0eF9yaW5nLT5jb3VudCkgaSA9IDA7CiAJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKQEAgLTI2ODEsMTIgKzI4MjYsMTMgQEAKIAkJY29udGV4dF9kZXNjID0gRTEwMDBfQ09OVEVYVF9ERVNDKCp0eF9yaW5nLCBpKTsKIAogCQljb250ZXh0X2Rlc2MtPnVwcGVyX3NldHVwLnRjcF9maWVsZHMudHVjc3MgPSBjc3M7Ci0JCWNvbnRleHRfZGVzYy0+dXBwZXJfc2V0dXAudGNwX2ZpZWxkcy50dWNzbyA9IGNzcyArIHNrYi0+Y3N1bTsKKwkJY29udGV4dF9kZXNjLT51cHBlcl9zZXR1cC50Y3BfZmllbGRzLnR1Y3NvID0gY3NzICsgc2tiLT5jc3VtX29mZnNldDsKIAkJY29udGV4dF9kZXNjLT51cHBlcl9zZXR1cC50Y3BfZmllbGRzLnR1Y3NlID0gMDsKIAkJY29udGV4dF9kZXNjLT50Y3Bfc2VnX3NldHVwLmRhdGEgPSAwOwogCQljb250ZXh0X2Rlc2MtPmNtZF9hbmRfbGVuZ3RoID0gY3B1X3RvX2xlMzIoRTEwMDBfVFhEX0NNRF9ERVhUKTsKIAogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CisJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKQEAgLTI3NTUsNiArMjkwMSw3IEBACiAJCQkJc2l6ZSwKIAkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwpAQCAtMjc5NCw2ICsyOTQxLDcgQEAKIAkJCQkJc2l6ZSwKIAkJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CisJCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CkBAIC0yODU5LDYgKzMwMDcsOSBAQAogCiAJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOwogCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+dGR0KTsKKwkvKiB3ZSBuZWVkIHRoaXMgaWYgbW9yZSB0aGFuIG9uZSBwcm9jZXNzb3IgY2FuIHdyaXRlIHRvIG91ciB0YWlsCisJICogYXQgYSB0aW1lLCBpdCBzeW5jcm9uaXplcyBJTyBvbiBJQTY0L0FsdGl4IHN5c3RlbXMgKi8KKwltbWlvd2IoKTsKIH0KIAogLyoqCkBAIC0yOTUyLDYgKzMxMDMsNyBAQAogCiAJLyogQSByZXByaWV2ZSEgKi8KIAluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAxMCw5ICszMTYyLDkgQEAKIAkJbWF4X3Blcl90eGQgPSBtaW4obXNzIDw8IDIsIG1heF9wZXJfdHhkKTsKIAkJbWF4X3R4ZF9wd3IgPSBmbHMobWF4X3Blcl90eGQpIC0gMTsKIAotCS8qIFRTTyBXb3JrYXJvdW5kIGZvciA4MjU3MS8yLzMgQ29udHJvbGxlcnMgLS0gaWYgc2tiLT5kYXRhCi0JICogcG9pbnRzIHRvIGp1c3QgaGVhZGVyLCBwdWxsIGEgZmV3IGJ5dGVzIG9mIHBheWxvYWQgZnJvbQotCSAqIGZyYWdzIGludG8gc2tiLT5kYXRhICovCisJCS8qIFRTTyBXb3JrYXJvdW5kIGZvciA4MjU3MS8yLzMgQ29udHJvbGxlcnMgLS0gaWYgc2tiLT5kYXRhCisJCSogcG9pbnRzIHRvIGp1c3QgaGVhZGVyLCBwdWxsIGEgZmV3IGJ5dGVzIG9mIHBheWxvYWQgZnJvbQorCQkqIGZyYWdzIGludG8gc2tiLT5kYXRhICovCiAJCWhkcl9sZW4gPSAoKHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpICsgKHNrYi0+aC50aC0+ZG9mZiA8PCAyKSk7CiAJCWlmIChza2ItPmRhdGFfbGVuICYmIChoZHJfbGVuID09IChza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4pKSkgewogCQkJc3dpdGNoIChhZGFwdGVyLT5ody5tYWNfdHlwZSkgewpAQCAtMzMxNiwxMiArMzQ2OCwxMiBAQAogCWFkYXB0ZXItPnN0YXRzLnJvYyArPSBFMTAwMF9SRUFEX1JFRyhodywgUk9DKTsKIAogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0JYWRhcHRlci0+c3RhdHMucHJjNjQgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzY0KTsKLQlhZGFwdGVyLT5zdGF0cy5wcmMxMjcgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzEyNyk7Ci0JYWRhcHRlci0+c3RhdHMucHJjMjU1ICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMyNTUpOwotCWFkYXB0ZXItPnN0YXRzLnByYzUxMSArPSBFMTAwMF9SRUFEX1JFRyhodywgUFJDNTExKTsKLQlhZGFwdGVyLT5zdGF0cy5wcmMxMDIzICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMxMDIzKTsKLQlhZGFwdGVyLT5zdGF0cy5wcmMxNTIyICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMxNTIyKTsKKwkJYWRhcHRlci0+c3RhdHMucHJjNjQgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzY0KTsKKwkJYWRhcHRlci0+c3RhdHMucHJjMTI3ICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQUkMxMjcpOworCQlhZGFwdGVyLT5zdGF0cy5wcmMyNTUgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzI1NSk7CisJCWFkYXB0ZXItPnN0YXRzLnByYzUxMSArPSBFMTAwMF9SRUFEX1JFRyhodywgUFJDNTExKTsKKwkJYWRhcHRlci0+c3RhdHMucHJjMTAyMyArPSBFMTAwMF9SRUFEX1JFRyhodywgUFJDMTAyMyk7CisJCWFkYXB0ZXItPnN0YXRzLnByYzE1MjIgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBSQzE1MjIpOwogCX0KIAogCWFkYXB0ZXItPnN0YXRzLnN5bWVycnMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFNZTUVSUlMpOwpAQCAtMzM1MiwxMiArMzUwNCwxMiBAQAogCWFkYXB0ZXItPnN0YXRzLnRwciArPSBFMTAwMF9SRUFEX1JFRyhodywgVFBSKTsKIAogCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0JYWRhcHRlci0+c3RhdHMucHRjNjQgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzY0KTsKLQlhZGFwdGVyLT5zdGF0cy5wdGMxMjcgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzEyNyk7Ci0JYWRhcHRlci0+c3RhdHMucHRjMjU1ICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEMyNTUpOwotCWFkYXB0ZXItPnN0YXRzLnB0YzUxMSArPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDNTExKTsKLQlhZGFwdGVyLT5zdGF0cy5wdGMxMDIzICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEMxMDIzKTsKLQlhZGFwdGVyLT5zdGF0cy5wdGMxNTIyICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEMxNTIyKTsKKwkJYWRhcHRlci0+c3RhdHMucHRjNjQgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzY0KTsKKwkJYWRhcHRlci0+c3RhdHMucHRjMTI3ICs9IEUxMDAwX1JFQURfUkVHKGh3LCBQVEMxMjcpOworCQlhZGFwdGVyLT5zdGF0cy5wdGMyNTUgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzI1NSk7CisJCWFkYXB0ZXItPnN0YXRzLnB0YzUxMSArPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDNTExKTsKKwkJYWRhcHRlci0+c3RhdHMucHRjMTAyMyArPSBFMTAwMF9SRUFEX1JFRyhodywgUFRDMTAyMyk7CisJCWFkYXB0ZXItPnN0YXRzLnB0YzE1MjIgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIFBUQzE1MjIpOwogCX0KIAogCWFkYXB0ZXItPnN0YXRzLm1wdGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIE1QVEMpOwpAQCAtMzM4MywxOCArMzUzNSwxNyBAQAogCQlhZGFwdGVyLT5zdGF0cy5pY3J4b2MgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIElDUlhPQyk7CiAKIAkJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlICE9IGUxMDAwX2ljaDhsYW4pIHsKLQkJYWRhcHRlci0+c3RhdHMuaWNyeHB0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWFBUQyk7Ci0JCWFkYXB0ZXItPnN0YXRzLmljcnhhdGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIElDUlhBVEMpOwotCQlhZGFwdGVyLT5zdGF0cy5pY3R4cHRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1RYUFRDKTsKLQkJYWRhcHRlci0+c3RhdHMuaWN0eGF0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNUWEFUQyk7Ci0JCWFkYXB0ZXItPnN0YXRzLmljdHhxZWMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIElDVFhRRUMpOwotCQlhZGFwdGVyLT5zdGF0cy5pY3R4cW10YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNUWFFNVEMpOwotCQlhZGFwdGVyLT5zdGF0cy5pY3J4ZG10YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWERNVEMpOworCQkJYWRhcHRlci0+c3RhdHMuaWNyeHB0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWFBUQyk7CisJCQlhZGFwdGVyLT5zdGF0cy5pY3J4YXRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1JYQVRDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljdHhwdGMgKz0gRTEwMDBfUkVBRF9SRUcoaHcsIElDVFhQVEMpOworCQkJYWRhcHRlci0+c3RhdHMuaWN0eGF0YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNUWEFUQyk7CisJCQlhZGFwdGVyLT5zdGF0cy5pY3R4cWVjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1RYUUVDKTsKKwkJCWFkYXB0ZXItPnN0YXRzLmljdHhxbXRjICs9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1RYUU1UQyk7CisJCQlhZGFwdGVyLT5zdGF0cy5pY3J4ZG10YyArPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWERNVEMpOwogCQl9CiAJfQogCiAJLyogRmlsbCBvdXQgdGhlIE9TIHN0YXRpc3RpY3Mgc3RydWN0dXJlICovCi0KIAlhZGFwdGVyLT5uZXRfc3RhdHMucnhfcGFja2V0cyA9IGFkYXB0ZXItPnN0YXRzLmdwcmM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy5ncHRjOwogCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9ieXRlcyA9IGFkYXB0ZXItPnN0YXRzLmdvcmNsOwpAQCAtMzQyNiw3ICszNTc3LDYgQEAKIAkvKiBUeCBEcm9wcGVkIG5lZWRzIHRvIGJlIG1haW50YWluZWQgZWxzZXdoZXJlICovCiAKIAkvKiBQaHkgU3RhdHMgKi8KLQogCWlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlpZiAoKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKIAkJICAgKCFlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZwaHlfdG1wKSkpIHsKQEAgLTM0NDIsNiArMzU5Miw5NSBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c3RhdHNfbG9jaywgZmxhZ3MpOwogfQorI2lmZGVmIENPTkZJR19QQ0lfTVNJCisKKy8qKgorICogZTEwMDBfaW50cl9tc2kgLSBJbnRlcnJ1cHQgSGFuZGxlcgorICogQGlycTogaW50ZXJydXB0IG51bWJlcgorICogQGRhdGE6IHBvaW50ZXIgdG8gYSBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKiovCisKK3N0YXRpYworaXJxcmV0dXJuX3QgZTEwMDBfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKyNpZm5kZWYgQ09ORklHX0UxMDAwX05BUEkKKwlpbnQgaTsKKyNlbmRpZgorCisJLyogdGhpcyBjb2RlIGF2b2lkcyB0aGUgcmVhZCBvZiBJQ1IgYnV0IGhhcyB0byBnZXQgMTAwMCBpbnRlcnJ1cHRzCisJICogYXQgZXZlcnkgbGluayBjaGFuZ2UgZXZlbnQgYmVmb3JlIGl0IHdpbGwgbm90aWNlIHRoZSBjaGFuZ2UgKi8KKwlpZiAoKythZGFwdGVyLT5kZXRlY3RfbGluayA+PSAxMDAwKSB7CisJCXVpbnQzMl90IGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1IpOworI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCisJCS8qIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNLCBzbyBrZWVwIHVwIHdpdGggb3VyCisJCSAqIGVuYWJsZS9kaXNhYmxlIGFjY291bnRpbmcgKi8KKwkJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CisjZW5kaWYKKwkJYWRhcHRlci0+ZGV0ZWN0X2xpbmsgPSAwOworCQlpZiAoKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgJiYKKwkJICAgIChpY3IgJiBFMTAwMF9JQ1JfSU5UX0FTU0VSVEVEKSkgeworCQkJaHctPmdldF9saW5rX3N0YXR1cyA9IDE7CisJCQkvKiA4MDAwM0VTMkxBTiB3b3JrYXJvdW5kLS0KKwkJCSogRm9yIHBhY2tldCBidWZmZXIgd29yay1hcm91bmQgb24gbGluayBkb3duIGV2ZW50OworCQkJKiBkaXNhYmxlIHJlY2VpdmVzIGhlcmUgaW4gdGhlIElTUiBhbmQKKwkJCSogcmVzZXQgYWRhcHRlciBpbiB3YXRjaGRvZworCQkJKi8KKwkJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikgJiYKKwkJCSAgICAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pKSB7CisJCQkJLyogZGlzYWJsZSByZWNlaXZlcyAqLworCQkJCXVpbnQzMl90IHJjdGwgPSBFMTAwMF9SRUFEX1JFRyhodywgUkNUTCk7CisJCQkJRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCByY3RsICYgfkUxMDAwX1JDVExfRU4pOworCQkJfQorCQkJLyogZ3VhcmQgYWdhaW5zdCBpbnRlcnJ1cHQgd2hlbiB3ZSdyZSBnb2luZyBkb3duICovCisJCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLAorCQkJCSAgICAgICAgICBqaWZmaWVzICsgMSk7CisJCX0KKwl9IGVsc2UgeworCQlFMTAwMF9XUklURV9SRUcoaHcsIElDUiwgKDB4ZmZmZmZmZmYgJiB+KEUxMDAwX0lDUl9SWFNFUSB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfSUNSX0xTQykpKTsKKwkJLyogYnVtbWVyIHdlIGhhdmUgdG8gZmx1c2ggaGVyZSwgYnV0IHRoaW5ncyBicmVhayBvdGhlcndpc2UgYXMKKwkJICogc29tZSBldmVudCBhcHBlYXJzIHRvIGJlIGxvc3Qgb3IgZGVsYXllZCBhbmQgdGhyb3VnaHB1dAorCQkgKiBkcm9wcy4gIEluIGFsbW9zdCBhbGwgdGVzdHMgdGhpcyBmbHVzaCBpcyB1bi1uZWNlc3NhcnkgKi8KKwkJRTEwMDBfV1JJVEVfRkxVU0goaHcpOworI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCisJCS8qIEludGVycnVwdCBBdXRvLU1hc2sgKElBTSkuLi51cG9uIHdyaXRpbmcgSUNSLCBpbnRlcnJ1cHRzIGFyZQorCQkgKiBtYXNrZWQuICBObyBuZWVkIGZvciB0aGUgSU1DIHdyaXRlLCBidXQgaXQgZG9lcyBtZWFuIHdlCisJCSAqIHNob3VsZCBhY2NvdW50IGZvciBpdCBBU0FQLiAqLworCQlhdG9taWNfaW5jKCZhZGFwdGVyLT5pcnFfc2VtKTsKKyNlbmRpZgorCX0KKworI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCisJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5ldGRldikpKSB7CisJCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKKwkJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CisJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKKwkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7CisJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2KTsKKwl9IGVsc2UKKwkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKyNlbHNlCisJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOworCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKKwlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKKwlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9NQVhfSU5UUjsgaSsrKQorCQlpZiAodW5saWtlbHkoIWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmcpICYKKwkJICAgIWUxMDAwX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKSkpCisJCQlicmVhazsKKworCWlmIChsaWtlbHkoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSkKKwkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKKyNlbmRpZgorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2VuZGlmCiAKIC8qKgogICogZTEwMDBfaW50ciAtIEludGVycnVwdCBIYW5kbGVyCkBAIC0zNDU4LDcgKzM2OTcsMTcgQEAKIAl1aW50MzJfdCByY3RsLCBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKICNpZm5kZWYgQ09ORklHX0UxMDAwX05BUEkKIAlpbnQgaTsKLSNlbHNlCisjZW5kaWYKKwlpZiAodW5saWtlbHkoIWljcikpCisJCXJldHVybiBJUlFfTk9ORTsgIC8qIE5vdCBvdXIgaW50ZXJydXB0ICovCisKKyNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQorCS8qIElNUyB3aWxsIG5vdCBhdXRvLW1hc2sgaWYgSU5UX0FTU0VSVEVEIGlzIG5vdCBzZXQsIGFuZCBpZiBpdCBpcworCSAqIG5vdCBzZXQsIHRoZW4gdGhlIGFkYXB0ZXIgZGlkbid0IHNlbmQgYW4gaW50ZXJydXB0ICovCisJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSAmJgorCSAgICAgICAgICAgICAhKGljciAmIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQpKSkKKwkJcmV0dXJuIElSUV9OT05FOworCiAJLyogSW50ZXJydXB0IEF1dG8tTWFzay4uLnVwb24gcmVhZGluZyBJQ1IsCiAJICogaW50ZXJydXB0cyBhcmUgbWFza2VkLiAgTm8gbmVlZCBmb3IgdGhlCiAJICogSU1DIHdyaXRlLCBidXQgaXQgZG9lcyBtZWFuIHdlIHNob3VsZApAQCAtMzQ2NywxNCArMzcxNiw2IEBACiAJCWF0b21pY19pbmMoJmFkYXB0ZXItPmlycV9zZW0pOwogI2VuZGlmCiAKLQlpZiAodW5saWtlbHkoIWljcikpIHsKLSNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQotCQlpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTcxKQotCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKLSNlbmRpZgotCQlyZXR1cm4gSVJRX05PTkU7ICAvKiBOb3Qgb3VyIGludGVycnVwdCAqLwotCX0KLQogCWlmICh1bmxpa2VseShpY3IgJiAoRTEwMDBfSUNSX1JYU0VRIHwgRTEwMDBfSUNSX0xTQykpKSB7CiAJCWh3LT5nZXRfbGlua19zdGF0dXMgPSAxOwogCQkvKiA4MDAwM0VTMkxBTiB3b3JrYXJvdW5kLS0KQEAgLTM0OTUsMTMgKzM3MzYsMjAgQEAKIAogI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTcxKSkgeworCQkvKiBkaXNhYmxlIGludGVycnVwdHMsIHdpdGhvdXQgdGhlIHN5bmNocm9uaXplX2lycSBiaXQgKi8KIAkJYXRvbWljX2luYygmYWRhcHRlci0+aXJxX3NlbSk7CiAJCUUxMDAwX1dSSVRFX1JFRyhodywgSU1DLCB+MCk7CiAJCUUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKIAl9Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5ldGRldikpKQorCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZXRkZXYpKSkgeworCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CisJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOworCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CisJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwogCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5ldGRldik7Ci0JZWxzZQorCX0gZWxzZQorCQkvKiB0aGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbiEgaWYgaXQgZG9lcyBpdCBpcyBiYXNpY2FsbHkgYQorCQkgKiBidWcsIGJ1dCBub3QgYSBoYXJkIGVycm9yLCBzbyBlbmFibGUgaW50cyBhbmQgY29udGludWUgKi8KIAkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKICNlbHNlCiAJLyogV3JpdGluZyBJTUMgYW5kIElNUyBpcyBuZWVkZWQgZm9yIDgyNTQ3LgpAQCAtMzUxOSwxNiArMzc2NywyMyBAQAogCQlFMTAwMF9XUklURV9SRUcoaHcsIElNQywgfjApOwogCX0KIAorCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKKwlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CisJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CisJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfTUFYX0lOVFI7IGkrKykKIAkJaWYgKHVubGlrZWx5KCFhZGFwdGVyLT5jbGVhbl9yeChhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKSAmCiAJCSAgICFlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZykpKQogCQkJYnJlYWs7CiAKKwlpZiAobGlrZWx5KGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykpCisJCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7CisKIAlpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3IHx8IGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0N19yZXZfMikKIAkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAogI2VuZGlmCi0KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKQEAgLTM1NzIsNiArMzgyNyw4IEBACiAJaWYgKCghdHhfY2xlYW5lZCAmJiAod29ya19kb25lID09IDApKSB8fAogCSAgICFuZXRpZl9ydW5uaW5nKHBvbGxfZGV2KSkgewogcXVpdF9wb2xsaW5nOgorCQlpZiAobGlrZWx5KGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykpCisJCQllMTAwMF9zZXRfaXRyKGFkYXB0ZXIpOwogCQluZXRpZl9yeF9jb21wbGV0ZShwb2xsX2Rldik7CiAJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAJCXJldHVybiAwOwpAQCAtMzU5OCw2ICszODU1LDcgQEAKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogI2VuZGlmCiAJYm9vbGVhbl90IGNsZWFuZWQgPSBGQUxTRTsKKwl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXM9MCwgdG90YWxfdHhfcGFja2V0cz0wOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKQEAgLTM2MDksMTMgKzM4NjcsMTkgQEAKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CiAKKwkJCWlmIChjbGVhbmVkKSB7CisJCQkJLyogdGhpcyBwYWNrZXQgY291bnQgaXMgd3JvbmcgZm9yIFRTTyBidXQgaGFzIGEKKwkJCQkgKiB0ZW5kZW5jeSB0byBtYWtlIGR5bmFtaWMgSVRSIGNoYW5nZSBtb3JlCisJCQkJICogdG93YXJkcyBidWxrICovCisJCQkJdG90YWxfdHhfcGFja2V0cysrOworCQkJCXRvdGFsX3R4X2J5dGVzICs9IGJ1ZmZlcl9pbmZvLT5za2ItPmxlbjsKKwkJCX0KIAkJCWUxMDAwX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIGJ1ZmZlcl9pbmZvKTsKLQkJCW1lbXNldCh0eF9kZXNjLCAwLCBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpKTsKKwkJCXR4X2Rlc2MtPnVwcGVyLmRhdGEgPSAwOwogCiAJCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCX0KIAotCiAJCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgZW9wKTsKICNpZmRlZiBDT05GSUdfRTEwMDBfTkFQSQpAQCAtMzYzNCw4ICszODk4LDEwIEBACiAJCSAqIHNlZXMgdGhlIG5ldyBuZXh0X3RvX2NsZWFuLgogCQkgKi8KIAkJc21wX21iKCk7Ci0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpCisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikpIHsKIAkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwkJCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKKwkJfQogCX0KIAogCWlmIChhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgewpAQCAtMzY3Myw2ICszOTM5LDggQEAKIAkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKIAkJfQogCX0KKwlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyArPSB0b3RhbF90eF9ieXRlczsKKwlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7CiAJcmV0dXJuIGNsZWFuZWQ7CiB9CiAKQEAgLTM3NTIsNiArNDAyMCw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGNsZWFuZWRfY291bnQgPSAwOwogCWJvb2xlYW5fdCBjbGVhbmVkID0gRkFMU0U7CisJdW5zaWduZWQgaW50IHRvdGFsX3J4X2J5dGVzPTAsIHRvdGFsX3J4X3BhY2tldHM9MDsKIAogCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCXJ4X2Rlc2MgPSBFMTAwMF9SWF9ERVNDKCpyeF9yaW5nLCBpKTsKQEAgLTM3NjAsNiArNDAyOSw3IEBACiAJd2hpbGUgKHJ4X2Rlc2MtPnN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX0REKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXU4IHN0YXR1czsKKwogI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCiAJCWlmICgqd29ya19kb25lID49IHdvcmtfdG9fZG8pCiAJCQlicmVhazsKQEAgLTM4MTcsNiArNDA4NywxMCBAQAogCQkgKiBkb25lIGFmdGVyIHRoZSBUQklfQUNDRVBUIHdvcmthcm91bmQgYWJvdmUgKi8KIAkJbGVuZ3RoIC09IDQ7CiAKKwkJLyogcHJvYmFibHkgYSBsaXR0bGUgc2tld2VkIGR1ZSB0byByZW1vdmluZyBDUkMgKi8KKwkJdG90YWxfcnhfYnl0ZXMgKz0gbGVuZ3RoOworCQl0b3RhbF9yeF9wYWNrZXRzKys7CisKIAkJLyogY29kZSBhZGRlZCBmb3IgY29weWJyZWFrLCB0aGlzIHNob3VsZCBpbXByb3ZlCiAJCSAqIHBlcmZvcm1hbmNlIGZvciBzbWFsbCBwYWNrZXRzIHdpdGggbGFyZ2UgYW1vdW50cwogCQkgKiBvZiByZWFzc2VtYmx5IGJlaW5nIGRvbmUgaW4gdGhlIHN0YWNrICovCkBAIC0zODMyLDEyICs0MTA2LDExIEBACiAJCQkJLyogc2F2ZSB0aGUgc2tiIGluIGJ1ZmZlcl9pbmZvIGFzIGdvb2QgKi8KIAkJCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOwogCQkJCXNrYiA9IG5ld19za2I7Ci0JCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAJCQl9Ci0JCX0gZWxzZQotCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7Ci0KKwkJCS8qIGVsc2UganVzdCBjb250aW51ZSB3aXRoIHRoZSBvbGQgb25lICovCisJCX0KIAkJLyogZW5kIGNvcHlicmVhayBjb2RlICovCisJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCiAJCS8qIFJlY2VpdmUgQ2hlY2tzdW0gT2ZmbG9hZCAqLwogCQllMTAwMF9yeF9jaGVja3N1bShhZGFwdGVyLApAQCAtMzg4Niw2ICs0MTU5LDggQEAKIAlpZiAoY2xlYW5lZF9jb3VudCkKIAkJYWRhcHRlci0+YWxsb2NfcnhfYnVmKGFkYXB0ZXIsIHJ4X3JpbmcsIGNsZWFuZWRfY291bnQpOwogCisJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOworCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOwogCXJldHVybiBjbGVhbmVkOwogfQogCkBAIC0zOTE1LDYgKzQxOTAsNyBAQAogCXVpbnQzMl90IGxlbmd0aCwgc3RhdGVycjsKIAlpbnQgY2xlYW5lZF9jb3VudCA9IDA7CiAJYm9vbGVhbl90IGNsZWFuZWQgPSBGQUxTRTsKKwl1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXM9MCwgdG90YWxfcnhfcGFja2V0cz0wOwogCiAJaSA9IHJ4X3JpbmctPm5leHRfdG9fY2xlYW47CiAJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfUFMoKnJ4X3JpbmcsIGkpOwpAQCAtMzk5OSw3ICs0Mjc1LDcgQEAKIAkJCWdvdG8gY29weWRvbmU7CiAJCX0gLyogaWYgKi8KIAkJfQotCQkKKwogCQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+cnhfcHNfcGFnZXM7IGorKykgewogCQkJaWYgKCEobGVuZ3RoPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5sZW5ndGhbal0pKSkKIAkJCQlicmVhazsKQEAgLTQwMTksNiArNDI5NSw5IEBACiAJCXBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7CiAKIGNvcHlkb25lOgorCQl0b3RhbF9yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJdG90YWxfcnhfcGFja2V0cysrOworCiAJCWUxMDAwX3J4X2NoZWNrc3VtKGFkYXB0ZXIsIHN0YXRlcnIsCiAJCQkJICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi5sb3dlci5oaV9kd29yZC5jc3VtX2lwLmNzdW0pLCBza2IpOwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwpAQCAtNDA2Nyw2ICs0MzQ2LDggQEAKIAlpZiAoY2xlYW5lZF9jb3VudCkKIAkJYWRhcHRlci0+YWxsb2NfcnhfYnVmKGFkYXB0ZXIsIHJ4X3JpbmcsIGNsZWFuZWRfY291bnQpOwogCisJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyArPSB0b3RhbF9yeF9wYWNrZXRzOworCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOwogCXJldHVybiBjbGVhbmVkOwogfQogCkBAIC00MjM0LDcgKzQ1MTUsNyBAQAogCQl9CiAKIAkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCi0JCQkJICAgICAgIGFkYXB0ZXItPnJ4X3BzX2JzaXplMCArIE5FVF9JUF9BTElHTik7CisJCSAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cnhfcHNfYnNpemUwICsgTkVUX0lQX0FMSUdOKTsKIAogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CkBAIC00NTExLDcgKzQ3OTIsNiBAQAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi0KIHZvaWQKIGUxMDAwX2lvX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVuc2lnbmVkIGxvbmcgcG9ydCwgdWludDMyX3QgdmFsdWUpCiB7CkBAIC00NTM0LDEyICs0ODE0LDEyIEBACiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmwpOwogCiAJCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0JCS8qIGVuYWJsZSBWTEFOIHJlY2VpdmUgZmlsdGVyaW5nICovCi0JCXJjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOwotCQlyY3RsIHw9IEUxMDAwX1JDVExfVkZFOwotCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0NGSUVOOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMLCByY3RsKTsKLQkJZTEwMDBfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOworCQkJLyogZW5hYmxlIFZMQU4gcmVjZWl2ZSBmaWx0ZXJpbmcgKi8KKwkJCXJjdGwgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJDVEwpOworCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfQ0ZJRU47CisJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMLCByY3RsKTsKKwkJCWUxMDAwX3VwZGF0ZV9tbmdfdmxhbihhZGFwdGVyKTsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIGRpc2FibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCkBAIC00NTQ4LDE0ICs0ODI4LDE2IEBACiAJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIENUUkwsIGN0cmwpOwogCiAJCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7Ci0JCS8qIGRpc2FibGUgVkxBTiBmaWx0ZXJpbmcgKi8KLQkJcmN0bCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkNUTCk7Ci0JCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOwotCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMLCByY3RsKTsKLQkJaWYgKGFkYXB0ZXItPm1uZ192bGFuX2lkICE9ICh1aW50MTZfdClFMTAwMF9NTkdfVkxBTl9OT05FKSB7Ci0JCQllMTAwMF92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwgYWRhcHRlci0+bW5nX3ZsYW5faWQpOwotCQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSBFMTAwMF9NTkdfVkxBTl9OT05FOwotCQl9CisJCQkvKiBkaXNhYmxlIFZMQU4gZmlsdGVyaW5nICovCisJCQlyY3RsID0gRTEwMDBfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBSQ1RMKTsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVkZFOworCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CisJCQlpZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0KKwkJCSAgICAodWludDE2X3QpRTEwMDBfTU5HX1ZMQU5fTk9ORSkgeworCQkJCWUxMDAwX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bW5nX3ZsYW5faWQpOworCQkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gRTEwMDBfTU5HX1ZMQU5fTk9ORTsKKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKaW5kZXggYTQ2NGNiMi4uMThhZmMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCkBAIC0xMDcsMTcgKzEwNywxNiBAQAogCiAjZGVmaW5lIEUxMDAwX1dSSVRFX0ZMVVNIKGEpIEUxMDAwX1JFQURfUkVHKGEsIFNUQVRVUykKIAotI2RlZmluZSBFMTAwMF9XUklURV9JQ0g4X1JFRyhhLCByZWcsIHZhbHVlKSAoIFwKKyNkZWZpbmUgRTEwMDBfV1JJVEVfSUNIX0ZMQVNIX1JFRyhhLCByZWcsIHZhbHVlKSAoIFwKICAgICB3cml0ZWwoKHZhbHVlKSwgKChhKS0+Zmxhc2hfYWRkcmVzcyArIHJlZykpKQogCi0jZGVmaW5lIEUxMDAwX1JFQURfSUNIOF9SRUcoYSwgcmVnKSAoIFwKKyNkZWZpbmUgRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHKGEsIHJlZykgKCBcCiAgICAgcmVhZGwoKGEpLT5mbGFzaF9hZGRyZXNzICsgcmVnKSkKIAotI2RlZmluZSBFMTAwMF9XUklURV9JQ0g4X1JFRzE2KGEsIHJlZywgdmFsdWUpICggXAorI2RlZmluZSBFMTAwMF9XUklURV9JQ0hfRkxBU0hfUkVHMTYoYSwgcmVnLCB2YWx1ZSkgKCBcCiAgICAgd3JpdGV3KCh2YWx1ZSksICgoYSktPmZsYXNoX2FkZHJlc3MgKyByZWcpKSkKIAotI2RlZmluZSBFMTAwMF9SRUFEX0lDSDhfUkVHMTYoYSwgcmVnKSAoIFwKKyNkZWZpbmUgRTEwMDBfUkVBRF9JQ0hfRkxBU0hfUkVHMTYoYSwgcmVnKSAoIFwKICAgICByZWFkdygoYSktPmZsYXNoX2FkZHJlc3MgKyByZWcpKQogCi0KICNlbmRpZiAvKiBfRTEwMDBfT1NERVBfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCmluZGV4IDljM2MxYWMuLmNiZmNkN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYwpAQCAtNDQsMTYgKzQ0LDYgQEAKICAqLwogCiAjZGVmaW5lIEUxMDAwX1BBUkFNX0lOSVQgeyBbMCAuLi4gRTEwMDBfTUFYX05JQ10gPSBPUFRJT05fVU5TRVQgfQotLyogTW9kdWxlIFBhcmFtZXRlcnMgYXJlIGFsd2F5cyBpbml0aWFsaXplZCB0byAtMSwgc28gdGhhdCB0aGUgZHJpdmVyCi0gKiBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG5vIHVzZXIgc3BlY2lmaWVkIHZhbHVlIG9yIHRoZQotICogdXNlciBhc2tpbmcgZm9yIHRoZSBkZWZhdWx0IHZhbHVlLgotICogVGhlIHRydWUgZGVmYXVsdCB2YWx1ZXMgYXJlIGxvYWRlZCBpbiB3aGVuIGUxMDAwX2NoZWNrX29wdGlvbnMgaXMgY2FsbGVkLgotICoKLSAqIFRoaXMgaXMgYSBHQ0MgZXh0ZW5zaW9uIHRvIEFOU0kgQy4KLSAqIFNlZSB0aGUgaXRlbSAiTGFiZWxlZCBFbGVtZW50cyBpbiBJbml0aWFsaXplcnMiIGluIHRoZSBzZWN0aW9uCi0gKiAiRXh0ZW5zaW9ucyB0byB0aGUgQyBMYW5ndWFnZSBGYW1pbHkiIG9mIHRoZSBHQ0MgZG9jdW1lbnRhdGlvbi4KLSAqLwotCiAjZGVmaW5lIEUxMDAwX1BBUkFNKFgsIGRlc2MpIFwKIAlzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgWFtFMTAwMF9NQVhfTklDKzFdID0gRTEwMDBfUEFSQU1fSU5JVDsgXAogCXN0YXRpYyBpbnQgbnVtXyMjWCA9IDA7IFwKQEAgLTY3LDcgKzU3LDYgQEAKICAqCiAgKiBEZWZhdWx0IFZhbHVlOiAyNTYKICAqLwotCiBFMTAwMF9QQVJBTShUeERlc2NyaXB0b3JzLCAiTnVtYmVyIG9mIHRyYW5zbWl0IGRlc2NyaXB0b3JzIik7CiAKIC8qIFJlY2VpdmUgRGVzY3JpcHRvciBDb3VudApAQCAtNzcsNyArNjYsNiBAQAogICoKICAqIERlZmF1bHQgVmFsdWU6IDI1NgogICovCi0KIEUxMDAwX1BBUkFNKFJ4RGVzY3JpcHRvcnMsICJOdW1iZXIgb2YgcmVjZWl2ZSBkZXNjcmlwdG9ycyIpOwogCiAvKiBVc2VyIFNwZWNpZmllZCBTcGVlZCBPdmVycmlkZQpAQCAtOTAsNyArNzgsNiBAQAogICoKICAqIERlZmF1bHQgVmFsdWU6IDAKICAqLwotCiBFMTAwMF9QQVJBTShTcGVlZCwgIlNwZWVkIHNldHRpbmciKTsKIAogLyogVXNlciBTcGVjaWZpZWQgRHVwbGV4IE92ZXJyaWRlCkBAIC0xMDIsNyArODksNiBAQAogICoKICAqIERlZmF1bHQgVmFsdWU6IDAKICAqLwotCiBFMTAwMF9QQVJBTShEdXBsZXgsICJEdXBsZXggc2V0dGluZyIpOwogCiAvKiBBdXRvLW5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgT3ZlcnJpZGUKQEAgLTExOSw4ICsxMDUsOSBAQAogICoKICAqIERlZmF1bHQgVmFsdWU6IDB4MkYgKGNvcHBlcik7IDB4MjAgKGZpYmVyKQogICovCi0KIEUxMDAwX1BBUkFNKEF1dG9OZWcsICJBZHZlcnRpc2VkIGF1dG8tbmVnb3RpYXRpb24gc2V0dGluZyIpOworI2RlZmluZSBBVVRPTkVHX0FEVl9ERUZBVUxUICAweDJGCisjZGVmaW5lIEFVVE9ORUdfQURWX01BU0sgICAgIDB4MkYKIAogLyogVXNlciBTcGVjaWZpZWQgRmxvdyBDb250cm9sIE92ZXJyaWRlCiAgKgpAQCAtMTMyLDggKzExOSw4IEBACiAgKgogICogRGVmYXVsdCBWYWx1ZTogUmVhZCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgZnJvbSB0aGUgRUVQUk9NCiAgKi8KLQogRTEwMDBfUEFSQU0oRmxvd0NvbnRyb2wsICJGbG93IENvbnRyb2wgc2V0dGluZyIpOworI2RlZmluZSBGTE9XX0NPTlRST0xfREVGQVVMVCBGTE9XX0NPTlRST0xfRlVMTAogCiAvKiBYc3VtUlggLSBSZWNlaXZlIENoZWNrc3VtIE9mZmxvYWQgRW5hYmxlL0Rpc2FibGUKICAqCkBAIC0xNDQsNTMgKzEzMSw1NCBAQAogICoKICAqIERlZmF1bHQgVmFsdWU6IDEKICAqLwotCiBFMTAwMF9QQVJBTShYc3VtUlgsICJEaXNhYmxlIG9yIGVuYWJsZSBSZWNlaXZlIENoZWNrc3VtIG9mZmxvYWQiKTsKIAogLyogVHJhbnNtaXQgSW50ZXJydXB0IERlbGF5IGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcworICogIFR4IGludGVycnVwdCBkZWxheSBuZWVkcyB0byB0eXBpY2FsbHkgYmUgc2V0IHRvIHNvbWV0aGluZyBub24gemVybwogICoKICAqIFZhbGlkIFJhbmdlOiAwLTY1NTM1Ci0gKgotICogRGVmYXVsdCBWYWx1ZTogNjQKICAqLwotCiBFMTAwMF9QQVJBTShUeEludERlbGF5LCAiVHJhbnNtaXQgSW50ZXJydXB0IERlbGF5Iik7CisjZGVmaW5lIERFRkFVTFRfVElEViAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE1BWF9UWERFTEFZICAgICAgICAgICAgICAgMHhGRkZGCisjZGVmaW5lIE1JTl9UWERFTEFZICAgICAgICAgICAgICAgICAgICAwCiAKIC8qIFRyYW5zbWl0IEFic29sdXRlIEludGVycnVwdCBEZWxheSBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMKICAqCiAgKiBWYWxpZCBSYW5nZTogMC02NTUzNQotICoKLSAqIERlZmF1bHQgVmFsdWU6IDAKICAqLwotCiBFMTAwMF9QQVJBTShUeEFic0ludERlbGF5LCAiVHJhbnNtaXQgQWJzb2x1dGUgSW50ZXJydXB0IERlbGF5Iik7CisjZGVmaW5lIERFRkFVTFRfVEFEViAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1BWF9UWEFCU0RFTEFZICAgICAgICAgICAgMHhGRkZGCisjZGVmaW5lIE1JTl9UWEFCU0RFTEFZICAgICAgICAgICAgICAgICAwCiAKIC8qIFJlY2VpdmUgSW50ZXJydXB0IERlbGF5IGluIHVuaXRzIG9mIDEuMDI0IG1pY3Jvc2Vjb25kcworICogICBoYXJkd2FyZSB3aWxsIGxpa2VseSBoYW5nIGlmIHlvdSBzZXQgdGhpcyB0byBhbnl0aGluZyBidXQgemVyby4KICAqCiAgKiBWYWxpZCBSYW5nZTogMC02NTUzNQotICoKLSAqIERlZmF1bHQgVmFsdWU6IDAKICAqLwotCiBFMTAwMF9QQVJBTShSeEludERlbGF5LCAiUmVjZWl2ZSBJbnRlcnJ1cHQgRGVsYXkiKTsKKyNkZWZpbmUgREVGQVVMVF9SRFRSICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUFYX1JYREVMQVkgICAgICAgICAgICAgICAweEZGRkYKKyNkZWZpbmUgTUlOX1JYREVMQVkgICAgICAgICAgICAgICAgICAgIDAKIAogLyogUmVjZWl2ZSBBYnNvbHV0ZSBJbnRlcnJ1cHQgRGVsYXkgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzCiAgKgogICogVmFsaWQgUmFuZ2U6IDAtNjU1MzUKLSAqCi0gKiBEZWZhdWx0IFZhbHVlOiAxMjgKICAqLwotCiBFMTAwMF9QQVJBTShSeEFic0ludERlbGF5LCAiUmVjZWl2ZSBBYnNvbHV0ZSBJbnRlcnJ1cHQgRGVsYXkiKTsKKyNkZWZpbmUgREVGQVVMVF9SQURWICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgTUFYX1JYQUJTREVMQVkgICAgICAgICAgICAweEZGRkYKKyNkZWZpbmUgTUlOX1JYQUJTREVMQVkgICAgICAgICAgICAgICAgIDAKIAogLyogSW50ZXJydXB0IFRocm90dGxlIFJhdGUgKGludGVycnVwdHMvc2VjKQogICoKLSAqIFZhbGlkIFJhbmdlOiAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljKQotICoKLSAqIERlZmF1bHQgVmFsdWU6IDgwMDAKKyAqIFZhbGlkIFJhbmdlOiAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljLCAzPWR5bmFtaWMgY29uc2VydmF0aXZlKQogICovCi0KIEUxMDAwX1BBUkFNKEludGVycnVwdFRocm90dGxlUmF0ZSwgIkludGVycnVwdCBUaHJvdHRsaW5nIFJhdGUiKTsKKyNkZWZpbmUgREVGQVVMVF9JVFIgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUFYX0lUUiAgICAgICAgICAgICAgICAgICAxMDAwMDAKKyNkZWZpbmUgTUlOX0lUUiAgICAgICAgICAgICAgICAgICAgICAxMDAKIAogLyogRW5hYmxlIFNtYXJ0IFBvd2VyIERvd24gb2YgdGhlIFBIWQogICoKQEAgLTE5OCw3ICsxODYsNiBAQAogICoKICAqIERlZmF1bHQgVmFsdWU6IDAgKGRpc2FibGVkKQogICovCi0KIEUxMDAwX1BBUkFNKFNtYXJ0UG93ZXJEb3duRW5hYmxlLCAiRW5hYmxlIFBIWSBzbWFydCBwb3dlciBkb3duIik7CiAKIC8qIEVuYWJsZSBLdW1lcmFuIExvY2sgTG9zcyB3b3JrYXJvdW5kCkBAIC0yMDcsMzMgKzE5NCw4IEBACiAgKgogICogRGVmYXVsdCBWYWx1ZTogMSAoZW5hYmxlZCkKICAqLwotCiBFMTAwMF9QQVJBTShLdW1lcmFuTG9ja0xvc3MsICJFbmFibGUgS3VtZXJhbiBsb2NrIGxvc3Mgd29ya2Fyb3VuZCIpOwogCi0jZGVmaW5lIEFVVE9ORUdfQURWX0RFRkFVTFQgIDB4MkYKLSNkZWZpbmUgQVVUT05FR19BRFZfTUFTSyAgICAgMHgyRgotI2RlZmluZSBGTE9XX0NPTlRST0xfREVGQVVMVCBGTE9XX0NPTlRST0xfRlVMTAotCi0jZGVmaW5lIERFRkFVTFRfUkRUUiAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1BWF9SWERFTEFZICAgICAgICAgICAgICAgMHhGRkZGCi0jZGVmaW5lIE1JTl9SWERFTEFZICAgICAgICAgICAgICAgICAgICAwCi0KLSNkZWZpbmUgREVGQVVMVF9SQURWICAgICAgICAgICAgICAgICAxMjgKLSNkZWZpbmUgTUFYX1JYQUJTREVMQVkgICAgICAgICAgICAweEZGRkYKLSNkZWZpbmUgTUlOX1JYQUJTREVMQVkgICAgICAgICAgICAgICAgIDAKLQotI2RlZmluZSBERUZBVUxUX1RJRFYgICAgICAgICAgICAgICAgICA2NAotI2RlZmluZSBNQVhfVFhERUxBWSAgICAgICAgICAgICAgIDB4RkZGRgotI2RlZmluZSBNSU5fVFhERUxBWSAgICAgICAgICAgICAgICAgICAgMAotCi0jZGVmaW5lIERFRkFVTFRfVEFEViAgICAgICAgICAgICAgICAgIDY0Ci0jZGVmaW5lIE1BWF9UWEFCU0RFTEFZICAgICAgICAgICAgMHhGRkZGCi0jZGVmaW5lIE1JTl9UWEFCU0RFTEFZICAgICAgICAgICAgICAgICAwCi0KLSNkZWZpbmUgREVGQVVMVF9JVFIgICAgICAgICAgICAgICAgIDgwMDAKLSNkZWZpbmUgTUFYX0lUUiAgICAgICAgICAgICAgICAgICAxMDAwMDAKLSNkZWZpbmUgTUlOX0lUUiAgICAgICAgICAgICAgICAgICAgICAxMDAKLQogc3RydWN0IGUxMDAwX29wdGlvbiB7CiAJZW51bSB7IGVuYWJsZV9vcHRpb24sIHJhbmdlX29wdGlvbiwgbGlzdF9vcHRpb24gfSB0eXBlOwogCWNoYXIgKm5hbWU7CkBAIC01MTAsMTUgKzQ3MiwyNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAxOgogCQkJCURQUklOVEsoUFJPQkUsIElORk8sICIlcyBzZXQgdG8gZHluYW1pYyBtb2RlXG4iLAotCQkJCSAgICAgICAgb3B0Lm5hbWUpOworCQkJCQlvcHQubmFtZSk7CisJCQkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBhZGFwdGVyLT5pdHI7CisJCQkJYWRhcHRlci0+aXRyID0gMjAwMDA7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJRFBSSU5USyhQUk9CRSwgSU5GTywKKwkJCQkgICAgICAgICIlcyBzZXQgdG8gZHluYW1pYyBjb25zZXJ2YXRpdmUgbW9kZVxuIiwKKwkJCQkJb3B0Lm5hbWUpOworCQkJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gYWRhcHRlci0+aXRyOworCQkJCWFkYXB0ZXItPml0ciA9IDIwMDAwOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPml0ciwgJm9wdCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcik7CisJCQkJICAgICAgICBhZGFwdGVyKTsKKwkJCQkvKiBzYXZlIHRoZSBzZXR0aW5nLCBiZWNhdXNlIHRoZSBkeW5hbWljIGJpdHMgY2hhbmdlIGl0ciAqLworCQkJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gYWRhcHRlci0+aXRyOwogCQkJCWJyZWFrOwogCQkJfQogCQl9IGVsc2UgewotCQkJYWRhcHRlci0+aXRyID0gb3B0LmRlZjsKKwkJCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gb3B0LmRlZjsKKwkJCWFkYXB0ZXItPml0ciA9IDIwMDAwOwogCQl9CiAJfQogCXsgLyogU21hcnQgUG93ZXIgRG93biAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCmluZGV4IDcyZWY3YmQuLmYxNDNlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTI2LDYgKzI2LDcgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgImVoZWEuaCIKICNpbmNsdWRlICJlaGVhX3BoeXAuaCIKICNpbmNsdWRlICJlaGVhX3Ftci5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCBjNWVkNjM1Li40MzlmNDEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtMTEwLDYgKzExMCw4IEBACiAgKgkwLjU1OiAyMiBNYXIgMjAwNjogQWRkIGZsb3cgY29udHJvbCAocGF1c2UgZnJhbWUpLgogICoJMC41NjogMjIgTWFyIDIwMDY6IEFkZGl0aW9uYWwgZXRodG9vbCBjb25maWcgYW5kIG1vZHVsZXBhcmFtIHN1cHBvcnQuCiAgKgkwLjU3OiAxNCBNYXkgMjAwNjogTWFjIGFkZHJlc3Mgc2V0IGluIHByb2JlL3JlbW92ZSBhbmQgb3JkZXIgY29ycmVjdGlvbnMuCisgKgkwLjU4OiAzMCBPY3QgMjAwNjogQWRkZWQgc3VwcG9ydCBmb3Igc2lkZWJhbmQgbWFuYWdlbWVudCB1bml0LgorICoJMC41OTogMzAgT2N0IDIwMDY6IEFkZGVkIHN1cHBvcnQgZm9yIHJlY292ZXJhYmxlIGVycm9yLgogICoKICAqIEtub3duIGJ1Z3M6CiAgKiBXZSBzdXNwZWN0IHRoYXQgb24gc29tZSBoYXJkd2FyZSBubyBUWCBkb25lIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZC4KQEAgLTEyNiw3ICsxMjgsNyBAQAogI2Vsc2UKICNkZWZpbmUgRFJJVkVSTkFQSQogI2VuZGlmCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC41NyIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjU5IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE3NCwxMSArMTc2LDEyIEBACiAjZGVmaW5lIERFVl9IQVNfUEFVU0VGUkFNRV9UWCAgIDB4MDIwMCAgLyogZGV2aWNlIHN1cHBvcnRzIHR4IHBhdXNlIGZyYW1lcyAqLwogI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1MgICAgICAweDA0MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzICovCiAjZGVmaW5lIERFVl9IQVNfVEVTVF9FWFRFTkRFRCAgIDB4MDgwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGV4dGVuZGVkIGRpYWdub3N0aWMgdGVzdCAqLworI2RlZmluZSBERVZfSEFTX01HTVRfVU5JVCAgICAgICAweDEwMDAgIC8qIGRldmljZSBzdXBwb3J0cyBtYW5hZ2VtZW50IHVuaXQgKi8KIAogZW51bSB7CiAJTnZSZWdJcnFTdGF0dXMgPSAweDAwMCwKICNkZWZpbmUgTlZSRUdfSVJRU1RBVF9NSUlFVkVOVAkweDA0MAotI2RlZmluZSBOVlJFR19JUlFTVEFUX01BU0sJCTB4MWZmCisjZGVmaW5lIE5WUkVHX0lSUVNUQVRfTUFTSwkJMHg4MWZmCiAJTnZSZWdJcnFNYXNrID0gMHgwMDQsCiAjZGVmaW5lIE5WUkVHX0lSUV9SWF9FUlJPUgkJMHgwMDAxCiAjZGVmaW5lIE5WUkVHX0lSUV9SWAkJCTB4MDAwMgpAQCAtMTg5LDE1ICsxOTIsMTYgQEAKICNkZWZpbmUgTlZSRUdfSVJRX0xJTksJCQkweDAwNDAKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0ZPUkNFRAkJMHgwMDgwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9GT1JDRUQJCTB4MDEwMAorI2RlZmluZSBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUgkJMHg4MDAwCiAjZGVmaW5lIE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVAkweDAwZGYKICNkZWZpbmUgTlZSRUdfSVJRTUFTS19DUFUJCTB4MDA0MAogI2RlZmluZSBOVlJFR19JUlFfVFhfQUxMCQkoTlZSRUdfSVJRX1RYX0VSUnxOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RYX0ZPUkNFRCkKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0FMTAkJKE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGfE5WUkVHX0lSUV9SWF9GT1JDRUQpCi0jZGVmaW5lIE5WUkVHX0lSUV9PVEhFUgkJCShOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkspCisjZGVmaW5lIE5WUkVHX0lSUV9PVEhFUgkJCShOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpCiAKICNkZWZpbmUgTlZSRUdfSVJRX1VOS05PV04JKH4oTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1RYX0VSUnwgXAogCQkJCQlOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RJTUVSfE5WUkVHX0lSUV9MSU5LfE5WUkVHX0lSUV9SWF9GT1JDRUR8IFwKLQkJCQkJTlZSRUdfSVJRX1RYX0ZPUkNFRCkpCisJCQkJCU5WUkVHX0lSUV9UWF9GT1JDRUR8TlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKQogCiAJTnZSZWdVbmtub3duU2V0dXBSZWc2ID0gMHgwMDgsCiAjZGVmaW5lIE5WUkVHX1VOS1NFVFVQNl9WQUwJCTMKQEAgLTIyMiw2ICsyMjYsMTUgQEAKICNkZWZpbmUgTlZSRUdfTUFDX1JFU0VUX0FTU0VSVAkweDBGMwogCU52UmVnVHJhbnNtaXR0ZXJDb250cm9sID0gMHgwODQsCiAjZGVmaW5lIE5WUkVHX1hNSVRDVExfU1RBUlQJMHgwMQorI2RlZmluZSBOVlJFR19YTUlUQ1RMX01HTVRfU1QJMHg0MDAwMDAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSwkJMHgwMDBmMDAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX1NZTkNfTk9UX1JFQURZCTB4MAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQJMHgwMDA0MDAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9NQVNLCTB4MDAwMDBmMDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRQkweDAKKyNkZWZpbmUgTlZSRUdfWE1JVENUTF9IT1NUX1NFTUFfTUFTSwkweDAwMDBmMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUQkweDAwMDBmMDAwCisjZGVmaW5lIE5WUkVHX1hNSVRDVExfSE9TVF9MT0FERUQJMHgwMDAwNDAwMAogCU52UmVnVHJhbnNtaXR0ZXJTdGF0dXMgPSAweDA4OCwKICNkZWZpbmUgTlZSRUdfWE1JVFNUQVRfQlVTWQkweDAxCiAKQEAgLTMwNCw4ICszMTcsOCBAQAogI2RlZmluZSBOVlJFR19NSUlTVEFUX0xJTktDSEFOR0UJMHgwMDA4CiAjZGVmaW5lIE5WUkVHX01JSVNUQVRfTUFTSwkJMHgwMDBmCiAjZGVmaW5lIE5WUkVHX01JSVNUQVRfTUFTSzIJCTB4MDAwZgotCU52UmVnVW5rbm93blNldHVwUmVnNCA9IDB4MTg0LAotI2RlZmluZSBOVlJFR19VTktTRVRVUDRfVkFMCTgKKwlOdlJlZ01JSU1hc2sgPSAweDE4NCwKKyNkZWZpbmUgTlZSRUdfTUlJX0xJTktDSEFOR0UJCTB4MDAwOAogCiAJTnZSZWdBZGFwdGVyQ29udHJvbCA9IDB4MTg4LAogI2RlZmluZSBOVlJFR19BREFQVENUTF9TVEFSVAkweDAyCkBAIC03MDcsNiArNzIwLDcgQEAKIAl1bnNpZ25lZCBpbnQgcGh5X21vZGVsOwogCXUxNiBnaWdhYml0OwogCWludCBpbnRyX3Rlc3Q7CisJaW50IHJlY292ZXJfZXJyb3I7CiAKIAkvKiBHZW5lcmFsIGRhdGE6IFJPIGZpZWxkcyAqLwogCWRtYV9hZGRyX3QgcmluZ19hZGRyOwpAQCAtNzE5LDYgKzczMyw3IEBACiAJdTMyIGRyaXZlcl9kYXRhOwogCXUzMiByZWdpc3Rlcl9zaXplOwogCWludCByeF9jc3VtOworCXUzMiBtYWNfaW5fdXNlOwogCiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCkBAIC0yNDQzLDYgKzI0NTgsMjMgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggdW5rbm93biBldmVudHMgMHgleC4gUGxlYXNlIHJlcG9ydFxuIiwKIAkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKIAkJfQorCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7CisJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQkJZWxzZQorCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCQlwY2lfcHVzaChiYXNlKTsKKworCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7CisJCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOworCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQlicmVhazsKKwkJfQogI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX1JYX0FMTCkgewogCQkJbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKQEAgLTI2NzMsNiArMjcwNSwyMCBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAkJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOwogCQl9CisJCWlmIChldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikgeworCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJCXdyaXRlbChOVlJFR19JUlFfT1RIRVIsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQkJcGNpX3B1c2goYmFzZSk7CisKKwkJCWlmICghbnAtPmluX3NodXRkb3duKSB7CisJCQkJbnAtPm5pY19wb2xsX2lycSB8PSBOVlJFR19JUlFfT1RIRVI7CisJCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOworCQkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCQkJYnJlYWs7CisJCX0KIAkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggdW5rbm93biBldmVudHMgMHgleC4gUGxlYXNlIHJlcG9ydFxuIiwKIAkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKQEAgLTI5MDIsNiArMjk0OCw0MiBAQAogCX0KIAlucC0+bmljX3BvbGxfaXJxID0gMDsKIAorCWlmIChucC0+cmVjb3Zlcl9lcnJvcikgeworCQlucC0+cmVjb3Zlcl9lcnJvciA9IDA7CisJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogTUFDIGluIHJlY292ZXJhYmxlIGVycm9yIHN0YXRlXG4iKTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOworCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQkvKiBzdG9wIGVuZ2luZXMgKi8KKwkJCW52X3N0b3BfcngoZGV2KTsKKwkJCW52X3N0b3BfdHgoZGV2KTsKKwkJCW52X3R4cnhfcmVzZXQoZGV2KTsKKwkJCS8qIGRyYWluIHJ4IHF1ZXVlICovCisJCQludl9kcmFpbl9yeChkZXYpOworCQkJbnZfZHJhaW5fdHgoZGV2KTsKKwkJCS8qIHJlaW5pdCBkcml2ZXIgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KKwkJCXNldF9idWZzaXplKGRldik7CisJCQlpZiAobnZfaW5pdF9yaW5nKGRldikpIHsKKwkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKKwkJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKKwkJCX0KKwkJCS8qIHJlaW5pdCBuaWMgdmlldyBvZiB0aGUgcnggcXVldWUgKi8KKwkJCXdyaXRlbChucC0+cnhfYnVmX3N6LCBiYXNlICsgTnZSZWdPZmZsb2FkQ29uZmlnKTsKKwkJCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOworCQkJd3JpdGVsKCAoKG5wLT5yeF9yaW5nX3NpemUtMSkgPDwgTlZSRUdfUklOR1NaX1JYU0hJRlQpICsgKChucC0+dHhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9UWFNISUZUKSwKKwkJCQliYXNlICsgTnZSZWdSaW5nU2l6ZXMpOworCQkJcGNpX3B1c2goYmFzZSk7CisJCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOworCQkJcGNpX3B1c2goYmFzZSk7CisKKwkJCS8qIHJlc3RhcnQgcnggZW5naW5lICovCisJCQludl9zdGFydF9yeChkZXYpOworCQkJbnZfc3RhcnRfdHgoZGV2KTsKKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKKwkJfQorCX0KKwogCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYtPmlycSkgaGVyZT8gKi8KIAogCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKQEAgLTQwMzAsNiArNDExMiw1NCBAQAogCS8qIG5vdGhpbmcgdG8gZG8gKi8KIH07CiAKKy8qIFRoZSBtZ210IHVuaXQgYW5kIGRyaXZlciB1c2UgYSBzZW1hcGhvcmUgdG8gYWNjZXNzIHRoZSBwaHkgZHVyaW5nIGluaXQgKi8KK3N0YXRpYyBpbnQgbnZfbWdtdF9hY3F1aXJlX3NlbWEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCWludCBpOworCXUzMiB0eF9jdHJsLCBtZ210X3NlbWE7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZ210X3NlbWEgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfTUFTSzsKKwkJaWYgKG1nbXRfc2VtYSA9PSBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9GUkVFKQorCQkJYnJlYWs7CisJCW1zbGVlcCg1MDApOworCX0KKworCWlmIChtZ210X3NlbWEgIT0gTlZSRUdfWE1JVENUTF9NR01UX1NFTUFfRlJFRSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXR4X2N0cmwgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCQl0eF9jdHJsIHw9IE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUTsKKwkJd3JpdGVsKHR4X2N0cmwsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisKKwkJLyogdmVyaWZ5IHRoYXQgc2VtYXBob3JlIHdhcyBhY3F1aXJlZCAqLworCQl0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwkJaWYgKCgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUSkgJiYKKwkJICAgICgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX0ZSRUUpKQorCQkJcmV0dXJuIDE7CisJCWVsc2UKKwkJCXVkZWxheSg1MCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEluZGljYXRlIHRvIG1nbXQgdW5pdCB3aGV0aGVyIGRyaXZlciBpcyBsb2FkZWQgb3Igbm90ICovCitzdGF0aWMgdm9pZCBudl9tZ210X2RyaXZlcl9sb2FkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxvYWRlZCkKK3sKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiB0eF9jdHJsOworCisJdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJaWYgKGxvYWRlZCkKKwkJdHhfY3RybCB8PSBOVlJFR19YTUlUQ1RMX0hPU1RfTE9BREVEOworCWVsc2UKKwkJdHhfY3RybCAmPSB+TlZSRUdfWE1JVENUTF9IT1NUX0xPQURFRDsKKwl3cml0ZWwodHhfY3RybCwgYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKK30KKwogc3RhdGljIGludCBudl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTQwODUsNyArNDIxNSw3IEBACiAJCQlOVl9TRVRVUDVfREVMQVksIE5WX1NFVFVQNV9ERUxBWU1BWCwKIAkJCUtFUk5fSU5GTyAib3BlbjogU2V0dXBSZWc1LCBCaXQgMzEgcmVtYWluZWQgb2ZmXG4iKTsKIAotCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc0KTsKKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnTUlJTWFzayk7CiAJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKIAl3cml0ZWwoTlZSRUdfTUlJU1RBVF9NQVNLMiwgYmFzZSArIE52UmVnTUlJU3RhdHVzKTsKIApAQCAtNDExMSw3ICs0MjQxLDcgQEAKIAl3cml0ZWwoKG5wLT5waHlhZGRyIDw8IE5WUkVHX0FEQVBUQ1RMX1BIWVNISUZUKXxOVlJFR19BREFQVENUTF9QSFlWQUxJRHxOVlJFR19BREFQVENUTF9SVU5OSU5HLAogCQkJYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOwogCXdyaXRlbChOVlJFR19NSUlTUEVFRF9CSVQ4fE5WUkVHX01JSURFTEFZLCBiYXNlICsgTnZSZWdNSUlTcGVlZCk7Ci0Jd3JpdGVsKE5WUkVHX1VOS1NFVFVQNF9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzQpOworCXdyaXRlbChOVlJFR19NSUlfTElOS0NIQU5HRSwgYmFzZSArIE52UmVnTUlJTWFzayk7CiAJaWYgKG5wLT53b2xlbmFibGVkKQogCQl3cml0ZWwoTlZSRUdfV0FLRVVQRkxBR1NfRU5BQkxFICwgYmFzZSArIE52UmVnV2FrZVVwRmxhZ3MpOwogCkBAIC00MjMwLDYgKzQzNjAsOCBAQAogCXU4IF9faW9tZW0gKmJhc2U7CiAJaW50IGVyciwgaTsKIAl1MzIgcG93ZXJzdGF0ZSwgdHhyZWc7CisJdTMyIHBoeXN0YXRlX29yaWcgPSAwLCBwaHlzdGF0ZTsKKwlpbnQgcGh5aW5pdGlhbGl6ZWQgPSAwOwogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBmZV9wcml2KSk7CiAJZXJyID0gLUVOT01FTTsKQEAgLTQ1MTQsNiArNDY0Niw0OCBAQAogCQlucC0+bmVlZF9saW5rdGltZXIgPSAwOwogCX0KIAorCS8qIGNsZWFyIHBoeSBzdGF0ZSBhbmQgdGVtcG9yYXJpbHkgaGFsdCBwaHkgaW50ZXJydXB0cyAqLworCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdNSUlNYXNrKTsKKwlwaHlzdGF0ZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKKwlpZiAocGh5c3RhdGUgJiBOVlJFR19BREFQVENUTF9SVU5OSU5HKSB7CisJCXBoeXN0YXRlX29yaWcgPSAxOworCQlwaHlzdGF0ZSAmPSB+TlZSRUdfQURBUFRDVExfUlVOTklORzsKKwkJd3JpdGVsKHBoeXN0YXRlLCBiYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CisJfQorCXdyaXRlbChOVlJFR19NSUlTVEFUX01BU0ssIGJhc2UgKyBOdlJlZ01JSVN0YXR1cyk7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJd3JpdGVsKDB4MSwgYmFzZSArIDB4MjA0KTsgcGNpX3B1c2goYmFzZSk7CisJCW1zbGVlcCg1MDApOworCQkvKiBtYW5hZ2VtZW50IHVuaXQgcnVubmluZyBvbiB0aGUgbWFjPyAqLworCQlucC0+bWFjX2luX3VzZSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX01HTVRfU1Q7CisJCWlmIChucC0+bWFjX2luX3VzZSkgeworCQkJdTMyIG1nbXRfc3luYzsKKwkJCS8qIG1hbmFnZW1lbnQgdW5pdCBzZXR1cCB0aGUgcGh5IGFscmVhZHk/ICovCisJCQltZ210X3N5bmMgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX01BU0s7CisJCQlpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19OT1RfUkVBRFkpIHsKKwkJCQlpZiAoIW52X21nbXRfYWNxdWlyZV9zZW1hKGRldikpIHsKKwkJCQkJZm9yIChpID0gMDsgaSA8IDUwMDA7IGkrKykgeworCQkJCQkJbXNsZWVwKDEpOworCQkJCQkJbWdtdF9zeW5jID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19NQVNLOworCQkJCQkJaWYgKG1nbXRfc3luYyA9PSBOVlJFR19YTUlUQ1RMX1NZTkNfTk9UX1JFQURZKQorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJaWYgKG1nbXRfc3luYyA9PSBOVlJFR19YTUlUQ1RMX1NZTkNfUEhZX0lOSVQpCisJCQkJCQkJcGh5aW5pdGlhbGl6ZWQgPSAxOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvKiB3ZSBuZWVkIHRvIGluaXQgdGhlIHBoeSAqLworCQkJCX0KKwkJCX0gZWxzZSBpZiAobWdtdF9zeW5jID09IE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkgeworCQkJCS8qIHBoeSBpcyBpbml0ZWQgYnkgU01VICovCisJCQkJcGh5aW5pdGlhbGl6ZWQgPSAxOworCQkJfSBlbHNlIHsKKwkJCQkvKiB3ZSBuZWVkIHRvIGluaXQgdGhlIHBoeSAqLworCQkJfQorCQl9CisJfQorCiAJLyogZmluZCBhIHN1aXRhYmxlIHBoeSAqLwogCWZvciAoaSA9IDE7IGkgPD0gMzI7IGkrKykgewogCQlpbnQgaWQxLCBpZDI7CkBAIC00NTQ1LDggKzQ3MTksMTQgQEAKIAkJZ290byBvdXRfZXJyb3I7CiAJfQogCi0JLyogcmVzZXQgaXQgKi8KLQlwaHlfaW5pdChkZXYpOworCWlmICghcGh5aW5pdGlhbGl6ZWQpIHsKKwkJLyogcmVzZXQgaXQgKi8KKwkJcGh5X2luaXQoZGV2KTsKKwl9CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NR01UX1VOSVQpIHsKKwkJbnZfbWdtdF9kcml2ZXJfbG9hZGVkKGRldiwgMSk7CisJfQogCiAJLyogc2V0IGRlZmF1bHQgbGluayBzcGVlZCBzZXR0aW5ncyAqLwogCW5wLT5saW5rc3BlZWQgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwOwpAQCAtNDU2NSw2ICs0NzQ1LDEwIEBACiAJcmV0dXJuIDA7CiAKIG91dF9lcnJvcjoKKwlpZiAocGh5c3RhdGVfb3JpZykKKwkJd3JpdGVsKHBoeXN0YXRlfE5WUkVHX0FEQVBUQ1RMX1JVTk5JTkcsIGJhc2UgKyBOdlJlZ0FkYXB0ZXJDb250cm9sKTsKKwlpZiAobnAtPm1hY19pbl91c2UpCisJCW52X21nbXRfZHJpdmVyX2xvYWRlZChkZXYsIDApOwogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKIG91dF9mcmVlcmluZzoKIAlmcmVlX3JpbmdzKGRldik7CkBAIC00NTk0LDYgKzQ3NzgsOSBAQAogCXdyaXRlbChucC0+b3JpZ19tYWNbMF0sIGJhc2UgKyBOdlJlZ01hY0FkZHJBKTsKIAl3cml0ZWwobnAtPm9yaWdfbWFjWzFdLCBiYXNlICsgTnZSZWdNYWNBZGRyQik7CiAKKwlpZiAobnAtPm1hY19pbl91c2UpCisJCW52X21nbXRfZHJpdmVyX2xvYWRlZChkZXYsIDApOworCiAJLyogZnJlZSBhbGwgc3RydWN0dXJlcyAqLwogCWZyZWVfcmluZ3MoZGV2KTsKIAlpb3VubWFwKGdldF9od2Jhc2UoZGV2KSk7CkBAIC00NjAzLDYgKzQ3OTAsNTAgQEAKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgbnZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlnb3RvIG91dDsKKworCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKworCS8vIEdyb3NzLgorCW52X2Nsb3NlKGRldik7CisKKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIG5wLT53b2xlbmFibGVkKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKK291dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gb3V0OworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDAsIDApOworCisJcmMgPSBudl9vcGVuKGRldik7CitvdXQ6CisJcmV0dXJuIHJjOworfQorI2Vsc2UKKyNkZWZpbmUgbnZfc3VzcGVuZCBOVUxMCisjZGVmaW5lIG52X3Jlc3VtZSBOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7CiAJewkvKiBuRm9yY2UgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMSksCkBAIC00NjU4LDQzICs0ODg5LDU5IEBACiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDU1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfVkxBTnxERVZfSEFTX01TSXxERVZfSEFTX01TSV9YfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVELAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjApLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjMpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKKwl9LAorCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjQpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAorCX0sCisJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCisJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNSksCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYfERFVl9IQVNfU1RBVElTVElDU3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVQsCisJfSwKKwl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI2KSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFh8REVWX0hBU19TVEFUSVNUSUNTfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVCwKKwl9LAorCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLworCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjcpLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWHxERVZfSEFTX1NUQVRJU1RJQ1N8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklULAogCX0sCiAJezAsfSwKIH07CkBAIC00NzA0LDkgKzQ5NTEsMTAgQEAKIAkuaWRfdGFibGUgPSBwY2lfdGJsLAogCS5wcm9iZSA9IG52X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChudl9yZW1vdmUpLAorCS5zdXNwZW5kID0gbnZfc3VzcGVuZCwKKwkucmVzdW1lCT0gbnZfcmVzdW1lLAogfTsKIAotCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X25pYyh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aC5jOiBSZXZlcnNlIEVuZ2luZWVyZWQgbkZvcmNlIGV0aGVybmV0IGRyaXZlci4gVmVyc2lvbiAlcy5cbiIsIEZPUkNFREVUSF9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IGNiMzk1ODcuLjg4OWQzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtNzc5LDcgKzc3OSw4IEBACiAJZmVwLT5vbGRzcGVlZCA9IDA7CiAJZmVwLT5vbGRkdXBsZXggPSAtMTsKIAlpZihmZXAtPmZwaS0+YnVzX2lkKQotCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGZlcC0+ZnBpLT5idXNfaWQsICZmc19hZGp1c3RfbGluaywgMCk7CisJCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZmVwLT5mcGktPmJ1c19pZCwgJmZzX2FkanVzdF9saW5rLCAwLAorCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCWVsc2UgewogCQlwcmludGsoIk5vIHBoeSBidXMgSUQgc3BlY2lmaWVkIGluIEJTUCBjb2RlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggYTA2ZDhkMS4uYmFhMzUxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtOSw3ICs5LDcgQEAKICAqIEF1dGhvcjogQW5keSBGbGVtaW5nCiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTEzMyw2ICsxMzMsOSBAQAogI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIHN0YXRpYyBpbnQgZ2Zhcl9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBnZmFyX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKIGludCBnZmFyX2NsZWFuX3J4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHJ4X3dvcmtfbGltaXQpOwogc3RhdGljIGludCBnZmFyX3Byb2Nlc3NfZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbmd0aCk7CiBzdGF0aWMgdm9pZCBnZmFyX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKQEAgLTI2MCw2ICsyNjMsOSBAQAogCWRldi0+cG9sbCA9IGdmYXJfcG9sbDsKIAlkZXYtPndlaWdodCA9IEdGQVJfREVWX1dFSUdIVDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZmFyX25ldHBvbGw7CisjZW5kaWYKIAlkZXYtPnN0b3AgPSBnZmFyX2Nsb3NlOwogCWRldi0+Z2V0X3N0YXRzID0gZ2Zhcl9nZXRfc3RhdHM7CiAJZGV2LT5jaGFuZ2VfbXR1ID0gZ2Zhcl9jaGFuZ2VfbXR1OwpAQCAtMzkyLDYgKzM5OCwzOCBAQAogfQogCiAKKy8qIFJlYWRzIHRoZSBjb250cm9sbGVyJ3MgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB3aGF0IGludGVyZmFjZQorICogY29ubmVjdHMgaXQgdG8gdGhlIFBIWS4KKyAqLworc3RhdGljIHBoeV9pbnRlcmZhY2VfdCBnZmFyX2dldF9pbnRlcmZhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgZWNudHJsID0gZ2Zhcl9yZWFkKCZwcml2LT5yZWdzLT5lY250cmwpOworCisJaWYgKGVjbnRybCAmIEVDTlRSTF9TR01JSV9NT0RFKQorCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOworCisJaWYgKGVjbnRybCAmIEVDTlRSTF9UQklfTU9ERSkgeworCQlpZiAoZWNudHJsICYgRUNOVFJMX1JFRFVDRURfTU9ERSkKKwkJCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfUlRCSTsKKwkJZWxzZQorCQkJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9UQkk7CisJfQorCisJaWYgKGVjbnRybCAmIEVDTlRSTF9SRURVQ0VEX01PREUpIHsKKwkJaWYgKGVjbnRybCAmIEVDTlRSTF9SRURVQ0VEX01JSV9NT0RFKQorCQkJcmV0dXJuIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJOworCQllbHNlCisJCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJOworCX0KKworCWlmIChwcml2LT5laW5mby0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19HSUdBQklUKQorCQlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7CisKKwlyZXR1cm4gUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKK30KKworCiAvKiBJbml0aWFsaXplcyBkcml2ZXIncyBQSFkgc3RhdGUsIGFuZCBhdHRhY2hlcyB0byB0aGUgUEhZLgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiAgKi8KQEAgLTQwMyw2ICs0NDEsNyBAQAogCQlTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgOiAwOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJY2hhciBwaHlfaWRbQlVTX0lEX1NJWkVdOworCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiAKIAlwcml2LT5vbGRsaW5rID0gMDsKIAlwcml2LT5vbGRzcGVlZCA9IDA7CkBAIC00MTAsNyArNDQ5LDkgQEAKIAogCXNucHJpbnRmKHBoeV9pZCwgQlVTX0lEX1NJWkUsIFBIWV9JRF9GTVQsIHByaXYtPmVpbmZvLT5idXNfaWQsIHByaXYtPmVpbmZvLT5waHlfaWQpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlfaWQsICZhZGp1c3RfbGluaywgMCk7CisJaW50ZXJmYWNlID0gZ2Zhcl9nZXRfaW50ZXJmYWNlKGRldik7CisKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9pZCwgJmFkanVzdF9saW5rLCAwLCBpbnRlcmZhY2UpOwogCiAJaWYgKElTX0VSUihwaHlkZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTUzNiw2ICsxNTc3LDMzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisvKgorICogUG9sbGluZyAnaW50ZXJydXB0JyAtIHVzZWQgYnkgdGhpbmdzIGxpa2UgbmV0Y29uc29sZSB0byBzZW5kIHNrYnMKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLiBJdCdzIG5vdCBjYWxsZWQgd2hpbGUKKyAqIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBpcyBleGVjdXRpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGdmYXJfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogSWYgdGhlIGRldmljZSBoYXMgbXVsdGlwbGUgaW50ZXJydXB0cywgcnVuIHR4L3J4ICovCisJaWYgKHByaXYtPmVpbmZvLT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX01VTFRJX0lOVFIpIHsKKwkJZGlzYWJsZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQpOworCQlkaXNhYmxlX2lycShwcml2LT5pbnRlcnJ1cHRSZWNlaXZlKTsKKwkJZGlzYWJsZV9pcnEocHJpdi0+aW50ZXJydXB0RXJyb3IpOworCQlnZmFyX2ludGVycnVwdChwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKKwkJZW5hYmxlX2lycShwcml2LT5pbnRlcnJ1cHRFcnJvcik7CisJCWVuYWJsZV9pcnEocHJpdi0+aW50ZXJydXB0UmVjZWl2ZSk7CisJCWVuYWJsZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQpOworCX0gZWxzZSB7CisJCWRpc2FibGVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0KTsKKwkJZ2Zhcl9pbnRlcnJ1cHQocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CisJCWVuYWJsZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQpOworCX0KK30KKyNlbmRpZgorCiAvKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIGRldmljZXMgd2l0aCBvbmUgaW50ZXJydXB0ICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgZ2Zhcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IDllODFhNTAuLjM5ZTllMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTE2MCw3ICsxNjAsMTAgQEAKIAogI2RlZmluZSBFQ05UUkxfSU5JVF9TRVRUSU5HUwkweDAwMDAxMDAwCiAjZGVmaW5lIEVDTlRSTF9UQklfTU9ERSAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgRUNOVFJMX1JFRFVDRURfTU9ERQkweDAwMDAwMDEwCiAjZGVmaW5lIEVDTlRSTF9SMTAwCQkweDAwMDAwMDA4CisjZGVmaW5lIEVDTlRSTF9SRURVQ0VEX01JSV9NT0RFCTB4MDAwMDAwMDQKKyNkZWZpbmUgRUNOVFJMX1NHTUlJX01PREUJMHgwMDAwMDAwMgogCiAjZGVmaW5lIE1SQkxSX0lOSVRfU0VUVElOR1MJREVGQVVMVF9SWF9CVUZGRVJfU0laRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeWRyYS5jIGIvZHJpdmVycy9uZXQvaHlkcmEuYwppbmRleCA5MTMyNmVhLi5mOTcwYmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeWRyYS5jCisrKyBiL2RyaXZlcnMvbmV0L2h5ZHJhLmMKQEAgLTMxLDcgKzMxLDE2IEBACiAjaW5jbHVkZSA8YXNtL2FtaWdhaHcuaD4KICNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgogCi0jaW5jbHVkZSAiODM5MC5oIgorI2RlZmluZSBFSV9TSElGVCh4KQkoZWlfbG9jYWwtPnJlZ19vZmZzZXRbeF0pCisjZGVmaW5lIGVpX2luYihwb3J0KSAgIGluXzgocG9ydCkKKyNkZWZpbmUgZWlfb3V0Yih2YWwscG9ydCkgIG91dF84KHBvcnQsdmFsKQorI2RlZmluZSBlaV9pbmJfcChwb3J0KSAgIGluXzgocG9ydCkKKyNkZWZpbmUgZWlfb3V0Yl9wKHZhbCxwb3J0KSAgb3V0XzgocG9ydCx2YWwpCisKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9CisgICAgIjgzOTAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdilcbiI7CisKKyNpbmNsdWRlICJsaWI4MzkwLmMiCiAKICNkZWZpbmUgTkVfRU4wX0RDRkcgICAgICgweDBlKjIpCiAKQEAgLTEwMCw3ICsxMDksNyBAQAogCTB4MTAsIDB4MTIsIDB4MTQsIDB4MTYsIDB4MTgsIDB4MWEsIDB4MWMsIDB4MWUsCiAgICAgfTsKIAotICAgIGRldiA9IGFsbG9jX2VpX25ldGRldigpOworICAgIGRldiA9IF9fX19hbGxvY19laV9uZXRkZXYoMCk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAgICAgU0VUX01PRFVMRV9PV05FUihkZXYpOwpAQCAtMTE3LDcgKzEyNiw3IEBACiAgICAgZGV2LT5pcnEgPSBJUlFfQU1JR0FfUE9SVFM7CiAKICAgICAvKiBJbnN0YWxsIHRoZSBJbnRlcnJ1cHQgaGFuZGxlciAqLwotICAgIGlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVpX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJIeWRyYSBFdGhlcm5ldCIsCisgICAgaWYgKHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgX19laV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiSHlkcmEgRXRoZXJuZXQiLAogCQkgICAgZGV2KSkgewogCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIC1FQUdBSU47CkBAIC0xMzksMTAgKzE0OCwxMCBAQAogICAgIGRldi0+b3BlbiA9ICZoeWRyYV9vcGVuOwogICAgIGRldi0+c3RvcCA9ICZoeWRyYV9jbG9zZTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKKyAgICBkZXYtPnBvbGxfY29udHJvbGxlciA9IF9fZWlfcG9sbDsKICNlbmRpZgogCi0gICAgTlM4MzkwX2luaXQoZGV2LCAwKTsKKyAgICBfX05TODM5MF9pbml0KGRldiwgMCk7CiAKICAgICBlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgICBpZiAoZXJyKSB7CkBAIC0xNjQsNyArMTczLDcgQEAKIAogc3RhdGljIGludCBoeWRyYV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgZWlfb3BlbihkZXYpOworICAgIF9fZWlfb3BlbihkZXYpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNzIsNyArMTgxLDcgQEAKIHsKICAgICBpZiAoZWlfZGVidWcgPiAxKQogCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwotICAgIGVpX2Nsb3NlKGRldik7CisgICAgX19laV9jbG9zZShkZXYpOwogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwppbmRleCBmNTZiMDBlLi5mMGQzMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlIDxuZXQvaXAuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCBlMDlmNTc1Li43YjEyNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJaWYobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKSB7CiAJCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJCWNzcyA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7Ci0JCWNzbyA9IChza2ItPmgucmF3ICsgc2tiLT5jc3VtKSAtIHNrYi0+ZGF0YTsKKwkJY3NvID0gY3NzICsgc2tiLT5jc3VtX29mZnNldDsKIAogCQlpID0gYWRhcHRlci0+dHhfcmluZy5uZXh0X3RvX3VzZTsKIAkJY29udGV4dF9kZXNjID0gSVhHQl9DT05URVhUX0RFU0MoYWRhcHRlci0+dHhfcmluZywgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sYW5jZS5jIGIvZHJpdmVycy9uZXQvbGFuY2UuYwppbmRleCA2ZWZiZDQ5Li40MjU2YzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYyBiL2RyaXZlcnMvbmV0L2xpYjgzOTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzI2YzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCkBAIC0wLDAgKzEsMTA5NyBAQAorLyogODM5MC5jOiBBIGdlbmVyYWwgTlM4MzkwIGV0aGVybmV0IGRyaXZlciBjb3JlIGZvciBsaW51eC4gKi8KKy8qCisJV3JpdHRlbiAxOTkyLTk0IGJ5IERvbmFsZCBCZWNrZXIuCisKKwlDb3B5cmlnaHQgMTk5MyBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgdGhlCisJRGlyZWN0b3IsIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeS4KKworCVRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKKwlvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorCisJVGhlIGF1dGhvciBtYXkgYmUgcmVhY2hlZCBhcyBiZWNrZXJAc2N5bGQuY29tLCBvciBDL08KKwlTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24KKwk0MTAgU2V2ZXJuIEF2ZS4sIFN1aXRlIDIxMAorCUFubmFwb2xpcyBNRCAyMTQwMworCisKKyAgVGhpcyBpcyB0aGUgY2hpcC1zcGVjaWZpYyBjb2RlIGZvciBtYW55IDgzOTAtYmFzZWQgZXRoZXJuZXQgYWRhcHRvcnMuCisgIFRoaXMgaXMgbm90IGEgY29tcGxldGUgZHJpdmVyLCBpdCBtdXN0IGJlIGNvbWJpbmVkIHdpdGggYm9hcmQtc3BlY2lmaWMKKyAgY29kZSBzdWNoIGFzIG5lLmMsIHdkLmMsIDNjNTAzLmMsIGV0Yy4KKworICBTZWVpbmcgaG93IGF0IGxlYXN0IGVpZ2h0IGRyaXZlcnMgdXNlIHRoaXMgY29kZSwgKG5vdCBjb3VudGluZyB0aGUKKyAgUENNQ0lBIG9uZXMgZWl0aGVyKSBpdCBpcyBlYXN5IHRvIGJyZWFrIHNvbWUgY2FyZCBieSB3aGF0IHNlZW1zIGxpa2UKKyAgYSBzaW1wbGUgaW5ub2NlbnQgY2hhbmdlLiBQbGVhc2UgY29udGFjdCBtZSBvciBEb25hbGQgaWYgeW91IHRoaW5rCisgIHlvdSBoYXZlIGZvdW5kIHNvbWV0aGluZyB0aGF0IG5lZWRzIGNoYW5naW5nLiAtLSBQRworCisKKyAgQ2hhbmdlbG9nOgorCisgIFBhdWwgR29ydG1ha2VyCTogcmVtb3ZlIHNldF9iaXQgbG9jaywgb3RoZXIgY2xlYW51cHMuCisgIFBhdWwgR29ydG1ha2VyCTogYWRkIGVpX2dldF84MzkwX2hkcigpIHNvIHdlIGNhbiBwYXNzIHNrYidzIHRvCisJCQkgIGVpX2Jsb2NrX2lucHV0KCkgZm9yIGV0aF9pb19jb3B5X2FuZF9zdW0oKS4KKyAgUGF1bCBHb3J0bWFrZXIJOiBleGNoYW5nZSBzdGF0aWMgaW50IGVpX3Bpbmdwb25nIGZvciBhICNkZWZpbmUsCisJCQkgIGFsc28gYWRkIGJldHRlciBUeCBlcnJvciBoYW5kbGluZy4KKyAgUGF1bCBHb3J0bWFrZXIJOiByZXdyaXRlIFJ4IG92ZXJydW4gaGFuZGxpbmcgYXMgcGVyIE5TIHNwZWNzLgorICBBbGV4ZXkgS3V6bmV0c292CTogdXNlIHRoZSA4MzkwJ3Mgc2l4IGJpdCBoYXNoIG11bHRpY2FzdCBmaWx0ZXIuCisgIFBhdWwgR29ydG1ha2VyCTogdHdlYWsgQU5LJ3MgYWJvdmUgbXVsdGljYXN0IGNoYW5nZXMgYSBiaXQuCisgIFBhdWwgR29ydG1ha2VyCTogdXBkYXRlIHBhY2tldCBzdGF0aXN0aWNzIGZvciB2Mi4xLngKKyAgQWxhbiBDb3gJCTogc3VwcG9ydCBhcmJpdGFyeSBzdHVwaWQgcG9ydCBtYXBwaW5ncyBvbiB0aGUKKyAgCQkJICA2OEsgTWFjaW50b3NoLiBTdXBwb3J0ID4xNmJpdCBJL08gc3BhY2VzCisgIFBhdWwgR29ydG1ha2VyCTogYWRkIGttb2Qgc3VwcG9ydCBmb3IgYXV0by1sb2FkaW5nIG9mIHRoZSA4MzkwCisJCQkgIG1vZHVsZSBieSBhbGwgZHJpdmVycyB0aGF0IHJlcXVpcmUgaXQuCisgIEFsYW4gQ294CQk6IFNwaW5sb2NraW5nIHdvcmssIGFkZGVkICdCVUdfODNDNjkwJworICBQYXVsIEdvcnRtYWtlcgk6IFNlcGFyYXRlIG91dCBUeCB0aW1lb3V0IGNvZGUgZnJvbSBUeCBwYXRoLgorICBQYXVsIEdvcnRtYWtlcgk6IFJlbW92ZSBvbGQgdW51c2VkIHNpbmdsZSBUeCBidWZmZXIgY29kZS4KKyAgSGF5YXRvIEZ1aml3YXJhCTogQWRkIG0zMnIgc3VwcG9ydC4KKyAgUGF1bCBHb3J0bWFrZXIJOiB1c2Ugc2tiX3BhZHRvKCkgaW5zdGVhZCBvZiBzdGFjayBzY3JhdGNoIGFyZWEKKworICBTb3VyY2VzOgorICBUaGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMQU4gRGF0YWJvb2ssIGFuZCB0aGUgM0NvbSAzYzUwMyBkYXRhYm9vay4KKworICAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNkZWZpbmUgTlM4MzkwX0NPUkUKKyNpbmNsdWRlICI4MzkwLmgiCisKKyNkZWZpbmUgQlVHXzgzQzY5MAorCisvKiBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbmFsIGZ1bmN0aW9uIGludGVyZmFjZXMgdG8gYm9hcmQtc3BlY2lmaWMKKyAgIHJvdXRpbmVzLgorCXZvaWQgcmVzZXRfODM5MChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorCQlSZXNldHMgdGhlIGJvYXJkIGFzc29jaWF0ZWQgd2l0aCBERVYsIGluY2x1ZGluZyBhIGhhcmR3YXJlIHJlc2V0IG9mCisJCXRoZSA4MzkwLiAgVGhpcyBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZXJlIGlzIGEgdHJhbnNtaXQgdGltZW91dCwgYW5kCisJCWl0IGlzIGFsd2F5cyBmb2xsb3dlZCBieSA4MzkwX2luaXQoKS4KKwl2b2lkIGJsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkJICBpbnQgc3RhcnRfcGFnZSkKKwkJV3JpdGUgdGhlIENPVU5UIGJ5dGVzIG9mIEJVRiB0byB0aGUgcGFja2V0IGJ1ZmZlciBhdCBTVEFSVF9QQUdFLiAgVGhlCisJCSJwYWdlIiB2YWx1ZSB1c2VzIHRoZSA4MzkwJ3MgMjU2LWJ5dGUgcGFnZXMuCisJdm9pZCBnZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX2hkciAqaGRyLCBpbnQgcmluZ19wYWdlKQorCQlSZWFkIHRoZSA0IGJ5dGUsIHBhZ2UgYWxpZ25lZCA4MzkwIGhlYWRlci4gKklmKiB0aGVyZSBpcyBhCisJCXN1YnNlcXVlbnQgcmVhZCwgaXQgd2lsbCBiZSBvZiB0aGUgcmVzdCBvZiB0aGUgcGFja2V0LgorCXZvaWQgYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpCisJCVJlYWQgQ09VTlQgYnl0ZXMgZnJvbSB0aGUgcGFja2V0IGJ1ZmZlciBpbnRvIHRoZSBza2IgZGF0YSBhcmVhLiBTdGFydAorCQlyZWFkaW5nIGZyb20gUklOR19PRkZTRVQsIHRoZSBhZGRyZXNzIGFzIHRoZSA4MzkwIHNlZXMgaXQuICBUaGlzIHdpbGwgYWx3YXlzCisJCWZvbGxvdyB0aGUgcmVhZCBvZiB0aGUgODM5MCBoZWFkZXIuCisqLworI2RlZmluZSBlaV9yZXNldF84MzkwIChlaV9sb2NhbC0+cmVzZXRfODM5MCkKKyNkZWZpbmUgZWlfYmxvY2tfb3V0cHV0IChlaV9sb2NhbC0+YmxvY2tfb3V0cHV0KQorI2RlZmluZSBlaV9ibG9ja19pbnB1dCAoZWlfbG9jYWwtPmJsb2NrX2lucHV0KQorI2RlZmluZSBlaV9nZXRfODM5MF9oZHIgKGVpX2xvY2FsLT5nZXRfODM5MF9oZHIpCisKKy8qIHVzZSAwIGZvciBwcm9kdWN0aW9uLCAxIGZvciB2ZXJpZmljYXRpb24sID4yIGZvciBkZWJ1ZyAqLworI2lmbmRlZiBlaV9kZWJ1ZworaW50IGVpX2RlYnVnID0gMTsKKyNlbmRpZgorCisvKiBJbmRleCB0byBmdW5jdGlvbnMuICovCitzdGF0aWMgdm9pZCBlaV90eF9pbnRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgZWlfdHhfZXJyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgZWlfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGVpX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBlaV9yeF9vdmVycnVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisvKiBSb3V0aW5lcyBnZW5lcmljIHRvIE5TODM5MC1iYXNlZCBib2FyZHMuICovCitzdGF0aWMgdm9pZCBOUzgzOTBfdHJpZ2dlcl9zZW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCQkJCQkJCWludCBzdGFydF9wYWdlKTsKK3N0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGRvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIF9fTlM4MzkwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0cCk7CisKKy8qCisgKglTTVAgYW5kIHRoZSA4MzkwIHNldHVwLgorICoKKyAqCVRoZSA4MzkwIGlzbnQgZXhhY3RseSBkZXNpZ25lZCB0byBiZSBtdWx0aXRocmVhZGVkIG9uIFJYL1RYLiBUaGVyZSBpcworICoJYSBwYWdlIHJlZ2lzdGVyIHRoYXQgY29udHJvbHMgYmFuayBhbmQgcGFja2V0IGJ1ZmZlciBhY2Nlc3MuIFdlIGd1YXJkCisgKgl0aGlzIHdpdGggZWlfbG9jYWwtPnBhZ2VfbG9jay4gTm9ib2R5IHNob3VsZCBhc3N1bWUgb3Igc2V0IHRoZSBwYWdlIG90aGVyCisgKgl0aGFuIHplcm8gd2hlbiB0aGUgbG9jayBpcyBub3QgaGVsZC4gTG9jayBob2xkZXJzIG11c3QgcmVzdG9yZSBwYWdlIDAKKyAqCWJlZm9yZSB1bmxvY2tpbmcuIEV2ZW4gcHVyZSByZWFkZXJzIG11c3QgdGFrZSB0aGUgbG9jayB0byBwcm90ZWN0IGluCisgKglwYWdlIDAuCisgKgorICoJVG8gbWFrZSBsaWZlIGRpZmZpY3VsdCB0aGUgY2hpcCBjYW4gYWxzbyBiZSB2ZXJ5IHNsb3cuIFdlIHRoZXJlZm9yZSBjYW4ndAorICoJanVzdCB1c2Ugc3BpbmxvY2tzLiBGb3IgdGhlIGxvbmdlciBsb2NrdXBzIHdlIGRpc2FibGUgdGhlIGlycSB0aGUgZGV2aWNlCisgKglzaXRzIG9uIGFuZCBob2xkIHRoZSBsb2NrLiBXZSBtdXN0IGhvbGQgdGhlIGxvY2sgYmVjYXVzZSB0aGVyZSBpcyBhIGR1YWwKKyAqCXByb2Nlc3NvciBjYXNlIG90aGVyIHRoYW4gaW50ZXJydXB0cyAoZ2V0IHN0YXRzL3NldCBtdWx0aWNhc3QgbGlzdCBpbgorICoJcGFyYWxsZWwgd2l0aCBlYWNoIG90aGVyIGFuZCB0cmFuc21pdCkuCisgKgorICoJTm90ZTogaW4gdGhlb3J5IHdlIGNhbiBqdXN0IGRpc2FibGUgdGhlIGlycSBvbiB0aGUgY2FyZCBfYnV0XyB0aGVyZSBpcworICoJYSBsYXRlbmN5IG9uIFNNUCBpcnEgZGVsaXZlcnkuIFNvIHdlIGNhbiBlYXNpbHkgZ28gImRpc2FibGUgaXJxIiAic3luYyBpcnFzIgorICoJZW50ZXIgbG9jaywgdGFrZSB0aGUgcXVldWVkIGlycS4gU28gd2Ugd2FkZGxlIGluc3RlYWQgb2YgZmx5aW5nLgorICoKKyAqCUZpbmFsbHkgYnkgc3BlY2lhbCBhcnJhbmdlbWVudCBmb3IgdGhlIHB1cnBvc2Ugb2YgYmVpbmcgZ2VuZXJhbGx5CisgKglhbm5veWluZyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJoIGF0b21pYy4gVGhhdCBwbGFjZXMKKyAqCXJlc3RyaWN0aW9ucyBvbiB0aGUgdXNlciBjb250ZXh0IGNhbGxlcnMgYXMgZGlzYWJsZV9pcnEgd29uJ3Qgc2F2ZQorICoJdGhlbS4KKyAqLworCisKKworLyoqCisgKiBlaV9vcGVuIC0gT3Blbi9pbml0aWFsaXplIHRoZSBib2FyZC4KKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIHJvdXRpbmUgZ29lcyBhbGwtb3V0LCBzZXR0aW5nIGV2ZXJ5dGhpbmcKKyAqIHVwIGFuZXcgYXQgZWFjaCBvcGVuLCBldmVuIHRob3VnaCBtYW55IG9mIHRoZXNlIHJlZ2lzdGVycyBzaG91bGQgb25seQorICogbmVlZCB0byBiZSBzZXQgb25jZSBhdCBib290LgorICovCitzdGF0aWMgaW50IF9fZWlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogVGhlIGNhcmQgSS9PIHBhcnQgb2YgdGhlIGRyaXZlciAoZS5nLiAzYzUwMykgY2FuIGhvb2sgYSBUeCB0aW1lb3V0CisJICAgIHdyYXBwZXIgdGhhdCBkb2VzIGUuZy4gbWVkaWEgY2hlY2sgJiB0aGVuIGNhbGxzIGVpX3R4X3RpbWVvdXQuICovCisJaWYgKGRldi0+dHhfdGltZW91dCA9PSBOVUxMKQorCQkgZGV2LT50eF90aW1lb3V0ID0gZWlfdHhfdGltZW91dDsKKwlpZiAoZGV2LT53YXRjaGRvZ190aW1lbyA8PSAwKQorCQkgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CisKKwkvKgorCSAqCUdyYWIgdGhlIHBhZ2UgbG9jayBzbyB3ZSBvd24gdGhlIHJlZ2lzdGVyIHNldCwgdGhlbiBjYWxsCisJICoJdGhlIGluaXQgZnVuY3Rpb24uCisJICovCisKKyAgICAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOworCV9fTlM4MzkwX2luaXQoZGV2LCAxKTsKKwkvKiBTZXQgdGhlIGZsYWcgYmVmb3JlIHdlIGRyb3AgdGhlIGxvY2ssIFRoYXQgd2F5IHRoZSBJUlEgYXJyaXZlcworCSAgIGFmdGVyIGl0cyBzZXQgYW5kIHdlIGdldCBubyBzaWxseSB3YXJuaW5ncyAqLworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisgICAgICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOworCWVpX2xvY2FsLT5pcnFsb2NrID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBlaV9jbG9zZSAtIHNodXQgZG93biBuZXR3b3JrIGRldmljZQorICogQGRldjogbmV0d29yayBkZXZpY2UgdG8gY2xvc2UKKyAqCisgKiBPcHBvc2l0ZSBvZiBlaV9vcGVuKCkuIE9ubHkgdXNlZCB3aGVuICJpZmNvbmZpZyA8ZGV2bmFtZT4gZG93biIgaXMgZG9uZS4KKyAqLworc3RhdGljIGludCBfX2VpX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqCUhvbGQgdGhlIHBhZ2UgbG9jayBkdXJpbmcgY2xvc2UKKwkgKi8KKworICAgICAgCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7CisJX19OUzgzOTBfaW5pdChkZXYsIDApOworICAgICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZWlfdHhfdGltZW91dCAtIGhhbmRsZSB0cmFuc21pdCB0aW1lIG91dCBjb25kaXRpb24KKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHdoaWNoIGhhcyBhcHBhcmVudGx5IGZhbGxlbiBhc2xlZXAKKyAqCisgKiBDYWxsZWQgYnkga2VybmVsIHdoZW4gZGV2aWNlIG5ldmVyIGFja25vd2xlZGdlcyBhIHRyYW5zbWl0IGhhcworICogY29tcGxldGVkIChvciBmYWlsZWQpIC0gaS5lLiBuZXZlciBwb3N0ZWQgYSBUeCByZWxhdGVkIGludGVycnVwdC4KKyAqLworCitzdGF0aWMgdm9pZCBlaV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCWludCB0eHNyLCBpc3IsIHRpY2tzc29mYXIgPSBqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisjaWYgZGVmaW5lZChDT05GSUdfTTMyUikgJiYgZGVmaW5lZChDT05GSUdfU01QKQorCXVuc2lnbmVkIGxvbmcgaWN1Y3I7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWN1Y3IgPSBpbmwoTTMyUl9JQ1VfQ1IxX1BPUlRMKTsKKwlpY3VjciB8PSBNMzJSX0lDVUNSX0lTTU9EMTE7CisJb3V0bChpY3VjciwgTTMyUl9JQ1VfQ1IxX1BPUlRMKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKKwllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7CisJdHhzciA9IGVpX2luYihlODM5MF9iYXNlK0VOMF9UU1IpOworCWlzciA9IGVpX2luYihlODM5MF9iYXNlK0VOMF9JU1IpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggdGltZWQgb3V0LCAlcyBUU1I9JSMyeCwgSVNSPSUjMngsIHQ9JWQuXG4iLAorCQlkZXYtPm5hbWUsICh0eHNyICYgRU5UU1JfQUJUKSA/ICJleGNlc3MgY29sbGlzaW9ucy4iIDoKKwkJKGlzcikgPyAibG9zdCBpbnRlcnJ1cHQ/IiA6ICJjYWJsZSBwcm9ibGVtPyIsIHR4c3IsIGlzciwgdGlja3Nzb2Zhcik7CisKKwlpZiAoIWlzciAmJiAhZWlfbG9jYWwtPnN0YXQudHhfcGFja2V0cykKKwl7CisJCS8qIFRoZSA4MzkwIHByb2JhYmx5IGhhc24ndCBnb3R0ZW4gb24gdGhlIGNhYmxlIHlldC4gKi8KKwkJZWlfbG9jYWwtPmludGVyZmFjZV9udW0gXj0gMTsgICAvKiBUcnkgYSBkaWZmZXJlbnQgeGN2ci4gICovCisJfQorCisJLyogVWdseSBidXQgYSByZXNldCBjYW4gYmUgc2xvdywgeWV0IG11c3QgYmUgcHJvdGVjdGVkICovCisKKwlkaXNhYmxlX2lycV9ub3N5bmNfbG9ja2RlcChkZXYtPmlycSk7CisJc3Bpbl9sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKKworCS8qIFRyeSB0byByZXN0YXJ0IHRoZSBjYXJkLiAgUGVyaGFwcyB0aGUgdXNlciBoYXMgZml4ZWQgc29tZXRoaW5nLiAqLworCWVpX3Jlc2V0XzgzOTAoZGV2KTsKKwlfX05TODM5MF9pbml0KGRldiwgMSk7CisKKwlzcGluX3VubG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7CisJZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKKy8qKgorICogZWlfc3RhcnRfeG1pdCAtIGJlZ2luIHBhY2tldCB0cmFuc21pc3Npb24KKyAqIEBza2I6IHBhY2tldCB0byBiZSBzZW50CisgKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byB3aGljaCBwYWNrZXQgaXMgc2VudAorICoKKyAqIFNlbmRzIGEgcGFja2V0IHRvIGFuIDgzOTAgbmV0d29yayBkZXZpY2UuCisgKi8KKworc3RhdGljIGludCBlaV9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCWludCBzZW5kX2xlbmd0aCA9IHNrYi0+bGVuLCBvdXRwdXRfcGFnZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgYnVmW0VUSF9aTEVOXTsKKwljaGFyICpkYXRhID0gc2tiLT5kYXRhOworCisJaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKKwkJbWVtc2V0KGJ1ZiwgMCwgRVRIX1pMRU4pOwkvKiBtb3JlIGVmZmljaWVudCB0aGFuIGRvaW5nIGp1c3QgdGhlIG5lZWRlZCBiaXRzICovCisJCW1lbWNweShidWYsIGRhdGEsIHNrYi0+bGVuKTsKKwkJc2VuZF9sZW5ndGggPSBFVEhfWkxFTjsKKwkJZGF0YSA9IGJ1ZjsKKwl9CisKKwkvKiBNYXNrIGludGVycnVwdHMgZnJvbSB0aGUgZXRoZXJjYXJkLgorCSAgIFNNUDogV2UgaGF2ZSB0byBncmFiIHRoZSBsb2NrIGhlcmUgb3RoZXJ3aXNlIHRoZSBJUlEgaGFuZGxlcgorCSAgIG9uIGFub3RoZXIgQ1BVIGNhbiBmbGlwIHdpbmRvdyBhbmQgcmFjZSB0aGUgSVJRIG1hc2sgc2V0LiBXZSBlbmQKKwkgICB1cCB0cmFzaGluZyB0aGUgbWNhc3QgZmlsdGVyIG5vdCBkaXNhYmxpbmcgaXJxcyBpZiB3ZSBkb24ndCBsb2NrICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOworCWVpX291dGJfcCgweDAwLCBlODM5MF9iYXNlICsgRU4wX0lNUik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOworCisKKwkvKgorCSAqCVNsb3cgcGhhc2Ugd2l0aCBsb2NrIGhlbGQuCisJICovCisKKwlkaXNhYmxlX2lycV9ub3N5bmNfbG9ja2RlcF9pcnFzYXZlKGRldi0+aXJxLCAmZmxhZ3MpOworCisJc3Bpbl9sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKKworCWVpX2xvY2FsLT5pcnFsb2NrID0gMTsKKworCS8qCisJICogV2UgaGF2ZSB0d28gVHggc2xvdHMgYXZhaWxhYmxlIGZvciB1c2UuIEZpbmQgdGhlIGZpcnN0IGZyZWUKKwkgKiBzbG90LCBhbmQgdGhlbiBwZXJmb3JtIHNvbWUgc2FuaXR5IGNoZWNrcy4gV2l0aCB0d28gVHggYnVmcywKKwkgKiB5b3UgZ2V0IHZlcnkgY2xvc2UgdG8gdHJhbnNtaXR0aW5nIGJhY2stdG8tYmFjayBwYWNrZXRzLiBXaXRoCisJICogb25seSBvbmUgVHggYnVmLCB0aGUgdHJhbnNtaXR0ZXIgc2l0cyBpZGxlIHdoaWxlIHlvdSByZWxvYWQgdGhlCisJICogY2FyZCwgbGVhdmluZyBhIHN1YnN0YW50aWFsIGdhcCBiZXR3ZWVuIGVhY2ggdHJhbnNtaXR0ZWQgcGFja2V0LgorCSAqLworCisJaWYgKGVpX2xvY2FsLT50eDEgPT0gMCkKKwl7CisJCW91dHB1dF9wYWdlID0gZWlfbG9jYWwtPnR4X3N0YXJ0X3BhZ2U7CisJCWVpX2xvY2FsLT50eDEgPSBzZW5kX2xlbmd0aDsKKwkJaWYgKGVpX2RlYnVnICAmJiAgZWlfbG9jYWwtPnR4MiA+IDApCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlkbGUgdHJhbnNtaXR0ZXIgdHgyPSVkLCBsYXN0dHg9JWQsIHR4aW5nPSVkLlxuIiwKKwkJCQlkZXYtPm5hbWUsIGVpX2xvY2FsLT50eDIsIGVpX2xvY2FsLT5sYXN0dHgsIGVpX2xvY2FsLT50eGluZyk7CisJfQorCWVsc2UgaWYgKGVpX2xvY2FsLT50eDIgPT0gMCkKKwl7CisJCW91dHB1dF9wYWdlID0gZWlfbG9jYWwtPnR4X3N0YXJ0X3BhZ2UgKyBUWF9QQUdFUy8yOworCQllaV9sb2NhbC0+dHgyID0gc2VuZF9sZW5ndGg7CisJCWlmIChlaV9kZWJ1ZyAgJiYgIGVpX2xvY2FsLT50eDEgPiAwKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpZGxlIHRyYW5zbWl0dGVyLCB0eDE9JWQsIGxhc3R0eD0lZCwgdHhpbmc9JWQuXG4iLAorCQkJCWRldi0+bmFtZSwgZWlfbG9jYWwtPnR4MSwgZWlfbG9jYWwtPmxhc3R0eCwgZWlfbG9jYWwtPnR4aW5nKTsKKwl9CisJZWxzZQorCXsJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiAqLworCQlpZiAoZWlfZGVidWcpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFR4IGJ1ZmZlcnMgZnJlZSEgdHgxPSVkIHR4Mj0lZCBsYXN0PSVkXG4iLAorCQkJCWRldi0+bmFtZSwgZWlfbG9jYWwtPnR4MSwgZWlfbG9jYWwtPnR4MiwgZWlfbG9jYWwtPmxhc3R0eCk7CisJCWVpX2xvY2FsLT5pcnFsb2NrID0gMDsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQllaV9vdXRiX3AoRU5JU1JfQUxMLCBlODM5MF9iYXNlICsgRU4wX0lNUik7CisJCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKKwkJZW5hYmxlX2lycV9sb2NrZGVwX2lycXJlc3RvcmUoZGV2LT5pcnEsICZmbGFncyk7CisJCWVpX2xvY2FsLT5zdGF0LnR4X2Vycm9ycysrOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIE9rYXksIG5vdyB1cGxvYWQgdGhlIHBhY2tldCBhbmQgdHJpZ2dlciBhIHNlbmQgaWYgdGhlIHRyYW5zbWl0dGVyCisJICogaXNuJ3QgYWxyZWFkeSBzZW5kaW5nLiBJZiBpdCBpcyBidXN5LCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbAorCSAqIHRyaWdnZXIgdGhlIHNlbmQgbGF0ZXIsIHVwb24gcmVjZWl2aW5nIGEgVHggZG9uZSBpbnRlcnJ1cHQuCisJICovCisKKwllaV9ibG9ja19vdXRwdXQoZGV2LCBzZW5kX2xlbmd0aCwgZGF0YSwgb3V0cHV0X3BhZ2UpOworCisJaWYgKCEgZWlfbG9jYWwtPnR4aW5nKQorCXsKKwkJZWlfbG9jYWwtPnR4aW5nID0gMTsKKwkJTlM4MzkwX3RyaWdnZXJfc2VuZChkZXYsIHNlbmRfbGVuZ3RoLCBvdXRwdXRfcGFnZSk7CisJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlpZiAob3V0cHV0X3BhZ2UgPT0gZWlfbG9jYWwtPnR4X3N0YXJ0X3BhZ2UpCisJCXsKKwkJCWVpX2xvY2FsLT50eDEgPSAtMTsKKwkJCWVpX2xvY2FsLT5sYXN0dHggPSAtMTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVpX2xvY2FsLT50eDIgPSAtMTsKKwkJCWVpX2xvY2FsLT5sYXN0dHggPSAtMjsKKwkJfQorCX0KKwllbHNlIGVpX2xvY2FsLT50eHF1ZXVlKys7CisKKwlpZiAoZWlfbG9jYWwtPnR4MSAgJiYgIGVpX2xvY2FsLT50eDIpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwllbHNlCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwkvKiBUdXJuIDgzOTAgaW50ZXJydXB0cyBiYWNrIG9uLiAqLworCWVpX2xvY2FsLT5pcnFsb2NrID0gMDsKKwllaV9vdXRiX3AoRU5JU1JfQUxMLCBlODM5MF9iYXNlICsgRU4wX0lNUik7CisKKwlzcGluX3VubG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7CisJZW5hYmxlX2lycV9sb2NrZGVwX2lycXJlc3RvcmUoZGV2LT5pcnEsICZmbGFncyk7CisKKwlkZXZfa2ZyZWVfc2tiIChza2IpOworCWVpX2xvY2FsLT5zdGF0LnR4X2J5dGVzICs9IHNlbmRfbGVuZ3RoOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZWlfaW50ZXJydXB0IC0gaGFuZGxlIHRoZSBpbnRlcnJ1cHRzIGZyb20gYW4gODM5MAorICogQGlycTogaW50ZXJydXB0IG51bWJlcgorICogQGRldl9pZDogYSBwb2ludGVyIHRvIHRoZSBuZXRfZGV2aWNlCisgKgorICogSGFuZGxlIHRoZSBldGhlciBpbnRlcmZhY2UgaW50ZXJydXB0cy4gV2UgcHVsbCBwYWNrZXRzIGZyb20KKyAqIHRoZSA4MzkwIHZpYSB0aGUgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIGZpcmUgdGhlbSBhdCB0aGUgbmV0d29ya2luZworICogc3RhY2suIFdlIGFsc28gaGFuZGxlIHRyYW5zbWl0IGNvbXBsZXRpb25zIGFuZCB3YWtlIHRoZSB0cmFuc21pdCBwYXRoIGlmCisgKiBuZWNlc3NhcnkuIFdlIGFsc28gdXBkYXRlIHRoZSBjb3VudGVycyBhbmQgZG8gb3RoZXIgaG91c2VrZWVwaW5nIGFzCisgKiBuZWVkZWQuCisgKi8KKworc3RhdGljIGlycXJldHVybl90IF9fZWlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXVuc2lnbmVkIGxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOworCWludCBpbnRlcnJ1cHRzLCBucl9zZXJ2aWNlZCA9IDA7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyoKKwkgKglQcm90ZWN0IHRoZSBpcnEgdGVzdCB0b28uCisJICovCisKKwlzcGluX2xvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOworCisJaWYgKGVpX2xvY2FsLT5pcnFsb2NrKQorCXsKKyNpZiAxIC8qIFRoaXMgbWlnaHQganVzdCBiZSBhbiBpbnRlcnJ1cHQgZm9yIGEgUENJIGRldmljZSBzaGFyaW5nIHRoaXMgbGluZSAqLworCQkvKiBUaGUgImlycWxvY2siIGNoZWNrIGlzIG9ubHkgZm9yIHRlc3RpbmcuICovCisJCXByaW50ayhlaV9sb2NhbC0+aXJxbG9jaworCQkJICAgPyAiJXM6IEludGVycnVwdGVkIHdoaWxlIGludGVycnVwdHMgYXJlIG1hc2tlZCEgaXNyPSUjMnggaW1yPSUjMnguXG4iCisJCQkgICA6ICIlczogUmVlbnRlcmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIhIGlzcj0lIzJ4IGltcj0lIzJ4LlxuIiwKKwkJCSAgIGRldi0+bmFtZSwgZWlfaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9JU1IpLAorCQkJICAgZWlfaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9JTVIpKTsKKyNlbmRpZgorCQlzcGluX3VubG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBDaGFuZ2UgdG8gcGFnZSAwIGFuZCByZWFkIHRoZSBpbnRyIHN0YXR1cyByZWcuICovCisJZWlfb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKKwlpZiAoZWlfZGVidWcgPiAzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGludGVycnVwdChpc3I9JSMyLjJ4KS5cbiIsIGRldi0+bmFtZSwKKwkJCSAgIGVpX2luYl9wKGU4MzkwX2Jhc2UgKyBFTjBfSVNSKSk7CisKKwkvKiAhIUFzc3VtcHRpb24hISAtLSB3ZSBzdGF5IGluIHBhZ2UgMC4JIERvbid0IGJyZWFrIHRoaXMuICovCisJd2hpbGUgKChpbnRlcnJ1cHRzID0gZWlfaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9JU1IpKSAhPSAwCisJCSAgICYmICsrbnJfc2VydmljZWQgPCBNQVhfU0VSVklDRSkKKwl7CisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW50ZXJydXB0IGZyb20gc3RvcHBlZCBjYXJkXG4iLCBkZXYtPm5hbWUpOworCQkJLyogcm1rIC0gYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdHMgKi8KKwkJCWVpX291dGJfcChpbnRlcnJ1cHRzLCBlODM5MF9iYXNlICsgRU4wX0lTUik7CisJCQlpbnRlcnJ1cHRzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfT1ZFUikKKwkJCWVpX3J4X292ZXJydW4oZGV2KTsKKwkJZWxzZSBpZiAoaW50ZXJydXB0cyAmIChFTklTUl9SWCtFTklTUl9SWF9FUlIpKQorCQl7CisJCQkvKiBHb3QgYSBnb29kICg/KSBwYWNrZXQuICovCisJCQllaV9yZWNlaXZlKGRldik7CisJCX0KKwkJLyogUHVzaCB0aGUgbmV4dCB0by10cmFuc21pdCBwYWNrZXQgdGhyb3VnaC4gKi8KKwkJaWYgKGludGVycnVwdHMgJiBFTklTUl9UWCkKKwkJCWVpX3R4X2ludHIoZGV2KTsKKwkJZWxzZSBpZiAoaW50ZXJydXB0cyAmIEVOSVNSX1RYX0VSUikKKwkJCWVpX3R4X2VycihkZXYpOworCisJCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfQ09VTlRFUlMpCisJCXsKKwkJCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIwKTsKKwkJCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIxKTsKKwkJCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIyKTsKKwkJCWVpX291dGJfcChFTklTUl9DT1VOVEVSUywgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2sgaW50ci4gKi8KKwkJfQorCisJCS8qIElnbm9yZSBhbnkgUkRDIGludGVycnVwdHMgdGhhdCBtYWtlIGl0IGJhY2sgdG8gaGVyZS4gKi8KKwkJaWYgKGludGVycnVwdHMgJiBFTklTUl9SREMpCisJCXsKKwkJCWVpX291dGJfcChFTklTUl9SREMsIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsKKwkJfQorCisJCWVpX291dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVEFSVCwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7CisJfQorCisJaWYgKGludGVycnVwdHMgJiYgZWlfZGVidWcpCisJeworCQllaV9vdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RBUlQsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOworCQlpZiAobnJfc2VydmljZWQgPj0gTUFYX1NFUlZJQ0UpCisJCXsKKwkJCS8qIDB4RkYgaXMgdmFsaWQgZm9yIGEgY2FyZCByZW1vdmFsICovCisJCQlpZihpbnRlcnJ1cHRzIT0weEZGKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUb28gbXVjaCB3b3JrIGF0IGludGVycnVwdCwgc3RhdHVzICUjMi4yeFxuIiwKKwkJCQkgICBkZXYtPm5hbWUsIGludGVycnVwdHMpOworCQkJZWlfb3V0Yl9wKEVOSVNSX0FMTCwgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2suIG1vc3QgaW50cnMuICovCisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5rbm93biBpbnRlcnJ1cHQgJSMyeFxuIiwgZGV2LT5uYW1lLCBpbnRlcnJ1cHRzKTsKKwkJCWVpX291dGJfcCgweGZmLCBlODM5MF9iYXNlICsgRU4wX0lTUik7IC8qIEFjay4gYWxsIGludHJzLiAqLworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKKwlyZXR1cm4gSVJRX1JFVFZBTChucl9zZXJ2aWNlZCA+IDApOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIF9fZWlfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWRpc2FibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOworCV9fZWlfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYpOworCWVuYWJsZV9pcnFfbG9ja2RlcChkZXYtPmlycSk7Cit9CisjZW5kaWYKKworLyoqCisgKiBlaV90eF9lcnIgLSBoYW5kbGUgdHJhbnNtaXR0ZXIgZXJyb3IKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHdoaWNoIHRocmV3IHRoZSBleGNlcHRpb24KKyAqCisgKiBBIHRyYW5zbWl0dGVyIGVycm9yIGhhcyBoYXBwZW5lZC4gTW9zdCBsaWtlbHkgZXhjZXNzIGNvbGxpc2lvbnMgKHdoaWNoCisgKiBpcyBhIGZhaXJseSBub3JtYWwgY29uZGl0aW9uKS4gSWYgdGhlIGVycm9yIGlzIG9uZSB3aGVyZSB0aGUgVHggd2lsbAorICogaGF2ZSBiZWVuIGFib3J0ZWQsIHdlIHRyeSBhbmQgc2VuZCBhbm90aGVyIG9uZSByaWdodCBhd2F5LCBpbnN0ZWFkIG9mCisgKiBsZXR0aW5nIHRoZSBmYWlsZWQgcGFja2V0IHNpdCBhbmQgY29sbGVjdCBkdXN0IGluIHRoZSBUeCBidWZmZXIuIFRoaXMKKyAqIGlzIGEgbXVjaCBiZXR0ZXIgc29sdXRpb24gYXMgaXQgYXZvaWRzIGtlcm5lbCBiYXNlZCBUeCB0aW1lb3V0cywgYW5kCisgKiBhbiB1bm5lY2Vzc2FyeSBjYXJkIHJlc2V0LgorICoKKyAqIENhbGxlZCB3aXRoIGxvY2sgaGVsZC4KKyAqLworCitzdGF0aWMgdm9pZCBlaV90eF9lcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgY2hhciB0eHNyID0gZWlfaW5iX3AoZTgzOTBfYmFzZStFTjBfVFNSKTsKKwl1bnNpZ25lZCBjaGFyIHR4X3dhc19hYm9ydGVkID0gdHhzciAmIChFTlRTUl9BQlQrRU5UU1JfRlUpOworCisjaWZkZWYgVkVSQk9TRV9FUlJPUl9EVU1QCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cmFuc21pdHRlciBlcnJvciAoJSMyeCk6ICIsIGRldi0+bmFtZSwgdHhzcik7CisJaWYgKHR4c3IgJiBFTlRTUl9BQlQpCisJCXByaW50aygiZXhjZXNzLWNvbGxpc2lvbnMgIik7CisJaWYgKHR4c3IgJiBFTlRTUl9ORCkKKwkJcHJpbnRrKCJub24tZGVmZXJyYWwgIik7CisJaWYgKHR4c3IgJiBFTlRTUl9DUlMpCisJCXByaW50aygibG9zdC1jYXJyaWVyICIpOworCWlmICh0eHNyICYgRU5UU1JfRlUpCisJCXByaW50aygiRklGTy11bmRlcnJ1biAiKTsKKwlpZiAodHhzciAmIEVOVFNSX0NESCkKKwkJcHJpbnRrKCJsb3N0LWhlYXJ0YmVhdCAiKTsKKwlwcmludGsoIlxuIik7CisjZW5kaWYKKworCWVpX291dGJfcChFTklTUl9UWF9FUlIsIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsgLyogQWNrIGludHIuICovCisKKwlpZiAodHhfd2FzX2Fib3J0ZWQpCisJCWVpX3R4X2ludHIoZGV2KTsKKwllbHNlCisJeworCQllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKKwkJaWYgKHR4c3IgJiBFTlRTUl9DUlMpIGVpX2xvY2FsLT5zdGF0LnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWlmICh0eHNyICYgRU5UU1JfQ0RIKSBlaV9sb2NhbC0+c3RhdC50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCWlmICh0eHNyICYgRU5UU1JfT1dDKSBlaV9sb2NhbC0+c3RhdC50eF93aW5kb3dfZXJyb3JzKys7CisJfQorfQorCisvKioKKyAqIGVpX3R4X2ludHIgLSB0cmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlcgorICogQGRldjogbmV0d29yayBkZXZpY2UgZm9yIHdoaWNoIHR4IGludHIgaXMgaGFuZGxlZAorICoKKyAqIFdlIGhhdmUgZmluaXNoZWQgYSB0cmFuc21pdDogY2hlY2sgZm9yIGVycm9ycyBhbmQgdGhlbiB0cmlnZ2VyIHRoZSBuZXh0CisgKiBwYWNrZXQgdG8gYmUgc2VudC4gQ2FsbGVkIHdpdGggbG9jayBoZWxkLgorICovCisKK3N0YXRpYyB2b2lkIGVpX3R4X2ludHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJaW50IHN0YXR1cyA9IGVpX2luYihlODM5MF9iYXNlICsgRU4wX1RTUik7CisKKwllaV9vdXRiX3AoRU5JU1JfVFgsIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsgLyogQWNrIGludHIuICovCisKKwkvKgorCSAqIFRoZXJlIGFyZSB0d28gVHggYnVmZmVycywgc2VlIHdoaWNoIG9uZSBmaW5pc2hlZCwgYW5kIHRyaWdnZXIKKwkgKiB0aGUgc2VuZCBvZiBhbm90aGVyIG9uZSBpZiBpdCBleGlzdHMuCisJICovCisJZWlfbG9jYWwtPnR4cXVldWUtLTsKKworCWlmIChlaV9sb2NhbC0+dHgxIDwgMCkKKwl7CisJCWlmIChlaV9sb2NhbC0+bGFzdHR4ICE9IDEgJiYgZWlfbG9jYWwtPmxhc3R0eCAhPSAtMSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJvZ3VzIGxhc3RfdHhfYnVmZmVyICVkLCB0eDE9JWQuXG4iLAorCQkJCWVpX2xvY2FsLT5uYW1lLCBlaV9sb2NhbC0+bGFzdHR4LCBlaV9sb2NhbC0+dHgxKTsKKwkJZWlfbG9jYWwtPnR4MSA9IDA7CisJCWlmIChlaV9sb2NhbC0+dHgyID4gMCkKKwkJeworCQkJZWlfbG9jYWwtPnR4aW5nID0gMTsKKwkJCU5TODM5MF90cmlnZ2VyX3NlbmQoZGV2LCBlaV9sb2NhbC0+dHgyLCBlaV9sb2NhbC0+dHhfc3RhcnRfcGFnZSArIDYpOworCQkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCQllaV9sb2NhbC0+dHgyID0gLTEsCisJCQllaV9sb2NhbC0+bGFzdHR4ID0gMjsKKwkJfQorCQllbHNlIGVpX2xvY2FsLT5sYXN0dHggPSAyMCwgZWlfbG9jYWwtPnR4aW5nID0gMDsKKwl9CisJZWxzZSBpZiAoZWlfbG9jYWwtPnR4MiA8IDApCisJeworCQlpZiAoZWlfbG9jYWwtPmxhc3R0eCAhPSAyICAmJiAgZWlfbG9jYWwtPmxhc3R0eCAhPSAtMikKKwkJCXByaW50aygiJXM6IGJvZ3VzIGxhc3RfdHhfYnVmZmVyICVkLCB0eDI9JWQuXG4iLAorCQkJCWVpX2xvY2FsLT5uYW1lLCBlaV9sb2NhbC0+bGFzdHR4LCBlaV9sb2NhbC0+dHgyKTsKKwkJZWlfbG9jYWwtPnR4MiA9IDA7CisJCWlmIChlaV9sb2NhbC0+dHgxID4gMCkKKwkJeworCQkJZWlfbG9jYWwtPnR4aW5nID0gMTsKKwkJCU5TODM5MF90cmlnZ2VyX3NlbmQoZGV2LCBlaV9sb2NhbC0+dHgxLCBlaV9sb2NhbC0+dHhfc3RhcnRfcGFnZSk7CisJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJCWVpX2xvY2FsLT50eDEgPSAtMTsKKwkJCWVpX2xvY2FsLT5sYXN0dHggPSAxOworCQl9CisJCWVsc2UKKwkJCWVpX2xvY2FsLT5sYXN0dHggPSAxMCwgZWlfbG9jYWwtPnR4aW5nID0gMDsKKwl9CisvLwllbHNlIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmV4cGVjdGVkIFRYLWRvbmUgaW50ZXJydXB0LCBsYXN0dHg9JWQuXG4iLAorLy8JCQlkZXYtPm5hbWUsIGVpX2xvY2FsLT5sYXN0dHgpOworCisJLyogTWluaW1pemUgVHggbGF0ZW5jeTogdXBkYXRlIHRoZSBzdGF0aXN0aWNzIGFmdGVyIHdlIHJlc3RhcnQgVFhpbmcuICovCisJaWYgKHN0YXR1cyAmIEVOVFNSX0NPTCkKKwkJZWlfbG9jYWwtPnN0YXQuY29sbGlzaW9ucysrOworCWlmIChzdGF0dXMgJiBFTlRTUl9QVFgpCisJCWVpX2xvY2FsLT5zdGF0LnR4X3BhY2tldHMrKzsKKwllbHNlCisJeworCQllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIEVOVFNSX0FCVCkKKwkJeworCQkJZWlfbG9jYWwtPnN0YXQudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWVpX2xvY2FsLT5zdGF0LmNvbGxpc2lvbnMgKz0gMTY7CisJCX0KKwkJaWYgKHN0YXR1cyAmIEVOVFNSX0NSUykKKwkJCWVpX2xvY2FsLT5zdGF0LnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBFTlRTUl9GVSkKKwkJCWVpX2xvY2FsLT5zdGF0LnR4X2ZpZm9fZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBFTlRTUl9DREgpCisJCQllaV9sb2NhbC0+c3RhdC50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBFTlRTUl9PV0MpCisJCQllaV9sb2NhbC0+c3RhdC50eF93aW5kb3dfZXJyb3JzKys7CisJfQorCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworLyoqCisgKiBlaV9yZWNlaXZlIC0gcmVjZWl2ZSBzb21lIHBhY2tldHMKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHdpdGggd2hpY2ggcmVjZWl2ZSB3aWxsIGJlIHJ1bgorICoKKyAqIFdlIGhhdmUgYSBnb29kIHBhY2tldChzKSwgZ2V0IGl0L3RoZW0gb3V0IG9mIHRoZSBidWZmZXJzLgorICogQ2FsbGVkIHdpdGggbG9jayBoZWxkLgorICovCisKK3N0YXRpYyB2b2lkIGVpX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKKwlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgY2hhciByeGluZ19wYWdlLCB0aGlzX2ZyYW1lLCBuZXh0X2ZyYW1lOworCXVuc2lnbmVkIHNob3J0IGN1cnJlbnRfb2Zmc2V0OworCWludCByeF9wa3RfY291bnQgPSAwOworCXN0cnVjdCBlODM5MF9wa3RfaGRyIHJ4X2ZyYW1lOworCWludCBudW1fcnhfcGFnZXMgPSBlaV9sb2NhbC0+c3RvcF9wYWdlLWVpX2xvY2FsLT5yeF9zdGFydF9wYWdlOworCisJd2hpbGUgKCsrcnhfcGt0X2NvdW50IDwgMTApCisJeworCQlpbnQgcGt0X2xlbiwgcGt0X3N0YXQ7CisKKwkJLyogR2V0IHRoZSByeCBwYWdlIChpbmNvbWluZyBwYWNrZXQgcG9pbnRlcikuICovCisJCWVpX291dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMSwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7CisJCXJ4aW5nX3BhZ2UgPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4xX0NVUlBBRyk7CisJCWVpX291dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7CisKKwkJLyogUmVtb3ZlIG9uZSBmcmFtZSBmcm9tIHRoZSByaW5nLiAgQm91bmRhcnkgaXMgYWx3YXlzIGEgcGFnZSBiZWhpbmQuICovCisJCXRoaXNfZnJhbWUgPSBlaV9pbmJfcChlODM5MF9iYXNlICsgRU4wX0JPVU5EQVJZKSArIDE7CisJCWlmICh0aGlzX2ZyYW1lID49IGVpX2xvY2FsLT5zdG9wX3BhZ2UpCisJCQl0aGlzX2ZyYW1lID0gZWlfbG9jYWwtPnJ4X3N0YXJ0X3BhZ2U7CisKKwkJLyogU29tZWRheSB3ZSdsbCBvbWl0IHRoZSBwcmV2aW91cywgaWZmIHdlIG5ldmVyIGdldCB0aGlzIG1lc3NhZ2UuCisJCSAgIChUaGVyZSBpcyBhdCBsZWFzdCBvbmUgY2xvbmUgY2xhaW1lZCB0byBoYXZlIGEgcHJvYmxlbS4pCisKKwkJICAgS2VlcCBxdWlldCBpZiBpdCBsb29rcyBsaWtlIGEgY2FyZCByZW1vdmFsLiBPbmUgcHJvYmxlbSBoZXJlCisJCSAgIGlzIHRoYXQgc29tZSBjbG9uZXMgY3Jhc2ggaW4gcm91Z2hseSB0aGUgc2FtZSB3YXkuCisJCSAqLworCQlpZiAoZWlfZGVidWcgPiAwICAmJiAgdGhpc19mcmFtZSAhPSBlaV9sb2NhbC0+Y3VycmVudF9wYWdlICYmICh0aGlzX2ZyYW1lIT0weDAgfHwgcnhpbmdfcGFnZSE9MHhGRikpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtaXNtYXRjaGVkIHJlYWQgcGFnZSBwb2ludGVycyAlMnggdnMgJTJ4LlxuIiwKKwkJCQkgICBkZXYtPm5hbWUsIHRoaXNfZnJhbWUsIGVpX2xvY2FsLT5jdXJyZW50X3BhZ2UpOworCisJCWlmICh0aGlzX2ZyYW1lID09IHJ4aW5nX3BhZ2UpCS8qIFJlYWQgYWxsIHRoZSBmcmFtZXM/ICovCisJCQlicmVhazsJCQkJLyogRG9uZSBmb3Igbm93ICovCisKKwkJY3VycmVudF9vZmZzZXQgPSB0aGlzX2ZyYW1lIDw8IDg7CisJCWVpX2dldF84MzkwX2hkcihkZXYsICZyeF9mcmFtZSwgdGhpc19mcmFtZSk7CisKKwkJcGt0X2xlbiA9IHJ4X2ZyYW1lLmNvdW50IC0gc2l6ZW9mKHN0cnVjdCBlODM5MF9wa3RfaGRyKTsKKwkJcGt0X3N0YXQgPSByeF9mcmFtZS5zdGF0dXM7CisKKwkJbmV4dF9mcmFtZSA9IHRoaXNfZnJhbWUgKyAxICsgKChwa3RfbGVuKzQpPj44KTsKKworCQkvKiBDaGVjayBmb3IgYm9nb3NpdHkgd2FybmVkIGJ5IDNjNTAzIGJvb2s6IHRoZSBzdGF0dXMgYnl0ZSBpcyBuZXZlcgorCQkgICB3cml0dGVuLiAgVGhpcyBoYXBwZW5lZCBhIGxvdCBkdXJpbmcgdGVzdGluZyEgVGhpcyBjb2RlIHNob3VsZCBiZQorCQkgICBjbGVhbmVkIHVwIHNvbWVkYXkuICovCisJCWlmIChyeF9mcmFtZS5uZXh0ICE9IG5leHRfZnJhbWUKKwkJCSYmIHJ4X2ZyYW1lLm5leHQgIT0gbmV4dF9mcmFtZSArIDEKKwkJCSYmIHJ4X2ZyYW1lLm5leHQgIT0gbmV4dF9mcmFtZSAtIG51bV9yeF9wYWdlcworCQkJJiYgcnhfZnJhbWUubmV4dCAhPSBuZXh0X2ZyYW1lICsgMSAtIG51bV9yeF9wYWdlcykgeworCQkJZWlfbG9jYWwtPmN1cnJlbnRfcGFnZSA9IHJ4aW5nX3BhZ2U7CisJCQllaV9vdXRiKGVpX2xvY2FsLT5jdXJyZW50X3BhZ2UtMSwgZTgzOTBfYmFzZStFTjBfQk9VTkRBUlkpOworCQkJZWlfbG9jYWwtPnN0YXQucnhfZXJyb3JzKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwa3RfbGVuIDwgNjAgIHx8ICBwa3RfbGVuID4gMTUxOCkKKwkJeworCQkJaWYgKGVpX2RlYnVnKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0IHNpemU6ICVkLCBzdGF0dXM9JSMyeCBueHBnPSUjMnguXG4iLAorCQkJCQkgICBkZXYtPm5hbWUsIHJ4X2ZyYW1lLmNvdW50LCByeF9mcmFtZS5zdGF0dXMsCisJCQkJCSAgIHJ4X2ZyYW1lLm5leHQpOworCQkJZWlfbG9jYWwtPnN0YXQucnhfZXJyb3JzKys7CisJCQllaV9sb2NhbC0+c3RhdC5yeF9sZW5ndGhfZXJyb3JzKys7CisJCX0KKwkJIGVsc2UgaWYgKChwa3Rfc3RhdCAmIDB4MEYpID09IEVOUlNSX1JYT0spCisJCXsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbisyKTsKKwkJCWlmIChza2IgPT0gTlVMTCkKKwkJCXsKKwkJCQlpZiAoZWlfZGVidWcgPiAxKQorCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvdWxkbid0IGFsbG9jYXRlIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKKwkJCQkJCSAgIGRldi0+bmFtZSwgcGt0X2xlbik7CisJCQkJZWlfbG9jYWwtPnN0YXQucnhfZHJvcHBlZCsrOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXNrYl9yZXNlcnZlKHNrYiwyKTsJLyogSVAgaGVhZGVycyBvbiAxNiBieXRlIGJvdW5kYXJpZXMgKi8KKwkJCQlza2ItPmRldiA9IGRldjsKKwkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CS8qIE1ha2Ugcm9vbSAqLworCQkJCWVpX2Jsb2NrX2lucHV0KGRldiwgcGt0X2xlbiwgc2tiLCBjdXJyZW50X29mZnNldCArIHNpemVvZihyeF9mcmFtZSkpOworCQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7CisJCQkJbmV0aWZfcngoc2tiKTsKKwkJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCQkJCWVpX2xvY2FsLT5zdGF0LnJ4X3BhY2tldHMrKzsKKwkJCQllaV9sb2NhbC0+c3RhdC5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJCWlmIChwa3Rfc3RhdCAmIEVOUlNSX1BIWSkKKwkJCQkJZWlfbG9jYWwtPnN0YXQubXVsdGljYXN0Kys7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoZWlfZGVidWcpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQ6IHN0YXR1cz0lIzJ4IG54cGc9JSMyeCBzaXplPSVkXG4iLAorCQkJCQkgICBkZXYtPm5hbWUsIHJ4X2ZyYW1lLnN0YXR1cywgcnhfZnJhbWUubmV4dCwKKwkJCQkJICAgcnhfZnJhbWUuY291bnQpOworCQkJZWlfbG9jYWwtPnN0YXQucnhfZXJyb3JzKys7CisJCQkvKiBOQjogVGhlIE5JQyBjb3VudHMgQ1JDLCBmcmFtZSBhbmQgbWlzc2VkIGVycm9ycy4gKi8KKwkJCWlmIChwa3Rfc3RhdCAmIEVOUlNSX0ZPKQorCQkJCWVpX2xvY2FsLT5zdGF0LnJ4X2ZpZm9fZXJyb3JzKys7CisJCX0KKwkJbmV4dF9mcmFtZSA9IHJ4X2ZyYW1lLm5leHQ7CisKKwkJLyogVGhpcyBfc2hvdWxkXyBuZXZlciBoYXBwZW46IGl0J3MgaGVyZSBmb3IgYXZvaWRpbmcgYmFkIGNsb25lcy4gKi8KKwkJaWYgKG5leHRfZnJhbWUgPj0gZWlfbG9jYWwtPnN0b3BfcGFnZSkgeworCQkJcHJpbnRrKCIlczogbmV4dCBmcmFtZSBpbmNvbnNpc3RlbmN5LCAlIzJ4XG4iLCBkZXYtPm5hbWUsCisJCQkJICAgbmV4dF9mcmFtZSk7CisJCQluZXh0X2ZyYW1lID0gZWlfbG9jYWwtPnJ4X3N0YXJ0X3BhZ2U7CisJCX0KKwkJZWlfbG9jYWwtPmN1cnJlbnRfcGFnZSA9IG5leHRfZnJhbWU7CisJCWVpX291dGJfcChuZXh0X2ZyYW1lLTEsIGU4MzkwX2Jhc2UrRU4wX0JPVU5EQVJZKTsKKwl9CisKKwkvKiBXZSB1c2VkIHRvIGFsc28gYWNrIEVOSVNSX09WRVIgaGVyZSwgYnV0IHRoYXQgd291bGQgc29tZXRpbWVzIG1hc2sKKwkgICBhIHJlYWwgb3ZlcnJ1biwgbGVhdmluZyB0aGUgODM5MCBpbiBhIHN0b3BwZWQgc3RhdGUgd2l0aCByZWMndnIgb2ZmLiAqLworCWVpX291dGJfcChFTklTUl9SWCtFTklTUl9SWF9FUlIsIGU4MzkwX2Jhc2UrRU4wX0lTUik7CisJcmV0dXJuOworfQorCisvKioKKyAqIGVpX3J4X292ZXJydW4gLSBoYW5kbGUgcmVjZWl2ZXIgb3ZlcnJ1bgorICogQGRldjogbmV0d29yayBkZXZpY2Ugd2hpY2ggdGhyZXcgZXhjZXB0aW9uCisgKgorICogV2UgaGF2ZSBhIHJlY2VpdmVyIG92ZXJydW46IHdlIGhhdmUgdG8ga2ljayB0aGUgODM5MCB0byBnZXQgaXQgc3RhcnRlZAorICogYWdhaW4uIFByb2JsZW0gaXMgdGhhdCB5b3UgaGF2ZSB0byBraWNrIGl0IGV4YWN0bHkgYXMgTlMgcHJlc2NyaWJlcyBpbgorICogdGhlIHVwZGF0ZWQgZGF0YXNoZWV0cywgb3IgInRoZSBOSUMgbWF5IGFjdCBpbiBhbiB1bnByZWRpY3RhYmxlIG1hbm5lci4iCisgKiBUaGlzIGluY2x1ZGVzIGNhdXNpbmcgInRoZSBOSUMgdG8gZGVmZXIgaW5kZWZpbml0ZWx5IHdoZW4gaXQgaXMgc3RvcHBlZAorICogb24gYSBidXN5IG5ldHdvcmsuIiAgVWdoLgorICogQ2FsbGVkIHdpdGggbG9jayBoZWxkLiBEb24ndCBjYWxsIHRoaXMgd2l0aCB0aGUgaW50ZXJydXB0cyBvZmYgb3IgeW91cgorICogY29tcHV0ZXIgd2lsbCBoYXRlIHlvdSAtIGl0IHRha2VzIDEwbXMgb3Igc28uCisgKi8KKworc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGNoYXIgd2FzX3R4aW5nLCBtdXN0X3Jlc2VuZCA9IDA7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCisJLyoKKwkgKiBSZWNvcmQgd2hldGhlciBhIFR4IHdhcyBpbiBwcm9ncmVzcyBhbmQgdGhlbiBpc3N1ZSB0aGUKKwkgKiBzdG9wIGNvbW1hbmQuCisJICovCisJd2FzX3R4aW5nID0gZWlfaW5iX3AoZTgzOTBfYmFzZStFODM5MF9DTUQpICYgRTgzOTBfVFJBTlM7CisJZWlfb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUT1AsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKKworCWlmIChlaV9kZWJ1ZyA+IDEpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZXIgb3ZlcnJ1bi5cbiIsIGRldi0+bmFtZSk7CisJZWlfbG9jYWwtPnN0YXQucnhfb3Zlcl9lcnJvcnMrKzsKKworCS8qCisJICogV2FpdCBhIGZ1bGwgVHggdGltZSAoMS4ybXMpICsgc29tZSBndWFyZCB0aW1lLCBOUyBzYXlzIDEuNm1zIHRvdGFsLgorCSAqIEVhcmx5IGRhdGFzaGVldHMgc2FpZCB0byBwb2xsIHRoZSByZXNldCBiaXQsIGJ1dCBub3cgdGhleSBzYXkgdGhhdAorCSAqIGl0ICJpcyBub3QgYSByZWxpYWJsZSBpbmRpY2F0b3IgYW5kIHN1YnNlcXVlbnRseSBzaG91bGQgYmUgaWdub3JlZC4iCisJICogV2Ugd2FpdCBhdCBsZWFzdCAxMG1zLgorCSAqLworCisJbWRlbGF5KDEwKTsKKworCS8qCisJICogUmVzZXQgUkJDUlswMV0gYmFjayB0byB6ZXJvIGFzIHBlciBtYWdpYyBpbmNhbnRhdGlvbi4KKwkgKi8KKwllaV9vdXRiX3AoMHgwMCwgZTgzOTBfYmFzZStFTjBfUkNOVExPKTsKKwllaV9vdXRiX3AoMHgwMCwgZTgzOTBfYmFzZStFTjBfUkNOVEhJKTsKKworCS8qCisJICogU2VlIGlmIGFueSBUeCB3YXMgaW50ZXJydXB0ZWQgb3Igbm90LiBBY2NvcmRpbmcgdG8gTlMsIHRoaXMKKwkgKiBzdGVwIGlzIHZpdGFsLCBhbmQgc2tpcHBpbmcgaXQgd2lsbCBjYXVzZSBubyBlbmQgb2YgaGF2b2MuCisJICovCisKKwlpZiAod2FzX3R4aW5nKQorCXsKKwkJdW5zaWduZWQgY2hhciB0eF9jb21wbGV0ZWQgPSBlaV9pbmJfcChlODM5MF9iYXNlK0VOMF9JU1IpICYgKEVOSVNSX1RYK0VOSVNSX1RYX0VSUik7CisJCWlmICghdHhfY29tcGxldGVkKQorCQkJbXVzdF9yZXNlbmQgPSAxOworCX0KKworCS8qCisJICogSGF2ZSB0byBlbnRlciBsb29wYmFjayBtb2RlIGFuZCB0aGVuIHJlc3RhcnQgdGhlIE5JQyBiZWZvcmUKKwkgKiB5b3UgYXJlIGFsbG93ZWQgdG8gc2x1cnAgcGFja2V0cyB1cCBvZmYgdGhlIHJpbmcuCisJICovCisJZWlfb3V0Yl9wKEU4MzkwX1RYT0ZGLCBlODM5MF9iYXNlICsgRU4wX1RYQ1IpOworCWVpX291dGJfcChFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UwICsgRTgzOTBfU1RBUlQsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOworCisJLyoKKwkgKiBDbGVhciB0aGUgUnggcmluZyBvZiBhbGwgdGhlIGRlYnJpcywgYW5kIGFjayB0aGUgaW50ZXJydXB0LgorCSAqLworCWVpX3JlY2VpdmUoZGV2KTsKKwllaV9vdXRiX3AoRU5JU1JfT1ZFUiwgZTgzOTBfYmFzZStFTjBfSVNSKTsKKworCS8qCisJICogTGVhdmUgbG9vcGJhY2sgbW9kZSwgYW5kIHJlc2VuZCBhbnkgcGFja2V0IHRoYXQgZ290IHN0b3BwZWQuCisJICovCisJZWlfb3V0Yl9wKEU4MzkwX1RYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1RYQ1IpOworCWlmIChtdXN0X3Jlc2VuZCkKKyAgICAJCWVpX291dGJfcChFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UwICsgRTgzOTBfU1RBUlQgKyBFODM5MF9UUkFOUywgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7Cit9CisKKy8qCisgKglDb2xsZWN0IHRoZSBzdGF0cy4gVGhpcyBpcyBjYWxsZWQgdW5sb2NrZWQgYW5kIGZyb20gc2V2ZXJhbCBjb250ZXh0cy4KKyAqLworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmdldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBJZiB0aGUgY2FyZCBpcyBzdG9wcGVkLCBqdXN0IHJldHVybiB0aGUgcHJlc2VudCBzdGF0cy4gKi8KKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuICZlaV9sb2NhbC0+c3RhdDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLGZsYWdzKTsKKwkvKiBSZWFkIHRoZSBjb3VudGVyIHJlZ2lzdGVycywgYXNzdW1pbmcgd2UgYXJlIGluIHBhZ2UgMC4gKi8KKwllaV9sb2NhbC0+c3RhdC5yeF9mcmFtZV9lcnJvcnMgKz0gZWlfaW5iX3AoaW9hZGRyICsgRU4wX0NPVU5URVIwKTsKKwllaV9sb2NhbC0+c3RhdC5yeF9jcmNfZXJyb3JzICAgKz0gZWlfaW5iX3AoaW9hZGRyICsgRU4wX0NPVU5URVIxKTsKKwllaV9sb2NhbC0+c3RhdC5yeF9taXNzZWRfZXJyb3JzKz0gZWlfaW5iX3AoaW9hZGRyICsgRU4wX0NPVU5URVIyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gJmVpX2xvY2FsLT5zdGF0OworfQorCisvKgorICogRm9ybSB0aGUgNjQgYml0IDgzOTAgbXVsdGljYXN0IHRhYmxlIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mIGFkZHJlc3NlcworICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2IHN0cnVjdHVyZS4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9tY19iaXRzKHU4ICpiaXRzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOworCisJZm9yIChkbWk9ZGV2LT5tY19saXN0OyBkbWk7IGRtaT1kbWktPm5leHQpCisJeworCQl1MzIgY3JjOworCQlpZiAoZG1pLT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTikKKwkJeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGludmFsaWQgbXVsdGljYXN0IGFkZHJlc3MgbGVuZ3RoIGdpdmVuLlxuIiwgZGV2LT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcik7CisJCS8qCisJCSAqIFRoZSA4MzkwIHVzZXMgdGhlIDYgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZQorCQkgKiBDUkMgdG8gaW5kZXggdGhlIG11bHRpY2FzdCB0YWJsZS4KKwkJICovCisJCWJpdHNbY3JjPj4yOV0gfD0gKDE8PCgoY3JjPj4yNikmNykpOworCX0KK30KKworLyoqCisgKiBkb19zZXRfbXVsdGljYXN0X2xpc3QgLSBzZXQvY2xlYXIgbXVsdGljYXN0IGZpbHRlcgorICogQGRldjogbmV0IGRldmljZSBmb3Igd2hpY2ggbXVsdGljYXN0IGZpbHRlciBpcyBhZGp1c3RlZAorICoKKyAqCVNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yLiBNYXkgYmUgY2FsbGVkCisgKglmcm9tIGEgQkggaW4gMi4xLnguIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkLgorICovCisKK3N0YXRpYyB2b2lkIGRvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOworCWludCBpOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UqKW5ldGRldl9wcml2KGRldik7CisKKwlpZiAoIShkZXYtPmZsYWdzJihJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkKKwl7CisJCW1lbXNldChlaV9sb2NhbC0+bWNmaWx0ZXIsIDAsIDgpOworCQlpZiAoZGV2LT5tY19saXN0KQorCQkJbWFrZV9tY19iaXRzKGVpX2xvY2FsLT5tY2ZpbHRlciwgZGV2KTsKKwl9CisJZWxzZQorCQltZW1zZXQoZWlfbG9jYWwtPm1jZmlsdGVyLCAweEZGLCA4KTsJLyogbWNhc3Qgc2V0IHRvIGFjY2VwdC1hbGwgKi8KKworCS8qCisJICogRFA4MzkwIG1hbnVhbHMgZG9uJ3Qgc3BlY2lmeSBhbnkgbWFnaWMgc2VxdWVuY2UgZm9yIGFsdGVyaW5nCisJICogdGhlIG11bHRpY2FzdCByZWdzIG9uIGFuIGFscmVhZHkgcnVubmluZyBjYXJkLiBUbyBiZSBzYWZlLCB3ZQorCSAqIGVuc3VyZSBtdWx0aWNhc3QgbW9kZSBpcyBvZmYgcHJpb3IgdG8gbG9hZGluZyB1cCB0aGUgbmV3IGhhc2gKKwkgKiB0YWJsZS4gSWYgdGhpcyBwcm92ZXMgdG8gYmUgbm90IGVub3VnaCwgd2UgY2FuIGFsd2F5cyByZXNvcnQKKwkgKiB0byBzdG9wcGluZyB0aGUgTklDLCBsb2FkaW5nIHRoZSB0YWJsZSBhbmQgdGhlbiByZXN0YXJ0aW5nLgorCSAqCisJICogQnVnIEFsZXJ0ISAgVGhlIE1DIHJlZ3Mgb24gdGhlIFNNQyA4M0M2OTAgKFNNQyBFbGl0ZSBhbmQgU01DCisJICogRWxpdGUxNikgYXBwZWFyIHRvIGJlIHdyaXRlLW9ubHkuIFRoZSBOUyA4MzkwIGRhdGEgc2hlZXQgbGlzdHMKKwkgKiB0aGVtIGFzIHIvdyBzbyB0aGlzIGlzIGEgYnVnLiAgVGhlIFNNQyA4M0M3OTAgKFNNQyBVbHRyYSBhbmQKKwkgKiBVbHRyYTMyIEVJU0EpIGFwcGVhcnMgdG8gaGF2ZSB0aGlzIGJ1ZyBmaXhlZC4KKwkgKi8KKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWVpX291dGJfcChFODM5MF9SWENPTkZJRywgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKKwllaV9vdXRiX3AoRTgzOTBfTk9ETUEgKyBFODM5MF9QQUdFMSwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7CisJZm9yKGkgPSAwOyBpIDwgODsgaSsrKQorCXsKKwkJZWlfb3V0Yl9wKGVpX2xvY2FsLT5tY2ZpbHRlcltpXSwgZTgzOTBfYmFzZSArIEVOMV9NVUxUX1NISUZUKGkpKTsKKyNpZm5kZWYgQlVHXzgzQzY5MAorCQlpZihlaV9pbmJfcChlODM5MF9iYXNlICsgRU4xX01VTFRfU0hJRlQoaSkpIT1laV9sb2NhbC0+bWNmaWx0ZXJbaV0pCisJCQlwcmludGsoS0VSTl9FUlIgIk11bHRpY2FzdCBmaWx0ZXIgcmVhZC93cml0ZSBtaXNtYXAgJWRcbiIsaSk7CisjZW5kaWYKKwl9CisJZWlfb3V0Yl9wKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTAsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOworCisgIAlpZihkZXYtPmZsYWdzJklGRl9QUk9NSVNDKQorICAJCWVpX291dGJfcChFODM5MF9SWENPTkZJRyB8IDB4MTgsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CisJZWxzZSBpZihkZXYtPmZsYWdzJklGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2xpc3QpCisgIAkJZWlfb3V0Yl9wKEU4MzkwX1JYQ09ORklHIHwgMHgwOCwgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKKyAgCWVsc2UKKyAgCQllaV9vdXRiX3AoRTgzOTBfUlhDT05GSUcsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CisgfQorCisvKgorICoJQ2FsbGVkIHdpdGhvdXQgbG9jayBoZWxkLiBUaGlzIGlzIGludm9rZWQgZnJvbSB1c2VyIGNvbnRleHQgYW5kIG1heQorICoJYmUgcGFyYWxsZWwgdG8ganVzdCBhYm91dCBldmVyeXRoaW5nIGVsc2UuIEl0cyBhbHNvIGZhaXJseSBxdWljayBhbmQKKyAqCW5vdCBjYWxsZWQgdG9vIG9mdGVuLiBNdXN0IHByb3RlY3QgYWdhaW5zdCBib3RoIGJoIGFuZCBpcnEgdXNlcnMKKyAqLworCitzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UqKW5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOworCWRvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBldGhkZXZfc2V0dXAgLSBpbml0IHJlc3Qgb2YgODM5MCBkZXZpY2Ugc3RydWN0CisgKiBAZGV2OiBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUgdG8gaW5pdAorICoKKyAqIEluaXRpYWxpemUgdGhlIHJlc3Qgb2YgdGhlIDgzOTAgZGV2aWNlIHN0cnVjdHVyZS4gIERvIE5PVCBfX2luaXQKKyAqIHRoaXMsIGFzIGl0IGlzIHVzZWQgYnkgODM5MCBiYXNlZCBtb2R1bGFyIGRyaXZlcnMgdG9vLgorICovCisKK3N0YXRpYyB2b2lkIGV0aGRldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoZWlfZGVidWcgPiAxKQorCQlwcmludGsodmVyc2lvbik7CisKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlaV9zdGFydF94bWl0OworCWRldi0+Z2V0X3N0YXRzCT0gZ2V0X3N0YXRzOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKworCWV0aGVyX3NldHVwKGRldik7CisKKwlzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Cit9CisKKy8qKgorICogYWxsb2NfZWlfbmV0ZGV2IC0gYWxsb2NfZXRoZXJkZXYgY291bnRlcnBhcnQgZm9yIDgzOTAKKyAqIEBzaXplOiBleHRyYSBieXRlcyB0byBhbGxvY2F0ZQorICoKKyAqIEFsbG9jYXRlIDgzOTAtc3BlY2lmaWMgbmV0X2RldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpfX19fYWxsb2NfZWlfbmV0ZGV2KGludCBzaXplKQoreworCXJldHVybiBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpICsgc2l6ZSwgImV0aCVkIiwKKwkJCQlldGhkZXZfc2V0dXApOworfQorCisKKworCisvKiBUaGlzIHBhZ2Ugb2YgZnVuY3Rpb25zIHNob3VsZCBiZSA4MzkwIGdlbmVyaWMgKi8KKy8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aWFsaXppbmcgdGhlICJOSUMiLiAqLworCisvKioKKyAqIE5TODM5MF9pbml0IC0gaW5pdGlhbGl6ZSA4MzkwIGhhcmR3YXJlCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZSB0byBpbml0aWFsaXplCisgKiBAc3RhcnRwOiBib29sZWFuLiAgbm9uLXplcm8gdmFsdWUgdG8gaW5pdGlhdGUgY2hpcCBwcm9jZXNzaW5nCisgKgorICoJTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCisgKi8KKworc3RhdGljIHZvaWQgX19OUzgzOTBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnRwKQoreworCXVuc2lnbmVkIGxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOworCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKwlpbnQgZW5kY2ZnID0gZWlfbG9jYWwtPndvcmQxNgorCSAgICA/ICgweDQ4IHwgRU5EQ0ZHX1dUUyB8IChlaV9sb2NhbC0+YmlnZW5kaWFuID8gRU5EQ0ZHX0JPUyA6IDApKQorCSAgICA6IDB4NDg7CisKKwlpZihzaXplb2Yoc3RydWN0IGU4MzkwX3BrdF9oZHIpIT00KQorICAgIAkJcGFuaWMoIjgzOTAuYzogaGVhZGVyIHN0cnVjdCBtaXNwYWNrZWRcbiIpOworCS8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aW5nIHRoZSBEUDgzOTAyLiAqLworCWVpX291dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVE9QLCBlODM5MF9iYXNlK0U4MzkwX0NNRCk7IC8qIDB4MjEgKi8KKwllaV9vdXRiX3AoZW5kY2ZnLCBlODM5MF9iYXNlICsgRU4wX0RDRkcpOwkvKiAweDQ4IG9yIDB4NDkgKi8KKwkvKiBDbGVhciB0aGUgcmVtb3RlIGJ5dGUgY291bnQgcmVnaXN0ZXJzLiAqLworCWVpX291dGJfcCgweDAwLCAgZTgzOTBfYmFzZSArIEVOMF9SQ05UTE8pOworCWVpX291dGJfcCgweDAwLCAgZTgzOTBfYmFzZSArIEVOMF9SQ05USEkpOworCS8qIFNldCB0byBtb25pdG9yIGFuZCBsb29wYmFjayBtb2RlIC0tIHRoaXMgaXMgdml0YWwhLiAqLworCWVpX291dGJfcChFODM5MF9SWE9GRiwgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsgLyogMHgyMCAqLworCWVpX291dGJfcChFODM5MF9UWE9GRiwgZTgzOTBfYmFzZSArIEVOMF9UWENSKTsgLyogMHgwMiAqLworCS8qIFNldCB0aGUgdHJhbnNtaXQgcGFnZSBhbmQgcmVjZWl2ZSByaW5nLiAqLworCWVpX291dGJfcChlaV9sb2NhbC0+dHhfc3RhcnRfcGFnZSwgZTgzOTBfYmFzZSArIEVOMF9UUFNSKTsKKwllaV9sb2NhbC0+dHgxID0gZWlfbG9jYWwtPnR4MiA9IDA7CisJZWlfb3V0Yl9wKGVpX2xvY2FsLT5yeF9zdGFydF9wYWdlLCBlODM5MF9iYXNlICsgRU4wX1NUQVJUUEcpOworCWVpX291dGJfcChlaV9sb2NhbC0+c3RvcF9wYWdlLTEsIGU4MzkwX2Jhc2UgKyBFTjBfQk9VTkRBUlkpOwkvKiAzYzUwMyBzYXlzIDB4M2YsTlMweDI2Ki8KKwllaV9sb2NhbC0+Y3VycmVudF9wYWdlID0gZWlfbG9jYWwtPnJ4X3N0YXJ0X3BhZ2U7CQkvKiBhc3NlcnQgYm91bmRhcnkrMSAqLworCWVpX291dGJfcChlaV9sb2NhbC0+c3RvcF9wYWdlLCBlODM5MF9iYXNlICsgRU4wX1NUT1BQRyk7CisJLyogQ2xlYXIgdGhlIHBlbmRpbmcgaW50ZXJydXB0cyBhbmQgbWFzay4gKi8KKwllaV9vdXRiX3AoMHhGRiwgZTgzOTBfYmFzZSArIEVOMF9JU1IpOworCWVpX291dGJfcCgweDAwLCAgZTgzOTBfYmFzZSArIEVOMF9JTVIpOworCisJLyogQ29weSB0aGUgc3RhdGlvbiBhZGRyZXNzIGludG8gdGhlIERTODM5MCByZWdpc3RlcnMuICovCisKKwllaV9vdXRiX3AoRTgzOTBfTk9ETUEgKyBFODM5MF9QQUdFMSArIEU4MzkwX1NUT1AsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsgLyogMHg2MSAqLworCWZvcihpID0gMDsgaSA8IDY7IGkrKykKKwl7CisJCWVpX291dGJfcChkZXYtPmRldl9hZGRyW2ldLCBlODM5MF9iYXNlICsgRU4xX1BIWVNfU0hJRlQoaSkpOworCQlpZiAoZWlfZGVidWcgPiAxICYmIGVpX2luYl9wKGU4MzkwX2Jhc2UgKyBFTjFfUEhZU19TSElGVChpKSkhPWRldi0+ZGV2X2FkZHJbaV0pCisJCQlwcmludGsoS0VSTl9FUlIgIkh3LiBhZGRyZXNzIHJlYWQvd3JpdGUgbWlzbWFwICVkXG4iLGkpOworCX0KKworCWVpX291dGJfcChlaV9sb2NhbC0+cnhfc3RhcnRfcGFnZSwgZTgzOTBfYmFzZSArIEVOMV9DVVJQQUcpOworCWVpX291dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVE9QLCBlODM5MF9iYXNlK0U4MzkwX0NNRCk7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCWVpX2xvY2FsLT50eDEgPSBlaV9sb2NhbC0+dHgyID0gMDsKKwllaV9sb2NhbC0+dHhpbmcgPSAwOworCisJaWYgKHN0YXJ0cCkKKwl7CisJCWVpX291dGJfcCgweGZmLCAgZTgzOTBfYmFzZSArIEVOMF9JU1IpOworCQllaV9vdXRiX3AoRU5JU1JfQUxMLCAgZTgzOTBfYmFzZSArIEVOMF9JTVIpOworCQllaV9vdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RBUlQsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKKwkJZWlfb3V0Yl9wKEU4MzkwX1RYQ09ORklHLCBlODM5MF9iYXNlICsgRU4wX1RYQ1IpOyAvKiB4bWl0IG9uLiAqLworCQkvKiAzYzUwMyBUZWNoTWFuIHNheXMgcnhjb25maWcgb25seSBhZnRlciB0aGUgTklDIGlzIHN0YXJ0ZWQuICovCisJCWVpX291dGJfcChFODM5MF9SWENPTkZJRywgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsgLyogcnggb24sICAqLworCQlkb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsJLyogKHJlKWxvYWQgdGhlIG1jYXN0IHRhYmxlICovCisJfQorfQorCisvKiBUcmlnZ2VyIGEgdHJhbnNtaXQgc3RhcnQsIGFzc3VtaW5nIHRoZSBsZW5ndGggaXMgdmFsaWQuCisgICBBbHdheXMgY2FsbGVkIHdpdGggdGhlIHBhZ2UgbG9jayBoZWxkICovCisKK3N0YXRpYyB2b2lkIE5TODM5MF90cmlnZ2VyX3NlbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJCQkJCQkJaW50IHN0YXJ0X3BhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CisgCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsIF9fYXR0cmlidXRlKCh1bnVzZWQpKSA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CisKKwllaV9vdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTAsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKKworCWlmIChlaV9pbmJfcChlODM5MF9iYXNlICsgRTgzOTBfQ01EKSAmIEU4MzkwX1RSQU5TKQorCXsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyaWdnZXJfc2VuZCgpIGNhbGxlZCB3aXRoIHRoZSB0cmFuc21pdHRlciBidXN5LlxuIiwKKwkJCWRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJZWlfb3V0Yl9wKGxlbmd0aCAmIDB4ZmYsIGU4MzkwX2Jhc2UgKyBFTjBfVENOVExPKTsKKwllaV9vdXRiX3AobGVuZ3RoID4+IDgsIGU4MzkwX2Jhc2UgKyBFTjBfVENOVEhJKTsKKwllaV9vdXRiX3Aoc3RhcnRfcGFnZSwgZTgzOTBfYmFzZSArIEVOMF9UUFNSKTsKKwllaV9vdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfVFJBTlMrRTgzOTBfU1RBUlQsIGU4MzkwX2Jhc2UrRTgzOTBfQ01EKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hYzgzOTAuYyBiL2RyaXZlcnMvbmV0L21hYzgzOTAuYwppbmRleCBhZGU2ZmY4Li5hMTJiYjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWM4MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjODM5MC5jCkBAIC0zOSw3ICszOSwxNiBAQAogI2luY2x1ZGUgPGFzbS9od3Rlc3QuaD4KICNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgogCi0jaW5jbHVkZSAiODM5MC5oIgorc3RhdGljIGNoYXIgdmVyc2lvbltdID0KKwkibWFjODM5MC5jOiB2MC40IDIwMDEtMDUtMTUgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPiBhbmQgb3RoZXJzXG4iOworCisjZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKKyNkZWZpbmUgZWlfaW5iKHBvcnQpICAgaW5fOChwb3J0KQorI2RlZmluZSBlaV9vdXRiKHZhbCxwb3J0KSAgb3V0XzgocG9ydCx2YWwpCisjZGVmaW5lIGVpX2luYl9wKHBvcnQpICAgaW5fOChwb3J0KQorI2RlZmluZSBlaV9vdXRiX3AodmFsLHBvcnQpICBvdXRfOChwb3J0LHZhbCkKKworI2luY2x1ZGUgImxpYjgzOTAuYyIKIAogI2RlZmluZSBXRF9TVEFSVF9QRwkJCTB4MDAJLyogRmlyc3QgcGFnZSBvZiBUWCBidWZmZXIgKi8KICNkZWZpbmUgQ0FCTEVUUk9OX1JYX1NUQVJUX1BHCQkweDAwICAgIC8qIEZpcnN0IHBhZ2Ugb2YgUlggYnVmZmVyICovCkBAIC0xMTYsOSArMTI1LDYgQEAKIAkxLCAvKiBkYXluYS1sYyAqLwogfTsKIAotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPQotCSJtYWM4MzkwLmM6IHYwLjQgMjAwMS0wNS0xNSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+IGFuZCBvdGhlcnNcbiI7Ci0KIGV4dGVybiBlbnVtIG1hYzgzOTBfdHlwZSBtYWM4MzkwX2lkZW50KHN0cnVjdCBudWJ1c19kZXYgKiBkZXYpOwogZXh0ZXJuIGludCBtYWM4MzkwX21lbXNpemUodW5zaWduZWQgbG9uZyBtZW1iYXNlKTsKIGV4dGVybiBpbnQgbWFjODM5MF9tZW10ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKQEAgLTIzNyw3ICsyNDMsNyBAQAogCWlmICghTUFDSF9JU19NQUMpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCi0JZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKQEAgLTQzOCw3ICs0NDQsNyBAQAogCWRldi0+b3BlbiA9ICZtYWM4MzkwX29wZW47CiAJZGV2LT5zdG9wID0gJm1hYzgzOTBfY2xvc2U7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVpX3BvbGw7CisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBfX2VpX3BvbGw7CiAjZW5kaWYKIAogCS8qIEdBUiwgZWlfc3RhdHVzIGlzIGFjdHVhbGx5IGEgbWFjcm8gZXZlbiB0aG91Z2ggaXQgbG9va3MgZ2xvYmFsICovCkBAIC01MTAsNyArNTE2LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JTlM4MzkwX2luaXQoZGV2LCAwKTsKKwlfX05TODM5MF9pbml0KGRldiwgMCk7CiAKIAkvKiBHb29kLCBkb25lLCBub3cgc3BpdCBvdXQgc29tZSBtZXNzYWdlcyAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBpbiBzbG90ICVYICh0eXBlICVzKVxuIiwKQEAgLTUzMiw4ICs1MzgsOCBAQAogCiBzdGF0aWMgaW50IG1hYzgzOTBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWVpX29wZW4oZGV2KTsKLQlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgMCwgIjgzOTAgRXRoZXJuZXQiLCBkZXYpKSB7CisJX19laV9vcGVuKGRldik7CisJaWYgKHJlcXVlc3RfaXJxKGRldi0+aXJxLCBfX2VpX2ludGVycnVwdCwgMCwgIjgzOTAgRXRoZXJuZXQiLCBkZXYpKSB7CiAJCXByaW50ayAoIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CkBAIC01NDMsNyArNTQ5LDcgQEAKIHN0YXRpYyBpbnQgbWFjODM5MF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCWVpX2Nsb3NlKGRldik7CisJX19laV9jbG9zZShkZXYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNiLmMgYi9kcml2ZXJzL25ldC9tYWNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwY2U5OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21hY2IuYwpAQCAtMCwwICsxLDEyMTAgQEAKKy8qCisgKiBBdG1lbCBNQUNCIEV0aGVybmV0IENvbnRyb2xsZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCisjaW5jbHVkZSAibWFjYi5oIgorCisjZGVmaW5lIHRvX25ldF9kZXYoY2xhc3MpIGNvbnRhaW5lcl9vZihjbGFzcywgc3RydWN0IG5ldF9kZXZpY2UsIGNsYXNzX2RldikKKworI2RlZmluZSBSWF9CVUZGRVJfU0laRQkJMTI4CisjZGVmaW5lIFJYX1JJTkdfU0laRQkJNTEyCisjZGVmaW5lIFJYX1JJTkdfQllURVMJCShzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSAqIFJYX1JJTkdfU0laRSkKKworLyogTWFrZSB0aGUgSVAgaGVhZGVyIHdvcmQtYWxpZ25lZCAodGhlIGV0aGVybmV0IGhlYWRlciBpcyAxNCBieXRlcykgKi8KKyNkZWZpbmUgUlhfT0ZGU0VUCQkyCisKKyNkZWZpbmUgVFhfUklOR19TSVpFCQkxMjgKKyNkZWZpbmUgREVGX1RYX1JJTkdfUEVORElORwkoVFhfUklOR19TSVpFIC0gMSkKKyNkZWZpbmUgVFhfUklOR19CWVRFUwkJKHNpemVvZihzdHJ1Y3QgZG1hX2Rlc2MpICogVFhfUklOR19TSVpFKQorCisjZGVmaW5lIFRYX1JJTkdfR0FQKGJwKQkJCQkJCVwKKwkoVFhfUklOR19TSVpFIC0gKGJwKS0+dHhfcGVuZGluZykKKyNkZWZpbmUgVFhfQlVGRlNfQVZBSUwoYnApCQkJCQlcCisJKCgoYnApLT50eF90YWlsIDw9IChicCktPnR4X2hlYWQpID8JCQlcCisJIChicCktPnR4X3RhaWwgKyAoYnApLT50eF9wZW5kaW5nIC0gKGJwKS0+dHhfaGVhZCA6CVwKKwkgKGJwKS0+dHhfdGFpbCAtIChicCktPnR4X2hlYWQgLSBUWF9SSU5HX0dBUChicCkpCisjZGVmaW5lIE5FWFRfVFgobikJCSgoKG4pICsgMSkgJiAoVFhfUklOR19TSVpFIC0gMSkpCisKKyNkZWZpbmUgTkVYVF9SWChuKQkJKCgobikgKyAxKSAmIChSWF9SSU5HX1NJWkUgLSAxKSkKKworLyogbWluaW11bSBudW1iZXIgb2YgZnJlZSBUWCBkZXNjcmlwdG9ycyBiZWZvcmUgd2FraW5nIHVwIFRYIHByb2Nlc3MgKi8KKyNkZWZpbmUgTUFDQl9UWF9XQUtFVVBfVEhSRVNICShUWF9SSU5HX1NJWkUgLyA0KQorCisjZGVmaW5lIE1BQ0JfUlhfSU5UX0ZMQUdTCShNQUNCX0JJVChSQ09NUCkgfCBNQUNCX0JJVChSWFVCUikJXAorCQkJCSB8IE1BQ0JfQklUKElTUl9ST1ZSKSkKKworc3RhdGljIHZvaWQgX19tYWNiX3NldF9od2FkZHIoc3RydWN0IG1hY2IgKmJwKQoreworCXUzMiBib3R0b207CisJdTE2IHRvcDsKKworCWJvdHRvbSA9IGNwdV90b19sZTMyKCooKHUzMiAqKWJwLT5kZXYtPmRldl9hZGRyKSk7CisJbWFjYl93cml0ZWwoYnAsIFNBMUIsIGJvdHRvbSk7CisJdG9wID0gY3B1X3RvX2xlMTYoKigodTE2ICopKGJwLT5kZXYtPmRldl9hZGRyICsgNCkpKTsKKwltYWNiX3dyaXRlbChicCwgU0ExVCwgdG9wKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG1hY2JfZ2V0X2h3YWRkcihzdHJ1Y3QgbWFjYiAqYnApCit7CisJdTMyIGJvdHRvbTsKKwl1MTYgdG9wOworCXU4IGFkZHJbNl07CisKKwlib3R0b20gPSBtYWNiX3JlYWRsKGJwLCBTQTFCKTsKKwl0b3AgPSBtYWNiX3JlYWRsKGJwLCBTQTFUKTsKKworCWFkZHJbMF0gPSBib3R0b20gJiAweGZmOworCWFkZHJbMV0gPSAoYm90dG9tID4+IDgpICYgMHhmZjsKKwlhZGRyWzJdID0gKGJvdHRvbSA+PiAxNikgJiAweGZmOworCWFkZHJbM10gPSAoYm90dG9tID4+IDI0KSAmIDB4ZmY7CisJYWRkcls0XSA9IHRvcCAmIDB4ZmY7CisJYWRkcls1XSA9ICh0b3AgPj4gOCkgJiAweGZmOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpCisJCW1lbWNweShicC0+ZGV2LT5kZXZfYWRkciwgYWRkciwgc2l6ZW9mKGFkZHIpKTsKK30KKworc3RhdGljIHZvaWQgbWFjYl9lbmFibGVfbWRpbyhzdHJ1Y3QgbWFjYiAqYnApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisJcmVnID0gbWFjYl9yZWFkbChicCwgTkNSKTsKKwlyZWcgfD0gTUFDQl9CSVQoTVBFKTsKKwltYWNiX3dyaXRlbChicCwgTkNSLCByZWcpOworCW1hY2Jfd3JpdGVsKGJwLCBJRVIsIE1BQ0JfQklUKE1GRCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1hY2JfZGlzYWJsZV9tZGlvKHN0cnVjdCBtYWNiICpicCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKKwlyZWcgPSBtYWNiX3JlYWRsKGJwLCBOQ1IpOworCXJlZyAmPSB+TUFDQl9CSVQoTVBFKTsKKwltYWNiX3dyaXRlbChicCwgTkNSLCByZWcpOworCW1hY2Jfd3JpdGVsKGJwLCBJRFIsIE1BQ0JfQklUKE1GRCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbWFjYl9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbHVlOworCisJbXV0ZXhfbG9jaygmYnAtPm1kaW9fbXV0ZXgpOworCisJbWFjYl9lbmFibGVfbWRpbyhicCk7CisJbWFjYl93cml0ZWwoYnAsIE1BTiwgKE1BQ0JfQkYoU09GLCBNQUNCX01BTl9TT0YpCisJCQkgICAgICB8IE1BQ0JfQkYoUlcsIE1BQ0JfTUFOX1JFQUQpCisJCQkgICAgICB8IE1BQ0JfQkYoUEhZQSwgcGh5X2lkKQorCQkJICAgICAgfCBNQUNCX0JGKFJFR0EsIGxvY2F0aW9uKQorCQkJICAgICAgfCBNQUNCX0JGKENPREUsIE1BQ0JfTUFOX0NPREUpKSk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZicC0+bWRpb19jb21wbGV0ZSk7CisKKwl2YWx1ZSA9IE1BQ0JfQkZFWFQoREFUQSwgbWFjYl9yZWFkbChicCwgTUFOKSk7CisJbWFjYl9kaXNhYmxlX21kaW8oYnApOworCW11dGV4X3VubG9jaygmYnAtPm1kaW9fbXV0ZXgpOworCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBtYWNiX21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwKKwkJCSAgICBpbnQgbG9jYXRpb24sIGludCB2YWwpCit7CisJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsICJtZGlvX3dyaXRlICUwMng6JTAyeCA8LSAlMDR4XG4iLAorCQlwaHlfaWQsIGxvY2F0aW9uLCB2YWwpOworCisJbXV0ZXhfbG9jaygmYnAtPm1kaW9fbXV0ZXgpOworCW1hY2JfZW5hYmxlX21kaW8oYnApOworCisJbWFjYl93cml0ZWwoYnAsIE1BTiwgKE1BQ0JfQkYoU09GLCBNQUNCX01BTl9TT0YpCisJCQkgICAgICB8IE1BQ0JfQkYoUlcsIE1BQ0JfTUFOX1dSSVRFKQorCQkJICAgICAgfCBNQUNCX0JGKFBIWUEsIHBoeV9pZCkKKwkJCSAgICAgIHwgTUFDQl9CRihSRUdBLCBsb2NhdGlvbikKKwkJCSAgICAgIHwgTUFDQl9CRihDT0RFLCBNQUNCX01BTl9DT0RFKQorCQkJICAgICAgfCBNQUNCX0JGKERBVEEsIHZhbCkpKTsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmJwLT5tZGlvX2NvbXBsZXRlKTsKKworCW1hY2JfZGlzYWJsZV9tZGlvKGJwKTsKKwltdXRleF91bmxvY2soJmJwLT5tZGlvX211dGV4KTsKK30KKworc3RhdGljIGludCBtYWNiX3BoeV9wcm9iZShzdHJ1Y3QgbWFjYiAqYnApCit7CisJaW50IHBoeV9hZGRyZXNzOworCXUxNiBwaHlpZDEsIHBoeWlkMjsKKworCWZvciAocGh5X2FkZHJlc3MgPSAwOyBwaHlfYWRkcmVzcyA8IDMyOyBwaHlfYWRkcmVzcysrKSB7CisJCXBoeWlkMSA9IG1hY2JfbWRpb19yZWFkKGJwLT5kZXYsIHBoeV9hZGRyZXNzLCBNSUlfUEhZU0lEMSk7CisJCXBoeWlkMiA9IG1hY2JfbWRpb19yZWFkKGJwLT5kZXYsIHBoeV9hZGRyZXNzLCBNSUlfUEhZU0lEMik7CisKKwkJaWYgKHBoeWlkMSAhPSAweGZmZmYgJiYgcGh5aWQxICE9IDB4MDAwMAorCQkgICAgJiYgcGh5aWQyICE9IDB4ZmZmZiAmJiBwaHlpZDIgIT0gMHgwMDAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHBoeV9hZGRyZXNzID09IDMyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldl9pbmZvKCZicC0+cGRldi0+ZGV2LAorCQkgImRldGVjdGVkIFBIWSBhdCBhZGRyZXNzICVkIChJRCAlMDR4OiUwNHgpXG4iLAorCQkgcGh5X2FkZHJlc3MsIHBoeWlkMSwgcGh5aWQyKTsKKworCWJwLT5taWkucGh5X2lkID0gcGh5X2FkZHJlc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hY2Jfc2V0X21lZGlhKHN0cnVjdCBtYWNiICpicCwgaW50IG1lZGlhKQoreworCXUzMiByZWc7CisKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CisJcmVnID0gbWFjYl9yZWFkbChicCwgTkNGR1IpOworCXJlZyAmPSB+KE1BQ0JfQklUKFNQRCkgfCBNQUNCX0JJVChGRCkpOworCWlmIChtZWRpYSAmIChBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMDBGVUxMKSkKKwkJcmVnIHw9IE1BQ0JfQklUKFNQRCk7CisJaWYgKG1lZGlhICYgQURWRVJUSVNFX0ZVTEwpCisJCXJlZyB8PSBNQUNCX0JJVChGRCk7CisJbWFjYl93cml0ZWwoYnAsIE5DRkdSLCByZWcpOworCXNwaW5fdW5sb2NrX2lycSgmYnAtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBtYWNiX2NoZWNrX21lZGlhKHN0cnVjdCBtYWNiICpicCwgaW50IG9rX3RvX3ByaW50LCBpbnQgaW5pdF9tZWRpYSkKK3sKKwlzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSA9ICZicC0+bWlpOworCXVuc2lnbmVkIGludCBvbGRfY2FycmllciwgbmV3X2NhcnJpZXI7CisJaW50IGFkdmVydGlzZSwgbHBhLCBtZWRpYSwgZHVwbGV4OworCisJLyogaWYgZm9yY2VkIG1lZGlhLCBnbyBubyBmdXJ0aGVyICovCisJaWYgKG1paS0+Zm9yY2VfbWVkaWEpCisJCXJldHVybjsKKworCS8qIGNoZWNrIGN1cnJlbnQgYW5kIG9sZCBsaW5rIHN0YXR1cyAqLworCW9sZF9jYXJyaWVyID0gbmV0aWZfY2Fycmllcl9vayhtaWktPmRldikgPyAxIDogMDsKKwluZXdfY2FycmllciA9ICh1bnNpZ25lZCBpbnQpIG1paV9saW5rX29rKG1paSk7CisKKwkvKiBpZiBjYXJyaWVyIHN0YXRlIGRpZCBub3QgY2hhbmdlLCBhc3N1bWUgbm90aGluZyBlbHNlIGRpZCAqLworCWlmICghaW5pdF9tZWRpYSAmJiBvbGRfY2FycmllciA9PSBuZXdfY2FycmllcikKKwkJcmV0dXJuOworCisJLyogbm8gY2Fycmllciwgbm90aGluZyBtdWNoIHRvIGRvICovCisJaWYgKCFuZXdfY2FycmllcikgeworCQluZXRpZl9jYXJyaWVyX29mZihtaWktPmRldik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIG1paS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogd2UgaGF2ZSBjYXJyaWVyLCBzZWUgd2hvJ3Mgb24gdGhlIG90aGVyIGVuZAorCSAqLworCW5ldGlmX2NhcnJpZXJfb24obWlpLT5kZXYpOworCisJLyogZ2V0IE1JSSBhZHZlcnRpc2UgYW5kIExQQSB2YWx1ZXMgKi8KKwlpZiAoIWluaXRfbWVkaWEgJiYgbWlpLT5hZHZlcnRpc2luZykgeworCQlhZHZlcnRpc2UgPSBtaWktPmFkdmVydGlzaW5nOworCX0gZWxzZSB7CisJCWFkdmVydGlzZSA9IG1paS0+bWRpb19yZWFkKG1paS0+ZGV2LCBtaWktPnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisJCW1paS0+YWR2ZXJ0aXNpbmcgPSBhZHZlcnRpc2U7CisJfQorCWxwYSA9IG1paS0+bWRpb19yZWFkKG1paS0+ZGV2LCBtaWktPnBoeV9pZCwgTUlJX0xQQSk7CisKKwkvKiBmaWd1cmUgb3V0IG1lZGlhIGFuZCBkdXBsZXggZnJvbSBhZHZlcnRpc2UgYW5kIExQQSB2YWx1ZXMgKi8KKwltZWRpYSA9IG1paV9ud2F5X3Jlc3VsdChscGEgJiBhZHZlcnRpc2UpOworCWR1cGxleCA9IChtZWRpYSAmIEFEVkVSVElTRV9GVUxMKSA/IDEgOiAwOworCisJaWYgKG9rX3RvX3ByaW50KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCwgJXNNYnBzLCAlcy1kdXBsZXgsIGxwYSAweCUwNFhcbiIsCisJCSAgICAgICBtaWktPmRldi0+bmFtZSwKKwkJICAgICAgIG1lZGlhICYgKEFEVkVSVElTRV8xMDBGVUxMIHwgQURWRVJUSVNFXzEwMEhBTEYpID8gIjEwMCIgOiAiMTAiLAorCQkgICAgICAgZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLCBscGEpOworCisJbWlpLT5mdWxsX2R1cGxleCA9IGR1cGxleDsKKworCS8qIExldCB0aGUgTUFDIGtub3cgYWJvdXQgdGhlIG5ldyBsaW5rIHN0YXRlICovCisJbWFjYl9zZXRfbWVkaWEoYnAsIG1lZGlhKTsKK30KKworc3RhdGljIHZvaWQgbWFjYl91cGRhdGVfc3RhdHMoc3RydWN0IG1hY2IgKmJwKQoreworCXUzMiBfX2lvbWVtICpyZWcgPSBicC0+cmVncyArIE1BQ0JfUEZSOworCXUzMiAqcCA9ICZicC0+aHdfc3RhdHMucnhfcGF1c2VfZnJhbWVzOworCXUzMiAqZW5kID0gJmJwLT5od19zdGF0cy50eF9wYXVzZV9mcmFtZXMgKyAxOworCisJV0FSTl9PTigodW5zaWduZWQgbG9uZykoZW5kIC0gcCAtIDEpICE9IChNQUNCX1RQRiAtIE1BQ0JfUEZSKSAvIDQpOworCisJZm9yKDsgcCA8IGVuZDsgcCsrLCByZWcrKykKKwkJKnAgKz0gcmVhZGwocmVnKTsKK30KKworc3RhdGljIHZvaWQgbWFjYl9wZXJpb2RpY190YXNrKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWFjYiAqYnAgPSBhcmc7CisKKwltYWNiX3VwZGF0ZV9zdGF0cyhicCk7CisJbWFjYl9jaGVja19tZWRpYShicCwgMSwgMCk7CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJwLT5wZXJpb2RpY190YXNrLCBIWik7Cit9CisKK3N0YXRpYyB2b2lkIG1hY2JfdHgoc3RydWN0IG1hY2IgKmJwKQoreworCXVuc2lnbmVkIGludCB0YWlsOworCXVuc2lnbmVkIGludCBoZWFkOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBtYWNiX3JlYWRsKGJwLCBUU1IpOworCW1hY2Jfd3JpdGVsKGJwLCBUU1IsIHN0YXR1cyk7CisKKwlkZXZfZGJnKCZicC0+cGRldi0+ZGV2LCAibWFjYl90eCBzdGF0dXMgPSAlMDJseFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcpc3RhdHVzKTsKKworCWlmIChzdGF0dXMgJiBNQUNCX0JJVChVTkQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRYIHVuZGVycnVuLCByZXNldHRpbmcgYnVmZmVyc1xuIiwKKwkJICAgICAgIGJwLT5kZXYtPm5hbWUpOworCQlicC0+dHhfaGVhZCA9IGJwLT50eF90YWlsID0gMDsKKwl9CisKKwlpZiAoIShzdGF0dXMgJiBNQUNCX0JJVChDT01QKSkpCisJCS8qCisJCSAqIFRoaXMgbWF5IGhhcHBlbiB3aGVuIGEgYnVmZmVyIGJlY29tZXMgY29tcGxldGUKKwkJICogYmV0d2VlbiByZWFkaW5nIHRoZSBJU1IgYW5kIHNjYW5uaW5nIHRoZQorCQkgKiBkZXNjcmlwdG9ycy4gIE5vdGhpbmcgdG8gd29ycnkgYWJvdXQuCisJCSAqLworCQlyZXR1cm47CisKKwloZWFkID0gYnAtPnR4X2hlYWQ7CisJZm9yICh0YWlsID0gYnAtPnR4X3RhaWw7IHRhaWwgIT0gaGVhZDsgdGFpbCA9IE5FWFRfVFgodGFpbCkpIHsKKwkJc3RydWN0IHJpbmdfaW5mbyAqcnAgPSAmYnAtPnR4X3NrYlt0YWlsXTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJwLT5za2I7CisJCXUzMiBidWZzdGF0OworCisJCUJVR19PTihza2IgPT0gTlVMTCk7CisKKwkJcm1iKCk7CisJCWJ1ZnN0YXQgPSBicC0+dHhfcmluZ1t0YWlsXS5jdHJsOworCisJCWlmICghKGJ1ZnN0YXQgJiBNQUNCX0JJVChUWF9VU0VEKSkpCisJCQlicmVhazsKKworCQlkZXZfZGJnKCZicC0+cGRldi0+ZGV2LCAic2tiICV1IChkYXRhICVwKSBUWCBjb21wbGV0ZVxuIiwKKwkJCXRhaWwsIHNrYi0+ZGF0YSk7CisJCWRtYV91bm1hcF9zaW5nbGUoJmJwLT5wZGV2LT5kZXYsIHJwLT5tYXBwaW5nLCBza2ItPmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJCWJwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWJwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJcnAtPnNrYiA9IE5VTEw7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJfQorCisJYnAtPnR4X3RhaWwgPSB0YWlsOworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpICYmCisJICAgIFRYX0JVRkZTX0FWQUlMKGJwKSA+IE1BQ0JfVFhfV0FLRVVQX1RIUkVTSCkKKwkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKK30KKworc3RhdGljIGludCBtYWNiX3J4X2ZyYW1lKHN0cnVjdCBtYWNiICpicCwgdW5zaWduZWQgaW50IGZpcnN0X2ZyYWcsCisJCQkgdW5zaWduZWQgaW50IGxhc3RfZnJhZykKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBmcmFnOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlsZW4gPSBNQUNCX0JGRVhUKFJYX0ZSTUxFTiwgYnAtPnJ4X3JpbmdbbGFzdF9mcmFnXS5jdHJsKTsKKworCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsICJtYWNiX3J4X2ZyYW1lIGZyYWdzICV1IC0gJXUgKGxlbiAldSlcbiIsCisJCWZpcnN0X2ZyYWcsIGxhc3RfZnJhZywgbGVuKTsKKworCXNrYiA9IGRldl9hbGxvY19za2IobGVuICsgUlhfT0ZGU0VUKTsKKwlpZiAoIXNrYikgeworCQlicC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlmb3IgKGZyYWcgPSBmaXJzdF9mcmFnOyA7IGZyYWcgPSBORVhUX1JYKGZyYWcpKSB7CisJCQlicC0+cnhfcmluZ1tmcmFnXS5hZGRyICY9IH5NQUNCX0JJVChSWF9VU0VEKTsKKwkJCWlmIChmcmFnID09IGxhc3RfZnJhZykKKwkJCQlicmVhazsKKwkJfQorCQl3bWIoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCBSWF9PRkZTRVQpOworCXNrYi0+ZGV2ID0gYnAtPmRldjsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiX3B1dChza2IsIGxlbik7CisKKwlmb3IgKGZyYWcgPSBmaXJzdF9mcmFnOyA7IGZyYWcgPSBORVhUX1JYKGZyYWcpKSB7CisJCXVuc2lnbmVkIGludCBmcmFnX2xlbiA9IFJYX0JVRkZFUl9TSVpFOworCisJCWlmIChvZmZzZXQgKyBmcmFnX2xlbiA+IGxlbikgeworCQkJQlVHX09OKGZyYWcgIT0gbGFzdF9mcmFnKTsKKwkJCWZyYWdfbGVuID0gbGVuIC0gb2Zmc2V0OworCQl9CisJCW1lbWNweShza2ItPmRhdGEgKyBvZmZzZXQsCisJCSAgICAgICBicC0+cnhfYnVmZmVycyArIChSWF9CVUZGRVJfU0laRSAqIGZyYWcpLAorCQkgICAgICAgZnJhZ19sZW4pOworCQlvZmZzZXQgKz0gUlhfQlVGRkVSX1NJWkU7CisJCWJwLT5yeF9yaW5nW2ZyYWddLmFkZHIgJj0gfk1BQ0JfQklUKFJYX1VTRUQpOworCQl3bWIoKTsKKworCQlpZiAoZnJhZyA9PSBsYXN0X2ZyYWcpCisJCQlicmVhazsKKwl9CisKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBicC0+ZGV2KTsKKworCWJwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJYnAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwlicC0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwlkZXZfZGJnKCZicC0+cGRldi0+ZGV2LCAicmVjZWl2ZWQgc2tiIG9mIGxlbmd0aCAldSwgY3N1bTogJTA4eFxuIiwKKwkJc2tiLT5sZW4sIHNrYi0+Y3N1bSk7CisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCisvKiBNYXJrIERNQSBkZXNjcmlwdG9ycyBmcm9tIGJlZ2luIHVwIHRvIGFuZCBub3QgaW5jbHVkaW5nIGVuZCBhcyB1bnVzZWQgKi8KK3N0YXRpYyB2b2lkIGRpc2NhcmRfcGFydGlhbF9mcmFtZShzdHJ1Y3QgbWFjYiAqYnAsIHVuc2lnbmVkIGludCBiZWdpbiwKKwkJCQkgIHVuc2lnbmVkIGludCBlbmQpCit7CisJdW5zaWduZWQgaW50IGZyYWc7CisKKwlmb3IgKGZyYWcgPSBiZWdpbjsgZnJhZyAhPSBlbmQ7IGZyYWcgPSBORVhUX1JYKGZyYWcpKQorCQlicC0+cnhfcmluZ1tmcmFnXS5hZGRyICY9IH5NQUNCX0JJVChSWF9VU0VEKTsKKwl3bWIoKTsKKworCS8qCisJICogV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBoYXJkd2FyZSBzdGF0cyByZWdpc3RlcnMgZm9yCisJICogd2hhdGV2ZXIgY2F1c2VkIHRoaXMgaXMgdXBkYXRlZCwgc28gd2UgZG9uJ3QgaGF2ZSB0byByZWNvcmQKKwkgKiBhbnl0aGluZy4KKwkgKi8KK30KKworc3RhdGljIGludCBtYWNiX3J4KHN0cnVjdCBtYWNiICpicCwgaW50IGJ1ZGdldCkKK3sKKwlpbnQgcmVjZWl2ZWQgPSAwOworCXVuc2lnbmVkIGludCB0YWlsID0gYnAtPnJ4X3RhaWw7CisJaW50IGZpcnN0X2ZyYWcgPSAtMTsKKworCWZvciAoOyBidWRnZXQgPiAwOyB0YWlsID0gTkVYVF9SWCh0YWlsKSkgeworCQl1MzIgYWRkciwgY3RybDsKKworCQlybWIoKTsKKwkJYWRkciA9IGJwLT5yeF9yaW5nW3RhaWxdLmFkZHI7CisJCWN0cmwgPSBicC0+cnhfcmluZ1t0YWlsXS5jdHJsOworCisJCWlmICghKGFkZHIgJiBNQUNCX0JJVChSWF9VU0VEKSkpCisJCQlicmVhazsKKworCQlpZiAoY3RybCAmIE1BQ0JfQklUKFJYX1NPRikpIHsKKwkJCWlmIChmaXJzdF9mcmFnICE9IC0xKQorCQkJCWRpc2NhcmRfcGFydGlhbF9mcmFtZShicCwgZmlyc3RfZnJhZywgdGFpbCk7CisJCQlmaXJzdF9mcmFnID0gdGFpbDsKKwkJfQorCisJCWlmIChjdHJsICYgTUFDQl9CSVQoUlhfRU9GKSkgeworCQkJaW50IGRyb3BwZWQ7CisJCQlCVUdfT04oZmlyc3RfZnJhZyA9PSAtMSk7CisKKwkJCWRyb3BwZWQgPSBtYWNiX3J4X2ZyYW1lKGJwLCBmaXJzdF9mcmFnLCB0YWlsKTsKKwkJCWZpcnN0X2ZyYWcgPSAtMTsKKwkJCWlmICghZHJvcHBlZCkgeworCQkJCXJlY2VpdmVkKys7CisJCQkJYnVkZ2V0LS07CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZmlyc3RfZnJhZyAhPSAtMSkKKwkJYnAtPnJ4X3RhaWwgPSBmaXJzdF9mcmFnOworCWVsc2UKKwkJYnAtPnJ4X3RhaWwgPSB0YWlsOworCisJcmV0dXJuIHJlY2VpdmVkOworfQorCitzdGF0aWMgaW50IG1hY2JfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBvcmlnX2J1ZGdldCwgd29ya19kb25lLCByZXR2YWwgPSAwOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBtYWNiX3JlYWRsKGJwLCBSU1IpOworCW1hY2Jfd3JpdGVsKGJwLCBSU1IsIHN0YXR1cyk7CisKKwlpZiAoIXN0YXR1cykgeworCQkvKgorCQkgKiBUaGlzIG1heSBoYXBwZW4gaWYgYW4gaW50ZXJydXB0IHdhcyBwZW5kaW5nIGJlZm9yZQorCQkgKiB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgbGFzdCB0aW1lLCBhbmQgbm8gcGFja2V0cworCQkgKiBoYXZlIGJlZW4gcmVjZWl2ZWQgc2luY2UuCisJCSAqLworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlkZXZfZGJnKCZicC0+cGRldi0+ZGV2LCAicG9sbDogc3RhdHVzID0gJTA4bHgsIGJ1ZGdldCA9ICVkXG4iLAorCQkodW5zaWduZWQgbG9uZylzdGF0dXMsICpidWRnZXQpOworCisJaWYgKCEoc3RhdHVzICYgTUFDQl9CSVQoUkVDKSkpIHsKKwkJZGV2X3dhcm4oJmJwLT5wZGV2LT5kZXYsCisJCQkgIk5vIFJYIGJ1ZmZlcnMgY29tcGxldGUsIHN0YXR1cyA9ICUwMmx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKXN0YXR1cyk7CisJCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisJCWdvdG8gb3V0OworCX0KKworCW9yaWdfYnVkZ2V0ID0gKmJ1ZGdldDsKKwlpZiAob3JpZ19idWRnZXQgPiBkZXYtPnF1b3RhKQorCQlvcmlnX2J1ZGdldCA9IGRldi0+cXVvdGE7CisKKwl3b3JrX2RvbmUgPSBtYWNiX3J4KGJwLCBvcmlnX2J1ZGdldCk7CisJaWYgKHdvcmtfZG9uZSA8IG9yaWdfYnVkZ2V0KSB7CisJCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisJCXJldHZhbCA9IDA7CisJfSBlbHNlIHsKKwkJcmV0dmFsID0gMTsKKwl9CisKKwkvKgorCSAqIFdlJ3ZlIGRvbmUgd2hhdCB3ZSBjYW4gdG8gY2xlYW4gdGhlIGJ1ZmZlcnMuIE1ha2Ugc3VyZSB3ZQorCSAqIGdldCBub3RpZmllZCB3aGVuIG5ldyBwYWNrZXRzIGFycml2ZS4KKwkgKi8KK291dDoKKwltYWNiX3dyaXRlbChicCwgSUVSLCBNQUNCX1JYX0lOVF9GTEFHUyk7CisKKwkvKiBUT0RPOiBIYW5kbGUgZXJyb3JzICovCisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFjYl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gbWFjYl9yZWFkbChicCwgSVNSKTsKKworCWlmICh1bmxpa2VseSghc3RhdHVzKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZicC0+bG9jayk7CisKKwl3aGlsZSAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgJiBNQUNCX0JJVChNRkQpKQorCQkJY29tcGxldGUoJmJwLT5tZGlvX2NvbXBsZXRlKTsKKworCQkvKiBjbG9zZSBwb3NzaWJsZSByYWNlIHdpdGggZGV2X2Nsb3NlICovCisJCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgeworCQkJbWFjYl93cml0ZWwoYnAsIElEUiwgfjBVTCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChzdGF0dXMgJiBNQUNCX1JYX0lOVF9GTEFHUykgeworCQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KSkgeworCQkJCS8qCisJCQkJICogVGhlcmUncyBubyBwb2ludCB0YWtpbmcgYW55IG1vcmUgaW50ZXJydXB0cworCQkJCSAqIHVudGlsIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSBidWZmZXJzCisJCQkJICovCisJCQkJbWFjYl93cml0ZWwoYnAsIElEUiwgTUFDQl9SWF9JTlRfRkxBR1MpOworCQkJCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsICJzY2hlZHVsaW5nIFJYIHNvZnRpcnFcbiIpOworCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKwkJCX0KKwkJfQorCisJCWlmIChzdGF0dXMgJiAoTUFDQl9CSVQoVENPTVApIHwgTUFDQl9CSVQoSVNSX1RVTkQpKSkKKwkJCW1hY2JfdHgoYnApOworCisJCS8qCisJCSAqIExpbmsgY2hhbmdlIGRldGVjdGlvbiBpc24ndCBwb3NzaWJsZSB3aXRoIFJNSUksIHNvIHdlJ2xsCisJCSAqIGFkZCB0aGF0IGlmL3doZW4gd2UgZ2V0IG91ciBoYW5kcyBvbiBhIGZ1bGwtYmxvd24gTUlJIFBIWS4KKwkJICovCisKKwkJaWYgKHN0YXR1cyAmIE1BQ0JfQklUKEhSRVNQKSkgeworCQkJLyoKKwkJCSAqIFRPRE86IFJlc2V0IHRoZSBoYXJkd2FyZSwgYW5kIG1heWJlIG1vdmUgdGhlIHByaW50aworCQkJICogdG8gYSBsb3dlci1wcmlvcml0eSBjb250ZXh0IGFzIHdlbGwgKHdvcmsgcXVldWU/KQorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgYnVzIGVycm9yOiBIUkVTUCBub3QgT0tcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfQorCisJCXN0YXR1cyA9IG1hY2JfcmVhZGwoYnAsIElTUik7CisJfQorCisJc3Bpbl91bmxvY2soJmJwLT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtYWNiX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWRtYV9hZGRyX3QgbWFwcGluZzsKKwl1bnNpZ25lZCBpbnQgbGVuLCBlbnRyeTsKKwl1MzIgY3RybDsKKworI2lmZGVmIERFQlVHCisJaW50IGk7CisJZGV2X2RiZygmYnAtPnBkZXYtPmRldiwKKwkJInN0YXJ0X3htaXQ6IGxlbiAldSBoZWFkICVwIGRhdGEgJXAgdGFpbCAlcCBlbmQgJXBcbiIsCisJCXNrYi0+bGVuLCBza2ItPmhlYWQsIHNrYi0+ZGF0YSwgc2tiLT50YWlsLCBza2ItPmVuZCk7CisJZGV2X2RiZygmYnAtPnBkZXYtPmRldiwKKwkJImRhdGE6Iik7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXByaW50aygiICUwMngiLCAodW5zaWduZWQgaW50KXNrYi0+ZGF0YVtpXSk7CisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisKKwlsZW4gPSBza2ItPmxlbjsKKwlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CisKKwkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciwgbG9nIGl0LiAqLworCWlmIChUWF9CVUZGU19BVkFJTChicCkgPCAxKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZicC0+bG9jayk7CisJCWRldl9lcnIoJmJwLT5wZGV2LT5kZXYsCisJCQkiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOworCQlkZXZfZGJnKCZicC0+cGRldi0+ZGV2LCAidHhfaGVhZCA9ICV1LCB0eF90YWlsID0gJXVcbiIsCisJCQlicC0+dHhfaGVhZCwgYnAtPnR4X3RhaWwpOworCQlyZXR1cm4gMTsKKwl9CisKKwllbnRyeSA9IGJwLT50eF9oZWFkOworCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsICJBbGxvY2F0ZWQgcmluZyBlbnRyeSAldVxuIiwgZW50cnkpOworCW1hcHBpbmcgPSBkbWFfbWFwX3NpbmdsZSgmYnAtPnBkZXYtPmRldiwgc2tiLT5kYXRhLAorCQkJCSBsZW4sIERNQV9UT19ERVZJQ0UpOworCWJwLT50eF9za2JbZW50cnldLnNrYiA9IHNrYjsKKwlicC0+dHhfc2tiW2VudHJ5XS5tYXBwaW5nID0gbWFwcGluZzsKKwlkZXZfZGJnKCZicC0+cGRldi0+ZGV2LCAiTWFwcGVkIHNrYiBkYXRhICVwIHRvIERNQSBhZGRyICUwOGx4XG4iLAorCQlza2ItPmRhdGEsICh1bnNpZ25lZCBsb25nKW1hcHBpbmcpOworCisJY3RybCA9IE1BQ0JfQkYoVFhfRlJNTEVOLCBsZW4pOworCWN0cmwgfD0gTUFDQl9CSVQoVFhfTEFTVCk7CisJaWYgKGVudHJ5ID09IChUWF9SSU5HX1NJWkUgLSAxKSkKKwkJY3RybCB8PSBNQUNCX0JJVChUWF9XUkFQKTsKKworCWJwLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gbWFwcGluZzsKKwlicC0+dHhfcmluZ1tlbnRyeV0uY3RybCA9IGN0cmw7CisJd21iKCk7CisKKwllbnRyeSA9IE5FWFRfVFgoZW50cnkpOworCWJwLT50eF9oZWFkID0gZW50cnk7CisKKwltYWNiX3dyaXRlbChicCwgTkNSLCBtYWNiX3JlYWRsKGJwLCBOQ1IpIHwgTUFDQl9CSVQoVFNUQVJUKSk7CisKKwlpZiAoVFhfQlVGRlNfQVZBSUwoYnApIDwgMSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJc3Bpbl91bmxvY2tfaXJxKCZicC0+bG9jayk7CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYWNiX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgbWFjYiAqYnApCit7CisJaWYgKGJwLT50eF9za2IpIHsKKwkJa2ZyZWUoYnAtPnR4X3NrYik7CisJCWJwLT50eF9za2IgPSBOVUxMOworCX0KKwlpZiAoYnAtPnJ4X3JpbmcpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIFJYX1JJTkdfQllURVMsCisJCQkJICBicC0+cnhfcmluZywgYnAtPnJ4X3JpbmdfZG1hKTsKKwkJYnAtPnJ4X3JpbmcgPSBOVUxMOworCX0KKwlpZiAoYnAtPnR4X3JpbmcpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIFRYX1JJTkdfQllURVMsCisJCQkJICBicC0+dHhfcmluZywgYnAtPnR4X3JpbmdfZG1hKTsKKwkJYnAtPnR4X3JpbmcgPSBOVUxMOworCX0KKwlpZiAoYnAtPnJ4X2J1ZmZlcnMpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsCisJCQkJICBSWF9SSU5HX1NJWkUgKiBSWF9CVUZGRVJfU0laRSwKKwkJCQkgIGJwLT5yeF9idWZmZXJzLCBicC0+cnhfYnVmZmVyc19kbWEpOworCQlicC0+cnhfYnVmZmVycyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IG1hY2JfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgbWFjYiAqYnApCit7CisJaW50IHNpemU7CisKKwlzaXplID0gVFhfUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pOworCWJwLT50eF9za2IgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghYnAtPnR4X3NrYikKKwkJZ290byBvdXRfZXJyOworCisJc2l6ZSA9IFJYX1JJTkdfQllURVM7CisJYnAtPnJ4X3JpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsCisJCQkJCSAmYnAtPnJ4X3JpbmdfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJwLT5yeF9yaW5nKQorCQlnb3RvIG91dF9lcnI7CisJZGV2X2RiZygmYnAtPnBkZXYtPmRldiwKKwkJIkFsbG9jYXRlZCBSWCByaW5nIG9mICVkIGJ5dGVzIGF0ICUwOGx4IChtYXBwZWQgJXApXG4iLAorCQlzaXplLCAodW5zaWduZWQgbG9uZylicC0+cnhfcmluZ19kbWEsIGJwLT5yeF9yaW5nKTsKKworCXNpemUgPSBUWF9SSU5HX0JZVEVTOworCWJwLT50eF9yaW5nID0gZG1hX2FsbG9jX2NvaGVyZW50KCZicC0+cGRldi0+ZGV2LCBzaXplLAorCQkJCQkgJmJwLT50eF9yaW5nX2RtYSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFicC0+dHhfcmluZykKKwkJZ290byBvdXRfZXJyOworCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsCisJCSJBbGxvY2F0ZWQgVFggcmluZyBvZiAlZCBieXRlcyBhdCAlMDhseCAobWFwcGVkICVwKVxuIiwKKwkJc2l6ZSwgKHVuc2lnbmVkIGxvbmcpYnAtPnR4X3JpbmdfZG1hLCBicC0+dHhfcmluZyk7CisKKwlzaXplID0gUlhfUklOR19TSVpFICogUlhfQlVGRkVSX1NJWkU7CisJYnAtPnJ4X2J1ZmZlcnMgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmJwLT5wZGV2LT5kZXYsIHNpemUsCisJCQkJCSAgICAmYnAtPnJ4X2J1ZmZlcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJwLT5yeF9idWZmZXJzKQorCQlnb3RvIG91dF9lcnI7CisJZGV2X2RiZygmYnAtPnBkZXYtPmRldiwKKwkJIkFsbG9jYXRlZCBSWCBidWZmZXJzIG9mICVkIGJ5dGVzIGF0ICUwOGx4IChtYXBwZWQgJXApXG4iLAorCQlzaXplLCAodW5zaWduZWQgbG9uZylicC0+cnhfYnVmZmVyc19kbWEsIGJwLT5yeF9idWZmZXJzKTsKKworCXJldHVybiAwOworCitvdXRfZXJyOgorCW1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgbWFjYl9pbml0X3JpbmdzKHN0cnVjdCBtYWNiICpicCkKK3sKKwlpbnQgaTsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlhZGRyID0gYnAtPnJ4X2J1ZmZlcnNfZG1hOworCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgeworCQlicC0+cnhfcmluZ1tpXS5hZGRyID0gYWRkcjsKKwkJYnAtPnJ4X3JpbmdbaV0uY3RybCA9IDA7CisJCWFkZHIgKz0gUlhfQlVGRkVSX1NJWkU7CisJfQorCWJwLT5yeF9yaW5nW1JYX1JJTkdfU0laRSAtIDFdLmFkZHIgfD0gTUFDQl9CSVQoUlhfV1JBUCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKKwkJYnAtPnR4X3JpbmdbaV0uYWRkciA9IDA7CisJCWJwLT50eF9yaW5nW2ldLmN0cmwgPSBNQUNCX0JJVChUWF9VU0VEKTsKKwl9CisJYnAtPnR4X3JpbmdbVFhfUklOR19TSVpFIC0gMV0uY3RybCB8PSBNQUNCX0JJVChUWF9XUkFQKTsKKworCWJwLT5yeF90YWlsID0gYnAtPnR4X2hlYWQgPSBicC0+dHhfdGFpbCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hY2JfcmVzZXRfaHcoc3RydWN0IG1hY2IgKmJwKQoreworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSB3cml0ZSBidWZmZXIgZm9yIG91cnNlbHZlcyAqLworCXdtYigpOworCisJLyoKKwkgKiBEaXNhYmxlIFJYIGFuZCBUWCAoWFhYOiBTaG91bGQgd2UgaGFsdCB0aGUgdHJhbnNtaXNzaW9uCisJICogbW9yZSBncmFjZWZ1bGx5PykKKwkgKi8KKwltYWNiX3dyaXRlbChicCwgTkNSLCAwKTsKKworCS8qIENsZWFyIHRoZSBzdGF0cyByZWdpc3RlcnMgKFhYWDogVXBkYXRlIHN0YXRzIGZpcnN0PykgKi8KKwltYWNiX3dyaXRlbChicCwgTkNSLCBNQUNCX0JJVChDTFJTVEFUKSk7CisKKwkvKiBDbGVhciBhbGwgc3RhdHVzIGZsYWdzICovCisJbWFjYl93cml0ZWwoYnAsIFRTUiwgfjBVTCk7CisJbWFjYl93cml0ZWwoYnAsIFJTUiwgfjBVTCk7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJbWFjYl93cml0ZWwoYnAsIElEUiwgfjBVTCk7CisJbWFjYl9yZWFkbChicCwgSVNSKTsKK30KKworc3RhdGljIHZvaWQgbWFjYl9pbml0X2h3KHN0cnVjdCBtYWNiICpicCkKK3sKKwl1MzIgY29uZmlnOworCisJbWFjYl9yZXNldF9odyhicCk7CisJX19tYWNiX3NldF9od2FkZHIoYnApOworCisJY29uZmlnID0gbWFjYl9yZWFkbChicCwgTkNGR1IpICYgTUFDQl9CRihDTEssIC0xTCk7CisJY29uZmlnIHw9IE1BQ0JfQklUKFBBRSk7CQkvKiBQQXVzZSBFbmFibGUgKi8KKwljb25maWcgfD0gTUFDQl9CSVQoRFJGQ1MpOwkJLyogRGlzY2FyZCBSeCBGQ1MgKi8KKwlpZiAoYnAtPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJY29uZmlnIHw9IE1BQ0JfQklUKENBRik7CS8qIENvcHkgQWxsIEZyYW1lcyAqLworCWlmICghKGJwLT5kZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkpCisJCWNvbmZpZyB8PSBNQUNCX0JJVChOQkMpOwkvKiBObyBCcm9hZENhc3QgKi8KKwltYWNiX3dyaXRlbChicCwgTkNGR1IsIGNvbmZpZyk7CisKKwkvKiBJbml0aWFsaXplIFRYIGFuZCBSWCBidWZmZXJzICovCisJbWFjYl93cml0ZWwoYnAsIFJCUVAsIGJwLT5yeF9yaW5nX2RtYSk7CisJbWFjYl93cml0ZWwoYnAsIFRCUVAsIGJwLT50eF9yaW5nX2RtYSk7CisKKwkvKiBFbmFibGUgVFggYW5kIFJYICovCisJbWFjYl93cml0ZWwoYnAsIE5DUiwgTUFDQl9CSVQoUkUpIHwgTUFDQl9CSVQoVEUpKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJbWFjYl93cml0ZWwoYnAsIElFUiwgKE1BQ0JfQklUKFJDT01QKQorCQkJICAgICAgfCBNQUNCX0JJVChSWFVCUikKKwkJCSAgICAgIHwgTUFDQl9CSVQoSVNSX1RVTkQpCisJCQkgICAgICB8IE1BQ0JfQklUKElTUl9STEUpCisJCQkgICAgICB8IE1BQ0JfQklUKFRYRVJSKQorCQkJICAgICAgfCBNQUNCX0JJVChUQ09NUCkKKwkJCSAgICAgIHwgTUFDQl9CSVQoSVNSX1JPVlIpCisJCQkgICAgICB8IE1BQ0JfQklUKEhSRVNQKSkpOworfQorCitzdGF0aWMgdm9pZCBtYWNiX2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIFNldCBzb21lIHJlYXNvbmFibGUgZGVmYXVsdCBzZXR0aW5ncyAqLworCW1hY2JfbWRpb193cml0ZShkZXYsIGJwLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAorCQkJQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfQUxMKTsKKwltYWNiX21kaW9fd3JpdGUoZGV2LCBicC0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCisJCQkoQk1DUl9TUEVFRDEwMCB8IEJNQ1JfQU5FTkFCTEUKKwkJCSB8IEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9GVUxMRFBMWCkpOworfQorCitzdGF0aWMgaW50IG1hY2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsICJvcGVuXG4iKTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJZXJyID0gbWFjYl9hbGxvY19jb25zaXN0ZW50KGJwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgRE1BIG1lbW9yeSAoZXJyb3IgJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW1hY2JfaW5pdF9yaW5ncyhicCk7CisJbWFjYl9pbml0X2h3KGJwKTsKKwltYWNiX2luaXRfcGh5KGRldik7CisKKwltYWNiX2NoZWNrX21lZGlhKGJwLCAxLCAxKTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZicC0+cGVyaW9kaWNfdGFzaywgSFopOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJmJwLT5wZXJpb2RpY190YXNrKTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOworCW1hY2JfcmVzZXRfaHcoYnApOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCW1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm1hY2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXQgPSAmYnAtPnN0YXRzOworCXN0cnVjdCBtYWNiX3N0YXRzICpod3N0YXQgPSAmYnAtPmh3X3N0YXRzOworCisJLyogQ29udmVydCBIVyBzdGF0cyBpbnRvIG5ldGRldmljZSBzdGF0cyAqLworCW5zdGF0LT5yeF9lcnJvcnMgPSAoaHdzdGF0LT5yeF9mY3NfZXJyb3JzICsKKwkJCSAgICBod3N0YXQtPnJ4X2FsaWduX2Vycm9ycyArCisJCQkgICAgaHdzdGF0LT5yeF9yZXNvdXJjZV9lcnJvcnMgKworCQkJICAgIGh3c3RhdC0+cnhfb3ZlcnJ1bnMgKworCQkJICAgIGh3c3RhdC0+cnhfb3ZlcnNpemVfcGt0cyArCisJCQkgICAgaHdzdGF0LT5yeF9qYWJiZXJzICsKKwkJCSAgICBod3N0YXQtPnJ4X3VuZGVyc2l6ZV9wa3RzICsKKwkJCSAgICBod3N0YXQtPnNxZV90ZXN0X2Vycm9ycyArCisJCQkgICAgaHdzdGF0LT5yeF9sZW5ndGhfbWlzbWF0Y2gpOworCW5zdGF0LT50eF9lcnJvcnMgPSAoaHdzdGF0LT50eF9sYXRlX2NvbHMgKworCQkJICAgIGh3c3RhdC0+dHhfZXhjZXNzaXZlX2NvbHMgKworCQkJICAgIGh3c3RhdC0+dHhfdW5kZXJydW5zICsKKwkJCSAgICBod3N0YXQtPnR4X2NhcnJpZXJfZXJyb3JzKTsKKwluc3RhdC0+Y29sbGlzaW9ucyA9IChod3N0YXQtPnR4X3NpbmdsZV9jb2xzICsKKwkJCSAgICAgaHdzdGF0LT50eF9tdWx0aXBsZV9jb2xzICsKKwkJCSAgICAgaHdzdGF0LT50eF9leGNlc3NpdmVfY29scyk7CisJbnN0YXQtPnJ4X2xlbmd0aF9lcnJvcnMgPSAoaHdzdGF0LT5yeF9vdmVyc2l6ZV9wa3RzICsKKwkJCQkgICBod3N0YXQtPnJ4X2phYmJlcnMgKworCQkJCSAgIGh3c3RhdC0+cnhfdW5kZXJzaXplX3BrdHMgKworCQkJCSAgIGh3c3RhdC0+cnhfbGVuZ3RoX21pc21hdGNoKTsKKwluc3RhdC0+cnhfb3Zlcl9lcnJvcnMgPSBod3N0YXQtPnJ4X3Jlc291cmNlX2Vycm9yczsKKwluc3RhdC0+cnhfY3JjX2Vycm9ycyA9IGh3c3RhdC0+cnhfZmNzX2Vycm9yczsKKwluc3RhdC0+cnhfZnJhbWVfZXJyb3JzID0gaHdzdGF0LT5yeF9hbGlnbl9lcnJvcnM7CisJbnN0YXQtPnJ4X2ZpZm9fZXJyb3JzID0gaHdzdGF0LT5yeF9vdmVycnVuczsKKwkvKiBYWFg6IFdoYXQgZG9lcyAibWlzc2VkIiBtZWFuPyAqLworCW5zdGF0LT50eF9hYm9ydGVkX2Vycm9ycyA9IGh3c3RhdC0+dHhfZXhjZXNzaXZlX2NvbHM7CisJbnN0YXQtPnR4X2NhcnJpZXJfZXJyb3JzID0gaHdzdGF0LT50eF9jYXJyaWVyX2Vycm9yczsKKwluc3RhdC0+dHhfZmlmb19lcnJvcnMgPSBod3N0YXQtPnR4X3VuZGVycnVuczsKKwkvKiBEb24ndCBrbm93IGFib3V0IGhlYXJ0YmVhdCBvciB3aW5kb3cgZXJyb3JzLi4uICovCisKKwlyZXR1cm4gbnN0YXQ7Cit9CisKK3N0YXRpYyBpbnQgbWFjYl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBtaWlfZXRodG9vbF9nc2V0KCZicC0+bWlpLCBjbWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1hY2Jfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gbWlpX2V0aHRvb2xfc3NldCgmYnAtPm1paSwgY21kKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFjYl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCBicC0+cGRldi0+ZGV2LmRyaXZlci0+bmFtZSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sICIkUmV2aXNpb246IDEuMTQgJCIpOworCXN0cmNweShpbmZvLT5idXNfaW5mbywgYnAtPnBkZXYtPmRldi5idXNfaWQpOworfQorCitzdGF0aWMgaW50IG1hY2JfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJmJwLT5taWkpOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG1hY2JfZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSBtYWNiX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IG1hY2Jfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBtYWNiX2dldF9kcnZpbmZvLAorCS5ud2F5X3Jlc2V0CQk9IG1hY2JfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKK307CisKK3N0YXRpYyBpbnQgbWFjYl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gZ2VuZXJpY19taWlfaW9jdGwoJmJwLT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1hY2JfbWlpX3Nob3coY29uc3Qgc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZiwKKwkJCXVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdG9fbmV0X2RldihjZCk7CisJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWludCB2YWx1ZTsKKwkJdmFsdWUgPSBtYWNiX21kaW9fcmVhZChkZXYsIGJwLT5taWkucGh5X2lkLCBhZGRyKTsKKwkJcmV0ID0gc3ByaW50ZihidWYsICIweCUwNHhcbiIsICh1aW50MTZfdCl2YWx1ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNSUlfRU5UUlkobmFtZSwgYWRkcikJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkLCBjaGFyICpidWYpCVwKK3sJCQkJCQkJCVwKKwlyZXR1cm4gbWFjYl9taWlfc2hvdyhjZCwgYnVmLCBhZGRyKTsJCQlcCit9CQkJCQkJCQlcCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI25hbWUsIE5VTEwpCisKK01JSV9FTlRSWShibWNyLCBNSUlfQk1DUik7CitNSUlfRU5UUlkoYm1zciwgTUlJX0JNU1IpOworTUlJX0VOVFJZKHBoeXNpZDEsIE1JSV9QSFlTSUQxKTsKK01JSV9FTlRSWShwaHlzaWQyLCBNSUlfUEhZU0lEMik7CitNSUlfRU5UUlkoYWR2ZXJ0aXNlLCBNSUlfQURWRVJUSVNFKTsKK01JSV9FTlRSWShscGEsIE1JSV9MUEEpOworTUlJX0VOVFJZKGV4cGFuc2lvbiwgTUlJX0VYUEFOU0lPTik7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYWNiX21paV9hdHRyc1tdID0geworCSZjbGFzc19kZXZpY2VfYXR0cl9ibWNyLmF0dHIsCisJJmNsYXNzX2RldmljZV9hdHRyX2Jtc3IuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfcGh5c2lkMS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9waHlzaWQyLmF0dHIsCisJJmNsYXNzX2RldmljZV9hdHRyX2FkdmVydGlzZS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9scGEuYXR0ciwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfZXhwYW5zaW9uLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1hY2JfbWlpX2dyb3VwID0geworCS5uYW1lCT0gIm1paSIsCisJLmF0dHJzCT0gbWFjYl9taWlfYXR0cnMsCit9OworCitzdGF0aWMgdm9pZCBtYWNiX3VucmVnaXN0ZXJfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK3sKKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSAmbmV0LT5jbGFzc19kZXY7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJm1hY2JfbWlpX2dyb3VwKTsKK30KKworc3RhdGljIGludCBtYWNiX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2ID0gJm5ldC0+Y2xhc3NfZGV2OworCWludCByZXQ7CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsYXNzX2Rldi0+a29iaiwgJm1hY2JfbWlpX2dyb3VwKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6IHN5c2ZzIG1paSBhdHRyaWJ1dGUgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICBuZXQtPm5hbWUsIHJldCk7CisJcmV0dXJuIHJldDsKK30KK3N0YXRpYyBpbnQgX19kZXZpbml0IG1hY2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtYWNiICpicDsKKwl1bnNpZ25lZCBsb25nIHBjbGtfaHo7CisJdTMyIGNvbmZpZzsKKwlpbnQgZXJyID0gLUVOWElPOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1taW8gcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwllcnIgPSAtRU5PTUVNOworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqYnApKTsKKwlpZiAoIWRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJldGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKKworCS8qIFRPRE86IEFjdHVhbGx5LCB3ZSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgZmVhdHVyZXMuLi4gKi8KKwlkZXYtPmZlYXR1cmVzIHw9IDA7CisKKwlicCA9IG5ldGRldl9wcml2KGRldik7CisJYnAtPnBkZXYgPSBwZGV2OworCWJwLT5kZXYgPSBkZXY7CisKKwlzcGluX2xvY2tfaW5pdCgmYnAtPmxvY2spOworCisJYnAtPnBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihicC0+cGNsaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBwY2xrXG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfZGV2OworCX0KKwlicC0+aGNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImhjbGsiKTsKKwlpZiAoSVNfRVJSKGJwLT5oY2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGhjbGtcbiIpOworCQlnb3RvIGVycl9vdXRfcHV0X3BjbGs7CisJfQorCisJY2xrX2VuYWJsZShicC0+cGNsayk7CisJY2xrX2VuYWJsZShicC0+aGNsayk7CisKKwlicC0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJaWYgKCFicC0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycywgYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfY2xvY2tzOworCX0KKworCWRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgbWFjYl9pbnRlcnJ1cHQsIFNBX1NBTVBMRV9SQU5ET00sCisJCQkgIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBVbmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgKGVycm9yICVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIGVycik7CisJCWdvdG8gZXJyX291dF9pb3VubWFwOworCX0KKworCWRldi0+b3BlbiA9IG1hY2Jfb3BlbjsKKwlkZXYtPnN0b3AgPSBtYWNiX2Nsb3NlOworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbWFjYl9zdGFydF94bWl0OworCWRldi0+Z2V0X3N0YXRzID0gbWFjYl9nZXRfc3RhdHM7CisJZGV2LT5kb19pb2N0bCA9IG1hY2JfaW9jdGw7CisJZGV2LT5wb2xsID0gbWFjYl9wb2xsOworCWRldi0+d2VpZ2h0ID0gNjQ7CisJZGV2LT5ldGh0b29sX29wcyA9ICZtYWNiX2V0aHRvb2xfb3BzOworCisJZGV2LT5iYXNlX2FkZHIgPSByZWdzLT5zdGFydDsKKworCUlOSVRfV09SSygmYnAtPnBlcmlvZGljX3Rhc2ssIG1hY2JfcGVyaW9kaWNfdGFzaywgYnApOworCW11dGV4X2luaXQoJmJwLT5tZGlvX211dGV4KTsKKwlpbml0X2NvbXBsZXRpb24oJmJwLT5tZGlvX2NvbXBsZXRlKTsKKworCS8qIFNldCBNSUkgbWFuYWdlbWVudCBjbG9jayBkaXZpZGVyICovCisJcGNsa19oeiA9IGNsa19nZXRfcmF0ZShicC0+cGNsayk7CisJaWYgKHBjbGtfaHogPD0gMjAwMDAwMDApCisJCWNvbmZpZyA9IE1BQ0JfQkYoQ0xLLCBNQUNCX0NMS19ESVY4KTsKKwllbHNlIGlmIChwY2xrX2h6IDw9IDQwMDAwMDAwKQorCQljb25maWcgPSBNQUNCX0JGKENMSywgTUFDQl9DTEtfRElWMTYpOworCWVsc2UgaWYgKHBjbGtfaHogPD0gODAwMDAwMDApCisJCWNvbmZpZyA9IE1BQ0JfQkYoQ0xLLCBNQUNCX0NMS19ESVYzMik7CisJZWxzZQorCQljb25maWcgPSBNQUNCX0JGKENMSywgTUFDQl9DTEtfRElWNjQpOworCW1hY2Jfd3JpdGVsKGJwLCBOQ0ZHUiwgY29uZmlnKTsKKworCWJwLT5taWkuZGV2ID0gZGV2OworCWJwLT5taWkubWRpb19yZWFkID0gbWFjYl9tZGlvX3JlYWQ7CisJYnAtPm1paS5tZGlvX3dyaXRlID0gbWFjYl9tZGlvX3dyaXRlOworCWJwLT5taWkucGh5X2lkX21hc2sgPSAweDFmOworCWJwLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKKworCW1hY2JfZ2V0X2h3YWRkcihicCk7CisJZXJyID0gbWFjYl9waHlfcHJvYmUoYnApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGRldGVjdCBQSFksIGFib3J0aW5nLlxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX2lycTsKKwl9CisKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YSAmJiBwZGF0YS0+aXNfcm1paSkKKwkJbWFjYl93cml0ZWwoYnAsIFVTUklPLCAwKTsKKwllbHNlCisJCW1hY2Jfd3JpdGVsKGJwLCBVU1JJTywgTUFDQl9CSVQoTUlJKSk7CisKKwlicC0+dHhfcGVuZGluZyA9IERFRl9UWF9SSU5HX1BFTkRJTkc7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKworCW1hY2JfcmVnaXN0ZXJfc3lzZnMoZGV2KTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdG1lbCBNQUNCIGF0IDB4JTA4bHggaXJxICVkICIKKwkgICAgICAgIiglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeClcbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIGRldi0+aXJxLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfaXJxOgorCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworZXJyX291dF9pb3VubWFwOgorCWlvdW5tYXAoYnAtPnJlZ3MpOworZXJyX291dF9kaXNhYmxlX2Nsb2NrczoKKwljbGtfZGlzYWJsZShicC0+aGNsayk7CisJY2xrX2Rpc2FibGUoYnAtPnBjbGspOworCWNsa19wdXQoYnAtPmhjbGspOworZXJyX291dF9wdXRfcGNsazoKKwljbGtfcHV0KGJwLT5wY2xrKTsKK2Vycl9vdXRfZnJlZV9kZXY6CisJZnJlZV9uZXRkZXYoZGV2KTsKK2Vycl9vdXQ6CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWFjYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBtYWNiICpicDsKKworCWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGRldikgeworCQlicCA9IG5ldGRldl9wcml2KGRldik7CisJCW1hY2JfdW5yZWdpc3Rlcl9zeXNmcyhkZXYpOworCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJaW91bm1hcChicC0+cmVncyk7CisJCWNsa19kaXNhYmxlKGJwLT5oY2xrKTsKKwkJY2xrX2Rpc2FibGUoYnAtPnBjbGspOworCQljbGtfcHV0KGJwLT5oY2xrKTsKKwkJY2xrX3B1dChicC0+cGNsayk7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWFjYl9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1hY2JfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gIm1hY2IiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYWNiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYWNiX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtYWNiX2luaXQpOworbW9kdWxlX2V4aXQobWFjYl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdG1lbCBNQUNCIEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNiLmggYi9kcml2ZXJzL25ldC9tYWNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyNTNkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21hY2IuaApAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIEF0bWVsIE1BQ0IgRXRoZXJuZXQgQ29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX01BQ0JfSAorI2RlZmluZSBfTUFDQl9ICisKKy8qIE1BQ0IgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBNQUNCX05DUgkJCQkweDAwMDAKKyNkZWZpbmUgTUFDQl9OQ0ZHUgkJCQkweDAwMDQKKyNkZWZpbmUgTUFDQl9OU1IJCQkJMHgwMDA4CisjZGVmaW5lIE1BQ0JfVFNSCQkJCTB4MDAxNAorI2RlZmluZSBNQUNCX1JCUVAJCQkJMHgwMDE4CisjZGVmaW5lIE1BQ0JfVEJRUAkJCQkweDAwMWMKKyNkZWZpbmUgTUFDQl9SU1IJCQkJMHgwMDIwCisjZGVmaW5lIE1BQ0JfSVNSCQkJCTB4MDAyNAorI2RlZmluZSBNQUNCX0lFUgkJCQkweDAwMjgKKyNkZWZpbmUgTUFDQl9JRFIJCQkJMHgwMDJjCisjZGVmaW5lIE1BQ0JfSU1SCQkJCTB4MDAzMAorI2RlZmluZSBNQUNCX01BTgkJCQkweDAwMzQKKyNkZWZpbmUgTUFDQl9QVFIJCQkJMHgwMDM4CisjZGVmaW5lIE1BQ0JfUEZSCQkJCTB4MDAzYworI2RlZmluZSBNQUNCX0ZUTwkJCQkweDAwNDAKKyNkZWZpbmUgTUFDQl9TQ0YJCQkJMHgwMDQ0CisjZGVmaW5lIE1BQ0JfTUNGCQkJCTB4MDA0OAorI2RlZmluZSBNQUNCX0ZSTwkJCQkweDAwNGMKKyNkZWZpbmUgTUFDQl9GQ1NFCQkJCTB4MDA1MAorI2RlZmluZSBNQUNCX0FMRQkJCQkweDAwNTQKKyNkZWZpbmUgTUFDQl9EVEYJCQkJMHgwMDU4CisjZGVmaW5lIE1BQ0JfTENPTAkJCQkweDAwNWMKKyNkZWZpbmUgTUFDQl9FWENPTAkJCQkweDAwNjAKKyNkZWZpbmUgTUFDQl9UVU5ECQkJCTB4MDA2NAorI2RlZmluZSBNQUNCX0NTRQkJCQkweDAwNjgKKyNkZWZpbmUgTUFDQl9SUkUJCQkJMHgwMDZjCisjZGVmaW5lIE1BQ0JfUk9WUgkJCQkweDAwNzAKKyNkZWZpbmUgTUFDQl9SU0UJCQkJMHgwMDc0CisjZGVmaW5lIE1BQ0JfRUxFCQkJCTB4MDA3OAorI2RlZmluZSBNQUNCX1JKQQkJCQkweDAwN2MKKyNkZWZpbmUgTUFDQl9VU0YJCQkJMHgwMDgwCisjZGVmaW5lIE1BQ0JfU1RFCQkJCTB4MDA4NAorI2RlZmluZSBNQUNCX1JMRQkJCQkweDAwODgKKyNkZWZpbmUgTUFDQl9UUEYJCQkJMHgwMDhjCisjZGVmaW5lIE1BQ0JfSFJCCQkJCTB4MDA5MAorI2RlZmluZSBNQUNCX0hSVAkJCQkweDAwOTQKKyNkZWZpbmUgTUFDQl9TQTFCCQkJCTB4MDA5OAorI2RlZmluZSBNQUNCX1NBMVQJCQkJMHgwMDljCisjZGVmaW5lIE1BQ0JfU0EyQgkJCQkweDAwYTAKKyNkZWZpbmUgTUFDQl9TQTJUCQkJCTB4MDBhNAorI2RlZmluZSBNQUNCX1NBM0IJCQkJMHgwMGE4CisjZGVmaW5lIE1BQ0JfU0EzVAkJCQkweDAwYWMKKyNkZWZpbmUgTUFDQl9TQTRCCQkJCTB4MDBiMAorI2RlZmluZSBNQUNCX1NBNFQJCQkJMHgwMGI0CisjZGVmaW5lIE1BQ0JfVElECQkJCTB4MDBiOAorI2RlZmluZSBNQUNCX1RQUQkJCQkweDAwYmMKKyNkZWZpbmUgTUFDQl9VU1JJTwkJCQkweDAwYzAKKyNkZWZpbmUgTUFDQl9XT0wJCQkJMHgwMGM0CisKKy8qIEJpdGZpZWxkcyBpbiBOQ1IgKi8KKyNkZWZpbmUgTUFDQl9MQl9PRkZTRVQJCQkJMAorI2RlZmluZSBNQUNCX0xCX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX0xMQl9PRkZTRVQJCQkJMQorI2RlZmluZSBNQUNCX0xMQl9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9SRV9PRkZTRVQJCQkJMgorI2RlZmluZSBNQUNCX1JFX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1RFX09GRlNFVAkJCQkzCisjZGVmaW5lIE1BQ0JfVEVfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfTVBFX09GRlNFVAkJCQk0CisjZGVmaW5lIE1BQ0JfTVBFX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX0NMUlNUQVRfT0ZGU0VUCQkJNQorI2RlZmluZSBNQUNCX0NMUlNUQVRfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9JTkNTVEFUX09GRlNFVAkJCTYKKyNkZWZpbmUgTUFDQl9JTkNTVEFUX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfV0VTVEFUX09GRlNFVAkJCTcKKyNkZWZpbmUgTUFDQl9XRVNUQVRfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9CUF9PRkZTRVQJCQkJOAorI2RlZmluZSBNQUNCX0JQX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1RTVEFSVF9PRkZTRVQJCQk5CisjZGVmaW5lIE1BQ0JfVFNUQVJUX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfVEhBTFRfT0ZGU0VUCQkJMTAKKyNkZWZpbmUgTUFDQl9USEFMVF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9OQ1JfVFBGX09GRlNFVAkJCTExCisjZGVmaW5lIE1BQ0JfTkNSX1RQRl9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1RaUV9PRkZTRVQJCQkJMTIKKyNkZWZpbmUgTUFDQl9UWlFfU0laRQkJCQkxCisKKy8qIEJpdGZpZWxkcyBpbiBOQ0ZHUiAqLworI2RlZmluZSBNQUNCX1NQRF9PRkZTRVQJCQkJMAorI2RlZmluZSBNQUNCX1NQRF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9GRF9PRkZTRVQJCQkJMQorI2RlZmluZSBNQUNCX0ZEX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX0JJVF9SQVRFX09GRlNFVAkJCTIKKyNkZWZpbmUgTUFDQl9CSVRfUkFURV9TSVpFCQkJMQorI2RlZmluZSBNQUNCX0pGUkFNRV9PRkZTRVQJCQkzCisjZGVmaW5lIE1BQ0JfSkZSQU1FX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfQ0FGX09GRlNFVAkJCQk0CisjZGVmaW5lIE1BQ0JfQ0FGX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX05CQ19PRkZTRVQJCQkJNQorI2RlZmluZSBNQUNCX05CQ19TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9OQ0ZHUl9NVElfT0ZGU0VUCQkJNgorI2RlZmluZSBNQUNCX05DRkdSX01USV9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1VOSV9PRkZTRVQJCQkJNworI2RlZmluZSBNQUNCX1VOSV9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9CSUdfT0ZGU0VUCQkJCTgKKyNkZWZpbmUgTUFDQl9CSUdfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfRUFFX09GRlNFVAkJCQk5CisjZGVmaW5lIE1BQ0JfRUFFX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX0NMS19PRkZTRVQJCQkJMTAKKyNkZWZpbmUgTUFDQl9DTEtfU0laRQkJCQkyCisjZGVmaW5lIE1BQ0JfUlRZX09GRlNFVAkJCQkxMgorI2RlZmluZSBNQUNCX1JUWV9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9QQUVfT0ZGU0VUCQkJCTEzCisjZGVmaW5lIE1BQ0JfUEFFX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1JCT0ZfT0ZGU0VUCQkJMTQKKyNkZWZpbmUgTUFDQl9SQk9GX1NJWkUJCQkJMgorI2RlZmluZSBNQUNCX1JMQ0VfT0ZGU0VUCQkJMTYKKyNkZWZpbmUgTUFDQl9STENFX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX0RSRkNTX09GRlNFVAkJCTE3CisjZGVmaW5lIE1BQ0JfRFJGQ1NfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfRUZSSERfT0ZGU0VUCQkJMTgKKyNkZWZpbmUgTUFDQl9FRlJIRF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9JUlhGQ1NfT0ZGU0VUCQkJMTkKKyNkZWZpbmUgTUFDQl9JUlhGQ1NfU0laRQkJCTEKKworLyogQml0ZmllbGRzIGluIE5TUiAqLworI2RlZmluZSBNQUNCX05TUl9MSU5LX09GRlNFVAkJCTAKKyNkZWZpbmUgTUFDQl9OU1JfTElOS19TSVpFCQkJMQorI2RlZmluZSBNQUNCX01ESU9fT0ZGU0VUCQkJMQorI2RlZmluZSBNQUNCX01ESU9fU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfSURMRV9PRkZTRVQJCQkyCisjZGVmaW5lIE1BQ0JfSURMRV9TSVpFCQkJCTEKKworLyogQml0ZmllbGRzIGluIFRTUiAqLworI2RlZmluZSBNQUNCX1VCUl9PRkZTRVQJCQkJMAorI2RlZmluZSBNQUNCX1VCUl9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9DT0xfT0ZGU0VUCQkJCTEKKyNkZWZpbmUgTUFDQl9DT0xfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfVFNSX1JMRV9PRkZTRVQJCQkyCisjZGVmaW5lIE1BQ0JfVFNSX1JMRV9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1RHT19PRkZTRVQJCQkJMworI2RlZmluZSBNQUNCX1RHT19TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9CRVhfT0ZGU0VUCQkJCTQKKyNkZWZpbmUgTUFDQl9CRVhfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfQ09NUF9PRkZTRVQJCQk1CisjZGVmaW5lIE1BQ0JfQ09NUF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9VTkRfT0ZGU0VUCQkJCTYKKyNkZWZpbmUgTUFDQl9VTkRfU0laRQkJCQkxCisKKy8qIEJpdGZpZWxkcyBpbiBSU1IgKi8KKyNkZWZpbmUgTUFDQl9CTkFfT0ZGU0VUCQkJCTAKKyNkZWZpbmUgTUFDQl9CTkFfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfUkVDX09GRlNFVAkJCQkxCisjZGVmaW5lIE1BQ0JfUkVDX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX09WUl9PRkZTRVQJCQkJMgorI2RlZmluZSBNQUNCX09WUl9TSVpFCQkJCTEKKworLyogQml0ZmllbGRzIGluIElTUi9JRVIvSURSL0lNUiAqLworI2RlZmluZSBNQUNCX01GRF9PRkZTRVQJCQkJMAorI2RlZmluZSBNQUNCX01GRF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9SQ09NUF9PRkZTRVQJCQkxCisjZGVmaW5lIE1BQ0JfUkNPTVBfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfUlhVQlJfT0ZGU0VUCQkJMgorI2RlZmluZSBNQUNCX1JYVUJSX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1RYVUJSX09GRlNFVAkJCTMKKyNkZWZpbmUgTUFDQl9UWFVCUl9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9JU1JfVFVORF9PRkZTRVQJCQk0CisjZGVmaW5lIE1BQ0JfSVNSX1RVTkRfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9JU1JfUkxFX09GRlNFVAkJCTUKKyNkZWZpbmUgTUFDQl9JU1JfUkxFX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfVFhFUlJfT0ZGU0VUCQkJNgorI2RlZmluZSBNQUNCX1RYRVJSX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1RDT01QX09GRlNFVAkJCTcKKyNkZWZpbmUgTUFDQl9UQ09NUF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9JU1JfTElOS19PRkZTRVQJCQk5CisjZGVmaW5lIE1BQ0JfSVNSX0xJTktfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9JU1JfUk9WUl9PRkZTRVQJCQkxMAorI2RlZmluZSBNQUNCX0lTUl9ST1ZSX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfSFJFU1BfT0ZGU0VUCQkJMTEKKyNkZWZpbmUgTUFDQl9IUkVTUF9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9QRlJfT0ZGU0VUCQkJCTEyCisjZGVmaW5lIE1BQ0JfUEZSX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1BUWl9PRkZTRVQJCQkJMTMKKyNkZWZpbmUgTUFDQl9QVFpfU0laRQkJCQkxCisKKy8qIEJpdGZpZWxkcyBpbiBNQU4gKi8KKyNkZWZpbmUgTUFDQl9EQVRBX09GRlNFVAkJCTAKKyNkZWZpbmUgTUFDQl9EQVRBX1NJWkUJCQkJMTYKKyNkZWZpbmUgTUFDQl9DT0RFX09GRlNFVAkJCTE2CisjZGVmaW5lIE1BQ0JfQ09ERV9TSVpFCQkJCTIKKyNkZWZpbmUgTUFDQl9SRUdBX09GRlNFVAkJCTE4CisjZGVmaW5lIE1BQ0JfUkVHQV9TSVpFCQkJCTUKKyNkZWZpbmUgTUFDQl9QSFlBX09GRlNFVAkJCTIzCisjZGVmaW5lIE1BQ0JfUEhZQV9TSVpFCQkJCTUKKyNkZWZpbmUgTUFDQl9SV19PRkZTRVQJCQkJMjgKKyNkZWZpbmUgTUFDQl9SV19TSVpFCQkJCTIKKyNkZWZpbmUgTUFDQl9TT0ZfT0ZGU0VUCQkJCTMwCisjZGVmaW5lIE1BQ0JfU09GX1NJWkUJCQkJMgorCisvKiBCaXRmaWVsZHMgaW4gVVNSSU8gKi8KKyNkZWZpbmUgTUFDQl9NSUlfT0ZGU0VUCQkJCTAKKyNkZWZpbmUgTUFDQl9NSUlfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfRUFNX09GRlNFVAkJCQkxCisjZGVmaW5lIE1BQ0JfRUFNX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1RYX1BBVVNFX09GRlNFVAkJCTIKKyNkZWZpbmUgTUFDQl9UWF9QQVVTRV9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1RYX1BBVVNFX1pFUk9fT0ZGU0VUCQkzCisjZGVmaW5lIE1BQ0JfVFhfUEFVU0VfWkVST19TSVpFCQkJMQorCisvKiBCaXRmaWVsZHMgaW4gV09MICovCisjZGVmaW5lIE1BQ0JfSVBfT0ZGU0VUCQkJCTAKKyNkZWZpbmUgTUFDQl9JUF9TSVpFCQkJCTE2CisjZGVmaW5lIE1BQ0JfTUFHX09GRlNFVAkJCQkxNgorI2RlZmluZSBNQUNCX01BR19TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9BUlBfT0ZGU0VUCQkJCTE3CisjZGVmaW5lIE1BQ0JfQVJQX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1NBMV9PRkZTRVQJCQkJMTgKKyNkZWZpbmUgTUFDQl9TQTFfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfV09MX01USV9PRkZTRVQJCQkxOQorI2RlZmluZSBNQUNCX1dPTF9NVElfU0laRQkJCTEKKworLyogQ29uc3RhbnRzIGZvciBDTEsgKi8KKyNkZWZpbmUgTUFDQl9DTEtfRElWOAkJCQkwCisjZGVmaW5lIE1BQ0JfQ0xLX0RJVjE2CQkJCTEKKyNkZWZpbmUgTUFDQl9DTEtfRElWMzIJCQkJMgorI2RlZmluZSBNQUNCX0NMS19ESVY2NAkJCQkzCisKKy8qIENvbnN0YW50cyBmb3IgTUFOIHJlZ2lzdGVyICovCisjZGVmaW5lIE1BQ0JfTUFOX1NPRgkJCQkxCisjZGVmaW5lIE1BQ0JfTUFOX1dSSVRFCQkJCTEKKyNkZWZpbmUgTUFDQl9NQU5fUkVBRAkJCQkyCisjZGVmaW5lIE1BQ0JfTUFOX0NPREUJCQkJMgorCisvKiBCaXQgbWFuaXB1bGF0aW9uIG1hY3JvcyAqLworI2RlZmluZSBNQUNCX0JJVChuYW1lKQkJCQkJXAorCSgxIDw8IE1BQ0JfIyNuYW1lIyNfT0ZGU0VUKQorI2RlZmluZSBNQUNCX0JGKG5hbWUsdmFsdWUpCQkJCVwKKwkoKCh2YWx1ZSkgJiAoKDEgPDwgTUFDQl8jI25hbWUjI19TSVpFKSAtIDEpKQlcCisJIDw8IE1BQ0JfIyNuYW1lIyNfT0ZGU0VUKQorI2RlZmluZSBNQUNCX0JGRVhUKG5hbWUsdmFsdWUpXAorCSgoKHZhbHVlKSA+PiBNQUNCXyMjbmFtZSMjX09GRlNFVCkJCVwKKwkgJiAoKDEgPDwgTUFDQl8jI25hbWUjI19TSVpFKSAtIDEpKQorI2RlZmluZSBNQUNCX0JGSU5TKG5hbWUsdmFsdWUsb2xkKQkJCVwKKwkoKChvbGQpICYgfigoKDEgPDwgTUFDQl8jI25hbWUjI19TSVpFKSAtIDEpCVwKKwkJICAgIDw8IE1BQ0JfIyNuYW1lIyNfT0ZGU0VUKSkJCVwKKwkgfCBNQUNCX0JGKG5hbWUsdmFsdWUpKQorCisvKiBSZWdpc3RlciBhY2Nlc3MgbWFjcm9zICovCisjZGVmaW5lIG1hY2JfcmVhZGwocG9ydCxyZWcpCQkJCVwKKwlyZWFkbCgocG9ydCktPnJlZ3MgKyBNQUNCXyMjcmVnKQorI2RlZmluZSBtYWNiX3dyaXRlbChwb3J0LHJlZyx2YWx1ZSkJCQlcCisJd3JpdGVsKCh2YWx1ZSksIChwb3J0KS0+cmVncyArIE1BQ0JfIyNyZWcpCisKK3N0cnVjdCBkbWFfZGVzYyB7CisJdTMyCWFkZHI7CisJdTMyCWN0cmw7Cit9OworCisvKiBETUEgZGVzY3JpcHRvciBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgTUFDQl9SWF9VU0VEX09GRlNFVAkJCTAKKyNkZWZpbmUgTUFDQl9SWF9VU0VEX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfUlhfV1JBUF9PRkZTRVQJCQkxCisjZGVmaW5lIE1BQ0JfUlhfV1JBUF9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX1dBRERSX09GRlNFVAkJCTIKKyNkZWZpbmUgTUFDQl9SWF9XQUREUl9TSVpFCQkJMzAKKworI2RlZmluZSBNQUNCX1JYX0ZSTUxFTl9PRkZTRVQJCQkwCisjZGVmaW5lIE1BQ0JfUlhfRlJNTEVOX1NJWkUJCQkxMgorI2RlZmluZSBNQUNCX1JYX09GRlNFVF9PRkZTRVQJCQkxMgorI2RlZmluZSBNQUNCX1JYX09GRlNFVF9TSVpFCQkJMgorI2RlZmluZSBNQUNCX1JYX1NPRl9PRkZTRVQJCQkxNAorI2RlZmluZSBNQUNCX1JYX1NPRl9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX0VPRl9PRkZTRVQJCQkxNQorI2RlZmluZSBNQUNCX1JYX0VPRl9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX0NGSV9PRkZTRVQJCQkxNgorI2RlZmluZSBNQUNCX1JYX0NGSV9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX1ZMQU5fUFJJX09GRlNFVAkJCTE3CisjZGVmaW5lIE1BQ0JfUlhfVkxBTl9QUklfU0laRQkJCTMKKyNkZWZpbmUgTUFDQl9SWF9QUklfVEFHX09GRlNFVAkJCTIwCisjZGVmaW5lIE1BQ0JfUlhfUFJJX1RBR19TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX1ZMQU5fVEFHX09GRlNFVAkJCTIxCisjZGVmaW5lIE1BQ0JfUlhfVkxBTl9UQUdfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9SWF9UWVBFSURfTUFUQ0hfT0ZGU0VUCQkyMgorI2RlZmluZSBNQUNCX1JYX1RZUEVJRF9NQVRDSF9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfUlhfU0E0X01BVENIX09GRlNFVAkJMjMKKyNkZWZpbmUgTUFDQl9SWF9TQTRfTUFUQ0hfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9SWF9TQTNfTUFUQ0hfT0ZGU0VUCQkyNAorI2RlZmluZSBNQUNCX1JYX1NBM19NQVRDSF9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX1NBMl9NQVRDSF9PRkZTRVQJCTI1CisjZGVmaW5lIE1BQ0JfUlhfU0EyX01BVENIX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfUlhfU0ExX01BVENIX09GRlNFVAkJMjYKKyNkZWZpbmUgTUFDQl9SWF9TQTFfTUFUQ0hfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9SWF9FWFRfTUFUQ0hfT0ZGU0VUCQkyOAorI2RlZmluZSBNQUNCX1JYX0VYVF9NQVRDSF9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1JYX1VIQVNIX01BVENIX09GRlNFVAkJMjkKKyNkZWZpbmUgTUFDQl9SWF9VSEFTSF9NQVRDSF9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfUlhfTUhBU0hfTUFUQ0hfT0ZGU0VUCQkzMAorI2RlZmluZSBNQUNCX1JYX01IQVNIX01BVENIX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9SWF9CUk9BRENBU1RfT0ZGU0VUCQkzMQorI2RlZmluZSBNQUNCX1JYX0JST0FEQ0FTVF9TSVpFCQkJMQorCisjZGVmaW5lIE1BQ0JfVFhfRlJNTEVOX09GRlNFVAkJCTAKKyNkZWZpbmUgTUFDQl9UWF9GUk1MRU5fU0laRQkJCTExCisjZGVmaW5lIE1BQ0JfVFhfTEFTVF9PRkZTRVQJCQkxNQorI2RlZmluZSBNQUNCX1RYX0xBU1RfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9UWF9OT0NSQ19PRkZTRVQJCQkxNgorI2RlZmluZSBNQUNCX1RYX05PQ1JDX1NJWkUJCQkxCisjZGVmaW5lIE1BQ0JfVFhfQlVGX0VYSEFVU1RFRF9PRkZTRVQJCTI3CisjZGVmaW5lIE1BQ0JfVFhfQlVGX0VYSEFVU1RFRF9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfVFhfVU5ERVJSVU5fT0ZGU0VUCQkJMjgKKyNkZWZpbmUgTUFDQl9UWF9VTkRFUlJVTl9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1RYX0VSUk9SX09GRlNFVAkJCTI5CisjZGVmaW5lIE1BQ0JfVFhfRVJST1JfU0laRQkJCTEKKyNkZWZpbmUgTUFDQl9UWF9XUkFQX09GRlNFVAkJCTMwCisjZGVmaW5lIE1BQ0JfVFhfV1JBUF9TSVpFCQkJMQorI2RlZmluZSBNQUNCX1RYX1VTRURfT0ZGU0VUCQkJMzEKKyNkZWZpbmUgTUFDQl9UWF9VU0VEX1NJWkUJCQkxCisKK3N0cnVjdCByaW5nX2luZm8geworCXN0cnVjdCBza19idWZmCQkqc2tiOworCWRtYV9hZGRyX3QJCW1hcHBpbmc7Cit9OworCisvKgorICogSGFyZHdhcmUtY29sbGVjdGVkIHN0YXRpc3RpY3MuIFVzZWQgd2hlbiB1cGRhdGluZyB0aGUgbmV0d29yaworICogZGV2aWNlIHN0YXRzIGJ5IGEgcGVyaW9kaWMgdGltZXIuCisgKi8KK3N0cnVjdCBtYWNiX3N0YXRzIHsKKwl1MzIJcnhfcGF1c2VfZnJhbWVzOworCXUzMgl0eF9vazsKKwl1MzIJdHhfc2luZ2xlX2NvbHM7CisJdTMyCXR4X211bHRpcGxlX2NvbHM7CisJdTMyCXJ4X29rOworCXUzMglyeF9mY3NfZXJyb3JzOworCXUzMglyeF9hbGlnbl9lcnJvcnM7CisJdTMyCXR4X2RlZmVycmVkOworCXUzMgl0eF9sYXRlX2NvbHM7CisJdTMyCXR4X2V4Y2Vzc2l2ZV9jb2xzOworCXUzMgl0eF91bmRlcnJ1bnM7CisJdTMyCXR4X2NhcnJpZXJfZXJyb3JzOworCXUzMglyeF9yZXNvdXJjZV9lcnJvcnM7CisJdTMyCXJ4X292ZXJydW5zOworCXUzMglyeF9zeW1ib2xfZXJyb3JzOworCXUzMglyeF9vdmVyc2l6ZV9wa3RzOworCXUzMglyeF9qYWJiZXJzOworCXUzMglyeF91bmRlcnNpemVfcGt0czsKKwl1MzIJc3FlX3Rlc3RfZXJyb3JzOworCXUzMglyeF9sZW5ndGhfbWlzbWF0Y2g7CisJdTMyCXR4X3BhdXNlX2ZyYW1lczsKK307CisKK3N0cnVjdCBtYWNiIHsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCisJdW5zaWduZWQgaW50CQlyeF90YWlsOworCXN0cnVjdCBkbWFfZGVzYwkJKnJ4X3Jpbmc7CisJdm9pZAkJCSpyeF9idWZmZXJzOworCisJdW5zaWduZWQgaW50CQl0eF9oZWFkLCB0eF90YWlsOworCXN0cnVjdCBkbWFfZGVzYwkJKnR4X3Jpbmc7CisJc3RydWN0IHJpbmdfaW5mbwkqdHhfc2tiOworCisJc3BpbmxvY2tfdAkJbG9jazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCXN0cnVjdCBjbGsJCSpwY2xrOworCXN0cnVjdCBjbGsJCSpoY2xrOworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisJc3RydWN0IG1hY2Jfc3RhdHMJaHdfc3RhdHM7CisKKwlkbWFfYWRkcl90CQlyeF9yaW5nX2RtYTsKKwlkbWFfYWRkcl90CQl0eF9yaW5nX2RtYTsKKwlkbWFfYWRkcl90CQlyeF9idWZmZXJzX2RtYTsKKworCXVuc2lnbmVkIGludAkJcnhfcGVuZGluZywgdHhfcGVuZGluZzsKKworCXN0cnVjdCB3b3JrX3N0cnVjdAlwZXJpb2RpY190YXNrOworCisJc3RydWN0IG11dGV4CQltZGlvX211dGV4OworCXN0cnVjdCBjb21wbGV0aW9uCW1kaW9fY29tcGxldGU7CisJc3RydWN0IG1paV9pZl9pbmZvCW1paTsKK307CisKKyNlbmRpZiAvKiBfTUFDQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZXRoLmMgYi9kcml2ZXJzL25ldC9tZXRoLmMKaW5kZXggYzFhYTYwYi4uZTFkOTdjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L21ldGguYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGFzbS9pcDMyL2lwMzJfaW50cy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggODA2MDgxYi4uMzYzNTBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xOTU1LDcgKzE5NTUsNyBAQAogCWZsYWdzID0gKE1YR0VGV19GTEFHU19OT19UU08gfCBNWEdFRldfRkxBR1NfRklSU1QpOwogCWlmIChsaWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkpIHsKIAkJY2tzdW1fb2Zmc2V0ID0gKHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpOwotCQlwc2V1ZG9faGRyX29mZnNldCA9IChza2ItPmgucmF3ICsgc2tiLT5jc3VtKSAtIHNrYi0+ZGF0YTsKKwkJcHNldWRvX2hkcl9vZmZzZXQgPSBja3N1bV9vZmZzZXQgKyBza2ItPmNzdW1fb2Zmc2V0OwogCQkvKiBJZiB0aGUgaGVhZGVycyBhcmUgZXhjZXNzaXZlbHkgbGFyZ2UsIHRoZW4gd2UgbXVzdAogCQkgKiBmYWxsIGJhY2sgdG8gYSBzb2Z0d2FyZSBjaGVja3N1bSAqLwogCQlpZiAodW5saWtlbHkoY2tzdW1fb2Zmc2V0ID4gMjU1IHx8IHBzZXVkb19oZHJfb2Zmc2V0ID4gMTI3KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCA3NzQ3YmZkLi5lZTI2ZWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGFzbS9hdXhpby5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogCiAjaW5jbHVkZSAibXlyaV9zYnVzLmgiCiAjaW5jbHVkZSAibXlyaV9jb2RlLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS1oODMwMC5jIGIvZHJpdmVycy9uZXQvbmUtaDgzMDAuYwppbmRleCBlYjg5M2Q3Li4zOGZkNTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS1oODMwMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNkZWZpbmUgRUlfU0hJRlQoeCkJKGVpX2xvY2FsLT5yZWdfb2Zmc2V0W3hdKQorCiAjaW5jbHVkZSAiODM5MC5oIgogCiAjZGVmaW5lIERSVl9OQU1FICJuZS1oODMwMCIKQEAgLTUyLDYgKzU0LDExIEBACiAKIC8qIC0tLS0gTm8gdXNlci1zZXJ2aWNlYWJsZSBwYXJ0cyBiZWxvdyAtLS0tICovCiAKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9CisgICAgIjgzOTAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBjZXNkaXMuZ3NmYy5uYXNhLmdvdilcbiI7CisKKyNpbmNsdWRlICJsaWI4MzkwLmMiCisKICNkZWZpbmUgTkVfQkFTRQkgKGRldi0+YmFzZV9hZGRyKQogI2RlZmluZSBORV9DTUQJIAkweDAwCiAjZGVmaW5lIE5FX0RBVEFQT1JUCShlaV9zdGF0dXMud29yZDE2PzB4MjA6MHgxMCkJLyogTmF0U2VtaS1kZWZpbmVkIHBvcnQgd2luZG93IG9mZnNldC4gKi8KQEAgLTE2Miw3ICsxNjksNyBAQAogI2lmbmRlZiBNT0RVTEUKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG5lX3Byb2JlKGludCB1bml0KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKIAlpbnQgZXJyOwogCiAJaWYgKCFkZXYpCkBAIC0yODMsNyArMjkwLDcgQEAKIAogCS8qIFNuYXJmIHRoZSBpbnRlcnJ1cHQgbm93LiAgVGhlcmUncyBubyBwb2ludCBpbiB3YWl0aW5nIHNpbmNlIHdlIGNhbm5vdAogCSAgIHNoYXJlIGFuZCB0aGUgYm9hcmQgd2lsbCB1c3VhbGx5IGJlIGVuYWJsZWQuICovCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgMCwgbmFtZSwgZGV2KTsKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgX19laV9pbnRlcnJ1cHQsIDAsIG5hbWUsIGRldik7CiAJaWYgKHJldCkgewogCQlwcmludGsgKCIgdW5hYmxlIHRvIGdldCBJUlEgJWQgKGVycm5vPSVkKS5cbiIsIGRldi0+aXJxLCByZXQpOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0zMTgsOSArMzI1LDkgQEAKIAlkZXYtPm9wZW4gPSAmbmVfb3BlbjsKIAlkZXYtPnN0b3AgPSAmbmVfY2xvc2U7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVpX3BvbGw7CisJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBfX2VpX3BvbGw7CiAjZW5kaWYKLQlOUzgzOTBfaW5pdChkZXYsIDApOworCV9fTlM4MzkwX2luaXQoZGV2LCAwKTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpCkBAIC0zMzUsNyArMzQyLDcgQEAKIAogc3RhdGljIGludCBuZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZWlfb3BlbihkZXYpOworCV9fZWlfb3BlbihkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDMsNyArMzUwLDcgQEAKIHsKIAlpZiAoZWlfZGVidWcgPiAxKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLlxuIiwgZGV2LT5uYW1lKTsKLQllaV9jbG9zZShkZXYpOworCV9fZWlfY2xvc2UoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTg0LDcgKzU5MSw3IEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRtYV9zdGFydCArIDIqSFovMTAwKSkgewkJLyogMjBtcyAqLwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgVHggUkRDLlxuIiwgZGV2LT5uYW1lKTsKIAkJCW5lX3Jlc2V0XzgzOTAoZGV2KTsKLQkJCU5TODM5MF9pbml0KGRldiwxKTsKKwkJCV9fTlM4MzkwX2luaXQoZGV2LDEpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNjIwLDcgKzYyNyw3IEBACiAJaW50IGVycjsKIAogCWZvciAodGhpc19kZXYgPSAwOyB0aGlzX2RldiA8IE1BWF9ORV9DQVJEUzsgdGhpc19kZXYrKykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwogCQlpZiAoaW9bdGhpc19kZXZdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTMyMTAuYyBiL2RyaXZlcnMvbmV0L25lMzIxMC5jCmluZGV4IGQ2NjMyODkuLjFhNmZlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMzIxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25lMzIxMC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jIGIvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCmluZGV4IGJmNThkYjIuLjY5MjMzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYworKysgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKQEAgLTYwLDcgKzYwLDYgQEAKIAkubG9jYWxfcG9ydCA9IDY2NjUsCiAJLnJlbW90ZV9wb3J0ID0gNjY2NiwKIAkucmVtb3RlX21hYyA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfSwKLQkuZHJvcCA9IG5ldHBvbGxfcXVldWUsCiB9Owogc3RhdGljIGludCBjb25maWd1cmVkID0gMDsKIApAQCAtMTAyLDYgKzEwMSw4IEBACiAKIHN0YXRpYyBpbnQgaW5pdF9uZXRjb25zb2xlKHZvaWQpCiB7CisJaW50IGVycjsKKwogCWlmKHN0cmxlbihjb25maWcpKQogCQlvcHRpb25fc2V0dXAoY29uZmlnKTsKIApAQCAtMTEwLDggKzExMSw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmKG5ldHBvbGxfc2V0dXAoJm5wKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyID0gbmV0cG9sbF9zZXR1cCgmbnApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlyZWdpc3Rlcl9jb25zb2xlKCZuZXRjb25zb2xlKTsKIAlwcmludGsoS0VSTl9JTkZPICJuZXRjb25zb2xlOiBuZXR3b3JrIGxvZ2dpbmcgc3RhcnRlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA3Y2RjNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQpAQCAtMCwwICsxLDM1IEBACisjIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisjIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyMgCisjIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisjIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorIyAKKyMgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyMgICAgaW5mb0BuZXR4ZW4uY29tCisjIE5ldFhlbiwKKyMgMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAorIyBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBOZXRYZW4gTklDIERyaXZlcgorIworCisKK29iai0kKENPTkZJR19ORVRYRU5fTklDKSA6PSBuZXR4ZW5fbmljLm8KKworbmV0eGVuX25pYy15IDo9IG5ldHhlbl9uaWNfaHcubyBuZXR4ZW5fbmljX21haW4ubyBuZXR4ZW5fbmljX2luaXQubyBcCisJbmV0eGVuX25pY19pc3IubyBuZXR4ZW5fbmljX2V0aHRvb2wubyBuZXR4ZW5fbmljX25pdS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI1MDUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaApAQCAtMCwwICsxLDEwMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICogCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiAKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgICBpbmZvQG5ldHhlbi5jb20KKyAqIE5ldFhlbiwKKyAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKKyAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICovCisKKyNpZm5kZWYgX05FVFhFTl9OSUNfSF8KKyNkZWZpbmUgX05FVFhFTl9OSUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgorCisjZGVmaW5lIE5FVFhFTl9OSUNfQlVJTERfTk8gICAgICI1IgorI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiAyCisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SIDMKKyNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfU1VCVkVSU0lPTiA1OQorI2RlZmluZSBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCAgIjIuMy41OSIgIi0iIE5FVFhFTl9OSUNfQlVJTERfTk8KKyNkZWZpbmUgTkVUWEVOX05JQ19GV19WRVJTSU9OSUQgIjIuMy41OSIKKworI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCisJKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCisjZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFCVwKKwkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykqIGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KQorI2RlZmluZSBUWF9SSU5HU0laRQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpCisjZGVmaW5lIFJDVl9CVUZGU0laRQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQpCisjZGVmaW5lIGZpbmRfZGlmZl9hbW9uZyhhLGIscmFuZ2UpICgoYSk8KGIpPygoYiktKGEpKTooKGIpKyhyYW5nZSktKGEpKSkKKworI2RlZmluZSBORVRYRU5fTkVUREVWX1NUQVRVUyAweDEKKworI2RlZmluZSBBRERSX0lOX1dJTkRPVzEob2ZmKQlcCisJKChvZmYgPiBORVRYRU5fQ1JCX1BDSVhfSE9TVDIpICYmIChvZmYgPCBORVRYRU5fQ1JCX01BWCkpID8gMSA6IDAKKworLyogCisgKiBub3JtYWxpemUgYSA2NE1CIGNyYiBhZGRyZXNzIHRvIDMyTUIgUENJIHdpbmRvdyAKKyAqIFRvIHVzZSBORVRYRU5fQ1JCX05PUk1BTElaRSwgd2luZG93IF9tdXN0XyBiZSBzZXQgdG8gMQorICovCisjZGVmaW5lIE5FVFhFTl9DUkJfTk9STUFMKHJlZykgICAgICAgIFwKKwkocmVnKSAtIE5FVFhFTl9DUkJfUENJWF9IT1NUMiArIE5FVFhFTl9DUkJfUENJWF9IT1NUCisKKyNkZWZpbmUgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgcmVnKSBcCisJcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfTk9STUFMKHJlZykpCisKKyNkZWZpbmUgRklSU1RfUEFHRV9HUk9VUF9TVEFSVAkwCisjZGVmaW5lIEZJUlNUX1BBR0VfR1JPVVBfRU5ECTB4NDAwMDAwCisKKyNkZWZpbmUgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQJMHg0MDAwMDAwCisjZGVmaW5lIFNFQ09ORF9QQUdFX0dST1VQX0VORAkweDY2QkMwMDAKKworI2RlZmluZSBUSElSRF9QQUdFX0dST1VQX1NUQVJUCTB4NzBFNDAwMAorI2RlZmluZSBUSElSRF9QQUdFX0dST1VQX0VORAkweDgwMDAwMDAKKworI2RlZmluZSBGSVJTVF9QQUdFX0dST1VQX1NJWkUgIEZJUlNUX1BBR0VfR1JPVVBfRU5EIC0gRklSU1RfUEFHRV9HUk9VUF9TVEFSVAorI2RlZmluZSBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFIFNFQ09ORF9QQUdFX0dST1VQX0VORCAtIFNFQ09ORF9QQUdFX0dST1VQX1NUQVJUCisjZGVmaW5lIFRISVJEX1BBR0VfR1JPVVBfU0laRSAgVEhJUkRfUEFHRV9HUk9VUF9FTkQgLSBUSElSRF9QQUdFX0dST1VQX1NUQVJUCisKKyNkZWZpbmUgTUFYX1JYX0JVRkZFUl9MRU5HVEgJCTIwMDAKKyNkZWZpbmUgTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEggCTkwNDYKKyNkZWZpbmUgUlhfRE1BX01BUF9MRU4JCQkoTUFYX1JYX0JVRkZFUl9MRU5HVEggLSBORVRfSVBfQUxJR04pCisjZGVmaW5lIFJYX0pVTUJPX0RNQV9NQVBfTEVOCVwKKwkoTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEggLSBORVRfSVBfQUxJR04pCisjZGVmaW5lIE5FVFhFTl9ST01fUk9VTkRVUAkJMHg4MDAwMDAwMFVMTAorCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgcmluZyBjb250ZXh0cworICovCisjZGVmaW5lIE1BWF9SSU5HX0NUWCAxCisKKy8qIE9wY29kZXMgdG8gYmUgdXNlZCB3aXRoIHRoZSBjb21tYW5kcyAqLworZW51bSB7CisJVFhfRVRIRVJfUEtUID0gMHgwMSwKKy8qIFRoZSBmb2xsb3dpbmcgb3Bjb2RlcyBhcmUgZm9yIElQIGNoZWNrc3VtCSovCisJVFhfVENQX1BLVCwKKwlUWF9VRFBfUEtULAorCVRYX0lQX1BLVCwKKwlUWF9UQ1BfTFNPLAorCVRYX0lQU0VDLAorCVRYX0lQU0VDX0NNRAorfTsKKworLyogVGhlIGZvbGxvd2luZyBvcGNvZGVzIGFyZSBmb3IgaW50ZXJuYWwgY29uc3VtcHRpb24uICovCisjZGVmaW5lIE5FVFhFTl9DT05UUk9MX09QCTB4MTAKKyNkZWZpbmUgUEVHTkVUX1JFUVVFU1QJCTB4MTEKKworI2RlZmluZQlNQVhfTlVNX0NBUkRTCQk0CisKKyNkZWZpbmUgTUFYX0JVRkZFUlNfUEVSX0NNRAkzMgorCisvKgorICogRm9sbG93aW5nIGFyZSB0aGUgc3RhdGVzIG9mIHRoZSBQaGFudG9tLiBQaGFudG9tIHdpbGwgc2V0IHRoZW0gYW5kCisgKiBIb3N0IHdpbGwgcmVhZCB0byBjaGVjayBpZiB0aGUgZmllbGRzIGFyZSBjb3JyZWN0LgorICovCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9TVEFSVAkJMHhmZjAwCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9GQUlMRUQJCTB4ZmZmZgorI2RlZmluZSBQSEFOX0lOSVRJQUxJWkVfQ09NUExFVEUJMHhmZjAxCisKKy8qIEhvc3Qgd3JpdGVzIHRoZSBmb2xsb3dpbmcgdG8gbm90aWZ5IHRoYXQgaXQgaGFzIGRvbmUgdGhlIGluaXQtaGFuZHNoYWtlICovCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9BQ0sJMHhmMDBmCisKKyNkZWZpbmUgTlVNX1JDVl9ERVNDX1JJTkdTCTIJLyogTm8gb2YgUmN2IERlc2NyaXB0b3IgY29udGV4dHMgKi8KKworLyogZGVzY3JpcHRvciB0eXBlcyAqLworI2RlZmluZSBSQ1ZfREVTQ19OT1JNQUwJCTB4MDEKKyNkZWZpbmUgUkNWX0RFU0NfSlVNQk8JCTB4MDIKKyNkZWZpbmUgUkNWX0RFU0NfTk9STUFMX0NUWElECTAKKyNkZWZpbmUgUkNWX0RFU0NfSlVNQk9fQ1RYSUQJMQorCisjZGVmaW5lIFJDVl9ERVNDX1RZUEUoSUQpIFwKKwkoKElEID09IFJDVl9ERVNDX0pVTUJPX0NUWElEKSA/IFJDVl9ERVNDX0pVTUJPIDogUkNWX0RFU0NfTk9STUFMKQorCisjZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTEwMjQKKyNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMzI3NjgKKyNkZWZpbmUgTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUwkxMDI0CisjZGVmaW5lIE1BWF9SQ1ZTVEFUVVNfREVTQ1JJUFRPUlMJTUFYX1JDVl9ERVNDUklQVE9SUworI2RlZmluZSBNQVhfSlVNQk9fUkNWX0RFU0MJTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUworI2RlZmluZSBNQVhfUkNWX0RFU0MJCU1BWF9SQ1ZfREVTQ1JJUFRPUlMKKyNkZWZpbmUgTUFYX1JDVlNUQVRVU19ERVNDCU1BWF9SQ1ZfREVTQ1JJUFRPUlMKKyNkZWZpbmUgTlVNX1JDVl9ERVNDCQkoTUFYX1JDVl9ERVNDICsgTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUykKKyNkZWZpbmUgTUFYX0VQR19ERVNDUklQVE9SUwkoTUFYX0NNRF9ERVNDUklQVE9SUyAqIDgpCisKKyNkZWZpbmUgTUlOX1RYX0NPVU5UCTQwOTYKKyNkZWZpbmUgTUlOX1JYX0NPVU5UCTQwOTYKKworI2RlZmluZSBNQVhfRlJBTUVfU0laRQkweDEwMDAwCS8qIDY0SyBNQVggc2l6ZSBmb3IgTFNPICovCisKKyNkZWZpbmUgUEhBTl9QRUdfUkNWX0lOSVRJQUxJWkVECTB4ZmYwMQorI2RlZmluZSBQSEFOX1BFR19SQ1ZfU1RBUlRfSU5JVElBTElaRQkweGZmMDAKKworI2RlZmluZSBnZXRfbmV4dF9pbmRleChpbmRleCwgbGVuZ3RoKQlcCisJKCgoaW5kZXgpICsgMSkgJiAoKGxlbmd0aCkgLSAxKSkKKworI2RlZmluZSBnZXRfaW5kZXhfcmFuZ2UoaW5kZXgsbGVuZ3RoLGNvdW50KQlcCisJKCgoaW5kZXgpICsgKGNvdW50KSkgJiAoKGxlbmd0aCkgLSAxKSkKKworLyoKKyAqIEZvbGxvd2luZyBkYXRhIHN0cnVjdHVyZXMgZGVzY3JpYmUgdGhlIGRlc2NyaXB0b3JzIHRoYXQgd2lsbCBiZSB1c2VkLgorICogQWRkZWQgZmlsZWRzIG9mIHRjcEhkclNpemUgYW5kIGlwSGRyU2l6ZSwgVGhlIGRyaXZlciBuZWVkcyB0byBkbyBpdCBvbmx5IHdoZW4KKyAqIHdlIGFyZSBkb2luZyBMU08gKGFib3ZlIHRoZSAxNTAwIHNpemUgcGFja2V0KSBvbmx5LgorICovCisKKy8qCisgKiBUaGUgc2l6ZSBvZiByZWZlcmVuY2UgaGFuZGxlIGJlZW4gY2hhbmdlZCB0byAxNiBiaXRzIHRvIHBhc3MgdGhlIE1TUyBmaWVsZHMKKyAqIGZvciB0aGUgTFNPIHBhY2tldAorICovCisKKyNkZWZpbmUgRkxBR1NfQ0hFQ0tTVU1fRU5BQkxFRAkweDAxCisjZGVmaW5lIEZMQUdTX0xTT19FTkFCTEVECTB4MDIKKyNkZWZpbmUgRkxBR1NfSVBTRUNfU0FfQURECTB4MDQKKyNkZWZpbmUgRkxBR1NfSVBTRUNfU0FfREVMRVRFCTB4MDgKKyNkZWZpbmUgRkxBR1NfVkxBTl9UQUdHRUQJMHgxMAorCisjZGVmaW5lIENNRF9ERVNDX1RPVEFMX0xFTkdUSChjbWRfZGVzYykJXAorCQkoKGNtZF9kZXNjKS0+bGVuZ3RoX3RjcF9oZHIgJiAweDAwRkZGRkZGKQorI2RlZmluZSBDTURfREVTQ19UQ1BfSERSX09GRlNFVChjbWRfZGVzYykJXAorCQkoKChjbWRfZGVzYyktPmxlbmd0aF90Y3BfaGRyID4+IDI0KSAmIDB4MEZGKQorI2RlZmluZSBDTURfREVTQ19QT1JUKGNtZF9kZXNjKQkJKChjbWRfZGVzYyktPnBvcnRfY3R4aWQgJiAweDBGKQorI2RlZmluZSBDTURfREVTQ19DVFhfSUQoY21kX2Rlc2MpCSgoKGNtZF9kZXNjKS0+cG9ydF9jdHhpZCA+PiA0KSAmIDB4MEYpCisKKyNkZWZpbmUgQ01EX0RFU0NfVE9UQUxfTEVOR1RIX1dSVChjbWRfZGVzYywgdmFyKQlcCisJCSgoY21kX2Rlc2MpLT5sZW5ndGhfdGNwX2hkciB8PSAoKHZhcikgJiAweDAwRkZGRkZGKSkKKyNkZWZpbmUgQ01EX0RFU0NfVENQX0hEUl9PRkZTRVRfV1JUKGNtZF9kZXNjLCB2YXIpCVwKKwkJKChjbWRfZGVzYyktPmxlbmd0aF90Y3BfaGRyIHw9ICgoKHZhcikgPDwgMjQpICYgMHhGRjAwMDAwMCkpCisjZGVmaW5lIENNRF9ERVNDX1BPUlRfV1JUKGNtZF9kZXNjLCB2YXIpCVwKKwkJKChjbWRfZGVzYyktPnBvcnRfY3R4aWQgfD0gKCh2YXIpICYgMHgwRikpCisKK3N0cnVjdCBjbWRfZGVzY190eXBlMCB7CisJdTY0IG5ldHhlbl9uZXh0OwkvKiBmb3IgZnJhZ21lbnRzIGhhbmRsZWQgYnkgUGhhbnRvbSAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBhZGRyX2xvd19wYXJ0MjsKKwkJCXUzMiBhZGRyX2hpZ2hfcGFydDI7CisJCX07CisJCXU2NCBhZGRyX2J1ZmZlcjI7CisJfTsKKworCS8qIEJpdCBwYXR0ZXJuOiAwLTIzIHRvdGFsIGxlbmd0aCwgMjQtMzIgdGNwIGhlYWRlciBvZmZzZXQgKi8KKwl1MzIgbGVuZ3RoX3RjcF9oZHI7CisJdTggaXBfaGRyX29mZnNldDsJLyogRm9yIExTTyBvbmx5ICovCisJdTggbnVtX29mX2J1ZmZlcnM7CS8qIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyAqLworCXU4IGZsYWdzOwkJLyogYXMgZGVmaW5lZCBhYm92ZSAqLworCXU4IG9wY29kZTsKKworCXUxNiByZWZlcmVuY2VfaGFuZGxlOwkvKiBjaGFuZ2VkIHRvIHUxNiB0byBhZGQgbXNzICovCisJdTE2IG1zczsJCS8qIHBhc3NlZCBieSBORElTX1BBQ0tFVCBmb3IgTFNPICovCisJLyogQml0IHBhdHRlcm4gMC0zIHBvcnQsIDAtMyBjdHggaWQgKi8KKwl1OCBwb3J0X2N0eGlkOworCXU4IHRvdGFsX2hkcl9sZW5ndGg7CS8qIExTTyBvbmx5IDogTUFDK0lQK1RDUCBIZHIgc2l6ZSAqLworCXUxNiBjb25uX2lkOwkJLyogSVBTZWMgb2Zmb2FkIG9ubHkgKi8KKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBhZGRyX2xvd19wYXJ0MzsKKwkJCXUzMiBhZGRyX2hpZ2hfcGFydDM7CisJCX07CisJCXU2NCBhZGRyX2J1ZmZlcjM7CisJfTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBhZGRyX2xvd19wYXJ0MTsKKwkJCXUzMiBhZGRyX2hpZ2hfcGFydDE7CisJCX07CisJCXU2NCBhZGRyX2J1ZmZlcjE7CisJfTsKKworCXUxNiBidWZmZXIxX2xlbmd0aDsKKwl1MTYgYnVmZmVyMl9sZW5ndGg7CisJdTE2IGJ1ZmZlcjNfbGVuZ3RoOworCXUxNiBidWZmZXI0X2xlbmd0aDsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBhZGRyX2xvd19wYXJ0NDsKKwkJCXUzMiBhZGRyX2hpZ2hfcGFydDQ7CisJCX07CisJCXU2NCBhZGRyX2J1ZmZlcjQ7CisJfTsKKworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg2NCkpKTsKKworLyogTm90ZTogc2l6ZW9mKHJjdl9kZXNjKSBzaG91bGQgYWx3YXlzIGJlIGEgbXV0bGlwbGUgb2YgMiAqLworc3RydWN0IHJjdl9kZXNjIHsKKwl1MTYgcmVmZXJlbmNlX2hhbmRsZTsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTMyIGJ1ZmZlcl9sZW5ndGg7CS8qIGFsbG9jYXRlZCBidWZmZXIgbGVuZ3RoICh1c3VhbGx5IDJLKSAqLworCXU2NCBhZGRyX2J1ZmZlcjsKK307CisKKy8qIG9wY29kZSBmaWVsZCBpbiBzdGF0dXNfZGVzYyAqLworI2RlZmluZSBSQ1ZfTklDX1BLVAkoMHhBKQorI2RlZmluZSBTVEFUVVNfTklDX1BLVAkoKFJDVl9OSUNfUEtUKSA8PCAxMikKKworLyogZm9yIHN0YXR1cyBmaWVsZCBpbiBzdGF0dXNfZGVzYyAqLworI2RlZmluZSBTVEFUVVNfTkVFRF9DS1NVTQkoMSkKKyNkZWZpbmUgU1RBVFVTX0NLU1VNX09LCQkoMikKKworLyogb3duZXIgYml0cyBvZiBzdGF0dXNfZGVzYyAqLworI2RlZmluZSBTVEFUVVNfT1dORVJfSE9TVAkoMHgxKQorI2RlZmluZSBTVEFUVVNfT1dORVJfUEhBTlRPTQkoMHgyKQorCisjZGVmaW5lIE5FVFhFTl9QUk9UX0lQCQkoMSkKKyNkZWZpbmUgTkVUWEVOX1BST1RfVU5LTk9XTgkoMCkKKworLyogTm90ZTogc2l6ZW9mKHN0YXR1c19kZXNjKSBzaG91bGQgYWx3YXlzIGJlIGEgbXV0bGlwbGUgb2YgMiAqLworI2RlZmluZSBTVEFUVVNfREVTQ19QT1JUKHN0YXR1c19kZXNjKQlcCisJCSgoc3RhdHVzX2Rlc2MpLT5wb3J0X3N0YXR1c190eXBlX29wICYgMHgwRikKKyNkZWZpbmUgU1RBVFVTX0RFU0NfU1RBVFVTKHN0YXR1c19kZXNjKQlcCisJCSgoKHN0YXR1c19kZXNjKS0+cG9ydF9zdGF0dXNfdHlwZV9vcCA+PiA0KSAmIDB4MEYpCisjZGVmaW5lIFNUQVRVU19ERVNDX1RZUEUoc3RhdHVzX2Rlc2MpCVwKKwkJKCgoc3RhdHVzX2Rlc2MpLT5wb3J0X3N0YXR1c190eXBlX29wID4+IDgpICYgMHgwRikKKyNkZWZpbmUgU1RBVFVTX0RFU0NfT1BDT0RFKHN0YXR1c19kZXNjKQlcCisJCSgoKHN0YXR1c19kZXNjKS0+cG9ydF9zdGF0dXNfdHlwZV9vcCA+PiAxMikgJiAweDBGKQorCitzdHJ1Y3Qgc3RhdHVzX2Rlc2MgeworCS8qIEJpdCBwYXR0ZXJuOiAwLTMgcG9ydCwgNC03IHN0YXR1cywgOC0xMSB0eXBlLCAxMi0xNSBvcGNvZGUgKi8KKwl1MTYgcG9ydF9zdGF0dXNfdHlwZV9vcDsKKwl1MTYgdG90YWxfbGVuZ3RoOwkvKiBOSUMgbW9kZSAqLworCXUxNiByZWZlcmVuY2VfaGFuZGxlOwkvKiBoYW5kbGUgZm9yIHRoZSBhc3NvY2lhdGVkIHBhY2tldCAqLworCS8qIEJpdCBwYXR0ZXJuOiAwLTEgb3duZXIsIDItNSBwcm90b2NvbCAqLworCXUxNiBvd25lcjsJCS8qIE93bmVyIG9mIHRoZSBkZXNjcmlwdG9yICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CisKK2VudW0geworCU5FVFhFTl9SQ1ZfUEVHXzAgPSAwLAorCU5FVFhFTl9SQ1ZfUEVHXzEKK307CisvKiBUaGUgdmVyc2lvbiBvZiB0aGUgbWFpbiBkYXRhIHN0cnVjdHVyZSAqLworI2RlZmluZQlORVRYRU5fQkRJTkZPX1ZFUlNJT04gMQorCisvKiBNYWdpYyBudW1iZXIgdG8gbGV0IHVzZXIga25vdyBmbGFzaCBpcyBwcm9ncmFtbWVkICovCisjZGVmaW5lCU5FVFhFTl9CRElORk9fTUFHSUMgMHgxMjM0NTY3OAorCisvKiBNYXggbnVtYmVyIG9mIEdpZyBwb3J0cyBvbiBhIFBoYW50b20gYm9hcmQgKi8KKyNkZWZpbmUgTkVUWEVOX01BWF9QT1JUUyA0CisKK3R5cGVkZWYgZW51bSB7CisJTkVUWEVOX0JSRFRZUEVfUDFfQkQgPSAweDAwMDAsCisJTkVUWEVOX0JSRFRZUEVfUDFfU0IgPSAweDAwMDEsCisJTkVUWEVOX0JSRFRZUEVfUDFfU01BWCA9IDB4MDAwMiwKKwlORVRYRU5fQlJEVFlQRV9QMV9TT0NLID0gMHgwMDAzLAorCisJTkVUWEVOX0JSRFRZUEVfUDJfU09DS18zMSA9IDB4MDAwOCwKKwlORVRYRU5fQlJEVFlQRV9QMl9TT0NLXzM1ID0gMHgwMDA5LAorCU5FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEcgPSAweDAwMGEsCisJTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEcgPSAweDAwMGIsCisJTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRyA9IDB4MDAwYywKKworCU5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVogPSAweDAwMGQsCisJTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWiA9IDB4MDAwZSwKKwlORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQgPSAweDAwMGYKK30gbmV0eGVuX2JyZHR5cGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlORVRYRU5fQlJETUZHX0lOVkVOVEVDID0gMQorfSBuZXR4ZW5fYnJkbWZnOworCit0eXBlZGVmIGVudW0geworCU1FTV9PUkdfMTI4TWJ4NCA9IDB4MCwJLyogRERSMSBvbmx5ICovCisJTUVNX09SR18xMjhNYng4ID0gMHgxLAkvKiBERFIxIG9ubHkgKi8KKwlNRU1fT1JHXzEyOE1ieDE2ID0gMHgyLAkvKiBERFIxIG9ubHkgKi8KKwlNRU1fT1JHXzI1Nk1ieDQgPSAweDMsCisJTUVNX09SR18yNTZNYng4ID0gMHg0LAorCU1FTV9PUkdfMjU2TWJ4MTYgPSAweDUsCisJTUVNX09SR181MTJNYng0ID0gMHg2LAorCU1FTV9PUkdfNTEyTWJ4OCA9IDB4NywKKwlNRU1fT1JHXzUxMk1ieDE2ID0gMHg4LAorCU1FTV9PUkdfMUdieDQgPSAweDksCisJTUVNX09SR18xR2J4OCA9IDB4YSwKKwlNRU1fT1JHXzFHYngxNiA9IDB4YiwKKwlNRU1fT1JHXzJHYng0ID0gMHhjLAorCU1FTV9PUkdfMkdieDggPSAweGQsCisJTUVNX09SR18yR2J4MTYgPSAweGUsCisJTUVNX09SR18xMjhNYngzMiA9IDB4MTAwMDIsCS8qIEdERFIgb25seSAqLworCU1FTV9PUkdfMjU2TWJ4MzIgPSAweDEwMDA1CS8qIEdERFIgb25seSAqLworfSBuZXR4ZW5fbW5fbWVtX29yZ190OworCit0eXBlZGVmIGVudW0geworCU1FTV9PUkdfNTEyS3gzNiA9IDB4MCwKKwlNRU1fT1JHXzFNeDM2ID0gMHgxLAorCU1FTV9PUkdfMk14MzYgPSAweDIKK30gbmV0eGVuX3NuX21lbV9vcmdfdDsKKwordHlwZWRlZiBlbnVtIHsKKwlNRU1fREVQVEhfNE1CID0gMHgxLAorCU1FTV9ERVBUSF84TUIgPSAweDIsCisJTUVNX0RFUFRIXzE2TUIgPSAweDMsCisJTUVNX0RFUFRIXzMyTUIgPSAweDQsCisJTUVNX0RFUFRIXzY0TUIgPSAweDUsCisJTUVNX0RFUFRIXzEyOE1CID0gMHg2LAorCU1FTV9ERVBUSF8yNTZNQiA9IDB4NywKKwlNRU1fREVQVEhfNTEyTUIgPSAweDgsCisJTUVNX0RFUFRIXzFHQiA9IDB4OSwKKwlNRU1fREVQVEhfMkdCID0gMHhhLAorCU1FTV9ERVBUSF80R0IgPSAweGIsCisJTUVNX0RFUFRIXzhHQiA9IDB4YywKKwlNRU1fREVQVEhfMTZHQiA9IDB4ZCwKKwlNRU1fREVQVEhfMzJHQiA9IDB4ZQorfSBuZXR4ZW5fbWVtX2RlcHRoX3Q7CisKK3N0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbyB7CisJdTMyIGhlYWRlcl92ZXJzaW9uOworCisJdTMyIGJvYXJkX21mZzsKKwl1MzIgYm9hcmRfdHlwZTsKKwl1MzIgYm9hcmRfbnVtOworCXUzMiBjaGlwX2lkOworCXUzMiBjaGlwX21pbm9yOworCXUzMiBjaGlwX21ham9yOworCXUzMiBjaGlwX3BrZzsKKwl1MzIgY2hpcF9sb3Q7CisKKwl1MzIgcG9ydF9tYXNrOwkJLyogYXZhaWxhYmxlIG5pdSBwb3J0cyAqLworCXUzMiBwZWdfbWFzazsJCS8qIGF2YWlsYWJsZSBwZWdzICovCisJdTMyIGljYWNoZV9vazsJCS8qIGNhbiB3ZSBydW4gd2l0aCBpY2FjaGU/ICovCisJdTMyIGRjYWNoZV9vazsJCS8qIGNhbiB3ZSBydW4gd2l0aCBkY2FjaGU/ICovCisJdTMyIGNhc3Blcl9vazsKKworCXUzMiBtYWNfYWRkcl9sb18wOworCXUzMiBtYWNfYWRkcl9sb18xOworCXUzMiBtYWNfYWRkcl9sb18yOworCXUzMiBtYWNfYWRkcl9sb18zOworCisJLyogTU4tcmVsYXRlZCBjb25maWcgKi8KKwl1MzIgbW5fc3luY19tb2RlOwkvKiBlbmFibGUvIHN5bmMgc2hpZnQgY2Nsay8gc3luYyBzaGlmdCBtY2xrICovCisJdTMyIG1uX3N5bmNfc2hpZnRfY2NsazsKKwl1MzIgbW5fc3luY19zaGlmdF9tY2xrOworCXUzMiBtbl93Yl9lbjsKKwl1MzIgbW5fY3J5c3RhbF9mcmVxOwkvKiBpbiBNSHogKi8KKwl1MzIgbW5fc3BlZWQ7CQkvKiBpbiBNSHogKi8KKwl1MzIgbW5fb3JnOworCXUzMiBtbl9kZXB0aDsKKwl1MzIgbW5fcmFua3NfMDsJCS8qIHJhbmtzIHBlciBzbG90ICovCisJdTMyIG1uX3JhbmtzXzE7CQkvKiByYW5rcyBwZXIgc2xvdCAqLworCXUzMiBtbl9yZF9sYXRlbmN5XzA7CisJdTMyIG1uX3JkX2xhdGVuY3lfMTsKKwl1MzIgbW5fcmRfbGF0ZW5jeV8yOworCXUzMiBtbl9yZF9sYXRlbmN5XzM7CisJdTMyIG1uX3JkX2xhdGVuY3lfNDsKKwl1MzIgbW5fcmRfbGF0ZW5jeV81OworCXUzMiBtbl9yZF9sYXRlbmN5XzY7CisJdTMyIG1uX3JkX2xhdGVuY3lfNzsKKwl1MzIgbW5fcmRfbGF0ZW5jeV84OworCXUzMiBtbl9kbGxfdmFsWzE4XTsKKwl1MzIgbW5fbW9kZV9yZWc7CS8qIE1JVSBERFIgTW9kZSBSZWdpc3RlciAqLworCXUzMiBtbl9leHRfbW9kZV9yZWc7CS8qIE1JVSBERFIgRXh0ZW5kZWQgTW9kZSBSZWdpc3RlciAqLworCXUzMiBtbl90aW1pbmdfMDsJLyogTUlVIE1lbW9yeSBDb250cm9sIFRpbWluZyBSZ2lzdGVyICovCisJdTMyIG1uX3RpbWluZ18xOwkvKiBNSVUgRXh0ZW5kZWQgTWVtb3J5IEN0cmwgVGltaW5nIFJlZ2lzdGVyICovCisJdTMyIG1uX3RpbWluZ18yOwkvKiBNSVUgRXh0ZW5kZWQgTWVtb3J5IEN0cmwgVGltaW5nMiBSZWdpc3RlciAqLworCisJLyogU04tcmVsYXRlZCBjb25maWcgKi8KKwl1MzIgc25fc3luY19tb2RlOwkvKiBlbmFibGUvIHN5bmMgc2hpZnQgY2NsayAvIHN5bmMgc2hpZnQgbWNsayAqLworCXUzMiBzbl9wdF9tb2RlOwkJLyogcGFzcyB0aHJvdWdoIG1vZGUgKi8KKwl1MzIgc25fZWNjX2VuOworCXUzMiBzbl93Yl9lbjsKKwl1MzIgc25fY3J5c3RhbF9mcmVxOworCXUzMiBzbl9zcGVlZDsKKwl1MzIgc25fb3JnOworCXUzMiBzbl9kZXB0aDsKKwl1MzIgc25fZGxsX3RhcDsKKwl1MzIgc25fcmRfbGF0ZW5jeTsKKworCXUzMiBtYWNfYWRkcl9oaV8wOworCXUzMiBtYWNfYWRkcl9oaV8xOworCXUzMiBtYWNfYWRkcl9oaV8yOworCXUzMiBtYWNfYWRkcl9oaV8zOworCisJdTMyIG1hZ2ljOwkJLyogaW5kaWNhdGVzIGZsYXNoIGhhcyBiZWVuIGluaXRpYWxpemVkICovCisKKwl1MzIgbW5fcmRpbW07CisJdTMyIG1uX2RsbF9vdmVycmlkZTsKKworfTsKKworI2RlZmluZSBGTEFTSF9OVU1fUE9SVFMJCSg0KQorCitzdHJ1Y3QgbmV0eGVuX2ZsYXNoX21hY19hZGRyIHsKKwl1MzIgZmxhc2hfYWRkclszMl07Cit9OworCitzdHJ1Y3QgbmV0eGVuX3VzZXJfb2xkX2luZm8geworCXU4IGZsYXNoX21kNVsxNl07CisJdTggY3JiaW5pdF9tZDVbMTZdOworCXU4IGJyZGNmZ19tZDVbMTZdOworCS8qIGJvb3Rsb2FkZXIgKi8KKwl1MzIgYm9vdGxkX3ZlcnNpb247CisJdTMyIGJvb3RsZF9zaXplOworCXU4IGJvb3RsZF9tZDVbMTZdOworCS8qIGltYWdlICovCisJdTMyIGltYWdlX3ZlcnNpb247CisJdTMyIGltYWdlX3NpemU7CisJdTggaW1hZ2VfbWQ1WzE2XTsKKwkvKiBwcmltYXJ5IGltYWdlIHN0YXR1cyAqLworCXUzMiBwcmltYXJ5X3N0YXR1czsKKwl1MzIgc2Vjb25kYXJ5X3ByZXNlbnQ7CisKKwkvKiBNQUMgYWRkcmVzcyAsIDQgcG9ydHMgKi8KKwlzdHJ1Y3QgbmV0eGVuX2ZsYXNoX21hY19hZGRyIG1hY19hZGRyW0ZMQVNIX05VTV9QT1JUU107Cit9OworI2RlZmluZSBGTEFTSF9OVU1fTUFDX1BFUl9QT1JUCTMyCitzdHJ1Y3QgbmV0eGVuX3VzZXJfaW5mbyB7CisJdTggZmxhc2hfbWQ1WzE2ICogNjRdOworCS8qIGJvb3Rsb2FkZXIgKi8KKwl1MzIgYm9vdGxkX3ZlcnNpb247CisJdTMyIGJvb3RsZF9zaXplOworCS8qIGltYWdlICovCisJdTMyIGltYWdlX3ZlcnNpb247CisJdTMyIGltYWdlX3NpemU7CisJLyogcHJpbWFyeSBpbWFnZSBzdGF0dXMgKi8KKwl1MzIgcHJpbWFyeV9zdGF0dXM7CisJdTMyIHNlY29uZGFyeV9wcmVzZW50OworCisJLyogTUFDIGFkZHJlc3MgLCA0IHBvcnRzLCAzMiBhZGRyZXNzIHBlciBwb3J0ICovCisJdTY0IG1hY19hZGRyW0ZMQVNIX05VTV9QT1JUUyAqIEZMQVNIX05VTV9NQUNfUEVSX1BPUlRdOworCXUzMiBzdWJfc3lzX2lkOworCXU4IHNlcmlhbF9udW1bMzJdOworCisJLyogQW55IHVzZXIgZGVmaW5lZCBkYXRhICovCit9OworCisvKgorICogRmxhc2ggTGF5b3V0IC0gbmV3IGZvcm1hdC4KKyAqLworc3RydWN0IG5ldHhlbl9uZXdfdXNlcl9pbmZvIHsKKwl1OCBmbGFzaF9tZDVbMTYgKiA2NF07CisJLyogYm9vdGxvYWRlciAqLworCXUzMiBib290bGRfdmVyc2lvbjsKKwl1MzIgYm9vdGxkX3NpemU7CisJLyogaW1hZ2UgKi8KKwl1MzIgaW1hZ2VfdmVyc2lvbjsKKwl1MzIgaW1hZ2Vfc2l6ZTsKKwkvKiBwcmltYXJ5IGltYWdlIHN0YXR1cyAqLworCXUzMiBwcmltYXJ5X3N0YXR1czsKKwl1MzIgc2Vjb25kYXJ5X3ByZXNlbnQ7CisKKwkvKiBNQUMgYWRkcmVzcyAsIDQgcG9ydHMsIDMyIGFkZHJlc3MgcGVyIHBvcnQgKi8KKwl1NjQgbWFjX2FkZHJbRkxBU0hfTlVNX1BPUlRTICogRkxBU0hfTlVNX01BQ19QRVJfUE9SVF07CisJdTMyIHN1Yl9zeXNfaWQ7CisJdTggc2VyaWFsX251bVszMl07CisKKwkvKiBBbnkgdXNlciBkZWZpbmVkIGRhdGEgKi8KK307CisKKyNkZWZpbmUgU0VDT05EQVJZX0lNQUdFX1BSRVNFTlQgMHhiM2I0YjViNgorI2RlZmluZSBTRUNPTkRBUllfSU1BR0VfQUJTRU5UCTB4ZmZmZmZmZmYKKyNkZWZpbmUgUFJJTUFSWV9JTUFHRV9HT09ECTB4NWE1YTVhNWEKKyNkZWZpbmUgUFJJTUFSWV9JTUFHRV9CQUQJMHhmZmZmZmZmZgorCisvKiBGbGFzaCBtZW1vcnkgbWFwICovCit0eXBlZGVmIGVudW0geworCUNSQklOSVRfU1RBUlQgPSAwLAkvKiBDcmJpbml0IHNlY3Rpb24gKi8KKwlCUkRDRkdfU1RBUlQgPSAweDQwMDAsCS8qIGJvYXJkIGNvbmZpZyAqLworCUlOSVRDT0RFX1NUQVJUID0gMHg2MDAwLAkvKiBwZWd0dW5lIGNvZGUgKi8KKwlCT09UTERfU1RBUlQgPSAweDEwMDAwLAkvKiBib290bGQgKi8KKwlJTUFHRV9TVEFSVCA9IDB4NDMwMDAsCS8qIGNvbXByZXNzZWQgaW1hZ2UgKi8KKwlTRUNPTkRBUllfU1RBUlQgPSAweDIwMDAwMCwJLyogYmFja3VwIGltYWdlcyAqLworCVBYRV9TVEFSVCA9IDB4M0UwMDAwLAkvKiB1c2VyIGRlZmluZWQgcmVnaW9uICovCisJVVNFUl9TVEFSVCA9IDB4M0U4MDAwLAkvKiBVc2VyIGRlZmluZWQgcmVnaW9uIGZvciBuZXcgYm9hcmRzICovCisJRklYRURfU1RBUlQgPSAweDNGMDAwMAkvKiBiYWNrdXAgb2YgY3JiaW5pdCAqLworfSBuZXR4ZW5fZmxhc2hfbWFwX3Q7CisKKyNkZWZpbmUgVVNFUl9TVEFSVF9PTEQgUFhFX1NUQVJUCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisKKyNkZWZpbmUgRkxBU0hfU1RBUlQJCShDUkJJTklUX1NUQVJUKQorI2RlZmluZSBJTklUX1NFQ1RPUgkJKDApCisjZGVmaW5lIFBSSU1BUllfU1RBUlQgCQkoQk9PVExEX1NUQVJUKQorI2RlZmluZSBGTEFTSF9DUkJJTklUX1NJWkUgCSgweDQwMDApCisjZGVmaW5lIEZMQVNIX0JSRENGR19TSVpFIAkoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbykpCisjZGVmaW5lIEZMQVNIX1VTRVJfU0laRQkJKHNpemVvZihuZXR4ZW5fdXNlcl9pbmZvKS9zaXplb2YodTMyKSkKKyNkZWZpbmUgRkxBU0hfU0VDT05EQVJZX1NJWkUgCShVU0VSX1NUQVJULVNFQ09OREFSWV9TVEFSVCkKKyNkZWZpbmUgTlVNX1BSSU1BUllfU0VDVE9SUwkoMHgyMCkKKyNkZWZpbmUgTlVNX0NPTkZJR19TRUNUT1JTIAkoMSkKKyNkZWZpbmUgUEZYICJuZXR4ZW46ICIKKworLyogTm90ZTogTWFrZSBzdXJlIHRvIG5vdCBjYWxsIHRoaXMgYmVmb3JlIGFkYXB0ZXItPnBvcnQgaXMgdmFsaWQgKi8KKyNpZiAhZGVmaW5lZChORVRYRU5fREVCVUcpCisjZGVmaW5lIERQUklOVEsoa2xldmVsLCBmbXQsIGFyZ3MuLi4pCWRvIHsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGtsZXZlbCwgZm10LCBhcmdzLi4uKQlkbyB7IFwKKwlwcmludGsoS0VSTl8jI2tsZXZlbCBQRlggIiVzOiAlczogIiBmbXQsIF9fRlVOQ1RJT05fXyxcCisJCShhZGFwdGVyICE9IE5VTEwgJiYgYWRhcHRlci0+cG9ydCAhPSBOVUxMICYmIFwKKwkJYWRhcHRlci0+cG9ydFswXSAhPSBOVUxMICYmIFwKKwkJYWRhcHRlci0+cG9ydFswXS0+bmV0ZGV2ICE9IE5VTEwpID8gXAorCQlhZGFwdGVyLT5wb3J0WzBdLT5uZXRkZXYtPm5hbWUgOiBOVUxMLCBcCisJCSMjIGFyZ3MpOyB9IHdoaWxlKDApCisjZW5kaWYKKworLyogTnVtYmVyIG9mIHN0YXR1cyBkZXNjcmlwdG9ycyB0byBoYW5kbGUgcGVyIGludGVycnVwdCAqLworI2RlZmluZSBNQVhfU1RBVFVTX0hBTkRMRQkoMTI4KQorCisvKgorICogbmV0eGVuX3NrYl9mcmFne30gaXMgdG8gY29udGFpbiBtYXBwaW5nIGluZm8gZm9yIGVhY2ggU0cgbGlzdC4gVGhpcworICogaGFzIHRvIGJlIGZyZWVkIHdoZW4gRE1BIGlzIGNvbXBsZXRlLiBUaGlzIGlzIHBhcnQgb2YgbmV0eGVuX3R4X2J1ZmZlcnt9LgorICovCitzdHJ1Y3QgbmV0eGVuX3NrYl9mcmFnIHsKKwl1NjQgZG1hOworCXUzMiBsZW5ndGg7Cit9OworCisvKiAgICBGb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVycyAgICAqLworI2RlZmluZQlORVRYRU5fQlVGRkVSX0ZSRUUJMAorI2RlZmluZQlORVRYRU5fQlVGRkVSX0JVU1kJMQorCisvKgorICogVGhlcmUgd2lsbCBiZSBvbmUgbmV0eGVuX2J1ZmZlciBwZXIgc2tiIHBhY2tldC4gICAgVGhlc2Ugd2lsbCBiZQorICogdXNlZCB0byBzYXZlIHRoZSBkbWEgaW5mbyBmb3IgcGNpX3VubWFwX3BhZ2UoKQorICovCitzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgeworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5ldHhlbl9za2JfZnJhZyBmcmFnX2FycmF5W01BWF9CVUZGRVJTX1BFUl9DTUQgKyAxXTsKKwl1MzIgdG90YWxfbGVuZ3RoOworCXUzMiBtc3M7CisJdTE2IHBvcnQ7CisJdTggY21kOworCXU4IGZyYWdfY291bnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lX3N0YW1wOworCXUzMiBzdGF0ZTsKKwl1MzIgbm9fb2ZfZGVzY3JpcHRvcnM7Cit9OworCisvKiBJbiByeF9idWZmZXIsIHdlIGRvIG5vdCBuZWVkIG11bHRpcGxlIGZyYWdtZW50cyBhcyBpcyBhIHNpbmdsZSBidWZmZXIgKi8KK3N0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU2NCBkbWE7CisJdTE2IHJlZl9oYW5kbGU7CisJdTE2IHN0YXRlOworfTsKKworLyogQm9hcmQgdHlwZXMgKi8KKyNkZWZpbmUJTkVUWEVOX05JQ19HQkUJMHgwMQorI2RlZmluZQlORVRYRU5fTklDX1hHQkUJMHgwMgorCisvKgorICogT25lIGhhcmR3YXJlX2NvbnRleHR7fSBwZXIgYWRhcHRlcgorICogY29udGFpbnMgaW50ZXJydXB0IGluZm8gYXMgd2VsbCBzaGFyZWQgaGFyZHdhcmUgaW5mby4KKyAqLworc3RydWN0IG5ldHhlbl9oYXJkd2FyZV9jb250ZXh0IHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMDsKKwl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMTsKKwl2b2lkIF9faW9tZW0gKnBjaV9iYXNlMjsKKworCXU4IHJldmlzaW9uX2lkOworCXUxNiBib2FyZF90eXBlOworCXUxNiBtYXhfcG9ydHM7CisJc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvIGJvYXJkY2ZnOworCXUzMiB4Z19saW5rdXA7CisJdTMyIHFnX2xpbmtzdXA7CisJLyogQWRkcmVzcyBvZiBjbWQgcmluZyBpbiBQaGFudG9tICovCisJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpjbWRfZGVzY19oZWFkOworCWNoYXIgKnBhdXNlYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqY21kX2Rlc2NfcGRldjsKKwlkbWFfYWRkcl90IGNtZF9kZXNjX3BoeXNfYWRkcjsKKwlkbWFfYWRkcl90IHBhdXNlX3BoeXNhZGRyOworCXN0cnVjdCBwY2lfZGV2ICpwYXVzZV9wZGV2OworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKK307CisKKyNkZWZpbmUgTUlOSU1VTV9FVEhFUk5FVF9GUkFNRV9TSVpFCTY0CS8qIFdpdGggRkNTICovCisjZGVmaW5lIEVUSEVSTkVUX0ZDU19TSVpFCQk0CisKK3N0cnVjdCBuZXR4ZW5fYWRhcHRlcl9zdGF0cyB7CisJdTY0IGludHM7CisJdTY0IGhvc3RpbnRzOworCXU2NCBvdGhlcmludHM7CisJdTY0IHByb2Nlc3NfcmN2OworCXU2NCBwcm9jZXNzX3htaXQ7CisJdTY0IG5veG1pdGRvbmU7CisJdTY0IHhtaXRjc3VtbWVkOworCXU2NCBwb3N0X2NhbGxlZDsKKwl1NjQgcG9zdGVkOworCXU2NCBsYXN0cG9zdGVkOworCXU2NCBnb29kc2ticG9zdHM7Cit9OworCisvKgorICogUmN2IERlc2NyaXB0b3IgQ29udGV4dC4gT25lIHN1Y2ggcGVyIFJjdiBEZXNjcmlwdG9yLiBUaGVyZSBtYXkKKyAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCisgKi8KK3N0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3R4IHsKKwl1MzIgZmxhZ3M7CisJdTMyIHByb2R1Y2VyOworCXUzMiByY3ZfcGVuZGluZzsJLyogTnVtIG9mIGJ1ZnMgcG9zdGVkIGluIHBoYW50b20gKi8KKwl1MzIgcmN2X2ZyZWU7CQkvKiBOdW0gb2YgYnVmcyBpbiBmcmVlIGxpc3QgKi8KKwlkbWFfYWRkcl90IHBoeXNfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGh5c19wZGV2OworCXN0cnVjdCByY3ZfZGVzYyAqZGVzY19oZWFkOwkvKiBhZGRyZXNzIG9mIHJ4IHJpbmcgaW4gUGhhbnRvbSAqLworCXUzMiBtYXhfcnhfZGVzY19jb3VudDsKKwl1MzIgZG1hX3NpemU7CisJdTMyIHNrYl9zaXplOworCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwkvKiByeCBidWZmZXJzIGZvciByZWNlaXZlICAgKi8KKwlpbnQgYmVnaW5fYWxsb2M7Cit9OworCisvKgorICogUmVjZWl2ZSBjb250ZXh0LiBUaGVyZSBpcyBvbmUgc3VjaCBzdHJ1Y3R1cmUgcGVyIGluc3RhbmNlIG9mIHRoZQorICogcmVjZWl2ZSBwcm9jZXNzaW5nLiBBbnkgc3RhdGUgaW5mb3JtYXRpb24gdGhhdCBpcyByZWxldmFudCB0bworICogdGhlIHJlY2VpdmUsIGFuZCBpcyBtdXN0IGJlIGluIHRoaXMgc3RydWN0dXJlLiBUaGUgZ2xvYmFsIGRhdGEgbWF5IGJlCisgKiBwcmVzZW50IGVsc2V3aGVyZS4KKyAqLworc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgeworCXN0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3R4IHJjdl9kZXNjW05VTV9SQ1ZfREVTQ19SSU5HU107CisJdTMyIHN0YXR1c19yeF9wcm9kdWNlcjsKKwl1MzIgc3RhdHVzX3J4X2NvbnN1bWVyOworCWRtYV9hZGRyX3QgcmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcmN2X3N0YXR1c19kZXNjX3BkZXY7CisJc3RydWN0IHN0YXR1c19kZXNjICpyY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKK307CisKKyNkZWZpbmUgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCAweDAyCisKK3N0cnVjdCBuZXR4ZW5fZHJ2b3BzOworCitzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgeworCXN0cnVjdCBuZXR4ZW5faGFyZHdhcmVfY29udGV4dCBhaHc7CisJaW50IHBvcnRfY291bnQ7CQkvKiBOdW1iZXIgb2YgY29uZmlndXJlZCBwb3J0cyAgKi8KKwlpbnQgYWN0aXZlX3BvcnRzOwkvKiBOdW1iZXIgb2Ygb3BlbiBwb3J0cyAqLworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydFtORVRYRU5fTUFYX1BPUlRTXTsJLyogcHRyIHRvIGVhY2ggcG9ydCAgKi8KKwlzcGlubG9ja190IHR4X2xvY2s7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3YXRjaGRvZ190YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF90aW1lb3V0X3Rhc2s7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CisKKwl1MzIgY3Vycl93aW5kb3c7CisKKwl1MzIgY21kX3Byb2R1Y2VyOworCXUzMiBjbWRfY29uc3VtZXI7CisKKwl1MzIgbGFzdF9jbWRfY29uc3VtZXI7CisJdTMyIG1heF90eF9kZXNjX2NvdW50OworCXUzMiBtYXhfcnhfZGVzY19jb3VudDsKKwl1MzIgbWF4X2p1bWJvX3J4X2Rlc2NfY291bnQ7CisJLyogTnVtIG9mIGluc3RhbmNlcyBhY3RpdmUgb24gY21kIGJ1ZmZlciByaW5nICovCisJdTMyIHByb2NfY21kX2J1Zl9jb3VudGVyOworCisJdTMyIG51bV90aHJlYWRzLCB0b3RhbF90aHJlYWRzOwkvKlVzZSB0byBrZWVwIHRyYWNrIG9mIHhtaXQgdGhyZWFkcyAqLworCisJdTMyIGZsYWdzOworCXUzMiBpcnE7CisJaW50IGRyaXZlcl9taXNtYXRjaDsKKwl1MzIgdGVtcDsKKworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlcl9zdGF0cyBzdGF0czsKKworCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqY21kX2J1Zl9hcnI7CS8qIENvbW1hbmQgYnVmZmVycyBmb3IgeG1pdCAqLworCisJLyoKKwkgKiBSZWNlaXZlIGluc3RhbmNlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvbmUgcGVyIHBvcnQsCisJICogb3Igb25lIHBlciBwZWcsIGV0Yy4KKwkgKi8KKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eFtNQVhfUkNWX0NUWF07CisKKwlpbnQgaXNfdXA7CisJaW50IHdvcmtfZG9uZTsKKwlzdHJ1Y3QgbmV0eGVuX2Rydm9wcyAqb3BzOworfTsJCQkJLyogbmV0eGVuX2FkYXB0ZXIgc3RydWN0dXJlICovCisKKy8qIE1heCBudW1iZXIgb2YgeG1pdCBwcm9kdWNlciB0aHJlYWRzIHRoYXQgY2FuIHJ1biBzaW11bHRhbmVvdXNseSAqLworI2RlZmluZQlNQVhfWE1JVF9QUk9EVUNFUlMJCTE2CisKK3N0cnVjdCBuZXR4ZW5fcG9ydF9zdGF0cyB7CisJdTY0IHJjdmRiYWRza2I7CisJdTY0IHhtaXRjYWxsZWQ7CisJdTY0IHhtaXRlZGZyYW1lczsKKwl1NjQgeG1pdGZpbmlzaGVkOworCXU2NCBiYWRza2JsZW47CisJdTY0IG5vY21kZGVzY3JpcHRvcjsKKwl1NjQgcG9sbGVkOworCXU2NCB1cGhhcHB5OworCXU2NCB1cGRyb3BwZWQ7CisJdTY0IHVwbGNvbmc7CisJdTY0IHVwaGNvbmc7CisJdTY0IHVwbWNvbmc7CisJdTY0IHVwZHVubm87CisJdTY0IHNrYmZyZWVkOworCXU2NCB0eGRyb3BwZWQ7CisJdTY0IHR4bnVsbHNrYjsKKwl1NjQgY3N1bW1lZDsKKwl1NjQgbm9fcmN2OworCXU2NCByeGJ5dGVzOworCXU2NCB0eGJ5dGVzOworfTsKKworc3RydWN0IG5ldHhlbl9wb3J0IHsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisKKwl1MTYgcG9ydG51bTsJCS8qIEdCRSBwb3J0IG51bWJlciAqLworCXUxNiBsaW5rX3NwZWVkOworCXUxNiBsaW5rX2R1cGxleDsKKwl1MTYgbGlua19hdXRvbmVnOworCisJaW50IGZsYWdzOworCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7CisJc3RydWN0IG5ldHhlbl9wb3J0X3N0YXRzIHN0YXRzOworfTsKKworI2RlZmluZSBQQ0lfT0ZGU0VUX0ZJUlNUX1JBTkdFKGFkYXB0ZXIsIG9mZikgICAgXAorCSgoYWRhcHRlciktPmFody5wY2lfYmFzZTAgKyAob2ZmKSkKKyNkZWZpbmUgUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwgb2ZmKSAgIFwKKwkoKGFkYXB0ZXIpLT5haHcucGNpX2Jhc2UxICsgKG9mZikgLSBTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCkKKyNkZWZpbmUgUENJX09GRlNFVF9USElSRF9SQU5HRShhZGFwdGVyLCBvZmYpICAgIFwKKwkoKGFkYXB0ZXIpLT5haHcucGNpX2Jhc2UyICsgKG9mZikgLSBUSElSRF9QQUdFX0dST1VQX1NUQVJUKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGNpX2Jhc2Vfb2Zmc2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb2ZmKQoreworCWlmICgob2ZmIDwgRklSU1RfUEFHRV9HUk9VUF9FTkQpICYmIChvZmYgPj0gRklSU1RfUEFHRV9HUk9VUF9TVEFSVCkpIHsKKwkJcmV0dXJuIChhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgb2ZmKTsKKwl9IGVsc2UgaWYgKChvZmYgPCBTRUNPTkRfUEFHRV9HUk9VUF9FTkQpICYmCisJCSAgIChvZmYgPj0gU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQpKSB7CisJCXJldHVybiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSArIG9mZiAtIFNFQ09ORF9QQUdFX0dST1VQX1NUQVJUKTsKKwl9IGVsc2UgaWYgKChvZmYgPCBUSElSRF9QQUdFX0dST1VQX0VORCkgJiYKKwkJICAgKG9mZiA+PSBUSElSRF9QQUdFX0dST1VQX1NUQVJUKSkgeworCQlyZXR1cm4gKGFkYXB0ZXItPmFody5wY2lfYmFzZTIgKyBvZmYgLSBUSElSRF9QQUdFX0dST1VQX1NUQVJUKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpwY2lfYmFzZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZikKK3sKKwlpZiAoKG9mZiA8IEZJUlNUX1BBR0VfR1JPVVBfRU5EKSAmJiAob2ZmID49IEZJUlNUX1BBR0VfR1JPVVBfU1RBUlQpKSB7CisJCXJldHVybiBhZGFwdGVyLT5haHcucGNpX2Jhc2UwOworCX0gZWxzZSBpZiAoKG9mZiA8IFNFQ09ORF9QQUdFX0dST1VQX0VORCkgJiYKKwkJICAgKG9mZiA+PSBTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCkpIHsKKwkJcmV0dXJuIGFkYXB0ZXItPmFody5wY2lfYmFzZTE7CisJfSBlbHNlIGlmICgob2ZmIDwgVEhJUkRfUEFHRV9HUk9VUF9FTkQpICYmCisJCSAgIChvZmYgPj0gVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCkpIHsKKwkJcmV0dXJuIGFkYXB0ZXItPmFody5wY2lfYmFzZTI7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgbmV0eGVuX2Rydm9wcyB7CisJaW50ICgqZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGludCk7CisJaW50ICgqZGlzYWJsZV9waHlfaW50ZXJydXB0cykgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBpbnQpOworCXZvaWQgKCpoYW5kbGVfcGh5X2ludHIpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKik7CisJaW50ICgqbWFjYWRkcl9zZXQpIChzdHJ1Y3QgbmV0eGVuX3BvcnQgKiwgbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdCk7CisJaW50ICgqc2V0X210dSkgKHN0cnVjdCBuZXR4ZW5fcG9ydCAqLCBpbnQpOworCWludCAoKnNldF9wcm9taXNjKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGludCwKKwkJCSAgICBuZXR4ZW5fbml1X3Byb21fbW9kZV90KTsKKwlpbnQgKCp1bnNldF9wcm9taXNjKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGludCwKKwkJCSAgICAgIG5ldHhlbl9uaXVfcHJvbV9tb2RlX3QpOworCWludCAoKnBoeV9yZWFkKSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICosIGxvbmcgcGh5LCBsb25nIHJlZywgdTMyICopOworCWludCAoKnBoeV93cml0ZSkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBsb25nIHBoeSwgbG9uZyByZWcsIHUzMiB2YWwpOworCWludCAoKmluaXRfcG9ydCkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqLCBpbnQpOworCXZvaWQgKCppbml0X25pdSkgKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqKTsKKwlpbnQgKCpzdG9wX3BvcnQpIChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgaW50KTsKK307CisKK2V4dGVybiBjaGFyIG5ldHhlbl9uaWNfZHJpdmVyX25hbWVbXTsKKworaW50IG5ldHhlbl9uaXVfeGdiZV9lbmFibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgIGludCBwb3J0KTsKK2ludCBuZXR4ZW5fbml1X2diZV9lbmFibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgaW50IHBvcnQpOworaW50IG5ldHhlbl9uaXVfeGdiZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgaW50IHBvcnQpOworaW50IG5ldHhlbl9uaXVfZ2JlX2Rpc2FibGVfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgIGludCBwb3J0KTsKK2ludCBuZXR4ZW5fbml1X3hnYmVfY2xlYXJfcGh5X2ludGVycnVwdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgaW50IHBvcnQpOworaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJaW50IHBvcnQpOwordm9pZCBuZXR4ZW5fbmljX3hnYmVfaGFuZGxlX3BoeV9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG5ldHhlbl9uaWNfZ2JlX2hhbmRsZV9waHlfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBuZXR4ZW5fbml1X2diZV9zZXRfbWlpX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCwKKwkJCQkgbG9uZyBlbmFibGUpOwordm9pZCBuZXR4ZW5fbml1X2diZV9zZXRfZ21paV9tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQsCisJCQkJICBsb25nIGVuYWJsZSk7CitpbnQgbmV0eGVuX25pdV9nYmVfcGh5X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBsb25nIHBoeSwgbG9uZyByZWcsCisJCQkgICAgX19sZTMyICogcmVhZHZhbCk7CitpbnQgbmV0eGVuX25pdV9nYmVfcGh5X3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgbG9uZyBwaHksCisJCQkgICAgIGxvbmcgcmVnLCBfX2xlMzIgdmFsKTsKKworLyogRnVuY3Rpb25zIGF2YWlsYWJsZSBmcm9tIG5ldHhlbl9uaWNfaHcuYyAqLworaW50IG5ldHhlbl9uaWNfc2V0X210dV94Z2Ioc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0LCBpbnQgbmV3X210dSk7CitpbnQgbmV0eGVuX25pY19zZXRfbXR1X2diKHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCwgaW50IG5ld19tdHUpOwordm9pZCBuZXR4ZW5fbmljX2luaXRfbml1X2diKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgd25kdyk7Cit2b2lkIG5ldHhlbl9uaWNfcmVnX3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdTMyIHZhbCk7CitpbnQgbmV0eGVuX25pY19yZWdfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpOwordm9pZCBuZXR4ZW5fbmljX3dyaXRlX3cwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgdmFsdWUpOwordm9pZCBuZXR4ZW5fbmljX3JlYWRfdzAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgaW5kZXgsIHUzMiAqIHZhbHVlKTsKKworaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBuZXR4ZW5fbmljX2h3X3JlYWRfd3goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB2b2lkICpkYXRhLAorCQkJICBpbnQgbGVuKTsKK2ludCBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdm9pZCAqZGF0YSwKKwkJCSAgIGludCBsZW4pOwordm9pZCBuZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZiwgaW50IGRhdGEpOworCisvKiBGdW5jdGlvbnMgZnJvbSBuZXR4ZW5fbmljX2luaXQuYyAqLwordm9pZCBuZXR4ZW5fcGhhbnRvbV9pbml0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBlZ3R1bmVfdmFsKTsKK3ZvaWQgbmV0eGVuX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgdmVyYm9zZSk7CitpbnQgbmV0eGVuX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50ICp2YWxwKTsKK2ludCBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGRhdGEpOworaW50IG5ldHhlbl9yb21fc2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcik7CitpbnQgbmV0eGVuX2RvX3JvbV9zZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKTsKKworLyogRnVuY3Rpb25zIGZyb20gbmV0eGVuX25pY19pc3IuYyAqLwordm9pZCBuZXR4ZW5fbmljX2lzcl9vdGhlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBuZXR4ZW5faW5kaWNhdGVfbGlua19zdGF0dXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcG9ydCwKKwkJCQkgdTMyIGxpbmspOwordm9pZCBuZXR4ZW5faGFuZGxlX3BvcnRfaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHBvcnQsCisJCQkgICAgdTMyIGVuYWJsZSk7Cit2b2lkIG5ldHhlbl9uaWNfc3RvcF9hbGxfcG9ydHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9zdyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX2h3KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkICpuZXR4ZW5fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzeiwgZG1hX2FkZHJfdCAqIHB0ciwKKwkJICAgc3RydWN0IHBjaV9kZXYgKip1c2VkX2Rldik7Cit2b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2luaXRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG5ldHhlbl90c29fY2hlY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgICBzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IG5ldHhlbl9uaWNfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK2ludAorbmV0eGVuX25pY19kb19pb2N0bChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgKnVfZGF0YSwKKwkJICAgIHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCk7CitpbnQgbmV0eGVuX25pY19yeF9oYXNfd29yayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9uaWNfdHhfaGFzX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2sodW5zaWduZWQgbG9uZyB2KTsKK3ZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjdHgsCisJCQkgICAgdTMyIHJpbmdpZCk7Cit2b2lkIG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit1MzIgbmV0eGVuX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY3R4LCBpbnQgbWF4KTsKK3ZvaWQgbmV0eGVuX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitpbnQgbmV0eGVuX25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKK2ludCBuZXR4ZW5fbmljX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCk7CitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0eGVuX25pY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2Rpc2FibGVfaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKgorCSAqIElTUl9JTlRfTUFTSzogQ2FuIGJlIHJlYWQgZnJvbSB3aW5kb3cgMCBvciAxLgorCSAqLworCXdyaXRlbCgweDdmZiwgUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwgSVNSX0lOVF9NQVNLKSk7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIG1hc2s7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJY2FzZSBORVRYRU5fTklDX0dCRToKKwkJbWFzayA9IDB4NzdiOworCQlicmVhazsKKwljYXNlIE5FVFhFTl9OSUNfWEdCRToKKwkJbWFzayA9IDB4NzdmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltYXNrID0gMHg3ZmY7CisJCWJyZWFrOworCX0KKworCXdyaXRlbChtYXNrLCBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLCBJU1JfSU5UX01BU0spKTsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkpIHsKKwkJbWFzayA9IDB4YmZmOworCQl3cml0ZWwobWFzaywgUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKKwkJCQkJCSAgICAgSVNSX0lOVF9UQVJHRVRfTUFTSykpOworCX0KK30KKworLyoKKyAqIE5ldFhlbiBCb2FyZCBpbmZvcm1hdGlvbgorICovCisKKyNkZWZpbmUgTkVUWEVOX01BWF9TSE9SVF9OQU1FIDE2CitzdHJ1Y3QgbmV0eGVuX2JyZGluZm8geworCW5ldHhlbl9icmR0eXBlX3QgYnJkdHlwZTsJLyogdHlwZSBvZiBib2FyZCAqLworCWxvbmcgcG9ydHM7CQkvKiBtYXggbm8gb2YgcGh5c2ljYWwgcG9ydHMgKi8KKwljaGFyIHNob3J0X25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0eGVuX2JyZGluZm8gbmV0eGVuX2JvYXJkc1tdID0geworCXtORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQsIDEsICJYR2IgQ1g0In0sCisJe05FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVosIDEsICJYR2IgSE1FWiJ9LAorCXtORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaLCAyLCAiWEdiIElNRVoifSwKKwl7TkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEcsIDEsICJYR2IgWEZQIn0sCisJe05FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEcsIDQsICJRdWFkIEdiIn0sCisJe05FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMkcsIDIsICJEdWFsIEdiIn0sCit9OworCisjZGVmaW5lIE5VTV9TVVBQT1JURURfQk9BUkRTIChzaXplb2YobmV0eGVuX2JvYXJkcykvc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYnJkaW5mbykpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYnJkX3BvcnRfYnlfdHlwZSh1MzIgdHlwZSwgaW50ICpwb3J0cykKK3sKKwlpbnQgaSwgZm91bmQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fU1VQUE9SVEVEX0JPQVJEUzsgKytpKSB7CisJCWlmIChuZXR4ZW5fYm9hcmRzW2ldLmJyZHR5cGUgPT0gdHlwZSkgeworCQkJKnBvcnRzID0gbmV0eGVuX2JvYXJkc1tpXS5wb3J0czsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQpCisJCSpwb3J0cyA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYnJkX25hbWVfYnlfdHlwZSh1MzIgdHlwZSwgY2hhciAqbmFtZSkKK3sKKwlpbnQgaSwgZm91bmQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1fU1VQUE9SVEVEX0JPQVJEUzsgKytpKSB7CisJCWlmIChuZXR4ZW5fYm9hcmRzW2ldLmJyZHR5cGUgPT0gdHlwZSkgeworCQkJc3RyY3B5KG5hbWUsIG5ldHhlbl9ib2FyZHNbaV0uc2hvcnRfbmFtZSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJfQorCWlmICghZm91bmQpCisJCW5hbWUgPSAiVW5rbm93biI7Cit9CisKK2ludCBuZXR4ZW5faXNfZmxhc2hfc3VwcG9ydGVkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2dldF9mbGFzaF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBtYWNbXSk7CisKK2V4dGVybiB2b2lkIG5ldHhlbl9jaGFuZ2VfcmluZ3BhcmFtKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gaW50IG5ldHhlbl9yb21fZmFzdF9yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsCisJCQkJaW50ICp2YWxwKTsKKworZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBuZXR4ZW5fbmljX2V0aHRvb2xfb3BzOworCisjZW5kaWYJCQkJLyogX19ORVRYRU5fTklDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5MTRhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMCwwICsxLDc0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKiAKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIAorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICAgIGluZm9AbmV0eGVuLmNvbQorICogTmV0WGVuLAorICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAorICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKgorICoKKyAqIGV0aHRvb2wgc3VwcG9ydCBmb3IgbmV0eGVuIG5pYworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCisjaW5jbHVkZSAibmV0eGVuX25pYy5oIgorI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKKyNpbmNsdWRlICJuZXR4ZW5fbmljX2lvY3RsLmgiCisKK3N0cnVjdCBuZXR4ZW5fbmljX3N0YXRzIHsKKwljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CisJaW50IHNpemVvZl9zdGF0OworCWludCBzdGF0X29mZnNldDsKK307CisKKyNkZWZpbmUgTkVUWEVOX05JQ19TVEFUKG0pIHNpemVvZigoKHN0cnVjdCBuZXR4ZW5fcG9ydCAqKTApLT5tKSwgXAorCQkJb2Zmc2V0b2Yoc3RydWN0IG5ldHhlbl9wb3J0LCBtKQorCisjZGVmaW5lIE5FVFhFTl9OSUNfUE9SVF9XSU5ET1cgMHgxMDAwMAorI2RlZmluZSBORVRYRU5fTklDX0lOVkFMSURfREFUQSAweERFQURCRUVGCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0eGVuX25pY19zdGF0cyBuZXR4ZW5fbmljX2dzdHJpbmdzX3N0YXRzW10gPSB7CisJeyJyY3ZkX2JhZF9za2IiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMucmN2ZGJhZHNrYil9LAorCXsieG1pdF9jYWxsZWQiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMueG1pdGNhbGxlZCl9LAorCXsieG1pdGVkX2ZyYW1lcyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy54bWl0ZWRmcmFtZXMpfSwKKwl7InhtaXRfZmluaXNoZWQiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMueG1pdGZpbmlzaGVkKX0sCisJeyJiYWRfc2tiX2xlbiIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5iYWRza2JsZW4pfSwKKwl7Im5vX2NtZF9kZXNjIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLm5vY21kZGVzY3JpcHRvcil9LAorCXsicG9sbGVkIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnBvbGxlZCl9LAorCXsidXBoYXBweSIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy51cGhhcHB5KX0sCisJeyJ1cGRyb3BwZWQiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudXBkcm9wcGVkKX0sCisJeyJ1cGxjb25nIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnVwbGNvbmcpfSwKKwl7InVwaGNvbmciLCBORVRYRU5fTklDX1NUQVQoc3RhdHMudXBoY29uZyl9LAorCXsidXBtY29uZyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy51cG1jb25nKX0sCisJeyJ1cGR1bm5vIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnVwZHVubm8pfSwKKwl7InNrYl9mcmVlZCIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5za2JmcmVlZCl9LAorCXsidHhfZHJvcHBlZCIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy50eGRyb3BwZWQpfSwKKwl7InR4X251bGxfc2tiIiwgTkVUWEVOX05JQ19TVEFUKHN0YXRzLnR4bnVsbHNrYil9LAorCXsiY3N1bW1lZCIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5jc3VtbWVkKX0sCisJeyJub19yY3YiLCBORVRYRU5fTklDX1NUQVQoc3RhdHMubm9fcmN2KX0sCisJeyJyeF9ieXRlcyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy5yeGJ5dGVzKX0sCisJeyJ0eF9ieXRlcyIsIE5FVFhFTl9OSUNfU1RBVChzdGF0cy50eGJ5dGVzKX0sCit9OworCisjZGVmaW5lIE5FVFhFTl9OSUNfU1RBVFNfTEVOCVwKKwlzaXplb2YobmV0eGVuX25pY19nc3RyaW5nc19zdGF0cykgLyBzaXplb2Yoc3RydWN0IG5ldHhlbl9uaWNfc3RhdHMpCisKK3N0YXRpYyBjb25zdCBjaGFyIG5ldHhlbl9uaWNfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CisJIlJlZ2lzdGVyX1Rlc3Rfb2ZmbGluZSIsICJFRVBST01fVGVzdF9vZmZsaW5lIiwKKwkiSW50ZXJydXB0X1Rlc3Rfb2ZmbGluZSIsICJMb29wYmFja19UZXN0X29mZmxpbmUiLAorCSJMaW5rX1Rlc3Rfb25fb2ZmbGluZSIKK307CisKKyNkZWZpbmUgTkVUWEVOX05JQ19URVNUX0xFTiBzaXplb2YobmV0eGVuX25pY19nc3RyaW5nc190ZXN0KSAvIEVUSF9HU1RSSU5HX0xFTgorCisjZGVmaW5lIE5FVFhFTl9OSUNfUkVHU19DT1VOVCA0MgorI2RlZmluZSBORVRYRU5fTklDX1JFR1NfTEVOIChORVRYRU5fTklDX1JFR1NfQ09VTlQgKiBzaXplb2YoX19sZTMyKSkKKyNkZWZpbmUgTkVUWEVOX01BWF9FRVBST01fTEVOICAgMTAyNAorCitzdGF0aWMgaW50IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJaW50IG47CisKKwlpZiAoKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIDAsICZuKSA9PSAwKQorCSAgICAmJiAobiAmIE5FVFhFTl9ST01fUk9VTkRVUCkpIHsKKwkJbiAmPSB+TkVUWEVOX1JPTV9ST1VORFVQOworCQlpZiAobiA8IE5FVFhFTl9NQVhfRUVQUk9NX0xFTikKKwkJCXJldHVybiBuOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uaWNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJdTMyIGZ3X21ham9yID0gMDsKKwl1MzIgZndfbWlub3IgPSAwOworCXUzMiBmd19idWlsZCA9IDA7CisKKwlzdHJuY3B5KGRydmluZm8tPmRyaXZlciwgIm5ldHhlbl9uaWMiLCAzMik7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCwgMzIpOworCWZ3X21ham9yID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJICAgICAgTkVUWEVOX0ZXX1ZFUlNJT05fTUFKT1IpKTsKKwlmd19taW5vciA9IHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsCisJCQkJCSAgICAgIE5FVFhFTl9GV19WRVJTSU9OX01JTk9SKSk7CisJZndfYnVpbGQgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBORVRYRU5fRldfVkVSU0lPTl9TVUIpKTsKKwlzcHJpbnRmKGRydmluZm8tPmZ3X3ZlcnNpb24sICIlZC4lZC4lZCIsIGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQpOworCisJc3RybmNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUocG9ydC0+cGRldiksIDMyKTsKKwlkcnZpbmZvLT5uX3N0YXRzID0gTkVUWEVOX05JQ19TVEFUU19MRU47CisJZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gTkVUWEVOX05JQ19URVNUX0xFTjsKKwlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IE5FVFhFTl9OSUNfUkVHU19MRU47CisJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4oZGV2KTsKK30KKworc3RhdGljIGludAorbmV0eGVuX25pY19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbyA9ICZhZGFwdGVyLT5haHcuYm9hcmRjZmc7CisKKwkvKiByZWFkIHdoaWNoIG1vZGUgKi8KKwlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwkJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCSAgIFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCQkgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwpOworCisJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJICAgICBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJICAgICBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKKworCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQllY21kLT5zcGVlZCA9IHBvcnQtPmxpbmtfc3BlZWQ7CisJCQllY21kLT5kdXBsZXggPSBwb3J0LT5saW5rX2R1cGxleDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTzsJLyogbGluayBhYnNlbnQgKi8KKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEX1RQIHwKKwkJCQkgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCSAgIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwpOworCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEX1RQIHwKKwkJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwpOworCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKworCQllY21kLT5zcGVlZCA9IFNQRUVEXzEwMDAwOworCQllY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU87CisKKwllY21kLT5waHlfYWRkcmVzcyA9IHBvcnQtPnBvcnRudW07CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCisJc3dpdGNoICgobmV0eGVuX2JyZHR5cGVfdCkgYm9hcmRpbmZvLT5ib2FyZF90eXBlKSB7CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRzoKKwkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9BdXRvbmVnOworCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQ6CisJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CisJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFA7CisJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOworCQllY21kLT5hdXRvbmVnID0gKGJvYXJkaW5mby0+Ym9hcmRfdHlwZSA9PQorCQkJCSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19DWDQpID8KKwkJICAgIChBVVRPTkVHX0RJU0FCTEUpIDogKHBvcnQtPmxpbmtfYXV0b25lZyk7CisJCWJyZWFrOworCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSE1FWjoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6CisJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfTUlJOworCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX01JSTsKKwkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCWJyZWFrOworCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEc6CisJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfRklCUkU7CisJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfRklCUkU7CisJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIm5ldHhlbi1uaWM6IFVuc3VwcG9ydGVkIGJvYXJkIG1vZGVsICVkXG4iLAorCQkgICAgICAgKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSk7CisJCXJldHVybiAtRUlPOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJX19sZTMyIHN0YXR1czsKKworCS8qIHJlYWQgd2hpY2ggbW9kZSAqLworCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCQkvKiBhdXRvbmVnb3RpYXRpb24gKi8KKwkJaWYgKGFkYXB0ZXItPm9wcy0+cGh5X3dyaXRlCisJCSAgICAmJiBhZGFwdGVyLT5vcHMtPnBoeV93cml0ZShhZGFwdGVyLCBwb3J0LT5wb3J0bnVtLAorCQkJCQkgICAgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0FVVE9ORUcsCisJCQkJCSAgICAgICAoX19sZTMyKSBlY21kLT5hdXRvbmVnKSAhPSAwKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCXBvcnQtPmxpbmtfYXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CisKKwkJaWYgKGFkYXB0ZXItPm9wcy0+cGh5X3JlYWQKKwkJICAgICYmIGFkYXB0ZXItPm9wcy0+cGh5X3JlYWQoYWRhcHRlciwgcG9ydC0+cG9ydG51bSwKKwkJCQkJICAgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMsCisJCQkJCSAgICAgICZzdGF0dXMpICE9IDApCisJCQlyZXR1cm4gLUVJTzsKKworCQkvKiBzcGVlZCAqLworCQlzd2l0Y2ggKGVjbWQtPnNwZWVkKSB7CisJCWNhc2UgU1BFRURfMTA6CisJCQluZXR4ZW5fc2V0X3BoeV9zcGVlZChzdGF0dXMsIDApOworCQkJYnJlYWs7CisJCWNhc2UgU1BFRURfMTAwOgorCQkJbmV0eGVuX3NldF9waHlfc3BlZWQoc3RhdHVzLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDA6CisJCQluZXR4ZW5fc2V0X3BoeV9zcGVlZChzdGF0dXMsIDIpOworCQkJYnJlYWs7CisJCX0KKwkJLyogc2V0IGR1cGxleCBtb2RlICovCisJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpCisJCQluZXR4ZW5fY2xlYXJfcGh5X2R1cGxleChzdGF0dXMpOworCQlpZiAoZWNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJbmV0eGVuX3NldF9waHlfZHVwbGV4KHN0YXR1cyk7CisJCWlmIChhZGFwdGVyLT5vcHMtPnBoeV93cml0ZQorCQkgICAgJiYgYWRhcHRlci0+b3BzLT5waHlfd3JpdGUoYWRhcHRlciwgcG9ydC0+cG9ydG51bSwKKwkJCQkJICAgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAorCQkJCQkgICAgICAgKigoaW50ICopJnN0YXR1cykpICE9IDApCisJCQlyZXR1cm4gLUVJTzsKKwkJZWxzZSB7CisJCQlwb3J0LT5saW5rX3NwZWVkID0gZWNtZC0+c3BlZWQ7CisJCQlwb3J0LT5saW5rX2R1cGxleCA9IGVjbWQtPmR1cGxleDsKKwkJfQorCX0gZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWRldi0+c3RvcChkZXYpOworCQlkZXYtPm9wZW4oZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gTkVUWEVOX05JQ19SRUdTX0xFTjsKK30KKworc3RydWN0IG5ldHhlbl9uaXVfcmVncyB7CisJX19sZTMyIHJlZ1tORVRYRU5fTklDX1JFR1NfQ09VTlRdOworfTsKKworc3RhdGljIHN0cnVjdCBuZXR4ZW5fbml1X3JlZ3Mgbml1X3JlZ2lzdGVyc1tdID0geworCXsKKwkgLyogR0IgTW9kZSAqLworCSB7CisJICBORVRYRU5fTklVX0dCX1NFUkRFU19SRVNFVCwKKwkgIE5FVFhFTl9OSVVfR0IwX01JSV9NT0RFLAorCSAgTkVUWEVOX05JVV9HQjFfTUlJX01PREUsCisJICBORVRYRU5fTklVX0dCMl9NSUlfTU9ERSwKKwkgIE5FVFhFTl9OSVVfR0IzX01JSV9NT0RFLAorCSAgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFLAorCSAgTkVUWEVOX05JVV9HQjFfR01JSV9NT0RFLAorCSAgTkVUWEVOX05JVV9HQjJfR01JSV9NT0RFLAorCSAgTkVUWEVOX05JVV9HQjNfR01JSV9NT0RFLAorCSAgTkVUWEVOX05JVV9SRU1PVEVfTE9PUEJBQ0ssCisJICBORVRYRU5fTklVX0dCMF9IQUxGX0RVUExFWCwKKwkgIE5FVFhFTl9OSVVfR0IxX0hBTEZfRFVQTEVYLAorCSAgTkVUWEVOX05JVV9SRVNFVF9TWVNfRklGT1MsCisJICBORVRYRU5fTklVX0dCX0NSQ19EUk9QLAorCSAgTkVUWEVOX05JVV9HQl9EUk9QX1dST05HQUREUiwKKwkgIE5FVFhFTl9OSVVfVEVTVF9NVVhfQ1RMLAorCisJICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwKKwkgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18xKDApLAorCSAgTkVUWEVOX05JVV9HQl9IQUxGX0RVUExFWF9DVFJMKDApLAorCSAgTkVUWEVOX05JVV9HQl9NQVhfRlJBTUVfU0laRSgwKSwKKwkgIE5FVFhFTl9OSVVfR0JfVEVTVF9SRUcoMCksCisJICBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTkZJRygwKSwKKwkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwKKwkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUigwKSwKKwkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ1RSTCgwKSwKKwkgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfU1RBVFVTKDApLAorCSAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9JTkRJQ0FURSgwKSwKKwkgIE5FVFhFTl9OSVVfR0JfSU5URVJGQUNFX0NUUkwoMCksCisJICBORVRYRU5fTklVX0dCX0lOVEVSRkFDRV9TVEFUVVMoMCksCisJICBORVRYRU5fTklVX0dCX1NUQVRJT05fQUREUl8wKDApLAorCSAgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMSgwKSwKKwkgIC0xLAorCSAgfQorCSB9LAorCXsKKwkgLyogWEcgTW9kZSAqLworCSB7CisJICBORVRYRU5fTklVX1hHX1NJTkdMRV9URVJNLAorCSAgTkVUWEVOX05JVV9YR19EUklWRV9ISSwKKwkgIE5FVFhFTl9OSVVfWEdfRFJJVkVfTE8sCisJICBORVRYRU5fTklVX1hHX0RUWCwKKwkgIE5FVFhFTl9OSVVfWEdfREVRLAorCSAgTkVUWEVOX05JVV9YR19XT1JEX0FMSUdOLAorCSAgTkVUWEVOX05JVV9YR19SRVNFVCwKKwkgIE5FVFhFTl9OSVVfWEdfUE9XRVJfRE9XTiwKKwkgIE5FVFhFTl9OSVVfWEdfUkVTRVRfUExMLAorCSAgTkVUWEVOX05JVV9YR19TRVJERVNfTE9PUEJBQ0ssCisJICBORVRYRU5fTklVX1hHX0RPX0JZVEVfQUxJR04sCisJICBORVRYRU5fTklVX1hHX1RYX0VOQUJMRSwKKwkgIE5FVFhFTl9OSVVfWEdfUlhfRU5BQkxFLAorCSAgTkVUWEVOX05JVV9YR19TVEFUVVMsCisJICBORVRYRU5fTklVX1hHX1BBVVNFX1RIUkVTSE9MRCwKKwkgIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18wLAorCSAgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEsCisJICBORVRYRU5fTklVX1hHRV9JUEcsCisJICBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSwKKwkgIE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wXzEsCisJICBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMV9MTywKKwkgIE5FVFhFTl9OSVVfWEdFX1NUQVRVUywKKwkgIE5FVFhFTl9OSVVfWEdFX01BWF9GUkFNRV9TSVpFLAorCSAgTkVUWEVOX05JVV9YR0VfUEFVU0VfRlJBTUVfVkFMVUUsCisJICBORVRYRU5fTklVX1hHRV9UWF9CWVRFX0NOVCwKKwkgIE5FVFhFTl9OSVVfWEdFX1RYX0ZSQU1FX0NOVCwKKwkgIE5FVFhFTl9OSVVfWEdFX1JYX0JZVEVfQ05ULAorCSAgTkVUWEVOX05JVV9YR0VfUlhfRlJBTUVfQ05ULAorCSAgTkVUWEVOX05JVV9YR0VfQUdHUl9FUlJPUl9DTlQsCisJICBORVRYRU5fTklVX1hHRV9NVUxUSUNBU1RfRlJBTUVfQ05ULAorCSAgTkVUWEVOX05JVV9YR0VfVU5JQ0FTVF9GUkFNRV9DTlQsCisJICBORVRYRU5fTklVX1hHRV9DUkNfRVJST1JfQ05ULAorCSAgTkVUWEVOX05JVV9YR0VfT1ZFUlNJWkVfRlJBTUVfRVJSLAorCSAgTkVUWEVOX05JVV9YR0VfVU5ERVJTSVpFX0ZSQU1FX0VSUiwKKwkgIE5FVFhFTl9OSVVfWEdFX0xPQ0FMX0VSUk9SX0NOVCwKKwkgIE5FVFhFTl9OSVVfWEdFX1JFTU9URV9FUlJPUl9DTlQsCisJICBORVRYRU5fTklVX1hHRV9DT05UUk9MX0NIQVJfQ05ULAorCSAgTkVUWEVOX05JVV9YR0VfUEFVU0VfRlJBTUVfQ05ULAorCSAgLTEsCisJICB9CisJIH0KK307CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnApCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCV9fbGUzMiBtb2RlLCAqcmVnc19idWZmID0gcDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJaW50IGksIHdpbmRvdzsKKworCW1lbXNldChwLCAwLCBORVRYRU5fTklDX1JFR1NfTEVOKTsKKwlyZWdzLT52ZXJzaW9uID0gKDEgPDwgMjQpIHwgKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA8PCAxNikgfAorCSAgICAocG9ydC0+cGRldiktPmRldmljZTsKKwkvKiB3aGljaCBtb2RlICovCisJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9NT0RFLCAmcmVnc19idWZmWzBdKTsKKwltb2RlID0gcmVnc19idWZmWzBdOworCisJLyogQ29tbW9uIHJlZ2lzdGVycyB0byBhbGwgdGhlIG1vZGVzICovCisJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9TVFJBUF9WQUxVRV9TQVZFX0hJR0hFUiwKKwkJCQkgICAmcmVnc19idWZmWzJdKTsKKwkvKiBHQi9YR0IgTW9kZSAqLworCW1vZGUgPSAobW9kZSAvIDIpIC0gMTsKKwl3aW5kb3cgPSAwOworCWlmIChtb2RlIDw9IDEpIHsKKwkJZm9yIChpID0gMzsgbml1X3JlZ2lzdGVyc1ttb2RlXS5yZWdbaSAtIDNdICE9IC0xOyBpKyspIHsKKwkJCS8qIEdCOiBwb3J0IHNwZWNpZmljIHJlZ2lzdGVycyAqLworCQkJaWYgKG1vZGUgPT0gMCAmJiBpID49IDE5KQorCQkJCXdpbmRvdyA9IHBvcnQtPnBvcnRudW0gKiBORVRYRU5fTklDX1BPUlRfV0lORE9XOworCisJCQlORVRYRU5fTklDX0xPQ0tFRF9SRUFEX1JFRyhuaXVfcmVnaXN0ZXJzW21vZGVdLgorCQkJCQkJICAgcmVnW2kgLSAzXSArIHdpbmRvdywKKwkJCQkJCSAgICZyZWdzX2J1ZmZbaV0pOworCQl9CisKKwl9Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9VQ0FTVCB8IFdBS0VfTUNBU1QgfCBXQUtFX0JDQVNUIHwgV0FLRV9NQUdJQzsKKwkvKiBvcHRpb25zIGNhbiBiZSBhZGRlZCBkZXBlbmRpbmcgdXBvbiB0aGUgbW9kZSAqLworCXdvbC0+d29sb3B0cyA9IDA7Cit9CisKK3N0YXRpYyB1MzIgbmV0eGVuX25pY19nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlfX2xlMzIgc3RhdHVzOworCisJLyogcmVhZCB3aGljaCBtb2RlICovCisJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJCWlmIChhZGFwdGVyLT5vcHMtPnBoeV9yZWFkCisJCSAgICAmJiBhZGFwdGVyLT5vcHMtPnBoeV9yZWFkKGFkYXB0ZXIsIHBvcnQtPnBvcnRudW0sCisJCQkJCSAgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAorCQkJCQkgICAgICAmc3RhdHVzKSAhPSAwKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UKKwkJCXJldHVybiAobmV0eGVuX2dldF9waHlfbGluayhzdGF0dXMpKTsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCQlpbnQgdmFsID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKSk7CisJCXJldHVybiB2YWwgPT0gWEdfTElOS19VUDsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwKKwkJICAgICAgdTggKiBieXRlcykKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJaW50IG9mZnNldDsKKworCWlmIChlZXByb20tPmxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVlcHJvbS0+bWFnaWMgPSAocG9ydC0+cGRldiktPnZlbmRvciB8ICgocG9ydC0+cGRldiktPmRldmljZSA8PCAxNik7CisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBlZXByb20tPmxlbjsgb2Zmc2V0KyspCisJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZAorCQkgICAgKGFkYXB0ZXIsICg4ICogb2Zmc2V0KSArIDgsIChpbnQgKillZXByb20tPmRhdGEpID09IC0xKQorCQkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlpbnQgaSwgajsKKworCXJpbmctPnJ4X3BlbmRpbmcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfUkNWX0NUWDsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBOVU1fUkNWX0RFU0NfUklOR1M7IGorKykKKwkJCXJpbmctPnJ4X3BlbmRpbmcgKz0KKwkJCSAgICBhZGFwdGVyLT5yZWN2X2N0eFtpXS5yY3ZfZGVzY1tqXS5yY3ZfcGVuZGluZzsKKwl9CisKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50OworCXJpbmctPnR4X21heF9wZW5kaW5nID0gYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7CisJcmluZy0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfbWluaV9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlfX2xlMzIgdmFsOworCisJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJCS8qIGdldCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydC0+cG9ydG51bSksCisJCQkJICAgKHUzMiAqKSAmIHZhbCk7CisJCXBhdXNlLT5yeF9wYXVzZSA9IG5ldHhlbl9nYl9nZXRfcnhfZmxvd2N0bCh2YWwpOworCQlwYXVzZS0+dHhfcGF1c2UgPSBuZXR4ZW5fZ2JfZ2V0X3R4X2Zsb3djdGwodmFsKTsKKwkJLyogZ2V0IGF1dG9uZWcgc2V0dGluZ3MgKi8KKwkJcGF1c2UtPmF1dG9uZWcgPSBwb3J0LT5saW5rX2F1dG9uZWc7CisJfQorfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlfX2xlMzIgdmFsOworCXVuc2lnbmVkIGludCBhdXRvbmVnOworCisJLyogcmVhZCBtb2RlICovCisJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJCS8qIHNldCBmbG93IGNvbnRyb2wgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydC0+cG9ydG51bSksCisJCQkJICAgKHUzMiAqKSAmIHZhbCk7CisJCWlmIChwYXVzZS0+dHhfcGF1c2UpCisJCQluZXR4ZW5fZ2JfdHhfZmxvd2N0bCh2YWwpOworCQllbHNlCisJCQluZXR4ZW5fZ2JfdW5zZXRfdHhfZmxvd2N0bCh2YWwpOworCQlpZiAocGF1c2UtPnJ4X3BhdXNlKQorCQkJbmV0eGVuX2diX3J4X2Zsb3djdGwodmFsKTsKKwkJZWxzZQorCQkJbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwodmFsKTsKKworCQluZXR4ZW5fbmljX3dyaXRlX3cwKGFkYXB0ZXIsCisJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQtPnBvcnRudW0pLAorCQkJCSAgICAqKHUzMiAqKSAoJnZhbCkpOworCQkvKiBzZXQgYXV0b25lZyAqLworCQlhdXRvbmVnID0gcGF1c2UtPmF1dG9uZWc7CisJCWlmIChhZGFwdGVyLT5vcHMtPnBoeV93cml0ZQorCQkgICAgJiYgYWRhcHRlci0+b3BzLT5waHlfd3JpdGUoYWRhcHRlciwgcG9ydC0+cG9ydG51bSwKKwkJCQkJICAgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9BVVRPTkVHLAorCQkJCQkgICAgICAgKF9fbGUzMikgYXV0b25lZykgIT0gMCkKKwkJCXJldHVybiAtRUlPOworCQllbHNlIHsKKwkJCXBvcnQtPmxpbmtfYXV0b25lZyA9IHBhdXNlLT5hdXRvbmVnOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW50IG5ldHhlbl9uaWNfcmVnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJdTMyIGRhdGFfcmVhZCwgZGF0YV93cml0dGVuLCBzYXZlOworCV9fbGUzMiBtb2RlOworCisJLyogCisJICogZmlyc3QgdGVzdCB0aGUgIlJlYWQgT25seSIgcmVnaXN0ZXJzIGJ5IHdyaXRpbmcgd2hpY2ggbW9kZQorCSAqLworCW5ldHhlbl9uaWNfcmVhZF93MChhZGFwdGVyLCBORVRYRU5fTklVX01PREUsICZtb2RlKTsKKwlpZiAobmV0eGVuX2dldF9uaXVfZW5hYmxlX2dlKG1vZGUpKSB7CS8qIEdCIE1vZGUgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9TVEFUVVMocG9ydC0+cG9ydG51bSksCisJCQkJICAgJmRhdGFfcmVhZCk7CisKKwkJc2F2ZSA9IGRhdGFfcmVhZDsKKwkJaWYgKGRhdGFfcmVhZCkKKwkJCWRhdGFfd3JpdHRlbiA9IGRhdGFfcmVhZCAmIE5FVFhFTl9OSUNfSU5WQUxJRF9EQVRBOworCQllbHNlCisJCQlkYXRhX3dyaXR0ZW4gPSBORVRYRU5fTklDX0lOVkFMSURfREFUQTsKKwkJbmV0eGVuX25pY193cml0ZV93MChhZGFwdGVyLAorCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX1NUQVRVUyhwb3J0LT4KKwkJCQkJCQkJICBwb3J0bnVtKSwKKwkJCQkgICAgZGF0YV93cml0dGVuKTsKKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9TVEFUVVMocG9ydC0+cG9ydG51bSksCisJCQkJICAgJmRhdGFfcmVhZCk7CisKKwkJaWYgKGRhdGFfd3JpdHRlbiA9PSBkYXRhX3JlYWQpIHsKKwkJCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfU1RBVFVTKHBvcnQtPgorCQkJCQkJCQkJICBwb3J0bnVtKSwKKwkJCQkJICAgIHNhdmUpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIG5ldHhlbl9uaXVfZ2JfbWlpX21nbXRfaW5kaWNhdG9ycyBpcyByZWFkIG9ubHkgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9JTkRJQ0FURShwb3J0LT4KKwkJCQkJCQkJICAgcG9ydG51bSksCisJCQkJICAgJmRhdGFfcmVhZCk7CisKKwkJc2F2ZSA9IGRhdGFfcmVhZDsKKwkJaWYgKGRhdGFfcmVhZCkKKwkJCWRhdGFfd3JpdHRlbiA9IGRhdGFfcmVhZCAmIE5FVFhFTl9OSUNfSU5WQUxJRF9EQVRBOworCQllbHNlCisJCQlkYXRhX3dyaXR0ZW4gPSBORVRYRU5fTklDX0lOVkFMSURfREFUQTsKKwkJbmV0eGVuX25pY193cml0ZV93MChhZGFwdGVyLAorCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0lORElDQVRFKHBvcnQtPgorCQkJCQkJCQkgICAgcG9ydG51bSksCisJCQkJICAgIGRhdGFfd3JpdHRlbik7CisKKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9JTkRJQ0FURShwb3J0LT4KKwkJCQkJCQkJICAgcG9ydG51bSksCisJCQkJICAgJmRhdGFfcmVhZCk7CisKKwkJaWYgKGRhdGFfd3JpdHRlbiA9PSBkYXRhX3JlYWQpIHsKKwkJCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfSU5ESUNBVEUKKwkJCQkJICAgIChwb3J0LT5wb3J0bnVtKSwgc2F2ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIG5ldHhlbl9uaXVfZ2JfaW50ZXJmYWNlX3N0YXR1cyBpcyByZWFkIG9ubHkgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsCisJCQkJICAgTkVUWEVOX05JVV9HQl9JTlRFUkZBQ0VfU1RBVFVTKHBvcnQtPgorCQkJCQkJCQkgIHBvcnRudW0pLAorCQkJCSAgICZkYXRhX3JlYWQpOworCisJCXNhdmUgPSBkYXRhX3JlYWQ7CisJCWlmIChkYXRhX3JlYWQpCisJCQlkYXRhX3dyaXR0ZW4gPSBkYXRhX3JlYWQgJiBORVRYRU5fTklDX0lOVkFMSURfREFUQTsKKwkJZWxzZQorCQkJZGF0YV93cml0dGVuID0gTkVUWEVOX05JQ19JTlZBTElEX0RBVEE7CisJCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwKKwkJCQkgICAgTkVUWEVOX05JVV9HQl9JTlRFUkZBQ0VfU1RBVFVTKHBvcnQtPgorCQkJCQkJCQkgICBwb3J0bnVtKSwKKwkJCQkgICAgZGF0YV93cml0dGVuKTsKKworCQluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwKKwkJCQkgICBORVRYRU5fTklVX0dCX0lOVEVSRkFDRV9TVEFUVVMocG9ydC0+CisJCQkJCQkJCSAgcG9ydG51bSksCisJCQkJICAgJmRhdGFfcmVhZCk7CisKKwkJaWYgKGRhdGFfd3JpdHRlbiA9PSBkYXRhX3JlYWQpIHsKKwkJCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9OSVVfR0JfSU5URVJGQUNFX1NUQVRVUworCQkJCQkgICAgKHBvcnQtPnBvcnRudW0pLCBzYXZlKTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwl9CQkJLyogR0IgTW9kZSAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5ldHhlbl9uaWNfZGlhZ190ZXN0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIE5FVFhFTl9OSUNfVEVTVF9MRU47Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwKKwkJICAgICB1NjQgKiBkYXRhKQoreworCWlmIChldGhfdGVzdC0+ZmxhZ3MgPT0gRVRIX1RFU1RfRkxfT0ZGTElORSkgewkvKiBvZmZsaW5lIHRlc3RzICovCisJCS8qIGxpbmsgdGVzdCAqLworCQlpZiAoIShkYXRhWzRdID0gKHU2NCkgbmV0eGVuX25pY19nZXRfbGluayhkZXYpKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCWRldi0+c3RvcChkZXYpOworCisJCS8qIHJlZ2lzdGVyIHRlc3RzICovCisJCWlmICghKGRhdGFbMF0gPSBuZXR4ZW5fbmljX3JlZ190ZXN0KGRldikpKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwkJLyogb3RoZXIgdGVzdHMgcGFzcyBhcyBvZiBub3cgKi8KKwkJZGF0YVsxXSA9IGRhdGFbMl0gPSBkYXRhWzNdID0gMTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCWRldi0+b3BlbihkZXYpOworCX0gZWxzZSB7CQkvKiBvbmxpbmUgdGVzdHMgKi8KKwkJLyogbGluayB0ZXN0ICovCisJCWlmICghKGRhdGFbNF0gPSAodTY0KSBuZXR4ZW5fbmljX2dldF9saW5rKGRldikpKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQkvKiBvdGhlciB0ZXN0cyBwYXNzIGJ5IGRlZmF1bHQgKi8KKwkJZGF0YVswXSA9IGRhdGFbMV0gPSBkYXRhWzJdID0gZGF0YVszXSA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJaW50IGluZGV4OworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQltZW1jcHkoZGF0YSwgKm5ldHhlbl9uaWNfZ3N0cmluZ3NfdGVzdCwKKwkJICAgICAgIE5FVFhFTl9OSUNfVEVTVF9MRU4gKiBFVEhfR1NUUklOR19MRU4pOworCQlicmVhazsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTkVUWEVOX05JQ19TVEFUU19MRU47IGluZGV4KyspIHsKKwkJCW1lbWNweShkYXRhICsgaW5kZXggKiBFVEhfR1NUUklOR19MRU4sCisJCQkgICAgICAgbmV0eGVuX25pY19nc3RyaW5nc19zdGF0c1tpbmRleF0uc3RhdF9zdHJpbmcsCisJCQkgICAgICAgRVRIX0dTVFJJTkdfTEVOKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gTkVUWEVOX05JQ19TVEFUU19MRU47Cit9CisKK3N0YXRpYyB2b2lkCituZXR4ZW5fbmljX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpbmRleDsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5FVFhFTl9OSUNfU1RBVFNfTEVOOyBpbmRleCsrKSB7CisJCWNoYXIgKnAgPQorCQkgICAgKGNoYXIgKilwb3J0ICsgbmV0eGVuX25pY19nc3RyaW5nc19zdGF0c1tpbmRleF0uc3RhdF9vZmZzZXQ7CisJCWRhdGFbaW5kZXhdID0KKwkJICAgIChuZXR4ZW5fbmljX2dzdHJpbmdzX3N0YXRzW2luZGV4XS5zaXplb2Zfc3RhdCA9PQorCQkgICAgIHNpemVvZih1NjQpKSA/ICoodTY0ICopIHAgOiAqKHUzMiAqKSBwOworCX0KKworfQorCitzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0eGVuX25pY19ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzID0gbmV0eGVuX25pY19nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncyA9IG5ldHhlbl9uaWNfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IG5ldHhlbl9uaWNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyA9IG5ldHhlbl9uaWNfZ2V0X3JlZ3MsCisJLmdldF93b2wgPSBuZXR4ZW5fbmljX2dldF93b2wsCisJLmdldF9saW5rID0gbmV0eGVuX25pY19nZXRfbGluaywKKwkuZ2V0X2VlcHJvbV9sZW4gPSBuZXR4ZW5fbmljX2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tID0gbmV0eGVuX25pY19nZXRfZWVwcm9tLAorCS5nZXRfcmluZ3BhcmFtID0gbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtLAorCS5nZXRfcGF1c2VwYXJhbSA9IG5ldHhlbl9uaWNfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKwkuc2VsZl90ZXN0X2NvdW50ID0gbmV0eGVuX25pY19kaWFnX3Rlc3RfY291bnQsCisJLnNlbGZfdGVzdCA9IG5ldHhlbl9uaWNfZGlhZ190ZXN0LAorCS5nZXRfc3RyaW5ncyA9IG5ldHhlbl9uaWNfZ2V0X3N0cmluZ3MsCisJLmdldF9zdGF0c19jb3VudCA9IG5ldHhlbl9uaWNfZ2V0X3N0YXRzX2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9wZXJtX2FkZHIgPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmM2ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaGRyLmgKQEAgLTAsMCArMSw2NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICogCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiAKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgICBpbmZvQG5ldHhlbi5jb20KKyAqIE5ldFhlbiwKKyAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKKyAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICovCisKKyNpZm5kZWYgX19ORVRYRU5fTklDX0hEUl9IXworI2RlZmluZSBfX05FVFhFTl9OSUNfSERSX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4JCS8qIGZvciBtZW1zZXQgKi8KKworLyoKKyAqIFRoZSBiYXNpYyB1bml0IG9mIGFjY2VzcyB3aGVuIHJlYWRpbmcvd3JpdGluZyBjb250cm9sIHJlZ2lzdGVycy4KKyAqLworCit0eXBlZGVmIF9fbGUzMiBuZXR4ZW5fY3Jid29yZF90OwkvKiBzaW5nbGUgd29yZCBpbiBDUkIgc3BhY2UgKi8KKworZW51bSB7CisJTkVUWEVOX0hXX0gwX0NIX0hVQl9BRFIgPSAweDA1LAorCU5FVFhFTl9IV19IMV9DSF9IVUJfQURSID0gMHgwRSwKKwlORVRYRU5fSFdfSDJfQ0hfSFVCX0FEUiA9IDB4MDMsCisJTkVUWEVOX0hXX0gzX0NIX0hVQl9BRFIgPSAweDAxLAorCU5FVFhFTl9IV19INF9DSF9IVUJfQURSID0gMHgwNiwKKwlORVRYRU5fSFdfSDVfQ0hfSFVCX0FEUiA9IDB4MDcsCisJTkVUWEVOX0hXX0g2X0NIX0hVQl9BRFIgPSAweDA4Cit9OworCisvKiAgSHViIDAgKi8KK2VudW0geworCU5FVFhFTl9IV19NTl9DUkJfQUdUX0FEUiA9IDB4MTUsCisJTkVUWEVOX0hXX01TX0NSQl9BR1RfQURSID0gMHgyNQorfTsKKworLyogIEh1YiAxICovCitlbnVtIHsKKwlORVRYRU5fSFdfUFNfQ1JCX0FHVF9BRFIgPSAweDczLAorCU5FVFhFTl9IV19TU19DUkJfQUdUX0FEUiA9IDB4MjAsCisJTkVUWEVOX0hXX1JQTVgzX0NSQl9BR1RfQURSID0gMHgwYiwKKwlORVRYRU5fSFdfUU1TX0NSQl9BR1RfQURSID0gMHgwMCwKKwlORVRYRU5fSFdfU1FHUzBfQ1JCX0FHVF9BRFIgPSAweDAxLAorCU5FVFhFTl9IV19TUUdTMV9DUkJfQUdUX0FEUiA9IDB4MDIsCisJTkVUWEVOX0hXX1NRR1MyX0NSQl9BR1RfQURSID0gMHgwMywKKwlORVRYRU5fSFdfU1FHUzNfQ1JCX0FHVF9BRFIgPSAweDA0LAorCU5FVFhFTl9IV19DMkMwX0NSQl9BR1RfQURSID0gMHg1OCwKKwlORVRYRU5fSFdfQzJDMV9DUkJfQUdUX0FEUiA9IDB4NTksCisJTkVUWEVOX0hXX0MyQzJfQ1JCX0FHVF9BRFIgPSAweDVhLAorCU5FVFhFTl9IV19SUE1YMl9DUkJfQUdUX0FEUiA9IDB4MGEsCisJTkVUWEVOX0hXX1JQTVg0X0NSQl9BR1RfQURSID0gMHgwYywKKwlORVRYRU5fSFdfUlBNWDdfQ1JCX0FHVF9BRFIgPSAweDBmLAorCU5FVFhFTl9IV19SUE1YOV9DUkJfQUdUX0FEUiA9IDB4MTIsCisJTkVUWEVOX0hXX1NNQl9DUkJfQUdUX0FEUiA9IDB4MTgKK307CisKKy8qICBIdWIgMiAqLworZW51bSB7CisJTkVUWEVOX0hXX05JVV9DUkJfQUdUX0FEUiA9IDB4MzEsCisJTkVUWEVOX0hXX0kyQzBfQ1JCX0FHVF9BRFIgPSAweDE5LAorCU5FVFhFTl9IV19JMkMxX0NSQl9BR1RfQURSID0gMHgyOSwKKworCU5FVFhFTl9IV19TTl9DUkJfQUdUX0FEUiA9IDB4MTAsCisJTkVUWEVOX0hXX0kyUV9DUkJfQUdUX0FEUiA9IDB4MjAsCisJTkVUWEVOX0hXX0xQQ19DUkJfQUdUX0FEUiA9IDB4MjIsCisJTkVUWEVOX0hXX1JPTVVTQl9DUkJfQUdUX0FEUiA9IDB4MjEsCisJTkVUWEVOX0hXX1FNX0NSQl9BR1RfQURSID0gMHg2NiwKKwlORVRYRU5fSFdfU1FHMF9DUkJfQUdUX0FEUiA9IDB4NjAsCisJTkVUWEVOX0hXX1NRRzFfQ1JCX0FHVF9BRFIgPSAweDYxLAorCU5FVFhFTl9IV19TUUcyX0NSQl9BR1RfQURSID0gMHg2MiwKKwlORVRYRU5fSFdfU1FHM19DUkJfQUdUX0FEUiA9IDB4NjMsCisJTkVUWEVOX0hXX1JQTVgxX0NSQl9BR1RfQURSID0gMHgwOSwKKwlORVRYRU5fSFdfUlBNWDVfQ1JCX0FHVF9BRFIgPSAweDBkLAorCU5FVFhFTl9IV19SUE1YNl9DUkJfQUdUX0FEUiA9IDB4MGUsCisJTkVUWEVOX0hXX1JQTVg4X0NSQl9BR1RfQURSID0gMHgxMQorfTsKKworLyogIEh1YiAzICovCitlbnVtIHsKKwlORVRYRU5fSFdfUEhfQ1JCX0FHVF9BRFIgPSAweDFBLAorCU5FVFhFTl9IV19TUkVfQ1JCX0FHVF9BRFIgPSAweDUwLAorCU5FVFhFTl9IV19FR19DUkJfQUdUX0FEUiA9IDB4NTEsCisJTkVUWEVOX0hXX1JQTVgwX0NSQl9BR1RfQURSID0gMHgwOAorfTsKKworLyogIEh1YiA0ICovCitlbnVtIHsKKwlORVRYRU5fSFdfUEVHTjBfQ1JCX0FHVF9BRFIgPSAweDQwLAorCU5FVFhFTl9IV19QRUdOMV9DUkJfQUdUX0FEUiwKKwlORVRYRU5fSFdfUEVHTjJfQ1JCX0FHVF9BRFIsCisJTkVUWEVOX0hXX1BFR04zX0NSQl9BR1RfQURSLAorCU5FVFhFTl9IV19QRUdOSV9DUkJfQUdUX0FEUiwKKwlORVRYRU5fSFdfUEVHTkRfQ1JCX0FHVF9BRFIsCisJTkVUWEVOX0hXX1BFR05DX0NSQl9BR1RfQURSLAorCU5FVFhFTl9IV19QRUdSMF9DUkJfQUdUX0FEUiwKKwlORVRYRU5fSFdfUEVHUjFfQ1JCX0FHVF9BRFIsCisJTkVUWEVOX0hXX1BFR1IyX0NSQl9BR1RfQURSLAorCU5FVFhFTl9IV19QRUdSM19DUkJfQUdUX0FEUgorfTsKKworLyogIEh1YiA1ICovCitlbnVtIHsKKwlORVRYRU5fSFdfUEVHUzBfQ1JCX0FHVF9BRFIgPSAweDQwLAorCU5FVFhFTl9IV19QRUdTMV9DUkJfQUdUX0FEUiwKKwlORVRYRU5fSFdfUEVHUzJfQ1JCX0FHVF9BRFIsCisJTkVUWEVOX0hXX1BFR1MzX0NSQl9BR1RfQURSLAorCU5FVFhFTl9IV19QRUdTSV9DUkJfQUdUX0FEUiwKKwlORVRYRU5fSFdfUEVHU0RfQ1JCX0FHVF9BRFIsCisJTkVUWEVOX0hXX1BFR1NDX0NSQl9BR1RfQURSCit9OworCisvKiAgSHViIDYgKi8KK2VudW0geworCU5FVFhFTl9IV19DQVMwX0NSQl9BR1RfQURSID0gMHg0NiwKKwlORVRYRU5fSFdfQ0FTMV9DUkJfQUdUX0FEUiA9IDB4NDcsCisJTkVUWEVOX0hXX0NBUzJfQ1JCX0FHVF9BRFIgPSAweDQ4LAorCU5FVFhFTl9IV19DQVMzX0NSQl9BR1RfQURSID0gMHg0OSwKKwlORVRYRU5fSFdfTkNNX0NSQl9BR1RfQURSID0gMHgxNiwKKwlORVRYRU5fSFdfVE1SX0NSQl9BR1RfQURSID0gMHgxNywKKwlORVRYRU5fSFdfWERNQV9DUkJfQUdUX0FEUiA9IDB4MDUsCisJTkVUWEVOX0hXX09DTTBfQ1JCX0FHVF9BRFIgPSAweDA2LAorCU5FVFhFTl9IV19PQ00xX0NSQl9BR1RfQURSID0gMHgwNworfTsKKworLyogIEZsb2F0ZXJzIC0gbm9uIGV4aXN0ZW50IG1vZHVsZXMgKi8KKyNkZWZpbmUgTkVUWEVOX0hXX0VGQ19SUE1YMF9DUkJfQUdUX0FEUgkweDY3CisKKy8qICBUaGlzIGZpZWxkIGRlZmluZXMgUENJL1ggYWRyIFsyNToyMF0gb2YgYWdlbnRzIG9uIHRoZSBDUkIgKi8KK2VudW0geworCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1BIID0gMCwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QUywKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9NTiwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9NUywKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR1IxLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1NSRSwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9OSVUsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUU1OLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1NRTjAsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfU1FOMSwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9TUU4yLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1NRTjMsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUU1TLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1NRUzAsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfU1FTMSwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9TUVMyLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1NRUzMsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOMCwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR04xLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTjIsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOMywKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR05ELAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTkksCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdTMCwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR1MxLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHUzIsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdTMywKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR1NELAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHU0ksCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfU04sCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdSMiwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9FRywKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QSDIsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfUFMyLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX0NBTSwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9DQVMwLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX0NBUzEsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfQ0FTMiwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9DMkMwLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX0MyQzEsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfVElNUiwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR1IzLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVgxLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVgyLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVgzLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVg0LAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVg1LAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVg2LAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVg3LAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1hETUEsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfSTJRLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JPTVVTQiwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9DQVMzLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVgwLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVg4LAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1JQTVg5LAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX09DTTAsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfT0NNMSwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9TTUIsCisJTkVUWEVOX0hXX1BYX01BUF9DUkJfSTJDMCwKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9JMkMxLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX0xQQywKKwlORVRYRU5fSFdfUFhfTUFQX0NSQl9QR05DLAorCU5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHUjAKK307CisKKy8qICBUaGlzIGZpZWxkIGRlZmluZXMgQ1JCIGFkciBbMzE6MjBdIG9mIHRoZSBhZ2VudHMgKi8KKworI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX01OCVwKKwkoKE5FVFhFTl9IV19IMF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX01OX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BICVwKKwkoKE5FVFhFTl9IV19IMF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BIX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX01TCVwKKwkoKE5FVFhFTl9IV19IMF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX01TX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUFMJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUFNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfU1MJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfU1NfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDMJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUlBNWDNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUU1TCVwKKwkoKE5FVFhFTl9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1FNU19DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TUVMwCVwKKwkoKE5FVFhFTl9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1NRR1MwX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1NRUzEJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfU1FHUzFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfU1FTMglcCisJKChORVRYRU5fSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19TUUdTMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TUVMzCVwKKwkoKE5FVFhFTl9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1NRR1MzX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX0MyQzAJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfQzJDMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9DMkMxCVwKKwkoKE5FVFhFTl9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0MyQzFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDIJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUlBNWDJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDQJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUlBNWDRfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDcJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUlBNWDdfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDkJXAorCSgoTkVUWEVOX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUlBNWDlfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfU01CCVwKKwkoKE5FVFhFTl9IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1NNQl9DUkJfQUdUX0FEUikKKworI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX05JVQlcCisJKChORVRYRU5fSFdfSDJfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19OSVVfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfSTJDMAlcCisJKChORVRYRU5fSFdfSDJfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19JMkMwX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX0kyQzEJXAorCSgoTkVUWEVOX0hXX0gyX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfSTJDMV9DUkJfQUdUX0FEUikKKworI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1NSRQlcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19TUkVfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfRUcJXAorCSgoTkVUWEVOX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfRUdfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDAJXAorCSgoTkVUWEVOX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUlBNWDBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUU1OCVwKKwkoKE5FVFhFTl9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1FNX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjAJXAorCSgoTkVUWEVOX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfU1FHMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4xCVwKKwkoKE5FVFhFTl9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1NRRzFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfU1FOMglcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19TUUcyX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjMJXAorCSgoTkVUWEVOX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfU1FHM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMQlcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19SUE1YMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNQlcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19SUE1YNV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNglcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19SUE1YNl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YOAlcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19SUE1YOF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9DQVMwCVwKKwkoKE5FVFhFTl9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0NBUzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfQ0FTMQlcCisJKChORVRYRU5fSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19DQVMxX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX0NBUzIJXAorCSgoTkVUWEVOX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfQ0FTMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9DQVMzCVwKKwkoKE5FVFhFTl9IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0NBUzNfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05JCVwKKwkoKE5FVFhFTl9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR05JX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkQJXAorCSgoTkVUWEVOX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHTkRfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMAlcCisJKChORVRYRU5fSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19QRUdOMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04xCVwKKwkoKE5FVFhFTl9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR04xX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjIJXAorCSgoTkVUWEVOX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHTjJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdOMwlcCisJKChORVRYRU5fSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19QRUdOM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05DCVwKKwkoKE5FVFhFTl9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR05DX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjAJXAorCSgoTkVUWEVOX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHUjBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdSMQlcCisJKChORVRYRU5fSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19QRUdSMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1IyCVwKKwkoKE5FVFhFTl9IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR1IyX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjMJXAorCSgoTkVUWEVOX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHUjNfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NJCVwKKwkoKE5FVFhFTl9IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR1NJX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHU0QJXAorCSgoTkVUWEVOX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHU0RfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMAlcCisJKChORVRYRU5fSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19QRUdTMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MxCVwKKwkoKE5FVFhFTl9IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR1MxX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzIJXAorCSgoTkVUWEVOX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUEVHUzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfUEdTMwlcCisJKChORVRYRU5fSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IE5FVFhFTl9IV19QRUdTM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NDCVwKKwkoKE5FVFhFTl9IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1BFR1NDX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfQ0FNCVwKKwkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX05DTV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9USU1SCVwKKwkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1RNUl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9YRE1BCVwKKwkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX1hETUFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfU04JXAorCSgoTkVUWEVOX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfU05fQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfSTJRCVwKKwkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0kyUV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9ST01VU0IJXAorCSgoTkVUWEVOX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfUk9NVVNCX0NSQl9BR1RfQURSKQorI2RlZmluZSBORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSX09DTTAJXAorCSgoTkVUWEVOX0hXX0g2X0NIX0hVQl9BRFIgPDwgNykgfCBORVRYRU5fSFdfT0NNMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgTkVUWEVOX0hXX0NSQl9IVUJfQUdUX0FEUl9PQ00xCVwKKwkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX09DTTFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfTFBDCVwKKwkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0xQQ19DUkJfQUdUX0FEUikKKworLyoKKyAqIE1BWF9SQ1ZfQ1RYIDogVGhlIG51bWJlciBvZiByZWNlaXZlIGNvbnRleHRzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbgorICogdGhlIHBoYW50b20uCisgKi8KKyNkZWZpbmUgTUFYX1JDVl9DVFgJCQkxCisKKyNkZWZpbmUgTkVUWEVOX1NSRV9JTlRfU1RBVFVTCQkoTkVUWEVOX0NSQl9TUkUgKyAweDAwMDM0KQorI2RlZmluZSBORVRYRU5fU1JFX1BCSV9BQ1RJVkVfU1RBVFVTCShORVRYRU5fQ1JCX1NSRSArIDB4MDEwMTQpCisjZGVmaW5lIE5FVFhFTl9TUkVfTDFSRV9DVEwJCShORVRYRU5fQ1JCX1NSRSArIDB4MDMwMDApCisjZGVmaW5lIE5FVFhFTl9TUkVfTDJSRV9DVEwJCShORVRYRU5fQ1JCX1NSRSArIDB4MDUwMDApCisjZGVmaW5lIE5FVFhFTl9TUkVfQlVGX0NUTAkJKE5FVFhFTl9DUkJfU1JFICsgMHgwMTAwMCkKKworI2RlZmluZQlORVRYRU5fRE1BX0JBU0UoVSkJKE5FVFhFTl9DUkJfUENJWF9NRCArIDB4MjAwMDAgKyAoKFUpPDwxNikpCisjZGVmaW5lCU5FVFhFTl9ETUFfQ09NTUFORChVKQkoTkVUWEVOX0RNQV9CQVNFKFUpICsgMHgwMDAwOCkKKworI2RlZmluZSBORVRYRU5fSTJRX0NMUl9QQ0lfSEkJKE5FVFhFTl9DUkJfSTJRICsgMHgwMDAzNCkKKworI2RlZmluZSBQRUdfTkVUV09SS19CQVNFKE4pCShORVRYRU5fQ1JCX1BFR19ORVRfMCArICgoKE4pJjMpIDw8IDIwKSkKKyNkZWZpbmUgQ1JCX1JFR19FWF9QQwkJMHgzYworCisjZGVmaW5lIFJPTVVTQl9HTEIJKE5FVFhFTl9DUkJfUk9NVVNCICsgMHgwMDAwMCkKKyNkZWZpbmUgUk9NVVNCX1JPTQkoTkVUWEVOX0NSQl9ST01VU0IgKyAweDEwMDAwKQorCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfR0xCX1NUQVRVUwkoUk9NVVNCX0dMQiArIDB4MDAwNCkKKyNkZWZpbmUgTkVUWEVOX1JPTVVTQl9HTEJfU1dfUkVTRVQJKFJPTVVTQl9HTEIgKyAweDAwMDgpCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfR0xCX1BBRF9HUElPX0kJKFJPTVVTQl9HTEIgKyAweDAwMGMpCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfR0xCX0NBU19SU1QJKFJPTVVTQl9HTEIgKyAweDAwMzgpCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfR0xCX1RFU1RfTVVYX1NFTAkoUk9NVVNCX0dMQiArIDB4MDA0NCkKKyNkZWZpbmUgTkVUWEVOX1JPTVVTQl9HTEJfUEVHVFVORV9ET05FCShST01VU0JfR0xCICsgMHgwMDVjKQorI2RlZmluZSBORVRYRU5fUk9NVVNCX0dMQl9DSElQX0NMS19DVFJMCShST01VU0JfR0xCICsgMHgwMEE4KQorCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfR1BJTyhuKQkJKFJPTVVTQl9HTEIgKyAweDYwICsgKDQgKiAobikpKQorCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERQkoUk9NVVNCX1JPTSArIDB4MDAwNCkKKyNkZWZpbmUgTkVUWEVOX1JPTVVTQl9ST01fQUREUkVTUwkoUk9NVVNCX1JPTSArIDB4MDAwOCkKKyNkZWZpbmUgTkVUWEVOX1JPTVVTQl9ST01fV0RBVEEJCShST01VU0JfUk9NICsgMHgwMDBjKQorI2RlZmluZSBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQJKFJPTVVTQl9ST00gKyAweDAwMTApCisjZGVmaW5lIE5FVFhFTl9ST01VU0JfUk9NX0RVTU1ZX0JZVEVfQ05UIChST01VU0JfUk9NICsgMHgwMDE0KQorI2RlZmluZSBORVRYRU5fUk9NVVNCX1JPTV9SREFUQQkJKFJPTVVTQl9ST00gKyAweDAwMTgpCisKKy8qIExvY2sgSURzIGZvciBST00gbG9jayAqLworI2RlZmluZSBST01fTE9DS19EUklWRVIJMHgwZDQxNzM0MAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIERlZmluaXRpb25zIHNwZWNpZmljIHRvIE0yNVAgZmxhc2gKKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBJbnN0cnVjdGlvbnMKKyovCisjZGVmaW5lIE0yNVBfSU5TVFJfV1JFTgkJMHgwNgorI2RlZmluZSBNMjVQX0lOU1RSX1dSREkJCTB4MDQKKyNkZWZpbmUgTTI1UF9JTlNUUl9SRElECQkweDlmCisjZGVmaW5lIE0yNVBfSU5TVFJfUkRTUgkJMHgwNQorI2RlZmluZSBNMjVQX0lOU1RSX1dSU1IJCTB4MDEKKyNkZWZpbmUgTTI1UF9JTlNUUl9SRUFECQkweDAzCisjZGVmaW5lIE0yNVBfSU5TVFJfRkFTVF9SRUFECTB4MGIKKyNkZWZpbmUgTTI1UF9JTlNUUl9QUAkJMHgwMgorI2RlZmluZSBNMjVQX0lOU1RSX1NFCQkweGQ4CisjZGVmaW5lIE0yNVBfSU5TVFJfQkUJCTB4YzcKKyNkZWZpbmUgTTI1UF9JTlNUUl9EUAkJMHhiOQorI2RlZmluZSBNMjVQX0lOU1RSX1JFUwkJMHhhYgorCisvKiBhbGwgYXJlIDFNQiB3aW5kb3dzICovCisKKyNkZWZpbmUgTkVUWEVOX1BDSV9DUkJfV0lORE9XU0laRQkweDAwMTAwMDAwCisjZGVmaW5lIE5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhBKQlcCisJKE5FVFhFTl9QQ0lfQ1JCU1BBQ0UgKyAoQSkqTkVUWEVOX1BDSV9DUkJfV0lORE9XU0laRSkKKworI2RlZmluZSBORVRYRU5fQ1JCX05JVQkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX05JVSkKKyNkZWZpbmUgTkVUWEVOX0NSQl9TUkUJCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9TUkUpCisjZGVmaW5lIE5FVFhFTl9DUkJfUk9NVVNCCVwKKwlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUk9NVVNCKQorI2RlZmluZSBORVRYRU5fQ1JCX0kyUQkJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX0kyUSkKKyNkZWZpbmUgTkVUWEVOX0NSQl9NQVgJCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyg2NCkKKworI2RlZmluZSBORVRYRU5fQ1JCX1BDSVhfSE9TVAlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEgpCisjZGVmaW5lIE5FVFhFTl9DUkJfUENJWF9IT1NUMglORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEgyKQorI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfMAlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOMCkKKyNkZWZpbmUgTkVUWEVOX0NSQl9QRUdfTkVUXzEJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTjEpCisjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF8yCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9QR04yKQorI2RlZmluZSBORVRYRU5fQ1JCX1BFR19ORVRfMwlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUEdOMykKKyNkZWZpbmUgTkVUWEVOX0NSQl9QRUdfTkVUX0QJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX1BHTkQpCisjZGVmaW5lIE5FVFhFTl9DUkJfUEVHX05FVF9JCU5FVFhFTl9QQ0lfQ1JCX1dJTkRPVyhORVRYRU5fSFdfUFhfTUFQX0NSQl9QR05JKQorI2RlZmluZSBORVRYRU5fQ1JCX0REUl9ORVQJTkVUWEVOX1BDSV9DUkJfV0lORE9XKE5FVFhFTl9IV19QWF9NQVBfQ1JCX01OKQorCisjZGVmaW5lIE5FVFhFTl9DUkJfUENJWF9NRAlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfUFMpCisjZGVmaW5lIE5FVFhFTl9DUkJfUENJRQkJTkVUWEVOX0NSQl9QQ0lYX01ECisKKyNkZWZpbmUgSVNSX0lOVF9WRUNUT1IJCShORVRYRU5fUENJWF9QU19SRUcoUENJWF9JTlRfVkVDVE9SKSkKKyNkZWZpbmUgSVNSX0lOVF9NQVNLCQkoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfSU5UX01BU0spKQorI2RlZmluZSBJU1JfSU5UX01BU0tfU0xPVwkoTkVUWEVOX1BDSVhfUFNfUkVHKFBDSVhfSU5UX01BU0spKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVMJKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVMpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLCShORVRYRU5fUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTSykpCisKKyNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFCTEyOAorI2RlZmluZSBORVRYRU5fUENJX0REUl9ORVQJKDB4MDAwMDAwMDBVTCkKKyNkZWZpbmUgTkVUWEVOX1BDSV9RRFJfTkVUCSgweDA0MDAwMDAwVUwpCisjZGVmaW5lIE5FVFhFTl9QQ0lfRElSRUNUX0NSQgkoMHgwNDQwMDAwMFVMKQorI2RlZmluZSBORVRYRU5fUENJX0NBTVFNX01BWAkoMHgwNGZmZmZmZlVMKQorI2RlZmluZSBORVRYRU5fUENJX09DTTAJCSgweDA1MDAwMDAwVUwpCisjZGVmaW5lIE5FVFhFTl9QQ0lfT0NNMF9NQVgJKDB4MDUwZmZmZmZVTCkKKyNkZWZpbmUgTkVUWEVOX1BDSV9PQ00xCQkoMHgwNTEwMDAwMFVMKQorI2RlZmluZSBORVRYRU5fUENJX09DTTFfTUFYCSgweDA1MWZmZmZmVUwpCisjZGVmaW5lIE5FVFhFTl9QQ0lfQ1JCU1BBQ0UJKDB4MDYwMDAwMDBVTCkKKworI2RlZmluZSBORVRYRU5fQ1JCX0NBTQlORVRYRU5fUENJX0NSQl9XSU5ET1coTkVUWEVOX0hXX1BYX01BUF9DUkJfQ0FNKQorCisjZGVmaW5lIE5FVFhFTl9BRERSX0REUl9ORVQJKDB4MDAwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgTkVUWEVOX0FERFJfRERSX05FVF9NQVggKDB4MDAwMDAwMDAwZmZmZmZmZlVMTCkKKyNkZWZpbmUgTkVUWEVOX0FERFJfT0NNMAkoMHgwMDAwMDAwMjAwMDAwMDAwVUxMKQorI2RlZmluZSBORVRYRU5fQUREUl9PQ00wX01BWAkoMHgwMDAwMDAwMjAwMGZmZmZmVUxMKQorI2RlZmluZSBORVRYRU5fQUREUl9PQ00xCSgweDAwMDAwMDAyMDA0MDAwMDBVTEwpCisjZGVmaW5lIE5FVFhFTl9BRERSX09DTTFfTUFYCSgweDAwMDAwMDAyMDA0ZmZmZmZVTEwpCisjZGVmaW5lIE5FVFhFTl9BRERSX1FEUl9ORVQJKDB4MDAwMDAwMDMwMDAwMDAwMFVMTCkKKyNkZWZpbmUgTkVUWEVOX0FERFJfUURSX05FVF9NQVggKDB4MDAwMDAwMDMwMDNmZmZmZlVMTCkKKworCS8qIDIwMG1zIGRlbGF5IGluIGVhY2ggbG9vcCAqLworI2RlZmluZQlORVRYRU5fTklVX1BIWV9XQUlUTEVOCQkyMDAwMDAKKwkvKiAxMCBzZWNvbmRzIGJlZm9yZSB3ZSBnaXZlIHVwICovCisjZGVmaW5lCU5FVFhFTl9OSVVfUEhZX1dBSVRNQVgJCTUwCisjZGVmaW5lCU5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUwk0CisKKyNkZWZpbmUJTkVUWEVOX05JVV9NT0RFCQkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDAwMCkKKworI2RlZmluZQlORVRYRU5fTklVX1hHX1NJTkdMRV9URVJNCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMDQpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfRFJJVkVfSEkJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMDgpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfRFJJVkVfTE8JCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMGMpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfRFRYCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDEwKQorI2RlZmluZQlORVRYRU5fTklVX1hHX0RFUQkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDAxNCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR19XT1JEX0FMSUdOCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMTgpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUkVTRVQJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMWMpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUE9XRVJfRE9XTgkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDIwKQorI2RlZmluZQlORVRYRU5fTklVX1hHX1JFU0VUX1BMTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDAyNCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR19TRVJERVNfTE9PUEJBQ0sJKE5FVFhFTl9DUkJfTklVICsgMHgwMDAyOCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR19ET19CWVRFX0FMSUdOCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMmMpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfVFhfRU5BQkxFCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDMwKQorI2RlZmluZQlORVRYRU5fTklVX1hHX1JYX0VOQUJMRQkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDAzNCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR19TVEFUVVMJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwMzgpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUEFVU0VfVEhSRVNIT0xECShORVRYRU5fQ1JCX05JVSArIDB4MDAwM2MpCisjZGVmaW5lCU5FVFhFTl9OSVVfSU5UX01BU0sJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwNDApCisjZGVmaW5lCU5FVFhFTl9OSVVfQUNUSVZFX0lOVAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA0NCkKKyNkZWZpbmUJTkVUWEVOX05JVV9NQVNLQUJMRV9JTlQJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwNDgpCisKKyNkZWZpbmUgTkVUWEVOX05JVV9TVFJBUF9WQUxVRV9TQVZFX0hJR0hFUgkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDRjKQorCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfU0VSREVTX1JFU0VUCShORVRYRU5fQ1JCX05JVSArIDB4MDAwNTApCisjZGVmaW5lCU5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDU0KQorI2RlZmluZQlORVRYRU5fTklVX0dCMF9NSUlfTU9ERQkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA1OCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQjFfR01JSV9NT0RFCShORVRYRU5fQ1JCX05JVSArIDB4MDAwNWMpCisjZGVmaW5lCU5FVFhFTl9OSVVfR0IxX01JSV9NT0RFCQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDYwKQorI2RlZmluZQlORVRYRU5fTklVX0dCMl9HTUlJX01PREUJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA2NCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQjJfTUlJX01PREUJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwNjgpCisjZGVmaW5lCU5FVFhFTl9OSVVfR0IzX0dNSUlfTU9ERQkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDZjKQorI2RlZmluZQlORVRYRU5fTklVX0dCM19NSUlfTU9ERQkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA3MCkKKyNkZWZpbmUJTkVUWEVOX05JVV9SRU1PVEVfTE9PUEJBQ0sJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA3NCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQjBfSEFMRl9EVVBMRVgJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA3OCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQjFfSEFMRl9EVVBMRVgJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA3YykKKyNkZWZpbmUJTkVUWEVOX05JVV9SRVNFVF9TWVNfRklGT1MJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA4OCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9DUkNfRFJPUAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA4YykKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9EUk9QX1dST05HQUREUgkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMDkwKQorI2RlZmluZQlORVRYRU5fTklVX1RFU1RfTVVYX0NUTAkJKE5FVFhFTl9DUkJfTklVICsgMHgwMDA5NCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR19QQVVTRV9DVEwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAwOTgpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdfUEFVU0VfTEVWRUwJKE5FVFhFTl9DUkJfTklVICsgMHgwMDBkYykKKyNkZWZpbmUJTkVUWEVOX05JVV9YR19TRUwJCShORVRYRU5fQ1JCX05JVSArIDB4MDAxMjgpCisKKyNkZWZpbmUgTkVUWEVOX05JVV9GVUxMX0xFVkVMX1hHCShORVRYRU5fQ1JCX05JVSArIDB4MDA0NTApCisKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfUkVTRVQJICAgIAkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMTFjKQorI2RlZmluZSBORVRYRU5fTklVX1hHMV9QT1dFUl9ET1dOCShORVRYRU5fQ1JCX05JVSArIDB4MDAxMjApCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1JFU0VUX1BMTAkoTkVUWEVOX0NSQl9OSVUgKyAweDAwMTI0KQorCisjZGVmaW5lIE5FVFhFTl9NQUNfQUREUl9DTlRMX1JFRwkoTkVUWEVOX0NSQl9OSVUgKyAweDEwMDApCisKKyNkZWZpbmUJTkVUWEVOX01VTFRJQ0FTVF9BRERSX0hJXzAJKE5FVFhFTl9DUkJfTklVICsgMHgxMDEwKQorI2RlZmluZSBORVRYRU5fTVVMVElDQVNUX0FERFJfSElfMQkoTkVUWEVOX0NSQl9OSVUgKyAweDEwMTQpCisjZGVmaW5lIE5FVFhFTl9NVUxUSUNBU1RfQUREUl9ISV8yCShORVRYRU5fQ1JCX05JVSArIDB4MTAxOCkKKyNkZWZpbmUgTkVUWEVOX01VTFRJQ0FTVF9BRERSX0hJXzMJKE5FVFhFTl9DUkJfTklVICsgMHgxMDFjKQorCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKEkpCQlcCisJKE5FVFhFTl9DUkJfTklVICsgMHgzMDAwMCArIChJKSoweDEwMDAwKQorI2RlZmluZQlORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMShJKQkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwMDQgKyAoSSkqMHgxMDAwMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9NQUNfSVBHX0lGRyhJKQkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwMDggKyAoSSkqMHgxMDAwMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9IQUxGX0RVUExFWF9DVFJMKEkpCVwKKwkoTkVUWEVOX0NSQl9OSVUgKyAweDMwMDBjICsgKEkpKjB4MTAwMDApCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfTUFYX0ZSQU1FX1NJWkUoSSkJCVwKKwkoTkVUWEVOX0NSQl9OSVUgKyAweDMwMDEwICsgKEkpKjB4MTAwMDApCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfVEVTVF9SRUcoSSkJCVwKKwkoTkVUWEVOX0NSQl9OSVUgKyAweDMwMDFjICsgKEkpKjB4MTAwMDApCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09ORklHKEkpCVwKKwkoTkVUWEVOX0NSQl9OSVUgKyAweDMwMDIwICsgKEkpKjB4MTAwMDApCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORChJKQlcCisJKE5FVFhFTl9DUkJfTklVICsgMHgzMDAyNCArIChJKSoweDEwMDAwKQorI2RlZmluZQlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFIoSSkJCVwKKwkoTkVUWEVOX0NSQl9OSVUgKyAweDMwMDI4ICsgKEkpKjB4MTAwMDApCisjZGVmaW5lCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ1RSTChJKQkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwMmMgKyAoSSkqMHgxMDAwMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9TVEFUVVMoSSkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwMzAgKyAoSSkqMHgxMDAwMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9JTkRJQ0FURShJKQlcCisJKE5FVFhFTl9DUkJfTklVICsgMHgzMDAzNCArIChJKSoweDEwMDAwKQorI2RlZmluZQlORVRYRU5fTklVX0dCX0lOVEVSRkFDRV9DVFJMKEkpCQlcCisJKE5FVFhFTl9DUkJfTklVICsgMHgzMDAzOCArIChJKSoweDEwMDAwKQorI2RlZmluZQlORVRYRU5fTklVX0dCX0lOVEVSRkFDRV9TVEFUVVMoSSkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwM2MgKyAoSSkqMHgxMDAwMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMChJKQkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwNDAgKyAoSSkqMHgxMDAwMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMShJKQkJXAorCShORVRYRU5fQ1JCX05JVSArIDB4MzAwNDQgKyAoSSkqMHgxMDAwMCkKKworI2RlZmluZQlORVRYRU5fTklVX1hHRV9DT05GSUdfMAkJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwMDApCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX0NPTkZJR18xCQkJKE5FVFhFTl9DUkJfTklVICsgMHg3MDAwNCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfSVBHCQkJKE5FVFhFTl9DUkJfTklVICsgMHg3MDAwOCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEkJKE5FVFhFTl9DUkJfTklVICsgMHg3MDAwYykKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfMQkJKE5FVFhFTl9DUkJfTklVICsgMHg3MDAxMCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzFfTE8JKE5FVFhFTl9DUkJfTklVICsgMHg3MDAxNCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfU1RBVFVTCQkJKE5FVFhFTl9DUkJfTklVICsgMHg3MDAxOCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfTUFYX0ZSQU1FX1NJWkUJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwMWMpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX1BBVVNFX0ZSQU1FX1ZBTFVFCShORVRYRU5fQ1JCX05JVSArIDB4NzAwMjApCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX1RYX0JZVEVfQ05UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDI0KQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9UWF9GUkFNRV9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwMjgpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX1JYX0JZVEVfQ05UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDJjKQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9SWF9GUkFNRV9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwMzApCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX0FHR1JfRVJST1JfQ05UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDM0KQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9NVUxUSUNBU1RfRlJBTUVfQ05UIAkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDM4KQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9VTklDQVNUX0ZSQU1FX0NOVAkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDNjKQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9DUkNfRVJST1JfQ05UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDQwKQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9PVkVSU0laRV9GUkFNRV9FUlIJKE5FVFhFTl9DUkJfTklVICsgMHg3MDA0NCkKKyNkZWZpbmUJTkVUWEVOX05JVV9YR0VfVU5ERVJTSVpFX0ZSQU1FX0VSUgkoTkVUWEVOX0NSQl9OSVUgKyAweDcwMDQ4KQorI2RlZmluZQlORVRYRU5fTklVX1hHRV9MT0NBTF9FUlJPUl9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwNGMpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX1JFTU9URV9FUlJPUl9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwNTApCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX0NPTlRST0xfQ0hBUl9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4NzAwNTQpCisjZGVmaW5lCU5FVFhFTl9OSVVfWEdFX1BBVVNFX0ZSQU1FX0NOVAkJKE5FVFhFTl9DUkJfTklVICsgMHg3MDA1OCkKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfQ09ORklHXzAJCQkoTkVUWEVOX0NSQl9OSVUgKyAweDgwMDAwKQorI2RlZmluZSBORVRYRU5fTklVX1hHMV9DT05GSUdfMQkJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMDQpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX0lQRwkJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMDgpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1NUQVRJT05fQUREUl8wX0hJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMGMpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1NUQVRJT05fQUREUl8wXzEJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMTApCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1NUQVRJT05fQUREUl8xX0xPCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMTQpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1NUQVRVUwkJICAgIAkoTkVUWEVOX0NSQl9OSVUgKyAweDgwMDE4KQorI2RlZmluZSBORVRYRU5fTklVX1hHMV9NQVhfRlJBTUVfU0laRQkgICAJKE5FVFhFTl9DUkJfTklVICsgMHg4MDAxYykKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfUEFVU0VfRlJBTUVfVkFMVUUJKE5FVFhFTl9DUkJfTklVICsgMHg4MDAyMCkKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfVFhfQllURV9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMjQpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1RYX0ZSQU1FX0NOVAkgCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMjgpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1JYX0JZVEVfQ05UCSAgCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMmMpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1JYX0ZSQU1FX0NOVAkgCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMzApCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX0FHR1JfRVJST1JfQ05UCSAgIAkoTkVUWEVOX0NSQl9OSVUgKyAweDgwMDM0KQorI2RlZmluZSBORVRYRU5fTklVX1hHMV9NVUxUSUNBU1RfRlJBTUVfQ05UCShORVRYRU5fQ1JCX05JVSArIDB4ODAwMzgpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX1VOSUNBU1RfRlJBTUVfQ05UCShORVRYRU5fQ1JCX05JVSArIDB4ODAwM2MpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX0NSQ19FUlJPUl9DTlQJCShORVRYRU5fQ1JCX05JVSArIDB4ODAwNDApCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX09WRVJTSVpFX0ZSQU1FX0VSUgkoTkVUWEVOX0NSQl9OSVUgKyAweDgwMDQ0KQorI2RlZmluZSBORVRYRU5fTklVX1hHMV9VTkRFUlNJWkVfRlJBTUVfRVJSCShORVRYRU5fQ1JCX05JVSArIDB4ODAwNDgpCisjZGVmaW5lIE5FVFhFTl9OSVVfWEcxX0xPQ0FMX0VSUk9SX0NOVAkJKE5FVFhFTl9DUkJfTklVICsgMHg4MDA0YykKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfUkVNT1RFX0VSUk9SX0NOVAkJKE5FVFhFTl9DUkJfTklVICsgMHg4MDA1MCkKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfQ09OVFJPTF9DSEFSX0NOVAkJKE5FVFhFTl9DUkJfTklVICsgMHg4MDA1NCkKKyNkZWZpbmUgTkVUWEVOX05JVV9YRzFfUEFVU0VfRlJBTUVfQ05UCQkoTkVUWEVOX0NSQl9OSVUgKyAweDgwMDU4KQorCisvKiBYRyBMaW5rIHN0YXR1cyAqLworI2RlZmluZSBYR19MSU5LX1VQCTB4MTAKKyNkZWZpbmUgWEdfTElOS19ET1dOCTB4MjAKKworI2RlZmluZSBORVRYRU5fQ0FNX1JBTV9CQVNFCShORVRYRU5fQ1JCX0NBTSArIDB4MDIwMDApCisjZGVmaW5lIE5FVFhFTl9DQU1fUkFNKHJlZykJKE5FVFhFTl9DQU1fUkFNX0JBU0UgKyAocmVnKSkKKyNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fTUFKT1IgKE5FVFhFTl9DQU1fUkFNKDB4MTUwKSkKKyNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IgKE5FVFhFTl9DQU1fUkFNKDB4MTU0KSkKKyNkZWZpbmUgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCCShORVRYRU5fQ0FNX1JBTSgweDE1OCkpCisjZGVmaW5lIE5FVFhFTl9ST01fTE9DS19JRAkoTkVUWEVOX0NBTV9SQU0oMHgxMDApKQorCisjZGVmaW5lIE5FVFhFTl9QSFlfTE9DS19JRAkoTkVUWEVOX0NBTV9SQU0oMHgxMjApKQorCisvKiBMb2NrIElEcyBmb3IgUEhZIGxvY2sgKi8KKyNkZWZpbmUgUEhZX0xPQ0tfRFJJVkVSCQkweDQ0NTI0OTU2CisKKy8qIFVzZWQgZm9yIFBTIFBDSSBNZW1vcnkgYWNjZXNzICovCisjZGVmaW5lIFBDSVhfUFNfT1BfQUREUl9MTwkoMHgxMDAwMCkKKy8qICAgdmlhIENSQiAgKFBTIHNpZGUgb25seSkgICAgICovCisjZGVmaW5lIFBDSVhfUFNfT1BfQUREUl9ISQkoMHgxMDAwNCkKKworI2RlZmluZSBQQ0lYX0lOVF9WRUNUT1IJCSgweDEwMTAwKQorI2RlZmluZSBQQ0lYX0lOVF9NQVNLCQkoMHgxMDEwNCkKKworI2RlZmluZSBQQ0lYX01OX1dJTkRPVwkJKDB4MTAyMDApCisjZGVmaW5lIFBDSVhfTVNfV0lORE9XCQkoMHgxMDIwNCkKKyNkZWZpbmUgUENJWF9TTl9XSU5ET1cJCSgweDEwMjA4KQorI2RlZmluZSBQQ0lYX0NSQl9XSU5ET1cJCSgweDEwMjEwKQorCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVUwkoMHgxMDExOCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfTUFTSwkoMHgxMDEyOCkKKworI2RlZmluZSBQQ0lYX01TSV9GMAkJKDB4MTMwMDApCisKKyNkZWZpbmUgUENJWF9QU19NRU1fU1BBQ0UJKDB4OTAwMDApCisKKyNkZWZpbmUgTkVUWEVOX1BDSVhfUEhfUkVHKHJlZykJKE5FVFhFTl9DUkJfUENJRSArIChyZWcpKQorI2RlZmluZSBORVRYRU5fUENJWF9QU19SRUcocmVnKQkoTkVUWEVOX0NSQl9QQ0lYX01EICsgKHJlZykpCisKKyNkZWZpbmUgTkVUWEVOX1BDSUVfUkVHKHJlZykJKE5FVFhFTl9DUkJfUENJRSArIChyZWcpKQorCisjZGVmaW5lIFBDSUVfTUFYX0RNQV9YRkVSX1NJWkUJKDB4MTQwNGMpCisKKyNkZWZpbmUgUENJRV9EQ1IJCTB4MDBkOAorCisjZGVmaW5lIFBDSUVfU0VNMl9MT0NLCQkoMHgxYzAxMCkJLyogRmxhc2ggbG9jayAgICovCisjZGVmaW5lIFBDSUVfU0VNMl9VTkxPQ0sJKDB4MWMwMTQpCS8qIEZsYXNoIHVubG9jayAqLworI2RlZmluZSBQQ0lFX1NFTTNfTE9DSwkgIAkoMHgxYzAxOCkJLyogUGh5IGxvY2sgICAgICovCisjZGVmaW5lIFBDSUVfU0VNM19VTkxPQ0sJKDB4MWMwMWMpCS8qIFBoeSB1bmxvY2sgICAqLworCisjZGVmaW5lIFBDSUVfVEdUX1NQTElUX0NISUNLRU4JKDB4MTIwODApCisKKyNkZWZpbmUgUENJRV9NQVhfTUFTVEVSX1NQTElUCSgweDE0MDQ4KQorCisjZW5kaWYJCQkJLyogX19ORVRYRU5fTklDX0hEUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1YzI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTAsMCArMSwxMDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqIAorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICogCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogICAgaW5mb0BuZXR4ZW4uY29tCisgKiBOZXRYZW4sCisgKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCisgKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqCisgKgorICogU291cmNlIGZpbGUgZm9yIE5JQyByb3V0aW5lcyB0byBhY2Nlc3MgdGhlIFBoYW50b20gaGFyZHdhcmUKKyAqCisgKi8KKworI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKKyNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCisjaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgorCisvKiAgUENJIFdpbmRvd2luZyBmb3IgRERSIHJlZ2lvbnMuICAqLworCisjZGVmaW5lIEFERFJfSU5fUkFOR0UoYWRkciwgbG93LCBoaWdoKQlcCisJKCgoYWRkcikgPD0gKGhpZ2gpKSAmJiAoKGFkZHIpID49IChsb3cpKSkKKworI2RlZmluZSBORVRYRU5fRkxBU0hfQkFTRQkoQk9PVExEX1NUQVJUKQorI2RlZmluZSBORVRYRU5fUEhBTlRPTV9NRU1fQkFTRQkoTkVUWEVOX0ZMQVNIX0JBU0UpCisjZGVmaW5lIE5FVFhFTl9NQVhfTVRVCQk4MDAwCisjZGVmaW5lIE5FVFhFTl9NSU5fTVRVCQk2NAorI2RlZmluZSBORVRYRU5fRVRIX0ZDU19TSVpFICAgICA0CisjZGVmaW5lIE5FVFhFTl9FTkVUX0hFQURFUl9TSVpFIDE0CisjZGVmaW5lIE5FVFhFTl9XSU5ET1dfT05FIAkweDIwMDAwMDAJLypDUkIgV2luZG93OiBiaXQgMjUgb2YgQ1JCIGFkZHJlc3MgKi8KKyNkZWZpbmUgTkVUWEVOX0ZJUk1XQVJFX0xFTiAJKCgxNiAqIDEwMjQpIC8gNCkKKyNkZWZpbmUgTkVUWEVOX05JVV9IRFJTSVpFCSgweDEgPDwgNikKKyNkZWZpbmUgTkVUWEVOX05JVV9UTFJTSVpFCSgweDEgPDwgNSkKKworI2RlZmluZSBsb3dlcjMyKHgpCQkoKHUzMikoKHgpICYgMHhmZmZmZmZmZikpCisjZGVmaW5lIHVwcGVyMzIoeCkJCQlcCisJKCh1MzIpKCgodW5zaWduZWQgbG9uZyBsb25nKSh4KSA+PiAzMikgJiAweGZmZmZmZmZmKSkKKworI2RlZmluZSBORVRYRU5fTklDX1pFUk9fUEFVU0VfQUREUiAgICAgMFVMTAorI2RlZmluZSBORVRYRU5fTklDX1VOSVRfUEFVU0VfQUREUiAgICAgMHgyMDBVTEwKKyNkZWZpbmUgTkVUWEVOX05JQ19FUEdfUEFVU0VfQUREUjEgICAgIDB4MjIwMDAxMDAwMGMyODAwMVVMTAorI2RlZmluZSBORVRYRU5fTklDX0VQR19QQVVTRV9BRERSMiAgICAgMHgwMTAwMDg4ODY2NTU0NDMzVUxMCisKKyNkZWZpbmUgTkVUWEVOX05JQ19XSU5ET1dfTUFSR0lOIDB4MTAwMDAwCisKK3Vuc2lnbmVkIGxvbmcgbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvdyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyKTsKK3ZvaWQgbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CisKK2ludCBuZXR4ZW5fbmljX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCURQUklOVEsoSU5GTywgInZhbGlkIGV0aGVyIGFkZHJcbiIpOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKworCWlmIChhZGFwdGVyLT5vcHMtPm1hY2FkZHJfc2V0KQorCQlhZGFwdGVyLT5vcHMtPm1hY2FkZHJfc2V0KHBvcnQsIGFkZHItPnNhX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBuZXR4ZW5fbmljX3NldF9tdWx0aSAtIE11bHRpY2FzdAorICovCit2b2lkIG5ldHhlbl9uaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOworCV9fbGUzMiBuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhID0gMDsKKworCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCWlmIChhZGFwdGVyLT5vcHMtPnNldF9wcm9taXNjKQorCQkJYWRhcHRlci0+b3BzLT5zZXRfcHJvbWlzYyhhZGFwdGVyLAorCQkJCQkJICBwb3J0LT5wb3J0bnVtLAorCQkJCQkJICBORVRYRU5fTklVX1BST01JU0NfTU9ERSk7CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPm9wcy0+dW5zZXRfcHJvbWlzYyAmJgorCQkgICAgYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGUKKwkJICAgICE9IE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVopCisJCQlhZGFwdGVyLT5vcHMtPnVuc2V0X3Byb21pc2MoYWRhcHRlciwKKwkJCQkJCSAgICBwb3J0LT5wb3J0bnVtLAorCQkJCQkJICAgIE5FVFhFTl9OSVVfTk9OX1BST01JU0NfTU9ERSk7CisJfQorCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwkJbmV0eGVuX25pY19tY3Jfc2V0X21vZGVfc2VsZWN0KG5ldHhlbl9tYWNfYWRkcl9jbnRsX2RhdGEsIDB4MDMpOworCQluZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDAobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSwgMHgwMCk7CisJCW5ldHhlbl9uaWNfbWNyX3NldF9pZF9wb29sMShuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhLCAweDAwKTsKKwkJbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wyKG5ldHhlbl9tYWNfYWRkcl9jbnRsX2RhdGEsIDB4MDApOworCQluZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDMobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSwgMHgwMCk7CisJCW5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDAobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSk7CisJCW5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDEobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSk7CisJCW5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDIobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSk7CisJCW5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfeHRuZDMobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSk7CisJfSBlbHNlIHsKKwkJbmV0eGVuX25pY19tY3Jfc2V0X21vZGVfc2VsZWN0KG5ldHhlbl9tYWNfYWRkcl9jbnRsX2RhdGEsIDB4MDApOworCQluZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDAobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSwgMHgwMCk7CisJCW5ldHhlbl9uaWNfbWNyX3NldF9pZF9wb29sMShuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhLCAweDAxKTsKKwkJbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wyKG5ldHhlbl9tYWNfYWRkcl9jbnRsX2RhdGEsIDB4MDIpOworCQluZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDMobmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSwgMHgwMyk7CisJfQorCXdyaXRlbChuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhLAorCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBORVRYRU5fTUFDX0FERFJfQ05UTF9SRUcpKTsKKwlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJCXdyaXRlbChuZXR4ZW5fbWFjX2FkZHJfY250bF9kYXRhLAorCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9NVUxUSUNBU1RfQUREUl9ISV8wKSk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKG5ldHhlbl9tYWNfYWRkcl9jbnRsX2RhdGEsCisJCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAorCQkJCQkgICAgTkVUWEVOX01VTFRJQ0FTVF9BRERSX0hJXzEpKTsKKwl9CisJbmV0eGVuX21hY19hZGRyX2NudGxfZGF0YSA9IDA7CisJd3JpdGVsKG5ldHhlbl9tYWNfYWRkcl9jbnRsX2RhdGEsCisJICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfRFJPUF9XUk9OR0FERFIpKTsKK30KKworLyoKKyAqIG5ldHhlbl9uaWNfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworaW50IG5ldHhlbl9uaWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbXR1KQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlpbnQgZWZmX210dSA9IG10dSArIE5FVFhFTl9FTkVUX0hFQURFUl9TSVpFICsgTkVUWEVOX0VUSF9GQ1NfU0laRTsKKworCWlmICgoZWZmX210dSA+IE5FVFhFTl9NQVhfTVRVKSB8fCAoZWZmX210dSA8IE5FVFhFTl9NSU5fTVRVKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyAlZCBpcyBub3Qgc3VwcG9ydGVkLlxuIiwKKwkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSwgbXR1KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFkYXB0ZXItPm9wcy0+c2V0X210dSkKKwkJYWRhcHRlci0+b3BzLT5zZXRfbXR1KHBvcnQsIG10dSk7CisJbmV0ZGV2LT5tdHUgPSBtdHU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNoZWNrIGlmIHRoZSBmaXJtd2FyZSBoYXMgYmVlbiBkb3dubG9hZGVkIGFuZCByZWFkeSB0byBydW4gIGFuZAorICogc2V0dXAgdGhlIGFkZHJlc3MgZm9yIHRoZSBkZXNjcmlwdG9ycyBpbiB0aGUgYWRhcHRlcgorICovCitpbnQgbmV0eGVuX25pY19od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXR4ZW5faGFyZHdhcmVfY29udGV4dCAqaHcgPSAmYWRhcHRlci0+YWh3OworCXUzMiBzdGF0ZSA9IDA7CisJdm9pZCAqYWRkcjsKKwl2b2lkICpwYXVzZV9hZGRyOworCWludCBsb29wcyA9IDAsIGVyciA9IDA7CisJaW50IGN0eCwgcmluZzsKKwl1MzIgY2FyZF9jbWRyaW5nID0gMDsKKwlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2NyYiAqcmN2X2Rlc2NfY3JiID0gTlVMTDsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jdHggKnJjdl9kZXNjOworCisJRFBSSU5USyhJTkZPLCAiY3JiX2Jhc2U6ICVseCAlbHgiLCBORVRYRU5fUENJX0NSQlNQQUNFLAorCQlQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLCBORVRYRU5fUENJX0NSQlNQQUNFKSk7CisJRFBSSU5USyhJTkZPLCAiY2FtIGJhc2U6ICVseCAlbHgiLCBORVRYRU5fQ1JCX0NBTSwKKwkJcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfQ0FNKSk7CisJRFBSSU5USyhJTkZPLCAiY2FtIFJBTTogJWx4ICVseCIsIE5FVFhFTl9DQU1fUkFNX0JBU0UsCisJCXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ0FNX1JBTV9CQVNFKSk7CisJRFBSSU5USyhJTkZPLCAiTklDIGJhc2U6JWx4ICVseFxuIiwgTklDX0NSQl9CQVNFX1BPUlQxLAorCQlwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTklDX0NSQl9CQVNFX1BPUlQxKSk7CisKKwkvKiBXaW5kb3cgMSBjYWxsICovCisJY2FyZF9jbWRyaW5nID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NNRFBFR19DTURSSU5HKSk7CisKKwlEUFJJTlRLKElORk8sICJDb21tYW5kIFBlZyBzZW5kcyAweCV4IGZvciBjbWRyaW5nIGJhc2VcbiIsCisJCWNhcmRfY21kcmluZyk7CisKKwlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgeworCQlEUFJJTlRLKElORk8sICJDb21tYW5kIFBlZyByZWFkeS4ud2FpdGluZyBmb3IgcmN2IHBlZ1xuIik7CisJCWxvb3BzID0gMDsKKwkJc3RhdGUgPSAwOworCQkvKiBXaW5kb3cgMSBjYWxsICovCisJCXN0YXRlID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJCSAgIHJlY3ZfY3JiX3JlZ2lzdGVyc1tjdHhdLgorCQkJCQkJICAgY3JiX3JjdnBlZ19zdGF0ZSkpOworCQl3aGlsZSAoc3RhdGUgIT0gUEhBTl9QRUdfUkNWX0lOSVRJQUxJWkVEICYmIGxvb3BzIDwgMjApIHsKKwkJCXVkZWxheSgxMDApOworCQkJLyogV2luZG93IDEgY2FsbCAqLworCQkJc3RhdGUgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAorCQkJCQkJCSAgIHJlY3ZfY3JiX3JlZ2lzdGVycworCQkJCQkJCSAgIFtjdHhdLgorCQkJCQkJCSAgIGNyYl9yY3ZwZWdfc3RhdGUpKTsKKwkJCWxvb3BzKys7CisJCX0KKwkJaWYgKGxvb3BzID49IDIwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlJjdiBQZWcgaW5pdGlhbGl6YXRpb24gbm90IGNvbXBsZXRlOiIKKwkJCSAgICAgICAiJXguXG4iLCBzdGF0ZSk7CisJCQllcnIgPSAtRUlPOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlEUFJJTlRLKElORk8sICJSZWNpZXZlIFBlZyByZWFkeSB0b28uIHN0YXJ0aW5nIHN0dWZmXG4iKTsKKworCWFkZHIgPSBuZXR4ZW5fYWxsb2MoYWRhcHRlci0+YWh3LnBkZXYsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgKgorCQkJICAgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAorCQkJICAgICZody0+Y21kX2Rlc2NfcGh5c19hZGRyLCAmaHctPmNtZF9kZXNjX3BkZXYpOworCisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlEUFJJTlRLKEVSUiwgImJhZCByZXR1cm4gZnJvbSBwY2lfYWxsb2NfY29uc2lzdGVudFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBhdXNlX2FkZHIgPSBuZXR4ZW5fYWxsb2MoYWRhcHRlci0+YWh3LnBkZXYsIDUxMiwKKwkJCQkgIChkbWFfYWRkcl90ICopICYgaHctPnBhdXNlX3BoeXNhZGRyLAorCQkJCSAgJmh3LT5wYXVzZV9wZGV2KTsKKwlpZiAocGF1c2VfYWRkciA9PSBOVUxMKSB7CisJCURQUklOVEsoMSwgRVJSLCAiYmFkIHJldHVybiBmcm9tIHBjaV9hbGxvY19jb25zaXN0ZW50XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaHctPnBhdXNlYWRkciA9IChjaGFyICopcGF1c2VfYWRkcjsKKwl7CisJCXU2NCAqcHRyID0gKHU2NCAqKSBwYXVzZV9hZGRyOworCQkqcHRyKysgPSBORVRYRU5fTklDX1pFUk9fUEFVU0VfQUREUjsKKwkJKnB0cisrID0gTkVUWEVOX05JQ19aRVJPX1BBVVNFX0FERFI7CisJCSpwdHIrKyA9IE5FVFhFTl9OSUNfVU5JVF9QQVVTRV9BRERSOworCQkqcHRyKysgPSBORVRYRU5fTklDX1pFUk9fUEFVU0VfQUREUjsKKwkJKnB0cisrID0gTkVUWEVOX05JQ19FUEdfUEFVU0VfQUREUjE7CisJCSpwdHIrKyA9IE5FVFhFTl9OSUNfRVBHX1BBVVNFX0FERFIyOworCX0KKworCWh3LT5jbWRfZGVzY19oZWFkID0gKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKWFkZHI7CisKKwlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgeworCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOworCisJCWZvciAocmluZyA9IDA7IHJpbmcgPCBOVU1fUkNWX0RFU0NfUklOR1M7IHJpbmcrKykgeworCQkJcmN2X2Rlc2MgPSAmcmVjdl9jdHgtPnJjdl9kZXNjW3JpbmddOworCQkJYWRkciA9IG5ldHhlbl9hbGxvYyhhZGFwdGVyLT5haHcucGRldiwKKwkJCQkJICAgIFJDVl9ERVNDX1JJTkdTSVpFLAorCQkJCQkgICAgJnJjdl9kZXNjLT5waHlzX2FkZHIsCisJCQkJCSAgICAmcmN2X2Rlc2MtPnBoeXNfcGRldik7CisJCQlpZiAoYWRkciA9PSBOVUxMKSB7CisJCQkJRFBSSU5USyhFUlIsICJiYWQgcmV0dXJuIGZyb20gIgorCQkJCQkicGNpX2FsbG9jX2NvbnNpc3RlbnRcbiIpOworCQkJCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwkJCQllcnIgPSAtRU5PTUVNOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCQlyY3ZfZGVzYy0+ZGVzY19oZWFkID0gKHN0cnVjdCByY3ZfZGVzYyAqKWFkZHI7CisJCX0KKworCQlhZGRyID0gbmV0eGVuX2FsbG9jKGFkYXB0ZXItPmFody5wZGV2LCBTVEFUVVNfREVTQ19SSU5HU0laRSwKKwkJCQkgICAgJnJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyLAorCQkJCSAgICAmcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19wZGV2KTsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgeworCQkJRFBSSU5USyhFUlIsICJiYWQgcmV0dXJuIGZyb20iCisJCQkJIiBwY2lfYWxsb2NfY29uc2lzdGVudFxuIik7CisJCQluZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSAoc3RydWN0IHN0YXR1c19kZXNjICopYWRkcjsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7CisJCQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ107CisJCQlyY3ZfZGVzY19jcmIgPQorCQkJICAgICZyZWN2X2NyYl9yZWdpc3RlcnNbY3R4XS5yY3ZfZGVzY19jcmJbcmluZ107CisJCQlEUFJJTlRLKElORk8sICJyaW5nICMlZCBjcmIgZ2xvYmFsIHJpbmcgcmVnIDB4JXhcbiIsCisJCQkJcmluZywgcmN2X2Rlc2NfY3JiLT5jcmJfZ2xvYmFscmN2X3JpbmcpOworCQkJLyogV2luZG93ID0gMSAqLworCQkJd3JpdGVsKGxvd2VyMzIocmN2X2Rlc2MtPnBoeXNfYWRkciksCisJCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJCSAgICByY3ZfZGVzY19jcmItPgorCQkJCQkJICAgIGNyYl9nbG9iYWxyY3ZfcmluZykpOworCQkJRFBSSU5USyhJTkZPLCAiR0xPQkFMX1JDVl9SSU5HIGN0eCAlZCwgYWRkciAweCV4IgorCQkJCSIgdmFsIDB4JWxseCwiCisJCQkJIiB2aXJ0ICVwXG4iLCBjdHgsCisJCQkJcmN2X2Rlc2NfY3JiLT5jcmJfZ2xvYmFscmN2X3JpbmcsCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyY3ZfZGVzYy0+cGh5c19hZGRyLAorCQkJCStyY3ZfZGVzYy0+ZGVzY19oZWFkKTsKKwkJfQorCisJCS8qIFdpbmRvdyA9IDEgKi8KKwkJd3JpdGVsKGxvd2VyMzIocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpLAorCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJICAgIHJlY3ZfY3JiX3JlZ2lzdGVyc1tjdHhdLgorCQkJCQkgICAgY3JiX3JjdnN0YXR1c19yaW5nKSk7CisJCURQUklOVEsoSU5GTywgIlJDVlNUQVRVU19SSU5HLCBjdHggJWQsIGFkZHIgMHgleCwiCisJCQkiIHZhbCAweCV4LHZpcnQlcFxuIiwKKwkJCWN0eCwKKwkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1tjdHhdLmNyYl9yY3ZzdGF0dXNfcmluZywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIsCisJCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQpOworCX0KKwkvKiBXaW5kb3cgPSAxICovCisJd3JpdGVsKGxvd2VyMzIoaHctPnBhdXNlX3BoeXNhZGRyKSwKKwkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1BBVVNFX0FERFJfTE8pKTsKKwl3cml0ZWwodXBwZXIzMihody0+cGF1c2VfcGh5c2FkZHIpLAorCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfUEFVU0VfQUREUl9ISSkpOworCisJd3JpdGVsKGxvd2VyMzIoaHctPmNtZF9kZXNjX3BoeXNfYWRkciksCisJICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9IT1NUX0NNRF9BRERSX0xPKSk7CisJd3JpdGVsKHVwcGVyMzIoaHctPmNtZF9kZXNjX3BoeXNfYWRkciksCisJICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9IT1NUX0NNRF9BRERSX0hJKSk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBuZXR4ZW5fZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2M7CisJaW50IGN0eCwgcmluZzsKKworCWlmIChhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+YWh3LmNtZF9kZXNjX3BkZXYsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICoKKwkJCQkgICAgYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQsCisJCQkJICAgIGFkYXB0ZXItPmFody5jbWRfZGVzY19oZWFkLAorCQkJCSAgICBhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKKwkJYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgPSBOVUxMOworCX0KKwlpZiAoYWRhcHRlci0+YWh3LnBhdXNlYWRkciAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+YWh3LnBhdXNlX3BkZXYsIDUxMiwKKwkJCQkgICAgYWRhcHRlci0+YWh3LnBhdXNlYWRkciwKKwkJCQkgICAgYWRhcHRlci0+YWh3LnBhdXNlX3BoeXNhZGRyKTsKKwkJYWRhcHRlci0+YWh3LnBhdXNlYWRkciA9IE5VTEw7CisJfQorCisJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKKwkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7CisJCQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ107CisKKwkJCWlmIChyY3ZfZGVzYy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KHJjdl9kZXNjLT5waHlzX3BkZXYsCisJCQkJCQkgICAgUkNWX0RFU0NfUklOR1NJWkUsCisJCQkJCQkgICAgcmN2X2Rlc2MtPmRlc2NfaGVhZCwKKwkJCQkJCSAgICByY3ZfZGVzYy0+cGh5c19hZGRyKTsKKwkJCQlyY3ZfZGVzYy0+ZGVzY19oZWFkID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCWlmIChyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgIT0gTlVMTCkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BkZXYsCisJCQkJCSAgICBTVEFUVVNfREVTQ19SSU5HU0laRSwKKwkJCQkJICAgIHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZCwKKwkJCQkJICAgIHJlY3ZfY3R4LT4KKwkJCQkJICAgIHJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOworCQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gTlVMTDsKKwkJfQorCX0KK30KKwordm9pZCBuZXR4ZW5fdHNvX2NoZWNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJICAgICAgc3RydWN0IGNtZF9kZXNjX3R5cGUwICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChkZXNjLT5tc3MpIHsKKwkJZGVzYy0+dG90YWxfaGRyX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArCisJCSAgICAoKHNrYi0+bmguaXBoKS0+aWhsICogc2l6ZW9mKHUzMikpICsKKwkJICAgICgoc2tiLT5oLnRoKS0+ZG9mZiAqIHNpemVvZih1MzIpKTsKKwkJZGVzYy0+b3Bjb2RlID0gVFhfVENQX0xTTzsKKwl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSB7CisJCWlmIChza2ItPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApIHsKKwkJCWRlc2MtPm9wY29kZSA9IFRYX1RDUF9QS1Q7CisJCX0gZWxzZSBpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKSB7CisJCQlkZXNjLT5vcGNvZGUgPSBUWF9VRFBfUEtUOworCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisJfQorCWFkYXB0ZXItPnN0YXRzLnhtaXRjc3VtbWVkKys7CisJQ01EX0RFU0NfVENQX0hEUl9PRkZTRVRfV1JUKGRlc2MsIHNrYi0+aC5yYXcgLSBza2ItPmRhdGEpOworCWRlc2MtPmxlbmd0aF90Y3BfaGRyID0gY3B1X3RvX2xlMzIoZGVzYy0+bGVuZ3RoX3RjcF9oZHIpOworCWRlc2MtPmlwX2hkcl9vZmZzZXQgPSBza2ItPm5oLnJhdyAtIHNrYi0+ZGF0YTsKK30KKworaW50IG5ldHhlbl9pc19mbGFzaF9zdXBwb3J0ZWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWNvbnN0IGludCBsb2NzW10gPSB7IDAsIDB4NCwgMHgxMDAsIDB4NDAwMCwgMHg0MTI4IH07CisJaW50IGFkZHIsIHZhbDAxLCB2YWwwMiwgaSwgajsKKworCS8qIGlmIHRoZSBmbGFzaCBzaXplIGxlc3MgdGhhbiA0TWIsIG1ha2UgaHVnZSB3YXIgY3J5IGFuZCBkaWUgKi8KKwlmb3IgKGogPSAxOyBqIDwgNDsgaisrKSB7CisJCWFkZHIgPSBqICogTkVUWEVOX05JQ19XSU5ET1dfTUFSR0lOOworCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZihsb2NzKSAvIHNpemVvZihsb2NzWzBdKSk7IGkrKykgeworCQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGxvY3NbaV0sICZ2YWwwMSkgPT0gMAorCQkJICAgICYmIG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIChhZGRyICsgbG9jc1tpXSksCisJCQkJCQkgICAgJnZhbDAyKSA9PSAwKSB7CisJCQkJaWYgKHZhbDAxID09IHZhbDAyKQorCQkJCQlyZXR1cm4gLTE7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXR4ZW5fZ2V0X2ZsYXNoX2Jsb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGJhc2UsCisJCQkJICBpbnQgc2l6ZSwgdTMyICogYnVmKQoreworCWludCBpLCBhZGRyOworCXUzMiAqcHRyMzI7CisKKwlhZGRyID0gYmFzZTsKKwlwdHIzMiA9IGJ1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZSAvIHNpemVvZih1MzIpOyBpKyspIHsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHB0cjMyKSA9PSAtMSkKKwkJCXJldHVybiAtMTsKKwkJcHRyMzIrKzsKKwkJYWRkciArPSBzaXplb2YodTMyKTsKKwl9CisJaWYgKChjaGFyICopYnVmICsgc2l6ZSA+IChjaGFyICopcHRyMzIpIHsKKwkJdTMyIGxvY2FsOworCisJCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCAmbG9jYWwpID09IC0xKQorCQkJcmV0dXJuIC0xOworCQltZW1jcHkocHRyMzIsICZsb2NhbCwgKGNoYXIgKilidWYgKyBzaXplIC0gKGNoYXIgKilwdHIzMik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBuZXR4ZW5fZ2V0X2ZsYXNoX21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG1hY1tdKQoreworCXUzMiAqcG1hYyA9ICh1MzIgKikgJiBtYWNbMF07CisKKwlpZiAobmV0eGVuX2dldF9mbGFzaF9ibG9jayhhZGFwdGVyLAorCQkJCSAgIFVTRVJfU1RBUlQgKworCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fbmV3X3VzZXJfaW5mbywKKwkJCQkJICAgIG1hY19hZGRyKSwKKwkJCQkgICBGTEFTSF9OVU1fUE9SVFMgKiBzaXplb2YodTY0KSwgcG1hYykgPT0gLTEpIHsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoKm1hYyA9PSB+MFVMTCkgeworCQlpZiAobmV0eGVuX2dldF9mbGFzaF9ibG9jayhhZGFwdGVyLAorCQkJCQkgICBVU0VSX1NUQVJUX09MRCArCisJCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fdXNlcl9vbGRfaW5mbywKKwkJCQkJCSAgICBtYWNfYWRkciksCisJCQkJCSAgIEZMQVNIX05VTV9QT1JUUyAqIHNpemVvZih1NjQpLAorCQkJCQkgICBwbWFjKSA9PSAtMSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCptYWMgPT0gfjBVTEwpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ2hhbmdlcyB0aGUgQ1JCIHdpbmRvdyB0byB0aGUgc3BlY2lmaWVkIHdpbmRvdy4KKyAqLwordm9pZCBuZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHduZHcpCit7CisJdm9pZCBfX2lvbWVtICpvZmZzZXQ7CisJdTMyIHRtcDsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKGFkYXB0ZXItPmN1cnJfd2luZG93ID09IHduZHcpCisJCXJldHVybjsKKworCS8qCisJICogTW92ZSB0aGUgQ1JCIHdpbmRvdy4KKwkgKiBXZSBuZWVkIHRvIHdyaXRlIHRvIHRoZSAiZGlyZWN0IGFjY2VzcyIgcmVnaW9uIG9mIFBDSQorCSAqIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHdpbmRvdyByZWdpc3RlciBoYXMKKwkgKiBub3QgYmVlbiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBhY3Jvc3MgQ1JCIGJlZm9yZSB0aGUgdGFyZ2V0CisJICogcmVnaXN0ZXIgYWRkcmVzcyBpcyByZWNlaXZlZCBieSBQQ0kuIFRoZSBkaXJlY3QgcmVnaW9uIGJ5cGFzc2VzCisJICogdGhlIENSQiBidXMuCisJICovCisJb2Zmc2V0ID0KKwkgICAgUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKKwkJCQkgICAgTkVUWEVOX1BDSVhfUEhfUkVHKFBDSVhfQ1JCX1dJTkRPVykpOworCisJaWYgKHduZHcgJiAweDEpCisJCXduZHcgPSBORVRYRU5fV0lORE9XX09ORTsKKworCXdyaXRlbCh3bmR3LCBvZmZzZXQpOworCisJLyogTVVTVCBtYWtlIHN1cmUgd2luZG93IGlzIHNldCBiZWZvcmUgd2UgZm9yZ2Ugb24uLi4gKi8KKwl3aGlsZSAoKHRtcCA9IHJlYWRsKG9mZnNldCkpICE9IHduZHcpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzIFdBUk5JTkc6IENSQiB3aW5kb3cgdmFsdWUgbm90ICIKKwkJICAgICAgICJyZWdpc3RlcmVkIHByb3Blcmx5OiAweCUwOHguXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgX19GVU5DVElPTl9fLCB0bXApOworCQltZGVsYXkoMSk7CisJCWlmIChjb3VudCA+PSAxMCkKKwkJCWJyZWFrOworCQljb3VudCsrOworCX0KKworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gd25kdzsKK30KKwordm9pZCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJbG9uZyBkYXRhLCBzaXplID0gMDsKKwlsb25nIGZsYXNoYWRkciA9IE5FVFhFTl9GTEFTSF9CQVNFLCBtZW1hZGRyID0gTkVUWEVOX1BIQU5UT01fTUVNX0JBU0U7CisJdTY0IG9mZjsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlzaXplID0gTkVUWEVOX0ZJUk1XQVJFX0xFTjsKKwl3cml0ZWwoMSwgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfQ0FTX1JTVCkpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgZmxhc2hhZGRyLCAoaW50ICopJmRhdGEpICE9IDApIHsKKwkJCURQUklOVEsoRVJSLAorCQkJCSJFcnJvciBpbiBuZXR4ZW5fcm9tX2Zhc3RfcmVhZCgpLiBXaWxsIHNraXAiCisJCQkJImxvYWRpbmcgZmxhc2ggaW1hZ2VcbiIpOworCQkJcmV0dXJuOworCQl9CisJCW9mZiA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3coYWRhcHRlciwgbWVtYWRkcik7CisJCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKKwkJd3JpdGVsKGRhdGEsIGFkZHIpOworCQlmbGFzaGFkZHIgKz0gNDsKKwkJbWVtYWRkciArPSA0OworCX0KKwl1ZGVsYXkoMTAwKTsKKwkvKiBtYWtlIHN1cmUgQ2FzcGVyIGlzIHBvd2VyZWQgb24gKi8KKwl3cml0ZWwoMHgzZmZmLAorCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX0dMQl9DSElQX0NMS19DVFJMKSk7CisJd3JpdGVsKDAsIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfR0xCX0NBU19SU1QpKTsKKworCXVkZWxheSgxMDApOworfQorCitpbnQKK25ldHhlbl9uaWNfaHdfd3JpdGVfd3goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLCB2b2lkICpkYXRhLAorCQkgICAgICAgaW50IGxlbikKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsKKwkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7CisJfSBlbHNlIHsJCS8qIFdpbmRvdyAwICovCisJCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAwKTsKKwl9CisKKwlEUFJJTlRLKElORk8sICJ3cml0aW5nIHRvIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXAiCisJCSIgZGF0YSAlbGx4IGxlbiAlZFxuIiwKKwkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyLAorCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIGxlbik7CisJaWYgKCFhZGRyKSB7CisJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMSk7CisJCXJldHVybiAxOworCX0KKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQl3cml0ZWIoKih1OCAqKSBkYXRhLCBhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3cml0ZXcoKih1MTYgKikgZGF0YSwgYWRkcik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJd3JpdGVsKCoodTMyICopIGRhdGEsIGFkZHIpOworCQlicmVhazsKKwljYXNlIDg6CisJCXdyaXRlcSgqKHU2NCAqKSBkYXRhLCBhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFBSSU5USyhJTkZPLAorCQkJIndyaXRpbmcgZGF0YSAlbHggdG8gb2Zmc2V0ICVsbHgsIG51bSB3b3Jkcz0lZFxuIiwKKwkJCSoodW5zaWduZWQgbG9uZyAqKWRhdGEsIG9mZiwgKGxlbiA+PiAzKSk7CisKKwkJbmV0eGVuX25pY19od19ibG9ja193cml0ZTY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAorCQkJCQkgICAgKGxlbiA+PiAzKSk7CisJCWJyZWFrOworCX0KKwlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQorCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorbmV0eGVuX25pY19od19yZWFkX3d4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdm9pZCAqZGF0YSwKKwkJICAgICAgaW50IGxlbikKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlpZiAoQUREUl9JTl9XSU5ET1cxKG9mZikpIHsJLyogV2luZG93IDEgKi8KKwkJYWRkciA9IE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIG9mZik7CisJfSBlbHNlIHsJCS8qIFdpbmRvdyAwICovCisJCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAwKTsKKwl9CisKKwlEUFJJTlRLKElORk8sICJyZWFkaW5nIGZyb20gYmFzZSAlbHggb2Zmc2V0ICVsbHggYWRkciAlcFxuIiwKKwkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyKTsKKwlpZiAoIWFkZHIpIHsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAxKTsKKwkJcmV0dXJuIDE7CisJfQorCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQkqKHU4ICopIGRhdGEgPSByZWFkYihhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqKHUxNiAqKSBkYXRhID0gcmVhZHcoYWRkcik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJKih1MzIgKikgZGF0YSA9IHJlYWRsKGFkZHIpOworCQlicmVhazsKKwljYXNlIDg6CisJCSoodTY0ICopIGRhdGEgPSByZWFkcShhZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQoKHU2NCBfX2lvbWVtICopIGRhdGEsIGFkZHIsCisJCQkJCSAgIChsZW4gPj4gMykpOworCQlicmVhazsKKwl9CisJRFBSSU5USyhJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOworCisJaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAxKTsKKworCXJldHVybiAwOworfQorCit2b2lkIG5ldHhlbl9uaWNfcmVnX3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwgdTMyIHZhbCkKK3sJCQkJLyogT25seSBmb3Igd2luZG93IDEgKi8KKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKKwlEUFJJTlRLKElORk8sICJ3cml0aW5nIHRvIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXAgZGF0YSAleFxuIiwKKwkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyKTsKKwl3cml0ZWwodmFsLCBhZGRyKTsKKworfQorCitpbnQgbmV0eGVuX25pY19yZWdfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCBvZmYpCit7CQkJCS8qIE9ubHkgZm9yIHdpbmRvdyAxICovCisJdm9pZCBfX2lvbWVtICphZGRyOworCWludCB2YWw7CisKKwlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKKwlEUFJJTlRLKElORk8sICJyZWFkaW5nIGZyb20gYmFzZSAlbHggb2Zmc2V0ICVsbHggYWRkciAlcFxuIiwKKwkJYWRhcHRlci0+YWh3LnBjaV9iYXNlLCBvZmYsIGFkZHIpOworCXZhbCA9IHJlYWRsKGFkZHIpOworCXdyaXRlbCh2YWwsIGFkZHIpOworCisJcmV0dXJuIHZhbDsKK30KKworLyogQ2hhbmdlIHRoZSB3aW5kb3cgdG8gMCwgd3JpdGUgYW5kIGNoYW5nZSBiYWNrIHRvIHdpbmRvdyAxLiAqLwordm9pZCBuZXR4ZW5fbmljX3dyaXRlX3cwKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICphZGRyOworCisJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAwKTsKKwlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIGluZGV4KTsKKwl3cml0ZWwodmFsdWUsIGFkZHIpOworCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMSk7Cit9CisKKy8qIENoYW5nZSB0aGUgd2luZG93IHRvIDAsIHJlYWQgYW5kIGNoYW5nZSBiYWNrIHRvIHdpbmRvdyAxLiAqLwordm9pZCBuZXR4ZW5fbmljX3JlYWRfdzAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgaW5kZXgsIHUzMiAqIHZhbHVlKQoreworCXZvaWQgX19pb21lbSAqYWRkcjsKKworCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgaW5kZXgpOworCisJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAwKTsKKwkqdmFsdWUgPSByZWFkbChhZGRyKTsKKwluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworfQorCitpbnQgbmV0eGVuX3BjaV9zZXRfd2luZG93X3dhcm5pbmdfY291bnQgPSAwOworCit1bnNpZ25lZCBsb25nCituZXR4ZW5fbmljX3BjaV9zZXRfd2luZG93KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCit7CisJc3RhdGljIGludCBkZHJfbW5fd2luZG93ID0gLTE7CisJc3RhdGljIGludCBxZHJfc25fd2luZG93ID0gLTE7CisJaW50IHdpbmRvdzsKKworCWlmIChBRERSX0lOX1JBTkdFKGFkZHIsIE5FVFhFTl9BRERSX0REUl9ORVQsIE5FVFhFTl9BRERSX0REUl9ORVRfTUFYKSkgeworCQkvKiBERFIgbmV0d29yayBzaWRlICovCisJCWFkZHIgLT0gTkVUWEVOX0FERFJfRERSX05FVDsKKwkJd2luZG93ID0gKGFkZHIgPj4gMjUpICYgMHgzZmY7CisJCWlmIChkZHJfbW5fd2luZG93ICE9IHdpbmRvdykgeworCQkJZGRyX21uX3dpbmRvdyA9IHdpbmRvdzsKKwkJCXdyaXRlbCh3aW5kb3csIFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCisJCQkJCQkJICAgICAgIE5FVFhFTl9QQ0lYX1BIX1JFRworCQkJCQkJCSAgICAgICAoUENJWF9NTl9XSU5ET1cpKSk7CisJCQkvKiBNVVNUIG1ha2Ugc3VyZSB3aW5kb3cgaXMgc2V0IGJlZm9yZSB3ZSBmb3JnZSBvbi4uLiAqLworCQkJcmVhZGwoUENJX09GRlNFVF9TRUNPTkRfUkFOR0UoYWRhcHRlciwKKwkJCQkJCSAgICAgIE5FVFhFTl9QQ0lYX1BIX1JFRworCQkJCQkJICAgICAgKFBDSVhfTU5fV0lORE9XKSkpOworCQl9CisJCWFkZHIgLT0gKHdpbmRvdyAqIE5FVFhFTl9XSU5ET1dfT05FKTsKKwkJYWRkciArPSBORVRYRU5fUENJX0REUl9ORVQ7CisJfSBlbHNlIGlmIChBRERSX0lOX1JBTkdFKGFkZHIsIE5FVFhFTl9BRERSX09DTTAsIE5FVFhFTl9BRERSX09DTTBfTUFYKSkgeworCQlhZGRyIC09IE5FVFhFTl9BRERSX09DTTA7CisJCWFkZHIgKz0gTkVUWEVOX1BDSV9PQ00wOworCX0gZWxzZSBpZiAoQUREUl9JTl9SQU5HRShhZGRyLCBORVRYRU5fQUREUl9PQ00xLCBORVRYRU5fQUREUl9PQ00xX01BWCkpIHsKKwkJYWRkciAtPSBORVRYRU5fQUREUl9PQ00xOworCQlhZGRyICs9IE5FVFhFTl9QQ0lfT0NNMTsKKwl9IGVsc2UKKwkgICAgaWYgKEFERFJfSU5fUkFOR0UKKwkJKGFkZHIsIE5FVFhFTl9BRERSX1FEUl9ORVQsIE5FVFhFTl9BRERSX1FEUl9ORVRfTUFYKSkgeworCQkvKiBRRFIgbmV0d29yayBzaWRlICovCisJCWFkZHIgLT0gTkVUWEVOX0FERFJfUURSX05FVDsKKwkJd2luZG93ID0gKGFkZHIgPj4gMjIpICYgMHgzZjsKKwkJaWYgKHFkcl9zbl93aW5kb3cgIT0gd2luZG93KSB7CisJCQlxZHJfc25fd2luZG93ID0gd2luZG93OworCQkJd3JpdGVsKCh3aW5kb3cgPDwgMjIpLAorCQkJICAgICAgIFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCisJCQkJCQkgICAgICAgTkVUWEVOX1BDSVhfUEhfUkVHCisJCQkJCQkgICAgICAgKFBDSVhfU05fV0lORE9XKSkpOworCQkJLyogTVVTVCBtYWtlIHN1cmUgd2luZG93IGlzIHNldCBiZWZvcmUgd2UgZm9yZ2Ugb24uLi4gKi8KKwkJCXJlYWRsKFBDSV9PRkZTRVRfU0VDT05EX1JBTkdFKGFkYXB0ZXIsCisJCQkJCQkgICAgICBORVRYRU5fUENJWF9QSF9SRUcKKwkJCQkJCSAgICAgIChQQ0lYX1NOX1dJTkRPVykpKTsKKwkJfQorCQlhZGRyIC09ICh3aW5kb3cgKiAweDQwMDAwMCk7CisJCWFkZHIgKz0gTkVUWEVOX1BDSV9RRFJfTkVUOworCX0gZWxzZSB7CisJCS8qCisJCSAqIHBlZyBnZGIgZnJlcXVlbnRseSBhY2Nlc3NlcyBtZW1vcnkgdGhhdCBkb2Vzbid0IGV4aXN0LAorCQkgKiB0aGlzIGxpbWl0cyB0aGUgY2hpdCBjaGF0IHNvIGRlYnVnZ2luZyBpc24ndCBzbG93ZWQgZG93bi4KKwkJICovCisJCWlmICgobmV0eGVuX3BjaV9zZXRfd2luZG93X3dhcm5pbmdfY291bnQrKyA8IDgpCisJCSAgICB8fCAobmV0eGVuX3BjaV9zZXRfd2luZG93X3dhcm5pbmdfY291bnQgJSA2NCA9PSAwKSkKKwkJCXByaW50aygiJXM6IFdhcm5pbmc6bmV0eGVuX25pY19wY2lfc2V0X3dpbmRvdygpIgorCQkJICAgICAgICIgVW5rbm93biBhZGRyZXNzIHJhbmdlIVxuIiwKKwkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKworCX0KKwlyZXR1cm4gYWRkcjsKK30KKworaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBydiA9IDA7CisJaW50IGFkZHIgPSBCUkRDRkdfU1RBUlQ7CisJc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvICpib2FyZGluZm87CisJaW50IGluZGV4OworCXUzMiAqcHRyMzI7CisKKwlib2FyZGluZm8gPSAmYWRhcHRlci0+YWh3LmJvYXJkY2ZnOworCXB0cjMyID0gKHUzMiAqKSBib2FyZGluZm87CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzaXplb2Yoc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvKSAvIHNpemVvZih1MzIpOworCSAgICAgaW5kZXgrKykgeworCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgcHRyMzIpID09IC0xKSB7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlwdHIzMisrOworCQlhZGRyICs9IHNpemVvZih1MzIpOworCX0KKwlpZiAoYm9hcmRpbmZvLT5tYWdpYyAhPSBORVRYRU5fQkRJTkZPX01BR0lDKSB7CisJCXByaW50aygiJXM6IEVSUk9SIHJlYWRpbmcgJXMgYm9hcmQgY29uZmlnLiIKKwkJICAgICAgICIgUmVhZCAleCwgZXhwZWN0ZWQgJXhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkgICAgICAgYm9hcmRpbmZvLT5tYWdpYywgTkVUWEVOX0JESU5GT19NQUdJQyk7CisJCXJ2ID0gLTE7CisJfQorCWlmIChib2FyZGluZm8tPmhlYWRlcl92ZXJzaW9uICE9IE5FVFhFTl9CRElORk9fVkVSU0lPTikgeworCQlwcmludGsoIiVzOiBVbmtub3duIGJvYXJkIGNvbmZpZyB2ZXJzaW9uLiIKKwkJICAgICAgICIgUmVhZCAleCwgZXhwZWN0ZWQgJXhcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCSAgICAgICBib2FyZGluZm8tPmhlYWRlcl92ZXJzaW9uLCBORVRYRU5fQkRJTkZPX1ZFUlNJT04pOworCQlydiA9IC0xOworCX0KKworCURQUklOVEsoSU5GTywgIkRpc2NvdmVyZWQgYm9hcmQgdHlwZToweCV4ICAiLCBib2FyZGluZm8tPmJvYXJkX3R5cGUpOworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKKwkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX0dCRTsKKwkJYnJlYWs7CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19ITUVaOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfQ1g0OgorCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfWEdCRTsKKwkJYnJlYWs7CisJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9CRDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AxX1NCOgorCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfU01BWDoKKwljYXNlIE5FVFhFTl9CUkRUWVBFX1AxX1NPQ0s6CisJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlID0gTkVUWEVOX05JQ19HQkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiJXM6IFVua25vd24oJXgpXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkgICAgICAgYm9hcmRpbmZvLT5ib2FyZF90eXBlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJ2OworfQorCisvKiBOSVUgYWNjZXNzIHNlY3Rpb25zICovCisKK2ludCBuZXR4ZW5fbmljX3NldF9tdHVfZ2Ioc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCW5ldHhlbl9uaWNfd3JpdGVfdzAoYWRhcHRlciwKKwkJCSAgICBORVRYRU5fTklVX0dCX01BWF9GUkFNRV9TSVpFKHBvcnQtPnBvcnRudW0pLAorCQkJICAgIG5ld19tdHUpOworCXJldHVybiAwOworfQorCitpbnQgbmV0eGVuX25pY19zZXRfbXR1X3hnYihzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJbmV3X210dSArPSBORVRYRU5fTklVX0hEUlNJWkUgKyBORVRYRU5fTklVX1RMUlNJWkU7CisJbmV0eGVuX25pY193cml0ZV93MChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9NQVhfRlJBTUVfU0laRSwgbmV3X210dSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmV0eGVuX25pY19pbml0X25pdV9nYihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHBvcnRubzsKKwlmb3IgKHBvcnRubyA9IDA7IHBvcnRubyA8IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUzsgcG9ydG5vKyspCisJCW5ldHhlbl9uaXVfZ2JlX2luaXRfcG9ydChhZGFwdGVyLCBwb3J0bm8pOworfQorCit2b2lkIG5ldHhlbl9uaWNfc3RvcF9hbGxfcG9ydHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBwb3J0X25yOworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydDsKKworCWZvciAocG9ydF9uciA9IDA7IHBvcnRfbnIgPCBhZGFwdGVyLT5haHcubWF4X3BvcnRzOyBwb3J0X25yKyspIHsKKwkJcG9ydCA9IGFkYXB0ZXItPnBvcnRbcG9ydF9ucl07CisJCWlmIChhZGFwdGVyLT5vcHMtPnN0b3BfcG9ydCkKKwkJCWFkYXB0ZXItPm9wcy0+c3RvcF9wb3J0KGFkYXB0ZXIsIHBvcnQtPnBvcnRudW0pOworCX0KK30KKwordm9pZAorbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgbG9uZyBvZmYsCisJCQkgICAgaW50IGRhdGEpCit7CisJdm9pZCBfX2lvbWVtICphZGRyOworCisJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKSB7CisJCXdyaXRlbChkYXRhLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpKTsKKwl9IGVsc2UgeworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDApOworCQlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIG9mZik7CisJCXdyaXRlbChkYXRhLCBhZGRyKTsKKwkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvdyhhZGFwdGVyLCAxKTsKKwl9Cit9CisKK3ZvaWQgbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCV9fbGUzMiBzdGF0dXM7CisJdTE2IGF1dG9uZWc7CisJX19sZTMyIG1vZGU7CisKKwluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9NT0RFLCAmbW9kZSk7CisJaWYgKG5ldHhlbl9nZXRfbml1X2VuYWJsZV9nZShtb2RlKSkgewkvKiBHYiAxMC8xMDAvMTAwMCBNYnBzIG1vZGUgKi8KKwkJaWYgKGFkYXB0ZXItPm9wcy0+cGh5X3JlYWQKKwkJICAgICYmIGFkYXB0ZXItPm9wcy0+CisJCSAgICBwaHlfcmVhZChhZGFwdGVyLCBwb3J0LT5wb3J0bnVtLAorCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKKwkJCSAgICAgJnN0YXR1cykgPT0gMCkgeworCQkJaWYgKG5ldHhlbl9nZXRfcGh5X2xpbmsoc3RhdHVzKSkgeworCQkJCXN3aXRjaCAobmV0eGVuX2dldF9waHlfc3BlZWQoc3RhdHVzKSkgeworCQkJCWNhc2UgMDoKKwkJCQkJcG9ydC0+bGlua19zcGVlZCA9IFNQRUVEXzEwOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE6CisJCQkJCXBvcnQtPmxpbmtfc3BlZWQgPSBTUEVFRF8xMDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJcG9ydC0+bGlua19zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXBvcnQtPmxpbmtfc3BlZWQgPSAtMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN3aXRjaCAobmV0eGVuX2dldF9waHlfZHVwbGV4KHN0YXR1cykpIHsKKwkJCQljYXNlIDA6CisJCQkJCXBvcnQtPmxpbmtfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJcG9ydC0+bGlua19kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcG9ydC0+bGlua19kdXBsZXggPSAtMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChhZGFwdGVyLT5vcHMtPnBoeV9yZWFkCisJCQkJICAgICYmIGFkYXB0ZXItPm9wcy0+CisJCQkJICAgIHBoeV9yZWFkKGFkYXB0ZXIsIHBvcnQtPnBvcnRudW0sCisJCQkJCSAgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0FVVE9ORUcsCisJCQkJCSAgICAgKF9fbGUzMiAqKSAmIGF1dG9uZWcpICE9IDApCisJCQkJCXBvcnQtPmxpbmtfYXV0b25lZyA9IGF1dG9uZWc7CisJCQl9IGVsc2UKKwkJCQlnb3RvIGxpbmtfZG93bjsKKwkJfSBlbHNlIHsKKwkJICAgICAgbGlua19kb3duOgorCQkJcG9ydC0+bGlua19zcGVlZCA9IC0xOworCQkJcG9ydC0+bGlua19kdXBsZXggPSAtMTsKKwkJfQorCX0KK30KKwordm9pZCBuZXR4ZW5fbmljX2ZsYXNoX3ByaW50KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgdmFsaWQgPSAxOworCXUzMiBmd19tYWpvciA9IDA7CisJdTMyIGZ3X21pbm9yID0gMDsKKwl1MzIgZndfYnVpbGQgPSAwOworCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKKwlzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8gdXNlcl9pbmZvOworCWludCBpLCBhZGRyID0gVVNFUl9TVEFSVDsKKwl1MzIgKnB0cjMyOworCisJc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvICpib2FyZF9pbmZvID0gJihhZGFwdGVyLT5haHcuYm9hcmRjZmcpOworCWlmIChib2FyZF9pbmZvLT5tYWdpYyAhPSBORVRYRU5fQkRJTkZPX01BR0lDKSB7CisJCXByaW50aworCQkgICAgKCJOZXRYZW4gVW5rbm93biBib2FyZCBjb25maWcsIFJlYWQgMHgleCBleHBlY3RlZCBhcyAweCV4XG4iLAorCQkgICAgIGJvYXJkX2luZm8tPm1hZ2ljLCBORVRYRU5fQkRJTkZPX01BR0lDKTsKKwkJdmFsaWQgPSAwOworCX0KKwlpZiAoYm9hcmRfaW5mby0+aGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7CisJCXByaW50aygiTmV0WGVuIFVua25vd24gYm9hcmQgY29uZmlnIHZlcnNpb24uIgorCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwKKwkJICAgICAgIGJvYXJkX2luZm8tPmhlYWRlcl92ZXJzaW9uLCBORVRYRU5fQkRJTkZPX1ZFUlNJT04pOworCQl2YWxpZCA9IDA7CisJfQorCWlmICh2YWxpZCkgeworCQlwdHIzMiA9ICh1MzIgKikgJiB1c2VyX2luZm87CisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IHNpemVvZihzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8pIC8gc2l6ZW9mKHUzMik7CisJCSAgICAgaSsrKSB7CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkciwgcHRyMzIpID09IC0xKSB7CisJCQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCB1c2VyYXJlYS5cbiIsCisJCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXB0cjMyKys7CisJCQlhZGRyICs9IHNpemVvZih1MzIpOworCQl9CisJCWdldF9icmRfbmFtZV9ieV90eXBlKGJvYXJkX2luZm8tPmJvYXJkX3R5cGUsIGJyZF9uYW1lKTsKKworCQlwcmludGsoIk5ldFhlbiAlcyBCb2FyZCBTL04gJXMgIENoaXAgaWQgMHgleFxuIiwKKwkJICAgICAgIGJyZF9uYW1lLCB1c2VyX2luZm8uc2VyaWFsX251bSwgYm9hcmRfaW5mby0+Y2hpcF9pZCk7CisKKwkJcHJpbnRrKCJOZXRYZW4gJXMgQm9hcmQgIyVkLCBDaGlwIGlkIDB4JXhcbiIsCisJCSAgICAgICBib2FyZF9pbmZvLT5ib2FyZF90eXBlID09IDB4MGIgPyAiWEdCIiA6ICJHQkUiLAorCQkgICAgICAgYm9hcmRfaW5mby0+Ym9hcmRfbnVtLCBib2FyZF9pbmZvLT5jaGlwX2lkKTsKKwkJZndfbWFqb3IgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAorCQkJCQkJICAgICAgTkVUWEVOX0ZXX1ZFUlNJT05fTUFKT1IpKTsKKwkJZndfbWlub3IgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAorCQkJCQkJICAgICAgTkVUWEVOX0ZXX1ZFUlNJT05fTUlOT1IpKTsKKwkJZndfYnVpbGQgPQorCQkgICAgcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgTkVUWEVOX0ZXX1ZFUlNJT05fU1VCKSk7CisKKwkJcHJpbnRrKCJOZXRYZW4gRmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZFxuIiwgZndfbWFqb3IsIGZ3X21pbm9yLAorCQkgICAgICAgZndfYnVpbGQpOworCX0KKwlpZiAoZndfbWFqb3IgIT0gX05FVFhFTl9OSUNfTElOVVhfTUFKT1IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJUaGUgbWlzbWF0Y2ggaW4gZHJpdmVyIHZlcnNpb24gYW5kIGZpcm13YXJlICIKKwkJICAgICAgICJ2ZXJzaW9uIG1ham9yIG51bWJlclxuIgorCQkgICAgICAgIkRyaXZlciB2ZXJzaW9uIG1ham9yIG51bWJlciA9ICVkIFx0IgorCQkgICAgICAgIkZpcm13YXJlIHZlcnNpb24gbWFqb3IgbnVtYmVyID0gJWQgXG4iLAorCQkgICAgICAgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IsIGZ3X21ham9yKTsKKwkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKKwl9CisJaWYgKGZ3X21pbm9yICE9IF9ORVRYRU5fTklDX0xJTlVYX01JTk9SKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVGhlIG1pc21hdGNoIGluIGRyaXZlciB2ZXJzaW9uIGFuZCBmaXJtd2FyZSAiCisJCSAgICAgICAidmVyc2lvbiBtaW5vciBudW1iZXJcbiIKKwkJICAgICAgICJEcml2ZXIgdmVyc2lvbiBtaW5vciBudW1iZXIgPSAlZCBcdCIKKwkJICAgICAgICJGaXJtd2FyZSB2ZXJzaW9uIG1pbm9yIG51bWJlciA9ICVkIFxuIiwKKwkJICAgICAgIF9ORVRYRU5fTklDX0xJTlVYX01JTk9SLCBmd19taW5vcik7CisJCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDE7CisJfQorCWlmIChhZGFwdGVyLT5kcml2ZXJfbWlzbWF0Y2gpCisJCXByaW50ayhLRVJOX0lORk8gIlVzZSB0aGUgZHJpdmVyIHdpdGggdmVyc2lvbiBubyAlZC4lZC54eHhcbiIsCisJCSAgICAgICBmd19tYWpvciwgZndfbWlub3IpOworfQorCitpbnQgbmV0eGVuX2NyYl9yZWFkX3ZhbChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGxvbmcgb2ZmKQoreworCWludCBkYXRhOworCW5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBvZmYsICZkYXRhLCA0KTsKKwlyZXR1cm4gZGF0YTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMWE2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqIAorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICogCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogICAgaW5mb0BuZXR4ZW4uY29tCisgKiBOZXRYZW4sCisgKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCisgKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqCisgKgorICogU3RydWN0dXJlcywgZW51bXMsIGFuZCBtYWNyb3MgZm9yIHRoZSBNQUMKKyAqCisgKi8KKworI2lmbmRlZiBfX05FVFhFTl9OSUNfSFdfSF8KKyNkZWZpbmUgX19ORVRYRU5fTklDX0hXX0hfCisKKyNpbmNsdWRlICJuZXR4ZW5fbmljX2hkci5oIgorCisvKiBIYXJkd2FyZSBtZW1vcnkgc2l6ZSBvZiAxMjggbWVnICovCisjZGVmaW5lIE5FVFhFTl9NRU1BRERSX01BWCAoMTI4ICogMTAyNCAqIDEwMjQpCisKKyNpZm5kZWYgcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKHZvaWQgX19pb21lbSAqIGFkZHIpCit7CisJcmV0dXJuIHJlYWRsKGFkZHIpIHwgKCgodTY0KSByZWFkbChhZGRyICsgNCkpIDw8IDMyTEwpOworfQorI2VuZGlmCisKKyNpZm5kZWYgd3JpdGVxCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVxKHU2NCB2YWwsIHZvaWQgX19pb21lbSAqIGFkZHIpCit7CisJd3JpdGVsKCgodTMyKSAodmFsKSksIChhZGRyKSk7CisJd3JpdGVsKCgodTMyKSAodmFsID4+IDMyKSksIChhZGRyICsgNCkpOworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXR4ZW5fbmljX2h3X2Jsb2NrX3dyaXRlNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKKwkJCQkJICAgICAgIHU2NCBfX2lvbWVtICogYWRkciwKKwkJCQkJICAgICAgIGludCBudW1fd29yZHMpCit7CisJaW50IG51bTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IG51bV93b3JkczsgbnVtKyspIHsKKwkJd3JpdGVxKHJlYWRxKCh2b2lkIF9faW9tZW0gKilkYXRhX3B0ciksIGFkZHIpOworCQlhZGRyKys7CisJCWRhdGFfcHRyKys7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19od19ibG9ja19yZWFkNjQodTY0IF9faW9tZW0gKiBkYXRhX3B0ciwKKwkJCQkJICAgICAgdTY0IF9faW9tZW0gKiBhZGRyLCBpbnQgbnVtX3dvcmRzKQoreworCWludCBudW07CisJZm9yIChudW0gPSAwOyBudW0gPCBudW1fd29yZHM7IG51bSsrKSB7CisJCXdyaXRlcShyZWFkcSgodm9pZCBfX2lvbWVtICopYWRkciksIGRhdGFfcHRyKTsKKwkJYWRkcisrOworCQlkYXRhX3B0cisrOworCX0KKworfQorCitzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXI7CisKKyNkZWZpbmUgTkVUWEVOX1BDSV9NQVBTSVpFX0JZVEVTICAoTkVUWEVOX1BDSV9NQVBTSVpFIDw8IDIwKQorCisjZGVmaW5lIE5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKFgsIFkpCVwKKwlhZGRyID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIChYKSk7CVwKKwkqKHUzMiAqKVkgPSByZWFkbChhZGRyKTsKKworc3RydWN0IG5ldHhlbl9wb3J0Owordm9pZCBuZXR4ZW5fbmljX3NldF9saW5rX3BhcmFtZXRlcnMoc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0KTsKK3ZvaWQgbmV0eGVuX25pY19mbGFzaF9wcmludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLAorCQkJICAgdm9pZCAqZGF0YSwgaW50IGxlbik7Cit2b2lkIG5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHVuc2lnbmVkIGxvbmcgb2ZmLCBpbnQgZGF0YSk7CitpbnQgbmV0eGVuX25pY19od19yZWFkX3d4KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0IG9mZiwKKwkJCSAgdm9pZCAqZGF0YSwgaW50IGxlbik7CisKK3R5cGVkZWYgdTggbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdFs2XTsKKworLyogTmliYmxlIG9yIEJ5dGUgbW9kZSBmb3IgcGh5IGludGVyZmFjZSAoR2JFIG1vZGUgb25seSkgKi8KK3R5cGVkZWYgZW51bSB7CisJTkVUWEVOX05JVV8xMF8xMDBfTUIgPSAwLAorCU5FVFhFTl9OSVVfMTAwMF9NQgorfSBuZXR4ZW5fbml1X2diZV9pZm1vZGVfdDsKKworI2RlZmluZSBfbmV0eGVuX2NyYl9nZXRfYml0KHZhciwgYml0KSAgKCh2YXIgPj4gYml0KSAmIDB4MSkKKworLyoKKyAqIE5JVSBHQiBNQUMgQ29uZmlnIFJlZ2lzdGVyIDAgKGFwcGxpZXMgdG8gR0IwLCBHQjEsIEdCMiwgR0IzKQorICoKKyAqCUJpdCAwIDogZW5hYmxlX3R4ID0+IDE6ZW5hYmxlIGZyYW1lIHhtaXQsIDA6ZGlzYWJsZQorICoJQml0IDEgOiB0eF9zeW5jZWQgPT4gUi9POiB4bWl0IGVuYWJsZSBzeW5jaGVkIHRvIHhtaXQgc3RyZWFtCisgKglCaXQgMiA6IGVuYWJsZV9yeCA9PiAxOmVuYWJsZSBmcmFtZSByZWN2LCAwOmRpc2FibGUKKyAqCUJpdCAzIDogcnhfc3luY2VkID0+IFIvTzogcmVjdiBlbmFibGUgc3luY2hlZCB0byByZWN2IHN0cmVhbQorICoJQml0IDQgOiB0eF9mbG93Y3RsID0+IDE6ZW5hYmxlIHBhdXNlIGZyYW1lIGdlbmVyYXRpb24sIDA6ZGlzYWJsZQorICoJQml0IDUgOiByeF9mbG93Y3RsID0+IDE6YWN0IG9uIHJlY3YnZCBwYXVzZSBmcmFtZXMsIDA6aWdub3JlCisgKglCaXQgOCA6IGxvb3BiYWNrID0+IDE6bG9vcCBNQUMgeG1pdHMgdG8gTUFDIHJlY3ZzLCAwOm5vcm1hbAorICoJQml0IDE2OiB0eF9yZXNldF9wYiA9PiAxOnJlc2V0IGZyYW1lIHhtaXQgcHJvdG9jb2wgYmxrLCAwOm5vLW9wCisgKglCaXQgMTc6IHJ4X3Jlc2V0X3BiID0+IDE6cmVzZXQgZnJhbWUgcmVjdiBwcm90b2NvbCBibGssIDA6bm8tb3AKKyAqCUJpdCAxODogdHhfcmVzZXRfbWFjID0+IDE6cmVzZXQgZGF0YS9jdGwgbXVsdGlwbGV4ZXIgYmxrLCAwOm5vLW9wCisgKglCaXQgMTk6IHJ4X3Jlc2V0X21hYyA9PiAxOnJlc2V0IGN0bCBmcmFtZXMgJiB0aW1lcnMgYmxrLCAwOm5vLW9wCisgKglCaXQgMzE6IHNvZnRfcmVzZXQgPT4gMTpyZXNldCB0aGUgTUFDIGFuZCB0aGUgU0VSREVTLCAwOm5vLW9wCisgKi8KKworI2RlZmluZSBuZXR4ZW5fZ2JfZW5hYmxlX3R4KGNvbmZpZ193b3JkKQlcCisJc2V0X2JpdCgwLCAodW5zaWduZWQgbG9uZyopKCZjb25maWdfd29yZCkpCisjZGVmaW5lIG5ldHhlbl9nYl9lbmFibGVfcngoY29uZmlnX3dvcmQpCVwKKwlzZXRfYml0KDIsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKyNkZWZpbmUgbmV0eGVuX2diX3R4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKKwlzZXRfYml0KDQsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKyNkZWZpbmUgbmV0eGVuX2diX3J4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKKwlzZXRfYml0KDUsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKyNkZWZpbmUgbmV0eGVuX2diX3R4X3Jlc2V0X3BiKGNvbmZpZ193b3JkKQlcCisJCXNldF9iaXQoMTYsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKyNkZWZpbmUgbmV0eGVuX2diX3J4X3Jlc2V0X3BiKGNvbmZpZ193b3JkKQlcCisJCXNldF9iaXQoMTcsICh1bnNpZ25lZCBsb25nKikoJmNvbmZpZ193b3JkKSkKKyNkZWZpbmUgbmV0eGVuX2diX3R4X3Jlc2V0X21hYyhjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDE4LCAodW5zaWduZWQgbG9uZyopKCZjb25maWdfd29yZCkpCisjZGVmaW5lIG5ldHhlbl9nYl9yeF9yZXNldF9tYWMoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCgxOSwgKHVuc2lnbmVkIGxvbmcqKSgmY29uZmlnX3dvcmQpKQorI2RlZmluZSBuZXR4ZW5fZ2Jfc29mdF9yZXNldChjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDMxLCAodW5zaWduZWQgbG9uZyopKCZjb25maWdfd29yZCkpCisKKyNkZWZpbmUgbmV0eGVuX2diX3Vuc2V0X3R4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKKwkJY2xlYXJfYml0KDQsICh1bnNpZ25lZCBsb25nICopKCZjb25maWdfd29yZCkpCisjZGVmaW5lIG5ldHhlbl9nYl91bnNldF9yeF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCisJCWNsZWFyX2JpdCg1LCAodW5zaWduZWQgbG9uZyopKCZjb25maWdfd29yZCkpCisKKyNkZWZpbmUgbmV0eGVuX2diX2dldF90eF9zeW5jZWQoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAxKQorI2RlZmluZSBuZXR4ZW5fZ2JfZ2V0X3J4X3N5bmNlZChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDMpCisjZGVmaW5lIG5ldHhlbl9nYl9nZXRfdHhfZmxvd2N0bChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDQpCisjZGVmaW5lIG5ldHhlbl9nYl9nZXRfcnhfZmxvd2N0bChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDUpCisjZGVmaW5lIG5ldHhlbl9nYl9nZXRfc29mdF9yZXNldChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDMxKQorCisvKgorICogTklVIEdCIE1BQyBDb25maWcgUmVnaXN0ZXIgMSAoYXBwbGllcyB0byBHQjAsIEdCMSwgR0IyLCBHQjMpCisgKgorICoJQml0IDAJICAgIDogZHVwbGV4ID0+IDE6ZnVsbCBkdXBsZXggbW9kZSwgMDpoYWxmIGR1cGxleAorICoJQml0IDEJICAgIDogY3JjX2VuYWJsZSA9PiAxOmFwcGVuZCBDUkMgdG8geG1pdCBmcmFtZXMsIDA6ZG9udCBhcHBlbmQKKyAqCUJpdCAyCSAgICA6IHBhZHNob3J0ID0+IDE6cGFkIHNob3J0IGZyYW1lcyBhbmQgYWRkIENSQywgMDpkb250IHBhZAorICoJQml0IDQJICAgIDogY2hlY2tsZW5ndGggPT4gMTpjaGVjayBmcmFtZWxlbiB3aXRoIGFjdHVhbCwwOmRvbnQgY2hlY2sKKyAqCUJpdCA1CSAgICA6IGh1Z2VmcmFtZXMgPT4gMTphbGxvdyBvdmVyc2l6ZSB4bWl0IGZyYW1lcywgMDpkb250IGFsbG93CisgKglCaXRzIDgtOSAgICA6IGludGZtb2RlID0+IDAxOm5pYmJsZSAoMTAvMTAwKSwgMTA6Ynl0ZSAoMTAwMCkKKyAqCUJpdHMgMTItMTUgIDogcHJlYW1ibGVsZW4gPT4gcHJlYW1ibGUgZmllbGQgbGVuZ3RoIGluIGJ5dGVzLCBkZWZhdWx0IDcKKyAqLworCisjZGVmaW5lIG5ldHhlbl9nYl9zZXRfZHVwbGV4KGNvbmZpZ193b3JkKQlcCisJCXNldF9iaXQoMCwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX2diX3NldF9jcmNfZW5hYmxlKGNvbmZpZ193b3JkKQlcCisJCXNldF9iaXQoMSwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX2diX3NldF9wYWRzaG9ydChjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDIsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisjZGVmaW5lIG5ldHhlbl9nYl9zZXRfY2hlY2tsZW5ndGgoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCg0LCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X2h1Z2VmcmFtZXMoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCg1LCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorI2RlZmluZSBuZXR4ZW5fZ2Jfc2V0X3ByZWFtYmxlbGVuKGNvbmZpZ193b3JkLCB2YWwpCVwKKwkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpIDw8IDEyKSAmIDB4RjAwMCkKKyNkZWZpbmUgbmV0eGVuX2diX3NldF9pbnRmbW9kZShjb25maWdfd29yZCwgdmFsKQkJXAorCQkoKGNvbmZpZ193b3JkKSB8PSAoKHZhbCkgPDwgOCkgJiAweDMwMCkKKworI2RlZmluZSBuZXR4ZW5fZ2JfZ2V0X3N0YXRpb25hZGRyZXNzX2xvdyhjb25maWdfd29yZCkgKChjb25maWdfd29yZCkgPj4gMTYpCisKKyNkZWZpbmUgbmV0eGVuX2diX3NldF9taWlfbWdtdF9jbG9ja3NlbGVjdChjb25maWdfd29yZCwgdmFsKQlcCisJCSgoY29uZmlnX3dvcmQpIHw9ICgodmFsKSAmIDB4MDcpKQorI2RlZmluZSBuZXR4ZW5fZ2JfbWlpX21nbXRfcmVzZXQoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCgzMSwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX2diX21paV9tZ210X3Vuc2V0KGNvbmZpZ193b3JkKQlcCisJCWNsZWFyX2JpdCgzMSwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKworLyoKKyAqIE5JVSBHQiBNSUkgTWdtdCBDb21tYW5kIFJlZ2lzdGVyIChhcHBsaWVzIHRvIEdCMCwgR0IxLCBHQjIsIEdCMykKKyAqIEJpdCAwIDogcmVhZF9jeWNsZSA9PiAxOnBlcmZvcm0gc2luZ2xlIHJlYWQgY3ljbGUsIDA6bm8tb3AKKyAqIEJpdCAxIDogc2Nhbl9jeWNsZSA9PiAxOnBlcmZvcm0gY29udGludW91cyByZWFkIGN5Y2xlcywgMDpuby1vcAorICovCisKKyNkZWZpbmUgbmV0eGVuX2diX21paV9tZ210X3NldF9yZWFkX2N5Y2xlKGNvbmZpZ193b3JkKQlcCisJCXNldF9iaXQoMCwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX2diX21paV9tZ210X3JlZ19hZGRyKGNvbmZpZ193b3JkLCB2YWwpCVwKKwkJKChjb25maWdfd29yZCkgfD0gKCh2YWwpICYgMHgxRikpCisjZGVmaW5lIG5ldHhlbl9nYl9taWlfbWdtdF9waHlfYWRkcihjb25maWdfd29yZCwgdmFsKQlcCisJCSgoY29uZmlnX3dvcmQpIHw9ICgoKHZhbCkgJiAweDFGKSA8PCA4KSkKKworLyoKKyAqIE5JVSBHQiBNSUkgTWdtdCBJbmRpY2F0b3JzIFJlZ2lzdGVyIChhcHBsaWVzIHRvIEdCMCwgR0IxLCBHQjIsIEdCMykKKyAqIFJlYWQtb25seSByZWdpc3Rlci4KKyAqIEJpdCAwIDogYnVzeSA9PiAxOnBlcmZvcm1pbmcgYW4gTUlJIG1nbXQgY3ljbGUsIDA6aWRsZQorICogQml0IDEgOiBzY2FubmluZyA9PiAxOnNjYW4gb3BlcmF0aW9uIGluIHByb2dyZXNzLCAwOmlkbGUKKyAqIEJpdCAyIDogbm90dmFsaWQgPT4gOm1nbXQgcmVzdWx0IGRhdGEgbm90IHlldCB2YWxpZCwgMDppZGxlCisgKi8KKyNkZWZpbmUgbmV0eGVuX2dldF9nYl9taWlfbWdtdF9idXN5KGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDApCisjZGVmaW5lIG5ldHhlbl9nZXRfZ2JfbWlpX21nbXRfc2Nhbm5pbmcoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMSkKKyNkZWZpbmUgbmV0eGVuX2dldF9nYl9taWlfbWdtdF9ub3R2YWxpZChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAyKQorCisvKgorICogUEhZLVNwZWNpZmljIE1JSSBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0NPTlRST0wgPSAwLAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9TVEFUVVMgPSAxLAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfSURfMCA9IDIsCisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9JRF8xID0gMywKKwlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfQVVUT05FRyA9IDQsCisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0xOS1BBUlQgPSA1LAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9BVVRPTkVHX01PUkUgPSA2LAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9ORVhUUEFHRV9YTUlUID0gNywKKwlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfTE5LUEFSVF9ORVhUUEFHRSA9IDgsCisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSXzEwMDBCVF9DT05UUk9MID0gOSwKKwlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfMTAwMEJUX1NUQVRVUyA9IDEwLAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9FWFRFTkRFRF9TVEFUVVMgPSAxNSwKKwlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX0NPTlRST0wgPSAxNiwKKwlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUyA9IDE3LAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9JTlRfRU5BQkxFID0gMTgsCisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0lOVF9TVEFUVVMgPSAxOSwKKwlORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX0NPTlRST0xfTU9SRSA9IDIwLAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9SRUNWX0VSUk9SX0NPVU5UID0gMjEsCisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0xFRF9DT05UUk9MID0gMjQsCisJTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0xFRF9PVkVSUklERSA9IDI1LAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfQ09OVFJPTF9NT1JFX1lFVCA9IDI2LAorCU5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTX01PUkUgPSAyNworfSBuZXR4ZW5fbml1X3BoeV9yZWdpc3Rlcl90OworCisvKgorICogUEhZLVNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAocmVnIDE3KS4KKyAqCisgKiBCaXQgMCAgICAgIDogamFiYmVyID0+IDE6amFiYmVyIGRldGVjdGVkLCAwOm5vdAorICogQml0IDEgICAgICA6IHBvbGFyaXR5ID0+IDE6cG9sYXJpdHkgcmV2ZXJzZWQsIDA6bm9ybWFsCisgKiBCaXQgMiAgICAgIDogcmVjdnBhdXNlID0+IDE6cmVjZWl2ZSBwYXVzZSBlbmFibGVkLCAwOmRpc2FibGVkCisgKiBCaXQgMyAgICAgIDogeG1pdHBhdXNlID0+IDE6dHJhbnNtaXQgcGF1c2UgZW5hYmxlZCwgMDpkaXNhYmxlZAorICogQml0IDQgICAgICA6IGVuZXJneWRldGVjdCA9PiAxOnNsZWVwLCAwOmFjdGl2ZQorICogQml0IDUgICAgICA6IGRvd25zaGlmdCA9PiAxOmRvd25zaGlmdCwgMDpubyBkb3duc2hpZnQKKyAqIEJpdCA2ICAgICAgOiBjcm9zc292ZXIgPT4gMTpNRElYIChjcm9zc292ZXIpLCAwOk1ESSAobm8gY3Jvc3NvdmVyKQorICogQml0cyA3LTkgICA6IGNhYmxlbGVuID0+IG5vdCB2YWxpZCBpbiAxME1iL3MgbW9kZQorICoJCQkwOjw1MG0sIDE6NTAtODBtLCAyOjgwLTExMG0sIDM6MTEwLTE0MG0sIDQ6PjE0MG0KKyAqIEJpdCAxMCAgICAgOiBsaW5rID0+IDE6bGluayB1cCwgMDpsaW5rIGRvd24KKyAqIEJpdCAxMSAgICAgOiByZXNvbHZlZCA9PiAxOnNwZWVkIGFuZCBkdXBsZXggcmVzb2x2ZWQsIDA6bm90IHlldAorICogQml0IDEyICAgICA6IHBhZ2VyY3ZkID0+IDE6cGFnZSByZWNlaXZlZCwgMDpwYWdlIG5vdCByZWNlaXZlZAorICogQml0IDEzICAgICA6IGR1cGxleCA9PiAxOmZ1bGwgZHVwbGV4LCAwOmhhbGYgZHVwbGV4CisgKiBCaXRzIDE0LTE1IDogc3BlZWQgPT4gMDoxME1iL3MsIDE6MTAwTWIvcywgMjoxMDAwTWIvcywgMzpyc3ZkCisgKi8KKworI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9jYWJsZWxlbihjb25maWdfd29yZCkgKCgoY29uZmlnX3dvcmQpID4+IDcpICYgMHgwNykKKyNkZWZpbmUgbmV0eGVuX2dldF9waHlfc3BlZWQoY29uZmlnX3dvcmQpICgoKGNvbmZpZ193b3JkKSA+PiAxNCkgJiAweDAzKQorCisjZGVmaW5lIG5ldHhlbl9zZXRfcGh5X3NwZWVkKGNvbmZpZ193b3JkLCB2YWwpCVwKKwkJKChjb25maWdfd29yZCkgfD0gKCh2YWwgJiAweDAzKSA8PCAxNCkpCisjZGVmaW5lIG5ldHhlbl9zZXRfcGh5X2R1cGxleChjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDEzLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorI2RlZmluZSBuZXR4ZW5fY2xlYXJfcGh5X2R1cGxleChjb25maWdfd29yZCkJXAorCQljbGVhcl9iaXQoMTMsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisKKyNkZWZpbmUgbmV0eGVuX2dldF9waHlfamFiYmVyKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDApCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X3BvbGFyaXR5KGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X3JlY3ZwYXVzZShjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAyKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV94bWl0cGF1c2UoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMykKKyNkZWZpbmUgbmV0eGVuX2dldF9waHlfZW5lcmd5ZGV0ZWN0KGNvbmZpZ193b3JkKSBcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDQpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2Rvd25zaGlmdChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA1KQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9jcm9zc292ZXIoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgNikKKyNkZWZpbmUgbmV0eGVuX2dldF9waHlfbGluayhjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMCkKKyNkZWZpbmUgbmV0eGVuX2dldF9waHlfcmVzb2x2ZWQoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTEpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X3BhZ2VyY3ZkKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEyKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9kdXBsZXgoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTMpCisKKy8qCisgKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgZGVmaW5pdGlvbgorICogVGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8gcmVnaXN0ZXJzIDE4IGFuZCAxOSAoaW50IGVuYWJsZSBhbmQgaW50IHN0YXR1cykuCisgKiBCaXQgMCA6IGphYmJlcgorICogQml0IDEgOiBwb2xhcml0eV9jaGFuZ2VkCisgKiBCaXQgNCA6IGVuZXJneV9kZXRlY3QKKyAqIEJpdCA1IDogZG93bnNoaWZ0CisgKiBCaXQgNiA6IG1kaV94b3Zlcl9jaGFuZ2VkCisgKiBCaXQgNyA6IGZpZm9fb3Zlcl91bmRlcmZsb3cKKyAqIEJpdCA4IDogZmFsc2VfY2FycmllcgorICogQml0IDkgOiBzeW1ib2xfZXJyb3IKKyAqIEJpdCAxMDogbGlua19zdGF0dXNfY2hhbmdlZAorICogQml0IDExOiBhdXRvbmVnX2NvbXBsZXRlZAorICogQml0IDEyOiBwYWdlX3JlY2VpdmVkCisgKiBCaXQgMTM6IGR1cGxleF9jaGFuZ2VkCisgKiBCaXQgMTQ6IHNwZWVkX2NoYW5nZWQKKyAqIEJpdCAxNTogYXV0b25lZ19lcnJvcgorICovCisKKyNkZWZpbmUgbmV0eGVuX2dldF9waHlfaW50X2phYmJlcihjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAwKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfcG9sYXJpdHlfY2hhbmdlZChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfZW5lcmd5X2RldGVjdChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA0KQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfZG93bnNoaWZ0KGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDUpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9tZGlfeG92ZXJfY2hhbmdlZChjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA2KQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfZmlmb19vdmVyX3VuZGVyZmxvdyhjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA3KQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfZmFsc2VfY2Fycmllcihjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCA4KQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfc3ltYm9sX2Vycm9yKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDkpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEwKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19jb21wbGV0ZWQoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTEpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9wYWdlX3JlY2VpdmVkKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEyKQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfZHVwbGV4X2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKKwkJX25ldHhlbl9jcmJfZ2V0X2JpdChjb25maWdfd29yZCwgMTMpCisjZGVmaW5lIG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDE0KQorI2RlZmluZSBuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19lcnJvcihjb25maWdfd29yZCkJXAorCQlfbmV0eGVuX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxNSkKKworI2RlZmluZSBuZXR4ZW5fc2V0X3BoeV9pbnRfbGlua19zdGF0dXNfY2hhbmdlZChjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDEwLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorI2RlZmluZSBuZXR4ZW5fc2V0X3BoeV9pbnRfYXV0b25lZ19jb21wbGV0ZWQoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCgxMSwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX3NldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCgxNCwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKworLyoKKyAqIE5JVSBNb2RlIFJlZ2lzdGVyLgorICogQml0IDAgOiBlbmFibGUgRmlicmVDaGFubmVsCisgKiBCaXQgMSA6IGVuYWJsZSAxMC8xMDAvMTAwMCBFdGhlcm5ldAorICogQml0IDIgOiBlbmFibGUgMTBHYiBFdGhlcm5ldAorICovCisKKyNkZWZpbmUgbmV0eGVuX2dldF9uaXVfZW5hYmxlX2dlKGNvbmZpZ193b3JkKQlcCisJCV9uZXR4ZW5fY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEpCisKKy8qIFByb21pc2NvdXMgbW9kZSBvcHRpb25zIChHYkUgbW9kZSBvbmx5KSAqLwordHlwZWRlZiBlbnVtIHsKKwlORVRYRU5fTklVX1BST01JU0NfTU9ERSA9IDAsCisJTkVUWEVOX05JVV9OT05fUFJPTUlTQ19NT0RFCit9IG5ldHhlbl9uaXVfcHJvbV9tb2RlX3Q7CisKKy8qCisgKiBOSVUgR0IgRHJvcCBDUkMgUmVnaXN0ZXIKKyAqIAorICogQml0IDAgOiBkcm9wX2diMCA9PiAxOmRyb3AgcGt0cyB3aXRoIGJhZCBDUkNzLCAwOnBhc3MgdGhlbSBvbgorICogQml0IDEgOiBkcm9wX2diMSA9PiAxOmRyb3AgcGt0cyB3aXRoIGJhZCBDUkNzLCAwOnBhc3MgdGhlbSBvbgorICogQml0IDIgOiBkcm9wX2diMiA9PiAxOmRyb3AgcGt0cyB3aXRoIGJhZCBDUkNzLCAwOnBhc3MgdGhlbSBvbgorICogQml0IDMgOiBkcm9wX2diMyA9PiAxOmRyb3AgcGt0cyB3aXRoIGJhZCBDUkNzLCAwOnBhc3MgdGhlbSBvbgorICovCisKKyNkZWZpbmUgbmV0eGVuX3NldF9nYl9kcm9wX2diMChjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDAsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisjZGVmaW5lIG5ldHhlbl9zZXRfZ2JfZHJvcF9nYjEoY29uZmlnX3dvcmQpCVwKKwkJc2V0X2JpdCgxLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorI2RlZmluZSBuZXR4ZW5fc2V0X2diX2Ryb3BfZ2IyKGNvbmZpZ193b3JkKQlcCisJCXNldF9iaXQoMiwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX3NldF9nYl9kcm9wX2diMyhjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDMsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisKKyNkZWZpbmUgbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IwKGNvbmZpZ193b3JkKQlcCisJCWNsZWFyX2JpdCgwLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorI2RlZmluZSBuZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjEoY29uZmlnX3dvcmQpCVwKKwkJY2xlYXJfYml0KDEsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisjZGVmaW5lIG5ldHhlbl9jbGVhcl9nYl9kcm9wX2diMihjb25maWdfd29yZCkJXAorCQljbGVhcl9iaXQoMiwgKHVuc2lnbmVkIGxvbmcqKSZjb25maWdfd29yZCkKKyNkZWZpbmUgbmV0eGVuX2NsZWFyX2diX2Ryb3BfZ2IzKGNvbmZpZ193b3JkKQlcCisJCWNsZWFyX2JpdCgzLCAodW5zaWduZWQgbG9uZyopJmNvbmZpZ193b3JkKQorCisvKgorICogTklVIFhHIE1BQyBDb25maWcgUmVnaXN0ZXIKKyAqCisgKiBCaXQgMCA6IHR4X2VuYWJsZSA9PiAxOmVuYWJsZSBmcmFtZSB4bWl0LCAwOmRpc2FibGUKKyAqIEJpdCAyIDogcnhfZW5hYmxlID0+IDE6ZW5hYmxlIGZyYW1lIHJlY3YsIDA6ZGlzYWJsZQorICogQml0IDQgOiBzb2Z0X3Jlc2V0ID0+IDE6cmVzZXQgdGhlIE1BQyAsIDA6bm8tb3AKKyAqIEJpdCAyNzogeGF1aV9mcmFtZXJfcmVzZXQKKyAqIEJpdCAyODogeGF1aV9yeF9yZXNldAorICogQml0IDI5OiB4YXVpX3R4X3Jlc2V0CisgKiBCaXQgMzA6IHhnX2luZ3Jlc3NfYWZpZm9fcmVzZXQKKyAqIEJpdCAzMTogeGdfZWdyZXNzX2FmaWZvX3Jlc2V0CisgKi8KKworI2RlZmluZSBuZXR4ZW5feGdfc29mdF9yZXNldChjb25maWdfd29yZCkJXAorCQlzZXRfYml0KDQsICh1bnNpZ25lZCBsb25nKikmY29uZmlnX3dvcmQpCisKKy8qCisgKiBNQUMgQ29udHJvbCBSZWdpc3RlcgorICogCisgKiBCaXQgMC0xICAgOiBpZF9wb29sMAorICogQml0IDIgICAgIDogZW5hYmxlX3h0bmQwCisgKiBCaXQgNC01ICAgOiBpZF9wb29sMQorICogQml0IDYgICAgIDogZW5hYmxlX3h0bmQxCisgKiBCaXQgOC05ICAgOiBpZF9wb29sMgorICogQml0IDEwICAgIDogZW5hYmxlX3h0bmQyCisgKiBCaXQgMTItMTMgOiBpZF9wb29sMworICogQml0IDE0ICAgIDogZW5hYmxlX3h0bmQzCisgKiBCaXQgMjQtMjUgOiBtb2RlX3NlbGVjdAorICogQml0IDI4LTMxIDogZW5hYmxlX3Bvb2wKKyAqLworCisjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9pZF9wb29sMChjb25maWcsIHZhbCkJXAorCQkoKGNvbmZpZykgfD0gKCh2YWwpICYweDAzKSkKKyNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2VuYWJsZV94dG5kMChjb25maWcpCVwKKwkJKHNldF9iaXQoMywgKHVuc2lnbmVkIGxvbmcgKikmKGNvbmZpZykpKQorI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDEoY29uZmlnLCB2YWwpCVwKKwkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCA0KSkKKyNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2VuYWJsZV94dG5kMShjb25maWcpCVwKKwkJKHNldF9iaXQoNiwgKHVuc2lnbmVkIGxvbmcgKikmKGNvbmZpZykpKQorI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfaWRfcG9vbDIoY29uZmlnLCB2YWwpCVwKKwkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCA4KSkKKyNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2VuYWJsZV94dG5kMihjb25maWcpCVwKKwkJKHNldF9iaXQoMTAsICh1bnNpZ25lZCBsb25nICopJihjb25maWcpKSkKKyNkZWZpbmUgbmV0eGVuX25pY19tY3Jfc2V0X2lkX3Bvb2wzKGNvbmZpZywgdmFsKQlcCisJCSgoY29uZmlnKSB8PSAoKCh2YWwpICYgMHgwMykgPDwgMTIpKQorI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfZW5hYmxlX3h0bmQzKGNvbmZpZykJXAorCQkoc2V0X2JpdCgxNCwgKHVuc2lnbmVkIGxvbmcgKikmKGNvbmZpZykpKQorI2RlZmluZSBuZXR4ZW5fbmljX21jcl9zZXRfbW9kZV9zZWxlY3QoY29uZmlnLCB2YWwpCVwKKwkJKChjb25maWcpIHw9ICgoKHZhbCkgJiAweDAzKSA8PCAyNCkpCisjZGVmaW5lIG5ldHhlbl9uaWNfbWNyX3NldF9lbmFibGVfcG9vbChjb25maWcsIHZhbCkJXAorCQkoKGNvbmZpZykgfD0gKCgodmFsKSAmIDB4MGYpIDw8IDI4KSkKKworLyogU2V0IHByb21pc2N1b3VzIG1vZGUgZm9yIGEgR2JFIGludGVyZmFjZSAqLworaW50IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCwKKwkJCQkgICAgbmV0eGVuX25pdV9wcm9tX21vZGVfdCBtb2RlKTsKK2ludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICAgaW50IHBvcnQsIG5ldHhlbl9uaXVfcHJvbV9tb2RlX3QgbW9kZSk7CisKKy8qIGdldC9zZXQgdGhlIE1BQyBhZGRyZXNzIGZvciBhIGdpdmVuIE1BQyAqLworaW50IG5ldHhlbl9uaXVfbWFjYWRkcl9nZXQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCwKKwkJCSAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKTsKK2ludCBuZXR4ZW5fbml1X21hY2FkZHJfc2V0KHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCwKKwkJCSAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgYWRkcik7CisKKy8qIFhHIHZlcnNvbnMgKi8KK2ludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQsCisJCQkgICAgICBuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90ICogYWRkcik7CitpbnQgbmV0eGVuX25pdV94Z19tYWNhZGRyX3NldChzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQsCisJCQkgICAgICBuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90IGFkZHIpOworCisvKiBHZW5lcmljIGVuYWJsZSBmb3IgR2JFIHBvcnRzLiBXaWxsIGRldGVjdCB0aGUgc3BlZWQgb2YgdGhlIGxpbmsuICovCitpbnQgbmV0eGVuX25pdV9nYmVfaW5pdF9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQpOworCitpbnQgbmV0eGVuX25pdV94Z19pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCk7CisKKy8qIERpc2FibGUgYSBHYkUgaW50ZXJmYWNlICovCitpbnQgbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnQpOworCitpbnQgbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCk7CisKKyNlbmRpZgkJCQkvKiBfX05FVFhFTl9OSUNfSFdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGNhMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCkBAIC0wLDAgKzEsMTMwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKiAKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIAorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICAgIGluZm9AbmV0eGVuLmNvbQorICogTmV0WGVuLAorICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAorICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKgorICoKKyAqIFNvdXJjZSBmaWxlIGZvciBOSUMgcm91dGluZXMgdG8gaW5pdGlhbGl6ZSB0aGUgUGhhbnRvbSBIYXJkd2FyZQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJuZXR4ZW5fbmljLmgiCisjaW5jbHVkZSAibmV0eGVuX25pY19ody5oIgorI2luY2x1ZGUgIm5ldHhlbl9uaWNfaW9jdGwuaCIKKyNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCisKK3N0cnVjdCBjcmJfYWRkcl9wYWlyIHsKKwlsb25nIGFkZHI7CisJbG9uZyBkYXRhOworfTsKKworI2RlZmluZSBORVRYRU5fTUFYX0NSQl9YRk9STSA2MAorc3RhdGljIHVuc2lnbmVkIGludCBjcmJfYWRkcl94Zm9ybVtORVRYRU5fTUFYX0NSQl9YRk9STV07CisjZGVmaW5lIE5FVFhFTl9BRERSX0VSUk9SICgodW5zaWduZWQgbG9uZyApIDB4ZmZmZmZmZmYgKQorCisjZGVmaW5lIGNyYl9hZGRyX3RyYW5zZm9ybShuYW1lKSBcCisJY3JiX2FkZHJfeGZvcm1bTkVUWEVOX0hXX1BYX01BUF9DUkJfIyNuYW1lXSA9IFwKKwlORVRYRU5fSFdfQ1JCX0hVQl9BR1RfQURSXyMjbmFtZSA8PCAyMAorCisjZGVmaW5lIE5FVFhFTl9OSUNfWERNQV9SRVNFVCAweDgwMDBmZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK25ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBvZmYsIGludCAqZGF0YSkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKTsKKwl3cml0ZWwoKmRhdGEsIGFkZHIpOworfQorCitzdGF0aWMgdm9pZCBjcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAodm9pZCkKK3sKKwljcmJfYWRkcl90cmFuc2Zvcm0oWERNQSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFRJTVIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUkUpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUU4zKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FOMik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRTjEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUU4wKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FTMyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRUzIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUVMxKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FTMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVg3KTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDYpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YNSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVg0KTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YMik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVgxKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDApOworCWNyYl9hZGRyX3RyYW5zZm9ybShST01VU0IpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTTik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFFNTik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFFNUyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHTkkpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR05EKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdOMyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHTjIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR04xKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdOMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHU0kpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR1NEKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdTMyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHUzIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR1MxKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdTMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBTKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEgpOworCWNyYl9hZGRyX3RyYW5zZm9ybShOSVUpOworCWNyYl9hZGRyX3RyYW5zZm9ybShJMlEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShFRyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKE1OKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oTVMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShDQVMyKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oQ0FTMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKENBUzApOworCWNyYl9hZGRyX3RyYW5zZm9ybShDQU0pOworCWNyYl9hZGRyX3RyYW5zZm9ybShDMkMxKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oQzJDMCk7Cit9CisKK2ludCBuZXR4ZW5faW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHN0YXRlID0gMCwgbG9vcHMgPSAwLCBlcnIgPSAwOworCisJLyogV2luZG93IDEgY2FsbCAqLworCXN0YXRlID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkpOworCisJaWYgKHN0YXRlID09IFBIQU5fSU5JVElBTElaRV9BQ0spCisJCXJldHVybiAwOworCisJd2hpbGUgKHN0YXRlICE9IFBIQU5fSU5JVElBTElaRV9DT01QTEVURSAmJiBsb29wcyA8IDIwMDApIHsKKwkJdWRlbGF5KDEwMCk7CisJCS8qIFdpbmRvdyAxIGNhbGwgKi8KKwkJc3RhdGUgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSk7CisKKwkJbG9vcHMrKzsKKwl9CisJaWYgKGxvb3BzID49IDIwMDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDbWQgUGVnIGluaXRpYWxpemF0aW9uIG5vdCBjb21wbGV0ZToleC5cbiIsCisJCSAgICAgICBzdGF0ZSk7CisJCWVyciA9IC1FSU87CisJCXJldHVybiBlcnI7CisJfQorCS8qIFdpbmRvdyAxIGNhbGwgKi8KKwl3cml0ZWwoUEhBTl9JTklUSUFMSVpFX0FDSywKKwkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkpOworCisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBORVRYRU5fQUREUl9MSU1JVCAweGZmZmZmZmZmVUxMCisKK3ZvaWQgKm5ldHhlbl9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHN6LCBkbWFfYWRkcl90ICogcHRyLAorCQkgICBzdHJ1Y3QgcGNpX2RldiAqKnVzZWRfZGV2KQoreworCXZvaWQgKmFkZHI7CisKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc3osIHB0cik7CisJaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpKCpwdHIpIDwgTkVUWEVOX0FERFJfTElNSVQpIHsKKwkJKnVzZWRfZGV2ID0gcGRldjsKKwkJcmV0dXJuIGFkZHI7CisJfQorCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc3osIGFkZHIsICpwdHIpOworCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChOVUxMLCBzeiwgcHRyKTsKKwkqdXNlZF9kZXYgPSBOVUxMOworCXJldHVybiBhZGRyOworfQorCit2b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfc3coc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBjdHhpZCwgcmluZzsKKwl1MzIgaTsKKwl1MzIgbnVtX3J4X2J1ZnMgPSAwOworCXN0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3R4ICpyY3ZfZGVzYzsKKworCURQUklOVEsoSU5GTywgImluaXRpYWxpemluZyBzb21lIHF1ZXVlczogJXBcbiIsIGFkYXB0ZXIpOworCWZvciAoY3R4aWQgPSAwOyBjdHhpZCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eGlkKSB7CisJCWZvciAocmluZyA9IDA7IHJpbmcgPCBOVU1fUkNWX0RFU0NfUklOR1M7IHJpbmcrKykgeworCQkJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1ZjsKKwkJCXJjdl9kZXNjID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXS5yY3ZfZGVzY1tyaW5nXTsKKwkJCXJjdl9kZXNjLT5yY3ZfZnJlZSA9IHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudDsKKwkJCXJjdl9kZXNjLT5iZWdpbl9hbGxvYyA9IDA7CisJCQlyeF9idWYgPSByY3ZfZGVzYy0+cnhfYnVmX2FycjsKKwkJCW51bV9yeF9idWZzID0gcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50OworCQkJLyoKKwkJCSAqIE5vdyBnbyB0aHJvdWdoIGFsbCBvZiB0aGVtLCBzZXQgcmVmZXJlbmNlIGhhbmRsZXMKKwkJCSAqIGFuZCBwdXQgdGhlbSBpbiB0aGUgcXVldWVzLgorCQkJICovCisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X2J1ZnM7IGkrKykgeworCQkJCXJ4X2J1Zi0+cmVmX2hhbmRsZSA9IGk7CisJCQkJcnhfYnVmLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKKworCQkJCURQUklOVEsoSU5GTywgIlJ4IGJ1ZjpjdHglZCBpKCVkKSByeF9idWY6IgorCQkJCQkiJXBcbiIsIGN0eGlkLCBpLCByeF9idWYpOworCQkJCXJ4X2J1ZisrOworCQkJfQorCQl9CisJfQorCURQUklOVEsoSU5GTywgImluaXRpYWxpemVkIGJ1ZmZlcnMgZm9yICVzIGFuZCAlc1xuIiwKKwkJImFkYXB0ZXItPmZyZWVfY21kX2J1Zl9saXN0IiwgImFkYXB0ZXItPmZyZWVfcnhidWYiKTsKK30KKwordm9pZCBuZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX2h3KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcG9ydHMgPSAwOworCXN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbyAqYm9hcmRfaW5mbyA9ICYoYWRhcHRlci0+YWh3LmJvYXJkY2ZnKTsKKworCWlmIChuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpICE9IDApCisJCXByaW50aygiJXM6IEVycm9yIGdldHRpbmcgYm9hcmQgY29uZmlnIGluZm8uXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJZ2V0X2JyZF9wb3J0X2J5X3R5cGUoYm9hcmRfaW5mby0+Ym9hcmRfdHlwZSwgJnBvcnRzKTsKKwlpZiAocG9ydHMgPT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5rbm93biBib2FyZCB0eXBlXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJYWRhcHRlci0+YWh3Lm1heF9wb3J0cyA9IHBvcnRzOworfQorCit2b2lkIG5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2Rydm9wcyAqb3BzID0gYWRhcHRlci0+b3BzOworCXN3aXRjaCAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKKwljYXNlIE5FVFhFTl9OSUNfR0JFOgorCQlvcHMtPmVuYWJsZV9waHlfaW50ZXJydXB0cyA9CisJCSAgICBuZXR4ZW5fbml1X2diZV9lbmFibGVfcGh5X2ludGVycnVwdHM7CisJCW9wcy0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyA9CisJCSAgICBuZXR4ZW5fbml1X2diZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzOworCQlvcHMtPmhhbmRsZV9waHlfaW50ciA9IG5ldHhlbl9uaWNfZ2JlX2hhbmRsZV9waHlfaW50cjsKKwkJb3BzLT5tYWNhZGRyX3NldCA9IG5ldHhlbl9uaXVfbWFjYWRkcl9zZXQ7CisJCW9wcy0+c2V0X210dSA9IG5ldHhlbl9uaWNfc2V0X210dV9nYjsKKwkJb3BzLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGU7CisJCW9wcy0+dW5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfc2V0X3Byb21pc2N1b3VzX21vZGU7CisJCW9wcy0+cGh5X3JlYWQgPSBuZXR4ZW5fbml1X2diZV9waHlfcmVhZDsKKwkJb3BzLT5waHlfd3JpdGUgPSBuZXR4ZW5fbml1X2diZV9waHlfd3JpdGU7CisJCW9wcy0+aW5pdF9wb3J0ID0gbmV0eGVuX25pdV9nYmVfaW5pdF9wb3J0OworCQlvcHMtPmluaXRfbml1ID0gbmV0eGVuX25pY19pbml0X25pdV9nYjsKKwkJb3BzLT5zdG9wX3BvcnQgPSBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQ7CisJCWJyZWFrOworCisJY2FzZSBORVRYRU5fTklDX1hHQkU6CisJCW9wcy0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzID0KKwkJICAgIG5ldHhlbl9uaXVfeGdiZV9lbmFibGVfcGh5X2ludGVycnVwdHM7CisJCW9wcy0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyA9CisJCSAgICBuZXR4ZW5fbml1X3hnYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0czsKKwkJb3BzLT5oYW5kbGVfcGh5X2ludHIgPSBuZXR4ZW5fbmljX3hnYmVfaGFuZGxlX3BoeV9pbnRyOworCQlvcHMtPm1hY2FkZHJfc2V0ID0gbmV0eGVuX25pdV94Z19tYWNhZGRyX3NldDsKKwkJb3BzLT5zZXRfbXR1ID0gbmV0eGVuX25pY19zZXRfbXR1X3hnYjsKKwkJb3BzLT5pbml0X3BvcnQgPSBuZXR4ZW5fbml1X3hnX2luaXRfcG9ydDsKKwkJb3BzLT5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGU7CisJCW9wcy0+dW5zZXRfcHJvbWlzYyA9IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGU7CisJCW9wcy0+c3RvcF9wb3J0ID0gbmV0eGVuX25pdV9kaXNhYmxlX3hnX3BvcnQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogbmV0eGVuX2RlY29kZV9jcmJfYWRkcigwIC0gdXRpbGl0eSB0byB0cmFuc2xhdGUgZnJvbSBpbnRlcm5hbCBQaGFudG9tIENSQgorICogYWRkcmVzcyB0byBleHRlcm5hbCBQQ0kgQ1JCIGFkZHJlc3MuCisgKi8KK3Vuc2lnbmVkIGxvbmcgbmV0eGVuX2RlY29kZV9jcmJfYWRkcih1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHIsIG9mZnNldCwgcGNpX2Jhc2U7CisKKwljcmJfYWRkcl90cmFuc2Zvcm1fc2V0dXAoKTsKKworCXBjaV9iYXNlID0gTkVUWEVOX0FERFJfRVJST1I7CisJYmFzZV9hZGRyID0gYWRkciAmIDB4ZmZmMDAwMDA7CisJb2Zmc2V0ID0gYWRkciAmIDB4MDAwZmZmZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkVUWEVOX01BWF9DUkJfWEZPUk07IGkrKykgeworCQlpZiAoY3JiX2FkZHJfeGZvcm1baV0gPT0gYmFzZV9hZGRyKSB7CisJCQlwY2lfYmFzZSA9IGkgPDwgMjA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAocGNpX2Jhc2UgPT0gTkVUWEVOX0FERFJfRVJST1IpCisJCXJldHVybiBwY2lfYmFzZTsKKwllbHNlCisJCXJldHVybiAocGNpX2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgbG9uZyByb21fbWF4X3RpbWVvdXQgPSAxMDAwMDsKK3N0YXRpYyBsb25nIHJvbV9sb2NrX3RpbWVvdXQgPSAxMDAwMDAwOworCitzdGF0aWMgaW5saW5lIGludCByb21fbG9jayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGl0ZXI7CisJdTMyIGRvbmUgPSAwOworCWludCB0aW1lb3V0ID0gMDsKKworCXdoaWxlICghZG9uZSkgeworCQkvKiBhY3F1aXJlIHNlbWFwaG9yZTIgZnJvbSBQQ0kgSFcgYmxvY2sgKi8KKwkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTJfTE9DSyksCisJCQkJICAgJmRvbmUpOworCQlpZiAoZG9uZSA9PSAxKQorCQkJYnJlYWs7CisJCWlmICh0aW1lb3V0ID49IHJvbV9sb2NrX3RpbWVvdXQpCisJCQlyZXR1cm4gLUVJTzsKKworCQl0aW1lb3V0Kys7CisJCS8qCisJCSAqIFlpZWxkIENQVQorCQkgKi8KKwkJaWYgKCFpbl9hdG9taWMoKSkKKwkJCXNjaGVkdWxlKCk7CisJCWVsc2UgeworCQkJZm9yIChpdGVyID0gMDsgaXRlciA8IDIwOyBpdGVyKyspCisJCQkJY3B1X3JlbGF4KCk7CS8qVGhpcyBhIG5vcCBpbnN0ciBvbiBpMzg2ICovCisJCX0KKwl9CisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTV9MT0NLX0lELCBST01fTE9DS19EUklWRVIpOworCXJldHVybiAwOworfQorCitpbnQgbmV0eGVuX3dhaXRfcm9tX2RvbmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWxvbmcgdGltZW91dCA9IDA7CisJbG9uZyBkb25lID0gMDsKKworCXdoaWxlIChkb25lID09IDApIHsKKwkJZG9uZSA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9HTEJfU1RBVFVTKTsKKwkJZG9uZSAmPSAyOworCQl0aW1lb3V0Kys7CisJCWlmICh0aW1lb3V0ID49IHJvbV9tYXhfdGltZW91dCkgeworCQkJcHJpbnRrKCJUaW1lb3V0IHJlYWNoZWQgIHdhaXRpbmcgZm9yIHJvbSBkb25lIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV0eGVuX3JvbV93cmVuKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKiBTZXQgd3JpdGUgZW5hYmxlIGxhdGNoIGluIFJPTSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKKwkJCSAgICAgTTI1UF9JTlNUUl9XUkVOKTsKKwlpZiAobmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcikpIHsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmV0eGVuX3JkY3JicmVnKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgdW5zaWduZWQgaW50IGFkZHIpCit7CisJdW5zaWduZWQgaW50IGRhdGEgPSAweGRlYWRkZWFkOworCWRhdGEgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIGFkZHIpOworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXR4ZW5fZG9fcm9tX3Jkc3Ioc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKKwkJCSAgICAgTTI1UF9JTlNUUl9SRFNSKTsKKwlpZiAobmV0eGVuX3dhaXRfcm9tX2RvbmUoYWRhcHRlcikpIHsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gbmV0eGVuX3JkY3JicmVnKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX1JEQVRBKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9yb21fdW5sb2NrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsOworCisJLyogcmVsZWFzZSBzZW1hcGhvcmUyICovCisJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsIE5FVFhFTl9QQ0lFX1JFRyhQQ0lFX1NFTTJfVU5MT0NLKSwgJnZhbCk7CisKK30KKworaW50IG5ldHhlbl9yb21fd2lwX3BvbGwoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWxvbmcgdGltZW91dCA9IDA7CisJbG9uZyB3aXAgPSAxOworCWludCB2YWw7CisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAwKTsKKwl3aGlsZSAod2lwICE9IDApIHsKKwkJdmFsID0gbmV0eGVuX2RvX3JvbV9yZHNyKGFkYXB0ZXIpOworCQl3aXAgPSB2YWwgJiAxOworCQl0aW1lb3V0Kys7CisJCWlmICh0aW1lb3V0ID4gcm9tX21heF90aW1lb3V0KSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRvX3JvbV9mYXN0X3dyaXRlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgaW50IGFkZHIsIGludCBkYXRhKQoreworCWlmIChuZXR4ZW5fcm9tX3dyZW4oYWRhcHRlcikpIHsKKwkJcmV0dXJuIC0xOworCX0KKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9XREFUQSwgZGF0YSk7CisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUREUkVTUywgYWRkcik7CisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fQUJZVEVfQ05ULCAzKTsKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsCisJCQkgICAgIE0yNVBfSU5TVFJfUFApOworCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgeworCQluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Citkb19yb21fZmFzdF9yZWFkKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIsIGludCAqdmFscCkKK3sKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOworCXVkZWxheSgxMDApOwkJLyogcHJldmVudCBidXJzdGluZyBvbiBDUkIgKi8KKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9EVU1NWV9CWVRFX0NOVCwgMCk7CisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFLCAweGIpOworCWlmIChuZXR4ZW5fd2FpdF9yb21fZG9uZShhZGFwdGVyKSkgeworCQlwcmludGsoIkVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qIHJlc2V0IGFieXRlX2NudCBhbmQgZHVtbXlfYnl0ZV9jbnQgKi8KKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDApOworCXVkZWxheSgxMDApOwkJLyogcHJldmVudCBidXJzdGluZyBvbiBDUkIgKi8KKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9EVU1NWV9CWVRFX0NOVCwgMCk7CisKKwkqdmFscCA9IG5ldHhlbl9uaWNfcmVnX3JlYWQoYWRhcHRlciwgTkVUWEVOX1JPTVVTQl9ST01fUkRBVEEpOworCXJldHVybiAwOworfQorCitpbnQgbmV0eGVuX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50ICp2YWxwKQoreworCWludCByZXQ7CisKKwlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBkb19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHZhbHApOworCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBuZXR4ZW5fcm9tX2Zhc3Rfd3JpdGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50IGRhdGEpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocm9tX2xvY2soYWRhcHRlcikgIT0gMCkgeworCQlyZXR1cm4gLTE7CisJfQorCXJldCA9IGRvX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsIGFkZHIsIGRhdGEpOworCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CitpbnQgbmV0eGVuX2RvX3JvbV9zZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyKQoreworCW5ldHhlbl9yb21fd3JlbihhZGFwdGVyKTsKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKKwluZXR4ZW5fbmljX3JlZ193cml0ZShhZGFwdGVyLCBORVRYRU5fUk9NVVNCX1JPTV9BQllURV9DTlQsIDMpOworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0lOU1RSX09QQ09ERSwKKwkJCSAgICAgTTI1UF9JTlNUUl9TRSk7CisJaWYgKG5ldHhlbl93YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7CisJCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfUk9NX0FCWVRFX0NOVCwgMCk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIG5ldHhlbl9yb21fd2lwX3BvbGwoYWRhcHRlcik7Cit9CisKK2ludCBuZXR4ZW5fcm9tX3NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHIpCit7CisJaW50IHJldCA9IDA7CisJaWYgKHJvbV9sb2NrKGFkYXB0ZXIpICE9IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXQgPSBuZXR4ZW5fZG9fcm9tX3NlKGFkYXB0ZXIsIGFkZHIpOworCW5ldHhlbl9yb21fdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTkVUWEVOX0JPQVJEVFlQRQkJMHg0MDA4CisjZGVmaW5lIE5FVFhFTl9CT0FSRE5VTSAJCTB4NDAwYworI2RlZmluZSBORVRYRU5fQ0hJUE5VTQkJCTB4NDAxMAorI2RlZmluZSBORVRYRU5fUk9NQlVTX1JFU0VUCQkweEZGRkZGRkZGCisjZGVmaW5lIE5FVFhFTl9ST01fRklSU1RfQkFSUklFUgkweDgwMDAwMDAwMFVMTAorI2RlZmluZSBORVRYRU5fUk9NX0ZPVU5EX0lOSVQJCTB4NDAwCisKK2ludCBuZXR4ZW5fcGluaXRfZnJvbV9yb20oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgYWRkciwgdmFsLCBzdGF0dXM7CisJaW50IG4sIGk7CisJaW50IGluaXRfZGVsYXkgPSAwOworCXN0cnVjdCBjcmJfYWRkcl9wYWlyICpidWY7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwkvKiByZXNldGFsbCAqLworCXN0YXR1cyA9IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKCIlczogbmV0eGVuX3Bpbml0X2Zyb21fcm9tOiBFcnJvciBnZXR0aW5nIGJvYXJkIGluZm9cbiIsCisJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fUk9NVVNCX0dMQl9TV19SRVNFVCwKKwkJCQkgICAgTkVUWEVOX1JPTUJVU19SRVNFVCk7CisKKwlpZiAodmVyYm9zZSkgeworCQlpbnQgdmFsOworCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgTkVUWEVOX0JPQVJEVFlQRSwgJnZhbCkgPT0gMCkKKwkJCXByaW50aygiUDIgUk9NIGJvYXJkIHR5cGU6IDB4JTA4eFxuIiwgdmFsKTsKKwkJZWxzZQorCQkJcHJpbnRrKCJDb3VsZCBub3QgcmVhZCBib2FyZCB0eXBlXG4iKTsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIE5FVFhFTl9CT0FSRE5VTSwgJnZhbCkgPT0gMCkKKwkJCXByaW50aygiUDIgUk9NIGJvYXJkICBudW06IDB4JTA4eFxuIiwgdmFsKTsKKwkJZWxzZQorCQkJcHJpbnRrKCJDb3VsZCBub3QgcmVhZCBib2FyZCBudW1iZXJcbiIpOworCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgTkVUWEVOX0NISVBOVU0sICZ2YWwpID09IDApCisJCQlwcmludGsoIlAyIFJPTSBjaGlwICAgbnVtOiAweCUwOHhcbiIsIHZhbCk7CisJCWVsc2UKKwkJCXByaW50aygiQ291bGQgbm90IHJlYWQgY2hpcCBudW1iZXJcbiIpOworCX0KKworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCAwLCAmbikgPT0gMAorCSAgICAmJiAobiAmIE5FVFhFTl9ST01fRklSU1RfQkFSUklFUikpIHsKKwkJbiAmPSB+TkVUWEVOX1JPTV9ST1VORFVQOworCQlpZiAobiA8IE5FVFhFTl9ST01fRk9VTkRfSU5JVCkgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKCIlczogJWQgQ1JCIGluaXQgdmFsdWVzIGZvdW5kIgorCQkJCSAgICAgICAiIGluIFJPTS5cbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG4pOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIlczpuPTB4JXggRXJyb3IhIE5ldFhlbiBjYXJkIGZsYXNoIG5vdCIKKwkJCSAgICAgICAiIGluaXRpYWxpemVkLlxuIiwgX19GVU5DVElPTl9fLCBuKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWJ1ZiA9IGtjYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBjcmJfYWRkcl9wYWlyKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChidWYgPT0gTlVMTCkgeworCQkJcHJpbnRrKCIlczogbmV0eGVuX3Bpbml0X2Zyb21fcm9tOiBVbmFibGUgdG8gY2FsbG9jICIKKwkJCSAgICAgICAibWVtb3J5LlxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgOCAqIGkgKyA0LCAmdmFsKSAhPSAwCisJCQkgICAgfHwgbmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgOCAqIGkgKyA4LAorCQkJCQkJICAgICZhZGRyKSAhPSAwKQorCQkJCXJldHVybiAtRUlPOworCisJCQlidWZbaV0uYWRkciA9IGFkZHI7CisJCQlidWZbaV0uZGF0YSA9IHZhbDsKKworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKCIlczogUENJOiAgICAgMHglMDh4ID09IDB4JTA4eFxuIiwKKwkJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgKHVuc2lnbmVkIGludCkKKwkJCQkgICAgICAgbmV0eGVuX2RlY29kZV9jcmJfYWRkcigodW5zaWduZWQgbG9uZykKKwkJCQkJCQkgICAgICBhZGRyKSwgdmFsKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisKKwkJCW9mZiA9CisJCQkgICAgbmV0eGVuX2RlY29kZV9jcmJfYWRkcigodW5zaWduZWQgbG9uZylidWZbaV0uYWRkcikgKworCQkJICAgIE5FVFhFTl9QQ0lfQ1JCU1BBQ0U7CisJCQkvKiBza2lwcGluZyBjb2xkIHJlYm9vdCBNQUdJQyAqLworCQkJaWYgKG9mZiA9PSBORVRYRU5fQ0FNX1JBTSgweDFmYykpCisJCQkJY29udGludWU7CisKKwkJCS8qIEFmdGVyIHdyaXRpbmcgdGhpcyByZWdpc3RlciwgSFcgbmVlZHMgdGltZSBmb3IgQ1JCICovCisJCQkvKiB0byBxdWlldCBkb3duIChlbHNlIGNyYl93aW5kb3cgcmV0dXJucyAweGZmZmZmZmZmKSAqLworCQkJaWYgKG9mZiA9PSBORVRYRU5fUk9NVVNCX0dMQl9TV19SRVNFVCkgeworCQkJCWluaXRfZGVsYXkgPSAxOworCQkJCS8qIGhvbGQgeGRtYSBpbiByZXNldCBhbHNvICovCisJCQkJYnVmW2ldLmRhdGEgPSBORVRYRU5fTklDX1hETUFfUkVTRVQ7CisJCQl9CisKKwkJCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgeworCQkJCXdyaXRlbChidWZbaV0uZGF0YSwKKwkJCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKSk7CisJCQl9IGVsc2UgeworCQkJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7CisJCQkJd3JpdGVsKGJ1ZltpXS5kYXRhLAorCQkJCSAgICAgICBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgb2ZmKSk7CisKKwkJCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworCQkJfQorCQkJaWYgKGluaXRfZGVsYXkgPT0gMSkgeworCQkJCXNzbGVlcCgxKTsKKwkJCQlpbml0X2RlbGF5ID0gMDsKKwkJCX0KKwkJCW1zbGVlcCgxKTsKKwkJfQorCQlrZnJlZShidWYpOworCisJCS8qIGRpc2FibGVfcGVnX2NhY2hlX2FsbCAqLworCisJCS8qIHVucmVzZXRfbmV0X2NhY2hlICovCisJCW5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fUk9NVVNCX0dMQl9TV19SRVNFVCwgJnZhbCwKKwkJCQkgICAgICA0KTsKKwkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfR0xCX1NXX1JFU0VULAorCQkJCQkgICAgKHZhbCAmIDB4ZmZmZmZmMGYpKTsKKwkJLyogcDJkbiByZXBseUNvdW50ICovCisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCQkgICAgTkVUWEVOX0NSQl9QRUdfTkVUX0QgKyAweGVjLCAweDFlKTsKKwkJLyogZGlzYWJsZV9wZWdfY2FjaGUgMCAqLworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9DUkJfUEVHX05FVF9EICsgMHg0YywgOCk7CisJCS8qIGRpc2FibGVfcGVnX2NhY2hlIDEgKi8KKwkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJCSAgICBORVRYRU5fQ1JCX1BFR19ORVRfSSArIDB4NGMsIDgpOworCisJCS8qIHBlZ19jbHJfYWxsICovCisKKwkJLyogcGVnX2NsciAwICovCisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMCArIDB4OCwKKwkJCQkJICAgIDApOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzAgKyAweGMsCisJCQkJCSAgICAwKTsKKwkJLyogcGVnX2NsciAxICovCisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMSArIDB4OCwKKwkJCQkJICAgIDApOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzEgKyAweGMsCisJCQkJCSAgICAwKTsKKwkJLyogcGVnX2NsciAyICovCisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMiArIDB4OCwKKwkJCQkJICAgIDApOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzIgKyAweGMsCisJCQkJCSAgICAwKTsKKwkJLyogcGVnX2NsciAzICovCisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fQ1JCX1BFR19ORVRfMyArIDB4OCwKKwkJCQkJICAgIDApOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX0NSQl9QRUdfTkVUXzMgKyAweGMsCisJCQkJCSAgICAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmV0eGVuX3BoYW50b21faW5pdChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwZWd0dW5lX3ZhbCkKK3sKKwl1MzIgdmFsID0gMDsKKwlpbnQgbG9vcHMgPSAwOworCisJaWYgKCFwZWd0dW5lX3ZhbCkgeworCQl3aGlsZSAodmFsICE9IFBIQU5fSU5JVElBTElaRV9DT01QTEVURSAmJiBsb29wcyA8IDIwMDAwMCkgeworCQkJdWRlbGF5KDEwMCk7CisJCQlzY2hlZHVsZSgpOworCQkJdmFsID0KKwkJCSAgICByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRQorCQkJCSAgKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUpKTsKKwkJCWxvb3BzKys7CisJCX0KKwkJaWYgKHZhbCAhPSBQSEFOX0lOSVRJQUxJWkVfQ09NUExFVEUpCisJCQlwcmludGsoIldBUk5JTkc6IEluaXRpYWwgYm9vdCB3YWl0IGxvb3AgZmFpbGVkLi4uXG4iKTsKKwl9Cit9CisKK2ludCBuZXR4ZW5fbmljX3J4X2hhc193b3JrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgY3R4OworCisJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKKwkJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0KKwkJICAgICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4XSk7CisJCXUzMiBjb25zdW1lcjsKKwkJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjX2hlYWQ7CisJCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYzsKKworCQljb25zdW1lciA9IHJlY3ZfY3R4LT5zdGF0dXNfcnhfY29uc3VtZXI7CisJCWRlc2NfaGVhZCA9IHJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKKwkJZGVzYyA9ICZkZXNjX2hlYWRbY29uc3VtZXJdOworCisJCWlmICgoKGxlMTZfdG9fY3B1KGRlc2MtPm93bmVyKSkgJiBTVEFUVVNfT1dORVJfSE9TVCkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV0eGVuX25pY19jaGVja190ZW1wKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcG9ydF9udW07CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJdWludDMyX3QgdGVtcCwgdGVtcF9zdGF0ZSwgdGVtcF92YWw7CisJaW50IHJ2ID0gMDsKKworCXRlbXAgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfVEVNUF9TVEFURSkpOworCisJdGVtcF9zdGF0ZSA9IG54X2dldF90ZW1wX3N0YXRlKHRlbXApOworCXRlbXBfdmFsID0gbnhfZ2V0X3RlbXBfdmFsKHRlbXApOworCisJaWYgKHRlbXBfc3RhdGUgPT0gTlhfVEVNUF9QQU5JQykgeworCQlwcmludGsoS0VSTl9BTEVSVAorCQkgICAgICAgIiVzOiBEZXZpY2UgdGVtcGVyYXR1cmUgJWQgZGVncmVlcyBDIGV4Y2VlZHMiCisJCSAgICAgICAiIG1heGltdW0gYWxsb3dlZC4gSGFyZHdhcmUgaGFzIGJlZW4gc2h1dCBkb3duLlxuIiwKKwkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHRlbXBfdmFsKTsKKwkJZm9yIChwb3J0X251bSA9IDA7IHBvcnRfbnVtIDwgYWRhcHRlci0+YWh3Lm1heF9wb3J0czsKKwkJICAgICBwb3J0X251bSsrKSB7CisJCQlwb3J0ID0gYWRhcHRlci0+cG9ydFtwb3J0X251bV07CisJCQluZXRkZXYgPSBwb3J0LT5uZXRkZXY7CisKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCX0KKwkJcnYgPSAxOworCX0gZWxzZSBpZiAodGVtcF9zdGF0ZSA9PSBOWF9URU1QX1dBUk4pIHsKKwkJaWYgKGFkYXB0ZXItPnRlbXAgPT0gTlhfVEVNUF9OT1JNQUwpIHsKKwkJCXByaW50ayhLRVJOX0FMRVJUCisJCQkgICAgICAgIiVzOiBEZXZpY2UgdGVtcGVyYXR1cmUgJWQgZGVncmVlcyBDICIKKwkJCSAgICAgICAiZXhjZWVkcyBvcGVyYXRpbmcgcmFuZ2UuIgorCQkJICAgICAgICIgSW1tZWRpYXRlIGFjdGlvbiBuZWVkZWQuXG4iLAorCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHRlbXBfdmFsKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT50ZW1wID09IE5YX1RFTVBfV0FSTikgeworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICIlczogRGV2aWNlIHRlbXBlcmF0dXJlIGlzIG5vdyAlZCBkZWdyZWVzIEMiCisJCQkgICAgICAgIiBpbiBub3JtYWwgcmFuZ2UuXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkJICAgICAgIHRlbXBfdmFsKTsKKwkJfQorCX0KKwlhZGFwdGVyLT50ZW1wID0gdGVtcF9zdGF0ZTsKKwlyZXR1cm4gcnY7Cit9CisKK3ZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2sodW5zaWduZWQgbG9uZyB2KQoreworCWludCBwb3J0X251bTsKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopdjsKKworCWlmIChuZXR4ZW5fbmljX2NoZWNrX3RlbXAoYWRhcHRlcikpCisJCXJldHVybjsKKworCWZvciAocG9ydF9udW0gPSAwOyBwb3J0X251bSA8IGFkYXB0ZXItPmFody5tYXhfcG9ydHM7IHBvcnRfbnVtKyspIHsKKwkJcG9ydCA9IGFkYXB0ZXItPnBvcnRbcG9ydF9udW1dOworCQluZXRkZXYgPSBwb3J0LT5uZXRkZXY7CisKKwkJaWYgKChuZXRpZl9ydW5uaW5nKG5ldGRldikpICYmICFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzIHBvcnQgJWQsICVzIGNhcnJpZXIgaXMgbm93IG9rXG4iLAorCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHBvcnRfbnVtLCBuZXRkZXYtPm5hbWUpOworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQl9CisKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwl9CisKKwlpZiAoYWRhcHRlci0+b3BzLT5oYW5kbGVfcGh5X2ludHIpCisJCWFkYXB0ZXItPm9wcy0+aGFuZGxlX3BoeV9pbnRyKGFkYXB0ZXIpOworCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAyICogSFopOworfQorCisvKgorICogbmV0eGVuX3Byb2Nlc3NfcmN2KCkgc2VuZCB0aGUgcmVjZWl2ZWQgcGFja2V0IHRvIHRoZSBwcm90b2NvbCBzdGFjay4KKyAqIGFuZCBpZiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVzIGV4Y2VlZHMgUlhfQlVGRkVSU19SRUZJTEwsIHRoZW4gd2UKKyAqIGludm9rZSB0aGUgcm91dGluZSB0byBzZW5kIG1vcmUgcnggYnVmZmVycyB0byB0aGUgUGhhbnRvbS4uLgorICovCit2b2lkCituZXR4ZW5fcHJvY2Vzc19yY3Yoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY3R4aWQsCisJCSAgIHN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBhZGFwdGVyLT5wb3J0W1NUQVRVU19ERVNDX1BPUlQoZGVzYyldOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcG9ydC0+cGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcG9ydC0+bmV0ZGV2OworCWludCBpbmRleCA9IGxlMTZfdG9fY3B1KGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUpOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICYoYWRhcHRlci0+cmVjdl9jdHhbY3R4aWRdKTsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIGxlbmd0aCA9IGxlMTZfdG9fY3B1KGRlc2MtPnRvdGFsX2xlbmd0aCk7CisJdTMyIGRlc2NfY3R4OworCXN0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3R4ICpyY3ZfZGVzYzsKKwlpbnQgcmV0OworCisJZGVzY19jdHggPSBTVEFUVVNfREVTQ19UWVBFKGRlc2MpOworCWlmICh1bmxpa2VseShkZXNjX2N0eCA+PSBOVU1fUkNWX0RFU0NfUklOR1MpKSB7CisJCXByaW50aygiJXM6ICVzIEJhZCBSY3YgZGVzY3JpcHRvciByaW5nXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXJjdl9kZXNjID0gJnJlY3ZfY3R4LT5yY3ZfZGVzY1tkZXNjX2N0eF07CisJYnVmZmVyID0gJnJjdl9kZXNjLT5yeF9idWZfYXJyW2luZGV4XTsKKworCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyLT5kbWEsIHJjdl9kZXNjLT5kbWFfc2l6ZSwKKwkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJc2tiID0gKHN0cnVjdCBza19idWZmICopYnVmZmVyLT5za2I7CisKKwlpZiAobGlrZWx5KFNUQVRVU19ERVNDX1NUQVRVUyhkZXNjKSA9PSBTVEFUVVNfQ0tTVU1fT0spKSB7CisJCXBvcnQtPnN0YXRzLmNzdW1tZWQrKzsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9IGVsc2UKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYi0+ZGV2ID0gbmV0ZGV2OworCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisKKwlyZXQgPSBuZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJLyoKKwkgKiBSSDogRG8gd2UgbmVlZCB0aGVzZSBzdGF0cyBvbiBhIHJlZ3VsYXIgYmFzaXMuIENhbiB3ZSBnZXQgaXQgZnJvbQorCSAqIExpbnV4IHN0YXRzLgorCSAqLworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBORVRfUlhfU1VDQ0VTUzoKKwkJcG9ydC0+c3RhdHMudXBoYXBweSsrOworCQlicmVhazsKKworCWNhc2UgTkVUX1JYX0NOX0xPVzoKKwkJcG9ydC0+c3RhdHMudXBsY29uZysrOworCQlicmVhazsKKworCWNhc2UgTkVUX1JYX0NOX01PRDoKKwkJcG9ydC0+c3RhdHMudXBtY29uZysrOworCQlicmVhazsKKworCWNhc2UgTkVUX1JYX0NOX0hJR0g6CisJCXBvcnQtPnN0YXRzLnVwaGNvbmcrKzsKKwkJYnJlYWs7CisKKwljYXNlIE5FVF9SWF9EUk9QOgorCQlwb3J0LT5zdGF0cy51cGRyb3BwZWQrKzsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwb3J0LT5zdGF0cy51cGR1bm5vKys7CisJCWJyZWFrOworCX0KKworCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwlyY3ZfZGVzYy0+cmN2X2ZyZWUrKzsKKwlyY3ZfZGVzYy0+cmN2X3BlbmRpbmctLTsKKworCS8qCisJICogV2UganVzdCBjb25zdW1lZCBvbmUgYnVmZmVyIHNvIHBvc3QgYSBidWZmZXIuCisJICovCisJYWRhcHRlci0+c3RhdHMucG9zdF9jYWxsZWQrKzsKKwlidWZmZXItPnNrYiA9IE5VTEw7CisJYnVmZmVyLT5zdGF0ZSA9IE5FVFhFTl9CVUZGRVJfRlJFRTsKKworCXBvcnQtPnN0YXRzLm5vX3JjdisrOworCXBvcnQtPnN0YXRzLnJ4Ynl0ZXMgKz0gbGVuZ3RoOworfQorCisvKiBQcm9jZXNzIFJlY2VpdmUgc3RhdHVzIHJpbmcgKi8KK3UzMiBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjdHhpZCwgaW50IG1heCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmKGFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXSk7CisJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjX2hlYWQgPSByZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQ7CisJc3RydWN0IHN0YXR1c19kZXNjICpkZXNjOwkvKiB1c2VkIHRvIHJlYWQgc3RhdHVzIGRlc2MgaGVyZSAqLworCXUzMiBjb25zdW1lciA9IHJlY3ZfY3R4LT5zdGF0dXNfcnhfY29uc3VtZXI7CisJaW50IGNvdW50ID0gMCwgcmluZzsKKworCURQUklOVEsoSU5GTywgInByb2Nlc2luZyByZWNlaXZlXG4iKTsKKwkvKgorCSAqIHdlIGFzc3VtZSBpbiB0aGlzIGNhc2UgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBwb3J0IGFuZCB0aGF0IGlzCisJICogcG9ydCAjMS4uLmNoYW5nZXMgbmVlZCB0byBiZSBkb25lIGluIGZpcm13YXJlIHRvIGluZGljYXRlIHBvcnQKKwkgKiBudW1iZXIgYXMgcGFydCBvZiB0aGUgZGVzY3JpcHRvci4gVGhpcyB3YXkgd2Ugd2lsbCBiZSBhYmxlIHRvIGdldAorCSAqIHRoZSBuZXRkZXYgd2hpY2ggaXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZGV2aWNlLgorCSAqLworCXdoaWxlIChjb3VudCA8IG1heCkgeworCQlkZXNjID0gJmRlc2NfaGVhZFtjb25zdW1lcl07CisJCWlmICghKChsZTE2X3RvX2NwdShkZXNjLT5vd25lcikpICYgU1RBVFVTX09XTkVSX0hPU1QpKSB7CisJCQlEUFJJTlRLKEVSUiwgImRlc2MgJXAgb3duZWRieSAleFxuIiwgZGVzYywgZGVzYy0+b3duZXIpOworCQkJYnJlYWs7CisJCX0KKwkJbmV0eGVuX3Byb2Nlc3NfcmN2KGFkYXB0ZXIsIGN0eGlkLCBkZXNjKTsKKwkJZGVzYy0+b3duZXIgPSBTVEFUVVNfT1dORVJfUEhBTlRPTTsKKwkJY29uc3VtZXIgPSAoY29uc3VtZXIgKyAxKSAmIChhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCAtIDEpOworCQljb3VudCsrOworCX0KKwlpZiAoY291bnQpIHsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7CisJCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIGN0eGlkLCByaW5nKTsKKwkJfQorCX0KKworCS8qIHVwZGF0ZSB0aGUgY29uc3VtZXIgaW5kZXggaW4gcGhhbnRvbSAqLworCWlmIChjb3VudCkgeworCQlhZGFwdGVyLT5zdGF0cy5wcm9jZXNzX3JjdisrOworCQlyZWN2X2N0eC0+c3RhdHVzX3J4X2NvbnN1bWVyID0gY29uc3VtZXI7CisKKwkJLyogV2luZG93ID0gMSAqLworCQl3cml0ZWwoY29uc3VtZXIsCisJCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLAorCQkJCQkgICAgcmVjdl9jcmJfcmVnaXN0ZXJzW2N0eGlkXS4KKwkJCQkJICAgIGNyYl9yY3Zfc3RhdHVzX2NvbnN1bWVyKSk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKiBQcm9jZXNzIENvbW1hbmQgc3RhdHVzIHJpbmcgKi8KK3ZvaWQgbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXUzMiBsYXN0X2NvbnN1bWVyOworCXUzMiBjb25zdW1lcjsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IG5ldHhlbl9hZGFwdGVyICopZGF0YTsKKwlpbnQgY291bnQgPSAwOworCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydDsJLyogcG9ydCAjMSAqLworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqbnBvcnQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqZnJhZzsKKwl1MzIgaTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlpbnQgcDsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+dHhfbG9jayk7CisJbGFzdF9jb25zdW1lciA9IGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyOworCURQUklOVEsoSU5GTywgInByb2Nlc2luZyB4bWl0IGNvbXBsZXRlXG4iKTsKKwkvKiB3ZSBhc3N1bWUgaW4gdGhpcyBjYXNlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgcG9ydCBhbmQgdGhhdCBpcworCSAqIHBvcnQgIzEuLi5jaGFuZ2VzIG5lZWQgdG8gYmUgZG9uZSBpbiBmaXJtd2FyZSB0byBpbmRpY2F0ZSBwb3J0CisJICogbnVtYmVyIGFzIHBhcnQgb2YgdGhlIGRlc2NyaXB0b3IuIFRoaXMgd2F5IHdlIHdpbGwgYmUgYWJsZSB0byBnZXQKKwkgKiB0aGUgbmV0ZGV2IHdoaWNoIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IGRldmljZS4KKwkgKi8KKwljb25zdW1lciA9CisJICAgIHJlYWRsKE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIENSQl9DTURfQ09OU1VNRVJfT0ZGU0VUKSk7CisKKwlpZiAobGFzdF9jb25zdW1lciA9PSBjb25zdW1lcikgewkvKiBSaW5nIGlzIGVtcHR5ICAgICovCisJCURQUklOVEsoSU5GTywgImxhc3RfY29uc3VtZXIgJWQgPT0gY29uc3VtZXIgJWRcbiIsCisJCQlsYXN0X2NvbnN1bWVyLCBjb25zdW1lcik7CisJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCWFkYXB0ZXItPnByb2NfY21kX2J1Zl9jb3VudGVyKys7CisJYWRhcHRlci0+c3RhdHMucHJvY2Vzc194bWl0Kys7CisJLyoKKwkgKiBOb3QgbmVlZGVkIC0gZG9lcyBub3Qgc2VlbSB0byBiZSB1c2VkIGFueXdoZXJlLgorCSAqIGFkYXB0ZXItPmNtZF9jb25zdW1lciA9IGNvbnN1bWVyOworCSAqLworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKKworCXdoaWxlICgobGFzdF9jb25zdW1lciAhPSBjb25zdW1lcikgJiYgKGNvdW50IDwgTUFYX1NUQVRVU19IQU5ETEUpKSB7CisJCWJ1ZmZlciA9ICZhZGFwdGVyLT5jbWRfYnVmX2FycltsYXN0X2NvbnN1bWVyXTsKKwkJcG9ydCA9IGFkYXB0ZXItPnBvcnRbYnVmZmVyLT5wb3J0XTsKKwkJcGRldiA9IHBvcnQtPnBkZXY7CisJCWZyYWcgPSAmYnVmZmVyLT5mcmFnX2FycmF5WzBdOworCQlza2IgPSBidWZmZXItPnNrYjsKKwkJaWYgKHNrYiAmJiAoY21weGNoZygmYnVmZmVyLT5za2IsIHNrYiwgMCkgPT0gc2tiKSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBmcmFnLT5kbWEsIGZyYWctPmxlbmd0aCwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZm9yIChpID0gMTsgaSA8IGJ1ZmZlci0+ZnJhZ19jb3VudDsgaSsrKSB7CisJCQkJRFBSSU5USyhJTkZPLCAiZ2V0dGluZyBmcmFnbWVudCBubyAlZFxuIiwgaSk7CisJCQkJZnJhZysrOwkvKiBHZXQgdGhlIG5leHQgZnJhZyAqLworCQkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGZyYWctPmRtYSwgZnJhZy0+bGVuZ3RoLAorCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl9CisKKwkJCXBvcnQtPnN0YXRzLnNrYmZyZWVkKys7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJc2tiID0gTlVMTDsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5wcm9jX2NtZF9idWZfY291bnRlciA9PSAxKSB7CisJCQlwb3J0LT5zdGF0cy50eG51bGxza2IrKzsKKwkJfQorCQlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChwb3J0LT5uZXRkZXYpCisJCQkgICAgICYmIG5ldGlmX2NhcnJpZXJfb2socG9ydC0+bmV0ZGV2KSkKKwkJICAgICYmICgoamlmZmllcyAtIHBvcnQtPm5ldGRldi0+dHJhbnNfc3RhcnQpID4KKwkJCXBvcnQtPm5ldGRldi0+d2F0Y2hkb2dfdGltZW8pKSB7CisJCQlzY2hlZHVsZV93b3JrKCZwb3J0LT5hZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOworCQl9CisKKwkJbGFzdF9jb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGxhc3RfY29uc3VtZXIsCisJCQkJCSAgICAgICBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJCWNvdW50Kys7CisJfQorCWFkYXB0ZXItPnN0YXRzLm5veG1pdGRvbmUgKz0gY291bnQ7CisKKwljb3VudCA9IDA7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKKwlpZiAoKC0tYWRhcHRlci0+cHJvY19jbWRfYnVmX2NvdW50ZXIpID09IDApIHsKKwkJYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXIgPSBsYXN0X2NvbnN1bWVyOworCQl3aGlsZSAoKGFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyICE9IGNvbnN1bWVyKQorCQkgICAgICAgJiYgKGNvdW50IDwgTUFYX1NUQVRVU19IQU5ETEUpKSB7CisJCQlidWZmZXIgPQorCQkJICAgICZhZGFwdGVyLT5jbWRfYnVmX2FyclthZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcl07CisJCQljb3VudCsrOworCQkJaWYgKGJ1ZmZlci0+c2tiKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyID0KKwkJCQkgICAgZ2V0X25leHRfaW5kZXgoYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXIsCisJCQkJCQkgICBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisJCX0KKwl9CisJaWYgKGNvdW50KSB7CisJCWZvciAocCA9IDA7IHAgPCBhZGFwdGVyLT5haHcubWF4X3BvcnRzOyBwKyspIHsKKwkJCW5wb3J0ID0gYWRhcHRlci0+cG9ydFtwXTsKKwkJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5wb3J0LT5uZXRkZXYpCisJCQkgICAgJiYgKG5wb3J0LT5mbGFncyAmIE5FVFhFTl9ORVRERVZfU1RBVFVTKSkgeworCQkJCW5ldGlmX3dha2VfcXVldWUobnBvcnQtPm5ldGRldik7CisJCQkJbnBvcnQtPmZsYWdzICY9IH5ORVRYRU5fTkVUREVWX1NUQVRVUzsKKwkJCX0KKwkJfQorCX0KKworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50eF9sb2NrKTsKKwlEUFJJTlRLKElORk8sICJsYXN0IGNvbnN1bWVyIGlzICVkIGluICVzXG4iLCBsYXN0X2NvbnN1bWVyLAorCQlfX0ZVTkNUSU9OX18pOworfQorCisvKgorICogbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyBwdXRzIGJ1ZmZlciBpbiB0aGUgUGhhbnRvbSBtZW1vcnkKKyAqLwordm9pZCBuZXR4ZW5fcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGN0eCwgdTMyIHJpbmdpZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPmFody5wZGV2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJihhZGFwdGVyLT5yZWN2X2N0eFtjdHhdKTsKKwlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2MgPSBOVUxMOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jcmIgKmNyYmFyZWEgPSAmcmVjdl9jcmJfcmVnaXN0ZXJzW2N0eF07CisJc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jcmIgKnJjdl9kZXNjX2NyYiA9IE5VTEw7CisJdTMyIHByb2R1Y2VyOworCXN0cnVjdCByY3ZfZGVzYyAqcGRlc2M7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgY291bnQgPSAwOworCWludCBpbmRleCA9IDA7CisKKwlhZGFwdGVyLT5zdGF0cy5wb3N0X2NhbGxlZCsrOworCXJjdl9kZXNjID0gJnJlY3ZfY3R4LT5yY3ZfZGVzY1tyaW5naWRdOworCXJjdl9kZXNjX2NyYiA9ICZjcmJhcmVhLT5yY3ZfZGVzY19jcmJbcmluZ2lkXTsKKworCXByb2R1Y2VyID0gcmN2X2Rlc2MtPnByb2R1Y2VyOworCWluZGV4ID0gcmN2X2Rlc2MtPmJlZ2luX2FsbG9jOworCWJ1ZmZlciA9ICZyY3ZfZGVzYy0+cnhfYnVmX2FycltpbmRleF07CisJLyogV2UgY2FuIHN0YXJ0IHdyaXRpbmcgcnggZGVzY3JpcHRvcnMgaW50byB0aGUgcGhhbnRvbSBtZW1vcnkuICovCisJd2hpbGUgKGJ1ZmZlci0+c3RhdGUgPT0gTkVUWEVOX0JVRkZFUl9GUkVFKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2IocmN2X2Rlc2MtPnNrYl9zaXplKTsKKwkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQkvKgorCQkJICogV2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgcG9zdGluZyBvZiBidWZmZXJzIHRvIHRoZSBwZWdzLgorCQkJICovCisJCQlyY3ZfZGVzYy0+YmVnaW5fYWxsb2MgPSBpbmRleDsKKwkJCURQUklOVEsoRVJSLCAibmV0eGVuX3Bvc3RfcnhfYnVmZmVyczogIgorCQkJCSIgYWxsb2NhdGVkIG9ubHkgJWQgYnVmZmVyc1xuIiwgY291bnQpOworCQkJYnJlYWs7CisJCX0KKwkJY291bnQrKzsJLyogbm93IHRoZXJlIHNob3VsZCBiZSBubyBmYWlsdXJlICovCisJCXBkZXNjID0gJnJjdl9kZXNjLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisJCS8qIAorCQkgKiBUaGlzIHdpbGwgYmUgc2V0dXAgd2hlbiB3ZSByZWNlaXZlIHRoZQorCQkgKiBidWZmZXIgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkCisJCSAqIHNrYi0+ZGV2ID0gbmV0ZGV2OworCQkgKi8KKwkJYnVmZmVyLT5za2IgPSBza2I7CisJCWJ1ZmZlci0+c3RhdGUgPSBORVRYRU5fQlVGRkVSX0JVU1k7CisJCWJ1ZmZlci0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkJCQkgICAgIHJjdl9kZXNjLT5kbWFfc2l6ZSwKKwkJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkvKiBtYWtlIGEgcmN2IGRlc2NyaXB0b3IgICovCisJCXBkZXNjLT5yZWZlcmVuY2VfaGFuZGxlID0gbGUxNl90b19jcHUoYnVmZmVyLT5yZWZfaGFuZGxlKTsKKwkJcGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBsZTE2X3RvX2NwdShyY3ZfZGVzYy0+ZG1hX3NpemUpOworCQlwZGVzYy0+YWRkcl9idWZmZXIgPSBjcHVfdG9fbGU2NChidWZmZXItPmRtYSk7CisJCURQUklOVEsoSU5GTywgImRvbmUgd3JpdGluZyBkZXNjcmlwdGVyXG4iKTsKKwkJcHJvZHVjZXIgPQorCQkgICAgZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCWluZGV4ID0gZ2V0X25leHRfaW5kZXgoaW5kZXgsIHJjdl9kZXNjLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCWJ1ZmZlciA9ICZyY3ZfZGVzYy0+cnhfYnVmX2FycltpbmRleF07CisJfQorCisJLyogaWYgd2UgZGlkIGFsbG9jYXRlIGJ1ZmZlcnMsIHRoZW4gd3JpdGUgdGhlIGNvdW50IHRvIFBoYW50b20gKi8KKwlpZiAoY291bnQpIHsKKwkJcmN2X2Rlc2MtPmJlZ2luX2FsbG9jID0gaW5kZXg7CisJCXJjdl9kZXNjLT5yY3ZfcGVuZGluZyArPSBjb3VudDsKKwkJYWRhcHRlci0+c3RhdHMubGFzdHBvc3RlZCA9IGNvdW50OworCQlhZGFwdGVyLT5zdGF0cy5wb3N0ZWQgKz0gY291bnQ7CisJCXJjdl9kZXNjLT5wcm9kdWNlciA9IHByb2R1Y2VyOworCQlpZiAocmN2X2Rlc2MtPnJjdl9mcmVlID49IDMyKSB7CisJCQlyY3ZfZGVzYy0+cmN2X2ZyZWUgPSAwOworCQkJLyogV2luZG93ID0gMSAqLworCQkJd3JpdGVsKChwcm9kdWNlciAtIDEpICYKKwkJCSAgICAgICAocmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50IC0gMSksCisJCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJCSAgICByY3ZfZGVzY19jcmItPgorCQkJCQkJICAgIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0KSk7CisJCQl3bWIoKTsKKwkJfQorCX0KK30KKworaW50IG5ldHhlbl9uaWNfdHhfaGFzX3dvcmsoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChmaW5kX2RpZmZfYW1vbmcoYWRhcHRlci0+bGFzdF9jbWRfY29uc3VtZXIsCisJCQkgICAgYWRhcHRlci0+Y21kX3Byb2R1Y2VyLAorCQkJICAgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KSA+IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludAorbmV0eGVuX25pY19maWxsX3N0YXRpc3RpY3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0LAorCQkJICAgc3RydWN0IG5ldHhlbl9zdGF0aXN0aWNzICpuZXR4ZW5fc3RhdHMpCit7CisJdm9pZCBfX2lvbWVtICphZGRyOworCisJaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDApOworCQlORVRYRU5fTklDX0xPQ0tFRF9SRUFEX1JFRyhORVRYRU5fTklVX1hHRV9UWF9CWVRFX0NOVCwKKwkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPnR4X2J5dGVzKSk7CisJCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX1RYX0ZSQU1FX0NOVCwKKwkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPnR4X3BhY2tldHMpKTsKKwkJTkVUWEVOX05JQ19MT0NLRURfUkVBRF9SRUcoTkVUWEVOX05JVV9YR0VfUlhfQllURV9DTlQsCisJCQkJCSAgICYobmV0eGVuX3N0YXRzLT5yeF9ieXRlcykpOworCQlORVRYRU5fTklDX0xPQ0tFRF9SRUFEX1JFRyhORVRYRU5fTklVX1hHRV9SWF9GUkFNRV9DTlQsCisJCQkJCSAgICYobmV0eGVuX3N0YXRzLT5yeF9wYWNrZXRzKSk7CisJCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX0FHR1JfRVJST1JfQ05ULAorCQkJCQkgICAmKG5ldHhlbl9zdGF0cy0+cnhfZXJyb3JzKSk7CisJCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX0NSQ19FUlJPUl9DTlQsCisJCQkJCSAgICYobmV0eGVuX3N0YXRzLT5yeF9jcmNfZXJyb3JzKSk7CisJCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX09WRVJTSVpFX0ZSQU1FX0VSUiwKKwkJCQkJICAgJihuZXR4ZW5fc3RhdHMtPgorCQkJCQkgICAgIHJ4X2xvbmdfbGVuZ3RoX2Vycm9yKSk7CisJCU5FVFhFTl9OSUNfTE9DS0VEX1JFQURfUkVHKE5FVFhFTl9OSVVfWEdFX1VOREVSU0laRV9GUkFNRV9FUlIsCisJCQkJCSAgICYobmV0eGVuX3N0YXRzLT4KKwkJCQkJICAgICByeF9zaG9ydF9sZW5ndGhfZXJyb3IpKTsKKworCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7CisJCW5ldHhlbl9zdGF0cy0+dHhfYnl0ZXMgPSBwb3J0LT5zdGF0cy50eGJ5dGVzOworCQluZXR4ZW5fc3RhdHMtPnR4X3BhY2tldHMgPSBwb3J0LT5zdGF0cy54bWl0ZWRmcmFtZXMgKworCQkgICAgcG9ydC0+c3RhdHMueG1pdGZpbmlzaGVkOworCQluZXR4ZW5fc3RhdHMtPnJ4X2J5dGVzID0gcG9ydC0+c3RhdHMucnhieXRlczsKKwkJbmV0eGVuX3N0YXRzLT5yeF9wYWNrZXRzID0gcG9ydC0+c3RhdHMubm9fcmN2OworCQluZXR4ZW5fc3RhdHMtPnJ4X2Vycm9ycyA9IHBvcnQtPnN0YXRzLnJjdmRiYWRza2I7CisJCW5ldHhlbl9zdGF0cy0+dHhfZXJyb3JzID0gcG9ydC0+c3RhdHMubm9jbWRkZXNjcmlwdG9yOworCQluZXR4ZW5fc3RhdHMtPnJ4X3Nob3J0X2xlbmd0aF9lcnJvciA9IHBvcnQtPnN0YXRzLnVwbGNvbmc7CisJCW5ldHhlbl9zdGF0cy0+cnhfbG9uZ19sZW5ndGhfZXJyb3IgPSBwb3J0LT5zdGF0cy51cGhjb25nOworCQluZXR4ZW5fc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSAwOworCQluZXR4ZW5fc3RhdHMtPnJ4X21hY19lcnJvcnMgPSAwOworCQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydDsKKwlpbnQgcG9ydF9udW07CisKKwltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2YoYWRhcHRlci0+c3RhdHMpKTsKKwlmb3IgKHBvcnRfbnVtID0gMDsgcG9ydF9udW0gPCBhZGFwdGVyLT5haHcubWF4X3BvcnRzOyBwb3J0X251bSsrKSB7CisJCXBvcnQgPSBhZGFwdGVyLT5wb3J0W3BvcnRfbnVtXTsKKwkJbWVtc2V0KCZwb3J0LT5zdGF0cywgMCwgc2l6ZW9mKHBvcnQtPnN0YXRzKSk7CisJfQorfQorCitpbnQKK25ldHhlbl9uaWNfY2xlYXJfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0KQoreworCWludCBkYXRhID0gMDsKKworCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3coYWRhcHRlciwgMCk7CisKKwluZXR4ZW5fbmljX2xvY2tlZF93cml0ZV9yZWcoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfVFhfQllURV9DTlQsICZkYXRhKTsKKwluZXR4ZW5fbmljX2xvY2tlZF93cml0ZV9yZWcoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfVFhfRlJBTUVfQ05ULAorCQkJCSAgICAmZGF0YSk7CisJbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1JYX0JZVEVfQ05ULCAmZGF0YSk7CisJbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1JYX0ZSQU1FX0NOVCwKKwkJCQkgICAgJmRhdGEpOworCW5ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9BR0dSX0VSUk9SX0NOVCwKKwkJCQkgICAgJmRhdGEpOworCW5ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DUkNfRVJST1JfQ05ULAorCQkJCSAgICAmZGF0YSk7CisJbmV0eGVuX25pY19sb2NrZWRfd3JpdGVfcmVnKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX09WRVJTSVpFX0ZSQU1FX0VSUiwKKwkJCQkgICAgJmRhdGEpOworCW5ldHhlbl9uaWNfbG9ja2VkX3dyaXRlX3JlZyhhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9VTkRFUlNJWkVfRlJBTUVfRVJSLAorCQkJCSAgICAmZGF0YSk7CisKKwluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93KGFkYXB0ZXIsIDEpOworCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CisJcmV0dXJuIDA7Cit9CisKK2ludAorbmV0eGVuX25pY19kb19pb2N0bChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgKnVfZGF0YSwKKwkJICAgIHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX25pY19pb2N0bF9kYXRhIGRhdGE7CisJc3RydWN0IG5ldHhlbl9uaWNfaW9jdGxfZGF0YSAqdXBfZGF0YTsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgbmV0eGVuX3N0YXRpc3RpY3MgbmV0eGVuX3N0YXRzOworCisJdXBfZGF0YSA9ICh2b2lkICopdV9kYXRhOworCisJRFBSSU5USyhJTkZPLCAiZG9pbmcgaW9jdGwgZm9yICVwXG4iLCBhZGFwdGVyKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKXVwX2RhdGEsIHNpemVvZihkYXRhKSkpIHsKKwkJLyogZXZpbCB1c2VyIHRyaWVkIHRvIGNyYXNoIHRoZSBrZXJuZWwgKi8KKwkJRFBSSU5USyhFUlIsICJiYWQgY29weSBmcm9tIHVzZXJsYW5kOiAlZFxuIiwgKGludClzaXplb2YoZGF0YSkpOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwkvKiBTaG91bGRuJ3QgYWNjZXNzIGJleW9uZCBsZWdhbCBsaW1pdHMgb2YgICJjaGFyIHVbNjRdOyIgbWVtYmVyICovCisJaWYgKCFkYXRhLnB0ciAmJiAoZGF0YS5zaXplID4gc2l6ZW9mKGRhdGEudSkpKSB7CisJCS8qIGV2aWwgdXNlciB0cmllZCB0byBjcmFzaCB0aGUga2VybmVsICovCisJCURQUklOVEsoRVJSLCAiYmFkIHNpemU6ICVkXG4iLCBkYXRhLnNpemUpOworCQlyZXR2YWwgPSAtRUZBVUxUOworCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlzd2l0Y2ggKGRhdGEuY21kKSB7CisJY2FzZSBuZXR4ZW5fbmljX2NtZF9wY2lfcmVhZDoKKwkJaWYgKChyZXR2YWwgPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgZGF0YS5vZmYsCisJCQkJCQkgICAgJihkYXRhLnUpLCBkYXRhLnNpemUpKSkKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQlpZiAoY29weV90b191c2VyCisJCSAgICAoKHZvaWQgX191c2VyICopJih1cF9kYXRhLT51KSwgJihkYXRhLnUpLCBkYXRhLnNpemUpKSB7CisJCQlEUFJJTlRLKEVSUiwgImJhZCBjb3B5IHRvIHVzZXJsYW5kOiAlZFxuIiwKKwkJCQkoaW50KXNpemVvZihkYXRhKSk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwkJZGF0YS5ydiA9IDA7CisJCWJyZWFrOworCisJY2FzZSBuZXR4ZW5fbmljX2NtZF9wY2lfd3JpdGU6CisJCWRhdGEucnYgPSBuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIGRhdGEub2ZmLCAmKGRhdGEudSksCisJCQkJCQkgZGF0YS5zaXplKTsKKwkJYnJlYWs7CisKKwljYXNlIG5ldHhlbl9uaWNfY21kX3BjaV9jb25maWdfcmVhZDoKKwkJc3dpdGNoIChkYXRhLnNpemUpIHsKKwkJY2FzZSAxOgorCQkJZGF0YS5ydiA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkYXB0ZXItPmFody5wZGV2LAorCQkJCQkJICAgICAgIGRhdGEub2ZmLAorCQkJCQkJICAgICAgIChjaGFyICopJihkYXRhLnUpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlkYXRhLnJ2ID0gcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+YWh3LnBkZXYsCisJCQkJCQkgICAgICAgZGF0YS5vZmYsCisJCQkJCQkgICAgICAgKHNob3J0ICopJihkYXRhLnUpKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlkYXRhLnJ2ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPmFody5wZGV2LAorCQkJCQkJCWRhdGEub2ZmLAorCQkJCQkJCSh1MzIgKikgJiAoZGF0YS51KSk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY29weV90b191c2VyCisJCSAgICAoKHZvaWQgX191c2VyICopJih1cF9kYXRhLT51KSwgJihkYXRhLnUpLCBkYXRhLnNpemUpKSB7CisJCQlEUFJJTlRLKEVSUiwgImJhZCBjb3B5IHRvIHVzZXJsYW5kOiAlZFxuIiwKKwkJCQkoaW50KXNpemVvZihkYXRhKSk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIG5ldHhlbl9uaWNfY21kX3BjaV9jb25maWdfd3JpdGU6CisJCXN3aXRjaCAoZGF0YS5zaXplKSB7CisJCWNhc2UgMToKKwkJCWRhdGEucnYgPSBwY2lfd3JpdGVfY29uZmlnX2J5dGUoYWRhcHRlci0+YWh3LnBkZXYsCisJCQkJCQkJZGF0YS5vZmYsCisJCQkJCQkJKihjaGFyICopJihkYXRhLnUpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlkYXRhLnJ2ID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkYXB0ZXItPmFody5wZGV2LAorCQkJCQkJCWRhdGEub2ZmLAorCQkJCQkJCSooc2hvcnQgKikmKGRhdGEudSkpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWRhdGEucnYgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFkYXB0ZXItPmFody5wZGV2LAorCQkJCQkJCSBkYXRhLm9mZiwKKwkJCQkJCQkgKih1MzIgKikgJiAoZGF0YS51KSk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgbmV0eGVuX25pY19jbWRfZ2V0X3N0YXRzOgorCQlkYXRhLnJ2ID0KKwkJICAgIG5ldHhlbl9uaWNfZmlsbF9zdGF0aXN0aWNzKGFkYXB0ZXIsIHBvcnQsICZuZXR4ZW5fc3RhdHMpOworCQlpZiAoY29weV90b191c2VyCisJCSAgICAoKHZvaWQgX191c2VyICopKHVwX2RhdGEtPnB0ciksICh2b2lkICopJm5ldHhlbl9zdGF0cywKKwkJICAgICBzaXplb2Yoc3RydWN0IG5ldHhlbl9zdGF0aXN0aWNzKSkpIHsKKwkJCURQUklOVEsoRVJSLCAiYmFkIGNvcHkgdG8gdXNlcmxhbmQ6ICVkXG4iLAorCQkJCShpbnQpc2l6ZW9mKG5ldHhlbl9zdGF0cykpOworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisJCXVwX2RhdGEtPnJ2ID0gZGF0YS5ydjsKKwkJYnJlYWs7CisKKwljYXNlIG5ldHhlbl9uaWNfY21kX2NsZWFyX3N0YXRzOgorCQlkYXRhLnJ2ID0gbmV0eGVuX25pY19jbGVhcl9zdGF0aXN0aWNzKGFkYXB0ZXIsIHBvcnQpOworCQl1cF9kYXRhLT5ydiA9IGRhdGEucnY7CisJCWJyZWFrOworCisJY2FzZSBuZXR4ZW5fbmljX2NtZF9nZXRfdmVyc2lvbjoKKwkJaWYgKGNvcHlfdG9fdXNlcgorCQkgICAgKCh2b2lkIF9fdXNlciAqKSYodXBfZGF0YS0+dSksIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklELAorCQkgICAgIHNpemVvZihORVRYRU5fTklDX0xJTlVYX1ZFUlNJT05JRCkpKSB7CisJCQlEUFJJTlRLKEVSUiwgImJhZCBjb3B5IHRvIHVzZXJsYW5kOiAlZFxuIiwKKwkJCQkoaW50KXNpemVvZihkYXRhKSk7CisJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJZ290byBlcnJvcl9vdXQ7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEUFJJTlRLKElORk8sICJiYWQgY29tbWFuZCAlZCBmb3IgJXBcbiIsIGRhdGEuY21kLCBhZGFwdGVyKTsKKwkJcmV0dmFsID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwlwdXRfdXNlcihkYXRhLnJ2LCAodTE2IF9fdXNlciAqKSAoJih1cF9kYXRhLT5ydikpKTsKKwlEUFJJTlRLKElORk8sICJkb25lIGlvY3RsIGZvciAlcCB3ZWxsLlxuIiwgYWRhcHRlcik7CisKKyAgICAgIGVycm9yX291dDoKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW9jdGwuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNlNTNhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2lvY3RsLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKiAKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIAorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICAgIGluZm9AbmV0eGVuLmNvbQorICogTmV0WGVuLAorICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAorICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKi8KKworI2lmbmRlZiBfX05FVFhFTl9OSUNfSU9DVExfSF9fCisjZGVmaW5lIF9fTkVUWEVOX05JQ19JT0NUTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KKworI2RlZmluZSBORVRYRU5fQ01EX1NUQVJUCVNJT0NERVZQUklWQVRFCisjZGVmaW5lIE5FVFhFTl9OSUNfQ01ECQkoTkVUWEVOX0NNRF9TVEFSVCArIDEpCisjZGVmaW5lIE5FVFhFTl9OSUNfTkFNRQkJKE5FVFhFTl9DTURfU1RBUlQgKyAyKQorI2RlZmluZSBORVRYRU5fTklDX05BTUVfTEVOCTE2CisjZGVmaW5lIE5FVFhFTl9OSUNfTkFNRV9SU1AJIk5FVFhFTiIKKwordHlwZWRlZiBlbnVtIHsKKwluZXR4ZW5fbmljX2NtZF9ub25lID0gMCwKKwluZXR4ZW5fbmljX2NtZF9wY2lfcmVhZCwKKwluZXR4ZW5fbmljX2NtZF9wY2lfd3JpdGUsCisJbmV0eGVuX25pY19jbWRfcGNpX21lbV9yZWFkLAorCW5ldHhlbl9uaWNfY21kX3BjaV9tZW1fd3JpdGUsCisJbmV0eGVuX25pY19jbWRfcGNpX2NvbmZpZ19yZWFkLAorCW5ldHhlbl9uaWNfY21kX3BjaV9jb25maWdfd3JpdGUsCisJbmV0eGVuX25pY19jbWRfZ2V0X3N0YXRzLAorCW5ldHhlbl9uaWNfY21kX2NsZWFyX3N0YXRzLAorCW5ldHhlbl9uaWNfY21kX2dldF92ZXJzaW9uCit9IG5ldHhlbl9uaWNfaW9jdGxfY21kX3Q7CisKK3N0cnVjdCBuZXR4ZW5fbmljX2lvY3RsX2RhdGEgeworCXUzMiBjbWQ7CisJdTMyIHVudXNlZDE7CisJdTY0IG9mZjsKKwl1MzIgc2l6ZTsKKwl1MzIgcnY7CisJY2hhciB1WzY0XTsKKwl2b2lkICpwdHI7Cit9OworCitzdHJ1Y3QgbmV0eGVuX3N0YXRpc3RpY3MgeworCXU2NCByeF9wYWNrZXRzOworCXU2NCB0eF9wYWNrZXRzOworCXU2NCByeF9ieXRlczsKKwl1NjQgcnhfZXJyb3JzOworCXU2NCB0eF9ieXRlczsKKwl1NjQgdHhfZXJyb3JzOworCXU2NCByeF9jcmNfZXJyb3JzOworCXU2NCByeF9zaG9ydF9sZW5ndGhfZXJyb3I7CisJdTY0IHJ4X2xvbmdfbGVuZ3RoX2Vycm9yOworCXU2NCByeF9tYWNfZXJyb3JzOworfTsKKworI2VuZGlmCQkJCS8qIF9fTkVUWEVOX05JQ19JT0NUTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaXNyLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19pc3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE4MGZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaXNyLmMKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICogCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiAKKyAqIENvbnRhY3QgSW5mb3JtYXRpb246CisgKiAgICBpbmZvQG5ldHhlbi5jb20KKyAqIE5ldFhlbiwKKyAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKKyAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAibmV0eGVuX25pYy5oIgorI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKKyNpbmNsdWRlICJuZXR4ZW5fbmljX3BoYW5fcmVnLmgiCisKKy8qCisgKiBuZXR4ZW5fbmljX2dldF9zdGF0cyAtIEdldCBTeXN0ZW0gTmV0d29yayBTdGF0aXN0aWNzCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR4ZW5fbmljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnBvcnQtPm5ldF9zdGF0czsKKworCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOworCisJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZCAgICovCisJc3RhdHMtPnJ4X3BhY2tldHMgPSBwb3J0LT5zdGF0cy5ub19yY3Y7CisJLyogdG90YWwgcGFja2V0cyB0cmFuc21pdHRlZCAgICAqLworCXN0YXRzLT50eF9wYWNrZXRzID0gcG9ydC0+c3RhdHMueG1pdGVkZnJhbWVzICsgcG9ydC0+c3RhdHMueG1pdGZpbmlzaGVkOworCS8qIHRvdGFsIGJ5dGVzIHJlY2VpdmVkICAgICAqLworCXN0YXRzLT5yeF9ieXRlcyA9IHBvcnQtPnN0YXRzLnJ4Ynl0ZXM7CisJLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQgICovCisJc3RhdHMtPnR4X2J5dGVzID0gcG9ydC0+c3RhdHMudHhieXRlczsKKwkvKiBiYWQgcGFja2V0cyByZWNlaXZlZCAgICAgKi8KKwlzdGF0cy0+cnhfZXJyb3JzID0gcG9ydC0+c3RhdHMucmN2ZGJhZHNrYjsKKwkvKiBwYWNrZXQgdHJhbnNtaXQgcHJvYmxlbXMgKi8KKwlzdGF0cy0+dHhfZXJyb3JzID0gcG9ydC0+c3RhdHMubm9jbWRkZXNjcmlwdG9yOworCS8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMgICAgKi8KKwlzdGF0cy0+cnhfZHJvcHBlZCA9IHBvcnQtPnN0YXRzLnVwZHJvcHBlZDsKKwkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXggICovCisJc3RhdHMtPnR4X2Ryb3BwZWQgPSBwb3J0LT5zdGF0cy50eGRyb3BwZWQ7CisKKwlyZXR1cm4gc3RhdHM7Cit9CisKK3ZvaWQgbmV0eGVuX2luZGljYXRlX2xpbmtfc3RhdHVzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIHBvcnRubywKKwkJCQkgdTMyIGxpbmspCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwcG9ydCA9IGFkYXB0ZXItPnBvcnRbcG9ydG5vXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcHBvcnQtPm5ldGRldjsKKworCWlmIChsaW5rKQorCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisJZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworfQorCit2b2lkIG5ldHhlbl9oYW5kbGVfcG9ydF9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcG9ydG5vLAorCQkJICAgIHUzMiBlbmFibGUpCit7CisJX19sZTMyIGludF9zcmM7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0OworCisJLyogIFRoaXMgc2hvdWxkIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc291cmNlICovCisJaWYgKGFkYXB0ZXItPm9wcy0+cGh5X3JlYWQpCisJCWFkYXB0ZXItPm9wcy0+cGh5X3JlYWQoYWRhcHRlciwgcG9ydG5vLAorCQkJCSAgICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX1NUQVRVUywKKwkJCQkgICAgICAgJmludF9zcmMpOworCWlmIChpbnRfc3JjID09IDApIHsKKwkJRFBSSU5USyhJTkZPLCAiTm8gcGh5IGludGVycnVwdHMgZm9yIHBvcnQgIyVkXG4iLCBwb3J0bm8pOworCQlyZXR1cm47CisJfQorCWlmIChhZGFwdGVyLT5vcHMtPmRpc2FibGVfcGh5X2ludGVycnVwdHMpCisJCWFkYXB0ZXItPm9wcy0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyhhZGFwdGVyLCBwb3J0bm8pOworCisJcG9ydCA9IGFkYXB0ZXItPnBvcnRbcG9ydG5vXTsKKworCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfamFiYmVyKGludF9zcmMpKQorCQlEUFJJTlRLKElORk8sICJOZXRYZW46ICVzIEphYmJlciBpbnRlcnJ1cHQgXG4iLAorCQkJcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKworCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfcG9sYXJpdHlfY2hhbmdlZChpbnRfc3JjKSkKKwkJRFBSSU5USyhJTkZPLCAiTmV0WGVuOiAlcyBQT0xBUklUWSBDSEFOR0VEIGludCBcbiIsCisJCQlwb3J0LT5uZXRkZXYtPm5hbWUpOworCisJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9lbmVyZ3lfZGV0ZWN0KGludF9zcmMpKQorCQlEUFJJTlRLKElORk8sICJOZXRYZW46ICVzIEVORVJHWSBERVRFQ1QgSU5UIFxuIiwKKwkJCXBvcnQtPm5ldGRldi0+bmFtZSk7CisKKwlpZiAobmV0eGVuX2dldF9waHlfaW50X2Rvd25zaGlmdChpbnRfc3JjKSkKKwkJRFBSSU5USyhJTkZPLCAiTmV0WGVuOiAlcyBET1dOU0hJRlQgSU5UIFxuIiwKKwkJCXBvcnQtPm5ldGRldi0+bmFtZSk7CisJLyogd3JpdGUgaXQgZG93biBsYXRlci4uICovCisJaWYgKChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3BlZWRfY2hhbmdlZChpbnRfc3JjKSkKKwkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgeworCQlfX2xlMzIgc3RhdHVzOworCisJCURQUklOVEsoSU5GTywgIk5ldFhlbjogJXMgU1BFRUQgQ0hBTkdFRCBPUiIKKwkJCSIgTElOSyBTVEFUVVMgQ0hBTkdFRCBcbiIsIHBvcnQtPm5ldGRldi0+bmFtZSk7CisKKwkJaWYgKGFkYXB0ZXItPm9wcy0+cGh5X3JlYWQKKwkJICAgICYmIGFkYXB0ZXItPm9wcy0+cGh5X3JlYWQoYWRhcHRlciwgcG9ydG5vLAorCQkJCQkgICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKKwkJCQkJICAgICAgJnN0YXR1cykgPT0gMCkgeworCQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSB7CisJCQkJaWYgKG5ldHhlbl9nZXRfcGh5X2xpbmsoc3RhdHVzKSkgeworCQkJCQluZXR4ZW5fbml1X2diZV9pbml0X3BvcnQoYWRhcHRlciwKKwkJCQkJCQkJIHBvcnRubyk7CisJCQkJCXByaW50aygiJXM6ICVzIExpbmsgVVBcbiIsCisJCQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkJCQkgICAgICAgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50aygiJXM6ICVzIExpbmsgRE9XTlxuIiwKKwkJCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCisJCQkJCSAgICAgICBwb3J0LT5uZXRkZXYtPm5hbWUpOworCQkJCX0KKwkJCQluZXR4ZW5faW5kaWNhdGVfbGlua19zdGF0dXMoYWRhcHRlciwgcG9ydG5vLAorCQkJCQkJCSAgICBuZXR4ZW5fZ2V0X3BoeV9saW5rCisJCQkJCQkJICAgIChzdGF0dXMpKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYWRhcHRlci0+b3BzLT5lbmFibGVfcGh5X2ludGVycnVwdHMpCisJCWFkYXB0ZXItPm9wcy0+ZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIsIHBvcnRubyk7Cit9CisKK3ZvaWQgbmV0eGVuX25pY19pc3Jfb3RoZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBwb3J0bm87CisJdTMyIHZhbCwgbGlua3VwLCBxZ19saW5rc3VwOworCisJLyogdmVyaWZ5IHRoZSBvZmZzZXQgKi8KKwl2YWwgPSByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpKTsKKwlpZiAodmFsID09IGFkYXB0ZXItPmFody5xZ19saW5rc3VwKQorCQlyZXR1cm47CisKKwlxZ19saW5rc3VwID0gYWRhcHRlci0+YWh3LnFnX2xpbmtzdXA7CisJYWRhcHRlci0+YWh3LnFnX2xpbmtzdXAgPSB2YWw7CisJRFBSSU5USygxLCBJTkZPLCAiJXM6IGxpbmsgdXBkYXRlIDB4JTA4eFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKKwkJdmFsKTsKKwlmb3IgKHBvcnRubyA9IDA7IHBvcnRubyA8IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUzsgcG9ydG5vKyspIHsKKwkJbGlua3VwID0gdmFsICYgMTsKKwkJaWYgKGxpbmt1cCAhPSAocWdfbGlua3N1cCAmIDEpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogUE9SVCAlZCBsaW5rICVzXG4iLAorCQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIHBvcnRubywKKwkJCSAgICAgICAoKGxpbmt1cCA9PSAwKSA/ICJkb3duIiA6ICJ1cCIpKTsKKwkJCW5ldHhlbl9pbmRpY2F0ZV9saW5rX3N0YXR1cyhhZGFwdGVyLCBwb3J0bm8sIGxpbmt1cCk7CisJCQlpZiAobGlua3VwKQorCQkJCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyLT4KKwkJCQkJCQkgICAgICAgcG9ydFtwb3J0bm9dKTsKKworCQl9CisJCXZhbCA9IHZhbCA+PiAxOworCQlxZ19saW5rc3VwID0gcWdfbGlua3N1cCA+PiAxOworCX0KKworCWFkYXB0ZXItPnN0YXRzLm90aGVyaW50cysrOworCit9CisKK3ZvaWQgbmV0eGVuX25pY19nYmVfaGFuZGxlX3BoeV9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwluZXR4ZW5fbmljX2lzcl9vdGhlcihhZGFwdGVyKTsKK30KKwordm9pZCBuZXR4ZW5fbmljX3hnYmVfaGFuZGxlX3BoeV9pbnRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFswXS0+bmV0ZGV2OworCXUzMiB2YWw7CisKKwkvKiBXSU5ET1cgPSAxICovCisJdmFsID0gcmVhZGwoTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKSk7CisKKwlpZiAoYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9PSAxICYmIHZhbCAhPSBYR19MSU5LX1VQKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBOSUMgTGluayBpcyBkb3duXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lKTsKKwkJYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9IDA7CisJCS8qIHJlYWQgdHdpY2UgdG8gY2xlYXIgc3RpY2t5IGJpdHMgKi8KKwkJLyogV0lORE9XID0gMCAqLworCQluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9YR19TVEFUVVMsICZ2YWwpOworCQluZXR4ZW5fbmljX3JlYWRfdzAoYWRhcHRlciwgTkVUWEVOX05JVV9YR19TVEFUVVMsICZ2YWwpOworCisJCWlmICgodmFsICYgMHhmZmIpICE9IDB4ZmZiKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlcyBJU1I6IFN5bmMvQWxpZ24gQkFEOiAweCUwOHhcbiIsCisJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgdmFsKTsKKwkJfQorCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnhnX2xpbmt1cCA9PSAwICYmIHZhbCA9PSBYR19MSU5LX1VQKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBOSUMgTGluayBpcyB1cFxuIiwKKwkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJCWFkYXB0ZXItPmFody54Z19saW5rdXAgPSAxOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I2NjJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0wLDAgKzEsMTE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKiAKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIAorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICAgIGluZm9AbmV0eGVuLmNvbQorICogTmV0WGVuLAorICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAorICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKgorICoKKyAqICBNYWluIHNvdXJjZSBmaWxlIGZvciBOZXRYZW4gTklDIERyaXZlciBvbiBMaW51eAorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgIm5ldHhlbl9uaWNfaHcuaCIKKworI2luY2x1ZGUgIm5ldHhlbl9uaWMuaCIKKyNkZWZpbmUgREVGSU5FX0dMT0JBTF9SRUNWX0NSQgorI2luY2x1ZGUgIm5ldHhlbl9uaWNfcGhhbl9yZWcuaCIKKyNpbmNsdWRlICJuZXR4ZW5fbmljX2lvY3RsLmgiCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2RlZmluZSBQSEFOX1ZFTkRPUl9JRCAweDQwNDAKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRYZW4gTXVsdGkgcG9ydCAoMS8xMCkgR2lnYWJpdCBOZXR3b3JrIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQpOworCitjaGFyIG5ldHhlbl9uaWNfZHJpdmVyX25hbWVbXSA9ICJuZXR4ZW4iOworc3RhdGljIGNoYXIgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nW10gPSAiTmV0WGVuIE5ldHdvcmsgRHJpdmVyIHZlcnNpb24gIgorICAgIE5FVFhFTl9OSUNfTElOVVhfVkVSU0lPTklEOworCisjZGVmaW5lIE5FVFhFTl9ORVRERVZfV0VJR0hUIDEyMAorI2RlZmluZSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQyA3NzcKKyNkZWZpbmUgTkVUWEVOX05JQ19QRUdfVFVORSAwCisKKy8qIExvY2FsIGZ1bmN0aW9ucyB0byBOZXRYZW4gTklDIGRyaXZlciAqLworc3RhdGljIGludCBfX2RldmluaXQgbmV0eGVuX25pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBuZXR4ZW5fbmljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIHZvaWQgbmV0eGVuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dF90YXNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIHZvaWQgbmV0eGVuX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGludCBuZXR4ZW5faGFuZGxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7CitzdGF0aWMgaW50IG5ldHhlbl9uaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CitzdGF0aWMgaW50IG5ldHhlbl9uaWNfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCk7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIG5ldHhlbl9uaWNfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworI2VuZGlmCitzdGF0aWMgaXJxcmV0dXJuX3QgbmV0eGVuX2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSk7CisKKy8qICBQQ0kgRGV2aWNlIElEIFRhYmxlICAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5ldHhlbl9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX0RFVklDRSgweDQwNDAsIDB4MDAwMSl9LAorCXtQQ0lfREVWSUNFKDB4NDA0MCwgMHgwMDAyKX0sCisJe1BDSV9ERVZJQ0UoMHg0MDQwLCAweDAwMDMpfSwKKwl7UENJX0RFVklDRSgweDQwNDAsIDB4MDAwNCl9LAorCXtQQ0lfREVWSUNFKDB4NDA0MCwgMHgwMDA1KX0sCisJezAsfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5ldHhlbl9wY2lfdGJsKTsKKworLyoKKyAqIG5ldHhlbl9uaWNfcHJvYmUoKQorICoKKyAqIFRoZSBMaW51eCBzeXN0ZW0gd2lsbCBpbnZva2UgdGhpcyBhZnRlciBpZGVudGlmeWluZyB0aGUgdmVuZG9yIElEIGFuZAorICogZGV2aWNlIElkIGluIHRoZSBwY2lfdGJsIHN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZS4KKyAqCisgKiBBIHF1YWQgcG9ydCBjYXJkIGhhcyBvbmUgb3BlcmF0aW9uYWwgUENJIGNvbmZpZyBzcGFjZSwgKGZ1bmN0aW9uIDApLAorICogd2hpY2ggaXMgdXNlZCB0byBhY2Nlc3MgYWxsIGZvdXIgcG9ydHMuCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciwgYW5kIHNldHVwIHRoZSBnbG9iYWwgcGFyYW1ldGVycworICogYWxvbmcgd2l0aCB0aGUgcG9ydCdzIHNwZWNpZmljIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK25ldHhlbl9uaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBOVUxMOworCXU4ICptZW1fcHRyMCA9IE5VTEw7CisJdTggKm1lbV9wdHIxID0gTlVMTDsKKwl1OCAqbWVtX3B0cjIgPSBOVUxMOworCisJdW5zaWduZWQgbG9uZyBtZW1fYmFzZSwgbWVtX2xlbjsKKwlpbnQgcGNpX3VzaW5nX2RhYywgaSwgZXJyOworCWludCByaW5nOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9IE5VTEw7CisJc3RydWN0IG5ldHhlbl9yY3ZfZGVzY19jdHggKnJjdl9kZXNjID0gTlVMTDsKKwlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyID0gTlVMTDsKKwl1NjQgbWFjX2FkZHJbRkxBU0hfTlVNX1BPUlRTICsgMV07CisJaW50IHZhbGlkX21hYzsKKworCXByaW50ayhLRVJOX0lORk8gIiVzIFxuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKKwlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkKKwkJcmV0dXJuIGVycjsKKwlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX01FTSkpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGRldjsKKwl9CisKKwlpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSkpKQorCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJaWYgKChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSA9PSAwKSAmJgorCSAgICAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSA9PSAwKSkKKwkJcGNpX3VzaW5nX2RhYyA9IDE7CisJZWxzZSB7CisJCWlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpIHx8CisJCSAgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisKKwkJcGNpX3VzaW5nX2RhYyA9IDA7CisJfQorCisJLyogcmVtYXAgcGh5cyBhZGRyZXNzICovCisJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CS8qIDAgaXMgZm9yIEJBUiAwICovCisJbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwkvKiAxMjggTWVnIG9mIG1lbW9yeSAqLworCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKKwltZW1fcHRyMSA9CisJICAgIGlvcmVtYXAobWVtX2Jhc2UgKyBTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7CisJbWVtX3B0cjIgPQorCSAgICBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKKworCWlmICgobWVtX3B0cjAgPT0gMFVMKSB8fCAobWVtX3B0cjEgPT0gMFVMKSB8fCAobWVtX3B0cjIgPT0gMFVMKSkgeworCQlEUFJJTlRLKDEsIEVSUiwKKwkJCSJDYW5ub3QgcmVtYXAgYWRhcHRlciBtZW1vcnkgYWJvcnRpbmcuOiIKKwkJCSIwIC0+ICVwLCAxIC0+ICVwLCAyIC0+ICVwXG4iLAorCQkJbWVtX3B0cjAsIG1lbV9wdHIxLCBtZW1fcHRyMik7CisKKwkJZXJyID0gLUVJTzsKKwkJaWYgKG1lbV9wdHIwKQorCQkJaW91bm1hcChtZW1fcHRyMCk7CisJCWlmIChtZW1fcHRyMSkKKwkJCWlvdW5tYXAobWVtX3B0cjEpOworCQlpZiAobWVtX3B0cjIpCisJCQlpb3VubWFwKG1lbV9wdHIyKTsKKworCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJfQorCisvKgorICogICAgICBBbGxvY2F0ZSBhIGFkYXB0ZXIgc3RydWN0dXJlIHdoaWNoIHdpbGwgbWFuYWdlIGFsbCB0aGUgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgYXMgd2VsbCBhcyB0aGUgY29tbW9uIHJlc291cmNlcyBmb3IgYWxsIHBvcnRzLi4uCisgKiAgICAgIGFsbCB0aGUgcG9ydHMgd2lsbCBoYXZlIHBvaW50ZXIgdG8gdGhpcyBhZGFwdGVyIGFzIHdlbGwgYXMgQWRhcHRlcgorICogICAgICB3aWxsIGhhdmUgcG9pbnRlcnMgb2YgYWxsIHRoZSBwb3J0cyBzdHJ1Y3R1cmVzLgorICovCisKKwkvKiBPbmUgYWRhcHRlciBzdHJ1Y3R1cmUgZm9yIGFsbCA0IHBvcnRzLi4uLiAgICovCisJYWRhcHRlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGFsbG9jYXRlIGFkYXB0ZXIgbWVtb3J5OiVkXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKKwkJICAgICAgIChpbnQpc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYWRhcHRlcikpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKKwl9CisKKwlhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCA9IE1BWF9DTURfREVTQ1JJUFRPUlM7CisJYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTOworCWFkYXB0ZXItPm1heF9qdW1ib19yeF9kZXNjX2NvdW50ID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUzsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGFwdGVyKTsKKworCWNtZF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqKXZtYWxsb2MoVFhfUklOR1NJWkUpOworCWlmIChjbWRfYnVmX2FyciA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9mcmVlX2FkYXB0ZXI7CisJfQorCW1lbXNldChjbWRfYnVmX2FyciwgMCwgVFhfUklOR1NJWkUpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9SQ1ZfQ1RYOyArK2kpIHsKKwkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbaV07CisJCWZvciAocmluZyA9IDA7IHJpbmcgPCBOVU1fUkNWX0RFU0NfUklOR1M7IHJpbmcrKykgeworCQkJcmN2X2Rlc2MgPSAmcmVjdl9jdHgtPnJjdl9kZXNjW3JpbmddOworCQkJc3dpdGNoIChSQ1ZfREVTQ19UWVBFKHJpbmcpKSB7CisJCQljYXNlIFJDVl9ERVNDX05PUk1BTDoKKwkJCQlyY3ZfZGVzYy0+bWF4X3J4X2Rlc2NfY291bnQgPQorCQkJCSAgICBhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudDsKKwkJCQlyY3ZfZGVzYy0+ZmxhZ3MgPSBSQ1ZfREVTQ19OT1JNQUw7CisJCQkJcmN2X2Rlc2MtPmRtYV9zaXplID0gUlhfRE1BX01BUF9MRU47CisJCQkJcmN2X2Rlc2MtPnNrYl9zaXplID0gTUFYX1JYX0JVRkZFUl9MRU5HVEg7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUkNWX0RFU0NfSlVNQk86CisJCQkJcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50ID0KKwkJCQkgICAgYWRhcHRlci0+bWF4X2p1bWJvX3J4X2Rlc2NfY291bnQ7CisJCQkJcmN2X2Rlc2MtPmZsYWdzID0gUkNWX0RFU0NfSlVNQk87CisJCQkJcmN2X2Rlc2MtPmRtYV9zaXplID0gUlhfSlVNQk9fRE1BX01BUF9MRU47CisJCQkJcmN2X2Rlc2MtPnNrYl9zaXplID0gTUFYX1JYX0pVTUJPX0JVRkZFUl9MRU5HVEg7CisJCQkJYnJlYWs7CisKKwkJCX0KKwkJCXJjdl9kZXNjLT5yeF9idWZfYXJyID0gKHN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICopCisJCQkgICAgdm1hbGxvYyhSQ1ZfQlVGRlNJWkUpOworCisJCQlpZiAocmN2X2Rlc2MtPnJ4X2J1Zl9hcnIgPT0gTlVMTCkgeworCQkJCWVyciA9IC1FTk9NRU07CisJCQkJZ290byBlcnJfb3V0X2ZyZWVfcnhfYnVmZmVyOworCQkJfQorCQkJbWVtc2V0KHJjdl9kZXNjLT5yeF9idWZfYXJyLCAwLCBSQ1ZfQlVGRlNJWkUpOworCQl9CisKKwl9CisKKwlhZGFwdGVyLT5vcHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2Rydm9wcyksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyLT5vcHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICIlczogQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgYWRhcHRlci0+b3BzOiVkXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKKwkJICAgICAgIChpbnQpc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYWRhcHRlcikpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9yeF9idWZmZXI7CisJfQorCisJYWRhcHRlci0+Y21kX2J1Zl9hcnIgPSBjbWRfYnVmX2FycjsKKwlhZGFwdGVyLT5haHcucGNpX2Jhc2UwID0gbWVtX3B0cjA7CisJYWRhcHRlci0+YWh3LnBjaV9iYXNlMSA9IG1lbV9wdHIxOworCWFkYXB0ZXItPmFody5wY2lfYmFzZTIgPSBtZW1fcHRyMjsKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPmxvY2spOworI2lmZGVmIENPTkZJR19JQTY0CisJbmV0eGVuX3Bpbml0X2Zyb21fcm9tKGFkYXB0ZXIsIDApOworCXVkZWxheSg1MDApOworCW5ldHhlbl9sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOworI2VuZGlmCisKKwkvKiBpbml0aWFsaXplIHRoZSBidWZmZXJzIGluIGFkYXB0ZXIgKi8KKwluZXR4ZW5faW5pdGlhbGl6ZV9hZGFwdGVyX3N3KGFkYXB0ZXIpOworCS8qCisJICogU2V0IHRoZSBDUkIgd2luZG93IHRvIGludmFsaWQuIElmIGFueSByZWdpc3RlciBpbiB3aW5kb3cgMCBpcworCSAqIGFjY2Vzc2VkIGl0IHNob3VsZCBzZXQgdGhlIHdpbmRvdyB0byAwIGFuZCB0aGVuIHJlc2V0IGl0IHRvIDEuCisJICovCisJYWRhcHRlci0+Y3Vycl93aW5kb3cgPSAyNTU7CisJLyoKKwkgKiAgQWRhcHRlciBpbiBvdXIgY2FzZSBpcyBxdWFkIHBvcnQgc28gaW5pdGlhbGl6ZSBpdCBiZWZvcmUKKwkgKiAgaW5pdGlhbGl6aW5nIHRoZSBwb3J0cworCSAqLworCW5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfaHcoYWRhcHRlcik7CS8qIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIgKi8KKworCW5ldHhlbl9pbml0aWFsaXplX2FkYXB0ZXJfb3BzKGFkYXB0ZXIpOworCisJaW5pdF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCWFkYXB0ZXItPmFody54Z19saW5rdXAgPSAwOworCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gJm5ldHhlbl93YXRjaGRvZzsKKwlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpYWRhcHRlcjsKKwlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2ssCisJCSAgKHZvaWQgKCopKHZvaWQgKikpbmV0eGVuX3dhdGNoZG9nX3Rhc2ssIGFkYXB0ZXIpOworCWFkYXB0ZXItPmFody5wZGV2ID0gcGRldjsKKwlhZGFwdGVyLT5wcm9jX2NtZF9idWZfY291bnRlciA9IDA7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCAmYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKTsKKworCWlmIChwY2lfZW5hYmxlX21zaShwZGV2KSkgeworCQlhZGFwdGVyLT5mbGFncyAmPSB+TkVUWEVOX05JQ19NU0lfRU5BQkxFRDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSBNU0kgaW50ZXJydXB0IgorCQkgICAgICAgIiBlcnJvclxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJfSBlbHNlCisJCWFkYXB0ZXItPmZsYWdzIHw9IE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQ7CisKKwlpZiAobmV0eGVuX2lzX2ZsYXNoX3N1cHBvcnRlZChhZGFwdGVyKSA9PSAwICYmCisJICAgIG5ldHhlbl9nZXRfZmxhc2hfbWFjX2FkZHIoYWRhcHRlciwgbWFjX2FkZHIpID09IDApCisJCXZhbGlkX21hYyA9IDE7CisJZWxzZQorCQl2YWxpZF9tYWMgPSAwOworCisJLyoKKwkgKiBJbml0aWFsaXplIGFsbCB0aGUgQ1JCIHJlZ2lzdGVycyBoZXJlLgorCSAqLworCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVCkpOworCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVCkpOworCXdyaXRlbCgwLCBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfSE9TVF9DTURfQUREUl9MTykpOworCisJLyogVW5sb2NrIHRoZSBIVywgcHJvbXB0aW5nIHRoZSBib290IHNlcXVlbmNlICovCisJd3JpdGVsKDEsCisJICAgICAgIE5FVFhFTl9DUkJfTk9STUFMSVpFKGFkYXB0ZXIsIE5FVFhFTl9ST01VU0JfR0xCX1BFR1RVTkVfRE9ORSkpOworCisJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLworCW5ldHhlbl9waGFudG9tX2luaXQoYWRhcHRlciwgTkVUWEVOX05JQ19QRUdfVFVORSk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBhbGwgdGhlIHBvcnRzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+YWh3Lm1heF9wb3J0czsgaSsrKSB7CisJCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbmV0eGVuX3BvcnQpKTsKKwkJaWYgKCFuZXRkZXYpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvY2F0ZSBuZXRkZXYgZm9yIHBvcnQiCisJCQkgICAgICAgIiAlZFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgaSArIDEpOworCQkJZ290byBlcnJfb3V0X2ZyZWVfZGV2OworCQl9CisKKwkJU0VUX01PRFVMRV9PV05FUihuZXRkZXYpOworCQlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCisJCXBvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQlwb3J0LT5uZXRkZXYgPSBuZXRkZXY7CisJCXBvcnQtPnBkZXYgPSBwZGV2OworCQlwb3J0LT5hZGFwdGVyID0gYWRhcHRlcjsKKwkJcG9ydC0+cG9ydG51bSA9IGk7CS8qIEdpZ2FiaXQgcG9ydCBudW1iZXIgZnJvbSAwLTMgKi8KKworCQluZXRkZXYtPm9wZW4gPSBuZXR4ZW5fbmljX29wZW47CisJCW5ldGRldi0+c3RvcCA9IG5ldHhlbl9uaWNfY2xvc2U7CisJCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gbmV0eGVuX25pY194bWl0X2ZyYW1lOworCQluZXRkZXYtPmdldF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X3N0YXRzOworCQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG5ldHhlbl9uaWNfc2V0X211bHRpOworCQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG5ldHhlbl9uaWNfc2V0X21hYzsKKwkJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gbmV0eGVuX25pY19jaGFuZ2VfbXR1OworCQluZXRkZXYtPmRvX2lvY3RsID0gbmV0eGVuX25pY19pb2N0bDsKKwkJbmV0ZGV2LT50eF90aW1lb3V0ID0gbmV0eGVuX3R4X3RpbWVvdXQ7CisJCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsKKworCQlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmbmV0eGVuX25pY19ldGh0b29sX29wcyk7CisJCW5ldGRldi0+cG9sbCA9IG5ldHhlbl9uaWNfcG9sbDsKKwkJbmV0ZGV2LT53ZWlnaHQgPSBORVRYRU5fTkVUREVWX1dFSUdIVDsKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IG5ldHhlbl9uaWNfcG9sbF9jb250cm9sbGVyOworI2VuZGlmCisJCS8qIFNjYXR0ZXJHYXRoZXIgc3VwcG9ydCAqLworCQluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRzsKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU07CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisKKwkJaWYgKHBjaV91c2luZ19kYWMpCisJCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKworCQlpZiAodmFsaWRfbWFjKSB7CisJCQl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbWFjX2FkZHJbaV07CisJCQluZXRkZXYtPmRldl9hZGRyWzBdID0gKihwICsgNSk7CisJCQluZXRkZXYtPmRldl9hZGRyWzFdID0gKihwICsgNCk7CisJCQluZXRkZXYtPmRldl9hZGRyWzJdID0gKihwICsgMyk7CisJCQluZXRkZXYtPmRldl9hZGRyWzNdID0gKihwICsgMik7CisJCQluZXRkZXYtPmRldl9hZGRyWzRdID0gKihwICsgMSk7CisJCQluZXRkZXYtPmRldl9hZGRyWzVdID0gKihwICsgMCk7CisKKwkJCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgICBuZXRkZXYtPmFkZHJfbGVuKTsKKwkJCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPnBlcm1fYWRkcikpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCYWQgTUFDIGFkZHJlc3MgIgorCQkJCSAgICAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnguXG4iLAorCQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAorCQkJCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzBdLAorCQkJCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzFdLAorCQkJCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzJdLAorCQkJCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzNdLAorCQkJCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzRdLAorCQkJCSAgICAgICBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGFkYXB0ZXItPm9wcy0+bWFjYWRkcl9zZXQpCisJCQkJCWFkYXB0ZXItPm9wcy0+bWFjYWRkcl9zZXQocG9ydCwKKwkJCQkJCQkJICBuZXRkZXYtPgorCQkJCQkJCQkgIGRldl9hZGRyKTsKKwkJCX0KKwkJfQorCQlJTklUX1dPUksoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzaywKKwkJCSAgKHZvaWQgKCopKHZvaWQgKikpbmV0eGVuX3R4X3RpbWVvdXRfdGFzaywgbmV0ZGV2KTsKKwkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJCWlmICgoZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldikpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdpc3Rlcl9uZXRkZXYgZmFpbGVkIHBvcnQgIyVkIgorCQkJICAgICAgICIgYWJvcnRpbmdcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGkgKyAxKTsKKwkJCWVyciA9IC1FSU87CisJCQlmcmVlX25ldGRldihuZXRkZXYpOworCQkJZ290byBlcnJfb3V0X2ZyZWVfZGV2OworCQl9CisJCWFkYXB0ZXItPnBvcnRfY291bnQrKzsKKwkJYWRhcHRlci0+YWN0aXZlX3BvcnRzID0gMDsKKwkJYWRhcHRlci0+cG9ydFtpXSA9IHBvcnQ7CisJfQorCisJLyoKKwkgKiBkZWxheSBhIHdoaWxlIHRvIGVuc3VyZSB0aGF0IHRoZSBQZWdzIGFyZSB1cCAmIHJ1bm5pbmcuCisJICogT3RoZXJ3aXNlLCB3ZSBtaWdodCBzZWUgc29tZSBmbGFreSBiZWhhdmlvdXIuCisJICovCisJdWRlbGF5KDEwMCk7CisKKwlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZF90eXBlKSB7CisJY2FzZSBORVRYRU5fTklDX0dCRToKKwkJcHJpbnRrKCIlczogUVVBRCBHYkUgYm9hcmQgaW5pdGlhbGl6ZWRcbiIsCisJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJYnJlYWs7CisKKwljYXNlIE5FVFhFTl9OSUNfWEdCRToKKwkJcHJpbnRrKCIlczogWEdiRSBib2FyZCBpbml0aWFsaXplZFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCWJyZWFrOworCX0KKworCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CisKKwlyZXR1cm4gMDsKKworICAgICAgZXJyX291dF9mcmVlX2RldjoKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnBvcnRfY291bnQ7IGkrKykgeworCQlwb3J0ID0gYWRhcHRlci0+cG9ydFtpXTsKKwkJaWYgKChwb3J0KSAmJiAocG9ydC0+bmV0ZGV2KSkgeworCQkJdW5yZWdpc3Rlcl9uZXRkZXYocG9ydC0+bmV0ZGV2KTsKKwkJCWZyZWVfbmV0ZGV2KHBvcnQtPm5ldGRldik7CisJCX0KKwl9CisJa2ZyZWUoYWRhcHRlci0+b3BzKTsKKworICAgICAgZXJyX291dF9mcmVlX3J4X2J1ZmZlcjoKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1JDVl9DVFg7ICsraSkgeworCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtpXTsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7CisJCQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ107CisJCQlpZiAocmN2X2Rlc2MtPnJ4X2J1Zl9hcnIgIT0gTlVMTCkgeworCQkJCXZmcmVlKHJjdl9kZXNjLT5yeF9idWZfYXJyKTsKKwkJCQlyY3ZfZGVzYy0+cnhfYnVmX2FyciA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisKKwl2ZnJlZShjbWRfYnVmX2Fycik7CisKKwlrZnJlZShhZGFwdGVyLT5wb3J0KTsKKworICAgICAgZXJyX291dF9mcmVlX2FkYXB0ZXI6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGFkYXB0ZXIpOworCisgICAgICBlcnJfb3V0X2lvdW5tYXA6CisJaW91bm1hcChtZW1fcHRyMCk7CisJaW91bm1hcChtZW1fcHRyMSk7CisJaW91bm1hcChtZW1fcHRyMik7CisKKyAgICAgIGVycl9vdXRfZnJlZV9yZXM6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKyAgICAgIGVycl9vdXRfZGlzYWJsZV9wZGV2OgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbmV0eGVuX25pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2N0eCAqcmN2X2Rlc2M7CisJaW50IGk7CisJaW50IGN0eGlkLCByaW5nOworCisJYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoYWRhcHRlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwluZXR4ZW5fbmljX3N0b3BfYWxsX3BvcnRzKGFkYXB0ZXIpOworCS8qIGxlYXZlIHRoZSBodyBpbiB0aGUgc2FtZSBzdGF0ZSBhcyByZWJvb3QgKi8KKwluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7CisJdWRlbGF5KDUwMCk7CisJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7CisKKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkpCisJCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoYWRhcHRlcik7CisKKwl1ZGVsYXkoNTAwKTsJCS8qIERlbGF5IGZvciBhIHdoaWxlIHRvIGRyYWluIHRoZSBETUEgZW5naW5lcyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wb3J0X2NvdW50OyBpKyspIHsKKwkJcG9ydCA9IGFkYXB0ZXItPnBvcnRbaV07CisJCWlmICgocG9ydCkgJiYgKHBvcnQtPm5ldGRldikpIHsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KHBvcnQtPm5ldGRldik7CisJCQlmcmVlX25ldGRldihwb3J0LT5uZXRkZXYpOworCQl9CisJfQorCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpKQorCQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWlmIChhZGFwdGVyLT5pc191cCA9PSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykKKwkJbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKKwlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOworCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCWZvciAoY3R4aWQgPSAwOyBjdHhpZCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eGlkKSB7CisJCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eGlkXTsKKwkJZm9yIChyaW5nID0gMDsgcmluZyA8IE5VTV9SQ1ZfREVTQ19SSU5HUzsgcmluZysrKSB7CisJCQlyY3ZfZGVzYyA9ICZyZWN2X2N0eC0+cmN2X2Rlc2NbcmluZ107CisJCQlmb3IgKGkgPSAwOyBpIDwgcmN2X2Rlc2MtPm1heF9yeF9kZXNjX2NvdW50OyArK2kpIHsKKwkJCQlidWZmZXIgPSAmKHJjdl9kZXNjLT5yeF9idWZfYXJyW2ldKTsKKwkJCQlpZiAoYnVmZmVyLT5zdGF0ZSA9PSBORVRYRU5fQlVGRkVSX0ZSRUUpCisJCQkJCWNvbnRpbnVlOworCQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyLT5kbWEsCisJCQkJCQkgcmN2X2Rlc2MtPmRtYV9zaXplLAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaWYgKGJ1ZmZlci0+c2tiICE9IE5VTEwpCisJCQkJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlci0+c2tiKTsKKwkJCX0KKwkJCXZmcmVlKHJjdl9kZXNjLT5yeF9idWZfYXJyKTsKKwkJfQorCX0KKworCXZmcmVlKGFkYXB0ZXItPmNtZF9idWZfYXJyKTsKKwlrZnJlZShhZGFwdGVyLT5vcHMpOworCWtmcmVlKGFkYXB0ZXIpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYSBuZXR3b3JrIGludGVyZmFjZSBpcyBtYWRlIGFjdGl2ZQorICogQHJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgbmV0eGVuX25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCWludCBlcnIgPSAwOworCWludCBjdHgsIHJpbmc7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMpIHsKKwkJZXJyID0gbmV0eGVuX2luaXRfZmlybXdhcmUoYWRhcHRlcik7CisJCWlmIChlcnIgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaW5pdCBmaXJtd2FyZVxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQluZXR4ZW5fbmljX2ZsYXNoX3ByaW50KGFkYXB0ZXIpOworCisJCS8qIHNldHVwIGFsbCB0aGUgcmVzb3VyY2VzIGZvciB0aGUgUGhhbnRvbS4uLiAqLworCQkvKiB0aGlzIGluY2x1ZGUgdGhlIGRlc2NyaXB0b3JzIGZvciByY3YsIHR4LCBhbmQgc3RhdHVzICovCisJCW5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CisJCWVyciA9IG5ldHhlbl9uaWNfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIGluIHNldHRpbmcgaHcgcmVzb3VyY2VzOiVkXG4iLAorCQkJICAgICAgIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWlmIChhZGFwdGVyLT5vcHMtPmluaXRfcG9ydAorCQkgICAgJiYgYWRhcHRlci0+b3BzLT5pbml0X3BvcnQoYWRhcHRlciwgcG9ydC0+cG9ydG51bSkgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKKwkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBwb3J0LT5wb3J0bnVtKTsKKwkJCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlmIChhZGFwdGVyLT5vcHMtPmluaXRfbml1KQorCQkJYWRhcHRlci0+b3BzLT5pbml0X25pdShhZGFwdGVyKTsKKwkJZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKKwkJCWZvciAocmluZyA9IDA7IHJpbmcgPCBOVU1fUkNWX0RFU0NfUklOR1M7IHJpbmcrKykKKwkJCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIGN0eCwgcmluZyk7CisJCX0KKwkJYWRhcHRlci0+aXNfdXAgPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQzsKKwl9CisJYWRhcHRlci0+YWN0aXZlX3BvcnRzKys7CisJaWYgKGFkYXB0ZXItPmFjdGl2ZV9wb3J0cyA9PSAxKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPmFody5wZGV2LT5pcnEsICZuZXR4ZW5faW50ciwKKwkJCQkgIFNBX1NISVJRIHwgU0FfU0FNUExFX1JBTkRPTSwgbmV0ZGV2LT5uYW1lLAorCQkJCSAgYWRhcHRlcik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOworCQkJYWRhcHRlci0+YWN0aXZlX3BvcnRzLS07CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWFkYXB0ZXItPmlycSA9IGFkYXB0ZXItPmFody5wZGV2LT5pcnE7CisJCWlmICghYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoKQorCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwkJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOworCX0KKworCS8qIERvbmUgaGVyZSBhZ2FpbiBzbyB0aGF0IGV2ZW4gaWYgcGhhbnRvbSBzdyBvdmVyd3JvdGUgaXQsCisJICogd2Ugc2V0IGl0ICovCisJaWYgKGFkYXB0ZXItPm9wcy0+bWFjYWRkcl9zZXQpCisJCWFkYXB0ZXItPm9wcy0+bWFjYWRkcl9zZXQocG9ydCwgbmV0ZGV2LT5kZXZfYWRkcik7CisJbmV0eGVuX25pY19zZXRfbGlua19wYXJhbWV0ZXJzKHBvcnQpOworCisJbmV0eGVuX25pY19zZXRfbXVsdGkobmV0ZGV2KTsKKwlpZiAoIWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCkKKwkJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorICogbmV0eGVuX25pY19jbG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UgZW50cnkgcG9pbnQKKyAqLworc3RhdGljIGludCBuZXR4ZW5fbmljX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCWludCBpLCBqOworCXN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciAqY21kX2J1ZmY7CisJc3RydWN0IG5ldHhlbl9za2JfZnJhZyAqYnVmZnJhZzsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJYWRhcHRlci0+YWN0aXZlX3BvcnRzLS07CisKKwlpZiAoIWFkYXB0ZXItPmFjdGl2ZV9wb3J0cykgeworCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOworCQlpZiAoYWRhcHRlci0+aXJxKQorCQkJZnJlZV9pcnEoYWRhcHRlci0+aXJxLCBhZGFwdGVyKTsKKwkJY21kX2J1ZmYgPSBhZGFwdGVyLT5jbWRfYnVmX2FycjsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OyBpKyspIHsKKwkJCWJ1ZmZyYWcgPSBjbWRfYnVmZi0+ZnJhZ19hcnJheTsKKwkJCWlmIChidWZmcmFnLT5kbWEpIHsKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHBvcnQtPnBkZXYsIGJ1ZmZyYWctPmRtYSwKKwkJCQkJCSBidWZmcmFnLT5sZW5ndGgsCisJCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJYnVmZnJhZy0+ZG1hID0gKHU2NCkgTlVMTDsKKwkJCX0KKwkJCWZvciAoaiA9IDA7IGogPCBjbWRfYnVmZi0+ZnJhZ19jb3VudDsgaisrKSB7CisJCQkJYnVmZnJhZysrOworCQkJCWlmIChidWZmcmFnLT5kbWEpIHsKKwkJCQkJcGNpX3VubWFwX3BhZ2UocG9ydC0+cGRldiwKKwkJCQkJCSAgICAgICBidWZmcmFnLT5kbWEsCisJCQkJCQkgICAgICAgYnVmZnJhZy0+bGVuZ3RoLAorCQkJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQlidWZmcmFnLT5kbWEgPSAodTY0KSBOVUxMOworCQkJCX0KKwkJCX0KKwkJCS8qIEZyZWUgdGhlIHNrYiB3ZSByZWNlaXZlZCBpbiBuZXR4ZW5fbmljX3htaXRfZnJhbWUgKi8KKwkJCWlmIChjbWRfYnVmZi0+c2tiKSB7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoY21kX2J1ZmYtPnNrYik7CisJCQkJY21kX2J1ZmYtPnNrYiA9IE5VTEw7CisJCQl9CisJCQljbWRfYnVmZisrOworCQl9CisJCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25pY194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCXN0cnVjdCBuZXR4ZW5faGFyZHdhcmVfY29udGV4dCAqaHcgPSAmYWRhcHRlci0+YWh3OworCXVuc2lnbmVkIGludCBmaXJzdF9zZWdfbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgKmJ1ZmZyYWc7CisJdW5zaWduZWQgaW50IGk7CisKKwl1MzIgcHJvZHVjZXIgPSAwOworCXUzMiBzYXZlZF9wcm9kdWNlciA9IDA7CisJc3RydWN0IGNtZF9kZXNjX3R5cGUwICpod2Rlc2M7CisJaW50IGs7CisJc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyICpwYnVmID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdHJpZXMgPSAwOworCXN0YXRpYyBpbnQgZHJvcHBlZF9wYWNrZXQgPSAwOworCWludCBmcmFnX2NvdW50OworCXUzMiBsb2NhbF9wcm9kdWNlciA9IDA7CisJdTMyIG1heF90eF9kZXNjX2NvdW50ID0gMDsKKwl1MzIgbGFzdF9jbWRfY29uc3VtZXIgPSAwOworCWludCBub19vZl9kZXNjOworCisJcG9ydC0+c3RhdHMueG1pdGNhbGxlZCsrOworCWZyYWdfY291bnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKworCWlmICh1bmxpa2VseShza2ItPmxlbiA8PSAwKSkgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlwb3J0LT5zdGF0cy5iYWRza2JsZW4rKzsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAoZnJhZ19jb3VudCA+IE1BWF9CVUZGRVJTX1BFUl9DTUQpIHsKKwkJcHJpbnRrKCIlczogJXMgbmV0eGVuX25pY194bWl0X2ZyYW1lOiBmcmFnX2NvdW50ICglZCkiCisJCSAgICAgICAidG9vIGxhcmdlLCBjYW4gaGFuZGxlIG9ubHkgJWQgZnJhZ3NcbiIsCisJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBuZXRkZXYtPm5hbWUsCisJCSAgICAgICBmcmFnX2NvdW50LCBNQVhfQlVGRkVSU19QRVJfQ01EKTsKKwkJcG9ydC0+c3RhdHMudHhkcm9wcGVkKys7CisJCWlmICgoKytkcm9wcGVkX3BhY2tldCAmIDB4ZmYpID09IDB4ZmYpCisJCQlwcmludGsoIiVzOiAlcyBkcm9wcHBlZCBwYWNrZXRzID0gJWRcbiIsCisJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lLAorCQkJICAgICAgIGRyb3BwZWRfcGFja2V0KTsKKworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCS8qCisJICogRXZlcnl0aGluZyBpcyBzZXQgdXAuIE5vdywgd2UganVzdCBuZWVkIHRvIHRyYW5zbWl0IGl0IG91dC4KKwkgKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBjb3B5IHRoZSBjb250ZW50cyBvZiBidWZmZXIgb3ZlciB0bworCSAqIHJpZ2h0IHBsYWNlLiBMYXRlciBvbiwgdGhpcyBjYW4gYmUgb3B0aW1pemVkIG91dCBieSBkZS1jb3VwbGluZyB0aGUKKwkgKiBwcm9kdWNlciBpbmRleCBmcm9tIHRoZSBidWZmZXIgaW5kZXguCisJICovCisgICAgICByZXRyeV9nZXR0aW5nX3dpbmRvdzoKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPnR4X2xvY2spOworCWlmIChhZGFwdGVyLT50b3RhbF90aHJlYWRzID09IE1BWF9YTUlUX1BST0RVQ0VSUykgeworCQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7CisJCS8qCisJCSAqIFlpZWxkIENQVQorCQkgKi8KKwkJaWYgKCFpbl9hdG9taWMoKSkKKwkJCXNjaGVkdWxlKCk7CisJCWVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCisJCQkJY3B1X3JlbGF4KCk7CS8qVGhpcyBhIG5vcCBpbnN0ciBvbiBpMzg2ICovCisJCX0KKwkJZ290byByZXRyeV9nZXR0aW5nX3dpbmRvdzsKKwl9CisJbG9jYWxfcHJvZHVjZXIgPSBhZGFwdGVyLT5jbWRfcHJvZHVjZXI7CisJLyogVGhlcmUgNCBmcmFnbWVudHMgcGVyIGRlc2NyaXB0b3IgKi8KKwlub19vZl9kZXNjID0gKGZyYWdfY291bnQgKyAzKSA+PiAyOworCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pIHsKKwkJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPiAwKSB7CisKKwkJCW5vX29mX2Rlc2MrKzsKKwkJCWlmICgoKHNrYi0+bmguaXBoKS0+aWhsICogc2l6ZW9mKHUzMikpICsKKwkJCSAgICAoKHNrYi0+aC50aCktPmRvZmYgKiBzaXplb2YodTMyKSkgKworCQkJICAgIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSA+CisJCQkgICAgKHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApIC0gTkVUX0lQX0FMSUdOKSkgeworCQkJCW5vX29mX2Rlc2MrKzsKKwkJCX0KKwkJfQorCX0KKwlrID0gYWRhcHRlci0+Y21kX3Byb2R1Y2VyOworCW1heF90eF9kZXNjX2NvdW50ID0gYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQ7CisJbGFzdF9jbWRfY29uc3VtZXIgPSBhZGFwdGVyLT5sYXN0X2NtZF9jb25zdW1lcjsKKwlpZiAoKGsgKyBub19vZl9kZXNjKSA+PQorCSAgICAoKGxhc3RfY21kX2NvbnN1bWVyIDw9IGspID8gbGFzdF9jbWRfY29uc3VtZXIgKyBtYXhfdHhfZGVzY19jb3VudCA6CisJICAgICBsYXN0X2NtZF9jb25zdW1lcikpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnR4X2xvY2spOworCQlpZiAodHJpZXMgPT0gMCkgeworCQkJbG9jYWxfYmhfZGlzYWJsZSgpOworCQkJbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcoKHVuc2lnbmVkIGxvbmcpYWRhcHRlcik7CisJCQlsb2NhbF9iaF9lbmFibGUoKTsKKwkJCSsrdHJpZXM7CisJCQlnb3RvIHJldHJ5X2dldHRpbmdfd2luZG93OworCQl9IGVsc2UgeworCQkJcG9ydC0+c3RhdHMubm9jbWRkZXNjcmlwdG9yKys7CisJCQlEUFJJTlRLKEVSUiwgIk5vIGNvbW1hbmQgZGVzY3JpcHRvcnMgYXZhaWxhYmxlLCIKKwkJCQkiIHByb2R1Y2VyID0gJWQsIGNvbnN1bWVyID0gJWQgY291bnQ9JWxsdSwiCisJCQkJIiBkcm9wcGluZyBwYWNrZXRcbiIsIHByb2R1Y2VyLAorCQkJCWFkYXB0ZXItPmxhc3RfY21kX2NvbnN1bWVyLAorCQkJCXBvcnQtPnN0YXRzLm5vY21kZGVzY3JpcHRvcik7CisKKwkJCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCQlwb3J0LT5mbGFncyB8PSBORVRYRU5fTkVUREVWX1NUQVRVUzsKKwkJCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfQorCX0KKwlrID0gZ2V0X2luZGV4X3JhbmdlKGssIG1heF90eF9kZXNjX2NvdW50LCBub19vZl9kZXNjKTsKKwlhZGFwdGVyLT5jbWRfcHJvZHVjZXIgPSBrOworCWFkYXB0ZXItPnRvdGFsX3RocmVhZHMrKzsKKwlhZGFwdGVyLT5udW1fdGhyZWFkcysrOworCisJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPnR4X2xvY2spOworCS8qIENvcHkgdGhlIGRlc2NyaXB0b3JzIGludG8gdGhlIGhhcmR3YXJlICAgICovCisJcHJvZHVjZXIgPSBsb2NhbF9wcm9kdWNlcjsKKwlzYXZlZF9wcm9kdWNlciA9IHByb2R1Y2VyOworCWh3ZGVzYyA9ICZody0+Y21kX2Rlc2NfaGVhZFtwcm9kdWNlcl07CisJbWVtc2V0KGh3ZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOworCS8qIFRha2Ugc2tiLT5kYXRhIGl0c2VsZiAqLworCXBidWYgPSAmYWRhcHRlci0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOworCWlmICgobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAmJiBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID4gMCkgeworCQlwYnVmLT5tc3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOworCQlod2Rlc2MtPm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJfSBlbHNlIHsKKwkJcGJ1Zi0+bXNzID0gMDsKKwkJaHdkZXNjLT5tc3MgPSAwOworCX0KKwlwYnVmLT5ub19vZl9kZXNjcmlwdG9ycyA9IG5vX29mX2Rlc2M7CisJcGJ1Zi0+dG90YWxfbGVuZ3RoID0gc2tiLT5sZW47CisJcGJ1Zi0+c2tiID0gc2tiOworCXBidWYtPmNtZCA9IFRYX0VUSEVSX1BLVDsKKwlwYnVmLT5mcmFnX2NvdW50ID0gZnJhZ19jb3VudDsKKwlwYnVmLT5wb3J0ID0gcG9ydC0+cG9ydG51bTsKKwlidWZmcmFnID0gJnBidWYtPmZyYWdfYXJyYXlbMF07CisJYnVmZnJhZy0+ZG1hID0gcGNpX21hcF9zaW5nbGUocG9ydC0+cGRldiwgc2tiLT5kYXRhLCBmaXJzdF9zZWdfbGVuLAorCQkJCSAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCWJ1ZmZyYWctPmxlbmd0aCA9IGZpcnN0X3NlZ19sZW47CisJQ01EX0RFU0NfVE9UQUxfTEVOR1RIX1dSVChod2Rlc2MsIHNrYi0+bGVuKTsKKwlod2Rlc2MtPm51bV9vZl9idWZmZXJzID0gZnJhZ19jb3VudDsKKwlod2Rlc2MtPm9wY29kZSA9IFRYX0VUSEVSX1BLVDsKKworCUNNRF9ERVNDX1BPUlRfV1JUKGh3ZGVzYywgcG9ydC0+cG9ydG51bSk7CisJaHdkZXNjLT5idWZmZXIxX2xlbmd0aCA9IGNwdV90b19sZTE2KGZpcnN0X3NlZ19sZW4pOworCWh3ZGVzYy0+YWRkcl9idWZmZXIxID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKKworCWZvciAoaSA9IDEsIGsgPSAxOyBpIDwgZnJhZ19jb3VudDsgaSsrLCBrKyspIHsKKwkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKwkJaW50IGxlbiwgdGVtcF9sZW47CisJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCQlkbWFfYWRkcl90IHRlbXBfZG1hOworCisJCS8qIG1vdmUgdG8gbmV4dCBkZXNjLiBpZiB0aGVyZSBpcyBhIG5lZWQgKi8KKwkJaWYgKChpICYgMHgzKSA9PSAwKSB7CisJCQlrID0gMDsKKwkJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsCisJCQkJCQkgIGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJCWh3ZGVzYyA9ICZody0+Y21kX2Rlc2NfaGVhZFtwcm9kdWNlcl07CisJCQltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CisJCX0KKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXTsKKwkJbGVuID0gZnJhZy0+c2l6ZTsKKwkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisKKwkJdGVtcF9sZW4gPSBsZW47CisJCXRlbXBfZG1hID0gcGNpX21hcF9wYWdlKHBvcnQtPnBkZXYsIGZyYWctPnBhZ2UsIG9mZnNldCwKKwkJCQkJbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlidWZmcmFnKys7CisJCWJ1ZmZyYWctPmRtYSA9IHRlbXBfZG1hOworCQlidWZmcmFnLT5sZW5ndGggPSB0ZW1wX2xlbjsKKworCQlEUFJJTlRLKElORk8sICJmb3IgbG9vcC4gaT0lZCBrPSVkXG4iLCBpLCBrKTsKKwkJc3dpdGNoIChrKSB7CisJCWNhc2UgMDoKKwkJCWh3ZGVzYy0+YnVmZmVyMV9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CisJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlod2Rlc2MtPmJ1ZmZlcjJfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOworCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjIgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaHdkZXNjLT5idWZmZXIzX2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWh3ZGVzYy0+YnVmZmVyNF9sZW5ndGggPSB0ZW1wX2xlbjsKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXI0ID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOworCQkJYnJlYWs7CisJCX0KKwkJZnJhZysrOworCX0KKwlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBhZGFwdGVyLT5tYXhfdHhfZGVzY19jb3VudCk7CisKKwkvKiBtaWdodCBjaGFuZ2Ugb3Bjb2RlIHRvIFRYX1RDUF9MU08gKi8KKwluZXR4ZW5fdHNvX2NoZWNrKGFkYXB0ZXIsICZody0+Y21kX2Rlc2NfaGVhZFtzYXZlZF9wcm9kdWNlcl0sIHNrYik7CisKKwkvKiBGb3IgTFNPLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIE1BQy9JUC9UQ1AgaGVhZGVycyBpbnRvCisJICogdGhlIGRlc2NyaXB0b3IgcmluZworCSAqLworCWlmIChody0+Y21kX2Rlc2NfaGVhZFtzYXZlZF9wcm9kdWNlcl0ub3Bjb2RlID09IFRYX1RDUF9MU08pIHsKKwkJaW50IGhkcl9sZW4sIGZpcnN0X2hkcl9sZW4sIG1vcmVfaGRyOworCQloZHJfbGVuID0gaHctPmNtZF9kZXNjX2hlYWRbc2F2ZWRfcHJvZHVjZXJdLnRvdGFsX2hkcl9sZW5ndGg7CisJCWlmIChoZHJfbGVuID4gKHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApIC0gTkVUX0lQX0FMSUdOKSkgeworCQkJZmlyc3RfaGRyX2xlbiA9CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSBORVRfSVBfQUxJR047CisJCQltb3JlX2hkciA9IDE7CisJCX0gZWxzZSB7CisJCQlmaXJzdF9oZHJfbGVuID0gaGRyX2xlbjsKKwkJCW1vcmVfaGRyID0gMDsKKwkJfQorCQkvKiBjb3B5IHRoZSBNQUMvSVAvVENQIGhlYWRlcnMgdG8gdGhlIGNtZCBkZXNjcmlwdG9yIGxpc3QgKi8KKwkJaHdkZXNjID0gJmh3LT5jbWRfZGVzY19oZWFkW3Byb2R1Y2VyXTsKKworCQkvKiBjb3B5IHRoZSBmaXJzdCA2NCBieXRlcyAqLworCQltZW1jcHkoKCh2b2lkICopaHdkZXNjKSArIE5FVF9JUF9BTElHTiwKKwkJICAgICAgICh2b2lkICopKHNrYi0+ZGF0YSksIGZpcnN0X2hkcl9sZW4pOworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBtYXhfdHhfZGVzY19jb3VudCk7CisKKwkJaWYgKG1vcmVfaGRyKSB7CisJCQlod2Rlc2MgPSAmaHctPmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdOworCQkJLyogY29weSB0aGUgbmV4dCA2NCBieXRlcyAtIHNob3VsZCBiZSBlbm91Z2ggZXhjZXB0CisJCQkgKiBmb3IgcGF0aG9sb2dpY2FsIGNhc2UKKwkJCSAqLworCQkJbWVtY3B5KCh2b2lkICopaHdkZXNjLCAodm9pZCAqKShza2ItPmRhdGEpICsKKwkJCSAgICAgICBmaXJzdF9oZHJfbGVuLCBoZHJfbGVuIC0gZmlyc3RfaGRyX2xlbik7CisJCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCBtYXhfdHhfZGVzY19jb3VudCk7CisJCX0KKwl9CisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT50eF9sb2NrKTsKKwlwb3J0LT5zdGF0cy50eGJ5dGVzICs9CisJICAgIENNRF9ERVNDX1RPVEFMX0xFTkdUSCgmaHctPmNtZF9kZXNjX2hlYWRbc2F2ZWRfcHJvZHVjZXJdKTsKKwkvKiBDb2RlIHRvIHVwZGF0ZSB0aGUgYWRhcHRlciBjb25zaWRlcmluZyBob3cgbWFueSBwcm9kdWNlciB0aHJlYWRzCisJICAgYXJlIGN1cnJlbnRseSB3b3JraW5nICovCisJaWYgKCgtLWFkYXB0ZXItPm51bV90aHJlYWRzKSA9PSAwKSB7CisJCS8qIFRoaXMgaXMgdGhlIGxhc3QgdGhyZWFkICovCisJCXUzMiBjcmJfcHJvZHVjZXIgPSBhZGFwdGVyLT5jbWRfcHJvZHVjZXI7CisJCXdyaXRlbChjcmJfcHJvZHVjZXIsCisJCSAgICAgICBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVCkpOworCQl3bWIoKTsKKwkJYWRhcHRlci0+dG90YWxfdGhyZWFkcyA9IDA7CisJfSBlbHNlIHsKKwkJdTMyIGNyYl9wcm9kdWNlciA9IDA7CisJCWNyYl9wcm9kdWNlciA9CisJCSAgICByZWFkbChORVRYRU5fQ1JCX05PUk1BTElaRQorCQkJICAoYWRhcHRlciwgQ1JCX0NNRF9QUk9EVUNFUl9PRkZTRVQpKTsKKwkJaWYgKGNyYl9wcm9kdWNlciA9PSBsb2NhbF9wcm9kdWNlcikgeworCQkJY3JiX3Byb2R1Y2VyID0gZ2V0X2luZGV4X3JhbmdlKGNyYl9wcm9kdWNlciwKKwkJCQkJCSAgICAgICBtYXhfdHhfZGVzY19jb3VudCwKKwkJCQkJCSAgICAgICBub19vZl9kZXNjKTsKKwkJCXdyaXRlbChjcmJfcHJvZHVjZXIsCisJCQkgICAgICAgTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwKKwkJCQkJCSAgICBDUkJfQ01EX1BST0RVQ0VSX09GRlNFVCkpOworCQkJd21iKCk7CisJCX0KKwl9CisKKwlwb3J0LT5zdGF0cy54bWl0ZmluaXNoZWQrKzsKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+dHhfbG9jayk7CisKKwluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCURQUklOVEsoSU5GTywgIndyb3RlIENNRCBwcm9kdWNlciAleCB0byBwaGFudG9tXG4iLCBwcm9kdWNlcik7CisKKwlEUFJJTlRLKElORk8sICJEb25lLiBTZW5kXG4iKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBuZXR4ZW5fd2F0Y2hkb2codW5zaWduZWQgbG9uZyB2KQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKil2OworCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOworfQorCitzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IChzdHJ1Y3QgbmV0eGVuX3BvcnQgKiluZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisKKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT50eF90aW1lb3V0X3Rhc2spOworfQorCitzdGF0aWMgdm9pZCBuZXR4ZW5fdHhfdGltZW91dF90YXNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0ID0gKHN0cnVjdCBuZXR4ZW5fcG9ydCAqKW5ldGRldl9wcml2KG5ldGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByaW50ayhLRVJOX0VSUiAiJXMgJXM6IHRyYW5zbWl0IHRpbWVvdXQsIHJlc2V0dGluZy5cbiIsCisJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+YWRhcHRlci0+bG9jaywgZmxhZ3MpOworCW5ldHhlbl9uaWNfY2xvc2UobmV0ZGV2KTsKKwluZXR4ZW5fbmljX29wZW4obmV0ZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5hZGFwdGVyLT5sb2NrLCBmbGFncyk7CisJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworfQorCitzdGF0aWMgaW50CituZXR4ZW5faGFuZGxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJdTMyIHJldCA9IDA7CisKKwlEUFJJTlRLKElORk8sICJFbnRlcmVkIGhhbmRsZSBJU1JcbiIpOworCisJYWRhcHRlci0+c3RhdHMuaW50cysrOworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKSkgeworCQlpbnQgY291bnQgPSAwOworCQl1MzIgbWFzazsKKwkJbmV0eGVuX25pY19kaXNhYmxlX2ludChhZGFwdGVyKTsKKwkJLyogV2luZG93ID0gMCBvciAxICovCisJCWRvIHsKKwkJCXdyaXRlbCgweGZmZmZmZmZmLCBQQ0lfT0ZGU0VUX1NFQ09ORF9SQU5HRShhZGFwdGVyLAorCQkJCQkJSVNSX0lOVF9UQVJHRVRfU1RBVFVTKSk7CisJCQltYXNrID0gcmVhZGwocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKSk7CisJCX0gd2hpbGUgKCgobWFzayAmIDB4ODApICE9IDApICYmICgrK2NvdW50IDwgMzIpKTsKKwkJaWYgKChtYXNrICYgMHg4MCkgIT0gMCkKKwkJCXByaW50aygiQ291bGQgbm90IGRpc2FibGUgaW50ZXJydXB0IGNvbXBsZXRlbHlcbiIpOworCisJfQorCWFkYXB0ZXItPnN0YXRzLmhvc3RpbnRzKys7CisKKwlpZiAobmV0eGVuX25pY19yeF9oYXNfd29yayhhZGFwdGVyKSB8fCBuZXR4ZW5fbmljX3R4X2hhc193b3JrKGFkYXB0ZXIpKSB7CisJCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5ldGRldikpIHsKKwkJCS8qCisJCQkgKiBJbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGRpc2FibGVkLgorCQkJICovCisJCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5ldGRldik7CisJCX0gZWxzZSB7CisJCQlzdGF0aWMgdW5zaWduZWQgaW50IGludGNvdW50ID0gMDsKKwkJCWlmICgoKytpbnRjb3VudCAmIDB4ZmZmKSA9PSAweGZmZikKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiAlcyBpbnRlcnJ1cHQgJWQgd2hpbGUgaW4gcG9sbFxuIiwKKwkJCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lLAorCQkJCSAgICAgICBpbnRjb3VudCk7CisJCX0KKwkJcmV0ID0gMTsKKwl9CisKKwlpZiAocmV0ID09IDApIHsKKwkJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBuZXR4ZW5faW50ciAtIEludGVycnVwdCBIYW5kbGVyCisgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKiBkYXRhIHBvaW50cyB0byBhZGFwdGVyIHN0dWN0dXJlICh3aGljaCBtYXkgYmUgaGFuZGxpbmcgbW9yZSB0aGFuIDEgcG9ydAorICovCitpcnFyZXR1cm5fdCBuZXR4ZW5faW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseSghaXJxKSkgeworCQlyZXR1cm4gSVJRX05PTkU7CS8qIE5vdCBvdXIgaW50ZXJydXB0ICovCisJfQorCisJYWRhcHRlciA9IChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKilkYXRhOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5haHcubWF4X3BvcnRzOyBpKyspIHsKKwkJcG9ydCA9IGFkYXB0ZXItPnBvcnRbaV07CisJCW5ldGRldiA9IHBvcnQtPm5ldGRldjsKKworCQkvKiBwcm9jZXNzIG91ciBzdGF0dXMgcXVldWUgKGZvciBhbGwgNCBwb3J0cykgKi8KKwkJbmV0eGVuX2hhbmRsZV9pbnQoYWRhcHRlciwgbmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbmV0eGVuX25pY19wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCAqYnVkZ2V0KQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IChzdHJ1Y3QgbmV0eGVuX3BvcnQgKiluZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJaW50IHdvcmtfdG9fZG8gPSBtaW4oKmJ1ZGdldCwgbmV0ZGV2LT5xdW90YSk7CisJaW50IGRvbmUgPSAxOworCWludCBjdHg7CisJaW50IHRoaXNfd29ya19kb25lOworCisJRFBSSU5USyhJTkZPLCAicG9sbGluZyBmb3IgJWQgZGVzY3JpcHRvcnNcbiIsICpidWRnZXQpOworCXBvcnQtPnN0YXRzLnBvbGxlZCsrOworCisJYWRhcHRlci0+d29ya19kb25lID0gMDsKKwlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgeworCQkvKgorCQkgKiBGYWlybmVzcyBpc3N1ZS4gVGhpcyB3aWxsIGdpdmUgdW5kdWUgd2VpZ2h0IHRvIHRoZQorCQkgKiByZWNlaXZlIGNvbnRleHQgMC4KKwkJICovCisKKwkJLyoKKwkJICogVG8gYXZvaWQgc3RhcnZhdGlvbiwgd2UgZ2l2ZSBlYWNoIG9mIG91ciByZWNlaXZlcnMsCisJCSAqIGEgZnJhY3Rpb24gb2YgdGhlIHF1b3RhLiBTb21ldGltZXMsIGl0IG1pZ2h0IGhhcHBlbiB0aGF0IHdlCisJCSAqIGhhdmUgZW5vdWdoIHF1b3RhIHRvIHByb2Nlc3MgZXZlcnkgcGFja2V0LCBidXQgc2luY2UgYWxsIHRoZQorCQkgKiBwYWNrZXRzIGFyZSBvbiBvbmUgY29udGV4dCwgaXQgZ2V0cyBvbmx5IGhhbGYgb2YgdGhlIHF1b3RhLAorCQkgKiBhbmQgZW5kcyB1cCBub3QgcHJvY2Vzc2luZyBpdC4KKwkJICovCisJCXRoaXNfd29ya19kb25lID0gbmV0eGVuX3Byb2Nlc3NfcmN2X3JpbmcoYWRhcHRlciwgY3R4LAorCQkJCQkJCSB3b3JrX3RvX2RvIC8KKwkJCQkJCQkgTUFYX1JDVl9DVFgpOworCQlhZGFwdGVyLT53b3JrX2RvbmUgKz0gdGhpc193b3JrX2RvbmU7CisJfQorCisJbmV0ZGV2LT5xdW90YSAtPSBhZGFwdGVyLT53b3JrX2RvbmU7CisJKmJ1ZGdldCAtPSBhZGFwdGVyLT53b3JrX2RvbmU7CisKKwlpZiAoYWRhcHRlci0+d29ya19kb25lID49IHdvcmtfdG9fZG8KKwkgICAgJiYgbmV0eGVuX25pY19yeF9oYXNfd29yayhhZGFwdGVyKSAhPSAwKQorCQlkb25lID0gMDsKKworCW5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKCh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOworCisJRFBSSU5USyhJTkZPLCAibmV3IHdvcmtfZG9uZTogJWQgd29ya190b19kbzogJWRcbiIsCisJCWFkYXB0ZXItPndvcmtfZG9uZSwgd29ya190b19kbyk7CisJaWYgKGRvbmUpIHsKKwkJbmV0aWZfcnhfY29tcGxldGUobmV0ZGV2KTsKKwkJbmV0eGVuX25pY19lbmFibGVfaW50KGFkYXB0ZXIpOworCX0KKworCXJldHVybiAhZG9uZTsKK30KKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCitzdGF0aWMgdm9pZCBuZXR4ZW5fbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlkaXNhYmxlX2lycShhZGFwdGVyLT5pcnEpOworCW5ldHhlbl9pbnRyKGFkYXB0ZXItPmlycSwgYWRhcHRlcik7CisJZW5hYmxlX2lycShhZGFwdGVyLT5pcnEpOworfQorI2VuZGlmCisvKgorICogbmV0eGVuX25pY19pb2N0bCAoKSAgICBXZSBwcm92aWRlIHRoZSB0Y2wvcGhhbm1vbiBzdXBwb3J0IHRocm91Z2ggdGhlc2UKKyAqIGlvY3Rscy4KKyAqLworc3RhdGljIGludAorbmV0eGVuX25pY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIG5yX2J5dGVzID0gMDsKKwlzdHJ1Y3QgbmV0eGVuX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJY2hhciBkZXZfbmFtZVtORVRYRU5fTklDX05BTUVfTEVOXTsKKworCURQUklOVEsoSU5GTywgImRvaW5nIGlvY3RsIGZvciAlc1xuIiwgbmV0ZGV2LT5uYW1lKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkVUWEVOX05JQ19DTUQ6CisJCWVyciA9IG5ldHhlbl9uaWNfZG9faW9jdGwoYWRhcHRlciwgKHZvaWQgKilpZnItPmlmcl9kYXRhLCBwb3J0KTsKKwkJYnJlYWs7CisKKwljYXNlIE5FVFhFTl9OSUNfTkFNRToKKwkJRFBSSU5USyhJTkZPLCAiaW9jdGwgY21kIGZvciBOZXRYZW5cbiIpOworCQlpZiAoaWZyLT5pZnJfZGF0YSkgeworCQkJc3ByaW50ZihkZXZfbmFtZSwgIiVzLSVkIiwgTkVUWEVOX05JQ19OQU1FX1JTUCwKKwkJCQlwb3J0LT5wb3J0bnVtKTsKKwkJCW5yX2J5dGVzID0gY29weV90b191c2VyKChjaGFyICopaWZyLT5pZnJfZGF0YSwgZGV2X25hbWUsCisJCQkJCQlORVRYRU5fTklDX05BTUVfTEVOKTsKKwkJCWlmIChucl9ieXRlcykKKwkJCQllcnIgPSAtRUlPOworCisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlEUFJJTlRLKElORk8sICJpb2N0bCBjbWQgJXggbm90IHN1cHBvcnRlZFxuIiwgY21kKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXR4ZW5fZHJpdmVyID0geworCS5uYW1lID0gbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUgPSBuZXR4ZW5fcGNpX3RibCwKKwkucHJvYmUgPSBuZXR4ZW5fbmljX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChuZXR4ZW5fbmljX3JlbW92ZSkKK307CisKKy8qIERyaXZlciBSZWdpc3RyYXRpb24gb24gTmV0WGVuIGNhcmQgICAgKi8KKworc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmbmV0eGVuX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG5ldHhlbl9pbml0X21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZXR4ZW5fZXhpdF9tb2R1bGUodm9pZCkKK3sKKwkvKgorCSAqIFdhaXQgZm9yIHNvbWUgdGltZSB0byBhbGxvdyB0aGUgZG1hIHRvIGRyYWluLCBpZiBhbnkuCisJICovCisJbWRlbGF5KDUpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbmV0eGVuX2RyaXZlcik7Cit9CisKK21vZHVsZV9leGl0KG5ldHhlbl9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTBhMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYwpAQCAtMCwwICsxLDg5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKiAKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIAorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICAgIGluZm9AbmV0eGVuLmNvbQorICogTmV0WGVuLAorICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAorICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKgorICoKKyAqIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgTmV0d29yayBJbnRlcmZhY2UgVW5pdCBoL3cgYmxvY2suCisgKgorICovCisKKyNpbmNsdWRlICJuZXR4ZW5fbmljLmgiCisKKyNkZWZpbmUgTkVUWEVOX0dCX01BQ19TT0ZUX1JFU0VUCTB4ODAwMDAwMDAKKyNkZWZpbmUgTkVUWEVOX0dCX01BQ19SRVNFVF9QUk9UX0JMSyAgIDB4MDAwRjAwMDAKKyNkZWZpbmUgTkVUWEVOX0dCX01BQ19FTkFCTEVfVFhfUlggICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgTkVUWEVOX0dCX01BQ19QQVVTRURfRlJNUyAgICAgIDB4MDAwMDAwMjAKKworc3RhdGljIGxvbmcgcGh5X2xvY2tfdGltZW91dCA9IDEwMDAwMDAwMDsKKworc3RhdGljIGlubGluZSBpbnQgcGh5X2xvY2sodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgZG9uZSA9IDAsIHRpbWVvdXQgPSAwOworCisJd2hpbGUgKCFkb25lKSB7CisJCWRvbmUgPSByZWFkbCgodm9pZCBfX2lvbWVtICopTkVUWEVOX1BDSUVfUkVHKFBDSUVfU0VNM19MT0NLKSk7CisJCWlmIChkb25lID09IDEpCisJCQlicmVhazsKKwkJaWYgKHRpbWVvdXQgPj0gcGh5X2xvY2tfdGltZW91dCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCXRpbWVvdXQrKzsKKwkJaWYgKCFpbl9hdG9taWMoKSkKKwkJCXNjaGVkdWxlKCk7CisJCWVsc2UgeworCQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspCisJCQkJY3B1X3JlbGF4KCk7CisJCX0KKwl9CisKKwl3cml0ZWwoTkVUWEVOX1BIWV9MT0NLX0lELCAodm9pZCBfX2lvbWVtICopUEhZX0xPQ0tfRFJJVkVSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGh5X3VubG9jayh2b2lkKQoreworCXJlYWRsKCh2b2lkIF9faW9tZW0gKilORVRYRU5fUENJRV9SRUcoUENJRV9TRU0zX1VOTE9DSykpOworCXJldHVybiAwOworfQorCisvKiAKKyAqIG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkIC0gcmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIEdiRSBQSFkgdmlhCisgKiBtaWkgbWFuYWdlbWVudCBpbnRlcmZhY2UuCisgKgorICogTm90ZTogVGhlIE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSBnb2VzIHRocm91Z2ggcG9ydCAwLgorICoJSW5kaXZpZHVhbCBwaHlzIGFyZSBhZGRyZXNzZWQgYXMgZm9sbG93czoKKyAqIEBwYXJhbSBwaHkgIFsxNTo4XSAgcGh5IGlkCisgKiBAcGFyYW0gcmVnICBbNzowXSAgIHJlZ2lzdGVyIG51bWJlcgorICoKKyAqIEByZXR1cm5zICAwIG9uIHN1Y2Nlc3MKKyAqCSAgLTEgb24gZXJyb3IKKyAqCisgKi8KK2ludCBuZXR4ZW5fbml1X2diZV9waHlfcmVhZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGxvbmcgcGh5LAorCQkJICAgIGxvbmcgcmVnLCBfX2xlMzIgKiByZWFkdmFsKQoreworCWxvbmcgdGltZW91dCA9IDA7CisJbG9uZyByZXN1bHQgPSAwOworCWxvbmcgcmVzdG9yZSA9IDA7CisJX19sZTMyIGFkZHJlc3M7CisJX19sZTMyIGNvbW1hbmQ7CisJX19sZTMyIHN0YXR1czsKKwlfX2xlMzIgbWFjX2NmZzA7CisKKwlpZiAocGh5X2xvY2soKSAhPSAwKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIE1JSSBtZ210IGFsbCBnb2VzIHRocm91Z2ggcG9ydCAwIE1BQyBpbnRlcmZhY2UsCisJICogc28gaXQgY2Fubm90IGJlIGluIHJlc2V0CisJICovCisKKwlpZiAobmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLAorCQkJCSAgJm1hY19jZmcwLCA0KSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKG5ldHhlbl9nYl9nZXRfc29mdF9yZXNldChtYWNfY2ZnMCkpIHsKKwkJX19sZTMyIHRlbXA7CisJCXRlbXAgPSAwOworCQluZXR4ZW5fZ2JfdHhfcmVzZXRfcGIodGVtcCk7CisJCW5ldHhlbl9nYl9yeF9yZXNldF9wYih0ZW1wKTsKKwkJbmV0eGVuX2diX3R4X3Jlc2V0X21hYyh0ZW1wKTsKKwkJbmV0eGVuX2diX3J4X3Jlc2V0X21hYyh0ZW1wKTsKKwkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksCisJCQkJCSAgICZ0ZW1wLCA0KSkKKwkJCXJldHVybiAtRUlPOworCQlyZXN0b3JlID0gMTsKKwl9CisKKwlhZGRyZXNzID0gMDsKKwluZXR4ZW5fZ2JfbWlpX21nbXRfcmVnX2FkZHIoYWRkcmVzcywgcmVnKTsKKwluZXR4ZW5fZ2JfbWlpX21nbXRfcGh5X2FkZHIoYWRkcmVzcywgcGh5KTsKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFIoMCksCisJCQkJICAgJmFkZHJlc3MsIDQpKQorCQlyZXR1cm4gLUVJTzsKKwljb21tYW5kID0gMDsJCS8qIHR1cm4gb2ZmIGFueSBwcmlvciBhY3Rpdml0eSAqLworCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwKKwkJCQkgICAmY29tbWFuZCwgNCkpCisJCXJldHVybiAtRUlPOworCS8qIHNlbmQgcmVhZCBjb21tYW5kICovCisJbmV0eGVuX2diX21paV9tZ210X3NldF9yZWFkX2N5Y2xlKGNvbW1hbmQpOworCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwKKwkJCQkgICAmY29tbWFuZCwgNCkpCisJCXJldHVybiAtRUlPOworCisJc3RhdHVzID0gMDsKKwlkbyB7CisJCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwkJCQkJICBORVRYRU5fTklVX0dCX01JSV9NR01UX0lORElDQVRFKDApLAorCQkJCQkgICZzdGF0dXMsIDQpKQorCQkJcmV0dXJuIC1FSU87CisJCXRpbWVvdXQrKzsKKwl9IHdoaWxlICgobmV0eGVuX2dldF9nYl9taWlfbWdtdF9idXN5KHN0YXR1cykKKwkJICB8fCBuZXR4ZW5fZ2V0X2diX21paV9tZ210X25vdHZhbGlkKHN0YXR1cykpCisJCSAmJiAodGltZW91dCsrIDwgTkVUWEVOX05JVV9QSFlfV0FJVE1BWCkpOworCisJaWYgKHRpbWVvdXQgPCBORVRYRU5fTklVX1BIWV9XQUlUTUFYKSB7CisJCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwkJCQkJICBORVRYRU5fTklVX0dCX01JSV9NR01UX1NUQVRVUygwKSwKKwkJCQkJICByZWFkdmFsLCA0KSkKKwkJCXJldHVybiAtRUlPOworCQlyZXN1bHQgPSAwOworCX0gZWxzZQorCQlyZXN1bHQgPSAtMTsKKworCWlmIChyZXN0b3JlKQorCQlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLAorCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwKKwkJCQkJICAgJm1hY19jZmcwLCA0KSkKKwkJCXJldHVybiAtRUlPOworCXBoeV91bmxvY2soKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiAKKyAqIG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZSAtIHdyaXRlIGEgcmVnaXN0ZXIgdG8gdGhlIEdiRSBQSFkgdmlhCisgKiBtaWkgbWFuYWdlbWVudCBpbnRlcmZhY2UuCisgKgorICogTm90ZTogVGhlIE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSBnb2VzIHRocm91Z2ggcG9ydCAwLgorICoJSW5kaXZpZHVhbCBwaHlzIGFyZSBhZGRyZXNzZWQgYXMgZm9sbG93czoKKyAqIEBwYXJhbSBwaHkgICAgICBbMTU6OF0gIHBoeSBpZAorICogQHBhcmFtIHJlZyAgICAgIFs3OjBdICAgcmVnaXN0ZXIgbnVtYmVyCisgKgorICogQHJldHVybnMgIDAgb24gc3VjY2VzcworICoJICAtMSBvbiBlcnJvcgorICoKKyAqLworaW50IG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgIGxvbmcgcGh5LCBsb25nIHJlZywgX19sZTMyIHZhbCkKK3sKKwlsb25nIHRpbWVvdXQgPSAwOworCWxvbmcgcmVzdWx0ID0gMDsKKwlsb25nIHJlc3RvcmUgPSAwOworCV9fbGUzMiBhZGRyZXNzOworCV9fbGUzMiBjb21tYW5kOworCV9fbGUzMiBzdGF0dXM7CisJX19sZTMyIG1hY19jZmcwOworCisJLyoKKwkgKiBNSUkgbWdtdCBhbGwgZ29lcyB0aHJvdWdoIHBvcnQgMCBNQUMgaW50ZXJmYWNlLCBzbyBpdAorCSAqIGNhbm5vdCBiZSBpbiByZXNldAorCSAqLworCisJaWYgKG5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMCgwKSwKKwkJCQkgICZtYWNfY2ZnMCwgNCkpCisJCXJldHVybiAtRUlPOworCWlmIChuZXR4ZW5fZ2JfZ2V0X3NvZnRfcmVzZXQobWFjX2NmZzApKSB7CisJCV9fbGUzMiB0ZW1wOworCQl0ZW1wID0gMDsKKwkJbmV0eGVuX2diX3R4X3Jlc2V0X3BiKHRlbXApOworCQluZXR4ZW5fZ2JfcnhfcmVzZXRfcGIodGVtcCk7CisJCW5ldHhlbl9nYl90eF9yZXNldF9tYWModGVtcCk7CisJCW5ldHhlbl9nYl9yeF9yZXNldF9tYWModGVtcCk7CisKKwkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAoMCksCisJCQkJCSAgICZ0ZW1wLCA0KSkKKwkJCXJldHVybiAtRUlPOworCQlyZXN0b3JlID0gMTsKKwl9CisKKwljb21tYW5kID0gMDsJCS8qIHR1cm4gb2ZmIGFueSBwcmlvciBhY3Rpdml0eSAqLworCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09NTUFORCgwKSwKKwkJCQkgICAmY29tbWFuZCwgNCkpCisJCXJldHVybiAtRUlPOworCisJYWRkcmVzcyA9IDA7CisJbmV0eGVuX2diX21paV9tZ210X3JlZ19hZGRyKGFkZHJlc3MsIHJlZyk7CisJbmV0eGVuX2diX21paV9tZ210X3BoeV9hZGRyKGFkZHJlc3MsIHBoeSk7CisJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSKDApLAorCQkJCSAgICZhZGRyZXNzLCA0KSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01JSV9NR01UX0NUUkwoMCksCisJCQkJICAgJnZhbCwgNCkpCisJCXJldHVybiAtRUlPOworCisJc3RhdHVzID0gMDsKKwlkbyB7CisJCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwKKwkJCQkJICBORVRYRU5fTklVX0dCX01JSV9NR01UX0lORElDQVRFKDApLAorCQkJCQkgICZzdGF0dXMsIDQpKQorCQkJcmV0dXJuIC1FSU87CisJCXRpbWVvdXQrKzsKKwl9IHdoaWxlICgobmV0eGVuX2dldF9nYl9taWlfbWdtdF9idXN5KHN0YXR1cykpCisJCSAmJiAodGltZW91dCsrIDwgTkVUWEVOX05JVV9QSFlfV0FJVE1BWCkpOworCisJaWYgKHRpbWVvdXQgPCBORVRYRU5fTklVX1BIWV9XQUlUTUFYKQorCQlyZXN1bHQgPSAwOworCWVsc2UKKwkJcmVzdWx0ID0gLUVJTzsKKworCS8qIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHBvcnQgMCBNQUMgaW4gY2FzZSB3ZSB0YW1wZXJlZCB3aXRoIGl0ICovCisJaWYgKHJlc3RvcmUpCisJCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsCisJCQkJCSAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKDApLAorCQkJCQkgICAmbWFjX2NmZzAsIDQpKQorCQkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgbmV0eGVuX25pdV94Z2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgaW50IHBvcnQpCit7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfSU5UX01BU0ssIDB4M2YpOworCXJldHVybiAwOworfQorCitpbnQgbmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJIGludCBwb3J0KQoreworCWludCByZXN1bHQgPSAwOworCV9fbGUzMiBlbmFibGUgPSAwOworCW5ldHhlbl9zZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGVuYWJsZSk7CisJbmV0eGVuX3NldF9waHlfaW50X2F1dG9uZWdfY29tcGxldGVkKGVuYWJsZSk7CisJbmV0eGVuX3NldF9waHlfaW50X3NwZWVkX2NoYW5nZWQoZW5hYmxlKTsKKworCWlmICgwICE9CisJICAgIG5ldHhlbl9uaXVfZ2JlX3BoeV93cml0ZShhZGFwdGVyLCBwb3J0LAorCQkJCSAgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0lOVF9FTkFCTEUsCisJCQkJICAgICBlbmFibGUpKQorCQlyZXN1bHQgPSAtRUlPOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IG5ldHhlbl9uaXVfeGdiZV9kaXNhYmxlX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgaW50IHBvcnQpCit7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfSU5UX01BU0ssIDB4N2YpOworCXJldHVybiAwOworfQorCitpbnQgbmV0eGVuX25pdV9nYmVfZGlzYWJsZV9waHlfaW50ZXJydXB0cyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgaW50IHBvcnQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaWYgKDAgIT0KKwkgICAgbmV0eGVuX25pdV9nYmVfcGh5X3dyaXRlKGFkYXB0ZXIsIHBvcnQsCisJCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX0VOQUJMRSwgMCkpCisJCXJlc3VsdCA9IC1FSU87CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgbmV0eGVuX25pdV94Z2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJIGludCBwb3J0KQoreworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0FDVElWRV9JTlQsIC0xKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJaW50IHBvcnQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaWYgKDAgIT0KKwkgICAgbmV0eGVuX25pdV9nYmVfcGh5X3dyaXRlKGFkYXB0ZXIsIHBvcnQsCisJCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX1NUQVRVUywKKwkJCQkgICAgIC1FSU8pKQorCQlyZXN1bHQgPSAtRUlPOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogCisgKiBuZXR4ZW5fbml1X2diZV9zZXRfbWlpX21vZGUtIFNldCAxMC8xMDAgTWJpdCBNb2RlIGZvciBHYkUgTUFDCisgKgorICovCit2b2lkIG5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIGludCBwb3J0LCBsb25nIGVuYWJsZSkKK3sKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9NT0RFLCAweDIpOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwkJCQkgICAgMHg4MDAwMDAwMCk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCQkJCSAgICAweDAwMDBmMDAyNSk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18xKHBvcnQpLAorCQkJCSAgICAweGYxZmYpOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCSAgICBORVRYRU5fTklVX0dCMF9HTUlJX01PREUgKyAocG9ydCA8PCAzKSwgMCk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJICAgIE5FVFhFTl9OSVVfR0IwX01JSV9NT0RFICsgKHBvcnQgPDwgMyksIDEpOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCSAgICAoTkVUWEVOX05JVV9HQjBfSEFMRl9EVVBMRVggKyBwb3J0ICogNCksIDApOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0NPTkZJRyhwb3J0KSwgMHg3KTsKKworCWlmIChlbmFibGUpIHsKKwkJLyogCisJCSAqIERvIE5PVCBlbmFibGUgZmxvdyBjb250cm9sIHVudGlsIGEgc3VpdGFibGUgc29sdXRpb24gZm9yIAorCQkgKiAgc2h1dHRpbmcgZG93biBwYXVzZSBmcmFtZXMgaXMgZm91bmQuIAorCQkgKi8KKwkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJCSAgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwkJCQkJICAgIDB4NSk7CisJfQorCisJaWYgKG5ldHhlbl9uaXVfZ2JlX2VuYWJsZV9waHlfaW50ZXJydXB0cyhhZGFwdGVyLCBwb3J0KSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1IgZW5hYmxpbmcgUEhZIGludGVycnVwdHNcbiIpOworCWlmIChuZXR4ZW5fbml1X2diZV9jbGVhcl9waHlfaW50ZXJydXB0cyhhZGFwdGVyLCBwb3J0KSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1IgY2xlYXJpbmcgUEhZIGludGVycnVwdHNcbiIpOworfQorCisvKiAKKyAqIG5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUtIFNldCBHYkUgTW9kZSBmb3IgR2JFIE1BQworICovCit2b2lkIG5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgaW50IHBvcnQsIGxvbmcgZW5hYmxlKQoreworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX01PREUsIDB4Mik7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCQkJCSAgICAweDgwMDAwMDAwKTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCisJCQkJICAgIDB4MDAwMGYwMDI1KTsKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCisJCQkJICAgIDB4ZjJmZik7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJICAgIE5FVFhFTl9OSVVfR0IwX01JSV9NT0RFICsgKHBvcnQgPDwgMyksIDApOworCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCSAgICBORVRYRU5fTklVX0dCMF9HTUlJX01PREUgKyAocG9ydCA8PCAzKSwgMSk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJICAgIChORVRYRU5fTklVX0dCMF9IQUxGX0RVUExFWCArIHBvcnQgKiA0KSwgMCk7CisJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09ORklHKHBvcnQpLCAweDcpOworCisJaWYgKGVuYWJsZSkgeworCQkvKiAKKwkJICogRG8gTk9UIGVuYWJsZSBmbG93IGNvbnRyb2wgdW50aWwgYSBzdWl0YWJsZSBzb2x1dGlvbiBmb3IgCisJCSAqICBzaHV0dGluZyBkb3duIHBhdXNlIGZyYW1lcyBpcyBmb3VuZC4gCisJCSAqLworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCQkJCQkgICAgMHg1KTsKKwl9CisKKwlpZiAobmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIsIHBvcnQpKQorCQlwcmludGsoS0VSTl9FUlIgUEZYICJFUlJPUiBlbmFibGluZyBQSFkgaW50ZXJydXB0c1xuIik7CisJaWYgKG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIsIHBvcnQpKQorCQlwcmludGsoS0VSTl9FUlIgUEZYICJFUlJPUiBjbGVhcmluZyBQSFkgaW50ZXJydXB0c1xuIik7Cit9CisKK2ludCBuZXR4ZW5fbml1X2diZV9pbml0X3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlfX2xlMzIgc3RhdHVzOworCWlmIChhZGFwdGVyLT5vcHMtPmRpc2FibGVfcGh5X2ludGVycnVwdHMpCisJCWFkYXB0ZXItPm9wcy0+ZGlzYWJsZV9waHlfaW50ZXJydXB0cyhhZGFwdGVyLCBwb3J0KTsKKwltZGVsYXkoMik7CisKKwlpZiAoMCA9PQorCSAgICBuZXR4ZW5fbml1X2diZV9waHlfcmVhZChhZGFwdGVyLCBwb3J0LAorCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKKwkJCQkgICAgKF9fbGUzMiAqKSAmIHN0YXR1cykpIHsKKwkJaWYgKG5ldHhlbl9nZXRfcGh5X2xpbmsoc3RhdHVzKSkgeworCQkJaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMikgeworCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9nbWlpX21vZGUoYWRhcHRlciwgcG9ydCwgMSk7CisJCQl9IGVsc2UgaWYgKChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDEpCisJCQkJICAgfHwgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMCkpIHsKKwkJCQluZXR4ZW5fbml1X2diZV9zZXRfbWlpX21vZGUoYWRhcHRlciwgcG9ydCwgMSk7CisJCQl9IGVsc2UgeworCQkJCXJlc3VsdCA9IC0xOworCQkJfQorCisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2UgZG9uJ3QgaGF2ZSBsaW5rLiBDYWJsZSAgbXVzdCBiZSB1bmNvbm5lY3RlZC4KKwkJCSAqIEVuYWJsZSBwaHkgaW50ZXJydXB0cyBzbyB3ZSB0YWtlIGFjdGlvbiB3aGVuCisJCQkgKiBwbHVnZ2VkIGluLgorCQkJICovCisKKwkJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCQkJICAgIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wCisJCQkJCQkgICAgKHBvcnQpLAorCQkJCQkJICAgIE5FVFhFTl9HQl9NQUNfU09GVF9SRVNFVCk7CisJCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQkJCSAgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMAorCQkJCQkJICAgIChwb3J0KSwKKwkJCQkJCSAgICBORVRYRU5fR0JfTUFDX1JFU0VUX1BST1RfQkxLCisJCQkJCQkgICAgfCBORVRYRU5fR0JfTUFDX0VOQUJMRV9UWF9SWAorCQkJCQkJICAgIHwKKwkJCQkJCSAgICBORVRYRU5fR0JfTUFDX1BBVVNFRF9GUk1TKTsKKwkJCWlmIChuZXR4ZW5fbml1X2diZV9jbGVhcl9waHlfaW50ZXJydXB0cyhhZGFwdGVyLCBwb3J0KSkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJICAgICAgICJFUlJPUiBjbGVhcmluZyBQSFkgaW50ZXJydXB0c1xuIik7CisJCQlpZiAobmV0eGVuX25pdV9nYmVfZW5hYmxlX3BoeV9pbnRlcnJ1cHRzKGFkYXB0ZXIsIHBvcnQpKQorCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkgICAgICAgIkVSUk9SIGVuYWJsaW5nIFBIWSBpbnRlcnJ1cHRzXG4iKTsKKwkJCWlmIChuZXR4ZW5fbml1X2diZV9jbGVhcl9waHlfaW50ZXJydXB0cyhhZGFwdGVyLCBwb3J0KSkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJICAgICAgICJFUlJPUiBjbGVhcmluZyBQSFkgaW50ZXJydXB0c1xuIik7CisJCQlyZXN1bHQgPSAtMTsKKwkJfQorCX0gZWxzZSB7CisJCXJlc3VsdCA9IC1FSU87CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBuZXR4ZW5fbml1X3hnX2luaXRfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KQoreworCWxvbmcgcmVnID0gMCwgcmV0ID0gMDsKKworCWlmIChhZGFwdGVyLT5haHcuYm9hcmRjZmcuYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19JTUVaKSB7CisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLAorCQkJCQkgICAgTkVUWEVOX05JVV9YRzFfQ09ORklHXzAsIDB4NSk7CisJCS8qIFhYWCBoYWNrIGZvciBNZXogY2FyZHM6IGJvdGggcG9ydHMgaW4gcHJvbWlzYyBtb2RlICovCisJCW5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLAorCQkJCSAgICAgIE5FVFhFTl9OSVVfWEdFX0NPTkZJR18xLCAmcmVnLCA0KTsKKwkJcmVnID0gKHJlZyB8IDB4MjAwMFVMKTsKKwkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCisJCQkJCSAgICBORVRYRU5fTklVX1hHRV9DT05GSUdfMSwgcmVnKTsKKwkJcmVnID0gMDsKKwkJbmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsCisJCQkJICAgICAgTkVUWEVOX05JVV9YRzFfQ09ORklHXzEsICZyZWcsIDQpOworCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOworCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwKKwkJCQkJICAgIE5FVFhFTl9OSVVfWEcxX0NPTkZJR18xLCByZWcpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIAorICogbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQgLSBIYW5kbGVzIEdiRSBQSFkgaW50ZXJydXB0cworICogQHBhcmFtIGVuYWJsZSAwIG1lYW5zIGRvbid0IGVuYWJsZSB0aGUgcG9ydAorICoJCSAxIG1lYW5zIGVuYWJsZSAob3IgcmUtZW5hYmxlKSB0aGUgcG9ydAorICovCitpbnQgbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCit7CisJaW50IHJlc3VsdCA9IDA7CisJX19sZTMyIGludF9zcmM7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiTkVUWEVOOiBIYW5kbGluZyBQSFkgaW50ZXJydXB0IG9uIHBvcnQgJWQiCisJICAgICAgICIgKGRldmljZSBlbmFibGUgPSAlZClcbiIsIChpbnQpcG9ydCwgKGludCllbmFibGUpOworCisJLyoKKwkgKiBUaGUgcmVhZCBvZiB0aGUgUEhZIElOVCBzdGF0dXMgd2lsbCBjbGVhciB0aGUgcGVuZGluZworCSAqIGludGVycnVwdCBzdGF0dXMKKwkgKi8KKwlpZiAobmV0eGVuX25pdV9nYmVfcGh5X3JlYWQoYWRhcHRlciwgcG9ydCwKKwkJCQkgICAgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9BRERSX0lOVF9TVEFUVVMsCisJCQkJICAgICZpbnRfc3JjKSAhPSAwKQorCQlyZXN1bHQgPSAtRUlOVkFMOworCWVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUEhZIEludGVycnVwdCBzb3VyY2UgPSAweCV4IFxuIiwgaW50X3NyYyk7CisJCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfamFiYmVyKGludF9zcmMpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImphYmJlciBJbnRlcnJ1cHQgIik7CisJCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfcG9sYXJpdHlfY2hhbmdlZChpbnRfc3JjKSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJwb2xhcml0eSBjaGFuZ2VkICIpOworCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2VuZXJneV9kZXRlY3QoaW50X3NyYykpCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZW5lcmd5IGRldGVjdCBcbiIpOworCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2Rvd25zaGlmdChpbnRfc3JjKSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJkb3duc2hpZnQgXG4iKTsKKwkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9tZGlfeG92ZXJfY2hhbmdlZChpbnRfc3JjKSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJtZGlfeG92ZXJfY2hhbmdlZCAiKTsKKwkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9maWZvX292ZXJfdW5kZXJmbG93KGludF9zcmMpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZpZm9fb3Zlcl91bmRlcmZsb3cgIik7CisJCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZmFsc2VfY2FycmllcihpbnRfc3JjKSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJmYWxzZV9jYXJyaWVyICIpOworCQlpZiAobmV0eGVuX2dldF9waHlfaW50X3N5bWJvbF9lcnJvcihpbnRfc3JjKSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJzeW1ib2xfZXJyb3IgIik7CisJCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19jb21wbGV0ZWQoaW50X3NyYykpCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiYXV0b25lZ19jb21wbGV0ZWQgIik7CisJCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfcGFnZV9yZWNlaXZlZChpbnRfc3JjKSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJwYWdlX3JlY2VpdmVkICIpOworCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2R1cGxleF9jaGFuZ2VkKGludF9zcmMpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImR1cGxleF9jaGFuZ2VkICIpOworCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2F1dG9uZWdfZXJyb3IoaW50X3NyYykpCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiYXV0b25lZ19lcnJvciAiKTsKKwkJaWYgKChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3BlZWRfY2hhbmdlZChpbnRfc3JjKSkKKwkJICAgIHx8IChuZXR4ZW5fZ2V0X3BoeV9pbnRfbGlua19zdGF0dXNfY2hhbmdlZChpbnRfc3JjKSkpIHsKKwkJCV9fbGUzMiBzdGF0dXM7CisKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkgICAgICAgInNwZWVkX2NoYW5nZWQgb3IgbGluayBzdGF0dXMgY2hhbmdlZCIpOworCQkJaWYgKG5ldHhlbl9uaXVfZ2JlX3BoeV9yZWFkCisJCQkgICAgKGFkYXB0ZXIsIHBvcnQsCisJCQkgICAgIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAorCQkJICAgICAmc3RhdHVzKSA9PSAwKSB7CisJCQkJaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMikgeworCQkJCQlwcmludGsKKwkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCisJCQkJCSAgICAgIiB0byAxMDAwIE1icHNcbiIpOworCQkJCQluZXR4ZW5fbml1X2diZV9zZXRfZ21paV9tb2RlKGFkYXB0ZXIsCisJCQkJCQkJCSAgICAgcG9ydCwKKwkJCQkJCQkJICAgICBlbmFibGUpOworCQkJCX0gZWxzZSBpZiAobmV0eGVuX2dldF9waHlfc3BlZWQoc3RhdHVzKSA9PSAxKSB7CisJCQkJCXByaW50aworCQkJCQkgICAgKEtFUk5fSU5GTyBQRlggIkxpbmsgc3BlZWQgY2hhbmdlZCIKKwkJCQkJICAgICAiIHRvIDEwMCBNYnBzXG4iKTsKKwkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlKGFkYXB0ZXIsCisJCQkJCQkJCSAgICBwb3J0LAorCQkJCQkJCQkgICAgZW5hYmxlKTsKKwkJCQl9IGVsc2UgaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMCkgeworCQkJCQlwcmludGsKKwkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCisJCQkJCSAgICAgIiB0byAxMCBNYnBzXG4iKTsKKwkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X21paV9tb2RlKGFkYXB0ZXIsCisJCQkJCQkJCSAgICBwb3J0LAorCQkJCQkJCQkgICAgZW5hYmxlKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJFUlJPUiByZWFkaW5nIgorCQkJCQkgICAgICAgIlBIWSBzdGF0dXMuIElsbGVnYWwgc3BlZWQuXG4iKTsKKwkJCQkJcmVzdWx0ID0gLTE7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJICAgICAgICJFUlJPUiByZWFkaW5nIFBIWSBzdGF0dXMuXG4iKTsKKwkJCQlyZXN1bHQgPSAtMTsKKwkJCX0KKworCQl9CisJCXByaW50ayhLRVJOX0lORk8gIlxuIik7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KKyAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KK2ludCBuZXR4ZW5fbml1X21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIGludCBwaHksIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQoreworCXU2NCByZXN1bHQgPSAwOworCV9fbGUzMiBzdGF0aW9uaGlnaDsKKwlfX2xlMzIgc3RhdGlvbmxvdzsKKworCWlmIChhZGRyID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgocGh5IDwgMCkgfHwgKHBoeSA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9TVEFUSU9OX0FERFJfMChwaHkpLAorCQkJCSAgJnN0YXRpb25oaWdoLCA0KSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKG5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX1NUQVRJT05fQUREUl8xKHBoeSksCisJCQkJICAmc3RhdGlvbmxvdywgNCkpCisJCXJldHVybiAtRUlPOworCisJcmVzdWx0ID0gKHU2NCkgbmV0eGVuX2diX2dldF9zdGF0aW9uYWRkcmVzc19sb3coc3RhdGlvbmxvdyk7CisJcmVzdWx0IHw9ICh1NjQpIHN0YXRpb25oaWdoIDw8IDE2OworCW1lbWNweSgqYWRkciwgJnJlc3VsdCwgc2l6ZW9mKG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHRoZSBzdGF0aW9uIE1BQyBhZGRyZXNzLgorICogTm90ZSB0aGF0IHRoZSBwYXNzZWQtaW4gdmFsdWUgbXVzdCBhbHJlYWR5IGJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLworaW50IG5ldHhlbl9uaXVfbWFjYWRkcl9zZXQoc3RydWN0IG5ldHhlbl9wb3J0ICpwb3J0LAorCQkJICAgbmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdCBhZGRyKQoreworCV9fbGUzMiB0ZW1wID0gMDsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwb3J0LT5hZGFwdGVyOworCWludCBwaHkgPSBwb3J0LT5wb3J0bnVtOworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbTUFYX0FERFJfTEVOXTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCW1lbWNweSgmdGVtcCwgYWRkciwgMik7CisJCXRlbXAgPDw9IDE2OworCQlpZiAobmV0eGVuX25pY19od193cml0ZV93eAorCQkgICAgKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzEocGh5KSwgJnRlbXAsIDQpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJdGVtcCA9IDA7CisKKwkJbWVtY3B5KCZ0ZW1wLCAoKHU4ICopIGFkZHIpICsgMiwgc2l6ZW9mKF9fbGUzMikpOworCQlpZiAobmV0eGVuX25pY19od193cml0ZV93eAorCQkgICAgKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfU1RBVElPTl9BRERSXzAocGh5KSwgJnRlbXAsIDQpKQorCQkJcmV0dXJuIC0yOworCisJCW5ldHhlbl9uaXVfbWFjYWRkcl9nZXQoYWRhcHRlciwgcGh5LAorCQkJCSAgICAgICAobmV0eGVuX2V0aGVybmV0X21hY2FkZHJfdCAqKSBtYWNfYWRkcik7CisJCWlmIChtZW1jbXAobWFjX2FkZHIsIGFkZHIsIE1BWF9BRERSX0xFTiA9PSAwKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBzZXQgTWFjIGFkZHIgZm9yICVzXG4iLAorCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJNQUMgYWRkcmVzcyBzZXQ6ICIKKwkJICAgICAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC5cbiIsCisJCSAgICAgICBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdKTsKKworCQlwcmludGsoS0VSTl9FUlIgIk1BQyBhZGRyZXNzIGdldDogIgorCQkgICAgICAgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4LlxuIiwKKwkJICAgICAgIG1hY19hZGRyWzBdLAorCQkgICAgICAgbWFjX2FkZHJbMV0sCisJCSAgICAgICBtYWNfYWRkclsyXSwgbWFjX2FkZHJbM10sIG1hY19hZGRyWzRdLCBtYWNfYWRkcls1XSk7CisJfQorCXJldHVybiAwOworfQorCisvKiBFbmFibGUgYSBHYkUgaW50ZXJmYWNlICovCitpbnQgbmV0eGVuX25pdV9lbmFibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIGludCBwb3J0LCBuZXR4ZW5fbml1X2diZV9pZm1vZGVfdCBtb2RlKQoreworCV9fbGUzMiBtYWNfY2ZnMDsKKwlfX2xlMzIgbWFjX2NmZzE7CisJX19sZTMyIG1paV9jZmc7CisKKwlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCisJCXJldHVybiAtRUlOVkFMOworCisJbWFjX2NmZzAgPSAwOworCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwkJCQkgICAmbWFjX2NmZzAsIDQpKQorCQlyZXR1cm4gLUVJTzsKKwltYWNfY2ZnMCA9IDA7CisJbmV0eGVuX2diX2VuYWJsZV90eChtYWNfY2ZnMCk7CisJbmV0eGVuX2diX2VuYWJsZV9yeChtYWNfY2ZnMCk7CisJbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOworCW5ldHhlbl9nYl90eF9yZXNldF9wYihtYWNfY2ZnMCk7CisJbmV0eGVuX2diX3J4X3Jlc2V0X3BiKG1hY19jZmcwKTsKKwluZXR4ZW5fZ2JfdHhfcmVzZXRfbWFjKG1hY19jZmcwKTsKKwluZXR4ZW5fZ2JfcnhfcmVzZXRfbWFjKG1hY19jZmcwKTsKKworCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCQkJCSAgICZtYWNfY2ZnMCwgNCkpCisJCXJldHVybiAtRUlPOworCW1hY19jZmcxID0gMDsKKwluZXR4ZW5fZ2Jfc2V0X3ByZWFtYmxlbGVuKG1hY19jZmcxLCAweGYpOworCW5ldHhlbl9nYl9zZXRfZHVwbGV4KG1hY19jZmcxKTsKKwluZXR4ZW5fZ2Jfc2V0X2NyY19lbmFibGUobWFjX2NmZzEpOworCW5ldHhlbl9nYl9zZXRfcGFkc2hvcnQobWFjX2NmZzEpOworCW5ldHhlbl9nYl9zZXRfY2hlY2tsZW5ndGgobWFjX2NmZzEpOworCW5ldHhlbl9nYl9zZXRfaHVnZWZyYW1lcyhtYWNfY2ZnMSk7CisKKwlpZiAobW9kZSA9PSBORVRYRU5fTklVXzEwXzEwMF9NQikgeworCQluZXR4ZW5fZ2Jfc2V0X2ludGZtb2RlKG1hY19jZmcxLCAxKTsKKwkJaWYgKG5ldHhlbl9uaWNfaHdfd3JpdGVfd3goYWRhcHRlciwKKwkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCisJCQkJCSAgICZtYWNfY2ZnMSwgNCkpCisJCQlyZXR1cm4gLUVJTzsKKworCQkvKiBzZXQgbWlpIG1vZGUgKi8KKwkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSArCisJCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7CisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCisJCQkJCSAgICAocG9ydCA8PCAzKSwgMSk7CisKKwl9IGVsc2UgaWYgKG1vZGUgPT0gTkVUWEVOX05JVV8xMDAwX01CKSB7CisJCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDIpOworCQlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLAorCQkJCQkgICBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMShwb3J0KSwKKwkJCQkJICAgJm1hY19jZmcxLCA0KSkKKwkJCXJldHVybiAtRUlPOworCQkvKiBzZXQgZ21paSBtb2RlICovCisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCisJCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7CisJCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9HTUlJX01PREUgKworCQkJCQkgICAgKHBvcnQgPDwgMyksIDEpOworCX0KKwltaWlfY2ZnID0gMDsKKwluZXR4ZW5fZ2Jfc2V0X21paV9tZ210X2Nsb2Nrc2VsZWN0KG1paV9jZmcsIDcpOworCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQ09ORklHKHBvcnQpLAorCQkJCSAgICZtaWlfY2ZnLCA0KSkKKwkJcmV0dXJuIC1FSU87CisJbWFjX2NmZzAgPSAwOworCW5ldHhlbl9nYl9lbmFibGVfdHgobWFjX2NmZzApOworCW5ldHhlbl9nYl9lbmFibGVfcngobWFjX2NmZzApOworCW5ldHhlbl9nYl91bnNldF9yeF9mbG93Y3RsKG1hY19jZmcwKTsKKwluZXR4ZW5fZ2JfdW5zZXRfdHhfZmxvd2N0bChtYWNfY2ZnMCk7CisKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwkJCQkgICAmbWFjX2NmZzAsIDQpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworLyogRGlzYWJsZSBhIEdiRSBpbnRlcmZhY2UgKi8KK2ludCBuZXR4ZW5fbml1X2Rpc2FibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydCkKK3sKKwlfX2xlMzIgbWFjX2NmZzA7CisKKwlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCisJCXJldHVybiAtRUlOVkFMOworCisJbWFjX2NmZzAgPSAwOworCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKKwkJCQkgICAmbWFjX2NmZzAsIDQpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworLyogRGlzYWJsZSBhbiBYRyBpbnRlcmZhY2UgKi8KK2ludCBuZXR4ZW5fbml1X2Rpc2FibGVfeGdfcG9ydChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0KQoreworCV9fbGUzMiBtYWNfY2ZnOworCisJaWYgKHBvcnQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYWNfY2ZnID0gMDsKKwluZXR4ZW5feGdfc29mdF9yZXNldChtYWNfY2ZnKTsKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMCwKKwkJCQkgICAmbWFjX2NmZywgNCkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCisvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSBmb3IgYSBHYkUgaW50ZXJmYWNlICovCitpbnQgbmV0eGVuX25pdV9zZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0LAorCQkJCSAgICBuZXR4ZW5fbml1X3Byb21fbW9kZV90IG1vZGUpCit7CisJX19sZTMyIHJlZzsKKworCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gTkVUWEVOX05JVV9NQVhfR0JFX1BPUlRTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzYXZlIHByZXZpb3VzIGNvbnRlbnRzICovCisJaWYgKG5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX0RST1BfV1JPTkdBRERSLAorCQkJCSAgJnJlZywgNCkpCisJCXJldHVybiAtRUlPOworCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKSB7CisJCXN3aXRjaCAocG9ydCkgeworCQljYXNlIDA6CisJCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjAocmVnKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjEocmVnKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjIocmVnKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQluZXR4ZW5fY2xlYXJfZ2JfZHJvcF9nYjMocmVnKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHBvcnQpIHsKKwkJY2FzZSAwOgorCQkJbmV0eGVuX3NldF9nYl9kcm9wX2diMChyZWcpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCW5ldHhlbl9zZXRfZ2JfZHJvcF9nYjEocmVnKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQluZXR4ZW5fc2V0X2diX2Ryb3BfZ2IyKHJlZyk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJbmV0eGVuX3NldF9nYl9kcm9wX2diMyhyZWcpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX0RST1BfV1JPTkdBRERSLAorCQkJCSAgICZyZWcsIDQpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0aGUgTUFDIGFkZHJlc3MgZm9yIGFuIFhHIHBvcnQKKyAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KK2ludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfc2V0KHN0cnVjdCBuZXR4ZW5fcG9ydCAqcG9ydCwKKwkJCSAgICAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgYWRkcikKK3sKKwlfX2xlMzIgdGVtcCA9IDA7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKworCW1lbWNweSgmdGVtcCwgYWRkciwgMik7CisJdGVtcCA9IGNwdV90b19sZTMyKHRlbXApOworCXRlbXAgPDw9IDE2OworCWlmIChuZXR4ZW5fbmljX2h3X3dyaXRlX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wXzEsCisJCQkJICAgJnRlbXAsIDQpKQorCQlyZXR1cm4gLUVJTzsKKworCXRlbXAgPSAwOworCisJbWVtY3B5KCZ0ZW1wLCAoKHU4ICopIGFkZHIpICsgMiwgc2l6ZW9mKF9fbGUzMikpOworCXRlbXAgPSBjcHVfdG9fbGUzMih0ZW1wKTsKKwlpZiAobmV0eGVuX25pY19od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF9ISSwKKwkJCQkgICAmdGVtcCwgNCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KKyAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisgKi8KK2ludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IHBoeSwKKwkJCSAgICAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQoreworCV9fbGUzMiBzdGF0aW9uaGlnaDsKKwlfX2xlMzIgc3RhdGlvbmxvdzsKKwl1NjQgcmVzdWx0OworCisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBoeSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXR4ZW5fbmljX2h3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCisJCQkJICAmc3RhdGlvbmhpZ2gsIDQpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAobmV0eGVuX25pY19od19yZWFkX3d4KGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdFX1NUQVRJT05fQUREUl8wXzEsCisJCQkJICAmc3RhdGlvbmxvdywgNCkpCisJCXJldHVybiAtRUlPOworCisJcmVzdWx0ID0gKCh1NjQpIHN0YXRpb25sb3cpID4+IDE2OworCXJlc3VsdCB8PSAodTY0KSBzdGF0aW9uaGlnaCA8PCAxNjsKKwltZW1jcHkoKmFkZHIsICZyZXN1bHQsIHNpemVvZihuZXR4ZW5fZXRoZXJuZXRfbWFjYWRkcl90KSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHhlbl9uaXVfeGdfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgICBpbnQgcG9ydCwgbmV0eGVuX25pdV9wcm9tX21vZGVfdCBtb2RlKQoreworCV9fbGUzMiByZWc7CisKKwlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5ldHhlbl9uaWNfaHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9DT05GSUdfMSwgJnJlZywgNCkpCisJCXJldHVybiAtRUlPOworCWlmIChtb2RlID09IE5FVFhFTl9OSVVfUFJPTUlTQ19NT0RFKQorCQlyZWcgPSAocmVnIHwgMHgyMDAwVUwpOworCWVsc2UKKwkJcmVnID0gKHJlZyAmIH4weDIwMDBVTCk7CisKKwluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfQ09ORklHXzEsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxODFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCkBAIC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqIAorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICogCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogICAgaW5mb0BuZXR4ZW4uY29tCisgKiBOZXRYZW4sCisgKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCisgKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqLworCisjaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCisjZGVmaW5lIF9fTklDX1BIQU5fUkVHX0hfCisKKy8qIAorICogQ1JCIFJlZ2lzdGVycyBvciBxdWV1ZSBtZXNzYWdlIGRvbmUgb25seSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLgorICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIDIgYXJlIHRoZSBiYXNlIGFkcmVzc2VzIGZvciB0aGUgQ1JCIHJlZ2lzdGVycyBhbmQgdGhlaXIKKyAqIG9mZnNldHMgd2lsbCBiZSBhZGRlZCB0byBnZXQgYWRkcmVzc2VzIGZvciB0aGUgaW5kZXggYWRkcmVzc2VzLgorICovCisjZGVmaW5lIE5JQ19DUkJfQkFTRV9QT1JUMQlORVRYRU5fQ0FNX1JBTSgweDIwMCkKKyNkZWZpbmUgTklDX0NSQl9CQVNFX1BPUlQyCU5FVFhFTl9DQU1fUkFNKDB4MjUwKQorCisjZGVmaW5lIE5FVFhFTl9OSUNfUkVHKFgpCShOSUNfQ1JCX0JBU0VfUE9SVDErKFgpKQorCisvKgorICogQ3JiUG9ydFBoYW5DbnRySGkvTG8gaXMgdXNlZCB0byBwYXNzIHRoZSBhZGRyZXNzIG9mIEhvc3RQaGFudG9tSW5kZXggYWRkcmVzcworICogd2hpY2ggY2FuIGJlIHJlYWQgYnkgdGhlIFBoYW50b20gaG9zdCB0byBnZXQgcHJvZHVjZXIvY29uc3VtZXIgaW5kZXhlcyBmcm9tCisgKiBQaGFudG9tL0Nhc3Blci4gSWYgaXQgaXMgbm90IEhPU1RfU0hBUkVEX01FTU9SWSwgdGhlbiB0aGUgZm9sbG93aW5nCisgKiByZWdpc3RlcnMgd2lsbCBiZSB1c2VkIGZvciB0aGUgYWRkcmVzc2VzIG9mIHRoZSByaW5nJ3Mgc2hhcmVkIG1lbW9yeQorICogb24gdGhlIFBoYW50b20uCisgKi8KKworI2RlZmluZSBDUkJfUEhBTl9DTlRSTF9MT19PRkZTRVQJTkVUWEVOX05JQ19SRUcoMHgwMCkKKyNkZWZpbmUgQ1JCX1BIQU5fQ05UUkxfSElfT0ZGU0VUCU5FVFhFTl9OSUNfUkVHKDB4MDQpCisKKy8qIHBvaW50IHRvIHRoZSBpbmRleGVzICovCisjZGVmaW5lIENSQl9DTURfUFJPRFVDRVJfT0ZGU0VUCQlORVRYRU5fTklDX1JFRygweDA4KQorI2RlZmluZSBDUkJfQ01EX0NPTlNVTUVSX09GRlNFVAkJTkVUWEVOX05JQ19SRUcoMHgwYykKKworI2RlZmluZSBDUkJfUEFVU0VfQUREUl9MTwkJTkVUWEVOX05JQ19SRUcoMHgxMCkKKyNkZWZpbmUgQ1JCX1BBVVNFX0FERFJfSEkJCU5FVFhFTl9OSUNfUkVHKDB4MTQpCisKKy8qIGFkZHJlc3Mgb2YgY29tbWFuZCBkZXNjcmlwdG9ycyBpbiB0aGUgaG9zdCBtZW1vcnkgKi8KKyNkZWZpbmUgQ1JCX0hPU1RfQ01EX0FERFJfSEkJCU5FVFhFTl9OSUNfUkVHKDB4MzApCisjZGVmaW5lIENSQl9IT1NUX0NNRF9BRERSX0xPCQlORVRYRU5fTklDX1JFRygweDM0KQorCisvKiBUaGUgZm9sbG93aW5nIDQgQ1JCIHJlZ2lzdGVycyBhcmUgZm9yIGRvaW5nIHBlcmZvcm1hbmNlIGNvYWwgKi8KKyNkZWZpbmUgQ1JCX0NNRF9JTlRSX0xPT1AJCU5FVFhFTl9OSUNfUkVHKDB4MzgpCisjZGVmaW5lIENSQl9DTURfRE1BX0xPT1AJCU5FVFhFTl9OSUNfUkVHKDB4M2MpCisjZGVmaW5lIENSQl9SQ1ZfSU5UUl9MT09QCQlORVRYRU5fTklDX1JFRygweDQwKQorI2RlZmluZSBDUkJfUkNWX0RNQV9MT09QCQlORVRYRU5fTklDX1JFRygweDQ0KQorCisvKiBOZWVkZWQgYnkgdGhlIGhvc3QgdG8gZmluZCBvdXQgdGhlIHN0YXRlIG9mIFBoYW50b20ncyBpbml0aWFsaXphdGlvbiAqLworI2RlZmluZSBDUkJfRU5BQkxFX1RYX0lOVFIJCU5FVFhFTl9OSUNfUkVHKDB4NGMpCisjZGVmaW5lIENSQl9DTURQRUdfU1RBVEUJCU5FVFhFTl9OSUNfUkVHKDB4NTApCisjZGVmaW5lIENSQl9DTURQRUdfQ01EUklORwkJTkVUWEVOX05JQ19SRUcoMHg1NCkKKworLyogSW50ZXJydXB0IGNvYWxlc2NpbmcgcGFyYW1ldGVycyAqLworI2RlZmluZSBDUkJfR0xPQkFMX0lOVF9DT0FMCQlORVRYRU5fTklDX1JFRygweDgwKQorI2RlZmluZSBDUkJfSU5UX0NPQUxfTU9ERQkJTkVUWEVOX05JQ19SRUcoMHg4NCkKKyNkZWZpbmUgQ1JCX01BWF9SQ1ZfQlVGUwkJTkVUWEVOX05JQ19SRUcoMHg4OCkKKyNkZWZpbmUgQ1JCX1RYX0lOVF9USFJFU0hPTEQJCU5FVFhFTl9OSUNfUkVHKDB4OGMpCisjZGVmaW5lIENSQl9SWF9QS1RfVElNRVIJCU5FVFhFTl9OSUNfUkVHKDB4OTApCisjZGVmaW5lIENSQl9UWF9QS1RfVElNRVIJCU5FVFhFTl9OSUNfUkVHKDB4OTQpCisjZGVmaW5lIENSQl9SWF9QS1RfQ05UCQkJTkVUWEVOX05JQ19SRUcoMHg5OCkKKyNkZWZpbmUgQ1JCX1JYX1RNUl9DTlQJCQlORVRYRU5fTklDX1JFRygweDljKQorI2RlZmluZSBDUkJfSU5UX1RIUkVTSAkJIE5FVFhFTl9OSUNfUkVHKDB4YTQpCisKKy8qIFJlZ2lzdGVyIGZvciBjb21tdW5pY2F0aW5nIFhHIGxpbmsgc3RhdHVzICovCisjZGVmaW5lIENSQl9YR19TVEFURQkJCU5FVFhFTl9OSUNfUkVHKDB4YTApCisKKy8qIFJlZ2lzdGVyIGZvciBjb21tdW5pY2F0aW5nIGNhcmQgdGVtcGVyYXR1cmUgKi8KKy8qIFVwcGVyIDE2IGJpdHMgYXJlIHRlbXBlcmF0dXJlIHZhbHVlLiBMb3dlciAxNiBiaXRzIGFyZSB0aGUgc3RhdGUgKi8KKyNkZWZpbmUgQ1JCX1RFTVBfU1RBVEUJCSBORVRYRU5fTklDX1JFRygweGE4KQorI2RlZmluZSBueF9nZXRfdGVtcF92YWwoeCkJICAgICAoKHgpID4+IDE2KQorI2RlZmluZSBueF9nZXRfdGVtcF9zdGF0ZSh4KQkgICAoKHgpICYgMHhmZmZmKQorI2RlZmluZSBueF9lbmNvZGVfdGVtcCh2YWwsIHN0YXRlKSAgICAgKCgodmFsKSA8PCAxNikgfCAoc3RhdGUpKQorCisvKiBEZWJ1ZyByZWdpc3RlcnMgZm9yIGNvbnRyb2xsaW5nIE5JQyBwa3QgZ2VuIGFnZW50ICovCisjZGVmaW5lIENSQl9BR0VOVF9HTwkJCU5FVFhFTl9OSUNfUkVHKDB4YjApCisjZGVmaW5lIENSQl9BR0VOVF9UWF9TSVpFCQlORVRYRU5fTklDX1JFRygweGI0KQorI2RlZmluZSBDUkJfQUdFTlRfVFhfVFlQRQkJTkVUWEVOX05JQ19SRUcoMHhiOCkKKyNkZWZpbmUgQ1JCX0FHRU5UX1RYX0FERFIJCU5FVFhFTl9OSUNfUkVHKDB4YmMpCisjZGVmaW5lIENSQl9BR0VOVF9UWF9NU1MJCU5FVFhFTl9OSUNfUkVHKDB4YzApCisKKy8qIERlYnVnIHJlZ2lzdGVycyBmb3Igb2JzZXJ2aW5nIE5JQyBwZXJmb3JtYW5jZSAqLworI2RlZmluZSBDUkJfVFhfU1RBVEUJCQlORVRYRU5fTklDX1JFRygweGQwKQorI2RlZmluZSBDUkJfVFhfQ09VTlQJCQlORVRYRU5fTklDX1JFRygweGQ0KQorI2RlZmluZSBDUkJfUlhfU1RBVEUJCQlORVRYRU5fTklDX1JFRygweGQ4KQorCisvKiBDUkIgcmVnaXN0ZXJzIHBlciBSY3YgRGVzY3JpcHRvciByaW5nICovCitzdHJ1Y3QgbmV0eGVuX3Jjdl9kZXNjX2NyYiB7CisJdTMyIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDUxMikpKTsKKwl1MzIgY3JiX3Jjdl9jb25zdW1lcl9vZmZzZXQ7CisJdTMyIGNyYl9nbG9iYWxyY3ZfcmluZzsKK307CisKKy8qCisgKiBDUkIgcmVnaXN0ZXJzIHVzZWQgYnkgdGhlIHJlY2VpdmUgcGVnIGxvZ2ljLiBPbmUgaW5zdGFuY2Ugb2YgdGhlc2UKKyAqIG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBwZXIgaW5zdGFuY2Ugb2YgdGhlIHJlY2VpdmUgcGVnLgorICovCisKK3N0cnVjdCBuZXR4ZW5fcmVjdl9jcmIgeworCXN0cnVjdCBuZXR4ZW5fcmN2X2Rlc2NfY3JiIHJjdl9kZXNjX2NyYltOVU1fUkNWX0RFU0NfUklOR1NdOworCXUzMiBjcmJfcmN2c3RhdHVzX3Jpbmc7CisJdTMyIGNyYl9yY3Zfc3RhdHVzX3Byb2R1Y2VyOworCXUzMiBjcmJfcmN2X3N0YXR1c19jb25zdW1lcjsKKwl1MzIgY3JiX3JjdnBlZ19zdGF0ZTsKK307CisKKyNpZiBkZWZpbmVkKERFRklORV9HTE9CQUxfUkVDVl9DUkIpCitzdHJ1Y3QgbmV0eGVuX3JlY3ZfY3JiIHJlY3ZfY3JiX3JlZ2lzdGVyc1tdID0geworCS8qCisJICogSW5zdGFuY2UgMC4KKwkgKi8KKwl7CisJIC8qIHJjdl9kZXNjX2NyYjogKi8KKwkgeworCSAgeworCSAgIC8qIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0OiAqLworCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTgpLAorCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLworCSAgIE5FVFhFTl9OSUNfUkVHKDB4MWMpLAorCSAgIC8qIGNyYl9nbG9hYmxyY3ZfcmluZzogKi8KKwkgICBORVRYRU5fTklDX1JFRygweDIwKSwKKwkgICB9LAorCSAgLyogSnVtYm8gZnJhbWVzICovCisJICB7CisJICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCisJICAgTkVUWEVOX05JQ19SRUcoMHgxMDApLAorCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLworCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTA0KSwKKwkgICAvKiBjcmJfZ2xvYWJscmN2X3Jpbmc6ICovCisJICAgTkVUWEVOX05JQ19SRUcoMHgxMDgpLAorCSAgIH0KKwkgIH0sCisJIC8qIGNyYl9yY3ZzdGF0dXNfcmluZzogKi8KKwkgTkVUWEVOX05JQ19SRUcoMHgyNCksCisJIC8qIGNyYl9yY3Zfc3RhdHVzX3Byb2R1Y2VyOiAqLworCSBORVRYRU5fTklDX1JFRygweDI4KSwKKwkgLyogY3JiX3Jjdl9zdGF0dXNfY29uc3VtZXI6ICovCisJIE5FVFhFTl9OSUNfUkVHKDB4MmMpLAorCSAvKiBjcmJfcmN2cGVnX3N0YXRlOiAqLworCSBORVRYRU5fTklDX1JFRygweDQ4KSwKKworCSB9LAorCS8qCisJICogSW5zdGFuY2UgMSwKKwkgKi8KKwl7CisJIC8qIHJjdl9kZXNjX2NyYjogKi8KKwkgeworCSAgeworCSAgIC8qIGNyYl9yY3ZfcHJvZHVjZXJfb2Zmc2V0OiAqLworCSAgIE5FVFhFTl9OSUNfUkVHKDB4ODApLAorCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLworCSAgIE5FVFhFTl9OSUNfUkVHKDB4ODQpLAorCSAgIC8qIGNyYl9nbG9iYWxyY3ZfcmluZzogKi8KKwkgICBORVRYRU5fTklDX1JFRygweDg4KSwKKwkgICB9LAorCSAgLyogSnVtYm8gZnJhbWVzICovCisJICB7CisJICAgLyogY3JiX3Jjdl9wcm9kdWNlcl9vZmZzZXQ6ICovCisJICAgTkVUWEVOX05JQ19SRUcoMHgxMEMpLAorCSAgIC8qIGNyYl9yY3ZfY29uc3VtZXJfb2Zmc2V0OiAqLworCSAgIE5FVFhFTl9OSUNfUkVHKDB4MTEwKSwKKwkgICAvKiBjcmJfZ2xvYmFscmN2X3Jpbmc6ICovCisJICAgTkVUWEVOX05JQ19SRUcoMHgxMTQpLAorCSAgIH0KKwkgIH0sCisJIC8qIGNyYl9yY3ZzdGF0dXNfcmluZzogKi8KKwkgTkVUWEVOX05JQ19SRUcoMHg4YyksCisJIC8qIGNyYl9yY3Zfc3RhdHVzX3Byb2R1Y2VyOiAqLworCSBORVRYRU5fTklDX1JFRygweDkwKSwKKwkgLyogY3JiX3Jjdl9zdGF0dXNfY29uc3VtZXI6ICovCisJIE5FVFhFTl9OSUNfUkVHKDB4OTQpLAorCSAvKiBjcmJfcmN2cGVnX3N0YXRlOiAqLworCSBORVRYRU5fTklDX1JFRygweDk4KSwKKwkgfSwKK307CisjZWxzZQorZXh0ZXJuIHN0cnVjdCBuZXR4ZW5fcmVjdl9jcmIgcmVjdl9jcmJfcmVnaXN0ZXJzW107CisjZW5kaWYJCQkJLyogREVGSU5FX0dMT0JBTF9SRUNFSVZFX0NSQiAqLworCisvKgorICogVGVtcGVyYXR1cmUgY29udHJvbC4KKyAqLworZW51bSB7CisJTlhfVEVNUF9OT1JNQUwgPSAweDEsCS8qIE5vcm1hbCBvcGVyYXRpbmcgcmFuZ2UgKi8KKwlOWF9URU1QX1dBUk4sCQkvKiBTb3VuZCBhbGVydCwgdGVtcGVyYXR1cmUgZ2V0dGluZyBoaWdoICovCisJTlhfVEVNUF9QQU5JQwkJLyogRmF0YWwgZXJyb3IsIGhhcmR3YXJlIGhhcyBzaHV0IGRvd24uICovCit9OworCisjZW5kaWYJCQkJLyogX19OSUNfUEhBTl9SRUdfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggMGMwMGQxOC4uYzUxY2M1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTEwOTYsNyArMTA5Niw2IEBACiAKICAgICAvKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHQgd2l0aCBleHBpcmVkIGxhdGVuY3kgdGltZXI6IHdpdGgKICAgICAgICB0aGlzLCB3ZSBjYW4gbGltcCBhbG9uZyBldmVuIGlmIHRoZSBpbnRlcnJ1cHQgaXMgYmxvY2tlZCAqLwotICAgIG91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCwgbmljX2Jhc2UgKyBFODM5MF9DTUQpOwogICAgIGlmIChpbmZvLT5zdGFsZSsrICYmIChpbmJfcChuaWNfYmFzZSArIEVOMF9JU1IpICYgRU5JU1JfQUxMKSkgewogCWlmICghaW5mby0+ZmFzdF9wb2xsKQogCSAgICBwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJydXB0KHMpIGRyb3BwZWQhXG4iLCBkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBlY2I2MWY4Li5mOTk0ZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtNTYsNiArNTYsMTIgQEAKIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIExBTjgzQzE4NSBQSFkKIAorY29uZmlnIEJST0FEQ09NX1BIWQorCXRyaXN0YXRlICJEcml2ZXJzIGZvciBCcm9hZGNvbSBQSFlzIgorCWRlcGVuZHMgb24gUEhZTElCCisJLS0taGVscC0tLQorCSAgQ3VycmVudGx5IHN1cHBvcnRzIHRoZSBCQ001NDExLCBCQ001NDIxIGFuZCBCQ001NDYxIFBIWXMuCisKIGNvbmZpZyBGSVhFRF9QSFkKIAl0cmlzdGF0ZSAiRHJpdmVycyBmb3IgUEhZIGVtdWxhdGlvbiBvbiBmaXhlZCBzcGVlZC9saW5rIgogCWRlcGVuZHMgb24gUEhZTElCCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKaW5kZXggMzIwZjgzMi4uYmNkMWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQpAQCAtMTAsNCArMTAsNSBAQAogb2JqLSQoQ09ORklHX1FTRU1JX1BIWSkJCSs9IHFzZW1pLm8KIG9iai0kKENPTkZJR19TTVNDX1BIWSkJCSs9IHNtc2Mubwogb2JqLSQoQ09ORklHX1ZJVEVTU0VfUEhZKQkrPSB2aXRlc3NlLm8KK29iai0kKENPTkZJR19CUk9BRENPTV9QSFkpCSs9IGJyb2FkY29tLm8KIG9iai0kKENPTkZJR19GSVhFRF9QSFkpCQkrPSBmaXhlZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYyBiL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NjY2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9waHkvYnJvYWRjb20uYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqCWRyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jCisgKgorICoJQnJvYWRjb20gQkNNNTQxMSwgQkNNNTQyMSBhbmQgQkNNNTQ2MSBHaWdhYml0IEV0aGVybmV0CisgKgl0cmFuc2NlaXZlcnMuCisgKgorICoJQ29weXJpZ2h0IChjKSAyMDA2ICBNYWNpZWogVy4gUm96eWNraQorICoKKyAqCUluc3BpcmVkIGJ5IGNvZGUgd3JpdHRlbiBieSBBbXkgRm9uZy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2RlZmluZSBNSUlfQkNNNTRYWF9FQ1IJCTB4MTAJLyogQkNNNTR4eCBleHRlbmRlZCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9CQ001NFhYX0VDUl9JTQkweDEwMDAJLyogSW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfRUNSX0lGCTB4MDgwMAkvKiBJbnRlcnJ1cHQgZm9yY2UgKi8KKworI2RlZmluZSBNSUlfQkNNNTRYWF9FU1IJCTB4MTEJLyogQkNNNTR4eCBleHRlbmRlZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfRVNSX0lTCTB4MTAwMAkvKiBJbnRlcnJ1cHQgc3RhdHVzICovCisKKyNkZWZpbmUgTUlJX0JDTTU0WFhfSVNSCQkweDFhCS8qIEJDTTU0eHggaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTVIJCTB4MWIJLyogQkNNNTR4eCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfQ1JDRVJSCTB4MDAwMQkvKiBDUkMgZXJyb3IgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfSU5UX0xJTksJMHgwMDAyCS8qIExpbmsgc3RhdHVzIGNoYW5nZWQgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfSU5UX1NQRUVECTB4MDAwNAkvKiBMaW5rIHNwZWVkIGNoYW5nZSAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfRFVQTEVYCTB4MDAwOAkvKiBEdXBsZXggbW9kZSBjaGFuZ2VkICovCisjZGVmaW5lIE1JSV9CQ001NFhYX0lOVF9MUlMJMHgwMDEwCS8qIExvY2FsIHJlY2VpdmVyIHN0YXR1cyBjaGFuZ2VkICovCisjZGVmaW5lIE1JSV9CQ001NFhYX0lOVF9SUlMJMHgwMDIwCS8qIFJlbW90ZSByZWNlaXZlciBzdGF0dXMgY2hhbmdlZCAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfU1NFUlIJMHgwMDQwCS8qIFNjcmFtYmxlciBzeW5jaHJvbml6YXRpb24gZXJyb3IgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfSU5UX1VIQ0QJMHgwMDgwCS8qIFVuc3VwcG9ydGVkIEhDRCBuZWdvdGlhdGVkICovCisjZGVmaW5lIE1JSV9CQ001NFhYX0lOVF9OSENECTB4MDEwMAkvKiBObyBIQ0QgKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfSU5UX05IQ0RMCTB4MDIwMAkvKiBObyBIQ0QgbGluayAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfQU5QUgkweDA0MDAJLyogQXV0by1uZWdvdGlhdGlvbiBwYWdlIHJlY2VpdmVkICovCisjZGVmaW5lIE1JSV9CQ001NFhYX0lOVF9MQwkweDA4MDAJLyogQWxsIGNvdW50ZXJzIGJlbG93IDEyOCAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfSEMJMHgxMDAwCS8qIENvdW50ZXIgYWJvdmUgMzI3NjggKi8KKyNkZWZpbmUgTUlJX0JDTTU0WFhfSU5UX01ESVgJMHgyMDAwCS8qIE1ESVggc3RhdHVzIGNoYW5nZSAqLworI2RlZmluZSBNSUlfQkNNNTRYWF9JTlRfUFNFUlIJMHg0MDAwCS8qIFBhaXIgc3dhcCBlcnJvciAqLworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb2FkY29tIFBIWSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIk1hY2llaiBXLiBSb3p5Y2tpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgYmNtNTR4eF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZWcsIGVycjsKKworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JDTTU0WFhfRUNSKTsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKworCS8qIE1hc2sgaW50ZXJydXB0cyBnbG9iYWxseS4gICovCisJcmVnIHw9IE1JSV9CQ001NFhYX0VDUl9JTTsKKwllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQkNNNTRYWF9FQ1IsIHJlZyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBVbm1hc2sgZXZlbnRzIHdlIGFyZSBpbnRlcmVzdGVkIGluLiAgKi8KKwlyZWcgPSB+KE1JSV9CQ001NFhYX0lOVF9EVVBMRVggfAorCQlNSUlfQkNNNTRYWF9JTlRfU1BFRUQgfAorCQlNSUlfQkNNNTRYWF9JTlRfTElOSyk7CisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JDTTU0WFhfSU1SLCByZWcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbTU0eHhfYWNrX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZWc7CisKKwkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdHMuICAqLworCXJlZyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JDTTU0WFhfSVNSKTsKKwlpZiAocmVnIDwgMCkKKwkJcmV0dXJuIHJlZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJjbTU0eHhfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlpbnQgcmVnLCBlcnI7CisKKwlyZWcgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CQ001NFhYX0VDUik7CisJaWYgKHJlZyA8IDApCisJCXJldHVybiByZWc7CisKKwlpZiAocGh5ZGV2LT5pbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkKKwkJcmVnICY9IH5NSUlfQkNNNTRYWF9FQ1JfSU07CisJZWxzZQorCQlyZWcgfD0gTUlJX0JDTTU0WFhfRUNSX0lNOworCisJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JDTTU0WFhfRUNSLCByZWcpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY201NDExX2RyaXZlciA9IHsKKwkucGh5X2lkCQk9IDB4MDAyMDYwNzAsCisJLnBoeV9pZF9tYXNrCT0gMHhmZmZmZmZmMCwKKwkubmFtZQkJPSAiQnJvYWRjb20gQkNNNTQxMSIsCisJLmZlYXR1cmVzCT0gUEhZX0dCSVRfRkVBVFVSRVMsCisJLmZsYWdzCQk9IFBIWV9IQVNfTUFHSUNBTkVHIHwgUEhZX0hBU19JTlRFUlJVUFQsCisJLmNvbmZpZ19pbml0CT0gYmNtNTR4eF9jb25maWdfaW5pdCwKKwkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzCT0gZ2VucGh5X3JlYWRfc3RhdHVzLAorCS5hY2tfaW50ZXJydXB0CT0gYmNtNTR4eF9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50cgk9IGJjbTU0eHhfY29uZmlnX2ludHIsCisJLmRyaXZlciAJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgYmNtNTQyMV9kcml2ZXIgPSB7CisJLnBoeV9pZAkJPSAweDAwMjA2MGUwLAorCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIkJyb2FkY29tIEJDTTU0MjEiLAorCS5mZWF0dXJlcwk9IFBIWV9HQklUX0ZFQVRVUkVTLAorCS5mbGFncwkJPSBQSFlfSEFTX01BR0lDQU5FRyB8IFBIWV9IQVNfSU5URVJSVVBULAorCS5jb25maWdfaW5pdAk9IGJjbTU0eHhfY29uZmlnX2luaXQsCisJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdAk9IGJjbTU0eHhfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBiY201NHh4X2NvbmZpZ19pbnRyLAorCS5kcml2ZXIgCT0geyAub3duZXIgPSBUSElTX01PRFVMRSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGJjbTU0NjFfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMDIwNjBjMCwKKwkucGh5X2lkX21hc2sJPSAweGZmZmZmZmYwLAorCS5uYW1lCQk9ICJCcm9hZGNvbSBCQ001NDYxIiwKKwkuZmVhdHVyZXMJPSBQSFlfR0JJVF9GRUFUVVJFUywKKwkuZmxhZ3MJCT0gUEhZX0hBU19NQUdJQ0FORUcgfCBQSFlfSEFTX0lOVEVSUlVQVCwKKwkuY29uZmlnX2luaXQJPSBiY201NHh4X2NvbmZpZ19pbml0LAorCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmFja19pbnRlcnJ1cHQJPSBiY201NHh4X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyCT0gYmNtNTR4eF9jb25maWdfaW50ciwKKwkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJyb2FkY29tX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtNTQxMV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0XzU0MTE7CisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtNTQyMV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0XzU0MjE7CisJcmV0ID0gcGh5X2RyaXZlcl9yZWdpc3RlcigmYmNtNTQ2MV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0XzU0NjE7CisJcmV0dXJuIHJldDsKKworb3V0XzU0NjE6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201NDIxX2RyaXZlcik7CitvdXRfNTQyMToKKwlwaHlfZHJpdmVyX3VucmVnaXN0ZXIoJmJjbTU0MTFfZHJpdmVyKTsKK291dF81NDExOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBicm9hZGNvbV9leGl0KHZvaWQpCit7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201NDYxX2RyaXZlcik7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201NDIxX2RyaXZlcik7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyKCZiY201NDExX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGJyb2FkY29tX2luaXQpOworbW9kdWxlX2V4aXQoYnJvYWRjb21fZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggM2FmOWZjZi4uODgyMzdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtNyw2ICs3LDcgQEAKICAqIEF1dGhvcjogQW5keSBGbGVtaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgIE1hY2llaiBXLiBSb3p5Y2tpCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTMyLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTQ4NCw2ICs0ODcsOSBAQAogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwaHlfZGF0OwogCisJaWYgKFBIWV9IQUxURUQgPT0gcGh5ZGV2LT5zdGF0ZSkKKwkJcmV0dXJuIElSUV9OT05FOwkJLyogSXQgY2FuJ3QgYmUgb3Vycy4gICovCisKIAkvKiBUaGUgTURJTyBidXMgaXMgbm90IGFsbG93ZWQgdG8gYmUgd3JpdHRlbiBpbiBpbnRlcnJ1cHQKIAkgKiBjb250ZXh0LCBzbyB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIGlycSBoZXJlLiAgQSB3b3JrCiAJICogcXVldWUgd2lsbCB3cml0ZSB0aGUgUEhZIHRvIGRpc2FibGUgYW5kIGNsZWFyIHRoZQpAQCAtNTc3LDYgKzU4MywxMyBAQAogCWlmIChlcnIpCiAJCXBoeV9lcnJvcihwaHlkZXYpOwogCisJLyoKKwkgKiBGaW5pc2ggYW55IHBlbmRpbmcgd29yazsgd2UgbWlnaHQgaGF2ZSBiZWVuIHNjaGVkdWxlZAorCSAqIHRvIGJlIGNhbGxlZCBmcm9tIGtldmVudGQgb3Vyc2VsdmVzLCB0aG91Z2guCisJICovCisJaWYgKCFjdXJyZW50X2lzX2tldmVudGQoKSkKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCWZyZWVfaXJxKHBoeWRldi0+aXJxLCBwaHlkZXYpOwogCiAJcmV0dXJuIGVycjsKQEAgLTYwMyw3ICs2MTYsOCBAQAogCWVuYWJsZV9pcnEocGh5ZGV2LT5pcnEpOwogCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyAqLwotCWVyciA9IHBoeV9jb25maWdfaW50ZXJydXB0KHBoeWRldiwgUEhZX0lOVEVSUlVQVF9FTkFCTEVEKTsKKwlpZiAoUEhZX0hBTFRFRCAhPSBwaHlkZXYtPnN0YXRlKQorCQllcnIgPSBwaHlfY29uZmlnX2ludGVycnVwdChwaHlkZXYsIFBIWV9JTlRFUlJVUFRfRU5BQkxFRCk7CiAKIAlpZiAoZXJyKQogCQlnb3RvIGlycV9lbmFibGVfZXJyOwpAQCAtNjI0LDE4ICs2MzgsMjQgQEAKIAlpZiAoUEhZX0hBTFRFRCA9PSBwaHlkZXYtPnN0YXRlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAocGh5ZGV2LT5pcnEgIT0gUEhZX1BPTEwpIHsKLQkJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCQlwaHlfY2xlYXJfaW50ZXJydXB0KHBoeWRldik7CisJcGh5ZGV2LT5zdGF0ZSA9IFBIWV9IQUxURUQ7CiAKKwlpZiAocGh5ZGV2LT5pcnEgIT0gUEhZX1BPTEwpIHsKIAkJLyogRGlzYWJsZSBQSFkgSW50ZXJydXB0cyAqLwogCQlwaHlfY29uZmlnX2ludGVycnVwdChwaHlkZXYsIFBIWV9JTlRFUlJVUFRfRElTQUJMRUQpOwotCX0KIAotCXBoeWRldi0+c3RhdGUgPSBQSFlfSEFMVEVEOworCQkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCXBoeV9jbGVhcl9pbnRlcnJ1cHQocGh5ZGV2KTsKKwl9CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJnBoeWRldi0+bG9jayk7CisKKwkvKgorCSAqIENhbm5vdCBjYWxsIGZsdXNoX3NjaGVkdWxlZF93b3JrKCkgaGVyZSBhcyBkZXNpcmVkIGJlY2F1c2UKKwkgKiBvZiBydG5sX2xvY2soKSwgYnV0IFBIWV9IQUxURUQgc2hhbGwgZ3VhcmFudGVlIHBoeV9jaGFuZ2UoKQorCSAqIHdpbGwgbm90IHJlZW5hYmxlIGludGVycnVwdHMuCisJICovCiB9CiAKIApAQCAtNjkzLDYwICs3MTMsNTcgQEAKIAogCQkJYnJlYWs7CiAJCWNhc2UgUEhZX0FOOgorCQkJZXJyID0gcGh5X3JlYWRfc3RhdHVzKHBoeWRldik7CisKKwkJCWlmIChlcnIgPCAwKQorCQkJCWJyZWFrOworCisJCQkvKiBJZiB0aGUgbGluayBpcyBkb3duLCBnaXZlIHVwIG9uCisJCQkgKiBuZWdvdGlhdGlvbiBmb3Igbm93ICovCisJCQlpZiAoIXBoeWRldi0+bGluaykgeworCQkJCXBoeWRldi0+c3RhdGUgPSBQSFlfTk9MSU5LOworCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKwkJCQlwaHlkZXYtPmFkanVzdF9saW5rKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJLyogQ2hlY2sgaWYgbmVnb3RpYXRpb24gaXMgZG9uZS4gIEJyZWFrCiAJCQkgKiBpZiB0aGVyZSdzIGFuIGVycm9yICovCiAJCQllcnIgPSBwaHlfYW5lZ19kb25lKHBoeWRldik7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAotCQkJLyogSWYgYXV0by1uZWdvdGlhdGlvbiBpcyBkb25lLCB3ZSBjaGFuZ2UgdG8KLQkJCSAqIGVpdGhlciBSVU5OSU5HLCBvciBOT0xJTksgKi8KKwkJCS8qIElmIEFOIGlzIGRvbmUsIHdlJ3JlIHJ1bm5pbmcgKi8KIAkJCWlmIChlcnIgPiAwKSB7Ci0JCQkJZXJyID0gcGh5X3JlYWRfc3RhdHVzKHBoeWRldik7Ci0KLQkJCQlpZiAoZXJyKQotCQkJCQlicmVhazsKLQotCQkJCWlmIChwaHlkZXYtPmxpbmspIHsKLQkJCQkJcGh5ZGV2LT5zdGF0ZSA9IFBIWV9SVU5OSU5HOwotCQkJCQluZXRpZl9jYXJyaWVyX29uKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQlwaHlkZXYtPnN0YXRlID0gUEhZX05PTElOSzsKLQkJCQkJbmV0aWZfY2Fycmllcl9vZmYocGh5ZGV2LT5hdHRhY2hlZF9kZXYpOwotCQkJCX0KLQorCQkJCXBoeWRldi0+c3RhdGUgPSBQSFlfUlVOTklORzsKKwkJCQluZXRpZl9jYXJyaWVyX29uKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKIAkJCQlwaHlkZXYtPmFkanVzdF9saW5rKHBoeWRldi0+YXR0YWNoZWRfZGV2KTsKIAogCQkJfSBlbHNlIGlmICgwID09IHBoeWRldi0+bGlua190aW1lb3V0LS0pIHsKLQkJCQkvKiBUaGUgY291bnRlciBleHBpcmVkLCBzbyBlaXRoZXIgd2UKLQkJCQkgKiBzd2l0Y2ggdG8gZm9yY2VkIG1vZGUsIG9yIHRoZQotCQkJCSAqIG1hZ2ljX2FuZWcgYml0IGV4aXN0cywgYW5kIHdlIHRyeSBhbmVnCi0JCQkJICogYWdhaW4gKi8KLQkJCQlpZiAoIShwaHlkZXYtPmRydi0+ZmxhZ3MgJiBQSFlfSEFTX01BR0lDQU5FRykpIHsKLQkJCQkJaW50IGlkeDsKLQotCQkJCQkvKiBXZSdsbCBzdGFydCBmcm9tIHRoZQotCQkJCQkgKiBmYXN0ZXN0IHNwZWVkLCBhbmQgd29yawotCQkJCQkgKiBvdXIgd2F5IGRvd24gKi8KLQkJCQkJaWR4ID0gcGh5X2ZpbmRfdmFsaWQoMCwKLQkJCQkJCQlwaHlkZXYtPnN1cHBvcnRlZCk7Ci0KLQkJCQkJcGh5ZGV2LT5zcGVlZCA9IHNldHRpbmdzW2lkeF0uc3BlZWQ7Ci0JCQkJCXBoeWRldi0+ZHVwbGV4ID0gc2V0dGluZ3NbaWR4XS5kdXBsZXg7Ci0JCQkJCQotCQkJCQlwaHlkZXYtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCQkJCXBoeWRldi0+c3RhdGUgPSBQSFlfRk9SQ0lORzsKLQkJCQkJcGh5ZGV2LT5saW5rX3RpbWVvdXQgPQotCQkJCQkJUEhZX0ZPUkNFX1RJTUVPVVQ7Ci0KLQkJCQkJcHJfaW5mbygiVHJ5aW5nICVkLyVzXG4iLAotCQkJCQkJCXBoeWRldi0+c3BlZWQsCi0JCQkJCQkJRFVQTEVYX0ZVTEwgPT0KLQkJCQkJCQlwaHlkZXYtPmR1cGxleCA/Ci0JCQkJCQkJIkZVTEwiIDogIkhBTEYiKTsKLQkJCQl9CisJCQkJaW50IGlkeDsKIAogCQkJCW5lZWRzX2FuZWcgPSAxOworCQkJCS8qIElmIHdlIGhhdmUgdGhlIG1hZ2ljX2FuZWcgYml0LAorCQkJCSAqIHdlIHRyeSBhZ2FpbiAqLworCQkJCWlmIChwaHlkZXYtPmRydi0+ZmxhZ3MgJiBQSFlfSEFTX01BR0lDQU5FRykKKwkJCQkJYnJlYWs7CisKKwkJCQkvKiBUaGUgdGltZXIgZXhwaXJlZCwgYW5kIHdlIHN0aWxsCisJCQkJICogZG9uJ3QgaGF2ZSBhIHNldHRpbmcsIHNvIHdlIHRyeQorCQkJCSAqIGZvcmNpbmcgaXQgdW50aWwgd2UgZmluZCBvbmUgdGhhdAorCQkJCSAqIHdvcmtzLCBzdGFydGluZyBmcm9tIHRoZSBmYXN0ZXN0IHNwZWVkLAorCQkJCSAqIGFuZCB3b3JraW5nIG91ciB3YXkgZG93biAqLworCQkJCWlkeCA9IHBoeV9maW5kX3ZhbGlkKDAsIHBoeWRldi0+c3VwcG9ydGVkKTsKKworCQkJCXBoeWRldi0+c3BlZWQgPSBzZXR0aW5nc1tpZHhdLnNwZWVkOworCQkJCXBoeWRldi0+ZHVwbGV4ID0gc2V0dGluZ3NbaWR4XS5kdXBsZXg7CisKKwkJCQlwaHlkZXYtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisKKwkJCQlwcl9pbmZvKCJUcnlpbmcgJWQvJXNcbiIsIHBoeWRldi0+c3BlZWQsCisJCQkJCQlEVVBMRVhfRlVMTCA9PQorCQkJCQkJcGh5ZGV2LT5kdXBsZXggPworCQkJCQkJIkZVTEwiIDogIkhBTEYiKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBIWV9OT0xJTks6CkBAIC03NjIsNyArNzc5LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBIWV9GT1JDSU5HOgotCQkJZXJyID0gcGh5X3JlYWRfc3RhdHVzKHBoeWRldik7CisJCQllcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTsKIAogCQkJaWYgKGVycikKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDNiYmQ1ZTcuLmIwMWZjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtNTksNiArNTksNyBAQAogCWRldi0+ZHVwbGV4ID0gLTE7CiAJZGV2LT5wYXVzZSA9IGRldi0+YXN5bV9wYXVzZSA9IDA7CiAJZGV2LT5saW5rID0gMTsKKwlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJOwogCiAJZGV2LT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CiAKQEAgLTEzNywxMSArMTM4LDEyIEBACiAgKiAgIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHkuCiAgKi8KIHN0cnVjdCBwaHlfZGV2aWNlICogcGh5X2Nvbm5lY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGh5X2lkLAotCQl2b2lkICgqaGFuZGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKiksIHUzMiBmbGFncykKKwkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICopLCB1MzIgZmxhZ3MsCisJCXUzMiBpbnRlcmZhY2UpCiB7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKIAotCXBoeWRldiA9IHBoeV9hdHRhY2goZGV2LCBwaHlfaWQsIGZsYWdzKTsKKwlwaHlkZXYgPSBwaHlfYXR0YWNoKGRldiwgcGh5X2lkLCBmbGFncywgaW50ZXJmYWNlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkKIAkJcmV0dXJuIHBoeWRldjsKQEAgLTE4Niw3ICsxODgsNyBAQAogfQogCiBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQljb25zdCBjaGFyICpwaHlfaWQsIHUzMiBmbGFncykKKwkJY29uc3QgY2hhciAqcGh5X2lkLCB1MzIgZmxhZ3MsIHUzMiBpbnRlcmZhY2UpCiB7CiAJc3RydWN0IGJ1c190eXBlICpidXMgPSAmbWRpb19idXNfdHlwZTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwpAQCAtMjMxLDYgKzIzMywyMCBAQAogCiAJcGh5ZGV2LT5kZXZfZmxhZ3MgPSBmbGFnczsKIAorCXBoeWRldi0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOworCisJLyogRG8gaW5pdGlhbCBjb25maWd1cmF0aW9uIGhlcmUsIG5vdyB0aGF0CisJICogd2UgaGF2ZSBjZXJ0YWluIGtleSBwYXJhbWV0ZXJzCisJICogKGRldl9mbGFncyBhbmQgaW50ZXJmYWNlKSAqLworCWlmIChwaHlkZXYtPmRydi0+Y29uZmlnX2luaXQpIHsKKwkJaW50IGVycjsKKworCQllcnIgPSBwaHlkZXYtPmRydi0+Y29uZmlnX2luaXQocGh5ZGV2KTsKKworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCiAJcmV0dXJuIHBoeWRldjsKIH0KIEVYUE9SVF9TWU1CT0wocGh5X2F0dGFjaCk7CkBAIC00MjcsNiArNDQzLDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChnZW5waHlfdXBkYXRlX2xpbmspOwogCiAvKiBnZW5waHlfcmVhZF9zdGF0dXMKICAqCkBAIC02MTEsMTMgKzYyOCw4IEBACiAKIAlzcGluX3VubG9jaygmcGh5ZGV2LT5sb2NrKTsKIAotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHBoeWRldi0+ZHJ2LT5jb25maWdfaW5pdCkKLQkJZXJyID0gcGh5ZGV2LT5kcnYtPmNvbmZpZ19pbml0KHBoeWRldik7Ci0KIAlyZXR1cm4gZXJyOworCiB9CiAKIHN0YXRpYyBpbnQgcGh5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCAwYWRlZTczLi4zMTVkNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCiAJcG8gPSBnZXRfaXRlbSgodW5zaWduZWQgbG9uZykgcGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7CiAJaWYgKHBvICE9IE5VTEwpCi0JCXJldHVybiBza19yZWNlaXZlX3NrYihza19wcHBveChwbyksIHNrYik7CisJCXJldHVybiBza19yZWNlaXZlX3NrYihza19wcHBveChwbyksIHNrYiwgMCk7CiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggYjk3N2VkOC4uNDVkM2NhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC01NzEsOCArNTcxLDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCi0JdmFsID0gKG1kaW9fcmVhZChpb2FkZHIsIE1JSV9CTUNSKSB8IEJNQ1JfUkVTRVQpICYgMHhmZmZmOwotCW1kaW9fd3JpdGUoaW9hZGRyLCBNSUlfQk1DUiwgdmFsKTsKKwltZGlvX3dyaXRlKGlvYWRkciwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIE1JSV9CTUNSKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9jaGVja19saW5rX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTQwNiw2ICsxNDA2LDIyIEBACiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgcnRsODE2OV9waHlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQoreworCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKKwlpbnQgaTsKKworCXRwLT5waHlfcmVzZXRfZW5hYmxlKGlvYWRkcik7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWlmICghdHAtPnBoeV9yZXNldF9wZW5kaW5nKGlvYWRkcikpCisJCQlyZXR1cm47CisJCW1zbGVlcCgxKTsKKwl9CisJaWYgKG5ldGlmX21zZ19saW5rKHRwKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogUEhZIHJlc2V0IGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwpAQCAtMTQzNCw2ICsxNDUwLDggQEAKIAogCXJ0bDgxNjlfbGlua19vcHRpb24oYm9hcmRfaWR4LCAmYXV0b25lZywgJnNwZWVkLCAmZHVwbGV4KTsKIAorCXJ0bDgxNjlfcGh5X3Jlc2V0KGRldiwgdHApOworCiAJcnRsODE2OV9zZXRfc3BlZWQoZGV2LCBhdXRvbmVnLCBzcGVlZCwgZHVwbGV4KTsKIAogCWlmICgoUlRMX1I4KFBIWXN0YXR1cykgJiBUQklfRW5hYmxlKSAmJiBuZXRpZl9tc2dfbGluayh0cCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2V0aHRvb2wuYwppbmRleCBlNWNiNWI1Li4zNjQ2MDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tldGh0b29sLmMKQEAgLTU4MSw2ICs1ODEsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZXRSZWdzTGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDB4NDAwMDsKK30KKworLyoKKyAqIFJldHVybnMgY29weSBvZiB3aG9sZSBjb250cm9sIHJlZ2lzdGVyIHJlZ2lvbgorICogTm90ZTogc2tpcCBSQU0gYWRkcmVzcyByZWdpc3RlciBiZWNhdXNlIGFjY2Vzc2luZyBpdCB3aWxsCisgKiAJIGNhdXNlIGJ1cyBoYW5ncyEKKyAqLworc3RhdGljIHZvaWQgZ2V0UmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAorCQkJICB2b2lkICpwKQoreworCURFVl9ORVQgKnBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOworCWNvbnN0IHZvaWQgX19pb21lbSAqaW8gPSBwTmV0LT5wQUMtPklvQmFzZTsKKworCXJlZ3MtPnZlcnNpb24gPSAxOworCW1lbXNldChwLCAwLCByZWdzLT5sZW4pOworCW1lbWNweV9mcm9taW8ocCwgaW8sIEIzX1JBTV9BRERSKTsKKworCW1lbWNweV9mcm9taW8ocCArIEIzX1JJX1dUT19SMSwgaW8gKyBCM19SSV9XVE9fUjEsCisJCSAgICAgIHJlZ3MtPmxlbiAtIEIzX1JJX1dUT19SMSk7Cit9CisKIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBTa0dlRXRodG9vbE9wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGdldFNldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gc2V0U2V0dGluZ3MsCkBAIC01OTksNCArNjIzLDYgQEAKIAkuc2V0X3R4X2NzdW0JCT0gc2V0VHhDc3VtLAogCS5nZXRfcnhfY3N1bQkJPSBnZXRSeENzdW0sCiAJLnNldF9yeF9jc3VtCQk9IHNldFJ4Q3N1bSwKKwkuZ2V0X3JlZ3MJCT0gZ2V0UmVncywKKwkuZ2V0X3JlZ3NfbGVuCQk9IGdldFJlZ3NMZW4sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYwppbmRleCBkNDkxM2MzLi45MmQxMWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZ2UuYwpAQCAtMTEzLDYgKzExMyw4IEBACiAjaW5jbHVkZQk8bGludXgvaW5pdC5oPgogI2luY2x1ZGUJPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZQk8bGludXgvaXAuaD4KKyNpbmNsdWRlCTxsaW51eC9taWkuaD4KKyNpbmNsdWRlCTxsaW51eC9tbS5oPgogCiAjaW5jbHVkZQkiaC9za2RydjFzdC5oIgogI2luY2x1ZGUJImgvc2tkcnYybmQuaCIKQEAgLTE1NjEsNyArMTU2Myw3IEBACiAKIAlpZiAocE1lc3NhZ2UtPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCXUxNiBoZHJsZW4gPSBwTWVzc2FnZS0+aC5yYXcgLSBwTWVzc2FnZS0+ZGF0YTsKLQkJdTE2IG9mZnNldCA9IGhkcmxlbiArIHBNZXNzYWdlLT5jc3VtOworCQl1MTYgb2Zmc2V0ID0gaGRybGVuICsgcE1lc3NhZ2UtPmNzdW1fb2Zmc2V0OwogCiAJCWlmICgocE1lc3NhZ2UtPmguaXBpcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQICkgJiYKIAkJCShwQUMtPkdJbmkuR0lDaGlwUmV2ID09IDApICYmCkBAIC0xNjgwLDcgKzE2ODIsNyBAQAogCSovCiAJaWYgKHBNZXNzYWdlLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQl1MTYgaGRybGVuID0gcE1lc3NhZ2UtPmgucmF3IC0gcE1lc3NhZ2UtPmRhdGE7Ci0JCXUxNiBvZmZzZXQgPSBoZHJsZW4gKyBwTWVzc2FnZS0+Y3N1bTsKKwkJdTE2IG9mZnNldCA9IGhkcmxlbiArIHBNZXNzYWdlLT5jc3VtX29mZnNldDsKIAogCQlDb250cm9sID0gQk1VX1NURldEOwogCkBAIC0yODQzLDYgKzI4NDUsNTYgQEAKIAlyZXR1cm4oJnBBQy0+c3RhdHMpOwogfSAvKiBTa0dlU3RhdHMgKi8KIAorLyoKKyAqIEJhc2ljIE1JSSByZWdpc3RlciBhY2Nlc3MKKyAqLworc3RhdGljIGludCBTa0dlTWlpSW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSwgaW50IGNtZCkKK3sKKwlERVZfTkVUICpwTmV0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlTS19BQyAqcEFDID0gcE5ldC0+cEFDOworCVNLX0lPQyBJb0MgPSBwQUMtPklvQmFzZTsKKwlpbnQgUG9ydCA9IHBOZXQtPlBvcnROcjsKKwlTS19HRVBPUlQgKnBQcnQgPSAmcEFDLT5HSW5pLkdQW1BvcnRdOworCXVuc2lnbmVkIGxvbmcgRmxhZ3M7CisJaW50IGVyciA9IDA7CisJaW50IHJlZyA9IGRhdGEtPnJlZ19udW0gJiAweDFmOworCVNLX1UxNiB2YWwgPSBkYXRhLT52YWxfaW47CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CS8qIFBoeSBzdGlsbCBpbiByZXNldCAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7CisJc3dpdGNoKGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCWRhdGEtPnBoeV9pZCA9IHBQcnQtPlBoeUFkZHI7CisKKwkJLyogZmFsbHRocnUgKi8KKwljYXNlIFNJT0NHTUlJUkVHOgorCQlpZiAocEFDLT5HSW5pLkdJR2VuZXNpcykKKwkJCVNrWG1QaHlSZWFkKHBBQywgSW9DLCBQb3J0LCByZWcsICZ2YWwpOworCQllbHNlCisJCQlTa0dtUGh5UmVhZChwQUMsIElvQywgUG9ydCwgcmVnLCAmdmFsKTsKKworCQlkYXRhLT52YWxfb3V0ID0gdmFsOworCQlicmVhazsKKworCWNhc2UgU0lPQ1NNSUlSRUc6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCWVyciA9IC1FUEVSTTsKKworCQllbHNlIGlmIChwQUMtPkdJbmkuR0lHZW5lc2lzKQorCQkJU2tYbVBoeVdyaXRlKHBBQywgSW9DLCBQb3J0LCByZWcsIHZhbCk7CisJCWVsc2UKKwkJCVNrR21QaHlXcml0ZShwQUMsIElvQywgUG9ydCwgcmVnLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwl9CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBBQy0+U2xvd1BhdGhMb2NrLCBGbGFncyk7CisJcmV0dXJuIGVycjsKK30KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yODc2LDYgKzI5MjgsOSBAQAogCXBOZXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXBBQyA9IHBOZXQtPnBBQzsKIAkKKwlpZiAoY21kID09IFNJT0NHTUlJUEhZIHx8IGNtZCA9PSBTSU9DU01JSVJFRyB8fCBjbWQgPT0gU0lPQ0dNSUlSRUcpCisJICAgIHJldHVybiBTa0dlTWlpSW9jdGwoZGV2LCBpZl9taWkocnEpLCBjbWQpOworCiAJaWYoY29weV9mcm9tX3VzZXIoJklvY3RsLCBycS0+aWZyX2RhdGEsIHNpemVvZihTS19HRV9JT0NUTCkpKSB7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCBiMjk0OTAzLi41NTEzOTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5jCkBAIC0yMTU0LDggKzIxNTQsNiBAQAogCWludCBwb3J0ID0gc2tnZS0+cG9ydDsKIAl1MTYgY3RybDsKIAotCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfSU5UX01BU0ssIDApOwotCiAJY3RybCA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwogCWN0cmwgJj0gfihHTV9HUENSX1JYX0VOQSB8IEdNX0dQQ1JfVFhfRU5BKTsKIAlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fR1BfQ1RSTCwgY3RybCk7CkBAIC0yMTY3LDcgKzIxNjUsNiBAQAogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0FVTkVfQURWLCBjdHJsKTsKIAl9CiAKLQl5dWtvbl9yZXNldChodywgcG9ydCk7CiAJc2tnZV9saW5rX2Rvd24oc2tnZSk7CiAKIAl5dWtvbl9pbml0KGh3LCBwb3J0KTsKQEAgLTIyNTUsNiArMjI1Miw3IEBACiB7CiAJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CiAJaW50IHBvcnQgPSBza2dlLT5wb3J0OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShza2dlLT5uZXRkZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNrZ2UtPm5ldGRldik7CkBAIC0yMjY4LDYgKzIyNjYsOCBAQAogCQl5dWtvbl9pbml0KGh3LCBwb3J0KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKKworCWRldi0+c2V0X211bHRpY2FzdF9saXN0KGRldik7CiB9CiAKIC8qIEJhc2ljIE1JSSBzdXBwb3J0ICovCkBAIC0yNTY1LDcgKzI1NjUsNyBAQAogCiAJCXRkLT5jc3VtX29mZnMgPSAwOwogCQl0ZC0+Y3N1bV9zdGFydCA9IG9mZnNldDsKLQkJdGQtPmNzdW1fd3JpdGUgPSBvZmZzZXQgKyBza2ItPmNzdW07CisJCXRkLT5jc3VtX3dyaXRlID0gb2Zmc2V0ICsgc2tiLT5jc3VtX29mZnNldDsKIAl9IGVsc2UKIAkJY29udHJvbCA9IEJNVV9DSEVDSzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDE2NjE2ZjUuLjg0MmFiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIDB4OUUwMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0YjAwKSB9LAkvKiBER0UtNTYwVCAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RMSU5LLCAweDQwMDEpIH0sIAkvKiBER0UtNTUwU1ggKi8KKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0QjAyKSB9LAkvKiBER0UtNTYwU1ggKi8KIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0MikgfSwKQEAgLTY3NiwxNyArNjc3LDE1IEBACiAJLyogRmx1c2ggUnggTUFDIEZJRk8gb24gYW55IGZsb3cgY29udHJvbCBvciBlcnJvciAqLwogCXNreTJfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9GTF9NU0spLCBHTVJfRlNfQU5ZX0VSUik7CiAKLQkvKiBTZXQgdGhyZXNob2xkIHRvIDB4YSAoNjQgYnl0ZXMpCi0JICogIEFTRiBkaXNhYmxlZCBzbyBubyBuZWVkIHRvIGRvIFdBIGRldiAjNC4zMAotCSAqLwotCXNreTJfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9GTF9USFIpLCBSWF9HTUZfRkxfVEhSX0RFRik7CisJLyogU2V0IHRocmVzaG9sZCB0byAweGEgKDY0IGJ5dGVzKSArIDEgdG8gd29ya2Fyb3VuZCBwYXVzZSBidWcgICovCisJc2t5Ml93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0ZMX1RIUiksIFJYX0dNRl9GTF9USFJfREVGKzEpOwogCiAJLyogQ29uZmlndXJlIFR4IE1BQyBGSUZPICovCiAJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwgR01GX1JTVF9DTFIpOwogCXNreTJfd3JpdGUxNihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfT1BFUl9PTik7CiAKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSB7Ci0JCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0xQX1RIUiksIDUxMi84KTsKKwkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBSWF9HTUZfTFBfVEhSKSwgNzY4LzgpOwogCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0dNRl9VUF9USFIpLCAxMDI0LzgpOwogCQlpZiAoaHctPmRldltwb3J0XS0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7CiAJCQkvKiBzZXQgVHggR01BQyBGSUZPIEFsbW9zdCBFbXB0eSBUaHJlc2hvbGQgKi8KQEAgLTEwNjAsNyArMTA1OSw4IEBACiAJc2t5Mi0+cnhfcHV0ID0gc2t5Mi0+cnhfbmV4dCA9IDA7CiAJc2t5Ml9xc2V0KGh3LCByeHEpOwogCi0JaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSAmJiBody0+Y2hpcF9yZXYgPj0gMikgeworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UgJiYKKwkgICAgKGh3LT5jaGlwX3JldiA9PSBDSElQX1JFVl9ZVV9FQ19VX0ExIHx8IGh3LT5jaGlwX3JldiA9PSBDSElQX1JFVl9ZVV9FQ19VX0IwKSkgewogCQkvKiBNQUMgUnggUkFNIFJlYWQgaXMgY29udHJvbGxlZCBieSBoYXJkd2FyZSAqLwogCQlza3kyX3dyaXRlMzIoaHcsIFFfQUREUihyeHEsIFFfRiksIEZfTV9SWF9SQU1fRElTKTsKIAl9CkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCQl1MzIgdGNwc3VtOwogCiAJCXRjcHN1bSA9IG9mZnNldCA8PCAxNjsJCS8qIHN1bSBzdGFydCAqLwotCQl0Y3BzdW0gfD0gb2Zmc2V0ICsgc2tiLT5jc3VtOwkvKiBzdW0gd3JpdGUgKi8KKwkJdGNwc3VtIHw9IG9mZnNldCArIHNrYi0+Y3N1bV9vZmZzZXQ7CS8qIHN1bSB3cml0ZSAqLwogCiAJCWN0cmwgPSBDQUxTVU0gfCBXUl9TVU0gfCBJTklUX1NVTSB8IExPQ0tfU1VNOwogCQlpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKQpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAKIAkJCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfZG9uZShza3kyKSkpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBkb25lICV1XG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGlkeCk7Ci0JCQlkZXZfa2ZyZWVfc2tiKHJlLT5za2IpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkocmUtPnNrYik7CiAJCX0KIAogCQlsZS0+b3Bjb2RlID0gMDsJLyogcGFyYW5vaWEgKi8KQEAgLTE1MDksNyArMTUwOSw3IEBACiAKIAkvKiBXQSBmb3IgZGV2LiAjNC4yMDkgKi8KIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VCi0JICAgICYmIGh3LT5jaGlwX3JldiA9PSBDSElQX1JFVl9ZVV9FQ19VX0ExKQorCSAgICAmJiAoaHctPmNoaXBfcmV2ID09IENISVBfUkVWX1lVX0VDX1VfQTEgfHwgaHctPmNoaXBfcmV2ID09IENISVBfUkVWX1lVX0VDX1VfQjApKQogCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQ1RSTF9UKSwKIAkJCSAgICAgc2t5Mi0+c3BlZWQgIT0gU1BFRURfMTAwMCA/CiAJCQkgICAgIFRYX1NURldfRU5BIDogVFhfU1RGV19ESVMpOwpAQCAtMjA2NSw3ICsyMDY1LDcgQEAKIAkJY2FzZSBPUF9SWFNUQVQ6CiAJCQlza2IgPSBza3kyX3JlY2VpdmUoZGV2LCBsZW5ndGgsIHN0YXR1cyk7CiAJCQlpZiAoIXNrYikKLQkJCQlicmVhazsKKwkJCQlnb3RvIGZvcmNlX3VwZGF0ZTsKIAogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC0yMDgxLDggKzIwODEsOCBAQAogCiAJCQkvKiBVcGRhdGUgcmVjZWl2ZXIgYWZ0ZXIgMTYgZnJhbWVzICovCiAJCQlpZiAoKytidWZfd3JpdGVbbGUtPmxpbmtdID09IFJYX0JVRl9XUklURSkgewotCQkJCXNreTJfcHV0X2lkeChodywgcnhxYWRkcltsZS0+bGlua10sCi0JCQkJCSAgICAgc2t5Mi0+cnhfcHV0KTsKK2ZvcmNlX3VwZGF0ZToKKwkJCQlza3kyX3B1dF9pZHgoaHcsIHJ4cWFkZHJbbGUtPmxpbmtdLCBza3kyLT5yeF9wdXQpOwogCQkJCWJ1Zl93cml0ZVtsZS0+bGlua10gPSAwOwogCQkJfQogCkBAIC0zMzExLDcgKzMzMTEsNyBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfSVJRX1NXKSB7Ci0JCWh3LT5tc2lfZGV0ZWN0ZWQgPSAxOworCQlody0+bXNpID0gMTsKIAkJd2FrZV91cCgmaHctPm1zaV93YWl0KTsKIAkJc2t5Ml93cml0ZTgoaHcsIEIwX0NUU1QsIENTX0NMX1NXX0lSUSk7CiAJfQpAQCAtMzMzMCw3ICszMzMwLDcgQEAKIAogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfSVJRX1NXKTsKIAotCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2t5Ml90ZXN0X2ludHIsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgaHcpOworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgc2t5Ml90ZXN0X2ludHIsIDAsIERSVl9OQU1FLCBodyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2Fubm90IGFzc2lnbiBpcnEgJWRcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKQEAgLTMzNDAsOSArMzM0MCw5IEBACiAJc2t5Ml93cml0ZTgoaHcsIEIwX0NUU1QsIENTX1NUX1NXX0lSUSk7CiAJc2t5Ml9yZWFkOChodywgQjBfQ1RTVCk7CiAKLQl3YWl0X2V2ZW50X3RpbWVvdXQoaHctPm1zaV93YWl0LCBody0+bXNpX2RldGVjdGVkLCBIWi8xMCk7CisJd2FpdF9ldmVudF90aW1lb3V0KGh3LT5tc2lfd2FpdCwgaHctPm1zaSwgSFovMTApOwogCi0JaWYgKCFody0+bXNpX2RldGVjdGVkKSB7CisJaWYgKCFody0+bXNpKSB7CiAJCS8qIE1TSSB0ZXN0IGZhaWxlZCwgZ28gYmFjayB0byBJTlR4IG1vZGUgKi8KIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBObyBpbnRlcnJ1cHQgZ2VuZXJhdGVkIHVzaW5nIE1TSSwgIgogCQkgICAgICAgInN3aXRjaGluZyB0byBJTlR4IG1vZGUuXG4iLApAQCAtMzQ3NSw3ICszNDc1LDggQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCX0KIAotCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgIHNreTJfaW50ciwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgaHcpOworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgIHNreTJfaW50ciwgaHctPm1zaSA/IDAgOiBJUlFGX1NIQVJFRCwKKwkJCSAgZGV2LT5uYW1lLCBodyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2Fubm90IGFzc2lnbiBpcnEgJWRcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKQEAgLTM1MDUsNyArMzUwNiw4IEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfdW5yZWdpc3RlcjoKLQlwY2lfZGlzYWJsZV9tc2kocGRldik7CisJaWYgKGh3LT5tc2kpCisJCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogZXJyX291dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihkZXYpOwpAQCAtMzU0OCw3ICszNTUwLDggQEAKIAlza3kyX3JlYWQ4KGh3LCBCMF9DVFNUKTsKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgaHcpOwotCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwlpZiAoaHctPm1zaSkKKwkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX0xFX0JZVEVTLCBody0+c3RfbGUsIGh3LT5zdF9kbWEpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDZkMmEyM2YuLjc3NjA1NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTM4Myw4ICszODMsMTMgQEAKIAlDSElQX1JFVl9ZVV9FQ19BMiAgICA9IDEsICAvKiBDaGlwIFJldi4gZm9yIFl1a29uLUVDIEEyICovCiAJQ0hJUF9SRVZfWVVfRUNfQTMgICAgPSAyLCAgLyogQ2hpcCBSZXYuIGZvciBZdWtvbi1FQyBBMyAqLwogCi0JQ0hJUF9SRVZfWVVfRUNfVV9BMCAgPSAwLAotCUNISVBfUkVWX1lVX0VDX1VfQTEgID0gMSwKKwlDSElQX1JFVl9ZVV9FQ19VX0EwICA9IDEsCisJQ0hJUF9SRVZfWVVfRUNfVV9BMSAgPSAyLAorCUNISVBfUkVWX1lVX0VDX1VfQjAgID0gMywKKworCUNISVBfUkVWX1lVX0ZFX0ExICAgID0gMSwKKwlDSElQX1JFVl9ZVV9GRV9BMiAgICA9IDIsCisKIH07CiAKIC8qCUIyX1kyX0NMS19HQVRFCSA4IGJpdAlDbG9jayBHYXRpbmcgKFl1a29uLTIgb25seSkgKi8KQEAgLTE4OTUsNyArMTkwMCw3IEBACiAJZG1hX2FkZHJfdCAgIAkgICAgIHN0X2RtYTsKIAogCXN0cnVjdCB0aW1lcl9saXN0ICAgIGlkbGVfdGltZXI7Ci0JaW50CQkgICAgIG1zaV9kZXRlY3RlZDsKKwlpbnQJCSAgICAgbXNpOwogCXdhaXRfcXVldWVfaGVhZF90ICAgIG1zaV93YWl0OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDQxODEzOGQuLmNlZjdlNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTY0NCwyMCArNjQ0LDEyIEBACiAJc3RydWN0IHNwaWRlcl9uZXRfZGVzY3IgKmRlc2NyOwogCWRtYV9hZGRyX3QgYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGxlbmd0aDsKIAotCWxlbmd0aCA9IHNrYi0+bGVuOwotCWlmIChsZW5ndGggPCBFVEhfWkxFTikgewotCQlpZiAoc2tiX3BhZChza2IsIEVUSF9aTEVOLWxlbmd0aCkpCi0JCQlyZXR1cm4gMDsKLQkJbGVuZ3RoID0gRVRIX1pMRU47Ci0JfQotCi0JYnVmID0gcGNpX21hcF9zaW5nbGUoY2FyZC0+cGRldiwgc2tiLT5kYXRhLCBsZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCWJ1ZiA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYnVmKSkgewogCQlpZiAobmV0aWZfbXNnX3R4X2VycihjYXJkKSAmJiBuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcl9lcnIoImNvdWxkIG5vdCBpb21tdS1tYXAgcGFja2V0ICglcCwgJWkpLiAiCi0JCQkJICAiRHJvcHBpbmcgcGFja2V0XG4iLCBza2ItPmRhdGEsIGxlbmd0aCk7CisJCQkJICAiRHJvcHBpbmcgcGFja2V0XG4iLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJY2FyZC0+c3BpZGVyX3N0YXRzLnR4X2lvbW11X21hcF9lcnJvcisrOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC02NjcsNyArNjU5LDcgQEAKIAljYXJkLT50eF9jaGFpbi5oZWFkID0gZGVzY3ItPm5leHQ7CiAKIAlkZXNjci0+YnVmX2FkZHIgPSBidWY7Ci0JZGVzY3ItPmJ1Zl9zaXplID0gbGVuZ3RoOworCWRlc2NyLT5idWZfc2l6ZSA9IHNrYi0+bGVuOwogCWRlc2NyLT5uZXh0X2Rlc2NyX2FkZHIgPSAwOwogCWRlc2NyLT5za2IgPSBza2I7CiAJZGVzY3ItPmRhdGFfc3RhdHVzID0gMDsKQEAgLTgwMiw4ICs3OTQsOCBAQAogCiAJCS8qIHVubWFwIHRoZSBza2IgKi8KIAkJaWYgKHNrYikgewotCQkJaW50IGxlbiA9IHNrYi0+bGVuIDwgRVRIX1pMRU4gPyBFVEhfWkxFTiA6IHNrYi0+bGVuOwotCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5wZGV2LCBidWZfYWRkciwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+cGRldiwgYnVmX2FkZHIsIHNrYi0+bGVuLAorCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJfQogCX0KQEAgLTE2NDEsNyArMTYzMyw3IEBACiAJCQkgICAgIFNQSURFUl9ORVRfSU5UMl9NQVNLX1ZBTFVFKTsKIAogCXNwaWRlcl9uZXRfd3JpdGVfcmVnKGNhcmQsIFNQSURFUl9ORVRfR0RURE1BQ0NOVFIsCi0JCQkgICAgIFNQSURFUl9ORVRfR0RUQlNUQSB8IFNQSURFUl9ORVRfR0RURENFSURJUyk7CisJCQkgICAgIFNQSURFUl9ORVRfR0RUQlNUQSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCmluZGV4IGIzYjQ2MTEuLjNlMTk2ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaAorKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgX1NQSURFUl9ORVRfSAogI2RlZmluZSBfU1BJREVSX05FVF9ICiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4xIEEiCisjZGVmaW5lIFZFUlNJT04gIjEuNiBBIgogCiAjaW5jbHVkZSAic3VuZ2VtX3BoeS5oIgogCkBAIC0yMTcsOCArMjE3LDcgQEAKICNkZWZpbmUgU1BJREVSX05FVF9HRFRCU1RBICAgICAgICAgICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgU1BJREVSX05FVF9HRFREQ0VJRElTICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgU1BJREVSX05FVF9ETUFfVFhfVkFMVUUgICAgICAgIFNQSURFUl9ORVRfVFhfRE1BX0VOIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJREVSX05FVF9HRFRCU1RBIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJREVSX05FVF9HRFREQ0VJRElTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElERVJfTkVUX0dEVEJTVEEKIAogI2RlZmluZSBTUElERVJfTkVUX0RNQV9UWF9GRU5EX1ZBTFVFCTB4MDAwMzAwMDMKIApAQCAtMzI4LDcgKzMyNyw4IEBACiAJU1BJREVSX05FVF9HUklTUEROR0lOVAogfTsKIAotI2RlZmluZSBTUElERVJfTkVUX1RYSU5UCSggKDEgPDwgU1BJREVSX05FVF9HRFRGRENJTlQpICkKKyNkZWZpbmUgU1BJREVSX05FVF9UWElOVAkoICgxIDw8IFNQSURFUl9ORVRfR0RURkRDSU5UKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgU1BJREVSX05FVF9HRFREQ0VJTlQpICkKIAogLyogV2UgcmVseSBvbiBmbGFnZ2VkIGRlc2NyaXB0b3IgaW50ZXJydXB0cyAqLwogI2RlZmluZSBTUElERVJfTkVUX1JYSU5UCSggKDEgPDwgU1BJREVSX05FVF9HREFGRENJTlQpICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IDdhMGFlZTYuLmJmODczZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBQcm9jZXNzb3IgdHlwZSBmb3IgY2FjaGUgYWxpZ25tZW50LiAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCmluZGV4IGI4NjVkYjMuLjQ3YTFjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IDQxYzUwM2QuLmMwNmVjYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMjY0LDggKzI2NCw2IEBACiAJQVNJQ0N0cmwgPSAweDMwLAogCUVFRGF0YSA9IDB4MzQsCiAJRUVDdHJsID0gMHgzNiwKLQlUeFN0YXJ0VGhyZXNoID0gMHgzYywKLQlSeEVhcmx5VGhyZXNoID0gMHgzZSwKIAlGbGFzaEFkZHIgPSAweDQwLAogCUZsYXNoRGF0YSA9IDB4NDQsCiAJVHhTdGF0dXMgPSAweDQ2LApAQCAtNzkwLDYgKzc4OCw3IEBACiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBucC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCiAJLyogRG8gd2UgbmVlZCB0byByZXNldCB0aGUgY2hpcD8/PyAqLwpAQCAtODM0LDYgKzgzMywxMCBAQAogCQlpb3dyaXRlOCgweDAxLCBpb2FkZHIgKyBEZWJ1Z0N0cmwxKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJcmVzZXRfdHgoZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOworCiAJaW93cml0ZTE2IChTdGF0c0VuYWJsZSB8IFJ4RW5hYmxlIHwgVHhFbmFibGUsIGlvYWRkciArIE1BQ0N0cmwxKTsKIAogCWlmIChuZXRpZl9tc2dfaWZ1cChucCkpCkBAIC0xMDgxLDYgKzEwODQsOCBAQAogCiAJLyogZnJlZSBhbGwgdHggc2tidWZmICovCiAJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7CisJCW5wLT50eF9yaW5nW2ldLm5leHRfZGVzYyA9IDA7CisKIAkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKIAkJaWYgKHNrYikgewogCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGNpX2RldiwKQEAgLTEwOTYsNiArMTEwMSwxMCBAQAogCX0KIAlucC0+Y3VyX3R4ID0gbnAtPmRpcnR5X3R4ID0gMDsKIAlucC0+Y3VyX3Rhc2sgPSAwOworCisJbnAtPmxhc3RfdHggPSBOVUxMOworCWlvd3JpdGU4KDEyNywgaW9hZGRyICsgVHhETUFQb2xsUGVyaW9kKTsKKwogCWlvd3JpdGUxNiAoU3RhdHNFbmFibGUgfCBSeEVuYWJsZSB8IFR4RW5hYmxlLCBpb2FkZHIgKyBNQUNDdHJsMSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTExLDYgKzExMjAsNyBAQAogCWludCB0eF9jbnQ7CiAJaW50IHR4X3N0YXR1czsKIAlpbnQgaGFuZGxlZCA9IDA7CisJaW50IGk7CiAKIAogCWRvIHsKQEAgLTExNTMsMjEgKzExNjMsMjQgQEAKIAkJCQkJCW5wLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCQlpZiAodHhfc3RhdHVzICYgMHgwMikKIAkJCQkJCW5wLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisKIAkJCQkJLyoKIAkJCQkJKiogVGhpcyByZXNldCBoYXMgYmVlbiB2ZXJpZmllZCBvbgogCQkJCQkqKiBERkUtNTgwVFggYm9hcmRzICEgcGhkbUBtYWNxZWwuYmUuCiAJCQkJCSovCiAJCQkJCWlmICh0eF9zdGF0dXMgJiAweDEwKSB7CS8qIFR4VW5kZXJydW4gKi8KLQkJCQkJCXVuc2lnbmVkIHNob3J0IHR4dGhyZXNob2xkOwotCi0JCQkJCQl0eHRocmVzaG9sZCA9IGlvcmVhZDE2IChpb2FkZHIgKyBUeFN0YXJ0VGhyZXNoKTsKIAkJCQkJCS8qIFJlc3RhcnQgVHggRklGTyBhbmQgdHJhbnNtaXR0ZXIgKi8KIAkJCQkJCXN1bmRhbmNlX3Jlc2V0KGRldiwgKE5ldHdvcmtSZXNldHxGSUZPUmVzZXR8VHhSZXNldCkgPDwgMTYpOwotCQkJCQkJaW93cml0ZTE2ICh0eHRocmVzaG9sZCwgaW9hZGRyICsgVHhTdGFydFRocmVzaCk7CiAJCQkJCQkvKiBObyBuZWVkIHRvIHJlc2V0IHRoZSBUeCBwb2ludGVyIGhlcmUgKi8KIAkJCQkJfQotCQkJCQkvKiBSZXN0YXJ0IHRoZSBUeC4gKi8KLQkJCQkJaW93cml0ZTE2IChUeEVuYWJsZSwgaW9hZGRyICsgTUFDQ3RybDEpOworCQkJCQkvKiBSZXN0YXJ0IHRoZSBUeC4gTmVlZCB0byBtYWtlIHN1cmUgdHggZW5hYmxlZCAqLworCQkJCQlpID0gMTA7CisJCQkJCWRvIHsKKwkJCQkJCWlvd3JpdGUxNihpb3JlYWQxNihpb2FkZHIgKyBNQUNDdHJsMSkgfCBUeEVuYWJsZSwgaW9hZGRyICsgTUFDQ3RybDEpOworCQkJCQkJaWYgKGlvcmVhZDE2KGlvYWRkciArIE1BQ0N0cmwxKSAmIFR4RW5hYmxlZCkKKwkJCQkJCQlicmVhazsKKwkJCQkJCW1kZWxheSgxKTsKKwkJCQkJfSB3aGlsZSAoLS1pKTsKIAkJCQl9CiAJCQkJLyogWXVwLCB0aGlzIGlzIGEgZG9jdW1lbnRhdGlvbiBidWcuICBJdCBjb3N0IG1lICpob3VycyouICovCiAJCQkJaW93cml0ZTE2ICgwLCBpb2FkZHIgKyBUeFN0YXR1cyk7CkBAIC0xNjI5LDYgKzE2NDIsMTQgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBpOwogCisJLyogV2FpdCBhbmQga2lsbCB0YXNrbGV0ICovCisJdGFza2xldF9raWxsKCZucC0+cnhfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZucC0+dHhfdGFza2xldCk7CisJbnAtPmN1cl90eCA9IDA7CisJbnAtPmRpcnR5X3R4ID0gMDsKKwlucC0+Y3VyX3Rhc2sgPSAwOworCW5wLT5sYXN0X3R4ID0gTlVMTDsKKwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAogCWlmIChuZXRpZl9tc2dfaWZkb3duKG5wKSkgewpAQCAtMTY0MywxMiArMTY2NCwyNiBAQAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCiAJaW93cml0ZTE2KDB4MDAwMCwgaW9hZGRyICsgSW50ckVuYWJsZSk7CiAKKwkvKiBEaXNhYmxlIFJ4IGFuZCBUeCBETUEgZm9yIHNhZmVseSByZWxlYXNlIHJlc291cmNlICovCisJaW93cml0ZTMyKDB4NTAwLCBpb2FkZHIgKyBETUFDdHJsKTsKKwogCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwogCWlvd3JpdGUxNihUeERpc2FibGUgfCBSeERpc2FibGUgfCBTdGF0c0Rpc2FibGUsIGlvYWRkciArIE1BQ0N0cmwxKTsKIAotCS8qIFdhaXQgYW5kIGtpbGwgdGFza2xldCAqLwotCXRhc2tsZXRfa2lsbCgmbnAtPnJ4X3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmbnAtPnR4X3Rhc2tsZXQpOworICAgIAlmb3IgKGkgPSAyMDAwOyBpID4gMDsgaS0tKSB7CisgCQlpZiAoKGlvcmVhZDMyKGlvYWRkciArIERNQUN0cmwpICYgMHhjMDAwKSA9PSAwKQorCQkJYnJlYWs7CisJCW1kZWxheSgxKTsKKyAgICAJfQorCisgICAgCWlvd3JpdGUxNihHbG9iYWxSZXNldCB8IERNQVJlc2V0IHwgRklGT1Jlc2V0IHwgTmV0d29ya1Jlc2V0LAorCQkJaW9hZGRyICtBU0lDQ3RybCArIDIpOworCisgICAgCWZvciAoaSA9IDIwMDA7IGkgPiAwOyBpLS0pIHsKKyAJCWlmICgoaW9yZWFkMTYoaW9hZGRyICsgQVNJQ0N0cmwgKzIpICYgUmVzZXRCdXN5KSA9PSAwKQorCQkJYnJlYWs7CisJCW1kZWxheSgxKTsKKyAgICAJfQogCiAjaWZkZWYgX19pMzg2X18KIAlpZiAobmV0aWZfbXNnX2h3KG5wKSkgewpAQCAtMTY4Niw2ICsxNzIxLDcgQEAKIAkJfQogCX0KIAlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKKwkJbnAtPnR4X3JpbmdbaV0ubmV4dF9kZXNjID0gMDsKIAkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKIAkJaWYgKHNrYikgewogCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGNpX2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKaW5kZXggMjUzZTk2ZS4uY2Y0NGU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmMKQEAgLTU2LDYgKzU2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMTAzMCw3ICsxMDMxLDcgQEAKIAkJdTY0IGNzdW1fc3RhcnRfb2ZmLCBjc3VtX3N0dWZmX29mZjsKIAogCQljc3VtX3N0YXJ0X29mZiA9ICh1NjQpIChza2ItPmgucmF3IC0gc2tiLT5kYXRhKTsKLQkJY3N1bV9zdHVmZl9vZmYgPSAodTY0KSAoKHNrYi0+aC5yYXcgKyBza2ItPmNzdW0pIC0gc2tiLT5kYXRhKTsKKwkJY3N1bV9zdHVmZl9vZmYgPSBjc3VtX3N0YXJ0X29mZiArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAKIAkJY3RybCA9IChUWERDVFJMX0NFTkFCIHwKIAkJCShjc3VtX3N0YXJ0X29mZiA8PCAxNSkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCA5ZDdjZDEzLi5lZjY3MTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5obWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5obWUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTIyNzIsNyArMjI3Myw3IEBACiAJCXUzMiBjc3VtX3N0YXJ0X29mZiwgY3N1bV9zdHVmZl9vZmY7CiAKIAkJY3N1bV9zdGFydF9vZmYgPSAodTMyKSAoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSk7Ci0JCWNzdW1fc3R1ZmZfb2ZmID0gKHUzMikgKChza2ItPmgucmF3ICsgc2tiLT5jc3VtKSAtIHNrYi0+ZGF0YSk7CisJCWNzdW1fc3R1ZmZfb2ZmID0gY3N1bV9zdGFydF9vZmYgKyBza2ItPmNzdW1fb2Zmc2V0OwogCiAJCXR4X2ZsYWdzID0gKFRYRkxBR19PV04gfCBUWEZMQUdfQ1NFTkFCTEUgfAogCQkJICAgICgoY3N1bV9zdGFydF9vZmYgPDwgMTQpICYgVFhGTEFHX0NTQlVGQkVHSU4pIHwKQEAgLTMwMTIsNiArMzAxMywxMSBAQAogI2VuZGlmCiAKIAllcnIgPSAtRU5PREVWOworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQorCQlnb3RvIGVycl9vdXQ7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKIAlpZiAoIXN0cmNtcChwcm9tX25hbWUsICJTVU5XLHFmZSIpIHx8ICFzdHJjbXAocHJvbV9uYW1lLCAicWZlIikpIHsKIAkJcXAgPSBxdWF0dHJvX3BjaV9maW5kKHBkZXYpOwogCQlpZiAocXAgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IGNkMTQyZDAuLjhmNGVjYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTc3MSw3ICsxNzcxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgb2x5bXBpY19wY2lfaW5pdCh2b2lkKSAKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmb2x5bXBpY19kcml2ZXIpIDsgCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm9seW1waWNfZHJpdmVyKSA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbHltcGljX3BjaV9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzODA4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtMCwwICsxLDE3MDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgQ29weXJpZ2h0KGMpIDIwMDYgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgZHJpdmVyIGNvZGUgb3JpZ2luYWxseSBkZXZlbG9wZWQKKyAqIGZvciB0aGUgSW50ZWwgSU9DODAzMTQgKEZvcmVzdExha2UpIEdpZ2FiaXQgRXRoZXJuZXQgYnkKKyAqIHNjb3R0Lndvb2RAdGltZXN5cy5jb20gICogQ29weXJpZ2h0IChDKSAyMDAzIFRpbWVTeXMgQ29ycG9yYXRpb24KKyAqCisgKiBDdXJyZW50bHkgY2hhbmdlcyBmcm9tIG9yaWdpbmFsIHZlcnNpb24gYXJlOgorICogLSBwb3J0aW5nIHRvIFRzaTEwOC1iYXNlZCBwbGF0Zm9ybSBhbmQga2VybmVsIDIuNiAoa29uZy5sYWlAdHVuZHJhLmNvbSkKKyAqIC0gbW9kaWZpY2F0aW9ucyB0byBoYW5kbGUgdHdvIHBvcnRzIGluZGVwZW5kZW50bHkgYW5kIHN1cHBvcnQgZm9yCisgKiAgIGFkZGl0aW9uYWwgUEhZIGRldmljZXMgKGFsZXhhbmRyZS5ib3VuaW5lQHR1bmRyYS5jb20pCisgKiAtIEdldCBoYXJkd2FyZSBpbmZvcm1hdGlvbiBmcm9tIHBsYXRmb3JtIGRldmljZS4gKHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3RzaTEwOC5oPgorCisjaW5jbHVkZSAidHNpMTA4X2V0aC5oIgorCisjZGVmaW5lIE1JSV9SRUFEX0RFTEFZIDEwMDAwCS8qIG1heCBsaW5rIHdhaXQgdGltZSBpbiBtc2VjICovCisKKyNkZWZpbmUgVFNJMTA4X1JYUklOR19MRU4gICAgIDI1NgorCisvKiBOT1RFOiBUaGUgZHJpdmVyIGN1cnJlbnRseSBkb2VzIG5vdCBzdXBwb3J0IHJlY2VpdmluZyBwYWNrZXRzCisgKiBsYXJnZXIgdGhhbiB0aGUgYnVmZmVyIHNpemUsIHNvIGRvbid0IGRlY3JlYXNlIHRoaXMgKHVubGVzcyB5b3UKKyAqIHdhbnQgdG8gYWRkIHN1Y2ggc3VwcG9ydCkuCisgKi8KKyNkZWZpbmUgVFNJMTA4X1JYQlVGX1NJWkUgICAgIDE1MzYKKworI2RlZmluZSBUU0kxMDhfVFhSSU5HX0xFTiAgICAgMjU2CisKKyNkZWZpbmUgVFNJMTA4X1RYX0lOVF9GUkVRICAgIDY0CisKKy8qIENoZWNrIHRoZSBwaHkgc3RhdHVzIGV2ZXJ5IGhhbGYgYSBzZWNvbmQuICovCisjZGVmaW5lIENIRUNLX1BIWV9JTlRFUlZBTCAoSFovMikKKworc3RhdGljIGludCB0c2kxMDhfaW5pdF9vbmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CitzdGF0aWMgaW50IHRzaTEwOF9ldGhlcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CisKK3N0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgeworCXZvaWQgIF9faW9tZW0gKnJlZ3M7CS8qIEJhc2Ugb2Ygbm9ybWFsIHJlZ3MgKi8KKwl2b2lkICBfX2lvbWVtICpwaHlyZWdzOwkvKiBCYXNlIG9mIHJlZ2lzdGVyIGJhbmsgdXNlZCBmb3IgUEhZIGFjY2VzcyAqLworCisJdW5zaWduZWQgaW50IHBoeTsJCS8qIEluZGV4IG9mIFBIWSBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KKwl1bnNpZ25lZCBpbnQgaXJxX251bTsKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsvKiBUaW1lciB0aGF0IHRyaWdnZXJzIHRoZSBjaGVjayBwaHkgZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCBpbnQgcnh0YWlsOwkvKiBOZXh0IGVudHJ5IGluIHJ4cmluZyB0byByZWFkICovCisJdW5zaWduZWQgaW50IHJ4aGVhZDsJLyogTmV4dCBlbnRyeSBpbiByeHJpbmcgdG8gZ2l2ZSBhIG5ldyBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgcnhmcmVlOwkvKiBOdW1iZXIgb2YgZnJlZSwgYWxsb2NhdGVkIFJYIGJ1ZmZlcnMgKi8KKworCXVuc2lnbmVkIGludCByeHBlbmRpbmc7CS8qIE5vbi16ZXJvIGlmIHRoZXJlIGFyZSBzdGlsbCBkZXNjcmlwdG9ycworCQkJCSAqIHRvIGJlIHByb2Nlc3NlZCBmcm9tIGEgcHJldmlvdXMgZGVzY3JpcHRvcgorCQkJCSAqIGludGVycnVwdCBjb25kaXRpb24gdGhhdCBoYXMgYmVlbiBjbGVhcmVkICovCisKKwl1bnNpZ25lZCBpbnQgdHh0YWlsOwkvKiBOZXh0IFRYIGRlc2NyaXB0b3IgdG8gY2hlY2sgc3RhdHVzIG9uICovCisJdW5zaWduZWQgaW50IHR4aGVhZDsJLyogTmV4dCBUWCBkZXNjcmlwdG9yIHRvIHVzZSAqLworCisJLyogTnVtYmVyIG9mIGZyZWUgVFggZGVzY3JpcHRvcnMuICBUaGlzIGNvdWxkIGJlIGNhbGN1bGF0ZWQgZnJvbQorCSAqIHJ4aGVhZCBhbmQgcnh0YWlsIGlmIG9uZSBkZXNjcmlwdG9yIHdlcmUgbGVmdCB1bnVzZWQgdG8gZGlzYW1iaWd1YXRlCisJICogZnVsbCBhbmQgZW1wdHkgY29uZGl0aW9ucywgYnV0IGl0J3Mgc2ltcGxlciB0byBqdXN0IGtlZXAgdHJhY2sKKwkgKiBleHBsaWNpdGx5LiAqLworCisJdW5zaWduZWQgaW50IHR4ZnJlZTsKKworCXVuc2lnbmVkIGludCBwaHlfb2s7CQkvKiBUaGUgUEhZIGlzIGN1cnJlbnRseSBwb3dlcmVkIG9uLiAqLworCisJLyogUEhZIHN0YXR1cyAoZHVwbGV4IGlzIDEgZm9yIGhhbGYsIDIgZm9yIGZ1bGwsCisJICogc28gdGhhdCB0aGUgZGVmYXVsdCAwIGluZGljYXRlcyB0aGF0IG5laXRoZXIgaGFzCisJICogeWV0IGJlZW4gY29uZmlndXJlZCkuICovCisKKwl1bnNpZ25lZCBpbnQgbGlua191cDsKKwl1bnNpZ25lZCBpbnQgc3BlZWQ7CisJdW5zaWduZWQgaW50IGR1cGxleDsKKworCXR4X2Rlc2MgKnR4cmluZzsKKwlyeF9kZXNjICpyeHJpbmc7CisJc3RydWN0IHNrX2J1ZmYgKnR4c2tic1tUU0kxMDhfVFhSSU5HX0xFTl07CisJc3RydWN0IHNrX2J1ZmYgKnJ4c2tic1tUU0kxMDhfUlhSSU5HX0xFTl07CisKKwlkbWFfYWRkcl90IHR4ZG1hLCByeGRtYTsKKworCS8qIHR4bG9jayBuZXN0cyBpbiBtaXNjbG9jayBhbmQgcGh5X2xvY2sgKi8KKworCXNwaW5sb2NrX3QgdHhsb2NrLCBtaXNjbG9jazsKKworCS8qIHN0YXRzIGlzIHVzZWQgdG8gaG9sZCB0aGUgdXBwZXIgYml0cyBvZiBlYWNoIGhhcmR3YXJlIGNvdW50ZXIsCisJICogYW5kIHRtcHN0YXRzIGlzIHVzZWQgdG8gaG9sZCB0aGUgZnVsbCB2YWx1ZXMgZm9yIHJldHVybmluZworCSAqIHRvIHRoZSBjYWxsZXIgb2YgZ2V0X3N0YXRzKCkuICBUaGV5IG11c3QgYmUgc2VwYXJhdGUgaW4gY2FzZQorCSAqIGFuIG92ZXJmbG93IGludGVycnVwdCBvY2N1cnMgYmVmb3JlIHRoZSBzdGF0cyBhcmUgY29uc3VtZWQuCisJICovCisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyB0bXBzdGF0czsKKworCS8qIFRoZXNlIHN0YXRzIGFyZSBrZXB0IHNlcGFyYXRlIGluIGhhcmR3YXJlLCB0aHVzIHJlcXVpcmUgaW5kaXZpZHVhbAorCSAqIGZpZWxkcyBmb3IgaGFuZGxpbmcgY2FycnkuICBUaGV5IGFyZSBjb21iaW5lZCBpbiBnZXRfc3RhdHMuCisJICovCisKKwl1bnNpZ25lZCBsb25nIHJ4X2ZjczsJLyogQWRkIHRvIHJ4X2ZyYW1lX2Vycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgcnhfc2hvcnRfZmNzOwkvKiBBZGQgdG8gcnhfZnJhbWVfZXJyb3JzICovCisJdW5zaWduZWQgbG9uZyByeF9sb25nX2ZjczsJLyogQWRkIHRvIHJ4X2ZyYW1lX2Vycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgcnhfdW5kZXJydW5zOwkvKiBBZGQgdG8gcnhfbGVuZ3RoX2Vycm9ycyAqLworCXVuc2lnbmVkIGxvbmcgcnhfb3ZlcnJ1bnM7CS8qIEFkZCB0byByeF9sZW5ndGhfZXJyb3JzICovCisKKwl1bnNpZ25lZCBsb25nIHR4X2NvbGxfYWJvcnQ7CS8qIEFkZCB0byB0eF9hYm9ydGVkX2Vycm9ycy9jb2xsaXNpb25zICovCisJdW5zaWduZWQgbG9uZyB0eF9wYXVzZV9kcm9wOwkvKiBBZGQgdG8gdHhfYWJvcnRlZF9lcnJvcnMgKi8KKworCXVuc2lnbmVkIGxvbmcgbWNfaGFzaFsxNl07CisJdTMyIG1zZ19lbmFibGU7CQkJLyogZGVidWcgbWVzc2FnZSBsZXZlbCAqLworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7CisJdW5zaWduZWQgaW50IGluaXRfbWVkaWE7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIGRyaXZlciAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0c2lfZXRoX2RyaXZlciA9IHsKKwkucHJvYmUgPSB0c2kxMDhfaW5pdF9vbmUsCisJLnJlbW92ZSA9IHRzaTEwOF9ldGhlcl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAidHNpLWV0aGVybmV0IiwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgdHNpMTA4X3RpbWVkX2NoZWNrZXIodW5zaWduZWQgbG9uZyBkZXZfcHRyKTsKKworc3RhdGljIHZvaWQgZHVtcF9ldGhfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcmludGsoIkR1bXBpbmcgJXMuLi5cbiIsIGRldi0+bmFtZSk7CisJcHJpbnRrKCJpbnRzdGF0ICV4IGludG1hc2sgJXggcGh5X29rICVkIgorCSAgICAgICAiIGxpbmsgJWQgc3BlZWQgJWQgZHVwbGV4ICVkXG4iLAorCSAgICAgICBUU0lfUkVBRChUU0kxMDhfRUNfSU5UU1RBVCksCisJICAgICAgIFRTSV9SRUFEKFRTSTEwOF9FQ19JTlRNQVNLKSwgZGF0YS0+cGh5X29rLAorCSAgICAgICBkYXRhLT5saW5rX3VwLCBkYXRhLT5zcGVlZCwgZGF0YS0+ZHVwbGV4KTsKKworCXByaW50aygiVFg6IGhlYWQgJWQsIHRhaWwgJWQsIGZyZWUgJWQsIHN0YXQgJXgsIGVzdGF0ICV4LCBlcnIgJXhcbiIsCisJICAgICAgIGRhdGEtPnR4aGVhZCwgZGF0YS0+dHh0YWlsLCBkYXRhLT50eGZyZWUsCisJICAgICAgIFRTSV9SRUFEKFRTSTEwOF9FQ19UWFNUQVQpLAorCSAgICAgICBUU0lfUkVBRChUU0kxMDhfRUNfVFhFU1RBVCksCisJICAgICAgIFRTSV9SRUFEKFRTSTEwOF9FQ19UWEVSUikpOworCisJcHJpbnRrKCJSWDogaGVhZCAlZCwgdGFpbCAlZCwgZnJlZSAlZCwgc3RhdCAleCwiCisJICAgICAgICIgZXN0YXQgJXgsIGVyciAleCwgcGVuZGluZyAlZFxuXG4iLAorCSAgICAgICBkYXRhLT5yeGhlYWQsIGRhdGEtPnJ4dGFpbCwgZGF0YS0+cnhmcmVlLAorCSAgICAgICBUU0lfUkVBRChUU0kxMDhfRUNfUlhTVEFUKSwKKwkgICAgICAgVFNJX1JFQUQoVFNJMTA4X0VDX1JYRVNUQVQpLAorCSAgICAgICBUU0lfUkVBRChUU0kxMDhfRUNfUlhFUlIpLCBkYXRhLT5yeHBlbmRpbmcpOworfQorCisvKiBTeW5jaHJvbml6YXRpb24gaXMgbmVlZGVkIGJldHdlZW4gdGhlIHRocmVhZCBhbmQgdXAvZG93biBldmVudHMuCisgKiBOb3RlIHRoYXQgdGhlIFBIWSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBzYW1lIHJlZ2lzdGVycyBmb3IgYm90aAorICogaW50ZXJmYWNlcywgc28gdGhpcyBjYW4ndCBiZSBtYWRlIGludGVyZmFjZS1zcGVjaWZpYy4KKyAqLworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBoeV9sb2NrKTsKKworc3RhdGljIGludCB0c2kxMDhfcmVhZF9taWkoc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBpOworCisJVFNJX1dSSVRFX1BIWShUU0kxMDhfTUFDX01JSV9BRERSLAorCQkJCShkYXRhLT5waHkgPDwgVFNJMTA4X01BQ19NSUlfQUREUl9QSFkpIHwKKwkJCQkocmVnIDw8IFRTSTEwOF9NQUNfTUlJX0FERFJfUkVHKSk7CisJVFNJX1dSSVRFX1BIWShUU0kxMDhfTUFDX01JSV9DTUQsIDApOworCVRTSV9XUklURV9QSFkoVFNJMTA4X01BQ19NSUlfQ01ELCBUU0kxMDhfTUFDX01JSV9DTURfUkVBRCk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWlmICghKFRTSV9SRUFEX1BIWShUU0kxMDhfTUFDX01JSV9JTkQpICYKKwkJICAgICAgKFRTSTEwOF9NQUNfTUlJX0lORF9OT1RWQUxJRCB8IFRTSTEwOF9NQUNfTUlJX0lORF9CVVNZKSkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwlpZiAoaSA9PSAxMDApCisJCXJldHVybiAweGZmZmY7CisJZWxzZQorCQlyZXR1cm4gKFRTSV9SRUFEX1BIWShUU0kxMDhfTUFDX01JSV9EQVRBSU4pKTsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X3dyaXRlX21paShzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhLAorCQkJCWludCByZWcsIHUxNiB2YWwpCit7CisJdW5zaWduZWQgaSA9IDEwMDsKKwlUU0lfV1JJVEVfUEhZKFRTSTEwOF9NQUNfTUlJX0FERFIsCisJCQkJKGRhdGEtPnBoeSA8PCBUU0kxMDhfTUFDX01JSV9BRERSX1BIWSkgfAorCQkJCShyZWcgPDwgVFNJMTA4X01BQ19NSUlfQUREUl9SRUcpKTsKKwlUU0lfV1JJVEVfUEhZKFRTSTEwOF9NQUNfTUlJX0RBVEFPVVQsIHZhbCk7CisJd2hpbGUgKGktLSkgeworCQlpZighKFRTSV9SRUFEX1BIWShUU0kxMDhfTUFDX01JSV9JTkQpICYKKwkJCVRTSTEwOF9NQUNfTUlJX0lORF9CVVNZKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KK30KKworc3RhdGljIGludCB0c2kxMDhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhZGRyLCBpbnQgcmVnKQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiB0c2kxMDhfcmVhZF9taWkoZGF0YSwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFkZHIsIGludCByZWcsIGludCB2YWwpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdHNpMTA4X3dyaXRlX21paShkYXRhLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0c2kxMDhfd3JpdGVfdGJpKHN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEsCisJCQkJCWludCByZWcsIHUxNiB2YWwpCit7CisJdW5zaWduZWQgaSA9IDEwMDA7CisJVFNJX1dSSVRFKFRTSTEwOF9NQUNfTUlJX0FERFIsCisJCQkgICAgICgweDFlIDw8IFRTSTEwOF9NQUNfTUlJX0FERFJfUEhZKQorCQkJICAgICB8IChyZWcgPDwgVFNJMTA4X01BQ19NSUlfQUREUl9SRUcpKTsKKwlUU0lfV1JJVEUoVFNJMTA4X01BQ19NSUlfREFUQU9VVCwgdmFsKTsKKwl3aGlsZShpLS0pIHsKKwkJaWYoIShUU0lfUkVBRChUU0kxMDhfTUFDX01JSV9JTkQpICYgVFNJMTA4X01BQ19NSUlfSU5EX0JVU1kpKQorCQkJcmV0dXJuOworCQl1ZGVsYXkoMTApOworCX0KKwlwcmludGsoS0VSTl9FUlIgIiVzIGZ1bmN0aW9uIHRpbWUgb3V0IFxuIiwgX19GVU5DVElPTl9fKTsKK30KKworc3RhdGljIGludCBtaWlfc3BlZWQoc3RydWN0IG1paV9pZl9pbmZvICptaWkpCit7CisJaW50IGFkdmVydCwgbHBhLCB2YWwsIG1lZGlhOworCWludCBscGEyID0gMDsKKwlpbnQgc3BlZWQ7CisKKwlpZiAoIW1paV9saW5rX29rKG1paSkpCisJCXJldHVybiAwOworCisJdmFsID0gKCptaWktPm1kaW9fcmVhZCkgKG1paS0+ZGV2LCBtaWktPnBoeV9pZCwgTUlJX0JNU1IpOworCWlmICgodmFsICYgQk1TUl9BTkVHQ09NUExFVEUpID09IDApCisJCXJldHVybiAwOworCisJYWR2ZXJ0ID0gKCptaWktPm1kaW9fcmVhZCkgKG1paS0+ZGV2LCBtaWktPnBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CisJbHBhID0gKCptaWktPm1kaW9fcmVhZCkgKG1paS0+ZGV2LCBtaWktPnBoeV9pZCwgTUlJX0xQQSk7CisJbWVkaWEgPSBtaWlfbndheV9yZXN1bHQoYWR2ZXJ0ICYgbHBhKTsKKworCWlmIChtaWktPnN1cHBvcnRzX2dtaWkpCisJCWxwYTIgPSBtaWktPm1kaW9fcmVhZChtaWktPmRldiwgbWlpLT5waHlfaWQsIE1JSV9TVEFUMTAwMCk7CisKKwlzcGVlZCA9IGxwYTIgJiAoTFBBXzEwMDBGVUxMIHwgTFBBXzEwMDBIQUxGKSA/IDEwMDAgOgorCQkJKG1lZGlhICYgKEFEVkVSVElTRV8xMDBGVUxMIHwgQURWRVJUSVNFXzEwMEhBTEYpID8gMTAwIDogMTApOworCXJldHVybiBzcGVlZDsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X2NoZWNrX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBtYWNfY2ZnMl9yZWcsIHBvcnRjdHJsX3JlZzsKKwl1MzIgZHVwbGV4OworCXUzMiBzcGVlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogRG8gYSBkdW1teSByZWFkLCBhcyBmb3Igc29tZSByZWFzb24gdGhlIGZpcnN0IHJlYWQKKwkgKiBhZnRlciBhIGxpbmsgYmVjb21lcyB1cCByZXR1cm5zIGxpbmsgZG93biwgZXZlbiBpZgorCSAqIGl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIHRoZSBsaW5rIGNhbWUgdXAuCisJICovCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGh5X2xvY2ssIGZsYWdzKTsKKworCWlmICghZGF0YS0+cGh5X29rKQorCQlnb3RvIG91dDsKKworCXRzaTEwOF9yZWFkX21paShkYXRhLCBNSUlfQk1TUik7CisKKwlkdXBsZXggPSBtaWlfY2hlY2tfbWVkaWEoJmRhdGEtPm1paV9pZiwgbmV0aWZfbXNnX2xpbmsoZGF0YSksIGRhdGEtPmluaXRfbWVkaWEpOworCWRhdGEtPmluaXRfbWVkaWEgPSAwOworCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCisJCXNwZWVkID0gbWlpX3NwZWVkKCZkYXRhLT5taWlfaWYpOworCisJCWlmICgoc3BlZWQgIT0gZGF0YS0+c3BlZWQpIHx8IGR1cGxleCkgeworCisJCQltYWNfY2ZnMl9yZWcgPSBUU0lfUkVBRChUU0kxMDhfTUFDX0NGRzIpOworCQkJcG9ydGN0cmxfcmVnID0gVFNJX1JFQUQoVFNJMTA4X0VDX1BPUlRDVFJMKTsKKworCQkJbWFjX2NmZzJfcmVnICY9IH5UU0kxMDhfTUFDX0NGRzJfSUZBQ0VfTUFTSzsKKworCQkJaWYgKHNwZWVkID09IDEwMDApIHsKKwkJCQltYWNfY2ZnMl9yZWcgfD0gVFNJMTA4X01BQ19DRkcyX0dJRzsKKwkJCQlwb3J0Y3RybF9yZWcgJj0gflRTSTEwOF9FQ19QT1JUQ1RSTF9OT0dJRzsKKwkJCX0gZWxzZSB7CisJCQkJbWFjX2NmZzJfcmVnIHw9IFRTSTEwOF9NQUNfQ0ZHMl9OT0dJRzsKKwkJCQlwb3J0Y3RybF9yZWcgfD0gVFNJMTA4X0VDX1BPUlRDVFJMX05PR0lHOworCQkJfQorCisJCQlkYXRhLT5zcGVlZCA9IHNwZWVkOworCisJCQlpZiAoZGF0YS0+bWlpX2lmLmZ1bGxfZHVwbGV4KSB7CisJCQkJbWFjX2NmZzJfcmVnIHw9IFRTSTEwOF9NQUNfQ0ZHMl9GVUxMRFVQTEVYOworCQkJCXBvcnRjdHJsX3JlZyAmPSB+VFNJMTA4X0VDX1BPUlRDVFJMX0hBTEZEVVBMRVg7CisJCQkJZGF0YS0+ZHVwbGV4ID0gMjsKKwkJCX0gZWxzZSB7CisJCQkJbWFjX2NmZzJfcmVnICY9IH5UU0kxMDhfTUFDX0NGRzJfRlVMTERVUExFWDsKKwkJCQlwb3J0Y3RybF9yZWcgfD0gVFNJMTA4X0VDX1BPUlRDVFJMX0hBTEZEVVBMRVg7CisJCQkJZGF0YS0+ZHVwbGV4ID0gMTsKKwkJCX0KKworCQkJVFNJX1dSSVRFKFRTSTEwOF9NQUNfQ0ZHMiwgbWFjX2NmZzJfcmVnKTsKKwkJCVRTSV9XUklURShUU0kxMDhfRUNfUE9SVENUUkwsIHBvcnRjdHJsX3JlZyk7CisKKwkJCWlmIChkYXRhLT5saW5rX3VwID09IDApIHsKKwkJCQkvKiBUaGUgbWFudWFsIHNheXMgaXQgY2FuIHRha2UgMy00IHVzZWNzIGZvciB0aGUgc3BlZWQgY2hhbmdlCisJCQkJICogdG8gdGFrZSBlZmZlY3QuCisJCQkJICovCisJCQkJdWRlbGF5KDUpOworCisJCQkJc3Bpbl9sb2NrKCZkYXRhLT50eGxvY2spOworCQkJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpICYmIGRhdGEtPnR4ZnJlZSkKKwkJCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCisJCQkJZGF0YS0+bGlua191cCA9IDE7CisJCQkJc3Bpbl91bmxvY2soJmRhdGEtPnR4bG9jayk7CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChkYXRhLT5saW5rX3VwID09IDEpIHsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCWRhdGEtPmxpbmtfdXAgPSAwOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlcyA6IGxpbmsgaXMgZG93blxuIiwgZGV2LT5uYW1lKTsKKwkJfQorCisJCWdvdG8gb3V0OworCX0KKworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGh5X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0c2kxMDhfc3RhdF9jYXJyeV9vbmUoaW50IGNhcnJ5LCBpbnQgY2FycnlfYml0LCBpbnQgY2Fycnlfc2hpZnQsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnVwcGVyKQoreworCWlmIChjYXJyeSAmIGNhcnJ5X2JpdCkKKwkJKnVwcGVyICs9IGNhcnJ5X3NoaWZ0OworfQorCitzdGF0aWMgdm9pZCB0c2kxMDhfc3RhdF9jYXJyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBjYXJyeTEsIGNhcnJ5MjsKKworCXNwaW5fbG9ja19pcnEoJmRhdGEtPm1pc2Nsb2NrKTsKKworCWNhcnJ5MSA9IFRTSV9SRUFEKFRTSTEwOF9TVEFUX0NBUlJZMSk7CisJY2FycnkyID0gVFNJX1JFQUQoVFNJMTA4X1NUQVRfQ0FSUlkyKTsKKworCVRTSV9XUklURShUU0kxMDhfU1RBVF9DQVJSWTEsIGNhcnJ5MSk7CisJVFNJX1dSSVRFKFRTSTEwOF9TVEFUX0NBUlJZMiwgY2FycnkyKTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTEsIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEJZVEVTLAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhCWVRFU19DQVJSWSwgJmRhdGEtPnN0YXRzLnJ4X2J5dGVzKTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTEsIFRTSTEwOF9TVEFUX0NBUlJZMV9SWFBLVFMsCisJCQkgICAgICBUU0kxMDhfU1RBVF9SWFBLVFNfQ0FSUlksCisJCQkgICAgICAmZGF0YS0+c3RhdHMucnhfcGFja2V0cyk7CisKKwl0c2kxMDhfc3RhdF9jYXJyeV9vbmUoY2FycnkxLCBUU0kxMDhfU1RBVF9DQVJSWTFfUlhGQ1MsCisJCQkgICAgICBUU0kxMDhfU1RBVF9SWEZDU19DQVJSWSwgJmRhdGEtPnJ4X2Zjcyk7CisKKwl0c2kxMDhfc3RhdF9jYXJyeV9vbmUoY2FycnkxLCBUU0kxMDhfU1RBVF9DQVJSWTFfUlhNQ0FTVCwKKwkJCSAgICAgIFRTSTEwOF9TVEFUX1JYTUNBU1RfQ0FSUlksCisJCQkgICAgICAmZGF0YS0+c3RhdHMubXVsdGljYXN0KTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTEsIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEFMSUdOLAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhBTElHTl9DQVJSWSwKKwkJCSAgICAgICZkYXRhLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMpOworCisJdHNpMTA4X3N0YXRfY2Fycnlfb25lKGNhcnJ5MSwgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYTEVOR1RILAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhMRU5HVEhfQ0FSUlksCisJCQkgICAgICAmZGF0YS0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyk7CisKKwl0c2kxMDhfc3RhdF9jYXJyeV9vbmUoY2FycnkxLCBUU0kxMDhfU1RBVF9DQVJSWTFfUlhSVU5ULAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhSVU5UX0NBUlJZLCAmZGF0YS0+cnhfdW5kZXJydW5zKTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTEsIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEpVTUJPLAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhKVU1CT19DQVJSWSwgJmRhdGEtPnJ4X292ZXJydW5zKTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTEsIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEZSQUcsCisJCQkgICAgICBUU0kxMDhfU1RBVF9SWEZSQUdfQ0FSUlksICZkYXRhLT5yeF9zaG9ydF9mY3MpOworCisJdHNpMTA4X3N0YXRfY2Fycnlfb25lKGNhcnJ5MSwgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYSkFCQkVSLAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhKQUJCRVJfQ0FSUlksICZkYXRhLT5yeF9sb25nX2Zjcyk7CisKKwl0c2kxMDhfc3RhdF9jYXJyeV9vbmUoY2FycnkxLCBUU0kxMDhfU1RBVF9DQVJSWTFfUlhEUk9QLAorCQkJICAgICAgVFNJMTA4X1NUQVRfUlhEUk9QX0NBUlJZLAorCQkJICAgICAgJmRhdGEtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMpOworCisJdHNpMTA4X3N0YXRfY2Fycnlfb25lKGNhcnJ5MiwgVFNJMTA4X1NUQVRfQ0FSUlkyX1RYQllURVMsCisJCQkgICAgICBUU0kxMDhfU1RBVF9UWEJZVEVTX0NBUlJZLCAmZGF0YS0+c3RhdHMudHhfYnl0ZXMpOworCisJdHNpMTA4X3N0YXRfY2Fycnlfb25lKGNhcnJ5MiwgVFNJMTA4X1NUQVRfQ0FSUlkyX1RYUEtUUywKKwkJCSAgICAgIFRTSTEwOF9TVEFUX1RYUEtUU19DQVJSWSwKKwkJCSAgICAgICZkYXRhLT5zdGF0cy50eF9wYWNrZXRzKTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTIsIFRTSTEwOF9TVEFUX0NBUlJZMl9UWEVYREVGLAorCQkJICAgICAgVFNJMTA4X1NUQVRfVFhFWERFRl9DQVJSWSwKKwkJCSAgICAgICZkYXRhLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyk7CisKKwl0c2kxMDhfc3RhdF9jYXJyeV9vbmUoY2FycnkyLCBUU0kxMDhfU1RBVF9DQVJSWTJfVFhFWENPTCwKKwkJCSAgICAgIFRTSTEwOF9TVEFUX1RYRVhDT0xfQ0FSUlksICZkYXRhLT50eF9jb2xsX2Fib3J0KTsKKworCXRzaTEwOF9zdGF0X2NhcnJ5X29uZShjYXJyeTIsIFRTSTEwOF9TVEFUX0NBUlJZMl9UWFRDT0wsCisJCQkgICAgICBUU0kxMDhfU1RBVF9UWFRDT0xfQ0FSUlksCisJCQkgICAgICAmZGF0YS0+c3RhdHMuY29sbGlzaW9ucyk7CisKKwl0c2kxMDhfc3RhdF9jYXJyeV9vbmUoY2FycnkyLCBUU0kxMDhfU1RBVF9DQVJSWTJfVFhQQVVTRSwKKwkJCSAgICAgIFRTSTEwOF9TVEFUX1RYUEFVU0VEUk9QX0NBUlJZLAorCQkJICAgICAgJmRhdGEtPnR4X3BhdXNlX2Ryb3ApOworCisJc3Bpbl91bmxvY2tfaXJxKCZkYXRhLT5taXNjbG9jayk7Cit9CisKKy8qIFJlYWQgYSBzdGF0IGNvdW50ZXIgYXRvbWljYWxseSB3aXRoIHJlc3BlY3QgdG8gY2Fycmllcy4KKyAqIGRhdGEtPm1pc2Nsb2NrIG11c3QgYmUgaGVsZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCit0c2kxMDhfcmVhZF9zdGF0KHN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKiBkYXRhLCBpbnQgcmVnLCBpbnQgY2FycnlfYml0LAorCQkgaW50IGNhcnJ5X3NoaWZ0LCB1bnNpZ25lZCBsb25nICp1cHBlcikKK3sKKwlpbnQgY2FycnlyZWc7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAocmVnIDwgMHhiMCkKKwkJY2FycnlyZWcgPSBUU0kxMDhfU1RBVF9DQVJSWTE7CisJZWxzZQorCQljYXJyeXJlZyA9IFRTSTEwOF9TVEFUX0NBUlJZMjsKKworICAgICAgYWdhaW46CisJdmFsID0gVFNJX1JFQUQocmVnKSB8ICp1cHBlcjsKKworCS8qIENoZWNrIHRvIHNlZSBpZiBpdCBvdmVyZmxvd2VkLCBidXQgdGhlIGludGVycnVwdCBoYXNuJ3QKKwkgKiBiZWVuIHNlcnZpY2VkIHlldC4gIElmIHNvLCBoYW5kbGUgdGhlIGNhcnJ5IGhlcmUsIGFuZAorCSAqIHRyeSBhZ2Fpbi4KKwkgKi8KKworCWlmICh1bmxpa2VseShUU0lfUkVBRChjYXJyeXJlZykgJiBjYXJyeV9iaXQpKSB7CisJCSp1cHBlciArPSBjYXJyeV9zaGlmdDsKKwkJVFNJX1dSSVRFKGNhcnJ5cmVnLCBjYXJyeV9iaXQpOworCQlnb3RvIGFnYWluOworCX0KKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqdHNpMTA4X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZXhjb2w7CisKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzcGluX2xvY2tfaXJxKCZkYXRhLT5taXNjbG9jayk7CisKKwlkYXRhLT50bXBzdGF0cy5yeF9wYWNrZXRzID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9SWFBLVFMsCisJCQkgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWFBLVFMsCisJCQkgICAgIFRTSTEwOF9TVEFUX1JYUEtUU19DQVJSWSwgJmRhdGEtPnN0YXRzLnJ4X3BhY2tldHMpOworCisJZGF0YS0+dG1wc3RhdHMudHhfcGFja2V0cyA9CisJICAgIHRzaTEwOF9yZWFkX3N0YXQoZGF0YSwgVFNJMTA4X1NUQVRfVFhQS1RTLAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTJfVFhQS1RTLAorCQkJICAgICBUU0kxMDhfU1RBVF9UWFBLVFNfQ0FSUlksICZkYXRhLT5zdGF0cy50eF9wYWNrZXRzKTsKKworCWRhdGEtPnRtcHN0YXRzLnJ4X2J5dGVzID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9SWEJZVEVTLAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTFfUlhCWVRFUywKKwkJCSAgICAgVFNJMTA4X1NUQVRfUlhCWVRFU19DQVJSWSwgJmRhdGEtPnN0YXRzLnJ4X2J5dGVzKTsKKworCWRhdGEtPnRtcHN0YXRzLnR4X2J5dGVzID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9UWEJZVEVTLAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTJfVFhCWVRFUywKKwkJCSAgICAgVFNJMTA4X1NUQVRfVFhCWVRFU19DQVJSWSwgJmRhdGEtPnN0YXRzLnR4X2J5dGVzKTsKKworCWRhdGEtPnRtcHN0YXRzLm11bHRpY2FzdCA9CisJICAgIHRzaTEwOF9yZWFkX3N0YXQoZGF0YSwgVFNJMTA4X1NUQVRfUlhNQ0FTVCwKKwkJCSAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYTUNBU1QsCisJCQkgICAgIFRTSTEwOF9TVEFUX1JYTUNBU1RfQ0FSUlksICZkYXRhLT5zdGF0cy5tdWx0aWNhc3QpOworCisJZXhjb2wgPSB0c2kxMDhfcmVhZF9zdGF0KGRhdGEsIFRTSTEwOF9TVEFUX1RYRVhDT0wsCisJCQkJIFRTSTEwOF9TVEFUX0NBUlJZMl9UWEVYQ09MLAorCQkJCSBUU0kxMDhfU1RBVF9UWEVYQ09MX0NBUlJZLAorCQkJCSAmZGF0YS0+dHhfY29sbF9hYm9ydCk7CisKKwlkYXRhLT50bXBzdGF0cy5jb2xsaXNpb25zID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9UWFRDT0wsCisJCQkgICAgIFRTSTEwOF9TVEFUX0NBUlJZMl9UWFRDT0wsCisJCQkgICAgIFRTSTEwOF9TVEFUX1RYVENPTF9DQVJSWSwgJmRhdGEtPnN0YXRzLmNvbGxpc2lvbnMpOworCisJZGF0YS0+dG1wc3RhdHMuY29sbGlzaW9ucyArPSBleGNvbDsKKworCWRhdGEtPnRtcHN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgPQorCSAgICB0c2kxMDhfcmVhZF9zdGF0KGRhdGEsIFRTSTEwOF9TVEFUX1JYTEVOR1RILAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTFfUlhMRU5HVEgsCisJCQkgICAgIFRTSTEwOF9TVEFUX1JYTEVOR1RIX0NBUlJZLAorCQkJICAgICAmZGF0YS0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyk7CisKKwlkYXRhLT50bXBzdGF0cy5yeF9sZW5ndGhfZXJyb3JzICs9CisJICAgIHRzaTEwOF9yZWFkX3N0YXQoZGF0YSwgVFNJMTA4X1NUQVRfUlhSVU5ULAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTFfUlhSVU5ULAorCQkJICAgICBUU0kxMDhfU1RBVF9SWFJVTlRfQ0FSUlksICZkYXRhLT5yeF91bmRlcnJ1bnMpOworCisJZGF0YS0+dG1wc3RhdHMucnhfbGVuZ3RoX2Vycm9ycyArPQorCSAgICB0c2kxMDhfcmVhZF9zdGF0KGRhdGEsIFRTSTEwOF9TVEFUX1JYSlVNQk8sCisJCQkgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEpVTUJPLAorCQkJICAgICBUU0kxMDhfU1RBVF9SWEpVTUJPX0NBUlJZLCAmZGF0YS0+cnhfb3ZlcnJ1bnMpOworCisJZGF0YS0+dG1wc3RhdHMucnhfZnJhbWVfZXJyb3JzID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9SWEFMSUdOLAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTFfUlhBTElHTiwKKwkJCSAgICAgVFNJMTA4X1NUQVRfUlhBTElHTl9DQVJSWSwKKwkJCSAgICAgJmRhdGEtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyk7CisKKwlkYXRhLT50bXBzdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9SWEZDUywKKwkJCSAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYRkNTLCBUU0kxMDhfU1RBVF9SWEZDU19DQVJSWSwKKwkJCSAgICAgJmRhdGEtPnJ4X2Zjcyk7CisKKwlkYXRhLT50bXBzdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9SWEZSQUcsCisJCQkgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEZSQUcsCisJCQkgICAgIFRTSTEwOF9TVEFUX1JYRlJBR19DQVJSWSwgJmRhdGEtPnJ4X3Nob3J0X2Zjcyk7CisKKwlkYXRhLT50bXBzdGF0cy5yeF9taXNzZWRfZXJyb3JzID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9SWERST1AsCisJCQkgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWERST1AsCisJCQkgICAgIFRTSTEwOF9TVEFUX1JYRFJPUF9DQVJSWSwKKwkJCSAgICAgJmRhdGEtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMpOworCisJLyogVGhlc2UgdGhyZWUgYXJlIG1haW50YWluZWQgYnkgc29mdHdhcmUuICovCisJZGF0YS0+dG1wc3RhdHMucnhfZmlmb19lcnJvcnMgPSBkYXRhLT5zdGF0cy5yeF9maWZvX2Vycm9yczsKKwlkYXRhLT50bXBzdGF0cy5yeF9jcmNfZXJyb3JzID0gZGF0YS0+c3RhdHMucnhfY3JjX2Vycm9yczsKKworCWRhdGEtPnRtcHN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzID0KKwkgICAgdHNpMTA4X3JlYWRfc3RhdChkYXRhLCBUU0kxMDhfU1RBVF9UWEVYREVGLAorCQkJICAgICBUU0kxMDhfU1RBVF9DQVJSWTJfVFhFWERFRiwKKwkJCSAgICAgVFNJMTA4X1NUQVRfVFhFWERFRl9DQVJSWSwKKwkJCSAgICAgJmRhdGEtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKTsKKworCWRhdGEtPnRtcHN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9CisJICAgIHRzaTEwOF9yZWFkX3N0YXQoZGF0YSwgVFNJMTA4X1NUQVRfVFhQQVVTRURST1AsCisJCQkgICAgIFRTSTEwOF9TVEFUX0NBUlJZMl9UWFBBVVNFLAorCQkJICAgICBUU0kxMDhfU1RBVF9UWFBBVVNFRFJPUF9DQVJSWSwKKwkJCSAgICAgJmRhdGEtPnR4X3BhdXNlX2Ryb3ApOworCisJZGF0YS0+dG1wc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gZXhjb2w7CisKKwlkYXRhLT50bXBzdGF0cy50eF9lcnJvcnMgPSBkYXRhLT50bXBzdGF0cy50eF9hYm9ydGVkX2Vycm9yczsKKwlkYXRhLT50bXBzdGF0cy5yeF9lcnJvcnMgPSBkYXRhLT50bXBzdGF0cy5yeF9sZW5ndGhfZXJyb3JzICsKKwkgICAgZGF0YS0+dG1wc3RhdHMucnhfY3JjX2Vycm9ycyArCisJICAgIGRhdGEtPnRtcHN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArCisJICAgIGRhdGEtPnRtcHN0YXRzLnJ4X2ZpZm9fZXJyb3JzICsgZGF0YS0+dG1wc3RhdHMucnhfbWlzc2VkX2Vycm9yczsKKworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bWlzY2xvY2spOworCXJldHVybiAmZGF0YS0+dG1wc3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIHRzaTEwOF9yZXN0YXJ0X3J4KHN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKiBkYXRhLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCVRTSV9XUklURShUU0kxMDhfRUNfUlhRX1BUUkhJR0gsCisJCQkgICAgIFRTSTEwOF9FQ19SWFFfUFRSSElHSF9WQUxJRCk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX1JYQ1RSTCwgVFNJMTA4X0VDX1JYQ1RSTF9HTworCQkJICAgICB8IFRTSTEwOF9FQ19SWENUUkxfUVVFVUUwKTsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X3Jlc3RhcnRfdHgoc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqIGRhdGEpCit7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19UWFFfUFRSSElHSCwKKwkJCSAgICAgVFNJMTA4X0VDX1RYUV9QVFJISUdIX1ZBTElEKTsKKworCVRTSV9XUklURShUU0kxMDhfRUNfVFhDVFJMLCBUU0kxMDhfRUNfVFhDVFJMX0lETEVJTlQgfAorCQkJICAgICBUU0kxMDhfRUNfVFhDVFJMX0dPIHwgVFNJMTA4X0VDX1RYQ1RSTF9RVUVVRTApOworfQorCisvKiB0eGxvY2sgbXVzdCBiZSBoZWxkIGJ5IGNhbGxlciwgd2l0aCBJUlFzIGRpc2FibGVkLCBhbmQKKyAqIHdpdGggcGVybWlzc2lvbiB0byByZS1lbmFibGUgdGhlbSB3aGVuIHRoZSBsb2NrIGlzIGRyb3BwZWQuCisgKi8KK3N0YXRpYyB2b2lkIHRzaTEwOF9jb21wbGV0ZV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB0eDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCByZWxlYXNlID0gMDsKKworCXdoaWxlICghZGF0YS0+dHhmcmVlIHx8IGRhdGEtPnR4aGVhZCAhPSBkYXRhLT50eHRhaWwpIHsKKwkJdHggPSBkYXRhLT50eHRhaWw7CisKKwkJaWYgKGRhdGEtPnR4cmluZ1t0eF0ubWlzYyAmIFRTSTEwOF9UWF9PV04pCisJCQlicmVhazsKKworCQlza2IgPSBkYXRhLT50eHNrYnNbdHhdOworCisJCWlmICghKGRhdGEtPnR4cmluZ1t0eF0ubWlzYyAmIFRTSTEwOF9UWF9PSykpCisJCQlwcmludGsoIiVzOiBiYWQgdHggcGFja2V0LCBtaXNjICV4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZGF0YS0+dHhyaW5nW3R4XS5taXNjKTsKKworCQlkYXRhLT50eHRhaWwgPSAoZGF0YS0+dHh0YWlsICsgMSkgJSBUU0kxMDhfVFhSSU5HX0xFTjsKKwkJZGF0YS0+dHhmcmVlKys7CisKKwkJaWYgKGRhdGEtPnR4cmluZ1t0eF0ubWlzYyAmIFRTSTEwOF9UWF9FT0YpIHsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQlyZWxlYXNlKys7CisJCX0KKwl9CisKKwlpZiAocmVsZWFzZSkgeworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSAmJiBkYXRhLT5saW5rX3VwKQorCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KK30KKworc3RhdGljIGludCB0c2kxMDhfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKiBza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CisJaW50IGk7CisKKwlpZiAoIWRhdGEtPnBoeV9vayAmJiBuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRyYW5zbWl0IHdoaWxlIFBIWSBpcyBkb3duIVxuIiwgZGV2LT5uYW1lKTsKKworCWlmICghZGF0YS0+bGlua191cCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUcmFuc21pdCB3aGlsZSBsaW5rIGlzIGRvd24hXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKGRhdGEtPnR4ZnJlZSA8IE1BWF9TS0JfRlJBR1MgKyAxKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVHJhbnNtaXQgd2l0aCBmdWxsIHR4IHJpbmchXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAoZGF0YS0+dHhmcmVlIC0gZnJhZ3MgPCBNQVhfU0tCX0ZSQUdTICsgMSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJfQorCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBmcmFnczsgaSsrKSB7CisJCWludCBtaXNjID0gMDsKKwkJaW50IHR4ID0gZGF0YS0+dHhoZWFkOworCisJCS8qIFRoaXMgaXMgZG9uZSB0byBtYXJrIGV2ZXJ5IFRTSTEwOF9UWF9JTlRfRlJFUSB0eCBidWZmZXJzIHdpdGgKKwkJICogdGhlIGludGVycnVwdCBiaXQuICBUWCBkZXNjcmlwdG9yLWNvbXBsZXRlIGludGVycnVwdHMgYXJlCisJCSAqIGVuYWJsZWQgd2hlbiB0aGUgcXVldWUgZmlsbHMgdXAsIGFuZCBtYXNrZWQgd2hlbiB0aGVyZSBpcworCQkgKiBzdGlsbCBmcmVlIHNwYWNlLiAgVGhpcyB3YXksIHdoZW4gc2F0dXJhdGluZyB0aGUgb3V0Ym91bmQKKwkJICogbGluaywgdGhlIHR4IGludGVycnVwdHMgYXJlIGtlcHQgdG8gYSByZWFzb25hYmxlIGxldmVsLgorCQkgKiBXaGVuIHRoZSBxdWV1ZSBpcyBub3QgZnVsbCwgcmVjbGFtYXRpb24gb2Ygc2ticyBzdGlsbCBvY2N1cnMKKwkJICogYXMgbmV3IHBhY2tldHMgYXJlIHRyYW5zbWl0dGVkLCBvciBvbiBhIHF1ZXVlLWVtcHR5CisJCSAqIGludGVycnVwdC4KKwkJICovCisKKwkJaWYgKCh0eCAlIFRTSTEwOF9UWF9JTlRfRlJFUSA9PSAwKSAmJgorCQkgICAgKChUU0kxMDhfVFhSSU5HX0xFTiAtIGRhdGEtPnR4ZnJlZSkgPj0gVFNJMTA4X1RYX0lOVF9GUkVRKSkKKwkJCW1pc2MgPSBUU0kxMDhfVFhfSU5UOworCisJCWRhdGEtPnR4c2tic1t0eF0gPSBza2I7CisKKwkJaWYgKGkgPT0gMCkgeworCQkJZGF0YS0+dHhyaW5nW3R4XS5idWYwID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLAorCQkJCQlza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW4sIERNQV9UT19ERVZJQ0UpOworCQkJZGF0YS0+dHhyaW5nW3R4XS5sZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJCQltaXNjIHw9IFRTSTEwOF9UWF9TT0Y7CisJCX0gZWxzZSB7CisJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaSAtIDFdOworCisJCQlkYXRhLT50eHJpbmdbdHhdLmJ1ZjAgPQorCQkJICAgIGRtYV9tYXBfcGFnZShOVUxMLCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkJICAgIGZyYWctPnNpemUsIERNQV9UT19ERVZJQ0UpOworCQkJZGF0YS0+dHhyaW5nW3R4XS5sZW4gPSBmcmFnLT5zaXplOworCQl9CisKKwkJaWYgKGkgPT0gZnJhZ3MgLSAxKQorCQkJbWlzYyB8PSBUU0kxMDhfVFhfRU9GOworCisJCWlmIChuZXRpZl9tc2dfcGt0ZGF0YShkYXRhKSkgeworCQkJaW50IGk7CisJCQlwcmludGsoIiVzOiBUeCBGcmFtZSBjb250ZW50cyAoJWQpXG4iLCBkZXYtPm5hbWUsCisJCQkgICAgICAgc2tiLT5sZW4pOworCQkJZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuOyBpKyspCisJCQkJcHJpbnRrKCIgJTIuMngiLCBza2ItPmRhdGFbaV0pOworCQkJcHJpbnRrKCIuXG4iKTsKKwkJfQorCQlkYXRhLT50eHJpbmdbdHhdLm1pc2MgPSBtaXNjIHwgVFNJMTA4X1RYX09XTjsKKworCQlkYXRhLT50eGhlYWQgPSAoZGF0YS0+dHhoZWFkICsgMSkgJSBUU0kxMDhfVFhSSU5HX0xFTjsKKwkJZGF0YS0+dHhmcmVlLS07CisJfQorCisJdHNpMTA4X2NvbXBsZXRlX3R4KGRldik7CisKKwkvKiBUaGlzIG11c3QgYmUgZG9uZSBhZnRlciB0aGUgY2hlY2sgZm9yIGNvbXBsZXRlZCB0eCBkZXNjcmlwdG9ycywKKwkgKiBzbyB0aGF0IHRoZSB0YWlsIHBvaW50ZXIgaXMgY29ycmVjdC4KKwkgKi8KKworCWlmICghKFRTSV9SRUFEKFRTSTEwOF9FQ19UWFNUQVQpICYgVFNJMTA4X0VDX1RYU1RBVF9RVUVVRTApKQorCQl0c2kxMDhfcmVzdGFydF90eChkYXRhKTsKKworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+dHhsb2NrKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IHRzaTEwOF9jb21wbGV0ZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBkb25lID0gMDsKKworCXdoaWxlIChkYXRhLT5yeGZyZWUgJiYgZG9uZSAhPSBidWRnZXQpIHsKKwkJaW50IHJ4ID0gZGF0YS0+cnh0YWlsOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJCWlmIChkYXRhLT5yeHJpbmdbcnhdLm1pc2MgJiBUU0kxMDhfUlhfT1dOKQorCQkJYnJlYWs7CisKKwkJc2tiID0gZGF0YS0+cnhza2JzW3J4XTsKKwkJZGF0YS0+cnh0YWlsID0gKGRhdGEtPnJ4dGFpbCArIDEpICUgVFNJMTA4X1JYUklOR19MRU47CisJCWRhdGEtPnJ4ZnJlZS0tOworCQlkb25lKys7CisKKwkJaWYgKGRhdGEtPnJ4cmluZ1tyeF0ubWlzYyAmIFRTSTEwOF9SWF9CQUQpIHsKKwkJCXNwaW5fbG9ja19pcnEoJmRhdGEtPm1pc2Nsb2NrKTsKKworCQkJaWYgKGRhdGEtPnJ4cmluZ1tyeF0ubWlzYyAmIFRTSTEwOF9SWF9DUkMpCisJCQkJZGF0YS0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJaWYgKGRhdGEtPnJ4cmluZ1tyeF0ubWlzYyAmIFRTSTEwOF9SWF9PVkVSKQorCQkJCWRhdGEtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bWlzY2xvY2spOworCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5ldGlmX21zZ19wa3RkYXRhKGRhdGEpKSB7CisJCQlpbnQgaTsKKwkJCXByaW50aygiJXM6IFJ4IEZyYW1lIGNvbnRlbnRzICglZClcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBkYXRhLT5yeHJpbmdbcnhdLmxlbik7CisJCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cnhyaW5nW3J4XS5sZW47IGkrKykKKwkJCQlwcmludGsoIiAlMi4yeCIsIHNrYi0+ZGF0YVtpXSk7CisJCQlwcmludGsoIi5cbiIpOworCQl9CisKKwkJc2tiLT5kZXYgPSBkZXY7CisJCXNrYl9wdXQoc2tiLCBkYXRhLT5yeHJpbmdbcnhdLmxlbik7CisJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJfQorCisJcmV0dXJuIGRvbmU7Cit9CisKK3N0YXRpYyBpbnQgdHNpMTA4X3JlZmlsbF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBkb25lID0gMDsKKworCXdoaWxlIChkYXRhLT5yeGZyZWUgIT0gVFNJMTA4X1JYUklOR19MRU4gJiYgZG9uZSAhPSBidWRnZXQpIHsKKwkJaW50IHJ4ID0gZGF0YS0+cnhoZWFkOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJCWRhdGEtPnJ4c2tic1tyeF0gPSBza2IgPSBkZXZfYWxsb2Nfc2tiKFRTSTEwOF9SWEJVRl9TSVpFICsgMik7CisJCWlmICghc2tiKQorCQkJYnJlYWs7CisKKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsgLyogQWxpZ24gdGhlIGRhdGEgb24gYSA0LWJ5dGUgYm91bmRhcnkuICovCisKKwkJZGF0YS0+cnhyaW5nW3J4XS5idWYwID0gZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLAorCQkJCQkJCVRTSTEwOF9SWF9TS0JfU0laRSwKKwkJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOworCisJCS8qIFNvbWV0aW1lcyB0aGUgaGFyZHdhcmUgc2V0cyBibGVuIHRvIHplcm8gYWZ0ZXIgcGFja2V0CisJCSAqIHJlY2VwdGlvbiwgZXZlbiB0aG91Z2ggdGhlIG1hbnVhbCBzYXlzIHRoYXQgaXQncyBvbmx5IGV2ZXIKKwkJICogbW9kaWZpZWQgYnkgdGhlIGRyaXZlci4KKwkJICovCisKKwkJZGF0YS0+cnhyaW5nW3J4XS5ibGVuID0gVFNJMTA4X1JYX1NLQl9TSVpFOworCQlkYXRhLT5yeHJpbmdbcnhdLm1pc2MgPSBUU0kxMDhfUlhfT1dOIHwgVFNJMTA4X1JYX0lOVDsKKworCQlkYXRhLT5yeGhlYWQgPSAoZGF0YS0+cnhoZWFkICsgMSkgJSBUU0kxMDhfUlhSSU5HX0xFTjsKKwkJZGF0YS0+cnhmcmVlKys7CisJCWRvbmUrKzsKKwl9CisKKwlpZiAoZG9uZSAhPSAwICYmICEoVFNJX1JFQUQoVFNJMTA4X0VDX1JYU1RBVCkgJgorCQkJICAgVFNJMTA4X0VDX1JYU1RBVF9RVUVVRTApKQorCQl0c2kxMDhfcmVzdGFydF9yeChkYXRhLCBkZXYpOworCisJcmV0dXJuIGRvbmU7Cit9CisKK3N0YXRpYyBpbnQgdHNpMTA4X3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGVzdGF0ID0gVFNJX1JFQUQoVFNJMTA4X0VDX1JYRVNUQVQpOworCXUzMiBpbnRzdGF0ID0gVFNJX1JFQUQoVFNJMTA4X0VDX0lOVFNUQVQpOworCWludCB0b3RhbF9idWRnZXQgPSBtaW4oKmJ1ZGdldCwgZGV2LT5xdW90YSk7CisJaW50IG51bV9yZWNlaXZlZCA9IDAsIG51bV9maWxsZWQgPSAwLCBidWRnZXRfdXNlZDsKKworCWludHN0YXQgJj0gVFNJMTA4X0lOVF9SWFFVRVVFMCB8IFRTSTEwOF9JTlRfUlhUSFJFU0ggfAorCSAgICBUU0kxMDhfSU5UX1JYT1ZFUlJVTiB8IFRTSTEwOF9JTlRfUlhFUlJPUiB8IFRTSTEwOF9JTlRfUlhXQUlUOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWEVTVEFULCBlc3RhdCk7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRTVEFULCBpbnRzdGF0KTsKKworCWlmIChkYXRhLT5yeHBlbmRpbmcgfHwgKGVzdGF0ICYgVFNJMTA4X0VDX1JYRVNUQVRfUTBfREVTQ0lOVCkpCisJCW51bV9yZWNlaXZlZCA9IHRzaTEwOF9jb21wbGV0ZV9yeChkZXYsIHRvdGFsX2J1ZGdldCk7CisKKwkvKiBUaGlzIHNob3VsZCBub3JtYWxseSBmaWxsIG5vIG1vcmUgc2xvdHMgdGhhbiB0aGUgbnVtYmVyIG9mCisJICogcGFja2V0cyByZWNlaXZlZCBpbiB0c2kxMDhfY29tcGxldGVfcngoKS4gIFRoZSBleGNlcHRpb24KKwkgKiBpcyB3aGVuIHdlIHByZXZpb3VzbHkgcmFuIG91dCBvZiBtZW1vcnkgZm9yIFJYIFNLQnMuICBJbiB0aGF0CisJICogY2FzZSwgaXQncyBoZWxwZnVsIHRvIG9iZXkgdGhlIGJ1ZGdldCwgbm90IG9ubHkgc28gdGhhdCB0aGUKKwkgKiBDUFUgaXNuJ3QgaG9nZ2VkLCBidXQgc28gdGhhdCBtZW1vcnkgKHdoaWNoIG1heSBzdGlsbCBiZSBsb3cpCisJICogaXMgbm90IGhvZ2dlZCBieSBvbmUgZGV2aWNlLgorCSAqCisJICogQSB3b3JrIHVuaXQgaXMgY29uc2lkZXJlZCB0byBiZSB0d28gU0tCcyB0byBhbGxvdyB1cyB0byBjYXRjaAorCSAqIHVwIHdoZW4gdGhlIHJpbmcgaGFzIHNocnVuayBkdWUgdG8gb3V0LW9mLW1lbW9yeSBidXQgd2UncmUKKwkgKiBzdGlsbCByZW1vdmluZyB0aGUgZnVsbCBidWRnZXQncyB3b3J0aCBvZiBwYWNrZXRzIGVhY2ggdGltZS4KKwkgKi8KKworCWlmIChkYXRhLT5yeGZyZWUgPCBUU0kxMDhfUlhSSU5HX0xFTikKKwkJbnVtX2ZpbGxlZCA9IHRzaTEwOF9yZWZpbGxfcngoZGV2LCB0b3RhbF9idWRnZXQgKiAyKTsKKworCWlmIChpbnRzdGF0ICYgVFNJMTA4X0lOVF9SWEVSUk9SKSB7CisJCXUzMiBlcnIgPSBUU0lfUkVBRChUU0kxMDhfRUNfUlhFUlIpOworCQlUU0lfV1JJVEUoVFNJMTA4X0VDX1JYRVJSLCBlcnIpOworCisJCWlmIChlcnIpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBlcnJvciAleFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCisJCQlpZiAoIShUU0lfUkVBRChUU0kxMDhfRUNfUlhTVEFUKSAmCisJCQkgICAgICBUU0kxMDhfRUNfUlhTVEFUX1FVRVVFMCkpCisJCQkJdHNpMTA4X3Jlc3RhcnRfcngoZGF0YSwgZGV2KTsKKwkJfQorCX0KKworCWlmIChpbnRzdGF0ICYgVFNJMTA4X0lOVF9SWE9WRVJSVU4pIHsKKwkJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bWlzY2xvY2spOworCQlkYXRhLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQlzcGluX3VubG9ja19pcnEoJmRhdGEtPm1pc2Nsb2NrKTsKKwl9CisKKwlidWRnZXRfdXNlZCA9IG1heChudW1fcmVjZWl2ZWQsIG51bV9maWxsZWQgLyAyKTsKKworCSpidWRnZXQgLT0gYnVkZ2V0X3VzZWQ7CisJZGV2LT5xdW90YSAtPSBidWRnZXRfdXNlZDsKKworCWlmIChidWRnZXRfdXNlZCAhPSB0b3RhbF9idWRnZXQpIHsKKwkJZGF0YS0+cnhwZW5kaW5nID0gMDsKKwkJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKworCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0lOVE1BU0ssCisJCQkJICAgICBUU0lfUkVBRChUU0kxMDhfRUNfSU5UTUFTSykKKwkJCQkgICAgICYgfihUU0kxMDhfSU5UX1JYUVVFVUUwCisJCQkJCSB8IFRTSTEwOF9JTlRfUlhUSFJFU0ggfAorCQkJCQkgVFNJMTA4X0lOVF9SWE9WRVJSVU4gfAorCQkJCQkgVFNJMTA4X0lOVF9SWEVSUk9SIHwKKwkJCQkJIFRTSTEwOF9JTlRfUlhXQUlUKSk7CisKKwkJLyogSVJRcyBhcmUgbGV2ZWwtdHJpZ2dlcmVkLCBzbyBubyBuZWVkIHRvIHJlLWNoZWNrICovCisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWRhdGEtPnJ4cGVuZGluZyA9IDE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHRzaTEwOF9yeF9pbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIEEgcmFjZSBjb3VsZCBjYXVzZSBkZXYgdG8gYWxyZWFkeSBiZSBzY2hlZHVsZWQsIHNvIGl0J3Mgbm90IGFuCisJICogZXJyb3IgaWYgdGhhdCBoYXBwZW5zIChhbmQgaW50ZXJydXB0cyBzaG91bGRuJ3QgYmUgcmUtbWFza2VkLAorCSAqIGJlY2F1c2UgdGhhdCBjYW4gY2F1c2UgaGFybWZ1bCByYWNlcywgaWYgcG9sbCBoYXMgYWxyZWFkeQorCSAqIHVubWFza2VkIHRoZW0gYnV0IG5vdCBjbGVhcmVkIExJTktfU1RBVEVfU0NIRUQpLgorCSAqCisJICogVGhpcyBjYW4gaGFwcGVuIGlmIHRoaXMgY29kZSByYWNlcyB3aXRoIHRzaTEwOF9wb2xsKCksIHdoaWNoIG1hc2tzCisJICogdGhlIGludGVycnVwdHMgYWZ0ZXIgdHNpMTA4X2lycV9vbmUoKSByZWFkIHRoZSBtYXNrLCBidXQgYmVmb3JlCisJICogbmV0aWZfcnhfc2NoZWR1bGUgaXMgY2FsbGVkLiAgSXQgY291bGQgYWxzbyBoYXBwZW4gZHVlIHRvIGNhbGxzCisJICogZnJvbSB0c2kxMDhfY2hlY2tfcnhyaW5nKCkuCisJICovCisKKwlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CisJCS8qIE1hc2ssIHJhdGhlciB0aGFuIGFjaywgdGhlIHJlY2VpdmUgaW50ZXJydXB0cy4gIFRoZSBhY2sKKwkJICogd2lsbCBoYXBwZW4gaW4gdHNpMTA4X3BvbGwoKS4KKwkJICovCisKKwkJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRNQVNLLAorCQkJCSAgICAgVFNJX1JFQUQoVFNJMTA4X0VDX0lOVE1BU0spIHwKKwkJCQkgICAgIFRTSTEwOF9JTlRfUlhRVUVVRTAKKwkJCQkgICAgIHwgVFNJMTA4X0lOVF9SWFRIUkVTSCB8CisJCQkJICAgICBUU0kxMDhfSU5UX1JYT1ZFUlJVTiB8IFRTSTEwOF9JTlRfUlhFUlJPUiB8CisJCQkJICAgICBUU0kxMDhfSU5UX1JYV0FJVCk7CisJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKwl9IGVsc2UgeworCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJLyogVGhpcyBjYW4gaGFwcGVuIGlmIGFuIGludGVycnVwdCBvY2N1cnMgd2hpbGUgdGhlCisJCQkgKiBpbnRlcmZhY2UgaXMgYmVpbmcgYnJvdWdodCBkb3duLCBhcyB0aGUgU1RBUlQKKwkJCSAqIGJpdCBpcyBjbGVhcmVkIGJlZm9yZSB0aGUgc3RvcCBmdW5jdGlvbiBpcyBjYWxsZWQuCisJCQkgKgorCQkJICogSW4gdGhpcyBjYXNlLCB0aGUgaW50ZXJydXB0cyBtdXN0IGJlIG1hc2tlZCwgb3IKKwkJCSAqIHRoZXkgd2lsbCBjb250aW51ZSBpbmRlZmluaXRlbHkuCisJCQkgKgorCQkJICogVGhlcmUncyBhIHJhY2UgaGVyZSBpZiB0aGUgaW50ZXJmYWNlIGlzIGJyb3VnaHQgZG93bgorCQkJICogYW5kIHRoZW4gdXAgaW4gcmFwaWQgc3VjY2Vzc2lvbiwgYXMgdGhlIGRldmljZSBjb3VsZAorCQkJICogYmUgbWFkZSBydW5uaW5nIGFmdGVyIHRoZSBhYm92ZSBjaGVjayBhbmQgYmVmb3JlCisJCQkgKiB0aGUgbWFza2luZyBiZWxvdy4gIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiBpZiB0aGUgSVJRCisJCQkgKiB0aHJlYWQgaGFzIGEgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgdGFzayBicmluaW5nCisJCQkgKiB1cCB0aGUgaW50ZXJmYWNlLiAgRml4aW5nIHRoaXMgcmFjZSB3b3VsZCBsaWtlbHkKKwkJCSAqIHJlcXVpcmUgY2hhbmdlcyBpbiBnZW5lcmljIGNvZGUuCisJCQkgKi8KKworCQkJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRNQVNLLAorCQkJCQkgICAgIFRTSV9SRUFECisJCQkJCSAgICAgKFRTSTEwOF9FQ19JTlRNQVNLKSB8CisJCQkJCSAgICAgVFNJMTA4X0lOVF9SWFFVRVVFMCB8CisJCQkJCSAgICAgVFNJMTA4X0lOVF9SWFRIUkVTSCB8CisJCQkJCSAgICAgVFNJMTA4X0lOVF9SWE9WRVJSVU4gfAorCQkJCQkgICAgIFRTSTEwOF9JTlRfUlhFUlJPUiB8CisJCQkJCSAgICAgVFNJMTA4X0lOVF9SWFdBSVQpOworCQl9CisJfQorfQorCisvKiBJZiB0aGUgUlggcmluZyBoYXMgcnVuIG91dCBvZiBtZW1vcnksIHRyeSBwZXJpb2RpY2FsbHkKKyAqIHRvIGFsbG9jYXRlIHNvbWUgbW9yZSwgYXMgb3RoZXJ3aXNlIHBvbGwgd291bGQgbmV2ZXIKKyAqIGdldCBjYWxsZWQgKGFwYXJ0IGZyb20gdGhlIGluaXRpYWwgZW5kLW9mLXF1ZXVlIGNvbmRpdGlvbikuCisgKgorICogVGhpcyBpcyBjYWxsZWQgb25jZSBwZXIgc2Vjb25kIChieSBkZWZhdWx0KSBmcm9tIHRoZSB0aHJlYWQuCisgKi8KKworc3RhdGljIHZvaWQgdHNpMTA4X2NoZWNrX3J4cmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCisJLyogQSBwb2xsIGlzIHNjaGVkdWxlZCwgYXMgb3Bwb3NlZCB0byBjYWxpbmcgdHNpMTA4X3JlZmlsbF9yeAorCSAqIGRpcmVjdGx5LCBzbyBhcyB0byBrZWVwIHRoZSByZWNlaXZlIHBhdGggc2luZ2xlLXRocmVhZGVkCisJICogKGFuZCB0aHVzIG5vdCBuZWVkaW5nIGEgbG9jaykuCisJICovCisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIGRhdGEtPnJ4ZnJlZSA8IFRTSTEwOF9SWFJJTkdfTEVOIC8gNCkKKwkJdHNpMTA4X3J4X2ludChkZXYpOworfQorCitzdGF0aWMgdm9pZCB0c2kxMDhfdHhfaW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGVzdGF0ID0gVFNJX1JFQUQoVFNJMTA4X0VDX1RYRVNUQVQpOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19UWEVTVEFULCBlc3RhdCk7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRTVEFULCBUU0kxMDhfSU5UX1RYUVVFVUUwIHwKKwkJCSAgICAgVFNJMTA4X0lOVF9UWElETEUgfCBUU0kxMDhfSU5UX1RYRVJST1IpOworCWlmIChlc3RhdCAmIFRTSTEwOF9FQ19UWEVTVEFUX1EwX0VSUikgeworCQl1MzIgZXJyID0gVFNJX1JFQUQoVFNJMTA4X0VDX1RYRVJSKTsKKwkJVFNJX1dSSVRFKFRTSTEwOF9FQ19UWEVSUiwgZXJyKTsKKworCQlpZiAoZXJyICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRYIGVycm9yICV4XG4iLCBkZXYtPm5hbWUsIGVycik7CisJfQorCisJaWYgKGVzdGF0ICYgKFRTSTEwOF9FQ19UWEVTVEFUX1EwX0RFU0NJTlQgfCBUU0kxMDhfRUNfVFhFU1RBVF9RMF9FT1EpKSB7CisJCXNwaW5fbG9jaygmZGF0YS0+dHhsb2NrKTsKKwkJdHNpMTA4X2NvbXBsZXRlX3R4KGRldik7CisJCXNwaW5fdW5sb2NrKCZkYXRhLT50eGxvY2spOworCX0KK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgdHNpMTA4X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgc3RhdCA9IFRTSV9SRUFEKFRTSTEwOF9FQ19JTlRTVEFUKTsKKworCWlmICghKHN0YXQgJiBUU0kxMDhfSU5UX0FOWSkpCisJCXJldHVybiBJUlFfTk9ORTsJLyogTm90IG91ciBpbnRlcnJ1cHQgKi8KKworCXN0YXQgJj0gflRTSV9SRUFEKFRTSTEwOF9FQ19JTlRNQVNLKTsKKworCWlmIChzdGF0ICYgKFRTSTEwOF9JTlRfVFhRVUVVRTAgfCBUU0kxMDhfSU5UX1RYSURMRSB8CisJCSAgICBUU0kxMDhfSU5UX1RYRVJST1IpKQorCQl0c2kxMDhfdHhfaW50KGRldik7CisJaWYgKHN0YXQgJiAoVFNJMTA4X0lOVF9SWFFVRVVFMCB8IFRTSTEwOF9JTlRfUlhUSFJFU0ggfAorCQkgICAgVFNJMTA4X0lOVF9SWFdBSVQgfCBUU0kxMDhfSU5UX1JYT1ZFUlJVTiB8CisJCSAgICBUU0kxMDhfSU5UX1JYRVJST1IpKQorCQl0c2kxMDhfcnhfaW50KGRldik7CisKKwlpZiAoc3RhdCAmIFRTSTEwOF9JTlRfU0ZOKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNGTiBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRTVEFULCBUU0kxMDhfSU5UX1NGTik7CisJfQorCisJaWYgKHN0YXQgJiBUU0kxMDhfSU5UX1NUQVRDQVJSWSkgeworCQl0c2kxMDhfc3RhdF9jYXJyeShkZXYpOworCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0lOVFNUQVQsIFRTSTEwOF9JTlRfU1RBVENBUlJZKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHRzaTEwOF9zdG9wX2V0aGVybmV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGkgPSAxMDAwOworCS8qIERpc2FibGUgYWxsIFRYIGFuZCBSWCBxdWV1ZXMgLi4uICovCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19UWENUUkwsIDApOworCVRTSV9XUklURShUU0kxMDhfRUNfUlhDVFJMLCAwKTsKKworCS8qIC4uLmFuZCB3YWl0IGZvciB0aGVtIHRvIGJlY29tZSBpZGxlICovCisJd2hpbGUoaS0tKSB7CisJCWlmKCEoVFNJX1JFQUQoVFNJMTA4X0VDX1RYU1RBVCkgJiBUU0kxMDhfRUNfVFhTVEFUX0FDVElWRSkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisJaSA9IDEwMDA7CisJd2hpbGUoaS0tKXsKKwkJaWYoIShUU0lfUkVBRChUU0kxMDhfRUNfUlhTVEFUKSAmIFRTSTEwOF9FQ19SWFNUQVRfQUNUSVZFKSkKKwkJCXJldHVybjsKKwkJdWRlbGF5KDEwKTsKKwl9CisJcHJpbnRrKEtFUk5fRVJSICIlcyBmdW5jdGlvbiB0aW1lIG91dCBcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRpYyB2b2lkIHRzaTEwOF9yZXNldF9ldGhlcihzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICogZGF0YSkKK3sKKwlUU0lfV1JJVEUoVFNJMTA4X01BQ19DRkcxLCBUU0kxMDhfTUFDX0NGRzFfU09GVFJTVCk7CisJdWRlbGF5KDEwMCk7CisJVFNJX1dSSVRFKFRTSTEwOF9NQUNfQ0ZHMSwgMCk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX1BPUlRDVFJMLCBUU0kxMDhfRUNfUE9SVENUUkxfU1RBVFJTVCk7CisJdWRlbGF5KDEwMCk7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19QT1JUQ1RSTCwKKwkJCSAgICAgVFNJX1JFQUQoVFNJMTA4X0VDX1BPUlRDVFJMKSAmCisJCQkgICAgIH5UU0kxMDhfRUNfUE9SVENUUkxfU1RBVFJTVCk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX1RYQ0ZHLCBUU0kxMDhfRUNfVFhDRkdfUlNUKTsKKwl1ZGVsYXkoMTAwKTsKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX1RYQ0ZHLAorCQkJICAgICBUU0lfUkVBRChUU0kxMDhfRUNfVFhDRkcpICYKKwkJCSAgICAgflRTSTEwOF9FQ19UWENGR19SU1QpOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWENGRywgVFNJMTA4X0VDX1JYQ0ZHX1JTVCk7CisJdWRlbGF5KDEwMCk7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWENGRywKKwkJCSAgICAgVFNJX1JFQUQoVFNJMTA4X0VDX1JYQ0ZHKSAmCisJCQkgICAgIH5UU0kxMDhfRUNfUlhDRkdfUlNUKTsKKworCVRTSV9XUklURShUU0kxMDhfTUFDX01JSV9NR01UX0NGRywKKwkJCSAgICAgVFNJX1JFQUQoVFNJMTA4X01BQ19NSUlfTUdNVF9DRkcpIHwKKwkJCSAgICAgVFNJMTA4X01BQ19NSUlfTUdNVF9SU1QpOworCXVkZWxheSgxMDApOworCVRTSV9XUklURShUU0kxMDhfTUFDX01JSV9NR01UX0NGRywKKwkJCSAgICAgKFRTSV9SRUFEKFRTSTEwOF9NQUNfTUlJX01HTVRfQ0ZHKSAmCisJCQkgICAgIH4oVFNJMTA4X01BQ19NSUlfTUdNVF9SU1QgfAorCQkJICAgICAgIFRTSTEwOF9NQUNfTUlJX01HTVRfQ0xLKSkgfCAweDA3KTsKK30KKworc3RhdGljIGludCB0c2kxMDhfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b3JkMSA9IFRTSV9SRUFEKFRTSTEwOF9NQUNfQUREUjEpOworCXUzMiB3b3JkMiA9IFRTSV9SRUFEKFRTSTEwOF9NQUNfQUREUjIpOworCisJLyogTm90ZSB0aGF0IHRoZSBvY3RldHMgYXJlIHJldmVyc2VkIGZyb20gd2hhdCB0aGUgbWFudWFsIHNheXMsCisJICogcHJvZHVjaW5nIGFuIGV2ZW4gd2VpcmRlciBvcmRlcmluZy4uLgorCSAqLworCWlmICh3b3JkMiA9PSAwICYmIHdvcmQxID09IDApIHsKKwkJZGV2LT5kZXZfYWRkclswXSA9IDB4MDA7CisJCWRldi0+ZGV2X2FkZHJbMV0gPSAweDA2OworCQlkZXYtPmRldl9hZGRyWzJdID0gMHhkMjsKKwkJZGV2LT5kZXZfYWRkclszXSA9IDB4MDA7CisJCWRldi0+ZGV2X2FkZHJbNF0gPSAweDAwOworCQlpZiAoMHg4ID09IGRhdGEtPnBoeSkKKwkJCWRldi0+ZGV2X2FkZHJbNV0gPSAweDAxOworCQllbHNlCisJCQlkZXYtPmRldl9hZGRyWzVdID0gMHgwMjsKKworCQl3b3JkMiA9IChkZXYtPmRldl9hZGRyWzBdIDw8IDE2KSB8IChkZXYtPmRldl9hZGRyWzFdIDw8IDI0KTsKKworCQl3b3JkMSA9IChkZXYtPmRldl9hZGRyWzJdIDw8IDApIHwgKGRldi0+ZGV2X2FkZHJbM10gPDwgOCkgfAorCQkgICAgKGRldi0+ZGV2X2FkZHJbNF0gPDwgMTYpIHwgKGRldi0+ZGV2X2FkZHJbNV0gPDwgMjQpOworCisJCVRTSV9XUklURShUU0kxMDhfTUFDX0FERFIxLCB3b3JkMSk7CisJCVRTSV9XUklURShUU0kxMDhfTUFDX0FERFIyLCB3b3JkMik7CisJfSBlbHNlIHsKKwkJZGV2LT5kZXZfYWRkclswXSA9ICh3b3JkMiA+PiAxNikgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzFdID0gKHdvcmQyID4+IDI0KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMl0gPSAod29yZDEgPj4gMCkgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzNdID0gKHdvcmQxID4+IDgpICYgMHhmZjsKKwkJZGV2LT5kZXZfYWRkcls0XSA9ICh3b3JkMSA+PiAxNikgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzVdID0gKHdvcmQxID4+IDI0KSAmIDB4ZmY7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CisJCXByaW50aygiS0VSTl9FUlI6IHdvcmQxOiAlMDh4LCB3b3JkMjogJTA4eFxuIiwgd29yZDEsIHdvcmQyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHNpMTA4X3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgd29yZDEsIHdvcmQyOworCWludCBpOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCS8qICsyIGlzIGZvciB0aGUgb2Zmc2V0IG9mIHRoZSBIVyBhZGRyIHR5cGUgKi8KKwkJZGV2LT5kZXZfYWRkcltpXSA9ICgodW5zaWduZWQgY2hhciAqKWFkZHIpW2kgKyAyXTsKKworCXdvcmQyID0gKGRldi0+ZGV2X2FkZHJbMF0gPDwgMTYpIHwgKGRldi0+ZGV2X2FkZHJbMV0gPDwgMjQpOworCisJd29yZDEgPSAoZGV2LT5kZXZfYWRkclsyXSA8PCAwKSB8IChkZXYtPmRldl9hZGRyWzNdIDw8IDgpIHwKKwkgICAgKGRldi0+ZGV2X2FkZHJbNF0gPDwgMTYpIHwgKGRldi0+ZGV2X2FkZHJbNV0gPDwgMjQpOworCisJc3Bpbl9sb2NrX2lycSgmZGF0YS0+bWlzY2xvY2spOworCVRTSV9XUklURShUU0kxMDhfTUFDX0FERFIxLCB3b3JkMSk7CisJVFNJX1dSSVRFKFRTSTEwOF9NQUNfQUREUjIsIHdvcmQyKTsKKwlzcGluX2xvY2soJmRhdGEtPnR4bG9jayk7CisKKwlpZiAoZGF0YS0+dHhmcmVlICYmIGRhdGEtPmxpbmtfdXApCisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKworCXNwaW5fdW5sb2NrKCZkYXRhLT50eGxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmZGF0YS0+bWlzY2xvY2spOworCXJldHVybiAwOworfQorCisvKiBQcm90ZWN0ZWQgYnkgZGV2LT54bWl0X2xvY2suICovCitzdGF0aWMgdm9pZCB0c2kxMDhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgcnhjZmcgPSBUU0lfUkVBRChUU0kxMDhfRUNfUlhDRkcpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlyeGNmZyAmPSB+KFRTSTEwOF9FQ19SWENGR19VQ19IQVNIIHwgVFNJMTA4X0VDX1JYQ0ZHX01DX0hBU0gpOworCQlyeGNmZyB8PSBUU0kxMDhfRUNfUlhDRkdfVUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01GRTsKKwkJZ290byBvdXQ7CisJfQorCisJcnhjZmcgJj0gfihUU0kxMDhfRUNfUlhDRkdfVUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01GRSk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50KSB7CisJCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gZGV2LT5tY19saXN0OworCQlyeGNmZyB8PSBUU0kxMDhfRUNfUlhDRkdfTUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01DX0hBU0g7CisKKwkJbWVtc2V0KGRhdGEtPm1jX2hhc2gsIDAsIHNpemVvZihkYXRhLT5tY19oYXNoKSk7CisKKwkJd2hpbGUgKG1jKSB7CisJCQl1MzIgaGFzaCwgY3JjOworCisJCQlpZiAobWMtPmRtaV9hZGRybGVuID09IDYpIHsKKwkJCQljcmMgPSBldGhlcl9jcmMoNiwgbWMtPmRtaV9hZGRyKTsKKwkJCQloYXNoID0gY3JjID4+IDIzOworCisJCQkJX19zZXRfYml0KGhhc2gsICZkYXRhLT5tY19oYXNoWzBdKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogZ290IG11bHRpY2FzdCBhZGRyZXNzIG9mIGxlbmd0aCAlZCAiCisJCQkJICAgICAgICJpbnN0ZWFkIG9mIDYuXG4iLCBkZXYtPm5hbWUsCisJCQkJICAgICAgIG1jLT5kbWlfYWRkcmxlbik7CisJCQl9CisKKwkJCW1jID0gbWMtPm5leHQ7CisJCX0KKworCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0hBU0hBRERSLAorCQkJCSAgICAgVFNJMTA4X0VDX0hBU0hBRERSX0FVVE9JTkMgfAorCQkJCSAgICAgVFNJMTA4X0VDX0hBU0hBRERSX01DQVNUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJLyogVGhlIG1hbnVhbCBzYXlzIHRoYXQgdGhlIGhhcmR3YXJlIG1heSBkcm9wCisJCQkgKiBiYWNrLXRvLWJhY2sgd3JpdGVzIHRvIHRoZSBkYXRhIHJlZ2lzdGVyLgorCQkJICovCisJCQl1ZGVsYXkoMSk7CisJCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0hBU0hEQVRBLAorCQkJCQkgICAgIGRhdGEtPm1jX2hhc2hbaV0pOworCQl9CisJfQorCisgICAgICBvdXQ6CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWENGRywgcnhjZmcpOworfQorCitzdGF0aWMgdm9pZCB0c2kxMDhfaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgaSA9IDA7CisJdTE2IHBoeXZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwaHlfbG9jaywgZmxhZ3MpOworCisJdHNpMTA4X3dyaXRlX21paShkYXRhLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisJd2hpbGUgKGktLSl7CisJCWlmKCEodHNpMTA4X3JlYWRfbWlpKGRhdGEsIE1JSV9CTUNSKSAmIEJNQ1JfUkVTRVQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCWlmIChpID09IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXMgZnVuY3Rpb24gdGltZSBvdXQgXG4iLCBfX0ZVTkNUSU9OX18pOworCisjaWYgKFRTSTEwOF9QSFlfVFlQRSA9PSBQSFlfQkNNNTRYWCkJLyogQnJvYWRjb20gQkNNNTR4eCBQSFkgKi8KKwl0c2kxMDhfd3JpdGVfbWlpKGRhdGEsIDB4MDksIDB4MDMwMCk7CisJdHNpMTA4X3dyaXRlX21paShkYXRhLCAweDEwLCAweDEwMjApOworCXRzaTEwOF93cml0ZV9taWkoZGF0YSwgMHgxYywgMHg4YzAwKTsKKyNlbmRpZgorCisJdHNpMTA4X3dyaXRlX21paShkYXRhLAorCQkJIE1JSV9CTUNSLAorCQkJIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJd2hpbGUgKHRzaTEwOF9yZWFkX21paShkYXRhLCBNSUlfQk1DUikgJiBCTUNSX0FOUkVTVEFSVCkKKwkJY3B1X3JlbGF4KCk7CisKKwkvKiBTZXQgRy9NSUkgbW9kZSBhbmQgcmVjZWl2ZSBjbG9jayBzZWxlY3QgaW4gVEJJIGNvbnRyb2wgIzIuICBUaGUKKwkgKiBzZWNvbmQgcG9ydCB3b24ndCB3b3JrIGlmIHRoaXMgaXNuJ3QgZG9uZSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3QKKwkgKiB1c2UgVEJJIG1vZGUuCisJICovCisKKwl0c2kxMDhfd3JpdGVfdGJpKGRhdGEsIDB4MTEsIDB4MzApOworCisJLyogRklYTUU6IEl0IHNlZW1zIHRvIHRha2UgbW9yZSB0aGFuIDIgYmFjay10by1iYWNrIHJlYWRzIHRvIHRoZQorCSAqIFBIWV9TVEFUIHJlZ2lzdGVyIGJlZm9yZSB0aGUgbGluayB1cCBzdGF0dXMgYml0IGlzIHNldC4KKwkgKi8KKworCWRhdGEtPmxpbmtfdXAgPSAxOworCisJd2hpbGUgKCEoKHBoeXZhbCA9IHRzaTEwOF9yZWFkX21paShkYXRhLCBNSUlfQk1TUikpICYKKwkJIEJNU1JfTFNUQVRVUykpIHsKKwkJaWYgKGkrKyA+IChNSUlfUkVBRF9ERUxBWSAvIDEwKSkgeworCQkJZGF0YS0+bGlua191cCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaHlfbG9jaywgZmxhZ3MpOworCQltc2xlZXAoMTApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGh5X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiUEhZX1NUQVQgcmVnIGNvbnRhaW5zICUwOHhcbiIsIHBoeXZhbCk7CisJZGF0YS0+cGh5X29rID0gMTsKKwlkYXRhLT5pbml0X21lZGlhID0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaHlfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCB0c2kxMDhfa2lsbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBoeV9sb2NrLCBmbGFncyk7CisJdHNpMTA4X3dyaXRlX21paShkYXRhLCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7CisJZGF0YS0+cGh5X29rID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaHlfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHRzaTEwOF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IHJ4cmluZ19zaXplID0gVFNJMTA4X1JYUklOR19MRU4gKiBzaXplb2YocnhfZGVzYyk7CisJdW5zaWduZWQgaW50IHR4cmluZ19zaXplID0gVFNJMTA4X1RYUklOR19MRU4gKiBzaXplb2YodHhfZGVzYyk7CisKKwlpID0gcmVxdWVzdF9pcnEoZGF0YS0+aXJxX251bSwgdHNpMTA4X2lycSwgMCwgZGV2LT5uYW1lLCBkZXYpOworCWlmIChpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0c2kxMDhfZXRoJWQ6IENvdWxkIG5vdCBhbGxvY2F0ZSBJUlElZC5cbiIsCisJCSAgICAgICBkYXRhLT5pZCwgZGF0YS0+aXJxX251bSk7CisJCXJldHVybiBpOworCX0gZWxzZSB7CisJCWRldi0+aXJxID0gZGF0YS0+aXJxX251bTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCSAgICAgICAidHNpMTA4X29wZW4gOiBQb3J0ICVkIEFzc2lnbmVkIElSUSAlZCB0byAlc1xuIiwKKwkJICAgICAgIGRhdGEtPmlkLCBkZXYtPmlycSwgZGV2LT5uYW1lKTsKKwl9CisKKwlkYXRhLT5yeHJpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgcnhyaW5nX3NpemUsCisJCQkmZGF0YS0+cnhkbWEsIEdGUF9LRVJORUwpOworCisJaWYgKCFkYXRhLT5yeHJpbmcpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJUU0kxMDhfRVRIOiBmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByeHJpbmchXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRhdGEtPnJ4cmluZywgMCwgcnhyaW5nX3NpemUpOworCX0KKworCWRhdGEtPnR4cmluZyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCB0eHJpbmdfc2l6ZSwKKwkJCSZkYXRhLT50eGRtYSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWRhdGEtPnR4cmluZykgeworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIlRTSTEwOF9FVEg6IGZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHR4cmluZyFcbiIpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KDAsIHJ4cmluZ19zaXplLCBkYXRhLT5yeHJpbmcsIGRhdGEtPnJ4ZG1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRhdGEtPnR4cmluZywgMCwgdHhyaW5nX3NpemUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBUU0kxMDhfUlhSSU5HX0xFTjsgaSsrKSB7CisJCWRhdGEtPnJ4cmluZ1tpXS5uZXh0MCA9IGRhdGEtPnJ4ZG1hICsgKGkgKyAxKSAqIHNpemVvZihyeF9kZXNjKTsKKwkJZGF0YS0+cnhyaW5nW2ldLmJsZW4gPSBUU0kxMDhfUlhCVUZfU0laRTsKKwkJZGF0YS0+cnhyaW5nW2ldLnZsYW4gPSAwOworCX0KKworCWRhdGEtPnJ4cmluZ1tUU0kxMDhfUlhSSU5HX0xFTiAtIDFdLm5leHQwID0gZGF0YS0+cnhkbWE7CisKKwlkYXRhLT5yeHRhaWwgPSAwOworCWRhdGEtPnJ4aGVhZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFNJMTA4X1JYUklOR19MRU47IGkrKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYihUU0kxMDhfUlhCVUZfU0laRSArIE5FVF9JUF9BTElHTik7CisKKwkJaWYgKCFza2IpIHsKKwkJCS8qIEJhaC4gIE5vIG1lbW9yeSBmb3Igbm93LCBidXQgbWF5YmUgd2UnbGwgZ2V0CisJCQkgKiBzb21lIG1vcmUgbGF0ZXIuCisJCQkgKiBGb3Igbm93LCB3ZSdsbCBsaXZlIHdpdGggdGhlIHNtYWxsZXIgcmluZy4KKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogQ291bGQgb25seSBhbGxvY2F0ZSAlZCByZWNlaXZlIHNrYihzKS5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKKwkJCWRhdGEtPnJ4aGVhZCA9IGk7CisJCQlicmVhazsKKwkJfQorCisJCWRhdGEtPnJ4c2tic1tpXSA9IHNrYjsKKwkJLyogQWxpZ24gdGhlIHBheWxvYWQgb24gYSA0LWJ5dGUgYm91bmRhcnkgKi8KKwkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJZGF0YS0+cnhza2JzW2ldID0gc2tiOworCQlkYXRhLT5yeHJpbmdbaV0uYnVmMCA9IHZpcnRfdG9fcGh5cyhkYXRhLT5yeHNrYnNbaV0tPmRhdGEpOworCQlkYXRhLT5yeHJpbmdbaV0ubWlzYyA9IFRTSTEwOF9SWF9PV04gfCBUU0kxMDhfUlhfSU5UOworCX0KKworCWRhdGEtPnJ4ZnJlZSA9IGk7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWFFfUFRSTE9XLCBkYXRhLT5yeGRtYSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVFNJMTA4X1RYUklOR19MRU47IGkrKykgeworCQlkYXRhLT50eHJpbmdbaV0ubmV4dDAgPSBkYXRhLT50eGRtYSArIChpICsgMSkgKiBzaXplb2YodHhfZGVzYyk7CisJCWRhdGEtPnR4cmluZ1tpXS5taXNjID0gMDsKKwl9CisKKwlkYXRhLT50eHJpbmdbVFNJMTA4X1RYUklOR19MRU4gLSAxXS5uZXh0MCA9IGRhdGEtPnR4ZG1hOworCWRhdGEtPnR4dGFpbCA9IDA7CisJZGF0YS0+dHhoZWFkID0gMDsKKwlkYXRhLT50eGZyZWUgPSBUU0kxMDhfVFhSSU5HX0xFTjsKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX1RYUV9QVFJMT1csIGRhdGEtPnR4ZG1hKTsKKwl0c2kxMDhfaW5pdF9waHkoZGV2KTsKKworCXNldHVwX3RpbWVyKCZkYXRhLT50aW1lciwgdHNpMTA4X3RpbWVkX2NoZWNrZXIsICh1bnNpZ25lZCBsb25nKWRldik7CisJbW9kX3RpbWVyKCZkYXRhLT50aW1lciwgamlmZmllcyArIDEpOworCisJdHNpMTA4X3Jlc3RhcnRfcngoZGF0YSwgZGV2KTsKKworCVRTSV9XUklURShUU0kxMDhfRUNfSU5UU1RBVCwgfjApOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRNQVNLLAorCQkJICAgICB+KFRTSTEwOF9JTlRfVFhRVUVVRTAgfCBUU0kxMDhfSU5UX1JYRVJST1IgfAorCQkJICAgICAgIFRTSTEwOF9JTlRfUlhUSFJFU0ggfCBUU0kxMDhfSU5UX1JYUVVFVUUwIHwKKwkJCSAgICAgICBUU0kxMDhfSU5UX1JYT1ZFUlJVTiB8IFRTSTEwOF9JTlRfUlhXQUlUIHwKKwkJCSAgICAgICBUU0kxMDhfSU5UX1NGTiB8IFRTSTEwOF9JTlRfU1RBVENBUlJZKSk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X01BQ19DRkcxLAorCQkJICAgICBUU0kxMDhfTUFDX0NGRzFfUlhFTiB8IFRTSTEwOF9NQUNfQ0ZHMV9UWEVOKTsKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRzaTEwOF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB0c2kxMDhfcHJ2X2RhdGEgKmRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCisJZGVsX3RpbWVyX3N5bmMoJmRhdGEtPnRpbWVyKTsKKworCXRzaTEwOF9zdG9wX2V0aGVybmV0KGRldik7CisJdHNpMTA4X2tpbGxfcGh5KGRldik7CisJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRNQVNLLCB+MCk7CisJVFNJX1dSSVRFKFRTSTEwOF9NQUNfQ0ZHMSwgMCk7CisKKwkvKiBDaGVjayBmb3IgYW55IHBlbmRpbmcgVFggcGFja2V0cywgYW5kIGRyb3AgdGhlbS4gKi8KKworCXdoaWxlICghZGF0YS0+dHhmcmVlIHx8IGRhdGEtPnR4aGVhZCAhPSBkYXRhLT50eHRhaWwpIHsKKwkJaW50IHR4ID0gZGF0YS0+dHh0YWlsOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlza2IgPSBkYXRhLT50eHNrYnNbdHhdOworCQlkYXRhLT50eHRhaWwgPSAoZGF0YS0+dHh0YWlsICsgMSkgJSBUU0kxMDhfVFhSSU5HX0xFTjsKKwkJZGF0YS0+dHhmcmVlKys7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlzeW5jaHJvbml6ZV9pcnEoZGF0YS0+aXJxX251bSk7CisJZnJlZV9pcnEoZGF0YS0+aXJxX251bSwgZGV2KTsKKworCS8qIERpc2NhcmQgdGhlIFJYIHJpbmcuICovCisKKwl3aGlsZSAoZGF0YS0+cnhmcmVlKSB7CisJCWludCByeCA9IGRhdGEtPnJ4dGFpbDsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCQlza2IgPSBkYXRhLT5yeHNrYnNbcnhdOworCQlkYXRhLT5yeHRhaWwgPSAoZGF0YS0+cnh0YWlsICsgMSkgJSBUU0kxMDhfUlhSSU5HX0xFTjsKKwkJZGF0YS0+cnhmcmVlLS07CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlkbWFfZnJlZV9jb2hlcmVudCgwLAorCQkJICAgIFRTSTEwOF9SWFJJTkdfTEVOICogc2l6ZW9mKHJ4X2Rlc2MpLAorCQkJICAgIGRhdGEtPnJ4cmluZywgZGF0YS0+cnhkbWEpOworCWRtYV9mcmVlX2NvaGVyZW50KDAsCisJCQkgICAgVFNJMTA4X1RYUklOR19MRU4gKiBzaXplb2YodHhfZGVzYyksCisJCQkgICAgZGF0YS0+dHhyaW5nLCBkYXRhLT50eGRtYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdHNpMTA4X2luaXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisKKwlUU0lfV1JJVEUoVFNJMTA4X01BQ19DRkcyLCBUU0kxMDhfTUFDX0NGRzJfREZMVF9QUkVBTUJMRSB8CisJCQkgICAgIFRTSTEwOF9NQUNfQ0ZHMl9QQURDUkMpOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19UWFRIUkVTSCwKKwkJCSAgICAgKDE5MiA8PCBUU0kxMDhfRUNfVFhUSFJFU0hfU1RBUlRGSUxMKSB8CisJCQkgICAgICgxOTIgPDwgVFNJMTA4X0VDX1RYVEhSRVNIX1NUT1BGSUxMKSk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X1NUQVRfQ0FSUllNQVNLMSwKKwkJCSAgICAgfihUU0kxMDhfU1RBVF9DQVJSWTFfUlhCWVRFUyB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYUEtUUyB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYRkNTIHwKKwkJCSAgICAgICBUU0kxMDhfU1RBVF9DQVJSWTFfUlhNQ0FTVCB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYQUxJR04gfAorCQkJICAgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWExFTkdUSCB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYUlVOVCB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYSlVNQk8gfAorCQkJICAgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEZSQUcgfAorCQkJICAgICAgIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEpBQkJFUiB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYRFJPUCkpOworCisJVFNJX1dSSVRFKFRTSTEwOF9TVEFUX0NBUlJZTUFTSzIsCisJCQkgICAgIH4oVFNJMTA4X1NUQVRfQ0FSUlkyX1RYQllURVMgfAorCQkJICAgICAgIFRTSTEwOF9TVEFUX0NBUlJZMl9UWFBLVFMgfAorCQkJICAgICAgIFRTSTEwOF9TVEFUX0NBUlJZMl9UWEVYREVGIHwKKwkJCSAgICAgICBUU0kxMDhfU1RBVF9DQVJSWTJfVFhFWENPTCB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkyX1RYVENPTCB8CisJCQkgICAgICAgVFNJMTA4X1NUQVRfQ0FSUlkyX1RYUEFVU0UpKTsKKworCVRTSV9XUklURShUU0kxMDhfRUNfUE9SVENUUkwsIFRTSTEwOF9FQ19QT1JUQ1RSTF9TVEFURU4pOworCVRTSV9XUklURShUU0kxMDhfTUFDX0NGRzEsIDApOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWENGRywKKwkJCSAgICAgVFNJMTA4X0VDX1JYQ0ZHX1NFIHwgVFNJMTA4X0VDX1JYQ0ZHX0JGRSk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX1RYUV9DRkcsIFRTSTEwOF9FQ19UWFFfQ0ZHX0RFU0NfSU5UIHwKKwkJCSAgICAgVFNJMTA4X0VDX1RYUV9DRkdfRU9RX09XTl9JTlQgfAorCQkJICAgICBUU0kxMDhfRUNfVFhRX0NGR19XU1dQIHwgKFRTSTEwOF9QQk1fUE9SVCA8PAorCQkJCQkJVFNJMTA4X0VDX1RYUV9DRkdfU0ZOUE9SVCkpOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWFFfQ0ZHLCBUU0kxMDhfRUNfUlhRX0NGR19ERVNDX0lOVCB8CisJCQkgICAgIFRTSTEwOF9FQ19SWFFfQ0ZHX0VPUV9PV05fSU5UIHwKKwkJCSAgICAgVFNJMTA4X0VDX1JYUV9DRkdfV1NXUCB8IChUU0kxMDhfUEJNX1BPUlQgPDwKKwkJCQkJCVRTSTEwOF9FQ19SWFFfQ0ZHX1NGTlBPUlQpKTsKKworCVRTSV9XUklURShUU0kxMDhfRUNfVFhRX0JVRkNGRywKKwkJCSAgICAgVFNJMTA4X0VDX1RYUV9CVUZDRkdfQlVSU1QyNTYgfAorCQkJICAgICBUU0kxMDhfRUNfVFhRX0JVRkNGR19CU1dQIHwgKFRTSTEwOF9QQk1fUE9SVCA8PAorCQkJCQkJVFNJMTA4X0VDX1RYUV9CVUZDRkdfU0ZOUE9SVCkpOworCisJVFNJX1dSSVRFKFRTSTEwOF9FQ19SWFFfQlVGQ0ZHLAorCQkJICAgICBUU0kxMDhfRUNfUlhRX0JVRkNGR19CVVJTVDI1NiB8CisJCQkgICAgIFRTSTEwOF9FQ19SWFFfQlVGQ0ZHX0JTV1AgfCAoVFNJMTA4X1BCTV9QT1JUIDw8CisJCQkJCQlUU0kxMDhfRUNfUlhRX0JVRkNGR19TRk5QT1JUKSk7CisKKwlUU0lfV1JJVEUoVFNJMTA4X0VDX0lOVE1BU0ssIH4wKTsKK30KKworc3RhdGljIGludCB0c2kxMDhfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRhdGEtPm1paV9pZiwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKK30KKworc3RhdGljIGludAordHNpMTA4X2luaXRfb25lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHRzaTEwOF9wcnZfZGF0YSAqZGF0YSA9IE5VTEw7CisJaHdfaW5mbyAqZWluZm87CisJaW50IGVyciA9IDA7CisKKwllaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKE5VTEwgPT0gZWluZm8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0c2ktZXRoICVkOiBNaXNzaW5nIGFkZGl0aW9uYWwgZGF0YSFcbiIsCisJCSAgICAgICBwZGV2LT5pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIENyZWF0ZSBhbiBldGhlcm5ldCBkZXZpY2UgaW5zdGFuY2UgKi8KKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhKSk7CisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKCJ0c2kxMDhfZXRoOiBDb3VsZCBub3QgYWxsb2NhdGUgYSBkZXZpY2Ugc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpbnRrKCJ0c2kxMDhfZXRoJWQ6IHByb2JlLi4uXG4iLCBwZGV2LT5pZCk7CisJZGF0YSA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcl9kZWJ1ZygidHNpMTA4X2V0aCVkOnJlZ3M6cGh5cmVzZ3M6cGh5OmlycV9udW09MHgleDoweCV4OjB4JXg6MHgleFxuIiwKKwkJCXBkZXYtPmlkLCBlaW5mby0+cmVncywgZWluZm8tPnBoeXJlZ3MsCisJCQllaW5mby0+cGh5LCBlaW5mby0+aXJxX251bSk7CisKKwlkYXRhLT5yZWdzID0gaW9yZW1hcChlaW5mby0+cmVncywgMHg0MDApOworCWlmIChOVUxMID09IGRhdGEtPnJlZ3MpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byByZWdzX2ZhaWw7CisJfQorCisJZGF0YS0+cGh5cmVncyA9IGlvcmVtYXAoZWluZm8tPnBoeXJlZ3MsIDB4NDAwKTsKKwlpZiAoTlVMTCA9PSBkYXRhLT5waHlyZWdzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gcmVnc19mYWlsOworCX0KKy8qIE1JSSBzZXR1cCAqLworCWRhdGEtPm1paV9pZi5kZXYgPSBkZXY7CisJZGF0YS0+bWlpX2lmLm1kaW9fcmVhZCA9IHRzaTEwOF9tZGlvX3JlYWQ7CisJZGF0YS0+bWlpX2lmLm1kaW9fd3JpdGUgPSB0c2kxMDhfbWRpb193cml0ZTsKKwlkYXRhLT5taWlfaWYucGh5X2lkID0gZWluZm8tPnBoeTsKKwlkYXRhLT5taWlfaWYucGh5X2lkX21hc2sgPSAweDFmOworCWRhdGEtPm1paV9pZi5yZWdfbnVtX21hc2sgPSAweDFmOworCWRhdGEtPm1paV9pZi5zdXBwb3J0c19nbWlpID0gbWlpX2NoZWNrX2dtaWlfc3VwcG9ydCgmZGF0YS0+bWlpX2lmKTsKKworCWRhdGEtPnBoeSA9IGVpbmZvLT5waHk7CisJZGF0YS0+aXJxX251bSA9IGVpbmZvLT5pcnFfbnVtOworCWRhdGEtPmlkID0gcGRldi0+aWQ7CisJZGV2LT5vcGVuID0gdHNpMTA4X29wZW47CisJZGV2LT5zdG9wID0gdHNpMTA4X2Nsb3NlOworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdHNpMTA4X3NlbmRfcGFja2V0OworCWRldi0+c2V0X21hY19hZGRyZXNzID0gdHNpMTA4X3NldF9tYWM7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB0c2kxMDhfc2V0X3J4X21vZGU7CisJZGV2LT5nZXRfc3RhdHMgPSB0c2kxMDhfZ2V0X3N0YXRzOworCWRldi0+cG9sbCA9IHRzaTEwOF9wb2xsOworCWRldi0+ZG9faW9jdGwgPSB0c2kxMDhfZG9faW9jdGw7CisJZGV2LT53ZWlnaHQgPSA2NDsgIC8qIDY0IGlzIG1vcmUgc3VpdGFibGUgZm9yIEdpZ0UgaW50ZXJmYWNlIC0ga2xhaSAqLworCisJLyogQXBwYXJlbnRseSwgdGhlIExpbnV4IG5ldHdvcmtpbmcgY29kZSB3b24ndCB1c2Ugc2NhdHRlci1nYXRoZXIKKwkgKiBpZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBkbyBjaGVja3N1bXMuICBIb3dldmVyLCBpdCdzIGZhc3RlcgorCSAqIHRvIGNoZWNrc3VtIGluIHBsYWNlIGFuZCB1c2UgU0csIGFzIChhbW9uZyBvdGhlciByZWFzb25zKQorCSAqIHRoZSBjYWNoZSB3b24ndCBiZSBkaXJ0aWVkICh3aGljaCB0aGVuIGhhcyB0byBiZSBmbHVzaGVkCisJICogYmVmb3JlIERNQSkuICBUaGUgY2hlY2tzdW1taW5nIGlzIGRvbmUgYnkgdGhlIGRyaXZlciAodmlhCisJICogYSBuZXcgZnVuY3Rpb24gc2tiX2NzdW1fZGV2KCkgaW4gbmV0L2NvcmUvc2tidWZmLmMpLgorCSAqLworCisJZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfSElHSERNQTsKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+dHhsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGF0YS0+bWlzY2xvY2spOworCisJdHNpMTA4X3Jlc2V0X2V0aGVyKGRhdGEpOworCXRzaTEwOF9raWxsX3BoeShkZXYpOworCisJaWYgKChlcnIgPSB0c2kxMDhfZ2V0X21hYyhkZXYpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgTUFDIGFkZHJlc3MuICBQbGVhc2UgY29ycmVjdC5cbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIHJlZ2lzdGVyX2ZhaWw7CisJfQorCisJdHNpMTA4X2luaXRfbWFjKGRldik7CisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuXG4iLAorCQkJCWRldi0+bmFtZSk7CisJCWdvdG8gcmVnaXN0ZXJfZmFpbDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogVHNpMTA4IEdpZ2FiaXQgRXRoZXJuZXQsIE1BQzogIgorCSAgICAgICAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKKwkgICAgICAgZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisjaWZkZWYgREVCVUcKKwlkYXRhLT5tc2dfZW5hYmxlID0gREVCVUc7CisJZHVtcF9ldGhfb25lKGRldik7CisjZW5kaWYKKworCXJldHVybiAwOworCityZWdpc3Rlcl9mYWlsOgorCWlvdW5tYXAoZGF0YS0+cmVncyk7CisJaW91bm1hcChkYXRhLT5waHlyZWdzKTsKKworcmVnc19mYWlsOgorCWZyZWVfbmV0ZGV2KGRldik7CisJcmV0dXJuIGVycjsKK30KKworLyogVGhlcmUncyBubyB3YXkgdG8gZWl0aGVyIGdldCBpbnRlcnJ1cHRzIGZyb20gdGhlIFBIWSB3aGVuCisgKiBzb21ldGhpbmcgY2hhbmdlcywgb3IgdG8gaGF2ZSB0aGUgVHNpMTA4IGF1dG9tYXRpY2FsbHkgY29tbXVuaWNhdGUKKyAqIHdpdGggdGhlIFBIWSB0byByZWNvbmZpZ3VyZSBpdHNlbGYuCisgKgorICogVGh1cywgd2UgaGF2ZSB0byBkbyBpdCB1c2luZyBhIHRpbWVyLgorICovCisKK3N0YXRpYyB2b2lkIHRzaTEwOF90aW1lZF9jaGVja2VyKHVuc2lnbmVkIGxvbmcgZGV2X3B0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X3B0cjsKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXRzaTEwOF9jaGVja19waHkoZGV2KTsKKwl0c2kxMDhfY2hlY2tfcnhyaW5nKGRldik7CisJbW9kX3RpbWVyKCZkYXRhLT50aW1lciwgamlmZmllcyArIENIRUNLX1BIWV9JTlRFUlZBTCk7Cit9CisKK3N0YXRpYyBpbnQgdHNpMTA4X2V0aGVyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJnRzaV9ldGhfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCl7CisJCXByaW50aygidHNpMTA4X2V0aGVyX2luaXQ6IGVycm9yIGluaXRpYWxpemluZyBldGhlcm5ldCAiCisJCSAgICAgICAiZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHNpMTA4X2V0aGVyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdHNpMTA4X3Bydl9kYXRhICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJdHNpMTA4X3N0b3BfZXRoZXJuZXQoZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKHByaXYtPnJlZ3MpOworCWlvdW5tYXAocHJpdi0+cGh5cmVncyk7CisJZnJlZV9uZXRkZXYoZGV2KTsKKworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgdHNpMTA4X2V0aGVyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHNpX2V0aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0c2kxMDhfZXRoZXJfaW5pdCk7Cittb2R1bGVfZXhpdCh0c2kxMDhfZXRoZXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlR1bmRyYSBTZW1pY29uZHVjdG9yIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRzaTEwOCBHaWdhYml0IEV0aGVybmV0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5oIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3YTc2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmgKQEAgLTAsMCArMSwzNjUgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEtvbmcgTGFpLCA8a29uZy5sYWlAdHVuZHJhLmNvbSkuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIG5ldC90c2kxMDhfZXRoLmggLSBkZWZpbml0aW9ucyBmb3IgVHNpMTA4IEdJR0UgbmV0d29yayBjb250cm9sbGVyLgorICovCisKKyNpZm5kZWYgX19UU0kxMDhfRVRIX0gKKyNkZWZpbmUgX19UU0kxMDhfRVRIX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgVFNJX1dSSVRFKG9mZnNldCwgdmFsKSBcCisJb3V0X2JlMzIoKGRhdGEtPnJlZ3MgKyAob2Zmc2V0KSksIHZhbCkKKworI2RlZmluZSBUU0lfUkVBRChvZmZzZXQpIFwKKwlpbl9iZTMyKChkYXRhLT5yZWdzICsgKG9mZnNldCkpKQorCisjZGVmaW5lIFRTSV9XUklURV9QSFkob2Zmc2V0LCB2YWwpIFwKKwlvdXRfYmUzMigoZGF0YS0+cGh5cmVncyArIChvZmZzZXQpKSwgdmFsKQorCisjZGVmaW5lIFRTSV9SRUFEX1BIWShvZmZzZXQpIFwKKwlpbl9iZTMyKChkYXRhLT5waHlyZWdzICsgKG9mZnNldCkpKQorCisvKgorICogUEhZIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICoKKyAqIE5PVEU6IEVuYWJsZSBzZXQgb2YgZGVmaW5pdGlvbnMgY29ycmVzcG9uZGluZyB0byB5b3VyIGJvYXJkIHR5cGUKKyAqLworI2RlZmluZSBQSFlfTVY4OEUJMQkvKiBNYXJ2ZWwgODhFeHh4eCBQSFkgKi8KKyNkZWZpbmUgUEhZX0JDTTU0WFgJMgkvKiBCcm9hcmRjb20gQkNNNTR4eCBQSFkgKi8KKyNkZWZpbmUgVFNJMTA4X1BIWV9UWVBFCVBIWV9NVjg4RQorCisvKgorICogVFNJMTA4IEdJR0UgcG9ydCByZWdpc3RlcnMKKyAqLworCisjZGVmaW5lIFRTSTEwOF9FVEhfUE9SVF9OVU0JCTIKKyNkZWZpbmUgVFNJMTA4X1BCTV9QT1JUCQkJMgorI2RlZmluZSBUU0kxMDhfU0RSQU1fUE9SVAkJNAorCisjZGVmaW5lIFRTSTEwOF9NQUNfQ0ZHMQkJCSgweDAwMCkKKyNkZWZpbmUgVFNJMTA4X01BQ19DRkcxX1NPRlRSU1QJCSgxIDw8IDMxKQorI2RlZmluZSBUU0kxMDhfTUFDX0NGRzFfTE9PUEJBQ0sJKDEgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X01BQ19DRkcxX1JYRU4JCSgxIDw8IDIpCisjZGVmaW5lIFRTSTEwOF9NQUNfQ0ZHMV9UWEVOCQkoMSA8PCAwKQorCisjZGVmaW5lIFRTSTEwOF9NQUNfQ0ZHMgkJCSgweDAwNCkKKyNkZWZpbmUgVFNJMTA4X01BQ19DRkcyX0RGTFRfUFJFQU1CTEUJKDcgPDwgMTIpCisjZGVmaW5lIFRTSTEwOF9NQUNfQ0ZHMl9JRkFDRV9NQVNLCSgzIDw8IDgpCisjZGVmaW5lIFRTSTEwOF9NQUNfQ0ZHMl9OT0dJRwkJKDEgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X01BQ19DRkcyX0dJRwkJKDIgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X01BQ19DRkcyX1BBRENSQwkJKDEgPDwgMikKKyNkZWZpbmUgVFNJMTA4X01BQ19DRkcyX0ZVTExEVVBMRVgJKDEgPDwgMCkKKworI2RlZmluZSBUU0kxMDhfTUFDX01JSV9NR01UX0NGRwkJKDB4MDIwKQorI2RlZmluZSBUU0kxMDhfTUFDX01JSV9NR01UX0NMSwkJKDcgPDwgMCkKKyNkZWZpbmUgVFNJMTA4X01BQ19NSUlfTUdNVF9SU1QJCSgxIDw8IDMxKQorCisjZGVmaW5lIFRTSTEwOF9NQUNfTUlJX0NNRAkJKDB4MDI0KQorI2RlZmluZSBUU0kxMDhfTUFDX01JSV9DTURfUkVBRAkJKDEgPDwgMCkKKworI2RlZmluZSBUU0kxMDhfTUFDX01JSV9BRERSCQkoMHgwMjgpCisjZGVmaW5lIFRTSTEwOF9NQUNfTUlJX0FERFJfUkVHCQkwCisjZGVmaW5lIFRTSTEwOF9NQUNfTUlJX0FERFJfUEhZCQk4CisKKyNkZWZpbmUgVFNJMTA4X01BQ19NSUlfREFUQU9VVAkJKDB4MDJjKQorI2RlZmluZSBUU0kxMDhfTUFDX01JSV9EQVRBSU4JCSgweDAzMCkKKworI2RlZmluZSBUU0kxMDhfTUFDX01JSV9JTkQJCSgweDAzNCkKKyNkZWZpbmUgVFNJMTA4X01BQ19NSUlfSU5EX05PVFZBTElECSgxIDw8IDIpCisjZGVmaW5lIFRTSTEwOF9NQUNfTUlJX0lORF9TQ0FOTklORwkoMSA8PCAxKQorI2RlZmluZSBUU0kxMDhfTUFDX01JSV9JTkRfQlVTWQkJKDEgPDwgMCkKKworI2RlZmluZSBUU0kxMDhfTUFDX0lGQ1RSTAkJKDB4MDM4KQorI2RlZmluZSBUU0kxMDhfTUFDX0lGQ1RSTF9QSFlNT0RFCSgxIDw8IDI0KQorCisjZGVmaW5lIFRTSTEwOF9NQUNfQUREUjEJCSgweDA0MCkKKyNkZWZpbmUgVFNJMTA4X01BQ19BRERSMgkJKDB4MDQ0KQorCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYQllURVMJCSgweDA2YykKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhCWVRFU19DQVJSWQkoMSA8PCAyNCkKKworI2RlZmluZSBUU0kxMDhfU1RBVF9SWFBLVFMJCSgweDA3MCkKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhQS1RTX0NBUlJZCSgxIDw8IDE4KQorCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYRkNTCQkoMHgwNzQpCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYRkNTX0NBUlJZCQkoMSA8PCAxMikKKworI2RlZmluZSBUU0kxMDhfU1RBVF9SWE1DQVNUCQkoMHgwNzgpCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYTUNBU1RfQ0FSUlkJKDEgPDwgMTgpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhBTElHTgkJKDB4MDhjKQorI2RlZmluZSBUU0kxMDhfU1RBVF9SWEFMSUdOX0NBUlJZCSgxIDw8IDEyKQorCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYTEVOR1RICQkoMHgwOTApCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYTEVOR1RIX0NBUlJZCSgxIDw8IDEyKQorCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYUlVOVAkJKDB4MDljKQorI2RlZmluZSBUU0kxMDhfU1RBVF9SWFJVTlRfQ0FSUlkJKDEgPDwgMTIpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhKVU1CTwkJKDB4MGEwKQorI2RlZmluZSBUU0kxMDhfU1RBVF9SWEpVTUJPX0NBUlJZCSgxIDw8IDEyKQorCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYRlJBRwkJKDB4MGE0KQorI2RlZmluZSBUU0kxMDhfU1RBVF9SWEZSQUdfQ0FSUlkJKDEgPDwgMTIpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhKQUJCRVIJCSgweDBhOCkKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhKQUJCRVJfQ0FSUlkJKDEgPDwgMTIpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfUlhEUk9QCQkoMHgwYWMpCisjZGVmaW5lIFRTSTEwOF9TVEFUX1JYRFJPUF9DQVJSWQkoMSA8PCAxMikKKworI2RlZmluZSBUU0kxMDhfU1RBVF9UWEJZVEVTCQkoMHgwYjApCisjZGVmaW5lIFRTSTEwOF9TVEFUX1RYQllURVNfQ0FSUlkJKDEgPDwgMjQpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfVFhQS1RTCQkoMHgwYjQpCisjZGVmaW5lIFRTSTEwOF9TVEFUX1RYUEtUU19DQVJSWQkoMSA8PCAxOCkKKworI2RlZmluZSBUU0kxMDhfU1RBVF9UWEVYREVGCQkoMHgwYzgpCisjZGVmaW5lIFRTSTEwOF9TVEFUX1RYRVhERUZfQ0FSUlkJKDEgPDwgMTIpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfVFhFWENPTAkJKDB4MGQ4KQorI2RlZmluZSBUU0kxMDhfU1RBVF9UWEVYQ09MX0NBUlJZCSgxIDw8IDEyKQorCisjZGVmaW5lIFRTSTEwOF9TVEFUX1RYVENPTAkJKDB4MGRjKQorI2RlZmluZSBUU0kxMDhfU1RBVF9UWFRDT0xfQ0FSUlkJKDEgPDwgMTMpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfVFhQQVVTRURST1AJCSgweDBlNCkKKyNkZWZpbmUgVFNJMTA4X1NUQVRfVFhQQVVTRURST1BfQ0FSUlkJKDEgPDwgMTIpCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfQ0FSUlkxCQkoMHgxMDApCisjZGVmaW5lIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEJZVEVTCSgxIDw8IDE2KQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhQS1RTCSgxIDw8IDE1KQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhGQ1MJKDEgPDwgMTQpCisjZGVmaW5lIFRTSTEwOF9TVEFUX0NBUlJZMV9SWE1DQVNUCSgxIDw8IDEzKQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhBTElHTgkoMSA8PCA4KQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhMRU5HVEgJKDEgPDwgNykKKyNkZWZpbmUgVFNJMTA4X1NUQVRfQ0FSUlkxX1JYUlVOVAkoMSA8PCA0KQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhKVU1CTwkoMSA8PCAzKQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhGUkFHCSgxIDw8IDIpCisjZGVmaW5lIFRTSTEwOF9TVEFUX0NBUlJZMV9SWEpBQkJFUgkoMSA8PCAxKQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTFfUlhEUk9QCSgxIDw8IDApCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfQ0FSUlkyCQkoMHgxMDQpCisjZGVmaW5lIFRTSTEwOF9TVEFUX0NBUlJZMl9UWEJZVEVTCSgxIDw8IDEzKQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTJfVFhQS1RTCSgxIDw8IDEyKQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTJfVFhFWERFRgkoMSA8PCA3KQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTJfVFhFWENPTAkoMSA8PCAzKQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWTJfVFhUQ09MCSgxIDw8IDIpCisjZGVmaW5lIFRTSTEwOF9TVEFUX0NBUlJZMl9UWFBBVVNFCSgxIDw8IDApCisKKyNkZWZpbmUgVFNJMTA4X1NUQVRfQ0FSUllNQVNLMQkJKDB4MTA4KQorI2RlZmluZSBUU0kxMDhfU1RBVF9DQVJSWU1BU0syCQkoMHgxMGMpCisKKyNkZWZpbmUgVFNJMTA4X0VDX1BPUlRDVFJMCQkoMHgyMDApCisjZGVmaW5lIFRTSTEwOF9FQ19QT1JUQ1RSTF9TVEFUUlNUCSgxIDw8IDMxKQorI2RlZmluZSBUU0kxMDhfRUNfUE9SVENUUkxfU1RBVEVOCSgxIDw8IDI4KQorI2RlZmluZSBUU0kxMDhfRUNfUE9SVENUUkxfTk9HSUcJKDEgPDwgMTgpCisjZGVmaW5lIFRTSTEwOF9FQ19QT1JUQ1RSTF9IQUxGRFVQTEVYCSgxIDw8IDE2KQorCisjZGVmaW5lIFRTSTEwOF9FQ19JTlRTVEFUCQkoMHgyMDQpCisjZGVmaW5lIFRTSTEwOF9FQ19JTlRNQVNLCQkoMHgyMDgpCisKKyNkZWZpbmUgVFNJMTA4X0lOVF9BTlkJCQkoMSA8PCAzMSkKKyNkZWZpbmUgVFNJMTA4X0lOVF9TRk4JCQkoMSA8PCAzMCkKKyNkZWZpbmUgVFNJMTA4X0lOVF9SWElETEUJCSgxIDw8IDI5KQorI2RlZmluZSBUU0kxMDhfSU5UX1JYQUJPUlQJCSgxIDw8IDI4KQorI2RlZmluZSBUU0kxMDhfSU5UX1JYRVJST1IJCSgxIDw8IDI3KQorI2RlZmluZSBUU0kxMDhfSU5UX1JYT1ZFUlJVTgkJKDEgPDwgMjYpCisjZGVmaW5lIFRTSTEwOF9JTlRfUlhUSFJFU0gJCSgxIDw8IDI1KQorI2RlZmluZSBUU0kxMDhfSU5UX1JYV0FJVAkJKDEgPDwgMjQpCisjZGVmaW5lIFRTSTEwOF9JTlRfUlhRVUVVRTAJCSgxIDw8IDE2KQorI2RlZmluZSBUU0kxMDhfSU5UX1NUQVRDQVJSWQkJKDEgPDwgMTUpCisjZGVmaW5lIFRTSTEwOF9JTlRfVFhJRExFCQkoMSA8PCAxMykKKyNkZWZpbmUgVFNJMTA4X0lOVF9UWEFCT1JUCQkoMSA8PCAxMikKKyNkZWZpbmUgVFNJMTA4X0lOVF9UWEVSUk9SCQkoMSA8PCAxMSkKKyNkZWZpbmUgVFNJMTA4X0lOVF9UWFVOREVSUlVOCQkoMSA8PCAxMCkKKyNkZWZpbmUgVFNJMTA4X0lOVF9UWFRIUkVTSAkJKDEgPDwgIDkpCisjZGVmaW5lIFRTSTEwOF9JTlRfVFhXQUlUCQkoMSA8PCAgOCkKKyNkZWZpbmUgVFNJMTA4X0lOVF9UWFFVRVVFMAkJKDEgPDwgIDApCisKKyNkZWZpbmUgVFNJMTA4X0VDX1RYQ0ZHCQkJKDB4MjIwKQorI2RlZmluZSBUU0kxMDhfRUNfVFhDRkdfUlNUCQkoMSA8PCAzMSkKKworI2RlZmluZSBUU0kxMDhfRUNfVFhDVFJMCQkoMHgyMjQpCisjZGVmaW5lIFRTSTEwOF9FQ19UWENUUkxfSURMRUlOVAkoMSA8PCAzMSkKKyNkZWZpbmUgVFNJMTA4X0VDX1RYQ1RSTF9BQk9SVAkJKDEgPDwgMzApCisjZGVmaW5lIFRTSTEwOF9FQ19UWENUUkxfR08JCSgxIDw8IDE1KQorI2RlZmluZSBUU0kxMDhfRUNfVFhDVFJMX1FVRVVFMAkJKDEgPDwgIDApCisKKyNkZWZpbmUgVFNJMTA4X0VDX1RYU1RBVAkJKDB4MjI4KQorI2RlZmluZSBUU0kxMDhfRUNfVFhTVEFUX0FDVElWRQkJKDEgPDwgMTUpCisjZGVmaW5lIFRTSTEwOF9FQ19UWFNUQVRfUVVFVUUwCQkoMSA8PCAwKQorCisjZGVmaW5lIFRTSTEwOF9FQ19UWEVTVEFUCQkoMHgyMmMpCisjZGVmaW5lIFRTSTEwOF9FQ19UWEVTVEFUX1EwX0VSUgkoMSA8PCAyNCkKKyNkZWZpbmUgVFNJMTA4X0VDX1RYRVNUQVRfUTBfREVTQ0lOVAkoMSA8PCAxNikKKyNkZWZpbmUgVFNJMTA4X0VDX1RYRVNUQVRfUTBfRU9GCSgxIDw8ICA4KQorI2RlZmluZSBUU0kxMDhfRUNfVFhFU1RBVF9RMF9FT1EJKDEgPDwgIDApCisKKyNkZWZpbmUgVFNJMTA4X0VDX1RYRVJSCQkJKDB4Mjc4KQorCisjZGVmaW5lIFRTSTEwOF9FQ19UWFFfQ0ZHCQkoMHgyODApCisjZGVmaW5lIFRTSTEwOF9FQ19UWFFfQ0ZHX0RFU0NfSU5UCSgxIDw8IDIwKQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0NGR19FT1FfT1dOX0lOVAkoMSA8PCAxOSkKKyNkZWZpbmUgVFNJMTA4X0VDX1RYUV9DRkdfV1NXUAkJKDEgPDwgMTEpCisjZGVmaW5lIFRTSTEwOF9FQ19UWFFfQ0ZHX0JTV1AJCSgxIDw8IDEwKQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0NGR19TRk5QT1JUCTAKKworI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGRwkJKDB4Mjg0KQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGR19CVVJTVDgJKDAgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X0VDX1RYUV9CVUZDRkdfQlVSU1QzMgkoMSA8PCA4KQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGR19CVVJTVDEyOAkoMiA8PCA4KQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGR19CVVJTVDI1NgkoMyA8PCA4KQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGR19XU1dQCSgxIDw8IDExKQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGR19CU1dQCSgxIDw8IDEwKQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX0JVRkNGR19TRk5QT1JUCTAKKworI2RlZmluZSBUU0kxMDhfRUNfVFhRX1BUUkxPVwkJKDB4Mjg4KQorCisjZGVmaW5lIFRTSTEwOF9FQ19UWFFfUFRSSElHSAkJKDB4MjhjKQorI2RlZmluZSBUU0kxMDhfRUNfVFhRX1BUUkhJR0hfVkFMSUQJKDEgPDwgMzEpCisKKyNkZWZpbmUgVFNJMTA4X0VDX1RYVEhSRVNICQkoMHgyMzApCisjZGVmaW5lIFRTSTEwOF9FQ19UWFRIUkVTSF9TVEFSVEZJTEwJMAorI2RlZmluZSBUU0kxMDhfRUNfVFhUSFJFU0hfU1RPUEZJTEwJMTYKKworI2RlZmluZSBUU0kxMDhfRUNfUlhDRkcJCQkoMHgzMjApCisjZGVmaW5lIFRTSTEwOF9FQ19SWENGR19SU1QJCSgxIDw8IDMxKQorCisjZGVmaW5lIFRTSTEwOF9FQ19SWFNUQVQJCSgweDMyOCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYU1RBVF9BQ1RJVkUJCSgxIDw8IDE1KQorI2RlZmluZSBUU0kxMDhfRUNfUlhTVEFUX1FVRVVFMAkJKDEgPDwgMCkKKworI2RlZmluZSBUU0kxMDhfRUNfUlhFU1RBVAkJKDB4MzJjKQorI2RlZmluZSBUU0kxMDhfRUNfUlhFU1RBVF9RMF9FUlIJKDEgPDwgMjQpCisjZGVmaW5lIFRTSTEwOF9FQ19SWEVTVEFUX1EwX0RFU0NJTlQJKDEgPDwgMTYpCisjZGVmaW5lIFRTSTEwOF9FQ19SWEVTVEFUX1EwX0VPRgkoMSA8PCAgOCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYRVNUQVRfUTBfRU9RCSgxIDw8ICAwKQorCisjZGVmaW5lIFRTSTEwOF9FQ19IQVNIQUREUgkJKDB4MzYwKQorI2RlZmluZSBUU0kxMDhfRUNfSEFTSEFERFJfQVVUT0lOQwkoMSA8PCAzMSkKKyNkZWZpbmUgVFNJMTA4X0VDX0hBU0hBRERSX0RPMVNUUkVBRAkoMSA8PCAzMCkKKyNkZWZpbmUgVFNJMTA4X0VDX0hBU0hBRERSX1VOSUNBU1QJKDAgPDwgIDQpCisjZGVmaW5lIFRTSTEwOF9FQ19IQVNIQUREUl9NQ0FTVAkoMSA8PCAgNCkKKworI2RlZmluZSBUU0kxMDhfRUNfSEFTSERBVEEJCSgweDM2NCkKKworI2RlZmluZSBUU0kxMDhfRUNfUlhRX1BUUkxPVwkJKDB4Mzg4KQorCisjZGVmaW5lIFRTSTEwOF9FQ19SWFFfUFRSSElHSAkJKDB4MzhjKQorI2RlZmluZSBUU0kxMDhfRUNfUlhRX1BUUkhJR0hfVkFMSUQJKDEgPDwgMzEpCisKKy8qIFN0YXRpb24gRW5hYmxlIC0tIGFjY2VwdCBwYWNrZXRzIGRlc3RpbmVkIGZvciB1cyAqLworI2RlZmluZSBUU0kxMDhfRUNfUlhDRkdfU0UJCSgxIDw8IDEzKQorLyogVW5pY2FzdCBGcmFtZSBFbmFibGUgLS0gZm9yIHBhY2tldHMgbm90IGRlc3RpbmVkIGZvciB1cyAqLworI2RlZmluZSBUU0kxMDhfRUNfUlhDRkdfVUZFCQkoMSA8PCAxMikKKy8qIE11bHRpY2FzdCBGcmFtZSBFbmFibGUgKi8KKyNkZWZpbmUgVFNJMTA4X0VDX1JYQ0ZHX01GRQkJKDEgPDwgMTEpCisvKiBCcm9hZGNhc3QgRnJhbWUgRW5hYmxlICovCisjZGVmaW5lIFRTSTEwOF9FQ19SWENGR19CRkUJCSgxIDw8IDEwKQorI2RlZmluZSBUU0kxMDhfRUNfUlhDRkdfVUNfSEFTSAkJKDEgPDwgIDkpCisjZGVmaW5lIFRTSTEwOF9FQ19SWENGR19NQ19IQVNICQkoMSA8PCAgOCkKKworI2RlZmluZSBUU0kxMDhfRUNfUlhRX0NGRwkJKDB4MzgwKQorI2RlZmluZSBUU0kxMDhfRUNfUlhRX0NGR19ERVNDX0lOVAkoMSA8PCAyMCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9DRkdfRU9RX09XTl9JTlQJKDEgPDwgMTkpCisjZGVmaW5lIFRTSTEwOF9FQ19SWFFfQ0ZHX1dTV1AJCSgxIDw8IDExKQorI2RlZmluZSBUU0kxMDhfRUNfUlhRX0NGR19CU1dQCQkoMSA8PCAxMCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9DRkdfU0ZOUE9SVAkwCisKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkcJCSgweDM4NCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkdfQlVSU1Q4CSgwIDw8IDgpCisjZGVmaW5lIFRTSTEwOF9FQ19SWFFfQlVGQ0ZHX0JVUlNUMzIJKDEgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkdfQlVSU1QxMjgJKDIgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkdfQlVSU1QyNTYJKDMgPDwgOCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkdfV1NXUAkoMSA8PCAxMSkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkdfQlNXUAkoMSA8PCAxMCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYUV9CVUZDRkdfU0ZOUE9SVAkwCisKKyNkZWZpbmUgVFNJMTA4X0VDX1JYQ1RSTAkJKDB4MzI0KQorI2RlZmluZSBUU0kxMDhfRUNfUlhDVFJMX0FCT1JUCQkoMSA8PCAzMCkKKyNkZWZpbmUgVFNJMTA4X0VDX1JYQ1RSTF9HTwkJKDEgPDwgMTUpCisjZGVmaW5lIFRTSTEwOF9FQ19SWENUUkxfUVVFVUUwCQkoMSA8PCAwKQorCisjZGVmaW5lIFRTSTEwOF9FQ19SWEVSUgkJCSgweDM3OCkKKworI2RlZmluZSBUU0kxMDhfVFhfRU9GCSgxIDw8IDApCS8qIEVuZCBvZiBmcmFtZTsgbGFzdCBmcmFnbWVudCBvZiBwYWNrZXQgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX1NPRgkoMSA8PCAxKQkvKiBTdGFydCBvZiBmcmFtZTsgZmlyc3QgZnJhZy4gb2YgcGFja2V0ICovCisjZGVmaW5lIFRTSTEwOF9UWF9WTEFOCSgxIDw8IDIpCS8qIFBlci1mcmFtZSBWTEFOOiBlbmFibGVzIFZMQU4gb3ZlcnJpZGUgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX0hVR0UJKDEgPDwgMykJLyogSHVnZSBmcmFtZSBlbmFibGUgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX1BBRAkoMSA8PCA0KQkvKiBQYWQgdGhlIHBhY2tldCBpZiB0b28gc2hvcnQgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX0NSQwkoMSA8PCA1KQkvKiBHZW5lcmF0ZSBDUkMgZm9yIHRoaXMgcGFja2V0ICovCisjZGVmaW5lIFRTSTEwOF9UWF9JTlQJKDEgPDwgMTQpCS8qIEdlbmVyYXRlIGFuIElSUSBhZnRlciBmcmFnLiBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgVFNJMTA4X1RYX1JFVFJZCSgweGYgPDwgMTYpCS8qIDQgYml0IGZpZWxkIGluZGljYXRpbmcgbnVtLiBvZiByZXRyaWVzICovCisjZGVmaW5lIFRTSTEwOF9UWF9DT0wJKDEgPDwgMjApCS8qIFNldCBpZiBhIGNvbGxpc2lvbiBvY2N1cmVkICovCisjZGVmaW5lIFRTSTEwOF9UWF9MQ09MCSgxIDw8IDI0KQkvKiBTZXQgaWYgYSBsYXRlIGNvbGxpc2lvbiBvY2N1cmVkICovCisjZGVmaW5lIFRTSTEwOF9UWF9VTkRFUgkoMSA8PCAyNSkJLyogU2V0IGlmIGEgRklGTyB1bmRlcnJ1biBvY2N1cmVkICovCisjZGVmaW5lIFRTSTEwOF9UWF9STElNCSgxIDw8IDI2KQkvKiBTZXQgaWYgdGhlIHJldHJ5IGxpbWl0IHdhcyByZWFjaGVkICovCisjZGVmaW5lIFRTSTEwOF9UWF9PSwkoMSA8PCAzMCkJLyogU2V0IGlmIHRoZSBmcmFtZSBUWCB3YXMgc3VjY2Vzc2Z1bCAqLworI2RlZmluZSBUU0kxMDhfVFhfT1dOCSgxIDw8IDMxKQkvKiBTZXQgaWYgdGhlIGRldmljZSBvd25zIHRoZSBkZXNjcmlwdG9yICovCisKKy8qIE5vdGU6IHRoZSBkZXNjcmlwdG9yIGxheW91dHMgYXNzdW1lIGJpZy1lbmRpYW4gYnl0ZSBvcmRlci4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgYnVmMDsKKwl1MzIgYnVmMTsJCS8qIEJhc2UgYWRkcmVzcyBvZiBidWZmZXIgKi8KKwl1MzIgbmV4dDA7CQkvKiBBZGRyZXNzIG9mIG5leHQgZGVzY3JpcHRvciwgaWYgYW55ICovCisJdTMyIG5leHQxOworCXUxNiB2bGFuOwkJLyogVkxBTiwgaWYgb3ZlcnJpZGUgZW5hYmxlZCBmb3IgdGhpcyBwYWNrZXQgKi8KKwl1MTYgbGVuOwkJLyogTGVuZ3RoIG9mIGJ1ZmZlciBpbiBieXRlcyAqLworCXUzMiBtaXNjOwkJLyogU2VlIFRTSTEwOF9UWF8qIGFib3ZlICovCisJdTMyIHJlc2VydmVkMDsJCS8qcmVzZXJ2ZWQwIGFuZCByZXNlcnZlZDEgYXJlIGFkZGVkIHRvIG1ha2UgdGhlIGRlc2MgKi8KKwl1MzIgcmVzZXJ2ZWQxOwkJLyogMzItYnl0ZSBhbGlnbmVkICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpIHR4X2Rlc2M7CisKKyNkZWZpbmUgVFNJMTA4X1JYX0VPRgkoMSA8PCAwKQkvKiBFbmQgb2YgZnJhbWU7IGxhc3QgZnJhZ21lbnQgb2YgcGFja2V0ICovCisjZGVmaW5lIFRTSTEwOF9SWF9TT0YJKDEgPDwgMSkJLyogU3RhcnQgb2YgZnJhbWU7IGZpcnN0IGZyYWcuIG9mIHBhY2tldCAqLworI2RlZmluZSBUU0kxMDhfUlhfVkxBTgkoMSA8PCAyKQkvKiBTZXQgb24gU09GIGlmIHBhY2tldCBoYXMgYSBWTEFOICovCisjZGVmaW5lIFRTSTEwOF9SWF9GVFlQRQkoMSA8PCAzKQkvKiBMZW5ndGgvVHlwZSBmaWVsZCBpcyB0eXBlLCBub3QgbGVuZ3RoICovCisjZGVmaW5lIFRTSTEwOF9SWF9SVU5UCSgxIDw8IDQpLyogUGFja2V0IGlzIGxlc3MgdGhhbiBtaW5pbXVtIHNpemUgKi8KKyNkZWZpbmUgVFNJMTA4X1JYX0hBU0gJKDEgPDwgNykvKiBIYXNoIHRhYmxlIG1hdGNoICovCisjZGVmaW5lIFRTSTEwOF9SWF9CQUQJKDEgPDwgOCkJLyogQmFkIGZyYW1lICovCisjZGVmaW5lIFRTSTEwOF9SWF9PVkVSCSgxIDw8IDkpCS8qIEZJRk8gb3ZlcnJ1biBvY2N1cmVkICovCisjZGVmaW5lIFRTSTEwOF9SWF9UUlVOQwkoMSA8PCAxMSkJLyogUGFja2V0IHRydW5jYXRlZCBkdWUgdG8gZXhjZXNzIGxlbmd0aCAqLworI2RlZmluZSBUU0kxMDhfUlhfQ1JDCSgxIDw8IDEyKQkvKiBQYWNrZXQgaGFkIGEgQ1JDIGVycm9yICovCisjZGVmaW5lIFRTSTEwOF9SWF9JTlQJKDEgPDwgMTMpCS8qIEdlbmVyYXRlIGFuIElSUSBhZnRlciBmcmFnLiBwcm9jZXNzZWQgKi8KKyNkZWZpbmUgVFNJMTA4X1JYX09XTgkoMSA8PCAxNSkJLyogU2V0IGlmIHRoZSBkZXZpY2Ugb3ducyB0aGUgZGVzY3JpcHRvciAqLworCisjZGVmaW5lIFRTSTEwOF9SWF9TS0JfU0laRSAxNTM2CQkvKiBUaGUgUlggc2tiIGxlbmd0aCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdTMyIGJ1ZjA7CQkvKiBCYXNlIGFkZHJlc3Mgb2YgYnVmZmVyICovCisJdTMyIGJ1ZjE7CQkvKiBCYXNlIGFkZHJlc3Mgb2YgYnVmZmVyICovCisJdTMyIG5leHQwOwkJLyogQWRkcmVzcyBvZiBuZXh0IGRlc2NyaXB0b3IsIGlmIGFueSAqLworCXUzMiBuZXh0MTsJCS8qIEFkZHJlc3Mgb2YgbmV4dCBkZXNjcmlwdG9yLCBpZiBhbnkgKi8KKwl1MTYgdmxhbjsJCS8qIFZMQU4gb2YgcmVjZWl2ZWQgcGFja2V0LCBmaXJzdCBmcmFnIG9ubHkgKi8KKwl1MTYgbGVuOwkJLyogTGVuZ3RoIG9mIHJlY2VpdmVkIGZyYWdtZW50IGluIGJ5dGVzICovCisJdTE2IGJsZW47CQkvKiBMZW5ndGggb2YgYnVmZmVyIGluIGJ5dGVzICovCisJdTE2IG1pc2M7CQkvKiBTZWUgVFNJMTA4X1JYXyogYWJvdmUgKi8KKwl1MzIgcmVzZXJ2ZWQwOwkJLyogcmVzZXJ2ZWQwIGFuZCByZXNlcnZlZDEgYXJlIGFkZGVkIHRvIG1ha2UgdGhlIGRlc2MgKi8KKwl1MzIgcmVzZXJ2ZWQxOwkJLyogMzItYnl0ZSBhbGlnbmVkICovCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpIHJ4X2Rlc2M7CisKKyNlbmRpZgkJCQkvKiBfX1RTSTEwOF9FVEhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGY2YjNhOTQuLjlkNjdmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTE5MDYsOSArMTkwNiw3IEBACiAJCQlkZS0+bWVkaWFbaV0uY3NyMTUgPSB0MjEwNDFfY3NyMTVbaV07CiAJfQogCi0JZGUtPmVlX2RhdGEgPSBrbWFsbG9jKERFX0VFUFJPTV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGUtPmVlX2RhdGEpCi0JCW1lbWNweShkZS0+ZWVfZGF0YSwgJmVlX2RhdGFbMF0sIERFX0VFUFJPTV9TSVpFKTsKKwlkZS0+ZWVfZGF0YSA9IGttZW1kdXAoJmVlX2RhdGFbMF0sIERFX0VFUFJPTV9TSVpFLCBHRlBfS0VSTkVMKTsKIAogCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCmluZGV4IDRkZDhhMGIuLjdmNTlhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogc3RydWN0IGRtZmVfYm9hcmRfaW5mbyB7CiAJdTMyIGNoaXBfaWQ7CQkJLyogQ2hpcCB2ZW5kb3IvRGV2aWNlIElEICovCiAJdTMyIGNoaXBfcmV2aXNpb247CQkvKiBDaGlwIHJldmlzaW9uICovCi0Jc3RydWN0IERFVklDRSAqbmV4dF9kZXY7CS8qIG5leHQgZGV2aWNlICovCisJc3RydWN0IERFVklDRSAqZGV2OwkJLyogbmV0IGRldmljZSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkJLyogUENJIGRldmljZSAqLwogCXNwaW5sb2NrX3QgbG9jazsKIApAQCAtMzk5LDYgKzM5OSw4IEBACiAJLyogSW5pdCBzeXN0ZW0gJiBkZXZpY2UgKi8KIAlkYiA9IG5ldGRldl9wcml2KGRldik7CiAKKwlkYi0+ZGV2ID0gZGV2OworCiAJLyogQWxsb2NhdGUgVHgvUnggZGVzY3JpcHRvciBtZW1vcnkgKi8KIAlkYi0+ZGVzY19wb29sX3B0ciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgdHhfZGVzYykgKiBERVNDX0FMTF9DTlQgKyAweDIwLCAmZGItPmRlc2NfcG9vbF9kbWFfcHRyKTsKIAlkYi0+YnVmX3Bvb2xfcHRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgVFhfQlVGX0FMTE9DICogVFhfREVTQ19DTlQgKyA0LCAmZGItPmJ1Zl9wb29sX2RtYV9wdHIpOwpAQCAtNDI2LDYgKzQyOCw3IEBACiAJZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSAmcG9sbF9kbWZlOwogI2VuZGlmCiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CisJbmV0aWZfY2Fycmllcl9vZmYoZGItPmRldik7CiAJc3Bpbl9sb2NrX2luaXQoJmRiLT5sb2NrKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDUwLCAmcGNpX3Btcik7CkBAIC0xMDUwLDYgKzEwNTMsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAorCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKIC8qCkBAIC0xMTQ0LDYgKzExNDgsNyBAQAogCQkvKiBMaW5rIEZhaWxlZCAqLwogCQlETUZFX0RCVUcoMCwgIkxpbmsgRmFpbGVkIiwgdG1wX2NyMTIpOwogCQlkYi0+bGlua19mYWlsZWQgPSAxOworCQluZXRpZl9jYXJyaWVyX29mZihkYi0+ZGV2KTsKIAogCQkvKiBGb3IgRm9yY2UgMTAvMTAwTSBIYWxmL0Z1bGwgbW9kZTogRW5hYmxlIEF1dG8tTmVnbyBtb2RlICovCiAJCS8qIEFVVE8gb3IgZm9yY2UgMU0gSG9tZXJ1bi9Mb25ncnVuIGRvbid0IG5lZWQgKi8KQEAgLTExNjYsNiArMTE3MSw4IEBACiAJCQlpZiAoIChkYi0+bWVkaWFfbW9kZSAmIERNRkVfQVVUTykgJiYKIAkJCQlkbWZlX3NlbnNlX3NwZWVkKGRiKSApCiAJCQkJZGItPmxpbmtfZmFpbGVkID0gMTsKKwkJCWVsc2UKKwkJCQluZXRpZl9jYXJyaWVyX29uKGRiLT5kZXYpOwogCQkJZG1mZV9wcm9jZXNzX21vZGUoZGIpOwogCQkJLyogU0hPV19NRURJQV9UWVBFKGRiLT5vcF9tb2RlKTsgKi8KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDNiZjllNjMuLjk3ODFiMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CkBAIC0xMjcsNyArMTI4LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwppbmRleCBiMzc4ODgwLi4xZjA1NTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAKLSNpbmNsdWRlIDxhc20vb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC00MzAxLDEyICs0MzAxLDEyIEBACiAJCW1lbWNweSgmKHVnZXRoX2luZm9baV0pLCAmdWdldGhfcHJpbWFyeV9pbmZvLAogCQkgICAgICAgc2l6ZW9mKHVnZXRoX3ByaW1hcnlfaW5mbykpOwogCi0JcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdWNjX2dldGhfZXhpdCh2b2lkKQogewotCW9mX3VucmVnaXN0ZXJfZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh1Y2NfZ2V0aF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKaW5kZXggYjVkMGQ3Zi4uZDVhYjljZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcKQEAgLTU3LDQ0ICs1Nyw2IEBACiAJICBUaGUgZHJpdmVyIHdpbGwgYmUgY29tcGlsZWQgYXMgYSBtb2R1bGU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNvc2EuCiAKLWNvbmZpZyBEU0NDNAotCXRyaXN0YXRlICJFdGluYyBQQ0lTWU5DIHNlcmlhbCBib2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0FOICYmIFBDSSAmJiBtCi0JaGVscAotCSAgRHJpdmVyIGZvciBFdGluYyBQQ0lTWU5DIGJvYXJkcyBiYXNlZCBvbiB0aGUgSW5maW5lb24gKGV4LiBTaWVtZW5zKQotCSAgRFNDQzQgY2hpcHNldC4KLQotCSAgVGhpcyBpcyBzdXBwb3NlZCB0byB3b3JrIHdpdGggdGhlIGZvdXIgcG9ydCBjYXJkLiBUYWtlIGEgbG9vayBhdAotCSAgPGh0dHA6Ly93d3cuY29nZW5pdC5mci9kc2NjNC8+IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHRoZQotCSAgZHJpdmVyLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBkc2NjNC4KLQotY29uZmlnIERTQ0M0X1BDSVNZTkMKLQlib29sICJFdGluYyBQQ0lTWU5DIGZlYXR1cmVzIgotCWRlcGVuZHMgb24gRFNDQzQKLQloZWxwCi0JICBEdWUgdG8gRXRpbmMncyBkZXNpZ24gY2hvaWNlIGZvciBpdHMgUENJU1lOQyBjYXJkcywgc29tZSBvcGVyYXRpb25zCi0JICBhcmUgb25seSBhbGxvd2VkIG9uIHNwZWNpZmljIHBvcnRzIG9mIHRoZSBEU0NDNC4gVGhpcyBvcHRpb24gaXMgdGhlCi0JICBvbmx5IHdheSBmb3IgdGhlIGRyaXZlciB0byBrbm93IHRoYXQgaXQgc2hvdWxkbid0IHJldHVybiBhIHN1Y2Nlc3MKLQkgIGNvZGUgZm9yIHRoZXNlIG9wZXJhdGlvbnMuCi0KLQkgIFBsZWFzZSBzYXkgWSBpZiB5b3VyIGNhcmQgaXMgYW4gRXRpbmMncyBQQ0lTWU5DLgotCi1jb25maWcgRFNDQzRfUENJX1JTVAotCWJvb2wgIkhhcmQgcmVzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIERTQ0M0Ci0JaGVscAotCSAgVmFyaW91cyBEU0NDNCBidWdzIGZvcmJpZCBhbnkgcmVsaWFibGUgc29mdHdhcmUgcmVzZXQgb2YgdGhlIEFTSUMuCi0JICBBcyBhIHJlcGxhY2VtZW50LCBzb21lIHZlbmRvcnMgcHJvdmlkZSBhIHdheSB0byBhc3NlcnQgdGhlIFBDSSAjUlNUCi0JICBwaW4gb2YgRFNDQzQgdGhyb3VnaCB0aGUgR1BJTyBwb3J0IG9mIHRoZSBjYXJkLiBJZiB5b3UgY2hvb3NlIFksCi0JICB0aGUgZHJpdmVyIHdpbGwgbWFrZSB1c2Ugb2YgdGhpcyBmZWF0dXJlIGJlZm9yZSBtb2R1bGUgcmVtb3ZhbAotCSAgKGkuZS4gcm1tb2QpLiBUaGUgZmVhdHVyZSBpcyBrbm93biB0byBiZSBhdmFpbGFibGUgb24gQ29tbXRlY2gncwotCSAgY2FyZHMuIENvbnRhY3QgeW91ciBtYW51ZmFjdHVyZXIgZm9yIGRldGFpbHMuCi0KLQkgIFNheSBZIGlmIHlvdXIgY2FyZCBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCi0KICMKICMgTGFuIE1lZGlhJ3MgYm9hcmQuIEN1cnJlbnRseSAxMDAwLCAxMjAwLCA1MjAwLCA1MjQ1CiAjCkBAIC0zMjMsNiArMjg1LDQ0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBmYXJzeW5jLgogCitjb25maWcgRFNDQzQKKwl0cmlzdGF0ZSAiRXRpbmMgUENJU1lOQyBzZXJpYWwgYm9hcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEhETEMgJiYgUENJICYmIG0KKwloZWxwCisJICBEcml2ZXIgZm9yIEV0aW5jIFBDSVNZTkMgYm9hcmRzIGJhc2VkIG9uIHRoZSBJbmZpbmVvbiAoZXguIFNpZW1lbnMpCisJICBEU0NDNCBjaGlwc2V0LgorCisJICBUaGlzIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aCB0aGUgZm91ciBwb3J0IGNhcmQuIFRha2UgYSBsb29rIGF0CisJICA8aHR0cDovL3d3dy5jb2dlbml0LmZyL2RzY2M0Lz4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisJICBkcml2ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRzY2M0LgorCitjb25maWcgRFNDQzRfUENJU1lOQworCWJvb2wgIkV0aW5jIFBDSVNZTkMgZmVhdHVyZXMiCisJZGVwZW5kcyBvbiBEU0NDNAorCWhlbHAKKwkgIER1ZSB0byBFdGluYydzIGRlc2lnbiBjaG9pY2UgZm9yIGl0cyBQQ0lTWU5DIGNhcmRzLCBzb21lIG9wZXJhdGlvbnMKKwkgIGFyZSBvbmx5IGFsbG93ZWQgb24gc3BlY2lmaWMgcG9ydHMgb2YgdGhlIERTQ0M0LiBUaGlzIG9wdGlvbiBpcyB0aGUKKwkgIG9ubHkgd2F5IGZvciB0aGUgZHJpdmVyIHRvIGtub3cgdGhhdCBpdCBzaG91bGRuJ3QgcmV0dXJuIGEgc3VjY2VzcworCSAgY29kZSBmb3IgdGhlc2Ugb3BlcmF0aW9ucy4KKworCSAgUGxlYXNlIHNheSBZIGlmIHlvdXIgY2FyZCBpcyBhbiBFdGluYydzIFBDSVNZTkMuCisKK2NvbmZpZyBEU0NDNF9QQ0lfUlNUCisJYm9vbCAiSGFyZCByZXNldCBzdXBwb3J0IgorCWRlcGVuZHMgb24gRFNDQzQKKwloZWxwCisJICBWYXJpb3VzIERTQ0M0IGJ1Z3MgZm9yYmlkIGFueSByZWxpYWJsZSBzb2Z0d2FyZSByZXNldCBvZiB0aGUgQVNJQy4KKwkgIEFzIGEgcmVwbGFjZW1lbnQsIHNvbWUgdmVuZG9ycyBwcm92aWRlIGEgd2F5IHRvIGFzc2VydCB0aGUgUENJICNSU1QKKwkgIHBpbiBvZiBEU0NDNCB0aHJvdWdoIHRoZSBHUElPIHBvcnQgb2YgdGhlIGNhcmQuIElmIHlvdSBjaG9vc2UgWSwKKwkgIHRoZSBkcml2ZXIgd2lsbCBtYWtlIHVzZSBvZiB0aGlzIGZlYXR1cmUgYmVmb3JlIG1vZHVsZSByZW1vdmFsCisJICAoaS5lLiBybW1vZCkuIFRoZSBmZWF0dXJlIGlzIGtub3duIHRvIGJlIGF2YWlsYWJsZSBvbiBDb21tdGVjaCdzCisJICBjYXJkcy4gQ29udGFjdCB5b3VyIG1hbnVmYWN0dXJlciBmb3IgZGV0YWlscy4KKworCSAgU2F5IFkgaWYgeW91ciBjYXJkIHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4KKwogY29uZmlnIERMQ0kKIAl0cmlzdGF0ZSAiRnJhbWUgUmVsYXkgRExDSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gV0FOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCAwYzA3YjhiLi4xMGJjYjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTU5NSw3ICs1OTUsNyBAQAogc3RhdGljIHZvaWQgYXRtZWxfc21vb3RoX3F1YWwoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYpOwogc3RhdGljIHZvaWQgYXRtZWxfd3JpdGVBUihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgZGF0YSk7CiBzdGF0aWMgaW50IHByb2JlX2F0bWVsX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IHJlc2V0X2F0bWVsX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiApOworc3RhdGljIGludCByZXNldF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgYXRtZWxfZW50ZXJfc3RhdGUoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIGludCBuZXdfc3RhdGUpOwogaW50IGF0bWVsX29wZW4gKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC03ODQsMTEgKzc4NCwxMSBAQAogCiBzdGF0aWMgaW50IHN0YXJ0X3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RhdGljIGNvbnN0IHU4IFNOQVBfUkZDMTAyNFs2XSA9IHsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OwogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciBoZWFkZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MTYgYnVmZiwgZnJhbWVfY3RsLCBsZW4gPSAoRVRIX1pMRU4gPCBza2ItPmxlbikgPyBza2ItPmxlbiA6IEVUSF9aTEVOOwotCXU4IFNOQVBfUkZDMTAyNFs2XSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKIAogCWlmIChwcml2LT5jYXJkICYmIHByaXYtPnByZXNlbnRfY2FsbGJhY2sgJiYKIAkgICAgISgqcHJpdi0+cHJlc2VudF9jYWxsYmFjaykocHJpdi0+Y2FyZCkpIHsKQEAgLTExOTMsNyArMTE5Myw3IEBACiAKIAkJYXRtZWxfc2V0X2djcihkZXYsIEdDUl9BQ0tJTlQpOyAvKiBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KIAotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlycV9vcmRlcikvc2l6ZW9mKHU4KTsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfb3JkZXIpOyBpKyspCiAJCQlpZiAoaXNyICYgaXJxX29yZGVyW2ldKQogCQkJCWJyZWFrOwogCkBAIC0xMzQ1LDEwICsxMzQ1LDEwIEBACiAJCWF0bWVsX3NldF9taWI4KHByaXYsIFBoeV9NaWJfVHlwZSwgUEhZX01JQl9SRUdfRE9NQUlOX1BPUywgcHJpdi0+cmVnX2RvbWFpbik7CiAJfSBlbHNlIHsKIAkJcHJpdi0+cmVnX2RvbWFpbiA9IGF0bWVsX2dldF9taWI4KHByaXYsIFBoeV9NaWJfVHlwZSwgUEhZX01JQl9SRUdfRE9NQUlOX1BPUyk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY2hhbm5lbF90YWJsZSkvc2l6ZW9mKGNoYW5uZWxfdGFibGVbMF0pOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfdGFibGUpOyBpKyspCiAJCQlpZiAocHJpdi0+cmVnX2RvbWFpbiA9PSBjaGFubmVsX3RhYmxlW2ldLnJlZ19kb21haW4pCiAJCQkJYnJlYWs7Ci0JCWlmIChpID09IHNpemVvZihjaGFubmVsX3RhYmxlKS9zaXplb2YoY2hhbm5lbF90YWJsZVswXSkpIHsKKwkJaWYgKGkgPT0gQVJSQVlfU0laRShjaGFubmVsX3RhYmxlKSkgewogCQkJcHJpdi0+cmVnX2RvbWFpbiA9IFJFR19ET01BSU5fTUtLMTsKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogZmFpbGVkIHRvIGdldCByZWd1bGF0b3J5IGRvbWFpbjogYXNzdW1pbmcgTUtLMS5cbiIsIGRldi0+bmFtZSk7CiAJCX0KQEAgLTEzOTMsNyArMTM5Myw3IEBACiAJICAgZWxzZSByZXR1cm4gc3VpdGFibGUgZGVmYXVsdCBjaGFubmVsICovCiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNoYW5uZWxfdGFibGUpL3NpemVvZihjaGFubmVsX3RhYmxlWzBdKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfdGFibGUpOyBpKyspCiAJCWlmIChwcml2LT5yZWdfZG9tYWluID09IGNoYW5uZWxfdGFibGVbaV0ucmVnX2RvbWFpbikgewogCQkJaWYgKGNoYW5uZWwgPj0gY2hhbm5lbF90YWJsZVtpXS5taW4gJiYKIAkJCSAgICBjaGFubmVsIDw9IGNoYW5uZWxfdGFibGVbaV0ubWF4KQpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAkJfQogCiAJCXIgPSAiPHVua25vd24+IjsKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihjaGFubmVsX3RhYmxlKS9zaXplb2YoY2hhbm5lbF90YWJsZVswXSk7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbm5lbF90YWJsZSk7IGkrKykKIAkJCWlmIChwcml2LT5yZWdfZG9tYWluID09IGNoYW5uZWxfdGFibGVbaV0ucmVnX2RvbWFpbikKIAkJCQlyID0gY2hhbm5lbF90YWJsZVtpXS5uYW1lOwogCkBAIC0xNzM2LDcgKzE3MzYsNyBAQAogCQkJCS8qIERpc2FibGUgdGhlIGtleSAqLwogCQkJCXByaXYtPndlcF9rZXlfbGVuW2luZGV4XSA9IDA7CiAJCS8qIENoZWNrIGlmIHRoZSBrZXkgaXMgbm90IG1hcmtlZCBhcyBpbnZhbGlkICovCi0JCWlmKCEoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpKSB7CisJCWlmICghKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSkgewogCQkJLyogQ2xlYW51cCAqLwogCQkJbWVtc2V0KHByaXYtPndlcF9rZXlzW2luZGV4XSwgMCwgMTMpOwogCQkJLyogQ29weSB0aGUga2V5IGluIHRoZSBkcml2ZXIgKi8KQEAgLTE5MDcsNyArMTkwNyw3IEBACiAKIAllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOwogCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7Ci0JCisKIAlpZiAoIXByaXYtPndlcF9pc19vbikgewogCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKIAkJZXh0LT5rZXlfbGVuID0gMDsKQEAgLTIzNDMsNiArMjM0MywxNCBAQAogCQlpd2UudS5mcmVxLmUgPSAwOwogCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CiAKKwkJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcyAqLworCQlpd2UuY21kID0gSVdFVlFVQUw7CisJCWl3ZS51LnF1YWwubGV2ZWwgPSBwcml2LT5CU1NpbmZvW2ldLlJTU0k7CisJCWl3ZS51LnF1YWwucXVhbCAgPSBpd2UudS5xdWFsLmxldmVsOworCQkvKiBpd2UudS5xdWFsLm5vaXNlICA9IFNPTUVUSElORyAqLworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoY3VycmVudF9ldiwgZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBICwgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCisKIAkJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CiAJCWlmIChwcml2LT5CU1NpbmZvW2ldLlVzaW5nV0VQKQogCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOwpAQCAtMjM3Myw3ICsyMzgxLDcgQEAKIAlyYW5nZS0+bWluX253aWQgPSAweDAwMDA7CiAJcmFuZ2UtPm1heF9ud2lkID0gMHgwMDAwOwogCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAwOwotCWZvciAoaiA9IDA7IGogPCBzaXplb2YoY2hhbm5lbF90YWJsZSkvc2l6ZW9mKGNoYW5uZWxfdGFibGVbMF0pOyBqKyspCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2hhbm5lbF90YWJsZSk7IGorKykKIAkJaWYgKHByaXYtPnJlZ19kb21haW4gPT0gY2hhbm5lbF90YWJsZVtqXS5yZWdfZG9tYWluKSB7CiAJCQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gY2hhbm5lbF90YWJsZVtqXS5tYXggLSBjaGFubmVsX3RhYmxlW2pdLm1pbiArIDE7CiAJCQlicmVhazsKQEAgLTI1NzksOSArMjU4Nyw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgYXRtZWxfaGFuZGxlcl9kZWYgPQogewotCS5udW1fc3RhbmRhcmQJPSBzaXplb2YoYXRtZWxfaGFuZGxlcikvc2l6ZW9mKGl3X2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZQk9IHNpemVvZihhdG1lbF9wcml2YXRlX2hhbmRsZXIpL3NpemVvZihpd19oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGVfYXJncyA9IHNpemVvZihhdG1lbF9wcml2YXRlX2FyZ3MpL3NpemVvZihzdHJ1Y3QgaXdfcHJpdl9hcmdzKSwKKwkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShhdG1lbF9oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGUJPSBBUlJBWV9TSVpFKGF0bWVsX3ByaXZhdGVfaGFuZGxlciksCisJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKGF0bWVsX3ByaXZhdGVfYXJncyksCiAJLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgYXRtZWxfaGFuZGxlciwKIAkucHJpdmF0ZQk9IChpd19oYW5kbGVyICopIGF0bWVsX3ByaXZhdGVfaGFuZGxlciwKIAkucHJpdmF0ZV9hcmdzCT0gKHN0cnVjdCBpd19wcml2X2FyZ3MgKikgYXRtZWxfcHJpdmF0ZV9hcmdzLApAQCAtMjY0NSw3ICsyNjUzLDcgQEAKIAogCQlkb21haW5bUkVHRE9NQUlOU1pdID0gMDsKIAkJcmMgPSAtRUlOVkFMOwotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNoYW5uZWxfdGFibGUpL3NpemVvZihjaGFubmVsX3RhYmxlWzBdKTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfdGFibGUpOyBpKyspIHsKIAkJCS8qIHN0cmNhc2VjbXAgZG9lc24ndCBleGlzdCBpbiB0aGUgbGlicmFyeSAqLwogCQkJY2hhciAqYSA9IGNoYW5uZWxfdGFibGVbaV0ubmFtZTsKIAkJCWNoYXIgKmIgPSBkb21haW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCA3ODU2NjQwLi41YzQxMDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTUsMTIgKzUsMTIgQEAKICAgICAgICAgQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KICAgICAgICAgQ29weXJpZ2h0IDIwMDMgU2ltb24gS2VsbGV5LgogCi0gICAgVGhpcyBjb2RlIHdhcyBkZXZlbG9wZWQgZnJvbSB2ZXJzaW9uIDIuMS4xIG9mIHRoZSBBdG1lbCBkcml2ZXJzLCAKLSAgICByZWxlYXNlZCBieSBBdG1lbCBjb3JwLiB1bmRlciB0aGUgR1BMIGluIERlY2VtYmVyIDIwMDIuIEl0IGFsc28gCi0gICAgaW5jbHVkZXMgY29kZSBmcm9tIHRoZSBMaW51eCBhaXJvbmV0IGRyaXZlcnMgKEMpIEJlbmphbWluIFJlZWQsIAotICAgIGFuZCB0aGUgTGludXggUENNQ0lBIHBhY2thZ2UsIChDKSBEYXZpZCBIaW5kcy4gCisgICAgVGhpcyBjb2RlIHdhcyBkZXZlbG9wZWQgZnJvbSB2ZXJzaW9uIDIuMS4xIG9mIHRoZSBBdG1lbCBkcml2ZXJzLAorICAgIHJlbGVhc2VkIGJ5IEF0bWVsIGNvcnAuIHVuZGVyIHRoZSBHUEwgaW4gRGVjZW1iZXIgMjAwMi4gSXQgYWxzbworICAgIGluY2x1ZGVzIGNvZGUgZnJvbSB0aGUgTGludXggYWlyb25ldCBkcml2ZXJzIChDKSBCZW5qYW1pbiBSZWVkLAorICAgIGFuZCB0aGUgTGludXggUENNQ0lBIHBhY2thZ2UsIChDKSBEYXZpZCBIaW5kcy4KIAotICAgIEZvciBhbGwgcXVlcmllcyBhYm91dCB0aGlzIGNvZGUsIHBsZWFzZSBjb250YWN0IHRoZSBjdXJyZW50IGF1dGhvciwgCisgICAgRm9yIGFsbCBxdWVyaWVzIGFib3V0IHRoaXMgY29kZSwgcGxlYXNlIGNvbnRhY3QgdGhlIGN1cnJlbnQgYXV0aG9yLAogICAgIFNpbW9uIEtlbGxleSA8c2ltb25AdGhla2VsbGV5cy5vcmcudWs+IGFuZCBub3QgQXRtZWwgQ29ycG9yYXRpb24uCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtODcsNyArODcsNyBAQAogICAgZXZlbnQgaXMgcmVjZWl2ZWQuICBUaGUgY29uZmlnKCkgYW5kIHJlbGVhc2UoKSBlbnRyeSBwb2ludHMgYXJlCiAgICB1c2VkIHRvIGNvbmZpZ3VyZSBvciByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkCiAgICBpbnNlcnRpb24gYW5kIGVqZWN0aW9uIGV2ZW50cy4gIFRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgYXRtZWxfY3MKLSAgIGV2ZW50IGhhbmRsZXIuIAorICAgZXZlbnQgaGFuZGxlci4KICovCiAKIHN0YXRpYyBpbnQgYXRtZWxfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTEzMywyMiArMTMzLDIyIEBACiAgICBkZXZpY2UgSU8gcm91dGluZXMgY2FuIHVzZSBhIGZsYWcgbGlrZSB0aGlzIHRvIHRocm90dGxlIElPIHRvIGEKICAgIGNhcmQgdGhhdCBpcyBub3QgcmVhZHkgdG8gYWNjZXB0IGl0LgogKi8KLSAgIAorCiB0eXBlZGVmIHN0cnVjdCBsb2NhbF9pbmZvX3QgewogCWRldl9ub2RlX3QJbm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoX2RldjsKIH0gbG9jYWxfaW5mb190OwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgYXRtZWxfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KLSAgCisKICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCiAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBhdG1lbF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCkBAIC0xODQsMTIgKzE4NCwxMiBAQAogfSAvKiBhdG1lbF9hdHRhY2ggKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCiAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4gIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YQogICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAogICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCi0gIAorCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZCBhdG1lbF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC0yMDIsMTEgKzIwMiwxMSBAQAogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgYXRtZWxfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CiAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQogICBkZXZpY2UgYXZhaWxhYmxlIHRvIHRoZSBzeXN0ZW0uCi0gIAorCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjZGVmaW5lIENTX0NIRUNLKGZuLCByZXQpIFwKQEAgLTIzNywxMiArMjM3LDEyIEBACiAJZGlkID0gaGFuZGxlX3RvX2RldihsaW5rKS5kcml2ZXJfZGF0YTsKIAogCURFQlVHKDAsICJhdG1lbF9jb25maWcoMHglcClcbiIsIGxpbmspOwotCQorCiAJdHVwbGUuQXR0cmlidXRlcyA9IDA7CiAJdHVwbGUuVHVwbGVEYXRhID0gYnVmOwogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKLQkKKwogCS8qCiAJICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KIAkgIHJlZ2lzdGVycy4KQEAgLTI1OCw3ICsyNTgsNyBAQAogCSAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKIAkgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKIAkgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KLQkgIAorCiAJICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQogCSAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKIAkgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQpAQCAtMjc0LDE3ICsyNzQsMTcgQEAKIAkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDAgfHwKIAkJCQlwY21jaWFfcGFyc2VfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpICE9IDApCiAJCQlnb3RvIG5leHRfZW50cnk7Ci0JCQorCiAJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkgZGZsdCA9ICpjZmc7CiAJCWlmIChjZmctPmluZGV4ID09IDApIGdvdG8gbmV4dF9lbnRyeTsKIAkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7Ci0JCQorCiAJCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLwogCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CiAJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKIAkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CiAJCX0KLQkJCisKIAkJLyogVXNlIHBvd2VyIHNldHRpbmdzIGZvciBWY2MgYW5kIFZwcCBpZiBwcmVzZW50ICovCiAJCS8qICBOb3RlIHRoYXQgdGhlIENJUyB2YWx1ZXMgbmVlZCB0byBiZSByZXNjYWxlZCAqLwogCQlpZiAoY2ZnLT52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQpAQCAtMjkzLDExICsyOTMsMTEgQEAKIAkJZWxzZSBpZiAoZGZsdC52cHAxLnByZXNlbnQgJiAoMTw8Q0lTVFBMX1BPV0VSX1ZOT00pKQogCQkJbGluay0+Y29uZi5WcHAgPQogCQkJCWRmbHQudnBwMS5wYXJhbVtDSVNUUExfUE9XRVJfVk5PTV0vMTAwMDA7Ci0JCQorCiAJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLwogCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCiAJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROwotCQkKKwogCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KIAkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKIAkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKQEAgLTMxNSwxOCArMzE1LDE4IEBACiAJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CiAJCQl9CiAJCX0KLQkJCisKIAkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KIAkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAogCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCiAJCWJyZWFrOwotCQkKKwogCW5leHRfZW50cnk6CiAJCUNTX0NIRUNLKEdldE5leHRUdXBsZSwgcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpOwogCX0KLQkKKwogCS8qCiAJICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCiAJICBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUKQEAgLTMzNCwzMSArMzM0LDMxIEBACiAJKi8KIAlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQogCQlDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotCQorCiAJLyoKIAkgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCiAJICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCiAJICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgogCSovCiAJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sIHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKTsKLQkKKwogCWlmIChsaW5rLT5pcnEuQXNzaWduZWRJUlEgPT0gMCkgewotCQlwcmludGsoS0VSTl9BTEVSVCAKKwkJcHJpbnRrKEtFUk5fQUxFUlQKIAkJICAgICAgICJhdG1lbDogY2Fubm90IGFzc2lnbiBJUlE6IGNoZWNrIHRoYXQgQ09ORklHX0lTQSBpcyBzZXQgaW4ga2VybmVsIGNvbmZpZy4iKTsKIAkJZ290byBjc19mYWlsZWQ7CiAJfQotICAgICAgIAotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IAorCisJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0KIAkJaW5pdF9hdG1lbF9jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEsCiAJCQkJZGlkID8gZGlkLT5kcml2ZXJfaW5mbyA6IEFUTUVMX0ZXX1RZUEVfTk9ORSwKIAkJCQkmaGFuZGxlX3RvX2RldihsaW5rKSwKLQkJCQljYXJkX3ByZXNlbnQsIAorCQkJCWNhcmRfcHJlc2VudCwKIAkJCQlsaW5rKTsKLQlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgCisJaWYgKCEoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYpCiAJCQlnb3RvIGNzX2ZhaWxlZDsKLQkKLQkKKworCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCiAJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KQEAgLTM3NiwxMSArMzc2LDExIEBACiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBBZnRlciBhIGNhcmQgaXMgcmVtb3ZlZCwgYXRtZWxfcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUKICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYXRtZWxfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTUxNyw3ICs1MTcsNyBAQAogICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKICAgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKICAgICBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICAgCisgICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqLwogCiBtb2R1bGVfaW5pdChhdG1lbF9jc19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKaW5kZXggM2JmYTc5MS4uOTJmODdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKQEAgLTUzLDE4ICs1MywxOCBAQAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBlbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQkJCisKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCiAJCXJldHVybiAtRU5PREVWOwotCQorCiAJcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JCi0JZGV2ID0gaW5pdF9hdG1lbF9jYXJkKHBkZXYtPmlycSwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIAorCisJZGV2ID0gaW5pdF9hdG1lbF9jYXJkKHBkZXYtPmlycSwgcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsCiAJCQkgICAgICBBVE1FTF9GV19UWVBFXzUwNiwKIAkJCSAgICAgICZwZGV2LT5kZXYsIE5VTEwsIE5VTEwpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKLQkKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAppbmRleCBkNmE4YmYwLi45NGRmYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHguaApAQCAtMTU5LDYgKzE1OSw3IEBACiAKIC8qIENoaXBjb21tb24gcmVnaXN0ZXJzLiAqLwogI2RlZmluZSBCQ000M3h4X0NISVBDT01NT05fQ0FQQUJJTElUSUVTIAkweDA0CisjZGVmaW5lIEJDTTQzeHhfQ0hJUENPTU1PTl9DVEwJCQkweDI4CiAjZGVmaW5lIEJDTTQzeHhfQ0hJUENPTU1PTl9QTExPTkRFTEFZCQkweEIwCiAjZGVmaW5lIEJDTTQzeHhfQ0hJUENPTU1PTl9GUkVGU0VMREVMQVkJCTB4QjQKICNkZWZpbmUgQkNNNDN4eF9DSElQQ09NTU9OX1NMT1dDTEtDVEwJCTB4QjgKQEAgLTE3Miw2ICsxNzMsMzMgQEAKIC8qIFNCVE9QQ0kyIHZhbHVlcy4gKi8KICNkZWZpbmUgQkNNNDN4eF9TQlRPUENJMl9QUkVGRVRDSAkweDQKICNkZWZpbmUgQkNNNDN4eF9TQlRPUENJMl9CVVJTVAkJMHg4CisjZGVmaW5lIEJDTTQzeHhfU0JUT1BDSTJfTUVNUkVBRF9NVUxUSQkweDIwCisKKy8qIFBDSS1FIGNvcmUgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBCQ000M3h4X1BDSUVDT1JFX1JFR19BRERSICAgICAgMHgwMTMwCisjZGVmaW5lIEJDTTQzeHhfUENJRUNPUkVfUkVHX0RBVEEgICAgICAweDAxMzQKKyNkZWZpbmUgQkNNNDN4eF9QQ0lFQ09SRV9NRElPX0NUTCAgICAgIDB4MDEyOAorI2RlZmluZSBCQ000M3h4X1BDSUVDT1JFX01ESU9fREFUQSAgICAgMHgwMTJDCisKKy8qIFBDSS1FIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgQkNNNDN4eF9QQ0lFX1RMUF9XT1JLQVJPVU5EICAgIDB4MDAwNAorI2RlZmluZSBCQ000M3h4X1BDSUVfRExMUF9MSU5LQ1RMICAgICAgMHgwMTAwCisKKy8qIFBDSS1FIE1ESU8gYml0cy4gKi8KKyNkZWZpbmUgQkNNNDN4eF9QQ0lFX01ESU9fU1QgICAweDQwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfUENJRV9NRElPX1dUICAgMHgxMDAwMDAwMAorI2RlZmluZSBCQ000M3h4X1BDSUVfTURJT19ERVYgIDIyCisjZGVmaW5lIEJDTTQzeHhfUENJRV9NRElPX1JFRyAgMTgKKyNkZWZpbmUgQkNNNDN4eF9QQ0lFX01ESU9fVEEgICAweDAwMDIwMDAwCisjZGVmaW5lIEJDTTQzeHhfUENJRV9NRElPX1RDICAgMHgwMTAwCisKKy8qIE1ESU8gZGV2aWNlcy4gKi8KKyNkZWZpbmUgQkNNNDN4eF9NRElPX1NFUkRFU19SWAkweDFGCisKKy8qIFNFUkRFUyBSWCByZWdpc3RlcnMuICovCisjZGVmaW5lIEJDTTQzeHhfU0VSREVTX1JYVElNRVIJMHgyCisjZGVmaW5lIEJDTTQzeHhfU0VSREVTX0NEUgkweDYKKyNkZWZpbmUgQkNNNDN4eF9TRVJERVNfQ0RSX0JXCTB4NwogCiAvKiBDaGlwY29tbW9uIGNhcGFiaWxpdGllcy4gKi8KICNkZWZpbmUgQkNNNDN4eF9DQVBBQklMSVRJRVNfUENUTAkJMHgwMDA0MDAwMApAQCAtMjIxLDYgKzI0OSw3IEBACiAjZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1VTQjIwX0hPU1QgICAgICAgMHg4MTkKICNkZWZpbmUgQkNNNDN4eF9DT1JFSURfVVNCMjBfREVWICAgICAgICAweDgxYQogI2RlZmluZSBCQ000M3h4X0NPUkVJRF9TRElPX0hPU1QgICAgICAgIDB4ODFiCisjZGVmaW5lIEJDTTQzeHhfQ09SRUlEX1BDSUUJCTB4ODIwCiAKIC8qIENvcmUgSW5mb3JtYXRpb24gUmVnaXN0ZXJzICovCiAjZGVmaW5lIEJDTTQzeHhfQ0lSX0JBU0UJCTB4ZjAwCkBAIC0zNjUsNiArMzk0LDkgQEAKICNkZWZpbmUgQkNNNDN4eF9ERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUCTcKICNkZWZpbmUgQkNNNDN4eF9ERUZBVUxUX0xPTkdfUkVUUllfTElNSVQJNAogCisvKiBGSVhNRTogdGhlIG5leHQgbGluZSBpcyBhIGd1ZXNzIGFzIHRvIHdoYXQgdGhlIG1heGltdW0gUlNTSSB2YWx1ZSBtaWdodCBiZSAqLworI2RlZmluZSBSWF9SU1NJX01BWAkJCQk2MAorCiAvKiBNYXggc2l6ZSBvZiBhIHNlY3VyaXR5IGtleSAqLwogI2RlZmluZSBCQ000M3h4X1NFQ19LRVlTSVpFCQkJMTYKIC8qIFNlY3VyaXR5IGFsZ29yaXRobXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwppbmRleCBhMWI3ODM4Li41YjNjMjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKQEAgLTEzMCw2ICsxMzAsMTAgQEAKIAl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCS8qIEJyb2FkY29tIDQzMDcgODAyLjExYiAqLwogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzA3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJLyogQnJvYWRjb20gNDMxMSA4MDIuMTEoYSkvYi9nICovCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwkvKiBCcm9hZGNvbSA0MzEyIDgwMi4xMWEvYi9nICovCisJeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAkvKiBCcm9hZGNvbSA0MzE4IDgwMi4xMWIvZyAqLwogCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJLyogQnJvYWRjb20gNDMxOSA4MDIuMTFhL2IvZyAqLwpAQCAtMjYwMCw4ICsyNjA0LDkgQEAKIAkvKiBmZXRjaCBzYl9pZF9oaSBmcm9tIGNvcmUgaW5mb3JtYXRpb24gcmVnaXN0ZXJzICovCiAJc2JfaWRfaGkgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCX0lEX0hJKTsKIAotCWNvcmVfaWQgPSAoc2JfaWRfaGkgJiAweEZGRjApID4+IDQ7Ci0JY29yZV9yZXYgPSAoc2JfaWRfaGkgJiAweEYpOworCWNvcmVfaWQgPSAoc2JfaWRfaGkgJiAweDhGRjApID4+IDQ7CisJY29yZV9yZXYgPSAoc2JfaWRfaGkgJiAweDcwMDApID4+IDg7CisJY29yZV9yZXYgfD0gKHNiX2lkX2hpICYgMHhGKTsKIAljb3JlX3ZlbmRvciA9IChzYl9pZF9oaSAmIDB4RkZGRjAwMDApID4+IDE2OwogCiAJLyogaWYgcHJlc2VudCwgY2hpcGNvbW1vbiBpcyBhbHdheXMgY29yZSAwOyByZWFkIHRoZSBjaGlwaWQgZnJvbSBpdCAqLwpAQCAtMjY3OSwxNCArMjY4NCwxMCBAQAogCQliY20tPmNoaXBfaWQsIGJjbS0+Y2hpcF9yZXYpOwogCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiTnVtYmVyIG9mIGNvcmVzOiAlZFxuIiwgY29yZV9jb3VudCk7CiAJaWYgKGJjbS0+Y29yZV9jaGlwY29tbW9uLmF2YWlsYWJsZSkgewotCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNvcmUgMDogSUQgMHgleCwgcmV2IDB4JXgsIHZlbmRvciAweCV4LCAlc1xuIiwKLQkJCWNvcmVfaWQsIGNvcmVfcmV2LCBjb3JlX3ZlbmRvciwKLQkJCWJjbTQzeHhfY29yZV9lbmFibGVkKGJjbSkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQl9Ci0KLQlpZiAoYmNtLT5jb3JlX2NoaXBjb21tb24uYXZhaWxhYmxlKQorCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNvcmUgMDogSUQgMHgleCwgcmV2IDB4JXgsIHZlbmRvciAweCV4XG4iLAorCQkJY29yZV9pZCwgY29yZV9yZXYsIGNvcmVfdmVuZG9yKTsKIAkJY3VycmVudF9jb3JlID0gMTsKLQllbHNlCisJfSBlbHNlCiAJCWN1cnJlbnRfY29yZSA9IDA7CiAJZm9yICggOyBjdXJyZW50X2NvcmUgPCBjb3JlX2NvdW50OyBjdXJyZW50X2NvcmUrKykgewogCQlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqY29yZTsKQEAgLTI3MDQsMTMgKzI3MDUsMTMgQEAKIAkJY29yZV9yZXYgPSAoc2JfaWRfaGkgJiAweEYpOwogCQljb3JlX3ZlbmRvciA9IChzYl9pZF9oaSAmIDB4RkZGRjAwMDApID4+IDE2OwogCi0JCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiQ29yZSAlZDogSUQgMHgleCwgcmV2IDB4JXgsIHZlbmRvciAweCV4LCAlc1xuIiwKLQkJCWN1cnJlbnRfY29yZSwgY29yZV9pZCwgY29yZV9yZXYsIGNvcmVfdmVuZG9yLAotCQkJYmNtNDN4eF9jb3JlX2VuYWJsZWQoYmNtKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIgKTsKKwkJZHByaW50ayhLRVJOX0lORk8gUEZYICJDb3JlICVkOiBJRCAweCV4LCByZXYgMHgleCwgdmVuZG9yIDB4JXhcbiIsCisJCQljdXJyZW50X2NvcmUsIGNvcmVfaWQsIGNvcmVfcmV2LCBjb3JlX3ZlbmRvcik7CiAKIAkJY29yZSA9IE5VTEw7CiAJCXN3aXRjaCAoY29yZV9pZCkgewogCQljYXNlIEJDTTQzeHhfQ09SRUlEX1BDSToKKwkJY2FzZSBCQ000M3h4X0NPUkVJRF9QQ0lFOgogCQkJY29yZSA9ICZiY20tPmNvcmVfcGNpOwogCQkJaWYgKGNvcmUtPmF2YWlsYWJsZSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJNdWx0aXBsZSBQQ0kgY29yZXMgZm91bmQuXG4iKTsKQEAgLTI3NDksMTIgKzI3NTAsMTIgQEAKIAkJCWNhc2UgNjoKIAkJCWNhc2UgNzoKIAkJCWNhc2UgOToKKwkJCWNhc2UgMTA6CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkVycm9yOiBVbnN1cHBvcnRlZCA4MDIxMSBjb3JlIHJldmlzaW9uICV1XG4iLAorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkJICAgICAgICJVbnN1cHBvcnRlZCA4MDIxMSBjb3JlIHJldmlzaW9uICV1XG4iLAogCQkJCSAgICAgICBjb3JlX3Jldik7Ci0JCQkJZXJyID0gLUVOT0RFVjsKLQkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWJjbS0+bnJfODAyMTFfYXZhaWxhYmxlKys7CiAJCQljb3JlLT5wcml2ID0gZXh0XzgwMjExOwpAQCAtMjg2OCwxNiArMjg2OSwxMSBAQAogCXUzMiBzYmltY29uZmlnbG93OwogCXU4IGxpbWl0OwogCi0JaWYgKGJjbS0+Y2hpcF9yZXYgPCA1KSB7CisJaWYgKGJjbS0+Y29yZV9wY2kucmV2IDw9IDUgJiYgYmNtLT5jb3JlX3BjaS5pZCAhPSBCQ000M3h4X0NPUkVJRF9QQ0lFKSB7CiAJCXNiaW1jb25maWdsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU1DT05GSUdMT1cpOwogCQlzYmltY29uZmlnbG93ICY9IH4gQkNNNDN4eF9TQklNQ09ORklHTE9XX1JFUVVFU1RfVE9VVF9NQVNLOwogCQlzYmltY29uZmlnbG93ICY9IH4gQkNNNDN4eF9TQklNQ09ORklHTE9XX1NFUlZJQ0VfVE9VVF9NQVNLOwotCQlpZiAoYmNtLT5idXN0eXBlID09IEJDTTQzeHhfQlVTVFlQRV9QQ0kpCi0JCQlzYmltY29uZmlnbG93IHw9IDB4MzI7Ci0JCWVsc2UgaWYgKGJjbS0+YnVzdHlwZSA9PSBCQ000M3h4X0JVU1RZUEVfU0IpCi0JCQlzYmltY29uZmlnbG93IHw9IDB4NTM7Ci0JCWVsc2UKLQkJCWFzc2VydCgwKTsKKwkJc2JpbWNvbmZpZ2xvdyB8PSAweDMyOwogCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQklNQ09ORklHTE9XLCBzYmltY29uZmlnbG93KTsKIAl9CiAKQEAgLTMwMDQsMjIgKzMwMDAsNjQgQEAKIAogc3RhdGljIGludCBiY200M3h4X3BjaWNvcmVfY29tbWl0X3NldHRpbmdzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpvbGRfY29yZTsKKwlpbnQgZXJyID0gMDsKIAotCW9sZF9jb3JlID0gYmNtLT5jdXJyZW50X2NvcmU7Ci0JZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfcGNpKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwliY20tPmlycV9zYXZlZHN0YXRlID0gYmNtNDN4eF9pbnRlcnJ1cHRfZGlzYWJsZShiY20sIEJDTTQzeHhfSVJRX0FMTCk7CiAKLQliY200M3h4X3BjaWNvcmVfYnJvYWRjYXN0X3ZhbHVlKGJjbSwgMHhmZDgsIDB4MDAwMDAwMDApOworCWlmIChiY20tPmNvcmVfY2hpcGNvbW1vbi5hdmFpbGFibGUpIHsKKwkJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfY2hpcGNvbW1vbik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKIAotCWJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCBvbGRfY29yZSk7Ci0JYXNzZXJ0KGVyciA9PSAwKTsKKwkJYmNtNDN4eF9wY2ljb3JlX2Jyb2FkY2FzdF92YWx1ZShiY20sIDB4ZmQ4LCAweDAwMDAwMDAwKTsKKworCQkvKiB0aGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQgd2hlbiBhIFBDSSBjb3JlIGlzIG1hcHBlZCAqLworCQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgJmJjbS0+Y29yZV9wY2kpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfSBlbHNlCisJCWJjbTQzeHhfcGNpY29yZV9icm9hZGNhc3RfdmFsdWUoYmNtLCAweGZkOCwgMHgwMDAwMDAwMCk7CisKKwliY200M3h4X2ludGVycnVwdF9lbmFibGUoYmNtLCBiY20tPmlycV9zYXZlZHN0YXRlKTsKKwogb3V0OgogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB1MzIgYmNtNDN4eF9wY2llX3JlZ19yZWFkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTMyIGFkZHJlc3MpCit7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9SRUdfQUREUiwgYWRkcmVzcyk7CisJcmV0dXJuIGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9SRUdfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbTQzeHhfcGNpZV9yZWdfd3JpdGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MzIgYWRkcmVzcywKKwkJCQkgICAgdTMyIGRhdGEpCit7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9SRUdfQUREUiwgYWRkcmVzcyk7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9SRUdfREFUQSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGJjbTQzeHhfcGNpZV9tZGlvX3dyaXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgdTggZGV2LCB1OCByZWcsCisJCQkJICAgIHUxNiBkYXRhKQoreworCWludCBpOworCisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9NRElPX0NUTCwgMHgwMDgyKTsKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUVDT1JFX01ESU9fREFUQSwgQkNNNDN4eF9QQ0lFX01ESU9fU1QgfAorCQkJQkNNNDN4eF9QQ0lFX01ESU9fV1QgfCAoZGV2IDw8IEJDTTQzeHhfUENJRV9NRElPX0RFVikgfAorCQkJKHJlZyA8PCBCQ000M3h4X1BDSUVfTURJT19SRUcpIHwgQkNNNDN4eF9QQ0lFX01ESU9fVEEgfAorCQkJZGF0YSk7CisJdWRlbGF5KDEwKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmIChiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfUENJRUNPUkVfTURJT19DVEwpICYKKwkJICAgIEJDTTQzeHhfUENJRV9NRElPX1RDKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lFQ09SRV9NRElPX0NUTCwgMCk7Cit9CisKIC8qIE1ha2UgYW4gSS9PIENvcmUgdXNhYmxlLiAiY29yZV9tYXNrIiBpcyB0aGUgYml0bWFzayBvZiB0aGUgY29yZXMgdG8gZW5hYmxlLgogICogVG8gZW5hYmxlIGNvcmUgMCwgcGFzcyBhIGNvcmVfbWFzayBvZiAxPDwwCiAgKi8KQEAgLTMwMzksNyArMzA3Nyw4IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAoYmNtLT5jb3JlX3BjaS5yZXYgPCA2KSB7CisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA2IHx8CisJCWJjbS0+Y3VycmVudF9jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF9QQ0kpIHsKIAkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU5UVkVDKTsKIAkJdmFsdWUgfD0gKDEgPDwgYmFja3BsYW5lX2ZsYWdfbnIpOwogCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQklOVFZFQywgdmFsdWUpOwpAQCAtMzA1NywyMSArMzA5Niw0NiBAQAogCQl9CiAJfQogCi0JdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfUENJQ09SRV9TQlRPUENJMik7Ci0JdmFsdWUgfD0gQkNNNDN4eF9TQlRPUENJMl9QUkVGRVRDSCB8IEJDTTQzeHhfU0JUT1BDSTJfQlVSU1Q7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9QQ0lDT1JFX1NCVE9QQ0kyLCB2YWx1ZSk7CisJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF9QQ0kpIHsKKwkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfUENJQ09SRV9TQlRPUENJMik7CisJCXZhbHVlIHw9IEJDTTQzeHhfU0JUT1BDSTJfUFJFRkVUQ0ggfCBCQ000M3h4X1NCVE9QQ0kyX0JVUlNUOworCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X1BDSUNPUkVfU0JUT1BDSTIsIHZhbHVlKTsKIAotCWlmIChiY20tPmNvcmVfcGNpLnJldiA8IDUpIHsKLQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCSU1DT05GSUdMT1cpOwotCQl2YWx1ZSB8PSAoMiA8PCBCQ000M3h4X1NCSU1DT05GSUdMT1dfU0VSVklDRV9UT1VUX1NISUZUKQotCQkJICYgQkNNNDN4eF9TQklNQ09ORklHTE9XX1NFUlZJQ0VfVE9VVF9NQVNLOwotCQl2YWx1ZSB8PSAoMyA8PCBCQ000M3h4X1NCSU1DT05GSUdMT1dfUkVRVUVTVF9UT1VUX1NISUZUKQotCQkJICYgQkNNNDN4eF9TQklNQ09ORklHTE9XX1JFUVVFU1RfVE9VVF9NQVNLOwotCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQklNQ09ORklHTE9XLCB2YWx1ZSk7Ci0JCWVyciA9IGJjbTQzeHhfcGNpY29yZV9jb21taXRfc2V0dGluZ3MoYmNtKTsKLQkJYXNzZXJ0KGVyciA9PSAwKTsKKwkJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPCA1KSB7CisJCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JJTUNPTkZJR0xPVyk7CisJCQl2YWx1ZSB8PSAoMiA8PCBCQ000M3h4X1NCSU1DT05GSUdMT1dfU0VSVklDRV9UT1VUX1NISUZUKQorCQkJCSAmIEJDTTQzeHhfU0JJTUNPTkZJR0xPV19TRVJWSUNFX1RPVVRfTUFTSzsKKwkJCXZhbHVlIHw9ICgzIDw8IEJDTTQzeHhfU0JJTUNPTkZJR0xPV19SRVFVRVNUX1RPVVRfU0hJRlQpCisJCQkJICYgQkNNNDN4eF9TQklNQ09ORklHTE9XX1JFUVVFU1RfVE9VVF9NQVNLOworCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSVJfU0JJTUNPTkZJR0xPVywgdmFsdWUpOworCQkJZXJyID0gYmNtNDN4eF9wY2ljb3JlX2NvbW1pdF9zZXR0aW5ncyhiY20pOworCQkJYXNzZXJ0KGVyciA9PSAwKTsKKwkJfSBlbHNlIGlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDExKSB7CisJCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9QQ0lDT1JFX1NCVE9QQ0kyKTsKKwkJCXZhbHVlIHw9IEJDTTQzeHhfU0JUT1BDSTJfTUVNUkVBRF9NVUxUSTsKKwkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfUENJQ09SRV9TQlRPUENJMiwgdmFsdWUpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPT0gMCB8fCBiY20tPmN1cnJlbnRfY29yZS0+cmV2ID09IDEpIHsKKwkJCXZhbHVlID0gYmNtNDN4eF9wY2llX3JlZ19yZWFkKGJjbSwgQkNNNDN4eF9QQ0lFX1RMUF9XT1JLQVJPVU5EKTsKKwkJCXZhbHVlIHw9IDB4ODsKKwkJCWJjbTQzeHhfcGNpZV9yZWdfd3JpdGUoYmNtLCBCQ000M3h4X1BDSUVfVExQX1dPUktBUk9VTkQsCisJCQkJCSAgICAgICB2YWx1ZSk7CisJCX0KKwkJaWYgKGJjbS0+Y3VycmVudF9jb3JlLT5yZXYgPT0gMCkgeworCQkJYmNtNDN4eF9wY2llX21kaW9fd3JpdGUoYmNtLCBCQ000M3h4X01ESU9fU0VSREVTX1JYLAorCQkJCQkJQkNNNDN4eF9TRVJERVNfUlhUSU1FUiwgMHg4MTI4KTsKKwkJCWJjbTQzeHhfcGNpZV9tZGlvX3dyaXRlKGJjbSwgQkNNNDN4eF9NRElPX1NFUkRFU19SWCwKKwkJCQkJCUJDTTQzeHhfU0VSREVTX0NEUiwgMHgwMTAwKTsKKwkJCWJjbTQzeHhfcGNpZV9tZGlvX3dyaXRlKGJjbSwgQkNNNDN4eF9NRElPX1NFUkRFU19SWCwKKwkJCQkJCUJDTTQzeHhfU0VSREVTX0NEUl9CVywgMHgxNDY2KTsKKwkJfSBlbHNlIGlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID09IDEpIHsKKwkJCXZhbHVlID0gYmNtNDN4eF9wY2llX3JlZ19yZWFkKGJjbSwgQkNNNDN4eF9QQ0lFX0RMTFBfTElOS0NUTCk7CisJCQl2YWx1ZSB8PSAweDQwOworCQkJYmNtNDN4eF9wY2llX3JlZ193cml0ZShiY20sIEJDTTQzeHhfUENJRV9ETExQX0xJTktDVEwsCisJCQkJCSAgICAgICB2YWx1ZSk7CisJCX0KIAl9Ci0KIG91dF9zd2l0Y2hfYmFjazoKIAllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgb2xkX2NvcmUpOwogb3V0OgpAQCAtMzE0MCw1NSArMzIwNCwyNyBAQAogCiBzdGF0aWMgdm9pZCBkb19wZXJpb2RpY193b3JrKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKLQl1bnNpZ25lZCBpbnQgc3RhdGU7Ci0KLQlzdGF0ZSA9IGJjbS0+cGVyaW9kaWNfc3RhdGU7Ci0JaWYgKHN0YXRlICUgOCA9PSAwKQorCWlmIChiY20tPnBlcmlvZGljX3N0YXRlICUgOCA9PSAwKQogCQliY200M3h4X3BlcmlvZGljX2V2ZXJ5MTIwc2VjKGJjbSk7Ci0JaWYgKHN0YXRlICUgNCA9PSAwKQorCWlmIChiY20tPnBlcmlvZGljX3N0YXRlICUgNCA9PSAwKQogCQliY200M3h4X3BlcmlvZGljX2V2ZXJ5NjBzZWMoYmNtKTsKLQlpZiAoc3RhdGUgJSAyID09IDApCisJaWYgKGJjbS0+cGVyaW9kaWNfc3RhdGUgJSAyID09IDApCiAJCWJjbTQzeHhfcGVyaW9kaWNfZXZlcnkzMHNlYyhiY20pOwotCWlmIChzdGF0ZSAlIDEgPT0gMCkKLQkJYmNtNDN4eF9wZXJpb2RpY19ldmVyeTE1c2VjKGJjbSk7Ci0JYmNtLT5wZXJpb2RpY19zdGF0ZSA9IHN0YXRlICsgMTsKKwliY200M3h4X3BlcmlvZGljX2V2ZXJ5MTVzZWMoYmNtKTsKIAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYmNtLT5wZXJpb2RpY193b3JrLCBIWiAqIDE1KTsKIH0KIAotLyogRXN0aW1hdGUgYSAiQmFkbmVzcyIgdmFsdWUgYmFzZWQgb24gdGhlIHBlcmlvZGljIHdvcmsKLSAqIHN0YXRlLW1hY2hpbmUgc3RhdGUuICJCYWRuZXNzIiBpcyB3b3JzZSAoYmlnZ2VyKSwgaWYgdGhlCi0gKiBwZXJpb2RpYyB3b3JrIHdpbGwgdGFrZSBsb25nZXIuCi0gKi8KLXN0YXRpYyBpbnQgZXN0aW1hdGVfcGVyaW9kaWNfd29ya19iYWRuZXNzKHVuc2lnbmVkIGludCBzdGF0ZSkKLXsKLQlpbnQgYmFkbmVzcyA9IDA7Ci0KLQlpZiAoc3RhdGUgJSA4ID09IDApIC8qIGV2ZXJ5IDEyMCBzZWMgKi8KLQkJYmFkbmVzcyArPSAxMDsKLQlpZiAoc3RhdGUgJSA0ID09IDApIC8qIGV2ZXJ5IDYwIHNlYyAqLwotCQliYWRuZXNzICs9IDU7Ci0JaWYgKHN0YXRlICUgMiA9PSAwKSAvKiBldmVyeSAzMCBzZWMgKi8KLQkJYmFkbmVzcyArPSAxOwotCWlmIChzdGF0ZSAlIDEgPT0gMCkgLyogZXZlcnkgMTUgc2VjICovCi0JCWJhZG5lc3MgKz0gMTsKLQotI2RlZmluZSBCQURORVNTX0xJTUlUCTQKLQlyZXR1cm4gYmFkbmVzczsKLX0KLQogc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY193b3JrX2hhbmRsZXIodm9pZCAqZCkKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gYmNtLT5uZXRfZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIHNhdmVkaXJxcyA9IDA7Ci0JaW50IGJhZG5lc3M7CiAJdW5zaWduZWQgbG9uZyBvcmlnX3RyYW5zX3N0YXJ0ID0gMDsKIAogCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwotCWJhZG5lc3MgPSBlc3RpbWF0ZV9wZXJpb2RpY193b3JrX2JhZG5lc3MoYmNtLT5wZXJpb2RpY19zdGF0ZSk7Ci0JaWYgKGJhZG5lc3MgPiBCQURORVNTX0xJTUlUKSB7CisJaWYgKHVubGlrZWx5KGJjbS0+cGVyaW9kaWNfc3RhdGUgJSA0ID09IDApKSB7CiAJCS8qIFBlcmlvZGljIHdvcmsgd2lsbCB0YWtlIGEgbG9uZyB0aW1lLCBzbyB3ZSB3YW50IGl0IHRvCiAJCSAqIGJlIHByZWVtdGlibGUuCiAJCSAqLwpAQCAtMzIyMCw3ICszMjU2LDcgQEAKIAogCWRvX3BlcmlvZGljX3dvcmsoYmNtKTsKIAotCWlmIChiYWRuZXNzID4gQkFETkVTU19MSU1JVCkgeworCWlmICh1bmxpa2VseShiY20tPnBlcmlvZGljX3N0YXRlICUgNCA9PSAwKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCQl0YXNrbGV0X2VuYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7CiAJCWJjbTQzeHhfaW50ZXJydXB0X2VuYWJsZShiY20sIHNhdmVkaXJxcyk7CkBAIC0zMjMxLDYgKzMyNjcsNyBAQAogCQluZXRfZGV2LT50cmFuc19zdGFydCA9IG9yaWdfdHJhbnNfc3RhcnQ7CiAJfQogCW1taW93YigpOworCWJjbS0+cGVyaW9kaWNfc3RhdGUrKzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIH0KQEAgLTM2NzYsNyArMzcxMyw3IEBACiAJCWJjbS0+aWVlZS0+ZnJlcV9iYW5kID0gSUVFRTgwMjExXzI0R0haX0JBTkQ7CiAJCWJyZWFrOwogCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0c6Ci0JCWlmIChwaHlfcmV2ID4gNykKKwkJaWYgKHBoeV9yZXYgPiA4KQogCQkJcGh5X3Jldl9vayA9IDA7CiAJCWJjbS0+aWVlZS0+bW9kdWxhdGlvbiA9IElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gfAogCQkJCQlJRUVFODAyMTFfQ0NLX01PRFVMQVRJT047CkBAIC0zNjg4LDYgKzM3MjUsOCBAQAogCQkgICAgICAgcGh5X3R5cGUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9OworCWJjbS0+aWVlZS0+cGVyZmVjdF9yc3NpID0gUlhfUlNTSV9NQVg7CisJYmNtLT5pZWVlLT53b3JzdF9yc3NpID0gMDsKIAlpZiAoIXBoeV9yZXZfb2spIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkludmFsaWQgUEhZIFJldmlzaW9uICV4XG4iLAogCQkgICAgICAgcGh5X3Jldik7CkBAIC0zOTc0LDExICs0MDEzLDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiBiY200M3h4X25ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCi17Ci0JcmV0dXJuICYoYmNtNDN4eF9wcml2KG5ldF9kZXYpLT5pZWVlLT5zdGF0cyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGJjbTQzeHhfbmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwpAQCAtNDA5Miw3ICs0MTI2LDYgQEAKIAogCW5ldF9kZXYtPm9wZW4gPSBiY200M3h4X25ldF9vcGVuOwogCW5ldF9kZXYtPnN0b3AgPSBiY200M3h4X25ldF9zdG9wOwotCW5ldF9kZXYtPmdldF9zdGF0cyA9IGJjbTQzeHhfbmV0X2dldF9zdGF0czsKIAluZXRfZGV2LT50eF90aW1lb3V0ID0gYmNtNDN4eF9uZXRfdHhfdGltZW91dDsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCW5ldF9kZXYtPnBvbGxfY29udHJvbGxlciA9IGJjbTQzeHhfbmV0X3BvbGxfY29udHJvbGxlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9wb3dlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKaW5kZXggNjU2OWRhMy4uN2U3NzRmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bvd2VyLmMKQEAgLTE1Myw4ICsxNTMsNiBAQAogCWludCBlcnIsIG1heGZyZXE7CiAJc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm9sZF9jb3JlOwogCi0JaWYgKCEoYmNtLT5jaGlwY29tbW9uX2NhcGFiaWxpdGllcyAmIEJDTTQzeHhfQ0FQQUJJTElUSUVTX1BDVEwpKQotCQlyZXR1cm4gMDsKIAlvbGRfY29yZSA9IGJjbS0+Y3VycmVudF9jb3JlOwogCWVyciA9IGJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlX2NoaXBjb21tb24pOwogCWlmIChlcnIgPT0gLUVOT0RFVikKQEAgLTE2MiwxMSArMTYwLDI3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQltYXhmcmVxID0gYmNtNDN4eF9wY3RsX2Nsb2NrZnJlcWxpbWl0KGJjbSwgMSk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX1BMTE9OREVMQVksCi0JCQkobWF4ZnJlcSAqIDE1MCArIDk5OTk5OSkgLyAxMDAwMDAwKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NISVBDT01NT05fRlJFRlNFTERFTEFZLAotCQkJKG1heGZyZXEgKiAxNSArIDk5OTk5OSkgLyAxMDAwMDAwKTsKKwlpZiAoYmNtLT5jaGlwX2lkID09IDB4NDMyMSkgeworCQlpZiAoYmNtLT5jaGlwX3JldiA9PSAwKQorCQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSElQQ09NTU9OX0NUTCwgMHgwM0E0KTsKKwkJaWYgKGJjbS0+Y2hpcF9yZXYgPT0gMSkKKwkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9DVEwsIDB4MDBBNCk7CisJfQorCisJaWYgKGJjbS0+Y2hpcGNvbW1vbl9jYXBhYmlsaXRpZXMgJiBCQ000M3h4X0NBUEFCSUxJVElFU19QQ1RMKSB7CisJCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDEwKSB7CisJCQkvKiBTZXQgSWRsZSBQb3dlciBjbG9jayByYXRlIHRvIDFNaHogKi8KKwkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TWVNDTEtDVEwsCisJCQkJICAgICAgIChiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9TWVNDTEtDVEwpCisJCQkJICAgICAgICYgMHgwMDAwRkZGRikgfCAweDQwMDAwKTsKKwkJfSBlbHNlIHsKKwkJCW1heGZyZXEgPSBiY200M3h4X3BjdGxfY2xvY2tmcmVxbGltaXQoYmNtLCAxKTsKKwkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9QTExPTkRFTEFZLAorCQkJCSAgICAgICAobWF4ZnJlcSAqIDE1MCArIDk5OTk5OSkgLyAxMDAwMDAwKTsKKwkJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0hJUENPTU1PTl9GUkVGU0VMREVMQVksCisJCQkJICAgICAgIChtYXhmcmVxICogMTUgKyA5OTk5OTkpIC8gMTAwMDAwMCk7CisJCX0KKwl9CiAKIAllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgb2xkX2NvcmUpOwogCWFzc2VydChlcnIgPT0gMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCmluZGV4IGQyNzAxNmYuLmE2NTk0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCkBAIC00Nyw5ICs0Nyw2IEBACiAjZGVmaW5lIEJDTTQzeHhfV1hfVkVSU0lPTgkxOAogCiAjZGVmaW5lIE1BWF9XWF9TVFJJTkcJCTgwCi0vKiBGSVhNRTogdGhlIG5leHQgbGluZSBpcyBhIGd1ZXNzIGFzIHRvIHdoYXQgdGhlIG1heGltdW0gUlNTSSB2YWx1ZSBtaWdodCBiZSAqLwotI2RlZmluZSBSWF9SU1NJX01BWAkJNjAKLQogCiBzdGF0aWMgaW50IGJjbTQzeHhfd3hfZ2V0X25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTY5Myw2ICs2OTAsNyBAQAogCWJjbS0+aWVlZS0+aG9zdF9lbmNyeXB0ID0gISFvbjsKIAliY20tPmllZWUtPmhvc3RfZGVjcnlwdCA9ICEhb247CiAJYmNtLT5pZWVlLT5ob3N0X2J1aWxkX2l2ID0gIW9uOworCWJjbS0+aWVlZS0+aG9zdF9zdHJpcF9pdl9pY3YgPSAhb247CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5jCmluZGV4IDAxNTllNGUuLjNlMjQ2MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuYwpAQCAtNTQ0LDI0ICs1NDQsNiBAQAogCX0KIAogCWZyYW1lX2N0bCA9IGxlMTZfdG9fY3B1KHdsaGRyLT5mcmFtZV9jdGwpOwotCWlmICgoZnJhbWVfY3RsICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSAmJiAhYmNtLT5pZWVlLT5ob3N0X2RlY3J5cHQpIHsKLQkJZnJhbWVfY3RsICY9IH5JRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7Ci0JCXdsaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmcmFtZV9jdGwpOwkJCi0JCS8qIHRyaW0gSVYgYW5kIElDViAqLwotCQkvKiBGSVhNRTogdGhpcyBtdXN0IGJlIGRvbmUgb25seSBmb3IgV0VQIGVuY3J5cHRlZCBwYWNrZXRzICovCi0JCWlmIChza2ItPmxlbiA8IDMyKSB7Ci0JCQlkcHJpbnRrbChLRVJOX0VSUiBQRlggIlJYIHBhY2tldCBkcm9wcGVkIChQUk9URUNURUQgZmxhZyAiCi0JCQkJCSAgICAgICJzZXQgYW5kIGxlbmd0aCA8IDMyKVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfSBlbHNlIHsJCQotCQkJbWVtbW92ZShza2ItPmRhdGEgKyA0LCBza2ItPmRhdGEsIDI0KTsKLQkJCXNrYl9wdWxsKHNrYiwgNCk7Ci0JCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gNCk7Ci0JCQlzdGF0cy5sZW4gLT0gODsKLQkJfQotCQl3bGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKShza2ItPmRhdGEpOwotCX0KLQkKIAlzd2l0Y2ggKFdMQU5fRkNfR0VUX1RZUEUoZnJhbWVfY3RsKSkgewogCWNhc2UgSUVFRTgwMjExX0ZUWVBFX01HTVQ6CiAJCWllZWU4MDIxMV9yeF9tZ3QoYmNtLT5pZWVlLCB3bGhkciwgJnN0YXRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCmluZGV4IGMyZmEwMTEuLmQxZGU5NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwpAQCAtNDI1LDggKzQyNSwxNCBAQAogc3RhdGljIGludCBwcmlzbTJfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnI7CiAKLQlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBvbiByZXN1bWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlwcmlzbTJfaHdfY29uZmlnKGRldiwgMCk7CiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCmluZGV4IDRlNGVhYTIuLjc5NjA3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKQEAgLTU4MjcsMTkgKzU4MjcsNiBAQAogCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogfQogCi0vKgotICogVE9ETzogcmVpbXBsZW1lbnQgaXQgc28gdGhhdCBpdCByZWFkcyBzdGF0aXN0aWNzCi0gKiAgICAgICBmcm9tIHRoZSBhZGFwdGVyIHVzaW5nIG9yZGluYWwgdGFibGVzCi0gKiAgICAgICBpbnN0ZWFkIG9mL2luIGFkZGl0aW9uIHRvIGNvbGxlY3RpbmcgdGhlbQotICogICAgICAgaW4gdGhlIGRyaXZlcgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwdzIxMDBfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQotCXJldHVybiAmcHJpdi0+aWVlZS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgaXB3MjEwMF93cGFfZW5hYmxlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCB2YWx1ZSkKIHsKIAkvKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdwYV9zdXBwbGljYW50IGxvYWRzIGFuZCBjbG9zZXMgdGhlIGRyaXZlcgpAQCAtNjAyMiw3ICs2MDA5LDYgQEAKIAlkZXYtPm9wZW4gPSBpcHcyMTAwX29wZW47CiAJZGV2LT5zdG9wID0gaXB3MjEwMF9jbG9zZTsKIAlkZXYtPmluaXQgPSBpcHcyMTAwX25ldF9pbml0OwotCWRldi0+Z2V0X3N0YXRzID0gaXB3MjEwMF9zdGF0czsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJmlwdzIxMDBfZXRodG9vbF9vcHM7CiAJZGV2LT50eF90aW1lb3V0ID0gaXB3MjEwMF90eF90aW1lb3V0OwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaXB3MjEwMF93eF9oYW5kbGVyX2RlZjsKQEAgLTY0MjMsNiArNjQwOSw3IEBACiB7CiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKKwlpbnQgZXJyOwogCXUzMiB2YWw7CiAKIAlpZiAoSVBXMjEwMF9QTV9ESVNBQkxFRCkKQEAgLTY0MzMsNyArNjQyMCwxMiBAQAogCUlQV19ERUJVR19JTkZPKCIlczogQ29taW5nIG91dCBvZiBzdXNwZW5kLi4uXG4iLCBkZXYtPm5hbWUpOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOwotCXBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIG9uIHJlc3VtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBlcnI7CisJfQogCXBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOwogCiAJLyoKQEAgLTc1NjgsMTEgKzc1NjAsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKLQkJYnVmID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWJ1ZiA9IGttZW1kdXAoZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKLQkJbWVtY3B5KGJ1ZiwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKIAkJa2ZyZWUoaWVlZS0+d3BhX2llKTsKIAkJaWVlZS0+d3BhX2llID0gYnVmOwogCQlpZWVlLT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKaW5kZXggNzIxMjBkNS4uYzY5MmQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwpAQCAtMTE3MjcsMTIgKzExNzI3LDE4IEBACiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OworCWludCBlcnI7CiAJdTMyIHZhbDsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb21pbmcgb3V0IG9mIHN1c3BlbmQuLi5cbiIsIGRldi0+bmFtZSk7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgb24gcmVzdW1lXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmgKaW5kZXggYmUxYWJlYS4uZjRlNWUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5oCkBAIC02MCw3ICs2MCwxMiBAQAogCWludCBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOwotCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIG9uIHJlc3VtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBlcnI7CisJfQogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBvcmlub2NvX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmMKaW5kZXggMjNkZWVlNi4uMDJmYzY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguYwpAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiAgCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEludGVyc2lsIEFtZXJpY2FzIEluYy4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHJ1c2x1Zy5ydXRnZXJzLmVkdT5fCiAgKgpAQCAtMzgsNyArMzcsNyBAQAogICogaXNsMzh4eF9kaXNhYmxlX2ludGVycnVwdHMgLSBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzCiAgKiBAZGV2aWNlOiBwY2kgbWVtb3J5IGJhc2UgYWRkcmVzcwogICoKLSAqICBJbnN0cnVjdHMgdGhlIGRldmljZSB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHQgcmVwb3J0aW5nIGJ5IGFzc2VydGluZyAKKyAqICBJbnN0cnVjdHMgdGhlIGRldmljZSB0byBkaXNhYmxlIGFsbCBpbnRlcnJ1cHQgcmVwb3J0aW5nIGJ5IGFzc2VydGluZwogICogIHRoZSBJUlEgbGluZS4gTmV3IGV2ZW50cyBtYXkgc3RpbGwgc2hvdyB1cCBpbiB0aGUgaW50ZXJydXB0IGlkZW50aWZpY2F0aW9uCiAgKiAgcmVnaXN0ZXIgbG9jYXRlZCBhdCBvZmZzZXQgJUlTTDM4WFhfSU5UX0lERU5UX1JFRy4KICAqLwpAQCAtMjA0LDE3ICsyMDMsMTkgQEAKIAkvKiBlbmFibGUgdGhlIGludGVycnVwdCBmb3IgZGV0ZWN0aW5nIGluaXRpYWxpemF0aW9uICovCiAKIAkvKiBOb3RlOiBEbyBub3QgZW5hYmxlIG90aGVyIGludGVycnVwdHMgaGVyZS4gV2Ugd2FudCB0aGUKLQkgKiBkZXZpY2UgdG8gaGF2ZSBjb21lIHVwIGZpcnN0IDEwMCUgYmVmb3JlIGFsbG93aW5nIGFueSBvdGhlciAKKwkgKiBkZXZpY2UgdG8gaGF2ZSBjb21lIHVwIGZpcnN0IDEwMCUgYmVmb3JlIGFsbG93aW5nIGFueSBvdGhlcgogCSAqIGludGVycnVwdHMuICovCiAJaXNsMzh4eF93MzJfZmx1c2goZGV2aWNlX2Jhc2UsIElTTDM4WFhfSU5UX0lERU5UX0lOSVQsIElTTDM4WFhfSU5UX0VOX1JFRyk7CiAJdWRlbGF5KElTTDM4WFhfV1JJVEVJT19ERUxBWSk7ICAvKiBhbGxvdyBjb21wbGV0ZSBmdWxsIHJlc2V0ICovCiB9CiAKIHZvaWQKLWlzbDM4eHhfZW5hYmxlX2NvbW1vbl9pbnRlcnJ1cHRzKHZvaWQgX19pb21lbSAqZGV2aWNlX2Jhc2UpIHsKK2lzbDM4eHhfZW5hYmxlX2NvbW1vbl9pbnRlcnJ1cHRzKHZvaWQgX19pb21lbSAqZGV2aWNlX2Jhc2UpCit7CiAJdTMyIHJlZzsKLQlyZWcgPSAoIElTTDM4WFhfSU5UX0lERU5UX1VQREFURSB8IAotCQkJSVNMMzhYWF9JTlRfSURFTlRfU0xFRVAgfCBJU0wzOFhYX0lOVF9JREVOVF9XQUtFVVApOworCisJcmVnID0gSVNMMzhYWF9JTlRfSURFTlRfVVBEQVRFIHwgSVNMMzhYWF9JTlRfSURFTlRfU0xFRVAgfAorCSAgICAgIElTTDM4WFhfSU5UX0lERU5UX1dBS0VVUDsKIAlpc2wzOHh4X3czMl9mbHVzaChkZXZpY2VfYmFzZSwgcmVnLCBJU0wzOFhYX0lOVF9FTl9SRUcpOwogCXVkZWxheShJU0wzOFhYX1dSSVRFSU9fREVMQVkpOwogfQpAQCAtMjM0LDIzICsyMzUsMjEgQEAKIAkJLyogc2VuZCBxdWV1ZXMgKi8KIAljYXNlIElTTDM4WFhfQ0JfVFhfTUdNVFE6CiAJCUJVR19PTihkZWx0YSA+IElTTDM4WFhfQ0JfTUdNVF9RU0laRSk7CisKIAljYXNlIElTTDM4WFhfQ0JfVFhfREFUQV9MUToKIAljYXNlIElTTDM4WFhfQ0JfVFhfREFUQV9IUToKIAkJQlVHX09OKGRlbHRhID4gSVNMMzhYWF9DQl9UWF9RU0laRSk7CiAJCXJldHVybiBkZWx0YTsKLQkJYnJlYWs7CiAKIAkJLyogcmVjZWl2ZSBxdWV1ZXMgKi8KIAljYXNlIElTTDM4WFhfQ0JfUlhfTUdNVFE6CiAJCUJVR19PTihkZWx0YSA+IElTTDM4WFhfQ0JfTUdNVF9RU0laRSk7CiAJCXJldHVybiBJU0wzOFhYX0NCX01HTVRfUVNJWkUgLSBkZWx0YTsKLQkJYnJlYWs7CiAKIAljYXNlIElTTDM4WFhfQ0JfUlhfREFUQV9MUToKIAljYXNlIElTTDM4WFhfQ0JfUlhfREFUQV9IUToKIAkJQlVHX09OKGRlbHRhID4gSVNMMzhYWF9DQl9SWF9RU0laRSk7CiAJCXJldHVybiBJU0wzOFhYX0NCX1JYX1FTSVpFIC0gZGVsdGE7Ci0JCWJyZWFrOwogCX0KIAlCVUcoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsXzM4eHguaAppbmRleCA4YWYyMDk4Li4zZmFkY2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF8zOHh4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfMzh4eC5oCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNjcsMTAgKzY2LDEwIEBACiAgKiBAYmFzZTogKGhvc3QpIG1lbW9yeSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRldmljZQogICogQHZhbDogMzJiaXQgdmFsdWUgKGhvc3Qgb3JkZXIpIHRvIHdyaXRlCiAgKiBAb2Zmc2V0OiBieXRlIG9mZnNldCBpbnRvIEBiYXNlIHRvIHdyaXRlIHZhbHVlIHRvCi0gKiAKKyAqCiAgKiAgVGhpcyBoZWxwZXIgdGFrZXMgY2FyZSBvZiB3cml0aW5nIGEgMzJiaXQgZGF0dW0gdG8gdGhlCi0gKiAgc3BlY2lmaWVkIG9mZnNldCBpbnRvIHRoZSBkZXZpY2UncyBwY2kgbWVtb3J5IHNwYWNlLCBhbmQgbWFraW5nIHN1cmUgCi0gKiAgdGhlIHBjaSBtZW1vcnkgYnVmZmVycyBnZXQgZmx1c2hlZCBieSBwZXJmb3JtaW5nIG9uZSBoYXJtbGVzcyByZWFkIAorICogIHNwZWNpZmllZCBvZmZzZXQgaW50byB0aGUgZGV2aWNlJ3MgcGNpIG1lbW9yeSBzcGFjZSwgYW5kIG1ha2luZyBzdXJlCisgKiAgdGhlIHBjaSBtZW1vcnkgYnVmZmVycyBnZXQgZmx1c2hlZCBieSBwZXJmb3JtaW5nIG9uZSBoYXJtbGVzcyByZWFkCiAgKiAgZnJvbSB0aGUgJUlTTDM4WFhfUENJX1BPU1RJTkdfRkxVU0ggb2Zmc2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDI4NjMyNWMuLjRhMjBlNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMSw1ICsxLDQgQEAKIC8qCi0gKiAgCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEludGVyc2lsIEFtZXJpY2FzIEluYy4KICAqICAgICAgICAgICAgKEMpIDIwMDMsMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgogICogICAgICAgICAgICAoQykgMjAwMyBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsIDxodnJAZ251Lm9yZz4KQEAgLTU1LDEyICs1NCwxMiBAQAogICogcHJpc201NF9taWJfbW9kZV9oZWxwZXIgLSBNSUIgY2hhbmdlIG1vZGUgaGVscGVyIGZ1bmN0aW9uCiAgKiBAbWliOiB0aGUgJnN0cnVjdCBpc2xwY2lfbWliIG9iamVjdCB0byBtb2RpZnkKICAqIEBpd19tb2RlOiBuZXcgbW9kZSAoJUlXX01PREVfKikKLSAqIAorICoKICAqICBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uLCBoZW5jZSBpdCBkb2VzIG5vdCBsb2NrLiBNYWtlIHN1cmUKLSAqICBjYWxsZXIgZGVhbHMgd2l0aCBsb2NraW5nICppZiogbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIAotICogIG1vZGUtZGVwZW5kZW50IG1pYiB2YWx1ZXMgYW5kIGRvZXMgdGhlIG1hcHBpbmcgb2YgdGhlIExpbnV4IAotICogIFdpcmVsZXNzIEFQSSBtb2RlcyB0byBEZXZpY2UgZmlybXdhcmUgbW9kZXMuIEl0IGFsc28gY2hlY2tzIGZvciAKLSAqICBjb3JyZWN0IHZhbGlkIExpbnV4IHdpcmVsZXNzIG1vZGVzLiAKKyAqICBjYWxsZXIgZGVhbHMgd2l0aCBsb2NraW5nICppZiogbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlCisgKiAgbW9kZS1kZXBlbmRlbnQgbWliIHZhbHVlcyBhbmQgZG9lcyB0aGUgbWFwcGluZyBvZiB0aGUgTGludXgKKyAqICBXaXJlbGVzcyBBUEkgbW9kZXMgdG8gRGV2aWNlIGZpcm13YXJlIG1vZGVzLiBJdCBhbHNvIGNoZWNrcyBmb3IKKyAqICBjb3JyZWN0IHZhbGlkIExpbnV4IHdpcmVsZXNzIG1vZGVzLgogICovCiBzdGF0aWMgaW50CiBwcmlzbTU0X21pYl9tb2RlX2hlbHBlcihpc2xwY2lfcHJpdmF0ZSAqcHJpdiwgdTMyIGl3X21vZGUpCkBAIC0xMTgsNyArMTE3LDcgQEAKICAqCiAgKiAgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgc3RydWN0IGdpdmVuIGFzIEBtaWIgd2l0aCBkZWZhdWx0cywKICAqICBvZiB3aGljaCBtYW55IGFyZSByZXRyaWV2ZWQgZnJvbSB0aGUgZ2xvYmFsIG1vZHVsZSBwYXJhbWV0ZXIKLSAqICB2YXJpYWJsZXMuICAKKyAqICB2YXJpYWJsZXMuCiAgKi8KIAogdm9pZApAQCAtMTM0LDcgKzEzMyw3IEBACiAJYXV0aGVuID0gQ0FSRF9ERUZBVUxUX0FVVEhFTjsKIAl3ZXAgPSBDQVJEX0RFRkFVTFRfV0VQOwogCWZpbHRlciA9IENBUkRfREVGQVVMVF9GSUxURVI7IC8qICgwKSBEbyBub3QgZmlsdGVyIHVuLWVuY3J5cHRlZCBkYXRhICovCi0JZG90MXggPSBDQVJEX0RFRkFVTFRfRE9UMVg7IAorCWRvdDF4ID0gQ0FSRF9ERUZBVUxUX0RPVDFYOwogCW1sbWUgPSBDQVJEX0RFRkFVTFRfTUxNRV9NT0RFOwogCWNvbmZvcm1hbmNlID0gQ0FSRF9ERUZBVUxUX0NPTkZPUk1BTkNFOwogCXBvd2VyID0gMTI3OwpAQCAtMjI4LDcgKzIyNyw3IEBACiAJfSBlbHNlCiAJCXByaXYtPml3c3RhdGlzdGljcy5xdWFsLnVwZGF0ZWQgPSAwOwogCi0JLyogVXBkYXRlIG91ciB3aXJlbGVzcyBzdGF0cywgYnV0IGRvIG5vdCBzY2hlZHVsZSB0byBvZnRlbiAKKwkvKiBVcGRhdGUgb3VyIHdpcmVsZXNzIHN0YXRzLCBidXQgZG8gbm90IHNjaGVkdWxlIHRvIG9mdGVuCiAJICogKG1heCAxIEhaKSAqLwogCWlmICgocHJpdi0+c3RhdHNfdGltZXN0YW1wID09IDApIHx8CiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgcHJpdi0+c3RhdHNfdGltZXN0YW1wICsgMSAqIEhaKSkgewpAQCAtNzA1LDcgKzcwNCw3IEBACiAJKiBTdGFydGluZyB3aXRoIFdFLTE3LCB0aGUgYnVmZmVyIGNhbiBiZSBhcyBiaWcgYXMgbmVlZGVkLgogCSogQnV0IHRoZSBkZXZpY2Ugd29uJ3QgcmVwcG9ydCBhbnl0aGluZyBpZiB5b3UgY2hhbmdlIHRoZSB2YWx1ZQogCSogb2YgSVdNQVhfQlNTPTI0LiAqLwotCQorCiAJcnZhbHVlIHw9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfQlNTTElTVCwgMCwgTlVMTCwgJnIpOwogCWJzc2xpc3QgPSByLnB0cjsKIApAQCAtNzg1LDcgKzc4NCw3IEBACiAJcmV0dXJuIHJ2YWx1ZTsKIH0KIAotLyogUHJvdmlkZXMgbm8gZnVuY3Rpb25hbGl0eSwganVzdCBjb21wbGV0ZXMgdGhlIGlvY3RsLiBJbiBlc3NlbmNlIHRoaXMgaXMgYSAKKy8qIFByb3ZpZGVzIG5vIGZ1bmN0aW9uYWxpdHksIGp1c3QgY29tcGxldGVzIHRoZSBpb2N0bC4gSW4gZXNzZW5jZSB0aGlzIGlzIGEKICAqIGp1c3QgYSBjb3NtZXRpYyBpb2N0bC4KICAqLwogc3RhdGljIGludApAQCAtMTEwNCw3ICsxMTAzLDcgQEAKIAkJCQkJICAgICZrZXkpOwogCQl9CiAJCS8qCi0JCSAqIElmIGEgdmFsaWQga2V5IGlzIHNldCwgZW5jcnlwdGlvbiBzaG91bGQgYmUgZW5hYmxlZCAKKwkJICogSWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uIHNob3VsZCBiZSBlbmFibGVkCiAJCSAqICh1c2VyIG1heSB0dXJuIGl0IG9mZiBsYXRlcikuCiAJCSAqIFRoaXMgaXMgYWxzbyBob3cgIml3Y29uZmlnIGV0aFgga2V5IG9uIiB3b3JrcwogCQkgKi8KQEAgLTExMjYsNyArMTEyNSw3IEBACiAJfQogCS8qIG5vdyByZWFkIHRoZSBmbGFncyAqLwogCWlmIChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgewotCQkvKiBFbmNvZGluZyBkaXNhYmxlZCwgCisJCS8qIEVuY29kaW5nIGRpc2FibGVkLAogCQkgKiBhdXRoZW4gPSBET1QxMV9BVVRIX09TOwogCQkgKiBpbnZva2UgPSAwOwogCQkgKiBleHVuZW5jcnlwdCA9IDA7ICovCkBAIC0xMjE0LDcgKzEyMTMsNyBAQAogCXZ3cnEtPnZhbHVlID0gKHMzMikgci51IC8gNDsKIAl2d3JxLT5maXhlZCA9IDE7CiAJLyogcmFkaW8gaXMgbm90IHR1cm5lZCBvZgotCSAqIGJ0dzogaG93IGlzIHBvc3NpYmxlIHRvIHR1cm4gb2ZmIG9ubHkgdGhlIHJhZGlvIAorCSAqIGJ0dzogaG93IGlzIHBvc3NpYmxlIHRvIHR1cm4gb2ZmIG9ubHkgdGhlIHJhZGlvCiAJICovCiAJdndycS0+ZGlzYWJsZWQgPSAwOwogCkBAIC0yMzU0LDE3ICsyMzUzLDE3IEBACiAJCWhhbmRsZV9yZXF1ZXN0KHByaXYsIG1sbWUsIG9pZCk7CiAJCXNlbmRfZm9ybWF0dGVkX2V2ZW50KHByaXYsICJBdXRoZW50aWNhdGUgcmVxdWVzdCAoZXgpIiwgbWxtZSwgMSk7CiAKLQkJaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9NQVNURVIgCisJCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSCiAJCQkJJiYgbWxtZWV4LT5zdGF0ZSAhPSBET1QxMV9TVEFURV9BVVRISU5HKQogCQkJYnJlYWs7CiAKIAkJY29uZmlybSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmpfbWxtZWV4KSArIDYsIEdGUF9BVE9NSUMpOwogCi0JCWlmICghY29uZmlybSkgCisJCWlmICghY29uZmlybSkKIAkJCWJyZWFrOwogCiAJCW1lbWNweSgmY29uZmlybS0+YWRkcmVzcywgbWxtZWV4LT5hZGRyZXNzLCBFVEhfQUxFTik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJBdXRoZW50aWNhdGUgZnJvbTogYWRkcmVzczpcdCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCAKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkF1dGhlbnRpY2F0ZSBmcm9tOiBhZGRyZXNzOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCiAJCQkJbWxtZWV4LT5hZGRyZXNzWzBdLAogCQkJCW1sbWVleC0+YWRkcmVzc1sxXSwKIAkJCQltbG1lZXgtPmFkZHJlc3NbMl0sCkBAIC0yMzk4LDEwICsyMzk3LDEwIEBACiAJCWhhbmRsZV9yZXF1ZXN0KHByaXYsIG1sbWUsIG9pZCk7CiAJCXNlbmRfZm9ybWF0dGVkX2V2ZW50KHByaXYsICJBc3NvY2lhdGUgcmVxdWVzdCAoZXgpIiwgbWxtZSwgMSk7CiAKLQkJaWYgKHByaXYtPml3X21vZGUgIT0gSVdfTU9ERV9NQVNURVIgCisJCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSCiAJCQkJJiYgbWxtZWV4LT5zdGF0ZSAhPSBET1QxMV9TVEFURV9BU1NPQ0lORykKIAkJCWJyZWFrOwotCQkKKwogCQljb25maXJtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9ial9tbG1lZXgpLCBHRlBfQVRPTUlDKTsKIAogCQlpZiAoIWNvbmZpcm0pCkBAIC0yNDE3LDcgKzI0MTYsNyBAQAogCiAJCWlmICghd3BhX2llX2xlbikgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIk5vIFdQQSBJRSBmb3VuZCBmcm9tICIKLQkJCQkJImFkZHJlc3M6XHQlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgCisJCQkJCSJhZGRyZXNzOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCiAJCQkJbWxtZWV4LT5hZGRyZXNzWzBdLAogCQkJCW1sbWVleC0+YWRkcmVzc1sxXSwKIAkJCQltbG1lZXgtPmFkZHJlc3NbMl0sCkBAIC0yNDM1LDE0ICsyNDM0LDE0IEBACiAJCW1ndF9zZXRfdmFybGVuKHByaXYsIG9pZCwgY29uZmlybSwgd3BhX2llX2xlbik7CiAKIAkJa2ZyZWUoY29uZmlybSk7Ci0JCQorCiAJCWJyZWFrOwogCiAJY2FzZSBET1QxMV9PSURfUkVBU1NPQ0lBVEVFWDoKIAkJaGFuZGxlX3JlcXVlc3QocHJpdiwgbWxtZSwgb2lkKTsKIAkJc2VuZF9mb3JtYXR0ZWRfZXZlbnQocHJpdiwgIlJlYXNzb2NpYXRlIHJlcXVlc3QgKGV4KSIsIG1sbWUsIDEpOwogCi0JCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSIAorCQlpZiAocHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX01BU1RFUgogCQkJCSYmIG1sbWVleC0+c3RhdGUgIT0gRE9UMTFfU1RBVEVfQVNTT0NJTkcpCiAJCQlicmVhazsKIApAQCAtMjQ2MSw3ICsyNDYwLDcgQEAKIAogCQlpZiAoIXdwYV9pZV9sZW4pIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJObyBXUEEgSUUgZm91bmQgZnJvbSAiCi0JCQkJCSJhZGRyZXNzOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIAorCQkJCQkiYWRkcmVzczpcdCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAogCQkJCW1sbWVleC0+YWRkcmVzc1swXSwKIAkJCQltbG1lZXgtPmFkZHJlc3NbMV0sCiAJCQkJbWxtZWV4LT5hZGRyZXNzWzJdLApAQCAtMjQ3MywxMyArMjQ3MiwxMyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQljb25maXJtLT5zaXplID0gd3BhX2llX2xlbjsgCisJCWNvbmZpcm0tPnNpemUgPSB3cGFfaWVfbGVuOwogCQltZW1jcHkoJmNvbmZpcm0tPmRhdGEsIHdwYV9pZSwgd3BhX2llX2xlbik7CiAKIAkJbWd0X3NldF92YXJsZW4ocHJpdiwgb2lkLCBjb25maXJtLCB3cGFfaWVfbGVuKTsKIAogCQlrZnJlZShjb25maXJtKTsKLQkJCisKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMjU0NSwxMCArMjU0NCwxMCBAQAogI2RlZmluZSBQUklTTTJfSE9TVEFQRF9HRU5FUklDX0VMRU1FTlRfSERSX0xFTiBcCiAoKGludCkgKCYoKHN0cnVjdCBwcmlzbTJfaG9zdGFwZF9wYXJhbSAqKSAwKS0+dS5nZW5lcmljX2VsZW0uZGF0YSkpCiAKLS8qIE1heGltdW0gbGVuZ3RoIGZvciBhbGdvcml0aG0gbmFtZXMgKC0xIGZvciBudWwgdGVybWluYXRpb24pIAorLyogTWF4aW11bSBsZW5ndGggZm9yIGFsZ29yaXRobSBuYW1lcyAoLTEgZm9yIG51bCB0ZXJtaW5hdGlvbikKICAqIHVzZWQgaW4gaW9jdGwoKSAqLwogI2RlZmluZSBIT1NUQVBfQ1JZUFRfQUxHX05BTUVfTEVOIDE2Ci0JCisKIHN0cnVjdCBwcmlzbTJfaG9zdGFwZF9wYXJhbSB7CiAJdTMyIGNtZDsKIAl1OCBzdGFfYWRkcltFVEhfQUxFTl07CkBAIC0yNjIxLDcgKzI2MjAsNyBAQAogCQkJCQkgICAgJmtleSk7CiAJCX0KIAkJLyoKLQkJICogSWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uIHNob3VsZCBiZSBlbmFibGVkIAorCQkgKiBJZiBhIHZhbGlkIGtleSBpcyBzZXQsIGVuY3J5cHRpb24gc2hvdWxkIGJlIGVuYWJsZWQKIAkJICogKHVzZXIgbWF5IHR1cm4gaXQgb2ZmIGxhdGVyKS4KIAkJICogVGhpcyBpcyBhbHNvIGhvdyAiaXdjb25maWcgZXRoWCBrZXkgb24iIHdvcmtzCiAJCSAqLwpAQCAtMjY0Myw3ICsyNjQyLDcgQEAKIAl9CiAJLyogbm93IHJlYWQgdGhlIGZsYWdzICovCiAJaWYgKHBhcmFtLT51LmNyeXB0LmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0JCS8qIEVuY29kaW5nIGRpc2FibGVkLCAKKwkJLyogRW5jb2RpbmcgZGlzYWJsZWQsCiAJCSAqIGF1dGhlbiA9IERPVDExX0FVVEhfT1M7CiAJCSAqIGludm9rZSA9IDA7CiAJCSAqIGV4dW5lbmNyeXB0ID0gMDsgKi8KQEAgLTI3MTAsNyArMjcwOSw3IEBACiAKIAkgICAgICAgcmV0ID0gbWd0X3NldF92YXJsZW4ocHJpdiwgRE9UMTFfT0lEX0FUVEFDSE1FTlQsIGF0dGFjaCwgbGVuKTsKIAotCSAgICAgICBpZiAocmV0ID09IDApIAorCSAgICAgICBpZiAocmV0ID09IDApCiAJCSAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdQQSBJRSBBdHRhY2htZW50IHdhcyBzZXRcbiIsCiAJCQkJICAgICAgIG5kZXYtPm5hbWUpOwogICAgICAgIH0KQEAgLTI4NzAsNyArMjg2OSw3IEBACiAJCQltbG1lID0gRE9UMTFfTUxNRV9BVVRPOwogCQkJcHJpbnRrKCIlczogRGlzYWJsaW5nIFdQQVxuIiwgbmRldi0+bmFtZSk7CiAJCQlicmVhazsKLQkJY2FzZSAyOiAKKwkJY2FzZSAyOgogCQljYXNlIDE6IC8qIFdQQSAqLwogCQkJcHJpbnRrKCIlczogRW5hYmxpbmcgV1BBXG4iLCBuZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmgKaW5kZXggNjVmMzNhYy4uZTgxODNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5oCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICogICAgICAgICAgICAoQykgMjAwMyBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgogICogICAgICAgICAgICAoQykgMjAwMyBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHJ1c2x1Zy5ydXRnZXJzLmVkdT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX29pZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfb2lkLmgKaW5kZXggNDE5ZWRmNy4uYjc1MzRjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfb2lkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfb2lkLmgKQEAgLTEsNiArMSw0IEBACiAvKgotICoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgSGVyYmVydCBWYWxlcmlvIFJpZWRlbCA8aHZyQGdudS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEx1aXMgUi4gUm9kcmlndWV6IDxtY2dyb2ZAcnVzbHVnLnJ1dGdlcnMuZWR1PgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgpAQCAtMjMsNyArMjEsNyBAQAogI2lmICFkZWZpbmVkKF9JU0xfT0lEX0gpCiAjZGVmaW5lIF9JU0xfT0lEX0gKIAotLyogCisvKgogICogTUlCIHJlbGF0ZWQgY29uc3RhbnQgYW5kIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBmb3IgY29tbXVuaWNhdGluZwogICogd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlCiAgKi8KQEAgLTk5LDIxICs5NywyMSBAQAogCWNoYXIgZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLS8qIAorLyoKICAqIGluIGNhc2UgZXZlcnl0aGluZydzIG9rLCB0aGUgaW5saW5lZCBmdW5jdGlvbiBiZWxvdyB3aWxsIGJlCiAgKiBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIuLi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBfX2J1Z19vbl93cm9uZ19zdHJ1Y3Rfc2l6ZXModm9pZCkKIHsKLQlCVUdfT04oc2l6ZW9mIChzdHJ1Y3Qgb2JqX3NzaWQpICE9IDM0KTsKLQlCVUdfT04oc2l6ZW9mIChzdHJ1Y3Qgb2JqX2tleSkgIT0gMzQpOwotCUJVR19PTihzaXplb2YgKHN0cnVjdCBvYmpfbWxtZSkgIT0gMTIpOwotCUJVR19PTihzaXplb2YgKHN0cnVjdCBvYmpfbWxtZWV4KSAhPSAxNCk7Ci0JQlVHX09OKHNpemVvZiAoc3RydWN0IG9ial9idWZmZXIpICE9IDgpOwotCUJVR19PTihzaXplb2YgKHN0cnVjdCBvYmpfYnNzKSAhPSA2MCk7Ci0JQlVHX09OKHNpemVvZiAoc3RydWN0IG9ial9ic3NsaXN0KSAhPSA0KTsKLQlCVUdfT04oc2l6ZW9mIChzdHJ1Y3Qgb2JqX2ZyZXF1ZW5jaWVzKSAhPSAyKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mIChzdHJ1Y3Qgb2JqX3NzaWQpICE9IDM0KTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mIChzdHJ1Y3Qgb2JqX2tleSkgIT0gMzQpOworCUJVSUxEX0JVR19PTihzaXplb2YgKHN0cnVjdCBvYmpfbWxtZSkgIT0gMTIpOworCUJVSUxEX0JVR19PTihzaXplb2YgKHN0cnVjdCBvYmpfbWxtZWV4KSAhPSAxNCk7CisJQlVJTERfQlVHX09OKHNpemVvZiAoc3RydWN0IG9ial9idWZmZXIpICE9IDgpOworCUJVSUxEX0JVR19PTihzaXplb2YgKHN0cnVjdCBvYmpfYnNzKSAhPSA2MCk7CisJQlVJTERfQlVHX09OKHNpemVvZiAoc3RydWN0IG9ial9ic3NsaXN0KSAhPSA0KTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mIChzdHJ1Y3Qgb2JqX2ZyZXF1ZW5jaWVzKSAhPSAyKTsKIH0KIAogZW51bSBkb3QxMV9zdGF0ZV90IHsKQEAgLTE1NCwxMyArMTUyLDEzIEBACiAKIC8qIFByaXNtICJOaXRybyIgLyBGcmFtZWJ1cnN0IC8gIlBhY2tldCBGcmFtZSBHcm91cGluZyIKICAqIFZhbHVlIGlzIGluIG1pY3Jvc2Vjb25kcy4gUmVwcmVzZW50cyB0aGUgIyBtaWNyb3NlY29uZHMKLSAqIHRoZSBmaXJtd2FyZSB3aWxsIHRha2UgdG8gZ3JvdXAgZnJhbWVzIGJlZm9yZSBzZW5kaW5nIG91dCB0aGVuIG91dCAKKyAqIHRoZSBmaXJtd2FyZSB3aWxsIHRha2UgdG8gZ3JvdXAgZnJhbWVzIGJlZm9yZSBzZW5kaW5nIG91dCB0aGVuIG91dAogICogdG9nZXRoZXIgd2l0aCBhIENTTUEgY29udGVudGlvbi4gV2l0aG91dCB0aGlzIGFsbCBmcmFtZXMgYXJlCi0gKiBzZW50IHdpdGggYSBDU01BIGNvbnRlbnRpb24uIAotICogQmlibGlvZ3JhcGh5OiAKKyAqIHNlbnQgd2l0aCBhIENTTUEgY29udGVudGlvbi4KKyAqIEJpYmxpb2dyYXBoeToKICAqIGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvUGFwZXJzL1BhY2tldC5GcmFtZS5Hcm91cGluZy5odG1sCiAgKi8KLWVudW0gZG90MTFfbWF4ZnJhbWVidXJzdF90IHsgCitlbnVtIGRvdDExX21heGZyYW1lYnVyc3RfdCB7CiAJLyogVmFsdWVzIGZvciBET1QxMV9PSURfTUFYRlJBTUVCVVJTVCAqLwogCURPVDExX01BWEZSQU1FQlVSU1RfT0ZGID0gMCwgLyogQ2FyZCBmaXJtd2FyZSBkZWZhdWx0ICovCiAJRE9UMTFfTUFYRlJBTUVCVVJTVF9NSVhFRF9TQUZFID0gNjUwLCAvKiA4MDIuMTEgYSxiLGcgc2FmZSAqLwpAQCAtMTc2LDkgKzE3NCw5IEBACiAvKiBTdXBwb3J0IGZvciA4MDIuMTEgbG9uZyBhbmQgc2hvcnQgZnJhbWUgcHJlYW1ibGVzLgogICogTG9uZwkgcHJlYW1ibGUgdXNlcyAxMjgtYml0IHN5bmMgZmllbGQsIDgtYml0ICBDUkMKICAqIFNob3J0IHByZWFtYmxlIHVzZXMgNTYtYml0ICBzeW5jIGZpZWxkLCAxNi1iaXQgQ1JDCi0gKiAKKyAqCiAgKiA4MDIuMTFhIC0tIG5vdCBzdXJlLCBib3RoIG9wdGlvbmFsbHkgPwotICogODAyLjExYiBzdXBwb3J0cyBsb25nIGFuZCBvcHRpb25hbGx5IHNob3J0IAorICogODAyLjExYiBzdXBwb3J0cyBsb25nIGFuZCBvcHRpb25hbGx5IHNob3J0CiAgKiA4MDIuMTFnIHN1cHBvcnRzIGJvdGggKi8KIGVudW0gZG90MTFfcHJlYW1ibGVzZXR0aW5nc190IHsKIAlET1QxMV9QUkVBTUJMRVNFVFRJTkdfTE9ORyA9IDAsCkBAIC0xOTQsNyArMTkyLDcgQEAKICAqIExvbmcgdXNlcyA4MDIuMTFhIHNsb3QgdGltaW5nICAoOSB1c2VjID8pCiAgKiBTaG9ydCB1c2VzIDgwMi4xMWIgc2xvdCB0aW1pbmcgKDIwIHVzZSA/KSAqLwogZW51bSBkb3QxMV9zbG90c2V0dGluZ3NfdCB7Ci0JRE9UMTFfU0xPVFNFVFRJTkdTX0xPTkcgPSAwLCAKKwlET1QxMV9TTE9UU0VUVElOR1NfTE9ORyA9IDAsCiAJCS8qIEFsbG93cyAqb25seSogbG9uZyA4MDIuMTFiIHNsb3QgdGltaW5nICovCiAJRE9UMTFfU0xPVFNFVFRJTkdTX1NIT1JUID0gMSwKIAkJLyogQWxsb3dzICpvbmx5KiBsb25nIDgwMi4xMWEgc2xvdCB0aW1pbmcgKi8KQEAgLTIwMyw3ICsyMDEsNyBAQAogfTsKIAogLyogQWxsIHlvdSBuZWVkIHRvIGtub3csIEVSUCBpcyAiRXh0ZW5kZWQgUmF0ZSBQSFkiLgotICogQW4gRXh0ZW5kZWQgUmF0ZSBQSFkgKEVSUCkgU1RBIG9yIEFQIHNoYWxsIHN1cHBvcnQgdGhyZWUgZGlmZmVyZW50IAorICogQW4gRXh0ZW5kZWQgUmF0ZSBQSFkgKEVSUCkgU1RBIG9yIEFQIHNoYWxsIHN1cHBvcnQgdGhyZWUgZGlmZmVyZW50CiAgKiBwcmVhbWJsZSBhbmQgaGVhZGVyIGZvcm1hdHM6CiAgKiBMb25nICBwcmVhbWJsZSAocmVmZXIgdG8gYWJvdmUpCiAgKiBTaG9ydCBwcmVhbWJsZSAocmVmZXIgdG8gYWJvdmUpCkBAIC0yMjEsNyArMjE5LDcgQEAKIC8qIChFUlAgaXMgIkV4dGVuZGVkIFJhdGUgUEhZIikgV2F5IHRvIHJlYWQgTk9ORVJQIGlzIE5PTi1FUlAtKgogICogVGhlIGtleSBoZXJlIGlzIERPVDExIE5PTiBFUlAgTkVWRVIgcHJvdGVjdHMgYWdhaW5zdAogICogTk9OIEVSUCBTVEEncy4gWW91ICpkb24ndCogd2FudCB0aGlzIHVubGVzcwotICogeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBJdCBtZWFucyB5b3Ugd2lsbCBvbmx5IAorICogeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBJdCBtZWFucyB5b3Ugd2lsbCBvbmx5CiAgKiBnZXQgRXh0ZW5kZWQgUmF0ZSBjYXBhYmlsaXRpZXMgKi8KIGVudW0gZG90MTFfbm9uZXJwcHJvdGVjdGlvbl90IHsKIAlET1QxMV9OT05FUlBfTkVWRVIgPSAwLApAQCAtMjI5LDEzICsyMjcsMTMgQEAKIAlET1QxMV9OT05FUlBfRFlOQU1JQyA9IDIKIH07CiAKLS8qIFByZXNldCBPSUQgY29uZmlndXJhdGlvbiBmb3IgODAyLjExIG1vZGVzIAotICogTm90ZTogRE9UMTFfT0lEX0NXW01JTnxNQVhdIGhvbGQgdGhlIHZhbHVlcyBvZiB0aGUgCisvKiBQcmVzZXQgT0lEIGNvbmZpZ3VyYXRpb24gZm9yIDgwMi4xMSBtb2RlcworICogTm90ZTogRE9UMTFfT0lEX0NXW01JTnxNQVhdIGhvbGQgdGhlIHZhbHVlcyBvZiB0aGUKICAqIERDUyBNSU58TUFYIGJhY2tvZmYgdXNlZCAqLwogZW51bSBkb3QxMV9wcm9maWxlX3QgeyAvKiBBbmQgc2V0L2FsbG93ZWQgdmFsdWVzICovCiAJLyogQWxsb3dlZCB2YWx1ZXMgZm9yIERPVDExX09JRF9QUk9GSUxFUyAqLwogCURPVDExX1BST0ZJTEVfQl9PTkxZID0gMCwKLQkJLyogRE9UMTFfT0lEX1JBVEVTOiAxLCAyLCA1LjUsIDExTWJwcyAKKwkJLyogRE9UMTFfT0lEX1JBVEVTOiAxLCAyLCA1LjUsIDExTWJwcwogCQkgKiBET1QxMV9PSURfUFJFQU1CTEVTRVRUSU5HUzogRE9UMTFfUFJFQU1CTEVTRVRUSU5HX0RZTkFNSUMKIAkJICogRE9UMTFfT0lEX0NXTUlOOiAzMQogCQkgKiBET1QxMV9PSURfTk9ORVBST1RFQ1RJT046IERPVDExX05PRVJQX0RZTkFNSUMKQEAgLTI3NSw3ICsyNzMsNyBAQAogCU9JRF9JTkxfQ09ORk9STUFOQ0VfTk9ORSA9IDAsCS8qIFBlcmZvcm0gYWN0aXZlIHNjYW5uaW5nICovCiAJT0lEX0lOTF9DT05GT1JNQU5DRV9TVFJJQ1QgPSAxLAkvKiBTdHJpY3RseSBhZGhlcmUgdG8gODAyLjExZCAqLwogCU9JRF9JTkxfQ09ORk9STUFOQ0VfRkxFWElCTEUgPSAyLAkvKiBVc2UgcGFzc2VkIDgwMi4xMWQgaW5mbyB0bwotCQkqIGRldGVybWluZSBjaGFubmVsIEFORC9PUiBqdXN0IG1ha2UgYXNzdW1wdGlvbiB0aGF0IGFjdGl2ZSAKKwkJKiBkZXRlcm1pbmUgY2hhbm5lbCBBTkQvT1IganVzdCBtYWtlIGFzc3VtcHRpb24gdGhhdCBhY3RpdmUKIAkJKiBjaGFubmVscyBhcmUgdmFsaWQgIGNoYW5uZWxzICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCmluZGV4IGVjMWMwMGYuLjFlMDYwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwMyBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsIDxodnJAZ251Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgTHVpcyBSLiBSb2RyaWd1ZXogPG1jZ3JvZkBydXNsdWcucnV0Z2Vycy5lZHU+CkBAIC00MTMsNyArNDEyLDcgQEAKIAlpc2xwY2lfc2V0X3N0YXRlKHByaXYsIFBSVl9TVEFURV9QUkVCT09UKTsKIAogCS8qIGRpc2FibGUgYWxsIGRldmljZSBpbnRlcnJ1cHRzIGluIGNhc2UgdGhleSB3ZXJlbid0ICovCi0JaXNsMzh4eF9kaXNhYmxlX2ludGVycnVwdHMocHJpdi0+ZGV2aWNlX2Jhc2UpOyAgCisJaXNsMzh4eF9kaXNhYmxlX2ludGVycnVwdHMocHJpdi0+ZGV2aWNlX2Jhc2UpOwogCiAJLyogRm9yIHNhZmV0eSByZWFzb25zLCB3ZSBtYXkgd2FudCB0byBlbnN1cmUgdGhhdCBubyBETUEgdHJhbnNmZXIgaXMKIAkgKiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgYnkgZW1wdHlpbmcgdGhlIFRYIGFuZCBSWCBxdWV1ZXMuICovCkBAIC00ODAsNyArNDc5LDcgQEAKIAogCURFRklORV9XQUlUKHdhaXQpOwogCXByZXBhcmVfdG9fd2FpdCgmcHJpdi0+cmVzZXRfZG9uZSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkKKwogCS8qIG5vdyB0aGUgbGFzdCBzdGVwIGlzIHRvIHJlc2V0IHRoZSBpbnRlcmZhY2UgKi8KIAlpc2wzOHh4X2ludGVyZmFjZV9yZXNldChwcml2LT5kZXZpY2VfYmFzZSwgcHJpdi0+ZGV2aWNlX2hvc3RfYWRkcmVzcyk7CiAJaXNscGNpX3NldF9zdGF0ZShwcml2LCBQUlZfU1RBVEVfUFJFSU5JVCk7CkBAIC00ODgsNyArNDg3LDcgQEAKICAgICAgICAgZm9yKGNvdW50ID0gMDsgY291bnQgPCAyICYmIHJlc3VsdDsgY291bnQrKykgewogCQkvKiBUaGUgc29mdHdhcmUgcmVzZXQgYWNrbm93bGVkZ2UgbmVlZHMgYWJvdXQgMjIwIG1zZWMgaGVyZS4KIAkJICogQmUgY29uc2VydmF0aXZlIGFuZCB3YWl0IGZvciB1cCB0byBvbmUgc2Vjb25kLiAqLwotCQorCiAJCXJlbWFpbmluZyA9IHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaKTsKIAogCQlpZihyZW1haW5pbmcgPiAwKSB7CkBAIC00OTYsNyArNDk1LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogSWYgd2UncmUgaGVyZSBpdCdzIGJlY2F1c2Ugb3VyIElSUSBoYXNuJ3QgeWV0IGdvbmUgdGhyb3VnaC4gCisJCS8qIElmIHdlJ3JlIGhlcmUgaXQncyBiZWNhdXNlIG91ciBJUlEgaGFzbid0IHlldCBnb25lIHRocm91Z2guCiAJCSAqIFJldHJ5IGEgYml0IG1vcmUuLi4KIAkJICovCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vICdyZXNldCBjb21wbGV0ZScgSVJRIHNlZW4gLSByZXRyeWluZ1xuIiwKQEAgLTUxNCw3ICs1MTMsNyBAQAogCiAJLyogTm93IHRoYXQgdGhlIGRldmljZSBpcyAxMDAlIHVwLCBsZXQncyBhbGxvdwogCSAqIGZvciB0aGUgb3RoZXIgaW50ZXJydXB0cyAtLQotCSAqIE5PVEU6IHRoaXMgaXMgbm90ICp5ZXQqIHRydWUgc2luY2Ugd2UndmUgb25seSBhbGxvd2VkIHRoZSAKKwkgKiBOT1RFOiB0aGlzIGlzIG5vdCAqeWV0KiB0cnVlIHNpbmNlIHdlJ3ZlIG9ubHkgYWxsb3dlZCB0aGUKIAkgKiBJTklUIGludGVycnVwdCBvbiB0aGUgSVJRIGxpbmUuIFdlIGNhbiBwZXJoYXBzIHBvbGwKIAkgKiB0aGUgSVJRIGxpbmUgdW50aWwgd2Uga25vdyBmb3Igc3VyZSB0aGUgcmVzZXQgd2VudCB0aHJvdWdoICovCiAJaXNsMzh4eF9lbmFibGVfY29tbW9uX2ludGVycnVwdHMocHJpdi0+ZGV2aWNlX2Jhc2UpOwpAQCAtNzE2LDcgKzcxNSw3IEBACiAKIAlwcmlzbTU0X2FjbF9pbml0KCZwcml2LT5hY2wpOwogCXByaXNtNTRfd3BhX2Jzc19pZV9pbml0KHByaXYpOwotCWlmIChtZ3RfaW5pdChwcml2KSkgCisJaWYgKG1ndF9pbml0KHByaXYpKQogCQlnb3RvIG91dF9mcmVlOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCmluZGV4IDJmN2U1MjUuLmE5YWExNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oCkBAIC0xLDYgKzEsNSBAQAogLyoKLSAqICAKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLiAKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwMyBIZXJiZXJ0IFZhbGVyaW8gUmllZGVsIDxodnJAZ251Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDMgTHVpcyBSLiBSb2RyaWd1ZXogPG1jZ3JvZkBydXNsdWcucnV0Z2Vycy5lZHU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CkBAIC03MiwxMiArNzEsMTIgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKIAlzaXplX3Qgd3BhX2llX2xlbjsKLQkKKwogfTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXNwaW5sb2NrX3Qgc2xvY2s7CS8qIGdlbmVyaWMgc3BpbmxvY2s7ICovCi0JCisKIAl1MzIgcHJpdl9vaWQ7CiAKIAkvKiBvdXIgbWliIGNhY2hlICovCkBAIC04NSw3ICs4NCw3IEBACiAgICAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgbWliX3NlbTsKIAl2b2lkICoqbWliOwogCWNoYXIgbmlja25hbWVbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci0JCisKIAkvKiBUYWtlIGNhcmUgb2YgdGhlIHdpcmVsZXNzIHN0YXRzICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHN0YXRzX3dvcms7CiAJc3RydWN0IHNlbWFwaG9yZSBzdGF0c19zZW07CkBAIC0xMjAsNyArMTE5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAogCS8qIGRldmljZSBxdWV1ZSBpbnRlcmZhY2UgbWVtYmVycyAqLwotCXN0cnVjdCBpc2wzOHh4X2NiICpjb250cm9sX2Jsb2NrOwkvKiBkZXZpY2UgY29udHJvbCBibG9jayAKKwlzdHJ1Y3QgaXNsMzh4eF9jYiAqY29udHJvbF9ibG9jazsJLyogZGV2aWNlIGNvbnRyb2wgYmxvY2sKIAkJCQkJCQkgICAoPT0gZHJpdmVyX21lbV9hZGRyZXNzISkgKi8KIAogCS8qIEVhY2ggcXVldWUgaGFzIHRocmVlIGluZGV4ZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCmluZGV4IGE4MjYxZDguLjY3NmQ4MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00OCw3ICs0Nyw3IEBACiAJCS8qIHJlYWQgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBmcmFnbWVudCB0byBiZSBmcmVlZCAqLwogCQlpbmRleCA9IHByaXYtPmZyZWVfZGF0YV90eCAlIElTTDM4WFhfQ0JfVFhfUVNJWkU7CiAKLQkJLyogY2hlY2sgZm9yIGhvbGVzIGluIHRoZSBhcnJheXMgY2F1c2VkIGJ5IG11bHRpIGZyYWdtZW50IGZyYW1lcyAKKwkJLyogY2hlY2sgZm9yIGhvbGVzIGluIHRoZSBhcnJheXMgY2F1c2VkIGJ5IG11bHRpIGZyYWdtZW50IGZyYW1lcwogCQkgKiBzZWFyY2hpbmcgZm9yIHRoZSBsYXN0IGZyYWdtZW50IG9mIGEgZnJhbWUgKi8KIAkJaWYgKHByaXYtPnBjaV9tYXBfdHhfYWRkcmVzc1tpbmRleF0gIT0gKGRtYV9hZGRyX3QpIE5VTEwpIHsKIAkJCS8qIGVudHJ5IGlzIHRoZSBsYXN0IGZyYWdtZW50IG9mIGEgZnJhbWUKQEAgLTI1Myw2ICsyNTIsNyBAQAogCSAqIGhlYWRlciBhbmQgd2l0aG91dCB0aGUgRkNTLiBCdXQgdGhlcmUgYSBpcyBhIGJpdCB0aGF0CiAJICogaW5kaWNhdGVzIGlmIHRoZSBwYWNrZXQgaXMgY29ycnVwdGVkIDotKSAqLwogCXN0cnVjdCByZm1vbl9oZWFkZXIgKmhkciA9IChzdHJ1Y3QgcmZtb25faGVhZGVyICopICgqc2tiKS0+ZGF0YTsKKwogCWlmIChoZHItPmZsYWdzICYgMHgwMSkKIAkJLyogVGhpcyBvbmUgaXMgYmFkLiBEcm9wIGl0ICEgKi8KIAkJcmV0dXJuIC0xOwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCSAgICAoc3RydWN0IGF2c184MDIxMV8xX2hlYWRlciAqKSBza2JfcHVzaCgqc2tiLAogCQkJCQkJCSAgIHNpemVvZiAoc3RydWN0CiAJCQkJCQkJCSAgIGF2c184MDIxMV8xX2hlYWRlcikpOwotCQkKKwogCQlhdnMtPnZlcnNpb24gPSBjcHVfdG9fYmUzMihQODAyMTFDQVBUVVJFX1ZFUlNJT04pOwogCQlhdnMtPmxlbmd0aCA9IGNwdV90b19iZTMyKHNpemVvZiAoc3RydWN0IGF2c184MDIxMV8xX2hlYWRlcikpOwogCQlhdnMtPm1hY3RpbWUgPSBjcHVfdG9fYmU2NChsZTY0X3RvX2NwdShjbG9jaykpOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJCQlzdHJ1Y3QgcnhfYW5uZXhfaGVhZGVyICphbm5leCA9CiAJCQkgICAgKHN0cnVjdCByeF9hbm5leF9oZWFkZXIgKikgc2tiLT5kYXRhOwogCQkJd3N0YXRzLmxldmVsID0gYW5uZXgtPnJmbW9uLnJzc2k7Ci0JCQkvKiBUaGUgbm9pc2UgdmFsdWUgY2FuIGJlIGEgYml0IG91dGRhdGVkIGlmIG5vYm9keSdzIAorCQkJLyogVGhlIG5vaXNlIHZhbHVlIGNhbiBiZSBhIGJpdCBvdXRkYXRlZCBpZiBub2JvZHkncwogCQkJICogcmVhZGluZyB3aXJlbGVzcyBzdGF0cy4uLiAqLwogCQkJd3N0YXRzLm5vaXNlID0gcHJpdi0+bG9jYWxfaXdzdGF0aXN0aWNzLnF1YWwubm9pc2U7CiAJCQl3c3RhdHMucXVhbCA9IHdzdGF0cy5sZXZlbCAtIHdzdGF0cy5ub2lzZTsKQEAgLTQ2NCwxMCArNDY0LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIHVwZGF0ZSB0aGUgZnJhZ21lbnQgYWRkcmVzcyAqLwotCQljb250cm9sX2Jsb2NrLT5yeF9kYXRhX2xvd1tpbmRleF0uYWRkcmVzcyA9IGNwdV90b19sZTMyKCh1MzIpCi0JCQkJCQkJCQlwcml2LT4KLQkJCQkJCQkJCXBjaV9tYXBfcnhfYWRkcmVzcwotCQkJCQkJCQkJW2luZGV4XSk7CisJCWNvbnRyb2xfYmxvY2stPnJ4X2RhdGFfbG93W2luZGV4XS5hZGRyZXNzID0KKwkJCWNwdV90b19sZTMyKCh1MzIpcHJpdi0+cGNpX21hcF9yeF9hZGRyZXNzW2luZGV4XSk7CiAJCXdtYigpOwogCiAJCS8qIGluY3JlbWVudCB0aGUgZHJpdmVyIHJlYWQgcG9pbnRlciAqLwpAQCAtNDg0LDEwICs0ODIsMTIgQEAKIHZvaWQKIGlzbHBjaV9kb19yZXNldF9hbmRfd2FrZSh2b2lkICpkYXRhKQogewotCWlzbHBjaV9wcml2YXRlICpwcml2ID0gKGlzbHBjaV9wcml2YXRlICopIGRhdGE7CisJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBkYXRhOworCiAJaXNscGNpX3Jlc2V0KHByaXYsIDEpOwotCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bmRldik7CiAJcHJpdi0+cmVzZXRfdGFza19wZW5kaW5nID0gMDsKKwlzbXBfd21iKCk7CisJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5uZGV2KTsKIH0KIAogdm9pZApAQCAtNDk5LDEyICs0OTksMTQgQEAKIAkvKiBpbmNyZW1lbnQgdGhlIHRyYW5zbWl0IGVycm9yIGNvdW50ZXIgKi8KIAlzdGF0aXN0aWNzLT50eF9lcnJvcnMrKzsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0eF90aW1lb3V0IiwgbmRldi0+bmFtZSk7CiAJaWYgKCFwcml2LT5yZXNldF90YXNrX3BlbmRpbmcpIHsKLQkJcHJpdi0+cmVzZXRfdGFza19wZW5kaW5nID0gMTsKLQkJcHJpbnRrKCIsIHNjaGVkdWxpbmcgYSByZXNldCIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiJXM6IHR4X3RpbWVvdXQsIHNjaGVkdWxpbmcgcmVzZXQiLCBuZGV2LT5uYW1lKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKwkJcHJpdi0+cmVzZXRfdGFza19wZW5kaW5nID0gMTsKIAkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfdGFzayk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIiVzOiB0eF90aW1lb3V0LCB3YWl0aW5nIGZvciByZXNldCIsIG5kZXYtPm5hbWUpOwogCX0KLQlwcmludGsoIlxuIik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCmluZGV4IGJjOWQ3YTYuLjI2Nzg5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5oCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCmluZGV4IGY2OTJkY2MuLjU4MjU3YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKQEAgLTEsNSArMSw0IEBACiAvKgotICogIAogICogIENvcHlyaWdodCAoQykgMjAwMiBJbnRlcnNpbCBBbWVyaWNhcyBJbmMuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEhlcmJlcnQgVmFsZXJpbyBSaWVkZWwgPGh2ckBnbnUub3JnPgogICoKQEAgLTQwLDggKzM5LDggQEAKIG1vZHVsZV9wYXJhbShpbml0X3BjaXRtLCBpbnQsIDApOwogCiAvKiBJbiB0aGlzIG9yZGVyOiB2ZW5kb3IsIGRldmljZSwgc3VidmVuZG9yLCBzdWJkZXZpY2UsIGNsYXNzLCBjbGFzc19tYXNrLAotICogZHJpdmVyX2RhdGEgCi0gKiBJZiB5b3UgaGF2ZSBhbiB1cGRhdGUgZm9yIHRoaXMgcGxlYXNlIGNvbnRhY3QgcHJpc201NC1kZXZlbEBwcmlzbTU0Lm9yZyAKKyAqIGRyaXZlcl9kYXRhCisgKiBJZiB5b3UgaGF2ZSBhbiB1cGRhdGUgZm9yIHRoaXMgcGxlYXNlIGNvbnRhY3QgcHJpc201NC1kZXZlbEBwcmlzbTU0Lm9yZwogICogVGhlIGxhdGVzdCBsaXN0IGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vcHJpc201NC5vcmcvc3VwcG9ydGVkX2NhcmRzLnBocCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHByaXNtNTRfaWRfdGJsW10gPSB7CiAJLyogSW50ZXJzaWwgUFJJU00gRHVldHRlL1ByaXNtIEdUIFdpcmVsZXNzIExBTiBhZGFwdGVyICovCkBAIC0xMzIsMTUgKzEzMSwxNSBAQAogCiAJLyogMHg0MCBpcyB0aGUgcHJvZ3JhbW1hYmxlIHRpbWVyIHRvIGNvbmZpZ3VyZSB0aGUgcmVzcG9uc2UgdGltZW91dCAoVFJEWV9USU1FT1VUKQogCSAqIDB4NDEgaXMgdGhlIHByb2dyYW1tYWJsZSB0aW1lciB0byBjb25maWd1cmUgdGhlIHJldHJ5IHRpbWVvdXQgKFJFVFJZX1RJTUVPVVQpCi0JICogCVRoZSBSRVRSWV9USU1FT1VUIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgcmV0cmllcyB0aGF0IHRoZSBjb3JlLCBhcyBhCi0JICogCU1hc3Rlciwgd2lsbCBwZXJmb3JtIGJlZm9yZSBhYmFuZG9uaW5nIGEgY3ljbGUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgotCSAqIAlSRVRSWV9USU1FT1VUIGlzIDB4ODAsIHdoaWNoIGZhciBleGNlZWRzIHRoZSBQQ0kgMi4xIHJlcXVpcmVtZW50IGZvciBuZXcKLQkgKiAJZGV2aWNlcy4gQSB3cml0ZSBvZiB6ZXJvIHRvIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyIGRpc2FibGVzIHRoaXMKLQkgKiAJZnVuY3Rpb24gdG8gYWxsb3cgdXNlIHdpdGggYW55IG5vbi1jb21wbGlhbnQgbGVnYWN5IGRldmljZXMgdGhhdCBtYXkKLQkgKiAJZXhlY3V0ZSBtb3JlIHJldHJpZXMuCisJICoJVGhlIFJFVFJZX1RJTUVPVVQgaXMgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiByZXRyaWVzIHRoYXQgdGhlIGNvcmUsIGFzIGEKKwkgKglNYXN0ZXIsIHdpbGwgcGVyZm9ybSBiZWZvcmUgYWJhbmRvbmluZyBhIGN5Y2xlLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKKwkgKglSRVRSWV9USU1FT1VUIGlzIDB4ODAsIHdoaWNoIGZhciBleGNlZWRzIHRoZSBQQ0kgMi4xIHJlcXVpcmVtZW50IGZvciBuZXcKKwkgKglkZXZpY2VzLiBBIHdyaXRlIG9mIHplcm8gdG8gdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgZGlzYWJsZXMgdGhpcworCSAqCWZ1bmN0aW9uIHRvIGFsbG93IHVzZSB3aXRoIGFueSBub24tY29tcGxpYW50IGxlZ2FjeSBkZXZpY2VzIHRoYXQgbWF5CisJICoJZXhlY3V0ZSBtb3JlIHJldHJpZXMuCiAJICoKLQkgKiAJV3JpdGluZyB6ZXJvIHRvIGJvdGggdGhlc2UgdHdvIHJlZ2lzdGVycyB3aWxsIGRpc2FibGUgYm90aCB0aW1lb3V0cyBhbmQKLQkgKiAJKmNhbiogc29sdmUgcHJvYmxlbXMgY2F1c2VkIGJ5IGRldmljZXMgdGhhdCBhcmUgc2xvdyB0byByZXNwb25kLgorCSAqCVdyaXRpbmcgemVybyB0byBib3RoIHRoZXNlIHR3byByZWdpc3RlcnMgd2lsbCBkaXNhYmxlIGJvdGggdGltZW91dHMgYW5kCisJICoJKmNhbiogc29sdmUgcHJvYmxlbXMgY2F1c2VkIGJ5IGRldmljZXMgdGhhdCBhcmUgc2xvdyB0byByZXNwb25kLgogCSAqCU1ha2UgdGhpcyBjb25maWd1cmFibGUgLSBNU1cKIAkgKi8KIAlpZiAoIGluaXRfcGNpdG0gPj0gMCApIHsKQEAgLTE3MSwxNCArMTcwLDE1IEBACiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAkvKiBlbmFibGUgTVdJICovCi0JcGNpX3NldF9td2kocGRldik7CisJaWYgKCFwY2lfc2V0X213aShwZGV2KSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBjaV9zZXRfbXdpKHBkZXYpIHN1Y2NlZWRlZFxuIiwgRFJWX05BTUUpOwogCiAJLyogc2V0dXAgdGhlIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSBhbmQgaXRzIHN0cnVjdHVyZSAqLwogCWlmICghKG5kZXYgPSBpc2xwY2lfc2V0dXAocGRldikpKSB7CiAJCS8qIGVycm9yIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgYXMgYSBuZXR3b3JrIGRldmljZSAqLwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgY29uZmlndXJlIG5ldHdvcmsgZGV2aWNlXG4iLAogCQkgICAgICAgRFJWX05BTUUpOwotCQlnb3RvIGRvX3BjaV9yZWxlYXNlX3JlZ2lvbnM7CisJCWdvdG8gZG9fcGNpX2NsZWFyX213aTsKIAl9CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC0yMDgsNiArMjA4LDggQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJlZV9uZXRkZXYobmRldik7CiAJcHJpdiA9IE5VTEw7CisgICAgICBkb19wY2lfY2xlYXJfbXdpOgorCXBjaV9jbGVhcl9td2kocGRldik7CiAgICAgICBkb19wY2lfcmVsZWFzZV9yZWdpb25zOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAgICAgICBkb19wY2lfZGlzYWJsZV9kZXZpY2U6CkBAIC0yNDEsNyArMjQzLDcgQEAKIAkJaXNsMzh4eF9kaXNhYmxlX2ludGVycnVwdHMocHJpdi0+ZGV2aWNlX2Jhc2UpOwogCQlpc2xwY2lfc2V0X3N0YXRlKHByaXYsIFBSVl9TVEFURV9PRkYpOwogCQkvKiBUaGlzIGJlbGxvdyBjYXVzZXMgYSBsb2NrdXAgYXQgcm1tb2QgdGltZS4gSXQgbWlnaHQgYmUKLQkJICogYmVjYXVzZSBzb21lIGludGVycnVwdHMgc3RpbGwgbGluZ2VyIGFmdGVyIHJtbW9kIHRpbWUsIAorCQkgKiBiZWNhdXNlIHNvbWUgaW50ZXJydXB0cyBzdGlsbCBsaW5nZXIgYWZ0ZXIgcm1tb2QgdGltZSwKIAkJICogc2VlIGJ1ZyAjMTcgKi8KIAkJLyogcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAzKTsqLwkvKiB0cnkgdG8gcG93ZXItb2ZmICovCiAJfQpAQCAtMjU1LDYgKzI1Nyw4IEBACiAJZnJlZV9uZXRkZXYobmRldik7CiAJcHJpdiA9IE5VTEw7CiAKKwlwY2lfY2xlYXJfbXdpKHBkZXYpOworCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTI4OCwxMiArMjkyLDE5IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZGV2ID8gbmV0ZGV2X3ByaXYobmRldikgOiBOVUxMOworCWludCBlcnI7CisKIAlCVUdfT04oIXByaXYpOwogCi0JcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0KIAlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBnb3QgcmVzdW1lIHJlcXVlc3RcbiIsIG5kZXYtPm5hbWUpOwogCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgb24gcmVzdW1lXG4iLAorCQkgICAgICAgbmRldi0+bmFtZSk7CisJCXJldHVybiBlcnI7CisJfQorCiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKIAkvKiBhbHJpZ2h0IGxldCdzIGdvIGludG8gdGhlIFBSRUJPT1Qgc3RhdGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKaW5kZXggMmUwNjFhOC4uMDM2YTg3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfbWd0LmMKQEAgLTEsNSArMSw0IEBACiAvKgotICogIAogICogIENvcHlyaWdodCAoQykgMjAwMiBJbnRlcnNpbCBBbWVyaWNhcyBJbmMuCiAgKiAgQ29weXJpZ2h0IDIwMDQgSmVucyBNYXVyZXIgPEplbnMuTWF1cmVyQGdteC5uZXQ+CiAgKgpAQCAtNTAyLDcgKzUwMSw3IEBACiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRpbWVvdXQgd2FpdGluZyBmb3IgbWdtdCByZXNwb25zZVxuIiwKIAkgICAgICAgbmRldi0+bmFtZSk7CiAKLQkvKiBUT0RPOiB3ZSBzaG91bGQgcmVzZXQgdGhlIGRldmljZSBoZXJlICovICAgICAKKwkvKiBUT0RPOiB3ZSBzaG91bGQgcmVzZXQgdGhlIGRldmljZSBoZXJlICovCiAgb3V0OgogCWZpbmlzaF93YWl0KCZwcml2LT5tZ210X3dxdWV1ZSwgJndhaXQpOwogCXVwKCZwcml2LT5tZ210X3NlbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCmluZGV4IDI5ODJiZTMuLmZjNTNiNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCkBAIC0xLDUgKzEsNCBAQAogLyoKLSAqICAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSW50ZXJzaWwgQW1lcmljYXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwMyBMdWlzIFIuIFJvZHJpZ3VleiA8bWNncm9mQHJ1c2x1Zy5ydXRnZXJzLmVkdT4KICAqCkBAIC0zNiw4ICszNSw4IEBACiAKIAogLyogR2VuZXJhbCBkcml2ZXIgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgUENJREVWSUNFX0xBVEVOQ1lfVElNRVJfTUlOIAkJMHg0MAotI2RlZmluZSBQQ0lERVZJQ0VfTEFURU5DWV9USU1FUl9WQUwgCQkweDUwCisjZGVmaW5lIFBDSURFVklDRV9MQVRFTkNZX1RJTUVSX01JTgkJMHg0MAorI2RlZmluZSBQQ0lERVZJQ0VfTEFURU5DWV9USU1FUl9WQUwJCTB4NTAKIAogLyogRGVidWdnaW5nIHZlcmJvc2UgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgU0hPV19OT1RISU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAJLyogb3ZlcnJ1bGVzIGV2ZXJ5dGhpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKaW5kZXggZWJiMjM4Ny4uZmJjNTJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9vaWRfbWd0LmMKQEAgLTEsNCArMSw0IEBACi0vKiAgIAorLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTAzLDcgKzUwMyw3IEBACiAJCX0KIAkJaWYgKHJldCB8fCByZXNwb25zZV9vcCA9PSBQSU1GT1JfT1BfRVJST1IpCiAJCQlyZXQgPSAtRUlPOwotCX0gZWxzZSAKKwl9IGVsc2UKIAkJcmV0ID0gLUVJTzsKIAogCS8qIHJlLXNldCBnaXZlbiBkYXRhIHRvIHdoYXQgaXQgd2FzICovCkBAIC03MjcsNyArNzI3LDcgQEAKICAqIE1FRElVTUxJTUlULEJFQUNPTlBFUklPRCxEVElNUEVSSU9ELEFUSU1XSU5ET1csTElTVEVOSU5URVJWQUwKICAqIEZSRVFVRU5DWSxFWFRFTkRFRFJBVEVTLgogICoKLSAqIFRoZSB3YXkgdG8gZG8gdGhpcyBpcyB0byBzZXQgRVNTSUQuIE5vdGUgdGhvdWdoIHRoYXQgdGhleSBtYXkgZ2V0IAorICogVGhlIHdheSB0byBkbyB0aGlzIGlzIHRvIHNldCBFU1NJRC4gTm90ZSB0aG91Z2ggdGhhdCB0aGV5IG1heSBnZXQKICAqIHVubGF0Y2ggYmVmb3JlIHRob3VnaCBieSBzZXR0aW5nIGFub3RoZXIgT0lELiAqLwogI2lmIDAKIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvcHJpc21jb21wYXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvcHJpc21jb21wYXQuaAppbmRleCBkNzFlY2E1Li5hYTFkMTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L3ByaXNtY29tcGF0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9wcmlzbWNvbXBhdC5oCkBAIC0xLDQgKzEsNCBAQAotLyogIAorLyoKICAqICAoQykgMjAwNCBNYXJnaXQgU2NodWJlcnQtV2hpbGUgPG1hcmdpdHN3QHQtb25saW5lLmRlPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTYsNyArMTYsNyBAQAogICoKICAqLwogCi0vKiAgCisvKgogICoJQ29tcGF0aWJpbGl0eSBoZWFkZXIgZmlsZSB0byBhaWQgc3VwcG9ydCBvZiBkaWZmZXJlbnQga2VybmVsIHZlcnNpb25zCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGFhNjYxYjIuLjhiZTk5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTEwNzYsNiArMTA3NiwzMSBAQAogCXJldHVybiB6ZF9pb3dyaXRlMzJfbG9ja2VkKGNoaXAsIHJhdGVzLCBDUl9NQU5EQVRPUllfUkFURV9UQkwpOwogfQogCitpbnQgemRfY2hpcF9zZXRfcnRzX2N0c19yYXRlX2xvY2tlZChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwKKwl1OCBydHNfcmF0ZSwgaW50IHByZWFtYmxlKQoreworCWludCBydHNfbW9kID0gWkRfUlhfQ0NLOworCXUzMiB2YWx1ZSA9IDA7CisKKwkvKiBNb2R1bGF0aW9uIGJpdCAqLworCWlmIChaRF9DU19UWVBFKHJ0c19yYXRlKSA9PSBaRF9DU19PRkRNKQorCQlydHNfbW9kID0gWkRfUlhfT0ZETTsKKworCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwgInJ0c19yYXRlPSV4IHByZWFtYmxlPSV4XG4iLAorCQlydHNfcmF0ZSwgcHJlYW1ibGUpOworCisJdmFsdWUgfD0gcnRzX3JhdGUgPDwgUlRTQ1RTX1NIX1JUU19SQVRFOworCXZhbHVlIHw9IHJ0c19tb2QgPDwgUlRTQ1RTX1NIX1JUU19NT0RfVFlQRTsKKwl2YWx1ZSB8PSBwcmVhbWJsZSA8PCBSVFNDVFNfU0hfUlRTX1BNQl9UWVBFOworCXZhbHVlIHw9IHByZWFtYmxlIDw8IFJUU0NUU19TSF9DVFNfUE1CX1RZUEU7CisKKwkvKiBXZSBhbHdheXMgc2VuZCAxMU0gc2VsZi1DVFMgbWVzc2FnZXMsIGxpa2UgdGhlIHZlbmRvciBkcml2ZXIuICovCisJdmFsdWUgfD0gWkRfQ0NLX1JBVEVfMTFNIDw8IFJUU0NUU19TSF9DVFNfUkFURTsKKwl2YWx1ZSB8PSBaRF9SWF9DQ0sgPDwgUlRTQ1RTX1NIX0NUU19NT0RfVFlQRTsKKworCXJldHVybiB6ZF9pb3dyaXRlMzJfbG9ja2VkKGNoaXAsIHZhbHVlLCBDUl9SVFNfQ1RTX1JBVEUpOworfQorCiBpbnQgemRfY2hpcF9lbmFibGVfaHdpbnQoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7CiAJaW50IHI7CkBAIC0xMzU1LDE3ICsxMzgwLDEyIEBACiAJcmV0dXJuIHI7CiB9CiAKLWludCB6ZF9jaGlwX3NldF9iYXNpY19yYXRlcyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTE2IGNyX3JhdGVzKQoraW50IHpkX2NoaXBfc2V0X2Jhc2ljX3JhdGVzX2xvY2tlZChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTE2IGNyX3JhdGVzKQogewotCWludCByOworCVpEX0FTU0VSVCgoY3JfcmF0ZXMgJiB+KENSX1JBVEVTXzgwMjExQiB8IENSX1JBVEVTXzgwMjExRykpID09IDApOworCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwgIiV4XG4iLCBjcl9yYXRlcyk7CiAKLQlpZiAoY3JfcmF0ZXMgJiB+KENSX1JBVEVTXzgwMjExQnxDUl9SQVRFU184MDIxMUcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKLQlyID0gemRfaW93cml0ZTMyX2xvY2tlZChjaGlwLCBjcl9yYXRlcywgQ1JfQkFTSUNfUkFURV9UQkwpOwotCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOwotCXJldHVybiByOworCXJldHVybiB6ZF9pb3dyaXRlMzJfbG9ja2VkKGNoaXAsIGNyX3JhdGVzLCBDUl9CQVNJQ19SQVRFX1RCTCk7CiB9CiAKIHN0YXRpYyBpbnQgb2ZkbV9xdWFsX2RiKHU4IHN0YXR1c19xdWFsaXR5LCB1OCByYXRlLCB1bnNpZ25lZCBpbnQgc2l6ZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAppbmRleCBhZTU5NTk3Li5jYTg5MmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCkBAIC0zMzcsMjQgKzMzNywyNCBAQAogI2RlZmluZSBDUl9NQUNfUFNfU1RBVEUJCQlDVExfUkVHKDB4MDUwQykKIAogI2RlZmluZSBDUl9JTlRFUlJVUFQJCQlDVExfUkVHKDB4MDUxMCkKLSNkZWZpbmUgSU5UX1RYX0NPTVBMRVRFCQkJMHgwMDAwMDAwMQotI2RlZmluZSBJTlRfUlhfQ09NUExFVEUJCQkweDAwMDAwMDAyCi0jZGVmaW5lIElOVF9SRVRSWV9GQUlMCQkJMHgwMDAwMDAwNAotI2RlZmluZSBJTlRfV0FLRVVQCQkJMHgwMDAwMDAwOAotI2RlZmluZSBJTlRfRFRJTV9OT1RJRlkJCQkweDAwMDAwMDIwCi0jZGVmaW5lIElOVF9DRkdfTkVYVF9CQ04JCTB4MDAwMDAwNDAKLSNkZWZpbmUgSU5UX0JVU19BQk9SVAkJCTB4MDAwMDAwODAKLSNkZWZpbmUgSU5UX1RYX0ZJRk9fUkVBRFkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgSU5UX1VBUlQJCQkweDAwMDAwMjAwCi0jZGVmaW5lIElOVF9UWF9DT01QTEVURV9FTgkJMHgwMDAxMDAwMAotI2RlZmluZSBJTlRfUlhfQ09NUExFVEVfRU4JCTB4MDAwMjAwMDAKLSNkZWZpbmUgSU5UX1JFVFJZX0ZBSUxfRU4JCTB4MDAwNDAwMDAKLSNkZWZpbmUgSU5UX1dBS0VVUF9FTgkJCTB4MDAwODAwMDAKLSNkZWZpbmUgSU5UX0RUSU1fTk9USUZZX0VOCQkweDAwMjAwMDAwCi0jZGVmaW5lIElOVF9DRkdfTkVYVF9CQ05fRU4JCTB4MDA0MDAwMDAKLSNkZWZpbmUgSU5UX0JVU19BQk9SVF9FTgkJMHgwMDgwMDAwMAotI2RlZmluZSBJTlRfVFhfRklGT19SRUFEWV9FTgkJMHgwMTAwMDAwMAotI2RlZmluZSBJTlRfVUFSVF9FTgkJCTB4MDIwMDAwMDAKKyNkZWZpbmUgSU5UX1RYX0NPTVBMRVRFCQkJKDEgPDwgIDApCisjZGVmaW5lIElOVF9SWF9DT01QTEVURQkJCSgxIDw8ICAxKQorI2RlZmluZSBJTlRfUkVUUllfRkFJTAkJCSgxIDw8ICAyKQorI2RlZmluZSBJTlRfV0FLRVVQCQkJKDEgPDwgIDMpCisjZGVmaW5lIElOVF9EVElNX05PVElGWQkJCSgxIDw8ICA1KQorI2RlZmluZSBJTlRfQ0ZHX05FWFRfQkNOCQkoMSA8PCAgNikKKyNkZWZpbmUgSU5UX0JVU19BQk9SVAkJCSgxIDw8ICA3KQorI2RlZmluZSBJTlRfVFhfRklGT19SRUFEWQkJKDEgPDwgIDgpCisjZGVmaW5lIElOVF9VQVJUCQkJKDEgPDwgIDkpCisjZGVmaW5lIElOVF9UWF9DT01QTEVURV9FTgkJKDEgPDwgMTYpCisjZGVmaW5lIElOVF9SWF9DT01QTEVURV9FTgkJKDEgPDwgMTcpCisjZGVmaW5lIElOVF9SRVRSWV9GQUlMX0VOCQkoMSA8PCAxOCkKKyNkZWZpbmUgSU5UX1dBS0VVUF9FTgkJCSgxIDw8IDE5KQorI2RlZmluZSBJTlRfRFRJTV9OT1RJRllfRU4JCSgxIDw8IDIxKQorI2RlZmluZSBJTlRfQ0ZHX05FWFRfQkNOX0VOCQkoMSA8PCAyMikKKyNkZWZpbmUgSU5UX0JVU19BQk9SVF9FTgkJKDEgPDwgMjMpCisjZGVmaW5lIElOVF9UWF9GSUZPX1JFQURZX0VOCQkoMSA8PCAyNCkKKyNkZWZpbmUgSU5UX1VBUlRfRU4JCQkoMSA8PCAyNSkKIAogI2RlZmluZSBDUl9UU0ZfTE9XX1BBUlQJCQlDVExfUkVHKDB4MDUxNCkKICNkZWZpbmUgQ1JfVFNGX0hJR0hfUEFSVAkJQ1RMX1JFRygweDA1MTgpCkBAIC0zOTgsMTggKzM5OCwxOCBAQAogICogZGV2aWNlIHdpbGwgdXNlIGEgcmF0ZSBpbiB0aGlzIHRhYmxlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByYXRlCiAgKiBvZiB0aGUgaW5jb21pbmcgZnJhbWUgd2hpY2ggcHJvbXB0ZWQgdGhlIHJlc3BvbnNlICovCiAjZGVmaW5lIENSX0JBU0lDX1JBVEVfVEJMCQlDVExfUkVHKDB4MDYzMCkKLSNkZWZpbmUgQ1JfUkFURV8xTQkweDAwMDEJLyogODAyLjExYiAqLwotI2RlZmluZSBDUl9SQVRFXzJNCTB4MDAwMgkvKiA4MDIuMTFiICovCi0jZGVmaW5lIENSX1JBVEVfNV81TQkweDAwMDQJLyogODAyLjExYiAqLwotI2RlZmluZSBDUl9SQVRFXzExTQkweDAwMDgJLyogODAyLjExYiAqLwotI2RlZmluZSBDUl9SQVRFXzZNICAgICAgMHgwMTAwCS8qIDgwMi4xMWcgKi8KLSNkZWZpbmUgQ1JfUkFURV85TSAgICAgIDB4MDIwMAkvKiA4MDIuMTFnICovCi0jZGVmaW5lIENSX1JBVEVfMTJNCTB4MDQwMAkvKiA4MDIuMTFnICovCi0jZGVmaW5lIENSX1JBVEVfMThNCTB4MDgwMAkvKiA4MDIuMTFnICovCi0jZGVmaW5lIENSX1JBVEVfMjRNICAgICAweDEwMDAJLyogODAyLjExZyAqLwotI2RlZmluZSBDUl9SQVRFXzM2TSAgICAgMHgyMDAwCS8qIDgwMi4xMWcgKi8KLSNkZWZpbmUgQ1JfUkFURV80OE0gICAgIDB4NDAwMAkvKiA4MDIuMTFnICovCi0jZGVmaW5lIENSX1JBVEVfNTRNICAgICAweDgwMDAJLyogODAyLjExZyAqLworI2RlZmluZSBDUl9SQVRFXzFNCSgxIDw8ICAwKQkvKiA4MDIuMTFiICovCisjZGVmaW5lIENSX1JBVEVfMk0JKDEgPDwgIDEpCS8qIDgwMi4xMWIgKi8KKyNkZWZpbmUgQ1JfUkFURV81XzVNCSgxIDw8ICAyKQkvKiA4MDIuMTFiICovCisjZGVmaW5lIENSX1JBVEVfMTFNCSgxIDw8ICAzKQkvKiA4MDIuMTFiICovCisjZGVmaW5lIENSX1JBVEVfNk0gICAgICAoMSA8PCAgOCkJLyogODAyLjExZyAqLworI2RlZmluZSBDUl9SQVRFXzlNICAgICAgKDEgPDwgIDkpCS8qIDgwMi4xMWcgKi8KKyNkZWZpbmUgQ1JfUkFURV8xMk0JKDEgPDwgMTApCS8qIDgwMi4xMWcgKi8KKyNkZWZpbmUgQ1JfUkFURV8xOE0JKDEgPDwgMTEpCS8qIDgwMi4xMWcgKi8KKyNkZWZpbmUgQ1JfUkFURV8yNE0gICAgICgxIDw8IDEyKQkvKiA4MDIuMTFnICovCisjZGVmaW5lIENSX1JBVEVfMzZNICAgICAoMSA8PCAxMykJLyogODAyLjExZyAqLworI2RlZmluZSBDUl9SQVRFXzQ4TSAgICAgKDEgPDwgMTQpCS8qIDgwMi4xMWcgKi8KKyNkZWZpbmUgQ1JfUkFURV81NE0gICAgICgxIDw8IDE1KQkvKiA4MDIuMTFnICovCiAjZGVmaW5lIENSX1JBVEVTXzgwMjExRwkweGZmMDAKICNkZWZpbmUgQ1JfUkFURVNfODAyMTFCCTB4MDAwZgogCkBAIC00MjAsMTUgKzQyMCwyNCBAQAogI2RlZmluZSBDUl9NQU5EQVRPUllfUkFURV9UQkwJCUNUTF9SRUcoMHgwNjM0KQogI2RlZmluZSBDUl9SVFNfQ1RTX1JBVEUJCQlDVExfUkVHKDB4MDYzOCkKIAorLyogVGhlc2UgYXJlIGFsbCBiaXQgaW5kZXhlcyBpbiBDUl9SVFNfQ1RTX1JBVEUsIHNvIHJlbWVtYmVyIHRvIHNoaWZ0LiAqLworI2RlZmluZSBSVFNDVFNfU0hfUlRTX1JBVEUJCTAKKyNkZWZpbmUgUlRTQ1RTX1NIX0VYUF9DVFNfUkFURQkJNAorI2RlZmluZSBSVFNDVFNfU0hfUlRTX01PRF9UWVBFCQk4CisjZGVmaW5lIFJUU0NUU19TSF9SVFNfUE1CX1RZUEUJCTkKKyNkZWZpbmUgUlRTQ1RTX1NIX0NUU19SQVRFCQkxNgorI2RlZmluZSBSVFNDVFNfU0hfQ1RTX01PRF9UWVBFCQkyNAorI2RlZmluZSBSVFNDVFNfU0hfQ1RTX1BNQl9UWVBFCQkyNQorCiAjZGVmaW5lIENSX1dFUF9QUk9URUNUCQkJQ1RMX1JFRygweDA2M0MpCiAjZGVmaW5lIENSX1JYX1RIUkVTSE9MRAkJCUNUTF9SRUcoMHgwNjQwKQogCiAvKiByZWdpc3RlciBmb3IgY29udHJvbGxpbmcgdGhlIExFRFMgKi8KICNkZWZpbmUgQ1JfTEVECQkJCUNUTF9SRUcoMHgwNjQ0KQogLyogbWFza3MgZm9yIGNvbnRyb2xsaW5nIExFRHMgKi8KLSNkZWZpbmUgTEVEMQkJCQkweDAxMDAKLSNkZWZpbmUgTEVEMgkJCQkweDAyMDAKLSNkZWZpbmUgTEVEX1NXCQkJCTB4MDQwMAorI2RlZmluZSBMRUQxCQkJCSgxIDw8ICA4KQorI2RlZmluZSBMRUQyCQkJCSgxIDw8ICA5KQorI2RlZmluZSBMRURfU1cJCQkJKDEgPDwgMTApCiAKIC8qIFNlZW1zIHRvIGluZGljYXRlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgb3Zlci4KICAqLwpAQCAtNDU1LDE4ICs0NjQsMTggQEAKICAqIHJlZ2lzdGVycywgc28gb25lIGNvdWxkIGFyZ3VlIGl0IGlzIGEgTE9DSyBiaXQuIEJ1dCBjYWxsaW5nIGl0CiAgKiBMT0NLX1BIWV9SRUdTIG1ha2VzIGl0IGNvbmZ1c2luZy4KICAqLwotI2RlZmluZSBVTkxPQ0tfUEhZX1JFR1MJCQkweDAwODAKKyNkZWZpbmUgVU5MT0NLX1BIWV9SRUdTCQkJKDEgPDwgNykKIAogI2RlZmluZSBDUl9ERVZJQ0VfU1RBVEUJCQlDVExfUkVHKDB4MDY4NCkKICNkZWZpbmUgQ1JfVU5ERVJSVU5fQ05UCQkJQ1RMX1JFRygweDA2ODgpCiAKICNkZWZpbmUgQ1JfUlhfRklMVEVSCQkJQ1RMX1JFRygweDA2OGMpCi0jZGVmaW5lIFJYX0ZJTFRFUl9BU1NPQ19SRVNQT05TRQkweDAwMDIKLSNkZWZpbmUgUlhfRklMVEVSX1JFQVNTT0NfUkVTUE9OU0UJMHgwMDA4Ci0jZGVmaW5lIFJYX0ZJTFRFUl9QUk9CRV9SRVNQT05TRQkweDAwMjAKLSNkZWZpbmUgUlhfRklMVEVSX0JFQUNPTgkJMHgwMTAwCi0jZGVmaW5lIFJYX0ZJTFRFUl9ESVNBU1NPQwkJMHgwNDAwCi0jZGVmaW5lIFJYX0ZJTFRFUl9BVVRICQkJMHgwODAwCisjZGVmaW5lIFJYX0ZJTFRFUl9BU1NPQ19SRVNQT05TRQkoMSA8PCAgMSkKKyNkZWZpbmUgUlhfRklMVEVSX1JFQVNTT0NfUkVTUE9OU0UJKDEgPDwgIDMpCisjZGVmaW5lIFJYX0ZJTFRFUl9QUk9CRV9SRVNQT05TRQkoMSA8PCAgNSkKKyNkZWZpbmUgUlhfRklMVEVSX0JFQUNPTgkJKDEgPDwgIDgpCisjZGVmaW5lIFJYX0ZJTFRFUl9ESVNBU1NPQwkJKDEgPDwgMTApCisjZGVmaW5lIFJYX0ZJTFRFUl9BVVRICQkJKDEgPDwgMTEpCiAjZGVmaW5lIEFQX1JYX0ZJTFRFUgkJCTB4MDQwMGZlZmYKICNkZWZpbmUgU1RBX1JYX0ZJTFRFUgkJCTB4MDAwMGZmZmYKIApAQCAtNzk0LDYgKzgwMyw5IEBACiBpbnQgemRfY2hpcF9lbmFibGVfaHdpbnQoc3RydWN0IHpkX2NoaXAgKmNoaXApOwogaW50IHpkX2NoaXBfZGlzYWJsZV9od2ludChzdHJ1Y3QgemRfY2hpcCAqY2hpcCk7CiAKK2ludCB6ZF9jaGlwX3NldF9ydHNfY3RzX3JhdGVfbG9ja2VkKHN0cnVjdCB6ZF9jaGlwICpjaGlwLAorCXU4IHJ0c19yYXRlLCBpbnQgcHJlYW1ibGUpOworCiBzdGF0aWMgaW5saW5lIGludCB6ZF9nZXRfZW5jcnlwdGlvbl90eXBlKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MzIgKnR5cGUpCiB7CiAJcmV0dXJuIHpkX2lvcmVhZDMyKGNoaXAsIENSX0VOQ1JZUFRJT05fVFlQRSwgdHlwZSk7CkBAIC04MDksNyArODIxLDE3IEBACiAJcmV0dXJuIHpkX2lvcmVhZDE2KGNoaXAsIENSX0JBU0lDX1JBVEVfVEJMLCBjcl9yYXRlcyk7CiB9CiAKLWludCB6ZF9jaGlwX3NldF9iYXNpY19yYXRlcyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTE2IGNyX3JhdGVzKTsKK2ludCB6ZF9jaGlwX3NldF9iYXNpY19yYXRlc19sb2NrZWQoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHUxNiBjcl9yYXRlcyk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHpkX2NoaXBfc2V0X2Jhc2ljX3JhdGVzKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MTYgY3JfcmF0ZXMpCit7CisJaW50IHI7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJciA9IHpkX2NoaXBfc2V0X2Jhc2ljX3JhdGVzX2xvY2tlZChjaGlwLCBjcl9yYXRlcyk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CisJcmV0dXJuIHI7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHpkX2NoaXBfc2V0X3J4X2ZpbHRlcihzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTMyIGZpbHRlcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKaW5kZXggYTEzZWM3Mi4uZmIyMmY2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKQEAgLTM5LDYgKzM5LDcgQEAKIAlpZiAoISh4KSkgeyBcCiAJCXByX2RlYnVnKCIlczolZCBBU1NFUlQgJXMgVklPTEFURUQhXG4iLCBcCiAJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fc3RyaW5naWZ5KHgpKTsgXAorCQlkdW1wX3N0YWNrKCk7IFwKIAl9IFwKIH0gd2hpbGUgKDApCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfaWVlZTgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuYwppbmRleCA2NjkwNWY3Li4xODkxNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuYwpAQCAtMzcsNyArMzcsMTIgQEAKIAlbWkRfUkVHRE9NQUlOX0pBUEFOXQkgPSB7IDEsIDE0fSwKIAlbWkRfUkVHRE9NQUlOX1NQQUlOXQkgPSB7IDEsIDE0fSwKIAlbWkRfUkVHRE9NQUlOX0ZSQU5DRV0JID0geyAxLCAxNH0sCi0JW1pEX1JFR0RPTUFJTl9KQVBBTl9BRERdID0gezE0LCAxNX0sCisKKwkvKiBKYXBhbiBvcmlnaW5hbGx5IG9ubHkgaGFkIGNoYW5uZWwgMTQgYXZhaWxhYmxlIChzZWUgQ0hOTF9JRCAweDQwIGluCisJICogODAyLjExKS4gSG93ZXZlciwgaW4gMjAwMSB0aGUgcmFuZ2Ugd2FzIGV4dGVuZGVkIHRvIGluY2x1ZGUgY2hhbm5lbHMKKwkgKiAxLTEzLiBUaGUgWnlEQVMgZGV2aWNlcyBzdGlsbCB1c2UgdGhlIG9sZCByZWdpb24gY29kZSBidXQgYXJlCisJICogZGVzaWduZWQgdG8gYWxsb3cgdGhlIGV4dHJhIGNoYW5uZWwgYWNjZXNzIGluIEphcGFuLiAqLworCVtaRF9SRUdET01BSU5fSkFQQU5fQUREXSA9IHsgMSwgMTV9LAogfTsKIAogY29uc3Qgc3RydWN0IGNoYW5uZWxfcmFuZ2UgKnpkX2NoYW5uZWxfcmFuZ2UodTggcmVnZG9tYWluKQpAQCAtMTMzLDkgKzEzOCw2IEBACiAJaW50IGksIHI7CiAJdTMyIG1oejsKIAotCWlmICghKGZyZXEtPmZsYWdzICYgSVdfRlJFUV9GSVhFRCkpCi0JCXJldHVybiAwOwotCiAJaWYgKGZyZXEtPm0gPCAxMDAwKSB7CiAJCWlmIChmcmVxLT5tICA+IE5VTV9DSEFOTkVMUyB8fCBmcmVxLT5tID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfaWVlZTgwMjExLmgKaW5kZXggZjYzMjQ1Yi4uMjZiODI5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfaWVlZTgwMjExLmgKQEAgLTUwLDYgKzUwLDcgQEAKIAlyZXR1cm4gaGVhZGVyLT5wcmVmaXhbMF0gJiAweGY7CiB9CiAKKy8qIFRoZXNlIGFyZSByZWZlcnJlZCB0byBhcyB6ZF9yYXRlcyAqLwogI2RlZmluZSBaRF9PRkRNX1JBVEVfNk0JCTB4YgogI2RlZmluZSBaRF9PRkRNX1JBVEVfOU0JCTB4ZgogI2RlZmluZSBaRF9PRkRNX1JBVEVfMTJNCTB4YQpAQCAtNjQsNyArNjUsNyBAQAogCXU4IHNlcnZpY2U7CiAJX19sZTE2IGxlbmd0aDsKIAlfX2xlMTYgY3JjMTY7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RhdGljIGlubGluZSB1OCB6ZF9jY2tfcGxjcF9oZWFkZXJfcmF0ZShjb25zdCBzdHJ1Y3QgY2NrX3BsY3BfaGVhZGVyICpoZWFkZXIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IGE3ZDI5YmQuLjI2OTZmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0zMiw2ICszMiw4IEBACiAKIHN0YXRpYyB2b2lkIGllZWVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBzdGF0aWMgdm9pZCBzb2Z0bWFjX2luaXQoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzbSk7CitzdGF0aWMgdm9pZCBzZXRfcnRzX2N0c193b3JrKHZvaWQgKmQpOworc3RhdGljIHZvaWQgc2V0X2Jhc2ljX3JhdGVzX3dvcmsodm9pZCAqZCk7CiAKIHN0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19pbml0KHN0cnVjdCB6ZF9tYWMgKm1hYyk7CiBzdGF0aWMgdm9pZCBob3VzZWtlZXBpbmdfZW5hYmxlKHN0cnVjdCB6ZF9tYWMgKm1hYyk7CkBAIC00Niw2ICs0OCw4IEBACiAJbWVtc2V0KG1hYywgMCwgc2l6ZW9mKCptYWMpKTsKIAlzcGluX2xvY2tfaW5pdCgmbWFjLT5sb2NrKTsKIAltYWMtPm5ldGRldiA9IG5ldGRldjsKKwlJTklUX1dPUksoJm1hYy0+c2V0X3J0c19jdHNfd29yaywgc2V0X3J0c19jdHNfd29yaywgbWFjKTsKKwlJTklUX1dPUksoJm1hYy0+c2V0X2Jhc2ljX3JhdGVzX3dvcmssIHNldF9iYXNpY19yYXRlc193b3JrLCBtYWMpOwogCiAJaWVlZV9pbml0KGllZWUpOwogCXNvZnRtYWNfaW5pdChpZWVlODAyMTFfcHJpdihuZXRkZXYpKTsKQEAgLTIxMyw2ICsyMTcsMTMgQEAKIAlob3VzZWtlZXBpbmdfZGlzYWJsZShtYWMpOwogCWllZWU4MDIxMXNvZnRtYWNfc3RvcChuZXRkZXYpOwogCisJLyogRW5zdXJlIG5vIHdvcmsgaXRlbXMgYXJlIHJ1bm5pbmcgb3IgcXVldWVkIGZyb20gdGhpcyBwb2ludCAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1hYy0+c2V0X3J0c19jdHNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFjLT5zZXRfYmFzaWNfcmF0ZXNfd29yayk7CisJZmx1c2hfd29ya3F1ZXVlKHpkX3dvcmtxdWV1ZSk7CisJbWFjLT51cGRhdGluZ19ydHNfcmF0ZSA9IDA7CisJbWFjLT51cGRhdGluZ19iYXNpY19yYXRlcyA9IDA7CisKIAl6ZF9jaGlwX2Rpc2FibGVfaHdpbnQoY2hpcCk7CiAJemRfY2hpcF9zd2l0Y2hfcmFkaW9fb2ZmKGNoaXApOwogCXpkX2NoaXBfZGlzYWJsZV9pbnQoY2hpcCk7CkBAIC0yODYsNiArMjk3LDE4NiBAQAogCXJldHVybiByZWdkb21haW47CiB9CiAKKy8qIEZhbGxiYWNrIHRvIGxvd2VzdCByYXRlLCBpZiByYXRlIGlzIHVua25vd24uICovCitzdGF0aWMgdTggcmF0ZV90b196ZF9yYXRlKHU4IHJhdGUpCit7CisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMk1COgorCQlyZXR1cm4gWkRfQ0NLX1JBVEVfMk07CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgorCQlyZXR1cm4gWkRfQ0NLX1JBVEVfNV81TTsKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1COgorCQlyZXR1cm4gWkRfQ0NLX1JBVEVfMTFNOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV82TUI6CisJCXJldHVybiBaRF9PRkRNX1JBVEVfNk07CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQjoKKwkJcmV0dXJuIFpEX09GRE1fUkFURV85TTsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjoKKwkJcmV0dXJuIFpEX09GRE1fUkFURV8xMk07CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUI6CisJCXJldHVybiBaRF9PRkRNX1JBVEVfMThNOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1COgorCQlyZXR1cm4gWkRfT0ZETV9SQVRFXzI0TTsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjoKKwkJcmV0dXJuIFpEX09GRE1fUkFURV8zNk07CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUI6CisJCXJldHVybiBaRF9PRkRNX1JBVEVfNDhNOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1COgorCQlyZXR1cm4gWkRfT0ZETV9SQVRFXzU0TTsKKwl9CisJcmV0dXJuIFpEX0NDS19SQVRFXzFNOworfQorCitzdGF0aWMgdTE2IHJhdGVfdG9fY3JfcmF0ZSh1OCByYXRlKQoreworCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKKwkJcmV0dXJuIENSX1JBVEVfMU07CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1COgorCQlyZXR1cm4gQ1JfUkFURV81XzVNOworCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzExTUI6CisJCXJldHVybiBDUl9SQVRFXzExTTsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COgorCQlyZXR1cm4gQ1JfUkFURV82TTsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgorCQlyZXR1cm4gQ1JfUkFURV85TTsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQjoKKwkJcmV0dXJuIENSX1JBVEVfMTJNOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgorCQlyZXR1cm4gQ1JfUkFURV8xOE07CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUI6CisJCXJldHVybiBDUl9SQVRFXzI0TTsKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQjoKKwkJcmV0dXJuIENSX1JBVEVfMzZNOworCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgorCQlyZXR1cm4gQ1JfUkFURV80OE07CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUI6CisJCXJldHVybiBDUl9SQVRFXzU0TTsKKwl9CisJcmV0dXJuIENSX1JBVEVfMU07Cit9CisKK3N0YXRpYyB2b2lkIHRyeV9lbmFibGVfdHgoc3RydWN0IHpkX21hYyAqbWFjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJaWYgKG1hYy0+dXBkYXRpbmdfcnRzX3JhdGUgPT0gMCAmJiBtYWMtPnVwZGF0aW5nX2Jhc2ljX3JhdGVzID09IDApCisJCW5ldGlmX3dha2VfcXVldWUobWFjLT5uZXRkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcnRzX2N0c193b3JrKHZvaWQgKmQpCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHJ0c19yYXRlOworCXVuc2lnbmVkIGludCBzaG9ydF9wcmVhbWJsZTsKKworCW11dGV4X2xvY2soJm1hYy0+Y2hpcC5tdXRleCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJbWFjLT51cGRhdGluZ19ydHNfcmF0ZSA9IDA7CisJcnRzX3JhdGUgPSBtYWMtPnJ0c19yYXRlOworCXNob3J0X3ByZWFtYmxlID0gbWFjLT5zaG9ydF9wcmVhbWJsZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKworCXpkX2NoaXBfc2V0X3J0c19jdHNfcmF0ZV9sb2NrZWQoJm1hYy0+Y2hpcCwgcnRzX3JhdGUsIHNob3J0X3ByZWFtYmxlKTsKKwltdXRleF91bmxvY2soJm1hYy0+Y2hpcC5tdXRleCk7CisKKwl0cnlfZW5hYmxlX3R4KG1hYyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9iYXNpY19yYXRlc193b3JrKHZvaWQgKmQpCit7CisJc3RydWN0IHpkX21hYyAqbWFjID0gZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBiYXNpY19yYXRlczsKKworCW11dGV4X2xvY2soJm1hYy0+Y2hpcC5tdXRleCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJbWFjLT51cGRhdGluZ19iYXNpY19yYXRlcyA9IDA7CisJYmFzaWNfcmF0ZXMgPSBtYWMtPmJhc2ljX3JhdGVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCisJemRfY2hpcF9zZXRfYmFzaWNfcmF0ZXNfbG9ja2VkKCZtYWMtPmNoaXAsIGJhc2ljX3JhdGVzKTsKKwltdXRleF91bmxvY2soJm1hYy0+Y2hpcC5tdXRleCk7CisKKwl0cnlfZW5hYmxlX3R4KG1hYyk7Cit9CisKK3N0YXRpYyB2b2lkIGJzc2luZm9fY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBjaGFuZ2VzKQoreworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX25ldGRldl9tYWMobmV0ZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNvZnRtYWMgPSBpZWVlODAyMTFfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Jzc19pbmZvICpic3NpbmZvID0gJnNvZnRtYWMtPmJzc2luZm87CisJaW50IG5lZWRfc2V0X3J0c19jdHMgPSAwOworCWludCBuZWVkX3NldF9yYXRlcyA9IDA7CisJdTE2IGJhc2ljX3JhdGVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiY2hhbmdlczogJXhcbiIsIGNoYW5nZXMpOworCisJaWYgKGNoYW5nZXMgJiBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfU0hPUlRfUFJFQU1CTEUpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQltYWMtPnNob3J0X3ByZWFtYmxlID0gYnNzaW5mby0+c2hvcnRfcHJlYW1ibGU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCQluZWVkX3NldF9ydHNfY3RzID0gMTsKKwl9CisKKwlpZiAoY2hhbmdlcyAmIElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIR19SQVRFUykgeworCQkvKiBTZXQgUlRTIHJhdGUgdG8gaGlnaGVzdCBhdmFpbGFibGUgYmFzaWMgcmF0ZSAqLworCQl1OCByYXRlID0gaWVlZTgwMjExc29mdG1hY19oaWdoZXN0X3N1cHBvcnRlZF9yYXRlKHNvZnRtYWMsCisJCQkmYnNzaW5mby0+c3VwcG9ydGVkX3JhdGVzLCAxKTsKKwkJcmF0ZSA9IHJhdGVfdG9femRfcmF0ZShyYXRlKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCWlmIChyYXRlICE9IG1hYy0+cnRzX3JhdGUpIHsKKwkJCW1hYy0+cnRzX3JhdGUgPSByYXRlOworCQkJbmVlZF9zZXRfcnRzX2N0cyA9IDE7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisKKwkJLyogU2V0IGJhc2ljIHJhdGVzICovCisJCW5lZWRfc2V0X3JhdGVzID0gMTsKKwkJaWYgKGJzc2luZm8tPnN1cHBvcnRlZF9yYXRlcy5jb3VudCA9PSAwKSB7CisJCQkvKiBBbGxvdyB0aGUgZGV2aWNlIHRvIGJlIGZsZXhpYmxlICovCisJCQliYXNpY19yYXRlcyA9IENSX1JBVEVTXzgwMjExQiB8IENSX1JBVEVTXzgwMjExRzsKKwkJfSBlbHNlIHsKKwkJCWludCBpID0gMDsKKwkJCWJhc2ljX3JhdGVzID0gMDsKKworCQkJZm9yIChpID0gMDsgaSA8IGJzc2luZm8tPnN1cHBvcnRlZF9yYXRlcy5jb3VudDsgaSsrKSB7CisJCQkJdTE2IHJhdGUgPSBic3NpbmZvLT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXNbaV07CisJCQkJaWYgKChyYXRlICYgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSykgPT0gMCkKKwkJCQkJY29udGludWU7CisKKwkJCQlyYXRlICY9IH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLOworCQkJCWJhc2ljX3JhdGVzIHw9IHJhdGVfdG9fY3JfcmF0ZShyYXRlKTsKKwkJCX0KKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJCW1hYy0+YmFzaWNfcmF0ZXMgPSBiYXNpY19yYXRlczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CisJfQorCisJLyogU2NoZWR1bGUgYW55IGNoYW5nZXMgd2UgbWFkZSBhYm92ZSAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOworCWlmIChuZWVkX3NldF9ydHNfY3RzICYmICFtYWMtPnVwZGF0aW5nX3J0c19yYXRlKSB7CisJCW1hYy0+dXBkYXRpbmdfcnRzX3JhdGUgPSAxOworCQluZXRpZl9zdG9wX3F1ZXVlKG1hYy0+bmV0ZGV2KTsKKwkJcXVldWVfd29yayh6ZF93b3JrcXVldWUsICZtYWMtPnNldF9ydHNfY3RzX3dvcmspOworCX0KKwlpZiAobmVlZF9zZXRfcmF0ZXMgJiYgIW1hYy0+dXBkYXRpbmdfYmFzaWNfcmF0ZXMpIHsKKwkJbWFjLT51cGRhdGluZ19iYXNpY19yYXRlcyA9IDE7CisJCW5ldGlmX3N0b3BfcXVldWUobWFjLT5uZXRkZXYpOworCQlxdWV1ZV93b3JrKHpkX3dvcmtxdWV1ZSwgJm1hYy0+c2V0X2Jhc2ljX3JhdGVzX3dvcmspOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgc2V0X2NoYW5uZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTggY2hhbm5lbCkKIHsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9uZXRkZXZfbWFjKG5ldGRldik7CkBAIC0yOTUsNyArNDg2LDYgQEAKIAl6ZF9jaGlwX3NldF9jaGFubmVsKCZtYWMtPmNoaXAsIGNoYW5uZWwpOwogfQogCi0vKiBUT0RPOiBTaG91bGQgbm90IHdvcmsgaW4gTWFuYWdlZCBtb2RlLiAqLwogaW50IHpkX21hY19yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IHpkX21hYyAqbWFjLCB1OCBjaGFubmVsKQogewogCXVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKQEAgLTMxNywzMSArNTA3LDIyIEBACiAJCXJldHVybiAwOwogfQogCi1pbnQgemRfbWFjX2dldF9jaGFubmVsKHN0cnVjdCB6ZF9tYWMgKm1hYywgdTggKmNoYW5uZWwsIHU4ICpmbGFncykKK3U4IHpkX21hY19nZXRfY2hhbm5lbChzdHJ1Y3QgemRfbWFjICptYWMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSB6ZF9tYWNfdG9faWVlZTgwMjExKG1hYyk7CisJdTggY2hhbm5lbCA9IHpkX2NoaXBfZ2V0X2NoYW5uZWwoJm1hYy0+Y2hpcCk7CiAKLQkqY2hhbm5lbCA9IHpkX2NoaXBfZ2V0X2NoYW5uZWwoJm1hYy0+Y2hpcCk7Ci0JaWYgKGllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSkgewotCQlzcGluX2xvY2tfaXJxKCZtYWMtPmxvY2spOwotCQkqZmxhZ3MgPSAqY2hhbm5lbCA9PSBtYWMtPnJlcXVlc3RlZF9jaGFubmVsID8KLQkJCU1BQ19GSVhFRF9DSEFOTkVMIDogMDsKLQkJc3Bpbl91bmxvY2soJm1hYy0+bG9jayk7Ci0JfSBlbHNlIHsKLQkJKmZsYWdzID0gMDsKLQl9Ci0JZGV2X2RiZ19mKHpkX21hY19kZXYobWFjKSwgImNoYW5uZWwgJXUgZmxhZ3MgJXVcbiIsICpjaGFubmVsLCAqZmxhZ3MpOwotCXJldHVybiAwOworCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJjaGFubmVsICV1XG4iLCBjaGFubmVsKTsKKwlyZXR1cm4gY2hhbm5lbDsKIH0KIAogLyogSWYgd3JvbmcgcmF0ZSBpcyBnaXZlbiwgd2UgYXJlIGZhbGxpbmcgYmFjayB0byB0aGUgc2xvd2VzdCByYXRlOiAxTUJpdC9zICovCi1zdGF0aWMgdTggY3NfdHlwZWRfcmF0ZSh1OCBjc19yYXRlKQorc3RhdGljIHU4IHpkX3JhdGVfdHlwZWQodTggemRfcmF0ZSkKIHsKIAlzdGF0aWMgY29uc3QgdTggdHlwZWRfcmF0ZXNbMTZdID0gewotCQlbWkRfQ1NfQ0NLX1JBVEVfMU1dCT0gWkRfQ1NfQ0NLfFpEX0NTX0NDS19SQVRFXzFNLAotCQlbWkRfQ1NfQ0NLX1JBVEVfMk1dCT0gWkRfQ1NfQ0NLfFpEX0NTX0NDS19SQVRFXzJNLAotCQlbWkRfQ1NfQ0NLX1JBVEVfNV81TV0JPSBaRF9DU19DQ0t8WkRfQ1NfQ0NLX1JBVEVfNV81TSwKLQkJW1pEX0NTX0NDS19SQVRFXzExTV0JPSBaRF9DU19DQ0t8WkRfQ1NfQ0NLX1JBVEVfMTFNLAorCQlbWkRfQ0NLX1JBVEVfMU1dCT0gWkRfQ1NfQ0NLfFpEX0NDS19SQVRFXzFNLAorCQlbWkRfQ0NLX1JBVEVfMk1dCT0gWkRfQ1NfQ0NLfFpEX0NDS19SQVRFXzJNLAorCQlbWkRfQ0NLX1JBVEVfNV81TV0JPSBaRF9DU19DQ0t8WkRfQ0NLX1JBVEVfNV81TSwKKwkJW1pEX0NDS19SQVRFXzExTV0JPSBaRF9DU19DQ0t8WkRfQ0NLX1JBVEVfMTFNLAogCQlbWkRfT0ZETV9SQVRFXzZNXQk9IFpEX0NTX09GRE18WkRfT0ZETV9SQVRFXzZNLAogCQlbWkRfT0ZETV9SQVRFXzlNXQk9IFpEX0NTX09GRE18WkRfT0ZETV9SQVRFXzlNLAogCQlbWkRfT0ZETV9SQVRFXzEyTV0JPSBaRF9DU19PRkRNfFpEX09GRE1fUkFURV8xMk0sCkBAIC0zNTMsMzcgKzUzNCw3IEBACiAJfTsKIAogCVpEX0FTU0VSVChaRF9DU19SQVRFX01BU0sgPT0gMHgwZik7Ci0JcmV0dXJuIHR5cGVkX3JhdGVzW2NzX3JhdGUgJiBaRF9DU19SQVRFX01BU0tdOwotfQotCi0vKiBGYWxsYmFjayB0byBsb3dlc3QgcmF0ZSwgaWYgcmF0ZSBpcyB1bmtub3duLiAqLwotc3RhdGljIHU4IHJhdGVfdG9fY3NfcmF0ZSh1OCByYXRlKQotewotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKLQkJcmV0dXJuIFpEX0NTX0NDS19SQVRFXzJNOwotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzVNQjoKLQkJcmV0dXJuIFpEX0NTX0NDS19SQVRFXzVfNU07Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjoKLQkJcmV0dXJuIFpEX0NTX0NDS19SQVRFXzExTTsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1COgotCQlyZXR1cm4gWkRfT0ZETV9SQVRFXzZNOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV85TUI6Ci0JCXJldHVybiBaRF9PRkRNX1JBVEVfOU07Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUI6Ci0JCXJldHVybiBaRF9PRkRNX1JBVEVfMTJNOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgotCQlyZXR1cm4gWkRfT0ZETV9SQVRFXzE4TTsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQjoKLQkJcmV0dXJuIFpEX09GRE1fUkFURV8yNE07Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUI6Ci0JCXJldHVybiBaRF9PRkRNX1JBVEVfMzZNOwotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgotCQlyZXR1cm4gWkRfT0ZETV9SQVRFXzQ4TTsKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQjoKLQkJcmV0dXJuIFpEX09GRE1fUkFURV81NE07Ci0JfQotCXJldHVybiBaRF9DU19DQ0tfUkFURV8xTTsKKwlyZXR1cm4gdHlwZWRfcmF0ZXNbemRfcmF0ZSAmIFpEX0NTX1JBVEVfTUFTS107CiB9CiAKIGludCB6ZF9tYWNfc2V0X21vZGUoc3RydWN0IHpkX21hYyAqbWFjLCB1MzIgbW9kZSkKQEAgLTQ4NCwxMyArNjM1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgemRfY2FsY190eF9sZW5ndGhfdXModTggKnNlcnZpY2UsIHU4IGNzX3JhdGUsIHUxNiB0eF9sZW5ndGgpCitzdGF0aWMgaW50IHpkX2NhbGNfdHhfbGVuZ3RoX3VzKHU4ICpzZXJ2aWNlLCB1OCB6ZF9yYXRlLCB1MTYgdHhfbGVuZ3RoKQogewogCXN0YXRpYyBjb25zdCB1OCByYXRlX2Rpdmlzb3JbXSA9IHsKLQkJW1pEX0NTX0NDS19SQVRFXzFNXQk9ICAxLAotCQlbWkRfQ1NfQ0NLX1JBVEVfMk1dCT0gIDIsCi0JCVtaRF9DU19DQ0tfUkFURV81XzVNXQk9IDExLCAvKiBiaXRzIG11c3QgYmUgZG91YmxlZCAqLwotCQlbWkRfQ1NfQ0NLX1JBVEVfMTFNXQk9IDExLAorCQlbWkRfQ0NLX1JBVEVfMU1dCT0gIDEsCisJCVtaRF9DQ0tfUkFURV8yTV0JPSAgMiwKKwkJW1pEX0NDS19SQVRFXzVfNU1dCT0gMTEsIC8qIGJpdHMgbXVzdCBiZSBkb3VibGVkICovCisJCVtaRF9DQ0tfUkFURV8xMU1dCT0gMTEsCiAJCVtaRF9PRkRNX1JBVEVfNk1dCT0gIDYsCiAJCVtaRF9PRkRNX1JBVEVfOU1dCT0gIDksCiAJCVtaRF9PRkRNX1JBVEVfMTJNXQk9IDEyLApAQCAtNTA0LDE1ICs2NTUsMTUgQEAKIAl1MzIgYml0cyA9ICh1MzIpdHhfbGVuZ3RoICogODsKIAl1MzIgZGl2aXNvcjsKIAotCWRpdmlzb3IgPSByYXRlX2Rpdmlzb3JbY3NfcmF0ZV07CisJZGl2aXNvciA9IHJhdGVfZGl2aXNvclt6ZF9yYXRlXTsKIAlpZiAoZGl2aXNvciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN3aXRjaCAoY3NfcmF0ZSkgewotCWNhc2UgWkRfQ1NfQ0NLX1JBVEVfNV81TToKKwlzd2l0Y2ggKHpkX3JhdGUpIHsKKwljYXNlIFpEX0NDS19SQVRFXzVfNU06CiAJCWJpdHMgPSAoMipiaXRzKSArIDEwOyAvKiByb3VuZCB1cCB0byB0aGUgbmV4dCBpbnRlZ2VyICovCiAJCWJyZWFrOwotCWNhc2UgWkRfQ1NfQ0NLX1JBVEVfMTFNOgorCWNhc2UgWkRfQ0NLX1JBVEVfMTFNOgogCQlpZiAoc2VydmljZSkgewogCQkJdTMyIHQgPSBiaXRzICUgMTE7CiAJCQkqc2VydmljZSAmPSB+WkRfUExDUF9TRVJWSUNFX0xFTkdUSF9FWFRFTlNJT047CkBAIC01MzIsMTYgKzY4MywxNiBAQAogCVIyTV8xMUEJCSAgID0gMHgwMiwKIH07CiAKLXN0YXRpYyB1OCBjc19yYXRlX3RvX21vZHVsYXRpb24odTggY3NfcmF0ZSwgaW50IGZsYWdzKQorc3RhdGljIHU4IHpkX3JhdGVfdG9fbW9kdWxhdGlvbih1OCB6ZF9yYXRlLCBpbnQgZmxhZ3MpCiB7CiAJdTggbW9kdWxhdGlvbjsKIAotCW1vZHVsYXRpb24gPSBjc190eXBlZF9yYXRlKGNzX3JhdGUpOworCW1vZHVsYXRpb24gPSB6ZF9yYXRlX3R5cGVkKHpkX3JhdGUpOwogCWlmIChmbGFncyAmIFIyTV9TSE9SVF9QUkVBTUJMRSkgewogCQlzd2l0Y2ggKFpEX0NTX1JBVEUobW9kdWxhdGlvbikpIHsKLQkJY2FzZSBaRF9DU19DQ0tfUkFURV8yTToKLQkJY2FzZSBaRF9DU19DQ0tfUkFURV81XzVNOgotCQljYXNlIFpEX0NTX0NDS19SQVRFXzExTToKKwkJY2FzZSBaRF9DQ0tfUkFURV8yTToKKwkJY2FzZSBaRF9DQ0tfUkFURV81XzVNOgorCQljYXNlIFpEX0NDS19SQVRFXzExTToKIAkJCW1vZHVsYXRpb24gfD0gWkRfQ1NfQ0NLX1BSRUFfU0hPUlQ7CiAJCQlyZXR1cm4gbW9kdWxhdGlvbjsKIAkJfQpAQCAtNTU4LDM5ICs3MDksMzYgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNvZnRtYWMgPSBpZWVlODAyMTFfcHJpdihtYWMtPm5ldGRldik7CiAJdTE2IGZ0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpOwotCXU4IHJhdGUsIGNzX3JhdGU7CisJdTggcmF0ZSwgemRfcmF0ZTsKIAlpbnQgaXNfbWd0ID0gKGZ0eXBlID09IElFRUU4MDIxMV9GVFlQRV9NR01UKSAhPSAwOworCWludCBpc19tdWx0aWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKKwlpbnQgc2hvcnRfcHJlYW1ibGUgPSBpZWVlODAyMTFzb2Z0bWFjX3Nob3J0X3ByZWFtYmxlX29rKHNvZnRtYWMsCisJCWlzX211bHRpY2FzdCwgaXNfbWd0KTsKKwlpbnQgZmxhZ3MgPSAwOwogCi0JLyogRklYTUU6IDgwMi4xMWE/IHNob3J0IHByZWFtYmxlPyAqLwotCXJhdGUgPSBpZWVlODAyMTFzb2Z0bWFjX3N1Z2dlc3RfdHhyYXRlKHNvZnRtYWMsCi0JCWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpLCBpc19tZ3QpOworCS8qIEZJWE1FOiA4MDIuMTFhPyAqLworCXJhdGUgPSBpZWVlODAyMTFzb2Z0bWFjX3N1Z2dlc3RfdHhyYXRlKHNvZnRtYWMsIGlzX211bHRpY2FzdCwgaXNfbWd0KTsKIAotCWNzX3JhdGUgPSByYXRlX3RvX2NzX3JhdGUocmF0ZSk7Ci0JY3MtPm1vZHVsYXRpb24gPSBjc19yYXRlX3RvX21vZHVsYXRpb24oY3NfcmF0ZSwgMCk7CisJaWYgKHNob3J0X3ByZWFtYmxlKQorCQlmbGFncyB8PSBSMk1fU0hPUlRfUFJFQU1CTEU7CisKKwl6ZF9yYXRlID0gcmF0ZV90b196ZF9yYXRlKHJhdGUpOworCWNzLT5tb2R1bGF0aW9uID0gemRfcmF0ZV90b19tb2R1bGF0aW9uKHpkX3JhdGUsIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgY3Nfc2V0X2NvbnRyb2woc3RydWN0IHpkX21hYyAqbWFjLCBzdHJ1Y3QgemRfY3RybHNldCAqY3MsCiAJICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIpCiB7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICpzb2Z0bWFjID0gaWVlZTgwMjExX3ByaXYobWFjLT5uZXRkZXYpOwogCXVuc2lnbmVkIGludCB0eF9sZW5ndGggPSBsZTE2X3RvX2NwdShjcy0+dHhfbGVuZ3RoKTsKIAl1MTYgZmN0bCA9IGxlMTZfdG9fY3B1KGhlYWRlci0+ZnJhbWVfY3RsKTsKIAl1MTYgZnR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjdGwpOwogCXUxNiBzdHlwZSA9IFdMQU5fRkNfR0VUX1NUWVBFKGZjdGwpOwogCiAJLyoKLQkgKiBDT05UUk9MOgotCSAqIC0gc3RhcnQgYXQgMHgwMAotCSAqIC0gaWYgZnJhZ21lbnQgMCwgZW5hYmxlIGJpdCAwCisJICogQ09OVFJPTCBUT0RPOgogCSAqIC0gaWYgYmFja29mZiBuZWVkZWQsIGVuYWJsZSBiaXQgMAogCSAqIC0gaWYgYnVyc3QgKGJhY2tvZmYgbm90IG5lZWRlZCkgZGlzYWJsZSBiaXQgMAotCSAqIC0gaWYgbXVsdGljYXN0LCBlbmFibGUgYml0IDEKLQkgKiAtIGlmIFBTLVBPTEwgZnJhbWUsIGVuYWJsZSBiaXQgMgotCSAqIC0gaWYgaW4gSU5ERVBFTkRFTlRfQlNTIG1vZGUgYW5kIHpkMTIwNV9EZXN0UG93ZXJTYXZlLCB0aGVuIGVuYWJsZQotCSAqICAgYml0IDQgKEZJWE1FOiB3dGYpCi0JICogLSBpZiBmcmFnX2xlbiA+IFJUUyB0aHJlc2hvbGQsIHNldCBiaXQgNSBhcyBsb25nIGlmIGl0IGlzbnQKLQkgKiAgIG11bHRpY2FzdCBvciBtZ3QKLQkgKiAtIGlmIGJpdCA1IGlzIHNldCwgYW5kIHdlIGFyZSBpbiBPRkRNIG1vZGUsIHVuc2V0IGJpdCA1IGFuZCBzZXQgYml0Ci0JICogICA3CiAJICovCiAKIAljcy0+Y29udHJvbCA9IDA7CkBAIC02MDcsMTcgKzc1NSwxOCBAQAogCWlmIChzdHlwZSA9PSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKQogCQljcy0+Y29udHJvbCB8PSBaRF9DU19QU19QT0xMX0ZSQU1FOwogCisJLyogVW5pY2FzdCBkYXRhIGZyYW1lcyBvdmVyIHRoZSB0aHJlc2hvbGQgc2hvdWxkIGhhdmUgUlRTICovCiAJaWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZWFkZXItPmFkZHIxKSAmJgotCSAgICBmdHlwZSAhPSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgotCSAgICB0eF9sZW5ndGggPiB6ZF9uZXRkZXZfaWVlZTgwMjExKG1hYy0+bmV0ZGV2KS0+cnRzKQotCXsKLQkJLyogRklYTUU6IGNoZWNrIHRoZSBsb2dpYyAqLwotCQlpZiAoWkRfQ1NfVFlQRShjcy0+bW9kdWxhdGlvbikgPT0gWkRfQ1NfT0ZETSkgewotCQkJLyogODAyLjExZyAqLwotCQkJY3MtPmNvbnRyb2wgfD0gWkRfQ1NfU0VMRl9DVFM7Ci0JCX0gZWxzZSB7IC8qIDgwMi4xMWIgKi8KLQkJCWNzLT5jb250cm9sIHw9IFpEX0NTX1JUUzsKLQkJfQorCSAgICAJZnR5cGUgIT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgJiYKKwkJICAgIHR4X2xlbmd0aCA+IHpkX25ldGRldl9pZWVlODAyMTEobWFjLT5uZXRkZXYpLT5ydHMpCisJCWNzLT5jb250cm9sIHw9IFpEX0NTX1JUUzsKKworCS8qIFVzZSBDVFMtdG8tc2VsZiBwcm90ZWN0aW9uIGlmIHJlcXVpcmVkICovCisJaWYgKFpEX0NTX1RZUEUoY3MtPm1vZHVsYXRpb24pID09IFpEX0NTX09GRE0gJiYKKwkJCWllZWU4MDIxMXNvZnRtYWNfcHJvdGVjdGlvbl9uZWVkZWQoc29mdG1hYykpIHsKKwkJLyogRklYTUU6IGF2b2lkIHNlbmRpbmcgUlRTICphbmQqIHNlbGYtQ1RTLCBpcyB0aGF0IGNvcnJlY3Q/ICovCisJCWNzLT5jb250cm9sICY9IH5aRF9DU19SVFM7CisJCWNzLT5jb250cm9sIHw9IFpEX0NTX1NFTEZfQ1RTOwogCX0KIAogCS8qIEZJWE1FOiBNYW5hZ2VtZW50IGZyYW1lPyAqLwpAQCAtNzIxLDcgKzg3MCw3IEBACiAJdTggIHJ0X3JhdGU7CiAJdTE2IHJ0X2NoYW5uZWw7CiAJdTE2IHJ0X2NoYml0bWFzazsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgdm9pZCBmaWxsX3J0X2hlYWRlcih2b2lkICpidWZmZXIsIHN0cnVjdCB6ZF9tYWMgKm1hYywKIAkgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMsCkBAIC03ODIsOSArOTMxLDExIEBACiAJICAgICAgIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpOwogfQogCi0vKiBGaWx0ZXJzIHJlY2VpdmluZyBwYWNrZXRzLiBJZiBpdCByZXR1cm5zIDEgc2VuZCBpdCB0byBpZWVlODAyMTFfcngsIGlmIDAKLSAqIHJldHVybi4gSWYgYW4gZXJyb3IgaXMgZGV0ZWN0ZWQgLUVJTlZBTCBpcyByZXR1cm5lZC4gaWVlZTgwMjExX3J4X21ndCgpIGlzCi0gKiBjYWxsZWQgaGVyZS4KKy8qIEZpbHRlcnMgcmVjZWl2ZWQgcGFja2V0cy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgMSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZQorICogZm9yd2FyZGVkIHRvIGllZWU4MDIxMV9yeCgpLiBJZiB0aGUgcGFja2V0IHNob3VsZCBiZSBpZ25vcmVkIHRoZSBmdW5jdGlvbgorICogcmV0dXJucyAwLiBJZiBhbiBpbnZhbGlkIHBhY2tldCBpcyBmb3VuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyAtRUlOVkFMLgorICoKKyAqIFRoZSBmdW5jdGlvbiBjYWxscyBpZWVlODAyMTFfcnhfbWd0KCkgZGlyZWN0bHkuCiAgKgogICogSXQgaGFzIGJlZW4gYmFzZWQgb24gaWVlZTgwMjExX3J4X2FueS4KICAqLwpAQCAtODEwLDkgKzk2MSw5IEBACiAJCWllZWU4MDIxMV9yeF9tZ3QoaWVlZSwgaGRyLCBzdGF0cyk7CiAJCXJldHVybiAwOwogCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJLyogSWdub3JlIGludmFsaWQgc2hvcnQgYnVmZmVycyAqLwogCQlyZXR1cm4gMDsKIAljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgorCQkvKiBJZ25vcmUgaW52YWxpZCBzaG9ydCBidWZmZXJzICovCiAJCWlmIChsZW5ndGggPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBpc19kYXRhX3BhY2tldF9mb3JfdXMoaWVlZSwgaGRyKTsKQEAgLTk5Myw2ICsxMTQ0LDcgQEAKIHN0YXRpYyB2b2lkIHNvZnRtYWNfaW5pdChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKQogewogCXNtLT5zZXRfY2hhbm5lbCA9IHNldF9jaGFubmVsOworCXNtLT5ic3NpbmZvX2NoYW5nZSA9IGJzc2luZm9fY2hhbmdlOwogfQogCiBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqemRfbWFjX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKQEAgLTEwMjgsNjYgKzExODAsNiBAQAogCXJldHVybiBpd19zdGF0czsKIH0KIAotI2lmZGVmIERFQlVHCi1zdGF0aWMgY29uc3QgY2hhciogZGVjcnlwdGlvbl90eXBlc1tdID0gewotCVtaRF9SWF9OT19XRVBdID0gIm5vbmUiLAotCVtaRF9SWF9XRVA2NF0gPSAiV0VQNjQiLAotCVtaRF9SWF9US0lQXSA9ICJUS0lQIiwKLQlbWkRfUlhfQUVTXSA9ICJBRVMiLAotCVtaRF9SWF9XRVAxMjhdID0gIldFUDEyOCIsCi0JW1pEX1JYX1dFUDI1Nl0gPSAiV0VQMjU2IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZWNyeXB0aW9uX3R5cGVfc3RyaW5nKHU4IHR5cGUpCi17Ci0JY29uc3QgY2hhciAqczsKLQotCWlmICh0eXBlIDwgQVJSQVlfU0laRShkZWNyeXB0aW9uX3R5cGVzKSkgewotCQlzID0gZGVjcnlwdGlvbl90eXBlc1t0eXBlXTsKLQl9IGVsc2UgewotCQlzID0gTlVMTDsKLQl9Ci0JcmV0dXJuIHMgPyBzIDogInVua25vd24iOwotfQotCi1zdGF0aWMgaW50IGlzX29mZG0odTggZnJhbWVfc3RhdHVzKQotewotCXJldHVybiAoZnJhbWVfc3RhdHVzICYgWkRfUlhfT0ZETSk7Ci19Ci0KLXZvaWQgemRfZHVtcF9yeF9zdGF0dXMoY29uc3Qgc3RydWN0IHJ4X3N0YXR1cyAqc3RhdHVzKQotewotCWNvbnN0IGNoYXIqIG1vZHVsYXRpb247Ci0JdTggcXVhbGl0eTsKLQotCWlmIChpc19vZmRtKHN0YXR1cy0+ZnJhbWVfc3RhdHVzKSkgewotCQltb2R1bGF0aW9uID0gIm9mZG0iOwotCQlxdWFsaXR5ID0gc3RhdHVzLT5zaWduYWxfcXVhbGl0eV9vZmRtOwotCX0gZWxzZSB7Ci0JCW1vZHVsYXRpb24gPSAiY2NrIjsKLQkJcXVhbGl0eSA9IHN0YXR1cy0+c2lnbmFsX3F1YWxpdHlfY2NrOwotCX0KLQlwcl9kZWJ1Zygicnggc3RhdHVzICVzIHN0cmVuZ3RoICUjMDR4IHF1YWwgJSMwNHggZGVjcnlwdGlvbiAlc1xuIiwKLQkJbW9kdWxhdGlvbiwgc3RhdHVzLT5zaWduYWxfc3RyZW5ndGgsIHF1YWxpdHksCi0JCWRlY3J5cHRpb25fdHlwZV9zdHJpbmcoc3RhdHVzLT5kZWNyeXB0aW9uX3R5cGUpKTsKLQlpZiAoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9FUlJPUikgewotCQlwcl9kZWJ1ZygicnggZXJyb3IgJXMlcyVzJXMlcyVzXG4iLAotCQkJKHN0YXR1cy0+ZnJhbWVfc3RhdHVzICYgWkRfUlhfVElNRU9VVF9FUlJPUikgPwotCQkJCSJ0aW1lb3V0ICIgOiAiIiwKLQkJCShzdGF0dXMtPmZyYW1lX3N0YXR1cyAmIFpEX1JYX0ZJRk9fT1ZFUlJVTl9FUlJPUikgPwotCQkJCSJmaWZvICIgOiAiIiwKLQkJCShzdGF0dXMtPmZyYW1lX3N0YXR1cyAmIFpEX1JYX0RFQ1JZUFRJT05fRVJST1IpID8KLQkJCQkiZGVjcnlwdGlvbiAiIDogIiIsCi0JCQkoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9DUkMzMl9FUlJPUikgPwotCQkJCSJjcmMzMiAiIDogIiIsCi0JCQkoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9OT19BRERSMV9NQVRDSF9FUlJPUikgPwotCQkJCSJhZGRyMSAiIDogIiIsCi0JCQkoc3RhdHVzLT5mcmFtZV9zdGF0dXMgJiBaRF9SWF9DUkMxNl9FUlJPUikgPwotCQkJCSJjcmMxNiIgOiAiIik7Ci0JfQotfQotI2VuZGlmIC8qIERFQlVHICovCi0KICNkZWZpbmUgTElOS19MRURfV09SS19ERUxBWSBIWgogCiBzdGF0aWMgdm9pZCBsaW5rX2xlZF9oYW5kbGVyKHZvaWQgKnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCmluZGV4IGI4ZWEzZGUuLjVkY2ZiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExc29mdG1hYy5oPgogCkBAIC00OCwxMCArNDksMTEgQEAKICNkZWZpbmUgWkRfQ1NfQ0NLCQkweDAwCiAjZGVmaW5lIFpEX0NTX09GRE0JCTB4MTAKIAotI2RlZmluZSBaRF9DU19DQ0tfUkFURV8xTQkweDAwCi0jZGVmaW5lIFpEX0NTX0NDS19SQVRFXzJNCTB4MDEKLSNkZWZpbmUgWkRfQ1NfQ0NLX1JBVEVfNV81TQkweDAyCi0jZGVmaW5lIFpEX0NTX0NDS19SQVRFXzExTQkweDAzCisvKiBUaGVzZSBhcmUgcmVmZXJyZWQgdG8gYXMgemRfcmF0ZXMgKi8KKyNkZWZpbmUgWkRfQ0NLX1JBVEVfMU0JMHgwMAorI2RlZmluZSBaRF9DQ0tfUkFURV8yTQkweDAxCisjZGVmaW5lIFpEX0NDS19SQVRFXzVfNU0JMHgwMgorI2RlZmluZSBaRF9DQ0tfUkFURV8xMU0JMHgwMwogLyogVGhlIHJhdGVzIGZvciBPRkRNIGFyZSBlbmNvZGVkIGFzIGluIHRoZSBQTENQIGhlYWRlci4gVXNlIFpEX09GRE1fUkFURV8qLgogICovCiAKQEAgLTgyLDcgKzg0LDcgQEAKIHN0cnVjdCByeF9sZW5ndGhfaW5mbyB7CiAJX19sZTE2IGxlbmd0aFszXTsKIAlfX2xlMTYgdGFnOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNkZWZpbmUgUlhfTEVOR1RIX0lORk9fVEFHCQkweDY5N2UKIApAQCAtOTMsNyArOTUsNyBAQAogCXU4IHNpZ25hbF9xdWFsaXR5X29mZG07CiAJdTggZGVjcnlwdGlvbl90eXBlOwogCXU4IGZyYW1lX3N0YXR1czsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiByeF9zdGF0dXMgZmllbGQgZGVjcnlwdGlvbl90eXBlICovCiAjZGVmaW5lIFpEX1JYX05PX1dFUAkwCkBAIC0xMTYsMTAgKzExOCw2IEBACiAjZGVmaW5lIFpEX1JYX0NSQzE2X0VSUk9SCQkweDQwCiAjZGVmaW5lIFpEX1JYX0VSUk9SCQkJMHg4MAogCi1lbnVtIG1hY19mbGFncyB7Ci0JTUFDX0ZJWEVEX0NIQU5ORUwgPSAweDAxLAotfTsKLQogc3RydWN0IGhvdXNla2VlcGluZyB7CiAJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfbGVkX3dvcms7CiB9OwpAQCAtMTMwLDE1ICsxMjgsMzMgQEAKIAlzdHJ1Y3QgemRfY2hpcCBjaGlwOwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCiAJLyogVW5sb2NrZWQgcmVhZGluZyBwb3NzaWJsZSAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOworCiAJc3RydWN0IGhvdXNla2VlcGluZyBob3VzZWtlZXBpbmc7CisJc3RydWN0IHdvcmtfc3RydWN0IHNldF9ydHNfY3RzX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHNldF9iYXNpY19yYXRlc193b3JrOworCiAJdW5zaWduZWQgaW50IHN0YXRzX2NvdW50OwogCXU4IHF1YWxfYnVmZmVyW1pEX01BQ19TVEFUU19CVUZGRVJfU0laRV07CiAJdTggcnNzaV9idWZmZXJbWkRfTUFDX1NUQVRTX0JVRkZFUl9TSVpFXTsKIAl1OCByZWdkb21haW47CiAJdTggZGVmYXVsdF9yZWdkb21haW47CiAJdTggcmVxdWVzdGVkX2NoYW5uZWw7CisKKwkvKiBBIGJpdHBhdHRlcm4gb2YgY3JfcmF0ZXMgKi8KKwl1MTYgYmFzaWNfcmF0ZXM7CisKKwkvKiBBIHpkX3JhdGUgKi8KKwl1OCBydHNfcmF0ZTsKKworCS8qIFNob3J0IHByZWFtYmxlICh1c2VkIGZvciBSVFMvQ1RTKSAqLworCXVuc2lnbmVkIGludCBzaG9ydF9wcmVhbWJsZToxOworCisJLyogZmxhZ3MgdG8gaW5kaWNhdGUgdXBkYXRlIGluIHByb2dyZXNzICovCisJdW5zaWduZWQgaW50IHVwZGF0aW5nX3J0c19yYXRlOjE7CisJdW5zaWduZWQgaW50IHVwZGF0aW5nX2Jhc2ljX3JhdGVzOjE7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICp6ZF9tYWNfdG9faWVlZTgwMjExKHN0cnVjdCB6ZF9tYWMgKm1hYykKQEAgLTE4MCw3ICsxOTYsNyBAQAogdTggemRfbWFjX2dldF9yZWdkb21haW4oc3RydWN0IHpkX21hYyAqemRfbWFjKTsKIAogaW50IHpkX21hY19yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IHpkX21hYyAqbWFjLCB1OCBjaGFubmVsKTsKLWludCB6ZF9tYWNfZ2V0X2NoYW5uZWwoc3RydWN0IHpkX21hYyAqbWFjLCB1OCAqY2hhbm5lbCwgdTggKmZsYWdzKTsKK3U4IHpkX21hY19nZXRfY2hhbm5lbChzdHJ1Y3QgemRfbWFjICptYWMpOwogCiBpbnQgemRfbWFjX3NldF9tb2RlKHN0cnVjdCB6ZF9tYWMgKm1hYywgdTMyIG1vZGUpOwogaW50IHpkX21hY19nZXRfbW9kZShzdHJ1Y3QgemRfbWFjICptYWMsIHUzMiAqbW9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jCmluZGV4IGFmM2E3YjMuLjYwZjFiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jCkBAIC0xMDcsMjEgKzEwNywxMCBAQAogCSAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJICAgdW5pb24gaXdyZXFfZGF0YSAqcmVxLCBjaGFyICpleHRyYSkKIHsKLQlpbnQgcjsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9uZXRkZXZfbWFjKG5ldGRldik7CiAJc3RydWN0IGl3X2ZyZXEgKmZyZXEgPSAmcmVxLT5mcmVxOwotCXU4IGNoYW5uZWw7Ci0JdTggZmxhZ3M7CiAKLQlyID0gemRfbWFjX2dldF9jaGFubmVsKG1hYywgJmNoYW5uZWwsICZmbGFncyk7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCi0JZnJlcS0+ZmxhZ3MgPSAoZmxhZ3MgJiBNQUNfRklYRURfQ0hBTk5FTCkgPwotCQkgICAgICBJV19GUkVRX0ZJWEVEIDogSVdfRlJFUV9BVVRPOwotCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJjaGFubmVsICVzXG4iLAotCQkgIChmbGFncyAmIE1BQ19GSVhFRF9DSEFOTkVMKSA/ICJmaXhlZCIgOiAiYXV0byIpOwotCXJldHVybiB6ZF9jaGFubmVsX3RvX2ZyZXEoZnJlcSwgY2hhbm5lbCk7CisJcmV0dXJuIHpkX2NoYW5uZWxfdG9fZnJlcShmcmVxLCB6ZF9tYWNfZ2V0X2NoYW5uZWwobWFjKSk7CiB9CiAKIHN0YXRpYyBpbnQgaXdfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKaW5kZXggM2ZhYWViMi4uYWE3ODJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMKQEAgLTQ3LDExICs0NywxNyBAQAogCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDU2MzApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzBjKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDE0MzUsIDB4MDcxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MDkpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MGIzYiwgMHgxNjMwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGVhLCAweGFiMTMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJLyogWkQxMjExQiAqLwogCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MTIxNSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCiAJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBkKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzliLCAweDAwNjIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDE1ODIsIDB4NjAwMyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDVjKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKIAkvKiAiRHJpdmVybGVzcyIgZGV2aWNlcyB0aGF0IG5lZWQgZWplY3RpbmcgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDIwMTEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfSU5TVEFMTEVSIH0sCiAJe30KQEAgLTM2NiwxNSArMzcyLDYgQEAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgZGlzYWJsZV9yZWFkX3JlZ3NfaW50KHN0cnVjdCB6ZF91c2IgKnVzYikKLXsKLQlzdHJ1Y3QgemRfdXNiX2ludGVycnVwdCAqaW50ciA9ICZ1c2ItPmludHI7Ci0KLQlzcGluX2xvY2soJmludHItPmxvY2spOwotCWludHItPnJlYWRfcmVnc19lbmFibGVkID0gMDsKLQlzcGluX3VubG9jaygmaW50ci0+bG9jayk7Ci19Ci0KICNkZWZpbmUgdXJiX2Rldih1cmIpICgmKHVyYiktPmRldi0+ZGV2KQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX3JlZ3NfaW50KHN0cnVjdCB1cmIgKnVyYikKQEAgLTU5Niw2ICs1OTMsOCBAQAogCQl1bnNpZ25lZCBpbnQgbCwgaywgbjsKIAkJZm9yIChpID0gMCwgbCA9IDA7OyBpKyspIHsKIAkJCWsgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKCZsZW5ndGhfaW5mby0+bGVuZ3RoW2ldKSk7CisJCQlpZiAoayA9PSAwKQorCQkJCXJldHVybjsKIAkJCW4gPSBsK2s7CiAJCQlpZiAobiA+IGxlbmd0aCkKIAkJCQlyZXR1cm47CkBAIC0xMTE5LDI3ICsxMTE4LDI4IEBACiB7CiAJaW50IHI7CiAKLQlwcl9kZWJ1ZygidXNiX2luaXQoKVxuIik7CisJcHJfZGVidWcoIiVzIHVzYl9pbml0KClcbiIsIGRyaXZlci5uYW1lKTsKIAogCXpkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRyaXZlci5uYW1lKTsKIAlpZiAoemRfd29ya3F1ZXVlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgY3JlYXRlIHdvcmtxdWV1ZVxuIiwgZHJpdmVyLm5hbWUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzIGNvdWxkbid0IGNyZWF0ZSB3b3JrcXVldWVcbiIsIGRyaXZlci5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJciA9IHVzYl9yZWdpc3RlcigmZHJpdmVyKTsKIAlpZiAocikgewotCQlwcmludGsoS0VSTl9FUlIgInVzYl9yZWdpc3RlcigpIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkXG4iLCByKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyB1c2JfcmVnaXN0ZXIoKSBmYWlsZWQuIEVycm9yIG51bWJlciAlZFxuIiwKKwkJICAgICAgIGRyaXZlci5uYW1lLCByKTsKIAkJcmV0dXJuIHI7CiAJfQogCi0JcHJfZGVidWcoInpkMTIxMXJ3IGluaXRpYWxpemVkXG4iKTsKKwlwcl9kZWJ1ZygiJXMgaW5pdGlhbGl6ZWRcbiIsIGRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVzYl9leGl0KHZvaWQpCiB7Ci0JcHJfZGVidWcoInVzYl9leGl0KClcbiIpOworCXByX2RlYnVnKCIlcyB1c2JfZXhpdCgpXG4iLCBkcml2ZXIubmFtZSk7CiAJdXNiX2RlcmVnaXN0ZXIoJmRyaXZlcik7CiAJZGVzdHJveV93b3JrcXVldWUoemRfd29ya3F1ZXVlKTsKIH0KQEAgLTExNTYsMTAgKzExNTYsMTkgQEAKIHsKIAlzdHJ1Y3QgemRfdXNiX2ludGVycnVwdCAqaW50ciA9ICZ1c2ItPmludHI7CiAKLQlzcGluX2xvY2soJmludHItPmxvY2spOworCXNwaW5fbG9ja19pcnEoJmludHItPmxvY2spOwogCWludHItPnJlYWRfcmVnc19lbmFibGVkID0gMTsKIAlJTklUX0NPTVBMRVRJT04oaW50ci0+cmVhZF9yZWdzLmNvbXBsZXRpb24pOwotCXNwaW5fdW5sb2NrKCZpbnRyLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmludHItPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3JlYWRfcmVnc19pbnQoc3RydWN0IHpkX3VzYiAqdXNiKQoreworCXN0cnVjdCB6ZF91c2JfaW50ZXJydXB0ICppbnRyID0gJnVzYi0+aW50cjsKKworCXNwaW5fbG9ja19pcnEoJmludHItPmxvY2spOworCWludHItPnJlYWRfcmVnc19lbmFibGVkID0gMDsKKwlzcGluX3VubG9ja19pcnEoJmludHItPmxvY2spOwogfQogCiBzdGF0aWMgaW50IGdldF9yZXN1bHRzKHN0cnVjdCB6ZF91c2IgKnVzYiwgdTE2ICp2YWx1ZXMsCkBAIC0xMTcxLDcgKzExODAsNyBAQAogCXN0cnVjdCByZWFkX3JlZ3NfaW50ICpyciA9ICZpbnRyLT5yZWFkX3JlZ3M7CiAJc3RydWN0IHVzYl9pbnRfcmVncyAqcmVncyA9IChzdHJ1Y3QgdXNiX2ludF9yZWdzICopcnItPmJ1ZmZlcjsKIAotCXNwaW5fbG9jaygmaW50ci0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmaW50ci0+bG9jayk7CiAKIAlyID0gLUVJTzsKIAkvKiBUaGUgY3JlYXRlZCBibG9jayBzaXplIHNlZW1zIHRvIGJlIGxhcmdlciB0aGFuIGV4cGVjdGVkLgpAQCAtMTIwNCw3ICsxMjEzLDcgQEAKIAogCXIgPSAwOwogZXJyb3JfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZpbnRyLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmludHItPmxvY2spOwogCXJldHVybiByOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oCmluZGV4IGU4MWEyZDMuLjMxN2QzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oCkBAIC03NCwxNyArNzQsMTcgQEAKIHN0cnVjdCB1c2JfcmVxX3JlYWRfcmVncyB7CiAJX19sZTE2IGlkOwogCV9fbGUxNiBhZGRyWzBdOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCByZWdfZGF0YSB7CiAJX19sZTE2IGFkZHI7CiAJX19sZTE2IHZhbHVlOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCB1c2JfcmVxX3dyaXRlX3JlZ3MgewogCV9fbGUxNiBpZDsKIAlzdHJ1Y3QgcmVnX2RhdGEgcmVnX3dyaXRlc1swXTsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBlbnVtIHsKIAlSRl9JRl9MRSA9IDB4MDIsCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkvKiBSRjI1OTU6IDI0ICovCiAJX19sZTE2IGJpdF92YWx1ZXNbMF07CiAJLyogKENSMjAzICYgfihSRl9JRl9MRSB8IFJGX0NMSyB8IFJGX0RBVEEpKSB8IChiaXQgPyBSRl9EQVRBIDogMCkgKi8KLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBVU0IgaW50ZXJydXB0ICovCiAKQEAgLTExOCwxMiArMTE4LDEyIEBACiBzdHJ1Y3QgdXNiX2ludF9oZWFkZXIgewogCXU4IHR5cGU7CS8qIG11c3QgYWx3YXlzIGJlIDEgKi8KIAl1OCBpZDsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgdXNiX2ludF9yZWdzIHsKIAlzdHJ1Y3QgdXNiX2ludF9oZWFkZXIgaGRyOwogCXN0cnVjdCByZWdfZGF0YSByZWdzWzBdOwotfTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCB1c2JfaW50X3JldHJ5X2ZhaWwgewogCXN0cnVjdCB1c2JfaW50X2hlYWRlciBoZHI7CkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1OCBfZHVtbXk7CiAJdTggYWRkcltFVEhfQUxFTl07CiAJdTggaWJzc193YWtldXBfZGVzdDsKLX07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcmVhZF9yZWdzX2ludCB7CiAJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3pvcnJvODM5MC5jIGIvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKaW5kZXggZGYwNGUwNS4uZDg1ZTJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKQEAgLTM0LDggKzM0LDE2IEBACiAjaW5jbHVkZSA8YXNtL2FtaWdhaW50cy5oPgogI2luY2x1ZGUgPGFzbS9hbWlnYWh3Lmg+CiAKLSNpbmNsdWRlICI4MzkwLmgiCisjZGVmaW5lIEVJX1NISUZUKHgpCShlaV9sb2NhbC0+cmVnX29mZnNldFt4XSkKKyNkZWZpbmUgZWlfaW5iKHBvcnQpICAgaW5fOChwb3J0KQorI2RlZmluZSBlaV9vdXRiKHZhbCxwb3J0KSAgb3V0XzgocG9ydCx2YWwpCisjZGVmaW5lIGVpX2luYl9wKHBvcnQpICAgaW5fOChwb3J0KQorI2RlZmluZSBlaV9vdXRiX3AodmFsLHBvcnQpICBvdXRfOChwb3J0LHZhbCkKIAorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0KKyAgICAiODM5MC5jOnYxLjEwY3ZzIDkvMjMvOTQgRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KVxuIjsKKworI2luY2x1ZGUgImxpYjgzOTAuYyIKIAogI2RlZmluZSBEUlZfTkFNRQkiem9ycm84MzkwIgogCkBAIC0xMTQsNyArMTIyLDcgQEAKIAkgICAgYnJlYWs7CiAgICAgYm9hcmQgPSB6LT5yZXNvdXJjZS5zdGFydDsKICAgICBpb2FkZHIgPSBib2FyZCtjYXJkc1tpXS5vZmZzZXQ7Ci0gICAgZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisgICAgZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKICAgICBTRVRfTU9EVUxFX09XTkVSKGRldik7CkBAIC0yMDEsNyArMjA5LDcgQEAKICAgICBkZXYtPmlycSA9IElSUV9BTUlHQV9QT1JUUzsKIAogICAgIC8qIEluc3RhbGwgdGhlIEludGVycnVwdCBoYW5kbGVyICovCi0gICAgaSA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZWlfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgRFJWX05BTUUsIGRldik7CisgICAgaSA9IHJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgX19laV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KTsKICAgICBpZiAoaSkgcmV0dXJuIGk7CiAKICAgICBmb3IoaSA9IDA7IGkgPCBFVEhFUl9BRERSX0xFTjsgaSsrKSB7CkBAIC0yMjYsMTAgKzIzNCwxMCBAQAogICAgIGRldi0+b3BlbiA9ICZ6b3JybzgzOTBfb3BlbjsKICAgICBkZXYtPnN0b3AgPSAmem9ycm84MzkwX2Nsb3NlOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0gICAgZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaV9wb2xsOworICAgIGRldi0+cG9sbF9jb250cm9sbGVyID0gX19laV9wb2xsOwogI2VuZGlmCiAKLSAgICBOUzgzOTBfaW5pdChkZXYsIDApOworICAgIF9fTlM4MzkwX2luaXQoZGV2LCAwKTsKICAgICBlcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKICAgICBpZiAoZXJyKSB7CiAJZnJlZV9pcnEoSVJRX0FNSUdBX1BPUlRTLCBkZXYpOwpAQCAtMjQ2LDcgKzI1NCw3IEBACiAKIHN0YXRpYyBpbnQgem9ycm84MzkwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICBlaV9vcGVuKGRldik7CisgICAgX19laV9vcGVuKGRldik7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI1NCw3ICsyNjIsNyBAQAogewogICAgIGlmIChlaV9kZWJ1ZyA+IDEpCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7Ci0gICAgZWlfY2xvc2UoZGV2KTsKKyAgICBfX2VpX2Nsb3NlKGRldik7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTQwNSw3ICs0MTMsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIFR4IFJEQy5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQl6b3JybzgzOTBfcmVzZXRfODM5MChkZXYpOwotCQlOUzgzOTBfaW5pdChkZXYsMSk7CisJCV9fTlM4MzkwX2luaXQoZGV2LDEpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2FjY2Vzcy5jIGIvZHJpdmVycy9wY2kvYWNjZXNzLmMKaW5kZXggNzNhNThjNy4uZmM0MDVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYWNjZXNzLmMKKysrIGIvZHJpdmVycy9wY2kvYWNjZXNzLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDc5ZmZlZjYuLmEyY2VmNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMTI2NCwxNSArMTI2NCwyMSBAQAogCWlmIChsaXN0X2VtcHR5KCZkZXZpY2UtPmNjd19xdWV1ZSkpCiAJCXJldHVybjsKIAljcXIgPSBsaXN0X2VudHJ5KGRldmljZS0+Y2N3X3F1ZXVlLm5leHQsIHN0cnVjdCBkYXNkX2Njd19yZXEsIGxpc3QpOwotCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9JTl9JTyAmJiBjcXItPmV4cGlyZXMgIT0gMCkgewotCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBjcXItPmV4cGlyZXMgKyBjcXItPnN0YXJ0dGltZSkpIHsKKwlpZiAoKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPICYmIGNxci0+ZXhwaXJlcyAhPSAwKSAmJgorCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBjcXItPmV4cGlyZXMgKyBjcXItPnN0YXJ0dGltZSkpKSB7CisJCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKSAhPSAwKSB7CisJCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gNSBzZWMgKi8KKwkJCWRhc2Rfc2V0X3RpbWVyKGRldmljZSwgNSpIWik7CisJCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAorCQkJCSAgICAiaW50ZXJuYWwgZXJyb3IgLSB0aW1lb3V0ICglaXMpIGV4cGlyZWQgIgorCQkJCSAgICAiZm9yIGNxciAlcCwgdGVybWluYXRpb24gZmFpbGVkLCAiCisJCQkJICAgICJyZXRyeWluZyBpbiA1cyIsCisJCQkJICAgIChjcXItPmV4cGlyZXMvSFopLCBjcXIpOworCQl9IGVsc2UgewogCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKIAkJCQkgICAgImludGVybmFsIGVycm9yIC0gdGltZW91dCAoJWlzKSBleHBpcmVkICIKIAkJCQkgICAgImZvciBjcXIgJXAgKCVpIHJldHJpZXMgbGVmdCkiLAogCQkJCSAgICAoY3FyLT5leHBpcmVzL0haKSwgY3FyLCBjcXItPnJldHJpZXMpOwotCQkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpICE9IDApCi0JCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDEvMTAgc2VjICovCi0JCQkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCAxMCk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IDkxY2Y5NzEuLjE3ZmRkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC02ODQsMjEgKzY4NCwyNiBAQAogCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOwotCWludCByb19mbGFnOworCWludCB2YWw7CisJY2hhciAqZW5kcDsKIAogCWRldm1hcCA9IGRhc2RfZGV2bWFwX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CiAJaWYgKElTX0VSUihkZXZtYXApKQogCQlyZXR1cm4gUFRSX0VSUihkZXZtYXApOwotCXJvX2ZsYWcgPSBidWZbMF0gPT0gJzEnOworCisJdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CisJaWYgKCgoZW5kcCArIDEpIDwgKGJ1ZiArIGNvdW50KSkgfHwgKHZhbCA+IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7Ci0JaWYgKHJvX2ZsYWcpCisJaWYgKHZhbCkKIAkJZGV2bWFwLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJZWxzZQogCQlkZXZtYXAtPmZlYXR1cmVzICY9IH5EQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CiAJaWYgKGRldm1hcC0+ZGV2aWNlKQogCQlkZXZtYXAtPmRldmljZS0+ZmVhdHVyZXMgPSBkZXZtYXAtPmZlYXR1cmVzOwogCWlmIChkZXZtYXAtPmRldmljZSAmJiBkZXZtYXAtPmRldmljZS0+Z2RwKQotCQlzZXRfZGlza19ybyhkZXZtYXAtPmRldmljZS0+Z2RwLCByb19mbGFnKTsKKwkJc2V0X2Rpc2tfcm8oZGV2bWFwLT5kZXZpY2UtPmdkcCwgdmFsKTsKIAlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNzI5LDE3ICs3MzQsMjIgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKIAlzc2l6ZV90IHJjOwotCWludCB1c2VfZGlhZzsKKwlpbnQgdmFsOworCWNoYXIgKmVuZHA7CiAKIAlkZXZtYXAgPSBkYXNkX2Rldm1hcF9mcm9tX2NkZXYodG9fY2N3ZGV2KGRldikpOwogCWlmIChJU19FUlIoZGV2bWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIoZGV2bWFwKTsKLQl1c2VfZGlhZyA9IGJ1ZlswXSA9PSAnMSc7CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKKwlpZiAoKChlbmRwICsgMSkgPCAoYnVmICsgY291bnQpKSB8fCAodmFsID4gMSkpCisJCXJldHVybiAtRUlOVkFMOworCiAJc3Bpbl9sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKIAkvKiBDaGFuZ2luZyBkaWFnIGRpc2NpcGxpbmUgZmxhZyBpcyBvbmx5IGFsbG93ZWQgaW4gb2ZmbGluZSBzdGF0ZS4gKi8KIAlyYyA9IGNvdW50OwogCWlmICghZGV2bWFwLT5kZXZpY2UpIHsKLQkJaWYgKHVzZV9kaWFnKQorCQlpZiAodmFsKQogCQkJZGV2bWFwLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfVVNFRElBRzsKIAkJZWxzZQogCQkJZGV2bWFwLT5mZWF0dXJlcyAmPSB+REFTRF9GRUFUVVJFX1VTRURJQUc7CkBAIC04NTQsMTQgKzg2NCwyMCBAQAogCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKLQlpbnQgcmM7CisJaW50IHZhbCwgcmM7CisJY2hhciAqZW5kcDsKIAogCWRldm1hcCA9IGRhc2RfZGV2bWFwX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CiAJaWYgKElTX0VSUihkZXZtYXApKQogCQlyZXR1cm4gUFRSX0VSUihkZXZtYXApOwogCWlmICghZGV2bWFwLT5kZXZpY2UpCi0JCXJldHVybiBjb3VudDsKLQlpZiAoYnVmWzBdID09ICcxJykgeworCQlyZXR1cm4gLUVOT0RFVjsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmVuZHAsIDApOworCWlmICgoKGVuZHAgKyAxKSA8IChidWYgKyBjb3VudCkpIHx8ICh2YWwgPiAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsKSB7CiAJCXJjID0gZGFzZF9lZXJfZW5hYmxlKGRldm1hcC0+ZGV2aWNlKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCmluZGV4IGQ3ZGUxNzVkLi5jOTMyMWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9jb24zMjE1LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvY29uMzIxNS5jCkBAIC0yOTksMTQgKzI5OSwxNCBAQAogCXN0cnVjdCByYXczMjE1X2luZm8gKnJhdyA9IChzdHJ1Y3QgcmF3MzIxNV9pbmZvICopIF9fZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUocmF3LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIAlpZiAocmF3LT5mbGFncyAmIFJBVzMyMTVfVElNRVJfUlVOUykgewogCQlkZWxfdGltZXIoJnJhdy0+dGltZXIpOwogCQlyYXctPmZsYWdzICY9IH5SQVczMjE1X1RJTUVSX1JVTlM7CiAJCXJhdzMyMTVfbWtfd3JpdGVfcmVxKHJhdyk7CiAJCXJhdzMyMTVfc3RhcnRfaW8ocmF3KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXctPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zNTUsMTAgKzM1NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlyYXcgPSAoc3RydWN0IHJhdzMyMTVfaW5mbyAqKSBkYXRhOwotCXNwaW5fbG9ja19pcnFzYXZlKHJhdy0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiAJcmF3MzIxNV9ta193cml0ZV9yZXEocmF3KTsKIAlyYXczMjE1X3RyeV9pbyhyYXcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocmF3LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSwgZmxhZ3MpOwogCS8qIENoZWNrIGZvciBwZW5kaW5nIG1lc3NhZ2UgZnJvbSByYXczMjE1X2lycSAqLwogCWlmIChyYXctPm1lc3NhZ2UgIT0gTlVMTCkgewogCQlwcmludGsocmF3LT5tZXNzYWdlLCByYXctPm1zZ19kc3RhdCwgcmF3LT5tc2dfY3N0YXQpOwpAQCAtNTEyLDkgKzUxMiw5IEBACiAJCWlmIChSQVczMjE1X0JVRkZFUl9TSVpFIC0gcmF3LT5jb3VudCA+PSBsZW5ndGgpCiAJCQlicmVhazsKIAkJLyogdGhlcmUgbWlnaHQgYmUgYW5vdGhlciBjcHUgd2FpdGluZyBmb3IgdGhlIGxvY2sgKi8KLQkJc3Bpbl91bmxvY2socmF3LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldikpOwogCQl1ZGVsYXkoMTAwKTsKLQkJc3Bpbl9sb2NrKHJhdy0+bG9jayk7CisJCXNwaW5fbG9jayhnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSk7CiAJfQogfQogCkBAIC01MjgsNyArNTI4LDcgQEAKIAlpbnQgYywgY291bnQ7CiAKIAl3aGlsZSAobGVuZ3RoID4gMCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZShyYXctPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIAkJY291bnQgPSAobGVuZ3RoID4gUkFXMzIxNV9CVUZGRVJfU0laRSkgPwogCQkJCQkgICAgIFJBVzMyMTVfQlVGRkVSX1NJWkUgOiBsZW5ndGg7CiAJCWxlbmd0aCAtPSBjb3VudDsKQEAgLTU1NSw3ICs1NTUsNyBAQAogCQkJLyogc3RhcnQgb3IgcXVldWUgcmVxdWVzdCAqLwogCQkJcmF3MzIxNV90cnlfaW8ocmF3KTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJhdy0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiAJfQogfQogCkBAIC01NjgsNyArNTY4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBsZW5ndGgsIGk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZShyYXctPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSwgZmxhZ3MpOwogCWlmIChjaCA9PSAnXHQnKSB7CiAJCWxlbmd0aCA9IFRBQl9TVE9QX1NJWkUgLSAocmF3LT5saW5lX3BvcyVUQUJfU1RPUF9TSVpFKTsKIAkJcmF3LT5saW5lX3BvcyArPSBsZW5ndGg7CkBAIC01OTIsNyArNTkyLDcgQEAKIAkJLyogc3RhcnQgb3IgcXVldWUgcmVxdWVzdCAqLwogCQlyYXczMjE1X3RyeV9pbyhyYXcpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJhdy0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIH0KIAogLyoKQEAgLTYwNCwxMyArNjA0LDEzIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKHJhdy0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiAJaWYgKHJhdy0+Y291bnQgPiAwKSB7CiAJCXJhdy0+ZmxhZ3MgfD0gUkFXMzIxNV9GTFVTSElORzsKIAkJcmF3MzIxNV90cnlfaW8ocmF3KTsKIAkJcmF3LT5mbGFncyAmPSB+UkFXMzIxNV9GTFVTSElORzsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXctPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02MjUsOSArNjI1LDkgQEAKIAkJcmV0dXJuIDA7CiAJcmF3LT5saW5lX3BvcyA9IDA7CiAJcmF3LT5mbGFncyB8PSBSQVczMjE1X0FDVElWRTsKLQlzcGluX2xvY2tfaXJxc2F2ZShyYXctPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSwgZmxhZ3MpOwogCXJhdzMyMTVfdHJ5X2lvKHJhdyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXctPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0NCwyMSArNjQ0LDIxIEBACiAJaWYgKCEocmF3LT5mbGFncyAmIFJBVzMyMTVfQUNUSVZFKSB8fCAocmF3LT5mbGFncyAmIFJBVzMyMTVfRklYRUQpKQogCQlyZXR1cm47CiAJLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgcmVxdWVzdHMsIHRoZW4gZnJlZSBpcnEgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZShyYXctPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSwgZmxhZ3MpOwogCWlmICgocmF3LT5mbGFncyAmIFJBVzMyMTVfV09SS0lORykgfHwKIAkgICAgcmF3LT5xdWV1ZWRfd3JpdGUgIT0gTlVMTCB8fAogCSAgICByYXctPnF1ZXVlZF9yZWFkICE9IE5VTEwpIHsKIAkJcmF3LT5mbGFncyB8PSBSQVczMjE1X0NMT1NJTkc7CiAJCWFkZF93YWl0X3F1ZXVlKCZyYXctPmVtcHR5X3dhaXQsICZ3YWl0KTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXctPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSwgZmxhZ3MpOwogCQlzY2hlZHVsZSgpOwotCQlzcGluX2xvY2tfaXJxc2F2ZShyYXctPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIAkJcmVtb3ZlX3dhaXRfcXVldWUoJnJhdy0+ZW1wdHlfd2FpdCwgJndhaXQpOwogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyYXctPmZsYWdzICY9IH4oUkFXMzIxNV9BQ1RJVkUgfCBSQVczMjE1X0NMT1NJTkcpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJhdy0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIH0KIAogc3RhdGljIGludApAQCAtNjg2LDcgKzY4Niw2IEBACiAJfQogCiAJcmF3LT5jZGV2ID0gY2RldjsKLQlyYXctPmxvY2sgPSBnZXRfY2N3ZGV2X2xvY2soY2Rldik7CiAJcmF3LT5pbmJ1ZiA9IChjaGFyICopIHJhdyArIHNpemVvZihzdHJ1Y3QgcmF3MzIxNV9pbmZvKTsKIAltZW1zZXQocmF3LCAwLCBzaXplb2Yoc3RydWN0IHJhdzMyMTVfaW5mbykpOwogCXJhdy0+YnVmZmVyID0gKGNoYXIgKikga21hbGxvYyhSQVczMjE1X0JVRkZFUl9TSVpFLApAQCAtODA5LDkgKzgwOCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhdyA9IHJhdzMyMTVbMF07ICAvKiBjb25zb2xlIDMyMTUgaXMgdGhlIGZpcnN0IG9uZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKHJhdy0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiAJcmF3MzIxNV9tYWtlX3Jvb20ocmF3LCBSQVczMjE1X0JVRkZFUl9TSVpFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHJhdy0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgCkBAIC04NzMsNyArODcyLDYgQEAKIAlyYXctPmJ1ZmZlciA9IChjaGFyICopIGFsbG9jX2Jvb3RtZW1fbG93KFJBVzMyMTVfQlVGRkVSX1NJWkUpOwogCXJhdy0+aW5idWYgPSAoY2hhciAqKSBhbGxvY19ib290bWVtX2xvdyhSQVczMjE1X0lOQlVGX1NJWkUpOwogCXJhdy0+Y2RldiA9IGNkZXY7Ci0JcmF3LT5sb2NrID0gZ2V0X2Njd2Rldl9sb2NrKGNkZXYpOwogCWNkZXYtPmRldi5kcml2ZXJfZGF0YSA9IHJhdzsKIAljZGV2LT5oYW5kbGVyID0gcmF3MzIxNV9pcnE7CiAKQEAgLTEwNjYsMTAgKzEwNjQsMTAgQEAKIAogCXJhdyA9IChzdHJ1Y3QgcmF3MzIxNV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHJhdy0+ZmxhZ3MgJiBSQVczMjE1X1RIUk9UVExFRCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZShyYXctPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIAkJcmF3LT5mbGFncyAmPSB+UkFXMzIxNV9USFJPVFRMRUQ7CiAJCXJhdzMyMTVfdHJ5X2lvKHJhdyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocmF3LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHJhdy0+Y2RldiksIGZsYWdzKTsKIAl9CiB9CiAKQEAgLTEwOTYsMTAgKzEwOTQsMTAgQEAKIAogCXJhdyA9IChzdHJ1Y3QgcmF3MzIxNV9pbmZvICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHJhdy0+ZmxhZ3MgJiBSQVczMjE1X1NUT1BQRUQpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUocmF3LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhyYXctPmNkZXYpLCBmbGFncyk7CiAJCXJhdy0+ZmxhZ3MgJj0gflJBVzMyMTVfU1RPUFBFRDsKIAkJcmF3MzIxNV90cnlfaW8ocmF3KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShyYXctPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2socmF3LT5jZGV2KSwgZmxhZ3MpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9xdWllc2NlLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwppbmRleCAzMjAwNGFhLi5mZmE5MjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX3F1aWVzY2UuYwpAQCAtMTksNTIgKzE5LDE3IEBACiAKICNpbmNsdWRlICJzY2xwLmgiCiAKLQotI2lmZGVmIENPTkZJR19TTVAKLS8qIFNpZ25hbCBjb21wbGV0aW9uIG9mIHNodXRkb3duIHByb2Nlc3MuIEFsbCBDUFVzIGV4Y2VwdCB0aGUgZmlyc3QgdG8gZW50ZXIKLSAqIHRoaXMgZnVuY3Rpb246IGdvIHRvIHN0b3BwZWQgc3RhdGUuIEZpcnN0IENQVTogd2FpdCB1bnRpbCBhbGwgb3RoZXIKLSAqIENQVXMgYXJlIGluIHN0b3BwZWQgb3IgY2hlY2sgc3RvcCBzdGF0ZS4gQWZ0ZXJ3YXJkcywgbG9hZCBzcGVjaWFsIFBTVwotICogdG8gaW5kaWNhdGUgY29tcGxldGlvbi4gKi8KLXN0YXRpYyB2b2lkCi1kb19sb2FkX3F1aWVzY2VfcHN3KHZvaWQgKiBfX3VudXNlZCkKLXsKLQlzdGF0aWMgYXRvbWljX3QgY3B1aWQgPSBBVE9NSUNfSU5JVCgtMSk7Ci0JcHN3X3QgcXVpZXNjZV9wc3c7Ci0JaW50IGNwdTsKLQotCWlmIChhdG9taWNfY21weGNoZygmY3B1aWQsIC0xLCBzbXBfcHJvY2Vzc29yX2lkKCkpICE9IC0xKQotCQlzaWduYWxfcHJvY2Vzc29yKHNtcF9wcm9jZXNzb3JfaWQoKSwgc2lncF9zdG9wKTsKLQkvKiBXYWl0IGZvciBhbGwgb3RoZXIgY3B1cyB0byBlbnRlciBzdG9wcGVkIHN0YXRlICovCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCQljb250aW51ZTsKLQkJd2hpbGUoIXNtcF9jcHVfbm90X3J1bm5pbmcoY3B1KSkKLQkJCWNwdV9yZWxheCgpOwotCX0KLQkvKiBRdWllc2NlIHRoZSBsYXN0IGNwdSB3aXRoIHRoZSBzcGVjaWFsIHBzdyAqLwotCXF1aWVzY2VfcHN3Lm1hc2sgPSBQU1dfQkFTRV9CSVRTIHwgUFNXX01BU0tfV0FJVDsKLQlxdWllc2NlX3Bzdy5hZGRyID0gMHhmZmY7Ci0JX19sb2FkX3BzdyhxdWllc2NlX3Bzdyk7Ci19Ci0KLS8qIFNodXRkb3duIGhhbmRsZXIuIFBlcmZvcm0gc2h1dGRvd24gZnVuY3Rpb24gb24gYWxsIENQVXMuICovCi1zdGF0aWMgdm9pZAotZG9fbWFjaGluZV9xdWllc2NlKHZvaWQpCi17Ci0Jb25fZWFjaF9jcHUoZG9fbG9hZF9xdWllc2NlX3BzdywgTlVMTCwgMCwgMCk7Ci19Ci0jZWxzZQogLyogU2h1dGRvd24gaGFuZGxlci4gU2lnbmFsIGNvbXBsZXRpb24gb2Ygc2h1dGRvd24gYnkgbG9hZGluZyBzcGVjaWFsIFBTVy4gKi8KIHN0YXRpYyB2b2lkCiBkb19tYWNoaW5lX3F1aWVzY2Uodm9pZCkKIHsKIAlwc3dfdCBxdWllc2NlX3BzdzsKIAorCXNtcF9zZW5kX3N0b3AoKTsKIAlxdWllc2NlX3Bzdy5tYXNrID0gUFNXX0JBU0VfQklUUyB8IFBTV19NQVNLX1dBSVQ7CiAJcXVpZXNjZV9wc3cuYWRkciA9IDB4ZmZmOwogCV9fbG9hZF9wc3cocXVpZXNjZV9wc3cpOwogfQotI2VuZGlmCiAKIC8qIEhhbmRsZXIgZm9yIHF1aWVzY2UgZXZlbnQuIFN0YXJ0IHNodXRkb3duIHByb2NlZHVyZS4gKi8KIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCmluZGV4IDJkNzhmMGYuLmRiZmI3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCkBAIC0yNTEsNiArMjUxLDggQEAKIAkJY2MgPSBjaW9fY2xlYXIoc2NoKTsKIAkJaWYgKGNjID09IC1FTk9ERVYpCiAJCQlnb3RvIG91dF91bnJlZzsKKwkJLyogUmVxdWVzdCByZXRyeSBvZiBpbnRlcm5hbCBvcGVyYXRpb24uICovCisJCWRldmljZV9zZXRfaW50cmV0cnkoc2NoKTsKIAkJLyogQ2FsbCBoYW5kbGVyLiAqLwogCQlpZiAoc2NoLT5kcml2ZXIgJiYgc2NoLT5kcml2ZXItPnRlcm1pbmF0aW9uKQogCQkJc2NoLT5kcml2ZXItPnRlcm1pbmF0aW9uKCZzY2gtPmRldik7CkBAIC03MTEsOSArNzEzLDYgQEAKIHsKIAlpbnQgY2M7CiAKLQlpZiAoIWRldmljZV9pc19vbmxpbmUoc2NoKSkKLQkJLyogY2lvIGNvdWxkIGJlIGRvaW5nIEkvTy4gKi8KLQkJcmV0dXJuIDA7CiAJY2MgPSBzdHNjaChzY2gtPnNjaGlkLCAmc2NoLT5zY2hpYik7CiAJaWYgKGNjKQogCQlyZXR1cm4gMDsKQEAgLTcyMiw2ICs3MjEsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgdGVybWluYXRlX2ludGVybmFsX2lvKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCit7CisJaWYgKGNpb19jbGVhcihzY2gpKSB7CisJCS8qIFJlY2hlY2sgZGV2aWNlIGluIGNhc2UgY2xlYXIgZmFpbGVkLiAqLworCQlzY2gtPmxwbSA9IDA7CisJCWlmIChkZXZpY2VfdHJpZ2dlcl92ZXJpZnkoc2NoKSAhPSAwKSB7CisJCQlpZihjc3NfZW5xdWV1ZV9zdWJjaGFubmVsX3Nsb3coc2NoLT5zY2hpZCkpIHsKKwkJCQljc3NfY2xlYXJfc3ViY2hhbm5lbF9zbG93X2xpc3QoKTsKKwkJCQluZWVkX3Jlc2NhbiA9IDE7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0KKwkvKiBSZXF1ZXN0IHJldHJ5IG9mIGludGVybmFsIG9wZXJhdGlvbi4gKi8KKwlkZXZpY2Vfc2V0X2ludHJldHJ5KHNjaCk7CisJLyogQ2FsbCBoYW5kbGVyLiAqLworCWlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+dGVybWluYXRpb24pCisJCXNjaC0+ZHJpdmVyLT50ZXJtaW5hdGlvbigmc2NoLT5kZXYpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIF9fczM5MF9zdWJjaGFubmVsX3ZhcnlfY2hwaWQoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgX191OCBjaHBpZCwgaW50IG9uKQogewpAQCAtNzQ0LDIwICs3NjMsMjYgQEAKIAkJCQlkZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHNjaCk7CiAJCQllbHNlIGlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+dmVyaWZ5KQogCQkJCXNjaC0+ZHJpdmVyLT52ZXJpZnkoJnNjaC0+ZGV2KTsKLQkJfSBlbHNlIHsKLQkJCXNjaC0+b3BtICY9IH4oMHg4MCA+PiBjaHApOwotCQkJc2NoLT5scG0gJj0gfigweDgwID4+IGNocCk7Ci0JCQlpZiAoY2hlY2tfZm9yX2lvX29uX3BhdGgoc2NoLCBjaHApKQorCQkJYnJlYWs7CisJCX0KKwkJc2NoLT5vcG0gJj0gfigweDgwID4+IGNocCk7CisJCXNjaC0+bHBtICY9IH4oMHg4MCA+PiBjaHApOworCQlpZiAoY2hlY2tfZm9yX2lvX29uX3BhdGgoc2NoLCBjaHApKSB7CisJCQlpZiAoZGV2aWNlX2lzX29ubGluZShzY2gpKQogCQkJCS8qIFBhdGggdmVyaWZpY2F0aW9uIGlzIGRvbmUgYWZ0ZXIga2lsbGluZy4gKi8KIAkJCQlkZXZpY2Vfa2lsbF9pbyhzY2gpOwotCQkJZWxzZSBpZiAoIXNjaC0+bHBtKSB7CisJCQllbHNlCisJCQkJLyogS2lsbCBhbmQgcmV0cnkgaW50ZXJuYWwgSS9PLiAqLworCQkJCXRlcm1pbmF0ZV9pbnRlcm5hbF9pbyhzY2gpOworCQl9IGVsc2UgaWYgKCFzY2gtPmxwbSkgeworCQkJaWYgKGRldmljZV90cmlnZ2VyX3ZlcmlmeShzY2gpICE9IDApIHsKIAkJCQlpZiAoY3NzX2VucXVldWVfc3ViY2hhbm5lbF9zbG93KHNjaC0+c2NoaWQpKSB7CiAJCQkJCWNzc19jbGVhcl9zdWJjaGFubmVsX3Nsb3dfbGlzdCgpOwogCQkJCQluZWVkX3Jlc2NhbiA9IDE7CiAJCQkJfQotCQkJfSBlbHNlIGlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+dmVyaWZ5KQotCQkJCXNjaC0+ZHJpdmVyLT52ZXJpZnkoJnNjaC0+ZGV2KTsKLQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKHNjaC0+ZHJpdmVyICYmIHNjaC0+ZHJpdmVyLT52ZXJpZnkpCisJCQlzY2gtPmRyaXZlci0+dmVyaWZ5KCZzY2gtPmRldik7CiAJCWJyZWFrOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKQEAgLTE0NjUsNDEgKzE0OTAsNiBAQAogCXJldHVybiBkZXNjOwogfQogCi1zdGF0aWMgaW50IHJlc2V0X2NoYW5uZWxfcGF0aChzdHJ1Y3QgY2hhbm5lbF9wYXRoICpjaHApCi17Ci0JaW50IGNjOwotCi0JY2MgPSByY2hwKGNocC0+aWQpOwotCXN3aXRjaCAoY2MpIHsKLQljYXNlIDA6Ci0JCXJldHVybiAwOwotCWNhc2UgMjoKLQkJcmV0dXJuIC1FQlVTWTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2NoYW5uZWxfcGF0aHNfY3NzKHN0cnVjdCBjaGFubmVsX3N1YnN5c3RlbSAqY3NzKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8PSBfX01BWF9DSFBJRDsgaSsrKSB7Ci0JCWlmIChjc3MtPmNocHNbaV0pCi0JCQlyZXNldF9jaGFubmVsX3BhdGgoY3NzLT5jaHBzW2ldKTsKLQl9Ci19Ci0KLXZvaWQgY2lvX3Jlc2V0X2NoYW5uZWxfcGF0aHModm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gX19NQVhfQ1NTSUQ7IGkrKykgewotCQlpZiAoY3NzW2ldICYmIGNzc1tpXS0+dmFsaWQpCi0JCQlyZXNldF9jaGFubmVsX3BhdGhzX2Nzcyhjc3NbaV0pOwotCX0KLX0KLQogc3RhdGljIGludCBfX2luaXQKIGNoc2NfYWxsb2Nfc2VpX2FyZWEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IDg5MzZlNDYuLjIwYWVlMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vcmVzZXQuaD4KICNpbmNsdWRlICJhaXJxLmgiCiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY3NzLmgiCkBAIC0yOCw2ICsyOSw3IEBACiAjaW5jbHVkZSAiaW9hc20uaCIKICNpbmNsdWRlICJibGFja2xpc3QuaCIKICNpbmNsdWRlICJjaW9fZGVidWcuaCIKKyNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogCiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z19tc2dfaWQ7CiBkZWJ1Z19pbmZvX3QgKmNpb19kZWJ1Z190cmFjZV9pZDsKQEAgLTg0MSwyNiArODQzLDEyIEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RydWN0IHNjaF9tYXRjaF9pZCB7Ci0Jc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7Ci0Jc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7Ci0JaW50IHJjOwotfTsKLQotc3RhdGljIGludCBfX3NodXRkb3duX3N1YmNoYW5uZWxfZWFzeV9hbmRfbWF0Y2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsCi0Jdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgX19zaHV0ZG93bl9zdWJjaGFubmVsX2Vhc3koc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNjaGliIHNjaGliOwotCXN0cnVjdCBzY2hfbWF0Y2hfaWQgKm1hdGNoX2lkID0gZGF0YTsKIAogCWlmIChzdHNjaF9lcnIoc2NoaWQsICZzY2hpYikpCiAJCXJldHVybiAtRU5YSU87Ci0JaWYgKG1hdGNoX2lkICYmIHNjaGliLnBtY3cuZG52ICYmCi0JCShzY2hpYi5wbWN3LmRldiA9PSBtYXRjaF9pZC0+ZGV2aWQuZGV2bm8pICYmCi0JCShzY2hpZC5zc2lkID09IG1hdGNoX2lkLT5kZXZpZC5zc2lkKSkgewotCQltYXRjaF9pZC0+c2NoaWQgPSBzY2hpZDsKLQkJbWF0Y2hfaWQtPnJjID0gMDsKLQl9CiAJaWYgKCFzY2hpYi5wbWN3LmVuYSkKIAkJcmV0dXJuIDA7CiAJc3dpdGNoKF9fZGlzYWJsZV9zdWJjaGFubmVsX2Vhc3koc2NoaWQsICZzY2hpYikpIHsKQEAgLTg3NiwyNyArODY0LDExMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsZWFyX2FsbF9zdWJjaGFubmVsc19hbmRfbWF0Y2goc3RydWN0IGNjd19kZXZfaWQgKmRldmlkLAotCXN0cnVjdCBzdWJjaGFubmVsX2lkICpzY2hpZCkKK3N0YXRpYyBhdG9taWNfdCBjaHBpZF9yZXNldF9jb3VudDsKKworc3RhdGljIHZvaWQgczM5MF9yZXNldF9jaHBpZHNfbWNja19oYW5kbGVyKHZvaWQpCit7CisJc3RydWN0IGNydyBjcnc7CisJc3RydWN0IG1jaSAqbWNpOworCisJLyogQ2hlY2sgZm9yIHBlbmRpbmcgY2hhbm5lbCByZXBvcnQgd29yZC4gKi8KKwltY2kgPSAoc3RydWN0IG1jaSAqKSZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKKwlpZiAoIW1jaS0+Y3ApCisJCXJldHVybjsKKwkvKiBQcm9jZXNzIGNoYW5uZWwgcmVwb3J0IHdvcmRzLiAqLworCXdoaWxlIChzdGNydygmY3J3KSA9PSAwKSB7CisJCS8qIENoZWNrIGZvciByZXNwb25zZXMgdG8gUkNIUC4gKi8KKwkJaWYgKGNydy5zbGN0ICYmIGNydy5yc2MgPT0gQ1JXX1JTQ19DUEFUSCkKKwkJCWF0b21pY19kZWMoJmNocGlkX3Jlc2V0X2NvdW50KTsKKwl9Cit9CisKKyNkZWZpbmUgUkNIUF9USU1FT1VUICgzMCAqIFVTRUNfUEVSX1NFQykKK3N0YXRpYyB2b2lkIGNzc19yZXNldCh2b2lkKQoreworCWludCBpLCByZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVvdXQ7CisKKwkvKiBSZXNldCBzdWJjaGFubmVscy4gKi8KKwlmb3JfZWFjaF9zdWJjaGFubmVsKF9fc2h1dGRvd25fc3ViY2hhbm5lbF9lYXN5LCAgTlVMTCk7CisJLyogUmVzZXQgY2hhbm5lbCBwYXRocy4gKi8KKwlzMzkwX3Jlc2V0X21jY2tfaGFuZGxlciA9IHMzOTBfcmVzZXRfY2hwaWRzX21jY2tfaGFuZGxlcjsKKwkvKiBFbmFibGUgY2hhbm5lbCByZXBvcnQgbWFjaGluZSBjaGVja3MuICovCisJX19jdGxfc2V0X2JpdCgxNCwgMjgpOworCS8qIFRlbXBvcmFyaWx5IHJlZW5hYmxlIG1hY2hpbmUgY2hlY2tzLiAqLworCWxvY2FsX21jY2tfZW5hYmxlKCk7CisJZm9yIChpID0gMDsgaSA8PSBfX01BWF9DSFBJRDsgaSsrKSB7CisJCXJldCA9IHJjaHAoaSk7CisJCWlmICgocmV0ID09IDApIHx8IChyZXQgPT0gMikpCisJCQkvKgorCQkJICogcmNocCBlaXRoZXIgc3VjY2VlZGVkLCBvciBhbm90aGVyIHJjaHAgaXMgYWxyZWFkeQorCQkJICogaW4gcHJvZ3Jlc3MuIEluIGVpdGhlciBjYXNlLCB3ZSdsbCBnZXQgYSBjcncuCisJCQkgKi8KKwkJCWF0b21pY19pbmMoJmNocGlkX3Jlc2V0X2NvdW50KTsKKwl9CisJLyogV2FpdCBmb3IgbWFjaGluZSBjaGVjayBmb3IgYWxsIGNoYW5uZWwgcGF0aHMuICovCisJdGltZW91dCA9IGdldF9jbG9jaygpICsgKFJDSFBfVElNRU9VVCA8PCAxMik7CisJd2hpbGUgKGF0b21pY19yZWFkKCZjaHBpZF9yZXNldF9jb3VudCkgIT0gMCkgeworCQlpZiAoZ2V0X2Nsb2NrKCkgPiB0aW1lb3V0KQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0KKwkvKiBEaXNhYmxlIG1hY2hpbmUgY2hlY2tzIGFnYWluLiAqLworCWxvY2FsX21jY2tfZGlzYWJsZSgpOworCS8qIERpc2FibGUgY2hhbm5lbCByZXBvcnQgbWFjaGluZSBjaGVja3MuICovCisJX19jdGxfY2xlYXJfYml0KDE0LCAyOCk7CisJczM5MF9yZXNldF9tY2NrX2hhbmRsZXIgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHJlc2V0X2NhbGwgY3NzX3Jlc2V0X2NhbGwgPSB7CisJLmZuID0gY3NzX3Jlc2V0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9jc3NfcmVzZXRfY2FsbCh2b2lkKQoreworCWF0b21pY19zZXQoJmNocGlkX3Jlc2V0X2NvdW50LCAwKTsKKwlyZWdpc3Rlcl9yZXNldF9jYWxsKCZjc3NfcmVzZXRfY2FsbCk7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoaW5pdF9jc3NfcmVzZXRfY2FsbCk7CisKK3N0cnVjdCBzY2hfbWF0Y2hfaWQgeworCXN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkOworCXN0cnVjdCBjY3dfZGV2X2lkIGRldmlkOworCWludCByYzsKK307CisKK3N0YXRpYyBpbnQgX19yZWlwbF9zdWJjaGFubmVsX21hdGNoKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzY2hpYiBzY2hpYjsKKwlzdHJ1Y3Qgc2NoX21hdGNoX2lkICptYXRjaF9pZCA9IGRhdGE7CisKKwlpZiAoc3RzY2hfZXJyKHNjaGlkLCAmc2NoaWIpKQorCQlyZXR1cm4gLUVOWElPOworCWlmIChzY2hpYi5wbWN3LmRudiAmJgorCSAgICAoc2NoaWIucG1jdy5kZXYgPT0gbWF0Y2hfaWQtPmRldmlkLmRldm5vKSAmJgorCSAgICAoc2NoaWQuc3NpZCA9PSBtYXRjaF9pZC0+ZGV2aWQuc3NpZCkpIHsKKwkJbWF0Y2hfaWQtPnNjaGlkID0gc2NoaWQ7CisJCW1hdGNoX2lkLT5yYyA9IDA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWlwbF9maW5kX3NjaGlkKHN0cnVjdCBjY3dfZGV2X2lkICpkZXZpZCwKKwkJCSAgICBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCAqc2NoaWQpCiB7CiAJc3RydWN0IHNjaF9tYXRjaF9pZCBtYXRjaF9pZDsKIAogCW1hdGNoX2lkLmRldmlkID0gKmRldmlkOwogCW1hdGNoX2lkLnJjID0gLUVOT0RFVjsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWZvcl9lYWNoX3N1YmNoYW5uZWwoX19zaHV0ZG93bl9zdWJjaGFubmVsX2Vhc3lfYW5kX21hdGNoLCAmbWF0Y2hfaWQpOworCWZvcl9lYWNoX3N1YmNoYW5uZWwoX19yZWlwbF9zdWJjaGFubmVsX21hdGNoLCAmbWF0Y2hfaWQpOwogCWlmIChtYXRjaF9pZC5yYyA9PSAwKQogCQkqc2NoaWQgPSBtYXRjaF9pZC5zY2hpZDsKIAlyZXR1cm4gbWF0Y2hfaWQucmM7CiB9CiAKLQotdm9pZCBjbGVhcl9hbGxfc3ViY2hhbm5lbHModm9pZCkKLXsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWZvcl9lYWNoX3N1YmNoYW5uZWwoX19zaHV0ZG93bl9zdWJjaGFubmVsX2Vhc3lfYW5kX21hdGNoLCBOVUxMKTsKLX0KLQogZXh0ZXJuIHZvaWQgZG9fcmVpcGxfYXNtKF9fdTMyIHNjaGlkKTsKIAogLyogTWFrZSBzdXJlIGFsbCBzdWJjaGFubmVscyBhcmUgcXVpZXQgYmVmb3JlIHdlIHJlLWlwbCBhbiBscGFyLiAqLwpAQCAtOTA0LDkgKzk3Niw5IEBACiB7CiAJc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQ7CiAKLQlpZiAoY2xlYXJfYWxsX3N1YmNoYW5uZWxzX2FuZF9tYXRjaChkZXZpZCwgJnNjaGlkKSkKKwlzMzkwX3Jlc2V0X3N5c3RlbSgpOworCWlmIChyZWlwbF9maW5kX3NjaGlkKGRldmlkLCAmc2NoaWQpICE9IDApCiAJCXBhbmljKCJJUEwgRGV2aWNlIG5vdCBmb3VuZFxuIik7Ci0JY2lvX3Jlc2V0X2NoYW5uZWxfcGF0aHMoKTsKIAlkb19yZWlwbF9hc20oKigoX191MzIqKSZzY2hpZCkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oIGIvZHJpdmVycy9zMzkwL2Npby9jc3MuaAppbmRleCA0YzJmZjgzLi45ZmYwNjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmgKQEAgLTk0LDYgKzk0LDcgQEAKIAkJdW5zaWduZWQgaW50IGRvbm90aWZ5OjE7ICAgIC8qIGNhbGwgbm90aWZ5IGZ1bmN0aW9uICovCiAJCXVuc2lnbmVkIGludCByZWNvZ19kb25lOjE7ICAvKiBkZXYuIHJlY29nLiBjb21wbGV0ZSAqLwogCQl1bnNpZ25lZCBpbnQgZmFrZV9pcmI6MTsgICAgLyogZGVsaXZlciBmYWtlZCBpcmIgKi8KKwkJdW5zaWduZWQgaW50IGludHJldHJ5OjE7ICAgIC8qIHJldHJ5IGludGVybmFsIG9wZXJhdGlvbiAqLwogCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpbnRwYXJtOwkvKiB1c2VyIGludGVycnVwdGlvbiBwYXJhbWV0ZXIgKi8KIAlzdHJ1Y3QgcWRpb19pcnEgKnFkaW9fZGF0YTsKQEAgLTE3MSw2ICsxNzIsOCBAQAogLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmFyeSBvbi9vZmYuICovCiBpbnQgZGV2aWNlX2lzX29ubGluZShzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKIHZvaWQgZGV2aWNlX2tpbGxfaW8oc3RydWN0IHN1YmNoYW5uZWwgKik7Cit2b2lkIGRldmljZV9zZXRfaW50cmV0cnkoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCk7CitpbnQgZGV2aWNlX3RyaWdnZXJfdmVyaWZ5KHN0cnVjdCBzdWJjaGFubmVsICpzY2gpOwogCiAvKiBNYWNoaW5lIGNoZWNrIGhlbHBlciBmdW5jdGlvbi4gKi8KIHZvaWQgZGV2aWNlX2tpbGxfcGVuZGluZ190aW1lcihzdHJ1Y3Qgc3ViY2hhbm5lbCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IDM5Yzk4ZjkuLmQzZDM3MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtNjg3LDggKzY4NywyMCBAQAogCWNkZXYgPSBkYXRhOwogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKKwkvKgorCSAqIGlvX3N1YmNoYW5uZWxfcmVnaXN0ZXIoKSB3aWxsIGFsc28gYmUgY2FsbGVkIGFmdGVyIGRldmljZQorCSAqIHJlY29nbml0aW9uIGhhcyBiZWVuIGRvbmUgZm9yIGEgYm94ZWQgZGV2aWNlICh3aGljaCB3aWxsIGFscmVhZHkKKwkgKiBiZSByZWdpc3RlcmVkKS4gV2UgbmVlZCB0byByZXByb2JlIHNpbmNlIHdlIG1heSBub3cgaGF2ZSBzZW5zZSBpZAorCSAqIGluZm9ybWF0aW9uLgorCSAqLwogCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZjZGV2LT5kZXYua25vZGVfcGFyZW50KSkgewotCQlidXNfcmVzY2FuX2RldmljZXMoJmNjd19idXNfdHlwZSk7CisJCWlmICghY2Rldi0+ZHJ2KSB7CisJCQlyZXQgPSBkZXZpY2VfcmVwcm9iZSgmY2Rldi0+ZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJLyogV2UgY2FuJ3QgZG8gbXVjaCBoZXJlLiAqLworCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsICJkZXZpY2VfcmVwcm9iZSgpIHJldHVybmVkIgorCQkJCQkgIiAlZFxuIiwgcmV0KTsKKwkJfQogCQlnb3RvIG91dDsKIAl9CiAJLyogbWFrZSBpdCBrbm93biB0byB0aGUgc3lzdGVtICovCkBAIC05NDgsNiArOTYwLDkgQEAKIAljZGV2ID0gZGV2LT5kcml2ZXJfZGF0YTsKIAlpZiAoIWNkZXYpCiAJCXJldHVybjsKKwkvKiBJbnRlcm5hbCBJL08gd2lsbCBiZSByZXRyaWVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KKwlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuaW50cmV0cnkpCisJCXJldHVybjsKIAljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9DTEVBUl9WRVJJRlk7CiAJaWYgKGNkZXYtPmhhbmRsZXIpCiAJCWNkZXYtPmhhbmRsZXIoY2RldiwgY2Rldi0+cHJpdmF0ZS0+aW50cGFybSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggZGUzZDA4NS4uMDljNzY3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTU5LDYgKzU5LDI3IEBACiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOwogfQogCit2b2lkIGRldmljZV9zZXRfaW50cmV0cnkoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKworCWNkZXYgPSBzY2gtPmRldi5kcml2ZXJfZGF0YTsKKwlpZiAoIWNkZXYpCisJCXJldHVybjsKKwljZGV2LT5wcml2YXRlLT5mbGFncy5pbnRyZXRyeSA9IDE7Cit9CisKK2ludCBkZXZpY2VfdHJpZ2dlcl92ZXJpZnkoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCkKK3sKKwlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKKworCWNkZXYgPSBzY2gtPmRldi5kcml2ZXJfZGF0YTsKKwlpZiAoIWNkZXYgfHwgIWNkZXYtPm9ubGluZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2X2ZzbV9ldmVudChjZGV2LCBERVZfRVZFTlRfVkVSSUZZKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFRpbWVvdXQgZnVuY3Rpb24uIEl0IGp1c3QgdHJpZ2dlcnMgYSBERVZfRVZFTlRfVElNRU9VVC4KICAqLwpAQCAtODkzLDYgKzkxNCwxMiBAQAogCSAqIGhhZCBraWxsZWQgdGhlIG9yaWdpbmFsIHJlcXVlc3QuCiAJICovCiAJaWYgKGlyYi0+c2Nzdy5mY3RsICYgKFNDU1dfRkNUTF9DTEVBUl9GVU5DIHwgU0NTV19GQ1RMX0hBTFRfRlVOQykpIHsKKwkJLyogUmV0cnkgQmFzaWMgU2Vuc2UgaWYgcmVxdWVzdGVkLiAqLworCQlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuaW50cmV0cnkpIHsKKwkJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5ID0gMDsKKwkJCWNjd19kZXZpY2VfZG9fc2Vuc2UoY2RldiwgaXJiKTsKKwkJCXJldHVybjsKKwkJfQogCQljZGV2LT5wcml2YXRlLT5mbGFncy5kb3NlbnNlID0gMDsKIAkJbWVtc2V0KCZjZGV2LT5wcml2YXRlLT5pcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CiAJCWNjd19kZXZpY2VfYWNjdW11bGF0ZV9pcmIoY2RldiwgaXJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jCmluZGV4IGE3NDc4NWIuLmYxNzI3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYwpAQCAtMTkxLDYgKzE5MSw4IEBACiAJCWlmICgoc2NoLT5vcG0gJiBjZGV2LT5wcml2YXRlLT5pbWFzaykgIT0gMCAmJgogCQkgICAgY2Rldi0+cHJpdmF0ZS0+aXJldHJ5ID4gMCkgewogCQkJY2Rldi0+cHJpdmF0ZS0+aXJldHJ5LS07CisJCQkvKiBSZXNldCBpbnRlcm5hbCByZXRyeSBpbmRpY2F0aW9uLiAqLworCQkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuaW50cmV0cnkgPSAwOwogCQkJcmV0ID0gY2lvX3N0YXJ0IChzY2gsIGNkZXYtPnByaXZhdGUtPmljY3dzLAogCQkJCQkgY2Rldi0+cHJpdmF0ZS0+aW1hc2spOwogCQkJLyogcmV0IGlzIDAsIC1FQlVTWSwgLUVBQ0NFUyBvciAtRU5PREVWICovCkBAIC0yMzcsOCArMjM5LDE0IEBACiAJCXJldHVybiAwOyAvKiBTdWNjZXNzICovCiAJfQogCS8qIENoZWNrIHRoZSBlcnJvciBjYXNlcy4gKi8KLQlpZiAoaXJiLT5zY3N3LmZjdGwgJiAoU0NTV19GQ1RMX0hBTFRfRlVOQyB8IFNDU1dfRkNUTF9DTEVBUl9GVU5DKSkKKwlpZiAoaXJiLT5zY3N3LmZjdGwgJiAoU0NTV19GQ1RMX0hBTFRfRlVOQyB8IFNDU1dfRkNUTF9DTEVBUl9GVU5DKSkgeworCQkvKiBSZXRyeSBTZW5zZSBJRCBpZiByZXF1ZXN0ZWQuICovCisJCWlmIChjZGV2LT5wcml2YXRlLT5mbGFncy5pbnRyZXRyeSkgeworCQkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuaW50cmV0cnkgPSAwOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KIAkJcmV0dXJuIC1FVElNRTsKKwl9CiAJaWYgKGlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMgJiYgKGlyYi0+ZWN3WzBdICYgU05TMF9DTURfUkVKRUNUKSkgewogCQkvKgogCQkgKiBpZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgU2Vuc2VJRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCmluZGV4IDI5NzVjZTguLmNiMTg3OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKQEAgLTcxLDYgKzcxLDggQEAKIAkJY2N3LT5jZGEgPSAoX191MzIpIF9fcGEgKCZjZGV2LT5wcml2YXRlLT5wZ2lkW2ldKTsKIAkJaWYgKGNkZXYtPnByaXZhdGUtPmlyZXRyeSA+IDApIHsKIAkJCWNkZXYtPnByaXZhdGUtPmlyZXRyeS0tOworCQkJLyogUmVzZXQgaW50ZXJuYWwgcmV0cnkgaW5kaWNhdGlvbi4gKi8KKwkJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5ID0gMDsKIAkJCXJldCA9IGNpb19zdGFydCAoc2NoLCBjZGV2LT5wcml2YXRlLT5pY2N3cywgCiAJCQkJCSBjZGV2LT5wcml2YXRlLT5pbWFzayk7CiAJCQkvKiByZXQgaXMgMCwgLUVCVVNZLCAtRUFDQ0VTIG9yIC1FTk9ERVYgKi8KQEAgLTEyMiw4ICsxMjQsMTQgQEAKIAogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAJaXJiID0gJmNkZXYtPnByaXZhdGUtPmlyYjsKLQlpZiAoaXJiLT5zY3N3LmZjdGwgJiAoU0NTV19GQ1RMX0hBTFRfRlVOQyB8IFNDU1dfRkNUTF9DTEVBUl9GVU5DKSkKKwlpZiAoaXJiLT5zY3N3LmZjdGwgJiAoU0NTV19GQ1RMX0hBTFRfRlVOQyB8IFNDU1dfRkNUTF9DTEVBUl9GVU5DKSkgeworCQkvKiBSZXRyeSBTZW5zZSBQR0lEIGlmIHJlcXVlc3RlZC4gKi8KKwkJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5KSB7CisJCQljZGV2LT5wcml2YXRlLT5mbGFncy5pbnRyZXRyeSA9IDA7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQogCQlyZXR1cm4gLUVUSU1FOworCX0KIAlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucyAmJgogCSAgICAoaXJiLT5lY3dbMF0mKFNOUzBfQ01EX1JFSkVDVHxTTlMwX0lOVEVSVkVOVElPTl9SRVEpKSkgewogCQkvKgpAQCAtMjUzLDYgKzI2MSw4IEBACiAJcmV0ID0gLUVBQ0NFUzsKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+aXJldHJ5ID4gMCkgewogCQljZGV2LT5wcml2YXRlLT5pcmV0cnktLTsKKwkJLyogUmVzZXQgaW50ZXJuYWwgcmV0cnkgaW5kaWNhdGlvbi4gKi8KKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuaW50cmV0cnkgPSAwOwogCQlyZXQgPSBjaW9fc3RhcnQgKHNjaCwgY2Rldi0+cHJpdmF0ZS0+aWNjd3MsCiAJCQkJIGNkZXYtPnByaXZhdGUtPmltYXNrKTsKIAkJLyogV2UgZXhwZWN0IGFuIGludGVycnVwdCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYnVzeQpAQCAtMjkzLDYgKzMwMyw4IEBACiAJcmV0ID0gLUVBQ0NFUzsKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+aXJldHJ5ID4gMCkgewogCQljZGV2LT5wcml2YXRlLT5pcmV0cnktLTsKKwkJLyogUmVzZXQgaW50ZXJuYWwgcmV0cnkgaW5kaWNhdGlvbi4gKi8KKwkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuaW50cmV0cnkgPSAwOwogCQlyZXQgPSBjaW9fc3RhcnQgKHNjaCwgY2Rldi0+cHJpdmF0ZS0+aWNjd3MsCiAJCQkJIGNkZXYtPnByaXZhdGUtPmltYXNrKTsKIAkJLyogV2UgZXhwZWN0IGFuIGludGVycnVwdCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYnVzeQpAQCAtMzIxLDggKzMzMywxNCBAQAogCiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAlpcmIgPSAmY2Rldi0+cHJpdmF0ZS0+aXJiOwotCWlmIChpcmItPnNjc3cuZmN0bCAmIChTQ1NXX0ZDVExfSEFMVF9GVU5DIHwgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpKQorCWlmIChpcmItPnNjc3cuZmN0bCAmIChTQ1NXX0ZDVExfSEFMVF9GVU5DIHwgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpKSB7CisJCS8qIFJldHJ5IFNldCBQR0lEIGlmIHJlcXVlc3RlZC4gKi8KKwkJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5KSB7CisJCQljZGV2LT5wcml2YXRlLT5mbGFncy5pbnRyZXRyeSA9IDA7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQogCQlyZXR1cm4gLUVUSU1FOworCX0KIAlpZiAoaXJiLT5lc3cuZXN3MC5lcncuY29ucykgewogCQlpZiAoaXJiLT5lY3dbMF0gJiBTTlMwX0NNRF9SRUpFQ1QpCiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0zNjAsOCArMzc4LDE0IEBACiAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWlyYiA9ICZjZGV2LT5wcml2YXRlLT5pcmI7Ci0JaWYgKGlyYi0+c2Nzdy5mY3RsICYgKFNDU1dfRkNUTF9IQUxUX0ZVTkMgfCBTQ1NXX0ZDVExfQ0xFQVJfRlVOQykpCisJaWYgKGlyYi0+c2Nzdy5mY3RsICYgKFNDU1dfRkNUTF9IQUxUX0ZVTkMgfCBTQ1NXX0ZDVExfQ0xFQVJfRlVOQykpIHsKKwkJLyogUmV0cnkgTk9QIGlmIHJlcXVlc3RlZC4gKi8KKwkJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5KSB7CisJCQljZGV2LT5wcml2YXRlLT5mbGFncy5pbnRyZXRyeSA9IDA7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQogCQlyZXR1cm4gLUVUSU1FOworCX0KIAlpZiAoaXJiLT5zY3N3LmNjID09IDMpIHsKIAkJQ0lPX01TR19FVkVOVCgyLCAiTk9QIC0gRGV2aWNlICUwNHggb24gU3ViY2hhbm5lbCAwLiV4LiUwNHgsIgogCQkJICAgICAgIiBscG0gJTAyWCwgYmVjYW1lICdub3Qgb3BlcmF0aW9uYWwnXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfc3RhdHVzLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9zdGF0dXMuYwppbmRleCAzZjdjYmNlLi5iZGNmOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9zdGF0dXMuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9zdGF0dXMuYwpAQCAtMzE5LDYgKzMxOSw5IEBACiAJc2NoLT5zZW5zZV9jY3cuY291bnQgPSBTRU5TRV9NQVhfQ09VTlQ7CiAJc2NoLT5zZW5zZV9jY3cuZmxhZ3MgPSBDQ1dfRkxBR19TTEk7CiAKKwkvKiBSZXNldCBpbnRlcm5hbCByZXRyeSBpbmRpY2F0aW9uLiAqLworCWNkZXYtPnByaXZhdGUtPmZsYWdzLmludHJldHJ5ID0gMDsKKwogCXJldHVybiBjaW9fc3RhcnQgKHNjaCwgJnNjaC0+c2Vuc2VfY2N3LCAweGZmKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYwppbmRleCA0NzZhYTFkLi44ZDVmYTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAgICAgICAgdW5zaWduZWQgY2hhciBzdGF0ZSA9IDA7CiAgICAgICAgc3RydWN0IHFkaW9faXJxICppcnEgPSAoc3RydWN0IHFkaW9faXJxICopIHEtPmlycV9wdHI7CiAKLQlpZiAoIWF0b21pY19zd2FwKCZxLT5wb2xsaW5nLDApKSAKKwlpZiAoIWF0b21pY194Y2hnKCZxLT5wb2xsaW5nLDApKQogCQlyZXR1cm4gMTsKIAogCVFESU9fREJGX1RFWFQ0KDAsdHJhY2UsInN0b3Bwb2xsIik7CkBAIC0xOTY0LDggKzE5NjQsOCBAQAogCQlRRElPX0RCRl9IRVgwKDAsc2Vuc2UsaXJiLFFESU9fREJGX1NFTlNFX0xFTik7CiAKIAkJUURJT19QUklOVF9XQVJOKCJzZW5zZSBkYXRhIGF2YWlsYWJsZSBvbiBxZGlvIGNoYW5uZWwuXG4iKTsKLQkJSEVYRFVNUDE2KFdBUk4sImlyYjogIixpcmIpOwotCQlIRVhEVU1QMTYoV0FSTiwic2Vuc2UgZGF0YTogIixpcmItPmVjdyk7CisJCVFESU9fSEVYRFVNUDE2KFdBUk4sImlyYjogIixpcmIpOworCQlRRElPX0hFWERVTVAxNihXQVJOLCJzZW5zZSBkYXRhOiAiLGlyYi0+ZWN3KTsKIAl9CiAJCQogfQpAQCAtMzQyNSw3ICszNDI1LDcgQEAKIAkKIAlpZiAoKHVzZWRfZWxlbWVudHMrY291bnQ9PVFESU9fTUFYX0JVRkZFUlNfUEVSX1EpJiYKIAkgICAgKGNhbGxmbGFncyZRRElPX0ZMQUdfVU5ERVJfSU5URVJSVVBUKSkKLQkJYXRvbWljX3N3YXAoJnEtPnBvbGxpbmcsMCk7CisJCWF0b21pY194Y2hnKCZxLT5wb2xsaW5nLDApOwogCQogCWlmICh1c2VkX2VsZW1lbnRzKSAKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCA0OWJiOWUzLi40MjkyN2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjM2LDcgKzIzNiw3IEBACiAjZGVmaW5lIFFESU9fUFJJTlRfRU1FUkcoeC4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgSEVYRFVNUDE2KGltcG9ydGFuY2UsaGVhZGVyLHB0cikgXAorI2RlZmluZSBRRElPX0hFWERVTVAxNihpbXBvcnRhbmNlLGhlYWRlcixwdHIpIFwKIFFESU9fUFJJTlRfIyNpbXBvcnRhbmNlKGhlYWRlciAiJTAyeCAlMDJ4ICUwMnggJTAyeCAgIiBcCiAJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeCAgJTAyeCAlMDJ4ICUwMnggJTAyeCAgIiBcCiAJCQkiJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwqKCgoY2hhciopcHRyKSksIFwKQEAgLTQyOSw4ICs0MjksNiBAQAogfTsKICNlbmRpZiAvKiBRRElPX1BFUkZPUk1BTkNFX1NUQVRTICovCiAKLSNkZWZpbmUgYXRvbWljX3N3YXAoYSxiKSB4Y2hnKChpbnQqKWEuY291bnRlcixiKQotCiAvKiB1bmxpa2VseSBhcyB0aGUgbGF0ZXIgdGhlIGJldHRlciAqLwogI2RlZmluZSBTWU5DX01FTU9SWSBpZiAodW5saWtlbHkocS0+c2lnYV9zeW5jKSkgcWRpb19zaWdhX3N5bmNfcShxKQogI2RlZmluZSBTWU5DX01FTU9SWV9BTEwgaWYgKHVubGlrZWx5KHEtPnNpZ2Ffc3luYykpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCmluZGV4IDc5ZDg5YzMuLjZhNTQzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtNDMxLDcgKzQzMSwxNSBAQAogCQkJICAgYXBfZGV2LT5kZXZpY2VfdHlwZSk7CiAJaWYgKGJ1ZmZlcl9zaXplIC0gbGVuZ3RoIDw9IDApCiAJCXJldHVybiAtRU5PTUVNOwotCWVudnBbMV0gPSAwOworCWJ1ZmZlciArPSBsZW5ndGg7CisJYnVmZmVyX3NpemUgLT0gbGVuZ3RoOworCS8qIEFkZCBNT0RBTElBUz0gKi8KKwllbnZwWzFdID0gYnVmZmVyOworCWxlbmd0aCA9IHNjbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplLCAiTU9EQUxJQVM9YXA6dCUwMlgiLAorCQkJICAgYXBfZGV2LT5kZXZpY2VfdHlwZSk7CisJaWYgKGJ1ZmZlcl9zaXplIC0gbGVuZ3RoIDw9IDApCisJCXJldHVybiAtRU5PTUVNOworCWVudnBbMl0gPSBOVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCAxNmFjNjhjLi4wOGQ0ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTU0LDYgKzU0LDggQEAKICNlcnJvciBDYW5ub3QgY29tcGlsZSBsY3MuYyB3aXRob3V0IHNvbWUgbmV0IGRldmljZXMgc3dpdGNoZWQgb24uCiAjZW5kaWYKIAorI2RlZmluZSBQUklOVEtfSEVBREVSCQkiIGxjczogIgorCiAvKioKICAqIGluaXRpYWxpemF0aW9uIHN0cmluZyBmb3Igb3V0cHV0CiAgKi8KQEAgLTEyMCw3ICsxMjIsNyBAQAogCQkJa3phbGxvYyhMQ1NfSU9CVUZGRVJTSVpFLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7CiAJCWlmIChjaGFubmVsLT5pb2JbY250XS5kYXRhID09IE5VTEwpCiAJCQlicmVhazsKLQkJY2hhbm5lbC0+aW9iW2NudF0uc3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CisJCWNoYW5uZWwtPmlvYltjbnRdLnN0YXRlID0gTENTX0JVRl9TVEFURV9FTVBUWTsKIAl9CiAJaWYgKGNudCA8IExDU19OVU1fQlVGRlMpIHsKIAkJLyogTm90IGFsbCBpbyBidWZmZXJzIGNvdWxkIGJlIGFsbG9jYXRlZC4gKi8KQEAgLTIzNiw3ICsyMzgsNyBAQAogCQkoKHN0cnVjdCBsY3NfaGVhZGVyICopCiAJCSBjYXJkLT5yZWFkLmlvYltjbnRdLmRhdGEpLT5vZmZzZXQgPSBMQ1NfSUxMRUdBTF9PRkZTRVQ7CiAJCWNhcmQtPnJlYWQuaW9iW2NudF0uY2FsbGJhY2sgPSBsY3NfZ2V0X2ZyYW1lc19jYjsKLQkJY2FyZC0+cmVhZC5pb2JbY250XS5zdGF0ZSA9IEJVRl9TVEFURV9SRUFEWTsKKwkJY2FyZC0+cmVhZC5pb2JbY250XS5zdGF0ZSA9IExDU19CVUZfU1RBVEVfUkVBRFk7CiAJCWNhcmQtPnJlYWQuaW9iW2NudF0uY291bnQgPSBMQ1NfSU9CVUZGRVJTSVpFOwogCX0KIAljYXJkLT5yZWFkLmNjd3NbMF0uZmxhZ3MgJj0gfkNDV19GTEFHX1BDSTsKQEAgLTI0Nyw3ICsyNDksNyBAQAogCWNhcmQtPnJlYWQuY2N3c1tMQ1NfTlVNX0JVRkZTXS5jZGEgPQogCQkoX191MzIpIF9fcGEoY2FyZC0+cmVhZC5jY3dzKTsKIAkvKiBTZXRnIGluaXRpYWwgc3RhdGUgb2YgdGhlIHJlYWQgY2hhbm5lbC4gKi8KLQljYXJkLT5yZWFkLnN0YXRlID0gQ0hfU1RBVEVfSU5JVDsKKwljYXJkLT5yZWFkLnN0YXRlID0gTENTX0NIX1NUQVRFX0lOSVQ7CiAKIAljYXJkLT5yZWFkLmlvX2lkeCA9IDA7CiAJY2FyZC0+cmVhZC5idWZfaWR4ID0gMDsKQEAgLTI5NCw3ICsyOTYsNyBAQAogCWNhcmQtPndyaXRlLmNjd3NbTENTX05VTV9CVUZGU10uY2RhID0KIAkJKF9fdTMyKSBfX3BhKGNhcmQtPndyaXRlLmNjd3MpOwogCS8qIFNldCBpbml0aWFsIHN0YXRlIG9mIHRoZSB3cml0ZSBjaGFubmVsLiAqLwotCWNhcmQtPnJlYWQuc3RhdGUgPSBDSF9TVEFURV9JTklUOworCWNhcmQtPnJlYWQuc3RhdGUgPSBMQ1NfQ0hfU1RBVEVfSU5JVDsKIAogCWNhcmQtPndyaXRlLmlvX2lkeCA9IDA7CiAJY2FyZC0+d3JpdGUuYnVmX2lkeCA9IDA7CkBAIC00OTYsNyArNDk4LDcgQEAKIAkJCSAgICAgIGNoYW5uZWwtPmNjd3MgKyBjaGFubmVsLT5pb19pZHgsIDAsIDAsCiAJCQkgICAgICBET0lPX0RFTllfUFJFRkVUQ0ggfCBET0lPX0FMTE9XX1NVU1BFTkQpOwogCWlmIChyYyA9PSAwKQotCQljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX1JVTk5JTkc7CisJCWNoYW5uZWwtPnN0YXRlID0gTENTX0NIX1NUQVRFX1JVTk5JTkc7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwogCWlmIChyYykgewogCQlMQ1NfREJGX1RFWFRfKDQsdHJhY2UsImVzc2glcyIsIGNoYW5uZWwtPmNjd2Rldi0+ZGV2LmJ1c19pZCk7CkBAIC01MjAsOCArNTIyLDggQEAKIAkJTENTX0RCRl9URVhUXyg0LHRyYWNlLCJlY3NjJXMiLCBjaGFubmVsLT5jY3dkZXYtPmRldi5idXNfaWQpOwogCQlyZXR1cm4gcmM7CiAJfQotCXdhaXRfZXZlbnQoY2hhbm5lbC0+d2FpdF9xLCAoY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfQ0xFQVJFRCkpOwotCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfU1RPUFBFRDsKKwl3YWl0X2V2ZW50KGNoYW5uZWwtPndhaXRfcSwgKGNoYW5uZWwtPnN0YXRlID09IExDU19DSF9TVEFURV9DTEVBUkVEKSk7CisJY2hhbm5lbC0+c3RhdGUgPSBMQ1NfQ0hfU1RBVEVfU1RPUFBFRDsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTUzNSwxMSArNTM3LDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKLQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfU1RPUFBFRCkKKwlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gTENTX0NIX1NUQVRFX1NUT1BQRUQpCiAJCXJldHVybiAwOwogCUxDU19EQkZfVEVYVCg0LHRyYWNlLCJoYWx0c2NoIik7CiAJTENTX0RCRl9URVhUXyg0LHRyYWNlLCIlcyIsIGNoYW5uZWwtPmNjd2Rldi0+ZGV2LmJ1c19pZCk7Ci0JY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9JTklUOworCWNoYW5uZWwtPnN0YXRlID0gTENTX0NIX1NUQVRFX0lOSVQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKIAlyYyA9IGNjd19kZXZpY2VfaGFsdChjaGFubmVsLT5jY3dkZXYsIChhZGRyX3QpIGNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKQEAgLTU0OCw3ICs1NTAsNyBAQAogCQlyZXR1cm4gcmM7CiAJfQogCS8qIEFzeW5jaHJvbm91cyBoYWx0IGluaXRpYWx0ZWQuIFdhaXQgZm9yIGl0cyBjb21wbGV0aW9uLiAqLwotCXdhaXRfZXZlbnQoY2hhbm5lbC0+d2FpdF9xLCAoY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfSEFMVEVEKSk7CisJd2FpdF9ldmVudChjaGFubmVsLT53YWl0X3EsIChjaGFubmVsLT5zdGF0ZSA9PSBMQ1NfQ0hfU1RBVEVfSEFMVEVEKSk7CiAJbGNzX2NsZWFyX2NoYW5uZWwoY2hhbm5lbCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01OTYsOCArNTk4LDggQEAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJfZ2V0YnVmZiIpOwogCWluZGV4ID0gY2hhbm5lbC0+aW9faWR4OwogCWRvIHsKLQkJaWYgKGNoYW5uZWwtPmlvYltpbmRleF0uc3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZKSB7Ci0JCQljaGFubmVsLT5pb2JbaW5kZXhdLnN0YXRlID0gQlVGX1NUQVRFX0xPQ0tFRDsKKwkJaWYgKGNoYW5uZWwtPmlvYltpbmRleF0uc3RhdGUgPT0gTENTX0JVRl9TVEFURV9FTVBUWSkgeworCQkJY2hhbm5lbC0+aW9iW2luZGV4XS5zdGF0ZSA9IExDU19CVUZfU1RBVEVfTE9DS0VEOwogCQkJcmV0dXJuIGNoYW5uZWwtPmlvYiArIGluZGV4OwogCQl9CiAJCWluZGV4ID0gKGluZGV4ICsgMSkgJiAoTENTX05VTV9CVUZGUyAtIDEpOwpAQCAtNjI2LDcgKzYyOCw3IEBACiB7CiAJaW50IHJjOwogCi0JaWYgKGNoYW5uZWwtPnN0YXRlICE9IENIX1NUQVRFX1NVU1BFTkRFRCkKKwlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gTENTX0NIX1NUQVRFX1NVU1BFTkRFRCkKIAkJcmV0dXJuIDA7CiAJaWYgKGNoYW5uZWwtPmNjd3NbY2hhbm5lbC0+aW9faWR4XS5mbGFncyAmIENDV19GTEFHX1NVU1BFTkQpCiAJCXJldHVybiAwOwpAQCAtNjM2LDcgKzYzOCw3IEBACiAJCUxDU19EQkZfVEVYVF8oNCwgdHJhY2UsICJlcnNjJXMiLCBjaGFubmVsLT5jY3dkZXYtPmRldi5idXNfaWQpOwogCQlQUklOVF9FUlIoIkVycm9yIGluIGxjc19yZXN1bWVfY2hhbm5lbDogcmM9JWRcbiIscmMpOwogCX0gZWxzZQotCQljaGFubmVsLT5zdGF0ZSA9IENIX1NUQVRFX1JVTk5JTkc7CisJCWNoYW5uZWwtPnN0YXRlID0gTENTX0NIX1NUQVRFX1JVTk5JTkc7CiAJcmV0dXJuIHJjOwogCiB9CkBAIC02NzAsMTAgKzY3MiwxMCBAQAogCWludCBpbmRleCwgcmM7CiAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJyZHlidWZmIik7Ci0JQlVHX09OKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX0xPQ0tFRCAmJgotCSAgICAgICBidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9QUk9DRVNTRUQpOworCUJVR19PTihidWZmZXItPnN0YXRlICE9IExDU19CVUZfU1RBVEVfTE9DS0VEICYmCisJICAgICAgIGJ1ZmZlci0+c3RhdGUgIT0gTENTX0JVRl9TVEFURV9QUk9DRVNTRUQpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7Ci0JYnVmZmVyLT5zdGF0ZSA9IEJVRl9TVEFURV9SRUFEWTsKKwlidWZmZXItPnN0YXRlID0gTENTX0JVRl9TVEFURV9SRUFEWTsKIAlpbmRleCA9IGJ1ZmZlciAtIGNoYW5uZWwtPmlvYjsKIAkvKiBTZXQgbGVuZ3RoLiAqLwogCWNoYW5uZWwtPmNjd3NbaW5kZXhdLmNvdW50ID0gYnVmZmVyLT5jb3VudDsKQEAgLTY5NSw4ICs2OTcsOCBAQAogCWludCBpbmRleCwgcHJldiwgbmV4dDsKIAogCUxDU19EQkZfVEVYVCg1LCB0cmFjZSwgInByY3NidWZmIik7Ci0JQlVHX09OKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX1JFQURZKTsKLQlidWZmZXItPnN0YXRlID0gQlVGX1NUQVRFX1BST0NFU1NFRDsKKwlCVUdfT04oYnVmZmVyLT5zdGF0ZSAhPSBMQ1NfQlVGX1NUQVRFX1JFQURZKTsKKwlidWZmZXItPnN0YXRlID0gTENTX0JVRl9TVEFURV9QUk9DRVNTRUQ7CiAJaW5kZXggPSBidWZmZXIgLSBjaGFubmVsLT5pb2I7CiAJcHJldiA9IChpbmRleCAtIDEpICYgKExDU19OVU1fQlVGRlMgLSAxKTsKIAluZXh0ID0gKGluZGV4ICsgMSkgJiAoTENTX05VTV9CVUZGUyAtIDEpOwpAQCAtNzA0LDcgKzcwNiw3IEBACiAJY2hhbm5lbC0+Y2N3c1tpbmRleF0uZmxhZ3MgfD0gQ0NXX0ZMQUdfU1VTUEVORDsKIAljaGFubmVsLT5jY3dzW2luZGV4XS5mbGFncyAmPSB+Q0NXX0ZMQUdfUENJOwogCS8qIENoZWNrIHRoZSBzdXNwZW5kIGJpdCBvZiB0aGUgcHJldmlvdXMgYnVmZmVyLiAqLwotCWlmIChjaGFubmVsLT5pb2JbcHJldl0uc3RhdGUgPT0gQlVGX1NUQVRFX1JFQURZKSB7CisJaWYgKGNoYW5uZWwtPmlvYltwcmV2XS5zdGF0ZSA9PSBMQ1NfQlVGX1NUQVRFX1JFQURZKSB7CiAJCS8qCiAJCSAqIFByZXZpb3VzIGJ1ZmZlciBpcyBpbiBzdGF0ZSByZWFkeS4gSXQgbWlnaHQgaGF2ZQogCQkgKiBoYXBwZW5lZCBpbiBsY3NfcmVhZHlfYnVmZmVyIHRoYXQgdGhlIHN1c3BlbmQgYml0CkBAIC03MjcsMTAgKzcyOSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJyZWxidWZmIik7Ci0JQlVHX09OKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX0xPQ0tFRCAmJgotCSAgICAgICBidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9QUk9DRVNTRUQpOworCUJVR19PTihidWZmZXItPnN0YXRlICE9IExDU19CVUZfU1RBVEVfTE9DS0VEICYmCisJICAgICAgIGJ1ZmZlci0+c3RhdGUgIT0gTENTX0JVRl9TVEFURV9QUk9DRVNTRUQpOwogCXNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7Ci0JYnVmZmVyLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKKwlidWZmZXItPnN0YXRlID0gTENTX0JVRl9TVEFURV9FTVBUWTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjaGFubmVsLT5jY3dkZXYpLCBmbGFncyk7CiB9CiAKQEAgLTExNDcsNyArMTE0OSw3IEBACiAgKiBnZXQgbWFjIGFkZHJlc3MgZm9yIHRoZSByZWxldmFudCBNdWx0aWNhc3QgYWRkcmVzcwogICovCiBzdGF0aWMgdm9pZAotbGNzX2dldF9tYWNfZm9yX2lwbShfX3UzMiBpcG0sIGNoYXIgKm1hYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2xjc19nZXRfbWFjX2Zvcl9pcG0oX19iZTMyIGlwbSwgY2hhciAqbWFjLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCUxDU19EQkZfVEVYVCg0LHRyYWNlLCAiZ2V0bWFjIik7CiAJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMl9UUikKQEAgLTEyNjQsNyArMTI2Niw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYoY2FyZC0+ZGV2KTsKIAluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CiAJd2FpdF9ldmVudChjYXJkLT53cml0ZS53YWl0X3EsCi0JCQkoY2FyZC0+d3JpdGUuc3RhdGUgIT0gQ0hfU1RBVEVfUlVOTklORykpOworCQkJKGNhcmQtPndyaXRlLnN0YXRlICE9IExDU19DSF9TVEFURV9SVU5OSU5HKSk7CiAJbGNzX2ZpeF9tdWx0aWNhc3RfbGlzdChjYXJkKTsKIAlpZiAoY2FyZC0+c3RhdGUgPT0gREVWX1NUQVRFX1VQKSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKQEAgLTE0MDQsNyArMTQwNiw3IEBACiAJCX0KIAl9CiAJLyogSG93IGZhciBpbiB0aGUgY2N3IGNoYWluIGhhdmUgd2UgcHJvY2Vzc2VkPyAqLwotCWlmICgoY2hhbm5lbC0+c3RhdGUgIT0gQ0hfU1RBVEVfSU5JVCkgJiYKKwlpZiAoKGNoYW5uZWwtPnN0YXRlICE9IExDU19DSF9TVEFURV9JTklUKSAmJgogCSAgICAoaXJiLT5zY3N3LmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykpIHsKIAkJaW5kZXggPSAoc3RydWN0IGNjdzEgKikgX192YSgoYWRkcl90KSBpcmItPnNjc3cuY3BhKQogCQkJLSBjaGFubmVsLT5jY3dzOwpAQCAtMTQyNCwyMCArMTQyNiwyMCBAQAogCSAgICAoaXJiLT5zY3N3LmRzdGF0ICYgREVWX1NUQVRfQ0hOX0VORCkgfHwKIAkgICAgKGlyYi0+c2Nzdy5kc3RhdCAmIERFVl9TVEFUX1VOSVRfQ0hFQ0spKQogCQkvKiBNYXJrIGNoYW5uZWwgYXMgc3RvcHBlZC4gKi8KLQkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9TVE9QUEVEOworCQljaGFubmVsLT5zdGF0ZSA9IExDU19DSF9TVEFURV9TVE9QUEVEOwogCWVsc2UgaWYgKGlyYi0+c2Nzdy5hY3RsICYgU0NTV19BQ1RMX1NVU1BFTkRFRCkKIAkJLyogQ0NXIGV4ZWN1dGlvbiBzdG9wcGVkIG9uIGEgc3VzcGVuZCBiaXQuICovCi0JCWNoYW5uZWwtPnN0YXRlID0gQ0hfU1RBVEVfU1VTUEVOREVEOworCQljaGFubmVsLT5zdGF0ZSA9IExDU19DSF9TVEFURV9TVVNQRU5ERUQ7CiAJaWYgKGlyYi0+c2Nzdy5mY3RsICYgU0NTV19GQ1RMX0hBTFRfRlVOQykgewogCQlpZiAoaXJiLT5zY3N3LmNjICE9IDApIHsKIAkJCWNjd19kZXZpY2VfaGFsdChjaGFubmVsLT5jY3dkZXYsIChhZGRyX3QpIGNoYW5uZWwpOwogCQkJcmV0dXJuOwogCQl9CiAJCS8qIFRoZSBjaGFubmVsIGhhcyBiZWVuIHN0b3BwZWQgYnkgaGFsdF9JTy4gKi8KLQkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9IQUxURUQ7CisJCWNoYW5uZWwtPnN0YXRlID0gTENTX0NIX1NUQVRFX0hBTFRFRDsKIAl9CiAJaWYgKGlyYi0+c2Nzdy5mY3RsICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKLQkJY2hhbm5lbC0+c3RhdGUgPSBDSF9TVEFURV9DTEVBUkVEOworCQljaGFubmVsLT5zdGF0ZSA9IExDU19DSF9TVEFURV9DTEVBUkVEOwogCX0KIAkvKiBEbyB0aGUgcmVzdCBpbiB0aGUgdGFza2xldC4gKi8KIAl0YXNrbGV0X3NjaGVkdWxlKCZjaGFubmVsLT5pcnFfdGFza2xldCk7CkBAIC0xNDYxLDcgKzE0NjMsNyBAQAogCS8qIENoZWNrIGZvciBwcm9jZXNzZWQgYnVmZmVycy4gKi8KIAlpb2IgPSBjaGFubmVsLT5pb2I7CiAJYnVmX2lkeCA9IGNoYW5uZWwtPmJ1Zl9pZHg7Ci0Jd2hpbGUgKGlvYltidWZfaWR4XS5zdGF0ZSA9PSBCVUZfU1RBVEVfUFJPQ0VTU0VEKSB7CisJd2hpbGUgKGlvYltidWZfaWR4XS5zdGF0ZSA9PSBMQ1NfQlVGX1NUQVRFX1BST0NFU1NFRCkgewogCQkvKiBEbyB0aGUgY2FsbGJhY2sgdGhpbmcuICovCiAJCWlmIChpb2JbYnVmX2lkeF0uY2FsbGJhY2sgIT0gTlVMTCkKIAkJCWlvYltidWZfaWR4XS5jYWxsYmFjayhjaGFubmVsLCBpb2IgKyBidWZfaWR4KTsKQEAgLTE0NjksMTIgKzE0NzEsMTIgQEAKIAl9CiAJY2hhbm5lbC0+YnVmX2lkeCA9IGJ1Zl9pZHg7CiAKLQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gQ0hfU1RBVEVfU1RPUFBFRCkKKwlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gTENTX0NIX1NUQVRFX1NUT1BQRUQpCiAJCS8vIEZJWE1FOiB3aGF0IGlmIHJjICE9IDAgPz8KIAkJcmMgPSBsY3Nfc3RhcnRfY2hhbm5lbChjaGFubmVsKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwotCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBDSF9TVEFURV9TVVNQRU5ERUQgJiYKLQkgICAgY2hhbm5lbC0+aW9iW2NoYW5uZWwtPmlvX2lkeF0uc3RhdGUgPT0gQlVGX1NUQVRFX1JFQURZKSB7CisJaWYgKGNoYW5uZWwtPnN0YXRlID09IExDU19DSF9TVEFURV9TVVNQRU5ERUQgJiYKKwkgICAgY2hhbm5lbC0+aW9iW2NoYW5uZWwtPmlvX2lkeF0uc3RhdGUgPT0gTENTX0JVRl9TVEFURV9SRUFEWSkgewogCQkvLyBGSVhNRTogd2hhdCBpZiByYyAhPSAwID8/CiAJCXJjID0gX19sY3NfcmVzdW1lX2NoYW5uZWwoY2hhbm5lbCk7CiAJfQpAQCAtMTY4OSw4ICsxNjkxLDggQEAKIAkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfVVA7CiAJfSBlbHNlIHsKIAkJY2FyZC0+c3RhdGUgPSBERVZfU1RBVEVfRE9XTjsKLQkJY2FyZC0+d3JpdGUuc3RhdGUgPSBDSF9TVEFURV9JTklUOwotCQljYXJkLT5yZWFkLnN0YXRlID0gIENIX1NUQVRFX0lOSVQ7CisJCWNhcmQtPndyaXRlLnN0YXRlID0gTENTX0NIX1NUQVRFX0lOSVQ7CisJCWNhcmQtPnJlYWQuc3RhdGUgPSAgTENTX0NIX1NUQVRFX0lOSVQ7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTE3MDUsOCArMTcwNyw4IEBACiAKIAlMQ1NfREJGX1RFWFQoMywgc2V0dXAsICJzdG9wY2FyZCIpOwogCi0JaWYgKGNhcmQtPnJlYWQuc3RhdGUgIT0gQ0hfU1RBVEVfU1RPUFBFRCAmJgotCSAgICBjYXJkLT53cml0ZS5zdGF0ZSAhPSBDSF9TVEFURV9TVE9QUEVEICYmCisJaWYgKGNhcmQtPnJlYWQuc3RhdGUgIT0gTENTX0NIX1NUQVRFX1NUT1BQRUQgJiYKKwkgICAgY2FyZC0+d3JpdGUuc3RhdGUgIT0gTENTX0NIX1NUQVRFX1NUT1BQRUQgJiYKIAkgICAgY2FyZC0+c3RhdGUgPT0gREVWX1NUQVRFX1VQKSB7CiAJCWxjc19jbGVhcl9tdWx0aWNhc3RfbGlzdChjYXJkKTsKIAkJcmMgPSBsY3Nfc2VuZF9zdG9wbGFuKGNhcmQsTENTX0lOSVRJQVRPUl9UQ1BJUCk7CkBAIC0xODcxLDcgKzE4NzMsNyBAQAogCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKIAlkZXYtPmZsYWdzICY9IH5JRkZfVVA7CiAJd2FpdF9ldmVudChjYXJkLT53cml0ZS53YWl0X3EsCi0JCShjYXJkLT53cml0ZS5zdGF0ZSAhPSBDSF9TVEFURV9SVU5OSU5HKSk7CisJCShjYXJkLT53cml0ZS5zdGF0ZSAhPSBMQ1NfQ0hfU1RBVEVfUlVOTklORykpOwogCXJjID0gbGNzX3N0b3BjYXJkKGNhcmQpOwogCWlmIChyYykKIAkJUFJJTlRfRVJSKCJUcnkgaXQgYWdhaW4hXG4gIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5oIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuaAppbmRleCA5MzE0MzkzLi4wZTFlNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmgKQEAgLTIzLDExICsyMyw2IEBACiB9IHdoaWxlICgwKQogCiAvKioKLSAqIHNvbWUgbW9yZSBkZWZpbml0aW9ucyBmb3IgZGVidWcgb3Igb3V0cHV0IHN0dWZmCi0gKi8KLSNkZWZpbmUgUFJJTlRLX0hFQURFUgkJIiBsY3M6ICIKLQotLyoqCiAgKglzeXNmcyByZWxhdGVkIHN0dWZmCiAgKi8KICNkZWZpbmUgQ0FSRF9GUk9NX0RFVihjZGV2KSBcCkBAIC0xMjcsMjIgKzEyMiwyMiBAQAogICogTENTIEJ1ZmZlciBzdGF0ZXMKICAqLwogZW51bSBsY3NfYnVmZmVyX3N0YXRlcyB7Ci0JQlVGX1NUQVRFX0VNUFRZLAkvKiBidWZmZXIgaXMgZW1wdHkgKi8KLQlCVUZfU1RBVEVfTE9DS0VELAkvKiBidWZmZXIgaXMgbG9ja2VkLCBkb24ndCB0b3VjaCAqLwotCUJVRl9TVEFURV9SRUFEWSwJLyogYnVmZmVyIGlzIHJlYWR5IGZvciByZWFkL3dyaXRlICovCi0JQlVGX1NUQVRFX1BST0NFU1NFRCwKKwlMQ1NfQlVGX1NUQVRFX0VNUFRZLAkvKiBidWZmZXIgaXMgZW1wdHkgKi8KKwlMQ1NfQlVGX1NUQVRFX0xPQ0tFRCwJLyogYnVmZmVyIGlzIGxvY2tlZCwgZG9uJ3QgdG91Y2ggKi8KKwlMQ1NfQlVGX1NUQVRFX1JFQURZLAkvKiBidWZmZXIgaXMgcmVhZHkgZm9yIHJlYWQvd3JpdGUgKi8KKwlMQ1NfQlVGX1NUQVRFX1BST0NFU1NFRCwKIH07CiAKIC8qKgogICogTENTIENoYW5uZWwgU3RhdGUgTWFjaGluZSBkZWNsYXJhdGlvbnMKICAqLwogZW51bSBsY3NfY2hhbm5lbF9zdGF0ZXMgewotCUNIX1NUQVRFX0lOSVQsCi0JQ0hfU1RBVEVfSEFMVEVELAotCUNIX1NUQVRFX1NUT1BQRUQsCi0JQ0hfU1RBVEVfUlVOTklORywKLQlDSF9TVEFURV9TVVNQRU5ERUQsCi0JQ0hfU1RBVEVfQ0xFQVJFRCwKKwlMQ1NfQ0hfU1RBVEVfSU5JVCwKKwlMQ1NfQ0hfU1RBVEVfSEFMVEVELAorCUxDU19DSF9TVEFURV9TVE9QUEVELAorCUxDU19DSF9TVEFURV9SVU5OSU5HLAorCUxDU19DSF9TVEFURV9TVVNQRU5ERUQsCisJTENTX0NIX1NUQVRFX0NMRUFSRUQsCiB9OwogCiAvKioKQEAgLTE2OSw3ICsxNjQsNyBAQAogfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbGNzX2lwX21hY19wYWlyIHsKLQlfX3UzMiAgaXBfYWRkcjsKKwlfX2JlMzIgIGlwX2FkZHI7CiAJX191OCAgIG1hY19hZGRyW0xDU19NQUNfTEVOR1RIXTsKIAlfX3U4ICAgcmVzZXJ2ZWRbMl07CiB9ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0yODcsNyArMjgyLDcgQEAKIAllbnVtIGxjc19kZXZfc3RhdGVzIHN0YXRlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0JdW5zaWduZWQgc2hvcnQgKCpsYW5fdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlfX2JlMTYgKCpsYW5fdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CiAJc3RydWN0IGxjc19jaGFubmVsIHJlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCmluZGV4IDgyMTM4M2QuLjUzYzM1OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCkBAIC0xNTEsOCArMTUxLDYgQEAKICNkZWZpbmUgU0VOU0VfUkVTRVRUSU5HX0VWRU5UX0JZVEUgMQogI2RlZmluZSBTRU5TRV9SRVNFVFRJTkdfRVZFTlRfRkxBRyAweDgwCiAKLSNkZWZpbmUgYXRvbWljX3N3YXAoYSxiKSB4Y2hnKChpbnQgKilhLmNvdW50ZXIsIGIpCi0KIC8qCiAgKiBDb21tb24gSU8gcmVsYXRlZCBkZWZpbml0aW9ucwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYwppbmRleCBhMzYzNzIxLi42YmI1NThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQKIHFldGhfZWRkcF9jb3B5X2RhdGFfdGNwKGNoYXIgKmRzdCwgc3RydWN0IHFldGhfZWRkcF9kYXRhICplZGRwLCBpbnQgbGVuLAotCQkJdTMyICpoY3N1bSkKKwkJCV9fd3N1bSAqaGNzdW0pCiB7CiAJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKIAlpbnQgbGVmdF9pbl9mcmFnOwpAQCAtMzA1LDcgKzMwNSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHFldGhfZWRkcF9jcmVhdGVfc2VnbWVudF9kYXRhX3RjcChzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCwKIAkJCQkgIHN0cnVjdCBxZXRoX2VkZHBfZGF0YSAqZWRkcCwgaW50IGRhdGFfbGVuLAotCQkJCSAgdTMyIGhjc3VtKQorCQkJCSAgX193c3VtIGhjc3VtKQogewogCXU4ICpwYWdlOwogCWludCBwYWdlX3JlbWFpbmRlcjsKQEAgLTM0OSwxMCArMzQ5LDEwIEBACiAJKChzdHJ1Y3QgdGNwaGRyICopZWRkcC0+dGhfaW5fY3R4KS0+Y2hlY2sgPSBjc3VtX2ZvbGQoaGNzdW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMgorc3RhdGljIGlubGluZSBfX3dzdW0KIHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbikKIHsKLQl1MzIgcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCisJX193c3VtIHBoY3N1bTsgLyogcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBja3Q0Iik7CiAJZWRkcC0+dGgudGNwLmguY2hlY2sgPSAwOwpAQCAtMzYzLDExICszNjMsMTEgQEAKIAlyZXR1cm4gY3N1bV9wYXJ0aWFsKCh1OCAqKSZlZGRwLT50aCwgZWRkcC0+dGhsLCBwaGNzdW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMgorc3RhdGljIGlubGluZSBfX3dzdW0KIHFldGhfZWRkcF9jaGVja190Y3A2X2hkcihzdHJ1Y3QgcWV0aF9lZGRwX2RhdGEgKmVkZHAsIGludCBkYXRhX2xlbikKIHsKLQl1MzIgcHJvdG87Ci0JdTMyIHBoY3N1bTsgLyogcHNldWRvIGhlYWRlciBjaGVja3N1bSAqLworCV9fYmUzMiBwcm90bzsKKwlfX3dzdW0gcGhjc3VtOyAvKiBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtICovCiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiZWRkcGNrdDYiKTsKIAllZGRwLT50aC50Y3AuaC5jaGVjayA9IDA7CkBAIC00MDUsNyArNDA1LDcgQEAKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0Y3BoOwogCWludCBkYXRhX2xlbjsKLQl1MzIgaGNzdW07CisJX193c3VtIGhjc3VtOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNSwgImVkZHBmdGNwIik7CiAJZWRkcC0+c2tiX29mZnNldCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgZWRkcC0+bmhsICsgZWRkcC0+dGhsOwpAQCAtNDMzLDIyICs0MzMsMjIgQEAKIAkJCWVkZHAtPnFoLmhkci5sMy5sZW5ndGggPSBkYXRhX2xlbiArIGVkZHAtPm5obCArCiAJCQkJCQkgZWRkcC0+dGhsOwogCQkvKiBwcmVwYXJlIGlwIGhkciAqLwotCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUCl7Ci0JCQllZGRwLT5uaC5pcDQuaC50b3RfbGVuID0gZGF0YV9sZW4gKyBlZGRwLT5uaGwgKwotCQkJCQkJIGVkZHAtPnRobDsKKwkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKXsKKwkJCWVkZHAtPm5oLmlwNC5oLnRvdF9sZW4gPSBodG9ucyhkYXRhX2xlbiArIGVkZHAtPm5obCArCisJCQkJCQkgZWRkcC0+dGhsKTsKIAkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0gMDsKIAkJCWVkZHAtPm5oLmlwNC5oLmNoZWNrID0KIAkJCQlpcF9mYXN0X2NzdW0oKHU4ICopJmVkZHAtPm5oLmlwNC5oLAogCQkJCQkJZWRkcC0+bmguaXA0LmguaWhsKTsKIAkJfSBlbHNlCi0JCQllZGRwLT5uaC5pcDYuaC5wYXlsb2FkX2xlbiA9IGRhdGFfbGVuICsgZWRkcC0+dGhsOworCQkJZWRkcC0+bmguaXA2LmgucGF5bG9hZF9sZW4gPSBodG9ucyhkYXRhX2xlbiArIGVkZHAtPnRobCk7CiAJCS8qIHByZXBhcmUgdGNwIGhkciAqLwogCQlpZiAoZGF0YV9sZW4gPT0gKGVkZHAtPnNrYi0+bGVuIC0gZWRkcC0+c2tiX29mZnNldCkpewogCQkJLyogbGFzdCBzZWdtZW50IC0+IHNldCBGSU4gYW5kIFBTSCBmbGFncyAqLwogCQkJZWRkcC0+dGgudGNwLmguZmluID0gdGNwaC0+ZmluOwogCQkJZWRkcC0+dGgudGNwLmgucHNoID0gdGNwaC0+cHNoOwogCQl9Ci0JCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IEVUSF9QX0lQKQorCQlpZiAoZWRkcC0+c2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAJCQloY3N1bSA9IHFldGhfZWRkcF9jaGVja190Y3A0X2hkcihlZGRwLCBkYXRhX2xlbik7CiAJCWVsc2UKIAkJCWhjc3VtID0gcWV0aF9lZGRwX2NoZWNrX3RjcDZfaGRyKGVkZHAsIGRhdGFfbGVuKTsKQEAgLTQ1OCw5ICs0NTgsOSBAQAogCQlpZiAoZWRkcC0+c2tiX29mZnNldCA+PSBlZGRwLT5za2ItPmxlbikKIAkJCWJyZWFrOwogCQkvKiBwcmVwYXJlIGhlYWRlcnMgZm9yIG5leHQgcm91bmQgKi8KLQkJaWYgKGVkZHAtPnNrYi0+cHJvdG9jb2wgPT0gRVRIX1BfSVApCi0JCQllZGRwLT5uaC5pcDQuaC5pZCsrOwotCQllZGRwLT50aC50Y3AuaC5zZXEgKz0gZGF0YV9sZW47CisJCWlmIChlZGRwLT5za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKKwkJCWVkZHAtPm5oLmlwNC5oLmlkID0gaHRvbnMobnRvaHMoZWRkcC0+bmguaXA0LmguaWQpICsgMSk7CisJCWVkZHAtPnRoLnRjcC5oLnNlcSA9IGh0b25sKG50b2hsKGVkZHAtPnRoLnRjcC5oLnNlcSkgKyBkYXRhX2xlbik7CiAJfQogfQogCkBAIC00NzIsNyArNDcyLDcgQEAKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJlZGRwZmljeCIpOwogCS8qIGNyZWF0ZSBvdXIgc2VnbWVudGF0aW9uIGhlYWRlcnMgYW5kIGNvcHkgb3JpZ2luYWwgaGVhZGVycyAqLwotCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQKQorCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJZWRkcCA9IHFldGhfZWRkcF9jcmVhdGVfZWRkcF9kYXRhKHFoZHIsICh1OCAqKXNrYi0+bmguaXBoLAogCQkJCXNrYi0+bmguaXBoLT5paGwqNCwKIAkJCQkodTggKilza2ItPmgudGgsIHNrYi0+aC50aC0+ZG9mZio0KTsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCQltZW1jcHkoJmVkZHAtPm1hYywgZXRoX2hkcihza2IpLCBFVEhfSExFTik7CiAjaWZkZWYgQ09ORklHX1FFVEhfVkxBTgogCQlpZiAoZWRkcC0+bWFjLmhfcHJvdG8gPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSkpIHsKLQkJCWVkZHAtPnZsYW5bMF0gPSBfX2NvbnN0YW50X2h0b25zKHNrYi0+cHJvdG9jb2wpOworCQkJZWRkcC0+dmxhblswXSA9IHNrYi0+cHJvdG9jb2w7CiAJCQllZGRwLT52bGFuWzFdID0gaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpOwogCQl9CiAjZW5kaWYgLyogQ09ORklHX1FFVEhfVkxBTiAqLwpAQCAtNTg4LDExICs1ODgsMTEgQEAKIAlzdHJ1Y3QgcWV0aF9lZGRwX2NvbnRleHQgKmN0eCA9IE5VTEw7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA1LCAiY3JlZGRwY3QiKTsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBFVEhfUF9JUCkKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAJCWN0eCA9IHFldGhfZWRkcF9jcmVhdGVfY29udGV4dF9nZW5lcmljKGNhcmQsIHNrYiwKIAkJCXNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsgc2tiLT5uaC5pcGgtPmlobCo0ICsKIAkJCXNrYi0+aC50aC0+ZG9mZio0KTsKLQllbHNlIGlmIChza2ItPnByb3RvY29sID09IEVUSF9QX0lQVjYpCisJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKIAkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0X2dlbmVyaWMoY2FyZCwgc2tiLAogCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKIAkJCXNrYi0+aC50aC0+ZG9mZio0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5oCmluZGV4IGNhZTliYTIuLjEwMzc2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9lZGRwLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuaApAQCAtNTQsNyArNTQsNyBAQAogc3RydWN0IHFldGhfZWRkcF9kYXRhIHsKIAlzdHJ1Y3QgcWV0aF9oZHIgcWg7CiAJc3RydWN0IGV0aGhkciBtYWM7Ci0JdTE2IHZsYW5bMl07CisJX19iZTE2IHZsYW5bMl07CiAJdW5pb24gewogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGlwaGRyIGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCA4MzY0ZDU0Li43ZmRjNTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTI5ODIsNyArMjk4Miw3IEBACiAJICovCiAJaWYgKChhdG9taWNfcmVhZCgmcXVldWUtPnVzZWRfYnVmZmVycykgPD0gUUVUSF9MT1dfV0FURVJNQVJLX1BBQ0spIHx8CiAJICAgICFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKXsKLQkJaWYgKGF0b21pY19zd2FwKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfTE9DS0VEX0ZMVVNIKSA9PQorCQlpZiAoYXRvbWljX3hjaGcoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9MT0NLRURfRkxVU0gpID09CiAJCQkJUUVUSF9PVVRfUV9VTkxPQ0tFRCkgewogCQkJLyoKIAkJCSAqIElmIHdlIGdldCBpbiBoZXJlLCB0aGVyZSB3YXMgbm8gYWN0aW9uIGluCkBAIC0zMjQ1LDcgKzMyNDUsNyBAQAogCWludCBpLCBqOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImZyZWVxZGJmIik7Ci0JaWYgKGF0b21pY19zd2FwKCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkgPT0KKwlpZiAoYXRvbWljX3hjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19VTklOSVRJQUxJWkVEKSA9PQogCQlRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkKIAkJcmV0dXJuOwogCWtmcmVlKGNhcmQtPnFkaW8uaW5fcSk7CkBAIC00MzY2LDcgKzQzNjYsNyBAQAogCWlmIChmbHVzaF9jb3VudCkKIAkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCAwLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOwogCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQotCQlhdG9taWNfc3dhcCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX0xPQ0tFRF9GTFVTSCk7CisJCWF0b21pY194Y2hnKCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfTE9DS0VEX0ZMVVNIKTsKIAkvKgogCSAqIHF1ZXVlLT5zdGF0ZSB3aWxsIGdvIGZyb20gTE9DS0VEIC0+IFVOTE9DS0VEIG9yIGZyb20KIAkgKiBMT0NLRURfRkxVU0ggLT4gTE9DS0VEIGlmIG91dHB1dF9oYW5kbGVyIHdhbnRlZCB0byAnbm90aWZ5JyB1cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X3Nhcy5jCmluZGV4IGI1YjBjMmMuLjVjMGI3NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9zYXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfc2FzLmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jIGIvZHJpdmVycy9zcGkvc3BpX2J1dHRlcmZseS5jCmluZGV4IDM5ZDliMjAuLmMyZjYwMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9idXR0ZXJmbHkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYnV0dGVyZmx5LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+CiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMgYi9kcml2ZXJzL3cxL3NsYXZlcy93MV90aGVybS5jCmluZGV4IDUzNzJjZmMuLmIwMjJmZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvc2xhdmVzL3cxX3RoZXJtLmMKKysrIGIvZHJpdmVycy93MS9zbGF2ZXMvdzFfdGhlcm0uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9mcy85cC9jb252LmMgYi9mcy85cC9jb252LmMKaW5kZXggNTZkODhjMS4uYTNlZDU3MSAxMDA2NDQKLS0tIGEvZnMvOXAvY29udi5jCisrKyBiL2ZzLzlwL2NvbnYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiZGVidWcuaCIKZGlmZiAtLWdpdCBhL2ZzLzlwL2ZjYWxsLmMgYi9mcy85cC9mY2FsbC5jCmluZGV4IDg1NTYwOTcuLmRjMzM2YTYgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2ZjYWxsLmMKKysrIGIvZnMvOXAvZmNhbGwuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogCiAjaW5jbHVkZSAiZGVidWcuaCIKZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5jIGIvZnMvOXAvZmlkLmMKaW5kZXggNzA0OTJjYy4uMjc1MDcyMCAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmMKKysrIGIvZnMvOXAvZmlkLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9pZHIuaD4KIAogI2luY2x1ZGUgImRlYnVnLmgiCmRpZmYgLS1naXQgYS9mcy85cC92OWZzLmMgYi9mcy85cC92OWZzLmMKaW5kZXggMGY2MjgwNC4uMGI5NmZhZSAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmcy5jCisrKyBiL2ZzLzlwL3Y5ZnMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggZTMyZDU5Ny4uOTA1Yzg4MiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZmlsZS5jIGIvZnMvOXAvdmZzX2ZpbGUuYwppbmRleCBjM2M0N2VkLi43OWU2ZjljIDEwMDY0NAotLS0gYS9mcy85cC92ZnNfZmlsZS5jCisrKyBiL2ZzLzlwL3Zmc19maWxlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCA4ZDBhMDAxLi4wNmRhZDY2IDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtNDUsNiArNDUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CQkvKiBzaW9jZGV2cHJpdmF0ZV9pb2N0bCAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NraW5nL2RsbS9wbG9jay5jIGIvZnMvZ2ZzMi9sb2NraW5nL2RsbS9wbG9jay5jCmluZGV4IDczNjVhZWMuLjM3OTlmMTkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9ja2luZy9kbG0vcGxvY2suYworKysgYi9mcy9nZnMyL2xvY2tpbmcvZGxtL3Bsb2NrLmMKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja19kbG1fcGxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKICNpbmNsdWRlICJsb2NrX2RsbS5oIgogCmRpZmYgLS1naXQgYS9mcy9pbm90aWZ5LmMgYi9mcy9pbm90aWZ5LmMKaW5kZXggNzIzODM2YS4uZjUwOTlkOCAxMDA2NDQKLS0tIGEvZnMvaW5vdGlmeS5jCisrKyBiL2ZzL2lub3RpZnkuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5jIGIvZnMvamZmczIvYWNsLmMKaW5kZXggMGFlM2NkMS4uNzNmMGQ2MCAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmMKKysrIGIvZnMvamZmczIvYWNsLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+CmRpZmYgLS1naXQgYS9mcy9qZmZzMi93YnVmLmMgYi9mcy9qZmZzMi93YnVmLmMKaW5kZXggYjliNzAwNy4uNzA3MDczMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvd2J1Zi5jCisrKyBiL2ZzL2pmZnMyL3didWYuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgIm5vZGVsaXN0LmgiCiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9pb2N0bC5jIGIvZnMvamZzL2lvY3RsLmMKaW5kZXggMzdkYjUyNC4uZWQ4MTRiMSAxMDA2NDQKLS0tIGEvZnMvamZzL2lvY3RsLmMKKysrIGIvZnMvamZzL2lvY3RsLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzcm9vdC5jIGIvZnMvbmZzL25mc3Jvb3QuYwppbmRleCA4ZGZlZmU0Li43NWY4MTlkIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzcm9vdC5jCisrKyBiL2ZzL25mcy9uZnNyb290LmMKQEAgLTk4LDcgKzk4LDcgQEAKIHN0YXRpYyBjaGFyIG5mc19yb290X25hbWVbMjU2XSBfX2luaXRkYXRhID0gIiI7CiAKIC8qIEFkZHJlc3Mgb2YgTkZTIHNlcnZlciAqLwotc3RhdGljIF9fdTMyIHNlcnZhZGRyIF9faW5pdGRhdGEgPSAwOworc3RhdGljIF9fYmUzMiBzZXJ2YWRkciBfX2luaXRkYXRhID0gMDsKIAogLyogTmFtZSBvZiBkaXJlY3RvcnkgdG8gbW91bnQgKi8KIHN0YXRpYyBjaGFyIG5mc19wYXRoW05GU19NQVhQQVRITEVOXSBfX2luaXRkYXRhID0geyAwLCB9OwpAQCAtMzI3LDcgKzMyNyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IHJvb3RfbmZzX2FkZHIodm9pZCkKIHsKLQlpZiAoKHNlcnZhZGRyID0gcm9vdF9zZXJ2ZXJfYWRkcikgPT0gSU5BRERSX05PTkUpIHsKKwlpZiAoKHNlcnZhZGRyID0gcm9vdF9zZXJ2ZXJfYWRkcikgPT0gaHRvbmwoSU5BRERSX05PTkUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUm9vdC1ORlM6IE5vIE5GUyBzZXJ2ZXIgYXZhaWxhYmxlLCBnaXZpbmcgdXAuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQxMSw3ICs0MTEsNyBAQAogICogIENvbnN0cnVjdCBzb2NrYWRkcl9pbiBmcm9tIGFkZHJlc3MgYW5kIHBvcnQgbnVtYmVyLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNldF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgX191MzIgYWRkciwgX191MTYgcG9ydCkKK3NldF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KQogewogCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOwpAQCAtNDY4LDE0ICs0NjgsMTMgQEAKIAkJZHByaW50aygiUm9vdC1ORlM6IFBvcnRtYXBwZXIgb24gc2VydmVyIHJldHVybmVkICVkICIKIAkJCSJhcyBuZnNkIHBvcnRcbiIsIHBvcnQpOwogCX0KLQluZnNfcG9ydCA9IGh0b25zKG5mc19wb3J0KTsKIAogCWlmICgocG9ydCA9IHJvb3RfbmZzX2dldHBvcnQoTkZTX01OVF9QUk9HUkFNLCBtb3VudGRfdmVyLCBwcm90bykpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIlJvb3QtTkZTOiBVbmFibGUgdG8gZ2V0IG1vdW50ZCBwb3J0ICIKIAkJCQkibnVtYmVyIGZyb20gc2VydmVyLCB1c2luZyBkZWZhdWx0XG4iKTsKIAkJcG9ydCA9IG1vdW50ZF9wb3J0OwogCX0KLQltb3VudF9wb3J0ID0gaHRvbnMocG9ydCk7CisJbW91bnRfcG9ydCA9IHBvcnQ7CiAJZHByaW50aygiUm9vdC1ORlM6IG1vdW50ZCBwb3J0IGlzICVkXG4iLCBwb3J0KTsKIAogCXJldHVybiAwOwpAQCAtNDk2LDcgKzQ5NSw3IEBACiAJaW50IHZlcnNpb24gPSAobmZzX2RhdGEuZmxhZ3MgJiBORlNfTU9VTlRfVkVSMykgPwogCQkJCQlORlNfTU5UM19WRVJTSU9OIDogTkZTX01OVF9WRVJTSU9OOwogCi0Jc2V0X3NvY2thZGRyKCZzaW4sIHNlcnZhZGRyLCBtb3VudF9wb3J0KTsKKwlzZXRfc29ja2FkZHIoJnNpbiwgc2VydmFkZHIsIGh0b25zKG1vdW50X3BvcnQpKTsKIAlzdGF0dXMgPSBuZnNyb290X21vdW50KCZzaW4sIG5mc19wYXRoLCAmZmgsIHZlcnNpb24sIHByb3RvY29sKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJSb290LU5GUzogU2VydmVyIHJldHVybmVkIGVycm9yICVkICIKQEAgLTUxOSw2ICs1MTgsNiBAQAogCSB8fCByb290X25mc19wb3J0cygpIDwgMAogCSB8fCByb290X25mc19nZXRfaGFuZGxlKCkgPCAwKQogCQlyZXR1cm4gTlVMTDsKLQlzZXRfc29ja2FkZHIoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmbmZzX2RhdGEuYWRkciwgc2VydmFkZHIsIG5mc19wb3J0KTsKKwlzZXRfc29ja2FkZHIoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmbmZzX2RhdGEuYWRkciwgc2VydmFkZHIsIGh0b25zKG5mc19wb3J0KSk7CiAJcmV0dXJuICh2b2lkKikmbmZzX2RhdGE7CiB9CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL21hYy5jIGIvZnMvcGFydGl0aW9ucy9tYWMuYwppbmRleCBjMDg3MTAwLi5kNGEwZmFkIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL21hYy5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKQEAgLTc0LDYgKzc0LDggQEAKIAkJCWJlMzJfdG9fY3B1KHBhcnQtPnN0YXJ0X2Jsb2NrKSAqIChzZWNzaXplLzUxMiksCiAJCQliZTMyX3RvX2NwdShwYXJ0LT5ibG9ja19jb3VudCkgKiAoc2Vjc2l6ZS81MTIpKTsKIAorCQlpZiAoIXN0cm5pY21wKHBhcnQtPnR5cGUsICJMaW51eF9SQUlEIiwgMTApKQorCQkJc3RhdGUtPnBhcnRzW3Nsb3RdLmZsYWdzID0gMTsKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAkJLyoKIAkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgYm9vdGFibGUgcGFydGl0aW9uLCB0ZWxsIHRoZQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9yb290LmMgYi9mcy9wcm9jL3Jvb3QuYwppbmRleCBmZmU2NmMzLi42NGQyNDJiNiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9yb290LmMKKysrIGIvZnMvcHJvYy9yb290LmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0ci5jIGIvZnMvcmVpc2VyZnMveGF0dHIuYwppbmRleCA3YmRiMGVkLi4xZTRkNjg1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0ci5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc194YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNDdlNTU0Yy4uODRjMzIwZiAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0yMjEsNiArMjIxLDI0IEBACiB9CiAKIC8qCisgKiBTdXBlcmJsb2NrIGxvY2tpbmcuICBXZSByZWFsbHkgb3VnaHQgdG8gZ2V0IHJpZCBvZiB0aGVzZSB0d28uCisgKi8KK3ZvaWQgbG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKK3sKKwlnZXRfZnNfZXhjbCgpOworCW11dGV4X2xvY2soJnNiLT5zX2xvY2spOworfQorCit2b2lkIHVubG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKK3sKKwlwdXRfZnNfZXhjbCgpOworCW11dGV4X3VubG9jaygmc2ItPnNfbG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0wobG9ja19zdXBlcik7CitFWFBPUlRfU1lNQk9MKHVubG9ja19zdXBlcik7CisKKy8qCiAgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcwogICogc3VwZXJibG9jay4gIEZpbGVzeXN0ZW0gZGF0YSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGJsb2NrCiAgKiBkZXZpY2UuICBUYWtlcyB0aGUgc3VwZXJibG9jayBsb2NrLiAgUmVxdWlyZXMgYSBzZWNvbmQgYmxrZGV2CmRpZmYgLS1naXQgYS9mcy9zeW5jLmMgYi9mcy9zeW5jLmMKaW5kZXggMWRlNzQ3Yi4uODY1ZjMyYmUgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTYsNiArNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2ZzL3V0aW1lcy5jIGIvZnMvdXRpbWVzLmMKaW5kZXggMWJjZDg1Mi4uOTljZjJjYiAxMDA2NDQKLS0tIGEvZnMvdXRpbWVzLmMKKysrIGIvZnMvdXRpbWVzLmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3V0aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvY2hlY2tzdW0uaAppbmRleCBhNWM5ZjA4Li5kMzg1NGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NoZWNrc3VtLmgKQEAgLTcsMjEgKzcsMjAgQEAKICAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKICAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqIGlwaCwgdW5zaWduZWQgaW50IGlobCk7CitleHRlcm4gX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKIAogLyoKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitleHRlcm4gX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSk7CisJCQkJCSAgIF9fd3N1bSBzdW0pOwogCi11bnNpZ25lZCBpbnQgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJdW5zaWduZWQgaW50IHN1bSk7CisJCQkJX193c3VtIHN1bSk7CiAKIC8qCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKQEAgLTM1LDcgKzM0LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qCiAgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKQEAgLTQ0LDkgKzQzLDkgQEAKICAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgogICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0sIGludCAqZXJycCk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJwKTsKIAotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAKIC8qCkBAIC01NCwyNCArNTMsMjMgQEAKICAqIGluIGljbXAuYwogICovCiAKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pOworZXh0ZXJuIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pOwogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gd2l0aG91dCBhZGRpbmcgcHNldWRvIGhlYWRlcnMKICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gY3N1bSkKIHsKKwl1MzIgc3VtID0gKF9fZm9yY2UgdTMyKWNzdW07CiAJc3VtID0gKHN1bSAmIDB4ZmZmZikgKyAoc3VtID4+IDE2KTsKIAlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOwotCXJldHVybiB+c3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5zdW07CiB9CiAKICNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKLQorZXh0ZXJuIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCSAgICAgICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJICAgICAgIF9fd3N1bSBzdW0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCmluZGV4IDc0N2JkZDMuLjhjMGJiNWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jaGVja3N1bS5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdApAQCAtMzMsMjYgKzMzLDE4IEBACiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCiAKLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSk7CitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cik7Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBvbGQgKGFuZCB1bnNhZmUpIHdheSBvZiBkb2luZyBjaGVja3N1bXMsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwKLSAqIGJlIHByaW50ZWQgaWYgaXQgaXMgdXNlZCBhbmQgYW4gZXhjZXB0aW9uIG9jY3Vycy4KLSAqCi0gKiB0aGlzIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhZnRlciBzb21lIHRpbWUuCi0gKi8KLSNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHkoc3JjLGRzdCxsZW4sc3VtKQljc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYyxkc3QsbGVuLHN1bSkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJfcHRyKTsKIAogLyoKICAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKICAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKLWlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQorc3RhdGljIGlubGluZSBfX3N1bTE2CitpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXVuc2lnbmVkIGludCBzdW0sIHRtcDE7CiAKQEAgLTc4LDE0ICs3MCwxMyBAQAogCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKSwgIj1yIiAodG1wMSkKIAk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCiAJOiAiY2MiLCAibWVtb3J5Iik7Ci0JcmV0dXJuIHN1bTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07CiB9CiAKIC8qCiAgKiAJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gd2l0aG91dCBhZGRpbmcgcHNldWRvIGhlYWRlcnMKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewogCV9fYXNtX18oCiAJImFkZHMJJTAsICUxLCAlMSwgbHNsICMxNglAIGNzdW1fZm9sZAkJXG5cCkBAIC05MywyMSArODQsMjUgQEAKIAk6ICI9ciIgKHN1bSkKIAk6ICJyIiAoc3VtKQogCTogImNjIik7Ci0JcmV0dXJuICh+c3VtKSA+PiAxNjsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofihfX2ZvcmNlIHUzMilzdW0gPj4gMTYpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICAgdW5zaWduZWQgaW50IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3dzdW0KK2NzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fKAogCSJhZGRzCSUwLCAlMSwgJTIJCUAgY3N1bV90Y3B1ZHBfbm9mb2xkCVxuXAotCWFkY3MJJTAsICUwLCAlMwkJCQkJXG5cCi0JYWRjcwklMCwgJTAsICU0CQkJCQlcblwKLQlhZGNzCSUwLCAlMCwgJTUJCQkJCVxuXAorCWFkY3MJJTAsICUwLCAlMwkJCQkJXG4iCisjaWZkZWYgX19BUk1FQl9fCisJImFkY3MJJTAsICUwLCAlNAkJCQkJXG4iCisjZWxzZQorCSJhZGNzCSUwLCAlMCwgJTQsIGxzbCAjOAkJCQlcbiIKKyNlbmRpZgorCSJhZGNzCSUwLCAlMCwgJTUJCQkJCVxuXAogCWFkYwklMCwgJTAsICMwIgogCTogIj0mciIoc3VtKQotCTogInIiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAobnRvaHMobGVuKSksICJJciIgKG50b2hzKHByb3RvKSkKKwk6ICJyIiAoc3VtKSwgInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiciIgKGxlbiksICJJciIgKGh0b25zKHByb3RvKSkKIAk6ICJjYyIpOwogCXJldHVybiBzdW07CiB9CQpAQCAtMTE1LDIzICsxMTAsMjcgQEAKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludAotY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkgIHVuc2lnbmVkIGludCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgorY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fKAogCSJhZGRzCSUwLCAlMSwgJTIJCUAgY3N1bV90Y3B1ZHBfbWFnaWMJXG5cCi0JYWRjcwklMCwgJTAsICUzCQkJCQlcblwKLQlhZGNzCSUwLCAlMCwgJTQJCQkJCVxuXAotCWFkY3MJJTAsICUwLCAlNQkJCQkJXG5cCisJYWRjcwklMCwgJTAsICUzCQkJCQlcbiIKKyNpZmRlZiBfX0FSTUVCX18KKwkiYWRjcwklMCwgJTAsICU0CQkJCQlcbiIKKyNlbHNlCisJImFkY3MJJTAsICUwLCAlNCwgbHNsICM4CQkJCVxuIgorI2VuZGlmCisJImFkY3MJJTAsICUwLCAlNQkJCQkJXG5cCiAJYWRjCSUwLCAlMCwgIzAJCQkJCVxuXAogCWFkZHMJJTAsICUwLCAlMCwgbHNsICMxNgkJCQlcblwKIAlhZGRjcwklMCwgJTAsICMweDEwMDAwCQkJCVxuXAogCW12bgklMCwgJTAiCiAJOiAiPSZyIihzdW0pCi0JOiAiciIgKHN1bSksICJyIiAoZGFkZHIpLCAiciIgKHNhZGRyKSwgInIiIChudG9ocyhsZW4pKSwgIklyIiAobnRvaHMocHJvdG8pKQorCTogInIiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAobGVuKSwgIklyIiAoaHRvbnMocHJvdG8pKQogCTogImNjIik7Ci0JcmV0dXJuIHN1bSA+PiAxNjsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikoKF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7CiB9CiAKIApAQCAtMTM5LDIwICsxMzgsMjAgQEAKICAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKICAqIGluIGljbXAuYwogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0Ci1pcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYKK2lwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOwogfQogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi1leHRlcm4gdW5zaWduZWQgbG9uZwotX19jc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwgX191MzIgbGVuLAotCQlfX3UzMiBwcm90bywgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtCitfX2NzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX2JlMzIgbGVuLAorCQlfX2JlMzIgcHJvdG8sIF9fd3N1bSBzdW0pOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludAotY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIF9fdTMyIGxlbiwKLQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYKK2NzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sCisJCXVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoX19jc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBodG9ubChsZW4pLAogCQkJCQkgICBodG9ubChwcm90byksIHN1bSkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWFybTI2L2NoZWNrc3VtLmgKaW5kZXggZDQyNTZkNS4uZjJiNGIwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9jaGVja3N1bS5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdApAQCAtMzMsMjYgKzMzLDE4IEBACiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCiAKLXVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSk7CitfX3dzdW0KK2NzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCi11bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cik7Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSBvbGQgKGFuZCB1bnNhZmUpIHdheSBvZiBkb2luZyBjaGVja3N1bXMsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwKLSAqIGJlIHByaW50ZWQgaWYgaXQgaXMgdXNlZCBhbmQgYW4gZXhjZXB0aW9uIG9jY3Vycy4KLSAqCi0gKiB0aGlzIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhZnRlciBzb21lIHRpbWUuCi0gKi8KLSNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHkoc3JjLGRzdCxsZW4sc3VtKQljc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYyxkc3QsbGVuLHN1bSkKK19fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJfcHRyKTsKIAogLyoKICAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKICAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKLWlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQorc3RhdGljIGlubGluZSBfX3N1bTE2CitpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXVuc2lnbmVkIGludCBzdW0sIHRtcDE7CiAKQEAgLTc4LDE0ICs3MCwxMyBAQAogCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKSwgIj1yIiAodG1wMSkKIAk6ICIxIiAoaXBoKSwgIjIiIChpaGwpCiAJOiAiY2MiKTsKLQlyZXR1cm4gc3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KXN1bTsKIH0KIAogLyoKICAqIAlGb2xkIGEgcGFydGlhbCBjaGVja3N1bSB3aXRob3V0IGFkZGluZyBwc2V1ZG8gaGVhZGVycwogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkiYWRkcwklMCwgJTEsICUxLCBsc2wgIzE2CUAgY3N1bV9mb2xkCQlcblwKQEAgLTkzLDEyICs4NCwxMiBAQAogCTogIj1yIiAoc3VtKQogCTogInIiIChzdW0pCiAJOiAiY2MiKTsKLQlyZXR1cm4gKH5zdW0pID4+IDE2OworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSh+KF9fZm9yY2UgdTMyKXN1bSA+PiAxNik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1jc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkgICB1bnNpZ25lZCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCV9fYXNtX18oCiAJImFkZHMJJTAsICUxLCAlMgkJQCBjc3VtX3RjcHVkcF9ub2ZvbGQJXG5cCkBAIC0xMDcsNyArOTgsNyBAQAogCWFkY3MJJTAsICUwLCAlNQkJCQkJXG5cCiAJYWRjCSUwLCAlMCwgIzAiCiAJOiAiPSZyIihzdW0pCi0JOiAiciIgKHN1bSksICJyIiAoZGFkZHIpLCAiciIgKHNhZGRyKSwgInIiIChudG9ocyhsZW4pKSwgIklyIiAobnRvaHMocHJvdG8pKQorCTogInIiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAoaHRvbnMobGVuKSksICJJciIgKGh0b25zKHByb3RvKSkKIAk6ICJjYyIpOwogCXJldHVybiBzdW07CiB9CQpAQCAtMTE1LDkgKzEwNiw5IEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKLWNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICB1bnNpZ25lZCBpbnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYKK2NzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkiYWRkcwklMCwgJTEsICUyCQlAIGNzdW1fdGNwdWRwX21hZ2ljCVxuXApAQCAtMTI5LDkgKzEyMCw5IEBACiAJYWRkY3MJJTAsICUwLCAjMHgxMDAwMAkJCQlcblwKIAltdm4JJTAsICUwIgogCTogIj0mciIoc3VtKQotCTogInIiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAobnRvaHMobGVuKSksICJJciIgKG50b2hzKHByb3RvKSkKKwk6ICJyIiAoc3VtKSwgInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiciIgKGh0b25zKGxlbikpLCAiSXIiIChodG9ucyhwcm90bykpCiAJOiAiY2MiKTsKLQlyZXR1cm4gc3VtID4+IDE2OworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSgoX19mb3JjZSB1MzIpc3VtID4+IDE2KTsKIH0KIAogCkBAIC0xMzksMjAgKzEzMCwyMCBAQAogICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQogICogaW4gaWNtcC5jCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKLWlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgoraXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7CiB9CiAKICNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KLWV4dGVybiB1bnNpZ25lZCBsb25nCi1fX2NzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3UzMiBsZW4sCi0JCV9fdTMyIHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKTsKK2V4dGVybiBfX3dzdW0KK19fY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIF9fYmUzMiBsZW4sCisJCV9fYmUzMiBwcm90bywgX193c3VtIHN1bSk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50Ci1jc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwgX191MzIgbGVuLAotCQl1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgorY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIF9fdTMyIGxlbiwKKwkJdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChfX2NzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIGh0b25sKGxlbiksCiAJCQkJCSAgIGh0b25sKHByb3RvKSwgc3VtKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hdnIzMi9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tYXZyMzIvY2hlY2tzdW0uaAppbmRleCA0MWI3YWYwLi5hZjlkNTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hdnIzMi9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWF2cjMyL2NoZWNrc3VtLmgKQEAgLTIwLDggKzIwLDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwKLQkJCSAgdW5zaWduZWQgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CkBAIC0zMCw4ICsyOSw4IEBACiAgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBpbnQgbGVuLAotCQkJCSAgICAgICBpbnQgc3VtLCBpbnQgKnNyY19lcnJfcHRyLAorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sCisJCQkJICAgICAgIF9fd3N1bSBzdW0sIGludCAqc3JjX2Vycl9wdHIsCiAJCQkJICAgICAgIGludCAqZHN0X2Vycl9wdHIpOwogCiAvKgpAQCAtNDIsMTcgKzQxLDE3IEBACiAgKgl2ZXJpZnlfYXJlYSgpLgogICovCiBzdGF0aWMgaW5saW5lCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwKLQkJCQkgICAgICAgaW50IGxlbiwgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCSAgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIgKGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGNoYXIgKmRzdCwKLQkJCQkJICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJICBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7Ci0JcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKGNvbnN0IGNoYXIgX19mb3JjZSAqKXNyYywgZHN0LCBsZW4sCisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKGNvbnN0IHZvaWQgX19mb3JjZSAqKXNyYywgZHN0LCBsZW4sCiAJCQkJCSBzdW0sIGVycl9wdHIsIE5VTEwpOwogfQogCkBAIC02MCw4ICs1OSw3IEBACiAgKglUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCiAgKgl3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICppcGgsCi0JCQkJCSAgdW5zaWduZWQgaW50IGlobCkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXVuc2lnbmVkIGludCBzdW0sIHRtcDsKIApAQCAtOTAsMTQgKzg4LDE0IEBACiAJCTogIj1yIihzdW0pLCAiPXIiKGlwaCksICI9ciIoaWhsKSwgIj1yIih0bXApCiAJCTogIjEiKGlwaCksICIyIihpaGwpCiAJCTogIm1lbW9yeSIsICJjYyIpOwotCXJldHVybiBzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCkBAIC0xMDksMjEgKzEwNywyMCBAQAogCSAgICA6ICI9JnIiKHN1bSksICI9JnIiKHRtcCkKIAkgICAgOiAiMCIoc3VtKSk7CiAKLQlyZXR1cm4gfnN1bTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+c3VtOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3VtKQorCQkJCQkgICAgICAgX193c3VtIHN1bSkKIHsKIAlhc20oIglhZGQJJTAsICUxXG4iCiAJICAgICIJYWRjCSUwLCAlMCwgJTJcbiIKIAkgICAgIglhZGMJJTAsICUwLCAlM1xuIgogCSAgICAiCWFjcgklMCIKIAkgICAgOiAiPXIiKHN1bSkKLQkgICAgOiAiciIoZGFkZHIpLCAiciIoc2FkZHIpLCAiciIobnRvaHMobGVuKSB8IChwcm90byA8PCAxNikpLAorCSAgICA6ICJyIihkYWRkciksICJyIihzYWRkciksICJyIihsZW4gKyBwcm90byksCiAJICAgICAgIjAiKHN1bSkKIAkgICAgOiAiY2MiKTsKIApAQCAtMTM0LDExICsxMzEsMTAgQEAKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKKwkJCQkJCSAgIF9fd3N1bSBzdW0pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOwogfQpAQCAtMTQ4LDcgKzE0NCw3IEBACiAgKiBpbiBpY21wLmMKICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKIHsKICAgICByZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvY2hlY2tzdW0uaAppbmRleCA2MzNmMjM0Li5iODAwMGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9jaGVja3N1bS5oCkBAIC04LDExICs4LDExIEBACiAgKiB0byBzcGxpdCBhbGwgb2YgdGhvc2UgaW50byAxNi1iaXQgY29tcG9uZW50cywgdGhlbiBhZGQuCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3dzdW0KK2NzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKLQlpbnQgcmVzOworCV9fd3N1bSByZXM7CiAJX19hc21fXyAoImFkZC5kICUyLCAlMFxuXHQiCiAJCSAiYXhcblx0IgogCQkgImFkZC5kICUzLCAlMFxuXHQiCkBAIC0yMSw3ICsyMSw3IEBACiAJCSAiYXhcblx0IgogCQkgImFkZHEgMCwgJTBcbiIKIAk6ICI9ciIgKHJlcykKLQk6ICIwIiAoc3VtKSwgInIiIChkYWRkciksICJyIiAoc2FkZHIpLCAiciIgKChudG9ocyhsZW4pIDw8IDE2KSArIChwcm90byA8PCA4KSkpOworCTogIjAiIChzdW0pLCAiciIgKGRhZGRyKSwgInIiIChzYWRkciksICJyIiAoKGxlbiArIHByb3RvKSA8PCA4KSk7CiAKIAlyZXR1cm4gcmVzOwogfQkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvY2hlY2tzdW0uaAppbmRleCA5N2VmODllLi5lNWRjZmNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9jaGVja3N1bS5oCkBAIC05LDExICs5LDExIEBACiAgKiBjaGVja3N1bS4gV2hpY2ggbWVhbnMgaXQgd291bGQgYmUgbmVjZXNzYXJ5IHRvIHNwbGl0IGFsbCB0aG9zZSBpbnRvCiAgKiAxNi1iaXQgY29tcG9uZW50cyBhbmQgdGhlbiBhZGQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1jc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwKLQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX193c3VtCitjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7Ci0JaW50IHJlczsKKwlfX3dzdW0gcmVzOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJhZGQuZCAlMiwgJTBcblx0IgogCQkJICAgICAgImFkZGMgJTMsICUwXG5cdCIKQEAgLTIxLDcgKzIxLDcgQEAKIAkJCSAgICAgICJhZGRjIDAsICUwXG5cdCIKIAkJCSAgICAgIDogIj1yIiAocmVzKQogCQkJICAgICAgOiAiMCIgKHN1bSksICJyIiAoZGFkZHIpLCAiciIgKHNhZGRyKSwgXAotCQkJICAgICAgInIiICgobnRvaHMobGVuKSA8PCAxNikgKyAocHJvdG8gPDwgOCkpKTsKKwkJCSAgICAgICJyIiAoKGxlbiArIHByb3RvKSA8PCA4KSk7CiAKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9jaGVja3N1bS5oCmluZGV4IDI2YTc3MTkuLjE4MGRiZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2NoZWNrc3VtLmgKQEAgLTE3LDcgKzE3LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CkBAIC0yNywyNiArMjcsMjMgQEAKICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KIAotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCi0JCQkJICAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCisJCQkJICAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gaW50byBhIHdvcmQKICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIGNzdW0pCiB7Ci0JLyogdGhlIHdoaWxlIGxvb3AgaXMgdW5uZWNlc3NhcnkgcmVhbGx5LCBpdCdzIGFsd2F5cyBlbm91Z2ggd2l0aCB0d28KLQkgICBpdGVyYXRpb25zICovCi0JCi0Jd2hpbGUoc3VtID4+IDE2KQotCQlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOyAvKiBhZGQgaW4gZW5kLWFyb3VuZCBjYXJyeSAqLwotCQotCXJldHVybiB+c3VtOworCXUzMiBzdW0gPSAoX19mb3JjZSB1MzIpY3N1bTsKKwlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOyAvKiBhZGQgaW4gZW5kLWFyb3VuZCBjYXJyeSAqLworCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7IC8qIGFkZCBpbiBlbmQtYXJvdW5kIGNhcnJ5ICovCisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfnN1bTsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCi0JCQkJCQlpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLCAKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJCWludCBsZW4sIF9fd3N1bSBzdW0sCiAJCQkJCQlpbnQgKmVycnB0cik7CiAKIC8qCkBAIC01NSw4ICs1Miw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsCi0JCQkJCSAgdW5zaWduZWQgaW50IGlobCkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGlwaCwgaWhsICogNCwgMCkpOwogfQpAQCAtNjYsMTEgKzYyLDEwIEBACiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCQkgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorc3RhdGljIGlubGluZSBfX3N1bTE2IGludCBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKKwkJCQkJCSAgIF9fd3N1bSBzdW0pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOwogfQpAQCAtODAsNyArNzUsOCBAQAogICogaW4gaWNtcC5jCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pIHsKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKK3sKIAlyZXR1cm4gY3N1bV9mb2xkIChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tZnJ2L2NoZWNrc3VtLmgKaW5kZXggNDJiZjBkYi4uOWIxNjg5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2NoZWNrc3VtLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CkBAIC0zNSw3ICszNSw3IEBACiAgKiBoZXJlIGV2ZW4gbW9yZSBpbXBvcnRhbnQgdG8gYWxpZ24gc3JjIGFuZCBkc3Qgb24gYSAzMi1iaXQgKG9yIGV2ZW4KICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weShjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qCiAgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWxfY29weSwgYnV0IGNvcGllcyBmcm9tIHVzZXIgc3BhY2UuCkBAIC00MywxMSArNDMsOCBAQAogICogaGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqc3JjLCBjaGFyICpkc3QsCi0JCQkJCQlpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmNzdW1fZXJyKTsKLQotI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkJXAotCWNzdW1fcGFydGlhbF9jb3B5KChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQorZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAorCQkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICpjc3VtX2Vycik7CiAKIC8qCiAgKglUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCkBAIC01NSw3ICs1Miw3IEBACiAgKgogICovCiBzdGF0aWMgaW5saW5lCi11bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQorX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXVuc2lnbmVkIGludCB0bXAsIGluYywgc3VtID0gMDsKIApAQCAtODEsMTMgKzc4LDEzIEBACiAJICAgIDogImljYzAiLCAiaWNjMSIKIAkgICAgKTsKIAotCXJldHVybiB+c3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5zdW07CiB9CiAKIC8qCiAgKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCkBAIC0xMDAsMTYgKzk3LDE2IEBACiAJICAgIDogIjAiKHN1bSkKIAkgICAgKTsKIAotCXJldHVybiB+c3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5zdW07CiB9CiAKIC8qCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJYXNtKCIJYWRkY2MJCSUxLCUwLCUwLGljYzAJXG4iCiAJICAgICIJYWRkeGNjCQklMiwlMCwlMCxpY2MwCVxuIgpAQCAtMTIyLDkgKzExOSw5IEBACiAJcmV0dXJuIHN1bTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKLWNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgorY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7CiB9CkBAIC0xMzMsMTIgKzEzMCwxMiBAQAogICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQogICogaW4gaWNtcC5jCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pOworZXh0ZXJuIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pOwogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludAotY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCV9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYKK2NzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGxvbmcgdG1wLCB0bXAyOwogCkBAIC0xNzcsNyArMTc0LDcgQEAKIAkgICAgOiAiaWNjMCIKIAkgICAgKTsKIAotCXJldHVybiB+c3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5zdW07CiB9CiAKICNlbmRpZiAvKiBfQVNNX0NIRUNLU1VNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1oODMwMC9jaGVja3N1bS5oCmluZGV4IDMwNTE5MzEuLjk4NzI0ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvY2hlY2tzdW0uaApAQCAtMTMsNyArMTMsNyBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQogICovCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKK19fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qCiAgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKQEAgLTIzLDcgKzIzLDcgQEAKICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KIAotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5KGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBpbnQgbGVuLCBpbnQgc3VtKTsKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogCiAvKgpAQCAtMzMsMjAgKzMzLDE3IEBACiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAotCQkJCQkJaW50IGxlbiwgaW50IHN1bSwgaW50ICpjc3VtX2Vycik7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmNzdW1fZXJyKTsKIAotI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkJXAotCWNzdW1fcGFydGlhbF9jb3B5KChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQotCi11bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKK19fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCk7CiAKIAogLyoKICAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygibW92LmwgJTAsZXIwXG5cdCIKIAkJImFkZC53IGUwLHIwXG5cdCIKQEAgLTU4LDcgKzU1LDcgQEAKIAkJOiAiPXIiKHN1bSkKIAkJOiAiMCIoc3VtKQogCQk6ICJlcjAiKTsKLQlyZXR1cm4gfnN1bTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+c3VtOwogfQogCiAKQEAgLTY3LDkgKzY0LDkgQEAKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXyAoInN1Yi5sIGVyMCxlcjBcblx0IgogCQkgImFkZC5sICUyLCUwXG5cdCIKQEAgLTg4LDkgKzg1LDkgQEAKIAlyZXR1cm4gc3VtOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludAotY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2Citjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTEwMCw2ICs5Nyw2IEBACiAgKiBpbiBpY21wLmMKICAqLwogCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKTsKK2V4dGVybiBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKTsKIAogI2VuZGlmIC8qIF9IODMwMF9DSEVDS1NVTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NoZWNrc3VtLmgKaW5kZXggNjdkMzYzMC4uNzUxOTRhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvY2hlY2tzdW0uaApAQCAtMTcsNyArMTcsNyBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQogICovCi1hc21saW5rYWdlIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworYXNtbGlua2FnZSBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CkBAIC0yNyw4ICsyNyw4IEBACiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCiAKLWFzbWxpbmthZ2UgdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkJCQkgIGludCBsZW4sIGludCBzdW0sIGludCAqc3JjX2Vycl9wdHIsIGludCAqZHN0X2Vycl9wdHIpOworYXNtbGlua2FnZSBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJCSAgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7CiAKIC8qCiAgKglOb3RlOiB3aGVuIHlvdSBnZXQgYSBOVUxMIHBvaW50ZXIgZXhjZXB0aW9uIGhlcmUgdGhpcyBtZWFucyBzb21lb25lCkBAIC0zOCwxOCArMzgsMTggQEAKICAqCWFjY2Vzc19vaygpLgogICovCiBzdGF0aWMgX19pbmxpbmVfXwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCQlpbnQgbGVuLCBpbnQgc3VtKQorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sgKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljICggc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCQkJaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKQorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJbWlnaHRfc2xlZXAoKTsKLQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoX19mb3JjZSB1bnNpZ25lZCBjaGFyICopc3JjLCBkc3QsCisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKXNyYywgZHN0LAogCQkJCQlsZW4sIHN1bSwgZXJyX3B0ciwgTlVMTCk7CiB9CiAKQEAgLTYwLDggKzYwLDcgQEAKICAqCUJ5IEpvcmdlIEN3aWsgPGpvcmdlQGxhc2VyLnNhdGxpbmsubmV0PiwgYWRhcHRlZCBmb3IgbGludXggYnkKICAqCUFybnQgR3VsYnJhbmRzZW4uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsCi0JCQkJCSAgdW5zaWduZWQgaW50IGlobCkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXVuc2lnbmVkIGludCBzdW07CiAKQEAgLTg5LDI5ICs4OCwyOSBAQAogCTogIj1yIiAoc3VtKSwgIj1yIiAoaXBoKSwgIj1yIiAoaWhsKQogCTogIjEiIChpcGgpLCAiMiIgKGlobCkKIAk6ICJtZW1vcnkiKTsKLQlyZXR1cm4oc3VtKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07CiB9CiAKIC8qCiAgKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewogCV9fYXNtX18oCiAJCSJhZGRsICUxLCAlMAkJO1xuIgogCQkiYWRjbCAkMHhmZmZmLCAlMAk7XG4iCiAJCTogIj1yIiAoc3VtKQotCQk6ICJyIiAoc3VtIDw8IDE2KSwgIjAiIChzdW0gJiAweGZmZmYwMDAwKQorCQk6ICJyIiAoKF9fZm9yY2UgdTMyKXN1bSA8PCAxNiksCisJCSAgIjAiICgoX19mb3JjZSB1MzIpc3VtICYgMHhmZmZmMDAwMCkKIAkpOwotCXJldHVybiAofnN1bSkgPj4gMTY7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpKH4oX19mb3JjZSB1MzIpc3VtID4+IDE2KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAorCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICAgX193c3VtIHN1bSkKIHsKICAgICBfX2FzbV9fKAogCSJhZGRsICUxLCAlMAk7XG4iCkBAIC0xMTksNyArMTE4LDcgQEAKIAkiYWRjbCAlMywgJTAJO1xuIgogCSJhZGNsICQwLCAlMAk7XG4iCiAJOiAiPXIiIChzdW0pCi0JOiAiZyIgKGRhZGRyKSwgImciKHNhZGRyKSwgImciKChudG9ocyhsZW4pPDwxNikrcHJvdG8qMjU2KSwgIjAiKHN1bSkpOworCTogImciIChkYWRkciksICJnIihzYWRkciksICJnIigobGVuICsgcHJvdG8pIDw8IDgpLCAiMCIoc3VtKSk7CiAgICAgcmV0dXJuIHN1bTsKIH0KIApAQCAtMTI3LDExICsxMjYsMTAgQEAKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKKwkJCQkJCSAgIF9fd3N1bSBzdW0pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOwogfQpAQCAtMTQxLDE3ICsxMzksMTYgQEAKICAqIGluIGljbXAuYwogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogICAgIHJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkJICAgICBfX3UzMiBsZW4sCi0JCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIF9faW5saW5lX18gX19zdW0xNiBjc3VtX2lwdjZfbWFnaWMoY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCSAgX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fKAogCQkiYWRkbCAwKCUxKSwgJTAJCTtcbiIKQEAgLTE3NiwxOSArMTczLDE5IEBACiAgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGNzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsCi0JCQkJCQkgICAgIGludCBsZW4sIGludCBzdW0sIAorc3RhdGljIF9faW5saW5lX18gX193c3VtIGNzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsCisJCQkJCQkgICAgIHZvaWQgX191c2VyICpkc3QsCisJCQkJCQkgICAgIGludCBsZW4sIF9fd3N1bSBzdW0sCiAJCQkJCQkgICAgIGludCAqZXJyX3B0cikKIHsKIAltaWdodF9zbGVlcCgpOwogCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkc3QsIGxlbikpCi0JCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKHNyYywgKF9fZm9yY2UgdW5zaWduZWQgY2hhciAqKWRzdCwgbGVuLCBzdW0sIE5VTEwsIGVycl9wdHIpOworCQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhzcmMsIChfX2ZvcmNlIHZvaWQgKilkc3QsIGxlbiwgc3VtLCBOVUxMLCBlcnJfcHRyKTsKIAogCWlmIChsZW4pCiAJCSplcnJfcHRyID0gLUVGQVVMVDsKIAotCXJldHVybiAtMTsgLyogaW52YWxpZCBjaGVja3N1bSAqLworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1pYTY0L2NoZWNrc3VtLmgKaW5kZXggMWYyMzBmZi4uYmQ0MGY0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvY2hlY2tzdW0uaApAQCAtMTAsMjMgKzEwLDIxIEBACiAgKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBpcF9jb21wdXRlX2NzdW0oKSBvcHRpbWl6ZWQgZm9yIElQIGhlYWRlcnMsCiAgKiB3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgogICovCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtICh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKK2V4dGVybiBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOwogCiAvKgogICogQ29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIgcmV0dXJucyBhIDE2LWJpdAogICogY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWMgKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK2V4dGVybiBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljIChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHN1bSk7CisJCQkJCSAgICAgX193c3VtIHN1bSk7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV90Y3B1ZHBfbm9mb2xkICh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQl1bnNpZ25lZCBsb25nIGRhZGRyLAorZXh0ZXJuIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQgKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCXVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQl1bnNpZ25lZCBpbnQgc3VtKTsKKwkJCQkJX193c3VtIHN1bSk7CiAKIC8qCiAgKiBDb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgYSBtZW1vcnkgYmxvY2sgYXQgYnVmZiwgbGVuZ3RoIGxlbiwKQEAgLTQwLDggKzM4LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLAotCQkJCSAgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqIFNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0IGNoZWNrc3Vtcy4KQEAgLTQ5LDI4ICs0NiwyOCBAQAogICogSGVyZSBpdCBpcyBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvcgogICogZXZlbiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeS4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIgKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAotCQkJCQkJIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0sCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCQkgaW50IGxlbiwgX193c3VtIHN1bSwKIAkJCQkJCSBpbnQgKmVycnApOwogCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sgKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAotCQkJCQkgICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCisJCQkJCSAgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkgaW4KICAqIGljbXAuYwogICovCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtICh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgbGVuKTsKK2V4dGVybiBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKTsKIAogLyoKICAqIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0Ci1jc3VtX2ZvbGQgKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBjc3VtKQogeworCXUzMiBzdW0gPSAoX19mb3JjZSB1MzIpY3N1bTsKIAlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOwogCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7Ci0JcmV0dXJuIH5zdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfnN1bTsKIH0KIAogI2VuZGlmIC8qIF9BU01fSUE2NF9DSEVDS1NVTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1tMzJyL2NoZWNrc3VtLmgKaW5kZXggODc3ZWJmNC4uYTdhN2M0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvY2hlY2tzdW0uaApAQCAtMzEsOCArMzEsNyBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQogICovCi1hc21saW5rYWdlIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZiwKLQkJCQkgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworYXNtbGlua2FnZSBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogVGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0IGNoZWNrc3Vtcy4KQEAgLTQwLDI0ICszOSwyMiBAQAogICogSGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qCiAgKiBUaGlzIGlzIGEgbmV3IHZlcnNpb24gb2YgdGhlIGFib3ZlIHRoYXQgcmVjb3JkcyBlcnJvcnMgaXQgZmluZHMgaW4gKmVycnAsCiAgKiBidXQgY29udGludWVzIGFuZCB6ZXJvcyB0aHJlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0sCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplcnJfcHRyKTsKIAogLyoKICAqCUZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgbG9uZyB0bXByZWc7CiAJX19hc21fXygKQEAgLTcyLDE2ICs2OSwxNyBAQAogCQk6ICIwIiAgKHN1bSkKIAkJOiAiY2JpdCIKIAkpOwotCXJldHVybiBzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCiAvKgogICogVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICogd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqIGlwaCwKLQkJCQkJICB1bnNpZ25lZCBpbnQgaWhsKSB7Ci0JdW5zaWduZWQgbG9uZyBzdW0sIHRtcHJlZzAsIHRtcHJlZzE7CitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcHJlZzAsIHRtcHJlZzE7CisJX193c3VtIHN1bTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkiCWxkCSUwLCBAJTErIFxuIgpAQCAtMTE1LDE2ICsxMTMsMTUgQEAKIAlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pCisJCQkJCSAgICAgICBfX3dzdW0gc3VtKQogewogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKG50b2hzKGxlbik8PDE2KStwcm90byoyNTY7CisJdW5zaWduZWQgbG9uZyBsZW5fcHJvdG8gPSAocHJvdG8gKyBsZW4pIDw8IDg7CiAjZWxzZQotCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKHByb3RvPDwxNikrbGVuOworCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gcHJvdG8gKyBsZW47CiAjZW5kaWYKIAl1bnNpZ25lZCBsb25nIHRtcHJlZzsKIApAQCAtMTQ3LDExICsxNDQsMTAgQEAKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkKKwkJCQkJCSAgIF9fd3N1bSBzdW0pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3RjcHVkcF9ub2ZvbGQoc2FkZHIsZGFkZHIsbGVuLHByb3RvLHN1bSkpOwogfQpAQCAtMTYxLDE2ICsxNTcsMTYgQEAKICAqIGluIGljbXAuYwogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKSB7CitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCit7CiAJcmV0dXJuIGNzdW1fZm9sZCAoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOwogfQogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkJIF9fdTE2IGxlbiwKLQkJCQkJCSB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSB1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJICAgICAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkgICAgICBfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGxvbmcgdG1wcmVnMCwgdG1wcmVnMSwgdG1wcmVnMiwgdG1wcmVnMzsKIAlfX2FzbV9fKApAQCAtMTk3LDcgKzE5Myw3IEBACiAJCTogIj0mciIgKHN1bSksICI9JnIiICh0bXByZWcwKSwgIj0mciIgKHRtcHJlZzEpLAogCQkgICI9JnIiICh0bXByZWcyKSwgIj0mciIgKHRtcHJlZzMpCiAJCTogInIiIChzYWRkciksICJyIiAoZGFkZHIpLAotCQkgICJyIiAoaHRvbmwoKF9fdTMyKSAobGVuKSkpLCAiciIgKGh0b25sKHByb3RvKSksICIwIiAoc3VtKQorCQkgICJyIiAoaHRvbmwobGVuKSksICJyIiAoaHRvbmwocHJvdG8pKSwgIjAiIChzdW0pCiAJCTogImNiaXQiCiAJKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tbTY4ay9jaGVja3N1bS5oCmluZGV4IDE3MjgwZWYuLjQ5NGY5YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2NoZWNrc3VtLmgKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CkBAIC0yNSwyMiArMjUsMjEgQEAKICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywKLQkJCQkJCXVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkJCWludCBsZW4sIGludCBzdW0sCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLAorCQkJCQkJdm9pZCAqZHN0LAorCQkJCQkJaW50IGxlbiwgX193c3VtIHN1bSwKIAkJCQkJCWludCAqY3N1bV9lcnIpOwogCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkJCSAgICAgIGludCBzdW0pOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywKKwkJCQkJICAgICAgdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJCQkgICAgICBfX3dzdW0gc3VtKTsKIAogLyoKICAqCVRoaXMgaXMgYSB2ZXJzaW9uIG9mIGlwX2NvbXB1dGVfY3N1bSgpIG9wdGltaXplZCBmb3IgSVAgaGVhZGVycywKICAqCXdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuCiAgKgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0Ci1pcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7CiAJdW5zaWduZWQgaW50IHN1bSA9IDA7CiAJdW5zaWduZWQgbG9uZyB0bXA7CkBAIC01OCwyOSArNTcsMjkgQEAKIAkJIDogIj1kIiAoc3VtKSwgIj0mYSIgKGlwaCksICI9JmQiIChpaGwpLCAiPSZkIiAodG1wKQogCQkgOiAiMCIgKHN1bSksICIxIiAoaXBoKSwgIjIiIChpaGwpCiAJCSA6ICJtZW1vcnkiKTsKLQlyZXR1cm4gfnN1bTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNil+c3VtOwogfQogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKLQl1bnNpZ25lZCBpbnQgdG1wID0gc3VtOworCXVuc2lnbmVkIGludCB0bXAgPSAoX19mb3JjZSB1MzIpc3VtOwogCV9fYXNtX18oInN3YXAgJTFcblx0IgogCQkiYWRkdyAlMSwgJTBcblx0IgogCQkiY2xydyAlMVxuXHQiCiAJCSJhZGR4dyAlMSwgJTAiCiAJCTogIj0mZCIgKHN1bSksICI9JmQiICh0bXApCiAJCTogIjAiIChzdW0pLCAiMSIgKHRtcCkpOwotCXJldHVybiB+c3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5zdW07CiB9CiAKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXyAoImFkZGwgICUyLCUwXG5cdCIKIAkJICJhZGR4bCAlMywlMFxuXHQiCkBAIC05OCw5ICs5Nyw5IEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKLWNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgorY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7CiB9CkBAIC0xMTAsMTYgKzEwOSwxNSBAQAogICogaW4gaWNtcC5jCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAotaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogCXJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50Ci1jc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYKK2NzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG1wOwogCV9fYXNtX18oImFkZGwgJTJALCUwXG5cdCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NoZWNrc3VtLmgKaW5kZXggMjk0ZWM3NS4uODE4ODM0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NoZWNrc3VtLmgKQEAgLTE1LDcgKzE1LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0CkBAIC0yNSw4ICsyNSw4IEBACiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCiAKLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weShjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQlpbnQgbGVuLCBpbnQgc3VtKTsKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCWludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAKIC8qCkBAIC0zNiwzMyArMzYsMzEgQEAKICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCXVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSwgaW50ICpjc3VtX2Vycik7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLAorCXZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICpjc3VtX2Vycik7CiAKLSNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhzcmMsIGRzdCwgbGVuLCBzdW0pCVwKLQljc3VtX3BhcnRpYWxfY29weSgoc3JjKSwgKGRzdCksIChsZW4pLCAoc3VtKSkKLQotdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCk7CitfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOwogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQoX193c3VtIHN1bSkKIHsKKwl1bnNpZ25lZCBpbnQgdG1wID0gKF9fZm9yY2UgdTMyKXN1bTsKICNpZmRlZiBDT05GSUdfQ09MREZJUkUKLQlzdW0gPSAoc3VtICYgMHhmZmZmKSArIChzdW0gPj4gMTYpOwotCXN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7CisJdG1wID0gKHRtcCAmIDB4ZmZmZikgKyAodG1wID4+IDE2KTsKKwl0bXAgPSAodG1wICYgMHhmZmZmKSArICh0bXAgPj4gMTYpOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KX50bXA7CiAjZWxzZQotCXVuc2lnbmVkIGludCB0bXAgPSBzdW07CiAJX19hc21fXygic3dhcCAlMVxuXHQiCiAJCSJhZGR3ICUxLCAlMFxuXHQiCiAJCSJjbHJ3ICUxXG5cdCIKIAkJImFkZHh3ICUxLCAlMCIKIAkJOiAiPSZkIiAoc3VtKSwgIj0mZCIgKHRtcCkKIAkJOiAiMCIgKHN1bSksICIxIiAoc3VtKSk7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpfnN1bTsKICNlbmRpZgotCXJldHVybiB+c3VtOwogfQogCiAKQEAgLTcxLDkgKzY5LDkgQEAKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXyAoImFkZGwgICUxLCUwXG5cdCIKIAkJICJhZGR4bCAlNCwlMFxuXHQiCkBAIC04Niw5ICs4NCw5IEBACiAJcmV0dXJuIHN1bTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKLWNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKLQkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgorY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwKKwkJICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7CiB9CkBAIC05OCwxMiArOTYsMTIgQEAKICAqIGluIGljbXAuYwogICovCiAKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pOworZXh0ZXJuIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pOwogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQKLWNzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKSAKK3N0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYKK2NzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQlfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdG1wOwogCV9fYXNtX18oImFkZGwgJTJALCUwXG5cdCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS1tYXBwaW5nLmgKaW5kZXggNTYyMmI4NS4uNmFlYWIxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS1tYXBwaW5nLmgKQEAgLTEsOSArMSwxMCBAQAogI2lmbmRlZiBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX002OEtOT01NVV9ETUFfTUFQUElOR19ICiAKLQogI2lmZGVmIENPTkZJR19QQ0kKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KICNlbmRpZgogCiAjZW5kaWYgIC8qIF9NNjhLTk9NTVVfRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjB4c2ltLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyMHhzaW0uaAppbmRleCAxZGFjMjJlLi40OWQwMTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyMHhzaW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyMHhzaW0uaApAQCAtMzEsNiArMzEsMTYgQEAKICNkZWZpbmUgTUNGSU5UX1FTUEkgICAgICAgICAzMSAgICAgICAgICAvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciBRU1BJICovCiAjZGVmaW5lIE1DRklOVF9QSVQxICAgICAgICAgNCAgICAgICAgICAgLyogSW50ZXJydXB0IG51bWJlciBmb3IgUElUMSAoUElUMCBpbiBwcm9jZXNzb3IpICovCiAKKy8qCisgKiAgU0RSQU0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgTUNGU0lNX1NETVIgICAgICAgICAweDAwMGE4MDAwCS8qIFNEUkFNIE1vZGUvRXh0ZW5kZWQgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZSBNQ0ZTSU1fU0RDUiAgICAgICAgIDB4MDAwYTgwMDQJLyogU0RSQU0gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNQ0ZTSU1fU0RDRkcxICAgICAgIDB4MDAwYTgwMDgJLyogU0RSQU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisjZGVmaW5lIE1DRlNJTV9TRENGRzIgICAgICAgMHgwMDBhODAwYwkvKiBTRFJBTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgTUNGU0lNX1NEQ1MwICAgICAgICAweDAwMGE4MTEwCS8qIFNEUkFNIENoaXAgU2VsZWN0IDAgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBNQ0ZTSU1fU0RDUzEgICAgICAgIDB4MDAwYTgxMTQJLyogU0RSQU0gQ2hpcCBTZWxlY3QgMSBDb25maWd1cmF0aW9uICovCisKIAogI2RlZmluZSBNQ0ZfR1BJT19QQVJfVUFSVCAgICAgICAgICAgICAgICAgICAoMHhBNDAzNikKICNkZWZpbmUgTUNGX0dQSU9fUEFSX0ZFQ0kyQyAgICAgICAgICAgICAgICAgKDB4QTQwMzMpCkBAIC00Nyw3ICs1Nyw3IEBACiAKICNkZWZpbmUgSUNSX0lOVFJDT05GCQkweDA1CiAjZGVmaW5lIE1DRlBJVF9JTVIJCU1DRklOVENfSU1STAotI2RlZmluZSBNQ0ZQSVRfSU1SX0lCSVQJKDEgPDwgTUNGSU5UX1BJVDEpCisjZGVmaW5lIE1DRlBJVF9JTVJfSUJJVAkJKDEgPDwgTUNGSU5UX1BJVDEpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2VuZGlmICAvKiBtNTIweHNpbV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zY2F0dGVybGlzdC5oCmluZGV4IDEyMzA5YjEuLjIwODVkNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zY2F0dGVybGlzdC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9zY2F0dGVybGlzdC5oCkBAIC0xMCw3ICsxMCw3IEBACiAJdW5zaWduZWQgaW50CWxlbmd0aDsKIH07CiAKLSNkZWZpbmUgc2dfYWRkcmVzcyhzZykgKHBhZ2VfYWRkcmVzcygoc2cpLT5wYWdlKSArIChzZyktPm9mZnNldAorI2RlZmluZSBzZ19hZGRyZXNzKHNnKQkJKHBhZ2VfYWRkcmVzcygoc2cpLT5wYWdlKSArIChzZyktPm9mZnNldCkKICNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICAgICAgKChzZyktPmRtYV9hZGRyZXNzKQogI2RlZmluZSBzZ19kbWFfbGVuKHNnKSAgICAgICAgICAoKHNnKS0+bGVuZ3RoKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmgKaW5kZXggYTVlNjA1MC4uOWI3NjhjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaApAQCAtMjcsMjMgKzI3LDIyIEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWwoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICogdGhpcyBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBhYm92ZSB0aGF0IHJlY29yZHMgZXJyb3JzIGl0IGZpbmRzIGluICplcnJwLAogICogYnV0IGNvbnRpbnVlcyBhbmQgemVyb3MgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLAotCQkJCQkgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLAotCQkJCQkgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnJwKTsKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKKwkJCQkJIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCQkJIF9fd3N1bSBzdW0sIGludCAqZXJycCk7CiAKIC8qCiAgKiBDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV90b191c2VyIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCi0JCQkJCQkgIHVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsCi0JCQkJCQkgIGludCBsZW4sIGludCBzdW0sCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX2FuZF9jb3B5X3RvX3VzZXIgKGNvbnN0IHZvaWQgKnNyYywgdm9pZCBfX3VzZXIgKmRzdCwKKwkJCQkJCSAgaW50IGxlbiwgX193c3VtIHN1bSwKIAkJCQkJCSAgaW50ICplcnJfcHRyKQogewogCW1pZ2h0X3NsZWVwKCk7CkBAIC01MSw3ICs1MCw3IEBACiAKIAlpZiAoY29weV90b191c2VyKGRzdCwgc3JjLCBsZW4pKSB7CiAJCSplcnJfcHRyID0gLUVGQVVMVDsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gKF9fZm9yY2UgX193c3VtKS0xOwogCX0KIAogCXJldHVybiBzdW07CkBAIC02MSwxMyArNjAsMTMgQEAKICAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHVzZXIgc3BhY2UgKGJ1dCBvbiBNSVBTCiAgKiB3ZSBoYXZlIGp1c3Qgb25lIGFkZHJlc3Mgc3BhY2UsIHNvIHRoaXMgaXMgaWRlbnRpY2FsIHRvIHRoZSBhYm92ZSkKICAqLwotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkJICAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsCisJCQkJICAgICAgIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0gd2l0aG91dCBhZGRpbmcgcHNldWRvIGhlYWRlcnMKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkiCS5zZXQJcHVzaAkJIyBjc3VtX2ZvbGRcbiIKQEAgLTgyLDcgKzgxLDcgQEAKIAk6ICI9ciIgKHN1bSkKIAk6ICIwIiAoc3VtKSk7CiAKLQlyZXR1cm4gc3VtOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KXN1bTsKIH0KIAogLyoKQEAgLTkyLDEwICs5MSwxMCBAQAogICoJQnkgSm9yZ2UgQ3dpayA8am9yZ2VAbGFzZXIuc2F0bGluay5uZXQ+LCBhZGFwdGVkIGZvciBsaW51eCBieQogICoJQXJudCBHdWxicmFuZHNlbi4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7Ci0JdW5zaWduZWQgaW50ICp3b3JkID0gKHVuc2lnbmVkIGludCAqKSBpcGg7Ci0JdW5zaWduZWQgaW50ICpzdG9wID0gd29yZCArIGlobDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKndvcmQgPSBpcGg7CisJY29uc3QgdW5zaWduZWQgaW50ICpzdG9wID0gd29yZCArIGlobDsKIAl1bnNpZ25lZCBpbnQgY3N1bTsKIAlpbnQgY2Fycnk7CiAKQEAgLTEyMyw5ICsxMjIsOSBAQAogCXJldHVybiBjc3VtX2ZvbGQoY3N1bSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLAotCXVuc2lnbmVkIGxvbmcgZGFkZHIsIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsCisJX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCV9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkiCS5zZXQJcHVzaAkJIyBjc3VtX3RjcHVkcF9ub2ZvbGRcbiIKQEAgLTE1NSw5ICsxNTQsOSBAQAogCTogIj1yIiAoc3VtKQogCTogIjAiIChkYWRkciksICJyIihzYWRkciksCiAjaWZkZWYgX19NSVBTRUxfXwotCSAgInIiICgoKHVuc2lnbmVkIGxvbmcpaHRvbnMobGVuKTw8MTYpICsgcHJvdG8qMjU2KSwKKwkgICJyIiAoKHByb3RvICsgbGVuKSA8PCA4KSwKICNlbHNlCi0JICAiciIgKCgodW5zaWduZWQgbG9uZykocHJvdG8pPDwxNikgKyBsZW4pLAorCSAgInIiIChwcm90byArIGxlbiksCiAjZW5kaWYKIAkgICJyIiAoc3VtKSk7CiAKQEAgLTE2OCwxMSArMTY3LDEwIEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCisJCQkJCQkgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7CiB9CkBAIC0xODEsMTcgKzE3OSwxNiBAQAogICogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seQogICogaW4gaWNtcC5jCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOwogfQogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJCQkgICAgIF9fdTMyIGxlbiwKLQkJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCSAgICAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCSAgX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fKAogCSIJLnNldAlwdXNoCQkjIGNzdW1faXB2Nl9tYWdpY1xuIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2hlY2tzdW0uaAppbmRleCAyMjljYjU2Li5jYzNlYzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2hlY2tzdW0uaApAQCAtMTUsNyArMTUsNyBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKiwgaW50LCBfX3dzdW0pOwogCiAvKgogICogVGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHdoaWxlIGl0IGNoZWNrc3Vtcy4KQEAgLTIzLDE1ICsyMywxNCBAQAogICogSGVyZSBldmVuIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIHNyYyBhbmQgZHN0IG9uIGEgMzItYml0IChvciBldmVuCiAgKiBiZXR0ZXIgNjQtYml0KSBib3VuZGFyeQogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosCi0JCQkJCSAgICAgIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICosIHZvaWQgKiwgaW50LCBfX3dzdW0pOwogCiAvKgogICogdGhpcyBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBhYm92ZSB0aGF0IHJlY29yZHMgZXJyb3JzIGl0IGZpbmRzIGluICplcnJwLAogICogYnV0IGNvbnRpbnVlcyBhbmQgemVyb3MgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlci4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywKLQkJdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLCBpbnQgKmVycnApOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKKwkJdm9pZCAqZHN0LCBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycnApOwogCiAvKgogICoJT3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLCB3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgpAQCAtMzksMTEgKzM4LDEwIEBACiAgKglXcml0dGVuIGJ5IFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPiwgYW5kIHRoZW4gbXVja2VkIHdpdGggYnkKICAqCUxhTW9udCBKb25lcyA8bGFtb250QGRlYmlhbi5vcmc+CiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsCi0JCQkJCSAgdW5zaWduZWQgaW50IGlobCkgeworc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCit7CiAJdW5zaWduZWQgaW50IHN1bTsKIAotCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogIglsZHdzLG1hCQk0KCUxKSwgJTBcbiIKICIJYWRkaWIsPD0JLTQsICUyLCAyZlxuIgpAQCAtNjksMjcgKzY3LDI3IEBACiAJOiAiMSIgKGlwaCksICIyIiAoaWhsKQogCTogInIxOSIsICJyMjAiLCAicjIxIiApOwogCi0JcmV0dXJuKHN1bSk7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBjc3VtKQogeworCXUzMiBzdW0gPSAoX19mb3JjZSB1MzIpY3N1bTsKIAkvKiBhZGQgdGhlIHN3YXBwZWQgdHdvIDE2LWJpdCBoYWx2ZXMgb2Ygc3VtLAogCSAgIGEgcG9zc2libGUgY2FycnkgZnJvbSBhZGRpbmcgdGhlIHR3byAxNi1iaXQgaGFsdmVzLAogCSAgIHdpbGwgY2FycnkgZnJvbSB0aGUgbG93ZXIgaGFsZiBpbnRvIHRoZSB1cHBlciBoYWxmLAogCSAgIGdpdmluZyB1cyB0aGUgY29ycmVjdCBzdW0gaW4gdGhlIHVwcGVyIGhhbGYuICovCiAJc3VtICs9IChzdW0gPDwgMTYpICsgKHN1bSA+PiAxNik7Ci0JcmV0dXJuICh+c3VtKSA+PiAxNjsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofnN1bSA+PiAxNik7CiB9CiAgCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhZGRyLAorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3VtKSAKKwkJCQkJICAgICAgIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkiCWFkZCAgJTEsICUwLCAlMFxuIgpAQCAtOTcsMTkgKzk1LDE4IEBACiAJIglhZGRjICUzLCAlMCwgJTBcbiIKIAkiCWFkZGMgJSVyMCwgJTAsICUwXG4iCiAJCTogIj1yIiAoc3VtKQotCQk6ICJyIiAoZGFkZHIpLCAiciIoc2FkZHIpLCAiciIoKHByb3RvPDwxNikrbGVuKSwgIjAiKHN1bSkpOwotICAgIHJldHVybiBzdW07CisJCTogInIiIChkYWRkciksICJyIihzYWRkciksICJyIihwcm90bytsZW4pLCAiMCIoc3VtKSk7CisJcmV0dXJuIHN1bTsKIH0KIAogLyoKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkgCisJCQkJCQkgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTExOCwxNyArMTE1LDE3IEBACiAgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CiAgKiBpbiBpY21wLmMKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZiwgaW50IGxlbikgeworc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWYsIGludCBsZW4pCit7CiAJIHJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWYsIGxlbiwgMCkpOwogfQogCiAKICNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkJCSAgICAgX191MTYgbGVuLAotCQkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHN1bSkgCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICBfX3dzdW0gc3VtKQogewogCV9fYXNtX18gX192b2xhdGlsZV9fICgKIApAQCAtMTkzLDkgKzE5MCw5IEBACiAgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGNzdW1fYW5kX2NvcHlfdG9fdXNlciAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkJCQkJICAgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwKLQkJCQkJCSAgICAgIGludCBsZW4sIGludCBzdW0sIAorc3RhdGljIF9faW5saW5lX18gX193c3VtIGNzdW1fYW5kX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsCisJCQkJCQkgICAgICB2b2lkIF9fdXNlciAqZHN0LAorCQkJCQkJICAgICAgaW50IGxlbiwgX193c3VtIHN1bSwKIAkJCQkJCSAgICAgIGludCAqZXJyX3B0cikKIHsKIAkvKiBjb2RlIHN0b2xlbiBmcm9tIGluY2x1ZGUvYXNtLW1pcHM2NCAqLwpAQCAtMjAzLDcgKzIwMCw3IEBACiAJIAogCWlmIChjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIGxlbikpIHsKIAkJKmVycl9wdHIgPSAtRUZBVUxUOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAoX19mb3JjZSBfX3dzdW0pLTE7CiAJfQogCiAJcmV0dXJuIHN1bTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2hlY2tzdW0uaAppbmRleCA2MDllY2JiLi43Y2RmMzU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jaGVja3N1bS5oCkBAIC0xNCwxNyArMTQsMTYgQEAKICAqIHdoaWNoIGFsd2F5cyBjaGVja3N1bSBvbiA0IG9jdGV0IGJvdW5kYXJpZXMuICBpaGwgaXMgdGhlIG51bWJlcgogICogb2YgMzItYml0IHdvcmRzIGFuZCBpcyBhbHdheXMgPj0gNS4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKK2V4dGVybiBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOwogCiAvKgogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQl1bnNpZ25lZCBsb25nIGRhZGRyLAorZXh0ZXJuIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCXVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCXVuc2lnbmVkIGludCBzdW0pOworCQkJCQlfX3dzdW0gc3VtKTsKIAogLyoKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBidWZmLCBsZW5ndGggbGVuLApAQCAtMzgsOCArMzcsNyBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwKLQkJCQkgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqIENvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiBhIG1lbW9yeSBibG9jayBhdCBzcmMsIGxlbmd0aCBsZW4sCkBAIC01MSwyMCArNDksMTUgQEAKICAqIExpa2UgY3N1bV9wYXJ0aWFsLCB0aGlzIG11c3QgYmUgY2FsbGVkIHdpdGggZXZlbiBsZW5ndGhzLAogICogZXhjZXB0IGZvciB0aGUgbGFzdCBmcmFnbWVudC4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAotCQkJCQkgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLAorZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQkgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLAogCQkJCQkgICAgICBpbnQgKnNyY19lcnIsIGludCAqZHN0X2Vycik7CiAvKgogICogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gc3JjIHRvIGRzdCB3aGlsZSBpdAogICogY2hlY2tzdW1zLgogICovCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCBjaGFyICpzcmMsIAotCQkJCSAgICAgICBjaGFyICpkc3QsIAotCQkJCSAgICAgICBpbnQgbGVuLCAKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IHN1bSk7Ci0KICNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJycCkgICBcCi0gICAgICAgIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKHNyYyksIChkc3QpLCAobGVuKSwgKHN1bSksIChlcnJwKSwgTlVMTCkKKyAgICAgICAgY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoX19mb3JjZSBjb25zdCB2b2lkICopKHNyYyksIChkc3QpLCAobGVuKSwgKHN1bSksIChlcnJwKSwgTlVMTCkKIAogI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKHNyYywgZHN0LCBsZW4sIHN1bSkgICBcCiAgICAgICAgIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoKHNyYyksIChkc3QpLCAobGVuKSwgKHN1bSksIE5VTEwsIE5VTEwpCkBAIC03NCw3ICs2Nyw3IEBACiAgKiB0dXJucyBhIDMyLWJpdCBwYXJ0aWFsIGNoZWNrc3VtIChlLmcuIGZyb20gY3N1bV9wYXJ0aWFsKSBpbnRvIGEKICAqIDEncyBjb21wbGVtZW50IDE2LWJpdCBjaGVja3N1bS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIApAQCAtODMsNDEgKzc2LDMyIEBACiAJLyogaWYgdGhlcmUgaXMgYSBjYXJyeSBmcm9tIGFkZGluZyB0aGUgdHdvIDE2LWJpdCBoYWx2ZXMsCiAJICAgaXQgd2lsbCBjYXJyeSBmcm9tIHRoZSBsb3dlciBoYWxmIGludG8gdGhlIHVwcGVyIGhhbGYsCiAJICAgZ2l2aW5nIHVzIHRoZSBjb3JyZWN0IHN1bSBpbiB0aGUgdXBwZXIgaGFsZi4gKi8KLQlzdW0gPSB+KHN1bSArIHRtcCkgPj4gMTY7Ci0JcmV0dXJuIHN1bTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNikofigoX19mb3JjZSB1MzIpc3VtICsgdG1wKSA+PiAxNik7CiB9CiAKIC8qCiAgKiB0aGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBJUC1saWtlIGNoZWNrc3VtcywgbWFpbmx5CiAgKiBpbiBpY21wLmMKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfY29tcHV0ZV9jc3VtKGNvbnN0IHZvaWQgKmJ1ZmYsIGludCBsZW4pCiB7CiAJcmV0dXJuIGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7CiB9CiAKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCi1zdGF0aWMgaW5saW5lIHUzMiBjc3VtX3RjcHVkcF9ub2ZvbGQodTMyIHNhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN1bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzdW0gc3VtKQogewotCXVuc2lnbmVkIGxvbmcgcyA9IHN1bTsKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJdW5zaWduZWQgbG9uZyBzID0gKF9fZm9yY2UgdTMyKXN1bTsKIAotCXMgKz0gc2FkZHI7Ci0JcyArPSBkYWRkcjsKLQlzICs9IChwcm90byA8PCAxNikgKyBsZW47CisJcyArPSAoX19mb3JjZSB1MzIpc2FkZHI7CisJcyArPSAoX19mb3JjZSB1MzIpZGFkZHI7CisJcyArPSBwcm90byArIGxlbjsKIAlzICs9IChzID4+IDMyKTsKLQlyZXR1cm4gKHUzMikgczsKLX0KKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKSBzOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCi0JCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCi17CiAgICAgX19hc21fXygiXG5cCiAJYWRkYyAlMCwlMCwlMSBcblwKIAlhZGRlICUwLCUwLCUyIFxuXApAQCAtMTI1LDEwICsxMDksOSBAQAogCWFkZHplICUwLCUwIFxuXAogCSIKIAk6ICI9ciIgKHN1bSkKLQk6ICJyIiAoZGFkZHIpLCAiciIoc2FkZHIpLCAiciIoKHByb3RvPDwxNikrbGVuKSwgIjAiKHN1bSkpOwotICAgIHJldHVybiBzdW07Ci19Ci0KKwk6ICJyIiAoZGFkZHIpLCAiciIoc2FkZHIpLCAiciIocHJvdG8gKyBsZW4pLCAiMCIoc3VtKSk7CisJcmV0dXJuIHN1bTsKICNlbmRpZgorfQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tczM5MC9jaGVja3N1bS5oCmluZGV4IDM3YzM2MmQuLjBhM2NkN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2NoZWNrc3VtLmgKQEAgLTI3LDggKzI3LDggQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBpbmxpbmUgX193c3VtCitjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzIgYXNtKCIyIikgPSAodW5zaWduZWQgbG9uZykgYnVmZjsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzMgYXNtKCIzIikgPSAodW5zaWduZWQgbG9uZykgbGVuOwpAQCAtNDksOSArNDksOSBAQAogICogQ29weSBmcm9tIHVzZXJzcGFjZSBhbmQgY29tcHV0ZSBjaGVja3N1bS4gIElmIHdlIGNhdGNoIGFuIGV4Y2VwdGlvbgogICogdGhlbiB6ZXJvIHRoZSByZXN0IG9mIHRoZSBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnNyYywgY2hhciAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSwKK3N0YXRpYyBpbmxpbmUgX193c3VtCitjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwgX193c3VtIHN1bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyX3B0cikKIHsKIAlpbnQgbWlzc2luZzsKQEAgLTY2LDggKzY2LDggQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayAoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pCiB7CiAgICAgICAgIG1lbWNweShkc3Qsc3JjLGxlbik7CiAJcmV0dXJuIGNzdW1fcGFydGlhbChkc3QsIGxlbiwgc3VtKTsKQEAgLTc2LDggKzc2LDcgQEAKIC8qCiAgKiAgICAgIEZvbGQgYSBwYXJ0aWFsIGNoZWNrc3VtIHdpdGhvdXQgYWRkaW5nIHBzZXVkbyBoZWFkZXJzCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKLWNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewogI2lmbmRlZiBfX3MzOTB4X18KIAlyZWdpc3Rlcl9wYWlyIHJwOwpAQCAtMTAwLDcgKzk5LDcgQEAKIAkJIglzcmwJJTAsMTZcbiIJLyogJTAgPSBIK0wrQyAqLwogCQk6ICIrJmQiIChzdW0pIDogOiAiY2MiLCAiMiIsICIzIik7CiAjZW5kaWYgLyogX19zMzkweF9fICovCi0JcmV0dXJuICgodW5zaWduZWQgc2hvcnQpIH5zdW0pOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSB+c3VtOwogfQogCiAvKgpAQCAtMTA4LDggKzEwNyw3IEBACiAgKgl3aGljaCBhbHdheXMgY2hlY2tzdW0gb24gNCBvY3RldCBib3VuZGFyaWVzLgogICoKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAotaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9mYXN0X2NzdW0oY29uc3Qgdm9pZCAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGlwaCwgaWhsKjQsIDApKTsKIH0KQEAgLTExOCwxMCArMTE2LDEwIEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDMyLWJpdCBjaGVja3N1bQogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAKLWNzdW1fdGNwdWRwX25vZm9sZCh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLAorc3RhdGljIGlubGluZSBfX3dzdW0KK2NzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdW0pCisgICAgICAgICAgICAgICAgICAgX193c3VtIHN1bSkKIHsKICNpZm5kZWYgX19zMzkweF9fCiAJYXNtIHZvbGF0aWxlKApAQCAtMTM3LDEyICsxMzUsMTIgQEAKIAkJIjE6IgogCQk6ICIrJmQiIChzdW0pIDogImQiIChkYWRkcikgOiAiY2MiKTsKIAlhc20gdm9sYXRpbGUoCi0JCSIJYWxyCSUwLCUxXG4iIC8qIHN1bSArPSAobGVuPDwxNikgKyAocHJvdG88PDgpICovCisJCSIJYWxyCSUwLCUxXG4iIC8qIHN1bSArPSBsZW4gKyBwcm90byAqLwogCQkiCWJyYwkxMiwyZlxuIgogCQkiCWFoaQklMCwxXG4iICAvKiBhZGQgY2FycnkgKi8KIAkJIjI6IgogCQk6ICIrJmQiIChzdW0pCi0JCTogImQiICgoKHVuc2lnbmVkIGludCkgbGVuPDwxNikgKyAodW5zaWduZWQgaW50KSBwcm90bykKKwkJOiAiZCIgKGxlbiArIHByb3RvKQogCQk6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCiAJYXNtIHZvbGF0aWxlKApAQCAtMTUzLDcgKzE1MSw3IEBACiAJCSIwOglhbGdyCSUwLCUyXG4iICAvKiBzdW0gKz0gZGFkZHIgKi8KIAkJIglicmMJMTIsMWZcbiIKIAkJIglhZ2hpCSUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KLQkJIjE6CWFsZ2ZyCSUwLCUzXG4iICAvKiBzdW0gKz0gKGxlbjw8MTYpICsgcHJvdG8gKi8KKwkJIjE6CWFsZ2ZyCSUwLCUzXG4iICAvKiBzdW0gKz0gbGVuICsgcHJvdG8gKi8KIAkJIglicmMJMTIsMmZcbiIKIAkJIglhZ2hpCSUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KIAkJIjI6CXNybGcJMCwlMCwzMlxuIgpAQCAtMTYzLDcgKzE2MSw3IEBACiAJCSIzOglsbGdmcgklMCwlMCIKIAkJOiAiKyZkIiAoc3VtKQogCQk6ICJkIiAoc2FkZHIpLCAiZCIgKGRhZGRyKSwKLQkJICAiZCIgKCgodW5zaWduZWQgaW50KSBsZW48PDE2KSArICh1bnNpZ25lZCBpbnQpIHByb3RvKQorCQkgICJkIiAobGVuICsgcHJvdG8pCiAJCTogImNjIiwgIjAiKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAlyZXR1cm4gc3VtOwpAQCAtMTc0LDEwICsxNzIsMTAgQEAKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQKLWNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fc3VtMTYKK2NzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdW0pCisgICAgICAgICAgICAgICAgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTE4Nyw4ICsxODUsNyBAQAogICogaW4gaWNtcC5jCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydAotaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9jaW8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvY2lvLmgKaW5kZXggODEyODdkOC4uZDkyNzg1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9jaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2Npby5oCkBAIC0yNzgsMTcgKzI3OCwxNiBAQAogc3RhdGljIGlubGluZSBpbnQgY2N3X2Rldl9pZF9pc19lcXVhbChzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2X2lkMSwKIAkJCQkgICAgICBzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2X2lkMikKIHsKLQlyZXR1cm4gIW1lbWNtcChkZXZfaWQxLCBkZXZfaWQyLCBzaXplb2Yoc3RydWN0IGNjd19kZXZfaWQpKTsKKwlpZiAoKGRldl9pZDEtPnNzaWQgPT0gZGV2X2lkMi0+c3NpZCkgJiYKKwkgICAgKGRldl9pZDEtPmRldm5vID09IGRldl9pZDItPmRldm5vKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIGV4dGVybiBpbnQgZGlhZzIxMChzdHJ1Y3QgZGlhZzIxMCAqYWRkcik7CiAKIGV4dGVybiB2b2lkIHdhaXRfY29uc19kZXYodm9pZCk7CiAKLWV4dGVybiB2b2lkIGNsZWFyX2FsbF9zdWJjaGFubmVscyh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgY2lvX3Jlc2V0X2NoYW5uZWxfcGF0aHModm9pZCk7Ci0KIGV4dGVybiB2b2lkIGNzc19zY2hlZHVsZV9yZXByb2JlKHZvaWQpOwogCiBleHRlcm4gdm9pZCByZWlwbF9jY3dfZGV2KHN0cnVjdCBjY3dfZGV2X2lkICppZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NwY21kLmggYi9pbmNsdWRlL2FzbS1zMzkwL2NwY21kLmgKaW5kZXggMWZjZjY1Yi4uNDhhOWVhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9jcGNtZC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY3BjbWQuaApAQCAtNyw4ICs3LDggQEAKICAqICAgICAgICAgICAgICAgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyIChjYm9ybnRyYUBkZS5pYm0uY29tKSwKICAqLwogCi0jaWZuZGVmIF9fQ1BDTURfXwotI2RlZmluZSBfX0NQQ01EX18KKyNpZm5kZWYgX0FTTV9TMzkwX0NQQ01EX0gKKyNkZWZpbmUgX0FTTV9TMzkwX0NQQ01EX0gKIAogLyoKICAqIHRoZSBsb3dsZXZlbCBmdW5jdGlvbiBmb3IgY3BjbWQKQEAgLTE2LDkgKzE2LDYgQEAKICAqLwogZXh0ZXJuIGludCBfX2NwY21kKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqcmVzcG9uc2UsIGludCBybGVuLCBpbnQgKnJlc3BvbnNlX2NvZGUpOwogCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBjcGNtZCBfX2NwY21kCi0jZWxzZQogLyoKICAqIGNwY21kIGlzIHRoZSBpbi1rZXJuZWwgaW50ZXJmYWNlIGZvciBpc3N1aW5nIENQIGNvbW1hbmRzCiAgKgpAQCAtMzMsNiArMzAsNSBAQAogICogTk9URTogSWYgdGhlIHJlc3BvbnNlIGJ1ZmZlciBpcyBub3QgYmVsb3cgMiBHQiwgY3BjbWQgY2FuIHNsZWVwCiAgKi8KIGV4dGVybiBpbnQgY3BjbWQoY29uc3QgY2hhciAqY21kLCBjaGFyICpyZXNwb25zZSwgaW50IHJsZW4sIGludCAqcmVzcG9uc2VfY29kZSk7Ci0jZW5kaWYgLypfX3MzOTB4X18qLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1MzOTBfQ1BDTURfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9rZXhlYy5oIGIvaW5jbHVkZS9hc20tczM5MC9rZXhlYy5oCmluZGV4IGNlMjhkZGQuLjljMzVjOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAva2V4ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2tleGVjLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAogLyogTWF4aW11bSBhZGRyZXNzIHdlIGNhbiB1c2UgZm9yIHRoZSBjb250cm9sIHBhZ2VzICovCiAvKiBOb3QgbW9yZSB0aGFuIDJHQiAqLwotI2RlZmluZSBLRVhFQ19DT05UUk9MX01FTU9SWV9MSU1JVCAoMTw8MzEpCisjZGVmaW5lIEtFWEVDX0NPTlRST0xfTUVNT1JZX0xJTUlUICgxVUw8PDMxKQogCiAvKiBBbGxvY2F0ZSBvbmUgcGFnZSBmb3IgdGhlIHBkcCBhbmQgdGhlIHNlY29uZCBmb3IgdGhlIGNvZGUgKi8KICNkZWZpbmUgS0VYRUNfQ09OVFJPTF9DT0RFX1NJWkUgNDA5NgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmggYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAppbmRleCAwNjU4M2VkLi43NGY3Mzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaApAQCAtMzYyLDYgKzM2MiwxNCBAQAogCWFzbSB2b2xhdGlsZSgic3B4ICUwIiA6IDogIm0iIChhZGRyZXNzKSA6ICJtZW1vcnkiKTsKIH0KIAorc3RhdGljIGlubGluZSBfX3UzMiBzdG9yZV9wcmVmaXgodm9pZCkKK3sKKwlfX3UzMiBhZGRyZXNzOworCisJYXNtIHZvbGF0aWxlKCJzdHB4ICUwIiA6ICI9bSIgKGFkZHJlc3MpKTsKKwlyZXR1cm4gYWRkcmVzczsKK30KKwogI2RlZmluZSBfX1BBTklDX01BR0lDICAgICAgICAgICAweERFQURDMERFCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAppbmRleCAzNmJiNmRhLi4yZDk2OGE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaApAQCAtMTEwLDEyICsxMTAsMjEgQEAKICNkZWZpbmUgVk1BTExPQ19PRkZTRVQgICg4KjEwMjQqMTAyNCkKICNkZWZpbmUgVk1BTExPQ19TVEFSVCAgICgoKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5ICsgVk1BTExPQ19PRkZTRVQpIFwKIAkJCSAmIH4oVk1BTExPQ19PRkZTRVQtMSkpCi0jaWZuZGVmIF9fczM5MHhfXwotIyBkZWZpbmUgVk1BTExPQ19FTkQgICAgICgweDdmZmZmZmZmTCkKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotIyBkZWZpbmUgVk1BTExPQ19FTkQgICAgICgweDQwMDAwMDAwMDAwTCkKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAorLyoKKyAqIFdlIG5lZWQgc29tZSBmcmVlIHZpcnR1YWwgc3BhY2UgdG8gYmUgYWJsZSB0byBkbyB2bWFsbG9jLgorICogVk1BTExPQ19NSU5fU0laRSBkZWZpbmVzIHRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIHZtYWxsb2MKKyAqIGFyZWEuIE9uIGEgbWFjaGluZSB3aXRoIDJHQiBtZW1vcnkgd2UgbWFrZSBzdXJlIHRoYXQgd2UKKyAqIGhhdmUgYXQgbGVhc3QgMTI4TUIgZnJlZSBzcGFjZSBmb3Igdm1hbGxvYy4gT24gYSBtYWNoaW5lCisgKiB3aXRoIDRUQiB3ZSBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAxR0IuCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIFZNQUxMT0NfTUlOX1NJWkUJMHg4MDAwMDAwVUwKKyNkZWZpbmUgVk1BTExPQ19FTkQJCTB4ODAwMDAwMDBVTAorI2Vsc2UgLyogX19zMzkweF9fICovCisjZGVmaW5lIFZNQUxMT0NfTUlOX1NJWkUJMHg0MDAwMDAwMFVMCisjZGVmaW5lIFZNQUxMT0NfRU5ECQkweDQwMDAwMDAwMDAwVUwKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAogLyoKICAqIEEgMzEgYml0IHBhZ2V0YWJsZSBlbnRyeSBvZiBTMzkwIGhhcyBmb2xsb3dpbmcgZm9ybWF0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9yZXNldC5oIGIvaW5jbHVkZS9hc20tczM5MC9yZXNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDM5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Jlc2V0LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqICBpbmNsdWRlL2FzbS1zMzkwL3Jlc2V0LmgKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDYKKyAqICAgIEF1dGhvcihzKTogSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CisgKi8KKworI2lmbmRlZiBfQVNNX1MzOTBfUkVTRVRfSAorI2RlZmluZSBfQVNNX1MzOTBfUkVTRVRfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCitzdHJ1Y3QgcmVzZXRfY2FsbCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXZvaWQgKCpmbikodm9pZCk7Cit9OworCitleHRlcm4gdm9pZCByZWdpc3Rlcl9yZXNldF9jYWxsKHN0cnVjdCByZXNldF9jYWxsICpyZXNldCk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3Jlc2V0X2NhbGwoc3RydWN0IHJlc2V0X2NhbGwgKnJlc2V0KTsKK2V4dGVybiB2b2lkIHMzOTBfcmVzZXRfc3lzdGVtKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpzMzkwX3Jlc2V0X21jY2tfaGFuZGxlcikodm9pZCk7CisKKyNlbmRpZiAvKiBfQVNNX1MzOTBfUkVTRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oIGIvaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCmluZGV4IDVkNzJlZGEuLjc2NjRiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NldHVwLmgKQEAgLTIsNyArMiw3IEBACiAgKiAgaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCiAgKgogICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAxOTk5IElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAqICAgIENvcHlyaWdodCBJQk0gQ29ycC4gMTk5OSwyMDA2CiAgKi8KIAogI2lmbmRlZiBfQVNNX1MzOTBfU0VUVVBfSApAQCAtMzAsNiArMzAsMTcgQEAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KICNkZWZpbmUgQ09NTUFORF9MSU5FICAgICAgKChjaGFyICopICAgICAgICAgICAgKDB4MTA0ODApKQogCisjZGVmaW5lIENIVU5LX1JFQURfV1JJVEUgMAorI2RlZmluZSBDSFVOS19SRUFEX09OTFkgIDEKKworc3RydWN0IG1lbV9jaHVuayB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHR5cGU7Cit9OworCitleHRlcm4gc3RydWN0IG1lbV9jaHVuayBtZW1vcnlfY2h1bmtbXTsKKwogLyoKICAqIE1hY2hpbmUgZmVhdHVyZXMgZGV0ZWN0ZWQgaW4gaGVhZC5TCiAgKi8KQEAgLTUzLDcgKzY0LDYgQEAKICNkZWZpbmUgTUFDSElORV9IQVNfTVZDT1MJKG1hY2hpbmVfZmxhZ3MgJiA1MTIpCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKLQogI2RlZmluZSBNQUNISU5FX0hBU19TQ0xQCSghTUFDSElORV9JU19QMzkwKQogCiAvKgpAQCAtNzEsNyArODEsNiBAQAogI2RlZmluZSBTRVRfQ09OU09MRV8zMjE1CWRvIHsgY29uc29sZV9tb2RlID0gMjsgfSB3aGlsZSAoMCkKICNkZWZpbmUgU0VUX0NPTlNPTEVfMzI3MAlkbyB7IGNvbnNvbGVfbW9kZSA9IDM7IH0gd2hpbGUgKDApCiAKLQogc3RydWN0IGlwbF9saXN0X2hkciB7CiAJdTMyIGxlbjsKIAl1OCAgcmVzZXJ2ZWQxWzNdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKaW5kZXggYzNjZjAzMC4uNzA5N2M5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCkBAIC0xOCw2ICsxOCw3IEBACiAKICNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgogI2luY2x1ZGUgPGFzbS9zaWdwLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAvKgogICBzMzkwIHNwZWNpZmljIHNtcC5jIGhlYWRlcnMKQEAgLTEwMSw2ICsxMDIsMTMgQEAKIAlmdW5jKGluZm8pOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc21wX3NlbmRfc3RvcCh2b2lkKQoreworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMvbWFjaGluZSBjaGVja3MgKi8KKwlfX2xvYWRfcHN3X21hc2soUFNXX0tFUk5FTF9CSVRTICYgflBTV19NQVNLX01DSEVDSyk7Cit9CisKICNkZWZpbmUgc21wX2NwdV9ub3RfcnVubmluZyhjcHUpCTEKICNkZWZpbmUgc21wX2dldF9jcHUoY3B1KSAoeyAwOyB9KQogI2RlZmluZSBzbXBfcHV0X2NwdShjcHUpICh7IDA7IH0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaAppbmRleCBjY2JhZmU0Li5iZDBiMDVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKQEAgLTExNSw2ICsxMTUsMTYgQEAKICNkZWZpbmUgYWNjb3VudF92dGltZSh4KSBkbyB7IC8qIGVtcHR5ICovIH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QRkFVTFQKK2V4dGVybiB2b2lkIHBmYXVsdF9pcnFfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgcGZhdWx0X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwZmF1bHRfZmluaSh2b2lkKTsKKyNlbHNlIC8qIENPTkZJR19QRkFVTFQgKi8KKyNkZWZpbmUgcGZhdWx0X2lycV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwZmF1bHRfaW5pdCgpCQkoey0xO30pCisjZGVmaW5lIHBmYXVsdF9maW5pKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBDT05GSUdfUEZBVUxUICovCisKICNkZWZpbmUgZmluaXNoX2FyY2hfc3dpdGNoKHByZXYpIGRvIHsJCQkJCSAgICAgXAogCXNldF9mcyhjdXJyZW50LT50aHJlYWQubW1fc2VnbWVudCk7CQkJCSAgICAgXAogCWFjY291bnRfdnRpbWUocHJldik7CQkJCQkJICAgICBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3Rlcm1pb3MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGVybWlvcy5oCmluZGV4IGQxZTI5Y2MuLjYyYjIzY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdGVybWlvcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGVybWlvcy5oCkBAIC03NSwzOSArNzUsNyBAQAogKi8KICNkZWZpbmUgSU5JVF9DX0NDICJcMDAzXDAzNFwxNzdcMDI1XDAwNFwwXDFcMFwwMjFcMDIzXDAzMlwwXDAyMlwwMTdcMDI3XDAyNlwwIgogCi0vKgotICogVHJhbnNsYXRlIGEgInRlcm1pbyIgc3RydWN0dXJlIGludG8gYSAidGVybWlvcyIuIFVnaC4KLSAqLwotI2RlZmluZSBTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIHgpIHsgXAotCXVuc2lnbmVkIHNob3J0IF9fdG1wOyBcCi0JZ2V0X3VzZXIoX190bXAsJih0ZXJtaW8pLT54KTsgXAotCSh0ZXJtaW9zKS0+eCA9ICgweGZmZmYwMDAwICYgKCh0ZXJtaW9zKS0+eCkpIHwgX190bXA7IFwKLX0KLQotI2RlZmluZSB1c2VyX3Rlcm1pb190b19rZXJuZWxfdGVybWlvcyh0ZXJtaW9zLCB0ZXJtaW8pIFwKLSh7IFwKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfaWZsYWcpOyBcCi0JU0VUX0xPV19URVJNSU9TX0JJVFModGVybWlvcywgdGVybWlvLCBjX29mbGFnKTsgXAotCVNFVF9MT1dfVEVSTUlPU19CSVRTKHRlcm1pb3MsIHRlcm1pbywgY19jZmxhZyk7IFwKLQlTRVRfTE9XX1RFUk1JT1NfQklUUyh0ZXJtaW9zLCB0ZXJtaW8sIGNfbGZsYWcpOyBcCi0JY29weV9mcm9tX3VzZXIoKHRlcm1pb3MpLT5jX2NjLCAodGVybWlvKS0+Y19jYywgTkNDKTsgXAotfSkKLQotLyoKLSAqIFRyYW5zbGF0ZSBhICJ0ZXJtaW9zIiBzdHJ1Y3R1cmUgaW50byBhICJ0ZXJtaW8iLiBVZ2guCi0gKi8KLSNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW8odGVybWlvLCB0ZXJtaW9zKSBcCi0oeyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2lmbGFnLCAmKHRlcm1pbyktPmNfaWZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX29mbGFnLCAmKHRlcm1pbyktPmNfb2ZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2NmbGFnLCAmKHRlcm1pbyktPmNfY2ZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xmbGFnLCAmKHRlcm1pbyktPmNfbGZsYWcpOyBcCi0JcHV0X3VzZXIoKHRlcm1pb3MpLT5jX2xpbmUsICAmKHRlcm1pbyktPmNfbGluZSk7IFwKLQljb3B5X3RvX3VzZXIoKHRlcm1pbyktPmNfY2MsICh0ZXJtaW9zKS0+Y19jYywgTkNDKTsgXAotfSkKLQotI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgY29weV9mcm9tX3VzZXIoaywgdSwgc2l6ZW9mKHN0cnVjdCB0ZXJtaW9zKSkKLSNkZWZpbmUga2VybmVsX3Rlcm1pb3NfdG9fdXNlcl90ZXJtaW9zKHUsIGspIGNvcHlfdG9fdXNlcih1LCBrLCBzaXplb2Yoc3RydWN0IHRlcm1pb3MpKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Rlcm1pb3MuaD4KIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1zMzkwL3VhY2Nlc3MuaAppbmRleCA3MmFlNGVmLi43M2FjNGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3VhY2Nlc3MuaApAQCAtMjAxLDcgKzIwMSw3IEBACiAgKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBjb3BpZWQuCiAgKiBPbiBzdWNjZXNzLCB0aGlzIHdpbGwgYmUgemVyby4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBfX2NvcHlfdG9fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgKG4gPD0gMjU2KSkKQEAgLTIyNiw3ICsyMjYsNyBAQAogICogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBub3QgYmUgY29waWVkLgogICogT24gc3VjY2VzcywgdGhpcyB3aWxsIGJlIHplcm8uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawogY29weV90b191c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewogCW1pZ2h0X3NsZWVwKCk7CkBAIC0yNTIsNyArMjUyLDcgQEAKICAqIElmIHNvbWUgZGF0YSBjb3VsZCBub3QgYmUgY29waWVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcGFkIHRoZSBjb3BpZWQKICAqIGRhdGEgdG8gdGhlIHJlcXVlc3RlZCBzaXplIHVzaW5nIHplcm8gYnl0ZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawogX19jb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AobikgJiYgKG4gPD0gMjU2KSkKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICogSWYgc29tZSBkYXRhIGNvdWxkIG5vdCBiZSBjb3BpZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBwYWQgdGhlIGNvcGllZAogICogZGF0YSB0byB0aGUgcmVxdWVzdGVkIHNpemUgdXNpbmcgemVybyBieXRlcy4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKIAltaWdodF9zbGVlcCgpOwpAQCAtMjg4LDEzICsyODgsMTMgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBfX2NvcHlfaW5fdXNlcih2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCiB7CiAJcmV0dXJuIHVhY2Nlc3MuY29weV9pbl91c2VyKG4sIHRvLCBmcm9tKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19tdXN0X2NoZWNrCiBjb3B5X2luX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewogCW1pZ2h0X3NsZWVwKCk7CkBAIC0zMDYsNyArMzA2LDcgQEAKIC8qCiAgKiBDb3B5IGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZS4KICAqLwotc3RhdGljIGlubGluZSBsb25nCitzdGF0aWMgaW5saW5lIGxvbmcgX19tdXN0X2NoZWNrCiBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpCiB7CiAgICAgICAgIGxvbmcgcmVzID0gLUVGQVVMVDsKQEAgLTM0MywxMyArMzQzLDEzIEBACiAgKiBaZXJvIFVzZXJzcGFjZQogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjawogX19jbGVhcl91c2VyKHZvaWQgX191c2VyICp0bywgdW5zaWduZWQgbG9uZyBuKQogewogCXJldHVybiB1YWNjZXNzLmNsZWFyX3VzZXIobiwgdG8pOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX211c3RfY2hlY2sKIGNsZWFyX3VzZXIodm9pZCBfX3VzZXIgKnRvLCB1bnNpZ25lZCBsb25nIG4pCiB7CiAJbWlnaHRfc2xlZXAoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvemNyeXB0LmggYi9pbmNsdWRlL2FzbS1zMzkwL3pjcnlwdC5oCmluZGV4IDcyNDRjNjguLmI5MGU1NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvemNyeXB0LmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC96Y3J5cHQuaApAQCAtMTgwLDQwICsxODAsOCBAQAogICoJICAgICBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUKICAqCSAgICAgYmxvY2sKICAqCi0gKiAgIFo5MFNUQVRfVE9UQUxDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBkZXZpY2UgdHlwZXMgdG9nZXRoZXIuCi0gKgotICogICBaOTBTVEFUX1BDSUNBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0FzLgotICoKLSAqICAgWjkwU1RBVF9QQ0lDQ0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDIgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDMgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfQ0VYMkNDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQ3MuCi0gKgotICogICBaOTBTVEFUX0NFWDJBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkFzLgotICoKLSAqICAgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyB3YWl0aW5nIHRvIGJlCi0gKiAgICAgc2VudCB0byBhIGRldmljZS4KLSAqCi0gKiAgIFo5MFNUQVRfUEVORElOR1FfQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VudCB0byBhCi0gKiAgICAgZGV2aWNlIGF3YWl0aW5nIHRoZSByZXBseS4KLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgaGFuZGxlcy4KLSAqCi0gKiAgIFo5MFNUQVRfRE9NQUlOX0lOREVYCi0gKiAgICAgUmV0dXJuIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBDcnlwdG9ncmFwaGljIERvbWFpbi4KKyAqICAgWlNFQ1NFTkRDUFJCCisgKiAgICAgU2VuZCBhbiBhcmJpdHJhcnkgQ1BSQiB0byBhIGNyeXB0byBjYXJkLgogICoKICAqICAgWjkwU1RBVF9TVEFUVVNfTUFTSwogICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIGZvciB0aGUgc3RhdHVzIG9mCkBAIC0yMzUsMjggKzIwMyw1MSBAQAogICogICAgIG9mIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdHMgcGVyIGRldmljZSBzaW5jZSB0aGUgZGV2aWNlCiAgKiAgICAgd2FzIGRldGVjdGVkIGFuZCBtYWRlIGF2YWlsYWJsZS4KICAqCi0gKiAgIElDQVo5MFNUQVRVUyAoZGVwcmVjYXRlZCkKKyAqICAgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyB3YWl0aW5nIHRvIGJlCisgKiAgICAgc2VudCB0byBhIGRldmljZS4KKyAqCisgKiAgIFo5MFNUQVRfUEVORElOR1FfQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VudCB0byBhbGwKKyAqICAgICBkZXZpY2VzIGF3YWl0aW5nIHRoZSByZXBseS4KKyAqCisgKiAgIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgaGFuZGxlcy4KKyAqCisgKiAgIFo5MFNUQVRfRE9NQUlOX0lOREVYCisgKiAgICAgUmV0dXJuIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBDcnlwdG9ncmFwaGljIERvbWFpbi4KKyAqCisgKiAgIFRoZSBmb2xsb3dpbmcgaW9jdGxzIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgbm8gbG9uZ2VyIHVzZWQ6CisgKgorICogICBaOTBTVEFUX1RPVEFMQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgZGV2aWNlIHR5cGVzIHRvZ2V0aGVyLgorICoKKyAqICAgWjkwU1RBVF9QQ0lDQUNPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNBcy4KKyAqCisgKiAgIFo5MFNUQVRfUENJQ0NDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lDQ3MuCisgKgorICogICBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBNQ0wyIFBDSVhDQ3MuCisgKgorICogICBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBNQ0wzIFBDSVhDQ3MuCisgKgorICogICBaOTBTVEFUX0NFWDJDQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkNzLgorICoKKyAqICAgWjkwU1RBVF9DRVgyQUNPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIENFWDJBcy4KKyAqCisgKiAgIElDQVo5MFNUQVRVUwogICogICAgIFJldHVybiBzb21lIGRldmljZSBkcml2ZXIgc3RhdHVzIGluIGEgaWNhX3o5MF9zdGF0dXMgc3RydWN0CiAgKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QgYXMgaXRzIGFyZy4KICAqCi0gKiAgICAgTk9URTogdGhpcyBpb2N0bCgpIGlzIGRlcHJlY2F0ZWQsIGFuZCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoCi0gKgkgICAgIHNpbmdsZSBpb2N0bCgpcyBmb3IgZWFjaCB0eXBlIG9mIHN0YXR1cyBiZWluZyByZXF1ZXN0ZWQKLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDQ09VTlQgKGRlcHJlY2F0ZWQpCisgKiAgIFo5MFNUQVRfUENJWENDQ09VTlQKICAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJWENDcyAoTUNMMiArIE1DTDMpLgogICogICAgIFRoaXMgaXMgREVQUkVDQVRFRCBub3cgdGhhdCBNQ0wzIFBDSVhDQ3MgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgZnJvbQogICogICAgIE1DTDIgUENJWENDcy4KLSAqCi0gKiAgIFo5MFFVSUVTQ0UgKG5vdCByZWNvbW1lbmRlZCkKLSAqICAgICBRdWllc2NlIHRoZSBkcml2ZXIuICBUaGlzIGlzIGludGVuZGVkIHRvIHN0b3AgYWxsIG5ldwotICogICAgIHJlcXVlc3RzIGZyb20gYmVpbmcgcHJvY2Vzc2VkLiAgSXRzIHVzZSBpcyBOT1QgcmVjb21tZW5kZWQsCi0gKiAgICAgZXhjZXB0IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIHN0b3AKLSAqICAgICBjYWxsZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkcml2ZXIuICBJdHMgb3JpZ2luYWwgdXNlIHdhcyB0bwotICogICAgIGFsbG93IHRoZSBkcml2ZXIgdG8gYmUgImRyYWluZWQiIG9mIHdvcmsgaW4gcHJlcGFyYXRpb24gZm9yCi0gKiAgICAgYSBzeXN0ZW0gc2h1dGRvd24uCi0gKgotICogICAgIE5PVEU6IG9uY2UgaXNzdWVkLCB0aGlzIGJhbiBvbiBuZXcgd29yayBjYW5ub3QgYmUgdW5kb25lCi0gKgkgICAgIGV4Y2VwdCBieSB1bmxvYWRpbmcgYW5kIHJlbG9hZGluZyB0aGUgZHJpdmVyLgogICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKaW5kZXggMDgxNjhhZi4uZDQ0MzQ0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLWFzbWxpbmthZ2UgdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7Cithc21saW5rYWdlIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qCiAgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKQEAgLTMzLDggKzMzLDggQEAKICAqIGJldHRlciA2NC1iaXQpIGJvdW5kYXJ5CiAgKi8KIAotYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkJCSAgaW50IGxlbiwgaW50IHN1bSwgaW50ICpzcmNfZXJyX3B0ciwgaW50ICpkc3RfZXJyX3B0cik7Cithc21saW5rYWdlIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQkgIGludCBsZW4sIF9fd3N1bSBzdW0sIGludCAqc3JjX2Vycl9wdHIsIGludCAqZHN0X2Vycl9wdHIpOwogCiAvKgogICoJTm90ZTogd2hlbiB5b3UgZ2V0IGEgTlVMTCBwb2ludGVyIGV4Y2VwdGlvbiBoZXJlIHRoaXMgbWVhbnMgc29tZW9uZQpAQCAtNDQsMjQgKzQ0LDI1IEBACiAgKglhY2Nlc3Nfb2soKS4KICAqLwogc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkJaW50IGxlbiwgaW50IHN1bSkKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZHN0LAorCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljICggc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18KLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCQkJaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKQorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7Ci0JcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMgKCBzcmMsIGRzdCwgbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOworCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChfX2ZvcmNlIGNvbnN0IHZvaWQgKilzcmMsIGRzdCwKKwkJCQkJbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOwogfQogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGludCBfX2R1bW15OwogCV9fYXNtX18oInN3YXAudyAlMCwgJTFcblx0IgpAQCAtNzQsNyArNzUsNyBAQAogCQk6ICI9ciIgKHN1bSksICI9JnIiIChfX2R1bW15KQogCQk6ICIwIiAoc3VtKQogCQk6ICJ0Iik7Ci0JcmV0dXJuIHN1bTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07CiB9CiAKIC8qCkBAIC04NCw3ICs4NSw3IEBACiAgKiAgICAgIGkzODYgdmVyc2lvbiBieSBKb3JnZSBDd2lrIDxqb3JnZUBsYXNlci5zYXRsaW5rLm5ldD4sIGFkYXB0ZWQKICAqICAgICAgZm9yIGxpbnV4IGJ5ICogQXJudCBHdWxicmFuZHNlbi4KICAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7CiAJdW5zaWduZWQgaW50IHN1bSwgX19kdW1teTAsIF9fZHVtbXkxOwogCkBAIC0xMTIsMTYgKzExMywxNSBAQAogCXJldHVybgljc3VtX2ZvbGQoc3VtKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgX19pbmxpbmVfXyBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKSAKKwkJCQkJCSAgIF9fd3N1bSBzdW0pCiB7CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLQl1bnNpZ25lZCBsb25nIGxlbl9wcm90byA9IChudG9ocyhsZW4pPDwxNikrcHJvdG8qMjU2OworCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKHByb3RvICsgbGVuKSA8PCA4OwogI2Vsc2UKLQl1bnNpZ25lZCBsb25nIGxlbl9wcm90byA9IChwcm90bzw8MTYpK2xlbjsKKwl1bnNpZ25lZCBsb25nIGxlbl9wcm90byA9IHByb3RvICsgbGVuOwogI2VuZGlmCiAJX19hc21fXygiY2xydFxuXHQiCiAJCSJhZGRjCSUwLCAlMVxuXHQiCkBAIC0xMzksMTEgKzEzOSwxMCBAQAogICogY29tcHV0ZXMgdGhlIGNoZWNrc3VtIG9mIHRoZSBUQ1AvVURQIHBzZXVkby1oZWFkZXIKICAqIHJldHVybnMgYSAxNi1iaXQgY2hlY2tzdW0sIGFscmVhZHkgY29tcGxlbWVudGVkCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1fdGNwdWRwX21hZ2ljKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3VtKSAKKwkJCQkJCSAgICAgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTE1MywxOCArMTUyLDE3IEBACiAgKiBpbiBpY21wLmMKICAqLwogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpcF9jb21wdXRlX2NzdW0odW5zaWduZWQgY2hhciAqIGJ1ZmYsIGludCBsZW4pCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogICAgIHJldHVybiBjc3VtX2ZvbGQgKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQogI2lmZGVmIENPTkZJR19JUFY2Ci1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJCQkgICAgIF9fdTMyIGxlbiwKLQkJCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCBzdW0pIAorc3RhdGljIF9faW5saW5lX18gX19zdW0xNiBjc3VtX2lwdjZfbWFnaWMoY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCQkgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJCSAgX193c3VtIHN1bSkKIHsKIAl1bnNpZ25lZCBpbnQgX19kdW1teTsKIAlfX2FzbV9fKCJjbHJ0XG5cdCIKQEAgLTIwMSwxNyArMTk5LDE4IEBACiAgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGNzdW1fYW5kX2NvcHlfdG9fdXNlciAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkJCQkJICAgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwKLQkJCQkJCSAgICAgIGludCBsZW4sIGludCBzdW0sCitzdGF0aWMgX19pbmxpbmVfXyBfX3dzdW0gY3N1bV9hbmRfY29weV90b191c2VyIChjb25zdCB2b2lkICpzcmMsCisJCQkJCQkgICAgICB2b2lkIF9fdXNlciAqZHN0LAorCQkJCQkJICAgICAgaW50IGxlbiwgX193c3VtIHN1bSwKIAkJCQkJCSAgICAgIGludCAqZXJyX3B0cikKIHsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgZHN0LCBsZW4pKQotCQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyhzcmMsIGRzdCwgbGVuLCBzdW0sIE5VTEwsIGVycl9wdHIpOworCQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYygoX19mb3JjZSBjb25zdCB2b2lkICopc3JjLAorCQkJCQkJZHN0LCBsZW4sIHN1bSwgTlVMTCwgZXJyX3B0cik7CiAKIAlpZiAobGVuKQogCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CiAKLQlyZXR1cm4gLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKS0xOyAvKiBpbnZhbGlkIGNoZWNrc3VtICovCiB9CiAjZW5kaWYgLyogX19BU01fU0hfQ0hFQ0tTVU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc2g2NC9jaGVja3N1bS5oCmluZGV4IGZkMDM0ZTkuLmJhNTk0Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2NoZWNrc3VtLmgKQEAgLTI2LDggKzI2LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4sCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgc3VtKTsKK2FzbWxpbmthZ2UgX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqCU5vdGU6IHdoZW4geW91IGdldCBhIE5VTEwgcG9pbnRlciBleGNlcHRpb24gaGVyZSB0aGlzIG1lYW5zIHNvbWVvbmUKQEAgLTM4LDQ2ICszNywzNCBAQAogICovCiAKIAotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pOworX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sCisJCQkJICAgICAgIF9fd3N1bSBzdW0pOwogCi11bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAotCQkJCQkgaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKTsKK19fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdm9pZCAqZHN0LAorCQkJCQkgaW50IGxlbiwgX193c3VtIHN1bSwgaW50ICplcnJfcHRyKTsKIAotLyoKLSAqIFRoZXNlIGFyZSB0aGUgb2xkIChhbmQgdW5zYWZlKSB3YXkgb2YgZG9pbmcgY2hlY2tzdW1zLCBhIHdhcm5pbmcgbWVzc2FnZSB3aWxsIGJlCi0gKiBwcmludGVkIGlmIHRoZXkgYXJlIHVzZWQgYW5kIGFuIGV4ZXB0aW9uIG9jY3Vycy4KLSAqCi0gKiB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIGdvIGF3YXkgYWZ0ZXIgc29tZSB0aW1lLgotICovCi0KLSNkZWZpbmUgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbXVzZXIgY3N1bV9wYXJ0aWFsX2NvcHkKLQotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5KGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBpbnQgbGVuLAotCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pOwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gY3N1bSkKIHsKKwl1MzIgc3VtID0gKF9fZm9yY2UgdTMyKWNzdW07CiAgICAgICAgIHN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7CiAgICAgICAgIHN1bSA9IChzdW0gJiAweGZmZmYpICsgKHN1bSA+PiAxNik7Ci0gICAgICAgIHJldHVybiB+KHN1bSk7CisgICAgICAgIHJldHVybiAoX19mb3JjZSBfX3N1bTE2KX5zdW07CiB9CiAKLXVuc2lnbmVkIHNob3J0IGlwX2Zhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICogaXBoLCB1bnNpZ25lZCBpbnQgaWhsKTsKK19fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCk7CiAKLXVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCSB1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCSB1bnNpZ25lZCBpbnQgc3VtKTsKKwkJCQkgX193c3VtIHN1bSk7CiAKIC8qCiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCisJCQkJCQkgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTg2LDcgKzczLDcgQEAKICAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKICAqIGluIGljbXAuYwogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9jaGVja3N1bS5oCmluZGV4IDI4NjE1ODEuLjI2N2U2MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvY2hlY2tzdW0uaApAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIGl0J3MgYmVzdCB0byBoYXZlIGJ1ZmYgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeQogICovCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gZnM6c3JjIHdoaWxlIGl0CiAgKiBjaGVja3N1bXMKQEAgLTQxLDkgKzQxLDggQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBfX2NzdW1fcGFydGlhbF9jb3B5X3NwYXJjX2dlbmVyaWMgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgCi1jc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrIChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwKLQkJCSAgIHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwgX193c3VtIHN1bSkKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0IGFzbSgibzAiKSA9ICh1bnNpZ25lZCBpbnQpc3JjOwogCXJlZ2lzdGVyIGNoYXIgKmQgYXNtKCJvMSIpID0gZHN0OwpAQCAtNTcsNDIgKzU2LDM2IEBACiAJOiAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLAogCSAgImcyIiwgImczIiwgImc0IiwgImc1IiwgImc3IiwKIAkgICJtZW1vcnkiLCAiY2MiKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAKLWNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkgICAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnIpCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCSAgICBfX3dzdW0gc3VtLCBpbnQgKmVycikKICAgewotCWlmICghYWNjZXNzX29rIChWRVJJRllfUkVBRCwgc3JjLCBsZW4pKSB7Ci0JCSplcnIgPSAtRUZBVUxUOwotCQltZW1zZXQgKGRzdCwgMCwgbGVuKTsKLQkJcmV0dXJuIHN1bTsKLQl9IGVsc2UgewotCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgbG9uZylzcmM7Ci0JCXJlZ2lzdGVyIGNoYXIgKmQgYXNtKCJvMSIpID0gZHN0OwotCQlyZWdpc3RlciBpbnQgbCBhc20oImcxIikgPSBsZW47Ci0JCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBzIGFzbSgiZzciKSA9IHN1bTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJldCBhc20oIm8wIikgPSAodW5zaWduZWQgbG9uZylzcmM7CisJcmVnaXN0ZXIgY2hhciAqZCBhc20oIm8xIikgPSBkc3Q7CisJcmVnaXN0ZXIgaW50IGwgYXNtKCJnMSIpID0gbGVuOworCXJlZ2lzdGVyIF9fd3N1bSBzIGFzbSgiZzciKSA9IHN1bTsKIAotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIuc2VjdGlvbiBfX2V4X3RhYmxlLCNhbGxvY1xuXHQiCi0JCSIuYWxpZ24gNFxuXHQiCi0JCSIud29yZCAxZiwyXG5cdCIKLQkJIi5wcmV2aW91c1xuIgotCQkiMTpcblx0IgotCQkiY2FsbCBfX2NzdW1fcGFydGlhbF9jb3B5X3NwYXJjX2dlbmVyaWNcblx0IgotCQkiIHN0ICU4LCBbJSVzcCArIDY0XVxuIgotCQk6ICI9JnIiIChyZXQpLCAiPSZyIiAoZCksICI9JnIiIChsKSwgIj0mciIgKHMpCi0JCTogIjAiIChyZXQpLCAiMSIgKGQpLCAiMiIgKGwpLCAiMyIgKHMpLCAiciIgKGVycikKLQkJOiAibzIiLCAibzMiLCAibzQiLCAibzUiLCAibzciLCAiZzIiLCAiZzMiLCAiZzQiLCAiZzUiLAotCQkgICJjYyIsICJtZW1vcnkiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0gIH0KKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIKKwkiLmFsaWduIDRcblx0IgorCSIud29yZCAxZiwyXG5cdCIKKwkiLnByZXZpb3VzXG4iCisJIjE6XG5cdCIKKwkiY2FsbCBfX2NzdW1fcGFydGlhbF9jb3B5X3NwYXJjX2dlbmVyaWNcblx0IgorCSIgc3QgJTgsIFslJXNwICsgNjRdXG4iCisJOiAiPSZyIiAocmV0KSwgIj0mciIgKGQpLCAiPSZyIiAobCksICI9JnIiIChzKQorCTogIjAiIChyZXQpLCAiMSIgKGQpLCAiMiIgKGwpLCAiMyIgKHMpLCAiciIgKGVycikKKwk6ICJvMiIsICJvMyIsICJvNCIsICJvNSIsICJvNyIsICJnMiIsICJnMyIsICJnNCIsICJnNSIsCisJICAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSlyZXQ7Cit9CiAgIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgCi1jc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbiwKLQkJCSAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnIpCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB2b2lkICpzcmMsIHZvaWQgX191c2VyICpkc3QsIGludCBsZW4sCisJCQkgIF9fd3N1bSBzdW0sIGludCAqZXJyKQogewogCWlmICghYWNjZXNzX29rIChWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkgewogCQkqZXJyID0gLUVGQVVMVDsKQEAgLTEwMSw3ICs5NCw3IEBACiAJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmV0IGFzbSgibzAiKSA9ICh1bnNpZ25lZCBsb25nKXNyYzsKIAkJcmVnaXN0ZXIgY2hhciBfX3VzZXIgKmQgYXNtKCJvMSIpID0gZHN0OwogCQlyZWdpc3RlciBpbnQgbCBhc20oImcxIikgPSBsZW47Ci0JCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBzIGFzbSgiZzciKSA9IHN1bTsKKwkJcmVnaXN0ZXIgX193c3VtIHMgYXNtKCJnNyIpID0gc3VtOwogCiAJCV9fYXNtX18gX192b2xhdGlsZV9fICgKIAkJIi5zZWN0aW9uIF9fZXhfdGFibGUsI2FsbG9jXG5cdCIKQEAgLTExNiw3ICsxMDksNyBAQAogCQk6ICJvMiIsICJvMyIsICJvNCIsICJvNSIsICJvNyIsCiAJCSAgImcyIiwgImczIiwgImc0IiwgImc1IiwKIAkJICAiY2MiLCAibWVtb3J5Iik7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAoX19mb3JjZSBfX3dzdW0pcmV0OwogCX0KIH0KIApAQCAtMTI2LDEwICsxMTksOSBAQAogLyogaWhsIGlzIGFsd2F5cyA1IG9yIGdyZWF0ZXIsIGFsbW9zdCBhbHdheXMgaXMgNSwgYW5kIGlwaCBpcyB3b3JkIGFsaWduZWQKICAqIHRoZSBtYWpvcml0eSBvZiB0aGUgdGltZS4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaXBoLAotCQkJCQkgIHVuc2lnbmVkIGludCBpaGwpCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBzdW07CisJX19zdW0xNiBzdW07CiAKIAkvKiBOb3RlOiBXZSBtdXN0IHJlYWQgJTIgYmVmb3JlIHdlIHRvdWNoICUwIGZvciB0aGUgZmlyc3QgdGltZSwKIAkgKiAgICAgICBiZWNhdXNlIEdDQyBjYW4gbGVnaXRpbWF0ZWx5IHVzZSB0aGUgc2FtZSByZWdpc3RlciBmb3IKQEAgLTE2NCw3ICsxNTYsNyBAQAogfQogCiAvKiBGb2xkIGEgcGFydGlhbCBjaGVja3N1bSB3aXRob3V0IGFkZGluZyBwc2V1ZG8gaGVhZGVycy4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNzdW1fZm9sZCh1bnNpZ25lZCBpbnQgc3VtKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGNzdW1fZm9sZChfX3dzdW0gc3VtKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTE3MywyMyArMTY1LDIyIEBACiAJCQkgICAgICJhZGR4XHQlMSwgJSVnMCwgJTFcblx0IgogCQkJICAgICAieG5vclx0JSVnMCwgJTEsICUwIgogCQkJICAgICA6ICI9JnIiIChzdW0pLCAiPXIiICh0bXApCi0JCQkgICAgIDogIjAiIChzdW0pLCAiMSIgKHN1bTw8MTYpCisJCQkgICAgIDogIjAiIChzdW0pLCAiMSIgKChfX2ZvcmNlIHUzMilzdW08PDE2KQogCQkJICAgICA6ICJjYyIpOwotCXJldHVybiBzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhZGRyLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKK3N0YXRpYyBpbmxpbmUgX193c3VtIGNzdW1fdGNwdWRwX25vZm9sZChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHN1bSkKKwkJCQkJICAgICAgIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImFkZGNjXHQlMSwgJTAsICUwXG5cdCIKIAkJCSAgICAgImFkZHhjY1x0JTIsICUwLCAlMFxuXHQiCiAJCQkgICAgICJhZGR4Y2NcdCUzLCAlMCwgJTBcblx0IgogCQkJICAgICAiYWRkeFx0JTAsICUlZzAsICUwXG5cdCIKIAkJCSAgICAgOiAiPXIiIChzdW0pLCAiPXIiIChzYWRkcikKLQkJCSAgICAgOiAiciIgKGRhZGRyKSwgInIiICgocHJvdG88PDE2KStsZW4pLCAiMCIgKHN1bSksCisJCQkgICAgIDogInIiIChkYWRkciksICJyIiAocHJvdG8gKyBsZW4pLCAiMCIgKHN1bSksCiAJCQkgICAgICAgIjEiIChzYWRkcikKIAkJCSAgICAgOiAiY2MiKTsKIAlyZXR1cm4gc3VtOwpAQCAtMTk5LDIyICsxOTAsMjAgQEAKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLAotCQkJCQkJICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IGxlbiwKIAkJCQkJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHN1bSkgCisJCQkJCQkgICBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkJIF9fdTMyIGxlbiwKLQkJCQkJCSB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSB1bnNpZ25lZCBpbnQgc3VtKSAKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2lwdjZfbWFnaWMoY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCSAgICAgIF9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sCisJCQkJICAgICAgX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSJhZGRjYwklMywgJTQsICUlZzRcblx0IgpAQCAtMjQ1LDcgKzIzNCw3IEBACiB9CiAKIC8qIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkgaW4gaWNtcC5jICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbikKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChidWZmLCBsZW4sIDApKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2hlY2tzdW0uaAppbmRleCBkYzhiZWQyLi43MGEwMDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9jaGVja3N1bS5oCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsKGNvbnN0IHZvaWQgKiBidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyogdGhlIHNhbWUgYXMgY3N1bV9wYXJ0aWFsLCBidXQgY29waWVzIGZyb20gdXNlciBzcGFjZSB3aGlsZSBpdAogICogY2hlY2tzdW1zCkBAIC0zOCw1MiArMzgsNTAgQEAKICAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgogICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJCQkJICAgICAgdW5zaWduZWQgY2hhciAqZHN0LAotCQkJCQkgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJICAgICAgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKLWV4dGVybiBsb25nIF9fY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsCi0JCQkJCSAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLAotCQkJCQkgIHVuc2lnbmVkIGludCBzdW0pOworZXh0ZXJuIGxvbmcgX19jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywKKwkJCQkJICB2b2lkICpkc3QsIGludCBsZW4sCisJCQkJCSAgX193c3VtIHN1bSk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoY29uc3QgdW5zaWduZWQgY2hhciBfX3VzZXIgKnNyYywKLQkJCSAgICB1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sCi0JCQkgICAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnIpCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKGNvbnN0IHZvaWQgX191c2VyICpzcmMsCisJCQkgICAgdm9pZCAqZHN0LCBpbnQgbGVuLAorCQkJICAgIF9fd3N1bSBzdW0sIGludCAqZXJyKQogewogCWxvbmcgcmV0ID0gX19jc3VtX3BhcnRpYWxfY29weV9mcm9tX3VzZXIoc3JjLCBkc3QsIGxlbiwgc3VtKTsKIAlpZiAocmV0IDwgMCkKIAkJKmVyciA9IC1FRkFVTFQ7Ci0JcmV0dXJuICh1bnNpZ25lZCBpbnQpIHJldDsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKSByZXQ7CiB9CiAKIC8qIAogICoJQ29weSBhbmQgY2hlY2tzdW0gdG8gdXNlcgogICovCiAjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIKLWV4dGVybiBsb25nIF9fY3N1bV9wYXJ0aWFsX2NvcHlfdG9fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCi0JCQkJCXVuc2lnbmVkIGNoYXIgX191c2VyICpkc3QsIGludCBsZW4sCi0JCQkJCSAgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gbG9uZyBfX2NzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLAorCQkJCQl2b2lkIF9fdXNlciAqZHN0LCBpbnQgbGVuLAorCQkJCQkgIF9fd3N1bSBzdW0pOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJICAgICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbiwKLQkJICAgICAgdW5zaWduZWQgaW50IHN1bSwgaW50ICplcnIpCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV9hbmRfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywKKwkJICAgICAgdm9pZCBfX3VzZXIgKmRzdCwgaW50IGxlbiwKKwkJICAgICAgX193c3VtIHN1bSwgaW50ICplcnIpCiB7CiAJbG9uZyByZXQgPSBfX2NzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIoc3JjLCBkc3QsIGxlbiwgc3VtKTsKIAlpZiAocmV0IDwgMCkKIAkJKmVyciA9IC1FRkFVTFQ7Ci0JcmV0dXJuICh1bnNpZ25lZCBpbnQpIHJldDsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKSByZXQ7CiB9CiAKIC8qIGlobCBpcyBhbHdheXMgNSBvciBncmVhdGVyLCBhbG1vc3QgYWx3YXlzIGlzIDUsIGFuZCBpcGggaXMgd29yZCBhbGlnbmVkCiAgKiB0aGUgbWFqb3JpdHkgb2YgdGhlIHRpbWUuCiAgKi8KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0oX19jb25zdF9fIHVuc2lnbmVkIGNoYXIgKmlwaCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgaWhsKTsKK2V4dGVybiBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOwogCiAvKiBGb2xkIGEgcGFydGlhbCBjaGVja3N1bSB3aXRob3V0IGFkZGluZyBwc2V1ZG8gaGVhZGVycy4gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIApAQCAtOTMsMTYgKzkxLDE1IEBACiAiCWFkZGMJCSUxLCAlJWcwLCAlMVxuIgogIgl4bm9yCQklJWcwLCAlMSwgJTBcbiIKIAk6ICI9JnIiIChzdW0pLCAiPXIiICh0bXApCi0JOiAiMCIgKHN1bSksICIxIiAoc3VtPDwxNikKKwk6ICIwIiAoc3VtKSwgIjEiICgoX19mb3JjZSB1MzIpc3VtPDwxNikKIAk6ICJjYyIpOwotCXJldHVybiAoc3VtICYgMHhmZmZmKTsKKwlyZXR1cm4gKF9fZm9yY2UgX19zdW0xNilzdW07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAogCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3VtKQorCQkJCQkgICAgICAgX193c3VtIHN1bSkKIHsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKICIJYWRkY2MJCSUxLCAlMCwgJTBcbiIKQEAgLTExMCw3ICsxMDcsNyBAQAogIglhZGRjY2MJCSUzLCAlMCwgJTBcbiIKICIJYWRkYwkJJTAsICUlZzAsICUwXG4iCiAJOiAiPXIiIChzdW0pLCAiPXIiIChzYWRkcikKLQk6ICJyIiAoZGFkZHIpLCAiciIgKChwcm90bzw8MTYpK2xlbiksICIwIiAoc3VtKSwgIjEiIChzYWRkcikKKwk6ICJyIiAoZGFkZHIpLCAiciIgKHByb3RvICsgbGVuKSwgIjAiIChzdW0pLCAiMSIgKHNhZGRyKQogCTogImNjIik7CiAJcmV0dXJuIHN1bTsKIH0KQEAgLTExOSwyMiArMTE2LDIwIEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV90Y3B1ZHBfbWFnaWModW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQkJCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgIHVuc2lnbmVkIGludCBzdW0pIAorCQkJCQkJICAgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7CiB9CiAKICNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgY3N1bV9pcHY2X21hZ2ljKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCQkgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkJCSBfX3UzMiBsZW4sCi0JCQkJCQkgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgdW5zaWduZWQgaW50IHN1bSkgCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkgICAgICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCSAgICAgIF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogIglhZGRjYwkJJTMsICU0LCAlJWc3XG4iCkBAIC0xNjUsNyArMTYwLDcgQEAKIH0KIAogLyogdGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgSVAtbGlrZSBjaGVja3N1bXMsIG1haW5seSBpbiBpY21wLmMgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBfX3N1bTE2IGlwX2NvbXB1dGVfY3N1bShjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGJ1ZmYsIGxlbiwgMCkpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tdjg1MC9jaGVja3N1bS5oCmluZGV4IDRkZjVlNzEwLi5kMWRkZGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9jaGVja3N1bS5oCkBAIC0yNiw4ICsyNiw3IEBACiAgKgogICogaXQncyBiZXN0IHRvIGhhdmUgYnVmZiBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5CiAgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsIChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwKLQkJCQkgIHVuc2lnbmVkIGludCBzdW0pOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWwoY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbiwgX193c3VtIHN1bSk7CiAKIC8qCiAgKiB0aGUgc2FtZSBhcyBjc3VtX3BhcnRpYWwsIGJ1dCBjb3BpZXMgZnJvbSBzcmMgd2hpbGUgaXQKQEAgLTM2LDggKzM1LDggQEAKICAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgogICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGNzdW1fcGFydGlhbF9jb3B5IChjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCi0JCQkJICAgdW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB1bnNpZ25lZCBzdW0pOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGNvbnN0IHZvaWQgKnNyYywKKwkJCQkgICB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0pOwogCiAKIC8qCkBAIC00NiwyMCArNDUsMTcgQEAKICAqIGhlcmUgZXZlbiBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBzcmMgYW5kIGRzdCBvbiBhIDMyLWJpdCAob3IgZXZlbgogICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKICAqLwotZXh0ZXJuIHVuc2lnbmVkIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkJICAgICBpbnQgbGVuLCB1bnNpZ25lZCBzdW0sCitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoY29uc3Qgdm9pZCAqc3JjLAorCQkJCQkgICAgIHZvaWQgKmRzdCwKKwkJCQkJICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLAogCQkJCQkgICAgIGludCAqY3N1bV9lcnIpOwogCi0jZGVmaW5lIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2soc3JjLCBkc3QsIGxlbiwgc3VtKQlcCi0JY3N1bV9wYXJ0aWFsX2NvcHkgKChzcmMpLCAoZHN0KSwgKGxlbiksIChzdW0pKQotCi11bnNpZ25lZCBzaG9ydCBpcF9mYXN0X2NzdW0gKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCk7CitfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpOwogCiAvKgogICoJRm9sZCBhIHBhcnRpYWwgY2hlY2tzdW0KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkICh1bnNpZ25lZCBsb25nIHN1bSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBjc3VtX2ZvbGQgKF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgaW50IHJlc3VsdDsKIAkvKgpAQCAtNjgsNyArNjQsNyBAQAogCSAgICAgIGFkZCAlMSwgJTAJSCAgICAgTAkJSCtMK0MgSCtMCiAJKi8KIAlhc20gKCJoc3cgJTEsICUwOyBhZGQgJTEsICUwIiA6ICI9JnIiIChyZXN1bHQpIDogInIiIChzdW0pKTsKLQlyZXR1cm4gKH5yZXN1bHQpID4+IDE2OworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KSh+cmVzdWx0ID4+IDE2KTsKIH0KIAogCkBAIC03NiwxMCArNzIsMTAgQEAKICAqIGNvbXB1dGVzIHRoZSBjaGVja3N1bSBvZiB0aGUgVENQL1VEUCBwc2V1ZG8taGVhZGVyCiAgKiByZXR1cm5zIGEgMTYtYml0IGNoZWNrc3VtLCBhbHJlYWR5IGNvbXBsZW1lbnRlZAogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotY3N1bV90Y3B1ZHBfbm9mb2xkICh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLAorc3RhdGljIGlubGluZSBfX3dzdW0KK2NzdW1fdGNwdWRwX25vZm9sZCAoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCSAgICB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkKKwkJICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCWludCBfX2NhcnJ5OwogCV9fYXNtX18gKCJhZGQgJTIsICUwOyIKQEAgLTkzLDE1ICs4OSwxNSBAQAogCQkgImFkZCAlMSwgJTAiCiAJCSA6ICI9JnIiIChzdW0pLCAiPSZyIiAoX19jYXJyeSkKIAkJIDogInIiIChkYWRkciksICJyIiAoc2FkZHIpLAotCQkgInIiIChudG9ocyAobGVuKSArIChwcm90byA8PCA4KSksCisJCSAiciIgKChsZW4gKyBwcm90bykgPDwgOCksCiAJCSAiMCIgKHN1bSkpOwogCXJldHVybiBzdW07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaW50Ci1jc3VtX3RjcHVkcF9tYWdpYyAodW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBpbmxpbmUgX19zdW0xNgorY3N1bV90Y3B1ZHBfbWFnaWMgKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkgICB1bnNpZ25lZCBzaG9ydCBsZW4sCi0JCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCB1bnNpZ25lZCBpbnQgc3VtKQorCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkIChjc3VtX3RjcHVkcF9ub2ZvbGQgKHNhZGRyLCBkYWRkciwgbGVuLCBwcm90bywgc3VtKSk7CiB9CkBAIC0xMTAsNyArMTA2LDcgQEAKICAqIHRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIElQLWxpa2UgY2hlY2tzdW1zLCBtYWlubHkKICAqIGluIGljbXAuYwogICovCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtIChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbik7CitleHRlcm4gX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbik7CiAKIAogI2VuZGlmIC8qIF9fVjg1MF9DSEVDS1NVTV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2NoZWNrc3VtLmgKaW5kZXggOTg5NDY5ZS4uNDE5ZmU4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NoZWNrc3VtLmgKQEAgLTE5LDE1ICsxOSwxNiBAQAogICogdGhlIGxhc3Qgc3RlcCBiZWZvcmUgcHV0dGluZyBhIGNoZWNrc3VtIGludG8gYSBwYWNrZXQuCiAgKiBNYWtlIHN1cmUgbm90IHRvIG1peCB3aXRoIDY0Yml0IGNoZWNrc3Vtcy4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9mb2xkKHVuc2lnbmVkIGludCBzdW0pCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJX19hc21fXygKIAkJIiAgYWRkbCAlMSwlMFxuIgogCQkiICBhZGNsICQweGZmZmYsJTAiCiAJCTogIj1yIiAoc3VtKQotCQk6ICJyIiAoc3VtIDw8IDE2KSwgIjAiIChzdW0gJiAweGZmZmYwMDAwKQorCQk6ICJyIiAoKF9fZm9yY2UgdTMyKXN1bSA8PCAxNiksCisJCSAgIjAiICgoX19mb3JjZSB1MzIpc3VtICYgMHhmZmZmMDAwMCkKIAkpOwotCXJldHVybiAofnN1bSkgPj4gMTY7CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpKH4oX19mb3JjZSB1MzIpc3VtID4+IDE2KTsKIH0KIAogLyoKQEAgLTQzLDcgKzQ0LDcgQEAKICAqIGlwaDogaXB2NCBoZWFkZXIKICAqIGlobDogbGVuZ3RoIG9mIGhlYWRlciAvIDQKICAqLyAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKmlwaCwgdW5zaWduZWQgaW50IGlobCkgCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgaXBfZmFzdF9jc3VtKGNvbnN0IHZvaWQgKmlwaCwgdW5zaWduZWQgaW50IGlobCkKIHsKIAl1bnNpZ25lZCBpbnQgc3VtOwogCkBAIC03MCw3ICs3MSw3IEBACiAJOiAiPXIiIChzdW0pLCAiPXIiIChpcGgpLCAiPXIiIChpaGwpCiAJOiAiMSIgKGlwaCksICIyIiAoaWhsKQogCTogIm1lbW9yeSIpOwotCXJldHVybihzdW0pOworCXJldHVybiAoX19mb3JjZSBfX3N1bTE2KXN1bTsKIH0KIAogLyoqIApAQCAtODQsMTYgKzg1LDE3IEBACiAgKiBSZXR1cm5zIHRoZSBwc2V1ZG8gaGVhZGVyIGNoZWNrc3VtIHRoZSBpbnB1dCBkYXRhLiBSZXN1bHQgaXMgCiAgKiAzMmJpdCB1bmZvbGRlZC4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIAotY3N1bV90Y3B1ZHBfbm9mb2xkKHVuc2lnbmVkIHNhZGRyLCB1bnNpZ25lZCBkYWRkciwgdW5zaWduZWQgc2hvcnQgbGVuLAotCQkgICB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSkgCitzdGF0aWMgaW5saW5lIF9fd3N1bQorY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBzaG9ydCBsZW4sCisJCSAgIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCWFzbSgiICBhZGRsICUxLCAlMFxuIgogCSAgICAiICBhZGNsICUyLCAlMFxuIgogCSAgICAiICBhZGNsICUzLCAlMFxuIgogCSAgICAiICBhZGNsICQwLCAlMFxuIgogCQk6ICI9ciIgKHN1bSkKLQkgICAgOiAiZyIgKGRhZGRyKSwgImciIChzYWRkciksICJnIiAoKG50b2hzKGxlbik8PDE2KStwcm90byoyNTYpLCAiMCIgKHN1bSkpOworCSAgICA6ICJnIiAoZGFkZHIpLCAiZyIgKHNhZGRyKSwKKwkgICAgICAiZyIgKChsZW4gKyBwcm90byk8PDgpLCAiMCIgKHN1bSkpOwogICAgIHJldHVybiBzdW07CiB9CiAKQEAgLTEwOSw5ICsxMTEsOSBAQAogICogUmV0dXJucyB0aGUgMTZiaXQgcHNldWRvIGhlYWRlciBjaGVja3N1bSB0aGUgaW5wdXQgZGF0YSBhbHJlYWR5CiAgKiBjb21wbGVtZW50ZWQgYW5kIHJlYWR5IHRvIGJlIGZpbGxlZCBpbi4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbnQgCi1jc3VtX3RjcHVkcF9tYWdpYyh1bnNpZ25lZCBsb25nIHNhZGRyLCB1bnNpZ25lZCBsb25nIGRhZGRyLAotCQkgIHVuc2lnbmVkIHNob3J0IGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIHVuc2lnbmVkIGludCBzdW0pIAorc3RhdGljIGlubGluZSBfX3N1bTE2Citjc3VtX3RjcHVkcF9tYWdpYyhfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKKwkJICB1bnNpZ25lZCBzaG9ydCBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLCBfX3dzdW0gc3VtKQogewogCXJldHVybiBjc3VtX2ZvbGQoY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLGRhZGRyLGxlbixwcm90byxzdW0pKTsKIH0KQEAgLTEyNiwyNSArMTI4LDI1IEBACiAgKiBCZWZvcmUgZmlsbGluZyBpdCBpbiBpdCBuZWVkcyB0byBiZSBjc3VtX2ZvbGQoKSdlZC4KICAqIGJ1ZmYgc2hvdWxkIGJlIGFsaWduZWQgdG8gYSA2NGJpdCBib3VuZGFyeSBpZiBwb3NzaWJsZS4KICAqLyAKLWV4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogI2RlZmluZSAgX0hBVkVfQVJDSF9DT1BZX0FORF9DU1VNX0ZST01fVVNFUiAxCiAjZGVmaW5lIEhBVkVfQ1NVTV9DT1BZX1VTRVIgMQogCiAKIC8qIERvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHkuIFVzZSB0aGUgd3JhcHBlcnMgYmVsb3cgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsZW4sCi0JCQkJCSAgICAgICB1bnNpZ25lZCBzdW0sIAorZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKGNvbnN0IHZvaWQgKnNyYywgY29uc3Qgdm9pZCAqZHN0LAorCQkJCQkgICAgICAgaW50IGxlbiwKKwkJCQkJICAgICAgIF9fd3N1bSBzdW0sCiAJCQkJCSAgICAgICBpbnQgKnNyY19lcnJfcHRyLCBpbnQgKmRzdF9lcnJfcHRyKTsKIAogCi1leHRlcm4gdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QsCi0JCQkJICAgICAgIGludCBsZW4sIHVuc2lnbmVkIGludCBpc3VtLCBpbnQgKmVycnApOwotZXh0ZXJuIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgdW5zaWduZWQgY2hhciBfX3VzZXIgKmRzdCwKLQkJCQkgICAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaXN1bSwgaW50ICplcnJwKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGxlbiwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJICAgICAgIGludCBsZW4sIF9fd3N1bSBpc3VtLCBpbnQgKmVycnApOworZXh0ZXJuIF9fd3N1bSBjc3VtX3BhcnRpYWxfY29weV90b191c2VyKGNvbnN0IHZvaWQgKnNyYywgdm9pZCBfX3VzZXIgKmRzdCwKKwkJCQkgICAgICBpbnQgbGVuLCBfX3dzdW0gaXN1bSwgaW50ICplcnJwKTsKK2V4dGVybiBfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwgaW50IGxlbiwKKwkJCQkJICAgICAgX193c3VtIHN1bSk7CiAKIC8qIE9sZCBuYW1lcy4gVG8gYmUgcmVtb3ZlZC4gKi8KICNkZWZpbmUgY3N1bV9hbmRfY29weV90b191c2VyIGNzdW1fcGFydGlhbF9jb3B5X3RvX3VzZXIKQEAgLTE1OCw3ICsxNjAsNyBAQAogICogUmV0dXJucyB0aGUgMTZiaXQgZm9sZGVkL2ludmVydGVkIGNoZWNrc3VtIG9mIHRoZSBwYXNzZWQgYnVmZmVyLgogICogUmVhZHkgdG8gZmlsbCBpbi4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGlwX2NvbXB1dGVfY3N1bSh1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbik7CitleHRlcm4gX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbik7CiAKIC8qKgogICogY3N1bV9pcHY2X21hZ2ljIC0gQ29tcHV0ZSBjaGVja3N1bSBvZiBhbiBJUHY2IHBzZXVkbyBoZWFkZXIuCkBAIC0xNzYsOSArMTc4LDkgQEAKIHN0cnVjdCBpbjZfYWRkcjsKIAogI2RlZmluZSBfSEFWRV9BUkNIX0lQVjZfQ1NVTSAxCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgCi1jc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywgdW5zaWduZWQgaW50IHN1bSk7CitleHRlcm4gX19zdW0xNgorY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCV9fdTMyIGxlbiwgdW5zaWduZWQgc2hvcnQgcHJvdG8sIF9fd3N1bSBzdW0pOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFkZDMyX3dpdGhfY2FycnkodW5zaWduZWQgYSwgdW5zaWduZWQgYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaAppbmRleCBhNDA2ZmNiLi42ZDI0ZWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oCkBAIC00NSw3ICs0NSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KIAogLyoKICAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaAppbmRleCAxOWY5OTE3Li5kNWRiYzg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKQEAgLTYsNyArNiw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2NoZWNrc3VtLmgKaW5kZXggMDMxMTRmOC4uNTQzNWFmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2NoZWNrc3VtLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAqCiAgKiBpdCdzIGJlc3QgdG8gaGF2ZSBidWZmIGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnkKICAqLwotYXNtbGlua2FnZSB1bnNpZ25lZCBpbnQgY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKTsKK2FzbWxpbmthZ2UgX193c3VtIGNzdW1fcGFydGlhbChjb25zdCB2b2lkICpidWZmLCBpbnQgbGVuLCBfX3dzdW0gc3VtKTsKIAogLyoKICAqIHRoZSBzYW1lIGFzIGNzdW1fcGFydGlhbCwgYnV0IGNvcGllcyBmcm9tIHNyYyB3aGlsZSBpdApAQCAtMzYsNyArMzYsNyBAQAogICogYmV0dGVyIDY0LWJpdCkgYm91bmRhcnkKICAqLwogCi1hc21saW5rYWdlIHVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKCBjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSwKK2FzbWxpbmthZ2UgX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoY29uc3Qgdm9pZCAqc3JjLCB2b2lkICpkc3QsIGludCBsZW4sIF9fd3N1bSBzdW0sCiAJCQkJCQkgICBpbnQgKnNyY19lcnJfcHRyLCBpbnQgKmRzdF9lcnJfcHRyKTsKIAogLyoKQEAgLTQ2LDM0ICs0NiwyNSBAQAogICoJSWYgeW91IHVzZSB0aGVzZSBmdW5jdGlvbnMgZGlyZWN0bHkgcGxlYXNlIGRvbid0IGZvcmdldCB0aGUgYWNjZXNzX29rKCkuCiAgKi8KIHN0YXRpYyBpbmxpbmUKLXVuc2lnbmVkIGludCBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrICggY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCi0JCQkJCWludCBsZW4sIGludCBzdW0pCitfX3dzdW0gY3N1bV9wYXJ0aWFsX2NvcHlfbm9jaGVjayhjb25zdCB2b2lkICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkJaW50IGxlbiwgX193c3VtIHN1bSkKIHsKLQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZ2VuZXJpYyAoIHNyYywgZHN0LCBsZW4sIHN1bSwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZQotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlciAoIGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LAotCQkJCQkJaW50IGxlbiwgaW50IHN1bSwgaW50ICplcnJfcHRyKQorX193c3VtIGNzdW1fcGFydGlhbF9jb3B5X2Zyb21fdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB2b2lkICpkc3QsCisJCQkJCQlpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7Ci0JcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMgKCBzcmMsIGRzdCwgbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOworCXJldHVybiBjc3VtX3BhcnRpYWxfY29weV9nZW5lcmljKChfX2ZvcmNlIGNvbnN0IHZvaWQgKilzcmMsIGRzdCwKKwkJCQkJbGVuLCBzdW0sIGVycl9wdHIsIE5VTEwpOwogfQogCiAvKgotICogVGhlc2UgYXJlIHRoZSBvbGQgKGFuZCB1bnNhZmUpIHdheSBvZiBkb2luZyBjaGVja3N1bXMsIGEgd2FybmluZyBtZXNzYWdlIHdpbGwgYmUKLSAqIHByaW50ZWQgaWYgdGhleSBhcmUgdXNlZCBhbmQgYW4gZXhlcHRpb24gb2NjdXJzLgotICoKLSAqIHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgZ28gYXdheSBhZnRlciBzb21lIHRpbWUuCi0gKi8KLQotI2RlZmluZSBjc3VtX3BhcnRpYWxfY29weV9mcm9tdXNlciBjc3VtX3BhcnRpYWxfY29weQotdW5zaWduZWQgaW50IGNzdW1fcGFydGlhbF9jb3B5KCBjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgaW50IGxlbiwgaW50IHN1bSk7Ci0KLS8qCiAgKglGb2xkIGEgcGFydGlhbCBjaGVja3N1bQogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBjc3VtX2ZvbGQodW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYgY3N1bV9mb2xkKF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgaW50IF9fZHVtbXk7CiAJX19hc21fXygiZXh0dWkJJTEsICUwLCAxNiwgMTZcblx0IgpAQCAtODcsMTQgKzc4LDE0IEBACiAJCSJleHR1aQklMCwgJTAsIDAsIDE2XG5cdCIKIAkJOiAiPXIiIChzdW0pLCAiPSZyIiAoX19kdW1teSkKIAkJOiAiMCIgKHN1bSkpOwotCXJldHVybiBzdW07CisJcmV0dXJuIChfX2ZvcmNlIF9fc3VtMTYpc3VtOwogfQogCiAvKgogICoJVGhpcyBpcyBhIHZlcnNpb24gb2YgaXBfY29tcHV0ZV9jc3VtKCkgb3B0aW1pemVkIGZvciBJUCBoZWFkZXJzLAogICoJd2hpY2ggYWx3YXlzIGNoZWNrc3VtIG9uIDQgb2N0ZXQgYm91bmRhcmllcy4KICAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaXBfZmFzdF9jc3VtKHVuc2lnbmVkIGNoYXIgKiBpcGgsIHVuc2lnbmVkIGludCBpaGwpCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGlwX2Zhc3RfY3N1bShjb25zdCB2b2lkICppcGgsIHVuc2lnbmVkIGludCBpaGwpCiB7CiAJdW5zaWduZWQgaW50IHN1bSwgdG1wLCBlbmRhZGRyOwogCkBAIC0xMjcsMTcgKzExOCwxNiBAQAogCXJldHVybgljc3VtX2ZvbGQoc3VtKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBjc3VtX3RjcHVkcF9ub2ZvbGQodW5zaWduZWQgbG9uZyBzYWRkciwKLQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZGFkZHIsCitzdGF0aWMgX19pbmxpbmVfXyBfX3dzdW0gY3N1bV90Y3B1ZHBfbm9mb2xkKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAogCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgcHJvdG8sCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgc3VtKQorCQkJCQkJICAgX193c3VtIHN1bSkKIHsKIAogI2lmZGVmIF9fWFRFTlNBX0VMX18KLQl1bnNpZ25lZCBsb25nIGxlbl9wcm90byA9IChudG9ocyhsZW4pPDwxNikrcHJvdG8qMjU2OworCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKGxlbiArIHByb3RvKSA8PCA4OwogI2VsaWYgZGVmaW5lZChfX1hURU5TQV9FQl9fKQotCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gKHByb3RvPDwxNikrbGVuOworCXVuc2lnbmVkIGxvbmcgbGVuX3Byb3RvID0gbGVuICsgcHJvdG87CiAjZWxzZQogIyBlcnJvciBwcm9jZXNzb3IgYnl0ZSBvcmRlciB1bmRlZmluZWQhCiAjZW5kaWYKQEAgLTE2MiwxMSArMTUyLDEwIEBACiAgKiBjb21wdXRlcyB0aGUgY2hlY2tzdW0gb2YgdGhlIFRDUC9VRFAgcHNldWRvLWhlYWRlcgogICogcmV0dXJucyBhIDE2LWJpdCBjaGVja3N1bSwgYWxyZWFkeSBjb21wbGVtZW50ZWQKICAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1fdGNwdWRwX21hZ2ljKHVuc2lnbmVkIGxvbmcgc2FkZHIsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkYWRkciwKK3N0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYgY3N1bV90Y3B1ZHBfbWFnaWMoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgbGVuLAogCQkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdW0pCisJCQkJCQkgICAgICAgX193c3VtIHN1bSkKIHsKIAlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fdGNwdWRwX25vZm9sZChzYWRkcixkYWRkcixsZW4scHJvdG8sc3VtKSk7CiB9CkBAIC0xNzYsMTcgKzE2NSwxNiBAQAogICogaW4gaWNtcC5jCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaXBfY29tcHV0ZV9jc3VtKHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuKQorc3RhdGljIF9faW5saW5lX18gX19zdW0xNiBpcF9jb21wdXRlX2NzdW0oY29uc3Qgdm9pZCAqYnVmZiwgaW50IGxlbikKIHsKICAgICByZXR1cm4gY3N1bV9mb2xkIChjc3VtX3BhcnRpYWwoYnVmZiwgbGVuLCAwKSk7CiB9CiAKICNkZWZpbmUgX0hBVkVfQVJDSF9JUFY2X0NTVU0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKLQkJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQkJCSAgICAgX191MzIgbGVuLAotCQkJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHN1bSkKK3N0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYgY3N1bV9pcHY2X21hZ2ljKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCQkJICBfX3UzMiBsZW4sIHVuc2lnbmVkIHNob3J0IHByb3RvLAorCQkJCQkgIF9fd3N1bSBzdW0pCiB7CiAJdW5zaWduZWQgaW50IF9fZHVtbXk7CiAJX19hc21fXygibDMyaQklMSwgJTIsIDBcblx0IgpAQCAtMjQ4LDggKzIzNiw4IEBACiAgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCiAgKi8KICNkZWZpbmUgSEFWRV9DU1VNX0NPUFlfVVNFUgotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IGNzdW1fYW5kX2NvcHlfdG9fdXNlciAoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsCi0JCQkJICAgIGludCBsZW4sIGludCBzdW0sIGludCAqZXJyX3B0cikKK3N0YXRpYyBfX2lubGluZV9fIF9fd3N1bSBjc3VtX2FuZF9jb3B5X3RvX3VzZXIoY29uc3Qgdm9pZCAqc3JjLCB2b2lkIF9fdXNlciAqZHN0LAorCQkJCSAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGRzdCwgbGVuKSkKIAkJcmV0dXJuIGNzdW1fcGFydGlhbF9jb3B5X2dlbmVyaWMoc3JjLCBkc3QsIGxlbiwgc3VtLCBOVUxMLCBlcnJfcHRyKTsKQEAgLTI1Nyw2ICsyNDUsNiBAQAogCWlmIChsZW4pCiAJCSplcnJfcHRyID0gLUVGQVVMVDsKIAotCXJldHVybiAtMTsgLyogaW52YWxpZCBjaGVja3N1bSAqLworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBhMTE1NWEyLi5mZjQzMzEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtNjAsOCArNjAsNiBAQAogaGVhZGVyLXkgKz0gZmQuaAogaGVhZGVyLXkgKz0gZmRyZWcuaAogaGVhZGVyLXkgKz0gZmliX3J1bGVzLmgKLWhlYWRlci15ICs9IGZ0YXBlLWhlYWRlci1zZWdtZW50LmgKLWhlYWRlci15ICs9IGZ0YXBlLXZlbmRvcnMuaAogaGVhZGVyLXkgKz0gZnVzZS5oCiBoZWFkZXIteSArPSBmdXRleC5oCiBoZWFkZXIteSArPSBnZW5ldGxpbmsuaApAQCAtMTkzLDcgKzE5MSw2IEBACiB1bmlmZGVmLXkgKz0gY3ljbGFkZXMuaAogdW5pZmRlZi15ICs9IGRjY3AuaAogdW5pZmRlZi15ICs9IGRpcmVudC5oCi11bmlmZGVmLXkgKz0gZGl2ZXJ0LmgKIHVuaWZkZWYteSArPSBkbG0uaAogdW5pZmRlZi15ICs9IGVsZmNvcmUuaAogdW5pZmRlZi15ICs9IGVycm5vLmgKQEAgLTIwNyw3ICsyMDQsNiBAQAogdW5pZmRlZi15ICs9IGZpbHRlci5oCiB1bmlmZGVmLXkgKz0gZmxhdC5oCiB1bmlmZGVmLXkgKz0gZnMuaAotdW5pZmRlZi15ICs9IGZ0YXBlLmgKIHVuaWZkZWYteSArPSBnYW1lcG9ydC5oCiB1bmlmZGVmLXkgKz0gZ2VuZXJpY19zZXJpYWwuaAogdW5pZmRlZi15ICs9IGdlbmhkLmgKQEAgLTM0Miw2ICszMzgsNSBAQAogdW5pZmRlZi15ICs9IHdhbnJvdXRlci5oCiB1bmlmZGVmLXkgKz0gd2F0Y2hkb2cuaAogdW5pZmRlZi15ICs9IHhmcm0uaAotdW5pZmRlZi15ICs9IHpmdGFwZS5oCiAKIG9iamhkci15ICs9IHZlcnNpb24uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hY2N0LmggYi9pbmNsdWRlL2xpbnV4L2FjY3QuaAppbmRleCAwNDk2ZDFmLi4zMDJlYjcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FjY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FjY3QuaApAQCAtMTE5LDYgKzExOSw3IEBACiAjaWZkZWYgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QKIHN0cnVjdCB2ZnNtb3VudDsKIHN0cnVjdCBzdXBlcl9ibG9jazsKK3N0cnVjdCBwYWNjdF9zdHJ1Y3Q7CiBleHRlcm4gdm9pZCBhY2N0X2F1dG9fY2xvc2VfbW50KHN0cnVjdCB2ZnNtb3VudCAqbSk7CiBleHRlcm4gdm9pZCBhY2N0X2F1dG9fY2xvc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gdm9pZCBhY2N0X2luaXRfcGFjY3Qoc3RydWN0IHBhY2N0X3N0cnVjdCAqcGFjY3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1hcnAuaCBiL2luY2x1ZGUvbGludXgvYXRtYXJwLmgKaW5kZXggMjRmODIzMy4uZWUxMDhmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1hcnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWFycC5oCkBAIC0zNyw3ICszNyw3IEBACiBzdHJ1Y3QgYXRtYXJwX2N0cmwgewogCWVudW0gYXRtYXJwX2N0cmxfdHlwZQl0eXBlOwkvKiBtZXNzYWdlIHR5cGUgKi8KIAlpbnQJCQlpdGZfbnVtOy8qIGludGVyZmFjZSBudW1iZXIgKGlmIHByZXNlbnQpICovCi0JdWludDMyX3QJCWlwOwkvKiBJUCBhZGRyZXNzIChhY3RfbmVlZCBvbmx5KSAqLworCV9fYmUzMgkJCWlwOwkvKiBJUCBhZGRyZXNzIChhY3RfbmVlZCBvbmx5KSAqLwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWJyMjY4NC5oIGIvaW5jbHVkZS9saW51eC9hdG1icjI2ODQuaAppbmRleCA3OTgxYjczLi45NjlmYjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWJyMjY4NC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtYnIyNjg0LmgKQEAgLTg2LDggKzg2LDggQEAKICAqIGVmZmljaWVudCBwZXItaWYgaW4vb3V0IGZpbHRlcnMsIHRoaXMgc3VwcG9ydCB3aWxsIGJlIHJlbW92ZWQKICAqLwogc3RydWN0IGJyMjY4NF9maWx0ZXIgewotCV9fdTMyCXByZWZpeDsJCS8qIG5ldHdvcmsgYnl0ZSBvcmRlciAqLwotCV9fdTMyCW5ldG1hc2s7CS8qIDAgPSBkaXNhYmxlIGZpbHRlciAqLworCV9fYmUzMglwcmVmaXg7CQkvKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KKwlfX2JlMzIJbmV0bWFzazsJLyogMCA9IGRpc2FibGUgZmlsdGVyICovCiB9OwogCiBzdHJ1Y3QgYnIyNjg0X2ZpbHRlcl9zZXQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaCBiL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKaW5kZXggNWZiZmE2OC4uZWExNjUwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1tcGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCkBAIC0xMyw3ICsxMyw3IEBACiAKIHN0cnVjdCBhdG1tcGNfaW9jIHsKICAgICAgICAgaW50IGRldl9udW07Ci0gICAgICAgIHVpbnQzMl90IGlwYWRkcjsgICAgICAgICAgICAgIC8qIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBzaG9ydGN1dCAgICAqLworICAgICAgICBfX2JlMzIgaXBhZGRyOyAgICAgICAgICAgICAgLyogdGhlIElQIGFkZHJlc3Mgb2YgdGhlIHNob3J0Y3V0ICAgICovCiAgICAgICAgIGludCB0eXBlOyAgICAgICAgICAgICAgICAgICAgIC8qIGluZ3Jlc3Mgb3IgZWdyZXNzICAgICAgICAgICAgICAgICAqLwogfTsKIApAQCAtMjEsOCArMjEsOCBAQAogICAgICAgICB1aW50OF90ICAgTGFzdF9OSFJQX0NJRV9jb2RlOwogICAgICAgICB1aW50OF90ICAgTGFzdF9RMjkzMV9jYXVzZV92YWx1ZTsgICAgIAogICAgICAgICB1aW50OF90ICAgZWdfTVBDX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKLSAgICAgICAgdWludDMyX3QgIHRhZzsKLSAgICAgICAgdWludDMyX3QgIGluX2RzdF9pcDsgICAgICAvKiBJUCBhZGRyZXNzIHRoaXMgaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyB0byAqLworICAgICAgICBfX2JlMzIgIHRhZzsKKyAgICAgICAgX19iZTMyICBpbl9kc3RfaXA7ICAgICAgLyogSVAgYWRkcmVzcyB0aGlzIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgdG8gKi8KICAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKICAgICAgICAgdWludDMyX3QgIHJlcXVlc3RfaWQ7CiB9IGluX2N0cmxfaW5mbzsKQEAgLTMwLDEwICszMCwxMCBAQAogdHlwZWRlZiBzdHJ1Y3QgZWdfY3RybF9pbmZvIHsKICAgICAgICAgdWludDhfdCAgIERMTF9oZWFkZXJbMjU2XTsKICAgICAgICAgdWludDhfdCAgIERIX2xlbmd0aDsKLSAgICAgICAgdWludDMyX3QgIGNhY2hlX2lkOwotICAgICAgICB1aW50MzJfdCAgdGFnOwotICAgICAgICB1aW50MzJfdCAgbXBzX2lwOwotICAgICAgICB1aW50MzJfdCAgZWdfZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdG8gd2hpY2ggaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyAqLworICAgICAgICBfX2JlMzIgIGNhY2hlX2lkOworICAgICAgICBfX2JlMzIgIHRhZzsKKyAgICAgICAgX19iZTMyICBtcHNfaXA7CisgICAgICAgIF9fYmUzMiAgZWdfZHN0X2lwOyAgICAgIC8qIElQIGFkZHJlc3MgdG8gd2hpY2ggaW5ncmVzcyBNUEMgc2VuZHMgcGFja2V0cyAqLwogICAgICAgICB1aW50OF90ICAgaW5fTVBDX2RhdGFfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOwogICAgICAgICB1aW50MTZfdCAgaG9sZGluZ190aW1lOwogfSBlZ19jdHJsX2luZm87CkBAIC00OSw3ICs0OSw3IEBACiAKIHN0cnVjdCBrX21lc3NhZ2UgewogICAgICAgICB1aW50MTZfdCB0eXBlOwotICAgICAgICB1aW50MzJfdCBpcF9tYXNrOworICAgICAgICBfX2JlMzIgaXBfbWFzazsKICAgICAgICAgdWludDhfdCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgaW5fY3RybF9pbmZvIGluX2luZm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjY3AuaCBiL2luY2x1ZGUvbGludXgvZGNjcC5oCmluZGV4IDUzNTUzYzkuLmVkNmNjODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNjcC5oCkBAIC0zMCw3ICszMCw3IEBACiAjZWxzZQogI2Vycm9yICAiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKICNlbmRpZgotCV9fdTE2CWRjY3BoX2NoZWNrc3VtOworCV9fc3VtMTYJZGNjcGhfY2hlY2tzdW07CiAjaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiAJX191OAlkY2NwaF94OjEsCiAJCWRjY3BoX3R5cGU6NCwKQEAgLTE3NSwxNyArMTc1LDIxIEBACiAJRENDUENfQ0NJRDMgPSAzLAogfTsKIAotLyogRENDUCBmZWF0dXJlcyAqLwotZW51bSB7Ci0JRENDUEZfUkVTRVJWRUQgPSAwLAotCURDQ1BGX0NDSUQgPSAxLAotCURDQ1BGX1NFUVVFTkNFX1dJTkRPVyA9IDMsCi0JRENDUEZfQUNLX1JBVElPID0gNSwKLQlEQ0NQRl9TRU5EX0FDS19WRUNUT1IgPSA2LAotCURDQ1BGX1NFTkRfTkRQX0NPVU5UID0gNywKLQkvKiAxMC0xMjcgcmVzZXJ2ZWQgKi8KLQlEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQyA9IDEyOCwKLQlEQ0NQRl9NQVhfQ0NJRF9TUEVDSUZJQyA9IDI1NSwKKy8qIERDQ1AgZmVhdHVyZXMgKFJGQyA0MzQwIHNlY3Rpb24gNi40KSAqLworIGVudW0geworIAlEQ0NQRl9SRVNFUlZFRCA9IDAsCisgCURDQ1BGX0NDSUQgPSAxLAorCURDQ1BGX1NIT1JUX1NFUU5PUyA9IDIsCQkvKiBYWFg6IG5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKyAJRENDUEZfU0VRVUVOQ0VfV0lORE9XID0gMywKKwlEQ0NQRl9FQ05fSU5DQVBBQkxFID0gNCwJLyogWFhYOiBub3QgeWV0IGltcGxlbWVudGVkICovCisgCURDQ1BGX0FDS19SQVRJTyA9IDUsCisgCURDQ1BGX1NFTkRfQUNLX1ZFQ1RPUiA9IDYsCisgCURDQ1BGX1NFTkRfTkRQX0NPVU5UID0gNywKKwlEQ0NQRl9NSU5fQ1NVTV9DT1ZFUiA9IDgsCisJRENDUEZfREFUQV9DSEVDS1NVTSA9IDksCS8qIFhYWDogbm90IHlldCBpbXBsZW1lbnRlZCAqLworIAkvKiAxMC0xMjcgcmVzZXJ2ZWQgKi8KKyAJRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMgPSAxMjgsCisgCURDQ1BGX01BWF9DQ0lEX1NQRUNJRklDID0gMjU1LAogfTsKIAogLyogdGhpcyBzdHJ1Y3R1cmUgaXMgYXJndW1lbnQgdG8gRENDUF9TT0NLT1BUX0NIQU5HRV9YICovCkBAIC0xOTYsMTMgKzIwMCwxNiBAQAogfTsKIAogLyogRENDUCBzb2NrZXQgb3B0aW9ucyAqLwotI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUJMQorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUJMSAvKiBYWFggZGVwcmVjYXRlZCwgd2l0aG91dCBlZmZlY3QgKi8KICNkZWZpbmUgRENDUF9TT0NLT1BUX1NFUlZJQ0UJCTIKICNkZWZpbmUgRENDUF9TT0NLT1BUX0NIQU5HRV9MCQkzCiAjZGVmaW5lIERDQ1BfU09DS09QVF9DSEFOR0VfUgkJNAorI2RlZmluZSBEQ0NQX1NPQ0tPUFRfU0VORF9DU0NPVgkJMTAKKyNkZWZpbmUgRENDUF9TT0NLT1BUX1JFQ1ZfQ1NDT1YJCTExCiAjZGVmaW5lIERDQ1BfU09DS09QVF9DQ0lEX1JYX0lORk8JMTI4CiAjZGVmaW5lIERDQ1BfU09DS09QVF9DQ0lEX1RYX0lORk8JMTkyCiAKKy8qIG1heGltdW0gbnVtYmVyIG9mIHNlcnZpY2VzIHByb3ZpZGVkIG9uIHRoZSBzYW1lIGxpc3RlbmluZyBwb3J0ICovCiAjZGVmaW5lIERDQ1BfU0VSVklDRV9MSVNUX01BWF9MRU4gICAgICAzMgogCiAjaWZkZWYgX19LRVJORUxfXwpAQCAtMjU2LDYgKzI2MywxMyBAQAogCXJldHVybiAoc3RydWN0IGRjY3BfaGRyICopc2tiLT5oLnJhdzsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9oZHIgKmRjY3BfemVyb2VkX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGVhZGxlbikKK3sKKwlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBoZWFkbGVuKTsKKwltZW1zZXQoc2tiLT5oLnJhdywgMCwgaGVhZGxlbik7CisJcmV0dXJuIGRjY3BfaGRyKHNrYik7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfaGRyX2V4dCAqZGNjcF9oZHJ4KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgZGNjcF9oZHJfZXh0ICopKHNrYi0+aC5yYXcgKyBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSk7CkBAIC0zNDIsNiArMzU2LDkgQEAKICAgKiBAZGNjcG1zX2NjaWQgLSBDb25nZXN0aW9uIENvbnRyb2wgSWQgKENDSUQpIChzZWN0aW9uIDEwKQogICAqIEBkY2NwbXNfc2VuZF9hY2tfdmVjdG9yIC0gU2VuZCBBY2sgVmVjdG9yIEZlYXR1cmUgKHNlY3Rpb24gMTEuNSkKICAgKiBAZGNjcG1zX3NlbmRfbmRwX2NvdW50IC0gU2VuZCBORFAgQ291bnQgRmVhdHVyZSAoNy43LjIpCisgICogQGRjY3Btc19hY2tfcmF0aW8gLSBBY2sgUmF0aW8gRmVhdHVyZSAoc2VjdGlvbiAxMS4zKQorICAqIEBkY2NwbXNfcGVuZGluZyAtIExpc3Qgb2YgZmVhdHVyZXMgYmVpbmcgbmVnb3RpYXRlZAorICAqIEBkY2NwbXNfY29uZiAtCiAgICovCiBzdHJ1Y3QgZGNjcF9taW5pc29jayB7CiAJX191NjQJCQlkY2NwbXNfc2VxdWVuY2Vfd2luZG93OwpAQCAtNDM5LDEyICs0NTYsMjUgQEAKICAqIEBkY2Nwc19nc3MgLSBncmVhdGVzdCBzZXF1ZW5jZSBudW1iZXIgc2VudAogICogQGRjY3BzX2dzciAtIGdyZWF0ZXN0IHZhbGlkIHNlcXVlbmNlIG51bWJlciByZWNlaXZlZAogICogQGRjY3BzX2dhciAtIGdyZWF0ZXN0IHZhbGlkIGFjayBudW1iZXIgcmVjZWl2ZWQgb24gYSBub24tU3luYzsgaW5pdGlhbGl6ZWQgdG8gJWRjY3BzX2lzcworICogQGRjY3BzX3NlcnZpY2UgLSBmaXJzdCAocGFzc2l2ZSBzb2NrKSBvciB1bmlxdWUgKGFjdGl2ZSBzb2NrKSBzZXJ2aWNlIGNvZGUKKyAqIEBkY2Nwc19zZXJ2aWNlX2xpc3QgLSBzZWNvbmQgLi4gbGFzdCBzZXJ2aWNlIGNvZGUgb24gcGFzc2l2ZSBzb2NrZXQKICAqIEBkY2Nwc190aW1lc3RhbXBfdGltZSAtIHRpbWUgb2YgbGF0ZXN0IFRJTUVTVEFNUCBvcHRpb24KICAqIEBkY2Nwc190aW1lc3RhbXBfZWNobyAtIGxhdGVzdCB0aW1lc3RhbXAgcmVjZWl2ZWQgb24gYSBUSU1FU1RBTVAgb3B0aW9uCi0gKiBAZGNjcHNfcGFja2V0X3NpemUgLSBTZXQgdGhydSBzZXRzb2Nrb3B0Ci0gKiBAZGNjcHNfcm9sZSAtIFJvbGUgb2YgdGhpcyBzb2NrLCBvbmUgb2YgJWRjY3Bfcm9sZQorICogQGRjY3BzX2xfYWNrX3JhdGlvIC0KKyAqIEBkY2Nwc19yX2Fja19yYXRpbyAtCisgKiBAZGNjcHNfcGNzbGVuIC0gc2VuZGVyICAgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAodmlhIHNvY2tvcHQpCisgKiBAZGNjcHNfcGNybGVuIC0gcmVjZWl2ZXIgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAodmlhIHNvY2tvcHQpCiAgKiBAZGNjcHNfbmRwX2NvdW50IC0gbnVtYmVyIG9mIE5vbiBEYXRhIFBhY2tldHMgc2luY2UgbGFzdCBkYXRhIHBhY2tldAorICogQGRjY3BzX21zc19jYWNoZSAtCisgKiBAZGNjcHNfbWluaXNvY2sgLQogICogQGRjY3BzX2hjX3J4X2Fja3ZlYyAtIHJ4IGhhbGYgY29ubmVjdGlvbiBhY2sgdmVjdG9yCisgKiBAZGNjcHNfaGNfcnhfY2NpZCAtCisgKiBAZGNjcHNfaGNfdHhfY2NpZCAtCisgKiBAZGNjcHNfb3B0aW9uc19yZWNlaXZlZCAtCisgKiBAZGNjcHNfZXBvY2ggLQorICogQGRjY3BzX3JvbGUgLSBSb2xlIG9mIHRoaXMgc29jaywgb25lIG9mICVkY2NwX3JvbGUKKyAqIEBkY2Nwc19oY19yeF9pbnNlcnRfb3B0aW9ucyAtCisgKiBAZGNjcHNfaGNfdHhfaW5zZXJ0X29wdGlvbnMgLQogICogQGRjY3BzX3htaXRfdGltZXIgLSB0aW1lciBmb3Igd2hlbiBDQ0lEIGlzIG5vdCByZWFkeSB0byBzZW5kCiAgKi8KIHN0cnVjdCBkY2NwX3NvY2sgewpAQCAtNDY0LDkgKzQ5NCwxMCBAQAogCXN0cnVjdCBkY2NwX3NlcnZpY2VfbGlzdAkqZGNjcHNfc2VydmljZV9saXN0OwogCXN0cnVjdCB0aW1ldmFsCQkJZGNjcHNfdGltZXN0YW1wX3RpbWU7CiAJX191MzIJCQkJZGNjcHNfdGltZXN0YW1wX2VjaG87Ci0JX191MzIJCQkJZGNjcHNfcGFja2V0X3NpemU7CiAJX191MTYJCQkJZGNjcHNfbF9hY2tfcmF0aW87CiAJX191MTYJCQkJZGNjcHNfcl9hY2tfcmF0aW87CisJX191MTYJCQkJZGNjcHNfcGNzbGVuOworCV9fdTE2CQkJCWRjY3BzX3BjcmxlbjsKIAl1bnNpZ25lZCBsb25nCQkJZGNjcHNfbmRwX2NvdW50OwogCV9fdTMyCQkJCWRjY3BzX21zc19jYWNoZTsKIAlzdHJ1Y3QgZGNjcF9taW5pc29jawkJZGNjcHNfbWluaXNvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RpdmVydC5oIGIvaW5jbHVkZS9saW51eC9kaXZlcnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiNGU5ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RpdmVydC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBGcmFtZSBEaXZlcnNpb24sIEJlbm9pdCBMb2NoZXIgPEJlbm9pdC5Mb2NoZXJAc2tmLmNvbT4KLSAqCi0gKiBDaGFuZ2VzOgotICogCQkwNi8wOS8yMDAwCUJMOglpbml0aWFsIHZlcnNpb24KLSAqIAotICovCi0gCi0jaWZuZGVmIF9MSU5VWF9ESVZFUlRfSAotI2RlZmluZSBfTElOVVhfRElWRVJUX0gKLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0jZGVmaW5lCU1BWF9ESVZFUlRfUE9SVFMJOAkvKiBNYXggbnVtYmVyIG9mIHBvcnRzIHRvIGRpdmVydCAodGNwLCB1ZHApICovCi0KLS8qIERpdmVydGFibGUgcHJvdG9jb2xzICovCi0jZGVmaW5lCURJVkVSVF9QUk9UT19OT05FCTB4MDAwMAotI2RlZmluZQlESVZFUlRfUFJPVE9fSVAJCTB4MDAwMQotI2RlZmluZQlESVZFUlRfUFJPVE9fSUNNUAkweDAwMDIKLSNkZWZpbmUJRElWRVJUX1BST1RPX1RDUAkweDAwMDQKLSNkZWZpbmUJRElWRVJUX1BST1RPX1VEUAkweDAwMDgKLQotLyoKLSAqCVRoaXMgaXMgYW4gRXRoZXJuZXQgRnJhbWUgRGl2ZXJ0ZXIgb3B0aW9uIGJsb2NrCi0gKi8KLXN0cnVjdCBkaXZlcnRfYmxrCi17Ci0JaW50CQlkaXZlcnQ7ICAvKiBhcmUgd2UgYWN0aXZlICovCi0JdW5zaWduZWQgaW50IHByb3RvczsJLyogcHJvdG9jb2xzICovCi0JX191MTYJCXRjcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCi0JX191MTYJCXRjcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHRjcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCi0JX191MTYJCXVkcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCi0JX191MTYJCXVkcF9zcmNbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBzcmMgcG9ydHMgdG8gZGl2ZXJ0ICovCi19OwotCi0vKgotICogRGl2ZXJzaW9uIGNvbnRyb2wgYmxvY2ssIGZvciBjb25maWd1cmF0aW9uIHdpdGggdGhlIHVzZXJzcGFjZSB0b29sCi0gKiBkaXZlcnQKLSAqLwotCi10eXBlZGVmIHVuaW9uIF9kaXZlcnRfY2ZfYXJnCi17Ci0JX19zMTYJCWludDE2OwotCV9fdTE2CQl1aW50MTY7Ci0JX19zMzIJCWludDMyOwotCV9fdTMyCQl1aW50MzI7Ci0JX19zNjQJCWludDY0OwotCV9fdTY0CQl1aW50NjQ7Ci0Jdm9pZAlfX3VzZXIgKnB0cjsKLX0gZGl2ZXJ0X2NmX2FyZzsKLQotCi1zdHJ1Y3QgZGl2ZXJ0X2NmCi17Ci0JaW50CWNtZDsJCQkJLyogQ29tbWFuZCAqLwotCWRpdmVydF9jZl9hcmcgCWFyZzEsCi0JCQkJCWFyZzIsCi0JCQkJCWFyZzM7Ci0JaW50CWRldl9pbmRleDsJLyogZGV2aWNlIGluZGV4IChldGgwPTAsIGV0Yy4uLikgKi8KLX07Ci0KLQotLyogRGl2ZXJzaW9uIGNvbW1hbmRzICovCi0jZGVmaW5lCURJVkNNRF9ESVZFUlQJCQkxIC8qIEVOQUJMRS9ESVNBQkxFIGRpdmVyc2lvbiAqLwotI2RlZmluZQlESVZDTURfSVAJCQkJMiAvKiBFTkFCTEUvRElTQUJMRSB3aG9sZCBJUCBkaXZlcnNpb24gKi8KLSNkZWZpbmUJRElWQ01EX1RDUAkJCQkzIC8qIEVOQUJMRS9ESVNBQkxFIHdob2xkIFRDUCBkaXZlcnNpb24gKi8KLSNkZWZpbmUJRElWQ01EX1RDUERTVAkJCTQgLyogQUREL1JFTU9WRSBUQ1AgRFNUIHBvcnQgZm9yIGRpdmVyc2lvbiAqLwotI2RlZmluZQlESVZDTURfVENQU1JDCQkJNSAvKiBBREQvUkVNT1ZFIFRDUCBTUkMgcG9ydCBmb3IgZGl2ZXJzaW9uICovCi0jZGVmaW5lCURJVkNNRF9VRFAJCQkJNiAvKiBFTkFCTEUvRElTQUJMRSB3aG9sZSBVRFAgZGl2ZXJzaW9uICovCi0jZGVmaW5lCURJVkNNRF9VRFBEU1QJCQk3IC8qIEFERC9SRU1PVkUgVURQIERTVCBwb3J0IGZvciBkaXZlcnNpb24gKi8KLSNkZWZpbmUJRElWQ01EX1VEUFNSQwkJCTggLyogQUREL1JFTU9WRSBVRFAgU1JDIHBvcnQgZm9yIGRpdmVyc2lvbiAqLwotI2RlZmluZQlESVZDTURfSUNNUAkJCQk5IC8qIEVOQUJMRS9ESVNBQkxFIHdob2xlIElDTVAgZGl2ZXJzaW9uICovCi0jZGVmaW5lCURJVkNNRF9HRVRTVEFUVVMJCTEwIC8qIEdFVCB0aGUgc3RhdHVzIG9mIHRoZSBkaXZlcnRlciAqLwotI2RlZmluZQlESVZDTURfUkVTRVQJCQkxMSAvKiBSZXNldCB0aGUgZGl2ZXJ0ZXIgb24gdGhlIHNwZWNpZmllZCBkZXYgKi8KLSNkZWZpbmUgRElWQ01EX0dFVFZFUlNJT04JCTEyIC8qIFJldHJpZXZlIHRoZSBkaXZlcnRlciBjb2RlIHZlcnNpb24gKGNoYXJbMzJdKSAqLwotCi0vKiBHZW5lcmFsIHN5bnRheCBvZiB0aGUgY29tbWFuZHM6Ci0gKiAKLSAqIERJVkNNRF94eHh4eHgoYXJnMSwgYXJnMiwgYXJnMywgZGV2X2luZGV4KQotICogCi0gKiBTSU9DU0lGRElWRVJUOgotICogICBESVZDTURfRElWRVJUKERJVkFSRzFfRU5BQkxFfERJVkFSRzFfRElTQUJMRSwgLCAsaWZpbmRleCkKLSAqICAgRElWQ01EX0lQKERJVkFSRzFfRU5BQkxFfERJVkFSRzFfRElTQUJMRSwgLCAsIGlmaW5kZXgpCi0gKiAgIERJVkNNRF9UQ1AoRElWQVJHMV9FTkFCTEV8RElWQVJHMV9ESVNBQkxFLCAsICwgaWZpbmRleCkKLSAqICAgRElWQ01EX1RDUERTVChESVZBUkcxX0FERHxESVZBUkcxX1JFTU9WRSwgcG9ydCwgLCBpZmluZGV4KQotICogICBESVZDTURfVENQU1JDKERJVkFSRzFfQUREfERJVkFSRzFfUkVNT1ZFLCBwb3J0LCAsIGlmaW5kZXgpCi0gKiAgIERJVkNNRF9VRFAoRElWQVJHMV9FTkFCTEV8RElWQVJHMV9ESVNBQkxFLCAsICwgaWZpbmRleCkKLSAqICAgRElWQ01EX1VEUERTVChESVZBUkcxX0FERHxESVZBUkcxX1JFTU9WRSwgcG9ydCwgLCBpZmluZGV4KQotICogICBESVZDTURfVURQU1JDKERJVkFSRzFfQUREfERJVkFSRzFfUkVNT1ZFLCBwb3J0LCAsIGlmaW5kZXgpCi0gKiAgIERJVkNNRF9JQ01QKERJVkFSRzFfRU5BQkxFfERJVkFSRzFfRElTQUJMRSwgLCAsIGlmaW5kZXgpCi0gKiAgIERJVkNNRF9SRVNFVCgsICwgLCBpZmluZGV4KQotICogICAKLSAqIFNJT0dJRkRJVkVSVDoKLSAqICAgRElWQ01EX0dFVFNUQVRVUyhkaXZlcnRfYmxrLCAsICwgaWZpbmRleCkKLSAqICAgRElWQ01EX0dFVFZFUlNJT04oc3RyaW5nWzNdKQotICovCi0KLQotLyogUG9zc2libGUgdmFsdWVzIGZvciBhcmcxICovCi0jZGVmaW5lCURJVkFSRzFfRU5BQkxFCQkJMCAvKiBFTkFCTEUgc29tZXRoaW5nICovCi0jZGVmaW5lCURJVkFSRzFfRElTQUJMRQkJCTEgLyogRElTQUJMRSBzb21ldGhpbmcgKi8KLSNkZWZpbmUgRElWQVJHMV9BREQJCQkJMiAvKiBBREQgc29tZXRoaW5nICovCi0jZGVmaW5lIERJVkFSRzFfUkVNT1ZFCQkJMyAvKiBSRU1PVkUgc29tZXRoaW5nICovCi0KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyogZGl2ZXJ0ZXIgZnVuY3Rpb25zICovCi0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0KLSNpZmRlZiBDT05GSUdfTkVUX0RJVkVSVAotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotCi1pbnQgYWxsb2NfZGl2ZXJ0X2JsayhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXZvaWQgZnJlZV9kaXZlcnRfYmxrKHN0cnVjdCBuZXRfZGV2aWNlICopOwotaW50IGRpdmVydF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZGl2ZXJ0X2NmIF9fdXNlciAqYXJnKTsKLXZvaWQgZGl2ZXJ0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9kaXZlcnRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCS8qIGlmIGRpdmVyc2lvbiBpcyBzdXBwb3J0ZWQgb24gZGV2aWNlLCB0aGVuIGRpdmVydCAqLwotCWlmIChza2ItPmRldi0+ZGl2ZXJ0ICYmIHNrYi0+ZGV2LT5kaXZlcnQtPmRpdmVydCkKLQkJZGl2ZXJ0X2ZyYW1lKHNrYik7Ci19Ci0KLSNlbHNlCi0jIGRlZmluZSBhbGxvY19kaXZlcnRfYmxrKGRldikJCSgwKQotIyBkZWZpbmUgZnJlZV9kaXZlcnRfYmxrKGRldikJCWRvIHt9IHdoaWxlICgwKQotIyBkZWZpbmUgZGl2ZXJ0X2lvY3RsKGNtZCwgYXJnKQkJKC1FTk9QS0cpCi0jIGRlZmluZSBoYW5kbGVfZGl2ZXJ0ZXIoc2tiKQkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLSNlbmRpZiAKLSNlbmRpZgkvKiBfTElOVVhfRElWRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmliX3J1bGVzLmggYi9pbmNsdWRlL2xpbnV4L2ZpYl9ydWxlcy5oCmluZGV4IDQ0MThjOGQuLjgyNzBhYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmliX3J1bGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWJfcnVsZXMuaApAQCAtNiw2ICs2LDcgQEAKIAogLyogcnVsZSBpcyBwZXJtYW5lbnQsIGFuZCBjYW5ub3QgYmUgZGVsZXRlZCAqLwogI2RlZmluZSBGSUJfUlVMRV9QRVJNQU5FTlQJMQorI2RlZmluZSBGSUJfUlVMRV9JTlZFUlQJCTIKIAogc3RydWN0IGZpYl9ydWxlX2hkcgogewpAQCAtMzQsNyArMzUsNyBAQAogCUZSQV9VTlVTRUQzLAogCUZSQV9VTlVTRUQ0LAogCUZSQV9VTlVTRUQ1LAotCUZSQV9GV01BUkssCS8qIG5ldGZpbHRlciBtYXJrICovCisJRlJBX0ZXTUFSSywJLyogbWFyayAqLwogCUZSQV9GTE9XLAkvKiBmbG93L2NsYXNzIGlkICovCiAJRlJBX1VOVVNFRDYsCiAJRlJBX1VOVVNFRDcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggMmZlNmUzZi4uY2FjN2IxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjc2LDcgKzI3Niw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFkaXgtdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByaW9fdHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC05NzcsMzYgKzk3NywxMyBAQAogI2RlZmluZSB2ZnNfY2hlY2tfZnJvemVuKHNiLCBsZXZlbCkgXAogCXdhaXRfZXZlbnQoKHNiKS0+c193YWl0X3VuZnJvemVuLCAoKHNiKS0+c19mcm96ZW4gPCAobGV2ZWwpKSkKIAotc3RhdGljIGlubGluZSB2b2lkIGdldF9mc19leGNsKHZvaWQpCi17Ci0JYXRvbWljX2luYygmY3VycmVudC0+ZnNfZXhjbCk7Ci19CisjZGVmaW5lIGdldF9mc19leGNsKCkgYXRvbWljX2luYygmY3VycmVudC0+ZnNfZXhjbCkKKyNkZWZpbmUgcHV0X2ZzX2V4Y2woKSBhdG9taWNfZGVjKCZjdXJyZW50LT5mc19leGNsKQorI2RlZmluZSBoYXNfZnNfZXhjbCgpIGF0b21pY19yZWFkKCZjdXJyZW50LT5mc19leGNsKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X2ZzX2V4Y2wodm9pZCkKLXsKLQlhdG9taWNfZGVjKCZjdXJyZW50LT5mc19leGNsKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaGFzX2ZzX2V4Y2wodm9pZCkKLXsKLQlyZXR1cm4gYXRvbWljX3JlYWQoJmN1cnJlbnQtPmZzX2V4Y2wpOwotfQotCi0KLS8qCi0gKiBTdXBlcmJsb2NrIGxvY2tpbmcuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKQotewotCWdldF9mc19leGNsKCk7Ci0JbXV0ZXhfbG9jaygmc2ItPnNfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCi17Ci0JcHV0X2ZzX2V4Y2woKTsKLQltdXRleF91bmxvY2soJnNiLT5zX2xvY2spOwotfQorLyogbm90IHF1aXRlIHJlYWR5IHRvIGJlIGRlcHJlY2F0ZWQsIGJ1dC4uLiAqLworZXh0ZXJuIHZvaWQgbG9ja19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CitleHRlcm4gdm9pZCB1bmxvY2tfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogCiAvKgogICogVkZTIGhlbHBlciBmdW5jdGlvbnMuLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdGFwZS1oZWFkZXItc2VnbWVudC5oIGIvaW5jbHVkZS9saW51eC9mdGFwZS1oZWFkZXItc2VnbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzMyMjE4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9IRUFERVJfU0VHTUVOVF9ICi0jZGVmaW5lIF9GVEFQRV9IRUFERVJfU0VHTUVOVF9ICi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2luY2x1ZGUvbGludXgvZnRhcGUtaGVhZGVyLXNlZ21lbnQuaCx2ICQKLSAqICRSZXZpc2lvbjogMS4yICQKLSAqICREYXRlOiAxOTk3LzEwLzA1IDE5OjE5OjI4ICQKLSAqCi0gKiAgICAgIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgb2Zmc2V0cyBpbnRvIHRoZSBoZWFkZXIgc2VnbWVudCBvZiBhCi0gKiAgICAgIGZsb3BweSB0YXBlIGNhcnRyaWRnZS4gIEZvciB1c2Ugd2l0aCB0aGUgUUlDLTQwLzgwLzMwMTAvMzAyMAotICogICAgICBmbG9wcHktdGFwZSBkcml2ZXIgImZ0YXBlIiBmb3IgTGludXguCi0gKi8KLQotI2RlZmluZSBGVF9TSUdOQVRVUkUgICAwICAvKiBtdXN0IGJlIDB4YWE1NWFhNTUgKi8KLSNkZWZpbmUgRlRfRk1UX0NPREUgICAgNAotI2RlZmluZSBGVF9SRVZfTEVWRUwgICA1ICAvKiBvbmx5IGZvciBRSUMtODAgc2luY2UuIFJldi4gTCAoPT0gMHgwYykgICAgICAgICAqLwotI2RlZmluZSBGVF9IU0VHXzEgICAgICA2ICAvKiBmaXJzdCBoZWFkZXIgc2VnbWVudCwgZXhjZXB0IGZvciBmb3JtYXQgY29kZSAgNiAqLwotI2RlZmluZSBGVF9IU0VHXzIgICAgICA4ICAvKiBzZWNvbmQgaGVhZGVyIHNlZ21lbnQsIGV4Y2VwdCBmb3IgZm9ybWF0IGNvZGUgNiAqLwotI2RlZmluZSBGVF9GUlNUX1NFRyAgIDEwICAvKiBmaXJzdCBkYXRhIHNlZ21lbnQsIGV4Y2VwdCBmb3IgZm9ybWF0IGNvZGUgNiAgICAqLwotI2RlZmluZSBGVF9MQVNUX1NFRyAgIDEyICAvKiBsYXN0IGRhdGEgc2VnbWVudCwgZXhjZXB0IGZvciBmb3JtYXQgY29kZSA2ICAgICAqLwotI2RlZmluZSBGVF9GTVRfREFURSAgIDE0ICAvKiBkYXRlIGFuZCB0aW1lIG9mIG1vc3QgcmVjZW50IGZvcm1hdCwgc2VlIGJlbG93ICAqLwotI2RlZmluZSBGVF9XUl9EQVRFICAgIDE4ICAvKiBkYXRlIGFuZCB0aW1lIG9mIG1vc3QgcmVjZW50IHdyaXRlIG9yIGZvcm1hdCAgICAqLwotI2RlZmluZSBGVF9TUFQgICAgICAgIDI0ICAvKiBzZWdtZW50cyBwZXIgdHJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9UUEMgICAgICAgIDI2ICAvKiB0cmFja3MgcGVyIGNhcnRyaWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9GSE0gICAgICAgIDI3ICAvKiBmbG9wcHkgZHJpdmUgaGVhZCAobWF4aW11bSBvZiBpdCkgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9GVE0gICAgICAgIDI4ICAvKiBmbG9wcHkgdHJhY2sgbWF4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9GU00gICAgICAgIDI5ICAvKiBmbG9wcHkgc2VjdG9yIG1heC4gKDEyOCkgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9MQUJFTCAgICAgIDMwICAvKiBmbG9wcHkgdGFwZSBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9MQUJFTF9EQVRFIDc0ICAvKiBkYXRlIGFuZCB0aW1lIHRoZSB0YXBlIGxhYmVsIHdhcyB3cml0dGVuICAgICAgICAqLwotI2RlZmluZSBGVF9MQUJFTF9TWiAgIChGVF9MQUJFTF9EQVRFIC0gRlRfTEFCRUwpCi0jZGVmaW5lIEZUX0NNQVBfU1RBUlQgNzggIC8qIHN0YXJ0aW5nIHNlZ21lbnQgb2YgY29tcHJlc3Npb24gbWFwICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX0ZNVF9FUlJPUiAxMjggIC8qIG11c3QgYmUgc2V0IHRvIDB4ZmYgaWYgcmVtYWluZGVyIGdldHMgbG9zdCBkdXJpbmcKLQkJCSAgICogdGFwZSBmb3JtYXQKLQkJCSAgICovCi0jZGVmaW5lIEZUX1NFR19DTlQgICAxMzAgIC8qIG51bWJlciBvZiBzZWcuIHdyaXR0ZW4sIGZvcm1hdHRlZCBvciB2ZXJpZmllZAotCQkJICAgKiB0aHJvdWdoIGxpZmV0aW1lIG9mIHRhcGUgKHdoeSBub3QgcmVhZD8pCi0JCQkgICAqLwotI2RlZmluZSBGVF9JTklUX0RBVEUgMTM4ICAvKiBkYXRlIGFuZCB0aW1lIG9mIGluaXRpYWwgdGFwZSBmb3JtYXQgICAgKi8KLSNkZWZpbmUgRlRfRk1UX0NOVCAgIDE0MiAgLyogbnVtYmVyIG9mIHRpbWVzIHRhcGUgaGFzIGJlZW4gZm9ybWF0dGVkICovCi0jZGVmaW5lIEZUX0ZTTF9DTlQgICAxNDQgIC8qIG51bWJlciBvZiBzZWdtZW50cyBpbiBmYWlsZWQgc2VjdG9yIGxvZyAqLwotI2RlZmluZSBGVF9NS19DT0RFICAgMTQ2ICAvKiBpZCBzdHJpbmcgb2YgdGFwZSBtYW51ZmFjdHVyZXIgICAgICAgICAgKi8KLSNkZWZpbmUgRlRfTE9UX0NPREUgIDE5MCAgLyogdGFwZSBtYW51ZmFjdHVyZXIgbG90IGNvZGUgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUXzZfSFNFR18xICAyMzQgIC8qIGZpcnN0IGhlYWRlciBzZWdtZW50IGZvciBmb3JtYXQgY29kZSAgNiAqLwotI2RlZmluZSBGVF82X0hTRUdfMiAgMjM4ICAvKiBzZWNvbmQgaGVhZGVyIHNlZ21lbnQgZm9yIGZvcm1hdCBjb2RlIDYgKi8KLSNkZWZpbmUgRlRfNl9GUlNUX1NFRyAyNDIgLyogZmlyc3QgZGF0YSBzZWdtZW50IGZvciBmb3JtYXQgY29kZSA2ICAgICovCi0jZGVmaW5lIEZUXzZfTEFTVF9TRUcgMjQ2IC8qIGxhc3QgZGF0YSBzZWdtZW50IGZvciBmb3JtYXQgY29kZSA2ICAgICAqLwotCi0jZGVmaW5lIEZUX0ZTTCAgICAgICAgMjU2Ci0jZGVmaW5lIEZUX0hFQURFUl9FTkQgMjU2IC8qIHNwYWNlIGJleW9uZCB0aGlzIHBvaW50OgotCQkJICAgKiBmb3JtYXQgY29kZXMgMiwgMyBhbmQgNTogCi0JCQkgICAqIC0gIGZhaWxlZCBzZWN0b3IgbG9nIHVudGlsIGJ5dGUgMjA0NwotCQkJICAgKiAtICBiYWQgc2VjdG9yIG1hcCBpbiB0aGUgcmVhbWluaW5nIHBhcnQgb2Ygc2VnbWVudAotCQkJICAgKiBmb3JtYXQgY29kZXMgNCBhbmQgNjoKLQkJCSAgICogLSAgYmFkIHNlY3RvciBtYXAgIHN0YXJ0cyBoZWFyCi0JCQkgICAqLwotCi0KLS8qICB2YWx1ZSB0byBiZSBzdG9yZWQgYXQgdGhlIEZUX1NJR05BVFVSRSBvZmZzZXQgCi0gKi8KLSNkZWZpbmUgRlRfSFNFR19NQUdJQyAweGFhNTVhYTU1Ci0jZGVmaW5lIEZUX0QyR19NQUdJQyAgMHg4MjI4ODIyOCAvKiBEaXR0byAyR0IgKi8KLQotLyogZGF0YSBhbmQgdGltZSBlbmNvZGluZzogKi8KLSNkZWZpbmUgRlRfWUVBUl9TSElGVCAyNQotI2RlZmluZSBGVF9ZRUFSX01BU0sgIDB4ZmUwMDAwMDAKLSNkZWZpbmUgRlRfWUVBUl8wICAgICAxOTcwCi0jZGVmaW5lIEZUX1lFQVJfTUFYICAgMTI3Ci0jZGVmaW5lIEZUX1lFQVIoeWVhcikgKCgoKHllYXIpLUZUX1lFQVJfMCk8PEZUX1lFQVJfU0hJRlQpJkZUX1lFQVJfTUFTSykKLQotI2RlZmluZSBGVF9USU1FX1NISUZUICAgMAotI2RlZmluZSBGVF9USU1FX01BU0sgICAgMHgwMUZGRkZGRgotI2RlZmluZSBGVF9USU1FX01BWCAgICAgMHgwMWVhNmRmZiAvKiBsYXN0IHNlY29uZCBvZiBhIHllYXIgKi8KLSNkZWZpbmUgRlRfVElNRShtbyxkLGgsbSxzKSBcCi0JKCgoKHMpKzYwKigobSkrNjAqKChoKSsyNCooKGQpKzMxKihtbykpKSkpICYgRlRfVElNRV9NQVNLKSkKLQotI2RlZmluZSBGVF9USU1FX1NUQU1QKHksbW8sZCxoLG0scykgKEZUX1lFQVIoeSkgfCBGVF9USU1FKG1vLGQsaCxtLHMpKQotCi0vKiB2YWx1ZXMgZm9yIHRoZSBmb3JtYXQgY29kZSBmaWVsZCAqLwotdHlwZWRlZiBlbnVtIHsKLQlmbXRfbm9ybWFsID0gMiwgLyogIFFJQy04MCBwb3N0IFJldi4gQiAyMDVGdCBvciAzMDdGdCB0YXBlICAgICovCi0JZm10XzExMDBmdCA9IDMsIC8qICBRSUMtODAgcG9zdCBSZXYuIEIgMTEwMEZ0IHRhcGUgICAgICAgICAgICAqLwotCWZtdF92YXIgICAgPSA0LCAvKiAgUUlDLTgwIHBvc3QgUmV2LiBCIHZhcmlhYmVsIGxlbmd0aCBmb3JtYXQgKi8KLQlmbXRfNDI1ZnQgID0gNSwgLyogIFFJQy04MCBwb3N0IFJldi4gQiA0MjVGdCB0YXBlICAgICAgICAgICAgICovCi0JZm10X2JpZyAgICA9IDYgIC8qICBRSUMtMzAxMC8zMDIwIHZhcmlhYmxlIGxlbmd0aCB0YXBlIHdpdGggbW9yZSAKLQkJCSAqICB0aGFuIDJeMTYgc2VnbWVudHMgcGVyIHRhcGUKLQkJCSAqLwotfSBmdF9mb3JtYXRfdHlwZTsKLQotLyogZGVmaW5pdGlvbnMgZm9yIHRoZSBmYWlsZWQgc2VjdG9yIGxvZyAqLwotI2RlZmluZSBGVF9GU0xfU0laRSAgICAgICAgKDIgKiBGVF9TRUNUT1JfU0laRSAtIEZUX0hFQURFUl9FTkQpCi0jZGVmaW5lIEZUX0ZTTF9NQVhfRU5UUklFUyAoRlRfRlNMX1NJWkUvc2l6ZW9mKF9fdTMyKSkKLQotdHlwZWRlZiBzdHJ1Y3QgZnRfZnNsX2VudHJ5IHsKLQlfX3UxNiBzZWdtZW50OwotCV9fdTE2IGRhdGU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBmdF9mc2xfZW50cnk7Ci0KLQotLyogIGRhdGUgZW5jb2RpbmcgZm9yIHRoZSBmYWlsZWQgc2VjdG9yIGxvZyAKLSAqICBtb250aDogMS4uMTIsIGRheTogMS4uMzEsIHllYXI6IDE5NzAuLjIwOTcKLSAqLwotI2RlZmluZSBGVF9GU0xfVElNRV9TVEFNUCh5LG0sZCkgXAotCSgoKCgoeSkgLSBGVF9ZRUFSXzApPDw5KSYweGZlMDApIHwgKCgobSk8PDUpJjB4MDFlMCkgfCAoKGQpJjB4MDAxZikpCi0KLSNlbmRpZiAvKiBfRlRBUEVfSEVBREVSX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdGFwZS12ZW5kb3JzLmggYi9pbmNsdWRlL2xpbnV4L2Z0YXBlLXZlbmRvcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWMxYTgxZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0YXBlLXZlbmRvcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0jaWZuZGVmIF9GVEFQRV9WRU5ET1JTX0gKLSNkZWZpbmUgX0ZUQVBFX1ZFTkRPUlNfSAotCi0vKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTMtMTk5NiBCYXMgTGFhcmhvdmVuLAotICogICAgICAgICAgICAgICAgKEMpIDE5OTYtMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2luY2x1ZGUvbGludXgvZnRhcGUtdmVuZG9ycy5oLHYgJAotICogJFJldmlzaW9uOiAxLjYgJAotICogJERhdGU6IDE5OTcvMTAvMDkgMTU6Mzg6MTEgJAotICoKLSAqICAgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzdXBwb3J0ZWQgZHJpdmUgdHlwZXMgd2l0aCB0aGVpcgotICogICAgICBRSUMtMTE3IHNwZWMuIHZlbmRvciBjb2RlIGFuZCBkcml2ZSBkZXBlbmRlbnQgY29uZmlndXJhdGlvbgotICogICAgICBpbmZvcm1hdGlvbi4KLSAqLwotCi10eXBlZGVmIGVudW0gewotCXVua25vd25fd2FrZV91cCA9IDAsCi0Jbm9fd2FrZV91cCwKLQl3YWtlX3VwX2NvbG9yYWRvLAotCXdha2VfdXBfbW91bnRhaW4sCi0Jd2FrZV91cF9pbnNpZ2h0LAotfSB3YWtlX3VwX3R5cGVzOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0Jd2FrZV91cF90eXBlcyB3YWtlX3VwOwkvKiBzZWUgd2FrZV91cF90eXBlcyAqLwotCWNoYXIgKm5hbWU7CQkvKiBUZXh0IGRlc2NyaWJpbmcgdGhlIGRyaXZlICovCi19IHdha2V1cF9tZXRob2Q7Ci0KLS8qICBOb3RlOiBvcmRlciBvZiBlbnRyaWVzIGluIFdBS0VVUF9NRVRIT0RTIG11c3QgYmUgc28gdGhhdCBhIHZhcmlhYmxlCi0gKiAgICAgICAgb2YgdHlwZSB3YWtlX3VwX3R5cGVzIGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4IGluIHRoZSBhcnJheS4KLSAqLwotI2RlZmluZSBXQUtFVVBfTUVUSE9EUyB7IFwKLSAgeyB1bmtub3duX3dha2VfdXAsICAgICJVbmtub3duIiB9LCBcCi0gIHsgbm9fd2FrZV91cCwgICAgICAgICAiTm9uZSIgfSwgXAotICB7IHdha2VfdXBfY29sb3JhZG8sICAgIkNvbG9yYWRvIiB9LCBcCi0gIHsgd2FrZV91cF9tb3VudGFpbiwgICAiTW91bnRhaW4iIH0sIFwKLSAgeyB3YWtlX3VwX2luc2lnaHQsICAgICJNb3Rvci1vbiIgfSwgXAotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IHZlbmRvcl9pZDsJLyogdmVuZG9yIGlkIGZyb20gZHJpdmUgKi8KLQlpbnQgc3BlZWQ7CQkvKiBtYXhpbXVtIHRhcGUgdHJhbnNwb3J0IHNwZWVkIChpcHMpICovCi0Jd2FrZV91cF90eXBlcyB3YWtlX3VwOwkvKiBzZWUgd2FrZV91cF90eXBlcyAqLwotCWNoYXIgKm5hbWU7CQkvKiBUZXh0IGRlc2NyaWJpbmcgdGhlIGRyaXZlICovCi19IHZlbmRvcl9zdHJ1Y3Q7Ci0KLSNkZWZpbmUgVU5LTk9XTl9WRU5ET1IgKC0xKQotCi0jZGVmaW5lIFFJQzExN19WRU5ET1JTIHsJCQkJCQkgICAgXAotLyogc2VlIF92ZW5kb3Jfc3RydWN0ICovCQkJCQkJICAgIFwKLSAgeyAweDAwMDAwLCAgODIsIHdha2VfdXBfY29sb3JhZG8sICAiQ29sb3JhZG8gREotMTAgKG9sZCkiIH0sCQkgICAgXAotICB7IDB4MDAwNDcsICA5MCwgd2FrZV91cF9jb2xvcmFkbywgICJDb2xvcmFkbyBESi0xMC9ESi0yMCIgfSwJCSAgICBcCi0gIHsgMHgwMTFjMiwgIDg0LCB3YWtlX3VwX2NvbG9yYWRvLCAgIkNvbG9yYWRvIDcwMCIgfSwJCQkgICAgXAotICB7IDB4MDExYzMsICA5MCwgd2FrZV91cF9jb2xvcmFkbywgICJDb2xvcmFkbyAxNDAwIiB9LAkJCSAgICBcCi0gIHsgMHgwMTFjNCwgIDg0LCB3YWtlX3VwX2NvbG9yYWRvLCAgIkNvbG9yYWRvIERKLTEwL0RKLTIwIChuZXcpIiB9LAkgICAgXAotICB7IDB4MDExYzUsICA4NCwgd2FrZV91cF9jb2xvcmFkbywgICJIUCBDb2xvcmFkbyBUMTAwMCIgfSwJCSAgICBcCi0gIHsgMHgwMTFjNiwgIDkwLCB3YWtlX3VwX2NvbG9yYWRvLCAgIkhQIENvbG9yYWRvIFQzMDAwIiB9LAkJICAgIFwKLSAgeyAweDAwMDA1LCAgNDUsIHdha2VfdXBfbW91bnRhaW4sICAiQXJjaGl2ZSA1NTgwaSIgfSwJCQkgICAgXAotICB7IDB4MTAwMDUsICA1MCwgd2FrZV91cF9pbnNpZ2h0LCAgICJJbnNpZ2h0IDgwTWIsIElyd2luIDgwU1giIH0sCSAgICBcCi0gIHsgMHgwMDE0MCwgIDc0LCB3YWtlX3VwX21vdW50YWluLCAgIkFyY2hpdmUgUy5Ib3JuZXQgW0lkZW50aXR5L0VzY29tXSIgfSwgXAotICB7IDB4MDAxNDYsICA3Miwgd2FrZV91cF9tb3VudGFpbiwgICJBcmNoaXZlIDMxMjUwUSBbRXNjb21dIiB9LAkgICAgXAotICB7IDB4MDAxNGEsIDEwMCwgd2FrZV91cF9tb3VudGFpbiwgICJBcmNoaXZlIFhMOTI1MGkgW0Nvbm5lci9Fc2NvbV0iIH0sICAgIFwKLSAgeyAweDAwMTRjLCAgOTgsIHdha2VfdXBfbW91bnRhaW4sICAiQ29ubmVyIEMyNTBNUVQiIH0sCQkgICAgXAotICB7IDB4MDAxNGUsICA4MCwgd2FrZV91cF9tb3VudGFpbiwgICJDb25uZXIgQzI1ME1RIiB9LAkJCSAgICBcCi0gIHsgMHgwMDE1MCwgIDgwLCB3YWtlX3VwX21vdW50YWluLCAgIkNvbm5lciBUU000MjBSL1RTVDgwMFIiIH0sCSAgICBcCi0gIHsgMHgwMDE1MiwgIDgwLCB3YWtlX3VwX21vdW50YWluLCAgIkNvbm5lciBUU004NTBSIiB9LAkJICAgIFwKLSAgeyAweDAwMTU2LCAgODAsIHdha2VfdXBfbW91bnRhaW4sICAiQ29ubmVyIFRTTTg1MFIvMTcwMFIvVFNUMzIwMFIiIH0sCSAgICBcCi0gIHsgMHgwMDE4MCwgICAwLCB3YWtlX3VwX21vdW50YWluLCAgIlN1bW1pdCBTRSAxNTAiIH0sCQkJICAgIFwKLSAgeyAweDAwMTgxLCAgODUsIHdha2VfdXBfbW91bnRhaW4sICAiU3VtbWl0IFNFIDI1MCwgTW91bnRhaW4gRlM4MDAwIiB9LCAgICBcCi0gIHsgMHgwMDFjMSwgIDgyLCBub193YWtlX3VwLCAgICAgICAgIldhbmd0ZWsgMzA0MEYiIH0sCQkJICAgIFwKLSAgeyAweDAwMWM4LCAgNjQsIG5vX3dha2VfdXAsICAgICAgICAiV2FuZ3RlayAzMDgwRiIgfSwJCQkgICAgXAotICB7IDB4MDAxYzgsICA2NCwgd2FrZV91cF9jb2xvcmFkbywgICJXYW5ndGVrIDMwODBGIiB9LAkJCSAgICBcCi0gIHsgMHgwMDFjYSwgIDY3LCBub193YWtlX3VwLCAgICAgICAgIldhbmd0ZWsgMzA4MEYgKG5ldykiIH0sCQkgICAgXAotICB7IDB4MDAxY2MsICA3Nywgd2FrZV91cF9jb2xvcmFkbywgICJXYW5ndGVrIDMyMDAgLyBUZWFjIDcwMCIgfSwJICAgIFwKLSAgeyAweDAwMWNkLCAgNzUsIHdha2VfdXBfY29sb3JhZG8sICAiUmV2ZWFsIFRCMTQwMCIgfSwJCQkgICAgXAotICB7IDB4MDAzODAsICA4NSwgd2FrZV91cF9jb2xvcmFkbywgICJFeGFieXRlIEVhZ2xlLTk2IiB9LAkJICAgIFwKLSAgeyAweDAwMzgxLCAgODUsIHdha2VfdXBfY29sb3JhZG8sICAiRXhhYnl0ZSBFYWdsZSBUUi0zIiB9LAkJICAgIFwKLSAgeyAweDAwMzgyLCAgODUsIHdha2VfdXBfY29sb3JhZG8sICAiRXhhYnl0ZSBFYWdsZSBUUi0zIiB9LAkJICAgIFwKLSAgeyAweDAwM2NlLCAgNzcsIHdha2VfdXBfY29sb3JhZG8sICAiVGVhYyA4MDAiIH0sCQkJICAgIFwKLSAgeyAweDAwM2NmLCAgIDAsIHdha2VfdXBfY29sb3JhZG8sICAiVGVhYyBGVDMwMTBUUiIgfSwJCQkgICAgXAotICB7IDB4MDg4ODAsICA2NCwgbm9fd2FrZV91cCwgICAgICAgICJJb21lZ2EgMjUwLCBEaXR0byA4MDAiIH0sCQkgICAgXAotICB7IDB4MDg4ODAsICA2NCwgd2FrZV91cF9jb2xvcmFkbywgICJJb21lZ2EgMjUwLCBEaXR0byA4MDAiIH0sCQkgICAgXAotICB7IDB4MDg4ODAsICA2NCwgd2FrZV91cF9pbnNpZ2h0LCAgICJJb21lZ2EgMjUwLCBEaXR0byA4MDAiIH0sCQkgICAgXAotICB7IDB4MDg4ODEsICA4MCwgd2FrZV91cF9jb2xvcmFkbywgICJJb21lZ2EgNzAwIiB9LAkJCSAgICBcCi0gIHsgMHgwODg4MiwgIDgwLCB3YWtlX3VwX2NvbG9yYWRvLCAgIklvbWVnYSAzMjAwIiB9LAkJCSAgICBcCi0gIHsgMHgwODg4MywgIDgwLCB3YWtlX3VwX2NvbG9yYWRvLCAgIklvbWVnYSBESVRUTyAyR0IiIH0sCQkgICAgXAotICB7IDB4MDAwMjEsICA3MCwgbm9fd2FrZV91cCwgICAgICAgICJBSVdBIENULTgwMyIgfSwJCQkgICAgXAotICB7IDB4MDA0YzAsICA4MCwgbm9fd2FrZV91cCwgICAgICAgICJBSVdBIFRELVMxNjAwIiB9LAkJCSAgICBcCi0gIHsgMHgwMDAyMSwgICAwLCB3YWtlX3VwX21vdW50YWluLCAgIkNPUkV0YXBlIFFJQzgwIiB9LAkJICAgIFwKLSAgeyAweDAwNDQxLCAgIDAsIHdha2VfdXBfbW91bnRhaW4sICAiQ29tQnl0ZSBEb3VibGVQbGF5IiB9LAkJICAgIFwKLSAgeyAweDAwNDgxLCAxMjcsIHdha2VfdXBfbW91bnRhaW4sICAiUEVSVEVDIE15VGFwZSA4MDAiIH0sCQkgICAgXAotICB7IDB4MDA0ODMsIDEzMCwgd2FrZV91cF9tb3VudGFpbiwgICJQRVJURUMgTXlUYXBlIDMyMDAiIH0sCQkgICAgXAotICB7IFVOS05PV05fVkVORE9SLCAwLCBub193YWtlX3VwLCAidW5rbm93biIgfQkJCQkgICAgXAotfQotCi0jZGVmaW5lIFFJQzExN19NQUtFX0NPREVTIHsJCQlcCi0gIHsgMCwgIlVuYXNzaWduZWQiIH0sCQkJCVwKLSAgeyAxLCAiQWxsb3kgQ29tcHV0ZXIgUHJvZHVjdHMiIH0sCQlcCi0gIHsgMiwgIjNNIiB9LAkJCQkJXAotICB7IDMsICJUYW5kYmVyZyBEYXRhIiB9LAkJCVwKLSAgeyA0LCAiQ29sb3JhZG8iIH0sCQkJCVwKLSAgeyA1LCAiQXJjaGl2ZS9Db25uZXIiIH0sCQkJXAotICB7IDYsICJNb3VudGFpbi9TdW1taXQgTWVtb3J5IFN5c3RlbXMiIH0sCVwKLSAgeyA3LCAiV2FuZ3Rlay9SZXhvbi9UZWNtYXIiIH0sCQlcCi0gIHsgOCwgIlNvbnkiIH0sCQkJCVwKLSAgeyA5LCAiQ2lwaGVyIERhdGEgUHJvZHVjdHMiIH0sCQlcCi0gIHsgMTAsICJJcndpbiBNYWduZXRpYyBTeXN0ZW1zIiB9LAkJXAotICB7IDExLCAiQnJhZW1hciIgfSwJCQkJXAotICB7IDEyLCAiVmVyYmF0aW0iIH0sCQkJCVwKLSAgeyAxMywgIkNvcmUgSW50ZXJuYXRpb25hbCIgfSwJCQlcCi0gIHsgMTQsICJFeGFieXRlIiB9LAkJCQlcCi0gIHsgMTUsICJUZWFjIiB9LAkJCQlcCi0gIHsgMTYsICJHaWdhdGVrIiB9LAkJCQlcCi0gIHsgMTcsICJDb21CeXRlIiB9LAkJCQlcCi0gIHsgMTgsICJQRVJURUMgTWVtb3JpZXMiIH0sCQkJXAotICB7IDE5LCAiQWl3YSIgfSwJCQkJXAotICB7IDcxLCAiQ29sb3JhZG8iIH0sCQkJCVwKLSAgeyA1NDYsICJJb21lZ2EgSW5jIiB9LAkJCVwKLX0KLQotI2VuZGlmIC8qIF9GVEFQRV9WRU5ET1JTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRhcGUuaCBiL2luY2x1ZGUvbGludXgvZnRhcGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U3MDM4Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0YXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotI2lmbmRlZiBfRlRBUEVfSAotI2RlZmluZSBfRlRBUEVfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgQmFzIExhYXJob3ZlbiwKLSAqICAgICAgICAgICAoQykgMTk5Ni0xOTk3IENsYXVzLUp1c3R1cyBIZWluZS4KLQotIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0KLSAqCi0gKiAkU291cmNlOiAvaG9tZXMvY3ZzL2Z0YXBlLXN0YWNrZWQvaW5jbHVkZS9saW51eC9mdGFwZS5oLHYgJAotICogJFJldmlzaW9uOiAxLjE3LjYuNCAkCi0gKiAkRGF0ZTogMTk5Ny8xMS8yNSAwMTo1Mjo1NCAkCi0gKgotICogICAgICBUaGlzIGZpbGUgY29udGFpbnMgZ2xvYmFsIGRlZmluaXRpb25zLCB0eXBlZGVmcyBhbmQgbWFjcm8ncwotICogICAgICBmb3IgdGhlIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyIGZvciBMaW51eC4KLSAqLwotCi0jZGVmaW5lIEZUQVBFX1ZFUlNJT04gImZ0YXBlIHYzLjA0ZCAyNS8xMS85NyIKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGlvLmg+Ci0KLSNkZWZpbmUgRlRfU0VDVE9SKHgpCQkoeCsxKQkvKiBzZWN0b3Igb2Zmc2V0IGludG8gcmVhbCBzZWN0b3IgKi8KLSNkZWZpbmUgRlRfU0VDVE9SX1NJWkUJCTEwMjQKLSNkZWZpbmUgRlRfU0VDVE9SU19QRVJfU0VHTUVOVAkgIDMyCi0jZGVmaW5lIEZUX0VDQ19TRUNUT1JTCQkgICAzCi0jZGVmaW5lIEZUX1NFR01FTlRfU0laRQkJKChGVF9TRUNUT1JTX1BFUl9TRUdNRU5UIC0gRlRfRUNDX1NFQ1RPUlMpICogRlRfU0VDVE9SX1NJWkUpCi0jZGVmaW5lIEZUX0JVRkZfU0laRSAgICAoRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAqIEZUX1NFQ1RPUl9TSVpFKQotCi0vKgotICogICBiaXRzIG9mIHRoZSBtaW5vciBkZXZpY2UgbnVtYmVyIHRoYXQgZGVmaW5lIGRyaXZlIHNlbGVjdGlvbgotICogICBtZXRob2RzLiBDb3VsZCBiZSB1c2VkIG9uZSBkYXkgdG8gYWNjZXNzIG11bHRpcGxlIHRhcGUKLSAqICAgZHJpdmVzIG9uIHRoZSBzYW1lIGNvbnRyb2xsZXIuCi0gKi8KLSNkZWZpbmUgRlRBUEVfU0VMX0EgICAgIDAKLSNkZWZpbmUgRlRBUEVfU0VMX0IgICAgIDEKLSNkZWZpbmUgRlRBUEVfU0VMX0MgICAgIDIKLSNkZWZpbmUgRlRBUEVfU0VMX0QgICAgIDMKLSNkZWZpbmUgRlRBUEVfU0VMX01BU0sgICAgIDMKLSNkZWZpbmUgRlRBUEVfU0VMKHVuaXQpICgodW5pdCkgJiBGVEFQRV9TRUxfTUFTSykKLSNkZWZpbmUgRlRBUEVfTk9fUkVXSU5EIDQJLyogbWFzayBmb3IgbWlub3IgbnIgKi8KLQotLyogdGhlIGZvbGxvd2luZyB0d28gbWF5IGJlIHJlcG9ydGVkIHdoZW4gTVRJT0NHRVQgaXMgcmVxdWVzdGVkIC4uLiAqLwotdHlwZWRlZiB1bmlvbiB7Ci0Jc3RydWN0IHsKLQkJX191OCBlcnJvcjsKLQkJX191OCBjb21tYW5kOwotCX0gZXJyb3I7Ci0JbG9uZyBzcGFjZTsKLX0gZnRfZHJpdmVfZXJyb3I7Ci10eXBlZGVmIHVuaW9uIHsKLQlzdHJ1Y3QgewotCQlfX3U4IGRyaXZlX3N0YXR1czsKLQkJX191OCBkcml2ZV9jb25maWc7Ci0JCV9fdTggdGFwZV9zdGF0dXM7Ci0JfSBzdGF0dXM7Ci0JbG9uZyBzcGFjZTsKLX0gZnRfZHJpdmVfc3RhdHVzOwotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jZGVmaW5lIEZUX1JRTV9ERUxBWSAgICAxMgotI2RlZmluZSBGVF9NSUxMSVNFQ09ORCAgMQotI2RlZmluZSBGVF9TRUNPTkQgICAgICAgMTAwMAotI2RlZmluZSBGVF9GT1JFVkVSICAgICAgLTEKLSNpZm5kZWYgSFoKLSNlcnJvciAiSFogdW5kZWZpbmVkLiIKLSNlbmRpZgotI2RlZmluZSBGVF9VU1BUICAgICAgICAgKDEwMDAwMDAvSFopIC8qIG1pY3Jvc2Vjb25kcyBwZXIgdGljayAqLwotCi0vKiBUaGlzIGRlZmluZXMgdGhlIG51bWJlciBvZiByZXRyaWVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIGFsbG93Ci0gKiBiZWZvcmUgZ2l2aW5nIHVwIChhbmQgbGV0dGluZyBhIGhpZ2hlciBsZXZlbCBoYW5kbGUgdGhlIGVycm9yKS4KLSAqLwotI2lmZGVmIFRFU1RJTkcKLSNkZWZpbmUgRlRfU09GVF9SRVRSSUVTIDEJICAgLyogbnVtYmVyIG9mIGxvdyBsZXZlbCByZXRyaWVzICovCi0jZGVmaW5lIEZUX1JFVFJJRVNfT05fRUNDX0VSUk9SIDMgIC8qIGVjYyBlcnJvciB3aGVuIGNvcnJlY3Rpbmcgc2VnbWVudCAqLwotI2Vsc2UKLSNkZWZpbmUgRlRfU09GVF9SRVRSSUVTIDYJICAgLyogbnVtYmVyIG9mIGxvdyBsZXZlbCByZXRyaWVzICh0cmlwbGUpICovCi0jZGVmaW5lIEZUX1JFVFJJRVNfT05fRUNDX0VSUk9SIDMgIC8qIGVjYyBlcnJvciB3aGVuIGNvcnJlY3Rpbmcgc2VnbWVudCAqLwotI2VuZGlmCi0KLSNpZm5kZWYgVEhFX0ZUQVBFX01BSU5UQUlORVIKLSNkZWZpbmUgVEhFX0ZUQVBFX01BSU5UQUlORVIgInRoZSBmdGFwZSBtYWludGFpbmVyIgotI2VuZGlmCi0KLS8qIEluaXRpYWxpemUgbWlzc2luZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgQ09ORklHX0ZUX05SX0JVRkZFUlMKLSMgZGVmaW5lIENPTkZJR19GVF9OUl9CVUZGRVJTIDMKLSNlbmRpZgotI2lmbmRlZiBDT05GSUdfRlRfRkRDX1RIUgotIyBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19USFIgOAotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19GVF9GRENfTUFYX1JBVEUKLSMgZGVmaW5lIENPTkZJR19GVF9GRENfTUFYX1JBVEUgMjAwMAotI2VuZGlmCi0jaWZuZGVmIENPTkZJR19GVF9GRENfQkFTRQotIyBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19CQVNFIDAKLSNlbmRpZgotI2lmbmRlZiBDT05GSUdfRlRfRkRDX0lSUQotIyBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19JUlEgIDAKLSNlbmRpZgotI2lmbmRlZiBDT05GSUdfRlRfRkRDX0RNQQotIyBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19ETUEgIDAKLSNlbmRpZgotCi0vKiBUdXJuIHNvbWUgYm9vbGVhbnMgaW50byBudW1iZXJzLgotICovCi0jaWZkZWYgQ09ORklHX0ZUX1BST0JFX0ZDMTAKLSMgdW5kZWYgQ09ORklHX0ZUX1BST0JFX0ZDMTAKLSMgZGVmaW5lIENPTkZJR19GVF9QUk9CRV9GQzEwIDEKLSNlbHNlCi0jIGRlZmluZSBDT05GSUdfRlRfUFJPQkVfRkMxMCAwCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfRlRfTUFDSDIKLSMgdW5kZWYgQ09ORklHX0ZUX01BQ0gyCi0jIGRlZmluZSBDT05GSUdfRlRfTUFDSDIgMQotI2Vsc2UKLSMgZGVmaW5lIENPTkZJR19GVF9NQUNIMiAwCi0jZW5kaWYKLQotLyogSW5zZXJ0IGRlZmF1bHQgc2V0dGluZ3MKLSAqLwotI2lmIENPTkZJR19GVF9QUk9CRV9GQzEwID09IDEKLSMgaWYgQ09ORklHX0ZUX0ZEQ19CQVNFID09IDAKLSMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0JBU0UKLSMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0JBU0UgMHgxODAKLSMgZW5kaWYKLSMgaWYgQ09ORklHX0ZUX0ZEQ19JUlEgPT0gMAotIyAgdW5kZWYgIENPTkZJR19GVF9GRENfSVJRCi0jICBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19JUlEgOQotIyBlbmRpZgotIyBpZiBDT05GSUdfRlRfRkRDX0RNQSA9PSAwCi0jICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19ETUEKLSMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0RNQSAzCi0jIGVuZGlmCi0jZWxpZiBDT05GSUdfRlRfTUFDSDIgPT0gMSAgICAvKiBDT05GSUdfRlRfUFJPQkVfRkMxMCA9PSAxICovCi0jIGlmIENPTkZJR19GVF9GRENfQkFTRSA9PSAwCi0jICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19CQVNFCi0jICBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19CQVNFIDB4MUUwCi0jIGVuZGlmCi0jIGlmIENPTkZJR19GVF9GRENfSVJRID09IDAKLSMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0lSUQotIyAgZGVmaW5lIENPTkZJR19GVF9GRENfSVJRIDYKLSMgZW5kaWYKLSMgaWYgQ09ORklHX0ZUX0ZEQ19ETUEgPT0gMAotIyAgdW5kZWYgIENPTkZJR19GVF9GRENfRE1BCi0jICBkZWZpbmUgQ09ORklHX0ZUX0ZEQ19ETUEgMgotIyBlbmRpZgotI2VsaWYgZGVmaW5lZChDT05GSUdfRlRfQUxUX0ZEQykgIC8qIENPTkZJR19GVF9NQUNIMiAqLwotIyBpZiBDT05GSUdfRlRfRkRDX0JBU0UgPT0gMAotIyAgdW5kZWYgIENPTkZJR19GVF9GRENfQkFTRQotIyAgZGVmaW5lIENPTkZJR19GVF9GRENfQkFTRSAweDM3MAotIyBlbmRpZgotIyBpZiBDT05GSUdfRlRfRkRDX0lSUSA9PSAwCi0jICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19JUlEKLSMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0lSUSA2Ci0jIGVuZGlmCi0jIGlmIENPTkZJR19GVF9GRENfRE1BID09IDAKLSMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0RNQQotIyAgZGVmaW5lIENPTkZJR19GVF9GRENfRE1BIDIKLSMgZW5kaWYKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDT05GSUdfRlRfQUxUX0ZEQyAqLwotIyBpZiBDT05GSUdfRlRfRkRDX0JBU0UgPT0gMAotIyAgdW5kZWYgIENPTkZJR19GVF9GRENfQkFTRQotIyAgZGVmaW5lIENPTkZJR19GVF9GRENfQkFTRSAweDNmMAotIyBlbmRpZgotIyBpZiBDT05GSUdfRlRfRkRDX0lSUSA9PSAwCi0jICB1bmRlZiAgQ09ORklHX0ZUX0ZEQ19JUlEKLSMgIGRlZmluZSBDT05GSUdfRlRfRkRDX0lSUSA2Ci0jIGVuZGlmCi0jIGlmIENPTkZJR19GVF9GRENfRE1BID09IDAKLSMgIHVuZGVmICBDT05GSUdfRlRfRkRDX0RNQQotIyAgZGVmaW5lIENPTkZJR19GVF9GRENfRE1BIDIKLSMgZW5kaWYKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFuZGFyZCBGREMgKi8KLQotLyogICAgICBzb21lIHVzZWZ1bCBtYWNybydzCi0gKi8KLSNkZWZpbmUgTlJfSVRFTVMoeCkgICAgIChpbnQpKHNpemVvZih4KS8gc2l6ZW9mKCp4KSkKLQotI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pY21wLmggYi9pbmNsdWRlL2xpbnV4L2ljbXAuaAppbmRleCA4NzhjZmU0Li4yNGRhNGZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ljbXAuaApAQCAtNjgsNyArNjgsNyBAQAogc3RydWN0IGljbXBoZHIgewogICBfX3U4CQl0eXBlOwogICBfX3U4CQljb2RlOwotICBfX2JlMTYJY2hlY2tzdW07CisgIF9fc3VtMTYJY2hlY2tzdW07CiAgIHVuaW9uIHsKIAlzdHJ1Y3QgewogCQlfX2JlMTYJaWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaAppbmRleCBjNzcxYTdkLi42OGQzNTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKQEAgLTcsMTcgKzcsMTcgQEAKIAogCV9fdTgJCWljbXA2X3R5cGU7CiAJX191OAkJaWNtcDZfY29kZTsKLQlfX3UxNgkJaWNtcDZfY2tzdW07CisJX19zdW0xNgkJaWNtcDZfY2tzdW07CiAKIAogCXVuaW9uIHsKLQkJX191MzIJCQl1bl9kYXRhMzJbMV07Ci0JCV9fdTE2CQkJdW5fZGF0YTE2WzJdOworCQlfX2JlMzIJCQl1bl9kYXRhMzJbMV07CisJCV9fYmUxNgkJCXVuX2RhdGExNlsyXTsKIAkJX191OAkJCXVuX2RhdGE4WzRdOwogCiAJCXN0cnVjdCBpY21wdjZfZWNobyB7Ci0JCQlfX3UxNgkJaWRlbnRpZmllcjsKLQkJCV9fdTE2CQlzZXF1ZW5jZTsKKwkJCV9fYmUxNgkJaWRlbnRpZmllcjsKKwkJCV9fYmUxNgkJc2VxdWVuY2U7CiAJCX0gdV9lY2hvOwogCiAgICAgICAgICAgICAgICAgc3RydWN0IGljbXB2Nl9uZF9hZHZ0IHsKQEAgLTUzLDcgKzUzLDcgQEAKICNlbHNlCiAjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCiAjZW5kaWYKLQkJCV9fdTE2CQlydF9saWZldGltZTsKKwkJCV9fYmUxNgkJcnRfbGlmZXRpbWU7CiAgICAgICAgICAgICAgICAgfSB1X25kX3JhOwogCiAJfSBpY21wNl9kYXRhdW47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAppbmRleCBiOTI1NTg1NC4uOTkzOTNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCkBAIC0xLDE3ICsxLDE5IEBACiAjaWZuZGVmIF9fTElOVVhfSUZfUEFDS0VUX0gKICNkZWZpbmUgX19MSU5VWF9JRl9QQUNLRVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHNvY2thZGRyX3BrdAogewogCXVuc2lnbmVkIHNob3J0IHNwa3RfZmFtaWx5OwogCXVuc2lnbmVkIGNoYXIgc3BrdF9kZXZpY2VbMTRdOwotCXVuc2lnbmVkIHNob3J0IHNwa3RfcHJvdG9jb2w7CisJX19iZTE2IHNwa3RfcHJvdG9jb2w7CiB9OwogCiBzdHJ1Y3Qgc29ja2FkZHJfbGwKIHsKIAl1bnNpZ25lZCBzaG9ydAlzbGxfZmFtaWx5OwotCXVuc2lnbmVkIHNob3J0CXNsbF9wcm90b2NvbDsKKwlfX2JlMTYJCXNsbF9wcm90b2NvbDsKIAlpbnQJCXNsbF9pZmluZGV4OwogCXVuc2lnbmVkIHNob3J0CXNsbF9oYXR5cGU7CiAJdW5zaWduZWQgY2hhcglzbGxfcGt0dHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCmluZGV4IGJlZjlmOGYuLjhkZTA3OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaApAQCAtMTksMTAgKzE5LDEwIEBACiB7CiAJY2hhcgkJCW5hbWVbSUZOQU1TSVpdOwogCWludAkJCWxpbms7Ci0JX191MTYJCQlpX2ZsYWdzOwotCV9fdTE2CQkJb19mbGFnczsKLQlfX3UzMgkJCWlfa2V5OwotCV9fdTMyCQkJb19rZXk7CisJX19iZTE2CQkJaV9mbGFnczsKKwlfX2JlMTYJCQlvX2ZsYWdzOworCV9fYmUzMgkJCWlfa2V5OworCV9fYmUzMgkJCW9fa2V5OwogCXN0cnVjdCBpcGhkcgkJaXBoOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaAppbmRleCAyMWRkNTY5Li45ZGJiNTI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lnbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lnbXAuaApAQCAtMzAsNyArMzAsNyBAQAogewogCV9fdTggdHlwZTsKIAlfX3U4IGNvZGU7CQkvKiBGb3IgbmV3ZXIgSUdNUCAqLwotCV9fYmUxNiBjc3VtOworCV9fc3VtMTYgY3N1bTsKIAlfX2JlMzIgZ3JvdXA7CiB9OwogCkBAIC0xMjcsNiArMTI3LDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAKIGV4dGVybiBpbnQgc3lzY3RsX2lnbXBfbWF4X21lbWJlcnNoaXBzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbi5oIGIvaW5jbHVkZS9saW51eC9pbi5oCmluZGV4IDI2MTk4NTkuLjE5MTJlN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2luLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAogICBJUFBST1RPX0NPTVAgICA9IDEwOCwgICAgICAgICAgICAgICAgLyogQ29tcHJlc3Npb24gSGVhZGVyIHByb3RvY29sICovCiAgIElQUFJPVE9fU0NUUCAgID0gMTMyLAkJLyogU3RyZWFtIENvbnRyb2wgVHJhbnNwb3J0IFByb3RvY29sCSovCisgIElQUFJPVE9fVURQTElURSA9IDEzNiwJLyogVURQLUxpdGUgKFJGQyAzODI4KQkJCSovCiAKICAgSVBQUk9UT19SQVcJID0gMjU1LAkJLyogUmF3IElQIHBhY2tldHMJCQkqLwogICBJUFBST1RPX01BWApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbjYuaCBiL2luY2x1ZGUvbGludXgvaW42LmgKaW5kZXggZjI4NjIxZi4uNGU4MzUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luNi5oCkBAIC01NCw3ICs1NCw3IEBACiBzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKIAl1bnNpZ25lZCBzaG9ydCBpbnQJc2luNl9mYW1pbHk7ICAgIC8qIEFGX0lORVQ2ICovCiAJX19iZTE2CQkJc2luNl9wb3J0OyAgICAgIC8qIFRyYW5zcG9ydCBsYXllciBwb3J0ICMgKi8KLQlfX3UzMgkJCXNpbjZfZmxvd2luZm87ICAvKiBJUHY2IGZsb3cgaW5mb3JtYXRpb24gKi8KKwlfX2JlMzIJCQlzaW42X2Zsb3dpbmZvOyAgLyogSVB2NiBmbG93IGluZm9ybWF0aW9uICovCiAJc3RydWN0IGluNl9hZGRyCQlzaW42X2FkZHI7ICAgICAgLyogSVB2NiBhZGRyZXNzICovCiAJX191MzIJCQlzaW42X3Njb3BlX2lkOyAgLyogc2NvcGUgaWQgKG5ldyBpbiBSRkMyNTUzKSAqLwogfTsKQEAgLTcyLDcgKzcyLDcgQEAKIHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcQogewogCXN0cnVjdCBpbjZfYWRkcglmbHJfZHN0OwotCV9fdTMyCWZscl9sYWJlbDsKKwlfX2JlMzIJZmxyX2xhYmVsOwogCV9fdTgJZmxyX2FjdGlvbjsKIAlfX3U4CWZscl9zaGFyZTsKIAlfX3UxNglmbHJfZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXQuaCBiL2luY2x1ZGUvbGludXgvaW5ldC5oCmluZGV4IGI3YzZkYTcuLjY3NWE3ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldC5oCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogZXh0ZXJuIF9fYmUzMiBpbl9hdG9uKGNvbnN0IGNoYXIgKnN0cik7Ci1leHRlcm4gaW50IGluNF9wdG9uKGNvbnN0IGNoYXIgKnNyYywgaW50IHNyY2xlbiwgdTggKmRzdCwgY2hhciBkZWxpbSwgY29uc3QgY2hhciAqKmVuZCk7Ci1leHRlcm4gaW50IGluNl9wdG9uKGNvbnN0IGNoYXIgKnNyYywgaW50IHNyY2xlbiwgdTggKmRzdCwgY2hhciBkZWxpbSwgY29uc3QgY2hhciAqKmVuZCk7CitleHRlcm4gaW50IGluNF9wdG9uKGNvbnN0IGNoYXIgKnNyYywgaW50IHNyY2xlbiwgdTggKmRzdCwgaW50IGRlbGltLCBjb25zdCBjaGFyICoqZW5kKTsKK2V4dGVybiBpbnQgaW42X3B0b24oY29uc3QgY2hhciAqc3JjLCBpbnQgc3JjbGVuLCB1OCAqZHN0LCBpbnQgZGVsaW0sIGNvbnN0IGNoYXIgKiplbmQpOwogI2VuZGlmCiAjZW5kaWYJLyogX0xJTlVYX0lORVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCA1YTBhYjA0Li5jMGY3YWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtMTI0LDEyICsxMjQsMTMgQEAKICAqCUNoZWNrIGlmIGEgbWFzayBpcyBhY2NlcHRhYmxlLgogICovCiAgCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYmFkX21hc2sodTMyIG1hc2ssIHUzMiBhZGRyKQorc3RhdGljIF9faW5saW5lX18gaW50IGJhZF9tYXNrKF9fYmUzMiBtYXNrLCBfX2JlMzIgYWRkcikKIHsKKwlfX3UzMiBobWFzazsKIAlpZiAoYWRkciAmIChtYXNrID0gfm1hc2spKQogCQlyZXR1cm4gMTsKLQltYXNrID0gbnRvaGwobWFzayk7Ci0JaWYgKG1hc2sgJiAobWFzaysxKSkKKwlobWFzayA9IG50b2hsKG1hc2spOworCWlmIChobWFzayAmIChobWFzaysxKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTAsMTEgKzE5MSwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaW5ldF9tYXNrX2xlbihfX3UzMiBtYXNrKQorc3RhdGljIF9faW5saW5lX18gaW50IGluZXRfbWFza19sZW4oX19iZTMyIG1hc2spCiB7Ci0JaWYgKCEobWFzayA9IG50b2hsKG1hc2spKSkKKwlfX3UzMiBobWFzayA9IG50b2hsKG1hc2spOworCWlmICghaG1hc2spCiAJCXJldHVybiAwOwotCXJldHVybiAzMiAtIGZmeih+bWFzayk7CisJcmV0dXJuIDMyIC0gZmZ6KH5obWFzayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcC5oIGIvaW5jbHVkZS9saW51eC9pcC5oCmluZGV4IGVjZWU5YmIuLjFkMzZiOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwLmgKQEAgLTk4LDcgKzk4LDcgQEAKIAlfX2JlMTYJZnJhZ19vZmY7CiAJX191OAl0dGw7CiAJX191OAlwcm90b2NvbDsKLQlfX2JlMTYJY2hlY2s7CisJX19zdW0xNgljaGVjazsKIAlfX2JlMzIJc2FkZHI7CiAJX19iZTMyCWRhZGRyOwogCS8qVGhlIG9wdGlvbnMgc3RhcnQgaGVyZS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKaW5kZXggNWMyM2FlYi4uYWYzZjRhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcDZfdHVubmVsLmgKQEAgLTI1LDcgKzI1LDcgQEAKIAlfX3U4IHByb3RvOwkJLyogdHVubmVsIHByb3RvY29sICovCiAJX191OCBlbmNhcF9saW1pdDsJLyogZW5jYXBzdWxhdGlvbiBsaW1pdCBmb3IgdHVubmVsICovCiAJX191OCBob3BfbGltaXQ7CQkvKiBob3AgbGltaXQgZm9yIHR1bm5lbCAqLwotCV9fdTMyIGZsb3dpbmZvOwkJLyogdHJhZmZpYyBjbGFzcyBhbmQgZmxvd2xhYmVsIGZvciB0dW5uZWwgKi8KKwlfX2JlMzIgZmxvd2luZm87CS8qIHRyYWZmaWMgY2xhc3MgYW5kIGZsb3dsYWJlbCBmb3IgdHVubmVsICovCiAJX191MzIgZmxhZ3M7CQkvKiB0dW5uZWwgZmxhZ3MgKi8KIAlzdHJ1Y3QgaW42X2FkZHIgbGFkZHI7CS8qIGxvY2FsIHR1bm5lbCBlbmQtcG9pbnQgYWRkcmVzcyAqLwogCXN0cnVjdCBpbjZfYWRkciByYWRkcjsJLyogcmVtb3RlIHR1bm5lbCBlbmQtcG9pbnQgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcHY2LmggYi9pbmNsdWRlL2xpbnV4L2lwdjYuaAppbmRleCA0ZjQzNWM1Li5mODI0MTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwdjYuaApAQCAtMjc0LDcgKzI3NCw3IEBACiAJc3RydWN0IGluNl9hZGRyCQkqc2FkZHJfY2FjaGU7CiAjZW5kaWYKIAotCV9fdTMyCQkJZmxvd19sYWJlbDsKKwlfX2JlMzIJCQlmbG93X2xhYmVsOwogCV9fdTMyCQkJZnJhZ19zaXplOwogCV9fczE2CQkJaG9wX2xpbWl0OwogCV9fczE2CQkJbWNhc3RfaG9wczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxjYXBpLmgKaW5kZXggODkxYmIyYy4uYWVhMzRlNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCkBAIC00Nyw2ICs0Nyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjZGVmaW5lCUtDSV9DT05UUlVQCTAJLyogYXJnOiBzdHJ1Y3QgY2FwaV9wcm9maWxlICovCiAjZGVmaW5lCUtDSV9DT05UUkRPV04JMQkvKiBhcmc6IE5VTEwgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaCBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAppbmRleCA5OTFhMzczLi5kMGU2YTU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCkBAIC0zOSw2ICszOSwxMCBAQAogCQkJCXdyaXRlX21pc2FsaWduOjE7CiB9OwogCitzdHJ1Y3QgbW1jX2V4dF9jc2QgeworCXVuc2lnbmVkIGludAkJaHNfbWF4X2R0cjsKK307CisKIHN0cnVjdCBzZF9zY3IgewogCXVuc2lnbmVkIGNoYXIJCXNkYV92c247CiAJdW5zaWduZWQgY2hhcgkJYnVzX3dpZHRoczsKQEAgLTQ2LDYgKzUwLDEwIEBACiAjZGVmaW5lIFNEX1NDUl9CVVNfV0lEVEhfNAkoMTw8MikKIH07CiAKK3N0cnVjdCBzZF9zd2l0Y2hfY2FwcyB7CisJdW5zaWduZWQgaW50CQloc19tYXhfZHRyOworfTsKKwogc3RydWN0IG1tY19ob3N0OwogCiAvKgpAQCAtNjIsMTIgKzcwLDE1IEBACiAjZGVmaW5lIE1NQ19TVEFURV9CQUQJCSgxPDwyKQkJLyogdW5yZWNvZ25pc2VkIGRldmljZSAqLwogI2RlZmluZSBNTUNfU1RBVEVfU0RDQVJECSgxPDwzKQkJLyogaXMgYW4gU0QgY2FyZCAqLwogI2RlZmluZSBNTUNfU1RBVEVfUkVBRE9OTFkJKDE8PDQpCQkvKiBjYXJkIGlzIHJlYWQtb25seSAqLworI2RlZmluZSBNTUNfU1RBVEVfSElHSFNQRUVECSgxPDw1KQkJLyogY2FyZCBpcyBpbiBoaWdoIHNwZWVkIG1vZGUgKi8KIAl1MzIJCQlyYXdfY2lkWzRdOwkvKiByYXcgY2FyZCBDSUQgKi8KIAl1MzIJCQlyYXdfY3NkWzRdOwkvKiByYXcgY2FyZCBDU0QgKi8KIAl1MzIJCQlyYXdfc2NyWzJdOwkvKiByYXcgY2FyZCBTQ1IgKi8KIAlzdHJ1Y3QgbW1jX2NpZAkJY2lkOwkJLyogY2FyZCBpZGVudGlmaWNhdGlvbiAqLwogCXN0cnVjdCBtbWNfY3NkCQljc2Q7CQkvKiBjYXJkIHNwZWNpZmljICovCisJc3RydWN0IG1tY19leHRfY3NkCWV4dF9jc2Q7CS8qIG1tYyB2NCBleHRlbmRlZCBjYXJkIHNwZWNpZmljICovCiAJc3RydWN0IHNkX3NjcgkJc2NyOwkJLyogZXh0cmEgU0QgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3Qgc2Rfc3dpdGNoX2NhcHMJc3dfY2FwczsJLyogc3dpdGNoIChDTUQ2KSBjYXBzICovCiB9OwogCiAjZGVmaW5lIG1tY19jYXJkX3ByZXNlbnQoYykJKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfUFJFU0VOVCkKQEAgLTc1LDEyICs4NiwxNCBAQAogI2RlZmluZSBtbWNfY2FyZF9iYWQoYykJCSgoYyktPnN0YXRlICYgTU1DX1NUQVRFX0JBRCkKICNkZWZpbmUgbW1jX2NhcmRfc2QoYykJCSgoYyktPnN0YXRlICYgTU1DX1NUQVRFX1NEQ0FSRCkKICNkZWZpbmUgbW1jX2NhcmRfcmVhZG9ubHkoYykJKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfUkVBRE9OTFkpCisjZGVmaW5lIG1tY19jYXJkX2hpZ2hzcGVlZChjKQkoKGMpLT5zdGF0ZSAmIE1NQ19TVEFURV9ISUdIU1BFRUQpCiAKICNkZWZpbmUgbW1jX2NhcmRfc2V0X3ByZXNlbnQoYykJKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1BSRVNFTlQpCiAjZGVmaW5lIG1tY19jYXJkX3NldF9kZWFkKGMpCSgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9ERUFEKQogI2RlZmluZSBtbWNfY2FyZF9zZXRfYmFkKGMpCSgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9CQUQpCiAjZGVmaW5lIG1tY19jYXJkX3NldF9zZChjKQkoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfU0RDQVJEKQogI2RlZmluZSBtbWNfY2FyZF9zZXRfcmVhZG9ubHkoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1JFQURPTkxZKQorI2RlZmluZSBtbWNfY2FyZF9zZXRfaGlnaHNwZWVkKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9ISUdIU1BFRUQpCiAKICNkZWZpbmUgbW1jX2NhcmRfbmFtZShjKQkoKGMpLT5jaWQucHJvZF9uYW1lKQogI2RlZmluZSBtbWNfY2FyZF9pZChjKQkJKChjKS0+ZGV2LmJ1c19pZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3Byb3RvY29sLmggYi9pbmNsdWRlL2xpbnV4L21tYy9wcm90b2NvbC5oCmluZGV4IDA4ZGVjOGQuLjJkY2U2MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3Byb3RvY29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvcHJvdG9jb2wuaApAQCAtMjUsMTQgKzI1LDE2IEBACiAjaWZuZGVmIE1NQ19NTUNfUFJPVE9DT0xfSAogI2RlZmluZSBNTUNfTU1DX1BST1RPQ09MX0gKIAotLyogU3RhbmRhcmQgTU1DIGNvbW1hbmRzICgzLjEpICAgICAgICAgICB0eXBlICBhcmd1bWVudCAgICAgcmVzcG9uc2UgKi8KKy8qIFN0YW5kYXJkIE1NQyBjb21tYW5kcyAoNC4xKSAgICAgICAgICAgdHlwZSAgYXJndW1lbnQgICAgIHJlc3BvbnNlICovCiAgICAvKiBjbGFzcyAxICovCiAjZGVmaW5lCU1NQ19HT19JRExFX1NUQVRFICAgICAgICAgMCAgIC8qIGJjICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNTUNfU0VORF9PUF9DT05EICAgICAgICAgIDEgICAvKiBiY3IgIFszMTowXSBPQ1IgICAgICAgICBSMyAgKi8KICNkZWZpbmUgTU1DX0FMTF9TRU5EX0NJRCAgICAgICAgICAyICAgLyogYmNyICAgICAgICAgICAgICAgICAgICAgUjIgICovCiAjZGVmaW5lIE1NQ19TRVRfUkVMQVRJVkVfQUREUiAgICAgMyAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgICAgICAgIFIxICAqLwogI2RlZmluZSBNTUNfU0VUX0RTUiAgICAgICAgICAgICAgIDQgICAvKiBiYyAgIFszMToxNl0gUkNBICAgICAgICAgICAgKi8KKyNkZWZpbmUgTU1DX1NXSVRDSCAgICAgICAgICAgICAgICA2ICAgLyogYWMgICBbMzE6MF0gU2VlIGJlbG93ICAgUjFiICovCiAjZGVmaW5lIE1NQ19TRUxFQ1RfQ0FSRCAgICAgICAgICAgNyAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgICAgICAgIFIxICAqLworI2RlZmluZSBNTUNfU0VORF9FWFRfQ1NEICAgICAgICAgIDggICAvKiBhZHRjICAgICAgICAgICAgICAgICAgICBSMSAgKi8KICNkZWZpbmUgTU1DX1NFTkRfQ1NEICAgICAgICAgICAgICA5ICAgLyogYWMgICBbMzE6MTZdIFJDQSAgICAgICAgUjIgICovCiAjZGVmaW5lIE1NQ19TRU5EX0NJRCAgICAgICAgICAgICAxMCAgIC8qIGFjICAgWzMxOjE2XSBSQ0EgICAgICAgIFIyICAqLwogI2RlZmluZSBNTUNfUkVBRF9EQVRfVU5USUxfU1RPUCAgMTEgICAvKiBhZHRjIFszMTowXSBkYWRyICAgICAgICBSMSAgKi8KQEAgLTgwLDYgKzgyLDcgQEAKICAgLyogY2xhc3MgOCAqLwogLyogVGhpcyBpcyBiYXNpY2FsbHkgdGhlIHNhbWUgY29tbWFuZCBhcyBmb3IgTU1DIHdpdGggc29tZSBxdWlya3MuICovCiAjZGVmaW5lIFNEX1NFTkRfUkVMQVRJVkVfQUREUiAgICAgMyAgIC8qIGJjciAgICAgICAgICAgICAgICAgICAgIFI2ICAqLworI2RlZmluZSBTRF9TV0lUQ0ggICAgICAgICAgICAgICAgIDYgICAvKiBhZHRjIFszMTowXSBTZWUgYmVsb3cgICBSMSAgKi8KIAogICAvKiBBcHBsaWNhdGlvbiBjb21tYW5kcyAqLwogI2RlZmluZSBTRF9BUFBfU0VUX0JVU19XSURUSCAgICAgIDYgICAvKiBhYyAgIFsxOjBdIGJ1cyB3aWR0aCAgICBSMSAgKi8KQEAgLTg4LDYgKzkxLDMwIEBACiAjZGVmaW5lIFNEX0FQUF9TRU5EX1NDUiAgICAgICAgICA1MSAgIC8qIGFkdGMgICAgICAgICAgICAgICAgICAgIFIxICAqLwogCiAvKgorICogTU1DX1NXSVRDSCBhcmd1bWVudCBmb3JtYXQ6CisgKgorICoJWzMxOjI2XSBBbHdheXMgMAorICoJWzI1OjI0XSBBY2Nlc3MgTW9kZQorICoJWzIzOjE2XSBMb2NhdGlvbiBvZiB0YXJnZXQgQnl0ZSBpbiBFWFRfQ1NECisgKglbMTU6MDhdIFZhbHVlIEJ5dGUKKyAqCVswNzowM10gQWx3YXlzIDAKKyAqCVswMjowMF0gQ29tbWFuZCBTZXQKKyAqLworCisvKgorICogU0RfU1dJVENIIGFyZ3VtZW50IGZvcm1hdDoKKyAqCisgKiAgICAgIFszMV0gQ2hlY2sgKDApIG9yIHN3aXRjaCAoMSkKKyAqICAgICAgWzMwOjI0XSBSZXNlcnZlZCAoMCkKKyAqICAgICAgWzIzOjIwXSBGdW5jdGlvbiBncm91cCA2CisgKiAgICAgIFsxOToxNl0gRnVuY3Rpb24gZ3JvdXAgNQorICogICAgICBbMTU6MTJdIEZ1bmN0aW9uIGdyb3VwIDQKKyAqICAgICAgWzExOjhdIEZ1bmN0aW9uIGdyb3VwIDMKKyAqICAgICAgWzc6NF0gRnVuY3Rpb24gZ3JvdXAgMgorICogICAgICBbMzowXSBGdW5jdGlvbiBncm91cCAxCisgKi8KKworLyoKICAgTU1DIHN0YXR1cyBpbiBSMQogICBUeXBlCiAgIAllIDogZXJyb3IgYml0CkBAIC0yMzAsMTMgKzI1Nyw1NCBAQAogCiAjZGVmaW5lIENTRF9TVFJVQ1RfVkVSXzFfMCAgMCAgICAgICAgICAgLyogVmFsaWQgZm9yIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDEuMCAtIDEuMiAqLwogI2RlZmluZSBDU0RfU1RSVUNUX1ZFUl8xXzEgIDEgICAgICAgICAgIC8qIFZhbGlkIGZvciBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAxLjQgLSAyLjIgKi8KLSNkZWZpbmUgQ1NEX1NUUlVDVF9WRVJfMV8yICAyICAgICAgICAgICAvKiBWYWxpZCBmb3Igc3lzdGVtIHNwZWNpZmljYXRpb24gMy4xICAgICAgICovCisjZGVmaW5lIENTRF9TVFJVQ1RfVkVSXzFfMiAgMiAgICAgICAgICAgLyogVmFsaWQgZm9yIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDMuMSAtIDMuMiAtIDMuMzEgLSA0LjAgLSA0LjEgKi8KKyNkZWZpbmUgQ1NEX1NUUlVDVF9FWFRfQ1NEICAzICAgICAgICAgICAvKiBWZXJzaW9uIGlzIGNvZGVkIGluIENTRF9TVFJVQ1RVUkUgaW4gRVhUX0NTRCAqLwogCiAjZGVmaW5lIENTRF9TUEVDX1ZFUl8wICAgICAgMCAgICAgICAgICAgLyogSW1wbGVtZW50cyBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAxLjAgLSAxLjIgKi8KICNkZWZpbmUgQ1NEX1NQRUNfVkVSXzEgICAgICAxICAgICAgICAgICAvKiBJbXBsZW1lbnRzIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDEuNCAqLwogI2RlZmluZSBDU0RfU1BFQ19WRVJfMiAgICAgIDIgICAgICAgICAgIC8qIEltcGxlbWVudHMgc3lzdGVtIHNwZWNpZmljYXRpb24gMi4wIC0gMi4yICovCi0jZGVmaW5lIENTRF9TUEVDX1ZFUl8zICAgICAgMyAgICAgICAgICAgLyogSW1wbGVtZW50cyBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAzLjEgKi8KKyNkZWZpbmUgQ1NEX1NQRUNfVkVSXzMgICAgICAzICAgICAgICAgICAvKiBJbXBsZW1lbnRzIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDMuMSAtIDMuMiAtIDMuMzEgKi8KKyNkZWZpbmUgQ1NEX1NQRUNfVkVSXzQgICAgICA0ICAgICAgICAgICAvKiBJbXBsZW1lbnRzIHN5c3RlbSBzcGVjaWZpY2F0aW9uIDQuMCAtIDQuMSAqLwogCisvKgorICogRVhUX0NTRCBmaWVsZHMKKyAqLworCisjZGVmaW5lIEVYVF9DU0RfQlVTX1dJRFRICTE4MwkvKiBSL1cgKi8KKyNkZWZpbmUgRVhUX0NTRF9IU19USU1JTkcJMTg1CS8qIFIvVyAqLworI2RlZmluZSBFWFRfQ1NEX0NBUkRfVFlQRQkxOTYJLyogUk8gKi8KKworLyoKKyAqIEVYVF9DU0QgZmllbGQgZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIEVYVF9DU0RfQ01EX1NFVF9OT1JNQUwJCSgxPDwwKQorI2RlZmluZSBFWFRfQ1NEX0NNRF9TRVRfU0VDVVJFCQkoMTw8MSkKKyNkZWZpbmUgRVhUX0NTRF9DTURfU0VUX0NQU0VDVVJFCSgxPDwyKQorCisjZGVmaW5lIEVYVF9DU0RfQ0FSRF9UWVBFXzI2CSgxPDwwKQkvKiBDYXJkIGNhbiBydW4gYXQgMjZNSHogKi8KKyNkZWZpbmUgRVhUX0NTRF9DQVJEX1RZUEVfNTIJKDE8PDEpCS8qIENhcmQgY2FuIHJ1biBhdCA1Mk1IeiAqLworCisjZGVmaW5lIEVYVF9DU0RfQlVTX1dJRFRIXzEJMAkvKiBDYXJkIGlzIGluIDEgYml0IG1vZGUgKi8KKyNkZWZpbmUgRVhUX0NTRF9CVVNfV0lEVEhfNAkxCS8qIENhcmQgaXMgaW4gNCBiaXQgbW9kZSAqLworI2RlZmluZSBFWFRfQ1NEX0JVU19XSURUSF84CTIJLyogQ2FyZCBpcyBpbiA4IGJpdCBtb2RlICovCisKKy8qCisgKiBNTUNfU1dJVENIIGFjY2VzcyBtb2RlcworICovCisKKyNkZWZpbmUgTU1DX1NXSVRDSF9NT0RFX0NNRF9TRVQJCTB4MDAJLyogQ2hhbmdlIHRoZSBjb21tYW5kIHNldCAqLworI2RlZmluZSBNTUNfU1dJVENIX01PREVfU0VUX0JJVFMJMHgwMQkvKiBTZXQgYml0cyB3aGljaCBhcmUgMSBpbiB2YWx1ZSAqLworI2RlZmluZSBNTUNfU1dJVENIX01PREVfQ0xFQVJfQklUUwkweDAyCS8qIENsZWFyIGJpdHMgd2hpY2ggYXJlIDEgaW4gdmFsdWUgKi8KKyNkZWZpbmUgTU1DX1NXSVRDSF9NT0RFX1dSSVRFX0JZVEUJMHgwMwkvKiBTZXQgdGFyZ2V0IHRvIHZhbHVlICovCisKKy8qCisgKiBTQ1IgZmllbGQgZGVmaW5pdGlvbnMKKyAqLworCisjZGVmaW5lIFNDUl9TUEVDX1ZFUl8wICAgICAgMCAgICAgICAgICAgLyogSW1wbGVtZW50cyBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAxLjAgLSAxLjAxICovCisjZGVmaW5lIFNDUl9TUEVDX1ZFUl8xICAgICAgMSAgICAgICAgICAgLyogSW1wbGVtZW50cyBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAxLjEwICovCisjZGVmaW5lIFNDUl9TUEVDX1ZFUl8yICAgICAgMiAgICAgICAgICAgLyogSW1wbGVtZW50cyBzeXN0ZW0gc3BlY2lmaWNhdGlvbiAyLjAwICovCiAKIC8qCiAgKiBTRCBidXMgd2lkdGhzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA5MjU4ZmZkLi5kMzNkZjI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTYsNyArNiw2IEBACiAgKiBSZXdyaXR0ZW4gYnkgUmljaGFyZCBIZW5kZXJzb24gPHJ0aEB0YW11LmVkdT4gRGVjIDE5OTYKICAqIFJld3JpdHRlbiBhZ2FpbiBieSBSdXN0eSBSdXNzZWxsLCAyMDAyCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KQEAgLTQxMSwxNyArNDEwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbW9kdWxlX3B1dChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCi17Ci0JaWYgKG1vZHVsZSkgewotCQl1bnNpZ25lZCBpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCQlsb2NhbF9kZWMoJm1vZHVsZS0+cmVmW2NwdV0uY291bnQpOwotCQkvKiBNYXliZSB0aGV5J3JlIHdhaXRpbmcgZm9yIHVzIHRvIGRyb3AgcmVmZXJlbmNlPyAqLwotCQlpZiAodW5saWtlbHkoIW1vZHVsZV9pc19saXZlKG1vZHVsZSkpKQotCQkJd2FrZV91cF9wcm9jZXNzKG1vZHVsZS0+d2FpdGVyKTsKLQkJcHV0X2NwdSgpOwotCX0KLX0KK2V4dGVybiB2b2lkIG1vZHVsZV9wdXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKTsKIAogI2Vsc2UgLyohQ09ORklHX01PRFVMRV9VTkxPQUQqLwogc3RhdGljIGlubGluZSBpbnQgdHJ5X21vZHVsZV9nZXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdjY0M3h4LmggYi9pbmNsdWRlL2xpbnV4L212NjQzeHguaAppbmRleCBlZGZhMDEyLi5hZmYyNWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L212NjQzeHguaAorKysgYi9pbmNsdWRlL2xpbnV4L212NjQzeHguaApAQCAtNzI0LDcgKzcyNCw3IEBACiAjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRF9SRUcocG9ydCkgICAgICAgICAgICAgKDB4MjQ3MCArIChwb3J0PDwxMCkpCiAjZGVmaW5lIE1WNjQzWFhfRVRIX1RYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRF9SRUcocG9ydCkgICAgICAgICAgICAgKDB4MjQ3NCArIChwb3J0PDwxMCkpCiAjZGVmaW5lIE1WNjQzWFhfRVRIX1JYX01JTklNQUxfRlJBTUVfU0laRV9SRUcocG9ydCkgICAgICAgICAgICAgICAgKDB4MjQ3YyArIChwb3J0PDwxMCkpCi0jZGVmaW5lIE1WNjQzWFhfRVRIX1JYX0RJU0NBUkRFRF9GUkFNRVNfQ09VTlRFUihwb3J0KSAgICAgICAgICAgICAgKDB4MjQ4NCArIChwb3J0PDwxMCkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfUlhfRElTQ0FSREVEX0ZSQU1FU19DT1VOVEVSKHBvcnQpICAgICAgICAgICAgICAoMHgyNDg0ICsgKHBvcnQ8PDEwKSkKICNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9ERUJVR18wX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDhjICsgKHBvcnQ8PDEwKSkKICNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9ERUJVR18xX1JFRyhwb3J0KSAgICAgICAgICAgICAgICAgICAgICAgICAoMHgyNDkwICsgKHBvcnQ8PDEwKSkKICNkZWZpbmUgTVY2NDNYWF9FVEhfUE9SVF9JTlRFUk5BTF9BRERSX0VSUk9SX1JFRyhwb3J0KSAgICAgICAgICAgICAoMHgyNDk0ICsgKHBvcnQ8PDEwKSkKQEAgLTExMzUsNyArMTEzNSw3IEBACiAjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVURQX1FVRVVFXzEJKDE8PDE5KQogI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1VEUF9RVUVVRV8yCSgxPDwyMCkKICNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9VRFBfUVVFVUVfMwkoKDE8PDIwKSB8ICgxPDwxOSkpCi0jZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVURQX1FVRVVFXzQJKCgxPDwyMSkKKyNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9VRFBfUVVFVUVfNAkoMTw8MjEpCiAjZGVmaW5lIE1WNjQzWFhfRVRIX0RFRkFVTFRfUlhfVURQX1FVRVVFXzUJKCgxPDwyMSkgfCAoMTw8MTkpKQogI2RlZmluZSBNVjY0M1hYX0VUSF9ERUZBVUxUX1JYX1VEUF9RVUVVRV82CSgoMTw8MjEpIHwgKDE8PDIwKSkKICNkZWZpbmUgTVY2NDNYWF9FVEhfREVGQVVMVF9SWF9VRFBfUVVFVUVfNwkoKDE8PDIxKSB8ICgxPDwyMCkgfCAoMTw8MTkpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXQuaCBiL2luY2x1ZGUvbGludXgvbmV0LmgKaW5kZXggMTVjNzMzYi4uNmYwZGZlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldC5oCkBAIC0xOTYsNyArMTk2LDcgQEAKIGV4dGVybiBpbnQJICAgICBuZXRfcmF0ZWxpbWl0KHZvaWQpOwogCiAjZGVmaW5lIG5ldF9yYW5kb20oKQkJcmFuZG9tMzIoKQotI2RlZmluZSBuZXRfc3JhbmRvbShzZWVkKQlzcmFuZG9tMzIoc2VlZCkKKyNkZWZpbmUgbmV0X3NyYW5kb20oc2VlZCkJc3JhbmRvbTMyKChfX2ZvcmNlIHUzMilzZWVkKQogCiBleHRlcm4gaW50ICAgCSAgICAga2VybmVsX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAogCQkJCSAgICBzdHJ1Y3Qga3ZlYyAqdmVjLCBzaXplX3QgbnVtLCBzaXplX3QgbGVuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDgzYjhjNGYuLmM1NzA4OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTM4LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KIAotc3RydWN0IGRpdmVydF9ibGs7CiBzdHJ1Y3Qgdmxhbl9ncm91cDsKIHN0cnVjdCBldGh0b29sX29wczsKIHN0cnVjdCBuZXRwb2xsX2luZm87CkBAIC02Nyw2ICs2NywxMCBAQAogI2RlZmluZSBORVRfUlhfQ05fSElHSAkJNCAgIC8qIFRoZSBzdG9ybSBpcyBoZXJlICovCiAjZGVmaW5lIE5FVF9SWF9CQUQJCTUgIC8qIHBhY2tldCBkcm9wcGVkIGR1ZSB0byBrZXJuZWwgZXJyb3IgKi8KIAorLyogTkVUX1hNSVRfQ04gaXMgc3BlY2lhbC4gSXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhpcyBwYWNrZXQgaXMgbG9zdC4gSXQKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2Ugd2lsbCBzb29uIGJlIGRyb3BwaW5nIHBhY2tldHMsIG9yIGFscmVhZHkgZHJvcHMKKyAqIHNvbWUgcGFja2V0cyBvZiB0aGUgc2FtZSBwcmlvcml0eTsgcHJvbXB0aW5nIHVzIHRvIHNlbmQgbGVzcyBhZ2dyZXNzaXZlbHkuICovCisjZGVmaW5lIG5ldF94bWl0X2V2YWwoZSkJKChlKSA9PSBORVRfWE1JVF9DTj8gMCA6IChlKSkKICNkZWZpbmUgbmV0X3htaXRfZXJybm8oZSkJKChlKSAhPSBORVRfWE1JVF9DTiA/IC1FTk9CVUZTIDogMCkKIAogI2VuZGlmCkBAIC0xOTMsNyArMTk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgTk9URTogIEZvciBWTEFOcywgdGhpcyB3aWxsIGJlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICBlbmNhcHVzbGF0ZWQgdHlwZS4gLS1CTEcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlpbnQJCWhoX2xlbjsJCS8qIGxlbmd0aCBvZiBoZWFkZXIgKi8KKwl1MTYJCWhoX2xlbjsJCS8qIGxlbmd0aCBvZiBoZWFkZXIgKi8KIAlpbnQJCSgqaGhfb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlyd2xvY2tfdAloaF9sb2NrOwogCkBAIC01MTcsMTEgKzUyMSw2IEBACiAJLyogYnJpZGdlIHN0dWZmICovCiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydAkqYnJfcG9ydDsKIAotI2lmZGVmIENPTkZJR19ORVRfRElWRVJUCi0JLyogdGhpcyB3aWxsIGdldCBpbml0aWFsaXplZCBhdCBlYWNoIGludGVyZmFjZSB0eXBlIGluaXQgcm91dGluZSAqLwotCXN0cnVjdCBkaXZlcnRfYmxrCSpkaXZlcnQ7Ci0jZW5kaWYgLyogQ09ORklHX05FVF9ESVZFUlQgKi8KLQogCS8qIGNsYXNzL25ldC9uYW1lIGVudHJ5ICovCiAJc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CiAJLyogc3BhY2UgZm9yIG9wdGlvbmFsIHN0YXRpc3RpY3MgYW5kIHdpcmVsZXNzIHN5c2ZzIGdyb3VwcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKaW5kZXggYjdlNjdkMS4uZDRjNGM1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCkBAIC0xMTcsNiArMTE3LDE2IEBACiBpbnQgbmZfcmVnaXN0ZXJfc29ja29wdChzdHJ1Y3QgbmZfc29ja29wdF9vcHMgKnJlZyk7CiB2b2lkIG5mX3VucmVnaXN0ZXJfc29ja29wdChzdHJ1Y3QgbmZfc29ja29wdF9vcHMgKnJlZyk7CiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisvKiBTeXNjdGwgcmVnaXN0cmF0aW9uICovCitzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKnBhdGgsCisJCQkJCQkgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKTsKK3ZvaWQgbmZfdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciwKKwkJCQlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSk7CitleHRlcm4gc3RydWN0IGN0bF90YWJsZSBuZl9uZXRfbmV0ZmlsdGVyX3N5c2N0bF9wYXRoW107CitleHRlcm4gc3RydWN0IGN0bF90YWJsZSBuZl9uZXRfaXB2NF9uZXRmaWx0ZXJfc3lzY3RsX3BhdGhbXTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2hvb2tzW05QUk9UT11bTkZfTUFYX0hPT0tTXTsKIAogLyogdGhvc2UgTkZfTE9HXyogZGVmaW5lcyBhbmQgc3RydWN0IG5mX2xvZ2luZm8gYXJlIGxlZ2FjeSBkZWZpbml0aW9zIHRoYXQgd2lsbApAQCAtMjgyLDE1ICsyOTIsMzEgQEAKICAgIFJldHVybnMgdHJ1ZSBvciBmYWxzZS4gKi8KIGV4dGVybiBpbnQgc2tiX21ha2Vfd3JpdGFibGUoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgd3JpdGFibGVfbGVuKTsKIAotZXh0ZXJuIHVfaW50MTZfdCBuZl9jc3VtX3VwZGF0ZSh1X2ludDMyX3Qgb2xkdmFsLCB1X2ludDMyX3QgbmV3dmFsLAotCQkJCXVfaW50MzJfdCBjc3VtKTsKLWV4dGVybiB1X2ludDE2X3QgbmZfcHJvdG9fY3N1bV91cGRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICB1X2ludDMyX3Qgb2xkdmFsLCB1X2ludDMyX3QgbmV3dmFsLAotCQkJCSAgICAgIHVfaW50MTZfdCBjc3VtLCBpbnQgcHNldWRvaGRyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jc3VtX3JlcGxhY2U0KF9fc3VtMTYgKnN1bSwgX19iZTMyIGZyb20sIF9fYmUzMiB0bykKK3sKKwlfX2JlMzIgZGlmZltdID0geyB+ZnJvbSwgdG8gfTsKKworCSpzdW0gPSBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKChjaGFyICopZGlmZiwgc2l6ZW9mKGRpZmYpLCB+Y3N1bV91bmZvbGQoKnN1bSkpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5mX2NzdW1fcmVwbGFjZTIoX19zdW0xNiAqc3VtLCBfX2JlMTYgZnJvbSwgX19iZTE2IHRvKQoreworCW5mX2NzdW1fcmVwbGFjZTQoc3VtLCAoX19mb3JjZSBfX2JlMzIpZnJvbSwgKF9fZm9yY2UgX19iZTMyKXRvKTsKK30KKworZXh0ZXJuIHZvaWQgbmZfcHJvdG9fY3N1bV9yZXBsYWNlNChfX3N1bTE2ICpzdW0sIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgX19iZTMyIGZyb20sIF9fYmUzMiB0bywgaW50IHBzZXVkb2hkcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9wcm90b19jc3VtX3JlcGxhY2UyKF9fc3VtMTYgKnN1bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBfX2JlMTYgZnJvbSwgX19iZTE2IHRvLCBpbnQgcHNldWRvaGRyKQoreworCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTQoc3VtLCBza2IsIChfX2ZvcmNlIF9fYmUzMilmcm9tLAorCQkJCShfX2ZvcmNlIF9fYmUzMil0bywgcHNldWRvaGRyKTsKK30KIAogc3RydWN0IG5mX2FmaW5mbyB7CiAJdW5zaWduZWQgc2hvcnQJZmFtaWx5OwotCXVuc2lnbmVkIGludAkoKmNoZWNrc3VtKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKKwlfX3N1bTE2CQkoKmNoZWNrc3VtKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKIAl2b2lkCQkoKnNhdmVyb3V0ZSkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgIHN0cnVjdCBuZl9pbmZvICppbmZvKTsKQEAgLTMwNSwxMiArMzMxLDEyIEBACiAJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShuZl9hZmluZm9bZmFtaWx5XSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitzdGF0aWMgaW5saW5lIF9fc3VtMTYKIG5mX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkgICAgdV9pbnQ4X3QgcHJvdG9jb2wsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmZfYWZpbmZvICphZmluZm87Ci0JdW5zaWduZWQgaW50IGNzdW0gPSAwOworCV9fc3VtMTYgY3N1bSA9IDA7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJYWZpbmZvID0gbmZfZ2V0X2FmaW5mbyhmYW1pbHkpOwpAQCAtMzMxLDcgKzM1Nyw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIG5mX25hdF9kZWNvZGVfc2Vzc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmFtaWx5KQogewotI2lmZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfTkFUX05FRURFRCkgfHwgZGVmaW5lZChDT05GSUdfTkZfTkFUX05FRURFRCkKIAl2b2lkICgqZGVjb2RlZm4pKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBmbG93aSAqKTsKIAogCWlmIChmYW1pbHkgPT0gQUZfSU5FVCAmJiAoZGVjb2RlZm4gPSBpcF9uYXRfZGVjb2RlX3Nlc3Npb24pICE9IE5VTEwpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKaW5kZXggMzEyYmQyZi4uNjMyODE3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZApAQCAtMTQsNiArMTQsNyBAQAogaGVhZGVyLXkgKz0geHRfRFNDUC5oCiBoZWFkZXIteSArPSB4dF9lc3AuaAogaGVhZGVyLXkgKz0geHRfaGVscGVyLmgKK2hlYWRlci15ICs9IHh0X2hhc2hsaW1pdC5oCiBoZWFkZXIteSArPSB4dF9sZW5ndGguaAogaGVhZGVyLXkgKz0geHRfbGltaXQuaAogaGVhZGVyLXkgKz0geHRfbWFjLmgKQEAgLTIxLDYgKzIyLDcgQEAKIGhlYWRlci15ICs9IHh0X01BUksuaAogaGVhZGVyLXkgKz0geHRfbXVsdGlwb3J0LmgKIGhlYWRlci15ICs9IHh0X05GUVVFVUUuaAoraGVhZGVyLXkgKz0geHRfTkZMT0cuaAogaGVhZGVyLXkgKz0geHRfcGt0dHlwZS5oCiBoZWFkZXIteSArPSB4dF9wb2xpY3kuaAogaGVhZGVyLXkgKz0geHRfcmVhbG0uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YzIyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfYW1hbmRhLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0FNQU5EQV9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfQU1BTkRBX0gKKy8qIEFNQU5EQSB0cmFja2luZy4gKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9hbWFuZGFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCQkgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCisJCQkJCSAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19BTUFOREFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oCmluZGV4IGFkNGE0MWMuLjgxNDUzZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKQEAgLTMsMTYgKzMsMTYgQEAKIC8qIEZUUCB0cmFja2luZy4gKi8KIAogLyogVGhpcyBlbnVtIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICovCi1lbnVtIGlwX2N0X2Z0cF90eXBlCitlbnVtIG5mX2N0X2Z0cF90eXBlCiB7CiAJLyogUE9SVCBjb21tYW5kIGZyb20gY2xpZW50ICovCi0JSVBfQ1RfRlRQX1BPUlQsCisJTkZfQ1RfRlRQX1BPUlQsCiAJLyogUEFTViByZXNwb25zZSBmcm9tIHNlcnZlciAqLwotCUlQX0NUX0ZUUF9QQVNWLAorCU5GX0NUX0ZUUF9QQVNWLAogCS8qIEVQUlQgY29tbWFuZCBmcm9tIGNsaWVudCAqLwotCUlQX0NUX0ZUUF9FUFJULAorCU5GX0NUX0ZUUF9FUFJULAogCS8qIEVQU1YgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgKi8KLQlJUF9DVF9GVFBfRVBTViwKKwlORl9DVF9GVFBfRVBTViwKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC0yMSwyMyArMjEsMjMgQEAKIAogI2RlZmluZSBOVU1fU0VRX1RPX1JFTUVNQkVSIDIKIC8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqLwotc3RydWN0IGlwX2N0X2Z0cF9tYXN0ZXIgeworc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIgewogCS8qIFZhbGlkIHNlcSBwb3NpdGlvbnMgZm9yIGNtZCBtYXRjaGluZyBhZnRlciBuZXdsaW5lICovCiAJdV9pbnQzMl90IHNlcV9hZnRfbmxbSVBfQ1RfRElSX01BWF1bTlVNX1NFUV9UT19SRU1FTUJFUl07CiAJLyogMCBtZWFucyBzZXFfbWF0Y2hfYWZ0X25sIG5vdCBzZXQgKi8KIAlpbnQgc2VxX2FmdF9ubF9udW1bSVBfQ1RfRElSX01BWF07CiB9OwogCi1zdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdDsKK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0OwogCiAvKiBGb3IgTkFUIHRvIGhvb2sgaW4gd2hlbiB3ZSBmaW5kIGEgcGFja2V0IHdoaWNoIGRlc2NyaWJlcyB3aGF0IG90aGVyCiAgKiBjb25uZWN0aW9uIHdlIHNob3VsZCBleHBlY3QuICovCi1leHRlcm4gdW5zaWduZWQgaW50ICgqaXBfbmF0X2Z0cF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCitleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X2Z0cF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCiAJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAotCQkJCSAgICAgICBlbnVtIGlwX2N0X2Z0cF90eXBlIHR5cGUsCisJCQkJICAgICAgIGVudW0gbmZfY3RfZnRwX3R5cGUgdHlwZSwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCi0JCQkJICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAsCisJCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsCiAJCQkJICAgICAgIHUzMiAqc2VxKTsKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTJmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oCkBAIC0wLDAgKzEsOTIgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19IMzIzX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19IMzIzX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19hc24xLmg+CisKKyNkZWZpbmUgUkFTX1BPUlQgMTcxOQorI2RlZmluZSBROTMxX1BPUlQgMTcyMAorI2RlZmluZSBIMzIzX1JUUF9DSEFOTkVMX01BWCA0CS8qIEF1ZGlvLCB2aWRlbywgRkFYIGFuZCBvdGhlciAqLworCisvKiBUaGlzIHN0cnVjdHVyZSBleGlzdHMgb25seSBvbmNlIHBlciBtYXN0ZXIgKi8KK3N0cnVjdCBuZl9jdF9oMzIzX21hc3RlciB7CisKKwkvKiBPcmlnaW5hbCBhbmQgTkFUZWQgUS45MzEgb3IgSC4yNDUgc2lnbmFsIHBvcnRzICovCisJX19iZTE2IHNpZ19wb3J0W0lQX0NUX0RJUl9NQVhdOworCisJLyogT3JpZ2luYWwgYW5kIE5BVGVkIFJUUCBwb3J0cyAqLworCV9fYmUxNiBydHBfcG9ydFtIMzIzX1JUUF9DSEFOTkVMX01BWF1bSVBfQ1RfRElSX01BWF07CisKKwl1bmlvbiB7CisJCS8qIFJBUyBjb25uZWN0aW9uIHRpbWVvdXQgKi8KKwkJdV9pbnQzMl90IHRpbWVvdXQ7CisKKwkJLyogTmV4dCBUUEtUIGxlbmd0aCAoZm9yIHNlcGFyYXRlIFRQS1QgaGVhZGVyIGFuZCBkYXRhKSAqLworCQl1X2ludDE2X3QgdHBrdF9sZW5bSVBfQ1RfRElSX01BWF07CisJfTsKK307CisKK3N0cnVjdCBuZl9jb25uOworCitleHRlcm4gaW50IGdldF9oMjI1X2FkZHIoc3RydWN0IG5mX2Nvbm4gKmN0LCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLCBfX2JlMTYgKnBvcnQpOworZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2gyNDVfZXhwZWN0KHN0cnVjdCBuZl9jb25uICpuZXcsCisJCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CitleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfcTkzMV9leHBlY3Qoc3RydWN0IG5mX2Nvbm4gKm5ldywKKwkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKK2V4dGVybiBpbnQgKCpzZXRfaDI0NV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJCSAgdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgKmFkZHIsCisJCQkJICBfX2JlMTYgcG9ydCk7CitleHRlcm4gaW50ICgqc2V0X2gyMjVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqdGFkZHIsCisJCQkJICB1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyAqYWRkciwKKwkJCQkgIF9fYmUxNiBwb3J0KTsKK2V4dGVybiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCBpbnQgY291bnQpOworZXh0ZXJuIGludCAoKnNldF9yYXNfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwKKwkJCQkgVHJhbnNwb3J0QWRkcmVzcyAqdGFkZHIsIGludCBjb3VudCk7CitleHRlcm4gaW50ICgqbmF0X3J0cF9ydGNwX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICp0YWRkciwKKwkJCQkgX19iZTE2IHBvcnQsIF9fYmUxNiBydHBfcG9ydCwKKwkJCQkgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0cF9leHAsCisJCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cCk7CitleHRlcm4gaW50ICgqbmF0X3QxMjBfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCBfX2JlMTYgcG9ydCwKKwkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CitleHRlcm4gaW50ICgqbmF0X2gyNDVfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgX19iZTE2IHBvcnQsCisJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOworZXh0ZXJuIGludCAoKm5hdF9jYWxsZm9yd2FyZGluZ19ob29rKSAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICAgICAgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJCSAgICAgICBfX2JlMTYgcG9ydCwKKwkJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CitleHRlcm4gaW50ICgqbmF0X3E5MzFfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJICAgICBpbnQgaWR4LCBfX2JlMTYgcG9ydCwKKwkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuaAppbmRleCBjNmU5YTBiLi44ZGFiNTk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmggLSBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMwotICogCQkJICAgICAgCSAgICAgY29ubnRyYWNrL05BVCBtb2R1bGUuCisgKiBpcF9jb25udHJhY2tfaDMyM19hc24xLmggLSBCRVIgYW5kIFBFUiBkZWNvZGluZyBsaWJyYXJ5IGZvciBILjMyMworICogCQkJICAgICAgY29ubnRyYWNrL05BVCBtb2R1bGUuCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA2IGJ5IEppbmcgTWluIFpoYW8gPHpoYW9qaW5nbWluQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KICAqCkBAIC0zNCwxMyArMzQsMTMgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBfSVBfQ09OTlRSQUNLX0hFTFBFUl9IMzIzX0FTTjFfSF8KLSNkZWZpbmUgX0lQX0NPTk5UUkFDS19IRUxQRVJfSDMyM19BU04xX0hfCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfSEVMUEVSX0gzMjNfQVNOMV9IXworI2RlZmluZSBfTkZfQ09OTlRSQUNLX0hFTFBFUl9IMzIzX0FTTjFfSF8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBILjMyMyBUeXBlcwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgiCisjaW5jbHVkZSAibmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgewogCWVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuaApyZW5hbWUgdG8gaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuaAppbmRleCAzZDRhNzczLi4zOGQ3NGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmgKQEAgLTEwLDYgKzEwLDExIEBACiAJdW5zaWduZWQgaXA7CiB9IFRyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzOwogCit0eXBlZGVmIHN0cnVjdCBUcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3MgewkvKiBTRVFVRU5DRSAqLworCWludCBvcHRpb25zOwkJLyogTm8gdXNlICovCisJdW5zaWduZWQgaXA2OworfSBUcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3M7CisKIHR5cGVkZWYgc3RydWN0IFRyYW5zcG9ydEFkZHJlc3MgewkvKiBDSE9JQ0UgKi8KIAllbnVtIHsKIAkJZVRyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzLApAQCAtMjIsNiArMjcsNyBAQAogCX0gY2hvaWNlOwogCXVuaW9uIHsKIAkJVHJhbnNwb3J0QWRkcmVzc19pcEFkZHJlc3MgaXBBZGRyZXNzOworCQlUcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3MgaXA2QWRkcmVzczsKIAl9OwogfSBUcmFuc3BvcnRBZGRyZXNzOwogCkBAIC05Myw2ICs5OSwxMSBAQAogCXVuc2lnbmVkIG5ldHdvcms7CiB9IFVuaWNhc3RBZGRyZXNzX2lQQWRkcmVzczsKIAordHlwZWRlZiBzdHJ1Y3QgVW5pY2FzdEFkZHJlc3NfaVA2QWRkcmVzcyB7CS8qIFNFUVVFTkNFICovCisJaW50IG9wdGlvbnM7CQkvKiBObyB1c2UgKi8KKwl1bnNpZ25lZCBuZXR3b3JrOworfSBVbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzOworCiB0eXBlZGVmIHN0cnVjdCBVbmljYXN0QWRkcmVzcyB7CS8qIENIT0lDRSAqLwogCWVudW0gewogCQllVW5pY2FzdEFkZHJlc3NfaVBBZGRyZXNzLApAQCAtMTA1LDYgKzExNiw3IEBACiAJfSBjaG9pY2U7CiAJdW5pb24gewogCQlVbmljYXN0QWRkcmVzc19pUEFkZHJlc3MgaVBBZGRyZXNzOworCQlVbmljYXN0QWRkcmVzc19pUDZBZGRyZXNzIGlQNkFkZHJlc3M7CiAJfTsKIH0gVW5pY2FzdEFkZHJlc3M7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWI2YjgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19JUkNfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0lSQ19ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgSVJDX1BPUlQJNjY2NworCitleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X2lyY19ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19JUkNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwNDllYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmgKQEAgLTAsMCArMSwzMjEgQEAKKy8qIFBQVFAgY29uc3RhbnRzIGFuZCBzdHJ1Y3RzICovCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfUFBUUF9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfUFBUUF9ICisKKy8qIHN0YXRlIG9mIHRoZSBjb250cm9sIHNlc3Npb24gKi8KK2VudW0gcHB0cF9jdHJsc2Vzc19zdGF0ZSB7CisJUFBUUF9TRVNTSU9OX05PTkUsCQkJLyogbm8gc2Vzc2lvbiBwcmVzZW50ICovCisJUFBUUF9TRVNTSU9OX0VSUk9SLAkJCS8qIHNvbWUgc2Vzc2lvbiBlcnJvciAqLworCVBQVFBfU0VTU0lPTl9TVE9QUkVRLAkJCS8qIHN0b3Bfc2VzcyByZXF1ZXN0IHNlZW4gKi8KKwlQUFRQX1NFU1NJT05fUkVRVUVTVEVELAkJCS8qIHN0YXJ0X3Nlc3MgcmVxdWVzdCBzZWVuICovCisJUFBUUF9TRVNTSU9OX0NPTkZJUk1FRCwJCQkvKiBzZXNzaW9uIGVzdGFibGlzaGVkICovCit9OworCisvKiBzdGF0ZSBvZiB0aGUgY2FsbCBpbnNpZGUgdGhlIGNvbnRyb2wgc2Vzc2lvbiAqLworZW51bSBwcHRwX2N0cmxjYWxsX3N0YXRlIHsKKwlQUFRQX0NBTExfTk9ORSwKKwlQUFRQX0NBTExfRVJST1IsCisJUFBUUF9DQUxMX09VVF9SRVEsCisJUFBUUF9DQUxMX09VVF9DT05GLAorCVBQVFBfQ0FMTF9JTl9SRVEsCisJUFBUUF9DQUxMX0lOX1JFUCwKKwlQUFRQX0NBTExfSU5fQ09ORiwKKwlQUFRQX0NBTExfQ0xFQVJfUkVRLAorfTsKKworLyogY29ubnRyYWNrIHByaXZhdGUgZGF0YSAqLworc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyIHsKKwllbnVtIHBwdHBfY3RybHNlc3Nfc3RhdGUgc3N0YXRlOwkvKiBzZXNzaW9uIHN0YXRlICovCisJZW51bSBwcHRwX2N0cmxjYWxsX3N0YXRlIGNzdGF0ZTsJLyogY2FsbCBzdGF0ZSAqLworCV9fYmUxNiBwYWNfY2FsbF9pZDsJCQkvKiBjYWxsIGlkIG9mIFBBQyAqLworCV9fYmUxNiBwbnNfY2FsbF9pZDsJCQkvKiBjYWxsIGlkIG9mIFBOUyAqLworCisJLyogaW4gcHJlLTIuNi4xMSB0aGlzIHVzZWQgdG8gYmUgcGVyLWV4cGVjdC4gTm93IGl0IGlzIHBlci1jb25udHJhY2sKKwkgKiBhbmQgdGhlcmVmb3JlIGltcG9zZXMgYSBmaXhlZCBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIG1hcHMgKi8KKwlzdHJ1Y3QgbmZfY3RfZ3JlX2tleW1hcCAqa2V5bWFwW0lQX0NUX0RJUl9NQVhdOworfTsKKworc3RydWN0IG5mX25hdF9wcHRwIHsKKwlfX2JlMTYgcG5zX2NhbGxfaWQ7CQkJLyogTkFUJ2VkIFBOUyBjYWxsIGlkICovCisJX19iZTE2IHBhY19jYWxsX2lkOwkJCS8qIE5BVCdlZCBQQUMgY2FsbCBpZCAqLworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2RlZmluZSBQUFRQX0NPTlRST0xfUE9SVAkxNzIzCisKKyNkZWZpbmUgUFBUUF9QQUNLRVRfQ09OVFJPTAkxCisjZGVmaW5lIFBQVFBfUEFDS0VUX01HTVQJMgorCisjZGVmaW5lIFBQVFBfTUFHSUNfQ09PS0lFCTB4MWEyYjNjNGQKKworc3RydWN0IHBwdHBfcGt0X2hkciB7CisJX191MTYJcGFja2V0TGVuZ3RoOworCV9fYmUxNglwYWNrZXRUeXBlOworCV9fYmUzMgltYWdpY0Nvb2tpZTsKK307CisKKy8qIFBwdHBDb250cm9sTWVzc2FnZVR5cGUgdmFsdWVzICovCisjZGVmaW5lIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVFVRVNUCTEKKyNkZWZpbmUgUFBUUF9TVEFSVF9TRVNTSU9OX1JFUExZCTIKKyNkZWZpbmUgUFBUUF9TVE9QX1NFU1NJT05fUkVRVUVTVAkzCisjZGVmaW5lIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZCQk0CisjZGVmaW5lIFBQVFBfRUNIT19SRVFVRVNUCQk1CisjZGVmaW5lIFBQVFBfRUNIT19SRVBMWQkJCTYKKyNkZWZpbmUgUFBUUF9PVVRfQ0FMTF9SRVFVRVNUCQk3CisjZGVmaW5lIFBQVFBfT1VUX0NBTExfUkVQTFkJCTgKKyNkZWZpbmUgUFBUUF9JTl9DQUxMX1JFUVVFU1QJCTkKKyNkZWZpbmUgUFBUUF9JTl9DQUxMX1JFUExZCQkxMAorI2RlZmluZSBQUFRQX0lOX0NBTExfQ09OTkVDVAkJMTEKKyNkZWZpbmUgUFBUUF9DQUxMX0NMRUFSX1JFUVVFU1QJCTEyCisjZGVmaW5lIFBQVFBfQ0FMTF9ESVNDT05ORUNUX05PVElGWQkxMworI2RlZmluZSBQUFRQX1dBTl9FUlJPUl9OT1RJRlkJCTE0CisjZGVmaW5lIFBQVFBfU0VUX0xJTktfSU5GTwkJMTUKKworI2RlZmluZSBQUFRQX01TR19NQVgJCQkxNQorCisvKiBQcHRwR2VuZXJhbEVycm9yIHZhbHVlcyAqLworI2RlZmluZSBQUFRQX0VSUk9SX0NPREVfTk9ORQkJMAorI2RlZmluZSBQUFRQX05PVF9DT05ORUNURUQJCTEKKyNkZWZpbmUgUFBUUF9CQURfRk9STUFUCQkJMgorI2RlZmluZSBQUFRQX0JBRF9WQUxVRQkJCTMKKyNkZWZpbmUgUFBUUF9OT19SRVNPVVJDRQkJNAorI2RlZmluZSBQUFRQX0JBRF9DQUxMSUQJCQk1CisjZGVmaW5lIFBQVFBfUkVNT1ZFX0RFVklDRV9FUlJPUgk2CisKK3N0cnVjdCBQcHRwQ29udHJvbEhlYWRlciB7CisJX19iZTE2CW1lc3NhZ2VUeXBlOworCV9fdTE2CXJlc2VydmVkOworfTsKKworLyogRnJhbWluZ0NhcGFiaWxpdHkgQml0bWFwIFZhbHVlcyAqLworI2RlZmluZSBQUFRQX0ZSQU1FX0NBUF9BU1lOQwkJMHgxCisjZGVmaW5lIFBQVFBfRlJBTUVfQ0FQX1NZTkMJCTB4MgorCisvKiBCZWFyZXJDYXBhYmlsaXR5IEJpdG1hcCBWYWx1ZXMgKi8KKyNkZWZpbmUgUFBUUF9CRUFSRVJfQ0FQX0FOQUxPRwkJMHgxCisjZGVmaW5lIFBQVFBfQkVBUkVSX0NBUF9ESUdJVEFMCQkweDIKKworc3RydWN0IFBwdHBTdGFydFNlc3Npb25SZXF1ZXN0IHsKKwlfX2JlMTYJcHJvdG9jb2xWZXJzaW9uOworCV9fdTE2CXJlc2VydmVkMTsKKwlfX2JlMzIJZnJhbWluZ0NhcGFiaWxpdHk7CisJX19iZTMyCWJlYXJlckNhcGFiaWxpdHk7CisJX19iZTE2CW1heENoYW5uZWxzOworCV9fYmUxNglmaXJtd2FyZVJldmlzaW9uOworCV9fdTgJaG9zdE5hbWVbNjRdOworCV9fdTgJdmVuZG9yU3RyaW5nWzY0XTsKK307CisKKy8qIFBwdHBTdGFydFNlc3Npb25SZXN1bHRDb2RlIFZhbHVlcyAqLworI2RlZmluZSBQUFRQX1NUQVJUX09LCQkJMQorI2RlZmluZSBQUFRQX1NUQVJUX0dFTkVSQUxfRVJST1IJMgorI2RlZmluZSBQUFRQX1NUQVJUX0FMUkVBRFlfQ09OTkVDVEVECTMKKyNkZWZpbmUgUFBUUF9TVEFSVF9OT1RfQVVUSE9SSVpFRAk0CisjZGVmaW5lIFBQVFBfU1RBUlRfVU5LTk9XTl9QUk9UT0NPTAk1CisKK3N0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVwbHkgeworCV9fYmUxNglwcm90b2NvbFZlcnNpb247CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX2JlMzIJZnJhbWluZ0NhcGFiaWxpdHk7CisJX19iZTMyCWJlYXJlckNhcGFiaWxpdHk7CisJX19iZTE2CW1heENoYW5uZWxzOworCV9fYmUxNglmaXJtd2FyZVJldmlzaW9uOworCV9fdTgJaG9zdE5hbWVbNjRdOworCV9fdTgJdmVuZG9yU3RyaW5nWzY0XTsKK307CisKKy8qIFBwdHBTdG9wUmVhc29ucyAqLworI2RlZmluZSBQUFRQX1NUT1BfTk9ORQkJCTEKKyNkZWZpbmUgUFBUUF9TVE9QX1BST1RPQ09MCQkyCisjZGVmaW5lIFBQVFBfU1RPUF9MT0NBTF9TSFVURE9XTgkzCisKK3N0cnVjdCBQcHRwU3RvcFNlc3Npb25SZXF1ZXN0IHsKKwlfX3U4CXJlYXNvbjsKKwlfX3U4CXJlc2VydmVkMTsKKwlfX3UxNglyZXNlcnZlZDI7Cit9OworCisvKiBQcHRwU3RvcFNlc3Npb25SZXN1bHRDb2RlICovCisjZGVmaW5lIFBQVFBfU1RPUF9PSwkJCTEKKyNkZWZpbmUgUFBUUF9TVE9QX0dFTkVSQUxfRVJST1IJCTIKKworc3RydWN0IFBwdHBTdG9wU2Vzc2lvblJlcGx5IHsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworCV9fdTE2CXJlc2VydmVkMTsKK307CisKK3N0cnVjdCBQcHRwRWNob1JlcXVlc3QgeworCV9fYmUzMiBpZGVudE51bWJlcjsKK307CisKKy8qIFBwdHBFY2hvUmVwbHlSZXN1bHRDb2RlICovCisjZGVmaW5lIFBQVFBfRUNIT19PSwkJCTEKKyNkZWZpbmUgUFBUUF9FQ0hPX0dFTkVSQUxfRVJST1IJCTIKKworc3RydWN0IFBwdHBFY2hvUmVwbHkgeworCV9fYmUzMglpZGVudE51bWJlcjsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworCV9fdTE2CXJlc2VydmVkOworfTsKKworLyogUHB0cEZyYW1pbmdUeXBlICovCisjZGVmaW5lIFBQVFBfQVNZTkNfRlJBTUlORwkJMQorI2RlZmluZSBQUFRQX1NZTkNfRlJBTUlORwkJMgorI2RlZmluZSBQUFRQX0RPTlRfQ0FSRV9GUkFNSU5HCQkzCisKKy8qIFBwdHBDYWxsQmVhcmVyVHlwZSAqLworI2RlZmluZSBQUFRQX0FOQUxPR19UWVBFCQkxCisjZGVmaW5lIFBQVFBfRElHSVRBTF9UWVBFCQkyCisjZGVmaW5lIFBQVFBfRE9OVF9DQVJFX0JFQVJFUl9UWVBFCTMKKworc3RydWN0IFBwdHBPdXRDYWxsUmVxdWVzdCB7CisJX19iZTE2CWNhbGxJRDsKKwlfX2JlMTYJY2FsbFNlcmlhbE51bWJlcjsKKwlfX2JlMzIJbWluQlBTOworCV9fYmUzMgltYXhCUFM7CisJX19iZTMyCWJlYXJlclR5cGU7CisJX19iZTMyCWZyYW1pbmdUeXBlOworCV9fYmUxNglwYWNrZXRXaW5kb3c7CisJX19iZTE2CXBhY2tldFByb2NEZWxheTsKKwlfX2JlMTYJcGhvbmVOdW1iZXJMZW5ndGg7CisJX191MTYJcmVzZXJ2ZWQxOworCV9fdTgJcGhvbmVOdW1iZXJbNjRdOworCV9fdTgJc3ViQWRkcmVzc1s2NF07Cit9OworCisvKiBQcHRwQ2FsbFJlc3VsdENvZGUgKi8KKyNkZWZpbmUgUFBUUF9PVVRDQUxMX0NPTk5FQ1QJCTEKKyNkZWZpbmUgUFBUUF9PVVRDQUxMX0dFTkVSQUxfRVJST1IJMgorI2RlZmluZSBQUFRQX09VVENBTExfTk9fQ0FSUklFUgkJMworI2RlZmluZSBQUFRQX09VVENBTExfQlVTWQkJNAorI2RlZmluZSBQUFRQX09VVENBTExfTk9fRElBTF9UT05FCTUKKyNkZWZpbmUgUFBUUF9PVVRDQUxMX1RJTUVPVVQJCTYKKyNkZWZpbmUgUFBUUF9PVVRDQUxMX0RPTlRfQUNDRVBUCTcKKworc3RydWN0IFBwdHBPdXRDYWxsUmVwbHkgeworCV9fYmUxNgljYWxsSUQ7CisJX19iZTE2CXBlZXJzQ2FsbElEOworCV9fdTgJcmVzdWx0Q29kZTsKKwlfX3U4CWdlbmVyYWxFcnJvckNvZGU7CisJX19iZTE2CWNhdXNlQ29kZTsKKwlfX2JlMzIJY29ubmVjdFNwZWVkOworCV9fYmUxNglwYWNrZXRXaW5kb3c7CisJX19iZTE2CXBhY2tldFByb2NEZWxheTsKKwlfX2JlMzIJcGh5c0NoYW5uZWxJRDsKK307CisKK3N0cnVjdCBQcHRwSW5DYWxsUmVxdWVzdCB7CisJX19iZTE2CWNhbGxJRDsKKwlfX2JlMTYJY2FsbFNlcmlhbE51bWJlcjsKKwlfX2JlMzIJY2FsbEJlYXJlclR5cGU7CisJX19iZTMyCXBoeXNDaGFubmVsSUQ7CisJX19iZTE2CWRpYWxlZE51bWJlckxlbmd0aDsKKwlfX2JlMTYJZGlhbGluZ051bWJlckxlbmd0aDsKKwlfX3U4CWRpYWxlZE51bWJlcls2NF07CisJX191OAlkaWFsaW5nTnVtYmVyWzY0XTsKKwlfX3U4CXN1YkFkZHJlc3NbNjRdOworfTsKKworLyogUHB0cEluQ2FsbFJlc3VsdENvZGUgKi8KKyNkZWZpbmUgUFBUUF9JTkNBTExfQUNDRVBUCQkxCisjZGVmaW5lIFBQVFBfSU5DQUxMX0dFTkVSQUxfRVJST1IJMgorI2RlZmluZSBQUFRQX0lOQ0FMTF9ET05UX0FDQ0VQVAkJMworCitzdHJ1Y3QgUHB0cEluQ2FsbFJlcGx5IHsKKwlfX2JlMTYJY2FsbElEOworCV9fYmUxNglwZWVyc0NhbGxJRDsKKwlfX3U4CXJlc3VsdENvZGU7CisJX191OAlnZW5lcmFsRXJyb3JDb2RlOworCV9fYmUxNglwYWNrZXRXaW5kb3c7CisJX19iZTE2CXBhY2tldFByb2NEZWxheTsKKwlfX3UxNglyZXNlcnZlZDsKK307CisKK3N0cnVjdCBQcHRwSW5DYWxsQ29ubmVjdGVkIHsKKwlfX2JlMTYJcGVlcnNDYWxsSUQ7CisJX191MTYJcmVzZXJ2ZWQ7CisJX19iZTMyCWNvbm5lY3RTcGVlZDsKKwlfX2JlMTYJcGFja2V0V2luZG93OworCV9fYmUxNglwYWNrZXRQcm9jRGVsYXk7CisJX19iZTMyCWNhbGxGcmFtaW5nVHlwZTsKK307CisKK3N0cnVjdCBQcHRwQ2xlYXJDYWxsUmVxdWVzdCB7CisJX19iZTE2CWNhbGxJRDsKKwlfX3UxNglyZXNlcnZlZDsKK307CisKK3N0cnVjdCBQcHRwQ2FsbERpc2Nvbm5lY3ROb3RpZnkgeworCV9fYmUxNgljYWxsSUQ7CisJX191OAlyZXN1bHRDb2RlOworCV9fdTgJZ2VuZXJhbEVycm9yQ29kZTsKKwlfX2JlMTYJY2F1c2VDb2RlOworCV9fdTE2CXJlc2VydmVkOworCV9fdTgJY2FsbFN0YXRpc3RpY3NbMTI4XTsKK307CisKK3N0cnVjdCBQcHRwV2FuRXJyb3JOb3RpZnkgeworCV9fYmUxNglwZWVyc0NhbGxJRDsKKwlfX3UxNglyZXNlcnZlZDsKKwlfX2JlMzIJY3JjRXJyb3JzOworCV9fYmUzMglmcmFtaW5nRXJyb3JzOworCV9fYmUzMgloYXJkd2FyZU92ZXJSdW5zOworCV9fYmUzMglidWZmZXJPdmVyUnVuczsKKwlfX2JlMzIJdGltZW91dEVycm9yczsKKwlfX2JlMzIJYWxpZ25tZW50RXJyb3JzOworfTsKKworc3RydWN0IFBwdHBTZXRMaW5rSW5mbyB7CisJX19iZTE2CXBlZXJzQ2FsbElEOworCV9fdTE2CXJlc2VydmVkOworCV9fYmUzMglzZW5kQWNjbTsKKwlfX2JlMzIJcmVjdkFjY207Cit9OworCit1bmlvbiBwcHRwX2N0cmxfdW5pb24geworCXN0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVxdWVzdAlzcmVxOworCXN0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVwbHkJc3JlcDsKKwlzdHJ1Y3QgUHB0cFN0b3BTZXNzaW9uUmVxdWVzdAlzdHJlcTsKKwlzdHJ1Y3QgUHB0cFN0b3BTZXNzaW9uUmVwbHkJc3RyZXA7CisJc3RydWN0IFBwdHBPdXRDYWxsUmVxdWVzdAlvY3JlcTsKKwlzdHJ1Y3QgUHB0cE91dENhbGxSZXBseQkJb2NhY2s7CisJc3RydWN0IFBwdHBJbkNhbGxSZXF1ZXN0CWljcmVxOworCXN0cnVjdCBQcHRwSW5DYWxsUmVwbHkJCWljYWNrOworCXN0cnVjdCBQcHRwSW5DYWxsQ29ubmVjdGVkCWljY29uOworCXN0cnVjdCBQcHRwQ2xlYXJDYWxsUmVxdWVzdAljbHJyZXE7CisJc3RydWN0IFBwdHBDYWxsRGlzY29ubmVjdE5vdGlmeSBkaXNjOworCXN0cnVjdCBQcHRwV2FuRXJyb3JOb3RpZnkJd2FuZXJyOworCXN0cnVjdCBQcHRwU2V0TGlua0luZm8JCXNldGxpbms7Cit9OworCisvKiBjcmFwIG5lZWRlZCBmb3IgbmZfY29ubnRyYWNrX2NvbXBhdC5oICovCitzdHJ1Y3QgbmZfY29ubjsKK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0OworZW51bSBpcF9jb25udHJhY2tfaW5mbzsKKworZXh0ZXJuIGludAorKCpuZl9uYXRfcHB0cF9ob29rX291dGJvdW5kKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJCSAgICAgdW5pb24gcHB0cF9jdHJsX3VuaW9uICpwcHRwUmVxKTsKKworZXh0ZXJuIGludAorKCpuZl9uYXRfcHB0cF9ob29rX2luYm91bmQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJCSAgICB1bmlvbiBwcHRwX2N0cmxfdW5pb24gKnBwdHBSZXEpOworCitleHRlcm4gdm9pZAorKCpuZl9uYXRfcHB0cF9ob29rX2V4cF9ncmUpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBfb3JpZywKKwkJCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwX3JlcGx5KTsKKworZXh0ZXJuIHZvaWQKKygqbmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbikoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX1BQVFBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNmJiY2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNpZm5kZWYgX0NPTk5UUkFDS19QUk9UT19HUkVfSAorI2RlZmluZSBfQ09OTlRSQUNLX1BST1RPX0dSRV9ICisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisvKiBHUkUgUFJPVE9DT0wgSEVBREVSICovCisKKy8qIEdSRSBWZXJzaW9uIGZpZWxkICovCisjZGVmaW5lIEdSRV9WRVJTSU9OXzE3MDEJMHgwCisjZGVmaW5lIEdSRV9WRVJTSU9OX1BQVFAJMHgxCisKKy8qIEdSRSBQcm90b2NvbCBmaWVsZCAqLworI2RlZmluZSBHUkVfUFJPVE9DT0xfUFBUUAkweDg4MEIKKworLyogR1JFIEZsYWdzICovCisjZGVmaW5lIEdSRV9GTEFHX0MJCTB4ODAKKyNkZWZpbmUgR1JFX0ZMQUdfUgkJMHg0MAorI2RlZmluZSBHUkVfRkxBR19LCQkweDIwCisjZGVmaW5lIEdSRV9GTEFHX1MJCTB4MTAKKyNkZWZpbmUgR1JFX0ZMQUdfQQkJMHg4MAorCisjZGVmaW5lIEdSRV9JU19DKGYpCSgoZikmR1JFX0ZMQUdfQykKKyNkZWZpbmUgR1JFX0lTX1IoZikJKChmKSZHUkVfRkxBR19SKQorI2RlZmluZSBHUkVfSVNfSyhmKQkoKGYpJkdSRV9GTEFHX0spCisjZGVmaW5lIEdSRV9JU19TKGYpCSgoZikmR1JFX0ZMQUdfUykKKyNkZWZpbmUgR1JFX0lTX0EoZikJKChmKSZHUkVfRkxBR19BKQorCisvKiBHUkUgaXMgYSBtZXNzOiBGb3VyIGRpZmZlcmVudCBzdGFuZGFyZHMgKi8KK3N0cnVjdCBncmVfaGRyIHsKKyNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKwlfX3UxNglyZWM6MywKKwkJc3JyOjEsCisJCXNlcToxLAorCQlrZXk6MSwKKwkJcm91dGluZzoxLAorCQljc3VtOjEsCisJCXZlcnNpb246MywKKwkJcmVzZXJ2ZWQ6NCwKKwkJYWNrOjE7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3UxNgljc3VtOjEsCisJCXJvdXRpbmc6MSwKKwkJa2V5OjEsCisJCXNlcToxLAorCQlzcnI6MSwKKwkJcmVjOjMsCisJCWFjazoxLAorCQlyZXNlcnZlZDo0LAorCQl2ZXJzaW9uOjM7CisjZWxzZQorI2Vycm9yICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgorI2VuZGlmCisJX19iZTE2CXByb3RvY29sOworfTsKKworLyogbW9kaWZpZWQgR1JFIGhlYWRlciBmb3IgUFBUUCAqLworc3RydWN0IGdyZV9oZHJfcHB0cCB7CisJX191OCAgIGZsYWdzOwkJLyogYml0ZmllbGQgKi8KKwlfX3U4ICAgdmVyc2lvbjsJCS8qIHNob3VsZCBiZSBHUkVfVkVSU0lPTl9QUFRQICovCisJX19iZTE2IHByb3RvY29sOwkvKiBzaG91bGQgYmUgR1JFX1BST1RPQ09MX1BQVFAgKi8KKwlfX2JlMTYgcGF5bG9hZF9sZW47CS8qIHNpemUgb2YgcHBwIHBheWxvYWQsIG5vdCBpbmMuIGdyZSBoZWFkZXIgKi8KKwlfX2JlMTYgY2FsbF9pZDsJCS8qIHBlZXIncyBjYWxsX2lkIGZvciB0aGlzIHNlc3Npb24gKi8KKwlfX2JlMzIgc2VxOwkJLyogc2VxdWVuY2UgbnVtYmVyLiAgUHJlc2VudCBpZiBTPT0xICovCisJX19iZTMyIGFjazsJCS8qIHNlcSBudW1iZXIgb2YgaGlnaGVzdCBwYWNrZXQgcmVjaWV2ZWQgYnkgKi8KKwkJCQkvKiAgc2VuZGVyIGluIHRoaXMgc2Vzc2lvbiAqLworfTsKKworc3RydWN0IG5mX2N0X2dyZSB7CisJdW5zaWduZWQgaW50IHN0cmVhbV90aW1lb3V0OworCXVuc2lnbmVkIGludCB0aW1lb3V0OworfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorCitzdHJ1Y3QgbmZfY29ubjsKKworLyogc3RydWN0dXJlIGZvciBvcmlnaW5hbCA8LT4gcmVwbHkga2V5bWFwICovCitzdHJ1Y3QgbmZfY3RfZ3JlX2tleW1hcCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7Cit9OworCisvKiBhZGQgbmV3IHR1cGxlLT5rZXlfcmVwbHkgcGFpciB0byBrZXltYXAgKi8KK2ludCBuZl9jdF9ncmVfa2V5bWFwX2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCisJCQkgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCk7CisKKy8qIGRlbGV0ZSBrZXltYXAgZW50cmllcyAqLwordm9pZCBuZl9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3koc3RydWN0IG5mX2Nvbm4gKmN0KTsKKworLyogZ2V0IHBvaW50ZXIgdG8gZ3JlIGtleSwgaWYgcHJlc2VudCAqLworc3RhdGljIGlubGluZSBfX2JlMzIgKmdyZV9rZXkoc3RydWN0IGdyZV9oZHIgKmdyZWgpCit7CisJaWYgKCFncmVoLT5rZXkpCisJCXJldHVybiBOVUxMOworCWlmIChncmVoLT5jc3VtIHx8IGdyZWgtPnJvdXRpbmcpCisJCXJldHVybiAoX19iZTMyICopKGdyZWgrc2l6ZW9mKCpncmVoKSs0KTsKKwlyZXR1cm4gKF9fYmUzMiAqKShncmVoK3NpemVvZigqZ3JlaCkpOworfQorCisvKiBnZXQgcG9pbnRlciBvdCBncmUgY3N1bSwgaWYgcHJlc2VudCAqLworc3RhdGljIGlubGluZSBfX3N1bTE2ICpncmVfY3N1bShzdHJ1Y3QgZ3JlX2hkciAqZ3JlaCkKK3sKKwlpZiAoIWdyZWgtPmNzdW0pCisJCXJldHVybiBOVUxMOworCXJldHVybiAoX19zdW0xNiAqKShncmVoK3NpemVvZigqZ3JlaCkpOworfQorCitleHRlcm4gdm9pZCBuZl9jdF9ncmVfa2V5bWFwX2ZsdXNoKHZvaWQpOworZXh0ZXJuIHZvaWQgbmZfbmF0X25lZWRfZ3JlKHZvaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9DT05OVFJBQ0tfUFJPVE9fR1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oCmluZGV4IGI4OTk0ZDkuLjVjZjJjMTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaApAQCAtMjAsNyArMjAsNyBAQAogewogCWVudW0gc2N0cF9jb25udHJhY2sgc3RhdGU7CiAKLQl1X2ludDMyX3QgdnRhZ1tJUF9DVF9ESVJfTUFYXTsKKwlfX2JlMzIgdnRhZ1tJUF9DVF9ESVJfTUFYXTsKIAl1X2ludDMyX3QgdHRhZ1tJUF9DVF9ESVJfTUFYXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjdmMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX19ORl9DT05OVFJBQ0tfU0lQX0hfXworI2RlZmluZSBfX05GX0NPTk5UUkFDS19TSVBfSF9fCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIFNJUF9QT1JUCTUwNjAKKyNkZWZpbmUgU0lQX1RJTUVPVVQJMzYwMAorCitlbnVtIHNpcF9oZWFkZXJfcG9zIHsKKwlQT1NfUkVHX1JFUV9VUkksCisJUE9TX1JFUV9VUkksCisJUE9TX0ZST00sCisJUE9TX1RPLAorCVBPU19WSUEsCisJUE9TX0NPTlRBQ1QsCisJUE9TX0NPTlRFTlQsCisJUE9TX01FRElBLAorCVBPU19PV05FUl9JUDQsCisJUE9TX0NPTk5FQ1RJT05fSVA0LAorCVBPU19PV05FUl9JUDYsCisJUE9TX0NPTk5FQ1RJT05fSVA2LAorCVBPU19TRFBfSEVBREVSLAorfTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0cik7CitleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpkcHRyKTsKKworZXh0ZXJuIGludCBjdF9zaXBfZ2V0X2luZm8oc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLCBzaXplX3QgZGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCAqbWF0Y2hvZmYsIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCisJCQkgICBlbnVtIHNpcF9oZWFkZXJfcG9zIHBvcyk7CitleHRlcm4gaW50IGN0X3NpcF9sbmxlbihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpsaW1pdCk7CitleHRlcm4gY29uc3QgY2hhciAqY3Rfc2lwX3NlYXJjaChjb25zdCBjaGFyICpuZWVkbGUsIGNvbnN0IGNoYXIgKmhheXN0YWNrLAorCQkJCSBzaXplX3QgbmVlZGxlX2xlbiwgc2l6ZV90IGhheXN0YWNrX2xlbiwKKwkJCQkgaW50IGNhc2Vfc2Vuc2l0aXZlKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19ORl9DT05OVFJBQ0tfU0lQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3OWI3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RGVFBfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RGVFBfSAorCisjZGVmaW5lIFRGVFBfUE9SVCA2OQorCitzdHJ1Y3QgdGZ0cGhkciB7CisJX19iZTE2IG9wY29kZTsKK307CisKKyNkZWZpbmUgVEZUUF9PUENPREVfUkVBRAkxCisjZGVmaW5lIFRGVFBfT1BDT0RFX1dSSVRFCTIKKyNkZWZpbmUgVEZUUF9PUENPREVfREFUQQkzCisjZGVmaW5lIFRGVFBfT1BDT0RFX0FDSwkJNAorI2RlZmluZSBURlRQX09QQ09ERV9FUlJPUgk1CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfdGZ0cF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOworCisjZW5kaWYgLyogX05GX0NPTk5UUkFDS19URlRQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKaW5kZXggNmQ4ZTNlNS4uMWU5YzgyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTc4LDcgKzc4LDcgQEAKIHN0cnVjdCBuZmdlbm1zZyB7CiAJdV9pbnQ4X3QgIG5mZ2VuX2ZhbWlseTsJCS8qIEFGX3h4eCAqLwogCXVfaW50OF90ICB2ZXJzaW9uOwkJLyogbmZuZXRsaW5rIHZlcnNpb24gKi8KLQl1X2ludDE2X3QgcmVzX2lkOwkJLyogcmVzb3VyY2UgaWQgKi8KKwlfX2JlMTYgICAgcmVzX2lkOwkJLyogcmVzb3VyY2UgaWQgKi8KIH07CiAKICNkZWZpbmUgTkZORVRMSU5LX1YwCTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaAppbmRleCA4N2I5MmY4Li41OTY2YWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCkBAIC0xNiwyNCArMTYsMjIgQEAKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgewotCXVfaW50MTZfdAlod19wcm90b2NvbDsJLyogaHcgcHJvdG9jb2wgKG5ldHdvcmsgb3JkZXIpICovCisJX19iZTE2CQlod19wcm90b2NvbDsJLyogaHcgcHJvdG9jb2wgKG5ldHdvcmsgb3JkZXIpICovCiAJdV9pbnQ4X3QJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCiAJdV9pbnQ4X3QJX3BhZDsKIH07CiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9odyB7Ci0JdV9pbnQxNl90CWh3X2FkZHJsZW47CisJX19iZTE2CQlod19hZGRybGVuOwogCXVfaW50MTZfdAlfcGFkOwogCXVfaW50OF90CWh3X2FkZHJbOF07CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKLQlhbGlnbmVkX3U2NAlzZWM7Ci0JYWxpZ25lZF91NjQJdXNlYzsKKwlhbGlnbmVkX2JlNjQJc2VjOworCWFsaWduZWRfYmU2NAl1c2VjOwogfTsKIAotI2RlZmluZSBORlVMTkxfUFJFRklYTEVOCTMwCS8qIGp1c3QgbGlrZSBvbGQgbG9nIHRhcmdldCAqLwotCiBlbnVtIG5mdWxubF9hdHRyX3R5cGUgewogCU5GVUxBX1VOU1BFQywKIAlORlVMQV9QQUNLRVRfSERSLApAQCAtNjcsNyArNjUsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlIHsKLQl1X2ludDMyX3QJY29weV9yYW5nZTsKKwlfX2JlMzIJCWNvcHlfcmFuZ2U7CiAJdV9pbnQ4X3QJY29weV9tb2RlOwogCXVfaW50OF90CV9wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKaW5kZXggMzZhZjAzNi4uODNlNzg5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKQEAgLTEzLDIwICsxMywyMCBAQAogfTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyIHsKLQl1X2ludDMyX3QJcGFja2V0X2lkOwkvKiB1bmlxdWUgSUQgb2YgcGFja2V0IGluIHF1ZXVlICovCi0JdV9pbnQxNl90CWh3X3Byb3RvY29sOwkvKiBodyBwcm90b2NvbCAobmV0d29yayBvcmRlcikgKi8KKwlfX2JlMzIJCXBhY2tldF9pZDsJLyogdW5pcXVlIElEIG9mIHBhY2tldCBpbiBxdWV1ZSAqLworCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwogCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X2h3IHsKLQl1X2ludDE2X3QJaHdfYWRkcmxlbjsKKwlfX2JlMTYJCWh3X2FkZHJsZW47CiAJdV9pbnQxNl90CV9wYWQ7CiAJdV9pbnQ4X3QJaHdfYWRkcls4XTsKIH07CiAKIHN0cnVjdCBuZnFubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7Ci0JYWxpZ25lZF91NjQJc2VjOwotCWFsaWduZWRfdTY0CXVzZWM7CisJYWxpZ25lZF9iZTY0CXNlYzsKKwlhbGlnbmVkX2JlNjQJdXNlYzsKIH07CiAKIGVudW0gbmZxbmxfYXR0cl90eXBlIHsKQEAgLTQ3LDggKzQ3LDggQEAKICNkZWZpbmUgTkZRQV9NQVggKF9fTkZRQV9NQVggLSAxKQogCiBzdHJ1Y3QgbmZxbmxfbXNnX3ZlcmRpY3RfaGRyIHsKLQl1X2ludDMyX3QgdmVyZGljdDsKLQl1X2ludDMyX3QgaWQ7CisJX19iZTMyIHZlcmRpY3Q7CisJX19iZTMyIGlkOwogfTsKIAogCkBAIC02Myw3ICs2Myw3IEBACiBzdHJ1Y3QgbmZxbmxfbXNnX2NvbmZpZ19jbWQgewogCXVfaW50OF90CWNvbW1hbmQ7CS8qIG5mcW5sX21zZ19jb25maWdfY21kcyAqLwogCXVfaW50OF90CV9wYWQ7Ci0JdV9pbnQxNl90CXBmOwkJLyogQUZfeHh4IGZvciBQRl9bVU5dQklORCAqLworCV9fYmUxNgkJcGY7CQkvKiBBRl94eHggZm9yIFBGX1tVTl1CSU5EICovCiB9OwogCiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlIHsKQEAgLTczLDcgKzczLDcgQEAKIH07CiAKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyB7Ci0JdV9pbnQzMl90CWNvcHlfcmFuZ2U7CisJX19iZTMyCQljb3B5X3JhbmdlOwogCXVfaW50OF90CWNvcHlfbW9kZTsJLyogZW51bSBuZnFubF9jb25maWdfbW9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTgyLDYgKzgyLDcgQEAKIAlORlFBX0NGR19VTlNQRUMsCiAJTkZRQV9DRkdfQ01ELAkJCS8qIG5mcW5sX21zZ19jb25maWdfY21kICovCiAJTkZRQV9DRkdfUEFSQU1TLAkJLyogbmZxbmxfbXNnX2NvbmZpZ19wYXJhbXMgKi8KKwlORlFBX0NGR19RVUVVRV9NQVhMRU4sCQkvKiB1X2ludDMyX3QgKi8KIAlfX05GUUFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZRQV9DRkdfTUFYIChfX05GUUFfQ0ZHX01BWC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjZDBlZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBfWFRfTkZMT0dfVEFSR0VUCisjZGVmaW5lIF9YVF9ORkxPR19UQVJHRVQKKworI2RlZmluZSBYVF9ORkxPR19ERUZBVUxUX0dST1VQCQkweDEKKyNkZWZpbmUgWFRfTkZMT0dfREVGQVVMVF9USFJFU0hPTEQJMQorCisjZGVmaW5lIFhUX05GTE9HX01BU0sJCQkweDAKKworc3RydWN0IHh0X25mbG9nX2luZm8geworCXVfaW50MzJfdAlsZW47CisJdV9pbnQxNl90CWdyb3VwOworCXVfaW50MTZfdAl0aHJlc2hvbGQ7CisJdV9pbnQxNl90CWZsYWdzOworCXVfaW50MTZfdAlwYWQ7CisJY2hhcgkJcHJlZml4WzY0XTsKK307CisKKyNlbmRpZiAvKiBfWFRfTkZMT0dfVEFSR0VUICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCmluZGV4IDRjMmQ5OTQuLjcwYjZmNzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC0yOSwxNCArMjksMTQgQEAKIHN0cnVjdCBpcF9jb25udHJhY2tfb2xkX3R1cGxlCiB7CiAJc3RydWN0IHsKLQkJX191MzIgaXA7CisJCV9fYmUzMiBpcDsKIAkJdW5pb24gewogCQkJX191MTYgYWxsOwogCQl9IHU7CiAJfSBzcmM7CiAKIAlzdHJ1Y3QgewotCQlfX3UzMiBpcDsKKwkJX19iZTMyIGlwOwogCQl1bmlvbiB7CiAJCQlfX3UxNiBhbGw7CiAJCX0gdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1NTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX1hUX0hBU0hMSU1JVF9ICisjZGVmaW5lIF9YVF9IQVNITElNSVRfSAorCisvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCisjZGVmaW5lIFhUX0hBU0hMSU1JVF9TQ0FMRSAxMDAwMAorLyogMS8xMCwwMDAgc2VjIHBlcmlvZCA9PiBtYXggb2YgMTAsMDAwL3NlYy4gIE1pbiByYXRlIGlzIHRoZW4gNDI5NDkwCisgICBzZWNvbmRzLCBvciBvbmUgZXZlcnkgNTkgaG91cnMuICovCisKKy8qIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3R1cmUgaGlkZGVuIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiAqLworc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGU7CisKKyNkZWZpbmUgWFRfSEFTSExJTUlUX0hBU0hfRElQCTB4MDAwMQorI2RlZmluZSBYVF9IQVNITElNSVRfSEFTSF9EUFQJMHgwMDAyCisjZGVmaW5lIFhUX0hBU0hMSU1JVF9IQVNIX1NJUAkweDAwMDQKKyNkZWZpbmUgWFRfSEFTSExJTUlUX0hBU0hfU1BUCTB4MDAwOAorCitzdHJ1Y3QgaGFzaGxpbWl0X2NmZyB7CisJdV9pbnQzMl90IG1vZGU7CSAgLyogYml0bWFzayBvZiBJUFRfSEFTSExJTUlUX0hBU0hfKiAqLworCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLworCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKworCS8qIHVzZXIgc3BlY2lmaWVkICovCisJdV9pbnQzMl90IHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCisJdV9pbnQzMl90IG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCXVfaW50MzJfdCBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KKwl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLworfTsKKworc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvIHsKKwljaGFyIG5hbWUgW0lGTkFNU0laXTsJCS8qIG5hbWUgKi8KKwlzdHJ1Y3QgaGFzaGxpbWl0X2NmZyBjZmc7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOworCisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwl1bmlvbiB7CisJCXZvaWQgKnB0cjsKKwkJc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICptYXN0ZXI7CisJfSB1OworfTsKKyNlbmRpZiAvKl9YVF9IQVNITElNSVRfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oCmluZGV4IGE4MTMyZWMuLjQ1NjU0ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BvbGljeS5oCkBAIC0zOSw3ICszOSw3IEBACiAJdW5pb24geHRfcG9saWN5X2FkZHIJc21hc2s7CiAJdW5pb24geHRfcG9saWN5X2FkZHIJZGFkZHI7CiAJdW5pb24geHRfcG9saWN5X2FkZHIJZG1hc2s7Ci0JdV9pbnQzMl90CQlzcGk7CisJX19iZTMyCQkJc3BpOwogCXVfaW50MzJfdAkJcmVxaWQ7CiAJdV9pbnQ4X3QJCXByb3RvOwogCXVfaW50OF90CQltb2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAppbmRleCA5YTRkZDExLi42YzQ2MTNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaApAQCAtNjQsNyArNjQsNyBAQAogCiBzdHJ1Y3QgYnJpZGdlX3NrYl9jYiB7CiAJdW5pb24gewotCQlfX3UzMiBpcHY0OworCQlfX2JlMzIgaXB2NDsKIAl9IGRhZGRyOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF84MDJfMy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF84MDJfMy5oCmluZGV4IGI5ZjcxMmMuLjA3ZjA0NGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfODAyXzMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0XzgwMl8zLmgKQEAgLTI4LDIxICsyOCwyMSBAQAogCXVpbnQ4X3Qgc3NhcDsKIAl1aW50OF90IGN0cmw7CiAJdWludDhfdCBvcmlnWzNdOwotCXVpbnQxNl90IHR5cGU7CisJX19iZTE2IHR5cGU7CiB9OwogCiBzdHJ1Y3QgaGRyX25pIHsKIAl1aW50OF90IGRzYXA7CiAJdWludDhfdCBzc2FwOwotCXVpbnQxNl90IGN0cmw7CisJX19iZTE2IGN0cmw7CiAJdWludDhfdCAgb3JpZ1szXTsKLQl1aW50MTZfdCB0eXBlOworCV9fYmUxNiB0eXBlOwogfTsKIAogc3RydWN0IGVidF84MDJfM19oZHIgewogCXVpbnQ4X3QgIGRhZGRyWzZdOwogCXVpbnQ4X3QgIHNhZGRyWzZdOwotCXVpbnQxNl90IGxlbjsKKwlfX2JlMTYgbGVuOwogCXVuaW9uIHsKIAkJc3RydWN0IGhkcl91aSB1aTsKIAkJc3RydWN0IGhkcl9uaSBuaTsKQEAgLTYxLDcgKzYxLDcgQEAKIHN0cnVjdCBlYnRfODAyXzNfaW5mbyAKIHsKIAl1aW50OF90ICBzYXA7Ci0JdWludDE2X3QgdHlwZTsKKwlfX2JlMTYgdHlwZTsKIAl1aW50OF90ICBiaXRtYXNrOwogCXVpbnQ4X3QgIGludmZsYWdzOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYW1vbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYW1vbmcuaAppbmRleCAzMDdjMWZlLi43NjU0MDY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2Ftb25nLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hbW9uZy5oCkBAIC0zMiw3ICszMiw3IEBACiBzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaF90dXBsZQogewogCXVpbnQzMl90IGNtcFsyXTsKLQl1aW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiB9OwogCiBzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hcnAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfYXJwLmgKaW5kZXggNTM3ZWM2Yi4uOTdlNGRiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9hcnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2FycC5oCkBAIC0xNCwxMyArMTQsMTMgQEAKIAogc3RydWN0IGVidF9hcnBfaW5mbwogewotCXVpbnQxNl90IGh0eXBlOwotCXVpbnQxNl90IHB0eXBlOwotCXVpbnQxNl90IG9wY29kZTsKLQl1aW50MzJfdCBzYWRkcjsKLQl1aW50MzJfdCBzbXNrOwotCXVpbnQzMl90IGRhZGRyOwotCXVpbnQzMl90IGRtc2s7CisJX19iZTE2IGh0eXBlOworCV9fYmUxNiBwdHlwZTsKKwlfX2JlMTYgb3Bjb2RlOworCV9fYmUzMiBzYWRkcjsKKwlfX2JlMzIgc21zazsKKwlfX2JlMzIgZGFkZHI7CisJX19iZTMyIGRtc2s7CiAJdW5zaWduZWQgY2hhciBzbWFkZHJbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGNoYXIgc21tc2tbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGNoYXIgZG1hZGRyW0VUSF9BTEVOXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfaXAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfaXAuaAppbmRleCA3MjQ3Mzg1Li5kNjg0NzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X2lwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9pcC5oCkBAIC0yOCwxMCArMjgsMTAgQEAKIC8qIHRoZSBzYW1lIHZhbHVlcyBhcmUgdXNlZCBmb3IgdGhlIGludmZsYWdzICovCiBzdHJ1Y3QgZWJ0X2lwX2luZm8KIHsKLQl1aW50MzJfdCBzYWRkcjsKLQl1aW50MzJfdCBkYWRkcjsKLQl1aW50MzJfdCBzbXNrOwotCXVpbnQzMl90IGRtc2s7CisJX19iZTMyIHNhZGRyOworCV9fYmUzMiBkYWRkcjsKKwlfX2JlMzIgc21zazsKKwlfX2JlMzIgZG1zazsKIAl1aW50OF90ICB0b3M7CiAJdWludDhfdCAgcHJvdG9jb2w7CiAJdWludDhfdCAgYml0bWFzazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25hdC5oCmluZGV4IDI2ZmQ5MGQuLjQzNWI4ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfbmF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidF9uYXQuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX19MSU5VWF9CUklER0VfRUJUX05BVF9ICiAjZGVmaW5lIF9fTElOVVhfQlJJREdFX0VCVF9OQVRfSAogCisjZGVmaW5lIE5BVF9BUlBfQklUICAoMHgwMDAwMDAxMCkKIHN0cnVjdCBlYnRfbmF0X2luZm8KIHsKIAl1bnNpZ25lZCBjaGFyIG1hY1tFVEhfQUxFTl07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdmxhbi5oCmluZGV4IGNiMWZjYzQuLjFkOThiZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdmxhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRfdmxhbi5oCkBAIC0xMCw3ICsxMCw3IEBACiBzdHJ1Y3QgZWJ0X3ZsYW5faW5mbyB7CiAJdWludDE2X3QgaWQ7CQkvKiBWTEFOIElEIHsxLTQwOTV9ICovCiAJdWludDhfdCBwcmlvOwkJLyogVkxBTiBVc2VyIFByaW9yaXR5IHswLTd9ICovCi0JdWludDE2X3QgZW5jYXA7CQkvKiBWTEFOIEVuY2Fwc3VsYXRlZCBmcmFtZSBjb2RlIHswLTY1NTM1fSAqLworCV9fYmUxNiBlbmNhcDsJCS8qIFZMQU4gRW5jYXBzdWxhdGVkIGZyYW1lIGNvZGUgezAtNjU1MzV9ICovCiAJdWludDhfdCBiaXRtYXNrOwkJLyogQXJncyBiaXRtYXNrIGJpdCAxPTEgLSBJRCBhcmcsCiAJCQkJICAgYml0IDI9MSBVc2VyLVByaW9yaXR5IGFyZywgYml0IDM9MSBlbmNhcCovCiAJdWludDhfdCBpbnZmbGFnczsJCS8qIEludmVyc2UgYml0bWFzayAgYml0IDE9MSAtIGludmVyc2VkIElEIGFyZywgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCmluZGV4IGIxYTdjYzkuLjk0ZTBhN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9lYnRhYmxlcy5oCkBAIC0yNiw2ICsyNiwxMCBAQAogI2RlZmluZSBFQlRfQ09OVElOVUUgLTMKICNkZWZpbmUgRUJUX1JFVFVSTiAgIC00CiAjZGVmaW5lIE5VTV9TVEFOREFSRF9UQVJHRVRTICAgNAorLyogZWJ0YWJsZXMgdGFyZ2V0IG1vZHVsZXMgc3RvcmUgdGhlIHZlcmRpY3QgaW5zaWRlIGFuIGludC4gV2UgY2FuCisgKiByZWNsYWltIGEgcGFydCBvZiB0aGlzIGludCBmb3IgYmFja3dhcmRzIGNvbXBhdGlibGUgZXh0ZW5zaW9ucy4KKyAqIFRoZSA0IGxzYiBhcmUgbW9yZSB0aGFuIGVub3VnaCB0byBzdG9yZSB0aGUgdmVyZGljdC4gKi8KKyNkZWZpbmUgRUJUX1ZFUkRJQ1RfQklUUyAweDAwMDAwMDBGCiAKIHN0cnVjdCBlYnRfY291bnRlcgogewpAQCAtNDIsNiArNDYsMjMgQEAKIAkvKiB0b3RhbCBzaXplIG9mIHRoZSBlbnRyaWVzICovCiAJdW5zaWduZWQgaW50IGVudHJpZXNfc2l6ZTsKIAkvKiBzdGFydCBvZiB0aGUgY2hhaW5zICovCisJc3RydWN0IGVidF9lbnRyaWVzIF9fdXNlciAqaG9va19lbnRyeVtORl9CUl9OVU1IT09LU107CisJLyogbnIgb2YgY291bnRlcnMgdXNlcnNwYWNlIGV4cGVjdHMgYmFjayAqLworCXVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisJLyogd2hlcmUgdGhlIGtlcm5lbCB3aWxsIHB1dCB0aGUgb2xkIGNvdW50ZXJzICovCisJc3RydWN0IGVidF9jb3VudGVyIF9fdXNlciAqY291bnRlcnM7CisJY2hhciBfX3VzZXIgKmVudHJpZXM7Cit9OworCitzdHJ1Y3QgZWJ0X3JlcGxhY2Vfa2VybmVsCit7CisJY2hhciBuYW1lW0VCVF9UQUJMRV9NQVhOQU1FTEVOXTsKKwl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisJLyogbnIgb2YgcnVsZXMgaW4gdGhlIHRhYmxlICovCisJdW5zaWduZWQgaW50IG5lbnRyaWVzOworCS8qIHRvdGFsIHNpemUgb2YgdGhlIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBpbnQgZW50cmllc19zaXplOworCS8qIHN0YXJ0IG9mIHRoZSBjaGFpbnMgKi8KIAlzdHJ1Y3QgZWJ0X2VudHJpZXMgKmhvb2tfZW50cnlbTkZfQlJfTlVNSE9PS1NdOwogCS8qIG5yIG9mIGNvdW50ZXJzIHVzZXJzcGFjZSBleHBlY3RzIGJhY2sgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzOwpAQCAtMTQxLDcgKzE2Miw3IEBACiAJLyogdGhpcyBuZWVkcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgKi8KIAl1bnNpZ25lZCBpbnQgYml0bWFzazsKIAl1bnNpZ25lZCBpbnQgaW52ZmxhZ3M7Ci0JdWludDE2X3QgZXRocHJvdG87CisJX19iZTE2IGV0aHByb3RvOwogCS8qIHRoZSBwaHlzaWNhbCBpbi1kZXYgKi8KIAljaGFyIGluW0lGTkFNU0laXTsKIAkvKiB0aGUgbG9naWNhbCBpbi1kZXYgKi8KQEAgLTI1MSw3ICsyNzIsNyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAljaGFyIG5hbWVbRUJUX1RBQkxFX01BWE5BTUVMRU5dOwotCXN0cnVjdCBlYnRfcmVwbGFjZSAqdGFibGU7CisJc3RydWN0IGVidF9yZXBsYWNlX2tlcm5lbCAqdGFibGU7CiAJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOwogCXJ3bG9ja190IGxvY2s7CiAJLyogZS5nLiBjb3VsZCBiZSB0aGUgdGFibGUgZXhwbGljaXRseSBvbmx5IGFsbG93cyBjZXJ0YWluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKaW5kZXggNWI2M2EyMy4uNTgyMWViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtNzksNyArNzksNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBpbnQgaXBfcm91dGVfbWVfaGFyZGVyKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgYWRkcl90eXBlKTsKIGV4dGVybiBpbnQgaXBfeGZybV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbmZfaXBfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCitleHRlcm4gX19zdW0xNiBuZl9pcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpOwogI2VuZGlmIC8qX19LRVJORUxfXyovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQKaW5kZXggNTkxYzFhOC4uMTgwMzM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQKQEAgLTEsNiArMSw0IEBACiBoZWFkZXIteSArPSBpcF9jb25udHJhY2tfaGVscGVyLmgKLWhlYWRlci15ICs9IGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLmgKLWhlYWRlci15ICs9IGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oCiBoZWFkZXIteSArPSBpcF9jb25udHJhY2tfcHJvdG9jb2wuaAogaGVhZGVyLXkgKz0gaXBfY29ubnRyYWNrX3NjdHAuaAogaGVhZGVyLXkgKz0gaXBfY29ubnRyYWNrX3RjcC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAppbmRleCA2NGU4NjgwLi4zMzU4MWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19wcm90b19ncmUuaD4KQEAgLTI3Nyw3ICsyNzgsNyBAQAogX19pcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBleHRlcm4gc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKgotaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKK2lwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBleHRlcm4gc3RydWN0IGlwX2Nvbm50cmFja190dXBsZV9oYXNoICoKIF9faXBfY29ubnRyYWNrX2ZpbmQoY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19mdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2Z0cC5oCmluZGV4IDYzODExOTMuLjIxMjlmYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2Z0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2Z0cC5oCkBAIC0xLDYgKzEsNDQgQEAKICNpZm5kZWYgX0lQX0NPTk5UUkFDS19GVFBfSAogI2RlZmluZSBfSVBfQ09OTlRSQUNLX0ZUUF9ICisvKiBGVFAgdHJhY2tpbmcuICovCiAKLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oPgorLyogVGhpcyBlbnVtIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlICovCitlbnVtIGlwX2N0X2Z0cF90eXBlCit7CisJLyogUE9SVCBjb21tYW5kIGZyb20gY2xpZW50ICovCisJSVBfQ1RfRlRQX1BPUlQsCisJLyogUEFTViByZXNwb25zZSBmcm9tIHNlcnZlciAqLworCUlQX0NUX0ZUUF9QQVNWLAorCS8qIEVQUlQgY29tbWFuZCBmcm9tIGNsaWVudCAqLworCUlQX0NUX0ZUUF9FUFJULAorCS8qIEVQU1YgcmVzcG9uc2UgZnJvbSBzZXJ2ZXIgKi8KKwlJUF9DVF9GVFBfRVBTViwKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgRlRQX1BPUlQJMjEKKworI2RlZmluZSBOVU1fU0VRX1RPX1JFTUVNQkVSIDIKKy8qIFRoaXMgc3RydWN0dXJlIGV4aXN0cyBvbmx5IG9uY2UgcGVyIG1hc3RlciAqLworc3RydWN0IGlwX2N0X2Z0cF9tYXN0ZXIgeworCS8qIFZhbGlkIHNlcSBwb3NpdGlvbnMgZm9yIGNtZCBtYXRjaGluZyBhZnRlciBuZXdsaW5lICovCisJdV9pbnQzMl90IHNlcV9hZnRfbmxbSVBfQ1RfRElSX01BWF1bTlVNX1NFUV9UT19SRU1FTUJFUl07CisJLyogMCBtZWFucyBzZXFfbWF0Y2hfYWZ0X25sIG5vdCBzZXQgKi8KKwlpbnQgc2VxX2FmdF9ubF9udW1bSVBfQ1RfRElSX01BWF07Cit9OworCitzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdDsKKworLyogRm9yIE5BVCB0byBob29rIGluIHdoZW4gd2UgZmluZCBhIHBhY2tldCB3aGljaCBkZXNjcmliZXMgd2hhdCBvdGhlcgorICogY29ubmVjdGlvbiB3ZSBzaG91bGQgZXhwZWN0LiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCAoKmlwX25hdF9mdHBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICAgZW51bSBpcF9jdF9mdHBfdHlwZSB0eXBlLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCQkgICAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCwKKwkJCQkgICAgICAgdTMyICpzZXEpOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9JUF9DT05OVFJBQ0tfRlRQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaAppbmRleCA5NDNjYzZhLi4xOGY3Njk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oPgogCiAjZGVmaW5lIFJBU19QT1JUIDE3MTkKICNkZWZpbmUgUTkzMV9QT1JUIDE3MjAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmgKaW5kZXggMWQ4NTNhYS4uZTM3MWUwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmgKQEAgLTEwMiwxMSArMTAyLDExIEBACiB9CiAKIC8qIGdldCBwb2ludGVyIG90IGdyZSBjc3VtLCBpZiBwcmVzZW50ICovCi1zdGF0aWMgaW5saW5lIHVfaW50MTZfdCAqZ3JlX2NzdW0oc3RydWN0IGdyZV9oZHIgKmdyZWgpCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgKmdyZV9jc3VtKHN0cnVjdCBncmVfaGRyICpncmVoKQogewogCWlmICghZ3JlaC0+Y3N1bSkKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICh1X2ludDE2X3QgKikgKGdyZWgrc2l6ZW9mKCpncmVoKSk7CisJcmV0dXJuIChfX3N1bTE2ICopIChncmVoK3NpemVvZigqZ3JlaCkpOwogfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfc2lwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zaXAuaAppbmRleCA5MTNkYWQ2Li5iZWY2YzY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19zaXAuaApAQCAtNSwyMyArNSwxOCBAQAogI2RlZmluZSBTSVBfUE9SVAk1MDYwCiAjZGVmaW5lIFNJUF9USU1FT1VUCTM2MDAKIAotI2RlZmluZSBQT1NfVklBCQkwCi0jZGVmaW5lIFBPU19DT05UQUNUCTEKLSNkZWZpbmUgUE9TX0NPTlRFTlQJMgotI2RlZmluZSBQT1NfTUVESUEJMwotI2RlZmluZSBQT1NfT1dORVIJNAotI2RlZmluZSBQT1NfQ09OTkVDVElPTgk1Ci0jZGVmaW5lIFBPU19SRVFfSEVBREVSCTYKLSNkZWZpbmUgUE9TX1NEUF9IRUFERVIJNwotCi1zdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gewotCWNvbnN0IGNoYXIJKmxuYW1lOwotCWNvbnN0IGNoYXIJKnNuYW1lOwotCWNvbnN0IGNoYXIJKmxuX3N0cjsKLQlzaXplX3QJCWxubGVuOwotCXNpemVfdAkJc25sZW47Ci0Jc2l6ZV90CQlsbl9zdHJsZW47Ci0JaW50CQkoKm1hdGNoX2xlbikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKK2VudW0gc2lwX2hlYWRlcl9wb3MgeworCVBPU19SRUdfUkVRX1VSSSwKKwlQT1NfUkVRX1VSSSwKKwlQT1NfRlJPTSwKKwlQT1NfVE8sCisJUE9TX1ZJQSwKKwlQT1NfQ09OVEFDVCwKKwlQT1NfQ09OVEVOVCwKKwlQT1NfTUVESUEsCisJUE9TX09XTkVSLAorCVBPU19DT05ORUNUSU9OLAorCVBPU19TRFBfSEVBREVSLAogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCAoKmlwX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKipwc2tiLApAQCAtMzYsOSArMzEsMTAgQEAKIGV4dGVybiBpbnQgY3Rfc2lwX2dldF9pbmZvKGNvbnN0IGNoYXIgKmRwdHIsIHNpemVfdCBkbGVuLAogCQkJICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwKIAkJCSAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCi0JCQkgICBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8pOworCQkJICAgZW51bSBzaXBfaGVhZGVyX3BvcyBwb3MpOwogZXh0ZXJuIGludCBjdF9zaXBfbG5sZW4oY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqbGltaXQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmN0X3NpcF9zZWFyY2goY29uc3QgY2hhciAqbmVlZGxlLCBjb25zdCBjaGFyICpoYXlzdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuKTsKKwkJCQkgc2l6ZV90IG5lZWRsZV9sZW4sIHNpemVfdCBoYXlzdGFja19sZW4sCisJCQkJIGludCBjYXNlX3NlbnNpdGl2ZSk7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fSVBfQ09OTlRSQUNLX1NJUF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RmdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3RmdHAuaAppbmRleCBjZGU5NzI5Li5hNDA0ZmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190ZnRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdGZ0cC5oCkBAIC00LDcgKzQsNyBAQAogI2RlZmluZSBURlRQX1BPUlQgNjkKIAogc3RydWN0IHRmdHBoZHIgewotCXVfaW50MTZfdCBvcGNvZGU7CisJX19iZTE2IG9wY29kZTsKIH07CiAKICNkZWZpbmUgVEZUUF9PUENPREVfUkVBRAkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCmluZGV4IDg5MmY5YTMuLjkwZmE2NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBJUFRfTE9HX1RDUE9QVAkJMHgwMgkvKiBMb2cgVENQIG9wdGlvbnMgKi8KICNkZWZpbmUgSVBUX0xPR19JUE9QVAkJMHgwNAkvKiBMb2cgSVAgb3B0aW9ucyAqLwogI2RlZmluZSBJUFRfTE9HX1VJRAkJMHgwOAkvKiBMb2cgVUlEIG93bmluZyBsb2NhbCBzb2NrZXQgKi8KLSNkZWZpbmUgSVBUX0xPR19ORkxPRwkJMHgxMAkvKiBMb2cgdXNpbmcgbmZfbG9nIGJhY2tlbmQgKi8KKyNkZWZpbmUgSVBUX0xPR19ORkxPRwkJMHgxMAkvKiBVbnN1cHBvcnRlZCwgZG9uJ3QgcmV1c2UgKi8KICNkZWZpbmUgSVBUX0xPR19NQVNLCQkweDFmCiAKIHN0cnVjdCBpcHRfbG9nX2luZm8gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaAppbmRleCBhYzJjYjY0Li41NjYyMTIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaApAQCAtMSw0MCArMSwxNCBAQAogI2lmbmRlZiBfSVBUX0hBU0hMSU1JVF9ICiAjZGVmaW5lIF9JUFRfSEFTSExJTUlUX0gKIAotLyogdGltaW5ncyBhcmUgaW4gbWlsbGlzZWNvbmRzLiAqLwotI2RlZmluZSBJUFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCi0vKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKLSAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0Lmg+CiAKLS8qIGRldGFpbHMgb2YgdGhpcyBzdHJ1Y3R1cmUgaGlkZGVuIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiAqLwotc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlOworI2RlZmluZSBJUFRfSEFTSExJTUlUX1NDQUxFCVhUX0hBU0hMSU1JVF9TQ0FMRQorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfRElQCVhUX0hBU0hMSU1JVF9IQVNIX0RJUAorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfRFBUCVhUX0hBU0hMSU1JVF9IQVNIX0RQVAorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfU0lQCVhUX0hBU0hMSU1JVF9IQVNIX1NJUAorI2RlZmluZSBJUFRfSEFTSExJTUlUX0hBU0hfU1BUCVhUX0hBU0hMSU1JVF9IQVNIX1NQVAogCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9ESVAJMHgwMDAxCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9EUFQJMHgwMDAyCi0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9TSVAJMHgwMDA0Ci0jZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9TUFQJMHgwMDA4CisjZGVmaW5lIGlwdF9oYXNobGltaXRfaW5mbyB4dF9oYXNobGltaXRfaW5mbwogCi1zdHJ1Y3QgaGFzaGxpbWl0X2NmZyB7Ci0JdV9pbnQzMl90IG1vZGU7CSAgLyogYml0bWFzayBvZiBJUFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KLQotCS8qIHVzZXIgc3BlY2lmaWVkICovCi0JdV9pbnQzMl90IHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCi0JdV9pbnQzMl90IG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLwotCXVfaW50MzJfdCBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KLQl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLwotfTsKLQotc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyB7Ci0JY2hhciBuYW1lIFtJRk5BTVNJWl07CQkvKiBuYW1lICovCi0Jc3RydWN0IGhhc2hsaW1pdF9jZmcgY2ZnOwotCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87Ci0KLQkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCXVuaW9uIHsKLQkJdm9pZCAqcHRyOwotCQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICptYXN0ZXI7Ci0JfSB1OwotfTsKLSNlbmRpZiAvKl9JUFRfSEFTSExJTUlUX0gqLworI2VuZGlmIC8qIF9JUFRfSEFTSExJTUlUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYuaAppbmRleCBkOTdlMjY4Li5hYjgxYTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oCkBAIC03NCw3ICs3NCw3IEBACiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiBleHRlcm4gaW50IGlwNl9yb3V0ZV9tZV9oYXJkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKK2V4dGVybiBfX3N1bTE2IG5mX2lwNl9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVfaW50OF90IHByb3RvY29sKTsKIAogZXh0ZXJuIGludCBpcHY2X25ldGZpbHRlcl9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCmluZGV4IDA2MGMxYTEuLjBkMDExOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfTE9HLmgKQEAgLTYsNyArNiw3IEBACiAjZGVmaW5lIElQNlRfTE9HX1RDUE9QVAkJMHgwMgkvKiBMb2cgVENQIG9wdGlvbnMgKi8KICNkZWZpbmUgSVA2VF9MT0dfSVBPUFQJCTB4MDQJLyogTG9nIElQIG9wdGlvbnMgKi8KICNkZWZpbmUgSVA2VF9MT0dfVUlECQkweDA4CS8qIExvZyBVSUQgb3duaW5nIGxvY2FsIHNvY2tldCAqLwotI2RlZmluZSBJUDZUX0xPR19ORkxPRwkJMHgxMAkvKiBMb2cgdXNpbmcgbmZfbG9nIGJhY2tlbmQgKi8KKyNkZWZpbmUgSVA2VF9MT0dfTkZMT0cJCTB4MTAJLyogVW5zdXBwb3J0ZWQsIGRvbid0IHVzZSAqLwogI2RlZmluZSBJUDZUX0xPR19NQVNLCQkweDFmCiAKIHN0cnVjdCBpcDZ0X2xvZ19pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggNjY0MTE2Mi4uYjNiOWI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTE0MSw3ICsxNDEsNiBAQAogewogCXN0cnVjdCB1Y3JlZAkJY3JlZHM7CQkvKiBTa2IgY3JlZGVudGlhbHMJKi8KIAlfX3UzMgkJCXBpZDsKLQlfX3UzMgkJCWRzdF9waWQ7CiAJX191MzIJCQlkc3RfZ3JvdXA7CiAJa2VybmVsX2NhcF90CQllZmZfY2FwOwogCV9fdTMyCQkJbG9naW51aWQ7CS8qIExvZ2luIChhdWRpdCkgdWlkICovCkBAIC0xNzQsNiArMTczLDcgQEAKICAqLwogI2RlZmluZSBOTE1TR19HT09ET1JERVIgMAogI2RlZmluZSBOTE1TR19HT09EU0laRSAoU0tCX01BWF9PUkRFUigwLCBOTE1TR19HT09ET1JERVIpKQorI2RlZmluZSBOTE1TR19ERUZBVUxUX1NJWkUgKE5MTVNHX0dPT0RTSVpFIC0gTkxNU0dfSERSTEVOKQogCiAKIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaCBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCmluZGV4IDFlZmU2MGMuLjJjYzk4NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0cG9sbC5oCkBAIC0xMiwyNiArMTIsMjcgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAotc3RydWN0IG5ldHBvbGw7Ci0KIHN0cnVjdCBuZXRwb2xsIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWNoYXIgZGV2X25hbWVbMTZdLCAqbmFtZTsKKwljaGFyIGRldl9uYW1lW0lGTkFNU0laXTsKKwljb25zdCBjaGFyICpuYW1lOwogCXZvaWQgKCpyeF9ob29rKShzdHJ1Y3QgbmV0cG9sbCAqLCBpbnQsIGNoYXIgKiwgaW50KTsKLQl2b2lkICgqZHJvcCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKIAl1MzIgbG9jYWxfaXAsIHJlbW90ZV9pcDsKIAl1MTYgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQ7Ci0JdW5zaWduZWQgY2hhciBsb2NhbF9tYWNbNl0sIHJlbW90ZV9tYWNbNl07CisgCXU4IGxvY2FsX21hY1tFVEhfQUxFTl0sIHJlbW90ZV9tYWNbRVRIX0FMRU5dOwogfTsKIAogc3RydWN0IG5ldHBvbGxfaW5mbyB7CisJYXRvbWljX3QgcmVmY250OwogCXNwaW5sb2NrX3QgcG9sbF9sb2NrOwogCWludCBwb2xsX293bmVyOwotCWludCB0cmllczsKIAlpbnQgcnhfZmxhZ3M7CiAJc3BpbmxvY2tfdCByeF9sb2NrOwogCXN0cnVjdCBuZXRwb2xsICpyeF9ucDsgLyogbmV0cG9sbCB0aGF0IHJlZ2lzdGVyZWQgYW4gcnhfaG9vayAqLwogCXN0cnVjdCBza19idWZmX2hlYWQgYXJwX3R4OyAvKiBsaXN0IG9mIGFycCByZXF1ZXN0cyB0byByZXBseSB0byAqLworCXN0cnVjdCBza19idWZmX2hlYWQgdHhxOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0eF93b3JrOwogfTsKIAogdm9pZCBuZXRwb2xsX3BvbGwoc3RydWN0IG5ldHBvbGwgKm5wKTsKQEAgLTQyLDcgKzQzLDcgQEAKIHZvaWQgbmV0cG9sbF9zZXRfdHJhcChpbnQgdHJhcCk7CiB2b2lkIG5ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApOwogaW50IF9fbmV0cG9sbF9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgbmV0cG9sbF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogCiAjaWZkZWYgQ09ORklHX05FVFBPTEwKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IDQ1MjI4YzEuLjYyNWZmZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMzE4LDcgKzMxOCw3IEBACiBleHRlcm4gc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKm5mc19maW5kX29wZW5fY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIGludCBtb2RlKTsKIAogLyogbGludXgvbmV0L2lwdjQvaXBjb25maWcuYzogdHJpbXMgaXAgYWRkciBvZmYgZnJvbnQgb2YgbmFtZSwgdG9vLiAqLwotZXh0ZXJuIHUzMiByb290X25mc19wYXJzZV9hZGRyKGNoYXIgKm5hbWUpOyAvKl9faW5pdCovCitleHRlcm4gX19iZTMyIHJvb3RfbmZzX3BhcnNlX2FkZHIoY2hhciAqbmFtZSk7IC8qX19pbml0Ki8KIAogc3RhdGljIGlubGluZSB2b2lkIG5mc19mYXR0cl9pbml0KHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCBlMDYwYTc2Li5jMDlkYTFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMTIxMyw2ICsxMjEzLDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMSAgICAgICAgICAgICAgMHgwNDUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiAgICAgICAgICAgICAgMHgwNDUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMyAgICAgICAgICAgICAgMHgwNDUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNCAgICAgICAgICAgICAgMHgwNTRDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNSAgICAgICAgICAgICAgMHgwNTRECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNiAgICAgICAgICAgICAgMHgwNTRFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNyAgICAgICAgICAgICAgMHgwNTRGCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2N19JREUgICAgICAgMHgwNTYwCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTVMJCTB4MTBlMApAQCAtMTg5Myw2ICsxODk3LDcgQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CUk9BRENPTQkJMHgxNGU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTIJMHgxNjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTJNCTB4MTYwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05YMl81NzA5CQkweDE2MzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMAkweDE2NDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMQkweDE2NDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMgkweDE2NDYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKaW5kZXggZDVkZDQ3MS4uMGYwYjg4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIHN0cnVjdCBzYWRiX3NhIHsKIAl1aW50MTZfdAlzYWRiX3NhX2xlbjsKIAl1aW50MTZfdAlzYWRiX3NhX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zYV9zcGk7CisJX19iZTMyCQlzYWRiX3NhX3NwaTsKIAl1aW50OF90CQlzYWRiX3NhX3JlcGxheTsKIAl1aW50OF90CQlzYWRiX3NhX3N0YXRlOwogCXVpbnQ4X3QJCXNhZGJfc2FfYXV0aDsKQEAgLTIxMSw3ICsyMTEsNyBAQAogc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0IHsKIAl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9sZW47CiAJdWludDE2X3QJc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9wb3J0OworCV9fYmUxNgkJc2FkYl94X25hdF90X3BvcnRfcG9ydDsKIAl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSA9PSA4ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCA5NDQ3YTU3Li5lZGQ0Yzg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIwLDYgKzIwLDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjZGVmaW5lIFBIWV9CQVNJQ19GRUFUVVJFUwkoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFwKIAkJCQkgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8IFwKQEAgLTQzLDE1ICs0NywyNiBAQAogI2RlZmluZSBQSFlfSEFTX0lOVEVSUlVQVAkweDAwMDAwMDAxCiAjZGVmaW5lIFBIWV9IQVNfTUFHSUNBTkVHCTB4MDAwMDAwMDIKIAorLyogSW50ZXJmYWNlIE1vZGUgZGVmaW5pdGlvbnMgKi8KK3R5cGVkZWYgZW51bSB7CisJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKKwlQSFlfSU5URVJGQUNFX01PREVfR01JSSwKKwlQSFlfSU5URVJGQUNFX01PREVfU0dNSUksCisJUEhZX0lOVEVSRkFDRV9NT0RFX1RCSSwKKwlQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKKwlQSFlfSU5URVJGQUNFX01PREVfUkdNSUksCisJUEhZX0lOVEVSRkFDRV9NT0RFX1JUQkkKK30gcGh5X2ludGVyZmFjZV90OworCiAjZGVmaW5lIE1JSV9CVVNfTUFYIDQKIAogCi0jZGVmaW5lIFBIWV9JTklUX1RJTUVPVVQgMTAwMDAwCisjZGVmaW5lIFBIWV9JTklUX1RJTUVPVVQJMTAwMDAwCiAjZGVmaW5lIFBIWV9TVEFURV9USU1FCQkxCiAjZGVmaW5lIFBIWV9GT1JDRV9USU1FT1VUCTEwCiAjZGVmaW5lIFBIWV9BTl9USU1FT1VUCQkxMAogCi0jZGVmaW5lIFBIWV9NQVhfQUREUiAzMgorI2RlZmluZSBQSFlfTUFYX0FERFIJMzIKIAogLyogVXNlZCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHRvIGEgc3BlY2lmaWMgcGh5IChtaWkgYnVzIGlkOnBoeSBkZXZpY2UgaWQpICovCiAjZGVmaW5lIFBIWV9JRF9GTVQgIiV4OiUwMngiCkBAIC04Myw4ICs5OCw4IEBACiAJaW50ICppcnE7CiB9OwogCi0jZGVmaW5lIFBIWV9JTlRFUlJVUFRfRElTQUJMRUQgMHgwCi0jZGVmaW5lIFBIWV9JTlRFUlJVUFRfRU5BQkxFRCAweDgwMDAwMDAwCisjZGVmaW5lIFBIWV9JTlRFUlJVUFRfRElTQUJMRUQJMHgwCisjZGVmaW5lIFBIWV9JTlRFUlJVUFRfRU5BQkxFRAkweDgwMDAwMDAwCiAKIC8qIFBIWSBzdGF0ZSBtYWNoaW5lIHN0YXRlczoKICAqCkBAIC0yMjYsNiArMjQxLDggQEAKIAogCXUzMiBkZXZfZmxhZ3M7CiAKKwlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOworCiAJLyogQnVzIGFkZHJlc3Mgb2YgdGhlIFBIWSAoMC0zMikgKi8KIAlpbnQgYWRkcjsKIApAQCAtMzQxLDkgKzM1OCwxMCBAQAogaW50IHBoeV9jbGVhcl9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgcGh5X2NvbmZpZ19pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIGludGVycnVwdHMpOwogc3RydWN0IHBoeV9kZXZpY2UgKiBwaHlfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCWNvbnN0IGNoYXIgKnBoeV9pZCwgdTMyIGZsYWdzKTsKKwkJY29uc3QgY2hhciAqcGh5X2lkLCB1MzIgZmxhZ3MsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOwogc3RydWN0IHBoeV9kZXZpY2UgKiBwaHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwaHlfaWQsCi0JCXZvaWQgKCpoYW5kbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqKSwgdTMyIGZsYWdzKTsKKwkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICopLCB1MzIgZmxhZ3MsCisJCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOwogdm9pZCBwaHlfZGlzY29ubmVjdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIHZvaWQgcGh5X3N0YXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb2xsLmggYi9pbmNsdWRlL2xpbnV4L3BvbGwuaAppbmRleCA1MWUxYjU2Li4yNzY5MDc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtOCw3ICs4LDggQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAvKiB+ODMyIGJ5dGVzIG9mIHN0YWNrIHNwYWNlIHVzZWQgbWF4IGluIHN5c19zZWxlY3Qvc3lzX3BvbGwgYmVmb3JlIGFsbG9jYXRpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFkaXgtdHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKaW5kZXggOTE1OGE2OC4uY2JmYTExNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYWRpeC10cmVlLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpZm5kZWYgX0xJTlVYX1JBRElYX1RSRUVfSAogI2RlZmluZSBfTElOVVhfUkFESVhfVFJFRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oIGIvaW5jbHVkZS9saW51eC9yYW5kb20uaAppbmRleCAwMjQ4YjMwLi4wMWFkNzEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhbmRvbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFuZG9tLmgKQEAgLTUxLDE2ICs1MSwxNiBAQAogZXh0ZXJuIHZvaWQgZ2V0X3JhbmRvbV9ieXRlcyh2b2lkICpidWYsIGludCBuYnl0ZXMpOwogdm9pZCBnZW5lcmF0ZV9yYW5kb21fdXVpZCh1bnNpZ25lZCBjaGFyIHV1aWRfb3V0WzE2XSk7CiAKLWV4dGVybiBfX3UzMiBzZWN1cmVfaXBfaWQoX191MzIgZGFkZHIpOwotZXh0ZXJuIHUzMiBzZWN1cmVfaXB2NF9wb3J0X2VwaGVtZXJhbChfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsIF9fdTE2IGRwb3J0KTsKLWV4dGVybiB1MzIgc2VjdXJlX2lwdjZfcG9ydF9lcGhlbWVyYWwoY29uc3QgX191MzIgKnNhZGRyLCBjb25zdCBfX3UzMiAqZGFkZHIsIAotCQkJCSAgICAgIF9fdTE2IGRwb3J0KTsKLWV4dGVybiBfX3UzMiBzZWN1cmVfdGNwX3NlcXVlbmNlX251bWJlcihfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsCi0JCQkJCV9fdTE2IHNwb3J0LCBfX3UxNiBkcG9ydCk7Ci1leHRlcm4gX191MzIgc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcihfX3UzMiAqc2FkZHIsIF9fdTMyICpkYWRkciwKLQkJCQkJICBfX3UxNiBzcG9ydCwgX191MTYgZHBvcnQpOwotZXh0ZXJuIHU2NCBzZWN1cmVfZGNjcF9zZXF1ZW5jZV9udW1iZXIoX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLAotCQkJCSAgICAgICBfX3UxNiBzcG9ydCwgX191MTYgZHBvcnQpOworZXh0ZXJuIF9fdTMyIHNlY3VyZV9pcF9pZChfX2JlMzIgZGFkZHIpOworZXh0ZXJuIHUzMiBzZWN1cmVfaXB2NF9wb3J0X2VwaGVtZXJhbChfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0KTsKK2V4dGVybiB1MzIgc2VjdXJlX2lwdjZfcG9ydF9lcGhlbWVyYWwoY29uc3QgX19iZTMyICpzYWRkciwgY29uc3QgX19iZTMyICpkYWRkciwKKwkJCQkgICAgICBfX2JlMTYgZHBvcnQpOworZXh0ZXJuIF9fdTMyIHNlY3VyZV90Y3Bfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCQlfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCk7CitleHRlcm4gX191MzIgc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcihfX2JlMzIgKnNhZGRyLCBfX2JlMzIgKmRhZGRyLAorCQkJCQkgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0KTsKK2V4dGVybiB1NjQgc2VjdXJlX2RjY3Bfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLAorCQkJCSAgICAgICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCk7CiAKICNpZm5kZWYgTU9EVUxFCiBleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW5kb21fZm9wcywgdXJhbmRvbV9mb3BzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggM2ExOGFkZC4uNDkzMjk3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC04MSw4ICs4MSw2IEBACiAKIAlSVE1fTkVXUFJFRklYCT0gNTIsCiAjZGVmaW5lIFJUTV9ORVdQUkVGSVgJUlRNX05FV1BSRUZJWAotCVJUTV9HRVRQUkVGSVgJPSA1NCwKLSNkZWZpbmUgUlRNX0dFVFBSRUZJWAlSVE1fR0VUUFJFRklYCiAKIAlSVE1fR0VUTVVMVElDQVNUID0gNTgsCiAjZGVmaW5lIFJUTV9HRVRNVUxUSUNBU1QgUlRNX0dFVE1VTFRJQ0FTVApAQCAtNTg3LDYgKzU4NSw5IEBACiAJCSAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcnRubF9zZXRfc2tfZXJyKHUzMiBncm91cCwgaW50IGVycm9yKTsKIGV4dGVybiBpbnQgcnRuZXRsaW5rX3B1dF9tZXRyaWNzKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqbWV0cmljcyk7CitleHRlcm4gaW50IHJ0bmxfcHV0X2NhY2hlaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisJCQkgICAgICB1MzIgaWQsIHUzMiB0cywgdTMyIHRzYWdlLCBsb25nIGV4cGlyZXMsCisJCQkgICAgICB1MzIgZXJyb3IpOwogCiBleHRlcm4gdm9pZCBfX3J0YV9maWxsKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjdHAuaCBiL2luY2x1ZGUvbGludXgvc2N0cC5oCmluZGV4IDZlYzY2ZGUuLjM1MTA4ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2N0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2N0cC5oCkBAIC01NywxNyArNTcsMTcgQEAKIAogLyogU2VjdGlvbiAzLjEuICBTQ1RQIENvbW1vbiBIZWFkZXIgRm9ybWF0ICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwaGRyIHsKLQlfX3UxNiBzb3VyY2U7Ci0JX191MTYgZGVzdDsKLQlfX3UzMiB2dGFnOwotCV9fdTMyIGNoZWNrc3VtOworCV9fYmUxNiBzb3VyY2U7CisJX19iZTE2IGRlc3Q7CisJX19iZTMyIHZ0YWc7CisJX19iZTMyIGNoZWNrc3VtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NjdHBoZHJfdDsKIAogLyogU2VjdGlvbiAzLjIuICBDaHVuayBGaWVsZCBEZXNjcmlwdGlvbnMuICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2NodW5raGRyIHsKIAlfX3U4IHR5cGU7CiAJX191OCBmbGFnczsKLQlfX3UxNiBsZW5ndGg7CisJX19iZTE2IGxlbmd0aDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9jaHVua2hkcl90OwogCiAKQEAgLTE1Myw4ICsxNTMsOCBAQAogICovCiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfcGFyYW1oZHIgewotCV9fdTE2IHR5cGU7Ci0JX191MTYgbGVuZ3RoOworCV9fYmUxNiB0eXBlOworCV9fYmUxNiBsZW5ndGg7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfcGFyYW1oZHJfdDsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTIwMywxMCArMjAzLDEwIEBACiAvKiBSRkMgMjk2MCBTZWN0aW9uIDMuMy4xIFBheWxvYWQgRGF0YSAoREFUQSkgKDApICovCiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfZGF0YWhkciB7Ci0JX191MzIgdHNuOwotCV9fdTE2IHN0cmVhbTsKLQlfX3UxNiBzc247Ci0JX191MzIgcHBpZDsKKwlfX2JlMzIgdHNuOworCV9fYmUxNiBzdHJlYW07CisJX19iZTE2IHNzbjsKKwlfX2JlMzIgcHBpZDsKIAlfX3U4ICBwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2RhdGFoZHJfdDsKIApAQCAtMjMyLDExICsyMzIsMTEgQEAKICAqICBlbmRwb2ludHMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfaW5pdGhkciB7Ci0JX191MzIgaW5pdF90YWc7Ci0JX191MzIgYV9yd25kOwotCV9fdTE2IG51bV9vdXRib3VuZF9zdHJlYW1zOwotCV9fdTE2IG51bV9pbmJvdW5kX3N0cmVhbXM7Ci0JX191MzIgaW5pdGlhbF90c247CisJX19iZTMyIGluaXRfdGFnOworCV9fYmUzMiBhX3J3bmQ7CisJX19iZTE2IG51bV9vdXRib3VuZF9zdHJlYW1zOworCV9fYmUxNiBudW1faW5ib3VuZF9zdHJlYW1zOworCV9fYmUzMiBpbml0aWFsX3RzbjsKIAlfX3U4ICBwYXJhbXNbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfaW5pdGhkcl90OwogCkBAIC0yNjEsNyArMjYxLDcgQEAKIC8qIFNlY3Rpb24gMy4zLjIuMSBDb29raWUgUHJlc2VydmF0aXZlICg5KSAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9jb29raWVfcHJlc2VydmVfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7Ci0JdWludDMyX3QgICAgICAgIGxpZmVzcGFuX2luY3JlbWVudDsKKwlfX2JlMzIgICAgICAgICAgbGlmZXNwYW5faW5jcmVtZW50OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX2Nvb2tpZV9wcmVzZXJ2ZV9wYXJhbV90OwogCiAvKiBTZWN0aW9uIDMuMy4yLjEgSG9zdCBOYW1lIEFkZHJlc3MgKDExKSAqLwpAQCAtMjczLDcgKzI3Myw3IEBACiAvKiBTZWN0aW9uIDMuMy4yLjEgU3VwcG9ydGVkIEFkZHJlc3MgVHlwZXMgKDEyKSAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfYWRkcnNfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdCBwYXJhbV9oZHI7Ci0JdWludDE2X3QgdHlwZXNbMF07CisJX19iZTE2IHR5cGVzWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3N1cHBvcnRlZF9hZGRyc19wYXJhbV90OwogCiAvKiBBcHBlbmRpeCBBLiBFQ04gQ2FwYWJsZSAoMzI3NjgpICovCkBAIC0yODQsNyArMjg0LDcgQEAKIC8qIEFERElQIFNlY3Rpb24gMy4yLjYgQWRhcHRpb24gTGF5ZXIgSW5kaWNhdGlvbiAqLwogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9pbmRfcGFyYW0gewogCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBhcmFtX2hkcjsKLQlfX3UzMiBhZGFwdGlvbl9pbmQ7CisJX19iZTMyIGFkYXB0aW9uX2luZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9hZGFwdGlvbl9pbmRfcGFyYW1fdDsKIAogLyogUkZDIDI5NjAuICBTZWN0aW9uIDMuMy4zIEluaXRpYXRpb24gQWNrbm93bGVkZ2VtZW50IChJTklUIEFDSykgKDIpOgpAQCAtMzE2LDExICszMTYsMTEgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgewotCV9fdTE2IHN0YXJ0OwotCV9fdTE2IGVuZDsKKwlfX2JlMTYgc3RhcnQ7CisJX19iZTE2IGVuZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgc2N0cF9nYXBfYWNrX2Jsb2NrX3Q7CiAKLXR5cGVkZWYgdWludDMyX3Qgc2N0cF9kdXBfdHNuX3Q7Cit0eXBlZGVmIF9fYmUzMiBzY3RwX2R1cF90c25fdDsKIAogdHlwZWRlZiB1bmlvbiB7CiAJc2N0cF9nYXBfYWNrX2Jsb2NrX3QJZ2FiOwpAQCAtMzI4LDEwICszMjgsMTAgQEAKIH0gc2N0cF9zYWNrX3ZhcmlhYmxlX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfc2Fja2hkciB7Ci0JX191MzIgY3VtX3Rzbl9hY2s7Ci0JX191MzIgYV9yd25kOwotCV9fdTE2IG51bV9nYXBfYWNrX2Jsb2NrczsKLQlfX3UxNiBudW1fZHVwX3RzbnM7CisJX19iZTMyIGN1bV90c25fYWNrOworCV9fYmUzMiBhX3J3bmQ7CisJX19iZTE2IG51bV9nYXBfYWNrX2Jsb2NrczsKKwlfX2JlMTYgbnVtX2R1cF90c25zOwogCXNjdHBfc2Fja192YXJpYWJsZV90IHZhcmlhYmxlWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NhY2toZHJfdDsKIApAQCAtMzcxLDcgKzM3MSw3IEBACiAgKiBhbmQgdGhlIGhpZ2hlc3QgY29uc2VjdXRpdmUgYWNraW5nIHZhbHVlLgogICovCiB0eXBlZGVmIHN0cnVjdCBzY3RwX3NodXRkb3duaGRyIHsKLQlfX3UzMiBjdW1fdHNuX2FjazsKKwlfX2JlMzIgY3VtX3Rzbl9hY2s7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfc2h1dGRvd25oZHJfdDsKIAogc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmtfdCB7CkBAIC0zODIsOCArMzgyLDggQEAKIC8qIFJGQyAyOTYwLiAgU2VjdGlvbiAzLjMuMTAgT3BlcmF0aW9uIEVycm9yIChFUlJPUikgKDkpICovCiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfZXJyaGRyIHsKLQlfX3UxNiBjYXVzZTsKLQlfX3UxNiBsZW5ndGg7CisJX19iZTE2IGNhdXNlOworCV9fYmUxNiBsZW5ndGg7CiAJX191OCAgdmFyaWFibGVbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfZXJyaGRyX3Q7CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQAogICogICBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiBFY2hvIChFQ05FKSAoMTIpCiAgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfZWNuZWhkciB7Ci0JX191MzIgbG93ZXN0X3RzbjsKKwlfX2JlMzIgbG93ZXN0X3RzbjsKIH0gc2N0cF9lY25laGRyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHNjdHBfZWNuZV9jaHVuayB7CkBAIC00NzQsNyArNDc0LDcgQEAKICAqICAgQ29uZ2VzdGlvbiBXaW5kb3cgUmVkdWNlZCAoQ1dSKSAoMTMpCiAgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfY3dyaGRyIHsKLQlfX3UzMiBsb3dlc3RfdHNuOworCV9fYmUzMiBsb3dlc3RfdHNuOwogfSBzY3RwX2N3cmhkcl90OwogCiB0eXBlZGVmIHN0cnVjdCBzY3RwX2N3cl9jaHVuayB7CkBAIC01MjksMTIgKzUyOSwxMiBAQAogICogICAgICAgY2h1bmtzIHRoaXMgZmllbGQgTVVTVCBiZSBmaWxsZWQgaW4uCiAgKi8KIHN0cnVjdCBzY3RwX2Z3ZHRzbl9za2lwIHsKLQlfX3UxNiBzdHJlYW07Ci0JX191MTYgc3NuOworCV9fYmUxNiBzdHJlYW07CisJX19iZTE2IHNzbjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBzY3RwX2Z3ZHRzbl9oZHIgewotCV9fdTMyIG5ld19jdW1fdHNuOworCV9fYmUzMiBuZXdfY3VtX3RzbjsKIAlzdHJ1Y3Qgc2N0cF9md2R0c25fc2tpcCBza2lwWzBdOwogfSBfX2F0dHJpYnV0ZSgocGFja2VkKSk7CiAKQEAgLTU3OCwxMSArNTc4LDExIEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHNjdHBfYWRkaXBfcGFyYW0gewogCXNjdHBfcGFyYW1oZHJfdAlwYXJhbV9oZHI7Ci0JX191MzIJCWNycl9pZDsJCisJX19iZTMyCQljcnJfaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWRkaXBfcGFyYW1fdDsKIAogdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hZGRpcGhkciB7Ci0JX191MzIJc2VyaWFsOworCV9fYmUzMglzZXJpYWw7CiAJX191OAlwYXJhbXNbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNjdHBfYWRkaXBoZHJfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IGIyMDBiOTguLjgzY2RlZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTgyNiw2ICs4MjYsOCBAQAogICoJU2V0cyB0aGUgb3BlbnJlcSdzIHNpZCB0byBzb2NrZXQncyBzaWQgd2l0aCBNTFMgcG9ydGlvbiB0YWtlbiBmcm9tIHBlZXIgc2lkLgogICogQGluZXRfY3NrX2Nsb25lOgogICoJU2V0cyB0aGUgbmV3IGNoaWxkIHNvY2tldCdzIHNpZCB0byB0aGUgb3BlbnJlcSBzaWQuCisgKiBAaW5ldF9jb25uX2VzdGFibGlzaGVkOgorICogICAgIFNldHMgdGhlIGNvbm5lY3Rpb24ncyBwZWVyc2lkIHRvIHRoZSBzZWNtYXJrIG9uIHNrYi4KICAqIEByZXFfY2xhc3NpZnlfZmxvdzoKICAqCVNldHMgdGhlIGZsb3cncyBzaWQgdG8gdGhlIG9wZW5yZXEgc2lkLgogICoKQEAgLTgzNiwxMCArODM4LDggQEAKICAqCXVzZWQgYnkgdGhlIFhGUk0gc3lzdGVtLgogICoJQHNlY19jdHggY29udGFpbnMgdGhlIHNlY3VyaXR5IGNvbnRleHQgaW5mb3JtYXRpb24gYmVpbmcgcHJvdmlkZWQgYnkKICAqCXRoZSB1c2VyLWxldmVsIHBvbGljeSB1cGRhdGUgcHJvZ3JhbSAoZS5nLiwgc2V0a2V5KS4KLSAqCUBzayByZWZlcnMgdG8gdGhlIHNvY2sgZnJvbSB3aGljaCB0byBkZXJpdmUgdGhlIHNlY3VyaXR5IGNvbnRleHQuCiAgKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgeHAtPnNlY3VyaXR5IGZpZWxkOyB0aGUgc2VjdXJpdHkKLSAqCWZpZWxkIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgd2hlbiB0aGUgeGZybV9wb2xpY3kgaXMgYWxsb2NhdGVkLiBPbmx5Ci0gKglvbmUgb2Ygc2VjX2N0eCBvciBzb2NrIGNhbiBiZSBzcGVjaWZpZWQuCisgKglmaWVsZCBpcyBpbml0aWFsaXplZCB0byBOVUxMIHdoZW4gdGhlIHhmcm1fcG9saWN5IGlzIGFsbG9jYXRlZC4KICAqCVJldHVybiAwIGlmIG9wZXJhdGlvbiB3YXMgc3VjY2Vzc2Z1bCAobWVtb3J5IHRvIGFsbG9jYXRlLCBsZWdhbCBjb250ZXh0KQogICogQHhmcm1fcG9saWN5X2Nsb25lX3NlY3VyaXR5OgogICoJQG9sZCBjb250YWlucyBhbiBleGlzdGluZyB4ZnJtX3BvbGljeSBpbiB0aGUgU1BELgpAQCAtODU4LDkgKzg1OCw2IEBACiAgKglEYXRhYmFzZSBieSB0aGUgWEZSTSBzeXN0ZW0uCiAgKglAc2VjX2N0eCBjb250YWlucyB0aGUgc2VjdXJpdHkgY29udGV4dCBpbmZvcm1hdGlvbiBiZWluZyBwcm92aWRlZCBieQogICoJdGhlIHVzZXItbGV2ZWwgU0EgZ2VuZXJhdGlvbiBwcm9ncmFtIChlLmcuLCBzZXRrZXkgb3IgcmFjb29uKS4KLSAqCUBwb2xzZWMgY29udGFpbnMgdGhlIHNlY3VyaXR5IGNvbnRleHQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgeGZybQotICoJcG9saWN5IHJ1bGUgZnJvbSB3aGljaCB0byB0YWtlIHRoZSBiYXNlIGNvbnRleHQuIHBvbHNlYyBtdXN0IGJlIE5VTEwKLSAqCXdoZW4gc2VjX2N0eCBpcyBzcGVjaWZpZWQuCiAgKglAc2VjaWQgY29udGFpbnMgdGhlIHNlY2lkIGZyb20gd2hpY2ggdG8gdGFrZSB0aGUgbWxzIHBvcnRpb24gb2YgdGhlIGNvbnRleHQuCiAgKglBbGxvY2F0ZSBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgeC0+c2VjdXJpdHkgZmllbGQ7IHRoZSBzZWN1cml0eQogICoJZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCB3aGVuIHRoZSB4ZnJtX3N0YXRlIGlzIGFsbG9jYXRlZC4gU2V0IHRoZQpAQCAtODg5LDExICs4ODYsNiBAQAogICoJQHhwIGNvbnRhaW5zIHRoZSBwb2xpY3kgdG8gY2hlY2sgZm9yIGEgbWF0Y2guCiAgKglAZmwgY29udGFpbnMgdGhlIGZsb3cgdG8gY2hlY2sgZm9yIGEgbWF0Y2guCiAgKglSZXR1cm4gMSBpZiB0aGVyZSBpcyBhIG1hdGNoLgotICogQHhmcm1fZmxvd19zdGF0ZV9tYXRjaDoKLSAqCUBmbCBjb250YWlucyB0aGUgZmxvdyBrZXkgdG8gbWF0Y2guCi0gKglAeGZybSBwb2ludHMgdG8gdGhlIHhmcm1fc3RhdGUgdG8gbWF0Y2guCi0gKglAeHAgcG9pbnRzIHRvIHRoZSB4ZnJtX3BvbGljeSB0byBtYXRjaC4KLSAqCVJldHVybiAxIGlmIHRoZXJlIGlzIGEgbWF0Y2guCiAgKiBAeGZybV9kZWNvZGVfc2Vzc2lvbjoKICAqCUBza2IgcG9pbnRzIHRvIHNrYiB0byBkZWNvZGUuCiAgKglAc2VjaWQgcG9pbnRzIHRvIHRoZSBmbG93IGtleSBzZWNpZCB0byBzZXQuCkBAIC0xMzczLDI1ICsxMzY1LDI0IEBACiAJaW50ICgqaW5ldF9jb25uX3JlcXVlc3QpKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIAl2b2lkICgqaW5ldF9jc2tfY2xvbmUpKHN0cnVjdCBzb2NrICpuZXdzaywgY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKKwl2b2lkICgqaW5ldF9jb25uX2VzdGFibGlzaGVkKShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQgKCpyZXFfY2xhc3NpZnlfZmxvdykoY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQogCWludCAoKnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwKLQkJCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCwgc3RydWN0IHNvY2sgKnNrKTsKKwkJCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCk7CiAJaW50ICgqeGZybV9wb2xpY3lfY2xvbmVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9wb2xpY3kgKm9sZCwgc3RydWN0IHhmcm1fcG9saWN5ICpuZXcpOwogCXZvaWQgKCp4ZnJtX3BvbGljeV9mcmVlX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CiAJaW50ICgqeGZybV9wb2xpY3lfZGVsZXRlX3NlY3VyaXR5KSAoc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CiAJaW50ICgqeGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eSkgKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAotCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgsIHN0cnVjdCB4ZnJtX3NlY19jdHggKnBvbHNlYywKKwkJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4LAogCQl1MzIgc2VjaWQpOwogCXZvaWQgKCp4ZnJtX3N0YXRlX2ZyZWVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiAJaW50ICgqeGZybV9zdGF0ZV9kZWxldGVfc2VjdXJpdHkpIChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiAJaW50ICgqeGZybV9wb2xpY3lfbG9va3VwKShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgZmxfc2VjaWQsIHU4IGRpcik7CiAJaW50ICgqeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCkoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJCQlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3QgZmxvd2kgKmZsKTsKLQlpbnQgKCp4ZnJtX2Zsb3dfc3RhdGVfbWF0Y2gpKHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtLAotCQkJc3RydWN0IHhmcm1fcG9saWN5ICp4cCk7CiAJaW50ICgqeGZybV9kZWNvZGVfc2Vzc2lvbikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpzZWNpZCwgaW50IGNrYWxsKTsKICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNICovCiAKQEAgLTI5NjYsOSArMjk1NywxNSBAQAogewogCXNlY3VyaXR5X29wcy0+aW5ldF9jc2tfY2xvbmUobmV3c2ssIHJlcSk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzZWN1cml0eV9vcHMtPmluZXRfY29ubl9lc3RhYmxpc2hlZChzaywgc2tiKTsKK30KICNlbHNlCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLICovCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV91bml4X3N0cmVhbV9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKiBzb2NrLAotCQkJCQkgICAgICAgc3RydWN0IHNvY2tldCAqIG90aGVyLCAKKwkJCQkJICAgICAgIHN0cnVjdCBzb2NrZXQgKiBvdGhlciwKIAkJCQkJICAgICAgIHN0cnVjdCBzb2NrICogbmV3c2spCiB7CiAJcmV0dXJuIDA7CkBAIC0zMTE1LDEyICszMTEyLDE3IEBACiAJCQljb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKK30KICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUktfWEZSTQogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KHhwLCBzZWNfY3R4LCBOVUxMKTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT54ZnJtX3BvbGljeV9hbGxvY19zZWN1cml0eSh4cCwgc2VjX2N0eCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fcG9saWN5X2Nsb25lKHN0cnVjdCB4ZnJtX3BvbGljeSAqb2xkLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKm5ldykKQEAgLTMxNDEsNyArMzE0Myw3IEBACiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4KQogewotCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkoeCwgc2VjX2N0eCwgTlVMTCwgMCk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eSh4LCBzZWNfY3R4LCAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfeGZybV9zdGF0ZV9hbGxvY19hY3F1aXJlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LApAQCAtMzE0OSw3ICszMTUxLDExIEBACiB7CiAJaWYgKCFwb2xzZWMpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fc3RhdGVfYWxsb2Nfc2VjdXJpdHkoeCwgTlVMTCwgcG9sc2VjLCBzZWNpZCk7CisJLyoKKwkgKiBXZSB3YW50IHRoZSBjb250ZXh0IHRvIGJlIHRha2VuIGZyb20gc2VjaWQgd2hpY2ggaXMgdXN1YWxseQorCSAqIGZyb20gdGhlIHNvY2suCisJICovCisJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9hbGxvY19zZWN1cml0eSh4LCBOVUxMLCBzZWNpZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQpAQCAtMzE3MywxMiArMzE3OSw2IEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCh4LCB4cCwgZmwpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX2Zsb3dfc3RhdGVfbWF0Y2goc3RydWN0IGZsb3dpICpmbCwKLQkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQotewotCXJldHVybiBzZWN1cml0eV9vcHMtPnhmcm1fZmxvd19zdGF0ZV9tYXRjaChmbCwgeGZybSwgeHApOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2VjaWQpCiB7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+eGZybV9kZWNvZGVfc2Vzc2lvbihza2IsIHNlY2lkLCAxKTsKQEAgLTMyNDIsMTIgKzMyNDIsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX2Zsb3dfc3RhdGVfbWF0Y2goc3RydWN0IGZsb3dpICpmbCwKLQkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKQotewotCXJldHVybiAxOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV94ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2VjaWQpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA4NTU3N2E0Li5hMDVhNWY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTIyLDEyICsyMiwxMCBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC90ZXh0c2VhcmNoLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KIAogI2RlZmluZSBIQVZFX0FMTE9DX1NLQgkJLyogRm9yIHRoZSBkcml2ZXJzIHRvIGtub3cgKi8KQEAgLTEzOSw3ICsxMzcsNyBAQAogCS8qIFdhcm5pbmc6IHRoaXMgZmllbGQgaXMgbm90IGFsd2F5cyBmaWxsZWQgaW4gKFVGTykhICovCiAJdW5zaWduZWQgc2hvcnQJZ3NvX3NlZ3M7CiAJdW5zaWduZWQgc2hvcnQgIGdzb190eXBlOwotCXVuc2lnbmVkIGludCAgICBpcDZfZnJhZ19pZDsKKwlfX2JlMzIgICAgICAgICAgaXA2X2ZyYWdfaWQ7CiAJc3RydWN0IHNrX2J1ZmYJKmZyYWdfbGlzdDsKIAlza2JfZnJhZ190CWZyYWdzW01BWF9TS0JfRlJBR1NdOwogfTsKQEAgLTIxNiw3ICsyMTQsNyBAQAogICoJQHRhaWw6IFRhaWwgcG9pbnRlcgogICoJQGVuZDogRW5kIHBvaW50ZXIKICAqCUBkZXN0cnVjdG9yOiBEZXN0cnVjdCBmdW5jdGlvbgotICoJQG5mbWFyazogQ2FuIGJlIHVzZWQgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBob29rcworICoJQG1hcms6IEdlbmVyaWMgcGFja2V0IG1hcmsKICAqCUBuZmN0OiBBc3NvY2lhdGVkIGNvbm5lY3Rpb24sIGlmIGFueQogICoJQGlwdnNfcHJvcGVydHk6IHNrYnVmZiBpcyBvd25lZCBieSBpcHZzCiAgKglAbmZjdGluZm86IFJlbGF0aW9uc2hpcCBvZiB0aGlzIHNrYiB0byB0aGUgY29ubmVjdGlvbgpAQCAtMjczLDggKzI3MSwxMSBAQAogCiAJdW5zaWduZWQgaW50CQlsZW4sCiAJCQkJZGF0YV9sZW4sCi0JCQkJbWFjX2xlbiwKLQkJCQljc3VtOworCQkJCW1hY19sZW47CisJdW5pb24geworCQlfX3dzdW0JCWNzdW07CisJCV9fdTMyCQljc3VtX29mZnNldDsKKwl9OwogCV9fdTMyCQkJcHJpb3JpdHk7CiAJX191OAkJCWxvY2FsX2RmOjEsCiAJCQkJY2xvbmVkOjEsCkBAIC0yOTUsNyArMjk2LDYgQEAKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCXN0cnVjdCBuZl9icmlkZ2VfaW5mbwkqbmZfYnJpZGdlOwogI2VuZGlmCi0JX191MzIJCQluZm1hcms7CiAjZW5kaWYgLyogQ09ORklHX05FVEZJTFRFUiAqLwogI2lmZGVmIENPTkZJR19ORVRfU0NIRUQKIAlfX3UxNgkJCXRjX2luZGV4OwkvKiB0cmFmZmljIGNvbnRyb2wgaW5kZXggKi8KQEAgLTMxMCw2ICszMTAsNyBAQAogCV9fdTMyCQkJc2VjbWFyazsKICNlbmRpZgogCisJX191MzIJCQltYXJrOwogCiAJLyogVGhlc2UgZWxlbWVudHMgbXVzdCBiZSBhdCB0aGUgZW5kLCBzZWUgYWxsb2Nfc2tiKCkgZm9yIGRldGFpbHMuICAqLwogCXVuc2lnbmVkIGludAkJdHJ1ZXNpemU7CkBAIC0xMTk5LDggKzEyMDAsNyBAQAogCiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKIAkJaW50IGVyciA9IDA7Ci0JCXVuc2lnbmVkIGludCBjc3VtID0gY3N1bV9hbmRfY29weV9mcm9tX3VzZXIoZnJvbSwKLQkJCQkJCQkgICAgc2tiX3B1dChza2IsIGNvcHkpLAorCQlfX3dzdW0gY3N1bSA9IGNzdW1fYW5kX2NvcHlfZnJvbV91c2VyKGZyb20sIHNrYl9wdXQoc2tiLCBjb3B5KSwKIAkJCQkJCQkgICAgY29weSwgMCwgJmVycik7CiAJCWlmICghZXJyKSB7CiAJCQlza2ItPmNzdW0gPSBjc3VtX2Jsb2NrX2FkZChza2ItPmNzdW0sIGNzdW0sIG9mZik7CkBAIC0xMjkzLDI0ICsxMjkzLDYgQEAKIAlyZXR1cm4gX19wc2tiX3RyaW0oc2tiLCBsZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmttYXBfc2tiX2ZyYWcoY29uc3Qgc2tiX2ZyYWdfdCAqZnJhZykKLXsKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCUJVR19PTihpbl9pcnEoKSk7Ci0KLQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0jZW5kaWYKLQlyZXR1cm4ga21hcF9hdG9taWMoZnJhZy0+cGFnZSwgS01fU0tCX0RBVEFfU09GVElSUSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBrdW5tYXBfc2tiX2ZyYWcodm9pZCAqdmFkZHIpCi17Ci0Ja3VubWFwX2F0b21pYyh2YWRkciwgS01fU0tCX0RBVEFfU09GVElSUSk7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlsb2NhbF9iaF9lbmFibGUoKTsKLSNlbmRpZgotfQotCiAjZGVmaW5lIHNrYl9xdWV1ZV93YWxrKHF1ZXVlLCBza2IpIFwKIAkJZm9yIChza2IgPSAocXVldWUpLT5uZXh0OwkJCQkJXAogCQkgICAgIHByZWZldGNoKHNrYi0+bmV4dCksIChza2IgIT0gKHN0cnVjdCBza19idWZmICopKHF1ZXVlKSk7CVwKQEAgLTEzMzUsMTUgKzEzMTcsMTUgQEAKIGV4dGVybiB2b2lkCSAgICAgICBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9raWxsX2RhdGFncmFtKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHVuc2lnbmVkIGludCBmbGFncyk7Ci1leHRlcm4gdW5zaWduZWQgaW50ICAgIHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAotCQkJCSAgICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgY3N1bSk7CitleHRlcm4gX193c3VtCSAgICAgICBza2JfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKKwkJCQkgICAgaW50IGxlbiwgX193c3VtIGNzdW0pOwogZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAogCQkJCSAgICAgdm9pZCAqdG8sIGludCBsZW4pOwogZXh0ZXJuIGludAkgICAgICAgc2tiX3N0b3JlX2JpdHMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKIAkJCQkgICAgICB2b2lkICpmcm9tLCBpbnQgbGVuKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgICAgc2tiX2NvcHlfYW5kX2NzdW1fYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIF9fd3N1bQkgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICBpbnQgb2Zmc2V0LCB1OCAqdG8sIGludCBsZW4sCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBjc3VtKTsKKwkJCQkJICAgICAgX193c3VtIGNzdW0pOwogZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pOwogZXh0ZXJuIHZvaWQJICAgICAgIHNrYl9zcGxpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMSwgY29uc3QgdTMyIGxlbik7CkBAIC0xMzk5LDcgKzEzODEsNyBAQAogCiBleHRlcm4gdm9pZCBfX25ldF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gX19zdW0xNiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoqCiAgKglza2JfY2hlY2tzdW1fY29tcGxldGUgLSBDYWxjdWxhdGUgY2hlY2tzdW0gb2YgYW4gZW50aXJlIHBhY2tldApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMzYxNDA5MC4uOTJjZDM4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNjQsNiArMjY0LDcgQEAKICNkZWZpbmUgU09MX0lQVjYJNDEKICNkZWZpbmUgU09MX0lDTVBWNgk1OAogI2RlZmluZSBTT0xfU0NUUAkxMzIKKyNkZWZpbmUgU09MX1VEUExJVEUJMTM2ICAgICAvKiBVRFAtTGl0ZSAoUkZDIDM4MjgpICovCiAjZGVmaW5lIFNPTF9SQVcJCTI1NQogI2RlZmluZSBTT0xfSVBYCQkyNTYKICNkZWZpbmUgU09MX0FYMjUJMjU3CkBAIC0yOTIsNyArMjkzLDcgQEAKIGV4dGVybiBpbnQgY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCAKIAkJCQkJICBzdHJ1Y3QgaW92ZWMgKmlvdiwgCiAJCQkJCSAgaW50IG9mZnNldCwgCi0JCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgaW50ICpjc3VtcCk7CisJCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgX193c3VtICpjc3VtcCk7CiAKIGV4dGVybiBpbnQgdmVyaWZ5X2lvdmVjKHN0cnVjdCBtc2doZHIgKm0sIHN0cnVjdCBpb3ZlYyAqaW92LCBjaGFyICphZGRyZXNzLCBpbnQgbW9kZSk7CiBleHRlcm4gaW50IG1lbWNweV90b2lvdmVjKHN0cnVjdCBpb3ZlYyAqdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NraW9zLmggYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAppbmRleCBlNmI5ZDFkLi5hYmVmNzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaApAQCAtNzIsOCArNzIsOCBAQAogI2RlZmluZSBTSU9DR0lGVFhRTEVOCTB4ODk0MgkJLyogR2V0IHRoZSB0eCBxdWV1ZSBsZW5ndGgJKi8KICNkZWZpbmUgU0lPQ1NJRlRYUUxFTgkweDg5NDMJCS8qIFNldCB0aGUgdHggcXVldWUgbGVuZ3RoIAkqLwogCi0jZGVmaW5lIFNJT0NHSUZESVZFUlQJMHg4OTQ0CQkvKiBGcmFtZSBkaXZlcnNpb24gc3VwcG9ydCAqLwotI2RlZmluZSBTSU9DU0lGRElWRVJUCTB4ODk0NQkJLyogU2V0IGZyYW1lIGRpdmVyc2lvbiBvcHRpb25zICovCisvKiBTSU9DR0lGRElWRVJUIHdhczoJMHg4OTQ0CQlGcmFtZSBkaXZlcnNpb24gc3VwcG9ydCAqLworLyogU0lPQ1NJRkRJVkVSVCB3YXM6CTB4ODk0NQkJU2V0IGZyYW1lIGRpdmVyc2lvbiBvcHRpb25zICovCiAKICNkZWZpbmUgU0lPQ0VUSFRPT0wJMHg4OTQ2CQkvKiBFdGh0b29sIGludGVyZmFjZQkJKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveGRyLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaAppbmRleCBhYzY5ZTU1Li45YTUyN2MzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaApAQCAtMTUxLDcgKzE1MSw3IEBACiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKIAl1bnNpZ25lZCBpbnQJb2Zmc2V0OwogCXNpemVfdAkJY291bnQ7Ci0JdW5zaWduZWQgaW50CWNzdW07CisJX193c3VtCQljc3VtOwogfSBza2JfcmVhZGVyX3Q7CiAKIHR5cGVkZWYgc2l6ZV90ICgqc2tiX3JlYWRfYWN0b3JfdCkoc2tiX3JlYWRlcl90ICpkZXNjLCB2b2lkICp0bywgc2l6ZV90IGxlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCBkOTg1NjJmLi45NDMxNmE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTQyNiw2ICs0MjYsOCBAQAogCU5FVF9DSVBTT1Y0X0NBQ0hFX0JVQ0tFVF9TSVpFPTExOSwKIAlORVRfQ0lQU09WNF9SQk1fT1BURk1UPTEyMCwKIAlORVRfQ0lQU09WNF9SQk1fU1RSSUNUVkFMSUQ9MTIxLAorCU5FVF9UQ1BfQVZBSUxfQ09OR19DT05UUk9MPTEyMiwKKwlORVRfVENQX0FMTE9XRURfQ09OR19DT05UUk9MPTEyMywKIH07CiAKIGVudW0gewpAQCAtNjA0LDE2ICs2MDYsNiBAQAogCU5FVF9EQ0NQX0RFRkFVTFQ9MSwKIH07CiAKLS8qIC9wcm9jL3N5cy9uZXQvZGNjcC9kZWZhdWx0ICovCi1lbnVtIHsKLQlORVRfRENDUF9ERUZBVUxUX1NFUV9XSU5ET1cgID0gMSwKLQlORVRfRENDUF9ERUZBVUxUX1JYX0NDSUQgICAgID0gMiwKLQlORVRfRENDUF9ERUZBVUxUX1RYX0NDSUQgICAgID0gMywKLQlORVRfRENDUF9ERUZBVUxUX0FDS19SQVRJTyAgID0gNCwKLQlORVRfRENDUF9ERUZBVUxUX1NFTkRfQUNLVkVDID0gNSwKLQlORVRfRENDUF9ERUZBVUxUX1NFTkRfTkRQICAgID0gNiwKLX07Ci0KIC8qIC9wcm9jL3N5cy9uZXQvaXB4ICovCiBlbnVtIHsKIAlORVRfSVBYX1BQUk9QX0JST0FEQ0FTVElORz0xLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggMmQzNmY2ZC4uM2NjNzBkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0xOSw2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KIAogc3RydWN0IHRjcGhkciB7CiAJX19iZTE2CXNvdXJjZTsKQEAgLTUxLDcgKzUyLDcgQEAKICNlcnJvcgkiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKICNlbmRpZgkKIAlfX2JlMTYJd2luZG93OwotCV9fYmUxNgljaGVjazsKKwlfX3N1bTE2CWNoZWNrOwogCV9fYmUxNgl1cmdfcHRyOwogfTsKIApAQCAtOTQsNiArOTUsNyBAQAogI2RlZmluZSBUQ1BfSU5GTwkJMTEJLyogSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjb25uZWN0aW9uLiAqLwogI2RlZmluZSBUQ1BfUVVJQ0tBQ0sJCTEyCS8qIEJsb2NrL3JlZW5hYmxlIHF1aWNrIGFja3MgKi8KICNkZWZpbmUgVENQX0NPTkdFU1RJT04JCTEzCS8qIENvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gKi8KKyNkZWZpbmUgVENQX01ENVNJRwkJMTQJLyogVENQIE1ENSBTaWduYXR1cmUgKFJGQzIzODUpICovCiAKICNkZWZpbmUgVENQSV9PUFRfVElNRVNUQU1QUwkxCiAjZGVmaW5lIFRDUElfT1BUX1NBQ0sJCTIKQEAgLTE1Nyw2ICsxNTksMTcgQEAKIAlfX3UzMgl0Y3BpX3RvdGFsX3JldHJhbnM7CiB9OwogCisvKiBmb3IgVENQX01ENVNJRyBzb2NrZXQgb3B0aW9uICovCisjZGVmaW5lIFRDUF9NRDVTSUdfTUFYS0VZTEVOCTgwCisKK3N0cnVjdCB0Y3BfbWQ1c2lnIHsKKwlzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSB0Y3BtX2FkZHI7CS8qIGFkZHJlc3MgYXNzb2NpYXRlZCAqLworCV9fdTE2CV9fdGNwbV9wYWQxOwkJCQkvKiB6ZXJvICovCisJX191MTYJdGNwbV9rZXlsZW47CQkJCS8qIGtleSBsZW5ndGggKi8KKwlfX3UzMglfX3RjcG1fcGFkMjsJCQkJLyogemVybyAqLworCV9fdTgJdGNwbV9rZXlbVENQX01ENVNJR19NQVhLRVlMRU5dOwkJLyoga2V5IChiaW5hcnkpICovCit9OworCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0xNzIsMTcgKzE4NSwxNyBAQAogfTsKIAogc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHsKLQlfX3UzMglzdGFydF9zZXE7Ci0JX191MzIJZW5kX3NlcTsKKwl1MzIJc3RhcnRfc2VxOworCXUzMgllbmRfc2VxOwogfTsKIAogc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkIHsKIC8qCVBBV1MvUlRUTSBkYXRhCSovCiAJbG9uZwl0c19yZWNlbnRfc3RhbXA7LyogVGltZSB3ZSBzdG9yZWQgdHNfcmVjZW50IChmb3IgYWdpbmcpICovCi0JX191MzIJdHNfcmVjZW50OwkvKiBUaW1lIHN0YW1wIHRvIGVjaG8gbmV4dAkJKi8KLQlfX3UzMglyY3ZfdHN2YWw7CS8qIFRpbWUgc3RhbXAgdmFsdWUgICAgICAgICAgICAgCSovCi0JX191MzIJcmN2X3RzZWNyOwkvKiBUaW1lIHN0YW1wIGVjaG8gcmVwbHkgICAgICAgIAkqLwotCV9fdTE2IAlzYXdfdHN0YW1wIDogMSwJLyogU2F3IFRJTUVTVEFNUCBvbiBsYXN0IHBhY2tldAkJKi8KKwl1MzIJdHNfcmVjZW50OwkvKiBUaW1lIHN0YW1wIHRvIGVjaG8gbmV4dAkJKi8KKwl1MzIJcmN2X3RzdmFsOwkvKiBUaW1lIHN0YW1wIHZhbHVlICAgICAgICAgICAgIAkqLworCXUzMglyY3ZfdHNlY3I7CS8qIFRpbWUgc3RhbXAgZWNobyByZXBseSAgICAgICAgCSovCisJdTE2IAlzYXdfdHN0YW1wIDogMSwJLyogU2F3IFRJTUVTVEFNUCBvbiBsYXN0IHBhY2tldAkJKi8KIAkJdHN0YW1wX29rIDogMSwJLyogVElNRVNUQU1QIHNlZW4gb24gU1lOIHBhY2tldAkJKi8KIAkJZHNhY2sgOiAxLAkvKiBELVNBQ0sgaXMgc2NoZWR1bGVkCQkJKi8KIAkJd3NjYWxlX29rIDogMSwJLyogV3NjYWxlIHNlZW4gb24gU1lOIHBhY2tldAkJKi8KQEAgLTE5MCwxNiArMjAzLDIwIEBACiAJCXNuZF93c2NhbGUgOiA0LAkvKiBXaW5kb3cgc2NhbGluZyByZWNlaXZlZCBmcm9tIHNlbmRlcgkqLwogCQlyY3Zfd3NjYWxlIDogNDsJLyogV2luZG93IHNjYWxpbmcgdG8gc2VuZCB0byByZWNlaXZlcgkqLwogLyoJU0FDS3MgZGF0YQkqLwotCV9fdTgJZWZmX3NhY2tzOwkvKiBTaXplIG9mIFNBQ0sgYXJyYXkgdG8gc2VuZCB3aXRoIG5leHQgcGFja2V0ICovCi0JX191OAludW1fc2Fja3M7CS8qIE51bWJlciBvZiBTQUNLIGJsb2NrcwkJKi8KLQlfX3UxNgl1c2VyX21zczsgIAkvKiBtc3MgcmVxdWVzdGVkIGJ5IHVzZXIgaW4gaW9jdGwgKi8KLQlfX3UxNgltc3NfY2xhbXA7CS8qIE1heGltYWwgbXNzLCBuZWdvdGlhdGVkIGF0IGNvbm5lY3Rpb24gc2V0dXAgKi8KKwl1OAllZmZfc2Fja3M7CS8qIFNpemUgb2YgU0FDSyBhcnJheSB0byBzZW5kIHdpdGggbmV4dCBwYWNrZXQgKi8KKwl1OAludW1fc2Fja3M7CS8qIE51bWJlciBvZiBTQUNLIGJsb2NrcwkJKi8KKwl1MTYJdXNlcl9tc3M7ICAJLyogbXNzIHJlcXVlc3RlZCBieSB1c2VyIGluIGlvY3RsICovCisJdTE2CW1zc19jbGFtcDsJLyogTWF4aW1hbCBtc3MsIG5lZ290aWF0ZWQgYXQgY29ubmVjdGlvbiBzZXR1cCAqLwogfTsKIAogc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgewotCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayByZXE7Ci0JX191MzIJCQkgcmN2X2lzbjsKLQlfX3UzMgkJCSBzbnRfaXNuOworCXN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAJcmVxOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJLyogT25seSB1c2VkIGJ5IFRDUCBNRDUgU2lnbmF0dXJlIHNvIGZhci4gKi8KKwlzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMJKmFmX3NwZWNpZmljOworI2VuZGlmCisJdTMyCQkJIAlyY3ZfaXNuOworCXUzMgkJCSAJc250X2lzbjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2sgKnRjcF9yc2soY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQpAQCAtMjEwLDcgKzIyNyw4IEBACiBzdHJ1Y3QgdGNwX3NvY2sgewogCS8qIGluZXRfY29ubmVjdGlvbl9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHRjcF9zb2NrICovCiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrCWluZXRfY29ubjsKLQlpbnQJdGNwX2hlYWRlcl9sZW47CS8qIEJ5dGVzIG9mIHRjcCBoZWFkZXIgdG8gc2VuZAkJKi8KKwl1MTYJdGNwX2hlYWRlcl9sZW47CS8qIEJ5dGVzIG9mIHRjcCBoZWFkZXIgdG8gc2VuZAkJKi8KKwl1MTYJeG1pdF9zaXplX2dvYWw7CS8qIEdvYWwgZm9yIHNlZ21lbnRpbmcgb3V0cHV0IHBhY2tldHMJKi8KIAogLyoKICAqCUhlYWRlciBwcmVkaWN0aW9uIGZsYWdzCkBAIC0yMjMsMTMgKzI0MSwxMyBAQAogICoJcmVhZCB0aGUgY29kZSBhbmQgdGhlIHNwZWMgc2lkZSBieSBzaWRlIChhbmQgbGF1Z2ggLi4uKQogICoJU2VlIFJGQzc5MyBhbmQgUkZDMTEyMi4gVGhlIFJGQyB3cml0ZXMgdGhlc2UgaW4gY2FwaXRhbHMuCiAgKi8KLSAJX191MzIJcmN2X254dDsJLyogV2hhdCB3ZSB3YW50IHRvIHJlY2VpdmUgbmV4dCAJKi8KLSAJX191MzIJc25kX254dDsJLyogTmV4dCBzZXF1ZW5jZSB3ZSBzZW5kCQkqLworIAl1MzIJcmN2X254dDsJLyogV2hhdCB3ZSB3YW50IHRvIHJlY2VpdmUgbmV4dCAJKi8KKyAJdTMyCXNuZF9ueHQ7CS8qIE5leHQgc2VxdWVuY2Ugd2Ugc2VuZAkJKi8KIAotIAlfX3UzMglzbmRfdW5hOwkvKiBGaXJzdCBieXRlIHdlIHdhbnQgYW4gYWNrIGZvcgkqLwotIAlfX3UzMglzbmRfc21sOwkvKiBMYXN0IGJ5dGUgb2YgdGhlIG1vc3QgcmVjZW50bHkgdHJhbnNtaXR0ZWQgc21hbGwgcGFja2V0ICovCi0JX191MzIJcmN2X3RzdGFtcDsJLyogdGltZXN0YW1wIG9mIGxhc3QgcmVjZWl2ZWQgQUNLIChmb3Iga2VlcGFsaXZlcykgKi8KLQlfX3UzMglsc25kdGltZTsJLyogdGltZXN0YW1wIG9mIGxhc3Qgc2VudCBkYXRhIHBhY2tldCAoZm9yIHJlc3RhcnQgd2luZG93KSAqLworIAl1MzIJc25kX3VuYTsJLyogRmlyc3QgYnl0ZSB3ZSB3YW50IGFuIGFjayBmb3IJKi8KKyAJdTMyCXNuZF9zbWw7CS8qIExhc3QgYnl0ZSBvZiB0aGUgbW9zdCByZWNlbnRseSB0cmFuc21pdHRlZCBzbWFsbCBwYWNrZXQgKi8KKwl1MzIJcmN2X3RzdGFtcDsJLyogdGltZXN0YW1wIG9mIGxhc3QgcmVjZWl2ZWQgQUNLIChmb3Iga2VlcGFsaXZlcykgKi8KKwl1MzIJbHNuZHRpbWU7CS8qIHRpbWVzdGFtcCBvZiBsYXN0IHNlbnQgZGF0YSBwYWNrZXQgKGZvciByZXN0YXJ0IHdpbmRvdykgKi8KIAogCS8qIERhdGEgZm9yIGRpcmVjdCBjb3B5IHRvIHVzZXIgKi8KIAlzdHJ1Y3QgewpAQCAtMjQ3LDMyICsyNjUsMzAgQEAKICNlbmRpZgogCX0gdWNvcHk7CiAKLQlfX3UzMglzbmRfd2wxOwkvKiBTZXF1ZW5jZSBmb3Igd2luZG93IHVwZGF0ZQkJKi8KLQlfX3UzMglzbmRfd25kOwkvKiBUaGUgd2luZG93IHdlIGV4cGVjdCB0byByZWNlaXZlCSovCi0JX191MzIJbWF4X3dpbmRvdzsJLyogTWF4aW1hbCB3aW5kb3cgZXZlciBzZWVuIGZyb20gcGVlcgkqLwotCV9fdTMyCW1zc19jYWNoZTsJLyogQ2FjaGVkIGVmZmVjdGl2ZSBtc3MsIG5vdCBpbmNsdWRpbmcgU0FDS1MgKi8KLQlfX3UxNgl4bWl0X3NpemVfZ29hbDsJLyogR29hbCBmb3Igc2VnbWVudGluZyBvdXRwdXQgcGFja2V0cwkqLwotCS8qIFhYWCBUd28gYnl0ZXMgaG9sZSwgdHJ5IHRvIHBhY2sgKi8KKwl1MzIJc25kX3dsMTsJLyogU2VxdWVuY2UgZm9yIHdpbmRvdyB1cGRhdGUJCSovCisJdTMyCXNuZF93bmQ7CS8qIFRoZSB3aW5kb3cgd2UgZXhwZWN0IHRvIHJlY2VpdmUJKi8KKwl1MzIJbWF4X3dpbmRvdzsJLyogTWF4aW1hbCB3aW5kb3cgZXZlciBzZWVuIGZyb20gcGVlcgkqLworCXUzMgltc3NfY2FjaGU7CS8qIENhY2hlZCBlZmZlY3RpdmUgbXNzLCBub3QgaW5jbHVkaW5nIFNBQ0tTICovCiAKLQlfX3UzMgl3aW5kb3dfY2xhbXA7CS8qIE1heGltYWwgd2luZG93IHRvIGFkdmVydGlzZQkJKi8KLQlfX3UzMglyY3Zfc3N0aHJlc2g7CS8qIEN1cnJlbnQgd2luZG93IGNsYW1wCQkJKi8KKwl1MzIJd2luZG93X2NsYW1wOwkvKiBNYXhpbWFsIHdpbmRvdyB0byBhZHZlcnRpc2UJCSovCisJdTMyCXJjdl9zc3RocmVzaDsJLyogQ3VycmVudCB3aW5kb3cgY2xhbXAJCQkqLwogCi0JX191MzIJZnJ0b19oaWdobWFyazsJLyogc25kX254dCB3aGVuIFJUTyBvY2N1cnJlZCAqLwotCV9fdTgJcmVvcmRlcmluZzsJLyogUGFja2V0IHJlb3JkZXJpbmcgbWV0cmljLgkJKi8KLQlfX3U4CWZydG9fY291bnRlcjsJLyogTnVtYmVyIG9mIG5ldyBhY2tzIGFmdGVyIFJUTyAqLwotCV9fdTgJbm9uYWdsZTsJLyogRGlzYWJsZSBOYWdsZSBhbGdvcml0aG0/ICAgICAgICAgICAgICovCi0JX191OAlrZWVwYWxpdmVfcHJvYmVzOyAvKiBudW0gb2YgYWxsb3dlZCBrZWVwIGFsaXZlIHByb2JlcwkqLworCXUzMglmcnRvX2hpZ2htYXJrOwkvKiBzbmRfbnh0IHdoZW4gUlRPIG9jY3VycmVkICovCisJdTgJcmVvcmRlcmluZzsJLyogUGFja2V0IHJlb3JkZXJpbmcgbWV0cmljLgkJKi8KKwl1OAlmcnRvX2NvdW50ZXI7CS8qIE51bWJlciBvZiBuZXcgYWNrcyBhZnRlciBSVE8gKi8KKwl1OAlub25hZ2xlOwkvKiBEaXNhYmxlIE5hZ2xlIGFsZ29yaXRobT8gICAgICAgICAgICAgKi8KKwl1OAlrZWVwYWxpdmVfcHJvYmVzOyAvKiBudW0gb2YgYWxsb3dlZCBrZWVwIGFsaXZlIHByb2JlcwkqLwogCiAvKiBSVFQgbWVhc3VyZW1lbnQgKi8KLQlfX3UzMglzcnR0OwkJLyogc21vb3RoZWQgcm91bmQgdHJpcCB0aW1lIDw8IDMJKi8KLQlfX3UzMgltZGV2OwkJLyogbWVkaXVtIGRldmlhdGlvbgkJCSovCi0JX191MzIJbWRldl9tYXg7CS8qIG1heGltYWwgbWRldiBmb3IgdGhlIGxhc3QgcnR0IHBlcmlvZAkqLwotCV9fdTMyCXJ0dHZhcjsJCS8qIHNtb290aGVkIG1kZXZfbWF4CQkJKi8KLQlfX3UzMglydHRfc2VxOwkvKiBzZXF1ZW5jZSBudW1iZXIgdG8gdXBkYXRlIHJ0dHZhcgkqLworCXUzMglzcnR0OwkJLyogc21vb3RoZWQgcm91bmQgdHJpcCB0aW1lIDw8IDMJKi8KKwl1MzIJbWRldjsJCS8qIG1lZGl1bSBkZXZpYXRpb24JCQkqLworCXUzMgltZGV2X21heDsJLyogbWF4aW1hbCBtZGV2IGZvciB0aGUgbGFzdCBydHQgcGVyaW9kCSovCisJdTMyCXJ0dHZhcjsJCS8qIHNtb290aGVkIG1kZXZfbWF4CQkJKi8KKwl1MzIJcnR0X3NlcTsJLyogc2VxdWVuY2UgbnVtYmVyIHRvIHVwZGF0ZSBydHR2YXIJKi8KIAotCV9fdTMyCXBhY2tldHNfb3V0OwkvKiBQYWNrZXRzIHdoaWNoIGFyZSAiaW4gZmxpZ2h0IgkqLwotCV9fdTMyCWxlZnRfb3V0OwkvKiBQYWNrZXRzIHdoaWNoIGxlYXZlZCBuZXR3b3JrCSovCi0JX191MzIJcmV0cmFuc19vdXQ7CS8qIFJldHJhbnNtaXR0ZWQgcGFja2V0cyBvdXQJCSovCisJdTMyCXBhY2tldHNfb3V0OwkvKiBQYWNrZXRzIHdoaWNoIGFyZSAiaW4gZmxpZ2h0IgkqLworCXUzMglsZWZ0X291dDsJLyogUGFja2V0cyB3aGljaCBsZWF2ZWQgbmV0d29yawkqLworCXUzMglyZXRyYW5zX291dDsJLyogUmV0cmFuc21pdHRlZCBwYWNrZXRzIG91dAkJKi8KIC8qCiAgKiAgICAgIE9wdGlvbnMgcmVjZWl2ZWQgKHVzdWFsbHkgb24gbGFzdCBwYWNrZXQsIHNvbWUgb25seSBvbiBTWU4gcGFja2V0cykuCiAgKi8KQEAgLTI4MSwyMCArMjk3LDIwIEBACiAvKgogICoJU2xvdyBzdGFydCBhbmQgY29uZ2VzdGlvbiBjb250cm9sIChzZWUgYWxzbyBOYWdsZSwgYW5kIEthcm4gJiBQYXJ0cmlkZ2UpCiAgKi8KLSAJX191MzIJc25kX3NzdGhyZXNoOwkvKiBTbG93IHN0YXJ0IHNpemUgdGhyZXNob2xkCQkqLwotIAlfX3UzMglzbmRfY3duZDsJLyogU2VuZGluZyBjb25nZXN0aW9uIHdpbmRvdwkJKi8KLSAJX191MTYJc25kX2N3bmRfY250OwkvKiBMaW5lYXIgaW5jcmVhc2UgY291bnRlcgkJKi8KLQlfX3UxNglzbmRfY3duZF9jbGFtcDsgLyogRG8gbm90IGFsbG93IHNuZF9jd25kIHRvIGdyb3cgYWJvdmUgdGhpcyAqLwotCV9fdTMyCXNuZF9jd25kX3VzZWQ7Ci0JX191MzIJc25kX2N3bmRfc3RhbXA7CisgCXUzMglzbmRfc3N0aHJlc2g7CS8qIFNsb3cgc3RhcnQgc2l6ZSB0aHJlc2hvbGQJCSovCisgCXUzMglzbmRfY3duZDsJLyogU2VuZGluZyBjb25nZXN0aW9uIHdpbmRvdwkJKi8KKyAJdTE2CXNuZF9jd25kX2NudDsJLyogTGluZWFyIGluY3JlYXNlIGNvdW50ZXIJCSovCisJdTE2CXNuZF9jd25kX2NsYW1wOyAvKiBEbyBub3QgYWxsb3cgc25kX2N3bmQgdG8gZ3JvdyBhYm92ZSB0aGlzICovCisJdTMyCXNuZF9jd25kX3VzZWQ7CisJdTMyCXNuZF9jd25kX3N0YW1wOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZAlvdXRfb2Zfb3JkZXJfcXVldWU7IC8qIE91dCBvZiBvcmRlciBzZWdtZW50cyBnbyBoZXJlICovCiAKLSAJX191MzIJcmN2X3duZDsJLyogQ3VycmVudCByZWNlaXZlciB3aW5kb3cJCSovCi0JX191MzIJcmN2X3d1cDsJLyogcmN2X254dCBvbiBsYXN0IHdpbmRvdyB1cGRhdGUgc2VudAkqLwotCV9fdTMyCXdyaXRlX3NlcTsJLyogVGFpbCgrMSkgb2YgZGF0YSBoZWxkIGluIHRjcCBzZW5kIGJ1ZmZlciAqLwotCV9fdTMyCXB1c2hlZF9zZXE7CS8qIExhc3QgcHVzaGVkIHNlcSwgcmVxdWlyZWQgdG8gdGFsayB0byB3aW5kb3dzICovCi0JX191MzIJY29waWVkX3NlcTsJLyogSGVhZCBvZiB5ZXQgdW5yZWFkIGRhdGEJCSovCisgCXUzMglyY3Zfd25kOwkvKiBDdXJyZW50IHJlY2VpdmVyIHdpbmRvdwkJKi8KKwl1MzIJcmN2X3d1cDsJLyogcmN2X254dCBvbiBsYXN0IHdpbmRvdyB1cGRhdGUgc2VudAkqLworCXUzMgl3cml0ZV9zZXE7CS8qIFRhaWwoKzEpIG9mIGRhdGEgaGVsZCBpbiB0Y3Agc2VuZCBidWZmZXIgKi8KKwl1MzIJcHVzaGVkX3NlcTsJLyogTGFzdCBwdXNoZWQgc2VxLCByZXF1aXJlZCB0byB0YWxrIHRvIHdpbmRvd3MgKi8KKwl1MzIJY29waWVkX3NlcTsJLyogSGVhZCBvZiB5ZXQgdW5yZWFkIGRhdGEJCSovCiAKIC8qCVNBQ0tzIGRhdGEJKi8KIAlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgZHVwbGljYXRlX3NhY2tbMV07IC8qIEQtU0FDSyBibG9jayAqLwpAQCAtMzE1LDI2ICszMzEsMjYgQEAKIAlpbnQgICAgIHJldHJhbnNtaXRfY250X2hpbnQ7CiAJaW50ICAgICBmb3J3YXJkX2NudF9oaW50OwogCi0JX191MTYJYWR2bXNzOwkJLyogQWR2ZXJ0aXNlZCBNU1MJCQkqLwotCV9fdTE2CXByaW9yX3NzdGhyZXNoOyAvKiBzc3RocmVzaCBzYXZlZCBhdCByZWNvdmVyeSBzdGFydAkqLwotCV9fdTMyCWxvc3Rfb3V0OwkvKiBMb3N0IHBhY2tldHMJCQkqLwotCV9fdTMyCXNhY2tlZF9vdXQ7CS8qIFNBQ0snZCBwYWNrZXRzCQkJKi8KLQlfX3UzMglmYWNrZXRzX291dDsJLyogRkFDSydkIHBhY2tldHMJCQkqLwotCV9fdTMyCWhpZ2hfc2VxOwkvKiBzbmRfbnh0IGF0IG9uc2V0IG9mIGNvbmdlc3Rpb24JKi8KKwl1MTYJYWR2bXNzOwkJLyogQWR2ZXJ0aXNlZCBNU1MJCQkqLworCXUxNglwcmlvcl9zc3RocmVzaDsgLyogc3N0aHJlc2ggc2F2ZWQgYXQgcmVjb3Zlcnkgc3RhcnQJKi8KKwl1MzIJbG9zdF9vdXQ7CS8qIExvc3QgcGFja2V0cwkJCSovCisJdTMyCXNhY2tlZF9vdXQ7CS8qIFNBQ0snZCBwYWNrZXRzCQkJKi8KKwl1MzIJZmFja2V0c19vdXQ7CS8qIEZBQ0snZCBwYWNrZXRzCQkJKi8KKwl1MzIJaGlnaF9zZXE7CS8qIHNuZF9ueHQgYXQgb25zZXQgb2YgY29uZ2VzdGlvbgkqLwogCi0JX191MzIJcmV0cmFuc19zdGFtcDsJLyogVGltZXN0YW1wIG9mIHRoZSBsYXN0IHJldHJhbnNtaXQsCisJdTMyCXJldHJhbnNfc3RhbXA7CS8qIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZXRyYW5zbWl0LAogCQkJCSAqIGFsc28gdXNlZCBpbiBTWU4tU0VOVCB0byByZW1lbWJlciBzdGFtcCBvZgogCQkJCSAqIHRoZSBmaXJzdCBTWU4uICovCi0JX191MzIJdW5kb19tYXJrZXI7CS8qIHRyYWNraW5nIHJldHJhbnMgc3RhcnRlZCBoZXJlLiAqLworCXUzMgl1bmRvX21hcmtlcjsJLyogdHJhY2tpbmcgcmV0cmFucyBzdGFydGVkIGhlcmUuICovCiAJaW50CXVuZG9fcmV0cmFuczsJLyogbnVtYmVyIG9mIHVuZG9hYmxlIHJldHJhbnNtaXNzaW9ucy4gKi8KLQlfX3UzMgl1cmdfc2VxOwkvKiBTZXEgb2YgcmVjZWl2ZWQgdXJnZW50IHBvaW50ZXIgKi8KLQlfX3UxNgl1cmdfZGF0YTsJLyogU2F2ZWQgb2N0ZXQgb2YgT09CIGRhdGEgYW5kIGNvbnRyb2wgZmxhZ3MgKi8KLQlfX3U4CXVyZ19tb2RlOwkvKiBJbiB1cmdlbnQgbW9kZQkJKi8KLQlfX3U4CWVjbl9mbGFnczsJLyogRUNOIHN0YXR1cyBiaXRzLgkJCSovCi0JX191MzIJc25kX3VwOwkJLyogVXJnZW50IHBvaW50ZXIJCSovCisJdTMyCXVyZ19zZXE7CS8qIFNlcSBvZiByZWNlaXZlZCB1cmdlbnQgcG9pbnRlciAqLworCXUxNgl1cmdfZGF0YTsJLyogU2F2ZWQgb2N0ZXQgb2YgT09CIGRhdGEgYW5kIGNvbnRyb2wgZmxhZ3MgKi8KKwl1OAl1cmdfbW9kZTsJLyogSW4gdXJnZW50IG1vZGUJCSovCisJdTgJZWNuX2ZsYWdzOwkvKiBFQ04gc3RhdHVzIGJpdHMuCQkJKi8KKwl1MzIJc25kX3VwOwkJLyogVXJnZW50IHBvaW50ZXIJCSovCiAKLQlfX3UzMgl0b3RhbF9yZXRyYW5zOwkvKiBUb3RhbCByZXRyYW5zbWl0cyBmb3IgZW50aXJlIGNvbm5lY3Rpb24gKi8KLQlfX3UzMglieXRlc19hY2tlZDsJLyogQXBwcm9wcmlhdGUgQnl0ZSBDb3VudGluZyAtIFJGQzM0NjUgKi8KKwl1MzIJdG90YWxfcmV0cmFuczsJLyogVG90YWwgcmV0cmFuc21pdHMgZm9yIGVudGlyZSBjb25uZWN0aW9uICovCisJdTMyCWJ5dGVzX2Fja2VkOwkvKiBBcHByb3ByaWF0ZSBCeXRlIENvdW50aW5nIC0gUkZDMzQ2NSAqLwogCiAJdW5zaWduZWQgaW50CQlrZWVwYWxpdmVfdGltZTsJICAvKiB0aW1lIGJlZm9yZSBrZWVwIGFsaXZlIHRha2VzIHBsYWNlICovCiAJdW5zaWduZWQgaW50CQlrZWVwYWxpdmVfaW50dmw7ICAvKiB0aW1lIGludGVydmFsIGJldHdlZW4ga2VlcCBhbGl2ZSBwcm9iZXMgKi8KQEAgLTM0MiwyNyArMzU4LDM1IEBACiAKIAl1bnNpZ25lZCBsb25nIGxhc3Rfc3lucV9vdmVyZmxvdzsgCiAKLQlfX3UzMgl0c29fZGVmZXJyZWQ7CisJdTMyCXRzb19kZWZlcnJlZDsKIAogLyogUmVjZWl2ZXIgc2lkZSBSVFQgZXN0aW1hdGlvbiAqLwogCXN0cnVjdCB7Ci0JCV9fdTMyCXJ0dDsKLQkJX191MzIJc2VxOwotCQlfX3UzMgl0aW1lOworCQl1MzIJcnR0OworCQl1MzIJc2VxOworCQl1MzIJdGltZTsKIAl9IHJjdl9ydHRfZXN0OwogCiAvKiBSZWNlaXZlciBxdWV1ZSBzcGFjZSAqLwogCXN0cnVjdCB7CiAJCWludAlzcGFjZTsKLQkJX191MzIJc2VxOwotCQlfX3UzMgl0aW1lOworCQl1MzIJc2VxOworCQl1MzIJdGltZTsKIAl9IHJjdnFfc3BhY2U7CiAKIC8qIFRDUC1zcGVjaWZpYyBNVFUgcHJvYmUgaW5mb3JtYXRpb24uICovCiAJc3RydWN0IHsKLQkJX191MzIJCSAgcHJvYmVfc2VxX3N0YXJ0OwotCQlfX3UzMgkJICBwcm9iZV9zZXFfZW5kOworCQl1MzIJCSAgcHJvYmVfc2VxX3N0YXJ0OworCQl1MzIJCSAgcHJvYmVfc2VxX2VuZDsKIAl9IG10dV9wcm9iZTsKKworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisvKiBUQ1AgQUYtU3BlY2lmaWMgcGFydHM7IG9ubHkgdXNlZCBieSBNRDUgU2lnbmF0dXJlIHN1cHBvcnQgc28gZmFyICovCisJc3RydWN0IHRjcF9zb2NrX2FmX29wcwkqYWZfc3BlY2lmaWM7CisKKy8qIFRDUCBNRDUgU2lnbmFndXJlIE9wdGlvbiBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCB0Y3BfbWQ1c2lnX2luZm8JKm1kNXNpZ19pbmZvOworI2VuZGlmCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0Y3Bfc29jayAqdGNwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKQEAgLTM3MiwxMSArMzk2LDE1IEBACiAKIHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayB0d19zazsKLQlfX3UzMgkJCSAgdHdfcmN2X254dDsKLQlfX3UzMgkJCSAgdHdfc25kX254dDsKLQlfX3UzMgkJCSAgdHdfcmN2X3duZDsKLQlfX3UzMgkJCSAgdHdfdHNfcmVjZW50OworCXUzMgkJCSAgdHdfcmN2X254dDsKKwl1MzIJCQkgIHR3X3NuZF9ueHQ7CisJdTMyCQkJICB0d19yY3Zfd25kOworCXUzMgkJCSAgdHdfdHNfcmVjZW50OwogCWxvbmcJCQkgIHR3X3RzX3JlY2VudF9zdGFtcDsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXUxNgkJCSAgdHdfbWQ1X2tleWxlbjsKKwl1OAkJCSAgdHdfbWQ1X2tleVtUQ1BfTUQ1U0lHX01BWEtFWUxFTl07CisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0Y3BfdHdzayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RmcmMuaCBiL2luY2x1ZGUvbGludXgvdGZyYy5oCmluZGV4IDdkYWI3ODMuLjMxYTliMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGZyYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGZyYy5oCkBAIC0xLDcgKzEsOCBAQAogI2lmbmRlZiBfTElOVVhfVEZSQ19IXwogI2RlZmluZSBfTElOVVhfVEZSQ19IXwogLyoKLSAqICBpbmNsdWRlL2xpbnV4L3RmcmMuaAorICogIFRGUkMgLSBEYXRhIFN0cnVjdHVyZXMgZm9yIHRoZSBUQ1AtRnJpZW5kbHkgUmF0ZSBDb250cm9sIGNvbmdlc3Rpb24KKyAqICAgICAgICAgY29udHJvbCBtZWNoYW5pc20gYXMgc3BlY2lmaWVkIGluIFJGQyAzNDQ4LgogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgogICogIENvcHlyaWdodCAoYykgMjAwNSBJYW4gTWNEb25hbGQgPGlhbTRAY3Mud2Fpa2F0by5hYy5uej4KQEAgLTEzLDE1ICsxNCwzMCBAQAogICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorLyoqIAl0ZnJjX3J4X2luZm8gICAgLSAgICBURlJDIFJlY2VpdmVyIERhdGEgU3RydWN0dXJlCisgKgorICogCUB0ZnJjcnhfeF9yZWN2OglyZWNlaXZlciBlc3RpbWF0ZSBvZiBzZW5kaW5nIHJhdGUgKDMuMi4yKQorICogCUB0ZnJjcnhfcnR0Oglyb3VuZC10cmlwLXRpbWUgKGNvbW11bmljYXRlZCBieSBzZW5kZXIpCisgKiAJQHRmcmNyeF9wOgljdXJyZW50IGVzdGltYXRlIG9mIGxvc3MgZXZlbnQgcmF0ZSAoMy4yLjIpCisgKi8KIHN0cnVjdCB0ZnJjX3J4X2luZm8gewogICAJX191MzIgdGZyY3J4X3hfcmVjdjsKIAlfX3UzMiB0ZnJjcnhfcnR0OwogICAJX191MzIgdGZyY3J4X3A7CiB9OwogCisvKiogCXRmcmNfdHhfaW5mbyAgICAtICAgIFRGUkMgU2VuZGVyIERhdGEgU3RydWN0dXJlCisgKgorICogCUB0ZnJjdHhfeDoJY29tcHV0ZWQgdHJhbnNtaXQgcmF0ZSAoNC4zICg0KSkKKyAqIAlAdGZyY3R4X3hfcmVjdjogcmVjZWl2ZXIgZXN0aW1hdGUgb2Ygc2VuZCByYXRlICg0LjMpCisgKiAJQHRmcmN0eF94X2NhbGM6CXJldHVybiB2YWx1ZSBvZiB0aHJvdWdocHV0IGVxdWF0aW9uICgzLjEpCisgKiAJQHRmcmN0eF9ydHQ6CShtb3ZpbmcgYXZlcmFnZSkgZXN0aW1hdGUgb2YgUlRUICg0LjMpCisgKiAJQHRmcmN0eF9wOgljdXJyZW50IGxvc3MgZXZlbnQgcmF0ZSAoNS40KQorICogCUB0ZnJjdHhfcnRvOgllc3RpbWF0ZSBvZiBSVE8sIGVxdWFscyA0KlJUVCAoNC4zKQorICogCUB0ZnJjdHhfaXBpOglpbnRlci1wYWNrZXQgaW50ZXJ2YWwgKDQuNikKKyAqLwogc3RydWN0IHRmcmNfdHhfaW5mbyB7CiAJX191MzIgdGZyY3R4X3g7CiAJX191MzIgdGZyY3R4X3hfcmVjdjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGlwY19jb25maWcuaCBiL2luY2x1ZGUvbGludXgvdGlwY19jb25maWcuaAppbmRleCAzM2E2NTM5Li5iMGM5MTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpcGNfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9saW51eC90aXBjX2NvbmZpZy5oCkBAIC0xOTQsMzQgKzE5NCwzNCBAQAogCiAKIHN0cnVjdCB0aXBjX25vZGVfaW5mbyB7Ci0JX191MzIgYWRkcjsJCQkvKiBuZXR3b3JrIGFkZHJlc3Mgb2Ygbm9kZSAqLwotCV9fdTMyIHVwOwkJCS8qIDA9ZG93biwgMT0gdXAgKi8KKwlfX2JlMzIgYWRkcjsJCQkvKiBuZXR3b3JrIGFkZHJlc3Mgb2Ygbm9kZSAqLworCV9fYmUzMiB1cDsJCQkvKiAwPWRvd24sIDE9IHVwICovCiB9OwogCiBzdHJ1Y3QgdGlwY19saW5rX2luZm8gewotCV9fdTMyIGRlc3Q7CQkJLyogbmV0d29yayBhZGRyZXNzIG9mIHBlZXIgbm9kZSAqLwotCV9fdTMyIHVwOwkJCS8qIDA9ZG93biwgMT11cCAqLworCV9fYmUzMiBkZXN0OwkJCS8qIG5ldHdvcmsgYWRkcmVzcyBvZiBwZWVyIG5vZGUgKi8KKwlfX2JlMzIgdXA7CQkJLyogMD1kb3duLCAxPXVwICovCiAJY2hhciBzdHJbVElQQ19NQVhfTElOS19OQU1FXTsJLyogbGluayBuYW1lICovCiB9OwogCiBzdHJ1Y3QgdGlwY19iZWFyZXJfY29uZmlnIHsKLQlfX3UzMiBwcmlvcml0eTsJCQkvKiBSYW5nZSBbMSwzMV0uIE92ZXJyaWRlIHBlciBsaW5rICAqLwotCV9fdTMyIGRldGVjdF9zY29wZTsgICAgIAorCV9fYmUzMiBwcmlvcml0eTsJCS8qIFJhbmdlIFsxLDMxXS4gT3ZlcnJpZGUgcGVyIGxpbmsgICovCisJX19iZTMyIGRldGVjdF9zY29wZTsKIAljaGFyIG5hbWVbVElQQ19NQVhfQkVBUkVSX05BTUVdOwogfTsKIAogc3RydWN0IHRpcGNfbGlua19jb25maWcgewotCV9fdTMyIHZhbHVlOworCV9fYmUzMiB2YWx1ZTsKIAljaGFyIG5hbWVbVElQQ19NQVhfTElOS19OQU1FXTsKIH07CiAKICNkZWZpbmUgVElQQ19OVFFfQUxMVFlQRVMgMHg4MDAwMDAwMAogCiBzdHJ1Y3QgdGlwY19uYW1lX3RhYmxlX3F1ZXJ5IHsKLQlfX3UzMiBkZXB0aDsJLyogMTp0eXBlLCAyOituYW1lIGluZm8sIDM6K3BvcnQgaW5mbywgNCs6K2RlYnVnIGluZm8gKi8KLQlfX3UzMiB0eXBlOwkvKiB7dCxsLHV9IGluZm8gaWdub3JlZCBpZiBoaWdoIGJpdCBvZiAiZGVwdGgiIGlzIHNldCAqLwotCV9fdTMyIGxvd2JvdW5kOyAvKiAoaS5lLiBkaXNwbGF5cyBhbGwgZW50cmllcyBvZiBuYW1lIHRhYmxlKSAqLwotCV9fdTMyIHVwYm91bmQ7CisJX19iZTMyIGRlcHRoOwkvKiAxOnR5cGUsIDI6K25hbWUgaW5mbywgMzorcG9ydCBpbmZvLCA0KzorZGVidWcgaW5mbyAqLworCV9fYmUzMiB0eXBlOwkvKiB7dCxsLHV9IGluZm8gaWdub3JlZCBpZiBoaWdoIGJpdCBvZiAiZGVwdGgiIGlzIHNldCAqLworCV9fYmUzMiBsb3dib3VuZDsgLyogKGkuZS4gZGlzcGxheXMgYWxsIGVudHJpZXMgb2YgbmFtZSB0YWJsZSkgKi8KKwlfX2JlMzIgdXBib3VuZDsKIH07CiAKIC8qCkBAIC0yNjIsOCArMjYyLDggQEAKICAqLwogCiBzdHJ1Y3QgdGx2X2Rlc2MgewotCV9fdTE2IHRsdl9sZW47CQkvKiBUTFYgbGVuZ3RoIChkZXNjcmlwdG9yICsgdmFsdWUpICovCi0JX191MTYgdGx2X3R5cGU7CQkvKiBUTFYgaWRlbnRpZmllciAqLworCV9fYmUxNiB0bHZfbGVuOwkJLyogVExWIGxlbmd0aCAoZGVzY3JpcHRvciArIHZhbHVlKSAqLworCV9fYmUxNiB0bHZfdHlwZTsJCS8qIFRMViBpZGVudGlmaWVyICovCiB9OwogCiAjZGVmaW5lIFRMVl9BTElHTlRPIDQKQEAgLTM3Nyw5ICszNzcsOSBAQAogCiBzdHJ1Y3QgdGlwY19jZmdfbXNnX2hkcgogewotCV9fdTMyIHRjbV9sZW47CQkvKiBNZXNzYWdlIGxlbmd0aCAoaW5jbHVkaW5nIGhlYWRlcikgKi8KLQlfX3UxNiB0Y21fdHlwZTsJCS8qIENvbW1hbmQgdHlwZSAqLwotCV9fdTE2IHRjbV9mbGFnczsJLyogQWRkaXRpb25hbCBmbGFncyAqLworCV9fYmUzMiB0Y21fbGVuOwkJLyogTWVzc2FnZSBsZW5ndGggKGluY2x1ZGluZyBoZWFkZXIpICovCisJX19iZTE2IHRjbV90eXBlOwkvKiBDb21tYW5kIHR5cGUgKi8KKwlfX2JlMTYgdGNtX2ZsYWdzOwkvKiBBZGRpdGlvbmFsIGZsYWdzICovCiAJY2hhciAgdGNtX3Jlc2VydmVkWzhdOwkvKiBVbnVzZWQgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCA3NTBmMDg1Li43NDVjNDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0xMjgsNiArMTI4LDggQEAKIAogLyogdGhpcyBpcyBhIHNwZWNpYWwgNjRiaXQgZGF0YSB0eXBlIHRoYXQgaXMgOC1ieXRlIGFsaWduZWQgKi8KICNkZWZpbmUgYWxpZ25lZF91NjQgdW5zaWduZWQgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorI2RlZmluZSBhbGlnbmVkX2JlNjQgX19iZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorI2RlZmluZSBhbGlnbmVkX2xlNjQgX19sZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQogCiAvKioKICAqIFRoZSB0eXBlIHVzZWQgZm9yIGluZGV4aW5nIG9udG8gYSBkaXNjIG9yIGRpc2MgcGFydGl0aW9uLgpAQCAtMTgwLDYgKzE4Miw4IEBACiB0eXBlZGVmIF9fdTY0IF9fYml0d2lzZSBfX2xlNjQ7CiB0eXBlZGVmIF9fdTY0IF9fYml0d2lzZSBfX2JlNjQ7CiAjZW5kaWYKK3R5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fc3VtMTY7Cit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX3dzdW07CiAKICNpZmRlZiBfX0tFUk5FTF9fCiB0eXBlZGVmIHVuc2lnbmVkIF9fYml0d2lzZV9fIGdmcF90OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmgKaW5kZXggMDE0YjQxZC4uN2UwOGMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VkcC5oCkBAIC0yMyw3ICsyMyw3IEBACiAJX19iZTE2CXNvdXJjZTsKIAlfX2JlMTYJZGVzdDsKIAlfX2JlMTYJbGVuOwotCV9fYmUxNgljaGVjazsKKwlfX3N1bTE2CWNoZWNrOwogfTsKIAogLyogVURQIHNvY2tldCBvcHRpb25zICovCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KKyNkZWZpbmUgVURQX0hUQUJMRV9TSVpFCQkxMjgKIAogc3RydWN0IHVkcF9zb2NrIHsKIAkvKiBpbmV0X3NvY2sgaGFzIHRvIGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KQEAgLTUwLDEyICs1MSwyMyBAQAogCSAqIHdoZW4gdGhlIHNvY2tldCBpcyB1bmNvcmtlZC4KIAkgKi8KIAlfX3UxNgkJIGxlbjsJCS8qIHRvdGFsIGxlbmd0aCBvZiBwZW5kaW5nIGZyYW1lcyAqLworCS8qCisJICogRmllbGRzIHNwZWNpZmljIHRvIFVEUC1MaXRlLgorCSAqLworCV9fdTE2CQkgcGNzbGVuOworCV9fdTE2CQkgcGNybGVuOworLyogaW5kaWNhdG9yIGJpdHMgdXNlZCBieSBwY2ZsYWc6ICovCisjZGVmaW5lIFVEUExJVEVfQklUICAgICAgMHgxICAJCS8qIHNldCBieSB1ZHBsaXRlIHByb3RvIGluaXQgZnVuY3Rpb24gKi8KKyNkZWZpbmUgVURQTElURV9TRU5EX0NDICAweDIgIAkJLyogc2V0IHZpYSB1ZHBsaXRlIHNldHNvY2tvcHQgICAgICAgICAqLworI2RlZmluZSBVRFBMSVRFX1JFQ1ZfQ0MgIDB4NAkJLyogc2V0IHZpYSB1ZHBsaXRlIHNldHNvY2t0b3B0ICAgICAgICAqLworCV9fdTgJCSBwY2ZsYWc7ICAgICAgICAvKiBtYXJrcyBzb2NrZXQgYXMgVURQLUxpdGUgaWYgPiAwICAgICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1ZHBfc29jayAqdWRwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlyZXR1cm4gKHN0cnVjdCB1ZHBfc29jayAqKXNrOwogfQorI2RlZmluZSBJU19VRFBMSVRFKF9fc2spICh1ZHBfc2soX19zayktPnBjZmxhZykKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaAppbmRleCBhNTBhMDEzLi43YzI2OWY0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtNTQ2LDYgKzU0Niw4IEBACiAvKiBNTE1FIHJlcXVlc3RzIChTSU9DU0lXTUxNRSAvIHN0cnVjdCBpd19tbG1lKSAqLwogI2RlZmluZSBJV19NTE1FX0RFQVVUSAkJMAogI2RlZmluZSBJV19NTE1FX0RJU0FTU09DCTEKKyNkZWZpbmUgSVdfTUxNRV9BVVRICQkyCisjZGVmaW5lIElXX01MTUVfQVNTT0MJCTMKIAogLyogU0lPQ1NJV0FVVEgvU0lPQ0dJV0FVVEggc3RydWN0IGl3X3BhcmFtIGZsYWdzICovCiAjZGVmaW5lIElXX0FVVEhfSU5ERVgJCTB4MEZGRgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC94ZnJtLmggYi9pbmNsdWRlL2xpbnV4L3hmcm0uaAppbmRleCA4YWU3Zjc0Li4wODhiYTgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3hmcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3hmcm0uaApAQCAtMjExLDggKzIxMSw4IEBACiAKIHN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgewogCV9fdTE2CQllbmNhcF90eXBlOwotCV9fdTE2CQllbmNhcF9zcG9ydDsKLQlfX3UxNgkJZW5jYXBfZHBvcnQ7CisJX19iZTE2CQllbmNhcF9zcG9ydDsKKwlfX2JlMTYJCWVuY2FwX2Rwb3J0OwogCXhmcm1fYWRkcmVzc190CWVuY2FwX29hOwogfTsKIApAQCAtMjg5LDcgKzI4OSw5IEBACiAKIHN0cnVjdCB4ZnJtX2FldmVudF9pZCB7CiAJc3RydWN0IHhmcm1fdXNlcnNhX2lkCQlzYV9pZDsKKwl4ZnJtX2FkZHJlc3NfdAkJCXNhZGRyOwogCV9fdTMyCQkJCWZsYWdzOworCV9fdTMyCQkJCXJlcWlkOwogfTsKIAogc3RydWN0IHhmcm1fdXNlcnNwaV9pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvemZ0YXBlLmggYi9pbmNsdWRlL2xpbnV4L3pmdGFwZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDU3YzY1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvemZ0YXBlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jaWZuZGVmIF9aRlRBUEVfSAotI2RlZmluZSBfWkZUQVBFX0gKLQotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NyBDbGF1cy1KdXN0dXMgSGVpbmUuCi0KLSBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotCi0gKgotICogJFNvdXJjZTogL2hvbWVzL2N2cy9mdGFwZS1zdGFja2VkL2luY2x1ZGUvbGludXgvemZ0YXBlLmgsdiAkCi0gKiAkUmV2aXNpb246IDEuMTIgJAotICogJERhdGU6IDE5OTcvMTAvMjEgMTE6MDI6MzcgJAotICoKLSAqICAgICAgU3BlY2lhbCBpb2N0bCBhbmQgb3RoZXIgZ2xvYmFsIGluZm8gZm9yIHRoZSB6ZnRhcGUgVkZTCi0gKiAgICAgIGludGVyZmFjZSBmb3IgdGhlIFFJQy00MC84MC8zMDEwLzMwMjAgZmxvcHB5LXRhcGUgZHJpdmVyIGZvcgotICogICAgICBMaW51eC4KLSAqLwotCi0jZGVmaW5lIFpGVEFQRV9WRVJTSU9OICAiemZ0YXBlIGZvciAiIEZUQVBFX1ZFUlNJT04KLQotI2luY2x1ZGUgPGxpbnV4L2Z0YXBlLmg+Ci0KLSNkZWZpbmUgWkZUQVBFX0xBQkVMICAgICAgICJGdGFwZSAtIFRoZSBMaW51eCBGbG9wcHkgVGFwZSBQcm9qZWN0ISIKLQotLyogQml0cyBvZiB0aGUgbWlub3IgZGV2aWNlIG51bWJlciB0aGF0IGNvbnRyb2wgdGhlIG9wZXJhdGlvbiBtb2RlICovCi0jZGVmaW5lIFpGVF9RODBfTU9ERQkJKDEgPDwgMykKLSNkZWZpbmUgWkZUX1pJUF9NT0RFCQkoMSA8PCA0KQotI2RlZmluZSBaRlRfUkFXX01PREUJCSgxIDw8IDUpCi0jZGVmaW5lIFpGVF9NSU5PUl9PUF9NQVNLCShaRlRfUTgwX01PREUJfCAJXAotCQkJCSBaRlRfWklQX01PREUJfCAJXAotCQkJCSBaRlRfUkFXX01PREUpCi0jZGVmaW5lIFpGVF9NSU5PUl9NQVNLCQkoRlRBUEVfU0VMX01BU0sJCXwJXAotCQkJCSBaRlRfTUlOT1JfT1BfTUFTSwl8CVwKLQkJCQkgRlRBUEVfTk9fUkVXSU5EKQotCi0jaWZkZWYgWkZUX09CU09MRVRFCi1zdHJ1Y3QgbXRibGtzeiB7Ci0JdW5zaWduZWQgaW50IG10X2Jsa3N6OwotfTsKLSNkZWZpbmUgTVRJT0NfWkZUQVBFX0dFVEJMS1NaIF9JT1IoJ20nLCAxMDQsIHN0cnVjdCBtdGJsa3N6KQotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLWV4dGVybiBpbnQgemZ0X2luaXQodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgX19zNjQgemZ0X2Rpdl9ibGtzeihfX3M2NCB2YWx1ZSwgX191MzIgYmxrX3N6KQotewotCWlmIChibGtfc3ogPT0gMSkgewotCQlyZXR1cm4gdmFsdWU7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChfX3M2NCkoKChfX3UzMikodmFsdWUgPj4gMTApICsgKGJsa19zeiA+PiAxMCkgLSAxKSAKLQkJCSAgICAgICAvIChibGtfc3ogPj4gMTApKTsKLQl9IAotfQotCi1zdGF0aWMgaW5saW5lIF9fczY0IHpmdF9tdWxfYmxrc3ooX19zNjQgdmFsdWUsIF9fdTMyIGJsa19zeikKLXsKLQlpZiAoYmxrX3N6ID09IDEpIHsKLQkJcmV0dXJuIHZhbHVlOwotCX0gZWxzZSB7Ci0JCS8qICBpZiBibGtfc3ogIT0gMSwgdGhlbiBpdCBpcyBhIG11bHRpcGxlIG9mIDEwMjQuIEluCi0JCSAqICB0aGlzIGNhc2UsIGB2YWx1ZScgd2lsbCBhbHNvIGZpdCBpbnRvIDMyIGJpdHMuCi0JCSAqIAotCQkgKiAgQWN0dWFsbHksIHRoaXMgbGltaXRzIHRoZSBjYXBhY2l0eSB0byA0MgotCQkgKiAgYml0cy4gVGhpcyBpcyAoMl4zMikqMTAyNCwgcm91Z2hseSBhIHRob3VzYW5kCi0JCSAqICB0aW1lcyAyR0IsIG9yIDMgVGVyYWJ5dGVzLiBIb3BlZnVsbHkgdGhpcyBpcyBlbm91Z2gKLQkJICovCi0JCXJldHVybihfX3M2NCkoKChfX3UzMikodmFsdWUpKihibGtfc3o+PjEwKSk8PDEwKTsKLQl9Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IDQ0ZjFiNjcuLjg4ZGY4ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtMzUsOSArMzUsOSBAQAogI2Vsc2UKICNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICNlbmRpZgotCV9fdTMyCQkJdmFsaWQ7Ci0JX191MzIJCQlwcmVmZXJlZDsKLQlfX3UzMgkJCXJlc2VydmVkMjsKKwlfX2JlMzIJCQl2YWxpZDsKKwlfX2JlMzIJCQlwcmVmZXJlZDsKKwlfX2JlMzIJCQlyZXNlcnZlZDI7CiAKIAlzdHJ1Y3QgaW42X2FkZHIJCXByZWZpeDsKIH07CkBAIC0xODMsNyArMTgzLDcgQEAKIAkgKiBUaGlzIHdpbGwgaW5jbHVkZSB0aGUgSUVFRSBhZGRyZXNzIHRva2VuIG9uIGxpbmtzIHRoYXQgc3VwcG9ydCBpdC4KIAkgKi8KIAotCXdvcmQgPSBhZGRyLT5zNl9hZGRyMzJbMl0gXiBhZGRyLT5zNl9hZGRyMzJbM107CisJd29yZCA9IChfX2ZvcmNlIHUzMikoYWRkci0+czZfYWRkcjMyWzJdIF4gYWRkci0+czZfYWRkcjMyWzNdKTsKIAl3b3JkIF49ICh3b3JkID4+IDE2KTsKIAl3b3JkIF49ICh3b3JkID4+IDgpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hcnAuaCBiL2luY2x1ZGUvbmV0L2FycC5oCmluZGV4IDZhM2Q5YTcuLmYwMjY2NDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FycC5oCisrKyBiL2luY2x1ZGUvbmV0L2FycC5oCkBAIC0xNiw3ICsxNiw3IEBACiAJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIHNyY19pcCwKIAkJCSB1bnNpZ25lZCBjaGFyICpkZXN0X2h3LCB1bnNpZ25lZCBjaGFyICpzcmNfaHcsIHVuc2lnbmVkIGNoYXIgKnRoKTsKIGV4dGVybiBpbnQJYXJwX2JpbmRfbmVpZ2hib3VyKHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7Ci1leHRlcm4gaW50CWFycF9tY19tYXAodTMyIGFkZHIsIHU4ICpoYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcik7CitleHRlcm4gaW50CWFycF9tY19tYXAoX19iZTMyIGFkZHIsIHU4ICpoYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRpcik7CiBleHRlcm4gdm9pZAlhcnBfaWZkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmFycF9jcmVhdGUoaW50IHR5cGUsIGludCBwdHlwZSwgX19iZTMyIGRlc3RfaXAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hdG1jbGlwLmggYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKaW5kZXggOTBmY2M5OC4uYjVhNTFhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCisrKyBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaApAQCAtMzYsNyArMzYsNyBAQAogCiAKIHN0cnVjdCBhdG1hcnBfZW50cnkgewotCXUzMgkJaXA7CQkvKiBJUCBhZGRyZXNzICovCisJX19iZTMyCQlpcDsJCS8qIElQIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgY2xpcF92Y2MJKnZjY3M7CQkvKiBhY3RpdmUgVkNDczsgTlVMTCBpZiByZXNvbHV0aW9uIGlzCiAJCQkJCSAgIHBlbmRpbmcgKi8KIAl1bnNpZ25lZCBsb25nCWV4cGlyZXM7CS8qIGVudHJ5IGV4cGlyYXRpb24gdGltZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCmluZGV4IDg5ZDc0M2MuLjNjNTYzZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKQEAgLTEyNCw3ICsxMjQsNyBAQAogCXU4ICBmbG93X2N0cmw7CiAJdTggIHByaW9yaXR5OwogCXU4ICBhY2tfdGltZXI7Ci0JdTE2IG10dTsKKwlfX2xlMTYgbXR1OwogCXU4ICBtYXhfcmV0cmFuczsKIAl1OCAgY3JlZGl0czsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJdTggIGZsb3dfY3RybDsKIAl1OCAgeG9uX2NoYXI7CiAJdTggIHhvZmZfY2hhcjsKLQl1MTYgcGFyYW1fbWFzazsKKwlfX2xlMTYgcGFyYW1fbWFzazsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcmZjb21tX3JscyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaGVja3N1bS5oIGIvaW5jbHVkZS9uZXQvY2hlY2tzdW0uaAppbmRleCBlM2VhN2NjLi4xMjQyNDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvbmV0L2NoZWNrc3VtLmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmbmRlZiBfSEFWRV9BUkNIX0NPUFlfQU5EX0NTVU1fRlJPTV9VU0VSCiBzdGF0aWMgaW5saW5lCi11bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV9mcm9tX3VzZXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgX191c2VyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCwKLQkJCQkgICAgICBpbnQgbGVuLCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCitfX3dzdW0gY3N1bV9hbmRfY29weV9mcm9tX3VzZXIgKGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHZvaWQgKmRzdCwKKwkJCQkgICAgICBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCBsZW4pKQogCQlyZXR1cm4gY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbV91c2VyKHNyYywgZHN0LCBsZW4sIHN1bSwgZXJyX3B0cik7CkBAIC00MSw4ICs0MSw4IEBACiAjZW5kaWYKIAogI2lmbmRlZiBIQVZFX0NTVU1fQ09QWV9VU0VSCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBpbnQgY3N1bV9hbmRfY29weV90b191c2VyCi0oY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyIF9fdXNlciAqZHN0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtLCBpbnQgKmVycl9wdHIpCitzdGF0aWMgX19pbmxpbmVfXyBfX3dzdW0gY3N1bV9hbmRfY29weV90b191c2VyCisoY29uc3Qgdm9pZCAqc3JjLCB2b2lkIF9fdXNlciAqZHN0LCBpbnQgbGVuLCBfX3dzdW0gc3VtLCBpbnQgKmVycl9wdHIpCiB7CiAJc3VtID0gY3N1bV9wYXJ0aWFsKHNyYywgbGVuLCBzdW0pOwogCkBAIC01MywzNSArNTMsNDQgQEAKIAlpZiAobGVuKQogCQkqZXJyX3B0ciA9IC1FRkFVTFQ7CiAKLQlyZXR1cm4gLTE7IC8qIGludmFsaWQgY2hlY2tzdW0gKi8KKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKS0xOyAvKiBpbnZhbGlkIGNoZWNrc3VtICovCiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9hZGQodW5zaWduZWQgaW50IGNzdW0sIHVuc2lnbmVkIGludCBhZGRlbmQpCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX2FkZChfX3dzdW0gY3N1bSwgX193c3VtIGFkZGVuZCkKIHsKLQljc3VtICs9IGFkZGVuZDsKLQlyZXR1cm4gY3N1bSArIChjc3VtIDwgYWRkZW5kKTsKKwl1MzIgcmVzID0gKF9fZm9yY2UgdTMyKWNzdW07CisJcmVzICs9IChfX2ZvcmNlIHUzMilhZGRlbmQ7CisJcmV0dXJuIChfX2ZvcmNlIF9fd3N1bSkocmVzICsgKHJlcyA8IChfX2ZvcmNlIHUzMilhZGRlbmQpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3N1bV9zdWIodW5zaWduZWQgaW50IGNzdW0sIHVuc2lnbmVkIGludCBhZGRlbmQpCitzdGF0aWMgaW5saW5lIF9fd3N1bSBjc3VtX3N1YihfX3dzdW0gY3N1bSwgX193c3VtIGFkZGVuZCkKIHsKIAlyZXR1cm4gY3N1bV9hZGQoY3N1bSwgfmFkZGVuZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1jc3VtX2Jsb2NrX2FkZCh1bnNpZ25lZCBpbnQgY3N1bSwgdW5zaWduZWQgaW50IGNzdW0yLCBpbnQgb2Zmc2V0KQorc3RhdGljIGlubGluZSBfX3dzdW0KK2NzdW1fYmxvY2tfYWRkKF9fd3N1bSBjc3VtLCBfX3dzdW0gY3N1bTIsIGludCBvZmZzZXQpCiB7CisJdTMyIHN1bSA9IChfX2ZvcmNlIHUzMiljc3VtMjsKIAlpZiAob2Zmc2V0JjEpCi0JCWNzdW0yID0gKChjc3VtMiYweEZGMDBGRik8PDgpKygoY3N1bTI+PjgpJjB4RkYwMEZGKTsKLQlyZXR1cm4gY3N1bV9hZGQoY3N1bSwgY3N1bTIpOworCQlzdW0gPSAoKHN1bSYweEZGMDBGRik8PDgpKygoc3VtPj44KSYweEZGMDBGRik7CisJcmV0dXJuIGNzdW1fYWRkKGNzdW0sIChfX2ZvcmNlIF9fd3N1bSlzdW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotY3N1bV9ibG9ja19zdWIodW5zaWduZWQgaW50IGNzdW0sIHVuc2lnbmVkIGludCBjc3VtMiwgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgX193c3VtCitjc3VtX2Jsb2NrX3N1YihfX3dzdW0gY3N1bSwgX193c3VtIGNzdW0yLCBpbnQgb2Zmc2V0KQogeworCXUzMiBzdW0gPSAoX19mb3JjZSB1MzIpY3N1bTI7CiAJaWYgKG9mZnNldCYxKQotCQljc3VtMiA9ICgoY3N1bTImMHhGRjAwRkYpPDw4KSsoKGNzdW0yPj44KSYweEZGMDBGRik7Ci0JcmV0dXJuIGNzdW1fc3ViKGNzdW0sIGNzdW0yKTsKKwkJc3VtID0gKChzdW0mMHhGRjAwRkYpPDw4KSsoKHN1bT4+OCkmMHhGRjAwRkYpOworCXJldHVybiBjc3VtX3N1Yihjc3VtLCAoX19mb3JjZSBfX3dzdW0pc3VtKTsKIH0KIAorc3RhdGljIGlubGluZSBfX3dzdW0gY3N1bV91bmZvbGQoX19zdW0xNiBuKQoreworCXJldHVybiAoX19mb3JjZSBfX3dzdW0pbjsKK30KKworI2RlZmluZSBDU1VNX01BTkdMRURfMCAoKF9fZm9yY2UgX19zdW0xNikweGZmZmYpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaCBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaAppbmRleCA3MThiNGQ5Li40Yzk1MjJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCkBAIC01OCwxMCArNTgsMTAgQEAKICNkZWZpbmUgQ0lQU09fVjRfTUFQX1BBU1MgICAgICAgICAgICAgMgogCiAvKiBsaW1pdHMgKi8KLSNkZWZpbmUgQ0lQU09fVjRfTUFYX1JFTV9MVkxTICAgICAgICAgMjU2CisjZGVmaW5lIENJUFNPX1Y0X01BWF9SRU1fTFZMUyAgICAgICAgIDI1NQogI2RlZmluZSBDSVBTT19WNF9JTlZfTFZMICAgICAgICAgICAgICAweDgwMDAwMDAwCiAjZGVmaW5lIENJUFNPX1Y0X01BWF9MT0NfTFZMUyAgICAgICAgIChDSVBTT19WNF9JTlZfTFZMIC0gMSkKLSNkZWZpbmUgQ0lQU09fVjRfTUFYX1JFTV9DQVRTICAgICAgICAgNjU1MzYKKyNkZWZpbmUgQ0lQU09fVjRfTUFYX1JFTV9DQVRTICAgICAgICAgNjU1MzQKICNkZWZpbmUgQ0lQU09fVjRfSU5WX0NBVCAgICAgICAgICAgICAgMHg4MDAwMDAwMAogI2RlZmluZSBDSVBTT19WNF9NQVhfTE9DX0NBVFMgICAgICAgICAoQ0lQU09fVjRfSU5WX0NBVCAtIDEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzZmllbGQuaCBiL2luY2x1ZGUvbmV0L2RzZmllbGQuaAppbmRleCBhNzljOWUwLi5lYjY1YmYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2ZpZWxkLmgKKysrIGIvaW5jbHVkZS9uZXQvZHNmaWVsZC5oCkBAIC0yMCwxNCArMjAsMTQgQEAKIAogc3RhdGljIGlubGluZSBfX3U4IGlwdjZfZ2V0X2RzZmllbGQoc3RydWN0IGlwdjZoZHIgKmlwdjZoKQogewotCXJldHVybiBudG9ocygqKF9fdTE2ICopIGlwdjZoKSA+PiA0OworCXJldHVybiBudG9ocygqKF9fYmUxNiAqKSBpcHY2aCkgPj4gNDsKIH0KIAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2NF9jaGFuZ2VfZHNmaWVsZChzdHJ1Y3QgaXBoZHIgKmlwaCxfX3U4IG1hc2ssCiAgICAgX191OCB2YWx1ZSkKIHsKLSAgICAgICAgX191MzIgY2hlY2sgPSBudG9ocyhpcGgtPmNoZWNrKTsKKyAgICAgICAgX191MzIgY2hlY2sgPSBudG9ocygoX19mb3JjZSBfX2JlMTYpaXBoLT5jaGVjayk7CiAJX191OCBkc2ZpZWxkOwogCiAJZHNmaWVsZCA9IChpcGgtPnRvcyAmIG1hc2spIHwgdmFsdWU7CkBAIC0zNSw3ICszNSw3IEBACiAJaWYgKChjaGVjaysxKSA+PiAxNikgY2hlY2sgPSAoY2hlY2srMSkgJiAweGZmZmY7CiAJY2hlY2sgLT0gZHNmaWVsZDsKIAljaGVjayArPSBjaGVjayA+PiAxNjsgLyogYWRqdXN0IGNhcnJ5ICovCi0JaXBoLT5jaGVjayA9IGh0b25zKGNoZWNrKTsKKwlpcGgtPmNoZWNrID0gKF9fZm9yY2UgX19zdW0xNilodG9ucyhjaGVjayk7CiAJaXBoLT50b3MgPSBkc2ZpZWxkOwogfQogCkBAIC00NSw5ICs0NSw5IEBACiB7CiAgICAgICAgIF9fdTE2IHRtcDsKIAotCXRtcCA9IG50b2hzKCooX191MTYgKikgaXB2NmgpOworCXRtcCA9IG50b2hzKCooX19iZTE2ICopIGlwdjZoKTsKIAl0bXAgPSAodG1wICYgKChtYXNrIDw8IDQpIHwgMHhmMDBmKSkgfCAodmFsdWUgPDwgNCk7Ci0JKihfX3UxNiAqKSBpcHY2aCA9IGh0b25zKHRtcCk7CisJKihfX2JlMTYgKikgaXB2NmggPSBodG9ucyh0bXApOwogfQogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ZpYl9ydWxlcy5oIGIvaW5jbHVkZS9uZXQvZmliX3J1bGVzLmgKaW5kZXggOGUyZjQ3My4uYmMzYzI2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZmliX3J1bGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvZmliX3J1bGVzLmgKQEAgLTEzLDYgKzEzLDggQEAKIAlhdG9taWNfdAkJcmVmY250OwogCWludAkJCWlmaW5kZXg7CiAJY2hhcgkJCWlmbmFtZVtJRk5BTVNJWl07CisJdTMyCQkJbWFyazsKKwl1MzIJCQltYXJrX21hc2s7CiAJdTMyCQkJcHJlZjsKIAl1MzIJCQlmbGFnczsKIAl1MzIJCQl0YWJsZTsKQEAgLTUwLDYgKzUyLDcgQEAKIAkJCQkJc3RydWN0IG5sbXNnaGRyICosCiAJCQkJCXN0cnVjdCBmaWJfcnVsZV9oZHIgKik7CiAJdTMyCQkJKCpkZWZhdWx0X3ByZWYpKHZvaWQpOworCXNpemVfdAkJCSgqbmxtc2dfcGF5bG9hZCkoc3RydWN0IGZpYl9ydWxlICopOwogCiAJaW50CQkJbmxncm91cDsKIAlzdHJ1Y3QgbmxhX3BvbGljeQkqcG9saWN5OwpAQCAtNTcsNiArNjAsMTMgQEAKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiB9OwogCisjZGVmaW5lIEZSQV9HRU5FUklDX1BPTElDWSBcCisJW0ZSQV9JRk5BTUVdCT0geyAudHlwZSA9IE5MQV9TVFJJTkcsIC5sZW4gPSBJRk5BTVNJWiAtIDEgfSwgXAorCVtGUkFfUFJJT1JJVFldCT0geyAudHlwZSA9IE5MQV9VMzIgfSwgXAorCVtGUkFfRldNQVJLXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sIFwKKwlbRlJBX0ZXTUFTS10JPSB7IC50eXBlID0gTkxBX1UzMiB9LCBcCisJW0ZSQV9UQUJMRV0gICAgID0geyAudHlwZSA9IE5MQV9VMzIgfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgZmliX3J1bGVfZ2V0KHN0cnVjdCBmaWJfcnVsZSAqcnVsZSkKIHsKIAlhdG9taWNfaW5jKCZydWxlLT5yZWZjbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZmxvdy5oIGIvaW5jbHVkZS9uZXQvZmxvdy5oCmluZGV4IDVjZGEyN2MuLmNlNGIxMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2Zsb3cuaAorKysgYi9pbmNsdWRlL25ldC9mbG93LmgKQEAgLTEzLDEyICsxMywxMiBAQAogc3RydWN0IGZsb3dpIHsKIAlpbnQJb2lmOwogCWludAlpaWY7CisJX191MzIJbWFyazsKIAogCXVuaW9uIHsKIAkJc3RydWN0IHsKIAkJCV9fYmUzMgkJCWRhZGRyOwogCQkJX19iZTMyCQkJc2FkZHI7Ci0JCQlfX3UzMgkJCWZ3bWFyazsKIAkJCV9fdTgJCQl0b3M7CiAJCQlfX3U4CQkJc2NvcGU7CiAJCX0gaXA0X3U7CkBAIC0yNiwyOCArMjYsMjMgQEAKIAkJc3RydWN0IHsKIAkJCXN0cnVjdCBpbjZfYWRkcgkJZGFkZHI7CiAJCQlzdHJ1Y3QgaW42X2FkZHIJCXNhZGRyOwotCQkJX191MzIJCQlmd21hcms7Ci0JCQlfX3UzMgkJCWZsb3dsYWJlbDsKKwkJCV9fYmUzMgkJCWZsb3dsYWJlbDsKIAkJfSBpcDZfdTsKIAogCQlzdHJ1Y3QgewogCQkJX19sZTE2CQkJZGFkZHI7CiAJCQlfX2xlMTYJCQlzYWRkcjsKLQkJCV9fdTMyCQkJZndtYXJrOwogCQkJX191OAkJCXNjb3BlOwogCQl9IGRuX3U7CiAJfSBubF91OwogI2RlZmluZSBmbGRfZHN0CQlubF91LmRuX3UuZGFkZHIKICNkZWZpbmUgZmxkX3NyYwkJbmxfdS5kbl91LnNhZGRyCi0jZGVmaW5lIGZsZF9md21hcmsJbmxfdS5kbl91LmZ3bWFyawogI2RlZmluZSBmbGRfc2NvcGUJbmxfdS5kbl91LnNjb3BlCiAjZGVmaW5lIGZsNl9kc3QJCW5sX3UuaXA2X3UuZGFkZHIKICNkZWZpbmUgZmw2X3NyYwkJbmxfdS5pcDZfdS5zYWRkcgotI2RlZmluZSBmbDZfZndtYXJrCW5sX3UuaXA2X3UuZndtYXJrCiAjZGVmaW5lIGZsNl9mbG93bGFiZWwJbmxfdS5pcDZfdS5mbG93bGFiZWwKICNkZWZpbmUgZmw0X2RzdAkJbmxfdS5pcDRfdS5kYWRkcgogI2RlZmluZSBmbDRfc3JjCQlubF91LmlwNF91LnNhZGRyCi0jZGVmaW5lIGZsNF9md21hcmsJbmxfdS5pcDRfdS5md21hcmsKICNkZWZpbmUgZmw0X3RvcwkJbmxfdS5pcDRfdS50b3MKICNkZWZpbmUgZmw0X3Njb3BlCW5sX3UuaXA0X3Uuc2NvcGUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAppbmRleCBiNjE5MzE0Li5hZGZmNGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaApAQCAtNTMsNiArNTMsNyBAQAogICogQHBvbGljeTogYXR0cmlidXRlIHZhbGlkYXRpb24gcG9saWN5CiAgKiBAZG9pdDogc3RhbmRhcmQgY29tbWFuZCBjYWxsYmFjawogICogQGR1bXBpdDogY2FsbGJhY2sgZm9yIGR1bXBlcnMKKyAqIEBkb25lOiBjb21wbGV0aW9uIGNhbGxiYWNrIGZvciBkdW1wcwogICogQG9wc19saXN0OiBvcGVyYXRpb25zIGxpc3QKICAqLwogc3RydWN0IGdlbmxfb3BzCkBAIC02NCw2ICs2NSw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogCWludAkJICAgICAgICgqZHVtcGl0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKKwlpbnQJCSAgICAgICAoKmRvbmUpKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7CiAJc3RydWN0IGxpc3RfaGVhZAlvcHNfbGlzdDsKIH07CiAKQEAgLTc5LDM0ICs4MSw1MSBAQAogICogQHNrYjogc29ja2V0IGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlCiAgKiBAcGlkOiBuZXRsaW5rIHBpZCB0aGUgbWVzc2FnZSBpcyBhZGRyZXNzZWQgdG8KICAqIEBzZXE6IHNlcXVlbmNlIG51bWJlciAodXN1YWxseSB0aGUgb25lIG9mIHRoZSBzZW5kZXIpCi0gKiBAdHlwZTogbmV0bGluayBtZXNzYWdlIHR5cGUKLSAqIEBoZHJsZW46IGxlbmd0aCBvZiB0aGUgdXNlciBzcGVjaWZpYyBoZWFkZXIKKyAqIEBmYW1pbHk6IGdlbmVyaWMgbmV0bGluayBmYW1pbHkKICAqIEBmbGFncyBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3MKICAqIEBjbWQ6IGdlbmVyaWMgbmV0bGluayBjb21tYW5kCi0gKiBAdmVyc2lvbjogdmVyc2lvbgogICoKICAqIFJldHVybnMgcG9pbnRlciB0byB1c2VyIHNwZWNpZmljIGhlYWRlcgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKmdlbmxtc2dfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCi0JCQkJaW50IHR5cGUsIGludCBoZHJsZW4sIGludCBmbGFncywKLQkJCQl1OCBjbWQsIHU4IHZlcnNpb24pCisJCQkJc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksIGludCBmbGFncywgdTggY21kKQogewogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCXN0cnVjdCBnZW5sbXNnaGRyICpoZHI7CiAKLQlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgdHlwZSwgR0VOTF9IRFJMRU4gKyBoZHJsZW4sIGZsYWdzKTsKKwlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZmFtaWx5LT5pZCwgR0VOTF9IRFJMRU4gKworCQkJZmFtaWx5LT5oZHJzaXplLCBmbGFncyk7CiAJaWYgKG5saCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCWhkciA9IG5sbXNnX2RhdGEobmxoKTsKIAloZHItPmNtZCA9IGNtZDsKLQloZHItPnZlcnNpb24gPSB2ZXJzaW9uOworCWhkci0+dmVyc2lvbiA9IGZhbWlseS0+dmVyc2lvbjsKIAloZHItPnJlc2VydmVkID0gMDsKIAogCXJldHVybiAoY2hhciAqKSBoZHIgKyBHRU5MX0hEUkxFTjsKIH0KIAogLyoqCisgKiBnZW5sbXNnX3B1dF9yZXBseSAtIEFkZCBnZW5lcmljIG5ldGxpbmsgaGVhZGVyIHRvIGEgcmVwbHkgbWVzc2FnZQorICogQHNrYjogc29ja2V0IGJ1ZmZlciBob2xkaW5nIHRoZSBtZXNzYWdlCisgKiBAaW5mbzogcmVjZWl2ZXIgaW5mbworICogQGZhbWlseTogZ2VuZXJpYyBuZXRsaW5rIGZhbWlseQorICogQGZsYWdzOiBuZXRsaW5rIG1lc3NhZ2UgZmxhZ3MKKyAqIEBjbWQ6IGdlbmVyaWMgbmV0bGluayBjb21tYW5kCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIHVzZXIgc3BlY2lmaWMgaGVhZGVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZ2VubG1zZ19wdXRfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAorCQkJCSAgICAgIHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LAorCQkJCSAgICAgIGludCBmbGFncywgdTggY21kKQoreworCXJldHVybiBnZW5sbXNnX3B1dChza2IsIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsIGZhbWlseSwKKwkJCSAgIGZsYWdzLCBjbWQpOworfQorCisvKioKICAqIGdlbmxtc2dfZW5kIC0gRmluYWxpemUgYSBnZW5lcmljIG5ldGxpbmsgbWVzc2FnZQogICogQHNrYjogc29ja2V0IGJ1ZmZlciB0aGUgbWVzc2FnZSBpcyBzdG9yZWQgaW4KICAqIEBoZHI6IHVzZXIgc3BlY2lmaWMgaGVhZGVyCkBAIC0xNTAsNiArMTY5LDE2IEBACiB9CiAKIC8qKgorICogZ2VubG1zZ19yZXBseSAtIHJlcGx5IHRvIGEgcmVxdWVzdAorICogQHNrYjogbmV0bGluayBtZXNzYWdlIHRvIGJlIHNlbnQgYmFjaworICogQGluZm86IHJlY2VpdmVyIGluZm9ybWF0aW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gZ2VubG1zZ191bmljYXN0KHNrYiwgaW5mby0+c25kX3BpZCk7Cit9CisKKy8qKgogICogZ2Vubmxtc2dfZGF0YSAtIGhlYWQgb2YgbWVzc2FnZSBwYXlsb2FkCiAgKiBAZ25saDogZ2VuZXRsaW5rIG1lc3NzYWdlIGhlYWRlcgogICovCkBAIC0xODcsNCArMjE2LDE1IEBACiAJcmV0dXJuIE5MTVNHX0FMSUdOKGdlbmxtc2dfbXNnX3NpemUocGF5bG9hZCkpOwogfQogCisvKioKKyAqIGdlbmxtc2dfbmV3IC0gQWxsb2NhdGUgYSBuZXcgZ2VuZXJpYyBuZXRsaW5rIG1lc3NhZ2UKKyAqIEBwYXlsb2FkOiBzaXplIG9mIHRoZSBtZXNzYWdlIHBheWxvYWQKKyAqIEBmbGFnczogdGhlIHR5cGUgb2YgbWVtb3J5IHRvIGFsbG9jYXRlLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpnZW5sbXNnX25ldyhzaXplX3QgcGF5bG9hZCwgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIG5sbXNnX25ldyhnZW5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCksIGZsYWdzKTsKK30KKworCiAjZW5kaWYJLyogX19ORVRfR0VORVJJQ19ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKaW5kZXggYjE3NGViYi4uZTZhZjM4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmgKQEAgLTEwMzcsNiArMTAzNywxMCBAQAogCS8qIGhvc3QgcGVyZm9ybXMgbXVsdGljYXN0IGRlY3J5cHRpb24gKi8KIAlpbnQgaG9zdF9tY19kZWNyeXB0OwogCisJLyogaG9zdCBzaG91bGQgc3RyaXAgSVYgYW5kIElDViBmcm9tIHByb3RlY3RlZCBmcmFtZXMgKi8KKwkvKiBtZWFuaW5nZnVsIG9ubHkgd2hlbiBoYXJkd2FyZSBkZWNyeXB0aW9uIGlzIGJlaW5nIHVzZWQgKi8KKwlpbnQgaG9zdF9zdHJpcF9pdl9pY3Y7CisKIAlpbnQgaG9zdF9vcGVuX2ZyYWc7CiAJaW50IGhvc3RfYnVpbGRfaXY7CiAJaW50IGllZWU4MDJfMXg7CQkvKiBpcyBJRUVFIDgwMi4xWCB1c2VkICovCkBAIC0xMDc2LDYgKzEwODAsOCBAQAogCWludCBwZXJmZWN0X3Jzc2k7CiAJaW50IHdvcnN0X3Jzc2k7CiAKKwl1MTYgcHJldl9zZXFfY3RsOwkvKiB1c2VkIHRvIGRyb3AgZHVwbGljYXRlIGZyYW1lcyAqLworCiAJLyogQ2FsbGJhY2sgZnVuY3Rpb25zICovCiAJdm9pZCAoKnNldF9zZWN1cml0eSkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSAqIHNlYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAppbmRleCAzNDQ4OWMxLi4zZWM3ZDA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKQEAgLTE1Miw2ICsxNTIsNyBAQAogCiBzdHJ1Y3QgaXB2Nl9kZXZzdGF0IHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2NfZGlyX2VudHJ5OworCURFRklORV9TTk1QX1NUQVQoc3RydWN0IGlwc3RhdHNfbWliLCBpcHY2KTsKIAlERUZJTkVfU05NUF9TVEFUKHN0cnVjdCBpY21wdjZfbWliLCBpY21wdjYpOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaAppbmRleCBiMzNiNDM4Li4xNmFhOTZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0Nl9jb25uZWN0aW9uX3NvY2suaApAQCAtMjcsNyArMjcsNyBAQAogCiBleHRlcm4gc3RydWN0IHJlcXVlc3Rfc29jayAqaW5ldDZfY3NrX3NlYXJjaF9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJIHN0cnVjdCByZXF1ZXN0X3NvY2sgKioqcHJldnAsCi0JCQkJCQkgY29uc3QgX191MTYgcnBvcnQsCisJCQkJCQkgY29uc3QgX19iZTE2IHJwb3J0LAogCQkJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmFkZHIsCiAJCQkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYWRkciwKIAkJCQkJCSBjb25zdCBpbnQgaWlmKTsKQEAgLTM4LDUgKzM4LDUgQEAKIAogZXh0ZXJuIHZvaWQgaW5ldDZfY3NrX2FkZHIyc29ja2FkZHIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyKTsKIAotZXh0ZXJuIGludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spOworZXh0ZXJuIGludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBpcGZyYWdvayk7CiAjZW5kaWYgLyogX0lORVQ2X0NPTk5FQ1RJT05fU09DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmggYi9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKaW5kZXggYmM2YTcxZC4uYzI4ZTQyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaApAQCAtMjYsMTEgKzI2LDExIEBACiAKIC8qIEkgaGF2ZSBubyBpZGVhIGlmIHRoaXMgaXMgYSBnb29kIGhhc2ggZm9yIHY2IG9yIG5vdC4gLURhdmVNICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpbmV0Nl9laGFzaGZuKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsIGNvbnN0IHUxNiBscG9ydCwKLQkJCQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmZhZGRyLCBjb25zdCB1MTYgZnBvcnQpCisJCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpmYWRkciwgY29uc3QgX19iZTE2IGZwb3J0KQogewotCXVuc2lnbmVkIGludCBoYXNoZW50ID0gKGxwb3J0IF4gZnBvcnQpOworCXVuc2lnbmVkIGludCBoYXNoZW50ID0gKGxwb3J0IF4gKF9fZm9yY2UgdTE2KWZwb3J0KTsKIAotCWhhc2hlbnQgXj0gKGxhZGRyLT5zNl9hZGRyMzJbM10gXiBmYWRkci0+czZfYWRkcjMyWzNdKTsKKwloYXNoZW50IF49IChfX2ZvcmNlIHUzMikobGFkZHItPnM2X2FkZHIzMlszXSBeIGZhZGRyLT5zNl9hZGRyMzJbM10pOwogCWhhc2hlbnQgXj0gaGFzaGVudCA+PiAxNjsKIAloYXNoZW50IF49IGhhc2hlbnQgPj4gODsKIAlyZXR1cm4gaGFzaGVudDsKQEAgLTQzLDcgKzQzLDcgQEAKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyID0gJm5wLT5yY3Zfc2FkZHI7CiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpmYWRkciA9ICZucC0+ZGFkZHI7CiAJY29uc3QgX191MTYgbHBvcnQgPSBpbmV0LT5udW07Ci0JY29uc3QgX191MTYgZnBvcnQgPSBpbmV0LT5kcG9ydDsKKwljb25zdCBfX2JlMTYgZnBvcnQgPSBpbmV0LT5kcG9ydDsKIAlyZXR1cm4gaW5ldDZfZWhhc2hmbihsYWRkciwgbHBvcnQsIGZhZGRyLCBmcG9ydCk7CiB9CiAKQEAgLTU3LDcgKzU3LDcgQEAKICAqLwogZXh0ZXJuIHN0cnVjdCBzb2NrICpfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCSAgIGNvbnN0IHUxNiBzcG9ydCwKKwkJCQkJICAgY29uc3QgX19iZTE2IHNwb3J0LAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCB1MTYgaG51bSwKIAkJCQkJICAgY29uc3QgaW50IGRpZik7CkBAIC02OSw3ICs2OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKl9faW5ldDZfbG9va3VwKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKIAkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCQkgIGNvbnN0IHUxNiBzcG9ydCwKKwkJCQkJICBjb25zdCBfX2JlMTYgc3BvcnQsCiAJCQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJICBjb25zdCB1MTYgaG51bSwKIAkJCQkJICBjb25zdCBpbnQgZGlmKQpAQCAtODMsOCArODMsOCBAQAogfQogCiBleHRlcm4gc3RydWN0IHNvY2sgKmluZXQ2X2xvb2t1cChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHUxNiBzcG9ydCwKLQkJCQkgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgY29uc3QgdTE2IGRwb3J0LAorCQkJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBfX2JlMTYgc3BvcnQsCisJCQkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IF9fYmUxNiBkcG9ydCwKIAkJCQkgY29uc3QgaW50IGRpZik7CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKSAqLwogI2VuZGlmIC8qIF9JTkVUNl9IQVNIVEFCTEVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCmluZGV4IDBiY2Y5ZjIuLmJmMTZkOTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKICNpbmNsdWRlIDxuZXQvaW5ldF9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3JlcXVlc3Rfc29jay5oPgpAQCAtMzYsNyArMzcsOCBAQAogICogKGkuZS4gdGhpbmdzIHRoYXQgZGVwZW5kIG9uIHRoZSBhZGRyZXNzIGZhbWlseSkKICAqLwogc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyB7Ci0JaW50CSAgICAoKnF1ZXVlX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsIGludCBpcGZyYWdvayk7CisJaW50CSAgICAoKnF1ZXVlX3htaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkgIGludCBpcGZyYWdvayk7CiAJdm9pZAkgICAgKCpzZW5kX2NoZWNrKShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQJICAgICgqcmVidWlsZF9oZWFkZXIpKHN0cnVjdCBzb2NrICpzayk7CkBAIC00NSw3ICs0Nyw4IEBACiAJCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAogCQkJCSAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CiAJaW50CSAgICAoKnJlbWVtYmVyX3N0YW1wKShzdHJ1Y3Qgc29jayAqc2spOwotCV9fdTE2CSAgICBuZXRfaGVhZGVyX2xlbjsKKwl1MTYJICAgIG5ldF9oZWFkZXJfbGVuOworCXUxNgkgICAgc29ja2FkZHJfbGVuOwogCWludAkgICAgKCpzZXRzb2Nrb3B0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsIAogCQkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CiAJaW50CSAgICAoKmdldHNvY2tvcHQpKHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgCkBAIC01Nyw3ICs2MCw2IEBACiAJCQkJaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOwogCXZvaWQJICAgICgqYWRkcjJzb2NrYWRkcikoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0JaW50IHNvY2thZGRyX2xlbjsKIH07CiAKIC8qKiBpbmV0X2Nvbm5lY3Rpb25fc29jayAtIElORVQgY29ubmVjdGlvbiBvcmllbnRlZCBzb2NrCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAppbmRleCA3ODQ5ODQ0Li4xMDExN2M4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKQEAgLTUzLDcgKzUzLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgSVBfRUNOX3NldF9jZShzdHJ1Y3QgaXBoZHIgKmlwaCkKIHsKLQl1MzIgY2hlY2sgPSBpcGgtPmNoZWNrOworCXUzMiBjaGVjayA9IChfX2ZvcmNlIHUzMilpcGgtPmNoZWNrOwogCXUzMiBlY24gPSAoaXBoLT50b3MgKyAxKSAmIElORVRfRUNOX01BU0s7CiAKIAkvKgpAQCAtNzEsOSArNzEsOSBAQAogCSAqIElORVRfRUNOX0VDVF8xID0+IGNoZWNrICs9IGh0b25zKDB4RkZGRCkKIAkgKiBJTkVUX0VDTl9FQ1RfMCA9PiBjaGVjayArPSBodG9ucygweEZGRkUpCiAJICovCi0JY2hlY2sgKz0gaHRvbnMoMHhGRkZCKSArIGh0b25zKGVjbik7CisJY2hlY2sgKz0gKF9fZm9yY2UgdTE2KWh0b25zKDB4RkZGQikgKyAoX19mb3JjZSB1MTYpaHRvbnMoZWNuKTsKIAotCWlwaC0+Y2hlY2sgPSBjaGVjayArIChjaGVjaz49MHhGRkZGKTsKKwlpcGgtPmNoZWNrID0gKF9fZm9yY2UgX19zdW0xNikoY2hlY2sgKyAoY2hlY2s+PTB4RkZGRikpOwogCWlwaC0+dG9zIHw9IElORVRfRUNOX0NFOwogCXJldHVybiAxOwogfQpAQCAtOTUsMTMgKzk1LDEzIEBACiB7CiAJaWYgKElORVRfRUNOX2lzX25vdF9lY3QoaXB2Nl9nZXRfZHNmaWVsZChpcGgpKSkKIAkJcmV0dXJuIDA7Ci0JKih1MzIqKWlwaCB8PSBodG9ubChJTkVUX0VDTl9DRSA8PCAyMCk7CisJKihfX2JlMzIqKWlwaCB8PSBodG9ubChJTkVUX0VDTl9DRSA8PCAyMCk7CiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBJUDZfRUNOX2NsZWFyKHN0cnVjdCBpcHY2aGRyICppcGgpCiB7Ci0JKih1MzIqKWlwaCAmPSB+aHRvbmwoSU5FVF9FQ05fTUFTSyA8PCAyMCk7CisJKihfX2JlMzIqKWlwaCAmPSB+aHRvbmwoSU5FVF9FQ05fTUFTSyA8PCAyMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcHY2X2NvcHlfZHNjcChzdHJ1Y3QgaXB2NmhkciAqb3V0ZXIsIHN0cnVjdCBpcHY2aGRyICppbm5lcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IGI2ZDk1ZTUuLjgzY2I5YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtOTcsNyArOTcsNyBAQAogZXh0ZXJuIGludAkJaXBfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CiBleHRlcm4gaW50CQlpcF9kb19uYXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkJaXBfc2VuZF9jaGVjayhzdHJ1Y3QgaXBoZHIgKmlwKTsKLWV4dGVybiBpbnQJCWlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlwZnJhZ29rKTsKK2V4dGVybiBpbnQJCWlwX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLCBpbnQgaXBmcmFnb2spOwogZXh0ZXJuIHZvaWQJCWlwX2luaXQodm9pZCk7CiBleHRlcm4gaW50CQlpcF9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJICAgICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLApAQCAtMTIzLDcgKzEyMyw3IEBACiAgKiAgICAgIG11bHRpY2FzdCBwYWNrZXRzLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF90cl9tY19tYXAodTMyIGFkZHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF90cl9tY19tYXAoX19iZTMyIGFkZHIsIGNoYXIgKmJ1ZikKIHsKIAlidWZbMF09MHhDMDsKIAlidWZbMV09MHgwMDsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiBzdHJ1Y3QgaXBfcmVwbHlfYXJnIHsKIAlzdHJ1Y3Qga3ZlYyBpb3ZbMV07ICAgCi0JdTMyIAkgICAgY3N1bTsgCisJX193c3VtIAkgICAgY3N1bTsKIAlpbnQJICAgIGNzdW1vZmZzZXQ7IC8qIHUxNiBvZmZzZXQgb2YgY3N1bSBpbiBpb3ZbMF0uaW92X2Jhc2UgKi8KIAkJCQkvKiAtMSBpZiBub3QgbmVlZGVkICovIAogfTsgCkBAIC0xOTIsOSArMTkyLDkgQEAKIHN0YXRpYyBpbmxpbmUKIGludCBpcF9kZWNyZWFzZV90dGwoc3RydWN0IGlwaGRyICppcGgpCiB7Ci0JdTMyIGNoZWNrID0gaXBoLT5jaGVjazsKLQljaGVjayArPSBodG9ucygweDAxMDApOwotCWlwaC0+Y2hlY2sgPSBjaGVjayArIChjaGVjaz49MHhGRkZGKTsKKwl1MzIgY2hlY2sgPSAoX19mb3JjZSB1MzIpaXBoLT5jaGVjazsKKwljaGVjayArPSAoX19mb3JjZSB1MzIpaHRvbnMoMHgwMTAwKTsKKwlpcGgtPmNoZWNrID0gKF9fZm9yY2UgX19zdW0xNikoY2hlY2sgKyAoY2hlY2s+PTB4RkZGRikpOwogCXJldHVybiAtLWlwaC0+dHRsOwogfQogCkBAIC0yMzgsOSArMjM4LDkgQEAKICAqCU1hcCBhIG11bHRpY2FzdCBJUCBvbnRvIG11bHRpY2FzdCBNQUMgZm9yIHR5cGUgZXRoZXJuZXQuCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIGlwX2V0aF9tY19tYXAodTMyIGFkZHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9ldGhfbWNfbWFwKF9fYmUzMiBuYWRkciwgY2hhciAqYnVmKQogewotCWFkZHI9bnRvaGwoYWRkcik7CisJX191MzIgYWRkcj1udG9obChuYWRkcik7CiAJYnVmWzBdPTB4MDE7CiAJYnVmWzFdPTB4MDA7CiAJYnVmWzJdPTB4NWU7CkBAIC0yNTYsMTMgKzI1NiwxNCBAQAogICoJTGVhdmUgUF9LZXkgYXMgMCB0byBiZSBmaWxsZWQgaW4gYnkgZHJpdmVyLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpcF9pYl9tY19tYXAodTMyIGFkZHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcF9pYl9tY19tYXAoX19iZTMyIG5hZGRyLCBjaGFyICpidWYpCiB7CisJX191MzIgYWRkcjsKIAlidWZbMF0gID0gMDsJCS8qIFJlc2VydmVkICovCiAJYnVmWzFdICA9IDB4ZmY7CQkvKiBNdWx0aWNhc3QgUVBOICovCiAJYnVmWzJdICA9IDB4ZmY7CiAJYnVmWzNdICA9IDB4ZmY7Ci0JYWRkciAgICA9IG50b2hsKGFkZHIpOworCWFkZHIgICAgPSBudG9obChuYWRkcik7CiAJYnVmWzRdICA9IDB4ZmY7CiAJYnVmWzVdICA9IDB4MTI7CQkvKiBsaW5rIGxvY2FsIHNjb3BlICovCiAJYnVmWzZdICA9IDB4NDA7CQkvKiBJUHY0IHNpZ25hdHVyZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2NoZWNrc3VtLmggYi9pbmNsdWRlL25ldC9pcDZfY2hlY2tzdW0uaAppbmRleCAzZGZjODg1Li42OGUyYjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcDZfY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL25ldC9pcDZfY2hlY2tzdW0uaApAQCAtMzQsNjAgKzM0LDYwIEBACiAKICNpZm5kZWYgX0hBVkVfQVJDSF9JUFY2X0NTVU0KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgc2hvcnQgaW50IGNzdW1faXB2Nl9tYWdpYyhzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCQkJICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAotCQkJCQkJICAgICBfX3UxNiBsZW4sCi0JCQkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHByb3RvLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgY3N1bSkgCitzdGF0aWMgX19pbmxpbmVfXyBfX3N1bTE2IGNzdW1faXB2Nl9tYWdpYyhjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCisJCQkJCSAgX191MzIgbGVuLCB1bnNpZ25lZCBzaG9ydCBwcm90bywKKwkJCQkJICBfX3dzdW0gY3N1bSkKIHsKIAogCWludCBjYXJyeTsKIAlfX3UzMiB1bGVuOwogCV9fdTMyIHVwcm90bzsKKwlfX3UzMiBzdW0gPSAoX19mb3JjZSB1MzIpY3N1bTsKIAotCWNzdW0gKz0gc2FkZHItPnM2X2FkZHIzMlswXTsKLQljYXJyeSA9IChjc3VtIDwgc2FkZHItPnM2X2FkZHIzMlswXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMF07CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMF0pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gc2FkZHItPnM2X2FkZHIzMlsxXTsKLQljYXJyeSA9IChjc3VtIDwgc2FkZHItPnM2X2FkZHIzMlsxXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMV07CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMV0pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gc2FkZHItPnM2X2FkZHIzMlsyXTsKLQljYXJyeSA9IChjc3VtIDwgc2FkZHItPnM2X2FkZHIzMlsyXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMl07CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMl0pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gc2FkZHItPnM2X2FkZHIzMlszXTsKLQljYXJyeSA9IChjc3VtIDwgc2FkZHItPnM2X2FkZHIzMlszXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbM107CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbM10pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gZGFkZHItPnM2X2FkZHIzMlswXTsKLQljYXJyeSA9IChjc3VtIDwgZGFkZHItPnM2X2FkZHIzMlswXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMF07CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMF0pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gZGFkZHItPnM2X2FkZHIzMlsxXTsKLQljYXJyeSA9IChjc3VtIDwgZGFkZHItPnM2X2FkZHIzMlsxXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMV07CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMV0pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gZGFkZHItPnM2X2FkZHIzMlsyXTsKLQljYXJyeSA9IChjc3VtIDwgZGFkZHItPnM2X2FkZHIzMlsyXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMl07CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMl0pOworCXN1bSArPSBjYXJyeTsKIAotCWNzdW0gKz0gZGFkZHItPnM2X2FkZHIzMlszXTsKLQljYXJyeSA9IChjc3VtIDwgZGFkZHItPnM2X2FkZHIzMlszXSk7Ci0JY3N1bSArPSBjYXJyeTsKKwlzdW0gKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbM107CisJY2FycnkgPSAoc3VtIDwgKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbM10pOworCXN1bSArPSBjYXJyeTsKIAotCXVsZW4gPSBodG9ubCgoX191MzIpIGxlbik7Ci0JY3N1bSArPSB1bGVuOwotCWNhcnJ5ID0gKGNzdW0gPCB1bGVuKTsKLQljc3VtICs9IGNhcnJ5OworCXVsZW4gPSAoX19mb3JjZSB1MzIpaHRvbmwoKF9fdTMyKSBsZW4pOworCXN1bSArPSB1bGVuOworCWNhcnJ5ID0gKHN1bSA8IHVsZW4pOworCXN1bSArPSBjYXJyeTsKIAotCXVwcm90byA9IGh0b25sKHByb3RvKTsKLQljc3VtICs9IHVwcm90bzsKLQljYXJyeSA9IChjc3VtIDwgdXByb3RvKTsKLQljc3VtICs9IGNhcnJ5OworCXVwcm90byA9IChfX2ZvcmNlIHUzMilodG9ubChwcm90byk7CisJc3VtICs9IHVwcm90bzsKKwljYXJyeSA9IChzdW0gPCB1cHJvdG8pOworCXN1bSArPSBjYXJyeTsKIAotCXJldHVybiBjc3VtX2ZvbGQoY3N1bSk7CisJcmV0dXJuIGNzdW1fZm9sZCgoX19mb3JjZSBfX3dzdW0pY3N1bSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IGU0NDM4ZGUuLmY5Y2RlNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTEwNyw2ICsxMDcsMTEgQEAKIAl1OAkJCQlydDZpX3Byb3RvY29sOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldDZfZGV2ICppcDZfZHN0X2lkZXYoc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXJldHVybiAoKHN0cnVjdCBydDZfaW5mbyAqKWRzdCktPnJ0NmlfaWRldjsKK30KKwogc3RydWN0IGZpYjZfd2Fsa2VyX3QKIHsKIAlzdHJ1Y3QgZmliNl93YWxrZXJfdCAqcHJldiwgKm5leHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfcm91dGUuaCBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCmluZGV4IGMxNGI3MGUuLjRlOTI3ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAJCQkJcm91dGVfcHJlZjoyLAogCQkJCXJlc2VydmVkX2g6MzsKICNlbmRpZgotCV9fdTMyCQkJbGlmZXRpbWU7CisJX19iZTMyCQkJbGlmZXRpbWU7CiAJX191OAkJCXByZWZpeFswXTsJLyogMCw4IG9yIDE2ICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9maWIuaCBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCmluZGV4IDk0OWI5MzIuLjM2YzYzNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCkBAIC0xMTUsNyArMTE1LDcgQEAKIAogc3RydWN0IGZpYl9yZXN1bHRfbmwgewogCV9fYmUzMgkJZmxfYWRkcjsgICAvKiBUbyBiZSBsb29rZWQgdXAqLwotCXUzMgkJZmxfZndtYXJrOyAKKwl1MzIJCWZsX21hcms7CiAJdW5zaWduZWQgY2hhcglmbF90b3M7CiAJdW5zaWduZWQgY2hhciAgIGZsX3Njb3BlOwogCXVuc2lnbmVkIGNoYXIgICB0Yl9pZF9pbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oIGIvaW5jbHVkZS9uZXQvaXBfbXBfYWxnLmgKaW5kZXggYmVmZmRkNi4uMjViNTY1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfbXBfYWxnLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfbXBfYWxnLmgKQEAgLTg4LDkgKzg4LDcgQEAKIAlyZXR1cm4gZmxwMS0+Zmw0X2RzdCA9PSBmbHAyLT5mbDRfZHN0ICYmCiAJCWZscDEtPmZsNF9zcmMgPT0gZmxwMi0+Zmw0X3NyYyAmJgogCQlmbHAxLT5vaWYgPT0gZmxwMi0+b2lmICYmCi0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSwotCQlmbHAxLT5mbDRfZndtYXJrID09IGZscDItPmZsNF9md21hcmsgJiYKLSNlbmRpZgorCQlmbHAxLT5tYXJrID09IGZscDItPm1hcmsgJiYKIAkJISgoZmxwMS0+Zmw0X3RvcyBeIGZscDItPmZsNF90b3MpICYKIAkJICAoSVBUT1NfUlRfTUFTSyB8IFJUT19PTkxJTkspKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDkwMzEwOGUuLjY3MjU2NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtOTg4LDE0ICs5ODgsMjAgQEAKIGV4dGVybiB2b2lkIGlwX3ZzX25hdF9pY21wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCXN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IGRpcik7CiAKLWV4dGVybiB1MTYgaXBfdnNfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCk7CitleHRlcm4gX19zdW0xNiBpcF92c19jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0KTsKIAotc3RhdGljIGlubGluZSB1MTYgaXBfdnNfY2hlY2tfZGlmZih1MzIgb2xkLCB1MzIgbmV3LCB1MTYgb2xkc3VtKQorc3RhdGljIGlubGluZSBfX3dzdW0gaXBfdnNfY2hlY2tfZGlmZjQoX19iZTMyIG9sZCwgX19iZTMyIG5ldywgX193c3VtIG9sZHN1bSkKIHsKLQl1MzIgZGlmZlsyXSA9IHsgb2xkLCBuZXcgfTsKKwlfX2JlMzIgZGlmZlsyXSA9IHsgfm9sZCwgbmV3IH07CiAKLQlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbCgoY2hhciAqKSBkaWZmLCBzaXplb2YoZGlmZiksCi0JCQkJICAgICAgb2xkc3VtIF4gMHhGRkZGKSk7CisJcmV0dXJuIGNzdW1fcGFydGlhbCgoY2hhciAqKSBkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgX193c3VtIGlwX3ZzX2NoZWNrX2RpZmYyKF9fYmUxNiBvbGQsIF9fYmUxNiBuZXcsIF9fd3N1bSBvbGRzdW0pCit7CisJX19iZTE2IGRpZmZbMl0gPSB7IH5vbGQsIG5ldyB9OworCisJcmV0dXJuIGNzdW1fcGFydGlhbCgoY2hhciAqKSBkaWZmLCBzaXplb2YoZGlmZiksIG9sZHN1bSk7CiB9CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcGNvbmZpZy5oIGIvaW5jbHVkZS9uZXQvaXBjb25maWcuaAppbmRleCAyYTFmZTk5Li4zOTI0ZDdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcGNvbmZpZy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwY29uZmlnLmgKQEAgLTExLDEyICsxMSwxMiBAQAogZXh0ZXJuIGludCBpY19wcm90b19lbmFibGVkOwkvKiBQcm90b2NvbHMgZW5hYmxlZCAoc2VlIElDX3h4eCkgKi8KIGV4dGVybiBpbnQgaWNfc2V0X21hbnVhbGx5OwkvKiBJUGNvbmZpZyBwYXJhbWV0ZXJzIHNldCBtYW51YWxseSAqLwogCi1leHRlcm4gdTMyIGljX215YWRkcjsJCS8qIE15IElQIGFkZHJlc3MgKi8KLWV4dGVybiB1MzIgaWNfZ2F0ZXdheTsJCS8qIEdhdGV3YXkgSVAgYWRkcmVzcyAqLworZXh0ZXJuIF9fYmUzMiBpY19teWFkZHI7CQkvKiBNeSBJUCBhZGRyZXNzICovCitleHRlcm4gX19iZTMyIGljX2dhdGV3YXk7CQkvKiBHYXRld2F5IElQIGFkZHJlc3MgKi8KIAotZXh0ZXJuIHUzMiBpY19zZXJ2YWRkcjsJCS8qIEJvb3Qgc2VydmVyIElQIGFkZHJlc3MgKi8KK2V4dGVybiBfX2JlMzIgaWNfc2VydmFkZHI7CQkvKiBCb290IHNlcnZlciBJUCBhZGRyZXNzICovCiAKLWV4dGVybiB1MzIgcm9vdF9zZXJ2ZXJfYWRkcjsJLyogQWRkcmVzcyBvZiBORlMgc2VydmVyICovCitleHRlcm4gX19iZTMyIHJvb3Rfc2VydmVyX2FkZHI7CS8qIEFkZHJlc3Mgb2YgTkZTIHNlcnZlciAqLwogZXh0ZXJuIHU4IHJvb3Rfc2VydmVyX3BhdGhbXTsJLyogUGF0aCB0byBtb3VudCBhcyByb290ICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBpcC5oIGIvaW5jbHVkZS9uZXQvaXBpcC5oCmluZGV4IGY0OTBjM2MuLjdjZGM5MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcGlwLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAlpcF9zZW5kX2NoZWNrKGlwaCk7CQkJCQkJXAogCQkJCQkJCQkJXAogCWVyciA9IE5GX0hPT0soUEZfSU5FVCwgTkZfSVBfTE9DQUxfT1VULCBza2IsIE5VTEwsIHJ0LT51LmRzdC5kZXYsIGRzdF9vdXRwdXQpO1wKLQlpZiAoZXJyID09IE5FVF9YTUlUX1NVQ0NFU1MgfHwgZXJyID09IE5FVF9YTUlUX0NOKSB7CQlcCisJaWYgKG5ldF94bWl0X2V2YWwoZXJyKSA9PSAwKSB7CQkJCQlcCiAJCXN0YXRzLT50eF9ieXRlcyArPSBwa3RfbGVuOwkJCQlcCiAJCXN0YXRzLT50eF9wYWNrZXRzKys7CQkJCQlcCiAJfSBlbHNlIHsJCQkJCQkJXApAQCAtNDQsOCArNDQsNCBAQAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLQotZXh0ZXJuIGludAlzaXRfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkCXNpdF9jbGVhbnVwKHZvaWQpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA4MjIzYzQ0Li4wMDMyOGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC05NSwxMCArOTUsMTAgQEAKICAqLwogCiBzdHJ1Y3QgZnJhZ19oZHIgewotCXVuc2lnbmVkIGNoYXIJbmV4dGhkcjsKLQl1bnNpZ25lZCBjaGFyCXJlc2VydmVkOwkKLQl1bnNpZ25lZCBzaG9ydAlmcmFnX29mZjsKLQlfX3UzMgkJaWRlbnRpZmljYXRpb247CisJX191OAluZXh0aGRyOworCV9fdTgJcmVzZXJ2ZWQ7CisJX19iZTE2CWZyYWdfb2ZmOworCV9fYmUzMglpZGVudGlmaWNhdGlvbjsKIH07CiAKICNkZWZpbmUJSVA2X01GCTB4MDAwMQpAQCAtMTEzLDkgKzExMywyNCBAQAogCiAvKiBNSUJzICovCiBERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgaXBzdGF0c19taWIsIGlwdjZfc3RhdGlzdGljcyk7Ci0jZGVmaW5lIElQNl9JTkNfU1RBVFMoZmllbGQpCQlTTk1QX0lOQ19TVEFUUyhpcHY2X3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBJUDZfSU5DX1NUQVRTX0JIKGZpZWxkKQkJU05NUF9JTkNfU1RBVFNfQkgoaXB2Nl9zdGF0aXN0aWNzLCBmaWVsZCkKLSNkZWZpbmUgSVA2X0lOQ19TVEFUU19VU0VSKGZpZWxkKSAJU05NUF9JTkNfU1RBVFNfVVNFUihpcHY2X3N0YXRpc3RpY3MsIGZpZWxkKQorI2RlZmluZSBJUDZfSU5DX1NUQVRTKGlkZXYsZmllbGQpCQkoewkJCVwKKwlzdHJ1Y3QgaW5ldDZfZGV2ICpfaWRldiA9IChpZGV2KTsJCQkJXAorCWlmIChsaWtlbHkoX2lkZXYgIT0gTlVMTCkpCQkJCQlcCisJCVNOTVBfSU5DX1NUQVRTKF9pZGV2LT5zdGF0cy5pcHY2LCBmaWVsZCk7CQlcCisJU05NUF9JTkNfU1RBVFMoaXB2Nl9zdGF0aXN0aWNzLCBmaWVsZCk7CQkJCVwKK30pCisjZGVmaW5lIElQNl9JTkNfU1RBVFNfQkgoaWRldixmaWVsZCkJCSh7CQkJXAorCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gKGlkZXYpOwkJCQlcCisJaWYgKGxpa2VseShfaWRldiAhPSBOVUxMKSkJCQkJCVwKKwkJU05NUF9JTkNfU1RBVFNfQkgoX2lkZXYtPnN0YXRzLmlwdjYsIGZpZWxkKTsJCVwKKwlTTk1QX0lOQ19TVEFUU19CSChpcHY2X3N0YXRpc3RpY3MsIGZpZWxkKTsJCQlcCit9KQorI2RlZmluZSBJUDZfSU5DX1NUQVRTX1VTRVIoaWRldixmaWVsZCkJCSh7CQkJXAorCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gKGlkZXYpOwkJCQlcCisJaWYgKGxpa2VseShfaWRldiAhPSBOVUxMKSkJCQkJCVwKKwkJU05NUF9JTkNfU1RBVFNfVVNFUihfaWRldi0+c3RhdHMuaXB2NiwgZmllbGQpOwkJXAorCVNOTVBfSU5DX1NUQVRTX1VTRVIoaXB2Nl9zdGF0aXN0aWNzLCBmaWVsZCk7CQkJXAorfSkKIERFQ0xBUkVfU05NUF9TVEFUKHN0cnVjdCBpY21wdjZfbWliLCBpY21wdjZfc3RhdGlzdGljcyk7CiAjZGVmaW5lIElDTVA2X0lOQ19TVEFUUyhpZGV2LCBmaWVsZCkJCSh7CQkJXAogCXN0cnVjdCBpbmV0Nl9kZXYgKl9pZGV2ID0gKGlkZXYpOwkJCQlcCkBAIC0xNDMsOSArMTU4LDEzIEBACiAJU05NUF9JTkNfU1RBVFNfT0ZGU0VUX0JIKGljbXB2Nl9zdGF0aXN0aWNzLCBmaWVsZCwgX29mZnNldCk7ICAgIAlcCiB9KQogREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcF9zdGF0c19pbjYpOwotI2RlZmluZSBVRFA2X0lOQ19TVEFUUyhmaWVsZCkJCVNOTVBfSU5DX1NUQVRTKHVkcF9zdGF0c19pbjYsIGZpZWxkKQotI2RlZmluZSBVRFA2X0lOQ19TVEFUU19CSChmaWVsZCkJU05NUF9JTkNfU1RBVFNfQkgodWRwX3N0YXRzX2luNiwgZmllbGQpCi0jZGVmaW5lIFVEUDZfSU5DX1NUQVRTX1VTRVIoZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKHVkcF9zdGF0c19pbjYsIGZpZWxkKQorREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcGxpdGVfc3RhdHNfaW42KTsKKyNkZWZpbmUgVURQNl9JTkNfU1RBVFNfQkgoZmllbGQsIGlzX3VkcGxpdGUpIAkJCSAgICAgIGRvICB7ICBcCisJaWYgKGlzX3VkcGxpdGUpIFNOTVBfSU5DX1NUQVRTX0JIKHVkcGxpdGVfc3RhdHNfaW42LCBmaWVsZCk7ICAgICAgICAgXAorCWVsc2UJCVNOTVBfSU5DX1NUQVRTX0JIKHVkcF9zdGF0c19pbjYsIGZpZWxkKTsgICAgfSB3aGlsZSgwKQorI2RlZmluZSBVRFA2X0lOQ19TVEFUU19VU0VSKGZpZWxkLCBpc191ZHBsaXRlKQkJCSAgICAgICBkbyB7ICAgIFwKKwlpZiAoaXNfdWRwbGl0ZSkgU05NUF9JTkNfU1RBVFNfVVNFUih1ZHBsaXRlX3N0YXRzX2luNiwgZmllbGQpOyAgICAgICAgIFwKKwllbHNlCQlTTk1QX0lOQ19TVEFUU19VU0VSKHVkcF9zdGF0c19pbjYsIGZpZWxkKTsgICAgfSB3aGlsZSgwKQogCiBpbnQgc25tcDZfcmVnaXN0ZXJfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwogaW50IHNubXA2X3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpOwpAQCAtMTkxLDcgKzIxMCw3IEBACiBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbAogewogCXN0cnVjdCBpcDZfZmxvd2xhYmVsCSpuZXh0OwotCXUzMgkJCWxhYmVsOworCV9fYmUzMgkJCWxhYmVsOwogCXN0cnVjdCBpbjZfYWRkcgkJZHN0OwogCXN0cnVjdCBpcHY2X3R4b3B0aW9ucwkqb3B0OwogCWF0b21pY190CQl1c2VyczsKQEAgLTIxMSw3ICsyMzAsNyBAQAogCXN0cnVjdCBpcDZfZmxvd2xhYmVsCSpmbDsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbAkqZmw2X3NvY2tfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgdTMyIGxhYmVsKTsKK2V4dGVybiBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbAkqZmw2X3NvY2tfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGxhYmVsKTsKIGV4dGVybiBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMJKmZsNl9tZXJnZV9vcHRpb25zKHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqIG9wdF9zcGFjZSwKIAkJCQkJCSAgIHN0cnVjdCBpcDZfZmxvd2xhYmVsICogZmwsCiAJCQkJCQkgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKiBmb3B0KTsKQEAgLTM3NSwyMiArMzk0LDE1IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IF9faXB2Nl9hZGRyX2RpZmYoY29uc3Qgdm9pZCAqdG9rZW4xLCBjb25zdCB2b2lkICp0b2tlbjIsIGludCBhZGRybGVuKQogewotCWNvbnN0IF9fdTMyICphMSA9IHRva2VuMSwgKmEyID0gdG9rZW4yOworCWNvbnN0IF9fYmUzMiAqYTEgPSB0b2tlbjEsICphMiA9IHRva2VuMjsKIAlpbnQgaTsKIAogCWFkZHJsZW4gPj49IDI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRkcmxlbjsgaSsrKSB7Ci0JCV9fdTMyIHhiID0gYTFbaV0gXiBhMltpXTsKLQkJaWYgKHhiKSB7Ci0JCQlpbnQgaiA9IDMxOwotCi0JCQl4YiA9IG50b2hsKHhiKTsKLQkJCXdoaWxlICgoeGIgJiAoMSA8PCBqKSkgPT0gMCkKLQkJCQlqLS07Ci0KLQkJCXJldHVybiAoaSAqIDMyICsgMzEgLSBqKTsKLQkJfQorCQlfX2JlMzIgeGIgPSBhMVtpXSBeIGEyW2ldOworCQlpZiAoeGIpCisJCQlyZXR1cm4gaSAqIDMyICsgMzIgLSBmbHMobnRvaGwoeGIpKTsKIAl9CiAKIAkvKgpAQCAtNTQ0LDcgKzU1Niw3IEBACiAJCQkJCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgaW50IGFkZHJfbGVuKTsKIAogZXh0ZXJuIGludCAJCQlpcHY2X3JlY3ZfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4pOwotZXh0ZXJuIHZvaWQJCQlpcHY2X2ljbXBfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyLCB1MTYgcG9ydCwKK2V4dGVybiB2b2lkCQkJaXB2Nl9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVyciwgX19iZTE2IHBvcnQsCiAJCQkJCQl1MzIgaW5mbywgdTggKnBheWxvYWQpOwogZXh0ZXJuIHZvaWQJCQlpcHY2X2xvY2FsX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgaW50IGVyciwgc3RydWN0IGZsb3dpICpmbCwgdTMyIGluZm8pOwogCkBAIC01ODksNiArNjAxLDggQEAKIGV4dGVybiB2b2lkIHRjcDZfcHJvY19leGl0KHZvaWQpOwogZXh0ZXJuIGludCAgdWRwNl9wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCB1ZHA2X3Byb2NfZXhpdCh2b2lkKTsKK2V4dGVybiBpbnQgIHVkcGxpdGU2X3Byb2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHVkcGxpdGU2X3Byb2NfZXhpdCh2b2lkKTsKIGV4dGVybiBpbnQgIGlwdjZfbWlzY19wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpcHY2X21pc2NfcHJvY19leGl0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2ZyYW1lLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2ZyYW1lLmgKaW5kZXggOWRkNTRhNS4uNjQxZjg4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZnJhbWUuaApAQCAtOTEsOCArOTEsOCBAQAogCV9fdTggIGNhZGRyOyAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KIAlfX3U4ICBjb250cm9sOwogCV9fdTggIGlkZW50OyAvKiBTaG91bGQgYWx3YXlzIGJlIFhJRF9GT1JNQVQgKi8gCi0JX191MzIgc2FkZHI7IC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLwotCV9fdTMyIGRhZGRyOyAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLworCV9fbGUzMiBzYWRkcjsgLyogU291cmNlIGRldmljZSBhZGRyZXNzICovCisJX19sZTMyIGRhZGRyOyAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLwogCV9fdTggIGZsYWdzOyAvKiBEaXNjb3ZlcnkgZmxhZ3MgKi8KIAlfX3U4ICBzbG90bnI7CiAJX191OCAgdmVyc2lvbjsKQEAgLTEwMSwxNSArMTAxLDE1IEBACiBzdHJ1Y3QgdGVzdF9mcmFtZSB7CiAJX191OCBjYWRkcjsgICAgICAgICAgLyogQ29ubmVjdGlvbiBhZGRyZXNzICovCiAJX191OCBjb250cm9sOwotCV9fdTMyIHNhZGRyOyAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLwotCV9fdTMyIGRhZGRyOyAgICAgICAgIC8qIERlc3RpbmF0aW9uIGRldmljZSBhZGRyZXNzICovCisJX19sZTMyIHNhZGRyOyAgICAgICAgIC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLworCV9fbGUzMiBkYWRkcjsgICAgICAgICAvKiBEZXN0aW5hdGlvbiBkZXZpY2UgYWRkcmVzcyAqLwogfSBJUkRBX1BBQ0s7CiAKIHN0cnVjdCB1YV9mcmFtZSB7CiAJX191OCBjYWRkcjsKIAlfX3U4IGNvbnRyb2w7Ci0JX191MzIgc2FkZHI7IC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLwotCV9fdTMyIGRhZGRyOyAvKiBEZXN0IGRldmljZSBhZGRyZXNzICovCisJX19sZTMyIHNhZGRyOyAvKiBTb3VyY2UgZGV2aWNlIGFkZHJlc3MgKi8KKwlfX2xlMzIgZGFkZHI7IC8qIERlc3QgZGV2aWNlIGFkZHJlc3MgKi8KIH0gSVJEQV9QQUNLOwogCiBzdHJ1Y3QgZG1fZnJhbWUgewpAQCAtMTM1LDggKzEzNSw4IEBACiBzdHJ1Y3Qgc25ybV9mcmFtZSB7CiAJX191OCAgY2FkZHI7CiAJX191OCAgY29udHJvbDsKLQlfX3UzMiBzYWRkcjsKLQlfX3UzMiBkYWRkcjsKKwlfX2xlMzIgc2FkZHI7CisJX19sZTMyIGRhZGRyOwogCV9fdTggIG5jYWRkcjsKIH0gSVJEQV9QQUNLOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3RpbWVyLmggYi9pbmNsdWRlL25ldC9pcmRhL3RpbWVyLmgKaW5kZXggMmM1ZDg4Ni4uY2I2MTU2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS90aW1lci5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvdGltZXIuaApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBUSU1FUl9ICiAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgLyogZm9yIEhaICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19wZHUuaCBiL2luY2x1ZGUvbmV0L2xsY19wZHUuaAppbmRleCA4ZjYzMDY1Li5hYTMzYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGNfcGR1LmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCkBAIC0yNTIsOSArMjUyLDkgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGxsY19wZHVfZGVjb2RlX3NhKHN0cnVjdCBza19idWZmICpza2IsIHU4ICpzYSkKIHsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBudG9ocyhFVEhfUF84MDJfMikpCisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyXzIpKQogCQltZW1jcHkoc2EsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKLQllbHNlIGlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX1RSXzgwMl8yKSkgeworCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfVFJfODAyXzIpKSB7CiAJCW1lbWNweShzYSwgdHJfaGRyKHNrYiktPnNhZGRyLCBFVEhfQUxFTik7CiAJCSpzYSAmPSAweDdGOwogCX0KQEAgLTI2OSw5ICsyNjksOSBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGxjX3BkdV9kZWNvZGVfZGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmRhKQogewotCWlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMl8yKSkKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDJfMikpCiAJCW1lbWNweShkYSwgZXRoX2hkcihza2IpLT5oX2Rlc3QsIEVUSF9BTEVOKTsKLQllbHNlIGlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX1RSXzgwMl8yKSkKKwllbHNlIGlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX1RSXzgwMl8yKSkKIAkJbWVtY3B5KGRhLCB0cl9oZHIoc2tiKS0+ZGFkZHIsIEVUSF9BTEVOKTsKIH0KIApAQCAtMzQ1LDcgKzM0NSw3IEBACiAJcGR1LT5jdHJsXzEgID0gTExDX1BEVV9UWVBFX1U7CiAJcGR1LT5jdHJsXzEgfD0gTExDXzFfUERVX0NNRF9URVNUOwogCXBkdS0+Y3RybF8xIHw9IExMQ19VX1BGX0JJVF9NQVNLOwotCWlmIChldl9za2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMl8yKSkgeworCWlmIChldl9za2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMl8yKSkgewogCQlzdHJ1Y3QgbGxjX3BkdV91biAqZXZfcGR1ID0gbGxjX3BkdV91bl9oZHIoZXZfc2tiKTsKIAkJaW50IGRzaXplOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZGlzYy5oIGIvaW5jbHVkZS9uZXQvbmRpc2MuaAppbmRleCBkMzkxNWRhYi4uNDc1YjEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmRpc2MuaAorKysgYi9pbmNsdWRlL25ldC9uZGlzYy5oCkBAIC02Niw4ICs2Niw4IEBACiAKIHN0cnVjdCByYV9tc2cgewogICAgICAgICBzdHJ1Y3QgaWNtcDZoZHIJCWljbXBoOwotCV9fdTMyCQkJcmVhY2hhYmxlX3RpbWU7Ci0JX191MzIJCQlyZXRyYW5zX3RpbWVyOworCV9fYmUzMgkJCXJlYWNoYWJsZV90aW1lOworCV9fYmUzMgkJCXJldHJhbnNfdGltZXI7CiB9OwogCiBzdHJ1Y3QgbmRfb3B0X2hkciB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaAppbmRleCA5MTY4NDQzLi4xNDAxY2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0LmgKQEAgLTksMzIgKzksMzUgQEAKICNpZm5kZWYgX05GX0NPTk5UUkFDS19JUFY0X0gKICNkZWZpbmUgX05GX0NPTk5UUkFDS19JUFY0X0gKIAotI2lmZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0Lmg+CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oPgogCiAvKiBwZXIgY29ubnRyYWNrOiBuYXQgYXBwbGljYXRpb24gaGVscGVyIHByaXZhdGUgZGF0YSAqLwotdW5pb24gaXBfY29ubnRyYWNrX25hdF9oZWxwIHsKK3VuaW9uIG5mX2Nvbm50cmFja19uYXRfaGVscCB7CiAgICAgICAgIC8qIGluc2VydCBuYXQgaGVscGVyIHByaXZhdGUgZGF0YSBoZXJlICovCisJc3RydWN0IG5mX25hdF9wcHRwIG5hdF9wcHRwX2luZm87CiB9OwogCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX2lwdjRfbmF0IHsKLQlzdHJ1Y3QgaXBfbmF0X2luZm8gaW5mbzsKLQl1bmlvbiBpcF9jb25udHJhY2tfbmF0X2hlbHAgaGVscDsKK3N0cnVjdCBuZl9jb25uX25hdCB7CisJc3RydWN0IG5mX25hdF9pbmZvIGluZm87CisJdW5pb24gbmZfY29ubnRyYWNrX25hdF9oZWxwIGhlbHA7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERV9NT0RVTEUpCiAJaW50IG1hc3FfaW5kZXg7CiAjZW5kaWYKIH07Ci0jZW5kaWYgLyogQ09ORklHX0lQX05GX05BVF9ORUVERUQgKi8KLQotc3RydWN0IG5mX2Nvbm50cmFja19pcHY0IHsKLSNpZmRlZiBDT05GSUdfSVBfTkZfTkFUX05FRURFRAotCXN0cnVjdCBuZl9jb25udHJhY2tfaXB2NF9uYXQgKm5hdDsKLSNlbmRpZgotfTsKKyNlbmRpZiAvKiBDT05GSUdfTkZfTkFUX05FRURFRCAqLwogCiAvKiBSZXR1cm5zIG5ldyBza19idWZmLCBvciBOVUxMICovCiBzdHJ1Y3Qgc2tfYnVmZiAqCiBuZl9jdF9pcHY0X2N0X2dhdGhlcl9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAorZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b190Y3A0OworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b191ZHA0OworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byBuZl9jb25udHJhY2tfbDRwcm90b19pY21wOworCitleHRlcm4gaW50IG5mX2Nvbm50cmFja19pcHY0X2NvbXBhdF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2lwdjRfY29tcGF0X2Zpbmkodm9pZCk7CisKICNlbmRpZiAvKl9ORl9DT05OVFJBQ0tfSVBWNF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2LmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YjYwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19JUFY2X0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19JUFY2X0gKKworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2OworCitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDY7CitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDY7CitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2ljbXB2NjsKKworZXh0ZXJuIGludCBuZl9jdF9pcHY2X3NraXBfZXh0aGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBzdGFydCwKKwkJCQkgIHU4ICpuZXh0aGRycCwgaW50IGxlbik7CisKK2V4dGVybiBpbnQgbmZfY3RfZnJhZzZfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5mX2N0X2ZyYWc2X2NsZWFudXAodm9pZCk7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKm5mX2N0X2ZyYWc2X2dhdGhlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiB2b2lkIG5mX2N0X2ZyYWc2X291dHB1dCh1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfZnJhZzZfdGltZW91dDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfZnJhZzZfbG93X3RocmVzaDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfZnJhZzZfaGlnaF90aHJlc2g7CisKKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX0lQVjZfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggMWZiZDgxOS4uYmQwMWI0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMjEsNiArMjEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaWNtcC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaWNtcHY2Lmg+CiAKQEAgLTMzLDYgKzM0LDcgQEAKIAlzdHJ1Y3QgaXBfY3RfdGNwIHRjcDsKIAlzdHJ1Y3QgaXBfY3RfaWNtcCBpY21wOwogCXN0cnVjdCBuZl9jdF9pY21wdjYgaWNtcHY2OworCXN0cnVjdCBuZl9jdF9ncmUgZ3JlOwogfTsKIAogdW5pb24gbmZfY29ubnRyYWNrX2V4cGVjdF9wcm90byB7CkBAIC00MSwxNSArNDMsMjAgQEAKIAogLyogQWRkIHByb3RvY29sIGhlbHBlciBpbmNsdWRlIGZpbGUgaGVyZSAqLwogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzLmg+CiAKIC8qIHBlciBjb25udHJhY2s6IGFwcGxpY2F0aW9uIGhlbHBlciBwcml2YXRlIGRhdGEgKi8KIHVuaW9uIG5mX2Nvbm50cmFja19oZWxwIHsKIAkvKiBpbnNlcnQgY29ubnRyYWNrIGhlbHBlciBwcml2YXRlIGRhdGEgKG1hc3RlcikgaGVyZSAqLwotCXN0cnVjdCBpcF9jdF9mdHBfbWFzdGVyIGN0X2Z0cF9pbmZvOworCXN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyIGN0X2Z0cF9pbmZvOworCXN0cnVjdCBuZl9jdF9wcHRwX21hc3RlciBjdF9wcHRwX2luZm87CisJc3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyIGN0X2gzMjNfaW5mbzsKIH07CiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAjZGVmaW5lIE5GX0NUX0FTU0VSVCh4KQkJCQkJCQlcCkBAIC03OSw2ICs4Niw4IEBACiAKIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgorCiBzdHJ1Y3QgbmZfY29ubgogewogCS8qIFVzYWdlIGNvdW50IGluIGhlcmUgaXMgMSBmb3IgaGFzaCB0YWJsZS9kZXN0cnVjdCB0aW1lciwgMSBwZXIgc2tiLApAQCAtMTI0LDQ0ICsxMzMsNiBAQAogCWNoYXIgZGF0YVswXTsKIH07CiAKLXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0Ci17Ci0JLyogSW50ZXJuYWwgbGlua2VkIGxpc3QgKGdsb2JhbCBleHBlY3RhdGlvbiBsaXN0KSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCS8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqLwotCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGUsIG1hc2s7Ci0gCi0JLyogRnVuY3Rpb24gdG8gY2FsbCBhZnRlciBzZXR1cCBhbmQgaW5zZXJ0aW9uICovCi0Jdm9pZCAoKmV4cGVjdGZuKShzdHJ1Y3QgbmZfY29ubiAqbmV3LAotCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKTsKLQotCS8qIFRoZSBjb25udHJhY2sgb2YgdGhlIG1hc3RlciBjb25uZWN0aW9uICovCi0Jc3RydWN0IG5mX2Nvbm4gKm1hc3RlcjsKLQotCS8qIFRpbWVyIGZ1bmN0aW9uOyBkZWxldGVzIHRoZSBleHBlY3RhdGlvbi4gKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OwotCi0JLyogVXNhZ2UgY291bnQuICovCi0JYXRvbWljX3QgdXNlOwotCi0JLyogVW5pcXVlIElEICovCi0JdW5zaWduZWQgaW50IGlkOwotCi0JLyogRmxhZ3MgKi8KLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KLSNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAotCS8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHBlci1wcm90byBwYXJ0LCB1c2VkIHRvIG1hcCB0aGUKLQkgKiBleHBlY3RlZCBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlY2lwaWVudCBleHBlY3RzLiAqLwotCXVuaW9uIG5mX2Nvbm50cmFja19tYW5pcF9wcm90byBzYXZlZF9wcm90bzsKLQkvKiBEaXJlY3Rpb24gcmVsYXRpdmUgdG8gdGhlIG1hc3RlciBjb25uZWN0aW9uLiAqLwotCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVCAweDEKLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfY29ubiAqCiBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaGFzaCkKIHsKQEAgLTIwOCwxNiArMTc5LDYgQEAKIAogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KHN0cnVjdCBuZl9jb25uICpjdCk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1fX25mX2Nvbm50cmFja19leHBlY3RfZmluZChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7Ci0KLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1uZl9jb25udHJhY2tfZXhwZWN0X2ZpbmQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwotCi1leHRlcm4gdm9pZCBuZl9jdF91bmxpbmtfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOwotCi1leHRlcm4gdm9pZCBuZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCk7Ci0KIGV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19mbHVzaCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoKQEAgLTI4OSw4OSArMjUwLDEyIEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfY2hlY2tzdW07CitleHRlcm4gYXRvbWljX3QgbmZfY29ubnRyYWNrX2NvdW50OworZXh0ZXJuIGludCBuZl9jb25udHJhY2tfbWF4OwogCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGlwX2Nvbm50cmFja19zdGF0LCBuZl9jb25udHJhY2tfc3RhdCk7CiAjZGVmaW5lIE5GX0NUX1NUQVRfSU5DKGNvdW50KSAoX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfc3RhdCkuY291bnQrKykKIAotI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCi0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQotc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgewotCXN0cnVjdCBuZl9jb25uICpjdDsKLQl1bnNpZ25lZCBpbnQgZXZlbnRzOwotfTsKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSwgbmZfY29ubnRyYWNrX2VjYWNoZSk7Ci0KLSNkZWZpbmUgQ09OTlRSQUNLX0VDQUNIRSh4KQkoX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfZWNhY2hlKS54KQotCi1leHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIG5mX2Nvbm50cmFja19jaGFpbjsKLWV4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmZfY29ubnRyYWNrX2V4cGVjdF9jaGFpbjsKLQotc3RhdGljIGlubGluZSBpbnQgbmZfY29ubnRyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmZfY29ubnRyYWNrX2NoYWluLCBuYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5mX2Nvbm50cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfY2hhaW4sIG5iKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLW5mX2Nvbm50cmFja19leHBlY3RfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluLCBuYik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1uZl9jb25udHJhY2tfZXhwZWN0X3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19leHBlY3RfY2hhaW4sCi0JCQluYik7Ci19Ci0KLWV4dGVybiB2b2lkIG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpOwotZXh0ZXJuIHZvaWQgX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KHN0cnVjdCBuZl9jb25uICpjdCk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyBldmVudCwKLQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBuZl9jb25uICpjdCA9IChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdDsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOwotCi0JbG9jYWxfYmhfZGlzYWJsZSgpOwotCWVjYWNoZSA9ICZfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19lY2FjaGUpOwotCWlmIChjdCAhPSBlY2FjaGUtPmN0KQotCQlfX25mX2N0X2V2ZW50X2NhY2hlX2luaXQoY3QpOwotCWVjYWNoZS0+ZXZlbnRzIHw9IGV2ZW50OwotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmZfY29ubnRyYWNrX2V2ZW50KGVudW0gaXBfY29ubnRyYWNrX2V2ZW50cyBldmVudCwKLQkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QpCi17Ci0JaWYgKG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgJiYgIW5mX2N0X2lzX2R5aW5nKGN0KSkKLQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5mX2Nvbm50cmFja19jaGFpbiwgZXZlbnQsIGN0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1uZl9jb25udHJhY2tfZXhwZWN0X2V2ZW50KGVudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgZXZlbnQsCi0JCQkgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCi17Ci0JYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJm5mX2Nvbm50cmFja19leHBlY3RfY2hhaW4sIGV2ZW50LCBleHApOwotfQotI2Vsc2UgLyogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIGV2ZW50LAotCQkJCQkgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfZXZlbnQoZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIGV2ZW50LAotCQkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KSB7fQotc3RhdGljIGlubGluZSB2b2lkCi1uZl9jb25udHJhY2tfZXhwZWN0X2V2ZW50KGVudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgZXZlbnQsCi0JCQkgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIHt9Ci0jZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFMgKi8KLQogLyogbm8gaGVscGVyLCBubyBuYXQgKi8KICNkZWZpbmUJTkZfQ1RfRl9CQVNJQwkwCiAvKiBmb3IgaGVscGVyICovCkBAIC0zODcsOCArMjcxLDM1IEBACiAKIC8qIHZhbGlkIGNvbWJpbmF0aW9uczoKICAqIGJhc2ljOiBuZl9jb25uLCBuZl9jb25uIC4uIG5mX2Nvbm5faGVscAotICogbmF0OiBuZl9jb25uIC4uIG5mX2Nvbm5fbmF0LCBuZl9jb25uIC4uIG5mX2Nvbm5fbmF0LCBuZl9jb25uIGhlbHAKKyAqIG5hdDogbmZfY29ubiAuLiBuZl9jb25uX25hdCwgbmZfY29ubiAuLiBuZl9jb25uX25hdCAuLiBuZl9jb25uIGhlbHAKICAqLworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uX25hdCAqbmZjdF9uYXQoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzaXplb2Yoc3RydWN0IG5mX2Nvbm4pOworCisJaWYgKCEoY3QtPmZlYXR1cmVzICYgTkZfQ1RfRl9OQVQpKQorCQlyZXR1cm4gTlVMTDsKKworCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgX19hbGlnbm9mX18oc3RydWN0IG5mX2Nvbm5fbmF0KSk7CisJcmV0dXJuIChzdHJ1Y3QgbmZfY29ubl9uYXQgKikgKCh2b2lkICopY3QgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mY3RfaGVscChjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgbmZfY29ubik7CisKKwlpZiAoIShjdC0+ZmVhdHVyZXMgJiBORl9DVF9GX0hFTFApKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoY3QtPmZlYXR1cmVzICYgTkZfQ1RfRl9OQVQpIHsKKwkJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBfX2FsaWdub2ZfXyhzdHJ1Y3QgbmZfY29ubl9uYXQpKTsKKwkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgbmZfY29ubl9uYXQpOworCX0KKworCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgX19hbGlnbm9mX18oc3RydWN0IG5mX2Nvbm5faGVscCkpOworCXJldHVybiAoc3RydWN0IG5mX2Nvbm5faGVscCAqKSAoKHZvaWQgKiljdCArIG9mZnNldCk7Cit9CisjZWxzZSAvKiBObyBOQVQgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2Nvbm5faGVscCAqbmZjdF9oZWxwKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBuZl9jb25uKTsKQEAgLTM5Niw4ICszMDcsOSBAQAogCWlmICghKGN0LT5mZWF0dXJlcyAmIE5GX0NUX0ZfSEVMUCkpCiAJCXJldHVybiBOVUxMOwogCisJb2Zmc2V0ID0gQUxJR04ob2Zmc2V0LCBfX2FsaWdub2ZfXyhzdHJ1Y3QgbmZfY29ubl9oZWxwKSk7CiAJcmV0dXJuIChzdHJ1Y3QgbmZfY29ubl9oZWxwICopICgodm9pZCAqKWN0ICsgb2Zmc2V0KTsKIH0KLQorI2VuZGlmIC8qIENPTkZJR19ORl9OQVRfTkVFREVEICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9ORl9DT05OVFJBQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaAppbmRleCBkYTI1NDUyLi43ZmRjNzJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaApAQCAtMTMsNiArMTMsOSBAQAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX0NPUkVfSAogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KIAogLyogVGhpcyBoZWFkZXIgaXMgdXNlZCB0byBzaGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGUKICAgIHN0YW5kYWxvbmUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUsIGFuZCB0aGUgY29tcGF0aWJpbGl0eSBsYXllcidzIHVzZQpAQCAtMjksNyArMzIsNyBAQAogLyogTGlrZSBhYm92ZSwgYnV0IHlvdSBhbHJlYWR5IGhhdmUgY29ubnRyYWNrIHJlYWQgbG9jay4gKi8KIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKl9fbmZfY3RfZmluZF9sM3Byb3RvKHVfaW50MTZfdCBsM3Byb3RvKTsKIAotc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbDsKK3N0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90bzsKIAogZXh0ZXJuIGludAogbmZfY3RfZ2V0X3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0zOSwxMyArNDIsMTMgQEAKIAkJdV9pbnQ4X3QgcHJvdG9udW0sCiAJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCi0JCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvY29sKTsKKwkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvKTsKIAogZXh0ZXJuIGludAogbmZfY3RfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKmludmVyc2UsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcsCiAJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKLQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG9jb2wpOworCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8pOwogCiAvKiBGaW5kIGEgY29ubmVjdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgdHVwbGUuICovCiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICoKQEAgLTcwLDcgKzczLDE0IEBACiAKIGV4dGVybiB2b2lkIF9fbmZfY29ubnRyYWNrX2F0dGFjaChzdHJ1Y3Qgc2tfYnVmZiAqbnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKK2ludAorcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkgICAgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAorCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnByb3RvKTsKKwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm5mX2Nvbm50cmFja19oYXNoOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0OwogZXh0ZXJuIHJ3bG9ja190IG5mX2Nvbm50cmFja19sb2NrIDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHVuY29uZmlybWVkOworCiAjZW5kaWYgLyogX05GX0NPTk5UUkFDS19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MmE4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBjb25uZWN0aW9uIHRyYWNraW5nIGV2ZW50IGNhY2hlLgorICovCisKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19FQ0FDSEVfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0VDQUNIRV9ICisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKworI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUworc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgeworCXN0cnVjdCBuZl9jb25uICpjdDsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzOworfTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSwgbmZfY29ubnRyYWNrX2VjYWNoZSk7CisKKyNkZWZpbmUgQ09OTlRSQUNLX0VDQUNIRSh4KQkoX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfZWNhY2hlKS54KQorCitleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIG5mX2Nvbm50cmFja19jaGFpbjsKK2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgbmZfY29ubnRyYWNrX2V4cGVjdF9jaGFpbjsKKworc3RhdGljIGlubGluZSBpbnQgbmZfY29ubnRyYWNrX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmZfY29ubnRyYWNrX2NoYWluLCBuYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mX2Nvbm50cmFja191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfY2hhaW4sIG5iKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25mX2Nvbm50cmFja19leHBlY3RfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfZXhwZWN0X2NoYWluLCBuYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CituZl9jb25udHJhY2tfZXhwZWN0X3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19leHBlY3RfY2hhaW4sCisJCQluYik7Cit9CisKK2V4dGVybiB2b2lkIG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpOworZXh0ZXJuIHZvaWQgX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KHN0cnVjdCBuZl9jb25uICpjdCk7CitleHRlcm4gdm9pZCBuZl9jdF9ldmVudF9jYWNoZV9mbHVzaCh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkCituZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIGV2ZW50LAorCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0OworCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7CisKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisJZWNhY2hlID0gJl9fZ2V0X2NwdV92YXIobmZfY29ubnRyYWNrX2VjYWNoZSk7CisJaWYgKGN0ICE9IGVjYWNoZS0+Y3QpCisJCV9fbmZfY3RfZXZlbnRfY2FjaGVfaW5pdChjdCk7CisJZWNhY2hlLT5ldmVudHMgfD0gZXZlbnQ7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfZXZlbnQoZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIGV2ZW50LAorCQkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlpZiAobmZfY3RfaXNfY29uZmlybWVkKGN0KSAmJiAhbmZfY3RfaXNfZHlpbmcoY3QpKQorCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbmZfY29ubnRyYWNrX2NoYWluLCBldmVudCwgY3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK25mX2Nvbm50cmFja19leHBlY3RfZXZlbnQoZW51bSBpcF9jb25udHJhY2tfZXhwZWN0X2V2ZW50cyBldmVudCwKKwkJCSAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmbmZfY29ubnRyYWNrX2V4cGVjdF9jaGFpbiwgZXZlbnQsIGV4cCk7Cit9CisKKyNlbHNlIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIGV2ZW50LAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfZXZlbnQoZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIGV2ZW50LAorCQkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KSB7fQorc3RhdGljIGlubGluZSB2b2lkCituZl9jb25udHJhY2tfZXhwZWN0X2V2ZW50KGVudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgZXZlbnQsCisJCQkgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZfY3RfZXZlbnRfY2FjaGVfZmx1c2godm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUyAqLworCisjZW5kaWYgLypfTkZfQ09OTlRSQUNLX0VDQUNIRV9IKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmMzEzNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIGNvbm5lY3Rpb24gdHJhY2tpbmcgZXhwZWN0YXRpb25zLgorICovCisKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19FWFBFQ1RfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0VYUEVDVF9ICisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0OworZXh0ZXJuIGttZW1fY2FjaGVfdCAqbmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXA7CitleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHBfZmlsZV9vcHM7CisKK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0Cit7CisJLyogSW50ZXJuYWwgbGlua2VkIGxpc3QgKGdsb2JhbCBleHBlY3RhdGlvbiBsaXN0KSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKworCS8qIFdlIGV4cGVjdCB0aGlzIHR1cGxlLCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFzayAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGUsIG1hc2s7CisKKwkvKiBGdW5jdGlvbiB0byBjYWxsIGFmdGVyIHNldHVwIGFuZCBpbnNlcnRpb24gKi8KKwl2b2lkICgqZXhwZWN0Zm4pKHN0cnVjdCBuZl9jb25uICpuZXcsCisJCQkgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnRoaXMpOworCisJLyogSGVscGVyIHRvIGFzc2lnbiB0byBuZXcgY29ubmVjdGlvbiAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CisKKwkvKiBUaGUgY29ubnRyYWNrIG9mIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiAqLworCXN0cnVjdCBuZl9jb25uICptYXN0ZXI7CisKKwkvKiBUaW1lciBmdW5jdGlvbjsgZGVsZXRlcyB0aGUgZXhwZWN0YXRpb24uICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZW91dDsKKworCS8qIFVzYWdlIGNvdW50LiAqLworCWF0b21pY190IHVzZTsKKworCS8qIFVuaXF1ZSBJRCAqLworCXVuc2lnbmVkIGludCBpZDsKKworCS8qIEZsYWdzICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwlfX2JlMzIgc2F2ZWRfaXA7CisJLyogVGhpcyBpcyB0aGUgb3JpZ2luYWwgcGVyLXByb3RvIHBhcnQsIHVzZWQgdG8gbWFwIHRoZQorCSAqIGV4cGVjdGVkIGNvbm5lY3Rpb24gdGhlIHdheSB0aGUgcmVjaXBpZW50IGV4cGVjdHMuICovCisJdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byBzYXZlZF9wcm90bzsKKwkvKiBEaXJlY3Rpb24gcmVsYXRpdmUgdG8gdGhlIG1hc3RlciBjb25uZWN0aW9uLiAqLworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CisjZW5kaWYKK307CisKKyNkZWZpbmUgTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVCAweDEKKworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCitfX25mX2Nvbm50cmFja19leHBlY3RfZmluZChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CisKK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKK25mX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCitmaW5kX2V4cGVjdGF0aW9uKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKKwordm9pZCBuZl9jdF91bmxpbmtfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOwordm9pZCBuZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCk7Cit2b2lkIG5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOworCisvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gZXhwZWN0YXRpb246IHRoaXMgaXMgbWFuZGF0b3J5IGJlZm9yZSBjYWxsaW5nCisgICBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQuICBZb3Ugd2lsbCBoYXZlIHRvIGNhbGwgcHV0IGFmdGVyd2FyZHMuICovCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpOwordm9pZCBuZl9jb25udHJhY2tfZXhwZWN0X2luaXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKiwgaW50LAorCQkJICAgICAgdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgKiwKKwkJCSAgICAgIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICosCisJCQkgICAgICB1X2ludDhfdCwgX19iZTE2ICosIF9fYmUxNiAqKTsKK3ZvaWQgbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CitpbnQgbmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3QpOworCisjZW5kaWYgLypfTkZfQ09OTlRSQUNLX0VYUEVDVF9IKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKaW5kZXggODZlYzgxNy4uOGM3MmFjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCkBAIC0zNCwyMCArMzQsMjIgQEAKIAkJICAgIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY29ubnRyYWNraW5mbyk7CiAKKwl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mX2Nvbm4gKmN0KTsKKwogCWludCAoKnRvX25mYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKIH07CiAKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCitfX25mX2N0X2hlbHBlcl9maW5kKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKKworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoKK25mX2N0X2hlbHBlcl9maW5kX2dldCggY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworCitleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgorX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gdm9pZCBuZl9jdF9oZWxwZXJfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXIpOwogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICopOwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICopOwogCi0vKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gZXhwZWN0YXRpb246IHRoaXMgaXMgbWFuZGF0b3J5IGJlZm9yZSBjYWxsaW5nCi0gICBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQuICBZb3Ugd2lsbCBoYXZlIHRvIGNhbGwgcHV0IGFmdGVyd2FyZHMuICovCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKgotbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyKTsKLWV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApOwotCi0vKiBBZGQgYW4gZXhwZWN0ZWQgY29ubmVjdGlvbjogY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwZXIgY29ubmVjdGlvbiAqLwotZXh0ZXJuIGludCBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7Ci1leHRlcm4gdm9pZCBuZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKTsKLQogI2VuZGlmIC8qX05GX0NPTk5UUkFDS19IRUxQRVJfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCmluZGV4IGRhYzQzYjEuLjY2NGRkY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oCkBAIC0xOCw5ICsxOCw2IEBACiAKIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90bwogewotCS8qIE5leHQgcG9pbnRlci4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KIAkvKiBMMyBQcm90b2NvbCBGYW1pbHkgbnVtYmVyLiBleCkgUEZfSU5FVCAqLwogCXVfaW50MTZfdCBsM3Byb3RvOwogCkBAIC03OCw2ICs3NSwxMiBAQAogCWludCAoKm5mYXR0cl90b190dXBsZSkoc3RydWN0IG5mYXR0ciAqdGJbXSwKIAkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKIAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgkqY3RsX3RhYmxlX2hlYWRlcjsKKwlzdHJ1Y3QgY3RsX3RhYmxlCSpjdGxfdGFibGVfcGF0aDsKKwlzdHJ1Y3QgY3RsX3RhYmxlCSpjdGxfdGFibGU7CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworCiAJLyogTW9kdWxlIChpZiBhbnkpIHdoaWNoIHRoaXMgaXMgY29ubmVjdGVkIHRvLiAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogfTsKQEAgLTg2LDcgKzg5LDcgQEAKIAogLyogUHJvdG9jb2wgcmVnaXN0cmF0aW9uLiAqLwogZXh0ZXJuIGludCBuZl9jb25udHJhY2tfbDNwcm90b19yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKnByb3RvKTsKLWV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90byk7CitleHRlcm4gaW50IG5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90byk7CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKgogbmZfY3RfbDNwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90byk7CkBAIC05NiwxMyArOTksMTMgQEAKIC8qIEV4aXN0aW5nIGJ1aWx0LWluIHByb3RvY29scyAqLwogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0OwogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfbDNwcm90b19pcHY2OwotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvOworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqCiBfX25mX2N0X2wzcHJvdG9fZmluZCh1X2ludDE2X3QgbDNwcm90bykKIHsKIAlpZiAodW5saWtlbHkobDNwcm90byA+PSBBRl9NQVgpKQotCQlyZXR1cm4gJm5mX2Nvbm50cmFja19nZW5lcmljX2wzcHJvdG87CisJCXJldHVybiAmbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYzsKIAlyZXR1cm4gbmZfY3RfbDNwcm90b3NbbDNwcm90b107CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIGluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaApyZW5hbWUgdG8gaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKaW5kZXggMWYzMzczNy4uZmM4YWYwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEhlYWRlciBmb3IgdXNlIGluIGRlZmluaW5nIGEgZ2l2ZW4gcHJvdG9jb2wgZm9yIGNvbm5lY3Rpb24gdHJhY2tpbmcuCisgKiBIZWFkZXIgZm9yIHVzZSBpbiBkZWZpbmluZyBhIGdpdmVuIEw0IHByb3RvY29sIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLgogICoKICAqIDE2IERlYyAyMDAzOiBZYXN1eXVraSBLb3pha2FpIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPgogICoJLSBnZW5lcmFsaXplZCBMMyBwcm90b2NvbCBkZXBlbmRlbnQgcGFydC4KQEAgLTcsMjMgKzcsMjAgQEAKICAqIERlcml2ZWQgZnJvbSBpbmNsdWRlL2xpbnV4L25ldGZpdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3Rjb2wuaAogICovCiAKLSNpZm5kZWYgX05GX0NPTk5UUkFDS19QUk9UT0NPTF9ICi0jZGVmaW5lIF9ORl9DT05OVFJBQ0tfUFJPVE9DT0xfSAorI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0w0UFJPVE9fSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX0w0UFJPVE9fSAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAKIHN0cnVjdCBzZXFfZmlsZTsKIHN0cnVjdCBuZmF0dHI7CiAKLXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wKK3N0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90bwogewotCS8qIE5leHQgcG9pbnRlci4gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0KIAkvKiBMMyBQcm90b2NvbCBudW1iZXIuICovCiAJdV9pbnQxNl90IGwzcHJvdG87CiAKLQkvKiBQcm90b2NvbCBudW1iZXIuICovCi0JdV9pbnQ4X3QgcHJvdG87CisJLyogTDQgUHJvdG9jb2wgbnVtYmVyLiAqLworCXVfaW50OF90IGw0cHJvdG87CiAKIAkvKiBQcm90b2NvbCBuYW1lICovCiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTc5LDMwICs3Niw0MCBAQAogCWludCAoKm5mYXR0cl90b190dXBsZSkoc3RydWN0IG5mYXR0ciAqdGJbXSwKIAkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKIAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlcgkqKmN0bF90YWJsZV9oZWFkZXI7CisJc3RydWN0IGN0bF90YWJsZQkqY3RsX3RhYmxlOworCXVuc2lnbmVkIGludAkJKmN0bF90YWJsZV91c2VyczsKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCisJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmN0bF9jb21wYXRfdGFibGVfaGVhZGVyOworCXN0cnVjdCBjdGxfdGFibGUJKmN0bF9jb21wYXRfdGFibGU7CisjZW5kaWYKKyNlbmRpZgorCiAJLyogTW9kdWxlIChpZiBhbnkpIHdoaWNoIHRoaXMgaXMgY29ubmVjdGVkIHRvLiAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogfTsKIAogLyogRXhpc3RpbmcgYnVpbHQtaW4gcHJvdG9jb2xzICovCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNjsKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA0OwotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDY7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbDsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdGNwNjsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNDsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNjsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fZ2VuZXJpYzsKIAogI2RlZmluZSBNQVhfTkZfQ1RfUFJPVE8gMjU2Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqKm5mX2N0X3Byb3Rvc1tQRl9NQVhdOworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqKm5mX2N0X3Byb3Rvc1tQRl9NQVhdOwogCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqCi1fX25mX2N0X3Byb3RvX2ZpbmQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IHByb3RvY29sKTsKK2V4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgorX19uZl9jdF9sNHByb3RvX2ZpbmQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pOwogCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqCi1uZl9jdF9wcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgcHJvdG9jb2wpOworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqCituZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KHVfaW50MTZfdCBsM3Byb3RvLCB1X2ludDhfdCBwcm90b2NvbCk7CiAKLWV4dGVybiB2b2lkIG5mX2N0X3Byb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwKTsKK2V4dGVybiB2b2lkIG5mX2N0X2w0cHJvdG9fcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcCk7CiAKIC8qIFByb3RvY29sIHJlZ2lzdHJhdGlvbi4gKi8KLWV4dGVybiBpbnQgbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvKTsKLWV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvKTsKK2V4dGVybiBpbnQgbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwcm90byk7CitleHRlcm4gaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwcm90byk7CiAKIC8qIEdlbmVyaWMgbmV0bGluayBoZWxwZXJzICovCiBleHRlcm4gaW50IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmZhdHRyKHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKaW5kZXggNTMwZWYxZi4uNWQ3MmIxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaApAQCAtMjQsMTAgKzI0LDEwIEBACiAKIC8qIFRoZSBsMyBwcm90b2NvbC1zcGVjaWZpYyBtYW5pcHVsYWJsZSBwYXJ0cyBvZiB0aGUgdHVwbGU6IGFsd2F5cyBpbgogICAgbmV0d29yayBvcmRlciEgKi8KLXVuaW9uIG5mX2Nvbm50cmFja19tYW5fbDNwcm90byB7Cit1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyB7CiAJdV9pbnQzMl90IGFsbFtORl9DVF9UVVBMRV9MM1NJWkVdOwotCXVfaW50MzJfdCBpcDsKLQl1X2ludDMyX3QgaXA2WzRdOworCV9fYmUzMiBpcDsKKwlfX2JlMzIgaXA2WzRdOwogfTsKIAogLyogVGhlIHByb3RvY29sLXNwZWNpZmljIG1hbmlwdWxhYmxlIHBhcnRzIG9mIHRoZSB0dXBsZTogYWx3YXlzIGluCkBAIC0zOCwyMyArMzgsMjYgQEAKIAl1X2ludDE2X3QgYWxsOwogCiAJc3RydWN0IHsKLQkJdV9pbnQxNl90IHBvcnQ7CisJCV9fYmUxNiBwb3J0OwogCX0gdGNwOwogCXN0cnVjdCB7Ci0JCXVfaW50MTZfdCBwb3J0OworCQlfX2JlMTYgcG9ydDsKIAl9IHVkcDsKIAlzdHJ1Y3QgewotCQl1X2ludDE2X3QgaWQ7CisJCV9fYmUxNiBpZDsKIAl9IGljbXA7CiAJc3RydWN0IHsKLQkJdV9pbnQxNl90IHBvcnQ7CisJCV9fYmUxNiBwb3J0OwogCX0gc2N0cDsKKwlzdHJ1Y3QgeworCQlfX2JlMTYga2V5OwkvKiBHUkUga2V5IGlzIDMyYml0LCBQUHRQIG9ubHkgdXNlcyAxNmJpdCAqLworCX0gZ3JlOwogfTsKIAogLyogVGhlIG1hbmlwdWxhYmxlIHBhcnQgb2YgdGhlIHR1cGxlLiAqLwogc3RydWN0IG5mX2Nvbm50cmFja19tYW4KIHsKLQl1bmlvbiBuZl9jb25udHJhY2tfbWFuX2wzcHJvdG8gdTM7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgdTM7CiAJdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byB1OwogCS8qIExheWVyIDMgcHJvdG9jb2wgKi8KIAl1X2ludDE2X3QgbDNudW07CkBAIC02NywyNyArNzAsMjYgQEAKIAogCS8qIFRoZXNlIGFyZSB0aGUgcGFydHMgb2YgdGhlIHR1cGxlIHdoaWNoIGFyZSBmaXhlZC4gKi8KIAlzdHJ1Y3QgewotCQl1bmlvbiB7Ci0JCQl1X2ludDMyX3QgYWxsW05GX0NUX1RVUExFX0wzU0laRV07Ci0JCQl1X2ludDMyX3QgaXA7Ci0JCQl1X2ludDMyX3QgaXA2WzRdOwotCQl9IHUzOworCQl1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyB1MzsKIAkJdW5pb24gewogCQkJLyogQWRkIG90aGVyIHByb3RvY29scyBoZXJlLiAqLwogCQkJdV9pbnQxNl90IGFsbDsKIAogCQkJc3RydWN0IHsKLQkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCQlfX2JlMTYgcG9ydDsKIAkJCX0gdGNwOwogCQkJc3RydWN0IHsKLQkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCQlfX2JlMTYgcG9ydDsKIAkJCX0gdWRwOwogCQkJc3RydWN0IHsKIAkJCQl1X2ludDhfdCB0eXBlLCBjb2RlOwogCQkJfSBpY21wOwogCQkJc3RydWN0IHsKLQkJCQl1X2ludDE2X3QgcG9ydDsKKwkJCQlfX2JlMTYgcG9ydDsKIAkJCX0gc2N0cDsKKwkJCXN0cnVjdCB7CisJCQkJX19iZTE2IGtleTsKKwkJCX0gZ3JlOwogCQl9IHU7CiAKIAkJLyogVGhlIHByb3RvY29sLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzYyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0LmgKQEAgLTAsMCArMSw3NyBAQAorI2lmbmRlZiBfTkZfTkFUX0gKKyNkZWZpbmUgX05GX05BVF9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorCisjZGVmaW5lIE5GX05BVF9NQVBQSU5HX1RZUEVfTUFYX05BTUVMRU4gMTYKKworZW51bSBuZl9uYXRfbWFuaXBfdHlwZQoreworCUlQX05BVF9NQU5JUF9TUkMsCisJSVBfTkFUX01BTklQX0RTVAorfTsKKworLyogU1JDIG1hbmlwIG9jY3VycyBQT1NUX1JPVVRJTkcgb3IgTE9DQUxfSU4gKi8KKyNkZWZpbmUgSE9PSzJNQU5JUChob29rbnVtKSAoKGhvb2tudW0pICE9IE5GX0lQX1BPU1RfUk9VVElORyAmJiAoaG9va251bSkgIT0gTkZfSVBfTE9DQUxfSU4pCisKKyNkZWZpbmUgSVBfTkFUX1JBTkdFX01BUF9JUFMgMQorI2RlZmluZSBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEIDIKKworLyogTkFUIHNlcXVlbmNlIG51bWJlciBtb2RpZmljYXRpb25zICovCitzdHJ1Y3QgbmZfbmF0X3NlcSB7CisJLyogcG9zaXRpb24gb2YgdGhlIGxhc3QgVENQIHNlcXVlbmNlIG51bWJlciBtb2RpZmljYXRpb24gKGlmIGFueSkgKi8KKwl1X2ludDMyX3QgY29ycmVjdGlvbl9wb3M7CisKKwkvKiBzZXF1ZW5jZSBudW1iZXIgb2Zmc2V0IGJlZm9yZSBhbmQgYWZ0ZXIgbGFzdCBtb2RpZmljYXRpb24gKi8KKwlpbnQxNl90IG9mZnNldF9iZWZvcmUsIG9mZnNldF9hZnRlcjsKK307CisKKy8qIFNpbmdsZSByYW5nZSBzcGVjaWZpY2F0aW9uLiAqLworc3RydWN0IG5mX25hdF9yYW5nZQoreworCS8qIFNldCB0byBPUiBvZiBmbGFncyBhYm92ZS4gKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKwkvKiBJbmNsdXNpdmU6IG5ldHdvcmsgb3JkZXIuICovCisJX19iZTMyIG1pbl9pcCwgbWF4X2lwOworCisJLyogSW5jbHVzaXZlOiBuZXR3b3JrIG9yZGVyICovCisJdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byBtaW4sIG1heDsKK307CisKKy8qIEZvciBiYWNrd2FyZHMgY29tcGF0OiBkb24ndCB1c2UgaW4gbW9kZXJuIGNvZGUuICovCitzdHJ1Y3QgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdAoreworCXVuc2lnbmVkIGludCByYW5nZXNpemU7IC8qIE11c3QgYmUgMS4gKi8KKworCS8qIGhhbmdzIG9mZiBlbmQuICovCisJc3RydWN0IG5mX25hdF9yYW5nZSByYW5nZVsxXTsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisvKiBUaGUgc3RydWN0dXJlIGVtYmVkZGVkIGluIHRoZSBjb25udHJhY2sgc3RydWN0dXJlLiAqLworc3RydWN0IG5mX25hdF9pbmZvCit7CisJc3RydWN0IGxpc3RfaGVhZCBieXNvdXJjZTsKKwlzdHJ1Y3QgbmZfbmF0X3NlcSBzZXFbSVBfQ1RfRElSX01BWF07Cit9OworCitzdHJ1Y3QgbmZfY29ubjsKKworLyogU2V0IHVwIHRoZSBpbmZvIHN0cnVjdHVyZSB0byBtYXAgaW50byB0aGlzIHJhbmdlLiAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9uYXRfc2V0dXBfaW5mbyhzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pOworCisvKiBJcyB0aGlzIHR1cGxlIGFscmVhZHkgdGFrZW4/IChub3QgYnkgdXMpKi8KK2V4dGVybiBpbnQgbmZfbmF0X3VzZWRfdHVwbGUoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICppZ25vcmVkX2Nvbm50cmFjayk7CisKK2V4dGVybiBpbnQgbmZfbmF0X21vZHVsZV9pc19sb2FkZWQ7CisKKyNlbHNlICAvKiAhX19LRVJORUxfXzogaXB0YWJsZXMgd2FudHMgdGhpcyB0byBjb21waWxlLiAqLworI2RlZmluZSBuZl9uYXRfbXVsdGlfcmFuZ2UgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdAorI2VuZGlmIC8qX19LRVJORUxfXyovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3OGZmYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX05GX05BVF9DT1JFX0gKKyNkZWZpbmUgX05GX05BVF9DT1JFX0gKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKworLyogVGhpcyBoZWFkZXIgdXNlZCB0byBzaGFyZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGUgc3RhbmRhbG9uZQorICAgTkFUIG1vZHVsZSwgYW5kIHRoZSBjb21wYXRpYmlsaXR5IGxheWVyJ3MgdXNlIG9mIE5BVCBmb3IgbWFzcXVlcmFkaW5nLiAqLworCitleHRlcm4gdW5zaWduZWQgaW50IG5mX25hdF9wYWNrZXQoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkgIHN0cnVjdCBza19idWZmICoqcHNrYik7CisKK2V4dGVybiBpbnQgbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24oc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJCSB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkJIHN0cnVjdCBza19idWZmICoqcHNrYik7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mX25hdF9pbml0aWFsaXplZChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwKQoreworCWlmIChtYW5pcCA9PSBJUF9OQVRfTUFOSVBfU1JDKQorCQlyZXR1cm4gdGVzdF9iaXQoSVBTX1NSQ19OQVRfRE9ORV9CSVQsICZjdC0+c3RhdHVzKTsKKwllbHNlCisJCXJldHVybiB0ZXN0X2JpdChJUFNfRFNUX05BVF9ET05FX0JJVCwgJmN0LT5zdGF0dXMpOworfQorI2VuZGlmIC8qIF9ORl9OQVRfQ09SRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk4ZWNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9ORl9OQVRfSEVMUEVSX0gKKyNkZWZpbmUgX05GX05BVF9IRUxQRVJfSAorLyogTkFUIHByb3RvY29sIGhlbHBlciByb3V0aW5lcy4gKi8KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisKK3N0cnVjdCBza19idWZmOworCisvKiBUaGVzZSByZXR1cm4gdHJ1ZSBvciBmYWxzZS4gKi8KK2V4dGVybiBpbnQgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHN0cnVjdCBza19idWZmICoqc2tiLAorCQkJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfbGVuLAorCQkJCSAgICBjb25zdCBjaGFyICpyZXBfYnVmZmVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVwX2xlbik7CitleHRlcm4gaW50IG5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnNrYiwKKwkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKKwkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNoX2xlbiwKKwkJCQkgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQkgICAgdW5zaWduZWQgaW50IHJlcF9sZW4pOworZXh0ZXJuIGludCBuZl9uYXRfc2VxX2FkanVzdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pOworCisvKiBTZXR1cCBOQVQgb24gdGhpcyBleHBlY3RlZCBjb25udHJhY2sgc28gaXQgZm9sbG93cyBtYXN0ZXIsIGJ1dCBnb2VzCisgKiB0byBwb3J0IGN0LT5tYXN0ZXItPnNhdmVkX3Byb3RvLiAqLworZXh0ZXJuIHZvaWQgbmZfbmF0X2ZvbGxvd19tYXN0ZXIoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqdGhpcyk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWVjNWVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qIEhlYWRlciBmb3IgdXNlIGluIGRlZmluaW5nIGEgZ2l2ZW4gcHJvdG9jb2wuICovCisjaWZuZGVmIF9ORl9OQVRfUFJPVE9DT0xfSAorI2RlZmluZSBfTkZfTkFUX1BST1RPQ09MX0gKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmg+CisKK3N0cnVjdCBuZl9uYXRfcmFuZ2U7CisKK3N0cnVjdCBuZl9uYXRfcHJvdG9jb2wKK3sKKwkvKiBQcm90b2NvbCBuYW1lICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFByb3RvY29sIG51bWJlci4gKi8KKwl1bnNpZ25lZCBpbnQgcHJvdG9udW07CisKKwlzdHJ1Y3QgbW9kdWxlICptZTsKKworCS8qIFRyYW5zbGF0ZSBhIHBhY2tldCB0byB0aGUgdGFyZ2V0IGFjY29yZGluZyB0byBtYW5pcCB0eXBlLgorCSAgIFJldHVybiB0cnVlIGlmIHN1Y2NlZWRlZC4gKi8KKwlpbnQgKCptYW5pcF9wa3QpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCisJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCQkgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpOworCisJLyogSXMgdGhlIG1hbmlwYWJsZSBwYXJ0IG9mIHRoZSB0dXBsZSBiZXR3ZWVuIG1pbiBhbmQgbWF4IGluY2w/ICovCisJaW50ICgqaW5fcmFuZ2UpKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCQljb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptaW4sCisJCQljb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptYXgpOworCisJLyogQWx0ZXIgdGhlIHBlci1wcm90byBwYXJ0IG9mIHRoZSB0dXBsZSAoZGVwZW5kaW5nIG9uCisJICAgbWFuaXB0eXBlKSwgdG8gZ2l2ZSBhIHVuaXF1ZSB0dXBsZSBpbiB0aGUgZ2l2ZW4gcmFuZ2UgaWYKKwkgICBwb3NzaWJsZTsgcmV0dXJuIGZhbHNlIGlmIG5vdC4gIFBlci1wcm90b2NvbCBwYXJ0IG9mIHR1cGxlCisJICAgaXMgaW5pdGlhbGl6ZWQgdG8gdGhlIGluY29taW5nIHBhY2tldC4gKi8KKwlpbnQgKCp1bmlxdWVfdHVwbGUpKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkJICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCk7CisKKwlpbnQgKCpyYW5nZV90b19uZmF0dHIpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpOworCisJaW50ICgqbmZhdHRyX3RvX3JhbmdlKShzdHJ1Y3QgbmZhdHRyICp0YltdLAorCQkJICAgICAgIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKTsKK307CisKKy8qIFByb3RvY29sIHJlZ2lzdHJhdGlvbi4gKi8KK2V4dGVybiBpbnQgbmZfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvKTsKK2V4dGVybiB2b2lkIG5mX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvKTsKKworZXh0ZXJuIHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKm5mX25hdF9wcm90b19maW5kX2dldCh1X2ludDhfdCBwcm90b2NvbCk7CitleHRlcm4gdm9pZCBuZl9uYXRfcHJvdG9fcHV0KHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvKTsKKworLyogQnVpbHQtaW4gcHJvdG9jb2xzLiAqLworZXh0ZXJuIHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgbmZfbmF0X3Byb3RvY29sX3RjcDsKK2V4dGVybiBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF91ZHA7CitleHRlcm4gc3RydWN0IG5mX25hdF9wcm90b2NvbCBuZl9uYXRfcHJvdG9jb2xfaWNtcDsKK2V4dGVybiBzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF91bmtub3duX3Byb3RvY29sOworCitleHRlcm4gaW50IGluaXRfcHJvdG9jb2xzKHZvaWQpIF9faW5pdDsKK2V4dGVybiB2b2lkIGNsZWFudXBfcHJvdG9jb2xzKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKmZpbmRfbmF0X3Byb3RvKHVfaW50MTZfdCBwcm90b251bSk7CisKK2V4dGVybiBpbnQgbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmZhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKTsKK2V4dGVybiBpbnQgbmZfbmF0X3BvcnRfbmZhdHRyX3RvX3JhbmdlKHN0cnVjdCBuZmF0dHIgKnRiW10sCisJCQkJICAgICAgIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKTsKKworI2VuZGlmIC8qX05GX05BVF9QUk9UT19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5MWM2NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgX05GX05BVF9SVUxFX0gKKyNkZWZpbmUgX05GX05BVF9SVUxFX0gKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisKKy8qIENvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMgZm9yIGlwdF9GT08gbW9kdWxlcyAqLworI2RlZmluZSBpcF9uYXRfcmFuZ2UJCQluZl9uYXRfcmFuZ2UKKyNkZWZpbmUgaXBfY29ubnRyYWNrX3R1cGxlCQluZl9jb25udHJhY2tfdHVwbGUKKyNkZWZpbmUgaXBfY29ubnRyYWNrX2dldAkJbmZfY3RfZ2V0CisjZGVmaW5lIGlwX2Nvbm50cmFjawkJCW5mX2Nvbm4KKyNkZWZpbmUgaXBfbmF0X3NldHVwX2luZm8JCW5mX25hdF9zZXR1cF9pbmZvCisjZGVmaW5lIGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQJbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdAorI2RlZmluZSBpcF9jdF9pdGVyYXRlX2NsZWFudXAJCW5mX2N0X2l0ZXJhdGVfY2xlYW51cAorI2RlZmluZQlJUF9ORl9BU1NFUlQJCQlORl9DVF9BU1NFUlQKKworZXh0ZXJuIGludCBuZl9uYXRfcnVsZV9pbml0KHZvaWQpIF9faW5pdDsKK2V4dGVybiB2b2lkIG5mX25hdF9ydWxlX2NsZWFudXAodm9pZCk7CitleHRlcm4gaW50IG5mX25hdF9ydWxlX2ZpbmQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkJICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICBzdHJ1Y3QgbmZfbmF0X2luZm8gKmluZm8pOworCitleHRlcm4gdW5zaWduZWQgaW50CithbGxvY19udWxsX2JpbmRpbmcoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICBzdHJ1Y3QgbmZfbmF0X2luZm8gKmluZm8sCisJCSAgIHVuc2lnbmVkIGludCBob29rbnVtKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludAorYWxsb2NfbnVsbF9iaW5kaW5nX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgIHN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbywKKwkJCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pOworI2VuZGlmIC8qIF9ORl9OQVRfUlVMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oIGIvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaAppbmRleCAxMmMyMTRiLi44M2RhN2UxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKQEAgLTExMSwxMyArMTExLDM0IEBACiAJdm9pZCAoKmZyZWUpIChjb25zdCB2b2lkICpkYXRhKTsKIAl2b2lkICpkYXRhOwogfTsKKy8qIFRoZSBjYXRtYXAgYml0bWFwIGZpZWxkIE1VU1QgYmUgYSBwb3dlciBvZiB0d28gaW4gbGVuZ3RoIGFuZCBsYXJnZQorICogZW5vdWdoIHRvIGhvbGQgYXQgbGVhc3QgMjQwIGJpdHMuICBTcGVjaWFsIGNhcmUgKGkuZS4gY2hlY2sgdGhlIGNvZGUhKQorICogc2hvdWxkIGJlIHVzZWQgd2hlbiBjaGFuZ2luZyB0aGVzZSB2YWx1ZXMgYXMgdGhlIExTTSBpbXBsZW1lbnRhdGlvbgorICogcHJvYmFibHkgaGFzIGZ1bmN0aW9ucyB3aGljaCByZWx5IG9uIHRoZSBzaXplcyBvZiB0aGVzZSB0eXBlcyB0byBzcGVlZAorICogcHJvY2Vzc2luZy4gKi8KKyNkZWZpbmUgTkVUTEJMX0NBVE1BUF9NQVBUWVBFICAgICAgICAgICB1NjQKKyNkZWZpbmUgTkVUTEJMX0NBVE1BUF9NQVBDTlQgICAgICAgICAgICA0CisjZGVmaW5lIE5FVExCTF9DQVRNQVBfTUFQU0laRSAgICAgICAgICAgKHNpemVvZihORVRMQkxfQ0FUTUFQX01BUFRZUEUpICogOCkKKyNkZWZpbmUgTkVUTEJMX0NBVE1BUF9TSVpFICAgICAgICAgICAgICAoTkVUTEJMX0NBVE1BUF9NQVBTSVpFICogXAorCQkJCQkgTkVUTEJMX0NBVE1BUF9NQVBDTlQpCisjZGVmaW5lIE5FVExCTF9DQVRNQVBfQklUICAgICAgICAgICAgICAgKE5FVExCTF9DQVRNQVBfTUFQVFlQRSkweDAxCitzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCB7CisJdTMyIHN0YXJ0Yml0OworCU5FVExCTF9DQVRNQVBfTUFQVFlQRSBiaXRtYXBbTkVUTEJMX0NBVE1BUF9NQVBDTlRdOworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpuZXh0OworfTsKKyNkZWZpbmUgTkVUTEJMX1NFQ0FUVFJfTk9ORSAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE5FVExCTF9TRUNBVFRSX0RPTUFJTiAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBORVRMQkxfU0VDQVRUUl9DQUNIRSAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkVUTEJMX1NFQ0FUVFJfTUxTX0xWTCAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE5FVExCTF9TRUNBVFRSX01MU19DQVQgICAgICAgICAgMHgwMDAwMDAwOAogc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciB7CisJdTMyIGZsYWdzOworCiAJY2hhciAqZG9tYWluOwogCiAJdTMyIG1sc19sdmw7Ci0JdTMyIG1sc19sdmxfdmxkOwotCXVuc2lnbmVkIGNoYXIgKm1sc19jYXQ7Ci0Jc2l6ZV90IG1sc19jYXRfbGVuOworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICptbHNfY2F0OwogCiAJc3RydWN0IG5ldGxibF9sc21fY2FjaGUgKmNhY2hlOwogfTsKQEAgLTE2NSwxOCArMTg2LDU0IEBACiB9CiAKIC8qKgorICogbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2FsbG9jIC0gQWxsb2NhdGUgYSBMU00gc2VjYXR0ciBjYXRtYXAKKyAqIEBmbGFnczogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSBMU00gc2VjYXR0ciBjYXRtYXAsIHJldHVybnMgYSBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwKKyAqIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpuZXRsYmxfc2VjYXR0cl9jYXRtYXBfYWxsb2MoCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZnBfdCBmbGFncykKK3sKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXApLCBmbGFncyk7Cit9CisKKy8qKgorICogbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2ZyZWUgLSBGcmVlIGEgTFNNIHNlY2F0dHIgY2F0bWFwCisgKiBAY2F0bWFwOiB0aGUgY2F0ZWdvcnkgYml0bWFwCisgKgorICogRGVzY3JpcHRpb246CisgKiBGcmVlIGEgTFNNIHNlY2F0dHIgY2F0bWFwLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5ldGxibF9zZWNhdHRyX2NhdG1hcF9mcmVlKAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXApCit7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKml0ZXI7CisKKwlkbyB7CisJCWl0ZXIgPSBjYXRtYXA7CisJCWNhdG1hcCA9IGNhdG1hcC0+bmV4dDsKKwkJa2ZyZWUoaXRlcik7CisJfSB3aGlsZSAoY2F0bWFwKTsKK30KKworLyoqCiAgKiBuZXRsYmxfc2VjYXR0cl9pbml0IC0gSW5pdGlhbGl6ZSBhIG5ldGxibF9sc21fc2VjYXR0ciBzdHJ1Y3QKICAqIEBzZWNhdHRyOiB0aGUgc3RydWN0IHRvIGluaXRpYWxpemUKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIEluaXRpYWxpemUgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgbmV0bGJsX2xzbV9zZWNhdHRyIHN0cnVjdC4gIFJldHVybnMgemVybyBvbgotICogc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGVycm9yLgorICogSW5pdGlhbGl6ZSBhbiBhbHJlYWR5IGFsbG9jYXRlZCBuZXRsYmxfbHNtX3NlY2F0dHIgc3RydWN0LgogICoKICAqLwotc3RhdGljIGlubGluZSBpbnQgbmV0bGJsX3NlY2F0dHJfaW5pdChzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQorc3RhdGljIGlubGluZSB2b2lkIG5ldGxibF9zZWNhdHRyX2luaXQoc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQltZW1zZXQoc2VjYXR0ciwgMCwgc2l6ZW9mKCpzZWNhdHRyKSk7Ci0JcmV0dXJuIDA7CisJc2VjYXR0ci0+ZmxhZ3MgPSAwOworCXNlY2F0dHItPmRvbWFpbiA9IE5VTEw7CisJc2VjYXR0ci0+bWxzX2NhdCA9IE5VTEw7CisJc2VjYXR0ci0+Y2FjaGUgPSBOVUxMOwogfQogCiAvKioKQEAgLTE5Myw3ICsyNTAsOCBAQAogCWlmIChzZWNhdHRyLT5jYWNoZSkKIAkJbmV0bGJsX3NlY2F0dHJfY2FjaGVfZnJlZShzZWNhdHRyLT5jYWNoZSk7CiAJa2ZyZWUoc2VjYXR0ci0+ZG9tYWluKTsKLQlrZnJlZShzZWNhdHRyLT5tbHNfY2F0KTsKKwlpZiAoc2VjYXR0ci0+bWxzX2NhdCkKKwkJbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2ZyZWUoc2VjYXR0ci0+bWxzX2NhdCk7CiB9CiAKIC8qKgpAQCAtMjA1LDcgKzI2Myw3IEBACiAgKiBwb2ludGVyIG9uIHN1Y2Nlc3MsIG9yIE5VTEwgb24gZmFpbHVyZS4KICAqCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqbmV0bGJsX3NlY2F0dHJfYWxsb2MoaW50IGZsYWdzKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpuZXRsYmxfc2VjYXR0cl9hbGxvYyhnZnBfdCBmbGFncykKIHsKIAlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciksIGZsYWdzKTsKIH0KQEAgLTIyNCw2ICsyODIsNTEgQEAKIAlrZnJlZShzZWNhdHRyKTsKIH0KIAorI2lmZGVmIENPTkZJR19ORVRMQUJFTAoraW50IG5ldGxibF9zZWNhdHRyX2NhdG1hcF93YWxrKHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXAsCisJCQkgICAgICAgdTMyIG9mZnNldCk7CitpbnQgbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3dhbGtfcm5nKHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXAsCisJCQkJICAgdTMyIG9mZnNldCk7CitpbnQgbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3NldGJpdChzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwLAorCQkJCSB1MzIgYml0LAorCQkJCSBnZnBfdCBmbGFncyk7CitpbnQgbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3NldHJuZyhzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwLAorCQkJCSB1MzIgc3RhcnQsCisJCQkJIHUzMiBlbmQsCisJCQkJIGdmcF90IGZsYWdzKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfd2FsaygKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwLAorCQkJCSAgICAgIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9zZWNhdHRyX2NhdG1hcF93YWxrX3JuZygKKwkJCQkgICAgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwLAorCQkJCSAgICAgIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGxibF9zZWNhdHRyX2NhdG1hcF9zZXRiaXQoCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKmNhdG1hcCwKKwkJCQkgICAgICB1MzIgYml0LAorCQkJCSAgICAgIGdmcF90IGZsYWdzKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfc2V0cm5nKAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXAsCisJCQkJICAgICAgdTMyIHN0YXJ0LAorCQkJCSAgICAgIHUzMiBlbmQsCisJCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogLyoKICAqIExTTSBwcm90b2NvbCBvcGVyYXRpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaAppbmRleCBjZTVjYmExLi5iY2FmNjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICAgICAgICAgTmV0bGluayBNZXNzYWdlcyBhbmQgQXR0cmlidXRlcyBJbnRlcmZhY2UgKEFzIFNlZW4gT24gVFYpCkBAIC01MDAsMTQgKzUwMSwxNSBAQAogCiAvKioKICAqIG5sbXNnX25ldyAtIEFsbG9jYXRlIGEgbmV3IG5ldGxpbmsgbWVzc2FnZQotICogQHNpemU6IG1heGltdW0gc2l6ZSBvZiBtZXNzYWdlCisgKiBAcGF5bG9hZDogc2l6ZSBvZiB0aGUgbWVzc2FnZSBwYXlsb2FkCiAgKiBAZmxhZ3M6IHRoZSB0eXBlIG9mIG1lbW9yeSB0byBhbGxvY2F0ZS4KICAqCi0gKiBVc2UgTkxNU0dfR09PRFNJWkUgaWYgc2l6ZSBpc24ndCBrbm93IGFuZCB5b3UgbmVlZCBhIGdvb2QgZGVmYXVsdCBzaXplLgorICogVXNlIE5MTVNHX0RFRkFVTFRfU0laRSBpZiB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCBpc24ndCBrbm93bgorICogYW5kIGEgZ29vZCBkZWZhdWx0IGlzIG5lZWRlZC4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmxtc2dfbmV3KGludCBzaXplLCBnZnBfdCBmbGFncykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5sbXNnX25ldyhzaXplX3QgcGF5bG9hZCwgZ2ZwX3QgZmxhZ3MpCiB7Ci0JcmV0dXJuIGFsbG9jX3NrYihzaXplLCBmbGFncyk7CisJcmV0dXJuIGFsbG9jX3NrYihubG1zZ190b3RhbF9zaXplKHBheWxvYWQpLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtODI4LDYgKzgzMCw5IEBACiAjZGVmaW5lIE5MQV9QVVRfVTE2KHNrYiwgYXR0cnR5cGUsIHZhbHVlKSBcCiAJTkxBX1BVVF9UWVBFKHNrYiwgdTE2LCBhdHRydHlwZSwgdmFsdWUpCiAKKyNkZWZpbmUgTkxBX1BVVF9MRTE2KHNrYiwgYXR0cnR5cGUsIHZhbHVlKSBcCisJTkxBX1BVVF9UWVBFKHNrYiwgX19sZTE2LCBhdHRydHlwZSwgdmFsdWUpCisKICNkZWZpbmUgTkxBX1BVVF9VMzIoc2tiLCBhdHRydHlwZSwgdmFsdWUpIFwKIAlOTEFfUFVUX1RZUEUoc2tiLCB1MzIsIGF0dHJ0eXBlLCB2YWx1ZSkKIApAQCAtODc0LDYgKzg3OSwxNSBAQAogfQogCiAvKioKKyAqIG5sYV9nZXRfbGUxNiAtIHJldHVybiBwYXlsb2FkIG9mIF9fbGUxNiBhdHRyaWJ1dGUKKyAqIEBubGE6IF9fbGUxNiBuZXRsaW5rIGF0dHJpYnV0ZQorICovCitzdGF0aWMgaW5saW5lIF9fbGUxNiBubGFfZ2V0X2xlMTYoc3RydWN0IG5sYXR0ciAqbmxhKQoreworCXJldHVybiAqKF9fbGUxNiAqKSBubGFfZGF0YShubGEpOworfQorCisvKioKICAqIG5sYV9nZXRfdTggLSByZXR1cm4gcGF5bG9hZCBvZiB1OCBhdHRyaWJ1dGUKICAqIEBubGE6IHU4IG5ldGxpbmsgYXR0cmlidXRlCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Byb3RvY29sLmggYi9pbmNsdWRlL25ldC9wcm90b2NvbC5oCmluZGV4IGM2NDNiY2UuLjEwNWJmMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKKysrIGIvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaApAQCAtNTAsNyArNTAsNyBAQAogCXZvaWQJKCplcnJfaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKIAkJCSAgICAgICBpbnQgdHlwZSwgaW50IGNvZGUsIGludCBvZmZzZXQsCi0JCQkgICAgICAgX191MzIgaW5mbyk7CisJCQkgICAgICAgX19iZTMyIGluZm8pOwogCiAJaW50CSgqZ3NvX3NlbmRfY2hlY2spKHN0cnVjdCBza19idWZmICpza2IpOwogCXN0cnVjdCBza19idWZmICooKmdzb19zZWdtZW50KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNzEsNyArNzEsNyBAQAogCiAgICAgICAgIC8qIFRoZXNlIHR3byBmaWVsZHMgZm9ybSB0aGUgbG9va3VwIGtleS4gICovCiAJdW5zaWduZWQgc2hvcnQJIHR5cGU7CSAgIC8qIFRoaXMgaXMgdGhlIDJuZCBhcmd1bWVudCB0byBzb2NrZXQoMikuICovCi0JaW50CQkgcHJvdG9jb2w7IC8qIFRoaXMgaXMgdGhlIEw0IHByb3RvY29sIG51bWJlci4gICovCisJdW5zaWduZWQgc2hvcnQJIHByb3RvY29sOyAvKiBUaGlzIGlzIHRoZSBMNCBwcm90b2NvbCBudW1iZXIuICAqLwogCiAJc3RydWN0IHByb3RvCSAqcHJvdDsKIAljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yYXd2Ni5oIGIvaW5jbHVkZS9uZXQvcmF3djYuaAppbmRleCAxNDQ3NmE3Li5hZjg5NjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yYXd2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L3Jhd3Y2LmgKQEAgLTIxLDcgKzIxLDcgQEAKIAkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCQkJCQkgIGludCB0eXBlLCBpbnQgY29kZSwgCi0JCQkJCSAgaW50IG9mZnNldCwgdTMyIGluZm8pOworCQkJCQkgIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgKaW5kZXggOGUxNjVjYS4uZTM3YmFhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvcmVxdWVzdF9zb2NrLmgKQEAgLTI4LDE0ICsyOCwxNSBAQAogCiBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB7CiAJaW50CQlmYW1pbHk7Ci0Ja21lbV9jYWNoZV90CSpzbGFiOwogCWludAkJb2JqX3NpemU7CisJa21lbV9jYWNoZV90CSpzbGFiOwogCWludAkJKCpydHhfc3luX2Fjaykoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkJICAgICAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CiAJdm9pZAkJKCpzZW5kX2Fjaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKLQl2b2lkCQkoKnNlbmRfcmVzZXQpKHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQJCSgqc2VuZF9yZXNldCkoc3RydWN0IHNvY2sgKnNrLAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQJCSgqZGVzdHJ1Y3Rvcikoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKIH07CiAKQEAgLTUxLDEyICs1MiwxMyBAQAogCXUzMgkJCQlyY3Zfd25kOwkgIC8qIHJjdl93bmQgb2ZmZXJlZCBmaXJzdCB0aW1lICovCiAJdTMyCQkJCXRzX3JlY2VudDsKIAl1bnNpZ25lZCBsb25nCQkJZXhwaXJlczsKLQlzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcwkJKnJza19vcHM7CisJY29uc3Qgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMJKnJza19vcHM7CiAJc3RydWN0IHNvY2sJCQkqc2s7CiAJdTMyCQkJCXNlY2lkOworCXUzMgkJCQlwZWVyX3NlY2lkOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXFza19hbGxvYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXFza19hbGxvYyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyAqb3BzKQogewogCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSA9IGttZW1fY2FjaGVfYWxsb2Mob3BzLT5zbGFiLCBTTEFCX0FUT01JQyk7CiAKQEAgLTEyMCw3ICsxMjIsNyBAQAogfTsKIAogZXh0ZXJuIGludCByZXFza19xdWV1ZV9hbGxvYyhzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSwKLQkJCSAgICAgY29uc3QgaW50IG5yX3RhYmxlX2VudHJpZXMpOworCQkJICAgICB1bnNpZ25lZCBpbnQgbnJfdGFibGVfZW50cmllcyk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3Rlbl9zb2NrICpyZXFza19xdWV1ZV95YW5rX2xpc3Rlbl9zayhzdHJ1Y3QgcmVxdWVzdF9zb2NrX3F1ZXVlICpxdWV1ZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IGIwZTkxMDguLjgyMDg2MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtNjAsNiArNjAsNyBAQAogCWludAkJCSgqZ3JhZnQpKHN0cnVjdCBRZGlzYyAqLCB1bnNpZ25lZCBsb25nIGNsLAogCQkJCQlzdHJ1Y3QgUWRpc2MgKiwgc3RydWN0IFFkaXNjICoqKTsKIAlzdHJ1Y3QgUWRpc2MgKgkJKCpsZWFmKShzdHJ1Y3QgUWRpc2MgKiwgdW5zaWduZWQgbG9uZyBjbCk7CisJdm9pZAkJCSgqcWxlbl9ub3RpZnkpKHN0cnVjdCBRZGlzYyAqLCB1bnNpZ25lZCBsb25nKTsKIAogCS8qIENsYXNzIG1hbmlwdWxhdGlvbiByb3V0aW5lcyAqLwogCXVuc2lnbmVkIGxvbmcJCSgqZ2V0KShzdHJ1Y3QgUWRpc2MgKiwgdTMyIGNsYXNzaWQpOwpAQCAtMTQ0LDcgKzE0NSw3IEBACiAJdm9pZAkJCSpyb290OwogCWludAkJCSgqY2xhc3NpZnkpKHN0cnVjdCBza19idWZmKiwgc3RydWN0IHRjZl9wcm90byosCiAJCQkJCXN0cnVjdCB0Y2ZfcmVzdWx0ICopOwotCXUzMgkJCXByb3RvY29sOworCV9fYmUxNgkJCXByb3RvY29sOwogCiAJLyogQWxsIHRoZSByZXN0ICovCiAJdTMyCQkJcHJpbzsKQEAgLTE3Miw5ICsxNzMsMTAgQEAKIGV4dGVybiB2b2lkIGRldl9kZWFjdGl2YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgcWRpc2NfcmVzZXQoc3RydWN0IFFkaXNjICpxZGlzYyk7CiBleHRlcm4gdm9pZCBxZGlzY19kZXN0cm95KHN0cnVjdCBRZGlzYyAqcWRpc2MpOworZXh0ZXJuIHZvaWQgcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHN0cnVjdCBRZGlzYyAqcWRpc2MsIHVuc2lnbmVkIGludCBuKTsKIGV4dGVybiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBRZGlzY19vcHMgKm9wcyk7CiBleHRlcm4gc3RydWN0IFFkaXNjICpxZGlzY19jcmVhdGVfZGZsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMpOworCQkJCSAgICAgICBzdHJ1Y3QgUWRpc2Nfb3BzICpvcHMsIHUzMiBwYXJlbnRpZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdGNmX2Rlc3Ryb3koc3RydWN0IHRjZl9wcm90byAqdHApCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCmluZGV4IDgwN2Q2ZjEuLjYxMTRjNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC0xMTYsOSArMTE2LDExIEBACiB0eXBlZGVmIHVuaW9uIHsKIAlfX3MzMiBpMzI7CiAJX191MzIgdTMyOworCV9fYmUzMiBiZTMyOwogCV9fdTE2IHUxNjsKIAlfX3U4IHU4OwogCWludCBlcnJvcjsKKwlfX2JlMTYgZXJyOwogCXNjdHBfc3RhdGVfdCBzdGF0ZTsKIAlzY3RwX2V2ZW50X3RpbWVvdXRfdCB0bzsKIAl1bnNpZ25lZCBsb25nIHplcm87CkBAIC0xNjQsOSArMTY2LDExIEBACiAKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKEkzMiwJX19zMzIsIGkzMikKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKFUzMiwJX191MzIsIHUzMikKK1NDVFBfQVJHX0NPTlNUUlVDVE9SKEJFMzIsCV9fYmUzMiwgYmUzMikKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKFUxNiwJX191MTYsIHUxNikKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKFU4LAlfX3U4LCB1OCkKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKEVSUk9SLCAgICAgaW50LCBlcnJvcikKK1NDVFBfQVJHX0NPTlNUUlVDVE9SKFBFUlIsICAgICAgX19iZTE2LCBlcnIpCS8qIHByb3RvY29sIGVycm9yICovCiBTQ1RQX0FSR19DT05TVFJVQ1RPUihTVEFURSwJc2N0cF9zdGF0ZV90LCBzdGF0ZSkKIFNDVFBfQVJHX0NPTlNUUlVDVE9SKFRPLAlzY3RwX2V2ZW50X3RpbWVvdXRfdCwgdG8pCiBTQ1RQX0FSR19DT05TVFJVQ1RPUihQVFIsCXZvaWQgKiwgcHRyKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKaW5kZXggNmM2MzJlMi4uNWRkYjg1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCkBAIC0zNTYsNyArMzU2LDcgQEAKICAqIGFkZHJlc3Nlcy4KICAqLwogI2RlZmluZSBJU19JUFY0X1VOVVNBQkxFX0FERFJFU1MoYSkgXAotCSgoSU5BRERSX0JST0FEQ0FTVCA9PSAqYSkgfHwgXAorCSgoaHRvbmwoSU5BRERSX0JST0FEQ0FTVCkgPT0gKmEpIHx8IFwKIAkoTVVMVElDQVNUKCphKSkgfHwgXAogCSgoKHVuc2lnbmVkIGNoYXIgKikoYSkpWzBdID09IDApIHx8IFwKIAkoKCgodW5zaWduZWQgY2hhciAqKShhKSlbMF0gPT0gMTk4KSAmJiBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCmluZGV4IDc2NGUzYWYuLjIxNTQ2MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oCkBAIC01ODUsNyArNTg1LDcgQEAKIH0KIAogLyogQ29udmVydCBmcm9tIGFuIGFkZHJlc3MgcGFyYW1ldGVyIHR5cGUgdG8gYW4gYWRkcmVzcyBmYW1pbHkuICAqLwotc3RhdGljIGlubGluZSBpbnQgcGFyYW1fdHlwZTJhZihfX3UxNiB0eXBlKQorc3RhdGljIGlubGluZSBpbnQgcGFyYW1fdHlwZTJhZihfX2JlMTYgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zbS5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCmluZGV4IGRlMzEzZGUuLjMyNjllZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc20uaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NtLmgKQEAgLTIxMyw3ICsyMTMsNyBAQAogCQkJCQkgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICopOwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9zaHV0ZG93bl9jb21wbGV0ZShjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICopOwotdm9pZCBzY3RwX2luaXRfY2F1c2Uoc3RydWN0IHNjdHBfY2h1bmsgKiwgX191MTYgY2F1c2UsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK3ZvaWQgc2N0cF9pbml0X2NhdXNlKHN0cnVjdCBzY3RwX2NodW5rICosIF9fYmUxNiBjYXVzZSwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hYm9ydChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAogCQkJICAgICAgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKiwKIAkJCSAgICAgIGNvbnN0IHNpemVfdCBoaW50KTsKQEAgLTIzNiwxNCArMjM2LDE0IEBACiAJCQkJICAgICAgY29uc3Qgc2l6ZV90IHBheWxlbik7CiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX29wX2Vycm9yKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCiAJCQkJIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKLQkJCQkgX191MTYgY2F1c2VfY29kZSwKKwkJCQkgX19iZTE2IGNhdXNlX2NvZGUsCiAJCQkJIGNvbnN0IHZvaWQgKnBheWxvYWQsCiAJCQkJIHNpemVfdCBwYXlsZW4pOwogCiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2FzY29uZl91cGRhdGVfaXAoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkJICAgICAgdW5pb24gc2N0cF9hZGRyICosCiAJCQkJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqLAotCQkJCQkgICAgICBpbnQsIF9fdTE2KTsKKwkJCQkJICAgICAgaW50LCBfX2JlMTYpOwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hc2NvbmZfc2V0X3ByaW0oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCQkJCSAgICAgdW5pb24gc2N0cF9hZGRyICphZGRyKTsKIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3NfYXNjb25mKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBjNmQ5M2JiLi5mOGNiZTQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtNTM3LDcgKzUzNyw3IEBACiAJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKik7CiAJdm9pZAkJKCpkc3Rfc2FkZHIpCSh1bmlvbiBzY3RwX2FkZHIgKnNhZGRyLAogCQkJCQkgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJCQkgdW5zaWduZWQgc2hvcnQgcG9ydCk7CisJCQkJCSBfX2JlMTYgcG9ydCk7CiAJaW50CQkoKmNtcF9hZGRyKQkoY29uc3QgdW5pb24gc2N0cF9hZGRyICphZGRyMSwKIAkJCQkJIGNvbnN0IHVuaW9uIHNjdHBfYWRkciAqYWRkcjIpOwogCXZvaWQJCSgqYWRkcl9jb3B5KQkodW5pb24gc2N0cF9hZGRyICpkc3QsCkBAIC01NTMsMTQgKzU1MywxNCBAQAogCQkJCQkgc3RydWN0IHNvY2sgKnNrKTsKIAl2b2lkCQkoKmZyb21fYWRkcl9wYXJhbSkgKHVuaW9uIHNjdHBfYWRkciAqLAogCQkJCQkgICAgdW5pb24gc2N0cF9hZGRyX3BhcmFtICosCi0JCQkJCSAgICBfX3UxNiBwb3J0LCBpbnQgaWlmKTsJCisJCQkJCSAgICBfX2JlMTYgcG9ydCwgaW50IGlpZik7CiAJaW50CQkoKnRvX2FkZHJfcGFyYW0pIChjb25zdCB1bmlvbiBzY3RwX2FkZHIgKiwKIAkJCQkJICB1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKik7IAogCWludAkJKCphZGRyX3ZhbGlkKQkodW5pb24gc2N0cF9hZGRyICosCiAJCQkJCSBzdHJ1Y3Qgc2N0cF9zb2NrICosCiAJCQkJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIAlzY3RwX3Njb3BlX3QJKCpzY29wZSkgKHVuaW9uIHNjdHBfYWRkciAqKTsKLQl2b2lkCQkoKmluYWRkcl9hbnkpCSh1bmlvbiBzY3RwX2FkZHIgKiwgdW5zaWduZWQgc2hvcnQpOworCXZvaWQJCSgqaW5hZGRyX2FueSkJKHVuaW9uIHNjdHBfYWRkciAqLCBfX2JlMTYpOwogCWludAkJKCppc19hbnkpCShjb25zdCB1bmlvbiBzY3RwX2FkZHIgKik7CiAJaW50CQkoKmF2YWlsYWJsZSkJKHVuaW9uIHNjdHBfYWRkciAqLAogCQkJCQkgc3RydWN0IHNjdHBfc29jayAqKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCQkJICBzdHJ1Y3Qgc2N0cF9zb2NrICopOwogCWludCAgKCpiaW5kX3ZlcmlmeSkgKHN0cnVjdCBzY3RwX3NvY2sgKiwgdW5pb24gc2N0cF9hZGRyICopOwogCWludCAgKCpzZW5kX3ZlcmlmeSkgKHN0cnVjdCBzY3RwX3NvY2sgKiwgdW5pb24gc2N0cF9hZGRyICopOwotCWludCAgKCpzdXBwb3J0ZWRfYWRkcnMpKGNvbnN0IHN0cnVjdCBzY3RwX3NvY2sgKiwgX191MTYgKik7CisJaW50ICAoKnN1cHBvcnRlZF9hZGRycykoY29uc3Qgc3RydWN0IHNjdHBfc29jayAqLCBfX2JlMTYgKik7CiAJc3RydWN0IHNvY2sgKigqY3JlYXRlX2FjY2VwdF9zaykgKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CiAJdm9pZCAoKmFkZHJfdjRtYXApIChzdHJ1Y3Qgc2N0cF9zb2NrICosIHVuaW9uIHNjdHBfYWRkciAqKTsKQEAgLTEyNzAsNyArMTI3MCw3IEBACiAgCSAqIAkgICAgdGhpcyBoZXJlIHNvIHdlIHByZS1hbGxvY2F0ZSB0aGlzIG9uY2UgYW5kIGNhbiByZS11c2UKICAJICogCSAgICBvbiBldmVyeSByZWNlaXZlLgogIAkgKi8KLSAJX191OCBkaWdlc3RbU0NUUF9TSUdOQVRVUkVfU0laRV07CisgCV9fdTggKmRpZ2VzdDsKICAKIAkvKiBzZW5kYnVmIGFjY3QuIHBvbGljeS4JKi8KIAlfX3UzMiBzbmRidWZfcG9saWN5OwpAQCAtMTMxNCw2ICsxMzE0LDEzIEBACiBfX3UzMiBzY3RwX2dlbmVyYXRlX3RhZyhjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqKTsKIF9fdTMyIHNjdHBfZ2VuZXJhdGVfdHNuKGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICopOwogCitzdHJ1Y3Qgc2N0cF9pbml0aGRyX2hvc3QgeworCV9fdTMyIGluaXRfdGFnOworCV9fdTMyIGFfcnduZDsKKwlfX3UxNiBudW1fb3V0Ym91bmRfc3RyZWFtczsKKwlfX3UxNiBudW1faW5ib3VuZF9zdHJlYW1zOworCV9fdTMyIGluaXRpYWxfdHNuOworfTsKIAogLyogUkZDMjk2MAogICoKQEAgLTE0ODIsOSArMTQ4OSw5IEBACiAJCS8qIFRoaXMgbWFzayBpcyB1c2VkIHRvIGRpc2FibGUgc2VuZGluZyB0aGUgQVNDT05GIGNodW5rCiAJCSAqIHdpdGggc3BlY2lmaWVkIHBhcmFtZXRlciB0byBwZWVyLgogCQkgKi8KLQkJX191MTYgYWRkaXBfZGlzYWJsZWRfbWFzazsKKwkJX19iZTE2IGFkZGlwX2Rpc2FibGVkX21hc2s7CiAKLQkJc3RydWN0IHNjdHBfaW5pdGhkciBpOworCQlzdHJ1Y3Qgc2N0cF9pbml0aGRyX2hvc3QgaTsKIAkJaW50IGNvb2tpZV9sZW47CiAJCXZvaWQgKmNvb2tpZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC90c25tYXAuaCBiL2luY2x1ZGUvbmV0L3NjdHAvdHNubWFwLmgKaW5kZXggMDIxOTQ3ZC4uNzBhODI0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC90c25tYXAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3Rzbm1hcC5oCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkgKiBldmVyeSBTQUNLLiAgU3RvcmUgdXAgdG8gU0NUUF9NQVhfRFVQX1RTTlMgd29ydGggb2YKIAkgKiBpbmZvcm1hdGlvbi4KIAkgKi8KLQlfX3UzMiBkdXBfdHNuc1tTQ1RQX01BWF9EVVBfVFNOU107CisJX19iZTMyIGR1cF90c25zW1NDVFBfTUFYX0RVUF9UU05TXTsKIAlfX3UxNiBudW1fZHVwX3RzbnM7CiAKIAkvKiBSZWNvcmQgZ2FwIGFjayBibG9jayBpbmZvcm1hdGlvbiBoZXJlLiAgKi8KQEAgLTE2Miw3ICsxNjIsNyBAQAogfQogCiAvKiBSZXR1cm4gcG9pbnRlciB0byBkdXBsaWNhdGUgdHNuIGFycmF5IGFzIG5lZWRlZCBieSBTQUNLLiAqLwotc3RhdGljIGlubGluZSBfX3UzMiAqc2N0cF90c25tYXBfZ2V0X2R1cHMoc3RydWN0IHNjdHBfdHNubWFwICptYXApCitzdGF0aWMgaW5saW5lIF9fYmUzMiAqc2N0cF90c25tYXBfZ2V0X2R1cHMoc3RydWN0IHNjdHBfdHNubWFwICptYXApCiB7CiAJbWFwLT5udW1fZHVwX3RzbnMgPSAwOwogCXJldHVybiBtYXAtPmR1cF90c25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDljZGJhZTIuLmZlM2EzM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CS8qIHN0cnVjdCBza19idWZmICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogCiAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CkBAIC03NDUsNyArNzQ2LDEzIEBACiAgKi8KICNkZWZpbmUgc29ja19vd25lZF9ieV91c2VyKHNrKQkoKHNrKS0+c2tfbG9jay5vd25lcikKIAotZXh0ZXJuIHZvaWQgRkFTVENBTEwobG9ja19zb2NrKHN0cnVjdCBzb2NrICpzaykpOworZXh0ZXJuIHZvaWQgRkFTVENBTEwobG9ja19zb2NrX25lc3RlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdWJjbGFzcykpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19zb2NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlsb2NrX3NvY2tfbmVzdGVkKHNrLCAwKTsKK30KKwogZXh0ZXJuIHZvaWQgRkFTVENBTEwocmVsZWFzZV9zb2NrKHN0cnVjdCBzb2NrICpzaykpOwogCiAvKiBCSCBjb250ZXh0IG1heSBvbmx5IHVzZSB0aGUgZm9sbG93aW5nIGxvY2tpbmcgaW50ZXJmYWNlLiAqLwpAQCAtOTQ4LDcgKzk1NSw4IEBACiAJCXNrX2ZyZWUoc2spOwogfQogCi1leHRlcm4gaW50IHNrX3JlY2VpdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHNrX3JlY2VpdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgY29uc3QgaW50IG5lc3RlZCk7CiAKIC8qIERldGFjaCBzb2NrZXQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCiAgKiBBbm5vdW5jZSBzb2NrZXQgZGVhZCwgZGV0YWNoIGl0IGZyb20gd2FpdCBxdWV1ZSBhbmQgaW5vZGUuCkBAIC0xMDgyLDcgKzEwOTAsNyBAQAogewogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7CiAJCWludCBlcnIgPSAwOwotCQl1bnNpZ25lZCBpbnQgY3N1bSA9IGNzdW1fYW5kX2NvcHlfZnJvbV91c2VyKGZyb20sCisJCV9fd3N1bSBjc3VtID0gY3N1bV9hbmRfY29weV9mcm9tX3VzZXIoZnJvbSwKIAkJCQkJCSAgICAgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2ZmLAogCQkJCQkJCSAgICBjb3B5LCAwLCAmZXJyKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggN2EwOTNkMC4uYzk5Nzc0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD4KQEAgLTEzOCw3ICsxMzksNiBAQAogI2RlZmluZSBNQVhfVENQX1NZTkNOVAkJMTI3CiAKICNkZWZpbmUgVENQX1NZTlFfSU5URVJWQUwJKEhaLzUpCS8qIFBlcmlvZCBvZiBTWU5BQ0sgdGltZXIgKi8KLSNkZWZpbmUgVENQX1NZTlFfSFNJWkUJCTUxMgkvKiBTaXplIG9mIFNZTkFDSyBoYXNoIHRhYmxlICovCiAKICNkZWZpbmUgVENQX1BBV1NfMjREQVlTCSg2MCAqIDYwICogMjQgKiAyNCkKICNkZWZpbmUgVENQX1BBV1NfTVNMCTYwCQkvKiBQZXItaG9zdCB0aW1lc3RhbXBzIGFyZSBpbnZhbGlkYXRlZApAQCAtMTYyLDYgKzE2Miw3IEBACiAjZGVmaW5lIFRDUE9QVF9TQUNLX1BFUk0gICAgICAgIDQgICAgICAgLyogU0FDSyBQZXJtaXR0ZWQgKi8KICNkZWZpbmUgVENQT1BUX1NBQ0sgICAgICAgICAgICAgNSAgICAgICAvKiBTQUNLIEJsb2NrICovCiAjZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAJOAkvKiBCZXR0ZXIgUlRUIGVzdGltYXRpb25zL1BBV1MgKi8KKyNkZWZpbmUgVENQT1BUX01ENVNJRwkJMTkJLyogTUQ1IFNpZ25hdHVyZSAoUkZDMjM4NSkgKi8KIAogLyoKICAqICAgICBUQ1Agb3B0aW9uIGxlbmd0aHMKQEAgLTE3MSw2ICsxNzIsNyBAQAogI2RlZmluZSBUQ1BPTEVOX1dJTkRPVyAgICAgICAgIDMKICNkZWZpbmUgVENQT0xFTl9TQUNLX1BFUk0gICAgICAyCiAjZGVmaW5lIFRDUE9MRU5fVElNRVNUQU1QICAgICAgMTAKKyNkZWZpbmUgVENQT0xFTl9NRDVTSUcgICAgICAgICAxOAogCiAvKiBCdXQgdGhpcyBpcyB3aGF0IHN0YWNrcyByZWFsbHkgc2VuZCBvdXQuICovCiAjZGVmaW5lIFRDUE9MRU5fVFNUQU1QX0FMSUdORUQJCTEyCkBAIC0xNzksNiArMTgxLDcgQEAKICNkZWZpbmUgVENQT0xFTl9TQUNLX0JBU0UJCTIKICNkZWZpbmUgVENQT0xFTl9TQUNLX0JBU0VfQUxJR05FRAk0CiAjZGVmaW5lIFRDUE9MRU5fU0FDS19QRVJCTE9DSwkJOAorI2RlZmluZSBUQ1BPTEVOX01ENVNJR19BTElHTkVECQkyMAogCiAvKiBGbGFncyBpbiB0cC0+bm9uYWdsZSAqLwogI2RlZmluZSBUQ1BfTkFHTEVfT0ZGCQkxCS8qIE5hZ2xlJ3MgYWxnbyBpcyBkaXNhYmxlZCAqLwpAQCAtMzAwLDYgKzMwMyw4IEBACiBleHRlcm4gaW50CQkJdGNwX3R3c2tfdW5pcXVlKHN0cnVjdCBzb2NrICpzaywKIAkJCQkJCXN0cnVjdCBzb2NrICpza3R3LCB2b2lkICp0d3ApOwogCitleHRlcm4gdm9pZAkJCXRjcF90d3NrX2Rlc3RydWN0b3Ioc3RydWN0IHNvY2sgKnNrKTsKKwogc3RhdGljIGlubGluZSB2b2lkIHRjcF9kZWNfcXVpY2thY2tfbW9kZShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgcGt0cykKIHsKQEAgLTYyMSw4ICs2MjYsMTIgQEAKICAqIEludGVyZmFjZSBmb3IgYWRkaW5nIG5ldyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIGhhbmRsZXJzCiAgKi8KICNkZWZpbmUgVENQX0NBX05BTUVfTUFYCTE2CisjZGVmaW5lIFRDUF9DQV9NQVgJMTI4CisjZGVmaW5lIFRDUF9DQV9CVUZfTUFYCShUQ1BfQ0FfTkFNRV9NQVgqVENQX0NBX01BWCkKKwogc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWludAlub25fcmVzdHJpY3RlZDsKIAogCS8qIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhIChvcHRpb25hbCkgKi8KIAl2b2lkICgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTsKQEAgLTY2MCw2ICs2NjksOSBAQAogZXh0ZXJuIHZvaWQgdGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gaW50IHRjcF9zZXRfZGVmYXVsdF9jb25nZXN0aW9uX2NvbnRyb2woY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCB0Y3BfZ2V0X2RlZmF1bHRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgdGNwX2dldF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCB0Y3BfZ2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gaW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7CiBleHRlcm4gaW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKIApAQCAtNzk1LDE0ICs4MDcsMTQgQEAKIC8qCiAgKiBDYWxjdWxhdGUoL2NoZWNrKSBUQ1AgY2hlY2tzdW0KICAqLwotc3RhdGljIGlubGluZSB1MTYgdGNwX3Y0X2NoZWNrKHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgbGVuLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2FkZHIsIHVuc2lnbmVkIGxvbmcgZGFkZHIsIAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSkKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiB0Y3BfdjRfY2hlY2soc3RydWN0IHRjcGhkciAqdGgsIGludCBsZW4sCisJCQkgICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkgICAgICAgX193c3VtIGJhc2UpCiB7CiAJcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKHNhZGRyLGRhZGRyLGxlbixJUFBST1RPX1RDUCxiYXNlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgX190Y3BfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgX19zdW0xNiBfX3RjcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogfQpAQCAtMTA1OCw2ICsxMDcwLDExNCBAQAogCXRwLT5mYXN0cGF0aF9za2JfaGludCA9IE5VTEw7CiB9CiAKKy8qIE1ENSBTaWduYXR1cmUgKi8KK3N0cnVjdCBjcnlwdG9faGFzaDsKKworLyogLSBrZXkgZGF0YWJhc2UgKi8KK3N0cnVjdCB0Y3BfbWQ1c2lnX2tleSB7CisJdTgJCQkqa2V5OworCXU4CQkJa2V5bGVuOworfTsKKworc3RydWN0IHRjcDRfbWQ1c2lnX2tleSB7CisJdTgJCQkqa2V5OworCXUxNgkJCWtleWxlbjsKKwlfX2JlMzIJCQlhZGRyOworfTsKKworc3RydWN0IHRjcDZfbWQ1c2lnX2tleSB7CisJdTgJCQkqa2V5OworCXUxNgkJCWtleWxlbjsKKyNpZiAwCisJdTMyCQkJc2NvcGVfaWQ7CS8qIFhYWCAqLworI2VuZGlmCisJc3RydWN0IGluNl9hZGRyCQlhZGRyOworfTsKKworLyogLSBzb2NrIGJsb2NrICovCitzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvIHsKKwlzdHJ1Y3QgdGNwNF9tZDVzaWdfa2V5CSprZXlzNDsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwlzdHJ1Y3QgdGNwNl9tZDVzaWdfa2V5CSprZXlzNjsKKwl1MzIJCQllbnRyaWVzNjsKKwl1MzIJCQlhbGxvY2VkNjsKKyNlbmRpZgorCXUzMgkJCWVudHJpZXM0OworCXUzMgkJCWFsbG9jZWQ0OworfTsKKworLyogLSBwc2V1ZG8gaGVhZGVyICovCitzdHJ1Y3QgdGNwNF9wc2V1ZG9oZHIgeworCV9fYmUzMgkJc2FkZHI7CisJX19iZTMyCQlkYWRkcjsKKwlfX3U4CQlwYWQ7CisJX191OAkJcHJvdG9jb2w7CisJX19iZTE2CQlsZW47Cit9OworCitzdHJ1Y3QgdGNwNl9wc2V1ZG9oZHIgeworCXN0cnVjdCBpbjZfYWRkcglzYWRkcjsKKwlzdHJ1Y3QgaW42X2FkZHIgZGFkZHI7CisJX19iZTMyCQlsZW47CisJX19iZTMyCQlwcm90b2NvbDsJLyogaW5jbHVkaW5nIHBhZGRpbmcgKi8KK307CisKK3VuaW9uIHRjcF9tZDVzdW1fYmxvY2sgeworCXN0cnVjdCB0Y3A0X3BzZXVkb2hkciBpcDQ7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJc3RydWN0IHRjcDZfcHNldWRvaGRyIGlwNjsKKyNlbmRpZgorfTsKKworLyogLSBwb29sOiBkaWdlc3QgYWxnb3JpdGhtLCBoYXNoIGRlc2NyaXB0aW9uIGFuZCBzY3JhdGNoIGJ1ZmZlciAqLworc3RydWN0IHRjcF9tZDVzaWdfcG9vbCB7CisJc3RydWN0IGhhc2hfZGVzYwltZDVfZGVzYzsKKwl1bmlvbiB0Y3BfbWQ1c3VtX2Jsb2NrCW1kNV9ibGs7Cit9OworCisjZGVmaW5lIFRDUF9NRDVTSUdfTUFYS0VZUwkofih1MzIpMCkJLyogcmVhbGx5PyEgKi8KKworLyogLSBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQJCQl0Y3BfdjRfY2FsY19tZDVfaGFzaChjaGFyICptZDVfaGFzaCwKKwkJCQkJCSAgICAgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkJCQkgICAgIHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICAgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorCQkJCQkJICAgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJCQkgICAgIHN0cnVjdCB0Y3BoZHIgKnRoLAorCQkJCQkJICAgICBpbnQgcHJvdG9jb2wsIGludCB0Y3BsZW4pOworZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleQkqdGNwX3Y0X21kNV9sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgc3RydWN0IHNvY2sgKmFkZHJfc2spOworCitleHRlcm4gaW50CQkJdGNwX3Y0X21kNV9kb19hZGQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBfX2JlMzIgYWRkciwKKwkJCQkJCSAgdTggKm5ld2tleSwKKwkJCQkJCSAgdTggbmV3a2V5bGVuKTsKKworZXh0ZXJuIGludAkJCXRjcF92NF9tZDVfZG9fZGVsKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgX19iZTMyIGFkZHIpOworCitleHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfcG9vbAkqKnRjcF9hbGxvY19tZDVzaWdfcG9vbCh2b2lkKTsKK2V4dGVybiB2b2lkCQkJdGNwX2ZyZWVfbWQ1c2lnX3Bvb2wodm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sCSpfX3RjcF9nZXRfbWQ1c2lnX3Bvb2woaW50IGNwdSk7CitleHRlcm4gdm9pZAkJCV9fdGNwX3B1dF9tZDVzaWdfcG9vbCh2b2lkKTsKKworc3RhdGljIGlubGluZQorc3RydWN0IHRjcF9tZDVzaWdfcG9vbAkJKnRjcF9nZXRfbWQ1c2lnX3Bvb2wodm9pZCkKK3sKKwlpbnQgY3B1ID0gZ2V0X2NwdSgpOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKnJldCA9IF9fdGNwX2dldF9tZDVzaWdfcG9vbChjcHUpOworCWlmICghcmV0KQorCQlwdXRfY3B1KCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCQl0Y3BfcHV0X21kNXNpZ19wb29sKHZvaWQpCit7CisJX190Y3BfcHV0X21kNXNpZ19wb29sKCk7CisJcHV0X2NwdSgpOworfQorCiAvKiAvcHJvYyAqLwogZW51bSB0Y3Bfc2VxX3N0YXRlcyB7CiAJVENQX1NFUV9TVEFURV9MSVNURU5JTkcsCkBAIC0xMDk3LDYgKzEyMTcsMzUgQEAKIGV4dGVybiB2b2lkIHRjcDRfcHJvY19leGl0KHZvaWQpOwogI2VuZGlmCiAKKy8qIFRDUCBhZi1zcGVjaWZpYyBmdW5jdGlvbnMgKi8KK3N0cnVjdCB0Y3Bfc29ja19hZl9vcHMgeworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJc3RydWN0IHRjcF9tZDVzaWdfa2V5CSooKm1kNV9sb29rdXApIChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQlzdHJ1Y3Qgc29jayAqYWRkcl9zayk7CisJaW50CQkJKCpjYWxjX21kNV9oYXNoKSAoY2hhciAqbG9jYXRpb24sCisJCQkJCQkgIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1LAorCQkJCQkJICBzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJCSAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJCQkJICBzdHJ1Y3QgdGNwaGRyICp0aCwKKwkJCQkJCSAgaW50IHByb3RvY29sLCBpbnQgbGVuKTsKKwlpbnQJCQkoKm1kNV9hZGQpIChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgICBzdHJ1Y3Qgc29jayAqYWRkcl9zaywKKwkJCQkJICAgIHU4ICpuZXdrZXksCisJCQkJCSAgICB1OCBsZW4pOworCWludAkJCSgqbWQ1X3BhcnNlKSAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCQkgICAgICBpbnQgb3B0bGVuKTsKKyNlbmRpZgorfTsKKworc3RydWN0IHRjcF9yZXF1ZXN0X3NvY2tfb3BzIHsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleQkqKCptZDVfbG9va3VwKSAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKTsKKyNlbmRpZgorfTsKKwogZXh0ZXJuIHZvaWQgdGNwX3Y0X2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcyk7CiBleHRlcm4gdm9pZCB0Y3BfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGltZXdhaXRfc29jay5oIGIvaW5jbHVkZS9uZXQvdGltZXdhaXRfc29jay5oCmluZGV4IGJlMjkzZDcuLmQ3YTMwNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RpbWV3YWl0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC90aW1ld2FpdF9zb2NrLmgKQEAgLTMxLDYgKzMxLDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHR3c2tfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc29jayAqc2spCiB7CisJQlVHX09OKHNrID09IE5VTEwpOworCUJVR19PTihzay0+c2tfcHJvdCA9PSBOVUxMKTsKKwlCVUdfT04oc2stPnNrX3Byb3QtPnR3c2tfcHJvdCA9PSBOVUxMKTsKIAlpZiAoc2stPnNrX3Byb3QtPnR3c2tfcHJvdC0+dHdza19kZXN0cnVjdG9yICE9IE5VTEwpCiAJCXNrLT5za19wcm90LT50d3NrX3Byb3QtPnR3c2tfZGVzdHJ1Y3Rvcihzayk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfYmVhcmVyLmggYi9pbmNsdWRlL25ldC90aXBjL3RpcGNfYmVhcmVyLmgKaW5kZXggZTA3MTM2ZC4uMjE1MWE4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGlwYy90aXBjX2JlYXJlci5oCisrKyBiL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19iZWFyZXIuaApAQCAtNTgsNyArNTgsNyBAQAogICovCiAKIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgewotCV9fdTMyICB0eXBlOwkJCS8qIGJlYXJlciB0eXBlIChuZXR3b3JrIGJ5dGUgb3JkZXIpICovCisJX19iZTMyICB0eXBlOwkJCS8qIGJlYXJlciB0eXBlIChuZXR3b3JrIGJ5dGUgb3JkZXIpICovCiAJdW5pb24gewogCQlfX3U4ICAgZXRoX2FkZHJbNl07CS8qIDQ4IGJpdCBFdGhlcm5ldCBhZGRyIChieXRlIGFycmF5KSAqLyAKICNpZiAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90aXBjL3RpcGNfbXNnLmggYi9pbmNsdWRlL25ldC90aXBjL3RpcGNfbXNnLmgKaW5kZXggNGQwOTZlZS4uZmI0MmViNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGlwYy90aXBjX21zZy5oCisrKyBiL2luY2x1ZGUvbmV0L3RpcGMvdGlwY19tc2cuaApAQCAtNDAsNyArNDAsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogc3RydWN0IHRpcGNfbXNnIHsKLQl1MzIgaGRyWzE1XTsKKwlfX2JlMzIgaGRyWzE1XTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmggYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAppbmRleCA2MWY3MjRjLi40MDlkYTNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAorKysgYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaApAQCAtMTEsNiArMTEsNyBAQAogCiBleHRlcm4gc3RydWN0IHByb3RvIHJhd3Y2X3Byb3Q7CiBleHRlcm4gc3RydWN0IHByb3RvIHVkcHY2X3Byb3Q7CitleHRlcm4gc3RydWN0IHByb3RvIHVkcGxpdGV2Nl9wcm90OwogZXh0ZXJuIHN0cnVjdCBwcm90byB0Y3B2Nl9wcm90OwogCiBzdHJ1Y3QgZmxvd2k7CkBAIC0yNCw2ICsyNSw3IEBACiAvKiB0cmFuc3BvcnQgcHJvdG9jb2xzICovCiBleHRlcm4gdm9pZAkJCQlyYXd2Nl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQJCQkJdWRwdjZfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIAkJCQl1ZHBsaXRldjZfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkCQkJCXRjcHY2X2luaXQodm9pZCk7CiAKIGV4dGVybiBpbnQJCQkJdWRwdjZfY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC91ZHAuaCBiL2luY2x1ZGUvbmV0L3VkcC5oCmluZGV4IGRiMGMwNWYuLjFiOTIxZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcC5oCisrKyBiL2luY2x1ZGUvbmV0L3VkcC5oCkBAIC0yNiw5ICsyNiwyOSBAQAogI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9zbm1wLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCi0jZGVmaW5lIFVEUF9IVEFCTEVfU0laRQkJMTI4CisvKioKKyAqCXN0cnVjdCB1ZHBfc2tiX2NiICAtICBVRFAoLUxpdGUpIHByaXZhdGUgdmFyaWFibGVzCisgKgorICoJQGhlYWRlcjogICAgICBwcml2YXRlIHZhcmlhYmxlcyB1c2VkIGJ5IElQdjQvSVB2NgorICoJQGNzY292OiAgICAgICBjaGVja3N1bSBjb3ZlcmFnZSBsZW5ndGggKFVEUC1MaXRlIG9ubHkpCisgKglAcGFydGlhbF9jb3Y6IGlmIHNldCBpbmRpY2F0ZXMgcGFydGlhbCBjc3VtIGNvdmVyYWdlCisgKi8KK3N0cnVjdCB1ZHBfc2tiX2NiIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBpbmV0X3NrYl9wYXJtCWg0OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKKwkJc3RydWN0IGluZXQ2X3NrYl9wYXJtCWg2OworI2VuZGlmCisJfSBoZWFkZXI7CisJX191MTYJCWNzY292OworCV9fdTgJCXBhcnRpYWxfY292OworfTsKKyNkZWZpbmUgVURQX1NLQl9DQihfX3NrYikJKChzdHJ1Y3QgdWRwX3NrYl9jYiAqKSgoX19za2IpLT5jYikpCiAKIGV4dGVybiBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHBfaGFzaFtVRFBfSFRBQkxFX1NJWkVdOwogZXh0ZXJuIHJ3bG9ja190IHVkcF9oYXNoX2xvY2s7CkBAIC00Nyw2ICs2Nyw2MiBAQAogCiBzdHJ1Y3Qgc2tfYnVmZjsKIAorLyoKKyAqCUdlbmVyaWMgY2hlY2tzdW1taW5nIHJvdXRpbmVzIGZvciBVRFAoLUxpdGUpIHY0IGFuZCB2NgorICovCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgX191ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKCEgVURQX1NLQl9DQihza2IpLT5wYXJ0aWFsX2NvdikKKwkJcmV0dXJuIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CisJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBVRFBfU0tCX0NCKHNrYiktPmNzY292LAorCQkJCSAgICAgIHNrYi0+Y3N1bSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCB1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCisJCV9fdWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOworfQorCisvKioKKyAqIAl1ZHBfY3N1bV9vdXRnb2luZyAgLSAgY29tcHV0ZSBVRFB2NC92NiBjaGVja3N1bSBvdmVyIGZyYWdtZW50cworICogCUBzazogCXNvY2tldCB3ZSBhcmUgd3JpdGluZyB0bworICogCUBza2I6IAlza19idWZmIGNvbnRhaW5pbmcgdGhlIGZpbGxlZC1pbiBVRFAgaGVhZGVyCisgKiAJICAgICAgICAoY2hlY2tzdW0gZmllbGQgbXVzdCBiZSB6ZXJvZWQgb3V0KQorICovCitzdGF0aWMgaW5saW5lIF9fd3N1bSB1ZHBfY3N1bV9vdXRnb2luZyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJX193c3VtIGNzdW0gPSBjc3VtX3BhcnRpYWwoc2tiLT5oLnJhdywgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCAwKTsKKworCXNrYl9xdWV1ZV93YWxrKCZzay0+c2tfd3JpdGVfcXVldWUsIHNrYikgeworCQljc3VtID0gY3N1bV9hZGQoY3N1bSwgc2tiLT5jc3VtKTsKKwl9CisJcmV0dXJuIGNzdW07Cit9CisKKy8qIGhhc2ggcm91dGluZXMgc2hhcmVkIGJldHdlZW4gVURQdjQvNiBhbmQgVURQLUxpdGV2NC82ICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWRwX2xpYl9oYXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkcF9saWJfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwl3cml0ZV9sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKKwlpZiAoc2tfZGVsX25vZGVfaW5pdChzaykpIHsKKwkJaW5ldF9zayhzayktPm51bSA9IDA7CisJCXNvY2tfcHJvdF9kZWNfdXNlKHNrLT5za19wcm90KTsKKwl9CisJd3JpdGVfdW5sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVkcF9saWJfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCit7CisJc2tfY29tbW9uX3JlbGVhc2Uoc2spOworfQorCisKKy8qIG5ldC9pcHY0L3VkcC5jICovCiBleHRlcm4gaW50CXVkcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCiAJCQkgICAgIGludCAoKnNhZGRyX2NtcCkoY29uc3Qgc3RydWN0IHNvY2sgKiwgY29uc3Qgc3RydWN0IHNvY2sgKikpOwogZXh0ZXJuIHZvaWQJdWRwX2VycihzdHJ1Y3Qgc2tfYnVmZiAqLCB1MzIpOwpAQCAtNTksMjMgKzEzNSwzNiBAQAogZXh0ZXJuIGludAl1ZHBfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7CiBleHRlcm4gdW5zaWduZWQgaW50IHVkcF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJICAgICBwb2xsX3RhYmxlICp3YWl0KTsKK2V4dGVybiBpbnQgCXVkcF9saWJfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgICAgICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CitleHRlcm4gaW50IAl1ZHBfbGliX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4sCisJCQkJICAgaW50ICgqcHVzaF9wZW5kaW5nX2ZyYW1lcykoc3RydWN0IHNvY2sgKikpOwogCiBERUNMQVJFX1NOTVBfU1RBVChzdHJ1Y3QgdWRwX21pYiwgdWRwX3N0YXRpc3RpY3MpOwotI2RlZmluZSBVRFBfSU5DX1NUQVRTKGZpZWxkKQkJU05NUF9JTkNfU1RBVFModWRwX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBVRFBfSU5DX1NUQVRTX0JIKGZpZWxkKQkJU05NUF9JTkNfU1RBVFNfQkgodWRwX3N0YXRpc3RpY3MsIGZpZWxkKQotI2RlZmluZSBVRFBfSU5DX1NUQVRTX1VTRVIoZmllbGQpIAlTTk1QX0lOQ19TVEFUU19VU0VSKHVkcF9zdGF0aXN0aWNzLCBmaWVsZCkKKy8qCisgKiAJU05NUCBzdGF0aXN0aWNzIGZvciBVRFAgYW5kIFVEUC1MaXRlCisgKi8KKyNkZWZpbmUgVURQX0lOQ19TVEFUU19VU0VSKGZpZWxkLCBpc191ZHBsaXRlKQkJCSAgICAgICBkbyB7ICAgXAorCWlmIChpc191ZHBsaXRlKSBTTk1QX0lOQ19TVEFUU19VU0VSKHVkcGxpdGVfc3RhdGlzdGljcywgZmllbGQpOyAgICAgICBcCisJZWxzZQkJU05NUF9JTkNfU1RBVFNfVVNFUih1ZHBfc3RhdGlzdGljcywgZmllbGQpOyAgfSAgd2hpbGUoMCkKKyNkZWZpbmUgVURQX0lOQ19TVEFUU19CSChmaWVsZCwgaXNfdWRwbGl0ZSkgCQkJICAgICAgIGRvICB7ICBcCisJaWYgKGlzX3VkcGxpdGUpIFNOTVBfSU5DX1NUQVRTX0JIKHVkcGxpdGVfc3RhdGlzdGljcywgZmllbGQpOyAgICAgICAgIFwKKwllbHNlCQlTTk1QX0lOQ19TVEFUU19CSCh1ZHBfc3RhdGlzdGljcywgZmllbGQpOyAgICB9ICB3aGlsZSgwKQogCiAvKiAvcHJvYyAqLwogc3RydWN0IHVkcF9zZXFfYWZpbmZvIHsKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiAJY2hhcgkJCSpuYW1lOwogCXNhX2ZhbWlseV90CQlmYW1pbHk7CisJc3RydWN0IGhsaXN0X2hlYWQJKmhhc2h0YWJsZTsKIAlpbnQgCQkJKCpzZXFfc2hvdykgKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqc2VxX2ZvcHM7CiB9OwogCiBzdHJ1Y3QgdWRwX2l0ZXJfc3RhdGUgewogCXNhX2ZhbWlseV90CQlmYW1pbHk7CisJc3RydWN0IGhsaXN0X2hlYWQJKmhhc2h0YWJsZTsKIAlpbnQJCQlidWNrZXQ7CiAJc3RydWN0IHNlcV9vcGVyYXRpb25zCXNlcV9vcHM7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwbGl0ZS5oIGIvaW5jbHVkZS9uZXQvdWRwbGl0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YWM1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC91ZHBsaXRlLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKglEZWZpbml0aW9ucyBmb3IgdGhlIFVEUC1MaXRlIChSRkMgMzgyOCkgY29kZS4KKyAqLworI2lmbmRlZiBfVURQTElURV9ICisjZGVmaW5lIF9VRFBMSVRFX0gKKworI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KKworLyogVURQLUxpdGUgc29ja2V0IG9wdGlvbnMgKi8KKyNkZWZpbmUgVURQTElURV9TRU5EX0NTQ09WICAgMTAgLyogc2VuZGVyIHBhcnRpYWwgY292ZXJhZ2UgKGFzIHNlbnQpICAgICAgKi8KKyNkZWZpbmUgVURQTElURV9SRUNWX0NTQ09WICAgMTEgLyogcmVjZWl2ZXIgcGFydGlhbCBjb3ZlcmFnZSAodGhyZXNob2xkICkgKi8KKworZXh0ZXJuIHN0cnVjdCBwcm90byAJCXVkcGxpdGVfcHJvdDsKK2V4dGVybiBzdHJ1Y3QgaGxpc3RfaGVhZCAJdWRwbGl0ZV9oYXNoW1VEUF9IVEFCTEVfU0laRV07CisKKy8qIFVEUC1MaXRlIGRvZXMgbm90IGhhdmUgYSBzdGFuZGFyZGl6ZWQgTUlCIHlldCwgc28gd2UgaW5oZXJpdCBmcm9tIFVEUCAqLworREVDTEFSRV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcGxpdGVfc3RhdGlzdGljcyk7CisKKy8qCisgKglDaGVja3N1bSBjb21wdXRhdGlvbiBpcyBhbGwgaW4gc29mdHdhcmUsIGhlbmNlIHNpbXBsZXIgZ2V0ZnJhZy4KKyAqLworc3RhdGljIF9faW5saW5lX18gaW50IHVkcGxpdGVfZ2V0ZnJhZyh2b2lkICpmcm9tLCBjaGFyICp0bywgaW50ICBvZmZzZXQsCisJCQkJICAgICAgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gbWVtY3B5X2Zyb21pb3ZlY2VuZCh0bywgKHN0cnVjdCBpb3ZlYyAqKSBmcm9tLCBvZmZzZXQsIGxlbik7Cit9CisKKy8qIERlc2lnbmF0ZSBzayBhcyBVRFAtTGl0ZSBzb2NrZXQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVkcGxpdGVfc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2spCit7CisJdWRwX3NrKHNrKS0+cGNmbGFnID0gVURQTElURV9CSVQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAJQ2hlY2tzdW1taW5nIHJvdXRpbmVzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVkcGxpdGVfY2hlY2tzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aCkKK3sKKwl1MTYgY3Njb3Y7CisKKyAgICAgICAgLyogSW4gVURQdjQgYSB6ZXJvIGNoZWNrc3VtIG1lYW5zIHRoYXQgdGhlIHRyYW5zbWl0dGVyIGdlbmVyYXRlZCBubworICAgICAgICAgKiBjaGVja3N1bS4gVURQLUxpdGUgKGxpa2UgSVB2NikgbWFuZGF0ZXMgY2hlY2tzdW1zLCBoZW5jZSBwYWNrZXRzCisgICAgICAgICAqIHdpdGggYSB6ZXJvIGNoZWNrc3VtIGZpZWxkIGFyZSBpbGxlZ2FsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWlmICh1aC0+Y2hlY2sgPT0gMCkgeworCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJVRFBMSVRFOiB6ZXJvZWQgY2hlY2tzdW0gZmllbGRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKyAgICAgICAgVURQX1NLQl9DQihza2IpLT5wYXJ0aWFsX2NvdiA9IDA7CisJY3Njb3YgPSBudG9ocyh1aC0+bGVuKTsKKworCWlmIChjc2NvdiA9PSAwKQkJIC8qIEluZGljYXRlcyB0aGF0IGZ1bGwgY292ZXJhZ2UgaXMgcmVxdWlyZWQuICovCisJCWNzY292ID0gc2tiLT5sZW47CisJZWxzZSBpZiAoY3Njb3YgPCA4ICB8fCBjc2NvdiA+IHNrYi0+bGVuKSB7CisJCS8qCisJCSAqIENvdmVyYWdlIGxlbmd0aCB2aW9sYXRlcyBSRkMgMzgyODogbG9nIGFuZCBkaXNjYXJkIHNpbGVudGx5LgorCQkgKi8KKwkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiVURQTElURTogYmFkIGNzdW0gY292ZXJhZ2UgJWQvJWRcbiIsCisJCQkgICAgICAgY3Njb3YsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIDE7CisKKwl9IGVsc2UgaWYgKGNzY292IDwgc2tiLT5sZW4pCisgICAgICAgIAlVRFBfU0tCX0NCKHNrYiktPnBhcnRpYWxfY292ID0gMTsKKworICAgICAgICBVRFBfU0tCX0NCKHNrYiktPmNzY292ID0gY3Njb3Y7CisKKwkvKgorCSAqIFRoZXJlIGlzIG5vIGtub3duIE5JQyBtYW51ZmFjdHVyZXIgc3VwcG9ydGluZyBVRFAtTGl0ZSB5ZXQsCisJICogaGVuY2UgaXBfc3VtbWVkIGlzIGFsd2F5cyAocmUtKXNldCB0byBDSEVDS1NVTV9OT05FLgorCSAqLworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdWRwbGl0ZTRfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKQoreworCWludCByYyA9IHVkcGxpdGVfY2hlY2tzdW1faW5pdChza2IsIHVoKTsKKworCWlmICghcmMpCisJCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChza2ItPm5oLmlwaC0+c2FkZHIsCisJCQkJCSAgICAgICBza2ItPm5oLmlwaC0+ZGFkZHIsCisJCQkJCSAgICAgICBza2ItPmxlbiwgSVBQUk9UT19VRFBMSVRFLCAwKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB1ZHBsaXRlNl9jc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcGhkciAqdWgpCit7CisJaW50IHJjID0gdWRwbGl0ZV9jaGVja3N1bV9pbml0KHNrYiwgdWgpOworCisJaWYgKCFyYykKKwkJc2tiLT5jc3VtID0gfmNzdW1fdW5mb2xkKGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJCSAgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAorCQkJCQkgICAgIHNrYi0+bGVuLCBJUFBST1RPX1VEUExJVEUsIDApKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVkcGxpdGVfc2VuZGVyX2NzY292KHN0cnVjdCB1ZHBfc29jayAqdXAsIHN0cnVjdCB1ZHBoZHIgKnVoKQoreworCWludCBjc2NvdiA9IHVwLT5sZW47CisKKwkvKgorCSAqIFNlbmRlciBoYXMgc2V0IGBwYXJ0aWFsIGNvdmVyYWdlJyBvcHRpb24gb24gVURQLUxpdGUgc29ja2V0CisJICovCisJaWYgKHVwLT5wY2ZsYWcgJiBVRFBMSVRFX1NFTkRfQ0MpICAgIHsKKwkJaWYgKHVwLT5wY3NsZW4gPCB1cC0+bGVuKSB7CisJCS8qIHVwLT5wY3NsZW4gPT0gMCBtZWFucyB0aGF0IGZ1bGwgY292ZXJhZ2UgaXMgcmVxdWlyZWQsCisJCSAqIHBhcnRpYWwgY292ZXJhZ2Ugb25seSBpZiAgMCA8IHVwLT5wY3NsZW4gPCB1cC0+bGVuICovCisJCQlpZiAoMCA8IHVwLT5wY3NsZW4pIHsKKwkJCSAgICAgICBjc2NvdiA9IHVwLT5wY3NsZW47CisJCQl9CisJCQl1aC0+bGVuID0gaHRvbnModXAtPnBjc2xlbik7CisJCX0KKwkvKgorCSAqIE5PVEU6IENhdXNlcyBmb3IgdGhlIGVycm9yIGNhc2UgIGB1cC0+cGNzbGVuID4gdXAtPmxlbic6CisJICogICAgICAgIChpKSAgQXBwbGljYXRpb24gZXJyb3IgKHdpbGwgbm90IGJlIHBlbmFsaXplZCkuCisJICogICAgICAgKGlpKSAgUGF5bG9hZCB0b28gYmlnIGZvciBzZW5kIGJ1ZmZlcjogZGF0YSBpcyBzcGxpdAorCSAqICAgICAgICAgICAgIGludG8gc2V2ZXJhbCBwYWNrZXRzLCBlYWNoIHdpdGggaXRzIG93biBoZWFkZXIuCisJICogICAgICAgICAgICAgSW4gdGhpcyBjYXNlIChlLmcuIGxhc3Qgc2VnbWVudCksIGNvdmVyYWdlIG1heQorCSAqICAgICAgICAgICAgIGV4Y2VlZCBwYWNrZXQgbGVuZ3RoLgorCSAqICAgICAgIFNpbmNlIHBhY2tldHMgd2l0aCBjb3ZlcmFnZSBsZW5ndGggPiBwYWNrZXQgbGVuZ3RoIGFyZQorCSAqICAgICAgIGlsbGVnYWwsIHdlIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdHMgaGVyZS4KKwkgKi8KKwl9CisJcmV0dXJuIGNzY292OworfQorCitzdGF0aWMgaW5saW5lIF9fd3N1bSB1ZHBsaXRlX2NzdW1fb3V0Z29pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBvZmYsIGxlbiwgY3Njb3YgPSB1ZHBsaXRlX3NlbmRlcl9jc2Nvdih1ZHBfc2soc2spLCBza2ItPmgudWgpOworCV9fd3N1bSBjc3VtID0gMDsKKworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsgICAgIC8qIG5vIEhXIHN1cHBvcnQgZm9yIGNoZWNrc3VtbWluZyAqLworCisJc2tiX3F1ZXVlX3dhbGsoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKSB7CisJCW9mZiA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7CisJCWxlbiA9IHNrYi0+bGVuIC0gb2ZmOworCisJCWNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCBvZmYsIChjc2NvdiA+IGxlbik/IGxlbiA6IGNzY292LCBjc3VtKTsKKworCQlpZiAoKGNzY292IC09IGxlbikgPD0gMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gY3N1bTsKK30KKworZXh0ZXJuIHZvaWQJdWRwbGl0ZTRfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gaW50IAl1ZHBsaXRlX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKKwkJCWludCAoKnNjbXApKGNvbnN0IHN0cnVjdCBzb2NrICosIGNvbnN0IHN0cnVjdCBzb2NrICopKTsKKyNlbmRpZgkvKiBfVURQTElURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggNzM3ZmRiMi4uMTVlYzE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMzEwLDYgKzMxMCw4IEBACiAvKiBTb3VyY2UgYWRkcmVzcyBvZiB0dW5uZWwuIElnbm9yZWQsIGlmIGl0IGlzIG5vdCBhIHR1bm5lbC4gKi8KIAl4ZnJtX2FkZHJlc3NfdAkJc2FkZHI7CiAKKwl1bnNpZ25lZCBzaG9ydAkJZW5jYXBfZmFtaWx5OworCiAJX191MzIJCQlyZXFpZDsKIAogLyogTW9kZTogdHJhbnNwb3J0LCB0dW5uZWwgZXRjLiAqLwpAQCAtMzQwLDE4ICszNDIsMTkgQEAKIAlhdG9taWNfdAkJcmVmY250OwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCi0JdTgJCQl0eXBlOwogCXUzMgkJCXByaW9yaXR5OwogCXUzMgkJCWluZGV4OwogCXN0cnVjdCB4ZnJtX3NlbGVjdG9yCXNlbGVjdG9yOwogCXN0cnVjdCB4ZnJtX2xpZmV0aW1lX2NmZyBsZnQ7CiAJc3RydWN0IHhmcm1fbGlmZXRpbWVfY3VyIGN1cmxmdDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICAgICAgICpidW5kbGVzOwotCV9fdTE2CQkJZmFtaWx5OwotCV9fdTgJCQlhY3Rpb247Ci0JX191OAkJCWZsYWdzOwotCV9fdTgJCQlkZWFkOwotCV9fdTgJCQl4ZnJtX25yOworCXUxNgkJCWZhbWlseTsKKwl1OAkJCXR5cGU7CisJdTgJCQlhY3Rpb247CisJdTgJCQlmbGFnczsKKwl1OAkJCWRlYWQ7CisJdTgJCQl4ZnJtX25yOworCS8qIFhYWCAxIGJ5dGUgaG9sZSwgdHJ5IHRvIHBhY2sgKi8KIAlzdHJ1Y3QgeGZybV9zZWNfY3R4CSpzZWN1cml0eTsKIAlzdHJ1Y3QgeGZybV90bXBsICAgICAgIAl4ZnJtX3ZlY1tYRlJNX01BWF9ERVBUSF07CiB9OwpAQCAtMzc5LDcgKzM4Miw3IEBACiAJaW50CQkJKCpub3RpZnkpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpOwogCWludAkJCSgqYWNxdWlyZSkoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3RtcGwgKiwgc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpcik7CiAJc3RydWN0IHhmcm1fcG9saWN5CSooKmNvbXBpbGVfcG9saWN5KShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHQsIHU4ICpkYXRhLCBpbnQgbGVuLCBpbnQgKmRpcik7Ci0JaW50CQkJKCpuZXdfbWFwcGluZykoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIHUxNiBzcG9ydCk7CisJaW50CQkJKCpuZXdfbWFwcGluZykoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIF9fYmUxNiBzcG9ydCk7CiAJaW50CQkJKCpub3RpZnlfcG9saWN5KShzdHJ1Y3QgeGZybV9wb2xpY3kgKngsIGludCBkaXIsIHN0cnVjdCBrbV9ldmVudCAqYyk7CiAJaW50CQkJKCpyZXBvcnQpKHU4IHByb3RvLCBzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCB4ZnJtX2FkZHJlc3NfdCAqYWRkcik7CiB9OwpAQCAtNDY4LDYgKzQ3MSw3IEBACiAJc3dpdGNoKGZsLT5wcm90bykgewogCWNhc2UgSVBQUk9UT19UQ1A6CiAJY2FzZSBJUFBST1RPX1VEUDoKKwljYXNlIElQUFJPVE9fVURQTElURToKIAljYXNlIElQUFJPVE9fU0NUUDoKIAkJcG9ydCA9IGZsLT5mbF9pcF9zcG9ydDsKIAkJYnJlYWs7CkBAIC00OTMsNiArNDk3LDcgQEAKIAlzd2l0Y2goZmwtPnByb3RvKSB7CiAJY2FzZSBJUFBST1RPX1RDUDoKIAljYXNlIElQUFJPVE9fVURQOgorCWNhc2UgSVBQUk9UT19VRFBMSVRFOgogCWNhc2UgSVBQUk9UT19TQ1RQOgogCQlwb3J0ID0gZmwtPmZsX2lwX2Rwb3J0OwogCQlicmVhazsKQEAgLTUwNiw0MCArNTExLDggQEAKIAlyZXR1cm4gcG9ydDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLV9feGZybTRfc2VsZWN0b3JfbWF0Y2goc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgc3RydWN0IGZsb3dpICpmbCkKLXsKLQlyZXR1cm4gIGFkZHJfbWF0Y2goJmZsLT5mbDRfZHN0LCAmc2VsLT5kYWRkciwgc2VsLT5wcmVmaXhsZW5fZCkgJiYKLQkJYWRkcl9tYXRjaCgmZmwtPmZsNF9zcmMsICZzZWwtPnNhZGRyLCBzZWwtPnByZWZpeGxlbl9zKSAmJgotCQkhKCh4ZnJtX2Zsb3dpX2Rwb3J0KGZsKSBeIHNlbC0+ZHBvcnQpICYgc2VsLT5kcG9ydF9tYXNrKSAmJgotCQkhKCh4ZnJtX2Zsb3dpX3Nwb3J0KGZsKSBeIHNlbC0+c3BvcnQpICYgc2VsLT5zcG9ydF9tYXNrKSAmJgotCQkoZmwtPnByb3RvID09IHNlbC0+cHJvdG8gfHwgIXNlbC0+cHJvdG8pICYmCi0JCShmbC0+b2lmID09IHNlbC0+aWZpbmRleCB8fCAhc2VsLT5pZmluZGV4KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLV9feGZybTZfc2VsZWN0b3JfbWF0Y2goc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgc3RydWN0IGZsb3dpICpmbCkKLXsKLQlyZXR1cm4gIGFkZHJfbWF0Y2goJmZsLT5mbDZfZHN0LCAmc2VsLT5kYWRkciwgc2VsLT5wcmVmaXhsZW5fZCkgJiYKLQkJYWRkcl9tYXRjaCgmZmwtPmZsNl9zcmMsICZzZWwtPnNhZGRyLCBzZWwtPnByZWZpeGxlbl9zKSAmJgotCQkhKCh4ZnJtX2Zsb3dpX2Rwb3J0KGZsKSBeIHNlbC0+ZHBvcnQpICYgc2VsLT5kcG9ydF9tYXNrKSAmJgotCQkhKCh4ZnJtX2Zsb3dpX3Nwb3J0KGZsKSBeIHNlbC0+c3BvcnQpICYgc2VsLT5zcG9ydF9tYXNrKSAmJgotCQkoZmwtPnByb3RvID09IHNlbC0+cHJvdG8gfHwgIXNlbC0+cHJvdG8pICYmCi0JCShmbC0+b2lmID09IHNlbC0+aWZpbmRleCB8fCAhc2VsLT5pZmluZGV4KTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXhmcm1fc2VsZWN0b3JfbWF0Y2goc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwgc3RydWN0IGZsb3dpICpmbCwKLQkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKLXsKLQlzd2l0Y2ggKGZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIF9feGZybTRfc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCk7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuIF9feGZybTZfc2VsZWN0b3JfbWF0Y2goc2VsLCBmbCk7Ci0JfQotCXJldHVybiAwOwotfQorZXh0ZXJuIGludCB4ZnJtX3NlbGVjdG9yX21hdGNoKHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHN0cnVjdCBmbG93aSAqZmwsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KIC8qCUlmIG5laXRoZXIgaGFzIGEgY29udGV4dCAtLT4gbWF0Y2gKQEAgLTg4Nyw4ICs4NjAsNyBAQAogc3RydWN0IHhmcm02X3R1bm5lbCB7CiAJaW50ICgqaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAotCQkJICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX3UzMiBpbmZvKTsKLQorCQkJICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbyk7CiAJc3RydWN0IHhmcm02X3R1bm5lbCAqbmV4dDsKIAlpbnQgcHJpb3JpdHk7CiB9OwpAQCAtOTUxLDkgKzkyMyw5IEBACiAJCQkgICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB1OCBwcm90byk7CiBleHRlcm4gaW50IHhmcm02X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybTZfdHVubmVsICpoYW5kbGVyKTsKIGV4dGVybiBpbnQgeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlcik7Ci1leHRlcm4gdTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKK2V4dGVybiBfX2JlMzIgeGZybTZfdHVubmVsX2FsbG9jX3NwaSh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOwogZXh0ZXJuIHZvaWQgeGZybTZfdHVubmVsX2ZyZWVfc3BpKHhmcm1fYWRkcmVzc190ICpzYWRkcik7Ci1leHRlcm4gdTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHhmcm1fYWRkcmVzc190ICpzYWRkcik7CitleHRlcm4gX19iZTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHhmcm1fYWRkcmVzc190ICpzYWRkcik7CiBleHRlcm4gaW50IHhmcm02X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfZmluZF8xc3RmcmFnb3B0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSB1OCAqKnByZXZoZHIpOwpAQCAtMTAwMCw3ICs5NzIsNyBAQAogZXh0ZXJuIHZvaWQgeGZybV9pbml0X3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIAogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGttX3dhaXRxOwotZXh0ZXJuIGludCBrbV9uZXdfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgdTE2IHNwb3J0KTsKK2V4dGVybiBpbnQga21fbmV3X21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIF9fYmUxNiBzcG9ydCk7CiBleHRlcm4gdm9pZCBrbV9wb2xpY3lfZXhwaXJlZChzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgaW50IGRpciwgaW50IGhhcmQsIHUzMiBwaWQpOwogZXh0ZXJuIGludCBrbV9yZXBvcnQodTggcHJvdG8sIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHhmcm1fYWRkcmVzc190ICphZGRyKTsKIApAQCAtMTAzMyw3ICsxMDA1LDcgQEAKIAlzd2l0Y2ggKGZhbWlseSkgewogCWRlZmF1bHQ6CiAJY2FzZSBBRl9JTkVUOgotCQlyZXR1cm4gYS0+YTQgLSBiLT5hNDsKKwkJcmV0dXJuIChfX2ZvcmNlIF9fdTMyKWEtPmE0IC0gKF9fZm9yY2UgX191MzIpYi0+YTQ7CiAJY2FzZSBBRl9JTkVUNjoKIAkJcmV0dXJuIGlwdjZfYWRkcl9jbXAoKHN0cnVjdCBpbjZfYWRkciAqKWEsCiAJCQkJICAgICAoc3RydWN0IGluNl9hZGRyICopYik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaCBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCmluZGV4IDYxZWViZWMuLmVhMDgxNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9saWJpc2NzaS5oCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxzY3NpL2lzY3NpX3Byb3RvLmg+CiAjaW5jbHVkZSA8c2NzaS9pc2NzaV9pZi5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbS5oIGIvaW5jbHVkZS9zb3VuZC9wY20uaAppbmRleCBhZmFmM2U4Li4yZjY0NWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbS5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KICNpbmNsdWRlIDxzb3VuZC9tZW1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjZGVmaW5lIHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKSAoKHN1YnN0cmVhbSktPnByaXZhdGVfZGF0YSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IDQyZjJmMTEuLmFiOTdlNTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAKICNpbmNsdWRlICJhdWRpdC5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL2xhdGVuY3kuYyBiL2tlcm5lbC9sYXRlbmN5LmMKaW5kZXggMjU4ZjI1NS4uZTYzZmNhYyAxMDA2NDQKLS0tIGEva2VybmVsL2xhdGVuY3kuYworKysgYi9rZXJuZWwvbGF0ZW5jeS5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGxhdGVuY3lfaW5mbyB7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNDVlMDFjYi4uZTJkMDlkNiAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvdmVybWFnaWMuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Vud2luZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC03OTAsNiArNzkwLDE5IEBACiAJLnNob3cgPSBzaG93X3JlZmNudCwKIH07CiAKK3ZvaWQgbW9kdWxlX3B1dChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCit7CisJaWYgKG1vZHVsZSkgeworCQl1bnNpZ25lZCBpbnQgY3B1ID0gZ2V0X2NwdSgpOworCQlsb2NhbF9kZWMoJm1vZHVsZS0+cmVmW2NwdV0uY291bnQpOworCQkvKiBNYXliZSB0aGV5J3JlIHdhaXRpbmcgZm9yIHVzIHRvIGRyb3AgcmVmZXJlbmNlPyAqLworCQlpZiAodW5saWtlbHkoIW1vZHVsZV9pc19saXZlKG1vZHVsZSkpKQorCQkJd2FrZV91cF9wcm9jZXNzKG1vZHVsZS0+d2FpdGVyKTsKKwkJcHV0X2NwdSgpOworCX0KK30KK0VYUE9SVF9TWU1CT0wobW9kdWxlX3B1dCk7CisKICNlbHNlIC8qICFDT05GSUdfTU9EVUxFX1VOTE9BRCAqLwogc3RhdGljIHZvaWQgcHJpbnRfdW5sb2FkX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggZjQ1YzVlNy4uZDNkMjg5MSAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtNzcsOCArNzcsNyBAQAogCS8qCiAJICogSWYgbmV3IGF0dHJpYnV0ZXMgYXJlIGFkZGVkLCBwbGVhc2UgcmV2aXNpdCB0aGlzIGFsbG9jYXRpb24KIAkgKi8KLQlzaXplID0gbmxtc2dfdG90YWxfc2l6ZShnZW5sbXNnX3RvdGFsX3NpemUoc2l6ZSkpOwotCXNrYiA9IG5sbXNnX25ldyhzaXplLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBnZW5sbXNnX25ldyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTg2LDEzICs4NSw5IEBACiAJCWludCBzZXEgPSBnZXRfY3B1X3Zhcih0YXNrc3RhdHNfc2VxbnVtKSsrOwogCQlwdXRfY3B1X3Zhcih0YXNrc3RhdHNfc2VxbnVtKTsKIAotCQlyZXBseSA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgc2VxLAotCQkJCWZhbWlseS5pZCwgMCwgMCwKLQkJCQljbWQsIGZhbWlseS52ZXJzaW9uKTsKKwkJcmVwbHkgPSBnZW5sbXNnX3B1dChza2IsIDAsIHNlcSwgJmZhbWlseSwgMCwgY21kKTsKIAl9IGVsc2UKLQkJcmVwbHkgPSBnZW5sbXNnX3B1dChza2IsIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsCi0JCQkJZmFtaWx5LmlkLCAwLCAwLAotCQkJCWNtZCwgZmFtaWx5LnZlcnNpb24pOworCQlyZXBseSA9IGdlbmxtc2dfcHV0X3JlcGx5KHNrYiwgaW5mbywgJmZhbWlseSwgMCwgY21kKTsKIAlpZiAocmVwbHkgPT0gTlVMTCkgewogCQlubG1zZ19mcmVlKHNrYik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbGliL3JhbmRvbTMyLmMgYi9saWIvcmFuZG9tMzIuYwppbmRleCA0YTE1Y2U1Li5lYzdmODFkIDEwMDY0NAotLS0gYS9saWIvcmFuZG9tMzIuYworKysgYi9saWIvcmFuZG9tMzIuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiBzdHJ1Y3Qgcm5kX3N0YXRlIHsKZGlmZiAtLWdpdCBhL25ldC84MDIvaGlwcGkuYyBiL25ldC84MDIvaGlwcGkuYwppbmRleCA2ZDdmZWQzLi41NzllMmRkIDEwMDY0NAotLS0gYS9uZXQvODAyL2hpcHBpLmMKKysrIGIvbmV0LzgwMi9oaXBwaS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvS2NvbmZpZyBiL25ldC9LY29uZmlnCmluZGV4IDY3ZTM5YWQuLjdkZmM5NDkgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC03NSw3ICs3NSw3IEBACiAJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgogCiBtZW51Y29uZmlnIE5FVEZJTFRFUgotCWJvb2wgIk5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyAocmVwbGFjZXMgaXBjaGFpbnMpIgorCWJvb2wgIk5ldHdvcmsgcGFja2V0IGZpbHRlcmluZyBmcmFtZXdvcmsgKE5ldGZpbHRlcikiCiAJLS0taGVscC0tLQogCSAgTmV0ZmlsdGVyIGlzIGEgZnJhbWV3b3JrIGZvciBmaWx0ZXJpbmcgYW5kIG1hbmdsaW5nIG5ldHdvcmsgcGFja2V0cwogCSAgdGhhdCBwYXNzIHRocm91Z2ggeW91ciBMaW51eCBib3guCkBAIC0xNzUsMzMgKzE3NSw2IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L2FwcGxldGFsay9LY29uZmlnIgogc291cmNlICJuZXQveDI1L0tjb25maWciCiBzb3VyY2UgIm5ldC9sYXBiL0tjb25maWciCi0KLWNvbmZpZyBORVRfRElWRVJUCi0JYm9vbCAiRnJhbWUgRGl2ZXJ0ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQlJPS0VOCi0JLS0taGVscC0tLQotCSAgVGhlIEZyYW1lIERpdmVydGVyIGFsbG93cyB5b3UgdG8gZGl2ZXJ0IHBhY2tldHMgZnJvbSB0aGUKLQkgIG5ldHdvcmssIHRoYXQgYXJlIG5vdCBhaW1lZCBhdCB0aGUgaW50ZXJmYWNlIHJlY2VpdmluZyBpdCAoaW4KLQkgIHByb21pc2MuIG1vZGUpLiBUeXBpY2FsbHksIGEgTGludXggYm94IHNldHVwIGFzIGFuIEV0aGVybmV0IGJyaWRnZQotCSAgd2l0aCB0aGUgRnJhbWVzIERpdmVydGVyIG9uLCBjYW4gZG8gc29tZSAqcmVhbGx5KiB0cmFuc3BhcmVudCB3d3cKLQkgIGNhY2hpbmcgdXNpbmcgYSBTcXVpZCBwcm94eSBmb3IgZXhhbXBsZS4KLQotCSAgVGhpcyBpcyB2ZXJ5IHVzZWZ1bCB3aGVuIHlvdSBkb24ndCB3YW50IHRvIGNoYW5nZSB5b3VyIHJvdXRlcidzCi0JICBjb25maWcgKG9yIGlmIHlvdSBzaW1wbHkgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQpLgotCi0JICBUaGUgb3RoZXIgcG9zc2libGUgdXNhZ2VzIG9mIGRpdmVydGluZyBFdGhlcm5ldCBGcmFtZXMgYXJlCi0JICBudW1iZXJvdXM6Ci0JICAtIHJlcm91dGUgc210cCB0cmFmZmljIHRvIGFub3RoZXIgaW50ZXJmYWNlCi0JICAtIHRyYWZmaWMtc2hhcGUgY2VydGFpbiBuZXR3b3JrIHN0cmVhbXMKLQkgIC0gdHJhbnNwYXJlbnRseSBwcm94eSBzbXRwIGNvbm5lY3Rpb25zCi0JICAtIGV0Yy4uLgotCi0JICBGb3IgbW9yZSBpbmZvcm1hdGlvbnMsIHBsZWFzZSByZWZlciB0bzoKLQkgIDxodHRwOi8vZGl2ZXJ0ZXIuc291cmNlZm9yZ2UubmV0Lz4KLQkgIDxodHRwOi8vcGVyc28ud2FuYWRvby5mci9tYWdwaWUvRXRoZXJEaXZlcnQuaHRtbD4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogc291cmNlICJuZXQvZWNvbmV0L0tjb25maWciCiBzb3VyY2UgIm5ldC93YW5yb3V0ZXIvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3NjaGVkL0tjb25maWciCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCA0ODVlMzVjLi4zYTcwNTIyIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YWxrLmg+CisjaW5jbHVkZSAiLi4vY29yZS9rbWFwX3NrYi5oIgogCiBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmRkcF9kbCwgKmFhcnBfZGw7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBhdGFsa19kZ3JhbV9vcHM7CmRpZmYgLS1naXQgYS9uZXQvYXRtL01ha2VmaWxlIGIvbmV0L2F0bS9NYWtlZmlsZQppbmRleCA4OTY1NmQ2Li5jYzUwYmQxIDEwMDY0NAotLS0gYS9uZXQvYXRtL01ha2VmaWxlCisrKyBiL25ldC9hdG0vTWFrZWZpbGUKQEAgLTcsMTAgKzcsNyBAQAogCiBvYmotJChDT05GSUdfQVRNKSArPSBhdG0ubwogb2JqLSQoQ09ORklHX0FUTV9DTElQKSArPSBjbGlwLm8KLWF0bS0kKHN1YnN0IG0seSwkKENPTkZJR19BVE1fQ0xJUCkpICs9IGlwY29tbW9uLm8KIG9iai0kKENPTkZJR19BVE1fQlIyNjg0KSArPSBicjI2ODQubwotYXRtLSQoc3Vic3QgbSx5LCQoQ09ORklHX0FUTV9CUjI2ODQpKSArPSBpcGNvbW1vbi5vCi1hdG0tJChzdWJzdCBtLHksJChDT05GSUdfTkVUX1NDSF9BVE0pKSArPSBpcGNvbW1vbi5vCiBhdG0tJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiAKIG9iai0kKENPTkZJR19BVE1fTEFORSkgKz0gbGVjLm8KZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IGQwMGNjYTkuLjgzYTFjMWIgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYnIyNjg0LmMKKysrIGIvbmV0L2F0bS9icjI2ODQuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWJyMjY4NC5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiaXBjb21tb24uaCIKIAogLyoKICAqIERlZmluZSB0aGlzIHRvIHVzZSBhIHZlcnNpb24gb2YgdGhlIGNvZGUgd2hpY2ggaW50ZXJhY3RzIHdpdGggdGhlIGhpZ2hlcgpAQCAtMzcyLDcgKzM3MSw3IEBACiAKIC8qIFJldHVybnMgMSBpZiBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci1wYWNrZXRfZmFpbHNfZmlsdGVyKHUxNiB0eXBlLCBzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCitwYWNrZXRfZmFpbHNfZmlsdGVyKF9fYmUxNiB0eXBlLCBzdHJ1Y3QgYnIyNjg0X3ZjYyAqYnJ2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKGJydmNjLT5maWx0ZXIubmV0bWFzayA9PSAwKQogCQlyZXR1cm4gMDsJCQkvKiBubyBmaWx0ZXIgaW4gcGxhY2UgKi8KQEAgLTUwMCwxMSArNDk5LDEyIEBACiAqLwogCWludCBlcnI7CiAJc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjOwotCXN0cnVjdCBza19idWZmX2hlYWQgY29weTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBza19idWZmX2hlYWQgKnJxOwogCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKIAlzdHJ1Y3QgYXRtX2JhY2tlbmRfYnIyNjg0IGJlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmJlLCBhcmcsIHNpemVvZiBiZSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNTU0LDEyICs1NTQsMzAgQEAKIAlicnZjYy0+b2xkX3B1c2ggPSBhdG12Y2MtPnB1c2g7CiAJYmFycmllcigpOwogCWF0bXZjYy0+cHVzaCA9IGJyMjY4NF9wdXNoOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNvcHkpOwotCXNrYl9taWdyYXRlKCZza19hdG0oYXRtdmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSwgJmNvcHkpOwotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmNvcHkpKSAhPSBOVUxMKSB7CisKKwlycSA9ICZza19hdG0oYXRtdmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycS0+bG9jaywgZmxhZ3MpOworCWlmIChza2JfcXVldWVfZW1wdHkocnEpKSB7CisJCXNrYiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogTlVMTCB0ZXJtaW5hdGUgdGhlIGxpc3QuICAqLworCQlycS0+cHJldi0+bmV4dCA9IE5VTEw7CisJCXNrYiA9IHJxLT5uZXh0OworCX0KKwlycS0+cHJldiA9IHJxLT5uZXh0ID0gKHN0cnVjdCBza19idWZmICopcnE7CisJcnEtPnFsZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisKKwl3aGlsZSAoc2tiKSB7CisJCXN0cnVjdCBza19idWZmICpuZXh0ID0gc2tiLT5uZXh0OworCisJCXNrYi0+bmV4dCA9IHNrYi0+cHJldiA9IE5VTEw7CiAJCUJSUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X2J5dGVzIC09IHNrYi0+bGVuOwogCQlCUlBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07CiAJCWJyMjY4NF9wdXNoKGF0bXZjYywgc2tiKTsKKworCQlza2IgPSBuZXh0OwogCX0KIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCA3YWYyYzQxLi41ZjhhMWQyIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtMzgsNyArMzgsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAicmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiaXBjb21tb24uaCIKICNpbmNsdWRlIDxuZXQvYXRtY2xpcC5oPgogCiAKQEAgLTU0LDcgKzUzLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmVpZ2hfdGFibGUgY2xpcF90Ymw7CiBzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgaWRsZV90aW1lcjsKIAotc3RhdGljIGludCB0b19hdG1hcnBkKGVudW0gYXRtYXJwX2N0cmxfdHlwZSB0eXBlLCBpbnQgaXRmLCB1bnNpZ25lZCBsb25nIGlwKQorc3RhdGljIGludCB0b19hdG1hcnBkKGVudW0gYXRtYXJwX2N0cmxfdHlwZSB0eXBlLCBpbnQgaXRmLCBfX2JlMzIgaXApCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBhdG1hcnBfY3RybCAqY3RybDsKQEAgLTIyMCw3ICsyMTksNyBAQAogCSAgICB8fCBtZW1jbXAoc2tiLT5kYXRhLCBsbGNfb3VpLCBzaXplb2YgKGxsY19vdWkpKSkKIAkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKIAllbHNlIHsKLQkJc2tiLT5wcm90b2NvbCA9ICgodTE2ICopIHNrYi0+ZGF0YSlbM107CisJCXNrYi0+cHJvdG9jb2wgPSAoKF9fYmUxNiAqKSBza2ItPmRhdGEpWzNdOwogCQlza2JfcHVsbChza2IsIFJGQzE0ODNMTENfTEVOKTsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkgewogCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTQzMCw3ICs0MjksNyBAQAogCiAJCWhlcmUgPSBza2JfcHVzaChza2IsIFJGQzE0ODNMTENfTEVOKTsKIAkJbWVtY3B5KGhlcmUsIGxsY19vdWksIHNpemVvZihsbGNfb3VpKSk7Ci0JCSgodTE2ICopIGhlcmUpWzNdID0gc2tiLT5wcm90b2NvbDsKKwkJKChfX2JlMTYgKikgaGVyZSlbM10gPSBza2ItPnByb3RvY29sOwogCX0KIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IHZjYy0+YXRtX29wdGlvbnM7CkBAIC00NjksOCArNDY4LDkgQEAKIHN0YXRpYyBpbnQgY2xpcF9ta2lwKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGludCB0aW1lb3V0KQogewogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2M7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBjb3B5OwogCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghdmNjLT5wdXNoKQogCQlyZXR1cm4gLUVCQURGRDsKQEAgLTQ5MCwxMCArNDkwLDI2IEBACiAJY2xpcF92Y2MtPm9sZF9wb3AgPSB2Y2MtPnBvcDsKIAl2Y2MtPnB1c2ggPSBjbGlwX3B1c2g7CiAJdmNjLT5wb3AgPSBjbGlwX3BvcDsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZjb3B5KTsKLQlza2JfbWlncmF0ZSgmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUsICZjb3B5KTsKKworCXJxID0gJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7CisJaWYgKHNrYl9xdWV1ZV9lbXB0eShycSkpIHsKKwkJc2tiID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBOVUxMIHRlcm1pbmF0ZSB0aGUgbGlzdC4gICovCisJCXJxLT5wcmV2LT5uZXh0ID0gTlVMTDsKKwkJc2tiID0gcnEtPm5leHQ7CisJfQorCXJxLT5wcmV2ID0gcnEtPm5leHQgPSAoc3RydWN0IHNrX2J1ZmYgKilycTsKKwlycS0+cWxlbiA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwogCS8qIHJlLXByb2Nlc3MgZXZlcnl0aGluZyByZWNlaXZlZCBiZXR3ZWVuIGNvbm5lY3Rpb24gc2V0dXAgYW5kIE1LSVAgKi8KLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZjb3B5KSkgIT0gTlVMTCkKKwl3aGlsZSAoc2tiKSB7CisJCXN0cnVjdCBza19idWZmICpuZXh0ID0gc2tiLT5uZXh0OworCisJCXNrYi0+bmV4dCA9IHNrYi0+cHJldiA9IE5VTEw7CiAJCWlmICghY2xpcF9kZXZzKSB7CiAJCQlhdG1fcmV0dXJuKHZjYywgc2tiLT50cnVlc2l6ZSk7CiAJCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTUwNiwxMCArNTIyLDEzIEBACiAJCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0KKworCQlza2IgPSBuZXh0OworCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbGlwX3NldGVudHJ5KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHUzMiBpcCkKK3N0YXRpYyBpbnQgY2xpcF9zZXRlbnRyeShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBfX2JlMzIgaXApCiB7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJc3RydWN0IGF0bWFycF9lbnRyeSAqZW50cnk7CkBAIC03NTIsNyArNzcxLDcgQEAKIAkJZXJyID0gY2xpcF9ta2lwKHZjYywgYXJnKTsKIAkJYnJlYWs7CiAJY2FzZSBBVE1BUlBfU0VURU5UUlk6Ci0JCWVyciA9IGNsaXBfc2V0ZW50cnkodmNjLCBhcmcpOworCQllcnIgPSBjbGlwX3NldGVudHJ5KHZjYywgKF9fZm9yY2UgX19iZTMyKWFyZyk7CiAJCWJyZWFrOwogCWNhc2UgQVRNQVJQX0VOQ0FQOgogCQllcnIgPSBjbGlwX2VuY2FwKHZjYywgYXJnKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vaXBjb21tb24uYyBiL25ldC9hdG0vaXBjb21tb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQzZGU0Mi4uMDAwMDAwMAotLS0gYS9uZXQvYXRtL2lwY29tbW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBuZXQvYXRtL2lwY29tbW9uLmMgLSBDb21tb24gaXRlbXMgZm9yIGFsbCB3YXlzIG9mIGRvaW5nIElQIG92ZXIgQVRNICovCi0KLS8qIFdyaXR0ZW4gMTk5Ni0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvYXRtY2xpcC5oPgotCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAiaXBjb21tb24uaCIKLQotCi0jaWYgMAotI2RlZmluZSBEUFJJTlRLKGZvcm1hdCxhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsIyNhcmdzKQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyhmb3JtYXQsYXJncy4uLikKLSNlbmRpZgotCi0KLS8qCi0gKiBza2JfbWlncmF0ZSBhcHBlbmRzIHRoZSBsaXN0IGF0ICJmcm9tIiB0byAidG8iLCBlbXB0eWluZyAiZnJvbSIgaW4gdGhlCi0gKiBwcm9jZXNzLiBza2JfbWlncmF0ZSBpcyBhdG9taWMgd2l0aCByZXNwZWN0IHRvIGFsbCBvdGhlciBza2Igb3BlcmF0aW9ucyBvbgotICogImZyb20iIGFuZCAidG8iLiBOb3RlIHRoYXQgaXQgbG9ja3MgYm90aCBsaXN0cyBhdCB0aGUgc2FtZSB0aW1lLCBzbyB0byBkZWFsCi0gKiB3aXRoIHRoZSBsb2NrIG9yZGVyaW5nLCB0aGUgbG9ja3MgYXJlIHRha2VuIGluIGFkZHJlc3Mgb3JkZXIuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQgbGl2ZSBpbiBza2J1ZmYuYyBvciBza2J1ZmYuaC4KLSAqLwotCi0KLXZvaWQgc2tiX21pZ3JhdGUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJvbSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqdG8pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2Zyb20gPSAoc3RydWN0IHNrX2J1ZmYgKikgZnJvbTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3RvID0gKHN0cnVjdCBza19idWZmICopIHRvOwotCXN0cnVjdCBza19idWZmICpwcmV2OwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKSBmcm9tIDwgKHVuc2lnbmVkIGxvbmcpIHRvKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9tLT5sb2NrLCBmbGFncyk7Ci0JCXNwaW5fbG9ja19uZXN0ZWQoJnRvLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnRvLT5sb2NrLCBmbGFncyk7Ci0JCXNwaW5fbG9ja19uZXN0ZWQoJmZyb20tPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKLQl9Ci0JcHJldiA9IGZyb20tPnByZXY7Ci0JZnJvbS0+bmV4dC0+cHJldiA9IHRvLT5wcmV2OwotCXByZXYtPm5leHQgPSBza2JfdG87Ci0JdG8tPnByZXYtPm5leHQgPSBmcm9tLT5uZXh0OwotCXRvLT5wcmV2ID0gZnJvbS0+cHJldjsKLQl0by0+cWxlbiArPSBmcm9tLT5xbGVuOwotCXNwaW5fdW5sb2NrKCZ0by0+bG9jayk7Ci0JZnJvbS0+cHJldiA9IHNrYl9mcm9tOwotCWZyb20tPm5leHQgPSBza2JfZnJvbTsKLQlmcm9tLT5xbGVuID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcm9tLT5sb2NrLCBmbGFncyk7Ci19Ci0KLQotRVhQT1JUX1NZTUJPTChza2JfbWlncmF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2lwY29tbW9uLmggYi9uZXQvYXRtL2lwY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3MjE2NWYuLjAwMDAwMDAKLS0tIGEvbmV0L2F0bS9pcGNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyogbmV0L2F0bS9pcGNvbW1vbi5oIC0gQ29tbW9uIGl0ZW1zIGZvciBhbGwgd2F5cyBvZiBkb2luZyBJUCBvdmVyIEFUTSAqLwotCi0vKiBXcml0dGVuIDE5OTYtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwotCi0KLSNpZm5kZWYgTkVUX0FUTV9JUENPTU1PTl9ICi0jZGVmaW5lIE5FVF9BVE1fSVBDT01NT05fSAotCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KLQotLyoKLSAqIEFwcGVuZHMgYWxsIHNrYnMgZnJvbSAiZnJvbSIgdG8gInRvIi4gVGhlIG9wZXJhdGlvbiBpcyBhdG9taWMgd2l0aCByZXNwZWN0Ci0gKiB0byBhbGwgb3RoZXIgc2tiIG9wZXJhdGlvbnMgb24gImZyb20iIG9yICJ0byIuCi0gKi8KLQotdm9pZCBza2JfbWlncmF0ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcm9tLHN0cnVjdCBza19idWZmX2hlYWQgKnRvKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCA2NmM1N2MxLi41OTQ2ZWM2IDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTIwNCw5ICsyMDQsOSBAQAogCW1lbXNldChyZGVzYywgMCwgRVRIX0FMRU4pOwogCS8qIG9mZnNldCA0IGNvbWVzIGZyb20gTEFOIGRlc3RpbmF0aW9uIGZpZWxkIGluIExFIGNvbnRyb2wgZnJhbWVzICovCiAJaWYgKHRyaC0+cmNmICYgaHRvbnMoKHVpbnQxNl90KSBUUl9SQ0ZfRElSX0JJVCkpCi0JCW1lbWNweSgmcmRlc2NbNF0sICZ0cmgtPnJzZWdbbnVtX3Jkc2MgLSAyXSwgc2l6ZW9mKHVpbnQxNl90KSk7CisJCW1lbWNweSgmcmRlc2NbNF0sICZ0cmgtPnJzZWdbbnVtX3Jkc2MgLSAyXSwgc2l6ZW9mKF9fYmUxNikpOwogCWVsc2UgewotCQltZW1jcHkoJnJkZXNjWzRdLCAmdHJoLT5yc2VnWzFdLCBzaXplb2YodWludDE2X3QpKTsKKwkJbWVtY3B5KCZyZGVzY1s0XSwgJnRyaC0+cnNlZ1sxXSwgc2l6ZW9mKF9fYmUxNikpOwogCQlyZGVzY1s1XSA9ICgobnRvaHModHJoLT5yc2VnWzBdKSAmIDB4MDAwZikgfCAocmRlc2NbNV0gJiAweGYwKSk7CiAJfQogCkBAIC03NzUsNyArNzc1LDcgQEAKIAkJdW5zaWduZWQgY2hhciAqc3JjLCAqZHN0OwogCiAJCWF0bV9yZXR1cm4odmNjLCBza2ItPnRydWVzaXplKTsKLQkJaWYgKCoodWludDE2X3QgKikgc2tiLT5kYXRhID09IGh0b25zKHByaXYtPmxlY2lkKSB8fAorCQlpZiAoKihfX2JlMTYgKikgc2tiLT5kYXRhID09IGh0b25zKHByaXYtPmxlY2lkKSB8fAogCQkgICAgIXByaXYtPmxlY2QgfHwgIShkZXYtPmZsYWdzICYgSUZGX1VQKSkgewogCQkJLyoKIAkJCSAqIFByb2JhYmx5IGxvb3BpbmcgYmFjaywgb3IgaWYgbGVjZCBpcyBtaXNzaW5nLApAQCAtMTMyMSwxMSArMTMyMSwxMCBAQAogCQlpZiAodGFibGUgPT0gTlVMTCkKIAkJCXJldHVybiAtMTsKIAotCQkqdGx2cyA9IGttYWxsb2ModGFibGUtPnNpemVvZnRsdnMsIEdGUF9BVE9NSUMpOworCQkqdGx2cyA9IGttZW1kdXAodGFibGUtPnRsdnMsIHRhYmxlLT5zaXplb2Z0bHZzLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCp0bHZzID09IE5VTEwpCiAJCQlyZXR1cm4gLTE7CiAKLQkJbWVtY3B5KCp0bHZzLCB0YWJsZS0+dGx2cywgdGFibGUtPnNpemVvZnRsdnMpOwogCQkqc2l6ZW9mdGx2cyA9IHRhYmxlLT5zaXplb2Z0bHZzOwogCiAJCXJldHVybiAwOwpAQCAtMTM2NCwxMSArMTM2MywxMCBAQAogCiAJa2ZyZWUocHJpdi0+dGx2cyk7CS8qIE5VTEwgaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGFzc29jaWF0aW9uICovCiAKLQlwcml2LT50bHZzID0ga21hbGxvYyhzaXplb2Z0bHZzLCBHRlBfS0VSTkVMKTsKKwlwcml2LT50bHZzID0ga21lbWR1cCh0bHZzLCBzaXplb2Z0bHZzLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdi0+dGx2cyA9PSBOVUxMKQogCQlyZXR1cm4gKDApOwogCXByaXYtPnNpemVvZnRsdnMgPSBzaXplb2Z0bHZzOwotCW1lbWNweShwcml2LT50bHZzLCB0bHZzLCBzaXplb2Z0bHZzKTsKIAogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Z0bHZzLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC0xNDA5LDEyICsxNDA3LDEwIEBACiAKIAlrZnJlZShlbnRyeS0+dGx2cyk7CiAKLQllbnRyeS0+dGx2cyA9IGttYWxsb2Moc2l6ZW9mdGx2cywgR0ZQX0tFUk5FTCk7CisJZW50cnktPnRsdnMgPSBrbWVtZHVwKHRsdnMsIHNpemVvZnRsdnMsIEdGUF9LRVJORUwpOwogCWlmIChlbnRyeS0+dGx2cyA9PSBOVUxMKQogCQlyZXR1cm47Ci0KIAllbnRyeS0+c2l6ZW9mdGx2cyA9IHNpemVvZnRsdnM7Ci0JbWVtY3B5KGVudHJ5LT50bHZzLCB0bHZzLCBzaXplb2Z0bHZzKTsKICNlbmRpZgogI2lmIDAKIAlwcmludGsoImxlYy5jOiBsYW5lMl9hc3NvY2lhdGVfaW5kKClcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuaCBiL25ldC9hdG0vbGVjLmgKaW5kZXggODc3ZjUwOS4uMjRjYzk1ZiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuaAorKysgYi9uZXQvYXRtL2xlYy5oCkBAIC0xNCwxNCArMTQsMTQgQEAKICNkZWZpbmUgTEVDX0hFQURFUl9MRU4gMTYKIAogc3RydWN0IGxlY2RhdGFoZHJfODAyMyB7Ci0JdW5zaWduZWQgc2hvcnQgbGVfaGVhZGVyOworCV9fYmUxNiBsZV9oZWFkZXI7CiAJdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOwogCXVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOwotCXVuc2lnbmVkIHNob3J0IGhfdHlwZTsKKwlfX2JlMTYgaF90eXBlOwogfTsKIAogc3RydWN0IGxlY2RhdGFoZHJfODAyNSB7Ci0JdW5zaWduZWQgc2hvcnQgbGVfaGVhZGVyOworCV9fYmUxNiBsZV9oZWFkZXI7CiAJdW5zaWduZWQgY2hhciBhY19wYWQ7CiAJdW5zaWduZWQgY2hhciBmYzsKIAl1bnNpZ25lZCBjaGFyIGhfZGVzdFtFVEhfQUxFTl07CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCAwZDJiOTk0Li5jMThmNzM3IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogLyoKICAqIE92ZXJ3cml0ZXMgdGhlIG9sZCBlbnRyeSBvciBtYWtlcyBhIG5ldyBvbmUuCiAgKi8KLXN0cnVjdCBhdG1fbXBvYV9xb3MgKmF0bV9tcG9hX2FkZF9xb3ModWludDMyX3QgZHN0X2lwLCBzdHJ1Y3QgYXRtX3FvcyAqcW9zKQorc3RydWN0IGF0bV9tcG9hX3FvcyAqYXRtX21wb2FfYWRkX3FvcyhfX2JlMzIgZHN0X2lwLCBzdHJ1Y3QgYXRtX3FvcyAqcW9zKQogewogCXN0cnVjdCBhdG1fbXBvYV9xb3MgKmVudHJ5OwogCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLXN0cnVjdCBhdG1fbXBvYV9xb3MgKmF0bV9tcG9hX3NlYXJjaF9xb3ModWludDMyX3QgZHN0X2lwKQorc3RydWN0IGF0bV9tcG9hX3FvcyAqYXRtX21wb2Ffc2VhcmNoX3FvcyhfX2JlMzIgZHN0X2lwKQogewogCXN0cnVjdCBhdG1fbXBvYV9xb3MgKnFvczsKIApAQCAtNDYwLDExICs0NjAsMTEgQEAKIAlpbl9jYWNoZV9lbnRyeSAqZW50cnk7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJY2hhciAqYnVmZjsKLQl1aW50MzJfdCBpcGFkZHIgPSAwOworCV9fYmUzMiBpcGFkZHIgPSAwOwogCiAJc3RhdGljIHN0cnVjdCB7CiAJCXN0cnVjdCBsbGNfc25hcF9oZHIgaGRyOwotCQl1aW50MzJfdCB0YWc7CisJCV9fYmUzMiB0YWc7CiAJfSB0YWdnZWRfbGxjX3NuYXBfaGRyID0gewogCQl7MHhhYSwgMHhhYSwgMHgwMywgezB4MDAsIDB4MDAsIDB4MDB9LCB7MHg4OCwgMHg0Y319LAogCQkwCkBAIC01NTksNyArNTU5LDcgQEAKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYzsKIAlzdHJ1Y3QgYXRtbXBjX2lvYyBpb2NfZGF0YTsKIAlpbl9jYWNoZV9lbnRyeSAqaW5fZW50cnk7Ci0JdWludDMyX3QgIGlwYWRkcjsKKwlfX2JlMzIgIGlwYWRkcjsKIAogCWJ5dGVzX2xlZnQgPSBjb3B5X2Zyb21fdXNlcigmaW9jX2RhdGEsIGFyZywgc2l6ZW9mKHN0cnVjdCBhdG1tcGNfaW9jKSk7CiAJaWYgKGJ5dGVzX2xlZnQgIT0gMCkgewpAQCAtNjM4LDcgKzYzOCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiAJZWdfY2FjaGVfZW50cnkgKmVnOwogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwotCXVpbnQzMl90IHRhZzsKKwlfX2JlMzIgdGFnOwogCWNoYXIgKnRtcDsKIAkKIAlkZHByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDpcbiIsIGRldi0+bmFtZSk7CkBAIC02ODMsNyArNjgzLDcgQEAKIAl9CiAKIAl0bXAgPSBza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcik7Ci0JdGFnID0gKih1aW50MzJfdCAqKXRtcDsKKwl0YWcgPSAqKF9fYmUzMiAqKXRtcDsKIAogCWVnID0gbXBjLT5lZ19vcHMtPmdldF9ieV90YWcodGFnLCBtcGMpOwogCWlmIChlZyA9PSBOVUxMKSB7CkBAIC0xMDI5LDcgKzEwMjksNyBAQAogCiBzdGF0aWMgdm9pZCBNUE9BX3RyaWdnZXJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewotCXVpbnQzMl90IGRzdF9pcCA9IG1zZy0+Y29udGVudC5pbl9pbmZvLmluX2RzdF9pcDsKKwlfX2JlMzIgZHN0X2lwID0gbXNnLT5jb250ZW50LmluX2luZm8uaW5fZHN0X2lwOwogCWluX2NhY2hlX2VudHJ5ICplbnRyeTsKIAogCWVudHJ5ID0gbXBjLT5pbl9vcHMtPmdldChkc3RfaXAsIG1wYyk7CkBAIC0xMDY2LDcgKzEwNjYsNyBAQAogICovCiBzdGF0aWMgdm9pZCBjaGVja19xb3NfYW5kX29wZW5fc2hvcnRjdXQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCwgaW5fY2FjaGVfZW50cnkgKmVudHJ5KQogewotCXVpbnQzMl90IGRzdF9pcCA9IG1zZy0+Y29udGVudC5pbl9pbmZvLmluX2RzdF9pcDsKKwlfX2JlMzIgZHN0X2lwID0gbXNnLT5jb250ZW50LmluX2luZm8uaW5fZHN0X2lwOwogCXN0cnVjdCBhdG1fbXBvYV9xb3MgKnFvcyA9IGF0bV9tcG9hX3NlYXJjaF9xb3MoZHN0X2lwKTsKIAllZ19jYWNoZV9lbnRyeSAqZWdfZW50cnkgPSBjbGllbnQtPmVnX29wcy0+Z2V0X2J5X3NyY19pcChkc3RfaXAsIGNsaWVudCk7CiAKQEAgLTExMDIsNyArMTEwMiw3IEBACiAKIHN0YXRpYyB2b2lkIE1QT0FfcmVzX3JlcGx5X3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKLQl1aW50MzJfdCBkc3RfaXAgPSBtc2ctPmNvbnRlbnQuaW5faW5mby5pbl9kc3RfaXA7CisJX19iZTMyIGRzdF9pcCA9IG1zZy0+Y29udGVudC5pbl9pbmZvLmluX2RzdF9pcDsKIAlpbl9jYWNoZV9lbnRyeSAqZW50cnkgPSBtcGMtPmluX29wcy0+Z2V0KGRzdF9pcCwgbXBjKTsKIAogCWRwcmludGsoIm1wb2E6ICglcykgTVBPQV9yZXNfcmVwbHlfcmN2ZDogaXAgJXUuJXUuJXUuJXVcbiIsIG1wYy0+ZGV2LT5uYW1lLCBOSVBRVUFEKGRzdF9pcCkpOwpAQCAtMTE0OCw4ICsxMTQ4LDggQEAKIAogc3RhdGljIHZvaWQgaW5ncmVzc19wdXJnZV9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7Ci0JdWludDMyX3QgZHN0X2lwID0gbXNnLT5jb250ZW50LmluX2luZm8uaW5fZHN0X2lwOwotCXVpbnQzMl90IG1hc2sgPSBtc2ctPmlwX21hc2s7CisJX19iZTMyIGRzdF9pcCA9IG1zZy0+Y29udGVudC5pbl9pbmZvLmluX2RzdF9pcDsKKwlfX2JlMzIgbWFzayA9IG1zZy0+aXBfbWFzazsKIAlpbl9jYWNoZV9lbnRyeSAqZW50cnkgPSBtcGMtPmluX29wcy0+Z2V0X3dpdGhfbWFzayhkc3RfaXAsIG1wYywgbWFzayk7CiAKIAlpZihlbnRyeSA9PSBOVUxMKXsKQEAgLTExNzMsNyArMTE3Myw3IEBACiAKIHN0YXRpYyB2b2lkIGVncmVzc19wdXJnZV9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7Ci0JdWludDMyX3QgY2FjaGVfaWQgPSBtc2ctPmNvbnRlbnQuZWdfaW5mby5jYWNoZV9pZDsKKwlfX2JlMzIgY2FjaGVfaWQgPSBtc2ctPmNvbnRlbnQuZWdfaW5mby5jYWNoZV9pZDsKIAllZ19jYWNoZV9lbnRyeSAqZW50cnkgPSBtcGMtPmVnX29wcy0+Z2V0X2J5X2NhY2hlX2lkKGNhY2hlX2lkLCBtcGMpOwogCQogCWlmIChlbnRyeSA9PSBOVUxMKSB7CkBAIC0xMzIyLDEzICsxMzIyLDEyIEBACiAJaWYoY2xpZW50LT5udW1iZXJfb2ZfbXBzX21hY3MpCiAJCWtmcmVlKGNsaWVudC0+bXBzX21hY3MpOwogCWNsaWVudC0+bnVtYmVyX29mX21wc19tYWNzID0gMDsKLQljbGllbnQtPm1wc19tYWNzID0ga21hbGxvYyhFVEhfQUxFTixHRlBfS0VSTkVMKTsKKwljbGllbnQtPm1wc19tYWNzID0ga21lbWR1cChtc2ctPk1QU19jdHJsLCBFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNsaWVudC0+bXBzX21hY3MgPT0gTlVMTCkgewogCQlwcmludGsoIm1wb2E6IHNldF9tcHNfbWFjX2FkZHJfcmN2ZDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybjsKIAl9CiAJY2xpZW50LT5udW1iZXJfb2ZfbXBzX21hY3MgPSAxOwotCW1lbWNweShjbGllbnQtPm1wc19tYWNzLCBtc2ctPk1QU19jdHJsLCBFVEhfQUxFTik7CiAJCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuaCBiL25ldC9hdG0vbXBjLmgKaW5kZXggM2M3OTgxYS4uNTFmNDYwZCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuaAorKysgYi9uZXQvYXRtL21wYy5oCkBAIC0zNiwxNCArMzYsMTQgQEAKIAogc3RydWN0IGF0bV9tcG9hX3FvcyB7CiAgICAgICAgIHN0cnVjdCBhdG1fbXBvYV9xb3MgKm5leHQ7Ci0gICAgICAgIHVpbnQzMl90IGlwYWRkcjsKKyAgICAgICAgX19iZTMyIGlwYWRkcjsKICAgICAgICAgc3RydWN0IGF0bV9xb3MgcW9zOwogfTsKIAogCiAvKiBNUE9BIFFvUyBvcGVyYXRpb25zICovCi1zdHJ1Y3QgYXRtX21wb2FfcW9zICphdG1fbXBvYV9hZGRfcW9zKHVpbnQzMl90IGRzdF9pcCwgc3RydWN0IGF0bV9xb3MgKnFvcyk7Ci1zdHJ1Y3QgYXRtX21wb2FfcW9zICphdG1fbXBvYV9zZWFyY2hfcW9zKHVpbnQzMl90IGRzdF9pcCk7CitzdHJ1Y3QgYXRtX21wb2FfcW9zICphdG1fbXBvYV9hZGRfcW9zKF9fYmUzMiBkc3RfaXAsIHN0cnVjdCBhdG1fcW9zICpxb3MpOworc3RydWN0IGF0bV9tcG9hX3FvcyAqYXRtX21wb2Ffc2VhcmNoX3FvcyhfX2JlMzIgZHN0X2lwKTsKIGludCBhdG1fbXBvYV9kZWxldGVfcW9zKHN0cnVjdCBhdG1fbXBvYV9xb3MgKnFvcyk7CiAKIC8qIERpc3BsYXkgUW9TIGVudHJpZXMuIFRoaXMgaXMgZm9yIHRoZSBwcm9jZnMgKi8KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBvYV9jYWNoZXMuYyBiL25ldC9hdG0vbXBvYV9jYWNoZXMuYwppbmRleCBmYmYxM2NkLi42OTdhMDgxIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wb2FfY2FjaGVzLmMKKysrIGIvbmV0L2F0bS9tcG9hX2NhY2hlcy5jCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCxhcmdzLi4uKQogI2VuZGlmCiAKLXN0YXRpYyBpbl9jYWNoZV9lbnRyeSAqaW5fY2FjaGVfZ2V0KHVpbnQzMl90IGRzdF9pcCwKK3N0YXRpYyBpbl9jYWNoZV9lbnRyeSAqaW5fY2FjaGVfZ2V0KF9fYmUzMiBkc3RfaXAsCiAJCQkJICAgIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQogewogCWluX2NhY2hlX2VudHJ5ICplbnRyeTsKQEAgLTQyLDkgKzQyLDkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGluX2NhY2hlX2VudHJ5ICppbl9jYWNoZV9nZXRfd2l0aF9tYXNrKHVpbnQzMl90IGRzdF9pcCwKK3N0YXRpYyBpbl9jYWNoZV9lbnRyeSAqaW5fY2FjaGVfZ2V0X3dpdGhfbWFzayhfX2JlMzIgZHN0X2lwLAogCQkJCQkgICAgICBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCwKLQkJCQkJICAgICAgdWludDMyX3QgbWFzaykKKwkJCQkJICAgICAgX19iZTMyIG1hc2spCiB7CiAJaW5fY2FjaGVfZW50cnkgKmVudHJ5OwogCkBAIC04NCwxMCArODQsMTAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGluX2NhY2hlX2VudHJ5ICppbl9jYWNoZV9hZGRfZW50cnkodWludDMyX3QgZHN0X2lwLAorc3RhdGljIGluX2NhY2hlX2VudHJ5ICppbl9jYWNoZV9hZGRfZW50cnkoX19iZTMyIGRzdF9pcCwKIAkJCQkJICBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCkKIHsKLQlpbl9jYWNoZV9lbnRyeSogZW50cnkgPSBrbWFsbG9jKHNpemVvZihpbl9jYWNoZV9lbnRyeSksIEdGUF9LRVJORUwpOworCWluX2NhY2hlX2VudHJ5ICplbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKGluX2NhY2hlX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZW50cnkgPT0gTlVMTCkgewogCQlwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19pbl9jYWNoZV9lbnRyeTogb3V0IG9mIG1lbW9yeVxuIik7CkBAIC05NSw3ICs5NSw2IEBACiAJfQogCiAJZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogYWRkaW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXUuJXUuJXUuJXVcbiIsIE5JUFFVQUQoZHN0X2lwKSk7Ci0JbWVtc2V0KGVudHJ5LDAsc2l6ZW9mKGluX2NhY2hlX2VudHJ5KSk7CiAKIAlhdG9taWNfc2V0KCZlbnRyeS0+dXNlLCAxKTsKIAlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBuZXdfaW5fY2FjaGVfZW50cnk6IGFib3V0IHRvIGxvY2tcbiIpOwpAQCAtMzE5LDcgKzMxOCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV9jYWNoZV9pZCh1aW50MzJfdCBjYWNoZV9pZCwgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCitzdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV9jYWNoZV9pZChfX2JlMzIgY2FjaGVfaWQsIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewogCWVnX2NhY2hlX2VudHJ5ICplbnRyeTsKIApAQCAtMzM5LDcgKzMzOCw3IEBACiB9CiAKIC8qIFRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0IHNpbmNlIGl0IHNhdmVzIENQVSBmbGFncyAqLwotc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9nZXRfYnlfdGFnKHVpbnQzMl90IHRhZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCitzdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV90YWcoX19iZTMyIHRhZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllZ19jYWNoZV9lbnRyeSAqZW50cnk7CkBAIC0zODAsNyArMzc5LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9nZXRfYnlfc3JjX2lwKHVpbnQzMl90IGlwYWRkciwgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCitzdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV9zcmNfaXAoX19iZTMyIGlwYWRkciwgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJZWdfY2FjaGVfZW50cnkgKmVudHJ5OwogCkBAIC00NDcsNyArNDQ2LDcgQEAKIAogc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9hZGRfZW50cnkoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCkKIHsKLQllZ19jYWNoZV9lbnRyeSAqZW50cnkgPSBrbWFsbG9jKHNpemVvZihlZ19jYWNoZV9lbnRyeSksIEdGUF9LRVJORUwpOworCWVnX2NhY2hlX2VudHJ5ICplbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKGVnX2NhY2hlX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZW50cnkgPT0gTlVMTCkgewogCQlwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19lZ19jYWNoZV9lbnRyeTogb3V0IG9mIG1lbW9yeVxuIik7CkBAIC00NTUsNyArNDU0LDYgQEAKIAl9CiAKIAlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBhZGRpbmcgYW4gZWdyZXNzIGVudHJ5LCBpcCA9ICV1LiV1LiV1LiV1LCB0aGlzIHNob3VsZCBiZSBvdXIgSVBcbiIsIE5JUFFVQUQobXNnLT5jb250ZW50LmVnX2luZm8uZWdfZHN0X2lwKSk7Ci0JbWVtc2V0KGVudHJ5LCAwLCBzaXplb2YoZWdfY2FjaGVfZW50cnkpKTsKIAogCWF0b21pY19zZXQoJmVudHJ5LT51c2UsIDEpOwogCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19lZ19jYWNoZV9lbnRyeTogYWJvdXQgdG8gbG9ja1xuIik7CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wb2FfY2FjaGVzLmggYi9uZXQvYXRtL21wb2FfY2FjaGVzLmgKaW5kZXggNmM5ODg2YS4uODRkZTk3NyAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcG9hX2NhY2hlcy5oCisrKyBiL25ldC9hdG0vbXBvYV9jYWNoZXMuaApAQCAtMjksMTIgKzI5LDEyIEBACiB9IGluX2NhY2hlX2VudHJ5OwogCiBzdHJ1Y3QgaW5fY2FjaGVfb3BzewotICAgICAgICBpbl9jYWNoZV9lbnRyeSAqKCphZGRfZW50cnkpKHVpbnQzMl90IGRzdF9pcCwKKyAgICAgICAgaW5fY2FjaGVfZW50cnkgKigqYWRkX2VudHJ5KShfX2JlMzIgZHN0X2lwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCk7Ci0gICAgICAgIGluX2NhY2hlX2VudHJ5ICooKmdldCkodWludDMyX3QgZHN0X2lwLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCk7Ci0gICAgICAgIGluX2NhY2hlX2VudHJ5ICooKmdldF93aXRoX21hc2spKHVpbnQzMl90IGRzdF9pcCwgCisgICAgICAgIGluX2NhY2hlX2VudHJ5ICooKmdldCkoX19iZTMyIGRzdF9pcCwgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpOworICAgICAgICBpbl9jYWNoZV9lbnRyeSAqKCpnZXRfd2l0aF9tYXNrKShfX2JlMzIgZHN0X2lwLAogCQkJCQkgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQsCi0JCQkJCSB1aW50MzJfdCBtYXNrKTsKKwkJCQkJIF9fYmUzMiBtYXNrKTsKICAgICAgICAgaW5fY2FjaGVfZW50cnkgKigqZ2V0X2J5X3ZjYykoc3RydWN0IGF0bV92Y2MgKnZjYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KTsKICAgICAgICAgdm9pZCAgICAgICAgICAgICgqcHV0KShpbl9jYWNoZV9lbnRyeSAqZW50cnkpOwpAQCAtNTYsMTcgKzU2LDE3IEBACiAgICAgICAgIHN0cnVjdCBhdG1fdmNjICAgICAgICpzaG9ydGN1dDsKICAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgcGFja2V0c19yY3ZkOwogICAgICAgICB1aW50MTZfdCAgICAgICAgICAgICBlbnRyeV9zdGF0ZTsKLSAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgbGF0ZXN0X2lwX2FkZHI7ICAgIC8qIFRoZSBzcmMgSVAgYWRkcmVzcyBvZiB0aGUgbGFzdCBwYWNrZXQgKi8KKyAgICAgICAgX19iZTMyICAgICAgICAgICAgIGxhdGVzdF9pcF9hZGRyOyAgICAvKiBUaGUgc3JjIElQIGFkZHJlc3Mgb2YgdGhlIGxhc3QgcGFja2V0ICovCiAgICAgICAgIHN0cnVjdCBlZ19jdHJsX2luZm8gIGN0cmxfaW5mbzsKICAgICAgICAgYXRvbWljX3QgICAgICAgICAgICAgdXNlOwogfSBlZ19jYWNoZV9lbnRyeTsKIAogc3RydWN0IGVnX2NhY2hlX29wc3sKICAgICAgICAgZWdfY2FjaGVfZW50cnkgKigqYWRkX2VudHJ5KShzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KTsKLSAgICAgICAgZWdfY2FjaGVfZW50cnkgKigqZ2V0X2J5X2NhY2hlX2lkKSh1aW50MzJfdCBjYWNoZV9pZCwgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpOwotICAgICAgICBlZ19jYWNoZV9lbnRyeSAqKCpnZXRfYnlfdGFnKSh1aW50MzJfdCBjYWNoZV9pZCwgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpOworICAgICAgICBlZ19jYWNoZV9lbnRyeSAqKCpnZXRfYnlfY2FjaGVfaWQpKF9fYmUzMiBjYWNoZV9pZCwgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpOworICAgICAgICBlZ19jYWNoZV9lbnRyeSAqKCpnZXRfYnlfdGFnKShfX2JlMzIgY2FjaGVfaWQsIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KTsKICAgICAgICAgZWdfY2FjaGVfZW50cnkgKigqZ2V0X2J5X3ZjYykoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpOwotICAgICAgICBlZ19jYWNoZV9lbnRyeSAqKCpnZXRfYnlfc3JjX2lwKSh1aW50MzJfdCBpcGFkZHIsIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KTsKKyAgICAgICAgZWdfY2FjaGVfZW50cnkgKigqZ2V0X2J5X3NyY19pcCkoX19iZTMyIGlwYWRkciwgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpOwogICAgICAgICB2b2lkICAgICAgICAgICAgKCpwdXQpKGVnX2NhY2hlX2VudHJ5ICplbnRyeSk7CiAgICAgICAgIHZvaWQgICAgICAgICAgICAoKnJlbW92ZV9lbnRyeSkoZWdfY2FjaGVfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCk7CiAgICAgICAgIHZvaWQgICAgICAgICAgICAoKnVwZGF0ZSkoZWdfY2FjaGVfZW50cnkgKmVudHJ5LCB1aW50MTZfdCBob2xkaW5nX3RpbWUpOwpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcG9hX3Byb2MuYyBiL25ldC9hdG0vbXBvYV9wcm9jLmMKaW5kZXggZDM3Yjg5MS4uMzg0NGM4NSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcG9hX3Byb2MuYworKysgYi9uZXQvYXRtL21wb2FfcHJvYy5jCkBAIC0yMzEsMTQgKzIzMSwxNCBAQAogICAgICAgICAgKi8KICAgICAgICAgdW5zaWduZWQgY2hhciBpcFs0XTsgCiAJaW50IHR4X3BjciwgdHhfc2R1LCByeF9wY3IsIHJ4X3NkdTsKLSAgICAgICAgdWludDMyX3QgaXBhZGRyOworICAgICAgICBfX2JlMzIgaXBhZGRyOwogCXN0cnVjdCBhdG1fcW9zIHFvczsgCiAgICAgICAgIAogICAgICAgICBtZW1zZXQoJnFvcywgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fcW9zKSk7CiAKIAlpZiAoc3NjYW5mKGJ1ZmYsICJkZWwgJWhodS4laGh1LiVoaHUuJWhodSIsCiAJCQlpcCwgaXArMSwgaXArMiwgaXArMykgPT0gNCkgewotCQlpcGFkZHIgPSAqKHVpbnQzMl90ICopaXA7CisJCWlwYWRkciA9ICooX19iZTMyICopaXA7CiAJCXJldHVybiBhdG1fbXBvYV9kZWxldGVfcW9zKGF0bV9tcG9hX3NlYXJjaF9xb3MoaXBhZGRyKSk7CiAJfQogCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJaXAsIGlwKzEsIGlwKzIsIGlwKzMsICZ0eF9wY3IsICZ0eF9zZHUsICZyeF9wY3IsICZyeF9zZHUpICE9IDgpCiAJCXJldHVybiAwOwogCi0gICAgICAgIGlwYWRkciA9ICoodWludDMyX3QgKilpcDsKKyAgICAgICAgaXBhZGRyID0gKihfX2JlMzIgKilpcDsKIAlxb3MudHh0cC50cmFmZmljX2NsYXNzID0gQVRNX0NCUjsKIAlxb3MudHh0cC5tYXhfcGNyID0gdHhfcGNyOwogCXFvcy50eHRwLm1heF9zZHUgPSB0eF9zZHU7CmRpZmYgLS1naXQgYS9uZXQvYXgyNS9hZl9heDI1LmMgYi9uZXQvYXgyNS9hZl9heDI1LmMKaW5kZXggMDAwNjk1Yy4uNmNhYmY2ZCAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYWZfYXgyNS5jCisrKyBiL25ldC9heDI1L2FmX2F4MjUuYwpAQCAtOTA2LDEzICs5MDYsMTMgQEAKIAlheDI1LT5zb3VyY2VfYWRkciA9IG9heDI1LT5zb3VyY2VfYWRkcjsKIAogCWlmIChvYXgyNS0+ZGlnaXBlYXQgIT0gTlVMTCkgewotCQlpZiAoKGF4MjUtPmRpZ2lwZWF0ID0ga21hbGxvYyhzaXplb2YoYXgyNV9kaWdpKSwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKKwkJYXgyNS0+ZGlnaXBlYXQgPSBrbWVtZHVwKG9heDI1LT5kaWdpcGVhdCwgc2l6ZW9mKGF4MjVfZGlnaSksCisJCQkJCSBHRlBfQVRPTUlDKTsKKwkJaWYgKGF4MjUtPmRpZ2lwZWF0ID09IE5VTEwpIHsKIAkJCXNrX2ZyZWUoc2spOwogCQkJYXgyNV9jYl9wdXQoYXgyNSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCi0JCW1lbWNweShheDI1LT5kaWdpcGVhdCwgb2F4MjUtPmRpZ2lwZWF0LCBzaXplb2YoYXgyNV9kaWdpKSk7CiAJfQogCiAJc2stPnNrX3Byb3RpbmZvID0gYXgyNTsKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfb3V0LmMgYi9uZXQvYXgyNS9heDI1X291dC5jCmluZGV4IGQ3NzM2ZTUuLmY4NDA0N2QgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfb3V0LmMKKysrIGIvbmV0L2F4MjUvYXgyNV9vdXQuYwpAQCAtNzAsMTEgKzcwLDExIEBACiAJYXgyNS0+ZGVzdF9hZGRyICAgPSAqZGVzdDsKIAogCWlmIChkaWdpICE9IE5VTEwpIHsKLQkJaWYgKChheDI1LT5kaWdpcGVhdCA9IGttYWxsb2Moc2l6ZW9mKGF4MjVfZGlnaSksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWF4MjUtPmRpZ2lwZWF0ID0ga21lbWR1cChkaWdpLCBzaXplb2YoKmRpZ2kpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGF4MjUtPmRpZ2lwZWF0ID09IE5VTEwpIHsKIAkJCWF4MjVfY2JfcHV0KGF4MjUpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KLQkJbWVtY3B5KGF4MjUtPmRpZ2lwZWF0LCBkaWdpLCBzaXplb2YoYXgyNV9kaWdpKSk7CiAJfQogCiAJc3dpdGNoIChheDI1LT5heDI1X2Rldi0+dmFsdWVzW0FYMjVfVkFMVUVTX1BST1RPQ09MXSkgewpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jIGIvbmV0L2F4MjUvYXgyNV9yb3V0ZS5jCmluZGV4IDUxYjdiZGEuLjg1ODAzNTYgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfcm91dGUuYworKysgYi9uZXQvYXgyNS9heDI1X3JvdXRlLmMKQEAgLTQzMiwxMSArNDMyLDEyIEBACiAJfQogCiAJaWYgKGF4MjVfcnQtPmRpZ2lwZWF0ICE9IE5VTEwpIHsKLQkJaWYgKChheDI1LT5kaWdpcGVhdCA9IGttYWxsb2Moc2l6ZW9mKGF4MjVfZGlnaSksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWF4MjUtPmRpZ2lwZWF0ID0ga21lbWR1cChheDI1X3J0LT5kaWdpcGVhdCwgc2l6ZW9mKGF4MjVfZGlnaSksCisJCQkJCSBHRlBfQVRPTUlDKTsKKwkJaWYgKGF4MjUtPmRpZ2lwZWF0ID09IE5VTEwpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIHB1dDsKIAkJfQotCQltZW1jcHkoYXgyNS0+ZGlnaXBlYXQsIGF4MjVfcnQtPmRpZ2lwZWF0LCBzaXplb2YoYXgyNV9kaWdpKSk7CiAJCWF4MjVfYWRqdXN0X3BhdGgoYWRkciwgYXgyNS0+ZGlnaXBlYXQpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvc3lzY3RsX25ldF9heDI1LmMgYi9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYwppbmRleCA4NjdkNDI1Li5kMjNhMjdmIDEwMDY0NAotLS0gYS9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYworKysgYi9uZXQvYXgyNS9zeXNjdGxfbmV0X2F4MjUuYwpAQCAtMjA5LDcgKzIwOSw5IEBACiAJfQogCiAJZm9yIChuID0gMCwgYXgyNV9kZXYgPSBheDI1X2Rldl9saXN0OyBheDI1X2RldiAhPSBOVUxMOyBheDI1X2RldiA9IGF4MjVfZGV2LT5uZXh0KSB7Ci0JCWN0bF90YWJsZSAqY2hpbGQgPSBrbWFsbG9jKHNpemVvZihheDI1X3BhcmFtX3RhYmxlKSwgR0ZQX0FUT01JQyk7CisJCXN0cnVjdCBjdGxfdGFibGUgKmNoaWxkID0ga21lbWR1cChheDI1X3BhcmFtX3RhYmxlLAorCQkJCQkJICBzaXplb2YoYXgyNV9wYXJhbV90YWJsZSksCisJCQkJCQkgIEdGUF9BVE9NSUMpOwogCQlpZiAoIWNoaWxkKSB7CiAJCQl3aGlsZSAobi0tKQogCQkJCWtmcmVlKGF4MjVfdGFibGVbbl0uY2hpbGQpOwpAQCAtMjE3LDcgKzIxOSw2IEBACiAJCQlzcGluX3VubG9ja19iaCgmYXgyNV9kZXZfbG9jayk7CiAJCQlyZXR1cm47CiAJCX0KLQkJbWVtY3B5KGNoaWxkLCBheDI1X3BhcmFtX3RhYmxlLCBzaXplb2YoYXgyNV9wYXJhbV90YWJsZSkpOwogCQlheDI1X3RhYmxlW25dLmNoaWxkID0gYXgyNV9kZXYtPnN5c3RhYmxlID0gY2hpbGQ7CiAJCWF4MjVfdGFibGVbbl0uY3RsX25hbWUgICAgID0gbiArIDE7CiAJCWF4MjVfdGFibGVbbl0ucHJvY25hbWUgICAgID0gYXgyNV9kZXYtPmRldi0+bmFtZTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmggYi9uZXQvYmx1ZXRvb3RoL2JuZXAvYm5lcC5oCmluZGV4IGJiYjFlZDcuLjBiNmNkMGUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9ibmVwLmgKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2JuZXAuaApAQCAtOTUsMTQgKzk1LDE0IEBACiBzdHJ1Y3QgYm5lcF9zZXRfZmlsdGVyX3JlcSB7CiAJX191OCAgdHlwZTsKIAlfX3U4ICBjdHJsOwotCV9fdTE2IGxlbjsKKwlfX2JlMTYgbGVuOwogCV9fdTggIGxpc3RbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYm5lcF9jb250cm9sX3JzcCB7CiAJX191OCAgdHlwZTsKIAlfX3U4ICBjdHJsOwotCV9fdTE2IHJlc3A7CisJX19iZTE2IHJlc3A7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYm5lcF9leHRfaGRyIHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCmluZGV4IDRkMzQyNGMuLjdiYTY0NzAgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwpAQCAtMTE3LDE4ICsxMTcsMTggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBibmVwX3NldF9kZWZhdWx0X3Byb3RvX2ZpbHRlcihzdHJ1Y3QgYm5lcF9zZXNzaW9uICpzKQogewogCS8qIChJUHY0LCBBUlApICAqLwotCXMtPnByb3RvX2ZpbHRlclswXS5zdGFydCA9IGh0b25zKDB4MDgwMCk7Ci0Jcy0+cHJvdG9fZmlsdGVyWzBdLmVuZCAgID0gaHRvbnMoMHgwODA2KTsKKwlzLT5wcm90b19maWx0ZXJbMF0uc3RhcnQgPSBFVEhfUF9JUDsKKwlzLT5wcm90b19maWx0ZXJbMF0uZW5kICAgPSBFVEhfUF9BUlA7CiAJLyogKFJBUlAsIEFwcGxlVGFsaykgKi8KLQlzLT5wcm90b19maWx0ZXJbMV0uc3RhcnQgPSBodG9ucygweDgwMzUpOwotCXMtPnByb3RvX2ZpbHRlclsxXS5lbmQgICA9IGh0b25zKDB4ODBGMyk7CisJcy0+cHJvdG9fZmlsdGVyWzFdLnN0YXJ0ID0gRVRIX1BfUkFSUDsKKwlzLT5wcm90b19maWx0ZXJbMV0uZW5kICAgPSBFVEhfUF9BQVJQOwogCS8qIChJUFgsIElQdjYpICovCi0Jcy0+cHJvdG9fZmlsdGVyWzJdLnN0YXJ0ID0gaHRvbnMoMHg4MTM3KTsKLQlzLT5wcm90b19maWx0ZXJbMl0uZW5kICAgPSBodG9ucygweDg2REQpOworCXMtPnByb3RvX2ZpbHRlclsyXS5zdGFydCA9IEVUSF9QX0lQWDsKKwlzLT5wcm90b19maWx0ZXJbMl0uZW5kICAgPSBFVEhfUF9JUFY2OwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgYm5lcF9jdHJsX3NldF9uZXRmaWx0ZXIoc3RydWN0IGJuZXBfc2Vzc2lvbiAqcywgdTE2ICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGludCBibmVwX2N0cmxfc2V0X25ldGZpbHRlcihzdHJ1Y3QgYm5lcF9zZXNzaW9uICpzLCBfX2JlMTYgKmRhdGEsIGludCBsZW4pCiB7CiAJaW50IG47CiAKQEAgLTE1MCw4ICsxNTAsOCBAQAogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlmW2ldLnN0YXJ0ID0gZ2V0X3VuYWxpZ25lZChkYXRhKyspOwotCQkJZltpXS5lbmQgICA9IGdldF91bmFsaWduZWQoZGF0YSsrKTsKKwkJCWZbaV0uc3RhcnQgPSBudG9ocyhnZXRfdW5hbGlnbmVkKGRhdGErKykpOworCQkJZltpXS5lbmQgICA9IG50b2hzKGdldF91bmFsaWduZWQoZGF0YSsrKSk7CiAKIAkJCUJUX0RCRygicHJvdG8gZmlsdGVyIHN0YXJ0ICVkIGVuZCAlZCIsCiAJCQkJZltpXS5zdGFydCwgZltpXS5lbmQpOwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJaWYgKGxlbiA8IDIpCiAJCXJldHVybiAtRUlMU0VROwogCi0JbiA9IG50b2hzKGdldF91bmFsaWduZWQoKHUxNiAqKSBkYXRhKSk7IAorCW4gPSBudG9ocyhnZXRfdW5hbGlnbmVkKChfX2JlMTYgKikgZGF0YSkpOwogCWRhdGEgKz0gMjsgbGVuIC09IDI7CiAKIAlpZiAobGVuIDwgbikKQEAgLTMzMiw3ICszMzIsNyBAQAogCWlmICghc2tiX3B1bGwoc2tiLCBfX2JuZXBfcnhfaGxlblt0eXBlICYgQk5FUF9UWVBFX01BU0tdKSkKIAkJZ290byBiYWRmcmFtZTsKIAotCXMtPmVoLmhfcHJvdG8gPSBnZXRfdW5hbGlnbmVkKCh1MTYgKikgKHNrYi0+ZGF0YSAtIDIpKTsKKwlzLT5laC5oX3Byb3RvID0gZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopIChza2ItPmRhdGEgLSAyKSk7CiAKIAlpZiAodHlwZSAmIEJORVBfRVhUX0hFQURFUikgewogCQlpZiAoYm5lcF9yeF9leHRlbnNpb24ocywgc2tiKSA8IDApCkBAIC0zNDMsNyArMzQzLDcgQEAKIAlpZiAobnRvaHMocy0+ZWguaF9wcm90bykgPT0gMHg4MTAwKSB7CiAJCWlmICghc2tiX3B1bGwoc2tiLCA0KSkKIAkJCWdvdG8gYmFkZnJhbWU7Ci0JCXMtPmVoLmhfcHJvdG8gPSBnZXRfdW5hbGlnbmVkKCh1MTYgKikgKHNrYi0+ZGF0YSAtIDIpKTsKKwkJcy0+ZWguaF9wcm90byA9IGdldF91bmFsaWduZWQoKF9fYmUxNiAqKSAoc2tiLT5kYXRhIC0gMikpOwogCX0KIAkKIAkvKiBXZSBoYXZlIHRvIGFsbG9jIG5ldyBza2IgYW5kIGNvcHkgZGF0YSBoZXJlIDooLiBCZWNhdXNlIG9yaWdpbmFsIHNrYgpAQCAtMzY1LDcgKzM2NSw3IEBACiAJY2FzZSBCTkVQX0NPTVBSRVNTRURfU1JDX09OTFk6CiAJCW1lbWNweShfX3NrYl9wdXQobnNrYiwgRVRIX0FMRU4pLCBzLT5laC5oX2Rlc3QsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KF9fc2tiX3B1dChuc2tiLCBFVEhfQUxFTiksIHNrYi0+bWFjLnJhdywgRVRIX0FMRU4pOwotCQlwdXRfdW5hbGlnbmVkKHMtPmVoLmhfcHJvdG8sICh1MTYgKikgX19za2JfcHV0KG5za2IsIDIpKTsKKwkJcHV0X3VuYWxpZ25lZChzLT5laC5oX3Byb3RvLCAoX19iZTE2ICopIF9fc2tiX3B1dChuc2tiLCAyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBCTkVQX0NPTVBSRVNTRURfRFNUX09OTFk6CkBAIC0zNzUsNyArMzc1LDcgQEAKIAogCWNhc2UgQk5FUF9HRU5FUkFMOgogCQltZW1jcHkoX19za2JfcHV0KG5za2IsIEVUSF9BTEVOICogMiksIHNrYi0+bWFjLnJhdywgRVRIX0FMRU4gKiAyKTsKLQkJcHV0X3VuYWxpZ25lZChzLT5laC5oX3Byb3RvLCAodTE2ICopIF9fc2tiX3B1dChuc2tiLCAyKSk7CisJCXB1dF91bmFsaWduZWQocy0+ZWguaF9wcm90bywgKF9fYmUxNiAqKSBfX3NrYl9wdXQobnNrYiwgMikpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwppbmRleCA3ZjdiMjdkLi42N2EwMDJhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCkBAIC0xNTgsMTQgKzE1OCwxNSBAQAogc3RhdGljIGlubGluZSB1MTYgYm5lcF9uZXRfZXRoX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGV0aGhkciAqZWggPSAodm9pZCAqKSBza2ItPmRhdGE7CisJdTE2IHByb3RvID0gbnRvaHMoZWgtPmhfcHJvdG8pOwogCQotCWlmIChudG9ocyhlaC0+aF9wcm90bykgPj0gMTUzNikKLQkJcmV0dXJuIGVoLT5oX3Byb3RvOworCWlmIChwcm90byA+PSAxNTM2KQorCQlyZXR1cm4gcHJvdG87CiAJCQotCWlmIChnZXRfdW5hbGlnbmVkKCh1MTYgKikgc2tiLT5kYXRhKSA9PSAweEZGRkYpCi0JCXJldHVybiBodG9ucyhFVEhfUF84MDJfMyk7CisJaWYgKGdldF91bmFsaWduZWQoKF9fYmUxNiAqKSBza2ItPmRhdGEpID09IGh0b25zKDB4RkZGRikpCisJCXJldHVybiBFVEhfUF84MDJfMzsKIAkJCi0JcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8yKTsKKwlyZXR1cm4gRVRIX1BfODAyXzI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGJuZXBfbmV0X3Byb3RvX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm5lcF9zZXNzaW9uICpzKQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGJiZjc4ZTYuLjI5YThmYTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogCWxvbmcgdGltZW87CiAJaW50IGVyciA9IDA7CiAKLQlsb2NrX3NvY2soc2spOworCWxvY2tfc29ja19uZXN0ZWQoc2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAogCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfTElTVEVOKSB7CiAJCWVyciA9IC1FQkFERkQ7CkBAIC03OTIsNyArNzkyLDcgQEAKIAogCQlyZWxlYXNlX3NvY2soc2spOwogCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOwotCQlsb2NrX3NvY2soc2spOworCQlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKIAkJCWVyciA9IC1FQkFERkQ7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggZGRjNGU5ZC4uMjc4Yzg2NyAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtODU0LDcgKzg1NCw3IEBACiAJcnBuLT5mbG93X2N0cmwgICAgID0gZmxvd19jdHJsX3NldHRpbmdzOwogCXJwbi0+eG9uX2NoYXIgICAgICA9IHhvbl9jaGFyOwogCXJwbi0+eG9mZl9jaGFyICAgICA9IHhvZmZfY2hhcjsKLQlycG4tPnBhcmFtX21hc2sgICAgPSBwYXJhbV9tYXNrOworCXJwbi0+cGFyYW1fbWFzayAgICA9IGNwdV90b19sZTE2KHBhcmFtX21hc2spOwogCiAJKnB0ciA9IF9fZmNzKGJ1Zik7IHB0cisrOwogCkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCiAJaWYgKGxlbiA+IDEyNykgewogCQloZHIgPSAodm9pZCAqKSBza2JfcHVzaChza2IsIDQpOwotCQlwdXRfdW5hbGlnbmVkKGh0b2JzKF9fbGVuMTYobGVuKSksICh1MTYgKikgJmhkci0+bGVuKTsKKwkJcHV0X3VuYWxpZ25lZChodG9icyhfX2xlbjE2KGxlbikpLCAoX19sZTE2ICopICZoZHItPmxlbik7CiAJfSBlbHNlIHsKIAkJaGRyID0gKHZvaWQgKikgc2tiX3B1c2goc2tiLCAzKTsKIAkJaGRyLT5sZW4gPSBfX2xlbjgobGVuKTsKQEAgLTEzNDMsNyArMTM0Myw3IEBACiAJLyogQ2hlY2sgZm9yIHNhbmUgdmFsdWVzLCBpZ25vcmUvYWNjZXB0IGJpdF9yYXRlLCA4IGJpdHMsIDEgc3RvcCBiaXQsCiAJICogbm8gcGFyaXR5LCBubyBmbG93IGNvbnRyb2wgbGluZXMsIG5vcm1hbCBYT04vWE9GRiBjaGFycyAqLwogCi0JaWYgKHJwbi0+cGFyYW1fbWFzayAmIFJGQ09NTV9SUE5fUE1fQklUUkFURSkgeworCWlmIChycG4tPnBhcmFtX21hc2sgJiBjcHVfdG9fbGUxNihSRkNPTU1fUlBOX1BNX0JJVFJBVEUpKSB7CiAJCWJpdF9yYXRlID0gcnBuLT5iaXRfcmF0ZTsKIAkJaWYgKGJpdF9yYXRlICE9IFJGQ09NTV9SUE5fQlJfMTE1MjAwKSB7CiAJCQlCVF9EQkcoIlJQTiBiaXQgcmF0ZSBtaXNtYXRjaCAweCV4IiwgYml0X3JhdGUpOwpAQCAtMTM1Miw3ICsxMzUyLDcgQEAKIAkJfQogCX0KIAotCWlmIChycG4tPnBhcmFtX21hc2sgJiBSRkNPTU1fUlBOX1BNX0RBVEEpIHsKKwlpZiAocnBuLT5wYXJhbV9tYXNrICYgY3B1X3RvX2xlMTYoUkZDT01NX1JQTl9QTV9EQVRBKSkgewogCQlkYXRhX2JpdHMgPSBfX2dldF9ycG5fZGF0YV9iaXRzKHJwbi0+bGluZV9zZXR0aW5ncyk7CiAJCWlmIChkYXRhX2JpdHMgIT0gUkZDT01NX1JQTl9EQVRBXzgpIHsKIAkJCUJUX0RCRygiUlBOIGRhdGEgYml0cyBtaXNtYXRjaCAweCV4IiwgZGF0YV9iaXRzKTsKQEAgLTEzNjEsNyArMTM2MSw3IEBACiAJCX0KIAl9CiAKLQlpZiAocnBuLT5wYXJhbV9tYXNrICYgUkZDT01NX1JQTl9QTV9TVE9QKSB7CisJaWYgKHJwbi0+cGFyYW1fbWFzayAmIGNwdV90b19sZTE2KFJGQ09NTV9SUE5fUE1fU1RPUCkpIHsKIAkJc3RvcF9iaXRzID0gX19nZXRfcnBuX3N0b3BfYml0cyhycG4tPmxpbmVfc2V0dGluZ3MpOwogCQlpZiAoc3RvcF9iaXRzICE9IFJGQ09NTV9SUE5fU1RPUF8xKSB7CiAJCQlCVF9EQkcoIlJQTiBzdG9wIGJpdHMgbWlzbWF0Y2ggMHgleCIsIHN0b3BfYml0cyk7CkBAIC0xMzcwLDcgKzEzNzAsNyBAQAogCQl9CiAJfQogCi0JaWYgKHJwbi0+cGFyYW1fbWFzayAmIFJGQ09NTV9SUE5fUE1fUEFSSVRZKSB7CisJaWYgKHJwbi0+cGFyYW1fbWFzayAmIGNwdV90b19sZTE2KFJGQ09NTV9SUE5fUE1fUEFSSVRZKSkgewogCQlwYXJpdHkgPSBfX2dldF9ycG5fcGFyaXR5KHJwbi0+bGluZV9zZXR0aW5ncyk7CiAJCWlmIChwYXJpdHkgIT0gUkZDT01NX1JQTl9QQVJJVFlfTk9ORSkgewogCQkJQlRfREJHKCJSUE4gcGFyaXR5IG1pc21hdGNoIDB4JXgiLCBwYXJpdHkpOwpAQCAtMTM3OSw3ICsxMzc5LDcgQEAKIAkJfQogCX0KIAotCWlmIChycG4tPnBhcmFtX21hc2sgJiBSRkNPTU1fUlBOX1BNX0ZMT1cpIHsKKwlpZiAocnBuLT5wYXJhbV9tYXNrICYgY3B1X3RvX2xlMTYoUkZDT01NX1JQTl9QTV9GTE9XKSkgewogCQlmbG93X2N0cmwgPSBycG4tPmZsb3dfY3RybDsKIAkJaWYgKGZsb3dfY3RybCAhPSBSRkNPTU1fUlBOX0ZMT1dfTk9ORSkgewogCQkJQlRfREJHKCJSUE4gZmxvdyBjdHJsIG1pc21hdGNoIDB4JXgiLCBmbG93X2N0cmwpOwpAQCAtMTM4OCw3ICsxMzg4LDcgQEAKIAkJfQogCX0KIAotCWlmIChycG4tPnBhcmFtX21hc2sgJiBSRkNPTU1fUlBOX1BNX1hPTikgeworCWlmIChycG4tPnBhcmFtX21hc2sgJiBjcHVfdG9fbGUxNihSRkNPTU1fUlBOX1BNX1hPTikpIHsKIAkJeG9uX2NoYXIgPSBycG4tPnhvbl9jaGFyOwogCQlpZiAoeG9uX2NoYXIgIT0gUkZDT01NX1JQTl9YT05fQ0hBUikgewogCQkJQlRfREJHKCJSUE4gWE9OIGNoYXIgbWlzbWF0Y2ggMHgleCIsIHhvbl9jaGFyKTsKQEAgLTEzOTcsNyArMTM5Nyw3IEBACiAJCX0KIAl9CiAKLQlpZiAocnBuLT5wYXJhbV9tYXNrICYgUkZDT01NX1JQTl9QTV9YT0ZGKSB7CisJaWYgKHJwbi0+cGFyYW1fbWFzayAmIGNwdV90b19sZTE2KFJGQ09NTV9SUE5fUE1fWE9GRikpIHsKIAkJeG9mZl9jaGFyID0gcnBuLT54b2ZmX2NoYXI7CiAJCWlmICh4b2ZmX2NoYXIgIT0gUkZDT01NX1JQTl9YT0ZGX0NIQVIpIHsKIAkJCUJUX0RCRygiUlBOIFhPRkYgY2hhciBtaXNtYXRjaCAweCV4IiwgeG9mZl9jaGFyKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGFjMTgxYmUuLmFjNDdiYTIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vY2hlY2tzdW0uaD4KICNpbmNsdWRlICJicl9wcml2YXRlLmgiCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpAQCAtMzgxLDcgKzM4MCw3IEBACiAJCWNhc2UgSVBWNl9UTFZfSlVNQk86CiAJCQlpZiAoc2tiLT5uaC5yYXdbb2ZmICsgMV0gIT0gNCB8fCAob2ZmICYgMykgIT0gMikKIAkJCQlnb3RvIGJhZDsKLQkJCXBrdF9sZW4gPSBudG9obCgqKHUzMiAqKSAoc2tiLT5uaC5yYXcgKyBvZmYgKyAyKSk7CisJCQlwa3RfbGVuID0gbnRvaGwoKihfX2JlMzIgKikgKHNrYi0+bmgucmF3ICsgb2ZmICsgMikpOwogCQkJaWYgKHBrdF9sZW4gPD0gSVBWNl9NQVhQTEVOIHx8CiAJCQkgICAgc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4pCiAJCQkJZ290byBiYWQ7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCmluZGV4IDhmNjYxMTkuLmE5MTM5NjggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCkBAIC0xNSw2ICsxNSwxOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgogCitzdGF0aWMgaW5saW5lIHNpemVfdCBicl9ubG1zZ19zaXplKHZvaWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWikgLyogSUZMQV9JRk5BTUUgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShNQVhfQUREUl9MRU4pIC8qIElGTEFfQUREUkVTUyAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTUFTVEVSICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogSUZMQV9NVFUgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX0xJTksgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBJRkxBX09QRVJTVEFURSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDEpOyAvKiBJRkxBX1BST1RJTkZPICovCit9CisKIC8qCiAgKiBDcmVhdGUgb25lIG5ldGxpbmsgbWVzc2FnZSBmb3Igb25lIGludGVyZmFjZQogICogQ29udGFpbnMgcG9ydCBhbmQgbWFzdGVyIGluZm8gYXMgd2VsbCBhcyBjYXJyaWVyIGFuZCBicmlkZ2Ugc3RhdGUuCkBAIC0yNCw1MSArMzYsNDMgQEAKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwb3J0LT5icjsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcG9ydC0+ZGV2OwotCXN0cnVjdCBpZmluZm9tc2cgKnI7CisJc3RydWN0IGlmaW5mb21zZyAqaGRyOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCXVuc2lnbmVkIGNoYXIgKmIgPSBza2ItPnRhaWw7Ci0JdTMyIG10dSA9IGRldi0+bXR1OwogCXU4IG9wZXJzdGF0ZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSA/IGRldi0+b3BlcnN0YXRlIDogSUZfT1BFUl9ET1dOOwotCXU4IHBvcnRzdGF0ZSA9IHBvcnQtPnN0YXRlOwogCiAJcHJfZGVidWcoImJyX2ZpbGxfaW5mbyBldmVudCAlZCBwb3J0ICVzIG1hc3RlciAlc1xuIiwKIAkJIGV2ZW50LCBkZXYtPm5hbWUsIGJyLT5kZXYtPm5hbWUpOwogCi0JbmxoID0gTkxNU0dfTkVXKHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKnIpLCBmbGFncyk7Ci0JciA9IE5MTVNHX0RBVEEobmxoKTsKLQlyLT5pZmlfZmFtaWx5ID0gQUZfQlJJREdFOwotCXItPl9faWZpX3BhZCA9IDA7Ci0Jci0+aWZpX3R5cGUgPSBkZXYtPnR5cGU7Ci0Jci0+aWZpX2luZGV4ID0gZGV2LT5pZmluZGV4OwotCXItPmlmaV9mbGFncyA9IGRldl9nZXRfZmxhZ3MoZGV2KTsKLQlyLT5pZmlfY2hhbmdlID0gMDsKKwlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqaGRyKSwgZmxhZ3MpOworCWlmIChubGggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9CVUZTOwogCi0JUlRBX1BVVChza2IsIElGTEFfSUZOQU1FLCBzdHJsZW4oZGV2LT5uYW1lKSsxLCBkZXYtPm5hbWUpOworCWhkciA9IG5sbXNnX2RhdGEobmxoKTsKKwloZHItPmlmaV9mYW1pbHkgPSBBRl9CUklER0U7CisJaGRyLT5fX2lmaV9wYWQgPSAwOworCWhkci0+aWZpX3R5cGUgPSBkZXYtPnR5cGU7CisJaGRyLT5pZmlfaW5kZXggPSBkZXYtPmlmaW5kZXg7CisJaGRyLT5pZmlfZmxhZ3MgPSBkZXZfZ2V0X2ZsYWdzKGRldik7CisJaGRyLT5pZmlfY2hhbmdlID0gMDsKIAotCVJUQV9QVVQoc2tiLCBJRkxBX01BU1RFUiwgc2l6ZW9mKGludCksICZici0+ZGV2LT5pZmluZGV4KTsKKwlOTEFfUFVUX1NUUklORyhza2IsIElGTEFfSUZOQU1FLCBkZXYtPm5hbWUpOworCU5MQV9QVVRfVTMyKHNrYiwgSUZMQV9NQVNURVIsIGJyLT5kZXYtPmlmaW5kZXgpOworCU5MQV9QVVRfVTMyKHNrYiwgSUZMQV9NVFUsIGRldi0+bXR1KTsKKwlOTEFfUFVUX1U4KHNrYiwgSUZMQV9PUEVSU1RBVEUsIG9wZXJzdGF0ZSk7CiAKIAlpZiAoZGV2LT5hZGRyX2xlbikKLQkJUlRBX1BVVChza2IsIElGTEFfQUREUkVTUywgZGV2LT5hZGRyX2xlbiwgZGV2LT5kZXZfYWRkcik7CisJCU5MQV9QVVQoc2tiLCBJRkxBX0FERFJFU1MsIGRldi0+YWRkcl9sZW4sIGRldi0+ZGV2X2FkZHIpOwogCi0JUlRBX1BVVChza2IsIElGTEFfTVRVLCBzaXplb2YobXR1KSwgJm10dSk7CiAJaWYgKGRldi0+aWZpbmRleCAhPSBkZXYtPmlmbGluaykKLQkJUlRBX1BVVChza2IsIElGTEFfTElOSywgc2l6ZW9mKGludCksICZkZXYtPmlmbGluayk7Ci0KLQotCVJUQV9QVVQoc2tiLCBJRkxBX09QRVJTVEFURSwgc2l6ZW9mKG9wZXJzdGF0ZSksICZvcGVyc3RhdGUpOworCQlOTEFfUFVUX1UzMihza2IsIElGTEFfTElOSywgZGV2LT5pZmxpbmspOwogCiAJaWYgKGV2ZW50ID09IFJUTV9ORVdMSU5LKQotCQlSVEFfUFVUKHNrYiwgSUZMQV9QUk9USU5GTywgc2l6ZW9mKHBvcnRzdGF0ZSksICZwb3J0c3RhdGUpOworCQlOTEFfUFVUX1U4KHNrYiwgSUZMQV9QUk9USU5GTywgcG9ydC0+c3RhdGUpOwogCi0JbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOworCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOwogCi0JcmV0dXJuIHNrYi0+bGVuOwotCi1ubG1zZ19mYWlsdXJlOgotcnRhdHRyX2ZhaWx1cmU6Ci0KLQlza2JfdHJpbShza2IsIGIgLSBza2ItPmRhdGEpOwotCXJldHVybiAtRUlOVkFMOworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiBubG1zZ19jYW5jZWwoc2tiLCBubGgpOwogfQogCiAvKgpAQCAtNzcsMTkgKzgxLDE2IEBACiB2b2lkIGJyX2lmaW5mb19ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHBheWxvYWQgPSBzaXplb2Yoc3RydWN0IGlmaW5mb21zZykgKyAxMjg7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCiAJcHJfZGVidWcoImJyaWRnZSBub3RpZnkgZXZlbnQ9JWRcbiIsIGV2ZW50KTsKLQlza2IgPSBubG1zZ19uZXcobmxtc2dfdG90YWxfc2l6ZShwYXlsb2FkKSwgR0ZQX0FUT01JQyk7CisJc2tiID0gbmxtc2dfbmV3KGJyX25sbXNnX3NpemUoKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgMCwgMCwgZXZlbnQsIDApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlnb3RvIGVycm91dDsKLQl9CisJLyogZmFpbHVyZSBpbXBsaWVzIEJVRyBpbiBicl9ubG1zZ19zaXplKCkgKi8KKwlCVUdfT04oZXJyIDwgMCk7CiAKIAllcnIgPSBydG5sX25vdGlmeShza2IsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0FUT01JQyk7CiBlcnJvdXQ6CkBAIC0xMDQsMjUgKzEwNSwxOCBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGlkeDsKLQlpbnQgc19pZHggPSBjYi0+YXJnc1swXTsKLQlpbnQgZXJyID0gMDsKIAogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJZm9yIChkZXYgPSBkZXZfYmFzZSwgaWR4ID0gMDsgZGV2OyBkZXYgPSBkZXYtPm5leHQpIHsKLQkJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCA9IGRldi0+YnJfcG9ydDsKLQogCQkvKiBub3QgYSBicmlkZ2UgcG9ydCAqLwotCQlpZiAoIXApCi0JCQljb250aW51ZTsKKwkJaWYgKGRldi0+YnJfcG9ydCA9PSBOVUxMIHx8IGlkeCA8IGNiLT5hcmdzWzBdKQorCQkJZ290byBza2lwOwogCi0JCWlmIChpZHggPCBzX2lkeCkKLQkJCWdvdG8gY29udDsKLQotCQllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHAsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAotCQkJCSAgICAgY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXTElOSywgTkxNX0ZfTVVMVEkpOwotCQlpZiAoZXJyIDw9IDApCisJCWlmIChicl9maWxsX2lmaW5mbyhza2IsIGRldi0+YnJfcG9ydCwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJICAgY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXTElOSywKKwkJCQkgICBOTE1fRl9NVUxUSSkgPCAwKQogCQkJYnJlYWs7Ci1jb250Ogorc2tpcDoKIAkJKytpZHg7CiAJfQogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKQEAgLTEzOCwyNiArMTMyLDI3IEBACiAgKi8KIHN0YXRpYyBpbnQgYnJfcnRtX3NldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHJ0YXR0ciAgKipydGEgPSBhcmc7Ci0Jc3RydWN0IGlmaW5mb21zZyAqaWZtID0gTkxNU0dfREFUQShubGgpOworCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKKwlzdHJ1Y3QgbmxhdHRyICpwcm90aW5mbzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJdTggbmV3X3N0YXRlOwogCisJaWYgKG5sbXNnX2xlbihubGgpIDwgc2l6ZW9mKCppZm0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmbSA9IG5sbXNnX2RhdGEobmxoKTsKIAlpZiAoaWZtLT5pZmlfZmFtaWx5ICE9IEFGX0JSSURHRSkKIAkJcmV0dXJuIC1FUEZOT1NVUFBPUlQ7CiAKLQkvKiBNdXN0IHBhc3MgdmFsaWQgc3RhdGUgYXMgUFJPVElORk8gKi8KLQlpZiAocnRhW0lGTEFfUFJPVElORk8tMV0pIHsKLQkJdTggKnBzdGF0ZSA9IFJUQV9EQVRBKHJ0YVtJRkxBX1BST1RJTkZPLTFdKTsKLQkJbmV3X3N0YXRlID0gKnBzdGF0ZTsKLQl9IGVsc2UKKwlwcm90aW5mbyA9IG5sbXNnX2ZpbmRfYXR0cihubGgsIHNpemVvZigqaWZtKSwgSUZMQV9QUk9USU5GTyk7CisJaWYgKCFwcm90aW5mbyB8fCBubGFfbGVuKHByb3RpbmZvKSA8IHNpemVvZih1OCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbmV3X3N0YXRlID0gbmxhX2dldF91OChwcm90aW5mbyk7CiAJaWYgKG5ld19zdGF0ZSA+IEJSX1NUQVRFX0JMT0NLSU5HKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEZpbmQgYnJpZGdlIHBvcnQgKi8KIAlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoaWZtLT5pZmlfaW5kZXgpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE3MCwxMCArMTY1LDggQEAKIAlpZiAocC0+YnItPnN0cF9lbmFibGVkKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KLQlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSAmJiBuZXdfc3RhdGUgIT0gQlJfU1RBVEVfRElTQUJMRUQpCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikgfHwKKwkgICAgKCFuZXRpZl9jYXJyaWVyX29rKGRldikgJiYgbmV3X3N0YXRlICE9IEJSX1NUQVRFX0RJU0FCTEVEKSkKIAkJcmV0dXJuIC1FTkVURE9XTjsKIAogCXAtPnN0YXRlID0gbmV3X3N0YXRlOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0XzgwMl8zLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfODAyXzMuYwppbmRleCBkNDJmNjNmLi45YWJiYzA5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfODAyXzMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfODAyXzMuYwpAQCAtMTcsNyArMTcsNyBAQAogewogCXN0cnVjdCBlYnRfODAyXzNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgZWJ0XzgwMl8zX2luZm8gKilkYXRhOwogCXN0cnVjdCBlYnRfODAyXzNfaGRyICpoZHIgPSBlYnRfODAyXzNfaGRyKHNrYik7Ci0JdWludDE2X3QgdHlwZSA9IGhkci0+bGxjLnVpLmN0cmwgJiBJU19VSSA/IGhkci0+bGxjLnVpLnR5cGUgOiBoZHItPmxsYy5uaS50eXBlOworCV9fYmUxNiB0eXBlID0gaGRyLT5sbGMudWkuY3RybCAmIElTX1VJID8gaGRyLT5sbGMudWkudHlwZSA6IGhkci0+bGxjLm5pLnR5cGU7CiAKIAlpZiAoaW5mby0+Yml0bWFzayAmIEVCVF84MDJfM19TQVApIHsKIAkJaWYgKEZXSU5WKGluZm8tPnNhcCAhPSBoZHItPmxsYy51aS5zc2FwLCBFQlRfODAyXzNfU0FQKSkgCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYW1vbmcuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hbW9uZy5jCmluZGV4IGE2MTQ0ODUuLmNlOTdjNDIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hbW9uZy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hbW9uZy5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKIHN0YXRpYyBpbnQgZWJ0X21hY193b3JtaGFzaF9jb250YWlucyhjb25zdCBzdHJ1Y3QgZWJ0X21hY193b3JtaGFzaCAqd2gsCi0JCQkJICAgICBjb25zdCBjaGFyICptYWMsIHVpbnQzMl90IGlwKQorCQkJCSAgICAgY29uc3QgY2hhciAqbWFjLCBfX2JlMzIgaXApCiB7CiAJLyogWW91IG1heSBiZSBwdXp6bGVkIGFzIHRvIGhvdyB0aGlzIGNvZGUgd29ya3MuCiAJICogU29tZSB0cmlja3Mgd2VyZSB1c2VkLCByZWZlciB0byAKQEAgLTcwLDcgKzcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfaXBfZHN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVpbnQzMl90ICphZGRyKQorc3RhdGljIGludCBnZXRfaXBfZHN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiAqYWRkcikKIHsKIAlpZiAoZXRoX2hkcihza2IpLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSkgewogCQlzdHJ1Y3QgaXBoZHIgX2lwaCwgKmloOwpAQCAtODEsMTYgKzgxLDE2IEBACiAJCSphZGRyID0gaWgtPmRhZGRyOwogCX0gZWxzZSBpZiAoZXRoX2hkcihza2IpLT5oX3Byb3RvID09IGh0b25zKEVUSF9QX0FSUCkpIHsKIAkJc3RydWN0IGFycGhkciBfYXJwaCwgKmFoOwotCQl1aW50MzJfdCBidWYsICpicDsKKwkJX19iZTMyIGJ1ZiwgKmJwOwogCiAJCWFoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9hcnBoKSwgJl9hcnBoKTsKIAkJaWYgKGFoID09IE5VTEwgfHwKLQkJICAgIGFoLT5hcl9wbG4gIT0gc2l6ZW9mKHVpbnQzMl90KSB8fAorCQkgICAgYWgtPmFyX3BsbiAhPSBzaXplb2YoX19iZTMyKSB8fAogCQkgICAgYWgtPmFyX2hsbiAhPSBFVEhfQUxFTikKIAkJCXJldHVybiAtMTsKIAkJYnAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBzaXplb2Yoc3RydWN0IGFycGhkcikgKwotCQkJCQkyICogRVRIX0FMRU4gKyBzaXplb2YodWludDMyX3QpLAotCQkJCQlzaXplb2YodWludDMyX3QpLCAmYnVmKTsKKwkJCQkJMiAqIEVUSF9BTEVOICsgc2l6ZW9mKF9fYmUzMiksCisJCQkJCXNpemVvZihfX2JlMzIpLCAmYnVmKTsKIAkJaWYgKGJwID09IE5VTEwpCiAJCQlyZXR1cm4gLTE7CiAJCSphZGRyID0gKmJwOwpAQCAtOTgsNyArOTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF9pcF9zcmMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdWludDMyX3QgKmFkZHIpCitzdGF0aWMgaW50IGdldF9pcF9zcmMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyICphZGRyKQogewogCWlmIChldGhfaGRyKHNrYiktPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApKSB7CiAJCXN0cnVjdCBpcGhkciBfaXBoLCAqaWg7CkBAIC0xMDksMTUgKzEwOSwxNSBAQAogCQkqYWRkciA9IGloLT5zYWRkcjsKIAl9IGVsc2UgaWYgKGV0aF9oZHIoc2tiKS0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApKSB7CiAJCXN0cnVjdCBhcnBoZHIgX2FycGgsICphaDsKLQkJdWludDMyX3QgYnVmLCAqYnA7CisJCV9fYmUzMiBidWYsICpicDsKIAogCQlhaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfYXJwaCksICZfYXJwaCk7CiAJCWlmIChhaCA9PSBOVUxMIHx8Ci0JCSAgICBhaC0+YXJfcGxuICE9IHNpemVvZih1aW50MzJfdCkgfHwKKwkJICAgIGFoLT5hcl9wbG4gIT0gc2l6ZW9mKF9fYmUzMikgfHwKIAkJICAgIGFoLT5hcl9obG4gIT0gRVRIX0FMRU4pCiAJCQlyZXR1cm4gLTE7CiAJCWJwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsKLQkJCQkJRVRIX0FMRU4sIHNpemVvZih1aW50MzJfdCksICZidWYpOworCQkJCQlFVEhfQUxFTiwgc2l6ZW9mKF9fYmUzMiksICZidWYpOwogCQlpZiAoYnAgPT0gTlVMTCkKIAkJCXJldHVybiAtMTsKIAkJKmFkZHIgPSAqYnA7CkBAIC0xMzMsNyArMTMzLDcgQEAKIAlzdHJ1Y3QgZWJ0X2Ftb25nX2luZm8gKmluZm8gPSAoc3RydWN0IGVidF9hbW9uZ19pbmZvICopIGRhdGE7CiAJY29uc3QgY2hhciAqZG1hYywgKnNtYWM7CiAJY29uc3Qgc3RydWN0IGVidF9tYWNfd29ybWhhc2ggKndoX2RzdCwgKndoX3NyYzsKLQl1aW50MzJfdCBkaXAgPSAwLCBzaXAgPSAwOworCV9fYmUzMiBkaXAgPSAwLCBzaXAgPSAwOwogCiAJd2hfZHN0ID0gZWJ0X2Ftb25nX3doX2RzdChpbmZvKTsKIAl3aF9zcmMgPSBlYnRfYW1vbmdfd2hfc3JjKGluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycC5jCmluZGV4IGE2YzgxZDkuLjljNTk5ODAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnAuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwLmMKQEAgLTM1LDEwICszNSwxMCBAQAogCQlyZXR1cm4gRUJUX05PTUFUQ0g7CiAKIAlpZiAoaW5mby0+Yml0bWFzayAmIChFQlRfQVJQX1NSQ19JUCB8IEVCVF9BUlBfRFNUX0lQKSkgewotCQl1aW50MzJfdCBfYWRkciwgKmFwOworCQlfX2JlMzIgX2FkZHIsICphcDsKIAogCQkvKiBJUHY0IGFkZHJlc3NlcyBhcmUgYWx3YXlzIDQgYnl0ZXMgKi8KLQkJaWYgKGFoLT5hcl9wbG4gIT0gc2l6ZW9mKHVpbnQzMl90KSkKKwkJaWYgKGFoLT5hcl9wbG4gIT0gc2l6ZW9mKF9fYmUzMikpCiAJCQlyZXR1cm4gRUJUX05PTUFUQ0g7CiAJCWlmIChpbmZvLT5iaXRtYXNrICYgRUJUX0FSUF9TUkNfSVApIHsKIAkJCWFwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKHN0cnVjdCBhcnBoZHIpICsKQEAgLTUzLDcgKzUzLDcgQEAKIAogCQlpZiAoaW5mby0+Yml0bWFzayAmIEVCVF9BUlBfRFNUX0lQKSB7CiAJCQlhcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNpemVvZihzdHJ1Y3QgYXJwaGRyKSArCi0JCQkJCQkyKmFoLT5hcl9obG4rc2l6ZW9mKHVpbnQzMl90KSwKKwkJCQkJCTIqYWgtPmFyX2hsbitzaXplb2YoX19iZTMyKSwKIAkJCQkJCXNpemVvZihfYWRkciksICZfYWRkcik7CiAJCQlpZiAoYXAgPT0gTlVMTCkKIAkJCQlyZXR1cm4gRUJUX05PTUFUQ0g7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXAuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcC5jCmluZGV4IDY1YjY2NWMuLmU0YzY0MjQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcC5jCkBAIC0yMCw4ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKIHN0cnVjdCB0Y3B1ZHBoZHIgewotCXVpbnQxNl90IHNyYzsKLQl1aW50MTZfdCBkc3Q7CisJX19iZTE2IHNyYzsKKwlfX2JlMTYgZHN0OwogfTsKIAogc3RhdGljIGludCBlYnRfZmlsdGVyX2lwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCA0NjZlZDM0Li5hMTg0Zjg3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC0zOCw4ICszOCw4IEBACiAKIHN0cnVjdCB0Y3B1ZHBoZHIKIHsKLQl1aW50MTZfdCBzcmM7Ci0JdWludDE2X3QgZHN0OworCV9fYmUxNiBzcmM7CisJX19iZTE2IGRzdDsKIH07CiAKIHN0cnVjdCBhcnBwYXlsb2FkCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJICogdGhlbiBsb2cgdGhlIEFSUCBwYXlsb2FkICovCiAJCWlmIChhaC0+YXJfaHJkID09IGh0b25zKDEpICYmCiAJCSAgICBhaC0+YXJfaGxuID09IEVUSF9BTEVOICYmCi0JCSAgICBhaC0+YXJfcGxuID09IHNpemVvZih1aW50MzJfdCkpIHsKKwkJICAgIGFoLT5hcl9wbG4gPT0gc2l6ZW9mKF9fYmUzMikpIHsKIAkJCXN0cnVjdCBhcnBwYXlsb2FkIF9hcnBwLCAqYXA7CiAKIAkJCWFwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2l6ZW9mKF9hcnBoKSwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFyay5jCmluZGV4IGI1NDMwNmEuLjYyZDIzYzcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmsuYwpAQCAtMjUsMTUgKzI1LDE1IEBACiAJaW50IGFjdGlvbiA9IGluZm8tPnRhcmdldCAmIC0xNjsKIAogCWlmIChhY3Rpb24gPT0gTUFSS19TRVRfVkFMVUUpCi0JCSgqcHNrYiktPm5mbWFyayA9IGluZm8tPm1hcms7CisJCSgqcHNrYiktPm1hcmsgPSBpbmZvLT5tYXJrOwogCWVsc2UgaWYgKGFjdGlvbiA9PSBNQVJLX09SX1ZBTFVFKQotCQkoKnBza2IpLT5uZm1hcmsgfD0gaW5mby0+bWFyazsKKwkJKCpwc2tiKS0+bWFyayB8PSBpbmZvLT5tYXJrOwogCWVsc2UgaWYgKGFjdGlvbiA9PSBNQVJLX0FORF9WQUxVRSkKLQkJKCpwc2tiKS0+bmZtYXJrICY9IGluZm8tPm1hcms7CisJCSgqcHNrYiktPm1hcmsgJj0gaW5mby0+bWFyazsKIAllbHNlCi0JCSgqcHNrYiktPm5mbWFyayBePSBpbmZvLT5tYXJrOworCQkoKnBza2IpLT5tYXJrIF49IGluZm8tPm1hcms7CiAKLQlyZXR1cm4gaW5mby0+dGFyZ2V0IHwgLTE2OworCXJldHVybiBpbmZvLT50YXJnZXQgfCB+RUJUX1ZFUkRJQ1RfQklUUzsKIH0KIAogc3RhdGljIGludCBlYnRfdGFyZ2V0X21hcmtfY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLCB1bnNpZ25lZCBpbnQgaG9va21hc2ssCkBAIC00NCwxMyArNDQsMTMgQEAKIAogCWlmIChkYXRhbGVuICE9IEVCVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9tYXJrX3RfaW5mbykpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl0bXAgPSBpbmZvLT50YXJnZXQgfCAtMTY7CisJdG1wID0gaW5mby0+dGFyZ2V0IHwgfkVCVF9WRVJESUNUX0JJVFM7CiAJaWYgKEJBU0VfQ0hBSU4gJiYgdG1wID09IEVCVF9SRVRVUk4pCiAJCXJldHVybiAtRUlOVkFMOwogCUNMRUFSX0JBU0VfQ0hBSU5fQklUOwogCWlmICh0bXAgPCAtTlVNX1NUQU5EQVJEX1RBUkdFVFMgfHwgdG1wID49IDApCiAJCXJldHVybiAtRUlOVkFMOwotCXRtcCA9IGluZm8tPnRhcmdldCAmIC0xNjsKKwl0bXAgPSBpbmZvLT50YXJnZXQgJiB+RUJUX1ZFUkRJQ1RfQklUUzsKIAlpZiAodG1wICE9IE1BUktfU0VUX1ZBTFVFICYmIHRtcCAhPSBNQVJLX09SX1ZBTFVFICYmCiAJICAgIHRtcCAhPSBNQVJLX0FORF9WQUxVRSAmJiB0bXAgIT0gTUFSS19YT1JfVkFMVUUpCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmtfbS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmtfbS5jCmluZGV4IGE2NDEzZTQuLjAyNTg2OWUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrX20uYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFya19tLmMKQEAgLTE5LDggKzE5LDggQEAKIAlzdHJ1Y3QgZWJ0X21hcmtfbV9pbmZvICppbmZvID0gKHN0cnVjdCBlYnRfbWFya19tX2luZm8gKikgZGF0YTsKIAogCWlmIChpbmZvLT5iaXRtYXNrICYgRUJUX01BUktfT1IpCi0JCXJldHVybiAhKCEhKHNrYi0+bmZtYXJrICYgaW5mby0+bWFzaykgXiBpbmZvLT5pbnZlcnQpOwotCXJldHVybiAhKCgoc2tiLT5uZm1hcmsgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydCk7CisJCXJldHVybiAhKCEhKHNrYi0+bWFyayAmIGluZm8tPm1hc2spIF4gaW5mby0+aW52ZXJ0KTsKKwlyZXR1cm4gISgoKHNrYi0+bWFyayAmIGluZm8tPm1hc2spID09IGluZm8tPm1hcmspIF4gaW5mby0+aW52ZXJ0KTsKIH0KIAogc3RhdGljIGludCBlYnRfbWFya19jaGVjayhjb25zdCBjaGFyICp0YWJsZW5hbWUsIHVuc2lnbmVkIGludCBob29rbWFzaywKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9zbmF0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc25hdC5jCmluZGV4IGNiYjMzZTIuLmE1MDcyMjEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9zbmF0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3NuYXQuYwpAQCAtMTIsNiArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0X25hdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0L2FycC5oPgogCiBzdGF0aWMgaW50IGVidF90YXJnZXRfc25hdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCBob29rbnIsCiAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCkBAIC0zMSwyNCArMzMsNDMgQEAKIAkJKnBza2IgPSBuc2tiOwogCX0KIAltZW1jcHkoZXRoX2hkcigqcHNrYiktPmhfc291cmNlLCBpbmZvLT5tYWMsIEVUSF9BTEVOKTsKLQlyZXR1cm4gaW5mby0+dGFyZ2V0OworCWlmICghKGluZm8tPnRhcmdldCAmIE5BVF9BUlBfQklUKSAmJgorCSAgICBldGhfaGRyKCpwc2tiKS0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9BUlApKSB7CisJCXN0cnVjdCBhcnBoZHIgX2FoLCAqYXA7CisKKwkJYXAgPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIDAsIHNpemVvZihfYWgpLCAmX2FoKTsKKwkJaWYgKGFwID09IE5VTEwpCisJCQlyZXR1cm4gRUJUX0RST1A7CisJCWlmIChhcC0+YXJfaGxuICE9IEVUSF9BTEVOKQorCQkJZ290byBvdXQ7CisJCWlmIChza2Jfc3RvcmVfYml0cygqcHNrYiwgc2l6ZW9mKF9haCksIGluZm8tPm1hYyxFVEhfQUxFTikpCisJCQlyZXR1cm4gRUJUX0RST1A7CisJfQorb3V0OgorCXJldHVybiBpbmZvLT50YXJnZXQgfCB+RUJUX1ZFUkRJQ1RfQklUUzsKIH0KIAogc3RhdGljIGludCBlYnRfdGFyZ2V0X3NuYXRfY2hlY2soY29uc3QgY2hhciAqdGFibGVuYW1lLCB1bnNpZ25lZCBpbnQgaG9va21hc2ssCiAgICBjb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5ICplLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKIHsKIAlzdHJ1Y3QgZWJ0X25hdF9pbmZvICppbmZvID0gKHN0cnVjdCBlYnRfbmF0X2luZm8gKikgZGF0YTsKKwlpbnQgdG1wOwogCiAJaWYgKGRhdGFsZW4gIT0gRUJUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X25hdF9pbmZvKSkpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChCQVNFX0NIQUlOICYmIGluZm8tPnRhcmdldCA9PSBFQlRfUkVUVVJOKQorCXRtcCA9IGluZm8tPnRhcmdldCB8IH5FQlRfVkVSRElDVF9CSVRTOworCWlmIChCQVNFX0NIQUlOICYmIHRtcCA9PSBFQlRfUkVUVVJOKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlDTEVBUl9CQVNFX0NIQUlOX0JJVDsKIAlpZiAoc3RyY21wKHRhYmxlbmFtZSwgIm5hdCIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoaG9va21hc2sgJiB+KDEgPDwgTkZfQlJfUE9TVF9ST1VUSU5HKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKElOVkFMSURfVEFSR0VUKQorCisJaWYgKHRtcCA8IC1OVU1fU1RBTkRBUkRfVEFSR0VUUyB8fCB0bXAgPj0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdG1wID0gaW5mby0+dGFyZ2V0IHwgRUJUX1ZFUkRJQ1RfQklUUzsKKwlpZiAoKHRtcCAmIH5OQVRfQVJQX0JJVCkgIT0gfk5BVF9BUlBfQklUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IDlmOTUwZGIuLmMxYWY2OGIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJaWYgKHViLT5xbGVuID09IDEpCiAJCXNrYl9zZXRfdGltZXN0YW1wKHViLT5za2IsICZwbS0+c3RhbXApOwogCXBtLT5kYXRhX2xlbiA9IGNvcHlfbGVuOwotCXBtLT5tYXJrID0gc2tiLT5uZm1hcms7CisJcG0tPm1hcmsgPSBza2ItPm1hcms7CiAJcG0tPmhvb2sgPSBob29rbnI7CiAJaWYgKHVsb2dpbmZvLT5wcmVmaXggIT0gTlVMTCkKIAkJc3RyY3B5KHBtLT5wcmVmaXgsIHVsb2dpbmZvLT5wcmVmaXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF92bGFuLmMKaW5kZXggYTJiNDUyOC4uN2VlMzc3NiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdmxhbi5jCkBAIC01NSw3ICs1NSw3IEBACiAJdW5zaWduZWQgc2hvcnQgaWQ7CS8qIFZMQU4gSUQsIGdpdmVuIGZyb20gZnJhbWUgVENJICovCiAJdW5zaWduZWQgY2hhciBwcmlvOwkvKiB1c2VyX3ByaW9yaXR5LCBnaXZlbiBmcm9tIGZyYW1lIFRDSSAqLwogCS8qIFZMQU4gZW5jYXBzdWxhdGVkIFR5cGUvTGVuZ3RoIGZpZWxkLCBnaXZlbiBmcm9tIG9yaWcgZnJhbWUgKi8KLQl1bnNpZ25lZCBzaG9ydCBlbmNhcDsKKwlfX2JlMTYgZW5jYXA7CiAKIAlmcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIDAsIHNpemVvZihfZnJhbWUpLCAmX2ZyYW1lKTsKIAlpZiAoZnAgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCmluZGV4IDlhNmU1NDguLmQzN2NlMDQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwpAQCAtMjMsNyArMjMsNyBAQAogCS5wb2xpY3kJCT0gRUJUX0FDQ0VQVCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZWJ0X3JlcGxhY2UgaW5pdGlhbF90YWJsZSA9CitzdGF0aWMgc3RydWN0IGVidF9yZXBsYWNlX2tlcm5lbCBpbml0aWFsX3RhYmxlID0KIHsKIAkubmFtZQkJPSAiYnJvdXRlIiwKIAkudmFsaWRfaG9va3MJPSAxIDw8IE5GX0JSX0JST1VUSU5HLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKaW5kZXggM2Q1YmQ0NC4uMTI3MTM1ZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCkBAIC0zMCw3ICszMCw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZWJ0X3JlcGxhY2UgaW5pdGlhbF90YWJsZSA9CitzdGF0aWMgc3RydWN0IGVidF9yZXBsYWNlX2tlcm5lbCBpbml0aWFsX3RhYmxlID0KIHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCAwNGRkNDJlLi45YzUwNDg4IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTMwLDcgKzMwLDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGVidF9yZXBsYWNlIGluaXRpYWxfdGFibGUgPQorc3RhdGljIHN0cnVjdCBlYnRfcmVwbGFjZV9rZXJuZWwgaW5pdGlhbF90YWJsZSA9CiB7CiAJLm5hbWUJCT0gIm5hdCIsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggOWY4NTY2Ni4uYmVlNTU4YTQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwpAQCAtMzM4LDEwICszMzgsMTEgQEAKICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBob29rbWFzaywgdW5zaWduZWQgaW50ICpjbnQpCiB7CiAJc3RydWN0IGVidF9tYXRjaCAqbWF0Y2g7CisJc2l6ZV90IGxlZnQgPSAoKGNoYXIgKillICsgZS0+d2F0Y2hlcnNfb2Zmc2V0KSAtIChjaGFyICopbTsKIAlpbnQgcmV0OwogCi0JaWYgKCgoY2hhciAqKW0pICsgbS0+bWF0Y2hfc2l6ZSArIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoKSA+Ci0JICAgKChjaGFyICopZSkgKyBlLT53YXRjaGVyc19vZmZzZXQpCisJaWYgKGxlZnQgPCBzaXplb2Yoc3RydWN0IGVidF9lbnRyeV9tYXRjaCkgfHwKKwkgICAgbGVmdCAtIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoKSA8IG0tPm1hdGNoX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCW1hdGNoID0gZmluZF9tYXRjaF9sb2NrKG0tPnUubmFtZSwgJnJldCwgJmVidF9tdXRleCk7CiAJaWYgKCFtYXRjaCkKQEAgLTM2NywxMCArMzY4LDExIEBACiAgICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgaG9va21hc2ssIHVuc2lnbmVkIGludCAqY250KQogewogCXN0cnVjdCBlYnRfd2F0Y2hlciAqd2F0Y2hlcjsKKwlzaXplX3QgbGVmdCA9ICgoY2hhciAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0KSAtIChjaGFyICopdzsKIAlpbnQgcmV0OwogCi0JaWYgKCgoY2hhciAqKXcpICsgdy0+d2F0Y2hlcl9zaXplICsgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnlfd2F0Y2hlcikgPgotCSAgICgoY2hhciAqKWUpICsgZS0+dGFyZ2V0X29mZnNldCkKKwlpZiAobGVmdCA8IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIpIHx8CisJICAgbGVmdCAtIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIpIDwgdy0+d2F0Y2hlcl9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl3YXRjaGVyID0gZmluZF93YXRjaGVyX2xvY2sody0+dS5uYW1lLCAmcmV0LCAmZWJ0X211dGV4KTsKIAlpZiAoIXdhdGNoZXIpCkBAIC0zOTEsMzUgKzM5Myw5MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVidF92ZXJpZnlfcG9pbnRlcnMoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAorCQkJICAgICAgIHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgbGltaXQgPSByZXBsLT5lbnRyaWVzX3NpemU7CisJdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzID0gcmVwbC0+dmFsaWRfaG9va3M7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykKKwkJbmV3aW5mby0+aG9va19lbnRyeVtpXSA9IE5VTEw7CisKKwluZXdpbmZvLT5lbnRyaWVzX3NpemUgPSByZXBsLT5lbnRyaWVzX3NpemU7CisJbmV3aW5mby0+bmVudHJpZXMgPSByZXBsLT5uZW50cmllczsKKworCXdoaWxlIChvZmZzZXQgPCBsaW1pdCkgeworCQlzaXplX3QgbGVmdCA9IGxpbWl0IC0gb2Zmc2V0OworCQlzdHJ1Y3QgZWJ0X2VudHJ5ICplID0gKHZvaWQgKiluZXdpbmZvLT5lbnRyaWVzICsgb2Zmc2V0OworCisJCWlmIChsZWZ0IDwgc2l6ZW9mKHVuc2lnbmVkIGludCkpCisJCQlicmVhazsKKworCQlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykgeworCQkJaWYgKCh2YWxpZF9ob29rcyAmICgxIDw8IGkpKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKChjaGFyIF9fdXNlciAqKXJlcGwtPmhvb2tfZW50cnlbaV0gPT0KKwkJCSAgICAgcmVwbC0+ZW50cmllcyArIG9mZnNldCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpICE9IE5GX0JSX05VTUhPT0tTIHx8ICEoZS0+Yml0bWFzayAmIEVCVF9FTlRSWV9PUl9FTlRSSUVTKSkgeworCQkJaWYgKGUtPmJpdG1hc2sgIT0gMCkgeworCQkJCS8qIHdlIG1ha2UgdXNlcnNwYWNlIHNldCB0aGlzIHJpZ2h0LAorCQkJCSAgIHNvIHRoZXJlIGlzIG5vIG1pc3VuZGVyc3RhbmRpbmcgKi8KKwkJCQlCVUdQUklOVCgiRUJUX0VOVFJZX09SX0VOVFJJRVMgc2hvdWxkbid0IGJlIHNldCAiCisJCQkJCSAiaW4gZGlzdGluZ3Vpc2hlclxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoaSAhPSBORl9CUl9OVU1IT09LUykKKwkJCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldID0gKHN0cnVjdCBlYnRfZW50cmllcyAqKWU7CisJCQlpZiAobGVmdCA8IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpKQorCQkJCWJyZWFrOworCQkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpOworCQl9IGVsc2UgeworCQkJaWYgKGxlZnQgPCBzaXplb2Yoc3RydWN0IGVidF9lbnRyeSkpCisJCQkJYnJlYWs7CisJCQlpZiAobGVmdCA8IGUtPm5leHRfb2Zmc2V0KQorCQkJCWJyZWFrOworCQkJb2Zmc2V0ICs9IGUtPm5leHRfb2Zmc2V0OworCQl9CisJfQorCWlmIChvZmZzZXQgIT0gbGltaXQpIHsKKwkJQlVHUFJJTlQoImVudHJpZXNfc2l6ZSB0b28gc21hbGxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBhbGwgdmFsaWQgaG9va3MgaGF2ZSBhIGNoYWluICovCisJZm9yIChpID0gMDsgaSA8IE5GX0JSX05VTUhPT0tTOyBpKyspIHsKKwkJaWYgKCFuZXdpbmZvLT5ob29rX2VudHJ5W2ldICYmCisJCSAgICh2YWxpZF9ob29rcyAmICgxIDw8IGkpKSkgeworCQkJQlVHUFJJTlQoIlZhbGlkIGhvb2sgd2l0aG91dCBjaGFpblxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIHRoaXMgb25lIGlzIHZlcnkgY2FyZWZ1bCwgYXMgaXQgaXMgdGhlIGZpcnN0IGZ1bmN0aW9uCiAgKiB0byBwYXJzZSB0aGUgdXNlcnNwYWNlIGRhdGEKICAqLwogc3RhdGljIGlubGluZSBpbnQKIGVidF9jaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhzdHJ1Y3QgZWJ0X2VudHJ5ICplLAotICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvLCBjaGFyICpiYXNlLCBjaGFyICpsaW1pdCwKLSAgIHN0cnVjdCBlYnRfZW50cmllcyAqKmhvb2tfZW50cmllcywgdW5zaWduZWQgaW50ICpuLCB1bnNpZ25lZCBpbnQgKmNudCwKLSAgIHVuc2lnbmVkIGludCAqdG90YWxjbnQsIHVuc2lnbmVkIGludCAqdWRjX2NudCwgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzKQorICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvLAorICAgdW5zaWduZWQgaW50ICpuLCB1bnNpZ25lZCBpbnQgKmNudCwKKyAgIHVuc2lnbmVkIGludCAqdG90YWxjbnQsIHVuc2lnbmVkIGludCAqdWRjX2NudCkKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBORl9CUl9OVU1IT09LUzsgaSsrKSB7Ci0JCWlmICgodmFsaWRfaG9va3MgJiAoMSA8PCBpKSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIChjaGFyICopaG9va19lbnRyaWVzW2ldIC0gYmFzZSA9PQotCQkgICAoY2hhciAqKWUgLSBuZXdpbmZvLT5lbnRyaWVzKQorCQlpZiAoKHZvaWQgKillID09ICh2b2lkICopbmV3aW5mby0+aG9va19lbnRyeVtpXSkKIAkJCWJyZWFrOwogCX0KIAkvKiBiZWdpbm5pbmcgb2YgYSBuZXcgY2hhaW4KIAkgICBpZiBpID09IE5GX0JSX05VTUhPT0tTIGl0IG11c3QgYmUgYSB1c2VyIGRlZmluZWQgY2hhaW4gKi8KLQlpZiAoaSAhPSBORl9CUl9OVU1IT09LUyB8fCAhKGUtPmJpdG1hc2sgJiBFQlRfRU5UUllfT1JfRU5UUklFUykpIHsKLQkJaWYgKChlLT5iaXRtYXNrICYgRUJUX0VOVFJZX09SX0VOVFJJRVMpICE9IDApIHsKLQkJCS8qIHdlIG1ha2UgdXNlcnNwYWNlIHNldCB0aGlzIHJpZ2h0LAotCQkJICAgc28gdGhlcmUgaXMgbm8gbWlzdW5kZXJzdGFuZGluZyAqLwotCQkJQlVHUFJJTlQoIkVCVF9FTlRSWV9PUl9FTlRSSUVTIHNob3VsZG4ndCBiZSBzZXQgIgotCQkJICAgICAgICAgImluIGRpc3Rpbmd1aXNoZXJcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwlpZiAoaSAhPSBORl9CUl9OVU1IT09LUyB8fCAhZS0+Yml0bWFzaykgewogCQkvKiB0aGlzIGNoZWNrcyBpZiB0aGUgcHJldmlvdXMgY2hhaW4gaGFzIGFzIG1hbnkgZW50cmllcwogCQkgICBhcyBpdCBzYWlkIGl0IGhhcyAqLwogCQlpZiAoKm4gIT0gKmNudCkgewpAQCAtNDI3LDEyICs0ODUsNiBAQAogCQkgICAgICAgICAgICAgICAgICJpbiB0aGUgY2hhaW5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJLyogYmVmb3JlIHdlIGxvb2sgYXQgdGhlIHN0cnVjdCwgYmUgc3VyZSBpdCBpcyBub3QgdG9vIGJpZyAqLwotCQlpZiAoKGNoYXIgKilob29rX2VudHJpZXNbaV0gKyBzaXplb2Yoc3RydWN0IGVidF9lbnRyaWVzKQotCQkgICA+IGxpbWl0KSB7Ci0JCQlCVUdQUklOVCgiZW50cmllc19zaXplIHRvbyBzbWFsbFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCQlpZiAoKChzdHJ1Y3QgZWJ0X2VudHJpZXMgKillKS0+cG9saWN5ICE9IEVCVF9EUk9QICYmCiAJCSAgICgoc3RydWN0IGVidF9lbnRyaWVzICopZSktPnBvbGljeSAhPSBFQlRfQUNDRVBUKSB7CiAJCQkvKiBvbmx5IFJFVFVSTiBmcm9tIHVkYyAqLwpAQCAtNDQ0LDggKzQ5Niw2IEBACiAJCX0KIAkJaWYgKGkgPT0gTkZfQlJfTlVNSE9PS1MpIC8qIGl0J3MgYSB1c2VyIGRlZmluZWQgY2hhaW4gKi8KIAkJCSgqdWRjX2NudCkrKzsKLQkJZWxzZQotCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSA9IChzdHJ1Y3QgZWJ0X2VudHJpZXMgKillOwogCQlpZiAoKChzdHJ1Y3QgZWJ0X2VudHJpZXMgKillKS0+Y291bnRlcl9vZmZzZXQgIT0gKnRvdGFsY250KSB7CiAJCQlCVUdQUklOVCgiY291bnRlcl9vZmZzZXQgIT0gdG90YWxjbnQiKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNDY2LDcgKzUxNiw2IEBACiAJCUJVR1BSSU5UKCJ0YXJnZXQgc2l6ZSB0b28gc21hbGxcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAkoKmNudCkrKzsKIAkoKnRvdGFsY250KSsrOwogCXJldHVybiAwOwpAQCAtNDg1LDE3ICs1MzQsMTQgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQKIGVidF9nZXRfdWRjX3Bvc2l0aW9ucyhzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0gICBzdHJ1Y3QgZWJ0X2VudHJpZXMgKipob29rX2VudHJpZXMsIHVuc2lnbmVkIGludCAqbiwgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAotICAgc3RydWN0IGVidF9jbF9zdGFjayAqdWRjKQorICAgdW5zaWduZWQgaW50ICpuLCBzdHJ1Y3QgZWJ0X2NsX3N0YWNrICp1ZGMpCiB7CiAJaW50IGk7CiAKIAkvKiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gY2hhaW4gc3RhcnRzICovCi0JaWYgKGUtPmJpdG1hc2sgJiBFQlRfRU5UUllfT1JfRU5UUklFUykKKwlpZiAoZS0+Yml0bWFzaykKIAkJcmV0dXJuIDA7CiAJZm9yIChpID0gMDsgaSA8IE5GX0JSX05VTUhPT0tTOyBpKyspIHsKLQkJaWYgKCh2YWxpZF9ob29rcyAmICgxIDw8IGkpKSA9PSAwKQotCQkJY29udGludWU7CiAJCWlmIChuZXdpbmZvLT5ob29rX2VudHJ5W2ldID09IChzdHJ1Y3QgZWJ0X2VudHJpZXMgKillKQogCQkJYnJlYWs7CiAJfQpAQCAtNTQxLDcgKzU4Nyw3IEBACiB7CiAJc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CiAKLQlpZiAoKGUtPmJpdG1hc2sgJiBFQlRfRU5UUllfT1JfRU5UUklFUykgPT0gMCkKKwlpZiAoZS0+Yml0bWFzayA9PSAwKQogCQlyZXR1cm4gMDsKIAkvKiB3ZSdyZSBkb25lICovCiAJaWYgKGNudCAmJiAoKmNudCktLSA9PSAwKQpAQCAtNTU4LDE2ICs2MDQsMTcgQEAKIAogc3RhdGljIGlubGluZSBpbnQKIGVidF9jaGVja19lbnRyeShzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0gICBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgKmNudCwgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAorICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50ICpjbnQsCiAgICBzdHJ1Y3QgZWJ0X2NsX3N0YWNrICpjbF9zLCB1bnNpZ25lZCBpbnQgdWRjX2NudCkKIHsKIAlzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgZWJ0X3RhcmdldCAqdGFyZ2V0OwogCXVuc2lnbmVkIGludCBpLCBqLCBob29rID0gMCwgaG9va21hc2sgPSAwOworCXNpemVfdCBnYXAgPSBlLT5uZXh0X29mZnNldCAtIGUtPnRhcmdldF9vZmZzZXQ7CiAJaW50IHJldDsKIAogCS8qIGRvbid0IG1lc3Mgd2l0aCB0aGUgc3RydWN0IGVidF9lbnRyaWVzICovCi0JaWYgKChlLT5iaXRtYXNrICYgRUJUX0VOVFJZX09SX0VOVFJJRVMpID09IDApCisJaWYgKGUtPmJpdG1hc2sgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZS0+Yml0bWFzayAmIH5FQlRfRl9NQVNLKSB7CkBAIC01ODQsNyArNjMxLDcgQEAKIAl9CiAJLyogd2hhdCBob29rIGRvIHdlIGJlbG9uZyB0bz8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykgewotCQlpZiAoKHZhbGlkX2hvb2tzICYgKDEgPDwgaSkpID09IDApCisJCWlmICghbmV3aW5mby0+aG9va19lbnRyeVtpXSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoKGNoYXIgKiluZXdpbmZvLT5ob29rX2VudHJ5W2ldIDwgKGNoYXIgKillKQogCQkJaG9vayA9IGk7CkBAIC02MjUsOCArNjcyLDcgQEAKIAogCXQtPnUudGFyZ2V0ID0gdGFyZ2V0OwogCWlmICh0LT51LnRhcmdldCA9PSAmZWJ0X3N0YW5kYXJkX3RhcmdldCkgewotCQlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHNpemVvZihzdHJ1Y3QgZWJ0X3N0YW5kYXJkX3RhcmdldCkgPgotCQkgICBlLT5uZXh0X29mZnNldCkgeworCQlpZiAoZ2FwIDwgc2l6ZW9mKHN0cnVjdCBlYnRfc3RhbmRhcmRfdGFyZ2V0KSkgewogCQkJQlVHUFJJTlQoIlN0YW5kYXJkIHRhcmdldCBzaXplIHRvbyBiaWdcbiIpOwogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gY2xlYW51cF93YXRjaGVyczsKQEAgLTYzNyw4ICs2ODMsNyBAQAogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gY2xlYW51cF93YXRjaGVyczsKIAkJfQotCX0gZWxzZSBpZiAoKGUtPnRhcmdldF9vZmZzZXQgKyB0LT50YXJnZXRfc2l6ZSArCi0JICAgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0KSA+IGUtPm5leHRfb2Zmc2V0KSB8fAorCX0gZWxzZSBpZiAodC0+dGFyZ2V0X3NpemUgPiBnYXAgLSBzaXplb2Yoc3RydWN0IGVidF9lbnRyeV90YXJnZXQpIHx8CiAJICAgKHQtPnUudGFyZ2V0LT5jaGVjayAmJgogCSAgIHQtPnUudGFyZ2V0LT5jaGVjayhuYW1lLCBob29rbWFzaywgZSwgdC0+ZGF0YSwgdC0+dGFyZ2V0X3NpemUpICE9IDApKXsKIAkJbW9kdWxlX3B1dCh0LT51LnRhcmdldC0+bWUpOwpAQCAtNzA4LDcgKzc1Myw5IEBACiAJCQkJQlVHUFJJTlQoImxvb3BcbiIpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KLQkJCS8qIHRoaXMgY2FuJ3QgYmUgMCwgc28gdGhlIGFib3ZlIHRlc3QgaXMgY29ycmVjdCAqLworCQkJaWYgKGNsX3NbaV0uaG9va21hc2sgJiAoMSA8PCBob29rbnIpKQorCQkJCWdvdG8gbGV0c2NvbnRpbnVlOworCQkJLyogdGhpcyBjYW4ndCBiZSAwLCBzbyB0aGUgbG9vcCB0ZXN0IGlzIGNvcnJlY3QgKi8KIAkJCWNsX3NbaV0uY3MubiA9IHBvcyArIDE7CiAJCQlwb3MgPSAwOwogCQkJY2xfc1tpXS5jcy5lID0gKCh2b2lkICopZSArIGUtPm5leHRfb2Zmc2V0KTsKQEAgLTcyOCw0MiArNzc1LDM1IEBACiB9CiAKIC8qIGRvIHRoZSBwYXJzaW5nIG9mIHRoZSB0YWJsZS9jaGFpbnMvZW50cmllcy9tYXRjaGVzL3dhdGNoZXJzL3RhcmdldHMsIGhlaCAqLwotc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAotICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQorc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoY2hhciAqbmFtZSwgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQogewogCXVuc2lnbmVkIGludCBpLCBqLCBrLCB1ZGNfY250OwogCWludCByZXQ7CiAJc3RydWN0IGVidF9jbF9zdGFjayAqY2xfcyA9IE5VTEw7IC8qIHVzZWQgaW4gdGhlIGNoZWNraW5nIGZvciBjaGFpbiBsb29wcyAqLwogCiAJaSA9IDA7Ci0Jd2hpbGUgKGkgPCBORl9CUl9OVU1IT09LUyAmJiAhKHJlcGwtPnZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKQorCXdoaWxlIChpIDwgTkZfQlJfTlVNSE9PS1MgJiYgIW5ld2luZm8tPmhvb2tfZW50cnlbaV0pCiAJCWkrKzsKIAlpZiAoaSA9PSBORl9CUl9OVU1IT09LUykgewogCQlCVUdQUklOVCgiTm8gdmFsaWQgaG9va3Mgc3BlY2lmaWVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChyZXBsLT5ob29rX2VudHJ5W2ldICE9IChzdHJ1Y3QgZWJ0X2VudHJpZXMgKilyZXBsLT5lbnRyaWVzKSB7CisJaWYgKG5ld2luZm8tPmhvb2tfZW50cnlbaV0gIT0gKHN0cnVjdCBlYnRfZW50cmllcyAqKW5ld2luZm8tPmVudHJpZXMpIHsKIAkJQlVHUFJJTlQoIkNoYWlucyBkb24ndCBzdGFydCBhdCBiZWdpbm5pbmdcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogbWFrZSBzdXJlIGNoYWlucyBhcmUgb3JkZXJlZCBhZnRlciBlYWNoIG90aGVyIGluIHNhbWUgb3JkZXIKIAkgICBhcyB0aGVpciBjb3JyZXNwb25kaW5nIGhvb2tzICovCiAJZm9yIChqID0gaSArIDE7IGogPCBORl9CUl9OVU1IT09LUzsgaisrKSB7Ci0JCWlmICghKHJlcGwtPnZhbGlkX2hvb2tzICYgKDEgPDwgaikpKQorCQlpZiAoIW5ld2luZm8tPmhvb2tfZW50cnlbal0pCiAJCQljb250aW51ZTsKLQkJaWYgKCByZXBsLT5ob29rX2VudHJ5W2pdIDw9IHJlcGwtPmhvb2tfZW50cnlbaV0gKSB7CisJCWlmIChuZXdpbmZvLT5ob29rX2VudHJ5W2pdIDw9IG5ld2luZm8tPmhvb2tfZW50cnlbaV0pIHsKIAkJCUJVR1BSSU5UKCJIb29rIG9yZGVyIG11c3QgYmUgZm9sbG93ZWRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaSA9IGo7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IE5GX0JSX05VTUhPT0tTOyBpKyspCi0JCW5ld2luZm8tPmhvb2tfZW50cnlbaV0gPSBOVUxMOwotCi0JbmV3aW5mby0+ZW50cmllc19zaXplID0gcmVwbC0+ZW50cmllc19zaXplOwotCW5ld2luZm8tPm5lbnRyaWVzID0gcmVwbC0+bmVudHJpZXM7Ci0KIAkvKiBkbyBzb21lIGVhcmx5IGNoZWNraW5ncyBhbmQgaW5pdGlhbGl6ZSBzb21lIHRoaW5ncyAqLwogCWkgPSAwOyAvKiBob2xkcyB0aGUgZXhwZWN0ZWQgbnIuIG9mIGVudHJpZXMgZm9yIHRoZSBjaGFpbiAqLwogCWogPSAwOyAvKiBob2xkcyB0aGUgdXAgdG8gbm93IGNvdW50ZWQgZW50cmllcyBmb3IgdGhlIGNoYWluICovCkBAIC03NzEsOSArODExLDggQEAKIAkgICAgICAgICAgbmV3aW5mby0+bmVudHJpZXMgYWZ0ZXJ3YXJkcyAqLwogCXVkY19jbnQgPSAwOyAvKiB3aWxsIGhvbGQgdGhlIG5yLiBvZiB1c2VyIGRlZmluZWQgY2hhaW5zICh1ZGMpICovCiAJcmV0ID0gRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAotCSAgIGVidF9jaGVja19lbnRyeV9zaXplX2FuZF9ob29rcywgbmV3aW5mbywgcmVwbC0+ZW50cmllcywKLQkgICByZXBsLT5lbnRyaWVzICsgcmVwbC0+ZW50cmllc19zaXplLCByZXBsLT5ob29rX2VudHJ5LCAmaSwgJmosICZrLAotCSAgICZ1ZGNfY250LCByZXBsLT52YWxpZF9ob29rcyk7CisJICAgZWJ0X2NoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzLCBuZXdpbmZvLAorCSAgICZpLCAmaiwgJmssICZ1ZGNfY250KTsKIAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKQEAgLTc4OCwxNSArODI3LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogY2hlY2sgaWYgYWxsIHZhbGlkIGhvb2tzIGhhdmUgYSBjaGFpbiAqLwotCWZvciAoaSA9IDA7IGkgPCBORl9CUl9OVU1IT09LUzsgaSsrKSB7Ci0JCWlmIChuZXdpbmZvLT5ob29rX2VudHJ5W2ldID09IE5VTEwgJiYKLQkJICAgKHJlcGwtPnZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKSB7Ci0JCQlCVUdQUklOVCgiVmFsaWQgaG9vayB3aXRob3V0IGNoYWluXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCiAJLyogZ2V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgdWRjLCBwdXQgdGhlbSBpbiBhbiBhcnJheQogCSAgIHdoaWxlIHdlJ3JlIGF0IGl0LCBhbGxvY2F0ZSB0aGUgY2hhaW5zdGFjayAqLwogCWlmICh1ZGNfY250KSB7CkBAIC04MjQsOCArODU0LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQlpID0gMDsgLyogdGhlIGkndGggdWRjICovCiAJCUVCVF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXMsIG5ld2luZm8tPmVudHJpZXNfc2l6ZSwKLQkJICAgZWJ0X2dldF91ZGNfcG9zaXRpb25zLCBuZXdpbmZvLCByZXBsLT5ob29rX2VudHJ5LCAmaSwKLQkJICAgcmVwbC0+dmFsaWRfaG9va3MsIGNsX3MpOworCQkgICBlYnRfZ2V0X3VkY19wb3NpdGlvbnMsIG5ld2luZm8sICZpLCBjbF9zKTsKIAkJLyogc2FuaXR5IGNoZWNrICovCiAJCWlmIChpICE9IHVkY19jbnQpIHsKIAkJCUJVR1BSSU5UKCJpICE9IHVkY19jbnRcbiIpOwpAQCAtODM2LDcgKzg2NSw3IEBACiAKIAkvKiBDaGVjayBmb3IgbG9vcHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykKLQkJaWYgKHJlcGwtPnZhbGlkX2hvb2tzICYgKDEgPDwgaSkpCisJCWlmIChuZXdpbmZvLT5ob29rX2VudHJ5W2ldKQogCQkJaWYgKGNoZWNrX2NoYWlubG9vcHMobmV3aW5mby0+aG9va19lbnRyeVtpXSwKIAkJCSAgIGNsX3MsIHVkY19jbnQsIGksIG5ld2luZm8tPmVudHJpZXMpKSB7CiAJCQkJdmZyZWUoY2xfcyk7CkBAIC04NTYsOCArODg1LDcgQEAKIAkvKiB1c2VkIHRvIGtub3cgd2hhdCB3ZSBuZWVkIHRvIGNsZWFuIHVwIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nICovCiAJaSA9IDA7CiAJcmV0ID0gRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAotCSAgIGVidF9jaGVja19lbnRyeSwgbmV3aW5mbywgcmVwbC0+bmFtZSwgJmksIHJlcGwtPnZhbGlkX2hvb2tzLAotCSAgIGNsX3MsIHVkY19jbnQpOworCSAgIGVidF9jaGVja19lbnRyeSwgbmV3aW5mbywgbmFtZSwgJmksIGNsX3MsIHVkY19jbnQpOwogCWlmIChyZXQgIT0gMCkgewogCQlFQlRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzLCBuZXdpbmZvLT5lbnRyaWVzX3NpemUsCiAJCSAgIGVidF9jbGVhbnVwX2VudHJ5LCAmaSk7CkBAIC05NTQsNyArOTgyLDExIEBACiAKIAkvKiB0aGlzIGNhbiBnZXQgaW5pdGlhbGl6ZWQgYnkgdHJhbnNsYXRlX3RhYmxlKCkgKi8KIAluZXdpbmZvLT5jaGFpbnN0YWNrID0gTlVMTDsKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUoJnRtcCwgbmV3aW5mbyk7CisJcmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycygmdG1wLCBuZXdpbmZvKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZnJlZV9jb3VudGVyc3RtcDsKKworCXJldCA9IHRyYW5zbGF0ZV90YWJsZSh0bXAubmFtZSwgbmV3aW5mbyk7CiAKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9jb3VudGVyc3RtcDsKQEAgLTExMjUsMzUgKzExNTcsNDcgQEAKIHsKIAlzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm87CiAJc3RydWN0IGVidF90YWJsZSAqdDsKKwlzdHJ1Y3QgZWJ0X3JlcGxhY2Vfa2VybmVsICpyZXBsOwogCWludCByZXQsIGksIGNvdW50ZXJzaXplOworCXZvaWQgKnA7CiAKLQlpZiAoIXRhYmxlIHx8ICF0YWJsZS0+dGFibGUgfHwhdGFibGUtPnRhYmxlLT5lbnRyaWVzIHx8Ci0JICAgIHRhYmxlLT50YWJsZS0+ZW50cmllc19zaXplID09IDAgfHwKLQkgICAgdGFibGUtPnRhYmxlLT5jb3VudGVycyB8fCB0YWJsZS0+cHJpdmF0ZSkgeworCWlmICghdGFibGUgfHwgIShyZXBsID0gdGFibGUtPnRhYmxlKSB8fCAhcmVwbC0+ZW50cmllcyB8fAorCSAgICByZXBsLT5lbnRyaWVzX3NpemUgPT0gMCB8fAorCSAgICByZXBsLT5jb3VudGVycyB8fCB0YWJsZS0+cHJpdmF0ZSkgewogCQlCVUdQUklOVCgiQmFkIHRhYmxlIGRhdGEgZm9yIGVidF9yZWdpc3Rlcl90YWJsZSEhIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNvdW50ZXJzaXplID0gQ09VTlRFUl9PRkZTRVQodGFibGUtPnRhYmxlLT5uZW50cmllcykgKgorCWNvdW50ZXJzaXplID0gQ09VTlRFUl9PRkZTRVQocmVwbC0+bmVudHJpZXMpICoKIAkJCQkJKGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkrMSk7CiAJbmV3aW5mbyA9IHZtYWxsb2Moc2l6ZW9mKCpuZXdpbmZvKSArIGNvdW50ZXJzaXplKTsKIAlyZXQgPSAtRU5PTUVNOwogCWlmICghbmV3aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQluZXdpbmZvLT5lbnRyaWVzID0gdm1hbGxvYyh0YWJsZS0+dGFibGUtPmVudHJpZXNfc2l6ZSk7Ci0JaWYgKCEobmV3aW5mby0+ZW50cmllcykpCisJcCA9IHZtYWxsb2MocmVwbC0+ZW50cmllc19zaXplKTsKKwlpZiAoIXApCiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCi0JbWVtY3B5KG5ld2luZm8tPmVudHJpZXMsIHRhYmxlLT50YWJsZS0+ZW50cmllcywKLQkgICB0YWJsZS0+dGFibGUtPmVudHJpZXNfc2l6ZSk7CisJbWVtY3B5KHAsIHJlcGwtPmVudHJpZXMsIHJlcGwtPmVudHJpZXNfc2l6ZSk7CisJbmV3aW5mby0+ZW50cmllcyA9IHA7CisKKwluZXdpbmZvLT5lbnRyaWVzX3NpemUgPSByZXBsLT5lbnRyaWVzX3NpemU7CisJbmV3aW5mby0+bmVudHJpZXMgPSByZXBsLT5uZW50cmllczsKIAogCWlmIChjb3VudGVyc2l6ZSkKIAkJbWVtc2V0KG5ld2luZm8tPmNvdW50ZXJzLCAwLCBjb3VudGVyc2l6ZSk7CiAKIAkvKiBmaWxsIGluIG5ld2luZm8gYW5kIHBhcnNlIHRoZSBlbnRyaWVzICovCiAJbmV3aW5mby0+Y2hhaW5zdGFjayA9IE5VTEw7Ci0JcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRhYmxlLT50YWJsZSwgbmV3aW5mbyk7CisJZm9yIChpID0gMDsgaSA8IE5GX0JSX05VTUhPT0tTOyBpKyspIHsKKwkJaWYgKChyZXBsLT52YWxpZF9ob29rcyAmICgxIDw8IGkpKSA9PSAwKQorCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSA9IE5VTEw7CisJCWVsc2UKKwkJCW5ld2luZm8tPmhvb2tfZW50cnlbaV0gPSBwICsKKwkJCQkoKGNoYXIgKilyZXBsLT5ob29rX2VudHJ5W2ldIC0gcmVwbC0+ZW50cmllcyk7CisJfQorCXJldCA9IHRyYW5zbGF0ZV90YWJsZShyZXBsLT5uYW1lLCBuZXdpbmZvKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJQlVHUFJJTlQoIlRyYW5zbGF0ZV90YWJsZSBmYWlsZWRcbiIpOwogCQlnb3RvIGZyZWVfY2hhaW5zdGFjazsKQEAgLTEyNzcsMzMgKzEzMjEsMzMgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2VfbWF0Y2huYW1lKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sCi0gICBjaGFyICpiYXNlLCBjaGFyICp1YmFzZSkKKyAgIGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKLQljaGFyICpobHAgPSB1YmFzZSAtIGJhc2UgKyAoY2hhciAqKW07CisJY2hhciBfX3VzZXIgKmhscCA9IHViYXNlICsgKChjaGFyICopbSAtIGJhc2UpOwogCWlmIChjb3B5X3RvX3VzZXIoaGxwLCBtLT51Lm1hdGNoLT5uYW1lLCBFQlRfRlVOQ1RJT05fTUFYTkFNRUxFTikpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBlYnRfbWFrZV93YXRjaGVybmFtZShzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIgKncsCi0gICBjaGFyICpiYXNlLCBjaGFyICp1YmFzZSkKKyAgIGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKLQljaGFyICpobHAgPSB1YmFzZSAtIGJhc2UgKyAoY2hhciAqKXc7CisJY2hhciBfX3VzZXIgKmhscCA9IHViYXNlICsgKChjaGFyICopdyAtIGJhc2UpOwogCWlmIChjb3B5X3RvX3VzZXIoaGxwICwgdy0+dS53YXRjaGVyLT5uYW1lLCBFQlRfRlVOQ1RJT05fTUFYTkFNRUxFTikpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlYnRfbWFrZV9uYW1lcyhzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBjaGFyICpiYXNlLCBjaGFyICp1YmFzZSkKK3N0YXRpYyBpbmxpbmUgaW50IGVidF9tYWtlX25hbWVzKHN0cnVjdCBlYnRfZW50cnkgKmUsIGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKIAlpbnQgcmV0OwotCWNoYXIgKmhscDsKKwljaGFyIF9fdXNlciAqaGxwOwogCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OwogCi0JaWYgKChlLT5iaXRtYXNrICYgRUJUX0VOVFJZX09SX0VOVFJJRVMpID09IDApCisJaWYgKGUtPmJpdG1hc2sgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlobHAgPSB1YmFzZSAtIGJhc2UgKyAoY2hhciAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OworCWhscCA9IHViYXNlICsgKCgoY2hhciAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0KSAtIGJhc2UpOwogCXQgPSAoc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKikoKChjaGFyICopZSkgKyBlLT50YXJnZXRfb2Zmc2V0KTsKIAkKIAlyZXQgPSBFQlRfTUFUQ0hfSVRFUkFURShlLCBlYnRfbWFrZV9tYXRjaG5hbWUsIGJhc2UsIHViYXNlKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGUKaW5kZXggMTE5NTY4MC4uNzMyNzJkNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGUKKysrIGIvbmV0L2NvcmUvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDYgQEAKIAogb2JqLSQoQ09ORklHX1hGUk0pICs9IGZsb3cubwogb2JqLSQoQ09ORklHX1NZU0ZTKSArPSBuZXQtc3lzZnMubwotb2JqLSQoQ09ORklHX05FVF9ESVZFUlQpICs9IGR2Lm8KIG9iai0kKENPTkZJR19ORVRfUEtUR0VOKSArPSBwa3RnZW4ubwogb2JqLSQoQ09ORklHX1dJUkVMRVNTX0VYVCkgKz0gd2lyZWxlc3Mubwogb2JqLSQoQ09ORklHX05FVFBPTEwpICs9IG5ldHBvbGwubwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggZjU1OGM2MS4uNzk3ZmRkNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIAogc3RhdGljIGludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAogCQkJCSAgICAgIHU4IF9fdXNlciAqdG8sIGludCBsZW4sCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICpjc3VtcCkKKwkJCQkgICAgICBfX3dzdW0gKmNzdW1wKQogewogCWludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7CiAJaW50IHBvcyA9IDA7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCQllbmQgPSBzdGFydCArIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJaWYgKChjb3B5ID0gZW5kIC0gb2Zmc2V0KSA+IDApIHsKLQkJCXVuc2lnbmVkIGludCBjc3VtMjsKKwkJCV9fd3N1bSBjc3VtMjsKIAkJCWludCBlcnIgPSAwOwogCQkJdTggICp2YWRkcjsKIAkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKQEAgLTM4Niw3ICszODYsNyBAQAogCiAJCQllbmQgPSBzdGFydCArIGxpc3QtPmxlbjsKIAkJCWlmICgoY29weSA9IGVuZCAtIG9mZnNldCkgPiAwKSB7Ci0JCQkJdW5zaWduZWQgaW50IGNzdW0yID0gMDsKKwkJCQlfX3dzdW0gY3N1bTIgPSAwOwogCQkJCWlmIChjb3B5ID4gbGVuKQogCQkJCQljb3B5ID0gbGVuOwogCQkJCWlmIChza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbShsaXN0LApAQCAtNDExLDExICs0MTEsMTEgQEAKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAotdW5zaWduZWQgaW50IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCitfX3N1bTE2IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdW5zaWduZWQgaW50IHN1bTsKKwlfX3N1bTE2IHN1bTsKIAotCXN1bSA9ICh1MTYpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKTsKKwlzdW0gPSBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOwogCWlmIChsaWtlbHkoIXN1bSkpIHsKIAkJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSkKIAkJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKQEAgLTQ0MSw3ICs0NDEsNyBAQAogaW50IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBpbnQgaGxlbiwgc3RydWN0IGlvdmVjICppb3YpCiB7Ci0JdW5zaWduZWQgaW50IGNzdW07CisJX193c3VtIGNzdW07CiAJaW50IGNodW5rID0gc2tiLT5sZW4gLSBobGVuOwogCiAJLyogU2tpcCBmaWxsZWQgZWxlbWVudHMuCkBAIC00NjAsNyArNDYwLDcgQEAKIAkJaWYgKHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtKHNrYiwgaGxlbiwgaW92LT5pb3ZfYmFzZSwKIAkJCQkJICAgICAgIGNodW5rLCAmY3N1bSkpCiAJCQlnb3RvIGZhdWx0OwotCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChjc3VtKSkKKwkJaWYgKGNzdW1fZm9sZChjc3VtKSkKIAkJCWdvdG8gY3N1bV9lcnJvcjsKIAkJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSkKIAkJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggODFjNDI2YS4uNTlkMDU4YSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTk4LDcgKzk4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kaXZlcnQuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgpAQCAtMTE3MCw3ICsxMTY5LDcgQEAKICAqLwogaW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JdW5zaWduZWQgaW50IGNzdW07CisJX193c3VtIGNzdW07CiAJaW50IHJldCA9IDAsIG9mZnNldCA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7CiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpCkBAIC0xMTkyLDkgKzExOTEsOSBAQAogCiAJb2Zmc2V0ID0gc2tiLT50YWlsIC0gc2tiLT5oLnJhdzsKIAlCVUdfT04ob2Zmc2V0IDw9IDApOwotCUJVR19PTihza2ItPmNzdW0gKyAyID4gb2Zmc2V0KTsKKwlCVUdfT04oc2tiLT5jc3VtX29mZnNldCArIDIgPiBvZmZzZXQpOwogCi0JKih1MTYqKShza2ItPmgucmF3ICsgc2tiLT5jc3VtKSA9IGNzdW1fZm9sZChjc3VtKTsKKwkqKF9fc3VtMTYqKShza2ItPmgucmF3ICsgc2tiLT5jc3VtX29mZnNldCkgPSBjc3VtX2ZvbGQoY3N1bSk7CiAKIG91dF9zZXRfc3VtbWVkOgogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKQEAgLTEyMTYsNyArMTIxNSw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MgPSBFUlJfUFRSKC1FUFJPVE9OT1NVUFBPUlQpOwogCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGU7Ci0JaW50IHR5cGUgPSBza2ItPnByb3RvY29sOworCV9fYmUxNiB0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlpbnQgZXJyOwogCiAJQlVHX09OKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KTsKQEAgLTE3NjcsNyArMTc2Niw3IEBACiAJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwgKnB0X3ByZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OwogCWludCByZXQgPSBORVRfUlhfRFJPUDsKLQl1bnNpZ25lZCBzaG9ydCB0eXBlOworCV9fYmUxNiB0eXBlOwogCiAJLyogaWYgd2UndmUgZ290dGVuIGhlcmUgdGhyb3VnaCBOQVBJLCBjaGVjayBuZXRwb2xsICovCiAJaWYgKHNrYi0+ZGV2LT5wb2xsICYmIG5ldHBvbGxfcngoc2tiKSkKQEAgLTE4MjcsOCArMTgyNiw2IEBACiBuY2xzOgogI2VuZGlmCiAKLQloYW5kbGVfZGl2ZXJ0ZXIoc2tiKTsKLQogCWlmIChoYW5kbGVfYnJpZGdlKCZza2IsICZwdF9wcmV2LCAmcmV0LCBvcmlnX2RldikpCiAJCWdvdG8gb3V0OwogCkBAIC0yODk4LDEwICsyODk1LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5pbmdyZXNzX2xvY2spOwogI2VuZGlmCiAKLQlyZXQgPSBhbGxvY19kaXZlcnRfYmxrKGRldik7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KIAlkZXYtPmlmbGluayA9IC0xOwogCiAJLyogSW5pdCwgaWYgdGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgKi8KQEAgLTI5MTAsMTMgKzI5MDMsMTMgQEAKIAkJaWYgKHJldCkgewogCQkJaWYgKHJldCA+IDApCiAJCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gb3V0X2VycjsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQogIAogCWlmICghZGV2X3ZhbGlkX25hbWUoZGV2LT5uYW1lKSkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gb3V0OwogCX0KIAogCWRldi0+aWZpbmRleCA9IGRldl9uZXdfaW5kZXgoKTsKQEAgLTI5MzAsNyArMjkyMyw3IEBACiAJCQk9IGhsaXN0X2VudHJ5KHAsIHN0cnVjdCBuZXRfZGV2aWNlLCBuYW1lX2hsaXN0KTsKIAkJaWYgKCFzdHJuY21wKGQtPm5hbWUsIGRldi0+bmFtZSwgSUZOQU1TSVopKSB7CiAJCQlyZXQgPSAtRUVYSVNUOwotIAkJCWdvdG8gb3V0X2VycjsKKyAJCQlnb3RvIG91dDsKIAkJfQogIAl9CiAKQEAgLTI5NzQsNyArMjk2Nyw3IEBACiAKIAlyZXQgPSBuZXRkZXZfcmVnaXN0ZXJfc3lzZnMoZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gb3V0OwogCWRldi0+cmVnX3N0YXRlID0gTkVUUkVHX1JFR0lTVEVSRUQ7CiAKIAkvKgpAQCAtMzAwMSw5ICsyOTk0LDYgQEAKIAogb3V0OgogCXJldHVybiByZXQ7Ci1vdXRfZXJyOgotCWZyZWVfZGl2ZXJ0X2JsayhkZXYpOwotCWdvdG8gb3V0OwogfQogCiAvKioKQEAgLTMwMzUsMTUgKzMwMjUsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCQotCS8qCi0JICogQmFjayBjb21wYXRpYmlsaXR5IGhvb2suIEtpbGwgdGhpcyBvbmUgaW4gMi41Ci0JICovCi0JaWYgKGRldi0+bmFtZVswXSA9PSAwIHx8IGRldi0+bmFtZVswXSA9PSAnICcpIHsKLQkJZXJyID0gZGV2X2FsbG9jX25hbWUoZGV2LCAiZXRoJWQiKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIG91dDoKIAlydG5sX3VubG9jaygpOwpAQCAtMzMyOSw4ICszMzEwLDYgQEAKIAkvKiBOb3RpZmllciBjaGFpbiBNVVNUIGRldGFjaCB1cyBmcm9tIG1hc3RlciBkZXZpY2UuICovCiAJQlVHX1RSQVAoIWRldi0+bWFzdGVyKTsKIAotCWZyZWVfZGl2ZXJ0X2JsayhkZXYpOwotCiAJLyogRmluaXNoIHByb2Nlc3NpbmcgdW5yZWdpc3RlciBhZnRlciB1bmxvY2sgKi8KIAluZXRfc2V0X3RvZG8oZGV2KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHYuYyBiL25ldC9jb3JlL2R2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZWU3N2YuLjAwMDAwMDAKLS0tIGEvbmV0L2NvcmUvZHYuYworKysgL2Rldi9udWxsCkBAIC0xLDU0NiArMCwwIEBACi0vKgotICogSU5FVAkJQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFRDUC9JUCBwcm90b2NvbCBzdWl0ZSBmb3IgdGhlIExJTlVYCi0gKgkJb3BlcmF0aW5nIHN5c3RlbS4gIElORVQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlICBCU0QgU29ja2V0Ci0gKgkJaW50ZXJmYWNlIGFzIHRoZSBtZWFucyBvZiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuCi0gKgotICoJCUdlbmVyaWMgZnJhbWUgZGl2ZXJzaW9uCi0gKgotICogQXV0aG9yczoJCi0gKiAJCUJlbm9pdCBMT0NIRVI6CWluaXRpYWwgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciBldGhlcm5ldAotICogCQlEYXZlIE1pbGxlcjoJaW1wcm92ZW1lbnQgb24gdGhlIGNvZGUgKGNvcnJlY3RuZXNzLCBwZXJmb3JtYW5jZSBhbmQgc291cmNlIGZpbGVzKQotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bGludXgvdWRwLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bmV0L2RzdC5oPgotI2luY2x1ZGUgPG5ldC9hcnAuaD4KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPG5ldC9pcHY2Lmg+Ci0jaW5jbHVkZSA8bmV0L2lwLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8bGludXgvZGl2ZXJ0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgotCi1jb25zdCBjaGFyIHN5c2N0bF9kaXZlcnRfdmVyc2lvblszMl09IjAuNDYiOwkvKiBDdXJyZW50IHZlcnNpb24gKi8KLQotc3RhdGljIGludCBfX2luaXQgZHZfaW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotbW9kdWxlX2luaXQoZHZfaW5pdCk7Ci0KLS8qCi0gKiBBbGxvY2F0ZSBhIGRpdmVydF9ibGsgZm9yIGEgZGV2aWNlLiBUaGlzIG11c3QgYmUgYW4gZXRoZXJuZXQgbmljLgotICovCi1pbnQgYWxsb2NfZGl2ZXJ0X2JsayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWludCBhbGxvY19zaXplID0gKHNpemVvZihzdHJ1Y3QgZGl2ZXJ0X2JsaykgKyAzKSAmIH4zOwotCi0JZGV2LT5kaXZlcnQgPSBOVUxMOwotCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7Ci0JCWRldi0+ZGl2ZXJ0ID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGRldi0+ZGl2ZXJ0ID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gImRpdmVydDogdW5hYmxlIHRvIGFsbG9jYXRlIGRpdmVydF9ibGsgZm9yICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlkZXZfaG9sZChkZXYpOwotCX0KLQotCXJldHVybiAwOwotfSAKLQotLyoKLSAqIEZyZWUgYSBkaXZlcnRfYmxrIGFsbG9jYXRlZCBieSB0aGUgYWJvdmUgZnVuY3Rpb24sIGlmIGl0IHdhcyAKLSAqIGFsbG9jYXRlZCBvbiB0aGF0IGRldmljZS4KLSAqLwotdm9pZCBmcmVlX2RpdmVydF9ibGsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpZiAoZGV2LT5kaXZlcnQpIHsKLQkJa2ZyZWUoZGV2LT5kaXZlcnQpOwotCQlkZXYtPmRpdmVydD1OVUxMOwotCQlkZXZfcHV0KGRldik7Ci0JfQotfQotCi0vKgotICogQWRkcyBhIHRjcC91ZHAgKHNvdXJjZSBvciBkZXN0KSBwb3J0IHRvIGFuIGFycmF5Ci0gKi8KLXN0YXRpYyBpbnQgYWRkX3BvcnQodTE2IHBvcnRzW10sIHUxNiBwb3J0KQotewotCWludCBpOwotCi0JaWYgKHBvcnQgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBTdG9yaW5nIGRpcmVjdGx5IGluIG5ldHdvcmsgZm9ybWF0IGZvciBwZXJmb3JtYW5jZSwKLQkgKiB0aGFua3MgRGF2ZSA6KQotCSAqLwotCXBvcnQgPSBodG9ucyhwb3J0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfRElWRVJUX1BPUlRTOyBpKyspIHsKLQkJaWYgKHBvcnRzW2ldID09IHBvcnQpCi0JCQlyZXR1cm4gLUVBTFJFQURZOwotCX0KLQkKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RJVkVSVF9QT1JUUzsgaSsrKSB7Ci0JCWlmIChwb3J0c1tpXSA9PSAwKSB7Ci0JCQlwb3J0c1tpXSA9IHBvcnQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXJldHVybiAtRU5PQlVGUzsKLX0KLQotLyoKLSAqIFJlbW92ZXMgYSBwb3J0IGZyb20gYW4gYXJyYXkgdGNwL3VkcCAoc291cmNlIG9yIGRlc3QpCi0gKi8KLXN0YXRpYyBpbnQgcmVtb3ZlX3BvcnQodTE2IHBvcnRzW10sIHUxNiBwb3J0KQotewotCWludCBpOwotCi0JaWYgKHBvcnQgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCi0JLyogU3RvcmluZyBkaXJlY3RseSBpbiBuZXR3b3JrIGZvcm1hdCBmb3IgcGVyZm9ybWFuY2UsCi0JICogdGhhbmtzIERhdmUgIQotCSAqLwotCXBvcnQgPSBodG9ucyhwb3J0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfRElWRVJUX1BPUlRTOyBpKyspIHsKLQkJaWYgKHBvcnRzW2ldID09IHBvcnQpIHsKLQkJCXBvcnRzW2ldID0gMDsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qIFNvbWUgYmFzaWMgc2FuaXR5IGNoZWNrcyBvbiB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBkaXZlcnRfaW9jdGwoKSAqLwotc3RhdGljIGludCBjaGVja19hcmdzKHN0cnVjdCBkaXZlcnRfY2YgKmRpdl9jZiwgc3RydWN0IG5ldF9kZXZpY2UgKipkZXYpCi17Ci0JY2hhciBkZXZuYW1lWzMyXTsKLQlpbnQgcmV0OwotCi0JaWYgKGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkKLQkvKiBHRVRWRVJTSU9OOiBhbGwgb3RoZXIgYXJncyBhcmUgdW51c2VkICovCi0JaWYgKGRpdl9jZi0+Y21kID09IERJVkNNRF9HRVRWRVJTSU9OKQotCQlyZXR1cm4gMDsKLQkKLQkvKiBOZXR3b3JrIGRldmljZSBpbmRleCBzaG91bGQgcmVhc29uYWJseSBiZSBiZXR3ZWVuIDAgYW5kIDEwMDAgOikgKi8KLQlpZiAoZGl2X2NmLT5kZXZfaW5kZXggPCAwIHx8IGRpdl9jZi0+ZGV2X2luZGV4ID4gMTAwMCkgCi0JCXJldHVybiAtRUlOVkFMOwotCQkJCi0JLyogTGV0J3MgdHJ5IHRvIGZpbmQgdGhlIGlmbmFtZSAqLwotCXNwcmludGYoZGV2bmFtZSwgImV0aCVkIiwgZGl2X2NmLT5kZXZfaW5kZXgpOwotCSpkZXYgPSBkZXZfZ2V0X2J5X25hbWUoZGV2bmFtZSk7Ci0JCi0JLyogZGV2IHNob3VsZCBOT1QgYmUgbnVsbCAqLwotCWlmICgqZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0ID0gMDsKLQotCS8qIHVzZXIgaXNzdWluZyB0aGUgaW9jdGwgbXVzdCBiZSBhIHN1cGVyIG9uZSA6KSAqLwotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIERldmljZSBtdXN0IGhhdmUgYSBkaXZlcnRfYmxrIG1lbWJlciBOT1QgbnVsbCAqLwotCWlmICgoKmRldiktPmRpdmVydCA9PSBOVUxMKQotCQlyZXQgPSAtRUlOVkFMOwotb3V0OgotCWRldl9wdXQoKmRldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIGNvbnRyb2wgZnVuY3Rpb24gb2YgdGhlIGRpdmVydGVyCi0gKi8KLSNpZiAwCi0jZGVmaW5lCURWREJHKGEpCVwKLQlwcmludGsoS0VSTl9ERUJVRyAiZGl2ZXJ0X2lvY3RsKCkgbGluZSAlZCAlc1xuIiwgX19MSU5FX18sIChhKSkKLSNlbHNlCi0jZGVmaW5lCURWREJHKGEpCi0jZW5kaWYKLQotaW50IGRpdmVydF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZGl2ZXJ0X2NmIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBkaXZlcnRfY2YJZGl2X2NmOwotCXN0cnVjdCBkaXZlcnRfYmxrCSpkaXZfYmxrOwotCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7Ci0JaW50CQkJcmV0OwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NHSUZESVZFUlQ6Ci0JCURWREJHKCJTSU9DR0lGRElWRVJULCBjb3B5X2Zyb21fdXNlciIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJmRpdl9jZiwgYXJnLCBzaXplb2Yoc3RydWN0IGRpdmVydF9jZikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCURWREJHKCJiZWZvcmUgY2hlY2tfYXJncyIpOwotCQlyZXQgPSBjaGVja19hcmdzKCZkaXZfY2YsICZkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQkJRFZEQkcoImFmdGVyIGNoZWNrYXJncyIpOwotCQlkaXZfYmxrID0gZGV2LT5kaXZlcnQ7Ci0JCQkKLQkJRFZEQkcoImJlZnJlIHN3aXRjaCgpIik7Ci0JCXN3aXRjaCAoZGl2X2NmLmNtZCkgewotCQljYXNlIERJVkNNRF9HRVRTVEFUVVM6Ci0JCQkvKiBOb3csIGp1c3QgZ2l2ZSB0aGUgdXNlciB0aGUgcmF3IGRpdmVydCBibG9jawotCQkJICogZm9yIGhpbSB0byBwbGF5IHdpdGggOikKLQkJCSAqLwotCQkJaWYgKGNvcHlfdG9fdXNlcihkaXZfY2YuYXJnMS5wdHIsIGRldi0+ZGl2ZXJ0LAotCQkJCQkgc2l6ZW9mKHN0cnVjdCBkaXZlcnRfYmxrKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlicmVhazsKLQotCQljYXNlIERJVkNNRF9HRVRWRVJTSU9OOgotCQkJRFZEQkcoIkdFVFZFUlNJT046IGNoZWNraW5nIHB0ciIpOwotCQkJaWYgKGRpdl9jZi5hcmcxLnB0ciA9PSBOVUxMKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJRFZEQkcoIkdFVFZFUlNJT046IGNvcHlpbmcgZGF0YSB0byB1c2VybGFuZCIpOwotCQkJaWYgKGNvcHlfdG9fdXNlcihkaXZfY2YuYXJnMS5wdHIsCi0JCQkJCSBzeXNjdGxfZGl2ZXJ0X3ZlcnNpb24sIDMyKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCURWREJHKCJHRVRWRVJTSU9OOiBkYXRhIGNvcGllZCIpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFNJT0NTSUZESVZFUlQ6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmZGl2X2NmLCBhcmcsIHNpemVvZihzdHJ1Y3QgZGl2ZXJ0X2NmKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlyZXQgPSBjaGVja19hcmdzKCZkaXZfY2YsICZkZXYpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlkaXZfYmxrID0gZGV2LT5kaXZlcnQ7Ci0KLQkJc3dpdGNoKGRpdl9jZi5jbWQpIHsKLQkJY2FzZSBESVZDTURfUkVTRVQ6Ci0JCQlkaXZfYmxrLT5kaXZlcnQgPSAwOwotCQkJZGl2X2Jsay0+cHJvdG9zID0gRElWRVJUX1BST1RPX05PTkU7Ci0JCQltZW1zZXQoZGl2X2Jsay0+dGNwX2RzdCwgMCwKLQkJCSAgICAgICBNQVhfRElWRVJUX1BPUlRTICogc2l6ZW9mKHUxNikpOwotCQkJbWVtc2V0KGRpdl9ibGstPnRjcF9zcmMsIDAsCi0JCQkgICAgICAgTUFYX0RJVkVSVF9QT1JUUyAqIHNpemVvZih1MTYpKTsKLQkJCW1lbXNldChkaXZfYmxrLT51ZHBfZHN0LCAwLAotCQkJICAgICAgIE1BWF9ESVZFUlRfUE9SVFMgKiBzaXplb2YodTE2KSk7Ci0JCQltZW1zZXQoZGl2X2Jsay0+dWRwX3NyYywgMCwKLQkJCSAgICAgICBNQVhfRElWRVJUX1BPUlRTICogc2l6ZW9mKHUxNikpOwotCQkJcmV0dXJuIDA7Ci0JCQkJCi0JCWNhc2UgRElWQ01EX0RJVkVSVDoKLQkJCXN3aXRjaChkaXZfY2YuYXJnMS5pbnQzMikgewotCQkJY2FzZSBESVZBUkcxX0VOQUJMRToKLQkJCQlpZiAoZGl2X2Jsay0+ZGl2ZXJ0KQotCQkJCQlyZXR1cm4gLUVBTFJFQURZOwotCQkJCWRpdl9ibGstPmRpdmVydCA9IDE7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgRElWQVJHMV9ESVNBQkxFOgotCQkJCWlmICghZGl2X2Jsay0+ZGl2ZXJ0KQotCQkJCQlyZXR1cm4gLUVBTFJFQURZOwotCQkJCWRpdl9ibGstPmRpdmVydCA9IDA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgRElWQ01EX0lQOgotCQkJc3dpdGNoKGRpdl9jZi5hcmcxLmludDMyKSB7Ci0JCQljYXNlIERJVkFSRzFfRU5BQkxFOgotCQkJCWlmIChkaXZfYmxrLT5wcm90b3MgJiBESVZFUlRfUFJPVE9fSVApCi0JCQkJCXJldHVybiAtRUFMUkVBRFk7Ci0JCQkJZGl2X2Jsay0+cHJvdG9zIHw9IERJVkVSVF9QUk9UT19JUDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBESVZBUkcxX0RJU0FCTEU6Ci0JCQkJaWYgKCEoZGl2X2Jsay0+cHJvdG9zICYgRElWRVJUX1BST1RPX0lQKSkKLQkJCQkJcmV0dXJuIC1FQUxSRUFEWTsKLQkJCQlkaXZfYmxrLT5wcm90b3MgJj0gfkRJVkVSVF9QUk9UT19JUDsKLQkJCQlicmVhazsKLQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBESVZDTURfVENQOgotCQkJc3dpdGNoKGRpdl9jZi5hcmcxLmludDMyKSB7Ci0JCQljYXNlIERJVkFSRzFfRU5BQkxFOgotCQkJCWlmIChkaXZfYmxrLT5wcm90b3MgJiBESVZFUlRfUFJPVE9fVENQKQotCQkJCQlyZXR1cm4gLUVBTFJFQURZOwotCQkJCWRpdl9ibGstPnByb3RvcyB8PSBESVZFUlRfUFJPVE9fVENQOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIERJVkFSRzFfRElTQUJMRToKLQkJCQlpZiAoIShkaXZfYmxrLT5wcm90b3MgJiBESVZFUlRfUFJPVE9fVENQKSkKLQkJCQkJcmV0dXJuIC1FQUxSRUFEWTsKLQkJCQlkaXZfYmxrLT5wcm90b3MgJj0gfkRJVkVSVF9QUk9UT19UQ1A7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgRElWQ01EX1RDUERTVDoKLQkJCXN3aXRjaChkaXZfY2YuYXJnMS5pbnQzMikgewotCQkJY2FzZSBESVZBUkcxX0FERDoKLQkJCQlyZXR1cm4gYWRkX3BvcnQoZGl2X2Jsay0+dGNwX2RzdCwKLQkJCQkJCWRpdl9jZi5hcmcyLnVpbnQxNik7Ci0JCQkJCi0JCQljYXNlIERJVkFSRzFfUkVNT1ZFOgotCQkJCXJldHVybiByZW1vdmVfcG9ydChkaXZfYmxrLT50Y3BfZHN0LAotCQkJCQkJICAgZGl2X2NmLmFyZzIudWludDE2KTsKLQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBESVZDTURfVENQU1JDOgotCQkJc3dpdGNoKGRpdl9jZi5hcmcxLmludDMyKSB7Ci0JCQljYXNlIERJVkFSRzFfQUREOgotCQkJCXJldHVybiBhZGRfcG9ydChkaXZfYmxrLT50Y3Bfc3JjLAotCQkJCQkJZGl2X2NmLmFyZzIudWludDE2KTsKLQotCQkJY2FzZSBESVZBUkcxX1JFTU9WRToKLQkJCQlyZXR1cm4gcmVtb3ZlX3BvcnQoZGl2X2Jsay0+dGNwX3NyYywKLQkJCQkJCSAgIGRpdl9jZi5hcmcyLnVpbnQxNik7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgRElWQ01EX1VEUDoKLQkJCXN3aXRjaChkaXZfY2YuYXJnMS5pbnQzMikgewotCQkJY2FzZSBESVZBUkcxX0VOQUJMRToKLQkJCQlpZiAoZGl2X2Jsay0+cHJvdG9zICYgRElWRVJUX1BST1RPX1VEUCkKLQkJCQkJcmV0dXJuIC1FQUxSRUFEWTsKLQkJCQlkaXZfYmxrLT5wcm90b3MgfD0gRElWRVJUX1BST1RPX1VEUDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBESVZBUkcxX0RJU0FCTEU6Ci0JCQkJaWYgKCEoZGl2X2Jsay0+cHJvdG9zICYgRElWRVJUX1BST1RPX1VEUCkpCi0JCQkJCXJldHVybiAtRUFMUkVBRFk7Ci0JCQkJZGl2X2Jsay0+cHJvdG9zICY9IH5ESVZFUlRfUFJPVE9fVURQOwotCQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIERJVkNNRF9VRFBEU1Q6Ci0JCQlzd2l0Y2goZGl2X2NmLmFyZzEuaW50MzIpIHsKLQkJCWNhc2UgRElWQVJHMV9BREQ6Ci0JCQkJcmV0dXJuIGFkZF9wb3J0KGRpdl9ibGstPnVkcF9kc3QsCi0JCQkJCQlkaXZfY2YuYXJnMi51aW50MTYpOwotCi0JCQljYXNlIERJVkFSRzFfUkVNT1ZFOgotCQkJCXJldHVybiByZW1vdmVfcG9ydChkaXZfYmxrLT51ZHBfZHN0LAotCQkJCQkJICAgZGl2X2NmLmFyZzIudWludDE2KTsKLQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBESVZDTURfVURQU1JDOgotCQkJc3dpdGNoKGRpdl9jZi5hcmcxLmludDMyKSB7Ci0JCQljYXNlIERJVkFSRzFfQUREOgotCQkJCXJldHVybiBhZGRfcG9ydChkaXZfYmxrLT51ZHBfc3JjLAotCQkJCQkJZGl2X2NmLmFyZzIudWludDE2KTsKLQotCQkJY2FzZSBESVZBUkcxX1JFTU9WRToKLQkJCQlyZXR1cm4gcmVtb3ZlX3BvcnQoZGl2X2Jsay0+dWRwX3NyYywKLQkJCQkJCSAgIGRpdl9jZi5hcmcyLnVpbnQxNik7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgRElWQ01EX0lDTVA6Ci0JCQlzd2l0Y2goZGl2X2NmLmFyZzEuaW50MzIpIHsKLQkJCWNhc2UgRElWQVJHMV9FTkFCTEU6Ci0JCQkJaWYgKGRpdl9ibGstPnByb3RvcyAmIERJVkVSVF9QUk9UT19JQ01QKQotCQkJCQlyZXR1cm4gLUVBTFJFQURZOwotCQkJCWRpdl9ibGstPnByb3RvcyB8PSBESVZFUlRfUFJPVE9fSUNNUDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBESVZBUkcxX0RJU0FCTEU6Ci0JCQkJaWYgKCEoZGl2X2Jsay0+cHJvdG9zICYgRElWRVJUX1BST1RPX0lDTVApKQotCQkJCQlyZXR1cm4gLUVBTFJFQURZOwotCQkJCWRpdl9ibGstPnByb3RvcyAmPSB+RElWRVJUX1BST1RPX0lDTVA7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIENoZWNrIGlmIHBhY2tldCBzaG91bGQgaGF2ZSBpdHMgZGVzdCBtYWMgYWRkcmVzcyBzZXQgdG8gdGhlIGJveCBpdHNlbGYKLSAqIGZvciBkaXZlcnNpb24KLSAqLwotCi0jZGVmaW5lCUVUSF9ESVZFUlRfRlJBTUUoc2tiKSBcCi0JbWVtY3B5KGV0aF9oZHIoc2tiKSwgc2tiLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7IFwKLQlza2ItPnBrdF90eXBlPVBBQ0tFVF9IT1NUCi0JCQotdm9pZCBkaXZlcnRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgZXRoaGRyCQkJKmV0aCA9IGV0aF9oZHIoc2tiKTsKLQlzdHJ1Y3QgaXBoZHIJCQkqaXBoOwotCXN0cnVjdCB0Y3BoZHIJCQkqdGNwaDsKLQlzdHJ1Y3QgdWRwaGRyCQkJKnVkcGg7Ci0Jc3RydWN0IGRpdmVydF9ibGsJCSpkaXZlcnQgPSBza2ItPmRldi0+ZGl2ZXJ0OwotCWludAkJCQlpLCBzcmMsIGRzdDsKLQl1bnNpZ25lZCBjaGFyCQkJKnNrYl9kYXRhX2VuZCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOwotCi0JLyogUGFja2V0IGlzIGFscmVhZHkgYWltZWQgYXQgdXMsIHJldHVybiAqLwotCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKGV0aC0+aF9kZXN0LCBza2ItPmRldi0+ZGV2X2FkZHIpKQotCQlyZXR1cm47Ci0JCi0JLyogcHJvdG8gaXMgbm90IElQLCBkbyBub3RoaW5nICovCi0JaWYgKGV0aC0+aF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpCi0JCXJldHVybjsKLQkKLQkvKiBEaXZlcnQgYWxsIElQIGZyYW1lcyA/ICovCi0JaWYgKGRpdmVydC0+cHJvdG9zICYgRElWRVJUX1BST1RPX0lQKSB7Ci0JCUVUSF9ESVZFUlRfRlJBTUUoc2tiKTsKLQkJcmV0dXJuOwotCX0KLQkKLQkvKiBDaGVjayBmb3IgcG9zc2libGUgKG1hbGljaW91c2x5KSBtYWxmb3JtZWQgSVAgZnJhbWUgKHRoYW5rcyBEYXZlKSAqLwotCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiLT5kYXRhOwotCWlmICgoKGlwaC0+aWhsPDwyKSsodW5zaWduZWQgY2hhciopKGlwaCkpID49IHNrYl9kYXRhX2VuZCkgewotCQlwcmludGsoS0VSTl9JTkZPICJkaXZlcnQ6IG1hbGZvcm1lZCBJUCBwYWNrZXQgIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzd2l0Y2ggKGlwaC0+cHJvdG9jb2wpIHsKLQkvKiBEaXZlcnQgYWxsIElDTVAgZnJhbWVzID8gKi8KLQljYXNlIElQUFJPVE9fSUNNUDoKLQkJaWYgKGRpdmVydC0+cHJvdG9zICYgRElWRVJUX1BST1RPX0lDTVApIHsKLQkJCUVUSF9ESVZFUlRfRlJBTUUoc2tiKTsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLQotCS8qIERpdmVydCBhbGwgVENQIGZyYW1lcyA/ICovCi0JY2FzZSBJUFBST1RPX1RDUDoKLQkJaWYgKGRpdmVydC0+cHJvdG9zICYgRElWRVJUX1BST1RPX1RDUCkgewotCQkJRVRIX0RJVkVSVF9GUkFNRShza2IpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyogQ2hlY2sgZm9yIHBvc3NpYmxlIChtYWxpY2lvdXNseSkgbWFsZm9ybWVkIElQCi0JCSAqIGZyYW1lICh0aGFueCBEYXZlKQotCQkgKi8KLQkJdGNwaCA9IChzdHJ1Y3QgdGNwaGRyICopCi0JCQkoKCh1bnNpZ25lZCBjaGFyICopaXBoKSArIChpcGgtPmlobDw8MikpOwotCQlpZiAoKCh1bnNpZ25lZCBjaGFyICopKHRjcGgrMSkpID49IHNrYl9kYXRhX2VuZCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiZGl2ZXJ0OiBtYWxmb3JtZWQgVENQIHBhY2tldCAhXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIERpdmVydCBzb21lIHRjcCBkc3Qvc3JjIHBvcnRzIG9ubHkgPyovCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfRElWRVJUX1BPUlRTOyBpKyspIHsKLQkJCWRzdCA9IGRpdmVydC0+dGNwX2RzdFtpXTsKLQkJCXNyYyA9IGRpdmVydC0+dGNwX3NyY1tpXTsKLQkJCWlmICgoZHN0ICYmIGRzdCA9PSB0Y3BoLT5kZXN0KSB8fAotCQkJICAgIChzcmMgJiYgc3JjID09IHRjcGgtPnNvdXJjZSkpIHsKLQkJCQlFVEhfRElWRVJUX0ZSQU1FKHNrYik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCi0JLyogRGl2ZXJ0IGFsbCBVRFAgZnJhbWVzID8gKi8KLQljYXNlIElQUFJPVE9fVURQOgotCQlpZiAoZGl2ZXJ0LT5wcm90b3MgJiBESVZFUlRfUFJPVE9fVURQKSB7Ci0JCQlFVEhfRElWRVJUX0ZSQU1FKHNrYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvKiBDaGVjayBmb3IgcG9zc2libGUgKG1hbGljaW91c2x5KSBtYWxmb3JtZWQgSVAKLQkJICogcGFja2V0ICh0aGFua3MgRGF2ZSkKLQkJICovCi0JCXVkcGggPSAoc3RydWN0IHVkcGhkciAqKQotCQkJKCgodW5zaWduZWQgY2hhciAqKWlwaCkgKyAoaXBoLT5paGw8PDIpKTsKLQkJaWYgKCgodW5zaWduZWQgY2hhciAqKSh1ZHBoKzEpKSA+PSBza2JfZGF0YV9lbmQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiZGl2ZXJ0OiBtYWxmb3JtZWQgVURQIHBhY2tldCAhXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIERpdmVydCBzb21lIHVkcCBkc3Qvc3JjIHBvcnRzIG9ubHkgPyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RJVkVSVF9QT1JUUzsgaSsrKSB7Ci0JCQlkc3QgPSBkaXZlcnQtPnVkcF9kc3RbaV07Ci0JCQlzcmMgPSBkaXZlcnQtPnVkcF9zcmNbaV07Ci0JCQlpZiAoKGRzdCAmJiBkc3QgPT0gdWRwaC0+ZGVzdCkgfHwKLQkJCSAgICAoc3JjICYmIHNyYyA9PSB1ZHBoLT5zb3VyY2UpKSB7Ci0JCQkJRVRIX0RJVkVSVF9GUkFNRShza2IpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci19CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDZiMGU2M2MuLjFkZjZjZDQ1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWJfcnVsZXMuYworKysgYi9uZXQvY29yZS9maWJfcnVsZXMuYwpAQCAtMTA3LDYgKzEwNywyMiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChmaWJfcnVsZXNfdW5yZWdpc3Rlcik7CiAKK3N0YXRpYyBpbnQgZmliX3J1bGVfbWF0Y2goc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmliX3J1bGVzX29wcyAqb3BzLAorCQkJICBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmxhZ3MpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAocnVsZS0+aWZpbmRleCAmJiAocnVsZS0+aWZpbmRleCAhPSBmbC0+aWlmKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoKHJ1bGUtPm1hcmsgXiBmbC0+bWFyaykgJiBydWxlLT5tYXJrX21hc2spCisJCWdvdG8gb3V0OworCisJcmV0ID0gb3BzLT5tYXRjaChydWxlLCBmbCwgZmxhZ3MpOworb3V0OgorCXJldHVybiAocnVsZS0+ZmxhZ3MgJiBGSUJfUlVMRV9JTlZFUlQpID8gIXJldCA6IHJldDsKK30KKwogaW50IGZpYl9ydWxlc19sb29rdXAoc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcywgc3RydWN0IGZsb3dpICpmbCwKIAkJICAgICBpbnQgZmxhZ3MsIHN0cnVjdCBmaWJfbG9va3VwX2FyZyAqYXJnKQogewpAQCAtMTE2LDEwICsxMzIsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJ1bGUsIG9wcy0+cnVsZXNfbGlzdCwgbGlzdCkgewotCQlpZiAocnVsZS0+aWZpbmRleCAmJiAocnVsZS0+aWZpbmRleCAhPSBmbC0+aWlmKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghb3BzLT5tYXRjaChydWxlLCBmbCwgZmxhZ3MpKQorCQlpZiAoIWZpYl9ydWxlX21hdGNoKHJ1bGUsIG9wcywgZmwsIGZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWVyciA9IG9wcy0+YWN0aW9uKHJ1bGUsIGZsLCBmbGFncywgYXJnKTsKQEAgLTE3OSw2ICsxOTIsMTggQEAKIAkJCXJ1bGUtPmlmaW5kZXggPSBkZXYtPmlmaW5kZXg7CiAJfQogCisJaWYgKHRiW0ZSQV9GV01BUktdKSB7CisJCXJ1bGUtPm1hcmsgPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVJLXSk7CisJCWlmIChydWxlLT5tYXJrKQorCQkJLyogY29tcGF0aWJpbGl0eTogaWYgdGhlIG1hcmsgdmFsdWUgaXMgbm9uLXplcm8gYWxsIGJpdHMKKwkJCSAqIGFyZSBjb21wYXJlZCB1bmxlc3MgYSBtYXNrIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgorCQkJICovCisJCQlydWxlLT5tYXJrX21hc2sgPSAweEZGRkZGRkZGOworCX0KKworCWlmICh0YltGUkFfRldNQVNLXSkKKwkJcnVsZS0+bWFya19tYXNrID0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFTS10pOworCiAJcnVsZS0+YWN0aW9uID0gZnJoLT5hY3Rpb247CiAJcnVsZS0+ZmxhZ3MgPSBmcmgtPmZsYWdzOwogCXJ1bGUtPnRhYmxlID0gZnJoX2dldF90YWJsZShmcmgsIHRiKTsKQEAgLTI1MCw2ICsyNzUsMTQgQEAKIAkJICAgIG5sYV9zdHJjbXAodGJbRlJBX0lGTkFNRV0sIHJ1bGUtPmlmbmFtZSkpCiAJCQljb250aW51ZTsKIAorCQlpZiAodGJbRlJBX0ZXTUFSS10gJiYKKwkJICAgIChydWxlLT5tYXJrICE9IG5sYV9nZXRfdTMyKHRiW0ZSQV9GV01BUktdKSkpCisJCQljb250aW51ZTsKKworCQlpZiAodGJbRlJBX0ZXTUFTS10gJiYKKwkJICAgIChydWxlLT5tYXJrX21hc2sgIT0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFTS10pKSkKKwkJCWNvbnRpbnVlOworCiAJCWlmICghb3BzLT5jb21wYXJlKHJ1bGUsIGZyaCwgdGIpKQogCQkJY29udGludWU7CiAKQEAgLTI3Myw2ICszMDYsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW5saW5lIHNpemVfdCBmaWJfcnVsZV9ubG1zZ19zaXplKHN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHMsCisJCQkJCSBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpCit7CisJc2l6ZV90IHBheWxvYWQgPSBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGZpYl9ydWxlX2hkcikpCisJCQkgKyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWikgLyogRlJBX0lGTkFNRSAqLworCQkJICsgbmxhX3RvdGFsX3NpemUoNCkgLyogRlJBX1BSSU9SSVRZICovCisJCQkgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBGUkFfVEFCTEUgKi8KKwkJCSArIG5sYV90b3RhbF9zaXplKDQpIC8qIEZSQV9GV01BUksgKi8KKwkJCSArIG5sYV90b3RhbF9zaXplKDQpOyAvKiBGUkFfRldNQVNLICovCisKKwlpZiAob3BzLT5ubG1zZ19wYXlsb2FkKQorCQlwYXlsb2FkICs9IG9wcy0+bmxtc2dfcGF5bG9hZChydWxlKTsKKworCXJldHVybiBwYXlsb2FkOworfQorCiBzdGF0aWMgaW50IGZpYl9ubF9maWxsX3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZpYl9ydWxlICpydWxlLAogCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCB0eXBlLCBpbnQgZmxhZ3MsCiAJCQkgICAgc3RydWN0IGZpYl9ydWxlc19vcHMgKm9wcykKQEAgLTI5OCw2ICszNDcsMTIgQEAKIAlpZiAocnVsZS0+cHJlZikKIAkJTkxBX1BVVF9VMzIoc2tiLCBGUkFfUFJJT1JJVFksIHJ1bGUtPnByZWYpOwogCisJaWYgKHJ1bGUtPm1hcmspCisJCU5MQV9QVVRfVTMyKHNrYiwgRlJBX0ZXTUFSSywgcnVsZS0+bWFyayk7CisKKwlpZiAocnVsZS0+bWFya19tYXNrIHx8IHJ1bGUtPm1hcmspCisJCU5MQV9QVVRfVTMyKHNrYiwgRlJBX0ZXTUFTSywgcnVsZS0+bWFya19tYXNrKTsKKwogCWlmIChvcHMtPmZpbGwocnVsZSwgc2tiLCBubGgsIGZyaCkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApAQCAtMzQ1LDE1ICs0MDAsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnIgPSAtRU5PQlVGUzsKIAotCXNrYiA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJc2tiID0gbmxtc2dfbmV3KGZpYl9ydWxlX25sbXNnX3NpemUob3BzLCBydWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IGZpYl9ubF9maWxsX3J1bGUoc2tiLCBydWxlLCBwaWQsIG5saC0+bmxtc2dfc2VxLCBldmVudCwgMCwgb3BzKTsKLQlpZiAoZXJyIDwgMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCS8qIGZhaWx1cmUgaW1wbGllcyBCVUcgaW4gZmliX3J1bGVfbmxtc2dfc2l6ZSgpICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF9ub3RpZnkoc2tiLCBwaWQsIG9wcy0+bmxncm91cCwgbmxoLCBHRlBfS0VSTkVMKTsKIGVycm91dDoKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpbHRlci5jIGIvbmV0L2NvcmUvZmlsdGVyLmMKaW5kZXggNjczMjc4Mi4uMGRmODQzYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmMKKysrIGIvbmV0L2NvcmUvZmlsdGVyLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogbG9hZF93OgogCQkJcHRyID0gbG9hZF9wb2ludGVyKHNrYiwgaywgNCwgJnRtcCk7CiAJCQlpZiAocHRyICE9IE5VTEwpIHsKLQkJCQlBID0gbnRvaGwoZ2V0X3VuYWxpZ25lZCgodTMyICopcHRyKSk7CisJCQkJQSA9IG50b2hsKGdldF91bmFsaWduZWQoKF9fYmUzMiAqKXB0cikpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xODcsNyArMTg3LDcgQEAKIGxvYWRfaDoKIAkJCXB0ciA9IGxvYWRfcG9pbnRlcihza2IsIGssIDIsICZ0bXApOwogCQkJaWYgKHB0ciAhPSBOVUxMKSB7Ci0JCQkJQSA9IG50b2hzKGdldF91bmFsaWduZWQoKHUxNiAqKXB0cikpOworCQkJCUEgPSBudG9ocyhnZXRfdW5hbGlnbmVkKChfX2JlMTYgKilwdHIpKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCSAqLwogCQlzd2l0Y2ggKGstU0tGX0FEX09GRikgewogCQljYXNlIFNLRl9BRF9QUk9UT0NPTDoKLQkJCUEgPSBodG9ucyhza2ItPnByb3RvY29sKTsKKwkJCUEgPSBudG9ocyhza2ItPnByb3RvY29sKTsKIAkJCWNvbnRpbnVlOwogCQljYXNlIFNLRl9BRF9QS1RUWVBFOgogCQkJQSA9IHNrYi0+cGt0X3R5cGU7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9pb3ZlYy5jIGIvbmV0L2NvcmUvaW92ZWMuYwppbmRleCA2NWU0YjU2Li4wNGIyNDljIDEwMDY0NAotLS0gYS9uZXQvY29yZS9pb3ZlYy5jCisrKyBiL25ldC9jb3JlL2lvdmVjLmMKQEAgLTE1OCw5ICsxNTgsOSBAQAogICoJY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgdW5hbGlnbmVkIGFsc28uCiAgKi8KIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJCSBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgKmNzdW1wKQorCQkJCSBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbGVuLCBfX3dzdW0gKmNzdW1wKQogewotCWludCBjc3VtID0gKmNzdW1wOworCV9fd3N1bSBjc3VtID0gKmNzdW1wOwogCWludCBwYXJ0aWFsX2NudCA9IDAsIGVyciA9IDA7CiAKIAkvKiBTa2lwIG92ZXIgdGhlIGZpbmlzaGVkIGlvdmVjcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUva21hcF9za2IuaCBiL25ldC9jb3JlL2ttYXBfc2tiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzYzJiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvY29yZS9rbWFwX3NrYi5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqa21hcF9za2JfZnJhZyhjb25zdCBza2JfZnJhZ190ICpmcmFnKQoreworI2lmZGVmIENPTkZJR19ISUdITUVNCisJQlVHX09OKGluX2lycSgpKTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKyNlbmRpZgorCXJldHVybiBrbWFwX2F0b21pYyhmcmFnLT5wYWdlLCBLTV9TS0JfREFUQV9TT0ZUSVJRKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt1bm1hcF9za2JfZnJhZyh2b2lkICp2YWRkcikKK3sKKwlrdW5tYXBfYXRvbWljKHZhZGRyLCBLTV9TS0JfREFUQV9TT0ZUSVJRKTsKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCWxvY2FsX2JoX2VuYWJsZSgpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IGI0YjQ3ODMuLmJhNTA5YTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0xMjY2LDEwICsxMjY2LDkgQEAKIHN0cnVjdCBuZWlnaF9wYXJtcyAqbmVpZ2hfcGFybXNfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCkKIHsKLQlzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXN0cnVjdCBuZWlnaF9wYXJtcyAqcCA9IGttZW1kdXAoJnRibC0+cGFybXMsIHNpemVvZigqcCksIEdGUF9LRVJORUwpOwogCiAJaWYgKHApIHsKLQkJbWVtY3B5KHAsICZ0YmwtPnBhcm1zLCBzaXplb2YoKnApKTsKIAkJcC0+dGJsCQkgID0gdGJsOwogCQlhdG9taWNfc2V0KCZwLT5yZWZjbnQsIDEpOwogCQlJTklUX1JDVV9IRUFEKCZwLT5yY3VfaGVhZCk7CkBAIC0yNDEwLDIwICsyNDA5LDI3IEBACiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogI2lmZGVmIENPTkZJR19BUlBECitzdGF0aWMgaW5saW5lIHNpemVfdCBuZWlnaF9ubG1zZ19zaXplKHZvaWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmRtc2cpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKE1BWF9BRERSX0xFTikgLyogTkRBX0RTVCAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKE1BWF9BRERSX0xFTikgLyogTkRBX0xMQUREUiAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgbmRhX2NhY2hlaW5mbykpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCk7IC8qIE5EQV9QUk9CRVMgKi8KK30KKwogc3RhdGljIHZvaWQgX19uZWlnaF9ub3RpZnkoc3RydWN0IG5laWdoYm91ciAqbiwgaW50IHR5cGUsIGludCBmbGFncykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnIgPSAtRU5PQlVGUzsKIAotCXNrYiA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0FUT01JQyk7CisJc2tiID0gbmxtc2dfbmV3KG5laWdoX25sbXNnX3NpemUoKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IG5laWdoX2ZpbGxfaW5mbyhza2IsIG4sIDAsIDAsIHR5cGUsIGZsYWdzKTsKLQlpZiAoZXJyIDwgMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCS8qIGZhaWx1cmUgaW1wbGllcyBCVUcgaW4gbmVpZ2hfbmxtc2dfc2l6ZSgpICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF9ub3RpZnkoc2tiLCAwLCBSVE5MR1JQX05FSUdILCBOVUxMLCBHRlBfQVRPTUlDKTsKIGVycm91dDoKQEAgLTI2MTgsMTQgKzI2MjQsMTQgQEAKIAkJCSAgaW50IHBfaWQsIGludCBwZGV2X2lkLCBjaGFyICpwX25hbWUsIAogCQkJICBwcm9jX2hhbmRsZXIgKmhhbmRsZXIsIGN0bF9oYW5kbGVyICpzdHJhdGVneSkKIHsKLQlzdHJ1Y3QgbmVpZ2hfc3lzY3RsX3RhYmxlICp0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgbmVpZ2hfc3lzY3RsX3RhYmxlICp0ID0ga21lbWR1cCgmbmVpZ2hfc3lzY3RsX3RlbXBsYXRlLAorCQkJCQkgICAgICAgc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJY29uc3QgY2hhciAqZGV2X25hbWVfc291cmNlID0gTlVMTDsKIAljaGFyICpkZXZfbmFtZSA9IE5VTEw7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIXQpCiAJCXJldHVybiAtRU5PQlVGUzsKLQltZW1jcHkodCwgJm5laWdoX3N5c2N0bF90ZW1wbGF0ZSwgc2l6ZW9mKCp0KSk7CiAJdC0+bmVpZ2hfdmFyc1swXS5kYXRhICA9ICZwLT5tY2FzdF9wcm9iZXM7CiAJdC0+bmVpZ2hfdmFyc1sxXS5kYXRhICA9ICZwLT51Y2FzdF9wcm9iZXM7CiAJdC0+bmVpZ2hfdmFyc1syXS5kYXRhICA9ICZwLT5hcHBfcHJvYmVzOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDY1ODlhZGIuLjNjNTg4NDYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTM0LDE4ICszNCwxMiBAQAogI2RlZmluZSBNQVhfVURQX0NIVU5LIDE0NjAKICNkZWZpbmUgTUFYX1NLQlMgMzIKICNkZWZpbmUgTUFYX1FVRVVFX0RFUFRIIChNQVhfU0tCUyAvIDIpCi0jZGVmaW5lIE1BWF9SRVRSSUVTIDIwMDAwCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2tiX2xpc3RfbG9jayk7Ci1zdGF0aWMgaW50IG5yX3NrYnM7Ci1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNrYnM7Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socXVldWVfbG9jayk7Ci1zdGF0aWMgaW50IHF1ZXVlX2RlcHRoOwotc3RhdGljIHN0cnVjdCBza19idWZmICpxdWV1ZV9oZWFkLCAqcXVldWVfdGFpbDsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYl9wb29sOwogCiBzdGF0aWMgYXRvbWljX3QgdHJhcHBlZDsKIAorI2RlZmluZSBVU0VDX1BFUl9QT0xMCTUwCiAjZGVmaW5lIE5FVFBPTExfUlhfRU5BQkxFRCAgMQogI2RlZmluZSBORVRQT0xMX1JYX0RST1AgICAgIDIKIApAQCAtNTgsNTIgKzUyLDM1IEBACiAKIHN0YXRpYyB2b2lkIHF1ZXVlX3Byb2Nlc3Modm9pZCAqcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9IHA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXdoaWxlIChxdWV1ZV9oZWFkKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZV9sb2NrLCBmbGFncyk7CisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbnBpbmZvLT50eHEpKSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAKLQkJc2tiID0gcXVldWVfaGVhZDsKLQkJcXVldWVfaGVhZCA9IHNrYi0+bmV4dDsKLQkJaWYgKHNrYiA9PSBxdWV1ZV90YWlsKQotCQkJcXVldWVfaGVhZCA9IE5VTEw7CisJCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSB8fCAhbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQlfX2tmcmVlX3NrYihza2IpOworCQkJY29udGludWU7CisJCX0KIAotCQlxdWV1ZV9kZXB0aC0tOworCQluZXRpZl90eF9sb2NrX2JoKGRldik7CisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgfHwKKwkJICAgIGRldi0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGV2KSAhPSBORVRERVZfVFhfT0spIHsKKwkJCXNrYl9xdWV1ZV9oZWFkKCZucGluZm8tPnR4cSwgc2tiKTsKKwkJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbnBpbmZvLT50eF93b3JrLCBIWi8xMCk7CisJCQlyZXR1cm47CisJCX0KIAotCQlkZXZfcXVldWVfeG1pdChza2IpOworCQluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIAl9CiB9CiAKLXN0YXRpYyBERUNMQVJFX1dPUksoc2VuZF9xdWV1ZSwgcXVldWVfcHJvY2VzcywgTlVMTCk7Ci0KLXZvaWQgbmV0cG9sbF9xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIF9fc3VtMTYgY2hlY2tzdW1fdWRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoLAorCQkJICAgIHVuc2lnbmVkIHNob3J0IHVsZW4sIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocXVldWVfZGVwdGggPT0gTUFYX1FVRVVFX0RFUFRIKSB7Ci0JCV9fa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWVfbG9jaywgZmxhZ3MpOwotCWlmICghcXVldWVfaGVhZCkKLQkJcXVldWVfaGVhZCA9IHNrYjsKLQllbHNlCi0JCXF1ZXVlX3RhaWwtPm5leHQgPSBza2I7Ci0JcXVldWVfdGFpbCA9IHNrYjsKLQlxdWV1ZV9kZXB0aCsrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXNjaGVkdWxlX3dvcmsoJnNlbmRfcXVldWUpOwotfQotCi1zdGF0aWMgaW50IGNoZWNrc3VtX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aCwKLQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdWxlbiwgdTMyIHNhZGRyLCB1MzIgZGFkZHIpCi17Ci0JdW5zaWduZWQgaW50IHBzdW07CisJX193c3VtIHBzdW07CiAKIAlpZiAodWgtPmNoZWNrID09IDAgfHwgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpCiAJCXJldHVybiAwOwpAQCAtMTExLDcgKzg4LDcgQEAKIAlwc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIDApOwogCiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFICYmCi0JICAgICEodTE2KWNzdW1fZm9sZChjc3VtX2FkZChwc3VtLCBza2ItPmNzdW0pKSkKKwkgICAgIWNzdW1fZm9sZChjc3VtX2FkZChwc3VtLCBza2ItPmNzdW0pKSkKIAkJcmV0dXJuIDA7CiAKIAlza2ItPmNzdW0gPSBwc3VtOwpAQCAtMTY3LDEyICsxNDQsMTEgQEAKIAkJYXJwX3JlcGx5KHNrYik7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZucGktPmFycF90eCk7CiAJfQotCXJldHVybjsKIH0KIAogdm9pZCBuZXRwb2xsX3BvbGwoc3RydWN0IG5ldHBvbGwgKm5wKQogewotCWlmKCFucC0+ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKG5wLT5kZXYpIHx8ICFucC0+ZGV2LT5wb2xsX2NvbnRyb2xsZXIpCisJaWYgKCFucC0+ZGV2IHx8ICFuZXRpZl9ydW5uaW5nKG5wLT5kZXYpIHx8ICFucC0+ZGV2LT5wb2xsX2NvbnRyb2xsZXIpCiAJCXJldHVybjsKIAogCS8qIFByb2Nlc3MgcGVuZGluZyB3b3JrIG9uIE5JQyAqLwpAQCAtMTkwLDE3ICsxNjYsMTUgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2tiX2xpc3RfbG9jaywgZmxhZ3MpOwotCXdoaWxlIChucl9za2JzIDwgTUFYX1NLQlMpIHsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2tiX3Bvb2wubG9jaywgZmxhZ3MpOworCXdoaWxlIChza2JfcG9vbC5xbGVuIDwgTUFYX1NLQlMpIHsKIAkJc2tiID0gYWxsb2Nfc2tiKE1BWF9TS0JfU0laRSwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKQogCQkJYnJlYWs7CiAKLQkJc2tiLT5uZXh0ID0gc2ticzsKLQkJc2ticyA9IHNrYjsKLQkJbnJfc2ticysrOworCQlfX3NrYl9xdWV1ZV90YWlsKCZza2JfcG9vbCwgc2tiKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tiX2xpc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNrYl9wb29sLmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgemFwX2NvbXBsZXRpb25fcXVldWUodm9pZCkKQEAgLTIxOSw3ICsxOTMsNyBAQAogCQl3aGlsZSAoY2xpc3QgIT0gTlVMTCkgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGNsaXN0OwogCQkJY2xpc3QgPSBjbGlzdC0+bmV4dDsKLQkJCWlmKHNrYi0+ZGVzdHJ1Y3RvcikKKwkJCWlmIChza2ItPmRlc3RydWN0b3IpCiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsgLyogcHV0IHRoaXMgb25lIGJhY2sgKi8KIAkJCWVsc2UKIAkJCQlfX2tmcmVlX3NrYihza2IpOwpAQCAtMjI5LDM4ICsyMDMsMjUgQEAKIAlwdXRfY3B1X3Zhcihzb2Z0bmV0X2RhdGEpOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKiBmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKQorc3RhdGljIHN0cnVjdCBza19idWZmICpmaW5kX3NrYihzdHJ1Y3QgbmV0cG9sbCAqbnAsIGludCBsZW4sIGludCByZXNlcnZlKQogewotCWludCBvbmNlID0gMSwgY291bnQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJemFwX2NvbXBsZXRpb25fcXVldWUoKTsKKwlyZWZpbGxfc2ticygpOwogcmVwZWF0OgotCWlmIChucl9za2JzIDwgTUFYX1NLQlMpCi0JCXJlZmlsbF9za2JzKCk7CiAKIAlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJc2tiID0gc2tiX2RlcXVldWUoJnNrYl9wb29sKTsKIAogCWlmICghc2tiKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZza2JfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCXNrYiA9IHNrYnM7Ci0JCWlmIChza2IpIHsKLQkJCXNrYnMgPSBza2ItPm5leHQ7Ci0JCQlza2ItPm5leHQgPSBOVUxMOwotCQkJbnJfc2ticy0tOworCQlpZiAoKytjb3VudCA8IDEwKSB7CisJCQluZXRwb2xsX3BvbGwobnApOworCQkJZ290byByZXBlYXQ7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tiX2xpc3RfbG9jaywgZmxhZ3MpOwotCX0KLQotCWlmKCFza2IpIHsKLQkJY291bnQrKzsKLQkJaWYgKG9uY2UgJiYgKGNvdW50ID09IDEwMDAwMDApKSB7Ci0JCQlwcmludGsoIm91dCBvZiBuZXRwb2xsIHNrYnMhXG4iKTsKLQkJCW9uY2UgPSAwOwotCQl9Ci0JCW5ldHBvbGxfcG9sbChucCk7Ci0JCWdvdG8gcmVwZWF0OworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlhdG9taWNfc2V0KCZza2ItPnVzZXJzLCAxKTsKQEAgLTI3MCw1MCArMjMxLDQwIEBACiAKIHN0YXRpYyB2b2lkIG5ldHBvbGxfc2VuZF9za2Ioc3RydWN0IG5ldHBvbGwgKm5wLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvOworCWludCBzdGF0dXMgPSBORVRERVZfVFhfQlVTWTsKKwl1bnNpZ25lZCBsb25nIHRyaWVzOworIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbnAtPmRldjsKKyAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gbnAtPmRldi0+bnBpbmZvOwogCi0JaWYgKCFucCB8fCAhbnAtPmRldiB8fCAhbmV0aWZfcnVubmluZyhucC0+ZGV2KSkgewotCQlfX2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQorIAlpZiAoIW5waW5mbyB8fCAhbmV0aWZfcnVubmluZyhkZXYpIHx8ICFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7CisgCQlfX2tmcmVlX3NrYihza2IpOworIAkJcmV0dXJuOworIAl9CiAKLQlucGluZm8gPSBucC0+ZGV2LT5ucGluZm87CisJLyogZG9uJ3QgZ2V0IG1lc3NhZ2VzIG91dCBvZiBvcmRlciwgYW5kIG5vIHJlY3Vyc2lvbiAqLworCWlmIChza2JfcXVldWVfbGVuKCZucGluZm8tPnR4cSkgPT0gMCAmJgorCSAgICBucGluZm8tPnBvbGxfb3duZXIgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpICYmCisJICAgIG5ldGlmX3R4X3RyeWxvY2soZGV2KSkgeworCQkvKiB0cnkgdW50aWwgbmV4dCBjbG9jayB0aWNrICovCisJCWZvciAodHJpZXMgPSBqaWZmaWVzX3RvX3VzZWNzKDEpL1VTRUNfUEVSX1BPTEw7IHRyaWVzID4gMDsgLS10cmllcykgeworCQkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQkJc3RhdHVzID0gZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwogCi0JLyogYXZvaWQgcmVjdXJzaW9uICovCi0JaWYgKG5waW5mby0+cG9sbF9vd25lciA9PSBzbXBfcHJvY2Vzc29yX2lkKCkgfHwKLQkgICAgbnAtPmRldi0+eG1pdF9sb2NrX293bmVyID09IHNtcF9wcm9jZXNzb3JfaWQoKSkgewotCQlpZiAobnAtPmRyb3ApCi0JCQlucC0+ZHJvcChza2IpOwotCQllbHNlCi0JCQlfX2tmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQorCQkJaWYgKHN0YXR1cyA9PSBORVRERVZfVFhfT0spCisJCQkJYnJlYWs7CiAKLQlkbyB7Ci0JCW5waW5mby0+dHJpZXMtLTsKLQkJbmV0aWZfdHhfbG9jayhucC0+ZGV2KTsKKwkJCS8qIHRpY2tsZSBkZXZpY2UgbWF5YmUgdGhlcmUgaXMgc29tZSBjbGVhbnVwICovCisJCQluZXRwb2xsX3BvbGwobnApOwogCi0JCS8qCi0JCSAqIG5ldHdvcmsgZHJpdmVycyBkbyBub3QgZXhwZWN0IHRvIGJlIGNhbGxlZCBpZiB0aGUgcXVldWUgaXMKLQkJICogc3RvcHBlZC4KLQkJICovCi0JCXN0YXR1cyA9IE5FVERFVl9UWF9CVVNZOwotCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQobnAtPmRldikpCi0JCQlzdGF0dXMgPSBucC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQoc2tiLCBucC0+ZGV2KTsKLQotCQluZXRpZl90eF91bmxvY2sobnAtPmRldik7Ci0KLQkJLyogc3VjY2VzcyAqLwotCQlpZighc3RhdHVzKSB7Ci0JCQlucGluZm8tPnRyaWVzID0gTUFYX1JFVFJJRVM7IC8qIHJlc2V0ICovCi0JCQlyZXR1cm47CisJCQl1ZGVsYXkoVVNFQ19QRVJfUE9MTCk7CiAJCX0KKwkJbmV0aWZfdHhfdW5sb2NrKGRldik7CisJfQogCi0JCS8qIHRyYW5zbWl0IGJ1c3kgKi8KLQkJbmV0cG9sbF9wb2xsKG5wKTsKLQkJdWRlbGF5KDUwKTsKLQl9IHdoaWxlIChucGluZm8tPnRyaWVzID4gMCk7CisJaWYgKHN0YXR1cyAhPSBORVRERVZfVFhfT0spIHsKKwkJc2tiX3F1ZXVlX3RhaWwoJm5waW5mby0+dHhxLCBza2IpOworCQlzY2hlZHVsZV93b3JrKCZucGluZm8tPnR4X3dvcmspOworCX0KIH0KIAogdm9pZCBuZXRwb2xsX3NlbmRfdWRwKHN0cnVjdCBuZXRwb2xsICpucCwgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuKQpAQCAtMzQ1LDcgKzI5Niw3IEBACiAJCQkJCXVkcF9sZW4sIElQUFJPVE9fVURQLAogCQkJCQljc3VtX3BhcnRpYWwoKHVuc2lnbmVkIGNoYXIgKil1ZHBoLCB1ZHBfbGVuLCAwKSk7CiAJaWYgKHVkcGgtPmNoZWNrID09IDApCi0JCXVkcGgtPmNoZWNrID0gLTE7CisJCXVkcGgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiAKIAlza2ItPm5oLmlwaCA9IGlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfcHVzaChza2IsIHNpemVvZigqaXBoKSk7CiAKQEAgLTM3OSw3ICszMzAsNyBAQAogCXN0cnVjdCBhcnBoZHIgKmFycDsKIAl1bnNpZ25lZCBjaGFyICphcnBfcHRyOwogCWludCBzaXplLCB0eXBlID0gQVJQT1BfUkVQTFksIHB0eXBlID0gRVRIX1BfQVJQOwotCXUzMiBzaXAsIHRpcDsKKwlfX2JlMzIgc2lwLCB0aXA7CiAJc3RydWN0IHNrX2J1ZmYgKnNlbmRfc2tiOwogCXN0cnVjdCBuZXRwb2xsICpucCA9IE5VTEw7CiAKQEAgLTQzMSw4ICszODIsOCBAQAogCiAJaWYgKG5wLT5kZXYtPmhhcmRfaGVhZGVyICYmCiAJICAgIG5wLT5kZXYtPmhhcmRfaGVhZGVyKHNlbmRfc2tiLCBza2ItPmRldiwgcHR5cGUsCi0JCQkJICAgICAgIG5wLT5yZW1vdGVfbWFjLCBucC0+bG9jYWxfbWFjLAotCQkJCSAgICAgICBzZW5kX3NrYi0+bGVuKSA8IDApIHsKKwkJCQkgbnAtPnJlbW90ZV9tYWMsIG5wLT5sb2NhbF9tYWMsCisJCQkJIHNlbmRfc2tiLT5sZW4pIDwgMCkgewogCQlrZnJlZV9za2Ioc2VuZF9za2IpOwogCQlyZXR1cm47CiAJfQpAQCAtNDcwLDcgKzQyMSw2IEBACiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpID0gc2tiLT5kZXYtPm5waW5mbzsKIAlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBucGktPnJ4X25wOwogCi0KIAlpZiAoIW5wKQogCQlnb3RvIG91dDsKIAlpZiAoc2tiLT5kZXYtPnR5cGUgIT0gQVJQSFJEX0VUSEVSKQpAQCAtNTQzLDQ3ICs0OTMsNDcgQEAKIHsKIAljaGFyICpjdXI9b3B0LCAqZGVsaW07CiAKLQlpZigqY3VyICE9ICdAJykgeworCWlmICgqY3VyICE9ICdAJykgewogCQlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJ0AnKSkgPT0gTlVMTCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQkqZGVsaW09MDsKLQkJbnAtPmxvY2FsX3BvcnQ9c2ltcGxlX3N0cnRvbChjdXIsIE5VTEwsIDEwKTsKLQkJY3VyPWRlbGltOworCQkqZGVsaW0gPSAwOworCQlucC0+bG9jYWxfcG9ydCA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxMCk7CisJCWN1ciA9IGRlbGltOwogCX0KIAljdXIrKzsKIAlwcmludGsoS0VSTl9JTkZPICIlczogbG9jYWwgcG9ydCAlZFxuIiwgbnAtPm5hbWUsIG5wLT5sb2NhbF9wb3J0KTsKIAotCWlmKCpjdXIgIT0gJy8nKSB7CisJaWYgKCpjdXIgIT0gJy8nKSB7CiAJCWlmICgoZGVsaW0gPSBzdHJjaHIoY3VyLCAnLycpKSA9PSBOVUxMKQogCQkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JCSpkZWxpbT0wOwotCQlucC0+bG9jYWxfaXA9bnRvaGwoaW5fYXRvbihjdXIpKTsKLQkJY3VyPWRlbGltOworCQkqZGVsaW0gPSAwOworCQlucC0+bG9jYWxfaXAgPSBudG9obChpbl9hdG9uKGN1cikpOworCQljdXIgPSBkZWxpbTsKIAogCQlwcmludGsoS0VSTl9JTkZPICIlczogbG9jYWwgSVAgJWQuJWQuJWQuJWRcbiIsCiAJCSAgICAgICBucC0+bmFtZSwgSElQUVVBRChucC0+bG9jYWxfaXApKTsKIAl9CiAJY3VyKys7CiAKLQlpZiAoICpjdXIgIT0gJywnKSB7CisJaWYgKCpjdXIgIT0gJywnKSB7CiAJCS8qIHBhcnNlIG91dCBkZXYgbmFtZSAqLwogCQlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJywnKSkgPT0gTlVMTCkKIAkJCWdvdG8gcGFyc2VfZmFpbGVkOwotCQkqZGVsaW09MDsKKwkJKmRlbGltID0gMDsKIAkJc3RybGNweShucC0+ZGV2X25hbWUsIGN1ciwgc2l6ZW9mKG5wLT5kZXZfbmFtZSkpOwotCQljdXI9ZGVsaW07CisJCWN1ciA9IGRlbGltOwogCX0KIAljdXIrKzsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcmZhY2UgJXNcbiIsIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOwogCi0JaWYgKCAqY3VyICE9ICdAJyApIHsKKwlpZiAoKmN1ciAhPSAnQCcpIHsKIAkJLyogZHN0IHBvcnQgKi8KIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICdAJykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltPTA7Ci0JCW5wLT5yZW1vdGVfcG9ydD1zaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTApOwotCQljdXI9ZGVsaW07CisJCSpkZWxpbSA9IDA7CisJCW5wLT5yZW1vdGVfcG9ydCA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxMCk7CisJCWN1ciA9IGRlbGltOwogCX0KIAljdXIrKzsKIAlwcmludGsoS0VSTl9JTkZPICIlczogcmVtb3RlIHBvcnQgJWRcbiIsIG5wLT5uYW1lLCBucC0+cmVtb3RlX3BvcnQpOwpAQCAtNTkxLDQyICs1NDEsNDEgQEAKIAkvKiBkc3QgaXAgKi8KIAlpZiAoKGRlbGltID0gc3RyY2hyKGN1ciwgJy8nKSkgPT0gTlVMTCkKIAkJZ290byBwYXJzZV9mYWlsZWQ7Ci0JKmRlbGltPTA7Ci0JbnAtPnJlbW90ZV9pcD1udG9obChpbl9hdG9uKGN1cikpOwotCWN1cj1kZWxpbSsxOworCSpkZWxpbSA9IDA7CisJbnAtPnJlbW90ZV9pcCA9IG50b2hsKGluX2F0b24oY3VyKSk7CisJY3VyID0gZGVsaW0gKyAxOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlbW90ZSBJUCAlZC4lZC4lZC4lZFxuIiwKLQkJICAgICAgIG5wLT5uYW1lLCBISVBRVUFEKG5wLT5yZW1vdGVfaXApKTsKKwkgICAgICAgbnAtPm5hbWUsIEhJUFFVQUQobnAtPnJlbW90ZV9pcCkpOwogCi0JaWYoICpjdXIgIT0gMCApCi0JeworCWlmICgqY3VyICE9IDApIHsKIAkJLyogTUFDIGFkZHJlc3MgKi8KIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltPTA7Ci0JCW5wLT5yZW1vdGVfbWFjWzBdPXNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1cj1kZWxpbSsxOworCQkqZGVsaW0gPSAwOworCQlucC0+cmVtb3RlX21hY1swXSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7CisJCWN1ciA9IGRlbGltICsgMTsKIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltPTA7Ci0JCW5wLT5yZW1vdGVfbWFjWzFdPXNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1cj1kZWxpbSsxOworCQkqZGVsaW0gPSAwOworCQlucC0+cmVtb3RlX21hY1sxXSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7CisJCWN1ciA9IGRlbGltICsgMTsKIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltPTA7Ci0JCW5wLT5yZW1vdGVfbWFjWzJdPXNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1cj1kZWxpbSsxOworCQkqZGVsaW0gPSAwOworCQlucC0+cmVtb3RlX21hY1syXSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7CisJCWN1ciA9IGRlbGltICsgMTsKIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltPTA7Ci0JCW5wLT5yZW1vdGVfbWFjWzNdPXNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1cj1kZWxpbSsxOworCQkqZGVsaW0gPSAwOworCQlucC0+cmVtb3RlX21hY1szXSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7CisJCWN1ciA9IGRlbGltICsgMTsKIAkJaWYgKChkZWxpbSA9IHN0cmNocihjdXIsICc6JykpID09IE5VTEwpCiAJCQlnb3RvIHBhcnNlX2ZhaWxlZDsKLQkJKmRlbGltPTA7Ci0JCW5wLT5yZW1vdGVfbWFjWzRdPXNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7Ci0JCWN1cj1kZWxpbSsxOwotCQlucC0+cmVtb3RlX21hY1s1XT1zaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTYpOworCQkqZGVsaW0gPSAwOworCQlucC0+cmVtb3RlX21hY1s0XSA9IHNpbXBsZV9zdHJ0b2woY3VyLCBOVUxMLCAxNik7CisJCWN1ciA9IGRlbGltICsgMTsKKwkJbnAtPnJlbW90ZV9tYWNbNV0gPSBzaW1wbGVfc3RydG9sKGN1ciwgTlVMTCwgMTYpOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZW1vdGUgZXRoZXJuZXQgYWRkcmVzcyAiCkBAIC02NTMsMzQgKzYwMiw0NCBAQAogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlzdHJ1Y3QgbmV0cG9sbF9pbmZvICpucGluZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOwogCiAJaWYgKG5wLT5kZXZfbmFtZSkKIAkJbmRldiA9IGRldl9nZXRfYnlfbmFtZShucC0+ZGV2X25hbWUpOwogCWlmICghbmRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBkb2Vzbid0IGV4aXN0LCBhYm9ydGluZy5cbiIsCiAJCSAgICAgICBucC0+bmFtZSwgbnAtPmRldl9uYW1lKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlucC0+ZGV2ID0gbmRldjsKIAlpZiAoIW5kZXYtPm5waW5mbykgewogCQlucGluZm8gPSBrbWFsbG9jKHNpemVvZigqbnBpbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbnBpbmZvKQorCQlpZiAoIW5waW5mbykgeworCQkJZXJyID0gLUVOT01FTTsKIAkJCWdvdG8gcmVsZWFzZTsKKwkJfQogCiAJCW5waW5mby0+cnhfZmxhZ3MgPSAwOwogCQlucGluZm8tPnJ4X25wID0gTlVMTDsKIAkJc3Bpbl9sb2NrX2luaXQoJm5waW5mby0+cG9sbF9sb2NrKTsKIAkJbnBpbmZvLT5wb2xsX293bmVyID0gLTE7Ci0JCW5waW5mby0+dHJpZXMgPSBNQVhfUkVUUklFUzsKKwogCQlzcGluX2xvY2tfaW5pdCgmbnBpbmZvLT5yeF9sb2NrKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbnBpbmZvLT5hcnBfdHgpOwotCX0gZWxzZQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZucGluZm8tPnR4cSk7CisJCUlOSVRfV09SSygmbnBpbmZvLT50eF93b3JrLCBxdWV1ZV9wcm9jZXNzLCBucGluZm8pOworCisJCWF0b21pY19zZXQoJm5waW5mby0+cmVmY250LCAxKTsKKwl9IGVsc2UgewogCQlucGluZm8gPSBuZGV2LT5ucGluZm87CisJCWF0b21pY19pbmMoJm5waW5mby0+cmVmY250KTsKKwl9CiAKIAlpZiAoIW5kZXYtPnBvbGxfY29udHJvbGxlcikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlcyBkb2Vzbid0IHN1cHBvcnQgcG9sbGluZywgYWJvcnRpbmcuXG4iLAogCQkgICAgICAgbnAtPm5hbWUsIG5wLT5kZXZfbmFtZSk7CisJCWVyciA9IC1FTk9UU1VQUDsKIAkJZ290byByZWxlYXNlOwogCX0KIApAQCAtNjkxLDEzICs2NTAsMTQgQEAKIAkJICAgICAgIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOwogCiAJCXJ0bmxfbG9jaygpOwotCQlpZiAoZGV2X2NoYW5nZV9mbGFncyhuZGV2LCBuZGV2LT5mbGFncyB8IElGRl9VUCkgPCAwKSB7CisJCWVyciA9IGRldl9vcGVuKG5kZXYpOworCQlydG5sX3VubG9jaygpOworCisJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBvcGVuICVzXG4iLAotCQkJICAgICAgIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOwotCQkJcnRubF91bmxvY2soKTsKKwkJCSAgICAgICBucC0+bmFtZSwgbmRldi0+bmFtZSk7CiAJCQlnb3RvIHJlbGVhc2U7CiAJCX0KLQkJcnRubF91bmxvY2soKTsKIAogCQlhdGxlYXN0ID0gamlmZmllcyArIEhaLzEwOwogIAkJYXRtb3N0ID0gamlmZmllcyArIDQqSFo7CkBAIC03MzUsNiArNjk1LDcgQEAKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gSVAgYWRkcmVzcyBmb3IgJXMsIGFib3J0aW5nXG4iLAogCQkJICAgICAgIG5wLT5uYW1lLCBucC0+ZGV2X25hbWUpOworCQkJZXJyID0gLUVERVNUQUREUlJFUTsKIAkJCWdvdG8gcmVsZWFzZTsKIAkJfQogCkBAIC03NjcsOSArNzI4LDE2IEBACiAJCWtmcmVlKG5waW5mbyk7CiAJbnAtPmRldiA9IE5VTEw7CiAJZGV2X3B1dChuZGV2KTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBfX2luaXQgbmV0cG9sbF9pbml0KHZvaWQpCit7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2tiX3Bvb2wpOworCXJldHVybiAwOworfQorY29yZV9pbml0Y2FsbChuZXRwb2xsX2luaXQpOworCiB2b2lkIG5ldHBvbGxfY2xlYW51cChzdHJ1Y3QgbmV0cG9sbCAqbnApCiB7CiAJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvOwpAQCAtNzc3LDEyICs3NDUsMjUgQEAKIAogCWlmIChucC0+ZGV2KSB7CiAJCW5waW5mbyA9IG5wLT5kZXYtPm5waW5mbzsKLQkJaWYgKG5waW5mbyAmJiBucGluZm8tPnJ4X25wID09IG5wKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7Ci0JCQlucGluZm8tPnJ4X25wID0gTlVMTDsKLQkJCW5waW5mby0+cnhfZmxhZ3MgJj0gfk5FVFBPTExfUlhfRU5BQkxFRDsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCQlpZiAobnBpbmZvKSB7CisJCQlpZiAobnBpbmZvLT5yeF9ucCA9PSBucCkgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKKwkJCQlucGluZm8tPnJ4X25wID0gTlVMTDsKKwkJCQlucGluZm8tPnJ4X2ZsYWdzICY9IH5ORVRQT0xMX1JYX0VOQUJMRUQ7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CisJCQl9CisKKwkJCW5wLT5kZXYtPm5waW5mbyA9IE5VTEw7CisJCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbnBpbmZvLT5yZWZjbnQpKSB7CisJCQkJc2tiX3F1ZXVlX3B1cmdlKCZucGluZm8tPmFycF90eCk7CisgCQkJCXNrYl9xdWV1ZV9wdXJnZSgmbnBpbmZvLT50eHEpOworCQkJCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJm5waW5mby0+dHhfd29yayk7CisgCQkJCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkJCQlrZnJlZShucGluZm8pOworCQkJfQogCQl9CisKIAkJZGV2X3B1dChucC0+ZGV2KTsKIAl9CiAKQEAgLTgwOSw0ICs3OTAsMyBAQAogRVhQT1JUX1NZTUJPTChuZXRwb2xsX2NsZWFudXApOwogRVhQT1JUX1NZTUJPTChuZXRwb2xsX3NlbmRfdWRwKTsKIEVYUE9SVF9TWU1CT0wobmV0cG9sbF9wb2xsKTsKLUVYUE9SVF9TWU1CT0wobmV0cG9sbF9xdWV1ZSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDczM2Q4NmQuLjE4OTdhM2EgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yMDcsNyArMjA3LDcgQEAKICNkZWZpbmUgU1ZMQU5fVEFHX1NJWkUoeCkgKCh4KS0+c3ZsYW5faWQgPT0gMHhmZmZmID8gMCA6IDQpCiAKIHN0cnVjdCBmbG93X3N0YXRlIHsKLQlfX3UzMiBjdXJfZGFkZHI7CisJX19iZTMyIGN1cl9kYWRkcjsKIAlpbnQgY291bnQ7CiB9OwogCkBAIC0yODIsMTAgKzI4MiwxMCBAQAogCS8qIElmIHdlJ3JlIGRvaW5nIHJhbmdlcywgcmFuZG9tIG9yIGluY3JlbWVudGFsLCB0aGVuIHRoaXMKIAkgKiBkZWZpbmVzIHRoZSBtaW4vbWF4IGZvciB0aG9zZSByYW5nZXMuCiAJICovCi0JX191MzIgc2FkZHJfbWluOwkvKiBpbmNsdXNpdmUsIHNvdXJjZSBJUCBhZGRyZXNzICovCi0JX191MzIgc2FkZHJfbWF4OwkvKiBleGNsdXNpdmUsIHNvdXJjZSBJUCBhZGRyZXNzICovCi0JX191MzIgZGFkZHJfbWluOwkvKiBpbmNsdXNpdmUsIGRlc3QgSVAgYWRkcmVzcyAqLwotCV9fdTMyIGRhZGRyX21heDsJLyogZXhjbHVzaXZlLCBkZXN0IElQIGFkZHJlc3MgKi8KKwlfX2JlMzIgc2FkZHJfbWluOwkvKiBpbmNsdXNpdmUsIHNvdXJjZSBJUCBhZGRyZXNzICovCisJX19iZTMyIHNhZGRyX21heDsJLyogZXhjbHVzaXZlLCBzb3VyY2UgSVAgYWRkcmVzcyAqLworCV9fYmUzMiBkYWRkcl9taW47CS8qIGluY2x1c2l2ZSwgZGVzdCBJUCBhZGRyZXNzICovCisJX19iZTMyIGRhZGRyX21heDsJLyogZXhjbHVzaXZlLCBkZXN0IElQIGFkZHJlc3MgKi8KIAogCV9fdTE2IHVkcF9zcmNfbWluOwkvKiBpbmNsdXNpdmUsIHNvdXJjZSBVRFAgcG9ydCAqLwogCV9fdTE2IHVkcF9zcmNfbWF4OwkvKiBleGNsdXNpdmUsIHNvdXJjZSBVRFAgcG9ydCAqLwpAQCAtMzE3LDggKzMxNyw4IEBACiAKIAlfX3UzMiBjdXJfZHN0X21hY19vZmZzZXQ7CiAJX191MzIgY3VyX3NyY19tYWNfb2Zmc2V0OwotCV9fdTMyIGN1cl9zYWRkcjsKLQlfX3UzMiBjdXJfZGFkZHI7CisJX19iZTMyIGN1cl9zYWRkcjsKKwlfX2JlMzIgY3VyX2RhZGRyOwogCV9fdTE2IGN1cl91ZHBfZHN0OwogCV9fdTE2IGN1cl91ZHBfc3JjOwogCV9fdTMyIGN1cl9wa3Rfc2l6ZTsKQEAgLTM1MCwxMCArMzUwLDEwIEBACiB9OwogCiBzdHJ1Y3QgcGt0Z2VuX2hkciB7Ci0JX191MzIgcGdoX21hZ2ljOwotCV9fdTMyIHNlcV9udW07Ci0JX191MzIgdHZfc2VjOwotCV9fdTMyIHR2X3VzZWM7CisJX19iZTMyIHBnaF9tYWdpYzsKKwlfX2JlMzIgc2VxX251bTsKKwlfX2JlMzIgdHZfc2VjOworCV9fYmUzMiB0dl91c2VjOwogfTsKIAogc3RydWN0IHBrdGdlbl90aHJlYWQgewpAQCAtMjE2MCw3ICsyMTYwLDcgQEAKIAkJZm9yKGkgPSAwOyBpIDwgcGt0X2Rldi0+bnJfbGFiZWxzOyBpKyspCiAJCQlpZiAocGt0X2Rldi0+bGFiZWxzW2ldICYgTVBMU19TVEFDS19CT1RUT00pCiAJCQkJcGt0X2Rldi0+bGFiZWxzW2ldID0gTVBMU19TVEFDS19CT1RUT00gfAotCQkJCQkJICAgICAocGt0Z2VuX3JhbmRvbSgpICYKKwkJCQkJICAgICAoKF9fZm9yY2UgX19iZTMyKXBrdGdlbl9yYW5kb20oKSAmCiAJCQkJCQkgICAgICBodG9ubCgweDAwMGZmZmZmKSk7CiAJfQogCkBAIC0yMjIwLDI5ICsyMjIwLDI1IEBACiAJCWlmIChwa3RfZGV2LT5jZmxvd3MgJiYgcGt0X2Rldi0+Zmxvd3NbZmxvd10uY291bnQgIT0gMCkgewogCQkJcGt0X2Rldi0+Y3VyX2RhZGRyID0gcGt0X2Rldi0+Zmxvd3NbZmxvd10uY3VyX2RhZGRyOwogCQl9IGVsc2UgewotCi0JCQlpZiAoKGltbiA9IG50b2hsKHBrdF9kZXYtPmRhZGRyX21pbikpIDwgKGlteCA9Ci0JCQkJCQkJCSBudG9obChwa3RfZGV2LT4KLQkJCQkJCQkJICAgICAgIGRhZGRyX21heCkpKQotCQkJeworCQkJaW1uID0gbnRvaGwocGt0X2Rldi0+ZGFkZHJfbWluKTsKKwkJCWlteCA9IG50b2hsKHBrdF9kZXYtPmRhZGRyX21heCk7CisJCQlpZiAoaW1uIDwgaW14KSB7CiAJCQkJX191MzIgdDsKKwkJCQlfX2JlMzIgczsKIAkJCQlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX0lQRFNUX1JORCkgewogCi0JCQkJCXQgPSAoKHBrdGdlbl9yYW5kb20oKSAlIChpbXggLSBpbW4pKSArCi0JCQkJCSAgICAgaW1uKTsKLQkJCQkJdCA9IGh0b25sKHQpOworCQkJCQl0ID0gcGt0Z2VuX3JhbmRvbSgpICUgKGlteCAtIGltbikgKyBpbW47CisJCQkJCXMgPSBodG9ubCh0KTsKIAotCQkJCQl3aGlsZSAoTE9PUEJBQ0sodCkgfHwgTVVMVElDQVNUKHQpCi0JCQkJCSAgICAgICB8fCBCQURDTEFTUyh0KSB8fCBaRVJPTkVUKHQpCi0JCQkJCSAgICAgICB8fCBMT0NBTF9NQ0FTVCh0KSkgewotCQkJCQkJdCA9ICgocGt0Z2VuX3JhbmRvbSgpICUKLQkJCQkJCSAgICAgIChpbXggLSBpbW4pKSArIGltbik7Ci0JCQkJCQl0ID0gaHRvbmwodCk7CisJCQkJCXdoaWxlIChMT09QQkFDSyhzKSB8fCBNVUxUSUNBU1QocykKKwkJCQkJICAgICAgIHx8IEJBRENMQVNTKHMpIHx8IFpFUk9ORVQocykKKwkJCQkJICAgICAgIHx8IExPQ0FMX01DQVNUKHMpKSB7CisJCQkJCQl0ID0gKHBrdGdlbl9yYW5kb20oKSAlCisJCQkJCQkgICAgICAoaW14IC0gaW1uKSkgKyBpbW47CisJCQkJCQlzID0gaHRvbmwodCk7CiAJCQkJCX0KLQkJCQkJcGt0X2Rldi0+Y3VyX2RhZGRyID0gdDsKLQkJCQl9Ci0KLQkJCQllbHNlIHsKKwkJCQkJcGt0X2Rldi0+Y3VyX2RhZGRyID0gczsKKwkJCQl9IGVsc2UgewogCQkJCQl0ID0gbnRvaGwocGt0X2Rldi0+Y3VyX2RhZGRyKTsKIAkJCQkJdCsrOwogCQkJCQlpZiAodCA+IGlteCkgewpAQCAtMjI3MCw3ICsyMjY2LDcgQEAKIAogCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkJCXBrdF9kZXYtPmN1cl9pbjZfZGFkZHIuczZfYWRkcjMyW2ldID0KLQkJCQkgICAgKChwa3RnZW5fcmFuZG9tKCkgfAorCQkJCSAgICAoKChfX2ZvcmNlIF9fYmUzMilwa3RnZW5fcmFuZG9tKCkgfAogCQkJCSAgICAgIHBrdF9kZXYtPm1pbl9pbjZfZGFkZHIuczZfYWRkcjMyW2ldKSAmCiAJCQkJICAgICBwa3RfZGV2LT5tYXhfaW42X2RhZGRyLnM2X2FkZHIzMltpXSk7CiAJCQl9CkBAIC0yMzc3LDcgKzIzNzMsNyBAQAogCXVkcGggPSAoc3RydWN0IHVkcGhkciAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwogCiAJbWVtY3B5KGV0aCwgcGt0X2Rldi0+aGgsIDEyKTsKLQkqKHUxNiAqKSAmIGV0aFsxMl0gPSBwcm90b2NvbDsKKwkqKF9fYmUxNiAqKSAmIGV0aFsxMl0gPSBwcm90b2NvbDsKIAogCS8qIEV0aCArIElQaCArIFVEUGggKyBtcGxzICovCiAJZGF0YWxlbiA9IHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSAtIDE0IC0gMjAgLSA4IC0KQEAgLTI0OTcsNyArMjQ5Myw3IEBACiAJY2hhciBzdWZmaXhbMTZdOwogCXVuc2lnbmVkIGludCBwcmVmaXhsZW4gPSAwOwogCXVuc2lnbmVkIGludCBzdWZmaXhsZW4gPSAwOwotCV9fdTMyIHRtcDsKKwlfX2JlMzIgdG1wOwogCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAJCWlwW2ldID0gMDsKQEAgLTI3MTMsNyArMjcwOSw3IEBACiAJdWRwaCA9IChzdHJ1Y3QgdWRwaGRyICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CiAKIAltZW1jcHkoZXRoLCBwa3RfZGV2LT5oaCwgMTIpOwotCSoodTE2ICopICYgZXRoWzEyXSA9IHByb3RvY29sOworCSooX19iZTE2ICopICYgZXRoWzEyXSA9IHByb3RvY29sOwogCiAJLyogRXRoICsgSVBoICsgVURQaCArIG1wbHMgKi8KIAlkYXRhbGVuID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplIC0gMTQgLQpAQCAtMjczMiwxMSArMjcyOCwxMSBAQAogCXVkcGgtPmxlbiA9IGh0b25zKGRhdGFsZW4gKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwogCXVkcGgtPmNoZWNrID0gMDsJLyogTm8gY2hlY2tzdW0gKi8KIAotCSoodTMyICopIGlwaCA9IF9fY29uc3RhbnRfaHRvbmwoMHg2MDAwMDAwMCk7CS8qIFZlcnNpb24gKyBmbG93ICovCisJKihfX2JlMzIgKikgaXBoID0gX19jb25zdGFudF9odG9ubCgweDYwMDAwMDAwKTsJLyogVmVyc2lvbiArIGZsb3cgKi8KIAogCWlmIChwa3RfZGV2LT50cmFmZmljX2NsYXNzKSB7CiAJCS8qIFZlcnNpb24gKyB0cmFmZmljIGNsYXNzICsgZmxvdyAoMCkgKi8KLQkJKih1MzIgKilpcGggfD0gaHRvbmwoMHg2MDAwMDAwMCB8IChwa3RfZGV2LT50cmFmZmljX2NsYXNzIDw8IDIwKSk7CisJCSooX19iZTMyICopaXBoIHw9IGh0b25sKDB4NjAwMDAwMDAgfCAocGt0X2Rldi0+dHJhZmZpY19jbGFzcyA8PCAyMCkpOwogCX0KIAogCWlwaC0+aG9wX2xpbWl0ID0gMzI7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9yZXF1ZXN0X3NvY2suYyBiL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCmluZGV4IDc5ZWJkNzUuLjVmMDgxOGQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCisrKyBiL25ldC9jb3JlL3JlcXVlc3Rfc29jay5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KIApAQCAtMjksMjIgKzMwLDMxIEBACiAgKiBpdCBpcyBhYnNvbHV0ZWx5IG5vdCBlbm91Z2ggZXZlbiBhdCAxMDBjb25uL3NlYy4gMjU2IGN1cmVzIG1vc3QKICAqIG9mIHByb2JsZW1zLiBUaGlzIHZhbHVlIGlzIGFkanVzdGVkIHRvIDEyOCBmb3IgdmVyeSBzbWFsbCBtYWNoaW5lcwogICogKDw9MzJNYiBvZiBtZW1vcnkpIGFuZCB0byAxMDI0IG9uIG5vcm1hbCBvciBiZXR0ZXIgb25lcyAoPj0yNTZNYikuCi0gKiBGdXJ0aGVyIGluY3JlYXNpbmcgcmVxdWlyZXMgdG8gY2hhbmdlIGhhc2ggdGFibGUgc2l6ZS4KKyAqIE5vdGUgOiBEb250IGZvcmdldCBzb21heGNvbm4gdGhhdCBtYXkgbGltaXQgYmFja2xvZyB0b28uCiAgKi8KIGludCBzeXNjdGxfbWF4X3N5bl9iYWNrbG9nID0gMjU2OwogCiBpbnQgcmVxc2tfcXVldWVfYWxsb2Moc3RydWN0IHJlcXVlc3Rfc29ja19xdWV1ZSAqcXVldWUsCi0JCSAgICAgIGNvbnN0IGludCBucl90YWJsZV9lbnRyaWVzKQorCQkgICAgICB1bnNpZ25lZCBpbnQgbnJfdGFibGVfZW50cmllcykKIHsKLQljb25zdCBpbnQgbG9wdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsaXN0ZW5fc29jaykgKwotCQkJICAgICAgbnJfdGFibGVfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9zb2NrICopOwotCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IGt6YWxsb2MobG9wdF9zaXplLCBHRlBfS0VSTkVMKTsKKwlzaXplX3QgbG9wdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsaXN0ZW5fc29jayk7CisJc3RydWN0IGxpc3Rlbl9zb2NrICpsb3B0OwogCisJbnJfdGFibGVfZW50cmllcyA9IG1pbl90KHUzMiwgbnJfdGFibGVfZW50cmllcywgc3lzY3RsX21heF9zeW5fYmFja2xvZyk7CisJbnJfdGFibGVfZW50cmllcyA9IG1heF90KHUzMiwgbnJfdGFibGVfZW50cmllcywgOCk7CisJbnJfdGFibGVfZW50cmllcyA9IHJvdW5kdXBfcG93X29mX3R3byhucl90YWJsZV9lbnRyaWVzICsgMSk7CisJbG9wdF9zaXplICs9IG5yX3RhYmxlX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IHJlcXVlc3Rfc29jayAqKTsKKwlpZiAobG9wdF9zaXplID4gUEFHRV9TSVpFKQorCQlsb3B0ID0gX192bWFsbG9jKGxvcHRfc2l6ZSwKKwkJCUdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfWkVSTywKKwkJCVBBR0VfS0VSTkVMKTsKKwllbHNlCisJCWxvcHQgPSBremFsbG9jKGxvcHRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGxvcHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlmb3IgKGxvcHQtPm1heF9xbGVuX2xvZyA9IDY7Ci0JICAgICAoMSA8PCBsb3B0LT5tYXhfcWxlbl9sb2cpIDwgc3lzY3RsX21heF9zeW5fYmFja2xvZzsKKwlmb3IgKGxvcHQtPm1heF9xbGVuX2xvZyA9IDM7CisJICAgICAoMSA8PCBsb3B0LT5tYXhfcWxlbl9sb2cpIDwgbnJfdGFibGVfZW50cmllczsKIAkgICAgIGxvcHQtPm1heF9xbGVuX2xvZysrKTsKIAogCWdldF9yYW5kb21fYnl0ZXMoJmxvcHQtPmhhc2hfcm5kLCBzaXplb2YobG9wdC0+aGFzaF9ybmQpKTsKQEAgLTY1LDkgKzc1LDExIEBACiB7CiAJLyogbWFrZSBhbGwgdGhlIGxpc3Rlbl9vcHQgbG9jYWwgdG8gdXMgKi8KIAlzdHJ1Y3QgbGlzdGVuX3NvY2sgKmxvcHQgPSByZXFza19xdWV1ZV95YW5rX2xpc3Rlbl9zayhxdWV1ZSk7CisJc2l6ZV90IGxvcHRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbGlzdGVuX3NvY2spICsKKwkJbG9wdC0+bnJfdGFibGVfZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgcmVxdWVzdF9zb2NrICopOwogCiAJaWYgKGxvcHQtPnFsZW4gIT0gMCkgewotCQlpbnQgaTsKKwkJdW5zaWduZWQgaW50IGk7CiAKIAkJZm9yIChpID0gMDsgaSA8IGxvcHQtPm5yX3RhYmxlX2VudHJpZXM7IGkrKykgewogCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxOwpAQCAtODEsNyArOTMsMTAgQEAKIAl9CiAKIAlCVUdfVFJBUChsb3B0LT5xbGVuID09IDApOwotCWtmcmVlKGxvcHQpOworCWlmIChsb3B0X3NpemUgPiBQQUdFX1NJWkUpCisJCXZmcmVlKGxvcHQpOworCWVsc2UKKwkJa2ZyZWUobG9wdCk7CiB9CiAKIEVYUE9SVF9TWU1CT0wocmVxc2tfcXVldWVfZGVzdHJveSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDAyZjNjNzkuLmU3NjUzOWEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMDgsNyArMTA4LDYgQEAKIAlbUlRNX0ZBTShSVE1fTkVXVENMQVNTKV0gICAgPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCB0Y21zZykpLAogCVtSVE1fRkFNKFJUTV9ORVdURklMVEVSKV0gICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjbXNnKSksCiAJW1JUTV9GQU0oUlRNX05FV0FDVElPTildICAgID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgdGNhbXNnKSksCi0JW1JUTV9GQU0oUlRNX05FV1BSRUZJWCldICAgID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgcnRnZW5tc2cpKSwKIAlbUlRNX0ZBTShSVE1fR0VUTVVMVElDQVNUKV0gPSBOTE1TR19MRU5HVEgoc2l6ZW9mKHN0cnVjdCBydGdlbm1zZykpLAogCVtSVE1fRkFNKFJUTV9HRVRBTllDQVNUKV0gICA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0Z2VubXNnKSksCiB9OwpAQCAtMjEzLDYgKzIxMiwyNiBAQAogCXJldHVybiBubGFfbmVzdF9jYW5jZWwoc2tiLCBteCk7CiB9CiAKK2ludCBydG5sX3B1dF9jYWNoZWluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgaWQsCisJCSAgICAgICB1MzIgdHMsIHUzMiB0c2FnZSwgbG9uZyBleHBpcmVzLCB1MzIgZXJyb3IpCit7CisJc3RydWN0IHJ0YV9jYWNoZWluZm8gY2kgPSB7CisJCS5ydGFfbGFzdHVzZSA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gZHN0LT5sYXN0dXNlKSwKKwkJLnJ0YV91c2VkID0gZHN0LT5fX3VzZSwKKwkJLnJ0YV9jbG50cmVmID0gYXRvbWljX3JlYWQoJihkc3QtPl9fcmVmY250KSksCisJCS5ydGFfZXJyb3IgPSBlcnJvciwKKwkJLnJ0YV9pZCA9ICBpZCwKKwkJLnJ0YV90cyA9IHRzLAorCQkucnRhX3RzYWdlID0gdHNhZ2UsCisJfTsKKworCWlmIChleHBpcmVzKQorCQljaS5ydGFfZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChleHBpcmVzKTsKKworCXJldHVybiBubGFfcHV0KHNrYiwgUlRBX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgJmNpKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocnRubF9wdXRfY2FjaGVpbmZvKTsKIAogc3RhdGljIHZvaWQgc2V0X29wZXJzdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHRyYW5zaXRpb24pCiB7CkBAIC0yNzMsNiArMjkyLDI1IEBACiAJYS0+dHhfY29tcHJlc3NlZCA9IGItPnR4X2NvbXByZXNzZWQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHNpemVfdCBpZl9ubG1zZ19zaXplKGludCBpd2J1ZmxlbikKK3sKKwlyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBJRkxBX0lGTkFNRSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBJRkxBX1FESVNDICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBydG5sX2xpbmtfaWZtYXApKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRubF9saW5rX3N0YXRzKSkKKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShNQVhfQUREUl9MRU4pIC8qIElGTEFfQUREUkVTUyAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKE1BWF9BRERSX0xFTikgLyogSUZMQV9CUk9BRENBU1QgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX1RYUUxFTiAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfV0VJR0hUICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogSUZMQV9NVFUgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX0xJTksgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX01BU1RFUiAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIElGTEFfT1BFUlNUQVRFICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogSUZMQV9MSU5LTU9ERSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKGl3YnVmbGVuKTsKK30KKwogc3RhdGljIGludCBydG5sX2ZpbGxfaWZpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgdm9pZCAqaXdidWYsIGludCBpd2J1ZmxlbiwgaW50IHR5cGUsIHUzMiBwaWQsCiAJCQkgICAgdTMyIHNlcSwgdTMyIGNoYW5nZSwgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtNTU4LDcgKzU5Niw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAJY2hhciAqaXdfYnVmID0gTlVMTCwgKml3ID0gTlVMTDsKIAlpbnQgaXdfYnVmX2xlbiA9IDA7Ci0JaW50IGVyciwgcGF5bG9hZDsKKwlpbnQgZXJyOwogCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkxBX01BWCwgaWZsYV9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQpAQCAtNTg3LDkgKzYyNSw3IEBACiAJfQogI2VuZGlmCS8qIENPTkZJR19ORVRfV0lSRUxFU1NfUlRORVRMSU5LICovCiAKLQlwYXlsb2FkID0gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpICsKLQkJCSAgICAgIG5sYV90b3RhbF9zaXplKGl3X2J1Zl9sZW4pKTsKLQluc2tiID0gbmxtc2dfbmV3KG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCksIEdGUF9LRVJORUwpOworCW5za2IgPSBubG1zZ19uZXcoaWZfbmxtc2dfc2l6ZShpd19idWZfbGVuKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5za2IgPT0gTlVMTCkgewogCQllcnIgPSAtRU5PQlVGUzsKIAkJZ290byBlcnJvdXQ7CkBAIC01OTcsMTAgKzYzMyw4IEBACiAKIAllcnIgPSBydG5sX2ZpbGxfaWZpbmZvKG5za2IsIGRldiwgaXcsIGl3X2J1Zl9sZW4sIFJUTV9ORVdMSU5LLAogCQkJICAgICAgIE5FVExJTktfQ0Ioc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLCAwLCAwKTsKLQlpZiAoZXJyIDw9IDApIHsKLQkJa2ZyZWVfc2tiKG5za2IpOwotCQlnb3RvIGVycm91dDsKLQl9CisJLyogZmFpbHVyZSBpbXBpbGllcyBCVUcgaW4gaWZfbmxtc2dfc2l6ZSBvciB3aXJlbGVzc19ydG5ldGxpbmtfZ2V0ICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF91bmljYXN0KG5za2IsIE5FVExJTktfQ0Ioc2tiKS5waWQpOwogZXJyb3V0OgpAQCAtNjM5LDE1ICs2NzMsMTMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnIgPSAtRU5PQlVGUzsKIAotCXNrYiA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJc2tiID0gbmxtc2dfbmV3KGlmX25sbXNnX3NpemUoMCksIEdGUF9LRVJORUwpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydG5sX2ZpbGxfaWZpbmZvKHNrYiwgZGV2LCBOVUxMLCAwLCB0eXBlLCAwLCAwLCBjaGFuZ2UsIDApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlnb3RvIGVycm91dDsKLQl9CisJLyogZmFpbHVyZSBpbXBsaWVzIEJVRyBpbiBpZl9ubG1zZ19zaXplKCkgKi8KKwlCVUdfT04oZXJyIDwgMCk7CiAKIAllcnIgPSBydG5sX25vdGlmeShza2IsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CiBlcnJvdXQ6CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGI4YjEwNjMuLjhlMWMzODUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgpAQCAtNjcsNiArNjYsOCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCisjaW5jbHVkZSAia21hcF9za2IuaCIKKwogc3RhdGljIGttZW1fY2FjaGVfdCAqc2tidWZmX2hlYWRfY2FjaGUgX19yZWFkX21vc3RseTsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKnNrYnVmZl9mY2xvbmVfY2FjaGUgX19yZWFkX21vc3RseTsKIApAQCAtNDczLDggKzQ3NCw4IEBACiAjZW5kaWYKIAlDKHByb3RvY29sKTsKIAluLT5kZXN0cnVjdG9yID0gTlVMTDsKKwlDKG1hcmspOwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKLQlDKG5mbWFyayk7CiAJQyhuZmN0KTsKIAluZl9jb25udHJhY2tfZ2V0KHNrYi0+bmZjdCk7CiAJQyhuZmN0aW5mbyk7CkBAIC01MzQsOCArNTM1LDggQEAKIAluZXctPnBrdF90eXBlCT0gb2xkLT5wa3RfdHlwZTsKIAluZXctPnRzdGFtcAk9IG9sZC0+dHN0YW1wOwogCW5ldy0+ZGVzdHJ1Y3RvciA9IE5VTEw7CisJbmV3LT5tYXJrCT0gb2xkLT5tYXJrOwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKLQluZXctPm5mbWFyawk9IG9sZC0+bmZtYXJrOwogCW5ldy0+bmZjdAk9IG9sZC0+bmZjdDsKIAluZl9jb25udHJhY2tfZ2V0KG9sZC0+bmZjdCk7CiAJbmV3LT5uZmN0aW5mbwk9IG9sZC0+bmZjdGluZm87CkBAIC0xMjQwLDggKzEyNDEsOCBAQAogCiAvKiBDaGVja3N1bSBza2IgZGF0YS4gKi8KIAotdW5zaWduZWQgaW50IHNrYl9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAotCQkJICBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgY3N1bSkKK19fd3N1bSBza2JfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9mZnNldCwKKwkJCSAgaW50IGxlbiwgX193c3VtIGNzdW0pCiB7CiAJaW50IHN0YXJ0ID0gc2tiX2hlYWRsZW4oc2tiKTsKIAlpbnQgaSwgY29weSA9IHN0YXJ0IC0gb2Zmc2V0OwpAQCAtMTI2NSw3ICsxMjY2LDcgQEAKIAogCQllbmQgPSBzdGFydCArIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKIAkJaWYgKChjb3B5ID0gZW5kIC0gb2Zmc2V0KSA+IDApIHsKLQkJCXVuc2lnbmVkIGludCBjc3VtMjsKKwkJCV9fd3N1bSBjc3VtMjsKIAkJCXU4ICp2YWRkcjsKIAkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKIApAQCAtMTI5NCw3ICsxMjk1LDcgQEAKIAogCQkJZW5kID0gc3RhcnQgKyBsaXN0LT5sZW47CiAJCQlpZiAoKGNvcHkgPSBlbmQgLSBvZmZzZXQpID4gMCkgewotCQkJCXVuc2lnbmVkIGludCBjc3VtMjsKKwkJCQlfX3dzdW0gY3N1bTI7CiAJCQkJaWYgKGNvcHkgPiBsZW4pCiAJCQkJCWNvcHkgPSBsZW47CiAJCQkJY3N1bTIgPSBza2JfY2hlY2tzdW0obGlzdCwgb2Zmc2V0IC0gc3RhcnQsCkBAIC0xMzE1LDggKzEzMTYsOCBAQAogCiAvKiBCb3RoIG9mIGFib3ZlIGluIG9uZSBib3R0bGUuICovCiAKLXVuc2lnbmVkIGludCBza2JfY29weV9hbmRfY3N1bV9iaXRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsCi0JCQkJICAgIHU4ICp0bywgaW50IGxlbiwgdW5zaWduZWQgaW50IGNzdW0pCitfX3dzdW0gc2tiX2NvcHlfYW5kX2NzdW1fYml0cyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2Zmc2V0LAorCQkJCSAgICB1OCAqdG8sIGludCBsZW4sIF9fd3N1bSBjc3VtKQogewogCWludCBzdGFydCA9IHNrYl9oZWFkbGVuKHNrYik7CiAJaW50IGksIGNvcHkgPSBzdGFydCAtIG9mZnNldDsKQEAgLTEzNDIsNyArMTM0Myw3IEBACiAKIAkJZW5kID0gc3RhcnQgKyBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAJCWlmICgoY29weSA9IGVuZCAtIG9mZnNldCkgPiAwKSB7Ci0JCQl1bnNpZ25lZCBpbnQgY3N1bTI7CisJCQlfX3dzdW0gY3N1bTI7CiAJCQl1OCAqdmFkZHI7CiAJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CiAKQEAgLTEzNjgsNyArMTM2OSw3IEBACiAJCXN0cnVjdCBza19idWZmICpsaXN0ID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CiAKIAkJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7Ci0JCQl1bnNpZ25lZCBpbnQgY3N1bTI7CisJCQlfX3dzdW0gY3N1bTI7CiAJCQlpbnQgZW5kOwogCiAJCQlCVUdfVFJBUChzdGFydCA8PSBvZmZzZXQgKyBsZW4pOwpAQCAtMTM5Niw3ICsxMzk3LDcgQEAKIAogdm9pZCBza2JfY29weV9hbmRfY3N1bV9kZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnRvKQogewotCXVuc2lnbmVkIGludCBjc3VtOworCV9fd3N1bSBjc3VtOwogCWxvbmcgY3NzdGFydDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQpAQCAtMTQxNCw5ICsxNDE1LDkgQEAKIAkJCQkJICAgICAgc2tiLT5sZW4gLSBjc3N0YXJ0LCAwKTsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCWxvbmcgY3NzdHVmZiA9IGNzc3RhcnQgKyBza2ItPmNzdW07CisJCWxvbmcgY3NzdHVmZiA9IGNzc3RhcnQgKyBza2ItPmNzdW1fb2Zmc2V0OwogCi0JCSooKHVuc2lnbmVkIHNob3J0ICopKHRvICsgY3NzdHVmZikpID0gY3N1bV9mb2xkKGNzdW0pOworCQkqKChfX3N1bTE2ICopKHRvICsgY3NzdHVmZikpID0gY3N1bV9mb2xkKGNzdW0pOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGVlNmNkMjUuLjQxOWM3ZDMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0yNzAsNyArMjcxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29ja19xdWV1ZV9yY3Zfc2tiKTsKIAotaW50IHNrX3JlY2VpdmVfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBza19yZWNlaXZlX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGludCBuZXN0ZWQpCiB7CiAJaW50IHJjID0gTkVUX1JYX1NVQ0NFU1M7CiAKQEAgLTI3OSw3ICsyODAsMTAgQEAKIAogCXNrYi0+ZGV2ID0gTlVMTDsKIAotCWJoX2xvY2tfc29jayhzayk7CisJaWYgKG5lc3RlZCkKKwkJYmhfbG9ja19zb2NrX25lc3RlZChzayk7CisJZWxzZQorCQliaF9sb2NrX3NvY2soc2spOwogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewogCQkvKgogCQkgKiB0cnlsb2NrICsgdW5sb2NrIHNlbWFudGljczoKQEAgLTE1MjcsNyArMTUzMSw3IEBACiAJYXRvbWljX3NldCgmc2stPnNrX3JlZmNudCwgMSk7CiB9CiAKLXZvaWQgZmFzdGNhbGwgbG9ja19zb2NrKHN0cnVjdCBzb2NrICpzaykKK3ZvaWQgZmFzdGNhbGwgbG9ja19zb2NrX25lc3RlZChzdHJ1Y3Qgc29jayAqc2ssIGludCBzdWJjbGFzcykKIHsKIAltaWdodF9zbGVlcCgpOwogCXNwaW5fbG9ja19iaCgmc2stPnNrX2xvY2suc2xvY2spOwpAQCAtMTUzOCwxMSArMTU0MiwxMSBAQAogCS8qCiAJICogVGhlIHNrX2xvY2sgaGFzIG11dGV4X2xvY2soKSBzZW1hbnRpY3MgaGVyZToKIAkgKi8KLQltdXRleF9hY3F1aXJlKCZzay0+c2tfbG9jay5kZXBfbWFwLCAwLCAwLCBfUkVUX0lQXyk7CisJbXV0ZXhfYWNxdWlyZSgmc2stPnNrX2xvY2suZGVwX21hcCwgc3ViY2xhc3MsIDAsIF9SRVRfSVBfKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAotRVhQT1JUX1NZTUJPTChsb2NrX3NvY2spOworRVhQT1JUX1NZTUJPTChsb2NrX3NvY2tfbmVzdGVkKTsKIAogdm9pZCBmYXN0Y2FsbCByZWxlYXNlX3NvY2soc3RydWN0IHNvY2sgKnNrKQogewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwppbmRleCAwMjUzNDEzLi4xZTc1YjE1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYworKysgYi9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYwpAQCAtMjEsMTAgKzIxLDYgQEAKIAogZXh0ZXJuIGludCBzeXNjdGxfY29yZV9kZXN0cm95X2RlbGF5OwogCi0jaWZkZWYgQ09ORklHX05FVF9ESVZFUlQKLWV4dGVybiBjaGFyIHN5c2N0bF9kaXZlcnRfdmVyc2lvbltdOwotI2VuZGlmIC8qIENPTkZJR19ORVRfRElWRVJUICovCi0KICNpZmRlZiBDT05GSUdfWEZSTQogZXh0ZXJuIHUzMiBzeXNjdGxfeGZybV9hZXZlbnRfZXRpbWU7CiBleHRlcm4gdTMyIHN5c2N0bF94ZnJtX2FldmVudF9yc2VxdGg7CkBAIC0xMDUsMTYgKzEwMSw2IEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwogCX0sCi0jaWZkZWYgQ09ORklHX05FVF9ESVZFUlQKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9DT1JFX0RJVkVSVF9WRVJTSU9OLAotCQkucHJvY25hbWUJPSAiZGl2ZXJ0X3ZlcnNpb24iLAotCQkuZGF0YQkJPSAodm9pZCAqKXN5c2N0bF9kaXZlcnRfdmVyc2lvbiwKLQkJLm1heGxlbgkJPSAzMiwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2Rvc3RyaW5nCi0JfSwKLSNlbmRpZiAvKiBDT05GSUdfTkVUX0RJVkVSVCAqLwogI2lmZGVmIENPTkZJR19YRlJNCiAJewogCQkuY3RsX25hbWUJPSBORVRfQ09SRV9BRVZFTlRfRVRJTUUsCmRpZmYgLS1naXQgYS9uZXQvY29yZS91dGlscy5jIGIvbmV0L2NvcmUvdXRpbHMuYwppbmRleCBkOTNmZTY0Li42MTU1NjA2IDEwMDY0NAotLS0gYS9uZXQvY29yZS91dGlscy5jCisrKyBiL25ldC9jb3JlL3V0aWxzLmMKQEAgLTg4LDcgKzg4LDcgQEAKICNkZWZpbmUgSU42UFRPTl9OVUxMCQkweDIwMDAwMDAwCS8qIGZpcnN0L3RhaWwgKi8KICNkZWZpbmUgSU42UFRPTl9VTktOT1dOCQkweDQwMDAwMDAwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGRpZ2l0MmJpbihjaGFyIGMsIGNoYXIgZGVsaW0pCitzdGF0aWMgaW5saW5lIGludCBkaWdpdDJiaW4oY2hhciBjLCBpbnQgZGVsaW0pCiB7CiAJaWYgKGMgPT0gZGVsaW0gfHwgYyA9PSAnXDAnKQogCQlyZXR1cm4gSU42UFRPTl9ERUxJTTsKQEAgLTk5LDcgKzk5LDcgQEAKIAlyZXR1cm4gSU42UFRPTl9VTktOT1dOOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB4ZGlnaXQyYmluKGNoYXIgYywgY2hhciBkZWxpbSkKK3N0YXRpYyBpbmxpbmUgaW50IHhkaWdpdDJiaW4oY2hhciBjLCBpbnQgZGVsaW0pCiB7CiAJaWYgKGMgPT0gZGVsaW0gfHwgYyA9PSAnXDAnKQogCQlyZXR1cm4gSU42UFRPTl9ERUxJTTsKQEAgLTExMywxMiArMTEzLDE0IEBACiAJCXJldHVybiAoSU42UFRPTl9YRElHSVQgfCAoYyAtICdhJyArIDEwKSk7CiAJaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKQogCQlyZXR1cm4gKElONlBUT05fWERJR0lUIHwgKGMgLSAnQScgKyAxMCkpOworCWlmIChkZWxpbSA9PSAtMSkKKwkJcmV0dXJuIElONlBUT05fREVMSU07CiAJcmV0dXJuIElONlBUT05fVU5LTk9XTjsKIH0KIAogaW50IGluNF9wdG9uKGNvbnN0IGNoYXIgKnNyYywgaW50IHNyY2xlbiwKIAkgICAgIHU4ICpkc3QsCi0JICAgICBjaGFyIGRlbGltLCBjb25zdCBjaGFyICoqZW5kKQorCSAgICAgaW50IGRlbGltLCBjb25zdCBjaGFyICoqZW5kKQogewogCWNvbnN0IGNoYXIgKnM7CiAJdTggKmQ7CkBAIC0xNzMsNyArMTc1LDcgQEAKIAogaW50IGluNl9wdG9uKGNvbnN0IGNoYXIgKnNyYywgaW50IHNyY2xlbiwKIAkgICAgIHU4ICpkc3QsCi0JICAgICBjaGFyIGRlbGltLCBjb25zdCBjaGFyICoqZW5kKQorCSAgICAgaW50IGRlbGltLCBjb25zdCBjaGFyICoqZW5kKQogewogCWNvbnN0IGNoYXIgKnMsICp0b2sgPSBOVUxMOwogCXU4ICpkLCAqZGMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvS2NvbmZpZyBiL25ldC9kY2NwL0tjb25maWcKaW5kZXggZWY4OTE5Yy4uYjhhNjhkZCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvS2NvbmZpZworKysgYi9uZXQvZGNjcC9LY29uZmlnCkBAIC0zOCw2ICszOCw5IEBACiAJLS0taGVscC0tLQogCSAgT25seSB1c2UgdGhpcyBpZiB5b3UncmUgaGFja2luZyBEQ0NQLgogCisJICBXaGVuIGNvbXBpbGluZyBEQ0NQIGFzIGEgbW9kdWxlLCB0aGlzIGRlYnVnZ2luZyBvdXRwdXQgY2FuIGJlIHRvZ2dsZWQKKwkgIGJ5IHNldHRpbmcgdGhlIHBhcmFtZXRlciBkY2NwX2RlYnVnIG9mIHRoZSBgZGNjcCcgbW9kdWxlIHRvIDAgb3IgMS4KKwogCSAgSnVzdCBzYXkgTi4KIAogY29uZmlnIE5FVF9EQ0NQUFJPQkUKQEAgLTQ5LDcgKzUyLDcgQEAKIAlEQ0NQIGNvbmdlc3Rpb24gYXZvaWRhbmNlIG1vZHVsZXMuIElmIHlvdSBkb24ndCB1bmRlcnN0YW5kCiAJd2hhdCB3YXMganVzdCBzYWlkLCB5b3UgZG9uJ3QgbmVlZCBpdDogc2F5IE4uCiAKLQlEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIHBhY2tldCBnZW5lcmF0b3IgY2FuIGJlIGZvdW5kCisJRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIERDQ1AgY29ubmVjdGlvbiBwcm9iaW5nIGNhbiBiZSBmb3VuZAogCWF0IGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0RjY3BQcm9iZQogCiAJVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvTWFrZWZpbGUgYi9uZXQvZGNjcC9NYWtlZmlsZQppbmRleCAxN2VkOTljLi5mNGY4NzkzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9NYWtlZmlsZQorKysgYi9uZXQvZGNjcC9NYWtlZmlsZQpAQCAtMSwxMyArMSwxMyBAQAotb2JqLSQoQ09ORklHX0lQVjYpICs9IGRjY3BfaXB2Ni5vCi0KLWRjY3BfaXB2Ni15IDo9IGlwdjYubwotCiBvYmotJChDT05GSUdfSVBfRENDUCkgKz0gZGNjcC5vIGRjY3BfaXB2NC5vCiAKIGRjY3AteSA6PSBjY2lkLm8gZmVhdC5vIGlucHV0Lm8gbWluaXNvY2tzLm8gb3B0aW9ucy5vIG91dHB1dC5vIHByb3RvLm8gdGltZXIubwogCiBkY2NwX2lwdjQteSA6PSBpcHY0Lm8KIAorIyBidWlsZCBkY2NwX2lwdjYgYXMgbW9kdWxlIHdoZW5ldmVyIGVpdGhlciBJUHY2IG9yIERDQ1AgaXMgYSBtb2R1bGUKK29iai0kKHN1YnN0IHksJChDT05GSUdfSVBfRENDUCksJChDT05GSUdfSVBWNikpICs9IGRjY3BfaXB2Ni5vCitkY2NwX2lwdjYteSA6PSBpcHY2Lm8KKwogZGNjcC0kKENPTkZJR19JUF9EQ0NQX0FDS1ZFQykgKz0gYWNrdmVjLm8KIAogb2JqLSQoQ09ORklHX0lORVRfRENDUF9ESUFHKSArPSBkY2NwX2RpYWcubwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvYWNrdmVjLmMgYi9uZXQvZGNjcC9hY2t2ZWMuYwppbmRleCBmODIwODg3Li5iZGYxYmI3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9hY2t2ZWMuYworKysgYi9uZXQvZGNjcC9hY2t2ZWMuYwpAQCAtNjcsMTUgKzY3LDE2IEBACiBpbnQgZGNjcF9pbnNlcnRfb3B0aW9uX2Fja3ZlYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwotCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9IGRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPwotCQkJCSJDTElFTlQgdHg6ICIgOiAic2VydmVyIHR4OiAiOwotI2VuZGlmCiAJc3RydWN0IGRjY3BfYWNrdmVjICphdiA9IGRwLT5kY2Nwc19oY19yeF9hY2t2ZWM7Ci0JaW50IGxlbiA9IGF2LT5kY2NwYXZfdmVjX2xlbiArIDI7CisJLyogRmlndXJlIG91dCBob3cgbWFueSBvcHRpb25zIGRvIHdlIG5lZWQgdG8gcmVwcmVzZW50IHRoZSBhY2t2ZWMgKi8KKwljb25zdCB1MTYgbnJfb3B0cyA9IChhdi0+ZGNjcGF2X3ZlY19sZW4gKworCQkJICAgICBEQ0NQX01BWF9BQ0tWRUNfT1BUX0xFTiAtIDEpIC8KKwkJCSAgICBEQ0NQX01BWF9BQ0tWRUNfT1BUX0xFTjsKKwl1MTYgbGVuID0gYXYtPmRjY3Bhdl92ZWNfbGVuICsgMiAqIG5yX29wdHMsIGk7CiAJc3RydWN0IHRpbWV2YWwgbm93OwogCXUzMiBlbGFwc2VkX3RpbWU7Ci0JdW5zaWduZWQgY2hhciAqdG8sICpmcm9tOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhaWwsICpmcm9tOworCXVuc2lnbmVkIGNoYXIgKnRvOwogCXN0cnVjdCBkY2NwX2Fja3ZlY19yZWNvcmQgKmF2cjsKIAogCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9vcHRfbGVuICsgbGVuID4gRENDUF9NQVhfT1BUX0xFTikKQEAgLTk0LDI0ICs5NSwzNyBAQAogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArPSBsZW47CiAKLQl0byAgICA9IHNrYl9wdXNoKHNrYiwgbGVuKTsKLQkqdG8rKyA9IERDQ1BPX0FDS19WRUNUT1JfMDsKLQkqdG8rKyA9IGxlbjsKLQorCXRvICAgPSBza2JfcHVzaChza2IsIGxlbik7CiAJbGVuICA9IGF2LT5kY2NwYXZfdmVjX2xlbjsKIAlmcm9tID0gYXYtPmRjY3Bhdl9idWYgKyBhdi0+ZGNjcGF2X2J1Zl9oZWFkOworCXRhaWwgPSBhdi0+ZGNjcGF2X2J1ZiArIERDQ1BfTUFYX0FDS1ZFQ19MRU47CiAKLQkvKiBDaGVjayBpZiBidWZfaGVhZCB3cmFwcyAqLwotCWlmICgoaW50KWF2LT5kY2NwYXZfYnVmX2hlYWQgKyBsZW4gPiBEQ0NQX01BWF9BQ0tWRUNfTEVOKSB7Ci0JCWNvbnN0IHUzMiB0YWlsc2l6ZSA9IERDQ1BfTUFYX0FDS1ZFQ19MRU4gLSBhdi0+ZGNjcGF2X2J1Zl9oZWFkOworCWZvciAoaSA9IDA7IGkgPCBucl9vcHRzOyArK2kpIHsKKwkJaW50IGNvcHlsZW4gPSBsZW47CiAKLQkJbWVtY3B5KHRvLCBmcm9tLCB0YWlsc2l6ZSk7Ci0JCXRvICAgKz0gdGFpbHNpemU7Ci0JCWxlbiAgLT0gdGFpbHNpemU7Ci0JCWZyb20gPSBhdi0+ZGNjcGF2X2J1ZjsKKwkJaWYgKGxlbiA+IERDQ1BfTUFYX0FDS1ZFQ19PUFRfTEVOKQorCQkJY29weWxlbiA9IERDQ1BfTUFYX0FDS1ZFQ19PUFRfTEVOOworCisJCSp0bysrID0gRENDUE9fQUNLX1ZFQ1RPUl8wOworCQkqdG8rKyA9IGNvcHlsZW4gKyAyOworCisJCS8qIENoZWNrIGlmIGJ1Zl9oZWFkIHdyYXBzICovCisJCWlmIChmcm9tICsgY29weWxlbiA+IHRhaWwpIHsKKwkJCWNvbnN0IHUxNiB0YWlsc2l6ZSA9IHRhaWwgLSBmcm9tOworCisJCQltZW1jcHkodG8sIGZyb20sIHRhaWxzaXplKTsKKwkJCXRvCSs9IHRhaWxzaXplOworCQkJbGVuCS09IHRhaWxzaXplOworCQkJY29weWxlbgktPSB0YWlsc2l6ZTsKKwkJCWZyb20JPSBhdi0+ZGNjcGF2X2J1ZjsKKwkJfQorCisJCW1lbWNweSh0bywgZnJvbSwgY29weWxlbik7CisJCWZyb20gKz0gY29weWxlbjsKKwkJdG8gICArPSBjb3B5bGVuOworCQlsZW4gIC09IGNvcHlsZW47CiAJfQogCi0JbWVtY3B5KHRvLCBmcm9tLCBsZW4pOwogCS8qCiAJICoJRnJvbSBSRkMgNDM0MCwgQS4yOgogCSAqCkBAIC0xMjksOSArMTQzLDkgQEAKIAogCWRjY3BfYWNrdmVjX2luc2VydF9hdnIoYXYsIGF2cik7CiAKLQlkY2NwX3ByX2RlYnVnKCIlc0FDSyBWZWN0b3IgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgorCWRjY3BfcHJfZGVidWcoIiVzIEFDSyBWZWN0b3IgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgogCQkgICAgICAiYWNrX2Fja25vPSVsbHVcbiIsCi0JCSAgICAgIGRlYnVnX3ByZWZpeCwgYXZyLT5kY2NwYXZyX3NlbnRfbGVuLAorCQkgICAgICBkY2NwX3JvbGUoc2spLCBhdnItPmRjY3BhdnJfc2VudF9sZW4sCiAJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXZyLT5kY2NwYXZyX2Fja19zZXFubywKIAkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmRjY3BhdnJfYWNrX2Fja25vKTsKIAlyZXR1cm4gMDsKQEAgLTE0NSw3ICsxNTksNiBAQAogCQlhdi0+ZGNjcGF2X2J1Zl9oZWFkCT0gRENDUF9NQVhfQUNLVkVDX0xFTiAtIDE7CiAJCWF2LT5kY2NwYXZfYnVmX2Fja25vCT0gRENDUF9NQVhfU0VRTk8gKyAxOwogCQlhdi0+ZGNjcGF2X2J1Zl9ub25jZSA9IGF2LT5kY2NwYXZfYnVmX25vbmNlID0gMDsKLQkJYXYtPmRjY3Bhdl9hY2tfcHRyCT0gMDsKIAkJYXYtPmRjY3Bhdl90aW1lLnR2X3NlYwk9IDA7CiAJCWF2LT5kY2NwYXZfdGltZS50dl91c2VjCT0gMDsKIAkJYXYtPmRjY3Bhdl92ZWNfbGVuCT0gMDsKQEAgLTE3NCwxMyArMTg3LDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdTggZGNjcF9hY2t2ZWNfc3RhdGUoY29uc3Qgc3RydWN0IGRjY3BfYWNrdmVjICphdiwKLQkJCQkgICBjb25zdCB1OCBpbmRleCkKKwkJCQkgICBjb25zdCB1MzIgaW5kZXgpCiB7CiAJcmV0dXJuIGF2LT5kY2NwYXZfYnVmW2luZGV4XSAmIERDQ1BfQUNLVkVDX1NUQVRFX01BU0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTggZGNjcF9hY2t2ZWNfbGVuKGNvbnN0IHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCi0JCQkJIGNvbnN0IHU4IGluZGV4KQorCQkJCSBjb25zdCB1MzIgaW5kZXgpCiB7CiAJcmV0dXJuIGF2LT5kY2NwYXZfYnVmW2luZGV4XSAmIERDQ1BfQUNLVkVDX0xFTl9NQVNLOwogfQpAQCAtMjgwLDcgKzI5Myw3IEBACiAJCSAqCWNvdWxkIHJlZHVjZSB0aGUgY29tcGxleGl0eSBvZiB0aGlzIHNjYW4uKQogCQkgKi8KIAkJdTY0IGRlbHRhID0gZGNjcF9kZWx0YV9zZXFubyhhY2tubywgYXYtPmRjY3Bhdl9idWZfYWNrbm8pOwotCQl1OCBpbmRleCA9IGF2LT5kY2NwYXZfYnVmX2hlYWQ7CisJCXUzMiBpbmRleCA9IGF2LT5kY2NwYXZfYnVmX2hlYWQ7CiAKIAkJd2hpbGUgKDEpIHsKIAkJCWNvbnN0IHU4IGxlbiA9IGRjY3BfYWNrdmVjX2xlbihhdiwgaW5kZXgpOwpAQCAtMzIyLDIxICszMzUsMTggQEAKICNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwogdm9pZCBkY2NwX2Fja3ZlY3Rvcl9wcmludChjb25zdCB1NjQgYWNrbm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvciwgaW50IGxlbikKIHsKLQlpZiAoIWRjY3BfZGVidWcpCi0JCXJldHVybjsKLQotCXByaW50aygiQUNLIHZlY3RvciBsZW49JWQsIGFja25vPSVsbHUgfCIsIGxlbiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhY2tubyk7CisJZGNjcF9wcl9kZWJ1Z19jYXQoIkFDSyB2ZWN0b3IgbGVuPSVkLCBhY2tubz0lbGx1IHwiLCBsZW4sCisJCQkgCQkodW5zaWduZWQgbG9uZyBsb25nKWFja25vKTsKIAogCXdoaWxlIChsZW4tLSkgewogCQljb25zdCB1OCBzdGF0ZSA9ICgqdmVjdG9yICYgRENDUF9BQ0tWRUNfU1RBVEVfTUFTSykgPj4gNjsKIAkJY29uc3QgdTggcmwgPSAqdmVjdG9yICYgRENDUF9BQ0tWRUNfTEVOX01BU0s7CiAKLQkJcHJpbnRrKCIlZCwlZHwiLCBzdGF0ZSwgcmwpOworCQlkY2NwX3ByX2RlYnVnX2NhdCgiJWQsJWR8Iiwgc3RhdGUsIHJsKTsKIAkJKyt2ZWN0b3I7CiAJfQogCi0JcHJpbnRrKCJcbiIpOworCWRjY3BfcHJfZGVidWdfY2F0KCJcbiIpOwogfQogCiB2b2lkIGRjY3BfYWNrdmVjX3ByaW50KGNvbnN0IHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYpCkBAIC0zODAsMjQgKzM5MCwyMCBAQAogCSAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShhdnIsICZhdi0+ZGNjcGF2X3JlY29yZHMsIGRjY3BhdnJfbm9kZSkgewogCQlpZiAoYWNrbm8gPT0gYXZyLT5kY2NwYXZyX2Fja19zZXFubykgewotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi0JCQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCQkJY29uc3QgY2hhciAqZGVidWdfcHJlZml4ID0gZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/Ci0JCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOwotI2VuZGlmCi0JCQlkY2NwX3ByX2RlYnVnKCIlc0FDSyBwYWNrZXQgMCwgbGVuPSVkLCBhY2tfc2Vxbm89JWxsdSwgIgorCQkJZGNjcF9wcl9kZWJ1ZygiJXMgQUNLIHBhY2tldCAwLCBsZW49JWQsIGFja19zZXFubz0lbGx1LCAiCiAJCQkJICAgICAgImFja19hY2tubz0lbGx1LCBBQ0tFRCFcbiIsCi0JCQkJICAgICAgZGVidWdfcHJlZml4LCAxLAorCQkJCSAgICAgIGRjY3Bfcm9sZShzayksIDEsCiAJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhdnItPmRjY3BhdnJfYWNrX3NlcW5vLAogCQkJCSAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYXZyLT5kY2NwYXZyX2Fja19hY2tubyk7CiAJCQlkY2NwX2Fja3ZlY190aHJvd19yZWNvcmQoYXYsIGF2cik7CiAJCQlicmVhazsKLQkJfQorCQl9IGVsc2UgaWYgKGF2ci0+ZGNjcGF2cl9hY2tfc2Vxbm8gPiBhY2tubykKKwkJCWJyZWFrOyAvKiBvbGQgbmV3cyAqLwogCX0KIH0KIAogc3RhdGljIHZvaWQgZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja3ZlY3RvcihzdHJ1Y3QgZGNjcF9hY2t2ZWMgKmF2LAotCQkJCQkgICAgc3RydWN0IHNvY2sgKnNrLCB1NjQgYWNrbm8sCisJCQkJCSAgICBzdHJ1Y3Qgc29jayAqc2ssIHU2NCAqYWNrbm8sCiAJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGxlbiwKIAkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZlY3RvcikKIHsKQEAgLTQyMCw3ICs0MjYsNyBAQAogCQljb25zdCB1OCBybCA9ICp2ZWN0b3IgJiBEQ0NQX0FDS1ZFQ19MRU5fTUFTSzsKIAkJdTY0IGFja25vX2VuZF9ybDsKIAotCQlkY2NwX3NldF9zZXFubygmYWNrbm9fZW5kX3JsLCBhY2tubyAtIHJsKTsKKwkJZGNjcF9zZXRfc2Vxbm8oJmFja25vX2VuZF9ybCwgKmFja25vIC0gcmwpOwogCiAJCS8qCiAJCSAqIElmIG91ciBBVlIgc2VxdWVuY2UgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgYWNrLCBnbwpAQCAtNDI4LDI1ICs0MzQsMTkgQEAKIAkJICovCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShhdnIsICZhdi0+ZGNjcGF2X3JlY29yZHMsCiAJCQkJCSBkY2NwYXZyX25vZGUpIHsKLQkJCWlmICghYWZ0ZXI0OChhdnItPmRjY3BhdnJfYWNrX3NlcW5vLCBhY2tubykpCisJCQlpZiAoIWFmdGVyNDgoYXZyLT5kY2NwYXZyX2Fja19zZXFubywgKmFja25vKSkKIAkJCQlnb3RvIGZvdW5kOwogCQl9CiAJCS8qIEVuZCBvZiB0aGUgZGNjcGF2X3JlY29yZHMgbGlzdCwgbm90IGZvdW5kLCBleGl0ICovCiAJCWJyZWFrOwogZm91bmQ6Ci0JCWlmIChiZXR3ZWVuNDgoYXZyLT5kY2NwYXZyX2Fja19zZXFubywgYWNrbm9fZW5kX3JsLCBhY2tubykpIHsKKwkJaWYgKGJldHdlZW40OChhdnItPmRjY3BhdnJfYWNrX3NlcW5vLCBhY2tub19lbmRfcmwsICphY2tubykpIHsKIAkJCWNvbnN0IHU4IHN0YXRlID0gKnZlY3RvciAmIERDQ1BfQUNLVkVDX1NUQVRFX01BU0s7CiAJCQlpZiAoc3RhdGUgIT0gRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVEKSB7Ci0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLQkJCQlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCQkJCWNvbnN0IGNoYXIgKmRlYnVnX3ByZWZpeCA9Ci0JCQkJCWRwLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQgPwotCQkJCQkiQ0xJRU5UIHJ4IGFjazogIiA6ICJzZXJ2ZXIgcnggYWNrOiAiOwotI2VuZGlmCi0JCQkJZGNjcF9wcl9kZWJ1ZygiJXNBQ0sgdmVjdG9yIDAsIGxlbj0lZCwgIgorCQkJCWRjY3BfcHJfZGVidWcoIiVzIEFDSyB2ZWN0b3IgMCwgbGVuPSVkLCAiCiAJCQkJCSAgICAgICJhY2tfc2Vxbm89JWxsdSwgYWNrX2Fja25vPSVsbHUsICIKIAkJCQkJICAgICAgIkFDS0VEIVxuIiwKLQkJCQkJICAgICAgZGVidWdfcHJlZml4LCBsZW4sCisJCQkJCSAgICAgIGRjY3Bfcm9sZShzayksIGxlbiwKIAkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKIAkJCQkJICAgICAgYXZyLT5kY2NwYXZyX2Fja19zZXFubywKIAkJCQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKQEAgLTQ2MCwyNyArNDYwLDIzIEBACiAJCQkgKi8KIAkJfQogCi0JCWRjY3Bfc2V0X3NlcW5vKCZhY2tubywgYWNrbm9fZW5kX3JsIC0gMSk7CisJCWRjY3Bfc2V0X3NlcW5vKGFja25vLCBhY2tub19lbmRfcmwgLSAxKTsKIAkJKyt2ZWN0b3I7CiAJfQogfQogCiBpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgICBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKQorCQkgICAgICB1NjQgKmFja25vLCBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKQogewotCWlmIChsZW4gPiBEQ0NQX01BWF9BQ0tWRUNfTEVOKQorCWlmIChsZW4gPiBEQ0NQX01BWF9BQ0tWRUNfT1BUX0xFTikKIAkJcmV0dXJuIC0xOwogCiAJLyogZGNjcF9hY2t2ZWN0b3JfcHJpbnQoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSwgdmFsdWUsIGxlbik7ICovCiAJZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja3ZlY3RvcihkY2NwX3NrKHNrKS0+ZGNjcHNfaGNfcnhfYWNrdmVjLCBzaywKLQkJCQkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSwKLQkJCQkgICAgICAgIGxlbiwgdmFsdWUpOworCQkJCQlhY2tubywgbGVuLCB2YWx1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjaGFyIGRjY3BfYWNrdmVjX3NsYWJfbXNnW10gX19pbml0ZGF0YSA9Ci0JS0VSTl9DUklUICJEQ0NQOiBVbmFibGUgdG8gY3JlYXRlIGFjayB2ZWN0b3JzIHNsYWIgY2FjaGVzXG4iOwotCiBpbnQgX19pbml0IGRjY3BfYWNrdmVjX2luaXQodm9pZCkKIHsKIAlkY2NwX2Fja3ZlY19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoImRjY3BfYWNrdmVjIiwKQEAgLTUwMiw3ICs0OTgsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveShkY2NwX2Fja3ZlY19zbGFiKTsKIAlkY2NwX2Fja3ZlY19zbGFiID0gTlVMTDsKIG91dF9lcnI6Ci0JcHJpbnRrKGRjY3BfYWNrdmVjX3NsYWJfbXNnKTsKKwlEQ0NQX0NSSVQoIlVuYWJsZSB0byBjcmVhdGUgQWNrIFZlY3RvciBzbGFiIGNhY2hlIik7CiAJcmV0dXJuIC1FTk9CVUZTOwogfQogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IGNmOGYyMGMuLjk2NTA0YTMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0xNyw3ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogUmVhZCBhYm91dCB0aGUgRUNOIG5vbmNlIHRvIHNlZSB3aHkgaXQgaXMgMjUzICovCi0jZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gMjUzCisjZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19PUFRfTEVOIDI1MworLyogV2UgY2FuIHNwcmVhZCBhbiBhY2sgdmVjdG9yIGFjcm9zcyBtdWx0aXBsZSBvcHRpb25zICovCisjZGVmaW5lIERDQ1BfTUFYX0FDS1ZFQ19MRU4gKERDQ1BfTUFYX0FDS1ZFQ19PUFRfTEVOICogMikKIAogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRAkwCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX0VDTl9NQVJLRUQJKDEgPDwgNikKQEAgLTQxLDcgKzQzLDYgQEAKICAqIEFjayBWZWN0b3JzIGl0IGhhcyByZWNlbnRseSBzZW50LiBGb3IgZWFjaCBwYWNrZXQgc2VudCBjYXJyeWluZyBhbgogICogQWNrIFZlY3RvciwgaXQgcmVtZW1iZXJzIGZvdXIgdmFyaWFibGVzOgogICoKLSAqIEBkY2NwYXZfYWNrX3B0ciAtIHRoZSB2YWx1ZSBvZiBidWZfaGVhZCBhdCB0aGUgdGltZSBvZiBhY2tub3dsZWRnZW1lbnQuCiAgKiBAZGNjcGF2X3JlY29yZHMgLSBsaXN0IG9mIGRjY3BfYWNrdmVjX3JlY29yZAogICogQGRjY3Bhdl9hY2tfbm9uY2UgLSB0aGUgb25lLWJpdCBzdW0gb2YgdGhlIEVDTiBOb25jZXMgZm9yIGFsbCBTdGF0ZSAwLgogICoKQEAgLTUyLDkgKzUzLDggQEAKIAl1NjQJCWRjY3Bhdl9idWZfYWNrbm87CiAJc3RydWN0IGxpc3RfaGVhZCBkY2NwYXZfcmVjb3JkczsKIAlzdHJ1Y3QgdGltZXZhbAlkY2NwYXZfdGltZTsKLQl1OAkJZGNjcGF2X2J1Zl9oZWFkOwotCXU4CQlkY2NwYXZfYWNrX3B0cjsKLQl1OAkJZGNjcGF2X3ZlY19sZW47CisJdTE2CQlkY2NwYXZfYnVmX2hlYWQ7CisJdTE2CQlkY2NwYXZfdmVjX2xlbjsKIAl1OAkJZGNjcGF2X2J1Zl9ub25jZTsKIAl1OAkJZGNjcGF2X2Fja19ub25jZTsKIAl1OAkJZGNjcGF2X2J1ZltEQ0NQX01BWF9BQ0tWRUNfTEVOXTsKQEAgLTc3LDkgKzc3LDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRjY3BhdnJfbm9kZTsKIAl1NjQJCSBkY2NwYXZyX2Fja19zZXFubzsKIAl1NjQJCSBkY2NwYXZyX2Fja19hY2tubzsKLQl1OAkJIGRjY3BhdnJfYWNrX3B0cjsKKwl1MTYJCSBkY2NwYXZyX2Fja19wdHI7CisJdTE2CQkgZGNjcGF2cl9zZW50X2xlbjsKIAl1OAkJIGRjY3BhdnJfYWNrX25vbmNlOwotCXU4CQkgZGNjcGF2cl9zZW50X2xlbjsKIH07CiAKIHN0cnVjdCBzb2NrOwpAQCAtOTgsNyArOTgsOCBAQAogZXh0ZXJuIHZvaWQgZGNjcF9hY2t2ZWNfY2hlY2tfcmN2X2Fja25vKHN0cnVjdCBkY2NwX2Fja3ZlYyAqYXYsCiAJCQkJCXN0cnVjdCBzb2NrICpzaywgY29uc3QgdTY0IGFja25vKTsKIGV4dGVybiBpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKTsKKwkJCSAgICAgdTY0ICphY2tubywgY29uc3QgdTggb3B0LAorCQkJICAgICBjb25zdCB1OCAqdmFsdWUsIGNvbnN0IHU4IGxlbik7CiAKIGV4dGVybiBpbnQgZGNjcF9pbnNlcnRfb3B0aW9uX2Fja3ZlYyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0xMzcsNyArMTM4LDggQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9hY2t2ZWNfcGFyc2Uoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBjb25zdCB1OCBvcHQsIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKQorCQkJCSAgICBjb25zdCB1NjQgKmFja25vLCBjb25zdCB1OCBvcHQsCisJCQkJICAgIGNvbnN0IHU4ICp2YWx1ZSwgY29uc3QgdTggbGVuKQogewogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWQuaCBiL25ldC9kY2NwL2NjaWQuaAppbmRleCBmN2ViNmM2Li5jN2MyOTUxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkLmgKKysrIGIvbmV0L2RjY3AvY2NpZC5oCkBAIC01Miw5ICs1Miw5IEBACiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciBsZW4sIHUxNiBpZHgsCiAJCQkJCQkgICAgdW5zaWduZWQgY2hhciogdmFsdWUpOwogCWludAkJKCpjY2lkX2hjX3R4X3NlbmRfcGFja2V0KShzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pOwotCXZvaWQJCSgqY2NpZF9oY190eF9wYWNrZXRfc2VudCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9yZSwKLQkJCQkJCSAgaW50IGxlbik7CisJCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOworCXZvaWQJCSgqY2NpZF9oY190eF9wYWNrZXRfc2VudCkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBpbnQgbW9yZSwgdW5zaWduZWQgaW50IGxlbik7CiAJdm9pZAkJKCpjY2lkX2hjX3J4X2dldF9pbmZvKShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgICBzdHJ1Y3QgdGNwX2luZm8gKmluZm8pOwogCXZvaWQJCSgqY2NpZF9oY190eF9nZXRfaW5mbykoc3RydWN0IHNvY2sgKnNrLApAQCAtOTQsMTYgKzk0LDE2IEBACiBleHRlcm4gdm9pZCBjY2lkX2hjX3R4X2RlbGV0ZShzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrKTsKIAogc3RhdGljIGlubGluZSBpbnQgY2NpZF9oY190eF9zZW5kX3BhY2tldChzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrLAotCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKKwkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHJjID0gMDsKIAlpZiAoY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfc2VuZF9wYWNrZXQgIT0gTlVMTCkKLQkJcmMgPSBjY2lkLT5jY2lkX29wcy0+Y2NpZF9oY190eF9zZW5kX3BhY2tldChzaywgc2tiLCBsZW4pOworCQlyYyA9IGNjaWQtPmNjaWRfb3BzLT5jY2lkX2hjX3R4X3NlbmRfcGFja2V0KHNrLCBza2IpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNjaWRfaGNfdHhfcGFja2V0X3NlbnQoc3RydWN0IGNjaWQgKmNjaWQsIHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICBpbnQgbW9yZSwgaW50IGxlbikKKwkJCQkJICBpbnQgbW9yZSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZiAoY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfcGFja2V0X3NlbnQgIT0gTlVMTCkKIAkJY2NpZC0+Y2NpZF9vcHMtPmNjaWRfaGNfdHhfcGFja2V0X3NlbnQoc2ssIG1vcmUsIGxlbik7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9LY29uZmlnIGIvbmV0L2RjY3AvY2NpZHMvS2NvbmZpZwppbmRleCA4NTMzZGFiLi44MGY0Njk4IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9LY29uZmlnCisrKyBiL25ldC9kY2NwL2NjaWRzL0tjb25maWcKQEAgLTI4LDEzICsyOCwyMCBAQAogCSAgVGhpcyB0ZXh0IHdhcyBleHRyYWN0ZWQgZnJvbSBSRkMgNDM0MCAoc2VjLiAxMC4xKSwKIAkgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQzNDAudHh0CiAKKwkgIFRvIGNvbXBpbGUgdGhpcyBDQ0lEIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBkY2NwX2NjaWQyLgorCiAJICBJZiBpbiBkb3VidCwgc2F5IE0uCiAKIGNvbmZpZyBJUF9EQ0NQX0NDSUQyX0RFQlVHCi0JICBib29sICJDQ0lEMiBkZWJ1ZyIKKwkgIGJvb2wgIkNDSUQyIGRlYnVnZ2luZyBtZXNzYWdlcyIKIAkgIGRlcGVuZHMgb24gSVBfRENDUF9DQ0lEMgogCSAgLS0taGVscC0tLQotCSAgICBFbmFibGUgQ0NJRDIgZGVidWcgbWVzc2FnZXMuCisJICAgIEVuYWJsZSBDQ0lEMi1zcGVjaWZpYyBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisKKwkgICAgV2hlbiBjb21waWxpbmcgQ0NJRDIgYXMgYSBtb2R1bGUsIHRoaXMgZGVidWdnaW5nIG91dHB1dCBjYW4KKwkgICAgYWRkaXRpb25hbGx5IGJlIHRvZ2dsZWQgYnkgc2V0dGluZyB0aGUgY2NpZDJfZGVidWcgbW9kdWxlCisJICAgIHBhcmFtZXRlciB0byAwIG9yIDEuCiAKIAkgICAgSWYgaW4gZG91YnQsIHNheSBOLgogCkBAIC02MiwxMCArNjksNTcgQEAKIAkgIFRoaXMgdGV4dCB3YXMgZXh0cmFjdGVkIGZyb20gUkZDIDQzNDAgKHNlYy4gMTAuMiksCiAJICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzQwLnR4dAogCSAgCisJICBUbyBjb21waWxlIHRoaXMgQ0NJRCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgZGNjcF9jY2lkMy4KKwogCSAgSWYgaW4gZG91YnQsIHNheSBNLgogCiBjb25maWcgSVBfRENDUF9URlJDX0xJQgogCWRlcGVuZHMgb24gSVBfRENDUF9DQ0lEMwogCWRlZl90cmlzdGF0ZSBJUF9EQ0NQX0NDSUQzCiAKK2NvbmZpZyBJUF9EQ0NQX0NDSUQzX0RFQlVHCisJICBib29sICJDQ0lEMyBkZWJ1Z2dpbmcgbWVzc2FnZXMiCisJICBkZXBlbmRzIG9uIElQX0RDQ1BfQ0NJRDMKKwkgIC0tLWhlbHAtLS0KKwkgICAgRW5hYmxlIENDSUQzLXNwZWNpZmljIGRlYnVnZ2luZyBtZXNzYWdlcy4KKworCSAgICBXaGVuIGNvbXBpbGluZyBDQ0lEMyBhcyBhIG1vZHVsZSwgdGhpcyBkZWJ1Z2dpbmcgb3V0cHV0IGNhbgorCSAgICBhZGRpdGlvbmFsbHkgYmUgdG9nZ2xlZCBieSBzZXR0aW5nIHRoZSBjY2lkM19kZWJ1ZyBtb2R1bGUKKwkgICAgcGFyYW1ldGVyIHRvIDAgb3IgMS4KKworCSAgICBJZiBpbiBkb3VidCwgc2F5IE4uCisKK2NvbmZpZyBJUF9EQ0NQX0NDSUQzX1JUTworCSAgaW50ICJVc2UgaGlnaGVyIGJvdW5kIGZvciBub2ZlZWRiYWNrIHRpbWVyIgorCSAgZGVmYXVsdCAxMDAKKwkgIGRlcGVuZHMgb24gSVBfRENDUF9DQ0lEMyAmJiBFWFBFUklNRU5UQUwKKwkgIC0tLWhlbHAtLS0KKwkgICAgVXNlIGhpZ2hlciBsb3dlciBib3VuZCBmb3Igbm9mZWVkYmFjayB0aW1lciBleHBpcmF0aW9uLgorCisJICAgIFRoZSBURlJDIG5vZmVlZGJhY2sgdGltZXIgbm9ybWFsbHkgZXhwaXJlcyBhZnRlciB0aGUgbWF4aW11bSBvZiA0CisJICAgIFJUVHMgYW5kIHR3aWNlIHRoZSBjdXJyZW50IHNlbmQgaW50ZXJ2YWwgKFJGQyAzNDQ4LCA0LjMpLiBPbiBMQU5zCisJICAgIHdpdGggYSBzbWFsbCBSVFQgdGhpcyBjYW4gbWVhbiBhIGhpZ2ggcHJvY2Vzc2luZyBsb2FkIGFuZCByZWR1Y2VkCisJICAgIHBlcmZvcm1hbmNlLCBzaW5jZSB0aGVuIHRoZSBub2ZlZWRiYWNrIHRpbWVyIGlzIHRyaWdnZXJlZCB2ZXJ5CisJICAgIGZyZXF1ZW50bHkuCisKKwkgICAgVGhpcyBvcHRpb24gZW5hYmxlcyB0byBzZXQgYSBoaWdoZXIgbG93ZXIgYm91bmQgZm9yIHRoZSBub2ZlZWRiYWNrCisJICAgIHZhbHVlLiBWYWx1ZXMgaW4gdW5pdHMgb2YgbWlsbGlzZWNvbmRzIGNhbiBiZSBzZXQgaGVyZS4KKworCSAgICBBIHZhbHVlIG9mIDAgZGlzYWJsZXMgdGhpcyBmZWF0dXJlIGJ5IGVuZm9yY2luZyB0aGUgdmFsdWUgc3BlY2lmaWVkCisJICAgIGluIFJGQyAzNDQ4LiBUaGUgZm9sbG93aW5nIHZhbHVlcyBoYXZlIGJlZW4gc3VnZ2VzdGVkIGFzIGJvdW5kcyBmb3IKKwkgICAgZXhwZXJpbWVudGFsIHVzZToKKwkgICAgCSogMTYtMjBtcyB0byBtYXRjaCB0aGUgdHlwaWNhbCBtdWx0aW1lZGlhIGludGVyLWZyYW1lIGludGVydmFsCisJICAgIAkqIDEwMG1zIGFzIGEgcmVhc29uYWJsZSBjb21wcm9taXNlIFtkZWZhdWx0XQorCSAgICAJKiAxMDAwbXMgY29ycmVzcG9uZHMgdG8gdGhlIGxvd2VyIFRDUCBSVE8gYm91bmQgKFJGQyAyOTg4LCAyLjQpCisKKwkgICAgVGhlIGRlZmF1bHQgb2YgMTAwbXMgaXMgYSBjb21wcm9taXNlIGJldHdlZW4gYSBsYXJnZSB2YWx1ZSBmb3IKKwkgICAgZWZmaWNpZW50IERDQ1AgaW1wbGVtZW50YXRpb25zLCBhbmQgYSBzbWFsbCB2YWx1ZSB0byBhdm9pZCBkaXNydXB0aW5nCisJICAgIHRoZSBuZXR3b3JrIGluIHRpbWVzIG9mIGNvbmdlc3Rpb24uCisKKwkgICAgVGhlIHB1cnBvc2Ugb2YgdGhlIG5vZmVlZGJhY2sgdGltZXIgaXMgdG8gc2xvdyBEQ0NQIGRvd24gd2hlbiB0aGVyZQorCSAgICBpcyBzZXJpb3VzIG5ldHdvcmsgY29uZ2VzdGlvbjogZXhwZXJpbWVudGluZyB3aXRoIGxhcmdlciB2YWx1ZXMgc2hvdWxkCisJICAgIHRoZXJlZm9yZSBub3QgYmUgcGVyZm9ybWVkIG9uIFdBTnMuCisKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmMKaW5kZXggMTYyMDMyYi4uMjU1NWJlOCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvY2NpZDIuYworKysgYi9uZXQvZGNjcC9jY2lkcy9jY2lkMi5jCkBAIC0zMywxOCArMzMsMTEgQEAKICNpbmNsdWRlICIuLi9kY2NwLmgiCiAjaW5jbHVkZSAiY2NpZDIuaCIKIAorCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcKIHN0YXRpYyBpbnQgY2NpZDJfZGVidWc7CisjZGVmaW5lIGNjaWQyX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikJRENDUF9QUl9ERUJVRyhjY2lkMl9kZWJ1ZywgZm9ybWF0LCAjI2EpCiAKLSNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRwotI2RlZmluZSBjY2lkMl9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pIFwKLSAgICAgICAgZG8geyBpZiAoY2NpZDJfZGVidWcpIFwKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBfX0ZVTkNUSU9OX18sICMjYSk7IFwKLSAgICAgICAgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIGNjaWQyX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcKIHN0YXRpYyB2b2lkIGNjaWQyX2hjX3R4X2NoZWNrX3Nhbml0eShjb25zdCBzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAqaGN0eCkKIHsKIAlpbnQgbGVuID0gMDsKQEAgLTg2LDcgKzc5LDggQEAKIAlCVUdfT04obGVuICE9IGhjdHgtPmNjaWQyaGN0eF9zZXFidWZjICogQ0NJRDJfU0VRQlVGX0xFTik7CiB9CiAjZWxzZQotI2RlZmluZSBjY2lkMl9oY190eF9jaGVja19zYW5pdHkoaGN0eCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNjaWQyX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikKKyNkZWZpbmUgY2NpZDJfaGNfdHhfY2hlY2tfc2FuaXR5KGhjdHgpCiAjZW5kaWYKIAogc3RhdGljIGludCBjY2lkMl9oY190eF9hbGxvY19zZXEoc3RydWN0IGNjaWQyX2hjX3R4X3NvY2sgKmhjdHgsIGludCBudW0sCkBAIC0xMzEsOCArMTI1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjY2lkMl9oY190eF9zZW5kX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbikKK3N0YXRpYyBpbnQgY2NpZDJfaGNfdHhfc2VuZF9wYWNrZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBjY2lkMl9oY190eF9zb2NrICpoY3R4OwogCkBAIC0yNzQsNyArMjY3LDcgQEAKIAkJICAgICAgIGppZmZpZXMgKyBoY3R4LT5jY2lkMmhjdHhfcnRvKTsKIH0KIAotc3RhdGljIHZvaWQgY2NpZDJfaGNfdHhfcGFja2V0X3NlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9yZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGNjaWQyX2hjX3R4X3BhY2tldF9zZW50KHN0cnVjdCBzb2NrICpzaywgaW50IG1vcmUsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQyX2hjX3R4X3NrKHNrKTsKQEAgLTQyNiw3ICs0MTksNyBAQAogCXJldHVybiAtMTsKIAogb3V0X2ludmFsaWRfb3B0aW9uOgotCUJVR19PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbi4uLiBvcHRpb25zIHdlcmUgcHJldmlvdXNseSBwYXJzZWQgISAqLworCURDQ1BfQlVHKCJJbnZhbGlkIG9wdGlvbiAtIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKHByZXZpb3VzIHBhcnNpbmcpISIpOwogCXJldHVybiAtMTsKIH0KIApAQCAtNjE5LDcgKzYxMiwxNyBAQAogCX0KIAogCWFja25vID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcTsKLQlzZXFwID0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgtPmNjaWQyc19wcmV2OworCWlmIChhZnRlcjQ4KGFja25vLCBoY3R4LT5jY2lkMmhjdHhfaGlnaF9hY2spKQorCQloY3R4LT5jY2lkMmhjdHhfaGlnaF9hY2sgPSBhY2tubzsKKworCXNlcXAgPSBoY3R4LT5jY2lkMmhjdHhfc2VxdDsKKwl3aGlsZSAoYmVmb3JlNDgoc2VxcC0+Y2NpZDJzX3NlcSwgYWNrbm8pKSB7CisJCXNlcXAgPSBzZXFwLT5jY2lkMnNfbmV4dDsKKwkJaWYgKHNlcXAgPT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgpIHsKKwkJCXNlcXAgPSBoY3R4LT5jY2lkMmhjdHhfc2VxaC0+Y2NpZDJzX3ByZXY7CisJCQlicmVhazsKKwkJfQorCX0KIAogCS8qIElmIGluIHNsb3ctc3RhcnQsIGN3bmQgY2FuIGluY3JlYXNlIGF0IG1vc3QgQWNrIFJhdGlvIC8gMiBwYWNrZXRzIGZvcgogCSAqIHRoaXMgc2luZ2xlIGFjay4gIEkgcm91bmQgdXAuCkBAIC02OTcsNyArNzAwLDE0IEBACiAJLyogVGhlIHN0YXRlIGFib3V0IHdoYXQgaXMgYWNrZWQgc2hvdWxkIGJlIGNvcnJlY3Qgbm93CiAJICogQ2hlY2sgZm9yIE5VTURVUEFDSwogCSAqLwotCXNlcXAgPSBoY3R4LT5jY2lkMmhjdHhfc2VxaC0+Y2NpZDJzX3ByZXY7CisJc2VxcCA9IGhjdHgtPmNjaWQyaGN0eF9zZXF0OworCXdoaWxlIChiZWZvcmU0OChzZXFwLT5jY2lkMnNfc2VxLCBoY3R4LT5jY2lkMmhjdHhfaGlnaF9hY2spKSB7CisJCXNlcXAgPSBzZXFwLT5jY2lkMnNfbmV4dDsKKwkJaWYgKHNlcXAgPT0gaGN0eC0+Y2NpZDJoY3R4X3NlcWgpIHsKKwkJCXNlcXAgPSBoY3R4LT5jY2lkMmhjdHhfc2VxaC0+Y2NpZDJzX3ByZXY7CisJCQlicmVhazsKKwkJfQorCX0KIAlkb25lID0gMDsKIAl3aGlsZSAoMSkgewogCQlpZiAoc2VxcC0+Y2NpZDJzX2Fja2VkKSB7CkBAIC03NzEsNiArNzgxLDcgQEAKIAloY3R4LT5jY2lkMmhjdHhfbGFzdHJ0dCAgPSAwOwogCWhjdHgtPmNjaWQyaGN0eF9ycGR1cGFjayA9IC0xOwogCWhjdHgtPmNjaWQyaGN0eF9sYXN0X2NvbmcgPSBqaWZmaWVzOworCWhjdHgtPmNjaWQyaGN0eF9oaWdoX2FjayA9IDA7CiAKIAloY3R4LT5jY2lkMmhjdHhfcnRvdGltZXIuZnVuY3Rpb24gPSAmY2NpZDJfaGNfdHhfcnRvX2V4cGlyZTsKIAloY3R4LT5jY2lkMmhjdHhfcnRvdGltZXIuZGF0YQkgID0gKHVuc2lnbmVkIGxvbmcpc2s7CkBAIC04MjMsOCArODM0LDEwIEBACiAJLmNjaWRfaGNfcnhfcGFja2V0X3JlY3YJPSBjY2lkMl9oY19yeF9wYWNrZXRfcmVjdiwKIH07CiAKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEMl9ERUJVRwogbW9kdWxlX3BhcmFtKGNjaWQyX2RlYnVnLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhjY2lkMl9kZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworI2VuZGlmCiAKIHN0YXRpYyBfX2luaXQgaW50IGNjaWQyX21vZHVsZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMi5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDIuaAppbmRleCA1YjJlZjRhLi5lYmQ3OTQ5IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMi5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQyLmgKQEAgLTM1LDcgKzM1LDcgQEAKIAlzdHJ1Y3QgY2NpZDJfc2VxCSpjY2lkMnNfbmV4dDsKIH07CiAKLSNkZWZpbmUgQ0NJRDJfU0VRQlVGX0xFTiAyNTYKKyNkZWZpbmUgQ0NJRDJfU0VRQlVGX0xFTiAxMDI0CiAjZGVmaW5lIENDSUQyX1NFUUJVRl9NQVggMTI4CiAKIC8qKiBzdHJ1Y3QgY2NpZDJfaGNfdHhfc29jayAtIENDSUQyIFRYIGhhbGYgY29ubmVjdGlvbgpAQCAtNzIsNiArNzIsNyBAQAogCWludAkJCWNjaWQyaGN0eF9ycGR1cGFjazsKIAlpbnQJCQljY2lkMmhjdHhfc2VuZHdhaXQ7CiAJdW5zaWduZWQgbG9uZwkJY2NpZDJoY3R4X2xhc3RfY29uZzsKKwl1NjQJCQljY2lkMmhjdHhfaGlnaF9hY2s7CiB9OwogCiBzdHJ1Y3QgY2NpZDJfaGNfcnhfc29jayB7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwppbmRleCBjZWMyM2FkLi5jZjhjMDdiIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKQEAgLTYwLDEzICs2MCwxMSBAQAogCXJldHVybiAoYiA+PSAyICogZGl2KSA/IHRtcCAvIChiIC8gZGl2KSA6IHRtcDsKIH0KIAotc3RhdGljIGludCBjY2lkM19kZWJ1ZzsKIAotI2lmZGVmIENDSUQzX0RFQlVHCi0jZGVmaW5lIGNjaWQzX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikgXAotCWRvIHsgaWYgKGNjaWQzX2RlYnVnKSBcCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIF9fRlVOQ1RJT05fXywgIyNhKTsgXAotCX0gd2hpbGUgKDApCisKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRworc3RhdGljIGludCBjY2lkM19kZWJ1ZzsKKyNkZWZpbmUgY2NpZDNfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQlEQ0NQX1BSX0RFQlVHKGNjaWQzX2RlYnVnLCBmb3JtYXQsICMjYSkKICNlbHNlCiAjZGVmaW5lIGNjaWQzX3ByX2RlYnVnKGZvcm1hdCwgYS4uLikKICNlbmRpZgpAQCAtNzUsMTUgKzczLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGNjcF9yeF9oaXN0ICpjY2lkM19yeF9oaXN0Owogc3RhdGljIHN0cnVjdCBkY2NwX2xpX2hpc3QgKmNjaWQzX2xpX2hpc3Q7CiAKLS8qIFRGUkMgc2VuZGVyIHN0YXRlcyAqLwotZW51bSBjY2lkM19oY190eF9zdGF0ZXMgewotICAgICAgIAlURlJDX1NTVEFURV9OT19TRU5UID0gMSwKLQlURlJDX1NTVEFURV9OT19GQkFDSywKLQlURlJDX1NTVEFURV9GQkFDSywKLQlURlJDX1NTVEFURV9URVJNLAotfTsKLQotI2lmZGVmIENDSUQzX0RFQlVHCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcKIHN0YXRpYyBjb25zdCBjaGFyICpjY2lkM190eF9zdGF0ZV9uYW1lKGVudW0gY2NpZDNfaGNfdHhfc3RhdGVzIHN0YXRlKQogewogCXN0YXRpYyBjaGFyICpjY2lkM19zdGF0ZV9uYW1lc1tdID0gewpAQCAtMTEwLDEwNSArMTAwLDExNSBAQAogCWhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9IHN0YXRlOwogfQogCi0vKiBDYWxjdWxhdGUgbmV3IHRfaXBpIChpbnRlciBwYWNrZXQgaW50ZXJ2YWwpIGJ5IHRfaXBpID0gcyAvIFhfaW5zdCAqLwotc3RhdGljIGlubGluZSB2b2lkIGNjaWQzX2NhbGNfbmV3X3RfaXBpKHN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4KQorLyoKKyAqIFJlY2FsY3VsYXRlIHNjaGVkdWxlZCBub21pbmFsIHNlbmQgdGltZSB0X25vbSwgaW50ZXItcGFja2V0IGludGVydmFsCisgKiB0X2lwaSwgYW5kIGRlbHRhIHZhbHVlLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIGVhY2ggY2hhbmdlIHRvIFguCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjY2lkM191cGRhdGVfc2VuZF90aW1lKHN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4KQogewotCS8qCi0JICogSWYgbm8gZmVlZGJhY2sgc3BlYyBzYXlzIHRfaXBpIGlzIDEgc2Vjb25kIChzZXQgZWxzZXdoZXJlIGFuZCB0aGVuCi0JICogZG91YmxlcyBhZnRlciBldmVyeSBubyBmZWVkYmFjayB0aW1lciAoc2VwYXJhdGUgZnVuY3Rpb24pCi0JICovCi0JaWYgKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSAhPSBURlJDX1NTVEFURV9OT19GQkFDSykKLQkJaGN0eC0+Y2NpZDNoY3R4X3RfaXBpID0gdXNlY3NfZGl2KGhjdHgtPmNjaWQzaGN0eF9zLAotCQkJCQkJICBoY3R4LT5jY2lkM2hjdHhfeCk7Ci19CisJdGltZXZhbF9zdWJfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKIAotLyogQ2FsY3VsYXRlIG5ldyBkZWx0YSBieSBkZWx0YSA9IG1pbih0X2lwaSAvIDIsIHRfZ3JhbiAvIDIpICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY2NpZDNfY2FsY19uZXdfZGVsdGEoc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgKmhjdHgpCi17CisJLyogQ2FsY3VsYXRlIG5ldyB0X2lwaSAoaW50ZXIgcGFja2V0IGludGVydmFsKSBieSB0X2lwaSA9IHMgLyBYX2luc3QgKi8KKwloY3R4LT5jY2lkM2hjdHhfdF9pcGkgPSB1c2Vjc19kaXYoaGN0eC0+Y2NpZDNoY3R4X3MsIGhjdHgtPmNjaWQzaGN0eF94KTsKKworCS8qIFVwZGF0ZSBub21pbmFsIHNlbmQgdGltZSB3aXRoIHJlZ2FyZCB0byB0aGUgbmV3IHRfaXBpICovCisJdGltZXZhbF9hZGRfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKKworCS8qIENhbGN1bGF0ZSBuZXcgZGVsdGEgYnkgZGVsdGEgPSBtaW4odF9pcGkgLyAyLCB0X2dyYW4gLyAyKSAqLwogCWhjdHgtPmNjaWQzaGN0eF9kZWx0YSA9IG1pbl90KHUzMiwgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpIC8gMiwKIAkJCQkJICAgVEZSQ19PUFNZU19IQUxGX1RJTUVfR1JBTik7CiB9Ci0KIC8qCiAgKiBVcGRhdGUgWCBieQogICogICAgSWYgKHAgPiAwKQotICogICAgICAgeF9jYWxjID0gY2FsY1gocywgUiwgcCk7CisgKiAgICAgICBYX2NhbGMgPSBjYWxjWChzLCBSLCBwKTsKICAqICAgICAgIFggPSBtYXgobWluKFhfY2FsYywgMiAqIFhfcmVjdiksIHMgLyB0X21iaSk7CiAgKiAgICBFbHNlCiAgKiAgICAgICBJZiAobm93IC0gdGxkID49IFIpCiAgKiAgICAgICAgICBYID0gbWF4KG1pbigyICogWCwgMiAqIFhfcmVjdiksIHMgLyBSKTsKICAqICAgICAgICAgIHRsZCA9IG5vdzsKKyAqCisgKiBJZiBYIGhhcyBjaGFuZ2VkLCB3ZSBhbHNvIHVwZGF0ZSB0aGUgc2NoZWR1bGVkIHNlbmQgdGltZSB0X25vdywKKyAqIHRoZSBpbnRlci1wYWNrZXQgaW50ZXJ2YWwgdF9pcGksIGFuZCB0aGUgZGVsdGEgdmFsdWUuCiAgKi8gCi1zdGF0aWMgdm9pZCBjY2lkM19oY190eF91cGRhdGVfeChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBjY2lkM19oY190eF91cGRhdGVfeChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB0aW1ldmFsICpub3cpCisKIHsKIAlzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQzX2hjX3R4X3NrKHNrKTsKKwljb25zdCBfX3UzMiBvbGRfeCA9IGhjdHgtPmNjaWQzaGN0eF94OwogCi0JLyogVG8gYXZvaWQgbGFyZ2UgZXJyb3IgaW4gY2FsY1ggKi8KLQlpZiAoaGN0eC0+Y2NpZDNoY3R4X3AgPj0gVEZSQ19TTUFMTEVTVF9QKSB7CisJaWYgKGhjdHgtPmNjaWQzaGN0eF9wID4gMCkgewogCQloY3R4LT5jY2lkM2hjdHhfeF9jYWxjID0gdGZyY19jYWxjX3goaGN0eC0+Y2NpZDNoY3R4X3MsCiAJCQkJCQkgICAgIGhjdHgtPmNjaWQzaGN0eF9ydHQsCiAJCQkJCQkgICAgIGhjdHgtPmNjaWQzaGN0eF9wKTsKLQkJaGN0eC0+Y2NpZDNoY3R4X3ggPSBtYXhfdCh1MzIsIG1pbl90KHUzMiwgaGN0eC0+Y2NpZDNoY3R4X3hfY2FsYywKLQkJCQkJCQkgIDIgKiBoY3R4LT5jY2lkM2hjdHhfeF9yZWN2KSwKLQkJCQkJICAgICAgIChoY3R4LT5jY2lkM2hjdHhfcyAvCi0JCQkJCSAgICAgICAgVEZSQ19NQVhfQkFDS19PRkZfVElNRSkpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJaGN0eC0+Y2NpZDNoY3R4X3ggPSBtYXhfdCh1MzIsIG1pbihoY3R4LT5jY2lkM2hjdHhfeF9jYWxjLAorCQkJCQkJICAgaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiAqIDIpLAorCQkJCQkgICAgICAgaGN0eC0+Y2NpZDNoY3R4X3MgLyBURlJDX1RfTUJJKTsKIAotCQlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7Ci0JICAgICAgIAlpZiAodGltZXZhbF9kZWx0YSgmbm93LCAmaGN0eC0+Y2NpZDNoY3R4X3RfbGQpID49Ci0JCSAgICBoY3R4LT5jY2lkM2hjdHhfcnR0KSB7Ci0JCQloY3R4LT5jY2lkM2hjdHhfeCA9IG1heF90KHUzMiwgbWluX3QodTMyLCBoY3R4LT5jY2lkM2hjdHhfeF9yZWN2LAotCQkJCQkJCQkgIGhjdHgtPmNjaWQzaGN0eF94KSAqIDIsCi0JCQkJCQkgICAgICAgdXNlY3NfZGl2KGhjdHgtPmNjaWQzaGN0eF9zLAotCQkJCQkJCSAgICAgICAJIGhjdHgtPmNjaWQzaGN0eF9ydHQpKTsKLQkJCWhjdHgtPmNjaWQzaGN0eF90X2xkID0gbm93OwotCQl9Ci0JfQorCX0gZWxzZSBpZiAodGltZXZhbF9kZWx0YShub3csICZoY3R4LT5jY2lkM2hjdHhfdF9sZCkgPj0KKwkJCQkJCQkgIGhjdHgtPmNjaWQzaGN0eF9ydHQpIHsKKwkJaGN0eC0+Y2NpZDNoY3R4X3ggPSBtYXgobWluKGhjdHgtPmNjaWQzaGN0eF94X3JlY3YsCisJCQkJCSAgICBoY3R4LT5jY2lkM2hjdHhfeCAgICAgICkgKiAyLAorCQkJCQl1c2Vjc19kaXYoaGN0eC0+Y2NpZDNoY3R4X3MsCisJCQkJCSAgICAgICAJICBoY3R4LT5jY2lkM2hjdHhfcnR0KSAgICk7CisJCWhjdHgtPmNjaWQzaGN0eF90X2xkID0gKm5vdzsKKwl9IGVsc2UKKwkJY2NpZDNfcHJfZGVidWcoIk5vdCBjaGFuZ2luZyBYXG4iKTsKKworCWlmIChoY3R4LT5jY2lkM2hjdHhfeCAhPSBvbGRfeCkKKwkJY2NpZDNfdXBkYXRlX3NlbmRfdGltZShoY3R4KTsKK30KKworLyoKKyAqIAlUcmFjayB0aGUgbWVhbiBwYWNrZXQgc2l6ZSBgcycgKGNmLiBSRkMgNDM0MiwgNS4zIGFuZCAgUkZDIDM0NDgsIDQuMSkKKyAqIAlAbGVuOiBEQ0NQIHBhY2tldCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGNjaWQzX2hjX3R4X3VwZGF0ZV9zKHN0cnVjdCBjY2lkM19oY190eF9zb2NrICpoY3R4LCBpbnQgbGVuKQoreworCWlmICh1bmxpa2VseShsZW4gPT0gMCkpCisJCWNjaWQzX3ByX2RlYnVnKCJQYWNrZXQgcGF5bG9hZCBsZW5ndGggaXMgMCAtIG5vdCB1cGRhdGluZ1xuIik7CisJZWxzZQorCQloY3R4LT5jY2lkM2hjdHhfcyA9IGhjdHgtPmNjaWQzaGN0eF9zID09IDAgPyBsZW4gOgorCQkJCSAgICAoOSAqIGhjdHgtPmNjaWQzaGN0eF9zICsgbGVuKSAvIDEwOworCS8qCisJICogTm90ZTogV2UgY291bGQgZG8gYSBwb3RlbnRpYWwgb3B0aW1pc2F0aW9uIGhlcmUgLSB3aGVuIGBzJyBjaGFuZ2VzLAorCSAqCSByZWNhbGN1bGF0ZSBzZW5kaW5nIHJhdGUgYW5kIGNvbnNlcXVlbnRseSB0X2lwaSwgdF9kZWx0YSwgYW5kCisJICoJIHRfbm93LiBUaGlzIGlzIGhvd2V2ZXIgbm9uLXN0YW5kYXJkLCBhbmQgdGhlIGJlbmVmaXRzIGFyZSBub3QKKwkgKgkgY2xlYXIsIHNvIGl0IGlzIGN1cnJlbnRseSBsZWZ0IG91dC4KKwkgKi8KIH0KIAogc3RhdGljIHZvaWQgY2NpZDNfaGNfdHhfbm9fZmVlZGJhY2tfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyBuZXh0X3Rtb3V0ID0gMDsKIAlzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQzX2hjX3R4X3NrKHNrKTsKKwl1bnNpZ25lZCBsb25nIHRfbmZiID0gVVNFQ19QRVJfU0VDIC8gNTsKIAogCWJoX2xvY2tfc29jayhzayk7CiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJLyogVHJ5IGFnYWluIGxhdGVyLiAqLwogCQkvKiBYWFg6IHNldCBzb21lIHNlbnNpYmxlIE1JQiAqLwotCQlza19yZXNldF90aW1lcihzaywgJmhjdHgtPmNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lciwKLQkJCSAgICAgICBqaWZmaWVzICsgSFogLyA1KTsKLQkJZ290byBvdXQ7CisJCWdvdG8gcmVzdGFydF90aW1lcjsKIAl9CiAKIAljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCBzdGF0ZT0lc1xuIiwgZGNjcF9yb2xlKHNrKSwgc2ssCiAJCSAgICAgICBjY2lkM190eF9zdGF0ZV9uYW1lKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSkpOwogCQogCXN3aXRjaCAoaGN0eC0+Y2NpZDNoY3R4X3N0YXRlKSB7Ci0JY2FzZSBURlJDX1NTVEFURV9URVJNOgotCQlnb3RvIG91dDsKIAljYXNlIFRGUkNfU1NUQVRFX05PX0ZCQUNLOgotCQkvKiBIYWx2ZSBzZW5kIHJhdGUgKi8KLQkJaGN0eC0+Y2NpZDNoY3R4X3ggLz0gMjsKLQkJaWYgKGhjdHgtPmNjaWQzaGN0eF94IDwgKGhjdHgtPmNjaWQzaGN0eF9zIC8KLQkJCQkJIFRGUkNfTUFYX0JBQ0tfT0ZGX1RJTUUpKQotCQkJaGN0eC0+Y2NpZDNoY3R4X3ggPSAoaGN0eC0+Y2NpZDNoY3R4X3MgLwotCQkJCQkgICAgIFRGUkNfTUFYX0JBQ0tfT0ZGX1RJTUUpOworCQkvKiBSRkMgMzQ0OCwgNC40OiBIYWx2ZSBzZW5kIHJhdGUgZGlyZWN0bHkgKi8KKwkJaGN0eC0+Y2NpZDNoY3R4X3ggPSBtaW5fdCh1MzIsIGhjdHgtPmNjaWQzaGN0eF94IC8gMiwKKwkJCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF9zIC8gVEZSQ19UX01CSSk7CiAKIAkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgc3RhdGU9JXMsIHVwZGF0ZWQgdHggcmF0ZSB0byAlZCAiCiAJCQkgICAgICAgImJ5dGVzL3NcbiIsCiAJCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssCiAJCQkgICAgICAgY2NpZDNfdHhfc3RhdGVfbmFtZShoY3R4LT5jY2lkM2hjdHhfc3RhdGUpLAogCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94KTsKLQkJbmV4dF90bW91dCA9IG1heF90KHUzMiwgMiAqIHVzZWNzX2RpdihoY3R4LT5jY2lkM2hjdHhfcywKLQkJCQkJCSAgICAgIGhjdHgtPmNjaWQzaGN0eF94KSwKLQkJCQkJVEZSQ19JTklUSUFMX1RJTUVPVVQpOwotCQkvKgotCQkgKiBGSVhNRSAtIG5vdCBzdXJlIGFib3ZlIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3QuIFNlZSBzZWN0aW9uCi0JCSAqIDUgb2YgQ0NJRDMgMTEgc2hvdWxkIGFkanVzdCB0eF90X2lwaSBhbmQgZG91YmxlIHRoYXQgdG8KLQkJICogYWNoaWV2ZSBpdCByZWFsbHkKLQkJICovCisJCS8qIFRoZSB2YWx1ZSBvZiBSIGlzIHN0aWxsIHVuZGVmaW5lZCBhbmQgc28gd2UgY2FuIG5vdCByZWNvbXB1dGUKKwkJICogdGhlIHRpbW91dCB2YWx1ZS4gS2VlcCBpbml0aWFsIHZhbHVlIGFzIHBlciBbUkZDIDQzNDIsIDVdLiAqLworCQl0X25mYiA9IFRGUkNfSU5JVElBTF9USU1FT1VUOworCQljY2lkM191cGRhdGVfc2VuZF90aW1lKGhjdHgpOwogCQlicmVhazsKIAljYXNlIFRGUkNfU1NUQVRFX0ZCQUNLOgogCQkvKgpAQCAtMjE4LDcyICsyMTgsNzggQEAKIAkJaWYgKCFoY3R4LT5jY2lkM2hjdHhfaWRsZSB8fAogCQkgICAgKGhjdHgtPmNjaWQzaGN0eF94X3JlY3YgPj0KIAkJICAgICA0ICogdXNlY3NfZGl2KGhjdHgtPmNjaWQzaGN0eF9zLCBoY3R4LT5jY2lkM2hjdHhfcnR0KSkpIHsKKwkJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwogCQkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgc3RhdGU9JXMsIG5vdCBpZGxlXG4iLAogCQkJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywKIAkJCQkgICAgICAgY2NpZDNfdHhfc3RhdGVfbmFtZShoY3R4LT5jY2lkM2hjdHhfc3RhdGUpKTsKIAkJCS8qIEhhbHZlIHNlbmRpbmcgcmF0ZSAqLwogCi0JCQkvKiAgSWYgKFhfY2FsYyA+IDIgKiBYX3JlY3YpCisJCQkvKiAgSWYgKHAgPT0gMCB8fCBYX2NhbGMgPiAyICogWF9yZWN2KQogCQkJICogICAgWF9yZWN2ID0gbWF4KFhfcmVjdiAvIDIsIHMgLyAoMiAqIHRfbWJpKSk7CiAJCQkgKiAgRWxzZQogCQkJICogICAgWF9yZWN2ID0gWF9jYWxjIC8gNDsKIAkJCSAqLwotCQkJQlVHX09OKGhjdHgtPmNjaWQzaGN0eF9wID49IFRGUkNfU01BTExFU1RfUCAmJgotCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94X2NhbGMgPT0gMCk7CisJCQlCVUdfT04oaGN0eC0+Y2NpZDNoY3R4X3AgJiYgIWhjdHgtPmNjaWQzaGN0eF94X2NhbGMpOwogCi0JCQkvKiBjaGVjayBhbHNvIGlmIHAgaXMgemVybyAtPiB4X2NhbGMgaXMgaW5maW5pdHk/ICovCi0JCQlpZiAoaGN0eC0+Y2NpZDNoY3R4X3AgPCBURlJDX1NNQUxMRVNUX1AgfHwKKwkJCWlmIChoY3R4LT5jY2lkM2hjdHhfcCAgPT0gMCB8fAogCQkJICAgIGhjdHgtPmNjaWQzaGN0eF94X2NhbGMgPiAyICogaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdikKIAkJCQloY3R4LT5jY2lkM2hjdHhfeF9yZWN2ID0gbWF4X3QodTMyLCBoY3R4LT5jY2lkM2hjdHhfeF9yZWN2IC8gMiwKLQkJCQkJCQkJICAgIGhjdHgtPmNjaWQzaGN0eF9zIC8gKDIgKiBURlJDX01BWF9CQUNLX09GRl9USU1FKSk7CisJCQkJCQkJCSAgICBoY3R4LT5jY2lkM2hjdHhfcyAvICgyICogVEZSQ19UX01CSSkpOwogCQkJZWxzZQogCQkJCWhjdHgtPmNjaWQzaGN0eF94X3JlY3YgPSBoY3R4LT5jY2lkM2hjdHhfeF9jYWxjIC8gNDsKIAogCQkJLyogVXBkYXRlIHNlbmRpbmcgcmF0ZSAqLwotCQkJY2NpZDNfaGNfdHhfdXBkYXRlX3goc2spOworCQkJZGNjcF90aW1lc3RhbXAoc2ssICZub3cpOworCQkJY2NpZDNfaGNfdHhfdXBkYXRlX3goc2ssICZub3cpOwogCQl9CiAJCS8qCiAJCSAqIFNjaGVkdWxlIG5vIGZlZWRiYWNrIHRpbWVyIHRvIGV4cGlyZSBpbgotCQkgKiBtYXgoNCAqIFIsIDIgKiBzIC8gWCkKKwkJICogbWF4KHRfUlRPLCAyICogcy9YKSAgPSAgbWF4KHRfUlRPLCAyICogdF9pcGkpCisJCSAqIFNlZSBjb21tZW50cyBpbiBwYWNrZXRfcmVjdigpIHJlZ2FyZGluZyB0aGUgdmFsdWUgb2YgdF9SVE8uCiAJCSAqLwotCQluZXh0X3Rtb3V0ID0gbWF4X3QodTMyLCBoY3R4LT5jY2lkM2hjdHhfdF9ydG8sIAotCQkJCQkyICogdXNlY3NfZGl2KGhjdHgtPmNjaWQzaGN0eF9zLAotCQkJCQkJICAgICAgaGN0eC0+Y2NpZDNoY3R4X3gpKTsKKwkJdF9uZmIgPSBtYXgoaGN0eC0+Y2NpZDNoY3R4X3RfcnRvLCAyICogaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6ICVzLCBzaz0lcCwgSWxsZWdhbCBzdGF0ZSAoJWQpIVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGNjcF9yb2xlKHNrKSwgc2ssIGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSk7Ci0JCWR1bXBfc3RhY2soKTsKKwljYXNlIFRGUkNfU1NUQVRFX05PX1NFTlQ6CisJCURDQ1BfQlVHKCJJbGxlZ2FsICVzIHN0YXRlIE5PX1NFTlQsIHNrPSVwIiwgZGNjcF9yb2xlKHNrKSwgc2spOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFRGUkNfU1NUQVRFX1RFUk06CiAJCWdvdG8gb3V0OwogCX0KIAotCXNrX3Jlc2V0X3RpbWVyKHNrLCAmaGN0eC0+Y2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyLCAKLQkJICAgICAgamlmZmllcyArIG1heF90KHUzMiwgMSwgdXNlY3NfdG9famlmZmllcyhuZXh0X3Rtb3V0KSkpOwogCWhjdHgtPmNjaWQzaGN0eF9pZGxlID0gMTsKKworcmVzdGFydF90aW1lcjoKKwlza19yZXNldF90aW1lcihzaywgJmhjdHgtPmNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lciwKKwkJICAgICAgICAgICBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyh0X25mYikpOwogb3V0OgogCWJoX3VubG9ja19zb2NrKHNrKTsKIAlzb2NrX3B1dChzayk7CiB9CiAKLXN0YXRpYyBpbnQgY2NpZDNfaGNfdHhfc2VuZF9wYWNrZXQoc3RydWN0IHNvY2sgKnNrLAotCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCisvKgorICogcmV0dXJucworICogICA+IDA6IGRlbGF5IChpbiBtc2VjcykgdGhhdCBzaG91bGQgcGFzcyBiZWZvcmUgYWN0dWFsbHkgc2VuZGluZworICogICA9IDA6IGNhbiBzZW5kIGltbWVkaWF0ZWx5CisgKiAgIDwgMDogZXJyb3IgY29uZGl0aW9uOyBkbyBub3Qgc2VuZCBwYWNrZXQKKyAqLworc3RhdGljIGludCBjY2lkM19oY190eF9zZW5kX3BhY2tldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQzX2hjX3R4X3NrKHNrKTsKIAlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpuZXdfcGFja2V0OwogCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAlsb25nIGRlbGF5OwotCWludCByYyA9IC1FTk9UQ09OTjsKIAotCUJVR19PTihoY3R4ID09IE5VTEwgfHwgaGN0eC0+Y2NpZDNoY3R4X3N0YXRlID09IFRGUkNfU1NUQVRFX1RFUk0pOworCUJVR19PTihoY3R4ID09IE5VTEwpOwogCi0JLyogQ2hlY2sgaWYgcHVyZSBBQ0sgb3IgVGVybWluYXRpbmcqLwogCS8qCi0JICogWFhYOiBXZSBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgREFUQSBhbmQgREFUQUFDSywgb24sIHRoZXNlCi0JICogcGFja2V0cyBjYW4gaGF2ZSB6ZXJvIGxlbmd0aCwgYnV0IHdoeSB0aGUgY29tbWVudCBhYm91dCAicHVyZSBBQ0siPworCSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgZm9yIERhdGEgYW5kIERhdGFBY2sgcGFja2V0cy4gU2VuZGluZworCSAqIHplcm8tc2l6ZWQgRGF0YShBY2spcyBpcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlLCBidXQgZm9yIGNvbmdlc3Rpb24KKwkgKiBjb250cm9sIHRoaXMgY2FzZSBpcyBwYXRob2xvZ2ljYWwgLSBpZ25vcmUgaXQuCiAJICovCi0JaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKLQkJZ290byBvdXQ7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IDApKQorCQlyZXR1cm4gLUVCQURNU0c7CiAKIAkvKiBTZWUgaWYgbGFzdCBwYWNrZXQgYWxsb2NhdGVkIHdhcyBub3Qgc2VudCAqLwogCW5ld19wYWNrZXQgPSBkY2NwX3R4X2hpc3RfaGVhZCgmaGN0eC0+Y2NpZDNoY3R4X2hpc3QpOwpAQCAtMjkxLDEyICsyOTcsMTAgQEAKIAkJbmV3X3BhY2tldCA9IGRjY3BfdHhfaGlzdF9lbnRyeV9uZXcoY2NpZDNfdHhfaGlzdCwKIAkJCQkJCSAgICBTTEFCX0FUT01JQyk7CiAKLQkJcmMgPSAtRU5PQlVGUzsKIAkJaWYgKHVubGlrZWx5KG5ld19wYWNrZXQgPT0gTlVMTCkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6ICVzLCBzaz0lcCwgbm90IGVub3VnaCAiCi0JCQkJICAgICAgICJtZW0gdG8gYWRkIHRvIGhpc3RvcnksIHNlbmQgcmVmdXNlZFxuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzayk7Ci0JCQlnb3RvIG91dDsKKwkJCURDQ1BfV0FSTigiJXMsIHNrPSVwLCBub3QgZW5vdWdoIG1lbSB0byBhZGQgdG8gaGlzdG9yeSwiCisJCQkJICAic2VuZCByZWZ1c2VkXG4iLCBkY2NwX3JvbGUoc2spLCBzayk7CisJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCX0KIAogCQlkY2NwX3R4X2hpc3RfYWRkX2VudHJ5KCZoY3R4LT5jY2lkM2hjdHhfaGlzdCwgbmV3X3BhY2tldCk7CkBAIC0zMTEsMTIzICszMTUsOTQgQEAKIAkJaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50CSA9IDA7CiAJCWhjdHgtPmNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50ID0gbm93OwogCQljY2lkM19oY190eF9zZXRfc3RhdGUoc2ssIFRGUkNfU1NUQVRFX05PX0ZCQUNLKTsKLQkJaGN0eC0+Y2NpZDNoY3R4X3RfaXBpID0gVEZSQ19JTklUSUFMX0lQSTsKIAotCQkvKiBTZXQgbm9taW5hbCBzZW5kIHRpbWUgZm9yIGluaXRpYWwgcGFja2V0ICovCisJCS8qIFNldCBpbml0aWFsIHNlbmRpbmcgcmF0ZSB0byAxIHBhY2tldCBwZXIgc2Vjb25kICovCisJCWNjaWQzX2hjX3R4X3VwZGF0ZV9zKGhjdHgsIHNrYi0+bGVuKTsKKwkJaGN0eC0+Y2NpZDNoY3R4X3ggICAgID0gaGN0eC0+Y2NpZDNoY3R4X3M7CisKKwkJLyogRmlyc3QgdGltZW91dCwgYWNjb3JkaW5nIHRvIFtSRkMgMzQ0OCwgNC4yXSwgaXMgMSBzZWNvbmQgKi8KKwkJaGN0eC0+Y2NpZDNoY3R4X3RfaXBpID0gVVNFQ19QRVJfU0VDOworCQkvKiBJbml0aWFsIGRlbHRhOiBtaW5pbXVtIG9mIDAuNSBzZWMgYW5kIHRfZ3Jhbi8yICovCisJCWhjdHgtPmNjaWQzaGN0eF9kZWx0YSA9IFRGUkNfT1BTWVNfSEFMRl9USU1FX0dSQU47CisKKwkJLyogU2V0IHRfMCBmb3IgaW5pdGlhbCBwYWNrZXQgKi8KIAkJaGN0eC0+Y2NpZDNoY3R4X3Rfbm9tID0gbm93OwotCQl0aW1ldmFsX2FkZF91c2VjcygmaGN0eC0+Y2NpZDNoY3R4X3Rfbm9tLAotCQkJCSAgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKLQkJY2NpZDNfY2FsY19uZXdfZGVsdGEoaGN0eCk7Ci0JCXJjID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBURlJDX1NTVEFURV9OT19GQkFDSzoKIAljYXNlIFRGUkNfU1NUQVRFX0ZCQUNLOgotCQlkZWxheSA9ICh0aW1ldmFsX2RlbHRhKCZub3csICZoY3R4LT5jY2lkM2hjdHhfdF9ub20pIC0KLQkJICAgICAgICAgaGN0eC0+Y2NpZDNoY3R4X2RlbHRhKTsKLQkJZGVsYXkgLz0gLTEwMDA7Ci0JCS8qIGRpdmlkZSBieSAtMTAwMCBpcyB0byBjb252ZXJ0IHRvIG1zIGFuZCBnZXQgc2lnbiByaWdodCAqLwotCQlyYyA9IGRlbGF5ID4gMCA/IGRlbGF5IDogMDsKKwkJZGVsYXkgPSB0aW1ldmFsX2RlbHRhKCZoY3R4LT5jY2lkM2hjdHhfdF9ub20sICZub3cpOworCQkvKgorCQkgKiAJU2NoZWR1bGluZyBvZiBwYWNrZXQgdHJhbnNtaXNzaW9ucyBbUkZDIDM0NDgsIDQuNl0KKwkJICoKKwkJICogaWYgKHRfbm93ID4gdF9ub20gLSBkZWx0YSkKKwkJICogICAgICAgLy8gc2VuZCB0aGUgcGFja2V0IG5vdworCQkgKiBlbHNlCisJCSAqICAgICAgIC8vIHNlbmQgdGhlIHBhY2tldCBpbiAodF9ub20gLSB0X25vdykgbWlsbGlzZWNvbmRzLgorCQkgKi8KKwkJaWYgKGRlbGF5IC0gKGxvbmcpaGN0eC0+Y2NpZDNoY3R4X2RlbHRhID49IDApCisJCQlyZXR1cm4gZGVsYXkgLyAxMDAwTDsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6ICVzLCBzaz0lcCwgSWxsZWdhbCBzdGF0ZSAoJWQpIVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGNjcF9yb2xlKHNrKSwgc2ssIGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmMgPSAtRUlOVkFMOwotCQlicmVhazsKKwljYXNlIFRGUkNfU1NUQVRFX1RFUk06CisJCURDQ1BfQlVHKCJJbGxlZ2FsICVzIHN0YXRlIFRFUk0sIHNrPSVwIiwgZGNjcF9yb2xlKHNrKSwgc2spOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBDYW4gd2Ugc2VuZD8gaWYgc28gYWRkIG9wdGlvbnMgYW5kIGFkZCB0byBwYWNrZXQgaGlzdG9yeSAqLwotCWlmIChyYyA9PSAwKSB7Ci0JCWRwLT5kY2Nwc19oY190eF9pbnNlcnRfb3B0aW9ucyA9IDE7Ci0JCW5ld19wYWNrZXQtPmRjY3BodHhfY2N2YWwgPQotCQkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfY2N2YWwgPQotCQkJCWhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKLQkJdGltZXZhbF9hZGRfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwKLQkJCQkgIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7Ci0JfQotb3V0OgotCXJldHVybiByYzsKKwkvKiBwcmVwYXJlIHRvIHNlbmQgbm93IChhZGQgb3B0aW9ucyBldGMuKSAqLworCWRwLT5kY2Nwc19oY190eF9pbnNlcnRfb3B0aW9ucyA9IDE7CisJbmV3X3BhY2tldC0+ZGNjcGh0eF9jY3ZhbCA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2NjdmFsID0KKwkJCQkgICAgaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50OworCXRpbWV2YWxfYWRkX3VzZWNzKCZoY3R4LT5jY2lkM2hjdHhfdF9ub20sIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2NpZDNfaGNfdHhfcGFja2V0X3NlbnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbW9yZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGNjaWQzX2hjX3R4X3BhY2tldF9zZW50KHN0cnVjdCBzb2NrICpzaywgaW50IG1vcmUsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJY29uc3Qgc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCA9IGNjaWQzX2hjX3R4X3NrKHNrKTsKIAlzdHJ1Y3QgdGltZXZhbCBub3c7CisJdW5zaWduZWQgbG9uZyBxdWFydGVyX3J0dDsKKwlzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpwYWNrZXQ7CiAKLQlCVUdfT04oaGN0eCA9PSBOVUxMIHx8IGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9PSBURlJDX1NTVEFURV9URVJNKTsKKwlCVUdfT04oaGN0eCA9PSBOVUxMKTsKIAogCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKIAotCS8qIGNoZWNrIGlmIHdlIGhhdmUgc2VudCBhIGRhdGEgcGFja2V0ICovCi0JaWYgKGxlbiA+IDApIHsKLQkJdW5zaWduZWQgbG9uZyBxdWFydGVyX3J0dDsKLQkJc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqcGFja2V0OworCWNjaWQzX2hjX3R4X3VwZGF0ZV9zKGhjdHgsIGxlbik7CiAKLQkJcGFja2V0ID0gZGNjcF90eF9oaXN0X2hlYWQoJmhjdHgtPmNjaWQzaGN0eF9oaXN0KTsKLQkJaWYgKHVubGlrZWx5KHBhY2tldCA9PSBOVUxMKSkgewotCQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogcGFja2V0IGRvZXNuJ3QgIgotCQkJCSAgICAgICAiZXhpc3RzIGluIGhpc3RvcnkhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICh1bmxpa2VseShwYWNrZXQtPmRjY3BodHhfc2VudCkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6IG5vIHVuc2VudCBwYWNrZXQgaW4gIgotCQkJCSAgICAgICAiaGlzdG9yeSFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcGFja2V0LT5kY2NwaHR4X3RzdGFtcCA9IG5vdzsKLQkJcGFja2V0LT5kY2NwaHR4X3NlcW5vICA9IGRwLT5kY2Nwc19nc3M7Ci0JCS8qCi0JCSAqIENoZWNrIGlmIHdpbl9jb3VudCBoYXZlIGNoYW5nZWQKLQkJICogQWxnb3JpdGhtIGluICI4LjEuIFdpbmRvdyBDb3VudGVyIFZhbHVlIiBpbiBSRkMgNDM0Mi4KLQkJICovCi0JCXF1YXJ0ZXJfcnR0ID0gdGltZXZhbF9kZWx0YSgmbm93LCAmaGN0eC0+Y2NpZDNoY3R4X3RfbGFzdF93aW5fY291bnQpOwotCQlpZiAobGlrZWx5KGhjdHgtPmNjaWQzaGN0eF9ydHQgPiA4KSkKLQkJCXF1YXJ0ZXJfcnR0IC89IGhjdHgtPmNjaWQzaGN0eF9ydHQgLyA0OwotCi0JCWlmIChxdWFydGVyX3J0dCA+IDApIHsKLQkJCWhjdHgtPmNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50ID0gbm93OwotCQkJaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50CSA9IChoY3R4LT5jY2lkM2hjdHhfbGFzdF93aW5fY291bnQgKwotCQkJCQkJCSAgICBtaW5fdCh1bnNpZ25lZCBsb25nLCBxdWFydGVyX3J0dCwgNSkpICUgMTY7Ci0JCQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCB3aW5kb3cgY2hhbmdlZCBmcm9tICIKLQkJCQkgICAgICAgIiV1IHRvICV1IVxuIiwKLQkJCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssCi0JCQkJICAgICAgIHBhY2tldC0+ZGNjcGh0eF9jY3ZhbCwKLQkJCQkgICAgICAgaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50KTsKLQkJfQotCi0JCWhjdHgtPmNjaWQzaGN0eF9pZGxlID0gMDsKLQkJcGFja2V0LT5kY2NwaHR4X3J0dCAgPSBoY3R4LT5jY2lkM2hjdHhfcnR0OwotCQlwYWNrZXQtPmRjY3BodHhfc2VudCA9IDE7Ci0JfSBlbHNlCi0JCWNjaWQzX3ByX2RlYnVnKCIlcywgc2s9JXAsIHNlcW5vPSVsbHUgTk9UIGluc2VydGVkIVxuIiwKLQkJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywgZHAtPmRjY3BzX2dzcyk7Ci0KLQlzd2l0Y2ggKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSkgewotCWNhc2UgVEZSQ19TU1RBVEVfTk9fU0VOVDoKLQkJLyogaWYgZmlyc3Qgd2Fzbid0IHB1cmUgYWNrICovCi0JCWlmIChsZW4gIT0gMCkKLQkJCXByaW50ayhLRVJOX0NSSVQgIiVzOiAlcywgRmlyc3QgcGFja2V0IHNlbnQgaXMgbm90ZWQgIgotCQkJCQkgImFzIGEgZGF0YSBwYWNrZXRcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spKTsKKwlwYWNrZXQgPSBkY2NwX3R4X2hpc3RfaGVhZCgmaGN0eC0+Y2NpZDNoY3R4X2hpc3QpOworCWlmICh1bmxpa2VseShwYWNrZXQgPT0gTlVMTCkpIHsKKwkJRENDUF9XQVJOKCJwYWNrZXQgZG9lc24ndCBleGlzdCBpbiBoaXN0b3J5IVxuIik7CiAJCXJldHVybjsKLQljYXNlIFRGUkNfU1NUQVRFX05PX0ZCQUNLOgotCWNhc2UgVEZSQ19TU1RBVEVfRkJBQ0s6Ci0JCWlmIChsZW4gPiAwKSB7Ci0JCQl0aW1ldmFsX3N1Yl91c2VjcygmaGN0eC0+Y2NpZDNoY3R4X3Rfbm9tLAotCQkJCSAgaGN0eC0+Y2NpZDNoY3R4X3RfaXBpKTsKLQkJCWNjaWQzX2NhbGNfbmV3X3RfaXBpKGhjdHgpOwotCQkJY2NpZDNfY2FsY19uZXdfZGVsdGEoaGN0eCk7Ci0JCQl0aW1ldmFsX2FkZF91c2VjcygmaGN0eC0+Y2NpZDNoY3R4X3Rfbm9tLAotCQkJCQkgIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6ICVzLCBzaz0lcCwgSWxsZWdhbCBzdGF0ZSAoJWQpIVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGNjcF9yb2xlKHNrKSwgc2ssIGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJYnJlYWs7CiAJfQorCWlmICh1bmxpa2VseShwYWNrZXQtPmRjY3BodHhfc2VudCkpIHsKKwkJRENDUF9XQVJOKCJubyB1bnNlbnQgcGFja2V0IGluIGhpc3RvcnkhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwYWNrZXQtPmRjY3BodHhfdHN0YW1wID0gbm93OworCXBhY2tldC0+ZGNjcGh0eF9zZXFubyAgPSBkcC0+ZGNjcHNfZ3NzOworCS8qCisJICogQ2hlY2sgaWYgd2luX2NvdW50IGhhdmUgY2hhbmdlZAorCSAqIEFsZ29yaXRobSBpbiAiOC4xLiBXaW5kb3cgQ291bnRlciBWYWx1ZSIgaW4gUkZDIDQzNDIuCisJICovCisJcXVhcnRlcl9ydHQgPSB0aW1ldmFsX2RlbHRhKCZub3csICZoY3R4LT5jY2lkM2hjdHhfdF9sYXN0X3dpbl9jb3VudCk7CisJaWYgKGxpa2VseShoY3R4LT5jY2lkM2hjdHhfcnR0ID4gOCkpCisJCXF1YXJ0ZXJfcnR0IC89IGhjdHgtPmNjaWQzaGN0eF9ydHQgLyA0OworCisJaWYgKHF1YXJ0ZXJfcnR0ID4gMCkgeworCQloY3R4LT5jY2lkM2hjdHhfdF9sYXN0X3dpbl9jb3VudCA9IG5vdzsKKwkJaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50CSA9IChoY3R4LT5jY2lkM2hjdHhfbGFzdF93aW5fY291bnQgKworCQkJCQkJICAgIG1pbl90KHVuc2lnbmVkIGxvbmcsIHF1YXJ0ZXJfcnR0LCA1KSkgJSAxNjsKKwkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgd2luZG93IGNoYW5nZWQgZnJvbSAiCisJCQkgICAgICAgIiV1IHRvICV1IVxuIiwKKwkJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywKKwkJCSAgICAgICBwYWNrZXQtPmRjY3BodHhfY2N2YWwsCisJCQkgICAgICAgaGN0eC0+Y2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50KTsKKwl9CisKKwloY3R4LT5jY2lkM2hjdHhfaWRsZSA9IDA7CisJcGFja2V0LT5kY2NwaHR4X3J0dCAgPSBoY3R4LT5jY2lkM2hjdHhfcnR0OworCXBhY2tldC0+ZGNjcGh0eF9zZW50ID0gMTsKIH0KIAogc3RhdGljIHZvaWQgY2NpZDNfaGNfdHhfcGFja2V0X3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNDM3LDEzICs0MTIsMTEgQEAKIAlzdHJ1Y3QgY2NpZDNfb3B0aW9uc19yZWNlaXZlZCAqb3B0X3JlY3Y7CiAJc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqcGFja2V0OwogCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQl1bnNpZ25lZCBsb25nIG5leHRfdG1vdXQ7IAotCXUzMiB0X2VsYXBzZWQ7CisJdW5zaWduZWQgbG9uZyB0X25mYjsKIAl1MzIgcGludjsKLQl1MzIgeF9yZWN2OwotCXUzMiByX3NhbXBsZTsKKwlsb25nIHJfc2FtcGxlLCB0X2VsYXBzZWQ7CiAKLQlCVUdfT04oaGN0eCA9PSBOVUxMIHx8IGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9PSBURlJDX1NTVEFURV9URVJNKTsKKwlCVUdfT04oaGN0eCA9PSBOVUxMKTsKIAogCS8qIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gQUNLcyAqLwogCWlmICghKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgPT0gRENDUF9QS1RfQUNLIHx8CkBAIC00NTIsMzcgKzQyNSw0NSBAQAogCiAJb3B0X3JlY3YgPSAmaGN0eC0+Y2NpZDNoY3R4X29wdGlvbnNfcmVjZWl2ZWQ7CiAKLQl0X2VsYXBzZWQgPSBkcC0+ZGNjcHNfb3B0aW9uc19yZWNlaXZlZC5kY2Nwb3JfZWxhcHNlZF90aW1lICogMTA7Ci0JeF9yZWN2ID0gb3B0X3JlY3YtPmNjaWQzb3JfcmVjZWl2ZV9yYXRlOwotCXBpbnYgPSBvcHRfcmVjdi0+Y2NpZDNvcl9sb3NzX2V2ZW50X3JhdGU7Ci0KIAlzd2l0Y2ggKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSkgewotCWNhc2UgVEZSQ19TU1RBVEVfTk9fU0VOVDoKLQkJLyogRklYTUU6IHdoYXQgdG8gZG8gaGVyZT8gKi8KLQkJcmV0dXJuOwogCWNhc2UgVEZSQ19TU1RBVEVfTk9fRkJBQ0s6CiAJY2FzZSBURlJDX1NTVEFURV9GQkFDSzoKLQkJLyogQ2FsY3VsYXRlIG5ldyByb3VuZCB0cmlwIHNhbXBsZSBieQotCQkgKiBSX3NhbXBsZSA9IChub3cgLSB0X3JlY3ZkYXRhKSAtIHRfZGVsYXkgKi8KLQkJLyogZ2V0IHRfcmVjdmRhdGEgZnJvbSBoaXN0b3J5ICovCisJCS8qIGdldCBwYWNrZXQgZnJvbSBoaXN0b3J5IHRvIGxvb2sgdXAgdF9yZWN2ZGF0YSAqLwogCQlwYWNrZXQgPSBkY2NwX3R4X2hpc3RfZmluZF9lbnRyeSgmaGN0eC0+Y2NpZDNoY3R4X2hpc3QsCiAJCQkJCQkgRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSk7CiAJCWlmICh1bmxpa2VseShwYWNrZXQgPT0gTlVMTCkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6ICVzLCBzaz0lcCwgc2Vxbm8gIgotCQkJCSAgICAgICAiJWxsdSglcykgZG9lcyd0IGV4aXN0IGluIGhpc3RvcnkhXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRjY3Bfcm9sZShzayksIHNrLAorCQkJRENDUF9XQVJOKCIlcyglcCksIHNlcW5vICVsbHUoJXMpIGRvZXNuJ3QgZXhpc3QgIgorCQkJCSAgImluIGhpc3RvcnkhXG4iLCAgZGNjcF9yb2xlKHNrKSwgc2ssCiAJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAotCQkJCWRjY3BfcGFja2V0X25hbWUoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSkpOworCQkJCSAgZGNjcF9wYWNrZXRfbmFtZShEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlKSk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQkvKiBVcGRhdGUgUlRUICovCisJCS8qIFVwZGF0ZSByZWNlaXZlIHJhdGUgKi8KKwkJaGN0eC0+Y2NpZDNoY3R4X3hfcmVjdiA9IG9wdF9yZWN2LT5jY2lkM29yX3JlY2VpdmVfcmF0ZTsKKworCQkvKiBVcGRhdGUgbG9zcyBldmVudCByYXRlICovCisJCXBpbnYgPSBvcHRfcmVjdi0+Y2NpZDNvcl9sb3NzX2V2ZW50X3JhdGU7CisJCWlmIChwaW52ID09IH4wVSB8fCBwaW52ID09IDApCisJCQloY3R4LT5jY2lkM2hjdHhfcCA9IDA7CisJCWVsc2UKKyAJCQloY3R4LT5jY2lkM2hjdHhfcCA9IDEwMDAwMDAgLyBwaW52OworCiAJCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKLQkJcl9zYW1wbGUgPSB0aW1ldmFsX2RlbHRhKCZub3csICZwYWNrZXQtPmRjY3BodHhfdHN0YW1wKTsKLQkJaWYgKHVubGlrZWx5KHJfc2FtcGxlIDw9IHRfZWxhcHNlZCkpCi0JCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIiVzOiByX3NhbXBsZT0ldXVzLCAiCi0JCQkJICAgICAgICJ0X2VsYXBzZWQ9JXV1c1xuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fLCByX3NhbXBsZSwgdF9lbGFwc2VkKTsKKworCQkvKgorCQkgKiBDYWxjdWxhdGUgbmV3IHJvdW5kIHRyaXAgc2FtcGxlIGFzIHBlciBbUkZDIDM0NDgsIDQuM10gYnkKKwkJICogCVJfc2FtcGxlICA9ICAobm93IC0gdF9yZWN2ZGF0YSkgLSB0X2VsYXBzZWQKKwkJICovCisJCXJfc2FtcGxlICA9IHRpbWV2YWxfZGVsdGEoJm5vdywgJnBhY2tldC0+ZGNjcGh0eF90c3RhbXApOworCQl0X2VsYXBzZWQgPSBkcC0+ZGNjcHNfb3B0aW9uc19yZWNlaXZlZC5kY2Nwb3JfZWxhcHNlZF90aW1lICogMTA7CisKKwkJaWYgKHVubGlrZWx5KHJfc2FtcGxlIDw9IDApKSB7CisJCQlEQ0NQX1dBUk4oIldBUk5JTkc6IFJfc2FtcGxlICglbGQpIDw9IDAhXG4iLCByX3NhbXBsZSk7CisJCQlyX3NhbXBsZSA9IDA7CisJCX0gZWxzZSBpZiAodW5saWtlbHkocl9zYW1wbGUgPD0gdF9lbGFwc2VkKSkKKwkJCURDQ1BfV0FSTigiV0FSTklORzogcl9zYW1wbGU9JWxkdXMgPD0gdF9lbGFwc2VkPSVsZHVzXG4iLAorCQkJCSAgcl9zYW1wbGUsIHRfZWxhcHNlZCk7CiAJCWVsc2UKIAkJCXJfc2FtcGxlIC09IHRfZWxhcHNlZDsKIApAQCAtNDk1LDgyICs0NzYsNzkgQEAKIAkJICogcSBpcyBhIGNvbnN0YW50LCBSRkMgMzQ0OCByZWNvbW1lbnRzIDAuOQogCQkgKi8KIAkJaWYgKGhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9PSBURlJDX1NTVEFURV9OT19GQkFDSykgeworCQkJLyogVXNlIExhcmdlciBJbml0aWFsIFdpbmRvd3MgW1JGQyA0MzQyLCBzZWMuIDVdCisJCQkgKiBXZSBkZXZpYXRlIGluIHRoYXQgd2UgdXNlIGBzJyBpbnN0ZWFkIG9mIGBNU1MnLiAqLworCQkJdTE2IHdfaW5pdCA9IG1heCggICAgNCAqIGhjdHgtPmNjaWQzaGN0eF9zLAorCQkJCQkgbWF4KDIgKiBoY3R4LT5jY2lkM2hjdHhfcywgNDM4MCkpOworCQkJaGN0eC0+Y2NpZDNoY3R4X3J0dCAgPSByX3NhbXBsZTsKKwkJCWhjdHgtPmNjaWQzaGN0eF94ICAgID0gdXNlY3NfZGl2KHdfaW5pdCwgcl9zYW1wbGUpOworCQkJaGN0eC0+Y2NpZDNoY3R4X3RfbGQgPSBub3c7CisKKwkJCWNjaWQzX3VwZGF0ZV9zZW5kX3RpbWUoaGN0eCk7CisKKwkJCWNjaWQzX3ByX2RlYnVnKCIlcyglcCksIHM9JXUsIHdfaW5pdD0ldSwgIgorCQkJCSAgICAgICAiUl9zYW1wbGU9JWxkdXMsIFg9JXVcbiIsIGRjY3Bfcm9sZShzayksCisJCQkJICAgICAgIHNrLCBoY3R4LT5jY2lkM2hjdHhfcywgd19pbml0LCByX3NhbXBsZSwKKwkJCQkgICAgICAgaGN0eC0+Y2NpZDNoY3R4X3gpOworCiAJCQljY2lkM19oY190eF9zZXRfc3RhdGUoc2ssIFRGUkNfU1NUQVRFX0ZCQUNLKTsKLQkJCWhjdHgtPmNjaWQzaGN0eF9ydHQgPSByX3NhbXBsZTsKLQkJfSBlbHNlCi0JCQloY3R4LT5jY2lkM2hjdHhfcnR0ID0gKGhjdHgtPmNjaWQzaGN0eF9ydHQgKiA5KSAvIDEwICsKLQkJCQkJICAgICAgcl9zYW1wbGUgLyAxMDsKKwkJfSBlbHNlIHsKKwkJCWhjdHgtPmNjaWQzaGN0eF9ydHQgPSAoOSAqIGhjdHgtPmNjaWQzaGN0eF9ydHQgKworCQkJCQkgICAgICAgICAgICh1MzIpcl9zYW1wbGUgICAgICAgICkgLyAxMDsKIAotCQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCBOZXcgUlRUIGVzdGltYXRlPSV1dXMsICIKLQkJCSAgICAgICAicl9zYW1wbGU9JXVzXG4iLCBkY2NwX3JvbGUoc2spLCBzaywKLQkJCSAgICAgICBoY3R4LT5jY2lkM2hjdHhfcnR0LCByX3NhbXBsZSk7CisJCQljY2lkM19oY190eF91cGRhdGVfeChzaywgJm5vdyk7CiAKLQkJLyogVXBkYXRlIHRpbWVvdXQgaW50ZXJ2YWwgKi8KLQkJaGN0eC0+Y2NpZDNoY3R4X3RfcnRvID0gbWF4X3QodTMyLCA0ICogaGN0eC0+Y2NpZDNoY3R4X3J0dCwKLQkJCQkJICAgICAgVVNFQ19QRVJfU0VDKTsKLQotCQkvKiBVcGRhdGUgcmVjZWl2ZSByYXRlICovCi0JCWhjdHgtPmNjaWQzaGN0eF94X3JlY3YgPSB4X3JlY3Y7LyogWF9yZWN2IGluIGJ5dGVzIHBlciBzZWMgKi8KLQotCQkvKiBVcGRhdGUgbG9zcyBldmVudCByYXRlICovCi0JCWlmIChwaW52ID09IH4wIHx8IHBpbnYgPT0gMCkKLQkJCWhjdHgtPmNjaWQzaGN0eF9wID0gMDsKLQkJZWxzZSB7Ci0JCQloY3R4LT5jY2lkM2hjdHhfcCA9IDEwMDAwMDAgLyBwaW52OwotCi0JCQlpZiAoaGN0eC0+Y2NpZDNoY3R4X3AgPCBURlJDX1NNQUxMRVNUX1ApIHsKLQkJCQloY3R4LT5jY2lkM2hjdHhfcCA9IFRGUkNfU01BTExFU1RfUDsKLQkJCQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwLCBTbWFsbGVzdCBwIHVzZWQhXG4iLAotCQkJCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2spOwotCQkJfQorCQkJY2NpZDNfcHJfZGVidWcoIiVzKCVwKSwgUlRUPSV1dXMgKHNhbXBsZT0lbGR1cyksIHM9JXUsICIKKwkJCQkgICAgICAgInA9JXUsIFhfY2FsYz0ldSwgWD0ldVxuIiwgZGNjcF9yb2xlKHNrKSwKKwkJCQkgICAgICAgc2ssIGhjdHgtPmNjaWQzaGN0eF9ydHQsIHJfc2FtcGxlLAorCQkJCSAgICAgICBoY3R4LT5jY2lkM2hjdHhfcywgaGN0eC0+Y2NpZDNoY3R4X3AsCisJCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94X2NhbGMsCisJCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94KTsKIAkJfQogCiAJCS8qIHVuc2NoZWR1bGUgbm8gZmVlZGJhY2sgdGltZXIgKi8KIAkJc2tfc3RvcF90aW1lcihzaywgJmhjdHgtPmNjaWQzaGN0eF9ub19mZWVkYmFja190aW1lcik7CiAKLQkJLyogVXBkYXRlIHNlbmRpbmcgcmF0ZSAqLwotCQljY2lkM19oY190eF91cGRhdGVfeChzayk7Ci0KLQkJLyogVXBkYXRlIG5leHQgc2VuZCB0aW1lICovCi0JCXRpbWV2YWxfc3ViX3VzZWNzKCZoY3R4LT5jY2lkM2hjdHhfdF9ub20sCi0JCQkJICBoY3R4LT5jY2lkM2hjdHhfdF9pcGkpOwotCQljY2lkM19jYWxjX25ld190X2lwaShoY3R4KTsKLQkJdGltZXZhbF9hZGRfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwKLQkJCQkgIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7Ci0JCWNjaWQzX2NhbGNfbmV3X2RlbHRhKGhjdHgpOwotCiAJCS8qIHJlbW92ZSBhbGwgcGFja2V0cyBvbGRlciB0aGFuIHRoZSBvbmUgYWNrZWQgZnJvbSBoaXN0b3J5ICovCiAJCWRjY3BfdHhfaGlzdF9wdXJnZV9vbGRlcihjY2lkM190eF9oaXN0LAogCQkJCQkgJmhjdHgtPmNjaWQzaGN0eF9oaXN0LCBwYWNrZXQpOwogCQkvKgogCQkgKiBBcyB3ZSBoYXZlIGNhbGN1bGF0ZWQgbmV3IGlwaSwgZGVsdGEsIHRfbm9tIGl0IGlzIHBvc3NpYmxlIHRoYXQKLQkJICogd2Ugbm93IGNhbiBzZW5kIGEgcGFja2V0LCBzbyB3YWtlIHVwIGRjY3Bfd2FpdF9mb3JfY2NpZHMuCisJCSAqIHdlIG5vdyBjYW4gc2VuZCBhIHBhY2tldCwgc28gd2FrZSB1cCBkY2NwX3dhaXRfZm9yX2NjaWQKIAkJICovCiAJCXNrLT5za193cml0ZV9zcGFjZShzayk7CiAKIAkJLyoKLQkJICogU2NoZWR1bGUgbm8gZmVlZGJhY2sgdGltZXIgdG8gZXhwaXJlIGluCi0JCSAqIG1heCg0ICogUiwgMiAqIHMgLyBYKQorCQkgKiBVcGRhdGUgdGltZW91dCBpbnRlcnZhbCBmb3IgdGhlIG5vZmVlZGJhY2sgdGltZXIuCisJCSAqIFdlIHVzZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGluY3JlYXNlIHRoZSBsb3dlciBib3VuZC4KKwkJICogVGhpcyBjYW4gaGVscCBhdm9pZCB0cmlnZ2VyaW5nIHRoZSBub2ZlZWRiYWNrIHRpbWVyIHRvbyBvZnRlbgorCQkgKiAoJ3NwaW5uaW5nJykgb24gTEFOcyB3aXRoIHNtYWxsIFJUVHMuCiAJCSAqLwotCQluZXh0X3Rtb3V0ID0gbWF4KGhjdHgtPmNjaWQzaGN0eF90X3J0bywKLQkJCQkgMiAqIHVzZWNzX2RpdihoY3R4LT5jY2lkM2hjdHhfcywKLQkJCQkJICAgICAgIGhjdHgtPmNjaWQzaGN0eF94KSk7CisJCWhjdHgtPmNjaWQzaGN0eF90X3J0byA9IG1heF90KHUzMiwgNCAqIGhjdHgtPmNjaWQzaGN0eF9ydHQsCisJCQkJCQkgICBDT05GSUdfSVBfRENDUF9DQ0lEM19SVE8gKgorCQkJCQkJICAgKFVTRUNfUEVSX1NFQy8xMDAwKQkgICAgICk7CisJCS8qCisJCSAqIFNjaGVkdWxlIG5vIGZlZWRiYWNrIHRpbWVyIHRvIGV4cGlyZSBpbgorCQkgKiBtYXgodF9SVE8sIDIgKiBzL1gpICA9ICBtYXgodF9SVE8sIDIgKiB0X2lwaSkKKwkJICovCisJCXRfbmZiID0gbWF4KGhjdHgtPmNjaWQzaGN0eF90X3J0bywgMiAqIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7CiAJCQkKIAkJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgU2NoZWR1bGVkIG5vIGZlZWRiYWNrIHRpbWVyIHRvICIKIAkJCSAgICAgICAiZXhwaXJlIGluICVsdSBqaWZmaWVzICglbHV1cylcbiIsCiAJCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssCi0JCQkgICAgICAgdXNlY3NfdG9famlmZmllcyhuZXh0X3Rtb3V0KSwgbmV4dF90bW91dCk7IAorCQkJICAgICAgIHVzZWNzX3RvX2ppZmZpZXModF9uZmIpLCB0X25mYik7CiAKIAkJc2tfcmVzZXRfdGltZXIoc2ssICZoY3R4LT5jY2lkM2hjdHhfbm9fZmVlZGJhY2tfdGltZXIsIAotCQkJICAgICAgIGppZmZpZXMgKyBtYXhfdCh1MzIsIDEsIHVzZWNzX3RvX2ppZmZpZXMobmV4dF90bW91dCkpKTsKKwkJCQkgICBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyh0X25mYikpOwogCiAJCS8qIHNldCBpZGxlIGZsYWcgKi8KIAkJaGN0eC0+Y2NpZDNoY3R4X2lkbGUgPSAxOyAgIAogCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9DUklUICIlczogJXMsIHNrPSVwLCBJbGxlZ2FsIHN0YXRlICglZCkhXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzaywgaGN0eC0+Y2NpZDNoY3R4X3N0YXRlKTsKLQkJZHVtcF9zdGFjaygpOworCWNhc2UgVEZSQ19TU1RBVEVfTk9fU0VOVDoKKwkJaWYgKGRjY3Bfc2soc2spLT5kY2Nwc19yb2xlID09IERDQ1BfUk9MRV9DTElFTlQpCisJCQlEQ0NQX1dBUk4oIklsbGVnYWwgQUNLIHJlY2VpdmVkIC0gbm8gcGFja2V0IHNlbnRcbiIpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFRGUkNfU1NUQVRFX1RFUk06CQkvKiBpZ25vcmUgZmVlZGJhY2sgd2hlbiBjbG9zaW5nICovCiAJCWJyZWFrOwogCX0KIH0KQEAgLTYxMCw5ICs1ODgsOSBAQAogCXN3aXRjaCAob3B0aW9uKSB7CiAJY2FzZSBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEU6CiAJCWlmICh1bmxpa2VseShsZW4gIT0gNCkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6ICVzLCBzaz0lcCwgaW52YWxpZCAiCi0JCQkJICAgICAgICJsZW4gZm9yIFRGUkNfT1BUX0xPU1NfRVZFTlRfUkFURVxuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzayk7CisJCQlEQ0NQX1dBUk4oIiVzLCBzaz0lcCwgaW52YWxpZCBsZW4gJWQgIgorCQkJCSAgImZvciBURlJDX09QVF9MT1NTX0VWRU5UX1JBVEVcbiIsCisJCQkJICBkY2NwX3JvbGUoc2spLCBzaywgbGVuKTsKIAkJCXJjID0gLUVJTlZBTDsKIAkJfSBlbHNlIHsKIAkJCW9wdF9yZWN2LT5jY2lkM29yX2xvc3NfZXZlbnRfcmF0ZSA9IG50b2hsKCooX19iZTMyICopdmFsdWUpOwpAQCAtNjMxLDkgKzYwOSw5IEBACiAJCWJyZWFrOwogCWNhc2UgVEZSQ19PUFRfUkVDRUlWRV9SQVRFOgogCQlpZiAodW5saWtlbHkobGVuICE9IDQpKSB7Ci0JCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIiVzOiAlcywgc2s9JXAsIGludmFsaWQgIgotCQkJCSAgICAgICAibGVuIGZvciBURlJDX09QVF9SRUNFSVZFX1JBVEVcbiIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGNjcF9yb2xlKHNrKSwgc2spOworCQkJRENDUF9XQVJOKCIlcywgc2s9JXAsIGludmFsaWQgbGVuICVkICIKKwkJCQkgICJmb3IgVEZSQ19PUFRfUkVDRUlWRV9SQVRFXG4iLAorCQkJCSAgZGNjcF9yb2xlKHNrKSwgc2ssIGxlbik7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCX0gZWxzZSB7CiAJCQlvcHRfcmVjdi0+Y2NpZDNvcl9yZWNlaXZlX3JhdGUgPSBudG9obCgqKF9fYmUzMiAqKXZhbHVlKTsKQEAgLTY0OSwxOCArNjI3LDkgQEAKIAogc3RhdGljIGludCBjY2lkM19oY190eF9pbml0KHN0cnVjdCBjY2lkICpjY2lkLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqaGN0eCA9IGNjaWRfcHJpdihjY2lkKTsKIAotCWlmIChkcC0+ZGNjcHNfcGFja2V0X3NpemUgPj0gVEZSQ19NSU5fUEFDS0VUX1NJWkUgJiYKLQkgICAgZHAtPmRjY3BzX3BhY2tldF9zaXplIDw9IFRGUkNfTUFYX1BBQ0tFVF9TSVpFKQotCQloY3R4LT5jY2lkM2hjdHhfcyA9IGRwLT5kY2Nwc19wYWNrZXRfc2l6ZTsKLQllbHNlCi0JCWhjdHgtPmNjaWQzaGN0eF9zID0gVEZSQ19TVERfUEFDS0VUX1NJWkU7Ci0KLQkvKiBTZXQgdHJhbnNtaXNzaW9uIHJhdGUgdG8gMSBwYWNrZXQgcGVyIHNlY29uZCAqLwotCWhjdHgtPmNjaWQzaGN0eF94ICAgICA9IGhjdHgtPmNjaWQzaGN0eF9zOwotCWhjdHgtPmNjaWQzaGN0eF90X3J0byA9IFVTRUNfUEVSX1NFQzsKKwloY3R4LT5jY2lkM2hjdHhfcyAgICAgPSAwOwogCWhjdHgtPmNjaWQzaGN0eF9zdGF0ZSA9IFRGUkNfU1NUQVRFX05PX1NFTlQ7CiAJSU5JVF9MSVNUX0hFQUQoJmhjdHgtPmNjaWQzaGN0eF9oaXN0KTsKIApAQCAtNjg4LDE0ICs2NTcsNyBAQAogICogUlggSGFsZiBDb25uZWN0aW9uIG1ldGhvZHMKICAqLwogCi0vKiBURlJDIHJlY2VpdmVyIHN0YXRlcyAqLwotZW51bSBjY2lkM19oY19yeF9zdGF0ZXMgewotICAgICAgIAlURlJDX1JTVEFURV9OT19EQVRBID0gMSwKLQlURlJDX1JTVEFURV9EQVRBLAotCVRGUkNfUlNUQVRFX1RFUk0gICAgPSAxMjcsCi19OwotCi0jaWZkZWYgQ0NJRDNfREVCVUcKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgKmNjaWQzX3J4X3N0YXRlX25hbWUoZW51bSBjY2lkM19oY19yeF9zdGF0ZXMgc3RhdGUpCiB7CiAJc3RhdGljIGNoYXIgKmNjaWQzX3J4X3N0YXRlX25hbWVzW10gPSB7CkBAIC03MjEsNiArNjgzLDE1IEBACiAJaGNyeC0+Y2NpZDNoY3J4X3N0YXRlID0gc3RhdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjY2lkM19oY19yeF91cGRhdGVfcyhzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAqaGNyeCwgaW50IGxlbikKK3sKKwlpZiAodW5saWtlbHkobGVuID09IDApKQkvKiBkb24ndCB1cGRhdGUgb24gZW1wdHkgcGFja2V0cyAoZS5nLiBBQ0tzKSAqLworCQljY2lkM19wcl9kZWJ1ZygiUGFja2V0IHBheWxvYWQgbGVuZ3RoIGlzIDAgLSBub3QgdXBkYXRpbmdcbiIpOworCWVsc2UKKwkJaGNyeC0+Y2NpZDNoY3J4X3MgPSBoY3J4LT5jY2lkM2hjcnhfcyA9PSAwID8gbGVuIDoKKwkJCQkgICAgKDkgKiBoY3J4LT5jY2lkM2hjcnhfcyArIGxlbikgLyAxMDsKK30KKwogc3RhdGljIHZvaWQgY2NpZDNfaGNfcnhfc2VuZF9mZWVkYmFjayhzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgKmhjcnggPSBjY2lkM19oY19yeF9zayhzayk7CkBAIC03NDMsMTggKzcxNCwxNSBAQAogCQkJCQkJICAgZGVsdGEpOwogCX0KIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6ICVzLCBzaz0lcCwgSWxsZWdhbCBzdGF0ZSAoJWQpIVxuIiwKLQkJICAgICAgIF9fRlVOQ1RJT05fXywgZGNjcF9yb2xlKHNrKSwgc2ssIGhjcngtPmNjaWQzaGNyeF9zdGF0ZSk7Ci0JCWR1bXBfc3RhY2soKTsKKwljYXNlIFRGUkNfUlNUQVRFX1RFUk06CisJCURDQ1BfQlVHKCJJbGxlZ2FsICVzIHN0YXRlIFRFUk0sIHNrPSVwIiwgZGNjcF9yb2xlKHNrKSwgc2spOwogCQlyZXR1cm47CiAJfQogCiAJcGFja2V0ID0gZGNjcF9yeF9oaXN0X2ZpbmRfZGF0YV9wYWNrZXQoJmhjcngtPmNjaWQzaGNyeF9oaXN0KTsKIAlpZiAodW5saWtlbHkocGFja2V0ID09IE5VTEwpKSB7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6ICVzLCBzaz0lcCwgbm8gZGF0YSBwYWNrZXQgIgotCQkJICAgICAgICJpbiBoaXN0b3J5IVxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRjY3Bfcm9sZShzayksIHNrKTsKKwkJRENDUF9XQVJOKCIlcywgc2s9JXAsIG5vIGRhdGEgcGFja2V0IGluIGhpc3RvcnkhXG4iLAorCQkJICBkY2NwX3JvbGUoc2spLCBzayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg0MiwyOSArODEwLDI5IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KHN0ZXAgPT0gMCkpIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogJXMsIHNrPSVwLCBwYWNrZXQgaGlzdG9yeSAiCi0JCQkgICAgICAgImNvbnRhaW5zIG5vIGRhdGEgcGFja2V0cyFcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzayk7CisJCURDQ1BfV0FSTigiJXMsIHNrPSVwLCBwYWNrZXQgaGlzdG9yeSBoYXMgbm8gZGF0YSBwYWNrZXRzIVxuIiwKKwkJCSAgZGNjcF9yb2xlKHNrKSwgc2spOwogCQlyZXR1cm4gfjA7CiAJfQogCiAJaWYgKHVubGlrZWx5KGludGVydmFsID09IDApKSB7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6ICVzLCBzaz0lcCwgQ291bGQgbm90IGZpbmQgYSAiCi0JCQkgICAgICAgIndpbl9jb3VudCBpbnRlcnZhbCA+IDAuIERlZmF1bHRpbmcgdG8gMVxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRjY3Bfcm9sZShzayksIHNrKTsKKwkJRENDUF9XQVJOKCIlcywgc2s9JXAsIENvdWxkIG5vdCBmaW5kIGEgd2luX2NvdW50IGludGVydmFsID4gMC4iCisJCQkgICJEZWZhdWx0aW5nIHRvIDFcbiIsIGRjY3Bfcm9sZShzayksIHNrKTsKIAkJaW50ZXJ2YWwgPSAxOwogCX0KIGZvdW5kOgogCWlmICghdGFpbCkgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIiVzOiB0YWlsIGlzIG51bGxcbiIsCi0JCSAgIF9fRlVOQ1RJT05fXyk7CisJCURDQ1BfQ1JJVCgidGFpbCBpcyBudWxsXG4iKTsKIAkJcmV0dXJuIH4wOwogCX0KIAlydHQgPSB0aW1ldmFsX2RlbHRhKCZ0c3RhbXAsICZ0YWlsLT5kY2NwaHJ4X3RzdGFtcCkgKiA0IC8gaW50ZXJ2YWw7CiAJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgYXBwcm94aW1hdGVkIFJUVCB0byAldXVzXG4iLAogCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssIHJ0dCk7Ci0JaWYgKHJ0dCA9PSAwKQotCQlydHQgPSAxOworCisJaWYgKHJ0dCA9PSAwKSB7CisJCURDQ1BfV0FSTigiUlRUPT0wLCBzZXR0aW5nIHRvIDFcbiIpOworIAkJcnR0ID0gMTsKKwl9CiAKIAlkY2NwX3RpbWVzdGFtcChzaywgJnRzdGFtcCk7CiAJZGVsdGEgPSB0aW1ldmFsX2RlbHRhKCZ0c3RhbXAsICZoY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2spOwpAQCAtODc4LDkgKzg0Niw3IEBACiAJdG1wMiA9ICh1MzIpdG1wMTsKIAogCWlmICghdG1wMikgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgInRtcDIgPSAwICIKLQkJICAgIiVzOiB4X3JlY3YgPSAldSwgcnR0ID0ldVxuIiwKLQkJICAgX19GVU5DVElPTl9fLCB4X3JlY3YsIHJ0dCk7CisJCURDQ1BfQ1JJVCgidG1wMiA9IDAsIHhfcmVjdiA9ICV1LCBydHQgPSV1XG4iLCB4X3JlY3YsIHJ0dCk7CiAJCXJldHVybiB+MDsKIAl9CiAKQEAgLTkyNiw4ICs4OTIsNyBAQAogCQllbnRyeSA9IGRjY3BfbGlfaGlzdF9lbnRyeV9uZXcoY2NpZDNfbGlfaGlzdCwgU0xBQl9BVE9NSUMpOwogCiAJCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9DUklUICIlczogb3V0IG9mIG1lbW9yeVxuIixfX0ZVTkNUSU9OX18pOwotCQkJZHVtcF9zdGFjaygpOworCQkJRENDUF9CVUcoIm91dCBvZiBtZW1vcnkgLSBjYW4gbm90IGFsbG9jYXRlIGVudHJ5Iik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTAwMiwxMyArOTY3LDEwIEBACiAJY29uc3Qgc3RydWN0IGRjY3Bfb3B0aW9uc19yZWNlaXZlZCAqb3B0X3JlY3Y7CiAJc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqcGFja2V0OwogCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQl1OCB3aW5fY291bnQ7CiAJdTMyIHBfcHJldiwgcnR0X3ByZXYsIHJfc2FtcGxlLCB0X2VsYXBzZWQ7Ci0JaW50IGxvc3M7CisJaW50IGxvc3MsIHBheWxvYWRfc2l6ZTsKIAotCUJVR19PTihoY3J4ID09IE5VTEwgfHwKLQkgICAgICAgIShoY3J4LT5jY2lkM2hjcnhfc3RhdGUgPT0gVEZSQ19SU1RBVEVfTk9fREFUQSB8fAotCQkgaGNyeC0+Y2NpZDNoY3J4X3N0YXRlID09IFRGUkNfUlNUQVRFX0RBVEEpKTsKKwlCVUdfT04oaGNyeCA9PSBOVUxMKTsKIAogCW9wdF9yZWN2ID0gJmRjY3Bfc2soc2spLT5kY2Nwc19vcHRpb25zX3JlY2VpdmVkOwogCkBAIC0xMDI2LDkgKzk4OCw4IEBACiAJCXRfZWxhcHNlZCA9IG9wdF9yZWN2LT5kY2Nwb3JfZWxhcHNlZF90aW1lICogMTA7CiAKIAkJaWYgKHVubGlrZWx5KHJfc2FtcGxlIDw9IHRfZWxhcHNlZCkpCi0JCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIiVzOiByX3NhbXBsZT0ldXVzLCAiCi0JCQkJICAgICAgICJ0X2VsYXBzZWQ9JXV1c1xuIiwKLQkJCQkgICAgICAgX19GVU5DVElPTl9fLCByX3NhbXBsZSwgdF9lbGFwc2VkKTsKKwkJCURDQ1BfV0FSTigicl9zYW1wbGU9JXV1cywgdF9lbGFwc2VkPSV1dXNcbiIsCisJCQkJICByX3NhbXBsZSwgdF9lbGFwc2VkKTsKIAkJZWxzZQogCQkJcl9zYW1wbGUgLT0gdF9lbGFwc2VkOwogCkBAIC0xMDUyLDE5ICsxMDEzLDE5IEBACiAJcGFja2V0ID0gZGNjcF9yeF9oaXN0X2VudHJ5X25ldyhjY2lkM19yeF9oaXN0LCBzaywgb3B0X3JlY3YtPmRjY3Bvcl9uZHAsCiAJCQkJCXNrYiwgU0xBQl9BVE9NSUMpOwogCWlmICh1bmxpa2VseShwYWNrZXQgPT0gTlVMTCkpIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogJXMsIHNrPSVwLCBOb3QgZW5vdWdoIG1lbSB0byAiCi0JCQkJImFkZCByeCBwYWNrZXQgdG8gaGlzdG9yeSwgY29uc2lkZXIgaXQgbG9zdCFcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzayk7CisJCURDQ1BfV0FSTigiJXMsIHNrPSVwLCBOb3QgZW5vdWdoIG1lbSB0byBhZGQgcnggcGFja2V0ICIKKwkJCSAgInRvIGhpc3RvcnksIGNvbnNpZGVyIGl0IGxvc3QhXG4iLCBkY2NwX3JvbGUoc2spLCBzayk7CiAJCXJldHVybjsKIAl9CiAKLQl3aW5fY291bnQgPSBwYWNrZXQtPmRjY3BocnhfY2N2YWw7Ci0KIAlsb3NzID0gY2NpZDNfaGNfcnhfZGV0ZWN0X2xvc3Moc2ssIHBhY2tldCk7CiAKIAlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9PSBEQ0NQX1BLVF9BQ0spCiAJCXJldHVybjsKIAorCXBheWxvYWRfc2l6ZSA9IHNrYi0+bGVuIC0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfZG9mZiAqIDQ7CisJY2NpZDNfaGNfcnhfdXBkYXRlX3MoaGNyeCwgcGF5bG9hZF9zaXplKTsKKwogCXN3aXRjaCAoaGNyeC0+Y2NpZDNoY3J4X3N0YXRlKSB7CiAJY2FzZSBURlJDX1JTVEFURV9OT19EQVRBOgogCQljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwKCVzKSwgc2tiPSVwLCBzZW5kaW5nIGluaXRpYWwgIgpAQCAtMTA3NSw4ICsxMDM2LDcgQEAKIAkJY2NpZDNfaGNfcnhfc2V0X3N0YXRlKHNrLCBURlJDX1JTVEFURV9EQVRBKTsKIAkJcmV0dXJuOwogCWNhc2UgVEZSQ19SU1RBVEVfREFUQToKLQkJaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YgKz0gc2tiLT5sZW4gLQotCQkJCQkgICAgICBkY2NwX2hkcihza2IpLT5kY2NwaF9kb2ZmICogNDsKKwkJaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YgKz0gcGF5bG9hZF9zaXplOwogCQlpZiAobG9zcykKIAkJCWJyZWFrOwogCkBAIC0xMDg3LDEwICsxMDQ3LDggQEAKIAkJCWNjaWQzX2hjX3J4X3NlbmRfZmVlZGJhY2soc2spOwogCQl9CiAJCXJldHVybjsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9DUklUICIlczogJXMsIHNrPSVwLCBJbGxlZ2FsIHN0YXRlICglZCkhXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBkY2NwX3JvbGUoc2spLCBzaywgaGNyeC0+Y2NpZDNoY3J4X3N0YXRlKTsKLQkJZHVtcF9zdGFjaygpOworCWNhc2UgVEZSQ19SU1RBVEVfVEVSTToKKwkJRENDUF9CVUcoIklsbGVnYWwgJXMgc3RhdGUgVEVSTSwgc2s9JXAiLCBkY2NwX3JvbGUoc2spLCBzayk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExMDcsMTAgKzEwNjUsOCBAQAogCQkvKiBTY2FsaW5nIHVwIGJ5IDEwMDAwMDAgYXMgZml4ZWQgZGVjaW1hbCAqLwogCQlpZiAoaV9tZWFuICE9IDApCiAJCQloY3J4LT5jY2lkM2hjcnhfcCA9IDEwMDAwMDAgLyBpX21lYW47Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IGVtcHR5IGxvc3MgaGlzdFxuIixfX0ZVTkNUSU9OX18pOwotCQlkdW1wX3N0YWNrKCk7Ci0JfQorCX0gZWxzZQorCQlEQ0NQX0JVRygiZW1wdHkgbG9zcyBoaXN0b3J5Iik7CiAKIAlpZiAoaGNyeC0+Y2NpZDNoY3J4X3AgPiBwX3ByZXYpIHsKIAkJY2NpZDNfaGNfcnhfc2VuZF9mZWVkYmFjayhzayk7CkBAIC0xMTIwLDIyICsxMDc2LDE2IEBACiAKIHN0YXRpYyBpbnQgY2NpZDNfaGNfcnhfaW5pdChzdHJ1Y3QgY2NpZCAqY2NpZCwgc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAJc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgKmhjcnggPSBjY2lkX3ByaXYoY2NpZCk7CiAKIAljY2lkM19wcl9kZWJ1ZygiJXMsIHNrPSVwXG4iLCBkY2NwX3JvbGUoc2spLCBzayk7CiAKLQlpZiAoZHAtPmRjY3BzX3BhY2tldF9zaXplID49IFRGUkNfTUlOX1BBQ0tFVF9TSVpFICYmCi0JICAgIGRwLT5kY2Nwc19wYWNrZXRfc2l6ZSA8PSBURlJDX01BWF9QQUNLRVRfU0laRSkKLQkJaGNyeC0+Y2NpZDNoY3J4X3MgPSBkcC0+ZGNjcHNfcGFja2V0X3NpemU7Ci0JZWxzZQotCQloY3J4LT5jY2lkM2hjcnhfcyA9IFRGUkNfU1REX1BBQ0tFVF9TSVpFOwotCiAJaGNyeC0+Y2NpZDNoY3J4X3N0YXRlID0gVEZSQ19SU1RBVEVfTk9fREFUQTsKIAlJTklUX0xJU1RfSEVBRCgmaGNyeC0+Y2NpZDNoY3J4X2hpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZoY3J4LT5jY2lkM2hjcnhfbGlfaGlzdCk7CiAJZGNjcF90aW1lc3RhbXAoc2ssICZoY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfYWNrKTsKIAloY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2sgPSBoY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfYWNrOworCWhjcngtPmNjaWQzaGNyeF9zICAgPSAwOwogCWhjcngtPmNjaWQzaGNyeF9ydHQgPSA1MDAwOyAvKiBYWFggNW1zIGZvciBub3cuLi4gKi8KIAlyZXR1cm4gMDsKIH0KQEAgLTEyNjEsOCArMTIxMSwxMCBAQAogCS5jY2lkX2hjX3R4X2dldHNvY2tvcHQJICAgPSBjY2lkM19oY190eF9nZXRzb2Nrb3B0LAogfTsKICAKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9DQ0lEM19ERUJVRwogbW9kdWxlX3BhcmFtKGNjaWQzX2RlYnVnLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhjY2lkM19kZWJ1ZywgIkVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOworI2VuZGlmCiAKIHN0YXRpYyBfX2luaXQgaW50IGNjaWQzX21vZHVsZV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCAwYTJjYjc1Li4wNzU5NmQ3IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmgKQEAgLTQyLDIyICs0MiwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3RmcmMuaD4KICNpbmNsdWRlICIuLi9jY2lkLmgiCiAKLSNkZWZpbmUgVEZSQ19NSU5fUEFDS0VUX1NJWkUJICAgMTYKLSNkZWZpbmUgVEZSQ19TVERfUEFDS0VUX1NJWkUJICAyNTYKLSNkZWZpbmUgVEZSQ19NQVhfUEFDS0VUX1NJWkUJNjU1MzUKLQotLyogVHdvIHNlY29uZHMgYXMgcGVyIENDSUQzIHNwZWMgKi8KKy8qIFR3byBzZWNvbmRzIGFzIHBlciBSRkMgMzQ0OCA0LjIgKi8KICNkZWZpbmUgVEZSQ19JTklUSUFMX1RJTUVPVVQJICAgKDIgKiBVU0VDX1BFUl9TRUMpCiAKLSNkZWZpbmUgVEZSQ19JTklUSUFMX0lQSQkgICAoVVNFQ19QRVJfU0VDIC8gNCkKLQogLyogSW4gdXNlY3MgLSBoYWxmIHRoZSBzY2hlZHVsaW5nIGdyYW51bGFyaXR5IGFzIHBlciBSRkMzNDQ4IDQuNiAqLwogI2RlZmluZSBURlJDX09QU1lTX0hBTEZfVElNRV9HUkFOICAoVVNFQ19QRVJfU0VDIC8gKDIgKiBIWikpCiAKLS8qIEluIHNlY29uZHMgKi8KLSNkZWZpbmUgVEZSQ19NQVhfQkFDS19PRkZfVElNRQkgICA2NAotCi0jZGVmaW5lIFRGUkNfU01BTExFU1RfUAkJICAgNDAKKy8qIFBhcmFtZXRlciB0X21iaSBmcm9tIFtSRkMgMzQ0OCwgNC4zXTogYmFja29mZiBpbnRlcnZhbCBpbiBzZWNvbmRzICovCisjZGVmaW5lIFRGUkNfVF9NQkkJCSAgIDY0CiAKIGVudW0gY2NpZDNfb3B0aW9ucyB7CiAJVEZSQ19PUFRfTE9TU19FVkVOVF9SQVRFID0gMTkyLApAQCAtNzMsMjYgKzY1LDM2IEBACiAJdTMyIGNjaWQzb3JfcmVjZWl2ZV9yYXRlOwogfTsKIAotLyoqIHN0cnVjdCBjY2lkM19oY190eF9zb2NrIC0gQ0NJRDMgc2VuZGVyIGhhbGYgY29ubmVjdGlvbiBzb2NrCisvKiBURlJDIHNlbmRlciBzdGF0ZXMgKi8KK2VudW0gY2NpZDNfaGNfdHhfc3RhdGVzIHsKKyAgICAgICAJVEZSQ19TU1RBVEVfTk9fU0VOVCA9IDEsCisJVEZSQ19TU1RBVEVfTk9fRkJBQ0ssCisJVEZSQ19TU1RBVEVfRkJBQ0ssCisJVEZSQ19TU1RBVEVfVEVSTSwKK307CisKKy8qKiBzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAtIENDSUQzIHNlbmRlciBoYWxmLWNvbm5lY3Rpb24gc29ja2V0CiAgKgotICAqIEBjY2lkM2hjdHhfc3RhdGUgLSBTZW5kZXIgc3RhdGUKLSAgKiBAY2NpZDNoY3R4X3ggLSBDdXJyZW50IHNlbmRpbmcgcmF0ZQotICAqIEBjY2lkM2hjdHhfeF9yZWN2IC0gUmVjZWl2ZSByYXRlCi0gICogQGNjaWQzaGN0eF94X2NhbGMgLSBDYWxjdWxhdGVkIHNlbmQgKD8pIHJhdGUKLSAgKiBAY2NpZDNoY3R4X3MgLSBQYWNrZXQgc2l6ZQotICAqIEBjY2lkM2hjdHhfcnR0IC0gRXN0aW1hdGUgb2YgY3VycmVudCByb3VuZCB0cmlwIHRpbWUgaW4gdXNlY3MKLSAgKiBAQGNjaWQzaGN0eF9wIC0gQ3VycmVudCBsb3NzIGV2ZW50IHJhdGUgKDAtMSkgc2NhbGVkIGJ5IDEwMDAwMDAKLSAgKiBAY2NpZDNoY3R4X2xhc3Rfd2luX2NvdW50IC0gTGFzdCB3aW5kb3cgY291bnRlciBzZW50Ci0gICogQGNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50IC0gVGltZXN0YW1wIG9mIGVhcmxpZXN0IHBhY2tldAotICAqIAkJCQkgIHdpdGggbGFzdF93aW5fY291bnQgdmFsdWUgc2VudAotICAqIEBjY2lkM2hjdHhfbm9fZmVlZGJhY2tfdGltZXIgLSBIYW5kbGUgdG8gbm8gZmVlZGJhY2sgdGltZXIKLSAgKiBAY2NpZDNoY3R4X2lkbGUgLSBGSVhNRQotICAqIEBjY2lkM2hjdHhfdF9sZCAtIFRpbWUgbGFzdCBkb3VibGVkIGR1cmluZyBzbG93IHN0YXJ0Ci0gICogQGNjaWQzaGN0eF90X25vbSAtIE5vbWluYWwgc2VuZCB0aW1lIG9mIG5leHQgcGFja2V0Ci0gICogQGNjaWQzaGN0eF90X2lwaSAtIEludGVycGFja2V0IChzZW5kKSBpbnRlcnZhbAotICAqIEBjY2lkM2hjdHhfZGVsdGEgLSBTZW5kIHRpbWVyIGRlbHRhCi0gICogQGNjaWQzaGN0eF9oaXN0IC0gUGFja2V0IGhpc3RvcnkKLSAgKi8KKyAqIEBjY2lkM2hjdHhfeCAtIEN1cnJlbnQgc2VuZGluZyByYXRlCisgKiBAY2NpZDNoY3R4X3hfcmVjdiAtIFJlY2VpdmUgcmF0ZQorICogQGNjaWQzaGN0eF94X2NhbGMgLSBDYWxjdWxhdGVkIHNlbmQgcmF0ZSAoUkZDIDM0NDgsIDMuMSkKKyAqIEBjY2lkM2hjdHhfcnR0IC0gRXN0aW1hdGUgb2YgY3VycmVudCByb3VuZCB0cmlwIHRpbWUgaW4gdXNlY3MKKyAqIEBjY2lkM2hjdHhfcCAtIEN1cnJlbnQgbG9zcyBldmVudCByYXRlICgwLTEpIHNjYWxlZCBieSAxMDAwMDAwCisgKiBAY2NpZDNoY3R4X3MgLSBQYWNrZXQgc2l6ZQorICogQGNjaWQzaGN0eF90X3J0byAtIFJldHJhbnNtaXNzaW9uIFRpbWVvdXQgKFJGQyAzNDQ4LCAzLjEpCisgKiBAY2NpZDNoY3R4X3RfaXBpIC0gSW50ZXJwYWNrZXQgKHNlbmQpIGludGVydmFsIChSRkMgMzQ0OCwgNC42KQorICogQGNjaWQzaGN0eF9zdGF0ZSAtIFNlbmRlciBzdGF0ZSwgb25lIG9mICVjY2lkM19oY190eF9zdGF0ZXMKKyAqIEBjY2lkM2hjdHhfbGFzdF93aW5fY291bnQgLSBMYXN0IHdpbmRvdyBjb3VudGVyIHNlbnQKKyAqIEBjY2lkM2hjdHhfdF9sYXN0X3dpbl9jb3VudCAtIFRpbWVzdGFtcCBvZiBlYXJsaWVzdCBwYWNrZXQKKyAqIAkJCQkgd2l0aCBsYXN0X3dpbl9jb3VudCB2YWx1ZSBzZW50CisgKiBAY2NpZDNoY3R4X25vX2ZlZWRiYWNrX3RpbWVyIC0gSGFuZGxlIHRvIG5vIGZlZWRiYWNrIHRpbWVyCisgKiBAY2NpZDNoY3R4X2lkbGUgLSBGbGFnIGluZGljYXRpbmcgdGhhdCBzZW5kZXIgaXMgaWRsaW5nCisgKiBAY2NpZDNoY3R4X3RfbGQgLSBUaW1lIGxhc3QgZG91YmxlZCBkdXJpbmcgc2xvdyBzdGFydAorICogQGNjaWQzaGN0eF90X25vbSAtIE5vbWluYWwgc2VuZCB0aW1lIG9mIG5leHQgcGFja2V0CisgKiBAY2NpZDNoY3R4X2RlbHRhIC0gU2VuZCB0aW1lciBkZWx0YQorICogQGNjaWQzaGN0eF9oaXN0IC0gUGFja2V0IGhpc3RvcnkKKyAqIEBjY2lkM2hjdHhfb3B0aW9uc19yZWNlaXZlZCAtIFBhcnNlZCBzZXQgb2YgcmV0cmlldmVkIG9wdGlvbnMKKyAqLwogc3RydWN0IGNjaWQzX2hjX3R4X3NvY2sgewogCXN0cnVjdCB0ZnJjX3R4X2luZm8JCWNjaWQzaGN0eF90ZnJjOwogI2RlZmluZSBjY2lkM2hjdHhfeAkJCWNjaWQzaGN0eF90ZnJjLnRmcmN0eF94CkBAIC0xMDMsNyArMTA1LDcgQEAKICNkZWZpbmUgY2NpZDNoY3R4X3RfcnRvCQkJY2NpZDNoY3R4X3RmcmMudGZyY3R4X3J0bwogI2RlZmluZSBjY2lkM2hjdHhfdF9pcGkJCQljY2lkM2hjdHhfdGZyYy50ZnJjdHhfaXBpCiAJdTE2CQkJCWNjaWQzaGN0eF9zOwotICAJdTgJCQkJY2NpZDNoY3R4X3N0YXRlOworICAJZW51bSBjY2lkM19oY190eF9zdGF0ZXMgCWNjaWQzaGN0eF9zdGF0ZTo4OwogCXU4CQkJCWNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKIAl1OAkJCQljY2lkM2hjdHhfaWRsZTsKIAlzdHJ1Y3QgdGltZXZhbAkJCWNjaWQzaGN0eF90X2xhc3Rfd2luX2NvdW50OwpAQCAtMTE1LDIzICsxMTcsNDggQEAKIAlzdHJ1Y3QgY2NpZDNfb3B0aW9uc19yZWNlaXZlZAljY2lkM2hjdHhfb3B0aW9uc19yZWNlaXZlZDsKIH07CiAKKy8qIFRGUkMgcmVjZWl2ZXIgc3RhdGVzICovCitlbnVtIGNjaWQzX2hjX3J4X3N0YXRlcyB7CisgICAgICAgCVRGUkNfUlNUQVRFX05PX0RBVEEgPSAxLAorCVRGUkNfUlNUQVRFX0RBVEEsCisJVEZSQ19SU1RBVEVfVEVSTSAgICA9IDEyNywKK307CisKKy8qKiBzdHJ1Y3QgY2NpZDNfaGNfcnhfc29jayAtIENDSUQzIHJlY2VpdmVyIGhhbGYtY29ubmVjdGlvbiBzb2NrZXQKKyAqCisgKiAgQGNjaWQzaGNyeF94X3JlY3YgIC0gIFJlY2VpdmVyIGVzdGltYXRlIG9mIHNlbmQgcmF0ZSAoUkZDIDM0NDggNC4zKQorICogIEBjY2lkM2hjcnhfcnR0ICAtICBSZWNlaXZlciBlc3RpbWF0ZSBvZiBydHQgKG5vbi1zdGFuZGFyZCkKKyAqICBAY2NpZDNoY3J4X3AgIC0gIGN1cnJlbnQgbG9zcyBldmVudCByYXRlIChSRkMgMzQ0OCA1LjQpCisgKiAgQGNjaWQzaGNyeF9zZXFub19ub25sb3NzICAtICBMYXN0IHJlY2VpdmVkIG5vbi1sb3NzIHNlcXVlbmNlIG51bWJlcgorICogIEBjY2lkM2hjcnhfY2N2YWxfbm9ubG9zcyAgLSAgTGFzdCByZWNlaXZlZCBub24tbG9zcyBXaW5kb3cgQ0NWYWwKKyAqICBAY2NpZDNoY3J4X2NjdmFsX2xhc3RfY291bnRlciAgLSAgVHJhY2tzIHdpbmRvdyBjb3VudGVyIChSRkMgNDM0MiwgOC4xKQorICogIEBjY2lkM2hjcnhfc3RhdGUgIC0gIHJlY2VpdmVyIHN0YXRlLCBvbmUgb2YgJWNjaWQzX2hjX3J4X3N0YXRlcworICogIEBjY2lkM2hjcnhfYnl0ZXNfcmVjdiAgLSAgVG90YWwgc3VtIG9mIERDQ1AgcGF5bG9hZCBieXRlcworICogIEBjY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2sgIC0gIFRpbWUgYXQgd2hpY2ggbGFzdCBmZWVkYmFjayB3YXMgc2VudAorICogIEBjY2lkM2hjcnhfdHN0YW1wX2xhc3RfYWNrICAtICBUaW1lIGF0IHdoaWNoIGxhc3QgZmVlZGJhY2sgd2FzIHNlbnQKKyAqICBAY2NpZDNoY3J4X2hpc3QgIC0gIFBhY2tldCBoaXN0b3J5CisgKiAgQGNjaWQzaGNyeF9saV9oaXN0ICAtICBMb3NzIEludGVydmFsIEhpc3RvcnkKKyAqICBAY2NpZDNoY3J4X3MgIC0gIFJlY2VpdmVkIHBhY2tldCBzaXplIGluIGJ5dGVzCisgKiAgQGNjaWQzaGNyeF9waW52ICAtICBJbnZlcnNlIG9mIExvc3MgRXZlbnQgUmF0ZSAoUkZDIDQzNDIsIHNlYy4gOC41KQorICogIEBjY2lkM2hjcnhfZWxhcHNlZF90aW1lICAtICBUaW1lIHNpbmNlIHBhY2tldCByZWNlcHRpb24KKyAqLwogc3RydWN0IGNjaWQzX2hjX3J4X3NvY2sgewotCXN0cnVjdCB0ZnJjX3J4X2luZm8JY2NpZDNoY3J4X3RmcmM7Ci0jZGVmaW5lIGNjaWQzaGNyeF94X3JlY3YJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3hfcmVjdgotI2RlZmluZSBjY2lkM2hjcnhfcnR0CQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcnR0Ci0jZGVmaW5lIGNjaWQzaGNyeF9wCQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcAotICAJdTY0CQkJY2NpZDNoY3J4X3NlcW5vX25vbmxvc3M6NDgsCi0JCQkJY2NpZDNoY3J4X2NjdmFsX25vbmxvc3M6NCwKLQkJCQljY2lkM2hjcnhfc3RhdGU6OCwKLQkJCQljY2lkM2hjcnhfY2N2YWxfbGFzdF9jb3VudGVyOjQ7Ci0gIAl1MzIJCQljY2lkM2hjcnhfYnl0ZXNfcmVjdjsKLSAgCXN0cnVjdCB0aW1ldmFsCQljY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2s7Ci0gIAlzdHJ1Y3QgdGltZXZhbAkJY2NpZDNoY3J4X3RzdGFtcF9sYXN0X2FjazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWNjaWQzaGNyeF9oaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQJY2NpZDNoY3J4X2xpX2hpc3Q7Ci0gIAl1MTYJCQljY2lkM2hjcnhfczsKLSAgCXUzMgkJCWNjaWQzaGNyeF9waW52OwotICAJdTMyCQkJY2NpZDNoY3J4X2VsYXBzZWRfdGltZTsKKwlzdHJ1Y3QgdGZyY19yeF9pbmZvCQljY2lkM2hjcnhfdGZyYzsKKyNkZWZpbmUgY2NpZDNoY3J4X3hfcmVjdgkJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3hfcmVjdgorI2RlZmluZSBjY2lkM2hjcnhfcnR0CQkJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3J0dAorI2RlZmluZSBjY2lkM2hjcnhfcAkJCWNjaWQzaGNyeF90ZnJjLnRmcmNyeF9wCisgIAl1NjQJCQkJY2NpZDNoY3J4X3NlcW5vX25vbmxvc3M6NDgsCisJCQkJCWNjaWQzaGNyeF9jY3ZhbF9ub25sb3NzOjQsCisJCQkJCWNjaWQzaGNyeF9jY3ZhbF9sYXN0X2NvdW50ZXI6NDsKKwllbnVtIGNjaWQzX2hjX3J4X3N0YXRlcwkJY2NpZDNoY3J4X3N0YXRlOjg7CisgIAl1MzIJCQkJY2NpZDNoY3J4X2J5dGVzX3JlY3Y7CisgIAlzdHJ1Y3QgdGltZXZhbAkJCWNjaWQzaGNyeF90c3RhbXBfbGFzdF9mZWVkYmFjazsKKyAgCXN0cnVjdCB0aW1ldmFsCQkJY2NpZDNoY3J4X3RzdGFtcF9sYXN0X2FjazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljY2lkM2hjcnhfaGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQljY2lkM2hjcnhfbGlfaGlzdDsKKyAgCXUxNgkJCQljY2lkM2hjcnhfczsKKyAgCXUzMgkJCQljY2lkM2hjcnhfcGludjsKKyAgCXUzMgkJCQljY2lkM2hjcnhfZWxhcHNlZF90aW1lOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2NpZDNfaGNfdHhfc29jayAqY2NpZDNfaGNfdHhfc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYyBiL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmMKaW5kZXggOTA2YzgxYS4uNDhiOWI5MyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYworKysgYi9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5jCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgotCisjaW5jbHVkZSAiLi4vLi4vZGNjcC5oIgogI2luY2x1ZGUgImxvc3NfaW50ZXJ2YWwuaCIKIAogc3RydWN0IGRjY3BfbGlfaGlzdCAqZGNjcF9saV9oaXN0X25ldyhjb25zdCBjaGFyICpuYW1lKQpAQCAtMTA5LDcgKzEwOSw3IEBACiAJaV90b3QgPSBtYXgoaV90b3QwLCBpX3RvdDEpOwogCiAJaWYgKCF3X3RvdCkgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIiVzOiB3X3RvdCA9IDBcbiIsIF9fRlVOQ1RJT05fXyk7CisJCURDQ1BfV0FSTigid190b3QgPSAwXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJZW50cnkgPSBkY2NwX2xpX2hpc3RfZW50cnlfbmV3KGhpc3QsIFNMQUJfQVRPTUlDKTsKIAkJaWYgKGVudHJ5ID09IE5VTEwpIHsKIAkJCWRjY3BfbGlfaGlzdF9wdXJnZShoaXN0LCBsaXN0KTsKLQkJCWR1bXBfc3RhY2soKTsKKwkJCURDQ1BfQlVHKCJsb3NzIGludGVydmFsIGxpc3QgZW50cnkgaXMgTlVMTCIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJZW50cnktPmRjY3BsaWhfaW50ZXJ2YWwgPSB+MDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMgYi9uZXQvZGNjcC9jY2lkcy9saWIvdGZyY19lcXVhdGlvbi5jCmluZGV4IDQ0MDc2ZTAuLmRkYWMyYzUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3RmcmNfZXF1YXRpb24uYwpAQCAtMTMsMTYgKzEzLDg0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0KKyNpbmNsdWRlICIuLi8uLi9kY2NwLmgiCiAjaW5jbHVkZSAidGZyYy5oIgogCiAjZGVmaW5lIFRGUkNfQ0FMQ19YX0FSUlNJWkUgNTAwCisjZGVmaW5lIFRGUkNfQ0FMQ19YX1NQTElUICAgNTAwMDAJLyogMC4wNSAqIDEwMDAwMDAsIGRldGFpbHMgYmVsb3cgKi8KKyNkZWZpbmUgVEZSQ19TTUFMTEVTVF9QCSAgICAoVEZSQ19DQUxDX1hfU1BMSVQvVEZSQ19DQUxDX1hfQVJSU0laRSkKIAotI2RlZmluZSBURlJDX0NBTENfWF9TUExJVCA1MDAwMAotLyogZXF1aXZhbGVudCB0byAwLjA1ICovCisvKgorICBURlJDIFRDUCBSZW5vIFRocm91Z2hwdXQgRXF1YXRpb24gTG9va3VwIFRhYmxlIGZvciBmKHApCiAKKyAgVGhlIGZvbGxvd2luZyB0d28tY29sdW1uIGxvb2t1cCB0YWJsZSBpbXBsZW1lbnRzIGEgcGFydCBvZiB0aGUgVENQIHRocm91Z2hwdXQKKyAgZXF1YXRpb24gZnJvbSBbUkZDIDM0NDgsIHNlYy4gMy4xXToKKworCSAJCQkgICAgIHMKKyAgWF9jYWxjICA9ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgUiAqIHNxcnQoMipiKnAvMykgKyAoMyAqIHRfUlRPICogc3FydCgzKmIqcC84KSAqIChwICsgMzIqcF4zKSkKKworICBXaGVyZToKKwlYICAgICAgaXMgdGhlIHRyYW5zbWl0IHJhdGUgaW4gYnl0ZXMvc2Vjb25kCisJcyAgICAgIGlzIHRoZSBwYWNrZXQgc2l6ZSBpbiBieXRlcworCVIgICAgICBpcyB0aGUgcm91bmQgdHJpcCB0aW1lIGluIHNlY29uZHMKKwlwICAgICAgaXMgdGhlIGxvc3MgZXZlbnQgcmF0ZSwgYmV0d2VlbiAwIGFuZCAxLjAsIG9mIHRoZSBudW1iZXIgb2YgbG9zcworCSAgICAgICAgICAgICAgZXZlbnRzIGFzIGEgZnJhY3Rpb24gb2YgdGhlIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkCisJdF9SVE8gIGlzIHRoZSBUQ1AgcmV0cmFuc21pc3Npb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCisJYiAgICAgIGlzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBhY2tub3dsZWRnZWQgYnkgYSBzaW5nbGUgVENQIEFDSworCisgIFdlIGNhbiBhc3N1bWUgdGhhdCBiID0gMSBhbmQgdF9SVE8gaXMgNCAqIFIuIFRoZSBlcXVhdGlvbiBub3cgYmVjb21lczoKKworCQkJCSAgICAgcworICBYX2NhbGMgID0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgIFIgKiBzcXJ0KHAqMi8zKSArICgxMiAqIFIgKiBzcXJ0KHAqMy84KSAqIChwICsgMzIqcF4zKSkKKworICB3aGljaCB3ZSBjYW4gYnJlYWsgZG93biBpbnRvOgorCisgICAgICAgICAgICAgICAgICAgICAgcworCVhfY2FsYyAgPSAgLS0tLS0tLS0tCisJICAgICAgICAgICAgUiAqIGYocCkKKworICB3aGVyZSBmKHApIGlzIGdpdmVuIGZvciAwIDwgcCA8PSAxIGJ5OgorCisJZihwKSAgPSAgc3FydCgyKnAvMykgKyAxMiAqIHNxcnQoMypwLzgpICogIChwICsgMzIqcF4zKQorCisgIFNpbmNlIHRoaXMgaXMga2VybmVsIGNvZGUsIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaXMgYXZvaWRlZCBpbiBmYXZvdXIgb2YKKyAgaW50ZWdlciBhcml0aG1ldGljLiBUaGlzIG1lYW5zIHRoYXQgbmVhcmx5IGFsbCBmcmFjdGlvbmFsIHBhcmFtZXRlcnMgYXJlCisgIHNjYWxlZCBieSAxMDAwMDAwOgorICAgICogdGhlIHBhcmFtZXRlcnMgcCBhbmQgUgorICAgICogdGhlIHJldHVybiByZXN1bHQgZihwKQorICBUaGUgbG9va3VwIHRhYmxlIHRoZXJlZm9yZSBhY3R1YWxseSB0YWJ1bGF0ZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBnKHEpOgorCisgIAlnKHEpICA9ICAxMDAwMDAwICogZihxLzEwMDAwMDApCisKKyAgSGVuY2UsIHdoZW4gcCA8PSAxLCBxIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMDAwMDAuIFRvIGFjaGlldmUgZmluZXIKKyAgZ3JhbnVsYXJpdHkgZm9yIHRoZSBwcmFjdGljYWxseSBtb3JlIHJlbGV2YW50IGNhc2Ugb2Ygc21hbGwgdmFsdWVzIG9mIHAgKHVwIHRvCisgIDUlKSwgdGhlIHNlY29uZCBjb2x1bW4gaXMgdXNlZDsgdGhlIGZpcnN0IG9uZSByYW5nZXMgdXAgdG8gMTAwJS4gIFRoaXMgc3BsaXQKKyAgY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIG9mIHEgPSBURlJDX0NBTENfWF9TUExJVC4gQXQgdGhlIHNhbWUgdGltZSB0aGlzIGFsc28KKyAgZGV0ZXJtaW5lcyB0aGUgc21hbGxlc3QgcmVzb2x1dGlvbiBwb3NzaWJsZSB3aXRoIHRoaXMgbG9va3VwIHRhYmxlOgorCisgICAgVEZSQ19TTUFMTEVTVF9QICAgPSAgVEZSQ19DQUxDX1hfU1BMSVQgLyBURlJDX0NBTENfWF9BUlJTSVpFCisKKyAgVGhlIGVudGlyZSB0YWJsZSBpcyBnZW5lcmF0ZWQgYnk6CisgICAgZm9yKGk9MDsgaSA8IFRGUkNfQ0FMQ19YX0FSUlNJWkU7IGkrKykgeworCWxvb2t1cFtpXVswXSAgPSAgZygoaSsxKSAqIDEwMDAwMDAvVEZSQ19DQUxDX1hfQVJSU0laRSk7CisJbG9va3VwW2ldWzFdICA9ICBnKChpKzEpICogVEZSQ19DQUxDX1hfU1BMSVQvVEZSQ19DQUxDX1hfQVJSU0laRSk7CisgICAgfQorCisgIFdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24sIHdlIGhhdmUsIHdpdGggTSA9IFRGUkNfQ0FMQ19YX0FSUlNJWkUtMSwKKyAgICBsb29rdXBbMF1bMF0gID0gIGcoMTAwMDAwMC8oTSsxKSkgCQkgPSAgMTAwMDAwMCAqIGYoMC4yJSkKKyAgICBsb29rdXBbTV1bMF0gID0gIGcoMTAwMDAwMCkJCQkgPSAgMTAwMDAwMCAqIGYoMTAwJSkKKyAgICBsb29rdXBbMF1bMV0gID0gIGcoVEZSQ19TTUFMTEVTVF9QKQkJICA9IDEwMDAwMDAgKiBmKDAuMDElKQorICAgIGxvb2t1cFtNXVsxXSAgPSAgZyhURlJDX0NBTENfWF9TUExJVCkJID0gIDEwMDAwMDAgKiBmKDUlKQorCisgIEluIHN1bW1hcnksIHRoZSB0d28gY29sdW1ucyByZXByZXNlbnQgZihwKSBmb3IgdGhlIGZvbGxvd2luZyByYW5nZXM6CisgICAgKiBUaGUgZmlyc3QgY29sdW1uIGlzIGZvciAgIDAuMDAyICA8PSBwIDw9IDEuMAorICAgICogVGhlIHNlY29uZCBjb2x1bW4gaXMgZm9yICAwLjAwMDEgPD0gcCA8PSAwLjA1CisgIFdoZXJlIHRoZSBjb2x1bW5zIG92ZXJsYXAsIHRoZSBzZWNvbmQgKGZpbmVyLWdyYWluZWQpIGlzIGdpdmVuIHByZWZlcmVuY2UsCisgIGkuZS4gdGhlIGZpcnN0IGNvbHVtbiBpcyB1c2VkIG9ubHkgZm9yIHAgPj0gMC4wNS4KKyAqLwogc3RhdGljIGNvbnN0IHUzMiB0ZnJjX2NhbGNfeF9sb29rdXBbVEZSQ19DQUxDX1hfQVJSU0laRV1bMl0gPSB7CiAJeyAgICAgMzcxNzIsICAgODE3MiB9LAogCXsgICAgIDUzNDk5LCAgMTE1NjcgfSwKQEAgLTUyNiw4MyArNTk0LDY5IEBACiAJeyAyNDMzMTU5ODEsIDI3MTMwNSB9CiB9OwogCi0vKiBDYWxjdWxhdGUgdGhlIHNlbmQgcmF0ZSBhcyBwZXIgc2VjdGlvbiAzLjEgb2YgUkZDMzQ0OAotIAotUmV0dXJucyBzZW5kIHJhdGUgaW4gYnl0ZXMgcGVyIHNlY29uZAorLyogcmV0dXJuIGxhcmdlc3QgaW5kZXggaSBzdWNoIHRoYXQgZnZhbCA8PSBsb29rdXBbaV1bc21hbGxdICovCitzdGF0aWMgaW5saW5lIHUzMiB0ZnJjX2JpbnNlYXJjaCh1MzIgZnZhbCwgdTggc21hbGwpCit7CisJdTMyIHRyeSwgbG93ID0gMCwgaGlnaCA9IFRGUkNfQ0FMQ19YX0FSUlNJWkUgLSAxOwogCi1JbnRlZ2VyIG1hdGhzIGFuZCBsb29rdXBzIGFyZSB1c2VkIGFzIG5vdCBhbGxvd2VkIGZsb2F0aW5nIHBvaW50IGluIGtlcm5lbAorCXdoaWxlIChsb3cgPCBoaWdoKSB7CisJCXRyeSA9IChsb3cgKyBoaWdoKSAvIDI7CisJCWlmIChmdmFsIDw9IHRmcmNfY2FsY194X2xvb2t1cFt0cnldW3NtYWxsXSkKKwkJCWhpZ2ggPSB0cnk7CisJCWVsc2UKKwkJCWxvdyAgPSB0cnkgKyAxOworCX0KKwlyZXR1cm4gaGlnaDsKK30KIAotVGhlIGZ1bmN0aW9uIGZvciBYY2FsYyBhcyBwZXIgc2VjdGlvbiAzLjEgb2YgUkZDMzQ0OCBpczoKLQotWCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMKLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICBSKnNxcnQoMipiKnAvMykgKyAodF9SVE8gKiAoMypzcXJ0KDMqYipwLzgpICogcCAqICgxKzMyKnBeMikpKQotCi13aGVyZSAKLVggaXMgdGhlIHRyYXNtaXQgcmF0ZSBpbiBieXRlcy9zZWNvbmQKLXMgaXMgdGhlIHBhY2tldCBzaXplIGluIGJ5dGVzCi1SIGlzIHRoZSByb3VuZCB0cmlwIHRpbWUgaW4gc2Vjb25kcwotcCBpcyB0aGUgbG9zcyBldmVudCByYXRlLCBiZXR3ZWVuIDAgYW5kIDEuMCwgb2YgdGhlIG51bWJlciBvZiBsb3NzIGV2ZW50cyAKLSAgYXMgYSBmcmFjdGlvbiBvZiB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdHJhbnNtaXR0ZWQKLXRfUlRPIGlzIHRoZSBUQ1AgcmV0cmFuc21pc3Npb24gdGltZW91dCB2YWx1ZSBpbiBzZWNvbmRzCi1iIGlzIHRoZSBudW1iZXIgb2YgcGFja2V0cyBhY2tub3dsZWRnZWQgYnkgYSBzaW5nbGUgVENQIGFja25vd2xlZGdlbWVudAotCi13ZSBjYW4gYXNzdW1lIHRoYXQgYiA9IDEgYW5kIHRfUlRPIGlzIDQgKiBSLiBXaXRoIHRoaXMgdGhlIGVxdWF0aW9uIGJlY29tZXM6Ci0KLVggPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzCi0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIFIgKiBzcXJ0KDIgKiBwIC8gMykgKyAoMTIgKiBSICogKHNxcnQoMyAqIHAgLyA4KSAqIHAgKiAoMSArIDMyICogcF4yKSkpCi0KLQotd2hpY2ggd2UgY2FuIGJyZWFrIGRvd24gaW50bzoKLQotWCA9ICAgICBzCi0gICAgIC0tLS0tLS0tCi0gICAgIFIgKiBmKHApCi0KLXdoZXJlIGYocCkgPSBzcXJ0KDIgKiBwIC8gMykgKyAoMTIgKiBzcXJ0KDMgKiBwIC8gOCkgKiBwICogKDEgKyAzMiAqIHAgKiBwKSkKLQotRnVuY3Rpb24gcGFyYW1ldGVyczoKLXMgLSBieXRlcwotUiAtIFJUVCBpbiB1c2VjcwotcCAtIGxvc3MgcmF0ZSAoZGVjaW1hbCBmcmFjdGlvbiBtdWx0aXBsaWVkIGJ5IDEsMDAwLDAwMCkKLQotUmV0dXJucyBYY2FsYyBpbiBieXRlcyBwZXIgc2Vjb25kCi0KLURPTidUIGFsdGVyIHRoaXMgY29kZSB1bmxlc3MgeW91IHJ1biB0ZXN0IGNhc2VzIGFnYWluc3QgaXQgYXMgdGhlIGNvZGUKLWhhcyBiZWVuIG1hbmlwdWxhdGVkIHRvIHN0b3AgdW5kZXJmbG93L292ZXJsb3cuCi0KLSovCisvKioKKyAqIHRmcmNfY2FsY194IC0gQ2FsY3VsYXRlIHRoZSBzZW5kIHJhdGUgYXMgcGVyIHNlY3Rpb24gMy4xIG9mIFJGQzM0NDgKKyAqCisgKiAgQHM6IHBhY2tldCBzaXplICAgICAgICAgIGluIGJ5dGVzCisgKiAgQFI6IFJUVCAgICAgICAgICAgICAgICAgIHNjYWxlZCBieSAxMDAwMDAwICAgKGkuZS4sIG1pY3Jvc2Vjb25kcykKKyAqICBAcDogbG9zcyByYXRpbyBlc3RpbWF0ZSAgc2NhbGVkIGJ5IDEwMDAwMDAKKyAqICBSZXR1cm5zIFhfY2FsYyAgICAgICAgICAgaW4gYnl0ZXMgcGVyIHNlY29uZCAobm90IHNjYWxlZCkuCisgKgorICogTm90ZTogRE8gTk9UIGFsdGVyIHRoaXMgY29kZSB1bmxlc3MgeW91IHJ1biB0ZXN0IGNhc2VzIGFnYWluc3QgaXQsCisgKiAgICAgICBhcyB0aGUgY29kZSBoYXMgYmVlbiBvcHRpbWl6ZWQgdG8gc3RvcCB1bmRlcmZsb3cvb3ZlcmZsb3cuCisgKi8KIHUzMiB0ZnJjX2NhbGNfeCh1MTYgcywgdTMyIFIsIHUzMiBwKQogewogCWludCBpbmRleDsKIAl1MzIgZjsKIAl1NjQgdG1wMSwgdG1wMjsKIAotCWlmIChwIDwgVEZSQ19DQUxDX1hfU1BMSVQpCi0JCWluZGV4ID0gKHAgLyAoVEZSQ19DQUxDX1hfU1BMSVQgLyBURlJDX0NBTENfWF9BUlJTSVpFKSkgLSAxOwotCWVsc2UKLQkJaW5kZXggPSAocCAvICgxMDAwMDAwIC8gVEZSQ19DQUxDX1hfQVJSU0laRSkpIC0gMTsKKwkvKiBjaGVjayBhZ2FpbnN0IGludmFsaWQgcGFyYW1ldGVycyBhbmQgZGl2aWRlLWJ5LXplcm8gICAqLworCUJVR19PTihwID4gIDEwMDAwMDApOwkJLyogcCBtdXN0IG5vdCBleGNlZWQgMTAwJSAgICovCisJQlVHX09OKHAgPT0gMCk7CQkJLyogZigwKSA9IDAsIGRpdmlkZSBieSB6ZXJvICovCisJaWYgKFIgPT0gMCkgewkJCS8qIHBvc3NpYmxlICBkaXZpZGUgYnkgemVybyAqLworCQlEQ0NQX0NSSVQoIldBUk5JTkc6IFJUVCBpcyAwLCByZXR1cm5pbmcgbWF4aW11bSBYX2NhbGMuIik7CisJCXJldHVybiB+MFU7CisgCX0KIAotCWlmIChpbmRleCA8IDApCi0JCS8qIHAgc2hvdWxkIGJlIDAgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIG15IGNvZGUgKi8KLQkJaW5kZXggPSAwOworCWlmIChwIDw9IFRGUkNfQ0FMQ19YX1NQTElUKSAJCXsgICAgIC8qIDAuMDAwMCA8IHAgPD0gMC4wNSAgICovCisJCWlmIChwIDwgVEZSQ19TTUFMTEVTVF9QKSB7CSAgICAgIC8qIDAuMDAwMCA8IHAgPCAgMC4wMDAxICovCisJCQlEQ0NQX1dBUk4oIlZhbHVlIG9mIHAgKCVkKSBiZWxvdyByZXNvbHV0aW9uLiAiCisJCQkJICAiU3Vic3RpdHV0aW5nICVkXG4iLCBwLCBURlJDX1NNQUxMRVNUX1ApOworCQkJaW5kZXggPSAwOworCQl9IGVsc2UgCQkJCSAgICAgIC8qIDAuMDAwMSA8PSBwIDw9IDAuMDUgICovCisJCQlpbmRleCA9ICBwL1RGUkNfU01BTExFU1RfUCAtIDE7CiAKLQlpZiAoUiA9PSAwKQotCQlSID0gMTsgLyogUlRUIGNhbid0IGJlIHplcm8gb3IgZWxzZSBkaXZpZGUgYnkgemVybyAqLworIAkJZiA9IHRmcmNfY2FsY194X2xvb2t1cFtpbmRleF1bMV07CiAKLQlCVUdfT04oaW5kZXggPj0gVEZSQ19DQUxDX1hfQVJSU0laRSk7CisJfSBlbHNlIHsJIAkJCSAgICAgIC8qIDAuMDUgICA8ICBwIDw9IDEuMDAgICovCisJCWluZGV4ID0gcC8oMTAwMDAwMC9URlJDX0NBTENfWF9BUlJTSVpFKSAtIDE7CiAKLQlpZiAocCA+PSBURlJDX0NBTENfWF9TUExJVCkKIAkJZiA9IHRmcmNfY2FsY194X2xvb2t1cFtpbmRleF1bMF07Ci0JZWxzZQotCQlmID0gdGZyY19jYWxjX3hfbG9va3VwW2luZGV4XVsxXTsKKwl9CiAKKwkvKiBUaGUgZm9sbG93aW5nIGNvbXB1dGVzIFggPSBzLyhSKmYocCkpIGluIGJ5dGVzIHBlciBzZWNvbmQuIFNpbmNlIGYocCkKKwkgKiBhbmQgUiBhcmUgYm90aCBzY2FsZWQgYnkgMTAwMDAwMCwgd2UgbmVlZCB0byBtdWx0aXBseSBieSAxMDAwMDAwXjIuCisJICogPT0+IERPIE5PVCBhbHRlciB0aGlzIHVubGVzcyB5b3UgdGVzdCBhZ2FpbnN0IG92ZXJmbG93IG9uIDMyIGJpdCAgICovCiAJdG1wMSA9ICgodTY0KXMgKiAxMDAwMDAwMDApOwogCXRtcDIgPSAoKHU2NClSICogKHU2NClmKTsKIAlkb19kaXYodG1wMiwgMTAwMDApOwogCWRvX2Rpdih0bXAxLCB0bXAyKTsgCi0JLyogRG9uJ3QgYWx0ZXIgYWJvdmUgbWF0aCB1bmxlc3MgeW91IHRlc3QgZHVlIHRvIG92ZXJmbG93IG9uIDMyIGJpdCAqLwogCiAJcmV0dXJuICh1MzIpdG1wMTsgCiB9CkBAIC02MTAsMzMgKzY2NCwzNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwodGZyY19jYWxjX3gpOwogCiAvKgotICogYXJnczogZnZhbHVlIC0gZnVuY3Rpb24gdmFsdWUgdG8gbWF0Y2gKLSAqIHJldHVybnM6IHAgY2xvc2VzdCB0byB0aGF0IHZhbHVlCisgKiAgdGZyY19jYWxjX3hfcmV2ZXJzZV9sb29rdXAgIC0gIHRyeSB0byBmaW5kIHAgZ2l2ZW4gZihwKQogICoKLSAqIGJvdGggZnZhbHVlIGFuZCBwIGFyZSBtdWx0aXBsaWVkIGJ5IDEsMDAwLDAwMCB0byB1c2UgaW50cworICogIEBmdmFsdWU6IGZ1bmN0aW9uIHZhbHVlIHRvIG1hdGNoLCBzY2FsZWQgYnkgMTAwMDAwMAorICogIFJldHVybnMgY2xvc2VzdCBtYXRjaCBmb3IgcCwgYWxzbyBzY2FsZWQgYnkgMTAwMDAwMAogICovCiB1MzIgdGZyY19jYWxjX3hfcmV2ZXJzZV9sb29rdXAodTMyIGZ2YWx1ZSkKIHsKLQlpbnQgY3RyID0gMDsKLQlpbnQgc21hbGw7CisJaW50IGluZGV4OwogCi0JaWYgKGZ2YWx1ZSA8IHRmcmNfY2FsY194X2xvb2t1cFswXVsxXSkKKwlpZiAoZnZhbHVlID09IDApCS8qIGYocCkgPSAwICB3aGVuZXZlciAgcCA9IDAgKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAoZnZhbHVlIDw9IHRmcmNfY2FsY194X2xvb2t1cFtURlJDX0NBTENfWF9BUlJTSVpFIC0gMV1bMV0pCi0JCXNtYWxsID0gMTsKLQllbHNlIGlmIChmdmFsdWUgPiB0ZnJjX2NhbGNfeF9sb29rdXBbVEZSQ19DQUxDX1hfQVJSU0laRSAtIDFdWzBdKQorCS8qIEVycm9yIGNhc2VzLiAqLworCWlmIChmdmFsdWUgPCB0ZnJjX2NhbGNfeF9sb29rdXBbMF1bMV0pIHsKKwkJRENDUF9XQVJOKCJmdmFsdWUgJWQgc21hbGxlciB0aGFuIHJlc29sdXRpb25cbiIsIGZ2YWx1ZSk7CisJCXJldHVybiB0ZnJjX2NhbGNfeF9sb29rdXBbMF1bMV07CisJfQorCWlmIChmdmFsdWUgPiB0ZnJjX2NhbGNfeF9sb29rdXBbVEZSQ19DQUxDX1hfQVJSU0laRSAtIDFdWzBdKSB7CisJCURDQ1BfV0FSTigiZnZhbHVlICVkIGV4Y2VlZHMgYm91bmRzIVxuIiwgZnZhbHVlKTsKIAkJcmV0dXJuIDEwMDAwMDA7Ci0JZWxzZQotCQlzbWFsbCA9IDA7CisJfQogCi0Jd2hpbGUgKGZ2YWx1ZSA+IHRmcmNfY2FsY194X2xvb2t1cFtjdHJdW3NtYWxsXSkKLQkJY3RyKys7Ci0KLQlpZiAoc21hbGwpCi0JCXJldHVybiBURlJDX0NBTENfWF9TUExJVCAqIGN0ciAvIFRGUkNfQ0FMQ19YX0FSUlNJWkU7Ci0JZWxzZQotCQlyZXR1cm4gMTAwMDAwMCAqIGN0ciAvIFRGUkNfQ0FMQ19YX0FSUlNJWkU7CisJaWYgKGZ2YWx1ZSA8PSB0ZnJjX2NhbGNfeF9sb29rdXBbVEZSQ19DQUxDX1hfQVJSU0laRSAtIDFdWzFdKSB7CisJCWluZGV4ID0gdGZyY19iaW5zZWFyY2goZnZhbHVlLCAxKTsKKwkJcmV0dXJuIChpbmRleCArIDEpICogVEZSQ19DQUxDX1hfU1BMSVQgLyBURlJDX0NBTENfWF9BUlJTSVpFOworIAl9CisgCisJLyogZWxzZSAuLi4gaXQgbXVzdCBiZSBpbiB0aGUgY29hcnNlLWdyYWluZWQgY29sdW1uICovCisJaW5kZXggPSB0ZnJjX2JpbnNlYXJjaChmdmFsdWUsIDApOworCXJldHVybiAoaW5kZXggKyAxKSAqIDEwMDAwMDAgLyBURlJDX0NBTENfWF9BUlJTSVpFOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTCh0ZnJjX2NhbGNfeF9yZXZlcnNlX2xvb2t1cCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggMjcyZTg1OC4uNjg4ODY5OCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtMTgsMTUgKzE4LDMzIEBACiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgImFja3ZlYy5oIgogCisvKgorICogCURDQ1AgLSBzcGVjaWZpYyB3YXJuaW5nIGFuZCBkZWJ1Z2dpbmcgbWFjcm9zLgorICovCisjZGVmaW5lIERDQ1BfV0FSTihmbXQsIGEuLi4pIExJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6ICIgZm10LCAgICAgICBcCisJCQkJCQkgICAgICAgIF9fRlVOQ1RJT05fXywgIyNhKQorI2RlZmluZSBEQ0NQX0NSSVQoZm10LCBhLi4uKSBwcmludGsoS0VSTl9DUklUIGZtdCAiIGF0ICVzOiVkLyVzKClcbiIsICMjYSwgXAorCQkJCQkgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pCisjZGVmaW5lIERDQ1BfQlVHKGEuLi4pICAgICAgIGRvIHsgRENDUF9DUklUKCJCVUc6ICIgYSk7IGR1bXBfc3RhY2soKTsgfSB3aGlsZSgwKQorI2RlZmluZSBEQ0NQX0JVR19PTihjb25kKSAgICBkbyB7IGlmICh1bmxpa2VseSgoY29uZCkgIT0gMCkpCQkgICBcCisJCQkJICAgICBEQ0NQX0JVRygiXCIlc1wiIGhvbGRzIChleGNlcHRpb24hKSIsIFwKKwkJCQkJICAgICAgX19zdHJpbmdpZnkoY29uZCkpOyAgICAgICAgICBcCisJCQkgICAgIH0gd2hpbGUgKDApCisKKyNpZmRlZiBNT0RVTEUKKyNkZWZpbmUgRENDUF9QUklOVEsoZW5hYmxlLCBmbXQsIGFyZ3MuLi4pCWRvIHsgaWYgKGVuYWJsZSkJICAgICBcCisJCQkJCQkJcHJpbnRrKGZtdCwgIyNhcmdzKTsgXAorCQkJCQkgCX0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIERDQ1BfUFJJTlRLKGVuYWJsZSwgZm10LCBhcmdzLi4uKQlwcmludGsoZm10LCAjI2FyZ3MpCisjZW5kaWYKKyNkZWZpbmUgRENDUF9QUl9ERUJVRyhlbmFibGUsIGZtdCwgYS4uLikJRENDUF9QUklOVEsoZW5hYmxlLCBLRVJOX0RFQlVHIFwKKwkJCQkJCSAgIiVzOiAiIGZtdCwgX19GVU5DVElPTl9fLCAjI2EpCisKICNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRwogZXh0ZXJuIGludCBkY2NwX2RlYnVnOwotCi0jZGVmaW5lIGRjY3BfcHJfZGVidWcoZm9ybWF0LCBhLi4uKSBcCi0JZG8geyBpZiAoZGNjcF9kZWJ1ZykgXAotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBfX0ZVTkNUSU9OX18gLCAjI2EpOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgZGNjcF9wcl9kZWJ1Z19jYXQoZm9ybWF0LCBhLi4uKSBkbyB7IGlmIChkY2NwX2RlYnVnKSBcCi0JCQkJCSAgICAgcHJpbnRrKGZvcm1hdCwgIyNhKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCSAgRENDUF9QUl9ERUJVRyhkY2NwX2RlYnVnLCBmb3JtYXQsICMjYSkKKyNkZWZpbmUgZGNjcF9wcl9kZWJ1Z19jYXQoZm9ybWF0LCBhLi4uKSAgIERDQ1BfUFJJTlRLKGRjY3BfZGVidWcsIGZvcm1hdCwgIyNhKQogI2Vsc2UKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCiAjZGVmaW5lIGRjY3BfcHJfZGVidWdfY2F0KGZvcm1hdCwgYS4uLikKQEAgLTM1LDE3ICs1MywyMSBAQAogZXh0ZXJuIHN0cnVjdCBpbmV0X2hhc2hpbmZvIGRjY3BfaGFzaGluZm87CiAKIGV4dGVybiBhdG9taWNfdCBkY2NwX29ycGhhbl9jb3VudDsKLWV4dGVybiBpbnQgZGNjcF90d19jb3VudDsKLWV4dGVybiB2b2lkIGRjY3BfdHdfZGVzY2hlZHVsZShzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyk7CiAKIGV4dGVybiB2b2lkIGRjY3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pOwogCi0vKiBGSVhNRTogUmlnaHQgc2l6ZSB0aGlzICovCi0jZGVmaW5lIERDQ1BfTUFYX09QVF9MRU4gMTI4Ci0KLSNkZWZpbmUgRENDUF9NQVhfUEFDS0VUX0hEUiAzMgotCi0jZGVmaW5lIE1BWF9EQ0NQX0hFQURFUiAgKERDQ1BfTUFYX1BBQ0tFVF9IRFIgKyBEQ0NQX01BWF9PUFRfTEVOICsgTUFYX0hFQURFUikKKy8qCisgKiAgU2V0IHNhZmUgdXBwZXIgYm91bmRzIGZvciBoZWFkZXIgYW5kIG9wdGlvbiBsZW5ndGguIFNpbmNlIERhdGEgT2Zmc2V0IGlzIDgKKyAqICBiaXRzIChSRkMgNDM0MCwgc2VjLiA1LjEpLCB0aGUgdG90YWwgaGVhZGVyIGxlbmd0aCBjYW4gbmV2ZXIgYmUgbW9yZSB0aGFuCisgKiAgNCAqIDI1NSA9IDEwMjAgYnl0ZXMuIFRoZSBsYXJnZXN0IHBvc3NpYmxlIGhlYWRlciBsZW5ndGggaXMgMjggYnl0ZXMgKFg9MSk6CisgKiAgICAtIERDQ1AtUmVzcG9uc2Ugd2l0aCBBQ0sgU3ViaGVhZGVyIGFuZCA0IGJ5dGVzIG9mIFNlcnZpY2UgY29kZSAgICAgIE9SCisgKiAgICAtIERDQ1AtUmVzZXQgICAgd2l0aCBBQ0sgU3ViaGVhZGVyIGFuZCA0IGJ5dGVzIG9mIFJlc2V0IENvZGUgZmllbGRzCisgKiAgSGVuY2UgYSBzYWZlIHVwcGVyIGJvdW5kIGZvciB0aGUgbWF4aW11bSBvcHRpb24gbGVuZ3RoIGlzIDEwMjAtMjggPSA5OTIKKyAqLworI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZihpbnQpKQorI2RlZmluZSBEQ0NQX01BWF9QQUNLRVRfSERSIDI4CisjZGVmaW5lIERDQ1BfTUFYX09QVF9MRU4gKE1BWF9EQ0NQX1NQRUNJRklDX0hFQURFUiAtIERDQ1BfTUFYX1BBQ0tFVF9IRFIpCisjZGVmaW5lIE1BWF9EQ0NQX0hFQURFUiAoTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSICsgTUFYX0hFQURFUikKIAogI2RlZmluZSBEQ0NQX1RJTUVXQUlUX0xFTiAoNjAgKiBIWikgLyogaG93IGxvbmcgdG8gd2FpdCB0byBkZXN0cm95IFRJTUUtV0FJVAogCQkJCSAgICAgKiBzdGF0ZSwgYWJvdXQgNjAgc2Vjb25kcyAqLwpAQCAtNTgsNiArODAsMjAgQEAKIAogI2RlZmluZSBEQ0NQX1JUT19NQVggKCh1bnNpZ25lZCkoMTIwICogSFopKSAvKiBGSVhNRTogdXNpbmcgVENQIHZhbHVlICovCiAKKyNkZWZpbmUgRENDUF9YTUlUX1RJTUVPIDMwMDAwIC8qIFRpbWUvbXNlY3MgZm9yIGJsb2NraW5nIHRyYW5zbWl0IHBlciBwYWNrZXQgKi8KKworLyogc3lzY3RsIHZhcmlhYmxlcyBmb3IgRENDUCAqLworZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOworZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfcmV0cmllczE7CitleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMjsKK2V4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OworZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkOworZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkOworZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF9hY2tfcmF0aW87CitleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3NlbmRfYWNrX3ZlY3RvcjsKK2V4dGVybiBpbnQgIHN5c2N0bF9kY2NwX2ZlYXRfc2VuZF9uZHBfY291bnQ7CitleHRlcm4gaW50ICBzeXNjdGxfZGNjcF90eF9xbGVuOworCiAvKiBpcyBzZXExIDwgc2VxMiA/ICovCiBzdGF0aWMgaW5saW5lIGludCBiZWZvcmU0OChjb25zdCB1NjQgc2VxMSwgY29uc3QgdTY0IHNlcTIpCiB7CkBAIC0xMjMsMTAgKzE1OSwzNiBAQAogI2RlZmluZSBEQ0NQX0FERF9TVEFUU19VU0VSKGZpZWxkLCB2YWwpCVwKIAkJCVNOTVBfQUREX1NUQVRTX1VTRVIoZGNjcF9zdGF0aXN0aWNzLCBmaWVsZCwgdmFsKQogCisvKgorICogCUNoZWNrc3VtbWluZyByb3V0aW5lcworICovCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2NzdW1fY292ZXJhZ2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCBzdHJ1Y3QgZGNjcF9oZHIqIGRoID0gZGNjcF9oZHIoc2tiKTsKKworCWlmIChkaC0+ZGNjcGhfY3Njb3YgPT0gMCkKKwkJcmV0dXJuIHNrYi0+bGVuOworCXJldHVybiAoZGgtPmRjY3BoX2RvZmYgKyBkaC0+ZGNjcGhfY3Njb3YgLSAxKSAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF9jc3VtX291dGdvaW5nKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IGNvdiA9IGRjY3BfY3N1bV9jb3ZlcmFnZShza2IpOworCisJaWYgKGNvdiA+PSBza2ItPmxlbikKKwkJZGNjcF9oZHIoc2tiKS0+ZGNjcGhfY3Njb3YgPSAwOworCisJc2tiLT5jc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgMCwgKGNvdiA+IHNrYi0+bGVuKT8gc2tiLT5sZW4gOiBjb3YsIDApOworfQorCitleHRlcm4gdm9pZCBkY2NwX3Y0X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwogZXh0ZXJuIGludCAgZGNjcF9yZXRyYW5zbWl0X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiBleHRlcm4gdm9pZCBkY2NwX3NlbmRfYWNrKHN0cnVjdCBzb2NrICpzayk7CiBleHRlcm4gdm9pZCBkY2NwX3NlbmRfZGVsYXllZF9hY2soc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRjY3BfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyc2spOworCiBleHRlcm4gdm9pZCBkY2NwX3NlbmRfc3luYyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHU2NCBzZXEsCiAJCQkgICBjb25zdCBlbnVtIGRjY3BfcGt0X3R5cGUgcGt0X3R5cGUpOwogCkBAIC0xNDcsMTggKzIwOSw3IEBACiBleHRlcm4gdm9pZCBkY2NwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBkY2NwX2RvbmUoc3RydWN0IHNvY2sgKnNrKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRjY3Bfb3BlbnJlcV9pbml0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkgICAgIHN0cnVjdCBkY2NwX3NvY2sgKmRwLAotCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQkvKgotCSAqIEZJWE1FOiBmaWxsIGluIHRoZSBvdGhlciByZXEgZmllbGRzIGZyb20gdGhlIERDQ1Agb3B0aW9ucwotCSAqIHJlY2VpdmVkCi0JICovCi0JaW5ldF9yc2socmVxKS0+cm10X3BvcnQgPSBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydDsKLQlpbmV0X3JzayhyZXEpLT5hY2tlZAk9IDA7Ci0JcmVxLT5yY3Zfd25kID0gMDsKLX0KK2V4dGVybiB2b2lkIGRjY3BfcmVxc2tfaW5pdChzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsIHN0cnVjdCBza19idWZmICpza2IpOwogCiBleHRlcm4gaW50IGRjY3BfdjRfY29ubl9yZXF1ZXN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKQEAgLTIxNywxNCArMjY4LDkgQEAKIGV4dGVybiBpbnQJICAgaW5ldF9kY2NwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgYmFja2xvZyk7CiBleHRlcm4gdW5zaWduZWQgaW50IGRjY3BfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgcG9sbF90YWJsZSAqd2FpdCk7Ci1leHRlcm4gdm9pZAkgICBkY2NwX3Y0X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLAotCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkgICBkY2NwX3Y0X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAogCQkJCSAgIGludCBhZGRyX2xlbik7CiAKLWV4dGVybiBpbnQJICAgZGNjcF92NF9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgICBjb25zdCBfX2JlMzIgc2FkZHIsIGNvbnN0IF9fYmUzMiBkYWRkcik7Ci0KIGV4dGVybiBpbnQJICAgZGNjcF9zZW5kX3Jlc2V0KHN0cnVjdCBzb2NrICpzaywgZW51bSBkY2NwX3Jlc2V0X2NvZGVzIGNvZGUpOwogZXh0ZXJuIHZvaWQJICAgZGNjcF9zZW5kX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IGFjdGl2ZSk7CiBleHRlcm4gaW50CSAgIGRjY3BfaW52YWxpZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmMgYi9uZXQvZGNjcC9mZWF0LmMKaW5kZXggYTFiMDY4Mi4uNGRjNDg3ZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5jCisrKyBiL25ldC9kY2NwL2ZlYXQuYwpAQCAtMTIsNyArMTIsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLSNpbmNsdWRlICJkY2NwLmgiCiAjaW5jbHVkZSAiY2NpZC5oIgogI2luY2x1ZGUgImZlYXQuaCIKIApAQCAtMjMsOSArMjIsMTcgQEAKIHsKIAlzdHJ1Y3QgZGNjcF9vcHRfcGVuZCAqb3B0OwogCi0JZGNjcF9wcl9kZWJ1ZygiZmVhdCBjaGFuZ2UgdHlwZT0lZCBmZWF0PSVkXG4iLCB0eXBlLCBmZWF0dXJlKTsKKwlkY2NwX2ZlYXRfZGVidWcodHlwZSwgZmVhdHVyZSwgKnZhbCk7CiAKLQkvKiBYWFggc2FuaXR5IGNoZWNrIGZlYXQgY2hhbmdlIHJlcXVlc3QgKi8KKwlpZiAoIWRjY3BfZmVhdF9pc192YWxpZF90eXBlKHR5cGUpKSB7CisJCURDQ1BfV0FSTigib3B0aW9uIHR5cGUgJWQgaW52YWxpZCBpbiBuZWdvdGlhdGlvblxuIiwgdHlwZSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWRjY3BfZmVhdF9pc192YWxpZF9sZW5ndGgodHlwZSwgZmVhdHVyZSwgbGVuKSkgeworCQlEQ0NQX1dBUk4oImludmFsaWQgbGVuZ3RoICVkXG4iLCBsZW4pOworCQlyZXR1cm4gMTsKKwl9CisJLyogWFhYIGFkZCBmdXJ0aGVyIHNhbml0eSBjaGVja3MgKi8KIAogCS8qIGNoZWNrIGlmIHRoYXQgZmVhdHVyZSBpcyBhbHJlYWR5IGJlaW5nIG5lZ290aWF0ZWQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdCwgJmRtc2stPmRjY3Btc19wZW5kaW5nLCBkY2Nwb3Bfbm9kZSkgewpAQCAtOTUsMTQgKzEwMiwxNCBAQAogLyogWFhYIHRha2luZyBvbmx5IHU4IHZhbHMgKi8KIHN0YXRpYyBpbnQgZGNjcF9mZWF0X3VwZGF0ZShzdHJ1Y3Qgc29jayAqc2ssIHU4IHR5cGUsIHU4IGZlYXQsIHU4IHZhbCkKIHsKLQlkY2NwX3ByX2RlYnVnKCJjaGFuZ2luZyBbJWRdIGZlYXQgJWQgdG8gJWRcbiIsIHR5cGUsIGZlYXQsIHZhbCk7CisJZGNjcF9mZWF0X2RlYnVnKHR5cGUsIGZlYXQsIHZhbCk7CiAKIAlzd2l0Y2ggKGZlYXQpIHsKIAljYXNlIERDQ1BGX0NDSUQ6CiAJCXJldHVybiBkY2NwX2ZlYXRfdXBkYXRlX2NjaWQoc2ssIHR5cGUsIHZhbCk7CiAJZGVmYXVsdDoKLQkJZGNjcF9wcl9kZWJ1ZygiSU1QTEVNRU5UIGNoYW5naW5nIFslZF0gZmVhdCAlZCB0byAlZFxuIiwKLQkJCSAgICAgIHR5cGUsIGZlYXQsIHZhbCk7CisJCWRjY3BfcHJfZGVidWcoIlVOSU1QTEVNRU5URUQ6ICVzKCVkLCAuLi4pXG4iLAorCQkJICAgICAgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLCBmZWF0KTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpAQCAtMTYyLDcgKzE2OSw4IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJV0FSTl9PTigxKTsgLyogWFhYIGltcGxlbWVudCByZXMgKi8KKwkJCURDQ1BfQlVHKCJGZWxsIHRocm91Z2gsIGZlYXQ9JWQiLCBvcHQtPmRjY3BvcF9mZWF0KTsKKwkJCS8qIFhYWCBpbXBsZW1lbnQgcmVzICovCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCkBAIC0yNjUsMTAgKzI3MywxMCBAQAogCXU4ICpjb3B5OwogCWludCByYzsKIAotCS8qIE5OIGZlYXR1cmVzIG11c3QgYmUgY2hhbmdlIEwgKi8KLQlpZiAodHlwZSA9PSBEQ0NQT19DSEFOR0VfUikgewotCQlkY2NwX3ByX2RlYnVnKCJyZWNlaXZlZCBDSEFOR0VfUiAlZCBmb3IgTk4gZmVhdCAlZFxuIiwKLQkJCSAgICAgIHR5cGUsIGZlYXR1cmUpOworCS8qIE5OIGZlYXR1cmVzIG11c3QgYmUgQ2hhbmdlIEwgKHNlYy4gNi4zLjIpICovCisJaWYgKHR5cGUgIT0gRENDUE9fQ0hBTkdFX0wpIHsKKwkJZGNjcF9wcl9kZWJ1ZygicmVjZWl2ZWQgJXMgZm9yIE5OIGZlYXR1cmUgJWRcbiIsCisJCQkJZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLCBmZWF0dXJlKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC0yNzksMTIgKzI4NywxMSBAQAogCWlmIChvcHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljb3B5ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOworCWNvcHkgPSBrbWVtZHVwKHZhbCwgbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoY29weSA9PSBOVUxMKSB7CiAJCWtmcmVlKG9wdCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1jcHkoY29weSwgdmFsLCBsZW4pOwogCiAJb3B0LT5kY2Nwb3BfdHlwZSA9IERDQ1BPX0NPTkZJUk1fUjsgLyogTk4gY2FuIG9ubHkgY29uZmlybSBSICovCiAJb3B0LT5kY2Nwb3BfZmVhdCA9IGZlYXR1cmU7CkBAIC0yOTksNyArMzA2LDggQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCWRjY3BfcHJfZGVidWcoIkNvbmZpcm1pbmcgTk4gZmVhdHVyZSAlZCAodmFsPSVkKVxuIiwgZmVhdHVyZSwgKmNvcHkpOworCWRjY3BfZmVhdF9kZWJ1Zyh0eXBlLCBmZWF0dXJlLCAqY29weSk7CisKIAlsaXN0X2FkZF90YWlsKCZvcHQtPmRjY3BvcF9ub2RlLCAmZG1zay0+ZGNjcG1zX2NvbmYpOwogCiAJcmV0dXJuIDA7CkBAIC0zMTgsMTQgKzMyNiwxOSBAQAogCQlyZXR1cm47CiAJfQogCi0Jb3B0LT5kY2Nwb3BfdHlwZSA9IHR5cGUgPT0gRENDUE9fQ0hBTkdFX0wgPyBEQ0NQT19DT05GSVJNX1IgOgotCQkJCQkJICAgIERDQ1BPX0NPTkZJUk1fTDsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIERDQ1BPX0NIQU5HRV9MOiBvcHQtPmRjY3BvcF90eXBlID0gRENDUE9fQ09ORklSTV9SOyBicmVhazsKKwljYXNlIERDQ1BPX0NIQU5HRV9SOiBvcHQtPmRjY3BvcF90eXBlID0gRENDUE9fQ09ORklSTV9MOyBicmVhazsKKwlkZWZhdWx0OiAJICAgICBEQ0NQX1dBUk4oImludmFsaWQgdHlwZSAlZFxuIiwgdHlwZSk7IHJldHVybjsKKworCX0KIAlvcHQtPmRjY3BvcF9mZWF0ID0gZmVhdHVyZTsKIAlvcHQtPmRjY3BvcF92YWwJID0gTlVMTDsKIAlvcHQtPmRjY3BvcF9sZW4JID0gMDsKIAogCS8qIGNoYW5nZSBmZWF0dXJlICovCi0JZGNjcF9wcl9kZWJ1ZygiRW1wdHkgY29uZmlybSBmZWF0dXJlICVkIHR5cGUgJWRcbiIsIGZlYXR1cmUsIHR5cGUpOworCWRjY3BfcHJfZGVidWcoIkVtcHR5ICVzKCVkKVxuIiwgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLCBmZWF0dXJlKTsKKwogCWxpc3RfYWRkX3RhaWwoJm9wdC0+ZGNjcG9wX25vZGUsICZkbXNrLT5kY2NwbXNfY29uZik7CiB9CiAKQEAgLTM1OSw3ICszNzIsNyBAQAogewogCWludCByYzsKIAotCWRjY3BfcHJfZGVidWcoImdvdCBmZWF0IGNoYW5nZSB0eXBlPSVkIGZlYXQ9JWRcbiIsIHR5cGUsIGZlYXR1cmUpOworCWRjY3BfZmVhdF9kZWJ1Zyh0eXBlLCBmZWF0dXJlLCAqdmFsKTsKIAogCS8qIGZpZ3VyZSBvdXQgaWYgaXQncyBTUCBvciBOTiBmZWF0dXJlICovCiAJc3dpdGNoIChmZWF0dXJlKSB7CkBAIC0zNzUsNiArMzg4LDggQEAKIAogCS8qIFhYWCBpbXBsZW1lbnQgb3RoZXIgZmVhdHVyZXMgKi8KIAlkZWZhdWx0OgorCQlkY2NwX3ByX2RlYnVnKCJVTklNUExFTUVOVEVEOiBub3QgaGFuZGxpbmcgJXMoJWQsIC4uLilcbiIsCisJCQkgICAgICBkY2NwX2ZlYXRfdHlwZW5hbWUodHlwZSksIGZlYXR1cmUpOwogCQlyYyA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCX0KQEAgLTQwMywyMCArNDE4LDI3IEBACiAJdTggdDsKIAlzdHJ1Y3QgZGNjcF9vcHRfcGVuZCAqb3B0OwogCXN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOwotCWludCByYyA9IDE7CisJaW50IGZvdW5kID0gMDsKIAlpbnQgYWxsX2NvbmZpcm1lZCA9IDE7CiAKLQlkY2NwX3ByX2RlYnVnKCJnb3QgZmVhdCBjb25maXJtIHR5cGU9JWQgZmVhdD0lZFxuIiwgdHlwZSwgZmVhdHVyZSk7Ci0KLQkvKiBYWFggc2FuaXR5IGNoZWNrIHR5cGUgJiBmZWF0ICovCisJZGNjcF9mZWF0X2RlYnVnKHR5cGUsIGZlYXR1cmUsICp2YWwpOwogCiAJLyogbG9jYXRlIG91ciBjaGFuZ2UgcmVxdWVzdCAqLwotCXQgPSB0eXBlID09IERDQ1BPX0NPTkZJUk1fTCA/IERDQ1BPX0NIQU5HRV9SIDogRENDUE9fQ0hBTkdFX0w7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBEQ0NQT19DT05GSVJNX0w6IHQgPSBEQ0NQT19DSEFOR0VfUjsgYnJlYWs7CisJY2FzZSBEQ0NQT19DT05GSVJNX1I6IHQgPSBEQ0NQT19DSEFOR0VfTDsgYnJlYWs7CisJZGVmYXVsdDogCSAgICAgIERDQ1BfV0FSTigiaW52YWxpZCB0eXBlICVkXG4iLCB0eXBlKTsKKwkJCSAgICAgIHJldHVybiAxOworCisJfQorCS8qIFhYWCBzYW5pdHkgY2hlY2sgZmVhdHVyZSB2YWx1ZSAqLwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHQsICZkbXNrLT5kY2NwbXNfcGVuZGluZywgZGNjcG9wX25vZGUpIHsKIAkJaWYgKCFvcHQtPmRjY3BvcF9jb25mICYmIG9wdC0+ZGNjcG9wX3R5cGUgPT0gdCAmJgogCQkgICAgb3B0LT5kY2Nwb3BfZmVhdCA9PSBmZWF0dXJlKSB7Ci0JCQkvKiB3ZSBmb3VuZCBpdCAqLworCQkJZm91bmQgPSAxOworCQkJZGNjcF9wcl9kZWJ1ZygiZmVhdHVyZSAlZCBmb3VuZFxuIiwgb3B0LT5kY2Nwb3BfZmVhdCk7CisKIAkJCS8qIFhYWCBkbyBzYW5pdHkgY2hlY2sgKi8KIAogCQkJb3B0LT5kY2Nwb3BfY29uZiA9IDE7CkBAIC00MjUsOSArNDQ3LDcgQEAKIAkJCWRjY3BfZmVhdF91cGRhdGUoc2ssIG9wdC0+ZGNjcG9wX3R5cGUsCiAJCQkJCSBvcHQtPmRjY3BvcF9mZWF0LCAqdmFsKTsKIAotCQkJZGNjcF9wcl9kZWJ1ZygiZmVhdCAlZCB0eXBlICVkIGNvbmZpcm1lZCAlZFxuIiwKLQkJCQkgICAgICBmZWF0dXJlLCB0eXBlLCAqdmFsKTsKLQkJCXJjID0gMDsKKwkJCS8qIFhYWCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGRjY3BfZmVhdF91cGRhdGUgKi8KIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ0Niw5ICs0NjYsOSBAQAogCQlpbmV0X2Nza19jbGVhcl94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUyk7CiAJfQogCi0JaWYgKHJjKQotCQlkY2NwX3ByX2RlYnVnKCJmZWF0ICVkIHR5cGUgJWQgbmV2ZXIgcmVxdWVzdGVkXG4iLAotCQkJICAgICAgZmVhdHVyZSwgdHlwZSk7CisJaWYgKCFmb3VuZCkKKwkJZGNjcF9wcl9kZWJ1ZygiJXMoJWQsIC4uLikgbmV2ZXIgcmVxdWVzdGVkXG4iLAorCQkJICAgICAgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLCBmZWF0dXJlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTAxLDIwICs1MjEsMTggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wdCwgJm9sZGRtc2stPmRjY3Btc19wZW5kaW5nLCBkY2Nwb3Bfbm9kZSkgewogCQlzdHJ1Y3QgZGNjcF9vcHRfcGVuZCAqbmV3b3B0OwogCQkvKiBjb3B5IHRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uICovCi0JCXU4ICp2YWwgPSBrbWFsbG9jKG9wdC0+ZGNjcG9wX2xlbiwgR0ZQX0FUT01JQyk7CisJCXU4ICp2YWwgPSBrbWVtZHVwKG9wdC0+ZGNjcG9wX3ZhbCwgb3B0LT5kY2Nwb3BfbGVuLCBHRlBfQVRPTUlDKTsKIAogCQlpZiAodmFsID09IE5VTEwpCiAJCQlnb3RvIG91dF9jbGVhbjsKLQkJbWVtY3B5KHZhbCwgb3B0LT5kY2Nwb3BfdmFsLCBvcHQtPmRjY3BvcF9sZW4pOwogCi0JCW5ld29wdCA9IGttYWxsb2Moc2l6ZW9mKCpuZXdvcHQpLCBHRlBfQVRPTUlDKTsKKwkJbmV3b3B0ID0ga21lbWR1cChvcHQsIHNpemVvZigqbmV3b3B0KSwgR0ZQX0FUT01JQyk7CiAJCWlmIChuZXdvcHQgPT0gTlVMTCkgewogCQkJa2ZyZWUodmFsKTsKIAkJCWdvdG8gb3V0X2NsZWFuOwogCQl9CiAKIAkJLyogaW5zZXJ0IHRoZSBvcHRpb24gKi8KLQkJbWVtY3B5KG5ld29wdCwgb3B0LCBzaXplb2YoKm5ld29wdCkpOwogCQluZXdvcHQtPmRjY3BvcF92YWwgPSB2YWw7CiAJCWxpc3RfYWRkX3RhaWwoJm5ld29wdC0+ZGNjcG9wX25vZGUsICZuZXdkbXNrLT5kY2NwbXNfcGVuZGluZyk7CiAKQEAgLTU0NSwxMCArNTYzLDkgQEAKIAkJCSAgICB1OCAqdmFsLCB1OCBsZW4pCiB7CiAJaW50IHJjID0gLUVOT01FTTsKLQl1OCAqY29weSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwl1OCAqY29weSA9IGttZW1kdXAodmFsLCBsZW4sIEdGUF9LRVJORUwpOwogCiAJaWYgKGNvcHkgIT0gTlVMTCkgewotCQltZW1jcHkoY29weSwgdmFsLCBsZW4pOwogCQlyYyA9IGRjY3BfZmVhdF9jaGFuZ2UoZG1zaywgdHlwZSwgZmVhdCwgY29weSwgbGVuLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJjKQogCQkJa2ZyZWUoY29weSk7CkBAIC01ODMsMyArNjAwLDQ1IEBACiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9pbml0KTsKKworI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCitjb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSkKK3sKKwlzd2l0Y2godHlwZSkgeworCWNhc2UgRENDUE9fQ0hBTkdFX0w6ICByZXR1cm4oIkNoYW5nZUwiKTsKKwljYXNlIERDQ1BPX0NPTkZJUk1fTDogcmV0dXJuKCJDb25maXJtTCIpOworCWNhc2UgRENDUE9fQ0hBTkdFX1I6ICByZXR1cm4oIkNoYW5nZVIiKTsKKwljYXNlIERDQ1BPX0NPTkZJUk1fUjogcmV0dXJuKCJDb25maXJtUiIpOworCS8qIHRoZSBmb2xsb3dpbmcgY2FzZSBtdXN0IG5vdCBhcHBlYXIgaW4gZmVhdHVyZSBuZWdvdGF0aW9uICAqLworCWRlZmF1bHQ6IAkgICAgICBkY2NwX3ByX2RlYnVnKCJ1bmtub3duIHR5cGUgJWQgW0JVRyFdXG4iLCB0eXBlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF90eXBlbmFtZSk7CisKK2NvbnN0IGNoYXIgKmRjY3BfZmVhdF9uYW1lKGNvbnN0IHU4IGZlYXQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmZlYXR1cmVfbmFtZXNbXSA9IHsKKwkJW0RDQ1BGX1JFU0VSVkVEXQk9ICJSZXNlcnZlZCIsCisJCVtEQ0NQRl9DQ0lEXQkJPSAiQ0NJRCIsCisJCVtEQ0NQRl9TSE9SVF9TRVFOT1NdCT0gIkFsbG93IFNob3J0IFNlcW5vcyIsCisJCVtEQ0NQRl9TRVFVRU5DRV9XSU5ET1ddCT0gIlNlcXVlbmNlIFdpbmRvdyIsCisJCVtEQ0NQRl9FQ05fSU5DQVBBQkxFXQk9ICJFQ04gSW5jYXBhYmxlIiwKKwkJW0RDQ1BGX0FDS19SQVRJT10JPSAiQWNrIFJhdGlvIiwKKwkJW0RDQ1BGX1NFTkRfQUNLX1ZFQ1RPUl0JPSAiU2VuZCBBQ0sgVmVjdG9yIiwKKwkJW0RDQ1BGX1NFTkRfTkRQX0NPVU5UXQk9ICJTZW5kIE5EUCBDb3VudCIsCisJCVtEQ0NQRl9NSU5fQ1NVTV9DT1ZFUl0JPSAiTWluLiBDc3VtIENvdmVyYWdlIiwKKwkJW0RDQ1BGX0RBVEFfQ0hFQ0tTVU1dCT0gIlNlbmQgRGF0YSBDaGVja3N1bSIsCisJfTsKKwlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKKwkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKKworCWlmIChkY2NwX2ZlYXRfaXNfcmVzZXJ2ZWQoZmVhdCkpCisJCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKKworCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2ZlYXRfbmFtZSk7CisjZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2ZlYXQuaCBiL25ldC9kY2NwL2ZlYXQuaAppbmRleCBjZWU1NTNkLi4yYzM3M2FkIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9mZWF0LmgKKysrIGIvbmV0L2RjY3AvZmVhdC5oCkBAIC0xMiw5ICsxMiw0NiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImRjY3AuaCIKIAotc3RydWN0IHNvY2s7Ci1zdHJ1Y3QgZGNjcF9taW5pc29jazsKK3N0YXRpYyBpbmxpbmUgaW50IGRjY3BfZmVhdF9pc192YWxpZF9sZW5ndGgodTggdHlwZSwgdTggZmVhdHVyZSwgdTggbGVuKQoreworCS8qIHNlYy4gNi4xOiBDb25maXJtIGhhcyBhdCBsZWFzdCBsZW5ndGggMywKKwkgKiBzZWMuIDYuMjogQ2hhbmdlICBoYXMgYXQgbGVhc3QgbGVuZ3RoIDQgKi8KKwlpZiAobGVuIDwgMykKKwkJcmV0dXJuIDE7CisJaWYgKGxlbiA8IDQgICYmICh0eXBlID09IERDQ1BPX0NIQU5HRV9MIHx8IHR5cGUgPT0gRENDUE9fQ0hBTkdFX1IpKQorCQlyZXR1cm4gMTsKKwkvKiBYWFg6IGFkZCBwZXItZmVhdHVyZSBsZW5ndGggdmFsaWRhdGlvbiAoc2VjLiA2LjYuOCkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGNjcF9mZWF0X2lzX3Jlc2VydmVkKGNvbnN0IHU4IGZlYXQpCit7CisJcmV0dXJuIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJgorCQlmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpIHx8CisJICAgICAgICBmZWF0ID09IERDQ1BGX1JFU0VSVkVEOworfQorCisvKiBmZWF0dXJlIG5lZ290aWF0aW9uIGtub3dzIG9ubHkgdGhlc2UgZm91ciBvcHRpb24gdHlwZXMgKFJGQyA0MzQwLCBzZWMuIDYpICovCitzdGF0aWMgaW5saW5lIGludCBkY2NwX2ZlYXRfaXNfdmFsaWRfdHlwZShjb25zdCB1OCBvcHRudW0pCit7CisJcmV0dXJuIG9wdG51bSA+PSBEQ0NQT19DSEFOR0VfTCAmJiBvcHRudW0gPD0gRENDUE9fQ09ORklSTV9SOworCit9CisKKyNpZmRlZiBDT05GSUdfSVBfRENDUF9ERUJVRworZXh0ZXJuIGNvbnN0IGNoYXIgKmRjY3BfZmVhdF90eXBlbmFtZShjb25zdCB1OCB0eXBlKTsKK2V4dGVybiBjb25zdCBjaGFyICpkY2NwX2ZlYXRfbmFtZShjb25zdCB1OCBmZWF0KTsKKworc3RhdGljIGlubGluZSB2b2lkIGRjY3BfZmVhdF9kZWJ1Zyhjb25zdCB1OCB0eXBlLCBjb25zdCB1OCBmZWF0LCBjb25zdCB1OCB2YWwpCit7CisJZGNjcF9wcl9kZWJ1ZygiJXMoJXMgKCVkKSwgJWQpXG4iLCBkY2NwX2ZlYXRfdHlwZW5hbWUodHlwZSksCisJCQkJCSAgIGRjY3BfZmVhdF9uYW1lKGZlYXQpLCBmZWF0LCB2YWwpOworfQorI2Vsc2UKKyNkZWZpbmUgZGNjcF9mZWF0X2RlYnVnKHR5cGUsIGZlYXQsIHZhbCkKKyNlbmRpZiAvKiBDT05GSUdfSVBfRENDUF9ERUJVRyAqLwogCiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfY2hhbmdlKHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrLCB1OCB0eXBlLCB1OCBmZWF0dXJlLAogCQkJICAgICB1OCAqdmFsLCB1OCBsZW4sIGdmcF90IGdmcCk7CkBAIC0yNiwxMSArNjMsNCBAQAogZXh0ZXJuIGludCAgZGNjcF9mZWF0X2Nsb25lKHN0cnVjdCBzb2NrICpvbGRzaywgc3RydWN0IHNvY2sgKm5ld3NrKTsKIGV4dGVybiBpbnQgIGRjY3BfZmVhdF9pbml0KHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKTsKIAotZXh0ZXJuIGludCAgZGNjcF9mZWF0X2RlZmF1bHRfc2VxdWVuY2Vfd2luZG93OwotZXh0ZXJuIGludCAgZGNjcF9mZWF0X2RlZmF1bHRfcnhfY2NpZDsKLWV4dGVybiBpbnQgIGRjY3BfZmVhdF9kZWZhdWx0X3R4X2NjaWQ7Ci1leHRlcm4gaW50ICBkY2NwX2ZlYXRfZGVmYXVsdF9hY2tfcmF0aW87Ci1leHRlcm4gaW50ICBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX2Fja192ZWN0b3I7Ci1leHRlcm4gaW50ICBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX25kcF9jb3VudDsKLQogI2VuZGlmIC8qIF9EQ0NQX0ZFQVRfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvaW5wdXQuYyBiL25ldC9kY2NwL2lucHV0LmMKaW5kZXggMWQyNDg4MS4uNzM3MWEyZiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvaW5wdXQuYworKysgYi9uZXQvZGNjcC9pbnB1dC5jCkBAIC0xMjgsMjEgKzEyOCwxOCBAQAogCQkgICAgIERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkpCiAJCQlkcC0+ZGNjcHNfZ2FyID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcTsKIAl9IGVsc2UgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIkRDQ1A6IFN0ZXAgNiBmYWlsZWQgZm9yICVzIHBhY2tldCwgIgotCQkJCQkgICAgIihMU1dMKCVsbHUpIDw9IFAuc2Vxbm8oJWxsdSkgPD0gUy5TV0goJWxsdSkpIGFuZCAiCi0JCQkJCSAgICAiKFAuYWNrbm8gJXMgb3IgTEFXTCglbGx1KSA8PSBQLmFja25vKCVsbHUpIDw9IFMuQVdIKCVsbHUpLCAiCi0JCQkJCSAgICAic2VuZGluZyBTWU5DLi4uXG4iLAotCQkJICAgICAgIGRjY3BfcGFja2V0X25hbWUoZGgtPmRjY3BoX3R5cGUpLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxzd2wsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCSAgICAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZHAtPmRjY3BzX3N3aCwKLQkJCSAgICAgICAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfYWNrX3NlcSA9PQorCQlEQ0NQX1dBUk4oIkRDQ1A6IFN0ZXAgNiBmYWlsZWQgZm9yICVzIHBhY2tldCwgIgorCQkJICAiKExTV0woJWxsdSkgPD0gUC5zZXFubyglbGx1KSA8PSBTLlNXSCglbGx1KSkgYW5kICIKKwkJCSAgIihQLmFja25vICVzIG9yIExBV0woJWxsdSkgPD0gUC5hY2tubyglbGx1KSA8PSBTLkFXSCglbGx1KSwgIgorCQkJICAic2VuZGluZyBTWU5DLi4uXG4iLCAgZGNjcF9wYWNrZXRfbmFtZShkaC0+ZGNjcGhfdHlwZSksCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxzd2wsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZHAtPmRjY3BzX3N3aCwKKwkJCSAgKERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgPT0KIAkJCSAgICAgICAgRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKSA/ICJkb2Vzbid0IGV4aXN0IiA6ICJleGlzdHMiLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGxhd2wsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCSAgICAgICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRwLT5kY2Nwc19hd2gpOworCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBsYXdsLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBkcC0+ZGNjcHNfYXdoKTsKIAkJZGNjcF9zZW5kX3N5bmMoc2ssIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwgRENDUF9QS1RfU1lOQyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MzEsMjkgKzQyOCwyNSBAQAogCiAJLyoKIAkgKiAgU3RlcCAzOiBQcm9jZXNzIExJU1RFTiBzdGF0ZQotCSAqICAJKENvbnRpbnVpbmcgZnJvbSBkY2NwX3Y0X2RvX3JjdiBhbmQgZGNjcF92Nl9kb19yY3YpCiAJICoKIAkgKiAgICAgSWYgUy5zdGF0ZSA9PSBMSVNURU4sCi0JICoJICBJZiBQLnR5cGUgPT0gUmVxdWVzdCBvciBQIGNvbnRhaW5zIGEgdmFsaWQgSW5pdCBDb29raWUKLQkgKgkgIAlvcHRpb24sCi0JICoJICAgICAqIE11c3Qgc2NhbiB0aGUgcGFja2V0J3Mgb3B0aW9ucyB0byBjaGVjayBmb3IgYW4gSW5pdAotCSAqCQlDb29raWUuICBPbmx5IHRoZSBJbml0IENvb2tpZSBpcyBwcm9jZXNzZWQgaGVyZSwKLQkgKgkJaG93ZXZlcjsgb3RoZXIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIFN0ZXAgOC4gIFRoaXMKLQkgKgkJc2NhbiBuZWVkIG9ubHkgYmUgcGVyZm9ybWVkIGlmIHRoZSBlbmRwb2ludCB1c2VzIEluaXQKLQkgKgkJQ29va2llcyAqCi0JICoJICAgICAqIEdlbmVyYXRlIGEgbmV3IHNvY2tldCBhbmQgc3dpdGNoIHRvIHRoYXQgc29ja2V0ICoKLQkgKgkgICAgIFNldCBTIDo9IG5ldyBzb2NrZXQgZm9yIHRoaXMgcG9ydCBwYWlyCi0JICoJICAgICBTLnN0YXRlID0gUkVTUE9ORAotCSAqCSAgICAgQ2hvb3NlIFMuSVNTIChpbml0aWFsIHNlcW5vKSBvciBzZXQgZnJvbSBJbml0IENvb2tpZQotCSAqCSAgICAgU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llCi0JICoJICAgICBDb250aW51ZSB3aXRoIFMuc3RhdGUgPT0gUkVTUE9ORAotCSAqCSAgICAgKiBBIFJlc3BvbnNlIHBhY2tldCB3aWxsIGJlIGdlbmVyYXRlZCBpbiBTdGVwIDExICoKLQkgKgkgIE90aGVyd2lzZSwKLQkgKgkgICAgIEdlbmVyYXRlIFJlc2V0KE5vIENvbm5lY3Rpb24pIHVubGVzcyBQLnR5cGUgPT0gUmVzZXQKLQkgKgkgICAgIERyb3AgcGFja2V0IGFuZCByZXR1cm4KLQkgKgotCSAqIE5PVEU6IHRoZSBjaGVjayBmb3IgdGhlIHBhY2tldCB0eXBlcyBpcyBkb25lIGluCi0JICoJIGRjY3BfcmN2X3N0YXRlX3Byb2Nlc3MKKwkgKgkgSWYgUC50eXBlID09IFJlcXVlc3Qgb3IgUCBjb250YWlucyBhIHZhbGlkIEluaXQgQ29va2llIG9wdGlvbiwKKwkgKgkgICAgICAoKiBNdXN0IHNjYW4gdGhlIHBhY2tldCdzIG9wdGlvbnMgdG8gY2hlY2sgZm9yIEluaXQKKwkgKgkJIENvb2tpZXMuICBPbmx5IEluaXQgQ29va2llcyBhcmUgcHJvY2Vzc2VkIGhlcmUsCisJICoJCSBob3dldmVyOyBvdGhlciBvcHRpb25zIGFyZSBwcm9jZXNzZWQgaW4gU3RlcCA4LiAgVGhpcworCSAqCQkgc2NhbiBuZWVkIG9ubHkgYmUgcGVyZm9ybWVkIGlmIHRoZSBlbmRwb2ludCB1c2VzIEluaXQKKwkgKgkJIENvb2tpZXMgKikKKwkgKgkgICAgICAoKiBHZW5lcmF0ZSBhIG5ldyBzb2NrZXQgYW5kIHN3aXRjaCB0byB0aGF0IHNvY2tldCAqKQorCSAqCSAgICAgIFNldCBTIDo9IG5ldyBzb2NrZXQgZm9yIHRoaXMgcG9ydCBwYWlyCisJICoJICAgICAgUy5zdGF0ZSA9IFJFU1BPTkQKKwkgKgkgICAgICBDaG9vc2UgUy5JU1MgKGluaXRpYWwgc2Vxbm8pIG9yIHNldCBmcm9tIEluaXQgQ29va2llcworCSAqCSAgICAgIEluaXRpYWxpemUgUy5HQVIgOj0gUy5JU1MKKwkgKgkgICAgICBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdAorCSAqCSAgICAgIENvb2tpZXMgQ29udGludWUgd2l0aCBTLnN0YXRlID09IFJFU1BPTkQKKwkgKgkgICAgICAoKiBBIFJlc3BvbnNlIHBhY2tldCB3aWxsIGJlIGdlbmVyYXRlZCBpbiBTdGVwIDExICopCisJICoJIE90aGVyd2lzZSwKKwkgKgkgICAgICBHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CisJICoJICAgICAgRHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwogCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9MSVNURU4pIHsKIAkJaWYgKGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1JFUVVFU1QpIHsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCBlMDhlNzY4Li5mZjgxNjc5IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC0xMTMsMTMgKzExMyw4IEBACiAJLyogT0ssIG5vdyBjb21taXQgZGVzdGluYXRpb24gdG8gc29ja2V0LiAgKi8KIAlza19zZXR1cF9jYXBzKHNrLCAmcnQtPnUuZHN0KTsKIAotCWRwLT5kY2Nwc19nYXIgPQotCQlkcC0+ZGNjcHNfaXNzID0gc2VjdXJlX2RjY3Bfc2VxdWVuY2VfbnVtYmVyKGluZXQtPnNhZGRyLAotCQkJCQkJCSAgICBpbmV0LT5kYWRkciwKLQkJCQkJCQkgICAgaW5ldC0+c3BvcnQsCi0JCQkJCQkJICAgIHVzaW4tPnNpbl9wb3J0KTsKLQlkY2NwX3VwZGF0ZV9nc3Moc2ssIGRwLT5kY2Nwc19pc3MpOwotCisJZHAtPmRjY3BzX2lzcyA9IHNlY3VyZV9kY2NwX3NlcXVlbmNlX251bWJlcihpbmV0LT5zYWRkciwgaW5ldC0+ZGFkZHIsCisJCQkJCQkgICAgaW5ldC0+c3BvcnQsIGluZXQtPmRwb3J0KTsKIAlpbmV0LT5pZCA9IGRwLT5kY2Nwc19pc3MgXiBqaWZmaWVzOwogCiAJZXJyID0gZGNjcF9jb25uZWN0KHNrKTsKQEAgLTE5Myw4NiArMTg4LDYgQEAKIAl9IC8qIGVsc2UgbGV0IHRoZSB1c3VhbCByZXRyYW5zbWl0IHRpbWVyIGhhbmRsZSBpdCAqLwogfQogCi1zdGF0aWMgdm9pZCBkY2NwX3Y0X3JlcXNrX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpyeHNrYiwKLQkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyeHNrYiksICpkaDsKLQljb25zdCB1MzIgZGNjcF9oZHJfYWNrX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSArCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JaWYgKCgoc3RydWN0IHJ0YWJsZSAqKXJ4c2tiLT5kc3QpLT5ydF90eXBlICE9IFJUTl9MT0NBTCkKLQkJcmV0dXJuOwotCi0Jc2tiID0gYWxsb2Nfc2tiKGRjY3BfdjRfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIsIEdGUF9BVE9NSUMpOwotCWlmIChza2IgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycy4gKi8KLQlza2JfcmVzZXJ2ZShza2IsIGRjY3BfdjRfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwotCi0Jc2tiLT5kc3QgPSBkc3RfY2xvbmUocnhza2ItPmRzdCk7Ci0KLQlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hkcl9hY2tfbGVuKTsKLQlkaCA9IGRjY3BfaGRyKHNrYik7Ci0JbWVtc2V0KGRoLCAwLCBkY2NwX2hkcl9hY2tfbGVuKTsKLQotCS8qIEJ1aWxkIERDQ1AgaGVhZGVyIGFuZCBjaGVja3N1bSBpdC4gKi8KLQlkaC0+ZGNjcGhfdHlwZQkgICA9IERDQ1BfUEtUX0FDSzsKLQlkaC0+ZGNjcGhfc3BvcnQJICAgPSByeGRoLT5kY2NwaF9kcG9ydDsKLQlkaC0+ZGNjcGhfZHBvcnQJICAgPSByeGRoLT5kY2NwaF9zcG9ydDsKLQlkaC0+ZGNjcGhfZG9mZgkgICA9IGRjY3BfaGRyX2Fja19sZW4gLyA0OwotCWRoLT5kY2NwaF94CSAgID0gMTsKLQotCWRjY3BfaGRyX3NldF9zZXEoZGgsIERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfYWNrX3NlcSk7Ci0JZGNjcF9oZHJfc2V0X2FjayhkY2NwX2hkcl9hY2tfYml0cyhza2IpLAotCQkJIERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfc2VxKTsKLQotCWJoX2xvY2tfc29jayhkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrKTsKLQllcnIgPSBpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc2tiLCBkY2NwX3Y0X2N0bF9zb2NrZXQtPnNrLAotCQkJCSAgICByeHNrYi0+bmguaXBoLT5kYWRkciwKLQkJCQkgICAgcnhza2ItPm5oLmlwaC0+c2FkZHIsIE5VTEwpOwotCWJoX3VubG9ja19zb2NrKGRjY3BfdjRfY3RsX3NvY2tldC0+c2spOwotCi0JaWYgKGVyciA9PSBORVRfWE1JVF9DTiB8fCBlcnIgPT0gMCkgewotCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9PVVRTRUdTKTsKLQkJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfT1VUUlNUUyk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGRjY3BfdjRfc2VuZF9yZXNwb25zZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKLQkJCQkgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQotewotCWludCBlcnIgPSAtMTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0JLyogRmlyc3QsIGdyYWIgYSByb3V0ZS4gKi8KLQkKLQlpZiAoZHN0ID09IE5VTEwgJiYgKGRzdCA9IGluZXRfY3NrX3JvdXRlX3JlcShzaywgcmVxKSkgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KLQlza2IgPSBkY2NwX21ha2VfcmVzcG9uc2Uoc2ssIGRzdCwgcmVxKTsKLQlpZiAoc2tiICE9IE5VTEwpIHsKLQkJY29uc3Qgc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxID0gaW5ldF9yc2socmVxKTsKLQkJc3RydWN0IGRjY3BfaGRyICpkaCA9IGRjY3BfaGRyKHNrYik7Ci0KLQkJZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92NF9jaGVja3N1bShza2IsIGlyZXEtPmxvY19hZGRyLAotCQkJCQkJICAgICAgaXJlcS0+cm10X2FkZHIpOwotCQltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihJUENCKHNrYiktPm9wdCkpOwotCQllcnIgPSBpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc2tiLCBzaywgaXJlcS0+bG9jX2FkZHIsCi0JCQkJCSAgICBpcmVxLT5ybXRfYWRkciwKLQkJCQkJICAgIGlyZXEtPm9wdCk7Ci0JCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04pCi0JCQllcnIgPSAwOwotCX0KLQotb3V0OgotCWRzdF9yZWxlYXNlKGRzdCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIElDTVAgbW9kdWxlIHdoZW4gaXQgZ2V0cyBzb21lIHNvcnQgb2YgZXJyb3IKICAqIGNvbmRpdGlvbi4gSWYgZXJyIDwgMCB0aGVuIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGNsb3NlZCBhbmQgdGhlIGVycm9yCkBAIC0zMjksNyArMjQ0LDcgQEAKIAlzZXEgPSBkY2NwX2hkcl9zZXEoc2tiKTsKIAlpZiAoc2stPnNrX3N0YXRlICE9IERDQ1BfTElTVEVOICYmCiAJICAgICFiZXR3ZWVuNDgoc2VxLCBkcC0+ZGNjcHNfc3dsLCBkcC0+ZGNjcHNfc3doKSkgewotCQlORVRfSU5DX1NUQVRTKExJTlVYX01JQl9PVVRPRldJTkRPV0lDTVBTKTsKKwkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfT1VUT0ZXSU5ET1dJQ01QUyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDI5LDE5ICszNDQsMjQgQEAKIAlzb2NrX3B1dChzayk7CiB9CiAKLS8qIFRoaXMgcm91dGluZSBjb21wdXRlcyBhbiBJUHY0IERDQ1AgY2hlY2tzdW0uICovCi12b2lkIGRjY3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4sIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgZGNjcF92NF9jc3VtX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QpCit7CisJcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKHNyYywgZHN0LCBza2ItPmxlbiwgSVBQUk9UT19EQ0NQLCBza2ItPmNzdW0pOworfQorCit2b2lkIGRjY3BfdjRfc2VuZF9jaGVjayhzdHJ1Y3Qgc29jayAqc2ssIGludCB1bnVzZWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwogCi0JZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92NF9jaGVja3N1bShza2IsIGluZXQtPnNhZGRyLCBpbmV0LT5kYWRkcik7CisJZGNjcF9jc3VtX291dGdvaW5nKHNrYik7CisJZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92NF9jc3VtX2ZpbmlzaChza2IsIGluZXQtPnNhZGRyLCBpbmV0LT5kYWRkcik7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdjRfc2VuZF9jaGVjayk7CiAKLXN0YXRpYyBpbmxpbmUgdTY0IGRjY3BfdjRfaW5pdF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHU2NCBkY2NwX3Y0X2luaXRfc2VxdWVuY2UoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gc2VjdXJlX2RjY3Bfc2VxdWVuY2VfbnVtYmVyKHNrYi0+bmguaXBoLT5kYWRkciwKIAkJCQkJICAgc2tiLT5uaC5pcGgtPnNhZGRyLApAQCAtNDQ5LDk1ICszNjksNiBAQAogCQkJCQkgICBkY2NwX2hkcihza2IpLT5kY2NwaF9zcG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyBkY2NwX3JlcXVlc3Rfc29ja19vcHM7Ci0KLWludCBkY2NwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOwotCXN0cnVjdCBkY2NwX3NvY2sgZHA7Ci0Jc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxOwotCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcTsKLQljb25zdCBfX2JlMzIgc2FkZHIgPSBza2ItPm5oLmlwaC0+c2FkZHI7Ci0JY29uc3QgX19iZTMyIGRhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOwotIAljb25zdCBfX2JlMzIgc2VydmljZSA9IGRjY3BfaGRyX3JlcXVlc3Qoc2tiKS0+ZGNjcGhfcmVxX3NlcnZpY2U7Ci0Jc3RydWN0IGRjY3Bfc2tiX2NiICpkY2IgPSBEQ0NQX1NLQl9DQihza2IpOwotCV9fdTggcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9UT09fQlVTWTsKLQotCS8qIE5ldmVyIGFuc3dlciB0byBEQ0NQX1BLVF9SRVFVRVNUcyBzZW5kIHRvIGJyb2FkY2FzdCBvciBtdWx0aWNhc3QgKi8KLQlpZiAoKChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3QpLT5ydF9mbGFncyAmCi0JICAgIChSVENGX0JST0FEQ0FTVCB8IFJUQ0ZfTVVMVElDQVNUKSkgewotCQlyZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047Ci0JCWdvdG8gZHJvcDsKLQl9Ci0KLQlpZiAoZGNjcF9iYWRfc2VydmljZV9jb2RlKHNrLCBzZXJ2aWNlKSkgewotCQlyZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX0JBRF9TRVJWSUNFX0NPREU7Ci0JCWdvdG8gZHJvcDsKLSAJfQotCS8qCi0JICogVFcgYnVja2V0cyBhcmUgY29udmVydGVkIHRvIG9wZW4gcmVxdWVzdHMgd2l0aG91dAotCSAqIGxpbWl0YXRpb25zLCB0aGV5IGNvbnNlcnZlIHJlc291cmNlcyBhbmQgcGVlciBpcwotCSAqIGV2aWRlbnRseSByZWFsIG9uZS4KLQkgKi8KLQlpZiAoaW5ldF9jc2tfcmVxc2tfcXVldWVfaXNfZnVsbChzaykpCi0JCWdvdG8gZHJvcDsKLQotCS8qCi0JICogQWNjZXB0IGJhY2tsb2cgaXMgZnVsbC4gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCBlbm91Z2gKLQkgKiBvZiB3YXJtIGVudHJpZXMgaW4gc3luIHF1ZXVlLCBkcm9wIHJlcXVlc3QuIEl0IGlzIGJldHRlciB0aGFuCi0JICogY2xvZ2dpbmcgc3luIHF1ZXVlIHdpdGggb3BlbnJlcXMgd2l0aCBleHBvbmVudGlhbGx5IGluY3JlYXNpbmcKLQkgKiB0aW1lb3V0LgotCSAqLwotCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spICYmIGluZXRfY3NrX3JlcXNrX3F1ZXVlX3lvdW5nKHNrKSA+IDEpCi0JCWdvdG8gZHJvcDsKLQotCXJlcSA9IHJlcXNrX2FsbG9jKCZkY2NwX3JlcXVlc3Rfc29ja19vcHMpOwotCWlmIChyZXEgPT0gTlVMTCkKLQkJZ290byBkcm9wOwotCi0JaWYgKGRjY3BfcGFyc2Vfb3B0aW9ucyhzaywgc2tiKSkKLQkJZ290byBkcm9wX2FuZF9mcmVlOwotCi0JZGNjcF9vcGVucmVxX2luaXQocmVxLCAmZHAsIHNrYik7Ci0KLQlpZiAoc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3Qoc2ssIHNrYiwgcmVxKSkKLQkJZ290byBkcm9wX2FuZF9mcmVlOwotCi0JaXJlcSA9IGluZXRfcnNrKHJlcSk7Ci0JaXJlcS0+bG9jX2FkZHIgPSBkYWRkcjsKLQlpcmVxLT5ybXRfYWRkciA9IHNhZGRyOwotCXJlcS0+cmN2X3duZAk9IGRjY3BfZmVhdF9kZWZhdWx0X3NlcXVlbmNlX3dpbmRvdzsKLQlpcmVxLT5vcHQJPSBOVUxMOwotCi0JLyogCi0JICogU3RlcCAzOiBQcm9jZXNzIExJU1RFTiBzdGF0ZQotCSAqCi0JICogU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llCi0JICoKLQkgKiBJbiBmYWN0IHdlIGRlZmVyIHNldHRpbmcgUy5HU1IsIFMuU1dMLCBTLlNXSCB0bwotCSAqIGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQuCi0JICovCi0JZHJlcSA9IGRjY3BfcnNrKHJlcSk7Ci0JZHJlcS0+ZHJlcV9pc3IJICAgPSBkY2ItPmRjY3BkX3NlcTsKLQlkcmVxLT5kcmVxX2lzcwkgICA9IGRjY3BfdjRfaW5pdF9zZXF1ZW5jZShzaywgc2tiKTsKLQlkcmVxLT5kcmVxX3NlcnZpY2UgPSBzZXJ2aWNlOwotCi0JaWYgKGRjY3BfdjRfc2VuZF9yZXNwb25zZShzaywgcmVxLCBOVUxMKSkKLQkJZ290byBkcm9wX2FuZF9mcmVlOwotCi0JaW5ldF9jc2tfcmVxc2tfcXVldWVfaGFzaF9hZGQoc2ssIHJlcSwgRENDUF9USU1FT1VUX0lOSVQpOwotCXJldHVybiAwOwotCi1kcm9wX2FuZF9mcmVlOgotCXJlcXNrX2ZyZWUocmVxKTsKLWRyb3A6Ci0JRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfQVRURU1QVEZBSUxTKTsKLQlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSByZXNldF9jb2RlOwotCXJldHVybiAtMTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF92NF9jb25uX3JlcXVlc3QpOwotCiAvKgogICogVGhlIHRocmVlIHdheSBoYW5kc2hha2UgaGFzIGNvbXBsZXRlZCAtIHdlIGdvdCBhIHZhbGlkIEFDSyBvciBEQVRBQUNLIC0KICAqIG5vdyBjcmVhdGUgdGhlIG5ldyBzb2NrZXQuCkBAIC02MjMsNDcgKzQ1NCw2IEBACiAJcmV0dXJuIHNrOwogfQogCi1pbnQgZGNjcF92NF9jaGVja3N1bShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBfX2JlMzIgc2FkZHIsCi0JCSAgICAgY29uc3QgX19iZTMyIGRhZGRyKQotewotCWNvbnN0IHN0cnVjdCBkY2NwX2hkciogZGggPSBkY2NwX2hkcihza2IpOwotCWludCBjaGVja3N1bV9sZW47Ci0JdTMyIHRtcDsKLQotCWlmIChkaC0+ZGNjcGhfY3Njb3YgPT0gMCkKLQkJY2hlY2tzdW1fbGVuID0gc2tiLT5sZW47Ci0JZWxzZSB7Ci0JCWNoZWNrc3VtX2xlbiA9IChkaC0+ZGNjcGhfY3Njb3YgKyBkaC0+ZGNjcGhfeCkgKiBzaXplb2YodTMyKTsKLQkJY2hlY2tzdW1fbGVuID0gY2hlY2tzdW1fbGVuIDwgc2tiLT5sZW4gPyBjaGVja3N1bV9sZW4gOgotCQkJCQkJCSBza2ItPmxlbjsKLQl9Ci0KLQl0bXAgPSBjc3VtX3BhcnRpYWwoKHVuc2lnbmVkIGNoYXIgKilkaCwgY2hlY2tzdW1fbGVuLCAwKTsKLQlyZXR1cm4gY3N1bV90Y3B1ZHBfbWFnaWMoc2FkZHIsIGRhZGRyLCBjaGVja3N1bV9sZW4sCi0JCQkJIElQUFJPVE9fRENDUCwgdG1wKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF92NF9jaGVja3N1bSk7Ci0KLXN0YXRpYyBpbnQgZGNjcF92NF92ZXJpZnlfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBjb25zdCBfX2JlMzIgc2FkZHIsIGNvbnN0IF9fYmUzMiBkYWRkcikKLXsKLQlzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKLQlpbnQgY2hlY2tzdW1fbGVuOwotCXUzMiB0bXA7Ci0KLQlpZiAoZGgtPmRjY3BoX2NzY292ID09IDApCi0JCWNoZWNrc3VtX2xlbiA9IHNrYi0+bGVuOwotCWVsc2UgewotCQljaGVja3N1bV9sZW4gPSAoZGgtPmRjY3BoX2NzY292ICsgZGgtPmRjY3BoX3gpICogc2l6ZW9mKHUzMik7Ci0JCWNoZWNrc3VtX2xlbiA9IGNoZWNrc3VtX2xlbiA8IHNrYi0+bGVuID8gY2hlY2tzdW1fbGVuIDoKLQkJCQkJCQkgc2tiLT5sZW47Ci0JfQotCXRtcCA9IGNzdW1fcGFydGlhbCgodW5zaWduZWQgY2hhciAqKWRoLCBjaGVja3N1bV9sZW4sIDApOwotCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYyhzYWRkciwgZGFkZHIsIGNoZWNrc3VtX2xlbiwKLQkJCQkgSVBQUk9UT19EQ0NQLCB0bXApID09IDAgPyAwIDogLTE7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5KiBkY2NwX3Y0X3JvdXRlX3NrYihzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC02ODksNyArNDc5LDM3IEBACiAJcmV0dXJuICZydC0+dS5kc3Q7CiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfdjRfY3RsX3NlbmRfcmVzZXQoc3RydWN0IHNrX2J1ZmYgKnJ4c2tiKQorc3RhdGljIGludCBkY2NwX3Y0X3NlbmRfcmVzcG9uc2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJIHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlpbnQgZXJyID0gLTE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCS8qIEZpcnN0LCBncmFiIGEgcm91dGUuICovCisJCisJaWYgKGRzdCA9PSBOVUxMICYmIChkc3QgPSBpbmV0X2Nza19yb3V0ZV9yZXEoc2ssIHJlcSkpID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJc2tiID0gZGNjcF9tYWtlX3Jlc3BvbnNlKHNrLCBkc3QsIHJlcSk7CisJaWYgKHNrYiAhPSBOVUxMKSB7CisJCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CisJCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOworCisJCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjRfY3N1bV9maW5pc2goc2tiLCBpcmVxLT5sb2NfYWRkciwKKwkJCQkJCQkgICAgICBpcmVxLT5ybXRfYWRkcik7CisJCW1lbXNldCgmKElQQ0Ioc2tiKS0+b3B0KSwgMCwgc2l6ZW9mKElQQ0Ioc2tiKS0+b3B0KSk7CisJCWVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIHNrLCBpcmVxLT5sb2NfYWRkciwKKwkJCQkJICAgIGlyZXEtPnJtdF9hZGRyLAorCQkJCQkgICAgaXJlcS0+b3B0KTsKKwkJZXJyID0gbmV0X3htaXRfZXZhbChlcnIpOworCX0KKworb3V0OgorCWRzdF9yZWxlYXNlKGRzdCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZGNjcF92NF9jdGxfc2VuZF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpyeHNrYikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBkY2NwX2hkciAqcnhkaCA9IGRjY3BfaGRyKHJ4c2tiKSwgKmRoOwpAQCAtNjk4LDcgKzUxOCw3IEBACiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfcmVzZXQpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwotCXU2NCBzZXFubzsKKwl1NjQgc2Vxbm8gPSAwOwogCiAJLyogTmV2ZXIgc2VuZCBhIHJlc2V0IGluIHJlc3BvbnNlIHRvIGEgcmVzZXQuICovCiAJaWYgKHJ4ZGgtPmRjY3BoX3R5cGUgPT0gRENDUF9QS1RfUkVTRVQpCkBAIC03MjAsOSArNTQwLDcgQEAKIAlza2JfcmVzZXJ2ZShza2IsIGRjY3BfdjRfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKGRzdCk7CiAKLQlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hkcl9yZXNldF9sZW4pOwotCWRoID0gZGNjcF9oZHIoc2tiKTsKLQltZW1zZXQoZGgsIDAsIGRjY3BfaGRyX3Jlc2V0X2xlbik7CisJZGggPSBkY2NwX3plcm9lZF9oZHIoc2tiLCBkY2NwX2hkcl9yZXNldF9sZW4pOwogCiAJLyogQnVpbGQgRENDUCBoZWFkZXIgYW5kIGNoZWNrc3VtIGl0LiAqLwogCWRoLT5kY2NwaF90eXBlCSAgID0gRENDUF9QS1RfUkVTRVQ7CkBAIC03MzQsMTYgKzU1MiwxNSBAQAogCQkJCURDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfcmVzZXRfY29kZTsKIAogCS8qIFNlZSAiOC4zLjEuIEFibm9ybWFsIFRlcm1pbmF0aW9uIiBpbiBSRkMgNDM0MCAqLwotCXNlcW5vID0gMDsKIAlpZiAoRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9hY2tfc2VxICE9IERDQ1BfUEtUX1dJVEhPVVRfQUNLX1NFUSkKIAkJZGNjcF9zZXRfc2Vxbm8oJnNlcW5vLCBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX2Fja19zZXEgKyAxKTsKIAogCWRjY3BfaGRyX3NldF9zZXEoZGgsIHNlcW5vKTsKLQlkY2NwX2hkcl9zZXRfYWNrKGRjY3BfaGRyX2Fja19iaXRzKHNrYiksCi0JCQkgRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9zZXEpOworCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwgRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9zZXEpOwogCi0JZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92NF9jaGVja3N1bShza2IsIHJ4c2tiLT5uaC5pcGgtPnNhZGRyLAotCQkJCQkgICAgICByeHNrYi0+bmguaXBoLT5kYWRkcik7CisJZGNjcF9jc3VtX291dGdvaW5nKHNrYik7CisJZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92NF9jc3VtX2ZpbmlzaChza2IsIHJ4c2tiLT5uaC5pcGgtPnNhZGRyLAorCQkJCQkJICAgICAgcnhza2ItPm5oLmlwaC0+ZGFkZHIpOwogCiAJYmhfbG9ja19zb2NrKGRjY3BfdjRfY3RsX3NvY2tldC0+c2spOwogCWVyciA9IGlwX2J1aWxkX2FuZF9zZW5kX3BrdChza2IsIGRjY3BfdjRfY3RsX3NvY2tldC0+c2ssCkBAIC03NTEsNyArNTY4LDcgQEAKIAkJCQkgICAgcnhza2ItPm5oLmlwaC0+c2FkZHIsIE5VTEwpOwogCWJoX3VubG9ja19zb2NrKGRjY3BfdjRfY3RsX3NvY2tldC0+c2spOwogCi0JaWYgKGVyciA9PSBORVRfWE1JVF9DTiB8fCBlcnIgPT0gMCkgeworCWlmIChuZXRfeG1pdF9ldmFsKGVycikgPT0gMCkgewogCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9PVVRTRUdTKTsKIAkJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfT1VUUlNUUyk7CiAJfQpAQCAtNzU5LDYgKzU3NiwxMDMgQEAKIAkgZHN0X3JlbGVhc2UoZHN0KTsKIH0KIAorc3RhdGljIHZvaWQgZGNjcF92NF9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlrZnJlZShpbmV0X3JzayhyZXEpLT5vcHQpOworfQorCitzdGF0aWMgc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgZGNjcF9yZXF1ZXN0X3NvY2tfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CisJLmZhbWlseQkJPSBQRl9JTkVULAorCS5vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2spLAorCS5ydHhfc3luX2Fjawk9IGRjY3BfdjRfc2VuZF9yZXNwb25zZSwKKwkuc2VuZF9hY2sJPSBkY2NwX3JlcXNrX3NlbmRfYWNrLAorCS5kZXN0cnVjdG9yCT0gZGNjcF92NF9yZXFza19kZXN0cnVjdG9yLAorCS5zZW5kX3Jlc2V0CT0gZGNjcF92NF9jdGxfc2VuZF9yZXNldCwKK307CisKK2ludCBkY2NwX3Y0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOworCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTsKKwlzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKmRyZXE7CisgCWNvbnN0IF9fYmUzMiBzZXJ2aWNlID0gZGNjcF9oZHJfcmVxdWVzdChza2IpLT5kY2NwaF9yZXFfc2VydmljZTsKKwlzdHJ1Y3QgZGNjcF9za2JfY2IgKmRjYiA9IERDQ1BfU0tCX0NCKHNrYik7CisJX191OCByZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZOworCisJLyogTmV2ZXIgYW5zd2VyIHRvIERDQ1BfUEtUX1JFUVVFU1RzIHNlbmQgdG8gYnJvYWRjYXN0IG9yIG11bHRpY2FzdCAqLworCWlmICgoKHN0cnVjdCBydGFibGUgKilza2ItPmRzdCktPnJ0X2ZsYWdzICYKKwkgICAgKFJUQ0ZfQlJPQURDQVNUIHwgUlRDRl9NVUxUSUNBU1QpKSB7CisJCXJlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKKwkJZ290byBkcm9wOworCX0KKworCWlmIChkY2NwX2JhZF9zZXJ2aWNlX2NvZGUoc2ssIHNlcnZpY2UpKSB7CisJCXJlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfQkFEX1NFUlZJQ0VfQ09ERTsKKwkJZ290byBkcm9wOworIAl9CisJLyoKKwkgKiBUVyBidWNrZXRzIGFyZSBjb252ZXJ0ZWQgdG8gb3BlbiByZXF1ZXN0cyB3aXRob3V0CisJICogbGltaXRhdGlvbnMsIHRoZXkgY29uc2VydmUgcmVzb3VyY2VzIGFuZCBwZWVyIGlzCisJICogZXZpZGVudGx5IHJlYWwgb25lLgorCSAqLworCWlmIChpbmV0X2Nza19yZXFza19xdWV1ZV9pc19mdWxsKHNrKSkKKwkJZ290byBkcm9wOworCisJLyoKKwkgKiBBY2NlcHQgYmFja2xvZyBpcyBmdWxsLiBJZiB3ZSBoYXZlIGFscmVhZHkgcXVldWVkIGVub3VnaAorCSAqIG9mIHdhcm0gZW50cmllcyBpbiBzeW4gcXVldWUsIGRyb3AgcmVxdWVzdC4gSXQgaXMgYmV0dGVyIHRoYW4KKwkgKiBjbG9nZ2luZyBzeW4gcXVldWUgd2l0aCBvcGVucmVxcyB3aXRoIGV4cG9uZW50aWFsbHkgaW5jcmVhc2luZworCSAqIHRpbWVvdXQuCisJICovCisJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykgJiYgaW5ldF9jc2tfcmVxc2tfcXVldWVfeW91bmcoc2spID4gMSkKKwkJZ290byBkcm9wOworCisJcmVxID0gcmVxc2tfYWxsb2MoJmRjY3BfcmVxdWVzdF9zb2NrX29wcyk7CisJaWYgKHJlcSA9PSBOVUxMKQorCQlnb3RvIGRyb3A7CisKKwlpZiAoZGNjcF9wYXJzZV9vcHRpb25zKHNrLCBza2IpKQorCQlnb3RvIGRyb3BfYW5kX2ZyZWU7CisKKwlkY2NwX3JlcXNrX2luaXQocmVxLCBza2IpOworCisJaWYgKHNlY3VyaXR5X2luZXRfY29ubl9yZXF1ZXN0KHNrLCBza2IsIHJlcSkpCisJCWdvdG8gZHJvcF9hbmRfZnJlZTsKKworCWlyZXEgPSBpbmV0X3JzayhyZXEpOworCWlyZXEtPmxvY19hZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOworCWlyZXEtPnJtdF9hZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOworCWlyZXEtPm9wdAk9IE5VTEw7CisKKwkvKiAKKwkgKiBTdGVwIDM6IFByb2Nlc3MgTElTVEVOIHN0YXRlCisJICoKKwkgKiBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdCBDb29raWUKKwkgKgorCSAqIEluIGZhY3Qgd2UgZGVmZXIgc2V0dGluZyBTLkdTUiwgUy5TV0wsIFMuU1dIIHRvCisJICogZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZC4KKwkgKi8KKwlkcmVxID0gZGNjcF9yc2socmVxKTsKKwlkcmVxLT5kcmVxX2lzcgkgICA9IGRjYi0+ZGNjcGRfc2VxOworCWRyZXEtPmRyZXFfaXNzCSAgID0gZGNjcF92NF9pbml0X3NlcXVlbmNlKHNrYik7CisJZHJlcS0+ZHJlcV9zZXJ2aWNlID0gc2VydmljZTsKKworCWlmIChkY2NwX3Y0X3NlbmRfcmVzcG9uc2Uoc2ssIHJlcSwgTlVMTCkpCisJCWdvdG8gZHJvcF9hbmRfZnJlZTsKKworCWluZXRfY3NrX3JlcXNrX3F1ZXVlX2hhc2hfYWRkKHNrLCByZXEsIERDQ1BfVElNRU9VVF9JTklUKTsKKwlyZXR1cm4gMDsKKworZHJvcF9hbmRfZnJlZToKKwlyZXFza19mcmVlKHJlcSk7Citkcm9wOgorCURDQ1BfSU5DX1NUQVRTX0JIKERDQ1BfTUlCX0FUVEVNUFRGQUlMUyk7CisJZGNiLT5kY2NwZF9yZXNldF9jb2RlID0gcmVzZXRfY29kZTsKKwlyZXR1cm4gLTE7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdjRfY29ubl9yZXF1ZXN0KTsKKwogaW50IGRjY3BfdjRfZG9fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKQEAgLTc3MSwyNCArNjg1LDIzIEBACiAKIAkvKgogCSAqICBTdGVwIDM6IFByb2Nlc3MgTElTVEVOIHN0YXRlCi0JICogICAgIElmIFMuc3RhdGUgPT0gTElTVEVOLAotCSAqCSAgSWYgUC50eXBlID09IFJlcXVlc3Qgb3IgUCBjb250YWlucyBhIHZhbGlkIEluaXQgQ29va2llCi0JICoJICAJb3B0aW9uLAotCSAqCSAgICAgKiBNdXN0IHNjYW4gdGhlIHBhY2tldCdzIG9wdGlvbnMgdG8gY2hlY2sgZm9yIGFuIEluaXQKLQkgKgkJQ29va2llLiAgT25seSB0aGUgSW5pdCBDb29raWUgaXMgcHJvY2Vzc2VkIGhlcmUsCi0JICoJCWhvd2V2ZXI7IG90aGVyIG9wdGlvbnMgYXJlIHByb2Nlc3NlZCBpbiBTdGVwIDguICBUaGlzCi0JICoJCXNjYW4gbmVlZCBvbmx5IGJlIHBlcmZvcm1lZCBpZiB0aGUgZW5kcG9pbnQgdXNlcyBJbml0Ci0JICoJCUNvb2tpZXMgKgotCSAqCSAgICAgKiBHZW5lcmF0ZSBhIG5ldyBzb2NrZXQgYW5kIHN3aXRjaCB0byB0aGF0IHNvY2tldCAqCi0JICoJICAgICBTZXQgUyA6PSBuZXcgc29ja2V0IGZvciB0aGlzIHBvcnQgcGFpcgotCSAqCSAgICAgUy5zdGF0ZSA9IFJFU1BPTkQKLQkgKgkgICAgIENob29zZSBTLklTUyAoaW5pdGlhbCBzZXFubykgb3Igc2V0IGZyb20gSW5pdCBDb29raWUKLQkgKgkgICAgIFNldCBTLklTUiwgUy5HU1IsIFMuU1dMLCBTLlNXSCBmcm9tIHBhY2tldCBvciBJbml0IENvb2tpZQotCSAqCSAgICAgQ29udGludWUgd2l0aCBTLnN0YXRlID09IFJFU1BPTkQKLQkgKgkgICAgICogQSBSZXNwb25zZSBwYWNrZXQgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gU3RlcCAxMSAqCi0JICoJICBPdGhlcndpc2UsCi0JICoJICAgICBHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0Ci0JICoJICAgICBEcm9wIHBhY2tldCBhbmQgcmV0dXJuCisJICoJIElmIFAudHlwZSA9PSBSZXF1ZXN0IG9yIFAgY29udGFpbnMgYSB2YWxpZCBJbml0IENvb2tpZSBvcHRpb24sCisJICoJICAgICAgKCogTXVzdCBzY2FuIHRoZSBwYWNrZXQncyBvcHRpb25zIHRvIGNoZWNrIGZvciBJbml0CisJICoJCSBDb29raWVzLiAgT25seSBJbml0IENvb2tpZXMgYXJlIHByb2Nlc3NlZCBoZXJlLAorCSAqCQkgaG93ZXZlcjsgb3RoZXIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIFN0ZXAgOC4gIFRoaXMKKwkgKgkJIHNjYW4gbmVlZCBvbmx5IGJlIHBlcmZvcm1lZCBpZiB0aGUgZW5kcG9pbnQgdXNlcyBJbml0CisJICoJCSBDb29raWVzICopCisJICoJICAgICAgKCogR2VuZXJhdGUgYSBuZXcgc29ja2V0IGFuZCBzd2l0Y2ggdG8gdGhhdCBzb2NrZXQgKikKKwkgKgkgICAgICBTZXQgUyA6PSBuZXcgc29ja2V0IGZvciB0aGlzIHBvcnQgcGFpcgorCSAqCSAgICAgIFMuc3RhdGUgPSBSRVNQT05ECisJICoJICAgICAgQ2hvb3NlIFMuSVNTIChpbml0aWFsIHNlcW5vKSBvciBzZXQgZnJvbSBJbml0IENvb2tpZXMKKwkgKgkgICAgICBJbml0aWFsaXplIFMuR0FSIDo9IFMuSVNTCisJICoJICAgICAgU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llcworCSAqCSAgICAgIENvbnRpbnVlIHdpdGggUy5zdGF0ZSA9PSBSRVNQT05ECisJICoJICAgICAgKCogQSBSZXNwb25zZSBwYWNrZXQgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gU3RlcCAxMSAqKQorCSAqCSBPdGhlcndpc2UsCisJICoJICAgICAgR2VuZXJhdGUgUmVzZXQoTm8gQ29ubmVjdGlvbikgdW5sZXNzIFAudHlwZSA9PSBSZXNldAorCSAqCSAgICAgIERyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKgogCSAqIE5PVEU6IHRoZSBjaGVjayBmb3IgdGhlIHBhY2tldCB0eXBlcyBpcyBkb25lIGluCiAJICoJIGRjY3BfcmN2X3N0YXRlX3Byb2Nlc3MKQEAgLTgxMSw3ICs3MjQsNyBAQAogCXJldHVybiAwOwogCiByZXNldDoKLQlkY2NwX3Y0X2N0bF9zZW5kX3Jlc2V0KHNrYik7CisJZGNjcF92NF9jdGxfc2VuZF9yZXNldChzaywgc2tiKTsKIGRpc2NhcmQ6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CkBAIC04MTksNjAgKzczMiw3NCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3Y0X2RvX3Jjdik7CiAKKy8qKgorICoJZGNjcF9pbnZhbGlkX3BhY2tldCAgLSAgY2hlY2sgZm9yIG1hbGZvcm1lZCBwYWNrZXRzCisgKglJbXBsZW1lbnRzIFJGQyA0MzQwLCA4LjU6ICBTdGVwIDE6IENoZWNrIGhlYWRlciBiYXNpY3MKKyAqCVBhY2tldHMgdGhhdCBmYWlsIHRoZXNlIGNoZWNrcyBhcmUgaWdub3JlZCBhbmQgZG8gbm90IHJlY2VpdmUgUmVzZXRzLgorICovCiBpbnQgZGNjcF9pbnZhbGlkX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGg7CisJdW5zaWduZWQgaW50IGNzY292OwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpCiAJCXJldHVybiAxOwogCisJLyogSWYgdGhlIHBhY2tldCBpcyBzaG9ydGVyIHRoYW4gMTIgYnl0ZXMsIGRyb3AgcGFja2V0IGFuZCByZXR1cm4gKi8KIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGRjY3BfaGRyKSkpIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJEQ0NQOiBwc2tiX21heV9wdWxsIGZhaWxlZFxuIik7CisJCURDQ1BfV0FSTigicHNrYl9tYXlfcHVsbCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlkaCA9IGRjY3BfaGRyKHNrYik7CiAKLQkvKiBJZiB0aGUgcGFja2V0IHR5cGUgaXMgbm90IHVuZGVyc3Rvb2QsIGRyb3AgcGFja2V0IGFuZCByZXR1cm4gKi8KKwkvKiBJZiBQLnR5cGUgaXMgbm90IHVuZGVyc3Rvb2QsIGRyb3AgcGFja2V0IGFuZCByZXR1cm4gKi8KIAlpZiAoZGgtPmRjY3BoX3R5cGUgPj0gRENDUF9QS1RfSU5WQUxJRCkgewotCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgIkRDQ1A6IGludmFsaWQgcGFja2V0IHR5cGVcbiIpOworCQlEQ0NQX1dBUk4oImludmFsaWQgcGFja2V0IHR5cGVcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKgotCSAqIElmIFAuRGF0YSBPZmZzZXQgaXMgdG9vIHNtYWxsIGZvciBwYWNrZXQgdHlwZSwgb3IgdG9vIGxhcmdlIGZvcgotCSAqIHBhY2tldCwgZHJvcCBwYWNrZXQgYW5kIHJldHVybgorCSAqIElmIFAuRGF0YSBPZmZzZXQgaXMgdG9vIHNtYWxsIGZvciBwYWNrZXQgdHlwZSwgZHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwogCWlmIChkaC0+ZGNjcGhfZG9mZiA8IGRjY3BfaGRyX2xlbihza2IpIC8gc2l6ZW9mKHUzMikpIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJEQ0NQOiBQLkRhdGEgT2Zmc2V0KCV1KSAiCi0JCQkJCSAgICAidG9vIHNtYWxsIDFcbiIsCi0JCQkgICAgICAgZGgtPmRjY3BoX2RvZmYpOworCQlEQ0NQX1dBUk4oIlAuRGF0YSBPZmZzZXQoJXUpIHRvbyBzbWFsbFxuIiwgZGgtPmRjY3BoX2RvZmYpOwogCQlyZXR1cm4gMTsKIAl9Ci0KKwkvKgorCSAqIElmIFAuRGF0YSBPZmZzZXQgaXMgdG9vIHRvbyBsYXJnZSBmb3IgcGFja2V0LCBkcm9wIHBhY2tldCBhbmQgcmV0dXJuCisJICovCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgZGgtPmRjY3BoX2RvZmYgKiBzaXplb2YodTMyKSkpIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJEQ0NQOiBQLkRhdGEgT2Zmc2V0KCV1KSAiCi0JCQkJCSAgICAidG9vIHNtYWxsIDJcbiIsCi0JCQkgICAgICAgZGgtPmRjY3BoX2RvZmYpOworCQlEQ0NQX1dBUk4oIlAuRGF0YSBPZmZzZXQoJXUpIHRvbyBsYXJnZVxuIiwgZGgtPmRjY3BoX2RvZmYpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlkaCA9IGRjY3BfaGRyKHNrYik7Ci0KIAkvKgogCSAqIElmIFAudHlwZSBpcyBub3QgRGF0YSwgQWNrLCBvciBEYXRhQWNrIGFuZCBQLlggPT0gMCAodGhlIHBhY2tldAogCSAqIGhhcyBzaG9ydCBzZXF1ZW5jZSBudW1iZXJzKSwgZHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwotCWlmIChkaC0+ZGNjcGhfeCA9PSAwICYmCi0JICAgIGRoLT5kY2NwaF90eXBlICE9IERDQ1BfUEtUX0RBVEEgJiYKLQkgICAgZGgtPmRjY3BoX3R5cGUgIT0gRENDUF9QS1RfQUNLICYmCi0JICAgIGRoLT5kY2NwaF90eXBlICE9IERDQ1BfUEtUX0RBVEFBQ0spIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJEQ0NQOiBQLnR5cGUgKCVzKSBub3QgRGF0YSwgQWNrICIKLQkJCQkJICAgICJub3IgRGF0YUFjayBhbmQgUC5YID09IDBcbiIsCi0JCQkgICAgICAgZGNjcF9wYWNrZXRfbmFtZShkaC0+ZGNjcGhfdHlwZSkpOworCWlmIChkaC0+ZGNjcGhfdHlwZSA+PSBEQ0NQX1BLVF9EQVRBICAgICYmCisJICAgIGRoLT5kY2NwaF90eXBlIDw9IERDQ1BfUEtUX0RBVEFBQ0sgJiYgZGgtPmRjY3BoX3ggPT0gMCkgIHsKKwkJRENDUF9XQVJOKCJQLnR5cGUgKCVzKSBub3QgRGF0YSB8fCBbRGF0YV1BY2ssIHdoaWxlIFAuWCA9PSAwXG4iLAorCQkJICBkY2NwX3BhY2tldF9uYW1lKGRoLT5kY2NwaF90eXBlKSk7CiAJCXJldHVybiAxOwogCX0KIAorCS8qCisJICogSWYgUC5Dc0NvdiBpcyB0b28gbGFyZ2UgZm9yIHRoZSBwYWNrZXQgc2l6ZSwgZHJvcCBwYWNrZXQgYW5kIHJldHVybi4KKwkgKiBUaGlzIG11c3QgY29tZSBfYmVmb3JlXyBjaGVja3N1bW1pbmcgKG5vdCBhcyBSRkMgNDM0MCBzdWdnZXN0cykuCisJICovCisJY3Njb3YgPSBkY2NwX2NzdW1fY292ZXJhZ2Uoc2tiKTsKKwlpZiAoY3Njb3YgPiBza2ItPmxlbikgeworCQlEQ0NQX1dBUk4oIlAuQ3NDb3YgJXUgZXhjZWVkcyBwYWNrZXQgbGVuZ3RoICVkXG4iLAorCQkJICBkaC0+ZGNjcGhfY3Njb3YsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogSWYgaGVhZGVyIGNoZWNrc3VtIGlzIGluY29ycmVjdCwgZHJvcCBwYWNrZXQgYW5kIHJldHVybi4KKwkgKiAoVGhpcyBzdGVwIGlzIGNvbXBsZXRlZCBpbiB0aGUgQUYtZGVwZW5kZW50IGZ1bmN0aW9ucy4pICovCisJc2tiLT5jc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgMCwgY3Njb3YsIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg4MywxNyArODEwLDE2IEBACiB7CiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaDsKIAlzdHJ1Y3Qgc29jayAqc2s7CisJaW50IG1pbl9jb3Y7CiAKLQkvKiBTdGVwIDE6IENoZWNrIGhlYWRlciBiYXNpY3M6ICovCisJLyogU3RlcCAxOiBDaGVjayBoZWFkZXIgYmFzaWNzICovCiAKIAlpZiAoZGNjcF9pbnZhbGlkX3BhY2tldChza2IpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKLQkvKiBJZiB0aGUgaGVhZGVyIGNoZWNrc3VtIGlzIGluY29ycmVjdCwgZHJvcCBwYWNrZXQgYW5kIHJldHVybiAqLwotCWlmIChkY2NwX3Y0X3ZlcmlmeV9jaGVja3N1bShza2IsIHNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkgICAgc2tiLT5uaC5pcGgtPmRhZGRyKSA8IDApIHsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogaW5jb3JyZWN0IGhlYWRlciBjaGVja3N1bVxuIiwKLQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCS8qIFN0ZXAgMTogSWYgaGVhZGVyIGNoZWNrc3VtIGlzIGluY29ycmVjdCwgZHJvcCBwYWNrZXQgYW5kIHJldHVybiAqLworCWlmIChkY2NwX3Y0X2NzdW1fZmluaXNoKHNrYiwgc2tiLT5uaC5pcGgtPnNhZGRyLCBza2ItPm5oLmlwaC0+ZGFkZHIpKSB7CisJCURDQ1BfV0FSTigiZHJvcHBlZCBwYWNrZXQgd2l0aCBpbnZhbGlkIGNoZWNrc3VtXG4iKTsKIAkJZ290byBkaXNjYXJkX2l0OwogCX0KIApAQCAtOTE1LDggKzg0MSw3IEBACiAJCWRjY3BfcHJfZGVidWdfY2F0KCJcbiIpOwogCX0gZWxzZSB7CiAJCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEgPSBkY2NwX2hkcl9hY2tfc2VxKHNrYik7Ci0JCWRjY3BfcHJfZGVidWdfY2F0KCIsIGFjaz0lbGx1XG4iLAotCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJZGNjcF9wcl9kZWJ1Z19jYXQoIiwgYWNrPSVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCiAJCQkJICBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxKTsKIAl9CiAKQEAgLTkzMCw4ICs4NTUsNiBAQAogCS8qIAogCSAqIFN0ZXAgMjoKIAkgKiAJSWYgbm8gc29ja2V0IC4uLgotCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0Ci0JICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KIAlpZiAoc2sgPT0gTlVMTCkgewogCQlkY2NwX3ByX2RlYnVnKCJmYWlsZWQgdG8gbG9vayB1cCBmbG93IElEIGluIHRhYmxlIGFuZCAiCkBAIC05NDUsNDUgKzg2OCw1NSBAQAogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CiAJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KLQkgICAgICAgCiAJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX1RJTUVfV0FJVCkgewotCQlkY2NwX3ByX2RlYnVnKCJzay0+c2tfc3RhdGUgPT0gRENDUF9USU1FX1dBSVQ6ICIKLQkJCSAgICAgICJkb190aW1lX3dhaXRcbiIpOwotICAgICAgICAgICAgICAgIGdvdG8gZG9fdGltZV93YWl0OworCQlkY2NwX3ByX2RlYnVnKCJzay0+c2tfc3RhdGUgPT0gRENDUF9USU1FX1dBSVQ6IGRvX3RpbWVfd2FpdFxuIik7CisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJCWdvdG8gbm9fZGNjcF9zb2NrZXQ7CisJfQorCisJLyoKKwkgKiBSRkMgNDM0MCwgc2VjLiA5LjIuMTogTWluaW11bSBDaGVja3N1bSBDb3ZlcmFnZQorCSAqIAlvIGlmIE1pbkNzQ292ID0gMCwgb25seSBwYWNrZXRzIHdpdGggQ3NDb3YgPSAwIGFyZSBhY2NlcHRlZAorCSAqIAlvIGlmIE1pbkNzQ292ID4gMCwgYWxzbyBhY2NlcHQgcGFja2V0cyB3aXRoIENzQ292ID49IE1pbkNzQ292CisJICovCisJbWluX2NvdiA9IGRjY3Bfc2soc2spLT5kY2Nwc19wY3JsZW47CisJaWYgKGRoLT5kY2NwaF9jc2NvdiAmJiAobWluX2NvdiA9PSAwIHx8IGRoLT5kY2NwaF9jc2NvdiA8IG1pbl9jb3YpKSAgeworCQlkY2NwX3ByX2RlYnVnKCJQYWNrZXQgQ3NDb3YgJWQgZG9lcyBub3Qgc2F0aXNmeSBNaW5Dc0NvdiAlZFxuIiwKKwkJCSAgICAgIGRoLT5kY2NwaF9jc2NvdiwgbWluX2Nvdik7CisJCS8qIEZJWE1FOiAiU3VjaCBwYWNrZXRzIFNIT1VMRCBiZSByZXBvcnRlZCB1c2luZyBEYXRhIERyb3BwZWQKKwkJICogICAgICAgICBvcHRpb25zIChTZWN0aW9uIDExLjcpIHdpdGggRHJvcCBDb2RlIDAsIFByb3RvY29sCisJCSAqICAgICAgICAgQ29uc3RyYWludHMuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQlnb3RvIGRpc2NhcmRfYW5kX3JlbHNlOwogCX0KIAogCWlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKIAkJZ290byBkaXNjYXJkX2FuZF9yZWxzZTsKIAluZl9yZXNldChza2IpOwogCi0JcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IpOworCXJldHVybiBza19yZWNlaXZlX3NrYihzaywgc2tiLCAxKTsKIAogbm9fZGNjcF9zb2NrZXQ6CiAJaWYgKCF4ZnJtNF9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCiAJCWdvdG8gZGlzY2FyZF9pdDsKIAkvKgogCSAqIFN0ZXAgMjoKKwkgKiAJSWYgbm8gc29ja2V0IC4uLgogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CiAJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KIAlpZiAoZGgtPmRjY3BoX3R5cGUgIT0gRENDUF9QS1RfUkVTRVQpIHsKIAkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfcmVzZXRfY29kZSA9CiAJCQkJCURDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOwotCQlkY2NwX3Y0X2N0bF9zZW5kX3Jlc2V0KHNrYik7CisJCWRjY3BfdjRfY3RsX3NlbmRfcmVzZXQoc2ssIHNrYik7CiAJfQogCiBkaXNjYXJkX2l0OgotCS8qIERpc2NhcmQgZnJhbWUuICovCiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiAKIGRpc2NhcmRfYW5kX3JlbHNlOgogCXNvY2tfcHV0KHNrKTsKIAlnb3RvIGRpc2NhcmRfaXQ7Ci0KLWRvX3RpbWVfd2FpdDoKLQlpbmV0X3R3c2tfcHV0KGluZXRfdHdzayhzaykpOwotCWdvdG8gbm9fZGNjcF9zb2NrZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2NF9hZl9vcHMgPSB7CkBAIC0xMDE3LDIwICs5NTAsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGRjY3BfdjRfcmVxc2tfZGVzdHJ1Y3RvcihzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCi17Ci0Ja2ZyZWUoaW5ldF9yc2socmVxKS0+b3B0KTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIGRjY3BfcmVxdWVzdF9zb2NrX29wcyA9IHsKLQkuZmFtaWx5CQk9IFBGX0lORVQsCi0JLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayksCi0JLnJ0eF9zeW5fYWNrCT0gZGNjcF92NF9zZW5kX3Jlc3BvbnNlLAotCS5zZW5kX2Fjawk9IGRjY3BfdjRfcmVxc2tfc2VuZF9hY2ssCi0JLmRlc3RydWN0b3IJPSBkY2NwX3Y0X3JlcXNrX2Rlc3RydWN0b3IsCi0JLnNlbmRfcmVzZXQJPSBkY2NwX3Y0X2N0bF9zZW5kX3Jlc2V0LAotfTsKLQogc3RhdGljIHN0cnVjdCB0aW1ld2FpdF9zb2NrX29wcyBkY2NwX3RpbWV3YWl0X3NvY2tfb3BzID0gewogCS50d3NrX29ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2spLAogfTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBmYzQyNDJjLi5jN2FhYTI1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0zNiwxMyArMzYsNiBAQAogLyogU29ja2V0IHVzZWQgZm9yIHNlbmRpbmcgUlNUcyBhbmQgQUNLcyAqLwogc3RhdGljIHN0cnVjdCBzb2NrZXQgKmRjY3BfdjZfY3RsX3NvY2tldDsKIAotc3RhdGljIHZvaWQgZGNjcF92Nl9jdGxfc2VuZF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyB2b2lkIGRjY3BfdjZfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwotc3RhdGljIHZvaWQgZGNjcF92Nl9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLXN0YXRpYyBpbnQgZGNjcF92Nl9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQogc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgZGNjcF9pcHY2X21hcHBlZDsKIHN0YXRpYyBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzIGRjY3BfaXB2Nl9hZl9vcHM7CiAKQEAgLTY1LDIwNSArNTgsMzcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IGRjY3BfdjZfY2hlY2soc3RydWN0IGRjY3BfaGRyICpkaCwgaW50IGxlbiwKLQkJCQlzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAotCQkJCXN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkJdW5zaWduZWQgbG9uZyBiYXNlKQorLyogYWRkIHBzZXVkby1oZWFkZXIgdG8gRENDUCBjaGVja3N1bSBzdG9yZWQgaW4gc2tiLT5jc3VtICovCitzdGF0aWMgaW5saW5lIF9fc3VtMTYgZGNjcF92Nl9jc3VtX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkJICAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkcikKIHsKLQlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX0RDQ1AsIGJhc2UpOworCXJldHVybiBjc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCBza2ItPmxlbiwgSVBQUk9UT19EQ0NQLCBza2ItPmNzdW0pOwogfQogCi1zdGF0aWMgX191MzIgZGNjcF92Nl9pbml0X3NlcXVlbmNlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgdW51c2VkX3ZhbHVlLAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCA9IGRjY3BfaGRyKHNrYik7Ci0KLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKLQkJcmV0dXJuIHNlY3VyZV90Y3B2Nl9zZXF1ZW5jZV9udW1iZXIoc2tiLT5uaC5pcHY2aC0+ZGFkZHIuczZfYWRkcjMyLAotCQkJCQkJICAgIHNrYi0+bmguaXB2NmgtPnNhZGRyLnM2X2FkZHIzMiwKLQkJCQkJCSAgICBkaC0+ZGNjcGhfZHBvcnQsCi0JCQkJCQkgICAgZGgtPmRjY3BoX3Nwb3J0KTsKLQotCXJldHVybiBzZWN1cmVfZGNjcF9zZXF1ZW5jZV9udW1iZXIoc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCQkgICBza2ItPm5oLmlwaC0+c2FkZHIsCi0JCQkJCSAgIGRoLT5kY2NwaF9kcG9ydCwKLQkJCQkJICAgZGgtPmRjY3BoX3Nwb3J0KTsKLX0KLQotc3RhdGljIGludCBkY2NwX3Y2X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAotCQkJICAgaW50IGFkZHJfbGVuKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXVhZGRyOwotCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0Jc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEwsICpmaW5hbF9wID0gTlVMTCwgZmluYWw7Ci0Jc3RydWN0IGZsb3dpIGZsOwotCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKLQlpbnQgYWRkcl90eXBlOwotCWludCBlcnI7CisJc3RydWN0IGRjY3BfaGRyICpkaCA9IGRjY3BfaGRyKHNrYik7CiAKLQlkcC0+ZGNjcHNfcm9sZSA9IERDQ1BfUk9MRV9DTElFTlQ7CisJZGNjcF9jc3VtX291dGdvaW5nKHNrYik7CisJZGgtPmRjY3BoX2NoZWNrc3VtID0gZGNjcF92Nl9jc3VtX2ZpbmlzaChza2IsICZucC0+c2FkZHIsICZucC0+ZGFkZHIpOworfQogCi0JaWYgKGFkZHJfbGVuIDwgU0lONl9MRU5fUkZDMjEzMykKLQkJcmV0dXJuIC1FSU5WQUw7CitzdGF0aWMgaW5saW5lIF9fdTMyIHNlY3VyZV9kY2NwdjZfc2VxdWVuY2VfbnVtYmVyKF9fYmUzMiAqc2FkZHIsIF9fYmUzMiAqZGFkZHIsCisJCQkJICAgCQkgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0ICAgKQoreworCXJldHVybiBzZWN1cmVfdGNwdjZfc2VxdWVuY2VfbnVtYmVyKHNhZGRyLCBkYWRkciwgc3BvcnQsIGRwb3J0KTsKK30KIAotCWlmICh1c2luLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikKLQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CitzdGF0aWMgaW5saW5lIF9fdTMyIGRjY3BfdjZfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBzZWN1cmVfZGNjcHY2X3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwdjZoLT5kYWRkci5zNl9hZGRyMzIsCisJCQkJCSAgICAgc2tiLT5uaC5pcHY2aC0+c2FkZHIuczZfYWRkcjMyLAorCQkJCQkgICAgIGRjY3BfaGRyKHNrYiktPmRjY3BoX2Rwb3J0LAorCQkJCQkgICAgIGRjY3BfaGRyKHNrYiktPmRjY3BoX3Nwb3J0ICAgICApOwogCi0JbWVtc2V0KCZmbCwgMCwgc2l6ZW9mKGZsKSk7Ci0KLQlpZiAobnAtPnNuZGZsb3cpIHsKLQkJZmwuZmw2X2Zsb3dsYWJlbCA9IHVzaW4tPnNpbjZfZmxvd2luZm8gJiBJUFY2X0ZMT1dJTkZPX01BU0s7Ci0JCUlQNl9FQ05fZmxvd19pbml0KGZsLmZsNl9mbG93bGFiZWwpOwotCQlpZiAoZmwuZmw2X2Zsb3dsYWJlbCAmIElQVjZfRkxPV0xBQkVMX01BU0spIHsKLQkJCXN0cnVjdCBpcDZfZmxvd2xhYmVsICpmbG93bGFiZWw7Ci0JCQlmbG93bGFiZWwgPSBmbDZfc29ja19sb29rdXAoc2ssIGZsLmZsNl9mbG93bGFiZWwpOwotCQkJaWYgKGZsb3dsYWJlbCA9PSBOVUxMKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaXB2Nl9hZGRyX2NvcHkoJnVzaW4tPnNpbjZfYWRkciwgJmZsb3dsYWJlbC0+ZHN0KTsKLQkJCWZsNl9zb2NrX3JlbGVhc2UoZmxvd2xhYmVsKTsKLQkJfQotCX0KLQkvKgotCSAqIGNvbm5lY3QoKSB0byBJTkFERFJfQU5ZIG1lYW5zIGxvb3BiYWNrIChCU0QnaXNtKS4KLQkgKi8KLQlpZiAoaXB2Nl9hZGRyX2FueSgmdXNpbi0+c2luNl9hZGRyKSkKLQkJdXNpbi0+c2luNl9hZGRyLnM2X2FkZHJbMTVdID0gMTsKLQotCWFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKCZ1c2luLT5zaW42X2FkZHIpOwotCi0JaWYgKGFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QpCi0JCXJldHVybiAtRU5FVFVOUkVBQ0g7Ci0KLQlpZiAoYWRkcl90eXBlICYgSVBWNl9BRERSX0xJTktMT0NBTCkgewotCQlpZiAoYWRkcl9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpICYmCi0JCSAgICB1c2luLT5zaW42X3Njb3BlX2lkKSB7Ci0JCQkvKiBJZiBpbnRlcmZhY2UgaXMgc2V0IHdoaWxlIGJpbmRpbmcsIGluZGljZXMKLQkJCSAqIG11c3QgY29pbmNpZGUuCi0JCQkgKi8KLQkJCWlmIChzay0+c2tfYm91bmRfZGV2X2lmICYmCi0JCQkgICAgc2stPnNrX2JvdW5kX2Rldl9pZiAhPSB1c2luLT5zaW42X3Njb3BlX2lkKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQlzay0+c2tfYm91bmRfZGV2X2lmID0gdXNpbi0+c2luNl9zY29wZV9pZDsKLQkJfQotCi0JCS8qIENvbm5lY3QgdG8gbGluay1sb2NhbCBhZGRyZXNzIHJlcXVpcmVzIGFuIGludGVyZmFjZSAqLwotCQlpZiAoIXNrLT5za19ib3VuZF9kZXZfaWYpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpcHY2X2FkZHJfY29weSgmbnAtPmRhZGRyLCAmdXNpbi0+c2luNl9hZGRyKTsKLQlucC0+Zmxvd19sYWJlbCA9IGZsLmZsNl9mbG93bGFiZWw7Ci0KLQkvKgotCSAqIERDQ1Agb3ZlciBJUHY0Ci0JICovCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEKSB7Ci0JCXUzMiBleHRoZHJsZW4gPSBpY3NrLT5pY3NrX2V4dF9oZHJfbGVuOwotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotCi0JCVNPQ0tfREVCVUcoc2ssICJjb25uZWN0OiBpcHY0IG1hcHBlZFxuIik7Ci0KLQkJaWYgKF9faXB2Nl9vbmx5X3NvY2soc2spKQotCQkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKLQotCQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXNpbi5zaW5fcG9ydCA9IHVzaW4tPnNpbjZfcG9ydDsKLQkJc2luLnNpbl9hZGRyLnNfYWRkciA9IHVzaW4tPnNpbjZfYWRkci5zNl9hZGRyMzJbM107Ci0KLQkJaWNzay0+aWNza19hZl9vcHMgPSAmZGNjcF9pcHY2X21hcHBlZDsKLQkJc2stPnNrX2JhY2tsb2dfcmN2ID0gZGNjcF92NF9kb19yY3Y7Ci0KLQkJZXJyID0gZGNjcF92NF9jb25uZWN0KHNrLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHNpbikpOwotCQlpZiAoZXJyKSB7Ci0JCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gZXh0aGRybGVuOwotCQkJaWNzay0+aWNza19hZl9vcHMgPSAmZGNjcF9pcHY2X2FmX29wczsKLQkJCXNrLT5za19iYWNrbG9nX3JjdiA9IGRjY3BfdjZfZG9fcmN2OwotCQkJZ290byBmYWlsdXJlOwotCQl9IGVsc2UgewotCQkJaXB2Nl9hZGRyX3NldCgmbnAtPnNhZGRyLCAwLCAwLCBodG9ubCgweDAwMDBGRkZGKSwKLQkJCQkgICAgICBpbmV0LT5zYWRkcik7Ci0JCQlpcHY2X2FkZHJfc2V0KCZucC0+cmN2X3NhZGRyLCAwLCAwLCBodG9ubCgweDAwMDBGRkZGKSwKLQkJCQkgICAgICBpbmV0LT5yY3Zfc2FkZHIpOwotCQl9Ci0KLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAoIWlwdjZfYWRkcl9hbnkoJm5wLT5yY3Zfc2FkZHIpKQotCQlzYWRkciA9ICZucC0+cmN2X3NhZGRyOwotCi0JZmwucHJvdG8gPSBJUFBST1RPX0RDQ1A7Ci0JaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsICZucC0+ZGFkZHIpOwotCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCBzYWRkciA/IHNhZGRyIDogJm5wLT5zYWRkcik7Ci0JZmwub2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKLQlmbC5mbF9pcF9kcG9ydCA9IHVzaW4tPnNpbjZfcG9ydDsKLQlmbC5mbF9pcF9zcG9ydCA9IGluZXQtPnNwb3J0OwotCXNlY3VyaXR5X3NrX2NsYXNzaWZ5X2Zsb3coc2ssICZmbCk7Ci0KLQlpZiAobnAtPm9wdCAhPSBOVUxMICYmIG5wLT5vcHQtPnNyY3J0ICE9IE5VTEwpIHsKLQkJY29uc3Qgc3RydWN0IHJ0MF9oZHIgKnJ0MCA9IChzdHJ1Y3QgcnQwX2hkciAqKW5wLT5vcHQtPnNyY3J0OwotCi0JCWlwdjZfYWRkcl9jb3B5KCZmaW5hbCwgJmZsLmZsNl9kc3QpOwotCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgcnQwLT5hZGRyKTsKLQkJZmluYWxfcCA9ICZmaW5hbDsKLQl9Ci0KLQllcnIgPSBpcDZfZHN0X2xvb2t1cChzaywgJmRzdCwgJmZsKTsKLQlpZiAoZXJyKQotCQlnb3RvIGZhaWx1cmU7Ci0KLQlpZiAoZmluYWxfcCkKLQkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9kc3QsIGZpbmFsX3ApOwotCi0JZXJyID0geGZybV9sb29rdXAoJmRzdCwgJmZsLCBzaywgMCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZmFpbHVyZTsKLQotCWlmIChzYWRkciA9PSBOVUxMKSB7Ci0JCXNhZGRyID0gJmZsLmZsNl9zcmM7Ci0JCWlwdjZfYWRkcl9jb3B5KCZucC0+cmN2X3NhZGRyLCBzYWRkcik7Ci0JfQotCi0JLyogc2V0IHRoZSBzb3VyY2UgYWRkcmVzcyAqLwotCWlwdjZfYWRkcl9jb3B5KCZucC0+c2FkZHIsIHNhZGRyKTsKLQlpbmV0LT5yY3Zfc2FkZHIgPSBMT09QQkFDSzRfSVBWNjsKLQotCV9faXA2X2RzdF9zdG9yZShzaywgZHN0LCBOVUxMLCBOVUxMKTsKLQotCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSAwOwotCWlmIChucC0+b3B0ICE9IE5VTEwpCi0JCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSAobnAtPm9wdC0+b3B0X2ZsZW4gKwotCQkJCQkgIG5wLT5vcHQtPm9wdF9uZmxlbik7Ci0KLQlpbmV0LT5kcG9ydCA9IHVzaW4tPnNpbjZfcG9ydDsKLQotCWRjY3Bfc2V0X3N0YXRlKHNrLCBEQ0NQX1JFUVVFU1RJTkcpOwotCWVyciA9IGluZXQ2X2hhc2hfY29ubmVjdCgmZGNjcF9kZWF0aF9yb3csIHNrKTsKLQlpZiAoZXJyKQotCQlnb3RvIGxhdGVfZmFpbHVyZTsKLQkvKiBGSVhNRSAqLwotI2lmIDAKLQlkcC0+ZGNjcHNfZ2FyID0gc2VjdXJlX2RjY3BfdjZfc2VxdWVuY2VfbnVtYmVyKG5wLT5zYWRkci5zNl9hZGRyMzIsCi0JCQkJCQkgICAgICAgbnAtPmRhZGRyLnM2X2FkZHIzMiwKLQkJCQkJCSAgICAgICBpbmV0LT5zcG9ydCwKLQkJCQkJCSAgICAgICBpbmV0LT5kcG9ydCk7Ci0jZW5kaWYKLQllcnIgPSBkY2NwX2Nvbm5lY3Qoc2spOwotCWlmIChlcnIpCi0JCWdvdG8gbGF0ZV9mYWlsdXJlOwotCi0JcmV0dXJuIDA7Ci0KLWxhdGVfZmFpbHVyZToKLQlkY2NwX3NldF9zdGF0ZShzaywgRENDUF9DTE9TRUQpOwotCV9fc2tfZHN0X3Jlc2V0KHNrKTsKLWZhaWx1cmU6Ci0JaW5ldC0+ZHBvcnQgPSAwOwotCXNrLT5za19yb3V0ZV9jYXBzID0gMDsKLQlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBkY2NwX3Y2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKQEAgLTQ2NCwxNiArMjg5LDEyIEBACiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCXN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwogCi0JCWRoLT5kY2NwaF9jaGVja3N1bSA9IGRjY3BfdjZfY2hlY2soZGgsIHNrYi0+bGVuLAotCQkJCQkJICAgJmlyZXE2LT5sb2NfYWRkciwKLQkJCQkJCSAgICZpcmVxNi0+cm10X2FkZHIsCi0JCQkJCQkgICBjc3VtX3BhcnRpYWwoKGNoYXIgKilkaCwKLQkJCQkJCQkJc2tiLT5sZW4sCi0JCQkJCQkJCXNrYi0+Y3N1bSkpOworCQlkaC0+ZGNjcGhfY2hlY2tzdW0gPSBkY2NwX3Y2X2NzdW1fZmluaXNoKHNrYiwKKwkJCQkJCQkgJmlyZXE2LT5sb2NfYWRkciwKKwkJCQkJCQkgJmlyZXE2LT5ybXRfYWRkcik7CiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmaXJlcTYtPnJtdF9hZGRyKTsKIAkJZXJyID0gaXA2X3htaXQoc2ssIHNrYiwgJmZsLCBvcHQsIDApOwotCQlpZiAoZXJyID09IE5FVF9YTUlUX0NOKQotCQkJZXJyID0gMDsKKwkJZXJyID0gbmV0X3htaXRfZXZhbChlcnIpOwogCX0KIAogZG9uZToKQEAgLTQ4OSwzMiArMzEwLDcgQEAKIAkJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIGRjY3A2X3JlcXVlc3Rfc29ja19vcHMgPSB7Ci0JLmZhbWlseQkJPSBBRl9JTkVUNiwKLQkub2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGRjY3A2X3JlcXVlc3Rfc29jayksCi0JLnJ0eF9zeW5fYWNrCT0gZGNjcF92Nl9zZW5kX3Jlc3BvbnNlLAotCS5zZW5kX2Fjawk9IGRjY3BfdjZfcmVxc2tfc2VuZF9hY2ssCi0JLmRlc3RydWN0b3IJPSBkY2NwX3Y2X3JlcXNrX2Rlc3RydWN0b3IsCi0JLnNlbmRfcmVzZXQJPSBkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0LAotfTsKLQotc3RhdGljIHN0cnVjdCB0aW1ld2FpdF9zb2NrX29wcyBkY2NwNl90aW1ld2FpdF9zb2NrX29wcyA9IHsKLQkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZGNjcDZfdGltZXdhaXRfc29jayksCi19OwotCi1zdGF0aWMgdm9pZCBkY2NwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKLQlzdHJ1Y3QgZGNjcF9oZHIgKmRoID0gZGNjcF9oZHIoc2tiKTsKLQotCWRoLT5kY2NwaF9jaGVja3N1bSA9IGNzdW1faXB2Nl9tYWdpYygmbnAtPnNhZGRyLCAmbnAtPmRhZGRyLAotCQkJCQkgICAgIGxlbiwgSVBQUk9UT19EQ0NQLAotCQkJCQkgICAgIGNzdW1fcGFydGlhbCgoY2hhciAqKWRoLAotCQkJCQkJCSAgZGgtPmRjY3BoX2RvZmYgPDwgMiwKLQkJCQkJCQkgIHNrYi0+Y3N1bSkpOwotfQotCi1zdGF0aWMgdm9pZCBkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHN0cnVjdCBza19idWZmICpyeHNrYikKK3N0YXRpYyB2b2lkIGRjY3BfdjZfY3RsX3NlbmRfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqcnhza2IpCiB7CiAJc3RydWN0IGRjY3BfaGRyICpyeGRoID0gZGNjcF9oZHIocnhza2IpLCAqZGg7CiAJY29uc3QgdTMyIGRjY3BfaGRyX3Jlc2V0X2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKQEAgLTUyMiw3ICszMTgsNyBAQAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX3Jlc2V0KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBmbG93aSBmbDsKLQl1NjQgc2Vxbm87CisJdTY0IHNlcW5vID0gMDsKIAogCWlmIChyeGRoLT5kY2NwaF90eXBlID09IERDQ1BfUEtUX1JFU0VUKQogCQlyZXR1cm47CkBAIC01MzcsOSArMzMzLDcgQEAKIAogCXNrYl9yZXNlcnZlKHNrYiwgZGNjcF92Nl9jdGxfc29ja2V0LT5zay0+c2tfcHJvdC0+bWF4X2hlYWRlcik7CiAKLQlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hkcl9yZXNldF9sZW4pOwotCWRoID0gZGNjcF9oZHIoc2tiKTsKLQltZW1zZXQoZGgsIDAsIGRjY3BfaGRyX3Jlc2V0X2xlbik7CisJZGggPSBkY2NwX3plcm9lZF9oZHIoc2tiLCBkY2NwX2hkcl9yZXNldF9sZW4pOwogCiAJLyogU3dhcCB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUuICovCiAJZGgtPmRjY3BoX3R5cGUJPSBEQ0NQX1BLVF9SRVNFVDsKQEAgLTU1MSwyMCArMzQ1LDIwIEBACiAJCQkJRENDUF9TS0JfQ0Iocnhza2IpLT5kY2NwZF9yZXNldF9jb2RlOwogCiAJLyogU2VlICI4LjMuMS4gQWJub3JtYWwgVGVybWluYXRpb24iIGluIFJGQyA0MzQwICovCi0Jc2Vxbm8gPSAwOwogCWlmIChEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX2Fja19zZXEgIT0gRENDUF9QS1RfV0lUSE9VVF9BQ0tfU0VRKQogCQlkY2NwX3NldF9zZXFubygmc2Vxbm8sIERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfYWNrX3NlcSArIDEpOwogCiAJZGNjcF9oZHJfc2V0X3NlcShkaCwgc2Vxbm8pOwotCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwKLQkJCSBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3NlcSk7CisJZGNjcF9oZHJfc2V0X2FjayhkY2NwX2hkcl9hY2tfYml0cyhza2IpLCBEQ0NQX1NLQl9DQihyeHNrYiktPmRjY3BkX3NlcSk7CisKKwlkY2NwX2NzdW1fb3V0Z29pbmcoc2tiKTsKKwlkaC0+ZGNjcGhfY2hlY2tzdW0gPSBkY2NwX3Y2X2NzdW1fZmluaXNoKHNrYiwgJnJ4c2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJICAgCQkgICAgICAmcnhza2ItPm5oLmlwdjZoLT5kYWRkcik7CiAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKIAlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJnJ4c2tiLT5uaC5pcHY2aC0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfc3JjLCAmcnhza2ItPm5oLmlwdjZoLT5kYWRkcik7Ci0JZGgtPmRjY3BoX2NoZWNrc3VtID0gY3N1bV9pcHY2X21hZ2ljKCZmbC5mbDZfc3JjLCAmZmwuZmw2X2RzdCwKLQkJCQkJICAgICBzaXplb2YoKmRoKSwgSVBQUk9UT19EQ0NQLAotCQkJCQkgICAgIHNrYi0+Y3N1bSk7CisKIAlmbC5wcm90byA9IElQUFJPVE9fRENDUDsKIAlmbC5vaWYgPSBpbmV0Nl9paWYocnhza2IpOwogCWZsLmZsX2lwX2Rwb3J0ID0gZGgtPmRjY3BoX2Rwb3J0OwpAQCAtNTg0LDYwICszNzgsMTQgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgZGNjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqcnhza2IsCi0JCQkJICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQotewotCXN0cnVjdCBmbG93aSBmbDsKLQlzdHJ1Y3QgZGNjcF9oZHIgKnJ4ZGggPSBkY2NwX2hkcihyeHNrYiksICpkaDsKLQljb25zdCB1MzIgZGNjcF9oZHJfYWNrX2xlbiA9IHNpemVvZihzdHJ1Y3QgZGNjcF9oZHIpICsKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3QgZGNjcF9oZHJfZXh0KSArCi0JCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiID0gYWxsb2Nfc2tiKGRjY3BfdjZfY3RsX3NvY2tldC0+c2stPnNrX3Byb3QtPm1heF9oZWFkZXIsCi0JCQlHRlBfQVRPTUlDKTsKLQlpZiAoc2tiID09IE5VTEwpCi0JCXJldHVybjsKLQotCXNrYl9yZXNlcnZlKHNrYiwgZGNjcF92Nl9jdGxfc29ja2V0LT5zay0+c2tfcHJvdC0+bWF4X2hlYWRlcik7Ci0KLQlza2ItPmgucmF3ID0gc2tiX3B1c2goc2tiLCBkY2NwX2hkcl9hY2tfbGVuKTsKLQlkaCA9IGRjY3BfaGRyKHNrYik7Ci0JbWVtc2V0KGRoLCAwLCBkY2NwX2hkcl9hY2tfbGVuKTsKLQotCS8qIEJ1aWxkIERDQ1AgaGVhZGVyIGFuZCBjaGVja3N1bSBpdC4gKi8KLQlkaC0+ZGNjcGhfdHlwZQk9IERDQ1BfUEtUX0FDSzsKLQlkaC0+ZGNjcGhfc3BvcnQgPSByeGRoLT5kY2NwaF9kcG9ydDsKLQlkaC0+ZGNjcGhfZHBvcnQgPSByeGRoLT5kY2NwaF9zcG9ydDsKLQlkaC0+ZGNjcGhfZG9mZgk9IGRjY3BfaGRyX2Fja19sZW4gLyA0OwotCWRoLT5kY2NwaF94CT0gMTsKLQotCWRjY3BfaGRyX3NldF9zZXEoZGgsIERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfYWNrX3NlcSk7Ci0JZGNjcF9oZHJfc2V0X2FjayhkY2NwX2hkcl9hY2tfYml0cyhza2IpLAotCQkJIERDQ1BfU0tCX0NCKHJ4c2tiKS0+ZGNjcGRfc2VxKTsKLQotCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwotCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmcnhza2ItPm5oLmlwdjZoLT5zYWRkcik7Ci0JaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZyeHNrYi0+bmguaXB2NmgtPmRhZGRyKTsKLQotCS8qIEZJWE1FOiBjYWxjdWxhdGUgY2hlY2tzdW0sIElQdjQgYWxzbyBzaG91bGQuLi4gKi8KLQotCWZsLnByb3RvID0gSVBQUk9UT19EQ0NQOwotCWZsLm9pZiA9IGluZXQ2X2lpZihyeHNrYik7Ci0JZmwuZmxfaXBfZHBvcnQgPSBkaC0+ZGNjcGhfZHBvcnQ7Ci0JZmwuZmxfaXBfc3BvcnQgPSBkaC0+ZGNjcGhfc3BvcnQ7Ci0Jc2VjdXJpdHlfcmVxX2NsYXNzaWZ5X2Zsb3cocmVxLCAmZmwpOwotCi0JaWYgKCFpcDZfZHN0X2xvb2t1cChOVUxMLCAmc2tiLT5kc3QsICZmbCkpIHsKLQkJaWYgKHhmcm1fbG9va3VwKCZza2ItPmRzdCwgJmZsLCBOVUxMLCAwKSA+PSAwKSB7Ci0JCQlpcDZfeG1pdChkY2NwX3Y2X2N0bF9zb2NrZXQtPnNrLCBza2IsICZmbCwgTlVMTCwgMCk7Ci0JCQlEQ0NQX0lOQ19TVEFUU19CSChEQ0NQX01JQl9PVVRTRUdTKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCWtmcmVlX3NrYihza2IpOwotfQorc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIGRjY3A2X3JlcXVlc3Rfc29ja19vcHMgPSB7CisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkub2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGRjY3A2X3JlcXVlc3Rfc29jayksCisJLnJ0eF9zeW5fYWNrCT0gZGNjcF92Nl9zZW5kX3Jlc3BvbnNlLAorCS5zZW5kX2Fjawk9IGRjY3BfcmVxc2tfc2VuZF9hY2ssCisJLmRlc3RydWN0b3IJPSBkY2NwX3Y2X3JlcXNrX2Rlc3RydWN0b3IsCisJLnNlbmRfcmVzZXQJPSBkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0LAorfTsKIAogc3RhdGljIHN0cnVjdCBzb2NrICpkY2NwX3Y2X2huZF9yZXEoc3RydWN0IHNvY2sgKnNrLHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC02NzIsNyArNDIwLDYgQEAKIAogc3RhdGljIGludCBkY2NwX3Y2X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGRjY3Bfc29jayBkcDsKIAlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXE7CiAJc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICpkcmVxOwogCXN0cnVjdCBpbmV0Nl9yZXF1ZXN0X3NvY2sgKmlyZXE2OwpAQCAtNzA0LDkgKzQ1MSwxMCBAQAogCWlmIChyZXEgPT0gTlVMTCkKIAkJZ290byBkcm9wOwogCi0JLyogRklYTUU6IHByb2Nlc3Mgb3B0aW9ucyAqLworCWlmIChkY2NwX3BhcnNlX29wdGlvbnMoc2ssIHNrYikpCisJCWdvdG8gZHJvcF9hbmRfZnJlZTsKIAotCWRjY3Bfb3BlbnJlcV9pbml0KHJlcSwgJmRwLCBza2IpOworCWRjY3BfcmVxc2tfaW5pdChyZXEsIHNrYik7CiAKIAlpZiAoc2VjdXJpdHlfaW5ldF9jb25uX3JlcXVlc3Qoc2ssIHNrYiwgcmVxKSkKIAkJZ290byBkcm9wX2FuZF9mcmVlOwpAQCAtNzE0LDcgKzQ2Miw2IEBACiAJaXJlcTYgPSBpbmV0Nl9yc2socmVxKTsKIAlpcHY2X2FkZHJfY29weSgmaXJlcTYtPnJtdF9hZGRyLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcmVxNi0+bG9jX2FkZHIsICZza2ItPm5oLmlwdjZoLT5kYWRkcik7Ci0JcmVxLT5yY3Zfd25kCT0gZGNjcF9mZWF0X2RlZmF1bHRfc2VxdWVuY2Vfd2luZG93OwogCWlyZXE2LT5wa3RvcHRzCT0gTlVMTDsKIAogCWlmIChpcHY2X29wdF9hY2NlcHRlZChzaywgc2tiKSB8fApAQCAtNzMzLDE0ICs0ODAsMTQgQEAKIAkvKgogCSAqIFN0ZXAgMzogUHJvY2VzcyBMSVNURU4gc3RhdGUKIAkgKgotCSAqIFNldCBTLklTUiwgUy5HU1IsIFMuU1dMLCBTLlNXSCBmcm9tIHBhY2tldCBvciBJbml0IENvb2tpZQorCSAqICAgU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llCiAJICoKLQkgKiBJbiBmYWN0IHdlIGRlZmVyIHNldHRpbmcgUy5HU1IsIFMuU1dMLCBTLlNXSCB0bwotCSAqIGRjY3BfY3JlYXRlX29wZW5yZXFfY2hpbGQuCisJICogICBJbiBmYWN0IHdlIGRlZmVyIHNldHRpbmcgUy5HU1IsIFMuU1dMLCBTLlNXSCB0bworCSAqICAgZGNjcF9jcmVhdGVfb3BlbnJlcV9jaGlsZC4KIAkgKi8KIAlkcmVxID0gZGNjcF9yc2socmVxKTsKIAlkcmVxLT5kcmVxX2lzcgkgICA9IGRjYi0+ZGNjcGRfc2VxOwotCWRyZXEtPmRyZXFfaXNzCSAgID0gZGNjcF92Nl9pbml0X3NlcXVlbmNlKHNrLCBza2IpOworCWRyZXEtPmRyZXFfaXNzCSAgID0gZGNjcF92Nl9pbml0X3NlcXVlbmNlKHNrYik7CiAJZHJlcS0+ZHJlcV9zZXJ2aWNlID0gc2VydmljZTsKIAogCWlmIChkY2NwX3Y2X3NlbmRfcmVzcG9uc2Uoc2ssIHJlcSwgTlVMTCkpCkBAIC05OTAsMTggKzczNyw0NiBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tQU5LICg5ODA3MjgpCiAJICovCiAJaWYgKG5wLT5yeG9wdC5hbGwpCisJLyoKKwkgKiBGSVhNRTogQWRkIGhhbmRsaW5nIG9mIElQVjZfUEtUT1BUSU9OUyBza2IuIFNlZSB0aGUgY29tbWVudHMgYmVsb3cKKwkgKiAgICAgICAgKHdydCBpcHY2X3BrdG9waW9ucykgYW5kIG5ldC9pcHY2L3RjcF9pcHY2LmMgZm9yIGFuIGV4YW1wbGUuCisJICovCiAJCW9wdF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAogCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9PUEVOKSB7IC8qIEZhc3QgcGF0aCAqLwogCQlpZiAoZGNjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgZGNjcF9oZHIoc2tiKSwgc2tiLT5sZW4pKQogCQkJZ290byByZXNldDsKIAkJaWYgKG9wdF9za2IpIHsKLQkJCS8qIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgZ290byBpcHY2X3BrdG9wdGlvbnMuICovCisJCQkvKiBYWFggVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBnb3RvIGlwdjZfcGt0b3B0aW9ucy4gKi8KIAkJCV9fa2ZyZWVfc2tiKG9wdF9za2IpOwogCQl9CiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogIFN0ZXAgMzogUHJvY2VzcyBMSVNURU4gc3RhdGUKKwkgKiAgICAgSWYgUy5zdGF0ZSA9PSBMSVNURU4sCisJICoJIElmIFAudHlwZSA9PSBSZXF1ZXN0IG9yIFAgY29udGFpbnMgYSB2YWxpZCBJbml0IENvb2tpZSBvcHRpb24sCisJICoJICAgICAgKCogTXVzdCBzY2FuIHRoZSBwYWNrZXQncyBvcHRpb25zIHRvIGNoZWNrIGZvciBJbml0CisJICoJCSBDb29raWVzLiAgT25seSBJbml0IENvb2tpZXMgYXJlIHByb2Nlc3NlZCBoZXJlLAorCSAqCQkgaG93ZXZlcjsgb3RoZXIgb3B0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIFN0ZXAgOC4gIFRoaXMKKwkgKgkJIHNjYW4gbmVlZCBvbmx5IGJlIHBlcmZvcm1lZCBpZiB0aGUgZW5kcG9pbnQgdXNlcyBJbml0CisJICoJCSBDb29raWVzICopCisJICoJICAgICAgKCogR2VuZXJhdGUgYSBuZXcgc29ja2V0IGFuZCBzd2l0Y2ggdG8gdGhhdCBzb2NrZXQgKikKKwkgKgkgICAgICBTZXQgUyA6PSBuZXcgc29ja2V0IGZvciB0aGlzIHBvcnQgcGFpcgorCSAqCSAgICAgIFMuc3RhdGUgPSBSRVNQT05ECisJICoJICAgICAgQ2hvb3NlIFMuSVNTIChpbml0aWFsIHNlcW5vKSBvciBzZXQgZnJvbSBJbml0IENvb2tpZXMKKwkgKgkgICAgICBJbml0aWFsaXplIFMuR0FSIDo9IFMuSVNTCisJICoJICAgICAgU2V0IFMuSVNSLCBTLkdTUiwgUy5TV0wsIFMuU1dIIGZyb20gcGFja2V0IG9yIEluaXQgQ29va2llcworCSAqCSAgICAgIENvbnRpbnVlIHdpdGggUy5zdGF0ZSA9PSBSRVNQT05ECisJICoJICAgICAgKCogQSBSZXNwb25zZSBwYWNrZXQgd2lsbCBiZSBnZW5lcmF0ZWQgaW4gU3RlcCAxMSAqKQorCSAqCSBPdGhlcndpc2UsCisJICoJICAgICAgR2VuZXJhdGUgUmVzZXQoTm8gQ29ubmVjdGlvbikgdW5sZXNzIFAudHlwZSA9PSBSZXNldAorCSAqCSAgICAgIERyb3AgcGFja2V0IGFuZCByZXR1cm4KKwkgKgorCSAqIE5PVEU6IHRoZSBjaGVjayBmb3IgdGhlIHBhY2tldCB0eXBlcyBpcyBkb25lIGluCisJICoJIGRjY3BfcmN2X3N0YXRlX3Byb2Nlc3MKKwkgKi8KIAlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfTElTVEVOKSB7CiAJCXN0cnVjdCBzb2NrICpuc2sgPSBkY2NwX3Y2X2huZF9yZXEoc2ssIHNrYik7CiAKQEAgLTEwMjQsMTMgKzc5OSwxMyBAQAogCWlmIChkY2NwX3Jjdl9zdGF0ZV9wcm9jZXNzKHNrLCBza2IsIGRjY3BfaGRyKHNrYiksIHNrYi0+bGVuKSkKIAkJZ290byByZXNldDsKIAlpZiAob3B0X3NrYikgewotCQkvKiBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGdvdG8gaXB2Nl9wa3RvcHRpb25zLiAqLworCQkvKiBYWFggVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBnb3RvIGlwdjZfcGt0b3B0aW9ucy4gKi8KIAkJX19rZnJlZV9za2Iob3B0X3NrYik7CiAJfQogCXJldHVybiAwOwogCiByZXNldDoKLQlkY2NwX3Y2X2N0bF9zZW5kX3Jlc2V0KHNrYik7CisJZGNjcF92Nl9jdGxfc2VuZF9yZXNldChzaywgc2tiKTsKIGRpc2NhcmQ6CiAJaWYgKG9wdF9za2IgIT0gTlVMTCkKIAkJX19rZnJlZV9za2Iob3B0X3NrYik7CkBAIC0xMDQzLDEyICs4MTgsMjAgQEAKIAljb25zdCBzdHJ1Y3QgZGNjcF9oZHIgKmRoOwogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKIAlzdHJ1Y3Qgc29jayAqc2s7CisJaW50IG1pbl9jb3Y7CiAKLQkvKiBTdGVwIDE6IENoZWNrIGhlYWRlciBiYXNpY3M6ICovCisJLyogU3RlcCAxOiBDaGVjayBoZWFkZXIgYmFzaWNzICovCiAKIAlpZiAoZGNjcF9pbnZhbGlkX3BhY2tldChza2IpKQogCQlnb3RvIGRpc2NhcmRfaXQ7CiAKKwkvKiBTdGVwIDE6IElmIGhlYWRlciBjaGVja3N1bSBpcyBpbmNvcnJlY3QsIGRyb3AgcGFja2V0IGFuZCByZXR1cm4uICovCisJaWYgKGRjY3BfdjZfY3N1bV9maW5pc2goc2tiLCAmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJICAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpKSB7CisJCURDQ1BfV0FSTigiZHJvcHBlZCBwYWNrZXQgd2l0aCBpbnZhbGlkIGNoZWNrc3VtXG4iKTsKKwkJZ290byBkaXNjYXJkX2l0OworCX0KKwogCWRoID0gZGNjcF9oZHIoc2tiKTsKIAogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSAgPSBkY2NwX2hkcl9zZXEoc2tiKTsKQEAgLTEwNjgsMTEgKzg1MSwxMiBAQAogCS8qCiAJICogU3RlcCAyOgogCSAqIAlJZiBubyBzb2NrZXQgLi4uCi0JICoJCUdlbmVyYXRlIFJlc2V0KE5vIENvbm5lY3Rpb24pIHVubGVzcyBQLnR5cGUgPT0gUmVzZXQKLQkgKgkJRHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwotCWlmIChzayA9PSBOVUxMKQorCWlmIChzayA9PSBOVUxMKSB7CisJCWRjY3BfcHJfZGVidWcoImZhaWxlZCB0byBsb29rIHVwIGZsb3cgSUQgaW4gdGFibGUgYW5kICIKKwkJCSAgICAgICJnZXQgY29ycmVzcG9uZGluZyBzb2NrZXRcbiIpOwogCQlnb3RvIG5vX2RjY3Bfc29ja2V0OworCX0KIAogCS8qCiAJICogU3RlcCAyOgpAQCAtMTA4MCw0MyArODY0LDIyNiBAQAogCSAqCQlHZW5lcmF0ZSBSZXNldChObyBDb25uZWN0aW9uKSB1bmxlc3MgUC50eXBlID09IFJlc2V0CiAJICoJCURyb3AgcGFja2V0IGFuZCByZXR1cm4KIAkgKi8KLQlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfVElNRV9XQUlUKQotCQlnb3RvIGRvX3RpbWVfd2FpdDsKKwlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfVElNRV9XQUlUKSB7CisJCWRjY3BfcHJfZGVidWcoInNrLT5za19zdGF0ZSA9PSBEQ0NQX1RJTUVfV0FJVDogZG9fdGltZV93YWl0XG4iKTsKKwkJaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKKwkJZ290byBub19kY2NwX3NvY2tldDsKKwl9CisKKwkvKgorCSAqIFJGQyA0MzQwLCBzZWMuIDkuMi4xOiBNaW5pbXVtIENoZWNrc3VtIENvdmVyYWdlCisJICogCW8gaWYgTWluQ3NDb3YgPSAwLCBvbmx5IHBhY2tldHMgd2l0aCBDc0NvdiA9IDAgYXJlIGFjY2VwdGVkCisJICogCW8gaWYgTWluQ3NDb3YgPiAwLCBhbHNvIGFjY2VwdCBwYWNrZXRzIHdpdGggQ3NDb3YgPj0gTWluQ3NDb3YKKwkgKi8KKwltaW5fY292ID0gZGNjcF9zayhzayktPmRjY3BzX3BjcmxlbjsKKwlpZiAoZGgtPmRjY3BoX2NzY292ICAmJiAgKG1pbl9jb3YgPT0gMCB8fCBkaC0+ZGNjcGhfY3Njb3YgPCBtaW5fY292KSkgIHsKKwkJZGNjcF9wcl9kZWJ1ZygiUGFja2V0IENzQ292ICVkIGRvZXMgbm90IHNhdGlzZnkgTWluQ3NDb3YgJWRcbiIsCisJCQkgICAgICBkaC0+ZGNjcGhfY3Njb3YsIG1pbl9jb3YpOworCQkvKiBGSVhNRTogc2VuZCBEYXRhIERyb3BwZWQgb3B0aW9uIChzZWUgYWxzbyBkY2NwX3Y0X3JjdikgKi8KKwkJZ290byBkaXNjYXJkX2FuZF9yZWxzZTsKKwl9CiAKIAlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCiAJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CiAKLQlyZXR1cm4gc2tfcmVjZWl2ZV9za2Ioc2ssIHNrYikgPyAtMSA6IDA7CisJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IsIDEpID8gLTEgOiAwOwogCiBub19kY2NwX3NvY2tldDoKIAlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKIAkJZ290byBkaXNjYXJkX2l0OwogCS8qCiAJICogU3RlcCAyOgorCSAqIAlJZiBubyBzb2NrZXQgLi4uCiAJICoJCUdlbmVyYXRlIFJlc2V0KE5vIENvbm5lY3Rpb24pIHVubGVzcyBQLnR5cGUgPT0gUmVzZXQKIAkgKgkJRHJvcCBwYWNrZXQgYW5kIHJldHVybgogCSAqLwogCWlmIChkaC0+ZGNjcGhfdHlwZSAhPSBEQ0NQX1BLVF9SRVNFVCkgewogCQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9yZXNldF9jb2RlID0KIAkJCQkJRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047Ci0JCWRjY3BfdjZfY3RsX3NlbmRfcmVzZXQoc2tiKTsKKwkJZGNjcF92Nl9jdGxfc2VuZF9yZXNldChzaywgc2tiKTsKIAl9CisKIGRpc2NhcmRfaXQ6Ci0KLQkvKgotCSAqCURpc2NhcmQgZnJhbWUKLQkgKi8KLQogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogCiBkaXNjYXJkX2FuZF9yZWxzZToKIAlzb2NrX3B1dChzayk7CiAJZ290byBkaXNjYXJkX2l0OworfQogCi1kb190aW1lX3dhaXQ6Ci0JaW5ldF90d3NrX3B1dChpbmV0X3R3c2soc2spKTsKLQlnb3RvIG5vX2RjY3Bfc29ja2V0Oworc3RhdGljIGludCBkY2NwX3Y2X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkJICAgaW50IGFkZHJfbGVuKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXVhZGRyOworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CisJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisJc3RydWN0IGluNl9hZGRyICpzYWRkciA9IE5VTEwsICpmaW5hbF9wID0gTlVMTCwgZmluYWw7CisJc3RydWN0IGZsb3dpIGZsOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKKwlpbnQgYWRkcl90eXBlOworCWludCBlcnI7CisKKwlkcC0+ZGNjcHNfcm9sZSA9IERDQ1BfUk9MRV9DTElFTlQ7CisKKwlpZiAoYWRkcl9sZW4gPCBTSU42X0xFTl9SRkMyMTMzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh1c2luLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKKworCWlmIChucC0+c25kZmxvdykgeworCQlmbC5mbDZfZmxvd2xhYmVsID0gdXNpbi0+c2luNl9mbG93aW5mbyAmIElQVjZfRkxPV0lORk9fTUFTSzsKKwkJSVA2X0VDTl9mbG93X2luaXQoZmwuZmw2X2Zsb3dsYWJlbCk7CisJCWlmIChmbC5mbDZfZmxvd2xhYmVsICYgSVBWNl9GTE9XTEFCRUxfTUFTSykgeworCQkJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsb3dsYWJlbDsKKwkJCWZsb3dsYWJlbCA9IGZsNl9zb2NrX2xvb2t1cChzaywgZmwuZmw2X2Zsb3dsYWJlbCk7CisJCQlpZiAoZmxvd2xhYmVsID09IE5VTEwpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlpcHY2X2FkZHJfY29weSgmdXNpbi0+c2luNl9hZGRyLCAmZmxvd2xhYmVsLT5kc3QpOworCQkJZmw2X3NvY2tfcmVsZWFzZShmbG93bGFiZWwpOworCQl9CisJfQorCS8qCisJICogY29ubmVjdCgpIHRvIElOQUREUl9BTlkgbWVhbnMgbG9vcGJhY2sgKEJTRCdpc20pLgorCSAqLworCWlmIChpcHY2X2FkZHJfYW55KCZ1c2luLT5zaW42X2FkZHIpKQorCQl1c2luLT5zaW42X2FkZHIuczZfYWRkclsxNV0gPSAxOworCisJYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoJnVzaW4tPnNpbjZfYWRkcik7CisKKwlpZiAoYWRkcl90eXBlICYgSVBWNl9BRERSX01VTFRJQ0FTVCkKKwkJcmV0dXJuIC1FTkVUVU5SRUFDSDsKKworCWlmIChhZGRyX3R5cGUgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSB7CisJCWlmIChhZGRyX2xlbiA+PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgJiYKKwkJICAgIHVzaW4tPnNpbjZfc2NvcGVfaWQpIHsKKwkJCS8qIElmIGludGVyZmFjZSBpcyBzZXQgd2hpbGUgYmluZGluZywgaW5kaWNlcworCQkJICogbXVzdCBjb2luY2lkZS4KKwkJCSAqLworCQkJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYgJiYKKwkJCSAgICBzay0+c2tfYm91bmRfZGV2X2lmICE9IHVzaW4tPnNpbjZfc2NvcGVfaWQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCXNrLT5za19ib3VuZF9kZXZfaWYgPSB1c2luLT5zaW42X3Njb3BlX2lkOworCQl9CisKKwkJLyogQ29ubmVjdCB0byBsaW5rLWxvY2FsIGFkZHJlc3MgcmVxdWlyZXMgYW4gaW50ZXJmYWNlICovCisJCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlwdjZfYWRkcl9jb3B5KCZucC0+ZGFkZHIsICZ1c2luLT5zaW42X2FkZHIpOworCW5wLT5mbG93X2xhYmVsID0gZmwuZmw2X2Zsb3dsYWJlbDsKKworCS8qCisJICogRENDUCBvdmVyIElQdjQKKwkgKi8KKwlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpIHsKKwkJdTMyIGV4dGhkcmxlbiA9IGljc2stPmljc2tfZXh0X2hkcl9sZW47CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisKKwkJU09DS19ERUJVRyhzaywgImNvbm5lY3Q6IGlwdjQgbWFwcGVkXG4iKTsKKworCQlpZiAoX19pcHY2X29ubHlfc29jayhzaykpCisJCQlyZXR1cm4gLUVORVRVTlJFQUNIOworCisJCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwkJc2luLnNpbl9wb3J0ID0gdXNpbi0+c2luNl9wb3J0OworCQlzaW4uc2luX2FkZHIuc19hZGRyID0gdXNpbi0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsKKworCQlpY3NrLT5pY3NrX2FmX29wcyA9ICZkY2NwX2lwdjZfbWFwcGVkOworCQlzay0+c2tfYmFja2xvZ19yY3YgPSBkY2NwX3Y0X2RvX3JjdjsKKworCQllcnIgPSBkY2NwX3Y0X2Nvbm5lY3Qoc2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSk7CisJCWlmIChlcnIpIHsKKwkJCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSBleHRoZHJsZW47CisJCQlpY3NrLT5pY3NrX2FmX29wcyA9ICZkY2NwX2lwdjZfYWZfb3BzOworCQkJc2stPnNrX2JhY2tsb2dfcmN2ID0gZGNjcF92Nl9kb19yY3Y7CisJCQlnb3RvIGZhaWx1cmU7CisJCX0gZWxzZSB7CisJCQlpcHY2X2FkZHJfc2V0KCZucC0+c2FkZHIsIDAsIDAsIGh0b25sKDB4MDAwMEZGRkYpLAorCQkJCSAgICAgIGluZXQtPnNhZGRyKTsKKwkJCWlwdjZfYWRkcl9zZXQoJm5wLT5yY3Zfc2FkZHIsIDAsIDAsIGh0b25sKDB4MDAwMEZGRkYpLAorCQkJCSAgICAgIGluZXQtPnJjdl9zYWRkcik7CisJCX0KKworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghaXB2Nl9hZGRyX2FueSgmbnAtPnJjdl9zYWRkcikpCisJCXNhZGRyID0gJm5wLT5yY3Zfc2FkZHI7CisKKwlmbC5wcm90byA9IElQUFJPVE9fRENDUDsKKwlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgJm5wLT5kYWRkcik7CisJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsIHNhZGRyID8gc2FkZHIgOiAmbnAtPnNhZGRyKTsKKwlmbC5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWZsLmZsX2lwX2Rwb3J0ID0gdXNpbi0+c2luNl9wb3J0OworCWZsLmZsX2lwX3Nwb3J0ID0gaW5ldC0+c3BvcnQ7CisJc2VjdXJpdHlfc2tfY2xhc3NpZnlfZmxvdyhzaywgJmZsKTsKKworCWlmIChucC0+b3B0ICE9IE5VTEwgJiYgbnAtPm9wdC0+c3JjcnQgIT0gTlVMTCkgeworCQljb25zdCBzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopbnAtPm9wdC0+c3JjcnQ7CisKKwkJaXB2Nl9hZGRyX2NvcHkoJmZpbmFsLCAmZmwuZmw2X2RzdCk7CisJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCBydDAtPmFkZHIpOworCQlmaW5hbF9wID0gJmZpbmFsOworCX0KKworCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCAmZmwpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbHVyZTsKKworCWlmIChmaW5hbF9wKQorCQlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZmluYWxfcCk7CisKKwllcnIgPSB4ZnJtX2xvb2t1cCgmZHN0LCAmZmwsIHNrLCAwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsdXJlOworCisJaWYgKHNhZGRyID09IE5VTEwpIHsKKwkJc2FkZHIgPSAmZmwuZmw2X3NyYzsKKwkJaXB2Nl9hZGRyX2NvcHkoJm5wLT5yY3Zfc2FkZHIsIHNhZGRyKTsKKwl9CisKKwkvKiBzZXQgdGhlIHNvdXJjZSBhZGRyZXNzICovCisJaXB2Nl9hZGRyX2NvcHkoJm5wLT5zYWRkciwgc2FkZHIpOworCWluZXQtPnJjdl9zYWRkciA9IExPT1BCQUNLNF9JUFY2OworCisJX19pcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwsIE5VTEwpOworCisJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IDA7CisJaWYgKG5wLT5vcHQgIT0gTlVMTCkKKwkJaWNzay0+aWNza19leHRfaGRyX2xlbiA9IChucC0+b3B0LT5vcHRfZmxlbiArCisJCQkJCSAgbnAtPm9wdC0+b3B0X25mbGVuKTsKKworCWluZXQtPmRwb3J0ID0gdXNpbi0+c2luNl9wb3J0OworCisJZGNjcF9zZXRfc3RhdGUoc2ssIERDQ1BfUkVRVUVTVElORyk7CisJZXJyID0gaW5ldDZfaGFzaF9jb25uZWN0KCZkY2NwX2RlYXRoX3Jvdywgc2spOworCWlmIChlcnIpCisJCWdvdG8gbGF0ZV9mYWlsdXJlOworCisJZHAtPmRjY3BzX2lzcyA9IHNlY3VyZV9kY2NwdjZfc2VxdWVuY2VfbnVtYmVyKG5wLT5zYWRkci5zNl9hZGRyMzIsCisJCQkJCQkgICAgICBucC0+ZGFkZHIuczZfYWRkcjMyLAorCQkJCQkJICAgICAgaW5ldC0+c3BvcnQsIGluZXQtPmRwb3J0KTsKKwllcnIgPSBkY2NwX2Nvbm5lY3Qoc2spOworCWlmIChlcnIpCisJCWdvdG8gbGF0ZV9mYWlsdXJlOworCisJcmV0dXJuIDA7CisKK2xhdGVfZmFpbHVyZToKKwlkY2NwX3NldF9zdGF0ZShzaywgRENDUF9DTE9TRUQpOworCV9fc2tfZHN0X3Jlc2V0KHNrKTsKK2ZhaWx1cmU6CisJaW5ldC0+ZHBvcnQgPSAwOworCXNrLT5za19yb3V0ZV9jYXBzID0gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBkY2NwX2lwdjZfYWZfb3BzID0gewpAQCAtMTE3OSw2ICsxMTQ2LDEwIEBACiAJcmV0dXJuIGluZXQ2X2Rlc3Ryb3lfc29jayhzayk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgZGNjcDZfdGltZXdhaXRfc29ja19vcHMgPSB7CisJLnR3c2tfb2JqX3NpemUJPSBzaXplb2Yoc3RydWN0IGRjY3A2X3RpbWV3YWl0X3NvY2spLAorfTsKKwogc3RhdGljIHN0cnVjdCBwcm90byBkY2NwX3Y2X3Byb3QgPSB7CiAJLm5hbWUJCSAgID0gIkRDQ1B2NiIsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvbWluaXNvY2tzLmMgYi9uZXQvZGNjcC9taW5pc29ja3MuYwppbmRleCA5MDQ1NDM4Li43YjUyZjJhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9taW5pc29ja3MuYworKysgYi9uZXQvZGNjcC9taW5pc29ja3MuYwpAQCAtMTEsNiArMTEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIApAQCAtODMsOCArODQsNyBAQAogCQkgKiBzb2NrZXQgdXAuICBXZSd2ZSBnb3QgYmlnZ2VyIHByb2JsZW1zIHRoYW4KIAkJICogbm9uLWdyYWNlZnVsIHNvY2tldCBjbG9zaW5ncy4KIAkJICovCi0JCUxJTUlUX05FVERFQlVHKEtFUk5fSU5GTyAiRENDUDogdGltZSB3YWl0IGJ1Y2tldCAiCi0JCQkJCSAidGFibGUgb3ZlcmZsb3dcbiIpOworCQlEQ0NQX1dBUk4oInRpbWUgd2FpdCBidWNrZXQgdGFibGUgb3ZlcmZsb3dcbiIpOwogCX0KIAogCWRjY3BfZG9uZShzayk7CkBAIC05Nyw4ICs5Nyw4IEBACiAJLyoKIAkgKiBTdGVwIDM6IFByb2Nlc3MgTElTVEVOIHN0YXRlCiAJICoKLQkgKiAvLyBHZW5lcmF0ZSBhIG5ldyBzb2NrZXQgYW5kIHN3aXRjaCB0byB0aGF0IHNvY2tldAotCSAqIFNldCBTIDo9IG5ldyBzb2NrZXQgZm9yIHRoaXMgcG9ydCBwYWlyCisJICogICAoKiBHZW5lcmF0ZSBhIG5ldyBzb2NrZXQgYW5kIHN3aXRjaCB0byB0aGF0IHNvY2tldCAqKQorCSAqICAgU2V0IFMgOj0gbmV3IHNvY2tldCBmb3IgdGhpcyBwb3J0IHBhaXIKIAkgKi8KIAlzdHJ1Y3Qgc29jayAqbmV3c2sgPSBpbmV0X2Nza19jbG9uZShzaywgcmVxLCBHRlBfQVRPTUlDKTsKIApAQCAtMTQ3LDkgKzE0Nyw5IEBACiAJCS8qCiAJCSAqIFN0ZXAgMzogUHJvY2VzcyBMSVNURU4gc3RhdGUKIAkJICoKLQkJICoJQ2hvb3NlIFMuSVNTIChpbml0aWFsIHNlcW5vKSBvciBzZXQgZnJvbSBJbml0IENvb2tpZQotCQkgKglTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdAotCQkgKglDb29raWUKKwkJICogICAgQ2hvb3NlIFMuSVNTIChpbml0aWFsIHNlcW5vKSBvciBzZXQgZnJvbSBJbml0IENvb2tpZXMKKwkJICogICAgSW5pdGlhbGl6ZSBTLkdBUiA6PSBTLklTUworCQkgKiAgICBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdCBDb29raWVzCiAJCSAqLwogCiAJCS8qIFNlZSBkY2NwX3Y0X2Nvbm5fcmVxdWVzdCAqLwpAQCAtMTk1LDE1ICsxOTUsMTcgQEAKIAogCS8qIENoZWNrIGZvciByZXRyYW5zbWl0dGVkIFJFUVVFU1QgKi8KIAlpZiAoZGNjcF9oZHIoc2tiKS0+ZGNjcGhfdHlwZSA9PSBEQ0NQX1BLVF9SRVFVRVNUKSB7Ci0JCWlmIChhZnRlcjQ4KERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSwKLQkJCSAgICBkY2NwX3JzayhyZXEpLT5kcmVxX2lzcikpIHsKLQkJCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CisJCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CiAKKwkJaWYgKGFmdGVyNDgoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfc2VxLCBkcmVxLT5kcmVxX2lzcikpIHsKIAkJCWRjY3BfcHJfZGVidWcoIlJldHJhbnNtaXR0ZWQgUkVRVUVTVFxuIik7Ci0JCQkvKiBTZW5kIGFub3RoZXIgUkVTUE9OU0UgcGFja2V0ICovCi0JCQlkY2NwX3NldF9zZXFubygmZHJlcS0+ZHJlcV9pc3MsIGRyZXEtPmRyZXFfaXNzICsgMSk7Ci0JCQlkY2NwX3NldF9zZXFubygmZHJlcS0+ZHJlcV9pc3IsCi0JCQkJICAgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcSk7CisJCQlkcmVxLT5kcmVxX2lzciA9IERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3NlcTsKKwkJCS8qCisJCQkgKiBTZW5kIGFub3RoZXIgUkVTUE9OU0UgcGFja2V0CisJCQkgKiBUbyBwcm90ZWN0IGFnYWluc3QgUmVxdWVzdCBmbG9vZHMsIGluY3JlbWVudCByZXRyYW5zCisJCQkgKiBjb3VudGVyIChiYWNrb2ZmLCBtb25pdG9yZWQgYnkgZGNjcF9yZXNwb25zZV90aW1lcikuCisJCQkgKi8KKwkJCXJlcS0+cmV0cmFucysrOwogCQkJcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhzaywgcmVxLCBOVUxMKTsKIAkJfQogCQkvKiBOZXR3b3JrIER1cGxpY2F0ZSwgZGlzY2FyZCBwYWNrZXQgKi8KQEAgLTI0Myw3ICsyNDUsNyBAQAogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfVE9PX0JVU1k7CiBkcm9wOgogCWlmIChkY2NwX2hkcihza2IpLT5kY2NwaF90eXBlICE9IERDQ1BfUEtUX1JFU0VUKQotCQlyZXEtPnJza19vcHMtPnNlbmRfcmVzZXQoc2tiKTsKKwkJcmVxLT5yc2tfb3BzLT5zZW5kX3Jlc2V0KHNrLCBza2IpOwogCiAJaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxLCBwcmV2KTsKIAlnb3RvIG91dDsKQEAgLTI4MywzICsyODUsMTkgQEAKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9jaGlsZF9wcm9jZXNzKTsKKwordm9pZCBkY2NwX3JlcXNrX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJzaykKK3sKKwlEQ0NQX0JVRygiRENDUC1BQ0sgcGFja2V0cyBhcmUgbmV2ZXIgc2VudCBpbiBMSVNURU4vUkVTUE9ORCBzdGF0ZSIpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3JlcXNrX3NlbmRfYWNrKTsKKwordm9pZCBkY2NwX3JlcXNrX2luaXQoc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWluZXRfcnNrKHJlcSktPnJtdF9wb3J0ID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQ7CisJaW5ldF9yc2socmVxKS0+YWNrZWQJPSAwOworCXJlcS0+cmN2X3duZAkJPSBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdzsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9yZXFza19pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCBmYjBkYjFmLi5mMzk4YjQzIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC0yMiwyMyArMjIsMjMgQEAKICNpbmNsdWRlICJkY2NwLmgiCiAjaW5jbHVkZSAiZmVhdC5oIgogCi1pbnQgZGNjcF9mZWF0X2RlZmF1bHRfc2VxdWVuY2Vfd2luZG93ID0gRENDUEZfSU5JVElBTF9TRVFVRU5DRV9XSU5ET1c7Ci1pbnQgZGNjcF9mZWF0X2RlZmF1bHRfcnhfY2NpZAkgICAgICA9IERDQ1BGX0lOSVRJQUxfQ0NJRDsKLWludCBkY2NwX2ZlYXRfZGVmYXVsdF90eF9jY2lkCSAgICAgID0gRENDUEZfSU5JVElBTF9DQ0lEOwotaW50IGRjY3BfZmVhdF9kZWZhdWx0X2Fja19yYXRpbwkgICAgICA9IERDQ1BGX0lOSVRJQUxfQUNLX1JBVElPOwotaW50IGRjY3BfZmVhdF9kZWZhdWx0X3NlbmRfYWNrX3ZlY3RvciA9IERDQ1BGX0lOSVRJQUxfU0VORF9BQ0tfVkVDVE9SOwotaW50IGRjY3BfZmVhdF9kZWZhdWx0X3NlbmRfbmRwX2NvdW50ICA9IERDQ1BGX0lOSVRJQUxfU0VORF9ORFBfQ09VTlQ7CitpbnQgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3cgPSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVzsKK2ludCBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7CitpbnQgc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkCSAgICAgID0gRENDUEZfSU5JVElBTF9DQ0lEOworaW50IHN5c2N0bF9kY2NwX2ZlYXRfYWNrX3JhdGlvCSAgICAgID0gRENDUEZfSU5JVElBTF9BQ0tfUkFUSU87CitpbnQgc3lzY3RsX2RjY3BfZmVhdF9zZW5kX2Fja192ZWN0b3IgPSBEQ0NQRl9JTklUSUFMX1NFTkRfQUNLX1ZFQ1RPUjsKK2ludCBzeXNjdGxfZGNjcF9mZWF0X3NlbmRfbmRwX2NvdW50ICA9IERDQ1BGX0lOSVRJQUxfU0VORF9ORFBfQ09VTlQ7CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZmVhdF9kZWZhdWx0X3NlcXVlbmNlX3dpbmRvdyk7CitFWFBPUlRfU1lNQk9MX0dQTChzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdyk7CiAKIHZvaWQgZGNjcF9taW5pc29ja19pbml0KHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrKQogewotCWRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSBkY2NwX2ZlYXRfZGVmYXVsdF9zZXF1ZW5jZV93aW5kb3c7Ci0JZG1zay0+ZGNjcG1zX3J4X2NjaWQJICAgICA9IGRjY3BfZmVhdF9kZWZhdWx0X3J4X2NjaWQ7Ci0JZG1zay0+ZGNjcG1zX3R4X2NjaWQJICAgICA9IGRjY3BfZmVhdF9kZWZhdWx0X3R4X2NjaWQ7Ci0JZG1zay0+ZGNjcG1zX2Fja19yYXRpbwkgICAgID0gZGNjcF9mZWF0X2RlZmF1bHRfYWNrX3JhdGlvOwotCWRtc2stPmRjY3Btc19zZW5kX2Fja192ZWN0b3IgPSBkY2NwX2ZlYXRfZGVmYXVsdF9zZW5kX2Fja192ZWN0b3I7Ci0JZG1zay0+ZGNjcG1zX3NlbmRfbmRwX2NvdW50ICA9IGRjY3BfZmVhdF9kZWZhdWx0X3NlbmRfbmRwX2NvdW50OworCWRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSBzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdzsKKwlkbXNrLT5kY2NwbXNfcnhfY2NpZAkgICAgID0gc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkOworCWRtc2stPmRjY3Btc190eF9jY2lkCSAgICAgPSBzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQ7CisJZG1zay0+ZGNjcG1zX2Fja19yYXRpbwkgICAgID0gc3lzY3RsX2RjY3BfZmVhdF9hY2tfcmF0aW87CisJZG1zay0+ZGNjcG1zX3NlbmRfYWNrX3ZlY3RvciA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VuZF9hY2tfdmVjdG9yOworCWRtc2stPmRjY3Btc19zZW5kX25kcF9jb3VudCAgPSBzeXNjdGxfZGNjcF9mZWF0X3NlbmRfbmRwX2NvdW50OwogfQogCiBzdGF0aWMgdTMyIGRjY3BfZGVjb2RlX3ZhbHVlX3Zhcihjb25zdCB1bnNpZ25lZCBjaGFyICpiZiwgY29uc3QgdTggbGVuKQpAQCAtNjAsMTIgKzYwLDkgQEAKIGludCBkY2NwX3BhcnNlX29wdGlvbnMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLQljb25zdCBjaGFyICpkZWJ1Z19wcmVmaXggPSBkcC0+ZGNjcHNfcm9sZSA9PSBEQ0NQX1JPTEVfQ0xJRU5UID8KLQkJCQkJIkNMSUVOVCByeCBvcHQ6ICIgOiAic2VydmVyIHJ4IG9wdDogIjsKLSNlbmRpZgogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGggPSBkY2NwX2hkcihza2IpOwogCWNvbnN0IHU4IHBrdF90eXBlID0gRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZTsKKwl1NjQgYWNrbm8gPSBEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9hY2tfc2VxOwogCXVuc2lnbmVkIGNoYXIgKm9wdGlvbnMgPSAodW5zaWduZWQgY2hhciAqKWRoICsgZGNjcF9oZHJfbGVuKHNrYik7CiAJdW5zaWduZWQgY2hhciAqb3B0X3B0ciA9IG9wdGlvbnM7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqb3B0X2VuZCA9ICh1bnNpZ25lZCBjaGFyICopZGggKwpAQCAtMTE5LDcgKzExNiw3IEBACiAJCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247CiAKIAkJCW9wdF9yZWN2LT5kY2Nwb3JfbmRwID0gZGNjcF9kZWNvZGVfdmFsdWVfdmFyKHZhbHVlLCBsZW4pOwotCQkJZGNjcF9wcl9kZWJ1ZygiJXNORFAgY291bnQ9JWRcbiIsIGRlYnVnX3ByZWZpeCwKKwkJCWRjY3BfcHJfZGVidWcoIiVzIHJ4IG9wdDogTkRQIGNvdW50PSVkXG4iLCBkY2NwX3JvbGUoc2spLAogCQkJCSAgICAgIG9wdF9yZWN2LT5kY2Nwb3JfbmRwKTsKIAkJCWJyZWFrOwogCQljYXNlIERDQ1BPX0NIQU5HRV9MOgpAQCAtMTUzLDcgKzE1MCw3IEBACiAJCQkJYnJlYWs7CiAKIAkJCWlmIChkY2NwX21zayhzayktPmRjY3Btc19zZW5kX2Fja192ZWN0b3IgJiYKLQkJCSAgICBkY2NwX2Fja3ZlY19wYXJzZShzaywgc2tiLCBvcHQsIHZhbHVlLCBsZW4pKQorCQkJICAgIGRjY3BfYWNrdmVjX3BhcnNlKHNrLCBza2IsICZhY2tubywgb3B0LCB2YWx1ZSwgbGVuKSkKIAkJCQlnb3RvIG91dF9pbnZhbGlkX29wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIERDQ1BPX1RJTUVTVEFNUDoKQEAgLTE2NSw4ICsxNjIsOCBAQAogCQkJZHAtPmRjY3BzX3RpbWVzdGFtcF9lY2hvID0gb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXA7CiAJCQlkY2NwX3RpbWVzdGFtcChzaywgJmRwLT5kY2Nwc190aW1lc3RhbXBfdGltZSk7CiAKLQkJCWRjY3BfcHJfZGVidWcoIiVzVElNRVNUQU1QPSV1LCBhY2tubz0lbGx1XG4iLAotCQkJCSAgICAgIGRlYnVnX3ByZWZpeCwgb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXAsCisJCQlkY2NwX3ByX2RlYnVnKCIlcyByeCBvcHQ6IFRJTUVTVEFNUD0ldSwgYWNrbm89JWxsdVxuIiwKKwkJCQkgICAgICBkY2NwX3JvbGUoc2spLCBvcHRfcmVjdi0+ZGNjcG9yX3RpbWVzdGFtcCwKIAkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkJCSAgICAgIERDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX2Fja19zZXEpOwogCQkJYnJlYWs7CkBAIC0xNzYsOCArMTczLDggQEAKIAogCQkJb3B0X3JlY3YtPmRjY3Bvcl90aW1lc3RhbXBfZWNobyA9IG50b2hsKCooX19iZTMyICopdmFsdWUpOwogCi0JCQlkY2NwX3ByX2RlYnVnKCIlc1RJTUVTVEFNUF9FQ0hPPSV1LCBsZW49JWQsIGFja25vPSVsbHUsICIsCi0JCQkJICAgICAgZGVidWdfcHJlZml4LAorCQkJZGNjcF9wcl9kZWJ1ZygiJXMgcnggb3B0OiBUSU1FU1RBTVBfRUNITz0ldSwgbGVuPSVkLCAiCisJCQkJICAgICAgImFja25vPSVsbHUsICIsICBkY2NwX3JvbGUoc2spLAogCQkJCSAgICAgIG9wdF9yZWN2LT5kY2Nwb3JfdGltZXN0YW1wX2VjaG8sCiAJCQkJICAgICAgbGVuICsgMiwKIAkJCQkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQpAQCAtMjExLDggKzIwOCw4IEBACiAJCQlpZiAoZWxhcHNlZF90aW1lID4gb3B0X3JlY3YtPmRjY3Bvcl9lbGFwc2VkX3RpbWUpCiAJCQkJb3B0X3JlY3YtPmRjY3Bvcl9lbGFwc2VkX3RpbWUgPSBlbGFwc2VkX3RpbWU7CiAKLQkJCWRjY3BfcHJfZGVidWcoIiVzRUxBUFNFRF9USU1FPSVkXG4iLCBkZWJ1Z19wcmVmaXgsCi0JCQkJICAgICAgZWxhcHNlZF90aW1lKTsKKwkJCWRjY3BfcHJfZGVidWcoIiVzIHJ4IG9wdDogRUxBUFNFRF9USU1FPSVkXG4iLAorCQkJCSAgICAgIGRjY3Bfcm9sZShzayksIGVsYXBzZWRfdGltZSk7CiAJCQlicmVhazsKIAkJCS8qCiAJCQkgKiBGcm9tIFJGQyA0MzQwLCBzZWMuIDEwLjM6CkBAIC0yNDIsOSArMjM5LDggQEAKIAkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl9pbmZvKCJEQ0NQKCVwKTogb3B0aW9uICVkKGxlbj0lZCkgbm90ICIKLQkJCQkiaW1wbGVtZW50ZWQsIGlnbm9yaW5nXG4iLAotCQkJCXNrLCBvcHQsIGxlbik7CisJCQlEQ0NQX0NSSVQoIkRDQ1AoJXApOiBvcHRpb24gJWQobGVuPSVkKSBub3QgIgorCQkJCSAgImltcGxlbWVudGVkLCBpZ25vcmluZyIsIHNrLCBvcHQsIGxlbik7CiAJCQlicmVhazsKIAkgICAgICAgIH0KIApAQCAtMjYxLDcgKzI1Nyw3IEBACiBvdXRfaW52YWxpZF9vcHRpb246CiAJRENDUF9JTkNfU1RBVFNfQkgoRENDUF9NSUJfSU5WQUxJRE9QVCk7CiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9PUFRJT05fRVJST1I7Ci0JcHJfaW5mbygiRENDUCglcCk6IGludmFsaWQgb3B0aW9uICVkLCBsZW49JWRcbiIsIHNrLCBvcHQsIGxlbik7CisJRENDUF9XQVJOKCJEQ0NQKCVwKTogaW52YWxpZCBvcHRpb24gJWQsIGxlbj0lZCIsIHNrLCBvcHQsIGxlbik7CiAJcmV0dXJuIC0xOwogfQogCkBAIC00NTEsOCArNDQ3LDcgQEAKIAl1OCAqdG87CiAKIAlpZiAoRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfb3B0X2xlbiArIGxlbiArIDMgPiBEQ0NQX01BWF9PUFRfTEVOKSB7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fSU5GTyAiRENDUDogcGFja2V0IHRvbyBzbWFsbCIKLQkJCSAgICAgICAiIHRvIGluc2VydCBmZWF0dXJlICVkIG9wdGlvbiFcbiIsIGZlYXQpOworCQlEQ0NQX1dBUk4oInBhY2tldCB0b28gc21hbGwgZm9yIGZlYXR1cmUgJWQgb3B0aW9uIVxuIiwgZmVhdCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQ2NSw4ICs0NjAsMTAgQEAKIAogCWlmIChsZW4pCiAJCW1lbWNweSh0bywgdmFsLCBsZW4pOwotCWRjY3BfcHJfZGVidWcoIm9wdGlvbiAlZCBmZWF0ICVkIGxlbiAlZFxuIiwgdHlwZSwgZmVhdCwgbGVuKTsKIAorCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksIC4uLiksIGxlbmd0aCAlZFxuIiwKKwkJICAgICAgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAorCQkgICAgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCA3MTAyZTNhLi40MDBjMzBiIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtODgsMTYgKzg4LDE1IEBACiAJCQlyZXR1cm4gLUVQUk9UTzsKIAkJfQogCQkKLQkJc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7Ci0JCWRoID0gZGNjcF9oZHIoc2tiKTsKIAogCQkvKiBCdWlsZCBEQ0NQIGhlYWRlciBhbmQgY2hlY2tzdW0gaXQuICovCi0JCW1lbXNldChkaCwgMCwgZGNjcF9oZWFkZXJfc2l6ZSk7CisJCWRoID0gZGNjcF96ZXJvZWRfaGRyKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7CiAJCWRoLT5kY2NwaF90eXBlCT0gZGNiLT5kY2NwZF90eXBlOwogCQlkaC0+ZGNjcGhfc3BvcnQJPSBpbmV0LT5zcG9ydDsKIAkJZGgtPmRjY3BoX2Rwb3J0CT0gaW5ldC0+ZHBvcnQ7CiAJCWRoLT5kY2NwaF9kb2ZmCT0gKGRjY3BfaGVhZGVyX3NpemUgKyBkY2ItPmRjY3BkX29wdF9sZW4pIC8gNDsKIAkJZGgtPmRjY3BoX2NjdmFsCT0gZGNiLT5kY2NwZF9jY3ZhbDsKKwkJZGgtPmRjY3BoX2NzY292ID0gZHAtPmRjY3BzX3Bjc2xlbjsKIAkJLyogWFhYIEZvciBub3cgd2UncmUgdXNpbmcgb25seSA0OCBiaXRzIHNlcXVlbmNlIG51bWJlcnMgKi8KIAkJZGgtPmRjY3BoX3gJPSAxOwogCkBAIC0xMTcsNyArMTE2LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWNzay0+aWNza19hZl9vcHMtPnNlbmRfY2hlY2soc2ssIHNrYi0+bGVuLCBza2IpOworCQlpY3NrLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayhzaywgMCwgc2tiKTsKIAogCQlpZiAoc2V0X2FjaykKIAkJCWRjY3BfZXZlbnRfYWNrX3NlbnQoc2spOwpAQCAtMTI1LDE3ICsxMjQsOCBAQAogCQlEQ0NQX0lOQ19TVEFUUyhEQ0NQX01JQl9PVVRTRUdTKTsKIAogCQltZW1zZXQoJihJUENCKHNrYiktPm9wdCksIDAsIHNpemVvZihJUENCKHNrYiktPm9wdCkpOwotCQllcnIgPSBpY3NrLT5pY3NrX2FmX29wcy0+cXVldWVfeG1pdChza2IsIDApOwotCQlpZiAoZXJyIDw9IDApCi0JCQlyZXR1cm4gZXJyOwotCi0JCS8qIE5FVF9YTUlUX0NOIGlzIHNwZWNpYWwuIEl0IGRvZXMgbm90IGd1YXJhbnRlZSwKLQkJICogdGhhdCB0aGlzIHBhY2tldCBpcyBsb3N0LiBJdCB0ZWxscyB0aGF0IGRldmljZQotCQkgKiBpcyBhYm91dCB0byBzdGFydCB0byBkcm9wIHBhY2tldHMgb3IgYWxyZWFkeQotCQkgKiBkcm9wcyBzb21lIHBhY2tldHMgb2YgdGhlIHNhbWUgcHJpb3JpdHkgYW5kCi0JCSAqIGludm9rZXMgdXMgdG8gc2VuZCBsZXNzIGFnZ3Jlc3NpdmVseS4KLQkJICovCi0JCXJldHVybiBlcnIgPT0gTkVUX1hNSVRfQ04gPyAwIDogZXJyOworCQllcnIgPSBpY3NrLT5pY3NrX2FmX29wcy0+cXVldWVfeG1pdChza2IsIHNrLCAwKTsKKwkJcmV0dXJuIG5ldF94bWl0X2V2YWwoZXJyKTsKIAl9CiAJcmV0dXJuIC1FTk9CVUZTOwogfQpAQCAtMjA1LDggKzE5NSw3IEBACiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWdvdG8gZG9faW50ZXJydXB0ZWQ7CiAKLQkJcmMgPSBjY2lkX2hjX3R4X3NlbmRfcGFja2V0KGRwLT5kY2Nwc19oY190eF9jY2lkLCBzaywgc2tiLAotCQkJCQkgICAgc2tiLT5sZW4pOworCQlyYyA9IGNjaWRfaGNfdHhfc2VuZF9wYWNrZXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOwogCQlpZiAocmMgPD0gMCkKIAkJCWJyZWFrOwogCQlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMocmMpOwpAQCAtMjUxLDI1ICsyNDAsMjMgQEAKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JbG9uZyB0aW1lbyA9IDMwMDAwOyAJLyogSWYgYSBwYWNrZXQgaXMgdGFraW5nIGxvbmdlciB0aGFuIDIgc2VjcwotCQkJCSAgIHdlIGhhdmUgb3RoZXIgaXNzdWVzICovCisJbG9uZyB0aW1lbyA9IERDQ1BfWE1JVF9USU1FTzsgCS8qIElmIGEgcGFja2V0IGlzIHRha2luZyBsb25nZXIgdGhhbgorCQkJCQkgICB0aGlzIHdlIGhhdmUgb3RoZXIgaXNzdWVzICovCiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZzay0+c2tfd3JpdGVfcXVldWUpKSkgewotCQlpbnQgZXJyID0gY2NpZF9oY190eF9zZW5kX3BhY2tldChkcC0+ZGNjcHNfaGNfdHhfY2NpZCwgc2ssIHNrYiwKLQkJCQkJIHNrYi0+bGVuKTsKKwkJaW50IGVyciA9IGNjaWRfaGNfdHhfc2VuZF9wYWNrZXQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCBza2IpOwogCiAJCWlmIChlcnIgPiAwKSB7CiAJCQlpZiAoIWJsb2NrKSB7CiAJCQkJc2tfcmVzZXRfdGltZXIoc2ssICZkcC0+ZGNjcHNfeG1pdF90aW1lciwKIAkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoZXJyKStqaWZmaWVzKTsKIAkJCQlicmVhazsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIHsKIAkJCQllcnIgPSBkY2NwX3dhaXRfZm9yX2NjaWQoc2ssIHNrYiwgJnRpbWVvKTsKLQkJCWlmIChlcnIpIHsKLQkJCQlwcmludGsoS0VSTl9DUklUICIlczplcnIgYXQgZGNjcF93YWl0X2Zvcl9jY2lkIgotCQkJCQkJICIgJWRcbiIsIF9fRlVOQ1RJT05fXywgZXJyKTsKLQkJCQlkdW1wX3N0YWNrKCk7CisJCQkJdGltZW8gPSBEQ0NQX1hNSVRfVElNRU87CiAJCQl9CisJCQlpZiAoZXJyKQorCQkJCURDQ1BfQlVHKCJlcnI9JWQgYWZ0ZXIgZGNjcF93YWl0X2Zvcl9jY2lkIiwgZXJyKTsKIAkJfQogCiAJCXNrYl9kZXF1ZXVlKCZzay0+c2tfd3JpdGVfcXVldWUpOwpAQCAtMjkxLDEyICsyNzgsOSBAQAogCiAJCQllcnIgPSBkY2NwX3RyYW5zbWl0X3NrYihzaywgc2tiKTsKIAkJCWNjaWRfaGNfdHhfcGFja2V0X3NlbnQoZHAtPmRjY3BzX2hjX3R4X2NjaWQsIHNrLCAwLCBsZW4pOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0NSSVQgIiVzOmVyciBmcm9tICIKLQkJCQkJICAgICAgICAgImNjaWRfaGNfdHhfcGFja2V0X3NlbnQgJWRcbiIsCi0JCQkJCSAgICAgICAgIF9fRlVOQ1RJT05fXywgZXJyKTsKLQkJCQlkdW1wX3N0YWNrKCk7Ci0JCQl9CisJCQlpZiAoZXJyKQorCQkJCURDQ1BfQlVHKCJlcnI9JWQgYWZ0ZXIgY2NpZF9oY190eF9wYWNrZXRfc2VudCIsCisJCQkJCSBlcnIpOwogCQl9IGVsc2UKIAkJCWtmcmVlKHNrYik7CiAJfQpAQCAtMzI5LDkgKzMxMywxMCBAQAogCXNrYl9yZXNlcnZlKHNrYiwgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoZHN0KTsKLQlza2ItPmNzdW0gPSAwOwogCiAJZHJlcSA9IGRjY3BfcnNrKHJlcSk7CisJaWYgKGluZXRfcnNrKHJlcSktPmFja2VkKQkvKiBpbmNyZWFzZSBJU1MgdXBvbiByZXRyYW5zbWlzc2lvbiAqLworCQlkY2NwX2luY19zZXFubygmZHJlcS0+ZHJlcV9pc3MpOwogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgPSBEQ0NQX1BLVF9SRVNQT05TRTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEgID0gZHJlcS0+ZHJlcV9pc3M7CiAKQEAgLTM0MCwxMCArMzI1LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7Ci0KLQlkaCA9IGRjY3BfaGRyKHNrYik7Ci0JbWVtc2V0KGRoLCAwLCBkY2NwX2hlYWRlcl9zaXplKTsKKwkvKiBCdWlsZCBhbmQgY2hlY2tzdW0gaGVhZGVyICovCisJZGggPSBkY2NwX3plcm9lZF9oZHIoc2tiLCBkY2NwX2hlYWRlcl9zaXplKTsKIAogCWRoLT5kY2NwaF9zcG9ydAk9IGluZXRfc2soc2spLT5zcG9ydDsKIAlkaC0+ZGNjcGhfZHBvcnQJPSBpbmV0X3JzayhyZXEpLT5ybXRfcG9ydDsKQEAgLTM1NSw2ICszMzgsMTAgQEAKIAlkY2NwX2hkcl9zZXRfYWNrKGRjY3BfaGRyX2Fja19iaXRzKHNrYiksIGRyZXEtPmRyZXFfaXNyKTsKIAlkY2NwX2hkcl9yZXNwb25zZShza2IpLT5kY2NwaF9yZXNwX3NlcnZpY2UgPSBkcmVxLT5kcmVxX3NlcnZpY2U7CiAKKwlkY2NwX2NzdW1fb3V0Z29pbmcoc2tiKTsKKworCS8qIFdlIHVzZSBgYWNrZWQnIHRvIHJlbWVtYmVyIHRoYXQgYSBSZXNwb25zZSB3YXMgYWxyZWFkeSBzZW50LiAqLworCWluZXRfcnNrKHJlcSktPmFja2VkID0gMTsKIAlEQ0NQX0lOQ19TVEFUUyhEQ0NQX01JQl9PVVRTRUdTKTsKIAlyZXR1cm4gc2tiOwogfQpAQCAtMzc5LDcgKzM2Niw2IEBACiAJc2tiX3Jlc2VydmUoc2tiLCBzay0+c2tfcHJvdC0+bWF4X2hlYWRlcik7CiAKIAlza2ItPmRzdCA9IGRzdF9jbG9uZShkc3QpOwotCXNrYi0+Y3N1bSA9IDA7CiAKIAlkY2NwX2luY19zZXFubygmZHAtPmRjY3BzX2dzcyk7CiAKQEAgLTM5MiwxMCArMzc4LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0Jc2tiLT5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgZGNjcF9oZWFkZXJfc2l6ZSk7Ci0KLQlkaCA9IGRjY3BfaGRyKHNrYik7Ci0JbWVtc2V0KGRoLCAwLCBkY2NwX2hlYWRlcl9zaXplKTsKKwlkaCA9IGRjY3BfemVyb2VkX2hkcihza2IsIGRjY3BfaGVhZGVyX3NpemUpOwogCiAJZGgtPmRjY3BoX3Nwb3J0CT0gaW5ldF9zayhzayktPnNwb3J0OwogCWRoLT5kY2NwaF9kcG9ydAk9IGluZXRfc2soc2spLT5kcG9ydDsKQEAgLTQwNyw3ICszOTAsNyBAQAogCWRjY3BfaGRyX3NldF9hY2soZGNjcF9oZHJfYWNrX2JpdHMoc2tiKSwgZHAtPmRjY3BzX2dzcik7CiAKIAlkY2NwX2hkcl9yZXNldChza2IpLT5kY2NwaF9yZXNldF9jb2RlID0gY29kZTsKLQlpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5zZW5kX2NoZWNrKHNrLCBza2ItPmxlbiwgc2tiKTsKKwlpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5zZW5kX2NoZWNrKHNrLCAwLCBza2IpOwogCiAJRENDUF9JTkNfU1RBVFMoRENDUF9NSUJfT1VUU0VHUyk7CiAJcmV0dXJuIHNrYjsKQEAgLTQyNiw5ICs0MDksOCBAQAogCQkJCQkJICAgICAgY29kZSk7CiAJCWlmIChza2IgIT0gTlVMTCkgewogCQkJbWVtc2V0KCYoSVBDQihza2IpLT5vcHQpLCAwLCBzaXplb2YoSVBDQihza2IpLT5vcHQpKTsKLQkJCWVyciA9IGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCAwKTsKLQkJCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04pCi0JCQkJZXJyID0gMDsKKwkJCWVyciA9IGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCBzaywgMCk7CisJCQlyZXR1cm4gbmV0X3htaXRfZXZhbChlcnIpOwogCQl9CiAJfQogCkBAIC00NDksNyArNDMxLDYgQEAKIAkKIAlkY2NwX3N5bmNfbXNzKHNrLCBkc3RfbXR1KGRzdCkpOwogCi0JZGNjcF91cGRhdGVfZ3NzKHNrLCBkcC0+ZGNjcHNfaXNzKTsKICAJLyoKIAkgKiBTV0wgYW5kIEFXTCBhcmUgaW5pdGlhbGx5IGFkanVzdGVkIHNvIHRoYXQgdGhleSBhcmUgbm90IGxlc3MgdGhhbgogCSAqIHRoZSBpbml0aWFsIFNlcXVlbmNlIE51bWJlcnMgcmVjZWl2ZWQgYW5kIHNlbnQsIHJlc3BlY3RpdmVseToKQEAgLTQ1OCw4ICs0MzksMTMgQEAKIAkgKiBUaGVzZSBhZGp1c3RtZW50cyBNVVNUIGJlIGFwcGxpZWQgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogCSAqIGNvbm5lY3Rpb24uCiAgCSAqLworCWRjY3BfdXBkYXRlX2dzcyhzaywgZHAtPmRjY3BzX2lzcyk7CiAJZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19hd2wsIG1heDQ4KGRwLT5kY2Nwc19hd2wsIGRwLT5kY2Nwc19pc3MpKTsKIAorCS8qIFMuR0FSIC0gZ3JlYXRlc3QgdmFsaWQgYWNrbm93bGVkZ2VtZW50IG51bWJlciByZWNlaXZlZCBvbiBhIG5vbi1TeW5jOworCSAqICAgICAgICAgaW5pdGlhbGl6ZWQgdG8gUy5JU1MgKHNlYy4gOC41KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCWRwLT5kY2Nwc19nYXIgPSBkcC0+ZGNjcHNfaXNzOworCiAJaWNzay0+aWNza19yZXRyYW5zbWl0cyA9IDA7CiAJaW5pdF90aW1lcigmZHAtPmRjY3BzX3htaXRfdGltZXIpOwogCWRwLT5kY2Nwc194bWl0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzazsKQEAgLTQ4MSw3ICs0NjcsNiBAQAogCXNrYl9yZXNlcnZlKHNrYiwgc2stPnNrX3Byb3QtPm1heF9oZWFkZXIpOwogCiAJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IERDQ1BfUEtUX1JFUVVFU1Q7Ci0Jc2tiLT5jc3VtID0gMDsKIAogCWRjY3Bfc2tiX2VudGFpbChzaywgc2tiKTsKIAlkY2NwX3RyYW5zbWl0X3NrYihzaywgc2tiX2Nsb25lKHNrYiwgR0ZQX0tFUk5FTCkpOwpAQCAtNTEzLDcgKzQ5OCw2IEBACiAKIAkJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyAqLwogCQlza2JfcmVzZXJ2ZShza2IsIHNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKLQkJc2tiLT5jc3VtID0gMDsKIAkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSA9IERDQ1BfUEtUX0FDSzsKIAkJZGNjcF90cmFuc21pdF9za2Ioc2ssIHNrYik7CiAJfQpAQCAtNTY3LDcgKzU1MSw2IEBACiAKIAkvKiBSZXNlcnZlIHNwYWNlIGZvciBoZWFkZXJzIGFuZCBwcmVwYXJlIGNvbnRyb2wgYml0cy4gKi8KIAlza2JfcmVzZXJ2ZShza2IsIHNrLT5za19wcm90LT5tYXhfaGVhZGVyKTsKLQlza2ItPmNzdW0gPSAwOwogCURDQ1BfU0tCX0NCKHNrYiktPmRjY3BkX3R5cGUgPSBwa3RfdHlwZTsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9zZXEgPSBzZXE7CiAKQEAgLTU5Myw3ICs1NzYsNiBAQAogCiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgaGVhZGVycyBhbmQgcHJlcGFyZSBjb250cm9sIGJpdHMuICovCiAJc2tiX3Jlc2VydmUoc2tiLCBzay0+c2tfcHJvdC0+bWF4X2hlYWRlcik7Ci0Jc2tiLT5jc3VtID0gMDsKIAlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID0gZHAtPmRjY3BzX3JvbGUgPT0gRENDUF9ST0xFX0NMSUVOVCA/CiAJCQkJCURDQ1BfUEtUX0NMT1NFIDogRENDUF9QS1RfQ0xPU0VSRVE7CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb2JlLmMgYi9uZXQvZGNjcC9wcm9iZS5jCmluZGV4IGZkZWQxNDkuLmY4MWUzN2QgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb2JlLmMKKysrIGIvbmV0L2RjY3AvcHJvYmUuYwpAQCAtMTA2LDggKzEwNiwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGpwcm9iZSBkY2NwX3NlbmRfcHJvYmUgPSB7Ci0JLmtwCT0geyAuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikmZGNjcF9zZW5kbXNnLCB9LAotCS5lbnRyeQk9IChrcHJvYmVfb3Bjb2RlX3QgKikmamRjY3Bfc2VuZG1zZywKKwkua3AJPSB7CisJCS5zeW1ib2xfbmFtZSA9ICJkY2NwX3NlbmRtc2ciLAorCX0sCisJLmVudHJ5CT0gSlBST0JFX0VOVFJZKGpkY2NwX3NlbmRtc2cpLAogfTsKIAogc3RhdGljIGludCBkY2NwcHJvYmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDcyY2JkY2YuLjVlYzQ3ZDkgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtNTIsNiArNTIsOSBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX2hhc2hpbmZvKTsKIAorLyogdGhlIG1heGltdW0gcXVldWUgbGVuZ3RoIGZvciB0eCBpbiBwYWNrZXRzLiAwIGlzIG5vIGxpbWl0ICovCitpbnQgc3lzY3RsX2RjY3BfdHhfcWxlbiBfX3JlYWRfbW9zdGx5ID0gNTsKKwogdm9pZCBkY2NwX3NldF9zdGF0ZShzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IGludCBzdGF0ZSkKIHsKIAljb25zdCBpbnQgb2xkc3RhdGUgPSBzay0+c2tfc3RhdGU7CkBAIC0yMTIsNiArMjE1LDcgQEAKIAogCWRjY3BfaW5pdF94bWl0X3RpbWVycyhzayk7CiAJaWNzay0+aWNza19ydG8JCT0gRENDUF9USU1FT1VUX0lOSVQ7CisJaWNzay0+aWNza19zeW5fcmV0cmllcwk9IHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllczsKIAlzay0+c2tfc3RhdGUJCT0gRENDUF9DTE9TRUQ7CiAJc2stPnNrX3dyaXRlX3NwYWNlCT0gZGNjcF93cml0ZV9zcGFjZTsKIAlpY3NrLT5pY3NrX3N5bmNfbXNzCT0gZGNjcF9zeW5jX21zczsKQEAgLTI2MiwxMiArMjY2LDEyIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZGVzdHJveV9zb2NrKTsKIAotc3RhdGljIGlubGluZSBpbnQgZGNjcF9saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgZGNjcF9saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgYmFja2xvZykKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwogCiAJZHAtPmRjY3BzX3JvbGUgPSBEQ0NQX1JPTEVfTElTVEVOOwotCXJldHVybiBpbmV0X2Nza19saXN0ZW5fc3RhcnQoc2ssIFRDUF9TWU5RX0hTSVpFKTsKKwlyZXR1cm4gaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHNrLCBiYWNrbG9nKTsKIH0KIAogaW50IGRjY3BfZGlzY29ubmVjdChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncykKQEAgLTQ1MSw5ICs0NTUsOCBAQAogc3RhdGljIGludCBkb19kY2NwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQljaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwOwotCWludCBlcnI7Ci0JaW50IHZhbDsKKwlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOworCWludCB2YWwsIGVyciA9IDA7CiAKIAlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDY1LDE0ICs0NjgsMTEgQEAKIAkJcmV0dXJuIGRjY3Bfc2V0c29ja29wdF9zZXJ2aWNlKHNrLCB2YWwsIG9wdHZhbCwgb3B0bGVuKTsKIAogCWxvY2tfc29jayhzayk7Ci0JZHAgPSBkY2NwX3NrKHNrKTsKLQllcnIgPSAwOwotCiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkU6Ci0JCWRwLT5kY2Nwc19wYWNrZXRfc2l6ZSA9IHZhbDsKKwkJRENDUF9XQVJOKCJzb2Nrb3B0KFBBQ0tFVF9TSVpFKSBpcyBkZXByZWNhdGVkOiBmaXggeW91ciBhcHBcbiIpOworCQllcnIgPSAwOwogCQlicmVhazsKLQogCWNhc2UgRENDUF9TT0NLT1BUX0NIQU5HRV9MOgogCQlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgZGNjcF9zb19mZWF0KSkKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC00ODEsNyArNDgxLDYgQEAKIAkJCQkJICAgICAgICAgICAgIChzdHJ1Y3QgZGNjcF9zb19mZWF0IF9fdXNlciAqKQogCQkJCQkJICAgICBvcHR2YWwpOwogCQlicmVhazsKLQogCWNhc2UgRENDUF9TT0NLT1BUX0NIQU5HRV9SOgogCQlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgZGNjcF9zb19mZWF0KSkKIAkJCWVyciA9IC1FSU5WQUw7CkBAIC00OTAsMTIgKzQ4OSwyNiBAQAogCQkJCQkJICAgICAoc3RydWN0IGRjY3Bfc29fZmVhdCBfX3VzZXIgKikKIAkJCQkJCSAgICAgb3B0dmFsKTsKIAkJYnJlYWs7Ci0KKwljYXNlIERDQ1BfU09DS09QVF9TRU5EX0NTQ09WOgkvKiBzZW5kZXIgc2lkZSwgUkZDIDQzNDAsIHNlYy4gOS4yICovCisJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDE1KQorCQkJZXJyID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJZHAtPmRjY3BzX3Bjc2xlbiA9IHZhbDsKKwkJYnJlYWs7CisJY2FzZSBEQ0NQX1NPQ0tPUFRfUkVDVl9DU0NPVjoJLyogcmVjZWl2ZXIgc2lkZSwgUkZDIDQzNDAgc2VjLiA5LjIuMSAqLworCQlpZiAodmFsIDwgMCB8fCB2YWwgPiAxNSkKKwkJCWVyciA9IC1FSU5WQUw7CisJCWVsc2UgeworCQkJZHAtPmRjY3BzX3BjcmxlbiA9IHZhbDsKKwkJCS8qIEZJWE1FOiBhZGQgZmVhdHVyZSBuZWdvdGlhdGlvbiwKKwkJCSAqIENoYW5nZUwoTWluaW11bUNoZWNrc3VtQ292ZXJhZ2UsIHZhbCkgKi8KKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJCWJyZWFrOwogCX0KLQkKKwogCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTU2OSwxMiArNTgyLDE3IEBACiAKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKIAljYXNlIERDQ1BfU09DS09QVF9QQUNLRVRfU0laRToKLQkJdmFsID0gZHAtPmRjY3BzX3BhY2tldF9zaXplOwotCQlsZW4gPSBzaXplb2YoZHAtPmRjY3BzX3BhY2tldF9zaXplKTsKLQkJYnJlYWs7CisJCURDQ1BfV0FSTigic29ja29wdChQQUNLRVRfU0laRSkgaXMgZGVwcmVjYXRlZDogZml4IHlvdXIgYXBwXG4iKTsKKwkJcmV0dXJuIDA7CiAJY2FzZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRToKIAkJcmV0dXJuIGRjY3BfZ2V0c29ja29wdF9zZXJ2aWNlKHNrLCBsZW4sCiAJCQkJCSAgICAgICAoX19iZTMyIF9fdXNlciAqKW9wdHZhbCwgb3B0bGVuKTsKKwljYXNlIERDQ1BfU09DS09QVF9TRU5EX0NTQ09WOgorCQl2YWwgPSBkcC0+ZGNjcHNfcGNzbGVuOworCQlicmVhazsKKwljYXNlIERDQ1BfU09DS09QVF9SRUNWX0NTQ09WOgorCQl2YWwgPSBkcC0+ZGNjcHNfcGNybGVuOworCQlicmVhazsKIAljYXNlIDEyOCAuLi4gMTkxOgogCQlyZXR1cm4gY2NpZF9oY19yeF9nZXRzb2Nrb3B0KGRwLT5kY2Nwc19oY19yeF9jY2lkLCBzaywgb3B0bmFtZSwKIAkJCQkJICAgICBsZW4sICh1MzIgX191c2VyICopb3B0dmFsLCBvcHRsZW4pOwpAQCAtNjMwLDYgKzY0OCwxMyBAQAogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJbG9ja19zb2NrKHNrKTsKKworCWlmIChzeXNjdGxfZGNjcF90eF9xbGVuICYmCisJICAgIChzay0+c2tfd3JpdGVfcXVldWUucWxlbiA+PSBzeXNjdGxfZGNjcF90eF9xbGVuKSkgeworCQlyYyA9IC1FQUdBSU47CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBub2Jsb2NrKTsKIAogCS8qCkBAIC03ODgsNyArODEzLDcgQEAKIAkJICogRklYTUU6IGhlcmUgaXQgcHJvYmFibHkgc2hvdWxkIGJlIHNrLT5za19wcm90LT5saXN0ZW5fc3RhcnQKIAkJICogc2VlIHRjcF9saXN0ZW5fc3RhcnQKIAkJICovCi0JCWVyciA9IGRjY3BfbGlzdGVuX3N0YXJ0KHNrKTsKKwkJZXJyID0gZGNjcF9saXN0ZW5fc3RhcnQoc2ssIGJhY2tsb2cpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMTAwOCw4ICsxMDMzLDcgQEAKIAl9IHdoaWxlICghZGNjcF9oYXNoaW5mby5laGFzaCAmJiAtLWVoYXNoX29yZGVyID4gMCk7CiAKIAlpZiAoIWRjY3BfaGFzaGluZm8uZWhhc2gpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiRmFpbGVkIHRvIGFsbG9jYXRlIERDQ1AgIgotCQkJCSAiZXN0YWJsaXNoZWQgaGFzaCB0YWJsZVxuIik7CisJCURDQ1BfQ1JJVCgiRmFpbGVkIHRvIGFsbG9jYXRlIERDQ1AgZXN0YWJsaXNoZWQgaGFzaCB0YWJsZSIpOwogCQlnb3RvIG91dF9mcmVlX2JpbmRfYnVja2V0X2NhY2hlcDsKIAl9CiAKQEAgLTEwMzEsNyArMTA1NSw3IEBACiAJfSB3aGlsZSAoIWRjY3BfaGFzaGluZm8uYmhhc2ggJiYgLS1iaGFzaF9vcmRlciA+PSAwKTsKIAogCWlmICghZGNjcF9oYXNoaW5mby5iaGFzaCkgewotCQlwcmludGsoS0VSTl9DUklUICJGYWlsZWQgdG8gYWxsb2NhdGUgRENDUCBiaW5kIGhhc2ggdGFibGVcbiIpOworCQlEQ0NQX0NSSVQoIkZhaWxlZCB0byBhbGxvY2F0ZSBEQ0NQIGJpbmQgaGFzaCB0YWJsZSIpOwogCQlnb3RvIG91dF9mcmVlX2RjY3BfZWhhc2g7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9zeXNjdGwuYyBiL25ldC9kY2NwL3N5c2N0bC5jCmluZGV4IDM4YmMxNTcuLmZkY2ZjYTMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3N5c2N0bC5jCisrKyBiL25ldC9kY2NwL3N5c2N0bC5jCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgImRjY3AuaCIKICNpbmNsdWRlICJmZWF0LmgiCiAKICNpZm5kZWYgQ09ORklHX1NZU0NUTApAQCAtMTksNTMgKzIwLDc2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3BfZGVmYXVsdF90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0RDQ1BfREVGQVVMVF9TRVFfV0lORE9XLAogCQkucHJvY25hbWUJPSAic2VxX3dpbmRvdyIsCi0JCS5kYXRhCQk9ICZkY2NwX2ZlYXRfZGVmYXVsdF9zZXF1ZW5jZV93aW5kb3csCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGRjY3BfZmVhdF9kZWZhdWx0X3NlcXVlbmNlX3dpbmRvdyksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdywKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3cpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0RDQ1BfREVGQVVMVF9SWF9DQ0lELAogCQkucHJvY25hbWUJPSAicnhfY2NpZCIsCi0JCS5kYXRhCQk9ICZkY2NwX2ZlYXRfZGVmYXVsdF9yeF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihkY2NwX2ZlYXRfZGVmYXVsdF9yeF9jY2lkKSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfcnhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkKSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9EQ0NQX0RFRkFVTFRfVFhfQ0NJRCwKIAkJLnByb2NuYW1lCT0gInR4X2NjaWQiLAotCQkuZGF0YQkJPSAmZGNjcF9mZWF0X2RlZmF1bHRfdHhfY2NpZCwKLQkJLm1heGxlbgkJPSBzaXplb2YoZGNjcF9mZWF0X2RlZmF1bHRfdHhfY2NpZCksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfdHhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfRENDUF9ERUZBVUxUX0FDS19SQVRJTywKIAkJLnByb2NuYW1lCT0gImFja19yYXRpbyIsCi0JCS5kYXRhCQk9ICZkY2NwX2ZlYXRfZGVmYXVsdF9hY2tfcmF0aW8sCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGRjY3BfZmVhdF9kZWZhdWx0X2Fja19yYXRpbyksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9mZWF0X2Fja19yYXRpbywKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfZmVhdF9hY2tfcmF0aW8pLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0RDQ1BfREVGQVVMVF9TRU5EX0FDS1ZFQywKIAkJLnByb2NuYW1lCT0gInNlbmRfYWNrdmVjIiwKLQkJLmRhdGEJCT0gJmRjY3BfZmVhdF9kZWZhdWx0X3NlbmRfYWNrX3ZlY3RvciwKLQkJLm1heGxlbgkJPSBzaXplb2YoZGNjcF9mZWF0X2RlZmF1bHRfc2VuZF9hY2tfdmVjdG9yKSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfc2VuZF9hY2tfdmVjdG9yLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3NlbmRfYWNrX3ZlY3RvciksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfRENDUF9ERUZBVUxUX1NFTkRfTkRQLAogCQkucHJvY25hbWUJPSAic2VuZF9uZHAiLAotCQkuZGF0YQkJPSAmZGNjcF9mZWF0X2RlZmF1bHRfc2VuZF9uZHBfY291bnQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGRjY3BfZmVhdF9kZWZhdWx0X3NlbmRfbmRwX2NvdW50KSwKKwkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfc2VuZF9uZHBfY291bnQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX2ZlYXRfc2VuZF9uZHBfY291bnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKIAl9LAorCXsKKwkJLnByb2NuYW1lCT0gInJlcXVlc3RfcmV0cmllcyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcyksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkucHJvY25hbWUJPSAicmV0cmllczEiLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcmV0cmllczEsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JldHJpZXMxKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJyZXRyaWVzMiIsCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXRyaWVzMiwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcmV0cmllczIpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLnByb2NuYW1lCT0gInR4X3FsZW4iLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfcWxlbiwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfcWxlbiksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCX0sCisKIAl7IC5jdGxfbmFtZSA9IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3RpbWVyLmMgYi9uZXQvZGNjcC90aW1lci5jCmluZGV4IDg0NDc3NDIuLmU4ZjUxOWUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3RpbWVyLmMKKysrIGIvbmV0L2RjY3AvdGltZXIuYwpAQCAtMTUsMTUgKzE1LDEwIEBACiAKICNpbmNsdWRlICJkY2NwLmgiCiAKLXN0YXRpYyB2b2lkIGRjY3Bfd3JpdGVfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKLXN0YXRpYyB2b2lkIGRjY3Bfa2VlcGFsaXZlX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBkY2NwX2RlbGFja190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwotCi12b2lkIGRjY3BfaW5pdF94bWl0X3RpbWVycyhzdHJ1Y3Qgc29jayAqc2spCi17Ci0JaW5ldF9jc2tfaW5pdF94bWl0X3RpbWVycyhzaywgJmRjY3Bfd3JpdGVfdGltZXIsICZkY2NwX2RlbGFja190aW1lciwKLQkJCQkgICZkY2NwX2tlZXBhbGl2ZV90aW1lcik7Ci19CisvKiBzeXNjdGwgdmFyaWFibGVzIGdvdmVybmluZyBudW1iZXJzIG9mIHJldHJhbnNtaXNzaW9uIGF0dGVtcHRzICovCitpbnQgIHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcwlfX3JlYWRfbW9zdGx5ID0gVENQX1NZTl9SRVRSSUVTOworaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMQkJX19yZWFkX21vc3RseSA9IFRDUF9SRVRSMTsKK2ludCAgc3lzY3RsX2RjY3BfcmV0cmllczIJCV9fcmVhZF9tb3N0bHkgPSBUQ1BfUkVUUjI7CiAKIHN0YXRpYyB2b2lkIGRjY3Bfd3JpdGVfZXJyKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTQ0LDExICszOSwxMCBAQAogCWlmIChzay0+c2tfc3RhdGUgPT0gRENDUF9SRVFVRVNUSU5HIHx8IHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKSB7CiAJCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzICE9IDApCiAJCQlkc3RfbmVnYXRpdmVfYWR2aWNlKCZzay0+c2tfZHN0X2NhY2hlKTsKLQkJcmV0cnlfdW50aWwgPSBpY3NrLT5pY3NrX3N5bl9yZXRyaWVzID8gOgotCQkJICAgIC8qIEZJWE1FISAqLyAzIC8qIEZJWE1FISBzeXNjdGxfdGNwX3N5bl9yZXRyaWVzICovOworCQlyZXRyeV91bnRpbCA9IGljc2stPmljc2tfc3luX3JldHJpZXMgPworCQkJICAgIDogc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOwogCX0gZWxzZSB7Ci0JCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID49Ci0JCSAgICAgLyogRklYTUUhIHN5c2N0bF90Y3BfcmV0cmllczEgKi8gNSAvKiBGSVhNRSEgKi8pIHsKKwkJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPj0gc3lzY3RsX2RjY3BfcmV0cmllczEpIHsKIAkJCS8qIE5PVEUuIGRyYWZ0LWlldGYtdGNwaW1wbC1wbXR1ZC0wMS50eHQgcmVxdWlyZXMgcG10dQogCQkJICAgYmxhY2sgaG9sZSBkZXRlY3Rpb24uIDotKAogCkBAIC03Miw3ICs2Niw3IEBACiAJCQlkc3RfbmVnYXRpdmVfYWR2aWNlKCZzay0+c2tfZHN0X2NhY2hlKTsKIAkJfQogCi0JCXJldHJ5X3VudGlsID0gLyogRklYTUUhICovIDE1IC8qIEZJWE1FISBzeXNjdGxfdGNwX3JldHJpZXMyICovOworCQlyZXRyeV91bnRpbCA9IHN5c2N0bF9kY2NwX3JldHJpZXMyOwogCQkvKgogCQkgKiBGSVhNRTogc2VlIHRjcF93cml0ZV90aW1vdXQgYW5kIHRjcF9vdXRfb2ZfcmVzb3VyY2VzCiAJCSAqLwpAQCAtODYsNTMgKzgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhpcyBpcyB0aGUgc2FtZSBhcyB0Y3BfZGVsYWNrX3RpbWVyLCBzYW5zIHByZXF1ZXVlICYgbWVtX3JlY2xhaW0gc3R1ZmYgKi8KLXN0YXRpYyB2b2lkIGRjY3BfZGVsYWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilkYXRhOwotCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQotCWJoX2xvY2tfc29jayhzayk7Ci0JaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKLQkJLyogVHJ5IGFnYWluIGxhdGVyLiAqLwotCQlpY3NrLT5pY3NrX2Fjay5ibG9ja2VkID0gMTsKLQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfREVMQVlFREFDS0xPQ0tFRCk7Ci0JCXNrX3Jlc2V0X3RpbWVyKHNrLCAmaWNzay0+aWNza19kZWxhY2tfdGltZXIsCi0JCQkgICAgICAgamlmZmllcyArIFRDUF9ERUxBQ0tfTUlOKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX0NMT1NFRCB8fAotCSAgICAhKGljc2stPmljc2tfYWNrLnBlbmRpbmcgJiBJQ1NLX0FDS19USU1FUikpCi0JCWdvdG8gb3V0OwotCWlmICh0aW1lX2FmdGVyKGljc2stPmljc2tfYWNrLnRpbWVvdXQsIGppZmZpZXMpKSB7Ci0JCXNrX3Jlc2V0X3RpbWVyKHNrLCAmaWNzay0+aWNza19kZWxhY2tfdGltZXIsCi0JCQkgICAgICAgaWNzay0+aWNza19hY2sudGltZW91dCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWljc2stPmljc2tfYWNrLnBlbmRpbmcgJj0gfklDU0tfQUNLX1RJTUVSOwotCi0JaWYgKGluZXRfY3NrX2Fja19zY2hlZHVsZWQoc2spKSB7Ci0JCWlmICghaWNzay0+aWNza19hY2sucGluZ3BvbmcpIHsKLQkJCS8qIERlbGF5ZWQgQUNLIG1pc3NlZDogaW5mbGF0ZSBBVE8uICovCi0JCQlpY3NrLT5pY3NrX2Fjay5hdG8gPSBtaW4oaWNzay0+aWNza19hY2suYXRvIDw8IDEsCi0JCQkJCQkgaWNzay0+aWNza19ydG8pOwotCQl9IGVsc2UgewotCQkJLyogRGVsYXllZCBBQ0sgbWlzc2VkOiBsZWF2ZSBwaW5ncG9uZyBtb2RlIGFuZAotCQkJICogZGVmbGF0ZSBBVE8uCi0JCQkgKi8KLQkJCWljc2stPmljc2tfYWNrLnBpbmdwb25nID0gMDsKLQkJCWljc2stPmljc2tfYWNrLmF0byA9IFRDUF9BVE9fTUlOOwotCQl9Ci0JCWRjY3Bfc2VuZF9hY2soc2spOwotCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9ERUxBWUVEQUNLUyk7Ci0JfQotb3V0OgotCWJoX3VubG9ja19zb2NrKHNrKTsKLQlzb2NrX3B1dChzayk7Ci19Ci0KIC8qCiAgKglUaGUgRENDUCByZXRyYW5zbWl0IHRpbWVyLgogICovCkBAIC0xNDIsNyArODksNyBAQAogCiAJLyogcmV0cmFuc21pdCB0aW1lciBpcyB1c2VkIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uIHRocm91Z2hvdXQKIAkgKiBjb25uZWN0aW9uLiAgSW4gdGhpcyBjYXNlLCBubyBwYWNrZXQgaXMgcmUtdHJhbnNtaXR0ZWQsIGJ1dCByYXRoZXIgYW4KLQkgKiBhY2sgaXMgZ2VuZXJhdGVkIGFuZCBwZW5kaW5nIGNoYW5nZXMgYXJlIHNwbGFjZWQgaW50byBpdHMgb3B0aW9ucy4KKwkgKiBhY2sgaXMgZ2VuZXJhdGVkIGFuZCBwZW5kaW5nIGNoYW5nZXMgYXJlIHBsYWNlZCBpbnRvIGl0cyBvcHRpb25zLgogCSAqLwogCWlmIChzay0+c2tfc2VuZF9oZWFkID09IE5VTEwpIHsKIAkJZGNjcF9wcl9kZWJ1ZygiZmVhdCBuZWdvdGlhdGlvbiByZXRyYW5zbWl0IHRpbWVvdXQgJXBcbiIsIHNrKTsKQEAgLTE1NCw5ICsxMDEsMTEgQEAKIAkvKgogCSAqIHNrLT5za19zZW5kX2hlYWQgaGFzIHRvIGhhdmUgb25lIHNrYiB3aXRoCiAJICogRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfdHlwZSBzZXQgdG8gb25lIG9mIHRoZSByZXRyYW5zbWl0dGFibGUgRENDUAotCSAqIHBhY2tldCB0eXBlcyAoUkVRVUVTVCwgUkVTUE9OU0UsIHRoZSBBQ0sgaW4gdGhlIDN3YXkgaGFuZHNoYWtlCi0JICogKFBBUlRPUEVOIHRpbWVyKSwgZXRjKS4KLQkgKi8KKwkgKiBwYWNrZXQgdHlwZXMuIFRoZSBvbmx5IHBhY2tldHMgZWxpZ2libGUgZm9yIHJldHJhbnNtaXNzaW9uIGFyZToKKwkgKiAJLS0gUmVxdWVzdHMgaW4gY2xpZW50LVJFUVVFU1QgIHN0YXRlIChzZWMuIDguMS4xKQorCSAqIAktLSBBY2tzICAgICBpbiBjbGllbnQtUEFSVE9QRU4gc3RhdGUgKHNlYy4gOC4xLjUpCisJICogCS0tIENsb3NlUmVxIGluIHNlcnZlci1DTE9TRVJFUSBzdGF0ZSAoc2VjLiA4LjMpCisJICogCS0tIENsb3NlICAgIGluICAgbm9kZS1DTE9TSU5HICBzdGF0ZSAoc2VjLiA4LjMpICAgICAgICAgICAgICAgICovCiAJQlVHX1RSQVAoc2stPnNrX3NlbmRfaGVhZCAhPSBOVUxMKTsKIAogCS8qIApAQCAtMTk0LDcgKzE0Myw3IEBACiAJaWNzay0+aWNza19ydG8gPSBtaW4oaWNzay0+aWNza19ydG8gPDwgMSwgRENDUF9SVE9fTUFYKTsKIAlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfUkVUUkFOUywgaWNzay0+aWNza19ydG8sCiAJCQkJICBEQ0NQX1JUT19NQVgpOwotCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID4gMyAvKiBGSVhNRTogc3lzY3RsX2RjY3BfcmV0cmllczEgKi8pCisJaWYgKGljc2stPmljc2tfcmV0cmFuc21pdHMgPiBzeXNjdGxfZGNjcF9yZXRyaWVzMSkKIAkJX19za19kc3RfcmVzZXQoc2spOwogb3V0OjsKIH0KQEAgLTI2NCwzICsyMTMsNTYgQEAKIAliaF91bmxvY2tfc29jayhzayk7CiAJc29ja19wdXQoc2spOwogfQorCisvKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRjcF9kZWxhY2tfdGltZXIsIHNhbnMgcHJlcXVldWUgJiBtZW1fcmVjbGFpbSBzdHVmZiAqLworc3RhdGljIHZvaWQgZGNjcF9kZWxhY2tfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCisJYmhfbG9ja19zb2NrKHNrKTsKKwlpZiAoc29ja19vd25lZF9ieV91c2VyKHNrKSkgeworCQkvKiBUcnkgYWdhaW4gbGF0ZXIuICovCisJCWljc2stPmljc2tfYWNrLmJsb2NrZWQgPSAxOworCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9ERUxBWUVEQUNLTE9DS0VEKTsKKwkJc2tfcmVzZXRfdGltZXIoc2ssICZpY3NrLT5pY3NrX2RlbGFja190aW1lciwKKwkJCSAgICAgICBqaWZmaWVzICsgVENQX0RFTEFDS19NSU4pOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfQ0xPU0VEIHx8CisJICAgICEoaWNzay0+aWNza19hY2sucGVuZGluZyAmIElDU0tfQUNLX1RJTUVSKSkKKwkJZ290byBvdXQ7CisJaWYgKHRpbWVfYWZ0ZXIoaWNzay0+aWNza19hY2sudGltZW91dCwgamlmZmllcykpIHsKKwkJc2tfcmVzZXRfdGltZXIoc2ssICZpY3NrLT5pY3NrX2RlbGFja190aW1lciwKKwkJCSAgICAgICBpY3NrLT5pY3NrX2Fjay50aW1lb3V0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWNzay0+aWNza19hY2sucGVuZGluZyAmPSB+SUNTS19BQ0tfVElNRVI7CisKKwlpZiAoaW5ldF9jc2tfYWNrX3NjaGVkdWxlZChzaykpIHsKKwkJaWYgKCFpY3NrLT5pY3NrX2Fjay5waW5ncG9uZykgeworCQkJLyogRGVsYXllZCBBQ0sgbWlzc2VkOiBpbmZsYXRlIEFUTy4gKi8KKwkJCWljc2stPmljc2tfYWNrLmF0byA9IG1pbihpY3NrLT5pY3NrX2Fjay5hdG8gPDwgMSwKKwkJCQkJCSBpY3NrLT5pY3NrX3J0byk7CisJCX0gZWxzZSB7CisJCQkvKiBEZWxheWVkIEFDSyBtaXNzZWQ6IGxlYXZlIHBpbmdwb25nIG1vZGUgYW5kCisJCQkgKiBkZWZsYXRlIEFUTy4KKwkJCSAqLworCQkJaWNzay0+aWNza19hY2sucGluZ3BvbmcgPSAwOworCQkJaWNzay0+aWNza19hY2suYXRvID0gVENQX0FUT19NSU47CisJCX0KKwkJZGNjcF9zZW5kX2Fjayhzayk7CisJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0RFTEFZRURBQ0tTKTsKKwl9CitvdXQ6CisJYmhfdW5sb2NrX3NvY2soc2spOworCXNvY2tfcHV0KHNrKTsKK30KKwordm9pZCBkY2NwX2luaXRfeG1pdF90aW1lcnMoc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfY3NrX2luaXRfeG1pdF90aW1lcnMoc2ssICZkY2NwX3dyaXRlX3RpbWVyLCAmZGNjcF9kZWxhY2tfdGltZXIsCisJCQkJICAmZGNjcF9rZWVwYWxpdmVfdGltZXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9LY29uZmlnIGIvbmV0L2RlY25ldC9LY29uZmlnCmluZGV4IDM2ZTcyY2IuLjc5MTRmZDYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvS2NvbmZpZworKysgYi9uZXQvZGVjbmV0L0tjb25maWcKQEAgLTQxLDExICs0MSwzIEBACiAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLWNvbmZpZyBERUNORVRfUk9VVEVfRldNQVJLCi0JYm9vbCAiREVDbmV0OiB1c2UgRldNQVJLIHZhbHVlIGFzIHJvdXRpbmcga2V5IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gREVDTkVUX1JPVVRFUiAmJiBORVRGSUxURVIKLQloZWxwCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBzcGVjaWZ5IGRpZmZlcmVudCByb3V0ZXMgZm9yCi0JICBwYWNrZXRzIHdpdGggZGlmZmVyZW50IEZXTUFSSyAoImZpcmV3YWxsaW5nIG1hcmsiKSB2YWx1ZXMKLQkgIChzZWUgaXBjaGFpbnMoOCksICItbSIgYXJndW1lbnQpLgotCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCAwMTg2MWZlLi4wYjlkNGM5IDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTQ3LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxuZXQvZmliX3J1bGVzLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvZG4uaD4KICNpbmNsdWRlIDxuZXQvZG5fZGV2Lmg+CiAjaW5jbHVkZSA8bmV0L2RuX3JvdXRlLmg+CkBAIC03Myw3ICs3Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZG5fZGV2ICpkbl9kZXZfY3JlYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqZXJyKTsKIHN0YXRpYyB2b2lkIGRuX2Rldl9kZWxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBydG1zZ19pZmEoaW50IGV2ZW50LCBzdHJ1Y3QgZG5faWZhZGRyICppZmEpOworc3RhdGljIHZvaWQgZG5faWZhZGRyX25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBkbl9pZmFkZHIgKmlmYSk7CiAKIHN0YXRpYyBpbnQgZG5fZXRoX3VwKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgZG5fZXRoX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC0yNTUsMTIgKzI1NSwxMCBAQAogCXN0cnVjdCBkbl9kZXZfc3lzY3RsX3RhYmxlICp0OwogCWludCBpOwogCi0JdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJdCA9IGttZW1kdXAoJmRuX2Rldl9zeXNjdGwsIHNpemVvZigqdCksIEdGUF9LRVJORUwpOwogCWlmICh0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCW1lbWNweSh0LCAmZG5fZGV2X3N5c2N0bCwgc2l6ZW9mKCp0KSk7Ci0KIAlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHQtPmRuX2Rldl92YXJzKSAtIDE7IGkrKykgewogCQlsb25nIG9mZnNldCA9IChsb25nKXQtPmRuX2Rldl92YXJzW2ldLmRhdGE7CiAJCXQtPmRuX2Rldl92YXJzW2ldLmRhdGEgPSAoKGNoYXIgKilwYXJtcykgKyBvZmZzZXQ7CkBAIC00NDIsNyArNDQwLDcgQEAKIAkJfQogCX0KIAotCXJ0bXNnX2lmYShSVE1fREVMQUREUiwgaWZhMSk7CisJZG5faWZhZGRyX25vdGlmeShSVE1fREVMQUREUiwgaWZhMSk7CiAJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZG5hZGRyX2NoYWluLCBORVRERVZfRE9XTiwgaWZhMSk7CiAJaWYgKGRlc3Ryb3kpIHsKIAkJZG5fZGV2X2ZyZWVfaWZhKGlmYTEpOwpAQCAtNDc3LDcgKzQ3NSw3IEBACiAJaWZhLT5pZmFfbmV4dCA9IGRuX2RiLT5pZmFfbGlzdDsKIAlkbl9kYi0+aWZhX2xpc3QgPSBpZmE7CiAKLQlydG1zZ19pZmEoUlRNX05FV0FERFIsIGlmYSk7CisJZG5faWZhZGRyX25vdGlmeShSVE1fTkVXQUREUiwgaWZhKTsKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZkbmFkZHJfY2hhaW4sIE5FVERFVl9VUCwgaWZhKTsKIAogCXJldHVybiAwOwpAQCAtNjQ3LDQxICs2NDUsNjIgQEAKIAlyZXR1cm4gZG5fZGV2OwogfQogCi1zdGF0aWMgaW50IGRuX2Rldl9ydG1fZGVsYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQorc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRuX2lmYV9wb2xpY3lbSUZBX01BWCsxXSBfX3JlYWRfbW9zdGx5ID0geworCVtJRkFfQUREUkVTU10JCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKKwlbSUZBX0xPQ0FMXQkJPSB7IC50eXBlID0gTkxBX1UxNiB9LAorCVtJRkFfTEFCRUxdCQk9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLAorCQkJCSAgICAubGVuID0gSUZOQU1TSVogLSAxIH0sCit9OworCitzdGF0aWMgaW50IGRuX25sX2RlbGFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgcnRhdHRyICoqcnRhID0gYXJnOworCXN0cnVjdCBubGF0dHIgKnRiW0lGQV9NQVgrMV07CiAJc3RydWN0IGRuX2RldiAqZG5fZGI7Ci0Jc3RydWN0IGlmYWRkcm1zZyAqaWZtID0gTkxNU0dfREFUQShubGgpOworCXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmEsICoqaWZhcDsKKwlpbnQgZXJyID0gLUVBRERSTk9UQVZBSUw7CiAKKwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZigqaWZtKSwgdGIsIElGQV9NQVgsIGRuX2lmYV9wb2xpY3kpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm91dDsKKworCWlmbSA9IG5sbXNnX2RhdGEobmxoKTsKIAlpZiAoKGRuX2RiID0gZG5fZGV2X2J5X2luZGV4KGlmbS0+aWZhX2luZGV4KSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCQlnb3RvIGVycm91dDsKIAotCWZvcihpZmFwID0gJmRuX2RiLT5pZmFfbGlzdDsgKGlmYT0qaWZhcCkgIT0gTlVMTDsgaWZhcCA9ICZpZmEtPmlmYV9uZXh0KSB7Ci0JCXZvaWQgKnRtcCA9IHJ0YVtJRkFfTE9DQUwtMV07Ci0JCWlmICgodG1wICYmIG1lbWNtcChSVEFfREFUQSh0bXApLCAmaWZhLT5pZmFfbG9jYWwsIDIpKSB8fAotCQkgICAgKHJ0YVtJRkFfTEFCRUwtMV0gJiYgcnRhdHRyX3N0cmNtcChydGFbSUZBX0xBQkVMLTFdLCBpZmEtPmlmYV9sYWJlbCkpKQorCWZvciAoaWZhcCA9ICZkbl9kYi0+aWZhX2xpc3Q7IChpZmEgPSAqaWZhcCk7IGlmYXAgPSAmaWZhLT5pZmFfbmV4dCkgeworCQlpZiAodGJbSUZBX0xPQ0FMXSAmJgorCQkgICAgbmxhX21lbWNtcCh0YltJRkFfTE9DQUxdLCAmaWZhLT5pZmFfbG9jYWwsIDIpKQorCQkJY29udGludWU7CisKKwkJaWYgKHRiW0lGQV9MQUJFTF0gJiYgbmxhX3N0cmNtcCh0YltJRkFfTEFCRUxdLCBpZmEtPmlmYV9sYWJlbCkpCiAJCQljb250aW51ZTsKIAogCQlkbl9kZXZfZGVsX2lmYShkbl9kYiwgaWZhcCwgMSk7CiAJCXJldHVybiAwOwogCX0KIAotCXJldHVybiAtRUFERFJOT1RBVkFJTDsKK2Vycm91dDoKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRuX2Rldl9ydG1fbmV3YWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBkbl9ubF9uZXdhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICphcmcpCiB7Ci0Jc3RydWN0IHJ0YXR0ciAqKnJ0YSA9IGFyZzsKKwlzdHJ1Y3QgbmxhdHRyICp0YltJRkFfTUFYKzFdOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRuX2RldiAqZG5fZGI7Ci0Jc3RydWN0IGlmYWRkcm1zZyAqaWZtID0gTkxNU0dfREFUQShubGgpOworCXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7Ci0JaW50IHJ2OworCWludCBlcnI7CiAKLQlpZiAocnRhW0lGQV9MT0NBTC0xXSA9PSBOVUxMKQorCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCppZm0pLCB0YiwgSUZBX01BWCwgZG5faWZhX3BvbGljeSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAodGJbSUZBX0xPQ0FMXSA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmbSA9IG5sbXNnX2RhdGEobmxoKTsKIAlpZiAoKGRldiA9IF9fZGV2X2dldF9ieV9pbmRleChpZm0tPmlmYV9pbmRleCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC02OTUsNjkgKzcxNCw3NyBAQAogCWlmICgoaWZhID0gZG5fZGV2X2FsbG9jX2lmYSgpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQlpZiAoIXJ0YVtJRkFfQUREUkVTUyAtIDFdKQotCQlydGFbSUZBX0FERFJFU1MgLSAxXSA9IHJ0YVtJRkFfTE9DQUwgLSAxXTsKLQltZW1jcHkoJmlmYS0+aWZhX2xvY2FsLCBSVEFfREFUQShydGFbSUZBX0xPQ0FMLTFdKSwgMik7Ci0JbWVtY3B5KCZpZmEtPmlmYV9hZGRyZXNzLCBSVEFfREFUQShydGFbSUZBX0FERFJFU1MtMV0pLCAyKTsKKwlpZiAodGJbSUZBX0FERFJFU1NdID09IE5VTEwpCisJCXRiW0lGQV9BRERSRVNTXSA9IHRiW0lGQV9MT0NBTF07CisKKwlpZmEtPmlmYV9sb2NhbCA9IG5sYV9nZXRfbGUxNih0YltJRkFfTE9DQUxdKTsKKwlpZmEtPmlmYV9hZGRyZXNzID0gbmxhX2dldF9sZTE2KHRiW0lGQV9BRERSRVNTXSk7CiAJaWZhLT5pZmFfZmxhZ3MgPSBpZm0tPmlmYV9mbGFnczsKIAlpZmEtPmlmYV9zY29wZSA9IGlmbS0+aWZhX3Njb3BlOwogCWlmYS0+aWZhX2RldiA9IGRuX2RiOwotCWlmIChydGFbSUZBX0xBQkVMLTFdKQotCQlydGF0dHJfc3RybGNweShpZmEtPmlmYV9sYWJlbCwgcnRhW0lGQV9MQUJFTC0xXSwgSUZOQU1TSVopOworCisJaWYgKHRiW0lGQV9MQUJFTF0pCisJCW5sYV9zdHJsY3B5KGlmYS0+aWZhX2xhYmVsLCB0YltJRkFfTEFCRUxdLCBJRk5BTVNJWik7CiAJZWxzZQogCQltZW1jcHkoaWZhLT5pZmFfbGFiZWwsIGRldi0+bmFtZSwgSUZOQU1TSVopOwogCi0JcnYgPSBkbl9kZXZfaW5zZXJ0X2lmYShkbl9kYiwgaWZhKTsKLQlpZiAocnYpCisJZXJyID0gZG5fZGV2X2luc2VydF9pZmEoZG5fZGIsIGlmYSk7CisJaWYgKGVycikKIAkJZG5fZGV2X2ZyZWVfaWZhKGlmYSk7Ci0JcmV0dXJuIHJ2OworCisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBkbl9kZXZfZmlsbF9pZmFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGRuX2lmYWRkciAqaWZhLAotCQkJCXUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzKQorc3RhdGljIGlubGluZSBzaXplX3QgZG5faWZhZGRyX25sbXNnX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKElGTkFNU0laKSAvKiBJRkFfTEFCRUwgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgyKSAvKiBJRkFfQUREUkVTUyAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDIpOyAvKiBJRkFfTE9DQUwgKi8KK30KKworc3RhdGljIGludCBkbl9ubF9maWxsX2lmYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZG5faWZhZGRyICppZmEsCisJCQkgICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBpZmFkZHJtc2cgKmlmbTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKLQl1bnNpZ25lZCBjaGFyICpiID0gc2tiLT50YWlsOwogCi0JbmxoID0gTkxNU0dfTkVXKHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKmlmbSksIGZsYWdzKTsKLQlpZm0gPSBOTE1TR19EQVRBKG5saCk7CisJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKmlmbSksIGZsYWdzKTsKKwlpZiAobmxoID09IE5VTEwpCisJCXJldHVybiAtRU5PQlVGUzsKIAorCWlmbSA9IG5sbXNnX2RhdGEobmxoKTsKIAlpZm0tPmlmYV9mYW1pbHkgPSBBRl9ERUNuZXQ7CiAJaWZtLT5pZmFfcHJlZml4bGVuID0gMTY7CiAJaWZtLT5pZmFfZmxhZ3MgPSBpZmEtPmlmYV9mbGFncyB8IElGQV9GX1BFUk1BTkVOVDsKIAlpZm0tPmlmYV9zY29wZSA9IGlmYS0+aWZhX3Njb3BlOwogCWlmbS0+aWZhX2luZGV4ID0gaWZhLT5pZmFfZGV2LT5kZXYtPmlmaW5kZXg7Ci0JaWYgKGlmYS0+aWZhX2FkZHJlc3MpCi0JCVJUQV9QVVQoc2tiLCBJRkFfQUREUkVTUywgMiwgJmlmYS0+aWZhX2FkZHJlc3MpOwotCWlmIChpZmEtPmlmYV9sb2NhbCkKLQkJUlRBX1BVVChza2IsIElGQV9MT0NBTCwgMiwgJmlmYS0+aWZhX2xvY2FsKTsKLQlpZiAoaWZhLT5pZmFfbGFiZWxbMF0pCi0JCVJUQV9QVVQoc2tiLCBJRkFfTEFCRUwsIElGTkFNU0laLCAmaWZhLT5pZmFfbGFiZWwpOwotCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKLQlyZXR1cm4gc2tiLT5sZW47CiAKLW5sbXNnX2ZhaWx1cmU6Ci1ydGF0dHJfZmFpbHVyZToKLSAgICAgICAgc2tiX3RyaW0oc2tiLCBiIC0gc2tiLT5kYXRhKTsKLSAgICAgICAgcmV0dXJuIC0xOworCWlmIChpZmEtPmlmYV9hZGRyZXNzKQorCQlOTEFfUFVUX0xFMTYoc2tiLCBJRkFfQUREUkVTUywgaWZhLT5pZmFfYWRkcmVzcyk7CisJaWYgKGlmYS0+aWZhX2xvY2FsKQorCQlOTEFfUFVUX0xFMTYoc2tiLCBJRkFfTE9DQUwsIGlmYS0+aWZhX2xvY2FsKTsKKwlpZiAoaWZhLT5pZmFfbGFiZWxbMF0pCisJCU5MQV9QVVRfU1RSSU5HKHNrYiwgSUZBX0xBQkVMLCBpZmEtPmlmYV9sYWJlbCk7CisKKwlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiBubG1zZ19jYW5jZWwoc2tiLCBubGgpOwogfQogCi1zdGF0aWMgdm9pZCBydG1zZ19pZmEoaW50IGV2ZW50LCBzdHJ1Y3QgZG5faWZhZGRyICppZmEpCitzdGF0aWMgdm9pZCBkbl9pZmFkZHJfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGRuX2lmYWRkciAqaWZhKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IHBheWxvYWQgPSBzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykgKyAxMjg7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCi0Jc2tiID0gYWxsb2Nfc2tiKG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCksIEdGUF9LRVJORUwpOworCXNrYiA9IGFsbG9jX3NrYihkbl9pZmFkZHJfbmxtc2dfc2l6ZSgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OwogCi0JZXJyID0gZG5fZGV2X2ZpbGxfaWZhZGRyKHNrYiwgaWZhLCAwLCAwLCBldmVudCwgMCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gZXJyb3V0OwotCX0KKwllcnIgPSBkbl9ubF9maWxsX2lmYWRkcihza2IsIGlmYSwgMCwgMCwgZXZlbnQsIDApOworCS8qIGZhaWx1cmUgaW1wbGllcyBCVUcgaW4gZG5faWZhZGRyX25sbXNnX3NpemUoKSAqLworCUJVR19PTihlcnIgPCAwKTsKIAogCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgMCwgUlROTEdSUF9ERUNuZXRfSUZBRERSLCBOVUxMLCBHRlBfS0VSTkVMKTsKIGVycm91dDoKQEAgLTc2NSwzOSArNzkyLDQzIEBACiAJCXJ0bmxfc2V0X3NrX2VycihSVE5MR1JQX0RFQ25ldF9JRkFERFIsIGVycik7CiB9CiAKLXN0YXRpYyBpbnQgZG5fZGV2X2R1bXBfaWZhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3N0YXRpYyBpbnQgZG5fbmxfZHVtcF9pZmFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewotCWludCBpZHgsIGRuX2lkeDsKLQlpbnQgc19pZHgsIHNfZG5faWR4OworCWludCBpZHgsIGRuX2lkeCA9IDAsIHNraXBfbmRldnMsIHNraXBfbmFkZHI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZG5fZGV2ICpkbl9kYjsKIAlzdHJ1Y3QgZG5faWZhZGRyICppZmE7CiAKLQlzX2lkeCA9IGNiLT5hcmdzWzBdOwotCXNfZG5faWR4ID0gZG5faWR4ID0gY2ItPmFyZ3NbMV07CisJc2tpcF9uZGV2cyA9IGNiLT5hcmdzWzBdOworCXNraXBfbmFkZHIgPSBjYi0+YXJnc1sxXTsKKwogCXJlYWRfbG9jaygmZGV2X2Jhc2VfbG9jayk7Ci0JZm9yKGRldiA9IGRldl9iYXNlLCBpZHggPSAwOyBkZXY7IGRldiA9IGRldi0+bmV4dCwgaWR4KyspIHsKLQkJaWYgKGlkeCA8IHNfaWR4KQorCWZvciAoZGV2ID0gZGV2X2Jhc2UsIGlkeCA9IDA7IGRldjsgZGV2ID0gZGV2LT5uZXh0LCBpZHgrKykgeworCQlpZiAoaWR4IDwgc2tpcF9uZGV2cykKIAkJCWNvbnRpbnVlOwotCQlpZiAoaWR4ID4gc19pZHgpCi0JCQlzX2RuX2lkeCA9IDA7CisJCWVsc2UgaWYgKGlkeCA+IHNraXBfbmRldnMpIHsKKwkJCS8qIE9ubHkgc2tpcCBvdmVyIGFkZHJlc3NlcyBmb3IgZmlyc3QgZGV2IGR1bXBlZAorCQkJICogaW4gdGhpcyBpdGVyYXRpb24gKGlkeCA9PSBza2lwX25kZXZzKSAqLworCQkJc2tpcF9uYWRkciA9IDA7CisJCX0KKwogCQlpZiAoKGRuX2RiID0gZGV2LT5kbl9wdHIpID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQlmb3IoaWZhID0gZG5fZGItPmlmYV9saXN0LCBkbl9pZHggPSAwOyBpZmE7IGlmYSA9IGlmYS0+aWZhX25leHQsIGRuX2lkeCsrKSB7Ci0JCQlpZiAoZG5faWR4IDwgc19kbl9pZHgpCisJCWZvciAoaWZhID0gZG5fZGItPmlmYV9saXN0LCBkbl9pZHggPSAwOyBpZmE7CisJCSAgICAgaWZhID0gaWZhLT5pZmFfbmV4dCwgZG5faWR4KyspIHsKKwkJCWlmIChkbl9pZHggPCBza2lwX25hZGRyKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoZG5fZGV2X2ZpbGxfaWZhZGRyKHNrYiwgaWZhLAotCQkJCQkgICAgICAgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCi0JCQkJCSAgICAgICBjYi0+bmxoLT5ubG1zZ19zZXEsCi0JCQkJCSAgICAgICBSVE1fTkVXQUREUiwKLQkJCQkJICAgICAgIE5MTV9GX01VTFRJKSA8PSAwKQorCQkJaWYgKGRuX25sX2ZpbGxfaWZhZGRyKHNrYiwgaWZhLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKKwkJCQkJICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXQUREUiwKKwkJCQkJICAgICAgTkxNX0ZfTVVMVEkpIDwgMCkKIAkJCQlnb3RvIGRvbmU7CiAJCX0KIAl9CiBkb25lOgogCXJlYWRfdW5sb2NrKCZkZXZfYmFzZV9sb2NrKTsKKwogCWNiLT5hcmdzWzBdID0gaWR4OwogCWNiLT5hcmdzWzFdID0gZG5faWR4OwogCkBAIC0xNDE0LDkgKzE0NDUsOSBAQAogCiBzdGF0aWMgc3RydWN0IHJ0bmV0bGlua19saW5rIGRuZXRfcnRuZXRsaW5rX3RhYmxlW1JUTV9OUl9NU0dUWVBFU10gPQogewotCVtSVE1fTkVXQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gZG5fZGV2X3J0bV9uZXdhZGRyLAl9LAotCVtSVE1fREVMQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gZG5fZGV2X3J0bV9kZWxhZGRyLAl9LAotCVtSVE1fR0VUQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kdW1waXQJPSBkbl9kZXZfZHVtcF9pZmFkZHIsCX0sCisJW1JUTV9ORVdBRERSICAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBkbl9ubF9uZXdhZGRyLAl9LAorCVtSVE1fREVMQUREUiAgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gZG5fbmxfZGVsYWRkciwJfSwKKwlbUlRNX0dFVEFERFIgIC0gUlRNX0JBU0VdID0geyAuZHVtcGl0CT0gZG5fbmxfZHVtcF9pZmFkZHIsCX0sCiAjaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURVIKIAlbUlRNX05FV1JPVVRFIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGRuX2ZpYl9ydG1fbmV3cm91dGUsCX0sCiAJW1JUTV9ERUxST1VURSAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBkbl9maWJfcnRtX2RlbHJvdXRlLAl9LApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9uZWlnaC5jIGIvbmV0L2RlY25ldC9kbl9uZWlnaC5jCmluZGV4IGZmMGViZTkuLjczMjJiYjMgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbmVpZ2guYworKysgYi9uZXQvZGVjbmV0L2RuX25laWdoLmMKQEAgLTU5MSw3ICs1OTEsNiBAQAogCiAJc2VxICAgICAgICAgID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXNlcS0+cHJpdmF0ZSA9IHM7Ci0JbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOwogb3V0OgogCXJldHVybiByYzsKIG91dF9rZnJlZToKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMgYi9uZXQvZGVjbmV0L2RuX25zcF9pbi5jCmluZGV4IDc2ODNkNGYuLjM5YTZjZjcgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fbnNwX2luLmMKKysrIGIvbmV0L2RlY25ldC9kbl9uc3BfaW4uYwpAQCAtODA0LDcgKzgwNCw3IEBACiAJCQkJZ290byBmcmVlX291dDsKIAkJfQogCi0JCXJldHVybiBza19yZWNlaXZlX3NrYihzaywgc2tiKTsKKwkJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IsIDApOwogCX0KIAogCXJldHVybiBkbl9uc3Bfbm9fc29ja2V0KHNrYiwgcmVhc29uKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcm91dGUuYyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwppbmRleCAyMzQ4OWY3Li45ODgxOTMzIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKKysrIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCkBAIC0yNjksOSArMjY5LDcgQEAKIHsKIAlyZXR1cm4gKChmbDEtPm5sX3UuZG5fdS5kYWRkciBeIGZsMi0+bmxfdS5kbl91LmRhZGRyKSB8CiAJCShmbDEtPm5sX3UuZG5fdS5zYWRkciBeIGZsMi0+bmxfdS5kbl91LnNhZGRyKSB8Ci0jaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUksKLQkJKGZsMS0+bmxfdS5kbl91LmZ3bWFyayBeIGZsMi0+bmxfdS5kbl91LmZ3bWFyaykgfAotI2VuZGlmCisJCShmbDEtPm1hcmsgXiBmbDItPm1hcmspIHwKIAkJKGZsMS0+bmxfdS5kbl91LnNjb3BlIF4gZmwyLT5ubF91LmRuX3Uuc2NvcGUpIHwKIAkJKGZsMS0+b2lmIF4gZmwyLT5vaWYpIHwKIAkJKGZsMS0+aWlmIF4gZmwyLT5paWYpKSA9PSAwOwpAQCAtODgyLDEwICs4ODAsOCBAQAogCQkJCSAgICAgIHsgLmRhZGRyID0gb2xkZmxwLT5mbGRfZHN0LAogCQkJCQkuc2FkZHIgPSBvbGRmbHAtPmZsZF9zcmMsCiAJCQkJCS5zY29wZSA9IFJUX1NDT1BFX1VOSVZFUlNFLAotI2lmZGVmIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLCi0JCQkJCS5md21hcmsgPSBvbGRmbHAtPmZsZF9md21hcmsKLSNlbmRpZgogCQkJCSAgICAgfSB9LAorCQkJICAgIC5tYXJrID0gb2xkZmxwLT5tYXJrLAogCQkJICAgIC5paWYgPSBsb29wYmFja19kZXYuaWZpbmRleCwKIAkJCSAgICAub2lmID0gb2xkZmxwLT5vaWYgfTsKIAlzdHJ1Y3QgZG5fcm91dGUgKnJ0ID0gTlVMTDsKQEAgLTkwMyw3ICs4OTksNyBAQAogCQkgICAgICAgImRuX3JvdXRlX291dHB1dF9zbG93OiBkc3Q9JTA0eCBzcmM9JTA0eCBtYXJrPSVkIgogCQkgICAgICAgIiBpaWY9JWQgb2lmPSVkXG4iLCBkbl9udG9ocyhvbGRmbHAtPmZsZF9kc3QpLAogCQkgICAgICAgZG5fbnRvaHMob2xkZmxwLT5mbGRfc3JjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgb2xkZmxwLT5mbGRfZndtYXJrLCBsb29wYmFja19kZXYuaWZpbmRleCwgb2xkZmxwLT5vaWYpOworICAgICAgICAgICAgICAgICAgICAgICBvbGRmbHAtPm1hcmssIGxvb3BiYWNrX2Rldi5pZmluZGV4LCBvbGRmbHAtPm9pZik7CiAKIAkvKiBJZiB3ZSBoYXZlIGFuIG91dHB1dCBpbnRlcmZhY2UsIHZlcmlmeSBpdHMgYSBERUNuZXQgZGV2aWNlICovCiAJaWYgKG9sZGZscC0+b2lmKSB7CkBAIC0xMTA4LDkgKzExMDQsNyBAQAogCXJ0LT5mbC5mbGRfZHN0ICAgID0gb2xkZmxwLT5mbGRfZHN0OwogCXJ0LT5mbC5vaWYgICAgICAgID0gb2xkZmxwLT5vaWY7CiAJcnQtPmZsLmlpZiAgICAgICAgPSAwOwotI2lmZGVmIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLCi0JcnQtPmZsLmZsZF9md21hcmsgPSBvbGRmbHAtPmZsZF9md21hcms7Ci0jZW5kaWYKKwlydC0+ZmwubWFyayAgICAgICA9IG9sZGZscC0+bWFyazsKIAogCXJ0LT5ydF9zYWRkciAgICAgID0gZmwuZmxkX3NyYzsKIAlydC0+cnRfZGFkZHIgICAgICA9IGZsLmZsZF9kc3Q7CkBAIC0xMTc4LDkgKzExNzIsNyBAQAogCQkJcnQgPSByY3VfZGVyZWZlcmVuY2UocnQtPnUucnRfbmV4dCkpIHsKIAkJCWlmICgoZmxwLT5mbGRfZHN0ID09IHJ0LT5mbC5mbGRfZHN0KSAmJgogCQkJICAgIChmbHAtPmZsZF9zcmMgPT0gcnQtPmZsLmZsZF9zcmMpICYmCi0jaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUksKLQkJCSAgICAoZmxwLT5mbGRfZndtYXJrID09IHJ0LT5mbC5mbGRfZndtYXJrKSAmJgotI2VuZGlmCisJCQkgICAgKGZscC0+bWFyayA9PSBydC0+ZmwubWFyaykgJiYKIAkJCSAgICAocnQtPmZsLmlpZiA9PSAwKSAmJgogCQkJICAgIChydC0+Zmwub2lmID09IGZscC0+b2lmKSkgewogCQkJCXJ0LT51LmRzdC5sYXN0dXNlID0gamlmZmllczsKQEAgLTEyMzUsMTAgKzEyMjcsOCBAQAogCQkJCSAgICAgeyAuZGFkZHIgPSBjYi0+ZHN0LAogCQkJCSAgICAgICAuc2FkZHIgPSBjYi0+c3JjLAogCQkJCSAgICAgICAuc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRSwKLSNpZmRlZiBDT05GSUdfREVDTkVUX1JPVVRFX0ZXTUFSSwotCQkJCSAgICAgICAuZndtYXJrID0gc2tiLT5uZm1hcmsKLSNlbmRpZgogCQkJCSAgICB9IH0sCisJCQkgICAgLm1hcmsgPSBza2ItPm1hcmssCiAJCQkgICAgLmlpZiA9IHNrYi0+ZGV2LT5pZmluZGV4IH07CiAJc3RydWN0IGRuX2ZpYl9yZXMgcmVzID0geyAuZmkgPSBOVUxMLCAudHlwZSA9IFJUTl9VTlJFQUNIQUJMRSB9OwogCWludCBlcnIgPSAtRUlOVkFMOwpAQCAtMTM4NSw3ICsxMzc1LDcgQEAKIAlydC0+ZmwuZmxkX2RzdCAgICA9IGNiLT5kc3Q7CiAJcnQtPmZsLm9pZiAgICAgICAgPSAwOwogCXJ0LT5mbC5paWYgICAgICAgID0gaW5fZGV2LT5pZmluZGV4OwotCXJ0LT5mbC5mbGRfZndtYXJrID0gZmwuZmxkX2Z3bWFyazsKKwlydC0+ZmwubWFyayAgICAgICA9IGZsLm1hcms7CiAKIAlydC0+dS5kc3QuZmxhZ3MgPSBEU1RfSE9TVDsKIAlydC0+dS5kc3QubmVpZ2hib3VyID0gbmVpZ2g7CkBAIC0xNDU3LDkgKzE0NDcsNyBAQAogCQlpZiAoKHJ0LT5mbC5mbGRfc3JjID09IGNiLT5zcmMpICYmCiAJIAkgICAgKHJ0LT5mbC5mbGRfZHN0ID09IGNiLT5kc3QpICYmCiAJCSAgICAocnQtPmZsLm9pZiA9PSAwKSAmJgotI2lmZGVmIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLCi0JCSAgICAocnQtPmZsLmZsZF9md21hcmsgPT0gc2tiLT5uZm1hcmspICYmCi0jZW5kaWYKKwkJICAgIChydC0+ZmwubWFyayA9PSBza2ItPm1hcmspICYmCiAJCSAgICAocnQtPmZsLmlpZiA9PSBjYi0+aWlmKSkgewogCQkJcnQtPnUuZHN0Lmxhc3R1c2UgPSBqaWZmaWVzOwogCQkJZHN0X2hvbGQoJnJ0LT51LmRzdCk7CkBAIC0xNDgxLDcgKzE0NjksNyBAQAogCXN0cnVjdCBydG1zZyAqcjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAl1bnNpZ25lZCBjaGFyICpiID0gc2tiLT50YWlsOwotCXN0cnVjdCBydGFfY2FjaGVpbmZvIGNpOworCWxvbmcgZXhwaXJlczsKIAogCW5saCA9IE5MTVNHX05FVyhza2IsIHBpZCwgc2VxLCBldmVudCwgc2l6ZW9mKCpyKSwgZmxhZ3MpOwogCXIgPSBOTE1TR19EQVRBKG5saCk7CkBAIC0xNTE0LDE2ICsxNTAyLDEwIEBACiAJCVJUQV9QVVQoc2tiLCBSVEFfR0FURVdBWSwgMiwgJnJ0LT5ydF9nYXRld2F5KTsKIAlpZiAocnRuZXRsaW5rX3B1dF9tZXRyaWNzKHNrYiwgcnQtPnUuZHN0Lm1ldHJpY3MpIDwgMCkKIAkJZ290byBydGF0dHJfZmFpbHVyZTsKLQljaS5ydGFfbGFzdHVzZSA9IGppZmZpZXNfdG9fY2xvY2tfdChqaWZmaWVzIC0gcnQtPnUuZHN0Lmxhc3R1c2UpOwotCWNpLnJ0YV91c2VkICAgICA9IHJ0LT51LmRzdC5fX3VzZTsKLQljaS5ydGFfY2xudHJlZiAgPSBhdG9taWNfcmVhZCgmcnQtPnUuZHN0Ll9fcmVmY250KTsKLQlpZiAocnQtPnUuZHN0LmV4cGlyZXMpCi0JCWNpLnJ0YV9leHBpcmVzID0gamlmZmllc190b19jbG9ja190KHJ0LT51LmRzdC5leHBpcmVzIC0gamlmZmllcyk7Ci0JZWxzZQotCQljaS5ydGFfZXhwaXJlcyA9IDA7Ci0JY2kucnRhX2Vycm9yICAgID0gcnQtPnUuZHN0LmVycm9yOwotCWNpLnJ0YV9pZCAgICAgICA9IGNpLnJ0YV90cyA9IGNpLnJ0YV90c2FnZSA9IDA7Ci0JUlRBX1BVVChza2IsIFJUQV9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSk7CisJZXhwaXJlcyA9IHJ0LT51LmRzdC5leHBpcmVzID8gcnQtPnUuZHN0LmV4cGlyZXMgLSBqaWZmaWVzIDogMDsKKwlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgJnJ0LT51LmRzdCwgMCwgMCwgMCwgZXhwaXJlcywKKwkJCSAgICAgICBydC0+dS5kc3QuZXJyb3IpIDwgMCkKKwkJZ290byBydGF0dHJfZmFpbHVyZTsKIAlpZiAocnQtPmZsLmlpZikKIAkJUlRBX1BVVChza2IsIFJUQV9JSUYsIHNpemVvZihpbnQpLCAmcnQtPmZsLmlpZik7CiAKQEAgLTE2MDQsOCArMTU4Niw2IEBACiAJaWYgKHJ0bS0+cnRtX2ZsYWdzICYgUlRNX0ZfTk9USUZZKQogCQlydC0+cnRfZmxhZ3MgfD0gUlRDRl9OT1RJRlk7CiAKLQlORVRMSU5LX0NCKHNrYikuZHN0X3BpZCA9IE5FVExJTktfQ0IoaW5fc2tiKS5waWQ7Ci0KIAllcnIgPSBkbl9ydF9maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFLCAwLCAwKTsKIAogCWlmIChlcnIgPT0gMCkKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fcnVsZXMuYyBiL25ldC9kZWNuZXQvZG5fcnVsZXMuYwppbmRleCA1OTBlMGE3Li5lMzJkMGMzIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX3J1bGVzLmMKKysrIGIvbmV0L2RlY25ldC9kbl9ydWxlcy5jCkBAIC00NSwxMCArNDUsNiBAQAogCV9fbGUxNgkJCWRzdG1hc2s7CiAJX19sZTE2CQkJc3JjbWFwOwogCXU4CQkJZmxhZ3M7Ci0jaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUksKLQl1MzIJCQlmd21hcms7Ci0JdTMyCQkJZndtYXNrOwotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IGRuX2ZpYl9ydWxlIGRlZmF1bHRfcnVsZSA9IHsKQEAgLTExMiwxMyArMTA4LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRuX2ZpYl9ydWxlX3BvbGljeVtGUkFfTUFYKzFdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JW0ZSQV9JRk5BTUVdCT0geyAudHlwZSA9IE5MQV9TVFJJTkcsIC5sZW4gPSBJRk5BTVNJWiAtIDEgfSwKLQlbRlJBX1BSSU9SSVRZXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJRlJBX0dFTkVSSUNfUE9MSUNZLAogCVtGUkFfU1JDXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAJW0ZSQV9EU1RdCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKLQlbRlJBX0ZXTUFSS10JPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtGUkFfRldNQVNLXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCi0JW0ZSQV9UQUJMRV0gICAgID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKIHN0YXRpYyBpbnQgZG5fZmliX3J1bGVfbWF0Y2goc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmxvd2kgKmZsLCBpbnQgZmxhZ3MpCkBAIC0xMzEsMTEgKzEyMyw2IEBACiAJICAgICgoZGFkZHIgXiByLT5kc3QpICYgci0+ZHN0bWFzaykpCiAJCXJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUksKLQlpZiAoKHItPmZ3bWFyayBeIGZsLT5mbGRfZndtYXJrKSAmIHItPmZ3bWFzaykKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQogCXJldHVybiAxOwogfQogCkBAIC0xNjksMjAgKzE1Niw2IEBACiAJaWYgKHRiW0ZSQV9EU1RdKQogCQlyLT5kc3QgPSBubGFfZ2V0X3UxNih0YltGUkFfRFNUXSk7CiAKLSNpZmRlZiBDT05GSUdfREVDTkVUX1JPVVRFX0ZXTUFSSwotCWlmICh0YltGUkFfRldNQVJLXSkgewotCQlyLT5md21hcmsgPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVJLXSk7Ci0JCWlmIChyLT5md21hcmspCi0JCQkvKiBjb21wYXRpYmlsaXR5OiBpZiB0aGUgbWFyayB2YWx1ZSBpcyBub24temVybyBhbGwgYml0cwotCQkJICogYXJlIGNvbXBhcmVkIHVubGVzcyBhIG1hc2sgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQuCi0JCQkgKi8KLQkJCXItPmZ3bWFzayA9IDB4RkZGRkZGRkY7Ci0JfQotCi0JaWYgKHRiW0ZSQV9GV01BU0tdKQotCQlyLT5md21hc2sgPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVNLXSk7Ci0jZW5kaWYKLQogCXItPnNyY19sZW4gPSBmcmgtPnNyY19sZW47CiAJci0+c3JjbWFzayA9IGRuZXRfbWFrZV9tYXNrKHItPnNyY19sZW4pOwogCXItPmRzdF9sZW4gPSBmcmgtPmRzdF9sZW47CkBAIC0yMDMsMTQgKzE3Niw2IEBACiAJaWYgKGZyaC0+ZHN0X2xlbiAmJiAoci0+ZHN0X2xlbiAhPSBmcmgtPmRzdF9sZW4pKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLCi0JaWYgKHRiW0ZSQV9GV01BUktdICYmIChyLT5md21hcmsgIT0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFSS10pKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodGJbRlJBX0ZXTUFTS10gJiYgKHItPmZ3bWFzayAhPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVNLXSkpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCiAJaWYgKHRiW0ZSQV9TUkNdICYmIChyLT5zcmMgIT0gbmxhX2dldF91MTYodGJbRlJBX1NSQ10pKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTI0OCwxMiArMjEzLDYgQEAKIAlmcmgtPnNyY19sZW4gPSByLT5zcmNfbGVuOwogCWZyaC0+dG9zID0gMDsKIAotI2lmZGVmIENPTkZJR19ERUNORVRfUk9VVEVfRldNQVJLCi0JaWYgKHItPmZ3bWFyaykKLQkJTkxBX1BVVF9VMzIoc2tiLCBGUkFfRldNQVJLLCByLT5md21hcmspOwotCWlmIChyLT5md21hc2sgfHwgci0+ZndtYXJrKQotCQlOTEFfUFVUX1UzMihza2IsIEZSQV9GV01BU0ssIHItPmZ3bWFzayk7Ci0jZW5kaWYKIAlpZiAoci0+ZHN0X2xlbikKIAkJTkxBX1BVVF9VMTYoc2tiLCBGUkFfRFNULCByLT5kc3QpOwogCWlmIChyLT5zcmNfbGVuKQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl90YWJsZS5jIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCmluZGV4IDMxNzkwNGIuLmJkYmMzZjQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fdGFibGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKQEAgLTI2Myw2ICsyNjMsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzaXplX3QgZG5fZmliX25sbXNnX3NpemUoc3RydWN0IGRuX2ZpYl9pbmZvICpmaSkKK3sKKwlzaXplX3QgcGF5bG9hZCA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKQorCQkJICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1RBQkxFICovCisJCQkgKyBubGFfdG90YWxfc2l6ZSgyKSAvKiBSVEFfRFNUICovCisJCQkgKyBubGFfdG90YWxfc2l6ZSg0KTsgLyogUlRBX1BSSU9SSVRZICovCisKKwkvKiBzcGFjZSBmb3IgbmVzdGVkIG1ldHJpY3MgKi8KKwlwYXlsb2FkICs9IG5sYV90b3RhbF9zaXplKChSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpKSk7CisKKwlpZiAoZmktPmZpYl9uaHMpIHsKKwkJLyogQWxzbyBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2UgZmliX25ocyA9PSAxICovCisKKwkJLyogZWFjaCBuZXh0aG9wIGlzIHBhY2tlZCBpbiBhbiBhdHRyaWJ1dGUgKi8KKwkJc2l6ZV90IG5oc2l6ZSA9IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSk7CisKKwkJLyogbWF5IGNvbnRhaW4gYSBnYXRld2F5IGF0dHJpYnV0ZSAqLworCQluaHNpemUgKz0gbmxhX3RvdGFsX3NpemUoNCk7CisKKwkJLyogYWxsIG5leHRob3BzIGFyZSBwYWNrZWQgaW4gYSBuZXN0ZWQgYXR0cmlidXRlICovCisJCXBheWxvYWQgKz0gbmxhX3RvdGFsX3NpemUoZmktPmZpYl9uaHMgKiBuaHNpemUpOworCX0KKworCXJldHVybiBwYXlsb2FkOworfQorCiBzdGF0aWMgaW50IGRuX2ZpYl9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHRiX2lkLCB1OCB0eXBlLCB1OCBzY29wZSwgdm9pZCAqZHN0LCBpbnQgZHN0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbl9maWJfaW5mbyAqZmksIHVuc2lnbmVkIGludCBmbGFncykKQEAgLTMzNSwxNyArMzYxLDE1IEBACiAgICAgICAgIHUzMiBwaWQgPSByZXEgPyByZXEtPnBpZCA6IDA7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCi0gICAgICAgIHNrYiA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIHNrYiA9IG5sbXNnX25ldyhkbl9maWJfbmxtc2dfc2l6ZShETl9GSUJfSU5GTyhmKSksIEdGUF9LRVJORUwpOwogICAgICAgICBpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OwogCiAgICAgICAgIGVyciA9IGRuX2ZpYl9kdW1wX2luZm8oc2tiLCBwaWQsIG5saC0+bmxtc2dfc2VxLCBldmVudCwgdGJfaWQsCiAJCQkgICAgICAgZi0+Zm5fdHlwZSwgZi0+Zm5fc2NvcGUsICZmLT5mbl9rZXksIHosCiAJCQkgICAgICAgRE5fRklCX0lORk8oZiksIDApOwotCWlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAga2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gZXJyb3V0OwotICAgICAgICB9CisJLyogZmFpbHVyZSBpbXBsaWVzIEJVRyBpbiBkbl9maWJfbmxtc2dfc2l6ZSgpICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF9ub3RpZnkoc2tiLCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOwogZXJyb3V0OgpAQCAtODA3LDEwICs4MzEsMTEgQEAKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiREVDbmV0OiBCVUchIEF0dGVtcHQgdG8gY3JlYXRlIHJvdXRpbmcgdGFibGUgZnJvbSBpbnRlcnJ1cHRcbiIpOyAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoKHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZG5fZmliX3RhYmxlKSArIHNpemVvZihzdHJ1Y3QgZG5faGFzaCksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgIG1lbXNldCh0LCAwLCBzaXplb2Yoc3RydWN0IGRuX2ZpYl90YWJsZSkpOworICAgICAgICB0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRuX2ZpYl90YWJsZSkgKyBzaXplb2Yoc3RydWN0IGRuX2hhc2gpLAorCQkgICAgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICh0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgdC0+biA9IG47CiAgICAgICAgIHQtPmluc2VydCA9IGRuX2ZpYl90YWJsZV9pbnNlcnQ7CkBAIC04MTgsNyArODQzLDYgQEAKICAgICAgICAgdC0+bG9va3VwID0gZG5fZmliX3RhYmxlX2xvb2t1cDsKICAgICAgICAgdC0+Zmx1c2ggID0gZG5fZmliX3RhYmxlX2ZsdXNoOwogICAgICAgICB0LT5kdW1wID0gZG5fZmliX3RhYmxlX2R1bXA7Ci0JbWVtc2V0KHQtPmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgZG5faGFzaCkpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmdC0+aGxpc3QsICZkbl9maWJfdGFibGVfaGFzaFtoXSk7CiAKICAgICAgICAgcmV0dXJuIHQ7CmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvZXRoLmMgYi9uZXQvZXRoZXJuZXQvZXRoLmMKaW5kZXggNGJkNzhjOC4uMmQzMWJmMyAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtNjAsNyArNjAsNiBAQAogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogCiBfX3NldHVwKCJldGhlcj0iLCBuZXRkZXZfYm9vdF9zZXR1cCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwppbmRleCA0MjAwZWM1Li5mYzFmOTlhIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKaW5kZXggMWIyZWZmZi4uN2E5NWMzZCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IDEzYjFlNWYuLmIxYzZkMWYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJCXJldHVybiAwOwogCiAJaWVlZS0+bmV0d29ya3MgPQotCSAgICBrbWFsbG9jKE1BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayksCisJICAgIGt6YWxsb2MoTUFYX05FVFdPUktfQ09VTlQgKiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrKSwKIAkJICAgIEdGUF9LRVJORUwpOwogCWlmICghaWVlZS0+bmV0d29ya3MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zXG4iLApAQCAtNzUsOSArNzUsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltZW1zZXQoaWVlZS0+bmV0d29ya3MsIDAsCi0JICAgICAgIE1BWF9ORVRXT1JLX0NPVU5UICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaykpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExOCw2ICsxMTUsMjEgQEAKIAkJCSAgICAgICZpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdCk7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gSUVFRTgwMjExX0RBVEFfTEVOKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmllZWU4MDIxMV9nZW5lcmljX2dldF9zdGF0cygKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gJmllZWUtPnN0YXRzOworfQorCiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaWVlZTgwMjExKGludCBzaXplb2ZfcHJpdikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTsKQEAgLTEzMyw2ICsxNDUsMTEgQEAKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfeG1pdDsKKwlkZXYtPmNoYW5nZV9tdHUgPSBpZWVlODAyMTFfY2hhbmdlX210dTsKKworCS8qIERyaXZlcnMgYXJlIGZyZWUgdG8gb3ZlcnJpZGUgdGhpcyBpZiB0aGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbgorCSAqIGRvZXMgbm90IG1lZXQgdGhlaXIgbmVlZHMuICovCisJZGV2LT5nZXRfc3RhdHMgPSBpZWVlODAyMTFfZ2VuZXJpY19nZXRfc3RhdHM7CiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDI3NTkzMTIuLmQ5N2U1NDEgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtNDE1LDE3ICs0MTUsMTYgQEAKIAkgICAgaWVlZS0+aG9zdF9tY19kZWNyeXB0IDogaWVlZS0+aG9zdF9kZWNyeXB0OwogCiAJaWYgKGNhbl9iZV9kZWNyeXB0ZWQpIHsKLQkJaW50IGlkeCA9IDA7CiAJCWlmIChza2ItPmxlbiA+PSBoZHJsZW4gKyAzKSB7CiAJCQkvKiBUb3AgdHdvLWJpdHMgb2YgYnl0ZSAzIGFyZSB0aGUga2V5IGluZGV4ICovCi0JCQlpZHggPSBza2ItPmRhdGFbaGRybGVuICsgM10gPj4gNjsKKwkJCWtleWlkeCA9IHNrYi0+ZGF0YVtoZHJsZW4gKyAzXSA+PiA2OwogCQl9CiAKLQkJLyogaWVlZS0+Y3J5cHRbXSBpcyBXRVBfS0VZICg0KSBpbiBsZW5ndGguICBHaXZlbiB0aGF0IGlkeAotCQkgKiBpcyBvbmx5IGFsbG93ZWQgMi1iaXRzIG9mIHN0b3JhZ2UsIG5vIHZhbHVlIG9mIGlkeCBjYW4KLQkJICogYmUgcHJvdmlkZWQgdmlhIGFib3ZlIGNvZGUgdGhhdCB3b3VsZCByZXN1bHQgaW4gaWR4CisJCS8qIGllZWUtPmNyeXB0W10gaXMgV0VQX0tFWSAoNCkgaW4gbGVuZ3RoLiAgR2l2ZW4gdGhhdCBrZXlpZHgKKwkJICogaXMgb25seSBhbGxvd2VkIDItYml0cyBvZiBzdG9yYWdlLCBubyB2YWx1ZSBvZiBrZXlpZHggY2FuCisJCSAqIGJlIHByb3ZpZGVkIHZpYSBhYm92ZSBjb2RlIHRoYXQgd291bGQgcmVzdWx0IGluIGtleWlkeAogCQkgKiBiZWluZyBvdXQgb2YgcmFuZ2UgKi8KLQkJY3J5cHQgPSBpZWVlLT5jcnlwdFtpZHhdOworCQljcnlwdCA9IGllZWUtPmNyeXB0W2tleWlkeF07CiAKICNpZmRlZiBOT1RfWUVUCiAJCXN0YSA9IE5VTEw7CkBAIC00NzksNiArNDc4LDExIEBACiAJCQlnb3RvIHJ4X2V4aXQ7CiAJfQogI2VuZGlmCisJLyogZHJvcCBkdXBsaWNhdGUgODAyLjExIHJldHJhbnNtaXNzaW9ucyAoSUVFRSA4MDIuMTEgQ2hhcC4gOS4yOSkgKi8KKwlpZiAoc2MgPT0gaWVlZS0+cHJldl9zZXFfY3RsKQorCQlnb3RvIHJ4X2Ryb3BwZWQ7CisJZWxzZQorCQlpZWVlLT5wcmV2X3NlcV9jdGwgPSBzYzsKIAogCS8qIERhdGEgZnJhbWUgLSBleHRyYWN0IHNyYy9kc3QgYWRkcmVzc2VzICovCiAJaWYgKHNrYi0+bGVuIDwgSUVFRTgwMjExXzNBRERSX0xFTikKQEAgLTY1NSw2ICs2NTksNTEgQEAKIAkJZ290byByeF9kcm9wcGVkOwogCX0KIAorCS8qIElmIHRoZSBmcmFtZSB3YXMgZGVjcnlwdGVkIGluIGhhcmR3YXJlLCB3ZSBtYXkgbmVlZCB0byBzdHJpcCBvZmYKKwkgKiBhbnkgc2VjdXJpdHkgZGF0YSAoSVYsIElDViwgZXRjKSB0aGF0IHdhcyBsZWZ0IGJlaGluZCAqLworCWlmICghY2FuX2JlX2RlY3J5cHRlZCAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpICYmCisJICAgIGllZWUtPmhvc3Rfc3RyaXBfaXZfaWN2KSB7CisJICAgIAlpbnQgdHJpbWxlbiA9IDA7CisKKwkJLyogVG9wIHR3by1iaXRzIG9mIGJ5dGUgMyBhcmUgdGhlIGtleSBpbmRleCAqLworCQlpZiAoc2tiLT5sZW4gPj0gaGRybGVuICsgMykKKwkJCWtleWlkeCA9IHNrYi0+ZGF0YVtoZHJsZW4gKyAzXSA+PiA2OworCisJCS8qIFRvIHN0cmlwIG9mZiBhbnkgc2VjdXJpdHkgZGF0YSB3aGljaCBhcHBlYXJzIGJlZm9yZSB0aGUKKwkJICogcGF5bG9hZCwgd2Ugc2ltcGx5IGluY3JlYXNlIGhkcmxlbiAoYXMgdGhlIGhlYWRlciBnZXRzCisJCSAqIGNob3BwZWQgb2ZmIGltbWVkaWF0ZWx5IGJlbG93KS4gRm9yIHRoZSBzZWN1cml0eSBkYXRhIHdoaWNoCisJCSAqIGFwcGVhcnMgYWZ0ZXIgdGhlIHBheWxvYWQsIHdlIHVzZSBza2JfdHJpbS4gKi8KKworCQlzd2l0Y2ggKGllZWUtPnNlYy5lbmNvZGVfYWxnW2tleWlkeF0pIHsKKwkJY2FzZSBTRUNfQUxHX1dFUDoKKwkJCS8qIDQgYnl0ZSBJViAqLworCQkJaGRybGVuICs9IDQ7CisJCQkvKiA0IGJ5dGUgSUNWICovCisJCQl0cmltbGVuID0gNDsKKwkJCWJyZWFrOworCQljYXNlIFNFQ19BTEdfVEtJUDoKKwkJCS8qIDQgYnl0ZSBJViwgNCBieXRlIEV4dElWICovCisJCQloZHJsZW4gKz0gODsKKwkJCS8qIDggYnl0ZSBNSUMsIDQgYnl0ZSBJQ1YgKi8KKwkJCXRyaW1sZW4gPSAxMjsKKwkJCWJyZWFrOworCQljYXNlIFNFQ19BTEdfQ0NNUDoKKwkJCS8qIDggYnl0ZSBDQ01QIGhlYWRlciAqLworCQkJaGRybGVuICs9IDg7CisJCQkvKiA4IGJ5dGUgTUlDICovCisJCQl0cmltbGVuID0gODsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHNrYi0+bGVuIDwgdHJpbWxlbikKKwkJCWdvdG8gcnhfZHJvcHBlZDsKKworCQlfX3NrYl90cmltKHNrYiwgc2tiLT5sZW4gLSB0cmltbGVuKTsKKworCQlpZiAoc2tiLT5sZW4gPCBoZHJsZW4pCisJCQlnb3RvIHJ4X2Ryb3BwZWQ7CisJfQorCiAJLyogc2tiOiBoZHIgKyAocG9zc2libGUgcmVhc3NlbWJsZWQpIGZ1bGwgcGxhaW50ZXh0IHBheWxvYWQgKi8KIAogCXBheWxvYWQgPSBza2ItPmRhdGEgKyBoZHJsZW47CkBAIC0xMjU1LDEyICsxMzA0LDExIEBACiAJCWNhc2UgTUZJRV9UWVBFX0lCU1NfREZTOgogCQkJaWYgKG5ldHdvcmstPmlic3NfZGZzKQogCQkJCWJyZWFrOwotCQkJbmV0d29yay0+aWJzc19kZnMgPQotCQkJICAgIGttYWxsb2MoaW5mb19lbGVtZW50LT5sZW4sIEdGUF9BVE9NSUMpOworCQkJbmV0d29yay0+aWJzc19kZnMgPSBrbWVtZHVwKGluZm9fZWxlbWVudC0+ZGF0YSwKKwkJCQkJCSAgICBpbmZvX2VsZW1lbnQtPmxlbiwKKwkJCQkJCSAgICBHRlBfQVRPTUlDKTsKIAkJCWlmICghbmV0d29yay0+aWJzc19kZnMpCiAJCQkJcmV0dXJuIDE7Ci0JCQltZW1jcHkobmV0d29yay0+aWJzc19kZnMsIGluZm9fZWxlbWVudC0+ZGF0YSwKLQkJCSAgICAgICBpbmZvX2VsZW1lbnQtPmxlbik7CiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19JQlNTX0RGUzsKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCBhZTI1NDQ5Li44NTRmYzEzIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCQkgKiB0aGlzIHN0YWNrIGlzIHByb3ZpZGluZyB0aGUgZnVsbCA4MDIuMTEgaGVhZGVyLCBvbmUgd2lsbAogCQkgKiBldmVudHVhbGx5IGJlIGFmZml4ZWQgdG8gdGhpcyBmcmFnbWVudCAtLSBzbyB3ZSBtdXN0IGFjY291bnQKIAkJICogZm9yIGl0IHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvZiBwYXlsb2FkIHNwYWNlLiAqLwotCQlieXRlc19wZXJfZnJhZyA9IGZyYWdfc2l6ZSAtIElFRUU4MDIxMV8zQUREUl9MRU47CisJCWJ5dGVzX3Blcl9mcmFnID0gZnJhZ19zaXplIC0gaGRyX2xlbjsKIAkJaWYgKGllZWUtPmNvbmZpZyAmCiAJCSAgICAoQ0ZHX0lFRUU4MDIxMV9DT01QVVRFX0ZDUyB8IENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MpKQogCQkJYnl0ZXNfcGVyX2ZyYWcgLT0gSUVFRTgwMjExX0ZDU19MRU47CkBAIC00MTIsNyArNDEyLDcgQEAKIAl9IGVsc2UgewogCQlucl9mcmFncyA9IDE7CiAJCWJ5dGVzX3Blcl9mcmFnID0gYnl0ZXNfbGFzdF9mcmFnID0gYnl0ZXM7Ci0JCWZyYWdfc2l6ZSA9IGJ5dGVzICsgSUVFRTgwMjExXzNBRERSX0xFTjsKKwkJZnJhZ19zaXplID0gYnl0ZXMgKyBoZHJfbGVuOwogCX0KIAogCXJ0c19yZXF1aXJlZCA9IChmcmFnX3NpemUgPiBpZWVlLT5ydHMKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYwppbmRleCA0Y2VmMzllLi4wNjEyMDE1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSd2ZSBnb3QgYW4gYXV0aCBxdWV1ZSBpdGVtIGZvciB0aGlzIHJlcXVlc3QgKi8KIAlpZihhcSA9PSBOVUxMKQogCXsKLQkJcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQXV0aGVudGljYXRpb24gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSAiTUFDX0ZNVCIgYnV0IG5vIHF1ZXVlIGl0ZW0gZXhpc3RzLlxuIiwgTUFDX0FSRyhhdXRoLT5oZWFkZXIuYWRkcjIpKTsKKwkJZHByaW50a2woS0VSTl9ERUJVRyBQRlggIkF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gIk1BQ19GTVQiIGJ1dCBubyBxdWV1ZSBpdGVtIGV4aXN0cy5cbiIsIE1BQ19BUkcoYXV0aC0+aGVhZGVyLmFkZHIyKSk7CiAJCS8qIEVycm9yICM/ICovCiAJCXJldHVybiAtMTsKIAl9CQkJCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkvKiBDaGVjayBmb3Igb3V0IG9mIG9yZGVyIGF1dGhlbnRpY2F0aW9uICovCiAJaWYoIW5ldC0+YXV0aGVudGljYXRpbmcpCiAJewotCQlwcmludGtsKEtFUk5fREVCVUcgUEZYICJBdXRoZW50aWNhdGlvbiByZXNwb25zZSByZWNlaXZlZCBmcm9tICJNQUNfRk1UIiBidXQgZGlkIG5vdCByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uLlxuIixNQUNfQVJHKGF1dGgtPmhlYWRlci5hZGRyMikpOworCQlkcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQXV0aGVudGljYXRpb24gcmVzcG9uc2UgcmVjZWl2ZWQgZnJvbSAiTUFDX0ZNVCIgYnV0IGRpZCBub3QgcmVxdWVzdCBhdXRoZW50aWNhdGlvbi5cbiIsTUFDX0FSRyhhdXRoLT5oZWFkZXIuYWRkcjIpKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjE2LDEwICsyMTYsMTYgQEAKIAkJCW5ldC0+Y2hhbGxlbmdlX2xlbiA9ICpkYXRhKys7IAkKIAkJCWlmIChuZXQtPmNoYWxsZW5nZV9sZW4gPiBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTikKIAkJCQluZXQtPmNoYWxsZW5nZV9sZW4gPSBXTEFOX0FVVEhfQ0hBTExFTkdFX0xFTjsKLQkJCWlmIChuZXQtPmNoYWxsZW5nZSAhPSBOVUxMKQotCQkJCWtmcmVlKG5ldC0+Y2hhbGxlbmdlKTsKLQkJCW5ldC0+Y2hhbGxlbmdlID0ga21hbGxvYyhuZXQtPmNoYWxsZW5nZV9sZW4sIEdGUF9BVE9NSUMpOwotCQkJbWVtY3B5KG5ldC0+Y2hhbGxlbmdlLCBkYXRhLCBuZXQtPmNoYWxsZW5nZV9sZW4pOworCQkJa2ZyZWUobmV0LT5jaGFsbGVuZ2UpOworCQkJbmV0LT5jaGFsbGVuZ2UgPSBrbWVtZHVwKGRhdGEsIG5ldC0+Y2hhbGxlbmdlX2xlbiwKKwkJCQkJCSBHRlBfQVRPTUlDKTsKKwkJCWlmIChuZXQtPmNoYWxsZW5nZSA9PSBOVUxMKSB7CisJCQkJcHJpbnRrbChLRVJOX05PVElDRSBQRlggIlNoYXJlZCBLZXkgIgorCQkJCQkiQXV0aGVudGljYXRpb24gZmFpbGVkIGR1ZSB0byAiCisJCQkJCSJtZW1vcnkgc2hvcnRhZ2UuXG4iKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYWMtPmxvY2ssIGZsYWdzKTsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWFxLT5zdGF0ZSA9IElFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfUkVTUE9OU0U7IAogCiAJCQkvKiBXZSByZXVzZSB0aGUgd29yayBzdHJ1Y3QgZnJvbSB0aGUgYXV0aCByZXF1ZXN0IGhlcmUuCkBAIC0zNDIsNyArMzQ4LDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhlIG5ldHdvcmsgaXMgYXV0aGVudGljYXRlZCAqLwogCWlmICghbmV0LT5hdXRoZW50aWNhdGVkKQogCXsKLQkJcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQ2FuJ3Qgc2VuZCBkZWF1dGhlbnRpY2F0aW9uIHBhY2tldCwgbmV0d29yayBpcyBub3QgYXV0aGVudGljYXRlZC5cbiIpOworCQlkcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQ2FuJ3Qgc2VuZCBkZWF1dGhlbnRpY2F0aW9uIHBhY2tldCwgbmV0d29yayBpcyBub3QgYXV0aGVudGljYXRlZC5cbiIpOwogCQkvKiBFcnJvciBva2F5PyAqLwogCQlyZXR1cm4gLUVQRVJNOwogCX0KQEAgLTM3Niw3ICszODIsNyBAQAogCW5ldCA9IGllZWU4MDIxMXNvZnRtYWNfZ2V0X25ldHdvcmtfYnlfYnNzaWQobWFjLCBkZWF1dGgtPmhlYWRlci5hZGRyMik7CiAJCiAJaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCXByaW50a2woS0VSTl9ERUJVRyBQRlggIlJlY2VpdmVkIGRlYXV0aGVudGljYXRpb24gcGFja2V0IGZyb20gIk1BQ19GTVQiLCBidXQgdGhhdCBuZXR3b3JrIGlzIHVua25vd24uXG4iLAorCQlkcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiUmVjZWl2ZWQgZGVhdXRoZW50aWNhdGlvbiBwYWNrZXQgZnJvbSAiTUFDX0ZNVCIsIGJ1dCB0aGF0IG5ldHdvcmsgaXMgdW5rbm93bi5cbiIsCiAJCQlNQUNfQVJHKGRlYXV0aC0+aGVhZGVyLmFkZHIyKSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTM4NCw3ICszOTAsNyBAQAogCS8qIE1ha2Ugc3VyZSB0aGUgbmV0d29yayBpcyBhdXRoZW50aWNhdGVkICovCiAJaWYoIW5ldC0+YXV0aGVudGljYXRlZCkKIAl7Ci0JCXByaW50a2woS0VSTl9ERUJVRyBQRlggIkNhbid0IHBlcmZvcm0gZGVhdXRoZW50aWNhdGlvbiwgbmV0d29yayBpcyBub3QgYXV0aGVudGljYXRlZC5cbiIpOworCQlkcHJpbnRrbChLRVJOX0RFQlVHIFBGWCAiQ2FuJ3QgcGVyZm9ybSBkZWF1dGhlbnRpY2F0aW9uLCBuZXR3b3JrIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuIik7CiAJCS8qIEVycm9yIG9rYXk/ICovCiAJCXJldHVybiAtRVBFUk07CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfc2Nhbi5jCmluZGV4IGQzMWNmNzcuLjU1MDdmZWEgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3NjYW4uYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19zY2FuLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAlzbS0+c2Nhbm5pbmcgPSAxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtLT5sb2NrLCBmbGFncyk7CiAKLQluZXRpZl90eF9kaXNhYmxlKHNtLT5pZWVlLT5kZXYpOwogCXJldCA9IHNtLT5zdGFydF9zY2FuKHNtLT5kZXYpOwogCWlmIChyZXQpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNtLT5sb2NrLCBmbGFncyk7CkBAIC0xMzUsNyArMTM0LDggQEAKIAlzaS0+c3RhcnRlZCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc20tPmxvY2ssIGZsYWdzKTsKIAotCWRwcmludGsoUEZYICJTY2FubmluZyBmaW5pc2hlZFxuIik7CisJZHByaW50ayhQRlggIlNjYW5uaW5nIGZpbmlzaGVkOiBzY2FubmVkICVkIGNoYW5uZWxzIHN0YXJ0aW5nIHdpdGggY2hhbm5lbCAlZFxuIiwKKwkJICAgICBzbS0+c2NhbmluZm8tPm51bWJlcl9jaGFubmVscywgc20tPnNjYW5pbmZvLT5jaGFubmVsc1swXS5jaGFubmVsKTsKIAlpZWVlODAyMTFzb2Z0bWFjX3NjYW5fZmluaXNoZWQoc20pOwogCWNvbXBsZXRlX2FsbCgmc20tPnNjYW5pbmZvLT5maW5pc2hlZCk7CiB9CkBAIC0xODMsOCArMTgzLDYgQEAKIAkJc20tPnNjYW5pbmZvLT5jaGFubmVscyA9IHNtLT5pZWVlLT5nZW8uYmc7CiAJCXNtLT5zY2FuaW5mby0+bnVtYmVyX2NoYW5uZWxzID0gc20tPmllZWUtPmdlby5iZ19jaGFubmVsczsKIAl9Ci0JZHByaW50ayhQRlggIlN0YXJ0IHNjYW5uaW5nIHdpdGggY2hhbm5lbDogJWRcbiIsIHNtLT5zY2FuaW5mby0+Y2hhbm5lbHNbMF0uY2hhbm5lbCk7Ci0JZHByaW50ayhQRlggIlNjYW5uaW5nICVkIGNoYW5uZWxzXG4iLCBzbS0+c2NhbmluZm8tPm51bWJlcl9jaGFubmVscyk7CiAJc20tPnNjYW5pbmZvLT5jdXJyZW50X2NoYW5uZWxfaWR4ID0gMDsKIAlzbS0+c2NhbmluZm8tPnN0YXJ0ZWQgPSAxOwogCXNtLT5zY2FuaW5mby0+c3RvcCA9IDA7CkBAIC0yNDgsNyArMjQ2LDYgQEAKIAkJaWYgKG5ldCkKIAkJCXNtLT5zZXRfY2hhbm5lbChzbS0+ZGV2LCBuZXQtPmNoYW5uZWwpOwogCX0KLQluZXRpZl93YWtlX3F1ZXVlKHNtLT5pZWVlLT5kZXYpOwogCWllZWU4MDIxMXNvZnRtYWNfY2FsbF9ldmVudHMoc20sIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfU0NBTl9GSU5JU0hFRCwgTlVMTCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFzb2Z0bWFjX3NjYW5fZmluaXNoZWQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggNTU3MjA3MS4uNTAzZTcwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC0xMDQsMTMgKzEwNCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUF9ST1VURV9GV01BUksKLQlib29sICJJUDogdXNlIG5ldGZpbHRlciBNQVJLIHZhbHVlIGFzIHJvdXRpbmcga2V5IgotCWRlcGVuZHMgb24gSVBfTVVMVElQTEVfVEFCTEVTICYmIE5FVEZJTFRFUgotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNwZWNpZnkgZGlmZmVyZW50IHJvdXRlcyBmb3IKLQkgIHBhY2tldHMgd2l0aCBkaWZmZXJlbnQgbWFyayB2YWx1ZXMgKHNlZSBpcHRhYmxlcyg4KSwgTUFSSyB0YXJnZXQpLgotCiBjb25maWcgSVBfUk9VVEVfTVVMVElQQVRICiAJYm9vbCAiSVA6IGVxdWFsIGNvc3QgbXVsdGlwYXRoIgogCWRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSCkBAIC02MjUsNSArNjE4LDE3IEBACiAJZGVmYXVsdCAicmVubyIgaWYgREVGQVVMVF9SRU5PCiAJZGVmYXVsdCAiY3ViaWMiCiAKK2NvbmZpZyBUQ1BfTUQ1U0lHCisJYm9vbCAiVENQOiBNRDUgU2lnbmF0dXJlIE9wdGlvbiBzdXBwb3J0IChSRkMyMzg1KSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX01ENQorCS0tLWhlbHAtLS0KKwkgIFJGQzIzODUgc3BlY2lmaWNlcyBhIG1ldGhvZCBvZiBnaXZpbmcgTUQ1IHByb3RlY3Rpb24gdG8gVENQIHNlc3Npb25zLgorCSAgSXRzIG1haW4gKG9ubHk/KSB1c2UgaXMgdG8gcHJvdGVjdCBCR1Agc2Vzc2lvbnMgYmV0d2VlbiBjb3JlIHJvdXRlcnMKKwkgIG9uIHRoZSBJbnRlcm5ldC4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogc291cmNlICJuZXQvaXB2NC9pcHZzL0tjb25maWciCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L01ha2VmaWxlIGIvbmV0L2lwdjQvTWFrZWZpbGUKaW5kZXggMTU2NDVjNS4uN2EwNjg2MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvTWFrZWZpbGUKQEAgLTgsNyArOCw4IEBACiAJICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFwKIAkgICAgIHRjcC5vIHRjcF9pbnB1dC5vIHRjcF9vdXRwdXQubyB0Y3BfdGltZXIubyB0Y3BfaXB2NC5vIFwKIAkgICAgIHRjcF9taW5pc29ja3MubyB0Y3BfY29uZy5vIFwKLQkgICAgIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFwKKwkgICAgIGRhdGFncmFtLm8gcmF3Lm8gdWRwLm8gdWRwbGl0ZS5vIFwKKwkgICAgIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vICBpZ21wLm8gXAogCSAgICAgc3lzY3RsX25ldF9pcHY0Lm8gZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vCiAKIG9iai0kKENPTkZJR19JUF9GSUJfSEFTSCkgKz0gZmliX2hhc2gubwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGVkY2YwOTMuLjExNDQ5MDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bmV0L3VkcGxpdGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9yYXcuaD4KQEAgLTIwNCw3ICsyMDUsNyBAQAogCSAqIHdlIGNhbiBvbmx5IGFsbG93IHRoZSBiYWNrbG9nIHRvIGJlIGFkanVzdGVkLgogCSAqLwogCWlmIChvbGRfc3RhdGUgIT0gVENQX0xJU1RFTikgewotCQllcnIgPSBpbmV0X2Nza19saXN0ZW5fc3RhcnQoc2ssIFRDUF9TWU5RX0hTSVpFKTsKKwkJZXJyID0gaW5ldF9jc2tfbGlzdGVuX3N0YXJ0KHNrLCBiYWNrbG9nKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTY0Myw3ICs2NDQsNyBAQAogCQlzaW4tPnNpbl9wb3J0ID0gaW5ldC0+ZHBvcnQ7CiAJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gaW5ldC0+ZGFkZHI7CiAJfSBlbHNlIHsKLQkJX191MzIgYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwkJX19iZTMyIGFkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7CiAJCWlmICghYWRkcikKIAkJCWFkZHIgPSBpbmV0LT5zYWRkcjsKIAkJc2luLT5zaW5fcG9ydCA9IGluZXQtPnNwb3J0OwpAQCAtOTk0LDggKzk5NSw4IEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCWludCBlcnI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7Ci0JX191MzIgb2xkX3NhZGRyID0gaW5ldC0+c2FkZHI7Ci0JX191MzIgbmV3X3NhZGRyOworCV9fYmUzMiBvbGRfc2FkZHIgPSBpbmV0LT5zYWRkcjsKKwlfX2JlMzIgbmV3X3NhZGRyOwogCV9fYmUzMiBkYWRkciA9IGluZXQtPmRhZGRyOwogCiAJaWYgKGluZXQtPm9wdCAmJiBpbmV0LT5vcHQtPnNycikKQEAgLTEyMjMsMTAgKzEyMjQsMTMgQEAKIAl0Y3Bfc3RhdGlzdGljc1sxXSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNwX21pYik7CiAJdWRwX3N0YXRpc3RpY3NbMF0gPSBhbGxvY19wZXJjcHUoc3RydWN0IHVkcF9taWIpOwogCXVkcF9zdGF0aXN0aWNzWzFdID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB1ZHBfbWliKTsKKwl1ZHBsaXRlX3N0YXRpc3RpY3NbMF0gPSBhbGxvY19wZXJjcHUoc3RydWN0IHVkcF9taWIpOworCXVkcGxpdGVfc3RhdGlzdGljc1sxXSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdWRwX21pYik7CiAJaWYgKCEKIAkgICAgKG5ldF9zdGF0aXN0aWNzWzBdICYmIG5ldF9zdGF0aXN0aWNzWzFdICYmIGlwX3N0YXRpc3RpY3NbMF0KIAkgICAgICYmIGlwX3N0YXRpc3RpY3NbMV0gJiYgdGNwX3N0YXRpc3RpY3NbMF0gJiYgdGNwX3N0YXRpc3RpY3NbMV0KLQkgICAgICYmIHVkcF9zdGF0aXN0aWNzWzBdICYmIHVkcF9zdGF0aXN0aWNzWzFdKSkKKwkgICAgICYmIHVkcF9zdGF0aXN0aWNzWzBdICYmIHVkcF9zdGF0aXN0aWNzWzFdCisJICAgICAmJiB1ZHBsaXRlX3N0YXRpc3RpY3NbMF0gJiYgdWRwbGl0ZV9zdGF0aXN0aWNzWzFdICAgICAgICAgICAgICkgKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCSh2b2lkKSB0Y3BfbWliX2luaXQoKTsKQEAgLTEzMTMsNiArMTMxNyw4IEBACiAJLyogU2V0dXAgVENQIHNsYWIgY2FjaGUgZm9yIG9wZW4gcmVxdWVzdHMuICovCiAJdGNwX2luaXQoKTsKIAorCS8qIEFkZCBVRFAtTGl0ZSAoUkZDIDM4MjgpICovCisJdWRwbGl0ZTRfcmVnaXN0ZXIoKTsKIAogCS8qCiAJICoJU2V0IHRoZSBJQ01QIGxheWVyIHVwCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9haDQuYyBiL25ldC9pcHY0L2FoNC5jCmluZGV4IDk5NTQyOTcuLjY3YTU1MDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FoNC5jCisrKyBiL25ldC9pcHY0L2FoNC5jCkBAIC0xNCw3ICsxNCw3IEBACiAgKiBpbnRvIElQIGhlYWRlciBmb3IgaWN2IGNhbGN1bGF0aW9uLiBPcHRpb25zIGFyZSBhbHJlYWR5IGNoZWNrZWQKICAqIGZvciB2YWxpZGl0eSwgc28gcGFyYW5vaWEgaXMgbm90IHJlcXVpcmVkLiAqLwogCi1zdGF0aWMgaW50IGlwX2NsZWFyX211dGFibGVfb3B0aW9ucyhzdHJ1Y3QgaXBoZHIgKmlwaCwgdTMyICpkYWRkcikKK3N0YXRpYyBpbnQgaXBfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHN0cnVjdCBpcGhkciAqaXBoLCBfX2JlMzIgKmRhZGRyKQogewogCXVuc2lnbmVkIGNoYXIgKiBvcHRwdHIgPSAodW5zaWduZWQgY2hhciopKGlwaCsxKTsKIAlpbnQgIGwgPSBpcGgtPmlobCo0IC0gc2l6ZW9mKHN0cnVjdCBpcGhkcik7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlpcGgtPmZyYWdfb2ZmID0gMDsKIAlpcGgtPmNoZWNrID0gMDsKIAlpZiAoaWhsID4gc2l6ZW9mKCppcGgpKSB7Ci0JCXUzMiBkdW1teTsKKwkJX19iZTMyIGR1bW15OwogCQlpZiAoaXBfY2xlYXJfbXV0YWJsZV9vcHRpb25zKGlwaCwgJmR1bW15KSkKIAkJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggY2ZiNWQzZC4uMzk4MWU4YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCS5nY190aHJlc2gzID0JMTAyNCwKIH07CiAKLWludCBhcnBfbWNfbWFwKHUzMiBhZGRyLCB1OCAqaGFkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBkaXIpCitpbnQgYXJwX21jX21hcChfX2JlMzIgYWRkciwgdTggKmhhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKQogewogCXN3aXRjaCAoZGV2LT50eXBlKSB7CiAJY2FzZSBBUlBIUkRfRVRIRVI6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggNjQ2MDIzMy4uNjBhYWZiNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMzE5LDYgKzMxOSw3IEBACiAJCQllbnRyeS0+YWN0aXZpdHkgKz0gMTsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT5sc21fZGF0YS0+cmVmY291bnQpOwogCQkJc2VjYXR0ci0+Y2FjaGUgPSBlbnRyeS0+bHNtX2RhdGE7CisJCQlzZWNhdHRyLT5mbGFncyB8PSBORVRMQkxfU0VDQVRUUl9DQUNIRTsKIAkJCWlmIChwcmV2X2VudHJ5ID09IE5VTEwpIHsKIAkJCQlzcGluX3VubG9ja19iaCgmY2lwc29fdjRfY2FjaGVbYmt0XS5sb2NrKTsKIAkJCQlyZXR1cm4gMDsKQEAgLTM3NywxMiArMzc4LDExIEBACiAJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW50cnktPmtleSA9IGttYWxsb2MoY2lwc29fcHRyX2xlbiwgR0ZQX0FUT01JQyk7CisJZW50cnktPmtleSA9IGttZW1kdXAoY2lwc29fcHRyLCBjaXBzb19wdHJfbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7CiAJCXJldF92YWwgPSAtRU5PTUVNOwogCQlnb3RvIGNhY2hlX2FkZF9mYWlsdXJlOwogCX0KLQltZW1jcHkoZW50cnktPmtleSwgY2lwc29fcHRyLCBjaXBzb19wdHJfbGVuKTsKIAllbnRyeS0+a2V5X2xlbiA9IGNpcHNvX3B0cl9sZW47CiAJZW50cnktPmhhc2ggPSBjaXBzb192NF9tYXBfY2FjaGVfaGFzaChjaXBzb19wdHIsIGNpcHNvX3B0cl9sZW4pOwogCWF0b21pY19pbmMoJnNlY2F0dHItPmNhY2hlLT5yZWZjb3VudCk7CkBAIC00NDcsOCArNDQ3LDMwIEBACiAgKi8KIGludCBjaXBzb192NF9kb2lfYWRkKHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYpCiB7CisJdTMyIGl0ZXI7CisKIAlpZiAoZG9pX2RlZiA9PSBOVUxMIHx8IGRvaV9kZWYtPmRvaSA9PSBDSVBTT19WNF9ET0lfVU5LTk9XTikKIAkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpdGVyID0gMDsgaXRlciA8IENJUFNPX1Y0X1RBR19NQVhDTlQ7IGl0ZXIrKykgeworCQlzd2l0Y2ggKGRvaV9kZWYtPnRhZ3NbaXRlcl0pIHsKKwkJY2FzZSBDSVBTT19WNF9UQUdfUkJJVE1BUDoKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X1RBR19SQU5HRToKKwkJCWlmIChkb2lfZGVmLT50eXBlICE9IENJUFNPX1Y0X01BUF9QQVNTKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCWNhc2UgQ0lQU09fVjRfVEFHX0lOVkFMSUQ6CisJCQlpZiAoaXRlciA9PSAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCWNhc2UgQ0lQU09fVjRfVEFHX0VOVU06CisJCQlpZiAoZG9pX2RlZi0+dHlwZSAhPSBDSVBTT19WNF9NQVBfUEFTUykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CiAKIAlkb2lfZGVmLT52YWxpZCA9IDE7CiAJSU5JVF9SQ1VfSEVBRCgmZG9pX2RlZi0+cmN1KTsKQEAgLTgwNSw4ICs4MjcsNyBAQAogLyoqCiAgKiBjaXBzb192NF9tYXBfY2F0X3JibV9odG9uIC0gUGVyZm9ybSBhIGNhdGVnb3J5IG1hcHBpbmcgZnJvbSBob3N0IHRvIG5ldHdvcmsKICAqIEBkb2lfZGVmOiB0aGUgRE9JIGRlZmluaXRpb24KLSAqIEBob3N0X2NhdDogdGhlIGNhdGVnb3J5IGJpdG1hcCBpbiBob3N0IGZvcm1hdAotICogQGhvc3RfY2F0X2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgaG9zdCdzIGNhdGVnb3J5IGJpdG1hcCBpbiBieXRlcworICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCiAgKiBAbmV0X2NhdDogdGhlIHplcm8nZCBvdXQgY2F0ZWdvcnkgYml0bWFwIGluIG5ldHdvcmsvQ0lQU08gZm9ybWF0CiAgKiBAbmV0X2NhdF9sZW46IHRoZSBsZW5ndGggb2YgdGhlIENJUFNPIGJpdG1hcCBpbiBieXRlcwogICoKQEAgLTgxNyw1OSArODM4LDUxIEBACiAgKgogICovCiBzdGF0aWMgaW50IGNpcHNvX3Y0X21hcF9jYXRfcmJtX2h0b24oY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKLQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhvc3RfY2F0LAotCQkJCSAgICAgdTMyIGhvc3RfY2F0X2xlbiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIsCiAJCQkJICAgICB1bnNpZ25lZCBjaGFyICpuZXRfY2F0LAogCQkJCSAgICAgdTMyIG5ldF9jYXRfbGVuKQogewogCWludCBob3N0X3Nwb3QgPSAtMTsKLQl1MzIgbmV0X3Nwb3Q7CisJdTMyIG5ldF9zcG90ID0gQ0lQU09fVjRfSU5WX0NBVDsKIAl1MzIgbmV0X3Nwb3RfbWF4ID0gMDsKLQl1MzIgaG9zdF9jbGVuX2JpdHMgPSBob3N0X2NhdF9sZW4gKiA4OwogCXUzMiBuZXRfY2xlbl9iaXRzID0gbmV0X2NhdF9sZW4gKiA4OwotCXUzMiBob3N0X2NhdF9zaXplOwotCXUzMiAqaG9zdF9jYXRfYXJyYXk7CisJdTMyIGhvc3RfY2F0X3NpemUgPSAwOworCXUzMiAqaG9zdF9jYXRfYXJyYXkgPSBOVUxMOwogCi0Jc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7Ci0JY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKLQkJbmV0X3Nwb3RfbWF4ID0gaG9zdF9jYXRfbGVuOwotCQl3aGlsZSAobmV0X3Nwb3RfbWF4ID4gMCAmJiBob3N0X2NhdFtuZXRfc3BvdF9tYXggLSAxXSA9PSAwKQotCQkJbmV0X3Nwb3RfbWF4LS07Ci0JCWlmIChuZXRfc3BvdF9tYXggPiBuZXRfY2F0X2xlbikKLQkJCXJldHVybiAtRUlOVkFMOwotCQltZW1jcHkobmV0X2NhdCwgaG9zdF9jYXQsIG5ldF9zcG90X21heCk7Ci0JCXJldHVybiBuZXRfc3BvdF9tYXg7Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWlmIChkb2lfZGVmLT50eXBlID09IENJUFNPX1Y0X01BUF9TVEQpIHsKIAkJaG9zdF9jYXRfc2l6ZSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbF9zaXplOwogCQlob3N0X2NhdF9hcnJheSA9IGRvaV9kZWYtPm1hcC5zdGQtPmNhdC5sb2NhbDsKLQkJZm9yICg7OykgewotCQkJaG9zdF9zcG90ID0gY2lwc29fdjRfYml0bWFwX3dhbGsoaG9zdF9jYXQsCi0JCQkJCQkJIGhvc3RfY2xlbl9iaXRzLAotCQkJCQkJCSBob3N0X3Nwb3QgKyAxLAotCQkJCQkJCSAxKTsKLQkJCWlmIChob3N0X3Nwb3QgPCAwKQotCQkJCWJyZWFrOwotCQkJaWYgKGhvc3Rfc3BvdCA+PSBob3N0X2NhdF9zaXplKQotCQkJCXJldHVybiAtRVBFUk07Ci0KLQkJCW5ldF9zcG90ID0gaG9zdF9jYXRfYXJyYXlbaG9zdF9zcG90XTsKLQkJCWlmIChuZXRfc3BvdCA+PSBuZXRfY2xlbl9iaXRzKQotCQkJCXJldHVybiAtRU5PU1BDOwotCQkJY2lwc29fdjRfYml0bWFwX3NldGJpdChuZXRfY2F0LCBuZXRfc3BvdCwgMSk7Ci0KLQkJCWlmIChuZXRfc3BvdCA+IG5ldF9zcG90X21heCkKLQkJCQluZXRfc3BvdF9tYXggPSBuZXRfc3BvdDsKLQkJfQotCi0JCWlmIChob3N0X3Nwb3QgPT0gLTIpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoKytuZXRfc3BvdF9tYXggJSA4KQotCQkJcmV0dXJuIG5ldF9zcG90X21heCAvIDggKyAxOwotCQlyZXR1cm4gbmV0X3Nwb3RfbWF4IC8gODsKIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlmb3IgKDs7KSB7CisJCWhvc3Rfc3BvdCA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF93YWxrKHNlY2F0dHItPm1sc19jYXQsCisJCQkJCQkgICAgICAgaG9zdF9zcG90ICsgMSk7CisJCWlmIChob3N0X3Nwb3QgPCAwKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7CisJCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CisJCQluZXRfc3BvdCA9IGhvc3Rfc3BvdDsKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X01BUF9TVEQ6CisJCQlpZiAoaG9zdF9zcG90ID49IGhvc3RfY2F0X3NpemUpCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCW5ldF9zcG90ID0gaG9zdF9jYXRfYXJyYXlbaG9zdF9zcG90XTsKKwkJCWlmIChuZXRfc3BvdCA+PSBDSVBTT19WNF9JTlZfQ0FUKQorCQkJCXJldHVybiAtRVBFUk07CisJCQlicmVhazsKKwkJfQorCQlpZiAobmV0X3Nwb3QgPj0gbmV0X2NsZW5fYml0cykKKwkJCXJldHVybiAtRU5PU1BDOworCQljaXBzb192NF9iaXRtYXBfc2V0Yml0KG5ldF9jYXQsIG5ldF9zcG90LCAxKTsKKworCQlpZiAobmV0X3Nwb3QgPiBuZXRfc3BvdF9tYXgpCisJCQluZXRfc3BvdF9tYXggPSBuZXRfc3BvdDsKKwl9CisKKwlpZiAoKytuZXRfc3BvdF9tYXggJSA4KQorCQlyZXR1cm4gbmV0X3Nwb3RfbWF4IC8gOCArIDE7CisJcmV0dXJuIG5ldF9zcG90X21heCAvIDg7CiB9CiAKIC8qKgpAQCAtODc3LDEwMiArODkwLDMzMyBAQAogICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgogICogQG5ldF9jYXQ6IHRoZSBjYXRlZ29yeSBiaXRtYXAgaW4gbmV0d29yay9DSVBTTyBmb3JtYXQKICAqIEBuZXRfY2F0X2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgQ0lQU08gYml0bWFwIGluIGJ5dGVzCi0gKiBAaG9zdF9jYXQ6IHRoZSB6ZXJvJ2Qgb3V0IGNhdGVnb3J5IGJpdG1hcCBpbiBob3N0IGZvcm1hdAotICogQGhvc3RfY2F0X2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgaG9zdCdzIGNhdGVnb3J5IGJpdG1hcCBpbiBieXRlcworICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCiAgKgogICogRGVzY3JpcHRpb246CiAgKiBQZXJmb3JtIGEgbGFiZWwgbWFwcGluZyB0byB0cmFuc2xhdGUgYSBDSVBTTyBiaXRtYXAgdG8gdGhlIGNvcnJlY3QgbG9jYWwKLSAqIE1MUyBjYXRlZ29yeSBiaXRtYXAgdXNpbmcgdGhlIGdpdmVuIERPSSBkZWZpbml0aW9uLiAgUmV0dXJucyB0aGUgbWluaW11bQotICogc2l6ZSBpbiBieXRlcyBvZiB0aGUgaG9zdCBiaXRtYXAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG90aGVyd2lzZS4KKyAqIE1MUyBjYXRlZ29yeSBiaXRtYXAgdXNpbmcgdGhlIGdpdmVuIERPSSBkZWZpbml0aW9uLiAgUmV0dXJucyB6ZXJvIG9uCisgKiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KIHN0YXRpYyBpbnQgY2lwc29fdjRfbWFwX2NhdF9yYm1fbnRvaChjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAogCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV0X2NhdCwKIAkJCQkgICAgIHUzMiBuZXRfY2F0X2xlbiwKLQkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKmhvc3RfY2F0LAotCQkJCSAgICAgdTMyIGhvc3RfY2F0X2xlbikKKwkJCQkgICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JdTMyIGhvc3Rfc3BvdDsKLQl1MzIgaG9zdF9zcG90X21heCA9IDA7CisJaW50IHJldF92YWw7CiAJaW50IG5ldF9zcG90ID0gLTE7CisJdTMyIGhvc3Rfc3BvdCA9IENJUFNPX1Y0X0lOVl9DQVQ7CiAJdTMyIG5ldF9jbGVuX2JpdHMgPSBuZXRfY2F0X2xlbiAqIDg7Ci0JdTMyIGhvc3RfY2xlbl9iaXRzID0gaG9zdF9jYXRfbGVuICogODsKLQl1MzIgbmV0X2NhdF9zaXplOwotCXUzMiAqbmV0X2NhdF9hcnJheTsKKwl1MzIgbmV0X2NhdF9zaXplID0gMDsKKwl1MzIgKm5ldF9jYXRfYXJyYXkgPSBOVUxMOwogCi0Jc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7Ci0JY2FzZSBDSVBTT19WNF9NQVBfUEFTUzoKLQkJaWYgKG5ldF9jYXRfbGVuID4gaG9zdF9jYXRfbGVuKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbWNweShob3N0X2NhdCwgbmV0X2NhdCwgbmV0X2NhdF9sZW4pOwotCQlyZXR1cm4gbmV0X2NhdF9sZW47Ci0JY2FzZSBDSVBTT19WNF9NQVBfU1REOgorCWlmIChkb2lfZGVmLT50eXBlID09IENJUFNPX1Y0X01BUF9TVEQpIHsKIAkJbmV0X2NhdF9zaXplID0gZG9pX2RlZi0+bWFwLnN0ZC0+Y2F0LmNpcHNvX3NpemU7CiAJCW5ldF9jYXRfYXJyYXkgPSBkb2lfZGVmLT5tYXAuc3RkLT5jYXQuY2lwc287Ci0JCWZvciAoOzspIHsKLQkJCW5ldF9zcG90ID0gY2lwc29fdjRfYml0bWFwX3dhbGsobmV0X2NhdCwKLQkJCQkJCQluZXRfY2xlbl9iaXRzLAotCQkJCQkJCW5ldF9zcG90ICsgMSwKLQkJCQkJCQkxKTsKLQkJCWlmIChuZXRfc3BvdCA8IDApCi0JCQkJYnJlYWs7Ci0JCQlpZiAobmV0X3Nwb3QgPj0gbmV0X2NhdF9zaXplIHx8Ci0JCQkgICAgbmV0X2NhdF9hcnJheVtuZXRfc3BvdF0gPj0gQ0lQU09fVjRfSU5WX0NBVCkKLQkJCQlyZXR1cm4gLUVQRVJNOworCX0KIAotCQkJaG9zdF9zcG90ID0gbmV0X2NhdF9hcnJheVtuZXRfc3BvdF07Ci0JCQlpZiAoaG9zdF9zcG90ID49IGhvc3RfY2xlbl9iaXRzKQotCQkJCXJldHVybiAtRU5PU1BDOwotCQkJY2lwc29fdjRfYml0bWFwX3NldGJpdChob3N0X2NhdCwgaG9zdF9zcG90LCAxKTsKLQotCQkJaWYgKGhvc3Rfc3BvdCA+IGhvc3Rfc3BvdF9tYXgpCi0JCQkJaG9zdF9zcG90X21heCA9IGhvc3Rfc3BvdDsKKwlmb3IgKDs7KSB7CisJCW5ldF9zcG90ID0gY2lwc29fdjRfYml0bWFwX3dhbGsobmV0X2NhdCwKKwkJCQkJCW5ldF9jbGVuX2JpdHMsCisJCQkJCQluZXRfc3BvdCArIDEsCisJCQkJCQkxKTsKKwkJaWYgKG5ldF9zcG90IDwgMCkgeworCQkJaWYgKG5ldF9zcG90ID09IC0yKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlpZiAobmV0X3Nwb3QgPT0gLTIpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlpZiAoKytob3N0X3Nwb3RfbWF4ICUgOCkKLQkJCXJldHVybiBob3N0X3Nwb3RfbWF4IC8gOCArIDE7Ci0JCXJldHVybiBob3N0X3Nwb3RfbWF4IC8gODsKKwkJc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7CisJCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CisJCQlob3N0X3Nwb3QgPSBuZXRfc3BvdDsKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X01BUF9TVEQ6CisJCQlpZiAobmV0X3Nwb3QgPj0gbmV0X2NhdF9zaXplKQorCQkJCXJldHVybiAtRVBFUk07CisJCQlob3N0X3Nwb3QgPSBuZXRfY2F0X2FycmF5W25ldF9zcG90XTsKKwkJCWlmIChob3N0X3Nwb3QgPj0gQ0lQU09fVjRfSU5WX0NBVCkKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKwkJcmV0X3ZhbCA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF9zZXRiaXQoc2VjYXR0ci0+bWxzX2NhdCwKKwkJCQkJCSAgICAgICBob3N0X3Nwb3QsCisJCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7CisJCWlmIChyZXRfdmFsICE9IDApCisJCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorLyoqCisgKiBjaXBzb192NF9tYXBfY2F0X2VudW1fdmFsaWQgLSBDaGVja3MgdG8gc2VlIGlmIHRoZSBjYXRlZ29yaWVzIGFyZSB2YWxpZAorICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgorICogQGVudW1jYXQ6IGNhdGVnb3J5IGxpc3QKKyAqIEBlbnVtY2F0X2xlbjogbGVuZ3RoIG9mIHRoZSBjYXRlZ29yeSBsaXN0IGluIGJ5dGVzCisgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVja3MgdGhlIGdpdmVuIGNhdGVnb3JpZXMgYWdhaW5zdCB0aGUgZ2l2ZW4gRE9JIGRlZmluaXRpb24gYW5kIHJldHVybnMgYQorICogbmVnYXRpdmUgdmFsdWUgaWYgYW55IG9mIHRoZSBjYXRlZ29yaWVzIGRvIG5vdCBoYXZlIGEgdmFsaWQgbWFwcGluZyBhbmQgYQorICogemVybyB2YWx1ZSBpZiBhbGwgb2YgdGhlIGNhdGVnb3JpZXMgYXJlIHZhbGlkLgorICoKKyAqLworc3RhdGljIGludCBjaXBzb192NF9tYXBfY2F0X2VudW1fdmFsaWQoY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW51bWNhdCwKKwkJCQkgICAgICAgdTMyIGVudW1jYXRfbGVuKQoreworCXUxNiBjYXQ7CisJaW50IGNhdF9wcmV2ID0gLTE7CisJdTMyIGl0ZXI7CisKKwlpZiAoZG9pX2RlZi0+dHlwZSAhPSBDSVBTT19WNF9NQVBfUEFTUyB8fCBlbnVtY2F0X2xlbiAmIDB4MDEpCisJCXJldHVybiAtRUZBVUxUOworCisJZm9yIChpdGVyID0gMDsgaXRlciA8IGVudW1jYXRfbGVuOyBpdGVyICs9IDIpIHsKKwkJY2F0ID0gbnRvaHMoKigoX19iZTE2ICopJmVudW1jYXRbaXRlcl0pKTsKKwkJaWYgKGNhdCA8PSBjYXRfcHJldikKKwkJCXJldHVybiAtRUZBVUxUOworCQljYXRfcHJldiA9IGNhdDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjaXBzb192NF9tYXBfY2F0X2VudW1faHRvbiAtIFBlcmZvcm0gYSBjYXRlZ29yeSBtYXBwaW5nIGZyb20gaG9zdCB0byBuZXR3b3JrCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIEBuZXRfY2F0OiB0aGUgemVybydkIG91dCBjYXRlZ29yeSBsaXN0IGluIG5ldHdvcmsvQ0lQU08gZm9ybWF0CisgKiBAbmV0X2NhdF9sZW46IHRoZSBsZW5ndGggb2YgdGhlIENJUFNPIGNhdGVnb3J5IGxpc3QgaW4gYnl0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBlcmZvcm0gYSBsYWJlbCBtYXBwaW5nIHRvIHRyYW5zbGF0ZSBhIGxvY2FsIE1MUyBjYXRlZ29yeSBiaXRtYXAgdG8gdGhlCisgKiBjb3JyZWN0IENJUFNPIGNhdGVnb3J5IGxpc3QgdXNpbmcgdGhlIGdpdmVuIERPSSBkZWZpbml0aW9uLiAgIFJldHVybnMgdGhlCisgKiBzaXplIGluIGJ5dGVzIG9mIHRoZSBuZXR3b3JrIGNhdGVnb3J5IGJpdG1hcCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMKKyAqIG90aGVyd2lzZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgY2lwc29fdjRfbWFwX2NhdF9lbnVtX2h0b24oY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm5ldF9jYXQsCisJCQkJICAgICAgdTMyIG5ldF9jYXRfbGVuKQoreworCWludCBjYXQgPSAtMTsKKwl1MzIgY2F0X2l0ZXIgPSAwOworCisJZm9yICg7OykgeworCQljYXQgPSBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfd2FsayhzZWNhdHRyLT5tbHNfY2F0LCBjYXQgKyAxKTsKKwkJaWYgKGNhdCA8IDApCisJCQlicmVhazsKKwkJaWYgKChjYXRfaXRlciArIDIpID4gbmV0X2NhdF9sZW4pCisJCQlyZXR1cm4gLUVOT1NQQzsKKworCQkqKChfX2JlMTYgKikmbmV0X2NhdFtjYXRfaXRlcl0pID0gaHRvbnMoY2F0KTsKKwkJY2F0X2l0ZXIgKz0gMjsKKwl9CisKKwlyZXR1cm4gY2F0X2l0ZXI7Cit9CisKKy8qKgorICogY2lwc29fdjRfbWFwX2NhdF9lbnVtX250b2ggLSBQZXJmb3JtIGEgY2F0ZWdvcnkgbWFwcGluZyBmcm9tIG5ldHdvcmsgdG8gaG9zdAorICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgorICogQG5ldF9jYXQ6IHRoZSBjYXRlZ29yeSBsaXN0IGluIG5ldHdvcmsvQ0lQU08gZm9ybWF0CisgKiBAbmV0X2NhdF9sZW46IHRoZSBsZW5ndGggb2YgdGhlIENJUFNPIGJpdG1hcCBpbiBieXRlcworICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKgorICogRGVzY3JpcHRpb246CisgKiBQZXJmb3JtIGEgbGFiZWwgbWFwcGluZyB0byB0cmFuc2xhdGUgYSBDSVBTTyBjYXRlZ29yeSBsaXN0IHRvIHRoZSBjb3JyZWN0CisgKiBsb2NhbCBNTFMgY2F0ZWdvcnkgYml0bWFwIHVzaW5nIHRoZSBnaXZlbiBET0kgZGVmaW5pdGlvbi4gIFJldHVybnMgemVybyBvbgorICogc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IGNpcHNvX3Y0X21hcF9jYXRfZW51bV9udG9oKGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV0X2NhdCwKKwkJCQkgICAgICB1MzIgbmV0X2NhdF9sZW4sCisJCQkJICAgICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK3sKKwlpbnQgcmV0X3ZhbDsKKwl1MzIgaXRlcjsKKworCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBuZXRfY2F0X2xlbjsgaXRlciArPSAyKSB7CisJCXJldF92YWwgPSBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfc2V0Yml0KHNlY2F0dHItPm1sc19jYXQsCisJCQkJCSAgICBudG9ocygqKChfX2JlMTYgKikmbmV0X2NhdFtpdGVyXSkpLAorCQkJCQkgICAgR0ZQX0FUT01JQyk7CisJCWlmIChyZXRfdmFsICE9IDApCisJCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjaXBzb192NF9tYXBfY2F0X3JuZ192YWxpZCAtIENoZWNrcyB0byBzZWUgaWYgdGhlIGNhdGVnb3JpZXMgYXJlIHZhbGlkCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAcm5nY2F0OiBjYXRlZ29yeSBsaXN0CisgKiBAcm5nY2F0X2xlbjogbGVuZ3RoIG9mIHRoZSBjYXRlZ29yeSBsaXN0IGluIGJ5dGVzCisgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVja3MgdGhlIGdpdmVuIGNhdGVnb3JpZXMgYWdhaW5zdCB0aGUgZ2l2ZW4gRE9JIGRlZmluaXRpb24gYW5kIHJldHVybnMgYQorICogbmVnYXRpdmUgdmFsdWUgaWYgYW55IG9mIHRoZSBjYXRlZ29yaWVzIGRvIG5vdCBoYXZlIGEgdmFsaWQgbWFwcGluZyBhbmQgYQorICogemVybyB2YWx1ZSBpZiBhbGwgb2YgdGhlIGNhdGVnb3JpZXMgYXJlIHZhbGlkLgorICoKKyAqLworc3RhdGljIGludCBjaXBzb192NF9tYXBfY2F0X3JuZ192YWxpZChjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJuZ2NhdCwKKwkJCQkgICAgICB1MzIgcm5nY2F0X2xlbikKK3sKKwl1MTYgY2F0X2hpZ2g7CisJdTE2IGNhdF9sb3c7CisJdTMyIGNhdF9wcmV2ID0gQ0lQU09fVjRfTUFYX1JFTV9DQVRTICsgMTsKKwl1MzIgaXRlcjsKKworCWlmIChkb2lfZGVmLT50eXBlICE9IENJUFNPX1Y0X01BUF9QQVNTIHx8IHJuZ2NhdF9sZW4gJiAweDAxKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBybmdjYXRfbGVuOyBpdGVyICs9IDQpIHsKKwkJY2F0X2hpZ2ggPSBudG9ocygqKChfX2JlMTYgKikmcm5nY2F0W2l0ZXJdKSk7CisJCWlmICgoaXRlciArIDQpIDw9IHJuZ2NhdF9sZW4pCisJCQljYXRfbG93ID0gbnRvaHMoKigoX19iZTE2ICopJnJuZ2NhdFtpdGVyICsgMl0pKTsKKwkJZWxzZQorCQkJY2F0X2xvdyA9IDA7CisKKwkJaWYgKGNhdF9oaWdoID4gY2F0X3ByZXYpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQljYXRfcHJldiA9IGNhdF9sb3c7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY2lwc29fdjRfbWFwX2NhdF9ybmdfaHRvbiAtIFBlcmZvcm0gYSBjYXRlZ29yeSBtYXBwaW5nIGZyb20gaG9zdCB0byBuZXR3b3JrCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIEBuZXRfY2F0OiB0aGUgemVybydkIG91dCBjYXRlZ29yeSBsaXN0IGluIG5ldHdvcmsvQ0lQU08gZm9ybWF0CisgKiBAbmV0X2NhdF9sZW46IHRoZSBsZW5ndGggb2YgdGhlIENJUFNPIGNhdGVnb3J5IGxpc3QgaW4gYnl0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBlcmZvcm0gYSBsYWJlbCBtYXBwaW5nIHRvIHRyYW5zbGF0ZSBhIGxvY2FsIE1MUyBjYXRlZ29yeSBiaXRtYXAgdG8gdGhlCisgKiBjb3JyZWN0IENJUFNPIGNhdGVnb3J5IGxpc3QgdXNpbmcgdGhlIGdpdmVuIERPSSBkZWZpbml0aW9uLiAgIFJldHVybnMgdGhlCisgKiBzaXplIGluIGJ5dGVzIG9mIHRoZSBuZXR3b3JrIGNhdGVnb3J5IGJpdG1hcCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMKKyAqIG90aGVyd2lzZS4KKyAqCisgKi8KK3N0YXRpYyBpbnQgY2lwc29fdjRfbWFwX2NhdF9ybmdfaHRvbihjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0ciwKKwkJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm5ldF9jYXQsCisJCQkJICAgICB1MzIgbmV0X2NhdF9sZW4pCit7CisJLyogVGhlIGNvbnN0YW50ICcxNicgaXMgbm90IHJhbmRvbSwgaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCisJICogaGlnaC9sb3cgY2F0ZWdvcnkgcmFuZ2UgcGFpcnMgYXMgcGVybWl0dGVkIGJ5IHRoZSBDSVBTTyBkcmFmdCBiYXNlZAorCSAqIG9uIGEgbWF4aW11bSBJUHY0IGhlYWRlciBsZW5ndGggb2YgNjAgYnl0ZXMgLSB0aGUgQlVHX09OKCkgYXNzZXJ0aW9uCisJICogZG9lcyBhIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGFycmF5LiAqLworCWludCBpdGVyID0gLTE7CisJdTE2IGFycmF5WzE2XTsKKwl1MzIgYXJyYXlfY250ID0gMDsKKwl1MzIgY2F0X3NpemUgPSAwOworCisJQlVHX09OKG5ldF9jYXRfbGVuID4gMzApOworCisJZm9yICg7OykgeworCQlpdGVyID0gbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3dhbGsoc2VjYXR0ci0+bWxzX2NhdCwgaXRlciArIDEpOworCQlpZiAoaXRlciA8IDApCisJCQlicmVhazsKKwkJY2F0X3NpemUgKz0gKGl0ZXIgPT0gMCA/IDAgOiBzaXplb2YodTE2KSk7CisJCWlmIChjYXRfc2l6ZSA+IG5ldF9jYXRfbGVuKQorCQkJcmV0dXJuIC1FTk9TUEM7CisJCWFycmF5W2FycmF5X2NudCsrXSA9IGl0ZXI7CisKKwkJaXRlciA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF93YWxrX3JuZyhzZWNhdHRyLT5tbHNfY2F0LCBpdGVyKTsKKwkJaWYgKGl0ZXIgPCAwKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWNhdF9zaXplICs9IHNpemVvZih1MTYpOworCQlpZiAoY2F0X3NpemUgPiBuZXRfY2F0X2xlbikKKwkJCXJldHVybiAtRU5PU1BDOworCQlhcnJheVthcnJheV9jbnQrK10gPSBpdGVyOworCX0KKworCWZvciAoaXRlciA9IDA7IGFycmF5X2NudCA+IDA7KSB7CisJCSooKF9fYmUxNiAqKSZuZXRfY2F0W2l0ZXJdKSA9IGh0b25zKGFycmF5Wy0tYXJyYXlfY250XSk7CisJCWl0ZXIgKz0gMjsKKwkJYXJyYXlfY250LS07CisJCWlmIChhcnJheVthcnJheV9jbnRdICE9IDApIHsKKwkJCSooKF9fYmUxNiAqKSZuZXRfY2F0W2l0ZXJdKSA9IGh0b25zKGFycmF5W2FycmF5X2NudF0pOworCQkJaXRlciArPSAyOworCQl9CisJfQorCisJcmV0dXJuIGNhdF9zaXplOworfQorCisvKioKKyAqIGNpcHNvX3Y0X21hcF9jYXRfcm5nX250b2ggLSBQZXJmb3JtIGEgY2F0ZWdvcnkgbWFwcGluZyBmcm9tIG5ldHdvcmsgdG8gaG9zdAorICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgorICogQG5ldF9jYXQ6IHRoZSBjYXRlZ29yeSBsaXN0IGluIG5ldHdvcmsvQ0lQU08gZm9ybWF0CisgKiBAbmV0X2NhdF9sZW46IHRoZSBsZW5ndGggb2YgdGhlIENJUFNPIGJpdG1hcCBpbiBieXRlcworICogQHNlY2F0dHI6IHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzCisgKgorICogRGVzY3JpcHRpb246CisgKiBQZXJmb3JtIGEgbGFiZWwgbWFwcGluZyB0byB0cmFuc2xhdGUgYSBDSVBTTyBjYXRlZ29yeSBsaXN0IHRvIHRoZSBjb3JyZWN0CisgKiBsb2NhbCBNTFMgY2F0ZWdvcnkgYml0bWFwIHVzaW5nIHRoZSBnaXZlbiBET0kgZGVmaW5pdGlvbi4gIFJldHVybnMgemVybyBvbgorICogc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IGNpcHNvX3Y0X21hcF9jYXRfcm5nX250b2goY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldF9jYXQsCisJCQkJICAgICB1MzIgbmV0X2NhdF9sZW4sCisJCQkJICAgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCWludCByZXRfdmFsOworCXUzMiBuZXRfaXRlcjsKKwl1MTYgY2F0X2xvdzsKKwl1MTYgY2F0X2hpZ2g7CisKKwlmb3IobmV0X2l0ZXIgPSAwOyBuZXRfaXRlciA8IG5ldF9jYXRfbGVuOyBuZXRfaXRlciArPSA0KSB7CisJCWNhdF9oaWdoID0gbnRvaHMoKigoX19iZTE2ICopJm5ldF9jYXRbbmV0X2l0ZXJdKSk7CisJCWlmICgobmV0X2l0ZXIgKyA0KSA8PSBuZXRfY2F0X2xlbikKKwkJCWNhdF9sb3cgPSBudG9ocygqKChfX2JlMTYgKikmbmV0X2NhdFtuZXRfaXRlciArIDJdKSk7CisJCWVsc2UKKwkJCWNhdF9sb3cgPSAwOworCisJCXJldF92YWwgPSBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfc2V0cm5nKHNlY2F0dHItPm1sc19jYXQsCisJCQkJCQkgICAgICAgY2F0X2xvdywKKwkJCQkJCSAgICAgICBjYXRfaGlnaCwKKwkJCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKKwkJaWYgKHJldF92YWwgIT0gMCkKKwkJCXJldHVybiByZXRfdmFsOworCX0KKworCXJldHVybiAwOworfQorCiAvKgogICogUHJvdG9jb2wgSGFuZGxpbmcgRnVuY3Rpb25zCiAgKi8KIAorI2RlZmluZSBDSVBTT19WNF9PUFRfTEVOX01BWCAgICAgICAgICA0MAogI2RlZmluZSBDSVBTT19WNF9IRFJfTEVOICAgICAgICAgICAgICA2CiAKIC8qKgogICogY2lwc29fdjRfZ2VudGFnX2hkciAtIEdlbmVyYXRlIGEgQ0lQU08gb3B0aW9uIGhlYWRlcgogICogQGRvaV9kZWY6IHRoZSBET0kgZGVmaW5pdGlvbgotICogQGxlbjogdGhlIHRvdGFsIHRhZyBsZW5ndGggaW4gYnl0ZXMKKyAqIEBsZW46IHRoZSB0b3RhbCB0YWcgbGVuZ3RoIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHRoaXMgaGVhZGVyCiAgKiBAYnVmOiB0aGUgQ0lQU08gb3B0aW9uIGJ1ZmZlcgogICoKICAqIERlc2NyaXB0aW9uOgotICogV3JpdGUgYSBDSVBTTyBoZWFkZXIgaW50byB0aGUgYmVnaW5uaW5nIG9mIEBidWZmZXIuICBSZXR1cm4gemVybyBvbiBzdWNjZXNzLAotICogbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKiBXcml0ZSBhIENJUFNPIGhlYWRlciBpbnRvIHRoZSBiZWdpbm5pbmcgb2YgQGJ1ZmZlci4KICAqCiAgKi8KLXN0YXRpYyBpbnQgY2lwc29fdjRfZ2VudGFnX2hkcihjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAotCQkJICAgICAgIHUzMiBsZW4sCi0JCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIHZvaWQgY2lwc29fdjRfZ2VudGFnX2hkcihjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAorCQkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQl1MzIgbGVuKQogewotCWlmIChDSVBTT19WNF9IRFJfTEVOICsgbGVuID4gNDApCi0JCXJldHVybiAtRU5PU1BDOwotCiAJYnVmWzBdID0gSVBPUFRfQ0lQU087CiAJYnVmWzFdID0gQ0lQU09fVjRfSERSX0xFTiArIGxlbjsKLQkqKHUzMiAqKSZidWZbMl0gPSBodG9ubChkb2lfZGVmLT5kb2kpOwotCi0JcmV0dXJuIDA7CisJKihfX2JlMzIgKikmYnVmWzJdID0gaHRvbmwoZG9pX2RlZi0+ZG9pKTsKIH0KIAotI2RlZmluZSBDSVBTT19WNF9UQUcxX0NBVF9MRU4gICAgICAgICAzMAotCiAvKioKICAqIGNpcHNvX3Y0X2dlbnRhZ19yYm0gLSBHZW5lcmF0ZSBhIENJUFNPIHJlc3RyaWN0ZWQgYml0bWFwIHRhZyAodHlwZSAjMSkKICAqIEBkb2lfZGVmOiB0aGUgRE9JIGRlZmluaXRpb24KQEAgLTk4Myw2OCArMTIyNyw0OSBAQAogICogRGVzY3JpcHRpb246CiAgKiBHZW5lcmF0ZSBhIENJUFNPIG9wdGlvbiB1c2luZyB0aGUgcmVzdHJpY3RlZCBiaXRtYXAgdGFnLCB0YWcgdHlwZSAjMS4gIFRoZQogICogYWN0dWFsIGJ1ZmZlciBsZW5ndGggbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBpbmRpY2F0ZWQgc2l6ZSBkdWUgdG8KLSAqIHRyYW5zbGF0aW9uIGJldHdlZW4gaG9zdCBhbmQgbmV0d29yayBjYXRlZ29yeSBiaXRtYXBzLiAgUmV0dXJucyB6ZXJvIG9uCi0gKiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqIHRyYW5zbGF0aW9uIGJldHdlZW4gaG9zdCBhbmQgbmV0d29yayBjYXRlZ29yeSBiaXRtYXBzLiAgUmV0dXJucyB0aGUgc2l6ZSBvZgorICogdGhlIHRhZyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KIHN0YXRpYyBpbnQgY2lwc29fdjRfZ2VudGFnX3JibShjb25zdCBzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIsCi0JCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmJ1ZmZlciwKLQkJCSAgICAgICB1MzIgKmJ1ZmZlcl9sZW4pCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyLAorCQkJICAgICAgIHUzMiBidWZmZXJfbGVuKQogewotCWludCByZXRfdmFsID0gLUVQRVJNOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0JdTMyIGJ1Zl9sZW47CisJaW50IHJldF92YWw7CisJdTMyIHRhZ19sZW47CiAJdTMyIGxldmVsOwogCi0JaWYgKHNlY2F0dHItPm1sc19jYXQpIHsKLQkJYnVmID0ga3phbGxvYyhDSVBTT19WNF9IRFJfTEVOICsgNCArIENJUFNPX1Y0X1RBRzFfQ0FUX0xFTiwKLQkJCSAgICAgIEdGUF9BVE9NSUMpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoKHNlY2F0dHItPmZsYWdzICYgTkVUTEJMX1NFQ0FUVFJfTUxTX0xWTCkgPT0gMCkKKwkJcmV0dXJuIC1FUEVSTTsKIAorCXJldF92YWwgPSBjaXBzb192NF9tYXBfbHZsX2h0b24oZG9pX2RlZiwgc2VjYXR0ci0+bWxzX2x2bCwgJmxldmVsKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCWlmIChzZWNhdHRyLT5mbGFncyAmIE5FVExCTF9TRUNBVFRSX01MU19DQVQpIHsKIAkJcmV0X3ZhbCA9IGNpcHNvX3Y0X21hcF9jYXRfcmJtX2h0b24oZG9pX2RlZiwKLQkJCQkJCSAgICBzZWNhdHRyLT5tbHNfY2F0LAotCQkJCQkJICAgIHNlY2F0dHItPm1sc19jYXRfbGVuLAotCQkJCQkJICAgICZidWZbQ0lQU09fVjRfSERSX0xFTiArIDRdLAotCQkJCQkJICAgIENJUFNPX1Y0X1RBRzFfQ0FUX0xFTik7CisJCQkJCQkgICAgc2VjYXR0ciwKKwkJCQkJCSAgICAmYnVmZmVyWzRdLAorCQkJCQkJICAgIGJ1ZmZlcl9sZW4gLSA0KTsKIAkJaWYgKHJldF92YWwgPCAwKQotCQkJZ290byBnZW50YWdfZmFpbHVyZTsKKwkJCXJldHVybiByZXRfdmFsOwogCiAJCS8qIFRoaXMgd2lsbCBzZW5kIHBhY2tldHMgdXNpbmcgdGhlICJvcHRpbWl6ZWQiIGZvcm1hdCB3aGVuCiAJCSAqIHBvc3NpYmlsZSBhcyBzcGVjaWZpZWQgaW4gIHNlY3Rpb24gMy40LjIuNiBvZiB0aGUKIAkJICogQ0lQU08gZHJhZnQuICovCi0JCWlmIChjaXBzb192NF9yYm1fb3B0Zm10ICYmIChyZXRfdmFsID4gMCAmJiByZXRfdmFsIDwgMTApKQotCQkJcmV0X3ZhbCA9IDEwOworCQlpZiAoY2lwc29fdjRfcmJtX29wdGZtdCAmJiByZXRfdmFsID4gMCAmJiByZXRfdmFsIDw9IDEwKQorCQkJdGFnX2xlbiA9IDE0OworCQllbHNlCisJCQl0YWdfbGVuID0gNCArIHJldF92YWw7CisJfSBlbHNlCisJCXRhZ19sZW4gPSA0OwogCi0JCWJ1Zl9sZW4gPSA0ICsgcmV0X3ZhbDsKLQl9IGVsc2UgewotCQlidWYgPSBremFsbG9jKENJUFNPX1Y0X0hEUl9MRU4gKyA0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKGJ1ZiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWJ1Zl9sZW4gPSA0OwotCX0KKwlidWZmZXJbMF0gPSAweDAxOworCWJ1ZmZlclsxXSA9IHRhZ19sZW47CisJYnVmZmVyWzNdID0gbGV2ZWw7CiAKLQlyZXRfdmFsID0gY2lwc29fdjRfbWFwX2x2bF9odG9uKGRvaV9kZWYsIHNlY2F0dHItPm1sc19sdmwsICZsZXZlbCk7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBnZW50YWdfZmFpbHVyZTsKLQotCXJldF92YWwgPSBjaXBzb192NF9nZW50YWdfaGRyKGRvaV9kZWYsIGJ1Zl9sZW4sIGJ1Zik7Ci0JaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBnZW50YWdfZmFpbHVyZTsKLQotCWJ1ZltDSVBTT19WNF9IRFJfTEVOXSA9IDB4MDE7Ci0JYnVmW0NJUFNPX1Y0X0hEUl9MRU4gKyAxXSA9IGJ1Zl9sZW47Ci0JYnVmW0NJUFNPX1Y0X0hEUl9MRU4gKyAzXSA9IGxldmVsOwotCi0JKmJ1ZmZlciA9IGJ1ZjsKLQkqYnVmZmVyX2xlbiA9IENJUFNPX1Y0X0hEUl9MRU4gKyBidWZfbGVuOwotCi0JcmV0dXJuIDA7Ci0KLWdlbnRhZ19mYWlsdXJlOgotCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIHRhZ19sZW47CiB9CiAKIC8qKgpAQCAtMTA3MSwzMiArMTI5NiwyMDggQEAKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAlzZWNhdHRyLT5tbHNfbHZsID0gbGV2ZWw7Ci0Jc2VjYXR0ci0+bWxzX2x2bF92bGQgPSAxOworCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX01MU19MVkw7CiAKIAlpZiAodGFnX2xlbiA+IDQpIHsKLQkJc3dpdGNoIChkb2lfZGVmLT50eXBlKSB7Ci0JCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6Ci0JCQlzZWNhdHRyLT5tbHNfY2F0X2xlbiA9IHRhZ19sZW4gLSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKLQkJCXNlY2F0dHItPm1sc19jYXRfbGVuID0KLQkJCQlkb2lfZGVmLT5tYXAuc3RkLT5jYXQubG9jYWxfc2l6ZTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNlY2F0dHItPm1sc19jYXQgPSBremFsbG9jKHNlY2F0dHItPm1sc19jYXRfbGVuLCBHRlBfQVRPTUlDKTsKKwkJc2VjYXR0ci0+bWxzX2NhdCA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF9hbGxvYyhHRlBfQVRPTUlDKTsKIAkJaWYgKHNlY2F0dHItPm1sc19jYXQgPT0gTlVMTCkKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCXJldF92YWwgPSBjaXBzb192NF9tYXBfY2F0X3JibV9udG9oKGRvaV9kZWYsCiAJCQkJCQkgICAgJnRhZ1s0XSwKIAkJCQkJCSAgICB0YWdfbGVuIC0gNCwKLQkJCQkJCSAgICBzZWNhdHRyLT5tbHNfY2F0LAotCQkJCQkJICAgIHNlY2F0dHItPm1sc19jYXRfbGVuKTsKLQkJaWYgKHJldF92YWwgPCAwKSB7Ci0JCQlrZnJlZShzZWNhdHRyLT5tbHNfY2F0KTsKKwkJCQkJCSAgICBzZWNhdHRyKTsKKwkJaWYgKHJldF92YWwgIT0gMCkgeworCQkJbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2ZyZWUoc2VjYXR0ci0+bWxzX2NhdCk7CiAJCQlyZXR1cm4gcmV0X3ZhbDsKIAkJfQotCQlzZWNhdHRyLT5tbHNfY2F0X2xlbiA9IHJldF92YWw7CisKKwkJc2VjYXR0ci0+ZmxhZ3MgfD0gTkVUTEJMX1NFQ0FUVFJfTUxTX0NBVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjaXBzb192NF9nZW50YWdfZW51bSAtIEdlbmVyYXRlIGEgQ0lQU08gZW51bWVyYXRlZCB0YWcgKHR5cGUgIzIpCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIEBidWZmZXI6IHRoZSBvcHRpb24gYnVmZmVyCisgKiBAYnVmZmVyX2xlbjogbGVuZ3RoIG9mIGJ1ZmZlciBpbiBieXRlcworICoKKyAqIERlc2NyaXB0aW9uOgorICogR2VuZXJhdGUgYSBDSVBTTyBvcHRpb24gdXNpbmcgdGhlIGVudW1lcmF0ZWQgdGFnLCB0YWcgdHlwZSAjMi4gIFJldHVybnMgdGhlCisgKiBzaXplIG9mIHRoZSB0YWcgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IGNpcHNvX3Y0X2dlbnRhZ19lbnVtKGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkJY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0ciwKKwkJCQl1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkJdTMyIGJ1ZmZlcl9sZW4pCit7CisJaW50IHJldF92YWw7CisJdTMyIHRhZ19sZW47CisJdTMyIGxldmVsOworCisJaWYgKCEoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9NTFNfTFZMKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldF92YWwgPSBjaXBzb192NF9tYXBfbHZsX2h0b24oZG9pX2RlZiwgc2VjYXR0ci0+bWxzX2x2bCwgJmxldmVsKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCWlmIChzZWNhdHRyLT5mbGFncyAmIE5FVExCTF9TRUNBVFRSX01MU19DQVQpIHsKKwkJcmV0X3ZhbCA9IGNpcHNvX3Y0X21hcF9jYXRfZW51bV9odG9uKGRvaV9kZWYsCisJCQkJCQkgICAgIHNlY2F0dHIsCisJCQkJCQkgICAgICZidWZmZXJbNF0sCisJCQkJCQkgICAgIGJ1ZmZlcl9sZW4gLSA0KTsKKwkJaWYgKHJldF92YWwgPCAwKQorCQkJcmV0dXJuIHJldF92YWw7CisKKwkJdGFnX2xlbiA9IDQgKyByZXRfdmFsOworCX0gZWxzZQorCQl0YWdfbGVuID0gNDsKKworCWJ1ZmZlclswXSA9IDB4MDI7CisJYnVmZmVyWzFdID0gdGFnX2xlbjsKKwlidWZmZXJbM10gPSBsZXZlbDsKKworCXJldHVybiB0YWdfbGVuOworfQorCisvKioKKyAqIGNpcHNvX3Y0X3BhcnNldGFnX2VudW0gLSBQYXJzZSBhIENJUFNPIGVudW1lcmF0ZWQgdGFnCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAdGFnOiB0aGUgQ0lQU08gdGFnCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBhcnNlIGEgQ0lQU08gZW51bWVyYXRlZCB0YWcgKHRhZyB0eXBlICMyKSBhbmQgcmV0dXJuIHRoZSBzZWN1cml0eQorICogYXR0cmlidXRlcyBpbiBAc2VjYXR0ci4gIFJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlcyB2YWx1ZXMgb24KKyAqIGZhaWx1cmUuCisgKgorICovCitzdGF0aWMgaW50IGNpcHNvX3Y0X3BhcnNldGFnX2VudW0oY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywKKwkJCQkgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJaW50IHJldF92YWw7CisJdTggdGFnX2xlbiA9IHRhZ1sxXTsKKwl1MzIgbGV2ZWw7CisKKwlyZXRfdmFsID0gY2lwc29fdjRfbWFwX2x2bF9udG9oKGRvaV9kZWYsIHRhZ1szXSwgJmxldmVsKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlyZXR1cm4gcmV0X3ZhbDsKKwlzZWNhdHRyLT5tbHNfbHZsID0gbGV2ZWw7CisJc2VjYXR0ci0+ZmxhZ3MgfD0gTkVUTEJMX1NFQ0FUVFJfTUxTX0xWTDsKKworCWlmICh0YWdfbGVuID4gNCkgeworCQlzZWNhdHRyLT5tbHNfY2F0ID0gbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2FsbG9jKEdGUF9BVE9NSUMpOworCQlpZiAoc2VjYXR0ci0+bWxzX2NhdCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0X3ZhbCA9IGNpcHNvX3Y0X21hcF9jYXRfZW51bV9udG9oKGRvaV9kZWYsCisJCQkJCQkgICAgICZ0YWdbNF0sCisJCQkJCQkgICAgIHRhZ19sZW4gLSA0LAorCQkJCQkJICAgICBzZWNhdHRyKTsKKwkJaWYgKHJldF92YWwgIT0gMCkgeworCQkJbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2ZyZWUoc2VjYXR0ci0+bWxzX2NhdCk7CisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJfQorCisJCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX01MU19DQVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY2lwc29fdjRfZ2VudGFnX3JuZyAtIEdlbmVyYXRlIGEgQ0lQU08gcmFuZ2VkIHRhZyAodHlwZSAjNSkKKyAqIEBkb2lfZGVmOiB0aGUgRE9JIGRlZmluaXRpb24KKyAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcworICogQGJ1ZmZlcjogdGhlIG9wdGlvbiBidWZmZXIKKyAqIEBidWZmZXJfbGVuOiBsZW5ndGggb2YgYnVmZmVyIGluIGJ5dGVzCisgKgorICogRGVzY3JpcHRpb246CisgKiBHZW5lcmF0ZSBhIENJUFNPIG9wdGlvbiB1c2luZyB0aGUgcmFuZ2VkIHRhZywgdGFnIHR5cGUgIzUuICBSZXR1cm5zIHRoZQorICogc2l6ZSBvZiB0aGUgdGFnIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBjaXBzb192NF9nZW50YWdfcm5nKGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0ciwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisJCQkgICAgICAgdTMyIGJ1ZmZlcl9sZW4pCit7CisJaW50IHJldF92YWw7CisJdTMyIHRhZ19sZW47CisJdTMyIGxldmVsOworCisJaWYgKCEoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9NTFNfTFZMKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldF92YWwgPSBjaXBzb192NF9tYXBfbHZsX2h0b24oZG9pX2RlZiwgc2VjYXR0ci0+bWxzX2x2bCwgJmxldmVsKTsKKwlpZiAocmV0X3ZhbCAhPSAwKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCWlmIChzZWNhdHRyLT5mbGFncyAmIE5FVExCTF9TRUNBVFRSX01MU19DQVQpIHsKKwkJcmV0X3ZhbCA9IGNpcHNvX3Y0X21hcF9jYXRfcm5nX2h0b24oZG9pX2RlZiwKKwkJCQkJCSAgICBzZWNhdHRyLAorCQkJCQkJICAgICZidWZmZXJbNF0sCisJCQkJCQkgICAgYnVmZmVyX2xlbiAtIDQpOworCQlpZiAocmV0X3ZhbCA8IDApCisJCQlyZXR1cm4gcmV0X3ZhbDsKKworCQl0YWdfbGVuID0gNCArIHJldF92YWw7CisJfSBlbHNlCisJCXRhZ19sZW4gPSA0OworCisJYnVmZmVyWzBdID0gMHgwNTsKKwlidWZmZXJbMV0gPSB0YWdfbGVuOworCWJ1ZmZlclszXSA9IGxldmVsOworCisJcmV0dXJuIHRhZ19sZW47Cit9CisKKy8qKgorICogY2lwc29fdjRfcGFyc2V0YWdfcm5nIC0gUGFyc2UgYSBDSVBTTyByYW5nZWQgdGFnCisgKiBAZG9pX2RlZjogdGhlIERPSSBkZWZpbml0aW9uCisgKiBAdGFnOiB0aGUgQ0lQU08gdGFnCisgKiBAc2VjYXR0cjogdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFBhcnNlIGEgQ0lQU08gcmFuZ2VkIHRhZyAodGFnIHR5cGUgIzUpIGFuZCByZXR1cm4gdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMKKyAqIGluIEBzZWNhdHRyLiAgUmV0dXJuIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmVzIHZhbHVlcyBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBjaXBzb192NF9wYXJzZXRhZ19ybmcoY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLAorCQkJCSBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCWludCByZXRfdmFsOworCXU4IHRhZ19sZW4gPSB0YWdbMV07CisJdTMyIGxldmVsOworCisJcmV0X3ZhbCA9IGNpcHNvX3Y0X21hcF9sdmxfbnRvaChkb2lfZGVmLCB0YWdbM10sICZsZXZlbCk7CisJaWYgKHJldF92YWwgIT0gMCkKKwkJcmV0dXJuIHJldF92YWw7CisJc2VjYXR0ci0+bWxzX2x2bCA9IGxldmVsOworCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX01MU19MVkw7CisKKwlpZiAodGFnX2xlbiA+IDQpIHsKKwkJc2VjYXR0ci0+bWxzX2NhdCA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF9hbGxvYyhHRlBfQVRPTUlDKTsKKwkJaWYgKHNlY2F0dHItPm1sc19jYXQgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXJldF92YWwgPSBjaXBzb192NF9tYXBfY2F0X3JuZ19udG9oKGRvaV9kZWYsCisJCQkJCQkgICAgJnRhZ1s0XSwKKwkJCQkJCSAgICB0YWdfbGVuIC0gNCwKKwkJCQkJCSAgICBzZWNhdHRyKTsKKwkJaWYgKHJldF92YWwgIT0gMCkgeworCQkJbmV0bGJsX3NlY2F0dHJfY2F0bWFwX2ZyZWUoc2VjYXR0ci0+bWxzX2NhdCk7CisJCQlyZXR1cm4gcmV0X3ZhbDsKKwkJfQorCisJCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX01MU19DQVQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTQwLDcgKzE1NDEsNyBAQAogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKLQlkb2lfZGVmID0gY2lwc29fdjRfZG9pX2dldGRlZihudG9obCgqKCh1MzIgKikmb3B0WzJdKSkpOworCWRvaV9kZWYgPSBjaXBzb192NF9kb2lfc2VhcmNoKG50b2hsKCooKF9fYmUzMiAqKSZvcHRbMl0pKSk7CiAJaWYgKGRvaV9kZWYgPT0gTlVMTCkgewogCQllcnJfb2Zmc2V0ID0gMjsKIAkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOwpAQCAtMTE5MSw2ICsxNTkyLDQ0IEBACiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgQ0lQU09fVjRfVEFHX0VOVU06CisJCQlpZiAodGFnX2xlbiA8IDQpIHsKKwkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAxOworCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKKwkJCX0KKworCQkJaWYgKGNpcHNvX3Y0X21hcF9sdmxfdmFsaWQoZG9pX2RlZiwKKwkJCQkJCSAgIHRhZ1szXSkgPCAwKSB7CisJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgMzsKKwkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CisJCQl9CisJCQlpZiAodGFnX2xlbiA+IDQgJiYKKwkJCSAgICBjaXBzb192NF9tYXBfY2F0X2VudW1fdmFsaWQoZG9pX2RlZiwKKwkJCQkJCQkmdGFnWzRdLAorCQkJCQkJCXRhZ19sZW4gLSA0KSA8IDApIHsKKwkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyA0OworCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X1RBR19SQU5HRToKKwkJCWlmICh0YWdfbGVuIDwgNCkgeworCQkJCWVycl9vZmZzZXQgPSBvcHRfaXRlciArIDE7CisJCQkJZ290byB2YWxpZGF0ZV9yZXR1cm5fbG9ja2VkOworCQkJfQorCisJCQlpZiAoY2lwc29fdjRfbWFwX2x2bF92YWxpZChkb2lfZGVmLAorCQkJCQkJICAgdGFnWzNdKSA8IDApIHsKKwkJCQllcnJfb2Zmc2V0ID0gb3B0X2l0ZXIgKyAzOworCQkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKKwkJCX0KKwkJCWlmICh0YWdfbGVuID4gNCAmJgorCQkJICAgIGNpcHNvX3Y0X21hcF9jYXRfcm5nX3ZhbGlkKGRvaV9kZWYsCisJCQkJCQkgICAgICAgJnRhZ1s0XSwKKwkJCQkJCSAgICAgICB0YWdfbGVuIC0gNCkgPCAwKSB7CisJCQkJZXJyX29mZnNldCA9IG9wdF9pdGVyICsgNDsKKwkJCQlnb3RvIHZhbGlkYXRlX3JldHVybl9sb2NrZWQ7CisJCQl9CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVycl9vZmZzZXQgPSBvcHRfaXRlcjsKIAkJCWdvdG8gdmFsaWRhdGVfcmV0dXJuX2xvY2tlZDsKQEAgLTEyNjUsNyArMTcwNCw3IEBACiB7CiAJaW50IHJldF92YWwgPSAtRVBFUk07CiAJdTMyIGl0ZXI7Ci0JdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpidWY7CiAJdTMyIGJ1Zl9sZW4gPSAwOwogCXUzMiBvcHRfbGVuOwogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBOVUxMOwpAQCAtMTI4MSwxNyArMTcyMCw0MCBAQAogCWlmIChzayA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAorCS8qIFdlIGFsbG9jYXRlIHRoZSBtYXhpbXVtIENJUFNPIG9wdGlvbiBzaXplIGhlcmUgc28gd2UgYXJlIHByb2JhYmx5CisJICogYmVpbmcgYSBsaXR0bGUgd2FzdGVmdWwsIGJ1dCBpdCBtYWtlcyBvdXIgbGlmZSBfbXVjaF8gZWFzaWVyIGxhdGVyCisJICogb24gYW5kIGFmdGVyIGFsbCB3ZSBhcmUgb25seSB0YWxraW5nIGFib3V0IDQwIGJ5dGVzLiAqLworCWJ1Zl9sZW4gPSBDSVBTT19WNF9PUFRfTEVOX01BWDsKKwlidWYgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9BVE9NSUMpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlyZXRfdmFsID0gLUVOT01FTTsKKwkJZ290byBzb2NrZXRfc2V0YXR0cl9mYWlsdXJlOworCX0KKwogCS8qIFhYWCAtIFRoaXMgY29kZSBhc3N1bWVzIG9ubHkgb25lIHRhZyBwZXIgQ0lQU08gb3B0aW9uIHdoaWNoIGlzbid0CiAJICogcmVhbGx5IGEgZ29vZCBhc3N1bXB0aW9uIHRvIG1ha2UgYnV0IHNpbmNlIHdlIG9ubHkgc3VwcG9ydCB0aGUgTUFDCiAJICogdGFncyByaWdodCBub3cgaXQgaXMgYSBzYWZlIGFzc3VtcHRpb24uICovCiAJaXRlciA9IDA7CiAJZG8geworCQltZW1zZXQoYnVmLCAwLCBidWZfbGVuKTsKIAkJc3dpdGNoIChkb2lfZGVmLT50YWdzW2l0ZXJdKSB7CiAJCWNhc2UgQ0lQU09fVjRfVEFHX1JCSVRNQVA6CiAJCQlyZXRfdmFsID0gY2lwc29fdjRfZ2VudGFnX3JibShkb2lfZGVmLAotCQkJCQkJICAgICAgc2VjYXR0ciwKLQkJCQkJCSAgICAgICZidWYsCi0JCQkJCQkgICAgICAmYnVmX2xlbik7CisJCQkJCQkgICBzZWNhdHRyLAorCQkJCQkJICAgJmJ1ZltDSVBTT19WNF9IRFJfTEVOXSwKKwkJCQkJCSAgIGJ1Zl9sZW4gLSBDSVBTT19WNF9IRFJfTEVOKTsKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X1RBR19FTlVNOgorCQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X2dlbnRhZ19lbnVtKGRvaV9kZWYsCisJCQkJCQkgICBzZWNhdHRyLAorCQkJCQkJICAgJmJ1ZltDSVBTT19WNF9IRFJfTEVOXSwKKwkJCQkJCSAgIGJ1Zl9sZW4gLSBDSVBTT19WNF9IRFJfTEVOKTsKKwkJCWJyZWFrOworCQljYXNlIENJUFNPX1Y0X1RBR19SQU5HRToKKwkJCXJldF92YWwgPSBjaXBzb192NF9nZW50YWdfcm5nKGRvaV9kZWYsCisJCQkJCQkgICBzZWNhdHRyLAorCQkJCQkJICAgJmJ1ZltDSVBTT19WNF9IRFJfTEVOXSwKKwkJCQkJCSAgIGJ1Zl9sZW4gLSBDSVBTT19WNF9IRFJfTEVOKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0X3ZhbCA9IC1FUEVSTTsKQEAgLTEyOTksMTEgKzE3NjEsMTMgQEAKIAkJfQogCiAJCWl0ZXIrKzsKLQl9IHdoaWxlIChyZXRfdmFsICE9IDAgJiYKKwl9IHdoaWxlIChyZXRfdmFsIDwgMCAmJgogCQkgaXRlciA8IENJUFNPX1Y0X1RBR19NQVhDTlQgJiYKIAkJIGRvaV9kZWYtPnRhZ3NbaXRlcl0gIT0gQ0lQU09fVjRfVEFHX0lOVkFMSUQpOwotCWlmIChyZXRfdmFsICE9IDApCisJaWYgKHJldF92YWwgPCAwKQogCQlnb3RvIHNvY2tldF9zZXRhdHRyX2ZhaWx1cmU7CisJY2lwc29fdjRfZ2VudGFnX2hkcihkb2lfZGVmLCBidWYsIHJldF92YWwpOworCWJ1Zl9sZW4gPSBDSVBTT19WNF9IRFJfTEVOICsgcmV0X3ZhbDsKIAogCS8qIFdlIGNhbid0IHVzZSBpcF9vcHRpb25zX2dldCgpIGRpcmVjdGx5IGJlY2F1c2UgaXQgbWFrZXMgYSBjYWxsIHRvCiAJICogaXBfb3B0aW9uc19nZXRfYWxsb2MoKSB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5IHdpdGggR0ZQX0tFUk5FTCBhbmQKQEAgLTEzNzAsMTkgKzE4MzQsMzMgQEAKIAlpZiAocmV0X3ZhbCA9PSAwKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCWRvaSA9IG50b2hsKCoodTMyICopJmNpcHNvX3B0clsyXSk7CisJZG9pID0gbnRvaGwoKihfX2JlMzIgKikmY2lwc29fcHRyWzJdKTsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JZG9pX2RlZiA9IGNpcHNvX3Y0X2RvaV9nZXRkZWYoZG9pKTsKKwlkb2lfZGVmID0gY2lwc29fdjRfZG9pX3NlYXJjaChkb2kpOwogCWlmIChkb2lfZGVmID09IE5VTEwpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PTVNHOwogCX0KKworCS8qIFhYWCAtIFRoaXMgY29kZSBhc3N1bWVzIG9ubHkgb25lIHRhZyBwZXIgQ0lQU08gb3B0aW9uIHdoaWNoIGlzbid0CisJICogcmVhbGx5IGEgZ29vZCBhc3N1bXB0aW9uIHRvIG1ha2UgYnV0IHNpbmNlIHdlIG9ubHkgc3VwcG9ydCB0aGUgTUFDCisJICogdGFncyByaWdodCBub3cgaXQgaXMgYSBzYWZlIGFzc3VtcHRpb24uICovCiAJc3dpdGNoIChjaXBzb19wdHJbNl0pIHsKIAljYXNlIENJUFNPX1Y0X1RBR19SQklUTUFQOgogCQlyZXRfdmFsID0gY2lwc29fdjRfcGFyc2V0YWdfcmJtKGRvaV9kZWYsCiAJCQkJCQkmY2lwc29fcHRyWzZdLAogCQkJCQkJc2VjYXR0cik7CiAJCWJyZWFrOworCWNhc2UgQ0lQU09fVjRfVEFHX0VOVU06CisJCXJldF92YWwgPSBjaXBzb192NF9wYXJzZXRhZ19lbnVtKGRvaV9kZWYsCisJCQkJCQkgJmNpcHNvX3B0cls2XSwKKwkJCQkJCSBzZWNhdHRyKTsKKwkJYnJlYWs7CisJY2FzZSBDSVBTT19WNF9UQUdfUkFOR0U6CisJCXJldF92YWwgPSBjaXBzb192NF9wYXJzZXRhZ19ybmcoZG9pX2RlZiwKKwkJCQkJCSZjaXBzb19wdHJbNl0sCisJCQkJCQlzZWNhdHRyKTsKKwkJYnJlYWs7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC0xNDMwLDIzICsxOTA4LDMwIEBACiAJdTMyIGRvaTsKIAlzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmOwogCi0JaWYgKCFDSVBTT19WNF9PUFRFWElTVChza2IpKQotCQlyZXR1cm4gLUVOT01TRzsKIAljaXBzb19wdHIgPSBDSVBTT19WNF9PUFRQVFIoc2tiKTsKIAlpZiAoY2lwc29fdjRfY2FjaGVfY2hlY2soY2lwc29fcHRyLCBjaXBzb19wdHJbMV0sIHNlY2F0dHIpID09IDApCiAJCXJldHVybiAwOwogCi0JZG9pID0gbnRvaGwoKih1MzIgKikmY2lwc29fcHRyWzJdKTsKKwlkb2kgPSBudG9obCgqKF9fYmUzMiAqKSZjaXBzb19wdHJbMl0pOwogCXJjdV9yZWFkX2xvY2soKTsKLQlkb2lfZGVmID0gY2lwc29fdjRfZG9pX2dldGRlZihkb2kpOworCWRvaV9kZWYgPSBjaXBzb192NF9kb2lfc2VhcmNoKGRvaSk7CiAJaWYgKGRvaV9kZWYgPT0gTlVMTCkKIAkJZ290byBza2J1ZmZfZ2V0YXR0cl9yZXR1cm47CisKKwkvKiBYWFggLSBUaGlzIGNvZGUgYXNzdW1lcyBvbmx5IG9uZSB0YWcgcGVyIENJUFNPIG9wdGlvbiB3aGljaCBpc24ndAorCSAqIHJlYWxseSBhIGdvb2QgYXNzdW1wdGlvbiB0byBtYWtlIGJ1dCBzaW5jZSB3ZSBvbmx5IHN1cHBvcnQgdGhlIE1BQworCSAqIHRhZ3MgcmlnaHQgbm93IGl0IGlzIGEgc2FmZSBhc3N1bXB0aW9uLiAqLwogCXN3aXRjaCAoY2lwc29fcHRyWzZdKSB7CiAJY2FzZSBDSVBTT19WNF9UQUdfUkJJVE1BUDoKIAkJcmV0X3ZhbCA9IGNpcHNvX3Y0X3BhcnNldGFnX3JibShkb2lfZGVmLAogCQkJCQkJJmNpcHNvX3B0cls2XSwKIAkJCQkJCXNlY2F0dHIpOwogCQlicmVhazsKKwljYXNlIENJUFNPX1Y0X1RBR19FTlVNOgorCQlyZXRfdmFsID0gY2lwc29fdjRfcGFyc2V0YWdfZW51bShkb2lfZGVmLAorCQkJCQkJICZjaXBzb19wdHJbNl0sCisJCQkJCQkgc2VjYXR0cik7CisJCWJyZWFrOwogCX0KIAogc2tidWZmX2dldGF0dHJfcmV0dXJuOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDc2MDJjNzkuLjJmZDg5OTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2RldmluZXQuYworKysgYi9uZXQvaXB2NC9kZXZpbmV0LmMKQEAgLTU3NywyMCArNTc3LDIwIEBACiAgKglEZXRlcm1pbmUgYSBkZWZhdWx0IG5ldHdvcmsgbWFzaywgYmFzZWQgb24gdGhlIElQIGFkZHJlc3MuCiAgKi8KIAotc3RhdGljIF9faW5saW5lX18gaW50IGluZXRfYWJjX2xlbih1MzIgYWRkcikKK3N0YXRpYyBfX2lubGluZV9fIGludCBpbmV0X2FiY19sZW4oX19iZTMyIGFkZHIpCiB7CiAJaW50IHJjID0gLTE7CS8qIFNvbWV0aGluZyBlbHNlLCBwcm9iYWJseSBhIG11bHRpY2FzdC4gKi8KIAogICAJaWYgKFpFUk9ORVQoYWRkcikpCiAgIAkJcmMgPSAwOwogCWVsc2UgewotCQlhZGRyID0gbnRvaGwoYWRkcik7CisJCV9fdTMyIGhhZGRyID0gbnRvaGwoYWRkcik7CiAKLQkJaWYgKElOX0NMQVNTQShhZGRyKSkKKwkJaWYgKElOX0NMQVNTQShoYWRkcikpCiAJCQlyYyA9IDg7Ci0JCWVsc2UgaWYgKElOX0NMQVNTQihhZGRyKSkKKwkJZWxzZSBpZiAoSU5fQ0xBU1NCKGhhZGRyKSkKIAkJCXJjID0gMTY7Ci0JCWVsc2UgaWYgKElOX0NMQVNTQyhhZGRyKSkKKwkJZWxzZSBpZiAoSU5fQ0xBU1NDKGhhZGRyKSkKIAkJCXJjID0gMjQ7CiAJfQogCkBAIC0xMTIwLDYgKzExMjAsMTYgQEAKIAkubm90aWZpZXJfY2FsbCA9aW5ldGRldl9ldmVudCwKIH07CiAKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGluZXRfbmxtc2dfc2l6ZSh2b2lkKQoreworCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogSUZBX0FERFJFU1MgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkFfTE9DQUwgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkFfQlJPQURDQVNUICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogSUZBX0FOWUNBU1QgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShJRk5BTVNJWik7IC8qIElGQV9MQUJFTCAqLworfQorCiBzdGF0aWMgaW50IGluZXRfZmlsbF9pZmFkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluX2lmYWRkciAqaWZhLAogCQkJICAgIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzKQogewpAQCAtMTIwOCwxNSArMTIxOCwxMyBAQAogCXUzMiBzZXEgPSBubGggPyBubGgtPm5sbXNnX3NlcSA6IDA7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCi0Jc2tiID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBubG1zZ19uZXcoaW5ldF9ubG1zZ19zaXplKCksIEdGUF9LRVJORUwpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBpbmV0X2ZpbGxfaWZhZGRyKHNrYiwgaWZhLCBwaWQsIHNlcSwgZXZlbnQsIDApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlnb3RvIGVycm91dDsKLQl9CisJLyogZmFpbHVyZSBpbXBsaWVzIEJVRyBpbiBpbmV0X25sbXNnX3NpemUoKSAqLworCUJVR19PTihlcnIgPCAwKTsKIAogCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgcGlkLCBSVE5MR1JQX0lQVjRfSUZBRERSLCBubGgsIEdGUF9LRVJORUwpOwogZXJyb3V0OgpAQCAtMTU1NiwxMiArMTU2NCwxMiBAQAogewogCWludCBpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbl9kZXYgPyBpbl9kZXYtPmRldiA6IE5VTEw7Ci0Jc3RydWN0IGRldmluZXRfc3lzY3RsX3RhYmxlICp0ID0ga21hbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgZGV2aW5ldF9zeXNjdGxfdGFibGUgKnQgPSBrbWVtZHVwKCZkZXZpbmV0X3N5c2N0bCwgc2l6ZW9mKCp0KSwKKwkJCQkJCSBHRlBfS0VSTkVMKTsKIAljaGFyICpkZXZfbmFtZSA9IE5VTEw7CiAKIAlpZiAoIXQpCiAJCXJldHVybjsKLQltZW1jcHkodCwgJmRldmluZXRfc3lzY3RsLCBzaXplb2YoKnQpKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0LT5kZXZpbmV0X3ZhcnMpIC0gMTsgaSsrKSB7CiAJCXQtPmRldmluZXRfdmFyc1tpXS5kYXRhICs9IChjaGFyICopcCAtIChjaGFyICopJmlwdjRfZGV2Y29uZjsKIAkJdC0+ZGV2aW5ldF92YXJzW2ldLmRlID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCBiNWMyMDViLi5mMmM2Nzc2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKKysrIGIvbmV0L2lwdjQvZXNwNC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJaWYgKHgtPmVuY2FwKSB7CiAJCXN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKmVuY2FwID0geC0+ZW5jYXA7CiAJCXN0cnVjdCB1ZHBoZHIgKnVoOwotCQl1MzIgKnVkcGRhdGEzMjsKKwkJX19iZTMyICp1ZHBkYXRhMzI7CiAKIAkJdWggPSAoc3RydWN0IHVkcGhkciAqKWVzcGg7CiAJCXVoLT5zb3VyY2UgPSBlbmNhcC0+ZW5jYXBfc3BvcnQ7CkBAIC04MSw3ICs4MSw3IEBACiAJCQllc3BoID0gKHN0cnVjdCBpcF9lc3BfaGRyICopKHVoICsgMSk7CiAJCQlicmVhazsKIAkJY2FzZSBVRFBfRU5DQVBfRVNQSU5VRFBfTk9OX0lLRToKLQkJCXVkcGRhdGEzMiA9ICh1MzIgKikodWggKyAxKTsKKwkJCXVkcGRhdGEzMiA9IChfX2JlMzIgKikodWggKyAxKTsKIAkJCXVkcGRhdGEzMlswXSA9IHVkcGRhdGEzMlsxXSA9IDA7CiAJCQllc3BoID0gKHN0cnVjdCBpcF9lc3BfaGRyICopKHVkcGRhdGEzMiArIDIpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IGFmMDE5MGQuLmQ0N2I3MmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC03NjgsOCArNzY4LDggQEAKIHsKIAkKIAlzdHJ1Y3QgZmliX3Jlc3VsdCAgICAgICByZXM7Ci0Jc3RydWN0IGZsb3dpICAgICAgICAgICAgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGZybi0+ZmxfYWRkciwgCi0JCQkJCQkJICAgIC5md21hcmsgPSBmcm4tPmZsX2Z3bWFyaywKKwlzdHJ1Y3QgZmxvd2kgICAgICAgICAgICBmbCA9IHsgLm1hcmsgPSBmcm4tPmZsX21hcmssCisJCQkJICAgICAgIC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IGZybi0+ZmxfYWRkciwKIAkJCQkJCQkgICAgLnRvcyA9IGZybi0+ZmxfdG9zLAogCQkJCQkJCSAgICAuc2NvcGUgPSBmcm4tPmZsX3Njb3BlIH0gfSB9OwogCWlmICh0YikgewpAQCAtODExLDcgKzgxMSw2IEBACiAJCiAJcGlkID0gbmxoLT5ubG1zZ19waWQ7ICAgICAgICAgICAvKnBpZCBvZiBzZW5kaW5nIHByb2Nlc3MgKi8KIAlORVRMSU5LX0NCKHNrYikucGlkID0gMDsgICAgICAgICAvKiBmcm9tIGtlcm5lbCAqLwotCU5FVExJTktfQ0Ioc2tiKS5kc3RfcGlkID0gcGlkOwogCU5FVExJTktfQ0Ioc2tiKS5kc3RfZ3JvdXAgPSAwOyAgLyogdW5pY2FzdCAqLwogCW5ldGxpbmtfdW5pY2FzdChzaywgc2tiLCBwaWQsIE1TR19ET05UV0FJVCk7CiB9ICAgIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3J1bGVzLmMgYi9uZXQvaXB2NC9maWJfcnVsZXMuYwppbmRleCAwODUyYjljLi5iODM3YzMzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfcnVsZXMuYworKysgYi9uZXQvaXB2NC9maWJfcnVsZXMuYwpAQCAtNDQsMTAgKzQ0LDYgQEAKIAlfX2JlMzIJCQlzcmNtYXNrOwogCV9fYmUzMgkJCWRzdDsKIAlfX2JlMzIJCQlkc3RtYXNrOwotI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKLQl1MzIJCQlmd21hcms7Ci0JdTMyCQkJZndtYXNrOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKIAl1MzIJCQl0Y2xhc3NpZDsKICNlbmRpZgpAQCAtMTYwLDExICsxNTYsNiBAQAogCWlmIChyLT50b3MgJiYgKHItPnRvcyAhPSBmbC0+Zmw0X3RvcykpCiAJCXJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSwotCWlmICgoci0+ZndtYXJrIF4gZmwtPmZsNF9md21hcmspICYgci0+ZndtYXNrKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE3OSwxNCArMTcwLDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBmaWI0X3J1bGVfcG9saWN5W0ZSQV9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKLQlbRlJBX0lGTkFNRV0JPSB7IC50eXBlID0gTkxBX1NUUklORywgLmxlbiA9IElGTkFNU0laIC0gMSB9LAotCVtGUkFfUFJJT1JJVFldCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKKwlGUkFfR0VORVJJQ19QT0xJQ1ksCiAJW0ZSQV9TUkNdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbRlJBX0RTVF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtGUkFfRldNQVJLXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCi0JW0ZSQV9GV01BU0tdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbRlJBX0ZMT1ddCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbRlJBX1RBQkxFXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiB9OwogCiBzdGF0aWMgaW50IGZpYjRfcnVsZV9jb25maWd1cmUoc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMjIwLDIwICsyMDcsNiBAQAogCWlmICh0YltGUkFfRFNUXSkKIAkJcnVsZTQtPmRzdCA9IG5sYV9nZXRfYmUzMih0YltGUkFfRFNUXSk7CiAKLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfRldNQVJLCi0JaWYgKHRiW0ZSQV9GV01BUktdKSB7Ci0JCXJ1bGU0LT5md21hcmsgPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVJLXSk7Ci0JCWlmIChydWxlNC0+ZndtYXJrKQotCQkJLyogY29tcGF0aWJpbGl0eTogaWYgdGhlIG1hcmsgdmFsdWUgaXMgbm9uLXplcm8gYWxsIGJpdHMKLQkJCSAqIGFyZSBjb21wYXJlZCB1bmxlc3MgYSBtYXNrIGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLgotCQkJICovCi0JCQlydWxlNC0+ZndtYXNrID0gMHhGRkZGRkZGRjsKLQl9Ci0KLQlpZiAodGJbRlJBX0ZXTUFTS10pCi0JCXJ1bGU0LT5md21hc2sgPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVNLXSk7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJaWYgKHRiW0ZSQV9GTE9XXSkKIAkJcnVsZTQtPnRjbGFzc2lkID0gbmxhX2dldF91MzIodGJbRlJBX0ZMT1ddKTsKQEAgLTI2NCwxNCArMjM3LDYgQEAKIAlpZiAoZnJoLT50b3MgJiYgKHJ1bGU0LT50b3MgIT0gZnJoLT50b3MpKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKLQlpZiAodGJbRlJBX0ZXTUFSS10gJiYgKHJ1bGU0LT5md21hcmsgIT0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFSS10pKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodGJbRlJBX0ZXTUFTS10gJiYgKHJ1bGU0LT5md21hc2sgIT0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFTS10pKSkKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJaWYgKHRiW0ZSQV9GTE9XXSAmJiAocnVsZTQtPnRjbGFzc2lkICE9IG5sYV9nZXRfdTMyKHRiW0ZSQV9GTE9XXSkpKQogCQlyZXR1cm4gMDsKQEAgLTI5NiwxNCArMjYxLDYgQEAKIAlmcmgtPnNyY19sZW4gPSBydWxlNC0+c3JjX2xlbjsKIAlmcmgtPnRvcyA9IHJ1bGU0LT50b3M7CiAKLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfRldNQVJLCi0JaWYgKHJ1bGU0LT5md21hcmspCi0JCU5MQV9QVVRfVTMyKHNrYiwgRlJBX0ZXTUFSSywgcnVsZTQtPmZ3bWFyayk7Ci0KLQlpZiAocnVsZTQtPmZ3bWFzayB8fCBydWxlNC0+ZndtYXJrKQotCQlOTEFfUFVUX1UzMihza2IsIEZSQV9GV01BU0ssIHJ1bGU0LT5md21hc2spOwotI2VuZGlmCi0KIAlpZiAocnVsZTQtPmRzdF9sZW4pCiAJCU5MQV9QVVRfQkUzMihza2IsIEZSQV9EU1QsIHJ1bGU0LT5kc3QpOwogCkBAIC0zNDIsNiArMjk5LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzaXplX3QgZmliNF9ydWxlX25sbXNnX3BheWxvYWQoc3RydWN0IGZpYl9ydWxlICpydWxlKQoreworCXJldHVybiBubGFfdG90YWxfc2l6ZSg0KSAvKiBkc3QgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBzcmMgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KTsgLyogZmxvdyAqLworfQorCiBzdGF0aWMgc3RydWN0IGZpYl9ydWxlc19vcHMgZmliNF9ydWxlc19vcHMgPSB7CiAJLmZhbWlseQkJPSBBRl9JTkVULAogCS5ydWxlX3NpemUJPSBzaXplb2Yoc3RydWN0IGZpYjRfcnVsZSksCkBAIC0zNTEsNiArMzE1LDcgQEAKIAkuY29tcGFyZQk9IGZpYjRfcnVsZV9jb21wYXJlLAogCS5maWxsCQk9IGZpYjRfcnVsZV9maWxsLAogCS5kZWZhdWx0X3ByZWYJPSBmaWI0X3J1bGVfZGVmYXVsdF9wcmVmLAorCS5ubG1zZ19wYXlsb2FkCT0gZmliNF9ydWxlX25sbXNnX3BheWxvYWQsCiAJLm5sZ3JvdXAJPSBSVE5MR1JQX0lQVjRfUlVMRSwKIAkucG9saWN5CQk9IGZpYjRfcnVsZV9wb2xpY3ksCiAJLnJ1bGVzX2xpc3QJPSAmZmliNF9ydWxlcywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCA4ODRkMTc2Li5lNjNiOGE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC0yNzMsMjUgKzI3Myw0OSBAQAogCXJldHVybiAtMTsKIH0KIAorc3RhdGljIGlubGluZSBzaXplX3QgZmliX25sbXNnX3NpemUoc3RydWN0IGZpYl9pbmZvICpmaSkKK3sKKwlzaXplX3QgcGF5bG9hZCA9IE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKQorCQkJICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX1RBQkxFICovCisJCQkgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfRFNUICovCisJCQkgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfUFJJT1JJVFkgKi8KKwkJCSArIG5sYV90b3RhbF9zaXplKDQpOyAvKiBSVEFfUFJFRlNSQyAqLworCisJLyogc3BhY2UgZm9yIG5lc3RlZCBtZXRyaWNzICovCisJcGF5bG9hZCArPSBubGFfdG90YWxfc2l6ZSgoUlRBWF9NQVggKiBubGFfdG90YWxfc2l6ZSg0KSkpOworCisJaWYgKGZpLT5maWJfbmhzKSB7CisJCS8qIEFsc28gaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlIGZpYl9uaHMgPT0gMSAqLworCisJCS8qIGVhY2ggbmV4dGhvcCBpcyBwYWNrZWQgaW4gYW4gYXR0cmlidXRlICovCisJCXNpemVfdCBuaHNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0bmV4dGhvcCkpOworCisJCS8qIG1heSBjb250YWluIGZsb3cgYW5kIGdhdGV3YXkgYXR0cmlidXRlICovCisJCW5oc2l6ZSArPSAyICogbmxhX3RvdGFsX3NpemUoNCk7CisKKwkJLyogYWxsIG5leHRob3BzIGFyZSBwYWNrZWQgaW4gYSBuZXN0ZWQgYXR0cmlidXRlICovCisJCXBheWxvYWQgKz0gbmxhX3RvdGFsX3NpemUoZmktPmZpYl9uaHMgKiBuaHNpemUpOworCX0KKworCXJldHVybiBwYXlsb2FkOworfQorCiB2b2lkIHJ0bXNnX2ZpYihpbnQgZXZlbnQsIF9fYmUzMiBrZXksIHN0cnVjdCBmaWJfYWxpYXMgKmZhLAogCSAgICAgICBpbnQgZHN0X2xlbiwgdTMyIHRiX2lkLCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBwYXlsb2FkID0gc2l6ZW9mKHN0cnVjdCBydG1zZykgKyAyNTY7CiAJdTMyIHNlcSA9IGluZm8tPm5saCA/IGluZm8tPm5saC0+bmxtc2dfc2VxIDogMDsKIAlpbnQgZXJyID0gLUVOT0JVRlM7CiAKLQlza2IgPSBubG1zZ19uZXcobmxtc2dfdG90YWxfc2l6ZShwYXlsb2FkKSwgR0ZQX0tFUk5FTCk7CisJc2tiID0gbmxtc2dfbmV3KGZpYl9ubG1zZ19zaXplKGZhLT5mYV9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIGVycm91dDsKIAogCWVyciA9IGZpYl9kdW1wX2luZm8oc2tiLCBpbmZvLT5waWQsIHNlcSwgZXZlbnQsIHRiX2lkLAogCQkJICAgIGZhLT5mYV90eXBlLCBmYS0+ZmFfc2NvcGUsIGtleSwgZHN0X2xlbiwKIAkJCSAgICBmYS0+ZmFfdG9zLCBmYS0+ZmFfaW5mbywgMCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gZXJyb3V0OwotCX0KKwkvKiBmYWlsdXJlIGltcGxpZXMgQlVHIGluIGZpYl9ubG1zZ19zaXplKCkgKi8KKwlCVUdfT04oZXJyIDwgMCk7CiAKIAllcnIgPSBydG5sX25vdGlmeShza2IsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY0X1JPVVRFLAogCQkJICBpbmZvLT5ubGgsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IGIzOWEzN2EuLjQwY2YwZDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpY21wX2J4bSAqaWNtcF9wYXJhbSA9IChzdHJ1Y3QgaWNtcF9ieG0gKilmcm9tOwotCXVuc2lnbmVkIGludCBjc3VtOworCV9fd3N1bSBjc3VtOwogCiAJY3N1bSA9IHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMoaWNtcF9wYXJhbS0+c2tiLAogCQkJCSAgICAgIGljbXBfcGFyYW0tPm9mZnNldCArIG9mZnNldCwKQEAgLTM1Niw3ICszNTYsNyBAQAogCQlpcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhpY21wX3NvY2tldC0+c2spOwogCWVsc2UgaWYgKChza2IgPSBza2JfcGVlaygmaWNtcF9zb2NrZXQtPnNrLT5za193cml0ZV9xdWV1ZSkpICE9IE5VTEwpIHsKIAkJc3RydWN0IGljbXBoZHIgKmljbXBoID0gc2tiLT5oLmljbXBoOwotCQl1bnNpZ25lZCBpbnQgY3N1bSA9IDA7CisJCV9fd3N1bSBjc3VtID0gMDsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CiAKIAkJc2tiX3F1ZXVlX3dhbGsoJmljbXBfc29ja2V0LT5zay0+c2tfd3JpdGVfcXVldWUsIHNrYjEpIHsKQEAgLTkzMSw3ICs5MzEsNyBAQAogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0JCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkKKwkJaWYgKCFjc3VtX2ZvbGQoc2tiLT5jc3VtKSkKIAkJCWJyZWFrOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIENIRUNLU1VNX05PTkU6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggNmVlZTcxNi4uMDAxN2NjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtOTMyLDcgKzkzMiw3IEBACiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKLQkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQorCQlpZiAoIWNzdW1fZm9sZChza2ItPmNzdW0pKQogCQkJYnJlYWs7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ0hFQ0tTVU1fTk9ORToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDk2YmJlMmEuLjlkNjg4MzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwpAQCAtMzQzLDcgKzM0Myw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19yb3V0ZV9yZXEpOwogCiBzdGF0aWMgaW5saW5lIHUzMiBpbmV0X3N5bnFfaGFzaChjb25zdCBfX2JlMzIgcmFkZHIsIGNvbnN0IF9fYmUxNiBycG9ydCwKLQkJCQkgY29uc3QgdTMyIHJuZCwgY29uc3QgdTE2IHN5bnFfaHNpemUpCisJCQkJIGNvbnN0IHUzMiBybmQsIGNvbnN0IHUzMiBzeW5xX2hzaXplKQogewogCXJldHVybiBqaGFzaF8yd29yZHMoKF9fZm9yY2UgdTMyKXJhZGRyLCAoX19mb3JjZSB1MzIpcnBvcnQsIHJuZCkgJiAoc3lucV9oc2l6ZSAtIDEpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCBkNWI1ZGVjLi40NzZjYjYwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgKi8KIAogI2RlZmluZSBIQVNIX1NJWkUgIDE2Ci0jZGVmaW5lIEhBU0goYWRkcikgKChhZGRyXihhZGRyPj40KSkmMHhGKQorI2RlZmluZSBIQVNIKGFkZHIpICgoKF9fZm9yY2UgdTMyKWFkZHJeKChfX2ZvcmNlIHUzMilhZGRyPj40KSkmMHhGKQogCiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsc1s0XVtIQVNIX1NJWkVdOwogCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogLyogR2l2ZW4gc3JjLCBkc3QgYW5kIGtleSwgZmluZCBhcHByb3ByaWF0ZSBmb3IgaW5wdXQgdHVubmVsLiAqLwogCi1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwZ3JlX3R1bm5lbF9sb29rdXAodTMyIHJlbW90ZSwgdTMyIGxvY2FsLCB1MzIga2V5KQorc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGdyZV90dW5uZWxfbG9va3VwKF9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCwgX19iZTMyIGtleSkKIHsKIAl1bnNpZ25lZCBoMCA9IEhBU0gocmVtb3RlKTsKIAl1bnNpZ25lZCBoMSA9IEhBU0goa2V5KTsKQEAgLTE5NCw5ICsxOTQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqKmlwZ3JlX2J1Y2tldChzdHJ1Y3QgaXBfdHVubmVsICp0KQogewotCXUzMiByZW1vdGUgPSB0LT5wYXJtcy5pcGguZGFkZHI7Ci0JdTMyIGxvY2FsID0gdC0+cGFybXMuaXBoLnNhZGRyOwotCXUzMiBrZXkgPSB0LT5wYXJtcy5pX2tleTsKKwlfX2JlMzIgcmVtb3RlID0gdC0+cGFybXMuaXBoLmRhZGRyOworCV9fYmUzMiBsb2NhbCA9IHQtPnBhcm1zLmlwaC5zYWRkcjsKKwlfX2JlMzIga2V5ID0gdC0+cGFybXMuaV9rZXk7CiAJdW5zaWduZWQgaCA9IEhBU0goa2V5KTsKIAlpbnQgcHJpbyA9IDA7CiAKQEAgLTIzNiw5ICsyMzYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwZ3JlX3R1bm5lbF9sb2NhdGUoc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcywgaW50IGNyZWF0ZSkKIHsKLQl1MzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKLQl1MzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwotCXUzMiBrZXkgPSBwYXJtcy0+aV9rZXk7CisJX19iZTMyIHJlbW90ZSA9IHBhcm1zLT5pcGguZGFkZHI7CisJX19iZTMyIGxvY2FsID0gcGFybXMtPmlwaC5zYWRkcjsKKwlfX2JlMzIga2V5ID0gcGFybXMtPmlfa2V5OwogCXN0cnVjdCBpcF90dW5uZWwgKnQsICoqdHAsICpudDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGggPSBIQVNIKGtleSk7CkBAIC0zMTksMTIgKzMxOSwxMiBAQAogICovCiAKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIqKXNrYi0+ZGF0YTsKLQl1MTYJICAgICAqcCA9ICh1MTYqKShza2ItPmRhdGErKGlwaC0+aWhsPDwyKSk7CisJX19iZTE2CSAgICAgKnAgPSAoX19iZTE2Kikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwogCWludCBncmVobGVuID0gKGlwaC0+aWhsPDwyKSArIDQ7CiAJaW50IHR5cGUgPSBza2ItPmguaWNtcGgtPnR5cGU7CiAJaW50IGNvZGUgPSBza2ItPmguaWNtcGgtPmNvZGU7CiAJc3RydWN0IGlwX3R1bm5lbCAqdDsKLQl1MTYgZmxhZ3M7CisJX19iZTE2IGZsYWdzOwogCiAJZmxhZ3MgPSBwWzBdOwogCWlmIChmbGFncyYoR1JFX0NTVU18R1JFX0tFWXxHUkVfU0VRfEdSRV9ST1VUSU5HfEdSRV9WRVJTSU9OKSkgewpAQCAtMzcwLDcgKzM3MCw3IEBACiAJfQogCiAJcmVhZF9sb2NrKCZpcGdyZV9sb2NrKTsKLQl0ID0gaXBncmVfdHVubmVsX2xvb2t1cChpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLCAoZmxhZ3MmR1JFX0tFWSkgPyAqKCgodTMyKilwKSArIChncmVobGVuPj4yKSAtIDEpIDogMCk7CisJdCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoaXBoLT5kYWRkciwgaXBoLT5zYWRkciwgKGZsYWdzJkdSRV9LRVkpID8gKigoKF9fYmUzMiopcCkgKyAoZ3JlaGxlbj4+MikgLSAxKSA6IDApOwogCWlmICh0ID09IE5VTEwgfHwgdC0+cGFybXMuaXBoLmRhZGRyID09IDAgfHwgTVVMVElDQVNUKHQtPnBhcm1zLmlwaC5kYWRkcikpCiAJCWdvdG8gb3V0OwogCkBAIC0zODgsMTQgKzM4OCwxNCBAQAogI2Vsc2UKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIqKWRwOwogCXN0cnVjdCBpcGhkciAqZWlwaDsKLQl1MTYJICAgICAqcCA9ICh1MTYqKShkcCsoaXBoLT5paGw8PDIpKTsKKwlfX2JlMTYJICAgICAqcCA9IChfX2JlMTYqKShkcCsoaXBoLT5paGw8PDIpKTsKIAlpbnQgdHlwZSA9IHNrYi0+aC5pY21waC0+dHlwZTsKIAlpbnQgY29kZSA9IHNrYi0+aC5pY21waC0+Y29kZTsKIAlpbnQgcmVsX3R5cGUgPSAwOwogCWludCByZWxfY29kZSA9IDA7CiAJX19iZTMyIHJlbF9pbmZvID0gMDsKIAlfX3UzMiBuID0gMDsKLQl1MTYgZmxhZ3M7CisJX19iZTE2IGZsYWdzOwogCWludCBncmVobGVuID0gKGlwaC0+aWhsPDwyKSArIDQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAJc3RydWN0IGZsb3dpIGZsOwpAQCAtNTU2LDkgKzU1Niw5IEBACiB7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJdTggICAgICpoOwotCXUxNiAgICBmbGFnczsKLQl1MTYgICAgY3N1bSA9IDA7Ci0JdTMyICAgIGtleSA9IDA7CisJX19iZTE2ICAgIGZsYWdzOworCV9fc3VtMTYgICBjc3VtID0gMDsKKwlfX2JlMzIga2V5ID0gMDsKIAl1MzIgICAgc2Vxbm8gPSAwOwogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbDsKIAlpbnQgICAgb2Zmc2V0ID0gNDsKQEAgLTU2OCw3ICs1NjgsNyBAQAogCiAJaXBoID0gc2tiLT5uaC5pcGg7CiAJaCA9IHNrYi0+ZGF0YTsKLQlmbGFncyA9ICoodTE2KiloOworCWZsYWdzID0gKihfX2JlMTYqKWg7CiAKIAlpZiAoZmxhZ3MmKEdSRV9DU1VNfEdSRV9LRVl8R1JFX1JPVVRJTkd8R1JFX1NFUXxHUkVfVkVSU0lPTikpIHsKIAkJLyogLSBWZXJzaW9uIG11c3QgYmUgMC4KQEAgLTU4MCw3ICs1ODAsNyBAQAogCQlpZiAoZmxhZ3MmR1JFX0NTVU0pIHsKIAkJCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAkJCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0JCQkJY3N1bSA9ICh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSk7CisJCQkJY3N1bSA9IGNzdW1fZm9sZChza2ItPmNzdW0pOwogCQkJCWlmICghY3N1bSkKIAkJCQkJYnJlYWs7CiAJCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC01OTIsMTEgKzU5MiwxMSBAQAogCQkJb2Zmc2V0ICs9IDQ7CiAJCX0KIAkJaWYgKGZsYWdzJkdSRV9LRVkpIHsKLQkJCWtleSA9ICoodTMyKikoaCArIG9mZnNldCk7CisJCQlrZXkgPSAqKF9fYmUzMiopKGggKyBvZmZzZXQpOwogCQkJb2Zmc2V0ICs9IDQ7CiAJCX0KIAkJaWYgKGZsYWdzJkdSRV9TRVEpIHsKLQkJCXNlcW5vID0gbnRvaGwoKih1MzIqKShoICsgb2Zmc2V0KSk7CisJCQlzZXFubyA9IG50b2hsKCooX19iZTMyKikoaCArIG9mZnNldCkpOwogCQkJb2Zmc2V0ICs9IDQ7CiAJCX0KIAl9CkBAIC02MDUsNyArNjA1LDcgQEAKIAlpZiAoKHR1bm5lbCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoaXBoLT5zYWRkciwgaXBoLT5kYWRkciwga2V5KSkgIT0gTlVMTCkgewogCQlzZWNwYXRoX3Jlc2V0KHNrYik7CiAKLQkJc2tiLT5wcm90b2NvbCA9ICoodTE2KikoaCArIDIpOworCQlza2ItPnByb3RvY29sID0gKihfX2JlMTYqKShoICsgMik7CiAJCS8qIFdDQ1AgdmVyc2lvbiAxIGFuZCAyIHByb3RvY29sIGRlY29kaW5nLgogCQkgKiAtIENoYW5nZSBwcm90b2NvbCB0byBJUAogCQkgKiAtIFdoZW4gZGVhbGluZyB3aXRoIFdDQ1B2MiwgU2tpcCBleHRyYSA0IGJ5dGVzIGluIEdSRSBoZWFkZXIKQEAgLTY3MywxMyArNjczLDEzIEBACiAJc3RydWN0IGlwaGRyICAqb2xkX2lwaCA9IHNrYi0+bmguaXBoOwogCXN0cnVjdCBpcGhkciAgKnRpcGg7CiAJdTggICAgIHRvczsKLQl1MTYgICAgZGY7CisJX19iZTE2IGRmOwogCXN0cnVjdCBydGFibGUgKnJ0OyAgICAgCQkJLyogUm91dGUgdG8gdGhlIG90aGVyIGhvc3QgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqdGRldjsJCQkvKiBEZXZpY2UgdG8gb3RoZXIgaG9zdCAqLwogCXN0cnVjdCBpcGhkciAgKmlwaDsJCQkvKiBPdXIgbmV3IElQIGhlYWRlciAqLwogCWludCAgICBtYXhfaGVhZHJvb207CQkJLyogVGhlIGV4dHJhIGhlYWRlciBzcGFjZSBuZWVkZWQgKi8KIAlpbnQgICAgZ3JlX2hsZW47Ci0JdTMyICAgIGRzdDsKKwlfX2JlMzIgZHN0OwogCWludCAgICBtdHU7CiAKIAlpZiAodHVubmVsLT5yZWN1cnNpb24rKykgewpAQCAtODYwLDExICs4NjAsMTEgQEAKIAkJCWlwaC0+dHRsID0gZHN0X21ldHJpYygmcnQtPnUuZHN0LCBSVEFYX0hPUExJTUlUKTsKIAl9CiAKLQkoKHUxNiopKGlwaCsxKSlbMF0gPSB0dW5uZWwtPnBhcm1zLm9fZmxhZ3M7Ci0JKCh1MTYqKShpcGgrMSkpWzFdID0gc2tiLT5wcm90b2NvbDsKKwkoKF9fYmUxNiopKGlwaCsxKSlbMF0gPSB0dW5uZWwtPnBhcm1zLm9fZmxhZ3M7CisJKChfX2JlMTYqKShpcGgrMSkpWzFdID0gc2tiLT5wcm90b2NvbDsKIAogCWlmICh0dW5uZWwtPnBhcm1zLm9fZmxhZ3MmKEdSRV9LRVl8R1JFX0NTVU18R1JFX1NFUSkpIHsKLQkJdTMyICpwdHIgPSAodTMyKikoKCh1OCopaXBoKSArIHR1bm5lbC0+aGxlbiAtIDQpOworCQlfX2JlMzIgKnB0ciA9IChfX2JlMzIqKSgoKHU4KilpcGgpICsgdHVubmVsLT5obGVuIC0gNCk7CiAKIAkJaWYgKHR1bm5lbC0+cGFybXMub19mbGFncyZHUkVfU0VRKSB7CiAJCQkrK3R1bm5lbC0+b19zZXFubzsKQEAgLTg3Nyw3ICs4NzcsNyBAQAogCQl9CiAJCWlmICh0dW5uZWwtPnBhcm1zLm9fZmxhZ3MmR1JFX0NTVU0pIHsKIAkJCSpwdHIgPSAwOwotCQkJKihfX3UxNiopcHRyID0gaXBfY29tcHV0ZV9jc3VtKCh2b2lkKikoaXBoKzEpLCBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKKwkJCSooX19zdW0xNiopcHRyID0gaXBfY29tcHV0ZV9jc3VtKCh2b2lkKikoaXBoKzEpLCBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAkJfQogCX0KIApAQCAtMTA2OCw3ICsxMDY4LDcgQEAKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfcHVzaChza2IsIHQtPmhsZW4pOwotCXUxNiAqcCA9ICh1MTYqKShpcGgrMSk7CisJX19iZTE2ICpwID0gKF9fYmUxNiopKGlwaCsxKTsKIAogCW1lbWNweShpcGgsICZ0LT5wYXJtcy5pcGgsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIAlwWzBdCQk9IHQtPnBhcm1zLm9fZmxhZ3M7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IGZjMTk1YTQuLmEzNTIwOWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KQEAgLTI4OCw5ICsyODksOCBAQAogCQkJICAgICEoSVBDQihza2IpLT5mbGFncyAmIElQU0tCX1JFUk9VVEVEKSk7CiB9CiAKLWludCBpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIGludCBpcGZyYWdvaykKK2ludCBpcF9xdWV1ZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaywgaW50IGlwZnJhZ29rKQogewotCXN0cnVjdCBzb2NrICpzayA9IHNrYi0+c2s7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSBpbmV0LT5vcHQ7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CkBAIC0zNDIsNyArMzQyLDcgQEAKIAogCS8qIE9LLCB3ZSBrbm93IHdoZXJlIHRvIHNlbmQgaXQsIGFsbG9jYXRlIGFuZCBidWlsZCBJUCBoZWFkZXIuICovCiAJaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpICsgKG9wdCA/IG9wdC0+b3B0bGVuIDogMCkpOwotCSooKF9fdTE2ICopaXBoKQk9IGh0b25zKCg0IDw8IDEyKSB8ICg1IDw8IDgpIHwgKGluZXQtPnRvcyAmIDB4ZmYpKTsKKwkqKChfX2JlMTYgKilpcGgpID0gaHRvbnMoKDQgPDwgMTIpIHwgKDUgPDwgOCkgfCAoaW5ldC0+dG9zICYgMHhmZikpOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKHNrYi0+bGVuKTsKIAlpZiAoaXBfZG9udF9mcmFnbWVudChzaywgJnJ0LT51LmRzdCkgJiYgIWlwZnJhZ29rKQogCQlpcGgtPmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOwpAQCAtMzg2LDYgKzM4Niw3IEBACiAJZHN0X3JlbGVhc2UodG8tPmRzdCk7CiAJdG8tPmRzdCA9IGRzdF9jbG9uZShmcm9tLT5kc3QpOwogCXRvLT5kZXYgPSBmcm9tLT5kZXY7CisJdG8tPm1hcmsgPSBmcm9tLT5tYXJrOwogCiAJLyogQ29weSB0aGUgZmxhZ3MgdG8gZWFjaCBmcmFnbWVudC4gKi8KIAlJUENCKHRvKS0+ZmxhZ3MgPSBJUENCKGZyb20pLT5mbGFnczsKQEAgLTM5NCw3ICszOTUsNiBAQAogCXRvLT50Y19pbmRleCA9IGZyb20tPnRjX2luZGV4OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgotCXRvLT5uZm1hcmsgPSBmcm9tLT5uZm1hcms7CiAJLyogQ29ubmVjdGlvbiBhc3NvY2lhdGlvbiBpcyBzYW1lIGFzIHByZS1mcmFnIHBhY2tldCAqLwogCW5mX2Nvbm50cmFja19wdXQodG8tPm5mY3QpOwogCXRvLT5uZmN0ID0gZnJvbS0+bmZjdDsKQEAgLTY4Myw3ICs2ODMsNyBAQAogCQlpZiAobWVtY3B5X2Zyb21pb3ZlY2VuZCh0bywgaW92LCBvZmZzZXQsIGxlbikgPCAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlIHsKLQkJdW5zaWduZWQgaW50IGNzdW0gPSAwOworCQlfX3dzdW0gY3N1bSA9IDA7CiAJCWlmIChjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodG8sIGlvdiwgb2Zmc2V0LCBsZW4sICZjc3VtKSA8IDApCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc2tiLT5jc3VtID0gY3N1bV9ibG9ja19hZGQoc2tiLT5jc3VtLCBjc3VtLCBvZGQpOwpAQCAtNjkxLDExICs2OTEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3N0YXRpYyBpbmxpbmUgX193c3VtCiBjc3VtX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsIGludCBjb3B5KQogewogCWNoYXIgKmthZGRyOwotCXVuc2lnbmVkIGludCBjc3VtOworCV9fd3N1bSBjc3VtOwogCWthZGRyID0ga21hcChwYWdlKTsKIAljc3VtID0gY3N1bV9wYXJ0aWFsKGthZGRyICsgb2Zmc2V0LCBjb3B5LCAwKTsKIAlrdW5tYXAocGFnZSk7CkBAIC0xMTY3LDcgKzExNjcsNyBAQAogCQl9CiAKIAkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKLQkJCXVuc2lnbmVkIGludCBjc3VtOworCQkJX193c3VtIGNzdW07CiAJCQljc3VtID0gY3N1bV9wYWdlKHBhZ2UsIG9mZnNldCwgbGVuKTsKIAkJCXNrYi0+Y3N1bSA9IGNzdW1fYmxvY2tfYWRkKHNrYi0+Y3N1bSwgY3N1bSwgc2tiLT5sZW4pOwogCQl9CkBAIC0xMzE1LDcgKzEzMTUsNyBAQAogc3RhdGljIGludCBpcF9yZXBseV9nbHVlX2JpdHModm9pZCAqZHB0ciwgY2hhciAqdG8sIGludCBvZmZzZXQsIAogCQkJICAgICAgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1bnNpZ25lZCBpbnQgY3N1bTsKKwlfX3dzdW0gY3N1bTsKIAogCWNzdW0gPSBjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGRwdHIrb2Zmc2V0LCB0bywgbGVuLCAwKTsKIAlza2ItPmNzdW0gPSBjc3VtX2Jsb2NrX2FkZChza2ItPmNzdW0sIGNzdW0sIG9kZCk7CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogCQkgICAgICAgJmlwYywgcnQsIE1TR19ET05UV0FJVCk7CiAJaWYgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3dyaXRlX3F1ZXVlKSkgIT0gTlVMTCkgewogCQlpZiAoYXJnLT5jc3Vtb2Zmc2V0ID49IDApCi0JCQkqKCh1MTYgKilza2ItPmgucmF3ICsgYXJnLT5jc3Vtb2Zmc2V0KSA9IGNzdW1fZm9sZChjc3VtX2FkZChza2ItPmNzdW0sIGFyZy0+Y3N1bSkpOworCQkJKigoX19zdW0xNiAqKXNrYi0+aC5yYXcgKyBhcmctPmNzdW1vZmZzZXQpID0gY3N1bV9mb2xkKGNzdW1fYWRkKHNrYi0+Y3N1bSwgYXJnLT5jc3VtKSk7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAkJaXBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggNGIxMzI5NS4uNTdkNGJhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0zNTUsNyArMzU1LDcgQEAKIAlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKIAlpZiAoc2luKSB7CiAJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXNpbi0+c2luX2FkZHIuc19hZGRyID0gKih1MzIqKShza2ItPm5oLnJhdyArIHNlcnItPmFkZHJfb2Zmc2V0KTsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSAqKF9fYmUzMiopKHNrYi0+bmgucmF3ICsgc2Vyci0+YWRkcl9vZmZzZXQpOwogCQlzaW4tPnNpbl9wb3J0ID0gc2Vyci0+cG9ydDsKIAkJbWVtc2V0KCZzaW4tPnNpbl96ZXJvLCAwLCBzaXplb2Yoc2luLT5zaW5femVybykpOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29uZmlnLmMgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCmluZGV4IDk1NWEwN2EuLmFmYTYwYjkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29uZmlnLmMKKysrIGIvbmV0L2lwdjQvaXBjb25maWcuYwpAQCAtMTAxLDYgKzEwMSw3IEBACiAjZGVmaW5lIENPTkZfTkFNRVNFUlZFUlNfTUFYICAgMyAgICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiBuYW1lc2VydmVycyAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAnMycgZnJvbSByZXNvbHYuaCAqLwogCisjZGVmaW5lIE5PTkUgX19jb25zdGFudF9odG9ubChJTkFERFJfTk9ORSkKIAogLyoKICAqIFB1YmxpYyBJUCBjb25maWd1cmF0aW9uCkBAIC0xMjksMTkgKzEzMCwxOSBAQAogCiBzdGF0aWMgaW50IGljX2hvc3RfbmFtZV9zZXQgX19pbml0ZGF0YSA9IDA7CS8qIEhvc3QgbmFtZSBzZXQgYnkgdXM/ICovCiAKLXUzMiBpY19teWFkZHIgPSBJTkFERFJfTk9ORTsJCS8qIE15IElQIGFkZHJlc3MgKi8KLXN0YXRpYyB1MzIgaWNfbmV0bWFzayA9IElOQUREUl9OT05FOwkvKiBOZXRtYXNrIGZvciBsb2NhbCBzdWJuZXQgKi8KLXUzMiBpY19nYXRld2F5ID0gSU5BRERSX05PTkU7CS8qIEdhdGV3YXkgSVAgYWRkcmVzcyAqLworX19iZTMyIGljX215YWRkciA9IE5PTkU7CQkvKiBNeSBJUCBhZGRyZXNzICovCitzdGF0aWMgX19iZTMyIGljX25ldG1hc2sgPSBOT05FOwkvKiBOZXRtYXNrIGZvciBsb2NhbCBzdWJuZXQgKi8KK19fYmUzMiBpY19nYXRld2F5ID0gTk9ORTsJLyogR2F0ZXdheSBJUCBhZGRyZXNzICovCiAKLXUzMiBpY19zZXJ2YWRkciA9IElOQUREUl9OT05FOwkvKiBCb290IHNlcnZlciBJUCBhZGRyZXNzICovCitfX2JlMzIgaWNfc2VydmFkZHIgPSBOT05FOwkvKiBCb290IHNlcnZlciBJUCBhZGRyZXNzICovCiAKLXUzMiByb290X3NlcnZlcl9hZGRyID0gSU5BRERSX05PTkU7CS8qIEFkZHJlc3Mgb2YgTkZTIHNlcnZlciAqLworX19iZTMyIHJvb3Rfc2VydmVyX2FkZHIgPSBOT05FOwkvKiBBZGRyZXNzIG9mIE5GUyBzZXJ2ZXIgKi8KIHU4IHJvb3Rfc2VydmVyX3BhdGhbMjU2XSA9IHsgMCwgfTsJLyogUGF0aCB0byBtb3VudCBhcyByb290ICovCiAKIC8qIFBlcnNpc3RlbnQgZGF0YTogKi8KIAogc3RhdGljIGludCBpY19wcm90b191c2VkOwkJCS8qIFByb3RvY29sIHVzZWQsIGlmIGFueSAqLwotc3RhdGljIHUzMiBpY19uYW1lc2VydmVyc1tDT05GX05BTUVTRVJWRVJTX01BWF07IC8qIEROUyBTZXJ2ZXIgSVAgYWRkcmVzc2VzICovCitzdGF0aWMgX19iZTMyIGljX25hbWVzZXJ2ZXJzW0NPTkZfTkFNRVNFUlZFUlNfTUFYXTsgLyogRE5TIFNlcnZlciBJUCBhZGRyZXNzZXMgKi8KIHN0YXRpYyB1OCBpY19kb21haW5bNjRdOwkJLyogRE5TIChub3QgTklTKSBkb21haW4gbmFtZSAqLwogCiAvKgpAQCAtMTcyLDcgKzE3Myw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBzaG9ydCBmbGFnczsKIAlzaG9ydCBhYmxlOwotCXUzMiB4aWQ7CisJX19iZTMyIHhpZDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaWNfZGV2aWNlICppY19maXJzdF9kZXYgX19pbml0ZGF0YSA9IE5VTEw7LyogTGlzdCBvZiBvcGVuIGRldmljZSAqLwpAQCAtMjIzLDcgKzIyNCw3IEBACiAJCQlkLT5mbGFncyA9IG9mbGFnczsKIAkJCWQtPmFibGUgPSBhYmxlOwogCQkJaWYgKGFibGUgJiBJQ19CT09UUCkKLQkJCQlnZXRfcmFuZG9tX2J5dGVzKCZkLT54aWQsIHNpemVvZih1MzIpKTsKKwkJCQlnZXRfcmFuZG9tX2J5dGVzKCZkLT54aWQsIHNpemVvZihfX2JlMzIpKTsKIAkJCWVsc2UKIAkJCQlkLT54aWQgPSAwOwogCQkJaWNfcHJvdG9faGF2ZV9pZiB8PSBhYmxlOwpAQCAtMjY5LDcgKzI3MCw3IEBACiAgKi8KIAogc3RhdGljIGlubGluZSB2b2lkCi1zZXRfc29ja2FkZHIoc3RydWN0IHNvY2thZGRyX2luICpzaW4sIHUzMiBhZGRyLCB1MTYgcG9ydCkKK3NldF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KQogewogCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOwpAQCAtMzMyLDcgKzMzMyw3IEBACiB7CiAJLyogTm8gbmVlZCB0byBzZXR1cCBkZXZpY2Ugcm91dGVzLCBvbmx5IHRoZSBkZWZhdWx0IHJvdXRlLi4uICovCiAKLQlpZiAoaWNfZ2F0ZXdheSAhPSBJTkFERFJfTk9ORSkgeworCWlmIChpY19nYXRld2F5ICE9IE5PTkUpIHsKIAkJc3RydWN0IHJ0ZW50cnkgcm07CiAJCWludCBlcnI7CiAKQEAgLTM2OCwxMCArMzY5LDEwIEBACiAJaWYgKCFpY19ob3N0X25hbWVfc2V0KQogCQlzcHJpbnRmKGluaXRfdXRzbmFtZSgpLT5ub2RlbmFtZSwgIiV1LiV1LiV1LiV1IiwgTklQUVVBRChpY19teWFkZHIpKTsKIAotCWlmIChyb290X3NlcnZlcl9hZGRyID09IElOQUREUl9OT05FKQorCWlmIChyb290X3NlcnZlcl9hZGRyID09IE5PTkUpCiAJCXJvb3Rfc2VydmVyX2FkZHIgPSBpY19zZXJ2YWRkcjsKIAotCWlmIChpY19uZXRtYXNrID09IElOQUREUl9OT05FKSB7CisJaWYgKGljX25ldG1hc2sgPT0gTk9ORSkgewogCQlpZiAoSU5fQ0xBU1NBKG50b2hsKGljX215YWRkcikpKQogCQkJaWNfbmV0bWFzayA9IGh0b25sKElOX0NMQVNTQV9ORVQpOwogCQllbHNlIGlmIChJTl9DTEFTU0IobnRvaGwoaWNfbXlhZGRyKSkpCkBAIC00MjAsNyArNDIxLDcgQEAKIHsKIAlzdHJ1Y3QgYXJwaGRyICpyYXJwOwogCXVuc2lnbmVkIGNoYXIgKnJhcnBfcHRyOwotCXUzMiBzaXAsIHRpcDsKKwlfX2JlMzIgc2lwLCB0aXA7CiAJdW5zaWduZWQgY2hhciAqc2hhLCAqdGhhOwkJLyogcyBmb3IgInNvdXJjZSIsIHQgZm9yICJ0YXJnZXQiICovCiAJc3RydWN0IGljX2RldmljZSAqZDsKIApAQCAtNDg1LDEyICs0ODYsMTIgQEAKIAkJZ290byBkcm9wX3VubG9jazsKIAogCS8qIERpc2NhcmQgcGFja2V0cyB3aGljaCBhcmUgbm90IGZyb20gc3BlY2lmaWVkIHNlcnZlci4gKi8KLQlpZiAoaWNfc2VydmFkZHIgIT0gSU5BRERSX05PTkUgJiYgaWNfc2VydmFkZHIgIT0gc2lwKQorCWlmIChpY19zZXJ2YWRkciAhPSBOT05FICYmIGljX3NlcnZhZGRyICE9IHNpcCkKIAkJZ290byBkcm9wX3VubG9jazsKIAogCS8qIFdlIGhhdmUgYSB3aW5uZXIhICovCiAJaWNfZGV2ID0gZGV2OwotCWlmIChpY19teWFkZHIgPT0gSU5BRERSX05PTkUpCisJaWYgKGljX215YWRkciA9PSBOT05FKQogCQlpY19teWFkZHIgPSB0aXA7CiAJaWNfc2VydmFkZHIgPSBzaXA7CiAJaWNfZ290X3JlcGx5ID0gSUNfUkFSUDsKQEAgLTUzMCwxMyArNTMxLDEzIEBACiAJdTggaHR5cGU7CQkvKiBIVyBhZGRyZXNzIHR5cGUgKi8KIAl1OCBobGVuOwkJLyogSFcgYWRkcmVzcyBsZW5ndGggKi8KIAl1OCBob3BzOwkJLyogVXNlZCBvbmx5IGJ5IGdhdGV3YXlzICovCi0JdTMyIHhpZDsJCS8qIFRyYW5zYWN0aW9uIElEICovCi0JdTE2IHNlY3M7CQkvKiBTZWNvbmRzIHNpbmNlIHdlIHN0YXJ0ZWQgKi8KLQl1MTYgZmxhZ3M7CQkvKiBKdXN0IHdoYXQgaXQgc2F5cyAqLwotCXUzMiBjbGllbnRfaXA7CQkvKiBDbGllbnQncyBJUCBhZGRyZXNzIGlmIGtub3duICovCi0JdTMyIHlvdXJfaXA7CQkvKiBBc3NpZ25lZCBJUCBhZGRyZXNzICovCi0JdTMyIHNlcnZlcl9pcDsJCS8qIChOZXh0LCBlLmcuIE5GUykgU2VydmVyJ3MgSVAgYWRkcmVzcyAqLwotCXUzMiByZWxheV9pcDsJCS8qIElQIGFkZHJlc3Mgb2YgQk9PVFAgcmVsYXkgKi8KKwlfX2JlMzIgeGlkOwkJLyogVHJhbnNhY3Rpb24gSUQgKi8KKwlfX2JlMTYgc2VjczsJCS8qIFNlY29uZHMgc2luY2Ugd2Ugc3RhcnRlZCAqLworCV9fYmUxNiBmbGFnczsJCS8qIEp1c3Qgd2hhdCBpdCBzYXlzICovCisJX19iZTMyIGNsaWVudF9pcDsJCS8qIENsaWVudCdzIElQIGFkZHJlc3MgaWYga25vd24gKi8KKwlfX2JlMzIgeW91cl9pcDsJCS8qIEFzc2lnbmVkIElQIGFkZHJlc3MgKi8KKwlfX2JlMzIgc2VydmVyX2lwOwkJLyogKE5leHQsIGUuZy4gTkZTKSBTZXJ2ZXIncyBJUCBhZGRyZXNzICovCisJX19iZTMyIHJlbGF5X2lwOwkJLyogSVAgYWRkcmVzcyBvZiBCT09UUCByZWxheSAqLwogCXU4IGh3X2FkZHJbMTZdOwkJLyogQ2xpZW50J3MgSFcgYWRkcmVzcyAqLwogCXU4IHNlcnZfbmFtZVs2NF07CS8qIFNlcnZlciBob3N0IG5hbWUgKi8KIAl1OCBib290X2ZpbGVbMTI4XTsJLyogTmFtZSBvZiBib290IGZpbGUgKi8KQEAgLTU3Niw3ICs1NzcsNyBAQAogc3RhdGljIHZvaWQgX19pbml0CiBpY19kaGNwX2luaXRfb3B0aW9ucyh1OCAqb3B0aW9ucykKIHsKLQl1OCBtdCA9ICgoaWNfc2VydmFkZHIgPT0gSU5BRERSX05PTkUpCisJdTggbXQgPSAoKGljX3NlcnZhZGRyID09IE5PTkUpCiAJCSA/IERIQ1BESVNDT1ZFUiA6IERIQ1BSRVFVRVNUKTsKIAl1OCAqZSA9IG9wdGlvbnM7CiAKQEAgLTY2Niw3ICs2NjcsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IENPTkZfTkFNRVNFUlZFUlNfTUFYOyBpKyspCi0JCWljX25hbWVzZXJ2ZXJzW2ldID0gSU5BRERSX05PTkU7CisJCWljX25hbWVzZXJ2ZXJzW2ldID0gTk9ORTsKIAogCWRldl9hZGRfcGFjaygmYm9vdHBfcGFja2V0X3R5cGUpOwogfQpAQCAtNzA4LDcgKzcwOSw3IEBACiAJaC0+ZnJhZ19vZmYgPSBodG9ucyhJUF9ERik7CiAJaC0+dHRsID0gNjQ7CiAJaC0+cHJvdG9jb2wgPSBJUFBST1RPX1VEUDsKLQloLT5kYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CisJaC0+ZGFkZHIgPSBodG9ubChJTkFERFJfQlJPQURDQVNUKTsKIAloLT5jaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKSBoLCBoLT5paGwpOwogCiAJLyogQ29uc3RydWN0IFVEUCBoZWFkZXIgKi8KQEAgLTczMCw4ICs3MzEsOCBAQAogCQliLT5odHlwZSA9IGRldi0+dHlwZTsgLyogY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciAqLwogCX0KIAliLT5obGVuID0gZGV2LT5hZGRyX2xlbjsKLQliLT55b3VyX2lwID0gSU5BRERSX05PTkU7Ci0JYi0+c2VydmVyX2lwID0gSU5BRERSX05PTkU7CisJYi0+eW91cl9pcCA9IE5PTkU7CisJYi0+c2VydmVyX2lwID0gTk9ORTsKIAltZW1jcHkoYi0+aHdfYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAJYi0+c2VjcyA9IGh0b25zKGppZmZpZXNfZGlmZiAvIEhaKTsKIAliLT54aWQgPSBkLT54aWQ7CkBAIC03ODgsMTEgKzc4OSwxMSBAQAogCiAJc3dpdGNoICgqZXh0KyspIHsKIAkJY2FzZSAxOgkJLyogU3VibmV0IG1hc2sgKi8KLQkJCWlmIChpY19uZXRtYXNrID09IElOQUREUl9OT05FKQorCQkJaWYgKGljX25ldG1hc2sgPT0gTk9ORSkKIAkJCQltZW1jcHkoJmljX25ldG1hc2ssIGV4dCsxLCA0KTsKIAkJCWJyZWFrOwogCQljYXNlIDM6CQkvKiBEZWZhdWx0IGdhdGV3YXkgKi8KLQkJCWlmIChpY19nYXRld2F5ID09IElOQUREUl9OT05FKQorCQkJaWYgKGljX2dhdGV3YXkgPT0gTk9ORSkKIAkJCQltZW1jcHkoJmljX2dhdGV3YXksIGV4dCsxLCA0KTsKIAkJCWJyZWFrOwogCQljYXNlIDY6CQkvKiBETlMgc2VydmVyICovCkBAIC04MDAsNyArODAxLDcgQEAKIAkJCWlmIChzZXJ2ZXJzID4gQ09ORl9OQU1FU0VSVkVSU19NQVgpCiAJCQkJc2VydmVycyA9IENPTkZfTkFNRVNFUlZFUlNfTUFYOwogCQkJZm9yIChpID0gMDsgaSA8IHNlcnZlcnM7IGkrKykgewotCQkJCWlmIChpY19uYW1lc2VydmVyc1tpXSA9PSBJTkFERFJfTk9ORSkKKwkJCQlpZiAoaWNfbmFtZXNlcnZlcnNbaV0gPT0gTk9ORSkKIAkJCQkJbWVtY3B5KCZpY19uYW1lc2VydmVyc1tpXSwgZXh0KzErNCppLCA0KTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtOTE3LDcgKzkxOCw3IEBACiAKICNpZmRlZiBJUENPTkZJR19ESENQCiAJCWlmIChpY19wcm90b19lbmFibGVkICYgSUNfVVNFX0RIQ1ApIHsKLQkJCXUzMiBzZXJ2ZXJfaWQgPSBJTkFERFJfTk9ORTsKKwkJCV9fYmUzMiBzZXJ2ZXJfaWQgPSBOT05FOwogCQkJaW50IG10ID0gMDsKIAogCQkJZXh0ID0gJmItPmV4dGVuWzRdOwpAQCAtOTQ5LDcgKzk1MCw3IEBACiAJCQkJLyogV2hpbGUgaW4gdGhlIHByb2Nlc3Mgb2YgYWNjZXB0aW5nIG9uZSBvZmZlciwKIAkJCQkgKiBpZ25vcmUgYWxsIG90aGVycy4KIAkJCQkgKi8KLQkJCQlpZiAoaWNfbXlhZGRyICE9IElOQUREUl9OT05FKQorCQkJCWlmIChpY19teWFkZHIgIT0gTk9ORSkKIAkJCQkJZ290byBkcm9wX3VubG9jazsKIAogCQkJCS8qIExldCdzIGFjY2VwdCB0aGF0IG9mZmVyLiAqLwpAQCAtOTY1LDcgKzk2Niw3IEBACiAJCQkJICogcHJlY2VkZW5jZSBvdmVyIHRoZSBib290cCBoZWFkZXIgb25lIGlmCiAJCQkJICogdGhleSBhcmUgZGlmZmVyZW50LgogCQkJCSAqLwotCQkJCWlmICgoc2VydmVyX2lkICE9IElOQUREUl9OT05FKSAmJgorCQkJCWlmICgoc2VydmVyX2lkICE9IE5PTkUpICYmCiAJCQkJICAgIChiLT5zZXJ2ZXJfaXAgIT0gc2VydmVyX2lkKSkKIAkJCQkJYi0+c2VydmVyX2lwID0gaWNfc2VydmFkZHI7CiAJCQkJYnJlYWs7CkBAIC05NzksOCArOTgwLDggQEAKIAogCQkJZGVmYXVsdDoKIAkJCQkvKiBVcnF1ZS4gIEZvcmdldCBpdCovCi0JCQkJaWNfbXlhZGRyID0gSU5BRERSX05PTkU7Ci0JCQkJaWNfc2VydmFkZHIgPSBJTkFERFJfTk9ORTsKKwkJCQlpY19teWFkZHIgPSBOT05FOworCQkJCWljX3NlcnZhZGRyID0gTk9ORTsKIAkJCQlnb3RvIGRyb3BfdW5sb2NrOwogCQkJfTsKIApAQCAtMTAwNCw5ICsxMDA1LDkgQEAKIAlpY19kZXYgPSBkZXY7CiAJaWNfbXlhZGRyID0gYi0+eW91cl9pcDsKIAlpY19zZXJ2YWRkciA9IGItPnNlcnZlcl9pcDsKLQlpZiAoaWNfZ2F0ZXdheSA9PSBJTkFERFJfTk9ORSAmJiBiLT5yZWxheV9pcCkKKwlpZiAoaWNfZ2F0ZXdheSA9PSBOT05FICYmIGItPnJlbGF5X2lwKQogCQlpY19nYXRld2F5ID0gYi0+cmVsYXlfaXA7Ci0JaWYgKGljX25hbWVzZXJ2ZXJzWzBdID09IElOQUREUl9OT05FKQorCWlmIChpY19uYW1lc2VydmVyc1swXSA9PSBOT05FKQogCQlpY19uYW1lc2VydmVyc1swXSA9IGljX3NlcnZhZGRyOwogCWljX2dvdF9yZXBseSA9IElDX0JPT1RQOwogCkBAIC0xMTUwLDcgKzExNTEsNyBAQAogI2VuZGlmCiAKIAlpZiAoIWljX2dvdF9yZXBseSkgewotCQlpY19teWFkZHIgPSBJTkFERFJfTk9ORTsKKwkJaWNfbXlhZGRyID0gTk9ORTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTE4MiwxMiArMTE4MywxMiBAQAogCQlzZXFfcHJpbnRmKHNlcSwKIAkJCSAgICJkb21haW4gJXNcbiIsIGljX2RvbWFpbik7CiAJZm9yIChpID0gMDsgaSA8IENPTkZfTkFNRVNFUlZFUlNfTUFYOyBpKyspIHsKLQkJaWYgKGljX25hbWVzZXJ2ZXJzW2ldICE9IElOQUREUl9OT05FKQorCQlpZiAoaWNfbmFtZXNlcnZlcnNbaV0gIT0gTk9ORSkKIAkJCXNlcV9wcmludGYoc2VxLAogCQkJCSAgICJuYW1lc2VydmVyICV1LiV1LiV1LiV1XG4iLAogCQkJCSAgIE5JUFFVQUQoaWNfbmFtZXNlcnZlcnNbaV0pKTsKIAl9Ci0JaWYgKGljX3NlcnZhZGRyICE9IElOQUREUl9OT05FKQorCWlmIChpY19zZXJ2YWRkciAhPSBOT05FKQogCQlzZXFfcHJpbnRmKHNlcSwKIAkJCSAgICJib290c2VydmVyICV1LiV1LiV1LiV1XG4iLAogCQkJICAgTklQUVVBRChpY19zZXJ2YWRkcikpOwpAQCAtMTIxMyw5ICsxMjE0LDkgQEAKICAqICBuZWVkIHRvIGhhdmUgcm9vdF9zZXJ2ZXJfYWRkciBzZXQgX2JlZm9yZV8gSVBDb25maWcgZ2V0cyBjYWxsZWQgYXMgaXQKICAqICBjYW4gb3ZlcnJpZGUgaXQuCiAgKi8KLXUzMiBfX2luaXQgcm9vdF9uZnNfcGFyc2VfYWRkcihjaGFyICpuYW1lKQorX19iZTMyIF9faW5pdCByb290X25mc19wYXJzZV9hZGRyKGNoYXIgKm5hbWUpCiB7Ci0JdTMyIGFkZHI7CisJX19iZTMyIGFkZHI7CiAJaW50IG9jdGV0cyA9IDA7CiAJY2hhciAqY3AsICpjcTsKIApAQCAtMTIzNyw3ICsxMjM4LDcgQEAKIAkJYWRkciA9IGluX2F0b24obmFtZSk7CiAJCW1lbW1vdmUobmFtZSwgY3AsIHN0cmxlbihjcCkgKyAxKTsKIAl9IGVsc2UKLQkJYWRkciA9IElOQUREUl9OT05FOworCQlhZGRyID0gTk9ORTsKIAogCXJldHVybiBhZGRyOwogfQpAQCAtMTI0OCw3ICsxMjQ5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaXBfYXV0b19jb25maWcodm9pZCkKIHsKLQl1MzIgYWRkcjsKKwlfX2JlMzIgYWRkcjsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcHJvY19uZXRfZm9wc19jcmVhdGUoInBucCIsIFNfSVJVR08sICZwbnBfc2VxX2ZvcHMpOwpAQCAtMTI3NywxMSArMTI3OCwxMSBAQAogCSAqIGludGVyZmFjZXMgYW5kIG5vIGRlZmF1bHQgd2FzIHNldCksIHVzZSBCT09UUCBvciBSQVJQIHRvIGdldCB0aGUKIAkgKiBtaXNzaW5nIHZhbHVlcy4KIAkgKi8KLQlpZiAoaWNfbXlhZGRyID09IElOQUREUl9OT05FIHx8CisJaWYgKGljX215YWRkciA9PSBOT05FIHx8CiAjaWZkZWYgQ09ORklHX1JPT1RfTkZTCiAJICAgIChNQUpPUihST09UX0RFVikgPT0gVU5OQU1FRF9NQUpPUgotCSAgICAgJiYgcm9vdF9zZXJ2ZXJfYWRkciA9PSBJTkFERFJfTk9ORQotCSAgICAgJiYgaWNfc2VydmFkZHIgPT0gSU5BRERSX05PTkUpIHx8CisJICAgICAmJiByb290X3NlcnZlcl9hZGRyID09IE5PTkUKKwkgICAgICYmIGljX3NlcnZhZGRyID09IE5PTkUpIHx8CiAjZW5kaWYKIAkgICAgaWNfZmlyc3RfZGV2LT5uZXh0KSB7CiAjaWZkZWYgSVBDT05GSUdfRFlOQU1JQwpAQCAtMTMzNCw3ICsxMzM1LDcgQEAKIAl9CiAKIAlhZGRyID0gcm9vdF9uZnNfcGFyc2VfYWRkcihyb290X3NlcnZlcl9wYXRoKTsKLQlpZiAocm9vdF9zZXJ2ZXJfYWRkciA9PSBJTkFERFJfTk9ORSkKKwlpZiAocm9vdF9zZXJ2ZXJfYWRkciA9PSBOT05FKQogCQlyb290X3NlcnZlcl9hZGRyID0gYWRkcjsKIAogCS8qCkBAIC0xNDYxLDE5ICsxNDYyLDE5IEBACiAJCQlzd2l0Y2ggKG51bSkgewogCQkJY2FzZSAwOgogCQkJCWlmICgoaWNfbXlhZGRyID0gaW5fYXRvbihpcCkpID09IElOQUREUl9BTlkpCi0JCQkJCWljX215YWRkciA9IElOQUREUl9OT05FOworCQkJCQlpY19teWFkZHIgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSAxOgogCQkJCWlmICgoaWNfc2VydmFkZHIgPSBpbl9hdG9uKGlwKSkgPT0gSU5BRERSX0FOWSkKLQkJCQkJaWNfc2VydmFkZHIgPSBJTkFERFJfTk9ORTsKKwkJCQkJaWNfc2VydmFkZHIgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSAyOgogCQkJCWlmICgoaWNfZ2F0ZXdheSA9IGluX2F0b24oaXApKSA9PSBJTkFERFJfQU5ZKQotCQkJCQlpY19nYXRld2F5ID0gSU5BRERSX05PTkU7CisJCQkJCWljX2dhdGV3YXkgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSAzOgogCQkJCWlmICgoaWNfbmV0bWFzayA9IGluX2F0b24oaXApKSA9PSBJTkFERFJfQU5ZKQotCQkJCQlpY19uZXRtYXNrID0gSU5BRERSX05PTkU7CisJCQkJCWljX25ldG1hc2sgPSBOT05FOwogCQkJCWJyZWFrOwogCQkJY2FzZSA0OgogCQkJCWlmICgoZHAgPSBzdHJjaHIoaXAsICcuJykpKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggMGM0NTU2NS4uOWQ3MTlkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAogI2RlZmluZSBIQVNIX1NJWkUgIDE2Ci0jZGVmaW5lIEhBU0goYWRkcikgKChhZGRyXihhZGRyPj40KSkmMHhGKQorI2RlZmluZSBIQVNIKGFkZHIpICgoKF9fZm9yY2UgdTMyKWFkZHJeKChfX2ZvcmNlIHUzMilhZGRyPj40KSkmMHhGKQogCiBzdGF0aWMgaW50IGlwaXBfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGlwaXBfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0xMzQsNyArMTM0LDcgQEAKIAogc3RhdGljIERFRklORV9SV0xPQ0soaXBpcF9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGlwX3R1bm5lbF9sb29rdXAodTMyIHJlbW90ZSwgdTMyIGxvY2FsKQorc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGlwX3R1bm5lbF9sb29rdXAoX19iZTMyIHJlbW90ZSwgX19iZTMyIGxvY2FsKQogewogCXVuc2lnbmVkIGgwID0gSEFTSChyZW1vdGUpOwogCXVuc2lnbmVkIGgxID0gSEFTSChsb2NhbCk7CkBAIC0xNjAsOCArMTYwLDggQEAKIAogc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKippcGlwX2J1Y2tldChzdHJ1Y3QgaXBfdHVubmVsICp0KQogewotCXUzMiByZW1vdGUgPSB0LT5wYXJtcy5pcGguZGFkZHI7Ci0JdTMyIGxvY2FsID0gdC0+cGFybXMuaXBoLnNhZGRyOworCV9fYmUzMiByZW1vdGUgPSB0LT5wYXJtcy5pcGguZGFkZHI7CisJX19iZTMyIGxvY2FsID0gdC0+cGFybXMuaXBoLnNhZGRyOwogCXVuc2lnbmVkIGggPSAwOwogCWludCBwcmlvID0gMDsKIApAQCAtMjAzLDggKzIwMyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcF90dW5uZWxfbG9jYXRlKHN0cnVjdCBpcF90dW5uZWxfcGFybSAqcGFybXMsIGludCBjcmVhdGUpCiB7Ci0JdTMyIHJlbW90ZSA9IHBhcm1zLT5pcGguZGFkZHI7Ci0JdTMyIGxvY2FsID0gcGFybXMtPmlwaC5zYWRkcjsKKwlfX2JlMzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKKwlfX2JlMzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwogCXN0cnVjdCBpcF90dW5uZWwgKnQsICoqdHAsICpudDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGggPSAwOwpAQCAtNTE5LDEzICs1MTksMTMgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmdHVubmVsLT5zdGF0OwogCXN0cnVjdCBpcGhkciAgKnRpcGggPSAmdHVubmVsLT5wYXJtcy5pcGg7CiAJdTggICAgIHRvcyA9IHR1bm5lbC0+cGFybXMuaXBoLnRvczsKLQl1MTYgICAgZGYgPSB0aXBoLT5mcmFnX29mZjsKKwlfX2JlMTYgZGYgPSB0aXBoLT5mcmFnX29mZjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsgICAgIAkJCS8qIFJvdXRlIHRvIHRoZSBvdGhlciBob3N0ICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CQkJLyogRGV2aWNlIHRvIG90aGVyIGhvc3QgKi8KIAlzdHJ1Y3QgaXBoZHIgICpvbGRfaXBoID0gc2tiLT5uaC5pcGg7CiAJc3RydWN0IGlwaGRyICAqaXBoOwkJCS8qIE91ciBuZXcgSVAgaGVhZGVyICovCiAJaW50ICAgIG1heF9oZWFkcm9vbTsJCQkvKiBUaGUgZXh0cmEgaGVhZGVyIHNwYWNlIG5lZWRlZCAqLwotCXUzMiAgICBkc3QgPSB0aXBoLT5kYWRkcjsKKwlfX2JlMzIgZHN0ID0gdGlwaC0+ZGFkZHI7CiAJaW50ICAgIG10dTsKIAogCWlmICh0dW5uZWwtPnJlY3Vyc2lvbisrKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggOTdjZmE5Ny4uZWZjZjQ1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMTQ5Myw3ICsxNDkzLDcgQEAKICAgICAgICAgaWYgKHBpbS0+dHlwZSAhPSAoKFBJTV9WRVJTSU9OPDw0KXwoUElNX1JFR0lTVEVSKSkgfHwKIAkgICAgKHBpbS0+ZmxhZ3MmUElNX05VTExfUkVHSVNURVIpIHx8CiAJICAgIChpcF9jb21wdXRlX2NzdW0oKHZvaWQgKilwaW0sIHNpemVvZigqcGltKSkgIT0gMCAmJiAKLQkgICAgICh1MTYpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpKSAKKwkgICAgIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKSkKIAkJZ290byBkcm9wOwogCiAJLyogY2hlY2sgaWYgdGhlIGlubmVyIHBhY2tldCBpcyBkZXN0aW5lZCB0byBtY2FzdCBncm91cCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfYXBwLmMKaW5kZXggZTc3NTIzMy4uNmM0MDg5OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19hcHAuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2FwcC5jCkBAIC04MCwxMCArODAsOSBAQAogCWlmICghcHAtPnVucmVnaXN0ZXJfYXBwKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpbmMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBfdnNfYXBwKSwgR0ZQX0tFUk5FTCk7CisJaW5jID0ga21lbWR1cChhcHAsIHNpemVvZigqaW5jKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmMpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShpbmMsIGFwcCwgc2l6ZW9mKCppbmMpKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5jLT5wX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZpbmMtPmluY3NfbGlzdCk7CiAJaW5jLT5hcHAgPSBhcHA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IDE0NDViYjQuLjM0MjU3NTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY29yZS5jCkBAIC01MzYsOSArNTM2LDkgQEAKIAlyZXR1cm4gTkZfU1RPUDsKIH0KIAotdTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCitfX3N1bTE2IGlwX3ZzX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpCiB7Ci0JcmV0dXJuICh1MTYpIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKSk7CisJcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCBvZmZzZXQsIHNrYi0+bGVuIC0gb2Zmc2V0LCAwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYwppbmRleCA1MjQ3NTFlLi5hNDM4NWEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogLyogZm9yIHN5c2N0bCAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggMDg5OTAxOS4uZmUxYWY1ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjci5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfbGJsY3IuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAogLyogZm9yIHN5c2N0bCAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvLmMKaW5kZXggYzQ1MjhiNS4uZTg0NGRkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90by5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG8uYwpAQCAtMTE4LDEzICsxMTgsNyBAQAogaW50ICoKIGlwX3ZzX2NyZWF0ZV90aW1lb3V0X3RhYmxlKGludCAqdGFibGUsIGludCBzaXplKQogewotCWludCAqdDsKLQotCXQgPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOwotCWlmICh0ID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCW1lbWNweSh0LCB0YWJsZSwgc2l6ZSk7Ci0JcmV0dXJuIHQ7CisJcmV0dXJuIGttZW1kdXAodGFibGUsIHNpemUsIEdGUF9BVE9NSUMpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCmluZGV4IDZmZjA1YzMuLjE2YTllYmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYwpAQCAtODQsNyArODQsNyBAQAogCX0KIAogCWlmICh0aC0+c3luICYmCi0JICAgIChzdmMgPSBpcF92c19zZXJ2aWNlX2dldChza2ItPm5mbWFyaywgc2tiLT5uaC5pcGgtPnByb3RvY29sLAorCSAgICAoc3ZjID0gaXBfdnNfc2VydmljZV9nZXQoc2tiLT5tYXJrLCBza2ItPm5oLmlwaC0+cHJvdG9jb2wsCiAJCQkJICAgICBza2ItPm5oLmlwaC0+ZGFkZHIsIHRoLT5kZXN0KSkpIHsKIAkJaWYgKGlwX3ZzX3RvZHJvcCgpKSB7CiAJCQkvKgpAQCAtMTE2LDkgKzExNiw5IEBACiAJCSAgICAgX19iZTE2IG9sZHBvcnQsIF9fYmUxNiBuZXdwb3J0KQogewogCXRjcGgtPmNoZWNrID0KLQkJaXBfdnNfY2hlY2tfZGlmZih+b2xkaXAsIG5ld2lwLAotCQkJCSBpcF92c19jaGVja19kaWZmKG9sZHBvcnQgXiBodG9ucygweEZGRkYpLAotCQkJCQkJICBuZXdwb3J0LCB0Y3BoLT5jaGVjaykpOworCQljc3VtX2ZvbGQoaXBfdnNfY2hlY2tfZGlmZjQob2xkaXAsIG5ld2lwLAorCQkJCSBpcF92c19jaGVja19kaWZmMihvbGRwb3J0LCBuZXdwb3J0LAorCQkJCQkJfmNzdW1fdW5mb2xkKHRjcGgtPmNoZWNrKSkpKTsKIH0KIAogCkBAIC00OTAsMTYgKzQ5MCwxOCBAQAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdGNwX2FwcHNbVENQX0FQUF9UQUJfU0laRV07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjcF9hcHBfbG9jayk7CiAKLXN0YXRpYyBpbmxpbmUgX191MTYgdGNwX2FwcF9oYXNoa2V5KF9fdTE2IHBvcnQpCitzdGF0aWMgaW5saW5lIF9fdTE2IHRjcF9hcHBfaGFzaGtleShfX2JlMTYgcG9ydCkKIHsKLQlyZXR1cm4gKChwb3J0ID4+IFRDUF9BUFBfVEFCX0JJVFMpIF4gcG9ydCkgJiBUQ1BfQVBQX1RBQl9NQVNLOworCXJldHVybiAoKChfX2ZvcmNlIHUxNilwb3J0ID4+IFRDUF9BUFBfVEFCX0JJVFMpIF4gKF9fZm9yY2UgdTE2KXBvcnQpCisJCSYgVENQX0FQUF9UQUJfTUFTSzsKIH0KIAogCiBzdGF0aWMgaW50IHRjcF9yZWdpc3Rlcl9hcHAoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKQogewogCXN0cnVjdCBpcF92c19hcHAgKmk7Ci0JX191MTYgaGFzaCwgcG9ydCA9IGluYy0+cG9ydDsKKwlfX3UxNiBoYXNoOworCV9fYmUxNiBwb3J0ID0gaW5jLT5wb3J0OwogCWludCByZXQgPSAwOwogCiAJaGFzaCA9IHRjcF9hcHBfaGFzaGtleShwb3J0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCmluZGV4IDY5MWM4YjYuLjAzZjBhNDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYwpAQCAtODksNyArODksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKHN2YyA9IGlwX3ZzX3NlcnZpY2VfZ2V0KHNrYi0+bmZtYXJrLCBza2ItPm5oLmlwaC0+cHJvdG9jb2wsCisJaWYgKChzdmMgPSBpcF92c19zZXJ2aWNlX2dldChza2ItPm1hcmssIHNrYi0+bmguaXBoLT5wcm90b2NvbCwKIAkJCQkgICAgIHNrYi0+bmguaXBoLT5kYWRkciwgdWgtPmRlc3QpKSkgewogCQlpZiAoaXBfdnNfdG9kcm9wKCkpIHsKIAkJCS8qCkBAIC0xMjEsMTEgKzEyMSwxMSBAQAogCQkgICAgIF9fYmUxNiBvbGRwb3J0LCBfX2JlMTYgbmV3cG9ydCkKIHsKIAl1aGRyLT5jaGVjayA9Ci0JCWlwX3ZzX2NoZWNrX2RpZmYofm9sZGlwLCBuZXdpcCwKLQkJCQkgaXBfdnNfY2hlY2tfZGlmZihvbGRwb3J0IF4gaHRvbnMoMHhGRkZGKSwKLQkJCQkJCSAgbmV3cG9ydCwgdWhkci0+Y2hlY2spKTsKKwkJY3N1bV9mb2xkKGlwX3ZzX2NoZWNrX2RpZmY0KG9sZGlwLCBuZXdpcCwKKwkJCQkgaXBfdnNfY2hlY2tfZGlmZjIob2xkcG9ydCwgbmV3cG9ydCwKKwkJCQkJfmNzdW1fdW5mb2xkKHVoZHItPmNoZWNrKSkpKTsKIAlpZiAoIXVoZHItPmNoZWNrKQotCQl1aGRyLT5jaGVjayA9IC0xOworCQl1aGRyLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzMsNyArMTczLDcgQEAKIAkJCQkJCWNwLT5wcm90b2NvbCwKIAkJCQkJCSgqcHNrYiktPmNzdW0pOwogCQlpZiAodWRwaC0+Y2hlY2sgPT0gMCkKLQkJCXVkcGgtPmNoZWNrID0gLTE7CisJCQl1ZHBoLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogCQlJUF9WU19EQkcoMTEsICJPLXBrdDogJXMgTy1jc3VtPSVkICgrJXpkKVxuIiwKIAkJCSAgcHAtPm5hbWUsIHVkcGgtPmNoZWNrLAogCQkJICAoY2hhciopJih1ZHBoLT5jaGVjaykgLSAoY2hhciopdWRwaCk7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAkJCQkJCWNwLT5wcm90b2NvbCwKIAkJCQkJCSgqcHNrYiktPmNzdW0pOwogCQlpZiAodWRwaC0+Y2hlY2sgPT0gMCkKLQkJCXVkcGgtPmNoZWNrID0gLTE7CisJCQl1ZHBoLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogCQkoKnBza2IpLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0yODIsMTYgKzI4MiwxOCBAQAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdWRwX2FwcHNbVURQX0FQUF9UQUJfU0laRV07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVkcF9hcHBfbG9jayk7CiAKLXN0YXRpYyBpbmxpbmUgX191MTYgdWRwX2FwcF9oYXNoa2V5KF9fdTE2IHBvcnQpCitzdGF0aWMgaW5saW5lIF9fdTE2IHVkcF9hcHBfaGFzaGtleShfX2JlMTYgcG9ydCkKIHsKLQlyZXR1cm4gKChwb3J0ID4+IFVEUF9BUFBfVEFCX0JJVFMpIF4gcG9ydCkgJiBVRFBfQVBQX1RBQl9NQVNLOworCXJldHVybiAoKChfX2ZvcmNlIHUxNilwb3J0ID4+IFVEUF9BUFBfVEFCX0JJVFMpIF4gKF9fZm9yY2UgdTE2KXBvcnQpCisJCSYgVURQX0FQUF9UQUJfTUFTSzsKIH0KIAogCiBzdGF0aWMgaW50IHVkcF9yZWdpc3Rlcl9hcHAoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKQogewogCXN0cnVjdCBpcF92c19hcHAgKmk7Ci0JX191MTYgaGFzaCwgcG9ydCA9IGluYy0+cG9ydDsKKwlfX3UxNiBoYXNoOworCV9fYmUxNiBwb3J0ID0gaW5jLT5wb3J0OwogCWludCByZXQgPSAwOwogCiAJaGFzaCA9IHVkcF9hcHBfaGFzaGtleShwb3J0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKaW5kZXggZTIwMDVjNi4uYTY4OTY2MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKQEAgLTI3LDkgKzI3LDcgQEAKIAkJZmwubmxfdS5pcDRfdS5zYWRkciA9IGlwaC0+c2FkZHI7CiAJCWZsLm5sX3UuaXA0X3UudG9zID0gUlRfVE9TKGlwaC0+dG9zKTsKIAkJZmwub2lmID0gKCpwc2tiKS0+c2sgPyAoKnBza2IpLT5zay0+c2tfYm91bmRfZGV2X2lmIDogMDsKLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfRldNQVJLCi0JCWZsLm5sX3UuaXA0X3UuZndtYXJrID0gKCpwc2tiKS0+bmZtYXJrOwotI2VuZGlmCisJCWZsLm1hcmsgPSAoKnBza2IpLT5tYXJrOwogCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmcnQsICZmbCkgIT0gMCkKIAkJCXJldHVybiAtMTsKIApAQCAtMTY0LDE3ICsxNjIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50IG5mX2lwX2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorX19zdW0xNiBuZl9pcF9jaGVja3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9vaywKIAkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdV9pbnQ4X3QgcHJvdG9jb2wpCiB7CiAJc3RydWN0IGlwaGRyICppcGggPSBza2ItPm5oLmlwaDsKLQl1bnNpZ25lZCBpbnQgY3N1bSA9IDA7CisJX19zdW0xNiBjc3VtID0gMDsKIAogCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgogCQlpZiAoaG9vayAhPSBORl9JUF9QUkVfUk9VVElORyAmJiBob29rICE9IE5GX0lQX0xPQ0FMX0lOKQogCQkJYnJlYWs7Ci0JCWlmICgocHJvdG9jb2wgPT0gMCAmJiAhKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgfHwKKwkJaWYgKChwcm90b2NvbCA9PSAwICYmICFjc3VtX2ZvbGQoc2tiLT5jc3VtKSkgfHwKIAkJICAgICFjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJICAgIAkgICAgICAgc2tiLT5sZW4gLSBkYXRhb2ZmLCBwcm90b2NvbCwKIAkJCQkgICAgICAgc2tiLT5jc3VtKSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBkODhjMjkyLi4zNjNkZjk5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAlkZXBlbmRzIG9uIElORVQgJiYgTkVURklMVEVSCiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfSVBWNAotCXRyaXN0YXRlICJJUHY0IHN1cHBvcnQgZm9yIG5ldyBjb25uZWN0aW9uIHRyYWNraW5nIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJJUHY0IGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAocmVxdWlyZWQgZm9yIE5BVCkgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCiAJLS0taGVscC0tLQogCSAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWQKQEAgLTE5LDIxICsxOSwxOCBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE5GX0NPTk5UUkFDS19QUk9DX0NPTVBBVAorCWJvb2wgInByb2Mvc3lzY3RsIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgY29ubmVjdGlvbiB0cmFja2luZyIKKwlkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19JUFY0CisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyAvcHJvYyBhbmQgc3lzY3RsIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkCisJICBsYXllciAzIGRlcGVuZGFudCBjb25uZWN0aW9uIHRyYWNraW5nLiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwCisJICBvbGQgcHJvZ3JhbXMgdGhhdCBoYXZlIG5vdCBiZWVuIGFkYXB0ZWQgdG8gdGhlIG5ldyBuYW1lcyB3b3JraW5nLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiAjIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGhlbHBlcnMgYW5kIHByb3RvY29scwotY29uZmlnIElQX05GX0NPTk5UUkFDSwotCXRyaXN0YXRlICJDb25uZWN0aW9uIHRyYWNraW5nIChyZXF1aXJlZCBmb3IgbWFzcS9OQVQpIgotCS0tLWhlbHAtLS0KLQkgIENvbm5lY3Rpb24gdHJhY2tpbmcga2VlcHMgYSByZWNvcmQgb2Ygd2hhdCBwYWNrZXRzIGhhdmUgcGFzc2VkCi0JICB0aHJvdWdoIHlvdXIgbWFjaGluZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVsYXRlZAotCSAgaW50byBjb25uZWN0aW9ucy4KLQotCSAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29yawotCSAgQWRkcmVzcyBUcmFuc2xhdGlvbiAoZXhjZXB0IGZvciBGYXN0IE5BVCkuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCi0JICBlbmhhbmNlIHBhY2tldCBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JwotCSAgYmVsb3cpLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQX05GX0NUX0FDQ1QKIAlib29sICJDb25uZWN0aW9uIHRyYWNraW5nIGZsb3cgYWNjb3VudGluZyIKIAlkZXBlbmRzIG9uIElQX05GX0NPTk5UUkFDSwpAQCAtMzE1LDIwICszMTIsNiBAQAogCSAgSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9tb2R1bGVzLnR4dD4uICBJZiB1bnN1cmUsIHNheSBgTicuCiAKLWNvbmZpZyBJUF9ORl9NQVRDSF9IQVNITElNSVQKLQl0cmlzdGF0ZSAgJ2hhc2hsaW1pdCBtYXRjaCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBhZGRzIGEgbmV3IGlwdGFibGVzIGBoYXNobGltaXQnIG1hdGNoLiAgCi0KLQkgIEFzIG9wcG9zZWQgdG8gYGxpbWl0JywgdGhpcyBtYXRjaCBkeW5hbWljYWxseSBjcmVhdGVzIGEgaGFzaCB0YWJsZQotCSAgb2YgbGltaXQgYnVja2V0cywgYmFzZWQgb24geW91ciBzZWxlY3Rpb24gb2Ygc291cmNlL2Rlc3RpbmF0aW9uCi0JICBpcCBhZGRyZXNzZXMgYW5kL29yIHBvcnRzLgotCi0JICBJdCBlbmFibGVzIHlvdSB0byBleHByZXNzIHBvbGljaWVzIGxpa2UgYDEwa3BwcyBmb3IgYW55IGdpdmVuCi0JICBkZXN0aW5hdGlvbiBJUCcgb3IgYDUwMHBwcyBmcm9tIGFueSBnaXZlbiBzb3VyY2UgSVAnICB3aXRoIGEgc2luZ2xlCi0JICBJUHRhYmxlcyBydWxlLgotCiAjIGBmaWx0ZXInLCBnZW5lcmljIGFuZCBzcGVjaWZpYyB0YXJnZXRzCiBjb25maWcgSVBfTkZfRklMVEVSCiAJdHJpc3RhdGUgIlBhY2tldCBmaWx0ZXJpbmciCkBAIC00MDQsNyArMzg3LDcgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLSMgTkFUICsgc3BlY2lmaWMgdGFyZ2V0cworIyBOQVQgKyBzcGVjaWZpYyB0YXJnZXRzOiBpcF9jb25udHJhY2sKIGNvbmZpZyBJUF9ORl9OQVQKIAl0cmlzdGF0ZSAiRnVsbCBOQVQiCiAJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyAmJiBJUF9ORl9DT05OVFJBQ0sKQEAgLTQxNSwxNCArMzk4LDMwIEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCisjIE5BVCArIHNwZWNpZmljIHRhcmdldHM6IG5mX2Nvbm50cmFjaworY29uZmlnIE5GX05BVAorCXRyaXN0YXRlICJGdWxsIE5BVCIKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDSworCWhlbHAKKwkgIFRoZSBGdWxsIE5BVCBvcHRpb24gYWxsb3dzIG1hc3F1ZXJhZGluZywgcG9ydCBmb3J3YXJkaW5nIGFuZCBvdGhlcgorCSAgZm9ybXMgb2YgZnVsbCBOZXR3b3JrIEFkZHJlc3MgUG9ydCBUcmFuc2xhdGlvbi4gIEl0IGlzIGNvbnRyb2xsZWQgYnkKKwkgIHRoZSBgbmF0JyB0YWJsZSBpbiBpcHRhYmxlczogc2VlIHRoZSBtYW4gcGFnZSBmb3IgaXB0YWJsZXMoOCkuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgSVBfTkZfTkFUX05FRURFRAogCWJvb2wKLQlkZXBlbmRzIG9uIElQX05GX05BVCAhPSBuCisJZGVwZW5kcyBvbiBJUF9ORl9OQVQKKwlkZWZhdWx0IHkKKworY29uZmlnIE5GX05BVF9ORUVERUQKKwlib29sCisJZGVwZW5kcyBvbiBORl9OQVQKIAlkZWZhdWx0IHkKIAogY29uZmlnIElQX05GX1RBUkdFVF9NQVNRVUVSQURFCiAJdHJpc3RhdGUgIk1BU1FVRVJBREUgdGFyZ2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9ORl9OQVQKKwlkZXBlbmRzIG9uIChORl9OQVQgfHwgSVBfTkZfTkFUKQogCWhlbHAKIAkgIE1hc3F1ZXJhZGluZyBpcyBhIHNwZWNpYWwgY2FzZSBvZiBOQVQ6IGFsbCBvdXRnb2luZyBjb25uZWN0aW9ucyBhcmUKIAkgIGNoYW5nZWQgdG8gc2VlbSB0byBjb21lIGZyb20gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSdzIGFkZHJlc3MsIGFuZApAQCAtNDM0LDcgKzQzMyw3IEBACiAKIGNvbmZpZyBJUF9ORl9UQVJHRVRfUkVESVJFQ1QKIAl0cmlzdGF0ZSAiUkVESVJFQ1QgdGFyZ2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9ORl9OQVQKKwlkZXBlbmRzIG9uIChORl9OQVQgfHwgSVBfTkZfTkFUKQogCWhlbHAKIAkgIFJFRElSRUNUIGlzIGEgc3BlY2lhbCBjYXNlIG9mIE5BVDogYWxsIGluY29taW5nIGNvbm5lY3Rpb25zIGFyZQogCSAgbWFwcGVkIG9udG8gdGhlIGluY29taW5nIGludGVyZmFjZSdzIGFkZHJlc3MsIGNhdXNpbmcgdGhlIHBhY2tldHMgdG8KQEAgLTQ0NSw3ICs0NDQsNyBAQAogCiBjb25maWcgSVBfTkZfVEFSR0VUX05FVE1BUAogCXRyaXN0YXRlICJORVRNQVAgdGFyZ2V0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJUF9ORl9OQVQKKwlkZXBlbmRzIG9uIChORl9OQVQgfHwgSVBfTkZfTkFUKQogCWhlbHAKIAkgIE5FVE1BUCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0aWMgMToxIE5BVCBtYXBwaW5nIG9mIG5ldHdvcmsKIAkgIGFkZHJlc3Nlcy4gSXQgbWFwcyB0aGUgbmV0d29yayBhZGRyZXNzIHBhcnQsIHdoaWxlIGtlZXBpbmcgdGhlIGhvc3QKQEAgLTQ1Niw3ICs0NTUsNyBAQAogCiBjb25maWcgSVBfTkZfVEFSR0VUX1NBTUUKIAl0cmlzdGF0ZSAiU0FNRSB0YXJnZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElQX05GX05BVAorCWRlcGVuZHMgb24gKE5GX05BVCB8fCBJUF9ORl9OQVQpCiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBTQU1FJyB0YXJnZXQsIHdoaWNoIHdvcmtzIGxpa2UgdGhlIHN0YW5kYXJkIFNOQVQKIAkgIHRhcmdldCwgYnV0IGF0dGVtcHRzIHRvIGdpdmUgY2xpZW50cyB0aGUgc2FtZSBJUCBmb3IgYWxsIGNvbm5lY3Rpb25zLgpAQCAtNDc4LDE5ICs0NzcsNTIgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORl9OQVRfU05NUF9CQVNJQworCXRyaXN0YXRlICJCYXNpYyBTTk1QLUFMRyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX05BVAorCS0tLWhlbHAtLS0KKworCSAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhbiBBcHBsaWNhdGlvbiBMYXllciBHYXRld2F5IChBTEcpIGZvcgorCSAgU05NUCBwYXlsb2Fkcy4gIEluIGNvbmp1bmN0aW9uIHdpdGggTkFULCBpdCBhbGxvd3MgYSBuZXR3b3JrCisJICBtYW5hZ2VtZW50IHN5c3RlbSB0byBhY2Nlc3MgbXVsdGlwbGUgcHJpdmF0ZSBuZXR3b3JrcyB3aXRoCisJICBjb25mbGljdGluZyBhZGRyZXNzZXMuICBJdCB3b3JrcyBieSBtb2RpZnlpbmcgSVAgYWRkcmVzc2VzCisJICBpbnNpZGUgU05NUCBwYXlsb2FkcyB0byBtYXRjaCBJUC1sYXllciBOQVQgbWFwcGluZy4KKworCSAgVGhpcyBpcyB0aGUgImJhc2ljIiBmb3JtIG9mIFNOTVAtQUxHLCBhcyBkZXNjcmliZWQgaW4gUkZDIDI5NjIKKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKKyMgSWYgdGhleSB3YW50IEZUUCwgc2V0IHRvICRDT05GSUdfSVBfTkZfTkFUIChtIG9yIHkpLAorIyBvciAkQ09ORklHX0lQX05GX0ZUUCAobSBvciB5KSwgd2hpY2hldmVyIGlzIHdlYWtlci4KKyMgRnJvbSBrY29uZmlnLWxhbmd1YWdlLnR4dDoKKyMKKyMgICAgICAgICAgIDxleHByPiAnJiYnIDxleHByPiAgICAgICAgICAgICAgICAgICAoNikKKyMKKyMgKDYpIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtaW4oL2V4cHIvLCAvZXhwci8pLgorY29uZmlnIE5GX05BVF9QUk9UT19HUkUKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gTkZfTkFUICYmIE5GX0NUX1BST1RPX0dSRQorCitjb25maWcgSVBfTkZfTkFUX0ZUUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyAmJiBJUF9ORl9DT05OVFJBQ0sgJiYgSVBfTkZfTkFUCisJZGVmYXVsdCBJUF9ORl9OQVQgJiYgSVBfTkZfRlRQCisKK2NvbmZpZyBORl9OQVRfRlRQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDSyAmJiBORl9OQVQKKwlkZWZhdWx0IE5GX05BVCAmJiBORl9DT05OVFJBQ0tfRlRQCisKIGNvbmZpZyBJUF9ORl9OQVRfSVJDCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTIT1uICYmIElQX05GX0NPTk5UUkFDSyE9biAmJiBJUF9ORl9OQVQhPW4KIAlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9JUkM9eQogCWRlZmF1bHQgbSBpZiBJUF9ORl9JUkM9bQogCi0jIElmIHRoZXkgd2FudCBGVFAsIHNldCB0byAkQ09ORklHX0lQX05GX05BVCAobSBvciB5KSwgCi0jIG9yICRDT05GSUdfSVBfTkZfRlRQIChtIG9yIHkpLCB3aGljaGV2ZXIgaXMgd2Vha2VyLiAgQXJnaC4KLWNvbmZpZyBJUF9ORl9OQVRfRlRQCitjb25maWcgTkZfTkFUX0lSQwogCXRyaXN0YXRlCi0JZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyE9biAmJiBJUF9ORl9DT05OVFJBQ0shPW4gJiYgSVBfTkZfTkFUIT1uCi0JZGVmYXVsdCBJUF9ORl9OQVQgaWYgSVBfTkZfRlRQPXkKLQlkZWZhdWx0IG0gaWYgSVBfTkZfRlRQPW0KKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDSyAmJiBORl9OQVQKKwlkZWZhdWx0IE5GX05BVCAmJiBORl9DT05OVFJBQ0tfSVJDCiAKIGNvbmZpZyBJUF9ORl9OQVRfVEZUUAogCXRyaXN0YXRlCkBAIC00OTgsMzAgKzUzMCw1NiBAQAogCWRlZmF1bHQgSVBfTkZfTkFUIGlmIElQX05GX1RGVFA9eQogCWRlZmF1bHQgbSBpZiBJUF9ORl9URlRQPW0KIAorY29uZmlnIE5GX05BVF9URlRQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDSyAmJiBORl9OQVQKKwlkZWZhdWx0IE5GX05BVCAmJiBORl9DT05OVFJBQ0tfVEZUUAorCiBjb25maWcgSVBfTkZfTkFUX0FNQU5EQQogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyE9biAmJiBJUF9ORl9DT05OVFJBQ0shPW4gJiYgSVBfTkZfTkFUIT1uCiAJZGVmYXVsdCBJUF9ORl9OQVQgaWYgSVBfTkZfQU1BTkRBPXkKIAlkZWZhdWx0IG0gaWYgSVBfTkZfQU1BTkRBPW0KIAorY29uZmlnIE5GX05BVF9BTUFOREEKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMgJiYgTkZfQ09OTlRSQUNLICYmIE5GX05BVAorCWRlZmF1bHQgTkZfTkFUICYmIE5GX0NPTk5UUkFDS19BTUFOREEKKwogY29uZmlnIElQX05GX05BVF9QUFRQCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIElQX05GX05BVCE9biAmJiBJUF9ORl9QUFRQIT1uCiAJZGVmYXVsdCBJUF9ORl9OQVQgaWYgSVBfTkZfUFBUUD15CiAJZGVmYXVsdCBtIGlmIElQX05GX1BQVFA9bQogCitjb25maWcgTkZfTkFUX1BQVFAKKwl0cmlzdGF0ZQorCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMgJiYgTkZfQ09OTlRSQUNLICYmIE5GX05BVAorCWRlZmF1bHQgTkZfTkFUICYmIE5GX0NPTk5UUkFDS19QUFRQCisJc2VsZWN0IE5GX05BVF9QUk9UT19HUkUKKwogY29uZmlnIElQX05GX05BVF9IMzIzCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTIT1uICYmIElQX05GX0NPTk5UUkFDSyE9biAmJiBJUF9ORl9OQVQhPW4KIAlkZWZhdWx0IElQX05GX05BVCBpZiBJUF9ORl9IMzIzPXkKIAlkZWZhdWx0IG0gaWYgSVBfTkZfSDMyMz1tCiAKK2NvbmZpZyBORl9OQVRfSDMyMworCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBJUF9ORl9JUFRBQkxFUyAmJiBORl9DT05OVFJBQ0sgJiYgTkZfTkFUCisJZGVmYXVsdCBORl9OQVQgJiYgTkZfQ09OTlRSQUNLX0gzMjMKKwogY29uZmlnIElQX05GX05BVF9TSVAKIAl0cmlzdGF0ZQogCWRlcGVuZHMgb24gSVBfTkZfSVBUQUJMRVMhPW4gJiYgSVBfTkZfQ09OTlRSQUNLIT1uICYmIElQX05GX05BVCE9bgogCWRlZmF1bHQgSVBfTkZfTkFUIGlmIElQX05GX1NJUD15CiAJZGVmYXVsdCBtIGlmIElQX05GX1NJUD1tCiAKK2NvbmZpZyBORl9OQVRfU0lQCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIElQX05GX0lQVEFCTEVTICYmIE5GX0NPTk5UUkFDSyAmJiBORl9OQVQKKwlkZWZhdWx0IE5GX05BVCAmJiBORl9DT05OVFJBQ0tfU0lQCisKICMgbWFuZ2xlICsgc3BlY2lmaWMgdGFyZ2V0cwogY29uZmlnIElQX05GX01BTkdMRQogCXRyaXN0YXRlICJQYWNrZXQgbWFuZ2xpbmciCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggMDlhYWVkMS4uMTVlNzQxYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtNSwxNyArNSwyMyBAQAogIyBvYmplY3RzIGZvciB0aGUgc3RhbmRhbG9uZSAtIGNvbm5lY3Rpb24gdHJhY2tpbmcgLyBOQVQKIGlwX2Nvbm50cmFjay1vYmpzCTo9IGlwX2Nvbm50cmFja19zdGFuZGFsb25lLm8gaXBfY29ubnRyYWNrX2NvcmUubyBpcF9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5vIGlwX2Nvbm50cmFja19wcm90b190Y3AubyBpcF9jb25udHJhY2tfcHJvdG9fdWRwLm8gaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAubwogaXBfbmF0LW9ianMJOj0gaXBfbmF0X2NvcmUubyBpcF9uYXRfaGVscGVyLm8gaXBfbmF0X3Byb3RvX3Vua25vd24ubyBpcF9uYXRfcHJvdG9fdGNwLm8gaXBfbmF0X3Byb3RvX3VkcC5vIGlwX25hdF9wcm90b19pY21wLm8KK25mX25hdC1vYmpzCTo9IG5mX25hdF9jb3JlLm8gbmZfbmF0X2hlbHBlci5vIG5mX25hdF9wcm90b191bmtub3duLm8gbmZfbmF0X3Byb3RvX3RjcC5vIG5mX25hdF9wcm90b191ZHAubyBuZl9uYXRfcHJvdG9faWNtcC5vCitpZm5lcSAoJChDT05GSUdfTkZfTkFUKSwpCitpcHRhYmxlX25hdC1vYmpzCTo9IG5mX25hdF9ydWxlLm8gbmZfbmF0X3N0YW5kYWxvbmUubworZWxzZQogaXB0YWJsZV9uYXQtb2Jqcwk6PSBpcF9uYXRfcnVsZS5vIGlwX25hdF9zdGFuZGFsb25lLm8KK2VuZGlmCiAKIGlwX2Nvbm50cmFja19wcHRwLW9ianMJOj0gaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLm8gaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5vCiBpcF9uYXRfcHB0cC1vYmpzCTo9IGlwX25hdF9oZWxwZXJfcHB0cC5vIGlwX25hdF9wcm90b19ncmUubwogCi1pcF9jb25udHJhY2tfaDMyMy1vYmpzIDo9IGlwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5vIGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM19hc24xLm8KK2lwX2Nvbm50cmFja19oMzIzLW9ianMgOj0gaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLm8gLi4vLi4vbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEubwogaXBfbmF0X2gzMjMtb2JqcyA6PSBpcF9uYXRfaGVscGVyX2gzMjMubwogCiAjIGNvbm5lY3Rpb24gdHJhY2tpbmcKIG9iai0kKENPTkZJR19JUF9ORl9DT05OVFJBQ0spICs9IGlwX2Nvbm50cmFjay5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUKSArPSBpcF9uYXQubworb2JqLSQoQ09ORklHX05GX05BVCkgKz0gbmZfbmF0Lm8KIAogIyBjb25udHJhY2sgbmV0bGluayBpbnRlcmZhY2UKIG9iai0kKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgKz0gaXBfY29ubnRyYWNrX25ldGxpbmsubwpAQCAtMzQsNyArNDAsNyBAQAogb2JqLSQoQ09ORklHX0lQX05GX1NJUCkgKz0gaXBfY29ubnRyYWNrX3NpcC5vCiBvYmotJChDT05GSUdfSVBfTkZfTkVUQklPU19OUykgKz0gaXBfY29ubnRyYWNrX25ldGJpb3NfbnMubwogCi0jIE5BVCBoZWxwZXJzIAorIyBOQVQgaGVscGVycyAoaXBfY29ubnRyYWNrKQogb2JqLSQoQ09ORklHX0lQX05GX05BVF9IMzIzKSArPSBpcF9uYXRfaDMyMy5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX1BQVFApICs9IGlwX25hdF9wcHRwLm8KIG9iai0kKENPTkZJR19JUF9ORl9OQVRfQU1BTkRBKSArPSBpcF9uYXRfYW1hbmRhLm8KQEAgLTQzLDYgKzQ5LDE5IEBACiBvYmotJChDT05GSUdfSVBfTkZfTkFUX0lSQykgKz0gaXBfbmF0X2lyYy5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUX1NJUCkgKz0gaXBfbmF0X3NpcC5vCiAKKyMgTkFUIGhlbHBlcnMgKG5mX2Nvbm50cmFjaykKK29iai0kKENPTkZJR19ORl9OQVRfQU1BTkRBKSArPSBuZl9uYXRfYW1hbmRhLm8KK29iai0kKENPTkZJR19ORl9OQVRfRlRQKSArPSBuZl9uYXRfZnRwLm8KK29iai0kKENPTkZJR19ORl9OQVRfSDMyMykgKz0gbmZfbmF0X2gzMjMubworb2JqLSQoQ09ORklHX05GX05BVF9JUkMpICs9IG5mX25hdF9pcmMubworb2JqLSQoQ09ORklHX05GX05BVF9QUFRQKSArPSBuZl9uYXRfcHB0cC5vCitvYmotJChDT05GSUdfTkZfTkFUX1NJUCkgKz0gbmZfbmF0X3NpcC5vCitvYmotJChDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMpICs9IG5mX25hdF9zbm1wX2Jhc2ljLm8KK29iai0kKENPTkZJR19ORl9OQVRfVEZUUCkgKz0gbmZfbmF0X3RmdHAubworCisjIE5BVCBwcm90b2NvbHMgKG5mX25hdCkKK29iai0kKENPTkZJR19ORl9OQVRfUFJPVE9fR1JFKSArPSBuZl9uYXRfcHJvdG9fZ3JlLm8KKwogIyBnZW5lcmljIElQIHRhYmxlcyAKIG9iai0kKENPTkZJR19JUF9ORl9JUFRBQkxFUykgKz0gaXBfdGFibGVzLm8KIApAQCAtNTAsMTAgKzY5LDEwIEBACiBvYmotJChDT05GSUdfSVBfTkZfRklMVEVSKSArPSBpcHRhYmxlX2ZpbHRlci5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFOR0xFKSArPSBpcHRhYmxlX21hbmdsZS5vCiBvYmotJChDT05GSUdfSVBfTkZfTkFUKSArPSBpcHRhYmxlX25hdC5vCitvYmotJChDT05GSUdfTkZfTkFUKSArPSBpcHRhYmxlX25hdC5vCiBvYmotJChDT05GSUdfSVBfTkZfUkFXKSArPSBpcHRhYmxlX3Jhdy5vCiAKICMgbWF0Y2hlcwotb2JqLSQoQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVCkgKz0gaXB0X2hhc2hsaW1pdC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRSkgKz0gaXB0X2lwcmFuZ2Uubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX09XTkVSKSArPSBpcHRfb3duZXIubwogb2JqLSQoQ09ORklHX0lQX05GX01BVENIX1RPUykgKz0gaXB0X3Rvcy5vCkBAIC04OSw2ICsxMDgsMTEgQEAKIAogIyBvYmplY3RzIGZvciBsMyBpbmRlcGVuZGVudCBjb25udHJhY2sKIG5mX2Nvbm50cmFja19pcHY0LW9ianMgIDo9ICBuZl9jb25udHJhY2tfbDNwcm90b19pcHY0Lm8gbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAubworaWZlcSAoJChDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUKSx5KQoraWZlcSAoJChDT05GSUdfUFJPQ19GUykseSkKK25mX2Nvbm50cmFja19pcHY0LW9ianMJKz0gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQubworZW5kaWYKK2VuZGlmCiAKICMgbDMgaW5kZXBlbmRlbnQgY29ubnRyYWNrCiBvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQpICs9IG5mX2Nvbm50cmFja19pcHY0Lm8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IDZjNzM4M2EuLmFkMjQ2YmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtOTIsNiArOTIsNyBAQAogCWNoYXIgcGJ1ZltzaXplb2YoIjY1NTM1IildLCAqdG1wOwogCXVfaW50MTZfdCBwb3J0LCBsZW47CiAJaW50IHJldCA9IE5GX0FDQ0VQVDsKKwl0eXBlb2YoaXBfbmF0X2FtYW5kYV9ob29rKSBpcF9uYXRfYW1hbmRhOwogCiAJLyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqLwogCWlmIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQpAQCAtMTYxLDkgKzE2MiwxMSBAQAogCQlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKIAkJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMoMHhGRkZGKTsKIAotCQlpZiAoaXBfbmF0X2FtYW5kYV9ob29rKQotCQkJcmV0ID0gaXBfbmF0X2FtYW5kYV9ob29rKHBza2IsIGN0aW5mbywgb2ZmIC0gZGF0YW9mZiwKLQkJCQkJCSBsZW4sIGV4cCk7CisJCS8qIFJDVSByZWFkIGxvY2tlZCBieSBuZl9ob29rX3Nsb3cgKi8KKwkJaXBfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfYW1hbmRhX2hvb2spOworCQlpZiAoaXBfbmF0X2FtYW5kYSkKKwkJCXJldCA9IGlwX25hdF9hbWFuZGEocHNrYiwgY3RpbmZvLCBvZmYgLSBkYXRhb2ZmLAorCQkJCQkgICAgbGVuLCBleHApOwogCQllbHNlIGlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQogCQkJcmV0ID0gTkZfRFJPUDsKIAkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKQEAgLTE4MCw3ICsxODMsNyBAQAogCS5oZWxwID0gaGVscCwKIAkubmFtZSA9ICJhbWFuZGEiLAogCi0JLnR1cGxlID0geyAuc3JjID0geyAudSA9IHsgX19jb25zdGFudF9odG9ucygxMDA4MCkgfSB9LAorCS50dXBsZSA9IHsgLnNyYyA9IHsgLnUgPSB7IC51ZHAgPSB7LnBvcnQgPSBfX2NvbnN0YW50X2h0b25zKDEwMDgwKSB9IH0gfSwKIAkJICAgLmRzdCA9IHsgLnByb3RvbnVtID0gSVBQUk9UT19VRFAgfSwKIAl9LAogCS5tYXNrID0geyAuc3JjID0geyAudSA9IHsgMHhGRkZGIH0gfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKaW5kZXggOGI4NDhhYS4uZjRiMGU2OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKQEAgLTQwLDkgKzQwLDYgQEAKIAogLyogaXBfY29ubnRyYWNrX2xvY2sgcHJvdGVjdHMgdGhlIG1haW4gaGFzaCB0YWJsZSwgcHJvdG9jb2wvaGVscGVyL2V4cGVjdGVkCiAgICByZWdpc3RyYXRpb25zLCBjb25udHJhY2sgdGltZXJzKi8KLSNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQotI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgpAQCAtMjAxLDcgKzE5OCw2IEBACiAvKiBpcF9jb25udHJhY2tfZXhwZWN0IGhlbHBlciBmdW5jdGlvbnMgKi8KIHZvaWQgaXBfY3RfdW5saW5rX2V4cGVjdChzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQogewotCUFTU0VSVF9XUklURV9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CiAJSVBfTkZfQVNTRVJUKCF0aW1lcl9wZW5kaW5nKCZleHAtPnRpbWVvdXQpKTsKIAlsaXN0X2RlbCgmZXhwLT5saXN0KTsKIAlDT05OVFJBQ0tfU1RBVF9JTkMoZXhwZWN0X2RlbGV0ZSk7CkBAIC0yMzMsNyArMjI5LDcgQEAKIAogLyogSnVzdCBmaW5kIGEgZXhwZWN0YXRpb24gY29ycmVzcG9uZGluZyB0byBhIHR1cGxlLiAqLwogc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKgotaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoraXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqaTsKIAkKQEAgLTI5NCw3ICsyOTAsNiBAQAogY2xlYW5fZnJvbV9saXN0cyhzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCkKIHsKIAlERUJVR1AoImNsZWFuX2Zyb21fbGlzdHMoJXApXG4iLCBjdCk7Ci0JQVNTRVJUX1dSSVRFX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKIAlsaXN0X2RlbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmxpc3QpOwogCWxpc3RfZGVsKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0ubGlzdCk7CiAKQEAgLTM3Myw3ICszNjgsNiBAQAogCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKIAotCUFTU0VSVF9SRUFEX0xPQ0soJmlwX2Nvbm50cmFja19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZpcF9jb25udHJhY2tfaGFzaFtoYXNoXSwgbGlzdCkgewogCQlpZiAodHVwbGVoYXNoX3RvX2N0cmFjayhoKSAhPSBpZ25vcmVkX2Nvbm50cmFjayAmJgogCQkgICAgaXBfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCmluZGV4IDkzZGNmOTYuLjA0MTBjOTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwpAQCAtMzEwLDYgKzMxMCw3IEBACiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZm91bmQgPSAwLCBlbmRzX2luX25sOworCXR5cGVvZihpcF9uYXRfZnRwX2hvb2spIGlwX25hdF9mdHA7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVECkBAIC00MzMsOSArNDM0LDEwIEBACiAKIAkvKiBOb3csIE5BVCBtaWdodCB3YW50IHRvIG1hbmdsZSB0aGUgcGFja2V0LCBhbmQgcmVnaXN0ZXIgdGhlCiAJICogKHBvc3NpYmx5IGNoYW5nZWQpIGV4cGVjdGF0aW9uIGl0c2VsZi4gKi8KLQlpZiAoaXBfbmF0X2Z0cF9ob29rKQotCQlyZXQgPSBpcF9uYXRfZnRwX2hvb2socHNrYiwgY3RpbmZvLCBzZWFyY2hbZGlyXVtpXS5mdHB0eXBlLAotCQkJCSAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgZXhwLCAmc2VxKTsKKwlpcF9uYXRfZnRwID0gcmN1X2RlcmVmZXJlbmNlKGlwX25hdF9mdHBfaG9vayk7CisJaWYgKGlwX25hdF9mdHApCisJCXJldCA9IGlwX25hdF9mdHAocHNrYiwgY3RpbmZvLCBzZWFyY2hbZGlyXVtpXS5mdHB0eXBlLAorCQkJCSBtYXRjaG9mZiwgbWF0Y2hsZW4sIGV4cCwgJnNlcSk7CiAJZWxzZSB7CiAJCS8qIENhbid0IGV4cGVjdCB0aGlzPyAgQmVzdCB0byBkcm9wIHBhY2tldCBub3cuICovCiAJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCmluZGV4IDZjYjkwNzAuLmFhYmZlMWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKQEAgLTIzNyw2ICsyMzcsNyBAQAogCXVfaW50MTZfdCBydHBfcG9ydDsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cDsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqcnRjcF9leHA7CisJdHlwZW9mKG5hdF9ydHBfcnRjcF9ob29rKSBuYXRfcnRwX3J0Y3A7CiAKIAkvKiBSZWFkIFJUUCBvciBSVENQIGFkZHJlc3MgKi8KIAlpZiAoIWdldF9oMjQ1X2FkZHIoKmRhdGEsIGFkZHIsICZpcCwgJnBvcnQpIHx8CkBAIC0yNzksMTEgKzI4MCwxMSBAQAogCXJ0Y3BfZXhwLT5mbGFncyA9IDA7CiAKIAlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAhPQotCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJiBuYXRfcnRwX3J0Y3BfaG9vaykgeworCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJgorCSAgICAobmF0X3J0cF9ydGNwID0gcmN1X2RlcmVmZXJlbmNlKG5hdF9ydHBfcnRjcF9ob29rKSkpIHsKIAkJLyogTkFUIG5lZWRlZCAqLwotCQlyZXQgPSBuYXRfcnRwX3J0Y3BfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAotCQkJCQlhZGRyLCBwb3J0LCBydHBfcG9ydCwgcnRwX2V4cCwKLQkJCQkJcnRjcF9leHApOworCQlyZXQgPSBuYXRfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICBhZGRyLCBwb3J0LCBydHBfcG9ydCwgcnRwX2V4cCwgcnRjcF9leHApOwogCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLwogCQlydHBfZXhwLT5leHBlY3RmbiA9IE5VTEw7CiAJCXJ0Y3BfZXhwLT5leHBlY3RmbiA9IE5VTEw7CkBAIC0zMjgsNiArMzI5LDcgQEAKIAlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCA9IE5VTEw7CisJdHlwZW9mKG5hdF90MTIwX2hvb2spIG5hdF90MTIwOwogCiAJLyogUmVhZCBULjEyMCBhZGRyZXNzICovCiAJaWYgKCFnZXRfaDI0NV9hZGRyKCpkYXRhLCBhZGRyLCAmaXAsICZwb3J0KSB8fApAQCAtMzUwLDEwICszNTIsMTEgQEAKIAlleHAtPmZsYWdzID0gSVBfQ1RfRVhQRUNUX1BFUk1BTkVOVDsJLyogQWNjZXB0IG11bHRpcGxlIGNoYW5uZWxzICovCiAKIAlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAhPQotCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJiBuYXRfdDEyMF9ob29rKSB7CisJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwICYmCisJICAgIChuYXRfdDEyMCA9IHJjdV9kZXJlZmVyZW5jZShuYXRfdDEyMF9ob29rKSkpIHsKIAkJLyogTkFUIG5lZWRlZCAqLwotCQlyZXQgPSBuYXRfdDEyMF9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsIGFkZHIsCi0JCQkJICAgIHBvcnQsIGV4cCk7CisJCXJldCA9IG5hdF90MTIwKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsIGFkZHIsCisJCQkgICAgICAgcG9ydCwgZXhwKTsKIAl9IGVsc2UgewkJLyogQ29ubnRyYWNrIG9ubHkgKi8KIAkJZXhwLT5leHBlY3RmbiA9IE5VTEw7CiAJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKSB7CkBAIC02NTEsNiArNjU0LDcgQEAKIAlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCA9IE5VTEw7CisJdHlwZW9mKG5hdF9oMjQ1X2hvb2spIG5hdF9oMjQ1OwogCiAJLyogUmVhZCBoMjQ1QWRkcmVzcyAqLwogCWlmICghZ2V0X2gyMjVfYWRkcigqZGF0YSwgYWRkciwgJmlwLCAmcG9ydCkgfHwKQEAgLTY3MywxMCArNjc3LDExIEBACiAJZXhwLT5mbGFncyA9IDA7CiAKIAlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAhPQotCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJiBuYXRfaDI0NV9ob29rKSB7CisJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwICYmCisJICAgIChuYXRfaDI0NSA9IHJjdV9kZXJlZmVyZW5jZShuYXRfaDI0NV9ob29rKSkpIHsKIAkJLyogTkFUIG5lZWRlZCAqLwotCQlyZXQgPSBuYXRfaDI0NV9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsIGFkZHIsCi0JCQkJICAgIHBvcnQsIGV4cCk7CisJCXJldCA9IG5hdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsIGFkZHIsCisJCQkgICAgICAgcG9ydCwgZXhwKTsKIAl9IGVsc2UgewkJLyogQ29ubnRyYWNrIG9ubHkgKi8KIAkJZXhwLT5leHBlY3RmbiA9IGlwX2Nvbm50cmFja19oMjQ1X2V4cGVjdDsKIApAQCAtNzEyLDYgKzcxNyw3IEBACiAJX19iZTMyIGlwOwogCXVfaW50MTZfdCBwb3J0OwogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBOVUxMOworCXR5cGVvZihuYXRfY2FsbGZvcndhcmRpbmdfaG9vaykgbmF0X2NhbGxmb3J3YXJkaW5nOwogCiAJLyogUmVhZCBhbHRlcm5hdGl2ZUFkZHJlc3MgKi8KIAlpZiAoIWdldF9oMjI1X2FkZHIoKmRhdGEsIGFkZHIsICZpcCwgJnBvcnQpIHx8IHBvcnQgPT0gMCkKQEAgLTc1OSwxMCArNzY1LDExIEBACiAJZXhwLT5mbGFncyA9IDA7CiAKIAlpZiAoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy5pcCAhPQotCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJiBuYXRfY2FsbGZvcndhcmRpbmdfaG9vaykgeworCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCAmJgorCSAgICAobmF0X2NhbGxmb3J3YXJkaW5nID0gcmN1X2RlcmVmZXJlbmNlKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rKSkpIHsKIAkJLyogTmVlZCBOQVQgKi8KLQkJcmV0ID0gbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKLQkJCQkJICAgICAgYWRkciwgcG9ydCwgZXhwKTsKKwkJcmV0ID0gbmF0X2NhbGxmb3J3YXJkaW5nKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSBhZGRyLCBwb3J0LCBleHApOwogCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLwogCQlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0OwogCkBAIC03OTMsNiArODAwLDcgQEAKIAlpbnQgaTsKIAlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CisJdHlwZW9mKHNldF9oMjI1X2FkZHJfaG9vaykgc2V0X2gyMjVfYWRkcjsKIAogCURFQlVHUCgiaXBfY3RfcTkzMTogU2V0dXBcbiIpOwogCkBAIC04MDMsOCArODExLDEwIEBACiAJCQlyZXR1cm4gLTE7CiAJfQogCisJc2V0X2gyMjVfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfaDIyNV9hZGRyX2hvb2spOworCiAJaWYgKChzZXR1cC0+b3B0aW9ucyAmIGVTZXR1cF9VVUlFX2Rlc3RDYWxsU2lnbmFsQWRkcmVzcykgJiYKLQkgICAgKHNldF9oMjI1X2FkZHJfaG9vaykgJiYKKwkgICAgKHNldF9oMjI1X2FkZHIpICYmCiAJICAgIGdldF9oMjI1X2FkZHIoKmRhdGEsICZzZXR1cC0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLCAmaXAsICZwb3J0KSAmJgogCSAgICBpcCAhPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcCkgewogCQlERUJVR1AoImlwX2N0X3E5MzE6IHNldCBkZXN0Q2FsbFNpZ25hbEFkZHJlc3MgIgpAQCAtODEyLDE3ICs4MjIsMTcgQEAKIAkJICAgICAgIE5JUFFVQUQoaXApLCBwb3J0LAogCQkgICAgICAgTklQUVVBRChjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcCksCiAJCSAgICAgICBudG9ocyhjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51LnRjcC5wb3J0KSk7Ci0JCXJldCA9IHNldF9oMjI1X2FkZHJfaG9vayhwc2tiLCBkYXRhLCBkYXRhb2ZmLAotCQkJCQkgJnNldHVwLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsCi0JCQkJCSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcCwKLQkJCQkJIG50b2hzKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLgotCQkJCQkgICAgICAgdS50Y3AucG9ydCkpOworCQlyZXQgPSBzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsCisJCQkJICAgICZzZXR1cC0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAorCQkJCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5pcCwKKwkJCQkgICAgbnRvaHMoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuCisJCQkJCSAgdS50Y3AucG9ydCkpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoKHNldHVwLT5vcHRpb25zICYgZVNldHVwX1VVSUVfc291cmNlQ2FsbFNpZ25hbEFkZHJlc3MpICYmCi0JICAgIChzZXRfaDIyNV9hZGRyX2hvb2spICYmCisJICAgIChzZXRfaDIyNV9hZGRyKSAmJgogCSAgICBnZXRfaDIyNV9hZGRyKCpkYXRhLCAmc2V0dXAtPnNvdXJjZUNhbGxTaWduYWxBZGRyZXNzLCAmaXAsICZwb3J0KQogCSAgICAmJiBpcCAhPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCkgewogCQlERUJVR1AoImlwX2N0X3E5MzE6IHNldCBzb3VyY2VDYWxsU2lnbmFsQWRkcmVzcyAiCkBAIC04MzAsMTEgKzg0MCwxMSBAQAogCQkgICAgICAgTklQUVVBRChpcCksIHBvcnQsCiAJCSAgICAgICBOSVBRVUFEKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwKSwKIAkJICAgICAgIG50b2hzKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKLQkJcmV0ID0gc2V0X2gyMjVfYWRkcl9ob29rKHBza2IsIGRhdGEsIGRhdGFvZmYsCi0JCQkJCSAmc2V0dXAtPnNvdXJjZUNhbGxTaWduYWxBZGRyZXNzLAotCQkJCQkgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXAsCi0JCQkJCSBudG9ocyhjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC4KLQkJCQkJICAgICAgIHUudGNwLnBvcnQpKTsKKwkJcmV0ID0gc2V0X2gyMjVfYWRkcihwc2tiLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgICAmc2V0dXAtPnNvdXJjZUNhbGxTaWduYWxBZGRyZXNzLAorCQkJCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcCwKKwkJCQkgICAgbnRvaHMoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuCisJCQkJCSAgdS50Y3AucG9ydCkpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiAtMTsKIAl9CkBAIC0xMTUzLDcgKzExNjMsNyBAQAogCS5tZSA9IFRISVNfTU9EVUxFLAogCS5tYXhfZXhwZWN0ZWQgPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyA0IC8qIFQuMTIwIGFuZCBILjI0NSAqLyAsCiAJLnRpbWVvdXQgPSAyNDAsCi0JLnR1cGxlID0gey5zcmMgPSB7LnUgPSB7X19jb25zdGFudF9odG9ucyhROTMxX1BPUlQpfX0sCisJLnR1cGxlID0gey5zcmMgPSB7LnUgPSB7LnRjcCA9IHsucG9ydCA9IF9fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKX19fSwKIAkJICAuZHN0ID0gey5wcm90b251bSA9IElQUFJPVE9fVENQfX0sCiAJLm1hc2sgPSB7LnNyYyA9IHsudSA9IHsweEZGRkZ9fSwKIAkJIC5kc3QgPSB7LnByb3RvbnVtID0gMHhGRn19LApAQCAtMTIzMSw2ICsxMjQxLDcgQEAKIAlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwl0eXBlb2YobmF0X3E5MzFfaG9vaykgbmF0X3E5MzE7CiAKIAkvKiBMb29rIGZvciB0aGUgZmlyc3QgcmVsYXRlZCBhZGRyZXNzICovCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTEyNTgsOSArMTI2OSw5IEBACiAJZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CiAJZXhwLT5mbGFncyA9IElQX0NUX0VYUEVDVF9QRVJNQU5FTlQ7CS8qIEFjY2VwdCBtdWx0aXBsZSBjYWxscyAqLwogCi0JaWYgKG5hdF9xOTMxX2hvb2spIHsJLyogTmVlZCBOQVQgKi8KLQkJcmV0ID0gbmF0X3E5MzFfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBhZGRyLCBpLAotCQkJCSAgICBwb3J0LCBleHApOworCW5hdF9xOTMxID0gcmN1X2RlcmVmZXJlbmNlKG5hdF9xOTMxX2hvb2spOworCWlmIChuYXRfcTkzMSkgewkvKiBOZWVkIE5BVCAqLworCQlyZXQgPSBuYXRfcTkzMShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBhZGRyLCBpLCBwb3J0LCBleHApOwogCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLwogCQlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0OwogCkBAIC0xMjg4LDExICsxMjk5LDE0IEBACiAJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKIAkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBHYXRla2VlcGVyUmVxdWVzdCAqIGdycSkKIHsKKwl0eXBlb2Yoc2V0X3Jhc19hZGRyX2hvb2spIHNldF9yYXNfYWRkcjsKKwogCURFQlVHUCgiaXBfY3RfcmFzOiBHUlFcbiIpOwogCi0JaWYgKHNldF9yYXNfYWRkcl9ob29rKQkvKiBOQVRlZCAqLwotCQlyZXR1cm4gc2V0X3Jhc19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKLQkJCQkJICZncnEtPnJhc0FkZHJlc3MsIDEpOworCXNldF9yYXNfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfcmFzX2FkZHJfaG9vayk7CisJaWYgKHNldF9yYXNfYWRkcikJLyogTkFUZWQgKi8KKwkJcmV0dXJuIHNldF9yYXNfYWRkcihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICAmZ3JxLT5yYXNBZGRyZXNzLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2Miw2ICsxMzc2LDcgQEAKIHsKIAlzdHJ1Y3QgaXBfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfaDMyM19pbmZvOwogCWludCByZXQ7CisJdHlwZW9mKHNldF9yYXNfYWRkcl9ob29rKSBzZXRfcmFzX2FkZHI7CiAKIAlERUJVR1AoImlwX2N0X3JhczogUlJRXG4iKTsKIApAQCAtMTM3MSwxMCArMTM4NiwxMSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoc2V0X3Jhc19hZGRyX2hvb2spIHsKLQkJcmV0ID0gc2V0X3Jhc19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKLQkJCQkJcnJxLT5yYXNBZGRyZXNzLml0ZW0sCi0JCQkJCXJycS0+cmFzQWRkcmVzcy5jb3VudCk7CisJc2V0X3Jhc19hZGRyID0gcmN1X2RlcmVmZXJlbmNlKHNldF9yYXNfYWRkcl9ob29rKTsKKwlpZiAoc2V0X3Jhc19hZGRyKSB7CisJCXJldCA9IHNldF9yYXNfYWRkcihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgIHJycS0+cmFzQWRkcmVzcy5pdGVtLAorCQkJCSAgIHJycS0+cmFzQWRkcmVzcy5jb3VudCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIC0xOwogCX0KQEAgLTEzOTcsMTMgKzE0MTMsMTUgQEAKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCWludCByZXQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwl0eXBlb2Yoc2V0X3NpZ19hZGRyX2hvb2spIHNldF9zaWdfYWRkcjsKIAogCURFQlVHUCgiaXBfY3RfcmFzOiBSQ0ZcbiIpOwogCi0JaWYgKHNldF9zaWdfYWRkcl9ob29rKSB7Ci0JCXJldCA9IHNldF9zaWdfYWRkcl9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCi0JCQkJCXJjZi0+Y2FsbFNpZ25hbEFkZHJlc3MuaXRlbSwKLQkJCQkJcmNmLT5jYWxsU2lnbmFsQWRkcmVzcy5jb3VudCk7CisJc2V0X3NpZ19hZGRyID0gcmN1X2RlcmVmZXJlbmNlKHNldF9zaWdfYWRkcl9ob29rKTsKKwlpZiAoc2V0X3NpZ19hZGRyKSB7CisJCXJldCA9IHNldF9zaWdfYWRkcihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgIHJjZi0+Y2FsbFNpZ25hbEFkZHJlc3MuaXRlbSwKKwkJCQkgICByY2YtPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTQ0OCwxMyArMTQ2NiwxNSBAQAogCXN0cnVjdCBpcF9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9oMzIzX2luZm87CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlpbnQgcmV0OworCXR5cGVvZihzZXRfc2lnX2FkZHJfaG9vaykgc2V0X3NpZ19hZGRyOwogCiAJREVCVUdQKCJpcF9jdF9yYXM6IFVSUVxuIik7CiAKLQlpZiAoc2V0X3NpZ19hZGRyX2hvb2spIHsKLQkJcmV0ID0gc2V0X3NpZ19hZGRyX2hvb2socHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKLQkJCQkJdXJxLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAotCQkJCQl1cnEtPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKKwlzZXRfc2lnX2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X3NpZ19hZGRyX2hvb2spOworCWlmIChzZXRfc2lnX2FkZHIpIHsKKwkJcmV0ID0gc2V0X3NpZ19hZGRyKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgdXJxLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAorCQkJCSAgIHVycS0+Y2FsbFNpZ25hbEFkZHJlc3MuY291bnQpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiAtMTsKIAl9CkBAIC0xNDc5LDI4ICsxNDk5LDMwIEBACiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CisJdHlwZW9mKHNldF9oMjI1X2FkZHJfaG9vaykgc2V0X2gyMjVfYWRkcjsKIAogCURFQlVHUCgiaXBfY3RfcmFzOiBBUlFcbiIpOwogCisJc2V0X2gyMjVfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfaDIyNV9hZGRyX2hvb2spOwogCWlmICgoYXJxLT5vcHRpb25zICYgZUFkbWlzc2lvblJlcXVlc3RfZGVzdENhbGxTaWduYWxBZGRyZXNzKSAmJgogCSAgICBnZXRfaDIyNV9hZGRyKCpkYXRhLCAmYXJxLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsICZpcCwgJnBvcnQpICYmCiAJICAgIGlwID09IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAgJiYKLQkgICAgcG9ydCA9PSBpbmZvLT5zaWdfcG9ydFtkaXJdICYmIHNldF9oMjI1X2FkZHJfaG9vaykgeworCSAgICBwb3J0ID09IGluZm8tPnNpZ19wb3J0W2Rpcl0gJiYgc2V0X2gyMjVfYWRkcikgewogCQkvKiBBbnN3ZXJpbmcgQVJRICovCi0JCXJldHVybiBzZXRfaDIyNV9hZGRyX2hvb2socHNrYiwgZGF0YSwgMCwKLQkJCQkJICAmYXJxLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsCi0JCQkJCSAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXAsCi0JCQkJCSAgaW5mby0+c2lnX3BvcnRbIWRpcl0pOworCQlyZXR1cm4gc2V0X2gyMjVfYWRkcihwc2tiLCBkYXRhLCAwLAorCQkJCSAgICAgJmFycS0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAorCQkJCSAgICAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXAsCisJCQkJICAgICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CiAJfQogCiAJaWYgKChhcnEtPm9wdGlvbnMgJiBlQWRtaXNzaW9uUmVxdWVzdF9zcmNDYWxsU2lnbmFsQWRkcmVzcykgJiYKIAkgICAgZ2V0X2gyMjVfYWRkcigqZGF0YSwgJmFycS0+c3JjQ2FsbFNpZ25hbEFkZHJlc3MsICZpcCwgJnBvcnQpICYmCi0JICAgIGlwID09IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAgJiYgc2V0X2gyMjVfYWRkcl9ob29rKSB7CisJICAgIGlwID09IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMuaXAgJiYgc2V0X2gyMjVfYWRkcikgewogCQkvKiBDYWxsaW5nIEFSUSAqLwotCQlyZXR1cm4gc2V0X2gyMjVfYWRkcl9ob29rKHBza2IsIGRhdGEsIDAsCi0JCQkJCSAgJmFycS0+c3JjQ2FsbFNpZ25hbEFkZHJlc3MsCi0JCQkJCSAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXAsCi0JCQkJCSAgcG9ydCk7CisJCXJldHVybiBzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIDAsCisJCQkJICAgICAmYXJxLT5zcmNDYWxsU2lnbmFsQWRkcmVzcywKKwkJCQkgICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwLAorCQkJCSAgICAgcG9ydCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNTE2LDYgKzE1MzgsNyBAQAogCV9fYmUzMiBpcDsKIAl1X2ludDE2X3QgcG9ydDsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXR5cGVvZihzZXRfc2lnX2FkZHJfaG9vaykgc2V0X3NpZ19hZGRyOwogCiAJREVCVUdQKCJpcF9jdF9yYXM6IEFDRlxuIik7CiAKQEAgLTE1MjMsMTAgKzE1NDYsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC5pcCkgewkvKiBBbnN3ZXJpbmcgQUNGICovCi0JCWlmIChzZXRfc2lnX2FkZHJfaG9vaykKLQkJCXJldHVybiBzZXRfc2lnX2FkZHJfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAotCQkJCQkJICZhY2YtPmRlc3RDYWxsU2lnbmFsQWRkcmVzcywKLQkJCQkJCSAxKTsKKwkJc2V0X3NpZ19hZGRyID0gcmN1X2RlcmVmZXJlbmNlKHNldF9zaWdfYWRkcl9ob29rKTsKKwkJaWYgKHNldF9zaWdfYWRkcikKKwkJCXJldHVybiBzZXRfc2lnX2FkZHIocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJICAgICZhY2YtPmRlc3RDYWxsU2lnbmFsQWRkcmVzcywgMSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTU2NiwxMSArMTU4OSwxNCBAQAogCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCiAJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgTG9jYXRpb25SZXF1ZXN0ICogbHJxKQogeworCXR5cGVvZihzZXRfcmFzX2FkZHJfaG9vaykgc2V0X3Jhc19hZGRyOworCiAJREVCVUdQKCJpcF9jdF9yYXM6IExSUVxuIik7CiAKLQlpZiAoc2V0X3Jhc19hZGRyX2hvb2spCi0JCXJldHVybiBzZXRfcmFzX2FkZHJfaG9vayhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAotCQkJCQkgJmxycS0+cmVwbHlBZGRyZXNzLCAxKTsKKwlzZXRfcmFzX2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X3Jhc19hZGRyX2hvb2spOworCWlmIChzZXRfcmFzX2FkZHIpCisJCXJldHVybiBzZXRfcmFzX2FkZHIocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAgJmxycS0+cmVwbHlBZGRyZXNzLCAxKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyOSwyMCArMTY1NSwyNCBAQAogCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEluZm9SZXF1ZXN0UmVzcG9uc2UgKiBpcnIpCiB7CiAJaW50IHJldDsKKwl0eXBlb2Yoc2V0X3Jhc19hZGRyX2hvb2spIHNldF9yYXNfYWRkcjsKKwl0eXBlb2Yoc2V0X3NpZ19hZGRyX2hvb2spIHNldF9zaWdfYWRkcjsKIAogCURFQlVHUCgiaXBfY3RfcmFzOiBJUlJcbiIpOwogCi0JaWYgKHNldF9yYXNfYWRkcl9ob29rKSB7Ci0JCXJldCA9IHNldF9yYXNfYWRkcl9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCi0JCQkJCSZpcnItPnJhc0FkZHJlc3MsIDEpOworCXNldF9yYXNfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfcmFzX2FkZHJfaG9vayk7CisJaWYgKHNldF9yYXNfYWRkcikgeworCQlyZXQgPSBzZXRfcmFzX2FkZHIocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmaXJyLT5yYXNBZGRyZXNzLCAxKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNldF9zaWdfYWRkcl9ob29rKSB7Ci0JCXJldCA9IHNldF9zaWdfYWRkcl9ob29rKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCi0JCQkJCWlyci0+Y2FsbFNpZ25hbEFkZHJlc3MuaXRlbSwKLQkJCQkJaXJyLT5jYWxsU2lnbmFsQWRkcmVzcy5jb3VudCk7CisJc2V0X3NpZ19hZGRyID0gcmN1X2RlcmVmZXJlbmNlKHNldF9zaWdfYWRkcl9ob29rKTsKKwlpZiAoc2V0X3NpZ19hZGRyKSB7CisJCXJldCA9IHNldF9zaWdfYWRkcihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgIGlyci0+Y2FsbFNpZ25hbEFkZHJlc3MuaXRlbSwKKwkJCQkgICBpcnItPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTc0Niw3ICsxNzc2LDcgQEAKIAkubWUgPSBUSElTX01PRFVMRSwKIAkubWF4X2V4cGVjdGVkID0gMzIsCiAJLnRpbWVvdXQgPSAyNDAsCi0JLnR1cGxlID0gey5zcmMgPSB7LnUgPSB7X19jb25zdGFudF9odG9ucyhSQVNfUE9SVCl9fSwKKwkudHVwbGUgPSB7LnNyYyA9IHsudSA9IHsudGNwID0gey5wb3J0ID0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCl9fX0sCiAJCSAgLmRzdCA9IHsucHJvdG9udW0gPSBJUFBST1RPX1VEUH19LAogCS5tYXNrID0gey5zcmMgPSB7LnUgPSB7MHhGRkZFfX0sCiAJCSAuZHN0ID0gey5wcm90b251bSA9IDB4RkZ9fSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYwppbmRleCBhMmFmNWUwLi40ZDE5MzczIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCkBAIC0xMjQsNiArMTI0LDggQEAKIHN0YXRpYyB2b2lkIHBwdHBfZXhwZWN0Zm4oc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCiAJCQkgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKKwl0eXBlb2YoaXBfbmF0X3BwdHBfaG9va19leHBlY3RmbikgaXBfbmF0X3BwdHBfZXhwZWN0Zm47CisKIAlERUJVR1AoImluY3JlYXNpbmcgdGltZW91dHNcbiIpOwogCiAJLyogaW5jcmVhc2UgdGltZW91dCBvZiBHUkUgZGF0YSBjaGFubmVsIGNvbm50cmFjayBlbnRyeSAqLwpAQCAtMTMzLDcgKzEzNSw5IEBACiAJLyogQ2FuIHlvdSBzZWUgaG93IHJ1c3R5IHRoaXMgY29kZSBpcywgY29tcGFyZWQgd2l0aCB0aGUgcHJlLTIuNi4xMQogCSAqIG9uZT8gVGhhdCdzIHdoYXQgaGFwcGVuZWQgdG8gbXkgc2hpbnkgbmV3bmF0IG9mIDIwMDIgOyggLUhXICovCiAKLQlpZiAoIWlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJaXBfbmF0X3BwdHBfZXhwZWN0Zm4gPSByY3VfZGVyZWZlcmVuY2UoaXBfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CisJaWYgKCFpcF9uYXRfcHB0cF9leHBlY3RmbikgewogCQlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlIGludl90OwogCQlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwX290aGVyOwogCkBAIC0xNDIsNyArMTQ2LDcgQEAKIAkJREVCVUdQKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKIAkJRFVNUF9UVVBMRSgmaW52X3QpOwogCi0JCWV4cF9vdGhlciA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZCgmaW52X3QpOworCQlleHBfb3RoZXIgPSBpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmRfZ2V0KCZpbnZfdCk7CiAJCWlmIChleHBfb3RoZXIpIHsKIAkJCS8qIGRlbGV0ZSBvdGhlciBleHBlY3RhdGlvbi4gICovCiAJCQlERUJVR1AoImZvdW5kXG4iKTsKQEAgLTE1Myw4ICsxNTcsOSBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogd2UgbmVlZCBtb3JlIHRoYW4gc2ltcGxlIGludmVyc2lvbiAqLwotCQlpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKGN0LCBleHApOworCQlpcF9uYXRfcHB0cF9leHBlY3RmbihjdCwgZXhwKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBpbnQgZGVzdHJveV9zaWJsaW5nX29yX2V4cChjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0KQpAQCAtMTc2LDcgKzE4MSw3IEBACiAJCWlwX2Nvbm50cmFja19wdXQoc2libGluZyk7CiAJCXJldHVybiAxOwogCX0gZWxzZSB7Ci0JCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZCh0KTsKKwkJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCh0KTsKIAkJaWYgKGV4cCkgewogCQkJREVCVUdQKCJ1bmV4cGVjdF9yZWxhdGVkIG9mIGV4cGVjdCAlcFxuIiwgZXhwKTsKIAkJCWlwX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CkBAIC0yMjYsNiArMjMxLDcgQEAKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwX29yaWcsICpleHBfcmVwbHk7CiAJaW50IHJldCA9IDE7CisJdHlwZW9mKGlwX25hdF9wcHRwX2hvb2tfZXhwX2dyZSkgaXBfbmF0X3BwdHBfZXhwX2dyZTsKIAogCWV4cF9vcmlnID0gaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CiAJaWYgKGV4cF9vcmlnID09IE5VTEwpCkBAIC0yNjIsOCArMjY4LDkgQEAKIAlleHBfcmVwbHktPnR1cGxlLmRzdC51LmdyZS5rZXkgPSBwZWVyX2NhbGxpZDsKIAlleHBfcmVwbHktPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fR1JFOwogCi0JaWYgKGlwX25hdF9wcHRwX2hvb2tfZXhwX2dyZSkKLQkJaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKGV4cF9vcmlnLCBleHBfcmVwbHkpOworCWlwX25hdF9wcHRwX2V4cF9ncmUgPSByY3VfZGVyZWZlcmVuY2UoaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlKTsKKwlpZiAoaXBfbmF0X3BwdHBfZXhwX2dyZSkKKwkJaXBfbmF0X3BwdHBfZXhwX2dyZShleHBfb3JpZywgZXhwX3JlcGx5KTsKIAlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cF9vcmlnKSAhPSAwKQogCQlnb3RvIG91dF9wdXRfYm90aDsKIAlpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cF9yZXBseSkgIT0gMCkKQEAgLTMwMyw2ICszMTAsNyBAQAogCXN0cnVjdCBpcF9jdF9wcHRwX21hc3RlciAqaW5mbyA9ICZjdC0+aGVscC5jdF9wcHRwX2luZm87CiAJdV9pbnQxNl90IG1zZzsKIAlfX2JlMTYgY2lkID0gMCwgcGNpZCA9IDA7CisJdHlwZW9mKGlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCkgaXBfbmF0X3BwdHBfaW5ib3VuZDsKIAogCW1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKTsKIAlERUJVR1AoImluYm91bmQgY29udHJvbCBtZXNzYWdlICVzXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOwpAQCAtNDAyLDkgKzQxMCw5IEBACiAJCWdvdG8gaW52YWxpZDsKIAl9CiAKLQlpZiAoaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKQotCQlyZXR1cm4gaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kKHBza2IsIGN0LCBjdGluZm8sIGN0bGgsCi0JCQkJCQlwcHRwUmVxKTsKKwlpcF9uYXRfcHB0cF9pbmJvdW5kID0gcmN1X2RlcmVmZXJlbmNlKGlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCk7CisJaWYgKGlwX25hdF9wcHRwX2luYm91bmQpCisJCXJldHVybiBpcF9uYXRfcHB0cF9pbmJvdW5kKHBza2IsIGN0LCBjdGluZm8sIGN0bGgsIHBwdHBSZXEpOwogCXJldHVybiBORl9BQ0NFUFQ7CiAKIGludmFsaWQ6CkBAIC00MjcsNiArNDM1LDcgQEAKIAlzdHJ1Y3QgaXBfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfcHB0cF9pbmZvOwogCXVfaW50MTZfdCBtc2c7CiAJX19iZTE2IGNpZCA9IDAsIHBjaWQgPSAwOworCXR5cGVvZihpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKSBpcF9uYXRfcHB0cF9vdXRib3VuZDsKIAogCW1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKTsKIAlERUJVR1AoIm91dGJvdW5kIGNvbnRyb2wgbWVzc2FnZSAlc1xuIiwgcHB0cF9tc2dfbmFtZVttc2ddKTsKQEAgLTQ5Miw5ICs1MDEsOSBAQAogCQlnb3RvIGludmFsaWQ7CiAJfQogCi0JaWYgKGlwX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpCi0JCXJldHVybiBpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kKHBza2IsIGN0LCBjdGluZm8sIGN0bGgsCi0JCQkJCQkgcHB0cFJlcSk7CisJaXBfbmF0X3BwdHBfb3V0Ym91bmQgPSByY3VfZGVyZWZlcmVuY2UoaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCk7CisJaWYgKGlwX25hdF9wcHRwX291dGJvdW5kKQorCQlyZXR1cm4gaXBfbmF0X3BwdHBfb3V0Ym91bmQocHNrYiwgY3QsIGN0aW5mbywgY3RsaCwgcHB0cFJlcSk7CiAJcmV0dXJuIE5GX0FDQ0VQVDsKIAogaW52YWxpZDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jCmluZGV4IDc1ZjdjM2QuLjkxODMyZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19pcmMuYwpAQCAtMTE0LDYgKzExNCw3IEBACiAJdV9pbnQxNl90IGRjY19wb3J0OwogCWludCBpLCByZXQgPSBORl9BQ0NFUFQ7CiAJY2hhciAqYWRkcl9iZWdfcCwgKmFkZHJfZW5kX3A7CisJdHlwZW9mKGlwX25hdF9pcmNfaG9vaykgaXBfbmF0X2lyYzsKIAogCURFQlVHUCgiZW50ZXJlZFxuIik7CiAKQEAgLTIyMiwxMSArMjIzLDEyIEBACiAJCQkJCXsgLnRjcCA9IHsgaHRvbnMoMHhGRkZGKSB9IH0sIDB4RkYgfX0pOwogCQkJZXhwLT5leHBlY3RmbiA9IE5VTEw7CiAJCQlleHAtPmZsYWdzID0gMDsKLQkJCWlmIChpcF9uYXRfaXJjX2hvb2spCi0JCQkJcmV0ID0gaXBfbmF0X2lyY19ob29rKHBza2IsIGN0aW5mbywgCi0JCQkJCQkgICAgICBhZGRyX2JlZ19wIC0gaWJfcHRyLAotCQkJCQkJICAgICAgYWRkcl9lbmRfcCAtIGFkZHJfYmVnX3AsCi0JCQkJCQkgICAgICBleHApOworCQkJaXBfbmF0X2lyYyA9IHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfaXJjX2hvb2spOworCQkJaWYgKGlwX25hdF9pcmMpCisJCQkJcmV0ID0gaXBfbmF0X2lyYyhwc2tiLCBjdGluZm8sCisJCQkJCQkgYWRkcl9iZWdfcCAtIGliX3B0ciwKKwkJCQkJCSBhZGRyX2VuZF9wIC0gYWRkcl9iZWdfcCwKKwkJCQkJCSBleHApOwogCQkJZWxzZSBpZiAoaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgIT0gMCkKIAkJCQlyZXQgPSBORl9EUk9QOwogCQkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggNTVmMGFlNi4uNWZjZjkxZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTMyMCw4ICszMjAsNiBAQAogCX0gZWxzZSBpZiAoZXZlbnRzICYgKElQQ1RfTkVXIHwgSVBDVF9SRUxBVEVEKSkgewogCQl0eXBlID0gSVBDVE5MX01TR19DVF9ORVc7CiAJCWZsYWdzID0gTkxNX0ZfQ1JFQVRFfE5MTV9GX0VYQ0w7Ci0JCS8qIGR1bXAgZXZlcnl0aGluZyAqLwotCQlldmVudHMgPSB+MFVMOwogCQlncm91cCA9IE5GTkxHUlBfQ09OTlRSQUNLX05FVzsKIAl9IGVsc2UgaWYgKGV2ZW50cyAmIChJUENUX1NUQVRVUyB8IElQQ1RfUFJPVE9JTkZPKSkgewogCQl0eXBlID0gSVBDVE5MX01TR19DVF9ORVc7CkBAIC0zNTYsMjggKzM1NCwzNSBAQAogCWlmIChjdG5ldGxpbmtfZHVtcF90dXBsZXMoc2tiLCB0dXBsZShjdCwgSVBfQ1RfRElSX1JFUExZKSkgPCAwKQogCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwogCU5GQV9ORVNUX0VORChza2IsIG5lc3RfcGFybXMpOwotCQotCS8qIE5BVCBzdHVmZiBpcyBub3cgYSBzdGF0dXMgZmxhZyAqLwotCWlmICgoZXZlbnRzICYgSVBDVF9TVEFUVVMgfHwgZXZlbnRzICYgSVBDVF9OQVRJTkZPKQotCSAgICAmJiBjdG5ldGxpbmtfZHVtcF9zdGF0dXMoc2tiLCBjdCkgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwotCWlmIChldmVudHMgJiBJUENUX1JFRlJFU0gKLQkgICAgJiYgY3RuZXRsaW5rX2R1bXBfdGltZW91dChza2IsIGN0KSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7Ci0JaWYgKGV2ZW50cyAmIElQQ1RfUFJPVE9JTkZPCi0JICAgICYmIGN0bmV0bGlua19kdW1wX3Byb3RvaW5mbyhza2IsIGN0KSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7Ci0JaWYgKGV2ZW50cyAmIElQQ1RfSEVMUElORk8KLQkgICAgJiYgY3RuZXRsaW5rX2R1bXBfaGVscGluZm8oc2tiLCBjdCkgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwogCi0JaWYgKGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkgPCAwIHx8Ci0JICAgIGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9SRVBMWSkgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCWlmIChldmVudHMgJiBJUENUX0RFU1RST1kpIHsKKwkJaWYgKGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkgPCAwIHx8CisJCSAgICBjdG5ldGxpbmtfZHVtcF9jb3VudGVycyhza2IsIGN0LCBJUF9DVF9ESVJfUkVQTFkpIDwgMCkKKwkJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisJfSBlbHNlIHsKKwkJaWYgKGN0bmV0bGlua19kdW1wX3N0YXR1cyhza2IsIGN0KSA8IDApCisJCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwogCi0JaWYgKGV2ZW50cyAmIElQQ1RfTUFSSwotCSAgICAmJiBjdG5ldGxpbmtfZHVtcF9tYXJrKHNrYiwgY3QpIDwgMCkKLQkJZ290byBuZmF0dHJfZmFpbHVyZTsKKwkJaWYgKGN0bmV0bGlua19kdW1wX3RpbWVvdXQoc2tiLCBjdCkgPCAwKQorCQkJZ290byBuZmF0dHJfZmFpbHVyZTsKKworCQlpZiAoZXZlbnRzICYgSVBDVF9QUk9UT0lORk8KKwkJICAgICYmIGN0bmV0bGlua19kdW1wX3Byb3RvaW5mbyhza2IsIGN0KSA8IDApCisJCSAgICAJZ290byBuZmF0dHJfZmFpbHVyZTsKKworCQlpZiAoKGV2ZW50cyAmIElQQ1RfSEVMUEVSIHx8IGN0LT5oZWxwZXIpCisJCSAgICAmJiBjdG5ldGxpbmtfZHVtcF9oZWxwaW5mbyhza2IsIGN0KSA8IDApCisJCSAgICAJZ290byBuZmF0dHJfZmFpbHVyZTsKKworCQlpZiAoKGV2ZW50cyAmIElQQ1RfTUFSSyB8fCBjdC0+bWFyaykKKwkJICAgICYmIGN0bmV0bGlua19kdW1wX21hcmsoc2tiLCBjdCkgPCAwKQorCQkgICAgCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisKKwkJaWYgKGV2ZW50cyAmIElQQ1RfQ09VTlRFUl9GSUxMSU5HICYmCisJCSAgICAoY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSA8IDAgfHwKKwkJICAgICBjdG5ldGxpbmtfZHVtcF9jb3VudGVycyhza2IsIGN0LCBJUF9DVF9ESVJfUkVQTFkpIDwgMCkpCisJCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCX0KIAogCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKIAluZm5ldGxpbmtfc2VuZChza2IsIDAsIGdyb3VwLCAwKTsKQEAgLTc0Myw3ICs3NDgsNiBAQAogCQlpcF9jb25udHJhY2tfcHV0KGN0KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCU5FVExJTktfQ0Ioc2tiMikuZHN0X3BpZCA9IE5FVExJTktfQ0Ioc2tiKS5waWQ7CiAKIAllcnIgPSBjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYjIsIE5FVExJTktfQ0Ioc2tiKS5waWQsIG5saC0+bmxtc2dfc2VxLCAKIAkJCQkgIElQQ1ROTF9NU0dfQ1RfTkVXLCAxLCBjdCk7CkBAIC05NDYsOSArOTUwLDExIEBACiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBjdC0+dGltZW91dC5leHBpcmVzICogSFo7CiAJY3QtPnN0YXR1cyB8PSBJUFNfQ09ORklSTUVEOwogCi0JZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9zdGF0dXMoY3QsIGNkYSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZXJyOworCWlmIChjZGFbQ1RBX1NUQVRVUy0xXSkgeworCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjsKKwl9CiAKIAlpZiAoY2RhW0NUQV9QUk9UT0lORk8tMV0pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oY3QsIGNkYSk7CkBAIC0xMjU3LDcgKzEyNjMsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0dXBsZSk7CisJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCgmdHVwbGUpOwogCWlmICghZXhwKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtMTI3Myw4ICsxMjc5LDcgQEAKIAlza2IyID0gYWxsb2Nfc2tiKE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYjIpCiAJCWdvdG8gb3V0OwotCU5FVExJTktfQ0Ioc2tiMikuZHN0X3BpZCA9IE5FVExJTktfQ0Ioc2tiKS5waWQ7Ci0JCisKIAllcnIgPSBjdG5ldGxpbmtfZXhwX2ZpbGxfaW5mbyhza2IyLCBORVRMSU5LX0NCKHNrYikucGlkLCAKIAkJCQkgICAgICBubGgtPm5sbXNnX3NlcSwgSVBDVE5MX01TR19FWFBfTkVXLAogCQkJCSAgICAgIDEsIGV4cCk7CkBAIC0xMzExLDcgKzEzMTYsNyBAQAogCQkJcmV0dXJuIGVycjsKIAogCQkvKiBidW1wIHVzYWdlIGNvdW50IHRvIDIgKi8KLQkJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0dXBsZSk7CisJCWV4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoJnR1cGxlKTsKIAkJaWYgKCFleHApCiAJCQlyZXR1cm4gLUVOT0VOVDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19ncmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fZ3JlLmMKaW5kZXggNWZlMDI2Zi4uYWMxYzQ5ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19ncmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIHN0YXRpYyBERUZJTkVfUldMT0NLKGlwX2N0X2dyZV9sb2NrKTsKLSNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQotI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQogCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlci5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMKaW5kZXggZjRmNzU5OS4uM2EyNmQ2MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3NpcC5jCkBAIC01MiwyMCArNTIsNTYgQEAKIAkJCQljb25zdCBjaGFyICpkcHRyKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlwX25hdF9zZHBfaG9vayk7CiAKLWludCBjdF9zaXBfZ2V0X2luZm8oY29uc3QgY2hhciAqZHB0ciwgc2l6ZV90IGRsZW4sCi0JCQkJdW5zaWduZWQgaW50ICptYXRjaG9mZiwKLQkJCQl1bnNpZ25lZCBpbnQgKm1hdGNobGVuLAotCQkJCXN0cnVjdCBzaXBfaGVhZGVyX25mbyAqaG5mbyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfZ2V0X2luZm8pOwotCi0KIHN0YXRpYyBpbnQgZGlnaXRzX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCk7CiBzdGF0aWMgaW50IGVwYWRkcl9sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpOwogc3RhdGljIGludCBza3BfZGlnaXRzX2xlbihjb25zdCBjaGFyICpkcHRyLCBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCk7CiBzdGF0aWMgaW50IHNrcF9lcGFkZHJfbGVuKGNvbnN0IGNoYXIgKmRwdHIsIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KTsKIAotc3RydWN0IHNpcF9oZWFkZXJfbmZvIGN0X3NpcF9oZHJzW10gPSB7Ci0JeyAJLyogVmlhIGhlYWRlciAqLworc3RydWN0IHNpcF9oZWFkZXJfbmZvIHsKKwljb25zdCBjaGFyCSpsbmFtZTsKKwljb25zdCBjaGFyCSpzbmFtZTsKKwljb25zdCBjaGFyCSpsbl9zdHI7CisJc2l6ZV90CQlsbmxlbjsKKwlzaXplX3QJCXNubGVuOworCXNpemVfdAkJbG5fc3RybGVuOworCWludAkJY2FzZV9zZW5zaXRpdmU7CisJaW50CQkoKm1hdGNoX2xlbikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gY3Rfc2lwX2hkcnNbXSA9IHsKKwlbUE9TX1JFR19SRVFfVVJJXSA9IHsgCS8qIFNJUCBSRUdJU1RFUiByZXF1ZXN0IFVSSSAqLworCQkubG5hbWUJCT0gInNpcDoiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAorCQkubG5fc3RyCQk9ICI6IiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiOiIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4KKwl9LAorCVtQT1NfUkVRX1VSSV0gPSB7IAkvKiBTSVAgcmVxdWVzdCBVUkkgKi8KKwkJLmxuYW1lCQk9ICJzaXA6IiwKKwkJLmxubGVuCQk9IHNpemVvZigic2lwOiIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiQCIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIkAiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCisJfSwKKwlbUE9TX0ZST01dID0gewkJLyogU0lQIEZyb20gaGVhZGVyICovCisJCS5sbmFtZQkJPSAiRnJvbToiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJGcm9tOiIpIC0gMSwKKwkJLnNuYW1lCQk9ICJcclxuZjoiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxuZjoiKSAtIDEsCisJCS5sbl9zdHIJCT0gInNpcDoiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gc2twX2VwYWRkcl9sZW4sCisJfSwKKwlbUE9TX1RPXSA9IHsJCS8qIFNJUCBUbyBoZWFkZXIgKi8KKwkJLmxuYW1lCQk9ICJUbzoiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJUbzoiKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJcbnQ6IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJcbnQ6IikgLSAxLAorCQkubG5fc3RyCQk9ICJzaXA6IiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigic2lwOiIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IHNrcF9lcGFkZHJfbGVuLAorCX0sCisJW1BPU19WSUFdID0geyAJCS8qIFNJUCBWaWEgaGVhZGVyICovCiAJCS5sbmFtZQkJPSAiVmlhOiIsCiAJCS5sbmxlbgkJPSBzaXplb2YoIlZpYToiKSAtIDEsCiAJCS5zbmFtZQkJPSAiXHJcbnY6IiwKQEAgLTc0LDcgKzExMCw3IEBACiAJCS5sbl9zdHJsZW4JPSBzaXplb2YoIlVEUCAiKSAtIDEsCiAJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuLAogCX0sCi0JeyAJLyogQ29udGFjdCBoZWFkZXIgKi8KKwlbUE9TX0NPTlRBQ1RdID0geyAJLyogU0lQIENvbnRhY3QgaGVhZGVyICovCiAJCS5sbmFtZQkJPSAiQ29udGFjdDoiLAogCQkubG5sZW4JCT0gc2l6ZW9mKCJDb250YWN0OiIpIC0gMSwKIAkJLnNuYW1lCQk9ICJcclxubToiLApAQCAtODMsNyArMTE5LDcgQEAKIAkJLmxuX3N0cmxlbgk9IHNpemVvZigic2lwOiIpIC0gMSwKIAkJLm1hdGNoX2xlbgk9IHNrcF9lcGFkZHJfbGVuCiAJfSwKLQl7IAkvKiBDb250ZW50IGxlbmd0aCBoZWFkZXIgKi8KKwlbUE9TX0NPTlRFTlRdID0geyAJLyogU0lQIENvbnRlbnQgbGVuZ3RoIGhlYWRlciAqLwogCQkubG5hbWUJCT0gIkNvbnRlbnQtTGVuZ3RoOiIsCiAJCS5sbmxlbgkJPSBzaXplb2YoIkNvbnRlbnQtTGVuZ3RoOiIpIC0gMSwKIAkJLnNuYW1lCQk9ICJcclxubDoiLApAQCAtOTIsNyArMTI4LDggQEAKIAkJLmxuX3N0cmxlbgk9IHNpemVvZigiOiIpIC0gMSwKIAkJLm1hdGNoX2xlbgk9IHNrcF9kaWdpdHNfbGVuCiAJfSwKLQl7CS8qIFNEUCBtZWRpYSBpbmZvICovCisJW1BPU19NRURJQV0gPSB7CQkvKiBTRFAgbWVkaWEgaW5mbyAqLworCQkuY2FzZV9zZW5zaXRpdmUJPSAxLAogCQkubG5hbWUJCT0gIlxubT0iLAogCQkubG5sZW4JCT0gc2l6ZW9mKCJcbm09IikgLSAxLAogCQkuc25hbWUJCT0gIlxybT0iLApAQCAtMTAxLDcgKzEzOCw4IEBACiAJCS5sbl9zdHJsZW4JPSBzaXplb2YoImF1ZGlvICIpIC0gMSwKIAkJLm1hdGNoX2xlbgk9IGRpZ2l0c19sZW4KIAl9LAotCXsgCS8qIFNEUCBvd25lciBhZGRyZXNzKi8KKwlbUE9TX09XTkVSXSA9IHsgCS8qIFNEUCBvd25lciBhZGRyZXNzKi8KKwkJLmNhc2Vfc2Vuc2l0aXZlCT0gMSwKIAkJLmxuYW1lCQk9ICJcbm89IiwKIAkJLmxubGVuCQk9IHNpemVvZigiXG5vPSIpIC0gMSwKIAkJLnNuYW1lCQk9ICJccm89IiwKQEAgLTExMCw3ICsxNDgsOCBAQAogCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJJTiBJUDQgIikgLSAxLAogCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbgogCX0sCi0JeyAJLyogU0RQIGNvbm5lY3Rpb24gaW5mbyAqLworCVtQT1NfQ09OTkVDVElPTl0gPSB7IAkvKiBTRFAgY29ubmVjdGlvbiBpbmZvICovCisJCS5jYXNlX3NlbnNpdGl2ZQk9IDEsCiAJCS5sbmFtZQkJPSAiXG5jPSIsCiAJCS5sbmxlbgkJPSBzaXplb2YoIlxuYz0iKSAtIDEsCiAJCS5zbmFtZQkJPSAiXHJjPSIsCkBAIC0xMTksMTYgKzE1OCw4IEBACiAJCS5sbl9zdHJsZW4JPSBzaXplb2YoIklOIElQNCAiKSAtIDEsCiAJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCiAJfSwKLQl7IAkvKiBSZXF1ZXN0cyBoZWFkZXJzICovCi0JCS5sbmFtZQkJPSAic2lwOiIsCi0JCS5sbmxlbgkJPSBzaXplb2YoInNpcDoiKSAtIDEsCi0JCS5zbmFtZQkJPSAic2lwOiIsCi0JCS5zbmxlbgkJPSBzaXplb2YoInNpcDoiKSAtIDEsIC8qIHllcywgaSBrbm93Li4gOykgKi8KLQkJLmxuX3N0cgkJPSAiQCIsCi0JCS5sbl9zdHJsZW4JPSBzaXplb2YoIkAiKSAtIDEsCi0JCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCi0JfSwKLQl7IAkvKiBTRFAgdmVyc2lvbiBoZWFkZXIgKi8KKwlbUE9TX1NEUF9IRUFERVJdID0geyAJLyogU0RQIHZlcnNpb24gaGVhZGVyICovCisJCS5jYXNlX3NlbnNpdGl2ZQk9IDEsCiAJCS5sbmFtZQkJPSAiXG52PSIsCiAJCS5sbmxlbgkJPSBzaXplb2YoIlxudj0iKSAtIDEsCiAJCS5zbmFtZQkJPSAiXHJ2PSIsCkBAIC0xMzgsNyArMTY5LDYgQEAKIAkJLm1hdGNoX2xlbgk9IGRpZ2l0c19sZW4KIAl9CiB9OwotRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX2hkcnMpOwogCiAvKiBnZXQgbGluZSBsZW5naHQgdW50aWwgZmlyc3QgQ1Igb3IgTEYgc2Vlbi4gKi8KIGludCBjdF9zaXBfbG5sZW4oY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqbGltaXQpCkBAIC0xNTksMTMgKzE4OSwxOSBAQAogCiAvKiBMaW5lYXIgc3RyaW5nIHNlYXJjaCwgY2FzZSBzZW5zaXRpdmUuICovCiBjb25zdCBjaGFyICpjdF9zaXBfc2VhcmNoKGNvbnN0IGNoYXIgKm5lZWRsZSwgY29uc3QgY2hhciAqaGF5c3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuKQorCQkJICBzaXplX3QgbmVlZGxlX2xlbiwgc2l6ZV90IGhheXN0YWNrX2xlbiwKKwkJCSAgaW50IGNhc2Vfc2Vuc2l0aXZlKQogewogCWNvbnN0IGNoYXIgKmxpbWl0ID0gaGF5c3RhY2sgKyAoaGF5c3RhY2tfbGVuIC0gbmVlZGxlX2xlbik7CiAKIAl3aGlsZSAoaGF5c3RhY2sgPD0gbGltaXQpIHsKLQkJaWYgKG1lbWNtcChoYXlzdGFjaywgbmVlZGxlLCBuZWVkbGVfbGVuKSA9PSAwKQotCQkJcmV0dXJuIGhheXN0YWNrOworCQlpZiAoY2FzZV9zZW5zaXRpdmUpIHsKKwkJCWlmIChzdHJuY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCisJCQkJcmV0dXJuIGhheXN0YWNrOworCQl9IGVsc2UgeworCQkJaWYgKHN0cm5pY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCisJCQkJcmV0dXJuIGhheXN0YWNrOworCQl9CiAJCWhheXN0YWNrKys7CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMjYzLDggKzI5OSw5IEBACiBpbnQgY3Rfc2lwX2dldF9pbmZvKGNvbnN0IGNoYXIgKmRwdHIsIHNpemVfdCBkbGVuLAogCQkgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwKIAkJICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCi0JCSAgICBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8pCisJCSAgICBlbnVtIHNpcF9oZWFkZXJfcG9zIHBvcykKIHsKKwlzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8gPSAmY3Rfc2lwX2hkcnNbcG9zXTsKIAljb25zdCBjaGFyICpsaW1pdCwgKmF1eCwgKmsgPSBkcHRyOwogCWludCBzaGlmdCA9IDA7CiAKQEAgLTI3MiwxMiArMzA5LDE0IEBACiAKIAl3aGlsZSAoZHB0ciA8PSBsaW1pdCkgewogCQlpZiAoKHN0cm5jbXAoZHB0ciwgaG5mby0+bG5hbWUsIGhuZm8tPmxubGVuKSAhPSAwKSAmJgotCQkgICAgKHN0cm5jbXAoZHB0ciwgaG5mby0+c25hbWUsIGhuZm8tPnNubGVuKSAhPSAwKSkgeworCQkgICAgKGhuZm8tPnNuYW1lID09IE5VTEwgfHwKKwkJICAgICBzdHJuY21wKGRwdHIsIGhuZm8tPnNuYW1lLCBobmZvLT5zbmxlbikgIT0gMCkpIHsKIAkJCWRwdHIrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWF1eCA9IGN0X3NpcF9zZWFyY2goaG5mby0+bG5fc3RyLCBkcHRyLCBobmZvLT5sbl9zdHJsZW4sCi0JCSAgICAgICAgICAgICAgICAgICAgY3Rfc2lwX2xubGVuKGRwdHIsIGxpbWl0KSk7CisJCSAgICAgICAgICAgICAgICAgICAgY3Rfc2lwX2xubGVuKGRwdHIsIGxpbWl0KSwKKwkJCQkgICAgaG5mby0+Y2FzZV9zZW5zaXRpdmUpOwogCQlpZiAoIWF1eCkgewogCQkJREVCVUdQKCInJXMnIG5vdCBmb3VuZCBpbiAnJXMnLlxuIiwgaG5mby0+bG5fc3RyLAogCQkJICAgICAgIGhuZm8tPmxuYW1lKTsKQEAgLTI5OCw2ICszMzcsNyBAQAogCURFQlVHUCgiJXMgaGVhZGVyIG5vdCBmb3VuZC5cbiIsIGhuZm8tPmxuYW1lKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9nZXRfaW5mbyk7CiAKIHN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCiAJCQkgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCkBAIC0zMDgsNiArMzQ4LDcgQEAKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW50IHJldDsKKwl0eXBlb2YoaXBfbmF0X3NkcF9ob29rKSBpcF9uYXRfc2RwOwogCiAJZXhwID0gaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CiAJaWYgKGV4cCA9PSBOVUxMKQpAQCAtMzI4LDggKzM2OSw5IEBACiAJZXhwLT5leHBlY3RmbiA9IE5VTEw7CiAJZXhwLT5mbGFncyA9IDA7CiAKLQlpZiAoaXBfbmF0X3NkcF9ob29rKQotCQlyZXQgPSBpcF9uYXRfc2RwX2hvb2socHNrYiwgY3RpbmZvLCBleHAsIGRwdHIpOworCWlwX25hdF9zZHAgPSByY3VfZGVyZWZlcmVuY2UoaXBfbmF0X3NkcF9ob29rKTsKKwlpZiAoaXBfbmF0X3NkcCkKKwkJcmV0ID0gaXBfbmF0X3NkcChwc2tiLCBjdGluZm8sIGV4cCwgZHB0cik7CiAJZWxzZSB7CiAJCWlmIChpcF9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSAhPSAwKQogCQkJcmV0ID0gTkZfRFJPUDsKQEAgLTM1MSw2ICszOTMsNyBAQAogCWludCBtYXRjaG9mZiwgbWF0Y2hsZW47CiAJX19iZTMyIGlwYWRkcjsKIAl1X2ludDE2X3QgcG9ydDsKKwl0eXBlb2YoaXBfbmF0X3NpcF9ob29rKSBpcF9uYXRfc2lwOwogCiAJLyogTm8gRGF0YSA/ICovCiAJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CkBAIC0zNjgsOCArNDExLDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGlwX25hdF9zaXBfaG9vaykgewotCQlpZiAoIWlwX25hdF9zaXBfaG9vayhwc2tiLCBjdGluZm8sIGN0LCAmZHB0cikpIHsKKwlpcF9uYXRfc2lwID0gcmN1X2RlcmVmZXJlbmNlKGlwX25hdF9zaXBfaG9vayk7CisJaWYgKGlwX25hdF9zaXApIHsKKwkJaWYgKCFpcF9uYXRfc2lwKHBza2IsIGN0aW5mbywgY3QsICZkcHRyKSkgewogCQkJcmV0ID0gTkZfRFJPUDsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zODksNyArNDMzLDcgQEAKIAl9CiAJLyogR2V0IGlwIGFuZCBwb3J0IGFkZHJlc3MgZnJvbSBTRFAgcGFja2V0LiAqLwogCWlmIChjdF9zaXBfZ2V0X2luZm8oZHB0ciwgZGF0YWxlbiwgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCi0JICAgICAgICAgICAgICAgICAgICAmY3Rfc2lwX2hkcnNbUE9TX0NPTk5FQ1RJT05dKSA+IDApIHsKKwkgICAgICAgICAgICAgICAgICAgIFBPU19DT05ORUNUSU9OKSA+IDApIHsKIAogCQkvKiBXZSdsbCBkcm9wIG9ubHkgaWYgdGhlcmUgYXJlIHBhcnNlIHByb2JsZW1zLiAqLwogCQlpZiAocGFyc2VfaXBhZGRyKGRwdHIgKyBtYXRjaG9mZiwgTlVMTCwgJmlwYWRkciwKQEAgLTM5OCw3ICs0NDIsNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAkJaWYgKGN0X3NpcF9nZXRfaW5mbyhkcHRyLCBkYXRhbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKLQkJICAgICAgICAgICAgICAgICAgICAmY3Rfc2lwX2hkcnNbUE9TX01FRElBXSkgPiAwKSB7CisJCSAgICAgICAgICAgICAgICAgICAgUE9TX01FRElBKSA+IDApIHsKIAogCQkJcG9ydCA9IHNpbXBsZV9zdHJ0b3VsKGRwdHIgKyBtYXRjaG9mZiwgTlVMTCwgMTApOwogCQkJaWYgKHBvcnQgPCAxMDI0KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDAyMTM1NzUuLjg2ZWZiNTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0yOCw5ICsyOCw2IEBACiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKLSNkZWZpbmUgQVNTRVJUX1JFQURfTE9DSyh4KQotI2RlZmluZSBBU1NFUlRfV1JJVEVfTE9DSyh4KQotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2NvcmUuaD4KQEAgLTEzOSw3ICsxMzYsNiBAQAogCWNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjayA9IHR1cGxlaGFzaF90b19jdHJhY2soaGFzaCk7CiAJc3RydWN0IGlwX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CiAKLQlBU1NFUlRfUkVBRF9MT0NLKCZpcF9jb25udHJhY2tfbG9jayk7CiAJSVBfTkZfQVNTRVJUKGNvbm50cmFjayk7CiAKIAkvKiB3ZSBvbmx5IHdhbnQgdG8gcHJpbnQgRElSX09SSUdJTkFMICovCkBAIC05MjYsNyArOTIyLDcgQEAKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyk7CiBFWFBPUlRfU1lNQk9MKGlwX2Nvbm50cmFja19leHBlY3RfcHV0KTsKIEVYUE9SVF9TWU1CT0xfR1BMKF9faXBfY29ubnRyYWNrX2V4cGVjdF9maW5kKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGlwX2Nvbm50cmFja19leHBlY3RfZmluZCk7CitFWFBPUlRfU1lNQk9MX0dQTChpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmRfZ2V0KTsKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKTsKIEVYUE9SVF9TWU1CT0woaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoaXBfY29ubnRyYWNrX2V4cGVjdF9saXN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja190ZnRwLmMKaW5kZXggZmUwYjYzNC4uZWY1NmRlMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja190ZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja190ZnRwLmMKQEAgLTUwLDYgKzUwLDcgQEAKIAlzdHJ1Y3QgdGZ0cGhkciBfdGZ0cGgsICp0Zmg7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIAl1bnNpZ25lZCBpbnQgcmV0ID0gTkZfQUNDRVBUOworCXR5cGVvZihpcF9uYXRfdGZ0cF9ob29rKSBpcF9uYXRfdGZ0cDsKIAogCXRmaCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwKIAkJCQkgKCpwc2tiKS0+bmguaXBoLT5paGwqNCtzaXplb2Yoc3RydWN0IHVkcGhkciksCkBAIC04MSw4ICs4Miw5IEBACiAJCURFQlVHUCgiZXhwZWN0OiAiKTsKIAkJRFVNUF9UVVBMRSgmZXhwLT50dXBsZSk7CiAJCURVTVBfVFVQTEUoJmV4cC0+bWFzayk7Ci0JCWlmIChpcF9uYXRfdGZ0cF9ob29rKQotCQkJcmV0ID0gaXBfbmF0X3RmdHBfaG9vayhwc2tiLCBjdGluZm8sIGV4cCk7CisJCWlwX25hdF90ZnRwID0gcmN1X2RlcmVmZXJlbmNlKGlwX25hdF90ZnRwX2hvb2spOworCQlpZiAoaXBfbmF0X3RmdHApCisJCQlyZXQgPSBpcF9uYXRfdGZ0cChwc2tiLCBjdGluZm8sIGV4cCk7CiAJCWVsc2UgaWYgKGlwX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApICE9IDApCiAJCQlyZXQgPSBORl9EUk9QOwogCQlpcF9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9hbWFuZGEuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfYW1hbmRhLmMKaW5kZXggM2E4ODg3MS4uODVkZjFhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9hbWFuZGEuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2FtYW5kYS5jCkBAIC03MCwxNSArNzAsMTQgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwX25hdF9hbWFuZGFfZmluaSh2b2lkKQogewotCWlwX25hdF9hbWFuZGFfaG9vayA9IE5VTEw7Ci0JLyogTWFrZSBzdXJlIG5vb25lIGNhbGxzIGl0LCBtZWFud2hpbGUuICovCi0Jc3luY2hyb25pemVfbmV0KCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGlwX25hdF9hbWFuZGFfaG9vaywgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwX25hdF9hbWFuZGFfaW5pdCh2b2lkKQogewotCUJVR19PTihpcF9uYXRfYW1hbmRhX2hvb2spOwotCWlwX25hdF9hbWFuZGFfaG9vayA9IGhlbHA7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfYW1hbmRhX2hvb2spKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X2FtYW5kYV9ob29rLCBoZWxwKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYwppbmRleCA0YjYyNjBhLi45ZDFhNTE3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYwpAQCAtMzYyLDEyICszNjIsMTAgQEAKIAlpcGggPSAodm9pZCAqKSgqcHNrYiktPmRhdGEgKyBpcGhkcm9mZjsKIAogCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykgewotCQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUofmlwaC0+c2FkZHIsIHRhcmdldC0+c3JjLmlwLAotCQkJCQkgICAgaXBoLT5jaGVjayk7CisJCW5mX2NzdW1fcmVwbGFjZTQoJmlwaC0+Y2hlY2ssIGlwaC0+c2FkZHIsIHRhcmdldC0+c3JjLmlwKTsKIAkJaXBoLT5zYWRkciA9IHRhcmdldC0+c3JjLmlwOwogCX0gZWxzZSB7Ci0JCWlwaC0+Y2hlY2sgPSBuZl9jc3VtX3VwZGF0ZSh+aXBoLT5kYWRkciwgdGFyZ2V0LT5kc3QuaXAsCi0JCQkJCSAgICBpcGgtPmNoZWNrKTsKKwkJbmZfY3N1bV9yZXBsYWNlNCgmaXBoLT5jaGVjaywgaXBoLT5kYWRkciwgdGFyZ2V0LT5kc3QuaXApOwogCQlpcGgtPmRhZGRyID0gdGFyZ2V0LT5kc3QuaXA7CiAJfQogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9mdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfZnRwLmMKaW5kZXggYTcxYzIzMy4uOTEzOTYwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9mdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2Z0cC5jCkBAIC0xNTYsMTUgKzE1NiwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfbmF0X2Z0cF9maW5pKHZvaWQpCiB7Ci0JaXBfbmF0X2Z0cF9ob29rID0gTlVMTDsKLQkvKiBNYWtlIHN1cmUgbm9vbmUgY2FsbHMgaXQsIG1lYW53aGlsZS4gKi8KLQlzeW5jaHJvbml6ZV9uZXQoKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X2Z0cF9ob29rLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaXBfbmF0X2Z0cF9pbml0KHZvaWQpCiB7Ci0JQlVHX09OKGlwX25hdF9mdHBfaG9vayk7Ci0JaXBfbmF0X2Z0cF9ob29rID0gaXBfbmF0X2Z0cDsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKGlwX25hdF9mdHBfaG9vaykpOworCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9uYXRfZnRwX2hvb2ssIGlwX25hdF9mdHApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXIuYwppbmRleCAzYmY4NTg0Li5lZTgwZmViIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMKQEAgLTE4OCwxMCArMTg4LDggQEAKIAkJCQkJICAgY3N1bV9wYXJ0aWFsKChjaGFyICopdGNwaCwKIAkJCQkJICAgCQlkYXRhbGVuLCAwKSk7CiAJfSBlbHNlCi0JCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCQkgICBodG9ucyhvbGRsZW4pIF4gaHRvbnMoMHhGRkZGKSwKLQkJCQkJCSAgIGh0b25zKGRhdGFsZW4pLAotCQkJCQkJICAgdGNwaC0+Y2hlY2ssIDEpOworCQluZl9wcm90b19jc3VtX3JlcGxhY2UyKCZ0Y3BoLT5jaGVjaywgKnBza2IsCisJCQkJCWh0b25zKG9sZGxlbiksIGh0b25zKGRhdGFsZW4pLCAxKTsKIAogCWlmIChyZXBfbGVuICE9IG1hdGNoX2xlbikgewogCQlzZXRfYml0KElQU19TRVFfQURKVVNUX0JJVCwgJmN0LT5zdGF0dXMpOwpAQCAtMjY0LDEyICsyNjIsMTAgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3VtX3BhcnRpYWwoKGNoYXIgKil1ZHBoLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuLCAwKSk7CiAJCWlmICghdWRwaC0+Y2hlY2spCi0JCQl1ZHBoLT5jaGVjayA9IC0xOworCQkJdWRwaC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKIAl9IGVsc2UKLQkJdWRwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwKLQkJCQkJCSAgIGh0b25zKG9sZGxlbikgXiBodG9ucygweEZGRkYpLAotCQkJCQkJICAgaHRvbnMoZGF0YWxlbiksCi0JCQkJCQkgICB1ZHBoLT5jaGVjaywgMSk7CisJCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTIoJnVkcGgtPmNoZWNrLCAqcHNrYiwKKwkJCQkJaHRvbnMob2xkbGVuKSwgaHRvbnMoZGF0YWxlbiksIDEpOwogCXJldHVybiAxOwogfQogRVhQT1JUX1NZTUJPTChpcF9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQpOwpAQCAtMzA3LDE0ICszMDMsMTAgQEAKIAkJCW50b2hsKHNhY2stPnN0YXJ0X3NlcSksIG5ld19zdGFydF9zZXEsCiAJCQludG9obChzYWNrLT5lbmRfc2VxKSwgbmV3X2VuZF9zZXEpOwogCi0JCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoc2tiLAotCQkJCQkJICAgfnNhY2stPnN0YXJ0X3NlcSwKLQkJCQkJCSAgIG5ld19zdGFydF9zZXEsCi0JCQkJCQkgICB0Y3BoLT5jaGVjaywgMCk7Ci0JCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoc2tiLAotCQkJCQkJICAgfnNhY2stPmVuZF9zZXEsCi0JCQkJCQkgICBuZXdfZW5kX3NlcSwKLQkJCQkJCSAgIHRjcGgtPmNoZWNrLCAwKTsKKwkJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmdGNwaC0+Y2hlY2ssIHNrYiwKKwkJCQkJc2Fjay0+c3RhcnRfc2VxLCBuZXdfc3RhcnRfc2VxLCAwKTsKKwkJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmdGNwaC0+Y2hlY2ssIHNrYiwKKwkJCQkJc2Fjay0+ZW5kX3NlcSwgbmV3X2VuZF9zZXEsIDApOwogCQlzYWNrLT5zdGFydF9zZXEgPSBuZXdfc3RhcnRfc2VxOwogCQlzYWNrLT5lbmRfc2VxID0gbmV3X2VuZF9zZXE7CiAJCXNhY2tvZmYgKz0gc2l6ZW9mKCpzYWNrKTsKQEAgLTM5NywxMCArMzg5LDggQEAKIAllbHNlCiAJCW5ld2FjayA9IGh0b25sKG50b2hsKHRjcGgtPmFja19zZXEpIC0gb3RoZXJfd2F5LT5vZmZzZXRfYmVmb3JlKTsKIAotCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsIH50Y3BoLT5zZXEsIG5ld3NlcSwKLQkJCQkJICAgdGNwaC0+Y2hlY2ssIDApOwotCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsIH50Y3BoLT5hY2tfc2VxLCBuZXdhY2ssCi0JCQkJCSAgIHRjcGgtPmNoZWNrLCAwKTsKKwluZl9wcm90b19jc3VtX3JlcGxhY2U0KCZ0Y3BoLT5jaGVjaywgKnBza2IsIHRjcGgtPnNlcSwgbmV3c2VxLCAwKTsKKwluZl9wcm90b19jc3VtX3JlcGxhY2U0KCZ0Y3BoLT5jaGVjaywgKnBza2IsIHRjcGgtPmFja19zZXEsIG5ld2FjaywgMCk7CiAKIAlERUJVR1AoIkFkanVzdGluZyBzZXF1ZW5jZSBudW1iZXIgZnJvbSAldS0+JXUsIGFjayBmcm9tICV1LT4ldVxuIiwKIAkJbnRvaGwodGNwaC0+c2VxKSwgbnRvaGwobmV3c2VxKSwgbnRvaGwodGNwaC0+YWNrX3NlcSksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKaW5kZXggNGE3ZDM0NC4uYmRjOTllZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwpAQCAtNTYzLDI1ICs1NjMsMjUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewotCUJVR19PTihzZXRfaDI0NV9hZGRyX2hvb2sgIT0gTlVMTCk7Ci0JQlVHX09OKHNldF9oMjI1X2FkZHJfaG9vayAhPSBOVUxMKTsKLQlCVUdfT04oc2V0X3NpZ19hZGRyX2hvb2sgIT0gTlVMTCk7Ci0JQlVHX09OKHNldF9yYXNfYWRkcl9ob29rICE9IE5VTEwpOwotCUJVR19PTihuYXRfcnRwX3J0Y3BfaG9vayAhPSBOVUxMKTsKLQlCVUdfT04obmF0X3QxMjBfaG9vayAhPSBOVUxMKTsKLQlCVUdfT04obmF0X2gyNDVfaG9vayAhPSBOVUxMKTsKLQlCVUdfT04obmF0X2NhbGxmb3J3YXJkaW5nX2hvb2sgIT0gTlVMTCk7Ci0JQlVHX09OKG5hdF9xOTMxX2hvb2sgIT0gTlVMTCk7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShzZXRfaDI0NV9hZGRyX2hvb2spICE9IE5VTEwpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2Uoc2V0X2gyMjVfYWRkcl9ob29rKSAhPSBOVUxMKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKHNldF9zaWdfYWRkcl9ob29rKSAhPSBOVUxMKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKHNldF9yYXNfYWRkcl9ob29rKSAhPSBOVUxMKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5hdF9ydHBfcnRjcF9ob29rKSAhPSBOVUxMKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5hdF90MTIwX2hvb2spICE9IE5VTEwpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2UobmF0X2gyNDVfaG9vaykgIT0gTlVMTCk7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShuYXRfY2FsbGZvcndhcmRpbmdfaG9vaykgIT0gTlVMTCk7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShuYXRfcTkzMV9ob29rKSAhPSBOVUxMKTsKIAotCXNldF9oMjQ1X2FkZHJfaG9vayA9IHNldF9oMjQ1X2FkZHI7Ci0Jc2V0X2gyMjVfYWRkcl9ob29rID0gc2V0X2gyMjVfYWRkcjsKLQlzZXRfc2lnX2FkZHJfaG9vayA9IHNldF9zaWdfYWRkcjsKLQlzZXRfcmFzX2FkZHJfaG9vayA9IHNldF9yYXNfYWRkcjsKLQluYXRfcnRwX3J0Y3BfaG9vayA9IG5hdF9ydHBfcnRjcDsKLQluYXRfdDEyMF9ob29rID0gbmF0X3QxMjA7Ci0JbmF0X2gyNDVfaG9vayA9IG5hdF9oMjQ1OwotCW5hdF9jYWxsZm9yd2FyZGluZ19ob29rID0gbmF0X2NhbGxmb3J3YXJkaW5nOwotCW5hdF9xOTMxX2hvb2sgPSBuYXRfcTkzMTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoc2V0X2gyNDVfYWRkcl9ob29rLCBzZXRfaDI0NV9hZGRyKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoc2V0X2gyMjVfYWRkcl9ob29rLCBzZXRfaDIyNV9hZGRyKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoc2V0X3NpZ19hZGRyX2hvb2ssIHNldF9zaWdfYWRkcik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHNldF9yYXNfYWRkcl9ob29rLCBzZXRfcmFzX2FkZHIpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuYXRfcnRwX3J0Y3BfaG9vaywgbmF0X3J0cF9ydGNwKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3QxMjBfaG9vaywgbmF0X3QxMjApOworCXJjdV9hc3NpZ25fcG9pbnRlcihuYXRfaDI0NV9ob29rLCBuYXRfaDI0NSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rLCBuYXRfY2FsbGZvcndhcmRpbmcpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuYXRfcTkzMV9ob29rLCBuYXRfcTkzMSk7CiAKIAlERUJVR1AoImlwX25hdF9oMzIzOiBpbml0IHN1Y2Nlc3NcbiIpOwogCXJldHVybiAwOwpAQCAtNTkwLDE2ICs1OTAsMTYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKIHsKLQlzZXRfaDI0NV9hZGRyX2hvb2sgPSBOVUxMOwotCXNldF9oMjI1X2FkZHJfaG9vayA9IE5VTEw7Ci0Jc2V0X3NpZ19hZGRyX2hvb2sgPSBOVUxMOwotCXNldF9yYXNfYWRkcl9ob29rID0gTlVMTDsKLQluYXRfcnRwX3J0Y3BfaG9vayA9IE5VTEw7Ci0JbmF0X3QxMjBfaG9vayA9IE5VTEw7Ci0JbmF0X2gyNDVfaG9vayA9IE5VTEw7Ci0JbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2sgPSBOVUxMOwotCW5hdF9xOTMxX2hvb2sgPSBOVUxMOwotCXN5bmNocm9uaXplX25ldCgpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfaDI0NV9hZGRyX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfaDIyNV9hZGRyX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfc2lnX2FkZHJfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHNldF9yYXNfYWRkcl9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3J0cF9ydGNwX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuYXRfdDEyMF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X2gyNDVfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3E5MzFfaG9vaywgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jCmluZGV4IDMyOWZkY2QuLmVjOTU3YmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAJREVCVUdQKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKIAlEVU1QX1RVUExFKCZ0KTsKLQlvdGhlcl9leHAgPSBpcF9jb25udHJhY2tfZXhwZWN0X2ZpbmQoJnQpOworCW90aGVyX2V4cCA9IGlwX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoJnQpOwogCWlmIChvdGhlcl9leHApIHsKIAkJaXBfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQob3RoZXJfZXhwKTsKIAkJaXBfY29ubnRyYWNrX2V4cGVjdF9wdXQob3RoZXJfZXhwKTsKQEAgLTMxNSwxNyArMzE1LDE3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlCVUdfT04oaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCk7Ci0JaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCA9ICZwcHRwX291dGJvdW5kX3BrdDsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKGlwX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCwgcHB0cF9vdXRib3VuZF9wa3QpOwogCi0JQlVHX09OKGlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCk7Ci0JaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kID0gJnBwdHBfaW5ib3VuZF9wa3Q7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfcHB0cF9ob29rX2luYm91bmQpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X3BwdHBfaG9va19pbmJvdW5kLCBwcHRwX2luYm91bmRfcGt0KTsKIAotCUJVR19PTihpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUpOwotCWlwX25hdF9wcHRwX2hvb2tfZXhwX2dyZSA9ICZwcHRwX2V4cF9ncmU7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X3BwdHBfaG9va19leHBfZ3JlLCBwcHRwX2V4cF9ncmUpOwogCi0JQlVHX09OKGlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pOwotCWlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4gPSAmcHB0cF9uYXRfZXhwZWN0ZWQ7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuKSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4sIHBwdHBfbmF0X2V4cGVjdGVkKTsKIAogCXByaW50aygiaXBfbmF0X3BwdHAgdmVyc2lvbiAlcyBsb2FkZWRcbiIsIElQX05BVF9QUFRQX1ZFUlNJT04pOwogCXJldHVybiAwOwpAQCAtMzM1LDE0ICszMzUsMTMgQEAKIHsKIAlERUJVR1AoImNsZWFudXBfbW9kdWxlXG4iICk7CiAKLQlpcF9uYXRfcHB0cF9ob29rX2V4cGVjdGZuID0gTlVMTDsKLQlpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUgPSBOVUxMOwotCWlwX25hdF9wcHRwX2hvb2tfaW5ib3VuZCA9IE5VTEw7Ci0JaXBfbmF0X3BwdHBfaG9va19vdXRib3VuZCA9IE5VTEw7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGlwX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4sIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9uYXRfcHB0cF9ob29rX2V4cF9ncmUsIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9uYXRfcHB0cF9ob29rX2luYm91bmQsIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9uYXRfcHB0cF9ob29rX291dGJvdW5kLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCWlwX25hdF9wcm90b19ncmVfZmluaSgpOwotCS8qIE1ha2Ugc3VyZSBub29uZSBjYWxscyBpdCwgbWVhbndoaWxlICovCi0Jc3luY2hyb25pemVfbmV0KCk7CiAKIAlwcmludGsoImlwX25hdF9wcHRwIHZlcnNpb24gJXMgdW5sb2FkZWRcbiIsIElQX05BVF9QUFRQX1ZFUlNJT04pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9pcmMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaXJjLmMKaW5kZXggYTc2NzEyMy4uZmViMjZiNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9pcmMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2lyYy5jCkBAIC05OCwxNSArOTgsMTQgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwX25hdF9pcmNfZmluaSh2b2lkKQogewotCWlwX25hdF9pcmNfaG9vayA9IE5VTEw7Ci0JLyogTWFrZSBzdXJlIG5vb25lIGNhbGxzIGl0LCBtZWFud2hpbGUuICovCi0Jc3luY2hyb25pemVfbmV0KCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGlwX25hdF9pcmNfaG9vaywgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwX25hdF9pcmNfaW5pdCh2b2lkKQogewotCUJVR19PTihpcF9uYXRfaXJjX2hvb2spOwotCWlwX25hdF9pcmNfaG9vayA9IGhlbHA7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShpcF9uYXRfaXJjX2hvb2spKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X2lyY19ob29rLCBoZWxwKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fZ3JlLmMKaW5kZXggYmY5MWY5My4uOTU4MTAyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19ncmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX2dyZS5jCkBAIC0xMjksMTEgKzEyOSw5IEBACiAJCQl9CiAJCQlpZiAoZ3JlaC0+Y3N1bSkgewogCQkJCS8qIEZJWE1FOiBOZXZlciB0ZXN0ZWQgdGhpcyBjb2RlLi4uICovCi0JCQkJKihncmVfY3N1bShncmVoKSkgPQotCQkJCQluZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwKLQkJCQkJCQl+KihncmVfa2V5KGdyZWgpKSwKLQkJCQkJCQl0dXBsZS0+ZHN0LnUuZ3JlLmtleSwKLQkJCQkJCQkqKGdyZV9jc3VtKGdyZWgpKSwgMCk7CisJCQkJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNChncmVfY3N1bShncmVoKSwgKnBza2IsCisJCQkJCQkJKihncmVfa2V5KGdyZWgpKSwKKwkJCQkJCQl0dXBsZS0+ZHN0LnUuZ3JlLmtleSwgMCk7CiAJCQl9CiAJCQkqKGdyZV9rZXkoZ3JlaCkpID0gdHVwbGUtPmRzdC51LmdyZS5rZXk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19pY21wLmMKaW5kZXggM2Y2ZWZjMS4uZmI3MTZlZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19pY21wLmMKQEAgLTI0LDggKzI0LDggQEAKIAkgICAgICBjb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1pbiwKIAkgICAgICBjb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1heCkKIHsKLQlyZXR1cm4gKHR1cGxlLT5zcmMudS5pY21wLmlkID49IG1pbi0+aWNtcC5pZAotCQkmJiB0dXBsZS0+c3JjLnUuaWNtcC5pZCA8PSBtYXgtPmljbXAuaWQpOworCXJldHVybiBudG9ocyh0dXBsZS0+c3JjLnUuaWNtcC5pZCkgPj0gbnRvaHMobWluLT5pY21wLmlkKSAmJgorCSAgICAgICBudG9ocyh0dXBsZS0+c3JjLnUuaWNtcC5pZCkgPD0gbnRvaHMobWF4LT5pY21wLmlkKTsKIH0KIAogc3RhdGljIGludApAQCAtNjYsMTAgKzY2LDggQEAKIAkJcmV0dXJuIDA7CiAKIAloZHIgPSAoc3RydWN0IGljbXBoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGhkcm9mZik7Ci0JaGRyLT5jaGVja3N1bSA9IG5mX3Byb3RvX2NzdW1fdXBkYXRlKCpwc2tiLAotCQkJCQkgICAgIGhkci0+dW4uZWNoby5pZCBeIGh0b25zKDB4RkZGRiksCi0JCQkJCSAgICAgdHVwbGUtPnNyYy51LmljbXAuaWQsCi0JCQkJCSAgICAgaGRyLT5jaGVja3N1bSwgMCk7CisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlMigmaGRyLT5jaGVja3N1bSwgKnBza2IsCisJCQkgICAgICAgaGRyLT51bi5lY2hvLmlkLCB0dXBsZS0+c3JjLnUuaWNtcC5pZCwgMCk7CiAJaGRyLT51bi5lY2hvLmlkID0gdHVwbGUtPnNyYy51LmljbXAuaWQ7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX3RjcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b190Y3AuYwppbmRleCAxMmRlYjEzLi5iNTg2ZDE4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX3RjcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fdGNwLmMKQEAgLTEyOSw5ICsxMjksOCBAQAogCWlmIChoZHJzaXplIDwgc2l6ZW9mKCpoZHIpKQogCQlyZXR1cm4gMTsKIAotCWhkci0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgfm9sZGlwLCBuZXdpcCwgaGRyLT5jaGVjaywgMSk7Ci0JaGRyLT5jaGVjayA9IG5mX3Byb3RvX2NzdW1fdXBkYXRlKCpwc2tiLCBvbGRwb3J0IF4gaHRvbnMoMHhGRkZGKSwgbmV3cG9ydCwKLQkJCQkJICBoZHItPmNoZWNrLCAwKTsKKwluZl9wcm90b19jc3VtX3JlcGxhY2U0KCZoZHItPmNoZWNrLCAqcHNrYiwgb2xkaXAsIG5ld2lwLCAxKTsKKwluZl9wcm90b19jc3VtX3JlcGxhY2UyKCZoZHItPmNoZWNrLCAqcHNrYiwgb2xkcG9ydCwgbmV3cG9ydCwgMCk7CiAJcmV0dXJuIDE7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fdWRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX3VkcC5jCmluZGV4IDRiYmVjNzcuLjVjZWQwODcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fdWRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b191ZHAuYwpAQCAtMTE1LDEzICsxMTUsMTAgQEAKIAl9CiAKIAlpZiAoaGRyLT5jaGVjayB8fCAoKnBza2IpLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQloZHItPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsIH5vbGRpcCwgbmV3aXAsCi0JCQkJCQkgIGhkci0+Y2hlY2ssIDEpOwotCQloZHItPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCQkgICpwb3J0cHRyIF4gaHRvbnMoMHhGRkZGKSwgbmV3cG9ydCwKLQkJCQkJCSAgaGRyLT5jaGVjaywgMCk7CisJCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTQoJmhkci0+Y2hlY2ssICpwc2tiLCBvbGRpcCwgbmV3aXAsIDEpOworCQluZl9wcm90b19jc3VtX3JlcGxhY2UyKCZoZHItPmNoZWNrLCAqcHNrYiwgKnBvcnRwdHIsIG5ld3BvcnQsIDApOwogCQlpZiAoIWhkci0+Y2hlY2spCi0JCQloZHItPmNoZWNrID0gLTE7CisJCQloZHItPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiAJfQogCSpwb3J0cHRyID0gbmV3cG9ydDsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc2lwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NpcC5jCmluZGV4IDcxZmMyNzMuLjYyMjNhYmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc2lwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zaXAuYwpAQCAtMjksMTggKzI5LDEyMyBAQAogI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gY3Rfc2lwX2hkcnNbXTsKK3N0cnVjdCBhZGRyX21hcCB7CisJc3RydWN0IHsKKwkJY2hhcgkJc3JjW3NpemVvZigibm5uLm5ubi5ubm4ubm5uOm5ubm5uIildOworCQljaGFyCQlkc3Rbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07CisJCXVuc2lnbmVkIGludAlzcmNsZW4sIHNyY2lwbGVuOworCQl1bnNpZ25lZCBpbnQJZHN0bGVuLCBkc3RpcGxlbjsKKwl9IGFkZHJbSVBfQ1RfRElSX01BWF07Cit9OworCitzdGF0aWMgdm9pZCBhZGRyX21hcF9pbml0KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBzdHJ1Y3QgYWRkcl9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0OworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CisJdW5zaWduZWQgaW50IG47CisKKwlmb3IgKGRpciA9IDA7IGRpciA8IElQX0NUX0RJUl9NQVg7IGRpcisrKSB7CisJCXQgPSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlOworCisJCW4gPSBzcHJpbnRmKG1hcC0+YWRkcltkaXJdLnNyYywgIiV1LiV1LiV1LiV1IiwKKwkJCSAgICBOSVBRVUFEKHQtPnNyYy5pcCkpOworCQltYXAtPmFkZHJbZGlyXS5zcmNpcGxlbiA9IG47CisJCW4gKz0gc3ByaW50ZihtYXAtPmFkZHJbZGlyXS5zcmMgKyBuLCAiOiV1IiwKKwkJCSAgICAgbnRvaHModC0+c3JjLnUudWRwLnBvcnQpKTsKKwkJbWFwLT5hZGRyW2Rpcl0uc3JjbGVuID0gbjsKKworCQluID0gc3ByaW50ZihtYXAtPmFkZHJbZGlyXS5kc3QsICIldS4ldS4ldS4ldSIsCisJCQkgICAgTklQUVVBRCh0LT5kc3QuaXApKTsKKwkJbWFwLT5hZGRyW2Rpcl0uZHN0aXBsZW4gPSBuOworCQluICs9IHNwcmludGYobWFwLT5hZGRyW2Rpcl0uZHN0ICsgbiwgIjoldSIsCisJCQkgICAgIG50b2hzKHQtPmRzdC51LnVkcC5wb3J0KSk7CisJCW1hcC0+YWRkcltkaXJdLmRzdGxlbiA9IG47CisJfQorfQorCitzdGF0aWMgaW50IG1hcF9zaXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsIGNvbnN0IGNoYXIgKipkcHRyLCBzaXplX3QgZGxlbiwKKwkJCWVudW0gc2lwX2hlYWRlcl9wb3MgcG9zLCBzdHJ1Y3QgYWRkcl9tYXAgKm1hcCkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVuc2lnbmVkIGludCBtYXRjaGxlbiwgbWF0Y2hvZmYsIGFkZHJsZW47CisJY2hhciAqYWRkcjsKKworCWlmIChjdF9zaXBfZ2V0X2luZm8oKmRwdHIsIGRsZW4sICZtYXRjaG9mZiwgJm1hdGNobGVuLCBwb3MpIDw9IDApCisJCXJldHVybiAxOworCisJaWYgKChtYXRjaGxlbiA9PSBtYXAtPmFkZHJbZGlyXS5zcmNpcGxlbiB8fAorCSAgICAgbWF0Y2hsZW4gPT0gbWFwLT5hZGRyW2Rpcl0uc3JjbGVuKSAmJgorCSAgICBtZW1jbXAoKmRwdHIgKyBtYXRjaG9mZiwgbWFwLT5hZGRyW2Rpcl0uc3JjLCBtYXRjaGxlbikgPT0gMCkgeworCQlhZGRyICAgID0gbWFwLT5hZGRyWyFkaXJdLmRzdDsKKwkJYWRkcmxlbiA9IG1hcC0+YWRkclshZGlyXS5kc3RsZW47CisJfSBlbHNlIGlmICgobWF0Y2hsZW4gPT0gbWFwLT5hZGRyW2Rpcl0uZHN0aXBsZW4gfHwKKwkJICAgIG1hdGNobGVuID09IG1hcC0+YWRkcltkaXJdLmRzdGxlbikgJiYKKwkJICAgbWVtY21wKCpkcHRyICsgbWF0Y2hvZmYsIG1hcC0+YWRkcltkaXJdLmRzdCwgbWF0Y2hsZW4pID09IDApIHsKKwkJYWRkciAgICA9IG1hcC0+YWRkclshZGlyXS5zcmM7CisJCWFkZHJsZW4gPSBtYXAtPmFkZHJbIWRpcl0uc3JjbGVuOworCX0gZWxzZQorCQlyZXR1cm4gMTsKKworCWlmICghaXBfbmF0X21hbmdsZV91ZHBfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hvZmYsIG1hdGNobGVuLCBhZGRyLCBhZGRybGVuKSkKKwkJcmV0dXJuIDA7CisJKmRwdHIgPSAoKnBza2IpLT5kYXRhICsgKCpwc2tiKS0+bmguaXBoLT5paGwqNCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlyZXR1cm4gMTsKKworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgIHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyKQoreworCWVudW0gc2lwX2hlYWRlcl9wb3MgcG9zOworCXN0cnVjdCBhZGRyX21hcCBtYXA7CisJaW50IGRhdGFvZmYsIGRhdGFsZW47CisKKwlkYXRhb2ZmID0gKCpwc2tiKS0+bmguaXBoLT5paGwqNCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlkYXRhbGVuID0gKCpwc2tiKS0+bGVuIC0gZGF0YW9mZjsKKwlpZiAoZGF0YWxlbiA8IHNpemVvZigiU0lQLzIuMCIpIC0gMSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlhZGRyX21hcF9pbml0KGN0LCAmbWFwKTsKKworCS8qIEJhc2ljIHJ1bGVzOiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiAqLworCWlmIChzdHJuY21wKCpkcHRyLCAiU0lQLzIuMCIsIHNpemVvZigiU0lQLzIuMCIpIC0gMSkgIT0gMCkgeworCQkvKiAxMC4yOiBDb25zdHJ1Y3RpbmcgdGhlIFJFR0lTVEVSIFJlcXVlc3Q6CisJCSAqCisJCSAqIFRoZSAidXNlcmluZm8iIGFuZCAiQCIgY29tcG9uZW50cyBvZiB0aGUgU0lQIFVSSSBNVVNUIE5PVAorCQkgKiBiZSBwcmVzZW50LgorCQkgKi8KKwkJaWYgKGRhdGFsZW4gPj0gc2l6ZW9mKCJSRUdJU1RFUiIpIC0gMSAmJgorCQkgICAgc3RybmNtcCgqZHB0ciwgIlJFR0lTVEVSIiwgc2l6ZW9mKCJSRUdJU1RFUiIpIC0gMSkgPT0gMCkKKwkJCXBvcyA9IFBPU19SRUdfUkVRX1VSSTsKKwkJZWxzZQorCQkJcG9zID0gUE9TX1JFUV9VUkk7CisKKwkJaWYgKCFtYXBfc2lwX2FkZHIocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwgZGF0YWxlbiwgcG9zLCAmbWFwKSkKKwkJCXJldHVybiBORl9EUk9QOworCX0KKworCWlmICghbWFwX3NpcF9hZGRyKHBza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19GUk9NLCAmbWFwKSB8fAorCSAgICAhbWFwX3NpcF9hZGRyKHBza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19UTywgJm1hcCkgfHwKKwkgICAgIW1hcF9zaXBfYWRkcihwc2tiLCBjdGluZm8sIGN0LCBkcHRyLCBkYXRhbGVuLCBQT1NfVklBLCAmbWFwKSB8fAorCSAgICAhbWFwX3NpcF9hZGRyKHBza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19DT05UQUNULCAmbWFwKSkKKwkJcmV0dXJuIE5GX0RST1A7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KIAogc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2lwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCiAJCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCiAJCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCiAJCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHNpemVfdCBkbGVuLAogCQkJCSAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZsZW4sCi0JCQkJICAgICAgc3RydWN0IHNpcF9oZWFkZXJfbmZvICpobmZvKQorCQkJCSAgICAgIGVudW0gc2lwX2hlYWRlcl9wb3MgcG9zKQogewogCXVuc2lnbmVkIGludCBtYXRjaGxlbiwgbWF0Y2hvZmY7CiAKLQlpZiAoY3Rfc2lwX2dldF9pbmZvKCpkcHRyLCBkbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwgaG5mbykgPD0gMCkKKwlpZiAoY3Rfc2lwX2dldF9pbmZvKCpkcHRyLCBkbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwgcG9zKSA8PSAwKQogCQlyZXR1cm4gMDsKIAogCWlmICghaXBfbmF0X21hbmdsZV91ZHBfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCkBAIC01Miw3NyArMTU3LDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2lwKHN0cnVjdCBza19idWZmICoqcHNrYiwKLQkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKLQkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0cikKLXsKLQllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwotCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uOm5ubm5uIildOwotCXVuc2lnbmVkIGludCBidWZmbGVuLCBkYXRhb2ZmOwotCV9fYmUzMiBpcDsKLQlfX2JlMTYgcG9ydDsKLQotCWRhdGFvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCi0JaXAgICA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwOwotCXBvcnQgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51LnVkcC5wb3J0OwotCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1OiV1IiwgTklQUVVBRChpcCksIG50b2hzKHBvcnQpKTsKLQotCS8qIHNob3J0IHBhY2tldCA/ICovCi0JaWYgKCgoKnBza2IpLT5sZW4gLSBkYXRhb2ZmKSA8IChzaXplb2YoIlNJUC8yLjAiKSAtIDEpKQotCQlyZXR1cm4gMDsKLQotCS8qIEJhc2ljIHJ1bGVzOiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiAqLwotCWlmIChtZW1jbXAoKmRwdHIsICJTSVAvMi4wIiwgc2l6ZW9mKCJTSVAvMi4wIikgLSAxKSA9PSAwKSB7Ci0JCWNvbnN0IGNoYXIgKmF1eDsKLQotCQlpZiAoKGN0aW5mbykgPCBJUF9DVF9JU19SRVBMWSkgewotCQkJbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwKLQkJCSAgICAgICAgICAgICAgICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCi0JCQkgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZsZW4sCi0JCQkgICAgICAgICAgICAgICAgICAmY3Rfc2lwX2hkcnNbUE9TX0NPTlRBQ1RdKTsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCBkcHRyLAotCQkJCSAgICAgICAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAotCQkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19WSUFdKSkKLQkJCXJldHVybiAwOwotCi0JCS8qIFRoaXMgc2VhcmNoIHNob3VsZCBpZ25vcmUgY2FzZSwgYnV0IGxhdGVyLi4gKi8KLQkJYXV4ID0gY3Rfc2lwX3NlYXJjaCgiQ1NlcToiLCAqZHB0ciwgc2l6ZW9mKCJDU2VxOiIpIC0gMSwKLQkJICAgICAgICAgICAgICAgICAgICAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmKTsKLQkJaWYgKCFhdXgpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAoIWN0X3NpcF9zZWFyY2goIlJFR0lTVEVSIiwgYXV4LCBzaXplb2YoIlJFR0lTVEVSIiksCi0JCSAgICBjdF9zaXBfbG5sZW4oYXV4LCAqZHB0ciArICgqcHNrYiktPmxlbiAtIGRhdGFvZmYpKSkKLQkJCXJldHVybiAxOwotCi0JCXJldHVybiBtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCBkcHRyLAotCQkJCQkgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwKLQkJCQkJICZjdF9zaXBfaGRyc1tQT1NfQ09OVEFDVF0pOwotCX0KLQlpZiAoKGN0aW5mbykgPCBJUF9DVF9JU19SRVBMWSkgewotCQlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsIGRwdHIsCi0JCQkJICAgICAgICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX1ZJQV0pKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogTWFuZ2xlIENvbnRhY3QgaWYgZXhpc3RzIG9ubHkuIC0gd2F0Y2ggdWRwX25hdF9tYW5nbGUoKSEgKi8KLQkJbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKLQkJICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX0NPTlRBQ1RdKTsKLQkJcmV0dXJuIDE7Ci0JfQotCS8qIFRoaXMgbWFuZ2xlIHJlcXVlc3RzIGhlYWRlcnMuICovCi0JcmV0dXJuIG1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsIGRwdHIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgIGN0X3NpcF9sbmxlbigqZHB0ciwKLQkJCQkgICAgICAgICAgICAgICpkcHRyICsgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiksCi0JICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19SRVFfSEVBREVSXSk7Ci19Ci0KIHN0YXRpYyBpbnQgbWFuZ2xlX2NvbnRlbnRfbGVuKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCSAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAogCQkJICAgICAgc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCkBAIC0xMzYsNyArMTcwLDcgQEAKIAogCS8qIEdldCBhY3R1YWwgU0RQIGxlbmdodCAqLwogCWlmIChjdF9zaXBfZ2V0X2luZm8oZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwgJm1hdGNob2ZmLAotCSAgICAgICAgICAgICAgICAgICAgJm1hdGNobGVuLCAmY3Rfc2lwX2hkcnNbUE9TX1NEUF9IRUFERVJdKSA+IDApIHsKKwkgICAgICAgICAgICAgICAgICAgICZtYXRjaGxlbiwgUE9TX1NEUF9IRUFERVIpID4gMCkgewogCiAJCS8qIHNpbmNlIGN0X3NpcF9nZXRfaW5mbygpIGdpdmUgdXMgYSBwb2ludGVyIHBhc3NpbmcgJ3Y9JwogCQkgICB3ZSBuZWVkIHRvIGFkZCAyIGJ5dGVzIGluIHRoaXMgY291bnQuICovCkBAIC0xNDQsNyArMTc4LDcgQEAKIAogCQkvKiBOb3csIHVwZGF0ZSBTRFAgbGVuZ2h0ICovCiAJCWlmIChjdF9zaXBfZ2V0X2luZm8oZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwgJm1hdGNob2ZmLAotCQkgICAgICAgICAgICAgICAgICAgICZtYXRjaGxlbiwgJmN0X3NpcF9oZHJzW1BPU19DT05URU5UXSkgPiAwKSB7CisJCSAgICAgICAgICAgICAgICAgICAgJm1hdGNobGVuLCBQT1NfQ09OVEVOVCkgPiAwKSB7CiAKIAkJCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgY19sZW4pOwogCkBAIC0xNzAsMTcgKzIwNCwxNyBAQAogCS8qIE1hbmdsZSBvd25lciBhbmQgY29udGFjdCBpbmZvLiAqLwogCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1LiV1LiV1LiV1IiwgTklQUVVBRChuZXdpcCkpOwogCWlmICghbWFuZ2xlX3NpcF9wYWNrZXQocHNrYiwgY3RpbmZvLCBjdCwgJmRwdHIsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCi0JICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIGJ1ZmZsZW4sICZjdF9zaXBfaGRyc1tQT1NfT1dORVJdKSkKKwkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgUE9TX09XTkVSKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsICZkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAotCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCAmY3Rfc2lwX2hkcnNbUE9TX0NPTk5FQ1RJT05dKSkKKwkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgUE9TX0NPTk5FQ1RJT04pKQogCQlyZXR1cm4gMDsKIAogCS8qIE1hbmdsZSBtZWRpYSBwb3J0LiAqLwogCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgcG9ydCk7CiAJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCAmZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKLQkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgJmN0X3NpcF9oZHJzW1BPU19NRURJQV0pKQorCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCBQT1NfTUVESUEpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4ocHNrYiwgY3RpbmZvLCBjdCwgZHB0cik7CkBAIC0yMzAsMTggKzI2NCwxNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCWlwX25hdF9zaXBfaG9vayA9IE5VTEw7Ci0JaXBfbmF0X3NkcF9ob29rID0gTlVMTDsKLQkvKiBNYWtlIHN1cmUgbm9vbmUgY2FsbHMgaXQsIG1lYW53aGlsZS4gKi8KLQlzeW5jaHJvbml6ZV9uZXQoKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X3NpcF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X3NkcF9ob29rLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaW5pdCh2b2lkKQogewotCUJVR19PTihpcF9uYXRfc2lwX2hvb2spOwotCUJVR19PTihpcF9uYXRfc2RwX2hvb2spOwotCWlwX25hdF9zaXBfaG9vayA9IGlwX25hdF9zaXA7Ci0JaXBfbmF0X3NkcF9ob29rID0gaXBfbmF0X3NkcDsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKGlwX25hdF9zaXBfaG9vaykpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2UoaXBfbmF0X3NkcF9ob29rKSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGlwX25hdF9zaXBfaG9vaywgaXBfbmF0X3NpcCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGlwX25hdF9zZHBfaG9vaywgaXBfbmF0X3NkcCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggMTY4ZjQ1Zi4uYzNkOWYzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogI2RlZmluZSBTTk1QX1BPUlQgMTYxCiAjZGVmaW5lIFNOTVBfVFJBUF9QT1JUIDE2MgotI2RlZmluZSBOT0NUMShuKSAodV9pbnQ4X3QgKSgobikgJiAweGZmKQorI2RlZmluZSBOT0NUMShuKSAoKih1OCAqKW4pCiAKIHN0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNubXBfbG9jayk7CkBAIC02MTMsNyArNjEzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYW5nbGVfYWRkcmVzcyh1bnNpZ25lZCBjaGFyICpiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvY3QxX21hcCAqbWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MTZfdCAqY2hlY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3VtMTYgKmNoZWNrKTsKIHN0cnVjdCBzbm1wX2NudgogewogCXVuc2lnbmVkIGludCBjbGFzczsKQEAgLTg3MywzOCArODczLDI0IEBACiAgKiBGYXN0IGNoZWNrc3VtIHVwZGF0ZSBmb3IgcG9zc2libHkgb2RkbHktYWxpZ25lZCBVRFAgYnl0ZSwgZnJvbSB0aGUKICAqIGNvZGUgZXhhbXBsZSBpbiB0aGUgZHJhZnQuCiAgKi8KLXN0YXRpYyB2b2lkIGZhc3RfY3N1bSh1bnNpZ25lZCBjaGFyICpjc3VtLAorc3RhdGljIHZvaWQgZmFzdF9jc3VtKF9fc3VtMTYgKmNzdW0sCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqb3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpucHRyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBvZGQpCisgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkKIHsKLQlsb25nIHgsIG9sZCwgbmV3OwotCQotCXggPSBjc3VtWzBdICogMjU2ICsgY3N1bVsxXTsKLQkKLQl4ID1+IHggJiAweEZGRkY7Ci0JCi0JaWYgKG9kZCkgb2xkID0gb3B0clswXSAqIDI1NjsKLQllbHNlIG9sZCA9IG9wdHJbMF07Ci0JCi0JeCAtPSBvbGQgJiAweEZGRkY7Ci0JaWYgKHggPD0gMCkgewotCQl4LS07Ci0JCXggJj0gMHhGRkZGOworCXVuc2lnbmVkIGNoYXIgc1s0XTsKKworCWlmIChvZmZzZXQgJiAxKSB7CisJCXNbMF0gPSBzWzJdID0gMDsKKwkJc1sxXSA9IH4qb3B0cjsKKwkJc1szXSA9ICpucHRyOworCX0gZWxzZSB7CisJCXNbMV0gPSBzWzNdID0gMDsKKwkJc1swXSA9IH4qb3B0cjsKKwkJc1syXSA9ICpucHRyOwogCX0KLQkKLQlpZiAob2RkKSBuZXcgPSBucHRyWzBdICogMjU2OwotCWVsc2UgbmV3ID0gbnB0clswXTsKLQkKLQl4ICs9IG5ldyAmIDB4RkZGRjsKLQlpZiAoeCAmIDB4MTAwMDApIHsKLQkJeCsrOwotCQl4ICY9IDB4RkZGRjsKLQl9Ci0JCi0JeCA9fiB4ICYgMHhGRkZGOwotCWNzdW1bMF0gPSB4IC8gMjU2OwotCWNzdW1bMV0gPSB4ICYgMHhGRjsKKworCSpjc3VtID0gY3N1bV9mb2xkKGNzdW1fcGFydGlhbChzLCA0LCB+Y3N1bV91bmZvbGQoKmNzdW0pKSk7CiB9CiAKIC8qIApAQCAtOTE1LDkgKzkwMSw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbWFuZ2xlX2FkZHJlc3ModW5zaWduZWQgY2hhciAqYmVnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2N0MV9tYXAgKm1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDE2X3QgKmNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3VtMTYgKmNoZWNrKQogewotCWlmIChtYXAtPmZyb20gPT0gTk9DVDEoKmFkZHIpKSB7CisJaWYgKG1hcC0+ZnJvbSA9PSBOT0NUMShhZGRyKSkgewogCQl1X2ludDMyX3Qgb2xkOwogCQkKIAkJaWYgKGRlYnVnKQpAQCAtOTI3LDExICs5MTMsOCBAQAogCQkKIAkJLyogVXBkYXRlIFVEUCBjaGVja3N1bSBpZiBiZWluZyB1c2VkICovCiAJCWlmICgqY2hlY2spIHsKLQkJCXVuc2lnbmVkIGNoYXIgb2RkID0gISgoYWRkciAtIGJlZ2luKSAlIDIpOwotCQkJCi0JCQlmYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKiljaGVjaywKLQkJCSAgICAgICAgICAmbWFwLT5mcm9tLCAmbWFwLT50bywgb2RkKTsKLQkJCSAgICAgICAgICAKKwkJCWZhc3RfY3N1bShjaGVjaywKKwkJCSAgICAgICAgICAmbWFwLT5mcm9tLCAmbWFwLT50bywgYWRkciAtIGJlZ2luKTsKIAkJfQogCQkKIAkJaWYgKGRlYnVnKQpAQCAtOTQzLDcgKzkyNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbm1wX3RyYXBfZGVjb2RlKHN0cnVjdCBhc24xX2N0eCAqY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF92MV90cmFwICp0cmFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2N0MV9tYXAgKm1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90ICpjaGVjaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdW0xNiAqY2hlY2spCiB7CiAJdW5zaWduZWQgaW50IGNscywgY29uLCB0YWcsIGxlbjsKIAl1bnNpZ25lZCBjaGFyICplbmQ7CkBAIC0xMDM3LDcgKzEwMjAsNyBAQAogc3RhdGljIGludCBzbm1wX3BhcnNlX21hbmdsZSh1bnNpZ25lZCBjaGFyICptc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MTZfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvY3QxX21hcCAqbWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDE2X3QgKmNoZWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N1bTE2ICpjaGVjaykKIHsKIAl1bnNpZ25lZCBjaGFyICplb2MsICplbmQ7CiAJdW5zaWduZWQgaW50IGNscywgY29uLCB0YWcsIHZlcnMsIHBkdXR5cGU7CkBAIC0xMjIzLDEyICsxMjA2LDEyIEBACiAJICovCiAJaWYgKGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpIHsKIAkJLyogU05BVCB0cmFwcyAqLwotCQltYXAuZnJvbSA9IE5PQ1QxKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMuaXApOwotCQltYXAudG8gPSBOT0NUMShjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LmlwKTsKKwkJbWFwLmZyb20gPSBOT0NUMSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5pcCk7CisJCW1hcC50byA9IE5PQ1QxKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LmlwKTsKIAl9IGVsc2UgewogCQkvKiBETkFUIHJlcGxpZXMgKi8KLQkJbWFwLmZyb20gPSBOT0NUMShjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmlwKTsKLQkJbWFwLnRvID0gTk9DVDEoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5pcCk7CisJCW1hcC5mcm9tID0gTk9DVDEoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5zcmMuaXApOworCQltYXAudG8gPSBOT0NUMSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5pcCk7CiAJfQogCQogCWlmIChtYXAuZnJvbSA9PSBtYXAudG8pCkBAIC0xMjk0LDExICsxMjc3LDExIEBACiAJLmhlbHAgPSBoZWxwLAogCS5uYW1lID0gInNubXAiLAogCi0JLnR1cGxlID0geyAuc3JjID0geyAudSA9IHsgX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpIH0gfSwKLQkJICAgLmRzdCA9IHsgLnByb3RvbnVtID0gSVBQUk9UT19VRFAgfSwKKwkudHVwbGUgPSB7LnNyYyA9IHsudSA9IHsudWRwID0gey5wb3J0ID0gX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpfX19LAorCQkgIC5kc3QgPSB7LnByb3RvbnVtID0gSVBQUk9UT19VRFB9LAogCX0sCi0JLm1hc2sgPSB7IC5zcmMgPSB7IC51ID0geyAweEZGRkYgfSB9LAotCQkgLmRzdCA9IHsgLnByb3RvbnVtID0gMHhGRiB9LAorCS5tYXNrID0gey5zcmMgPSB7LnUgPSB7MHhGRkZGfX0sCisJCSAuZHN0ID0gey5wcm90b251bSA9IDB4RkZ9LAogCX0sCiB9OwogCkBAIC0xMzA5LDExICsxMjkyLDExIEBACiAJLmhlbHAgPSBoZWxwLAogCS5uYW1lID0gInNubXBfdHJhcCIsCiAKLQkudHVwbGUgPSB7IC5zcmMgPSB7IC51ID0geyBfX2NvbnN0YW50X2h0b25zKFNOTVBfVFJBUF9QT1JUKSB9IH0sCi0JCSAgIC5kc3QgPSB7IC5wcm90b251bSA9IElQUFJPVE9fVURQIH0sCisJLnR1cGxlID0gey5zcmMgPSB7LnUgPSB7LnVkcCA9IHsucG9ydCA9IF9fY29uc3RhbnRfaHRvbnMoU05NUF9UUkFQX1BPUlQpfX19LAorCQkgIC5kc3QgPSB7LnByb3RvbnVtID0gSVBQUk9UT19VRFB9LAogCX0sCi0JLm1hc2sgPSB7IC5zcmMgPSB7IC51ID0geyAweEZGRkYgfSB9LAotCQkgLmRzdCA9IHsgLnByb3RvbnVtID0gMHhGRiB9LAorCS5tYXNrID0gey5zcmMgPSB7LnUgPSB7MHhGRkZGfX0sCisJCSAuZHN0ID0gey5wcm90b251bSA9IDB4RkZ9LAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IGQ4NWQyZGUuLmFkNjYzMjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCkBAIC00NCwxMiArNDQsNiBAQAogI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgSE9PS05BTUUoaG9va251bSkgKChob29rbnVtKSA9PSBORl9JUF9QT1NUX1JPVVRJTkcgPyAiUE9TVF9ST1VUSU5HIiAgXAotCQkJICAgOiAoKGhvb2tudW0pID09IE5GX0lQX1BSRV9ST1VUSU5HID8gIlBSRV9ST1VUSU5HIiBcCi0JCQkgICAgICA6ICgoaG9va251bSkgPT0gTkZfSVBfTE9DQUxfT1VUID8gIkxPQ0FMX09VVCIgIFwKLQkJCSAgICAgICAgIDogKChob29rbnVtKSA9PSBORl9JUF9MT0NBTF9JTiA/ICJMT0NBTF9JTiIgIFwKLQkJCQkgICAgOiAiKkVSUk9SKiIpKSkKLQogI2lmZGVmIENPTkZJR19YRlJNCiBzdGF0aWMgdm9pZCBuYXRfZGVjb2RlX3Nlc3Npb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpICpmbCkKIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfdGZ0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF90ZnRwLmMKaW5kZXggOTRhNzgwMS4uNjA0NzkzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF90ZnRwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF90ZnRwLmMKQEAgLTU1LDE1ICs1NSwxNCBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXBfbmF0X3RmdHBfZmluaSh2b2lkKQogewotCWlwX25hdF90ZnRwX2hvb2sgPSBOVUxMOwotCS8qIE1ha2Ugc3VyZSBub29uZSBjYWxscyBpdCwgbWVhbndoaWxlLiAqLwotCXN5bmNocm9uaXplX25ldCgpOworCXJjdV9hc3NpZ25fcG9pbnRlcihpcF9uYXRfdGZ0cF9ob29rLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaXBfbmF0X3RmdHBfaW5pdCh2b2lkKQogewotCUJVR19PTihpcF9uYXRfdGZ0cF9ob29rKTsKLQlpcF9uYXRfdGZ0cF9ob29rID0gaGVscDsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKGlwX25hdF90ZnRwX2hvb2spKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaXBfbmF0X3RmdHBfaG9vaywgaGVscCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggOTc1NTZjYy4uY2Q1MjBkZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCXBtc2ctPmRhdGFfbGVuICAgICAgICA9IGRhdGFfbGVuOwogCXBtc2ctPnRpbWVzdGFtcF9zZWMgICA9IGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfc2VjOwogCXBtc2ctPnRpbWVzdGFtcF91c2VjICA9IGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfdXNlYzsKLQlwbXNnLT5tYXJrICAgICAgICAgICAgPSBlbnRyeS0+c2tiLT5uZm1hcms7CisJcG1zZy0+bWFyayAgICAgICAgICAgID0gZW50cnktPnNrYi0+bWFyazsKIAlwbXNnLT5ob29rICAgICAgICAgICAgPSBlbnRyeS0+aW5mby0+aG9vazsKIAlwbXNnLT5od19wcm90b2NvbCAgICAgPSBlbnRyeS0+c2tiLT5wcm90b2NvbDsKIAkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCmluZGV4IDdhMjlkNmUuLjA5ODM2NTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwpAQCAtNDAsOCArNDAsNiBAQAogI2RlZmluZSBERUJVR1AKICNlbmRpZgogCi0jZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImlwdGFibGVzIHRhcmdldCBmb3IgQ0xVU1RFUklQIik7CkBAIC0xMjMsNyArMTIxLDYgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAKLQlBU1NFUlRfUkVBRF9MT0NLKCZjbHVzdGVyaXBfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwb3MsICZjbHVzdGVyaXBfY29uZmlncykgewogCQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IGxpc3RfZW50cnkocG9zLCAKIAkJCQkJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcsIGxpc3QpOwpAQCAtMTcwLDcgKzE2Nyw2IEBACiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwotCWNoYXIgYnVmZmVyWzE2XTsKIAogCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9BVE9NSUMpOwogCWlmICghYykKQEAgLTE4NywxMiArMTgzLDE3IEBACiAJYXRvbWljX3NldCgmYy0+ZW50cmllcywgMSk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCS8qIGNyZWF0ZSBwcm9jIGRpciBlbnRyeSAqLwotCXNwcmludGYoYnVmZmVyLCAiJXUuJXUuJXUuJXUiLCBOSVBRVUFEKGlwKSk7Ci0JYy0+cGRlID0gY3JlYXRlX3Byb2NfZW50cnkoYnVmZmVyLCBTX0lXVVNSfFNfSVJVU1IsIGNsdXN0ZXJpcF9wcm9jZGlyKTsKLQlpZiAoIWMtPnBkZSkgewotCQlrZnJlZShjKTsKLQkJcmV0dXJuIE5VTEw7CisJeworCQljaGFyIGJ1ZmZlclsxNl07CisKKwkJLyogY3JlYXRlIHByb2MgZGlyIGVudHJ5ICovCisJCXNwcmludGYoYnVmZmVyLCAiJXUuJXUuJXUuJXUiLCBOSVBRVUFEKGlwKSk7CisJCWMtPnBkZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KGJ1ZmZlciwgU19JV1VTUnxTX0lSVVNSLAorCQkJCQkgICBjbHVzdGVyaXBfcHJvY2Rpcik7CisJCWlmICghYy0+cGRlKSB7CisJCQlrZnJlZShjKTsKKwkJCXJldHVybiBOVUxMOworCQl9CiAJfQogCWMtPnBkZS0+cHJvY19mb3BzID0gJmNsdXN0ZXJpcF9wcm9jX2ZvcHM7CiAJYy0+cGRlLT5kYXRhID0gYzsKQEAgLTIwNSw2ICsyMDYsNyBAQAogCXJldHVybiBjOwogfQogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQKIGNsdXN0ZXJpcF9hZGRfbm9kZShzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYywgdV9pbnQxNl90IG5vZGVudW0pCiB7CkBAIC0yMzIsNiArMjM0LDcgQEAKIAogCXJldHVybiAxOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdV9pbnQzMl90CiBjbHVzdGVyaXBfaGFzaGZuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjb25maWcpCkBAIC03MzcsOCArNzQwLDEwIEBACiAJCUNMVVNURVJJUF9WRVJTSU9OKTsKIAlyZXR1cm4gMDsKIAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBjbGVhbnVwX2hvb2s6CiAJbmZfdW5yZWdpc3Rlcl9ob29rKCZjaXBfYXJwX29wcyk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIGNsZWFudXBfdGFyZ2V0OgogCWlwdF91bnJlZ2lzdGVyX3RhcmdldCgmY2x1c3RlcmlwX3RndCk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRUNOLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0VDTi5jCmluZGV4IDFhYTQ1MTcuLmI1NWQ2NzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRUNOLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9FQ04uYwpAQCAtMjgsMTcgKzI4LDE2IEBACiBzZXRfZWN0X2lwKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IGlwdF9FQ05faW5mbyAqZWluZm8pCiB7CiAJc3RydWN0IGlwaGRyICppcGggPSAoKnBza2IpLT5uaC5pcGg7Ci0JdV9pbnQxNl90IG9sZHRvczsKIAogCWlmICgoaXBoLT50b3MgJiBJUFRfRUNOX0lQX01BU0spICE9IChlaW5mby0+aXBfZWN0ICYgSVBUX0VDTl9JUF9NQVNLKSkgeworCQlfX3U4IG9sZHRvczsKIAkJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiAJCQlyZXR1cm4gMDsKIAkJaXBoID0gKCpwc2tiKS0+bmguaXBoOwogCQlvbGR0b3MgPSBpcGgtPnRvczsKIAkJaXBoLT50b3MgJj0gfklQVF9FQ05fSVBfTUFTSzsKIAkJaXBoLT50b3MgfD0gKGVpbmZvLT5pcF9lY3QgJiBJUFRfRUNOX0lQX01BU0spOwotCQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUoaHRvbnMob2xkdG9zKSBeIGh0b25zKDB4RkZGRiksCi0JCQkJCSAgICBodG9ucyhpcGgtPnRvcyksIGlwaC0+Y2hlY2spOworCQluZl9jc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhvbGR0b3MpLCBodG9ucyhpcGgtPnRvcykpOwogCX0gCiAJcmV0dXJuIDE7CiB9CkBAIC03MiwxMCArNzEsOCBAQAogCWlmIChlaW5mby0+b3BlcmF0aW9uICYgSVBUX0VDTl9PUF9TRVRfQ1dSKQogCQl0Y3BoLT5jd3IgPSBlaW5mby0+cHJvdG8udGNwLmN3cjsKIAotCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKCpwc2tiKSwKLQkJCQkJICAgb2xkdmFsIF4gaHRvbnMoMHhGRkZGKSwKLQkJCQkJICAgKChfX2JlMTYgKil0Y3BoKVs2XSwKLQkJCQkJICAgdGNwaC0+Y2hlY2ssIDApOworCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTIoJnRjcGgtPmNoZWNrLCAqcHNrYiwKKwkJCQlvbGR2YWwsICgoX19iZTE2ICopdGNwaClbNl0sIDApOwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwppbmRleCA3ZGM4MjBkLi5jOTZkZTE2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKQEAgLTE3MSwxMSArMTcxLDE1IEBACiAJCX0KIAkJYnJlYWs7CiAJfQotCWNhc2UgSVBQUk9UT19VRFA6IHsKKwljYXNlIElQUFJPVE9fVURQOgorCWNhc2UgSVBQUk9UT19VRFBMSVRFOiB7CiAJCXN0cnVjdCB1ZHBoZHIgX3VkcGgsICp1aDsKIAotCQkvKiBNYXggbGVuZ3RoOiAxMCAiUFJPVE89VURQICIgKi8KLQkJcHJpbnRrKCJQUk9UTz1VRFAgIik7CisJCWlmIChpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApCisJCQkvKiBNYXggbGVuZ3RoOiAxMCAiUFJPVE89VURQICIgICAgICovCisJCQlwcmludGsoIlBST1RPPVVEUCAiICk7CisJCWVsc2UJLyogTWF4IGxlbmd0aDogMTQgIlBST1RPPVVEUExJVEUgIiAqLworCQkJcHJpbnRrKCJQUk9UTz1VRFBMSVRFICIpOwogCiAJCWlmIChudG9ocyhpaC0+ZnJhZ19vZmYpICYgSVBfT0ZGU0VUKQogCQkJYnJlYWs7CkBAIC0zNDEsNiArMzQ1LDcgQEAKIAkvKiBJUDogICAgICA0MCs0Nis2KzExKzEyNyA9IDIzMCAqLwogCS8qIFRDUDogICAgIDEwK21heCgyNSwyMCszMCsxMys5KzMyKzExKzEyNykgPSAyNTIgKi8KIAkvKiBVRFA6ICAgICAxMCttYXgoMjUsMjApID0gMzUgKi8KKwkvKiBVRFBMSVRFOiAxNCttYXgoMjUsMjApID0gMzkgKi8KIAkvKiBJQ01QOiAgICAxMSttYXgoMjUsIDE4KzI1K21heCgxOSwxNCwyNCszK24rMTAsMytuKzEwKSkgPSA5MStuICovCiAJLyogRVNQOiAgICAgMTArbWF4KDI1KSsxNSA9IDUwICovCiAJLyogQUg6ICAgICAgOSttYXgoMjUpKzE1ID0gNDkgKi8KQEAgLTQyNSwxMyArNDMwLDggQEAKIAlsaS51LmxvZy5sZXZlbCA9IGxvZ2luZm8tPmxldmVsOwogCWxpLnUubG9nLmxvZ2ZsYWdzID0gbG9naW5mby0+bG9nZmxhZ3M7CiAKLQlpZiAobG9naW5mby0+bG9nZmxhZ3MgJiBJUFRfTE9HX05GTE9HKQotCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIGhvb2tudW0sICpwc2tiLCBpbiwgb3V0LCAmbGksCi0JCSAgICAgICAgICAgICAgIiVzIiwgbG9naW5mby0+cHJlZml4KTsKLQllbHNlCi0JCWlwdF9sb2dfcGFja2V0KFBGX0lORVQsIGhvb2tudW0sICpwc2tiLCBpbiwgb3V0LCAmbGksCi0JCSAgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7Ci0KKwlpcHRfbG9nX3BhY2tldChQRl9JTkVULCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAorCSAgICAgICAgICAgICAgIGxvZ2luZm8tPnByZWZpeCk7CiAJcmV0dXJuIElQVF9DT05USU5VRTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCAzZGJmY2ZhLi4yOGI5MjMzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtMiw3ICsyLDcgQEAKICAgIChkZXBlbmRpbmcgb24gcm91dGUpLiAqLwogCiAvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCi0gKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKiAoQykgMjAwMi0yMDA2IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yMCw3ICsyMCwxMSBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CisjZWxzZQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNjUsMjMgKzY5LDMzIEBACiAJCSAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAogCQkgIGNvbnN0IHZvaWQgKnRhcmdpbmZvKQogeworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQ7CisjZW5kaWYKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQljb25zdCBzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXI7CiAJc3RydWN0IGlwX25hdF9yYW5nZSBuZXdyYW5nZTsKKwljb25zdCBzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJX19iZTMyIG5ld3NyYzsKIAogCUlQX05GX0FTU0VSVChob29rbnVtID09IE5GX0lQX1BPU1RfUk9VVElORyk7CiAKIAljdCA9IGlwX2Nvbm50cmFja19nZXQoKnBza2IsICZjdGluZm8pOworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJbmF0ID0gbmZjdF9uYXQoY3QpOworI2VuZGlmCiAJSVBfTkZfQVNTRVJUKGN0ICYmIChjdGluZm8gPT0gSVBfQ1RfTkVXIHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVECiAJICAgICAgICAgICAgICAgICAgICB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKSk7CiAKIAkvKiBTb3VyY2UgYWRkcmVzcyBpcyAwLjAuMC4wIC0gbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0IHRoYXQgaXMKIAkgKiBwcm9iYWJseSBub3Qgc3VwcG9zZWQgdG8gYmUgbWFzcXVlcmFkZWQuCiAJICovCisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwlpZiAoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51My5pcCA9PSAwKQorI2Vsc2UKIAlpZiAoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5pcCA9PSAwKQorI2VuZGlmCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAltciA9IHRhcmdpbmZvOwpAQCAtOTMsNyArMTA3LDExIEBACiAJfQogCiAJd3JpdGVfbG9ja19iaCgmbWFzcV9sb2NrKTsKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorCW5hdC0+bWFzcV9pbmRleCA9IG91dC0+aWZpbmRleDsKKyNlbHNlCiAJY3QtPm5hdC5tYXNxX2luZGV4ID0gb3V0LT5pZmluZGV4OworI2VuZGlmCiAJd3JpdGVfdW5sb2NrX2JoKCZtYXNxX2xvY2spOwogCiAJLyogVHJhbnNmZXIgZnJvbSBvcmlnaW5hbCByYW5nZS4gKi8KQEAgLTEwOSwxMCArMTI3LDE3IEBACiBzdGF0aWMgaW5saW5lIGludAogZGV2aWNlX2NtcChzdHJ1Y3QgaXBfY29ubnRyYWNrICppLCB2b2lkICppZmluZGV4KQogeworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQgPSBuZmN0X25hdChpKTsKKyNlbmRpZgogCWludCByZXQ7CiAKIAlyZWFkX2xvY2tfYmgoJm1hc3FfbG9jayk7CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwlyZXQgPSAobmF0LT5tYXNxX2luZGV4ID09IChpbnQpKGxvbmcpaWZpbmRleCk7CisjZWxzZQogCXJldCA9IChpLT5uYXQubWFzcV9pbmRleCA9PSAoaW50KShsb25nKWlmaW5kZXgpOworI2VuZGlmCiAJcmVhZF91bmxvY2tfYmgoJm1hc3FfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ORVRNQVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTkVUTUFQLmMKaW5kZXggNThhODhmMi4uOTM5MGU5MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ORVRNQVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jCkBAIC0xNSw3ICsxNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CisjZWxzZQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmg+CisjZW5kaWYKIAogI2RlZmluZSBNT0RVTEVOQU1FICJORVRNQVAiCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMKaW5kZXggYzBkY2ZlOS4uNDYyZWNlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVESVJFQ1QuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIFJlZGlyZWN0LiAgU2ltcGxlIG1hcHBpbmcgd2hpY2ggYWx0ZXJzIGRzdCB0byBhIGxvY2FsIElQIGFkZHJlc3MuICovCiAvKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCi0gKiAoQykgMjAwMi0yMDA0IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKiAoQykgMjAwMi0yMDA2IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xOCw3ICsxOCwxMSBAQAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CisjZWxzZQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmg+CisjZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCmluZGV4IDI2NDc2M2EuLmYwMzE5ZTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJLyogVGhpcyBwYWNrZXQgd2lsbCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG90aGVyOiBjbGVhciBuZiBmaWVsZHMgKi8KIAluZl9yZXNldChuc2tiKTsKLQluc2tiLT5uZm1hcmsgPSAwOworCW5za2ItPm1hcmsgPSAwOwogCXNrYl9pbml0X3NlY21hcmsobnNrYik7CiAKIAl0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKikoKHVfaW50MzJfdCopbnNrYi0+bmguaXBoICsgbnNrYi0+bmguaXBoLT5paGwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9TQU1FLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYwppbmRleCBiMzhiMTMzLi4zZGNmMjk0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYwpAQCAtMzQsNyArMzQsMTEgQEAKICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2Vsc2UKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1NBTUUuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMTUyLDExICsxNTYsMTcgQEAKIAkgICBIZXJlIHdlIGNhbGN1bGF0ZSB0aGUgaW5kZXggaW4gc2FtZS0+aXBhcnJheSB3aGljaAogCSAgIGhvbGRzIHRoZSBpcGFkZHJlc3Mgd2Ugc2hvdWxkIHVzZSAqLwogCQorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJdG1waXAgPSBudG9obCh0LT5zcmMudTMuaXApOworCisJaWYgKCEoc2FtZS0+aW5mbyAmIElQVF9TQU1FX05PRFNUKSkKKwkJdG1waXAgKz0gbnRvaGwodC0+ZHN0LnUzLmlwKTsKKyNlbHNlCiAJdG1waXAgPSBudG9obCh0LT5zcmMuaXApOwogCiAJaWYgKCEoc2FtZS0+aW5mbyAmIElQVF9TQU1FX05PRFNUKSkKIAkJdG1waXAgKz0gbnRvaGwodC0+ZHN0LmlwKTsKLQkKKyNlbmRpZgogCWFpbmRleCA9IHRtcGlwICUgc2FtZS0+aXBudW07CiAKIAluZXdfaXAgPSBodG9ubChzYW1lLT5pcGFycmF5W2FpbmRleF0pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UQ1BNU1MuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVENQTVNTLmMKaW5kZXggMTA4YjZiNy4uOTNlYjVjMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UQ1BNU1MuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RDUE1TUy5jCkBAIC05NywxMCArOTcsOCBAQAogCQkJb3B0W2krMl0gPSAobmV3bXNzICYgMHhmZjAwKSA+PiA4OwogCQkJb3B0W2krM10gPSAobmV3bXNzICYgMHgwMGZmKTsKIAotCQkJdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwKLQkJCQkJCQkgICBodG9ucyhvbGRtc3MpXmh0b25zKDB4RkZGRiksCi0JCQkJCQkJICAgaHRvbnMobmV3bXNzKSwKLQkJCQkJCQkgICB0Y3BoLT5jaGVjaywgMCk7CisJCQluZl9wcm90b19jc3VtX3JlcGxhY2UyKCZ0Y3BoLT5jaGVjaywgKnBza2IsCisJCQkJCQlodG9ucyhvbGRtc3MpLCBodG9ucyhuZXdtc3MpLCAwKTsKIAkJCXJldHVybiBJUFRfQ09OVElOVUU7CiAJCX0KIAl9CkBAIC0xMjYsMjggKzEyNCwyMiBAQAogIAlvcHQgPSAodV9pbnQ4X3QgKil0Y3BoICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCW1lbW1vdmUob3B0ICsgVENQT0xFTl9NU1MsIG9wdCwgdGNwbGVuIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsKIAotCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCSAgIGh0b25zKHRjcGxlbikgXiBodG9ucygweEZGRkYpLAotCQkJCSAgICAgICAgICAgaHRvbnModGNwbGVuICsgVENQT0xFTl9NU1MpLAotCQkJCQkgICB0Y3BoLT5jaGVjaywgMSk7CisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlMigmdGNwaC0+Y2hlY2ssICpwc2tiLAorCQkJCWh0b25zKHRjcGxlbiksIGh0b25zKHRjcGxlbiArIFRDUE9MRU5fTVNTKSwgMSk7CiAJb3B0WzBdID0gVENQT1BUX01TUzsKIAlvcHRbMV0gPSBUQ1BPTEVOX01TUzsKIAlvcHRbMl0gPSAobmV3bXNzICYgMHhmZjAwKSA+PiA4OwogCW9wdFszXSA9IChuZXdtc3MgJiAweDAwZmYpOwogCi0JdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgaHRvbmwofjApLCAqKChfX2JlMzIgKilvcHQpLAotCQkJCQkgICB0Y3BoLT5jaGVjaywgMCk7CisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmdGNwaC0+Y2hlY2ssICpwc2tiLCAwLCAqKChfX2JlMzIgKilvcHQpLCAwKTsKIAogCW9sZHZhbCA9ICgoX19iZTE2ICopdGNwaClbNl07CiAJdGNwaC0+ZG9mZiArPSBUQ1BPTEVOX01TUy80OwotCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCSAgIG9sZHZhbCBeIGh0b25zKDB4RkZGRiksCi0JCQkJCSAgICgoX19iZTE2ICopdGNwaClbNl0sCi0JCQkJCSAgIHRjcGgtPmNoZWNrLCAwKTsKKwluZl9wcm90b19jc3VtX3JlcGxhY2UyKCZ0Y3BoLT5jaGVjaywgKnBza2IsCisJCQkJb2xkdmFsLCAoKF9fYmUxNiAqKXRjcGgpWzZdLCAwKTsKIAogCW5ld3RvdGxlbiA9IGh0b25zKG50b2hzKGlwaC0+dG90X2xlbikgKyBUQ1BPTEVOX01TUyk7Ci0JaXBoLT5jaGVjayA9IG5mX2NzdW1fdXBkYXRlKGlwaC0+dG90X2xlbiBeIGh0b25zKDB4RkZGRiksCi0JCQkJICAgIG5ld3RvdGxlbiwgaXBoLT5jaGVjayk7CisJbmZfY3N1bV9yZXBsYWNlMigmaXBoLT5jaGVjaywgaXBoLT50b3RfbGVuLCBuZXd0b3RsZW4pOwogCWlwaC0+dG90X2xlbiA9IG5ld3RvdGxlbjsKIAlyZXR1cm4gSVBUX0NPTlRJTlVFOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UT1MuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVE9TLmMKaW5kZXggODNiODBiMy4uMThlNzRhYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UT1MuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RPUy5jCkBAIC0zMCwxNiArMzAsMTUgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X3Rvc190YXJnZXRfaW5mbyAqdG9zaW5mbyA9IHRhcmdpbmZvOwogCXN0cnVjdCBpcGhkciAqaXBoID0gKCpwc2tiKS0+bmguaXBoOwotCXVfaW50MTZfdCBvbGR0b3M7CiAKIAlpZiAoKGlwaC0+dG9zICYgSVBUT1NfVE9TX01BU0spICE9IHRvc2luZm8tPnRvcykgeworCQlfX3U4IG9sZHRvczsKIAkJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCiAJCQlyZXR1cm4gTkZfRFJPUDsKIAkJaXBoID0gKCpwc2tiKS0+bmguaXBoOwogCQlvbGR0b3MgPSBpcGgtPnRvczsKIAkJaXBoLT50b3MgPSAoaXBoLT50b3MgJiBJUFRPU19QUkVDX01BU0spIHwgdG9zaW5mby0+dG9zOwotCQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUoaHRvbnMob2xkdG9zKSBeIGh0b25zKDB4RkZGRiksCi0JCQkJCSAgICBodG9ucyhpcGgtPnRvcyksIGlwaC0+Y2hlY2spOworCQluZl9jc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhvbGR0b3MpLCBodG9ucyhpcGgtPnRvcykpOwogCX0KIAlyZXR1cm4gSVBUX0NPTlRJTlVFOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMKaW5kZXggYWM5NTE3ZC4uZmZmZTVjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jCkBAIC01NCw5ICs1NCw4IEBACiAJfQogCiAJaWYgKG5ld190dGwgIT0gaXBoLT50dGwpIHsKLQkJaXBoLT5jaGVjayA9IG5mX2NzdW1fdXBkYXRlKGh0b25zKChpcGgtPnR0bCA8PCA4KSkgXiBodG9ucygweEZGRkYpLAotCQkJCQkgICAgaHRvbnMobmV3X3R0bCA8PCA4KSwKLQkJCQkJICAgIGlwaC0+Y2hlY2spOworCQluZl9jc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhpcGgtPnR0bCA8PCA4KSwKKwkJCQkJICAgICAgaHRvbnMobmV3X3R0bCA8PCA4KSk7CiAJCWlwaC0+dHRsID0gbmV3X3R0bDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKaW5kZXggMmIxMDRlYS4uZGJkMzQ3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCXBtLT5kYXRhX2xlbiA9IGNvcHlfbGVuOwogCXBtLT50aW1lc3RhbXBfc2VjID0gc2tiLT50c3RhbXAub2ZmX3NlYzsKIAlwbS0+dGltZXN0YW1wX3VzZWMgPSBza2ItPnRzdGFtcC5vZmZfdXNlYzsKLQlwbS0+bWFyayA9IHNrYi0+bmZtYXJrOworCXBtLT5tYXJrID0gc2tiLT5tYXJrOwogCXBtLT5ob29rID0gaG9va251bTsKIAlpZiAocHJlZml4ICE9IE5VTEwpCiAJCXN0cm5jcHkocG0tPnByZWZpeCwgcHJlZml4LCBzaXplb2YocG0tPnByZWZpeCkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzY2NkYmYuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDczMyArMCwwIEBACi0vKiBpcHRhYmxlcyBtYXRjaCBleHRlbnNpb24gdG8gbGltaXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHBlciBzZWNvbmQKLSAqIHNlcGVyYXRlbHkgZm9yIGVhY2ggaGFzaGJ1Y2tldCAoc291cmNlaXAvc291cmNlcG9ydC9kc3RpcC9kc3Rwb3J0KQotICoKLSAqIChDKSAyMDAzLTIwMDQgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogJElkOiBpcHRfaGFzaGxpbWl0LmMgMzI0NCAyMDA0LTEwLTIwIDE2OjI0OjI5WiBsYWZvcmdlQG5ldGZpbHRlci5vcmcgJAotICoKLSAqIERldmVsb3BtZW50IG9mIHRoaXMgY29kZSB3YXMgZnVuZGVkIGJ5IEFzdGFybyBBRywgaHR0cDovL3d3dy5hc3Rhcm8uY29tLwotICoKLSAqIGJhc2VkIG9uIGlwdF9saW1pdC5jIGJ5OgotICogSuly9G1lIGRlIFZpdmllCTxkZXZpdmllQGluZm8uZW5zZXJiLnUtYm9yZGVhdXguZnI+Ci0gKiBIZXJ26SBFeWNoZW5uZQk8ZXljaGVubmVAaW5mby5lbnNlcmIudS1ib3JkZWF1eC5mcj4KLSAqIFJ1c3R5IFJ1c3NlbGwJPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4KLSAqCi0gKiBUaGUgZ2VuZXJhbCBpZGVhIGlzIHRvIGNyZWF0ZSBhIGhhc2ggdGFibGUgZm9yIGV2ZXJ5IGRzdGlwIGFuZCBoYXZlIGEKLSAqIHNlcGVyYXRlIGxpbWl0IGNvdW50ZXIgcGVyIHR1cGxlLiAgVGhpcyB3YXkgeW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnbGltaXQKLSAqIHRoZSBudW1iZXIgb2Ygc3luIHBhY2tldHMgZm9yIGVhY2ggb2YgbXkgaW50ZXJuYWwgYWRkcmVzc2VzLgotICoKLSAqIElkZWFsbHkgdGhpcyB3b3VsZCBqdXN0IGJlIGltcGxlbWVudGVkIGFzIGEgZ2VuZXJhbCAnaGFzaCcgbWF0Y2gsIHdoaWNoIHdvdWxkCi0gKiBhbGxvdyB1cyB0byBhdHRhY2ggYW55IGlwdGFibGVzIHRhcmdldCB0byBpdCdzIGhhc2ggYnVja2V0cy4gIEJ1dCB0aGlzIGlzCi0gKiBub3QgcG9zc2libGUgaW4gdGhlIGN1cnJlbnQgaXB0YWJsZXMgYXJjaGl0ZWN0dXJlLiAgQXMgYWx3YXlzLCBwa3R0YWJsZXMgZm9yCi0gKiAyLjcueCB3aWxsIGhlbHAgOykKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgvamhhc2guaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaD4KLQotLyogRklYTUU6IHRoaXMgaXMganVzdCBmb3IgSVBfTkZfQVNTRVJSVCAqLwotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJpcHRhYmxlcyBtYXRjaCBmb3IgbGltaXRpbmcgcGVyIGhhc2gtYnVja2V0Iik7Ci0KLS8qIG5lZWQgdG8gZGVjbGFyZSB0aGlzIGF0IHRoZSB0b3AgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhhc2hsaW1pdF9wcm9jZGlyOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGxfZmlsZV9vcHM7Ci0KLS8qIGhhc2ggdGFibGUgY3JhcCAqLwotCi1zdHJ1Y3QgZHN0aGFzaF9kc3QgewotCV9fYmUzMiBzcmNfaXA7Ci0JX19iZTMyIGRzdF9pcDsKLQkvKiBwb3J0cyBoYXZlIHRvIGJlIGNvbnNlY3V0aXZlICEhISAqLwotCV9fYmUxNiBzcmNfcG9ydDsKLQlfX2JlMTYgZHN0X3BvcnQ7Ci19OwotCi1zdHJ1Y3QgZHN0aGFzaF9lbnQgewotCS8qIHN0YXRpYyAvIHJlYWQtb25seSBwYXJ0cyBpbiB0aGUgYmVnaW5uaW5nICovCi0Jc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKLQlzdHJ1Y3QgZHN0aGFzaF9kc3QgZHN0OwotCi0JLyogbW9kaWZpZWQgc3RydWN0dXJlIG1lbWJlcnMgaW4gdGhlIGVuZCAqLwotCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsJCS8qIHByZWNhbGN1bGF0ZWQgZXhwaXJ5IHRpbWUgKi8KLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIHByZXY7CS8qIGxhc3QgbW9kaWZpY2F0aW9uICovCi0JCXVfaW50MzJfdCBjcmVkaXQ7Ci0JCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OwotCX0gcmF0ZWluZm87Ci19OwotCi1zdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgewotCXN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CQkvKiBnbG9iYWwgbGlzdCBvZiBhbGwgaHRhYmxlcyAqLwotCWF0b21pY190IHVzZTsKLQotCXN0cnVjdCBoYXNobGltaXRfY2ZnIGNmZzsJLyogY29uZmlnICovCi0KLQkvKiB1c2VkIGludGVybmFsbHkgKi8KLQlzcGlubG9ja190IGxvY2s7CQkvKiBsb2NrIGZvciBsaXN0X2hlYWQgKi8KLQl1X2ludDMyX3Qgcm5kOwkJCS8qIHJhbmRvbSBzZWVkIGZvciBoYXNoICovCi0JaW50IHJuZF9pbml0aWFsaXplZDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLyogdGltZXIgZm9yIGdjICovCi0JYXRvbWljX3QgY291bnQ7CQkJLyogbnVtYmVyIGVudHJpZXMgaW4gdGFibGUgKi8KLQotCS8qIHNlcV9maWxlIHN0dWZmICovCi0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7Ci0KLQlzdHJ1Y3QgaGxpc3RfaGVhZCBoYXNoWzBdOwkvKiBoYXNodGFibGUgaXRzZWxmICovCi19OwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhhc2hsaW1pdF9sb2NrKTsJLyogcHJvdGVjdHMgaHRhYmxlcyBsaXN0ICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGhsaW1pdF9tdXRleCk7CS8qIGFkZGl0aW9uYWwgY2hlY2tlbnRyeSBwcm90ZWN0aW9uICovCi1zdGF0aWMgSExJU1RfSEVBRChoYXNobGltaXRfaHRhYmxlcyk7Ci1zdGF0aWMga21lbV9jYWNoZV90ICpoYXNobGltaXRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRzdF9jbXAoY29uc3Qgc3RydWN0IGRzdGhhc2hfZW50ICplbnQsIHN0cnVjdCBkc3RoYXNoX2RzdCAqYikKLXsKLQlyZXR1cm4gKGVudC0+ZHN0LmRzdF9pcCA9PSBiLT5kc3RfaXAgCi0JCSYmIGVudC0+ZHN0LmRzdF9wb3J0ID09IGItPmRzdF9wb3J0Ci0JCSYmIGVudC0+ZHN0LnNyY19wb3J0ID09IGItPnNyY19wb3J0Ci0JCSYmIGVudC0+ZHN0LnNyY19pcCA9PSBiLT5zcmNfaXApOwotfQotCi1zdGF0aWMgaW5saW5lIHVfaW50MzJfdAotaGFzaF9kc3QoY29uc3Qgc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpodCwgY29uc3Qgc3RydWN0IGRzdGhhc2hfZHN0ICpkc3QpCi17Ci0JcmV0dXJuIChqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWRzdC0+ZHN0X2lwLAotCQkJICAgICgoX19mb3JjZSB1MzIpZHN0LT5kc3RfcG9ydDw8MTYgfAotCQkJICAgICAoX19mb3JjZSB1MzIpZHN0LT5zcmNfcG9ydCksCi0JCQkgICAgIChfX2ZvcmNlIHUzMilkc3QtPnNyY19pcCwgaHQtPnJuZCkgJSBodC0+Y2ZnLnNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkc3RoYXNoX2VudCAqCi1fX2RzdGhhc2hfZmluZChjb25zdCBzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmh0LCBzdHJ1Y3QgZHN0aGFzaF9kc3QgKmRzdCkKLXsKLQlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmVudDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwotCXVfaW50MzJfdCBoYXNoID0gaGFzaF9kc3QoaHQsIGRzdCk7Ci0KLQlpZiAoIWhsaXN0X2VtcHR5KCZodC0+aGFzaFtoYXNoXSkpCi0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudCwgcG9zLCAmaHQtPmhhc2hbaGFzaF0sIG5vZGUpIHsKLQkJCWlmIChkc3RfY21wKGVudCwgZHN0KSkgewotCQkJCXJldHVybiBlbnQ7Ci0JCQl9Ci0JCX0KLQkKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogYWxsb2NhdGUgZHN0aGFzaF9lbnQsIGluaXRpYWxpemUgZHN0LCBwdXQgaW4gaHRhYmxlIGFuZCBsb2NrIGl0ICovCi1zdGF0aWMgc3RydWN0IGRzdGhhc2hfZW50ICoKLV9fZHN0aGFzaF9hbGxvY19pbml0KHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsIHN0cnVjdCBkc3RoYXNoX2RzdCAqZHN0KQotewotCXN0cnVjdCBkc3RoYXNoX2VudCAqZW50OwotCi0JLyogaW5pdGlhbGl6ZSBoYXNoIHdpdGggcmFuZG9tIHZhbCBhdCB0aGUgdGltZSB3ZSBhbGxvY2F0ZQotCSAqIHRoZSBmaXJzdCBoYXNodGFibGUgZW50cnkgKi8KLQlpZiAoIWh0LT5ybmRfaW5pdGlhbGl6ZWQpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgNCk7Ci0JCWh0LT5ybmRfaW5pdGlhbGl6ZWQgPSAxOwotCX0KLQotCWlmIChodC0+Y2ZnLm1heCAmJgotCSAgICBhdG9taWNfcmVhZCgmaHQtPmNvdW50KSA+PSBodC0+Y2ZnLm1heCkgewotCQkvKiBGSVhNRTogZG8gc29tZXRoaW5nLiBxdWVzdGlvbiBpcyB3aGF0Li4gKi8KLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgCi0JCQkJImlwdF9oYXNobGltaXQ6IG1heCBjb3VudCBvZiAldSByZWFjaGVkXG4iLCAKLQkJCQlodC0+Y2ZnLm1heCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWVudCA9IGttZW1fY2FjaGVfYWxsb2MoaGFzaGxpbWl0X2NhY2hlcCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFlbnQpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAKLQkJCQkiaXB0X2hhc2hsaW1pdDogY2FuJ3QgYWxsb2NhdGUgZHN0aGFzaF9lbnRcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlhdG9taWNfaW5jKCZodC0+Y291bnQpOwotCi0JZW50LT5kc3QuZHN0X2lwID0gZHN0LT5kc3RfaXA7Ci0JZW50LT5kc3QuZHN0X3BvcnQgPSBkc3QtPmRzdF9wb3J0OwotCWVudC0+ZHN0LnNyY19pcCA9IGRzdC0+c3JjX2lwOwotCWVudC0+ZHN0LnNyY19wb3J0ID0gZHN0LT5zcmNfcG9ydDsKLQotCWhsaXN0X2FkZF9oZWFkKCZlbnQtPm5vZGUsICZodC0+aGFzaFtoYXNoX2RzdChodCwgZHN0KV0pOwotCi0JcmV0dXJuIGVudDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIAotX19kc3RoYXNoX2ZyZWUoc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpodCwgc3RydWN0IGRzdGhhc2hfZW50ICplbnQpCi17Ci0JaGxpc3RfZGVsKCZlbnQtPm5vZGUpOwotCWttZW1fY2FjaGVfZnJlZShoYXNobGltaXRfY2FjaGVwLCBlbnQpOwotCWF0b21pY19kZWMoJmh0LT5jb3VudCk7Ci19Ci1zdGF0aWMgdm9pZCBodGFibGVfZ2ModW5zaWduZWQgbG9uZyBodGxvbmcpOwotCi1zdGF0aWMgaW50IGh0YWJsZV9jcmVhdGUoc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqbWluZm8pCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IHNpemU7Ci0Jc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpoaW5mbzsKLQotCWlmIChtaW5mby0+Y2ZnLnNpemUpCi0JCXNpemUgPSBtaW5mby0+Y2ZnLnNpemU7Ci0JZWxzZSB7Ci0JCXNpemUgPSAoKChudW1fcGh5c3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQpCi0JCQkgLyBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkpOwotCQlpZiAobnVtX3BoeXNwYWdlcyA+ICgxMDI0ICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpKQotCQkJc2l6ZSA9IDgxOTI7Ci0JCWlmIChzaXplIDwgMTYpCi0JCQlzaXplID0gMTY7Ci0JfQotCS8qIEZJWE1FOiBkb24ndCB1c2Ugdm1hbGxvYygpIGhlcmUgb3IgYW55d2hlcmUgZWxzZSAtSFcgKi8KLQloaW5mbyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSkKLQkJCSsgKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIHNpemUpKTsKLQlpZiAoIWhpbmZvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXB0X2hhc2hsaW1pdDogVW5hYmxlIHRvIGNyZWF0ZSBoYXNodGFibGVcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCW1pbmZvLT5oaW5mbyA9IGhpbmZvOwotCi0JLyogY29weSBtYXRjaCBjb25maWcgaW50byBoYXNodGFibGUgY29uZmlnICovCi0JbWVtY3B5KCZoaW5mby0+Y2ZnLCAmbWluZm8tPmNmZywgc2l6ZW9mKGhpbmZvLT5jZmcpKTsKLQloaW5mby0+Y2ZnLnNpemUgPSBzaXplOwotCWlmICghaGluZm8tPmNmZy5tYXgpCi0JCWhpbmZvLT5jZmcubWF4ID0gOCAqIGhpbmZvLT5jZmcuc2l6ZTsKLQllbHNlIGlmIChoaW5mby0+Y2ZnLm1heCA8IGhpbmZvLT5jZmcuc2l6ZSkKLQkJaGluZm8tPmNmZy5tYXggPSBoaW5mby0+Y2ZnLnNpemU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaGluZm8tPmNmZy5zaXplOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmaGluZm8tPmhhc2hbaV0pOwotCi0JYXRvbWljX3NldCgmaGluZm8tPmNvdW50LCAwKTsKLQlhdG9taWNfc2V0KCZoaW5mby0+dXNlLCAxKTsKLQloaW5mby0+cm5kX2luaXRpYWxpemVkID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmaGluZm8tPmxvY2spOwotCWhpbmZvLT5wZGUgPSBjcmVhdGVfcHJvY19lbnRyeShtaW5mby0+bmFtZSwgMCwgaGFzaGxpbWl0X3Byb2NkaXIpOwotCWlmICghaGluZm8tPnBkZSkgewotCQl2ZnJlZShoaW5mbyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaGluZm8tPnBkZS0+cHJvY19mb3BzID0gJmRsX2ZpbGVfb3BzOwotCWhpbmZvLT5wZGUtPmRhdGEgPSBoaW5mbzsKLQotCWluaXRfdGltZXIoJmhpbmZvLT50aW1lcik7Ci0JaGluZm8tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmdjX2ludGVydmFsKTsKLQloaW5mby0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nICloaW5mbzsKLQloaW5mby0+dGltZXIuZnVuY3Rpb24gPSBodGFibGVfZ2M7Ci0JYWRkX3RpbWVyKCZoaW5mby0+dGltZXIpOwotCi0Jc3Bpbl9sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7Ci0JaGxpc3RfYWRkX2hlYWQoJmhpbmZvLT5ub2RlLCAmaGFzaGxpbWl0X2h0YWJsZXMpOwotCXNwaW5fdW5sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzZWxlY3RfYWxsKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsIHN0cnVjdCBkc3RoYXNoX2VudCAqaGUpCi17Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgc2VsZWN0X2djKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsIHN0cnVjdCBkc3RoYXNoX2VudCAqaGUpCi17Ci0JcmV0dXJuIChqaWZmaWVzID49IGhlLT5leHBpcmVzKTsKLX0KLQotc3RhdGljIHZvaWQgaHRhYmxlX3NlbGVjdGl2ZV9jbGVhbnVwKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsCi0JCSAJCWludCAoKnNlbGVjdCkoc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpodCwgCi0JCQkJCSAgICAgIHN0cnVjdCBkc3RoYXNoX2VudCAqaGUpKQotewotCWludCBpOwotCi0JSVBfTkZfQVNTRVJUKGh0LT5jZmcuc2l6ZSAmJiBodC0+Y2ZnLm1heCk7Ci0KLQkvKiBsb2NrIGhhc2ggdGFibGUgYW5kIGl0ZXJhdGUgb3ZlciBpdCAqLwotCXNwaW5fbG9ja19iaCgmaHQtPmxvY2spOwotCWZvciAoaSA9IDA7IGkgPCBodC0+Y2ZnLnNpemU7IGkrKykgewotCQlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoOwotCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zLCAqbjsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkaCwgcG9zLCBuLCAmaHQtPmhhc2hbaV0sIG5vZGUpIHsKLQkJCWlmICgoKnNlbGVjdCkoaHQsIGRoKSkKLQkJCQlfX2RzdGhhc2hfZnJlZShodCwgZGgpOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZodC0+bG9jayk7Ci19Ci0KLS8qIGhhc2ggdGFibGUgZ2FyYmFnZSBjb2xsZWN0b3IsIHJ1biBieSB0aW1lciAqLwotc3RhdGljIHZvaWQgaHRhYmxlX2djKHVuc2lnbmVkIGxvbmcgaHRsb25nKQotewotCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQgPSAoc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICopaHRsb25nOwotCi0JaHRhYmxlX3NlbGVjdGl2ZV9jbGVhbnVwKGh0LCBzZWxlY3RfZ2MpOwotCi0JLyogcmUtYWRkIHRoZSB0aW1lciBhY2NvcmRpbmdseSAqLwotCWh0LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaHQtPmNmZy5nY19pbnRlcnZhbCk7Ci0JYWRkX3RpbWVyKCZodC0+dGltZXIpOwotfQotCi1zdGF0aWMgdm9pZCBodGFibGVfZGVzdHJveShzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvKQotewotCS8qIHJlbW92ZSB0aW1lciwgaWYgaXQgaXMgcGVuZGluZyAqLwotCWlmICh0aW1lcl9wZW5kaW5nKCZoaW5mby0+dGltZXIpKQotCQlkZWxfdGltZXIoJmhpbmZvLT50aW1lcik7Ci0KLQkvKiByZW1vdmUgcHJvYyBlbnRyeSAqLwotCXJlbW92ZV9wcm9jX2VudHJ5KGhpbmZvLT5wZGUtPm5hbWUsIGhhc2hsaW1pdF9wcm9jZGlyKTsKLQotCWh0YWJsZV9zZWxlY3RpdmVfY2xlYW51cChoaW5mbywgc2VsZWN0X2FsbCk7Ci0JdmZyZWUoaGluZm8pOwotfQotCi1zdGF0aWMgc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpodGFibGVfZmluZF9nZXQoY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOwotCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7Ci0KLQlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShoaW5mbywgcG9zLCAmaGFzaGxpbWl0X2h0YWJsZXMsIG5vZGUpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwgaGluZm8tPnBkZS0+bmFtZSkpIHsKLQkJCWF0b21pY19pbmMoJmhpbmZvLT51c2UpOwotCQkJc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKLQkJCXJldHVybiBoaW5mbzsKLQkJfQotCX0KLQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGh0YWJsZV9wdXQoc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpoaW5mbykKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaGluZm8tPnVzZSkpIHsKLQkJc3Bpbl9sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7Ci0JCWhsaXN0X2RlbCgmaGluZm8tPm5vZGUpOwotCQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwotCQlodGFibGVfZGVzdHJveShoaW5mbyk7Ci0JfQotfQotCi0KLS8qIFRoZSBhbGdvcml0aG0gdXNlZCBpcyB0aGUgU2ltcGxlIFRva2VuIEJ1Y2tldCBGaWx0ZXIgKFRCRikKLSAqIHNlZSBuZXQvc2NoZWQvc2NoX3RiZi5jIGluIHRoZSBsaW51eCBzb3VyY2UgdHJlZQotICovCi0KLS8qIFJ1c3R5OiBUaGlzIGlzIG15IChub24tbWF0aGVtYXRpY2FsbHktaW5jbGluZWQpIHVuZGVyc3RhbmRpbmcgb2YKLSAgIHRoaXMgYWxnb3JpdGhtLiAgVGhlIGBhdmVyYWdlIHJhdGUnIGluIGppZmZpZXMgYmVjb21lcyB5b3VyIGluaXRpYWwKLSAgIGFtb3VudCBvZiBjcmVkaXQgYGNyZWRpdCcgYW5kIHRoZSBtb3N0IGNyZWRpdCB5b3UgY2FuIGV2ZXIgaGF2ZQotICAgYGNyZWRpdF9jYXAnLiAgVGhlIGBwZWFrIHJhdGUnIGJlY29tZXMgdGhlIGNvc3Qgb2YgcGFzc2luZyB0aGUKLSAgIHRlc3QsIGBjb3N0Jy4KLQotICAgYHByZXYnIHRyYWNrcyB0aGUgbGFzdCBwYWNrZXQgaGl0OiB5b3UgZ2FpbiBvbmUgY3JlZGl0IHBlciBqaWZmeS4KLSAgIElmIHlvdSBnZXQgY3JlZGl0IGJhbGFuY2UgbW9yZSB0aGFuIHRoaXMsIHRoZSBleHRyYSBjcmVkaXQgaXMKLSAgIGRpc2NhcmRlZC4gIEV2ZXJ5IHRpbWUgdGhlIG1hdGNoIHBhc3NlcywgeW91IGxvc2UgYGNvc3QnIGNyZWRpdHM7Ci0gICBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGF0IG1hbnksIHRoZSB0ZXN0IGZhaWxzLgotCi0gICBTZWUgQWxleGV5J3MgZm9ybWFsIGV4cGxhbmF0aW9uIGluIG5ldC9zY2hlZC9zY2hfdGJmLmMuCi0KLSAgIFRvIGdldCB0aGUgbWF4aW11bSByYW5nZSwgd2UgbXVsdGlwbHkgYnkgdGhpcyBmYWN0b3IgKGllLiB5b3UgZ2V0IE4KLSAgIGNyZWRpdHMgcGVyIGppZmZ5KS4gIFdlIHdhbnQgdG8gYWxsb3cgYSByYXRlIGFzIGxvdyBhcyAxIHBlciBkYXkKLSAgIChzbG93ZXN0IHVzZXJzcGFjZSB0b29sIGFsbG93cyksIHdoaWNoIG1lYW5zCi0gICBDUkVESVRTX1BFUl9KSUZGWSpIWio2MCo2MCoyNCA8IDJeMzIgaWUuCi0qLwotI2RlZmluZSBNQVhfQ1BKICgweEZGRkZGRkZGIC8gKEhaKjYwKjYwKjI0KSkKLQotLyogUmVwZWF0ZWQgc2hpZnQgYW5kIG9yIGdpdmVzIHVzIGFsbCAxcywgZmluYWwgc2hpZnQgYW5kIGFkZCAxIGdpdmVzCi0gKiB1cyB0aGUgcG93ZXIgb2YgMiBiZWxvdyB0aGUgdGhlb3JldGljYWwgbWF4LCBzbyBHQ0Mgc2ltcGx5IGRvZXMgYQotICogc2hpZnQuICovCi0jZGVmaW5lIF9QT1cyX0JFTE9XMih4KSAoKHgpfCgoeCk+PjEpKQotI2RlZmluZSBfUE9XMl9CRUxPVzQoeCkgKF9QT1cyX0JFTE9XMih4KXxfUE9XMl9CRUxPVzIoKHgpPj4yKSkKLSNkZWZpbmUgX1BPVzJfQkVMT1c4KHgpIChfUE9XMl9CRUxPVzQoeCl8X1BPVzJfQkVMT1c0KCh4KT4+NCkpCi0jZGVmaW5lIF9QT1cyX0JFTE9XMTYoeCkgKF9QT1cyX0JFTE9XOCh4KXxfUE9XMl9CRUxPVzgoKHgpPj44KSkKLSNkZWZpbmUgX1BPVzJfQkVMT1czMih4KSAoX1BPVzJfQkVMT1cxNih4KXxfUE9XMl9CRUxPVzE2KCh4KT4+MTYpKQotI2RlZmluZSBQT1cyX0JFTE9XMzIoeCkgKChfUE9XMl9CRUxPVzMyKHgpPj4xKSArIDEpCi0KLSNkZWZpbmUgQ1JFRElUU19QRVJfSklGRlkgUE9XMl9CRUxPVzMyKE1BWF9DUEopCi0KLS8qIFByZWNpc2lvbiBzYXZlci4gKi8KLXN0YXRpYyBpbmxpbmUgdV9pbnQzMl90Ci11c2VyMmNyZWRpdHModV9pbnQzMl90IHVzZXIpCi17Ci0JLyogSWYgbXVsdGlwbHlpbmcgd291bGQgb3ZlcmZsb3cuLi4gKi8KLQlpZiAodXNlciA+IDB4RkZGRkZGRkYgLyAoSFoqQ1JFRElUU19QRVJfSklGRlkpKQotCQkvKiBEaXZpZGUgZmlyc3QuICovCi0JCXJldHVybiAodXNlciAvIElQVF9IQVNITElNSVRfU0NBTEUpICogSFogKiBDUkVESVRTX1BFUl9KSUZGWTsKLQotCXJldHVybiAodXNlciAqIEhaICogQ1JFRElUU19QRVJfSklGRlkpIC8gSVBUX0hBU0hMSU1JVF9TQ0FMRTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJhdGVpbmZvX3JlY2FsYyhzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoLCB1bnNpZ25lZCBsb25nIG5vdykKLXsKLQlkaC0+cmF0ZWluZm8uY3JlZGl0ICs9IChub3cgLSB4Y2hnKCZkaC0+cmF0ZWluZm8ucHJldiwgbm93KSkgCi0JCQkJCSogQ1JFRElUU19QRVJfSklGRlk7Ci0JaWYgKGRoLT5yYXRlaW5mby5jcmVkaXQgPiBkaC0+cmF0ZWluZm8uY3JlZGl0X2NhcCkKLQkJZGgtPnJhdGVpbmZvLmNyZWRpdCA9IGRoLT5yYXRlaW5mby5jcmVkaXRfY2FwOwotfQotCi1zdGF0aWMgaW50Ci1oYXNobGltaXRfbWF0Y2goY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQljb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoLAotCQljb25zdCB2b2lkICptYXRjaGluZm8sCi0JCWludCBvZmZzZXQsCi0JCXVuc2lnbmVkIGludCBwcm90b2ZmLAotCQlpbnQgKmhvdGRyb3ApCi17Ci0Jc3RydWN0IGlwdF9oYXNobGltaXRfaW5mbyAqciA9IAotCQkoKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKiltYXRjaGluZm8pLT51Lm1hc3RlcjsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvID0gci0+aGluZm87Ci0JdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCXN0cnVjdCBkc3RoYXNoX2VudCAqZGg7Ci0Jc3RydWN0IGRzdGhhc2hfZHN0IGRzdDsKLQotCS8qIGJ1aWxkICdkc3QnIGFjY29yZGluZyB0byBoaW5mby0+Y2ZnIGFuZCBjdXJyZW50IHBhY2tldCAqLwotCW1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7Ci0JaWYgKGhpbmZvLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9ESVApCi0JCWRzdC5kc3RfaXAgPSBza2ItPm5oLmlwaC0+ZGFkZHI7Ci0JaWYgKGhpbmZvLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9TSVApCi0JCWRzdC5zcmNfaXAgPSBza2ItPm5oLmlwaC0+c2FkZHI7Ci0JaWYgKGhpbmZvLT5jZmcubW9kZSAmIElQVF9IQVNITElNSVRfSEFTSF9EUFQKLQkgICAgfHxoaW5mby0+Y2ZnLm1vZGUgJiBJUFRfSEFTSExJTUlUX0hBU0hfU1BUKSB7Ci0JCV9fYmUxNiBfcG9ydHNbMl0sICpwb3J0czsKLQotCQlzd2l0Y2ggKHNrYi0+bmguaXBoLT5wcm90b2NvbCkgewotCQljYXNlIElQUFJPVE9fVENQOgotCQljYXNlIElQUFJPVE9fVURQOgotCQljYXNlIElQUFJPVE9fU0NUUDoKLQkJY2FzZSBJUFBST1RPX0RDQ1A6Ci0JCQlwb3J0cyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNrYi0+bmguaXBoLT5paGwqNCwKLQkJCQkJCSAgIHNpemVvZihfcG9ydHMpLCAmX3BvcnRzKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJX3BvcnRzWzBdID0gX3BvcnRzWzFdID0gMDsKLQkJCXBvcnRzID0gX3BvcnRzOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFwb3J0cykgewotCQkJLyogV2UndmUgYmVlbiBhc2tlZCB0byBleGFtaW5lIHRoaXMgcGFja2V0LCBhbmQgd2UKLQkJIAkgIGNhbid0LiAgSGVuY2UsIG5vIGNob2ljZSBidXQgdG8gZHJvcC4gKi8KLQkJCSpob3Rkcm9wID0gMTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWlmIChoaW5mby0+Y2ZnLm1vZGUgJiBJUFRfSEFTSExJTUlUX0hBU0hfU1BUKQotCQkJZHN0LnNyY19wb3J0ID0gcG9ydHNbMF07Ci0JCWlmIChoaW5mby0+Y2ZnLm1vZGUgJiBJUFRfSEFTSExJTUlUX0hBU0hfRFBUKQotCQkJZHN0LmRzdF9wb3J0ID0gcG9ydHNbMV07Ci0JfSAKLQotCXNwaW5fbG9ja19iaCgmaGluZm8tPmxvY2spOwotCWRoID0gX19kc3RoYXNoX2ZpbmQoaGluZm8sICZkc3QpOwotCWlmICghZGgpIHsKLQkJZGggPSBfX2RzdGhhc2hfYWxsb2NfaW5pdChoaW5mbywgJmRzdCk7Ci0KLQkJaWYgKCFkaCkgewotCQkJLyogZW5vbWVtLi4uIGRvbid0IG1hdGNoID09IERST1AgKi8KLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRU5PTUVNXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJc3Bpbl91bmxvY2tfYmgoJmhpbmZvLT5sb2NrKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJZGgtPmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmV4cGlyZSk7Ci0KLQkJZGgtPnJhdGVpbmZvLnByZXYgPSBqaWZmaWVzOwotCQlkaC0+cmF0ZWluZm8uY3JlZGl0ID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnICogCi0JCQkJCQkJaGluZm8tPmNmZy5idXJzdCk7Ci0JCWRoLT5yYXRlaW5mby5jcmVkaXRfY2FwID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnICogCi0JCQkJCQkJaGluZm8tPmNmZy5idXJzdCk7Ci0JCWRoLT5yYXRlaW5mby5jb3N0ID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnKTsKLQl9IGVsc2UgewotCQkvKiB1cGRhdGUgZXhwaXJhdGlvbiB0aW1lb3V0ICovCi0JCWRoLT5leHBpcmVzID0gbm93ICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmV4cGlyZSk7Ci0JCXJhdGVpbmZvX3JlY2FsYyhkaCwgbm93KTsKLQl9Ci0KLQlpZiAoZGgtPnJhdGVpbmZvLmNyZWRpdCA+PSBkaC0+cmF0ZWluZm8uY29zdCkgewotCQkvKiBXZSdyZSB1bmRlcmxpbWl0LiAqLwotCQlkaC0+cmF0ZWluZm8uY3JlZGl0IC09IGRoLT5yYXRlaW5mby5jb3N0OwotCQlzcGluX3VubG9ja19iaCgmaGluZm8tPmxvY2spOwotCQlyZXR1cm4gMTsKLQl9Ci0KLSAgICAgICAJc3Bpbl91bmxvY2tfYmgoJmhpbmZvLT5sb2NrKTsKLQotCS8qIGRlZmF1bHQgY2FzZTogd2UncmUgb3ZlcmxpbWl0LCB0aHVzIGRvbid0IG1hdGNoICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWhhc2hsaW1pdF9jaGVja2VudHJ5KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkJICAgICBjb25zdCB2b2lkICppbmYsCi0JCSAgICAgY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKLQkJICAgICB2b2lkICptYXRjaGluZm8sCi0JCSAgICAgdW5zaWduZWQgaW50IGhvb2tfbWFzaykKLXsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICpyID0gbWF0Y2hpbmZvOwotCi0JLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwotCWlmIChyLT5jZmcuYnVyc3QgPT0gMAotCSAgICB8fCB1c2VyMmNyZWRpdHMoci0+Y2ZnLmF2ZyAqIHItPmNmZy5idXJzdCkgPCAKLQkgICAgCQkJCXVzZXIyY3JlZGl0cyhyLT5jZmcuYXZnKSkgewotCQlwcmludGsoS0VSTl9FUlIgImlwdF9oYXNobGltaXQ6IE92ZXJmbG93LCB0cnkgbG93ZXI6ICV1LyV1XG4iLAotCQkgICAgICAgci0+Y2ZnLmF2Zywgci0+Y2ZnLmJ1cnN0KTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHItPmNmZy5tb2RlID09IDAgCi0JICAgIHx8IHItPmNmZy5tb2RlID4gKElQVF9IQVNITElNSVRfSEFTSF9EUFQKLQkJICAgICAgICAgIHxJUFRfSEFTSExJTUlUX0hBU0hfRElQCi0JCQkgIHxJUFRfSEFTSExJTUlUX0hBU0hfU0lQCi0JCQkgIHxJUFRfSEFTSExJTUlUX0hBU0hfU1BUKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIXItPmNmZy5nY19pbnRlcnZhbCkKLQkJcmV0dXJuIDA7Ci0JCi0JaWYgKCFyLT5jZmcuZXhwaXJlKQotCQlyZXR1cm4gMDsKLQotCWlmIChyLT5uYW1lW3NpemVvZihyLT5uYW1lKSAtIDFdICE9ICdcMCcpCi0JCXJldHVybiAwOwotCi0JLyogVGhpcyBpcyB0aGUgYmVzdCB3ZSd2ZSBnb3Q6IFdlIGNhbm5vdCByZWxlYXNlIGFuZCByZS1ncmFiIGxvY2ssCi0JICogc2luY2UgY2hlY2tlbnRyeSgpIGlzIGNhbGxlZCBiZWZvcmUgaXBfdGFibGVzLmMgZ3JhYnMgaXB0X211dGV4LiAgCi0JICogV2UgYWxzbyBjYW5ub3QgZ3JhYiB0aGUgaGFzaHRhYmxlIHNwaW5sb2NrLCBzaW5jZSBodGFibGVfY3JlYXRlIHdpbGwgCi0JICogY2FsbCB2bWFsbG9jLCBhbmQgdGhhdCBjYW4gc2xlZXAuICBBbmQgd2UgY2Fubm90IGp1c3QgcmUtc2VhcmNoCi0JICogdGhlIGxpc3Qgb2YgaHRhYmxlJ3MgaW4gaHRhYmxlX2NyZWF0ZSgpLCBzaW5jZSB0aGVuIHdlIHdvdWxkCi0JICogY3JlYXRlIGR1cGxpY2F0ZSBwcm9jIGZpbGVzLiAtSFcgKi8KLQltdXRleF9sb2NrKCZobGltaXRfbXV0ZXgpOwotCXItPmhpbmZvID0gaHRhYmxlX2ZpbmRfZ2V0KHItPm5hbWUpOwotCWlmICghci0+aGluZm8gJiYgKGh0YWJsZV9jcmVhdGUocikgIT0gMCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZobGltaXRfbXV0ZXgpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZobGltaXRfbXV0ZXgpOwotCi0JLyogVWdseSBoYWNrOiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgKi8KLQlyLT51Lm1hc3RlciA9IHI7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLWhhc2hsaW1pdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbykKLXsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICpyID0gbWF0Y2hpbmZvOwotCi0JaHRhYmxlX3B1dChyLT5oaW5mbyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdHJ1Y3QgY29tcGF0X2lwdF9oYXNobGltaXRfaW5mbyB7Ci0JY2hhciBuYW1lW0lGTkFNU0laXTsKLQlzdHJ1Y3QgaGFzaGxpbWl0X2NmZyBjZmc7Ci0JY29tcGF0X3VwdHJfdCBoaW5mbzsKLQljb21wYXRfdXB0cl90IG1hc3RlcjsKLX07Ci0KLXN0YXRpYyB2b2lkIGNvbXBhdF9mcm9tX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMpCi17Ci0JaW50IG9mZiA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfaXB0X2hhc2hsaW1pdF9pbmZvLCBoaW5mbyk7Ci0KLQltZW1jcHkoZHN0LCBzcmMsIG9mZik7Ci0JbWVtc2V0KGRzdCArIG9mZiwgMCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfaXB0X2hhc2hsaW1pdF9pbmZvKSAtIG9mZik7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQotewotCWludCBvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2lwdF9oYXNobGltaXRfaW5mbywgaGluZm8pOwotCi0JcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsIHNyYywgb2ZmKSA/IC1FRkFVTFQgOiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3QgaXB0X21hdGNoIGlwdF9oYXNobGltaXQgPSB7Ci0JLm5hbWUJCT0gImhhc2hsaW1pdCIsCi0JLm1hdGNoCQk9IGhhc2hsaW1pdF9tYXRjaCwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8pLAotI2lmZGVmIENPTkZJR19DT01QQVQKLQkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9oYXNobGltaXRfaW5mbyksCi0JLmNvbXBhdF9mcm9tX3VzZXIgPSBjb21wYXRfZnJvbV91c2VyLAotCS5jb21wYXRfdG9fdXNlcgk9IGNvbXBhdF90b191c2VyLAotI2VuZGlmCi0JLmNoZWNrZW50cnkJPSBoYXNobGltaXRfY2hlY2tlbnRyeSwKLQkuZGVzdHJveQk9IGhhc2hsaW1pdF9kZXN0cm95LAotCS5tZQkJPSBUSElTX01PRFVMRQotfTsKLQotLyogUFJPQyBzdHVmZiAqLwotCi1zdGF0aWMgdm9pZCAqZGxfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcGRlLT5kYXRhOwotCXVuc2lnbmVkIGludCAqYnVja2V0OwotCi0Jc3Bpbl9sb2NrX2JoKCZodGFibGUtPmxvY2spOwotCWlmICgqcG9zID49IGh0YWJsZS0+Y2ZnLnNpemUpCi0JCXJldHVybiBOVUxMOwotCi0JYnVja2V0ID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFidWNrZXQpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0JKmJ1Y2tldCA9ICpwb3M7Ci0JcmV0dXJuIGJ1Y2tldDsKLX0KLQotc3RhdGljIHZvaWQgKmRsX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOwotCXN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcGRlLT5kYXRhOwotCXVuc2lnbmVkIGludCAqYnVja2V0ID0gKHVuc2lnbmVkIGludCAqKXY7Ci0KLQkqcG9zID0gKysoKmJ1Y2tldCk7Ci0JaWYgKCpwb3MgPj0gaHRhYmxlLT5jZmcuc2l6ZSkgewotCQlrZnJlZSh2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBidWNrZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpodGFibGUgPSBwZGUtPmRhdGE7Ci0JdW5zaWduZWQgaW50ICpidWNrZXQgPSAodW5zaWduZWQgaW50ICopdjsKLQotCWtmcmVlKGJ1Y2tldCk7Ci0KLQlzcGluX3VubG9ja19iaCgmaHRhYmxlLT5sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZGxfc2VxX3JlYWxfc2hvdyhzdHJ1Y3QgZHN0aGFzaF9lbnQgKmVudCwgc3RydWN0IHNlcV9maWxlICpzKQotewotCS8qIHJlY2FsY3VsYXRlIHRvIHNob3cgYWNjdXJhdGUgbnVtYmVycyAqLwotCXJhdGVpbmZvX3JlY2FsYyhlbnQsIGppZmZpZXMpOwotCi0JcmV0dXJuIHNlcV9wcmludGYocywgIiVsZCAldS4ldS4ldS4ldToldS0+JXUuJXUuJXUuJXU6JXUgJXUgJXUgJXVcbiIsCi0JCQkobG9uZykoZW50LT5leHBpcmVzIC0gamlmZmllcykvSFosCi0JCQlOSVBRVUFEKGVudC0+ZHN0LnNyY19pcCksIG50b2hzKGVudC0+ZHN0LnNyY19wb3J0KSwKLQkJCU5JUFFVQUQoZW50LT5kc3QuZHN0X2lwKSwgbnRvaHMoZW50LT5kc3QuZHN0X3BvcnQpLAotCQkJZW50LT5yYXRlaW5mby5jcmVkaXQsIGVudC0+cmF0ZWluZm8uY3JlZGl0X2NhcCwKLQkJCWVudC0+cmF0ZWluZm8uY29zdCk7Ci19Ci0KLXN0YXRpYyBpbnQgZGxfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gcy0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHBkZS0+ZGF0YTsKLQl1bnNpZ25lZCBpbnQgKmJ1Y2tldCA9ICh1bnNpZ25lZCBpbnQgKil2OwotCXN0cnVjdCBkc3RoYXNoX2VudCAqZW50OwotCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7Ci0KLQlpZiAoIWhsaXN0X2VtcHR5KCZodGFibGUtPmhhc2hbKmJ1Y2tldF0pKQotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsIHBvcywgJmh0YWJsZS0+aGFzaFsqYnVja2V0XSwgbm9kZSkgewotCQkJaWYgKGRsX3NlcV9yZWFsX3Nob3coZW50LCBzKSkgewotCQkJCS8qIGJ1ZmZlciB3YXMgZmlsbGVkIGFuZCB1bmFibGUgdG8gcHJpbnQgdGhhdCB0dXBsZSAqLwotCQkJCXJldHVybiAxOwotCQkJfQotCQl9Ci0JCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZGxfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBkbF9zZXFfc3RhcnQsCi0JLm5leHQgID0gZGxfc2VxX25leHQsCi0JLnN0b3AgID0gZGxfc2VxX3N0b3AsCi0JLnNob3cgID0gZGxfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgZGxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCByZXQgPSBzZXFfb3BlbihmaWxlLCAmZGxfc2VxX29wcyk7Ci0KLQlpZiAoIXJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlzZi0+cHJpdmF0ZSA9IFBERShpbm9kZSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRsX2ZpbGVfb3BzID0gewotCS5vd25lciAgID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgPSBkbF9wcm9jX29wZW4sCi0JLnJlYWQgICAgPSBzZXFfcmVhZCwKLQkubGxzZWVrICA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlCi19OwotCi1zdGF0aWMgaW50IGluaXRfb3JfZmluaShpbnQgZmluaSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmaW5pKQotCQlnb3RvIGNsZWFudXA7Ci0KLQlpZiAoaXB0X3JlZ2lzdGVyX21hdGNoKCZpcHRfaGFzaGxpbWl0KSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXBfbm90aGluZzsKLQl9Ci0KLQloYXNobGltaXRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlwdF9oYXNobGltaXQiLAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkc3RoYXNoX2VudCksIDAsCi0JCQkJCSAgICAwLCBOVUxMLCBOVUxMKTsKLQlpZiAoIWhhc2hsaW1pdF9jYWNoZXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIGlwdF9oYXNobGltaXQgc2xhYiBjYWNoZVxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF91bnJlZ19tYXRjaDsKLQl9Ci0KLQloYXNobGltaXRfcHJvY2RpciA9IHByb2NfbWtkaXIoImlwdF9oYXNobGltaXQiLCBwcm9jX25ldCk7Ci0JaWYgKCFoYXNobGltaXRfcHJvY2RpcikgewotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgcHJvYyBkaXIgZW50cnlcbiIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGNsZWFudXBfZnJlZV9zbGFiOwotCX0KLQotCXJldHVybiByZXQ7Ci0KLWNsZWFudXA6Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImlwdF9oYXNobGltaXQiLCBwcm9jX25ldCk7Ci1jbGVhbnVwX2ZyZWVfc2xhYjoKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koaGFzaGxpbWl0X2NhY2hlcCk7Ci1jbGVhbnVwX3VucmVnX21hdGNoOgotCWlwdF91bnJlZ2lzdGVyX21hdGNoKCZpcHRfaGFzaGxpbWl0KTsKLWNsZWFudXBfbm90aGluZzoKLQlyZXR1cm4gcmV0OwotCQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpcHRfaGFzaGxpbWl0X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaW5pdF9vcl9maW5pKDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgaXB0X2hhc2hsaW1pdF9maW5pKHZvaWQpCi17Ci0JaW5pdF9vcl9maW5pKDEpOwotfQotCi1tb2R1bGVfaW5pdChpcHRfaGFzaGxpbWl0X2luaXQpOwotbW9kdWxlX2V4aXQoaXB0X2hhc2hsaW1pdF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKaW5kZXggYjkxZjM1OC4uYWYyOTM5OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXVuc2lnbmVkIGludCByZXQ7CiAJdV9pbnQ4X3QgdG9zOwogCV9fYmUzMiBzYWRkciwgZGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBuZm1hcms7CisJdV9pbnQzMl90IG1hcms7CiAKIAkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KIAlpZiAoKCpwc2tiKS0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpcGhkcikKQEAgLTE0Myw3ICsxNDMsNyBAQAogCX0KIAogCS8qIFNhdmUgdGhpbmdzIHdoaWNoIGNvdWxkIGFmZmVjdCByb3V0ZSAqLwotCW5mbWFyayA9ICgqcHNrYiktPm5mbWFyazsKKwltYXJrID0gKCpwc2tiKS0+bWFyazsKIAlzYWRkciA9ICgqcHNrYiktPm5oLmlwaC0+c2FkZHI7CiAJZGFkZHIgPSAoKnBza2IpLT5uaC5pcGgtPmRhZGRyOwogCXRvcyA9ICgqcHNrYiktPm5oLmlwaC0+dG9zOwpAQCAtMTUzLDkgKzE1Myw3IEBACiAJaWYgKHJldCAhPSBORl9EUk9QICYmIHJldCAhPSBORl9TVE9MRU4gJiYgcmV0ICE9IE5GX1FVRVVFCiAJICAgICYmICgoKnBza2IpLT5uaC5pcGgtPnNhZGRyICE9IHNhZGRyCiAJCXx8ICgqcHNrYiktPm5oLmlwaC0+ZGFkZHIgIT0gZGFkZHIKLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfRldNQVJLCi0JCXx8ICgqcHNrYiktPm5mbWFyayAhPSBuZm1hcmsKLSNlbmRpZgorCQl8fCAoKnBza2IpLT5tYXJrICE9IG1hcmsKIAkJfHwgKCpwc2tiKS0+bmguaXBoLT50b3MgIT0gdG9zKSkKIAkJaWYgKGlwX3JvdXRlX21lX2hhcmRlcihwc2tiLCBSVE5fVU5TUEVDKSkKIAkJCXJldCA9IE5GX0RST1A7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwppbmRleCAwYWY4MDNkLi40NzFiNjM4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+Ci0jaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KQEAgLTM4LDEyICszOCwxMCBAQAogI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX3N0YXQsIG5mX2Nvbm50cmFja19zdGF0KTsKLQogc3RhdGljIGludCBpcHY0X3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCiAJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXVfaW50MzJfdCBfYWRkcnNbMl0sICphcDsKKwlfX2JlMzIgX2FkZHJzWzJdLCAqYXA7CiAJYXAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBuaG9mZiArIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpLAogCQkJCXNpemVvZih1X2ludDMyX3QpICogMiwgX2FkZHJzKTsKIAlpZiAoYXAgPT0gTlVMTCkKQEAgLTExMywxMCArMTExLDEyIEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotaW50IG5hdF9tb2R1bGVfaXNfbG9hZGVkID0gMDsKK2ludCBuZl9uYXRfbW9kdWxlX2lzX2xvYWRlZCA9IDA7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfbW9kdWxlX2lzX2xvYWRlZCk7CisKIHN0YXRpYyB1X2ludDMyX3QgaXB2NF9nZXRfZmVhdHVyZXMoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7Ci0JaWYgKG5hdF9tb2R1bGVfaXNfbG9hZGVkKQorCWlmIChuZl9uYXRfbW9kdWxlX2lzX2xvYWRlZCkKIAkJcmV0dXJuIE5GX0NUX0ZfTkFUOwogCiAJcmV0dXJuIE5GX0NUX0ZfQkFTSUM7CkBAIC0yNjgsNDMgKzI2OCw1OSBAQAogCX0sCiB9OwogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotLyogRnJvbSBuZl9jb25udHJhY2tfcHJvdG9faWNtcC5jICovCi1leHRlcm4gdW5zaWduZWQgaW50IG5mX2N0X2ljbXBfdGltZW91dDsKLXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqbmZfY3RfaXB2NF9zeXNjdGxfaGVhZGVyOworI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkgJiYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUKQorc3RhdGljIGludCBsb2dfaW52YWxpZF9wcm90b19taW4gPSAwOworc3RhdGljIGludCBsb2dfaW52YWxpZF9wcm90b19tYXggPSAyNTU7CiAKLXN0YXRpYyBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7CitzdGF0aWMgY3RsX3RhYmxlIGlwX2N0X3N5c2N0bF90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19JQ01QX1RJTUVPVVQsCi0JCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfaWNtcF90aW1lb3V0IiwKLQkJLmRhdGEJCT0gJm5mX2N0X2ljbXBfdGltZW91dCwKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX01BWCwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja19tYXgiLAorCQkuZGF0YQkJPSAmbmZfY29ubnRyYWNrX21heCwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfQ09VTlQsCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfY291bnQiLAorCQkuZGF0YQkJPSAmbmZfY29ubnRyYWNrX2NvdW50LAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19CVUNLRVRTLAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX2J1Y2tldHMiLAorCQkuZGF0YQkJPSAmbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19DSEVDS1NVTSwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja19jaGVja3N1bSIsCisJCS5kYXRhCQk9ICZuZl9jb25udHJhY2tfY2hlY2tzdW0sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElELAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX2xvZ19pbnZhbGlkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X2xvZ19pbnZhbGlkLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJmxvZ19pbnZhbGlkX3Byb3RvX21pbiwKKwkJLmV4dHJhMgkJPSAmbG9nX2ludmFsaWRfcHJvdG9fbWF4LAogCX0sCi0gICAgICAgIHsgLmN0bF9uYW1lID0gMCB9Ci19OwotCi1zdGF0aWMgY3RsX3RhYmxlIG5mX2N0X25ldGZpbHRlcl90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lICAgICAgID0gTkVUX05FVEZJTFRFUiwKLQkJLnByb2NuYW1lICAgICAgID0gIm5ldGZpbHRlciIsCi0JCS5tb2RlICAgICAgICAgICA9IDA1NTUsCi0JCS5jaGlsZCAgICAgICAgICA9IG5mX2N0X3N5c2N0bF90YWJsZSwKLQl9LAotCXsgLmN0bF9uYW1lID0gMCB9CisJCS5jdGxfbmFtZQk9IDAKKwl9CiB9OwotCi1zdGF0aWMgY3RsX3RhYmxlIG5mX2N0X25ldF90YWJsZVtdID0gewotCXsKLQkJLmN0bF9uYW1lICAgICAgID0gQ1RMX05FVCwKLQkJLnByb2NuYW1lICAgICAgID0gIm5ldCIsCi0JCS5tb2RlICAgICAgICAgICA9IDA1NTUsCi0JCS5jaGlsZCAgICAgICAgICA9IG5mX2N0X25ldGZpbHRlcl90YWJsZSwKLQl9LAotCXsgLmN0bF9uYW1lID0gMCB9Ci19OwotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAmJiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUICovCiAKIC8qIEZhc3QgZnVuY3Rpb24gZm9yIHRob3NlIHdobyBkb24ndCB3YW50IHRvIHBhcnNlIC9wcm9jIChhbmQgSSBkb24ndAogICAgYmxhbWUgdGhlbSkuICovCkBAIC0zOTYsMTAgKzQxMiw4IEBACiAJaWYgKG5mYXR0cl9iYWRfc2l6ZSh0YiwgQ1RBX0lQX01BWCwgY3RhX21pbl9pcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdC0+c3JjLnUzLmlwID0KLQkJKih1X2ludDMyX3QgKilORkFfREFUQSh0YltDVEFfSVBfVjRfU1JDLTFdKTsKLQl0LT5kc3QudTMuaXAgPQotCQkqKHVfaW50MzJfdCAqKU5GQV9EQVRBKHRiW0NUQV9JUF9WNF9EU1QtMV0pOworCXQtPnNyYy51My5pcCA9ICooX19iZTMyICopTkZBX0RBVEEodGJbQ1RBX0lQX1Y0X1NSQy0xXSk7CisJdC0+ZHN0LnUzLmlwID0gKihfX2JlMzIgKilORkFfREFUQSh0YltDVEFfSVBfVjRfRFNULTFdKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDI2LDE0ICs0NDAsMTUgQEAKIAkudHVwbGVfdG9fbmZhdHRyID0gaXB2NF90dXBsZV90b19uZmF0dHIsCiAJLm5mYXR0cl90b190dXBsZSA9IGlwdjRfbmZhdHRyX3RvX3R1cGxlLAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKSAmJiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQpCisJLmN0bF90YWJsZV9wYXRoICA9IG5mX25ldF9pcHY0X25ldGZpbHRlcl9zeXNjdGxfcGF0aCwKKwkuY3RsX3RhYmxlCSA9IGlwX2N0X3N5c2N0bF90YWJsZSwKKyNlbmRpZgogCS5tZQkJID0gVEhJU19NT0RVTEUsCiB9OwogCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNDsKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA0OwotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX2ljbXA7Ci0KIE1PRFVMRV9BTElBUygibmZfY29ubnRyYWNrLSIgX19zdHJpbmdpZnkoQUZfSU5FVCkpOworTU9EVUxFX0FMSUFTKCJpcF9jb25udHJhY2siKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9pbml0KHZvaWQpCkBAIC00NDgsMTkgKzQ2MywxOSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDQpOworCXJldCA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b190Y3A0KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciB0Y3AuXG4iKTsKIAkJZ290byBjbGVhbnVwX3NvY2tvcHQ7CiAJfQogCi0JcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNCk7CisJcmV0ID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX3VkcDQpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50aygibmZfY29ubnRyYWNrX2lwdjQ6IGNhbid0IHJlZ2lzdGVyIHVkcC5cbiIpOwogCQlnb3RvIGNsZWFudXBfdGNwOwogCX0KIAotCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX2ljbXApOworCXJldCA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b19pY21wKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBpY21wLlxuIik7CiAJCWdvdG8gY2xlYW51cF91ZHA7CkBAIC00NzgsMjggKzQ5MywyNCBAQAogCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY0OiBjYW4ndCByZWdpc3RlciBob29rcy5cbiIpOwogCQlnb3RvIGNsZWFudXBfaXB2NDsKIAl9Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotCW5mX2N0X2lwdjRfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOwotCWlmIChuZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07CisjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykgJiYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUKQorCXJldCA9IG5mX2Nvbm50cmFja19pcHY0X2NvbXBhdF9pbml0KCk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gY2xlYW51cF9ob29rczsKLQl9CiAjZW5kaWYKIAlyZXR1cm4gcmV0OwotCi0jaWZkZWYgQ09ORklHX1NZU0NUTAorI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICYmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCkKICBjbGVhbnVwX2hvb2tzOgotCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB2NF9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwdjRfY29ubnRyYWNrX29wcykpOworIAluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdjRfY29ubnRyYWNrX29wcywgQVJSQVlfU0laRShpcHY0X2Nvbm50cmFja19vcHMpKTsKICNlbmRpZgogIGNsZWFudXBfaXB2NDoKIAluZl9jb25udHJhY2tfbDNwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDNwcm90b19pcHY0KTsKICBjbGVhbnVwX2ljbXA6Ci0JbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKKwluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b19pY21wKTsKICBjbGVhbnVwX3VkcDoKLQluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOworCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX3VkcDQpOwogIGNsZWFudXBfdGNwOgotCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fdGNwNCk7CiAgY2xlYW51cF9zb2Nrb3B0OgogCW5mX3VucmVnaXN0ZXJfc29ja29wdCgmc29fZ2V0b3JpZ2RzdCk7CiAJcmV0dXJuIHJldDsKQEAgLTUwOCwxOCArNTE5LDE2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9maW5pKHZvaWQpCiB7CiAJc3luY2hyb25pemVfbmV0KCk7Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotIAl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9pcHY0X3N5c2N0bF9oZWFkZXIpOworI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpICYmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCkKKwluZl9jb25udHJhY2tfaXB2NF9jb21wYXRfZmluaSgpOwogI2VuZGlmCiAJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY0X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2NF9jb25udHJhY2tfb3BzKSk7CiAJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NCk7Ci0JbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKLQluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOwotCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7CisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9faWNtcCk7CisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNCk7CisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fdGNwNCk7CiAJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZzb19nZXRvcmlnZHN0KTsKIH0KIAogbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9pbml0KTsKIG1vZHVsZV9leGl0KG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfZmluaSk7Ci0KLUVYUE9SVF9TWU1CT0wobmZfY3RfaXB2NF9nYXRoZXJfZnJhZ3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMxYmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjRfY29tcGF0LmMKQEAgLTAsMCArMSw0MTIgQEAKKy8qIGlwX2Nvbm50cmFjayBwcm9jIGNvbXBhdCAtIGJhc2VkIG9uIGlwX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKyAqCisgKiAoQykgMTk5OS0yMDAxIFBhdWwgYFJ1c3R5JyBSdXNzZWxsCisgKiAoQykgMjAwMi0yMDA2IE5ldGZpbHRlciBDb3JlIFRlYW0gPGNvcmV0ZWFtQG5ldGZpbHRlci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05GX0NUX0FDQ1QKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3NlcV9wcmludF9jb3VudGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCSAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfY291bnRlciAqY291bnRlcikKK3sKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAicGFja2V0cz0lbGx1IGJ5dGVzPSVsbHUgIiwKKwkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyljb3VudGVyLT5wYWNrZXRzLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWNvdW50ZXItPmJ5dGVzKTsKK30KKyNlbHNlCisjZGVmaW5lIHNlcV9wcmludF9jb3VudGVycyh4LCB5KQkwCisjZW5kaWYKKworc3RydWN0IGN0X2l0ZXJfc3RhdGUgeworCXVuc2lnbmVkIGludCBidWNrZXQ7Cit9OworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqY3RfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKKworCWZvciAoc3QtPmJ1Y2tldCA9IDA7CisJICAgICBzdC0+YnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOworCSAgICAgc3QtPmJ1Y2tldCsrKSB7CisJCWlmICghbGlzdF9lbXB0eSgmbmZfY29ubnRyYWNrX2hhc2hbc3QtPmJ1Y2tldF0pKQorCQkJcmV0dXJuIG5mX2Nvbm50cmFja19oYXNoW3N0LT5idWNrZXRdLm5leHQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOworCisJaGVhZCA9IGhlYWQtPm5leHQ7CisJd2hpbGUgKGhlYWQgPT0gJm5mX2Nvbm50cmFja19oYXNoW3N0LT5idWNrZXRdKSB7CisJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJcmV0dXJuIE5VTEw7CisJCWhlYWQgPSBuZl9jb25udHJhY2tfaGFzaFtzdC0+YnVja2V0XS5uZXh0OworCX0KKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmN0X2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOworCisJaWYgKGhlYWQpCisJCXdoaWxlIChwb3MgJiYgKGhlYWQgPSBjdF9nZXRfbmV4dChzZXEsIGhlYWQpKSkKKwkJCXBvcy0tOworCXJldHVybiBwb3MgPyBOVUxMIDogaGVhZDsKK30KKworc3RhdGljIHZvaWQgKmN0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJcmV0dXJuIGN0X2dldF9pZHgoc2VxLCAqcG9zKTsKK30KKworc3RhdGljIHZvaWQgKmN0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJKCpwb3MpKys7CisJcmV0dXJuIGN0X2dldF9uZXh0KHMsIHYpOworfQorCitzdGF0aWMgdm9pZCBjdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKK30KKworc3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKKwljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CisKKwlORl9DVF9BU1NFUlQoY3QpOworCisJLyogd2Ugb25seSB3YW50IHRvIHByaW50IERJUl9PUklHSU5BTCAqLworCWlmIChORl9DVF9ESVJFQ1RJT04oaGFzaCkpCisJCXJldHVybiAwOworCWlmIChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtICE9IEFGX0lORVQpCisJCXJldHVybiAwOworCisJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQorCQkJCSAgICAgICAudHVwbGUuc3JjLmwzbnVtKTsKKwlORl9DVF9BU1NFUlQobDNwcm90byk7CisJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQorCQkJCSAgICAgICAudHVwbGUuc3JjLmwzbnVtLAorCQkJCSAgICAgICBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0KKwkJCQkgICAgICAgLnR1cGxlLmRzdC5wcm90b251bSk7CisJTkZfQ1RfQVNTRVJUKGw0cHJvdG8pOworCisJaWYgKHNlcV9wcmludGYocywgIiUtOHMgJXUgJWxkICIsCisJCSAgICAgIGw0cHJvdG8tPm5hbWUsCisJCSAgICAgIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0sCisJCSAgICAgIHRpbWVyX3BlbmRpbmcoJmN0LT50aW1lb3V0KQorCQkgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChsM3Byb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChwcmludF90dXBsZShzLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLAorCQkJbDNwcm90bywgbDRwcm90bykpCisJCXJldHVybiAtRU5PU1BDOworCisgCWlmIChzZXFfcHJpbnRfY291bnRlcnMocywgJmN0LT5jb3VudGVyc1tJUF9DVF9ESVJfT1JJR0lOQUxdKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoISh0ZXN0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjdC0+c3RhdHVzKSkpCisJCWlmIChzZXFfcHJpbnRmKHMsICJbVU5SRVBMSUVEXSAiKSkKKwkJCXJldHVybiAtRU5PU1BDOworCisJaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUsCisJCQlsM3Byb3RvLCBsNHByb3RvKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKyAJaWYgKHNlcV9wcmludF9jb3VudGVycyhzLCAmY3QtPmNvdW50ZXJzW0lQX0NUX0RJUl9SRVBMWV0pKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICh0ZXN0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKSkKKwkJaWYgKHNlcV9wcmludGYocywgIltBU1NVUkVEXSAiKSkKKwkJCXJldHVybiAtRU5PU1BDOworCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCisJaWYgKHNlcV9wcmludGYocywgIm1hcms9JXUgIiwgY3QtPm1hcmspKQorCQlyZXR1cm4gLUVOT1NQQzsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCisJaWYgKHNlcV9wcmludGYocywgInNlY21hcms9JXUgIiwgY3QtPnNlY21hcmspKQorCQlyZXR1cm4gLUVOT1NQQzsKKyNlbmRpZgorCisJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gY3Rfc2VxX3N0YXJ0LAorCS5uZXh0ICA9IGN0X3NlcV9uZXh0LAorCS5zdG9wICA9IGN0X3NlcV9zdG9wLAorCS5zaG93ICA9IGN0X3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IGN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0OworCWludCByZXQ7CisKKwlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdF9pdGVyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZjdF9zZXFfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCXNlcSAgICAgICAgICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzZXEtPnByaXZhdGUgPSBzdDsKKwltZW1zZXQoc3QsIDAsIHNpemVvZihzdHJ1Y3QgY3RfaXRlcl9zdGF0ZSkpOworCXJldHVybiByZXQ7CitvdXRfZnJlZToKKwlrZnJlZShzdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY3RfZmlsZV9vcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IGN0X29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCit9OworCisvKiBleHBlY3RzICovCitzdGF0aWMgdm9pZCAqZXhwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmUgPSAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0OworCWxvZmZfdCBpOworCisJLyogc3RyYW5nZSBzZXFfZmlsZSBhcGkgY2FsbHMgc3RvcCBldmVuIGlmIHdlIGZhaWwsCisJICogdGh1cyB3ZSBuZWVkIHRvIGdyYWIgbG9jayBzaW5jZSBzdG9wIHVubG9ja3MgKi8KKwlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCWlmIChsaXN0X2VtcHR5KGUpKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPD0gKnBvczsgaSsrKSB7CisJCWUgPSBlLT5uZXh0OworCQlpZiAoZSA9PSAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0KQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCAqZXhwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisgCXN0cnVjdCBsaXN0X2hlYWQgKmUgPSB2OworCisJKysqcG9zOworCWUgPSBlLT5uZXh0OworCisJaWYgKGUgPT0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgZXhwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworfQorCitzdGF0aWMgaW50IGV4cF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCA9IHY7CisKKwlpZiAoZXhwLT50dXBsZS5zcmMubDNudW0gIT0gQUZfSU5FVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXhwLT50aW1lb3V0LmZ1bmN0aW9uKQorCQlzZXFfcHJpbnRmKHMsICIlbGQgIiwgdGltZXJfcGVuZGluZygmZXhwLT50aW1lb3V0KQorCQkJICAgPyAobG9uZykoZXhwLT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApOworCWVsc2UKKwkJc2VxX3ByaW50ZihzLCAiLSAiKTsKKworCXNlcV9wcmludGYocywgInByb3RvPSV1ICIsIGV4cC0+dHVwbGUuZHN0LnByb3RvbnVtKTsKKworCXByaW50X3R1cGxlKHMsICZleHAtPnR1cGxlLAorCQkgICAgX19uZl9jdF9sM3Byb3RvX2ZpbmQoZXhwLT50dXBsZS5zcmMubDNudW0pLAorCQkgICAgX19uZl9jdF9sNHByb3RvX2ZpbmQoZXhwLT50dXBsZS5zcmMubDNudW0sCisJCSAgICAJCQkgZXhwLT50dXBsZS5kc3QucHJvdG9udW0pKTsKKwlyZXR1cm4gc2VxX3B1dGMocywgJ1xuJyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZXhwX3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gZXhwX3NlcV9zdGFydCwKKwkubmV4dCA9IGV4cF9zZXFfbmV4dCwKKwkuc3RvcCA9IGV4cF9zZXFfc3RvcCwKKwkuc2hvdyA9IGV4cF9zZXFfc2hvdworfTsKKworc3RhdGljIGludCBleHBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJmV4cF9zZXFfb3BzKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBfZXhwX2ZpbGVfb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBleHBfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UKK307CisKK3N0YXRpYyB2b2lkICpjdF9jcHVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgY3B1OworCisJaWYgKCpwb3MgPT0gMCkKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKworCWZvciAoY3B1ID0gKnBvcy0xOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQorCQkJY29udGludWU7CisJCSpwb3MgPSBjcHUrMTsKKwkJcmV0dXJuICZwZXJfY3B1KG5mX2Nvbm50cmFja19zdGF0LCBjcHUpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqY3RfY3B1X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgY3B1OworCisJZm9yIChjcHUgPSAqcG9zOyBjcHUgPCBOUl9DUFVTOyArK2NwdSkgeworCQlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKQorCQkJY29udGludWU7CisJCSpwb3MgPSBjcHUrMTsKKwkJcmV0dXJuICZwZXJfY3B1KG5mX2Nvbm50cmFja19zdGF0LCBjcHUpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBjdF9jcHVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBpbnQgY3RfY3B1X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXVuc2lnbmVkIGludCBucl9jb25udHJhY2tzID0gYXRvbWljX3JlYWQoJm5mX2Nvbm50cmFja19jb3VudCk7CisJc3RydWN0IGlwX2Nvbm50cmFja19zdGF0ICpzdCA9IHY7CisKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKKwkJc2VxX3ByaW50ZihzZXEsICJlbnRyaWVzICBzZWFyY2hlZCBmb3VuZCBuZXcgaW52YWxpZCBpZ25vcmUgZGVsZXRlIGRlbGV0ZV9saXN0IGluc2VydCBpbnNlcnRfZmFpbGVkIGRyb3AgZWFybHlfZHJvcCBpY21wX2Vycm9yICBleHBlY3RfbmV3IGV4cGVjdF9jcmVhdGUgZXhwZWN0X2RlbGV0ZVxuIik7CisJCXJldHVybiAwOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiJTA4eCAgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAiCisJCQkiJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICAlMDh4ICUwOHggJTA4eCBcbiIsCisJCSAgIG5yX2Nvbm50cmFja3MsCisJCSAgIHN0LT5zZWFyY2hlZCwKKwkJICAgc3QtPmZvdW5kLAorCQkgICBzdC0+bmV3LAorCQkgICBzdC0+aW52YWxpZCwKKwkJICAgc3QtPmlnbm9yZSwKKwkJICAgc3QtPmRlbGV0ZSwKKwkJICAgc3QtPmRlbGV0ZV9saXN0LAorCQkgICBzdC0+aW5zZXJ0LAorCQkgICBzdC0+aW5zZXJ0X2ZhaWxlZCwKKwkJICAgc3QtPmRyb3AsCisJCSAgIHN0LT5lYXJseV9kcm9wLAorCQkgICBzdC0+ZXJyb3IsCisKKwkJICAgc3QtPmV4cGVjdF9uZXcsCisJCSAgIHN0LT5leHBlY3RfY3JlYXRlLAorCQkgICBzdC0+ZXhwZWN0X2RlbGV0ZQorCQkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X2NwdV9zZXFfb3BzID0geworCS5zdGFydCAgPSBjdF9jcHVfc2VxX3N0YXJ0LAorCS5uZXh0ICAgPSBjdF9jcHVfc2VxX25leHQsCisJLnN0b3AgICA9IGN0X2NwdV9zZXFfc3RvcCwKKwkuc2hvdyAgID0gY3RfY3B1X3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBjdF9jcHVfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZjdF9jcHVfc2VxX29wcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGN0X2NwdV9zZXFfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gY3RfY3B1X3NlcV9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorfTsKKworaW50IF9faW5pdCBuZl9jb25udHJhY2tfaXB2NF9jb21wYXRfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYywgKnByb2NfZXhwLCAqcHJvY19zdGF0OworCisJcHJvYyA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCJpcF9jb25udHJhY2siLCAwNDQwLCAmY3RfZmlsZV9vcHMpOworCWlmICghcHJvYykKKwkJZ290byBlcnIxOworCisJcHJvY19leHAgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIsIDA0NDAsCisJCQkJCSZpcF9leHBfZmlsZV9vcHMpOworCWlmICghcHJvY19leHApCisJCWdvdG8gZXJyMjsKKworCXByb2Nfc3RhdCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJpcF9jb25udHJhY2siLCBTX0lSVUdPLCBwcm9jX25ldF9zdGF0KTsKKwlpZiAoIXByb2Nfc3RhdCkKKwkJZ290byBlcnIzOworCisJcHJvY19zdGF0LT5wcm9jX2ZvcHMgPSAmY3RfY3B1X3NlcV9mb3BzOworCXByb2Nfc3RhdC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworCXJldHVybiAwOworCitlcnIzOgorCXByb2NfbmV0X3JlbW92ZSgiaXBfY29ubnRyYWNrX2V4cGVjdCIpOworZXJyMjoKKwlwcm9jX25ldF9yZW1vdmUoImlwX2Nvbm50cmFjayIpOworZXJyMToKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2lwdjRfY29tcGF0X2Zpbmkodm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeSgiaXBfY29ubnRyYWNrIiwgcHJvY19uZXRfc3RhdCk7CisJcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2tfZXhwZWN0Iik7CisJcHJvY19uZXRfcmVtb3ZlKCJpcF9jb25udHJhY2siKTsKK30KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKaW5kZXggNzkwZjAwZC4uZGI5ZTdjNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMKQEAgLTIyLDEwICsyMiwxMCBAQAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KLSNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAKLXVuc2lnbmVkIGxvbmcgbmZfY3RfaWNtcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mX2N0X2ljbXBfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAqSFo7CiAKICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQlzdHJ1Y3QgaWNtcGhkciBpY21wOwogCQlzdHJ1Y3QgaXBoZHIgaXA7CiAJfSBfaW4sICppbnNpZGU7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqaW5uZXJwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmlubmVycHJvdG87CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCWludCBkYXRhb2ZmOwogCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJfQogCi0JaW5uZXJwcm90byA9IF9fbmZfY3RfcHJvdG9fZmluZChQRl9JTkVULCBpbnNpZGUtPmlwLnByb3RvY29sKTsKKwlpbm5lcnByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQoUEZfSU5FVCwgaW5zaWRlLT5pcC5wcm90b2NvbCk7CiAJZGF0YW9mZiA9IHNrYi0+bmguaXBoLT5paGwqNCArIHNpemVvZihpbnNpZGUtPmljbXApOwogCS8qIEFyZSB0aGV5IHRhbGtpbmcgYWJvdXQgb25lIG9mIG91ciBjb25uZWN0aW9ucz8gKi8KIAlpZiAoIW5mX2N0X2dldF90dXBsZShza2IsIGRhdGFvZmYsIGRhdGFvZmYgKyBpbnNpZGUtPmlwLmlobCo0LCBQRl9JTkVULApAQCAtMzExLDcgKzMxMSw3IEBACiAJdHVwbGUtPmRzdC51LmljbXAuY29kZSA9CiAJCQkqKHVfaW50OF90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPX0lDTVBfQ09ERS0xXSk7CiAJdHVwbGUtPnNyYy51LmljbXAuaWQgPQotCQkJKih1X2ludDE2X3QgKilORkFfREFUQSh0YltDVEFfUFJPVE9fSUNNUF9JRC0xXSk7CisJCQkqKF9fYmUxNiAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19JQ01QX0lELTFdKTsKIAogCWlmICh0dXBsZS0+ZHN0LnUuaWNtcC50eXBlID49IHNpemVvZihpbnZtYXApCiAJICAgIHx8ICFpbnZtYXBbdHVwbGUtPmRzdC51LmljbXAudHlwZV0pCkBAIC0zMjEsMTEgKzMyMSw0MiBAQAogfQogI2VuZGlmCiAKLXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX2ljbXAgPQorI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaWNtcF9zeXNjdGxfaGVhZGVyOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaWNtcF9zeXNjdGxfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VULAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2ljbXBfdGltZW91dCIsCisJCS5kYXRhCQk9ICZuZl9jdF9pY21wX3RpbWVvdXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisgICAgICAgIHsKKwkJLmN0bF9uYW1lID0gMAorCX0KK307CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaWNtcF9jb21wYXRfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VULAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX2ljbXBfdGltZW91dCIsCisJCS5kYXRhCQk9ICZuZl9jdF9pY21wX3RpbWVvdXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisgICAgICAgIHsKKwkJLmN0bF9uYW1lID0gMAorCX0KK307CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCAqLworI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2ljbXAgPQogewotCS5saXN0CQkJPSB7IE5VTEwsIE5VTEwgfSwKIAkubDNwcm90bwkJPSBQRl9JTkVULAotCS5wcm90bwkJCT0gSVBQUk9UT19JQ01QLAorCS5sNHByb3RvCQk9IElQUFJPVE9fSUNNUCwKIAkubmFtZQkJCT0gImljbXAiLAogCS5wa3RfdG9fdHVwbGUJCT0gaWNtcF9wa3RfdG9fdHVwbGUsCiAJLmludmVydF90dXBsZQkJPSBpY21wX2ludmVydF90dXBsZSwKQEAgLTM0MSw2ICszNzIsMTIgQEAKIAkudHVwbGVfdG9fbmZhdHRyCT0gaWNtcF90dXBsZV90b19uZmF0dHIsCiAJLm5mYXR0cl90b190dXBsZQk9IGljbXBfbmZhdHRyX3RvX3R1cGxlLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5jdGxfdGFibGVfaGVhZGVyCT0gJmljbXBfc3lzY3RsX2hlYWRlciwKKwkuY3RsX3RhYmxlCQk9IGljbXBfc3lzY3RsX3RhYmxlLAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQKKwkuY3RsX2NvbXBhdF90YWJsZQk9IGljbXBfY29tcGF0X3N5c2N0bF90YWJsZSwKKyNlbmRpZgorI2VuZGlmCiB9OwotCi1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19sNHByb3RvX2ljbXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9hbWFuZGEuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfYW1hbmRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxNzA5OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfYW1hbmRhLmMKQEAgLTAsMCArMSw3OCBAQAorLyogQW1hbmRhIGV4dGVuc2lvbiBmb3IgVENQIE5BVCBhbHRlcmF0aW9uLgorICogKEMpIDIwMDIgYnkgQnJpYW4gSi4gTXVycmVsbCA8bmV0ZmlsdGVyQGludGVybGlueC5iYy5jYT4KKyAqIGJhc2VkIG9uIGEgY29weSBvZiBIVydzIGlwX25hdF9pcmMuYyBhcyB3ZWxsIGFzIG90aGVyIG1vZHVsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5oPgorCitNT0RVTEVfQVVUSE9SKCJCcmlhbiBKLiBNdXJyZWxsIDxuZXRmaWx0ZXJAaW50ZXJsaW54LmJjLmNhPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbWFuZGEgTkFUIGhlbHBlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcF9uYXRfYW1hbmRhIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCWNoYXIgYnVmZmVyW3NpemVvZigiNjU1MzUiKV07CisJdV9pbnQxNl90IHBvcnQ7CisJdW5zaWduZWQgaW50IHJldDsKKworCS8qIENvbm5lY3Rpb24gY29tZXMgZnJvbSBjbGllbnQuICovCisJZXhwLT5zYXZlZF9wcm90by50Y3AucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQ7CisJZXhwLT5kaXIgPSBJUF9DVF9ESVJfT1JJR0lOQUw7CisKKwkvKiBXaGVuIHlvdSBzZWUgdGhlIHBhY2tldCwgd2UgbmVlZCB0byBOQVQgaXQgdGhlIHNhbWUgYXMgdGhlCisJICogdGhpcyBvbmUgKGllLiBzYW1lIElQOiBpdCB3aWxsIGJlIFRDUCBhbmQgbWFzdGVyIGlzIFVEUCkuICovCisJZXhwLT5leHBlY3RmbiA9IG5mX25hdF9mb2xsb3dfbWFzdGVyOworCisJLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KKwlmb3IgKHBvcnQgPSBudG9ocyhleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0KTsgcG9ydCAhPSAwOyBwb3J0KyspIHsKKwkJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChwb3J0ID09IDApCisJCXJldHVybiBORl9EUk9QOworCisJc3ByaW50ZihidWZmZXIsICIldSIsIHBvcnQpOworCXJldCA9IG5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChwc2tiLCBleHAtPm1hc3RlciwgY3RpbmZvLAorCQkJCSAgICAgICBtYXRjaG9mZiwgbWF0Y2hsZW4sCisJCQkJICAgICAgIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworCWlmIChyZXQgIT0gTkZfQUNDRVBUKQorCQluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9uYXRfYW1hbmRhX2Zpbmkodm9pZCkKK3sKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X2FtYW5kYV9ob29rLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbmZfbmF0X2FtYW5kYV9pbml0KHZvaWQpCit7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X2FtYW5kYV9ob29rLCBoZWxwKTsKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobmZfbmF0X2FtYW5kYV9pbml0KTsKK21vZHVsZV9leGl0KG5mX25hdF9hbWFuZGFfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YTkyMjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtMCwwICsxLDY0NyBAQAorLyogTkFUIGZvciBuZXRmaWx0ZXI7IHNoYXJlZCB3aXRoIGNvbXBhdGliaWxpdHkgbGF5ZXIuICovCisKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDYgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC9pY21wLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPiAgLyogRm9yIHRjcF9wcm90IGluIGdldG9yaWdkc3QgKi8KKyNpbmNsdWRlIDxsaW51eC9pY21wLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorCisjaWYgMAorI2RlZmluZSBERUJVR1AgcHJpbnRrCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfUldMT0NLKG5mX25hdF9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90byA9IE5VTEw7CisKKy8qIENhbGN1bGF0ZWQgYXQgaW5pdCBiYXNlZCBvbiBtZW1vcnkgc2l6ZSAqLworc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfaHRhYmxlX3NpemU7CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpieXNvdXJjZTsKKworI2RlZmluZSBNQVhfSVBfTkFUX1BST1RPIDI1Ngorc3RhdGljIHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKm5mX25hdF9wcm90b3NbTUFYX0lQX05BVF9QUk9UT107CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mX25hdF9wcm90b2NvbCAqCitfX25mX25hdF9wcm90b19maW5kKHVfaW50OF90IHByb3RvbnVtKQoreworCXJldHVybiBuZl9uYXRfcHJvdG9zW3Byb3RvbnVtXTsKK30KKworc3RydWN0IG5mX25hdF9wcm90b2NvbCAqCituZl9uYXRfcHJvdG9fZmluZF9nZXQodV9pbnQ4X3QgcHJvdG9udW0pCit7CisJc3RydWN0IG5mX25hdF9wcm90b2NvbCAqcDsKKworCS8qIHdlIG5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIHRvIG1ha2Ugc3VyZSAncCcgZG9lc24ndCBnZXQKKwkgKiByZW1vdmVkIHVudGlsIHdlJ3ZlIGdyYWJiZWQgdGhlIHJlZmVyZW5jZSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCXAgPSBfX25mX25hdF9wcm90b19maW5kKHByb3RvbnVtKTsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKKwkJcCA9ICZuZl9uYXRfdW5rbm93bl9wcm90b2NvbDsKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJcmV0dXJuIHA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHJvdG9fZmluZF9nZXQpOworCit2b2lkCituZl9uYXRfcHJvdG9fcHV0KHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnApCit7CisJbW9kdWxlX3B1dChwLT5tZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHJvdG9fcHV0KTsKKworLyogV2Uga2VlcCBhbiBleHRyYSBoYXNoIGZvciBlYWNoIGNvbm50cmFjaywgZm9yIGZhc3Qgc2VhcmNoaW5nLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK2hhc2hfYnlfc3JjKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCS8qIE9yaWdpbmFsIHNyYywgdG8gZW5zdXJlIHdlIG1hcCBpdCBjb25zaXN0ZW50bHkgaWYgcG9zcy4gKi8KKwlyZXR1cm4gamhhc2hfM3dvcmRzKChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUzLmlwLCB0dXBsZS0+c3JjLnUuYWxsLAorCQkJICAgIHR1cGxlLT5kc3QucHJvdG9udW0sIDApICUgbmZfbmF0X2h0YWJsZV9zaXplOworfQorCisvKiBOb29uZSB1c2luZyBjb25udHJhY2sgYnkgdGhlIHRpbWUgdGhpcyBjYWxsZWQuICovCitzdGF0aWMgdm9pZCBuZl9uYXRfY2xlYW51cF9jb25udHJhY2soc3RydWN0IG5mX2Nvbm4gKmNvbm4pCit7CisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQ7CisJaWYgKCEoY29ubi0+c3RhdHVzICYgSVBTX05BVF9ET05FX01BU0spKQorCQlyZXR1cm47CisKKwluYXQgPSBuZmN0X25hdChjb25uKTsKKwl3cml0ZV9sb2NrX2JoKCZuZl9uYXRfbG9jayk7CisJbGlzdF9kZWwoJm5hdC0+aW5mby5ieXNvdXJjZSk7CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9uYXRfbG9jayk7Cit9CisKKy8qIElzIHRoaXMgdHVwbGUgYWxyZWFkeSB0YWtlbj8gKG5vdCBieSB1cykgKi8KK2ludAorbmZfbmF0X3VzZWRfdHVwbGUoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmlnbm9yZWRfY29ubnRyYWNrKQoreworCS8qIENvbm50cmFjayB0cmFja2luZyBkb2Vzbid0IGtlZXAgdHJhY2sgb2Ygb3V0Z29pbmcgdHVwbGVzOyBvbmx5CisJICAgaW5jb21pbmcgb25lcy4gIE5BVCBtZWFucyB0aGV5IGRvbid0IGhhdmUgYSBmaXhlZCBtYXBwaW5nLAorCSAgIHNvIHdlIGludmVydCB0aGUgdHVwbGUgYW5kIGxvb2sgZm9yIHRoZSBpbmNvbWluZyByZXBseS4KKworCSAgIFdlIGNvdWxkIGtlZXAgYSBzZXBhcmF0ZSBoYXNoIGlmIHRoaXMgcHJvdmVzIHRvbyBzbG93LiAqLworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgcmVwbHk7CisKKwluZl9jdF9pbnZlcnRfdHVwbGVwcigmcmVwbHksIHR1cGxlKTsKKwlyZXR1cm4gbmZfY29ubnRyYWNrX3R1cGxlX3Rha2VuKCZyZXBseSwgaWdub3JlZF9jb25udHJhY2spOworfQorRVhQT1JUX1NZTUJPTChuZl9uYXRfdXNlZF90dXBsZSk7CisKKy8qIElmIHdlIHNvdXJjZSBtYXAgdGhpcyB0dXBsZSBzbyByZXBseSBsb29rcyBsaWtlIHJlcGx5X3R1cGxlLCB3aWxsCisgKiB0aGF0IG1lZXQgdGhlIGNvbnN0cmFpbnRzIG9mIHJhbmdlLiAqLworc3RhdGljIGludAoraW5fcmFuZ2UoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQoreworCXN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvOworCisJcHJvdG8gPSBfX25mX25hdF9wcm90b19maW5kKHR1cGxlLT5kc3QucHJvdG9udW0pOworCS8qIElmIHdlIGFyZSBzdXBwb3NlZCB0byBtYXAgSVBzLCB0aGVuIHdlIG11c3QgYmUgaW4gdGhlCisJICAgcmFuZ2Ugc3BlY2lmaWVkLCBvdGhlcndpc2UgbGV0IHRoaXMgZHJhZyB1cyBvbnRvIGEgbmV3IHNyYyBJUC4gKi8KKwlpZiAocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX01BUF9JUFMpIHsKKwkJaWYgKG50b2hsKHR1cGxlLT5zcmMudTMuaXApIDwgbnRvaGwocmFuZ2UtPm1pbl9pcCkgfHwKKwkJICAgIG50b2hsKHR1cGxlLT5zcmMudTMuaXApID4gbnRvaGwocmFuZ2UtPm1heF9pcCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSB8fAorCSAgICBwcm90by0+aW5fcmFuZ2UodHVwbGUsIElQX05BVF9NQU5JUF9TUkMsCisJCQkgICAgJnJhbmdlLT5taW4sICZyYW5nZS0+bWF4KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3NhbWVfc3JjKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKKwkgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdDsKKworCXQgPSAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlOworCXJldHVybiAodC0+ZHN0LnByb3RvbnVtID09IHR1cGxlLT5kc3QucHJvdG9udW0gJiYKKwkJdC0+c3JjLnUzLmlwID09IHR1cGxlLT5zcmMudTMuaXAgJiYKKwkJdC0+c3JjLnUuYWxsID09IHR1cGxlLT5zcmMudS5hbGwpOworfQorCisvKiBPbmx5IGNhbGxlZCBmb3IgU1JDIG1hbmlwICovCitzdGF0aWMgaW50CitmaW5kX2FwcHJvcHJpYXRlX3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpyZXN1bHQsCisJCSAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCit7CisJdW5zaWduZWQgaW50IGggPSBoYXNoX2J5X3NyYyh0dXBsZSk7CisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQ7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCisJcmVhZF9sb2NrX2JoKCZuZl9uYXRfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuYXQsICZieXNvdXJjZVtoXSwgaW5mby5ieXNvdXJjZSkgeworCQljdCA9IChzdHJ1Y3QgbmZfY29ubiAqKSgoY2hhciAqKW5hdCAtIG9mZnNldG9mKHN0cnVjdCBuZl9jb25uLCBkYXRhKSk7CisJCWlmIChzYW1lX3NyYyhjdCwgdHVwbGUpKSB7CisJCQkvKiBDb3B5IHNvdXJjZSBwYXJ0IGZyb20gcmVwbHkgdHVwbGUuICovCisJCQluZl9jdF9pbnZlcnRfdHVwbGVwcihyZXN1bHQsCisJCQkJICAgICAgICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOworCQkJcmVzdWx0LT5kc3QgPSB0dXBsZS0+ZHN0OworCisJCQlpZiAoaW5fcmFuZ2UocmVzdWx0LCByYW5nZSkpIHsKKwkJCQlyZWFkX3VubG9ja19iaCgmbmZfbmF0X2xvY2spOworCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJfQorCXJlYWRfdW5sb2NrX2JoKCZuZl9uYXRfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZvciBbRlVUVVJFXSBmcmFnbWVudGF0aW9uIGhhbmRsaW5nLCB3ZSB3YW50IHRoZSBsZWFzdC11c2VkCisgICBzcmMtaXAvZHN0LWlwL3Byb3RvIHRyaXBsZS4gIEZhaXJuZXNzIGRvZXNuJ3QgY29tZSBpbnRvIGl0LiAgVGh1cworICAgaWYgdGhlIHJhbmdlIHNwZWNpZmllcyAxLjIuMy40IHBvcnRzIDEwMDAwLTEwMDA1IGFuZCAxLjIuMy41IHBvcnRzCisgICAxLTY1NTM1LCB3ZSBkb24ndCBkbyBwcm8tcmF0YSBhbGxvY2F0aW9uIGJhc2VkIG9uIHBvcnRzOyB3ZSBjaG9vc2UKKyAgIHRoZSBpcCB3aXRoIHRoZSBsb3dlc3Qgc3JjLWlwL2RzdC1pcC9wcm90byB1c2FnZS4KKyovCitzdGF0aWMgdm9pZAorZmluZF9iZXN0X2lwc19wcm90byhzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCit7CisJX19iZTMyICp2YXJfaXBwOworCS8qIEhvc3Qgb3JkZXIgKi8KKwl1X2ludDMyX3QgbWluaXAsIG1heGlwLCBqOworCisJLyogTm8gSVAgbWFwcGluZz8gIERvIG5vdGhpbmcuICovCisJaWYgKCEocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX01BUF9JUFMpKQorCQlyZXR1cm47CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCXZhcl9pcHAgPSAmdHVwbGUtPnNyYy51My5pcDsKKwllbHNlCisJCXZhcl9pcHAgPSAmdHVwbGUtPmRzdC51My5pcDsKKworCS8qIEZhc3QgcGF0aDogb25seSBvbmUgY2hvaWNlLiAqLworCWlmIChyYW5nZS0+bWluX2lwID09IHJhbmdlLT5tYXhfaXApIHsKKwkJKnZhcl9pcHAgPSByYW5nZS0+bWluX2lwOworCQlyZXR1cm47CisJfQorCisJLyogSGFzaGluZyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIElQcyBnaXZlcyBhIGZhaXJseSBldmVuCisJICogc3ByZWFkIGluIHByYWN0aWNlIChpZiB0aGVyZSBhcmUgYSBzbWFsbCBudW1iZXIgb2YgSVBzCisJICogaW52b2x2ZWQsIHRoZXJlIHVzdWFsbHkgYXJlbid0IHRoYXQgbWFueSBjb25uZWN0aW9ucworCSAqIGFueXdheSkuICBUaGUgY29uc2lzdGVuY3kgbWVhbnMgdGhhdCBzZXJ2ZXJzIHNlZSB0aGUgc2FtZQorCSAqIGNsaWVudCBjb21pbmcgZnJvbSB0aGUgc2FtZSBJUCAoc29tZSBJbnRlcm5ldCBCYW5raW5nIHNpdGVzCisJICogbGlrZSB0aGlzKSwgZXZlbiBhY3Jvc3MgcmVib290cy4gKi8KKwltaW5pcCA9IG50b2hsKHJhbmdlLT5taW5faXApOworCW1heGlwID0gbnRvaGwocmFuZ2UtPm1heF9pcCk7CisJaiA9IGpoYXNoXzJ3b3JkcygoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy51My5pcCwKKwkJCSAoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCwgMCk7CisJKnZhcl9pcHAgPSBodG9ubChtaW5pcCArIGogJSAobWF4aXAgLSBtaW5pcCArIDEpKTsKK30KKworLyogTWFuaXB1bGF0ZSB0aGUgdHVwbGUgaW50byB0aGUgcmFuZ2UgZ2l2ZW4uICBGb3IgTkZfSVBfUE9TVF9ST1VUSU5HLAorICogd2UgY2hhbmdlIHRoZSBzb3VyY2UgdG8gbWFwIGludG8gdGhlIHJhbmdlLiAgRm9yIE5GX0lQX1BSRV9ST1VUSU5HCisgKiBhbmQgTkZfSVBfTE9DQUxfT1VULCB3ZSBjaGFuZ2UgdGhlIGRlc3RpbmF0aW9uIHRvIG1hcCBpbnRvIHRoZQorICogcmFuZ2UuICBJdCBtaWdodCBub3QgYmUgcG9zc2libGUgdG8gZ2V0IGEgdW5pcXVlIHR1cGxlLCBidXQgd2UgdHJ5LgorICogQXQgd29yc3QgKG9yIGlmIHdlIHJhY2UpLCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgZmluYWwgZHVwbGljYXRlIGluCisgKiBfX2lwX2Nvbm50cmFja19jb25maXJtIGFuZCBkcm9wIHRoZSBwYWNrZXQuICovCitzdGF0aWMgdm9pZAorZ2V0X3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWdfdHVwbGUsCisJCSBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKKwkJIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlKQoreworCXN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvOworCisJLyogMSkgSWYgdGhpcyBzcmNpcC9wcm90by9zcmMtcHJvdG8tcGFydCBpcyBjdXJyZW50bHkgbWFwcGVkLAorCSAgIGFuZCB0aGF0IHNhbWUgbWFwcGluZyBnaXZlcyBhIHVuaXF1ZSB0dXBsZSB3aXRoaW4gdGhlIGdpdmVuCisJICAgcmFuZ2UsIHVzZSB0aGF0LgorCisJICAgVGhpcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBzb3VyY2UgKGllLiBOQVQvbWFzcSkgbWFwcGluZ3MuCisJICAgU28gZmFyLCB3ZSBkb24ndCBkbyBsb2NhbCBzb3VyY2UgbWFwcGluZ3MsIHNvIG11bHRpcGxlCisJICAgbWFuaXBzIG5vdCBhbiBpc3N1ZS4gICovCisJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfU1JDKSB7CisJCWlmIChmaW5kX2FwcHJvcHJpYXRlX3NyYyhvcmlnX3R1cGxlLCB0dXBsZSwgcmFuZ2UpKSB7CisJCQlERUJVR1AoImdldF91bmlxdWVfdHVwbGU6IEZvdW5kIGN1cnJlbnQgc3JjIG1hcFxuIik7CisJCQlpZiAoIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCisJCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogMikgU2VsZWN0IHRoZSBsZWFzdC11c2VkIElQL3Byb3RvIGNvbWJpbmF0aW9uIGluIHRoZSBnaXZlbgorCSAgIHJhbmdlLiAqLworCSp0dXBsZSA9ICpvcmlnX3R1cGxlOworCWZpbmRfYmVzdF9pcHNfcHJvdG8odHVwbGUsIHJhbmdlLCBjdCwgbWFuaXB0eXBlKTsKKworCS8qIDMpIFRoZSBwZXItcHJvdG9jb2wgcGFydCBvZiB0aGUgbWFuaXAgaXMgbWFkZSB0byBtYXAgaW50bworCSAgIHRoZSByYW5nZSB0byBtYWtlIGEgdW5pcXVlIHR1cGxlLiAqLworCisJcHJvdG8gPSBuZl9uYXRfcHJvdG9fZmluZF9nZXQob3JpZ190dXBsZS0+ZHN0LnByb3RvbnVtKTsKKworCS8qIE9ubHkgYm90aGVyIG1hcHBpbmcgaWYgaXQncyBub3QgYWxyZWFkeSBpbiByYW5nZSBhbmQgdW5pcXVlICovCisJaWYgKCghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpIHx8CisJICAgICBwcm90by0+aW5fcmFuZ2UodHVwbGUsIG1hbmlwdHlwZSwgJnJhbmdlLT5taW4sICZyYW5nZS0+bWF4KSkgJiYKKwkgICAgIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpIHsKKwkJbmZfbmF0X3Byb3RvX3B1dChwcm90byk7CisJCXJldHVybjsKKwl9CisKKwkvKiBMYXN0IGNoYW5nZTogZ2V0IHByb3RvY29sIHRvIHRyeSB0byBvYnRhaW4gdW5pcXVlIHR1cGxlLiAqLworCXByb3RvLT51bmlxdWVfdHVwbGUodHVwbGUsIHJhbmdlLCBtYW5pcHR5cGUsIGN0KTsKKworCW5mX25hdF9wcm90b19wdXQocHJvdG8pOworfQorCit1bnNpZ25lZCBpbnQKK25mX25hdF9zZXR1cF9pbmZvKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKKwkJICB1bnNpZ25lZCBpbnQgaG9va251bSkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGN1cnJfdHVwbGUsIG5ld190dXBsZTsKKwlzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdCA9IG5mY3RfbmF0KGN0KTsKKwlzdHJ1Y3QgbmZfbmF0X2luZm8gKmluZm8gPSAmbmF0LT5pbmZvOworCWludCBoYXZlX3RvX2hhc2ggPSAhKGN0LT5zdGF0dXMgJiBJUFNfTkFUX0RPTkVfTUFTSyk7CisJZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUgPSBIT09LMk1BTklQKGhvb2tudW0pOworCisJTkZfQ1RfQVNTRVJUKGhvb2tudW0gPT0gTkZfSVBfUFJFX1JPVVRJTkcgfHwKKwkJICAgICBob29rbnVtID09IE5GX0lQX1BPU1RfUk9VVElORyB8fAorCQkgICAgIGhvb2tudW0gPT0gTkZfSVBfTE9DQUxfSU4gfHwKKwkJICAgICBob29rbnVtID09IE5GX0lQX0xPQ0FMX09VVCk7CisJQlVHX09OKG5mX25hdF9pbml0aWFsaXplZChjdCwgbWFuaXB0eXBlKSk7CisKKwkvKiBXaGF0IHdlJ3ZlIGdvdCB3aWxsIGxvb2sgbGlrZSBpbnZlcnNlIG9mIHJlcGx5LiBOb3JtYWxseQorCSAgIHRoaXMgaXMgd2hhdCBpcyBpbiB0aGUgY29ubnRyYWNrLCBleGNlcHQgZm9yIHByaW9yCisJICAgbWFuaXB1bGF0aW9ucyAoZnV0dXJlIG9wdGltaXphdGlvbjogaWYgbnVtX21hbmlwcyA9PSAwLAorCSAgIG9yaWdfdHAgPQorCSAgIGNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpICovCisJbmZfY3RfaW52ZXJ0X3R1cGxlcHIoJmN1cnJfdHVwbGUsCisJCQkgICAgICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOworCisJZ2V0X3VuaXF1ZV90dXBsZSgmbmV3X3R1cGxlLCAmY3Vycl90dXBsZSwgcmFuZ2UsIGN0LCBtYW5pcHR5cGUpOworCisJaWYgKCFuZl9jdF90dXBsZV9lcXVhbCgmbmV3X3R1cGxlLCAmY3Vycl90dXBsZSkpIHsKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSByZXBseTsKKworCQkvKiBBbHRlciBjb25udHJhY2sgdGFibGUgc28gd2lsbCByZWNvZ25pemUgcmVwbGllcy4gKi8KKwkJbmZfY3RfaW52ZXJ0X3R1cGxlcHIoJnJlcGx5LCAmbmV3X3R1cGxlKTsKKwkJbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KGN0LCAmcmVwbHkpOworCisJCS8qIE5vbi1hdG9taWM6IHdlIG93biB0aGlzIGF0IHRoZSBtb21lbnQuICovCisJCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJCWN0LT5zdGF0dXMgfD0gSVBTX1NSQ19OQVQ7CisJCWVsc2UKKwkJCWN0LT5zdGF0dXMgfD0gSVBTX0RTVF9OQVQ7CisJfQorCisJLyogUGxhY2UgaW4gc291cmNlIGhhc2ggaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZS4gKi8KKwlpZiAoaGF2ZV90b19oYXNoKSB7CisJCXVuc2lnbmVkIGludCBzcmNoYXNoOworCisJCXNyY2hhc2ggPSBoYXNoX2J5X3NyYygmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKwkJd3JpdGVfbG9ja19iaCgmbmZfbmF0X2xvY2spOworCQlsaXN0X2FkZCgmaW5mby0+Ynlzb3VyY2UsICZieXNvdXJjZVtzcmNoYXNoXSk7CisJCXdyaXRlX3VubG9ja19iaCgmbmZfbmF0X2xvY2spOworCX0KKworCS8qIEl0J3MgZG9uZS4gKi8KKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9EU1QpCisJCXNldF9iaXQoSVBTX0RTVF9OQVRfRE9ORV9CSVQsICZjdC0+c3RhdHVzKTsKKwllbHNlCisJCXNldF9iaXQoSVBTX1NSQ19OQVRfRE9ORV9CSVQsICZjdC0+c3RhdHVzKTsKKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CitFWFBPUlRfU1lNQk9MKG5mX25hdF9zZXR1cF9pbmZvKTsKKworLyogUmV0dXJucyB0cnVlIGlmIHN1Y2NlZWRlZC4gKi8KK3N0YXRpYyBpbnQKK21hbmlwX3BrdCh1X2ludDE2X3QgcHJvdG8sCisJICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCisJICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0YXJnZXQsCisJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpwOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCBpcGhkcm9mZiArIHNpemVvZigqaXBoKSkpCisJCXJldHVybiAwOworCisJaXBoID0gKHZvaWQgKikoKnBza2IpLT5kYXRhICsgaXBoZHJvZmY7CisKKwkvKiBNYW5pcHVsYXRlIHByb3Rjb2wgcGFydC4gKi8KKwlwID0gbmZfbmF0X3Byb3RvX2ZpbmRfZ2V0KHByb3RvKTsKKwlpZiAoIXAtPm1hbmlwX3BrdChwc2tiLCBpcGhkcm9mZiwgdGFyZ2V0LCBtYW5pcHR5cGUpKSB7CisJCW5mX25hdF9wcm90b19wdXQocCk7CisJCXJldHVybiAwOworCX0KKwluZl9uYXRfcHJvdG9fcHV0KHApOworCisJaXBoID0gKHZvaWQgKikoKnBza2IpLT5kYXRhICsgaXBoZHJvZmY7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpIHsKKwkJbmZfY3N1bV9yZXBsYWNlNCgmaXBoLT5jaGVjaywgaXBoLT5zYWRkciwgdGFyZ2V0LT5zcmMudTMuaXApOworCQlpcGgtPnNhZGRyID0gdGFyZ2V0LT5zcmMudTMuaXA7CisJfSBlbHNlIHsKKwkJbmZfY3N1bV9yZXBsYWNlNCgmaXBoLT5jaGVjaywgaXBoLT5kYWRkciwgdGFyZ2V0LT5kc3QudTMuaXApOworCQlpcGgtPmRhZGRyID0gdGFyZ2V0LT5kc3QudTMuaXA7CisJfQorCXJldHVybiAxOworfQorCisvKiBEbyBwYWNrZXQgbWFuaXB1bGF0aW9ucyBhY2NvcmRpbmcgdG8gbmZfbmF0X3NldHVwX2luZm8uICovCit1bnNpZ25lZCBpbnQgbmZfbmF0X3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKipwc2tiKQoreworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNiaXQ7CisJZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtdHlwZSA9IEhPT0syTUFOSVAoaG9va251bSk7CisKKwlpZiAobXR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJc3RhdHVzYml0ID0gSVBTX1NSQ19OQVQ7CisJZWxzZQorCQlzdGF0dXNiaXQgPSBJUFNfRFNUX05BVDsKKworCS8qIEludmVydCBpZiB0aGlzIGlzIHJlcGx5IGRpci4gKi8KKwlpZiAoZGlyID09IElQX0NUX0RJUl9SRVBMWSkKKwkJc3RhdHVzYml0IF49IElQU19OQVRfTUFTSzsKKworCS8qIE5vbi1hdG9taWM6IHRoZXNlIGJpdHMgZG9uJ3QgY2hhbmdlLiAqLworCWlmIChjdC0+c3RhdHVzICYgc3RhdHVzYml0KSB7CisJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdGFyZ2V0OworCisJCS8qIFdlIGFyZSBhaW1pbmcgdG8gbG9vayBsaWtlIGludmVyc2Ugb2Ygb3RoZXIgZGlyZWN0aW9uLiAqLworCQluZl9jdF9pbnZlcnRfdHVwbGVwcigmdGFyZ2V0LCAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZSk7CisKKwkJaWYgKCFtYW5pcF9wa3QodGFyZ2V0LmRzdC5wcm90b251bSwgcHNrYiwgMCwgJnRhcmdldCwgbXR5cGUpKQorCQkJcmV0dXJuIE5GX0RST1A7CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcGFja2V0KTsKKworLyogRGlyIGlzIGRpcmVjdGlvbiBJQ01QIGlzIGNvbWluZyBmcm9tIChvcHBvc2l0ZSB0byBwYWNrZXQgaXQgY29udGFpbnMpICovCitpbnQgbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24oc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJCQkgIHN0cnVjdCBza19idWZmICoqcHNrYikKK3sKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaWNtcGhkciBpY21wOworCQlzdHJ1Y3QgaXBoZHIgaXA7CisJfSAqaW5zaWRlOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgaW5uZXIsIHRhcmdldDsKKwlpbnQgaGRybGVuID0gKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0OworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXNiaXQ7CisJZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcCA9IEhPT0syTUFOSVAoaG9va251bSk7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsIGhkcmxlbiArIHNpemVvZigqaW5zaWRlKSkpCisJCXJldHVybiAwOworCisJaW5zaWRlID0gKHZvaWQgKikoKnBza2IpLT5kYXRhICsgKCpwc2tiKS0+bmguaXBoLT5paGwqNDsKKworCS8qIFdlJ3JlIGFjdHVhbGx5IGdvaW5nIHRvIG1hbmdsZSBpdCBiZXlvbmQgdHJpdmlhbCBjaGVja3N1bQorCSAgIGFkanVzdG1lbnQsIHNvIG1ha2Ugc3VyZSB0aGUgY3VycmVudCBjaGVja3N1bSBpcyBjb3JyZWN0LiAqLworCWlmIChuZl9pcF9jaGVja3N1bSgqcHNrYiwgaG9va251bSwgaGRybGVuLCAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBNdXN0IGJlIFJFTEFURUQgKi8KKwlORl9DVF9BU1NFUlQoKCpwc2tiKS0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAorCQkgICAgICgqcHNrYiktPm5mY3RpbmZvID09IElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFkpOworCisJLyogUmVkaXJlY3RzIG9uIG5vbi1udWxsIG5hdHMgbXVzdCBiZSBkcm9wcGVkLCBlbHNlIHRoZXknbGwKKyAgICAgICAgICAgc3RhcnQgdGFsa2luZyB0byBlYWNoIG90aGVyIHdpdGhvdXQgb3VyIHRyYW5zbGF0aW9uLCBhbmQgYmUKKyAgICAgICAgICAgY29uZnVzZWQuLi4gLS1SUiAqLworCWlmIChpbnNpZGUtPmljbXAudHlwZSA9PSBJQ01QX1JFRElSRUNUKSB7CisJCS8qIElmIE5BVCBpc24ndCBmaW5pc2hlZCwgYXNzdW1lIGl0IGFuZCBkcm9wLiAqLworCQlpZiAoKGN0LT5zdGF0dXMgJiBJUFNfTkFUX0RPTkVfTUFTSykgIT0gSVBTX05BVF9ET05FX01BU0spCisJCQlyZXR1cm4gMDsKKworCQlpZiAoY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykKKwkJCXJldHVybiAwOworCX0KKworCURFQlVHUCgiaWNtcF9yZXBseV90cmFuc2xhdGlvbjogdHJhbnNsYXRpbmcgZXJyb3IgJXAgbWFucCAldSBkaXIgJXNcbiIsCisJICAgICAgICpwc2tiLCBtYW5pcCwgZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCA/ICJPUklHIiA6ICJSRVBMWSIpOworCisJaWYgKCFuZl9jdF9nZXRfdHVwbGUoKnBza2IsCisJCQkgICAgICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpLAorCQkJICAgICAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsKKwkgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGljbXBoZHIpICsgaW5zaWRlLT5pcC5paGwqNCwKKwkgICAgICAgICAgICAgICAgICAgICAodV9pbnQxNl90KUFGX0lORVQsCisJICAgICAgICAgICAgICAgICAgICAgaW5zaWRlLT5pcC5wcm90b2NvbCwKKwkgICAgICAgICAgICAgICAgICAgICAmaW5uZXIsCisJICAgICAgICAgICAgICAgICAgICAgbDNwcm90bywKKwkJCSAgICAgX19uZl9jdF9sNHByb3RvX2ZpbmQoKHVfaW50MTZfdClQRl9JTkVULAorCQkJICAgICAJCQkgIGluc2lkZS0+aXAucHJvdG9jb2wpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGFuZ2UgaW5uZXIgYmFjayB0byBsb29rIGxpa2UgaW5jb21pbmcgcGFja2V0LiAgV2UgZG8gdGhlCisJICAgb3Bwb3NpdGUgbWFuaXAgb24gdGhpcyBob29rIHRvIG5vcm1hbCwgYmVjYXVzZSBpdCBtaWdodCBub3QKKwkgICBwYXNzIGFsbCBob29rcyAobG9jYWxseS1nZW5lcmF0ZWQgSUNNUCkuICBDb25zaWRlciBpbmNvbWluZworCSAgIHBhY2tldDogUFJFUk9VVElORyAoRFNUIG1hbmlwKSwgcm91dGluZyBwcm9kdWNlcyBJQ01QLCBnb2VzCisJICAgdGhyb3VnaCBQT1NUUk9VVElORyAod2hpY2ggbXVzdCBjb3JyZWN0IHRoZSBEU1QgbWFuaXApLiAqLworCWlmICghbWFuaXBfcGt0KGluc2lkZS0+aXAucHJvdG9jb2wsIHBza2IsCisJCSAgICAgICAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKGluc2lkZS0+aWNtcCksCisJCSAgICAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZSwKKwkJICAgICAgICFtYW5pcCkpCisJCXJldHVybiAwOworCisJaWYgKCgqcHNrYiktPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCS8qIFJlbG9hZGluZyAiaW5zaWRlIiBoZXJlIHNpbmNlIG1hbmlwX3BrdCBpbm5lci4gKi8KKwkJaW5zaWRlID0gKHZvaWQgKikoKnBza2IpLT5kYXRhICsgKCpwc2tiKS0+bmguaXBoLT5paGwqNDsKKwkJaW5zaWRlLT5pY21wLmNoZWNrc3VtID0gMDsKKwkJaW5zaWRlLT5pY21wLmNoZWNrc3VtID0KKwkJCWNzdW1fZm9sZChza2JfY2hlY2tzdW0oKnBza2IsIGhkcmxlbiwKKwkJCQkJICAgICAgICgqcHNrYiktPmxlbiAtIGhkcmxlbiwgMCkpOworCX0KKworCS8qIENoYW5nZSBvdXRlciB0byBsb29rIHRoZSByZXBseSB0byBhbiBpbmNvbWluZyBwYWNrZXQKKwkgKiAocHJvdG8gMCBtZWFucyBkb24ndCBpbnZlcnQgcGVyLXByb3RvIHBhcnQpLiAqLworCWlmIChtYW5pcCA9PSBJUF9OQVRfTUFOSVBfU1JDKQorCQlzdGF0dXNiaXQgPSBJUFNfU1JDX05BVDsKKwllbHNlCisJCXN0YXR1c2JpdCA9IElQU19EU1RfTkFUOworCisJLyogSW52ZXJ0IGlmIHRoaXMgaXMgcmVwbHkgZGlyLiAqLworCWlmIChkaXIgPT0gSVBfQ1RfRElSX1JFUExZKQorCQlzdGF0dXNiaXQgXj0gSVBTX05BVF9NQVNLOworCisJaWYgKGN0LT5zdGF0dXMgJiBzdGF0dXNiaXQpIHsKKwkJbmZfY3RfaW52ZXJ0X3R1cGxlcHIoJnRhcmdldCwgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUpOworCQlpZiAoIW1hbmlwX3BrdCgwLCBwc2tiLCAwLCAmdGFyZ2V0LCBtYW5pcCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9pY21wX3JlcGx5X3RyYW5zbGF0aW9uKTsKKworLyogUHJvdG9jb2wgcmVnaXN0cmF0aW9uLiAqLworaW50IG5mX25hdF9wcm90b2NvbF9yZWdpc3RlcihzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sICpwcm90bykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXdyaXRlX2xvY2tfYmgoJm5mX25hdF9sb2NrKTsKKwlpZiAobmZfbmF0X3Byb3Rvc1twcm90by0+cHJvdG9udW1dICE9ICZuZl9uYXRfdW5rbm93bl9wcm90b2NvbCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwluZl9uYXRfcHJvdG9zW3Byb3RvLT5wcm90b251bV0gPSBwcm90bzsKKyBvdXQ6CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9uYXRfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobmZfbmF0X3Byb3RvY29sX3JlZ2lzdGVyKTsKKworLyogTm9vbmUgc3RvcmVzIHRoZSBwcm90b2NvbCBhbnl3aGVyZTsgc2ltcGx5IGRlbGV0ZSBpdC4gKi8KK3ZvaWQgbmZfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIoc3RydWN0IG5mX25hdF9wcm90b2NvbCAqcHJvdG8pCit7CisJd3JpdGVfbG9ja19iaCgmbmZfbmF0X2xvY2spOworCW5mX25hdF9wcm90b3NbcHJvdG8tPnByb3RvbnVtXSA9ICZuZl9uYXRfdW5rbm93bl9wcm90b2NvbDsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX25hdF9sb2NrKTsKKworCS8qIFNvbWVvbmUgY291bGQgYmUgc3RpbGwgbG9va2luZyBhdCB0aGUgcHJvdG8gaW4gYSBiaC4gKi8KKwlzeW5jaHJvbml6ZV9uZXQoKTsKK30KK0VYUE9SVF9TWU1CT0wobmZfbmF0X3Byb3RvY29sX3VucmVnaXN0ZXIpOworCisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTkspIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOS19NT0RVTEUpCitpbnQKK25mX25hdF9wb3J0X3JhbmdlX3RvX25mYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQoreworCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9OQVRfUE9SVF9NSU4sIHNpemVvZihfX2JlMTYpLAorCQkmcmFuZ2UtPm1pbi50Y3AucG9ydCk7CisJTkZBX1BVVChza2IsIENUQV9QUk9UT05BVF9QT1JUX01BWCwgc2l6ZW9mKF9fYmUxNiksCisJCSZyYW5nZS0+bWF4LnRjcC5wb3J0KTsKKworCXJldHVybiAwOworCituZmF0dHJfZmFpbHVyZToKKwlyZXR1cm4gLTE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcG9ydF9uZmF0dHJfdG9fcmFuZ2UpOworCitpbnQKK25mX25hdF9wb3J0X25mYXR0cl90b19yYW5nZShzdHJ1Y3QgbmZhdHRyICp0YltdLCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIHdlIGhhdmUgdG8gcmV0dXJuIHdoZXRoZXIgd2UgYWN0dWFsbHkgcGFyc2VkIHNvbWV0aGluZyBvciBub3QgKi8KKworCWlmICh0YltDVEFfUFJPVE9OQVRfUE9SVF9NSU4tMV0pIHsKKwkJcmV0ID0gMTsKKwkJcmFuZ2UtPm1pbi50Y3AucG9ydCA9CisJCQkqKF9fYmUxNiAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT05BVF9QT1JUX01JTi0xXSk7CisJfQorCisJaWYgKCF0YltDVEFfUFJPVE9OQVRfUE9SVF9NQVgtMV0pIHsKKwkJaWYgKHJldCkKKwkJCXJhbmdlLT5tYXgudGNwLnBvcnQgPSByYW5nZS0+bWluLnRjcC5wb3J0OworCX0gZWxzZSB7CisJCXJldCA9IDE7CisJCXJhbmdlLT5tYXgudGNwLnBvcnQgPQorCQkJKihfX2JlMTYgKilORkFfREFUQSh0YltDVEFfUFJPVE9OQVRfUE9SVF9NQVgtMV0pOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcG9ydF9yYW5nZV90b19uZmF0dHIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IG5mX25hdF9pbml0KHZvaWQpCit7CisJc2l6ZV90IGk7CisKKwkvKiBMZWF2ZSB0aGVtIHRoZSBzYW1lIGZvciB0aGUgbW9tZW50LiAqLworCW5mX25hdF9odGFibGVfc2l6ZSA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKKworCS8qIE9uZSB2bWFsbG9jIGZvciBib3RoIGhhc2ggdGFibGVzICovCisJYnlzb3VyY2UgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSAqIG5mX25hdF9odGFibGVfc2l6ZSk7CisJaWYgKCFieXNvdXJjZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBTZXcgaW4gYnVpbHRpbiBwcm90b2NvbHMuICovCisJd3JpdGVfbG9ja19iaCgmbmZfbmF0X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBNQVhfSVBfTkFUX1BST1RPOyBpKyspCisJCW5mX25hdF9wcm90b3NbaV0gPSAmbmZfbmF0X3Vua25vd25fcHJvdG9jb2w7CisJbmZfbmF0X3Byb3Rvc1tJUFBST1RPX1RDUF0gPSAmbmZfbmF0X3Byb3RvY29sX3RjcDsKKwluZl9uYXRfcHJvdG9zW0lQUFJPVE9fVURQXSA9ICZuZl9uYXRfcHJvdG9jb2xfdWRwOworCW5mX25hdF9wcm90b3NbSVBQUk9UT19JQ01QXSA9ICZuZl9uYXRfcHJvdG9jb2xfaWNtcDsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX25hdF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBuZl9uYXRfaHRhYmxlX3NpemU7IGkrKykgeworCQlJTklUX0xJU1RfSEVBRCgmYnlzb3VyY2VbaV0pOworCX0KKworCS8qIEZJWE1FOiBNYW4sIHRoaXMgaXMgYSBoYWNrLiAgPFNJR0g+ICovCisJTkZfQ1RfQVNTRVJUKG5mX2Nvbm50cmFja19kZXN0cm95ZWQgPT0gTlVMTCk7CisJbmZfY29ubnRyYWNrX2Rlc3Ryb3llZCA9ICZuZl9uYXRfY2xlYW51cF9jb25udHJhY2s7CisKKwkvKiBJbml0aWFsaXplIGZha2UgY29ubnRyYWNrIHNvIHRoYXQgTkFUIHdpbGwgc2tpcCBpdCAqLworCW5mX2Nvbm50cmFja191bnRyYWNrZWQuc3RhdHVzIHw9IElQU19OQVRfRE9ORV9NQVNLOworCisJbDNwcm90byA9IG5mX2N0X2wzcHJvdG9fZmluZF9nZXQoKHVfaW50MTZfdClBRl9JTkVUKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2xlYXIgTkFUIHNlY3Rpb24gb2YgYWxsIGNvbm50cmFja3MsIGluIGNhc2Ugd2UncmUgbG9hZGVkIGFnYWluLiAqLworc3RhdGljIGludCBjbGVhbl9uYXQoc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQgPSBuZmN0X25hdChpKTsKKworCWlmICghbmF0KQorCQlyZXR1cm4gMDsKKwltZW1zZXQobmF0LCAwLCBzaXplb2YobmF0KSk7CisJaS0+c3RhdHVzICY9IH4oSVBTX05BVF9NQVNLIHwgSVBTX05BVF9ET05FX01BU0sgfCBJUFNfU0VRX0FESlVTVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9uYXRfY2xlYW51cCh2b2lkKQoreworCW5mX2N0X2l0ZXJhdGVfY2xlYW51cCgmY2xlYW5fbmF0LCBOVUxMKTsKKwluZl9jb25udHJhY2tfZGVzdHJveWVkID0gTlVMTDsKKwl2ZnJlZShieXNvdXJjZSk7CisJbmZfY3RfbDNwcm90b19wdXQobDNwcm90byk7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQobmZfbmF0X2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9mdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfZnRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxYjU5OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfZnRwLmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qIEZUUCBleHRlbnNpb24gZm9yIFRDUCBOQVQgYWx0ZXJhdGlvbi4gKi8KKworLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiZnRwIE5BVCBoZWxwZXIiKTsKK01PRFVMRV9BTElBUygiaXBfbmF0X2Z0cCIpOworCisjaWYgMAorI2RlZmluZSBERUJVR1AgcHJpbnRrCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIEZJWE1FOiBUaW1lIG91dD8gLS1SUiAqLworCitzdGF0aWMgaW50CittYW5nbGVfcmZjOTU5X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICAgX19iZTMyIG5ld2lwLAorCQkgICAgIHVfaW50MTZfdCBwb3J0LAorCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKKwkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCisJCSAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgIHUzMiAqc2VxKQoreworCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLG5ubixubm4sbm5uLG5ubixubm4iKV07CisKKwlzcHJpbnRmKGJ1ZmZlciwgIiV1LCV1LCV1LCV1LCV1LCV1IiwKKwkJTklQUVVBRChuZXdpcCksIHBvcnQ+PjgsIHBvcnQmMHhGRik7CisKKwlERUJVR1AoImNhbGxpbmcgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0XG4iKTsKKworCSpzZXEgKz0gc3RybGVuKGJ1ZmZlcikgLSBtYXRjaGxlbjsKKwlyZXR1cm4gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sIG1hdGNob2ZmLAorCQkJCQltYXRjaGxlbiwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Cit9CisKKy8qIHwxfDEzMi4yMzUuMS4yfDYyNzV8ICovCitzdGF0aWMgaW50CittYW5nbGVfZXBydF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICBfX2JlMzIgbmV3aXAsCisJCSAgIHVfaW50MTZfdCBwb3J0LAorCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCSAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgdTMyICpzZXEpCit7CisJY2hhciBidWZmZXJbc2l6ZW9mKCJ8MXwyNTUuMjU1LjI1NS4yNTV8NjU1MzV8IildOworCisJc3ByaW50ZihidWZmZXIsICJ8MXwldS4ldS4ldS4ldXwldXwiLCBOSVBRVUFEKG5ld2lwKSwgcG9ydCk7CisKKwlERUJVR1AoImNhbGxpbmcgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0XG4iKTsKKworCSpzZXEgKz0gc3RybGVuKGJ1ZmZlcikgLSBtYXRjaGxlbjsKKwlyZXR1cm4gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sIG1hdGNob2ZmLAorCQkJCQltYXRjaGxlbiwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7Cit9CisKKy8qIHwxfDEzMi4yMzUuMS4yfDYyNzV8ICovCitzdGF0aWMgaW50CittYW5nbGVfZXBzdl9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICBfX2JlMzIgbmV3aXAsCisJCSAgIHVfaW50MTZfdCBwb3J0LAorCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCSAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgdTMyICpzZXEpCit7CisJY2hhciBidWZmZXJbc2l6ZW9mKCJ8fHw2NTUzNXwiKV07CisKKwlzcHJpbnRmKGJ1ZmZlciwgInx8fCV1fCIsIHBvcnQpOworCisJREVCVUdQKCJjYWxsaW5nIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldFxuIik7CisKKwkqc2VxICs9IHN0cmxlbihidWZmZXIpIC0gbWF0Y2hsZW47CisJcmV0dXJuIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLCBtYXRjaG9mZiwKKwkJCQkJbWF0Y2hsZW4sIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworfQorCitzdGF0aWMgaW50ICgqbWFuZ2xlW10pKHN0cnVjdCBza19idWZmICoqLCBfX2JlMzIsIHVfaW50MTZfdCwKKwkJICAgICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgbmZfY29ubiAqLAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbywgdTMyICpzZXEpCis9IHsKKwlbTkZfQ1RfRlRQX1BPUlRdID0gbWFuZ2xlX3JmYzk1OV9wYWNrZXQsCisJW05GX0NUX0ZUUF9QQVNWXSA9IG1hbmdsZV9yZmM5NTlfcGFja2V0LAorCVtORl9DVF9GVFBfRVBSVF0gPSBtYW5nbGVfZXBydF9wYWNrZXQsCisJW05GX0NUX0ZUUF9FUFNWXSA9IG1hbmdsZV9lcHN2X3BhY2tldAorfTsKKworLyogU28sIHRoaXMgcGFja2V0IGhhcyBoaXQgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbWF0Y2hpbmcgY29kZS4KKyAgIE1hbmdsZSBpdCwgYW5kIGNoYW5nZSB0aGUgZXhwZWN0YXRpb24gdG8gbWF0Y2ggdGhlIG5ldyB2ZXJzaW9uLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBuZl9uYXRfZnRwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgICBlbnVtIG5mX2N0X2Z0cF90eXBlIHR5cGUsCisJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJICAgICAgIHUzMiAqc2VxKQoreworCV9fYmUzMiBuZXdpcDsKKwl1X2ludDE2X3QgcG9ydDsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXN0cnVjdCBuZl9jb25uICpjdCA9IGV4cC0+bWFzdGVyOworCisJREVCVUdQKCJGVFBfTkFUOiB0eXBlICVpLCBvZmYgJXUgbGVuICV1XG4iLCB0eXBlLCBtYXRjaG9mZiwgbWF0Y2hsZW4pOworCisJLyogQ29ubmVjdGlvbiB3aWxsIGNvbWUgZnJvbSB3aGVyZXZlciB0aGlzIHBhY2tldCBnb2VzLCBoZW5jZSAhZGlyICovCisJbmV3aXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcDsKKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmRpciA9ICFkaXI7CisKKwkvKiBXaGVuIHlvdSBzZWUgdGhlIHBhY2tldCwgd2UgbmVlZCB0byBOQVQgaXQgdGhlIHNhbWUgYXMgdGhlCisJICogdGhpcyBvbmUuICovCisJZXhwLT5leHBlY3RmbiA9IG5mX25hdF9mb2xsb3dfbWFzdGVyOworCisJLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KKwlmb3IgKHBvcnQgPSBudG9ocyhleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0KTsgcG9ydCAhPSAwOyBwb3J0KyspIHsKKwkJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChwb3J0ID09IDApCisJCXJldHVybiBORl9EUk9QOworCisJaWYgKCFtYW5nbGVbdHlwZV0ocHNrYiwgbmV3aXAsIHBvcnQsIG1hdGNob2ZmLCBtYXRjaGxlbiwgY3QsIGN0aW5mbywKKwkJCSAgc2VxKSkgeworCQluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCQlyZXR1cm4gTkZfRFJPUDsKKwl9CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9mdHBfZmluaSh2b2lkKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfZnRwX2hvb2ssIE5VTEwpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfZnRwX2luaXQodm9pZCkKK3sKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5mX25hdF9mdHBfaG9vaykpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfZnRwX2hvb2ssIG5mX25hdF9mdHApOworCXJldHVybiAwOworfQorCisvKiBQcmlvciB0byAyLjYuMTEsIHdlIGhhZCBhIHBvcnRzIHBhcmFtLiAgTm8gbG9uZ2VyLCBidXQgZG9uJ3QgYnJlYWsgdXNlcnMuICovCitzdGF0aWMgaW50IHdhcm5fc2V0KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCSAgICAgICAiOiBrZXJuZWwgPj0gMi42LjEwIG9ubHkgdXNlcyAncG9ydHMnIGZvciBjb25udHJhY2sgbW9kdWxlc1xuIik7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfcGFyYW1fY2FsbChwb3J0cywgd2Fybl9zZXQsIE5VTEwsIE5VTEwsIDApOworCittb2R1bGVfaW5pdChuZl9uYXRfZnRwX2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X2Z0cF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oMzIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5YWIwMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaDMyMy5jCkBAIC0wLDAgKzEsNTk2IEBACisvKgorICogSC4zMjMgZXh0ZW5zaW9uIGZvciBOQVQgYWx0ZXJhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogQmFzZWQgb24gdGhlICdicnV0ZSBmb3JjZScgSC4zMjMgTkFUIG1vZHVsZSBieQorICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyMy5oPgorCisjaWYgMAorI2RlZmluZSBERUJVR1AgcHJpbnRrCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCSAgICB1bnNpZ25lZCBpbnQgYWRkcm9mZiwgX19iZTMyIGlwLCBfX2JlMTYgcG9ydCkKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBpcF9jb25udHJhY2tfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKKwlzdHJ1Y3QgeworCQlfX2JlMzIgaXA7CisJCV9fYmUxNiBwb3J0OworCX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBidWY7CisJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRoOworCisJYnVmLmlwID0gaXA7CisJYnVmLnBvcnQgPSBwb3J0OworCWFkZHJvZmYgKz0gZGF0YW9mZjsKKworCWlmICgoKnBza2IpLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CisJCWlmICghbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGN0LCBjdGluZm8sCisJCQkJCSAgICAgIGFkZHJvZmYsIHNpemVvZihidWYpLAorCQkJCQkgICAgICAoY2hhciAqKSAmYnVmLCBzaXplb2YoYnVmKSkpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKCJuZl9uYXRfaDMyMzogbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0IgorCQkJCSAgICAgICAiIGVycm9yXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qIFJlbG9jYXRlIGRhdGEgcG9pbnRlciAqLworCQl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0LAorCQkJCQlzaXplb2YoX3RjcGgpLCAmX3RjcGgpOworCQlpZiAodGggPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJKmRhdGEgPSAoKnBza2IpLT5kYXRhICsgKCpwc2tiKS0+bmguaXBoLT5paGwgKiA0ICsKKwkJICAgIHRoLT5kb2ZmICogNCArIGRhdGFvZmY7CisJfSBlbHNlIHsKKwkJaWYgKCFuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJICAgICAgYWRkcm9mZiwgc2l6ZW9mKGJ1ZiksCisJCQkJCSAgICAgIChjaGFyICopICZidWYsIHNpemVvZihidWYpKSkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoIm5mX25hdF9oMzIzOiBuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQiCisJCQkJICAgICAgICIgZXJyb3JcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIG5mX25hdF9tYW5nbGVfdWRwX3BhY2tldCB1c2VzIHNrYl9tYWtlX3dyaXRhYmxlKCkgdG8gY29weQorCQkgKiBvciBwdWxsIGV2ZXJ5dGhpbmcgaW4gYSBsaW5lYXIgYnVmZmVyLCBzbyB3ZSBjYW4gc2FmZWx5CisJCSAqIHVzZSB0aGUgc2tiIHBvaW50ZXJzIG5vdyAqLworCQkqZGF0YSA9ICgqcHNrYiktPmRhdGEgKyAoKnBza2IpLT5uaC5pcGgtPmlobCAqIDQgKworCQkgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2V0X2gyMjVfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLCBfX2JlMTYgcG9ydCkKK3sKKwlyZXR1cm4gc2V0X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwgdGFkZHItPmlwQWRkcmVzcy5pcCwKKwkJCWFkZHItPmlwLCBwb3J0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNldF9oMjQ1X2FkZHIoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLCBfX2JlMTYgcG9ydCkKK3sKKwlyZXR1cm4gc2V0X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwKKwkJCXRhZGRyLT51bmljYXN0QWRkcmVzcy5pUEFkZHJlc3MubmV0d29yaywKKwkJCWFkZHItPmlwLCBwb3J0KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNldF9zaWdfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQlUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgaW50IGNvdW50KQoreworCXN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCBpOworCV9fYmUxNiBwb3J0OworCXVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzIGFkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZ0YWRkcltpXSwgJmFkZHIsICZwb3J0KSkgeworCQkJaWYgKGFkZHIuaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5pcCAmJgorCQkJICAgIHBvcnQgPT0gaW5mby0+c2lnX3BvcnRbZGlyXSkgeworCQkJCS8qIEdXLT5HSyAqLworCisJCQkJLyogRml4IGZvciBHbm9tZW1lZXRpbmcgKi8KKwkJCQlpZiAoaSA+IDAgJiYKKwkJCQkgICAgZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZ0YWRkclswXSwKKwkJCQkJCSAgJmFkZHIsICZwb3J0KSAmJgorCQkJCSAgICAobnRvaGwoYWRkci5pcCkgJiAweGZmMDAwMDAwKSA9PSAweDdmMDAwMDAwKQorCQkJCQlpID0gMDsKKworCQkJCURFQlVHUAorCQkJCSAgICAoIm5mX25hdF9yYXM6IHNldCBzaWduYWwgYWRkcmVzcyAiCisJCQkJICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCQkJICAgICBOSVBRVUFEKGlwKSwgcG9ydCwKKwkJCQkgICAgIE5JUFFVQUQoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuCisJCQkJCSAgICAgaXApLCBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQkJcmV0dXJuIHNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgMCwgJnRhZGRyW2ldLAorCQkJCQkJICAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS4KKwkJCQkJCSAgICAgdHVwbGUuZHN0LnUzLAorCQkJCQkJICAgICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQl9IGVsc2UgaWYgKGFkZHIuaXAgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC51My5pcCAmJgorCQkJCSAgIHBvcnQgPT0gaW5mby0+c2lnX3BvcnRbZGlyXSkgeworCQkJCS8qIEdLLT5HVyAqLworCQkJCURFQlVHUAorCQkJCSAgICAoIm5mX25hdF9yYXM6IHNldCBzaWduYWwgYWRkcmVzcyAiCisJCQkJICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCQkJICAgICBOSVBRVUFEKGlwKSwgcG9ydCwKKwkJCQkgICAgIE5JUFFVQUQoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMuCisJCQkJCSAgICAgaXApLCBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQkJcmV0dXJuIHNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgMCwgJnRhZGRyW2ldLAorCQkJCQkJICAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS4KKwkJCQkJCSAgICAgdHVwbGUuc3JjLnUzLAorCQkJCQkJICAgICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNldF9yYXNfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQlUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgaW50IGNvdW50KQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IGk7CisJX19iZTE2IHBvcnQ7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChnZXRfaDIyNV9hZGRyKGN0LCAqZGF0YSwgJnRhZGRyW2ldLCAmYWRkciwgJnBvcnQpICYmCisJCSAgICBhZGRyLmlwID09IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMuaXAgJiYKKwkJICAgIHBvcnQgPT0gY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51LnVkcC5wb3J0KSB7CisJCQlERUJVR1AoIm5mX25hdF9yYXM6IHNldCByYXNBZGRyZXNzICIKKwkJCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJCQkgICAgICAgTklQUVVBRChpcCksIG50b2hzKHBvcnQpLAorCQkJICAgICAgIE5JUFFVQUQoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMuaXApLAorCQkJICAgICAgIG50b2hzKGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUudWRwLgorCQkJCSAgICAgcG9ydCkpOworCQkJcmV0dXJuIHNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgMCwgJnRhZGRyW2ldLAorCQkJCQkgICAgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MywKKwkJCQkJICAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLgorCQkJCQkJCQlkc3QudS51ZHAucG9ydCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG5hdF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJSDI0NV9UcmFuc3BvcnRBZGRyZXNzICp0YWRkciwKKwkJCV9fYmUxNiBwb3J0LCBfX2JlMTYgcnRwX3BvcnQsCisJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cCwKKwkJCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydGNwX2V4cCkKK3sKKwlzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgaTsKKwl1X2ludDE2X3QgbmF0ZWRfcG9ydDsKKworCS8qIFNldCBleHBlY3RhdGlvbnMgZm9yIE5BVCAqLworCXJ0cF9leHAtPnNhdmVkX3Byb3RvLnVkcC5wb3J0ID0gcnRwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJcnRwX2V4cC0+ZXhwZWN0Zm4gPSBuZl9uYXRfZm9sbG93X21hc3RlcjsKKwlydHBfZXhwLT5kaXIgPSAhZGlyOworCXJ0Y3BfZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCA9IHJ0Y3BfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydDsKKwlydGNwX2V4cC0+ZXhwZWN0Zm4gPSBuZl9uYXRfZm9sbG93X21hc3RlcjsKKwlydGNwX2V4cC0+ZGlyID0gIWRpcjsKKworCS8qIExvb2t1cCBleGlzdGluZyBleHBlY3RzICovCisJZm9yIChpID0gMDsgaSA8IEgzMjNfUlRQX0NIQU5ORUxfTUFYOyBpKyspIHsKKwkJaWYgKGluZm8tPnJ0cF9wb3J0W2ldW2Rpcl0gPT0gcnRwX3BvcnQpIHsKKwkJCS8qIEV4cGVjdGVkICovCisKKwkJCS8qIFVzZSBhbGxvY2F0ZWQgcG9ydHMgZmlyc3QuIFRoaXMgd2lsbCByZWZyZXNoCisJCQkgKiB0aGUgZXhwZWN0cyAqLworCQkJcnRwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBpbmZvLT5ydHBfcG9ydFtpXVtkaXJdOworCQkJcnRjcF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0KKwkJCSAgICBodG9ucyhudG9ocyhpbmZvLT5ydHBfcG9ydFtpXVtkaXJdKSArIDEpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaW5mby0+cnRwX3BvcnRbaV1bZGlyXSA9PSAwKSB7CisJCQkvKiBOb3QgZXhwZWN0ZWQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogUnVuIG91dCBvZiBleHBlY3RhdGlvbnMgKi8KKwlpZiAoaSA+PSBIMzIzX1JUUF9DSEFOTkVMX01BWCkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJuZl9uYXRfaDMyMzogb3V0IG9mIGV4cGVjdGF0aW9uc1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIFRyeSB0byBnZXQgYSBwYWlyIG9mIHBvcnRzLiAqLworCWZvciAobmF0ZWRfcG9ydCA9IG50b2hzKHJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0KTsKKwkgICAgIG5hdGVkX3BvcnQgIT0gMDsgbmF0ZWRfcG9ydCArPSAyKSB7CisJCXJ0cF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCkgPT0gMCkgeworCQkJcnRjcF9leHAtPnR1cGxlLmRzdC51LnVkcC5wb3J0ID0KKwkJCSAgICBodG9ucyhuYXRlZF9wb3J0ICsgMSk7CisJCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwKSA9PSAwKQorCQkJCWJyZWFrOworCQkJbmZfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7CisJCX0KKwl9CisKKwlpZiAobmF0ZWRfcG9ydCA9PSAwKSB7CS8qIE5vIHBvcnQgYXZhaWxhYmxlICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoIm5mX25hdF9oMzIzOiBvdXQgb2YgUlRQIHBvcnRzXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogTW9kaWZ5IHNpZ25hbCAqLworCWlmIChzZXRfaDI0NV9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsIHRhZGRyLAorCQkJICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkgIGh0b25zKChwb3J0ICYgaHRvbnMoMSkpID8gbmF0ZWRfcG9ydCArIDEgOgorCQkJICAJCQkgICAgbmF0ZWRfcG9ydCkpID09IDApIHsKKwkJLyogU2F2ZSBwb3J0cyAqLworCQlpbmZvLT5ydHBfcG9ydFtpXVtkaXJdID0gcnRwX3BvcnQ7CisJCWluZm8tPnJ0cF9wb3J0W2ldWyFkaXJdID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJfSBlbHNlIHsKKwkJbmZfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCk7CisJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKHJ0Y3BfZXhwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFN1Y2Nlc3MgKi8KKwlERUJVR1AoIm5mX25hdF9oMzIzOiBleHBlY3QgUlRQICV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCSAgICAgICBOSVBRVUFEKHJ0cF9leHAtPnR1cGxlLnNyYy5pcCksCisJICAgICAgIG50b2hzKHJ0cF9leHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0KSwKKwkgICAgICAgTklQUVVBRChydHBfZXhwLT50dXBsZS5kc3QuaXApLAorCSAgICAgICBudG9ocyhydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCkpOworCURFQlVHUCgibmZfbmF0X2gzMjM6IGV4cGVjdCBSVENQICV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCSAgICAgICBOSVBRVUFEKHJ0Y3BfZXhwLT50dXBsZS5zcmMuaXApLAorCSAgICAgICBudG9ocyhydGNwX2V4cC0+dHVwbGUuc3JjLnUudWRwLnBvcnQpLAorCSAgICAgICBOSVBRVUFEKHJ0Y3BfZXhwLT50dXBsZS5kc3QuaXApLAorCSAgICAgICBudG9ocyhydGNwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgbmF0X3QxMjAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJICAgIEgyNDVfVHJhbnNwb3J0QWRkcmVzcyAqdGFkZHIsIF9fYmUxNiBwb3J0LAorCQkgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MTZfdCBuYXRlZF9wb3J0ID0gbnRvaHMocG9ydCk7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmV4cGVjdGZuID0gbmZfbmF0X2ZvbGxvd19tYXN0ZXI7CisJZXhwLT5kaXIgPSAhZGlyOworCisJLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KKwlmb3IgKDsgbmF0ZWRfcG9ydCAhPSAwOyBuYXRlZF9wb3J0KyspIHsKKwkJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQpOworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChuYXRlZF9wb3J0ID09IDApIHsJLyogTm8gcG9ydCBhdmFpbGFibGUgKi8KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygibmZfbmF0X2gzMjM6IG91dCBvZiBUQ1AgcG9ydHNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBNb2RpZnkgc2lnbmFsICovCisJaWYgKHNldF9oMjQ1X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwgdGFkZHIsCisJCQkgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MywKKwkJCSAgaHRvbnMobmF0ZWRfcG9ydCkpIDwgMCkgeworCQluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCQlyZXR1cm4gLTE7CisJfQorCisJREVCVUdQKCJuZl9uYXRfaDMyMzogZXhwZWN0IFQuMTIwICV1LiV1LiV1LiV1OiVodS0+JXUuJXUuJXUuJXU6JWh1XG4iLAorCSAgICAgICBOSVBRVUFEKGV4cC0+dHVwbGUuc3JjLmlwKSwgbnRvaHMoZXhwLT50dXBsZS5zcmMudS50Y3AucG9ydCksCisJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5kc3QuaXApLCBudG9ocyhleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG5hdF9oMjQ1KHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCSAgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgX19iZTE2IHBvcnQsCisJCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCXN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVfaW50MTZfdCBuYXRlZF9wb3J0ID0gbnRvaHMocG9ydCk7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmV4cGVjdGZuID0gbmZfbmF0X2ZvbGxvd19tYXN0ZXI7CisJZXhwLT5kaXIgPSAhZGlyOworCisJLyogQ2hlY2sgZXhpc3RpbmcgZXhwZWN0cyAqLworCWlmIChpbmZvLT5zaWdfcG9ydFtkaXJdID09IHBvcnQpCisJCW5hdGVkX3BvcnQgPSBudG9ocyhpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisKKwkvKiBUcnkgdG8gZ2V0IHNhbWUgcG9ydDogaWYgbm90LCB0cnkgdG8gY2hhbmdlIGl0LiAqLworCWZvciAoOyBuYXRlZF9wb3J0ICE9IDA7IG5hdGVkX3BvcnQrKykgeworCQlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5hdGVkX3BvcnQgPT0gMCkgewkvKiBObyBwb3J0IGF2YWlsYWJsZSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJuZl9uYXRfcTkzMTogb3V0IG9mIFRDUCBwb3J0c1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIE1vZGlmeSBzaWduYWwgKi8KKwlpZiAoc2V0X2gyMjVfYWRkcihwc2tiLCBkYXRhLCBkYXRhb2ZmLCB0YWRkciwKKwkJCSAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkJICBodG9ucyhuYXRlZF9wb3J0KSkgPT0gMCkgeworCQkvKiBTYXZlIHBvcnRzICovCisJCWluZm8tPnNpZ19wb3J0W2Rpcl0gPSBwb3J0OworCQlpbmZvLT5zaWdfcG9ydFshZGlyXSA9IGh0b25zKG5hdGVkX3BvcnQpOworCX0gZWxzZSB7CisJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlERUJVR1AoIm5mX25hdF9xOTMxOiBleHBlY3QgSC4yNDUgJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLCBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksIG50b2hzKGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBjb25udHJhY2sgZXhwZWN0IGZ1bmN0aW9uIHJlcGxhY2VzIG5mX2Nvbm50cmFja19xOTMxX2V4cGVjdCgpCisgKiB3aGljaCB3YXMgc2V0IGJ5IG5mX2Nvbm50cmFja19oMzIzLmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGlwX25hdF9xOTMxX2V4cGVjdChzdHJ1Y3QgbmZfY29ubiAqbmV3LAorCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKQoreworCXN0cnVjdCBpcF9uYXRfcmFuZ2UgcmFuZ2U7CisKKwlpZiAodGhpcy0+dHVwbGUuc3JjLnUzLmlwICE9IDApIHsJLyogT25seSBhY2NlcHQgY2FsbHMgZnJvbSBHSyAqLworCQluZl9uYXRfZm9sbG93X21hc3RlcihuZXcsIHRoaXMpOworCQlyZXR1cm47CisJfQorCisJLyogVGhpcyBtdXN0IGJlIGEgZnJlc2ggb25lLiAqLworCUJVR19PTihuZXctPnN0YXR1cyAmIElQU19OQVRfRE9ORV9NQVNLKTsKKworCS8qIENoYW5nZSBzcmMgdG8gd2hlcmUgbWFzdGVyIHNlbmRzIHRvICovCisJcmFuZ2UuZmxhZ3MgPSBJUF9OQVRfUkFOR0VfTUFQX0lQUzsKKwlyYW5nZS5taW5faXAgPSByYW5nZS5tYXhfaXAgPSBuZXctPnR1cGxlaGFzaFshdGhpcy0+ZGlyXS50dXBsZS5zcmMudTMuaXA7CisKKwkvKiBob29rIGRvZXNuJ3QgbWF0dGVyLCBidXQgaXQgaGFzIHRvIGRvIHNvdXJjZSBtYW5pcCAqLworCW5mX25hdF9zZXR1cF9pbmZvKG5ldywgJnJhbmdlLCBORl9JUF9QT1NUX1JPVVRJTkcpOworCisJLyogRm9yIERTVCBtYW5pcCwgbWFwIHBvcnQgaGVyZSB0byB3aGVyZSBpdCdzIGV4cGVjdGVkLiAqLworCXJhbmdlLmZsYWdzID0gKElQX05BVF9SQU5HRV9NQVBfSVBTIHwgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCk7CisJcmFuZ2UubWluID0gcmFuZ2UubWF4ID0gdGhpcy0+c2F2ZWRfcHJvdG87CisJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwID0KKwkgICAgbmV3LT5tYXN0ZXItPnR1cGxlaGFzaFshdGhpcy0+ZGlyXS50dXBsZS5zcmMudTMuaXA7CisKKwkvKiBob29rIGRvZXNuJ3QgbWF0dGVyLCBidXQgaXQgaGFzIHRvIGRvIGRlc3RpbmF0aW9uIG1hbmlwICovCisJbmZfbmF0X3NldHVwX2luZm8obmV3LCAmcmFuZ2UsIE5GX0lQX1BSRV9ST1VUSU5HKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IG5hdF9xOTMxKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqdGFkZHIsIGludCBpZHgsCisJCSAgICBfX2JlMTYgcG9ydCwgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwl1X2ludDE2X3QgbmF0ZWRfcG9ydCA9IG50b2hzKHBvcnQpOworCXVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzIGFkZHI7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmV4cGVjdGZuID0gaXBfbmF0X3E5MzFfZXhwZWN0OworCWV4cC0+ZGlyID0gIWRpcjsKKworCS8qIENoZWNrIGV4aXN0aW5nIGV4cGVjdHMgKi8KKwlpZiAoaW5mby0+c2lnX3BvcnRbZGlyXSA9PSBwb3J0KQorCQluYXRlZF9wb3J0ID0gbnRvaHMoaW5mby0+c2lnX3BvcnRbIWRpcl0pOworCisJLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KKwlmb3IgKDsgbmF0ZWRfcG9ydCAhPSAwOyBuYXRlZF9wb3J0KyspIHsKKwkJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKG5hdGVkX3BvcnQpOworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChuYXRlZF9wb3J0ID09IDApIHsJLyogTm8gcG9ydCBhdmFpbGFibGUgKi8KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygibmZfbmF0X3Jhczogb3V0IG9mIFRDUCBwb3J0c1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIE1vZGlmeSBzaWduYWwgKi8KKwlpZiAoc2V0X2gyMjVfYWRkcihwc2tiLCBkYXRhLCAwLCAmdGFkZHJbaWR4XSwKKwkJCSAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkJICBodG9ucyhuYXRlZF9wb3J0KSkgPT0gMCkgeworCQkvKiBTYXZlIHBvcnRzICovCisJCWluZm8tPnNpZ19wb3J0W2Rpcl0gPSBwb3J0OworCQlpbmZvLT5zaWdfcG9ydFshZGlyXSA9IGh0b25zKG5hdGVkX3BvcnQpOworCisJCS8qIEZpeCBmb3IgR25vbWVtZWV0aW5nICovCisJCWlmIChpZHggPiAwICYmCisJCSAgICBnZXRfaDIyNV9hZGRyKGN0LCAqZGF0YSwgJnRhZGRyWzBdLCAmYWRkciwgJnBvcnQpICYmCisJCSAgICAobnRvaGwoYWRkci5pcCkgJiAweGZmMDAwMDAwKSA9PSAweDdmMDAwMDAwKSB7CisJCQlzZXRfaDIyNV9hZGRyX2hvb2socHNrYiwgZGF0YSwgMCwgJnRhZGRyWzBdLAorCQkJCQkgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkJCSAgIGluZm8tPnNpZ19wb3J0WyFkaXJdKTsKKwkJfQorCX0gZWxzZSB7CisJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBTdWNjZXNzICovCisJREVCVUdQKCJuZl9uYXRfcmFzOiBleHBlY3QgUS45MzEgJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLCBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksIG50b2hzKGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGlwX25hdF9jYWxsZm9yd2FyZGluZ19leHBlY3Qoc3RydWN0IG5mX2Nvbm4gKm5ldywKKwkJCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICp0aGlzKQoreworCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2U7CisKKwkvKiBUaGlzIG11c3QgYmUgYSBmcmVzaCBvbmUuICovCisJQlVHX09OKG5ldy0+c3RhdHVzICYgSVBTX05BVF9ET05FX01BU0spOworCisJLyogQ2hhbmdlIHNyYyB0byB3aGVyZSBtYXN0ZXIgc2VuZHMgdG8gKi8KKwlyYW5nZS5mbGFncyA9IElQX05BVF9SQU5HRV9NQVBfSVBTOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcCA9IG5ldy0+dHVwbGVoYXNoWyF0aGlzLT5kaXJdLnR1cGxlLnNyYy51My5pcDsKKworCS8qIGhvb2sgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBoYXMgdG8gZG8gc291cmNlIG1hbmlwICovCisJbmZfbmF0X3NldHVwX2luZm8obmV3LCAmcmFuZ2UsIE5GX0lQX1BPU1RfUk9VVElORyk7CisKKwkvKiBGb3IgRFNUIG1hbmlwLCBtYXAgcG9ydCBoZXJlIHRvIHdoZXJlIGl0J3MgZXhwZWN0ZWQuICovCisJcmFuZ2UuZmxhZ3MgPSAoSVBfTkFUX1JBTkdFX01BUF9JUFMgfCBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKTsKKwlyYW5nZS5taW4gPSByYW5nZS5tYXggPSB0aGlzLT5zYXZlZF9wcm90bzsKKwlyYW5nZS5taW5faXAgPSByYW5nZS5tYXhfaXAgPSB0aGlzLT5zYXZlZF9pcDsKKworCS8qIGhvb2sgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBoYXMgdG8gZG8gZGVzdGluYXRpb24gbWFuaXAgKi8KKwluZl9uYXRfc2V0dXBfaW5mbyhuZXcsICZyYW5nZSwgTkZfSVBfUFJFX1JPVVRJTkcpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgbmF0X2NhbGxmb3J3YXJkaW5nKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgX19iZTE2IHBvcnQsCisJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdV9pbnQxNl90IG5hdGVkX3BvcnQ7CisKKwkvKiBTZXQgZXhwZWN0YXRpb25zIGZvciBOQVQgKi8KKwlleHAtPnNhdmVkX2lwID0gZXhwLT50dXBsZS5kc3QudTMuaXA7CisJZXhwLT50dXBsZS5kc3QudTMuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcDsKKwlleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0ID0gZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydDsKKwlleHAtPmV4cGVjdGZuID0gaXBfbmF0X2NhbGxmb3J3YXJkaW5nX2V4cGVjdDsKKwlleHAtPmRpciA9ICFkaXI7CisKKwkvKiBUcnkgdG8gZ2V0IHNhbWUgcG9ydDogaWYgbm90LCB0cnkgdG8gY2hhbmdlIGl0LiAqLworCWZvciAobmF0ZWRfcG9ydCA9IG50b2hzKHBvcnQpOyBuYXRlZF9wb3J0ICE9IDA7IG5hdGVkX3BvcnQrKykgeworCQlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMobmF0ZWRfcG9ydCk7CisJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKG5hdGVkX3BvcnQgPT0gMCkgewkvKiBObyBwb3J0IGF2YWlsYWJsZSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJuZl9uYXRfcTkzMTogb3V0IG9mIFRDUCBwb3J0c1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIE1vZGlmeSBzaWduYWwgKi8KKwlpZiAoIXNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwgdGFkZHIsCisJCQkgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkgICBodG9ucyhuYXRlZF9wb3J0KSkgPT0gMCkgeworCQluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHApOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogU3VjY2VzcyAqLworCURFQlVHUCgibmZfbmF0X3E5MzE6IGV4cGVjdCBDYWxsIEZvcndhcmRpbmcgIgorCSAgICAgICAiJXUuJXUuJXUuJXU6JWh1LT4ldS4ldS4ldS4ldTolaHVcbiIsCisJICAgICAgIE5JUFFVQUQoZXhwLT50dXBsZS5zcmMuaXApLCBudG9ocyhleHAtPnR1cGxlLnNyYy51LnRjcC5wb3J0KSwKKwkgICAgICAgTklQUVVBRChleHAtPnR1cGxlLmRzdC5pcCksIG50b2hzKGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQpKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKHNldF9oMjQ1X2FkZHJfaG9vaykgIT0gTlVMTCk7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShzZXRfaDIyNV9hZGRyX2hvb2spICE9IE5VTEwpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2Uoc2V0X3NpZ19hZGRyX2hvb2spICE9IE5VTEwpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2Uoc2V0X3Jhc19hZGRyX2hvb2spICE9IE5VTEwpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2UobmF0X3J0cF9ydGNwX2hvb2spICE9IE5VTEwpOworCUJVR19PTihyY3VfZGVyZWZlcmVuY2UobmF0X3QxMjBfaG9vaykgIT0gTlVMTCk7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShuYXRfaDI0NV9ob29rKSAhPSBOVUxMKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rKSAhPSBOVUxMKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5hdF9xOTMxX2hvb2spICE9IE5VTEwpOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKHNldF9oMjQ1X2FkZHJfaG9vaywgc2V0X2gyNDVfYWRkcik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHNldF9oMjI1X2FkZHJfaG9vaywgc2V0X2gyMjVfYWRkcik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHNldF9zaWdfYWRkcl9ob29rLCBzZXRfc2lnX2FkZHIpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfcmFzX2FkZHJfaG9vaywgc2V0X3Jhc19hZGRyKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3J0cF9ydGNwX2hvb2ssIG5hdF9ydHBfcnRjcCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5hdF90MTIwX2hvb2ssIG5hdF90MTIwKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X2gyNDVfaG9vaywgbmF0X2gyNDUpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuYXRfY2FsbGZvcndhcmRpbmdfaG9vaywgbmF0X2NhbGxmb3J3YXJkaW5nKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3E5MzFfaG9vaywgbmF0X3E5MzEpOworCisJREVCVUdQKCJuZl9uYXRfaDMyMzogaW5pdCBzdWNjZXNzXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfaDI0NV9hZGRyX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfaDIyNV9hZGRyX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzZXRfc2lnX2FkZHJfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHNldF9yYXNfYWRkcl9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3J0cF9ydGNwX2hvb2ssIE5VTEwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuYXRfdDEyMF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X2gyNDVfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmF0X3E5MzFfaG9vaywgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChmaW5pKTsKKworTU9EVUxFX0FVVEhPUigiSmluZyBNaW4gWmhhbyA8emhhb2ppbmdtaW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJILjMyMyBOQVQgaGVscGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwX25hdF9oMzIzIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGZiZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwpAQCAtMCwwICsxLDQzMyBAQAorLyogaXBfbmF0X2hlbHBlci5jIC0gZ2VuZXJpYyBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgTkFUIGhlbHBlcnMKKyAqCisgKiAoQykgMjAwMC0yMDAyIEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgorICogKEMpIDIwMDMtMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oPgorCisjaWYgMAorI2RlZmluZSBERUJVR1AgcHJpbnRrCisjZGVmaW5lIERVTVBfT0ZGU0VUKHgpCXByaW50aygib2Zmc2V0X2JlZm9yZT0lZCwgb2Zmc2V0X2FmdGVyPSVkLCBjb3JyZWN0aW9uX3Bvcz0ldVxuIiwgeC0+b2Zmc2V0X2JlZm9yZSwgeC0+b2Zmc2V0X2FmdGVyLCB4LT5jb3JyZWN0aW9uX3Bvcyk7CisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2RlZmluZSBEVU1QX09GRlNFVCh4KQorI2VuZGlmCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfbmF0X3NlcW9mc19sb2NrKTsKKworLyogU2V0dXAgVENQIHNlcXVlbmNlIGNvcnJlY3Rpb24gZ2l2ZW4gdGhpcyBjaGFuZ2UgYXQgdGhpcyBzZXF1ZW5jZSAqLworc3RhdGljIGlubGluZSB2b2lkCithZGp1c3RfdGNwX3NlcXVlbmNlKHUzMiBzZXEsCisJCSAgICBpbnQgc2l6ZWRpZmYsCisJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlpbnQgZGlyOworCXN0cnVjdCBuZl9uYXRfc2VxICp0aGlzX3dheSwgKm90aGVyX3dheTsKKwlzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdCA9IG5mY3RfbmF0KGN0KTsKKworCURFQlVHUCgibmZfbmF0X3Jlc2l6ZV9wYWNrZXQ6IG9sZF9zaXplID0gJXUsIG5ld19zaXplID0gJXVcbiIsCisJCSgqc2tiKS0+bGVuLCBuZXdfc2l6ZSk7CisKKwlkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisKKwl0aGlzX3dheSA9ICZuYXQtPmluZm8uc2VxW2Rpcl07CisJb3RoZXJfd2F5ID0gJm5hdC0+aW5mby5zZXFbIWRpcl07CisKKwlERUJVR1AoIm5mX25hdF9yZXNpemVfcGFja2V0OiBTZXFfb2Zmc2V0IGJlZm9yZTogIik7CisJRFVNUF9PRkZTRVQodGhpc193YXkpOworCisJc3Bpbl9sb2NrX2JoKCZuZl9uYXRfc2Vxb2ZzX2xvY2spOworCisJLyogU1lOIGFkanVzdC4gSWYgaXQncyB1bmluaXRpYWxpemVkLCBvciB0aGlzIGlzIGFmdGVyIGxhc3QKKwkgKiBjb3JyZWN0aW9uLCByZWNvcmQgaXQ6IHdlIGRvbid0IGhhbmRsZSBtb3JlIHRoYW4gb25lCisJICogYWRqdXN0bWVudCBpbiB0aGUgd2luZG93LCBidXQgZG8gZGVhbCB3aXRoIGNvbW1vbiBjYXNlIG9mIGEKKwkgKiByZXRyYW5zbWl0ICovCisJaWYgKHRoaXNfd2F5LT5vZmZzZXRfYmVmb3JlID09IHRoaXNfd2F5LT5vZmZzZXRfYWZ0ZXIgfHwKKwkgICAgYmVmb3JlKHRoaXNfd2F5LT5jb3JyZWN0aW9uX3Bvcywgc2VxKSkgeworCQkgICB0aGlzX3dheS0+Y29ycmVjdGlvbl9wb3MgPSBzZXE7CisJCSAgIHRoaXNfd2F5LT5vZmZzZXRfYmVmb3JlID0gdGhpc193YXktPm9mZnNldF9hZnRlcjsKKwkJICAgdGhpc193YXktPm9mZnNldF9hZnRlciArPSBzaXplZGlmZjsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJm5mX25hdF9zZXFvZnNfbG9jayk7CisKKwlERUJVR1AoIm5mX25hdF9yZXNpemVfcGFja2V0OiBTZXFfb2Zmc2V0IGFmdGVyOiAiKTsKKwlEVU1QX09GRlNFVCh0aGlzX3dheSk7Cit9CisKKy8qIEZyb2JzIGRhdGEgaW5zaWRlIHRoaXMgcGFja2V0LCB3aGljaCBpcyBsaW5lYXIuICovCitzdGF0aWMgdm9pZCBtYW5nbGVfY29udGVudHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJICAgIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgcmVwX2xlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCisJQlVHX09OKHNrYl9pc19ub25saW5lYXIoc2tiKSk7CisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopc2tiLT5uaC5pcGggKyBkYXRhb2ZmOworCisJLyogbW92ZSBwb3N0LXJlcGxhY2VtZW50ICovCisJbWVtbW92ZShkYXRhICsgbWF0Y2hfb2Zmc2V0ICsgcmVwX2xlbiwKKwkJZGF0YSArIG1hdGNoX29mZnNldCArIG1hdGNoX2xlbiwKKwkJc2tiLT50YWlsIC0gKGRhdGEgKyBtYXRjaF9vZmZzZXQgKyBtYXRjaF9sZW4pKTsKKworCS8qIGluc2VydCBkYXRhIGZyb20gYnVmZmVyICovCisJbWVtY3B5KGRhdGEgKyBtYXRjaF9vZmZzZXQsIHJlcF9idWZmZXIsIHJlcF9sZW4pOworCisJLyogdXBkYXRlIHNrYiBpbmZvICovCisJaWYgKHJlcF9sZW4gPiBtYXRjaF9sZW4pIHsKKwkJREVCVUdQKCJuZl9uYXRfbWFuZ2xlX3BhY2tldDogRXh0ZW5kaW5nIHBhY2tldCBieSAiCisJCSAgICAgICAiJXUgZnJvbSAldSBieXRlc1xuIiwgcmVwX2xlbiAtIG1hdGNoX2xlbiwKKwkJICAgICAgIHNrYi0+bGVuKTsKKwkJc2tiX3B1dChza2IsIHJlcF9sZW4gLSBtYXRjaF9sZW4pOworCX0gZWxzZSB7CisJCURFQlVHUCgibmZfbmF0X21hbmdsZV9wYWNrZXQ6IFNocmlua2luZyBwYWNrZXQgZnJvbSAiCisJCSAgICAgICAiJXUgZnJvbSAldSBieXRlc1xuIiwgbWF0Y2hfbGVuIC0gcmVwX2xlbiwKKwkJICAgICAgIHNrYi0+bGVuKTsKKwkJX19za2JfdHJpbShza2IsIHNrYi0+bGVuICsgcmVwX2xlbiAtIG1hdGNoX2xlbik7CisJfQorCisJLyogZml4IElQIGhkciBjaGVja3N1bSBpbmZvcm1hdGlvbiAqLworCXNrYi0+bmguaXBoLT50b3RfbGVuID0gaHRvbnMoc2tiLT5sZW4pOworCWlwX3NlbmRfY2hlY2soc2tiLT5uaC5pcGgpOworfQorCisvKiBVbnVzdWFsLCBidXQgcG9zc2libGUgY2FzZS4gKi8KK3N0YXRpYyBpbnQgZW5sYXJnZV9za2Ioc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgZXh0cmEpCit7CisJc3RydWN0IHNrX2J1ZmYgKm5za2I7CisKKwlpZiAoKCpwc2tiKS0+bGVuICsgZXh0cmEgPiA2NTUzNSkKKwkJcmV0dXJuIDA7CisKKwluc2tiID0gc2tiX2NvcHlfZXhwYW5kKCpwc2tiLCBza2JfaGVhZHJvb20oKnBza2IpLCBleHRyYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFuc2tiKQorCQlyZXR1cm4gMDsKKworCS8qIFRyYW5zZmVyIHNvY2tldCB0byBuZXcgc2tiLiAqLworCWlmICgoKnBza2IpLT5zaykKKwkJc2tiX3NldF9vd25lcl93KG5za2IsICgqcHNrYiktPnNrKTsKKwlrZnJlZV9za2IoKnBza2IpOworCSpwc2tiID0gbnNrYjsKKwlyZXR1cm4gMTsKK30KKworLyogR2VuZXJpYyBmdW5jdGlvbiBmb3IgbWFuZ2xpbmcgdmFyaWFibGUtbGVuZ3RoIGFkZHJlc3MgY2hhbmdlcyBpbnNpZGUKKyAqIE5BVGVkIFRDUCBjb25uZWN0aW9ucyAobGlrZSB0aGUgUE9SVCBYWFgsWFhYLFhYWCxYWFgsWFhYLFhYWAorICogY29tbWFuZCBpbiBGVFApLgorICoKKyAqIFRha2VzIGNhcmUgYWJvdXQgYWxsIHRoZSBuYXN0eSBzZXF1ZW5jZSBudW1iZXIgY2hhbmdlcywgY2hlY2tzdW1taW5nLAorICogc2tiIGVubGFyZ2VtZW50LCAuLi4KKyAqCisgKiAqLworaW50CituZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCSB1bnNpZ25lZCBpbnQgcmVwX2xlbikKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlzdHJ1Y3QgdGNwaGRyICp0Y3BoOworCWludCBvbGRsZW4sIGRhdGFsZW47CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsICgqcHNrYiktPmxlbikpCisJCXJldHVybiAwOworCisJaWYgKHJlcF9sZW4gPiBtYXRjaF9sZW4gJiYKKwkgICAgcmVwX2xlbiAtIG1hdGNoX2xlbiA+IHNrYl90YWlscm9vbSgqcHNrYikgJiYKKwkgICAgIWVubGFyZ2Vfc2tiKHBza2IsIHJlcF9sZW4gLSBtYXRjaF9sZW4pKQorCQlyZXR1cm4gMDsKKworCVNLQl9MSU5FQVJfQVNTRVJUKCpwc2tiKTsKKworCWlwaCA9ICgqcHNrYiktPm5oLmlwaDsKKwl0Y3BoID0gKHZvaWQgKilpcGggKyBpcGgtPmlobCo0OworCisJb2xkbGVuID0gKCpwc2tiKS0+bGVuIC0gaXBoLT5paGwqNDsKKwltYW5nbGVfY29udGVudHMoKnBza2IsIGlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQsCisJCQltYXRjaF9vZmZzZXQsIG1hdGNoX2xlbiwgcmVwX2J1ZmZlciwgcmVwX2xlbik7CisKKwlkYXRhbGVuID0gKCpwc2tiKS0+bGVuIC0gaXBoLT5paGwqNDsKKwlpZiAoKCpwc2tiKS0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJdGNwaC0+Y2hlY2sgPSAwOworCQl0Y3BoLT5jaGVjayA9IHRjcF92NF9jaGVjayh0Y3BoLCBkYXRhbGVuLAorCQkJCQkgICBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkgICBjc3VtX3BhcnRpYWwoKGNoYXIgKil0Y3BoLAorCQkJCQkgICAJCWRhdGFsZW4sIDApKTsKKwl9IGVsc2UKKwkJbmZfcHJvdG9fY3N1bV9yZXBsYWNlMigmdGNwaC0+Y2hlY2ssICpwc2tiLAorCQkJCSAgICAgICBodG9ucyhvbGRsZW4pLCBodG9ucyhkYXRhbGVuKSwgMSk7CisKKwlpZiAocmVwX2xlbiAhPSBtYXRjaF9sZW4pIHsKKwkJc2V0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKTsKKwkJYWRqdXN0X3RjcF9zZXF1ZW5jZShudG9obCh0Y3BoLT5zZXEpLAorCQkJCSAgICAoaW50KXJlcF9sZW4gLSAoaW50KW1hdGNoX2xlbiwKKwkJCQkgICAgY3QsIGN0aW5mbyk7CisJCS8qIFRlbGwgVENQIHdpbmRvdyB0cmFja2luZyBhYm91dCBzZXEgY2hhbmdlICovCisJCW5mX2Nvbm50cmFja190Y3BfdXBkYXRlKCpwc2tiLCAoKnBza2IpLT5uaC5pcGgtPmlobCo0LAorCQkJCQljdCwgQ1RJTkZPMkRJUihjdGluZm8pKTsKKwl9CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldCk7CisKKy8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIG1hbmdsaW5nIHZhcmlhYmxlLWxlbmd0aCBhZGRyZXNzIGNoYW5nZXMgaW5zaWRlCisgKiBOQVRlZCBVRFAgY29ubmVjdGlvbnMgKGxpa2UgdGhlIENPTk5FQ1QgREFUQSBYWFhYWCBNRVNHIFhYWFhYIElOREVYIFhYWFhYCisgKiBjb21tYW5kIGluIHRoZSBBbWFuZGEgcHJvdG9jb2wpCisgKgorICogVGFrZXMgY2FyZSBhYm91dCBhbGwgdGhlIG5hc3R5IHNlcXVlbmNlIG51bWJlciBjaGFuZ2VzLCBjaGVja3N1bW1pbmcsCisgKiBza2IgZW5sYXJnZW1lbnQsIC4uLgorICoKKyAqIFhYWCAtIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgbWVyZ2VkIHdpdGggbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0IHdoaWNoCisgKiAgICAgICBzaG91bGQgYmUgZmFpcmx5IGVhc3kgdG8gZG8uCisgKi8KK2ludAorbmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbWF0Y2hfbGVuLAorCQkJIGNvbnN0IGNoYXIgKnJlcF9idWZmZXIsCisJCQkgdW5zaWduZWQgaW50IHJlcF9sZW4pCit7CisJc3RydWN0IGlwaGRyICppcGg7CisJc3RydWN0IHVkcGhkciAqdWRwaDsKKwlpbnQgZGF0YWxlbiwgb2xkbGVuOworCisJLyogVURQIGhlbHBlcnMgbWlnaHQgYWNjaWRlbnRhbGx5IG1hbmdsZSB0aGUgd3JvbmcgcGFja2V0ICovCisJaXBoID0gKCpwc2tiKS0+bmguaXBoOworCWlmICgoKnBza2IpLT5sZW4gPCBpcGgtPmlobCo0ICsgc2l6ZW9mKCp1ZHBoKSArCisJICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9vZmZzZXQgKyBtYXRjaF9sZW4pCisJCXJldHVybiAwOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCAoKnBza2IpLT5sZW4pKQorCQlyZXR1cm4gMDsKKworCWlmIChyZXBfbGVuID4gbWF0Y2hfbGVuICYmCisJICAgIHJlcF9sZW4gLSBtYXRjaF9sZW4gPiBza2JfdGFpbHJvb20oKnBza2IpICYmCisJICAgICFlbmxhcmdlX3NrYihwc2tiLCByZXBfbGVuIC0gbWF0Y2hfbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlpcGggPSAoKnBza2IpLT5uaC5pcGg7CisJdWRwaCA9ICh2b2lkICopaXBoICsgaXBoLT5paGwqNDsKKworCW9sZGxlbiA9ICgqcHNrYiktPmxlbiAtIGlwaC0+aWhsKjQ7CisJbWFuZ2xlX2NvbnRlbnRzKCpwc2tiLCBpcGgtPmlobCo0ICsgc2l6ZW9mKCp1ZHBoKSwKKwkJCW1hdGNoX29mZnNldCwgbWF0Y2hfbGVuLCByZXBfYnVmZmVyLCByZXBfbGVuKTsKKworCS8qIHVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBVRFAgcGFja2V0ICovCisJZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIGlwaC0+aWhsKjQ7CisJdWRwaC0+bGVuID0gaHRvbnMoZGF0YWxlbik7CisKKwkvKiBmaXggdWRwIGNoZWNrc3VtIGlmIHVkcCBjaGVja3N1bSB3YXMgcHJldmlvdXNseSBjYWxjdWxhdGVkICovCisJaWYgKCF1ZHBoLT5jaGVjayAmJiAoKnBza2IpLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKCpwc2tiKS0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJdWRwaC0+Y2hlY2sgPSAwOworCQl1ZHBoLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbiwgSVBQUk9UT19VRFAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3N1bV9wYXJ0aWFsKChjaGFyICopdWRwaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbiwgMCkpOworCQlpZiAoIXVkcGgtPmNoZWNrKQorCQkJdWRwaC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKKwl9IGVsc2UKKwkJbmZfcHJvdG9fY3N1bV9yZXBsYWNlMigmdWRwaC0+Y2hlY2ssICpwc2tiLAorCQkJCSAgICAgICBodG9ucyhvbGRsZW4pLCBodG9ucyhkYXRhbGVuKSwgMSk7CisKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0wobmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KTsKKworLyogQWRqdXN0IG9uZSBmb3VuZCBTQUNLIG9wdGlvbiBpbmNsdWRpbmcgY2hlY2tzdW0gY29ycmVjdGlvbiAqLworc3RhdGljIHZvaWQKK3NhY2tfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsCisJICAgIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCisJICAgIHVuc2lnbmVkIGludCBzYWNrb2ZmLAorCSAgICB1bnNpZ25lZCBpbnQgc2Fja2VuZCwKKwkgICAgc3RydWN0IG5mX25hdF9zZXEgKm5hdHNlcSkKK3sKKwl3aGlsZSAoc2Fja29mZiA8IHNhY2tlbmQpIHsKKwkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrX3dpcmUgKnNhY2s7CisJCV9fYmUzMiBuZXdfc3RhcnRfc2VxLCBuZXdfZW5kX3NlcTsKKworCQlzYWNrID0gKHZvaWQgKilza2ItPmRhdGEgKyBzYWNrb2ZmOworCQlpZiAoYWZ0ZXIobnRvaGwoc2Fjay0+c3RhcnRfc2VxKSAtIG5hdHNlcS0+b2Zmc2V0X2JlZm9yZSwKKwkJCSAgbmF0c2VxLT5jb3JyZWN0aW9uX3BvcykpCisJCQluZXdfc3RhcnRfc2VxID0gaHRvbmwobnRvaGwoc2Fjay0+c3RhcnRfc2VxKQorCQkJCQktIG5hdHNlcS0+b2Zmc2V0X2FmdGVyKTsKKwkJZWxzZQorCQkJbmV3X3N0YXJ0X3NlcSA9IGh0b25sKG50b2hsKHNhY2stPnN0YXJ0X3NlcSkKKwkJCQkJLSBuYXRzZXEtPm9mZnNldF9iZWZvcmUpOworCisJCWlmIChhZnRlcihudG9obChzYWNrLT5lbmRfc2VxKSAtIG5hdHNlcS0+b2Zmc2V0X2JlZm9yZSwKKwkJCSAgbmF0c2VxLT5jb3JyZWN0aW9uX3BvcykpCisJCQluZXdfZW5kX3NlcSA9IGh0b25sKG50b2hsKHNhY2stPmVuZF9zZXEpCisJCQkJICAgICAgLSBuYXRzZXEtPm9mZnNldF9hZnRlcik7CisJCWVsc2UKKwkJCW5ld19lbmRfc2VxID0gaHRvbmwobnRvaGwoc2Fjay0+ZW5kX3NlcSkKKwkJCQkgICAgICAtIG5hdHNlcS0+b2Zmc2V0X2JlZm9yZSk7CisKKwkJREVCVUdQKCJzYWNrX2FkanVzdDogc3RhcnRfc2VxOiAlZC0+JWQsIGVuZF9zZXE6ICVkLT4lZFxuIiwKKwkJCW50b2hsKHNhY2stPnN0YXJ0X3NlcSksIG5ld19zdGFydF9zZXEsCisJCQludG9obChzYWNrLT5lbmRfc2VxKSwgbmV3X2VuZF9zZXEpOworCisJCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTQoJnRjcGgtPmNoZWNrLCBza2IsCisJCQkJICAgICAgIHNhY2stPnN0YXJ0X3NlcSwgbmV3X3N0YXJ0X3NlcSwgMCk7CisJCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTQoJnRjcGgtPmNoZWNrLCBza2IsCisJCQkJICAgICAgIHNhY2stPmVuZF9zZXEsIG5ld19lbmRfc2VxLCAwKTsKKwkJc2Fjay0+c3RhcnRfc2VxID0gbmV3X3N0YXJ0X3NlcTsKKwkJc2Fjay0+ZW5kX3NlcSA9IG5ld19lbmRfc2VxOworCQlzYWNrb2ZmICs9IHNpemVvZigqc2Fjayk7CisJfQorfQorCisvKiBUQ1AgU0FDSyBzZXF1ZW5jZSBudW1iZXIgYWRqdXN0bWVudCAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK25mX25hdF9zYWNrX2FkanVzdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgIHN0cnVjdCB0Y3BoZHIgKnRjcGgsCisJCSAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJdW5zaWduZWQgaW50IGRpciwgb3B0b2ZmLCBvcHRlbmQ7CisJc3RydWN0IG5mX2Nvbm5fbmF0ICpuYXQgPSBuZmN0X25hdChjdCk7CisKKwlvcHRvZmYgPSAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCW9wdGVuZCA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyB0Y3BoLT5kb2ZmKjQ7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsIG9wdGVuZCkpCisJCXJldHVybiAwOworCisJZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCisJd2hpbGUgKG9wdG9mZiA8IG9wdGVuZCkgeworCQkvKiBVc3VhbGx5OiBvcHRpb24sIGxlbmd0aC4gKi8KKwkJdW5zaWduZWQgY2hhciAqb3AgPSAoKnBza2IpLT5kYXRhICsgb3B0b2ZmOworCisJCXN3aXRjaCAob3BbMF0pIHsKKwkJY2FzZSBUQ1BPUFRfRU9MOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgVENQT1BUX05PUDoKKwkJCW9wdG9mZisrOworCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQkvKiBubyBwYXJ0aWFsIG9wdGlvbnMgKi8KKwkJCWlmIChvcHRvZmYgKyAxID09IG9wdGVuZCB8fAorCQkJICAgIG9wdG9mZiArIG9wWzFdID4gb3B0ZW5kIHx8CisJCQkgICAgb3BbMV0gPCAyKQorCQkJCXJldHVybiAwOworCQkJaWYgKG9wWzBdID09IFRDUE9QVF9TQUNLICYmCisJCQkgICAgb3BbMV0gPj0gMitUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0sgJiYKKwkJCSAgICAoKG9wWzFdIC0gMikgJSBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spID09IDApCisJCQkJc2Fja19hZGp1c3QoKnBza2IsIHRjcGgsIG9wdG9mZisyLAorCQkJCQkgICAgb3B0b2ZmK29wWzFdLAorCQkJCQkgICAgJm5hdC0+aW5mby5zZXFbIWRpcl0pOworCQkJb3B0b2ZmICs9IG9wWzFdOworCQl9CisJfQorCXJldHVybiAxOworfQorCisvKiBUQ1Agc2VxdWVuY2UgbnVtYmVyIGFkanVzdG1lbnQuICBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlICovCitpbnQKK25mX25hdF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJc3RydWN0IHRjcGhkciAqdGNwaDsKKwlpbnQgZGlyOworCV9fYmUzMiBuZXdzZXEsIG5ld2FjazsKKwlzdHJ1Y3QgbmZfY29ubl9uYXQgKm5hdCA9IG5mY3RfbmF0KGN0KTsKKwlzdHJ1Y3QgbmZfbmF0X3NlcSAqdGhpc193YXksICpvdGhlcl93YXk7CisKKwlkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisKKwl0aGlzX3dheSA9ICZuYXQtPmluZm8uc2VxW2Rpcl07CisJb3RoZXJfd2F5ID0gJm5hdC0+aW5mby5zZXFbIWRpcl07CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsICgqcHNrYiktPm5oLmlwaC0+aWhsKjQrc2l6ZW9mKCp0Y3BoKSkpCisJCXJldHVybiAwOworCisJdGNwaCA9ICh2b2lkICopKCpwc2tiKS0+ZGF0YSArICgqcHNrYiktPm5oLmlwaC0+aWhsKjQ7CisJaWYgKGFmdGVyKG50b2hsKHRjcGgtPnNlcSksIHRoaXNfd2F5LT5jb3JyZWN0aW9uX3BvcykpCisJCW5ld3NlcSA9IGh0b25sKG50b2hsKHRjcGgtPnNlcSkgKyB0aGlzX3dheS0+b2Zmc2V0X2FmdGVyKTsKKwllbHNlCisJCW5ld3NlcSA9IGh0b25sKG50b2hsKHRjcGgtPnNlcSkgKyB0aGlzX3dheS0+b2Zmc2V0X2JlZm9yZSk7CisKKwlpZiAoYWZ0ZXIobnRvaGwodGNwaC0+YWNrX3NlcSkgLSBvdGhlcl93YXktPm9mZnNldF9iZWZvcmUsCisJCSAgb3RoZXJfd2F5LT5jb3JyZWN0aW9uX3BvcykpCisJCW5ld2FjayA9IGh0b25sKG50b2hsKHRjcGgtPmFja19zZXEpIC0gb3RoZXJfd2F5LT5vZmZzZXRfYWZ0ZXIpOworCWVsc2UKKwkJbmV3YWNrID0gaHRvbmwobnRvaGwodGNwaC0+YWNrX3NlcSkgLSBvdGhlcl93YXktPm9mZnNldF9iZWZvcmUpOworCisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmdGNwaC0+Y2hlY2ssICpwc2tiLCB0Y3BoLT5zZXEsIG5ld3NlcSwgMCk7CisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmdGNwaC0+Y2hlY2ssICpwc2tiLCB0Y3BoLT5hY2tfc2VxLCBuZXdhY2ssIDApOworCisJREVCVUdQKCJBZGp1c3Rpbmcgc2VxdWVuY2UgbnVtYmVyIGZyb20gJXUtPiV1LCBhY2sgZnJvbSAldS0+JXVcbiIsCisJCW50b2hsKHRjcGgtPnNlcSksIG50b2hsKG5ld3NlcSksIG50b2hsKHRjcGgtPmFja19zZXEpLAorCQludG9obChuZXdhY2spKTsKKworCXRjcGgtPnNlcSA9IG5ld3NlcTsKKwl0Y3BoLT5hY2tfc2VxID0gbmV3YWNrOworCisJaWYgKCFuZl9uYXRfc2Fja19hZGp1c3QocHNrYiwgdGNwaCwgY3QsIGN0aW5mbykpCisJCXJldHVybiAwOworCisJbmZfY29ubnRyYWNrX3RjcF91cGRhdGUoKnBza2IsICgqcHNrYiktPm5oLmlwaC0+aWhsKjQsIGN0LCBkaXIpOworCisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKG5mX25hdF9zZXFfYWRqdXN0KTsKKworLyogU2V0dXAgTkFUIG9uIHRoaXMgZXhwZWN0ZWQgY29ubnRyYWNrIHNvIGl0IGZvbGxvd3MgbWFzdGVyLiAqLworLyogSWYgd2UgZmFpbCB0byBnZXQgYSBmcmVlIE5BVCBzbG90LCB3ZSdsbCBnZXQgZHJvcHBlZCBvbiBjb25maXJtICovCit2b2lkIG5mX25hdF9mb2xsb3dfbWFzdGVyKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOworCisJLyogVGhpcyBtdXN0IGJlIGEgZnJlc2ggb25lLiAqLworCUJVR19PTihjdC0+c3RhdHVzICYgSVBTX05BVF9ET05FX01BU0spOworCisJLyogQ2hhbmdlIHNyYyB0byB3aGVyZSBtYXN0ZXIgc2VuZHMgdG8gKi8KKwlyYW5nZS5mbGFncyA9IElQX05BVF9SQU5HRV9NQVBfSVBTOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcAorCQk9IGN0LT5tYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLmRzdC51My5pcDsKKwkvKiBob29rIGRvZXNuJ3QgbWF0dGVyLCBidXQgaXQgaGFzIHRvIGRvIHNvdXJjZSBtYW5pcCAqLworCW5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIE5GX0lQX1BPU1RfUk9VVElORyk7CisKKwkvKiBGb3IgRFNUIG1hbmlwLCBtYXAgcG9ydCBoZXJlIHRvIHdoZXJlIGl0J3MgZXhwZWN0ZWQuICovCisJcmFuZ2UuZmxhZ3MgPSAoSVBfTkFUX1JBTkdFX01BUF9JUFMgfCBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKTsKKwlyYW5nZS5taW4gPSByYW5nZS5tYXggPSBleHAtPnNhdmVkX3Byb3RvOworCXJhbmdlLm1pbl9pcCA9IHJhbmdlLm1heF9pcAorCQk9IGN0LT5tYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLnNyYy51My5pcDsKKwkvKiBob29rIGRvZXNuJ3QgbWF0dGVyLCBidXQgaXQgaGFzIHRvIGRvIGRlc3RpbmF0aW9uIG1hbmlwICovCisJbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgTkZfSVBfUFJFX1JPVVRJTkcpOworfQorRVhQT1JUX1NZTUJPTChuZl9uYXRfZm9sbG93X21hc3Rlcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2lyYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9pcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjhjMGRhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9pcmMuYwpAQCAtMCwwICsxLDEwMSBAQAorLyogSVJDIGV4dGVuc2lvbiBmb3IgVENQIE5BVCBhbHRlcmF0aW9uLgorICoKKyAqIChDKSAyMDAwLTIwMDEgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqIChDKSAyMDA0IFJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4gSUJNIENvcnBvcmF0aW9uCisgKiBiYXNlZCBvbiBhIGNvcHkgb2YgUlIncyBpcF9uYXRfZnRwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJUkMgKERDQykgTkFUIGhlbHBlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcF9uYXRfaXJjIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgdW5zaWduZWQgaW50IG1hdGNob2ZmLAorCQkJIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKKwkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCWNoYXIgYnVmZmVyW3NpemVvZigiNDI5NDk2NzI5NiA2NTYzNSIpXTsKKwl1X2ludDMyX3QgaXA7CisJdV9pbnQxNl90IHBvcnQ7CisJdW5zaWduZWQgaW50IHJldDsKKworCURFQlVHUCgiSVJDX05BVDogaW5mbyAoc2VxICV1ICsgJXUpIGluICV1XG4iLAorCSAgICAgICBleHBlY3QtPnNlcSwgZXhwX2lyY19pbmZvLT5sZW4sIG50b2hsKHRjcGgtPnNlcSkpOworCisJLyogUmVwbHkgY29tZXMgZnJvbSBzZXJ2ZXIuICovCisJZXhwLT5zYXZlZF9wcm90by50Y3AucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQ7CisJZXhwLT5kaXIgPSBJUF9DVF9ESVJfUkVQTFk7CisJZXhwLT5leHBlY3RmbiA9IG5mX25hdF9mb2xsb3dfbWFzdGVyOworCisJLyogVHJ5IHRvIGdldCBzYW1lIHBvcnQ6IGlmIG5vdCwgdHJ5IHRvIGNoYW5nZSBpdC4gKi8KKwlmb3IgKHBvcnQgPSBudG9ocyhleHAtPnNhdmVkX3Byb3RvLnRjcC5wb3J0KTsgcG9ydCAhPSAwOyBwb3J0KyspIHsKKwkJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChwb3J0ID09IDApCisJCXJldHVybiBORl9EUk9QOworCisJaXAgPSBudG9obChleHAtPm1hc3Rlci0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnUzLmlwKTsKKwlzcHJpbnRmKGJ1ZmZlciwgIiV1ICV1IiwgaXAsIHBvcnQpOworCURFQlVHUCgibmZfbmF0X2lyYzogaW5zZXJ0aW5nICclcycgPT0gJXUuJXUuJXUuJXUsIHBvcnQgJXVcbiIsCisJICAgICAgIGJ1ZmZlciwgTklQUVVBRChpcCksIHBvcnQpOworCisJcmV0ID0gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHBza2IsIGV4cC0+bWFzdGVyLCBjdGluZm8sCisJCQkJICAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgYnVmZmVyLAorCQkJCSAgICAgICBzdHJsZW4oYnVmZmVyKSk7CisJaWYgKHJldCAhPSBORl9BQ0NFUFQpCisJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9pcmNfZmluaSh2b2lkKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfaXJjX2hvb2ssIE5VTEwpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfaXJjX2luaXQodm9pZCkKK3sKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5mX25hdF9pcmNfaG9vaykpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfaXJjX2hvb2ssIGhlbHApOworCXJldHVybiAwOworfQorCisvKiBQcmlvciB0byAyLjYuMTEsIHdlIGhhZCBhIHBvcnRzIHBhcmFtLiAgTm8gbG9uZ2VyLCBidXQgZG9uJ3QgYnJlYWsgdXNlcnMuICovCitzdGF0aWMgaW50IHdhcm5fc2V0KGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRQorCSAgICAgICAiOiBrZXJuZWwgPj0gMi42LjEwIG9ubHkgdXNlcyAncG9ydHMnIGZvciBjb25udHJhY2sgbW9kdWxlc1xuIik7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfcGFyYW1fY2FsbChwb3J0cywgd2Fybl9zZXQsIE5VTEwsIE5VTEwsIDApOworCittb2R1bGVfaW5pdChuZl9uYXRfaXJjX2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X2lyY19maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNDViNwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogbmZfbmF0X3BwdHAuYworICoKKyAqIE5BVCBzdXBwb3J0IGZvciBQUFRQIChQb2ludCB0byBQb2ludCBUdW5uZWxpbmcgUHJvdG9jb2wpLgorICogUFBUUCBpcyBhIGEgcHJvdG9jb2wgZm9yIGNyZWF0aW5nIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3Jrcy4KKyAqIEl0IGlzIGEgc3BlY2lmaWNhdGlvbiBkZWZpbmVkIGJ5IE1pY3Jvc29mdCBhbmQgc29tZSB2ZW5kb3JzCisgKiB3b3JraW5nIHdpdGggTWljcm9zb2Z0LiAgUFBUUCBpcyBidWlsdCBvbiB0b3Agb2YgYSBtb2RpZmllZAorICogdmVyc2lvbiBvZiB0aGUgSW50ZXJuZXQgR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gUHJvdG9jb2wuCisgKiBHUkUgaXMgZGVmaW5lZCBpbiBSRkMgMTcwMSBhbmQgUkZDIDE3MDIuICBEb2N1bWVudGF0aW9uIG9mCisgKiBQUFRQIGNhbiBiZSBmb3VuZCBpbiBSRkMgMjYzNworICoKKyAqIChDKSAyMDAwLTIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4KKyAqCisgKiBEZXZlbG9wbWVudCBvZiB0aGlzIGNvZGUgZnVuZGVkIGJ5IEFzdGFybyBBRyAoaHR0cDovL3d3dy5hc3Rhcm8uY29tLykKKyAqCisgKiBUT0RPOiAtIE5BVCB0byBhIHVuaXF1ZSB0dXBsZSwgbm90IHRvIFRDUCBzb3VyY2UgcG9ydAorICogCSAgIChuZWVkcyBuZXRmaWx0ZXIgdHVwbGUgcmVzZXJ2YXRpb24pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaD4KKworI2RlZmluZSBORl9OQVRfUFBUUF9WRVJTSU9OICIzLjAiCisKKyNkZWZpbmUgUkVRX0NJRChyZXEsIG9mZikJCSgqKF9fYmUxNiAqKSgoY2hhciAqKShyZXEpICsgKG9mZikpKQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRmaWx0ZXIgTkFUIGhlbHBlciBtb2R1bGUgZm9yIFBQVFAiKTsKK01PRFVMRV9BTElBUygiaXBfbmF0X3BwdHAiKTsKKworI2lmIDAKK2V4dGVybiBjb25zdCBjaGFyICpwcHRwX21zZ19uYW1lW107CisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBcCisJCQkJICAgICAgIF9fRlVOQ1RJT05fXywgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIHZvaWQgcHB0cF9uYXRfZXhwZWN0ZWQoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyID0gY3QtPm1hc3RlcjsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqb3RoZXJfZXhwOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdDsKKwlzdHJ1Y3QgbmZfY3RfcHB0cF9tYXN0ZXIgKmN0X3BwdHBfaW5mbzsKKwlzdHJ1Y3QgbmZfbmF0X3BwdHAgKm5hdF9wcHRwX2luZm87CisJc3RydWN0IGlwX25hdF9yYW5nZSByYW5nZTsKKworCWN0X3BwdHBfaW5mbyA9ICZuZmN0X2hlbHAobWFzdGVyKS0+aGVscC5jdF9wcHRwX2luZm87CisJbmF0X3BwdHBfaW5mbyA9ICZuZmN0X25hdChtYXN0ZXIpLT5oZWxwLm5hdF9wcHRwX2luZm87CisKKwkvKiBBbmQgaGVyZSBnb2VzIHRoZSBncmFuZCBmaW5hbGUgb2YgY29ycm9zaW9uLi4uICovCisJaWYgKGV4cC0+ZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCkgeworCQlERUJVR1AoIndlIGFyZSBQTlMtPlBBQ1xuIik7CisJCS8qIHRoZXJlZm9yZSwgYnVpbGQgdHVwbGUgZm9yIFBBQy0+UE5TICovCisJCXQuc3JjLmwzbnVtID0gQUZfSU5FVDsKKwkJdC5zcmMudTMuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLnNyYy51My5pcDsKKwkJdC5zcmMudS5ncmUua2V5ID0gY3RfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZDsKKwkJdC5kc3QudTMuaXAgPSBtYXN0ZXItPnR1cGxlaGFzaFshZXhwLT5kaXJdLnR1cGxlLmRzdC51My5pcDsKKwkJdC5kc3QudS5ncmUua2V5ID0gY3RfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZDsKKwkJdC5kc3QucHJvdG9udW0gPSBJUFBST1RPX0dSRTsKKwl9IGVsc2UgeworCQlERUJVR1AoIndlIGFyZSBQQUMtPlBOU1xuIik7CisJCS8qIGJ1aWxkIHR1cGxlIGZvciBQTlMtPlBBQyAqLworCQl0LnNyYy5sM251bSA9IEFGX0lORVQ7CisJCXQuc3JjLnUzLmlwID0gbWFzdGVyLT50dXBsZWhhc2hbZXhwLT5kaXJdLnR1cGxlLnNyYy51My5pcDsKKwkJdC5zcmMudS5ncmUua2V5ID0gbmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQ7CisJCXQuZHN0LnUzLmlwID0gbWFzdGVyLT50dXBsZWhhc2hbZXhwLT5kaXJdLnR1cGxlLmRzdC51My5pcDsKKwkJdC5kc3QudS5ncmUua2V5ID0gbmF0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQ7CisJCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CisJfQorCisJREVCVUdQKCJ0cnlpbmcgdG8gdW5leHBlY3Qgb3RoZXIgZGlyOiAiKTsKKwlORl9DVF9EVU1QX1RVUExFKCZ0KTsKKwlvdGhlcl9leHAgPSBuZl9jb25udHJhY2tfZXhwZWN0X2ZpbmRfZ2V0KCZ0KTsKKwlpZiAob3RoZXJfZXhwKSB7CisJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKG90aGVyX2V4cCk7CisJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KG90aGVyX2V4cCk7CisJCURFQlVHUCgic3VjY2Vzc1xuIik7CisJfSBlbHNlIHsKKwkJREVCVUdQKCJub3QgZm91bmQhXG4iKTsKKwl9CisKKwkvKiBUaGlzIG11c3QgYmUgYSBmcmVzaCBvbmUuICovCisJQlVHX09OKGN0LT5zdGF0dXMgJiBJUFNfTkFUX0RPTkVfTUFTSyk7CisKKwkvKiBDaGFuZ2Ugc3JjIHRvIHdoZXJlIG1hc3RlciBzZW5kcyB0byAqLworCXJhbmdlLmZsYWdzID0gSVBfTkFUX1JBTkdFX01BUF9JUFM7CisJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwCisJCT0gY3QtPm1hc3Rlci0+dHVwbGVoYXNoWyFleHAtPmRpcl0udHVwbGUuZHN0LnUzLmlwOworCWlmIChleHAtPmRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpIHsKKwkJcmFuZ2UuZmxhZ3MgfD0gSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRDsKKwkJcmFuZ2UubWluID0gcmFuZ2UubWF4ID0gZXhwLT5zYXZlZF9wcm90bzsKKwl9CisJLyogaG9vayBkb2Vzbid0IG1hdHRlciwgYnV0IGl0IGhhcyB0byBkbyBzb3VyY2UgbWFuaXAgKi8KKwluZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBORl9JUF9QT1NUX1JPVVRJTkcpOworCisJLyogRm9yIERTVCBtYW5pcCwgbWFwIHBvcnQgaGVyZSB0byB3aGVyZSBpdCdzIGV4cGVjdGVkLiAqLworCXJhbmdlLmZsYWdzID0gSVBfTkFUX1JBTkdFX01BUF9JUFM7CisJcmFuZ2UubWluX2lwID0gcmFuZ2UubWF4X2lwCisJCT0gY3QtPm1hc3Rlci0+dHVwbGVoYXNoWyFleHAtPmRpcl0udHVwbGUuc3JjLnUzLmlwOworCWlmIChleHAtPmRpciA9PSBJUF9DVF9ESVJfUkVQTFkpIHsKKwkJcmFuZ2UuZmxhZ3MgfD0gSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRDsKKwkJcmFuZ2UubWluID0gcmFuZ2UubWF4ID0gZXhwLT5zYXZlZF9wcm90bzsKKwl9CisJLyogaG9vayBkb2Vzbid0IG1hdHRlciwgYnV0IGl0IGhhcyB0byBkbyBkZXN0aW5hdGlvbiBtYW5pcCAqLworCW5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIE5GX0lQX1BSRV9ST1VUSU5HKTsKK30KKworLyogb3V0Ym91bmQgcGFja2V0cyA9PSBmcm9tIFBOUyB0byBQQUMgKi8KK3N0YXRpYyBpbnQKK3BwdHBfb3V0Ym91bmRfcGt0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkgIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSkKKworeworCXN0cnVjdCBuZl9jdF9wcHRwX21hc3RlciAqY3RfcHB0cF9pbmZvOworCXN0cnVjdCBuZl9uYXRfcHB0cCAqbmF0X3BwdHBfaW5mbzsKKwl1X2ludDE2X3QgbXNnOworCV9fYmUxNiBuZXdfY2FsbGlkOworCXVuc2lnbmVkIGludCBjaWRfb2ZmOworCisJY3RfcHB0cF9pbmZvICA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X3BwdHBfaW5mbzsKKwluYXRfcHB0cF9pbmZvID0gJm5mY3RfbmF0KGN0KS0+aGVscC5uYXRfcHB0cF9pbmZvOworCisJbmV3X2NhbGxpZCA9IGN0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQ7CisKKwlzd2l0Y2ggKG1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKSkgeworCWNhc2UgUFBUUF9PVVRfQ0FMTF9SRVFVRVNUOgorCQljaWRfb2ZmID0gb2Zmc2V0b2YodW5pb24gcHB0cF9jdHJsX3VuaW9uLCBvY3JlcS5jYWxsSUQpOworCQkvKiBGSVhNRTogaWRlYWxseSB3ZSB3b3VsZCB3YW50IHRvIHJlc2VydmUgYSBjYWxsIElECisJCSAqIGhlcmUuICBjdXJyZW50IG5ldGZpbHRlciBOQVQgY29yZSBpcyBub3QgYWJsZSB0byBkbworCQkgKiB0aGlzIDooIEZvciBub3cgd2UgdXNlIFRDUCBzb3VyY2UgcG9ydC4gVGhpcyBicmVha3MKKwkJICogbXVsdGlwbGUgY2FsbHMgd2l0aGluIG9uZSBjb250cm9sIHNlc3Npb24gKi8KKworCQkvKiBzYXZlIG9yaWdpbmFsIGNhbGwgSUQgaW4gbmF0X2luZm8gKi8KKwkJbmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQgPSBjdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkOworCisJCS8qIGRvbid0IHVzZSB0Y3BoLT5zb3VyY2Ugc2luY2Ugd2UgYXJlIGF0IGEgRFNUbWFuaXAKKwkJICogaG9vayAoZS5nLiBQUkVST1VUSU5HKSBhbmQgcGt0IGlzIG5vdCBtYW5nbGVkIHlldCAqLworCQluZXdfY2FsbGlkID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC51LnRjcC5wb3J0OworCisJCS8qIHNhdmUgbmV3IGNhbGwgSUQgaW4gY3QgaW5mbyAqLworCQljdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkID0gbmV3X2NhbGxpZDsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0lOX0NBTExfUkVQTFk6CisJCWNpZF9vZmYgPSBvZmZzZXRvZih1bmlvbiBwcHRwX2N0cmxfdW5pb24sIGljYWNrLmNhbGxJRCk7CisJCWJyZWFrOworCWNhc2UgUFBUUF9DQUxMX0NMRUFSX1JFUVVFU1Q6CisJCWNpZF9vZmYgPSBvZmZzZXRvZih1bmlvbiBwcHRwX2N0cmxfdW5pb24sIGNscnJlcS5jYWxsSUQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR1AoInVua25vd24gb3V0Ym91bmQgcGFja2V0IDB4JTA0eDolc1xuIiwgbXNnLAorCQkgICAgICAobXNnIDw9IFBQVFBfTVNHX01BWCk/CisJCSAgICAgIHBwdHBfbXNnX25hbWVbbXNnXTpwcHRwX21zZ19uYW1lWzBdKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBQUFRQX1NFVF9MSU5LX0lORk86CisJCS8qIG9ubHkgbmVlZCB0byBOQVQgaW4gY2FzZSBQQUMgaXMgYmVoaW5kIE5BVCBib3ggKi8KKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVFVRVNUOgorCWNhc2UgUFBUUF9TVEFSVF9TRVNTSU9OX1JFUExZOgorCWNhc2UgUFBUUF9TVE9QX1NFU1NJT05fUkVRVUVTVDoKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCWNhc2UgUFBUUF9FQ0hPX1JFUVVFU1Q6CisJY2FzZSBQUFRQX0VDSE9fUkVQTFk6CisJCS8qIG5vIG5lZWQgdG8gYWx0ZXIgcGFja2V0ICovCisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJLyogb25seSBPVVRfQ0FMTF9SRVFVRVNULCBJTl9DQUxMX1JFUExZLCBDQUxMX0NMRUFSX1JFUVVFU1QgcGFzcworCSAqIGRvd24gdG8gaGVyZSAqLworCURFQlVHUCgiYWx0ZXJpbmcgY2FsbCBpZCBmcm9tIDB4JTA0eCB0byAweCUwNHhcbiIsCisJCW50b2hzKFJFUV9DSUQocHB0cFJlcSwgY2lkX29mZikpLCBudG9ocyhuZXdfY2FsbGlkKSk7CisKKwkvKiBtYW5nbGUgcGFja2V0ICovCisJaWYgKG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkX29mZiArIHNpemVvZihzdHJ1Y3QgcHB0cF9wa3RfaGRyKSArCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IFBwdHBDb250cm9sSGVhZGVyKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXdfY2FsbGlkKSwgKGNoYXIgKikmbmV3X2NhbGxpZCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXdfY2FsbGlkKSkgPT0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworc3RhdGljIHZvaWQKK3BwdHBfZXhwX2dyZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0X29yaWcsCisJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0X3JlcGx5KQoreworCXN0cnVjdCBuZl9jb25uICpjdCA9IGV4cGVjdF9vcmlnLT5tYXN0ZXI7CisJc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyICpjdF9wcHRwX2luZm87CisJc3RydWN0IG5mX25hdF9wcHRwICpuYXRfcHB0cF9pbmZvOworCisJY3RfcHB0cF9pbmZvICA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X3BwdHBfaW5mbzsKKwluYXRfcHB0cF9pbmZvID0gJm5mY3RfbmF0KGN0KS0+aGVscC5uYXRfcHB0cF9pbmZvOworCisJLyogc2F2ZSBvcmlnaW5hbCBQQUMgY2FsbCBJRCBpbiBuYXRfaW5mbyAqLworCW5hdF9wcHRwX2luZm8tPnBhY19jYWxsX2lkID0gY3RfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZDsKKworCS8qIGFsdGVyIGV4cGVjdGF0aW9uIGZvciBQTlMtPlBBQyBkaXJlY3Rpb24gKi8KKwlleHBlY3Rfb3JpZy0+c2F2ZWRfcHJvdG8uZ3JlLmtleSA9IGN0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQ7CisJZXhwZWN0X29yaWctPnR1cGxlLnNyYy51LmdyZS5rZXkgPSBuYXRfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZDsKKwlleHBlY3Rfb3JpZy0+dHVwbGUuZHN0LnUuZ3JlLmtleSA9IGN0X3BwdHBfaW5mby0+cGFjX2NhbGxfaWQ7CisJZXhwZWN0X29yaWctPmRpciA9IElQX0NUX0RJUl9PUklHSU5BTDsKKworCS8qIGFsdGVyIGV4cGVjdGF0aW9uIGZvciBQQUMtPlBOUyBkaXJlY3Rpb24gKi8KKwlleHBlY3RfcmVwbHktPnNhdmVkX3Byb3RvLmdyZS5rZXkgPSBuYXRfcHB0cF9pbmZvLT5wbnNfY2FsbF9pZDsKKwlleHBlY3RfcmVwbHktPnR1cGxlLnNyYy51LmdyZS5rZXkgPSBuYXRfcHB0cF9pbmZvLT5wYWNfY2FsbF9pZDsKKwlleHBlY3RfcmVwbHktPnR1cGxlLmRzdC51LmdyZS5rZXkgPSBjdF9wcHRwX2luZm8tPnBuc19jYWxsX2lkOworCWV4cGVjdF9yZXBseS0+ZGlyID0gSVBfQ1RfRElSX1JFUExZOworfQorCisvKiBpbmJvdW5kIHBhY2tldHMgPT0gZnJvbSBQQUMgdG8gUE5TICovCitzdGF0aWMgaW50CitwcHRwX2luYm91bmRfcGt0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkgdW5pb24gcHB0cF9jdHJsX3VuaW9uICpwcHRwUmVxKQoreworCXN0cnVjdCBuZl9uYXRfcHB0cCAqbmF0X3BwdHBfaW5mbzsKKwl1X2ludDE2X3QgbXNnOworCV9fYmUxNiBuZXdfcGNpZDsKKwl1bnNpZ25lZCBpbnQgcGNpZF9vZmY7CisKKwluYXRfcHB0cF9pbmZvID0gJm5mY3RfbmF0KGN0KS0+aGVscC5uYXRfcHB0cF9pbmZvOworCW5ld19wY2lkID0gbmF0X3BwdHBfaW5mby0+cG5zX2NhbGxfaWQ7CisKKwlzd2l0Y2ggKG1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKSkgeworCWNhc2UgUFBUUF9PVVRfQ0FMTF9SRVBMWToKKwkJcGNpZF9vZmYgPSBvZmZzZXRvZih1bmlvbiBwcHRwX2N0cmxfdW5pb24sIG9jYWNrLnBlZXJzQ2FsbElEKTsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0lOX0NBTExfQ09OTkVDVDoKKwkJcGNpZF9vZmYgPSBvZmZzZXRvZih1bmlvbiBwcHRwX2N0cmxfdW5pb24sIGljY29uLnBlZXJzQ2FsbElEKTsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0lOX0NBTExfUkVRVUVTVDoKKwkJLyogb25seSBuZWVkIHRvIG5hdCBpbiBjYXNlIFBBQyBpcyBiZWhpbmQgTkFUIGJveCAqLworCQlyZXR1cm4gTkZfQUNDRVBUOworCWNhc2UgUFBUUF9XQU5fRVJST1JfTk9USUZZOgorCQlwY2lkX29mZiA9IG9mZnNldG9mKHVuaW9uIHBwdHBfY3RybF91bmlvbiwgd2FuZXJyLnBlZXJzQ2FsbElEKTsKKwkJYnJlYWs7CisJY2FzZSBQUFRQX0NBTExfRElTQ09OTkVDVF9OT1RJRlk6CisJCXBjaWRfb2ZmID0gb2Zmc2V0b2YodW5pb24gcHB0cF9jdHJsX3VuaW9uLCBkaXNjLmNhbGxJRCk7CisJCWJyZWFrOworCWNhc2UgUFBUUF9TRVRfTElOS19JTkZPOgorCQlwY2lkX29mZiA9IG9mZnNldG9mKHVuaW9uIHBwdHBfY3RybF91bmlvbiwgc2V0bGluay5wZWVyc0NhbGxJRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHUCgidW5rbm93biBpbmJvdW5kIHBhY2tldCAlc1xuIiwgKG1zZyA8PSBQUFRQX01TR19NQVgpPworCQkJcHB0cF9tc2dfbmFtZVttc2ddOnBwdHBfbXNnX25hbWVbMF0pOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVFVRVNUOgorCWNhc2UgUFBUUF9TVEFSVF9TRVNTSU9OX1JFUExZOgorCWNhc2UgUFBUUF9TVE9QX1NFU1NJT05fUkVRVUVTVDoKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCWNhc2UgUFBUUF9FQ0hPX1JFUVVFU1Q6CisJY2FzZSBQUFRQX0VDSE9fUkVQTFk6CisJCS8qIG5vIG5lZWQgdG8gYWx0ZXIgcGFja2V0ICovCisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJLyogb25seSBPVVRfQ0FMTF9SRVBMWSwgSU5fQ0FMTF9DT05ORUNULCBJTl9DQUxMX1JFUVVFU1QsCisJICogV0FOX0VSUk9SX05PVElGWSwgQ0FMTF9ESVNDT05ORUNUX05PVElGWSBwYXNzIGRvd24gaGVyZSAqLworCisJLyogbWFuZ2xlIHBhY2tldCAqLworCURFQlVHUCgiYWx0ZXJpbmcgcGVlciBjYWxsIGlkIGZyb20gMHglMDR4IHRvIDB4JTA0eFxuIiwKKwkJbnRvaHMoUkVRX0NJRChwcHRwUmVxLCBwY2lkX29mZikpLCBudG9ocyhuZXdfcGNpZCkpOworCisJaWYgKG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpZF9vZmYgKyBzaXplb2Yoc3RydWN0IHBwdHBfcGt0X2hkcikgKworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciksCisJCQkJICAgICBzaXplb2YobmV3X3BjaWQpLCAoY2hhciAqKSZuZXdfcGNpZCwKKwkJCQkgICAgIHNpemVvZihuZXdfcGNpZCkpID09IDApCisJCXJldHVybiBORl9EUk9QOworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX25hdF9oZWxwZXJfcHB0cF9pbml0KHZvaWQpCit7CisJbmZfbmF0X25lZWRfZ3JlKCk7CisKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5mX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3BwdHBfaG9va19vdXRib3VuZCwgcHB0cF9vdXRib3VuZF9wa3QpOworCisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfcHB0cF9ob29rX2luYm91bmQpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3BwdHBfaG9va19pbmJvdW5kLCBwcHRwX2luYm91bmRfcGt0KTsKKworCUJVR19PTihyY3VfZGVyZWZlcmVuY2UobmZfbmF0X3BwdHBfaG9va19leHBfZ3JlKSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9wcHRwX2hvb2tfZXhwX2dyZSwgcHB0cF9leHBfZ3JlKTsKKworCUJVR19PTihyY3VfZGVyZWZlcmVuY2UobmZfbmF0X3BwdHBfaG9va19leHBlY3RmbikpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfcHB0cF9ob29rX2V4cGVjdGZuLCBwcHRwX25hdF9leHBlY3RlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9uYXRfaGVscGVyX3BwdHBfZmluaSh2b2lkKQoreworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfcHB0cF9ob29rX2V4cGVjdGZuLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3BwdHBfaG9va19leHBfZ3JlLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3BwdHBfaG9va19pbmJvdW5kLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3BwdHBfaG9va19vdXRib3VuZCwgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CisKK21vZHVsZV9pbml0KG5mX25hdF9oZWxwZXJfcHB0cF9pbml0KTsKK21vZHVsZV9leGl0KG5mX25hdF9oZWxwZXJfcHB0cF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fZ3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2dyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZGU1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2dyZS5jCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogbmZfbmF0X3Byb3RvX2dyZS5jCisgKgorICogTkFUIHByb3RvY29sIGhlbHBlciBtb2R1bGUgZm9yIEdSRS4KKyAqCisgKiBHUkUgaXMgYSBnZW5lcmljIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wsIHdoaWNoIGlzIGdlbmVyYWxseSBub3QgdmVyeQorICogc3VpdGVkIGZvciBOQVQsIGFzIGl0IGhhcyBubyBwcm90b2NvbC1zcGVjaWZpYyBwYXJ0IGFzIHBvcnQgbnVtYmVycy4KKyAqCisgKiBJdCBoYXMgYW4gb3B0aW9uYWwga2V5IGZpZWxkLCB3aGljaCBtYXkgaGVscCB1cyBkaXN0aW5ndWlzaGluZyB0d28KKyAqIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHNhbWUgdHdvIGhvc3RzLgorICoKKyAqIEdSRSBpcyBkZWZpbmVkIGluIFJGQyAxNzAxIGFuZCBSRkMgMTcwMiwgYXMgd2VsbCBhcyBSRkMgMjc4NAorICoKKyAqIFBQVFAgaXMgYnVpbHQgb24gdG9wIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBHUkUsIGFuZCBoYXMgYSBtYW5kYXRvcnkKKyAqIGZpZWxkIGNhbGxlZCAiQ2FsbElEIiwgd2hpY2ggc2VydmVzIHVzIGZvciB0aGUgc2FtZSBwdXJwb3NlIGFzIHRoZSBrZXkKKyAqIGZpZWxkIGluIHBsYWluIEdSRS4KKyAqCisgKiBEb2N1bWVudGF0aW9uIGFib3V0IFBQVFAgY2FuIGJlIGZvdW5kIGluIFJGQyAyNjM3CisgKgorICogKEMpIDIwMDAtMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIERldmVsb3BtZW50IG9mIHRoaXMgY29kZSBmdW5kZWQgYnkgQXN0YXJvIEFHIChodHRwOi8vd3d3LmFzdGFyby5jb20vKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0ZmlsdGVyIE5BVCBwcm90b2NvbCBoZWxwZXIgbW9kdWxlIGZvciBHUkUiKTsKKworI2lmIDAKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzOiAiIGZvcm1hdCwgX19GSUxFX18sIFwKKwkJCQkgICAgICAgX19GVU5DVElPTl9fLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKHgsIGFyZ3MuLi4pCisjZW5kaWYKKworLyogaXMga2V5IGluIGdpdmVuIHJhbmdlIGJldHdlZW4gbWluIGFuZCBtYXggKi8KK3N0YXRpYyBpbnQKK2dyZV9pbl9yYW5nZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkgICAgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAorCSAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWF4KQoreworCV9fYmUxNiBrZXk7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCWtleSA9IHR1cGxlLT5zcmMudS5ncmUua2V5OworCWVsc2UKKwkJa2V5ID0gdHVwbGUtPmRzdC51LmdyZS5rZXk7CisKKwlyZXR1cm4gbnRvaHMoa2V5KSA+PSBudG9ocyhtaW4tPmdyZS5rZXkpICYmCisJICAgICAgIG50b2hzKGtleSkgPD0gbnRvaHMobWF4LT5ncmUua2V5KTsKK30KKworLyogZ2VuZXJhdGUgdW5pcXVlIHR1cGxlIC4uLiAqLworc3RhdGljIGludAorZ3JlX3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrKQoreworCXN0YXRpYyB1X2ludDE2X3Qga2V5OworCV9fYmUxNiAqa2V5cHRyOworCXVuc2lnbmVkIGludCBtaW4sIGksIHJhbmdlX3NpemU7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCWtleXB0ciA9ICZ0dXBsZS0+c3JjLnUuZ3JlLmtleTsKKwllbHNlCisJCWtleXB0ciA9ICZ0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKKworCWlmICghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpKSB7CisJCURFQlVHUCgiJXA6IE5BVGluZyBHUkUgUFBUUFxuIiwgY29ubnRyYWNrKTsKKwkJbWluID0gMTsKKwkJcmFuZ2Vfc2l6ZSA9IDB4ZmZmZjsKKwl9IGVsc2UgeworCQltaW4gPSBudG9ocyhyYW5nZS0+bWluLmdyZS5rZXkpOworCQlyYW5nZV9zaXplID0gbnRvaHMocmFuZ2UtPm1heC5ncmUua2V5KSAtIG1pbiArIDE7CisJfQorCisJREVCVUdQKCJtaW4gPSAldSwgcmFuZ2Vfc2l6ZSA9ICV1XG4iLCBtaW4sIHJhbmdlX3NpemUpOworCisJZm9yIChpID0gMDsgaSA8IHJhbmdlX3NpemU7IGkrKywga2V5KyspIHsKKwkJKmtleXB0ciA9IGh0b25zKG1pbiArIGtleSAlIHJhbmdlX3NpemUpOworCQlpZiAoIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjb25udHJhY2spKQorCQkJcmV0dXJuIDE7CisJfQorCisJREVCVUdQKCIlcDogbm8gTkFUIG1hcHBpbmdcbiIsIGNvbm50cmFjayk7CisJcmV0dXJuIDA7Cit9CisKKy8qIG1hbmlwdWxhdGUgYSBHUkUgcGFja2V0IGFjY29yZGluZyB0byBtYW5pcHR5cGUgKi8KK3N0YXRpYyBpbnQKK2dyZV9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCisJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCit7CisJc3RydWN0IGdyZV9oZHIgKmdyZWg7CisJc3RydWN0IGdyZV9oZHJfcHB0cCAqcGdyZWg7CisJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKCgqcHNrYiktPmRhdGEgKyBpcGhkcm9mZik7CisJdW5zaWduZWQgaW50IGhkcm9mZiA9IGlwaGRyb2ZmICsgaXBoLT5paGwgKiA0OworCisJLyogcGdyZWggaW5jbHVkZXMgdHdvIG9wdGlvbmFsIDMyYml0IGZpZWxkcyB3aGljaCBhcmUgbm90IHJlcXVpcmVkCisJICogdG8gYmUgdGhlcmUuICBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljICc4JyBjb21lcyBmcm9tICovCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCBoZHJvZmYgKyBzaXplb2YoKnBncmVoKSAtIDgpKQorCQlyZXR1cm4gMDsKKworCWdyZWggPSAodm9pZCAqKSgqcHNrYiktPmRhdGEgKyBoZHJvZmY7CisJcGdyZWggPSAoc3RydWN0IGdyZV9oZHJfcHB0cCAqKWdyZWg7CisKKwkvKiB3ZSBvbmx5IGhhdmUgZGVzdGluYXRpb24gbWFuaXAgb2YgYSBwYWNrZXQsIHNpbmNlICdzb3VyY2Uga2V5JworCSAqIGlzIG5vdCBwcmVzZW50IGluIHRoZSBwYWNrZXQgaXRzZWxmICovCisJaWYgKG1hbmlwdHlwZSAhPSBJUF9OQVRfTUFOSVBfRFNUKQorCQlyZXR1cm4gMTsKKwlzd2l0Y2ggKGdyZWgtPnZlcnNpb24pIHsKKwljYXNlIDA6CisJCWlmICghZ3JlaC0+a2V5KSB7CisJCQlERUJVR1AoImNhbid0IG5hdCBHUkUgdy9vIGtleVxuIik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZ3JlaC0+Y3N1bSkgeworCQkJLyogRklYTUU6IE5ldmVyIHRlc3RlZCB0aGlzIGNvZGUuLi4gKi8KKwkJCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTQoZ3JlX2NzdW0oZ3JlaCksICpwc2tiLAorCQkJCQkgICAgICAgKihncmVfa2V5KGdyZWgpKSwKKwkJCQkJICAgICAgIHR1cGxlLT5kc3QudS5ncmUua2V5LCAwKTsKKwkJfQorCQkqKGdyZV9rZXkoZ3JlaCkpID0gdHVwbGUtPmRzdC51LmdyZS5rZXk7CisJCWJyZWFrOworCWNhc2UgR1JFX1ZFUlNJT05fUFBUUDoKKwkJREVCVUdQKCJjYWxsX2lkIC0+IDB4JTA0eFxuIiwgbnRvaHModHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKKwkJcGdyZWgtPmNhbGxfaWQgPSB0dXBsZS0+ZHN0LnUuZ3JlLmtleTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJREVCVUdQKCJjYW4ndCBuYXQgdW5rbm93biBHUkUgdmVyc2lvblxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgZ3JlIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCQk9ICJHUkUiLAorCS5wcm90b251bQkJPSBJUFBST1RPX0dSRSwKKwkubWFuaXBfcGt0CQk9IGdyZV9tYW5pcF9wa3QsCisJLmluX3JhbmdlCQk9IGdyZV9pbl9yYW5nZSwKKwkudW5pcXVlX3R1cGxlCQk9IGdyZV91bmlxdWVfdHVwbGUsCisjaWYgZGVmaW5lZChDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTkspIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOS19NT0RVTEUpCisJLnJhbmdlX3RvX25mYXR0cgk9IG5mX25hdF9wb3J0X3JhbmdlX3RvX25mYXR0ciwKKwkubmZhdHRyX3RvX3JhbmdlCT0gbmZfbmF0X3BvcnRfbmZhdHRyX3RvX3JhbmdlLAorI2VuZGlmCit9OworCitpbnQgX19pbml0IG5mX25hdF9wcm90b19ncmVfaW5pdCh2b2lkKQoreworCXJldHVybiBuZl9uYXRfcHJvdG9jb2xfcmVnaXN0ZXIoJmdyZSk7Cit9CisKK3ZvaWQgX19leGl0IG5mX25hdF9wcm90b19ncmVfZmluaSh2b2lkKQoreworCW5mX25hdF9wcm90b2NvbF91bnJlZ2lzdGVyKCZncmUpOworfQorCittb2R1bGVfaW5pdChuZl9uYXRfcHJvdG9fZ3JlX2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X3Byb3RvX2dyZV9maW5pKTsKKwordm9pZCBuZl9uYXRfbmVlZF9ncmUodm9pZCkKK3sKKwlyZXR1cm47Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfbmVlZF9ncmUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2ljbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZkNzcyCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19pY21wLmMKQEAgLTAsMCArMSw4NiBAQAorLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisKK3N0YXRpYyBpbnQKK2ljbXBfaW5fcmFuZ2UoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJICAgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAorCSAgICAgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCkKK3sKKwlyZXR1cm4gbnRvaHModHVwbGUtPnNyYy51LmljbXAuaWQpID49IG50b2hzKG1pbi0+aWNtcC5pZCkgJiYKKwkgICAgICAgbnRvaHModHVwbGUtPnNyYy51LmljbXAuaWQpIDw9IG50b2hzKG1heC0+aWNtcC5pZCk7Cit9CisKK3N0YXRpYyBpbnQKK2ljbXBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkgIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdGF0aWMgdV9pbnQxNl90IGlkOworCXVuc2lnbmVkIGludCByYW5nZV9zaXplOworCXVuc2lnbmVkIGludCBpOworCisJcmFuZ2Vfc2l6ZSA9IG50b2hzKHJhbmdlLT5tYXguaWNtcC5pZCkgLSBudG9ocyhyYW5nZS0+bWluLmljbXAuaWQpICsgMTsKKwkvKiBJZiBubyByYW5nZSBzcGVjaWZpZWQuLi4gKi8KKwlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSkKKwkJcmFuZ2Vfc2l6ZSA9IDB4RkZGRjsKKworCWZvciAoaSA9IDA7IGkgPCByYW5nZV9zaXplOyBpKyssIGlkKyspIHsKKwkJdHVwbGUtPnNyYy51LmljbXAuaWQgPSBodG9ucyhudG9ocyhyYW5nZS0+bWluLmljbXAuaWQpICsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWQgJSByYW5nZV9zaXplKSk7CisJCWlmICghbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraWNtcF9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCSAgICAgICB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCisJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCSAgICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGlwaGRyb2ZmKTsKKwlzdHJ1Y3QgaWNtcGhkciAqaGRyOworCXVuc2lnbmVkIGludCBoZHJvZmYgPSBpcGhkcm9mZiArIGlwaC0+aWhsKjQ7CisKKwlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsIGhkcm9mZiArIHNpemVvZigqaGRyKSkpCisJCXJldHVybiAwOworCisJaGRyID0gKHN0cnVjdCBpY21waGRyICopKCgqcHNrYiktPmRhdGEgKyBoZHJvZmYpOworCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTIoJmhkci0+Y2hlY2tzdW0sICpwc2tiLAorCQkJICAgICAgIGhkci0+dW4uZWNoby5pZCwgdHVwbGUtPnNyYy51LmljbXAuaWQsIDApOworCWhkci0+dW4uZWNoby5pZCA9IHR1cGxlLT5zcmMudS5pY21wLmlkOworCXJldHVybiAxOworfQorCitzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF9pY21wID0geworCS5uYW1lCQkJPSAiSUNNUCIsCisJLnByb3RvbnVtCQk9IElQUFJPVE9fSUNNUCwKKwkubWUJCQk9IFRISVNfTU9EVUxFLAorCS5tYW5pcF9wa3QJCT0gaWNtcF9tYW5pcF9wa3QsCisJLmluX3JhbmdlCQk9IGljbXBfaW5fcmFuZ2UsCisJLnVuaXF1ZV90dXBsZQkJPSBpY21wX3VuaXF1ZV90dXBsZSwKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LX01PRFVMRSkKKwkucmFuZ2VfdG9fbmZhdHRyCT0gbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmZhdHRyLAorCS5uZmF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcG9ydF9uZmF0dHJfdG9fcmFuZ2UsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3RjcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b190Y3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTI2YTdlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b190Y3AuYwpAQCAtMCwwICsxLDE0OCBAQAorLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgorCitzdGF0aWMgaW50Cit0Y3BfaW5fcmFuZ2UoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKKwkgICAgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1pbiwKKwkgICAgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCkKK3sKKwlfX2JlMTYgcG9ydDsKKworCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJcG9ydCA9IHR1cGxlLT5zcmMudS50Y3AucG9ydDsKKwllbHNlCisJCXBvcnQgPSB0dXBsZS0+ZHN0LnUudGNwLnBvcnQ7CisKKwlyZXR1cm4gbnRvaHMocG9ydCkgPj0gbnRvaHMobWluLT50Y3AucG9ydCkgJiYKKwkgICAgICAgbnRvaHMocG9ydCkgPD0gbnRvaHMobWF4LT50Y3AucG9ydCk7Cit9CisKK3N0YXRpYyBpbnQKK3RjcF91bmlxdWVfdHVwbGUoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJCSBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKKwkJIGVudW0gbmZfbmF0X21hbmlwX3R5cGUgbWFuaXB0eXBlLAorCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXN0YXRpYyB1X2ludDE2X3QgcG9ydDsKKwlfX2JlMTYgKnBvcnRwdHI7CisJdW5zaWduZWQgaW50IHJhbmdlX3NpemUsIG1pbiwgaTsKKworCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKKwkJcG9ydHB0ciA9ICZ0dXBsZS0+c3JjLnUudGNwLnBvcnQ7CisJZWxzZQorCQlwb3J0cHRyID0gJnR1cGxlLT5kc3QudS50Y3AucG9ydDsKKworCS8qIElmIG5vIHJhbmdlIHNwZWNpZmllZC4uLiAqLworCWlmICghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpKSB7CisJCS8qIElmIGl0J3MgZHN0IHJld3JpdGUsIGNhbid0IGNoYW5nZSBwb3J0ICovCisJCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX0RTVCkKKwkJCXJldHVybiAwOworCisJCS8qIE1hcCBwcml2aWxlZ2VkIG9udG8gcHJpdmlsZWdlZC4gKi8KKwkJaWYgKG50b2hzKCpwb3J0cHRyKSA8IDEwMjQpIHsKKwkJCS8qIExvb3NlIGNvbnZlbnRpb246ID4+IDUxMiBpcyBjcmVkZW50aWFsIHBhc3NpbmcgKi8KKwkJCWlmIChudG9ocygqcG9ydHB0cik8NTEyKSB7CisJCQkJbWluID0gMTsKKwkJCQlyYW5nZV9zaXplID0gNTExIC0gbWluICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJbWluID0gNjAwOworCQkJCXJhbmdlX3NpemUgPSAxMDIzIC0gbWluICsgMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW1pbiA9IDEwMjQ7CisJCQlyYW5nZV9zaXplID0gNjU1MzUgLSAxMDI0ICsgMTsKKwkJfQorCX0gZWxzZSB7CisJCW1pbiA9IG50b2hzKHJhbmdlLT5taW4udGNwLnBvcnQpOworCQlyYW5nZV9zaXplID0gbnRvaHMocmFuZ2UtPm1heC50Y3AucG9ydCkgLSBtaW4gKyAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByYW5nZV9zaXplOyBpKyssIHBvcnQrKykgeworCQkqcG9ydHB0ciA9IGh0b25zKG1pbiArIHBvcnQgJSByYW5nZV9zaXplKTsKKwkJaWYgKCFuZl9uYXRfdXNlZF90dXBsZSh0dXBsZSwgY3QpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0Y3BfbWFuaXBfcGt0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkgICAgICB1bnNpZ25lZCBpbnQgaXBoZHJvZmYsCisJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCisJICAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCit7CisJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKCgqcHNrYiktPmRhdGEgKyBpcGhkcm9mZik7CisJc3RydWN0IHRjcGhkciAqaGRyOworCXVuc2lnbmVkIGludCBoZHJvZmYgPSBpcGhkcm9mZiArIGlwaC0+aWhsKjQ7CisJX19iZTMyIG9sZGlwLCBuZXdpcDsKKwlfX2JlMTYgKnBvcnRwdHIsIG5ld3BvcnQsIG9sZHBvcnQ7CisJaW50IGhkcnNpemUgPSA4OyAvKiBUQ1AgY29ubmVjdGlvbiB0cmFja2luZyBndWFyYW50ZWVzIHRoaXMgbXVjaCAqLworCisJLyogdGhpcyBjb3VsZCBiZSBhIGlubmVyIGhlYWRlciByZXR1cm5lZCBpbiBpY21wIHBhY2tldDsgaW4gc3VjaAorCSAgIGNhc2VzIHdlIGNhbm5vdCB1cGRhdGUgdGhlIGNoZWNrc3VtIGZpZWxkIHNpbmNlIGl0IGlzIG91dHNpZGUgb2YKKwkgICB0aGUgOCBieXRlcyBvZiB0cmFuc3BvcnQgbGF5ZXIgaGVhZGVycyB3ZSBhcmUgZ3VhcmFudGVlZCAqLworCWlmICgoKnBza2IpLT5sZW4gPj0gaGRyb2ZmICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKQorCQloZHJzaXplID0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShwc2tiLCBoZHJvZmYgKyBoZHJzaXplKSkKKwkJcmV0dXJuIDA7CisKKwlpcGggPSAoc3RydWN0IGlwaGRyICopKCgqcHNrYiktPmRhdGEgKyBpcGhkcm9mZik7CisJaGRyID0gKHN0cnVjdCB0Y3BoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGhkcm9mZik7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpIHsKKwkJLyogR2V0IHJpZCBvZiBzcmMgaXAgYW5kIHNyYyBwdCAqLworCQlvbGRpcCA9IGlwaC0+c2FkZHI7CisJCW5ld2lwID0gdHVwbGUtPnNyYy51My5pcDsKKwkJbmV3cG9ydCA9IHR1cGxlLT5zcmMudS50Y3AucG9ydDsKKwkJcG9ydHB0ciA9ICZoZHItPnNvdXJjZTsKKwl9IGVsc2UgeworCQkvKiBHZXQgcmlkIG9mIGRzdCBpcCBhbmQgZHN0IHB0ICovCisJCW9sZGlwID0gaXBoLT5kYWRkcjsKKwkJbmV3aXAgPSB0dXBsZS0+ZHN0LnUzLmlwOworCQluZXdwb3J0ID0gdHVwbGUtPmRzdC51LnRjcC5wb3J0OworCQlwb3J0cHRyID0gJmhkci0+ZGVzdDsKKwl9CisKKwlvbGRwb3J0ID0gKnBvcnRwdHI7CisJKnBvcnRwdHIgPSBuZXdwb3J0OworCisJaWYgKGhkcnNpemUgPCBzaXplb2YoKmhkcikpCisJCXJldHVybiAxOworCisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmaGRyLT5jaGVjaywgKnBza2IsIG9sZGlwLCBuZXdpcCwgMSk7CisJbmZfcHJvdG9fY3N1bV9yZXBsYWNlMigmaGRyLT5jaGVjaywgKnBza2IsIG9sZHBvcnQsIG5ld3BvcnQsIDApOworCXJldHVybiAxOworfQorCitzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF90Y3AgPSB7CisJLm5hbWUJCQk9ICJUQ1AiLAorCS5wcm90b251bQkJPSBJUFBST1RPX1RDUCwKKwkubWUJCQk9IFRISVNfTU9EVUxFLAorCS5tYW5pcF9wa3QJCT0gdGNwX21hbmlwX3BrdCwKKwkuaW5fcmFuZ2UJCT0gdGNwX2luX3JhbmdlLAorCS51bmlxdWVfdHVwbGUJCT0gdGNwX3VuaXF1ZV90dXBsZSwKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LX01PRFVMRSkKKwkucmFuZ2VfdG9fbmZhdHRyCT0gbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmZhdHRyLAorCS5uZmF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcG9ydF9uZmF0dHJfdG9fcmFuZ2UsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3VkcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBjZTRjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b191ZHAuYwpAQCAtMCwwICsxLDEzOCBAQAorLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9jb2wuaD4KKworc3RhdGljIGludAordWRwX2luX3JhbmdlKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCSAgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUsCisJICAgICBjb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptaW4sCisJICAgICBjb25zdCB1bmlvbiBuZl9jb25udHJhY2tfbWFuX3Byb3RvICptYXgpCit7CisJX19iZTE2IHBvcnQ7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCXBvcnQgPSB0dXBsZS0+c3JjLnUudWRwLnBvcnQ7CisJZWxzZQorCQlwb3J0ID0gdHVwbGUtPmRzdC51LnVkcC5wb3J0OworCisJcmV0dXJuIG50b2hzKHBvcnQpID49IG50b2hzKG1pbi0+dWRwLnBvcnQpICYmCisJICAgICAgIG50b2hzKHBvcnQpIDw9IG50b2hzKG1heC0+dWRwLnBvcnQpOworfQorCitzdGF0aWMgaW50Cit1ZHBfdW5pcXVlX3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UsCisJCSBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKKwkJIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdGF0aWMgdV9pbnQxNl90IHBvcnQ7CisJX19iZTE2ICpwb3J0cHRyOworCXVuc2lnbmVkIGludCByYW5nZV9zaXplLCBtaW4sIGk7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCisJCXBvcnRwdHIgPSAmdHVwbGUtPnNyYy51LnVkcC5wb3J0OworCWVsc2UKKwkJcG9ydHB0ciA9ICZ0dXBsZS0+ZHN0LnUudWRwLnBvcnQ7CisKKwkvKiBJZiBubyByYW5nZSBzcGVjaWZpZWQuLi4gKi8KKwlpZiAoIShyYW5nZS0+ZmxhZ3MgJiBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKSkgeworCQkvKiBJZiBpdCdzIGRzdCByZXdyaXRlLCBjYW4ndCBjaGFuZ2UgcG9ydCAqLworCQlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9EU1QpCisJCQlyZXR1cm4gMDsKKworCQlpZiAobnRvaHMoKnBvcnRwdHIpIDwgMTAyNCkgeworCQkJLyogTG9vc2UgY29udmVudGlvbjogPj4gNTEyIGlzIGNyZWRlbnRpYWwgcGFzc2luZyAqLworCQkJaWYgKG50b2hzKCpwb3J0cHRyKTw1MTIpIHsKKwkJCQltaW4gPSAxOworCQkJCXJhbmdlX3NpemUgPSA1MTEgLSBtaW4gKyAxOworCQkJfSBlbHNlIHsKKwkJCQltaW4gPSA2MDA7CisJCQkJcmFuZ2Vfc2l6ZSA9IDEwMjMgLSBtaW4gKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJbWluID0gMTAyNDsKKwkJCXJhbmdlX3NpemUgPSA2NTUzNSAtIDEwMjQgKyAxOworCQl9CisJfSBlbHNlIHsKKwkJbWluID0gbnRvaHMocmFuZ2UtPm1pbi51ZHAucG9ydCk7CisJCXJhbmdlX3NpemUgPSBudG9ocyhyYW5nZS0+bWF4LnVkcC5wb3J0KSAtIG1pbiArIDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJhbmdlX3NpemU7IGkrKywgcG9ydCsrKSB7CisJCSpwb3J0cHRyID0gaHRvbnMobWluICsgcG9ydCAlIHJhbmdlX3NpemUpOworCQlpZiAoIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VkcF9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCSAgICAgIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKKwkgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkgICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkKK3sKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGlwaGRyb2ZmKTsKKwlzdHJ1Y3QgdWRwaGRyICpoZHI7CisJdW5zaWduZWQgaW50IGhkcm9mZiA9IGlwaGRyb2ZmICsgaXBoLT5paGwqNDsKKwlfX2JlMzIgb2xkaXAsIG5ld2lwOworCV9fYmUxNiAqcG9ydHB0ciwgbmV3cG9ydDsKKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUocHNrYiwgaGRyb2ZmICsgc2l6ZW9mKCpoZHIpKSkKKwkJcmV0dXJuIDA7CisKKwlpcGggPSAoc3RydWN0IGlwaGRyICopKCgqcHNrYiktPmRhdGEgKyBpcGhkcm9mZik7CisJaGRyID0gKHN0cnVjdCB1ZHBoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGhkcm9mZik7CisKKwlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpIHsKKwkJLyogR2V0IHJpZCBvZiBzcmMgaXAgYW5kIHNyYyBwdCAqLworCQlvbGRpcCA9IGlwaC0+c2FkZHI7CisJCW5ld2lwID0gdHVwbGUtPnNyYy51My5pcDsKKwkJbmV3cG9ydCA9IHR1cGxlLT5zcmMudS51ZHAucG9ydDsKKwkJcG9ydHB0ciA9ICZoZHItPnNvdXJjZTsKKwl9IGVsc2UgeworCQkvKiBHZXQgcmlkIG9mIGRzdCBpcCBhbmQgZHN0IHB0ICovCisJCW9sZGlwID0gaXBoLT5kYWRkcjsKKwkJbmV3aXAgPSB0dXBsZS0+ZHN0LnUzLmlwOworCQluZXdwb3J0ID0gdHVwbGUtPmRzdC51LnVkcC5wb3J0OworCQlwb3J0cHRyID0gJmhkci0+ZGVzdDsKKwl9CisJaWYgKGhkci0+Y2hlY2sgfHwgKCpwc2tiKS0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJbmZfcHJvdG9fY3N1bV9yZXBsYWNlNCgmaGRyLT5jaGVjaywgKnBza2IsIG9sZGlwLCBuZXdpcCwgMSk7CisJCW5mX3Byb3RvX2NzdW1fcmVwbGFjZTIoJmhkci0+Y2hlY2ssICpwc2tiLCAqcG9ydHB0ciwgbmV3cG9ydCwKKwkJCQkgICAgICAgMCk7CisJCWlmICghaGRyLT5jaGVjaykKKwkJCWhkci0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKKwl9CisJKnBvcnRwdHIgPSBuZXdwb3J0OworCXJldHVybiAxOworfQorCitzdHJ1Y3QgbmZfbmF0X3Byb3RvY29sIG5mX25hdF9wcm90b2NvbF91ZHAgPSB7CisJLm5hbWUJCQk9ICJVRFAiLAorCS5wcm90b251bQkJPSBJUFBST1RPX1VEUCwKKwkubWUJCQk9IFRISVNfTU9EVUxFLAorCS5tYW5pcF9wa3QJCT0gdWRwX21hbmlwX3BrdCwKKwkuaW5fcmFuZ2UJCT0gdWRwX2luX3JhbmdlLAorCS51bmlxdWVfdHVwbGUJCT0gdWRwX3VuaXF1ZV90dXBsZSwKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTkVUTElOSykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LX01PRFVMRSkKKwkucmFuZ2VfdG9fbmZhdHRyCT0gbmZfbmF0X3BvcnRfcmFuZ2VfdG9fbmZhdHRyLAorCS5uZmF0dHJfdG9fcmFuZ2UJPSBuZl9uYXRfcG9ydF9uZmF0dHJfdG9fcmFuZ2UsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fdW5rbm93bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MGQwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX3Vua25vd24uYwpAQCAtMCwwICsxLDU0IEBACisvKiBUaGUgInVua25vd24iIHByb3RvY29sLiAgVGhpcyBpcyB3aGF0IGlzIHVzZWQgZm9yIHByb3RvY29scyB3ZQorICogZG9uJ3QgdW5kZXJzdGFuZC4gIEl0J3MgcmV0dXJuZWQgYnkgaXBfY3RfZmluZF9wcm90bygpLgorICovCisKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDYgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisKK3N0YXRpYyBpbnQgdW5rbm93bl9pbl9yYW5nZShjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCSAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwX3R5cGUsCisJCQkgICAgY29uc3QgdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byAqbWluLAorCQkJICAgIGNvbnN0IHVuaW9uIG5mX2Nvbm50cmFja19tYW5fcHJvdG8gKm1heCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1bmtub3duX3VuaXF1ZV90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJCQljb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSwKKwkJCQllbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSwKKwkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJLyogU29ycnk6IHdlIGNhbid0IGhlbHAgeW91OyBpZiBpdCdzIG5vdCB1bmlxdWUsIHdlIGNhbid0IGZyb2IKKwkgICBhbnl0aGluZy4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW5rbm93bl9tYW5pcF9wa3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgIHVuc2lnbmVkIGludCBpcGhkcm9mZiwKKwkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKKwkJICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IG5mX25hdF9wcm90b2NvbCBuZl9uYXRfdW5rbm93bl9wcm90b2NvbCA9IHsKKwkubmFtZQkJCT0gInVua25vd24iLAorCS8qIC5tZSBpc24ndCBzZXQ6IGdldHRpbmcgYSByZWYgdG8gdGhpcyBjYW5ub3QgZmFpbC4gKi8KKwkubWFuaXBfcGt0CQk9IHVua25vd25fbWFuaXBfcGt0LAorCS5pbl9yYW5nZQkJPSB1bmtub3duX2luX3JhbmdlLAorCS51bmlxdWVfdHVwbGUJCT0gdW5rbm93bl91bmlxdWVfdHVwbGUsCit9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY4ZWUwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDYgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qIEV2ZXJ5dGhpbmcgYWJvdXQgdGhlIHJ1bGVzIGZvciBOQVQuICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIE5BVF9WQUxJRF9IT09LUyAoKDE8PE5GX0lQX1BSRV9ST1VUSU5HKSB8ICgxPDxORl9JUF9QT1NUX1JPVVRJTkcpIHwgKDE8PE5GX0lQX0xPQ0FMX09VVCkpCisKK3N0YXRpYyBzdHJ1Y3QKK3sKKwlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKKwlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbM107CisJc3RydWN0IGlwdF9lcnJvciB0ZXJtOworfSBuYXRfaW5pdGlhbF90YWJsZSBfX2luaXRkYXRhID0geworCS5yZXBsID0geworCQkubmFtZSA9ICJuYXQiLAorCQkudmFsaWRfaG9va3MgPSBOQVRfVkFMSURfSE9PS1MsCisJCS5udW1fZW50cmllcyA9IDQsCisJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMyArIHNpemVvZihzdHJ1Y3QgaXB0X2Vycm9yKSwKKwkJLmhvb2tfZW50cnkgPSB7CisJCQlbTkZfSVBfUFJFX1JPVVRJTkddID0gMCwKKwkJCVtORl9JUF9QT1NUX1JPVVRJTkddID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAorCQkJW05GX0lQX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyIH0sCisJCS51bmRlcmZsb3cgPSB7CisJCQlbTkZfSVBfUFJFX1JPVVRJTkddID0gMCwKKwkJCVtORl9JUF9QT1NUX1JPVVRJTkddID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAorCQkJW05GX0lQX0xPQ0FMX09VVF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyIH0sCisJfSwKKwkuZW50cmllcyA9IHsKKwkJLyogUFJFX1JPVVRJTkcgKi8KKwkJeworCQkJLmVudHJ5ID0geworCSAgICAJCQkudGFyZ2V0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSwKKwkgICAgCQkJLm5leHRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAorCQkJfSwKKwkJCS50YXJnZXQgPSB7CisJCQkJLnRhcmdldCA9IHsKKwkJCQkJLnUgPSB7CisJCQkJCQkudGFyZ2V0X3NpemUgPSBJUFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0KSksCisJCQkJCX0sCisJCQkJfSwKKwkJCQkudmVyZGljdCA9IC1ORl9BQ0NFUFQgLSAxLAorCQkJfSwKKwkJfSwKKwkJLyogUE9TVF9ST1VUSU5HICovCisJCXsKKwkJCS5lbnRyeSA9IHsKKwkgICAgCQkJLnRhcmdldF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCisJICAgIAkJCS5uZXh0X29mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKKwkJCX0sCisJCQkudGFyZ2V0ID0geworCQkJCS50YXJnZXQgPSB7CisJCQkJCS51ID0geworCQkJCQkJLnRhcmdldF9zaXplID0gSVBUX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCkpLAorCQkJCQl9LAorCQkJCX0sCisJCQkJLnZlcmRpY3QgPSAtTkZfQUNDRVBUIC0gMSwKKwkJCX0sCisJCX0sCisJCS8qIExPQ0FMX09VVCAqLworCQl7CisJCQkuZW50cnkgPSB7CisJICAgIAkJCS50YXJnZXRfb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpLAorCSAgICAJCQkubmV4dF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCisJCQl9LAorCQkJLnRhcmdldCA9IHsKKwkJCQkudGFyZ2V0ID0geworCQkJCQkudSA9IHsKKwkJCQkJCS50YXJnZXRfc2l6ZSA9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQpKSwKKwkJCQkJfSwKKwkJCQl9LAorCQkJCS52ZXJkaWN0ID0gLU5GX0FDQ0VQVCAtIDEsCisJCQl9LAorCQl9LAorCX0sCisJLyogRVJST1IgKi8KKwkudGVybSA9IHsKKwkJLmVudHJ5ID0geworCQkJLnRhcmdldF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSksCisJCQkubmV4dF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGlwdF9lcnJvciksCisJCX0sCisJCS50YXJnZXQgPSB7CisJCQkudGFyZ2V0ID0geworCQkJCS51ID0geworCQkJCQkudXNlciA9IHsKKwkJCQkJCS50YXJnZXRfc2l6ZSA9IElQVF9BTElHTihzaXplb2Yoc3RydWN0IGlwdF9lcnJvcl90YXJnZXQpKSwKKwkJCQkJCS5uYW1lID0gSVBUX0VSUk9SX1RBUkdFVCwKKwkJCQkJfSwKKwkJCQl9LAorCQkJfSwKKwkJCS5lcnJvcm5hbWUgPSAiRVJST1IiLAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaXB0X3RhYmxlIG5hdF90YWJsZSA9IHsKKwkubmFtZQkJPSAibmF0IiwKKwkudmFsaWRfaG9va3MJPSBOQVRfVkFMSURfSE9PS1MsCisJLmxvY2sJCT0gUldfTE9DS19VTkxPQ0tFRCwKKwkubWUJCT0gVEhJU19NT0RVTEUsCisJLmFmCQk9IEFGX0lORVQsCit9OworCisvKiBTb3VyY2UgTkFUICovCitzdGF0aWMgdW5zaWduZWQgaW50IGlwdF9zbmF0X3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGhvb2tudW0sCisJCQkJICAgIGNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldCwKKwkJCQkgICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8pCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCWNvbnN0IHN0cnVjdCBuZl9uYXRfbXVsdGlfcmFuZ2VfY29tcGF0ICptciA9IHRhcmdpbmZvOworCisJTkZfQ1RfQVNTRVJUKGhvb2tudW0gPT0gTkZfSVBfUE9TVF9ST1VUSU5HKTsKKworCWN0ID0gbmZfY3RfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKKworCS8qIENvbm5lY3Rpb24gbXVzdCBiZSB2YWxpZCBhbmQgbmV3LiAqLworCU5GX0NUX0FTU0VSVChjdCAmJiAoY3RpbmZvID09IElQX0NUX05FVyB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAorCSAgICAgICAgICAgICAgICAgICAgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkpOworCU5GX0NUX0FTU0VSVChvdXQpOworCisJcmV0dXJuIG5mX25hdF9zZXR1cF9pbmZvKGN0LCAmbXItPnJhbmdlWzBdLCBob29rbnVtKTsKK30KKworLyogQmVmb3JlIDIuNi4xMSB3ZSBkaWQgaW1wbGljaXQgc291cmNlIE5BVCBpZiByZXF1aXJlZC4gV2FybiBhYm91dCBjaGFuZ2UuICovCitzdGF0aWMgdm9pZCB3YXJuX2lmX2V4dHJhX21hbmdsZShfX2JlMzIgZHN0aXAsIF9fYmUzMiBzcmNpcCkKK3sKKwlzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBkc3RpcCB9IH0gfTsKKwlzdHJ1Y3QgcnRhYmxlICpydDsKKworCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZydCwgJmZsKSAhPSAwKQorCQlyZXR1cm47CisKKwlpZiAocnQtPnJ0X3NyYyAhPSBzcmNpcCAmJiAhd2FybmVkKSB7CisJCXByaW50aygiTkFUOiBubyBsb25nZXIgc3VwcG9ydCBpbXBsaWNpdCBzb3VyY2UgbG9jYWwgTkFUXG4iKTsKKwkJcHJpbnRrKCJOQVQ6IHBhY2tldCBzcmMgJXUuJXUuJXUuJXUgLT4gZHN0ICV1LiV1LiV1LiV1XG4iLAorCQkgICAgICAgTklQUVVBRChzcmNpcCksIE5JUFFVQUQoZHN0aXApKTsKKwkJd2FybmVkID0gMTsKKwl9CisJaXBfcnRfcHV0KHJ0KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpcHRfZG5hdF90YXJnZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJICAgIHVuc2lnbmVkIGludCBob29rbnVtLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQsCisJCQkJICAgIGNvbnN0IHZvaWQgKnRhcmdpbmZvKQoreworCXN0cnVjdCBuZl9jb25uICpjdDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwljb25zdCBzdHJ1Y3QgbmZfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXIgPSB0YXJnaW5mbzsKKworCU5GX0NUX0FTU0VSVChob29rbnVtID09IE5GX0lQX1BSRV9ST1VUSU5HIHx8CisJCSAgICAgaG9va251bSA9PSBORl9JUF9MT0NBTF9PVVQpOworCisJY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pOworCisJLyogQ29ubmVjdGlvbiBtdXN0IGJlIHZhbGlkIGFuZCBuZXcuICovCisJTkZfQ1RfQVNTRVJUKGN0ICYmIChjdGluZm8gPT0gSVBfQ1RfTkVXIHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEKSk7CisKKwlpZiAoaG9va251bSA9PSBORl9JUF9MT0NBTF9PVVQgJiYKKwkgICAgbXItPnJhbmdlWzBdLmZsYWdzICYgSVBfTkFUX1JBTkdFX01BUF9JUFMpCisJCXdhcm5faWZfZXh0cmFfbWFuZ2xlKCgqcHNrYiktPm5oLmlwaC0+ZGFkZHIsCisJCQkJICAgICBtci0+cmFuZ2VbMF0ubWluX2lwKTsKKworCXJldHVybiBuZl9uYXRfc2V0dXBfaW5mbyhjdCwgJm1yLT5yYW5nZVswXSwgaG9va251bSk7Cit9CisKK3N0YXRpYyBpbnQgaXB0X3NuYXRfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgICAgICAgY29uc3Qgdm9pZCAqZW50cnksCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAorCQkJICAgICAgIHZvaWQgKnRhcmdpbmZvLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJc3RydWN0IG5mX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CisKKwkvKiBNdXN0IGJlIGEgdmFsaWQgcmFuZ2UgKi8KKwlpZiAobXItPnJhbmdlc2l6ZSAhPSAxKSB7CisJCXByaW50aygiU05BVDogbXVsdGlwbGUgcmFuZ2VzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaXB0X2RuYXRfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCQkgICAgICAgY29uc3Qgdm9pZCAqZW50cnksCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAorCQkJICAgICAgIHZvaWQgKnRhcmdpbmZvLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJc3RydWN0IG5mX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CisKKwkvKiBNdXN0IGJlIGEgdmFsaWQgcmFuZ2UgKi8KKwlpZiAobXItPnJhbmdlc2l6ZSAhPSAxKSB7CisJCXByaW50aygiRE5BVDogbXVsdGlwbGUgcmFuZ2VzIG5vIGxvbmdlciBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQKK2FsbG9jX251bGxfYmluZGluZyhzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgIHN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbywKKwkJICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJLyogRm9yY2UgcmFuZ2UgdG8gdGhpcyBJUDsgbGV0IHByb3RvIGRlY2lkZSBtYXBwaW5nIGZvcgorCSAgIHBlci1wcm90byBwYXJ0cyAoaGVuY2Ugbm90IElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpLgorCSAgIFVzZSByZXBseSBpbiBjYXNlIGl0J3MgYWxyZWFkeSBiZWVuIG1hbmdsZWQgKGVnIGxvY2FsIHBhY2tldCkuCisJKi8KKwlfX2JlMzIgaXAKKwkJPSAoSE9PSzJNQU5JUChob29rbnVtKSA9PSBJUF9OQVRfTUFOSVBfU1JDCisJCSAgID8gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC51My5pcAorCQkgICA6IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5zcmMudTMuaXApOworCXN0cnVjdCBuZl9uYXRfcmFuZ2UgcmFuZ2UKKwkJPSB7IElQX05BVF9SQU5HRV9NQVBfSVBTLCBpcCwgaXAsIHsgMCB9LCB7IDAgfSB9OworCisJREVCVUdQKCJBbGxvY2F0aW5nIE5VTEwgYmluZGluZyBmb3IgJXAgKCV1LiV1LiV1LiV1KVxuIiwKKwkgICAgICAgY3QsIE5JUFFVQUQoaXApKTsKKwlyZXR1cm4gbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgaG9va251bSk7Cit9CisKK3Vuc2lnbmVkIGludAorYWxsb2NfbnVsbF9iaW5kaW5nX2NvbmZpcm1lZChzdHJ1Y3QgbmZfY29ubiAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCit7CisJX19iZTMyIGlwCisJCT0gKEhPT0syTUFOSVAoaG9va251bSkgPT0gSVBfTkFUX01BTklQX1NSQworCQkgICA/IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QudTMuaXAKKwkJICAgOiBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLnUzLmlwKTsKKwl1X2ludDE2X3QgYWxsCisJCT0gKEhPT0syTUFOSVAoaG9va251bSkgPT0gSVBfTkFUX01BTklQX1NSQworCQkgICA/IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5kc3QudS5hbGwKKwkJICAgOiBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLnUuYWxsKTsKKwlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlCisJCT0geyBJUF9OQVRfUkFOR0VfTUFQX0lQUywgaXAsIGlwLCB7IGFsbCB9LCB7IGFsbCB9IH07CisKKwlERUJVR1AoIkFsbG9jYXRpbmcgTlVMTCBiaW5kaW5nIGZvciBjb25maXJtZWQgJXAgKCV1LiV1LiV1LiV1KVxuIiwKKwkgICAgICAgY3QsIE5JUFFVQUQoaXApKTsKKwlyZXR1cm4gbmZfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgaG9va251bSk7Cit9CisKK2ludCBuZl9uYXRfcnVsZV9maW5kKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgc3RydWN0IG5mX25hdF9pbmZvICppbmZvKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpcHRfZG9fdGFibGUocHNrYiwgaG9va251bSwgaW4sIG91dCwgJm5hdF90YWJsZSk7CisKKwlpZiAocmV0ID09IE5GX0FDQ0VQVCkgeworCQlpZiAoIW5mX25hdF9pbml0aWFsaXplZChjdCwgSE9PSzJNQU5JUChob29rbnVtKSkpCisJCQkvKiBOVUwgbWFwcGluZyAqLworCQkJcmV0ID0gYWxsb2NfbnVsbF9iaW5kaW5nKGN0LCBpbmZvLCBob29rbnVtKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBpcHRfdGFyZ2V0IGlwdF9zbmF0X3JlZyA9IHsKKwkubmFtZQkJPSAiU05BVCIsCisJLnRhcmdldAkJPSBpcHRfc25hdF90YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IG5mX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpLAorCS50YWJsZQkJPSAibmF0IiwKKwkuaG9va3MJCT0gMSA8PCBORl9JUF9QT1NUX1JPVVRJTkcsCisJLmNoZWNrZW50cnkJPSBpcHRfc25hdF9jaGVja2VudHJ5LAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlwdF9kbmF0X3JlZyA9IHsKKwkubmFtZQkJPSAiRE5BVCIsCisJLnRhcmdldAkJPSBpcHRfZG5hdF90YXJnZXQsCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IG5mX25hdF9tdWx0aV9yYW5nZV9jb21wYXQpLAorCS50YWJsZQkJPSAibmF0IiwKKwkuaG9va3MJCT0gKDEgPDwgTkZfSVBfUFJFX1JPVVRJTkcpIHwgKDEgPDwgTkZfSVBfTE9DQUxfT1VUKSwKKwkuY2hlY2tlbnRyeQk9IGlwdF9kbmF0X2NoZWNrZW50cnksCisJLmZhbWlseQkJPSBBRl9JTkVULAorfTsKKworaW50IF9faW5pdCBuZl9uYXRfcnVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGlwdF9yZWdpc3Rlcl90YWJsZSgmbmF0X3RhYmxlLCAmbmF0X2luaXRpYWxfdGFibGUucmVwbCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X3NuYXRfcmVnKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gdW5yZWdpc3Rlcl90YWJsZTsKKworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X2RuYXRfcmVnKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gdW5yZWdpc3Rlcl9zbmF0OworCisJcmV0dXJuIHJldDsKKworIHVucmVnaXN0ZXJfc25hdDoKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X3NuYXRfcmVnKTsKKyB1bnJlZ2lzdGVyX3RhYmxlOgorCWlwdF91bnJlZ2lzdGVyX3RhYmxlKCZuYXRfdGFibGUpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBuZl9uYXRfcnVsZV9jbGVhbnVwKHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9kbmF0X3JlZyk7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9zbmF0X3JlZyk7CisJaXB0X3VucmVnaXN0ZXJfdGFibGUoJm5hdF90YWJsZSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDUyNGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwpAQCAtMCwwICsxLDI4MyBAQAorLyogU0lQIGV4dGVuc2lvbiBmb3IgVURQIE5BVCBhbHRlcmF0aW9uLgorICoKKyAqIChDKSAyMDA1IGJ5IENocmlzdGlhbiBIZW50c2NoZWwgPGNoZW50c2NoZWxAYXJuZXQuY29tLmFyPgorICogYmFzZWQgb24gUlIncyBpcF9uYXRfZnRwLmMgYW5kIG90aGVyIG1vZHVsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdGlhbiBIZW50c2NoZWwgPGNoZW50c2NoZWxAYXJuZXQuY29tLmFyPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTSVAgTkFUIGhlbHBlciIpOworTU9EVUxFX0FMSUFTKCJpcF9uYXRfc2lwIik7CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUCBwcmludGsKKyNlbHNlCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RydWN0IGFkZHJfbWFwIHsKKwlzdHJ1Y3QgeworCQljaGFyCQlzcmNbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07CisJCWNoYXIJCWRzdFtzaXplb2YoIm5ubi5ubm4ubm5uLm5ubjpubm5ubiIpXTsKKwkJdW5zaWduZWQgaW50CXNyY2xlbiwgc3JjaXBsZW47CisJCXVuc2lnbmVkIGludAlkc3RsZW4sIGRzdGlwbGVuOworCX0gYWRkcltJUF9DVF9ESVJfTUFYXTsKK307CisKK3N0YXRpYyB2b2lkIGFkZHJfbWFwX2luaXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgYWRkcl9tYXAgKm1hcCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0OworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CisJdW5zaWduZWQgaW50IG47CisKKwlmb3IgKGRpciA9IDA7IGRpciA8IElQX0NUX0RJUl9NQVg7IGRpcisrKSB7CisJCXQgPSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlOworCisJCW4gPSBzcHJpbnRmKG1hcC0+YWRkcltkaXJdLnNyYywgIiV1LiV1LiV1LiV1IiwKKwkJCSAgICBOSVBRVUFEKHQtPnNyYy51My5pcCkpOworCQltYXAtPmFkZHJbZGlyXS5zcmNpcGxlbiA9IG47CisJCW4gKz0gc3ByaW50ZihtYXAtPmFkZHJbZGlyXS5zcmMgKyBuLCAiOiV1IiwKKwkJCSAgICAgbnRvaHModC0+c3JjLnUudWRwLnBvcnQpKTsKKwkJbWFwLT5hZGRyW2Rpcl0uc3JjbGVuID0gbjsKKworCQluID0gc3ByaW50ZihtYXAtPmFkZHJbZGlyXS5kc3QsICIldS4ldS4ldS4ldSIsCisJCQkgICAgTklQUVVBRCh0LT5kc3QudTMuaXApKTsKKwkJbWFwLT5hZGRyW2Rpcl0uZHN0aXBsZW4gPSBuOworCQluICs9IHNwcmludGYobWFwLT5hZGRyW2Rpcl0uZHN0ICsgbiwgIjoldSIsCisJCQkgICAgIG50b2hzKHQtPmRzdC51LnVkcC5wb3J0KSk7CisJCW1hcC0+YWRkcltkaXJdLmRzdGxlbiA9IG47CisJfQorfQorCitzdGF0aWMgaW50IG1hcF9zaXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICoqZHB0ciwgc2l6ZV90IGRsZW4sCisJCQllbnVtIHNpcF9oZWFkZXJfcG9zIHBvcywgc3RydWN0IGFkZHJfbWFwICptYXApCit7CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sIG1hdGNob2ZmLCBhZGRybGVuOworCWNoYXIgKmFkZHI7CisKKwlpZiAoY3Rfc2lwX2dldF9pbmZvKGN0LCAqZHB0ciwgZGxlbiwgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sIHBvcykgPD0gMCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKG1hdGNobGVuID09IG1hcC0+YWRkcltkaXJdLnNyY2lwbGVuIHx8CisJICAgICBtYXRjaGxlbiA9PSBtYXAtPmFkZHJbZGlyXS5zcmNsZW4pICYmCisJICAgIG1lbWNtcCgqZHB0ciArIG1hdGNob2ZmLCBtYXAtPmFkZHJbZGlyXS5zcmMsIG1hdGNobGVuKSA9PSAwKSB7CisJCWFkZHIgICAgPSBtYXAtPmFkZHJbIWRpcl0uZHN0OworCQlhZGRybGVuID0gbWFwLT5hZGRyWyFkaXJdLmRzdGxlbjsKKwl9IGVsc2UgaWYgKChtYXRjaGxlbiA9PSBtYXAtPmFkZHJbZGlyXS5kc3RpcGxlbiB8fAorCQkgICAgbWF0Y2hsZW4gPT0gbWFwLT5hZGRyW2Rpcl0uZHN0bGVuKSAmJgorCQkgICBtZW1jbXAoKmRwdHIgKyBtYXRjaG9mZiwgbWFwLT5hZGRyW2Rpcl0uZHN0LCBtYXRjaGxlbikgPT0gMCkgeworCQlhZGRyICAgID0gbWFwLT5hZGRyWyFkaXJdLnNyYzsKKwkJYWRkcmxlbiA9IG1hcC0+YWRkclshZGlyXS5zcmNsZW47CisJfSBlbHNlCisJCXJldHVybiAxOworCisJaWYgKCFuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaG9mZiwgbWF0Y2hsZW4sIGFkZHIsIGFkZHJsZW4pKQorCQlyZXR1cm4gMDsKKwkqZHB0ciA9ICgqcHNrYiktPmRhdGEgKyAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCXJldHVybiAxOworCit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NpcChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyKQoreworCWVudW0gc2lwX2hlYWRlcl9wb3MgcG9zOworCXN0cnVjdCBhZGRyX21hcCBtYXA7CisJaW50IGRhdGFvZmYsIGRhdGFsZW47CisKKwlkYXRhb2ZmID0gKCpwc2tiKS0+bmguaXBoLT5paGwqNCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlkYXRhbGVuID0gKCpwc2tiKS0+bGVuIC0gZGF0YW9mZjsKKwlpZiAoZGF0YWxlbiA8IHNpemVvZigiU0lQLzIuMCIpIC0gMSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlhZGRyX21hcF9pbml0KGN0LCAmbWFwKTsKKworCS8qIEJhc2ljIHJ1bGVzOiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLiAqLworCWlmIChzdHJuY21wKCpkcHRyLCAiU0lQLzIuMCIsIHNpemVvZigiU0lQLzIuMCIpIC0gMSkgIT0gMCkgeworCQkvKiAxMC4yOiBDb25zdHJ1Y3RpbmcgdGhlIFJFR0lTVEVSIFJlcXVlc3Q6CisJCSAqCisJCSAqIFRoZSAidXNlcmluZm8iIGFuZCAiQCIgY29tcG9uZW50cyBvZiB0aGUgU0lQIFVSSSBNVVNUIE5PVAorCQkgKiBiZSBwcmVzZW50LgorCQkgKi8KKwkJaWYgKGRhdGFsZW4gPj0gc2l6ZW9mKCJSRUdJU1RFUiIpIC0gMSAmJgorCQkgICAgc3RybmNtcCgqZHB0ciwgIlJFR0lTVEVSIiwgc2l6ZW9mKCJSRUdJU1RFUiIpIC0gMSkgPT0gMCkKKwkJCXBvcyA9IFBPU19SRUdfUkVRX1VSSTsKKwkJZWxzZQorCQkJcG9zID0gUE9TX1JFUV9VUkk7CisKKwkJaWYgKCFtYXBfc2lwX2FkZHIocHNrYiwgY3RpbmZvLCBjdCwgZHB0ciwgZGF0YWxlbiwgcG9zLCAmbWFwKSkKKwkJCXJldHVybiBORl9EUk9QOworCX0KKworCWlmICghbWFwX3NpcF9hZGRyKHBza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19GUk9NLCAmbWFwKSB8fAorCSAgICAhbWFwX3NpcF9hZGRyKHBza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19UTywgJm1hcCkgfHwKKwkgICAgIW1hcF9zaXBfYWRkcihwc2tiLCBjdGluZm8sIGN0LCBkcHRyLCBkYXRhbGVuLCBQT1NfVklBLCAmbWFwKSB8fAorCSAgICAhbWFwX3NpcF9hZGRyKHBza2IsIGN0aW5mbywgY3QsIGRwdHIsIGRhdGFsZW4sIFBPU19DT05UQUNULCAmbWFwKSkKKwkJcmV0dXJuIE5GX0RST1A7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2lwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKipkcHRyLCBzaXplX3QgZGxlbiwKKwkJCQkgICAgICBjaGFyICpidWZmZXIsIGludCBidWZmbGVuLAorCQkJCSAgICAgIGVudW0gc2lwX2hlYWRlcl9wb3MgcG9zKQoreworCXVuc2lnbmVkIGludCBtYXRjaGxlbiwgbWF0Y2hvZmY7CisKKwlpZiAoY3Rfc2lwX2dldF9pbmZvKGN0LCAqZHB0ciwgZGxlbiwgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sIHBvcykgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW5mX25hdF9tYW5nbGVfdWRwX3BhY2tldChwc2tiLCBjdCwgY3RpbmZvLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgYnVmZmVyLCBidWZmbGVuKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBuZWVkIHRvIHJlbG9hZCB0aGlzLiBUaGFua3MgUGF0cmljay4gKi8KKwkqZHB0ciA9ICgqcHNrYiktPmRhdGEgKyAoKnBza2IpLT5uaC5pcGgtPmlobCo0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1hbmdsZV9jb250ZW50X2xlbihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRwdHIpCit7CisJdW5zaWduZWQgaW50IGRhdGFvZmYsIG1hdGNob2ZmLCBtYXRjaGxlbjsKKwljaGFyIGJ1ZmZlcltzaXplb2YoIjY1NTM2IildOworCWludCBidWZmbGVuOworCisJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKKwkvKiBHZXQgYWN0dWFsIFNEUCBsZW5naHQgKi8KKwlpZiAoY3Rfc2lwX2dldF9pbmZvKGN0LCBkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLCAmbWF0Y2hvZmYsCisJICAgICAgICAgICAgICAgICAgICAmbWF0Y2hsZW4sIFBPU19TRFBfSEVBREVSKSA+IDApIHsKKworCQkvKiBzaW5jZSBjdF9zaXBfZ2V0X2luZm8oKSBnaXZlIHVzIGEgcG9pbnRlciBwYXNzaW5nICd2PScKKwkJICAgd2UgbmVlZCB0byBhZGQgMiBieXRlcyBpbiB0aGlzIGNvdW50LiAqLworCQlpbnQgY19sZW4gPSAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmIC0gbWF0Y2hvZmYgKyAyOworCisJCS8qIE5vdywgdXBkYXRlIFNEUCBsZW5ndGggKi8KKwkJaWYgKGN0X3NpcF9nZXRfaW5mbyhjdCwgZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwgJm1hdGNob2ZmLAorCQkgICAgICAgICAgICAgICAgICAgICZtYXRjaGxlbiwgUE9TX0NPTlRFTlQpID4gMCkgeworCisJCQlidWZmbGVuID0gc3ByaW50ZihidWZmZXIsICIldSIsIGNfbGVuKTsKKwkJCXJldHVybiBuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQocHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJCQltYXRjaG9mZiwgbWF0Y2hsZW4sCisJCQkJCQkJYnVmZmVyLCBidWZmbGVuKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2RwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgICAgX19iZTMyIG5ld2lwLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkcHRyKQoreworCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLm5ubi5ubm4ubm5uIildOworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBidWZmbGVuOworCisJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisKKwkvKiBNYW5nbGUgb3duZXIgYW5kIGNvbnRhY3QgaW5mby4gKi8KKwlidWZmbGVuID0gc3ByaW50ZihidWZmZXIsICIldS4ldS4ldS4ldSIsIE5JUFFVQUQobmV3aXApKTsKKwlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsICZkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCBQT1NfT1dORVJfSVA0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1hbmdsZV9zaXBfcGFja2V0KHBza2IsIGN0aW5mbywgY3QsICZkcHRyLCAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmLAorCSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBidWZmbGVuLCBQT1NfQ09OTkVDVElPTl9JUDQpKQorCQlyZXR1cm4gMDsKKworCS8qIE1hbmdsZSBtZWRpYSBwb3J0LiAqLworCWJ1ZmZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgcG9ydCk7CisJaWYgKCFtYW5nbGVfc2lwX3BhY2tldChwc2tiLCBjdGluZm8sIGN0LCAmZHB0ciwgKCpwc2tiKS0+bGVuIC0gZGF0YW9mZiwKKwkgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwgYnVmZmxlbiwgUE9TX01FRElBKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWFuZ2xlX2NvbnRlbnRfbGVuKHBza2IsIGN0aW5mbywgY3QsIGRwdHIpOworfQorCisvKiBTbywgdGhpcyBwYWNrZXQgaGFzIGhpdCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtYXRjaGluZyBjb2RlLgorICAgTWFuZ2xlIGl0LCBhbmQgY2hhbmdlIHRoZSBleHBlY3RhdGlvbiB0byBtYXRjaCB0aGUgbmV3IHZlcnNpb24uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsCisJCQkgICAgICAgY29uc3QgY2hhciAqZHB0cikKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBleHAtPm1hc3RlcjsKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCV9fYmUzMiBuZXdpcDsKKwl1X2ludDE2X3QgcG9ydDsKKworCURFQlVHUCgiaXBfbmF0X3NkcCgpOlxuIik7CisKKwkvKiBDb25uZWN0aW9uIHdpbGwgY29tZSBmcm9tIHJlcGx5ICovCisJbmV3aXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcDsKKworCWV4cC0+dHVwbGUuZHN0LnUzLmlwID0gbmV3aXA7CisJZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQ7CisJZXhwLT5kaXIgPSAhZGlyOworCisJLyogV2hlbiB5b3Ugc2VlIHRoZSBwYWNrZXQsIHdlIG5lZWQgdG8gTkFUIGl0IHRoZSBzYW1lIGFzIHRoZQorCSAgIHRoaXMgb25lLiAqLworCWV4cC0+ZXhwZWN0Zm4gPSBuZl9uYXRfZm9sbG93X21hc3RlcjsKKworCS8qIFRyeSB0byBnZXQgc2FtZSBwb3J0OiBpZiBub3QsIHRyeSB0byBjaGFuZ2UgaXQuICovCisJZm9yIChwb3J0ID0gbnRvaHMoZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCk7IHBvcnQgIT0gMDsgcG9ydCsrKSB7CisJCWV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0KTsKKwkJaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAocG9ydCA9PSAwKQorCQlyZXR1cm4gTkZfRFJPUDsKKworCWlmICghbWFuZ2xlX3NkcChwc2tiLCBjdGluZm8sIGN0LCBuZXdpcCwgcG9ydCwgZHB0cikpIHsKKwkJbmZfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKKwkJcmV0dXJuIE5GX0RST1A7CisJfQorCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9uYXRfc2lwX2Zpbmkodm9pZCkKK3sKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NpcF9ob29rLCBOVUxMKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9ob29rLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbmZfbmF0X3NpcF9pbml0KHZvaWQpCit7CisJQlVHX09OKHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2lwX2hvb2spKTsKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZHBfaG9vaykpOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX2hvb2ssIGlwX25hdF9zaXApOworCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX2hvb2ssIGlwX25hdF9zZHApOworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChuZl9uYXRfc2lwX2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X3NpcF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjEyNTI4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jCkBAIC0wLDAgKzEsMTMzMiBAQAorLyoKKyAqIG5mX25hdF9zbm1wX2Jhc2ljLmMKKyAqCisgKiBCYXNpYyBTTk1QIEFwcGxpY2F0aW9uIExheWVyIEdhdGV3YXkKKyAqCisgKiBUaGlzIElQIE5BVCBtb2R1bGUgaXMgaW50ZW5kZWQgZm9yIHVzZSB3aXRoIFNOTVAgbmV0d29yaworICogZGlzY292ZXJ5IGFuZCBtb25pdG9yaW5nIGFwcGxpY2F0aW9ucyB3aGVyZSB0YXJnZXQgbmV0d29ya3MgdXNlCisgKiBjb25mbGljdGluZyBwcml2YXRlIGFkZHJlc3MgcmVhbG1zLgorICoKKyAqIFN0YXRpYyBOQVQgaXMgdXNlZCB0byByZW1hcCB0aGUgbmV0d29ya3MgZnJvbSB0aGUgdmlldyBvZiB0aGUgbmV0d29yaworICogbWFuYWdlbWVudCBzeXN0ZW0gYXQgdGhlIElQIGxheWVyLCBhbmQgdGhpcyBtb2R1bGUgcmVtYXBzIHNvbWUgYXBwbGljYXRpb24KKyAqIGxheWVyIGFkZHJlc3NlcyB0byBtYXRjaC4KKyAqCisgKiBUaGUgc2ltcGxlc3QgZm9ybSBvZiBBTEcgaXMgcGVyZm9ybWVkLCB3aGVyZSBvbmx5IHRhZ2dlZCBJUCBhZGRyZXNzZXMKKyAqIGFyZSBtb2RpZmllZC4gIFRoZSBtb2R1bGUgZG9lcyBub3QgbmVlZCB0byBiZSBNSUIgYXdhcmUgYW5kIG9ubHkgc2NhbnMKKyAqIG1lc3NhZ2VzIGF0IHRoZSBBU04uMS9CRVIgbGV2ZWwuCisgKgorICogQ3VycmVudGx5LCBvbmx5IFNOTVB2MSBhbmQgU05NUHYyIGFyZSBzdXBwb3J0ZWQuCisgKgorICogTW9yZSBpbmZvcm1hdGlvbiBvbiBBTEcgYW5kIGFzc29jaWF0ZWQgaXNzdWVzIGNhbiBiZSBmb3VuZCBpbgorICogUkZDIDI5NjIKKyAqCisgKiBUaGUgQVNCLjEvQkVSIHBhcnNpbmcgY29kZSBpcyBkZXJpdmVkIGZyb20gdGhlIGd4c25tcCBwYWNrYWdlIGJ5IEdyZWdvcnkKKyAqIE1jTGVhbiAmIEpvY2hlbiBGcmllZHJpY2gsIHN0cmlwcGVkIGRvd24gZm9yIHVzZSBpbiB0aGUga2VybmVsLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBSUCBJbnRlcm5ldCAod3d3LnJwaS5uZXQuYXUpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBBdXRob3I6IEphbWVzIE1vcnJpcyA8am1vcnJpc0BpbnRlcmNvZGUuY29tLmF1PgorICoKKyAqIFVwZGF0ZXM6CisgKiAyMDAwLTA4LTA2OiBDb252ZXJ0IHRvIG5ldyBoZWxwZXIgQVBJIChIYXJhbGQgV2VsdGUpLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L3VkcC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJhc2ljIFNOTVAgQXBwbGljYXRpb24gTGF5ZXIgR2F0ZXdheSIpOworTU9EVUxFX0FMSUFTKCJpcF9uYXRfc25tcF9iYXNpYyIpOworCisjZGVmaW5lIFNOTVBfUE9SVCAxNjEKKyNkZWZpbmUgU05NUF9UUkFQX1BPUlQgMTYyCisjZGVmaW5lIE5PQ1QxKG4pICgqKHU4ICopbikKKworc3RhdGljIGludCBkZWJ1ZzsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc25tcF9sb2NrKTsKKworLyoKKyAqIEFwcGxpY2F0aW9uIGxheWVyIGFkZHJlc3MgbWFwcGluZyBtaW1pY3MgdGhlIE5BVCBtYXBwaW5nLCBidXQKKyAqIG9ubHkgZm9yIHRoZSBmaXJzdCBvY3RldCBpbiB0aGlzIGNhc2UgKGEgbW9yZSBmbGV4aWJsZSBzeXN0ZW0KKyAqIGNhbiBiZSBpbXBsZW1lbnRlZCBpZiBuZWVkZWQpLgorICovCitzdHJ1Y3Qgb2N0MV9tYXAKK3sKKwl1X2ludDhfdCBmcm9tOworCXVfaW50OF90IHRvOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBCYXNpYyBBU04uMSBkZWNvZGluZyByb3V0aW5lcyAoZ3hzbm1wIGF1dGhvciBEaXJrIFdpc3NlKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2xhc3MgKi8KKyNkZWZpbmUgQVNOMV9VTkkJMAkvKiBVbml2ZXJzYWwgKi8KKyNkZWZpbmUgQVNOMV9BUEwJMQkvKiBBcHBsaWNhdGlvbiAqLworI2RlZmluZSBBU04xX0NUWAkyCS8qIENvbnRleHQgKi8KKyNkZWZpbmUgQVNOMV9QUlYJMwkvKiBQcml2YXRlICovCisKKy8qIFRhZyAqLworI2RlZmluZSBBU04xX0VPQwkwCS8qIEVuZCBPZiBDb250ZW50cyAqLworI2RlZmluZSBBU04xX0JPTAkxCS8qIEJvb2xlYW4gKi8KKyNkZWZpbmUgQVNOMV9JTlQJMgkvKiBJbnRlZ2VyICovCisjZGVmaW5lIEFTTjFfQlRTCTMJLyogQml0IFN0cmluZyAqLworI2RlZmluZSBBU04xX09UUwk0CS8qIE9jdGV0IFN0cmluZyAqLworI2RlZmluZSBBU04xX05VTAk1CS8qIE51bGwgKi8KKyNkZWZpbmUgQVNOMV9PSkkJNgkvKiBPYmplY3QgSWRlbnRpZmllciAgKi8KKyNkZWZpbmUgQVNOMV9PSkQJNwkvKiBPYmplY3QgRGVzY3JpcHRpb24gKi8KKyNkZWZpbmUgQVNOMV9FWFQJOAkvKiBFeHRlcm5hbCAqLworI2RlZmluZSBBU04xX1NFUQkxNgkvKiBTZXF1ZW5jZSAqLworI2RlZmluZSBBU04xX1NFVAkxNwkvKiBTZXQgKi8KKyNkZWZpbmUgQVNOMV9OVU1TVFIJMTgJLyogTnVtZXJpY2FsIFN0cmluZyAqLworI2RlZmluZSBBU04xX1BSTlNUUgkxOQkvKiBQcmludGFibGUgU3RyaW5nICovCisjZGVmaW5lIEFTTjFfVEVYU1RSCTIwCS8qIFRlbGV0ZXh0IFN0cmluZyAqLworI2RlZmluZSBBU04xX1ZJRFNUUgkyMQkvKiBWaWRlbyBTdHJpbmcgKi8KKyNkZWZpbmUgQVNOMV9JQTVTVFIJMjIJLyogSUE1IFN0cmluZyAqLworI2RlZmluZSBBU04xX1VOSVRJTQkyMwkvKiBVbml2ZXJzYWwgVGltZSAqLworI2RlZmluZSBBU04xX0dFTlRJTQkyNAkvKiBHZW5lcmFsIFRpbWUgKi8KKyNkZWZpbmUgQVNOMV9HUkFTVFIJMjUJLyogR3JhcGhpY2FsIFN0cmluZyAqLworI2RlZmluZSBBU04xX1ZJU1NUUgkyNgkvKiBWaXNpYmxlIFN0cmluZyAqLworI2RlZmluZSBBU04xX0dFTlNUUgkyNwkvKiBHZW5lcmFsIFN0cmluZyAqLworCisvKiBQcmltaXRpdmUgLyBDb25zdHJ1Y3RlZCBtZXRob2RzKi8KKyNkZWZpbmUgQVNOMV9QUkkJMAkvKiBQcmltaXRpdmUgKi8KKyNkZWZpbmUgQVNOMV9DT04JMQkvKiBDb25zdHJ1Y3RlZCAqLworCisvKgorICogRXJyb3IgY29kZXMuCisgKi8KKyNkZWZpbmUgQVNOMV9FUlJfTk9FUlJPUgkJMAorI2RlZmluZSBBU04xX0VSUl9ERUNfRU1QVFkJCTIKKyNkZWZpbmUgQVNOMV9FUlJfREVDX0VPQ19NSVNNQVRDSAkzCisjZGVmaW5lIEFTTjFfRVJSX0RFQ19MRU5HVEhfTUlTTUFUQ0gJNAorI2RlZmluZSBBU04xX0VSUl9ERUNfQkFEVkFMVUUJCTUKKworLyoKKyAqIEFTTi4xIGNvbnRleHQuCisgKi8KK3N0cnVjdCBhc24xX2N0eAoreworCWludCBlcnJvcjsJCQkvKiBFcnJvciBjb25kaXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyICpwb2ludGVyOwkJLyogT2N0ZXQganVzdCB0byBiZSBkZWNvZGVkICovCisJdW5zaWduZWQgY2hhciAqYmVnaW47CQkvKiBGaXJzdCBvY3RldCAqLworCXVuc2lnbmVkIGNoYXIgKmVuZDsJCS8qIE9jdGV0IGFmdGVyIGxhc3Qgb2N0ZXQgKi8KK307CisKKy8qCisgKiBPY3RldCBzdHJpbmcgKG5vdCBudWxsIHRlcm1pbmF0ZWQpCisgKi8KK3N0cnVjdCBhc24xX29jdHN0cgoreworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdW5zaWduZWQgaW50IGxlbjsKK307CisKK3N0YXRpYyB2b2lkIGFzbjFfb3BlbihzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwljdHgtPmJlZ2luID0gYnVmOworCWN0eC0+ZW5kID0gYnVmICsgbGVuOworCWN0eC0+cG9pbnRlciA9IGJ1ZjsKKwljdHgtPmVycm9yID0gQVNOMV9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNuMV9vY3RldF9kZWNvZGUoc3RydWN0IGFzbjFfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmNoKQoreworCWlmIChjdHgtPnBvaW50ZXIgPj0gY3R4LT5lbmQpIHsKKwkJY3R4LT5lcnJvciA9IEFTTjFfRVJSX0RFQ19FTVBUWTsKKwkJcmV0dXJuIDA7CisJfQorCSpjaCA9ICooY3R4LT5wb2ludGVyKSsrOworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc24xX3RhZ19kZWNvZGUoc3RydWN0IGFzbjFfY3R4ICpjdHgsIHVuc2lnbmVkIGludCAqdGFnKQoreworCXVuc2lnbmVkIGNoYXIgY2g7CisKKwkqdGFnID0gMDsKKworCWRvCisJeworCQlpZiAoIWFzbjFfb2N0ZXRfZGVjb2RlKGN0eCwgJmNoKSkKKwkJCXJldHVybiAwOworCQkqdGFnIDw8PSA3OworCQkqdGFnIHw9IGNoICYgMHg3RjsKKwl9IHdoaWxlICgoY2ggJiAweDgwKSA9PSAweDgwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNuMV9pZF9kZWNvZGUoc3RydWN0IGFzbjFfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmNscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICp0YWcpCit7CisJdW5zaWduZWQgY2hhciBjaDsKKworCWlmICghYXNuMV9vY3RldF9kZWNvZGUoY3R4LCAmY2gpKQorCQlyZXR1cm4gMDsKKworCSpjbHMgPSAoY2ggJiAweEMwKSA+PiA2OworCSpjb24gPSAoY2ggJiAweDIwKSA+PiA1OworCSp0YWcgPSAoY2ggJiAweDFGKTsKKworCWlmICgqdGFnID09IDB4MUYpIHsKKwkJaWYgKCFhc24xX3RhZ19kZWNvZGUoY3R4LCB0YWcpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc24xX2xlbmd0aF9kZWNvZGUoc3RydWN0IGFzbjFfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpsZW4pCit7CisJdW5zaWduZWQgY2hhciBjaCwgY250OworCisJaWYgKCFhc24xX29jdGV0X2RlY29kZShjdHgsICZjaCkpCisJCXJldHVybiAwOworCisJaWYgKGNoID09IDB4ODApCisJCSpkZWYgPSAwOworCWVsc2UgeworCQkqZGVmID0gMTsKKworCQlpZiAoY2ggPCAweDgwKQorCQkJKmxlbiA9IGNoOworCQllbHNlIHsKKwkJCWNudCA9ICh1bnNpZ25lZCBjaGFyKSAoY2ggJiAweDdGKTsKKwkJCSpsZW4gPSAwOworCisJCQl3aGlsZSAoY250ID4gMCkgeworCQkJCWlmICghYXNuMV9vY3RldF9kZWNvZGUoY3R4LCAmY2gpKQorCQkJCQlyZXR1cm4gMDsKKwkJCQkqbGVuIDw8PSA4OworCQkJCSpsZW4gfD0gY2g7CisJCQkJY250LS07CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFzbjFfaGVhZGVyX2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqZW9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqY2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqY29uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqdGFnKQoreworCXVuc2lnbmVkIGludCBkZWYsIGxlbjsKKworCWlmICghYXNuMV9pZF9kZWNvZGUoY3R4LCBjbHMsIGNvbiwgdGFnKSkKKwkJcmV0dXJuIDA7CisKKwlkZWYgPSBsZW4gPSAwOworCWlmICghYXNuMV9sZW5ndGhfZGVjb2RlKGN0eCwgJmRlZiwgJmxlbikpCisJCXJldHVybiAwOworCisJaWYgKGRlZikKKwkJKmVvYyA9IGN0eC0+cG9pbnRlciArIGxlbjsKKwllbHNlCisJCSplb2MgPSBOVUxMOworCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc24xX2VvY19kZWNvZGUoc3RydWN0IGFzbjFfY3R4ICpjdHgsIHVuc2lnbmVkIGNoYXIgKmVvYykKK3sKKwl1bnNpZ25lZCBjaGFyIGNoOworCisJaWYgKGVvYyA9PSAwKSB7CisJCWlmICghYXNuMV9vY3RldF9kZWNvZGUoY3R4LCAmY2gpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGNoICE9IDB4MDApIHsKKwkJCWN0eC0+ZXJyb3IgPSBBU04xX0VSUl9ERUNfRU9DX01JU01BVENIOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoIWFzbjFfb2N0ZXRfZGVjb2RlKGN0eCwgJmNoKSkKKwkJCXJldHVybiAwOworCisJCWlmIChjaCAhPSAweDAwKSB7CisJCQljdHgtPmVycm9yID0gQVNOMV9FUlJfREVDX0VPQ19NSVNNQVRDSDsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWlmIChjdHgtPnBvaW50ZXIgIT0gZW9jKSB7CisJCQljdHgtPmVycm9yID0gQVNOMV9FUlJfREVDX0xFTkdUSF9NSVNNQVRDSDsKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNuMV9udWxsX2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwgdW5zaWduZWQgY2hhciAqZW9jKQoreworCWN0eC0+cG9pbnRlciA9IGVvYzsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNuMV9sb25nX2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZW9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppbnRlZ2VyKQoreworCXVuc2lnbmVkIGNoYXIgY2g7CisJdW5zaWduZWQgaW50ICBsZW47CisKKwlpZiAoIWFzbjFfb2N0ZXRfZGVjb2RlKGN0eCwgJmNoKSkKKwkJcmV0dXJuIDA7CisKKwkqaW50ZWdlciA9IChzaWduZWQgY2hhcikgY2g7CisJbGVuID0gMTsKKworCXdoaWxlIChjdHgtPnBvaW50ZXIgPCBlb2MpIHsKKwkJaWYgKCsrbGVuID4gc2l6ZW9mIChsb25nKSkgeworCQkJY3R4LT5lcnJvciA9IEFTTjFfRVJSX0RFQ19CQURWQUxVRTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCFhc24xX29jdGV0X2RlY29kZShjdHgsICZjaCkpCisJCQlyZXR1cm4gMDsKKworCQkqaW50ZWdlciA8PD0gODsKKwkJKmludGVnZXIgfD0gY2g7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc24xX3VpbnRfZGVjb2RlKHN0cnVjdCBhc24xX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqaW50ZWdlcikKK3sKKwl1bnNpZ25lZCBjaGFyIGNoOworCXVuc2lnbmVkIGludCAgbGVuOworCisJaWYgKCFhc24xX29jdGV0X2RlY29kZShjdHgsICZjaCkpCisJCXJldHVybiAwOworCisJKmludGVnZXIgPSBjaDsKKwlpZiAoY2ggPT0gMCkgbGVuID0gMDsKKwllbHNlIGxlbiA9IDE7CisKKwl3aGlsZSAoY3R4LT5wb2ludGVyIDwgZW9jKSB7CisJCWlmICgrK2xlbiA+IHNpemVvZiAodW5zaWduZWQgaW50KSkgeworCQkJY3R4LT5lcnJvciA9IEFTTjFfRVJSX0RFQ19CQURWQUxVRTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKCFhc24xX29jdGV0X2RlY29kZShjdHgsICZjaCkpCisJCQlyZXR1cm4gMDsKKworCQkqaW50ZWdlciA8PD0gODsKKwkJKmludGVnZXIgfD0gY2g7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc24xX3Vsb25nX2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmludGVnZXIpCit7CisJdW5zaWduZWQgY2hhciBjaDsKKwl1bnNpZ25lZCBpbnQgIGxlbjsKKworCWlmICghYXNuMV9vY3RldF9kZWNvZGUoY3R4LCAmY2gpKQorCQlyZXR1cm4gMDsKKworCSppbnRlZ2VyID0gY2g7CisJaWYgKGNoID09IDApIGxlbiA9IDA7CisJZWxzZSBsZW4gPSAxOworCisJd2hpbGUgKGN0eC0+cG9pbnRlciA8IGVvYykgeworCQlpZiAoKytsZW4gPiBzaXplb2YgKHVuc2lnbmVkIGxvbmcpKSB7CisJCQljdHgtPmVycm9yID0gQVNOMV9FUlJfREVDX0JBRFZBTFVFOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAoIWFzbjFfb2N0ZXRfZGVjb2RlKGN0eCwgJmNoKSkKKwkJCXJldHVybiAwOworCisJCSppbnRlZ2VyIDw8PSA4OworCQkqaW50ZWdlciB8PSBjaDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFzbjFfb2N0ZXRzX2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICplb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKm9jdGV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpwdHI7CisKKwkqbGVuID0gMDsKKworCSpvY3RldHMgPSBrbWFsbG9jKGVvYyAtIGN0eC0+cG9pbnRlciwgR0ZQX0FUT01JQyk7CisJaWYgKCpvY3RldHMgPT0gTlVMTCkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlwdHIgPSAqb2N0ZXRzOworCXdoaWxlIChjdHgtPnBvaW50ZXIgPCBlb2MpIHsKKwkJaWYgKCFhc24xX29jdGV0X2RlY29kZShjdHgsICh1bnNpZ25lZCBjaGFyICopcHRyKyspKSB7CisJCQlrZnJlZSgqb2N0ZXRzKTsKKwkJCSpvY3RldHMgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKwkJKCpsZW4pKys7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc24xX3N1YmlkX2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnN1YmlkKQoreworCXVuc2lnbmVkIGNoYXIgY2g7CisKKwkqc3ViaWQgPSAwOworCisJZG8geworCQlpZiAoIWFzbjFfb2N0ZXRfZGVjb2RlKGN0eCwgJmNoKSkKKwkJCXJldHVybiAwOworCisJCSpzdWJpZCA8PD0gNzsKKwkJKnN1YmlkIHw9IGNoICYgMHg3RjsKKwl9IHdoaWxlICgoY2ggJiAweDgwKSA9PSAweDgwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgYXNuMV9vaWRfZGVjb2RlKHN0cnVjdCBhc24xX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmVvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICoqb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbGVuKQoreworCXVuc2lnbmVkIGxvbmcgc3ViaWQ7CisJdW5zaWduZWQgaW50ICBzaXplOworCXVuc2lnbmVkIGxvbmcgKm9wdHI7CisKKwlzaXplID0gZW9jIC0gY3R4LT5wb2ludGVyICsgMTsKKwkqb2lkID0ga21hbGxvYyhzaXplICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLCBHRlBfQVRPTUlDKTsKKwlpZiAoKm9pZCA9PSBOVUxMKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoIk9PTSBpbiBic2FsZyAoJWQpXG4iLCBfX0xJTkVfXyk7CisJCXJldHVybiAwOworCX0KKworCW9wdHIgPSAqb2lkOworCisJaWYgKCFhc24xX3N1YmlkX2RlY29kZShjdHgsICZzdWJpZCkpIHsKKwkJa2ZyZWUoKm9pZCk7CisJCSpvaWQgPSBOVUxMOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3ViaWQgPCA0MCkgeworCQlvcHRyIFswXSA9IDA7CisJCW9wdHIgWzFdID0gc3ViaWQ7CisJfSBlbHNlIGlmIChzdWJpZCA8IDgwKSB7CisJCW9wdHIgWzBdID0gMTsKKwkJb3B0ciBbMV0gPSBzdWJpZCAtIDQwOworCX0gZWxzZSB7CisJCW9wdHIgWzBdID0gMjsKKwkJb3B0ciBbMV0gPSBzdWJpZCAtIDgwOworCX0KKworCSpsZW4gPSAyOworCW9wdHIgKz0gMjsKKworCXdoaWxlIChjdHgtPnBvaW50ZXIgPCBlb2MpIHsKKwkJaWYgKCsrKCpsZW4pID4gc2l6ZSkgeworCQkJY3R4LT5lcnJvciA9IEFTTjFfRVJSX0RFQ19CQURWQUxVRTsKKwkJCWtmcmVlKCpvaWQpOworCQkJKm9pZCA9IE5VTEw7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmICghYXNuMV9zdWJpZF9kZWNvZGUoY3R4LCBvcHRyKyspKSB7CisJCQlrZnJlZSgqb2lkKTsKKwkJCSpvaWQgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFNOTVAgZGVjb2Rpbmcgcm91dGluZXMgKGd4c25tcCBhdXRob3IgRGlyayBXaXNzZSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNOTVAgVmVyc2lvbnMgKi8KKyNkZWZpbmUgU05NUF9WMQkJCQkwCisjZGVmaW5lIFNOTVBfVjJDCQkJMQorI2RlZmluZSBTTk1QX1YyCQkJCTIKKyNkZWZpbmUgU05NUF9WMwkJCQkzCisKKy8qIERlZmF1bHQgU2l6ZXMgKi8KKyNkZWZpbmUgU05NUF9TSVpFX0NPTU0JCQkyNTYKKyNkZWZpbmUgU05NUF9TSVpFX09CSkVDVElECQkxMjgKKyNkZWZpbmUgU05NUF9TSVpFX0JVRkNIUgkJMjU2CisjZGVmaW5lIFNOTVBfU0laRV9CVUZJTlQJCTEyOAorI2RlZmluZSBTTk1QX1NJWkVfU01BTExPQkpFQ1RJRAkJMTYKKworLyogUmVxdWVzdHMgKi8KKyNkZWZpbmUgU05NUF9QRFVfR0VUCQkJMAorI2RlZmluZSBTTk1QX1BEVV9ORVhUCQkJMQorI2RlZmluZSBTTk1QX1BEVV9SRVNQT05TRQkJMgorI2RlZmluZSBTTk1QX1BEVV9TRVQJCQkzCisjZGVmaW5lIFNOTVBfUERVX1RSQVAxCQkJNAorI2RlZmluZSBTTk1QX1BEVV9CVUxLCQkJNQorI2RlZmluZSBTTk1QX1BEVV9JTkZPUk0JCQk2CisjZGVmaW5lIFNOTVBfUERVX1RSQVAyCQkJNworCisvKiBFcnJvcnMgKi8KKyNkZWZpbmUgU05NUF9OT0VSUk9SCQkJMAorI2RlZmluZSBTTk1QX1RPT0JJRwkJCTEKKyNkZWZpbmUgU05NUF9OT1NVQ0hOQU1FCQkJMgorI2RlZmluZSBTTk1QX0JBRFZBTFVFCQkJMworI2RlZmluZSBTTk1QX1JFQURPTkxZCQkJNAorI2RlZmluZSBTTk1QX0dFTkVSUk9SCQkJNQorI2RlZmluZSBTTk1QX05PQUNDRVNTCQkJNgorI2RlZmluZSBTTk1QX1dST05HVFlQRQkJCTcKKyNkZWZpbmUgU05NUF9XUk9OR0xFTkdUSAkJOAorI2RlZmluZSBTTk1QX1dST05HRU5DT0RJTkcJCTkKKyNkZWZpbmUgU05NUF9XUk9OR1ZBTFVFCQkJMTAKKyNkZWZpbmUgU05NUF9OT0NSRUFUSU9OCQkJMTEKKyNkZWZpbmUgU05NUF9JTkNPTlNJU1RFTlRWQUxVRQkJMTIKKyNkZWZpbmUgU05NUF9SRVNPVVJDRVVOQVZBSUxBQkxFCTEzCisjZGVmaW5lIFNOTVBfQ09NTUlURkFJTEVECQkxNAorI2RlZmluZSBTTk1QX1VORE9GQUlMRUQJCQkxNQorI2RlZmluZSBTTk1QX0FVVEhPUklaQVRJT05FUlJPUgkJMTYKKyNkZWZpbmUgU05NUF9OT1RXUklUQUJMRQkJMTcKKyNkZWZpbmUgU05NUF9JTkNPTlNJU1RFTlROQU1FCQkxOAorCisvKiBHZW5lcmFsIFNOTVAgVjEgVHJhcHMgKi8KKyNkZWZpbmUgU05NUF9UUkFQX0NPTERTVEFSVAkJMAorI2RlZmluZSBTTk1QX1RSQVBfV0FSTVNUQVJUCQkxCisjZGVmaW5lIFNOTVBfVFJBUF9MSU5LRE9XTgkJMgorI2RlZmluZSBTTk1QX1RSQVBfTElOS1VQCQkzCisjZGVmaW5lIFNOTVBfVFJBUF9BVVRGQUlMVVJFCQk0CisjZGVmaW5lIFNOTVBfVFJBUF9FUVBORUlHSEJPUkxPU1MJNQorI2RlZmluZSBTTk1QX1RSQVBfRU5UU1BFQ0lGSUMJCTYKKworLyogU05NUHYxIFR5cGVzICovCisjZGVmaW5lIFNOTVBfTlVMTCAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNOTVBfSU5URUdFUiAgICAgICAgICAgICAxICAgIC8qIGwgICovCisjZGVmaW5lIFNOTVBfT0NURVRTVFIgICAgICAgICAgICAyICAgIC8qIGMgICovCisjZGVmaW5lIFNOTVBfRElTUExBWVNUUiAgICAgICAgICAyICAgIC8qIGMgICovCisjZGVmaW5lIFNOTVBfT0JKRUNUSUQgICAgICAgICAgICAzICAgIC8qIHVsICovCisjZGVmaW5lIFNOTVBfSVBBRERSICAgICAgICAgICAgICA0ICAgIC8qIHVjICovCisjZGVmaW5lIFNOTVBfQ09VTlRFUiAgICAgICAgICAgICA1ICAgIC8qIHVsICovCisjZGVmaW5lIFNOTVBfR0FVR0UgICAgICAgICAgICAgICA2ICAgIC8qIHVsICovCisjZGVmaW5lIFNOTVBfVElNRVRJQ0tTICAgICAgICAgICA3ICAgIC8qIHVsICovCisjZGVmaW5lIFNOTVBfT1BBUVVFICAgICAgICAgICAgICA4ICAgIC8qIGMgICovCisKKy8qIEFkZGl0aW9uYWwgU05NUHYyIFR5cGVzICovCisjZGVmaW5lIFNOTVBfVUlOVEVHRVIgICAgICAgICAgICA1ICAgIC8qIHVsICovCisjZGVmaW5lIFNOTVBfQklUU1RSICAgICAgICAgICAgICA5ICAgIC8qIHVjICovCisjZGVmaW5lIFNOTVBfTlNBUCAgICAgICAgICAgICAgIDEwICAgIC8qIHVjICovCisjZGVmaW5lIFNOTVBfQ09VTlRFUjY0ICAgICAgICAgIDExICAgIC8qIHVsICovCisjZGVmaW5lIFNOTVBfTk9TVUNIT0JKRUNUICAgICAgIDEyCisjZGVmaW5lIFNOTVBfTk9TVUNISU5TVEFOQ0UgICAgIDEzCisjZGVmaW5lIFNOTVBfRU5ET0ZNSUJWSUVXICAgICAgIDE0CisKK3VuaW9uIHNubXBfc3ludGF4Cit7CisJdW5zaWduZWQgY2hhciB1Y1swXTsJLyogOCBiaXQgdW5zaWduZWQgKi8KKwljaGFyIGNbMF07CQkvKiA4IGJpdCBzaWduZWQgKi8KKwl1bnNpZ25lZCBsb25nIHVsWzBdOwkvKiAzMiBiaXQgdW5zaWduZWQgKi8KKwlsb25nIGxbMF07CQkvKiAzMiBiaXQgc2lnbmVkICovCit9OworCitzdHJ1Y3Qgc25tcF9vYmplY3QKK3sKKwl1bnNpZ25lZCBsb25nICppZDsKKwl1bnNpZ25lZCBpbnQgaWRfbGVuOworCXVuc2lnbmVkIHNob3J0IHR5cGU7CisJdW5zaWduZWQgaW50IHN5bnRheF9sZW47CisJdW5pb24gc25tcF9zeW50YXggc3ludGF4OworfTsKKworc3RydWN0IHNubXBfcmVxdWVzdAoreworCXVuc2lnbmVkIGxvbmcgaWQ7CisJdW5zaWduZWQgaW50IGVycm9yX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgZXJyb3JfaW5kZXg7Cit9OworCitzdHJ1Y3Qgc25tcF92MV90cmFwCit7CisJdW5zaWduZWQgbG9uZyAqaWQ7CisJdW5zaWduZWQgaW50IGlkX2xlbjsKKwl1bnNpZ25lZCBsb25nIGlwX2FkZHJlc3M7CS8qIHBvaW50ZXIgICovCisJdW5zaWduZWQgaW50IGdlbmVyYWw7CisJdW5zaWduZWQgaW50IHNwZWNpZmljOworCXVuc2lnbmVkIGxvbmcgdGltZTsKK307CisKKy8qIFNOTVAgdHlwZXMgKi8KKyNkZWZpbmUgU05NUF9JUEEgICAgMAorI2RlZmluZSBTTk1QX0NOVCAgICAxCisjZGVmaW5lIFNOTVBfR0dFICAgIDIKKyNkZWZpbmUgU05NUF9USVQgICAgMworI2RlZmluZSBTTk1QX09QUSAgICA0CisjZGVmaW5lIFNOTVBfQzY0ICAgIDYKKworLyogU05NUCBlcnJvcnMgKi8KKyNkZWZpbmUgU0VSUl9OU08gICAgMAorI2RlZmluZSBTRVJSX05TSSAgICAxCisjZGVmaW5lIFNFUlJfRU9NICAgIDIKKworc3RhdGljIGlubGluZSB2b2lkIG1hbmdsZV9hZGRyZXNzKHVuc2lnbmVkIGNoYXIgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9jdDFfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdW0xNiAqY2hlY2spOworc3RydWN0IHNubXBfY252Cit7CisJdW5zaWduZWQgaW50IGNsYXNzOworCXVuc2lnbmVkIGludCB0YWc7CisJaW50IHN5bnRheDsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25tcF9jbnYgc25tcF9jb252IFtdID0KK3sKKwl7QVNOMV9VTkksIEFTTjFfTlVMLCBTTk1QX05VTEx9LAorCXtBU04xX1VOSSwgQVNOMV9JTlQsIFNOTVBfSU5URUdFUn0sCisJe0FTTjFfVU5JLCBBU04xX09UUywgU05NUF9PQ1RFVFNUUn0sCisJe0FTTjFfVU5JLCBBU04xX09UUywgU05NUF9ESVNQTEFZU1RSfSwKKwl7QVNOMV9VTkksIEFTTjFfT0pJLCBTTk1QX09CSkVDVElEfSwKKwl7QVNOMV9BUEwsIFNOTVBfSVBBLCBTTk1QX0lQQUREUn0sCisJe0FTTjFfQVBMLCBTTk1QX0NOVCwgU05NUF9DT1VOVEVSfSwJLyogQ291bnRlcjMyICovCisJe0FTTjFfQVBMLCBTTk1QX0dHRSwgU05NUF9HQVVHRX0sCS8qIEdhdWdlMzIgPT0gVW5zaWduZWQzMiAgKi8KKwl7QVNOMV9BUEwsIFNOTVBfVElULCBTTk1QX1RJTUVUSUNLU30sCisJe0FTTjFfQVBMLCBTTk1QX09QUSwgU05NUF9PUEFRVUV9LAorCisJLyogU05NUHYyIGRhdGEgdHlwZXMgYW5kIGVycm9ycyAqLworCXtBU04xX1VOSSwgQVNOMV9CVFMsIFNOTVBfQklUU1RSfSwKKwl7QVNOMV9BUEwsIFNOTVBfQzY0LCBTTk1QX0NPVU5URVI2NH0sCisJe0FTTjFfQ1RYLCBTRVJSX05TTywgU05NUF9OT1NVQ0hPQkpFQ1R9LAorCXtBU04xX0NUWCwgU0VSUl9OU0ksIFNOTVBfTk9TVUNISU5TVEFOQ0V9LAorCXtBU04xX0NUWCwgU0VSUl9FT00sIFNOTVBfRU5ET0ZNSUJWSUVXfSwKKwl7MCwgICAgICAgMCwgICAgICAgLTF9Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbm1wX3RhZ19jbHMyc3ludGF4KHVuc2lnbmVkIGludCB0YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpzeW50YXgpCit7CisJc3RydWN0IHNubXBfY252ICpjbnY7CisKKwljbnYgPSBzbm1wX2NvbnY7CisKKwl3aGlsZSAoY252LT5zeW50YXggIT0gLTEpIHsKKwkJaWYgKGNudi0+dGFnID09IHRhZyAmJiBjbnYtPmNsYXNzID09IGNscykgeworCQkJKnN5bnRheCA9IGNudi0+c3ludGF4OworCQkJcmV0dXJuIDE7CisJCX0KKwkJY252Kys7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbm1wX29iamVjdF9kZWNvZGUoc3RydWN0IGFzbjFfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfb2JqZWN0ICoqb2JqKQoreworCXVuc2lnbmVkIGludCBjbHMsIGNvbiwgdGFnLCBsZW4sIGlkbGVuOworCXVuc2lnbmVkIHNob3J0IHR5cGU7CisJdW5zaWduZWQgY2hhciAqZW9jLCAqZW5kLCAqcDsKKwl1bnNpZ25lZCBsb25nICpscCwgKmlkOworCXVuc2lnbmVkIGxvbmcgdWw7CisJbG9uZyBsOworCisJKm9iaiA9IE5VTEw7CisJaWQgPSBOVUxMOworCisJaWYgKCFhc24xX2hlYWRlcl9kZWNvZGUoY3R4LCAmZW9jLCAmY2xzLCAmY29uLCAmdGFnKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX0NPTiB8fCB0YWcgIT0gQVNOMV9TRVEpCisJCXJldHVybiAwOworCisJaWYgKCFhc24xX2hlYWRlcl9kZWNvZGUoY3R4LCAmZW5kLCAmY2xzLCAmY29uLCAmdGFnKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX1BSSSB8fCB0YWcgIT0gQVNOMV9PSkkpCisJCXJldHVybiAwOworCisJaWYgKCFhc24xX29pZF9kZWNvZGUoY3R4LCBlbmQsICZpZCwgJmlkbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZShjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKSB7CisJCWtmcmVlKGlkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNvbiAhPSBBU04xX1BSSSkgeworCQlrZnJlZShpZCk7CisJCXJldHVybiAwOworCX0KKworCXR5cGUgPSAwOworCWlmICghc25tcF90YWdfY2xzMnN5bnRheCh0YWcsIGNscywgJnR5cGUpKSB7CisJCWtmcmVlKGlkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbCA9IDA7CisJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgU05NUF9JTlRFR0VSOgorCQkJbGVuID0gc2l6ZW9mKGxvbmcpOworCQkJaWYgKCFhc24xX2xvbmdfZGVjb2RlKGN0eCwgZW5kLCAmbCkpIHsKKwkJCQlrZnJlZShpZCk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQkqb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNubXBfb2JqZWN0KSArIGxlbiwKKwkJCSAgICAgICAgICAgICAgIEdGUF9BVE9NSUMpOworCQkJaWYgKCpvYmogPT0gTlVMTCkgeworCQkJCWtmcmVlKGlkKTsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlwcmludGsoIk9PTSBpbiBic2FsZyAoJWQpXG4iLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQkoKm9iaiktPnN5bnRheC5sWzBdID0gbDsKKwkJCWJyZWFrOworCQljYXNlIFNOTVBfT0NURVRTVFI6CisJCWNhc2UgU05NUF9PUEFRVUU6CisJCQlpZiAoIWFzbjFfb2N0ZXRzX2RlY29kZShjdHgsIGVuZCwgJnAsICZsZW4pKSB7CisJCQkJa2ZyZWUoaWQpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJKm9iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbm1wX29iamVjdCkgKyBsZW4sCisJCQkgICAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKKwkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShpZCk7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOworCQkJCXJldHVybiAwOworCQkJfQorCQkJbWVtY3B5KCgqb2JqKS0+c3ludGF4LmMsIHAsIGxlbik7CisJCQlrZnJlZShwKTsKKwkJCWJyZWFrOworCQljYXNlIFNOTVBfTlVMTDoKKwkJY2FzZSBTTk1QX05PU1VDSE9CSkVDVDoKKwkJY2FzZSBTTk1QX05PU1VDSElOU1RBTkNFOgorCQljYXNlIFNOTVBfRU5ET0ZNSUJWSUVXOgorCQkJbGVuID0gMDsKKwkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpLCBHRlBfQVRPTUlDKTsKKwkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShpZCk7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKCFhc24xX251bGxfZGVjb2RlKGN0eCwgZW5kKSkgeworCQkJCWtmcmVlKGlkKTsKKwkJCQlrZnJlZSgqb2JqKTsKKwkJCQkqb2JqID0gTlVMTDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNOTVBfT0JKRUNUSUQ6CisJCQlpZiAoIWFzbjFfb2lkX2RlY29kZShjdHgsIGVuZCwgKHVuc2lnbmVkIGxvbmcgKiopJmxwLCAmbGVuKSkgeworCQkJCWtmcmVlKGlkKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWxlbiAqPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJCQkqb2JqID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNubXBfb2JqZWN0KSArIGxlbiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoKm9iaiA9PSBOVUxMKSB7CisJCQkJa2ZyZWUobHApOworCQkJCWtmcmVlKGlkKTsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlwcmludGsoIk9PTSBpbiBic2FsZyAoJWQpXG4iLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQltZW1jcHkoKCpvYmopLT5zeW50YXgudWwsIGxwLCBsZW4pOworCQkJa2ZyZWUobHApOworCQkJYnJlYWs7CisJCWNhc2UgU05NUF9JUEFERFI6CisJCQlpZiAoIWFzbjFfb2N0ZXRzX2RlY29kZShjdHgsIGVuZCwgJnAsICZsZW4pKSB7CisJCQkJa2ZyZWUoaWQpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKGxlbiAhPSA0KSB7CisJCQkJa2ZyZWUocCk7CisJCQkJa2ZyZWUoaWQpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJKm9iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbm1wX29iamVjdCkgKyBsZW4sIEdGUF9BVE9NSUMpOworCQkJaWYgKCpvYmogPT0gTlVMTCkgeworCQkJCWtmcmVlKHApOworCQkJCWtmcmVlKGlkKTsKKwkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQlwcmludGsoIk9PTSBpbiBic2FsZyAoJWQpXG4iLCBfX0xJTkVfXyk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQltZW1jcHkoKCpvYmopLT5zeW50YXgudWMsIHAsIGxlbik7CisJCQlrZnJlZShwKTsKKwkJCWJyZWFrOworCQljYXNlIFNOTVBfQ09VTlRFUjoKKwkJY2FzZSBTTk1QX0dBVUdFOgorCQljYXNlIFNOTVBfVElNRVRJQ0tTOgorCQkJbGVuID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQkJaWYgKCFhc24xX3Vsb25nX2RlY29kZShjdHgsIGVuZCwgJnVsKSkgeworCQkJCWtmcmVlKGlkKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCSpvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpICsgbGVuLCBHRlBfQVRPTUlDKTsKKwkJCWlmICgqb2JqID09IE5VTEwpIHsKKwkJCQlrZnJlZShpZCk7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKCJPT00gaW4gYnNhbGcgKCVkKVxuIiwgX19MSU5FX18pOworCQkJCXJldHVybiAwOworCQkJfQorCQkJKCpvYmopLT5zeW50YXgudWxbMF0gPSB1bDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJa2ZyZWUoaWQpOworCQkJcmV0dXJuIDA7CisJfQorCisJKCpvYmopLT5zeW50YXhfbGVuID0gbGVuOworCSgqb2JqKS0+dHlwZSA9IHR5cGU7CisJKCpvYmopLT5pZCA9IGlkOworCSgqb2JqKS0+aWRfbGVuID0gaWRsZW47CisKKwlpZiAoIWFzbjFfZW9jX2RlY29kZShjdHgsIGVvYykpIHsKKwkJa2ZyZWUoaWQpOworCQlrZnJlZSgqb2JqKTsKKwkJKm9iaiA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgc25tcF9yZXF1ZXN0X2RlY29kZShzdHJ1Y3QgYXNuMV9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwl1bnNpZ25lZCBpbnQgY2xzLCBjb24sIHRhZzsKKwl1bnNpZ25lZCBjaGFyICplbmQ7CisKKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZShjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKQorCQlyZXR1cm4gMDsKKworCWlmIChjbHMgIT0gQVNOMV9VTkkgfHwgY29uICE9IEFTTjFfUFJJIHx8IHRhZyAhPSBBU04xX0lOVCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFzbjFfdWxvbmdfZGVjb2RlKGN0eCwgZW5kLCAmcmVxdWVzdC0+aWQpKQorCQlyZXR1cm4gMDsKKworCWlmICghYXNuMV9oZWFkZXJfZGVjb2RlKGN0eCwgJmVuZCwgJmNscywgJmNvbiwgJnRhZykpCisJCXJldHVybiAwOworCisJaWYgKGNscyAhPSBBU04xX1VOSSB8fCBjb24gIT0gQVNOMV9QUkkgfHwgdGFnICE9IEFTTjFfSU5UKQorCQlyZXR1cm4gMDsKKworCWlmICghYXNuMV91aW50X2RlY29kZShjdHgsIGVuZCwgJnJlcXVlc3QtPmVycm9yX3N0YXR1cykpCisJCXJldHVybiAwOworCisJaWYgKCFhc24xX2hlYWRlcl9kZWNvZGUoY3R4LCAmZW5kLCAmY2xzLCAmY29uLCAmdGFnKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX1BSSSB8fCB0YWcgIT0gQVNOMV9JTlQpCisJCXJldHVybiAwOworCisJaWYgKCFhc24xX3VpbnRfZGVjb2RlKGN0eCwgZW5kLCAmcmVxdWVzdC0+ZXJyb3JfaW5kZXgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogRmFzdCBjaGVja3N1bSB1cGRhdGUgZm9yIHBvc3NpYmx5IG9kZGx5LWFsaWduZWQgVURQIGJ5dGUsIGZyb20gdGhlCisgKiBjb2RlIGV4YW1wbGUgaW4gdGhlIGRyYWZ0LgorICovCitzdGF0aWMgdm9pZCBmYXN0X2NzdW0oX19zdW0xNiAqY3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvcHRyLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5wdHIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNbNF07CisKKwlpZiAob2Zmc2V0ICYgMSkgeworCQlzWzBdID0gc1syXSA9IDA7CisJCXNbMV0gPSB+Km9wdHI7CisJCXNbM10gPSAqbnB0cjsKKwl9IGVsc2UgeworCQlzWzFdID0gc1szXSA9IDA7CisJCXNbMF0gPSB+Km9wdHI7CisJCXNbMl0gPSAqbnB0cjsKKwl9CisKKwkqY3N1bSA9IGNzdW1fZm9sZChjc3VtX3BhcnRpYWwocywgNCwgfmNzdW1fdW5mb2xkKCpjc3VtKSkpOworfQorCisvKgorICogTWFuZ2xlIElQIGFkZHJlc3MuCisgKiAJLSBiZWdpbiBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzbm1wIG1lc3NnYWUKKyAqICAgICAgLSBhZGRyIHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGFkZHJlc3MKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG1hbmdsZV9hZGRyZXNzKHVuc2lnbmVkIGNoYXIgKmJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9jdDFfbWFwICptYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdW0xNiAqY2hlY2spCit7CisJaWYgKG1hcC0+ZnJvbSA9PSBOT0NUMShhZGRyKSkgeworCQl1X2ludDMyX3Qgb2xkOworCisJCWlmIChkZWJ1ZykKKwkJCW1lbWNweSgmb2xkLCAodW5zaWduZWQgY2hhciAqKWFkZHIsIHNpemVvZihvbGQpKTsKKworCQkqYWRkciA9IG1hcC0+dG87CisKKwkJLyogVXBkYXRlIFVEUCBjaGVja3N1bSBpZiBiZWluZyB1c2VkICovCisJCWlmICgqY2hlY2spIHsKKwkJCWZhc3RfY3N1bShjaGVjaywKKwkJCSAgICAgICAgICAmbWFwLT5mcm9tLCAmbWFwLT50bywgYWRkciAtIGJlZ2luKTsKKworCQl9CisKKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJzYWxnOiBtYXBwZWQgJXUuJXUuJXUuJXUgdG8gIgorCQkJICAgICAgICIldS4ldS4ldS4ldVxuIiwgTklQUVVBRChvbGQpLCBOSVBRVUFEKCphZGRyKSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBzbm1wX3RyYXBfZGVjb2RlKHN0cnVjdCBhc24xX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF92MV90cmFwICp0cmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2N0MV9tYXAgKm1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdW0xNiAqY2hlY2spCit7CisJdW5zaWduZWQgaW50IGNscywgY29uLCB0YWcsIGxlbjsKKwl1bnNpZ25lZCBjaGFyICplbmQ7CisKKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZShjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKQorCQlyZXR1cm4gMDsKKworCWlmIChjbHMgIT0gQVNOMV9VTkkgfHwgY29uICE9IEFTTjFfUFJJIHx8IHRhZyAhPSBBU04xX09KSSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFzbjFfb2lkX2RlY29kZShjdHgsIGVuZCwgJnRyYXAtPmlkLCAmdHJhcC0+aWRfbGVuKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZShjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKQorCQlnb3RvIGVycl9pZF9mcmVlOworCisJaWYgKCEoKGNscyA9PSBBU04xX0FQTCAmJiBjb24gPT0gQVNOMV9QUkkgJiYgdGFnID09IFNOTVBfSVBBKSB8fAorCSAgICAgIChjbHMgPT0gQVNOMV9VTkkgJiYgY29uID09IEFTTjFfUFJJICYmIHRhZyA9PSBBU04xX09UUykpKQorCQlnb3RvIGVycl9pZF9mcmVlOworCisJaWYgKCFhc24xX29jdGV0c19kZWNvZGUoY3R4LCBlbmQsICh1bnNpZ25lZCBjaGFyICoqKSZ0cmFwLT5pcF9hZGRyZXNzLCAmbGVuKSkKKwkJZ290byBlcnJfaWRfZnJlZTsKKworCS8qIElQdjQgb25seSAqLworCWlmIChsZW4gIT0gNCkKKwkJZ290byBlcnJfYWRkcl9mcmVlOworCisJbWFuZ2xlX2FkZHJlc3MoY3R4LT5iZWdpbiwgY3R4LT5wb2ludGVyIC0gNCwgbWFwLCBjaGVjayk7CisKKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZShjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKQorCQlnb3RvIGVycl9hZGRyX2ZyZWU7CisKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX1BSSSB8fCB0YWcgIT0gQVNOMV9JTlQpCisJCWdvdG8gZXJyX2FkZHJfZnJlZTsKKworCWlmICghYXNuMV91aW50X2RlY29kZShjdHgsIGVuZCwgJnRyYXAtPmdlbmVyYWwpKQorCQlnb3RvIGVycl9hZGRyX2ZyZWU7CisKKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZShjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKQorCQlnb3RvIGVycl9hZGRyX2ZyZWU7CisKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX1BSSSB8fCB0YWcgIT0gQVNOMV9JTlQpCisJCWdvdG8gZXJyX2FkZHJfZnJlZTsKKworCWlmICghYXNuMV91aW50X2RlY29kZShjdHgsIGVuZCwgJnRyYXAtPnNwZWNpZmljKSkKKwkJZ290byBlcnJfYWRkcl9mcmVlOworCisJaWYgKCFhc24xX2hlYWRlcl9kZWNvZGUoY3R4LCAmZW5kLCAmY2xzLCAmY29uLCAmdGFnKSkKKwkJZ290byBlcnJfYWRkcl9mcmVlOworCisJaWYgKCEoKGNscyA9PSBBU04xX0FQTCAmJiBjb24gPT0gQVNOMV9QUkkgJiYgdGFnID09IFNOTVBfVElUKSB8fAorCSAgICAgIChjbHMgPT0gQVNOMV9VTkkgJiYgY29uID09IEFTTjFfUFJJICYmIHRhZyA9PSBBU04xX0lOVCkpKQorCQlnb3RvIGVycl9hZGRyX2ZyZWU7CisKKwlpZiAoIWFzbjFfdWxvbmdfZGVjb2RlKGN0eCwgZW5kLCAmdHJhcC0+dGltZSkpCisJCWdvdG8gZXJyX2FkZHJfZnJlZTsKKworCXJldHVybiAxOworCitlcnJfYWRkcl9mcmVlOgorCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC0+aXBfYWRkcmVzcyk7CisKK2Vycl9pZF9mcmVlOgorCWtmcmVlKHRyYXAtPmlkKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBNaXNjLiByb3V0aW5lcworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgaGV4X2R1bXAodW5zaWduZWQgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpICYmICEoaSAlIDE2KSkKKwkJCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKCIlMDJ4ICIsICooYnVmICsgaSkpOworCX0KKwlwcmludGsoIlxuIik7Cit9CisKKy8qCisgKiBQYXJzZSBhbmQgbWFuZ2xlIFNOTVAgbWVzc2FnZSBhY2NvcmRpbmcgdG8gbWFwcGluZy4KKyAqIChBbmQgdGhpcyBpcyB0aGUgZnVja2luZyAnYmFzaWMnIG1ldGhvZCkuCisgKi8KK3N0YXRpYyBpbnQgc25tcF9wYXJzZV9tYW5nbGUodW5zaWduZWQgY2hhciAqbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludDE2X3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2N0MV9tYXAgKm1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdW0xNiAqY2hlY2spCit7CisJdW5zaWduZWQgY2hhciAqZW9jLCAqZW5kOworCXVuc2lnbmVkIGludCBjbHMsIGNvbiwgdGFnLCB2ZXJzLCBwZHV0eXBlOworCXN0cnVjdCBhc24xX2N0eCBjdHg7CisJc3RydWN0IGFzbjFfb2N0c3RyIGNvbW07CisJc3RydWN0IHNubXBfb2JqZWN0ICoqb2JqOworCisJaWYgKGRlYnVnID4gMSkKKwkJaGV4X2R1bXAobXNnLCBsZW4pOworCisJYXNuMV9vcGVuKCZjdHgsIG1zZywgbGVuKTsKKworCS8qCisJICogU3RhcnQgb2YgU05NUCBtZXNzYWdlLgorCSAqLworCWlmICghYXNuMV9oZWFkZXJfZGVjb2RlKCZjdHgsICZlb2MsICZjbHMsICZjb24sICZ0YWcpKQorCQlyZXR1cm4gMDsKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX0NPTiB8fCB0YWcgIT0gQVNOMV9TRVEpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBWZXJzaW9uIDEgb3IgMiBoYW5kbGVkLgorCSAqLworCWlmICghYXNuMV9oZWFkZXJfZGVjb2RlKCZjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpKQorCQlyZXR1cm4gMDsKKwlpZiAoY2xzICE9IEFTTjFfVU5JIHx8IGNvbiAhPSBBU04xX1BSSSB8fCB0YWcgIT0gQVNOMV9JTlQpCisJCXJldHVybiAwOworCWlmICghYXNuMV91aW50X2RlY29kZSAoJmN0eCwgZW5kLCAmdmVycykpCisJCXJldHVybiAwOworCWlmIChkZWJ1ZyA+IDEpCisJCXByaW50ayhLRVJOX0RFQlVHICJic2FsZzogc25tcCB2ZXJzaW9uOiAldVxuIiwgdmVycyArIDEpOworCWlmICh2ZXJzID4gMSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIENvbW11bml0eS4KKwkgKi8KKwlpZiAoIWFzbjFfaGVhZGVyX2RlY29kZSAoJmN0eCwgJmVuZCwgJmNscywgJmNvbiwgJnRhZykpCisJCXJldHVybiAwOworCWlmIChjbHMgIT0gQVNOMV9VTkkgfHwgY29uICE9IEFTTjFfUFJJIHx8IHRhZyAhPSBBU04xX09UUykKKwkJcmV0dXJuIDA7CisJaWYgKCFhc24xX29jdGV0c19kZWNvZGUoJmN0eCwgZW5kLCAmY29tbS5kYXRhLCAmY29tbS5sZW4pKQorCQlyZXR1cm4gMDsKKwlpZiAoZGVidWcgPiAxKSB7CisJCXVuc2lnbmVkIGludCBpOworCisJCXByaW50ayhLRVJOX0RFQlVHICJic2FsZzogY29tbXVuaXR5OiAiKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvbW0ubGVuOyBpKyspCisJCQlwcmludGsoIiVjIiwgY29tbS5kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlrZnJlZShjb21tLmRhdGEpOworCisJLyoKKwkgKiBQRFUgdHlwZQorCSAqLworCWlmICghYXNuMV9oZWFkZXJfZGVjb2RlKCZjdHgsICZlb2MsICZjbHMsICZjb24sICZwZHV0eXBlKSkKKwkJcmV0dXJuIDA7CisJaWYgKGNscyAhPSBBU04xX0NUWCB8fCBjb24gIT0gQVNOMV9DT04pCisJCXJldHVybiAwOworCWlmIChkZWJ1ZyA+IDEpIHsKKwkJdW5zaWduZWQgY2hhciAqcGR1c1tdID0geworCQkJW1NOTVBfUERVX0dFVF0gPSAiZ2V0IiwKKwkJCVtTTk1QX1BEVV9ORVhUXSA9ICJnZXQtbmV4dCIsCisJCQlbU05NUF9QRFVfUkVTUE9OU0VdID0gInJlc3BvbnNlIiwKKwkJCVtTTk1QX1BEVV9TRVRdID0gInNldCIsCisJCQlbU05NUF9QRFVfVFJBUDFdID0gInRyYXB2MSIsCisJCQlbU05NUF9QRFVfQlVMS10gPSAiYnVsayIsCisJCQlbU05NUF9QRFVfSU5GT1JNXSA9ICJpbmZvcm0iLAorCQkJW1NOTVBfUERVX1RSQVAyXSA9ICJ0cmFwdjIiCisJCX07CisKKwkJaWYgKHBkdXR5cGUgPiBTTk1QX1BEVV9UUkFQMikKKwkJCXByaW50ayhLRVJOX0RFQlVHICJic2FsZzogYmFkIHBkdSB0eXBlICV1XG4iLCBwZHV0eXBlKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJzYWxnOiBwZHU6ICVzXG4iLCBwZHVzW3BkdXR5cGVdKTsKKwl9CisJaWYgKHBkdXR5cGUgIT0gU05NUF9QRFVfUkVTUE9OU0UgJiYKKwkgICAgcGR1dHlwZSAhPSBTTk1QX1BEVV9UUkFQMSAmJiBwZHV0eXBlICE9IFNOTVBfUERVX1RSQVAyKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogUmVxdWVzdCBoZWFkZXIgb3IgdjEgdHJhcAorCSAqLworCWlmIChwZHV0eXBlID09IFNOTVBfUERVX1RSQVAxKSB7CisJCXN0cnVjdCBzbm1wX3YxX3RyYXAgdHJhcDsKKwkJdW5zaWduZWQgY2hhciByZXQgPSBzbm1wX3RyYXBfZGVjb2RlKCZjdHgsICZ0cmFwLCBtYXAsIGNoZWNrKTsKKworCQlpZiAocmV0KSB7CisJCQlrZnJlZSh0cmFwLmlkKTsKKwkJCWtmcmVlKCh1bnNpZ25lZCBsb25nICopdHJhcC5pcF9hZGRyZXNzKTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gcmV0OworCisJfSBlbHNlIHsKKwkJc3RydWN0IHNubXBfcmVxdWVzdCByZXE7CisKKwkJaWYgKCFzbm1wX3JlcXVlc3RfZGVjb2RlKCZjdHgsICZyZXEpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGRlYnVnID4gMSkKKwkJCXByaW50ayhLRVJOX0RFQlVHICJic2FsZzogcmVxdWVzdDogaWQ9MHglbHggZXJyb3Jfc3RhdHVzPSV1ICIKKwkJCSJlcnJvcl9pbmRleD0ldVxuIiwgcmVxLmlkLCByZXEuZXJyb3Jfc3RhdHVzLAorCQkJcmVxLmVycm9yX2luZGV4KTsKKwl9CisKKwkvKgorCSAqIExvb3AgdGhyb3VnaCBvYmplY3RzLCBsb29rIGZvciBJUCBhZGRyZXNzZXMgdG8gbWFuZ2xlLgorCSAqLworCWlmICghYXNuMV9oZWFkZXJfZGVjb2RlKCZjdHgsICZlb2MsICZjbHMsICZjb24sICZ0YWcpKQorCQlyZXR1cm4gMDsKKworCWlmIChjbHMgIT0gQVNOMV9VTkkgfHwgY29uICE9IEFTTjFfQ09OIHx8IHRhZyAhPSBBU04xX1NFUSkKKwkJcmV0dXJuIDA7CisKKwlvYmogPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc25tcF9vYmplY3QpLCBHRlBfQVRPTUlDKTsKKwlpZiAob2JqID09IE5VTEwpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9PTSBpbiBic2FsZyglZClcbiIsIF9fTElORV9fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKCFhc24xX2VvY19kZWNvZGUoJmN0eCwgZW9jKSkgeworCQl1bnNpZ25lZCBpbnQgaTsKKworCQlpZiAoIXNubXBfb2JqZWN0X2RlY29kZSgmY3R4LCBvYmopKSB7CisJCQlpZiAoKm9iaikgeworCQkJCWtmcmVlKCgqb2JqKS0+aWQpOworCQkJCWtmcmVlKCpvYmopOworCQkJfQorCQkJa2ZyZWUob2JqKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKGRlYnVnID4gMSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImJzYWxnOiBvYmplY3Q6ICIpOworCQkJZm9yIChpID0gMDsgaSA8ICgqb2JqKS0+aWRfbGVuOyBpKyspIHsKKwkJCQlpZiAoaSA+IDApCisJCQkJCXByaW50aygiLiIpOworCQkJCXByaW50aygiJWx1IiwgKCpvYmopLT5pZFtpXSk7CisJCQl9CisJCQlwcmludGsoIjogdHlwZT0ldVxuIiwgKCpvYmopLT50eXBlKTsKKworCQl9CisKKwkJaWYgKCgqb2JqKS0+dHlwZSA9PSBTTk1QX0lQQUREUikKKwkJCW1hbmdsZV9hZGRyZXNzKGN0eC5iZWdpbiwgY3R4LnBvaW50ZXIgLSA0ICwgbWFwLCBjaGVjayk7CisKKwkJa2ZyZWUoKCpvYmopLT5pZCk7CisJCWtmcmVlKCpvYmopOworCX0KKwlrZnJlZShvYmopOworCisJaWYgKCFhc24xX2VvY19kZWNvZGUoJmN0eCwgZW9jKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTkFUIHJvdXRpbmVzLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNOTVAgdHJhbnNsYXRpb24gcm91dGluZS4KKyAqLworc3RhdGljIGludCBzbm1wX3RyYW5zbGF0ZShzdHJ1Y3QgbmZfY29ubiAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCit7CisJc3RydWN0IGlwaGRyICppcGggPSAoKnBza2IpLT5uaC5pcGg7CisJc3RydWN0IHVkcGhkciAqdWRwaCA9IChzdHJ1Y3QgdWRwaGRyICopKChfX2JlMzIgKilpcGggKyBpcGgtPmlobCk7CisJdV9pbnQxNl90IHVkcGxlbiA9IG50b2hzKHVkcGgtPmxlbik7CisJdV9pbnQxNl90IHBheWxlbiA9IHVkcGxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXN0cnVjdCBvY3QxX21hcCBtYXA7CisKKwkvKgorCSAqIERldGVybWluZSBtYXBwcGluZyBmb3IgYXBwbGljYXRpb24gbGF5ZXIgYWRkcmVzc2VzIGJhc2VkCisJICogb24gTkFUIG1hbmlwdWxhdGlvbnMgZm9yIHRoZSBwYWNrZXQuCisJICovCisJaWYgKGRpciA9PSBJUF9DVF9ESVJfT1JJR0lOQUwpIHsKKwkJLyogU05BVCB0cmFwcyAqLworCQltYXAuZnJvbSA9IE5PQ1QxKCZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwKTsKKwkJbWFwLnRvID0gTk9DVDEoJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLmlwKTsKKwl9IGVsc2UgeworCQkvKiBETkFUIHJlcGxpZXMgKi8KKwkJbWFwLmZyb20gPSBOT0NUMSgmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51My5pcCk7CisJCW1hcC50byA9IE5PQ1QxKCZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcCk7CisJfQorCisJaWYgKG1hcC5mcm9tID09IG1hcC50bykKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCWlmICghc25tcF9wYXJzZV9tYW5nbGUoKHVuc2lnbmVkIGNoYXIgKil1ZHBoICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgcGF5bGVuLCAmbWFwLCAmdWRwaC0+Y2hlY2spKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJic2FsZzogcGFyc2VyIGZhaWxlZFxuIik7CisJCXJldHVybiBORl9EUk9QOworCX0KKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisvKiBXZSBkb24ndCBhY3R1YWxseSBzZXQgdXAgZXhwZWN0YXRpb25zLCBqdXN0IGFkanVzdCBpbnRlcm5hbCBJUAorICogYWRkcmVzc2VzIGlmIHRoaXMgaXMgYmVpbmcgTkFUdGVkICovCitzdGF0aWMgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJc3RydWN0IG5mX2Nvbm4gKmN0LAorCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXVuc2lnbmVkIGludCByZXQ7CisJc3RydWN0IGlwaGRyICppcGggPSAoKnBza2IpLT5uaC5pcGg7CisJc3RydWN0IHVkcGhkciAqdWRwaCA9IChzdHJ1Y3QgdWRwaGRyICopKCh1X2ludDMyX3QgKilpcGggKyBpcGgtPmlobCk7CisKKwkvKiBTTk1QIHJlcGxpZXMgYW5kIG9yaWdpbmF0aW5nIFNOTVAgdHJhcHMgZ2V0IG1hbmdsZWQgKi8KKwlpZiAodWRwaC0+c291cmNlID09IGh0b25zKFNOTVBfUE9SVCkgJiYgZGlyICE9IElQX0NUX0RJUl9SRVBMWSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwlpZiAodWRwaC0+ZGVzdCA9PSBodG9ucyhTTk1QX1RSQVBfUE9SVCkgJiYgZGlyICE9IElQX0NUX0RJUl9PUklHSU5BTCkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCS8qIE5vIE5BVD8gKi8KKwlpZiAoIShjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBwYWNrZXQgbGVuZ3RoIGlzIG9rLiAgU28gZmFyLCB3ZSB3ZXJlIG9ubHkgZ3VhcmFudGVlZAorCSAqIHRvIGhhdmUgYSB2YWxpZCBsZW5ndGggSVAgaGVhZGVyIHBsdXMgOCBieXRlcywgd2hpY2ggbWVhbnMgd2UgaGF2ZQorCSAqIGVub3VnaCByb29tIGZvciBhIFVEUCBoZWFkZXIuICBKdXN0IHZlcmlmeSB0aGUgVURQIGxlbmd0aCBmaWVsZCBzbyB3ZQorCSAqIGNhbiBtZXNzIGFyb3VuZCB3aXRoIHRoZSBwYXlsb2FkLgorCSAqLworCWlmIChudG9ocyh1ZHBoLT5sZW4pICE9ICgqcHNrYiktPmxlbiAtIChpcGgtPmlobCA8PCAyKSkgeworCQkgaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCSBwcmludGsoS0VSTl9XQVJOSU5HICJTTk1QOiBkcm9wcGluZyBtYWxmb3JtZWQgcGFja2V0ICIKKwkJCQkic3JjPSV1LiV1LiV1LiV1IGRzdD0ldS4ldS4ldS4ldVxuIiwKKwkJCQlOSVBRVUFEKGlwaC0+c2FkZHIpLCBOSVBRVUFEKGlwaC0+ZGFkZHIpKTsKKwkJIHJldHVybiBORl9EUk9QOworCX0KKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUocHNrYiwgKCpwc2tiKS0+bGVuKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlzcGluX2xvY2tfYmgoJnNubXBfbG9jayk7CisJcmV0ID0gc25tcF90cmFuc2xhdGUoY3QsIGN0aW5mbywgcHNrYik7CisJc3Bpbl91bmxvY2tfYmgoJnNubXBfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIHNubXBfaGVscGVyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm1heF9leHBlY3RlZAkJPSAwLAorCS50aW1lb3V0CQk9IDE4MCwKKwkubWUJCQk9IFRISVNfTU9EVUxFLAorCS5oZWxwCQkJPSBoZWxwLAorCS5uYW1lCQkJPSAic25tcCIsCisJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCisJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1BPUlQpLAorCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKKwkubWFzay5zcmMubDNudW0JCT0gMHhGRkZGLAorCS5tYXNrLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygweEZGRkYpLAorCS5tYXNrLmRzdC5wcm90b251bQk9IDB4RkYsCit9OworCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc25tcF90cmFwX2hlbHBlciBfX3JlYWRfbW9zdGx5ID0geworCS5tYXhfZXhwZWN0ZWQJCT0gMCwKKwkudGltZW91dAkJPSAxODAsCisJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkuaGVscAkJCT0gaGVscCwKKwkubmFtZQkJCT0gInNubXBfdHJhcCIsCisJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCisJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1RSQVBfUE9SVCksCisJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAorCS5tYXNrLnNyYy5sM251bQkJPSAweEZGRkYsCisJLm1hc2suc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRiksCisJLm1hc2suZHN0LnByb3RvbnVtCT0gMHhGRiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBzdHVmZi4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX19pbml0IG5mX25hdF9zbm1wX2Jhc2ljX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJnNubXBfaGVscGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZzbm1wX3RyYXBfaGVscGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnNubXBfaGVscGVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9zbm1wX2Jhc2ljX2Zpbmkodm9pZCkKK3sKKwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnNubXBfaGVscGVyKTsKKwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnNubXBfdHJhcF9oZWxwZXIpOworfQorCittb2R1bGVfaW5pdChuZl9uYXRfc25tcF9iYXNpY19pbml0KTsKK21vZHVsZV9leGl0KG5mX25hdF9zbm1wX2Jhc2ljX2ZpbmkpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDYwMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGE3YTQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3N0YW5kYWxvbmUuYwpAQCAtMCwwICsxLDQwNiBAQAorLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIEhPT0tOQU1FKGhvb2tudW0pICgoaG9va251bSkgPT0gTkZfSVBfUE9TVF9ST1VUSU5HID8gIlBPU1RfUk9VVElORyIgIFwKKwkJCSAgIDogKChob29rbnVtKSA9PSBORl9JUF9QUkVfUk9VVElORyA/ICJQUkVfUk9VVElORyIgXAorCQkJICAgICAgOiAoKGhvb2tudW0pID09IE5GX0lQX0xPQ0FMX09VVCA/ICJMT0NBTF9PVVQiICBcCisJCQkgICAgICAgICA6ICgoaG9va251bSkgPT0gTkZfSVBfTE9DQUxfSU4gPyAiTE9DQUxfSU4iICBcCisJCQkJICAgIDogIipFUlJPUioiKSkpCisKKyNpZmRlZiBDT05GSUdfWEZSTQorc3RhdGljIHZvaWQgbmF0X2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93aSAqZmwpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQ7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcjsKKwl1bnNpZ25lZCBsb25nIHN0YXR1c2JpdDsKKworCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CisJaWYgKGN0ID09IE5VTEwpCisJCXJldHVybjsKKwlkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJdCA9ICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGU7CisKKwlpZiAoZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCkKKwkJc3RhdHVzYml0ID0gSVBTX0RTVF9OQVQ7CisJZWxzZQorCQlzdGF0dXNiaXQgPSBJUFNfU1JDX05BVDsKKworCWlmIChjdC0+c3RhdHVzICYgc3RhdHVzYml0KSB7CisJCWZsLT5mbDRfZHN0ID0gdC0+ZHN0LnUzLmlwOworCQlpZiAodC0+ZHN0LnByb3RvbnVtID09IElQUFJPVE9fVENQIHx8CisJCSAgICB0LT5kc3QucHJvdG9udW0gPT0gSVBQUk9UT19VRFApCisJCQlmbC0+ZmxfaXBfZHBvcnQgPSB0LT5kc3QudS50Y3AucG9ydDsKKwl9CisKKwlzdGF0dXNiaXQgXj0gSVBTX05BVF9NQVNLOworCisJaWYgKGN0LT5zdGF0dXMgJiBzdGF0dXNiaXQpIHsKKwkJZmwtPmZsNF9zcmMgPSB0LT5zcmMudTMuaXA7CisJCWlmICh0LT5kc3QucHJvdG9udW0gPT0gSVBQUk9UT19UQ1AgfHwKKwkJICAgIHQtPmRzdC5wcm90b251bSA9PSBJUFBST1RPX1VEUCkKKwkJCWZsLT5mbF9pcF9zcG9ydCA9IHQtPnNyYy51LnRjcC5wb3J0OworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50CituZl9uYXRfZm4odW5zaWduZWQgaW50IGhvb2tudW0sCisJICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25uX25hdCAqbmF0OworCXN0cnVjdCBuZl9uYXRfaW5mbyAqaW5mbzsKKwkvKiBtYW5pcHR5cGUgPT0gU1JDIGZvciBwb3N0cm91dGluZy4gKi8KKwllbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSA9IEhPT0syTUFOSVAoaG9va251bSk7CisKKwkvKiBXZSBuZXZlciBzZWUgZnJhZ21lbnRzOiBjb25udHJhY2sgZGVmcmFncyBvbiBwcmUtcm91dGluZworCSAgIGFuZCBsb2NhbC1vdXQsIGFuZCBuZl9uYXRfb3V0IHByb3RlY3RzIHBvc3Qtcm91dGluZy4gKi8KKwlORl9DVF9BU1NFUlQoISgoKnBza2IpLT5uaC5pcGgtPmZyYWdfb2ZmCisJCSAgICAgICAmIGh0b25zKElQX01GfElQX09GRlNFVCkpKTsKKworCWN0ID0gbmZfY3RfZ2V0KCpwc2tiLCAmY3RpbmZvKTsKKwkvKiBDYW4ndCB0cmFjaz8gIEl0J3Mgbm90IGR1ZSB0byBzdHJlc3MsIG9yIGNvbm50cmFjayB3b3VsZAorCSAgIGhhdmUgZHJvcHBlZCBpdC4gIEhlbmNlIGl0J3MgdGhlIHVzZXIncyByZXNwb25zaWJpbHR5IHRvCisJICAgcGFja2V0IGZpbHRlciBpdCBvdXQsIG9yIGltcGxlbWVudCBjb25udHJhY2svTkFUIGZvciB0aGF0CisJICAgcHJvdG9jb2wuIDgpIC0tUlIgKi8KKwlpZiAoIWN0KSB7CisJCS8qIEV4Y2VwdGlvbjogSUNNUCByZWRpcmVjdCB0byBuZXcgY29ubmVjdGlvbiAobm90IGluCisgICAgICAgICAgICAgICAgICAgaGFzaCB0YWJsZSB5ZXQpLiAgV2UgbXVzdCBub3QgbGV0IHRoaXMgdGhyb3VnaCwgaW4KKyAgICAgICAgICAgICAgICAgICBjYXNlIHdlJ3JlIGRvaW5nIE5BVCB0byB0aGUgc2FtZSBuZXR3b3JrLiAqLworCQlpZiAoKCpwc2tiKS0+bmguaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKKwkJCXN0cnVjdCBpY21waGRyIF9oZHIsICpocDsKKworCQkJaHAgPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsCisJCQkJCQkoKnBza2IpLT5uaC5pcGgtPmlobCo0LAorCQkJCQkJc2l6ZW9mKF9oZHIpLCAmX2hkcik7CisJCQlpZiAoaHAgIT0gTlVMTCAmJgorCQkJICAgIGhwLT50eXBlID09IElDTVBfUkVESVJFQ1QpCisJCQkJcmV0dXJuIE5GX0RST1A7CisJCX0KKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisKKwkvKiBEb24ndCB0cnkgdG8gTkFUIGlmIHRoaXMgcGFja2V0IGlzIG5vdCBjb25udHJhY2tlZCAqLworCWlmIChjdCA9PSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCW5hdCA9IG5mY3RfbmF0KGN0KTsKKwlpZiAoIW5hdCkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlzd2l0Y2ggKGN0aW5mbykgeworCWNhc2UgSVBfQ1RfUkVMQVRFRDoKKwljYXNlIElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFk6CisJCWlmICgoKnBza2IpLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fSUNNUCkgeworCQkJaWYgKCFuZl9uYXRfaWNtcF9yZXBseV90cmFuc2xhdGlvbihjdCwgY3RpbmZvLAorCQkJCQkJCSAgIGhvb2tudW0sIHBza2IpKQorCQkJCXJldHVybiBORl9EUk9QOworCQkJZWxzZQorCQkJCXJldHVybiBORl9BQ0NFUFQ7CisJCX0KKwkJLyogRmFsbCB0aHJ1Li4uIChPbmx5IElDTVBzIGNhbiBiZSBJUF9DVF9JU19SRVBMWSkgKi8KKwljYXNlIElQX0NUX05FVzoKKwkJaW5mbyA9ICZuYXQtPmluZm87CisKKwkJLyogU2VlbiBpdCBiZWZvcmU/ICBUaGlzIGNhbiBoYXBwZW4gZm9yIGxvb3BiYWNrLCByZXRyYW5zLAorCQkgICBvciBsb2NhbCBwYWNrZXRzLi4gKi8KKwkJaWYgKCFuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsIG1hbmlwdHlwZSkpIHsKKwkJCXVuc2lnbmVkIGludCByZXQ7CisKKwkJCWlmICh1bmxpa2VseShuZl9jdF9pc19jb25maXJtZWQoY3QpKSkKKwkJCQkvKiBOQVQgbW9kdWxlIHdhcyBsb2FkZWQgbGF0ZSAqLworCQkJCXJldCA9IGFsbG9jX251bGxfYmluZGluZ19jb25maXJtZWQoY3QsIGluZm8sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rbnVtKTsKKwkJCWVsc2UgaWYgKGhvb2tudW0gPT0gTkZfSVBfTE9DQUxfSU4pCisJCQkJLyogTE9DQUxfSU4gaG9vayBkb2Vzbid0IGhhdmUgYSBjaGFpbiEgICovCisJCQkJcmV0ID0gYWxsb2NfbnVsbF9iaW5kaW5nKGN0LCBpbmZvLCBob29rbnVtKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBuZl9uYXRfcnVsZV9maW5kKHBza2IsIGhvb2tudW0sIGluLCBvdXQsCisJCQkJCQkgICAgICAgY3QsIGluZm8pOworCisJCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkgeworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0gZWxzZQorCQkJREVCVUdQKCJBbHJlYWR5IHNldHVwIG1hbmlwICVzIGZvciBjdCAlcFxuIiwKKwkJCSAgICAgICBtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQyA/ICJTUkMiIDogIkRTVCIsCisJCQkgICAgICAgY3QpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIEVTVEFCTElTSEVEICovCisJCU5GX0NUX0FTU0VSVChjdGluZm8gPT0gSVBfQ1RfRVNUQUJMSVNIRUQgfHwKKwkJCSAgICAgY3RpbmZvID09IChJUF9DVF9FU1RBQkxJU0hFRCtJUF9DVF9JU19SRVBMWSkpOworCQlpbmZvID0gJm5hdC0+aW5mbzsKKwl9CisKKwlORl9DVF9BU1NFUlQoaW5mbyk7CisJcmV0dXJuIG5mX25hdF9wYWNrZXQoY3QsIGN0aW5mbywgaG9va251bSwgcHNrYik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK25mX25hdF9pbih1bnNpZ25lZCBpbnQgaG9va251bSwKKyAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisgICAgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisgICAgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJdW5zaWduZWQgaW50IHJldDsKKwlfX2JlMzIgZGFkZHIgPSAoKnBza2IpLT5uaC5pcGgtPmRhZGRyOworCisJcmV0ID0gbmZfbmF0X2ZuKGhvb2tudW0sIHBza2IsIGluLCBvdXQsIG9rZm4pOworCWlmIChyZXQgIT0gTkZfRFJPUCAmJiByZXQgIT0gTkZfU1RPTEVOICYmCisJICAgIGRhZGRyICE9ICgqcHNrYiktPm5oLmlwaC0+ZGFkZHIpIHsKKwkJZHN0X3JlbGVhc2UoKCpwc2tiKS0+ZHN0KTsKKwkJKCpwc2tiKS0+ZHN0ID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbmZfbmF0X291dCh1bnNpZ25lZCBpbnQgaG9va251bSwKKwkgICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisjaWZkZWYgQ09ORklHX1hGUk0KKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgcmV0OworCisJLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCisJaWYgKCgqcHNrYiktPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpIHx8CisJICAgICgqcHNrYiktPm5oLmlwaC0+aWhsICogNCA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJcmV0ID0gbmZfbmF0X2ZuKGhvb2tudW0sIHBza2IsIGluLCBvdXQsIG9rZm4pOworI2lmZGVmIENPTkZJR19YRlJNCisJaWYgKHJldCAhPSBORl9EUk9QICYmIHJldCAhPSBORl9TVE9MRU4gJiYKKwkgICAgKGN0ID0gbmZfY3RfZ2V0KCpwc2tiLCAmY3RpbmZvKSkgIT0gTlVMTCkgeworCQllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCisJCWlmIChjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLmlwICE9CisJCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcAorCQkgICAgfHwgY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51LmFsbCAhPQorCQkgICAgICAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudS5hbGwKKwkJICAgICkKKwkJCXJldHVybiBpcF94ZnJtX21lX2hhcmRlcihwc2tiKSA9PSAwID8gcmV0IDogTkZfRFJPUDsKKwl9CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CituZl9uYXRfbG9jYWxfZm4odW5zaWduZWQgaW50IGhvb2tudW0sCisJCXN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQlpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY3Q7CisJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CisJdW5zaWduZWQgaW50IHJldDsKKworCS8qIHJvb3QgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLworCWlmICgoKnBza2IpLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAorCSAgICAoKnBza2IpLT5uaC5pcGgtPmlobCAqIDQgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCXJldCA9IG5mX25hdF9mbihob29rbnVtLCBwc2tiLCBpbiwgb3V0LCBva2ZuKTsKKwlpZiAocmV0ICE9IE5GX0RST1AgJiYgcmV0ICE9IE5GX1NUT0xFTiAmJgorCSAgICAoY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pKSAhPSBOVUxMKSB7CisJCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisKKwkJaWYgKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMuaXAgIT0KKwkJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLmlwCisjaWZkZWYgQ09ORklHX1hGUk0KKwkJICAgIHx8IGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudS5hbGwgIT0KKwkJICAgICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUuYWxsCisjZW5kaWYKKwkJICAgICkKKwkJCWlmIChpcF9yb3V0ZV9tZV9oYXJkZXIocHNrYiwgUlROX1VOU1BFQykpCisJCQkJcmV0ID0gTkZfRFJPUDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbmZfbmF0X2FkanVzdCh1bnNpZ25lZCBpbnQgaG9va251bSwKKwkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAorCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJY3QgPSBuZl9jdF9nZXQoKnBza2IsICZjdGluZm8pOworCWlmIChjdCAmJiB0ZXN0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKSkgeworCSAgICAgICAgREVCVUdQKCJuZl9uYXRfc3RhbmRhbG9uZTogYWRqdXN0aW5nIHNlcXVlbmNlIG51bWJlclxuIik7CisJICAgICAgICBpZiAoIW5mX25hdF9zZXFfYWRqdXN0KHBza2IsIGN0LCBjdGluZm8pKQorCSAgICAgICAgICAgICAgICByZXR1cm4gTkZfRFJPUDsKKwl9CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworLyogV2UgbXVzdCBiZSBhZnRlciBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBiZWZvcmUgcGFja2V0IGZpbHRlcmluZy4gKi8KKworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBuZl9uYXRfb3BzW10gPSB7CisJLyogQmVmb3JlIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBkZXN0aW5hdGlvbiAqLworCXsKKwkJLmhvb2sJCT0gbmZfbmF0X2luLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX1BSRV9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCwKKwl9LAorCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGNoYW5nZSBzb3VyY2UgKi8KKwl7CisJCS5ob29rCQk9IG5mX25hdF9vdXQsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLnBmCQk9IFBGX0lORVQsCisJCS5ob29rbnVtCT0gTkZfSVBfUE9TVF9ST1VUSU5HLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKKwl9LAorCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworCXsKKwkJLmhvb2sJCT0gbmZfbmF0X2FkanVzdCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9QT1NUX1JPVVRJTkcsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCwKKwl9LAorCS8qIEJlZm9yZSBwYWNrZXQgZmlsdGVyaW5nLCBjaGFuZ2UgZGVzdGluYXRpb24gKi8KKwl7CisJCS5ob29rCQk9IG5mX25hdF9sb2NhbF9mbiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9PVVQsCisJCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9OQVRfRFNULAorCX0sCisJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgY2hhbmdlIHNvdXJjZSAqLworCXsKKwkJLmhvb2sJCT0gbmZfbmF0X2ZuLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wZgkJPSBQRl9JTkVULAorCQkuaG9va251bQk9IE5GX0lQX0xPQ0FMX0lOLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQywKKwl9LAorCS8qIEFmdGVyIGNvbm50cmFjaywgYWRqdXN0IHNlcXVlbmNlIG51bWJlciAqLworCXsKKwkJLmhvb2sJCT0gbmZfbmF0X2FkanVzdCwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkucGYJCT0gUEZfSU5FVCwKKwkJLmhvb2tudW0JPSBORl9JUF9MT0NBTF9JTiwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TRVFfQURKVVNULAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZl9uYXRfc3RhbmRhbG9uZV9pbml0KHZvaWQpCit7CisJaW50IHNpemUsIHJldCA9IDA7CisKKwluZWVkX2Nvbm50cmFjaygpOworCisJc2l6ZSA9IEFMSUdOKHNpemVvZihzdHJ1Y3QgbmZfY29ubiksIF9fYWxpZ25vZl9fKHN0cnVjdCBuZl9jb25uX25hdCkpICsKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBuZl9jb25uX25hdCk7CisJcmV0ID0gbmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfTkFULCAibmZfbmF0OmJhc2UiLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm5mX25hdF9pbml0OiBVbmFibGUgdG8gY3JlYXRlIHNsYWIgY2FjaGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNpemUgPSBBTElHTihzaXplLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgbmZfY29ubl9oZWxwKSkgKworCSAgICAgICBzaXplb2Yoc3RydWN0IG5mX2Nvbm5faGVscCk7CisJcmV0ID0gbmZfY29ubnRyYWNrX3JlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfTkFUfE5GX0NUX0ZfSEVMUCwKKwkJCQkJICAibmZfbmF0OmhlbHAiLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm5mX25hdF9pbml0OiBVbmFibGUgdG8gY3JlYXRlIHNsYWIgY2FjaGVcbiIpOworCQlnb3RvIGNsZWFudXBfcmVnaXN0ZXJfY2FjaGU7CisJfQorI2lmZGVmIENPTkZJR19YRlJNCisJQlVHX09OKGlwX25hdF9kZWNvZGVfc2Vzc2lvbiAhPSBOVUxMKTsKKwlpcF9uYXRfZGVjb2RlX3Nlc3Npb24gPSBuYXRfZGVjb2RlX3Nlc3Npb247CisjZW5kaWYKKwlyZXQgPSBuZl9uYXRfcnVsZV9pbml0KCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJuZl9uYXRfaW5pdDogY2FuJ3Qgc2V0dXAgcnVsZXMuXG4iKTsKKwkJZ290byBjbGVhbnVwX2RlY29kZV9zZXNzaW9uOworCX0KKwlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhuZl9uYXRfb3BzLCBBUlJBWV9TSVpFKG5mX25hdF9vcHMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIm5mX25hdF9pbml0OiBjYW4ndCByZWdpc3RlciBob29rcy5cbiIpOworCQlnb3RvIGNsZWFudXBfcnVsZV9pbml0OworCX0KKwluZl9uYXRfbW9kdWxlX2lzX2xvYWRlZCA9IDE7CisJcmV0dXJuIHJldDsKKworIGNsZWFudXBfcnVsZV9pbml0OgorCW5mX25hdF9ydWxlX2NsZWFudXAoKTsKKyBjbGVhbnVwX2RlY29kZV9zZXNzaW9uOgorI2lmZGVmIENPTkZJR19YRlJNCisJaXBfbmF0X2RlY29kZV9zZXNzaW9uID0gTlVMTDsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKyNlbmRpZgorCW5mX2Nvbm50cmFja191bnJlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfTkFUfE5GX0NUX0ZfSEVMUCk7CisgY2xlYW51cF9yZWdpc3Rlcl9jYWNoZToKKwluZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9jYWNoZShORl9DVF9GX05BVCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF9zdGFuZGFsb25lX2Zpbmkodm9pZCkKK3sKKwluZl91bnJlZ2lzdGVyX2hvb2tzKG5mX25hdF9vcHMsIEFSUkFZX1NJWkUobmZfbmF0X29wcykpOworCW5mX25hdF9ydWxlX2NsZWFudXAoKTsKKwluZl9uYXRfbW9kdWxlX2lzX2xvYWRlZCA9IDA7CisjaWZkZWYgQ09ORklHX1hGUk0KKwlpcF9uYXRfZGVjb2RlX3Nlc3Npb24gPSBOVUxMOworCXN5bmNocm9uaXplX25ldCgpOworI2VuZGlmCisJLyogQ29ubnRyYWNrIGNhY2hlcyBhcmUgdW5yZWdpc3RlcmVkIGluIG5mX2Nvbm50cmFja19jbGVhbnVwICovCit9CisKK21vZHVsZV9pbml0KG5mX25hdF9zdGFuZGFsb25lX2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X3N0YW5kYWxvbmVfZmluaSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygiaXBfbmF0Iik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3RmdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfdGZ0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NjZiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3RmdHAuYwpAQCAtMCwwICsxLDUyIEBACisvKiAoQykgMjAwMS0yMDAyIE1hZ251cyBCb2RlbiA8bWJAb3phYmEubWluZS5udT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5oPgorCitNT0RVTEVfQVVUSE9SKCJNYWdudXMgQm9kZW4gPG1iQG96YWJhLm1pbmUubnU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRGVFAgTkFUIGhlbHBlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcF9uYXRfdGZ0cCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGhlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gZXhwLT5tYXN0ZXI7CisKKwlleHAtPnNhdmVkX3Byb3RvLnVkcC5wb3J0CisJCT0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy51LnVkcC5wb3J0OworCWV4cC0+ZGlyID0gSVBfQ1RfRElSX1JFUExZOworCWV4cC0+ZXhwZWN0Zm4gPSBuZl9uYXRfZm9sbG93X21hc3RlcjsKKwlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgIT0gMCkKKwkJcmV0dXJuIE5GX0RST1A7CisJcmV0dXJuIE5GX0FDQ0VQVDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX25hdF90ZnRwX2Zpbmkodm9pZCkKK3sKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3RmdHBfaG9vaywgTlVMTCk7CisJc3luY2hyb25pemVfcmN1KCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX25hdF90ZnRwX2luaXQodm9pZCkKK3sKKwlCVUdfT04ocmN1X2RlcmVmZXJlbmNlKG5mX25hdF90ZnRwX2hvb2spKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3RmdHBfaG9vaywgaGVscCk7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG5mX25hdF90ZnRwX2luaXQpOworbW9kdWxlX2V4aXQobmZfbmF0X3RmdHBfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9wcm9jLmMgYi9uZXQvaXB2NC9wcm9jLmMKaW5kZXggOWM2Y2JlMy4uY2Q4NzNkYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcHJvYy5jCisrKyBiL25ldC9pcHY0L3Byb2MuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bmV0L3VkcGxpdGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC02Niw2ICs2Nyw3IEBACiAJCSAgIHRjcF9kZWF0aF9yb3cudHdfY291bnQsIGF0b21pY19yZWFkKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpLAogCQkgICBhdG9taWNfcmVhZCgmdGNwX21lbW9yeV9hbGxvY2F0ZWQpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIlVEUDogaW51c2UgJWRcbiIsIGZvbGRfcHJvdF9pbnVzZSgmdWRwX3Byb3QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlVEUExJVEU6IGludXNlICVkXG4iLCBmb2xkX3Byb3RfaW51c2UoJnVkcGxpdGVfcHJvdCkpOwogCXNlcV9wcmludGYoc2VxLCAiUkFXOiBpbnVzZSAlZFxuIiwgZm9sZF9wcm90X2ludXNlKCZyYXdfcHJvdCkpOwogCXNlcV9wcmludGYoc2VxLCAgIkZSQUc6IGludXNlICVkIG1lbW9yeSAlZFxuIiwgaXBfZnJhZ19ucXVldWVzLAogCQkgICBhdG9taWNfcmVhZCgmaXBfZnJhZ19tZW0pKTsKQEAgLTMwNCw2ICszMDYsMTcgQEAKIAkJCSAgIGZvbGRfZmllbGQoKHZvaWQgKiopIHVkcF9zdGF0aXN0aWNzLCAKIAkJCQkgICAgICBzbm1wNF91ZHBfbGlzdFtpXS5lbnRyeSkpOwogCisJLyogdGhlIFVEUCBhbmQgVURQLUxpdGUgTUlCcyBhcmUgdGhlIHNhbWUgKi8KKwlzZXFfcHV0cyhzZXEsICJcblVkcExpdGU6Iik7CisJZm9yIChpID0gMDsgc25tcDRfdWRwX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiICVzIiwgc25tcDRfdWRwX2xpc3RbaV0ubmFtZSk7CisKKwlzZXFfcHV0cyhzZXEsICJcblVkcExpdGU6Iik7CisJZm9yIChpID0gMDsgc25tcDRfdWRwX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCisJCQkgICBmb2xkX2ZpZWxkKCh2b2lkICoqKSB1ZHBsaXRlX3N0YXRpc3RpY3MsCisJCQkJICAgICAgc25tcDRfdWRwX2xpc3RbaV0uZW50cnkpICAgICApOworCiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Jhdy5jIGIvbmV0L2lwdjQvcmF3LmMKaW5kZXggNWMzMWRlYS4uYTZjNjNiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcmF3LmMKKysrIGIvbmV0L2lwdjQvcmF3LmMKQEAgLTg1NCw4ICs4NTQsOCBAQAogc3RhdGljIF9faW5saW5lX18gY2hhciAqZ2V0X3Jhd19zb2NrKHN0cnVjdCBzb2NrICpzcCwgY2hhciAqdG1wYnVmLCBpbnQgaSkKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzcCk7Ci0JdW5zaWduZWQgaW50IGRlc3QgPSBpbmV0LT5kYWRkciwKLQkJICAgICBzcmMgPSBpbmV0LT5yY3Zfc2FkZHI7CisJX19iZTMyIGRlc3QgPSBpbmV0LT5kYWRkciwKKwkgICAgICAgc3JjID0gaW5ldC0+cmN2X3NhZGRyOwogCV9fdTE2IGRlc3RwID0gMCwKIAkgICAgICBzcmNwICA9IGluZXQtPm51bTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggOTI1ZWU0ZC4uOWYzOTI0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC01NjYsMTEgKzU2Niw5IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfa2V5cyhzdHJ1Y3QgZmxvd2kgKmZsMSwgc3RydWN0IGZsb3dpICpmbDIpCiB7Ci0JcmV0dXJuICgoZmwxLT5ubF91LmlwNF91LmRhZGRyIF4gZmwyLT5ubF91LmlwNF91LmRhZGRyKSB8Ci0JCShmbDEtPm5sX3UuaXA0X3Uuc2FkZHIgXiBmbDItPm5sX3UuaXA0X3Uuc2FkZHIpIHwKLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfRldNQVJLCi0JCShmbDEtPm5sX3UuaXA0X3UuZndtYXJrIF4gZmwyLT5ubF91LmlwNF91LmZ3bWFyaykgfAotI2VuZGlmCisJcmV0dXJuICgoX19mb3JjZSB1MzIpKChmbDEtPm5sX3UuaXA0X3UuZGFkZHIgXiBmbDItPm5sX3UuaXA0X3UuZGFkZHIpIHwKKwkJKGZsMS0+bmxfdS5pcDRfdS5zYWRkciBeIGZsMi0+bmxfdS5pcDRfdS5zYWRkcikpIHwKKwkJKGZsMS0+bWFyayBeIGZsMi0+bWFyaykgfAogCQkoKih1MTYgKikmZmwxLT5ubF91LmlwNF91LnRvcyBeCiAJCSAqKHUxNiAqKSZmbDItPm5sX3UuaXA0X3UudG9zKSB8CiAJCShmbDEtPm9pZiBeIGZsMi0+b2lmKSB8CkBAIC0xNjQzLDkgKzE2NDEsNyBAQAogCXJ0aC0+ZmwuZmw0X2RzdAk9IGRhZGRyOwogCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5mbC5mbDRfdG9zCT0gdG9zOwotI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKLQlydGgtPmZsLmZsNF9md21hcms9IHNrYi0+bmZtYXJrOwotI2VuZGlmCisJcnRoLT5mbC5tYXJrICAgID0gc2tiLT5tYXJrOwogCXJ0aC0+ZmwuZmw0X3NyYwk9IHNhZGRyOwogCXJ0aC0+cnRfc3JjCT0gc2FkZHI7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKQEAgLTE3ODksOSArMTc4NSw3IEBACiAJcnRoLT5mbC5mbDRfZHN0CT0gZGFkZHI7CiAJcnRoLT5ydF9kc3QJPSBkYWRkcjsKIAlydGgtPmZsLmZsNF90b3MJPSB0b3M7Ci0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSwotCXJ0aC0+ZmwuZmw0X2Z3bWFyaz0gc2tiLT5uZm1hcms7Ci0jZW5kaWYKKwlydGgtPmZsLm1hcmsgICAgPSBza2ItPm1hcms7CiAJcnRoLT5mbC5mbDRfc3JjCT0gc2FkZHI7CiAJcnRoLT5ydF9zcmMJPSBzYWRkcjsKIAlydGgtPnJ0X2dhdGV3YXkJPSBkYWRkcjsKQEAgLTE5MjAsMTAgKzE5MTQsOCBAQAogCQkJCQkuc2FkZHIgPSBzYWRkciwKIAkJCQkJLnRvcyA9IHRvcywKIAkJCQkJLnNjb3BlID0gUlRfU0NPUEVfVU5JVkVSU0UsCi0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSwotCQkJCQkuZndtYXJrID0gc2tiLT5uZm1hcmsKLSNlbmRpZgogCQkJCSAgICAgIH0gfSwKKwkJCSAgICAubWFyayA9IHNrYi0+bWFyaywKIAkJCSAgICAuaWlmID0gZGV2LT5pZmluZGV4IH07CiAJdW5zaWduZWQJZmxhZ3MgPSAwOwogCXUzMgkJaXRhZyA9IDA7CkBAIC0yMDM0LDkgKzIwMjYsNyBAQAogCXJ0aC0+ZmwuZmw0X2RzdAk9IGRhZGRyOwogCXJ0aC0+cnRfZHN0CT0gZGFkZHI7CiAJcnRoLT5mbC5mbDRfdG9zCT0gdG9zOwotI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKLQlydGgtPmZsLmZsNF9md21hcms9IHNrYi0+bmZtYXJrOwotI2VuZGlmCisJcnRoLT5mbC5tYXJrICAgID0gc2tiLT5tYXJrOwogCXJ0aC0+ZmwuZmw0X3NyYwk9IHNhZGRyOwogCXJ0aC0+cnRfc3JjCT0gc2FkZHI7CiAjaWZkZWYgQ09ORklHX05FVF9DTFNfUk9VVEUKQEAgLTIxMTMsOSArMjEwMyw3IEBACiAJCSAgICBydGgtPmZsLmZsNF9zcmMgPT0gc2FkZHIgJiYKIAkJICAgIHJ0aC0+ZmwuaWlmID09IGlpZiAmJgogCQkgICAgcnRoLT5mbC5vaWYgPT0gMCAmJgotI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKLQkJICAgIHJ0aC0+ZmwuZmw0X2Z3bWFyayA9PSBza2ItPm5mbWFyayAmJgotI2VuZGlmCisJCSAgICBydGgtPmZsLm1hcmsgPT0gc2tiLT5tYXJrICYmCiAJCSAgICBydGgtPmZsLmZsNF90b3MgPT0gdG9zKSB7CiAJCQlydGgtPnUuZHN0Lmxhc3R1c2UgPSBqaWZmaWVzOwogCQkJZHN0X2hvbGQoJnJ0aC0+dS5kc3QpOwpAQCAtMjIzOSw5ICsyMjI3LDcgQEAKIAlydGgtPmZsLmZsNF90b3MJPSB0b3M7CiAJcnRoLT5mbC5mbDRfc3JjCT0gb2xkZmxwLT5mbDRfc3JjOwogCXJ0aC0+Zmwub2lmCT0gb2xkZmxwLT5vaWY7Ci0jaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSwotCXJ0aC0+ZmwuZmw0X2Z3bWFyaz0gb2xkZmxwLT5mbDRfZndtYXJrOwotI2VuZGlmCisJcnRoLT5mbC5tYXJrICAgID0gb2xkZmxwLT5tYXJrOwogCXJ0aC0+cnRfZHN0CT0gZmwtPmZsNF9kc3Q7CiAJcnRoLT5ydF9zcmMJPSBmbC0+Zmw0X3NyYzsKIAlydGgtPnJ0X2lpZgk9IG9sZGZscC0+b2lmID8gOiBkZXZfb3V0LT5pZmluZGV4OwpAQCAtMjM4NSwxMCArMjM3MSw4IEBACiAJCQkJCS5zY29wZSA9ICgodG9zICYgUlRPX09OTElOSykgPwogCQkJCQkJICBSVF9TQ09QRV9MSU5LIDoKIAkJCQkJCSAgUlRfU0NPUEVfVU5JVkVSU0UpLAotI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKLQkJCQkJLmZ3bWFyayA9IG9sZGZscC0+Zmw0X2Z3bWFyawotI2VuZGlmCiAJCQkJICAgICAgfSB9LAorCQkJICAgIC5tYXJrID0gb2xkZmxwLT5tYXJrLAogCQkJICAgIC5paWYgPSBsb29wYmFja19kZXYuaWZpbmRleCwKIAkJCSAgICAub2lmID0gb2xkZmxwLT5vaWYgfTsKIAlzdHJ1Y3QgZmliX3Jlc3VsdCByZXM7CkBAIC0yNTgzLDkgKzI1NjcsNyBAQAogCQkgICAgcnRoLT5mbC5mbDRfc3JjID09IGZscC0+Zmw0X3NyYyAmJgogCQkgICAgcnRoLT5mbC5paWYgPT0gMCAmJgogCQkgICAgcnRoLT5mbC5vaWYgPT0gZmxwLT5vaWYgJiYKLSNpZmRlZiBDT05GSUdfSVBfUk9VVEVfRldNQVJLCi0JCSAgICBydGgtPmZsLmZsNF9md21hcmsgPT0gZmxwLT5mbDRfZndtYXJrICYmCi0jZW5kaWYKKwkJICAgIHJ0aC0+ZmwubWFyayA9PSBmbHAtPm1hcmsgJiYKIAkJICAgICEoKHJ0aC0+ZmwuZmw0X3RvcyBeIGZscC0+Zmw0X3RvcykgJgogCQkJICAgIChJUFRPU19SVF9NQVNLIHwgUlRPX09OTElOSykpKSB7CiAKQEAgLTI2NDcsNyArMjYyOSw4IEBACiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CiAJc3RydWN0IHJ0bXNnICpyOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCXN0cnVjdCBydGFfY2FjaGVpbmZvIGNpOworCWxvbmcgZXhwaXJlczsKKwl1MzIgaWQgPSAwLCB0cyA9IDAsIHRzYWdlID0gMCwgZXJyb3I7CiAKIAlubGggPSBubG1zZ19wdXQoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqciksIGZsYWdzKTsKIAlpZiAobmxoID09IE5VTEwpCkBAIC0yNjk0LDIwICsyNjc3LDEzIEBACiAJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIHJ0LT51LmRzdC5tZXRyaWNzKSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JY2kucnRhX2xhc3R1c2UJPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIHJ0LT51LmRzdC5sYXN0dXNlKTsKLQljaS5ydGFfdXNlZAk9IHJ0LT51LmRzdC5fX3VzZTsKLQljaS5ydGFfY2xudHJlZgk9IGF0b21pY19yZWFkKCZydC0+dS5kc3QuX19yZWZjbnQpOwotCWlmIChydC0+dS5kc3QuZXhwaXJlcykKLQkJY2kucnRhX2V4cGlyZXMgPSBqaWZmaWVzX3RvX2Nsb2NrX3QocnQtPnUuZHN0LmV4cGlyZXMgLSBqaWZmaWVzKTsKLQllbHNlCi0JCWNpLnJ0YV9leHBpcmVzID0gMDsKLQljaS5ydGFfZXJyb3IJPSBydC0+dS5kc3QuZXJyb3I7Ci0JY2kucnRhX2lkCT0gY2kucnRhX3RzID0gY2kucnRhX3RzYWdlID0gMDsKKwllcnJvciA9IHJ0LT51LmRzdC5lcnJvcjsKKwlleHBpcmVzID0gcnQtPnUuZHN0LmV4cGlyZXMgPyBydC0+dS5kc3QuZXhwaXJlcyAtIGppZmZpZXMgOiAwOwogCWlmIChydC0+cGVlcikgewotCQljaS5ydGFfaWQgPSBydC0+cGVlci0+aXBfaWRfY291bnQ7CisJCWlkID0gcnQtPnBlZXItPmlwX2lkX2NvdW50OwogCQlpZiAocnQtPnBlZXItPnRjcF90c19zdGFtcCkgewotCQkJY2kucnRhX3RzID0gcnQtPnBlZXItPnRjcF90czsKLQkJCWNpLnJ0YV90c2FnZSA9IHh0aW1lLnR2X3NlYyAtIHJ0LT5wZWVyLT50Y3BfdHNfc3RhbXA7CisJCQl0cyA9IHJ0LT5wZWVyLT50Y3BfdHM7CisJCQl0c2FnZSA9IHh0aW1lLnR2X3NlYyAtIHJ0LT5wZWVyLT50Y3BfdHNfc3RhbXA7CiAJCX0KIAl9CiAKQEAgLTI3MjYsNyArMjcwMiw3IEBACiAJCQkJfSBlbHNlIHsKIAkJCQkJaWYgKGVyciA9PSAtRU1TR1NJWkUpCiAJCQkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQkJCQkJY2kucnRhX2Vycm9yID0gZXJyOworCQkJCQllcnJvciA9IGVycjsKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZQpAQCAtMjczNCw3ICsyNzEwLDkgQEAKIAkJCU5MQV9QVVRfVTMyKHNrYiwgUlRBX0lJRiwgcnQtPmZsLmlpZik7CiAJfQogCi0JTkxBX1BVVChza2IsIFJUQV9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSk7CisJaWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsICZydC0+dS5kc3QsIGlkLCB0cywgdHNhZ2UsCisJCQkgICAgICAgZXhwaXJlcywgZXJyb3IpIDwgMCkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3luY29va2llcy5jIGIvbmV0L2lwdjQvc3luY29va2llcy5jCmluZGV4IDY2MWUwYTQuLjZiMTk1MzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5bmNvb2tpZXMuYworKysgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKQEAgLTM1LDIzICszNSwyMyBAQAogI2RlZmluZSBDT09LSUVCSVRTIDI0CS8qIFVwcGVyIGJpdHMgc3RvcmUgY291bnQgKi8KICNkZWZpbmUgQ09PS0lFTUFTSyAoKChfX3UzMikxIDw8IENPT0tJRUJJVFMpIC0gMSkKIAotc3RhdGljIHUzMiBjb29raWVfaGFzaCh1MzIgc2FkZHIsIHUzMiBkYWRkciwgdTMyIHNwb3J0LCB1MzIgZHBvcnQsCitzdGF0aWMgdTMyIGNvb2tpZV9oYXNoKF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCwKIAkJICAgICAgIHUzMiBjb3VudCwgaW50IGMpCiB7CiAJX191MzIgdG1wWzE2ICsgNSArIFNIQV9XT1JLU1BBQ0VfV09SRFNdOwogCiAJbWVtY3B5KHRtcCArIDMsIHN5bmNvb2tpZV9zZWNyZXRbY10sIHNpemVvZihzeW5jb29raWVfc2VjcmV0W2NdKSk7Ci0JdG1wWzBdID0gc2FkZHI7Ci0JdG1wWzFdID0gZGFkZHI7Ci0JdG1wWzJdID0gKHNwb3J0IDw8IDE2KSArIGRwb3J0OworCXRtcFswXSA9IChfX2ZvcmNlIHUzMilzYWRkcjsKKwl0bXBbMV0gPSAoX19mb3JjZSB1MzIpZGFkZHI7CisJdG1wWzJdID0gKChfX2ZvcmNlIHUzMilzcG9ydCA8PCAxNikgKyAoX19mb3JjZSB1MzIpZHBvcnQ7CiAJdG1wWzNdID0gY291bnQ7CiAJc2hhX3RyYW5zZm9ybSh0bXAgKyAxNiwgKF9fdTggKil0bXAsIHRtcCArIDE2ICsgNSk7CiAKIAlyZXR1cm4gdG1wWzE3XTsKIH0KIAotc3RhdGljIF9fdTMyIHNlY3VyZV90Y3Bfc3luX2Nvb2tpZShfX3UzMiBzYWRkciwgX191MzIgZGFkZHIsIF9fdTE2IHNwb3J0LAotCQkJCSAgIF9fdTE2IGRwb3J0LCBfX3UzMiBzc2VxLCBfX3UzMiBjb3VudCwKK3N0YXRpYyBfX3UzMiBzZWN1cmVfdGNwX3N5bl9jb29raWUoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBzcG9ydCwKKwkJCQkgICBfX2JlMTYgZHBvcnQsIF9fdTMyIHNzZXEsIF9fdTMyIGNvdW50LAogCQkJCSAgIF9fdTMyIGRhdGEpCiB7CiAJLyoKQEAgLTgwLDggKzgwLDggQEAKICAqICJtYXhkaWZmIiBpZiB0aGUgY3VycmVudCAocGFzc2VkLWluKSAiY291bnQiLiAgVGhlIHJldHVybiB2YWx1ZQogICogaXMgKF9fdTMyKS0xIGlmIHRoaXMgdGVzdCBmYWlscy4KICAqLwotc3RhdGljIF9fdTMyIGNoZWNrX3RjcF9zeW5fY29va2llKF9fdTMyIGNvb2tpZSwgX191MzIgc2FkZHIsIF9fdTMyIGRhZGRyLAotCQkJCSAgX191MTYgc3BvcnQsIF9fdTE2IGRwb3J0LCBfX3UzMiBzc2VxLAorc3RhdGljIF9fdTMyIGNoZWNrX3RjcF9zeW5fY29va2llKF9fdTMyIGNvb2tpZSwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJICBfX2JlMTYgc3BvcnQsIF9fYmUxNiBkcG9ydCwgX191MzIgc3NlcSwKIAkJCQkgIF9fdTMyIGNvdW50LCBfX3UzMiBtYXhkaWZmKQogewogCV9fdTMyIGRpZmY7CkBAIC0yMjAsNyArMjIwLDcgQEAKIAl9CiAJaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJdHJlcSA9IHRjcF9yc2socmVxKTsKLQl0cmVxLT5yY3ZfaXNuCQk9IGh0b25sKHNrYi0+aC50aC0+c2VxKSAtIDE7CisJdHJlcS0+cmN2X2lzbgkJPSBudG9obChza2ItPmgudGgtPnNlcSkgLSAxOwogCXRyZXEtPnNudF9pc24JCT0gY29va2llOyAKIAlyZXEtPm1zcwkJPSBtc3M7CiAgCWlyZXEtPnJtdF9wb3J0CQk9IHNrYi0+aC50aC0+c291cmNlOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAxNTA2MWIzLi5kZmNmNDdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMTI5LDYgKzEyOSw2NyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY190Y3BfYXZhaWxhYmxlX2Nvbmdlc3Rpb25fY29udHJvbChjdGxfdGFibGUgKmN0bCwKKwkJCQkJCSBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICogZmlscCwKKwkJCQkJCSB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCisJCQkJCQkgbG9mZl90ICpwcG9zKQoreworCWN0bF90YWJsZSB0YmwgPSB7IC5tYXhsZW4gPSBUQ1BfQ0FfQlVGX01BWCwgfTsKKwlpbnQgcmV0OworCisJdGJsLmRhdGEgPSBrbWFsbG9jKHRibC5tYXhsZW4sIEdGUF9VU0VSKTsKKwlpZiAoIXRibC5kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0Y3BfZ2V0X2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2wodGJsLmRhdGEsIFRDUF9DQV9CVUZfTUFYKTsKKwlyZXQgPSBwcm9jX2Rvc3RyaW5nKCZ0YmwsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWtmcmVlKHRibC5kYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2NfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY3RsX3RhYmxlICpjdGwsCisJCQkJCSAgIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLAorCQkJCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsCisJCQkJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwljdGxfdGFibGUgdGJsID0geyAubWF4bGVuID0gVENQX0NBX0JVRl9NQVggfTsKKwlpbnQgcmV0OworCisJdGJsLmRhdGEgPSBrbWFsbG9jKHRibC5tYXhsZW4sIEdGUF9VU0VSKTsKKwlpZiAoIXRibC5kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRjcF9nZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2wodGJsLmRhdGEsIHRibC5tYXhsZW4pOworCXJldCA9IHByb2NfZG9zdHJpbmcoJnRibCwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaWYgKHdyaXRlICYmIHJldCA9PSAwKQorCQlyZXQgPSB0Y3Bfc2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKHRibC5kYXRhKTsKKwlrZnJlZSh0YmwuZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdHJhdGVneV9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLAorCQkJCQkgICAgICAgaW50IG5sZW4sIHZvaWQgX191c2VyICpvbGR2YWwsCisJCQkJCSAgICAgICBzaXplX3QgX191c2VyICpvbGRsZW5wLAorCQkJCQkgICAgICAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbiwKKwkJCQkJICAgICAgIHZvaWQgKipjb250ZXh0KQoreworCWN0bF90YWJsZSB0YmwgPSB7IC5tYXhsZW4gPSBUQ1BfQ0FfQlVGX01BWCB9OworCWludCByZXQ7CisKKwl0YmwuZGF0YSA9IGttYWxsb2ModGJsLm1heGxlbiwgR0ZQX1VTRVIpOworCWlmICghdGJsLmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJdGNwX2dldF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sKHRibC5kYXRhLCB0YmwubWF4bGVuKTsKKwlyZXQgPSBzeXNjdGxfc3RyaW5nKCZ0YmwsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4sCisJCQkgICAgY29udGV4dCk7CisJaWYgKHJldCA9PSAwICYmIG5ld3ZhbCAmJiBuZXdsZW4pCisJCXJldCA9IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2wodGJsLmRhdGEpOworCWtmcmVlKHRibC5kYXRhKTsKKworCXJldHVybiByZXQ7CisKK30KKwogY3RsX3RhYmxlIGlwdjRfdGFibGVbXSA9IHsKICAgICAgICAgewogCQkuY3RsX25hbWUJPSBORVRfSVBWNF9UQ1BfVElNRVNUQU1QUywKQEAgLTczMSw2ICs3OTIsMjEgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYgLyogQ09ORklHX05FVExBQkVMICovCisJeworCQkuY3RsX25hbWUJPSBORVRfVENQX0FWQUlMX0NPTkdfQ09OVFJPTCwKKwkJLnByb2NuYW1lCT0gInRjcF9hdmFpbGFibGVfY29uZ2VzdGlvbl9jb250cm9sIiwKKwkJLm1heGxlbgkJPSBUQ1BfQ0FfQlVGX01BWCwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfdGNwX2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2wsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfQUxMT1dFRF9DT05HX0NPTlRST0wsCisJCS5wcm9jbmFtZQk9ICJ0Y3BfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2wiLAorCQkubWF4bGVuCQk9IFRDUF9DQV9CVUZfTUFYLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbCwKKwkJLnN0cmF0ZWd5CT0gJnN0cmF0ZWd5X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sLAorCX0sCiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggYzA1ZThlZC4uMDkwYzY5MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTI1OCw2ICsyNTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CkBAIC00NjIsMTEgKzQ2MywxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIHNrYl9lbnRhaWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlza2ItPmNzdW0gPSAwOwotCVRDUF9TS0JfQ0Ioc2tiKS0+c2VxID0gdHAtPndyaXRlX3NlcTsKLQlUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgPSB0cC0+d3JpdGVfc2VxOwotCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgPSBUQ1BDQl9GTEFHX0FDSzsKLQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCA9IDA7CisJc3RydWN0IHRjcF9za2JfY2IgKnRjYiA9IFRDUF9TS0JfQ0Ioc2tiKTsKKworCXNrYi0+Y3N1bSAgICA9IDA7CisJdGNiLT5zZXEgICAgID0gdGNiLT5lbmRfc2VxID0gdHAtPndyaXRlX3NlcTsKKwl0Y2ItPmZsYWdzICAgPSBUQ1BDQl9GTEFHX0FDSzsKKwl0Y2ItPnNhY2tlZCAgPSAwOwogCXNrYl9oZWFkZXJfcmVsZWFzZShza2IpOwogCV9fc2tiX3F1ZXVlX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKTsKIAlza19jaGFyZ2Vfc2tiKHNrLCBza2IpOwpAQCAtMTk0Miw2ICsxOTQ0LDEzIEBACiAJCX0KIAkJYnJlYWs7CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCWNhc2UgVENQX01ENVNJRzoKKwkJLyogUmVhZCB0aGUgSVAtPktleSBtYXBwaW5ncyBmcm9tIHVzZXJzcGFjZSAqLworCQllcnIgPSB0cC0+YWZfc3BlY2lmaWMtPm1kNV9wYXJzZShzaywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKyNlbmRpZgorCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCQlicmVhazsKQEAgLTIxNTQsNyArMjE2Myw3IEBACiAJc3RydWN0IHRjcGhkciAqdGg7CiAJdW5zaWduZWQgdGhsZW47CiAJdW5zaWduZWQgaW50IHNlcTsKLQl1bnNpZ25lZCBpbnQgZGVsdGE7CisJX19iZTMyIGRlbHRhOwogCXVuc2lnbmVkIGludCBvbGRsZW47CiAJdW5zaWduZWQgaW50IGxlbjsKIApAQCAtMjIwNyw3ICsyMjE2LDggQEAKIAlkbyB7CiAJCXRoLT5maW4gPSB0aC0+cHNoID0gMDsKIAotCQl0aC0+Y2hlY2sgPSB+Y3N1bV9mb2xkKHRoLT5jaGVjayArIGRlbHRhKTsKKwkJdGgtPmNoZWNrID0gfmNzdW1fZm9sZCgoX19mb3JjZSBfX3dzdW0pKChfX2ZvcmNlIHUzMil0aC0+Y2hlY2sgKworCQkJCSAgICAgICAoX19mb3JjZSB1MzIpZGVsdGEpKTsKIAkJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpCiAJCQl0aC0+Y2hlY2sgPSBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKHNrYi0+aC5yYXcsIHRobGVuLAogCQkJCQkJCSAgIHNrYi0+Y3N1bSkpOwpAQCAtMjIyMSw3ICsyMjMxLDggQEAKIAl9IHdoaWxlIChza2ItPm5leHQpOwogCiAJZGVsdGEgPSBodG9ubChvbGRsZW4gKyAoc2tiLT50YWlsIC0gc2tiLT5oLnJhdykgKyBza2ItPmRhdGFfbGVuKTsKLQl0aC0+Y2hlY2sgPSB+Y3N1bV9mb2xkKHRoLT5jaGVjayArIGRlbHRhKTsKKwl0aC0+Y2hlY2sgPSB+Y3N1bV9mb2xkKChfX2ZvcmNlIF9fd3N1bSkoKF9fZm9yY2UgdTMyKXRoLT5jaGVjayArCisJCQkJKF9fZm9yY2UgdTMyKWRlbHRhKSk7CiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpCiAJCXRoLT5jaGVjayA9IGNzdW1fZm9sZChjc3VtX3BhcnRpYWwoc2tiLT5oLnJhdywgdGhsZW4sCiAJCQkJCQkgICBza2ItPmNzdW0pKTsKQEAgLTIyMzEsNiArMjI0MiwxMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0wodGNwX3Rzb19zZWdtZW50KTsKIAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0Y3BfbWQ1c2lnX3VzZXJzOworc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfbWQ1c2lnX3Bvb2w7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKKworc3RhdGljIHZvaWQgX190Y3BfZnJlZV9tZDVzaWdfcG9vbChzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbCkKK3sKKwlpbnQgY3B1OworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqcCA9ICpwZXJfY3B1X3B0cihwb29sLCBjcHUpOworCQlpZiAocCkgeworCQkJaWYgKHAtPm1kNV9kZXNjLnRmbSkKKwkJCQljcnlwdG9fZnJlZV9oYXNoKHAtPm1kNV9kZXNjLnRmbSk7CisJCQlrZnJlZShwKTsKKwkJCXAgPSBOVUxMOworCQl9CisJfQorCWZyZWVfcGVyY3B1KHBvb2wpOworfQorCit2b2lkIHRjcF9mcmVlX21kNXNpZ19wb29sKHZvaWQpCit7CisJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKnBvb2wgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CisJaWYgKC0tdGNwX21kNXNpZ191c2VycyA9PSAwKSB7CisJCXBvb2wgPSB0Y3BfbWQ1c2lnX3Bvb2w7CisJCXRjcF9tZDVzaWdfcG9vbCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CisJaWYgKHBvb2wpCisJCV9fdGNwX2ZyZWVfbWQ1c2lnX3Bvb2wocG9vbCk7Cit9CisKK0VYUE9SVF9TWU1CT0wodGNwX2ZyZWVfbWQ1c2lnX3Bvb2wpOworCitzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKl9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHZvaWQpCit7CisJaW50IGNwdTsKKwlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbDsKKworCXBvb2wgPSBhbGxvY19wZXJjcHUoc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKTsKKwlpZiAoIXBvb2wpCisJCXJldHVybiBOVUxMOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICpwOworCQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7CisKKwkJcCA9IGt6YWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcCkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCSpwZXJfY3B1X3B0cihwb29sLCBjcHUpID0gcDsKKworCQloYXNoID0gY3J5cHRvX2FsbG9jX2hhc2goIm1kNSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCQlpZiAoIWhhc2ggfHwgSVNfRVJSKGhhc2gpKQorCQkJZ290byBvdXRfZnJlZTsKKworCQlwLT5tZDVfZGVzYy50Zm0gPSBoYXNoOworCX0KKwlyZXR1cm4gcG9vbDsKK291dF9mcmVlOgorCV9fdGNwX2ZyZWVfbWQ1c2lnX3Bvb2wocG9vbCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2wodm9pZCkKK3sKKwlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbDsKKwlpbnQgYWxsb2MgPSAwOworCityZXRyeToKKwlzcGluX2xvY2soJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKKwlwb29sID0gdGNwX21kNXNpZ19wb29sOworCWlmICh0Y3BfbWQ1c2lnX3VzZXJzKysgPT0gMCkgeworCQlhbGxvYyA9IDE7CisJCXNwaW5fdW5sb2NrKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CisJfSBlbHNlIGlmICghcG9vbCkgeworCQl0Y3BfbWQ1c2lnX3VzZXJzLS07CisJCXNwaW5fdW5sb2NrKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CisJCWNwdV9yZWxheCgpOworCQlnb3RvIHJldHJ5OworCX0gZWxzZQorCQlzcGluX3VubG9jaygmdGNwX21kNXNpZ19wb29sX2xvY2spOworCisJaWYgKGFsbG9jKSB7CisJCS8qIHdlIGNhbm5vdCBob2xkIHNwaW5sb2NrIGhlcmUgYmVjYXVzZSB0aGlzIG1heSBzbGVlcC4gKi8KKwkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKnAgPSBfX3RjcF9hbGxvY19tZDVzaWdfcG9vbCgpOworCQlzcGluX2xvY2soJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKKwkJaWYgKCFwKSB7CisJCQl0Y3BfbWQ1c2lnX3VzZXJzLS07CisJCQlzcGluX3VubG9jaygmdGNwX21kNXNpZ19wb29sX2xvY2spOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcG9vbCA9IHRjcF9tZDVzaWdfcG9vbDsKKwkJaWYgKHBvb2wpIHsKKwkJCS8qIG9vcHMsIGl0IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuICovCisJCQlzcGluX3VubG9jaygmdGNwX21kNXNpZ19wb29sX2xvY2spOworCQkJX190Y3BfZnJlZV9tZDVzaWdfcG9vbChwKTsKKwkJfSBlbHNlIHsKKwkJCXRjcF9tZDVzaWdfcG9vbCA9IHBvb2wgPSBwOworCQkJc3Bpbl91bmxvY2soJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKKwkJfQorCX0KKwlyZXR1cm4gcG9vbDsKK30KKworRVhQT1JUX1NZTUJPTCh0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2wpOworCitzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICpfX3RjcF9nZXRfbWQ1c2lnX3Bvb2woaW50IGNwdSkKK3sKKwlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcDsKKwlzcGluX2xvY2soJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKKwlwID0gdGNwX21kNXNpZ19wb29sOworCWlmIChwKQorCQl0Y3BfbWQ1c2lnX3VzZXJzKys7CisJc3Bpbl91bmxvY2soJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKKwlyZXR1cm4gKHAgPyAqcGVyX2NwdV9wdHIocCwgY3B1KSA6IE5VTEwpOworfQorCitFWFBPUlRfU1lNQk9MKF9fdGNwX2dldF9tZDVzaWdfcG9vbCk7CisKK3ZvaWQgX190Y3BfcHV0X21kNXNpZ19wb29sKHZvaWQpIHsKKwlfX3RjcF9mcmVlX21kNXNpZ19wb29sKHRjcF9tZDVzaWdfcG9vbCk7Cit9CisKK0VYUE9SVF9TWU1CT0woX190Y3BfcHV0X21kNXNpZ19wb29sKTsKKyNlbmRpZgorCiBleHRlcm4gdm9pZCBfX3NrYl9jYl90b29fc21hbGxfZm9yX3RjcChpbnQsIGludCk7CiBleHRlcm4gc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyB0Y3BfcmVubzsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggMWUyOTgyZi4uNWNhNzcyMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlzcGluX2xvY2soJnRjcF9jb25nX2xpc3RfbG9jayk7CiAJY2EgPSB0Y3BfY2FfZmluZChuYW1lKTsKICNpZmRlZiBDT05GSUdfS01PRAotCWlmICghY2EpIHsKKwlpZiAoIWNhICYmIGNhcGFibGUoQ0FQX1NZU19NT0RVTEUpKSB7CiAJCXNwaW5fdW5sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOwogCiAJCXJlcXVlc3RfbW9kdWxlKCJ0Y3BfJXMiLCBuYW1lKTsKQEAgLTEyMyw2ICsxMjMsNyBAQAogI2VuZGlmCiAKIAlpZiAoY2EpIHsKKwkJY2EtPm5vbl9yZXN0cmljdGVkID0gMTsJLyogZGVmYXVsdCBpcyBhbHdheXMgYWxsb3dlZCAqLwogCQlsaXN0X21vdmUoJmNhLT5saXN0LCAmdGNwX2NvbmdfbGlzdCk7CiAJCXJldCA9IDA7CiAJfQpAQCAtMTM5LDYgKzE0MCwyMiBAQAogbGF0ZV9pbml0Y2FsbCh0Y3BfY29uZ2VzdGlvbl9kZWZhdWx0KTsKIAogCisvKiBCdWlsZCBzdHJpbmcgd2l0aCBsaXN0IG9mIGF2YWlsYWJsZSBjb25nZXN0aW9uIGNvbnRyb2wgdmFsdWVzICovCit2b2lkIHRjcF9nZXRfYXZhaWxhYmxlX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpidWYsIHNpemVfdCBtYXhsZW4pCit7CisJc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7CisJc2l6ZV90IG9mZnMgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhLCAmdGNwX2NvbmdfbGlzdCwgbGlzdCkgeworCQlvZmZzICs9IHNucHJpbnRmKGJ1ZiArIG9mZnMsIG1heGxlbiAtIG9mZnMsCisJCQkJICIlcyVzIiwKKwkJCQkgb2ZmcyA9PSAwID8gIiIgOiAiICIsIGNhLT5uYW1lKTsKKworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKwogLyogR2V0IGN1cnJlbnQgZGVmYXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgKi8KIHZvaWQgdGNwX2dldF9kZWZhdWx0X2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpuYW1lKQogewpAQCAtMTUyLDYgKzE2OSw2NCBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCisvKiBCdWlsdCBsaXN0IG9mIG5vbi1yZXN0cmljdGVkIGNvbmdlc3Rpb24gY29udHJvbCB2YWx1ZXMgKi8KK3ZvaWQgdGNwX2dldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICpidWYsIHNpemVfdCBtYXhsZW4pCit7CisJc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7CisJc2l6ZV90IG9mZnMgPSAwOworCisJKmJ1ZiA9ICdcMCc7CisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNhLCAmdGNwX2NvbmdfbGlzdCwgbGlzdCkgeworCQlpZiAoIWNhLT5ub25fcmVzdHJpY3RlZCkKKwkJCWNvbnRpbnVlOworCQlvZmZzICs9IHNucHJpbnRmKGJ1ZiArIG9mZnMsIG1heGxlbiAtIG9mZnMsCisJCQkJICIlcyVzIiwKKwkJCQkgb2ZmcyA9PSAwID8gIiIgOiAiICIsIGNhLT5uYW1lKTsKKworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworLyogQ2hhbmdlIGxpc3Qgb2Ygbm9uLXJlc3RyaWN0ZWQgY29uZ2VzdGlvbiBjb250cm9sICovCitpbnQgdGNwX3NldF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbChjaGFyICp2YWwpCit7CisJc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7CisJY2hhciAqY2xvbmUsICpuYW1lOworCWludCByZXQgPSAwOworCisJY2xvbmUgPSBrc3RyZHVwKHZhbCwgR0ZQX1VTRVIpOworCWlmICghY2xvbmUpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrKCZ0Y3BfY29uZ19saXN0X2xvY2spOworCS8qIHBhc3MgMSBjaGVjayBmb3IgYmFkIGVudHJpZXMgKi8KKwl3aGlsZSAoKG5hbWUgPSBzdHJzZXAoJmNsb25lLCAiICIpKSAmJiAqbmFtZSkgeworCQljYSA9IHRjcF9jYV9maW5kKG5hbWUpOworCQlpZiAoIWNhKSB7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBwYXNzIDIgY2xlYXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShjYSwgJnRjcF9jb25nX2xpc3QsIGxpc3QpCisJCWNhLT5ub25fcmVzdHJpY3RlZCA9IDA7CisKKwkvKiBwYXNzIDMgbWFyayBhcyBhbGxvd2VkICovCisJd2hpbGUgKChuYW1lID0gc3Ryc2VwKCZ2YWwsICIgIikpICYmICpuYW1lKSB7CisJCWNhID0gdGNwX2NhX2ZpbmQobmFtZSk7CisJCVdBUk5fT04oIWNhKTsKKwkJaWYgKGNhKQorCQkJY2EtPm5vbl9yZXN0cmljdGVkID0gMTsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2soJnRjcF9jb25nX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisKIC8qIENoYW5nZSBjb25nZXN0aW9uIGNvbnRyb2wgZm9yIHNvY2tldCAqLwogaW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTE2MSwxMiArMjM2LDI1IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJY2EgPSB0Y3BfY2FfZmluZChuYW1lKTsKKwkvKiBubyBjaGFuZ2UgYXNraW5nIGZvciBleGlzdGluZyB2YWx1ZSAqLwogCWlmIChjYSA9PSBpY3NrLT5pY3NrX2NhX29wcykKIAkJZ290byBvdXQ7CiAKKyNpZmRlZiBDT05GSUdfS01PRAorCS8qIG5vdCBmb3VuZCBhdHRlbXB0IHRvIGF1dG9sb2FkIG1vZHVsZSAqLworCWlmICghY2EgJiYgY2FwYWJsZShDQVBfU1lTX01PRFVMRSkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJlcXVlc3RfbW9kdWxlKCJ0Y3BfJXMiLCBuYW1lKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQljYSA9IHRjcF9jYV9maW5kKG5hbWUpOworCX0KKyNlbmRpZgogCWlmICghY2EpCiAJCWVyciA9IC1FTk9FTlQ7CiAKKwllbHNlIGlmICghKGNhLT5ub25fcmVzdHJpY3RlZCB8fCBjYXBhYmxlKENBUF9ORVRfQURNSU4pKSkKKwkJZXJyID0gLUVQRVJNOworCiAJZWxzZSBpZiAoIXRyeV9tb2R1bGVfZ2V0KGNhLT5vd25lcikpCiAJCWVyciA9IC1FQlVTWTsKIApAQCAtMjY4LDYgKzM1Niw3IEBACiAKIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm8gPSB7CiAJLm5hbWUJCT0gInJlbm8iLAorCS5ub25fcmVzdHJpY3RlZCA9IDEsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5zc3RocmVzaAk9IHRjcF9yZW5vX3NzdGhyZXNoLAogCS5jb25nX2F2b2lkCT0gdGNwX3Jlbm9fY29uZ19hdm9pZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9odGNwLmMgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCmluZGV4IDI4M2JlM2MuLjc1Mzk4N2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9odGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwpAQCAtMjYsMTIgKzI2LDEyIEBACiAJdTMyCWFscGhhOwkJLyogRml4ZWQgcG9pbnQgYXJpdGgsIDw8IDcgKi8KIAl1OAliZXRhOyAgICAgICAgICAgLyogRml4ZWQgcG9pbnQgYXJpdGgsIDw8IDcgKi8KIAl1OAltb2Rlc3dpdGNoOyAgICAgLyogRGVsYXkgbW9kZXN3aXRjaCB1bnRpbCB3ZSBoYWQgYXQgbGVhc3Qgb25lIGNvbmdlc3Rpb24gZXZlbnQgKi8KLQl1MzIJbGFzdF9jb25nOwkvKiBUaW1lIHNpbmNlIGxhc3QgY29uZ2VzdGlvbiBldmVudCBlbmQgKi8KLQl1MzIJdW5kb19sYXN0X2Nvbmc7CiAJdTE2CXBrdHNfYWNrZWQ7CiAJdTMyCXBhY2tldGNvdW50OwogCXUzMgltaW5SVFQ7CiAJdTMyCW1heFJUVDsKKwl1MzIJbGFzdF9jb25nOwkvKiBUaW1lIHNpbmNlIGxhc3QgY29uZ2VzdGlvbiBldmVudCBlbmQgKi8KKwl1MzIJdW5kb19sYXN0X2Nvbmc7CiAKIAl1MzIJdW5kb19tYXhSVFQ7CiAJdTMyCXVuZG9fb2xkX21heEI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IGNmMDZhY2MuLjkzMDQwMzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC0yNjc3LDYgKzI2NzcsMTQgQEAKIAkJCQkJICAgb3B0X3J4LT5zYWNrX29rKSB7CiAJCQkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCA9IChwdHIgLSAyKSAtICh1bnNpZ25lZCBjaGFyICopdGg7CiAJCQkJCX0KKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCQkJCWNhc2UgVENQT1BUX01ENVNJRzoKKwkJCQkJLyoKKwkJCQkJICogVGhlIE1ENSBIYXNoIGhhcyBhbHJlYWR5IGJlZW4KKwkJCQkJICogY2hlY2tlZCAoc2VlIHRjcF92ezQsNn1fZG9fcmN2KCkpLgorCQkJCQkgKi8KKwkJCQkJYnJlYWs7CisjZW5kaWYKIAkgIAkJCX07CiAJICAJCQlwdHIrPW9wc2l6ZS0yOwogCSAgCQkJbGVuZ3RoLT1vcHNpemU7CkBAIC0zNzgyLDkgKzM3OTAsOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX190Y3BfY2hlY2tzdW1fY29tcGxldGVfdXNlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgX19zdW0xNiBfX3RjcF9jaGVja3N1bV9jb21wbGV0ZV91c2VyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgcmVzdWx0OworCV9fc3VtMTYgcmVzdWx0OwogCiAJaWYgKHNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC00MjMwLDYgKzQyMzgsOCBAQAogCQltYigpOwogCQl0Y3Bfc2V0X3N0YXRlKHNrLCBUQ1BfRVNUQUJMSVNIRUQpOwogCisJCXNlY3VyaXR5X2luZXRfY29ubl9lc3RhYmxpc2hlZChzaywgc2tiKTsKKwogCQkvKiBNYWtlIHN1cmUgc29ja2V0IGlzIHJvdXRlZCwgZm9yIGNvcnJlY3QgbWV0cmljcy4gICovCiAJCWljc2stPmljc2tfYWZfb3BzLT5yZWJ1aWxkX2hlYWRlcihzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDIyZWY4YmQuLmExMjIyZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNzgsNiArNzgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKwogaW50IHN5c2N0bF90Y3BfdHdfcmV1c2UgX19yZWFkX21vc3RseTsKIGludCBzeXNjdGxfdGNwX2xvd19sYXRlbmN5IF9fcmVhZF9tb3N0bHk7CiAKQEAgLTg5LDEwICs5MiwxOSBAQAogCiB2b2lkIHRjcF92NF9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqdGNwX3Y0X21kNV9kb19sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgX19iZTMyIGFkZHIpOworc3RhdGljIGludCB0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaChjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkJICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJICAgc3RydWN0IHRjcGhkciAqdGgsIGludCBwcm90b2NvbCwKKwkJCQkgICBpbnQgdGNwbGVuKTsKKyNlbmRpZgorCiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbyBfX2NhY2hlbGluZV9hbGlnbmVkIHRjcF9oYXNoaW5mbyA9IHsKLQkubGhhc2hfbG9jawk9IF9fUldfTE9DS19VTkxPQ0tFRCh0Y3BfaGFzaGluZm8ubGhhc2hfbG9jayksCi0JLmxoYXNoX3VzZXJzCT0gQVRPTUlDX0lOSVQoMCksCi0JLmxoYXNoX3dhaXQJPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUih0Y3BfaGFzaGluZm8ubGhhc2hfd2FpdCksCisJLmxoYXNoX2xvY2sgID0gX19SV19MT0NLX1VOTE9DS0VEKHRjcF9oYXNoaW5mby5saGFzaF9sb2NrKSwKKwkubGhhc2hfdXNlcnMgPSBBVE9NSUNfSU5JVCgwKSwKKwkubGhhc2hfd2FpdCAgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUih0Y3BfaGFzaGluZm8ubGhhc2hfd2FpdCksCiB9OwogCiBzdGF0aWMgaW50IHRjcF92NF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCkBAIC0xMTEsNyArMTIzLDcgQEAKIAlpbmV0X3VuaGFzaCgmdGNwX2hhc2hpbmZvLCBzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191MzIgdGNwX3Y0X2luaXRfc2VxdWVuY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBfX3UzMiB0Y3BfdjRfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiBzZWN1cmVfdGNwX3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwaC0+ZGFkZHIsCiAJCQkJCSAgc2tiLT5uaC5pcGgtPnNhZGRyLApAQCAtMjA1LDEzICsyMTcsMTQgQEAKIAlpZiAodGNwX2RlYXRoX3Jvdy5zeXNjdGxfdHdfcmVjeWNsZSAmJgogCSAgICAhdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgJiYgcnQtPnJ0X2RzdCA9PSBkYWRkcikgewogCQlzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnRfZ2V0X3BlZXIocnQpOwotCi0JCS8qIFZKJ3MgaWRlYS4gV2Ugc2F2ZSBsYXN0IHRpbWVzdGFtcCBzZWVuIGZyb20KLQkJICogdGhlIGRlc3RpbmF0aW9uIGluIHBlZXIgdGFibGUsIHdoZW4gZW50ZXJpbmcgc3RhdGUgVElNRS1XQUlUCi0JCSAqIGFuZCBpbml0aWFsaXplIHJ4X29wdC50c19yZWNlbnQgZnJvbSBpdCwgd2hlbiB0cnlpbmcgbmV3IGNvbm5lY3Rpb24uCisJCS8qCisJCSAqIFZKJ3MgaWRlYS4gV2Ugc2F2ZSBsYXN0IHRpbWVzdGFtcCBzZWVuIGZyb20KKwkJICogdGhlIGRlc3RpbmF0aW9uIGluIHBlZXIgdGFibGUsIHdoZW4gZW50ZXJpbmcgc3RhdGUKKwkJICogVElNRS1XQUlUICogYW5kIGluaXRpYWxpemUgcnhfb3B0LnRzX3JlY2VudCBmcm9tIGl0LAorCQkgKiB3aGVuIHRyeWluZyBuZXcgY29ubmVjdGlvbi4KIAkJICovCi0KLQkJaWYgKHBlZXIgJiYgcGVlci0+dGNwX3RzX3N0YW1wICsgVENQX1BBV1NfTVNMID49IHh0aW1lLnR2X3NlYykgeworCQlpZiAocGVlciAhPSBOVUxMICYmCisJCSAgICBwZWVyLT50Y3BfdHNfc3RhbXAgKyBUQ1BfUEFXU19NU0wgPj0geHRpbWUudHZfc2VjKSB7CiAJCQl0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCA9IHBlZXItPnRjcF90c19zdGFtcDsKIAkJCXRwLT5yeF9vcHQudHNfcmVjZW50ID0gcGVlci0+dGNwX3RzOwogCQl9CkBAIC0yMzYsNyArMjQ5LDggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWx1cmU7CiAKLQllcnIgPSBpcF9yb3V0ZV9uZXdwb3J0cygmcnQsIElQUFJPVE9fVENQLCBpbmV0LT5zcG9ydCwgaW5ldC0+ZHBvcnQsIHNrKTsKKwllcnIgPSBpcF9yb3V0ZV9uZXdwb3J0cygmcnQsIElQUFJPVE9fVENQLAorCQkJCWluZXQtPnNwb3J0LCBpbmV0LT5kcG9ydCwgc2spOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbHVyZTsKIApAQCAtMjYwLDcgKzI3NCwxMCBAQAogCXJldHVybiAwOwogCiBmYWlsdXJlOgotCS8qIFRoaXMgdW5oYXNoZXMgdGhlIHNvY2tldCBhbmQgcmVsZWFzZXMgdGhlIGxvY2FsIHBvcnQsIGlmIG5lY2Vzc2FyeS4gKi8KKwkvKgorCSAqIFRoaXMgdW5oYXNoZXMgdGhlIHNvY2tldCBhbmQgcmVsZWFzZXMgdGhlIGxvY2FsIHBvcnQsCisJICogaWYgbmVjZXNzYXJ5LgorCSAqLwogCXRjcF9zZXRfc3RhdGUoc2ssIFRDUF9DTE9TRSk7CiAJaXBfcnRfcHV0KHJ0KTsKIAlzay0+c2tfcm91dGVfY2FwcyA9IDA7CkBAIC00ODUsOCArNTAyLDkgQEAKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHNrYi0+aC50aDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCXRoLT5jaGVjayA9IH50Y3BfdjRfY2hlY2sodGgsIGxlbiwgaW5ldC0+c2FkZHIsIGluZXQtPmRhZGRyLCAwKTsKLQkJc2tiLT5jc3VtID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOworCQl0aC0+Y2hlY2sgPSB+dGNwX3Y0X2NoZWNrKHRoLCBsZW4sCisJCQkJCSAgaW5ldC0+c2FkZHIsIGluZXQtPmRhZGRyLCAwKTsKKwkJc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKIAl9IGVsc2UgewogCQl0aC0+Y2hlY2sgPSB0Y3BfdjRfY2hlY2sodGgsIGxlbiwgaW5ldC0+c2FkZHIsIGluZXQtPmRhZGRyLAogCQkJCQkgY3N1bV9wYXJ0aWFsKChjaGFyICopdGgsCkBAIC01MDgsNyArNTI2LDcgQEAKIAogCXRoLT5jaGVjayA9IDA7CiAJdGgtPmNoZWNrID0gfnRjcF92NF9jaGVjayh0aCwgc2tiLT5sZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIDApOwotCXNrYi0+Y3N1bSA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKKwlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTUyNiwxMSArNTQ0LDE5IEBACiAgKglFeGNlcHRpb246IHByZWNlZGVuY2UgdmlvbGF0aW9uLiBXZSBkbyBub3QgaW1wbGVtZW50IGl0IGluIGFueSBjYXNlLgogICovCiAKLXN0YXRpYyB2b2lkIHRjcF92NF9zZW5kX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCB0Y3BfdjRfc2VuZF9yZXNldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHRjcGhkciAqdGggPSBza2ItPmgudGg7Ci0Jc3RydWN0IHRjcGhkciBydGg7CisJc3RydWN0IHsKKwkJc3RydWN0IHRjcGhkciB0aDsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCQlfX2JlMzIgb3B0WyhUQ1BPTEVOX01ENVNJR19BTElHTkVEID4+IDIpXTsKKyNlbmRpZgorCX0gcmVwOwogCXN0cnVjdCBpcF9yZXBseV9hcmcgYXJnOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CisjZW5kaWYKIAogCS8qIE5ldmVyIHNlbmQgYSByZXNldCBpbiByZXNwb25zZSB0byBhIHJlc2V0LiAqLwogCWlmICh0aC0+cnN0KQpAQCAtNTQwLDI5ICs1NjYsNDkgQEAKIAkJcmV0dXJuOwogCiAJLyogU3dhcCB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUuICovCi0JbWVtc2V0KCZydGgsIDAsIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7Ci0JcnRoLmRlc3QgICA9IHRoLT5zb3VyY2U7Ci0JcnRoLnNvdXJjZSA9IHRoLT5kZXN0OwotCXJ0aC5kb2ZmICAgPSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLyA0OwotCXJ0aC5yc3QgICAgPSAxOworCW1lbXNldCgmcmVwLCAwLCBzaXplb2YocmVwKSk7CisJcmVwLnRoLmRlc3QgICA9IHRoLT5zb3VyY2U7CisJcmVwLnRoLnNvdXJjZSA9IHRoLT5kZXN0OworCXJlcC50aC5kb2ZmICAgPSBzaXplb2Yoc3RydWN0IHRjcGhkcikgLyA0OworCXJlcC50aC5yc3QgICAgPSAxOwogCiAJaWYgKHRoLT5hY2spIHsKLQkJcnRoLnNlcSA9IHRoLT5hY2tfc2VxOworCQlyZXAudGguc2VxID0gdGgtPmFja19zZXE7CiAJfSBlbHNlIHsKLQkJcnRoLmFjayA9IDE7Ci0JCXJ0aC5hY2tfc2VxID0gaHRvbmwobnRvaGwodGgtPnNlcSkgKyB0aC0+c3luICsgdGgtPmZpbiArCi0JCQkJICAgIHNrYi0+bGVuIC0gKHRoLT5kb2ZmIDw8IDIpKTsKKwkJcmVwLnRoLmFjayA9IDE7CisJCXJlcC50aC5hY2tfc2VxID0gaHRvbmwobnRvaGwodGgtPnNlcSkgKyB0aC0+c3luICsgdGgtPmZpbiArCisJCQkJICAgICAgIHNrYi0+bGVuIC0gKHRoLT5kb2ZmIDw8IDIpKTsKIAl9CiAKLQltZW1zZXQoJmFyZywgMCwgc2l6ZW9mIGFyZyk7Ci0JYXJnLmlvdlswXS5pb3ZfYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopJnJ0aDsKLQlhcmcuaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mIHJ0aDsKKwltZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOworCWFyZy5pb3ZbMF0uaW92X2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKSZyZXA7CisJYXJnLmlvdlswXS5pb3ZfbGVuICA9IHNpemVvZihyZXAudGgpOworCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwlrZXkgPSBzayA/IHRjcF92NF9tZDVfZG9fbG9va3VwKHNrLCBza2ItPm5oLmlwaC0+ZGFkZHIpIDogTlVMTDsKKwlpZiAoa2V5KSB7CisJCXJlcC5vcHRbMF0gPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfAorCQkJCSAgIChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJICAgKFRDUE9QVF9NRDVTSUcgPDwgOCkgfAorCQkJCSAgIFRDUE9MRU5fTUQ1U0lHKTsKKwkJLyogVXBkYXRlIGxlbmd0aCBhbmQgdGhlIGxlbmd0aCB0aGUgaGVhZGVyIHRoaW5rcyBleGlzdHMgKi8KKwkJYXJnLmlvdlswXS5pb3ZfbGVuICs9IFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQ7CisJCXJlcC50aC5kb2ZmID0gYXJnLmlvdlswXS5pb3ZfbGVuIC8gNDsKKworCQl0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaCgoX191OCAqKSZyZXAub3B0WzFdLAorCQkJCQlrZXksCisJCQkJCXNrYi0+bmguaXBoLT5kYWRkciwKKwkJCQkJc2tiLT5uaC5pcGgtPnNhZGRyLAorCQkJCQkmcmVwLnRoLCBJUFBST1RPX1RDUCwKKwkJCQkJYXJnLmlvdlswXS5pb3ZfbGVuKTsKKwl9CisjZW5kaWYKIAlhcmcuY3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChza2ItPm5oLmlwaC0+ZGFkZHIsCi0JCQkJICAgICAgc2tiLT5uaC5pcGgtPnNhZGRyLCAvKlhYWCovCisJCQkJICAgICAgc2tiLT5uaC5pcGgtPnNhZGRyLCAvKiBYWFggKi8KIAkJCQkgICAgICBzaXplb2Yoc3RydWN0IHRjcGhkciksIElQUFJPVE9fVENQLCAwKTsKIAlhcmcuY3N1bW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSAvIDI7CiAKLQlpcF9zZW5kX3JlcGx5KHRjcF9zb2NrZXQtPnNrLCBza2IsICZhcmcsIHNpemVvZiBydGgpOworCWlwX3NlbmRfcmVwbHkodGNwX3NvY2tldC0+c2ssIHNrYiwgJmFyZywgYXJnLmlvdlswXS5pb3ZfbGVuKTsKIAogCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9PVVRTRUdTKTsKIAlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfT1VUUlNUUyk7CkBAIC01NzIsMjggKzYxOCwzNyBAQAogICAgb3V0c2lkZSBzb2NrZXQgY29udGV4dCBpcyB1Z2x5LCBjZXJ0YWlubHkuIFdoYXQgY2FuIEkgZG8/CiAgKi8KIAotc3RhdGljIHZvaWQgdGNwX3Y0X3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXEsIHUzMiBhY2ssCitzdGF0aWMgdm9pZCB0Y3BfdjRfc2VuZF9hY2soc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0d3NrLAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXEsIHUzMiBhY2ssCiAJCQkgICAgdTMyIHdpbiwgdTMyIHRzKQogewogCXN0cnVjdCB0Y3BoZHIgKnRoID0gc2tiLT5oLnRoOwogCXN0cnVjdCB7CiAJCXN0cnVjdCB0Y3BoZHIgdGg7Ci0JCXUzMiB0c29wdFtUQ1BPTEVOX1RTVEFNUF9BTElHTkVEID4+IDJdOworCQlfX2JlMzIgb3B0WyhUQ1BPTEVOX1RTVEFNUF9BTElHTkVEID4+IDIpCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkJCSAgICsgKFRDUE9MRU5fTUQ1U0lHX0FMSUdORUQgPj4gMikKKyNlbmRpZgorCQkJXTsKIAl9IHJlcDsKIAlzdHJ1Y3QgaXBfcmVwbHlfYXJnIGFyZzsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5OworCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSB0d19rZXk7CisjZW5kaWYKIAogCW1lbXNldCgmcmVwLnRoLCAwLCBzaXplb2Yoc3RydWN0IHRjcGhkcikpOwotCW1lbXNldCgmYXJnLCAwLCBzaXplb2YgYXJnKTsKKwltZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOwogCiAJYXJnLmlvdlswXS5pb3ZfYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopJnJlcDsKIAlhcmcuaW92WzBdLmlvdl9sZW4gID0gc2l6ZW9mKHJlcC50aCk7CiAJaWYgKHRzKSB7Ci0JCXJlcC50c29wdFswXSA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfTk9QIDw8IDE2KSB8Ci0JCQkJICAgICAoVENQT1BUX1RJTUVTVEFNUCA8PCA4KSB8Ci0JCQkJICAgICBUQ1BPTEVOX1RJTUVTVEFNUCk7Ci0JCXJlcC50c29wdFsxXSA9IGh0b25sKHRjcF90aW1lX3N0YW1wKTsKLQkJcmVwLnRzb3B0WzJdID0gaHRvbmwodHMpOwotCQlhcmcuaW92WzBdLmlvdl9sZW4gPSBzaXplb2YocmVwKTsKKwkJcmVwLm9wdFswXSA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJICAgKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfAorCQkJCSAgIFRDUE9MRU5fVElNRVNUQU1QKTsKKwkJcmVwLm9wdFsxXSA9IGh0b25sKHRjcF90aW1lX3N0YW1wKTsKKwkJcmVwLm9wdFsyXSA9IGh0b25sKHRzKTsKKwkJYXJnLmlvdlswXS5pb3ZfbGVuID0gVENQT0xFTl9UU1RBTVBfQUxJR05FRDsKIAl9CiAKIAkvKiBTd2FwIHRoZSBzZW5kIGFuZCB0aGUgcmVjZWl2ZS4gKi8KQEAgLTYwNSw4ICs2NjAsNDQgQEAKIAlyZXAudGguYWNrICAgICA9IDE7CiAJcmVwLnRoLndpbmRvdyAgPSBodG9ucyh3aW4pOwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKgorCSAqIFRoZSBTS0IgaG9sZHMgYW4gaW1jb21pbmcgcGFja2V0LCBidXQgbWF5IG5vdCBoYXZlIGEgdmFsaWQgLT5zaworCSAqIHBvaW50ZXIuIFRoaXMgaXMgZXNwZWNpYWxseSB0aGUgY2FzZSB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhCisJICogVElNRV9XQUlUIGFjaywgYmVjYXVzZSB0aGUgc2sgc3RydWN0dXJlIGlzIGxvbmcgZ29uZSwgYW5kIG9ubHkKKwkgKiB0aGUgdGNwX3RpbWV3YWl0X3NvY2sgcmVtYWlucy4gU28gdGhlIG1kNSBrZXkgaXMgc3Rhc2hlZCBpbiB0aGF0CisJICogc3RydWN0dXJlLCBhbmQgd2UgdXNlIGl0IGluIHByZWZlcmVuY2UuICBJIGJlbGlldmUgdGhhdCAodHdzayB8fAorCSAqIHNrYi0+c2spIGhvbGRzIHRydWUsIGJ1dCB3ZSBwcm9ncmFtIGRlZmVuc2l2ZWx5LgorCSAqLworCWlmICghdHdzayAmJiBza2ItPnNrKSB7CisJCWtleSA9IHRjcF92NF9tZDVfZG9fbG9va3VwKHNrYi0+c2ssIHNrYi0+bmguaXBoLT5kYWRkcik7CisJfSBlbHNlIGlmICh0d3NrICYmIHR3c2stPnR3X21kNV9rZXlsZW4pIHsKKwkJdHdfa2V5LmtleSA9IHR3c2stPnR3X21kNV9rZXk7CisJCXR3X2tleS5rZXlsZW4gPSB0d3NrLT50d19tZDVfa2V5bGVuOworCQlrZXkgPSAmdHdfa2V5OworCX0gZWxzZQorCQlrZXkgPSBOVUxMOworCisJaWYgKGtleSkgeworCQlpbnQgb2Zmc2V0ID0gKHRzKSA/IDMgOiAwOworCisJCXJlcC5vcHRbb2Zmc2V0KytdID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKKwkJCQkJICAoVENQT1BUX05PUCA8PCAxNikgfAorCQkJCQkgIChUQ1BPUFRfTUQ1U0lHIDw8IDgpIHwKKwkJCQkJICBUQ1BPTEVOX01ENVNJRyk7CisJCWFyZy5pb3ZbMF0uaW92X2xlbiArPSBUQ1BPTEVOX01ENVNJR19BTElHTkVEOworCQlyZXAudGguZG9mZiA9IGFyZy5pb3ZbMF0uaW92X2xlbi80OworCisJCXRjcF92NF9kb19jYWxjX21kNV9oYXNoKChfX3U4ICopJnJlcC5vcHRbb2Zmc2V0XSwKKwkJCQkJa2V5LAorCQkJCQlza2ItPm5oLmlwaC0+ZGFkZHIsCisJCQkJCXNrYi0+bmguaXBoLT5zYWRkciwKKwkJCQkJJnJlcC50aCwgSVBQUk9UT19UQ1AsCisJCQkJCWFyZy5pb3ZbMF0uaW92X2xlbik7CisJfQorI2VuZGlmCiAJYXJnLmNzdW0gPSBjc3VtX3RjcHVkcF9ub2ZvbGQoc2tiLT5uaC5pcGgtPmRhZGRyLAotCQkJCSAgICAgIHNrYi0+bmguaXBoLT5zYWRkciwgLypYWFgqLworCQkJCSAgICAgIHNrYi0+bmguaXBoLT5zYWRkciwgLyogWFhYICovCiAJCQkJICAgICAgYXJnLmlvdlswXS5pb3ZfbGVuLCBJUFBST1RPX1RDUCwgMCk7CiAJYXJnLmNzdW1vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykgLyAyOwogCkBAIC02MTgsMTcgKzcwOSwyMCBAQAogc3RhdGljIHZvaWQgdGNwX3Y0X3RpbWV3YWl0X2FjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwotCWNvbnN0IHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAqdGNwdHcgPSB0Y3BfdHdzayhzayk7CisJc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0Y3B0dyA9IHRjcF90d3NrKHNrKTsKIAotCXRjcF92NF9zZW5kX2Fjayhza2IsIHRjcHR3LT50d19zbmRfbnh0LCB0Y3B0dy0+dHdfcmN2X254dCwKLQkJCXRjcHR3LT50d19yY3Zfd25kID4+IHR3LT50d19yY3Zfd3NjYWxlLCB0Y3B0dy0+dHdfdHNfcmVjZW50KTsKKwl0Y3BfdjRfc2VuZF9hY2sodGNwdHcsIHNrYiwgdGNwdHctPnR3X3NuZF9ueHQsIHRjcHR3LT50d19yY3Zfbnh0LAorCQkJdGNwdHctPnR3X3Jjdl93bmQgPj4gdHctPnR3X3Jjdl93c2NhbGUsCisJCQl0Y3B0dy0+dHdfdHNfcmVjZW50KTsKIAogCWluZXRfdHdza19wdXQodHcpOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfdjRfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQorc3RhdGljIHZvaWQgdGNwX3Y0X3JlcXNrX3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpCiB7Ci0JdGNwX3Y0X3NlbmRfYWNrKHNrYiwgdGNwX3JzayhyZXEpLT5zbnRfaXNuICsgMSwgdGNwX3JzayhyZXEpLT5yY3ZfaXNuICsgMSwgcmVxLT5yY3Zfd25kLAorCXRjcF92NF9zZW5kX2FjayhOVUxMLCBza2IsIHRjcF9yc2socmVxKS0+c250X2lzbiArIDEsCisJCQl0Y3BfcnNrKHJlcSktPnJjdl9pc24gKyAxLCByZXEtPnJjdl93bmQsCiAJCQlyZXEtPnRzX3JlY2VudCk7CiB9CiAKQEAgLTY2Miw4ICs3NTYsNyBAQAogCQllcnIgPSBpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc2tiLCBzaywgaXJlcS0+bG9jX2FkZHIsCiAJCQkJCSAgICBpcmVxLT5ybXRfYWRkciwKIAkJCQkJICAgIGlyZXEtPm9wdCk7Ci0JCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04pCi0JCQllcnIgPSAwOworCQllcnIgPSBuZXRfeG1pdF9ldmFsKGVycik7CiAJfQogCiBvdXQ6CkBAIC03MTUsNyArODA4LDQyMyBAQAogCXJldHVybiBkb3B0OwogfQogCi1zdHJ1Y3QgcmVxdWVzdF9zb2NrX29wcyB0Y3BfcmVxdWVzdF9zb2NrX29wcyA9IHsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworLyoKKyAqIFJGQzIzODUgTUQ1IGNoZWNrc3VtbWluZyByZXF1aXJlcyBhIG1hcHBpbmcgb2YKKyAqIElQIGFkZHJlc3MtPk1ENSBLZXkuCisgKiBXZSBuZWVkIHRvIG1haW50YWluIHRoZXNlIGluIHRoZSBzayBzdHJ1Y3R1cmUuCisgKi8KKworLyogRmluZCB0aGUgS2V5IHN0cnVjdHVyZSBmb3IgYW4gYWRkcmVzcy4gICovCitzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICoKKwkJCXRjcF92NF9tZDVfZG9fbG9va3VwKHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGFkZHIpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJaW50IGk7CisKKwlpZiAoIXRwLT5tZDVzaWdfaW5mbyB8fCAhdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNCkKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChpID0gMDsgaSA8IHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczQ7IGkrKykgeworCQlpZiAodHAtPm1kNXNpZ19pbmZvLT5rZXlzNFtpXS5hZGRyID09IGFkZHIpCisJCQlyZXR1cm4gKHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqKQorCQkJCQkJJnRwLT5tZDVzaWdfaW5mby0+a2V5czRbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKnRjcF92NF9tZDVfbG9va3VwKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJIHN0cnVjdCBzb2NrICphZGRyX3NrKQoreworCXJldHVybiB0Y3BfdjRfbWQ1X2RvX2xvb2t1cChzaywgaW5ldF9zayhhZGRyX3NrKS0+ZGFkZHIpOworfQorCitFWFBPUlRfU1lNQk9MKHRjcF92NF9tZDVfbG9va3VwKTsKKworc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqdGNwX3Y0X3JlcXNrX21kNV9sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgICAgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCXJldHVybiB0Y3BfdjRfbWQ1X2RvX2xvb2t1cChzaywgaW5ldF9yc2socmVxKS0+cm10X2FkZHIpOworfQorCisvKiBUaGlzIGNhbiBiZSBjYWxsZWQgb24gYSBuZXdseSBjcmVhdGVkIHNvY2tldCwgZnJvbSBvdGhlciBmaWxlcyAqLworaW50IHRjcF92NF9tZDVfZG9fYWRkKHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGFkZHIsCisJCSAgICAgIHU4ICpuZXdrZXksIHU4IG5ld2tleWxlbikKK3sKKwkvKiBBZGQgS2V5IHRvIHRoZSBsaXN0ICovCisJc3RydWN0IHRjcDRfbWQ1c2lnX2tleSAqa2V5OworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCB0Y3A0X21kNXNpZ19rZXkgKmtleXM7CisKKwlrZXkgPSAoc3RydWN0IHRjcDRfbWQ1c2lnX2tleSAqKXRjcF92NF9tZDVfZG9fbG9va3VwKHNrLCBhZGRyKTsKKwlpZiAoa2V5KSB7CisJCS8qIFByZS1leGlzdGluZyBlbnRyeSAtIGp1c3QgdXBkYXRlIHRoYXQgb25lLiAqLworCQlrZnJlZShrZXktPmtleSk7CisJCWtleS0+a2V5ID0gbmV3a2V5OworCQlrZXktPmtleWxlbiA9IG5ld2tleWxlbjsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvICptZDVzaWc7CisKKwkJaWYgKCF0cC0+bWQ1c2lnX2luZm8pIHsKKwkJCXRwLT5tZDVzaWdfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp0cC0+bWQ1c2lnX2luZm8pLAorCQkJCQkJICBHRlBfQVRPTUlDKTsKKwkJCWlmICghdHAtPm1kNXNpZ19pbmZvKSB7CisJCQkJa2ZyZWUobmV3a2V5KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCQlpZiAodGNwX2FsbG9jX21kNXNpZ19wb29sKCkgPT0gTlVMTCkgeworCQkJa2ZyZWUobmV3a2V5KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1kNXNpZyA9IHRwLT5tZDVzaWdfaW5mbzsKKworCQlpZiAobWQ1c2lnLT5hbGxvY2VkNCA9PSBtZDVzaWctPmVudHJpZXM0KSB7CisJCQlrZXlzID0ga21hbGxvYygoc2l6ZW9mKCprZXlzKSAqCisJCQkJICAgICAgICAobWQ1c2lnLT5lbnRyaWVzNCArIDEpKSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIWtleXMpIHsKKwkJCQlrZnJlZShuZXdrZXkpOworCQkJCXRjcF9mcmVlX21kNXNpZ19wb29sKCk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisKKwkJCWlmIChtZDVzaWctPmVudHJpZXM0KQorCQkJCW1lbWNweShrZXlzLCBtZDVzaWctPmtleXM0LAorCQkJCSAgICAgICBzaXplb2YoKmtleXMpICogbWQ1c2lnLT5lbnRyaWVzNCk7CisKKwkJCS8qIEZyZWUgb2xkIGtleSBsaXN0LCBhbmQgcmVmZXJlbmNlIG5ldyBvbmUgKi8KKwkJCWlmIChtZDVzaWctPmtleXM0KQorCQkJCWtmcmVlKG1kNXNpZy0+a2V5czQpOworCQkJbWQ1c2lnLT5rZXlzNCA9IGtleXM7CisJCQltZDVzaWctPmFsbG9jZWQ0Kys7CisJCX0KKwkJbWQ1c2lnLT5lbnRyaWVzNCsrOworCQltZDVzaWctPmtleXM0W21kNXNpZy0+ZW50cmllczQgLSAxXS5hZGRyICAgPSBhZGRyOworCQltZDVzaWctPmtleXM0W21kNXNpZy0+ZW50cmllczQgLSAxXS5rZXkgICAgPSBuZXdrZXk7CisJCW1kNXNpZy0+a2V5czRbbWQ1c2lnLT5lbnRyaWVzNCAtIDFdLmtleWxlbiA9IG5ld2tleWxlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0wodGNwX3Y0X21kNV9kb19hZGQpOworCitzdGF0aWMgaW50IHRjcF92NF9tZDVfYWRkX2Z1bmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29jayAqYWRkcl9zaywKKwkJCSAgICAgICB1OCAqbmV3a2V5LCB1OCBuZXdrZXlsZW4pCit7CisJcmV0dXJuIHRjcF92NF9tZDVfZG9fYWRkKHNrLCBpbmV0X3NrKGFkZHJfc2spLT5kYWRkciwKKwkJCQkgbmV3a2V5LCBuZXdrZXlsZW4pOworfQorCitpbnQgdGNwX3Y0X21kNV9kb19kZWwoc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgYWRkcikKK3sKKwlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM0OyBpKyspIHsKKwkJaWYgKHRwLT5tZDVzaWdfaW5mby0+a2V5czRbaV0uYWRkciA9PSBhZGRyKSB7CisJCQkvKiBGcmVlIHRoZSBrZXkgKi8KKwkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czRbaV0ua2V5KTsKKwkJCXRwLT5tZDVzaWdfaW5mby0+ZW50cmllczQtLTsKKworCQkJaWYgKHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczQgPT0gMCkgeworCQkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czQpOworCQkJCXRwLT5tZDVzaWdfaW5mby0+a2V5czQgPSBOVUxMOworCQkJfSBlbHNlIGlmICh0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM0ICE9IGkpIHsKKwkJCQkvKiBOZWVkIHRvIGRvIHNvbWUgbWFuaXB1bGF0aW9uICovCisJCQkJbWVtY3B5KCZ0cC0+bWQ1c2lnX2luZm8tPmtleXM0W2ldLAorCQkJCSAgICAgICAmdHAtPm1kNXNpZ19pbmZvLT5rZXlzNFtpKzFdLAorCQkJCSAgICAgICAodHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNCAtIGkpICoKKwkJCQkgICAgICAgIHNpemVvZihzdHJ1Y3QgdGNwNF9tZDVzaWdfa2V5KSk7CisJCQl9CisJCQl0Y3BfZnJlZV9tZDVzaWdfcG9vbCgpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK0VYUE9SVF9TWU1CT0wodGNwX3Y0X21kNV9kb19kZWwpOworCitzdGF0aWMgdm9pZCB0Y3BfdjRfY2xlYXJfbWQ1X2xpc3Qoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCisJLyogRnJlZSBlYWNoIGtleSwgdGhlbiB0aGUgc2V0IG9mIGtleSBrZXlzLAorCSAqIHRoZSBjcnlwdG8gZWxlbWVudCwgYW5kIHRoZW4gZGVjcmVtZW50IG91cgorCSAqIGhvbGQgb24gdGhlIGxhc3QgcmVzb3J0IGNyeXB0by4KKwkgKi8KKwlpZiAodHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczQ7IGkrKykKKwkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czRbaV0ua2V5KTsKKwkJdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNCA9IDA7CisJCXRjcF9mcmVlX21kNXNpZ19wb29sKCk7CisJfQorCWlmICh0cC0+bWQ1c2lnX2luZm8tPmtleXM0KSB7CisJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czQpOworCQl0cC0+bWQ1c2lnX2luZm8tPmtleXM0ID0gTlVMTDsKKwkJdHAtPm1kNXNpZ19pbmZvLT5hbGxvY2VkNCAgPSAwOworCX0KK30KKworc3RhdGljIGludCB0Y3BfdjRfcGFyc2VfbWQ1X2tleXMoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJCSBpbnQgb3B0bGVuKQoreworCXN0cnVjdCB0Y3BfbWQ1c2lnIGNtZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY21kLnRjcG1fYWRkcjsKKwl1OCAqbmV3a2V5OworCisJaWYgKG9wdGxlbiA8IHNpemVvZihjbWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBvcHR2YWwsIHNpemVvZihjbWQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFjbWQudGNwbV9rZXkgfHwgIWNtZC50Y3BtX2tleWxlbikgeworCQlpZiAoIXRjcF9zayhzayktPm1kNXNpZ19pbmZvKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCXJldHVybiB0Y3BfdjRfbWQ1X2RvX2RlbChzaywgc2luLT5zaW5fYWRkci5zX2FkZHIpOworCX0KKworCWlmIChjbWQudGNwbV9rZXlsZW4gPiBUQ1BfTUQ1U0lHX01BWEtFWUxFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRjcF9zayhzayktPm1kNXNpZ19pbmZvKSB7CisJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCQlzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvICpwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIXApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl0cC0+bWQ1c2lnX2luZm8gPSBwOworCisJfQorCisJbmV3a2V5ID0ga21lbWR1cChjbWQudGNwbV9rZXksIGNtZC50Y3BtX2tleWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdrZXkpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiB0Y3BfdjRfbWQ1X2RvX2FkZChzaywgc2luLT5zaW5fYWRkci5zX2FkZHIsCisJCQkJIG5ld2tleSwgY21kLnRjcG1fa2V5bGVuKTsKK30KKworc3RhdGljIGludCB0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaChjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkJICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJICAgc3RydWN0IHRjcGhkciAqdGgsIGludCBwcm90b2NvbCwKKwkJCQkgICBpbnQgdGNwbGVuKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1s0XTsKKwlfX3UxNiBkYXRhX2xlbjsKKwlpbnQgYmxvY2sgPSAwOworCV9fc3VtMTYgb2xkX2NoZWNrc3VtOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwOworCXN0cnVjdCB0Y3A0X3BzZXVkb2hkciAqYnA7CisJc3RydWN0IGhhc2hfZGVzYyAqZGVzYzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSAwOworCisJLyoKKwkgKiBPa2F5LCBzbyBSRkMyMzg1IGlzIHR1cm5lZCBvbiBmb3IgdGhpcyBjb25uZWN0aW9uLAorCSAqIHNvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIE1ENSBoYXNoIGZvciB0aGUgcGFja2V0IG5vdy4KKwkgKi8KKworCWhwID0gdGNwX2dldF9tZDVzaWdfcG9vbCgpOworCWlmICghaHApCisJCWdvdG8gY2xlYXJfaGFzaF9ub3B1dDsKKworCWJwID0gJmhwLT5tZDVfYmxrLmlwNDsKKwlkZXNjID0gJmhwLT5tZDVfZGVzYzsKKworCS8qCisJICogMS4gdGhlIFRDUCBwc2V1ZG8taGVhZGVyIChpbiB0aGUgb3JkZXI6IHNvdXJjZSBJUCBhZGRyZXNzLAorCSAqIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MsIHplcm8tcGFkZGVkIHByb3RvY29sIG51bWJlciwgYW5kCisJICogc2VnbWVudCBsZW5ndGgpCisJICovCisJYnAtPnNhZGRyID0gc2FkZHI7CisJYnAtPmRhZGRyID0gZGFkZHI7CisJYnAtPnBhZCA9IDA7CisJYnAtPnByb3RvY29sID0gcHJvdG9jb2w7CisJYnAtPmxlbiA9IGh0b25zKHRjcGxlbik7CisJc2dfc2V0X2J1Zigmc2dbYmxvY2srK10sIGJwLCBzaXplb2YoKmJwKSk7CisJbmJ5dGVzICs9IHNpemVvZigqYnApOworCisJLyogMi4gdGhlIFRDUCBoZWFkZXIsIGV4Y2x1ZGluZyBvcHRpb25zLCBhbmQgYXNzdW1pbmcgYQorCSAqIGNoZWNrc3VtIG9mIHplcm8vCisJICovCisJb2xkX2NoZWNrc3VtID0gdGgtPmNoZWNrOworCXRoLT5jaGVjayA9IDA7CisJc2dfc2V0X2J1Zigmc2dbYmxvY2srK10sIHRoLCBzaXplb2Yoc3RydWN0IHRjcGhkcikpOworCW5ieXRlcyArPSBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisKKwkvKiAzLiB0aGUgVENQIHNlZ21lbnQgZGF0YSAoaWYgYW55KSAqLworCWRhdGFfbGVuID0gdGNwbGVuIC0gKHRoLT5kb2ZmIDw8IDIpOworCWlmIChkYXRhX2xlbiA+IDApIHsKKwkJdW5zaWduZWQgY2hhciAqZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopdGggKyAodGgtPmRvZmYgPDwgMik7CisJCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCBkYXRhLCBkYXRhX2xlbik7CisJCW5ieXRlcyArPSBkYXRhX2xlbjsKKwl9CisKKwkvKiA0LiBhbiBpbmRlcGVuZGVudGx5LXNwZWNpZmllZCBrZXkgb3IgcGFzc3dvcmQsIGtub3duIHRvIGJvdGgKKwkgKiBUQ1BzIGFuZCBwcmVzdW1hYmx5IGNvbm5lY3Rpb24tc3BlY2lmaWMKKwkgKi8KKwlzZ19zZXRfYnVmKCZzZ1tibG9jaysrXSwga2V5LT5rZXksIGtleS0+a2V5bGVuKTsKKwluYnl0ZXMgKz0ga2V5LT5rZXlsZW47CisKKwkvKiBOb3cgc3RvcmUgdGhlIEhhc2ggaW50byB0aGUgcGFja2V0ICovCisJZXJyID0gY3J5cHRvX2hhc2hfaW5pdChkZXNjKTsKKwlpZiAoZXJyKQorCQlnb3RvIGNsZWFyX2hhc2g7CisJZXJyID0gY3J5cHRvX2hhc2hfdXBkYXRlKGRlc2MsIHNnLCBuYnl0ZXMpOworCWlmIChlcnIpCisJCWdvdG8gY2xlYXJfaGFzaDsKKwllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBtZDVfaGFzaCk7CisJaWYgKGVycikKKwkJZ290byBjbGVhcl9oYXNoOworCisJLyogUmVzZXQgaGVhZGVyLCBhbmQgZnJlZSB1cCB0aGUgY3J5cHRvICovCisJdGNwX3B1dF9tZDVzaWdfcG9vbCgpOworCXRoLT5jaGVjayA9IG9sZF9jaGVja3N1bTsKKworb3V0OgorCXJldHVybiAwOworY2xlYXJfaGFzaDoKKwl0Y3BfcHV0X21kNXNpZ19wb29sKCk7CitjbGVhcl9oYXNoX25vcHV0OgorCW1lbXNldChtZDVfaGFzaCwgMCwgMTYpOworCWdvdG8gb3V0OworfQorCitpbnQgdGNwX3Y0X2NhbGNfbWQ1X2hhc2goY2hhciAqbWQ1X2hhc2gsIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqa2V5LAorCQkJIHN0cnVjdCBzb2NrICpzaywKKwkJCSBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLAorCQkJIHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgcHJvdG9jb2wsCisJCQkgaW50IHRjcGxlbikKK3sKKwlfX2JlMzIgc2FkZHIsIGRhZGRyOworCisJaWYgKHNrKSB7CisJCXNhZGRyID0gaW5ldF9zayhzayktPnNhZGRyOworCQlkYWRkciA9IGluZXRfc2soc2spLT5kYWRkcjsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopZHN0OworCQlCVUdfT04oIXJ0KTsKKwkJc2FkZHIgPSBydC0+cnRfc3JjOworCQlkYWRkciA9IHJ0LT5ydF9kc3Q7CisJfQorCXJldHVybiB0Y3BfdjRfZG9fY2FsY19tZDVfaGFzaChtZDVfaGFzaCwga2V5LAorCQkJCSAgICAgICBzYWRkciwgZGFkZHIsCisJCQkJICAgICAgIHRoLCBwcm90b2NvbCwgdGNwbGVuKTsKK30KKworRVhQT1JUX1NZTUJPTCh0Y3BfdjRfY2FsY19tZDVfaGFzaCk7CisKK3N0YXRpYyBpbnQgdGNwX3Y0X2luYm91bmRfbWQ1X2hhc2goc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qCisJICogVGhpcyBnZXRzIGNhbGxlZCBmb3IgZWFjaCBUQ1Agc2VnbWVudCB0aGF0IGFycml2ZXMKKwkgKiBzbyB3ZSB3YW50IHRvIGJlIGVmZmljaWVudC4KKwkgKiBXZSBoYXZlIDMgZHJvcCBjYXNlczoKKwkgKiBvIE5vIE1ENSBoYXNoIGFuZCBvbmUgZXhwZWN0ZWQuCisJICogbyBNRDUgaGFzaCBhbmQgd2UncmUgbm90IGV4cGVjdGluZyBvbmUuCisJICogbyBNRDUgaGFzaCBhbmQgaXRzIHdyb25nLgorCSAqLworCV9fdTggKmhhc2hfbG9jYXRpb24gPSBOVUxMOworCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqaGFzaF9leHBlY3RlZDsKKwlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOworCXN0cnVjdCB0Y3BoZHIgKnRoID0gc2tiLT5oLnRoOworCWludCBsZW5ndGggPSAodGgtPmRvZmYgPDwgMikgLSBzaXplb2Yoc3RydWN0IHRjcGhkcik7CisJaW50IGdlbmhhc2g7CisJdW5zaWduZWQgY2hhciAqcHRyOworCXVuc2lnbmVkIGNoYXIgbmV3aGFzaFsxNl07CisKKwloYXNoX2V4cGVjdGVkID0gdGNwX3Y0X21kNV9kb19sb29rdXAoc2ssIGlwaC0+c2FkZHIpOworCisJLyoKKwkgKiBJZiB0aGUgVENQIG9wdGlvbiBsZW5ndGggaXMgbGVzcyB0aGFuIHRoZSBUQ1BfTUQ1U0lHCisJICogb3B0aW9uIGxlbmd0aCwgdGhlbiB3ZSBjYW4gc2hvcnRjdXQKKwkgKi8KKwlpZiAobGVuZ3RoIDwgVENQT0xFTl9NRDVTSUcpIHsKKwkJaWYgKGhhc2hfZXhwZWN0ZWQpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogT2theSwgd2UgY2FuJ3Qgc2hvcnRjdXQgLSB3ZSBoYXZlIHRvIGdydWIgdGhyb3VnaCB0aGUgb3B0aW9ucyAqLworCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopKHRoICsgMSk7CisJd2hpbGUgKGxlbmd0aCA+IDApIHsKKwkJaW50IG9wY29kZSA9ICpwdHIrKzsKKwkJaW50IG9wc2l6ZTsKKworCQlzd2l0Y2ggKG9wY29kZSkgeworCQljYXNlIFRDUE9QVF9FT0w6CisJCQlnb3RvIGRvbmVfb3B0czsKKwkJY2FzZSBUQ1BPUFRfTk9QOgorCQkJbGVuZ3RoLS07CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCW9wc2l6ZSA9ICpwdHIrKzsKKwkJCWlmIChvcHNpemUgPCAyKQorCQkJCWdvdG8gZG9uZV9vcHRzOworCQkJaWYgKG9wc2l6ZSA+IGxlbmd0aCkKKwkJCQlnb3RvIGRvbmVfb3B0czsKKworCQkJaWYgKG9wY29kZSA9PSBUQ1BPUFRfTUQ1U0lHKSB7CisJCQkJaGFzaF9sb2NhdGlvbiA9IHB0cjsKKwkJCQlnb3RvIGRvbmVfb3B0czsKKwkJCX0KKwkJfQorCQlwdHIgKz0gb3BzaXplLTI7CisJCWxlbmd0aCAtPSBvcHNpemU7CisJfQorZG9uZV9vcHRzOgorCS8qIFdlJ3ZlIHBhcnNlZCB0aGUgb3B0aW9ucyAtIGRvIHdlIGhhdmUgYSBoYXNoPyAqLworCWlmICghaGFzaF9leHBlY3RlZCAmJiAhaGFzaF9sb2NhdGlvbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaGFzaF9leHBlY3RlZCAmJiAhaGFzaF9sb2NhdGlvbikgeworCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIk1ENSBIYXNoIE5PVCBleHBlY3RlZCBidXQgZm91bmQgIgorCQkJICAgICAgICIoIiBOSVBRVUFEX0ZNVCAiLCAlZCktPigiIE5JUFFVQURfRk1UICIsICVkKVxuIiwKKwkJCSAgICAgICBOSVBRVUFEKGlwaC0+c2FkZHIpLCBudG9ocyh0aC0+c291cmNlKSwKKwkJCSAgICAgICBOSVBRVUFEKGlwaC0+ZGFkZHIpLCBudG9ocyh0aC0+ZGVzdCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoIWhhc2hfZXhwZWN0ZWQgJiYgaGFzaF9sb2NhdGlvbikgeworCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIk1ENSBIYXNoIE5PVCBleHBlY3RlZCBidXQgZm91bmQgIgorCQkJICAgICAgICIoIiBOSVBRVUFEX0ZNVCAiLCAlZCktPigiIE5JUFFVQURfRk1UICIsICVkKVxuIiwKKwkJCSAgICAgICBOSVBRVUFEKGlwaC0+c2FkZHIpLCBudG9ocyh0aC0+c291cmNlKSwKKwkJCSAgICAgICBOSVBRVUFEKGlwaC0+ZGFkZHIpLCBudG9ocyh0aC0+ZGVzdCkpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBPa2F5LCBzbyB0aGlzIGlzIGhhc2hfZXhwZWN0ZWQgYW5kIGhhc2hfbG9jYXRpb24gLQorCSAqIHNvIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBjaGVja3N1bS4KKwkgKi8KKwlnZW5oYXNoID0gdGNwX3Y0X2RvX2NhbGNfbWQ1X2hhc2gobmV3aGFzaCwKKwkJCQkJICBoYXNoX2V4cGVjdGVkLAorCQkJCQkgIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCSAgdGgsIHNrLT5za19wcm90b2NvbCwKKwkJCQkJICBza2ItPmxlbik7CisKKwlpZiAoZ2VuaGFzaCB8fCBtZW1jbXAoaGFzaF9sb2NhdGlvbiwgbmV3aGFzaCwgMTYpICE9IDApIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTUQ1IEhhc2ggZmFpbGVkIGZvciAiCisJCQkgICAgICAgIigiIE5JUFFVQURfRk1UICIsICVkKS0+KCIgTklQUVVBRF9GTVQgIiwgJWQpJXNcbiIsCisJCQkgICAgICAgTklQUVVBRChpcGgtPnNhZGRyKSwgbnRvaHModGgtPnNvdXJjZSksCisJCQkgICAgICAgTklQUVVBRChpcGgtPmRhZGRyKSwgbnRvaHModGgtPmRlc3QpLAorCQkJICAgICAgIGdlbmhhc2ggPyAiIHRjcF92NF9jYWxjX21kNV9oYXNoIGZhaWxlZCIgOiAiIik7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZmFtaWx5CQk9CVBGX0lORVQsCiAJLm9ial9zaXplCT0Jc2l6ZW9mKHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrKSwKIAkucnR4X3N5bl9hY2sJPQl0Y3BfdjRfc2VuZF9zeW5hY2ssCkBAIC03MjQsOSArMTIzMywxNiBAQAogCS5zZW5kX3Jlc2V0CT0JdGNwX3Y0X3NlbmRfcmVzZXQsCiB9OwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKK3N0YXRpYyBzdHJ1Y3QgdGNwX3JlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19pcHY0X29wcyA9IHsKKwkubWQ1X2xvb2t1cAk9CXRjcF92NF9yZXFza19tZDVfbG9va3VwLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHRpbWV3YWl0X3NvY2tfb3BzIHRjcF90aW1ld2FpdF9zb2NrX29wcyA9IHsKIAkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2spLAogCS50d3NrX3VuaXF1ZQk9IHRjcF90d3NrX3VuaXF1ZSwKKwkudHdza19kZXN0cnVjdG9yPSB0Y3BfdHdza19kZXN0cnVjdG9yLAogfTsKIAogaW50IHRjcF92NF9jb25uX3JlcXVlc3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNzc0LDYgKzEyOTAsMTAgQEAKIAlpZiAoIXJlcSkKIAkJZ290byBkcm9wOwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwl0Y3BfcnNrKHJlcSktPmFmX3NwZWNpZmljID0gJnRjcF9yZXF1ZXN0X3NvY2tfaXB2NF9vcHM7CisjZW5kaWYKKwogCXRjcF9jbGVhcl9vcHRpb25zKCZ0bXBfb3B0KTsKIAl0bXBfb3B0Lm1zc19jbGFtcCA9IDUzNjsKIAl0bXBfb3B0LnVzZXJfbXNzICA9IHRjcF9zayhzayktPnJ4X29wdC51c2VyX21zczsKQEAgLTg1OSw3ICsxMzc5LDcgQEAKIAkJCWdvdG8gZHJvcF9hbmRfZnJlZTsKIAkJfQogCi0JCWlzbiA9IHRjcF92NF9pbml0X3NlcXVlbmNlKHNrLCBza2IpOworCQlpc24gPSB0Y3BfdjRfaW5pdF9zZXF1ZW5jZShza2IpOwogCX0KIAl0Y3BfcnNrKHJlcSktPnNudF9pc24gPSBpc247CiAKQEAgLTg5Miw2ICsxNDEyLDkgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0OwogCXN0cnVjdCB0Y3Bfc29jayAqbmV3dHA7CiAJc3RydWN0IHNvY2sgKm5ld3NrOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CisjZW5kaWYKIAogCWlmIChza19hY2NlcHRxX2lzX2Z1bGwoc2spKQogCQlnb3RvIGV4aXRfb3ZlcmZsb3c7CkBAIC05MjYsNiArMTQ0OSwyMiBAQAogCW5ld3RwLT5hZHZtc3MgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpOwogCXRjcF9pbml0aWFsaXplX3Jjdl9tc3MobmV3c2spOwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKiBDb3B5IG92ZXIgdGhlIE1ENSBrZXkgZnJvbSB0aGUgb3JpZ2luYWwgc29ja2V0ICovCisJaWYgKChrZXkgPSB0Y3BfdjRfbWQ1X2RvX2xvb2t1cChzaywgbmV3aW5ldC0+ZGFkZHIpKSAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFdlJ3JlIHVzaW5nIG9uZSwgc28gY3JlYXRlIGEgbWF0Y2hpbmcga2V5CisJCSAqIG9uIHRoZSBuZXdzayBzdHJ1Y3R1cmUuIElmIHdlIGZhaWwgdG8gZ2V0CisJCSAqIG1lbW9yeSwgdGhlbiB3ZSBlbmQgdXAgbm90IGNvcHlpbmcgdGhlIGtleQorCQkgKiBhY3Jvc3MuIFNodWNrcy4KKwkJICovCisJCWNoYXIgKm5ld2tleSA9IGttZW1kdXAoa2V5LT5rZXksIGtleS0+a2V5bGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKG5ld2tleSAhPSBOVUxMKQorCQkJdGNwX3Y0X21kNV9kb19hZGQobmV3c2ssIGluZXRfc2soc2spLT5kYWRkciwKKwkJCQkJICBuZXdrZXksIGtleS0+a2V5bGVuKTsKKwl9CisjZW5kaWYKKwogCV9faW5ldF9oYXNoKCZ0Y3BfaGFzaGluZm8sIG5ld3NrLCAwKTsKIAlfX2luZXRfaW5oZXJpdF9wb3J0KCZ0Y3BfaGFzaGluZm8sIHNrLCBuZXdzayk7CiAKQEAgLTk3MSw3ICsxNTEwLDcgQEAKIAlyZXR1cm4gc2s7CiB9CiAKLXN0YXRpYyBpbnQgdGNwX3Y0X2NoZWNrc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBfX3N1bTE2IHRjcF92NF9jaGVja3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSB7CiAJCWlmICghdGNwX3Y0X2NoZWNrKHNrYi0+aC50aCwgc2tiLT5sZW4sIHNrYi0+bmguaXBoLT5zYWRkciwKQEAgLTEwMDEsMTAgKzE1NDAsMjQgQEAKICAqLwogaW50IHRjcF92NF9kb19yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBzb2NrICpyc2s7CisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKgorCSAqIFdlIHJlYWxseSB3YW50IHRvIHJlamVjdCB0aGUgcGFja2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlCisJICogaWY6CisJICogIG8gV2UncmUgZXhwZWN0aW5nIGFuIE1ENSdkIHBhY2tldCBhbmQgdGhpcyBpcyBubyBNRDUgdGNwIG9wdGlvbgorCSAqICBvIFRoZXJlIGlzIGFuIE1ENSBvcHRpb24gYW5kIHdlJ3JlIG5vdCBleHBlY3Rpbmcgb25lCisJICovCisJaWYgKHRjcF92NF9pbmJvdW5kX21kNV9oYXNoKHNrLCBza2IpKQorCQlnb3RvIGRpc2NhcmQ7CisjZW5kaWYKKwogCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKSB7IC8qIEZhc3QgcGF0aCAqLwogCQlUQ1BfQ0hFQ0tfVElNRVIoc2spOwotCQlpZiAodGNwX3Jjdl9lc3RhYmxpc2hlZChzaywgc2tiLCBza2ItPmgudGgsIHNrYi0+bGVuKSkKKwkJaWYgKHRjcF9yY3ZfZXN0YWJsaXNoZWQoc2ssIHNrYiwgc2tiLT5oLnRoLCBza2ItPmxlbikpIHsKKwkJCXJzayA9IHNrOwogCQkJZ290byByZXNldDsKKwkJfQogCQlUQ1BfQ0hFQ0tfVElNRVIoc2spOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMDE4LDIwICsxNTcxLDI0IEBACiAJCQlnb3RvIGRpc2NhcmQ7CiAKIAkJaWYgKG5zayAhPSBzaykgewotCQkJaWYgKHRjcF9jaGlsZF9wcm9jZXNzKHNrLCBuc2ssIHNrYikpCisJCQlpZiAodGNwX2NoaWxkX3Byb2Nlc3Moc2ssIG5zaywgc2tiKSkgeworCQkJCXJzayA9IG5zazsKIAkJCQlnb3RvIHJlc2V0OworCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKIAlUQ1BfQ0hFQ0tfVElNRVIoc2spOwotCWlmICh0Y3BfcmN2X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgc2tiLT5oLnRoLCBza2ItPmxlbikpCisJaWYgKHRjcF9yY3Zfc3RhdGVfcHJvY2Vzcyhzaywgc2tiLCBza2ItPmgudGgsIHNrYi0+bGVuKSkgeworCQlyc2sgPSBzazsKIAkJZ290byByZXNldDsKKwl9CiAJVENQX0NIRUNLX1RJTUVSKHNrKTsKIAlyZXR1cm4gMDsKIAogcmVzZXQ6Ci0JdGNwX3Y0X3NlbmRfcmVzZXQoc2tiKTsKKwl0Y3BfdjRfc2VuZF9yZXNldChyc2ssIHNrYik7CiBkaXNjYXJkOgogCWtmcmVlX3NrYihza2IpOwogCS8qIEJlIGNhcmVmdWwgaGVyZS4gSWYgdGhpcyBmdW5jdGlvbiBnZXRzIG1vcmUgY29tcGxpY2F0ZWQgYW5kCkBAIC0xMTQwLDcgKzE2OTcsNyBAQAogYmFkX3BhY2tldDoKIAkJVENQX0lOQ19TVEFUU19CSChUQ1BfTUlCX0lORVJSUyk7CiAJfSBlbHNlIHsKLQkJdGNwX3Y0X3NlbmRfcmVzZXQoc2tiKTsKKwkJdGNwX3Y0X3NlbmRfcmVzZXQoTlVMTCwgc2tiKTsKIAl9CiAKIGRpc2NhcmRfaXQ6CkBAIC0xMjYzLDYgKzE4MjAsMTUgQEAKICNlbmRpZgogfTsKIAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCitzdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY0X3NwZWNpZmljID0geworCS5tZDVfbG9va3VwCQk9IHRjcF92NF9tZDVfbG9va3VwLAorCS5jYWxjX21kNV9oYXNoCQk9IHRjcF92NF9jYWxjX21kNV9oYXNoLAorCS5tZDVfYWRkCQk9IHRjcF92NF9tZDVfYWRkX2Z1bmMsCisJLm1kNV9wYXJzZQkJPSB0Y3BfdjRfcGFyc2VfbWQ1X2tleXMsCit9OworI2VuZGlmCisKIC8qIE5PVEU6IEEgbG90IG9mIHRoaW5ncyBzZXQgdG8gemVybyBleHBsaWNpdGx5IGJ5IGNhbGwgdG8KICAqICAgICAgIHNrX2FsbG9jKCkgc28gbmVlZCBub3QgYmUgZG9uZSBoZXJlLgogICovCkBAIC0xMzAyLDYgKzE4NjgsOSBAQAogCiAJaWNzay0+aWNza19hZl9vcHMgPSAmaXB2NF9zcGVjaWZpYzsKIAlpY3NrLT5pY3NrX3N5bmNfbXNzID0gdGNwX3N5bmNfbXNzOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJdHAtPmFmX3NwZWNpZmljID0gJnRjcF9zb2NrX2lwdjRfc3BlY2lmaWM7CisjZW5kaWYKIAogCXNrLT5za19zbmRidWYgPSBzeXNjdGxfdGNwX3dtZW1bMV07CiAJc2stPnNrX3JjdmJ1ZiA9IHN5c2N0bF90Y3Bfcm1lbVsxXTsKQEAgLTEzMjUsNiArMTg5NCwxNSBAQAogCS8qIENsZWFucyB1cCBvdXIsIGhvcGVmdWxseSBlbXB0eSwgb3V0X29mX29yZGVyX3F1ZXVlLiAqLwogICAJX19za2JfcXVldWVfcHVyZ2UoJnRwLT5vdXRfb2Zfb3JkZXJfcXVldWUpOwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKiBDbGVhbiB1cCB0aGUgTUQ1IGtleSBsaXN0LCBpZiBhbnkgKi8KKwlpZiAodHAtPm1kNXNpZ19pbmZvKSB7CisJCXRjcF92NF9jbGVhcl9tZDVfbGlzdChzayk7CisJCWtmcmVlKHRwLT5tZDVzaWdfaW5mbyk7CisJCXRwLT5tZDVzaWdfaW5mbyA9IE5VTEw7CisJfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTkVUX0RNQQogCS8qIENsZWFucyB1cCBvdXIgc2tfYXN5bmNfd2FpdF9xdWV1ZSAqLwogICAJX19za2JfcXVldWVfcHVyZ2UoJnNrLT5za19hc3luY193YWl0X3F1ZXVlKTsKQEAgLTEzODUsNyArMTk2Myw3IEBACiAJaWYgKHN0LT5zdGF0ZSA9PSBUQ1BfU0VRX1NUQVRFX09QRU5SRVEpIHsKIAkJc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxID0gY3VyOwogCi0JICAgICAgIAlpY3NrID0gaW5ldF9jc2soc3QtPnN5bl93YWl0X3NrKTsKKwkJaWNzayA9IGluZXRfY3NrKHN0LT5zeW5fd2FpdF9zayk7CiAJCXJlcSA9IHJlcS0+ZGxfbmV4dDsKIAkJd2hpbGUgKDEpIHsKIAkJCXdoaWxlIChyZXEpIHsKQEAgLTEzOTUsNyArMTk3Myw3IEBACiAJCQkJfQogCQkJCXJlcSA9IHJlcS0+ZGxfbmV4dDsKIAkJCX0KLQkJCWlmICgrK3N0LT5zYnVja2V0ID49IFRDUF9TWU5RX0hTSVpFKQorCQkJaWYgKCsrc3QtPnNidWNrZXQgPj0gaWNzay0+aWNza19hY2NlcHRfcXVldWUubGlzdGVuX29wdC0+bnJfdGFibGVfZW50cmllcykKIAkJCQlicmVhazsKIGdldF9yZXE6CiAJCQlyZXEgPSBpY3NrLT5pY3NrX2FjY2VwdF9xdWV1ZS5saXN0ZW5fb3B0LT5zeW5fdGFibGVbc3QtPnNidWNrZXRdOwpAQCAtMTU0Myw3ICsyMTIxLDcgQEAKIAl3aGlsZSAocmMgJiYgcG9zKSB7CiAJCXJjID0gZXN0YWJsaXNoZWRfZ2V0X25leHQoc2VxLCByYyk7CiAJCS0tcG9zOwotCX0JCQorCX0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE2NzIsNyArMjI1MCw3IEBACiAJYWZpbmZvLT5zZXFfZm9wcy0+cmVhZAkJPSBzZXFfcmVhZDsKIAlhZmluZm8tPnNlcV9mb3BzLT5sbHNlZWsJPSBzZXFfbHNlZWs7CiAJYWZpbmZvLT5zZXFfZm9wcy0+cmVsZWFzZQk9IHNlcV9yZWxlYXNlX3ByaXZhdGU7Ci0JCisKIAlwID0gcHJvY19uZXRfZm9wc19jcmVhdGUoYWZpbmZvLT5uYW1lLCBTX0lSVUdPLCBhZmluZm8tPnNlcV9mb3BzKTsKIAlpZiAocCkKIAkJcC0+ZGF0YSA9IGFmaW5mbzsKQEAgLTE2ODYsNyArMjI2NCw3IEBACiAJaWYgKCFhZmluZm8pCiAJCXJldHVybjsKIAlwcm9jX25ldF9yZW1vdmUoYWZpbmZvLT5uYW1lKTsKLQltZW1zZXQoYWZpbmZvLT5zZXFfZm9wcywgMCwgc2l6ZW9mKCphZmluZm8tPnNlcV9mb3BzKSk7IAorCW1lbXNldChhZmluZm8tPnNlcV9mb3BzLCAwLCBzaXplb2YoKmFmaW5mby0+c2VxX2ZvcHMpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X29wZW5yZXE0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxLApAQCAtMTcyMSw4ICsyMjk5LDggQEAKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNwKTsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2NzayhzcCk7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc3ApOwotCXVuc2lnbmVkIGludCBkZXN0ID0gaW5ldC0+ZGFkZHI7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGluZXQtPnJjdl9zYWRkcjsKKwlfX2JlMzIgZGVzdCA9IGluZXQtPmRhZGRyOworCV9fYmUzMiBzcmMgPSBpbmV0LT5yY3Zfc2FkZHI7CiAJX191MTYgZGVzdHAgPSBudG9ocyhpbmV0LT5kcG9ydCk7CiAJX191MTYgc3JjcCA9IG50b2hzKGluZXQtPnNwb3J0KTsKIApAQCAtMTc0NCw3ICsyMzIyLDggQEAKIAkJCSIlMDhYICU1ZCAlOGQgJWx1ICVkICVwICV1ICV1ICV1ICV1ICVkIiwKIAkJaSwgc3JjLCBzcmNwLCBkZXN0LCBkZXN0cCwgc3AtPnNrX3N0YXRlLAogCQl0cC0+d3JpdGVfc2VxIC0gdHAtPnNuZF91bmEsCi0JCShzcC0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgPyBzcC0+c2tfYWNrX2JhY2tsb2cgOiAodHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcSksCisJCXNwLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOID8gc3AtPnNrX2Fja19iYWNrbG9nIDoKKwkJCQkJICAgICAodHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcSksCiAJCXRpbWVyX2FjdGl2ZSwKIAkJamlmZmllc190b19jbG9ja190KHRpbWVyX2V4cGlyZXMgLSBqaWZmaWVzKSwKIAkJaWNzay0+aWNza19yZXRyYW5zbWl0cywKQEAgLTE3NTksNyArMjMzOCw4IEBACiAJCXRwLT5zbmRfc3N0aHJlc2ggPj0gMHhGRkZGID8gLTEgOiB0cC0+c25kX3NzdGhyZXNoKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0X3RpbWV3YWl0NF9zb2NrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjaGFyICp0bXBidWYsIGludCBpKQorc3RhdGljIHZvaWQgZ2V0X3RpbWV3YWl0NF9zb2NrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LAorCQkJICAgICAgIGNoYXIgKnRtcGJ1ZiwgaW50IGkpCiB7CiAJX19iZTMyIGRlc3QsIHNyYzsKIAlfX3UxNiBkZXN0cCwgc3JjcDsKQEAgLTE4NzIsNyArMjQ1Miw4IEBACiAKIHZvaWQgX19pbml0IHRjcF92NF9pbml0KHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpvcHMpCiB7Ci0JaWYgKGluZXRfY3NrX2N0bF9zb2NrX2NyZWF0ZSgmdGNwX3NvY2tldCwgUEZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fVENQKSA8IDApCisJaWYgKGluZXRfY3NrX2N0bF9zb2NrX2NyZWF0ZSgmdGNwX3NvY2tldCwgUEZfSU5FVCwgU09DS19SQVcsCisJCQkJICAgICBJUFBST1RPX1RDUCkgPCAwKQogCQlwYW5pYygiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgVENQIGNvbnRyb2wgc29ja2V0LlxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCAwMTYzZDk4Li42ZGRkZjU5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC0zMDYsNiArMzA2LDI4IEBACiAJCQl0dy0+dHdfaXB2Nm9ubHkgPSBucC0+aXB2Nm9ubHk7CiAJCX0KICNlbmRpZgorCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkJLyoKKwkJICogVGhlIHRpbWV3YWl0IGJ1Y2tldCBkb2VzIG5vdCBoYXZlIHRoZSBrZXkgREIgZnJvbSB0aGUKKwkJICogc29jayBzdHJ1Y3R1cmUuIFdlIGp1c3QgbWFrZSBhIHF1aWNrIGNvcHkgb2YgdGhlCisJCSAqIG1kNSBrZXkgYmVpbmcgdXNlZCAoaWYgaW5kZWVkIHdlIGFyZSB1c2luZyBvbmUpCisJCSAqIHNvIHRoZSB0aW1ld2FpdCBhY2sgZ2VuZXJhdGluZyBjb2RlIGhhcyB0aGUga2V5LgorCQkgKi8KKwkJZG8geworCQkJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CisJCQltZW1zZXQodGNwdHctPnR3X21kNV9rZXksIDAsIHNpemVvZih0Y3B0dy0+dHdfbWQ1X2tleSkpOworCQkJdGNwdHctPnR3X21kNV9rZXlsZW4gPSAwOworCQkJa2V5ID0gdHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzayk7CisJCQlpZiAoa2V5ICE9IE5VTEwpIHsKKwkJCQltZW1jcHkoJnRjcHR3LT50d19tZDVfa2V5LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCQkJCXRjcHR3LT50d19tZDVfa2V5bGVuID0ga2V5LT5rZXlsZW47CisJCQkJaWYgKHRjcF9hbGxvY19tZDVzaWdfcG9vbCgpID09IE5VTEwpCisJCQkJCUJVRygpOworCQkJfQorCQl9IHdoaWxlKDApOworI2VuZGlmCisKIAkJLyogTGlua2FnZSB1cGRhdGVzLiAqLwogCQlfX2luZXRfdHdza19oYXNoZGFuY2UodHcsIHNrLCAmdGNwX2hhc2hpbmZvKTsKIApAQCAtMzI5LDE0ICszNTEsMjQgQEAKIAkJICogc29ja2V0IHVwLiAgV2UndmUgZ290IGJpZ2dlciBwcm9ibGVtcyB0aGFuCiAJCSAqIG5vbi1ncmFjZWZ1bCBzb2NrZXQgY2xvc2luZ3MuCiAJCSAqLwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVENQOiB0aW1lIHdhaXQgYnVja2V0IHRhYmxlIG92ZXJmbG93XG4iKTsKKwkJTElNSVRfTkVUREVCVUcoS0VSTl9JTkZPICJUQ1A6IHRpbWUgd2FpdCBidWNrZXQgdGFibGUgb3ZlcmZsb3dcbiIpOwogCX0KIAogCXRjcF91cGRhdGVfbWV0cmljcyhzayk7CiAJdGNwX2RvbmUoc2spOwogfQogCit2b2lkIHRjcF90d3NrX2Rlc3RydWN0b3Ioc3RydWN0IHNvY2sgKnNrKQoreworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0d3NrID0gdGNwX3R3c2soc2spOworCWlmICh0d3NrLT50d19tZDVfa2V5bGVuKQorCQl0Y3BfcHV0X21kNXNpZ19wb29sKCk7CisjZW5kaWYKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodGNwX3R3c2tfZGVzdHJ1Y3Rvcik7CisKIC8qIFRoaXMgaXMgbm90IG9ubHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3aGF0IHdlIHVzZWQgdG8gZG8sIGl0IGVsaW1pbmF0ZXMKICAqIGEgbG90IG9mIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiBJUHY0L0lQdjYgU1lOIHJlY3YgcHJvY2Vzc2luZy4gLURhdmVNCiAgKgpAQCAtNDM1LDYgKzQ2NywxMSBAQAogCQkJbmV3dHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgPSAwOwogCQkJbmV3dHAtPnRjcF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCQl9CisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkJbmV3dHAtPm1kNXNpZ19pbmZvID0gTlVMTDsJLypYWFgqLworCQlpZiAobmV3dHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBuZXdzaykpCisJCQluZXd0cC0+dGNwX2hlYWRlcl9sZW4gKz0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDsKKyNlbmRpZgogCQlpZiAoc2tiLT5sZW4gPj0gVENQX01JTl9SQ1ZNU1MrbmV3dHAtPnRjcF9oZWFkZXJfbGVuKQogCQkJbmV3aWNzay0+aWNza19hY2subGFzdF9zZWdfc2l6ZSA9IHNrYi0+bGVuIC0gbmV3dHAtPnRjcF9oZWFkZXJfbGVuOwogCQluZXd0cC0+cnhfb3B0Lm1zc19jbGFtcCA9IHJlcS0+bXNzOwpAQCAtNDU1LDcgKzQ5Miw3IEBACiAJCQkgICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICoqcHJldikKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHNrYi0+aC50aDsKLQl1MzIgZmxnID0gdGNwX2ZsYWdfd29yZCh0aCkgJiAoVENQX0ZMQUdfUlNUfFRDUF9GTEFHX1NZTnxUQ1BfRkxBR19BQ0spOworCV9fYmUzMiBmbGcgPSB0Y3BfZmxhZ193b3JkKHRoKSAmIChUQ1BfRkxBR19SU1R8VENQX0ZMQUdfU1lOfFRDUF9GTEFHX0FDSyk7CiAJaW50IHBhd3NfcmVqZWN0ID0gMDsKIAlzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgdG1wX29wdDsKIAlzdHJ1Y3Qgc29jayAqY2hpbGQ7CkBAIC02MTcsNiArNjU0LDMwIEBACiAJCQkJCQkJCSByZXEsIE5VTEwpOwogCQlpZiAoY2hpbGQgPT0gTlVMTCkKIAkJCWdvdG8gbGlzdGVuX292ZXJmbG93OworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJCWVsc2UgeworCQkJLyogQ29weSBvdmVyIHRoZSBNRDUga2V5IGZyb20gdGhlIG9yaWdpbmFsIHNvY2tldCAqLworCQkJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CisJCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwkJCWtleSA9IHRwLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgY2hpbGQpOworCQkJaWYgKGtleSAhPSBOVUxMKSB7CisJCQkJLyoKKwkJCQkgKiBXZSdyZSB1c2luZyBvbmUsIHNvIGNyZWF0ZSBhIG1hdGNoaW5nIGtleSBvbiB0aGUKKwkJCQkgKiBuZXdzayBzdHJ1Y3R1cmUuIElmIHdlIGZhaWwgdG8gZ2V0IG1lbW9yeSB0aGVuIHdlCisJCQkJICogZW5kIHVwIG5vdCBjb3B5aW5nIHRoZSBrZXkgYWNyb3NzLiBTaHVja3MuCisJCQkJICovCisJCQkJY2hhciAqbmV3a2V5ID0ga21lbWR1cChrZXktPmtleSwga2V5LT5rZXlsZW4sCisJCQkJCQkgICAgICAgR0ZQX0FUT01JQyk7CisJCQkJaWYgKG5ld2tleSkgeworCQkJCQlpZiAoIXRjcF9hbGxvY19tZDVzaWdfcG9vbCgpKQorCQkJCQkJQlVHKCk7CisJCQkJCXRwLT5hZl9zcGVjaWZpYy0+bWQ1X2FkZChjaGlsZCwgY2hpbGQsCisJCQkJCQkJCSBuZXdrZXksCisJCQkJCQkJCSBrZXktPmtleWxlbik7CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYKIAogCQlpbmV0X2Nza19yZXFza19xdWV1ZV91bmxpbmsoc2ssIHJlcSwgcHJldik7CiAJCWluZXRfY3NrX3JlcXNrX3F1ZXVlX3JlbW92ZWQoc2ssIHJlcSk7CkBAIC02MzMsNyArNjk0LDcgQEAKIAllbWJyeW9uaWNfcmVzZXQ6CiAJCU5FVF9JTkNfU1RBVFNfQkgoTElOVVhfTUlCX0VNQlJZT05JQ1JTVFMpOwogCQlpZiAoIShmbGcgJiBUQ1BfRkxBR19SU1QpKQotCQkJcmVxLT5yc2tfb3BzLT5zZW5kX3Jlc2V0KHNrYik7CisJCQlyZXEtPnJza19vcHMtPnNlbmRfcmVzZXQoc2ssIHNrYik7CiAKIAkJaW5ldF9jc2tfcmVxc2tfcXVldWVfZHJvcChzaywgcmVxLCBwcmV2KTsKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggY2E0MDYxNS4uMzJjMWE5NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHRjcF9idWlsZF9hbmRfdXBkYXRlX29wdGlvbnMoX19iZTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsCi0JCQkJCSBfX3UzMiB0c3RhbXApCisJCQkJCSBfX3UzMiB0c3RhbXAsIF9fdTggKiptZDVfaGFzaCkKIHsKIAlpZiAodHAtPnJ4X29wdC50c3RhbXBfb2spIHsKIAkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKQEAgLTI5OCwxNiArMjk4LDI5IEBACiAJCQl0cC0+cnhfb3B0LmVmZl9zYWNrcy0tOwogCQl9CiAJfQorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJaWYgKG1kNV9oYXNoKSB7CisJCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8CisJCQkgICAgICAgKFRDUE9QVF9OT1AgPDwgMTYpIHwKKwkJCSAgICAgICAoVENQT1BUX01ENVNJRyA8PCA4KSB8CisJCQkgICAgICAgVENQT0xFTl9NRDVTSUcpOworCQkqbWQ1X2hhc2ggPSAoX191OCAqKXB0cjsKKwl9CisjZW5kaWYKIH0KIAogLyogQ29uc3RydWN0IGEgdGNwIG9wdGlvbnMgaGVhZGVyIGZvciBhIFNZTiBvciBTWU5fQUNLIHBhY2tldC4KICAqIElmIHRoaXMgaXMgZXZlcnkgY2hhbmdlZCBtYWtlIHN1cmUgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mCiAgKiBNQVhfU1lOX1NJWkUgdG8gbWF0Y2ggdGhlIG5ldyBtYXhpbXVtIG51bWJlciBvZiBvcHRpb25zIHRoYXQgeW91CiAgKiBjYW4gZ2VuZXJhdGUuCisgKgorICogTm90ZSAtIHRoYXQgd2l0aCB0aGUgUkZDMjM4NSBUQ1Agb3B0aW9uLCB3ZSBtYWtlIHJvb20gZm9yIHRoZQorICogMTYgYnl0ZSBNRDUgaGFzaC4gVGhpcyB3aWxsIGJlIGZpbGxlZCBpbiBsYXRlciwgc28gdGhlIHBvaW50ZXIgZm9yIHRoZQorICogbG9jYXRpb24gdG8gYmUgZmlsbGVkIGlzIHBhc3NlZCBiYWNrIHVwLgogICovCiBzdGF0aWMgdm9pZCB0Y3Bfc3luX2J1aWxkX29wdGlvbnMoX19iZTMyICpwdHIsIGludCBtc3MsIGludCB0cywgaW50IHNhY2ssCiAJCQkJICBpbnQgb2ZmZXJfd3NjYWxlLCBpbnQgd3NjYWxlLCBfX3UzMiB0c3RhbXAsCi0JCQkJICBfX3UzMiB0c19yZWNlbnQpCisJCQkJICBfX3UzMiB0c19yZWNlbnQsIF9fdTggKiptZDVfaGFzaCkKIHsKIAkvKiBXZSBhbHdheXMgZ2V0IGFuIE1TUyBvcHRpb24uCiAJICogVGhlIG9wdGlvbiBieXRlcyB3aGljaCB3aWxsIGJlIHNlZW4gaW4gbm9ybWFsIGRhdGEKQEAgLTM0Niw2ICszNTksMjAgQEAKIAkJCSAgICAgICAoVENQT1BUX1dJTkRPVyA8PCAxNikgfAogCQkJICAgICAgIChUQ1BPTEVOX1dJTkRPVyA8PCA4KSB8CiAJCQkgICAgICAgKHdzY2FsZSkpOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJLyoKKwkgKiBJZiBNRDUgaXMgZW5hYmxlZCwgdGhlbiB3ZSBzZXQgdGhlIG9wdGlvbiwgYW5kIGluY2x1ZGUgdGhlIHNpemUKKwkgKiAoYWx3YXlzIDE4KS4gVGhlIGFjdHVhbCBNRDUgaGFzaCBpcyBhZGRlZCBqdXN0IGJlZm9yZSB0aGUKKwkgKiBwYWNrZXQgaXMgc2VudC4KKwkgKi8KKwlpZiAobWQ1X2hhc2gpIHsKKwkJKnB0cisrID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKKwkJCSAgICAgICAoVENQT1BUX05PUCA8PCAxNikgfAorCQkJICAgICAgIChUQ1BPUFRfTUQ1U0lHIDw8IDgpIHwKKwkJCSAgICAgICBUQ1BPTEVOX01ENVNJRyk7CisJCSptZDVfaGFzaCA9IChfX3U4ICopIHB0cjsKKwl9CisjZW5kaWYKIH0KIAogLyogVGhpcyByb3V0aW5lIGFjdHVhbGx5IHRyYW5zbWl0cyBUQ1AgcGFja2V0cyBxdWV1ZWQgaW4gYnkKQEAgLTM2Niw2ICszOTMsMTAgQEAKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwOwogCXN0cnVjdCB0Y3Bfc2tiX2NiICp0Y2I7CiAJaW50IHRjcF9oZWFkZXJfc2l6ZTsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqbWQ1OworCV9fdTggKm1kNV9oYXNoX2xvY2F0aW9uOworI2VuZGlmCiAJc3RydWN0IHRjcGhkciAqdGg7CiAJaW50IHN5c2N0bF9mbGFnczsKIAlpbnQgZXJyOwpAQCAtNDI0LDkgKzQ1NSwxOCBAQAogCWlmICh0Y3BfcGFja2V0c19pbl9mbGlnaHQodHApID09IDApCiAJCXRjcF9jYV9ldmVudChzaywgQ0FfRVZFTlRfVFhfU1RBUlQpOwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKgorCSAqIEFyZSB3ZSBkb2luZyBNRDUgb24gdGhpcyBzZWdtZW50PyBJZiBzbyAtIG1ha2UKKwkgKiByb29tIGZvciBpdC4KKwkgKi8KKwltZDUgPSB0cC0+YWZfc3BlY2lmaWMtPm1kNV9sb29rdXAoc2ssIHNrKTsKKwlpZiAobWQ1KQorCQl0Y3BfaGVhZGVyX3NpemUgKz0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDsKKyNlbmRpZgorCiAJdGggPSAoc3RydWN0IHRjcGhkciAqKSBza2JfcHVzaChza2IsIHRjcF9oZWFkZXJfc2l6ZSk7CiAJc2tiLT5oLnRoID0gdGg7Ci0Jc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCiAJLyogQnVpbGQgVENQIGhlYWRlciBhbmQgY2hlY2tzdW0gaXQuICovCiAJdGgtPnNvdXJjZQkJPSBpbmV0LT5zcG9ydDsKQEAgLTQ2MSwxMyArNTAxLDM0IEBACiAJCQkJICAgICAgKHN5c2N0bF9mbGFncyAmIFNZU0NUTF9GTEFHX1dTQ0FMRSksCiAJCQkJICAgICAgdHAtPnJ4X29wdC5yY3Zfd3NjYWxlLAogCQkJCSAgICAgIHRjYi0+d2hlbiwKLQkJCQkgICAgICB0cC0+cnhfb3B0LnRzX3JlY2VudCk7CisJCQkJICAgICAgdHAtPnJ4X29wdC50c19yZWNlbnQsCisKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCQkJCSAgICAgIG1kNSA/ICZtZDVfaGFzaF9sb2NhdGlvbiA6CisjZW5kaWYKKwkJCQkgICAgICBOVUxMKTsKIAl9IGVsc2UgewogCQl0Y3BfYnVpbGRfYW5kX3VwZGF0ZV9vcHRpb25zKChfX2JlMzIgKikodGggKyAxKSwKLQkJCQkJICAgICB0cCwgdGNiLT53aGVuKTsKKwkJCQkJICAgICB0cCwgdGNiLT53aGVuLAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJCQkJCSAgICAgbWQ1ID8gJm1kNV9oYXNoX2xvY2F0aW9uIDoKKyNlbmRpZgorCQkJCQkgICAgIE5VTEwpOwogCQlUQ1BfRUNOX3NlbmQoc2ssIHRwLCBza2IsIHRjcF9oZWFkZXJfc2l6ZSk7CiAJfQogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKiBDYWxjdWxhdGUgdGhlIE1ENSBoYXNoLCBhcyB3ZSBoYXZlIGFsbCB3ZSBuZWVkIG5vdyAqLworCWlmIChtZDUpIHsKKwkJdHAtPmFmX3NwZWNpZmljLT5jYWxjX21kNV9oYXNoKG1kNV9oYXNoX2xvY2F0aW9uLAorCQkJCQkgICAgICAgbWQ1LAorCQkJCQkgICAgICAgc2ssIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgICBza2ItPmgudGgsCisJCQkJCSAgICAgICBzay0+c2tfcHJvdG9jb2wsCisJCQkJCSAgICAgICBza2ItPmxlbik7CisJfQorI2VuZGlmCisKIAlpY3NrLT5pY3NrX2FmX29wcy0+c2VuZF9jaGVjayhzaywgc2tiLT5sZW4sIHNrYik7CiAKIAlpZiAobGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX0FDSykpCkBAIC00NzksMTkgKzU0MCwxMyBAQAogCWlmIChhZnRlcih0Y2ItPmVuZF9zZXEsIHRwLT5zbmRfbnh0KSB8fCB0Y2ItPnNlcSA9PSB0Y2ItPmVuZF9zZXEpCiAJCVRDUF9JTkNfU1RBVFMoVENQX01JQl9PVVRTRUdTKTsKIAotCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7CisJZXJyID0gaWNzay0+aWNza19hZl9vcHMtPnF1ZXVlX3htaXQoc2tiLCBzaywgMCk7CiAJaWYgKGxpa2VseShlcnIgPD0gMCkpCiAJCXJldHVybiBlcnI7CiAKIAl0Y3BfZW50ZXJfY3dyKHNrKTsKIAotCS8qIE5FVF9YTUlUX0NOIGlzIHNwZWNpYWwuIEl0IGRvZXMgbm90IGd1YXJhbnRlZSwKLQkgKiB0aGF0IHRoaXMgcGFja2V0IGlzIGxvc3QuIEl0IHRlbGxzIHRoYXQgZGV2aWNlCi0JICogaXMgYWJvdXQgdG8gc3RhcnQgdG8gZHJvcCBwYWNrZXRzIG9yIGFscmVhZHkKLQkgKiBkcm9wcyBzb21lIHBhY2tldHMgb2YgdGhlIHNhbWUgcHJpb3JpdHkgYW5kCi0JICogaW52b2tlcyB1cyB0byBzZW5kIGxlc3MgYWdncmVzc2l2ZWx5LgotCSAqLwotCXJldHVybiBlcnIgPT0gTkVUX1hNSVRfQ04gPyAwIDogZXJyOworCXJldHVybiBuZXRfeG1pdF9ldmFsKGVycik7CiAKICN1bmRlZiBTWVNDVExfRkxBR19UU1RBTVBTCiAjdW5kZWYgU1lTQ1RMX0ZMQUdfV1NDQUxFCkBAIC04NDcsNiArOTAyLDExIEBACiAJCW1zc19ub3cgLT0gKFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQgKwogCQkJICAgICh0cC0+cnhfb3B0LmVmZl9zYWNrcyAqIFRDUE9MRU5fU0FDS19QRVJCTE9DSykpOwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwlpZiAodHAtPmFmX3NwZWNpZmljLT5tZDVfbG9va3VwKHNrLCBzaykpCisJCW1zc19ub3cgLT0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDsKKyNlbmRpZgorCiAJeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OwogCiAJaWYgKGRvaW5nX3RzbykgewpAQCAtMjA0MCw2ICsyMTAwLDEwIEBACiAJc3RydWN0IHRjcGhkciAqdGg7CiAJaW50IHRjcF9oZWFkZXJfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICptZDU7CisJX191OCAqbWQ1X2hhc2hfbG9jYXRpb247CisjZW5kaWYKIAogCXNrYiA9IHNvY2tfd21hbGxvYyhzaywgTUFYX1RDUF9IRUFERVIgKyAxNSwgMSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQpAQCAtMjA1NSw2ICsyMTE5LDEzIEBACiAJCQkgICAoaXJlcS0+d3NjYWxlX29rID8gVENQT0xFTl9XU0NBTEVfQUxJR05FRCA6IDApICsKIAkJCSAgIC8qIFNBQ0tfUEVSTSBpcyBpbiB0aGUgcGxhY2Ugb2YgTk9QIE5PUCBvZiBUUyAqLwogCQkJICAgKChpcmVxLT5zYWNrX29rICYmICFpcmVxLT50c3RhbXBfb2spID8gVENQT0xFTl9TQUNLUEVSTV9BTElHTkVEIDogMCkpOworCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKiBBcmUgd2UgZG9pbmcgTUQ1IG9uIHRoaXMgc2VnbWVudD8gSWYgc28gLSBtYWtlIHJvb20gZm9yIGl0ICovCisJbWQ1ID0gdGNwX3JzayhyZXEpLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgcmVxKTsKKwlpZiAobWQ1KQorCQl0Y3BfaGVhZGVyX3NpemUgKz0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDsKKyNlbmRpZgogCXNrYi0+aC50aCA9IHRoID0gKHN0cnVjdCB0Y3BoZHIgKikgc2tiX3B1c2goc2tiLCB0Y3BfaGVhZGVyX3NpemUpOwogCiAJbWVtc2V0KHRoLCAwLCBzaXplb2Yoc3RydWN0IHRjcGhkcikpOwpAQCAtMjA5MiwxMSArMjE2MywyOSBAQAogCXRjcF9zeW5fYnVpbGRfb3B0aW9ucygoX19iZTMyICopKHRoICsgMSksIGRzdF9tZXRyaWMoZHN0LCBSVEFYX0FEVk1TUyksIGlyZXEtPnRzdGFtcF9vaywKIAkJCSAgICAgIGlyZXEtPnNhY2tfb2ssIGlyZXEtPndzY2FsZV9vaywgaXJlcS0+cmN2X3dzY2FsZSwKIAkJCSAgICAgIFRDUF9TS0JfQ0Ioc2tiKS0+d2hlbiwKLQkJCSAgICAgIHJlcS0+dHNfcmVjZW50KTsKKwkJCSAgICAgIHJlcS0+dHNfcmVjZW50LAorCQkJICAgICAgKAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJCQkgICAgICAgbWQ1ID8gJm1kNV9oYXNoX2xvY2F0aW9uIDoKKyNlbmRpZgorCQkJICAgICAgIE5VTEwpCisJCQkgICAgICApOwogCiAJc2tiLT5jc3VtID0gMDsKIAl0aC0+ZG9mZiA9ICh0Y3BfaGVhZGVyX3NpemUgPj4gMik7CiAJVENQX0lOQ19TVEFUUyhUQ1BfTUlCX09VVFNFR1MpOworCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkvKiBPa2F5LCB3ZSBoYXZlIGFsbCB3ZSBuZWVkIC0gZG8gdGhlIG1kNSBoYXNoIGlmIG5lZWRlZCAqLworCWlmIChtZDUpIHsKKwkJdHAtPmFmX3NwZWNpZmljLT5jYWxjX21kNV9oYXNoKG1kNV9oYXNoX2xvY2F0aW9uLAorCQkJCQkgICAgICAgbWQ1LAorCQkJCQkgICAgICAgTlVMTCwgZHN0LCByZXEsCisJCQkJCSAgICAgICBza2ItPmgudGgsIHNrLT5za19wcm90b2NvbCwKKwkJCQkJICAgICAgIHNrYi0+bGVuKTsKKwl9CisjZW5kaWYKKwogCXJldHVybiBza2I7CiB9CiAKQEAgLTIxMTUsNiArMjIwNCwxMSBAQAogCXRwLT50Y3BfaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSArCiAJCShzeXNjdGxfdGNwX3RpbWVzdGFtcHMgPyBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEIDogMCk7CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCWlmICh0cC0+YWZfc3BlY2lmaWMtPm1kNV9sb29rdXAoc2ssIHNrKSAhPSBOVUxMKQorCQl0cC0+dGNwX2hlYWRlcl9sZW4gKz0gVENQT0xFTl9NRDVTSUdfQUxJR05FRDsKKyNlbmRpZgorCiAJLyogSWYgdXNlciBnYXZlIGhpcyBUQ1BfTUFYU0VHLCByZWNvcmQgaXQgdG8gY2xhbXAgKi8KIAlpZiAodHAtPnJ4X29wdC51c2VyX21zcykKIAkJdHAtPnJ4X29wdC5tc3NfY2xhbXAgPSB0cC0+cnhfb3B0LnVzZXJfbXNzOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMgYi9uZXQvaXB2NC90Y3BfdGltZXIuYwppbmRleCBmYjA5YWRlLi4zMzU1YzI3NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVENQOiBUcmVhc29uIHVuY2xvYWtlZCEgUGVlciAldS4ldS4ldS4ldToldS8ldSBzaHJpbmtzIHdpbmRvdyAldToldS4gUmVwYWlyZWQuXG4iLAotCQkJICAgICAgIE5JUFFVQUQoaW5ldC0+ZGFkZHIpLCBodG9ucyhpbmV0LT5kcG9ydCksCisJCQkgICAgICAgTklQUVVBRChpbmV0LT5kYWRkciksIG50b2hzKGluZXQtPmRwb3J0KSwKIAkJCSAgICAgICBpbmV0LT5udW0sIHRwLT5zbmRfdW5hLCB0cC0+c25kX254dCk7CiAJCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3ZlZ2FzLmMgYi9uZXQvaXB2NC90Y3BfdmVnYXMuYwppbmRleCBhM2I3YWEwLi5kZGM0YmNjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdmVnYXMuYworKysgYi9uZXQvaXB2NC90Y3BfdmVnYXMuYwpAQCAtNDIsOCArNDIsOCBAQAogICogd2l0aCBWX1BBUkFNX1NISUZUIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBiaW5hcnkgcG9pbnQuCiAgKi8KICNkZWZpbmUgVl9QQVJBTV9TSElGVCAxCi1zdGF0aWMgaW50IGFscGhhID0gMTw8Vl9QQVJBTV9TSElGVDsKLXN0YXRpYyBpbnQgYmV0YSAgPSAzPDxWX1BBUkFNX1NISUZUOworc3RhdGljIGludCBhbHBoYSA9IDI8PFZfUEFSQU1fU0hJRlQ7CitzdGF0aWMgaW50IGJldGEgID0gNDw8Vl9QQVJBTV9TSElGVDsKIHN0YXRpYyBpbnQgZ2FtbWEgPSAxPDxWX1BBUkFNX1NISUZUOwogCiBtb2R1bGVfcGFyYW0oYWxwaGEsIGludCwgMDY0NCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDllMWJkMzcuLjAzNTkxNWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC05MiwyMiArOTIsMTYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxuZXQvc25tcC5oPgotI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+Ci0jaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLSNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLSNpbmNsdWRlIDxuZXQvaW5ldF9jb21tb24uaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgInVkcF9pbXBsLmgiCiAKIC8qCiAgKglTbm1wIE1JQiBmb3IgdGhlIFVEUCBsYXllcgpAQCAtMTIwLDI2ICsxMTQsMzAgQEAKIAogc3RhdGljIGludCB1ZHBfcG9ydF9yb3ZlcjsKIAotc3RhdGljIGlubGluZSBpbnQgdWRwX2xwb3J0X2ludXNlKHUxNiBudW0pCitzdGF0aWMgaW5saW5lIGludCBfX3VkcF9saWJfbHBvcnRfaW51c2UoX191MTYgbnVtLCBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHB0YWJsZVtdKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwX2hhc2hbbnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSkKKwlza19mb3JfZWFjaChzaywgbm9kZSwgJnVkcHRhYmxlW251bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pCiAJCWlmIChpbmV0X3NrKHNrKS0+bnVtID09IG51bSkKIAkJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCiAvKioKLSAqICB1ZHBfZ2V0X3BvcnQgIC0gIGNvbW1vbiBwb3J0IGxvb2t1cCBmb3IgSVB2NCBhbmQgSVB2NgorICogIF9fdWRwX2xpYl9nZXRfcG9ydCAgLSAgVURQLy1MaXRlIHBvcnQgbG9va3VwIGZvciBJUHY0IGFuZCBJUHY2CiAgKgogICogIEBzazogICAgICAgICAgc29ja2V0IHN0cnVjdCBpbiBxdWVzdGlvbgogICogIEBzbnVtOiAgICAgICAgcG9ydCBudW1iZXIgdG8gbG9vayB1cAorICogIEB1ZHB0YWJsZTogICAgaGFzaCBsaXN0IHRhYmxlLCBtdXN0IGJlIG9mIFVEUF9IVEFCTEVfU0laRQorICogIEBwb3J0X3JvdmVyOiAgcG9pbnRlciB0byByZWNvcmQgb2YgbGFzdCB1bmFsbG9jYXRlZCBwb3J0CiAgKiAgQHNhZGRyX2NvbXA6ICBBRi1kZXBlbmRlbnQgY29tcGFyaXNvbiBvZiBib3VuZCBsb2NhbCBJUCBhZGRyZXNzZXMKICAqLwotaW50IHVkcF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCi0JCSBpbnQgKCpzYWRkcl9jbXApKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpKQoraW50IF9fdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCisJCSAgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHB0YWJsZVtdLCBpbnQgKnBvcnRfcm92ZXIsCisJCSAgICAgICBpbnQgKCpzYWRkcl9jb21wKShjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLAorCQkJCQkgY29uc3Qgc3RydWN0IHNvY2sgKnNrMiApICAgICkKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKQEAgLTE1MCwxNSArMTQ4LDE1IEBACiAJaWYgKHNudW0gPT0gMCkgewogCQlpbnQgYmVzdF9zaXplX3NvX2ZhciwgYmVzdCwgcmVzdWx0LCBpOwogCi0JCWlmICh1ZHBfcG9ydF9yb3ZlciA+IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzFdIHx8Ci0JCSAgICB1ZHBfcG9ydF9yb3ZlciA8IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzBdKQotCQkJdWRwX3BvcnRfcm92ZXIgPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXTsKKwkJaWYgKCpwb3J0X3JvdmVyID4gc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMV0gfHwKKwkJICAgICpwb3J0X3JvdmVyIDwgc3lzY3RsX2xvY2FsX3BvcnRfcmFuZ2VbMF0pCisJCQkqcG9ydF9yb3ZlciA9IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzBdOwogCQliZXN0X3NpemVfc29fZmFyID0gMzI3Njc7Ci0JCWJlc3QgPSByZXN1bHQgPSB1ZHBfcG9ydF9yb3ZlcjsKKwkJYmVzdCA9IHJlc3VsdCA9ICpwb3J0X3JvdmVyOwogCQlmb3IgKGkgPSAwOyBpIDwgVURQX0hUQUJMRV9TSVpFOyBpKyssIHJlc3VsdCsrKSB7CiAJCQlpbnQgc2l6ZTsKIAotCQkJaGVhZCA9ICZ1ZHBfaGFzaFtyZXN1bHQgJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldOworCQkJaGVhZCA9ICZ1ZHB0YWJsZVtyZXN1bHQgJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldOwogCQkJaWYgKGhsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCQkJaWYgKHJlc3VsdCA+IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzFdKQogCQkJCQlyZXN1bHQgPSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXSArCkBAIC0xNzksMTUgKzE3NywxNSBAQAogCQkJCXJlc3VsdCA9IHN5c2N0bF9sb2NhbF9wb3J0X3JhbmdlWzBdCiAJCQkJCSsgKChyZXN1bHQgLSBzeXNjdGxfbG9jYWxfcG9ydF9yYW5nZVswXSkgJgogCQkJCQkgICAoVURQX0hUQUJMRV9TSVpFIC0gMSkpOwotCQkJaWYgKCF1ZHBfbHBvcnRfaW51c2UocmVzdWx0KSkKKwkJCWlmICghIF9fdWRwX2xpYl9scG9ydF9pbnVzZShyZXN1bHQsIHVkcHRhYmxlKSkKIAkJCQlicmVhazsKIAkJfQogCQlpZiAoaSA+PSAoMSA8PCAxNikgLyBVRFBfSFRBQkxFX1NJWkUpCiAJCQlnb3RvIGZhaWw7CiBnb3RpdDoKLQkJdWRwX3BvcnRfcm92ZXIgPSBzbnVtID0gcmVzdWx0OworCQkqcG9ydF9yb3ZlciA9IHNudW0gPSByZXN1bHQ7CiAJfSBlbHNlIHsKLQkJaGVhZCA9ICZ1ZHBfaGFzaFtzbnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXTsKKwkJaGVhZCA9ICZ1ZHB0YWJsZVtzbnVtICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXTsKIAogCQlza19mb3JfZWFjaChzazIsIG5vZGUsIGhlYWQpCiAJCQlpZiAoaW5ldF9zayhzazIpLT5udW0gPT0gc251bSAgICAgICAgICAgICAgICAgICAgICAgICYmCkBAIC0xOTUsMTIgKzE5MywxMiBAQAogCQkJICAgICghc2syLT5za19yZXVzZSAgICAgICAgfHwgIXNrLT5za19yZXVzZSkgICAgICAgICAmJgogCQkJICAgICghc2syLT5za19ib3VuZF9kZXZfaWYgfHwgIXNrLT5za19ib3VuZF9kZXZfaWYKIAkJCSAgICAgfHwgc2syLT5za19ib3VuZF9kZXZfaWYgPT0gc2stPnNrX2JvdW5kX2Rldl9pZikgJiYKLQkJCSAgICAoKnNhZGRyX2NtcCkoc2ssIHNrMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisJCQkgICAgKCpzYWRkcl9jb21wKShzaywgc2syKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogCQkJCWdvdG8gZmFpbDsKIAl9CiAJaW5ldF9zayhzayktPm51bSA9IHNudW07CiAJaWYgKHNrX3VuaGFzaGVkKHNrKSkgewotCQloZWFkID0gJnVkcF9oYXNoW3NudW0gJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldOworCQloZWFkID0gJnVkcHRhYmxlW3NudW0gJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldOwogCQlza19hZGRfbm9kZShzaywgaGVhZCk7CiAJCXNvY2tfcHJvdF9pbmNfdXNlKHNrLT5za19wcm90KTsKIAl9CkBAIC0yMTAsNyArMjA4LDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQorX19pbmxpbmVfXyBpbnQgdWRwX2dldF9wb3J0KHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgc2hvcnQgc251bSwKKwkJCWludCAoKnNjbXApKGNvbnN0IHN0cnVjdCBzb2NrICosIGNvbnN0IHN0cnVjdCBzb2NrICopKQoreworCXJldHVybiAgX191ZHBfbGliX2dldF9wb3J0KHNrLCBzbnVtLCB1ZHBfaGFzaCwgJnVkcF9wb3J0X3JvdmVyLCBzY21wKTsKK30KKworaW5saW5lIGludCBpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQxID0gaW5ldF9zayhzazEpLCAqaW5ldDIgPSBpbmV0X3NrKHNrMik7CiAKQEAgLTIyNCwzNCArMjI4LDIwIEBACiAJcmV0dXJuIHVkcF9nZXRfcG9ydChzaywgc251bSwgaXB2NF9yY3Zfc2FkZHJfZXF1YWwpOwogfQogCi0KLXN0YXRpYyB2b2lkIHVkcF92NF9oYXNoKHN0cnVjdCBzb2NrICpzaykKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIHZvaWQgdWRwX3Y0X3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jd3JpdGVfbG9ja19iaCgmdWRwX2hhc2hfbG9jayk7Ci0JaWYgKHNrX2RlbF9ub2RlX2luaXQoc2spKSB7Ci0JCWluZXRfc2soc2spLT5udW0gPSAwOwotCQlzb2NrX3Byb3RfZGVjX3VzZShzay0+c2tfcHJvdCk7Ci0JfQotCXdyaXRlX3VubG9ja19iaCgmdWRwX2hhc2hfbG9jayk7Ci19Ci0KIC8qIFVEUCBpcyBuZWFybHkgYWx3YXlzIHdpbGRjYXJkcyBvdXQgdGhlIHdhem9vLCBpdCBtYWtlcyBubyBzZW5zZSB0byB0cnkKICAqIGhhcmRlciB0aGFuIHRoaXMuIC1EYXZlTQogICovCi1zdGF0aWMgc3RydWN0IHNvY2sgKnVkcF92NF9sb29rdXBfbG9uZ3dheShfX2JlMzIgc2FkZHIsIF9fYmUxNiBzcG9ydCwKLQkJCQkJICBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCwgaW50IGRpZikKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqX191ZHA0X2xpYl9sb29rdXAoX19iZTMyIHNhZGRyLCBfX2JlMTYgc3BvcnQsCisJCQkJICAgICAgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQsCisJCQkJICAgICAgaW50IGRpZiwgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSkKIHsKIAlzdHJ1Y3Qgc29jayAqc2ssICpyZXN1bHQgPSBOVUxMOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXVuc2lnbmVkIHNob3J0IGhudW0gPSBudG9ocyhkcG9ydCk7CiAJaW50IGJhZG5lc3MgPSAtMTsKIAotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwX2hhc2hbaG51bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pIHsKKwlyZWFkX2xvY2soJnVkcF9oYXNoX2xvY2spOworCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwdGFibGVbaG51bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pIHsKIAkJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCiAJCWlmIChpbmV0LT5udW0gPT0gaG51bSAmJiAhaXB2Nl9vbmx5X3NvY2soc2spKSB7CkBAIC0yODUsMjAgKzI3NSwxMCBAQAogCQkJfQogCQl9CiAJfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBzb2NrICp1ZHBfdjRfbG9va3VwKF9fYmUzMiBzYWRkciwgX19iZTE2IHNwb3J0LAotCQkJCQkgICAgIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0LCBpbnQgZGlmKQotewotCXN0cnVjdCBzb2NrICpzazsKLQotCXJlYWRfbG9jaygmdWRwX2hhc2hfbG9jayk7Ci0Jc2sgPSB1ZHBfdjRfbG9va3VwX2xvbmd3YXkoc2FkZHIsIHNwb3J0LCBkYWRkciwgZHBvcnQsIGRpZik7Ci0JaWYgKHNrKQotCQlzb2NrX2hvbGQoc2spOworCWlmIChyZXN1bHQpCisJCXNvY2tfaG9sZChyZXN1bHQpOwogCXJlYWRfdW5sb2NrKCZ1ZHBfaGFzaF9sb2NrKTsKLQlyZXR1cm4gc2s7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqdWRwX3Y0X21jYXN0X25leHQoc3RydWN0IHNvY2sgKnNrLApAQCAtMzQwLDcgKzMyMCw3IEBACiAgKiB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBwb3J0LgogICovCiAKLXZvaWQgdWRwX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKK3ZvaWQgX191ZHA0X2xpYl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluZm8sIHN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10pCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIqKXNrYi0+ZGF0YTsKQEAgLTM1MSw3ICszMzEsOCBAQAogCWludCBoYXJkZXJyOwogCWludCBlcnI7CiAKLQlzayA9IHVkcF92NF9sb29rdXAoaXBoLT5kYWRkciwgdWgtPmRlc3QsIGlwaC0+c2FkZHIsIHVoLT5zb3VyY2UsIHNrYi0+ZGV2LT5pZmluZGV4KTsKKwlzayA9IF9fdWRwNF9saWJfbG9va3VwKGlwaC0+ZGFkZHIsIHVoLT5kZXN0LCBpcGgtPnNhZGRyLCB1aC0+c291cmNlLAorCQkJICAgICAgIHNrYi0+ZGV2LT5pZmluZGV4LCB1ZHB0YWJsZQkJICAgICk7CiAJaWYgKHNrID09IE5VTEwpIHsKIAkJSUNNUF9JTkNfU1RBVFNfQkgoSUNNUF9NSUJfSU5FUlJPUlMpOwogICAgIAkgIAlyZXR1cm47CS8qIE5vIHNvY2tldCBmb3IgZXJyb3IgKi8KQEAgLTQwNSw2ICszODYsMTEgQEAKIAlzb2NrX3B1dChzayk7CiB9CiAKK19faW5saW5lX18gdm9pZCB1ZHBfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQoreworCXJldHVybiBfX3VkcDRfbGliX2Vycihza2IsIGluZm8sIHVkcF9oYXNoKTsKK30KKwogLyoKICAqIFRocm93IGF3YXkgYWxsIHBlbmRpbmcgZGF0YSBhbmQgY2FuY2VsIHRoZSBjb3JraW5nLiBTb2NrZXQgaXMgbG9ja2VkLgogICovCkBAIC00MTksMTYgKzQwNSw1OCBAQAogCX0KIH0KIAorLyoqCisgKiAJdWRwNF9od2NzdW1fb3V0Z29pbmcgIC0gIGhhbmRsZSBvdXRnb2luZyBIVyBjaGVja3N1bW1pbmcKKyAqIAlAc2s6IAlzb2NrZXQgd2UgYXJlIHNlbmRpbmcgb24KKyAqIAlAc2tiOiAJc2tfYnVmZiBjb250YWluaW5nIHRoZSBmaWxsZWQtaW4gVURQIGhlYWRlcgorICogCSAgICAgICAgKGNoZWNrc3VtIGZpZWxkIG11c3QgYmUgemVyb2VkIG91dCkKKyAqLworc3RhdGljIHZvaWQgdWRwNF9od2NzdW1fb3V0Z29pbmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBfX2JlMzIgc3JjLCBfX2JlMzIgZHN0LCBpbnQgbGVuICAgICAgKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJc3RydWN0IHVkcGhkciAqdWggPSBza2ItPmgudWg7CisJX193c3VtIGNzdW0gPSAwOworCisJaWYgKHNrYl9xdWV1ZV9sZW4oJnNrLT5za193cml0ZV9xdWV1ZSkgPT0gMSkgeworCQkvKgorCQkgKiBPbmx5IG9uZSBmcmFnbWVudCBvbiB0aGUgc29ja2V0LgorCQkgKi8KKwkJc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKTsKKwkJdWgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKHNyYywgZHN0LCBsZW4sIElQUFJPVE9fVURQLCAwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBIVy1jaGVja3N1bSB3b24ndCB3b3JrIGFzIHRoZXJlIGFyZSB0d28gb3IgbW9yZQorCQkgKiBmcmFnbWVudHMgb24gdGhlIHNvY2tldCBzbyB0aGF0IGFsbCBjc3VtcyBvZiBza19idWZmcworCQkgKiBzaG91bGQgYmUgdG9nZXRoZXIKKwkJICovCisJCW9mZnNldCA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7CisJCXNrYi0+Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLT5sZW4gLSBvZmZzZXQsIDApOworCisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQlza2JfcXVldWVfd2Fsaygmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpIHsKKwkJCWNzdW0gPSBjc3VtX2FkZChjc3VtLCBza2ItPmNzdW0pOworCQl9CisKKwkJdWgtPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoc3JjLCBkc3QsIGxlbiwgSVBQUk9UT19VRFAsIGNzdW0pOworCQlpZiAodWgtPmNoZWNrID09IDApCisJCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKKwl9Cit9CisKIC8qCiAgKiBQdXNoIG91dCBhbGwgcGVuZGluZyBkYXRhIGFzIG9uZSBVRFAgZGF0YWdyYW0uIFNvY2tldCBpcyBsb2NrZWQuCiAgKi8KLXN0YXRpYyBpbnQgdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdWRwX3NvY2sgKnVwKQorc3RhdGljIGludCB1ZHBfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spCiB7CisJc3RydWN0IHVkcF9zb2NrICAqdXAgPSB1ZHBfc2soc2spOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgZmxvd2kgKmZsID0gJmluZXQtPmNvcmsuZmw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIAlpbnQgZXJyID0gMDsKKwlfX3dzdW0gY3N1bSA9IDA7CiAKIAkvKiBHcmFiIHRoZSBza2J1ZmYgd2hlcmUgVURQIGhlYWRlciBzcGFjZSBleGlzdHMuICovCiAJaWYgKChza2IgPSBza2JfcGVlaygmc2stPnNrX3dyaXRlX3F1ZXVlKSkgPT0gTlVMTCkKQEAgLTQ0Myw1MiArNDcxLDI4IEBACiAJdWgtPmxlbiA9IGh0b25zKHVwLT5sZW4pOwogCXVoLT5jaGVjayA9IDA7CiAKLQlpZiAoc2stPnNrX25vX2NoZWNrID09IFVEUF9DU1VNX05PWE1JVCkgeworCWlmICh1cC0+cGNmbGFnKSAgCQkJCSAvKiAgICAgVURQLUxpdGUgICAgICAqLworCQljc3VtICA9IHVkcGxpdGVfY3N1bV9vdXRnb2luZyhzaywgc2tiKTsKKworCWVsc2UgaWYgKHNrLT5za19ub19jaGVjayA9PSBVRFBfQ1NVTV9OT1hNSVQpIHsgICAvKiBVRFAgY3N1bSBkaXNhYmxlZCAqLworCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAkJZ290byBzZW5kOwotCX0KIAotCWlmIChza2JfcXVldWVfbGVuKCZzay0+c2tfd3JpdGVfcXVldWUpID09IDEpIHsKLQkJLyoKLQkJICogT25seSBvbmUgZnJhZ21lbnQgb24gdGhlIHNvY2tldC4KLQkJICovCi0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlza2ItPmNzdW0gPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7Ci0JCQl1aC0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoZmwtPmZsNF9zcmMsIGZsLT5mbDRfZHN0LAotCQkJCQl1cC0+bGVuLCBJUFBST1RPX1VEUCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQlza2ItPmNzdW0gPSBjc3VtX3BhcnRpYWwoKGNoYXIgKil1aCwKLQkJCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBza2ItPmNzdW0pOwotCQkJdWgtPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoZmwtPmZsNF9zcmMsIGZsLT5mbDRfZHN0LAotCQkJCQl1cC0+bGVuLCBJUFBST1RPX1VEUCwgc2tiLT5jc3VtKTsKLQkJCWlmICh1aC0+Y2hlY2sgPT0gMCkKLQkJCQl1aC0+Y2hlY2sgPSAtMTsKLQkJfQotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBjc3VtID0gMDsKLQkJLyoKLQkJICogSFctY2hlY2tzdW0gd29uJ3Qgd29yayBhcyB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgCi0JCSAqIGZyYWdtZW50cyBvbiB0aGUgc29ja2V0IHNvIHRoYXQgYWxsIGNzdW1zIG9mIHNrX2J1ZmZzCi0JCSAqIHNob3VsZCBiZSB0b2dldGhlci4KLQkJICovCi0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCQlpbnQgb2Zmc2V0ID0gKHVuc2lnbmVkIGNoYXIgKil1aCAtIHNrYi0+ZGF0YTsKLQkJCXNrYi0+Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIG9mZnNldCwgc2tiLT5sZW4gLSBvZmZzZXQsIDApOworCX0gZWxzZSBpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeyAvKiBVRFAgaGFyZHdhcmUgY3N1bSAqLwogCi0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCX0gZWxzZSB7Ci0JCQlza2ItPmNzdW0gPSBjc3VtX3BhcnRpYWwoKGNoYXIgKil1aCwKLQkJCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBza2ItPmNzdW0pOwotCQl9CisJCXVkcDRfaHdjc3VtX291dGdvaW5nKHNrLCBza2IsIGZsLT5mbDRfc3JjLGZsLT5mbDRfZHN0LCB1cC0+bGVuKTsKKwkJZ290byBzZW5kOwogCi0JCXNrYl9xdWV1ZV93YWxrKCZzay0+c2tfd3JpdGVfcXVldWUsIHNrYikgewotCQkJY3N1bSA9IGNzdW1fYWRkKGNzdW0sIHNrYi0+Y3N1bSk7Ci0JCX0KLQkJdWgtPmNoZWNrID0gY3N1bV90Y3B1ZHBfbWFnaWMoZmwtPmZsNF9zcmMsIGZsLT5mbDRfZHN0LAotCQkJCXVwLT5sZW4sIElQUFJPVE9fVURQLCBjc3VtKTsKLQkJaWYgKHVoLT5jaGVjayA9PSAwKQotCQkJdWgtPmNoZWNrID0gLTE7Ci0JfQorCX0gZWxzZQkJCQkJCSAvKiAgIGBub3JtYWwnIFVEUCAgICAqLworCQljc3VtID0gdWRwX2NzdW1fb3V0Z29pbmcoc2ssIHNrYik7CisKKwkvKiBhZGQgcHJvdG9jb2wtZGVwZW5kZW50IHBzZXVkby1oZWFkZXIgKi8KKwl1aC0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhmbC0+Zmw0X3NyYywgZmwtPmZsNF9kc3QsIHVwLT5sZW4sCisJCQkJICAgICAgc2stPnNrX3Byb3RvY29sLCBjc3VtICAgICAgICAgICAgICk7CisJaWYgKHVoLT5jaGVjayA9PSAwKQorCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKKwogc2VuZDoKIAllcnIgPSBpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIG91dDoKQEAgLTQ5NywxMiArNTAxLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCB1ZHBfY2hlY2soc3RydWN0IHVkcGhkciAqdWgsIGludCBsZW4sIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0JcmV0dXJuKGNzdW1fdGNwdWRwX21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX1VEUCwgYmFzZSkpOwotfQotCiBpbnQgdWRwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJc2l6ZV90IGxlbikKIHsKQEAgLTUxNiw4ICs1MTQsOSBAQAogCV9fYmUzMiBkYWRkciwgZmFkZHIsIHNhZGRyOwogCV9fYmUxNiBkcG9ydDsKIAl1OCAgdG9zOwotCWludCBlcnI7CisJaW50IGVyciwgaXNfdWRwbGl0ZSA9IHVwLT5wY2ZsYWc7CiAJaW50IGNvcmtyZXEgPSB1cC0+Y29ya2ZsYWcgfHwgbXNnLT5tc2dfZmxhZ3MmTVNHX01PUkU7CisJaW50ICgqZ2V0ZnJhZykodm9pZCAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIHN0cnVjdCBza19idWZmICopOwogCiAJaWYgKGxlbiA+IDB4RkZGRikKIAkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTYyMiw3ICs2MjEsNyBAQAogCQkJCQkgICAgICB7IC5kYWRkciA9IGZhZGRyLAogCQkJCQkJLnNhZGRyID0gc2FkZHIsCiAJCQkJCQkudG9zID0gdG9zIH0gfSwKLQkJCQkgICAgLnByb3RvID0gSVBQUk9UT19VRFAsCisJCQkJICAgIC5wcm90byA9IHNrLT5za19wcm90b2NvbCwKIAkJCQkgICAgLnVsaV91ID0geyAucG9ydHMgPQogCQkJCQkgICAgICAgeyAuc3BvcnQgPSBpbmV0LT5zcG9ydCwKIAkJCQkJCSAuZHBvcnQgPSBkcG9ydCB9IH0gfTsKQEAgLTY2OCwxMyArNjY3LDE0IEBACiAKIGRvX2FwcGVuZF9kYXRhOgogCXVwLT5sZW4gKz0gdWxlbjsKLQllcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2ctPm1zZ19pb3YsIHVsZW4sIAotCQkJc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCAmaXBjLCBydCwgCisJZ2V0ZnJhZyAgPSAgaXNfdWRwbGl0ZSA/ICB1ZHBsaXRlX2dldGZyYWcgOiBpcF9nZW5lcmljX2dldGZyYWc7CisJZXJyID0gaXBfYXBwZW5kX2RhdGEoc2ssIGdldGZyYWcsIG1zZy0+bXNnX2lvdiwgdWxlbiwKKwkJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgJmlwYywgcnQsCiAJCQljb3JrcmVxID8gbXNnLT5tc2dfZmxhZ3N8TVNHX01PUkUgOiBtc2ctPm1zZ19mbGFncyk7CiAJaWYgKGVycikKIAkJdWRwX2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIAllbHNlIGlmICghY29ya3JlcSkKLQkJZXJyID0gdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHVwKTsKKwkJZXJyID0gdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCWVsc2UgaWYgKHVubGlrZWx5KHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkpCiAJCXVwLT5wZW5kaW5nID0gMDsKIAlyZWxlYXNlX3NvY2soc2spOwpAQCAtNjg0LDcgKzY4NCw3IEBACiAJaWYgKGZyZWUpCiAJCWtmcmVlKGlwYy5vcHQpOwogCWlmICghZXJyKSB7Ci0JCVVEUF9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX09VVERBVEFHUkFNUyk7CisJCVVEUF9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX09VVERBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CiAJCXJldHVybiBsZW47CiAJfQogCS8qCkBAIC02OTUsNyArNjk1LDcgQEAKIAkgKiBzZWVtcyBsaWtlIG92ZXJraWxsLgogCSAqLwogCWlmIChlcnIgPT0gLUVOT0JVRlMgfHwgdGVzdF9iaXQoU09DS19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpKSB7Ci0JCVVEUF9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX1NOREJVRkVSUk9SUyk7CisJCVVEUF9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX1NOREJVRkVSUk9SUywgaXNfdWRwbGl0ZSk7CiAJfQogCXJldHVybiBlcnI7CiAKQEAgLTcwNyw4ICs3MDcsOCBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IHVkcF9zZW5kcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LAotCQkJc2l6ZV90IHNpemUsIGludCBmbGFncykKK2ludCB1ZHBfc2VuZHBhZ2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNldCwKKwkJIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CiAJaW50IHJldDsKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCiAJdXAtPmxlbiArPSBzaXplOwogCWlmICghKHVwLT5jb3JrZmxhZyB8fCAoZmxhZ3MmTVNHX01PUkUpKSkKLQkJcmV0ID0gdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHVwKTsKKwkJcmV0ID0gdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCWlmICghcmV0KQogCQlyZXQgPSBzaXplOwogb3V0OgpAQCAtNzk1LDI5ICs3OTUsMTggQEAKIAlyZXR1cm4oMCk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBfX3VkcF9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdWRwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JcmV0dXJuIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZICYmCi0JCV9fdWRwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7Ci19Ci0KIC8qCiAgKiAJVGhpcyBzaG91bGQgYmUgZWFzeSwgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRoZXJlIHdlCiAgKiAJcmV0dXJuIGl0LCBvdGhlcndpc2Ugd2UgYmxvY2suCiAgKi8KIAotc3RhdGljIGludCB1ZHBfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAotCQkgICAgICAgc2l6ZV90IGxlbiwgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKK2ludCB1ZHBfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCSAgICAgICAgc2l6ZV90IGxlbiwgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAgIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOwogICAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLSAgCWludCBjb3BpZWQsIGVycjsKKwlpbnQgY29waWVkLCBlcnIsIGNvcHlfb25seSwgaXNfdWRwbGl0ZSA9IElTX1VEUExJVEUoc2spOwogCiAJLyoKIAkgKglDaGVjayBhbnkgcGFzc2VkIGFkZHJlc3NlcwpAQCAtODM5LDE1ICs4MjgsMjUgQEAKIAkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwogCX0KIAotCWlmIChza2ItPmlwX3N1bW1lZD09Q0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIG1zZy0+bXNnX2lvdiwKLQkJCQkJICAgICAgY29waWVkKTsKLQl9IGVsc2UgaWYgKG1zZy0+bXNnX2ZsYWdzJk1TR19UUlVOQykgewotCQlpZiAoX191ZHBfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKKwkvKgorCSAqIAlEZWNpZGUgd2hldGhlciB0byBjaGVja3N1bSBhbmQvb3IgY29weSBkYXRhLgorCSAqCisJICogCVVEUDogICAgICBjaGVja3N1bSBtYXkgaGF2ZSBiZWVuIGNvbXB1dGVkIGluIEhXLAorCSAqIAkgICAgICAgICAgKHJlLSljb21wdXRlIGl0IGlmIG1lc3NhZ2UgaXMgdHJ1bmNhdGVkLgorCSAqIAlVRFAtTGl0ZTogYWx3YXlzIG5lZWRzIHRvIGNoZWNrc3VtLCBubyBIVyBzdXBwb3J0LgorCSAqLworCWNvcHlfb25seSA9IChza2ItPmlwX3N1bW1lZD09Q0hFQ0tTVU1fVU5ORUNFU1NBUlkpOworCisJaWYgKGlzX3VkcGxpdGUgIHx8ICAoIWNvcHlfb25seSAgJiYgIG1zZy0+bXNnX2ZsYWdzJk1TR19UUlVOQykpIHsKKwkJaWYgKF9fdWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQogCQkJZ290byBjc3VtX2NvcHlfZXJyOwotCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgbXNnLT5tc2dfaW92LAotCQkJCQkgICAgICBjb3BpZWQpOwotCX0gZWxzZSB7CisJCWNvcHlfb25seSA9IDE7CisJfQorCisJaWYgKGNvcHlfb25seSkKKwkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksCisJCQkJCSAgICAgIG1zZy0+bXNnX2lvdiwgY29waWVkICAgICAgICk7CisJZWxzZSB7CiAJCWVyciA9IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBtc2ctPm1zZ19pb3YpOwogCiAJCWlmIChlcnIgPT0gLUVJTlZBTCkKQEAgLTg4MCw3ICs4NzksNyBAQAogICAJcmV0dXJuIGVycjsKIAogY3N1bV9jb3B5X2VycjoKLQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMpOworCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUywgaXNfdWRwbGl0ZSk7CiAKIAlza2Jfa2lsbF9kYXRhZ3JhbShzaywgc2tiLCBmbGFncyk7CiAKQEAgLTkxMiwxMSArOTExLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdWRwX2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQotewotCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKLX0KLQogLyogcmV0dXJuOgogICogCTEgIGlmIHRoZSB0aGUgVURQIHN5c3RlbSBzaG91bGQgcHJvY2VzcyBpdAogICoJMCAgaWYgd2Ugc2hvdWxkIGRyb3AgdGhpcyBwYWNrZXQKQEAgLTEwMjIsNyArMTAxNiw3IEBACiAgKiBOb3RlIHRoYXQgaW4gdGhlIHN1Y2Nlc3MgYW5kIGVycm9yIGNhc2VzLCB0aGUgc2tiIGlzIGFzc3VtZWQgdG8KICAqIGhhdmUgZWl0aGVyIGJlZW4gcmVxdWV1ZWQgb3IgZnJlZWQuCiAgKi8KLXN0YXRpYyBpbnQgdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB1ZHBfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwogCWludCByYzsKQEAgLTEwMzAsMTAgKzEwMjQsOCBAQAogCS8qCiAJICoJQ2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQsIGRyb3BwaW5nIGlmIHRoZSBxdWV1ZSBpcyBmdWxsLgogCSAqLwotCWlmICgheGZybTRfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAoIXhmcm00X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCisJCWdvdG8gZHJvcDsKIAluZl9yZXNldChza2IpOwogCiAJaWYgKHVwLT5lbmNhcF90eXBlKSB7CkBAIC0xMDU3LDMxICsxMDQ5LDY4IEBACiAJCWlmIChyZXQgPCAwKSB7CiAJCQkvKiBwcm9jZXNzIHRoZSBFU1AgcGFja2V0ICovCiAJCQlyZXQgPSB4ZnJtNF9yY3ZfZW5jYXAoc2tiLCB1cC0+ZW5jYXBfdHlwZSk7Ci0JCQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5EQVRBR1JBTVMpOworCQkJVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX0lOREFUQUdSQU1TLCB1cC0+cGNmbGFnKTsKIAkJCXJldHVybiAtcmV0OwogCQl9CiAJCS8qIEZBTExUSFJPVUdIIC0tIGl0J3MgYSBVRFAgUGFja2V0ICovCiAJfQogCi0JaWYgKHNrLT5za19maWx0ZXIgJiYgc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJaWYgKF9fdWRwX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKLQkJCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUyk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAtMTsKKwkvKgorCSAqIAlVRFAtTGl0ZSBzcGVjaWZpYyB0ZXN0cywgaWdub3JlZCBvbiBVRFAgc29ja2V0cworCSAqLworCWlmICgodXAtPnBjZmxhZyAmIFVEUExJVEVfUkVDVl9DQykgICYmICBVRFBfU0tCX0NCKHNrYiktPnBhcnRpYWxfY292KSB7CisKKwkJLyoKKwkJICogTUlCIHN0YXRpc3RpY3Mgb3RoZXIgdGhhbiBpbmNyZW1lbnRpbmcgdGhlIGVycm9yIGNvdW50IGFyZQorCQkgKiBkaXNhYmxlZCBmb3IgdGhlIGZvbGxvd2luZyB0d28gdHlwZXMgb2YgZXJyb3JzOiB0aGVzZSBkZXBlbmQKKwkJICogb24gdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzLCBub3Qgb24gdGhlIGZ1bmN0aW9uaW5nIG9mIHRoZQorCQkgKiBwcm90b2NvbCBzdGFjayBhcyBzdWNoLgorCQkgKgorCQkgKiBSRkMgMzgyOCBoZXJlIHJlY29tbWVuZHMgKHNlYyAzLjMpOiAiVGhlcmUgc2hvdWxkIGFsc28gYmUgYQorCQkgKiB3YXkgLi4uIHRvIC4uLiBhdCBsZWFzdCBsZXQgdGhlIHJlY2VpdmluZyBhcHBsaWNhdGlvbiBibG9jaworCQkgKiBkZWxpdmVyeSBvZiBwYWNrZXRzIHdpdGggY292ZXJhZ2UgdmFsdWVzIGxlc3MgdGhhbiBhIHZhbHVlCisJCSAqIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4iCisJCSAqLworCQlpZiAodXAtPnBjcmxlbiA9PSAwKSB7ICAgICAgICAgIC8qIGZ1bGwgY292ZXJhZ2Ugd2FzIHNldCAgKi8KKwkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiVURQTElURTogcGFydGlhbCBjb3ZlcmFnZSAiCisJCQkJIiVkIHdoaWxlIGZ1bGwgY292ZXJhZ2UgJWQgcmVxdWVzdGVkXG4iLAorCQkJCVVEUF9TS0JfQ0Ioc2tiKS0+Y3Njb3YsIHNrYi0+bGVuKTsKKwkJCWdvdG8gZHJvcDsKIAkJfQorCQkvKiBUaGUgbmV4dCBjYXNlIGludm9sdmVzIHZpb2xhdGluZyB0aGUgbWluLiBjb3ZlcmFnZSByZXF1ZXN0ZWQKKwkJICogYnkgdGhlIHJlY2VpdmVyLiBUaGlzIGlzIHN1YnRsZTogaWYgcmVjZWl2ZXIgd2FudHMgeCBhbmQgeCBpcworCQkgKiBncmVhdGVyIHRoYW4gdGhlIGJ1ZmZlcnNpemUvTVRVIHRoZW4gcmVjZWl2ZXIgd2lsbCBjb21wbGFpbgorCQkgKiB0aGF0IGl0IHdhbnRzIHggd2hpbGUgc2VuZGVyIGVtaXRzIHBhY2tldHMgb2Ygc21hbGxlciBzaXplIHkuCisJCSAqIFRoZXJlZm9yZSB0aGUgYWJvdmUgLi4uKCktPnBhcnRpYWxfY292IHN0YXRlbWVudCBpcyBlc3NlbnRpYWwuCisJCSAqLworCQlpZiAoVURQX1NLQl9DQihza2IpLT5jc2NvdiAgPCAgdXAtPnBjcmxlbikgeworCQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HCisJCQkJIlVEUExJVEU6IGNvdmVyYWdlICVkIHRvbyBzbWFsbCwgbmVlZCBtaW4gJWRcbiIsCisJCQkJVURQX1NLQl9DQihza2IpLT5jc2NvdiwgdXAtPnBjcmxlbik7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisKKwlpZiAoc2stPnNrX2ZpbHRlciAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgeworCQlpZiAoX191ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCisJCQlnb3RvIGRyb3A7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfQogCiAJaWYgKChyYyA9IHNvY2tfcXVldWVfcmN2X3NrYihzayxza2IpKSA8IDApIHsKIAkJLyogTm90ZSB0aGF0IGFuIEVOT01FTSBlcnJvciBpcyBjaGFyZ2VkIHR3aWNlICovCiAJCWlmIChyYyA9PSAtRU5PTUVNKQotCQkJVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX1JDVkJVRkVSUk9SUyk7Ci0JCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUyk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gLTE7CisJCQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfUkNWQlVGRVJST1JTLCB1cC0+cGNmbGFnKTsKKwkJZ290byBkcm9wOwogCX0KLQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5EQVRBR1JBTVMpOworCisJVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX0lOREFUQUdSQU1TLCB1cC0+cGNmbGFnKTsKIAlyZXR1cm4gMDsKKworZHJvcDoKKwlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMsIHVwLT5wY2ZsYWcpOworCWtmcmVlX3NrYihza2IpOworCXJldHVybiAtMTsKIH0KIAogLyoKQEAgLTEwOTAsMTQgKzExMTksMTYgQEAKICAqCU5vdGU6IGNhbGxlZCBvbmx5IGZyb20gdGhlIEJIIGhhbmRsZXIgY29udGV4dCwKICAqCXNvIHdlIGRvbid0IG5lZWQgdG8gbG9jayB0aGUgaGFzaGVzLgogICovCi1zdGF0aWMgaW50IHVkcF92NF9tY2FzdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoLAotCQkJCSBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkcikKK3N0YXRpYyBpbnQgX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgIHN0cnVjdCB1ZHBoZHIgICp1aCwKKwkJCQkgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCQkJICAgIHN0cnVjdCBobGlzdF9oZWFkIHVkcHRhYmxlW10pCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCWludCBkaWY7CiAKIAlyZWFkX2xvY2soJnVkcF9oYXNoX2xvY2spOwotCXNrID0gc2tfaGVhZCgmdWRwX2hhc2hbbnRvaHModWgtPmRlc3QpICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSk7CisJc2sgPSBza19oZWFkKCZ1ZHB0YWJsZVtudG9ocyh1aC0+ZGVzdCkgJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldKTsKIAlkaWYgPSBza2ItPmRldi0+aWZpbmRleDsKIAlzayA9IHVkcF92NF9tY2FzdF9uZXh0KHNrLCB1aC0+ZGVzdCwgZGFkZHIsIHVoLT5zb3VyY2UsIHNhZGRyLCBkaWYpOwogCWlmIChzaykgewpAQCAtMTEzMSw2NSArMTE2Miw3NSBAQAogICogT3RoZXJ3aXNlLCBjc3VtIGNvbXBsZXRpb24gcmVxdWlyZXMgY2hhY2tzdW1taW5nIHBhY2tldCBib2R5LAogICogaW5jbHVkaW5nIHVkcCBoZWFkZXIgYW5kIGZvbGRpbmcgaXQgdG8gc2tiLT5jc3VtLgogICovCi1zdGF0aWMgdm9pZCB1ZHBfY2hlY2tzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aCwKLQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdWxlbiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgdWRwNF9jc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcGhkciAqdWgpCiB7CiAJaWYgKHVoLT5jaGVjayA9PSAwKSB7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkgewotCQlpZiAoIXVkcF9jaGVjayh1aCwgdWxlbiwgc2FkZHIsIGRhZGRyLCBza2ItPmNzdW0pKQorCSAgICAgICBpZiAoIWNzdW1fdGNwdWRwX21hZ2ljKHNrYi0+bmguaXBoLT5zYWRkciwgc2tiLT5uaC5pcGgtPmRhZGRyLAorCQkJCSAgICAgIHNrYi0+bGVuLCBJUFBST1RPX1VEUCwgc2tiLT5jc3VtICAgICAgICkpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0KIAlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpCi0JCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKKwkJc2tiLT5jc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNrYi0+bmguaXBoLT5zYWRkciwKKwkJCQkJICAgICAgIHNrYi0+bmguaXBoLT5kYWRkciwKKwkJCQkJICAgICAgIHNrYi0+bGVuLCBJUFBST1RPX1VEUCwgMCk7CiAJLyogUHJvYmFibHksIHdlIHNob3VsZCBjaGVja3N1bSB1ZHAgaGVhZGVyIChpdCBzaG91bGQgYmUgaW4gY2FjaGUKIAkgKiBpbiBhbnkgY2FzZSkgYW5kIGRhdGEgaW4gdGlueSBwYWNrZXRzICg8IHJ4IGNvcHlicmVhaykuCiAJICovCisKKwkvKiBVRFAgPSBVRFAtTGl0ZSB3aXRoIGEgbm9uLXBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKi8KKwlVRFBfU0tCX0NCKHNrYiktPnBhcnRpYWxfY292ID0gMDsKIH0KIAogLyoKICAqCUFsbCB3ZSBuZWVkIHRvIGRvIGlzIGdldCB0aGUgc29ja2V0LCBhbmQgdGhlbiBkbyBhIGNoZWNrc3VtLiAKICAqLwogIAotaW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBfX3VkcDRfbGliX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHB0YWJsZVtdLAorCQkgICBpbnQgaXNfdWRwbGl0ZSkKIHsKICAgCXN0cnVjdCBzb2NrICpzazsKLSAgCXN0cnVjdCB1ZHBoZHIgKnVoOworICAJc3RydWN0IHVkcGhkciAqdWggPSBza2ItPmgudWg7CiAJdW5zaWduZWQgc2hvcnQgdWxlbjsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlKilza2ItPmRzdDsKIAlfX2JlMzIgc2FkZHIgPSBza2ItPm5oLmlwaC0+c2FkZHI7CiAJX19iZTMyIGRhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOwotCWludCBsZW4gPSBza2ItPmxlbjsKIAogCS8qCi0JICoJVmFsaWRhdGUgdGhlIHBhY2tldCBhbmQgdGhlIFVEUCBsZW5ndGguCisJICogIFZhbGlkYXRlIHRoZSBwYWNrZXQuCiAJICovCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSkKLQkJZ290byBub19oZWFkZXI7Ci0KLQl1aCA9IHNrYi0+aC51aDsKKwkJZ290byBkcm9wOwkJLyogTm8gc3BhY2UgZm9yIGhlYWRlci4gKi8KIAogCXVsZW4gPSBudG9ocyh1aC0+bGVuKTsKLQotCWlmICh1bGVuID4gbGVuIHx8IHVsZW4gPCBzaXplb2YoKnVoKSkKKwlpZiAodWxlbiA+IHNrYi0+bGVuKQogCQlnb3RvIHNob3J0X3BhY2tldDsKIAotCWlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSkKLQkJZ290byBzaG9ydF9wYWNrZXQ7CisJaWYoISBpc191ZHBsaXRlICkgewkJLyogVURQIHZhbGlkYXRlcyB1bGVuLiAqLwogCi0JdWRwX2NoZWNrc3VtX2luaXQoc2tiLCB1aCwgdWxlbiwgc2FkZHIsIGRhZGRyKTsKKwkJaWYgKHVsZW4gPCBzaXplb2YoKnVoKSB8fCBwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSkKKwkJCWdvdG8gc2hvcnRfcGFja2V0OworCisJCXVkcDRfY3N1bV9pbml0KHNrYiwgdWgpOworCisJfSBlbHNlIAl7CQkJLyogVURQLUxpdGUgdmFsaWRhdGVzIGNzY292LiAqLworCQlpZiAodWRwbGl0ZTRfY3N1bV9pbml0KHNrYiwgdWgpKQorCQkJZ290byBjc3VtX2Vycm9yOworCX0KIAogCWlmKHJ0LT5ydF9mbGFncyAmIChSVENGX0JST0FEQ0FTVHxSVENGX01VTFRJQ0FTVCkpCi0JCXJldHVybiB1ZHBfdjRfbWNhc3RfZGVsaXZlcihza2IsIHVoLCBzYWRkciwgZGFkZHIpOworCQlyZXR1cm4gX191ZHA0X2xpYl9tY2FzdF9kZWxpdmVyKHNrYiwgdWgsIHNhZGRyLCBkYWRkciwgdWRwdGFibGUpOwogCi0Jc2sgPSB1ZHBfdjRfbG9va3VwKHNhZGRyLCB1aC0+c291cmNlLCBkYWRkciwgdWgtPmRlc3QsIHNrYi0+ZGV2LT5pZmluZGV4KTsKKwlzayA9IF9fdWRwNF9saWJfbG9va3VwKHNhZGRyLCB1aC0+c291cmNlLCBkYWRkciwgdWgtPmRlc3QsCisJCQkgICAgICAgc2tiLT5kZXYtPmlmaW5kZXgsIHVkcHRhYmxlICAgICAgICApOwogCiAJaWYgKHNrICE9IE5VTEwpIHsKIAkJaW50IHJldCA9IHVkcF9xdWV1ZV9yY3Zfc2tiKHNrLCBza2IpOwogCQlzb2NrX3B1dChzayk7CiAKIAkJLyogYSByZXR1cm4gdmFsdWUgPiAwIG1lYW5zIHRvIHJlc3VibWl0IHRoZSBpbnB1dCwgYnV0Ci0JCSAqIGl0IGl0IHdhbnRzIHRoZSByZXR1cm4gdG8gYmUgLXByb3RvY29sLCBvciAwCisJCSAqIGl0IHdhbnRzIHRoZSByZXR1cm4gdG8gYmUgLXByb3RvY29sLCBvciAwCiAJCSAqLwogCQlpZiAocmV0ID4gMCkKIAkJCXJldHVybiAtcmV0OwpAQCAtMTIwMSwxMCArMTI0MiwxMCBAQAogCW5mX3Jlc2V0KHNrYik7CiAKIAkvKiBObyBzb2NrZXQuIERyb3AgcGFja2V0IHNpbGVudGx5LCBpZiBjaGVja3N1bSBpcyB3cm9uZyAqLwotCWlmICh1ZHBfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKKwlpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQogCQlnb3RvIGNzdW1fZXJyb3I7CiAKLQlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfTk9QT1JUUyk7CisJVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX05PUE9SVFMsIGlzX3VkcGxpdGUpOwogCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX1BPUlRfVU5SRUFDSCwgMCk7CiAKIAkvKgpAQCAtMTIxNSwzNiArMTI1Niw0MCBAQAogCXJldHVybigwKTsKIAogc2hvcnRfcGFja2V0OgotCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIlVEUDogc2hvcnQgcGFja2V0OiBGcm9tICV1LiV1LiV1LiV1OiV1ICVkLyVkIHRvICV1LiV1LiV1LiV1OiV1XG4iLAorCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgIlVEUCVzOiBzaG9ydCBwYWNrZXQ6IEZyb20gJXUuJXUuJXUuJXU6JXUgJWQvJWQgdG8gJXUuJXUuJXUuJXU6JXVcbiIsCisJCSAgICAgICBpc191ZHBsaXRlPyAiLUxpdGUiIDogIiIsCiAJCSAgICAgICBOSVBRVUFEKHNhZGRyKSwKIAkJICAgICAgIG50b2hzKHVoLT5zb3VyY2UpLAogCQkgICAgICAgdWxlbiwKLQkJICAgICAgIGxlbiwKKwkJICAgICAgIHNrYi0+bGVuLAogCQkgICAgICAgTklQUVVBRChkYWRkciksCiAJCSAgICAgICBudG9ocyh1aC0+ZGVzdCkpOwotbm9faGVhZGVyOgotCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUyk7Ci0Ja2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuKDApOworCWdvdG8gZHJvcDsKIAogY3N1bV9lcnJvcjoKIAkvKiAKIAkgKiBSRkMxMTIyOiBPSy4gIERpc2NhcmRzIHRoZSBiYWQgcGFja2V0IHNpbGVudGx5IChhcyBmYXIgYXMgCiAJICogdGhlIG5ldHdvcmsgaXMgY29uY2VybmVkLCBhbnl3YXkpIGFzIHBlciA0LjEuMy40IChNVVNUKS4gCiAJICovCi0JTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiVURQOiBiYWQgY2hlY2tzdW0uIEZyb20gJWQuJWQuJWQuJWQ6JWQgdG8gJWQuJWQuJWQuJWQ6JWQgdWxlbiAlZFxuIiwKKwlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJVRFAlczogYmFkIGNoZWNrc3VtLiBGcm9tICVkLiVkLiVkLiVkOiVkIHRvICVkLiVkLiVkLiVkOiVkIHVsZW4gJWRcbiIsCisJCSAgICAgICBpc191ZHBsaXRlPyAiLUxpdGUiIDogIiIsCiAJCSAgICAgICBOSVBRVUFEKHNhZGRyKSwKIAkJICAgICAgIG50b2hzKHVoLT5zb3VyY2UpLAogCQkgICAgICAgTklQUVVBRChkYWRkciksCiAJCSAgICAgICBudG9ocyh1aC0+ZGVzdCksCiAJCSAgICAgICB1bGVuKTsKIGRyb3A6Ci0JVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTKTsKKwlVRFBfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMsIGlzX3VkcGxpdGUpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybigwKTsKIH0KIAotc3RhdGljIGludCB1ZHBfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKK19faW5saW5lX18gaW50IHVkcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gX191ZHA0X2xpYl9yY3Yoc2tiLCB1ZHBfaGFzaCwgMCk7Cit9CisKK2ludCB1ZHBfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlsb2NrX3NvY2soc2spOwogCXVkcF9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CkBAIC0xMjU1LDggKzEzMDAsOSBAQAogLyoKICAqCVNvY2tldCBvcHRpb24gY29kZSBmb3IgVURQCiAgKi8KLXN0YXRpYyBpbnQgZG9fdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoraW50IHVkcF9saWJfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCSAgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuLAorCQkgICAgICAgaW50ICgqcHVzaF9wZW5kaW5nX2ZyYW1lcykoc3RydWN0IHNvY2sgKikpCiB7CiAJc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7CiAJaW50IHZhbDsKQEAgLTEyNzUsNyArMTMyMSw3IEBACiAJCX0gZWxzZSB7CiAJCQl1cC0+Y29ya2ZsYWcgPSAwOwogCQkJbG9ja19zb2NrKHNrKTsKLQkJCXVkcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB1cCk7CisJCQkoKnB1c2hfcGVuZGluZ19mcmFtZXMpKHNrKTsKIAkJCXJlbGVhc2Vfc29jayhzayk7CiAJCX0KIAkJYnJlYWs7CkBAIC0xMjkzLDYgKzEzMzksMzIgQEAKIAkJfQogCQlicmVhazsKIAorCS8qCisJICogCVVEUC1MaXRlJ3MgcGFydGlhbCBjaGVja3N1bSBjb3ZlcmFnZSAoUkZDIDM4MjgpLgorCSAqLworCS8qIFRoZSBzZW5kZXIgc2V0cyBhY3R1YWwgY2hlY2tzdW0gY292ZXJhZ2UgbGVuZ3RoIHZpYSB0aGlzIG9wdGlvbi4KKwkgKiBUaGUgY2FzZSBjb3ZlcmFnZSA+IHBhY2tldCBsZW5ndGggaXMgaGFuZGxlZCBieSBzZW5kIG1vZHVsZS4gKi8KKwljYXNlIFVEUExJVEVfU0VORF9DU0NPVjoKKwkJaWYgKCF1cC0+cGNmbGFnKSAgICAgICAgIC8qIERpc2FibGUgdGhlIG9wdGlvbiBvbiBVRFAgc29ja2V0cyAqLworCQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwkJaWYgKHZhbCAhPSAwICYmIHZhbCA8IDgpIC8qIElsbGVnYWwgY292ZXJhZ2U6IHVzZSBkZWZhdWx0ICg4KSAqLworCQkJdmFsID0gODsKKwkJdXAtPnBjc2xlbiA9IHZhbDsKKwkJdXAtPnBjZmxhZyB8PSBVRFBMSVRFX1NFTkRfQ0M7CisJCWJyZWFrOworCisgICAgICAgIC8qIFRoZSByZWNlaXZlciBzcGVjaWZpZXMgYSBtaW5pbXVtIGNoZWNrc3VtIGNvdmVyYWdlIHZhbHVlLiBUbyBtYWtlCisgICAgICAgICAqIHNlbnNlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgOCAoYXMgZG9uZSBiZWxvdykuIElmIHplcm8gaXMKKwkgKiB1c2VkLCB0aGlzIGFnYWluIG1lYW5zIGZ1bGwgY2hlY2tzdW0gY292ZXJhZ2UuICAgICAgICAgICAgICAgICAgICAgKi8KKwljYXNlIFVEUExJVEVfUkVDVl9DU0NPVjoKKwkJaWYgKCF1cC0+cGNmbGFnKSAgICAgICAgIC8qIERpc2FibGUgdGhlIG9wdGlvbiBvbiBVRFAgc29ja2V0cyAqLworCQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKKwkJaWYgKHZhbCAhPSAwICYmIHZhbCA8IDgpIC8qIEF2b2lkIHNpbGx5IG1pbmltYWwgdmFsdWVzLiAgICAgICAqLworCQkJdmFsID0gODsKKwkJdXAtPnBjcmxlbiA9IHZhbDsKKwkJdXAtPnBjZmxhZyB8PSBVRFBMSVRFX1JFQ1ZfQ0M7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCQlicmVhazsKQEAgLTEzMDEsMjYgKzEzNzMsMjggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHVkcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK2ludCB1ZHBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7Ci0JaWYgKGxldmVsICE9IFNPTF9VRFApCi0JCXJldHVybiBpcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwotCXJldHVybiBkb191ZHBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAobGV2ZWwgPT0gU09MX1VEUCAgfHwgIGxldmVsID09IFNPTF9VRFBMSVRFKQorCQlyZXR1cm4gdWRwX2xpYl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCisJCQkJCSAgdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMpOworCXJldHVybiBpcF9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotc3RhdGljIGludCBjb21wYXRfdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoraW50IGNvbXBhdF91ZHBfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7Ci0JaWYgKGxldmVsICE9IFNPTF9VRFApCi0JCXJldHVybiBjb21wYXRfaXBfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gZG9fdWRwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJaWYgKGxldmVsID09IFNPTF9VRFAgIHx8ICBsZXZlbCA9PSBTT0xfVURQTElURSkKKwkJcmV0dXJuIHVkcF9saWJfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLAorCQkJCQkgIHVkcF9wdXNoX3BlbmRpbmdfZnJhbWVzKTsKKwlyZXR1cm4gY29tcGF0X2lwX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBkb191ZHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK2ludCB1ZHBfbGliX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkgICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwogCWludCB2YWwsIGxlbjsKQEAgLTEzNDIsNiArMTQxNiwxNiBAQAogCQl2YWwgPSB1cC0+ZW5jYXBfdHlwZTsKIAkJYnJlYWs7CiAKKwkvKiBUaGUgZm9sbG93aW5nIHR3byBjYW5ub3QgYmUgY2hhbmdlZCBvbiBVRFAgc29ja2V0cywgdGhlIHJldHVybiBpcworCSAqIGFsd2F5cyAwICh3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgZnVsbCBjaGVja3N1bSBjb3ZlcmFnZSBvZiBVRFApLiAqLworCWNhc2UgVURQTElURV9TRU5EX0NTQ09WOgorCQl2YWwgPSB1cC0+cGNzbGVuOworCQlicmVhazsKKworCWNhc2UgVURQTElURV9SRUNWX0NTQ09WOgorCQl2YWwgPSB1cC0+cGNybGVuOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfTsKQEAgLTEzNTMsMjEgKzE0MzcsMjEgQEAKICAgCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVkcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoraW50IHVkcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewotCWlmIChsZXZlbCAhPSBTT0xfVURQKQotCQlyZXR1cm4gaXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gZG9fdWRwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJaWYgKGxldmVsID09IFNPTF9VRFAgIHx8ICBsZXZlbCA9PSBTT0xfVURQTElURSkKKwkJcmV0dXJuIHVkcF9saWJfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gaXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyBpbnQgY29tcGF0X3VkcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKK2ludCBjb21wYXRfdWRwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJCSBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7Ci0JaWYgKGxldmVsICE9IFNPTF9VRFApCi0JCXJldHVybiBjb21wYXRfaXBfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gZG9fdWRwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJaWYgKGxldmVsID09IFNPTF9VRFAgIHx8ICBsZXZlbCA9PSBTT0xfVURQTElURSkKKwkJcmV0dXJuIHVkcF9saWJfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gY29tcGF0X2lwX2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAjZW5kaWYKIC8qKgpAQCAtMTM4Nyw3ICsxNDcxLDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IGRhdGFncmFtX3BvbGwoZmlsZSwgc29jaywgd2FpdCk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0JCisJaW50IAlpc19saXRlID0gSVNfVURQTElURShzayk7CisKIAkvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBjaGVja3N1bSBlcnJvcnMgKi8KIAlpZiAoIChtYXNrICYgUE9MTFJETk9STSkgJiYKIAkgICAgICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCkBAIC0xMzk3LDggKzE0ODIsOCBAQAogCiAJCXNwaW5fbG9ja19iaCgmcmN2cS0+bG9jayk7CiAJCXdoaWxlICgoc2tiID0gc2tiX3BlZWsocmN2cSkpICE9IE5VTEwpIHsKLQkJCWlmICh1ZHBfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewotCQkJCVVEUF9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUyk7CisJCQlpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCQkJVURQX0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTLCBpc19saXRlKTsKIAkJCQlfX3NrYl91bmxpbmsoc2tiLCByY3ZxKTsKIAkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCX0gZWxzZSB7CkBAIC0xNDIwLDcgKzE1MDUsNyBAQAogc3RydWN0IHByb3RvIHVkcF9wcm90ID0gewogIAkubmFtZQkJICAgPSAiVURQIiwKIAkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCi0JLmNsb3NlCQkgICA9IHVkcF9jbG9zZSwKKwkuY2xvc2UJCSAgID0gdWRwX2xpYl9jbG9zZSwKIAkuY29ubmVjdAkgICA9IGlwNF9kYXRhZ3JhbV9jb25uZWN0LAogCS5kaXNjb25uZWN0CSAgID0gdWRwX2Rpc2Nvbm5lY3QsCiAJLmlvY3RsCQkgICA9IHVkcF9pb2N0bCwKQEAgLTE0MzEsOCArMTUxNiw4IEBACiAJLnJlY3Ztc2cJICAgPSB1ZHBfcmVjdm1zZywKIAkuc2VuZHBhZ2UJICAgPSB1ZHBfc2VuZHBhZ2UsCiAJLmJhY2tsb2dfcmN2CSAgID0gdWRwX3F1ZXVlX3Jjdl9za2IsCi0JLmhhc2gJCSAgID0gdWRwX3Y0X2hhc2gsCi0JLnVuaGFzaAkJICAgPSB1ZHBfdjRfdW5oYXNoLAorCS5oYXNoCQkgICA9IHVkcF9saWJfaGFzaCwKKwkudW5oYXNoCQkgICA9IHVkcF9saWJfdW5oYXNoLAogCS5nZXRfcG9ydAkgICA9IHVkcF92NF9nZXRfcG9ydCwKIAkub2JqX3NpemUJICAgPSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSwKICNpZmRlZiBDT05GSUdfQ09NUEFUCkBAIC0xNDUxLDcgKzE1MzYsNyBAQAogCiAJZm9yIChzdGF0ZS0+YnVja2V0ID0gMDsgc3RhdGUtPmJ1Y2tldCA8IFVEUF9IVEFCTEVfU0laRTsgKytzdGF0ZS0+YnVja2V0KSB7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCQlza19mb3JfZWFjaChzaywgbm9kZSwgJnVkcF9oYXNoW3N0YXRlLT5idWNrZXRdKSB7CisJCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCBzdGF0ZS0+aGFzaHRhYmxlICsgc3RhdGUtPmJ1Y2tldCkgewogCQkJaWYgKHNrLT5za19mYW1pbHkgPT0gc3RhdGUtPmZhbWlseSkKIAkJCQlnb3RvIGZvdW5kOwogCQl9CkBAIC0xNDcyLDcgKzE1NTcsNyBAQAogCX0gd2hpbGUgKHNrICYmIHNrLT5za19mYW1pbHkgIT0gc3RhdGUtPmZhbWlseSk7CiAKIAlpZiAoIXNrICYmICsrc3RhdGUtPmJ1Y2tldCA8IFVEUF9IVEFCTEVfU0laRSkgewotCQlzayA9IHNrX2hlYWQoJnVkcF9oYXNoW3N0YXRlLT5idWNrZXRdKTsKKwkJc2sgPSBza19oZWFkKHN0YXRlLT5oYXNodGFibGUgKyBzdGF0ZS0+YnVja2V0KTsKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCXJldHVybiBzazsKQEAgLTE1MjIsNiArMTYwNyw3IEBACiAJaWYgKCFzKQogCQlnb3RvIG91dDsKIAlzLT5mYW1pbHkJCT0gYWZpbmZvLT5mYW1pbHk7CisJcy0+aGFzaHRhYmxlCQk9IGFmaW5mby0+aGFzaHRhYmxlOwogCXMtPnNlcV9vcHMuc3RhcnQJPSB1ZHBfc2VxX3N0YXJ0OwogCXMtPnNlcV9vcHMubmV4dAkJPSB1ZHBfc2VxX25leHQ7CiAJcy0+c2VxX29wcy5zaG93CQk9IGFmaW5mby0+c2VxX3Nob3c7CkBAIC0xNTg4LDcgKzE2NzQsNyBAQAogCQlhdG9taWNfcmVhZCgmc3AtPnNrX3JlZmNudCksIHNwKTsKIH0KIAotc3RhdGljIGludCB1ZHA0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoraW50IHVkcDRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTI3c1xuIiwKQEAgLTE2MTEsNiArMTY5Nyw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJ1ZHAiLAogCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkuaGFzaHRhYmxlCT0gdWRwX2hhc2gsCiAJLnNlcV9zaG93CT0gdWRwNF9zZXFfc2hvdywKIAkuc2VxX2ZvcHMJPSAmdWRwNF9zZXFfZm9wcywKIH07CkBAIC0xNjMzLDYgKzE3MjAsOCBAQAogRVhQT1JUX1NZTUJPTCh1ZHBfZ2V0X3BvcnQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfcHJvdCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9zZW5kbXNnKTsKK0VYUE9SVF9TWU1CT0wodWRwX2xpYl9nZXRzb2Nrb3B0KTsKK0VYUE9SVF9TWU1CT0wodWRwX2xpYl9zZXRzb2Nrb3B0KTsKIEVYUE9SVF9TWU1CT0wodWRwX3BvbGwpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcF9pbXBsLmggYi9uZXQvaXB2NC91ZHBfaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjQyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaXB2NC91ZHBfaW1wbC5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgX1VEUDRfSU1QTF9ICisjZGVmaW5lIF9VRFA0X0lNUExfSAorI2luY2x1ZGUgPG5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXQvdWRwbGl0ZS5oPgorI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgorCitleHRlcm4gaW50ICAJX191ZHA0X2xpYl9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IGhsaXN0X2hlYWQgW10sIGludCApOworZXh0ZXJuIHZvaWQgCV9fdWRwNF9saWJfZXJyKHN0cnVjdCBza19idWZmICosIHUzMiwgc3RydWN0IGhsaXN0X2hlYWQgW10pOworCitleHRlcm4gaW50CV9fdWRwX2xpYl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0sCisJCQkJICAgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSwgaW50ICpwb3J0X3JvdmVyLAorCQkgICAgICAgCSAgICAgICAJICAgaW50ICgqKShjb25zdCBzdHJ1Y3Qgc29jayosY29uc3Qgc3RydWN0IHNvY2sqKSk7CitleHRlcm4gaW50CWlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICosIGNvbnN0IHN0cnVjdCBzb2NrICopOworCisKK2V4dGVybiBpbnQJdWRwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworZXh0ZXJuIGludAl1ZHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKKworI2lmZGVmIENPTkZJR19DT01QQVQKK2V4dGVybiBpbnQJY29tcGF0X3VkcF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKK2V4dGVybiBpbnQJY29tcGF0X3VkcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkgICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworI2VuZGlmCitleHRlcm4gaW50CXVkcF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCisJCQkgICAgc2l6ZV90IGxlbiwgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbik7CitleHRlcm4gaW50CXVkcF9zZW5kcGFnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb2Zmc2V0LAorCQkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKK2V4dGVybiBpbnQJdWRwX3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CXVkcF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitleHRlcm4gaW50CXVkcDRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpOworI2VuZGlmCisjZW5kaWYJLyogX1VEUDRfSU1QTF9IICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBsaXRlLmMgYi9uZXQvaXB2NC91ZHBsaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4ZmUxZQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY0L3VkcGxpdGUuYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqICBVRFBMSVRFICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVURQLUxpdGUgcHJvdG9jb2wgKFJGQyAzODI4KS4KKyAqCisgKiAgVmVyc2lvbjogICAgJElkOiB1ZHBsaXRlLmMsdiAxLjI1IDIwMDYvMTAvMTkgMDc6MjI6MzYgZ2Vycml0IEV4cCAkCisgKgorICogIEF1dGhvcnM6ICAgIEdlcnJpdCBSZW5rZXIgICAgICAgPGdlcnJpdEBlcmcuYWJkbi5hYy51az4KKyAqCisgKiAgQ2hhbmdlczoKKyAqICBGaXhlczoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSAidWRwX2ltcGwuaCIKK0RFRklORV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcGxpdGVfc3RhdGlzdGljcykJX19yZWFkX21vc3RseTsKKworc3RydWN0IGhsaXN0X2hlYWQgCXVkcGxpdGVfaGFzaFtVRFBfSFRBQkxFX1NJWkVdOworc3RhdGljIGludAkJdWRwbGl0ZV9wb3J0X3JvdmVyOworCitpbnQgdWRwbGl0ZV9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHAsCisJCSAgICAgaW50ICgqYykoY29uc3Qgc3RydWN0IHNvY2sgKiwgY29uc3Qgc3RydWN0IHNvY2sgKikpCit7CisJcmV0dXJuICBfX3VkcF9saWJfZ2V0X3BvcnQoc2ssIHAsIHVkcGxpdGVfaGFzaCwgJnVkcGxpdGVfcG9ydF9yb3ZlciwgYyk7Cit9CisKK3N0YXRpYyBpbnQgdWRwbGl0ZV92NF9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCit7CisJcmV0dXJuIHVkcGxpdGVfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjRfcmN2X3NhZGRyX2VxdWFsKTsKK30KKworc3RhdGljIGludCB1ZHBsaXRlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBfX3VkcDRfbGliX3Jjdihza2IsIHVkcGxpdGVfaGFzaCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHVkcGxpdGVfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQoreworCXJldHVybiBfX3VkcDRfbGliX2Vycihza2IsIGluZm8sIHVkcGxpdGVfaGFzaCk7Cit9CisKK3N0YXRpYwlzdHJ1Y3QgbmV0X3Byb3RvY29sIHVkcGxpdGVfcHJvdG9jb2wgPSB7CisJLmhhbmRsZXIJPSB1ZHBsaXRlX3JjdiwKKwkuZXJyX2hhbmRsZXIJPSB1ZHBsaXRlX2VyciwKKwkubm9fcG9saWN5CT0gMSwKK307CisKK3N0cnVjdCBwcm90byAJdWRwbGl0ZV9wcm90ID0geworCS5uYW1lCQkgICA9ICJVRFAtTGl0ZSIsCisJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAorCS5jbG9zZQkJICAgPSB1ZHBfbGliX2Nsb3NlLAorCS5jb25uZWN0CSAgID0gaXA0X2RhdGFncmFtX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJICAgPSB1ZHBfZGlzY29ubmVjdCwKKwkuaW9jdGwJCSAgID0gdWRwX2lvY3RsLAorCS5pbml0CQkgICA9IHVkcGxpdGVfc2tfaW5pdCwKKwkuZGVzdHJveQkgICA9IHVkcF9kZXN0cm95X3NvY2ssCisJLnNldHNvY2tvcHQJICAgPSB1ZHBfc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHVkcF9nZXRzb2Nrb3B0LAorCS5zZW5kbXNnCSAgID0gdWRwX3NlbmRtc2csCisJLnJlY3Ztc2cJICAgPSB1ZHBfcmVjdm1zZywKKwkuc2VuZHBhZ2UJICAgPSB1ZHBfc2VuZHBhZ2UsCisJLmJhY2tsb2dfcmN2CSAgID0gdWRwX3F1ZXVlX3Jjdl9za2IsCisJLmhhc2gJCSAgID0gdWRwX2xpYl9oYXNoLAorCS51bmhhc2gJCSAgID0gdWRwX2xpYl91bmhhc2gsCisJLmdldF9wb3J0CSAgID0gdWRwbGl0ZV92NF9nZXRfcG9ydCwKKwkub2JqX3NpemUJICAgPSBzaXplb2Yoc3RydWN0IHVkcF9zb2NrKSwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3VkcF9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF91ZHBfZ2V0c29ja29wdCwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgdWRwbGl0ZTRfcHJvdG9zdyA9IHsKKwkudHlwZQkJPSAgU09DS19ER1JBTSwKKwkucHJvdG9jb2wJPSAgSVBQUk9UT19VRFBMSVRFLAorCS5wcm90CQk9ICAmdWRwbGl0ZV9wcm90LAorCS5vcHMJCT0gICZpbmV0X2RncmFtX29wcywKKwkuY2FwYWJpbGl0eQk9IC0xLAorCS5ub19jaGVjawk9ICAwLAkJLyogbXVzdCBjaGVja3N1bSAoUkZDIDM4MjgpICovCisJLmZsYWdzCQk9ICBJTkVUX1BST1RPU1dfUEVSTUFORU5ULAorfTsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZHBsaXRlNF9zZXFfZm9wczsKK3N0YXRpYyBzdHJ1Y3QgdWRwX3NlcV9hZmluZm8gdWRwbGl0ZTRfc2VxX2FmaW5mbyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInVkcGxpdGUiLAorCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkuaGFzaHRhYmxlCT0gdWRwbGl0ZV9oYXNoLAorCS5zZXFfc2hvdwk9IHVkcDRfc2VxX3Nob3csCisJLnNlcV9mb3BzCT0gJnVkcGxpdGU0X3NlcV9mb3BzLAorfTsKKyNlbmRpZgorCit2b2lkIF9faW5pdCB1ZHBsaXRlNF9yZWdpc3Rlcih2b2lkKQoreworCWlmIChwcm90b19yZWdpc3RlcigmdWRwbGl0ZV9wcm90LCAxKSkKKwkJZ290byBvdXRfcmVnaXN0ZXJfZXJyOworCisJaWYgKGluZXRfYWRkX3Byb3RvY29sKCZ1ZHBsaXRlX3Byb3RvY29sLCBJUFBST1RPX1VEUExJVEUpIDwgMCkKKwkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcm90bzsKKworCWluZXRfcmVnaXN0ZXJfcHJvdG9zdygmdWRwbGl0ZTRfcHJvdG9zdyk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmICh1ZHBfcHJvY19yZWdpc3RlcigmdWRwbGl0ZTRfc2VxX2FmaW5mbykpIC8qIHVkcGxpdGU0X3Byb2NfaW5pdCgpICovCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciAvcHJvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKwlyZXR1cm47CisKK291dF91bnJlZ2lzdGVyX3Byb3RvOgorCXByb3RvX3VucmVnaXN0ZXIoJnVkcGxpdGVfcHJvdCk7CitvdXRfcmVnaXN0ZXJfZXJyOgorCXByaW50ayhLRVJOX0NSSVQgIiVzOiBDYW5ub3QgYWRkIFVEUC1MaXRlIHByb3RvY29sLlxuIiwgX19GVU5DVElPTl9fKTsKK30KKworRVhQT1JUX1NZTUJPTCh1ZHBsaXRlX2hhc2gpOworRVhQT1JUX1NZTUJPTCh1ZHBsaXRlX3Byb3QpOworRVhQT1JUX1NZTUJPTCh1ZHBsaXRlX2dldF9wb3J0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggMWJlZDBjZC4uZDQxMDdiYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTcyLDggKzcyLDggQEAKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsICpkc3RfcHJldjsKIAlzdHJ1Y3QgcnRhYmxlICpydDAgPSAoc3RydWN0IHJ0YWJsZSopKCpkc3RfcCk7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBydDA7Ci0JdTMyIHJlbW90ZSA9IGZsLT5mbDRfZHN0OwotCXUzMiBsb2NhbCAgPSBmbC0+Zmw0X3NyYzsKKwlfX2JlMzIgcmVtb3RlID0gZmwtPmZsNF9kc3Q7CisJX19iZTMyIGxvY2FsICA9IGZsLT5mbDRfc3JjOwogCXN0cnVjdCBmbG93aSBmbF90dW5uZWwgPSB7CiAJCS5ubF91ID0gewogCQkJLmlwNF91ID0gewpAQCAtMTk5LDExICsxOTksMTIgQEAKIAlpZiAoIShpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfTUYgfCBJUF9PRkZTRVQpKSkgewogCQlzd2l0Y2ggKGlwaC0+cHJvdG9jb2wpIHsKIAkJY2FzZSBJUFBST1RPX1VEUDoKKwkJY2FzZSBJUFBST1RPX1VEUExJVEU6CiAJCWNhc2UgSVBQUk9UT19UQ1A6CiAJCWNhc2UgSVBQUk9UT19TQ1RQOgogCQljYXNlIElQUFJPVE9fRENDUDoKIAkJCWlmIChwc2tiX21heV9wdWxsKHNrYiwgeHBydGggKyA0IC0gc2tiLT5kYXRhKSkgewotCQkJCXUxNiAqcG9ydHMgPSAodTE2ICopeHBydGg7CisJCQkJX19iZTE2ICpwb3J0cyA9IChfX2JlMTYgKil4cHJ0aDsKIAogCQkJCWZsLT5mbF9pcF9zcG9ydCA9IHBvcnRzWzBdOwogCQkJCWZsLT5mbF9pcF9kcG9ydCA9IHBvcnRzWzFdOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvS2NvbmZpZyBiL25ldC9pcHY2L0tjb25maWcKaW5kZXggNmU0OGY1Mi4uZGViNDEwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9LY29uZmlnCkBAIC0xOTYsMTAgKzE5NiwzIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUFY2X1JPVVRFX0ZXTUFSSwotCWJvb2wgIklQdjY6IHVzZSBuZXRmaWx0ZXIgTUFSSyB2YWx1ZSBhcyByb3V0aW5nIGtleSIKLQlkZXBlbmRzIG9uIElQVjZfTVVMVElQTEVfVEFCTEVTICYmIE5FVEZJTFRFUgotCS0tLWhlbHAtLS0KLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNwZWNpZnkgZGlmZmVyZW50IHJvdXRlcyBmb3IKLQkgIHBhY2tldHMgd2l0aCBkaWZmZXJlbnQgbWFyayB2YWx1ZXMgKHNlZSBpcHRhYmxlcyg4KSwgTUFSSyB0YXJnZXQpLgotCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9NYWtlZmlsZSBiL25ldC9pcHY2L01ha2VmaWxlCmluZGV4IGFkZGNjMDEuLjhiYWNkYTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L01ha2VmaWxlCisrKyBiL25ldC9pcHY2L01ha2VmaWxlCkBAIC01LDggKzUsOCBAQAogb2JqLSQoQ09ORklHX0lQVjYpICs9IGlwdjYubwogCiBpcHY2LW9ianMgOj0JYWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXAotCQlyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyByYXcubyBcCi0JCXByb3RvY29sLm8gaWNtcC5vIG1jYXN0Lm8gcmVhc3NlbWJseS5vIHRjcF9pcHY2Lm8gXAorCQlyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyB1ZHBsaXRlLm8gXAorCQlyYXcubyBwcm90b2NvbC5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIFwKIAkJZXh0aGRycy5vIHN5c2N0bF9uZXRfaXB2Ni5vIGRhdGFncmFtLm8gcHJvYy5vIFwKIAkJaXA2X2Zsb3dsYWJlbC5vIGlwdjZfc3ltcy5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGIzMTJhNWYuLmE1ZThkMjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMjMyLDcgKzIzMiw3IEBACiAKIGludCBfX2lwdjZfYWRkcl90eXBlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKIHsKLQl1MzIgc3Q7CisJX19iZTMyIHN0OwogCiAJc3QgPSBhZGRyLT5zNl9hZGRyMzJbMF07CiAKQEAgLTExNjQsNyArMTE2NCw3IEBACiBpbnQgaXB2Nl9nZXRfc2FkZHIoc3RydWN0IGRzdF9lbnRyeSAqZHN0LAogCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyKQogewotCXJldHVybiBpcHY2X2Rldl9nZXRfc2FkZHIoZHN0ID8gKChzdHJ1Y3QgcnQ2X2luZm8gKilkc3QpLT5ydDZpX2lkZXYtPmRldiA6IE5VTEwsIGRhZGRyLCBzYWRkcik7CisJcmV0dXJuIGlwdjZfZGV2X2dldF9zYWRkcihkc3QgPyBpcDZfZHN0X2lkZXYoZHN0KS0+ZGV2IDogTlVMTCwgZGFkZHIsIHNhZGRyKTsKIH0KIAogCkBAIC0zMDk4LDEwICszMDk4LDkgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaW5ldDZfaWZhZGRyX21zZ3NpemUodm9pZCkKIHsKLQlyZXR1cm4gbmxtc2dfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykgKwotCQkJCW5sYV90b3RhbF9zaXplKDE2KSArCi0JCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmFfY2FjaGVpbmZvKSkgKwotCQkJCTEyOCk7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkKKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxNikgLyogSUZBX0FERFJFU1MgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKTsKIH0KIAogc3RhdGljIGludCBpbmV0Nl9maWxsX2lmYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmEsCkBAIC0zMzI5LDEwICszMzI4LDggQEAKIAogCWVyciA9IGluZXQ2X2ZpbGxfaWZhZGRyKHNrYiwgaWZhLCBORVRMSU5LX0NCKGluX3NrYikucGlkLAogCQkJCW5saC0+bmxtc2dfc2VxLCBSVE1fTkVXQUREUiwgMCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gZXJyb3V0X2lmYTsKLQl9CisJLyogZmFpbHVyZSBpbXBsaWVzIEJVRyBpbiBpbmV0Nl9pZmFkZHJfbXNnc2l6ZSgpICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF91bmljYXN0KHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBpZCk7CiBlcnJvdXRfaWZhOgpAQCAtMzM1MSwxMCArMzM0OCw4IEBACiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gaW5ldDZfZmlsbF9pZmFkZHIoc2tiLCBpZmEsIDAsIDAsIGV2ZW50LCAwKTsKLQlpZiAoZXJyIDwgMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCS8qIGZhaWx1cmUgaW1wbGllcyBCVUcgaW4gaW5ldDZfaWZhZGRyX21zZ3NpemUoKSAqLworCUJVR19PTihlcnIgPCAwKTsKIAogCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CiBlcnJvdXQ6CkBAIC0zMzY1LDYgKzMzNjAsOCBAQAogc3RhdGljIHZvaWQgaW5saW5lIGlwdjZfc3RvcmVfZGV2Y29uZihzdHJ1Y3QgaXB2Nl9kZXZjb25mICpjbmYsCiAJCQkJX19zMzIgKmFycmF5LCBpbnQgYnl0ZXMpCiB7CisJQlVHX09OKGJ5dGVzIDwgKERFVkNPTkZfTUFYICogNCkpOworCiAJbWVtc2V0KGFycmF5LCAwLCBieXRlcyk7CiAJYXJyYXlbREVWQ09ORl9GT1JXQVJESU5HXSA9IGNuZi0+Zm9yd2FyZGluZzsKIAlhcnJheVtERVZDT05GX0hPUExJTUlUXSA9IGNuZi0+aG9wX2xpbWl0OwpAQCAtMzM5Nyw4MCArMzM5NCw3NiBAQAogCWFycmF5W0RFVkNPTkZfUFJPWFlfTkRQXSA9IGNuZi0+cHJveHlfbmRwOwogfQogCi0vKiBNYXhpbXVtIGxlbmd0aCBvZiBpZmluZm9tc2cgYXR0cmlidXRlcyAqLwotI2RlZmluZSBJTkVUNl9JRklORk9fUlRBX1NQQUNFIFwKLQkJUlRBX1NQQUNFKElGTkFNU0laKSAvKiBJRk5BTUUgKi8gKyBcCi0JCVJUQV9TUEFDRShNQVhfQUREUl9MRU4pIC8qIEFERFJFU1MgKi8gKwlcCi0JCVJUQV9TUEFDRShzaXplb2YodTMyKSkgLyogTVRVICovICsgXAotCQlSVEFfU1BBQ0Uoc2l6ZW9mKGludCkpIC8qIExJTksgKi8gKyBcCi0JCVJUQV9TUEFDRSgwKSAvKiBQUk9USU5GTyAqLyArIFwKLQkJUlRBX1NQQUNFKHNpemVvZih1MzIpKSAvKiBGTEFHUyAqLyArIFwKLQkJUlRBX1NQQUNFKHNpemVvZihzdHJ1Y3QgaWZsYV9jYWNoZWluZm8pKSAvKiBDQUNIRUlORk8gKi8gKyBcCi0JCVJUQV9TUEFDRShzaXplb2YoX19zMzJbREVWQ09ORl9NQVhdKSkgLyogQ09ORiAqLworc3RhdGljIGlubGluZSBzaXplX3QgaW5ldDZfaWZfbmxtc2dfc2l6ZSh2b2lkKQoreworCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoSUZOQU1TSVopIC8qIElGTEFfSUZOQU1FICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoTUFYX0FERFJfTEVOKSAvKiBJRkxBX0FERFJFU1MgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX01UVSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTElOSyAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKCAvKiBJRkxBX1BST1RJTkZPICovCisJCQlubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX0lORVQ2X0ZMQUdTICovCisJCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZsYV9jYWNoZWluZm8pKQorCQkJKyBubGFfdG90YWxfc2l6ZShERVZDT05GX01BWCAqIDQpIC8qIElGTEFfSU5FVDZfQ09ORiAqLworCQkgKTsKK30KIAogc3RhdGljIGludCBpbmV0Nl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCAKIAkJCSAgICAgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJKmRldiA9IGlkZXYtPmRldjsKLQlfX3MzMgkJCSphcnJheSA9IE5VTEw7Ci0Jc3RydWN0IGlmaW5mb21zZwkqcjsKLQlzdHJ1Y3Qgbmxtc2doZHIgCSpubGg7Ci0JdW5zaWduZWQgY2hhcgkJKmIgPSBza2ItPnRhaWw7Ci0Jc3RydWN0IHJ0YXR0cgkJKnN1YmF0dHI7Ci0JX191MzIJCQltdHUgPSBkZXYtPm10dTsKLQlzdHJ1Y3QgaWZsYV9jYWNoZWluZm8JY2k7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGlkZXYtPmRldjsKKwlzdHJ1Y3QgbmxhdHRyICpjb25mOworCXN0cnVjdCBpZmluZm9tc2cgKmhkcjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwl2b2lkICpwcm90b2luZm87CisJc3RydWN0IGlmbGFfY2FjaGVpbmZvIGNpOwogCi0JbmxoID0gTkxNU0dfTkVXKHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKnIpLCBmbGFncyk7Ci0JciA9IE5MTVNHX0RBVEEobmxoKTsKLQlyLT5pZmlfZmFtaWx5ID0gQUZfSU5FVDY7Ci0Jci0+X19pZmlfcGFkID0gMDsKLQlyLT5pZmlfdHlwZSA9IGRldi0+dHlwZTsKLQlyLT5pZmlfaW5kZXggPSBkZXYtPmlmaW5kZXg7Ci0Jci0+aWZpX2ZsYWdzID0gZGV2X2dldF9mbGFncyhkZXYpOwotCXItPmlmaV9jaGFuZ2UgPSAwOworCW5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCBldmVudCwgc2l6ZW9mKCpoZHIpLCBmbGFncyk7CisJaWYgKG5saCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQlSVEFfUFVUKHNrYiwgSUZMQV9JRk5BTUUsIHN0cmxlbihkZXYtPm5hbWUpKzEsIGRldi0+bmFtZSk7CisJaGRyID0gbmxtc2dfZGF0YShubGgpOworCWhkci0+aWZpX2ZhbWlseSA9IEFGX0lORVQ2OworCWhkci0+X19pZmlfcGFkID0gMDsKKwloZHItPmlmaV90eXBlID0gZGV2LT50eXBlOworCWhkci0+aWZpX2luZGV4ID0gZGV2LT5pZmluZGV4OworCWhkci0+aWZpX2ZsYWdzID0gZGV2X2dldF9mbGFncyhkZXYpOworCWhkci0+aWZpX2NoYW5nZSA9IDA7CisKKwlOTEFfUFVUX1NUUklORyhza2IsIElGTEFfSUZOQU1FLCBkZXYtPm5hbWUpOwogCiAJaWYgKGRldi0+YWRkcl9sZW4pCi0JCVJUQV9QVVQoc2tiLCBJRkxBX0FERFJFU1MsIGRldi0+YWRkcl9sZW4sIGRldi0+ZGV2X2FkZHIpOworCQlOTEFfUFVUKHNrYiwgSUZMQV9BRERSRVNTLCBkZXYtPmFkZHJfbGVuLCBkZXYtPmRldl9hZGRyKTsKIAotCVJUQV9QVVQoc2tiLCBJRkxBX01UVSwgc2l6ZW9mKG10dSksICZtdHUpOworCU5MQV9QVVRfVTMyKHNrYiwgSUZMQV9NVFUsIGRldi0+bXR1KTsKIAlpZiAoZGV2LT5pZmluZGV4ICE9IGRldi0+aWZsaW5rKQotCQlSVEFfUFVUKHNrYiwgSUZMQV9MSU5LLCBzaXplb2YoaW50KSwgJmRldi0+aWZsaW5rKTsKLQkJCQotCXN1YmF0dHIgPSAoc3RydWN0IHJ0YXR0ciopc2tiLT50YWlsOworCQlOTEFfUFVUX1UzMihza2IsIElGTEFfTElOSywgZGV2LT5pZmxpbmspOwogCi0JUlRBX1BVVChza2IsIElGTEFfUFJPVElORk8sIDAsIE5VTEwpOworCXByb3RvaW5mbyA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgSUZMQV9QUk9USU5GTyk7CisJaWYgKHByb3RvaW5mbyA9PSBOVUxMKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCS8qIHJldHVybiB0aGUgZGV2aWNlIGZsYWdzICovCi0JUlRBX1BVVChza2IsIElGTEFfSU5FVDZfRkxBR1MsIHNpemVvZihfX3UzMiksICZpZGV2LT5pZl9mbGFncyk7CisJTkxBX1BVVF9VMzIoc2tiLCBJRkxBX0lORVQ2X0ZMQUdTLCBpZGV2LT5pZl9mbGFncyk7CiAKLQkvKiByZXR1cm4gaW50ZXJmYWNlIGNhY2hlaW5mbyAqLwogCWNpLm1heF9yZWFzbV9sZW4gPSBJUFY2X01BWFBMRU47CiAJY2kudHN0YW1wID0gKF9fdTMyKShUSU1FX0RFTFRBKGlkZXYtPnRzdGFtcCwgSU5JVElBTF9KSUZGSUVTKSAvIEhaICogMTAwCiAJCSAgICArIFRJTUVfREVMVEEoaWRldi0+dHN0YW1wLCBJTklUSUFMX0pJRkZJRVMpICUgSFogKiAxMDAgLyBIWik7CiAJY2kucmVhY2hhYmxlX3RpbWUgPSBpZGV2LT5uZF9wYXJtcy0+cmVhY2hhYmxlX3RpbWU7CiAJY2kucmV0cmFuc190aW1lID0gaWRldi0+bmRfcGFybXMtPnJldHJhbnNfdGltZTsKLQlSVEFfUFVUKHNrYiwgSUZMQV9JTkVUNl9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSk7Ci0JCi0JLyogcmV0dXJuIHRoZSBkZXZpY2Ugc3lzY3RsIHBhcmFtcyAqLwotCWlmICgoYXJyYXkgPSBrbWFsbG9jKERFVkNPTkZfTUFYICogc2l6ZW9mKCphcnJheSksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQotCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOwotCWlwdjZfc3RvcmVfZGV2Y29uZigmaWRldi0+Y25mLCBhcnJheSwgREVWQ09ORl9NQVggKiBzaXplb2YoKmFycmF5KSk7Ci0JUlRBX1BVVChza2IsIElGTEFfSU5FVDZfQ09ORiwgREVWQ09ORl9NQVggKiBzaXplb2YoKmFycmF5KSwgYXJyYXkpOworCU5MQV9QVVQoc2tiLCBJRkxBX0lORVQ2X0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgJmNpKTsKKworCWNvbmYgPSBubGFfcmVzZXJ2ZShza2IsIElGTEFfSU5FVDZfQ09ORiwgREVWQ09ORl9NQVggKiBzaXplb2YoczMyKSk7CisJaWYgKGNvbmYgPT0gTlVMTCkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaXB2Nl9zdG9yZV9kZXZjb25mKCZpZGV2LT5jbmYsIG5sYV9kYXRhKGNvbmYpLCBubGFfbGVuKGNvbmYpKTsKIAogCS8qIFhYWCAtIFN0YXRpc3RpY3MvTUMgbm90IGltcGxlbWVudGVkICovCi0Jc3ViYXR0ci0+cnRhX2xlbiA9IHNrYi0+dGFpbCAtICh1OCopc3ViYXR0cjsKIAotCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKLQlrZnJlZShhcnJheSk7Ci0JcmV0dXJuIHNrYi0+bGVuOworCW5sYV9uZXN0X2VuZChza2IsIHByb3RvaW5mbyk7CisJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CiAKLW5sbXNnX2ZhaWx1cmU6Ci1ydGF0dHJfZmFpbHVyZToKLQlrZnJlZShhcnJheSk7Ci0Jc2tiX3RyaW0oc2tiLCBiIC0gc2tiLT5kYXRhKTsKLQlyZXR1cm4gLTE7CitubGFfcHV0X2ZhaWx1cmU6CisJcmV0dXJuIG5sbXNnX2NhbmNlbChza2IsIG5saCk7CiB9CiAKIHN0YXRpYyBpbnQgaW5ldDZfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQpAQCAtMzUwMSwxOCArMzQ5NCwxNSBAQAogdm9pZCBpbmV0Nl9pZmluZm9fbm90aWZ5KGludCBldmVudCwgc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBwYXlsb2FkID0gc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpICsgSU5FVDZfSUZJTkZPX1JUQV9TUEFDRTsKIAlpbnQgZXJyID0gLUVOT0JVRlM7CiAJCi0Jc2tiID0gbmxtc2dfbmV3KG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCksIEdGUF9BVE9NSUMpOworCXNrYiA9IG5sbXNnX25ldyhpbmV0Nl9pZl9ubG1zZ19zaXplKCksIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBpbmV0Nl9maWxsX2lmaW5mbyhza2IsIGlkZXYsIDAsIDAsIGV2ZW50LCAwKTsKLQlpZiAoZXJyIDwgMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJZ290byBlcnJvdXQ7Ci0JfQorCS8qIGZhaWx1cmUgaW1wbGllcyBCVUcgaW4gaW5ldDZfaWZfbmxtc2dfc2l6ZSgpICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF9ub3RpZnkoc2tiLCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKIGVycm91dDoKQEAgLTM1MjAsMjIgKzM1MTAsMjYgQEAKIAkJcnRubF9zZXRfc2tfZXJyKFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CiB9CiAKLS8qIE1heGltdW0gbGVuZ3RoIG9mIHByZWZpeF9jYWNoZWluZm8gYXR0cmlidXRlcyAqLwotI2RlZmluZSBJTkVUNl9QUkVGSVhfUlRBX1NQQUNFIFwKLQkJUlRBX1NQQUNFKHNpemVvZigoKHN0cnVjdCBwcmVmaXhfaW5mbyAqKU5VTEwpLT5wcmVmaXgpKSAvKiBBRERSRVNTICovICsgXAotCQlSVEFfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBwcmVmaXhfY2FjaGVpbmZvKSkgLyogQ0FDSEVJTkZPICovCitzdGF0aWMgaW5saW5lIHNpemVfdCBpbmV0Nl9wcmVmaXhfbmxtc2dfc2l6ZSh2b2lkKQoreworCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHByZWZpeG1zZykpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBwcmVmaXhfY2FjaGVpbmZvKSk7Cit9CiAKIHN0YXRpYyBpbnQgaW5ldDZfZmlsbF9wcmVmaXgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X2RldiAqaWRldiwKLQkJCXN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sIHUzMiBwaWQsIHUzMiBzZXEsIAotCQkJaW50IGV2ZW50LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisJCQkgICAgIHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8sIHUzMiBwaWQsIHUzMiBzZXEsCisJCQkgICAgIGludCBldmVudCwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCXN0cnVjdCBwcmVmaXhtc2cJKnBtc2c7Ci0Jc3RydWN0IG5sbXNnaGRyIAkqbmxoOwotCXVuc2lnbmVkIGNoYXIJCSpiID0gc2tiLT50YWlsOworCXN0cnVjdCBwcmVmaXhtc2cgKnBtc2c7CisJc3RydWN0IG5sbXNnaGRyICpubGg7CiAJc3RydWN0IHByZWZpeF9jYWNoZWluZm8JY2k7CiAKLQlubGggPSBOTE1TR19ORVcoc2tiLCBwaWQsIHNlcSwgZXZlbnQsIHNpemVvZigqcG1zZyksIGZsYWdzKTsKLQlwbXNnID0gTkxNU0dfREFUQShubGgpOworCW5saCA9IG5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCBldmVudCwgc2l6ZW9mKCpwbXNnKSwgZmxhZ3MpOworCWlmIChubGggPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJcG1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAlwbXNnLT5wcmVmaXhfZmFtaWx5ID0gQUZfSU5FVDY7CiAJcG1zZy0+cHJlZml4X3BhZDEgPSAwOwogCXBtc2ctPnByZWZpeF9wYWQyID0gMDsKQEAgLTM1NDMsNDQgKzM1MzcsMzcgQEAKIAlwbXNnLT5wcmVmaXhfbGVuID0gcGluZm8tPnByZWZpeF9sZW47CiAJcG1zZy0+cHJlZml4X3R5cGUgPSBwaW5mby0+dHlwZTsKIAlwbXNnLT5wcmVmaXhfcGFkMyA9IDA7Ci0JCiAJcG1zZy0+cHJlZml4X2ZsYWdzID0gMDsKIAlpZiAocGluZm8tPm9ubGluaykKIAkJcG1zZy0+cHJlZml4X2ZsYWdzIHw9IElGX1BSRUZJWF9PTkxJTks7CiAJaWYgKHBpbmZvLT5hdXRvY29uZikKIAkJcG1zZy0+cHJlZml4X2ZsYWdzIHw9IElGX1BSRUZJWF9BVVRPQ09ORjsKIAotCVJUQV9QVVQoc2tiLCBQUkVGSVhfQUREUkVTUywgc2l6ZW9mKHBpbmZvLT5wcmVmaXgpLCAmcGluZm8tPnByZWZpeCk7CisJTkxBX1BVVChza2IsIFBSRUZJWF9BRERSRVNTLCBzaXplb2YocGluZm8tPnByZWZpeCksICZwaW5mby0+cHJlZml4KTsKIAogCWNpLnByZWZlcnJlZF90aW1lID0gbnRvaGwocGluZm8tPnByZWZlcmVkKTsKIAljaS52YWxpZF90aW1lID0gbnRvaGwocGluZm8tPnZhbGlkKTsKLQlSVEFfUFVUKHNrYiwgUFJFRklYX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgJmNpKTsKKwlOTEFfUFVUKHNrYiwgUFJFRklYX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgJmNpKTsKIAotCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKLQlyZXR1cm4gc2tiLT5sZW47CisJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CiAKLW5sbXNnX2ZhaWx1cmU6Ci1ydGF0dHJfZmFpbHVyZToKLQlza2JfdHJpbShza2IsIGIgLSBza2ItPmRhdGEpOwotCXJldHVybiAtMTsKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKIH0KIAogc3RhdGljIHZvaWQgaW5ldDZfcHJlZml4X25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIAogCQkJIHN0cnVjdCBwcmVmaXhfaW5mbyAqcGluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcGF5bG9hZCA9IHNpemVvZihzdHJ1Y3QgcHJlZml4bXNnKSArIElORVQ2X1BSRUZJWF9SVEFfU1BBQ0U7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCi0Jc2tiID0gbmxtc2dfbmV3KG5sbXNnX3RvdGFsX3NpemUocGF5bG9hZCksIEdGUF9BVE9NSUMpOworCXNrYiA9IG5sbXNnX25ldyhpbmV0Nl9wcmVmaXhfbmxtc2dfc2l6ZSgpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gZXJyb3V0OwogCiAJZXJyID0gaW5ldDZfZmlsbF9wcmVmaXgoc2tiLCBpZGV2LCBwaW5mbywgMCwgMCwgZXZlbnQsIDApOwotCWlmIChlcnIgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlnb3RvIGVycm91dDsKLQl9CisJLyogZmFpbHVyZSBpbXBsaWVzIEJVRyBpbiBpbmV0Nl9wcmVmaXhfbmxtc2dfc2l6ZSgpICovCisJQlVHX09OKGVyciA8IDApOwogCiAJZXJyID0gcnRubF9ub3RpZnkoc2tiLCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKIGVycm91dDoKQEAgLTM5ODIsMTAgKzM5NjksOSBAQAogCXN0cnVjdCBhZGRyY29uZl9zeXNjdGxfdGFibGUgKnQ7CiAJY2hhciAqZGV2X25hbWUgPSBOVUxMOwogCi0JdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJdCA9IGttZW1kdXAoJmFkZHJjb25mX3N5c2N0bCwgc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHQgPT0gTlVMTCkKIAkJcmV0dXJuOwotCW1lbWNweSh0LCAmYWRkcmNvbmZfc3lzY3RsLCBzaXplb2YoKnQpKTsKIAlmb3IgKGk9MDsgdC0+YWRkcmNvbmZfdmFyc1tpXS5kYXRhOyBpKyspIHsKIAkJdC0+YWRkcmNvbmZfdmFyc1tpXS5kYXRhICs9IChjaGFyKilwIC0gKGNoYXIqKSZpcHY2X2RldmNvbmY7CiAJCXQtPmFkZHJjb25mX3ZhcnNbaV0uZGUgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggODU4Y2FlMi4uODdjOGY1NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bmV0L3VkcGxpdGUuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bmV0L2lwaXAuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KQEAgLTIyMSw3ICsyMjIsNyBAQAogCQkgKiB0aGUgdXNlciB0byBhc3NpZ24gYSBudW1iZXIgYXQgc29ja2V0CiAJCSAqIGNyZWF0aW9uIHRpbWUgYXV0b21hdGljYWxseSBzaGFyZXMuCiAJCSAqLwotCQlpbmV0LT5zcG9ydCA9IG50b2hzKGluZXQtPm51bSk7CisJCWluZXQtPnNwb3J0ID0gaHRvbnMoaW5ldC0+bnVtKTsKIAkJc2stPnNrX3Byb3QtPmhhc2goc2spOwogCX0KIAlpZiAoc2stPnNrX3Byb3QtPmluaXQpIHsKQEAgLTM0MSw3ICszNDIsNyBAQAogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklOREFERFJfTE9DSzsKIAlpZiAoc251bSkKIAkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRQT1JUX0xPQ0s7Ci0JaW5ldC0+c3BvcnQgPSBudG9ocyhpbmV0LT5udW0pOworCWluZXQtPnNwb3J0ID0gaHRvbnMoaW5ldC0+bnVtKTsKIAlpbmV0LT5kcG9ydCA9IDA7CiAJaW5ldC0+ZGFkZHIgPSAwOwogb3V0OgpAQCAtNjc4LDcgKzY3OSw3IEBACiAJaWYgKG5wLT5yeG9wdC5hbGwpIHsKIAkJaWYgKChvcHQtPmhvcCAmJiAobnAtPnJ4b3B0LmJpdHMuaG9wb3B0cyB8fAogCQkJCSAgbnAtPnJ4b3B0LmJpdHMub2hvcG9wdHMpKSB8fAotCQkgICAgKChJUFY2X0ZMT1dJTkZPX01BU0sgJiAqKHUzMiopc2tiLT5uaC5yYXcpICYmCisJCSAgICAoKElQVjZfRkxPV0lORk9fTUFTSyAmICooX19iZTMyKilza2ItPm5oLnJhdykgJiYKIAkJICAgICBucC0+cnhvcHQuYml0cy5yeGZsb3cpIHx8CiAJCSAgICAob3B0LT5zcmNydCAmJiAobnAtPnJ4b3B0LmJpdHMuc3JjcnQgfHwKIAkJICAgICBucC0+cnhvcHQuYml0cy5vc3JjcnQpKSB8fApAQCAtNzM3LDggKzczOCwxMyBAQAogCWlmIChzbm1wNl9taWJfaW5pdCgodm9pZCAqKil1ZHBfc3RhdHNfaW42LCBzaXplb2YgKHN0cnVjdCB1ZHBfbWliKSwKIAkJCSAgIF9fYWxpZ25vZl9fKHN0cnVjdCB1ZHBfbWliKSkgPCAwKQogCQlnb3RvIGVycl91ZHBfbWliOworCWlmIChzbm1wNl9taWJfaW5pdCgodm9pZCAqKil1ZHBsaXRlX3N0YXRzX2luNiwgc2l6ZW9mIChzdHJ1Y3QgdWRwX21pYiksCisJCQkgICBfX2FsaWdub2ZfXyhzdHJ1Y3QgdWRwX21pYikpIDwgMCkKKwkJZ290byBlcnJfdWRwbGl0ZV9taWI7CiAJcmV0dXJuIDA7CiAKK2Vycl91ZHBsaXRlX21pYjoKKwlzbm1wNl9taWJfZnJlZSgodm9pZCAqKil1ZHBfc3RhdHNfaW42KTsKIGVycl91ZHBfbWliOgogCXNubXA2X21pYl9mcmVlKCh2b2lkICoqKWljbXB2Nl9zdGF0aXN0aWNzKTsKIGVycl9pY21wX21pYjoKQEAgLTc1Myw2ICs3NTksNyBAQAogCXNubXA2X21pYl9mcmVlKCh2b2lkICoqKWlwdjZfc3RhdGlzdGljcyk7CiAJc25tcDZfbWliX2ZyZWUoKHZvaWQgKiopaWNtcHY2X3N0YXRpc3RpY3MpOwogCXNubXA2X21pYl9mcmVlKCh2b2lkICoqKXVkcF9zdGF0c19pbjYpOworCXNubXA2X21pYl9mcmVlKCh2b2lkICoqKXVkcGxpdGVfc3RhdHNfaW42KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgaW5ldDZfaW5pdCh2b2lkKQpAQCAtNzgwLDEwICs3ODcsMTQgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3RjcF9wcm90bzsKIAotCWVyciA9IHByb3RvX3JlZ2lzdGVyKCZyYXd2Nl9wcm90LCAxKTsKKwllcnIgPSBwcm90b19yZWdpc3RlcigmdWRwbGl0ZXY2X3Byb3QsIDEpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfdWRwX3Byb3RvOwogCisJZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnJhd3Y2X3Byb3QsIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXJfdWRwbGl0ZV9wcm90bzsKKwogCiAJLyogUmVnaXN0ZXIgdGhlIHNvY2tldC1zaWRlIGluZm9ybWF0aW9uIGZvciBpbmV0Nl9jcmVhdGUuICAqLwogCWZvcihyID0gJmluZXRzdzZbMF07IHIgPCAmaW5ldHN3NltTT0NLX01BWF07ICsrcikKQEAgLTgzNyw2ICs4NDgsOCBAQAogCQlnb3RvIHByb2NfdGNwNl9mYWlsOwogCWlmICh1ZHA2X3Byb2NfaW5pdCgpKQogCQlnb3RvIHByb2NfdWRwNl9mYWlsOworCWlmICh1ZHBsaXRlNl9wcm9jX2luaXQoKSkKKwkJZ290byBwcm9jX3VkcGxpdGU2X2ZhaWw7CiAJaWYgKGlwdjZfbWlzY19wcm9jX2luaXQoKSkKIAkJZ290byBwcm9jX21pc2M2X2ZhaWw7CiAKQEAgLTg2Miw2ICs4NzUsNyBAQAogCiAJLyogSW5pdCB2NiB0cmFuc3BvcnQgcHJvdG9jb2xzLiAqLwogCXVkcHY2X2luaXQoKTsKKwl1ZHBsaXRldjZfaW5pdCgpOwogCXRjcHY2X2luaXQoKTsKIAogCWlwdjZfcGFja2V0X2luaXQoKTsKQEAgLTg3OSw2ICs4OTMsOCBAQAogcHJvY19hbnljYXN0Nl9mYWlsOgogCWlwdjZfbWlzY19wcm9jX2V4aXQoKTsKIHByb2NfbWlzYzZfZmFpbDoKKwl1ZHBsaXRlNl9wcm9jX2V4aXQoKTsKK3Byb2NfdWRwbGl0ZTZfZmFpbDoKIAl1ZHA2X3Byb2NfZXhpdCgpOwogcHJvY191ZHA2X2ZhaWw6CiAJdGNwNl9wcm9jX2V4aXQoKTsKQEAgLTkwMiw2ICs5MTgsOCBAQAogCXNvY2tfdW5yZWdpc3RlcihQRl9JTkVUNik7CiBvdXRfdW5yZWdpc3Rlcl9yYXdfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmcmF3djZfcHJvdCk7CitvdXRfdW5yZWdpc3Rlcl91ZHBsaXRlX3Byb3RvOgorCXByb3RvX3VucmVnaXN0ZXIoJnVkcGxpdGV2Nl9wcm90KTsKIG91dF91bnJlZ2lzdGVyX3VkcF9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZ1ZHB2Nl9wcm90KTsKIG91dF91bnJlZ2lzdGVyX3RjcF9wcm90bzoKQEAgLTkxOSw2ICs5MzcsNyBAQAogCWFjNl9wcm9jX2V4aXQoKTsKICAJaXB2Nl9taXNjX3Byb2NfZXhpdCgpOwogIAl1ZHA2X3Byb2NfZXhpdCgpOworIAl1ZHBsaXRlNl9wcm9jX2V4aXQoKTsKICAJdGNwNl9wcm9jX2V4aXQoKTsKICAJcmF3Nl9wcm9jX2V4aXQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCBiMGQ4M2U4Li4xMmM1YTRkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYworKysgYi9uZXQvaXB2Ni9haDYuYwpAQCAtMzU0LDEwICszNTQsOSBAQAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGFoX2hsZW4pKQogCQlnb3RvIG91dDsKIAotCXRtcF9oZHIgPSBrbWFsbG9jKGhkcl9sZW4sIEdGUF9BVE9NSUMpOworCXRtcF9oZHIgPSBrbWVtZHVwKHNrYi0+bmgucmF3LCBoZHJfbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXRtcF9oZHIpCiAJCWdvdG8gb3V0OwotCW1lbWNweSh0bXBfaGRyLCBza2ItPm5oLnJhdywgaGRyX2xlbik7CiAJaWYgKGlwdjZfY2xlYXJfbXV0YWJsZV9vcHRpb25zKHNrYi0+bmguaXB2NmgsIGhkcl9sZW4sIFhGUk1fUE9MSUNZX0lOKSkKIAkJZ290byBmcmVlX291dDsKIAlza2ItPm5oLmlwdjZoLT5wcmlvcml0eSAgICA9IDA7CkBAIC0zOTcsNyArMzk2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYWg2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwgCi0gICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX191MzIgaW5mbykKKyAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CiAJc3RydWN0IGlwX2F1dGhfaGRyICphaCA9IChzdHJ1Y3QgaXBfYXV0aF9oZHIqKShza2ItPmRhdGErb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2RhdGFncmFtLmMgYi9uZXQvaXB2Ni9kYXRhZ3JhbS5jCmluZGV4IDcyMDY3NDcuLjVjOTRmZWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwpAQCAtMjA3LDcgKzIwNyw3IEBACiB9CiAKIHZvaWQgaXB2Nl9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVyciwgCi0JCSAgICAgdTE2IHBvcnQsIHUzMiBpbmZvLCB1OCAqcGF5bG9hZCkKKwkJICAgICBfX2JlMTYgcG9ydCwgdTMyIGluZm8sIHU4ICpwYXlsb2FkKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucCAgPSBpbmV0Nl9zayhzayk7CiAJc3RydWN0IGljbXA2aGRyICppY21waCA9IChzdHJ1Y3QgaWNtcDZoZHIgKilza2ItPmgucmF3OwpAQCAtMzE4LDEzICszMTgsMTMgQEAKIAkJCWlwdjZfYWRkcl9jb3B5KCZzaW4tPnNpbjZfYWRkciwKIAkJCSAgKHN0cnVjdCBpbjZfYWRkciAqKShza2ItPm5oLnJhdyArIHNlcnItPmFkZHJfb2Zmc2V0KSk7CiAJCQlpZiAobnAtPnNuZGZsb3cpCi0JCQkJc2luLT5zaW42X2Zsb3dpbmZvID0gKih1MzIqKShza2ItPm5oLnJhdyArIHNlcnItPmFkZHJfb2Zmc2V0IC0gMjQpICYgSVBWNl9GTE9XSU5GT19NQVNLOworCQkJCXNpbi0+c2luNl9mbG93aW5mbyA9ICooX19iZTMyKikoc2tiLT5uaC5yYXcgKyBzZXJyLT5hZGRyX29mZnNldCAtIDI0KSAmIElQVjZfRkxPV0lORk9fTUFTSzsKIAkJCWlmIChpcHY2X2FkZHJfdHlwZSgmc2luLT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkKIAkJCQlzaW4tPnNpbjZfc2NvcGVfaWQgPSBJUDZDQihza2IpLT5paWY7CiAJCX0gZWxzZSB7CiAJCQlpcHY2X2FkZHJfc2V0KCZzaW4tPnNpbjZfYWRkciwgMCwgMCwKIAkJCQkgICAgICBodG9ubCgweGZmZmYpLAotCQkJCSAgICAgICoodTMyKikoc2tiLT5uaC5yYXcgKyBzZXJyLT5hZGRyX29mZnNldCkpOworCQkJCSAgICAgICooX19iZTMyKikoc2tiLT5uaC5yYXcgKyBzZXJyLT5hZGRyX29mZnNldCkpOwogCQl9CiAJfQogCkBAIC0zOTcsMTIgKzM5NywxMiBAQAogCX0KIAogCWlmIChucC0+cnhvcHQuYml0cy5yeHRjbGFzcykgewotCQlpbnQgdGNsYXNzID0gKG50b2hsKCoodTMyICopc2tiLT5uaC5pcHY2aCkgPj4gMjApICYgMHhmZjsKKwkJaW50IHRjbGFzcyA9IChudG9obCgqKF9fYmUzMiAqKXNrYi0+bmguaXB2NmgpID4+IDIwKSAmIDB4ZmY7CiAJCXB1dF9jbXNnKG1zZywgU09MX0lQVjYsIElQVjZfVENMQVNTLCBzaXplb2YodGNsYXNzKSwgJnRjbGFzcyk7CiAJfQogCi0JaWYgKG5wLT5yeG9wdC5iaXRzLnJ4ZmxvdyAmJiAoKih1MzIqKXNrYi0+bmgucmF3ICYgSVBWNl9GTE9XSU5GT19NQVNLKSkgewotCQl1MzIgZmxvd2luZm8gPSAqKHUzMiopc2tiLT5uaC5yYXcgJiBJUFY2X0ZMT1dJTkZPX01BU0s7CisJaWYgKG5wLT5yeG9wdC5iaXRzLnJ4ZmxvdyAmJiAoKihfX2JlMzIqKXNrYi0+bmgucmF3ICYgSVBWNl9GTE9XSU5GT19NQVNLKSkgeworCQlfX2JlMzIgZmxvd2luZm8gPSAqKF9fYmUzMiopc2tiLT5uaC5yYXcgJiBJUFY2X0ZMT1dJTkZPX01BU0s7CiAJCXB1dF9jbXNnKG1zZywgU09MX0lQVjYsIElQVjZfRkxPV0lORk8sIHNpemVvZihmbG93aW5mbyksICZmbG93aW5mbyk7CiAJfQogCkBAIC01NjAsMTIgKzU2MCwxMiBAQAogCQkJfQogCiAJCQlpZiAoZmwtPmZsNl9mbG93bGFiZWwmSVBWNl9GTE9XSU5GT19NQVNLKSB7Ci0JCQkJaWYgKChmbC0+Zmw2X2Zsb3dsYWJlbF4qKHUzMiAqKUNNU0dfREFUQShjbXNnKSkmfklQVjZfRkxPV0lORk9fTUFTSykgeworCQkJCWlmICgoZmwtPmZsNl9mbG93bGFiZWxeKihfX2JlMzIgKilDTVNHX0RBVEEoY21zZykpJn5JUFY2X0ZMT1dJTkZPX01BU0spIHsKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQkJZ290byBleGl0X2Y7CiAJCQkJfQogCQkJfQotCQkJZmwtPmZsNl9mbG93bGFiZWwgPSBJUFY2X0ZMT1dJTkZPX01BU0sgJiAqKHUzMiAqKUNNU0dfREFUQShjbXNnKTsKKwkJCWZsLT5mbDZfZmxvd2xhYmVsID0gSVBWNl9GTE9XSU5GT19NQVNLICYgKihfX2JlMzIgKilDTVNHX0RBVEEoY21zZyk7CiAJCQlicmVhazsKIAogCQljYXNlIElQVjZfMjI5MkhPUE9QVFM6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmMKaW5kZXggZTc4NjgwYS4uMjVkY2Y2OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXNwNi5jCisrKyBiL25ldC9pcHY2L2VzcDYuYwpAQCAtMjU2LDcgKzI1Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGVzcDZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAotICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX3UzMiBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CiAJc3RydWN0IGlwdjZfZXNwX2hkciAqZXNwaCA9IChzdHJ1Y3QgaXB2Nl9lc3BfaGRyKikoc2tiLT5kYXRhK29mZnNldCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggODhjOTZiMS4uMDcxMWY5MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtMjg0LDEwICsyODQsMTIgQEAKICNpZmRlZiBDT05GSUdfSVBWNl9NSVA2CiAJX191MTYgZHN0YnVmOwogI2VuZGlmCisJc3RydWN0IGRzdF9lbnRyeSAqZHN0OwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgKHNrYi0+aC5yYXctc2tiLT5kYXRhKSs4KSB8fAogCSAgICAhcHNrYl9tYXlfcHVsbChza2IsIChza2ItPmgucmF3LXNrYi0+ZGF0YSkrKChza2ItPmgucmF3WzFdKzEpPDwzKSkpIHsKLQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI5OCw3ICszMDAsOSBAQAogCWRzdGJ1ZiA9IG9wdC0+ZHN0MTsKICNlbmRpZgogCisJZHN0ID0gZHN0X2Nsb25lKHNrYi0+ZHN0KTsKIAlpZiAoaXA2X3BhcnNlX3Rsdih0bHZwcm9jZGVzdG9wdF9sc3QsIHNrYnApKSB7CisJCWRzdF9yZWxlYXNlKGRzdCk7CiAJCXNrYiA9ICpza2JwOwogCQlza2ItPmgucmF3ICs9ICgoc2tiLT5oLnJhd1sxXSsxKTw8Myk7CiAJCW9wdCA9IElQNkNCKHNrYik7CkBAIC0zMTAsNyArMzE0LDggQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoZHN0KSwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCWRzdF9yZWxlYXNlKGRzdCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0zNjUsNyArMzcwLDggQEAKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIChza2ItPmgucmF3LXNrYi0+ZGF0YSkrOCkgfHwKIAkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCAoc2tiLT5oLnJhdy1za2ItPmRhdGEpKygoc2tiLT5oLnJhd1sxXSsxKTw8MykpKSB7Ci0JCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksCisJCQkJIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zNzQsNyArMzgwLDggQEAKIAogCWlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZza2ItPm5oLmlwdjZoLT5kYWRkcikgfHwKIAkgICAgc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfSE9TVCkgewotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkgSVBTVEFUU19NSUJfSU5BRERSRVJST1JTKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zODgsNyArMzk1LDggQEAKIAkJCSAqIHByb2Nlc3NlZCBieSBvd24KIAkJCSAqLwogCQkJaWYgKCFhZGRyKSB7Ci0JCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOworCQkJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkJCSBJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOwogCQkJCWtmcmVlX3NrYihza2IpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KQEAgLTQxMCw3ICs0MTgsOCBAQAogCXN3aXRjaCAoaGRyLT50eXBlKSB7CiAJY2FzZSBJUFY2X1NSQ1JUX1RZUEVfMDoKIAkJaWYgKGhkci0+aGRybGVuICYgMHgwMSkgewotCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCQlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksCisJCQkJCSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsICgmaGRyLT5oZHJsZW4pIC0gc2tiLT5uaC5yYXcpOwogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC00MTksMTQgKzQyOCwxNiBAQAogCWNhc2UgSVBWNl9TUkNSVF9UWVBFXzI6CiAJCS8qIFNpbGVudGx5IGRpc2NhcmQgaW52YWxpZCBSVEggdHlwZSAyICovCiAJCWlmIChoZHItPmhkcmxlbiAhPSAyIHx8IGhkci0+c2VnbWVudHNfbGVmdCAhPSAxKSB7Ci0JCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKKwkJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkJIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKLQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsICgmaGRyLT50eXBlKSAtIHNrYi0+bmgucmF3KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQzOSw3ICs0NTAsOCBAQAogCW4gPSBoZHItPmhkcmxlbiA+PiAxOwogCiAJaWYgKGhkci0+c2VnbWVudHNfbGVmdCA+IG4pIHsKLQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQlpY21wdjZfcGFyYW1fcHJvYihza2IsIElDTVBWNl9IRFJfRklFTEQsICgmaGRyLT5zZWdtZW50c19sZWZ0KSAtIHNrYi0+bmgucmF3KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQ0OSwxMiArNDYxLDE0IEBACiAJICovCiAJaWYgKHNrYl9jbG9uZWQoc2tiKSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7Ci0JCWtmcmVlX3NrYihza2IpOwogCQkvKiB0aGUgY29weSBpcyBhIGZvcndhcmRlZCBwYWNrZXQgKi8KIAkJaWYgKHNrYjIgPT0gTlVMTCkgewotCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CQorCQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCQkgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOworCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KKwkJa2ZyZWVfc2tiKHNrYik7CiAJCSpza2JwID0gc2tiID0gc2tiMjsKIAkJb3B0ID0gSVA2Q0Ioc2tiMik7CiAJCWhkciA9IChzdHJ1Y3QgaXB2Nl9ydF9oZHIgKikgc2tiMi0+aC5yYXc7CkBAIC00NzUsMTIgKzQ4OSwxNCBAQAogCQlpZiAoeGZybTZfaW5wdXRfYWRkcihza2IsICh4ZnJtX2FkZHJlc3NfdCAqKWFkZHIsCiAJCQkJICAgICAoeGZybV9hZGRyZXNzX3QgKikmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCiAJCQkJICAgICBJUFBST1RPX1JPVVRJTkcpIDwgMCkgewotCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOworCQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCQkgSVBTVEFUU19NSUJfSU5BRERSRVJST1JTKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmICghaXB2Nl9jaGtfaG9tZV9hZGRyKGFkZHIpKSB7Ci0JCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7CisJCQlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksCisJCQkJCSBJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTQ5MSw3ICs1MDcsOCBAQAogCX0KIAogCWlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGFkZHIpKSB7Ci0JCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5BRERSRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCSBJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTUxMCw3ICs1MjcsOCBAQAogCiAJaWYgKHNrYi0+ZHN0LT5kZXYtPmZsYWdzJklGRl9MT09QQkFDSykgewogCQlpZiAoc2tiLT5uaC5pcHY2aC0+aG9wX2xpbWl0IDw9IDEpIHsKLQkJCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsCiAJCQkJICAgIDAsIHNrYi0+ZGV2KTsKIAkJCWtmcmVlX3NrYihza2IpOwpAQCAtNjMyLDI0ICs2NTAsMjUgQEAKIAlpZiAoc2tiLT5uaC5yYXdbb3B0b2ZmKzFdICE9IDQgfHwgKG9wdG9mZiYzKSAhPSAyKSB7CiAJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgImlwdjZfaG9wX2p1bWJvOiB3cm9uZyBqdW1ibyBvcHQgbGVuZ3RoL2FsaWdubWVudCAlZFxuIiwKIAkJICAgICAgICAgICAgICAgc2tiLT5uaC5yYXdbb3B0b2ZmKzFdKTsKLQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwKKwkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQlnb3RvIGRyb3A7CiAJfQogCi0JcGt0X2xlbiA9IG50b2hsKCoodTMyKikoc2tiLT5uaC5yYXcrb3B0b2ZmKzIpKTsKKwlwa3RfbGVuID0gbnRvaGwoKihfX2JlMzIqKShza2ItPm5oLnJhdytvcHRvZmYrMikpOwogCWlmIChwa3RfbGVuIDw9IElQVjZfTUFYUExFTikgewotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCWljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCwgb3B0b2ZmKzIpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKHNrYi0+bmguaXB2NmgtPnBheWxvYWRfbGVuKSB7Ci0JCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJaWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELCBvcHRvZmYpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocGt0X2xlbiA+IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgewotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOVFJVTkNBVEVEUEtUUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwgSVBTVEFUU19NSUJfSU5UUlVOQ0FURURQS1RTKTsKIAkJZ290byBkcm9wOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXh0aGRyc19jb3JlLmMgYi9uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYwppbmRleCAzMTViYzFmLi4yMWNiYmJkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYworKysgYi9uZXQvaXB2Ni9leHRoZHJzX2NvcmUuYwpAQCAtNzcsNyArNzcsNyBAQAogCQlpZiAoaHAgPT0gTlVMTCkKIAkJCXJldHVybiAtMTsKIAkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkgewotCQkJdW5zaWduZWQgc2hvcnQgX2ZyYWdfb2ZmLCAqZnA7CisJCQlfX2JlMTYgX2ZyYWdfb2ZmLCAqZnA7CiAJCQlmcCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsCiAJCQkJCQlzdGFydCtvZmZzZXRvZihzdHJ1Y3QgZnJhZ19oZHIsCiAJCQkJCQkJICAgICAgIGZyYWdfb2ZmKSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ZpYjZfcnVsZXMuYyBiL25ldC9pcHY2L2ZpYjZfcnVsZXMuYwppbmRleCAxODk2ZWNiLi4wODYyODA5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9maWI2X3J1bGVzLmMKKysrIGIvbmV0L2lwdjYvZmliNl9ydWxlcy5jCkBAIC0yNSwxMCArMjUsNiBAQAogCXN0cnVjdCBmaWJfcnVsZQkJY29tbW9uOwogCXN0cnVjdCBydDZrZXkJCXNyYzsKIAlzdHJ1Y3QgcnQ2a2V5CQlkc3Q7Ci0jaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfRldNQVJLCi0JdTMyCQkJZndtYXJrOwotCXUzMgkJCWZ3bWFzazsKLSNlbmRpZgogCXU4CQkJdGNsYXNzOwogfTsKIApAQCAtNjcsNyArNjMsNyBAQAogCQlmaWJfcnVsZV9wdXQoYXJnLnJ1bGUpOwogCiAJaWYgKGFyZy5yZXN1bHQpCi0JCXJldHVybiAoc3RydWN0IGRzdF9lbnRyeSAqKSBhcmcucmVzdWx0OworCQlyZXR1cm4gYXJnLnJlc3VsdDsKIAogCWRzdF9ob2xkKCZpcDZfbnVsbF9lbnRyeS51LmRzdCk7CiAJcmV0dXJuICZpcDZfbnVsbF9lbnRyeS51LmRzdDsKQEAgLTEzMCwyMiArMTI2LDEzIEBACiAJaWYgKHItPnRjbGFzcyAmJiByLT50Y2xhc3MgIT0gKChudG9obChmbC0+Zmw2X2Zsb3dsYWJlbCkgPj4gMjApICYgMHhmZikpCiAJCXJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX0lQVjZfUk9VVEVfRldNQVJLCi0JaWYgKChyLT5md21hcmsgXiBmbC0+Zmw2X2Z3bWFyaykgJiByLT5md21hc2spCi0JCXJldHVybiAwOwotI2VuZGlmCi0KIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGZpYjZfcnVsZV9wb2xpY3lbRlJBX01BWCsxXSBfX3JlYWRfbW9zdGx5ID0gewotCVtGUkFfSUZOQU1FXQk9IHsgLnR5cGUgPSBOTEFfU1RSSU5HLCAubGVuID0gSUZOQU1TSVogLSAxIH0sCi0JW0ZSQV9QUklPUklUWV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCUZSQV9HRU5FUklDX1BPTElDWSwKIAlbRlJBX1NSQ10JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSB9LAogCVtGUkFfRFNUXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpIH0sCi0JW0ZSQV9GV01BUktdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbRlJBX0ZXTUFTS10JPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtGUkFfVEFCTEVdCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKIHN0YXRpYyBpbnQgZmliNl9ydWxlX2NvbmZpZ3VyZShzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xNTUsOCArMTQyLDcgQEAKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAlzdHJ1Y3QgZmliNl9ydWxlICpydWxlNiA9IChzdHJ1Y3QgZmliNl9ydWxlICopIHJ1bGU7CiAKLQlpZiAoZnJoLT5zcmNfbGVuID4gMTI4IHx8IGZyaC0+ZHN0X2xlbiA+IDEyOCB8fAotCSAgICAoZnJoLT50b3MgJiB+SVBWNl9GTE9XSU5GT19NQVNLKSkKKwlpZiAoZnJoLT5zcmNfbGVuID4gMTI4IHx8IGZyaC0+ZHN0X2xlbiA+IDEyOCkKIAkJZ290byBlcnJvdXQ7CiAKIAlpZiAocnVsZS0+YWN0aW9uID09IEZSX0FDVF9UT19UQkwpIHsKQEAgLTE3NywyMyArMTYzLDYgQEAKIAkJbmxhX21lbWNweSgmcnVsZTYtPmRzdC5hZGRyLCB0YltGUkFfRFNUXSwKIAkJCSAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAotI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0ZXTUFSSwotCWlmICh0YltGUkFfRldNQVJLXSkgewotCQlydWxlNi0+ZndtYXJrID0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFSS10pOwotCQlpZiAocnVsZTYtPmZ3bWFyaykgewotCQkJLyoKLQkJCSAqIGlmIHRoZSBtYXJrIHZhbHVlIGlzIG5vbi16ZXJvLAotCQkJICogYWxsIGJpdHMgYXJlIGNvbXBhcmVkIGJ5IGRlZmF1bHQKLQkJCSAqIHVubGVzcyBhIG1hc2sgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQuCi0JCQkgKi8KLQkJCXJ1bGU2LT5md21hc2sgPSAweEZGRkZGRkZGOwotCQl9Ci0JfQotCi0JaWYgKHRiW0ZSQV9GV01BU0tdKQotCQlydWxlNi0+ZndtYXNrID0gbmxhX2dldF91MzIodGJbRlJBX0ZXTUFTS10pOwotI2VuZGlmCi0KIAlydWxlNi0+c3JjLnBsZW4gPSBmcmgtPnNyY19sZW47CiAJcnVsZTYtPmRzdC5wbGVuID0gZnJoLT5kc3RfbGVuOwogCXJ1bGU2LT50Y2xhc3MgPSBmcmgtPnRvczsKQEAgLTIyNSwxNCArMTk0LDYgQEAKIAkgICAgbmxhX21lbWNtcCh0YltGUkFfRFNUXSwgJnJ1bGU2LT5kc3QuYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0ZXTUFSSwotCWlmICh0YltGUkFfRldNQVJLXSAmJiAocnVsZTYtPmZ3bWFyayAhPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVJLXSkpKQotCQlyZXR1cm4gMDsKLQotCWlmICh0YltGUkFfRldNQVNLXSAmJiAocnVsZTYtPmZ3bWFzayAhPSBubGFfZ2V0X3UzMih0YltGUkFfRldNQVNLXSkpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTI1NCwxNCArMjE1LDYgQEAKIAkJTkxBX1BVVChza2IsIEZSQV9TUkMsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLAogCQkJJnJ1bGU2LT5zcmMuYWRkcik7CiAKLSNpZmRlZiBDT05GSUdfSVBWNl9ST1VURV9GV01BUksKLQlpZiAocnVsZTYtPmZ3bWFyaykKLQkJTkxBX1BVVF9VMzIoc2tiLCBGUkFfRldNQVJLLCBydWxlNi0+ZndtYXJrKTsKLQotCWlmIChydWxlNi0+ZndtYXNrIHx8IHJ1bGU2LT5md21hcmspCi0JCU5MQV9QVVRfVTMyKHNrYiwgRlJBX0ZXTUFTSywgcnVsZTYtPmZ3bWFzayk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CkBAIC0yNzgsNiArMjMxLDEyIEBACiAJcmV0dXJuIDB4M0ZGRjsKIH0KIAorc3RhdGljIHNpemVfdCBmaWI2X3J1bGVfbmxtc2dfcGF5bG9hZChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDE2KSAvKiBkc3QgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxNik7IC8qIHNyYyAqLworfQorCiBzdGF0aWMgc3RydWN0IGZpYl9ydWxlc19vcHMgZmliNl9ydWxlc19vcHMgPSB7CiAJLmZhbWlseQkJCT0gQUZfSU5FVDYsCiAJLnJ1bGVfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGZpYjZfcnVsZSksCkBAIC0yODcsNiArMjQ2LDcgQEAKIAkuY29tcGFyZQkJPSBmaWI2X3J1bGVfY29tcGFyZSwKIAkuZmlsbAkJCT0gZmliNl9ydWxlX2ZpbGwsCiAJLmRlZmF1bHRfcHJlZgkJPSBmaWI2X3J1bGVfZGVmYXVsdF9wcmVmLAorCS5ubG1zZ19wYXlsb2FkCQk9IGZpYjZfcnVsZV9ubG1zZ19wYXlsb2FkLAogCS5ubGdyb3VwCQk9IFJUTkxHUlBfSVBWNl9SVUxFLAogCS5wb2xpY3kJCQk9IGZpYjZfcnVsZV9wb2xpY3ksCiAJLnJ1bGVzX2xpc3QJCT0gJmZpYjZfcnVsZXMsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggNGVjODc2MC4uM2RjYzRiNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtMTc3LDcgKzE3Nyw4IEBACiAJICovCiAJZHN0ID0gaXA2X3JvdXRlX291dHB1dChzaywgZmwpOwogCWlmIChkc3QtPmVycm9yKSB7Ci0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihkc3QpLAorCQkJICAgICAgSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOwogCX0gZWxzZSBpZiAoZHN0LT5kZXYgJiYgKGRzdC0+ZGV2LT5mbGFncyZJRkZfTE9PUEJBQ0spKSB7CiAJCXJlcyA9IDE7CiAJfSBlbHNlIHsKQEAgLTIzMyw3ICsyMzQsNyBAQAogCQkJCQkJICAgICAgbGVuLCBmbC0+cHJvdG8sCiAJCQkJCQkgICAgICBza2ItPmNzdW0pOwogCX0gZWxzZSB7Ci0JCXUzMiB0bXBfY3N1bSA9IDA7CisJCV9fd3N1bSB0bXBfY3N1bSA9IDA7CiAKIAkJc2tiX3F1ZXVlX3dhbGsoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKSB7CiAJCQl0bXBfY3N1bSA9IGNzdW1fYWRkKHRtcF9jc3VtLCBza2ItPmNzdW0pOwpAQCAtMjQxLDEzICsyNDIsMTEgQEAKIAogCQl0bXBfY3N1bSA9IGNzdW1fcGFydGlhbCgoY2hhciAqKWljbXA2aCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpY21wNmhkciksIHRtcF9jc3VtKTsKLQkJdG1wX2NzdW0gPSBjc3VtX2lwdjZfbWFnaWMoJmZsLT5mbDZfc3JjLAotCQkJCQkgICAmZmwtPmZsNl9kc3QsCi0JCQkJCSAgIGxlbiwgZmwtPnByb3RvLCB0bXBfY3N1bSk7Ci0JCWljbXA2aC0+aWNtcDZfY2tzdW0gPSB0bXBfY3N1bTsKKwkJaWNtcDZoLT5pY21wNl9ja3N1bSA9IGNzdW1faXB2Nl9tYWdpYygmZmwtPmZsNl9zcmMsCisJCQkJCQkgICAgICAmZmwtPmZsNl9kc3QsCisJCQkJCQkgICAgICBsZW4sIGZsLT5wcm90bywKKwkJCQkJCSAgICAgIHRtcF9jc3VtKTsKIAl9Ci0JaWYgKGljbXA2aC0+aWNtcDZfY2tzdW0gPT0gMCkKLQkJaWNtcDZoLT5pY21wNl9ja3N1bSA9IC0xOwogCWlwNl9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtMjYzLDcgKzI2Miw3IEBACiB7CiAJc3RydWN0IGljbXB2Nl9tc2cgKm1zZyA9IChzdHJ1Y3QgaWNtcHY2X21zZyAqKSBmcm9tOwogCXN0cnVjdCBza19idWZmICpvcmdfc2tiID0gbXNnLT5za2I7Ci0JX191MzIgY3N1bSA9IDA7CisJX193c3VtIGNzdW0gPSAwOwogCiAJY3N1bSA9IHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMob3JnX3NrYiwgbXNnLT5vZmZzZXQgKyBvZmZzZXQsCiAJCQkJICAgICAgdG8sIGxlbiwgY3N1bSk7CkBAIC01NTUsNyArNTU0LDcgQEAKIAlpY21wdjZfeG1pdF91bmxvY2soKTsKIH0KIAotc3RhdGljIHZvaWQgaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwgaW50IGNvZGUsIHUzMiBpbmZvKQorc3RhdGljIHZvaWQgaWNtcHY2X25vdGlmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKQogewogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKIAlzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgKmlwcHJvdDsKQEAgLTYzNyw4ICs2MzYsOCBAQAogCQkJYnJlYWs7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLAotCQkJCQkgICAgIElQUFJPVE9fSUNNUFY2LCAwKTsKKwkJc2tiLT5jc3VtID0gfmNzdW1fdW5mb2xkKGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLAorCQkJCQkgICAgIElQUFJPVE9fSUNNUFY2LCAwKSk7CiAJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CiAJCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJJQ01QdjYgY2hlY2tzdW0gZmFpbGVkIFsiIE5JUDZfRk1UICIgPiAiIE5JUDZfRk1UICJdXG4iLAogCQkJCSAgICAgICBOSVA2KCpzYWRkciksIE5JUDYoKmRhZGRyKSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCmluZGV4IDgyN2Y0MWQuLmM3MDAzMDIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jCkBAIC01MiwyMCArNTIsMjAgQEAKIC8qCiAgKiByZXF1ZXN0X3NvY2sgKGZvcm1lcmx5IG9wZW4gcmVxdWVzdCkgaGFzaCB0YWJsZXMuCiAgKi8KLXN0YXRpYyB1MzIgaW5ldDZfc3lucV9oYXNoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmFkZHIsIGNvbnN0IHUxNiBycG9ydCwKK3N0YXRpYyB1MzIgaW5ldDZfc3lucV9oYXNoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqcmFkZHIsIGNvbnN0IF9fYmUxNiBycG9ydCwKIAkJCSAgIGNvbnN0IHUzMiBybmQsIGNvbnN0IHUxNiBzeW5xX2hzaXplKQogewotCXUzMiBhID0gcmFkZHItPnM2X2FkZHIzMlswXTsKLQl1MzIgYiA9IHJhZGRyLT5zNl9hZGRyMzJbMV07Ci0JdTMyIGMgPSByYWRkci0+czZfYWRkcjMyWzJdOworCXUzMiBhID0gKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbMF07CisJdTMyIGIgPSAoX19mb3JjZSB1MzIpcmFkZHItPnM2X2FkZHIzMlsxXTsKKwl1MzIgYyA9IChfX2ZvcmNlIHUzMilyYWRkci0+czZfYWRkcjMyWzJdOwogCiAJYSArPSBKSEFTSF9HT0xERU5fUkFUSU87CiAJYiArPSBKSEFTSF9HT0xERU5fUkFUSU87CiAJYyArPSBybmQ7CiAJX19qaGFzaF9taXgoYSwgYiwgYyk7CiAKLQlhICs9IHJhZGRyLT5zNl9hZGRyMzJbM107Ci0JYiArPSAodTMyKXJwb3J0OworCWEgKz0gKF9fZm9yY2UgdTMyKXJhZGRyLT5zNl9hZGRyMzJbM107CisJYiArPSAoX19mb3JjZSB1MzIpcnBvcnQ7CiAJX19qaGFzaF9taXgoYSwgYiwgYyk7CiAKIAlyZXR1cm4gYyAmIChzeW5xX2hzaXplIC0gMSk7CkBAIC03Myw3ICs3Myw3IEBACiAKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXQ2X2Nza19zZWFyY2hfcmVxKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkJICBzdHJ1Y3QgcmVxdWVzdF9zb2NrICoqKnByZXZwLAotCQkJCQkgIGNvbnN0IF9fdTE2IHJwb3J0LAorCQkJCQkgIGNvbnN0IF9fYmUxNiBycG9ydCwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJhZGRyLAogCQkJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbGFkZHIsCiAJCQkJCSAgY29uc3QgaW50IGlpZikKQEAgLTEzOSw5ICsxMzksOCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0Nl9jc2tfYWRkcjJzb2NrYWRkcik7CiAKLWludCBpbmV0Nl9jc2tfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaXBmcmFnb2spCitpbnQgaW5ldDZfY3NrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLCBpbnQgaXBmcmFnb2spCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBmbG93aSBmbDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwppbmRleCA4YWNjZDFmLi5iN2U1YmFlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKi8KIHN0cnVjdCBzb2NrICpfX2luZXQ2X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCi0JCQkJCSAgIGNvbnN0IHUxNiBzcG9ydCwKKwkJCQkJICAgY29uc3QgX19iZTE2IHNwb3J0LAogCQkJCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAogCQkJCQkgICBjb25zdCB1MTYgaG51bSwKIAkJCQkJICAgY29uc3QgaW50IGRpZikKQEAgLTE0Niw4ICsxNDYsOCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoaW5ldDZfbG9va3VwX2xpc3RlbmVyKTsKIAogc3RydWN0IHNvY2sgKmluZXQ2X2xvb2t1cChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHUxNiBzcG9ydCwKLQkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpkYWRkciwgY29uc3QgdTE2IGRwb3J0LAorCQkJICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLCBjb25zdCBfX2JlMTYgc3BvcnQsCisJCQkgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIGNvbnN0IF9fYmUxNiBkcG9ydCwKIAkJCSAgY29uc3QgaW50IGRpZikKIHsKIAlzdHJ1Y3Qgc29jayAqc2s7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmliLmMgYi9uZXQvaXB2Ni9pcDZfZmliLmMKaW5kZXggZjk4Y2EzMC4uYmY1MjYxMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2ZpYi5jCisrKyBiL25ldC9pcHY2L2lwNl9maWIuYwpAQCAtMTM5LDkgKzEzOSw5IEBACiAgKgl0ZXN0IGJpdAogICovCiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBhZGRyX2JpdF9zZXQodm9pZCAqdG9rZW4sIGludCBmbl9iaXQpCitzdGF0aWMgX19pbmxpbmVfXyBfX2JlMzIgYWRkcl9iaXRfc2V0KHZvaWQgKnRva2VuLCBpbnQgZm5fYml0KQogewotCV9fdTMyICphZGRyID0gdG9rZW47CisJX19iZTMyICphZGRyID0gdG9rZW47CiAKIAlyZXR1cm4gaHRvbmwoMSA8PCAoKH5mbl9iaXQpJjB4MUYpKSAmIGFkZHJbZm5fYml0Pj41XTsKIH0KQEAgLTQzNCw3ICs0MzQsNyBAQAogCXN0cnVjdCBmaWI2X25vZGUgKnBuID0gTlVMTDsKIAlzdHJ1Y3QgcnQ2a2V5ICprZXk7CiAJaW50CWJpdDsKLSAgICAgICAJaW50CWRpciA9IDA7CisgICAgICAgCV9fYmUzMglkaXIgPSAwOwogCV9fdTMyCXNlcm51bSA9IGZpYjZfbmV3X3Nlcm51bSgpOwogCiAJUlQ2X1RSQUNFKCJmaWI2X2FkZF8xXG4iKTsKQEAgLTgyOSw3ICs4MjksNyBAQAogCQkJCQlzdHJ1Y3QgbG9va3VwX2FyZ3MgKmFyZ3MpCiB7CiAJc3RydWN0IGZpYjZfbm9kZSAqZm47Ci0JaW50IGRpcjsKKwlfX2JlMzIgZGlyOwogCiAJaWYgKHVubGlrZWx5KGFyZ3MtPm9mZnNldCA9PSAwKSkKIAkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgYi9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKaW5kZXggNmQ0NTMzYi4uNjI0ZmFlMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCisrKyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwpAQCAtNjEsNyArNjEsNyBAQAogc3RhdGljIERFRklORV9SV0xPQ0soaXA2X3NrX2ZsX2xvY2spOwogCiAKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpcDZfZmxvd2xhYmVsICogX19mbF9sb29rdXAodTMyIGxhYmVsKQorc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlwNl9mbG93bGFiZWwgKiBfX2ZsX2xvb2t1cChfX2JlMzIgbGFiZWwpCiB7CiAJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsOwogCkBAIC03Miw3ICs3Miw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqIGZsX2xvb2t1cCh1MzIgbGFiZWwpCitzdGF0aWMgc3RydWN0IGlwNl9mbG93bGFiZWwgKiBmbF9sb29rdXAoX19iZTMyIGxhYmVsKQogewogCXN0cnVjdCBpcDZfZmxvd2xhYmVsICpmbDsKIApAQCAtMTUzLDcgKzE1Myw3IEBACiAJd3JpdGVfdW5sb2NrKCZpcDZfZmxfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgZmxfaW50ZXJuKHN0cnVjdCBpcDZfZmxvd2xhYmVsICpmbCwgX191MzIgbGFiZWwpCitzdGF0aWMgaW50IGZsX2ludGVybihzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwsIF9fYmUzMiBsYWJlbCkKIHsKIAlmbC0+bGFiZWwgPSBsYWJlbCAmIElQVjZfRkxPV0xBQkVMX01BU0s7CiAKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAvKiBTb2NrZXQgZmxvd2xhYmVsIGxpc3RzICovCiAKLXN0cnVjdCBpcDZfZmxvd2xhYmVsICogZmw2X3NvY2tfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgdTMyIGxhYmVsKQorc3RydWN0IGlwNl9mbG93bGFiZWwgKiBmbDZfc29ja19sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBfX2JlMzIgbGFiZWwpCiB7CiAJc3RydWN0IGlwdjZfZmxfc29ja2xpc3QgKnNmbDsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IDZiOGU2ZDcuLmFkMGI4YWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC02MCwxNCArNjAsMjIgQEAKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyOwogCXUzMiAJCXBrdF9sZW47CisJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAotCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QpCi0JCWdvdG8gZHJvcDsKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gMDsKKwl9CiAKLQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOUkVDRUlWRVMpOworCXJjdV9yZWFkX2xvY2soKTsKKworCWlkZXYgPSBfX2luNl9kZXZfZ2V0KHNrYi0+ZGV2KTsKKworCUlQNl9JTkNfU1RBVFNfQkgoaWRldiwgSVBTVEFUU19NSUJfSU5SRUNFSVZFUyk7CiAKIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaWRldiwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTg0LDcgKzkyLDcgQEAKIAkgKiBhcnJpdmVkIHZpYSB0aGUgc2VuZGluZyBpbnRlcmZhY2UgKGV0aFgpLCBiZWNhdXNlIG9mIHRoZQogCSAqIG5hdHVyZSBvZiBzY29waW5nIGFyY2hpdGVjdHVyZS4gLS15b3NoZnVqaQogCSAqLwotCUlQNkNCKHNrYiktPmlpZiA9IHNrYi0+ZHN0ID8gKChzdHJ1Y3QgcnQ2X2luZm8gKilza2ItPmRzdCktPnJ0NmlfaWRldi0+ZGV2LT5pZmluZGV4IDogZGV2LT5pZmluZGV4OworCUlQNkNCKHNrYiktPmlpZiA9IHNrYi0+ZHN0ID8gaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KS0+ZGV2LT5pZmluZGV4IDogZGV2LT5pZmluZGV4OwogCiAJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKSkpCiAJCWdvdG8gZXJyOwpAQCAtMTA0LDcgKzExMiw3IEBACiAJCWlmIChwa3RfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSA+IHNrYi0+bGVuKQogCQkJZ290byB0cnVuY2F0ZWQ7CiAJCWlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCBwa3RfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkpIHsKLQkJCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQkJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIAkJaGRyID0gc2tiLT5uaC5pcHY2aDsKQEAgLTExMiwxNyArMTIwLDIxIEBACiAKIAlpZiAoaGRyLT5uZXh0aGRyID09IE5FWFRIRFJfSE9QKSB7CiAJCWlmIChpcHY2X3BhcnNlX2hvcG9wdHMoJnNrYikgPCAwKSB7Ci0JCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKKwkJCUlQNl9JTkNfU1RBVFNfQkgoaWRldiwgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAorCXJjdV9yZWFkX3VubG9jaygpOworCiAJcmV0dXJuIE5GX0hPT0soUEZfSU5FVDYsTkZfSVA2X1BSRV9ST1VUSU5HLCBza2IsIGRldiwgTlVMTCwgaXA2X3Jjdl9maW5pc2gpOwogdHJ1bmNhdGVkOgotCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5UUlVOQ0FURURQS1RTKTsKKwlJUDZfSU5DX1NUQVRTX0JIKGlkZXYsIElQU1RBVFNfTUlCX0lOVFJVTkNBVEVEUEtUUyk7CiBlcnI6Ci0JSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiBkcm9wOgorCXJjdV9yZWFkX3VubG9jaygpOwogCWtmcmVlX3NrYihza2IpOwogb3V0OgogCXJldHVybiAwOwpAQCAtMTQwLDYgKzE1Miw3IEBACiAJdW5zaWduZWQgaW50IG5ob2ZmOwogCWludCBuZXh0aGRyOwogCXU4IGhhc2g7CisJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAogCS8qCiAJICoJUGFyc2UgZXh0ZW5zaW9uIGhlYWRlcnMKQEAgLTE0Nyw2ICsxNjAsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogcmVzdWJtaXQ6CisJaWRldiA9IGlwNl9kc3RfaWRldihza2ItPmRzdCk7CiAJaWYgKCFwc2tiX3B1bGwoc2tiLCBza2ItPmgucmF3IC0gc2tiLT5kYXRhKSkKIAkJZ290byBkaXNjYXJkOwogCW5ob2ZmID0gSVA2Q0Ioc2tiKS0+bmhvZmY7CkBAIC0xODUsMjQgKzE5OSwyNCBAQAogCQlpZiAocmV0ID4gMCkKIAkJCWdvdG8gcmVzdWJtaXQ7CiAJCWVsc2UgaWYgKHJldCA9PSAwKQotCQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkRFTElWRVJTKTsKKwkJCUlQNl9JTkNfU1RBVFNfQkgoaWRldiwgSVBTVEFUU19NSUJfSU5ERUxJVkVSUyk7CiAJfSBlbHNlIHsKIAkJaWYgKCFyYXdfc2spIHsKIAkJCWlmICh4ZnJtNl9wb2xpY3lfY2hlY2soTlVMTCwgWEZSTV9QT0xJQ1lfSU4sIHNrYikpIHsKLQkJCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOVU5LTk9XTlBST1RPUyk7CisJCQkJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9JTlVOS05PV05QUk9UT1MpOwogCQkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BBUkFNUFJPQiwKIAkJCQkgICAgICAgICAgICBJQ01QVjZfVU5LX05FWFRIRFIsIG5ob2ZmLAogCQkJCSAgICAgICAgICAgIHNrYi0+ZGV2KTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOREVMSVZFUlMpOworCQkJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9JTkRFTElWRVJTKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAwOwogCiBkaXNjYXJkOgotCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7CisJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKQEAgLTIxOSw3ICsyMzMsNyBAQAogCXN0cnVjdCBpcHY2aGRyICpoZHI7CiAJaW50IGRlbGl2ZXI7CiAKLQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOTUNBU1RQS1RTKTsKKwlJUDZfSU5DX1NUQVRTX0JIKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0lOTUNBU1RQS1RTKTsKIAogCWhkciA9IHNrYi0+bmguaXB2Nmg7CiAJZGVsaXZlciA9IGxpa2VseSghKHNrYi0+ZGV2LT5mbGFncyAmIChJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCA2NjcxNjkxLi5lMDVlY2JiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC04OCw3ICs4OCw3IEBACiAJfSBlbHNlIGlmIChkc3QtPm5laWdoYm91cikKIAkJcmV0dXJuIGRzdC0+bmVpZ2hib3VyLT5vdXRwdXQoc2tiKTsKIAotCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfT1VUTk9ST1VURVMpOworCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTE4LDYgKzExOCw3IEBACiAKIAlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpKSB7CiAJCXN0cnVjdCBpcHY2X3BpbmZvKiBucCA9IHNrYi0+c2sgPyBpbmV0Nl9zayhza2ItPnNrKSA6IE5VTEw7CisJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpcDZfZHN0X2lkZXYoc2tiLT5kc3QpOwogCiAJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmICghbnAgfHwgbnAtPm1jX2xvb3ApICYmCiAJCSAgICBpcHY2X2Noa19tY2FzdF9hZGRyKGRldiwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLApAQCAtMTMzLDEzICsxMzQsMTMgQEAKIAkJCQkJaXA2X2Rldl9sb29wYmFja194bWl0KTsKIAogCQkJaWYgKHNrYi0+bmguaXB2NmgtPmhvcF9saW1pdCA9PSAwKSB7Ci0JCQkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CisJCQkJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KIAotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVE1DQVNUUEtUUyk7CisJCUlQNl9JTkNfU1RBVFMoaWRldiwgSVBTVEFUU19NSUJfT1VUTUNBU1RQS1RTKTsKIAl9CiAKIAlyZXR1cm4gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSVA2X1BPU1RfUk9VVElORywgc2tiLE5VTEwsIHNrYi0+ZGV2LGlwNl9vdXRwdXRfZmluaXNoKTsKQEAgLTE4MiwxMiArMTgzLDE0IEBACiAKIAkJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgaGVhZF9yb29tKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgaGVhZF9yb29tKTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJc2tiID0gc2tiMjsKLQkJCWlmIChza2IgPT0gTlVMTCkgewkKLQkJCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJCWlmIChza2IyID09IE5VTEwpIHsKKwkJCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihza2ItPmRzdCksCisJCQkJCSAgICAgIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQl9CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCXNrYiA9IHNrYjI7CiAJCQlpZiAoc2spCiAJCQkJc2tiX3NldF9vd25lcl93KHNrYiwgc2spOwogCQl9CkBAIC0yMTcsNyArMjIwLDcgQEAKIAlpZiAodGNsYXNzIDwgMCkKIAkJdGNsYXNzID0gMDsKIAotCSoodTMyICopaGRyID0gaHRvbmwoMHg2MDAwMDAwMCB8ICh0Y2xhc3MgPDwgMjApKSB8IGZsLT5mbDZfZmxvd2xhYmVsOworCSooX19iZTMyICopaGRyID0gaHRvbmwoMHg2MDAwMDAwMCB8ICh0Y2xhc3MgPDwgMjApKSB8IGZsLT5mbDZfZmxvd2xhYmVsOwogCiAJaGRyLT5wYXlsb2FkX2xlbiA9IGh0b25zKHNlZ19sZW4pOwogCWhkci0+bmV4dGhkciA9IHByb3RvOwpAQCAtMjMwLDcgKzIzMyw4IEBACiAKIAltdHUgPSBkc3RfbXR1KGRzdCk7CiAJaWYgKChza2ItPmxlbiA8PSBtdHUpIHx8IGlwZnJhZ29rIHx8IHNrYl9pc19nc28oc2tiKSkgewotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKKwkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJICAgICAgSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOwogCQlyZXR1cm4gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSVA2X0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBkc3QtPmRldiwKIAkJCQlkc3Rfb3V0cHV0KTsKIAl9CkBAIC0yMzksNyArMjQzLDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIklQdjY6IHNlbmRpbmcgcGt0X3Rvb19iaWcgdG8gc2VsZlxuIik7CiAJc2tiLT5kZXYgPSBkc3QtPmRldjsKIAlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKLQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CisJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtRU1TR1NJWkU7CiB9CkBAIC0yNjcsNyArMjcxLDcgQEAKIAloZHIgPSAoc3RydWN0IGlwdjZoZHIgKikgc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwogCXNrYi0+bmguaXB2NmggPSBoZHI7CiAKLQkqKHUzMiopaGRyID0gaHRvbmwoMHg2MDAwMDAwMCk7CisJKihfX2JlMzIqKWhkciA9IGh0b25sKDB4NjAwMDAwMDApOwogCiAJaGRyLT5wYXlsb2FkX2xlbiA9IGh0b25zKGxlbik7CiAJaGRyLT5uZXh0aGRyID0gcHJvdG87CkBAIC0zNzMsNyArMzc3LDcgQEAKIAkJZ290byBlcnJvcjsKIAogCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0ZXRCwgc2tiKSkgewotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOworCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihkc3QpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAkJZ290byBkcm9wOwogCX0KIApAQCAtNDA2LDcgKzQxMCw3IEBACiAJCXNrYi0+ZGV2ID0gZHN0LT5kZXY7CiAJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULAogCQkJICAgIDAsIHNrYi0+ZGV2KTsKLQkJSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CkBAIC00MTksMTMgKzQyMywxMyBAQAogCQlpZiAocHJveGllZCA+IDApCiAJCQlyZXR1cm4gaXA2X2lucHV0KHNrYik7CiAJCWVsc2UgaWYgKHByb3hpZWQgPCAwKSB7Ci0JCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOworCQkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoZHN0KSwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIAl9CiAKIAlpZiAoIXhmcm02X3JvdXRlX2ZvcndhcmQoc2tiKSkgewotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0lORElTQ0FSRFMpOworCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihkc3QpLCBJUFNUQVRTX01JQl9JTkRJU0NBUkRTKTsKIAkJZ290byBkcm9wOwogCX0KIAlkc3QgPSBza2ItPmRzdDsKQEAgLTQ2NCwxNCArNDY4LDE0IEBACiAJCS8qIEFnYWluLCBmb3JjZSBPVVRQVVQgZGV2aWNlIHVzZWQgYXMgc291cmNlIGFkZHJlc3MgKi8KIAkJc2tiLT5kZXYgPSBkc3QtPmRldjsKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgZHN0X210dShkc3QpLCBza2ItPmRldik7Ci0JCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5UT09CSUdFUlJPUlMpOwotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOVE9PQklHRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoZHN0KSwgSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRU1TR1NJWkU7CiAJfQogCiAJaWYgKHNrYl9jb3coc2tiLCBkc3QtPmRldi0+aGFyZF9oZWFkZXJfbGVuKSkgewotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoZHN0KSwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCQlnb3RvIGRyb3A7CiAJfQogCkBAIC00ODEsMTEgKzQ4NSwxMSBAQAogIAogCWhkci0+aG9wX2xpbWl0LS07CiAKLQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX09VVEZPUldEQVRBR1JBTVMpOworCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX09VVEZPUldEQVRBR1JBTVMpOwogCXJldHVybiBORl9IT09LKFBGX0lORVQ2LE5GX0lQNl9GT1JXQVJELCBza2IsIHNrYi0+ZGV2LCBkc3QtPmRldiwgaXA2X2ZvcndhcmRfZmluaXNoKTsKIAogZXJyb3I6Ci0JSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOworCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOQUREUkVSUk9SUyk7CiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtNDk5LDEyICs1MDMsMTIgQEAKIAlkc3RfcmVsZWFzZSh0by0+ZHN0KTsKIAl0by0+ZHN0ID0gZHN0X2Nsb25lKGZyb20tPmRzdCk7CiAJdG8tPmRldiA9IGZyb20tPmRldjsKKwl0by0+bWFyayA9IGZyb20tPm1hcms7CiAKICNpZmRlZiBDT05GSUdfTkVUX1NDSEVECiAJdG8tPnRjX2luZGV4ID0gZnJvbS0+dGNfaW5kZXg7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCi0JdG8tPm5mbWFyayA9IGZyb20tPm5mbWFyazsKIAkvKiBDb25uZWN0aW9uIGFzc29jaWF0aW9uIGlzIHNhbWUgYXMgcHJlLWZyYWcgcGFja2V0ICovCiAJbmZfY29ubnRyYWNrX3B1dCh0by0+bmZjdCk7CiAJdG8tPm5mY3QgPSBmcm9tLT5uZmN0OwpAQCAtNTcxLDcgKzU3NSw3IEBACiAJc3RydWN0IGlwdjZoZHIgKnRtcF9oZHI7CiAJc3RydWN0IGZyYWdfaGRyICpmaDsKIAl1bnNpZ25lZCBpbnQgbXR1LCBobGVuLCBsZWZ0LCBsZW47Ci0JdTMyIGZyYWdfaWQgPSAwOworCV9fYmUzMiBmcmFnX2lkID0gMDsKIAlpbnQgcHRyLCBvZmZzZXQgPSAwLCBlcnI9MDsKIAl1OCAqcHJldmhkciwgbmV4dGhkciA9IDA7CiAKQEAgLTYyMCwxNCArNjI0LDEzIEBACiAJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0ID0gTlVMTDsKIAkJLyogQlVJTEQgSEVBREVSICovCiAKLQkJdG1wX2hkciA9IGttYWxsb2MoaGxlbiwgR0ZQX0FUT01JQyk7CisJCXRtcF9oZHIgPSBrbWVtZHVwKHNrYi0+bmgucmF3LCBobGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCF0bXBfaGRyKSB7Ci0JCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CisJCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCiAJCSpwcmV2aGRyID0gTkVYVEhEUl9GUkFHTUVOVDsKLQkJbWVtY3B5KHRtcF9oZHIsIHNrYi0+bmgucmF3LCBobGVuKTsKIAkJX19za2JfcHVsbChza2IsIGhsZW4pOwogCQlmaCA9IChzdHJ1Y3QgZnJhZ19oZHIqKV9fc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKSk7CiAJCXNrYi0+bmgucmF3ID0gX19za2JfcHVzaChza2IsIGhsZW4pOwpAQCAtNjQzLDcgKzY0Niw4IEBACiAJCXNrYi0+ZGF0YV9sZW4gPSBmaXJzdF9sZW4gLSBza2JfaGVhZGxlbihza2IpOwogCQlza2ItPmxlbiA9IGZpcnN0X2xlbjsKIAkJc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4gPSBodG9ucyhmaXJzdF9sZW4gLSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKLSAKKworCQlkc3RfaG9sZCgmcnQtPnUuZHN0KTsKIAogCQlmb3IgKDs7KSB7CiAJCQkvKiBQcmVwYXJlIGhlYWRlciBvZiB0aGUgbmV4dCBmcmFtZSwKQEAgLTY2Nyw3ICs2NzEsNyBAQAogCQkJCiAJCQllcnIgPSBvdXRwdXQoc2tiKTsKIAkJCWlmKCFlcnIpCi0JCQkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUyk7CisJCQkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoJnJ0LT51LmRzdCksIElQU1RBVFNfTUlCX0ZSQUdDUkVBVEVTKTsKIAogCQkJaWYgKGVyciB8fCAhZnJhZykKIAkJCQlicmVhazsKQEAgLTY4MCw3ICs2ODQsOCBAQAogCQlrZnJlZSh0bXBfaGRyKTsKIAogCQlpZiAoZXJyID09IDApIHsKLQkJCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR09LUyk7CisJCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldigmcnQtPnUuZHN0KSwgSVBTVEFUU19NSUJfRlJBR09LUyk7CisJCQlkc3RfcmVsZWFzZSgmcnQtPnUuZHN0KTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTY5MCw3ICs2OTUsOCBAQAogCQkJZnJhZyA9IHNrYjsKIAkJfQogCi0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0ZBSUxTKTsKKwkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoJnJ0LT51LmRzdCksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CisJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNzIzLDcgKzcyOSw4IEBACiAKIAkJaWYgKChmcmFnID0gYWxsb2Nfc2tiKGxlbitobGVuK3NpemVvZihzdHJ1Y3QgZnJhZ19oZHIpK0xMX1JFU0VSVkVEX1NQQUNFKHJ0LT51LmRzdC5kZXYpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewogCQkJTkVUREVCVUcoS0VSTl9JTkZPICJJUHY2OiBmcmFnOiBubyBtZW1vcnkgZm9yIG5ldyBmcmFnbWVudCFcbiIpOwotCQkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHRkFJTFMpOworCQkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCSAgICAgIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBmYWlsOwogCQl9CkBAIC03ODQsMTUgKzc5MSwxNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBmYWlsOwogCi0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0NSRUFURVMpOworCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0ZSQUdDUkVBVEVTKTsKIAl9CisJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkgICAgICBJUFNUQVRTX01JQl9GUkFHT0tTKTsKIAlrZnJlZV9za2Ioc2tiKTsKLQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdPS1MpOwogCXJldHVybiBlcnI7CiAKIGZhaWw6CisJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkgICAgICBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCWtmcmVlX3NrYihza2IpOyAKLQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTI2NSw3ICsxMjc0LDcgQEAKIAlyZXR1cm4gMDsKIGVycm9yOgogCWluZXQtPmNvcmsubGVuZ3RoIC09IGxlbmd0aDsKLQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwlJUDZfSU5DX1NUQVRTKHJ0LT5ydDZpX2lkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzExLDcgKzEzMjAsNyBAQAogCiAJc2tiLT5uaC5pcHY2aCA9IGhkciA9IChzdHJ1Y3QgaXB2NmhkciopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAJCi0JKih1MzIqKWhkciA9IGZsLT5mbDZfZmxvd2xhYmVsIHwKKwkqKF9fYmUzMiopaGRyID0gZmwtPmZsNl9mbG93bGFiZWwgfAogCQkgICAgIGh0b25sKDB4NjAwMDAwMDAgfCAoKGludClucC0+Y29yay50Y2xhc3MgPDwgMjApKTsKIAogCWlmIChza2ItPmxlbiA8PSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgSVBWNl9NQVhQTEVOKQpAQCAtMTMyNiw3ICsxMzM1LDcgQEAKIAlza2ItPnByaW9yaXR5ID0gc2stPnNrX3ByaW9yaXR5OwogCiAJc2tiLT5kc3QgPSBkc3RfY2xvbmUoJnJ0LT51LmRzdCk7Ci0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CQorCUlQNl9JTkNfU1RBVFMocnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOwogCWVyciA9IE5GX0hPT0soUEZfSU5FVDYsIE5GX0lQNl9MT0NBTF9PVVQsIHNrYiwgTlVMTCwgc2tiLT5kc3QtPmRldiwgZHN0X291dHB1dCk7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID4gMCkKQEAgLTEzNTcsNyArMTM2Niw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZV90YWlsKCZzay0+c2tfd3JpdGVfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOworCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihza2ItPmRzdCksCisJCQkgICAgICBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJCWtmcmVlX3NrYihza2IpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCmluZGV4IGI5ZjQwMjkuLjhkOTE4MzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl90dW5uZWwuYworKysgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAogI2RlZmluZSBIQVNIX1NJWkUgIDMyCiAKLSNkZWZpbmUgSEFTSChhZGRyKSAoKChhZGRyKS0+czZfYWRkcjMyWzBdIF4gKGFkZHIpLT5zNl9hZGRyMzJbMV0gXiBcCisjZGVmaW5lIEhBU0goYWRkcikgKChfX2ZvcmNlIHUzMikoKGFkZHIpLT5zNl9hZGRyMzJbMF0gXiAoYWRkciktPnM2X2FkZHIzMlsxXSBeIFwKIAkgICAgICAgICAgICAgKGFkZHIpLT5zNl9hZGRyMzJbMl0gXiAoYWRkciktPnM2X2FkZHIzMlszXSkgJiBcCiAgICAgICAgICAgICAgICAgICAgIChIQVNIX1NJWkUgLSAxKSkKIApAQCAtMjE1LDExICsyMTUsMTAgQEAKICAqICAgQ3JlYXRlIHR1bm5lbCBtYXRjaGluZyBnaXZlbiBwYXJhbWV0ZXJzLgogICogCiAgKiBSZXR1cm46IAotICogICAwIG9uIHN1Y2Nlc3MKKyAqICAgY3JlYXRlZCB0dW5uZWwgb3IgTlVMTAogICoqLwogCi1zdGF0aWMgaW50Ci1pcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgaXA2X3RubF9wYXJtICpwLCBzdHJ1Y3QgaXA2X3RubCAqKnB0KQorc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZfdG5sX2NyZWF0ZShzdHJ1Y3QgaXA2X3RubF9wYXJtICpwKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGlwNl90bmwgKnQ7CkBAIC0yMzYsMTEgKzIzNSwxMSBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChpID09IElQNl9UTkxfTUFYKSAKLQkJCXJldHVybiAtRU5PQlVGUzsKKwkJCWdvdG8gZmFpbGVkOwogCX0KIAlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mICgqdCksIG5hbWUsIGlwNmlwNl90bmxfZGV2X3NldHVwKTsKIAlpZiAoZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGZhaWxlZDsKIAogCXQgPSBuZXRkZXZfcHJpdihkZXYpOwogCWRldi0+aW5pdCA9IGlwNmlwNl90bmxfZGV2X2luaXQ7CkBAIC0yNDgsMTMgKzI0NywxMyBAQAogCiAJaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KSkgPCAwKSB7CiAJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gZmFpbGVkOwogCX0KIAlkZXZfaG9sZChkZXYpOwotCiAJaXA2aXA2X3RubF9saW5rKHQpOwotCSpwdCA9IHQ7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHQ7CitmYWlsZWQ6CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qKgpAQCAtMjY4LDMyICsyNjcsMjMgQEAKICAqICAgdHVubmVsIGRldmljZSBpcyBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIGZvciB1c2UuCiAgKgogICogUmV0dXJuOgotICogICAwIGlmIHR1bm5lbCBsb2NhdGVkIG9yIGNyZWF0ZWQsCi0gKiAgIC1FSU5WQUwgaWYgcGFyYW1ldGVycyBpbmNvcnJlY3QsCi0gKiAgIC1FTk9ERVYgaWYgbm8gbWF0Y2hpbmcgdHVubmVsIGF2YWlsYWJsZQorICogICBtYXRjaGluZyB0dW5uZWwgb3IgTlVMTAogICoqLwogCi1zdGF0aWMgaW50Ci1pcDZpcDZfdG5sX2xvY2F0ZShzdHJ1Y3QgaXA2X3RubF9wYXJtICpwLCBzdHJ1Y3QgaXA2X3RubCAqKnB0LCBpbnQgY3JlYXRlKQorc3RhdGljIHN0cnVjdCBpcDZfdG5sICppcDZpcDZfdG5sX2xvY2F0ZShzdHJ1Y3QgaXA2X3RubF9wYXJtICpwLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbjZfYWRkciAqcmVtb3RlID0gJnAtPnJhZGRyOwogCXN0cnVjdCBpbjZfYWRkciAqbG9jYWwgPSAmcC0+bGFkZHI7CiAJc3RydWN0IGlwNl90bmwgKnQ7CiAKLQlpZiAocC0+cHJvdG8gIT0gSVBQUk9UT19JUFY2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWZvciAodCA9ICppcDZpcDZfYnVja2V0KHApOyB0OyB0ID0gdC0+bmV4dCkgewogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKGxvY2FsLCAmdC0+cGFybXMubGFkZHIpICYmCi0JCSAgICBpcHY2X2FkZHJfZXF1YWwocmVtb3RlLCAmdC0+cGFybXMucmFkZHIpKSB7Ci0JCQkqcHQgPSB0OwotCQkJcmV0dXJuIChjcmVhdGUgPyAtRUVYSVNUIDogMCk7Ci0JCX0KKwkJICAgIGlwdjZfYWRkcl9lcXVhbChyZW1vdGUsICZ0LT5wYXJtcy5yYWRkcikpCisJCQlyZXR1cm4gdDsKIAl9CiAJaWYgKCFjcmVhdGUpCi0JCXJldHVybiAtRU5PREVWOwotCQotCXJldHVybiBpcDZfdG5sX2NyZWF0ZShwLCBwdCk7CisJCXJldHVybiBOVUxMOworCXJldHVybiBpcDZfdG5sX2NyZWF0ZShwKTsKIH0KIAogLyoqCkBAIC0zOTEsNyArMzgxLDcgQEAKIAogc3RhdGljIGludAogaXA2aXA2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKLQkgICBpbnQgdHlwZSwgaW50IGNvZGUsIGludCBvZmZzZXQsIF9fdTMyIGluZm8pCisJICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXB2NmggPSAoc3RydWN0IGlwdjZoZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpcDZfdG5sICp0OwpAQCAtNDM0LDEyICs0MjQsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgSUNNUFY2X1BBUkFNUFJPQjoKLQkJLyogaWdub3JlIGlmIHBhcmFtZXRlciBwcm9ibGVtIG5vdCBjYXVzZWQgYnkgYSB0dW5uZWwKLQkJICAgZW5jYXBzdWxhdGlvbiBsaW1pdCBzdWItb3B0aW9uICovCi0JCWlmIChjb2RlICE9IElDTVBWNl9IRFJfRklFTEQpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCXRlbGkgPSBwYXJzZV90bHZfdG5sX2VuY19saW0oc2tiLCBza2ItPmRhdGEpOworCQl0ZWxpID0gMDsKKwkJaWYgKGNvZGUgPT0gSUNNUFY2X0hEUl9GSUVMRCkKKwkJCXRlbGkgPSBwYXJzZV90bHZfdG5sX2VuY19saW0oc2tiLCBza2ItPmRhdGEpOwogCiAJCWlmICh0ZWxpICYmIHRlbGkgPT0gbnRvaGwoaW5mbykgLSAyKSB7CiAJCQl0ZWwgPSAoc3RydWN0IGlwdjZfdGx2X3RubF9lbmNfbGltICopICZza2ItPmRhdGFbdGVsaV07CkBAIC00NTEsNiArNDM4LDEwIEBACiAJCQkJCSAgICAgICAidHVubmVsIVxuIiwgdC0+cGFybXMubmFtZSk7CiAJCQkJcmVsX21zZyA9IDE7CiAJCQl9CisJCX0gZWxzZSBpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzOiBSZWNpcGllbnQgdW5hYmxlIHRvIHBhcnNlIHR1bm5lbGVkICIKKwkJCSAgICAgICAicGFja2V0IVxuICIsIHQtPnBhcm1zLm5hbWUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSUNNUFY2X1BLVF9UT09CSUc6CkBAIC00NzAsNiArNDYxLDcgQEAKIAlpZiAocmVsX21zZyAmJiAgcHNrYl9tYXlfcHVsbChza2IsIG9mZnNldCArIHNpemVvZiAoKmlwdjZoKSkpIHsKIAkJc3RydWN0IHJ0Nl9pbmZvICpydDsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwogCQlpZiAoIXNrYjIpCiAJCQlnb3RvIG91dDsKIApAQCAtNTA0LDYgKzQ5NiwyNyBAQAogCWlmIChJTkVUX0VDTl9pc19jZShpcHY2X2dldF9kc2ZpZWxkKG91dGVyX2lwaCkpKQogCQlJUDZfRUNOX3NldF9jZShpbm5lcl9pcGgpOwogfQorc3RhdGljIGlubGluZSBpbnQgaXA2X3RubF9yY3ZfY3RsKHN0cnVjdCBpcDZfdG5sICp0KQoreworCXN0cnVjdCBpcDZfdG5sX3Bhcm0gKnAgPSAmdC0+cGFybXM7CisJaW50IHJldCA9IDA7CisKKwlpZiAocC0+ZmxhZ3MgJiBJUDZfVE5MX0ZfQ0FQX1JDVikgeworICAgIAkJc3RydWN0IG5ldF9kZXZpY2UgKmxkZXYgPSBOVUxMOworCisJCWlmIChwLT5saW5rKQorCQkJbGRldiA9IGRldl9nZXRfYnlfaW5kZXgocC0+bGluayk7CisKKwkJaWYgKChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KCZwLT5sYWRkcikgfHwKKwkJICAgICBsaWtlbHkoaXB2Nl9jaGtfYWRkcigmcC0+bGFkZHIsIGxkZXYsIDApKSkgJiYKKwkJICAgIGxpa2VseSghaXB2Nl9jaGtfYWRkcigmcC0+cmFkZHIsIE5VTEwsIDApKSkKKwkJCXJldCA9IDE7CisKKwkJaWYgKGxkZXYpCisJCQlkZXZfcHV0KGxkZXYpOworCX0KKwlyZXR1cm4gcmV0OworfQogCiAvKioKICAqIGlwNmlwNl9yY3YgLSBkZWNhcHN1bGF0ZSBJUHY2IHBhY2tldCBhbmQgcmV0cmFuc21pdCBpdCBsb2NhbGx5CkBAIC01MjgsNyArNTQxLDcgQEAKIAkJCWdvdG8gZGlzY2FyZDsKIAkJfQogCi0JCWlmICghKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX0NBUF9SQ1YpKSB7CisJCWlmICghaXA2X3RubF9yY3ZfY3RsKHQpKSB7CiAJCQl0LT5zdGF0LnJ4X2Ryb3BwZWQrKzsKIAkJCXJlYWRfdW5sb2NrKCZpcDZpcDZfbG9jayk7CiAJCQlnb3RvIGRpc2NhcmQ7CkBAIC01NjAsMzEgKzU3MywyMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqY3JlYXRlX3RlbChfX3U4IGVuY2FwX2xpbWl0KQorc3RydWN0IGlwdjZfdGVsX3R4b3B0aW9uIHsKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgb3BzOworCV9fdTggZHN0X29wdFs4XTsKK307CisKK3N0YXRpYyB2b2lkIGluaXRfdGVsX3R4b3B0KHN0cnVjdCBpcHY2X3RlbF90eG9wdGlvbiAqb3B0LCBfX3U4IGVuY2FwX2xpbWl0KQogewotCXN0cnVjdCBpcHY2X3Rsdl90bmxfZW5jX2xpbSAqdGVsOwotCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0OwotCV9fdTggKnJhdzsKKwltZW1zZXQob3B0LCAwLCBzaXplb2Yoc3RydWN0IGlwdjZfdGVsX3R4b3B0aW9uKSk7CiAKLQlpbnQgb3B0X2xlbiA9IHNpemVvZigqb3B0KSArIDg7CisJb3B0LT5kc3Rfb3B0WzJdID0gSVBWNl9UTFZfVE5MX0VOQ0FQX0xJTUlUOworCW9wdC0+ZHN0X29wdFszXSA9IDE7CisJb3B0LT5kc3Rfb3B0WzRdID0gZW5jYXBfbGltaXQ7CisJb3B0LT5kc3Rfb3B0WzVdID0gSVBWNl9UTFZfUEFETjsKKwlvcHQtPmRzdF9vcHRbNl0gPSAxOwogCi0JaWYgKCEob3B0ID0ga3phbGxvYyhvcHRfbGVuLCBHRlBfQVRPTUlDKSkpIHsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCW9wdC0+dG90X2xlbiA9IG9wdF9sZW47Ci0Jb3B0LT5kc3Qwb3B0ID0gKHN0cnVjdCBpcHY2X29wdF9oZHIgKikgKG9wdCArIDEpOwotCW9wdC0+b3B0X25mbGVuID0gODsKLQotCXRlbCA9IChzdHJ1Y3QgaXB2Nl90bHZfdG5sX2VuY19saW0gKikgKG9wdC0+ZHN0MG9wdCArIDEpOwotCXRlbC0+dHlwZSA9IElQVjZfVExWX1ROTF9FTkNBUF9MSU1JVDsKLQl0ZWwtPmxlbmd0aCA9IDE7Ci0JdGVsLT5lbmNhcF9saW1pdCA9IGVuY2FwX2xpbWl0OwotCi0JcmF3ID0gKF9fdTggKikgb3B0LT5kc3Qwb3B0OwotCXJhd1s1XSA9IElQVjZfVExWX1BBRE47Ci0JcmF3WzZdID0gMTsKLQotCXJldHVybiBvcHQ7CisJb3B0LT5vcHMuZHN0MG9wdCA9IChzdHJ1Y3QgaXB2Nl9vcHRfaGRyICopIG9wdC0+ZHN0X29wdDsKKwlvcHQtPm9wcy5vcHRfbmZsZW4gPSA4OwogfQogCiAvKioKQEAgLTYwNyw2ICs2MTIsMzQgQEAKIAlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKCZ0LT5wYXJtcy5yYWRkciwgJmhkci0+c2FkZHIpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBpcDZfdG5sX3htaXRfY3RsKHN0cnVjdCBpcDZfdG5sICp0KQoreworCXN0cnVjdCBpcDZfdG5sX3Bhcm0gKnAgPSAmdC0+cGFybXM7CisJaW50IHJldCA9IDA7CisKKyAJaWYgKHAtPmZsYWdzICYgSVA2X1ROTF9GX0NBUF9YTUlUKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpsZGV2ID0gTlVMTDsKKworCQlpZiAocC0+bGluaykKKwkJCWxkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHAtPmxpbmspOworCisJCWlmICh1bmxpa2VseSghaXB2Nl9jaGtfYWRkcigmcC0+bGFkZHIsIGxkZXYsIDApKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXMgeG1pdDogTG9jYWwgYWRkcmVzcyBub3QgeWV0IGNvbmZpZ3VyZWQhXG4iLAorCQkJICAgICAgIHAtPm5hbWUpOworCQllbHNlIGlmICghaXB2Nl9hZGRyX2lzX211bHRpY2FzdCgmcC0+cmFkZHIpICYmCisJCQkgdW5saWtlbHkoaXB2Nl9jaGtfYWRkcigmcC0+cmFkZHIsIE5VTEwsIDApKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXMgeG1pdDogUm91dGluZyBsb29wISAiCisJCQkgICAgICAgIlJlbW90ZSBhZGRyZXNzIGZvdW5kIG9uIHRoaXMgbm9kZSFcbiIsCisJCQkgICAgICAgcC0+bmFtZSk7CisJCWVsc2UKKwkJCXJldCA9IDE7CisJCWlmIChsZGV2KQorCQkJZGV2X3B1dChsZGV2KTsKKwl9CisJcmV0dXJuIHJldDsKK30KIC8qKgogICogaXA2aXA2X3RubF94bWl0IC0gZW5jYXBzdWxhdGUgcGFja2V0IGFuZCBzZW5kIAogICogICBAc2tiOiB0aGUgb3V0Z29pbmcgc29ja2V0IGJ1ZmZlcgpAQCAtNjI2LDggKzY1OSw4IEBACiAJc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0LT5zdGF0OwogCXN0cnVjdCBpcHY2aGRyICppcHY2aCA9IHNrYi0+bmguaXB2Nmg7Ci0Jc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQgPSBOVUxMOwogCWludCBlbmNhcF9saW1pdCA9IC0xOworCXN0cnVjdCBpcHY2X3RlbF90eG9wdGlvbiBvcHQ7CiAJX191MTYgb2Zmc2V0OwogCXN0cnVjdCBmbG93aSBmbDsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CkBAIC02NDQsMTAgKzY3Nyw5IEBACiAJCWdvdG8gdHhfZXJyOwogCX0KIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUFY2KSB8fAotCSAgICAhKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX0NBUF9YTUlUKSB8fAotCSAgICBpcDZpcDZfdG5sX2FkZHJfY29uZmxpY3QodCwgaXB2NmgpKSB7CisJICAgICFpcDZfdG5sX3htaXRfY3RsKHQpIHx8IGlwNmlwNl90bmxfYWRkcl9jb25mbGljdCh0LCBpcHY2aCkpCiAJCWdvdG8gdHhfZXJyOwotCX0KKwogCWlmICgob2Zmc2V0ID0gcGFyc2VfdGx2X3RubF9lbmNfbGltKHNrYiwgc2tiLT5uaC5yYXcpKSA+IDApIHsKIAkJc3RydWN0IGlwdjZfdGx2X3RubF9lbmNfbGltICp0ZWw7CiAJCXRlbCA9IChzdHJ1Y3QgaXB2Nl90bHZfdG5sX2VuY19saW0gKikgJnNrYi0+bmgucmF3W29mZnNldF07CkBAIC02NTcsMjAgKzY4OSwxNyBAQAogCQkJZ290byB0eF9lcnI7CiAJCX0KIAkJZW5jYXBfbGltaXQgPSB0ZWwtPmVuY2FwX2xpbWl0IC0gMTsKLQl9IGVsc2UgaWYgKCEodC0+cGFybXMuZmxhZ3MgJiBJUDZfVE5MX0ZfSUdOX0VOQ0FQX0xJTUlUKSkgeworCX0gZWxzZSBpZiAoISh0LT5wYXJtcy5mbGFncyAmIElQNl9UTkxfRl9JR05fRU5DQVBfTElNSVQpKQogCQllbmNhcF9saW1pdCA9IHQtPnBhcm1zLmVuY2FwX2xpbWl0OwotCX0KKwogCW1lbWNweSgmZmwsICZ0LT5mbCwgc2l6ZW9mIChmbCkpOwogCXByb3RvID0gZmwucHJvdG87CiAKIAlkc2ZpZWxkID0gaXB2Nl9nZXRfZHNmaWVsZChpcHY2aCk7CiAJaWYgKCh0LT5wYXJtcy5mbGFncyAmIElQNl9UTkxfRl9VU0VfT1JJR19UQ0xBU1MpKQotCQlmbC5mbDZfZmxvd2xhYmVsIHw9ICgqKF9fdTMyICopIGlwdjZoICYgSVBWNl9UQ0xBU1NfTUFTSyk7CisJCWZsLmZsNl9mbG93bGFiZWwgfD0gKCooX19iZTMyICopIGlwdjZoICYgSVBWNl9UQ0xBU1NfTUFTSyk7CiAJaWYgKCh0LT5wYXJtcy5mbGFncyAmIElQNl9UTkxfRl9VU0VfT1JJR19GTE9XTEFCRUwpKQotCQlmbC5mbDZfZmxvd2xhYmVsIHw9ICgqKF9fdTMyICopIGlwdjZoICYgSVBWNl9GTE9XTEFCRUxfTUFTSyk7Ci0KLQlpZiAoZW5jYXBfbGltaXQgPj0gMCAmJiAob3B0ID0gY3JlYXRlX3RlbChlbmNhcF9saW1pdCkpID09IE5VTEwpCi0JCWdvdG8gdHhfZXJyOworCQlmbC5mbDZfZmxvd2xhYmVsIHw9ICgqKF9fYmUzMiAqKSBpcHY2aCAmIElQVjZfRkxPV0xBQkVMX01BU0spOwogCiAJaWYgKChkc3QgPSBpcDZfdG5sX2RzdF9jaGVjayh0KSkgIT0gTlVMTCkKIAkJZHN0X2hvbGQoZHN0KTsKQEAgLTY5Miw3ICs3MjEsNyBAQAogCQlnb3RvIHR4X2Vycl9kc3RfcmVsZWFzZTsKIAl9CiAJbXR1ID0gZHN0X210dShkc3QpIC0gc2l6ZW9mICgqaXB2NmgpOwotCWlmIChvcHQpIHsKKwlpZiAoZW5jYXBfbGltaXQgPj0gMCkgewogCQltYXhfaGVhZHJvb20gKz0gODsKIAkJbXR1IC09IDg7CiAJfQpAQCAtNzMwLDEyICs3NTksMTMgQEAKIAogCXNrYi0+aC5yYXcgPSBza2ItPm5oLnJhdzsKIAotCWlmIChvcHQpCi0JCWlwdjZfcHVzaF9uZnJhZ19vcHRzKHNrYiwgb3B0LCAmcHJvdG8sIE5VTEwpOwotCisJaWYgKGVuY2FwX2xpbWl0ID49IDApIHsKKwkJaW5pdF90ZWxfdHhvcHQoJm9wdCwgZW5jYXBfbGltaXQpOworCQlpcHY2X3B1c2hfbmZyYWdfb3B0cyhza2IsICZvcHQub3BzLCAmcHJvdG8sIE5VTEwpOworCX0KIAlza2ItPm5oLnJhdyA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiAJaXB2NmggPSBza2ItPm5oLmlwdjZoOwotCSoodTMyKilpcHY2aCA9IGZsLmZsNl9mbG93bGFiZWwgfCBodG9ubCgweDYwMDAwMDAwKTsKKwkqKF9fYmUzMiopaXB2NmggPSBmbC5mbDZfZmxvd2xhYmVsIHwgaHRvbmwoMHg2MDAwMDAwMCk7CiAJZHNmaWVsZCA9IElORVRfRUNOX2VuY2Fwc3VsYXRlKDAsIGRzZmllbGQpOwogCWlwdjZfY2hhbmdlX2RzZmllbGQoaXB2NmgsIH5JTkVUX0VDTl9NQVNLLCBkc2ZpZWxkKTsKIAlpcHY2aC0+cGF5bG9hZF9sZW4gPSBodG9ucyhza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwpAQCAtNzQ4LDcgKzc3OCw3IEBACiAJZXJyID0gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSVA2X0xPQ0FMX09VVCwgc2tiLCBOVUxMLCAKIAkJICAgICAgc2tiLT5kc3QtPmRldiwgZHN0X291dHB1dCk7CiAKLQlpZiAoZXJyID09IE5FVF9YTUlUX1NVQ0NFU1MgfHwgZXJyID09IE5FVF9YTUlUX0NOKSB7CisJaWYgKG5ldF94bWl0X2V2YWwoZXJyKSA9PSAwKSB7CiAJCXN0YXRzLT50eF9ieXRlcyArPSBwa3RfbGVuOwogCQlzdGF0cy0+dHhfcGFja2V0cysrOwogCX0gZWxzZSB7CkBAIC03NTYsOSArNzg2LDYgQEAKIAkJc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJfQogCWlwNl90bmxfZHN0X3N0b3JlKHQsIGRzdCk7Ci0KLQlrZnJlZShvcHQpOwotCiAJdC0+cmVjdXJzaW9uLS07CiAJcmV0dXJuIDA7CiB0eF9lcnJfbGlua19mYWlsdXJlOgpAQCAtNzY2LDcgKzc5Myw2IEBACiAJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogdHhfZXJyX2RzdF9yZWxlYXNlOgogCWRzdF9yZWxlYXNlKGRzdCk7Ci0Ja2ZyZWUob3B0KTsKIHR4X2VycjoKIAlzdGF0cy0+dHhfZXJyb3JzKys7CiAJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKQEAgLTc3OCwzOSArODA0LDE5IEBACiBzdGF0aWMgdm9pZCBpcDZfdG5sX3NldF9jYXAoc3RydWN0IGlwNl90bmwgKnQpCiB7CiAJc3RydWN0IGlwNl90bmxfcGFybSAqcCA9ICZ0LT5wYXJtczsKLQlzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyID0gJnAtPmxhZGRyOwotCXN0cnVjdCBpbjZfYWRkciAqcmFkZHIgPSAmcC0+cmFkZHI7Ci0JaW50IGx0eXBlID0gaXB2Nl9hZGRyX3R5cGUobGFkZHIpOwotCWludCBydHlwZSA9IGlwdjZfYWRkcl90eXBlKHJhZGRyKTsKKwlpbnQgbHR5cGUgPSBpcHY2X2FkZHJfdHlwZSgmcC0+bGFkZHIpOworCWludCBydHlwZSA9IGlwdjZfYWRkcl90eXBlKCZwLT5yYWRkcik7CiAKIAlwLT5mbGFncyAmPSB+KElQNl9UTkxfRl9DQVBfWE1JVHxJUDZfVE5MX0ZfQ0FQX1JDVik7CiAKLQlpZiAobHR5cGUgIT0gSVBWNl9BRERSX0FOWSAmJiBydHlwZSAhPSBJUFY2X0FERFJfQU5ZICYmCi0JICAgICgobHR5cGV8cnR5cGUpICYKLQkgICAgIChJUFY2X0FERFJfVU5JQ0FTVHwKLQkgICAgICBJUFY2X0FERFJfTE9PUEJBQ0t8SVBWNl9BRERSX0xJTktMT0NBTHwKLQkgICAgICBJUFY2X0FERFJfTUFQUEVEfElQVjZfQUREUl9SRVNFUlZFRCkpID09IElQVjZfQUREUl9VTklDQVNUKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpsZGV2ID0gTlVMTDsKLQkJaW50IGxfb2sgPSAxOwotCQlpbnQgcl9vayA9IDE7Ci0KLQkJaWYgKHAtPmxpbmspCi0JCQlsZGV2ID0gZGV2X2dldF9ieV9pbmRleChwLT5saW5rKTsKLQkJCi0JCWlmIChsdHlwZSZJUFY2X0FERFJfVU5JQ0FTVCAmJiAhaXB2Nl9jaGtfYWRkcihsYWRkciwgbGRldiwgMCkpCi0JCQlsX29rID0gMDsKLQkJCi0JCWlmIChydHlwZSZJUFY2X0FERFJfVU5JQ0FTVCAmJiBpcHY2X2Noa19hZGRyKHJhZGRyLCBOVUxMLCAwKSkKLQkJCXJfb2sgPSAwOwotCQkKLQkJaWYgKGxfb2sgJiYgcl9vaykgewotCQkJaWYgKGx0eXBlJklQVjZfQUREUl9VTklDQVNUKQotCQkJCXAtPmZsYWdzIHw9IElQNl9UTkxfRl9DQVBfWE1JVDsKLQkJCWlmIChydHlwZSZJUFY2X0FERFJfVU5JQ0FTVCkKLQkJCQlwLT5mbGFncyB8PSBJUDZfVE5MX0ZfQ0FQX1JDVjsKLQkJfQotCQlpZiAobGRldikKLQkJCWRldl9wdXQobGRldik7CisJaWYgKGx0eXBlICYgKElQVjZfQUREUl9VTklDQVNUfElQVjZfQUREUl9NVUxUSUNBU1QpICYmCisJICAgIHJ0eXBlICYgKElQVjZfQUREUl9VTklDQVNUfElQVjZfQUREUl9NVUxUSUNBU1QpICYmCisJICAgICEoKGx0eXBlfHJ0eXBlKSAmIElQVjZfQUREUl9MT09QQkFDSykgJiYKKwkgICAgKCEoKGx0eXBlfHJ0eXBlKSAmIElQVjZfQUREUl9MSU5LTE9DQUwpIHx8IHAtPmxpbmspKSB7CisJCWlmIChsdHlwZSZJUFY2X0FERFJfVU5JQ0FTVCkKKwkJCXAtPmZsYWdzIHw9IElQNl9UTkxfRl9DQVBfWE1JVDsKKwkJaWYgKHJ0eXBlJklQVjZfQUREUl9VTklDQVNUKQorCQkJcC0+ZmxhZ3MgfD0gSVA2X1ROTF9GX0NBUF9SQ1Y7CiAJfQogfQogCkBAIC04NDQsOCArODUwLDExIEBACiAJZGV2LT5pZmxpbmsgPSBwLT5saW5rOwogCiAJaWYgKHAtPmZsYWdzICYgSVA2X1ROTF9GX0NBUF9YTUlUKSB7CisJCWludCBzdHJpY3QgPSAoaXB2Nl9hZGRyX3R5cGUoJnAtPnJhZGRyKSAmCisJCQkgICAgICAoSVBWNl9BRERSX01VTFRJQ0FTVHxJUFY2X0FERFJfTElOS0xPQ0FMKSk7CisKIAkJc3RydWN0IHJ0Nl9pbmZvICpydCA9IHJ0Nl9sb29rdXAoJnAtPnJhZGRyLCAmcC0+bGFkZHIsCi0JCQkJCQkgcC0+bGluaywgMCk7CisJCQkJCQkgcC0+bGluaywgc3RyaWN0KTsKIAogCQlpZiAocnQgPT0gTlVMTCkKIAkJCXJldHVybjsKQEAgLTkyMCwyNiArOTI5LDIwIEBACiBpcDZpcDZfdG5sX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewogCWludCBlcnIgPSAwOwotCWludCBjcmVhdGU7CiAJc3RydWN0IGlwNl90bmxfcGFybSBwOwogCXN0cnVjdCBpcDZfdG5sICp0ID0gTlVMTDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUVFVOTkVMOgogCQlpZiAoZGV2ID09IGlwNmlwNl9mYl90bmxfZGV2KSB7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsCi0JCQkJCSAgIGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLAotCQkJCQkgICBzaXplb2YgKHApKSkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChwKSkpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwogCQkJCWJyZWFrOwogCQkJfQotCQkJaWYgKChlcnIgPSBpcDZpcDZfdG5sX2xvY2F0ZSgmcCwgJnQsIDApKSA9PSAtRU5PREVWKQotCQkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJZWxzZSBpZiAoZXJyKQotCQkJCWJyZWFrOwotCQl9IGVsc2UKKwkJCXQgPSBpcDZpcDZfdG5sX2xvY2F0ZSgmcCwgMCk7CisJCX0KKwkJaWYgKHQgPT0gTlVMTCkKIAkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCiAJCW1lbWNweSgmcCwgJnQtPnBhcm1zLCBzaXplb2YgKHApKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgJnAsIHNpemVvZiAocCkpKSB7CiAJCQllcnIgPSAtRUZBVUxUOwpAQCAtOTQ4LDM1ICs5NTEsMzYgQEAKIAljYXNlIFNJT0NBRERUVU5ORUw6CiAJY2FzZSBTSU9DQ0hHVFVOTkVMOgogCQllcnIgPSAtRVBFUk07Ci0JCWNyZWF0ZSA9IChjbWQgPT0gU0lPQ0FERFRVTk5FTCk7CiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCWJyZWFrOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCBzaXplb2YgKHApKSkgewotCQkJZXJyID0gLUVGQVVMVDsKKwkJZXJyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mIChwKSkpCiAJCQlicmVhazsKLQkJfQotCQlpZiAoIWNyZWF0ZSAmJiBkZXYgIT0gaXA2aXA2X2ZiX3RubF9kZXYpIHsKLQkJCXQgPSBuZXRkZXZfcHJpdihkZXYpOwotCQl9Ci0JCWlmICghdCAmJiAoZXJyID0gaXA2aXA2X3RubF9sb2NhdGUoJnAsICZ0LCBjcmVhdGUpKSkgeworCQllcnIgPSAtRUlOVkFMOworCQlpZiAocC5wcm90byAhPSBJUFBST1RPX0lQVjYpCiAJCQlicmVhazsKLQkJfQotCQlpZiAoY21kID09IFNJT0NDSEdUVU5ORUwpIHsKLQkJCWlmICh0LT5kZXYgIT0gZGV2KSB7Ci0JCQkJZXJyID0gLUVFWElTVDsKLQkJCQlicmVhazsKLQkJCX0KKwkJdCA9IGlwNmlwNl90bmxfbG9jYXRlKCZwLCBjbWQgPT0gU0lPQ0FERFRVTk5FTCk7CisJCWlmIChkZXYgIT0gaXA2aXA2X2ZiX3RubF9kZXYgJiYgY21kID09IFNJT0NDSEdUVU5ORUwpIHsKKwkJCWlmICh0ICE9IE5VTEwpIHsKKwkJCQlpZiAodC0+ZGV2ICE9IGRldikgeworCQkJCQllcnIgPSAtRUVYSVNUOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwogCQkJaXA2aXA2X3RubF91bmxpbmsodCk7CiAJCQllcnIgPSBpcDZpcDZfdG5sX2NoYW5nZSh0LCAmcCk7CiAJCQlpcDZpcDZfdG5sX2xpbmsodCk7CiAJCQluZXRkZXZfc3RhdGVfY2hhbmdlKGRldik7CiAJCX0KLQkJaWYgKGNvcHlfdG9fdXNlcihpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwKLQkJCQkgJnQtPnBhcm1zLCBzaXplb2YgKHApKSkgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJfSBlbHNlIHsKKwkJaWYgKHQpIHsKIAkJCWVyciA9IDA7Ci0JCX0KKwkJCWlmIChjb3B5X3RvX3VzZXIoaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsICZ0LT5wYXJtcywgc2l6ZW9mIChwKSkpCisJCQkJZXJyID0gLUVGQVVMVDsKKworCQl9IGVsc2UKKwkJCWVyciA9IChjbWQgPT0gU0lPQ0FERFRVTk5FTCA/IC1FTk9CVUZTIDogLUVOT0VOVCk7CiAJCWJyZWFrOwogCWNhc2UgU0lPQ0RFTFRVTk5FTDoKIAkJZXJyID0gLUVQRVJNOwpAQCAtOTg0LDIyICs5ODgsMTggQEAKIAkJCWJyZWFrOwogCiAJCWlmIChkZXYgPT0gaXA2aXA2X2ZiX3RubF9kZXYpIHsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGEsCi0JCQkJCSAgIHNpemVvZiAocCkpKSB7Ci0JCQkJZXJyID0gLUVGQVVMVDsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGlmci0+aWZyX2lmcnUuaWZydV9kYXRhLCBzaXplb2YgKHApKSkKIAkJCQlicmVhazsKLQkJCX0KLQkJCWVyciA9IGlwNmlwNl90bmxfbG9jYXRlKCZwLCAmdCwgMCk7Ci0JCQlpZiAoZXJyKQorCQkJZXJyID0gLUVOT0VOVDsKKwkJCWlmICgodCA9IGlwNmlwNl90bmxfbG9jYXRlKCZwLCAwKSkgPT0gTlVMTCkKIAkJCQlicmVhazsKLQkJCWlmICh0ID09IG5ldGRldl9wcml2KGlwNmlwNl9mYl90bmxfZGV2KSkgewotCQkJCWVyciA9IC1FUEVSTTsKKwkJCWVyciA9IC1FUEVSTTsKKwkJCWlmICh0LT5kZXYgPT0gaXA2aXA2X2ZiX3RubF9kZXYpCiAJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQl0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJCWRldiA9IHQtPmRldjsKIAkJfQotCQllcnIgPSB1bnJlZ2lzdGVyX25ldGRldmljZSh0LT5kZXYpOworCQllcnIgPSB1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXBjb21wNi5jIGIvbmV0L2lwdjYvaXBjb21wNi5jCmluZGV4IDcxZjU5ZjEuLjUxMTczMGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwY29tcDYuYworKysgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBpcGNvbXA2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKLQkJICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX191MzIgaW5mbykKKwkJICAgICAgICAgICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCiB7CiAJX19iZTMyIHNwaTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggZGU2YjkxOS4uMWVhZmNmYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvdWRwLmg+CisjaW5jbHVkZSA8bmV0L3VkcGxpdGUuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTIzOSw2ICsyNDAsNyBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKnBrdG9wdDsKIAogCQkJaWYgKHNrLT5za19wcm90b2NvbCAhPSBJUFBST1RPX1VEUCAmJgorCQkJICAgIHNrLT5za19wcm90b2NvbCAhPSBJUFBST1RPX1VEUExJVEUgJiYKIAkJCSAgICBzay0+c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCiAJCQkJYnJlYWs7CiAKQEAgLTI3NiwxMSArMjc4LDE1IEBACiAJCQkJc2stPnNrX2ZhbWlseSA9IFBGX0lORVQ7CiAJCQkJdGNwX3N5bmNfbXNzKHNrLCBpY3NrLT5pY3NrX3BtdHVfY29va2llKTsKIAkJCX0gZWxzZSB7CisJCQkJc3RydWN0IHByb3RvICpwcm90ID0gJnVkcF9wcm90OworCisJCQkJaWYgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUExJVEUpCisJCQkJCXByb3QgPSAmdWRwbGl0ZV9wcm90OwogCQkJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkJCQlzb2NrX3Byb3RfZGVjX3VzZShzay0+c2tfcHJvdCk7Ci0JCQkJc29ja19wcm90X2luY191c2UoJnVkcF9wcm90KTsKKwkJCQlzb2NrX3Byb3RfaW5jX3VzZShwcm90KTsKIAkJCQlsb2NhbF9iaF9lbmFibGUoKTsKLQkJCQlzay0+c2tfcHJvdCA9ICZ1ZHBfcHJvdDsKKwkJCQlzay0+c2tfcHJvdCA9IHByb3Q7CiAJCQkJc2stPnNrX3NvY2tldC0+b3BzID0gJmluZXRfZGdyYW1fb3BzOwogCQkJCXNrLT5za19mYW1pbHkgPSBQRl9JTkVUOwogCQkJfQpAQCAtODEzLDYgKzgxOSw3IEBACiAJc3dpdGNoIChvcHRuYW1lKSB7CiAJY2FzZSBJUFY2X0FERFJGT1JNOgogCQlpZiAoc2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQICYmCisJCSAgICBzay0+c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFBMSVRFICYmCiAJCSAgICBzay0+c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuYwppbmRleCAzYjExNGUzLi5hMWMyMzFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCisrKyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTgzLDcgKzgzLDcgQEAKIHN0cnVjdCBtbGQyX2dyZWMgewogCV9fdTgJCWdyZWNfdHlwZTsKIAlfX3U4CQlncmVjX2F1eHdvcmRzOwotCV9fdTE2CQlncmVjX25zcmNzOworCV9fYmUxNgkJZ3JlY19uc3JjczsKIAlzdHJ1Y3QgaW42X2FkZHIJZ3JlY19tY2E7CiAJc3RydWN0IGluNl9hZGRyCWdyZWNfc3JjWzBdOwogfTsKQEAgLTkxLDE4ICs5MSwxOCBAQAogc3RydWN0IG1sZDJfcmVwb3J0IHsKIAlfX3U4CXR5cGU7CiAJX191OAlyZXN2MTsKLQlfX3UxNgljc3VtOwotCV9fdTE2CXJlc3YyOwotCV9fdTE2CW5ncmVjOworCV9fc3VtMTYJY3N1bTsKKwlfX2JlMTYJcmVzdjI7CisJX19iZTE2CW5ncmVjOwogCXN0cnVjdCBtbGQyX2dyZWMgZ3JlY1swXTsKIH07CiAKIHN0cnVjdCBtbGQyX3F1ZXJ5IHsKIAlfX3U4IHR5cGU7CiAJX191OCBjb2RlOwotCV9fdTE2IGNzdW07Ci0JX191MTYgbXJjOwotCV9fdTE2IHJlc3YxOworCV9fc3VtMTYgY3N1bTsKKwlfX2JlMTYgbXJjOworCV9fYmUxNiByZXN2MTsKIAlzdHJ1Y3QgaW42X2FkZHIgbWNhOwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCV9fdTggcXJ2OjMsCkBAIC0xMTYsNyArMTE2LDcgQEAKICNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICNlbmRpZgogCV9fdTggcXFpYzsKLQlfX3UxNiBuc3JjczsKKwlfX2JlMTYgbnNyY3M7CiAJc3RydWN0IGluNl9hZGRyIHNyY3NbMF07CiB9OwogCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChza2ItPmRldik7CiAJaW50IGVycjsKIAotCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOworCUlQNl9JTkNfU1RBVFMoaWRldiwgSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOwogCXBheWxvYWRfbGVuID0gc2tiLT50YWlsIC0gKHVuc2lnbmVkIGNoYXIgKilza2ItPm5oLmlwdjZoIC0KIAkJc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAltbGRsZW4gPSBza2ItPnRhaWwgLSBza2ItPmgucmF3OwpAQCAtMTQ3Nyw5ICsxNDc3LDkgQEAKIAkJbWxkX2Rldl9xdWV1ZV94bWl0KTsKIAlpZiAoIWVycikgewogCQlJQ01QNl9JTkNfU1RBVFMoaWRldixJQ01QNl9NSUJfT1VUTVNHUyk7Ci0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VUTUNBU1RQS1RTKTsKKwkJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRNQ0FTVFBLVFMpOwogCX0gZWxzZQotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAKIAlpZiAobGlrZWx5KGlkZXYgIT0gTlVMTCkpCiAJCWluNl9kZXZfcHV0KGlkZXYpOwpAQCAtMTc2Myw3ICsxNzYzLDEwIEBACiAJCSAgICAgSVBWNl9UTFZfUk9VVEVSQUxFUlQsIDIsIDAsIDAsCiAJCSAgICAgSVBWNl9UTFZfUEFETiwgMCB9OwogCi0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CisJcmN1X3JlYWRfbG9jaygpOworCUlQNl9JTkNfU1RBVFMoX19pbjZfZGV2X2dldChkZXYpLAorCQkgICAgICBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJc25kX2FkZHIgPSBhZGRyOwogCWlmICh0eXBlID09IElDTVBWNl9NR01fUkVEVUNUSU9OKSB7CiAJCXNuZF9hZGRyID0gJmFsbF9yb3V0ZXJzOwpAQCAtMTc3Nyw3ICsxNzgwLDEwIEBACiAJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSArIGZ1bGxfbGVuLCAxLCAmZXJyKTsKIAogCWlmIChza2IgPT0gTlVMTCkgewotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlJUDZfSU5DX1NUQVRTKF9faW42X2Rldl9nZXQoZGV2KSwKKwkJCSAgICAgIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE4MTYsOSArMTgyMiw5IEBACiAJCWVsc2UKIAkJCUlDTVA2X0lOQ19TVEFUUyhpZGV2LCBJQ01QNl9NSUJfT1VUR1JPVVBNRU1CUkVTUE9OU0VTKTsKIAkJSUNNUDZfSU5DX1NUQVRTKGlkZXYsIElDTVA2X01JQl9PVVRNU0dTKTsKLQkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRNQ0FTVFBLVFMpOworCQlJUDZfSU5DX1NUQVRTKGlkZXYsIElQU1RBVFNfTUlCX09VVE1DQVNUUEtUUyk7CiAJfSBlbHNlCi0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOworCQlJUDZfSU5DX1NUQVRTKGlkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKIAogCWlmIChsaWtlbHkoaWRldiAhPSBOVUxMKSkKIAkJaW42X2Rldl9wdXQoaWRldik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9taXA2LmMgYi9uZXQvaXB2Ni9taXA2LmMKaW5kZXggN2NjZGM4Zi4uYmU3ZGQ3ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWlwNi5jCisrKyBiL25ldC9pcHY2L21pcDYuYwpAQCAtMjYyLDEwICsyNjIsMTAgQEAKIAlzZWwucHJvdG8gPSBmbC0+cHJvdG87CiAJc2VsLmRwb3J0ID0geGZybV9mbG93aV9kcG9ydChmbCk7CiAJaWYgKHNlbC5kcG9ydCkKLQkJc2VsLmRwb3J0X21hc2sgPSB+KChfX3UxNikwKTsKKwkJc2VsLmRwb3J0X21hc2sgPSBodG9ucyh+MCk7CiAJc2VsLnNwb3J0ID0geGZybV9mbG93aV9zcG9ydChmbCk7CiAJaWYgKHNlbC5zcG9ydCkKLQkJc2VsLnNwb3J0X21hc2sgPSB+KChfX3UxNikwKTsKKwkJc2VsLnNwb3J0X21hc2sgPSBodG9ucyh+MCk7CiAJc2VsLmlmaW5kZXggPSBmbC0+b2lmOwogCiAJZXJyID0ga21fcmVwb3J0KElQUFJPVE9fRFNUT1BUUywgJnNlbCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IDczZWI4YzMuLjU2ZWE5MjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25kaXNjLmMKKysrIGIvbmV0L2lwdjYvbmRpc2MuYwpAQCAtNDcyLDcgKzQ3Miw5IEBACiAJCQlpbmNfb3B0ID0gMDsKIAl9CiAKLQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBNQVhfSEVBREVSICsgbGVuICsgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSwKKwlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAorCQkJCSAgKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKKwkJCQkgICBsZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKSwKIAkJCQkgIDEsICZlcnIpOwogCiAJaWYgKHNrYiA9PSBOVUxMKSB7CkBAIC01MTMsNyArNTE1LDcgQEAKIAogCXNrYi0+ZHN0ID0gZHN0OwogCWlkZXYgPSBpbjZfZGV2X2dldChkc3QtPmRldik7Ci0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CisJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CiAJZXJyID0gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSVA2X0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBkc3QtPmRldiwgZHN0X291dHB1dCk7CiAJaWYgKCFlcnIpIHsKIAkJSUNNUDZfSU5DX1NUQVRTKGlkZXYsIElDTVA2X01JQl9PVVRORUlHSEJPUkFEVkVSVElTRU1FTlRTKTsKQEAgLTU2MSw3ICs1NjMsOSBAQAogCWlmIChzZW5kX2xsaW5mbykKIAkJbGVuICs9IG5kaXNjX29wdF9hZGRyX3NwYWNlKGRldik7CiAKLQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBNQVhfSEVBREVSICsgbGVuICsgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSwKKwlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAorCQkJCSAgKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKKwkJCQkgICBsZW4gKyBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKSwKIAkJCQkgIDEsICZlcnIpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlORF9QUklOVEswKEtFUk5fRVJSCkBAIC01OTcsNyArNjAxLDcgQEAKIAkvKiBzZW5kIGl0ISAqLwogCXNrYi0+ZHN0ID0gZHN0OwogCWlkZXYgPSBpbjZfZGV2X2dldChkc3QtPmRldik7Ci0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CisJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CiAJZXJyID0gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSVA2X0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBkc3QtPmRldiwgZHN0X291dHB1dCk7CiAJaWYgKCFlcnIpIHsKIAkJSUNNUDZfSU5DX1NUQVRTKGlkZXYsIElDTVA2X01JQl9PVVRORUlHSEJPUlNPTElDSVRTKTsKQEAgLTYzNiw3ICs2NDAsOSBAQAogCWlmIChkZXYtPmFkZHJfbGVuKQogCQlsZW4gKz0gbmRpc2Nfb3B0X2FkZHJfc3BhY2UoZGV2KTsKIAotICAgICAgICBza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBNQVhfSEVBREVSICsgbGVuICsgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSwKKyAgICAgICAgc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywKKwkJCQkgIChNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArCisJCQkJICAgbGVuICsgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSksCiAJCQkJICAxLCAmZXJyKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJTkRfUFJJTlRLMChLRVJOX0VSUgpAQCAtNjcwLDcgKzY3Niw3IEBACiAJLyogc2VuZCBpdCEgKi8KIAlza2ItPmRzdCA9IGRzdDsKIAlpZGV2ID0gaW42X2Rldl9nZXQoZHN0LT5kZXYpOwotCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VUUkVRVUVTVFMpOwkKKwlJUDZfSU5DX1NUQVRTKGlkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKIAllcnIgPSBORl9IT09LKFBGX0lORVQ2LCBORl9JUDZfTE9DQUxfT1VULCBza2IsIE5VTEwsIGRzdC0+ZGV2LCBkc3Rfb3V0cHV0KTsKIAlpZiAoIWVycikgewogCQlJQ01QNl9JTkNfU1RBVFMoaWRldiwgSUNNUDZfTUlCX09VVFJPVVRFUlNPTElDSVRTKTsKQEAgLTEyNjEsMTAgKzEyNjcsMTEgQEAKIAl9CiAKIAlpZiAobmRvcHRzLm5kX29wdHNfbXR1KSB7CisJCV9fYmUzMiBuOwogCQl1MzIgbXR1OwogCi0JCW1lbWNweSgmbXR1LCAoKHU4KikobmRvcHRzLm5kX29wdHNfbXR1KzEpKSsyLCBzaXplb2YobXR1KSk7Ci0JCW10dSA9IG50b2hsKG10dSk7CisJCW1lbWNweSgmbiwgKCh1OCopKG5kb3B0cy5uZF9vcHRzX210dSsxKSkrMiwgc2l6ZW9mKG10dSkpOworCQltdHUgPSBudG9obChuKTsKIAogCQlpZiAobXR1IDwgSVBWNl9NSU5fTVRVIHx8IG10dSA+IHNrYi0+ZGV2LT5tdHUpIHsKIAkJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCkBAIC0xNDQ2LDcgKzE0NTMsOSBAQAogCXJkX2xlbiAmPSB+MHg3OwogCWxlbiArPSByZF9sZW47CiAKLQlidWZmID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgTUFYX0hFQURFUiArIGxlbiArIExMX1JFU0VSVkVEX1NQQUNFKGRldiksCisJYnVmZiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssCisJCQkJICAgKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsKKwkJCQkgICAgbGVuICsgTExfUkVTRVJWRURfU1BBQ0UoZGV2KSksCiAJCQkJICAgMSwgJmVycik7CiAJaWYgKGJ1ZmYgPT0gTlVMTCkgewogCQlORF9QUklOVEswKEtFUk5fRVJSCkBAIC0xNTA0LDcgKzE1MTMsNyBAQAogCiAJYnVmZi0+ZHN0ID0gZHN0OwogCWlkZXYgPSBpbjZfZGV2X2dldChkc3QtPmRldik7Ci0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CisJSVA2X0lOQ19TVEFUUyhpZGV2LCBJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CiAJZXJyID0gTkZfSE9PSyhQRl9JTkVUNiwgTkZfSVA2X0xPQ0FMX09VVCwgYnVmZiwgTlVMTCwgZHN0LT5kZXYsIGRzdF9vdXRwdXQpOwogCWlmICghZXJyKSB7CiAJCUlDTVA2X0lOQ19TVEFUUyhpZGV2LCBJQ01QNl9NSUJfT1VUUkVESVJFQ1RTKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKaW5kZXggNTgwYjFhYi4uZjYyOTRlNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNlbmRpZgogCiAJaWYgKGRzdC0+ZXJyb3IpIHsKLQkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CisJCUlQNl9JTkNfU1RBVFMoaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX09VVE5PUk9VVEVTKTsKIAkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiaXA2X3JvdXRlX21lX2hhcmRlcjogTm8gbW9yZSByb3V0ZS5cbiIpOwogCQlkc3RfcmVsZWFzZShkc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwLDExICs4MCwxMSBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQgbmZfaXA2X2NoZWNrc3VtKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rLAorX19zdW0xNiBuZl9pcDZfY2hlY2tzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2ssCiAJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1X2ludDhfdCBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2aCA9IHNrYi0+bmguaXB2Nmg7Ci0JdW5zaWduZWQgaW50IGNzdW0gPSAwOworCV9fc3VtMTYgY3N1bSA9IDA7CiAKIAlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CiAJY2FzZSBDSEVDS1NVTV9DT01QTEVURToKQEAgLTEwMCwxMiArMTAwLDEzIEBACiAJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBDSEVDS1NVTV9OT05FOgotCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAorCQlza2ItPmNzdW0gPSB+Y3N1bV91bmZvbGQoCisJCQkJY3N1bV9pcHY2X21hZ2ljKCZpcDZoLT5zYWRkciwgJmlwNmgtPmRhZGRyLAogCQkJCQkgICAgIHNrYi0+bGVuIC0gZGF0YW9mZiwKIAkJCQkJICAgICBwcm90b2NvbCwKIAkJCQkJICAgICBjc3VtX3N1YigwLAogCQkJCQkJICAgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwKLQkJCQkJCQkgICAgICAgICAgIGRhdGFvZmYsIDApKSk7CisJCQkJCQkJICAgICAgICAgICBkYXRhb2ZmLCAwKSkpKTsKIAkJY3N1bSA9IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiAJfQogCXJldHVybiBjc3VtOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCBkN2M0NWE5Li5mYzNlNWViIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtNiw3ICs2LDcgQEAKIAlkZXBlbmRzIG9uIElORVQgJiYgSVBWNiAmJiBORVRGSUxURVIgJiYgRVhQRVJJTUVOVEFMCiAKIGNvbmZpZyBORl9DT05OVFJBQ0tfSVBWNgotCXRyaXN0YXRlICJJUHY2IHN1cHBvcnQgZm9yIG5ldyBjb25uZWN0aW9uIHRyYWNraW5nIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJJUHY2IGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKIAktLS1oZWxwLS0tCiAJICBDb25uZWN0aW9uIHRyYWNraW5nIGtlZXBzIGEgcmVjb3JkIG9mIHdoYXQgcGFja2V0cyBoYXZlIHBhc3NlZApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IDlmZWM4MzIuLmQ0ZDlmMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCXBtc2ctPmRhdGFfbGVuICAgICAgICA9IGRhdGFfbGVuOwogCXBtc2ctPnRpbWVzdGFtcF9zZWMgICA9IGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfc2VjOwogCXBtc2ctPnRpbWVzdGFtcF91c2VjICA9IGVudHJ5LT5za2ItPnRzdGFtcC5vZmZfdXNlYzsKLQlwbXNnLT5tYXJrICAgICAgICAgICAgPSBlbnRyeS0+c2tiLT5uZm1hcms7CisJcG1zZy0+bWFyayAgICAgICAgICAgID0gZW50cnktPnNrYi0+bWFyazsKIAlwbXNnLT5ob29rICAgICAgICAgICAgPSBlbnRyeS0+aW5mby0+aG9vazsKIAlwbXNnLT5od19wcm90b2NvbCAgICAgPSBlbnRyeS0+c2tiLT5wcm90b2NvbDsKIAkKQEAgLTYyMCw2ICs2MjAsNyBAQAogCXsgLmN0bF9uYW1lID0gMCB9CiB9OwogCisjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQKIGlwcV9nZXRfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoKQogewpAQCAtNjUzLDYgKzY1NCw3IEBACiAJCWxlbiA9IDA7CiAJcmV0dXJuIGxlbjsKIH0KKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiBzdGF0aWMgc3RydWN0IG5mX3F1ZXVlX2hhbmRsZXIgbmZxaCA9IHsKIAkubmFtZQk9ICJpcDZfcXVldWUiLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggMjA0ZTAyMS4uZjYzZmI4NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0xNDgxLDcgKzE0ODEsOCBAQAogCQlpZiAoaHAgPT0gTlVMTCkKIAkJCXJldHVybiAtRUJBRE1TRzsKIAkJaWYgKG5leHRoZHIgPT0gTkVYVEhEUl9GUkFHTUVOVCkgewotCQkJdW5zaWduZWQgc2hvcnQgX2ZyYWdfb2ZmLCAqZnA7CisJCQl1bnNpZ25lZCBzaG9ydCBfZnJhZ19vZmY7CisJCQlfX2JlMTYgKmZwOwogCQkJZnAgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLAogCQkJCQkJc3RhcnQrb2Zmc2V0b2Yoc3RydWN0IGZyYWdfaGRyLAogCQkJCQkJCSAgICAgICBmcmFnX29mZiksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDBjZjUzN2QuLjMzYjFmYWEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC02OSw5ICs2OSw5IEBACiAJLyogTWF4IGxlbmd0aDogNDQgIkxFTj02NTUzNSBUQz0yNTUgSE9QTElNSVQ9MjU1IEZMT1dMQkw9RkZGRkYgIiAqLwogCXByaW50aygiTEVOPSVadSBUQz0ldSBIT1BMSU1JVD0ldSBGTE9XTEJMPSV1ICIsCiAJICAgICAgIG50b2hzKGloLT5wYXlsb2FkX2xlbikgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAotCSAgICAgICAobnRvaGwoKih1X2ludDMyX3QgKilpaCkgJiAweDBmZjAwMDAwKSA+PiAyMCwKKwkgICAgICAgKG50b2hsKCooX19iZTMyICopaWgpICYgMHgwZmYwMDAwMCkgPj4gMjAsCiAJICAgICAgIGloLT5ob3BfbGltaXQsCi0JICAgICAgIChudG9obCgqKHVfaW50MzJfdCAqKWloKSAmIDB4MDAwZmZmZmYpKTsKKwkgICAgICAgKG50b2hsKCooX19iZTMyICopaWgpICYgMHgwMDBmZmZmZikpOwogCiAJZnJhZ21lbnQgPSAwOwogCXB0ciA9IGlwNmhvZmYgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOwpAQCAtMjcwLDExICsyNzAsMTUgQEAKIAkJfQogCQlicmVhazsKIAl9Ci0JY2FzZSBJUFBST1RPX1VEUDogeworCWNhc2UgSVBQUk9UT19VRFA6CisJY2FzZSBJUFBST1RPX1VEUExJVEU6IHsKIAkJc3RydWN0IHVkcGhkciBfdWRwaCwgKnVoOwogCi0JCS8qIE1heCBsZW5ndGg6IDEwICJQUk9UTz1VRFAgIiAqLwotCQlwcmludGsoIlBST1RPPVVEUCAiKTsKKwkJaWYgKGN1cnJlbnRoZHIgPT0gSVBQUk9UT19VRFApCisJCQkvKiBNYXggbGVuZ3RoOiAxMCAiUFJPVE89VURQICIgICAgICovCisJCQlwcmludGsoIlBST1RPPVVEUCAiICk7CisJCWVsc2UJLyogTWF4IGxlbmd0aDogMTQgIlBST1RPPVVEUExJVEUgIiAqLworCQkJcHJpbnRrKCJQUk9UTz1VRFBMSVRFICIpOwogCiAJCWlmIChmcmFnbWVudCkKIAkJCWJyZWFrOwpAQCAtNDM2LDEzICs0NDAsOCBAQAogCWxpLnUubG9nLmxldmVsID0gbG9naW5mby0+bGV2ZWw7CiAJbGkudS5sb2cubG9nZmxhZ3MgPSBsb2dpbmZvLT5sb2dmbGFnczsKIAotCWlmIChsb2dpbmZvLT5sb2dmbGFncyAmIElQNlRfTE9HX05GTE9HKQotCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAotCQkgICAgICAgICAgICAgICIlcyIsIGxvZ2luZm8tPnByZWZpeCk7Ci0JZWxzZQotCQlpcDZ0X2xvZ19wYWNrZXQoUEZfSU5FVDYsIGhvb2tudW0sICpwc2tiLCBpbiwgb3V0LCAmbGksCi0JCSAgICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOwotCisJaXA2dF9sb2dfcGFja2V0KFBGX0lORVQ2LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAorCSAgICAgICAgICAgICAgICBsb2dpbmZvLT5wcmVmaXgpOwogCXJldHVybiBJUDZUX0NPTlRJTlVFOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKaW5kZXggMzg2ZWEyNi4uNjI1MGU4NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwpAQCAtMTQ5LDExICsxNDksMTAgQEAKIAkJICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7CiAKLQl1bnNpZ25lZCBsb25nIG5mbWFyazsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCXN0cnVjdCBpbjZfYWRkciBzYWRkciwgZGFkZHI7CiAJdV9pbnQ4X3QgaG9wX2xpbWl0OwotCXVfaW50MzJfdCBmbG93bGFiZWw7CisJdV9pbnQzMl90IGZsb3dsYWJlbCwgbWFyazsKIAogI2lmIDAKIAkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KQEAgLTE2NSwxMCArMTY0LDEwIEBACiAJfQogI2VuZGlmCiAKLQkvKiBzYXZlIHNvdXJjZS9kZXN0IGFkZHJlc3MsIG5mbWFyaywgaG9wbGltaXQsIGZsb3dsYWJlbCwgcHJpb3JpdHksICAqLworCS8qIHNhdmUgc291cmNlL2Rlc3QgYWRkcmVzcywgbWFyaywgaG9wbGltaXQsIGZsb3dsYWJlbCwgcHJpb3JpdHksICAqLwogCW1lbWNweSgmc2FkZHIsICYoKnBza2IpLT5uaC5pcHY2aC0+c2FkZHIsIHNpemVvZihzYWRkcikpOwogCW1lbWNweSgmZGFkZHIsICYoKnBza2IpLT5uaC5pcHY2aC0+ZGFkZHIsIHNpemVvZihkYWRkcikpOwotCW5mbWFyayA9ICgqcHNrYiktPm5mbWFyazsKKwltYXJrID0gKCpwc2tiKS0+bWFyazsKIAlob3BfbGltaXQgPSAoKnBza2IpLT5uaC5pcHY2aC0+aG9wX2xpbWl0OwogCiAJLyogZmxvd2xhYmVsIGFuZCBwcmlvIChpbmNsdWRlcyB2ZXJzaW9uLCB3aGljaCBzaG91bGRuJ3QgY2hhbmdlIGVpdGhlciAqLwpAQCAtMTc5LDcgKzE3OCw3IEBACiAJaWYgKHJldCAhPSBORl9EUk9QICYmIHJldCAhPSBORl9TVE9MRU4gCiAJCSYmIChtZW1jbXAoJigqcHNrYiktPm5oLmlwdjZoLT5zYWRkciwgJnNhZGRyLCBzaXplb2Yoc2FkZHIpKQogCQkgICAgfHwgbWVtY21wKCYoKnBza2IpLT5uaC5pcHY2aC0+ZGFkZHIsICZkYWRkciwgc2l6ZW9mKGRhZGRyKSkKLQkJICAgIHx8ICgqcHNrYiktPm5mbWFyayAhPSBuZm1hcmsKKwkJICAgIHx8ICgqcHNrYiktPm1hcmsgIT0gbWFyawogCQkgICAgfHwgKCpwc2tiKS0+bmguaXB2NmgtPmhvcF9saW1pdCAhPSBob3BfbGltaXQpKQogCQlyZXR1cm4gaXA2X3JvdXRlX21lX2hhcmRlcigqcHNrYikgPT0gMCA/IHJldCA6IE5GX0RST1A7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IGU1ZTUzZmYuLmEyMDYxNWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KLSNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogCkBAIC00Myw4ICs0Myw2IEBACiAjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCiAjZW5kaWYKIAotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBpcF9jb25udHJhY2tfc3RhdCwgbmZfY29ubnRyYWNrX3N0YXQpOwotCiBzdGF0aWMgaW50IGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CkBAIC0yMTEsMTEgKzIwOSw2IEBACiAJcmV0dXJuIG5mX2Nvbm50cmFja19jb25maXJtKHBza2IpOwogfQogCi1leHRlcm4gc3RydWN0IHNrX2J1ZmYgKm5mX2N0X2ZyYWc2X2dhdGhlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWV4dGVybiB2b2lkIG5mX2N0X2ZyYWc2X291dHB1dCh1bnNpZ25lZCBpbnQgaG9va251bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGlwdjZfZGVmcmFnKHVuc2lnbmVkIGludCBob29rbnVtLAogCQkJCXN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCkBAIC0zMzEsMjYgKzMyNCw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCi0vKiBGcm9tIG5mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF9pY21wdjZfdGltZW91dDsKLQotLyogRnJvbSBuZl9jb25udHJhY2tfcmVhc20uYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF9mcmFnNl90aW1lb3V0OwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF9mcmFnNl9sb3dfdGhyZXNoOwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF9mcmFnNl9oaWdoX3RocmVzaDsKLQotc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXI7Ci0KLXN0YXRpYyBjdGxfdGFibGUgbmZfY3Rfc3lzY3RsX3RhYmxlW10gPSB7Ci0JewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0lDTVBWNl9USU1FT1VULAotCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2ljbXB2Nl90aW1lb3V0IiwKLQkJLmRhdGEJCT0gJm5mX2N0X2ljbXB2Nl90aW1lb3V0LAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKLQl9LAorc3RhdGljIGN0bF90YWJsZSBuZl9jdF9pcHY2X3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19GUkFHNl9USU1FT1VULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2ZyYWc2X3RpbWVvdXQiLApAQCAtMzc3LDI2ICszNTEsNiBAQAogCX0sCiAgICAgICAgIHsgLmN0bF9uYW1lID0gMCB9CiB9OwotCi1zdGF0aWMgY3RsX3RhYmxlIG5mX2N0X25ldGZpbHRlcl90YWJsZVtdID0gewotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05FVEZJTFRFUiwKLQkJLnByb2NuYW1lCT0gIm5ldGZpbHRlciIsCi0JCS5tb2RlCQk9IDA1NTUsCi0JCS5jaGlsZAkJPSBuZl9jdF9zeXNjdGxfdGFibGUsCi0JfSwKLQl7IC5jdGxfbmFtZSA9IDAgfQotfTsKLQotc3RhdGljIGN0bF90YWJsZSBuZl9jdF9uZXRfdGFibGVbXSA9IHsKLQl7Ci0JCS5jdGxfbmFtZQk9IENUTF9ORVQsCi0JCS5wcm9jbmFtZQk9ICJuZXQiLAotCQkubW9kZQkJPSAwNTU1LAotCQkuY2hpbGQJCT0gbmZfY3RfbmV0ZmlsdGVyX3RhYmxlLAotCX0sCi0JeyAuY3RsX25hbWUgPSAwIH0KLX07CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IFwKQEAgLTQ1NCwxNiArNDA4LDE0IEBACiAJLnR1cGxlX3RvX25mYXR0cgk9IGlwdjZfdHVwbGVfdG9fbmZhdHRyLAogCS5uZmF0dHJfdG9fdHVwbGUJPSBpcHY2X25mYXR0cl90b190dXBsZSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuY3RsX3RhYmxlX3BhdGgJCT0gbmZfbmV0X25ldGZpbHRlcl9zeXNjdGxfcGF0aCwKKwkuY3RsX3RhYmxlCQk9IG5mX2N0X2lwdjZfc3lzY3RsX3RhYmxlLAorI2VuZGlmCiAJLmdldF9mZWF0dXJlcwkJPSBpcHY2X2dldF9mZWF0dXJlcywKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogfTsKIAotZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDY7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNjsKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjY7Ci1leHRlcm4gaW50IG5mX2N0X2ZyYWc2X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBuZl9jdF9mcmFnNl9jbGVhbnVwKHZvaWQpOwotCiBNT0RVTEVfQUxJQVMoIm5mX2Nvbm50cmFjay0iIF9fc3RyaW5naWZ5KEFGX0lORVQ2KSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJZYXN1eXVraSBLT1pBS0FJIEBVU0FHSSA8eWFzdXl1a2kua296YWthaUB0b3NoaWJhLmNvLmpwPiIpOwpAQCAtNDc5LDE5ICs0MzEsMTkgQEAKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgaW5pdGlhbGl6ZSBmcmFnNi5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2KTsKKwlyZXQgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fdGNwNik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgdGNwLlxuIik7CiAJCWdvdG8gY2xlYW51cF9mcmFnNjsKIAl9CiAKLQlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA2KTsKKwlyZXQgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNik7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJuZl9jb25udHJhY2tfaXB2NjogY2FuJ3QgcmVnaXN0ZXIgdWRwLlxuIik7CiAJCWdvdG8gY2xlYW51cF90Y3A7CiAJfQogCi0JcmV0ID0gbmZfY29ubnRyYWNrX3Byb3RvY29sX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2KTsKKwlyZXQgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9faWNtcHY2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIm5mX2Nvbm50cmFja19pcHY2OiBjYW4ndCByZWdpc3RlciBpY21wdjYuXG4iKTsKIAkJZ290byBjbGVhbnVwX3VkcDsKQEAgLTUxMCwyOCArNDYyLDE2IEBACiAJCSAgICAgICAiaG9vay5cbiIpOwogCQlnb3RvIGNsZWFudXBfaXB2NjsKIAl9Ci0jaWZkZWYgQ09ORklHX1NZU0NUTAotCW5mX2N0X2lwdjZfc3lzY3RsX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShuZl9jdF9uZXRfdGFibGUsIDApOwotCWlmIChuZl9jdF9pcHY2X3N5c2N0bF9oZWFkZXIgPT0gTlVMTCkgewotCQlwcmludGsoIm5mX2Nvbm50cmFjazogY2FuJ3QgcmVnaXN0ZXIgdG8gc3lzY3RsLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gY2xlYW51cF9ob29rczsKLQl9Ci0jZW5kaWYKIAlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotIGNsZWFudXBfaG9va3M6Ci0JbmZfdW5yZWdpc3Rlcl9ob29rcyhpcHY2X2Nvbm50cmFja19vcHMsIEFSUkFZX1NJWkUoaXB2Nl9jb25udHJhY2tfb3BzKSk7Ci0jZW5kaWYKICBjbGVhbnVwX2lwdjY6CiAJbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Nik7CiAgY2xlYW51cF9pY21wdjY6Ci0JbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjYpOworCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX2ljbXB2Nik7CiAgY2xlYW51cF91ZHA6Ci0JbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA2KTsKKwluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b191ZHA2KTsKICBjbGVhbnVwX3RjcDoKLQluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYpOworCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX3RjcDYpOwogIGNsZWFudXBfZnJhZzY6CiAJbmZfY3RfZnJhZzZfY2xlYW51cCgpOwogCXJldHVybiByZXQ7CkBAIC01NDAsMTQgKzQ4MCwxMSBAQAogc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjZfZmluaSh2b2lkKQogewogCXN5bmNocm9uaXplX25ldCgpOwotI2lmZGVmIENPTkZJR19TWVNDVEwKLSAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfaXB2Nl9zeXNjdGxfaGVhZGVyKTsKLSNlbmRpZgogCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB2Nl9jb25udHJhY2tfb3BzLCBBUlJBWV9TSVpFKGlwdjZfY29ubnRyYWNrX29wcykpOwogCW5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYpOwotCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2KTsKLQluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDYpOwotCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNik7CisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9faWNtcHY2KTsKKwluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b191ZHA2KTsKKwluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b190Y3A2KTsKIAluZl9jdF9mcmFnNl9jbGVhbnVwKCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDM0ZDQ0NzIuLjM5MDVjYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMjksMTEgKzI5LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg+Ci0jaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaWNtcHY2Lmg+CiAKLXVuc2lnbmVkIGxvbmcgbmZfY3RfaWNtcHY2X3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDMwKkhaOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZfY3RfaWNtcHY2X3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDMwKkhaOwogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCkBAIC0xNDIsOSArMTQyLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotZXh0ZXJuIGludAotbmZfY3RfaXB2Nl9za2lwX2V4dGhkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc3RhcnQsIHU4ICpuZXh0aGRycCwgaW50IGxlbik7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvIG5mX2Nvbm50cmFja19sM3Byb3RvX2lwdjY7CiBzdGF0aWMgaW50CiBpY21wdjZfZXJyb3JfbWVzc2FnZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHVuc2lnbmVkIGludCBpY21wNm9mZiwKQEAgLTE1NSw3ICsxNTIsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgaWNtcDZoZHIgX2hkciwgKmhwOwogCXVuc2lnbmVkIGludCBpbmlwNm9mZjsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICppbnByb3RvOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqaW5wcm90bzsKIAl1X2ludDhfdCBpbnByb3RvbnVtOwogCXVuc2lnbmVkIGludCBpbnByb3RvZmY7CiAKQEAgLTE4NSw3ICsxODIsNyBAQAogCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAl9CiAKLQlpbnByb3RvID0gX19uZl9jdF9wcm90b19maW5kKFBGX0lORVQ2LCBpbnByb3RvbnVtKTsKKwlpbnByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQoUEZfSU5FVDYsIGlucHJvdG9udW0pOwogCiAJLyogQXJlIHRoZXkgdGFsa2luZyBhYm91dCBvbmUgb2Ygb3VyIGNvbm5lY3Rpb25zPyAqLwogCWlmICghbmZfY3RfZ2V0X3R1cGxlKHNrYiwgaW5pcDZvZmYsIGlucHJvdG9mZiwgUEZfSU5FVDYsIGlucHJvdG9udW0sCkBAIC0yOTAsNyArMjg3LDcgQEAKIAl0dXBsZS0+ZHN0LnUuaWNtcC5jb2RlID0KIAkJCSoodV9pbnQ4X3QgKilORkFfREFUQSh0YltDVEFfUFJPVE9fSUNNUFY2X0NPREUtMV0pOwogCXR1cGxlLT5zcmMudS5pY21wLmlkID0KLQkJCSoodV9pbnQxNl90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPX0lDTVBWNl9JRC0xXSk7CisJCQkqKF9fYmUxNiAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19JQ01QVjZfSUQtMV0pOwogCiAJaWYgKHR1cGxlLT5kc3QudS5pY21wLnR5cGUgPCAxMjgKIAkgICAgfHwgdHVwbGUtPmRzdC51LmljbXAudHlwZSAtIDEyOCA+PSBzaXplb2YoaW52bWFwKQpAQCAtMzAxLDEwICsyOTgsMjcgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9pY21wdjYgPQorI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaWNtcHY2X3N5c2N0bF9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBpY21wdjZfc3lzY3RsX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0lDTVBWNl9USU1FT1VULAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2ljbXB2Nl90aW1lb3V0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X2ljbXB2Nl90aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9faWNtcHY2ID0KIHsKIAkubDNwcm90bwkJPSBQRl9JTkVUNiwKLQkucHJvdG8JCQk9IElQUFJPVE9fSUNNUFY2LAorCS5sNHByb3RvCQk9IElQUFJPVE9fSUNNUFY2LAogCS5uYW1lCQkJPSAiaWNtcHY2IiwKIAkucGt0X3RvX3R1cGxlCQk9IGljbXB2Nl9wa3RfdG9fdHVwbGUsCiAJLmludmVydF90dXBsZQkJPSBpY21wdjZfaW52ZXJ0X3R1cGxlLApAQCAtMzE4LDYgKzMzMiwxMCBAQAogCS50dXBsZV90b19uZmF0dHIJPSBpY21wdjZfdHVwbGVfdG9fbmZhdHRyLAogCS5uZmF0dHJfdG9fdHVwbGUJPSBpY21wdjZfbmZhdHRyX3RvX3R1cGxlLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5jdGxfdGFibGVfaGVhZGVyCT0gJmljbXB2Nl9zeXNjdGxfaGVhZGVyLAorCS5jdGxfdGFibGUJCT0gaWNtcHY2X3N5c2N0bF90YWJsZSwKKyNlbmRpZgogfTsKIAotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfaWNtcHY2KTsKK0VYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2w0cHJvdG9faWNtcHY2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwppbmRleCBiZjkzYzFlLi4zN2U1ZmNhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCkBAIC03Miw3ICs3Miw3IEBACiAJc3RydWN0IGhsaXN0X25vZGUJbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxydV9saXN0OwkvKiBscnUgbGlzdCBtZW1iZXIJKi8KIAotCV9fdTMyCQkJaWQ7CQkvKiBmcmFnbWVudCBpZAkJKi8KKwlfX2JlMzIJCQlpZDsJCS8qIGZyYWdtZW50IGlkCQkqLwogCXN0cnVjdCBpbjZfYWRkcgkJc2FkZHI7CiAJc3RydWN0IGluNl9hZGRyCQlkYWRkcjsKIApAQCAtMTE1LDI4ICsxMTUsMjggQEAKIAl3cml0ZV91bmxvY2soJm5mX2N0X2ZyYWc2X2xvY2spOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwNnFoYXNoZm4odTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorc3RhdGljIHVuc2lnbmVkIGludCBpcDZxaGFzaGZuKF9fYmUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewogCXUzMiBhLCBiLCBjOwogCi0JYSA9IHNhZGRyLT5zNl9hZGRyMzJbMF07Ci0JYiA9IHNhZGRyLT5zNl9hZGRyMzJbMV07Ci0JYyA9IHNhZGRyLT5zNl9hZGRyMzJbMl07CisJYSA9IChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzBdOworCWIgPSAoX19mb3JjZSB1MzIpc2FkZHItPnM2X2FkZHIzMlsxXTsKKwljID0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMl07CiAKIAlhICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKIAliICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKIAljICs9IG5mX2N0X2ZyYWc2X2hhc2hfcm5kOwogCV9famhhc2hfbWl4KGEsIGIsIGMpOwogCi0JYSArPSBzYWRkci0+czZfYWRkcjMyWzNdOwotCWIgKz0gZGFkZHItPnM2X2FkZHIzMlswXTsKLQljICs9IGRhZGRyLT5zNl9hZGRyMzJbMV07CisJYSArPSAoX19mb3JjZSB1MzIpc2FkZHItPnM2X2FkZHIzMlszXTsKKwliICs9IChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzBdOworCWMgKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMV07CiAJX19qaGFzaF9taXgoYSwgYiwgYyk7CiAKLQlhICs9IGRhZGRyLT5zNl9hZGRyMzJbMl07Ci0JYiArPSBkYWRkci0+czZfYWRkcjMyWzNdOwotCWMgKz0gaWQ7CisJYSArPSAoX19mb3JjZSB1MzIpZGFkZHItPnM2X2FkZHIzMlsyXTsKKwliICs9IChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzNdOworCWMgKz0gKF9fZm9yY2UgdTMyKWlkOwogCV9famhhc2hfbWl4KGEsIGIsIGMpOwogCiAJcmV0dXJuIGMgJiAoRlJBRzZRX0hBU0hTWiAtIDEpOwpAQCAtMzM4LDcgKzMzOCw3IEBACiAKIAogc3RhdGljIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqCi1uZl9jdF9mcmFnNl9jcmVhdGUodW5zaWduZWQgaW50IGhhc2gsIHUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZHN0KQorbmZfY3RfZnJhZzZfY3JlYXRlKHVuc2lnbmVkIGludCBoYXNoLCBfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKIHsKIAlzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxOwogCkBAIC0zNjYsNyArMzY2LDcgQEAKIH0KIAogc3RhdGljIF9faW5saW5lX18gc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICoKLWZxX2ZpbmQodTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QpCitmcV9maW5kKF9fYmUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsIHN0cnVjdCBpbjZfYWRkciAqZHN0KQogewogCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqZnE7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggZWZlZTdhNi4uMzUyNDlkOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtNDksNiArNDksOCBAQAogCQkgICAgICAgZm9sZF9wcm90X2ludXNlKCZ0Y3B2Nl9wcm90KSk7CiAJc2VxX3ByaW50ZihzZXEsICJVRFA2OiBpbnVzZSAlZFxuIiwKIAkJICAgICAgIGZvbGRfcHJvdF9pbnVzZSgmdWRwdjZfcHJvdCkpOworCXNlcV9wcmludGYoc2VxLCAiVURQTElURTY6IGludXNlICVkXG4iLAorCQkgICAgICAgIGZvbGRfcHJvdF9pbnVzZSgmdWRwbGl0ZXY2X3Byb3QpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIlJBVzY6IGludXNlICVkXG4iLAogCQkgICAgICAgZm9sZF9wcm90X2ludXNlKCZyYXd2Nl9wcm90KSk7CiAJc2VxX3ByaW50ZihzZXEsICJGUkFHNjogaW51c2UgJWQgbWVtb3J5ICVkXG4iLApAQCAtMTMzLDYgKzEzNSwxNCBAQAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCitzdGF0aWMgc3RydWN0IHNubXBfbWliIHNubXA2X3VkcGxpdGU2X2xpc3RbXSA9IHsKKwlTTk1QX01JQl9JVEVNKCJVZHBMaXRlNkluRGF0YWdyYW1zIiwgVURQX01JQl9JTkRBVEFHUkFNUyksCisJU05NUF9NSUJfSVRFTSgiVWRwTGl0ZTZOb1BvcnRzIiwgVURQX01JQl9OT1BPUlRTKSwKKwlTTk1QX01JQl9JVEVNKCJVZHBMaXRlNkluRXJyb3JzIiwgVURQX01JQl9JTkVSUk9SUyksCisJU05NUF9NSUJfSVRFTSgiVWRwTGl0ZTZPdXREYXRhZ3JhbXMiLCBVRFBfTUlCX09VVERBVEFHUkFNUyksCisJU05NUF9NSUJfU0VOVElORUwKK307CisKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBmb2xkX2ZpZWxkKHZvaWQgKm1pYltdLCBpbnQgb2ZmdCkKIHsKQEAgLTE2MSwxMSArMTcxLDEzIEBACiAKIAlpZiAoaWRldikgewogCQlzZXFfcHJpbnRmKHNlcSwgIiUtMzJzXHQldVxuIiwgImlmSW5kZXgiLCBpZGV2LT5kZXYtPmlmaW5kZXgpOworCQlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgKiopaWRldi0+c3RhdHMuaXB2Niwgc25tcDZfaXBzdGF0c19saXN0KTsKIAkJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Niwgc25tcDZfaWNtcDZfbGlzdCk7CiAJfSBlbHNlIHsKIAkJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkICoqKWlwdjZfc3RhdGlzdGljcywgc25tcDZfaXBzdGF0c19saXN0KTsKIAkJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkICoqKWljbXB2Nl9zdGF0aXN0aWNzLCBzbm1wNl9pY21wNl9saXN0KTsKIAkJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkICoqKXVkcF9zdGF0c19pbjYsIHNubXA2X3VkcDZfbGlzdCk7CisJCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKil1ZHBsaXRlX3N0YXRzX2luNiwgc25tcDZfdWRwbGl0ZTZfbGlzdCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjgxLDYgKzI5Myw5IEBACiAJaWYgKCFpZGV2IHx8ICFpZGV2LT5kZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHNubXA2X21pYl9pbml0KCh2b2lkICoqKWlkZXYtPnN0YXRzLmlwdjYsIHNpemVvZihzdHJ1Y3QgaXBzdGF0c19taWIpLAorCQkJICAgX19hbGlnbm9mX18oc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQorCQlnb3RvIGVycl9pcDsKIAlpZiAoc25tcDZfbWliX2luaXQoKHZvaWQgKiopaWRldi0+c3RhdHMuaWNtcHY2LCBzaXplb2Yoc3RydWN0IGljbXB2Nl9taWIpLAogCQkJICAgX19hbGlnbm9mX18oc3RydWN0IGljbXB2Nl9taWIpKSA8IDApCiAJCWdvdG8gZXJyX2ljbXA7CkBAIC0yODgsMTIgKzMwMywxNSBAQAogCXJldHVybiAwOwogCiBlcnJfaWNtcDoKKwlzbm1wNl9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2KTsKK2Vycl9pcDoKIAlyZXR1cm4gZXJyOwogfQogCiBpbnQgc25tcDZfZnJlZV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKIAlzbm1wNl9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjYpOworCXNubXA2X21pYl9mcmVlKCh2b2lkICoqKWlkZXYtPnN0YXRzLmlwdjYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yYXcuYyBiL25ldC9pcHY2L3Jhdy5jCmluZGV4IGQ2ZGVkYzQuLmMyZTYyOWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3Jhdy5jCisrKyBiL25ldC9pcHY2L3Jhdy5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB1YWRkcjsKLQlfX3UzMiB2NGFkZHIgPSAwOworCV9fYmUzMiB2NGFkZHIgPSAwOwogCWludCBhZGRyX3R5cGU7CiAJaW50IGVycjsKIApAQCAtMjkwLDcgKzI5MCw3IEBACiAKIHZvaWQgcmF3djZfZXJyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgICAgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCi0JICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgdTMyIGluZm8pCisJICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IGluZXQ2X3NrKHNrKTsKQEAgLTM3MCw5ICszNzAsOSBAQAogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9CiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQotCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJc2tiLT5jc3VtID0gfmNzdW1fdW5mb2xkKGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCiAJCQkJCSAgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJCQkgICAgIHNrYi0+bGVuLCBpbmV0LT5udW0sIDApOworCQkJCQkgICAgIHNrYi0+bGVuLCBpbmV0LT5udW0sIDApKTsKIAogCWlmIChpbmV0LT5oZHJpbmNsKSB7CiAJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewpAQCAtNDc5LDggKzQ3OSw4IEBACiAJaW50IG9mZnNldDsKIAlpbnQgbGVuOwogCWludCB0b3RhbF9sZW47Ci0JdTMyIHRtcF9jc3VtOwotCXUxNiBjc3VtOworCV9fd3N1bSB0bXBfY3N1bTsKKwlfX3N1bTE2IGNzdW07CiAKIAlpZiAoIXJwLT5jaGVja3N1bSkKIAkJZ290byBzZW5kOwpAQCAtNTMwLDE2ICs1MzAsMTUgQEAKIAogCS8qIGluIGNhc2UgY2tzdW0gd2FzIG5vdCBpbml0aWFsaXplZCAqLwogCWlmICh1bmxpa2VseShjc3VtKSkKLQkJdG1wX2NzdW0gPSBjc3VtX3N1Yih0bXBfY3N1bSwgY3N1bSk7CisJCXRtcF9jc3VtID0gY3N1bV9zdWIodG1wX2NzdW0sIGNzdW1fdW5mb2xkKGNzdW0pKTsKIAotCXRtcF9jc3VtID0gY3N1bV9pcHY2X21hZ2ljKCZmbC0+Zmw2X3NyYywKKwljc3VtID0gY3N1bV9pcHY2X21hZ2ljKCZmbC0+Zmw2X3NyYywKIAkJCQkgICAmZmwtPmZsNl9kc3QsCiAJCQkJICAgdG90YWxfbGVuLCBmbC0+cHJvdG8sIHRtcF9jc3VtKTsKIAotCWlmICh0bXBfY3N1bSA9PSAwKQotCQl0bXBfY3N1bSA9IC0xOworCWlmIChjc3VtID09IDAgJiYgZmwtPnByb3RvID09IElQUFJPVE9fVURQKQorCQljc3VtID0gQ1NVTV9NQU5HTEVEXzA7CiAKLQljc3VtID0gdG1wX2NzdW07CiAJaWYgKHNrYl9zdG9yZV9iaXRzKHNrYiwgb2Zmc2V0LCAmY3N1bSwgMikpCiAJCUJVRygpOwogCkBAIC01ODYsNyArNTg1LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yX2ZhdWx0OwogCi0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVRSRVFVRVNUUyk7CQkKKwlJUDZfSU5DX1NUQVRTKHJ0LT5ydDZpX2lkZXYsIElQU1RBVFNfTUlCX09VVFJFUVVFU1RTKTsKIAllcnIgPSBORl9IT09LKFBGX0lORVQ2LCBORl9JUDZfTE9DQUxfT1VULCBza2IsIE5VTEwsIHJ0LT51LmRzdC5kZXYsCiAJCSAgICAgIGRzdF9vdXRwdXQpOwogCWlmIChlcnIgPiAwKQpAQCAtNjAwLDcgKzU5OSw3IEBACiAJZXJyID0gLUVGQVVMVDsKIAlrZnJlZV9za2Ioc2tiKTsKIGVycm9yOgotCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOworCUlQNl9JTkNfU1RBVFMocnQtPnJ0NmlfaWRldiwgSVBTVEFUU19NSUJfT1VURElTQ0FSRFMpOwogCXJldHVybiBlcnI7IAogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggZjM5YmJlZC4uNmY5YTkwNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPG5ldC9zbm1wLmg+CiAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxuZXQvdHJhbnNwX3Y2Lmg+CiAjaW5jbHVkZSA8bmV0L3Jhd3Y2Lmg+CkBAIC03Niw3ICs3Nyw3IEBACiAJc3RydWN0IGhsaXN0X25vZGUJbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxydV9saXN0OwkJLyogbHJ1IGxpc3QgbWVtYmVyCSovCiAKLQlfX3UzMgkJCWlkOwkJLyogZnJhZ21lbnQgaWQJCSovCisJX19iZTMyCQkJaWQ7CQkvKiBmcmFnbWVudCBpZAkJKi8KIAlzdHJ1Y3QgaW42X2FkZHIJCXNhZGRyOwogCXN0cnVjdCBpbjZfYWRkcgkJZGFkZHI7CiAKQEAgLTEyNCwyOCArMTI1LDI4IEBACiAgKiBjYWxsZXJzIHNob3VsZCBiZSBjYXJlZnVsIG5vdCB0byB1c2UgdGhlIGhhc2ggdmFsdWUgb3V0c2lkZSB0aGUgaXBmcmFnX2xvY2sKICAqIGFzIGRvaW5nIHNvIGNvdWxkIHJhY2Ugd2l0aCBpcGZyYWdfaGFzaF9ybmQgYmVpbmcgcmVjYWxjdWxhdGVkLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwNnFoYXNoZm4odTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLAorc3RhdGljIHVuc2lnbmVkIGludCBpcDZxaGFzaGZuKF9fYmUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyKQogewogCXUzMiBhLCBiLCBjOwogCi0JYSA9IHNhZGRyLT5zNl9hZGRyMzJbMF07Ci0JYiA9IHNhZGRyLT5zNl9hZGRyMzJbMV07Ci0JYyA9IHNhZGRyLT5zNl9hZGRyMzJbMl07CisJYSA9IChfX2ZvcmNlIHUzMilzYWRkci0+czZfYWRkcjMyWzBdOworCWIgPSAoX19mb3JjZSB1MzIpc2FkZHItPnM2X2FkZHIzMlsxXTsKKwljID0gKF9fZm9yY2UgdTMyKXNhZGRyLT5zNl9hZGRyMzJbMl07CiAKIAlhICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKIAliICs9IEpIQVNIX0dPTERFTl9SQVRJTzsKIAljICs9IGlwNl9mcmFnX2hhc2hfcm5kOwogCV9famhhc2hfbWl4KGEsIGIsIGMpOwogCi0JYSArPSBzYWRkci0+czZfYWRkcjMyWzNdOwotCWIgKz0gZGFkZHItPnM2X2FkZHIzMlswXTsKLQljICs9IGRhZGRyLT5zNl9hZGRyMzJbMV07CisJYSArPSAoX19mb3JjZSB1MzIpc2FkZHItPnM2X2FkZHIzMlszXTsKKwliICs9IChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzBdOworCWMgKz0gKF9fZm9yY2UgdTMyKWRhZGRyLT5zNl9hZGRyMzJbMV07CiAJX19qaGFzaF9taXgoYSwgYiwgYyk7CiAKLQlhICs9IGRhZGRyLT5zNl9hZGRyMzJbMl07Ci0JYiArPSBkYWRkci0+czZfYWRkcjMyWzNdOwotCWMgKz0gaWQ7CisJYSArPSAoX19mb3JjZSB1MzIpZGFkZHItPnM2X2FkZHIzMlsyXTsKKwliICs9IChfX2ZvcmNlIHUzMilkYWRkci0+czZfYWRkcjMyWzNdOworCWMgKz0gKF9fZm9yY2UgdTMyKWlkOwogCV9famhhc2hfbWl4KGEsIGIsIGMpOwogCiAJcmV0dXJuIGMgJiAoSVA2UV9IQVNIU1ogLSAxKTsKQEAgLTI1Nyw3ICsyNTgsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgaXA2X2V2aWN0b3Iodm9pZCkKK3N0YXRpYyB2b2lkIGlwNl9ldmljdG9yKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGZyYWdfcXVldWUgKmZxOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKQEAgLTI4NCwxNCArMjg1LDE0IEBACiAJCXNwaW5fdW5sb2NrKCZmcS0+bG9jayk7CiAKIAkJZnFfcHV0KGZxLCAmd29yayk7Ci0JCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJCUlQNl9JTkNfU1RBVFNfQkgoaWRldiwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBpcDZfZnJhZ19leHBpcmUodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBmcmFnX3F1ZXVlICpmcSA9IChzdHJ1Y3QgZnJhZ19xdWV1ZSAqKSBkYXRhOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAKIAlzcGluX2xvY2soJmZxLT5sb2NrKTsKIApAQCAtMzAwLDE3ICszMDEsMTkgQEAKIAogCWZxX2tpbGwoZnEpOwogCi0JSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTVRJTUVPVVQpOwotCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJZGV2ID0gZGV2X2dldF9ieV9pbmRleChmcS0+aWlmKTsKKwlpZiAoIWRldikKKwkJZ290byBvdXQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJSVA2X0lOQ19TVEFUU19CSChfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNVElNRU9VVCk7CisJSVA2X0lOQ19TVEFUU19CSChfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJLyogRG9uJ3Qgc2VuZCBlcnJvciBpZiB0aGUgZmlyc3Qgc2VnbWVudCBkaWQgbm90IGFycml2ZS4gKi8KIAlpZiAoIShmcS0+bGFzdF9pbiZGSVJTVF9JTikgfHwgIWZxLT5mcmFnbWVudHMpCiAJCWdvdG8gb3V0OwogCi0JZGV2ID0gZGV2X2dldF9ieV9pbmRleChmcS0+aWlmKTsKLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0KIAkvKgogCSAgIEJ1dCB1c2UgYXMgc291cmNlIGRldmljZSBvbiB3aGljaCBMQVNUIEFSUklWRUQKIAkgICBzZWdtZW50IHdhcyByZWNlaXZlZC4gQW5kIGRvIG5vdCB1c2UgZnEtPmRldgpAQCAtMzE4LDggKzMyMSw5IEBACiAJICovCiAJZnEtPmZyYWdtZW50cy0+ZGV2ID0gZGV2OwogCWljbXB2Nl9zZW5kKGZxLT5mcmFnbWVudHMsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19GUkFHVElNRSwgMCwgZGV2KTsKLQlkZXZfcHV0KGRldik7CiBvdXQ6CisJaWYgKGRldikKKwkJZGV2X3B1dChkZXYpOwogCXNwaW5fdW5sb2NrKCZmcS0+bG9jayk7CiAJZnFfcHV0KGZxLCBOVUxMKTsKIH0KQEAgLTM2Niw3ICszNzAsOCBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqCi1pcDZfZnJhZ19jcmVhdGUodTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QpCitpcDZfZnJhZ19jcmVhdGUoX19iZTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QsCisJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7CiAJc3RydWN0IGZyYWdfcXVldWUgKmZxOwogCkBAIC0zODYsMTIgKzM5MSwxMyBAQAogCXJldHVybiBpcDZfZnJhZ19pbnRlcm4oZnEpOwogCiBvb206Ci0JSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKKwlJUDZfSU5DX1NUQVRTX0JIKGlkZXYsIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOwogCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqCi1mcV9maW5kKHUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsIHN0cnVjdCBpbjZfYWRkciAqZHN0KQorZnFfZmluZChfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewogCXN0cnVjdCBmcmFnX3F1ZXVlICpmcTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKQEAgLTQxMCw3ICs0MTYsNyBAQAogCX0KIAlyZWFkX3VubG9jaygmaXA2X2ZyYWdfbG9jayk7CiAKLQlyZXR1cm4gaXA2X2ZyYWdfY3JlYXRlKGlkLCBzcmMsIGRzdCk7CisJcmV0dXJuIGlwNl9mcmFnX2NyZWF0ZShpZCwgc3JjLCBkc3QsIGlkZXYpOwogfQogCiAKQEAgLTQyOCw3ICs0MzQsOCBAQAogCQkJKCh1OCAqKSAoZmhkciArIDEpIC0gKHU4ICopIChza2ItPm5oLmlwdjZoICsgMSkpKTsKIAogCWlmICgodW5zaWduZWQgaW50KWVuZCA+IElQVjZfTUFYUExFTikgewotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCSBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAgCQlpY21wdjZfcGFyYW1fcHJvYihza2IsSUNNUFY2X0hEUl9GSUVMRCwgKHU4KikmZmhkci0+ZnJhZ19vZmYgLSBza2ItPm5oLnJhdyk7CiAgCQlyZXR1cm47CiAJfQpAQCAtNDU1LDcgKzQ2Miw4IEBACiAJCQkvKiBSRkMyNDYwIHNheXMgYWx3YXlzIHNlbmQgcGFyYW1ldGVyIHByb2JsZW0gaW4KIAkJCSAqIHRoaXMgY2FzZS4gLURhdmVNCiAJCQkgKi8KLQkJCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLAorCQkJCQkgSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCQkJaWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELCAKIAkJCQkJICBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgcGF5bG9hZF9sZW4pKTsKIAkJCXJldHVybjsKQEAgLTU3MSw3ICs1NzksNyBAQAogCXJldHVybjsKIAogZXJyOgotCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIApAQCAtNjY1LDcgKzY3Myw5IEBACiAJaWYgKGhlYWQtPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkKIAkJaGVhZC0+Y3N1bSA9IGNzdW1fcGFydGlhbChoZWFkLT5uaC5yYXcsIGhlYWQtPmgucmF3LWhlYWQtPm5oLnJhdywgaGVhZC0+Y3N1bSk7CiAKLQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJSVA2X0lOQ19TVEFUU19CSChfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlmcS0+ZnJhZ21lbnRzID0gTlVMTDsKIAlyZXR1cm4gMTsKIApAQCAtNjc3LDcgKzY4Nyw5IEBACiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgImlwNl9mcmFnX3JlYXNtOiBubyBtZW1vcnkgZm9yIHJlYXNzZW1ibHlcbiIpOwogb3V0X2ZhaWw6Ci0JSVA2X0lOQ19TVEFUU19CSChJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJSVA2X0lOQ19TVEFUU19CSChfX2luNl9kZXZfZ2V0KGRldiksIElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiAtMTsKIH0KIApAQCAtNjkxLDE2ICs3MDMsMTYgQEAKIAogCWhkciA9IHNrYi0+bmguaXB2Nmg7CiAKLQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNUkVRRFMpOworCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwgSVBTVEFUU19NSUJfUkVBU01SRVFEUyk7CiAKIAkvKiBKdW1ibyBwYXlsb2FkIGluaGliaXRzIGZyYWcuIGhlYWRlciAqLwogCWlmIChoZHItPnBheWxvYWRfbGVuPT0wKSB7Ci0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOworCQlJUDZfSU5DX1NUQVRTKGlwNl9kc3RfaWRldihza2ItPmRzdCksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJaWNtcHY2X3BhcmFtX3Byb2Ioc2tiLCBJQ01QVjZfSERSX0ZJRUxELCBza2ItPmgucmF3LXNrYi0+bmgucmF3KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAoc2tiLT5oLnJhdy1za2ItPmRhdGEpK3NpemVvZihzdHJ1Y3QgZnJhZ19oZHIpKSkgewotCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9JTkhEUkVSUk9SUyk7CiAJCWljbXB2Nl9wYXJhbV9wcm9iKHNrYiwgSUNNUFY2X0hEUl9GSUVMRCwgc2tiLT5oLnJhdy1za2ItPm5oLnJhdyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC03MTEsMTYgKzcyMywxNyBAQAogCWlmICghKGZoZHItPmZyYWdfb2ZmICYgaHRvbnMoMHhGRkY5KSkpIHsKIAkJLyogSXQgaXMgbm90IGEgZnJhZ21lbnRlZCBmcmFtZSAqLwogCQlza2ItPmgucmF3ICs9IHNpemVvZihzdHJ1Y3QgZnJhZ19oZHIpOwotCQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKKwkJSVA2X0lOQ19TVEFUU19CSChpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CiAKIAkJSVA2Q0Ioc2tiKS0+bmhvZmYgPSAodTgqKWZoZHIgLSBza2ItPm5oLnJhdzsKIAkJcmV0dXJuIDE7CiAJfQogCiAJaWYgKGF0b21pY19yZWFkKCZpcDZfZnJhZ19tZW0pID4gc3lzY3RsX2lwNmZyYWdfaGlnaF90aHJlc2gpCi0JCWlwNl9ldmljdG9yKCk7CisJCWlwNl9ldmljdG9yKGlwNl9kc3RfaWRldihza2ItPmRzdCkpOwogCi0JaWYgKChmcSA9IGZxX2ZpbmQoZmhkci0+aWRlbnRpZmljYXRpb24sICZoZHItPnNhZGRyLCAmaGRyLT5kYWRkcikpICE9IE5VTEwpIHsKKwlpZiAoKGZxID0gZnFfZmluZChmaGRyLT5pZGVudGlmaWNhdGlvbiwgJmhkci0+c2FkZHIsICZoZHItPmRhZGRyLAorCQkJICBpcDZfZHN0X2lkZXYoc2tiLT5kc3QpKSkgIT0gTlVMTCkgewogCQlpbnQgcmV0ID0gLTE7CiAKIAkJc3Bpbl9sb2NrKCZmcS0+bG9jayk7CkBAIC03MzYsNyArNzQ5LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlJUDZfSU5DX1NUQVRTX0JIKElQU1RBVFNfTUlCX1JFQVNNRkFJTFMpOworCUlQNl9JTkNfU1RBVFNfQkgoaXA2X2RzdF9pZGV2KHNrYi0+ZHN0KSwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggYjM5YWU5OS4uOWY4MDUxOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00NDAsNyArNDQwLDcgQEAKIAlpZiAocHJlZiA9PSBJQ01QVjZfUk9VVEVSX1BSRUZfSU5WQUxJRCkKIAkJcHJlZiA9IElDTVBWNl9ST1VURVJfUFJFRl9NRURJVU07CiAKLQlsaWZldGltZSA9IGh0b25sKHJpbmZvLT5saWZldGltZSk7CisJbGlmZXRpbWUgPSBudG9obChyaW5mby0+bGlmZXRpbWUpOwogCWlmIChsaWZldGltZSA9PSAweGZmZmZmZmZmKSB7CiAJCS8qIGluZmluaXR5ICovCiAJfSBlbHNlIGlmIChsaWZldGltZSA+IDB4N2ZmZmZmZmYvSFopIHsKQEAgLTcxMSwxMiArNzExLDEwIEBACiAJCQkuaXA2X3UgPSB7CiAJCQkJLmRhZGRyID0gaXBoLT5kYWRkciwKIAkJCQkuc2FkZHIgPSBpcGgtPnNhZGRyLAotI2lmZGVmIENPTkZJR19JUFY2X1JPVVRFX0ZXTUFSSwotCQkJCS5md21hcmsgPSBza2ItPm5mbWFyaywKLSNlbmRpZgotCQkJCS5mbG93bGFiZWwgPSAoKiAodTMyICopIGlwaCkmSVBWNl9GTE9XSU5GT19NQVNLLAorCQkJCS5mbG93bGFiZWwgPSAoKiAoX19iZTMyICopIGlwaCkmSVBWNl9GTE9XSU5GT19NQVNLLAogCQkJfSwKIAkJfSwKKyAJCS5tYXJrID0gc2tiLT5tYXJrLAogCQkucHJvdG8gPSBpcGgtPm5leHRoZHIsCiAJfTsKIApAQCAtOTQyLDcgKzk0MCw3IEBACiAJZmliNl9mb3JjZV9zdGFydF9nYygpOwogCiBvdXQ6Ci0JcmV0dXJuIChzdHJ1Y3QgZHN0X2VudHJ5ICopcnQ7CisJcmV0dXJuICZydC0+dS5kc3Q7CiB9CiAKIGludCBuZGlzY19kc3RfZ2MoaW50ICptb3JlKQpAQCAtMTIyNSw3ICsxMjIzLDcgQEAKIAlpZiAoaWRldikKIAkJaW42X2Rldl9wdXQoaWRldik7CiAJaWYgKHJ0KQotCQlkc3RfZnJlZSgoc3RydWN0IGRzdF9lbnRyeSAqKSBydCk7CisJCWRzdF9mcmVlKCZydC0+dS5kc3QpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3NTEsOSArMTc0OSw5IEBACiB7CiAJaW50IHR5cGUgPSBpcHY2X2FkZHJfdHlwZSgmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpOwogCWlmICh0eXBlID09IElQVjZfQUREUl9BTlkgfHwgdHlwZSA9PSBJUFY2X0FERFJfUkVTRVJWRUQpCi0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfSU5BRERSRVJST1JTKTsKKwkJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOwogCi0JSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CisJSVA2X0lOQ19TVEFUUyhpcDZfZHN0X2lkZXYoc2tiLT5kc3QpLCBJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBjb2RlLCAwLCBza2ItPmRldik7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CkBAIC0xODI0LDcgKzE4MjIsNyBAQAogCQlydC0+cnQ2aV9mbGFncyB8PSBSVEZfTE9DQUw7CiAJcnQtPnJ0NmlfbmV4dGhvcCA9IG5kaXNjX2dldF9uZWlnaChydC0+cnQ2aV9kZXYsICZydC0+cnQ2aV9nYXRld2F5KTsKIAlpZiAocnQtPnJ0NmlfbmV4dGhvcCA9PSBOVUxMKSB7Ci0JCWRzdF9mcmVlKChzdHJ1Y3QgZHN0X2VudHJ5ICopIHJ0KTsKKwkJZHN0X2ZyZWUoJnJ0LT51LmRzdCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIApAQCAtMjAwOCw2ICsyMDA2LDIwIEBACiAJcmV0dXJuIGlwNl9yb3V0ZV9hZGQoJmNmZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHJ0Nl9ubG1zZ19zaXplKHZvaWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKDE2KSAvKiBSVEFfU1JDICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoMTYpIC8qIFJUQV9EU1QgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxNikgLyogUlRBX0dBVEVXQVkgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxNikgLyogUlRBX1BSRUZTUkMgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfVEFCTEUgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfSUlGICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX09JRiAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9QUklPUklUWSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgcnRhX2NhY2hlaW5mbykpOworfQorCiBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0Nl9pbmZvICpydCwKIAkJCSBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwgc3RydWN0IGluNl9hZGRyICpzcmMsCiAJCQkgaW50IGlpZiwgaW50IHR5cGUsIHUzMiBwaWQsIHUzMiBzZXEsCkBAIC0yMDE1LDcgKzIwMjcsNyBAQAogewogCXN0cnVjdCBydG1zZyAqcnRtOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCXN0cnVjdCBydGFfY2FjaGVpbmZvIGNpOworCWxvbmcgZXhwaXJlczsKIAl1MzIgdGFibGU7CiAKIAlpZiAocHJlZml4KSB7CS8qIHVzZXIgd2FudHMgcHJlZml4IHJvdXRlcyBvbmx5ICovCkBAIC0yMDg5LDE4ICsyMTAxLDExIEBACiAJCU5MQV9QVVRfVTMyKHNrYiwgUlRBX09JRiwgcnQtPnJ0NmlfZGV2LT5pZmluZGV4KTsKIAogCU5MQV9QVVRfVTMyKHNrYiwgUlRBX1BSSU9SSVRZLCBydC0+cnQ2aV9tZXRyaWMpOwotCWNpLnJ0YV9sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBydC0+dS5kc3QubGFzdHVzZSk7Ci0JaWYgKHJ0LT5ydDZpX2V4cGlyZXMpCi0JCWNpLnJ0YV9leHBpcmVzID0gamlmZmllc190b19jbG9ja190KHJ0LT5ydDZpX2V4cGlyZXMgLSBqaWZmaWVzKTsKLQllbHNlCi0JCWNpLnJ0YV9leHBpcmVzID0gMDsKLQljaS5ydGFfdXNlZCA9IHJ0LT51LmRzdC5fX3VzZTsKLQljaS5ydGFfY2xudHJlZiA9IGF0b21pY19yZWFkKCZydC0+dS5kc3QuX19yZWZjbnQpOwotCWNpLnJ0YV9lcnJvciA9IHJ0LT51LmRzdC5lcnJvcjsKLQljaS5ydGFfaWQgPSAwOwotCWNpLnJ0YV90cyA9IDA7Ci0JY2kucnRhX3RzYWdlID0gMDsKLQlOTEFfUFVUKHNrYiwgUlRBX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgJmNpKTsKKworCWV4cGlyZXMgPSBydC0+cnQ2aV9leHBpcmVzID8gcnQtPnJ0NmlfZXhwaXJlcyAtIGppZmZpZXMgOiAwOworCWlmIChydG5sX3B1dF9jYWNoZWluZm8oc2tiLCAmcnQtPnUuZHN0LCAwLCAwLCAwLAorCQkJICAgICAgIGV4cGlyZXMsIHJ0LT51LmRzdC5lcnJvcikgPCAwKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOwogCkBAIC0yMjAyLDcgKzIyMDcsNiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIHBpZCA9IDAsIHNlcSA9IDA7CiAJc3RydWN0IG5sbXNnaGRyICpubGggPSBOVUxMOwotCWludCBwYXlsb2FkID0gc2l6ZW9mKHN0cnVjdCBydG1zZykgKyAyNTY7CiAJaW50IGVyciA9IC1FTk9CVUZTOwogCiAJaWYgKGluZm8pIHsKQEAgLTIyMTIsMTUgKzIyMTYsMTMgQEAKIAkJCXNlcSA9IG5saC0+bmxtc2dfc2VxOwogCX0KIAotCXNrYiA9IG5sbXNnX25ldyhubG1zZ190b3RhbF9zaXplKHBheWxvYWQpLCBnZnBfYW55KCkpOworCXNrYiA9IG5sbXNnX25ldyhydDZfbmxtc2dfc2l6ZSgpLCBnZnBfYW55KCkpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBlcnJvdXQ7CiAKIAllcnIgPSBydDZfZmlsbF9ub2RlKHNrYiwgcnQsIE5VTEwsIE5VTEwsIDAsIGV2ZW50LCBwaWQsIHNlcSwgMCwgMCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCWdvdG8gZXJyb3V0OwotCX0KKwkvKiBmYWlsdXJlIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi8KKwlCVUdfT04oZXJyIDwgMCk7CiAKIAllcnIgPSBydG5sX25vdGlmeShza2IsIHBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLCBubGgsIGdmcF9hbnkoKSk7CiBlcnJvdXQ6CkBAIC0yMjQ4LDcgKzIyNTAsNiBAQAogc3RhdGljIGludCBydDZfaW5mb19yb3V0ZShzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCB2b2lkICpwX2FyZykKIHsKIAlzdHJ1Y3QgcnQ2X3Byb2NfYXJnICphcmcgPSAoc3RydWN0IHJ0Nl9wcm9jX2FyZyAqKSBwX2FyZzsKLQlpbnQgaTsKIAogCWlmIChhcmctPnNraXAgPCBhcmctPm9mZnNldCAvIFJUNl9JTkZPX0xFTikgewogCQlhcmctPnNraXArKzsKQEAgLTIyNTgsMzggKzIyNTksMjggQEAKIAlpZiAoYXJnLT5sZW4gPj0gYXJnLT5sZW5ndGgpCiAJCXJldHVybiAwOwogCi0JZm9yIChpPTA7IGk8MTY7IGkrKykgewotCQlzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sICIlMDJ4IiwKLQkJCXJ0LT5ydDZpX2RzdC5hZGRyLnM2X2FkZHJbaV0pOwotCQlhcmctPmxlbiArPSAyOwotCX0KLQlhcmctPmxlbiArPSBzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sICIgJTAyeCAiLAorCWFyZy0+bGVuICs9IHNwcmludGYoYXJnLT5idWZmZXIgKyBhcmctPmxlbiwKKwkJCSAgICBOSVA2X1NFUUZNVCAiICUwMnggIiwKKwkJCSAgICBOSVA2KHJ0LT5ydDZpX2RzdC5hZGRyKSwKIAkJCSAgICBydC0+cnQ2aV9kc3QucGxlbik7CiAKICNpZmRlZiBDT05GSUdfSVBWNl9TVUJUUkVFUwotCWZvciAoaT0wOyBpPDE2OyBpKyspIHsKLQkJc3ByaW50ZihhcmctPmJ1ZmZlciArIGFyZy0+bGVuLCAiJTAyeCIsCi0JCQlydC0+cnQ2aV9zcmMuYWRkci5zNl9hZGRyW2ldKTsKLQkJYXJnLT5sZW4gKz0gMjsKLQl9Ci0JYXJnLT5sZW4gKz0gc3ByaW50ZihhcmctPmJ1ZmZlciArIGFyZy0+bGVuLCAiICUwMnggIiwKKwlhcmctPmxlbiArPSBzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sCisJCQkgICAgTklQNl9TRVFGTVQgIiAlMDJ4ICIsCisJCQkgICAgTklQNihydC0+cnQ2aV9zcmMuYWRkciksCiAJCQkgICAgcnQtPnJ0Nmlfc3JjLnBsZW4pOwogI2Vsc2UKLQlzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sCi0JCSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMCAiKTsKLQlhcmctPmxlbiArPSAzNjsKKwlhcmctPmxlbiArPSBzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sCisJCQkgICAgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwICIpOwogI2VuZGlmCiAKIAlpZiAocnQtPnJ0NmlfbmV4dGhvcCkgewotCQlmb3IgKGk9MDsgaTwxNjsgaSsrKSB7Ci0JCQlzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sICIlMDJ4IiwKLQkJCQlydC0+cnQ2aV9uZXh0aG9wLT5wcmltYXJ5X2tleVtpXSk7Ci0JCQlhcmctPmxlbiArPSAyOwotCQl9CisJCWFyZy0+bGVuICs9IHNwcmludGYoYXJnLT5idWZmZXIgKyBhcmctPmxlbiwKKwkJCQkgICAgTklQNl9TRVFGTVQsCisJCQkJICAgIE5JUDYoKigoc3RydWN0IGluNl9hZGRyICopcnQtPnJ0NmlfbmV4dGhvcC0+cHJpbWFyeV9rZXkpKSk7CiAJfSBlbHNlIHsKLQkJc3ByaW50ZihhcmctPmJ1ZmZlciArIGFyZy0+bGVuLAotCQkJIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7Ci0JCWFyZy0+bGVuICs9IDMyOworCQlhcmctPmxlbiArPSBzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sCisJCQkJICAgICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpOwogCX0KIAlhcmctPmxlbiArPSBzcHJpbnRmKGFyZy0+YnVmZmVyICsgYXJnLT5sZW4sCiAJCQkgICAgIiAlMDh4ICUwOHggJTA4eCAlMDh4ICU4c1xuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggYmU2OTlmOC4uNzdiN2IwOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTYwLDcgKzYwLDcgQEAKICAqLwogCiAjZGVmaW5lIEhBU0hfU0laRSAgMTYKLSNkZWZpbmUgSEFTSChhZGRyKSAoKGFkZHJeKGFkZHI+PjQpKSYweEYpCisjZGVmaW5lIEhBU0goYWRkcikgKCgoX19mb3JjZSB1MzIpYWRkcl4oKF9fZm9yY2UgdTMyKWFkZHI+PjQpKSYweEYpCiAKIHN0YXRpYyBpbnQgaXBpcDZfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGlwaXA2X3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNzYsNyArNzYsNyBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhpcGlwNl9sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGlwNl90dW5uZWxfbG9va3VwKHUzMiByZW1vdGUsIHUzMiBsb2NhbCkKK3N0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICogaXBpcDZfdHVubmVsX2xvb2t1cChfX2JlMzIgcmVtb3RlLCBfX2JlMzIgbG9jYWwpCiB7CiAJdW5zaWduZWQgaDAgPSBIQVNIKHJlbW90ZSk7CiAJdW5zaWduZWQgaDEgPSBIQVNIKGxvY2FsKTsKQEAgLTEwMiw4ICsxMDIsOCBAQAogCiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqKiBpcGlwNl9idWNrZXQoc3RydWN0IGlwX3R1bm5lbCAqdCkKIHsKLQl1MzIgcmVtb3RlID0gdC0+cGFybXMuaXBoLmRhZGRyOwotCXUzMiBsb2NhbCA9IHQtPnBhcm1zLmlwaC5zYWRkcjsKKwlfX2JlMzIgcmVtb3RlID0gdC0+cGFybXMuaXBoLmRhZGRyOworCV9fYmUzMiBsb2NhbCA9IHQtPnBhcm1zLmlwaC5zYWRkcjsKIAl1bnNpZ25lZCBoID0gMDsKIAlpbnQgcHJpbyA9IDA7CiAKQEAgLTE0NCw4ICsxNDQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwaXA2X3R1bm5lbF9sb2NhdGUoc3RydWN0IGlwX3R1bm5lbF9wYXJtICpwYXJtcywgaW50IGNyZWF0ZSkKIHsKLQl1MzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKLQl1MzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOworCV9fYmUzMiByZW1vdGUgPSBwYXJtcy0+aXBoLmRhZGRyOworCV9fYmUzMiBsb2NhbCA9IHBhcm1zLT5pcGguc2FkZHI7CiAJc3RydWN0IGlwX3R1bm5lbCAqdCwgKip0cCwgKm50OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgaCA9IDA7CkBAIC00MDUsOSArNDA1LDkgQEAKIC8qIFJldHVybnMgdGhlIGVtYmVkZGVkIElQdjQgYWRkcmVzcyBpZiB0aGUgSVB2NiBhZGRyZXNzCiAgICBjb21lcyBmcm9tIDZ0bzQgKFJGQyAzMDU2KSBhZGRyIHNwYWNlICovCiAKLXN0YXRpYyBpbmxpbmUgdTMyIHRyeV82dG80KHN0cnVjdCBpbjZfYWRkciAqdjZkc3QpCitzdGF0aWMgaW5saW5lIF9fYmUzMiB0cnlfNnRvNChzdHJ1Y3QgaW42X2FkZHIgKnY2ZHN0KQogewotCXUzMiBkc3QgPSAwOworCV9fYmUzMiBkc3QgPSAwOwogCiAJaWYgKHY2ZHN0LT5zNl9hZGRyMTZbMF0gPT0gaHRvbnMoMHgyMDAyKSkgewogCSAgICAgICAgLyogNnRvNCB2NiBhZGRyIGhhcyAxNiBiaXRzIHByZWZpeCwgMzIgdjRhZGRyLCAxNiBTTEEsIC4uLiAqLwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnRkZXY7CQkJLyogRGV2aWNlIHRvIG90aGVyIGhvc3QgKi8KIAlzdHJ1Y3QgaXBoZHIgICppcGg7CQkJLyogT3VyIG5ldyBJUCBoZWFkZXIgKi8KIAlpbnQgICAgbWF4X2hlYWRyb29tOwkJCS8qIFRoZSBleHRyYSBoZWFkZXIgc3BhY2UgbmVlZGVkICovCi0JdTMyICAgIGRzdCA9IHRpcGgtPmRhZGRyOworCV9fYmUzMiBkc3QgPSB0aXBoLT5kYWRkcjsKIAlpbnQgICAgbXR1OwogCXN0cnVjdCBpbjZfYWRkciAqYWRkcjY7CQogCWludCBhZGRyX3R5cGU7CkBAIC04MDksNyArODA5LDcgQEAKIAl9CiB9CiAKLXZvaWQgX19leGl0IHNpdF9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2l0X2NsZWFudXAodm9pZCkKIHsKIAlpbmV0X2RlbF9wcm90b2NvbCgmc2l0X3Byb3RvY29sLCBJUFBST1RPX0lQVjYpOwogCkBAIC04MTksNyArODE5LDcgQEAKIAlydG5sX3VubG9jaygpOwogfQogCi1pbnQgX19pbml0IHNpdF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBzaXRfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IDRjMmE3YzAuLmMyNWU5MzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNjYsMTAgKzY2LDEzIEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorCiAvKiBTb2NrZXQgdXNlZCBmb3Igc2VuZGluZyBSU1RzIGFuZCBBQ0tzICovCiBzdGF0aWMgc3RydWN0IHNvY2tldCAqdGNwNl9zb2NrZXQ7CiAKLXN0YXRpYyB2b2lkCXRjcF92Nl9zZW5kX3Jlc2V0KHN0cnVjdCBza19idWZmICpza2IpOworc3RhdGljIHZvaWQJdGNwX3Y2X3NlbmRfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkCXRjcF92Nl9yZXFza19zZW5kX2FjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOwogc3RhdGljIHZvaWQJdGNwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuLCAKIAkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtNzgsNiArODEsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29ja19hZl9vcHMgaXB2Nl9tYXBwZWQ7CiBzdGF0aWMgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrX2FmX29wcyBpcHY2X3NwZWNpZmljOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCitzdGF0aWMgc3RydWN0IHRjcF9zb2NrX2FmX29wcyB0Y3Bfc29ja19pcHY2X3NwZWNpZmljOworc3RhdGljIHN0cnVjdCB0Y3Bfc29ja19hZl9vcHMgdGNwX3NvY2tfaXB2Nl9tYXBwZWRfc3BlY2lmaWM7CisjZW5kaWYKIAogc3RhdGljIGludCB0Y3BfdjZfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtKQogewpAQCAtOTgsMjcgKzEwNSwyMCBAQAogCX0KIH0KIAotc3RhdGljIF9faW5saW5lX18gdTE2IHRjcF92Nl9jaGVjayhzdHJ1Y3QgdGNwaGRyICp0aCwgaW50IGxlbiwKK3N0YXRpYyBfX2lubGluZV9fIF9fc3VtMTYgdGNwX3Y2X2NoZWNrKHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgbGVuLAogCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIAogCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYmFzZSkKKwkJCQkgICBfX3dzdW0gYmFzZSkKIHsKIAlyZXR1cm4gY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX1RDUCwgYmFzZSk7CiB9CiAKLXN0YXRpYyBfX3UzMiB0Y3BfdjZfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgX191MzIgdGNwX3Y2X2luaXRfc2VxdWVuY2Uoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewotCQlyZXR1cm4gc2VjdXJlX3RjcHY2X3NlcXVlbmNlX251bWJlcihza2ItPm5oLmlwdjZoLT5kYWRkci5zNl9hZGRyMzIsCi0JCQkJCQkgICAgc2tiLT5uaC5pcHY2aC0+c2FkZHIuczZfYWRkcjMyLAotCQkJCQkJICAgIHNrYi0+aC50aC0+ZGVzdCwKLQkJCQkJCSAgICBza2ItPmgudGgtPnNvdXJjZSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHNlY3VyZV90Y3Bfc2VxdWVuY2VfbnVtYmVyKHNrYi0+bmguaXBoLT5kYWRkciwKLQkJCQkJCSAgc2tiLT5uaC5pcGgtPnNhZGRyLAotCQkJCQkJICBza2ItPmgudGgtPmRlc3QsCi0JCQkJCQkgIHNrYi0+aC50aC0+c291cmNlKTsKLQl9CisJcmV0dXJuIHNlY3VyZV90Y3B2Nl9zZXF1ZW5jZV9udW1iZXIoc2tiLT5uaC5pcHY2aC0+ZGFkZHIuczZfYWRkcjMyLAorCQkJCQkgICAgc2tiLT5uaC5pcHY2aC0+c2FkZHIuczZfYWRkcjMyLAorCQkJCQkgICAgc2tiLT5oLnRoLT5kZXN0LAorCQkJCQkgICAgc2tiLT5oLnRoLT5zb3VyY2UpOwogfQogCiBzdGF0aWMgaW50IHRjcF92Nl9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgCkBAIC0yMTUsNiArMjE1LDkgQEAKIAogCQlpY3NrLT5pY3NrX2FmX29wcyA9ICZpcHY2X21hcHBlZDsKIAkJc2stPnNrX2JhY2tsb2dfcmN2ID0gdGNwX3Y0X2RvX3JjdjsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCQl0cC0+YWZfc3BlY2lmaWMgPSAmdGNwX3NvY2tfaXB2Nl9tYXBwZWRfc3BlY2lmaWM7CisjZW5kaWYKIAogCQllcnIgPSB0Y3BfdjRfY29ubmVjdChzaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKTsKIApAQCAtMjIyLDYgKzIyNSw5IEBACiAJCQlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gZXh0aGRybGVuOwogCQkJaWNzay0+aWNza19hZl9vcHMgPSAmaXB2Nl9zcGVjaWZpYzsKIAkJCXNrLT5za19iYWNrbG9nX3JjdiA9IHRjcF92Nl9kb19yY3Y7CisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkJCXRwLT5hZl9zcGVjaWZpYyA9ICZ0Y3Bfc29ja19pcHY2X3NwZWNpZmljOworI2VuZGlmCiAJCQlnb3RvIGZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQlpcHY2X2FkZHJfc2V0KCZucC0+c2FkZHIsIDAsIDAsIGh0b25sKDB4MDAwMEZGRkYpLApAQCAtMzEwLDcgKzMxNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCi0JCWludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX191MzIgaW5mbykKKwkJaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CiAJY29uc3Qgc3RydWN0IHRjcGhkciAqdGggPSAoc3RydWN0IHRjcGhkciAqKShza2ItPmRhdGErb2Zmc2V0KTsKQEAgLTUwOSw4ICs1MTUsNyBAQAogCiAJCWlwdjZfYWRkcl9jb3B5KCZmbC5mbDZfZHN0LCAmdHJlcS0+cm10X2FkZHIpOwogCQllcnIgPSBpcDZfeG1pdChzaywgc2tiLCAmZmwsIG9wdCwgMCk7Ci0JCWlmIChlcnIgPT0gTkVUX1hNSVRfQ04pCi0JCQllcnIgPSAwOworCQllcnIgPSBuZXRfeG1pdF9ldmFsKGVycik7CiAJfQogCiBkb25lOgpAQCAtNTI2LDcgKzUzMSwzOTYgQEAKIAkJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIHRjcDZfcmVxdWVzdF9zb2NrX29wcyA9IHsKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX2tleSAqdGNwX3Y2X21kNV9kb19sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWludCBpOworCisJQlVHX09OKHRwID09IE5VTEwpOworCisJaWYgKCF0cC0+bWQ1c2lnX2luZm8gfHwgIXRwLT5tZDVzaWdfaW5mby0+ZW50cmllczYpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczY7IGkrKykgeworCQlpZiAoaXB2Nl9hZGRyX2NtcCgmdHAtPm1kNXNpZ19pbmZvLT5rZXlzNltpXS5hZGRyLCBhZGRyKSA9PSAwKQorCQkJcmV0dXJuIChzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKikmdHAtPm1kNXNpZ19pbmZvLT5rZXlzNltpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKnRjcF92Nl9tZDVfbG9va3VwKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCXN0cnVjdCBzb2NrICphZGRyX3NrKQoreworCXJldHVybiB0Y3BfdjZfbWQ1X2RvX2xvb2t1cChzaywgJmluZXQ2X3NrKGFkZHJfc2spLT5kYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKnRjcF92Nl9yZXFza19tZDVfbG9va3VwKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKK3sKKwlyZXR1cm4gdGNwX3Y2X21kNV9kb19sb29rdXAoc2ssICZpbmV0Nl9yc2socmVxKS0+cm10X2FkZHIpOworfQorCitzdGF0aWMgaW50IHRjcF92Nl9tZDVfZG9fYWRkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluNl9hZGRyICpwZWVyLAorCQkJICAgICBjaGFyICpuZXdrZXksIHU4IG5ld2tleWxlbikKK3sKKwkvKiBBZGQga2V5IHRvIHRoZSBsaXN0ICovCisJc3RydWN0IHRjcDZfbWQ1c2lnX2tleSAqa2V5OworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCB0Y3A2X21kNXNpZ19rZXkgKmtleXM7CisKKwlrZXkgPSAoc3RydWN0IHRjcDZfbWQ1c2lnX2tleSopIHRjcF92Nl9tZDVfZG9fbG9va3VwKHNrLCBwZWVyKTsKKwlpZiAoa2V5KSB7CisJCS8qIG1vZGlmeSBleGlzdGluZyBlbnRyeSAtIGp1c3QgdXBkYXRlIHRoYXQgb25lICovCisJCWtmcmVlKGtleS0+a2V5KTsKKwkJa2V5LT5rZXkgPSBuZXdrZXk7CisJCWtleS0+a2V5bGVuID0gbmV3a2V5bGVuOworCX0gZWxzZSB7CisJCS8qIHJlYWxsb2NhdGUgbmV3IGxpc3QgaWYgY3VycmVudCBvbmUgaXMgZnVsbC4gKi8KKwkJaWYgKCF0cC0+bWQ1c2lnX2luZm8pIHsKKwkJCXRwLT5tZDVzaWdfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCp0cC0+bWQ1c2lnX2luZm8pLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghdHAtPm1kNXNpZ19pbmZvKSB7CisJCQkJa2ZyZWUobmV3a2V5KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCQl0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woKTsKKwkJaWYgKHRwLT5tZDVzaWdfaW5mby0+YWxsb2NlZDYgPT0gdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNikgeworCQkJa2V5cyA9IGttYWxsb2MoKHNpemVvZiAodHAtPm1kNXNpZ19pbmZvLT5rZXlzNlswXSkgKgorCQkJCSAgICAgICAodHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNiArIDEpKSwgR0ZQX0FUT01JQyk7CisKKwkJCWlmICgha2V5cykgeworCQkJCXRjcF9mcmVlX21kNXNpZ19wb29sKCk7CisJCQkJa2ZyZWUobmV3a2V5KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKworCQkJaWYgKHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczYpCisJCQkJbWVtbW92ZShrZXlzLCB0cC0+bWQ1c2lnX2luZm8tPmtleXM2LAorCQkJCQkoc2l6ZW9mICh0cC0+bWQ1c2lnX2luZm8tPmtleXM2WzBdKSAqCisJCQkJCSB0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM2KSk7CisKKwkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czYpOworCQkJdHAtPm1kNXNpZ19pbmZvLT5rZXlzNiA9IGtleXM7CisJCQl0cC0+bWQ1c2lnX2luZm8tPmFsbG9jZWQ2Kys7CisJCX0KKworCQlpcHY2X2FkZHJfY29weSgmdHAtPm1kNXNpZ19pbmZvLT5rZXlzNlt0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM2XS5hZGRyLAorCQkJICAgICAgIHBlZXIpOworCQl0cC0+bWQ1c2lnX2luZm8tPmtleXM2W3RwLT5tZDVzaWdfaW5mby0+ZW50cmllczZdLmtleSA9IG5ld2tleTsKKwkJdHAtPm1kNXNpZ19pbmZvLT5rZXlzNlt0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM2XS5rZXlsZW4gPSBuZXdrZXlsZW47CisKKwkJdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNisrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0Y3BfdjZfbWQ1X2FkZF9mdW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2sgKmFkZHJfc2ssCisJCQkgICAgICAgdTggKm5ld2tleSwgX191OCBuZXdrZXlsZW4pCit7CisJcmV0dXJuIHRjcF92Nl9tZDVfZG9fYWRkKHNrLCAmaW5ldDZfc2soYWRkcl9zayktPmRhZGRyLAorCQkJCSBuZXdrZXksIG5ld2tleWxlbik7Cit9CisKK3N0YXRpYyBpbnQgdGNwX3Y2X21kNV9kb19kZWwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaW42X2FkZHIgKnBlZXIpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNjsgaSsrKSB7CisJCWlmIChpcHY2X2FkZHJfY21wKCZ0cC0+bWQ1c2lnX2luZm8tPmtleXM2W2ldLmFkZHIsIHBlZXIpID09IDApIHsKKwkJCS8qIEZyZWUgdGhlIGtleSAqLworCQkJa2ZyZWUodHAtPm1kNXNpZ19pbmZvLT5rZXlzNltpXS5rZXkpOworCQkJdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNi0tOworCisJCQlpZiAodHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNiA9PSAwKSB7CisJCQkJa2ZyZWUodHAtPm1kNXNpZ19pbmZvLT5rZXlzNik7CisJCQkJdHAtPm1kNXNpZ19pbmZvLT5rZXlzNiA9IE5VTEw7CisKKwkJCQl0Y3BfZnJlZV9tZDVzaWdfcG9vbCgpOworCisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgeworCQkJCS8qIHNocmluayB0aGUgZGF0YWJhc2UgKi8KKwkJCQlpZiAodHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNiAhPSBpKQorCQkJCQltZW1tb3ZlKCZ0cC0+bWQ1c2lnX2luZm8tPmtleXM2W2ldLAorCQkJCQkJJnRwLT5tZDVzaWdfaW5mby0+a2V5czZbaSsxXSwKKwkJCQkJCSh0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM2IC0gaSkKKwkJCQkJCSogc2l6ZW9mICh0cC0+bWQ1c2lnX2luZm8tPmtleXM2WzBdKSk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyB2b2lkIHRjcF92Nl9jbGVhcl9tZDVfbGlzdCAoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCWludCBpOworCisJaWYgKHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczYpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRwLT5tZDVzaWdfaW5mby0+ZW50cmllczY7IGkrKykKKwkJCWtmcmVlKHRwLT5tZDVzaWdfaW5mby0+a2V5czZbaV0ua2V5KTsKKwkJdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNiA9IDA7CisJCXRjcF9mcmVlX21kNXNpZ19wb29sKCk7CisJfQorCisJa2ZyZWUodHAtPm1kNXNpZ19pbmZvLT5rZXlzNik7CisJdHAtPm1kNXNpZ19pbmZvLT5rZXlzNiA9IE5VTEw7CisJdHAtPm1kNXNpZ19pbmZvLT5hbGxvY2VkNiA9IDA7CisKKwlpZiAodHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNCkgeworCQlmb3IgKGkgPSAwOyBpIDwgdHAtPm1kNXNpZ19pbmZvLT5lbnRyaWVzNDsgaSsrKQorCQkJa2ZyZWUodHAtPm1kNXNpZ19pbmZvLT5rZXlzNFtpXS5rZXkpOworCQl0cC0+bWQ1c2lnX2luZm8tPmVudHJpZXM0ID0gMDsKKwkJdGNwX2ZyZWVfbWQ1c2lnX3Bvb2woKTsKKwl9CisKKwlrZnJlZSh0cC0+bWQ1c2lnX2luZm8tPmtleXM0KTsKKwl0cC0+bWQ1c2lnX2luZm8tPmtleXM0ID0gTlVMTDsKKwl0cC0+bWQ1c2lnX2luZm8tPmFsbG9jZWQ0ID0gMDsKK30KKworc3RhdGljIGludCB0Y3BfdjZfcGFyc2VfbWQ1X2tleXMgKHN0cnVjdCBzb2NrICpzaywgY2hhciBfX3VzZXIgKm9wdHZhbCwKKwkJCQkgIGludCBvcHRsZW4pCit7CisJc3RydWN0IHRjcF9tZDVzaWcgY21kOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZjbWQudGNwbV9hZGRyOworCXU4ICpuZXdrZXk7CisKKwlpZiAob3B0bGVuIDwgc2l6ZW9mKGNtZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIG9wdHZhbCwgc2l6ZW9mKGNtZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChzaW42LT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNtZC50Y3BtX2tleWxlbikgeworCQlpZiAoIXRjcF9zayhzayktPm1kNXNpZ19pbmZvKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCWlmIChpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9NQVBQRUQpCisJCQlyZXR1cm4gdGNwX3Y0X21kNV9kb19kZWwoc2ssIHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM10pOworCQlyZXR1cm4gdGNwX3Y2X21kNV9kb19kZWwoc2ssICZzaW42LT5zaW42X2FkZHIpOworCX0KKworCWlmIChjbWQudGNwbV9rZXlsZW4gPiBUQ1BfTUQ1U0lHX01BWEtFWUxFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXRjcF9zayhzayktPm1kNXNpZ19pbmZvKSB7CisJCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCQlzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvICpwOworCisJCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGNwX21kNXNpZ19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXRwLT5tZDVzaWdfaW5mbyA9IHA7CisJfQorCisJbmV3a2V5ID0ga21lbWR1cChjbWQudGNwbV9rZXksIGNtZC50Y3BtX2tleWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdrZXkpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9NQVBQRUQpIHsKKwkJcmV0dXJuIHRjcF92NF9tZDVfZG9fYWRkKHNrLCBzaW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzNdLAorCQkJCQkgbmV3a2V5LCBjbWQudGNwbV9rZXlsZW4pOworCX0KKwlyZXR1cm4gdGNwX3Y2X21kNV9kb19hZGQoc2ssICZzaW42LT5zaW42X2FkZHIsIG5ld2tleSwgY21kLnRjcG1fa2V5bGVuKTsKK30KKworc3RhdGljIGludCB0Y3BfdjZfZG9fY2FsY19tZDVfaGFzaChjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkJICAgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLAorCQkJCSAgIHN0cnVjdCB0Y3BoZHIgKnRoLCBpbnQgcHJvdG9jb2wsCisJCQkJICAgaW50IHRjcGxlbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbNF07CisJX191MTYgZGF0YV9sZW47CisJaW50IGJsb2NrID0gMDsKKwlfX3N1bTE2IGNrc3VtOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKmhwOworCXN0cnVjdCB0Y3A2X3BzZXVkb2hkciAqYnA7CisJc3RydWN0IGhhc2hfZGVzYyAqZGVzYzsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSAwOworCisJaHAgPSB0Y3BfZ2V0X21kNXNpZ19wb29sKCk7CisJaWYgKCFocCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcygpOiBoYXNoIHBvb2wgbm90IGZvdW5kLi4uXG4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGNsZWFyX2hhc2hfbm9wdXQ7CisJfQorCWJwID0gJmhwLT5tZDVfYmxrLmlwNjsKKwlkZXNjID0gJmhwLT5tZDVfZGVzYzsKKworCS8qIDEuIFRDUCBwc2V1ZG8taGVhZGVyIChSRkMyNDYwKSAqLworCWlwdjZfYWRkcl9jb3B5KCZicC0+c2FkZHIsIHNhZGRyKTsKKwlpcHY2X2FkZHJfY29weSgmYnAtPmRhZGRyLCBkYWRkcik7CisJYnAtPmxlbiA9IGh0b25sKHRjcGxlbik7CisJYnAtPnByb3RvY29sID0gaHRvbmwocHJvdG9jb2wpOworCisJc2dfc2V0X2J1Zigmc2dbYmxvY2srK10sIGJwLCBzaXplb2YoKmJwKSk7CisJbmJ5dGVzICs9IHNpemVvZigqYnApOworCisJLyogMi4gVENQIGhlYWRlciwgZXhjbHVkaW5nIG9wdGlvbnMgKi8KKwlja3N1bSA9IHRoLT5jaGVjazsKKwl0aC0+Y2hlY2sgPSAwOworCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCB0aCwgc2l6ZW9mKCp0aCkpOworCW5ieXRlcyArPSBzaXplb2YoKnRoKTsKKworCS8qIDMuIFRDUCBzZWdtZW50IGRhdGEgKGlmIGFueSkgKi8KKwlkYXRhX2xlbiA9IHRjcGxlbiAtICh0aC0+ZG9mZiA8PCAyKTsKKwlpZiAoZGF0YV9sZW4gPiAwKSB7CisJCXU4ICpkYXRhID0gKHU4ICopdGggKyAodGgtPmRvZmYgPDwgMik7CisJCXNnX3NldF9idWYoJnNnW2Jsb2NrKytdLCBkYXRhLCBkYXRhX2xlbik7CisJCW5ieXRlcyArPSBkYXRhX2xlbjsKKwl9CisKKwkvKiA0LiBzaGFyZWQga2V5ICovCisJc2dfc2V0X2J1Zigmc2dbYmxvY2srK10sIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJbmJ5dGVzICs9IGtleS0+a2V5bGVuOworCisJLyogTm93IHN0b3JlIHRoZSBoYXNoIGludG8gdGhlIHBhY2tldCAqLworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcygpOiBoYXNoX2luaXQgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGNsZWFyX2hhc2g7CisJfQorCWVyciA9IGNyeXB0b19oYXNoX3VwZGF0ZShkZXNjLCBzZywgbmJ5dGVzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzKCk6IGhhc2hfdXBkYXRlIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBjbGVhcl9oYXNoOworCX0KKwllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBtZDVfaGFzaCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcygpOiBoYXNoX2ZpbmFsIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBjbGVhcl9oYXNoOworCX0KKworCS8qIFJlc2V0IGhlYWRlciwgYW5kIGZyZWUgdXAgdGhlIGNyeXB0byAqLworCXRjcF9wdXRfbWQ1c2lnX3Bvb2woKTsKKwl0aC0+Y2hlY2sgPSBja3N1bTsKK291dDoKKwlyZXR1cm4gMDsKK2NsZWFyX2hhc2g6CisJdGNwX3B1dF9tZDVzaWdfcG9vbCgpOworY2xlYXJfaGFzaF9ub3B1dDoKKwltZW1zZXQobWQ1X2hhc2gsIDAsIDE2KTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCB0Y3BfdjZfY2FsY19tZDVfaGFzaChjaGFyICptZDVfaGFzaCwgc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXksCisJCQkJc3RydWN0IHNvY2sgKnNrLAorCQkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkJc3RydWN0IHRjcGhkciAqdGgsIGludCBwcm90b2NvbCwKKwkJCQlpbnQgdGNwbGVuKQoreworCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKKworCWlmIChzaykgeworCQlzYWRkciA9ICZpbmV0Nl9zayhzayktPnNhZGRyOworCQlkYWRkciA9ICZpbmV0Nl9zayhzayktPmRhZGRyOworCX0gZWxzZSB7CisJCXNhZGRyID0gJmluZXQ2X3JzayhyZXEpLT5sb2NfYWRkcjsKKwkJZGFkZHIgPSAmaW5ldDZfcnNrKHJlcSktPnJtdF9hZGRyOworCX0KKwlyZXR1cm4gdGNwX3Y2X2RvX2NhbGNfbWQ1X2hhc2gobWQ1X2hhc2gsIGtleSwKKwkJCQkgICAgICAgc2FkZHIsIGRhZGRyLAorCQkJCSAgICAgICB0aCwgcHJvdG9jb2wsIHRjcGxlbik7Cit9CisKK3N0YXRpYyBpbnQgdGNwX3Y2X2luYm91bmRfbWQ1X2hhc2ggKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlfX3U4ICpoYXNoX2xvY2F0aW9uID0gTlVMTDsKKwlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmhhc2hfZXhwZWN0ZWQ7CisJc3RydWN0IGlwdjZoZHIgKmlwNmggPSBza2ItPm5oLmlwdjZoOworCXN0cnVjdCB0Y3BoZHIgKnRoID0gc2tiLT5oLnRoOworCWludCBsZW5ndGggPSAodGgtPmRvZmYgPDwgMikgLSBzaXplb2YgKCp0aCk7CisJaW50IGdlbmhhc2g7CisJdTggKnB0cjsKKwl1OCBuZXdoYXNoWzE2XTsKKworCWhhc2hfZXhwZWN0ZWQgPSB0Y3BfdjZfbWQ1X2RvX2xvb2t1cChzaywgJmlwNmgtPnNhZGRyKTsKKworCS8qIElmIHRoZSBUQ1Agb3B0aW9uIGlzIHRvbyBzaG9ydCwgd2UgY2FuIHNob3J0IGN1dCAqLworCWlmIChsZW5ndGggPCBUQ1BPTEVOX01ENVNJRykKKwkJcmV0dXJuIGhhc2hfZXhwZWN0ZWQgPyAxIDogMDsKKworCS8qIHBhcnNlIG9wdGlvbnMgKi8KKwlwdHIgPSAodTgqKSh0aCArIDEpOworCXdoaWxlIChsZW5ndGggPiAwKSB7CisJCWludCBvcGNvZGUgPSAqcHRyKys7CisJCWludCBvcHNpemU7CisKKwkJc3dpdGNoKG9wY29kZSkgeworCQljYXNlIFRDUE9QVF9FT0w6CisJCQlnb3RvIGRvbmVfb3B0czsKKwkJY2FzZSBUQ1BPUFRfTk9QOgorCQkJbGVuZ3RoLS07CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCW9wc2l6ZSA9ICpwdHIrKzsKKwkJCWlmIChvcHNpemUgPCAyIHx8IG9wc2l6ZSA+IGxlbmd0aCkKKwkJCQlnb3RvIGRvbmVfb3B0czsKKwkJCWlmIChvcGNvZGUgPT0gVENQT1BUX01ENVNJRykgeworCQkJCWhhc2hfbG9jYXRpb24gPSBwdHI7CisJCQkJZ290byBkb25lX29wdHM7CisJCQl9CisJCX0KKwkJcHRyICs9IG9wc2l6ZSAtIDI7CisJCWxlbmd0aCAtPSBvcHNpemU7CisJfQorCitkb25lX29wdHM6CisJLyogZG8gd2UgaGF2ZSBhIGhhc2ggYXMgZXhwZWN0ZWQ/ICovCisJaWYgKCFoYXNoX2V4cGVjdGVkKSB7CisJCWlmICghaGFzaF9sb2NhdGlvbikKKwkJCXJldHVybiAwOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJNRDUgSGFzaCBOT1QgZXhwZWN0ZWQgYnV0IGZvdW5kICIKKwkJCSAgICAgICAiKCIgTklQNl9GTVQgIiwgJXUpLT4iCisJCQkgICAgICAgIigiIE5JUDZfRk1UICIsICV1KVxuIiwKKwkJCSAgICAgICBOSVA2KGlwNmgtPnNhZGRyKSwgbnRvaHModGgtPnNvdXJjZSksCisJCQkgICAgICAgTklQNihpcDZoLT5kYWRkciksIG50b2hzKHRoLT5kZXN0KSk7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKCFoYXNoX2xvY2F0aW9uKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIk1ENSBIYXNoIGV4cGVjdGVkIGJ1dCBOT1QgZm91bmQgIgorCQkJICAgICAgICIoIiBOSVA2X0ZNVCAiLCAldSktPiIKKwkJCSAgICAgICAiKCIgTklQNl9GTVQgIiwgJXUpXG4iLAorCQkJICAgICAgIE5JUDYoaXA2aC0+c2FkZHIpLCBudG9ocyh0aC0+c291cmNlKSwKKwkJCSAgICAgICBOSVA2KGlwNmgtPmRhZGRyKSwgbnRvaHModGgtPmRlc3QpKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBjaGVjayB0aGUgc2lnbmF0dXJlICovCisJZ2VuaGFzaCA9IHRjcF92Nl9kb19jYWxjX21kNV9oYXNoKG5ld2hhc2gsCisJCQkJCSAgaGFzaF9leHBlY3RlZCwKKwkJCQkJICAmaXA2aC0+c2FkZHIsICZpcDZoLT5kYWRkciwKKwkJCQkJICB0aCwgc2stPnNrX3Byb3RvY29sLAorCQkJCQkgIHNrYi0+bGVuKTsKKwlpZiAoZ2VuaGFzaCB8fCBtZW1jbXAoaGFzaF9sb2NhdGlvbiwgbmV3aGFzaCwgMTYpICE9IDApIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiTUQ1IEhhc2ggJXMgZm9yICIKKwkJCSAgICAgICAiKCIgTklQNl9GTVQgIiwgJXUpLT4iCisJCQkgICAgICAgIigiIE5JUDZfRk1UICIsICV1KVxuIiwKKwkJCSAgICAgICBnZW5oYXNoID8gImZhaWxlZCIgOiAibWlzbWF0Y2giLAorCQkJICAgICAgIE5JUDYoaXA2aC0+c2FkZHIpLCBudG9ocyh0aC0+c291cmNlKSwKKwkJCSAgICAgICBOSVA2KGlwNmgtPmRhZGRyKSwgbnRvaHModGgtPmRlc3QpKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIHRjcDZfcmVxdWVzdF9zb2NrX29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5mYW1pbHkJCT0JQUZfSU5FVDYsCiAJLm9ial9zaXplCT0Jc2l6ZW9mKHN0cnVjdCB0Y3A2X3JlcXVlc3Rfc29jayksCiAJLnJ0eF9zeW5fYWNrCT0JdGNwX3Y2X3NlbmRfc3luYWNrLApAQCAtNTM1LDkgKzkyOSwxNiBAQAogCS5zZW5kX3Jlc2V0CT0JdGNwX3Y2X3NlbmRfcmVzZXQKIH07CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworc3RhdGljIHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrX29wcyB0Y3BfcmVxdWVzdF9zb2NrX2lwdjZfb3BzID0geworCS5tZDVfbG9va3VwCT0JdGNwX3Y2X3JlcXNrX21kNV9sb29rdXAsCit9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgdGltZXdhaXRfc29ja19vcHMgdGNwNl90aW1ld2FpdF9zb2NrX29wcyA9IHsKIAkudHdza19vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdGNwNl90aW1ld2FpdF9zb2NrKSwKIAkudHdza191bmlxdWUJPSB0Y3BfdHdza191bmlxdWUsCisJLnR3c2tfZGVzdHJ1Y3Rvcj0gdGNwX3R3c2tfZGVzdHJ1Y3RvciwKIH07CiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9zZW5kX2NoZWNrKHN0cnVjdCBzb2NrICpzaywgaW50IGxlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTU0Nyw3ICs5NDgsNyBAQAogCiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJdGgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmbnAtPnNhZGRyLCAmbnAtPmRhZGRyLCBsZW4sIElQUFJPVE9fVENQLCAgMCk7Ci0JCXNrYi0+Y3N1bSA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKKwkJc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKIAl9IGVsc2UgewogCQl0aC0+Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJm5wLT5zYWRkciwgJm5wLT5kYWRkciwgbGVuLCBJUFBST1RPX1RDUCwgCiAJCQkJCSAgICBjc3VtX3BhcnRpYWwoKGNoYXIgKil0aCwgdGgtPmRvZmY8PDIsIApAQCAtNTY5LDE2ICs5NzAsMjAgQEAKIAl0aC0+Y2hlY2sgPSAwOwogCXRoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZoLT5zYWRkciwgJmlwdjZoLT5kYWRkciwgc2tiLT5sZW4sCiAJCQkJICAgICBJUFBST1RPX1RDUCwgMCk7Ci0Jc2tiLT5jc3VtID0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spOworCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjayk7CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfdjZfc2VuZF9yZXNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfcmVzZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB0Y3BoZHIgKnRoID0gc2tiLT5oLnRoLCAqdDE7IAogCXN0cnVjdCBza19idWZmICpidWZmOwogCXN0cnVjdCBmbG93aSBmbDsKKwlpbnQgdG90X2xlbiA9IHNpemVvZigqdGgpOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJc3RydWN0IHRjcF9tZDVzaWdfa2V5ICprZXk7CisjZW5kaWYKIAogCWlmICh0aC0+cnN0KQogCQlyZXR1cm47CkBAIC01ODYsMjUgKzk5MSwzNSBAQAogCWlmICghaXB2Nl91bmljYXN0X2Rlc3RpbmF0aW9uKHNrYikpCiAJCXJldHVybjsgCiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCWlmIChzaykKKwkJa2V5ID0gdGNwX3Y2X21kNV9kb19sb29rdXAoc2ssICZza2ItPm5oLmlwdjZoLT5kYWRkcik7CisJZWxzZQorCQlrZXkgPSBOVUxMOworCisJaWYgKGtleSkKKwkJdG90X2xlbiArPSBUQ1BPTEVOX01ENVNJR19BTElHTkVEOworI2VuZGlmCisKIAkvKgogCSAqIFdlIG5lZWQgdG8gZ3JhYiBzb21lIG1lbW9yeSwgYW5kIHB1dCB0b2dldGhlciBhbiBSU1QsCiAJICogYW5kIHRoZW4gcHV0IGl0IGludG8gdGhlIHF1ZXVlIHRvIGJlIHNlbnQuCiAJICovCiAKLQlidWZmID0gYWxsb2Nfc2tiKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpLAorCWJ1ZmYgPSBhbGxvY19za2IoTUFYX0hFQURFUiArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgKyB0b3RfbGVuLAogCQkJIEdGUF9BVE9NSUMpOwogCWlmIChidWZmID09IE5VTEwpIAogCSAgCXJldHVybjsKIAotCXNrYl9yZXNlcnZlKGJ1ZmYsIE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsKKwlza2JfcmVzZXJ2ZShidWZmLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSArIHRvdF9sZW4pOwogCi0JdDEgPSAoc3RydWN0IHRjcGhkciAqKSBza2JfcHVzaChidWZmLHNpemVvZihzdHJ1Y3QgdGNwaGRyKSk7CisJdDEgPSAoc3RydWN0IHRjcGhkciAqKSBza2JfcHVzaChidWZmLCB0b3RfbGVuKTsKIAogCS8qIFN3YXAgdGhlIHNlbmQgYW5kIHRoZSByZWNlaXZlLiAqLwogCW1lbXNldCh0MSwgMCwgc2l6ZW9mKCp0MSkpOwogCXQxLT5kZXN0ID0gdGgtPnNvdXJjZTsKIAl0MS0+c291cmNlID0gdGgtPmRlc3Q7Ci0JdDEtPmRvZmYgPSBzaXplb2YoKnQxKS80OworCXQxLT5kb2ZmID0gdG90X2xlbiAvIDQ7CiAJdDEtPnJzdCA9IDE7CiAgIAogCWlmKHRoLT5hY2spIHsKQEAgLTYxNSw2ICsxMDMwLDIyIEBACiAJCQkJICAgICsgc2tiLT5sZW4gLSAodGgtPmRvZmY8PDIpKTsKIAl9CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCWlmIChrZXkpIHsKKwkJX19iZTMyICpvcHQgPSAoX19iZTMyKikodDEgKyAxKTsKKwkJb3B0WzBdID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwKKwkJCSAgICAgICAoVENQT1BUX05PUCA8PCAxNikgfAorCQkJICAgICAgIChUQ1BPUFRfTUQ1U0lHIDw8IDgpIHwKKwkJCSAgICAgICBUQ1BPTEVOX01ENVNJRyk7CisJCXRjcF92Nl9kb19jYWxjX21kNV9oYXNoKChfX3U4Kikmb3B0WzFdLAorCQkJCQlrZXksCisJCQkJCSZza2ItPm5oLmlwdjZoLT5kYWRkciwKKwkJCQkJJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJCQl0MSwgSVBQUk9UT19UQ1AsCisJCQkJCXRvdF9sZW4pOworCX0KKyNlbmRpZgorCiAJYnVmZi0+Y3N1bSA9IGNzdW1fcGFydGlhbCgoY2hhciAqKXQxLCBzaXplb2YoKnQxKSwgMCk7CiAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKQEAgLTY0NSwxNSArMTA3NiwzNyBAQAogCWtmcmVlX3NrYihidWZmKTsKIH0KIAotc3RhdGljIHZvaWQgdGNwX3Y2X3NlbmRfYWNrKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXEsIHUzMiBhY2ssIHUzMiB3aW4sIHUzMiB0cykKK3N0YXRpYyB2b2lkIHRjcF92Nl9zZW5kX2FjayhzdHJ1Y3QgdGNwX3RpbWV3YWl0X3NvY2sgKnR3LAorCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzZXEsIHUzMiBhY2ssIHUzMiB3aW4sIHUzMiB0cykKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0aCA9IHNrYi0+aC50aCwgKnQxOwogCXN0cnVjdCBza19idWZmICpidWZmOwogCXN0cnVjdCBmbG93aSBmbDsKIAlpbnQgdG90X2xlbiA9IHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKwlfX2JlMzIgKnRvcHQ7CisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleTsKKwlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgdHdfa2V5OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCWlmICghdHcgJiYgc2tiLT5zaykgeworCQlrZXkgPSB0Y3BfdjZfbWQ1X2RvX2xvb2t1cChza2ItPnNrLCAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIpOworCX0gZWxzZSBpZiAodHcgJiYgdHctPnR3X21kNV9rZXlsZW4pIHsKKwkJdHdfa2V5LmtleSA9IHR3LT50d19tZDVfa2V5OworCQl0d19rZXkua2V5bGVuID0gdHctPnR3X21kNV9rZXlsZW47CisJCWtleSA9ICZ0d19rZXk7CisJfSBlbHNlIHsKKwkJa2V5ID0gTlVMTDsKKwl9CisjZW5kaWYKIAogCWlmICh0cykKIAkJdG90X2xlbiArPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJaWYgKGtleSkKKwkJdG90X2xlbiArPSBUQ1BPTEVOX01ENVNJR19BTElHTkVEOworI2VuZGlmCiAKIAlidWZmID0gYWxsb2Nfc2tiKE1BWF9IRUFERVIgKyBzaXplb2Yoc3RydWN0IGlwdjZoZHIpICsgdG90X2xlbiwKIAkJCSBHRlBfQVRPTUlDKTsKQEAgLTY3MywxNSArMTEyNiwyOSBAQAogCXQxLT5hY2tfc2VxID0gaHRvbmwoYWNrKTsKIAl0MS0+YWNrID0gMTsKIAl0MS0+d2luZG93ID0gaHRvbnMod2luKTsKKworCXRvcHQgPSAoX19iZTMyICopKHQxICsgMSk7CiAJCiAJaWYgKHRzKSB7Ci0JCXUzMiAqcHRyID0gKHUzMiopKHQxICsgMSk7Ci0JCSpwdHIrKyA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfTk9QIDw8IDE2KSB8Ci0JCQkgICAgICAgKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCk7Ci0JCSpwdHIrKyA9IGh0b25sKHRjcF90aW1lX3N0YW1wKTsKLQkJKnB0ciA9IGh0b25sKHRzKTsKKwkJKnRvcHQrKyA9IGh0b25sKChUQ1BPUFRfTk9QIDw8IDI0KSB8IChUQ1BPUFRfTk9QIDw8IDE2KSB8CisJCQkJKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCk7CisJCSp0b3B0KysgPSBodG9ubCh0Y3BfdGltZV9zdGFtcCk7CisJCSp0b3B0ID0gaHRvbmwodHMpOwogCX0KIAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJaWYgKGtleSkgeworCQkqdG9wdCsrID0gaHRvbmwoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9OT1AgPDwgMTYpIHwKKwkJCQkoVENQT1BUX01ENVNJRyA8PCA4KSB8IFRDUE9MRU5fTUQ1U0lHKTsKKwkJdGNwX3Y2X2RvX2NhbGNfbWQ1X2hhc2goKF9fdTggKil0b3B0LAorCQkJCQlrZXksCisJCQkJCSZza2ItPm5oLmlwdjZoLT5kYWRkciwKKwkJCQkJJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJCQl0MSwgSVBQUk9UT19UQ1AsCisJCQkJCXRvdF9sZW4pOworCX0KKyNlbmRpZgorCiAJYnVmZi0+Y3N1bSA9IGNzdW1fcGFydGlhbCgoY2hhciAqKXQxLCB0b3RfbGVuLCAwKTsKIAogCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwpAQCAtNzEyLDkgKzExNzksOSBAQAogc3RhdGljIHZvaWQgdGNwX3Y2X3RpbWV3YWl0X2FjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwotCWNvbnN0IHN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAqdGNwdHcgPSB0Y3BfdHdzayhzayk7CisJc3RydWN0IHRjcF90aW1ld2FpdF9zb2NrICp0Y3B0dyA9IHRjcF90d3NrKHNrKTsKIAotCXRjcF92Nl9zZW5kX2Fjayhza2IsIHRjcHR3LT50d19zbmRfbnh0LCB0Y3B0dy0+dHdfcmN2X254dCwKKwl0Y3BfdjZfc2VuZF9hY2sodGNwdHcsIHNrYiwgdGNwdHctPnR3X3NuZF9ueHQsIHRjcHR3LT50d19yY3Zfbnh0LAogCQkJdGNwdHctPnR3X3Jjdl93bmQgPj4gdHctPnR3X3Jjdl93c2NhbGUsCiAJCQl0Y3B0dy0+dHdfdHNfcmVjZW50KTsKIApAQCAtNzIzLDcgKzExOTAsNyBAQAogCiBzdGF0aWMgdm9pZCB0Y3BfdjZfcmVxc2tfc2VuZF9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQogewotCXRjcF92Nl9zZW5kX2Fjayhza2IsIHRjcF9yc2socmVxKS0+c250X2lzbiArIDEsIHRjcF9yc2socmVxKS0+cmN2X2lzbiArIDEsIHJlcS0+cmN2X3duZCwgcmVxLT50c19yZWNlbnQpOworCXRjcF92Nl9zZW5kX2FjayhOVUxMLCBza2IsIHRjcF9yc2socmVxKS0+c250X2lzbiArIDEsIHRjcF9yc2socmVxKS0+cmN2X2lzbiArIDEsIHJlcS0+cmN2X3duZCwgcmVxLT50c19yZWNlbnQpOwogfQogCiAKQEAgLTc5NCw2ICsxMjYxLDEwIEBACiAJaWYgKHJlcSA9PSBOVUxMKQogCQlnb3RvIGRyb3A7CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXRjcF9yc2socmVxKS0+YWZfc3BlY2lmaWMgPSAmdGNwX3JlcXVlc3Rfc29ja19pcHY2X29wczsKKyNlbmRpZgorCiAJdGNwX2NsZWFyX29wdGlvbnMoJnRtcF9vcHQpOwogCXRtcF9vcHQubXNzX2NsYW1wID0gSVBWNl9NSU5fTVRVIC0gc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpIC0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAl0bXBfb3B0LnVzZXJfbXNzID0gdHAtPnJ4X29wdC51c2VyX21zczsKQEAgLTgyMiw3ICsxMjkzLDcgQEAKIAkJdHJlcS0+aWlmID0gaW5ldDZfaWlmKHNrYik7CiAKIAlpZiAoaXNuID09IDApIAotCQlpc24gPSB0Y3BfdjZfaW5pdF9zZXF1ZW5jZShzayxza2IpOworCQlpc24gPSB0Y3BfdjZfaW5pdF9zZXF1ZW5jZShza2IpOwogCiAJdGNwX3JzayhyZXEpLT5zbnRfaXNuID0gaXNuOwogCkBAIC04NTIsNiArMTMyMyw5IEBACiAJc3RydWN0IHRjcF9zb2NrICpuZXd0cDsKIAlzdHJ1Y3Qgc29jayAqbmV3c2s7CiAJc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQ7CisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKmtleTsKKyNlbmRpZgogCiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CiAJCS8qCkBAIC04ODIsNiArMTM1NiwxMCBAQAogCiAJCWluZXRfY3NrKG5ld3NrKS0+aWNza19hZl9vcHMgPSAmaXB2Nl9tYXBwZWQ7CiAJCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IHRjcF92NF9kb19yY3Y7CisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKKwkJbmV3dHAtPmFmX3NwZWNpZmljID0gJnRjcF9zb2NrX2lwdjZfbWFwcGVkX3NwZWNpZmljOworI2VuZGlmCisKIAkJbmV3bnAtPnBrdG9wdGlvbnMgID0gTlVMTDsKIAkJbmV3bnAtPm9wdAkgICA9IE5VTEw7CiAJCW5ld25wLT5tY2FzdF9vaWYgICA9IGluZXQ2X2lpZihza2IpOwpAQCAtMTAxNiw2ICsxNDk0LDIxIEBACiAKIAluZXdpbmV0LT5kYWRkciA9IG5ld2luZXQtPnNhZGRyID0gbmV3aW5ldC0+cmN2X3NhZGRyID0gTE9PUEJBQ0s0X0lQVjY7CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCS8qIENvcHkgb3ZlciB0aGUgTUQ1IGtleSBmcm9tIHRoZSBvcmlnaW5hbCBzb2NrZXQgKi8KKwlpZiAoKGtleSA9IHRjcF92Nl9tZDVfZG9fbG9va3VwKHNrLCAmbmV3bnAtPmRhZGRyKSkgIT0gTlVMTCkgeworCQkvKiBXZSdyZSB1c2luZyBvbmUsIHNvIGNyZWF0ZSBhIG1hdGNoaW5nIGtleQorCQkgKiBvbiB0aGUgbmV3c2sgc3RydWN0dXJlLiBJZiB3ZSBmYWlsIHRvIGdldAorCQkgKiBtZW1vcnksIHRoZW4gd2UgZW5kIHVwIG5vdCBjb3B5aW5nIHRoZSBrZXkKKwkJICogYWNyb3NzLiBTaHVja3MuCisJCSAqLworCQljaGFyICpuZXdrZXkgPSBrbWVtZHVwKGtleS0+a2V5LCBrZXktPmtleWxlbiwgR0ZQX0FUT01JQyk7CisJCWlmIChuZXdrZXkgIT0gTlVMTCkKKwkJCXRjcF92Nl9tZDVfZG9fYWRkKG5ld3NrLCAmaW5ldDZfc2soc2spLT5kYWRkciwKKwkJCQkJICBuZXdrZXksIGtleS0+a2V5bGVuKTsKKwl9CisjZW5kaWYKKwogCV9faW5ldDZfaGFzaCgmdGNwX2hhc2hpbmZvLCBuZXdzayk7CiAJaW5ldF9pbmhlcml0X3BvcnQoJnRjcF9oYXNoaW5mbywgc2ssIG5ld3NrKTsKIApAQCAtMTAzMSw3ICsxNTI0LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCB0Y3BfdjZfY2hlY2tzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIF9fc3VtMTYgdGNwX3Y2X2NoZWNrc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUpIHsKIAkJaWYgKCF0Y3BfdjZfY2hlY2soc2tiLT5oLnRoLHNrYi0+bGVuLCZza2ItPm5oLmlwdjZoLT5zYWRkciwKQEAgLTEwNDEsOCArMTUzNCw4IEBACiAJCX0KIAl9CiAKLQlza2ItPmNzdW0gPSB+dGNwX3Y2X2NoZWNrKHNrYi0+aC50aCxza2ItPmxlbiwmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsIDApOworCXNrYi0+Y3N1bSA9IH5jc3VtX3VuZm9sZCh0Y3BfdjZfY2hlY2soc2tiLT5oLnRoLHNrYi0+bGVuLCZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJCQkgICZza2ItPm5oLmlwdjZoLT5kYWRkciwgMCkpOwogCiAJaWYgKHNrYi0+bGVuIDw9IDc2KSB7CiAJCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwpAQCAtMTA3NSw2ICsxNTY4LDExIEBACiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQogCQlyZXR1cm4gdGNwX3Y0X2RvX3Jjdihzaywgc2tiKTsKIAorI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJaWYgKHRjcF92Nl9pbmJvdW5kX21kNV9oYXNoIChzaywgc2tiKSkKKwkJZ290byBkaXNjYXJkOworI2VuZGlmCisKIAlpZiAoc2tfZmlsdGVyKHNrLCBza2IpKQogCQlnb3RvIGRpc2NhcmQ7CiAKQEAgLTExNDAsNyArMTYzOCw3IEBACiAJcmV0dXJuIDA7CiAKIHJlc2V0OgotCXRjcF92Nl9zZW5kX3Jlc2V0KHNrYik7CisJdGNwX3Y2X3NlbmRfcmVzZXQoc2ssIHNrYik7CiBkaXNjYXJkOgogCWlmIChvcHRfc2tiKQogCQlfX2tmcmVlX3NrYihvcHRfc2tiKTsKQEAgLTEyNjUsNyArMTc2Myw3IEBACiBiYWRfcGFja2V0OgogCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfSU5FUlJTKTsKIAl9IGVsc2UgewotCQl0Y3BfdjZfc2VuZF9yZXNldChza2IpOworCQl0Y3BfdjZfc2VuZF9yZXNldChOVUxMLCBza2IpOwogCX0KIAogZGlzY2FyZF9pdDoKQEAgLTEzNDQsNiArMTg0MiwxNSBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKK3N0YXRpYyBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfc3BlY2lmaWMgPSB7CisJLm1kNV9sb29rdXAJPQl0Y3BfdjZfbWQ1X2xvb2t1cCwKKwkuY2FsY19tZDVfaGFzaAk9CXRjcF92Nl9jYWxjX21kNV9oYXNoLAorCS5tZDVfYWRkCT0JdGNwX3Y2X21kNV9hZGRfZnVuYywKKwkubWQ1X3BhcnNlCT0JdGNwX3Y2X3BhcnNlX21kNV9rZXlzLAorfTsKKyNlbmRpZgorCiAvKgogICoJVENQIG92ZXIgSVB2NCB2aWEgSU5FVDYgQVBJCiAgKi8KQEAgLTEzNjYsNiArMTg3MywxNSBAQAogI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKK3N0YXRpYyBzdHJ1Y3QgdGNwX3NvY2tfYWZfb3BzIHRjcF9zb2NrX2lwdjZfbWFwcGVkX3NwZWNpZmljID0geworCS5tZDVfbG9va3VwCT0JdGNwX3Y0X21kNV9sb29rdXAsCisJLmNhbGNfbWQ1X2hhc2gJPQl0Y3BfdjRfY2FsY19tZDVfaGFzaCwKKwkubWQ1X2FkZAk9CXRjcF92Nl9tZDVfYWRkX2Z1bmMsCisJLm1kNV9wYXJzZQk9CXRjcF92Nl9wYXJzZV9tZDVfa2V5cywKK307CisjZW5kaWYKKwogLyogTk9URTogQSBsb3Qgb2YgdGhpbmdzIHNldCB0byB6ZXJvIGV4cGxpY2l0bHkgYnkgY2FsbCB0bwogICogICAgICAgc2tfYWxsb2MoKSBzbyBuZWVkIG5vdCBiZSBkb25lIGhlcmUuCiAgKi8KQEAgLTE0MDUsNiArMTkyMSwxMCBAQAogCXNrLT5za193cml0ZV9zcGFjZSA9IHNrX3N0cmVhbV93cml0ZV9zcGFjZTsKIAlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1VTRV9XUklURV9RVUVVRSk7CiAKKyNpZmRlZiBDT05GSUdfVENQX01ENVNJRworCXRwLT5hZl9zcGVjaWZpYyA9ICZ0Y3Bfc29ja19pcHY2X3NwZWNpZmljOworI2VuZGlmCisKIAlzay0+c2tfc25kYnVmID0gc3lzY3RsX3RjcF93bWVtWzFdOwogCXNrLT5za19yY3ZidWYgPSBzeXNjdGxfdGNwX3JtZW1bMV07CiAKQEAgLTE0MTUsNiArMTkzNSwxMSBAQAogCiBzdGF0aWMgaW50IHRjcF92Nl9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKQogeworI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCisJLyogQ2xlYW4gdXAgdGhlIE1ENSBrZXkgbGlzdCAqLworCWlmICh0Y3Bfc2soc2spLT5tZDVzaWdfaW5mbykKKwkJdGNwX3Y2X2NsZWFyX21kNV9saXN0KHNrKTsKKyNlbmRpZgogCXRjcF92NF9kZXN0cm95X3NvY2soc2spOwogCXJldHVybiBpbmV0Nl9kZXN0cm95X3NvY2soc2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdHVubmVsNi5jIGIvbmV0L2lwdjYvdHVubmVsNi5jCmluZGV4IDBlZjlhMzUuLjkxOGQwN2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3R1bm5lbDYuYworKysgYi9uZXQvaXB2Ni90dW5uZWw2LmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB0dW5uZWw2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKLQkJCWludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX191MzIgaW5mbykKKwkJCWludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCiB7CiAJc3RydWN0IHhmcm02X3R1bm5lbCAqaGFuZGxlcjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCBjODNmMjNlLi5mNTJhNWMzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMzgsMjYgKzM4LDE4IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L3NubXAuaD4KLQotI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L25kaXNjLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3RyYW5zcF92Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfcm91dGUuaD4KLSNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KLSNpbmNsdWRlIDxuZXQvaXAuaD4KLSNpbmNsdWRlIDxuZXQvdWRwLmg+CiAjaW5jbHVkZSA8bmV0L3Jhdy5oPgotI2luY2x1ZGUgPG5ldC9pbmV0X2NvbW1vbi5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgInVkcF9pbXBsLmgiCiAKIERFRklORV9TTk1QX1NUQVQoc3RydWN0IHVkcF9taWIsIHVkcF9zdGF0c19pbjYpIF9fcmVhZF9tb3N0bHk7CiAKQEAgLTY2LDIzICs1OCw5IEBACiAJcmV0dXJuIHVkcF9nZXRfcG9ydChzaywgc251bSwgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwpOwogfQogCi1zdGF0aWMgdm9pZCB1ZHBfdjZfaGFzaChzdHJ1Y3Qgc29jayAqc2spCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVkcF92Nl91bmhhc2goc3RydWN0IHNvY2sgKnNrKQotewotIAl3cml0ZV9sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKLQlpZiAoc2tfZGVsX25vZGVfaW5pdChzaykpIHsKLQkJaW5ldF9zayhzayktPm51bSA9IDA7Ci0JCXNvY2tfcHJvdF9kZWNfdXNlKHNrLT5za19wcm90KTsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzb2NrICp1ZHBfdjZfbG9va3VwKHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHUxNiBzcG9ydCwKLQkJCQkgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIHUxNiBkcG9ydCwgaW50IGRpZikKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqX191ZHA2X2xpYl9sb29rdXAoc3RydWN0IGluNl9hZGRyICpzYWRkciwgX19iZTE2IHNwb3J0LAorCQkJCSAgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsIF9fYmUxNiBkcG9ydCwKKwkJCQkgICAgICBpbnQgZGlmLCBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHB0YWJsZVtdKQogewogCXN0cnVjdCBzb2NrICpzaywgKnJlc3VsdCA9IE5VTEw7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CkBAIC05MCw3ICs2OCw3IEBACiAJaW50IGJhZG5lc3MgPSAtMTsKIAogIAlyZWFkX2xvY2soJnVkcF9oYXNoX2xvY2spOwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmdWRwX2hhc2hbaG51bSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pIHsKKwlza19mb3JfZWFjaChzaywgbm9kZSwgJnVkcHRhYmxlW2hudW0gJiAoVURQX0hUQUJMRV9TSVpFIC0gMSldKSB7CiAJCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAogCQlpZiAoaW5ldC0+bnVtID09IGhudW0gJiYgc2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUNikgewpAQCAtMTMyLDIwICsxMTAsMTEgQEAKIH0KIAogLyoKLSAqCi0gKi8KLQotc3RhdGljIHZvaWQgdWRwdjZfY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCi17Ci0Jc2tfY29tbW9uX3JlbGVhc2Uoc2spOwotfQotCi0vKgogICogCVRoaXMgc2hvdWxkIGJlIGVhc3ksIGlmIHRoZXJlIGlzIHNvbWV0aGluZyB0aGVyZSB3ZQogICogCXJldHVybiBpdCwgb3RoZXJ3aXNlIHdlIGJsb2NrLgogICovCiAKLXN0YXRpYyBpbnQgdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgCitpbnQgdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKIAkJICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCSAgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKIHsKQEAgLTE1Myw3ICsxMjIsNyBAQAogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKICAgCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IGNvcGllZDsKLSAgCWludCBlcnI7CisJaW50IGVyciwgY29weV9vbmx5LCBpc191ZHBsaXRlID0gSVNfVURQTElURShzayk7CiAKICAgCWlmIChhZGRyX2xlbikKICAgCQkqYWRkcl9sZW49c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwpAQCAtMTcyLDE1ICsxNDEsMjEgQEAKICAgCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CiAgIAl9CiAKLQlpZiAoc2tiLT5pcF9zdW1tZWQ9PUNIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBtc2ctPm1zZ19pb3YsCi0JCQkJCSAgICAgIGNvcGllZCk7Ci0JfSBlbHNlIGlmIChtc2ctPm1zZ19mbGFncyZNU0dfVFJVTkMpIHsKLQkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCisJLyoKKwkgKiAJRGVjaWRlIHdoZXRoZXIgdG8gY2hlY2tzdW0gYW5kL29yIGNvcHkgZGF0YS4KKwkgKi8KKwljb3B5X29ubHkgPSAoc2tiLT5pcF9zdW1tZWQ9PUNIRUNLU1VNX1VOTkVDRVNTQVJZKTsKKworCWlmIChpc191ZHBsaXRlICB8fCAgKCFjb3B5X29ubHkgICYmICBtc2ctPm1zZ19mbGFncyZNU0dfVFJVTkMpKSB7CisJCWlmIChfX3VkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gY3N1bV9jb3B5X2VycjsKLQkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksIG1zZy0+bXNnX2lvdiwKLQkJCQkJICAgICAgY29waWVkKTsKLQl9IGVsc2UgeworCQljb3B5X29ubHkgPSAxOworCX0KKworCWlmIChjb3B5X29ubHkpCisJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAorCQkJCQkgICAgICBtc2ctPm1zZ19pb3YsIGNvcGllZCAgICAgICApOworCWVsc2UgewogCQllcnIgPSBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgbXNnLT5tc2dfaW92KTsKIAkJaWYgKGVyciA9PSAtRUlOVkFMKQogCQkJZ290byBjc3VtX2NvcHlfZXJyOwpAQCAtMjMxLDE0ICsyMDYsMTUgQEAKIAlza2Jfa2lsbF9kYXRhZ3JhbShzaywgc2tiLCBmbGFncyk7CiAKIAlpZiAoZmxhZ3MgJiBNU0dfRE9OVFdBSVQpIHsKLQkJVURQNl9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX0lORVJST1JTKTsKKwkJVURQNl9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX0lORVJST1JTLCBpc191ZHBsaXRlKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCWdvdG8gdHJ5X2FnYWluOwogfQogCi1zdGF0aWMgdm9pZCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCi0JICAgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX191MzIgaW5mbykKK3ZvaWQgX191ZHA2X2xpYl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCisJCSAgICBpbnQgdHlwZSwgaW50IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvLAorCQkgICAgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSAgICAgICAgICAgICAgICAgICAgKQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucDsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CkBAIC0yNDgsOCArMjI0LDggQEAKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJaW50IGVycjsKIAotCXNrID0gdWRwX3Y2X2xvb2t1cChkYWRkciwgdWgtPmRlc3QsIHNhZGRyLCB1aC0+c291cmNlLCBpbmV0Nl9paWYoc2tiKSk7Ci0gICAKKwlzayA9IF9fdWRwNl9saWJfbG9va3VwKGRhZGRyLCB1aC0+ZGVzdCwKKwkJCSAgICAgICBzYWRkciwgdWgtPnNvdXJjZSwgaW5ldDZfaWlmKHNrYiksIHVkcHRhYmxlKTsKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0yNzAsMzYgKzI0Niw2MCBAQAogCXNvY2tfcHV0KHNrKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIF9faW5saW5lX18gdm9pZCB1ZHB2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsIGludCB0eXBlLAorCQkJCSBpbnQgY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8gICAgICkKIHsKKwlyZXR1cm4gX191ZHA2X2xpYl9lcnIoc2tiLCBvcHQsIHR5cGUsIGNvZGUsIG9mZnNldCwgaW5mbywgdWRwX2hhc2gpOworfQorCitpbnQgdWRwdjZfcXVldWVfcmN2X3NrYihzdHJ1Y3Qgc29jayAqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOwogCWludCByYzsKIAotCWlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIC0xOworCWlmICgheGZybTZfcG9saWN5X2NoZWNrKHNrLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKKwkJZ290byBkcm9wOworCisJLyoKKwkgKiBVRFAtTGl0ZSBzcGVjaWZpYyB0ZXN0cywgaWdub3JlZCBvbiBVRFAgc29ja2V0cyAoc2VlIG5ldC9pcHY0L3VkcC5jKS4KKwkgKi8KKwlpZiAoKHVwLT5wY2ZsYWcgJiBVRFBMSVRFX1JFQ1ZfQ0MpICAmJiAgVURQX1NLQl9DQihza2IpLT5wYXJ0aWFsX2NvdikgeworCisJCWlmICh1cC0+cGNybGVuID09IDApIHsgICAgICAgICAgLyogZnVsbCBjb3ZlcmFnZSB3YXMgc2V0ICAqLworCQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJVRFBMSVRFNjogcGFydGlhbCBjb3ZlcmFnZSIKKwkJCQkiICVkIHdoaWxlIGZ1bGwgY292ZXJhZ2UgJWQgcmVxdWVzdGVkXG4iLAorCQkJCVVEUF9TS0JfQ0Ioc2tiKS0+Y3Njb3YsIHNrYi0+bGVuKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQorCQlpZiAoVURQX1NLQl9DQihza2IpLT5jc2NvdiAgPCAgdXAtPnBjcmxlbikgeworCQkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJVRFBMSVRFNjogY292ZXJhZ2UgJWQgIgorCQkJCQkJICAgICJ0b28gc21hbGwsIG5lZWQgbWluICVkXG4iLAorCQkJCSAgICAgICBVRFBfU0tCX0NCKHNrYiktPmNzY292LCB1cC0+cGNybGVuKTsKKwkJCWdvdG8gZHJvcDsKKwkJfQogCX0KIAotCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewotCQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTKTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQorCQlnb3RvIGRyb3A7CiAKIAlpZiAoKHJjID0gc29ja19xdWV1ZV9yY3Zfc2tiKHNrLHNrYikpIDwgMCkgewogCQkvKiBOb3RlIHRoYXQgYW4gRU5PTUVNIGVycm9yIGlzIGNoYXJnZWQgdHdpY2UgKi8KIAkJaWYgKHJjID09IC1FTk9NRU0pCi0JCQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX1JDVkJVRkVSUk9SUyk7Ci0JCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX1JDVkJVRkVSUk9SUywgdXAtPnBjZmxhZyk7CisJCWdvdG8gZHJvcDsKIAl9Ci0JVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkRBVEFHUkFNUyk7CisJVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkRBVEFHUkFNUywgdXAtPnBjZmxhZyk7CiAJcmV0dXJuIDA7Citkcm9wOgorCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMsIHVwLT5wY2ZsYWcpOworCWtmcmVlX3NrYihza2IpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NrICp1ZHBfdjZfbWNhc3RfbmV4dChzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJICAgICAgdTE2IGxvY19wb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKmxvY19hZGRyLAotCQkJCSAgICAgIHUxNiBybXRfcG9ydCwgc3RydWN0IGluNl9hZGRyICpybXRfYWRkciwKKwkJCQkgICAgICBfX2JlMTYgbG9jX3BvcnQsIHN0cnVjdCBpbjZfYWRkciAqbG9jX2FkZHIsCisJCQkJICAgICAgX19iZTE2IHJtdF9wb3J0LCBzdHJ1Y3QgaW42X2FkZHIgKnJtdF9hZGRyLAogCQkJCSAgICAgIGludCBkaWYpCiB7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CkBAIC0zMzgsMTUgKzMzOCwxNSBAQAogICogTm90ZTogY2FsbGVkIG9ubHkgZnJvbSB0aGUgQkggaGFuZGxlciBjb250ZXh0LAogICogc28gd2UgZG9uJ3QgbmVlZCB0byBsb2NrIHRoZSBoYXNoZXMuCiAgKi8KLXN0YXRpYyB2b2lkIHVkcHY2X21jYXN0X2RlbGl2ZXIoc3RydWN0IHVkcGhkciAqdWgsCi0JCQkJc3RydWN0IGluNl9hZGRyICpzYWRkciwgc3RydWN0IGluNl9hZGRyICpkYWRkciwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGluNl9hZGRyICpzYWRkciwKKwkJICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBzdHJ1Y3QgaGxpc3RfaGVhZCB1ZHB0YWJsZVtdKQogewogCXN0cnVjdCBzb2NrICpzaywgKnNrMjsKKwljb25zdCBzdHJ1Y3QgdWRwaGRyICp1aCA9IHNrYi0+aC51aDsKIAlpbnQgZGlmOwogCiAJcmVhZF9sb2NrKCZ1ZHBfaGFzaF9sb2NrKTsKLQlzayA9IHNrX2hlYWQoJnVkcF9oYXNoW250b2hzKHVoLT5kZXN0KSAmIChVRFBfSFRBQkxFX1NJWkUgLSAxKV0pOworCXNrID0gc2tfaGVhZCgmdWRwdGFibGVbbnRvaHModWgtPmRlc3QpICYgKFVEUF9IVEFCTEVfU0laRSAtIDEpXSk7CiAJZGlmID0gaW5ldDZfaWlmKHNrYik7CiAJc2sgPSB1ZHBfdjZfbWNhc3RfbmV4dChzaywgdWgtPmRlc3QsIGRhZGRyLCB1aC0+c291cmNlLCBzYWRkciwgZGlmKTsKIAlpZiAoIXNrKSB7CkBAIC0zNjQsOSArMzY0LDM1IEBACiAJdWRwdjZfcXVldWVfcmN2X3NrYihzaywgc2tiKTsKIG91dDoKIAlyZWFkX3VubG9jaygmdWRwX2hhc2hfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICoqcHNrYikKK3N0YXRpYyBpbmxpbmUgaW50IHVkcDZfY3N1bV9pbml0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB1ZHBoZHIgKnVoKQorCit7CisJaWYgKHVoLT5jaGVjayA9PSAwKSB7CisJCS8qIFJGQyAyNDYwIHNlY3Rpb24gOC4xIHNheXMgdGhhdCB3ZSBTSE9VTEQgbG9nCisJCSAgIHRoaXMgZXJyb3IuIFdlbGwsIGl0IGlzIHJlYXNvbmFibGUuCisJCSAqLworCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIklQdjY6IHVkcCBjaGVja3N1bSBpcyAwXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSAmJgorCSAgICAhY3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAorCQkgICAgCSAgICAgc2tiLT5sZW4sIElQUFJPVE9fVURQLCBza2ItPmNzdW0gICAgICAgICAgICAgKSkKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKKwkJc2tiLT5jc3VtID0gfmNzdW1fdW5mb2xkKGNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJCQkJICZza2ItPm5oLmlwdjZoLT5kYWRkciwKKwkJCQkJCQkgc2tiLT5sZW4sIElQUFJPVE9fVURQLAorCQkJCQkJCSAwKSk7CisKKwlyZXR1cm4gKFVEUF9TS0JfQ0Ioc2tiKS0+cGFydGlhbF9jb3YgPSAwKTsKK30KKworaW50IF9fdWRwNl9saWJfcmN2KHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IGhsaXN0X2hlYWQgdWRwdGFibGVbXSwKKwkJICAgaW50IGlzX3VkcGxpdGUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpwc2tiOwogCXN0cnVjdCBzb2NrICpzazsKQEAgLTM4Myw0NCArNDA5LDM5IEBACiAJdWggPSBza2ItPmgudWg7CiAKIAl1bGVuID0gbnRvaHModWgtPmxlbik7Ci0KLQkvKiBDaGVjayBmb3IganVtYm8gcGF5bG9hZCAqLwotCWlmICh1bGVuID09IDApCi0JCXVsZW4gPSBza2ItPmxlbjsKLQotCWlmICh1bGVuID4gc2tiLT5sZW4gfHwgdWxlbiA8IHNpemVvZigqdWgpKQorCWlmICh1bGVuID4gc2tiLT5sZW4pCiAJCWdvdG8gc2hvcnRfcGFja2V0OwogCi0JaWYgKHVoLT5jaGVjayA9PSAwKSB7Ci0JCS8qIFJGQyAyNDYwIHNlY3Rpb24gOC4xIHNheXMgdGhhdCB3ZSBTSE9VTEQgbG9nCi0JCSAgIHRoaXMgZXJyb3IuIFdlbGwsIGl0IGlzIHJlYXNvbmFibGUuCi0JCSAqLwotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0lORk8gIklQdjY6IHVkcCBjaGVja3N1bSBpcyAwXG4iKTsKLQkJZ290byBkaXNjYXJkOwotCX0KKwlpZighIGlzX3VkcGxpdGUgKSB7CQkvKiBVRFAgdmFsaWRhdGVzIHVsZW4uICovCiAKLQlpZiAodWxlbiA8IHNrYi0+bGVuKSB7Ci0JCWlmIChwc2tiX3RyaW1fcmNzdW0oc2tiLCB1bGVuKSkKKwkJLyogQ2hlY2sgZm9yIGp1bWJvIHBheWxvYWQgKi8KKwkJaWYgKHVsZW4gPT0gMCkKKwkJCXVsZW4gPSBza2ItPmxlbjsKKworCQlpZiAodWxlbiA8IHNpemVvZigqdWgpKQorCQkJZ290byBzaG9ydF9wYWNrZXQ7CisKKwkJaWYgKHVsZW4gPCBza2ItPmxlbikgeworCQkJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIHVsZW4pKQorCQkJCWdvdG8gc2hvcnRfcGFja2V0OworCQkJc2FkZHIgPSAmc2tiLT5uaC5pcHY2aC0+c2FkZHI7CisJCQlkYWRkciA9ICZza2ItPm5oLmlwdjZoLT5kYWRkcjsKKwkJCXVoID0gc2tiLT5oLnVoOworCQl9CisKKwkJaWYgKHVkcDZfY3N1bV9pbml0KHNrYiwgdWgpKQogCQkJZ290byBkaXNjYXJkOwotCQlzYWRkciA9ICZza2ItPm5oLmlwdjZoLT5zYWRkcjsKLQkJZGFkZHIgPSAmc2tiLT5uaC5pcHY2aC0+ZGFkZHI7Ci0JCXVoID0gc2tiLT5oLnVoOworCisJfSBlbHNlIAl7CQkJLyogVURQLUxpdGUgdmFsaWRhdGVzIGNzY292LiAqLworCQlpZiAodWRwbGl0ZTZfY3N1bV9pbml0KHNrYiwgdWgpKQorCQkJZ290byBkaXNjYXJkOwogCX0KIAotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSAmJgotCSAgICAhY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIHNrYi0+Y3N1bSkpCi0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0KLQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpCi0JCXNrYi0+Y3N1bSA9IH5jc3VtX2lwdjZfbWFnaWMoc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgMCk7Ci0KIAkvKiAKIAkgKglNdWx0aWNhc3QgcmVjZWl2ZSBjb2RlIAogCSAqLwotCWlmIChpcHY2X2FkZHJfaXNfbXVsdGljYXN0KGRhZGRyKSkgewotCQl1ZHB2Nl9tY2FzdF9kZWxpdmVyKHVoLCBzYWRkciwgZGFkZHIsIHNrYik7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoaXB2Nl9hZGRyX2lzX211bHRpY2FzdChkYWRkcikpCisJCXJldHVybiBfX3VkcDZfbGliX21jYXN0X2RlbGl2ZXIoc2tiLCBzYWRkciwgZGFkZHIsIHVkcHRhYmxlKTsKIAogCS8qIFVuaWNhc3QgKi8KIApAQCAtNDI4LDE1ICs0NDksMTYgQEAKIAkgKiBjaGVjayBzb2NrZXQgY2FjaGUgLi4uIG11c3QgdGFsayB0byBBbGFuIGFib3V0IGhpcyBwbGFucwogCSAqIGZvciBzb2NrIGNhY2hlcy4uLiBpJ2xsIHNraXAgdGhpcyBmb3Igbm93LgogCSAqLwotCXNrID0gdWRwX3Y2X2xvb2t1cChzYWRkciwgdWgtPnNvdXJjZSwgZGFkZHIsIHVoLT5kZXN0LCBpbmV0Nl9paWYoc2tiKSk7CisJc2sgPSBfX3VkcDZfbGliX2xvb2t1cChzYWRkciwgdWgtPnNvdXJjZSwKKwkJCSAgICAgICBkYWRkciwgdWgtPmRlc3QsIGluZXQ2X2lpZihza2IpLCB1ZHB0YWJsZSk7CiAKIAlpZiAoc2sgPT0gTlVMTCkgewogCQlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhOVUxMLCBYRlJNX1BPTElDWV9JTiwgc2tiKSkKIAkJCWdvdG8gZGlzY2FyZDsKIAotCQlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCisJCWlmICh1ZHBfbGliX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGRpc2NhcmQ7Ci0JCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfTk9QT1JUUyk7CisJCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfTk9QT1JUUywgaXNfdWRwbGl0ZSk7CiAKIAkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwLCBkZXYpOwogCkBAIC00NTEsMTQgKzQ3MywyMCBAQAogCXJldHVybigwKTsKIAogc2hvcnRfcGFja2V0OgkKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiVURQOiBzaG9ydCBwYWNrZXQ6ICVkLyV1XG4iLCB1bGVuLCBza2ItPmxlbik7CisJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiVURQJXN2Njogc2hvcnQgcGFja2V0OiAlZC8ldVxuIiwKKwkJICAgICAgIGlzX3VkcGxpdGU/ICItTGl0ZSIgOiAiIiwgIHVsZW4sIHNrYi0+bGVuKTsKIAogZGlzY2FyZDoKLQlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTKTsKKwlVRFA2X0lOQ19TVEFUU19CSChVRFBfTUlCX0lORVJST1JTLCBpc191ZHBsaXRlKTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4oMCk7CQogfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdWRwdjZfcmN2KHN0cnVjdCBza19idWZmICoqcHNrYikKK3sKKwlyZXR1cm4gX191ZHA2X2xpYl9yY3YocHNrYiwgdWRwX2hhc2gsIDApOworfQorCiAvKgogICogVGhyb3cgYXdheSBhbGwgcGVuZGluZyBkYXRhIGFuZCBjYW5jZWwgdGhlIGNvcmtpbmcuIFNvY2tldCBpcyBsb2NrZWQuCiAgKi8KQEAgLTQ3NywxMyArNTA1LDE1IEBACiAgKglTZW5kaW5nCiAgKi8KIAotc3RhdGljIGludCB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCB1ZHBfc29jayAqdXApCitzdGF0aWMgaW50IHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCB1ZHBoZHIgKnVoOworCXN0cnVjdCB1ZHBfc29jayAgKnVwID0gdWRwX3NrKHNrKTsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGZsb3dpICpmbCA9ICZpbmV0LT5jb3JrLmZsOwogCWludCBlcnIgPSAwOworCV9fd3N1bSBjc3VtID0gMDsKIAogCS8qIEdyYWIgdGhlIHNrYnVmZiB3aGVyZSBVRFAgaGVhZGVyIHNwYWNlIGV4aXN0cy4gKi8KIAlpZiAoKHNrYiA9IHNrYl9wZWVrKCZzay0+c2tfd3JpdGVfcXVldWUpKSA9PSBOVUxMKQpAQCAtNDk4LDM1ICs1MjgsMTcgQEAKIAl1aC0+bGVuID0gaHRvbnModXAtPmxlbik7CiAJdWgtPmNoZWNrID0gMDsKIAotCWlmIChzay0+c2tfbm9fY2hlY2sgPT0gVURQX0NTVU1fTk9YTUlUKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJZ290byBzZW5kOwotCX0KKwlpZiAodXAtPnBjZmxhZykKKwkJY3N1bSA9IHVkcGxpdGVfY3N1bV9vdXRnb2luZyhzaywgc2tiKTsKKwkgZWxzZQorCQljc3VtID0gdWRwX2NzdW1fb3V0Z29pbmcoc2ssIHNrYik7CiAKLQlpZiAoc2tiX3F1ZXVlX2xlbigmc2stPnNrX3dyaXRlX3F1ZXVlKSA9PSAxKSB7Ci0JCXNrYi0+Y3N1bSA9IGNzdW1fcGFydGlhbCgoY2hhciAqKXVoLAotCQkJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgc2tiLT5jc3VtKTsKLQkJdWgtPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKCZmbC0+Zmw2X3NyYywKLQkJCQkJICAgICZmbC0+Zmw2X2RzdCwKLQkJCQkJICAgIHVwLT5sZW4sIGZsLT5wcm90bywgc2tiLT5jc3VtKTsKLQl9IGVsc2UgewotCQl1MzIgdG1wX2NzdW0gPSAwOwotCi0JCXNrYl9xdWV1ZV93YWxrKCZzay0+c2tfd3JpdGVfcXVldWUsIHNrYikgewotCQkJdG1wX2NzdW0gPSBjc3VtX2FkZCh0bXBfY3N1bSwgc2tiLT5jc3VtKTsKLQkJfQotCQl0bXBfY3N1bSA9IGNzdW1fcGFydGlhbCgoY2hhciAqKXVoLAotCQkJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgdG1wX2NzdW0pOwotICAgICAgICAgICAgICAgIHRtcF9jc3VtID0gY3N1bV9pcHY2X21hZ2ljKCZmbC0+Zmw2X3NyYywKLQkJCQkJICAgJmZsLT5mbDZfZHN0LAotCQkJCQkgICB1cC0+bGVuLCBmbC0+cHJvdG8sIHRtcF9jc3VtKTsKLSAgICAgICAgICAgICAgICB1aC0+Y2hlY2sgPSB0bXBfY3N1bTsKLQotCX0KKwkvKiBhZGQgcHJvdG9jb2wtZGVwZW5kZW50IHBzZXVkby1oZWFkZXIgKi8KKwl1aC0+Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJmZsLT5mbDZfc3JjLCAmZmwtPmZsNl9kc3QsCisJCQkJICAgIHVwLT5sZW4sIGZsLT5wcm90bywgY3N1bSAgICk7CiAJaWYgKHVoLT5jaGVjayA9PSAwKQotCQl1aC0+Y2hlY2sgPSAtMTsKKwkJdWgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiAKLXNlbmQ6CiAJZXJyID0gaXA2X3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogb3V0OgogCXVwLT5sZW4gPSAwOwpAQCAtNTM0LDcgKzU0Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCAKK2ludCB1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAogCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgb3B0X3NwYWNlOwpAQCAtNTU0LDYgKzU2Niw4IEBACiAJaW50IGNvcmtyZXEgPSB1cC0+Y29ya2ZsYWcgfHwgbXNnLT5tc2dfZmxhZ3MmTVNHX01PUkU7CiAJaW50IGVycjsKIAlpbnQgY29ubmVjdGVkID0gMDsKKwlpbnQgaXNfdWRwbGl0ZSA9IHVwLT5wY2ZsYWc7CisJaW50ICgqZ2V0ZnJhZykodm9pZCAqLCBjaGFyICosIGludCwgaW50LCBpbnQsIHN0cnVjdCBza19idWZmICopOwogCiAJLyogZGVzdGluYXRpb24gYWRkcmVzcyBjaGVjayAqLwogCWlmIChzaW42KSB7CkBAIC02OTQsNyArNzA4LDcgQEAKIAkJb3B0ID0gZmw2X21lcmdlX29wdGlvbnMoJm9wdF9zcGFjZSwgZmxvd2xhYmVsLCBvcHQpOwogCW9wdCA9IGlwdjZfZml4dXBfb3B0aW9ucygmb3B0X3NwYWNlLCBvcHQpOwogCi0JZmwucHJvdG8gPSBJUFBST1RPX1VEUDsKKwlmbC5wcm90byA9IHNrLT5za19wcm90b2NvbDsKIAlpcHY2X2FkZHJfY29weSgmZmwuZmw2X2RzdCwgZGFkZHIpOwogCWlmIChpcHY2X2FkZHJfYW55KCZmbC5mbDZfc3JjKSAmJiAhaXB2Nl9hZGRyX2FueSgmbnAtPnNhZGRyKSkKIAkJaXB2Nl9hZGRyX2NvcHkoJmZsLmZsNl9zcmMsICZucC0+c2FkZHIpOwpAQCAtNzYxLDE0ICs3NzUsMTUgQEAKIAogZG9fYXBwZW5kX2RhdGE6CiAJdXAtPmxlbiArPSB1bGVuOwotCWVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgaXBfZ2VuZXJpY19nZXRmcmFnLCBtc2ctPm1zZ19pb3YsIHVsZW4sCisJZ2V0ZnJhZyAgPSAgaXNfdWRwbGl0ZSA/ICB1ZHBsaXRlX2dldGZyYWcgOiBpcF9nZW5lcmljX2dldGZyYWc7CisJZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBnZXRmcmFnLCBtc2ctPm1zZ19pb3YsIHVsZW4sCiAJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgaGxpbWl0LCB0Y2xhc3MsIG9wdCwgJmZsLAogCQkoc3RydWN0IHJ0Nl9pbmZvKilkc3QsCiAJCWNvcmtyZXEgPyBtc2ctPm1zZ19mbGFnc3xNU0dfTU9SRSA6IG1zZy0+bXNnX2ZsYWdzKTsKIAlpZiAoZXJyKQogCQl1ZHBfdjZfZmx1c2hfcGVuZGluZ19mcmFtZXMoc2spOwogCWVsc2UgaWYgKCFjb3JrcmVxKQotCQllcnIgPSB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdXApOworCQllcnIgPSB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CiAJZWxzZSBpZiAodW5saWtlbHkoc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfd3JpdGVfcXVldWUpKSkKIAkJdXAtPnBlbmRpbmcgPSAwOwogCkBAIC03OTMsNyArODA4LDcgQEAKIG91dDoKIAlmbDZfc29ja19yZWxlYXNlKGZsb3dsYWJlbCk7CiAJaWYgKCFlcnIpIHsKLQkJVURQNl9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX09VVERBVEFHUkFNUyk7CisJCVVEUDZfSU5DX1NUQVRTX1VTRVIoVURQX01JQl9PVVREQVRBR1JBTVMsIGlzX3VkcGxpdGUpOwogCQlyZXR1cm4gbGVuOwogCX0KIAkvKgpAQCAtODA0LDcgKzgxOSw3IEBACiAJICogc2VlbXMgbGlrZSBvdmVya2lsbC4KIAkgKi8KIAlpZiAoZXJyID09IC1FTk9CVUZTIHx8IHRlc3RfYml0KFNPQ0tfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkgewotCQlVRFA2X0lOQ19TVEFUU19VU0VSKFVEUF9NSUJfU05EQlVGRVJST1JTKTsKKwkJVURQNl9JTkNfU1RBVFNfVVNFUihVRFBfTUlCX1NOREJVRkVSUk9SUywgaXNfdWRwbGl0ZSk7CiAJfQogCXJldHVybiBlcnI7CiAKQEAgLTgxNiw3ICs4MzEsNyBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgaW50IHVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCitpbnQgdWRwdjZfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlsb2NrX3NvY2soc2spOwogCXVkcF92Nl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CkBAIC04MzAsMTE5ICs4NDUsNDEgQEAKIC8qCiAgKglTb2NrZXQgb3B0aW9uIGNvZGUgZm9yIFVEUAogICovCi1zdGF0aWMgaW50IGRvX3VkcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoraW50IHVkcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7Ci0Jc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7Ci0JaW50IHZhbDsKLQlpbnQgZXJyID0gMDsKLQotCWlmKG9wdGxlbjxzaXplb2YoaW50KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKW9wdHZhbCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jc3dpdGNoKG9wdG5hbWUpIHsKLQljYXNlIFVEUF9DT1JLOgotCQlpZiAodmFsICE9IDApIHsKLQkJCXVwLT5jb3JrZmxhZyA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQl1cC0+Y29ya2ZsYWcgPSAwOwotCQkJbG9ja19zb2NrKHNrKTsKLQkJCXVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB1cCk7Ci0JCQlyZWxlYXNlX3NvY2soc2spOwotCQl9Ci0JCWJyZWFrOwotCQkKLQljYXNlIFVEUF9FTkNBUDoKLQkJc3dpdGNoICh2YWwpIHsKLQkJY2FzZSAwOgotCQkJdXAtPmVuY2FwX3R5cGUgPSB2YWw7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciA9IC1FTk9QUk9UT09QVDsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyID0gLUVOT1BST1RPT1BUOwotCQlicmVhazsKLQl9OwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB1ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKLXsKLQlpZiAobGV2ZWwgIT0gU09MX1VEUCkKLQkJcmV0dXJuIGlwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gZG9fdWRwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAobGV2ZWwgPT0gU09MX1VEUCAgfHwgIGxldmVsID09IFNPTF9VRFBMSVRFKQorCQlyZXR1cm4gdWRwX2xpYl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCisJCQkJCSAgdWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMpOworCXJldHVybiBpcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW50IGNvbXBhdF91ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoraW50IGNvbXBhdF91ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewotCWlmIChsZXZlbCAhPSBTT0xfVURQKQotCQlyZXR1cm4gY29tcGF0X2lwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsCi0JCQkJCSAgICAgIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gZG9fdWRwdjZfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAobGV2ZWwgPT0gU09MX1VEUCAgfHwgIGxldmVsID09IFNPTF9VRFBMSVRFKQorCQlyZXR1cm4gdWRwX2xpYl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCisJCQkJCSAgdWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMpOworCXJldHVybiBjb21wYXRfaXB2Nl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZG9fdWRwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK2ludCB1ZHB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7Ci0Jc3RydWN0IHVkcF9zb2NrICp1cCA9IHVkcF9zayhzayk7Ci0JaW50IHZhbCwgbGVuOwotCi0JaWYoZ2V0X3VzZXIobGVuLG9wdGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKLQkKLQlpZihsZW4gPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaChvcHRuYW1lKSB7Ci0JY2FzZSBVRFBfQ09SSzoKLQkJdmFsID0gdXAtPmNvcmtmbGFnOwotCQlicmVhazsKLQotCWNhc2UgVURQX0VOQ0FQOgotCQl2YWwgPSB1cC0+ZW5jYXBfdHlwZTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT1BST1RPT1BUOwotCX07Ci0KLSAgCWlmKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKLSAgCQlyZXR1cm4gLUVGQVVMVDsKLQlpZihjb3B5X3RvX3VzZXIob3B0dmFsLCAmdmFsLGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotICAJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdWRwdjZfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKLXsKLQlpZiAobGV2ZWwgIT0gU09MX1VEUCkKLQkJcmV0dXJuIGlwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKLQlyZXR1cm4gZG9fdWRwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAobGV2ZWwgPT0gU09MX1VEUCAgfHwgIGxldmVsID09IFNPTF9VRFBMSVRFKQorCQlyZXR1cm4gdWRwX2xpYl9nZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOworCXJldHVybiBpcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW50IGNvbXBhdF91ZHB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCitpbnQgY29tcGF0X3VkcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKIHsKLQlpZiAobGV2ZWwgIT0gU09MX1VEUCkKLQkJcmV0dXJuIGNvbXBhdF9pcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLAotCQkJCQkgICAgICBvcHR2YWwsIG9wdGxlbik7Ci0JcmV0dXJuIGRvX3VkcHY2X2dldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CisJaWYgKGxldmVsID09IFNPTF9VRFAgIHx8ICBsZXZlbCA9PSBTT0xfVURQTElURSkKKwkJcmV0dXJuIHVkcF9saWJfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKKwlyZXR1cm4gY29tcGF0X2lwdjZfZ2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuKTsKIH0KICNlbmRpZgogCkBAIC05ODMsNyArOTIwLDcgQEAKIAkJICAgYXRvbWljX3JlYWQoJnNwLT5za19yZWZjbnQpLCBzcCk7CiB9CiAKLXN0YXRpYyBpbnQgdWRwNl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK2ludCB1ZHA2X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3ByaW50ZihzZXEsCkBAIC0xMDAyLDYgKzkzOSw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJ1ZHA2IiwKIAkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCS5oYXNodGFibGUJPSB1ZHBfaGFzaCwKIAkuc2VxX3Nob3cJPSB1ZHA2X3NlcV9zaG93LAogCS5zZXFfZm9wcwk9ICZ1ZHA2X3NlcV9mb3BzLAogfTsKQEAgLTEwMjEsNyArOTU5LDcgQEAKIHN0cnVjdCBwcm90byB1ZHB2Nl9wcm90ID0gewogCS5uYW1lCQkgICA9ICJVRFB2NiIsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAotCS5jbG9zZQkJICAgPSB1ZHB2Nl9jbG9zZSwKKwkuY2xvc2UJCSAgID0gdWRwX2xpYl9jbG9zZSwKIAkuY29ubmVjdAkgICA9IGlwNl9kYXRhZ3JhbV9jb25uZWN0LAogCS5kaXNjb25uZWN0CSAgID0gdWRwX2Rpc2Nvbm5lY3QsCiAJLmlvY3RsCQkgICA9IHVkcF9pb2N0bCwKQEAgLTEwMzEsOCArOTY5LDggQEAKIAkuc2VuZG1zZwkgICA9IHVkcHY2X3NlbmRtc2csCiAJLnJlY3Ztc2cJICAgPSB1ZHB2Nl9yZWN2bXNnLAogCS5iYWNrbG9nX3JjdgkgICA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IsCi0JLmhhc2gJCSAgID0gdWRwX3Y2X2hhc2gsCi0JLnVuaGFzaAkJICAgPSB1ZHBfdjZfdW5oYXNoLAorCS5oYXNoCQkgICA9IHVkcF9saWJfaGFzaCwKKwkudW5oYXNoCQkgICA9IHVkcF9saWJfdW5oYXNoLAogCS5nZXRfcG9ydAkgICA9IHVkcF92Nl9nZXRfcG9ydCwKIAkub2JqX3NpemUJICAgPSBzaXplb2Yoc3RydWN0IHVkcDZfc29jayksCiAjaWZkZWYgQ09ORklHX0NPTVBBVApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwX2ltcGwuaCBiL25ldC9pcHY2L3VkcF9pbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5ODc4OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY2L3VkcF9pbXBsLmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfVURQNl9JTVBMX0gKKyNkZWZpbmUgX1VEUDZfSU1QTF9ICisjaW5jbHVkZSA8bmV0L3VkcC5oPgorI2luY2x1ZGUgPG5ldC91ZHBsaXRlLmg+CisjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CisjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CisKK2V4dGVybiBpbnQgIAlfX3VkcDZfbGliX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKiwgc3RydWN0IGhsaXN0X2hlYWQgW10sIGludCApOworZXh0ZXJuIHZvaWQgCV9fdWRwNl9saWJfZXJyKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqLAorCQkJICAgICAgIGludCAsIGludCAsIGludCAsIF9fYmUzMiAsIHN0cnVjdCBobGlzdF9oZWFkIFtdKTsKKworZXh0ZXJuIGludAl1ZHB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJICAgICAJCSBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworZXh0ZXJuIGludAl1ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgCSBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitleHRlcm4gaW50CWNvbXBhdF91ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbik7CitleHRlcm4gaW50CWNvbXBhdF91ZHB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCQkgICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKKyNlbmRpZgorZXh0ZXJuIGludAl1ZHB2Nl9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAorCQkJICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQJdWRwdjZfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywKKwkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbiwKKwkJICAJICAgICAgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbik7CitleHRlcm4gaW50CXVkcHY2X3F1ZXVlX3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50CXVkcHY2X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOworCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiBpbnQJdWRwNl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdik7CisjZW5kaWYKKyNlbmRpZgkvKiBfVURQNl9JTVBMX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcGxpdGUuYyBiL25ldC9pcHY2L3VkcGxpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlmOTcxCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2lwdjYvdWRwbGl0ZS5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIFVEUExJVEV2NiAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBVRFAtTGl0ZSBwcm90b2NvbCBvdmVyIElQdjYuCisgKiAgICAgICAgICAgICAgU2VlIGFsc28gbmV0L2lwdjQvdWRwbGl0ZS5jCisgKgorICogIFZlcnNpb246ICAgICRJZDogdWRwbGl0ZS5jLHYgMS45IDIwMDYvMTAvMTkgMDg6Mjg6MTAgZ2Vycml0IEV4cCAkCisgKgorICogIEF1dGhvcnM6ICAgIEdlcnJpdCBSZW5rZXIgICAgICAgPGdlcnJpdEBlcmcuYWJkbi5hYy51az4KKyAqCisgKiAgQ2hhbmdlczoKKyAqICBGaXhlczoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgkJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSAidWRwX2ltcGwuaCIKKworREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgdWRwX21pYiwgdWRwbGl0ZV9zdGF0c19pbjYpIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBpbnQgdWRwbGl0ZXY2X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpCit7CisJcmV0dXJuIF9fdWRwNl9saWJfcmN2KHBza2IsIHVkcGxpdGVfaGFzaCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHVkcGxpdGV2Nl9lcnIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgc3RydWN0IGluZXQ2X3NrYl9wYXJtICpvcHQsCisJCQkgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCit7CisJcmV0dXJuIF9fdWRwNl9saWJfZXJyKHNrYiwgb3B0LCB0eXBlLCBjb2RlLCBvZmZzZXQsIGluZm8sIHVkcGxpdGVfaGFzaCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5ldDZfcHJvdG9jb2wgdWRwbGl0ZXY2X3Byb3RvY29sID0geworCS5oYW5kbGVyCT0JdWRwbGl0ZXY2X3JjdiwKKwkuZXJyX2hhbmRsZXIJPQl1ZHBsaXRldjZfZXJyLAorCS5mbGFncwkJPQlJTkVUNl9QUk9UT19OT1BPTElDWXxJTkVUNl9QUk9UT19GSU5BTCwKK307CisKK3N0YXRpYyBpbnQgdWRwbGl0ZV92Nl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCit7CisJcmV0dXJuIHVkcGxpdGVfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKK30KKworc3RydWN0IHByb3RvIHVkcGxpdGV2Nl9wcm90ID0geworCS5uYW1lCQkgICA9ICJVRFBMSVRFdjYiLAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkuY2xvc2UJCSAgID0gdWRwX2xpYl9jbG9zZSwKKwkuY29ubmVjdAkgICA9IGlwNl9kYXRhZ3JhbV9jb25uZWN0LAorCS5kaXNjb25uZWN0CSAgID0gdWRwX2Rpc2Nvbm5lY3QsCisJLmlvY3RsCQkgICA9IHVkcF9pb2N0bCwKKwkuaW5pdAkJICAgPSB1ZHBsaXRlX3NrX2luaXQsCisJLmRlc3Ryb3kJICAgPSB1ZHB2Nl9kZXN0cm95X3NvY2ssCisJLnNldHNvY2tvcHQJICAgPSB1ZHB2Nl9zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0CSAgID0gdWRwdjZfZ2V0c29ja29wdCwKKwkuc2VuZG1zZwkgICA9IHVkcHY2X3NlbmRtc2csCisJLnJlY3Ztc2cJICAgPSB1ZHB2Nl9yZWN2bXNnLAorCS5iYWNrbG9nX3JjdgkgICA9IHVkcHY2X3F1ZXVlX3Jjdl9za2IsCisJLmhhc2gJCSAgID0gdWRwX2xpYl9oYXNoLAorCS51bmhhc2gJCSAgID0gdWRwX2xpYl91bmhhc2gsCisJLmdldF9wb3J0CSAgID0gdWRwbGl0ZV92Nl9nZXRfcG9ydCwKKwkub2JqX3NpemUJICAgPSBzaXplb2Yoc3RydWN0IHVkcDZfc29jayksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF91ZHB2Nl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF91ZHB2Nl9nZXRzb2Nrb3B0LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGluZXRfcHJvdG9zdyB1ZHBsaXRlNl9wcm90b3N3ID0geworCS50eXBlCQk9IFNPQ0tfREdSQU0sCisJLnByb3RvY29sCT0gSVBQUk9UT19VRFBMSVRFLAorCS5wcm90CQk9ICZ1ZHBsaXRldjZfcHJvdCwKKwkub3BzCQk9ICZpbmV0Nl9kZ3JhbV9vcHMsCisJLmNhcGFiaWxpdHkJPSAtMSwKKwkubm9fY2hlY2sJPSAwLAorCS5mbGFncwkJPSBJTkVUX1BST1RPU1dfUEVSTUFORU5ULAorfTsKKwordm9pZCBfX2luaXQgdWRwbGl0ZXY2X2luaXQodm9pZCkKK3sKKwlpZiAoaW5ldDZfYWRkX3Byb3RvY29sKCZ1ZHBsaXRldjZfcHJvdG9jb2wsIElQUFJPVE9fVURQTElURSkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgcmVnaXN0ZXIuXG4iLCBfX0ZVTkNUSU9OX18pOworCisJaW5ldDZfcmVnaXN0ZXJfcHJvdG9zdygmdWRwbGl0ZTZfcHJvdG9zdyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRwbGl0ZTZfc2VxX2ZvcHM7CitzdGF0aWMgc3RydWN0IHVkcF9zZXFfYWZpbmZvIHVkcGxpdGU2X3NlcV9hZmluZm8gPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJ1ZHBsaXRlNiIsCisJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkuaGFzaHRhYmxlCT0gdWRwbGl0ZV9oYXNoLAorCS5zZXFfc2hvdwk9IHVkcDZfc2VxX3Nob3csCisJLnNlcV9mb3BzCT0gJnVkcGxpdGU2X3NlcV9mb3BzLAorfTsKKworaW50IF9faW5pdCB1ZHBsaXRlNl9wcm9jX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdWRwX3Byb2NfcmVnaXN0ZXIoJnVkcGxpdGU2X3NlcV9hZmluZm8pOworfQorCit2b2lkIHVkcGxpdGU2X3Byb2NfZXhpdCh2b2lkKQoreworCXVkcF9wcm9jX3VucmVnaXN0ZXIoJnVkcGxpdGU2X3NlcV9hZmluZm8pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IGQ0MDBmOGYuLjhkZmZkNGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0yNzQsMTEgKzI3NCwxMiBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJUFBST1RPX1VEUDoKKwkJY2FzZSBJUFBST1RPX1VEUExJVEU6CiAJCWNhc2UgSVBQUk9UT19UQ1A6CiAJCWNhc2UgSVBQUk9UT19TQ1RQOgogCQljYXNlIElQUFJPVE9fRENDUDoKIAkJCWlmIChwc2tiX21heV9wdWxsKHNrYiwgc2tiLT5uaC5yYXcgKyBvZmZzZXQgKyA0IC0gc2tiLT5kYXRhKSkgewotCQkJCXUxNiAqcG9ydHMgPSAodTE2ICopZXh0aGRyOworCQkJCV9fYmUxNiAqcG9ydHMgPSAoX19iZTE2ICopZXh0aGRyOwogCiAJCQkJZmwtPmZsX2lwX3Nwb3J0ID0gcG9ydHNbMF07CiAJCQkJZmwtPmZsX2lwX2Rwb3J0ID0gcG9ydHNbMV07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl90dW5uZWwuYyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCmluZGV4IDc5MzFlNGYuLjAxYTVjNTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jCkBAIC02Miw3ICs2Miw3IEBACiB7CiAJdW5zaWduZWQgaDsKIAotCWggPSBhZGRyLT5hNlswXSBeIGFkZHItPmE2WzFdIF4gYWRkci0+YTZbMl0gXiBhZGRyLT5hNlszXTsKKwloID0gKF9fZm9yY2UgdTMyKShhZGRyLT5hNlswXSBeIGFkZHItPmE2WzFdIF4gYWRkci0+YTZbMl0gXiBhZGRyLT5hNlszXSk7CiAJaCBePSBoID4+IDE2OwogCWggXj0gaCA+PiA4OwogCWggJj0gWEZSTTZfVFVOTkVMX1NQSV9CWUFERFJfSFNJWkUgLSAxOwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCitfX2JlMzIgeGZybTZfdHVubmVsX3NwaV9sb29rdXAoeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogewogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAl1MzIgc3BpOwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJcmV0dXJuIHNwaTsKIH0KIAotdTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKQorX19iZTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogewogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAl1MzIgc3BpOwpAQCAtMjY1LDcgKzI2NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgeGZybTZfdHVubmVsX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKLQkJCSAgICBpbnQgdHlwZSwgaW50IGNvZGUsIGludCBvZmZzZXQsIF9fdTMyIGluZm8pCisJCQkgICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX2JlMzIgaW5mbykKIHsKIAkvKiB4ZnJtNl90dW5uZWwgbmF0aXZlIGVyciBoYW5kbGluZyAqLwogCXN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvZGlzY292ZXJ5LmMgYi9uZXQvaXJkYS9kaXNjb3ZlcnkuYwppbmRleCAzZmVmYzgyLi44OWZkMmEyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9kaXNjb3ZlcnkuYworKysgYi9uZXQvaXJkYS9kaXNjb3ZlcnkuYwpAQCAtMzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXAuYyBiL25ldC9pcmRhL2lyaWFwLmMKaW5kZXggNDE1Y2Y0ZS4uOGYxYzZkNiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJpYXAuYworKysgYi9uZXQvaXJkYS9pcmlhcC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtMTcyLDcgKzE3Myw3IEBACiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0Jc2VsZiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcmlhcF9jYiksIEdGUF9BVE9NSUMpOworCXNlbGYgPSBremFsbG9jKHNpemVvZigqc2VsZiksIEdGUF9BVE9NSUMpOwogCWlmICghc2VsZikgewogCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTgxLDcgKzE4Miw2IEBACiAJLyoKIAkgKiAgSW5pdGlhbGl6ZSBpbnN0YW5jZQogCSAqLwotCW1lbXNldChzZWxmLCAwLCBzaXplb2Yoc3RydWN0IGlyaWFwX2NiKSk7CiAKIAlzZWxmLT5tYWdpYyA9IElBU19NQUdJQzsKIAlzZWxmLT5tb2RlID0gbW9kZTsKQEAgLTQ1MSwxMiArNDUxLDEyIEBACiAJbiA9IDI7CiAKIAkvKiBHZXQgbGVuZ3RoLCBNU0IgZmlyc3QgKi8KLQlsZW4gPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX3UxNiAqKShmcCtuKSkpOyBuICs9IDI7CisJbGVuID0gYmUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopKGZwK24pKSk7IG4gKz0gMjsKIAogCUlSREFfREVCVUcoNCwgIiVzKCksIGxlbj0lZFxuIiwgX19GVU5DVElPTl9fLCBsZW4pOwogCiAJLyogR2V0IG9iamVjdCBJRCwgTVNCIGZpcnN0ICovCi0Jb2JqX2lkID0gYmUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoX191MTYgKikoZnArbikpKTsgbiArPSAyOworCW9ial9pZCA9IGJlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoKF9fYmUxNiAqKShmcCtuKSkpOyBuICs9IDI7CiAKIAl0eXBlID0gZnBbbisrXTsKIAlJUkRBX0RFQlVHKDQsICIlcygpLCBWYWx1ZSB0eXBlID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSk7CkBAIC01MDYsNyArNTA2LDcgQEAKIAkJdmFsdWUgPSBpcmlhc19uZXdfc3RyaW5nX3ZhbHVlKGZwK24pOwogCQlicmVhazsKIAljYXNlIElBU19PQ1RfU0VROgotCQl2YWx1ZV9sZW4gPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX3UxNiAqKShmcCtuKSkpOworCQl2YWx1ZV9sZW4gPSBiZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChfX2JlMTYgKikoZnArbikpKTsKIAkJbiArPSAyOwogCiAJCS8qIFdpbGwgdHJ1bmNhdGUgdG8gSUFTX01BWF9PQ1RFVF9TVFJJTkcgYnl0ZXMgKi8KQEAgLTU0NCw3ICs1NDQsNyBAQAogewogCXN0cnVjdCBza19idWZmICp0eF9za2I7CiAJaW50IG47Ci0JX191MzIgdG1wX2JlMzI7CisJX19iZTMyIHRtcF9iZTMyOwogCV9fYmUxNiB0bXBfYmUxNjsKIAlfX3U4ICpmcDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJpYXNfb2JqZWN0LmMgYi9uZXQvaXJkYS9pcmlhc19vYmplY3QuYwppbmRleCA1NjI5MmFiLi5iMWVlOTlhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhc19vYmplY3QuYworKysgYi9uZXQvaXJkYS9pcmlhc19vYmplY3QuYwpAQCAtNTAxLDEzICs1MDEsMTIgQEAKIAkJbGVuID0gSUFTX01BWF9PQ1RFVF9TVFJJTkc7CiAJdmFsdWUtPmxlbiA9IGxlbjsKIAotCXZhbHVlLT50Lm9jdF9zZXEgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CisJdmFsdWUtPnQub2N0X3NlcSA9IGttZW1kdXAob2N0c2VxLCBsZW4sIEdGUF9BVE9NSUMpOwogCWlmICh2YWx1ZS0+dC5vY3Rfc2VxID09IE5VTEwpewogCQlJUkRBX1dBUk5JTkcoIiVzOiBVbmFibGUgdG8ga21hbGxvYyFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWtmcmVlKHZhbHVlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCW1lbWNweSh2YWx1ZS0+dC5vY3Rfc2VxLCBvY3RzZXEgLCBsZW4pOwogCXJldHVybiB2YWx1ZTsKIH0KIApAQCAtNTIyLDcgKzUyMSw2IEBACiAJfQogCiAJdmFsdWUtPnR5cGUgPSBJQVNfTUlTU0lORzsKLQl2YWx1ZS0+bGVuID0gMDsKIAogCXJldHVybiB2YWx1ZTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKaW5kZXggOWI5NjJmMi4uMmJiMDRhYyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKQEAgLTk5NSw3ICs5OTUsNyBAQAogewogCV9fdTggKmZyYW1lOwogCV9fdTggcGFyYW1fbGVuOwotCV9fdTE2IHRtcF9sZTsgLyogVGVtcG9yYXJ5IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0ICovCisJX19sZTE2IHRtcF9sZTsgLyogVGVtcG9yYXJ5IHZhbHVlIGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0ICovCiAJaW50IG49MDsKIAkKIAlpZiAoc2tiID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybG1wLmMgYi9uZXQvaXJkYS9pcmxtcC5jCmluZGV4IGZlZGU4MzcuLjdlNWQxMmEgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybG1wLmMKKysrIGIvbmV0L2lyZGEvaXJsbXAuYwpAQCAtNjQxLDE1ICs2NDEsMTMgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBhIG5ldyBpbnN0YW5jZSAqLwotCW5ldyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsc2FwX2NiKSwgR0ZQX0FUT01JQyk7CisJbmV3ID0ga21lbWR1cChvcmlnLCBzaXplb2YoKm5ldyksIEdGUF9BVE9NSUMpOwogCWlmICghbmV3KSAgewogCQlJUkRBX0RFQlVHKDAsICIlcygpLCB1bmFibGUgdG8ga21hbGxvY1xuIiwgX19GVU5DVElPTl9fKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJsbXAtPnVuY29ubmVjdGVkX2xzYXBzLT5oYl9zcGlubG9jaywKIAkJCQkgICAgICAgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JLyogRHVwICovCi0JbWVtY3B5KG5ldywgb3JpZywgc2l6ZW9mKHN0cnVjdCBsc2FwX2NiKSk7CiAJLyogbmV3LT5sYXAgPSBvcmlnLT5sYXA7ID0+IGRvbmUgaW4gdGhlIG1lbWNweSgpICovCiAJLyogbmV3LT5zbHNhcF9zZWwgPSBvcmlnLT5zbHNhcF9zZWw7ID0+IGRvbmUgaW4gdGhlIG1lbWNweSgpICovCiAJbmV3LT5jb25uX3NrYiA9IE5VTEw7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnF1ZXVlLmMgYi9uZXQvaXJkYS9pcnF1ZXVlLmMKaW5kZXggMWJhOGM3MS4uMWQyNmNkMyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJxdWV1ZS5jCisrKyBiL25ldC9pcmRhL2lycXVldWUuYwpAQCAtMzU2LDE0ICszNTYsMTMgQEAKIAkvKgogCSAqIEFsbG9jYXRlIG5ldyBoYXNoYmluCiAJICovCi0JaGFzaGJpbiA9IGttYWxsb2MoIHNpemVvZihoYXNoYmluX3QpLCBHRlBfQVRPTUlDKTsKKwloYXNoYmluID0ga3phbGxvYyhzaXplb2YoKmhhc2hiaW4pLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWhhc2hiaW4pCiAJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHN0cnVjdHVyZQogCSAqLwotCW1lbXNldChoYXNoYmluLCAwLCBzaXplb2YoaGFzaGJpbl90KSk7CiAJaGFzaGJpbi0+aGJfdHlwZSA9IHR5cGU7CiAJaGFzaGJpbi0+bWFnaWMgPSBIQl9NQUdJQzsKIAkvL2hhc2hiaW4tPmhiX2N1cnJlbnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJ0dHAuYyBiL25ldC9pcmRhL2lydHRwLmMKaW5kZXggM2MyZTcwYi4uMjUyZjExMCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJ0dHAuYworKysgYi9uZXQvaXJkYS9pcnR0cC5jCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtMTE0Nyw3ICsxMTQ4LDcgQEAKIAkJZnJhbWVbM10gPSAweDAyOyAvKiBWYWx1ZSBsZW5ndGggKi8KIAogCQlwdXRfdW5hbGlnbmVkKGNwdV90b19iZTE2KChfX3UxNikgbWF4X3NkdV9zaXplKSwKLQkJCSAgICAgIChfX3UxNiAqKShmcmFtZSs0KSk7CisJCQkgICAgICAoX19iZTE2ICopKGZyYW1lKzQpKTsKIAl9IGVsc2UgewogCQkvKiBJbnNlcnQgcGxhaW4gVFRQIGhlYWRlciAqLwogCQlmcmFtZSA9IHNrYl9wdXNoKHR4X3NrYiwgVFRQX0hFQURFUik7CkBAIC0xMzk0LDcgKzEzOTUsNyBAQAogCQlmcmFtZVszXSA9IDB4MDI7IC8qIFZhbHVlIGxlbmd0aCAqLwogCiAJCXB1dF91bmFsaWduZWQoY3B1X3RvX2JlMTYoKF9fdTE2KSBtYXhfc2R1X3NpemUpLAotCQkJICAgICAgKF9fdTE2ICopKGZyYW1lKzQpKTsKKwkJCSAgICAgIChfX2JlMTYgKikoZnJhbWUrNCkpOwogCX0gZWxzZSB7CiAJCS8qIEluc2VydCBUVFAgaGVhZGVyICovCiAJCWZyYW1lID0gc2tiX3B1c2godHhfc2tiLCBUVFBfSEVBREVSKTsKZGlmZiAtLWdpdCBhL25ldC9rZXkvYWZfa2V5LmMgYi9uZXQva2V5L2FmX2tleS5jCmluZGV4IDIwZmY3Y2MuLjBlMWRiZmIgMTAwNjQ0Ci0tLSBhL25ldC9rZXkvYWZfa2V5LmMKKysrIGIvbmV0L2tleS9hZl9rZXkuYwpAQCAtMTc2NywxMSArMTc2NywxMSBAQAogCiAJLyogYWRkcmVzc2VzIHByZXNlbnQgb25seSBpbiB0dW5uZWwgbW9kZSAqLwogCWlmICh0LT5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpIHsKLQkJc3dpdGNoICh4cC0+ZmFtaWx5KSB7CisJCXN0cnVjdCBzb2NrYWRkciAqc2E7CisJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKShycSsxKTsKKwkJc3dpdGNoKHNhLT5zYV9mYW1pbHkpIHsKIAkJY2FzZSBBRl9JTkVUOgotCQkJc2luID0gKHZvaWQqKShycSsxKTsKLQkJCWlmIChzaW4tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKXNhOwogCQkJdC0+c2FkZHIuYTQgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKIAkJCXNpbisrOwogCQkJaWYgKHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKQpAQCAtMTc4MCw5ICsxNzgwLDcgQEAKIAkJCWJyZWFrOwogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCQljYXNlIEFGX0lORVQ2OgotCQkJc2luNiA9ICh2b2lkICopKHJxKzEpOwotCQkJaWYgKHNpbjYtPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KQotCQkJCXJldHVybiAtRUlOVkFMOworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KilzYTsKIAkJCW1lbWNweSh0LT5zYWRkci5hNiwgJnNpbjYtPnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwogCQkJc2luNisrOwogCQkJaWYgKHNpbjYtPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KQpAQCAtMTc5Myw3ICsxNzkxLDEwIEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0KKwkJdC0+ZW5jYXBfZmFtaWx5ID0gc2EtPnNhX2ZhbWlseTsKKwl9IGVsc2UKKwkJdC0+ZW5jYXBfZmFtaWx5ID0geHAtPmZhbWlseTsKKwogCS8qIE5vIHdheSB0byBzZXQgdGhpcyB2aWEga2FtZSBwZmtleSAqLwogCXQtPmFhbGdvcyA9IHQtPmVhbGdvcyA9IHQtPmNhbGdvcyA9IH4wOwogCXhwLT54ZnJtX25yKys7CkBAIC0xODMwLDE4ICsxODMxLDI1IEBACiAKIHN0YXRpYyBpbnQgcGZrZXlfeGZybV9wb2xpY3kybXNnX3NpemUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKIHsKKwlzdHJ1Y3QgeGZybV90bXBsICp0OwogCWludCBzb2NrYWRkcl9zaXplID0gcGZrZXlfc29ja2FkZHJfc2l6ZSh4cC0+ZmFtaWx5KTsKLQlpbnQgc29ja2xlbiA9ICh4cC0+ZmFtaWx5ID09IEFGX0lORVQgPwotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlpbnQgc29ja2xlbiA9IDA7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTx4cC0+eGZybV9ucjsgaSsrKSB7CisJCXQgPSB4cC0+eGZybV92ZWMgKyBpOworCQlzb2NrbGVuICs9ICh0LT5lbmNhcF9mYW1pbHkgPT0gQUZfSU5FVCA/CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgOgorCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJfQogCiAJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc2FkYl9tc2cpICsKIAkJKHNpemVvZihzdHJ1Y3Qgc2FkYl9saWZldGltZSkgKiAzKSArCiAJCShzaXplb2Yoc3RydWN0IHNhZGJfYWRkcmVzcykgKiAyKSArIAogCQkoc29ja2FkZHJfc2l6ZSAqIDIpICsKIAkJc2l6ZW9mKHN0cnVjdCBzYWRiX3hfcG9saWN5KSArCi0JCSh4cC0+eGZybV9uciAqIChzaXplb2Yoc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QpICsKLQkJCQkoc29ja2xlbiAqIDIpKSkgKworCQkoeHAtPnhmcm1fbnIgKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QpKSArCisJCShzb2NrbGVuICogMikgKwogCQlwZmtleV94ZnJtX3BvbGljeTJzZWNfY3R4X3NpemUoeHApOwogfQogCkBAIC0xOTk5LDcgKzIwMDcsOSBAQAogCiAJCXJlcV9zaXplID0gc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KTsKIAkJaWYgKHQtPm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCkKLQkJCXJlcV9zaXplICs9IDIqc29ja2xlbjsKKwkJCXJlcV9zaXplICs9ICgodC0+ZW5jYXBfZmFtaWx5ID09IEFGX0lORVQgPworCQkgICAgICAgCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pIDoKKwkJICAgICAgIAkJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpICogMik7CiAJCWVsc2UKIAkJCXNpemUgLT0gMipzb2NrbGVuOwogCQlycSA9ICh2b2lkKilza2JfcHV0KHNrYiwgcmVxX3NpemUpOwpAQCAtMjAxNSw3ICsyMDI1LDcgQEAKIAkJCXJxLT5zYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsID0gSVBTRUNfTEVWRUxfVVNFOwogCQlycS0+c2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZCA9IHQtPnJlcWlkOwogCQlpZiAodC0+bW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7Ci0JCQlzd2l0Y2ggKHhwLT5mYW1pbHkpIHsKKwkJCXN3aXRjaCAodC0+ZW5jYXBfZmFtaWx5KSB7CiAJCQljYXNlIEFGX0lORVQ6CiAJCQkJc2luID0gKHZvaWQqKShycSsxKTsKIAkJCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwpAQCAtMjkzOCw3ICsyOTQ4LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBwZmtleV9zZW5kX25ld19tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLCB1MTYgc3BvcnQpCitzdGF0aWMgaW50IHBma2V5X3NlbmRfbmV3X21hcHBpbmcoc3RydWN0IHhmcm1fc3RhdGUgKngsIHhmcm1fYWRkcmVzc190ICppcGFkZHIsIF9fYmUxNiBzcG9ydCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBzYWRiX21zZyAqaGRyOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggMjY1MmVhZC4uMTkwYmIzZSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC02NCw3ICs2NCw3IEBACiAgKgogICoJR2l2ZW4gYW4gQVJQIGhlYWRlciB0eXBlIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBldGhlcm5ldCBwcm90b2NvbC4KICAqLwotc3RhdGljIGlubGluZSB1MTYgbGxjX3Byb3RvX3R5cGUodTE2IGFycGhyZCkKK3N0YXRpYyBpbmxpbmUgX19iZTE2IGxsY19wcm90b190eXBlKHUxNiBhcnBocmQpCiB7CiAJcmV0dXJuIGFycGhyZCA9PSBBUlBIUkRfSUVFRTgwMl9UUiA/CiAJCSAgICAgICAgIGh0b25zKEVUSF9QX1RSXzgwMl8yKSA6IGh0b25zKEVUSF9QXzgwMl8yKTsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2lucHV0LmMgYi9uZXQvbGxjL2xsY19pbnB1dC5jCmluZGV4IDk0ZDIzNjguLmRiODJhZmYgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvbGxjX2lucHV0LmMKKysrIGIvbmV0L2xsYy9sbGNfaW5wdXQuYwpAQCAtMTE1LDggKzExNSw4IEBACiAJc2tiLT5oLnJhdyArPSBsbGNfbGVuOwogCXNrYl9wdWxsKHNrYiwgbGxjX2xlbik7CiAJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyXzIpKSB7Ci0JCXUxNiBwZHVsZW4gPSBldGhfaGRyKHNrYiktPmhfcHJvdG8sCi0JCSAgICBkYXRhX3NpemUgPSBudG9ocyhwZHVsZW4pIC0gbGxjX2xlbjsKKwkJX19iZTE2IHBkdWxlbiA9IGV0aF9oZHIoc2tiKS0+aF9wcm90bzsKKwkJdTE2IGRhdGFfc2l6ZSA9IG50b2hzKHBkdWxlbikgLSBsbGNfbGVuOwogCiAJCWlmICh1bmxpa2VseShwc2tiX3RyaW1fcmNzdW0oc2tiLCBkYXRhX3NpemUpKSkKIAkJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGY2MTljNjUuLjNhNjY4NzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTI1LDE5ICsyNSw1NyBAQAogCSAgYW5kIGlzIGFsc28gc2NoZWR1bGVkIHRvIHJlcGxhY2UgdGhlIG9sZCBzeXNsb2ctYmFzZWQgaXB0X0xPRwogCSAgYW5kIGlwNnRfTE9HIG1vZHVsZXMuCiAKLWNvbmZpZyBORl9DT05OVFJBQ0sKLQl0cmlzdGF0ZSAiTGF5ZXIgMyBJbmRlcGVuZGVudCBDb25uZWN0aW9uIHRyYWNraW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIElQX05GX0NPTk5UUkFDSz1uCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQorY29uZmlnIE5GX0NPTk5UUkFDS19FTkFCTEVECisJdHJpc3RhdGUgIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQiCisJaGVscAogCSAgQ29ubmVjdGlvbiB0cmFja2luZyBrZWVwcyBhIHJlY29yZCBvZiB3aGF0IHBhY2tldHMgaGF2ZSBwYXNzZWQKIAkgIHRocm91Z2ggeW91ciBtYWNoaW5lLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWxhdGVkCiAJICBpbnRvIGNvbm5lY3Rpb25zLgogCisJICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrCisJICBBZGRyZXNzIFRyYW5zbGF0aW9uIChleGNlcHQgZm9yIEZhc3QgTkFUKS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8KKwkgIGVuaGFuY2UgcGFja2V0IGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnCisJICBiZWxvdykuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCitjaG9pY2UKKwlwcm9tcHQgIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tfRU5BQkxFRAorCitjb25maWcgTkZfQ09OTlRSQUNLX1NVUFBPUlQKKwlib29sICJMYXllciAzIEluZGVwZW5kZW50IENvbm5lY3Rpb24gdHJhY2tpbmcgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwloZWxwCiAJICBMYXllciAzIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gdHJhY2tpbmcgaXMgZXhwZXJpbWVudGFsIHNjaGVtZQogCSAgd2hpY2ggZ2VuZXJhbGl6ZSBpcF9jb25udHJhY2sgdG8gc3VwcG9ydCBvdGhlciBsYXllciAzIHByb3RvY29scy4KIAotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJICBUaGlzIGlzIHJlcXVpcmVkIHRvIGRvIE1hc3F1ZXJhZGluZyBvciBvdGhlciBraW5kcyBvZiBOZXR3b3JrCisJICBBZGRyZXNzIFRyYW5zbGF0aW9uIChleGNlcHQgZm9yIEZhc3QgTkFUKS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8KKwkgIGVuaGFuY2UgcGFja2V0IGZpbHRlcmluZyAoc2VlIGBDb25uZWN0aW9uIHN0YXRlIG1hdGNoIHN1cHBvcnQnCisJICBiZWxvdykuCisKK2NvbmZpZyBJUF9ORl9DT05OVFJBQ0tfU1VQUE9SVAorCWJvb2wgIkxheWVyIDMgRGVwZW5kZW50IENvbm5lY3Rpb24gdHJhY2tpbmcgKE9CU09MRVRFKSIKKwloZWxwCisJICBUaGUgb2xkLCBMYXllciAzIGRlcGVuZGVudCBpcF9jb25udHJhY2sgc3Vic3lzdGVtIG9mIG5ldGZpbHRlci4KKworCSAgVGhpcyBpcyByZXF1aXJlZCB0byBkbyBNYXNxdWVyYWRpbmcgb3Igb3RoZXIga2luZHMgb2YgTmV0d29yaworCSAgQWRkcmVzcyBUcmFuc2xhdGlvbiAoZXhjZXB0IGZvciBGYXN0IE5BVCkuICBJdCBjYW4gYWxzbyBiZSB1c2VkIHRvCisJICBlbmhhbmNlIHBhY2tldCBmaWx0ZXJpbmcgKHNlZSBgQ29ubmVjdGlvbiBzdGF0ZSBtYXRjaCBzdXBwb3J0JworCSAgYmVsb3cpLgorCitlbmRjaG9pY2UKKworY29uZmlnIE5GX0NPTk5UUkFDSworCXRyaXN0YXRlCisJZGVmYXVsdCBtIGlmIE5GX0NPTk5UUkFDS19TVVBQT1JUICYmIE5GX0NPTk5UUkFDS19FTkFCTEVEPW0KKwlkZWZhdWx0IHkgaWYgTkZfQ09OTlRSQUNLX1NVUFBPUlQgJiYgTkZfQ09OTlRSQUNLX0VOQUJMRUQ9eQorCitjb25maWcgSVBfTkZfQ09OTlRSQUNLCisJdHJpc3RhdGUKKwlkZWZhdWx0IG0gaWYgSVBfTkZfQ09OTlRSQUNLX1NVUFBPUlQgJiYgTkZfQ09OTlRSQUNLX0VOQUJMRUQ9bQorCWRlZmF1bHQgeSBpZiBJUF9ORl9DT05OVFJBQ0tfU1VQUE9SVCAmJiBORl9DT05OVFJBQ0tfRU5BQkxFRD15CiAKIGNvbmZpZyBORl9DVF9BQ0NUCiAJYm9vbCAiQ29ubmVjdGlvbiB0cmFja2luZyBmbG93IGFjY291bnRpbmciCkBAIC04Miw4ICsxMjAsMTIgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgYE4nLgogCitjb25maWcgTkZfQ1RfUFJPVE9fR1JFCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwogY29uZmlnIE5GX0NUX1BST1RPX1NDVFAKLQl0cmlzdGF0ZSAnU0NUUCBwcm90b2NvbCBvbiBuZXcgY29ubmVjdGlvbiB0cmFja2luZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpJworCXRyaXN0YXRlICdTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKScKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKIAlkZWZhdWx0IG4KIAloZWxwCkBAIC05Myw4ICsxMzUsMjMgQEAKIAkgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHNheSBNIGhlcmUgYW5kIHJlYWQKIAkgIERvY3VtZW50YXRpb24vbW9kdWxlcy50eHQuICBJZiB1bnN1cmUsIHNheSBgTicuCiAKK2NvbmZpZyBORl9DT05OVFJBQ0tfQU1BTkRBCisJdHJpc3RhdGUgIkFtYW5kYSBiYWNrdXAgcHJvdG9jb2wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwlzZWxlY3QgVEVYVFNFQVJDSAorCXNlbGVjdCBURVhUU0VBUkNIX0tNUAorCWhlbHAKKwkgIElmIHlvdSBhcmUgcnVubmluZyB0aGUgQW1hbmRhIGJhY2t1cCBwYWNrYWdlIDxodHRwOi8vd3d3LmFtYW5kYS5vcmcvPgorCSAgb24gdGhpcyBtYWNoaW5lIG9yIG1hY2hpbmVzIHRoYXQgd2lsbCBiZSBNQVNRVUVSQURFRCB0aHJvdWdoIHRoaXMKKwkgIG1hY2hpbmUsIHRoZW4geW91IG1heSB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUuICBUaGlzIGFsbG93cyB0aGUKKwkgIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIG5hdHRpbmcgY29kZSB0byBhbGxvdyB0aGUgc3ViLWNoYW5uZWxzIHRoYXQKKwkgIEFtYW5kYSByZXF1aXJlcyBmb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgYmFja3VwIGRhdGEsIG1lc3NhZ2VzIGFuZAorCSAgaW5kZXguCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkZfQ09OTlRSQUNLX0ZUUAotCXRyaXN0YXRlICJGVFAgc3VwcG9ydCBvbiBuZXcgY29ubmVjdGlvbiB0cmFja2luZyAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiRlRQIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCiAJaGVscAogCSAgVHJhY2tpbmcgRlRQIGNvbm5lY3Rpb25zIGlzIHByb2JsZW1hdGljOiBzcGVjaWFsIGhlbHBlcnMgYXJlCkBAIC0xMDcsNiArMTY0LDEwMSBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE5GX0NPTk5UUkFDS19IMzIzCisJdHJpc3RhdGUgIkguMzIzIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJaGVscAorCSAgSC4zMjMgaXMgYSBWb0lQIHNpZ25hbGxpbmcgcHJvdG9jb2wgZnJvbSBJVFUtVC4gQXMgb25lIG9mIHRoZSBtb3N0CisJICBpbXBvcnRhbnQgVm9JUCBwcm90b2NvbHMsIGl0IGlzIHdpZGVseSB1c2VkIGJ5IHZvaWNlIGhhcmR3YXJlIGFuZAorCSAgc29mdHdhcmUgaW5jbHVkaW5nIHZvaWNlIGdhdGV3YXlzLCBJUCBwaG9uZXMsIE5ldG1lZXRpbmcsIE9wZW5QaG9uZSwKKwkgIEdub21lbWVldGluZywgZXRjLgorCisJICBXaXRoIHRoaXMgbW9kdWxlIHlvdSBjYW4gc3VwcG9ydCBILjMyMyBvbiBhIGNvbm5lY3Rpb24gdHJhY2tpbmcvTkFUCisJICBmaXJld2FsbC4KKworCSAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgUkFTLCBGYXN0IFN0YXJ0LCBILjI0NSBUdW5uZWxsaW5nLCBDYWxsCisJICBGb3J3YXJkaW5nLCBSVFAvUlRDUCBhbmQgVC4xMjAgYmFzZWQgYXVkaW8sIHZpZGVvLCBmYXgsIGNoYXQsCisJICB3aGl0ZWJvYXJkLCBmaWxlIHRyYW5zZmVyLCBldGMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UKKwkgIHZpc2l0IGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8uCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTkZfQ09OTlRSQUNLX0lSQworCXRyaXN0YXRlICJJUkMgcHJvdG9jb2wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwloZWxwCisJICBUaGVyZSBpcyBhIGNvbW1vbmx5LXVzZWQgZXh0ZW5zaW9uIHRvIElSQyBjYWxsZWQKKwkgIERpcmVjdCBDbGllbnQtdG8tQ2xpZW50IFByb3RvY29sIChEQ0MpLiAgVGhpcyBlbmFibGVzIHVzZXJzIHRvIHNlbmQKKwkgIGZpbGVzIHRvIGVhY2ggb3RoZXIsIGFuZCBhbHNvIGNoYXQgdG8gZWFjaCBvdGhlciB3aXRob3V0IHRoZSBuZWVkCisJICBvZiBhIHNlcnZlci4gIERDQyBTZW5kaW5nIGlzIHVzZWQgYW55d2hlcmUgeW91IHNlbmQgZmlsZXMgb3ZlciBJUkMsCisJICBhbmQgRENDIENoYXQgaXMgbW9zdCBjb21tb25seSB1c2VkIGJ5IEVnZ2Ryb3AgYm90cy4gIElmIHlvdSBhcmUKKwkgIHVzaW5nIE5BVCwgdGhpcyBleHRlbnNpb24gd2lsbCBlbmFibGUgeW91IHRvIHNlbmQgZmlsZXMgYW5kIGluaXRpYXRlCisJICBjaGF0cy4gIE5vdGUgdGhhdCB5b3UgZG8gTk9UIG5lZWQgdGhpcyBleHRlbnNpb24gdG8gZ2V0IGZpbGVzIG9yCisJICBoYXZlIG90aGVycyBpbml0aWF0ZSBjaGF0cywgb3IgZXZlcnl0aGluZyBlbHNlIGluIElSQy4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBORl9DT05OVFJBQ0tfTkVUQklPU19OUworCXRyaXN0YXRlICJOZXRCSU9TIG5hbWUgc2VydmljZSBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCWhlbHAKKwkgIE5ldEJJT1MgbmFtZSBzZXJ2aWNlIHJlcXVlc3RzIGFyZSBzZW50IGFzIGJyb2FkY2FzdCBtZXNzYWdlcyBmcm9tIGFuCisJICB1bnByaXZpbGVnZWQgcG9ydCBhbmQgcmVzcG9uZGVkIHRvIHdpdGggdW5pY2FzdCBtZXNzYWdlcyB0byB0aGUKKwkgIHNhbWUgcG9ydC4gVGhpcyBtYWtlIHRoZW0gaGFyZCB0byBmaXJld2FsbCBwcm9wZXJseSBiZWNhdXNlIGNvbm5lY3Rpb24KKwkgIHRyYWNraW5nIGRvZXNuJ3QgZGVhbCB3aXRoIGJyb2FkY2FzdHMuIFRoaXMgaGVscGVyIHRyYWNrcyBsb2NhbGx5CisJICBvcmlnaW5hdGluZyBOZXRCSU9TIG5hbWUgc2VydmljZSByZXF1ZXN0cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKKwkgIHJlc3BvbnNlcy4gSXQgcmVsaWVzIG9uIGNvcnJlY3QgSVAgYWRkcmVzcyBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkKKwkgIG5ldG1hc2sgYW5kIGJyb2FkY2FzdCBhZGRyZXNzLiBXaGVuIHByb3Blcmx5IGNvbmZpZ3VyZWQsIHRoZSBvdXRwdXQKKwkgIG9mICJpcCBhZGRyZXNzIHNob3ciIHNob3VsZCBsb29rIHNpbWlsYXIgdG8gdGhpczoKKworCSAgJCBpcCAtNCBhZGRyZXNzIHNob3cgZXRoMAorCSAgNDogZXRoMDogPEJST0FEQ0FTVCxNVUxUSUNBU1QsVVA+IG10dSAxNTAwIHFkaXNjIHBmaWZvX2Zhc3QgcWxlbiAxMDAwCisJICAgICAgaW5ldCAxNzIuMTYuMi4yNTIvMjQgYnJkIDE3Mi4xNi4yLjI1NSBzY29wZSBnbG9iYWwgZXRoMAorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE5GX0NPTk5UUkFDS19QUFRQCisJdHJpc3RhdGUgIlBQdFAgcHJvdG9jb2wgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sKKwlzZWxlY3QgTkZfQ1RfUFJPVE9fR1JFCisJaGVscAorCSAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciBQUFRQIChQb2ludCB0byBQb2ludCBUdW5uZWxsaW5nCisJICBQcm90b2NvbCwgUkZDMjYzNykgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgTkFULgorCisJICBJZiB5b3UgYXJlIHJ1bm5pbmcgUFBUUCBzZXNzaW9ucyBvdmVyIGEgc3RhdGVmdWwgZmlyZXdhbGwgb3IgTkFUCisJICBib3gsIHlvdSBtYXkgd2FudCB0byBlbmFibGUgdGhpcyBmZWF0dXJlLgorCisJICBQbGVhc2Ugbm90ZSB0aGF0IG5vdCBhbGwgUFBUUCBtb2RlcyBvZiBvcGVyYXRpb24gYXJlIHN1cHBvcnRlZCB5ZXQuCisJICBTcGVjaWZpY2FsbHkgdGhlc2UgbGltaXRhdGlvbnMgZXhpc3Q6CisJICAgIC0gQmxpbmR5IGFzc3VtZXMgdGhhdCBjb250cm9sIGNvbm5lY3Rpb25zIGFyZSBhbHdheXMgZXN0YWJsaXNoZWQKKwkgICAgICBpbiBQTlMtPlBBQyBkaXJlY3Rpb24uIFRoaXMgaXMgYSB2aW9sYXRpb24gb2YgUkZDMjYzNy4KKwkgICAgLSBPbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGNhbGwgd2l0aGluIGVhY2ggc2Vzc2lvbgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIE5GX0NPTk5UUkFDS19TSVAKKwl0cmlzdGF0ZSAiU0lQIHByb3RvY29sIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTkZfQ09OTlRSQUNLCisJaGVscAorCSAgU0lQIGlzIGFuIGFwcGxpY2F0aW9uLWxheWVyIGNvbnRyb2wgcHJvdG9jb2wgdGhhdCBjYW4gZXN0YWJsaXNoLAorCSAgbW9kaWZ5LCBhbmQgdGVybWluYXRlIG11bHRpbWVkaWEgc2Vzc2lvbnMgKGNvbmZlcmVuY2VzKSBzdWNoIGFzCisJICBJbnRlcm5ldCB0ZWxlcGhvbnkgY2FsbHMuIFdpdGggdGhlIGlwX2Nvbm50cmFja19zaXAgYW5kCisJICB0aGUgbmZfbmF0X3NpcCBtb2R1bGVzIHlvdSBjYW4gc3VwcG9ydCB0aGUgcHJvdG9jb2wgb24gYSBjb25uZWN0aW9uCisJICB0cmFja2luZy9OQVRpbmcgZmlyZXdhbGwuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgTkZfQ09OTlRSQUNLX1RGVFAKKwl0cmlzdGF0ZSAiVEZUUCBwcm90b2NvbCBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE5GX0NPTk5UUkFDSworCWhlbHAKKwkgIFRGVFAgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIsIHRoaXMgaXMgcmVxdWlyZWQgZGVwZW5kaW5nCisJICBvbiBob3cgcmVzdHJpY3RpdmUgeW91ciBydWxlc2V0IGlzLgorCSAgSWYgeW91IGFyZSB1c2luZyBhIHRmdHAgY2xpZW50IGJlaGluZCAtaiBTTkFUIG9yIC1qIE1BU1FVRVJBRElORworCSAgeW91IHdpbGwgbmVlZCB0aGlzLgorCisJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE5GX0NUX05FVExJTksKIAl0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSAoRVhQRVJJTUVOVEFMKScKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBORl9DT05OVFJBQ0sgJiYgTkVURklMVEVSX05FVExJTksKQEAgLTE4NCw2ICszMzYsMTcgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HCisJdHJpc3RhdGUgJyJORkxPRyIgdGFyZ2V0IHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIE5GTE9HIHRhcmdldCwgd2hpY2ggYWxsb3dzIHRvIExPRworCSAgbWVzc2FnZXMgdGhyb3VnaCB0aGUgbmV0ZmlsdGVyIGxvZ2dpbmcgQVBJLCB3aGljaCBjYW4gdXNlCisJICBlaXRoZXIgdGhlIG9sZCBMT0cgdGFyZ2V0LCB0aGUgb2xkIFVMT0cgdGFyZ2V0IG9yIG5mbmV0bGlua19sb2cKKwkgIGFzIGJhY2tlbmQuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLCiAJdHJpc3RhdGUgICciTk9UUkFDSyIgdGFyZ2V0IHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRBQkxFUwpAQCAtNDY0LDUgKzYyNywxOSBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQKKwl0cmlzdGF0ZSAnImhhc2hsaW1pdCIgbWF0Y2ggc3VwcG9ydCcKKwlkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBoYXNobGltaXQnIG1hdGNoLgorCisJICBBcyBvcHBvc2VkIHRvIGBsaW1pdCcsIHRoaXMgbWF0Y2ggZHluYW1pY2FsbHkgY3JlYXRlcyBhIGhhc2ggdGFibGUKKwkgIG9mIGxpbWl0IGJ1Y2tldHMsIGJhc2VkIG9uIHlvdXIgc2VsZWN0aW9uIG9mIHNvdXJjZS9kZXN0aW5hdGlvbgorCSAgYWRkcmVzc2VzIGFuZC9vciBwb3J0cy4KKworCSAgSXQgZW5hYmxlcyB5b3UgdG8gZXhwcmVzcyBwb2xpY2llcyBsaWtlIGAxMGtwcHMgZm9yIGFueSBnaXZlbgorCSAgZGVzdGluYXRpb24gYWRkcmVzcycgb3IgYDUwMHBwcyBmcm9tIGFueSBnaXZlbiBzb3VyY2UgYWRkcmVzcycKKwkgIHdpdGggYSBzaW5nbGUgcnVsZS4KKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCBhNzRiZTQ5Li41ZGM1NTc0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTEsNyArMSwxMCBAQAogbmV0ZmlsdGVyLW9ianMgOj0gY29yZS5vIG5mX2xvZy5vIG5mX3F1ZXVlLm8gbmZfc29ja29wdC5vCi1uZl9jb25udHJhY2stb2Jqcwk6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5vIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5vIG5mX2Nvbm50cmFja19wcm90b191ZHAubworCituZl9jb25udHJhY2steQk6PSBuZl9jb25udHJhY2tfY29yZS5vIG5mX2Nvbm50cmFja19zdGFuZGFsb25lLm8gbmZfY29ubnRyYWNrX2V4cGVjdC5vIG5mX2Nvbm50cmFja19oZWxwZXIubyBuZl9jb25udHJhY2tfcHJvdG8ubyBuZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLm8gbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMubyBuZl9jb25udHJhY2tfcHJvdG9fdGNwLm8gbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5vCituZl9jb25udHJhY2stJChDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUykgKz0gbmZfY29ubnRyYWNrX2VjYWNoZS5vCiAKIG9iai0kKENPTkZJR19ORVRGSUxURVIpID0gbmV0ZmlsdGVyLm8KK29iai0kKENPTkZJR19TWVNDVEwpICs9IG5mX3N5c2N0bC5vCiAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOSykgKz0gbmZuZXRsaW5rLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSkgKz0gbmZuZXRsaW5rX3F1ZXVlLm8KQEAgLTExLDEzICsxNCwyMyBAQAogb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm8KIAogIyBTQ1RQIHByb3RvY29sIGNvbm5lY3Rpb24gdHJhY2tpbmcKK29iai0kKENPTkZJR19ORl9DVF9QUk9UT19HUkUpICs9IG5mX2Nvbm50cmFja19wcm90b19ncmUubwogb2JqLSQoQ09ORklHX05GX0NUX1BST1RPX1NDVFApICs9IG5mX2Nvbm50cmFja19wcm90b19zY3RwLm8KIAogIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrCiBvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsubwogCiAjIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVycworbmZfY29ubnRyYWNrX2gzMjMtb2JqcyA6PSBuZl9jb25udHJhY2tfaDMyM19tYWluLm8gbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5vCisKK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBKSArPSBuZl9jb25udHJhY2tfYW1hbmRhLm8KIG9iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfRlRQKSArPSBuZl9jb25udHJhY2tfZnRwLm8KK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfSDMyMykgKz0gbmZfY29ubnRyYWNrX2gzMjMubworb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19JUkMpICs9IG5mX2Nvbm50cmFja19pcmMubworb2JqLSQoQ09ORklHX05GX0NPTk5UUkFDS19ORVRCSU9TX05TKSArPSBuZl9jb25udHJhY2tfbmV0Ymlvc19ucy5vCitvYmotJChDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFApICs9IG5mX2Nvbm50cmFja19wcHRwLm8KK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfU0lQKSArPSBuZl9jb25udHJhY2tfc2lwLm8KK29iai0kKENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUCkgKz0gbmZfY29ubnRyYWNrX3RmdHAubwogCiAjIGdlbmVyaWMgWCB0YWJsZXMgCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUQUJMRVMpICs9IHhfdGFibGVzLm8geHRfdGNwdWRwLm8KQEAgLTI4LDYgKzQxLDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1ApICs9IHh0X0RTQ1Aubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSykgKz0geHRfTUFSSy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFKSArPSB4dF9ORlFVRVVFLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GTE9HKSArPSB4dF9ORkxPRy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLKSArPSB4dF9OT1RSQUNLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1NFQ01BUkspICs9IHh0X1NFQ01BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KQEAgLTU2LDMgKzcwLDQgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HKSArPSB4dF9zdHJpbmcubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MpICs9IHh0X3RjcG1zcy5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVYpICs9IHh0X3BoeXNkZXYubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQpICs9IHh0X2hhc2hsaW1pdC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IGQ4MGI5MzUuLjI5MWI4YzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soYWZpbmZvX2xvY2spOwogCi1zdHJ1Y3QgbmZfYWZpbmZvICpuZl9hZmluZm9bTlBST1RPXTsKK3N0cnVjdCBuZl9hZmluZm8gKm5mX2FmaW5mb1tOUFJPVE9dIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKG5mX2FmaW5mbyk7CiAKIGludCBuZl9yZWdpc3Rlcl9hZmluZm8oc3RydWN0IG5mX2FmaW5mbyAqYWZpbmZvKQpAQCAtNTQsNyArNTQsNyBAQAogICogb2Ygc2tidWZmcyBxdWV1ZWQgZm9yIHVzZXJzcGFjZSwgYW5kIG5vdCBkZXJlZ2lzdGVyIGEgaG9vayB1bmxlc3MKICAqIHRoaXMgaXMgemVybywgYnV0IHRoYXQgc3Vja3MuICBOb3csIHdlIHNpbXBseSBjaGVjayB3aGVuIHRoZQogICogcGFja2V0cyBjb21lIGJhY2s6IGlmIHRoZSBob29rIGlzIGdvbmUsIHRoZSBwYWNrZXQgaXMgZGlzY2FyZGVkLiAqLwotc3RydWN0IGxpc3RfaGVhZCBuZl9ob29rc1tOUFJPVE9dW05GX01BWF9IT09LU107CitzdHJ1Y3QgbGlzdF9oZWFkIG5mX2hvb2tzW05QUk9UT11bTkZfTUFYX0hPT0tTXSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChuZl9ob29rcyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mX2hvb2tfbG9jayk7CiAKQEAgLTIyMiwyOCArMjIyLDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MKHNrYl9tYWtlX3dyaXRhYmxlKTsKIAotdV9pbnQxNl90IG5mX2NzdW1fdXBkYXRlKHVfaW50MzJfdCBvbGR2YWwsIHVfaW50MzJfdCBuZXd2YWwsIHVfaW50MzJfdCBjc3VtKQordm9pZCBuZl9wcm90b19jc3VtX3JlcGxhY2U0KF9fc3VtMTYgKnN1bSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBfX2JlMzIgZnJvbSwgX19iZTMyIHRvLCBpbnQgcHNldWRvaGRyKQogewotCXVfaW50MzJfdCBkaWZmW10gPSB7IG9sZHZhbCwgbmV3dmFsIH07Ci0KLQlyZXR1cm4gY3N1bV9mb2xkKGNzdW1fcGFydGlhbCgoY2hhciAqKWRpZmYsIHNpemVvZihkaWZmKSwgfmNzdW0pKTsKLX0KLUVYUE9SVF9TWU1CT0wobmZfY3N1bV91cGRhdGUpOwotCi11X2ludDE2X3QgbmZfcHJvdG9fY3N1bV91cGRhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgICB1X2ludDMyX3Qgb2xkdmFsLCB1X2ludDMyX3QgbmV3dmFsLAotCQkJICAgICAgIHVfaW50MTZfdCBjc3VtLCBpbnQgcHNldWRvaGRyKQoteworCV9fYmUzMiBkaWZmW10gPSB7IH5mcm9tLCB0byB9OwogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCWNzdW0gPSBuZl9jc3VtX3VwZGF0ZShvbGR2YWwsIG5ld3ZhbCwgY3N1bSk7CisJCSpzdW0gPSBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKChjaGFyICopZGlmZiwgc2l6ZW9mKGRpZmYpLAorCQkJCX5jc3VtX3VuZm9sZCgqc3VtKSkpOwogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fQ09NUExFVEUgJiYgcHNldWRvaGRyKQotCQkJc2tiLT5jc3VtID0gbmZfY3N1bV91cGRhdGUob2xkdmFsLCBuZXd2YWwsIHNrYi0+Y3N1bSk7CisJCQlza2ItPmNzdW0gPSB+Y3N1bV9wYXJ0aWFsKChjaGFyICopZGlmZiwgc2l6ZW9mKGRpZmYpLAorCQkJCQkJfnNrYi0+Y3N1bSk7CiAJfSBlbHNlIGlmIChwc2V1ZG9oZHIpCi0JCWNzdW0gPSB+bmZfY3N1bV91cGRhdGUob2xkdmFsLCBuZXd2YWwsIH5jc3VtKTsKLQotCXJldHVybiBjc3VtOworCQkqc3VtID0gfmNzdW1fZm9sZChjc3VtX3BhcnRpYWwoKGNoYXIgKilkaWZmLCBzaXplb2YoZGlmZiksCisJCQkJY3N1bV91bmZvbGQoKnN1bSkpKTsKIH0KLUVYUE9SVF9TWU1CT0wobmZfcHJvdG9fY3N1bV91cGRhdGUpOworRVhQT1JUX1NZTUJPTChuZl9wcm90b19jc3VtX3JlcGxhY2U0KTsKIAogLyogVGhpcyBkb2VzIG5vdCBiZWxvbmcgaGVyZSwgYnV0IGxvY2FsbHkgZ2VuZXJhdGVkIGVycm9ycyBuZWVkIGl0IGlmIGNvbm5lY3Rpb24KICAgIHRyYWNraW5nIGluIHVzZTogd2l0aG91dCB0aGlzLCBjb25uZWN0aW9uIG1heSBub3QgYmUgaW4gaGFzaCB0YWJsZSwgYW5kIGhlbmNlCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODY5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYwpAQCAtMCwwICsxLDIzOCBAQAorLyogQW1hbmRhIGV4dGVuc2lvbiBmb3IgSVAgY29ubmVjdGlvbiB0cmFja2luZworICoKKyAqIChDKSAyMDAyIGJ5IEJyaWFuIEouIE11cnJlbGwgPG5ldGZpbHRlckBpbnRlcmxpbnguYmMuY2E+CisgKiBiYXNlZCBvbiBIVydzIGlwX2Nvbm50cmFja19pcmMuYyBhcyB3ZWxsIGFzIG90aGVyIG1vZHVsZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC90ZXh0c2VhcmNoLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBtYXN0ZXJfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAwOworc3RhdGljIGNoYXIgKnRzX2FsZ28gPSAia21wIjsKKworTU9EVUxFX0FVVEhPUigiQnJpYW4gSi4gTXVycmVsbCA8bmV0ZmlsdGVyQGludGVybGlueC5iYy5jYT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQW1hbmRhIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja19hbWFuZGEiKTsKKworbW9kdWxlX3BhcmFtKG1hc3Rlcl90aW1lb3V0LCB1aW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWFzdGVyX3RpbWVvdXQsICJ0aW1lb3V0IGZvciB0aGUgbWFzdGVyIGNvbm5lY3Rpb24iKTsKK21vZHVsZV9wYXJhbSh0c19hbGdvLCBjaGFycCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRzX2FsZ28sICJ0ZXh0c2VhcmNoIGFsZ29yaXRobSB0byB1c2UgKGRlZmF1bHQga21wKSIpOworCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfYW1hbmRhX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAorCQkJCSAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCisJCQkJICAgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9hbWFuZGFfaG9vayk7CisKK2VudW0gYW1hbmRhX3N0cmluZ3MgeworCVNFQVJDSF9DT05ORUNULAorCVNFQVJDSF9ORVdMSU5FLAorCVNFQVJDSF9EQVRBLAorCVNFQVJDSF9NRVNHLAorCVNFQVJDSF9JTkRFWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNoYXIJCQkqc3RyaW5nOworCXNpemVfdAkJCWxlbjsKKwlzdHJ1Y3QgdHNfY29uZmlnCSp0czsKK30gc2VhcmNoW10gX19yZWFkX21vc3RseSA9IHsKKwlbU0VBUkNIX0NPTk5FQ1RdID0geworCQkuc3RyaW5nCT0gIkNPTk5FQ1QgIiwKKwkJLmxlbgk9IDgsCisJfSwKKwlbU0VBUkNIX05FV0xJTkVdID0geworCQkuc3RyaW5nCT0gIlxuIiwKKwkJLmxlbgk9IDEsCisJfSwKKwlbU0VBUkNIX0RBVEFdID0geworCQkuc3RyaW5nCT0gIkRBVEEgIiwKKwkJLmxlbgk9IDUsCisJfSwKKwlbU0VBUkNIX01FU0ddID0geworCQkuc3RyaW5nCT0gIk1FU0cgIiwKKwkJLmxlbgk9IDUsCisJfSwKKwlbU0VBUkNIX0lOREVYXSA9IHsKKwkJLnN0cmluZyA9ICJJTkRFWCAiLAorCQkubGVuCT0gNiwKKwl9LAorfTsKKworc3RhdGljIGludCBhbWFuZGFfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0cnVjdCB0c19zdGF0ZSB0czsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlOworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBzdGFydCwgc3RvcCwgb2ZmLCBpOworCWNoYXIgcGJ1ZltzaXplb2YoIjY1NTM1IildLCAqdG1wOworCXVfaW50MTZfdCBsZW47CisJX19iZTE2IHBvcnQ7CisJaW50IGZhbWlseSA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW07CisJaW50IHJldCA9IE5GX0FDQ0VQVDsKKwl0eXBlb2YobmZfbmF0X2FtYW5kYV9ob29rKSBuZl9uYXRfYW1hbmRhOworCisJLyogT25seSBsb29rIGF0IHBhY2tldHMgZnJvbSB0aGUgQW1hbmRhIHNlcnZlciAqLworCWlmIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJLyogaW5jcmVhc2UgdGhlIFVEUCB0aW1lb3V0IG9mIHRoZSBtYXN0ZXIgY29ubmVjdGlvbiBhcyByZXBsaWVzIGZyb20KKwkgKiBBbWFuZGEgY2xpZW50cyB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWl0ZSBkZWxheWVkICovCisJbmZfY3RfcmVmcmVzaChjdCwgKnBza2IsIG1hc3Rlcl90aW1lb3V0ICogSFopOworCisJLyogTm8gZGF0YT8gKi8KKwlkYXRhb2ZmID0gcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlpZiAoZGF0YW9mZiA+PSAoKnBza2IpLT5sZW4pIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygiYW1hbmRhX2hlbHA6IHNrYmxlbiA9ICV1XG4iLCAoKnBza2IpLT5sZW4pOworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCW1lbXNldCgmdHMsIDAsIHNpemVvZih0cykpOworCXN0YXJ0ID0gc2tiX2ZpbmRfdGV4dCgqcHNrYiwgZGF0YW9mZiwgKCpwc2tiKS0+bGVuLAorCQkJICAgICAgc2VhcmNoW1NFQVJDSF9DT05ORUNUXS50cywgJnRzKTsKKwlpZiAoc3RhcnQgPT0gVUlOVF9NQVgpCisJCWdvdG8gb3V0OworCXN0YXJ0ICs9IGRhdGFvZmYgKyBzZWFyY2hbU0VBUkNIX0NPTk5FQ1RdLmxlbjsKKworCW1lbXNldCgmdHMsIDAsIHNpemVvZih0cykpOworCXN0b3AgPSBza2JfZmluZF90ZXh0KCpwc2tiLCBzdGFydCwgKCpwc2tiKS0+bGVuLAorCQkJICAgICBzZWFyY2hbU0VBUkNIX05FV0xJTkVdLnRzLCAmdHMpOworCWlmIChzdG9wID09IFVJTlRfTUFYKQorCQlnb3RvIG91dDsKKwlzdG9wICs9IHN0YXJ0OworCisJZm9yIChpID0gU0VBUkNIX0RBVEE7IGkgPD0gU0VBUkNIX0lOREVYOyBpKyspIHsKKwkJbWVtc2V0KCZ0cywgMCwgc2l6ZW9mKHRzKSk7CisJCW9mZiA9IHNrYl9maW5kX3RleHQoKnBza2IsIHN0YXJ0LCBzdG9wLCBzZWFyY2hbaV0udHMsICZ0cyk7CisJCWlmIChvZmYgPT0gVUlOVF9NQVgpCisJCQljb250aW51ZTsKKwkJb2ZmICs9IHN0YXJ0ICsgc2VhcmNoW2ldLmxlbjsKKworCQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemVvZihwYnVmKSAtIDEsIHN0b3AgLSBvZmYpOworCQlpZiAoc2tiX2NvcHlfYml0cygqcHNrYiwgb2ZmLCBwYnVmLCBsZW4pKQorCQkJYnJlYWs7CisJCXBidWZbbGVuXSA9ICdcMCc7CisKKwkJcG9ydCA9IGh0b25zKHNpbXBsZV9zdHJ0b3VsKHBidWYsICZ0bXAsIDEwKSk7CisJCWxlbiA9IHRtcCAtIHBidWY7CisJCWlmIChwb3J0ID09IDAgfHwgbGVuID4gNSkKKwkJCWJyZWFrOworCisJCWV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpOworCQlpZiAoZXhwID09IE5VTEwpIHsKKwkJCXJldCA9IE5GX0RST1A7CisJCQlnb3RvIG91dDsKKwkJfQorCQl0dXBsZSA9ICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGU7CisJCW5mX2Nvbm50cmFja19leHBlY3RfaW5pdChleHAsIGZhbWlseSwKKwkJCQkJICZ0dXBsZS0+c3JjLnUzLCAmdHVwbGUtPmRzdC51MywKKwkJCQkJIElQUFJPVE9fVENQLCBOVUxMLCAmcG9ydCk7CisKKwkJbmZfbmF0X2FtYW5kYSA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfYW1hbmRhX2hvb2spOworCQlpZiAobmZfbmF0X2FtYW5kYSAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQorCQkJcmV0ID0gbmZfbmF0X2FtYW5kYShwc2tiLCBjdGluZm8sIG9mZiAtIGRhdGFvZmYsCisJCQkJCSAgICBsZW4sIGV4cCk7CisJCWVsc2UgaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApICE9IDApCisJCQlyZXQgPSBORl9EUk9QOworCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBhbWFuZGFfaGVscGVyWzJdIF9fcmVhZF9tb3N0bHkgPSB7CisJeworCQkubmFtZQkJCT0gImFtYW5kYSIsCisJCS5tYXhfZXhwZWN0ZWQJCT0gMywKKwkJLnRpbWVvdXQJCT0gMTgwLAorCQkubWUJCQk9IFRISVNfTU9EVUxFLAorCQkuaGVscAkJCT0gYW1hbmRhX2hlbHAsCisJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDEwMDgwKSwKKwkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAorCQkubWFzay5zcmMubDNudW0JCT0gMHhGRkZGLAorCQkubWFzay5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKSwKKwkJLm1hc2suZHN0LnByb3RvbnVtCT0gMHhGRiwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJhbWFuZGEiLAorCQkubWF4X2V4cGVjdGVkCQk9IDMsCisJCS50aW1lb3V0CQk9IDE4MCwKKwkJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkJLmhlbHAJCQk9IGFtYW5kYV9oZWxwLAorCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMTAwODApLAorCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCisJCS5tYXNrLnNyYy5sM251bQkJPSAweEZGRkYsCisJCS5tYXNrLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygweEZGRkYpLAorCQkubWFzay5kc3QucHJvdG9udW0JPSAweEZGLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2FtYW5kYV9maW5pKHZvaWQpCit7CisJaW50IGk7CisKKwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJmFtYW5kYV9oZWxwZXJbMF0pOworCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmYW1hbmRhX2hlbHBlclsxXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoKTsgaSsrKQorCQl0ZXh0c2VhcmNoX2Rlc3Ryb3koc2VhcmNoW2ldLnRzKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2FtYW5kYV9pbml0KHZvaWQpCit7CisJaW50IHJldCwgaTsKKworCXJldCA9IC1FTk9NRU07CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2VhcmNoKTsgaSsrKSB7CisJCXNlYXJjaFtpXS50cyA9IHRleHRzZWFyY2hfcHJlcGFyZSh0c19hbGdvLCBzZWFyY2hbaV0uc3RyaW5nLAorCQkJCQkJICBzZWFyY2hbaV0ubGVuLAorCQkJCQkJICBHRlBfS0VSTkVMLCBUU19BVVRPTE9BRCk7CisJCWlmIChzZWFyY2hbaV0udHMgPT0gTlVMTCkKKwkJCWdvdG8gZXJyMTsKKwl9CisJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmYW1hbmRhX2hlbHBlclswXSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyMTsKKwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZhbWFuZGFfaGVscGVyWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnIyOworCXJldHVybiAwOworCitlcnIyOgorCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmYW1hbmRhX2hlbHBlclswXSk7CitlcnIxOgorCWZvciAoOyBpID49IDA7IGktLSkgeworCQlpZiAoc2VhcmNoW2ldLnRzKQorCQkJdGV4dHNlYXJjaF9kZXN0cm95KHNlYXJjaFtpXS50cyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK21vZHVsZV9pbml0KG5mX2Nvbm50cmFja19hbWFuZGFfaW5pdCk7Cittb2R1bGVfZXhpdChuZl9jb25udHJhY2tfYW1hbmRhX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCmluZGV4IGRlMDU2N2IuLmVhYTBmOGEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKQEAgLTQ2LDE1ICs0NiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotCi0vKiBUaGlzIHJ3bG9jayBwcm90ZWN0cyB0aGUgbWFpbiBoYXNoIHRhYmxlLCBwcm90b2NvbC9oZWxwZXIvZXhwZWN0ZWQKLSAgIHJlZ2lzdHJhdGlvbnMsIGNvbm50cmFjayB0aW1lcnMqLwotI2RlZmluZSBBU1NFUlRfUkVBRF9MT0NLKHgpCi0jZGVmaW5lIEFTU0VSVF9XUklURV9MT0NLKHgpCisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgotI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KIApAQCAtNjcsOTIgKzY0LDMyIEBACiAjZW5kaWYKIAogREVGSU5FX1JXTE9DSyhuZl9jb25udHJhY2tfbG9jayk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbG9jayk7CiAKIC8qIG5mX2Nvbm50cmFja19zdGFuZGFsb25lIG5lZWRzIHRoaXMgKi8KIGF0b21pY190IG5mX2Nvbm50cmFja19jb3VudCA9IEFUT01JQ19JTklUKDApOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NvdW50KTsKIAotdm9pZCAoKm5mX2Nvbm50cmFja19kZXN0cm95ZWQpKHN0cnVjdCBuZl9jb25uICpjb25udHJhY2spID0gTlVMTDsKLUxJU1RfSEVBRChuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QpOwotc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqKm5mX2N0X3Byb3Rvc1tQRl9NQVhdIF9fcmVhZF9tb3N0bHk7Ci1zdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKm5mX2N0X2wzcHJvdG9zW1BGX01BWF0gX19yZWFkX21vc3RseTsKLXN0YXRpYyBMSVNUX0hFQUQoaGVscGVycyk7Ci11bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIF9fcmVhZF9tb3N0bHkgPSAwOwordm9pZCAoKm5mX2Nvbm50cmFja19kZXN0cm95ZWQpKHN0cnVjdCBuZl9jb25uICpjb25udHJhY2spOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2Rlc3Ryb3llZCk7CisKK3Vuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7CisKIGludCBuZl9jb25udHJhY2tfbWF4IF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbWF4KTsKKwogc3RydWN0IGxpc3RfaGVhZCAqbmZfY29ubnRyYWNrX2hhc2ggX19yZWFkX21vc3RseTsKLXN0YXRpYyBrbWVtX2NhY2hlX3QgKm5mX2Nvbm50cmFja19leHBlY3RfY2FjaGVwIF9fcmVhZF9tb3N0bHk7Ci1zdHJ1Y3QgbmZfY29ubiBuZl9jb25udHJhY2tfdW50cmFja2VkOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hhc2gpOworCitzdHJ1Y3QgbmZfY29ubiBuZl9jb25udHJhY2tfdW50cmFja2VkIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfdW50cmFja2VkKTsKKwogdW5zaWduZWQgaW50IG5mX2N0X2xvZ19pbnZhbGlkIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMgTElTVF9IRUFEKHVuY29uZmlybWVkKTsKK0xJU1RfSEVBRCh1bmNvbmZpcm1lZCk7CiBzdGF0aWMgaW50IG5mX2Nvbm50cmFja192bWFsbG9jIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX25leHRfaWQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19leHBlY3RfbmV4dF9pZDsKLSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUwotQVRPTUlDX05PVElGSUVSX0hFQUQobmZfY29ubnRyYWNrX2NoYWluKTsKLUFUT01JQ19OT1RJRklFUl9IRUFEKG5mX2Nvbm50cmFja19leHBlY3RfY2hhaW4pOwotCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSwgbmZfY29ubnRyYWNrX2VjYWNoZSk7Ci0KLS8qIGRlbGl2ZXIgY2FjaGVkIGV2ZW50cyBhbmQgY2xlYXIgY2FjaGUgZW50cnkgLSBtdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2FsbHkKLSAqIGRpc2FibGVkIHNvZnRpcnFzICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9fbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGUpCi17Ci0JREVCVUdQKCJlY2FjaGU6IGRlbGl2ZXJpbmcgZXZlbnRzIGZvciAlcFxuIiwgZWNhY2hlLT5jdCk7Ci0JaWYgKG5mX2N0X2lzX2NvbmZpcm1lZChlY2FjaGUtPmN0KSAmJiAhbmZfY3RfaXNfZHlpbmcoZWNhY2hlLT5jdCkKLQkgICAgJiYgZWNhY2hlLT5ldmVudHMpCi0JCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZuZl9jb25udHJhY2tfY2hhaW4sIGVjYWNoZS0+ZXZlbnRzLAotCQkJCSAgICBlY2FjaGUtPmN0KTsKLQotCWVjYWNoZS0+ZXZlbnRzID0gMDsKLQluZl9jdF9wdXQoZWNhY2hlLT5jdCk7Ci0JZWNhY2hlLT5jdCA9IE5VTEw7Ci19Ci0KLS8qIERlbGl2ZXIgYWxsIGNhY2hlZCBldmVudHMgZm9yIGEgcGFydGljdWxhciBjb25udHJhY2suIFRoaXMgaXMgY2FsbGVkCi0gKiBieSBjb2RlIHByaW9yIHRvIGFzeW5jIHBhY2tldCBoYW5kbGluZyBmb3IgZnJlZWluZyB0aGUgc2tiICovCi12b2lkIG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKLQotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQllY2FjaGUgPSAmX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfZWNhY2hlKTsKLQlpZiAoZWNhY2hlLT5jdCA9PSBjdCkKLQkJX19uZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoZWNhY2hlKTsKLQlsb2NhbF9iaF9lbmFibGUoKTsKLX0KLQotLyogRGVsaXZlciBjYWNoZWQgZXZlbnRzIGZvciBvbGQgcGVuZGluZyBldmVudHMsIGlmIGN1cnJlbnQgY29ubnRyYWNrICE9IG9sZCAqLwotdm9pZCBfX25mX2N0X2V2ZW50X2NhY2hlX2luaXQoc3RydWN0IG5mX2Nvbm4gKmN0KQotewotCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7Ci0JCi0JLyogdGFrZSBjYXJlIG9mIGRlbGl2ZXJpbmcgcG90ZW50aWFsbHkgb2xkIGV2ZW50cyAqLwotCWVjYWNoZSA9ICZfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19lY2FjaGUpOwotCUJVR19PTihlY2FjaGUtPmN0ID09IGN0KTsKLQlpZiAoZWNhY2hlLT5jdCkKLQkJX19uZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoZWNhY2hlKTsKLQkvKiBpbml0aWFsaXplIGZvciB0aGlzIGNvbm50cmFjay9wYWNrZXQgKi8KLQllY2FjaGUtPmN0ID0gY3Q7Ci0JbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwotfQotCi0vKiBmbHVzaCB0aGUgZXZlbnQgY2FjaGUgLSB0b3VjaGVzIG90aGVyIENQVSdzIGRhdGEgYW5kIG11c3Qgbm90IGJlIGNhbGxlZAotICogd2hpbGUgcGFja2V0cyBhcmUgc3RpbGwgcGFzc2luZyB0aHJvdWdoIHRoZSBjb2RlICovCi1zdGF0aWMgdm9pZCBuZl9jdF9ldmVudF9jYWNoZV9mbHVzaCh2b2lkKQotewotCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJZWNhY2hlID0gJnBlcl9jcHUobmZfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKLQkJaWYgKGVjYWNoZS0+Y3QpCi0JCQluZl9jdF9wdXQoZWNhY2hlLT5jdCk7Ci0JfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jdF9ldmVudF9jYWNoZV9mbHVzaCh2b2lkKSB7fQotI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTICovCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcF9jb25udHJhY2tfc3RhdCwgbmZfY29ubnRyYWNrX3N0YXQpOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKG5mX2Nvbm50cmFja19zdGF0KTsKQEAgLTE4NCw4NSArMTIxLDYgQEAKIC8qIFRoaXMgYXZvaWRzIGNhbGxpbmcga21lbV9jYWNoZV9jcmVhdGUoKSB3aXRoIHNhbWUgbmFtZSBzaW11bHRhbmVvdXNseSAqLwogc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9jYWNoZV9tdXRleCk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sOwotc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqCi1fX25mX2N0X3Byb3RvX2ZpbmQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IHByb3RvY29sKQotewotCWlmICh1bmxpa2VseShsM3Byb3RvID49IEFGX01BWCB8fCBuZl9jdF9wcm90b3NbbDNwcm90b10gPT0gTlVMTCkpCi0JCXJldHVybiAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7Ci0KLQlyZXR1cm4gbmZfY3RfcHJvdG9zW2wzcHJvdG9dW3Byb3RvY29sXTsKLX0KLQotLyogdGhpcyBpcyBndWFyYW50ZWVkIHRvIGFsd2F5cyByZXR1cm4gYSB2YWxpZCBwcm90b2NvbCBoZWxwZXIsIHNpbmNlCi0gKiBpdCBmYWxscyBiYWNrIHRvIGdlbmVyaWNfcHJvdG9jb2wgKi8KLXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKgotbmZfY3RfcHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IHByb3RvY29sKQotewotCXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnA7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlwID0gX19uZl9jdF9wcm90b19maW5kKGwzcHJvdG8sIHByb3RvY29sKTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJcCA9ICZuZl9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbDsKLQlwcmVlbXB0X2VuYWJsZSgpOwotCQotCXJldHVybiBwOwotfQotCi12b2lkIG5mX2N0X3Byb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwKQotewotCW1vZHVsZV9wdXQocC0+bWUpOwotfQotCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKgotbmZfY3RfbDNwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bykKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKnA7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlwID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQobDNwcm90byk7Ci0JaWYgKCF0cnlfbW9kdWxlX2dldChwLT5tZSkpCi0JCXAgPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfbDNwcm90bzsKLQlwcmVlbXB0X2VuYWJsZSgpOwotCi0JcmV0dXJuIHA7Ci19Ci0KLXZvaWQgbmZfY3RfbDNwcm90b19wdXQoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwKQotewotCW1vZHVsZV9wdXQocC0+bWUpOwotfQotCi1pbnQKLW5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQodW5zaWduZWQgc2hvcnQgbDNwcm90bykKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcDsKLQotcmV0cnk6CXAgPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KGwzcHJvdG8pOwotCWlmIChwID09ICZuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvKSB7Ci0JCXJldCA9IHJlcXVlc3RfbW9kdWxlKCJuZl9jb25udHJhY2stJWQiLCBsM3Byb3RvKTsKLQkJaWYgKCFyZXQpCi0JCQlnb3RvIHJldHJ5OwotCi0JCXJldHVybiAtRVBST1RPVFlQRTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBuZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQodW5zaWduZWQgc2hvcnQgbDNwcm90bykKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKnA7Ci0KLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlwID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQobDNwcm90byk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKLQotCW1vZHVsZV9wdXQocC0+bWUpOwotfQotCiBzdGF0aWMgaW50IG5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkOwogc3RhdGljIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaGFzaF9ybmQ7CiAKQEAgLTM2Myw2ICsyMjEsNyBAQAogCW11dGV4X3VubG9jaygmbmZfY3RfY2FjaGVfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfcmVnaXN0ZXJfY2FjaGUpOwogCiAvKiBGSVhNRTogSW4gdGhlIGN1cnJlbnQsIG9ubHkgbmZfY29ubnRyYWNrX2NsZWFudXAoKSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uLiAqLwogdm9pZCBuZl9jb25udHJhY2tfdW5yZWdpc3Rlcl9jYWNoZSh1X2ludDMyX3QgZmVhdHVyZXMpCkBAIC0zOTcsNiArMjU2LDcgQEAKIAogCW11dGV4X3VubG9jaygmbmZfY3RfY2FjaGVfbXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX3VucmVnaXN0ZXJfY2FjaGUpOwogCiBpbnQKIG5mX2N0X2dldF90dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNDA2LDcgKzI2Niw3IEBACiAJCXVfaW50OF90IHByb3RvbnVtLAogCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvLAotCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90b2NvbCkKKwkJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvKQogewogCU5GX0NUX1RVUExFX1VfQkxBTksodHVwbGUpOwogCkBAIC00MTcsMTQgKzI3NywxNSBAQAogCXR1cGxlLT5kc3QucHJvdG9udW0gPSBwcm90b251bTsKIAl0dXBsZS0+ZHN0LmRpciA9IElQX0NUX0RJUl9PUklHSU5BTDsKIAotCXJldHVybiBwcm90b2NvbC0+cGt0X3RvX3R1cGxlKHNrYiwgZGF0YW9mZiwgdHVwbGUpOworCXJldHVybiBsNHByb3RvLT5wa3RfdG9fdHVwbGUoc2tiLCBkYXRhb2ZmLCB0dXBsZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9nZXRfdHVwbGUpOwogCiBpbnQKIG5mX2N0X2ludmVydF90dXBsZShzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvY29sKQorCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8pCiB7CiAJTkZfQ1RfVFVQTEVfVV9CTEFOSyhpbnZlcnNlKTsKIApAQCAtNDM1LDExMSArMjk2LDE0IEBACiAJaW52ZXJzZS0+ZHN0LmRpciA9ICFvcmlnLT5kc3QuZGlyOwogCiAJaW52ZXJzZS0+ZHN0LnByb3RvbnVtID0gb3JpZy0+ZHN0LnByb3RvbnVtOwotCXJldHVybiBwcm90b2NvbC0+aW52ZXJ0X3R1cGxlKGludmVyc2UsIG9yaWcpOworCXJldHVybiBsNHByb3RvLT5pbnZlcnRfdHVwbGUoaW52ZXJzZSwgb3JpZyk7CiB9Ci0KLS8qIG5mX2Nvbm50cmFja19leHBlY3QgaGVscGVyIGZ1bmN0aW9ucyAqLwotdm9pZCBuZl9jdF91bmxpbmtfZXhwZWN0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCi17Ci0Jc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAgPSBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpOwotCi0JTkZfQ1RfQVNTRVJUKG1hc3Rlcl9oZWxwKTsKLQlBU1NFUlRfV1JJVEVfTE9DSygmbmZfY29ubnRyYWNrX2xvY2spOwotCU5GX0NUX0FTU0VSVCghdGltZXJfcGVuZGluZygmZXhwLT50aW1lb3V0KSk7Ci0KLQlsaXN0X2RlbCgmZXhwLT5saXN0KTsKLQlORl9DVF9TVEFUX0lOQyhleHBlY3RfZGVsZXRlKTsKLQltYXN0ZXJfaGVscC0+ZXhwZWN0aW5nLS07Ci0JbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKLX0KLQotc3RhdGljIHZvaWQgZXhwZWN0YXRpb25fdGltZWRfb3V0KHVuc2lnbmVkIGxvbmcgdWxfZXhwZWN0KQotewotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAgPSAodm9pZCAqKXVsX2V4cGVjdDsKLQotCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQluZl9jdF91bmxpbmtfZXhwZWN0KGV4cCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKLX0KLQotc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKgotX19uZl9jb25udHJhY2tfZXhwZWN0X2ZpbmQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7Ci0JCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JCWlmIChuZl9jdF90dXBsZV9tYXNrX2NtcCh0dXBsZSwgJmktPnR1cGxlLCAmaS0+bWFzaykpCi0JCQlyZXR1cm4gaTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIEp1c3QgZmluZCBhIGV4cGVjdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KLXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLW5mX2Nvbm50cmFja19leHBlY3RfZmluZChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKLQkKLQlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlpID0gX19uZl9jb25udHJhY2tfZXhwZWN0X2ZpbmQodHVwbGUpOwotCWlmIChpKQotCQlhdG9taWNfaW5jKCZpLT51c2UpOwotCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0KLQlyZXR1cm4gaTsKLX0KLQotLyogSWYgYW4gZXhwZWN0YXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbiBpcyBmb3VuZCwgaXQgZ2V0cyBkZWxldGUgZnJvbQotICogZ2xvYmFsIGxpc3QgdGhlbiByZXR1cm5lZC4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1maW5kX2V4cGVjdGF0aW9uKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQotewotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JLyogSWYgbWFzdGVyIGlzIG5vdCBpbiBoYXNoIHRhYmxlIHlldCAoaWUuIHBhY2tldCBoYXNuJ3QgbGVmdAotCSAgIHRoaXMgbWFjaGluZSB5ZXQpLCBob3cgY2FuIG90aGVyIGVuZCBrbm93IGFib3V0IGV4cGVjdGVkPwotCSAgIEhlbmNlIHRoZXNlIGFyZSBub3QgdGhlIGRyb2lkcyB5b3UgYXJlIGxvb2tpbmcgZm9yIChpZgotCSAgIG1hc3RlciBjdCBuZXZlciBnb3QgY29uZmlybWVkLCB3ZSdkIGhvbGQgYSByZWZlcmVuY2UgdG8gaXQKLQkgICBhbmQgd2VpcmQgdGhpbmdzIHdvdWxkIGhhcHBlbiB0byBmdXR1cmUgcGFja2V0cykuICovCi0JCWlmIChuZl9jdF90dXBsZV9tYXNrX2NtcCh0dXBsZSwgJmktPnR1cGxlLCAmaS0+bWFzaykKLQkJICAgICYmIG5mX2N0X2lzX2NvbmZpcm1lZChpLT5tYXN0ZXIpKSB7Ci0JCQlpZiAoaS0+ZmxhZ3MgJiBORl9DVF9FWFBFQ1RfUEVSTUFORU5UKSB7Ci0JCQkJYXRvbWljX2luYygmaS0+dXNlKTsKLQkJCQlyZXR1cm4gaTsKLQkJCX0gZWxzZSBpZiAoZGVsX3RpbWVyKCZpLT50aW1lb3V0KSkgewotCQkJCW5mX2N0X3VubGlua19leHBlY3QoaSk7Ci0JCQkJcmV0dXJuIGk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGRlbGV0ZSBhbGwgZXhwZWN0YXRpb25zIGZvciB0aGlzIGNvbm50cmFjayAqLwotdm9pZCBuZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKHN0cnVjdCBuZl9jb25uICpjdCkKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSwgKnRtcDsKLQlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKLQotCS8qIE9wdGltaXphdGlvbjogbW9zdCBjb25uZWN0aW9uIG5ldmVyIGV4cGVjdCBhbnkgb3RoZXJzLiAqLwotCWlmICghaGVscCB8fCBoZWxwLT5leHBlY3RpbmcgPT0gMCkKLQkJcmV0dXJuOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGksIHRtcCwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgewotCQlpZiAoaS0+bWFzdGVyID09IGN0ICYmIGRlbF90aW1lcigmaS0+dGltZW91dCkpIHsKLQkJCW5mX2N0X3VubGlua19leHBlY3QoaSk7Ci0JCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChpKTsKLSAJCX0KLQl9Ci19CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9pbnZlcnRfdHVwbGUpOwogCiBzdGF0aWMgdm9pZAogY2xlYW5fZnJvbV9saXN0cyhzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CiAJREVCVUdQKCJjbGVhbl9mcm9tX2xpc3RzKCVwKVxuIiwgY3QpOwotCUFTU0VSVF9XUklURV9MT0NLKCZuZl9jb25udHJhY2tfbG9jayk7CiAJbGlzdF9kZWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5saXN0KTsKIAlsaXN0X2RlbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLmxpc3QpOwogCkBAIC01NTEsOCArMzE1LDkgQEAKIGRlc3Ryb3lfY29ubnRyYWNrKHN0cnVjdCBuZl9jb25udHJhY2sgKm5mY3QpCiB7CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gKHN0cnVjdCBuZl9jb25uICopbmZjdDsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CisJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOwogCiAJREVCVUdQKCJkZXN0cm95X2Nvbm50cmFjayglcClcbiIsIGN0KTsKIAlORl9DVF9BU1NFUlQoYXRvbWljX3JlYWQoJm5mY3QtPnVzZSkgPT0gMCk7CkBAIC01NjEsNiArMzI2LDkgQEAKIAluZl9jb25udHJhY2tfZXZlbnQoSVBDVF9ERVNUUk9ZLCBjdCk7CiAJc2V0X2JpdChJUFNfRFlJTkdfQklULCAmY3QtPnN0YXR1cyk7CiAKKwlpZiAoaGVscCAmJiBoZWxwLT5oZWxwZXIgJiYgaGVscC0+aGVscGVyLT5kZXN0cm95KQorCQloZWxwLT5oZWxwZXItPmRlc3Ryb3koY3QpOworCiAJLyogVG8gbWFrZSBzdXJlIHdlIGRvbid0IGdldCBhbnkgd2VpcmQgbG9ja2luZyBpc3N1ZXMgaGVyZToKIAkgKiBkZXN0cm95X2Nvbm50cmFjaygpIE1VU1QgTk9UIGJlIGNhbGxlZCB3aXRoIGEgd3JpdGUgbG9jawogCSAqIHRvIG5mX2Nvbm50cmFja19sb2NrISEhIC1IVyAqLwpAQCAtNTY4LDkgKzMzNiw5IEBACiAJaWYgKGwzcHJvdG8gJiYgbDNwcm90by0+ZGVzdHJveSkKIAkJbDNwcm90by0+ZGVzdHJveShjdCk7CiAKLQlwcm90byA9IF9fbmZfY3RfcHJvdG9fZmluZChjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuc3JjLmwzbnVtLCBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnByb3RvbnVtKTsKLQlpZiAocHJvdG8gJiYgcHJvdG8tPmRlc3Ryb3kpCi0JCXByb3RvLT5kZXN0cm95KGN0KTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy5sM251bSwgY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLmRzdC5wcm90b251bSk7CisJaWYgKGw0cHJvdG8gJiYgbDRwcm90by0+ZGVzdHJveSkKKwkJbDRwcm90by0+ZGVzdHJveShjdCk7CiAKIAlpZiAobmZfY29ubnRyYWNrX2Rlc3Ryb3llZCkKIAkJbmZfY29ubnRyYWNrX2Rlc3Ryb3llZChjdCk7CkBAIC02MTgsNyArMzg2LDYgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayh0dXBsZSk7CiAKLQlBU1NFUlRfUkVBRF9MT0NLKCZuZl9jb25udHJhY2tfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmbmZfY29ubnRyYWNrX2hhc2hbaGFzaF0sIGxpc3QpIHsKIAkJaWYgKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCkgIT0gaWdub3JlZF9jb25udHJhY2sgJiYKIAkJICAgIG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CkBAIC02MzAsNiArMzk3LDcgQEAKIAogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfZmluZCk7CiAKIC8qIEZpbmQgYSBjb25uZWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCkBAIC02NDYsNiArNDE0LDcgQEAKIAogCXJldHVybiBoOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZpbmRfZ2V0KTsKIAogc3RhdGljIHZvaWQgX19uZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGFzaCwKQEAgLTY2OSw2ICs0MzgsNyBAQAogCV9fbmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KGN0LCBoYXNoLCByZXBsX2hhc2gpOwogCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2hhc2hfaW5zZXJ0KTsKIAogLyogQ29uZmlybSBhIGNvbm5lY3Rpb24gZ2l2ZW4gc2tiOyBwbGFjZXMgaXQgaW4gaGFzaCB0YWJsZSAqLwogaW50CkBAIC03NDYsNiArNTE2LDcgQEAKIAl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlyZXR1cm4gTkZfRFJPUDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY29ubnRyYWNrX2NvbmZpcm0pOwogCiAvKiBSZXR1cm5zIHRydWUgaWYgYSBjb25uZWN0aW9uIGNvcnJlc3BvbmRpbmdzIHRvIHRoZSB0dXBsZSAocmVxdWlyZWQKICAgIGZvciBOQVQpLiAqLwpAQCAtNzYxLDYgKzUzMiw3IEBACiAKIAlyZXR1cm4gaCAhPSBOVUxMOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX3R1cGxlX3Rha2VuKTsKIAogLyogVGhlcmUncyBhIHNtYWxsIHJhY2UgaGVyZSB3aGVyZSB3ZSBtYXkgZnJlZSBhIGp1c3QtYXNzdXJlZAogICAgY29ubmVjdGlvbi4gIFRvbyBiYWQ6IHdlJ3JlIGluIHRyb3VibGUgYW55d2F5LiAqLwpAQCAtNzk0LDUzICs1NjYsMTMgQEAKIAlyZXR1cm4gZHJvcHBlZDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoKLV9fbmZfY3RfaGVscGVyX2ZpbmQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZoZWxwZXJzLCBsaXN0KSB7Ci0JCWlmIChuZl9jdF90dXBsZV9tYXNrX2NtcCh0dXBsZSwgJmgtPnR1cGxlLCAmaC0+bWFzaykpCi0JCQlyZXR1cm4gaDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoKLW5mX2N0X2hlbHBlcl9maW5kX2dldCggY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKLQotCS8qIG5lZWQgbmZfY29ubnRyYWNrX2xvY2sgdG8gYXNzdXJlIHRoYXQgaGVscGVyIGV4aXN0cyB1bnRpbAotCSAqIHRyeV9tb2R1bGVfZ2V0KCkgaXMgY2FsbGVkICovCi0JcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0KLQloZWxwZXIgPSBfX25mX2N0X2hlbHBlcl9maW5kKHR1cGxlKTsKLQlpZiAoaGVscGVyKSB7Ci0JCS8qIG5lZWQgdG8gaW5jcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50IHRvIGFzc3VyZSBoZWxwZXIgd2lsbAotCQkgKiBub3QgZ28gYXdheSB3aGlsZSB0aGUgY2FsbGVyIGlzIGUuZy4gYnVzeSBwdXR0aW5nIGEKLQkJICogY29ubnRyYWNrIGluIHRoZSBoYXNoIHRoYXQgdXNlcyB0aGUgaGVscGVyICovCi0JCWlmICghdHJ5X21vZHVsZV9nZXQoaGVscGVyLT5tZSkpCi0JCQloZWxwZXIgPSBOVUxMOwotCX0KLQotCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0KLQlyZXR1cm4gaGVscGVyOwotfQotCi12b2lkIG5mX2N0X2hlbHBlcl9wdXQoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcikKLXsKLQltb2R1bGVfcHV0KGhlbHBlci0+bWUpOwotfQotCiBzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgogX19uZl9jb25udHJhY2tfYWxsb2MoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3JpZywKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpyZXBsLAotCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bykKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG8sCisJCSAgICAgdV9pbnQzMl90IGZlYXR1cmVzKQogewogCXN0cnVjdCBuZl9jb25uICpjb25udHJhY2sgPSBOVUxMOwotCXVfaW50MzJfdCBmZWF0dXJlcyA9IDA7CiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKIAogCWlmICh1bmxpa2VseSghbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQpKSB7CkBAIC04NjYsMTIgKzU5OCwxMyBAQAogCX0KIAogCS8qICBmaW5kIGZlYXR1cmVzIG5lZWRlZCBieSB0aGlzIGNvbm50cmFjay4gKi8KLQlmZWF0dXJlcyA9IGwzcHJvdG8tPmdldF9mZWF0dXJlcyhvcmlnKTsKKwlmZWF0dXJlcyB8PSBsM3Byb3RvLT5nZXRfZmVhdHVyZXMob3JpZyk7CiAKIAkvKiBGSVhNRTogcHJvdGVjdCBoZWxwZXIgbGlzdCBwZXIgUkNVICovCiAJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJaGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZChyZXBsKTsKLQlpZiAoaGVscGVyKQorCS8qIE5BVCBtaWdodCB3YW50IHRvIGFzc2lnbiBhIGhlbHBlciBsYXRlciAqLworCWlmIChoZWxwZXIgfHwgZmVhdHVyZXMgJiBORl9DVF9GX05BVCkKIAkJZmVhdHVyZXMgfD0gTkZfQ1RfRl9IRUxQOwogCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKQEAgLTkxNiw4ICs2NDksOSBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKIAogCWwzcHJvdG8gPSBfX25mX2N0X2wzcHJvdG9fZmluZChvcmlnLT5zcmMubDNudW0pOwotCXJldHVybiBfX25mX2Nvbm50cmFja19hbGxvYyhvcmlnLCByZXBsLCBsM3Byb3RvKTsKKwlyZXR1cm4gX19uZl9jb25udHJhY2tfYWxsb2Mob3JpZywgcmVwbCwgbDNwcm90bywgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfYWxsb2MpOwogCiB2b2lkIG5mX2Nvbm50cmFja19mcmVlKHN0cnVjdCBuZl9jb25uICpjb25udHJhY2spCiB7CkBAIC05MjgsMzIgKzY2Miw0MCBAQAogCWttZW1fY2FjaGVfZnJlZShuZl9jdF9jYWNoZVtmZWF0dXJlc10uY2FjaGVwLCBjb25udHJhY2spOwogCWF0b21pY19kZWMoJm5mX2Nvbm50cmFja19jb3VudCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfZnJlZSk7CiAKIC8qIEFsbG9jYXRlIGEgbmV3IGNvbm50cmFjazogd2UgcmV0dXJuIC1FTk9NRU0gaWYgY2xhc3NpZmljYXRpb24KICAgIGZhaWxlZCBkdWUgdG8gc3RyZXNzLiAgT3RoZXJ3aXNlIGl0IHJlYWxseSBpcyB1bmNsYXNzaWZpYWJsZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgogaW5pdF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKLQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG9jb2wsCisJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bywKIAkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCiB7CiAJc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjazsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGxfdHVwbGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwl1X2ludDMyX3QgZmVhdHVyZXMgPSAwOwogCi0JaWYgKCFuZl9jdF9pbnZlcnRfdHVwbGUoJnJlcGxfdHVwbGUsIHR1cGxlLCBsM3Byb3RvLCBwcm90b2NvbCkpIHsKKwlpZiAoIW5mX2N0X2ludmVydF90dXBsZSgmcmVwbF90dXBsZSwgdHVwbGUsIGwzcHJvdG8sIGw0cHJvdG8pKSB7CiAJCURFQlVHUCgiQ2FuJ3QgaW52ZXJ0IHR1cGxlLlxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWNvbm50cmFjayA9IF9fbmZfY29ubnRyYWNrX2FsbG9jKHR1cGxlLCAmcmVwbF90dXBsZSwgbDNwcm90byk7CisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJZXhwID0gX19uZl9jb25udHJhY2tfZXhwZWN0X2ZpbmQodHVwbGUpOworCWlmIChleHAgJiYgZXhwLT5oZWxwZXIpCisJCWZlYXR1cmVzID0gTkZfQ1RfRl9IRUxQOworCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwljb25udHJhY2sgPSBfX25mX2Nvbm50cmFja19hbGxvYyh0dXBsZSwgJnJlcGxfdHVwbGUsIGwzcHJvdG8sIGZlYXR1cmVzKTsKIAlpZiAoY29ubnRyYWNrID09IE5VTEwgfHwgSVNfRVJSKGNvbm50cmFjaykpIHsKIAkJREVCVUdQKCJDYW4ndCBhbGxvY2F0ZSBjb25udHJhY2suXG4iKTsKIAkJcmV0dXJuIChzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKiljb25udHJhY2s7CiAJfQogCi0JaWYgKCFwcm90b2NvbC0+bmV3KGNvbm50cmFjaywgc2tiLCBkYXRhb2ZmKSkgeworCWlmICghbDRwcm90by0+bmV3KGNvbm50cmFjaywgc2tiLCBkYXRhb2ZmKSkgewogCQluZl9jb25udHJhY2tfZnJlZShjb25udHJhY2spOwogCQlERUJVR1AoImluaXQgY29ubnRyYWNrOiBjYW4ndCB0cmFjayB3aXRoIHByb3RvIG1vZHVsZVxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtOTY4LDYgKzcxMCw4IEBACiAJCS8qIFdlbGNvbWUsIE1yLiBCb25kLiAgV2UndmUgYmVlbiBleHBlY3RpbmcgeW91Li4uICovCiAJCV9fc2V0X2JpdChJUFNfRVhQRUNURURfQklULCAmY29ubnRyYWNrLT5zdGF0dXMpOwogCQljb25udHJhY2stPm1hc3RlciA9IGV4cC0+bWFzdGVyOworCQlpZiAoZXhwLT5oZWxwZXIpCisJCQluZmN0X2hlbHAoY29ubnRyYWNrKS0+aGVscGVyID0gZXhwLT5oZWxwZXI7CiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCiAJCWNvbm50cmFjay0+bWFyayA9IGV4cC0+bWFzdGVyLT5tYXJrOwogI2VuZGlmCkBAIC0xMDA1LDcgKzc0OSw3IEBACiAJCSAgdV9pbnQxNl90IGwzbnVtLAogCQkgIHVfaW50OF90IHByb3RvbnVtLAogCQkgIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKLQkJICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bywKKwkJICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8sCiAJCSAgaW50ICpzZXRfcmVwbHksCiAJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvKQogewpAQCAtMTAxNSw3ICs3NTksNyBAQAogCiAJaWYgKCFuZl9jdF9nZXRfdHVwbGUoc2tiLCAodW5zaWduZWQgaW50KShza2ItPm5oLnJhdyAtIHNrYi0+ZGF0YSksCiAJCQkgICAgIGRhdGFvZmYsIGwzbnVtLCBwcm90b251bSwgJnR1cGxlLCBsM3Byb3RvLAotCQkJICAgICBwcm90bykpIHsKKwkJCSAgICAgbDRwcm90bykpIHsKIAkJREVCVUdQKCJyZXNvbHZlX25vcm1hbF9jdDogQ2FuJ3QgZ2V0IHR1cGxlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtMTAyMyw3ICs3NjcsNyBAQAogCS8qIGxvb2sgZm9yIHR1cGxlIG1hdGNoICovCiAJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldCgmdHVwbGUsIE5VTEwpOwogCWlmICghaCkgewotCQloID0gaW5pdF9jb25udHJhY2soJnR1cGxlLCBsM3Byb3RvLCBwcm90bywgc2tiLCBkYXRhb2ZmKTsKKwkJaCA9IGluaXRfY29ubnRyYWNrKCZ0dXBsZSwgbDNwcm90bywgbDRwcm90bywgc2tiLCBkYXRhb2ZmKTsKIAkJaWYgKCFoKQogCQkJcmV0dXJuIE5VTEw7CiAJCWlmIChJU19FUlIoaCkpCkBAIC0xMDYxLDcgKzgwNSw3IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CiAJdW5zaWduZWQgaW50IGRhdGFvZmY7CiAJdV9pbnQ4X3QgcHJvdG9udW07CiAJaW50IHNldF9yZXBseSA9IDA7CkBAIC0xMDc5LDE5ICs4MjMsMTkgQEAKIAkJcmV0dXJuIC1yZXQ7CiAJfQogCi0JcHJvdG8gPSBfX25mX2N0X3Byb3RvX2ZpbmQoKHVfaW50MTZfdClwZiwgcHJvdG9udW0pOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCgodV9pbnQxNl90KXBmLCBwcm90b251bSk7CiAKIAkvKiBJdCBtYXkgYmUgYW4gc3BlY2lhbCBwYWNrZXQsIGVycm9yLCB1bmNsZWFuLi4uCiAJICogaW52ZXJzZSBvZiB0aGUgcmV0dXJuIGNvZGUgdGVsbHMgdG8gdGhlIG5ldGZpbHRlcgogCSAqIGNvcmUgd2hhdCB0byBkbyB3aXRoIHRoZSBwYWNrZXQuICovCi0JaWYgKHByb3RvLT5lcnJvciAhPSBOVUxMICYmCi0JICAgIChyZXQgPSBwcm90by0+ZXJyb3IoKnBza2IsIGRhdGFvZmYsICZjdGluZm8sIHBmLCBob29rbnVtKSkgPD0gMCkgeworCWlmIChsNHByb3RvLT5lcnJvciAhPSBOVUxMICYmCisJICAgIChyZXQgPSBsNHByb3RvLT5lcnJvcigqcHNrYiwgZGF0YW9mZiwgJmN0aW5mbywgcGYsIGhvb2tudW0pKSA8PSAwKSB7CiAJCU5GX0NUX1NUQVRfSU5DKGVycm9yKTsKIAkJTkZfQ1RfU1RBVF9JTkMoaW52YWxpZCk7CiAJCXJldHVybiAtcmV0OwogCX0KIAotCWN0ID0gcmVzb2x2ZV9ub3JtYWxfY3QoKnBza2IsIGRhdGFvZmYsIHBmLCBwcm90b251bSwgbDNwcm90bywgcHJvdG8sCisJY3QgPSByZXNvbHZlX25vcm1hbF9jdCgqcHNrYiwgZGF0YW9mZiwgcGYsIHByb3RvbnVtLCBsM3Byb3RvLCBsNHByb3RvLAogCQkJICAgICAgICZzZXRfcmVwbHksICZjdGluZm8pOwogCWlmICghY3QpIHsKIAkJLyogTm90IHZhbGlkIHBhcnQgb2YgYSBjb25uZWN0aW9uICovCkBAIC0xMTA3LDcgKzg1MSw3IEBACiAKIAlORl9DVF9BU1NFUlQoKCpwc2tiKS0+bmZjdCk7CiAKLQlyZXQgPSBwcm90by0+cGFja2V0KGN0LCAqcHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSk7CisJcmV0ID0gbDRwcm90by0+cGFja2V0KGN0LCAqcHNrYiwgZGF0YW9mZiwgY3RpbmZvLCBwZiwgaG9va251bSk7CiAJaWYgKHJldCA8IDApIHsKIAkJLyogSW52YWxpZDogaW52ZXJzZSBvZiB0aGUgcmV0dXJuIGNvZGUgdGVsbHMKIAkJICogdGhlIG5ldGZpbHRlciBjb3JlIHdoYXQgdG8gZG8gKi8KQEAgLTExMjMsMjU1ICs4NjcsMzggQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaW4pOwogCiBpbnQgbmZfY3RfaW52ZXJ0X3R1cGxlcHIoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqaW52ZXJzZSwKIAkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnKQogewogCXJldHVybiBuZl9jdF9pbnZlcnRfdHVwbGUoaW52ZXJzZSwgb3JpZywKIAkJCQkgIF9fbmZfY3RfbDNwcm90b19maW5kKG9yaWctPnNyYy5sM251bSksCi0JCQkJICBfX25mX2N0X3Byb3RvX2ZpbmQob3JpZy0+c3JjLmwzbnVtLAorCQkJCSAgX19uZl9jdF9sNHByb3RvX2ZpbmQob3JpZy0+c3JjLmwzbnVtLAogCQkJCQkJICAgICBvcmlnLT5kc3QucHJvdG9udW0pKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2ludmVydF90dXBsZXByKTsKIAotLyogV291bGQgdHdvIGV4cGVjdGVkIHRoaW5ncyBjbGFzaD8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGV4cGVjdF9jbGFzaChjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqYSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqYikKKy8qIEFsdGVyIHJlcGx5IHR1cGxlIChtYXliZSBhbHRlciBoZWxwZXIpLiAgVGhpcyBpcyBmb3IgTkFULCBhbmQgaXMKKyAgIGltcGxpY2l0bHkgcmFjeTogc2VlIF9fbmZfY29ubnRyYWNrX2NvbmZpcm0gKi8KK3ZvaWQgbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm5ld3JlcGx5KQogewotCS8qIFBhcnQgY292ZXJlZCBieSBpbnRlcnNlY3Rpb24gb2YgbWFza3MgbXVzdCBiZSB1bmVxdWFsLAotCSAgIG90aGVyd2lzZSB0aGV5IGNsYXNoICovCi0Jc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBpbnRlcnNlY3RfbWFzazsKLQlpbnQgY291bnQ7Ci0KLQlpbnRlcnNlY3RfbWFzay5zcmMubDNudW0gPSBhLT5tYXNrLnNyYy5sM251bSAmIGItPm1hc2suc3JjLmwzbnVtOwotCWludGVyc2VjdF9tYXNrLnNyYy51LmFsbCA9IGEtPm1hc2suc3JjLnUuYWxsICYgYi0+bWFzay5zcmMudS5hbGw7Ci0JaW50ZXJzZWN0X21hc2suZHN0LnUuYWxsID0gYS0+bWFzay5kc3QudS5hbGwgJiBiLT5tYXNrLmRzdC51LmFsbDsKLQlpbnRlcnNlY3RfbWFzay5kc3QucHJvdG9udW0gPSBhLT5tYXNrLmRzdC5wcm90b251bQotCQkJCQkmIGItPm1hc2suZHN0LnByb3RvbnVtOwotCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTkZfQ1RfVFVQTEVfTDNTSVpFOyBjb3VudCsrKXsKLQkJaW50ZXJzZWN0X21hc2suc3JjLnUzLmFsbFtjb3VudF0gPQotCQkJYS0+bWFzay5zcmMudTMuYWxsW2NvdW50XSAmIGItPm1hc2suc3JjLnUzLmFsbFtjb3VudF07Ci0JfQotCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTkZfQ1RfVFVQTEVfTDNTSVpFOyBjb3VudCsrKXsKLQkJaW50ZXJzZWN0X21hc2suZHN0LnUzLmFsbFtjb3VudF0gPQotCQkJYS0+bWFzay5kc3QudTMuYWxsW2NvdW50XSAmIGItPm1hc2suZHN0LnUzLmFsbFtjb3VudF07Ci0JfQotCi0JcmV0dXJuIG5mX2N0X3R1cGxlX21hc2tfY21wKCZhLT50dXBsZSwgJmItPnR1cGxlLCAmaW50ZXJzZWN0X21hc2spOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBleHBlY3RfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqYSwKLQkJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmIpCi17Ci0JcmV0dXJuIGEtPm1hc3RlciA9PSBiLT5tYXN0ZXIKLQkJJiYgbmZfY3RfdHVwbGVfZXF1YWwoJmEtPnR1cGxlLCAmYi0+dHVwbGUpCi0JCSYmIG5mX2N0X3R1cGxlX2VxdWFsKCZhLT5tYXNrLCAmYi0+bWFzayk7Ci19Ci0KLS8qIEdlbmVyYWxseSBhIGJhZCBpZGVhIHRvIGNhbGwgdGhpczogY291bGQgaGF2ZSBtYXRjaGVkIGFscmVhZHkuICovCi12b2lkIG5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7Ci0KLQl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JLyogY2hvb3NlIHRoZSB0aGUgb2xkZXN0IGV4cGVjdGF0aW9uIHRvIGV2aWN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGksICZuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGV4cGVjdF9tYXRjaGVzKGksIGV4cCkgJiYgZGVsX3RpbWVyKCZpLT50aW1lb3V0KSkgewotCQkJbmZfY3RfdW5saW5rX2V4cGVjdChpKTsKLQkJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoaSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0Jd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci19Ci0KLS8qIFdlIGRvbid0IGluY3JlYXNlIHRoZSBtYXN0ZXIgY29ubnRyYWNrIHJlZmNvdW50IGZvciBub24tZnVsZmlsbGVkCi0gKiBjb25udHJhY2tzLiBEdXJpbmcgdGhlIGNvbm50cmFjayBkZXN0cnVjdGlvbiwgdGhlIGV4cGVjdGF0aW9ucyBhcmUKLSAqIGFsd2F5cyBraWxsZWQgYmVmb3JlIHRoZSBjb25udHJhY2sgaXRzZWxmICovCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhzdHJ1Y3QgbmZfY29ubiAqbWUpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKm5ldzsKLQotCW5ldyA9IGttZW1fY2FjaGVfYWxsb2MobmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXAsIEdGUF9BVE9NSUMpOwotCWlmICghbmV3KSB7Ci0JCURFQlVHUCgiZXhwZWN0X3JlbGF0ZWQ6IE9PTSBhbGxvY2F0aW5nIGV4cGVjdFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQluZXctPm1hc3RlciA9IG1lOwotCWF0b21pY19zZXQoJm5ldy0+dXNlLCAxKTsKLQlyZXR1cm4gbmV3OwotfQotCi12b2lkIG5mX2Nvbm50cmFja19leHBlY3RfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmV4cC0+dXNlKSkKLQkJa21lbV9jYWNoZV9mcmVlKG5mX2Nvbm50cmFja19leHBlY3RfY2FjaGVwLCBleHApOwotfQotCi1zdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfZXhwZWN0X2luc2VydChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQotewotCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGV4cC0+bWFzdGVyKTsKLQotCWF0b21pY19pbmMoJmV4cC0+dXNlKTsKLQltYXN0ZXJfaGVscC0+ZXhwZWN0aW5nKys7Ci0JbGlzdF9hZGQoJmV4cC0+bGlzdCwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCk7Ci0KLQlpbml0X3RpbWVyKCZleHAtPnRpbWVvdXQpOwotCWV4cC0+dGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZXhwOwotCWV4cC0+dGltZW91dC5mdW5jdGlvbiA9IGV4cGVjdGF0aW9uX3RpbWVkX291dDsKLQlleHAtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBtYXN0ZXJfaGVscC0+aGVscGVyLT50aW1lb3V0ICogSFo7Ci0JYWRkX3RpbWVyKCZleHAtPnRpbWVvdXQpOwotCi0JZXhwLT5pZCA9ICsrbmZfY29ubnRyYWNrX2V4cGVjdF9uZXh0X2lkOwotCWF0b21pY19pbmMoJmV4cC0+dXNlKTsKLQlORl9DVF9TVEFUX0lOQyhleHBlY3RfY3JlYXRlKTsKLX0KLQotLyogUmFjZSB3aXRoIGV4cGVjdGF0aW9ucyBiZWluZyB1c2VkIG1lYW5zIHdlIGNvdWxkIGhhdmUgbm9uZSB0byBmaW5kOyBPSy4gKi8KLXN0YXRpYyB2b2lkIGV2aWN0X29sZGVzdF9leHBlY3Qoc3RydWN0IG5mX2Nvbm4gKm1hc3RlcikKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JCWlmIChpLT5tYXN0ZXIgPT0gbWFzdGVyKSB7Ci0JCQlpZiAoZGVsX3RpbWVyKCZpLT50aW1lb3V0KSkgewotCQkJCW5mX2N0X3VubGlua19leHBlY3QoaSk7Ci0JCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoaSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVmcmVzaF90aW1lcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSkKLXsKLQlzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCA9IG5mY3RfaGVscChpLT5tYXN0ZXIpOwotCi0JaWYgKCFkZWxfdGltZXIoJmktPnRpbWVvdXQpKQotCQlyZXR1cm4gMDsKLQotCWktPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBtYXN0ZXJfaGVscC0+aGVscGVyLT50aW1lb3V0KkhaOwotCWFkZF90aW1lcigmaS0+dGltZW91dCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLWludCBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCkKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKLQlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyID0gZXhwZWN0LT5tYXN0ZXI7Ci0Jc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAgPSBuZmN0X2hlbHAobWFzdGVyKTsKLQlpbnQgcmV0OwotCi0JTkZfQ1RfQVNTRVJUKG1hc3Rlcl9oZWxwKTsKLQotCURFQlVHUCgibmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkICVwXG4iLCByZWxhdGVkX3RvKTsKLQlERUJVR1AoInR1cGxlOiAiKTsgTkZfQ1RfRFVNUF9UVVBMRSgmZXhwZWN0LT50dXBsZSk7Ci0JREVCVUdQKCJtYXNrOiAgIik7IE5GX0NUX0RVTVBfVFVQTEUoJmV4cGVjdC0+bWFzayk7Ci0KLQl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JCWlmIChleHBlY3RfbWF0Y2hlcyhpLCBleHBlY3QpKSB7Ci0JCQkvKiBSZWZyZXNoIHRpbWVyOiBpZiBpdCdzIGR5aW5nLCBpZ25vcmUuLiAqLwotCQkJaWYgKHJlZnJlc2hfdGltZXIoaSkpIHsKLQkJCQlyZXQgPSAwOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9IGVsc2UgaWYgKGV4cGVjdF9jbGFzaChpLCBleHBlY3QpKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQkvKiBXaWxsIGJlIG92ZXIgbGltaXQ/ICovCi0JaWYgKG1hc3Rlcl9oZWxwLT5oZWxwZXItPm1heF9leHBlY3RlZCAmJgotCSAgICBtYXN0ZXJfaGVscC0+ZXhwZWN0aW5nID49IG1hc3Rlcl9oZWxwLT5oZWxwZXItPm1heF9leHBlY3RlZCkKLQkJZXZpY3Rfb2xkZXN0X2V4cGVjdChtYXN0ZXIpOwotCi0JbmZfY29ubnRyYWNrX2V4cGVjdF9pbnNlcnQoZXhwZWN0KTsKLQluZl9jb25udHJhY2tfZXhwZWN0X2V2ZW50KElQRVhQX05FVywgZXhwZWN0KTsKLQlyZXQgPSAwOwotb3V0OgotCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKLXsKLQlpbnQgcmV0OwotCUJVR19PTihtZS0+dGltZW91dCA9PSAwKTsKLQotCXJldCA9IG5mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZShORl9DVF9GX0hFTFAsICJuZl9jb25udHJhY2s6aGVscCIsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCBuZl9jb25uKQotCQkJCQkgICsgc2l6ZW9mKHN0cnVjdCBuZl9jb25uX2hlbHApCi0JCQkJCSAgKyBfX2FsaWdub2ZfXyhzdHJ1Y3QgbmZfY29ubl9oZWxwKSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJuZl9jb25udHJhY2tfaGVscGVyX3JlaWdzdGVyOiBVbmFibGUgdG8gY3JlYXRlIHNsYWIgY2FjaGUgZm9yIGNvbm50cmFja3NcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JbGlzdF9hZGQoJm1lLT5saXN0LCAmaGVscGVycyk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgotX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZoZWxwZXJzLCBsaXN0KSB7Ci0JCWlmICghc3RyY21wKGgtPm5hbWUsIG5hbWUpKQotCQkJcmV0dXJuIGg7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmhlbHAoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICppLAotCQkJICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCi17Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhpKTsKIAlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwID0gbmZjdF9oZWxwKGN0KTsKIAotCWlmIChoZWxwICYmIGhlbHAtPmhlbHBlciA9PSBtZSkgewotCQluZl9jb25udHJhY2tfZXZlbnQoSVBDVF9IRUxQRVIsIGN0KTsKLQkJaGVscC0+aGVscGVyID0gTlVMTDsKLQl9Ci19Ci0KLXZvaWQgbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgKnRtcDsKLQotCS8qIE5lZWQgd3JpdGUgbG9jayBoZXJlLCB0byBkZWxldGUgaGVscGVyLiAqLwogCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlsaXN0X2RlbCgmbWUtPmxpc3QpOworCS8qIFNob3VsZCBiZSB1bmNvbmZpcm1lZCwgc28gbm90IGluIGhhc2ggdGFibGUgeWV0ICovCisJTkZfQ1RfQVNTRVJUKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKTsKIAotCS8qIEdldCByaWQgb2YgZXhwZWN0YXRpb25zICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgdG1wLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpOwotCQlpZiAoaGVscC0+aGVscGVyID09IG1lICYmIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgewotCQkJbmZfY3RfdW5saW5rX2V4cGVjdChleHApOwotCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKLQkJfQotCX0KKwlERUJVR1AoIkFsdGVyaW5nIHJlcGx5IHR1cGxlIG9mICVwIHRvICIsIGN0KTsKKwlORl9DVF9EVU1QX1RVUExFKG5ld3JlcGx5KTsKIAotCS8qIEdldCByaWQgb2YgZXhwZWN0ZWRzLCBzZXQgaGVscGVycyB0byBOVUxMLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJnVuY29uZmlybWVkLCBsaXN0KQotCQl1bmhlbHAoaCwgbWUpOwotCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZuZl9jb25udHJhY2tfaGFzaFtpXSwgbGlzdCkKLQkJCXVuaGVscChoLCBtZSk7Ci0JfQorCWN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSA9ICpuZXdyZXBseTsKKwlpZiAoIWN0LT5tYXN0ZXIgJiYgaGVscCAmJiBoZWxwLT5leHBlY3RpbmcgPT0gMCkKKwkJaGVscC0+aGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZChuZXdyZXBseSk7CiAJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0KLQkvKiBTb21lb25lIGNvdWxkIGJlIHN0aWxsIGxvb2tpbmcgYXQgdGhlIGhlbHBlciBpbiBhIGJoLiAqLwotCXN5bmNocm9uaXplX25ldCgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5KTsKIAogLyogUmVmcmVzaCBjb25udHJhY2sgZm9yIHRoaXMgbWFueSBqaWZmaWVzIGFuZCBkbyBhY2NvdW50aW5nIGlmIGRvX2FjY3QgaXMgMSAqLwogdm9pZCBfX25mX2N0X3JlZnJlc2hfYWNjdChzdHJ1Y3QgbmZfY29ubiAqY3QsCkBAIC0xMzk4LDkgKzkyNSwxNCBAQAogCQljdC0+dGltZW91dC5leHBpcmVzID0gZXh0cmFfamlmZmllczsKIAkJZXZlbnQgPSBJUENUX1JFRlJFU0g7CiAJfSBlbHNlIHsKLQkJLyogTmVlZCBkZWxfdGltZXIgZm9yIHJhY2UgYXZvaWRhbmNlIChtYXkgYWxyZWFkeSBiZSBkeWluZykuICovCi0JCWlmIChkZWxfdGltZXIoJmN0LT50aW1lb3V0KSkgewotCQkJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBleHRyYV9qaWZmaWVzOworCQl1bnNpZ25lZCBsb25nIG5ld3RpbWUgPSBqaWZmaWVzICsgZXh0cmFfamlmZmllczsKKworCQkvKiBPbmx5IHVwZGF0ZSB0aGUgdGltZW91dCBpZiB0aGUgbmV3IHRpbWVvdXQgaXMgYXQgbGVhc3QKKwkJICAgSFogamlmZmllcyBmcm9tIHRoZSBvbGQgdGltZW91dC4gTmVlZCBkZWxfdGltZXIgZm9yIHJhY2UKKwkJICAgYXZvaWRhbmNlIChtYXkgYWxyZWFkeSBiZSBkeWluZykuICovCisJCWlmIChuZXd0aW1lIC0gY3QtPnRpbWVvdXQuZXhwaXJlcyA+PSBIWgorCQkgICAgJiYgZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpIHsKKwkJCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBuZXd0aW1lOwogCQkJYWRkX3RpbWVyKCZjdC0+dGltZW91dCk7CiAJCQlldmVudCA9IElQQ1RfUkVGUkVTSDsKIAkJfQpAQCAtMTQxMSw5ICs5NDMsMTAgQEAKIAkJY3QtPmNvdW50ZXJzW0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cysrOwogCQljdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5ieXRlcyArPQogCQkJc2tiLT5sZW4gLSAodW5zaWduZWQgaW50KShza2ItPm5oLnJhdyAtIHNrYi0+ZGF0YSk7Ci0JaWYgKChjdC0+Y291bnRlcnNbQ1RJTkZPMkRJUihjdGluZm8pXS5wYWNrZXRzICYgMHg4MDAwMDAwMCkKLQkgICAgfHwgKGN0LT5jb3VudGVyc1tDVElORk8yRElSKGN0aW5mbyldLmJ5dGVzICYgMHg4MDAwMDAwMCkpCi0JCWV2ZW50IHw9IElQQ1RfQ09VTlRFUl9GSUxMSU5HOworCisJCWlmICgoY3QtPmNvdW50ZXJzW0NUSU5GTzJESVIoY3RpbmZvKV0ucGFja2V0cyAmIDB4ODAwMDAwMDApCisJCSAgICB8fCAoY3QtPmNvdW50ZXJzW0NUSU5GTzJESVIoY3RpbmZvKV0uYnl0ZXMgJiAweDgwMDAwMDAwKSkKKwkJCWV2ZW50IHw9IElQQ1RfQ09VTlRFUl9GSUxMSU5HOwogCX0KICNlbmRpZgogCkBAIC0xNDIzLDYgKzk1Niw3IEBACiAJaWYgKGV2ZW50KQogCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoZXZlbnQsIHNrYik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X3JlZnJlc2hfYWNjdCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCkBAIC0xNDQ3LDYgKzk4MSw3IEBACiBuZmF0dHJfZmFpbHVyZToKIAlyZXR1cm4gLTE7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0cik7CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgY3RhX21pbl9wcm90b1tDVEFfUFJPVE9fTUFYXSA9IHsKIAlbQ1RBX1BST1RPX1NSQ19QT1JULTFdICA9IHNpemVvZih1X2ludDE2X3QpLApAQCAtMTQ2MiwxMyArOTk3LDEyIEBACiAJaWYgKG5mYXR0cl9iYWRfc2l6ZSh0YiwgQ1RBX1BST1RPX01BWCwgY3RhX21pbl9wcm90bykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdC0+c3JjLnUudGNwLnBvcnQgPQotCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19TUkNfUE9SVC0xXSk7Ci0JdC0+ZHN0LnUudGNwLnBvcnQgPQotCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19EU1RfUE9SVC0xXSk7CisJdC0+c3JjLnUudGNwLnBvcnQgPSAqKF9fYmUxNiAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19TUkNfUE9SVC0xXSk7CisJdC0+ZHN0LnUudGNwLnBvcnQgPSAqKF9fYmUxNiAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19EU1RfUE9SVC0xXSk7CiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X3BvcnRfbmZhdHRyX3RvX3R1cGxlKTsKICNlbmRpZgogCiAvKiBVc2VkIGJ5IGlwdF9SRUpFQ1QgYW5kIGlwNnRfUkVKRUNULiAqLwpAQCAtMTQ4OSw2ICsxMDIzLDcgQEAKIAluc2tiLT5uZmN0aW5mbyA9IGN0aW5mbzsKIAluZl9jb25udHJhY2tfZ2V0KG5za2ItPm5mY3QpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfYXR0YWNoKTsKIAogc3RhdGljIGlubGluZSBpbnQKIGRvX2l0ZXIoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICppLApAQCAtMTU0Miw2ICsxMDc3LDcgQEAKIAkJbmZfY3RfcHV0KGN0KTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9pdGVyYXRlX2NsZWFudXApOwogCiBzdGF0aWMgaW50IGtpbGxfYWxsKHN0cnVjdCBuZl9jb25uICppLCB2b2lkICpkYXRhKQogewpAQCAtMTU2MSw2ICsxMDk3LDcgQEAKIHsKIAluZl9jdF9pdGVyYXRlX2NsZWFudXAoa2lsbF9hbGwsIE5VTEwpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2ZsdXNoKTsKIAogLyogTWlzaGVhcmluZyB0aGUgdm9pY2VzIGluIGhpcyBoZWFkLCBvdXIgaGVybyB3b25kZXJzIGhvdyBoZSdzCiAgICBzdXBwb3NlZCB0byBraWxsIHRoZSBtYWxsLiAqLwpAQCAtMTU5OCw2ICsxMTM1LDggQEAKIAlmcmVlX2Nvbm50cmFja19oYXNoKG5mX2Nvbm50cmFja19oYXNoLCBuZl9jb25udHJhY2tfdm1hbGxvYywKIAkJCSAgICBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUpOwogCisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fZ2VuZXJpYyk7CisKIAkvKiBmcmVlIGwzcHJvdG8gcHJvdG9jb2wgdGFibGVzICovCiAJZm9yIChpID0gMDsgaSA8IFBGX01BWDsgaSsrKQogCQlpZiAobmZfY3RfcHJvdG9zW2ldKSB7CkBAIC0xNzIzLDEwICsxMjYyLDE0IEBACiAJCWdvdG8gZXJyX2ZyZWVfY29ubnRyYWNrX3NsYWI7CiAJfQogCisJcmV0ID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX2V4cGVjdF9zbGFiOworCiAJLyogRG9uJ3QgTkVFRCBsb2NrIGhlcmUsIGJ1dCBnb29kIGZvcm0gYW55d2F5LiAqLwogCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IFBGX01BWDsgaSsrKQotCQluZl9jdF9sM3Byb3Rvc1tpXSA9ICZuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQUZfTUFYOyBpKyspCisJCW5mX2N0X2wzcHJvdG9zW2ldID0gJm5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWM7CiAgICAgICAgIHdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCiAJLyogRm9yIHVzZSBieSBSRUpFQ1QgdGFyZ2V0ICovCkBAIC0xNzQwLDYgKzEyODMsOCBAQAogCiAJcmV0dXJuIHJldDsKIAorb3V0X2ZyZWVfZXhwZWN0X3NsYWI6CisJa21lbV9jYWNoZV9kZXN0cm95KG5mX2Nvbm50cmFja19leHBlY3RfY2FjaGVwKTsKIGVycl9mcmVlX2Nvbm50cmFja19zbGFiOgogCW5mX2Nvbm50cmFja191bnJlZ2lzdGVyX2NhY2hlKE5GX0NUX0ZfQkFTSUMpOwogZXJyX2ZyZWVfaGFzaDoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyMjNlMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIEV2ZW50IGNhY2hlIGZvciBuZXRmaWx0ZXIuICovCisKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDYgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqIChDKSAyMDAzLDIwMDQgVVNBR0kvV0lERSBQcm9qZWN0IDxodHRwOi8vd3d3LmxpbnV4LWlwdjYub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKworQVRPTUlDX05PVElGSUVSX0hFQUQobmZfY29ubnRyYWNrX2NoYWluKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19jaGFpbik7CisKK0FUT01JQ19OT1RJRklFUl9IRUFEKG5mX2Nvbm50cmFja19leHBlY3RfY2hhaW4pOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2V4cGVjdF9jaGFpbik7CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlLCBuZl9jb25udHJhY2tfZWNhY2hlKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2VjYWNoZSk7CisKKy8qIGRlbGl2ZXIgY2FjaGVkIGV2ZW50cyBhbmQgY2xlYXIgY2FjaGUgZW50cnkgLSBtdXN0IGJlIGNhbGxlZCB3aXRoIGxvY2FsbHkKKyAqIGRpc2FibGVkIHNvZnRpcnFzICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGUpCit7CisJaWYgKG5mX2N0X2lzX2NvbmZpcm1lZChlY2FjaGUtPmN0KSAmJiAhbmZfY3RfaXNfZHlpbmcoZWNhY2hlLT5jdCkKKwkgICAgJiYgZWNhY2hlLT5ldmVudHMpCisJCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZuZl9jb25udHJhY2tfY2hhaW4sIGVjYWNoZS0+ZXZlbnRzLAorCQkJCSAgICBlY2FjaGUtPmN0KTsKKworCWVjYWNoZS0+ZXZlbnRzID0gMDsKKwluZl9jdF9wdXQoZWNhY2hlLT5jdCk7CisJZWNhY2hlLT5jdCA9IE5VTEw7Cit9CisKKy8qIERlbGl2ZXIgYWxsIGNhY2hlZCBldmVudHMgZm9yIGEgcGFydGljdWxhciBjb25udHJhY2suIFRoaXMgaXMgY2FsbGVkCisgKiBieSBjb2RlIHByaW9yIHRvIGFzeW5jIHBhY2tldCBoYW5kbGluZyBmb3IgZnJlZWluZyB0aGUgc2tiICovCit2b2lkIG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwllY2FjaGUgPSAmX19nZXRfY3B1X3ZhcihuZl9jb25udHJhY2tfZWNhY2hlKTsKKwlpZiAoZWNhY2hlLT5jdCA9PSBjdCkKKwkJX19uZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoZWNhY2hlKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyk7CisKKy8qIERlbGl2ZXIgY2FjaGVkIGV2ZW50cyBmb3Igb2xkIHBlbmRpbmcgZXZlbnRzLCBpZiBjdXJyZW50IGNvbm50cmFjayAhPSBvbGQgKi8KK3ZvaWQgX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KHN0cnVjdCBuZl9jb25uICpjdCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZWNhY2hlOworCisJLyogdGFrZSBjYXJlIG9mIGRlbGl2ZXJpbmcgcG90ZW50aWFsbHkgb2xkIGV2ZW50cyAqLworCWVjYWNoZSA9ICZfX2dldF9jcHVfdmFyKG5mX2Nvbm50cmFja19lY2FjaGUpOworCUJVR19PTihlY2FjaGUtPmN0ID09IGN0KTsKKwlpZiAoZWNhY2hlLT5jdCkKKwkJX19uZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoZWNhY2hlKTsKKwkvKiBpbml0aWFsaXplIGZvciB0aGlzIGNvbm50cmFjay9wYWNrZXQgKi8KKwllY2FjaGUtPmN0ID0gY3Q7CisJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KTsKKworLyogZmx1c2ggdGhlIGV2ZW50IGNhY2hlIC0gdG91Y2hlcyBvdGhlciBDUFUncyBkYXRhIGFuZCBtdXN0IG5vdCBiZSBjYWxsZWQKKyAqIHdoaWxlIHBhY2tldHMgYXJlIHN0aWxsIHBhc3NpbmcgdGhyb3VnaCB0aGUgY29kZSAqLwordm9pZCBuZl9jdF9ldmVudF9jYWNoZV9mbHVzaCh2b2lkKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplY2FjaGU7CisJaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJZWNhY2hlID0gJnBlcl9jcHUobmZfY29ubnRyYWNrX2VjYWNoZSwgY3B1KTsKKwkJaWYgKGVjYWNoZS0+Y3QpCisJCQluZl9jdF9wdXQoZWNhY2hlLT5jdCk7CisJfQorfQorCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OGQzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYwpAQCAtMCwwICsxLDQ0MiBAQAorLyogRXhwZWN0YXRpb24gaGFuZGxpbmcgZm9yIG5mX2Nvbm50cmFjay4gKi8KKworLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICogKEMpIDIwMDMsMjAwNCBVU0FHSS9XSURFIFByb2plY3QgPGh0dHA6Ly93d3cubGludXgtaXB2Ni5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorCitMSVNUX0hFQUQobmZfY29ubnRyYWNrX2V4cGVjdF9saXN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19leHBlY3RfbGlzdCk7CisKK2ttZW1fY2FjaGVfdCAqbmZfY29ubnRyYWNrX2V4cGVjdF9jYWNoZXAgX19yZWFkX21vc3RseTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2V4cGVjdF9uZXh0X2lkOworCisvKiBuZl9jb25udHJhY2tfZXhwZWN0IGhlbHBlciBmdW5jdGlvbnMgKi8KK3ZvaWQgbmZfY3RfdW5saW5rX2V4cGVjdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGV4cC0+bWFzdGVyKTsKKworCU5GX0NUX0FTU0VSVChtYXN0ZXJfaGVscCk7CisJTkZfQ1RfQVNTRVJUKCF0aW1lcl9wZW5kaW5nKCZleHAtPnRpbWVvdXQpKTsKKworCWxpc3RfZGVsKCZleHAtPmxpc3QpOworCU5GX0NUX1NUQVRfSU5DKGV4cGVjdF9kZWxldGUpOworCW1hc3Rlcl9oZWxwLT5leHBlY3RpbmctLTsKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfdW5saW5rX2V4cGVjdCk7CisKK3N0YXRpYyB2b2lkIGV4cGVjdGF0aW9uX3RpbWVkX291dCh1bnNpZ25lZCBsb25nIHVsX2V4cGVjdCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwID0gKHZvaWQgKil1bF9leHBlY3Q7CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJbmZfY3RfdW5saW5rX2V4cGVjdChleHApOworCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7Cit9CisKK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKK19fbmZfY29ubnRyYWNrX2V4cGVjdF9maW5kKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CisJCWlmIChuZl9jdF90dXBsZV9tYXNrX2NtcCh0dXBsZSwgJmktPnR1cGxlLCAmaS0+bWFzaykpCisJCQlyZXR1cm4gaTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19leHBlY3RfZmluZCk7CisKKy8qIEp1c3QgZmluZCBhIGV4cGVjdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKK25mX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmk7CisKKwlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlpID0gX19uZl9jb25udHJhY2tfZXhwZWN0X2ZpbmQodHVwbGUpOworCWlmIChpKQorCQlhdG9taWNfaW5jKCZpLT51c2UpOworCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlyZXR1cm4gaTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQpOworCisvKiBJZiBhbiBleHBlY3RhdGlvbiBmb3IgdGhpcyBjb25uZWN0aW9uIGlzIGZvdW5kLCBpdCBnZXRzIGRlbGV0ZSBmcm9tCisgKiBnbG9iYWwgbGlzdCB0aGVuIHJldHVybmVkLiAqLworc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKgorZmluZF9leHBlY3RhdGlvbihjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaSwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgeworCS8qIElmIG1hc3RlciBpcyBub3QgaW4gaGFzaCB0YWJsZSB5ZXQgKGllLiBwYWNrZXQgaGFzbid0IGxlZnQKKwkgICB0aGlzIG1hY2hpbmUgeWV0KSwgaG93IGNhbiBvdGhlciBlbmQga25vdyBhYm91dCBleHBlY3RlZD8KKwkgICBIZW5jZSB0aGVzZSBhcmUgbm90IHRoZSBkcm9pZHMgeW91IGFyZSBsb29raW5nIGZvciAoaWYKKwkgICBtYXN0ZXIgY3QgbmV2ZXIgZ290IGNvbmZpcm1lZCwgd2UnZCBob2xkIGEgcmVmZXJlbmNlIHRvIGl0CisJICAgYW5kIHdlaXJkIHRoaW5ncyB3b3VsZCBoYXBwZW4gdG8gZnV0dXJlIHBhY2tldHMpLiAqLworCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spCisJCSAgICAmJiBuZl9jdF9pc19jb25maXJtZWQoaS0+bWFzdGVyKSkgeworCQkJaWYgKGktPmZsYWdzICYgTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVCkgeworCQkJCWF0b21pY19pbmMoJmktPnVzZSk7CisJCQkJcmV0dXJuIGk7CisJCQl9IGVsc2UgaWYgKGRlbF90aW1lcigmaS0+dGltZW91dCkpIHsKKwkJCQluZl9jdF91bmxpbmtfZXhwZWN0KGkpOworCQkJCXJldHVybiBpOworCQkJfQorCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBkZWxldGUgYWxsIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBjb25udHJhY2sgKi8KK3ZvaWQgbmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyhzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmksICp0bXA7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjdCk7CisKKwkvKiBPcHRpbWl6YXRpb246IG1vc3QgY29ubmVjdGlvbiBuZXZlciBleHBlY3QgYW55IG90aGVycy4gKi8KKwlpZiAoIWhlbHAgfHwgaGVscC0+ZXhwZWN0aW5nID09IDApCisJCXJldHVybjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpLCB0bXAsICZuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGktPm1hc3RlciA9PSBjdCAmJiBkZWxfdGltZXIoJmktPnRpbWVvdXQpKSB7CisJCQluZl9jdF91bmxpbmtfZXhwZWN0KGkpOworCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoaSk7CisgCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyk7CisKKy8qIFdvdWxkIHR3byBleHBlY3RlZCB0aGluZ3MgY2xhc2g/ICovCitzdGF0aWMgaW5saW5lIGludCBleHBlY3RfY2xhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmEsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmIpCit7CisJLyogUGFydCBjb3ZlcmVkIGJ5IGludGVyc2VjdGlvbiBvZiBtYXNrcyBtdXN0IGJlIHVuZXF1YWwsCisJICAgb3RoZXJ3aXNlIHRoZXkgY2xhc2ggKi8KKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGludGVyc2VjdF9tYXNrOworCWludCBjb3VudDsKKworCWludGVyc2VjdF9tYXNrLnNyYy5sM251bSA9IGEtPm1hc2suc3JjLmwzbnVtICYgYi0+bWFzay5zcmMubDNudW07CisJaW50ZXJzZWN0X21hc2suc3JjLnUuYWxsID0gYS0+bWFzay5zcmMudS5hbGwgJiBiLT5tYXNrLnNyYy51LmFsbDsKKwlpbnRlcnNlY3RfbWFzay5kc3QudS5hbGwgPSBhLT5tYXNrLmRzdC51LmFsbCAmIGItPm1hc2suZHN0LnUuYWxsOworCWludGVyc2VjdF9tYXNrLmRzdC5wcm90b251bSA9IGEtPm1hc2suZHN0LnByb3RvbnVtCisJCQkJCSYgYi0+bWFzay5kc3QucHJvdG9udW07CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBORl9DVF9UVVBMRV9MM1NJWkU7IGNvdW50KyspeworCQlpbnRlcnNlY3RfbWFzay5zcmMudTMuYWxsW2NvdW50XSA9CisJCQlhLT5tYXNrLnNyYy51My5hbGxbY291bnRdICYgYi0+bWFzay5zcmMudTMuYWxsW2NvdW50XTsKKwl9CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBORl9DVF9UVVBMRV9MM1NJWkU7IGNvdW50KyspeworCQlpbnRlcnNlY3RfbWFzay5kc3QudTMuYWxsW2NvdW50XSA9CisJCQlhLT5tYXNrLmRzdC51My5hbGxbY291bnRdICYgYi0+bWFzay5kc3QudTMuYWxsW2NvdW50XTsKKwl9CisKKwlyZXR1cm4gbmZfY3RfdHVwbGVfbWFza19jbXAoJmEtPnR1cGxlLCAmYi0+dHVwbGUsICZpbnRlcnNlY3RfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4cGVjdF9tYXRjaGVzKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICphLAorCQkJCSBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqYikKK3sKKwlyZXR1cm4gYS0+bWFzdGVyID09IGItPm1hc3RlcgorCQkmJiBuZl9jdF90dXBsZV9lcXVhbCgmYS0+dHVwbGUsICZiLT50dXBsZSkKKwkJJiYgbmZfY3RfdHVwbGVfZXF1YWwoJmEtPm1hc2ssICZiLT5tYXNrKTsKK30KKworLyogR2VuZXJhbGx5IGEgYmFkIGlkZWEgdG8gY2FsbCB0aGlzOiBjb3VsZCBoYXZlIG1hdGNoZWQgYWxyZWFkeS4gKi8KK3ZvaWQgbmZfY29ubnRyYWNrX3VuZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkvKiBjaG9vc2UgdGhlIHRoZSBvbGRlc3QgZXhwZWN0YXRpb24gdG8gZXZpY3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaSwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCwgbGlzdCkgeworCQlpZiAoZXhwZWN0X21hdGNoZXMoaSwgZXhwKSAmJiBkZWxfdGltZXIoJmktPnRpbWVvdXQpKSB7CisJCQluZl9jdF91bmxpbmtfZXhwZWN0KGkpOworCQkJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChpKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKTsKKworLyogV2UgZG9uJ3QgaW5jcmVhc2UgdGhlIG1hc3RlciBjb25udHJhY2sgcmVmY291bnQgZm9yIG5vbi1mdWxmaWxsZWQKKyAqIGNvbm50cmFja3MuIER1cmluZyB0aGUgY29ubnRyYWNrIGRlc3RydWN0aW9uLCB0aGUgZXhwZWN0YXRpb25zIGFyZQorICogYWx3YXlzIGtpbGxlZCBiZWZvcmUgdGhlIGNvbm50cmFjayBpdHNlbGYgKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKHN0cnVjdCBuZl9jb25uICptZSkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqbmV3OworCisJbmV3ID0ga21lbV9jYWNoZV9hbGxvYyhuZl9jb25udHJhY2tfZXhwZWN0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CisJaWYgKCFuZXcpCisJCXJldHVybiBOVUxMOworCisJbmV3LT5tYXN0ZXIgPSBtZTsKKwlhdG9taWNfc2V0KCZuZXctPnVzZSwgMSk7CisJcmV0dXJuIG5ldzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19leHBlY3RfYWxsb2MpOworCit2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfaW5pdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCBpbnQgZmFtaWx5LAorCQkJICAgICAgdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgKnNhZGRyLAorCQkJICAgICAgdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgKmRhZGRyLAorCQkJICAgICAgdV9pbnQ4X3QgcHJvdG8sIF9fYmUxNiAqc3JjLCBfX2JlMTYgKmRzdCkKK3sKKwlpbnQgbGVuOworCisJaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorCQlsZW4gPSA0OworCWVsc2UKKwkJbGVuID0gMTY7CisKKwlleHAtPmZsYWdzID0gMDsKKwlleHAtPmV4cGVjdGZuID0gTlVMTDsKKwlleHAtPmhlbHBlciA9IE5VTEw7CisJZXhwLT50dXBsZS5zcmMubDNudW0gPSBmYW1pbHk7CisJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBwcm90bzsKKwlleHAtPm1hc2suc3JjLmwzbnVtID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCisJaWYgKHNhZGRyKSB7CisJCW1lbWNweSgmZXhwLT50dXBsZS5zcmMudTMsIHNhZGRyLCBsZW4pOworCQlpZiAoc2l6ZW9mKGV4cC0+dHVwbGUuc3JjLnUzKSA+IGxlbikKKwkJCS8qIGFkZHJlc3MgbmVlZHMgdG8gYmUgY2xlYXJlZCBmb3IgbmZfY3RfdHVwbGVfZXF1YWwgKi8KKwkJCW1lbXNldCgodm9pZCAqKSZleHAtPnR1cGxlLnNyYy51MyArIGxlbiwgMHgwMCwKKwkJCSAgICAgICBzaXplb2YoZXhwLT50dXBsZS5zcmMudTMpIC0gbGVuKTsKKwkJbWVtc2V0KCZleHAtPm1hc2suc3JjLnUzLCAweEZGLCBsZW4pOworCQlpZiAoc2l6ZW9mKGV4cC0+bWFzay5zcmMudTMpID4gbGVuKQorCQkJbWVtc2V0KCh2b2lkICopJmV4cC0+bWFzay5zcmMudTMgKyBsZW4sIDB4MDAsCisJCQkgICAgICAgc2l6ZW9mKGV4cC0+bWFzay5zcmMudTMpIC0gbGVuKTsKKwl9IGVsc2UgeworCQltZW1zZXQoJmV4cC0+dHVwbGUuc3JjLnUzLCAweDAwLCBzaXplb2YoZXhwLT50dXBsZS5zcmMudTMpKTsKKwkJbWVtc2V0KCZleHAtPm1hc2suc3JjLnUzLCAweDAwLCBzaXplb2YoZXhwLT5tYXNrLnNyYy51MykpOworCX0KKworCWlmIChkYWRkcikgeworCQltZW1jcHkoJmV4cC0+dHVwbGUuZHN0LnUzLCBkYWRkciwgbGVuKTsKKwkJaWYgKHNpemVvZihleHAtPnR1cGxlLmRzdC51MykgPiBsZW4pCisJCQkvKiBhZGRyZXNzIG5lZWRzIHRvIGJlIGNsZWFyZWQgZm9yIG5mX2N0X3R1cGxlX2VxdWFsICovCisJCQltZW1zZXQoKHZvaWQgKikmZXhwLT50dXBsZS5kc3QudTMgKyBsZW4sIDB4MDAsCisJCQkgICAgICAgc2l6ZW9mKGV4cC0+dHVwbGUuZHN0LnUzKSAtIGxlbik7CisJCW1lbXNldCgmZXhwLT5tYXNrLmRzdC51MywgMHhGRiwgbGVuKTsKKwkJaWYgKHNpemVvZihleHAtPm1hc2suZHN0LnUzKSA+IGxlbikKKwkJCW1lbXNldCgodm9pZCAqKSZleHAtPm1hc2suZHN0LnUzICsgbGVuLCAweDAwLAorCQkJICAgICAgIHNpemVvZihleHAtPm1hc2suZHN0LnUzKSAtIGxlbik7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZleHAtPnR1cGxlLmRzdC51MywgMHgwMCwgc2l6ZW9mKGV4cC0+dHVwbGUuZHN0LnUzKSk7CisJCW1lbXNldCgmZXhwLT5tYXNrLmRzdC51MywgMHgwMCwgc2l6ZW9mKGV4cC0+bWFzay5kc3QudTMpKTsKKwl9CisKKwlpZiAoc3JjKSB7CisJCWV4cC0+dHVwbGUuc3JjLnUuYWxsID0gKF9fZm9yY2UgdTE2KSpzcmM7CisJCWV4cC0+bWFzay5zcmMudS5hbGwgPSAweEZGRkY7CisJfSBlbHNlIHsKKwkJZXhwLT50dXBsZS5zcmMudS5hbGwgPSAwOworCQlleHAtPm1hc2suc3JjLnUuYWxsID0gMDsKKwl9CisKKwlpZiAoZHN0KSB7CisJCWV4cC0+dHVwbGUuZHN0LnUuYWxsID0gKF9fZm9yY2UgdTE2KSpkc3Q7CisJCWV4cC0+bWFzay5kc3QudS5hbGwgPSAweEZGRkY7CisJfSBlbHNlIHsKKwkJZXhwLT50dXBsZS5kc3QudS5hbGwgPSAwOworCQlleHAtPm1hc2suZHN0LnUuYWxsID0gMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfZXhwZWN0X2luaXQpOworCit2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmV4cC0+dXNlKSkKKwkJa21lbV9jYWNoZV9mcmVlKG5mX2Nvbm50cmFja19leHBlY3RfY2FjaGVwLCBleHApOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2V4cGVjdF9wdXQpOworCitzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfZXhwZWN0X2luc2VydChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQoreworCXN0cnVjdCBuZl9jb25uX2hlbHAgKm1hc3Rlcl9oZWxwID0gbmZjdF9oZWxwKGV4cC0+bWFzdGVyKTsKKworCWF0b21pY19pbmMoJmV4cC0+dXNlKTsKKwltYXN0ZXJfaGVscC0+ZXhwZWN0aW5nKys7CisJbGlzdF9hZGQoJmV4cC0+bGlzdCwgJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCk7CisKKwlpbml0X3RpbWVyKCZleHAtPnRpbWVvdXQpOworCWV4cC0+dGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZXhwOworCWV4cC0+dGltZW91dC5mdW5jdGlvbiA9IGV4cGVjdGF0aW9uX3RpbWVkX291dDsKKwlleHAtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBtYXN0ZXJfaGVscC0+aGVscGVyLT50aW1lb3V0ICogSFo7CisJYWRkX3RpbWVyKCZleHAtPnRpbWVvdXQpOworCisJZXhwLT5pZCA9ICsrbmZfY29ubnRyYWNrX2V4cGVjdF9uZXh0X2lkOworCWF0b21pY19pbmMoJmV4cC0+dXNlKTsKKwlORl9DVF9TVEFUX0lOQyhleHBlY3RfY3JlYXRlKTsKK30KKworLyogUmFjZSB3aXRoIGV4cGVjdGF0aW9ucyBiZWluZyB1c2VkIG1lYW5zIHdlIGNvdWxkIGhhdmUgbm9uZSB0byBmaW5kOyBPSy4gKi8KK3N0YXRpYyB2b2lkIGV2aWN0X29sZGVzdF9leHBlY3Qoc3RydWN0IG5mX2Nvbm4gKm1hc3RlcikKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShpLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CisJCWlmIChpLT5tYXN0ZXIgPT0gbWFzdGVyKSB7CisJCQlpZiAoZGVsX3RpbWVyKCZpLT50aW1lb3V0KSkgeworCQkJCW5mX2N0X3VubGlua19leHBlY3QoaSk7CisJCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoaSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcmVmcmVzaF90aW1lcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaSkKK3sKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICptYXN0ZXJfaGVscCA9IG5mY3RfaGVscChpLT5tYXN0ZXIpOworCisJaWYgKCFkZWxfdGltZXIoJmktPnRpbWVvdXQpKQorCQlyZXR1cm4gMDsKKworCWktPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBtYXN0ZXJfaGVscC0+aGVscGVyLT50aW1lb3V0KkhaOworCWFkZF90aW1lcigmaS0+dGltZW91dCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCBuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqaTsKKwlzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyID0gZXhwZWN0LT5tYXN0ZXI7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqbWFzdGVyX2hlbHAgPSBuZmN0X2hlbHAobWFzdGVyKTsKKwlpbnQgcmV0OworCisJTkZfQ1RfQVNTRVJUKG1hc3Rlcl9oZWxwKTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZuZl9jb25udHJhY2tfZXhwZWN0X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGV4cGVjdF9tYXRjaGVzKGksIGV4cGVjdCkpIHsKKwkJCS8qIFJlZnJlc2ggdGltZXI6IGlmIGl0J3MgZHlpbmcsIGlnbm9yZS4uICovCisJCQlpZiAocmVmcmVzaF90aW1lcihpKSkgeworCQkJCXJldCA9IDA7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSBpZiAoZXhwZWN0X2NsYXNoKGksIGV4cGVjdCkpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCS8qIFdpbGwgYmUgb3ZlciBsaW1pdD8gKi8KKwlpZiAobWFzdGVyX2hlbHAtPmhlbHBlci0+bWF4X2V4cGVjdGVkICYmCisJICAgIG1hc3Rlcl9oZWxwLT5leHBlY3RpbmcgPj0gbWFzdGVyX2hlbHAtPmhlbHBlci0+bWF4X2V4cGVjdGVkKQorCQlldmljdF9vbGRlc3RfZXhwZWN0KG1hc3Rlcik7CisKKwluZl9jb25udHJhY2tfZXhwZWN0X2luc2VydChleHBlY3QpOworCW5mX2Nvbm50cmFja19leHBlY3RfZXZlbnQoSVBFWFBfTkVXLCBleHBlY3QpOworCXJldCA9IDA7CitvdXQ6CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZCk7CisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworc3RhdGljIHZvaWQgKmV4cF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplID0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdDsKKwlsb2ZmX3QgaTsKKworCS8qIHN0cmFuZ2Ugc2VxX2ZpbGUgYXBpIGNhbGxzIHN0b3AgZXZlbiBpZiB3ZSBmYWlsLAorCSAqIHRodXMgd2UgbmVlZCB0byBncmFiIGxvY2sgc2luY2Ugc3RvcCB1bmxvY2tzICovCisJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlpZiAobGlzdF9lbXB0eShlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDw9ICpwb3M7IGkrKykgeworCQllID0gZS0+bmV4dDsKKwkJaWYgKGUgPT0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgKmV4cF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmUgPSB2OworCisJKysqcG9zOworCWUgPSBlLT5uZXh0OworCisJaWYgKGUgPT0gJm5mX2Nvbm50cmFja19leHBlY3RfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHZvaWQgZXhwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworfQorCitzdGF0aWMgaW50IGV4cF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdCA9IHY7CisKKwlpZiAoZXhwZWN0LT50aW1lb3V0LmZ1bmN0aW9uKQorCQlzZXFfcHJpbnRmKHMsICIlbGQgIiwgdGltZXJfcGVuZGluZygmZXhwZWN0LT50aW1lb3V0KQorCQkJICAgPyAobG9uZykoZXhwZWN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKS9IWiA6IDApOworCWVsc2UKKwkJc2VxX3ByaW50ZihzLCAiLSAiKTsKKwlzZXFfcHJpbnRmKHMsICJsM3Byb3RvID0gJXUgcHJvdG89JXUgIiwKKwkJICAgZXhwZWN0LT50dXBsZS5zcmMubDNudW0sCisJCSAgIGV4cGVjdC0+dHVwbGUuZHN0LnByb3RvbnVtKTsKKwlwcmludF90dXBsZShzLCAmZXhwZWN0LT50dXBsZSwKKwkJICAgIF9fbmZfY3RfbDNwcm90b19maW5kKGV4cGVjdC0+dHVwbGUuc3JjLmwzbnVtKSwKKwkJICAgIF9fbmZfY3RfbDRwcm90b19maW5kKGV4cGVjdC0+dHVwbGUuc3JjLmwzbnVtLAorCQkJCSAgICAgICBleHBlY3QtPnR1cGxlLmRzdC5wcm90b251bSkpOworCXJldHVybiBzZXFfcHV0YyhzLCAnXG4nKTsKK30KKworc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBleHBfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBleHBfc2VxX3N0YXJ0LAorCS5uZXh0ID0gZXhwX3NlcV9uZXh0LAorCS5zdG9wID0gZXhwX3NlcV9zdG9wLAorCS5zaG93ID0gZXhwX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IGV4cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmZXhwX3NlcV9vcHMpOworfQorCitzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4cF9maWxlX29wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gZXhwX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlCit9OworI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCmluZGV4IDBjMTdhNWIuLjkyYTk0NzEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC0yNiwxMiArMjYsMTUgQEAKICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlJ1c3R5IFJ1c3NlbGwgPHJ1c3R5QHJ1c3Rjb3JwLmNvbS5hdT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiZnRwIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja19mdHAiKTsKIAogLyogVGhpcyBpcyBzbG93LCBidXQgaXQncyBzaW1wbGUuIC0tUlIgKi8KIHN0YXRpYyBjaGFyICpmdHBfYnVmZmVyOwpAQCAtNDgsNyArNTEsNyBAQAogCiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfZnRwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCQllbnVtIGlwX2N0X2Z0cF90eXBlIHR5cGUsCisJCQkJZW51bSBuZl9jdF9mdHBfdHlwZSB0eXBlLAogCQkJCXVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJCQl1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKQEAgLTcxLDcgKzc0LDcgQEAKIAlzaXplX3QgcGxlbjsKIAljaGFyIHNraXA7CiAJY2hhciB0ZXJtOwotCWVudW0gaXBfY3RfZnRwX3R5cGUgZnRwdHlwZTsKKwllbnVtIG5mX2N0X2Z0cF90eXBlIGZ0cHR5cGU7CiAJaW50ICgqZ2V0bnVtKShjb25zdCBjaGFyICosIHNpemVfdCwgc3RydWN0IG5mX2Nvbm50cmFja19tYW4gKiwgY2hhcik7CiB9IHNlYXJjaFtJUF9DVF9ESVJfTUFYXVsyXSA9IHsKIAlbSVBfQ1RfRElSX09SSUdJTkFMXSA9IHsKQEAgLTgwLDcgKzgzLDcgQEAKIAkJCS5wbGVuCQk9IHNpemVvZigiUE9SVCIpIC0gMSwKIAkJCS5za2lwCQk9ICcgJywKIAkJCS50ZXJtCQk9ICdccicsCi0JCQkuZnRwdHlwZQk9IElQX0NUX0ZUUF9QT1JULAorCQkJLmZ0cHR5cGUJPSBORl9DVF9GVFBfUE9SVCwKIAkJCS5nZXRudW0JCT0gdHJ5X3JmYzk1OSwKIAkJfSwKIAkJewpAQCAtODgsNyArOTEsNyBAQAogCQkJLnBsZW4JCT0gc2l6ZW9mKCJFUFJUIikgLSAxLAogCQkJLnNraXAJCT0gJyAnLAogCQkJLnRlcm0JCT0gJ1xyJywKLQkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX0VQUlQsCisJCQkuZnRwdHlwZQk9IE5GX0NUX0ZUUF9FUFJULAogCQkJLmdldG51bQkJPSB0cnlfZXBydCwKIAkJfSwKIAl9LApAQCAtOTgsNyArMTAxLDcgQEAKIAkJCS5wbGVuCQk9IHNpemVvZigiMjI3ICIpIC0gMSwKIAkJCS5za2lwCQk9ICcoJywKIAkJCS50ZXJtCQk9ICcpJywKLQkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX1BBU1YsCisJCQkuZnRwdHlwZQk9IE5GX0NUX0ZUUF9QQVNWLAogCQkJLmdldG51bQkJPSB0cnlfcmZjOTU5LAogCQl9LAogCQl7CkBAIC0xMDYsNyArMTA5LDcgQEAKIAkJCS5wbGVuCQk9IHNpemVvZigiMjI5ICIpIC0gMSwKIAkJCS5za2lwCQk9ICcoJywKIAkJCS50ZXJtCQk9ICcpJywKLQkJCS5mdHB0eXBlCT0gSVBfQ1RfRlRQX0VQU1YsCisJCQkuZnRwdHlwZQk9IE5GX0NUX0ZUUF9FUFNWLAogCQkJLmdldG51bQkJPSB0cnlfZXBzdl9yZXNwb25zZSwKIAkJfSwKIAl9LApAQCAtMTcxLDcgKzE3NCw3IEBACiAKIC8qIEdyYWIgcG9ydDogbnVtYmVyIHVwIHRvIGRlbGltaXRlciAqLwogc3RhdGljIGludCBnZXRfcG9ydChjb25zdCBjaGFyICpkYXRhLCBpbnQgc3RhcnQsIHNpemVfdCBkbGVuLCBjaGFyIGRlbGltLAotCQkgICAgdV9pbnQxNl90ICpwb3J0KQorCQkgICAgX19iZTE2ICpwb3J0KQogewogCXVfaW50MTZfdCB0bXBfcG9ydCA9IDA7CiAJaW50IGk7CkBAIC0zMTcsNyArMzIwLDcgQEAKIH0KIAogLyogTG9vayB1cCB0byBzZWUgaWYgd2UncmUganVzdCBhZnRlciBhIFxuLiAqLwotc3RhdGljIGludCBmaW5kX25sX3NlcSh1MzIgc2VxLCBjb25zdCBzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqaW5mbywgaW50IGRpcikKK3N0YXRpYyBpbnQgZmluZF9ubF9zZXEodTMyIHNlcSwgY29uc3Qgc3RydWN0IG5mX2N0X2Z0cF9tYXN0ZXIgKmluZm8sIGludCBkaXIpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAKQEAgLTMyOCw3ICszMzEsNyBAQAogfQogCiAvKiBXZSBkb24ndCB1cGRhdGUgaWYgaXQncyBvbGRlciB0aGFuIHdoYXQgd2UgaGF2ZS4gKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9ubF9zZXEodTMyIG5sX3NlcSwgc3RydWN0IGlwX2N0X2Z0cF9tYXN0ZXIgKmluZm8sIGludCBkaXIsCitzdGF0aWMgdm9pZCB1cGRhdGVfbmxfc2VxKHUzMiBubF9zZXEsIHN0cnVjdCBuZl9jdF9mdHBfbWFzdGVyICppbmZvLCBpbnQgZGlyLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGludCBpLCBvbGRlc3QgPSBOVU1fU0VRX1RPX1JFTUVNQkVSOwpAQCAtMzY0LDEyICszNjcsMTIgQEAKIAl1MzIgc2VxOwogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJdW5zaWduZWQgaW50IG1hdGNobGVuLCBtYXRjaG9mZjsKLQlzdHJ1Y3QgaXBfY3RfZnRwX21hc3RlciAqY3RfZnRwX2luZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9mdHBfaW5mbzsKKwlzdHJ1Y3QgbmZfY3RfZnRwX21hc3RlciAqY3RfZnRwX2luZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9mdHBfaW5mbzsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfbWFuIGNtZCA9IHt9OwotCiAJdW5zaWduZWQgaW50IGk7CiAJaW50IGZvdW5kID0gMCwgZW5kc19pbl9ubDsKKwl0eXBlb2YobmZfbmF0X2Z0cF9ob29rKSBuZl9uYXRfZnRwOwogCiAJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCiAJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRApAQCAtNTAwLDEyICs1MDMsMTIgQEAKIAkJCSAgICAgICAudSA9IHsgLnRjcCA9IHsgMCB9fSwKIAkJCSAgICAgfSwKIAkJICAgICAgLmRzdCA9IHsgLnByb3RvbnVtID0gMHhGRiwKLQkJCSAgICAgICAudSA9IHsgLnRjcCA9IHsgMHhGRkZGIH19LAorCQkJICAgICAgIC51ID0geyAudGNwID0geyBfX2NvbnN0YW50X2h0b25zKDB4RkZGRikgfX0sCiAJCQkgICAgIH0sCiAJCSAgICB9OwogCWlmIChjbWQubDNudW0gPT0gUEZfSU5FVCkgewotCQlleHAtPm1hc2suc3JjLnUzLmlwID0gMHhGRkZGRkZGRjsKLQkJZXhwLT5tYXNrLmRzdC51My5pcCA9IDB4RkZGRkZGRkY7CisJCWV4cC0+bWFzay5zcmMudTMuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKKwkJZXhwLT5tYXNrLmRzdC51My5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOwogCX0gZWxzZSB7CiAJCW1lbXNldChleHAtPm1hc2suc3JjLnUzLmlwNiwgMHhGRiwKIAkJICAgICAgIHNpemVvZihleHAtPm1hc2suc3JjLnUzLmlwNikpOwpAQCAtNTE0LDEzICs1MTcsMTUgQEAKIAl9CiAKIAlleHAtPmV4cGVjdGZuID0gTlVMTDsKKwlleHAtPmhlbHBlciA9IE5VTEw7CiAJZXhwLT5mbGFncyA9IDA7CiAKIAkvKiBOb3csIE5BVCBtaWdodCB3YW50IHRvIG1hbmdsZSB0aGUgcGFja2V0LCBhbmQgcmVnaXN0ZXIgdGhlCiAJICogKHBvc3NpYmx5IGNoYW5nZWQpIGV4cGVjdGF0aW9uIGl0c2VsZi4gKi8KLQlpZiAobmZfbmF0X2Z0cF9ob29rKQotCQlyZXQgPSBuZl9uYXRfZnRwX2hvb2socHNrYiwgY3RpbmZvLCBzZWFyY2hbZGlyXVtpXS5mdHB0eXBlLAotCQkJCSAgICAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgZXhwLCAmc2VxKTsKKwluZl9uYXRfZnRwID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9mdHBfaG9vayk7CisJaWYgKG5mX25hdF9mdHAgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykKKwkJcmV0ID0gbmZfbmF0X2Z0cChwc2tiLCBjdGluZm8sIHNlYXJjaFtkaXJdW2ldLmZ0cHR5cGUsCisJCQkJIG1hdGNob2ZmLCBtYXRjaGxlbiwgZXhwLCAmc2VxKTsKIAllbHNlIHsKIAkJLyogQ2FuJ3QgZXhwZWN0IHRoaXM/ICBCZXN0IHRvIGRyb3AgcGFja2V0IG5vdy4gKi8KIAkJaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApICE9IDApCkBAIC01ODQsNyArNTg5LDggQEAKIAkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewogCQkJZnRwW2ldW2pdLnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOwogCQkJZnRwW2ldW2pdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOwotCQkJZnRwW2ldW2pdLm1hc2suc3JjLnUudGNwLnBvcnQgPSAweEZGRkY7CisJCQlmdHBbaV1bal0ubWFzay5zcmMubDNudW0gPSAweEZGRkY7CisJCQlmdHBbaV1bal0ubWFzay5zcmMudS50Y3AucG9ydCA9IGh0b25zKDB4RkZGRik7CiAJCQlmdHBbaV1bal0ubWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCQkJZnRwW2ldW2pdLm1heF9leHBlY3RlZCA9IDE7CiAJCQlmdHBbaV1bal0udGltZW91dCA9IDUgKiA2MDsJLyogNSBNaW51dGVzICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIG5ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjNfYXNuMS5jCnJlbmFtZSB0byBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwppbmRleCAyNmRmZWNhLi5mNmZhZDcxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX2FzbjEuYwpAQCAtMTUsNyArMTUsNyBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdGRpby5oPgogI2VuZGlmCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfYXNuMS5oPgogCiAvKiBUcmFjZSBGbGFnICovCiAjaWZuZGVmIEgzMjNfVFJBQ0UKQEAgLTE0NCw3ICsxNDQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEguMzIzIFR5cGVzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJpcF9jb25udHJhY2tfaGVscGVyX2gzMjNfdHlwZXMuYyIKKyNpbmNsdWRlICJuZl9jb25udHJhY2tfaDMyM190eXBlcy5jIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODU2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYwpAQCAtMCwwICsxLDE4NTYgQEAKKy8qCisgKiBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiB0aGUgJ2JydXRlIGZvcmNlJyBILjMyMyBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZSBieQorICogSm96c2VmIEthZGxlY3NpayA8a2FkbGVjQGJsYWNraG9sZS5rZmtpLmh1PgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIGh0dHA6Ly9uYXRoMzIzLnNvdXJjZWZvcmdlLm5ldC8KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiBQYXJhbWV0ZXJzICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfcnJxX3R0bCBfX3JlYWRfbW9zdGx5ID0gMzAwOworbW9kdWxlX3BhcmFtKGRlZmF1bHRfcnJxX3R0bCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfcnJxX3R0bCwgInVzZSB0aGlzIFRUTCBpZiBpdCdzIG1pc3NpbmcgaW4gUlJRIik7CisKK3N0YXRpYyBpbnQgZ2tyb3V0ZWRfb25seSBfX3JlYWRfbW9zdGx5ID0gMTsKK21vZHVsZV9wYXJhbShna3JvdXRlZF9vbmx5LCBpbnQsIDA2MDApOworTU9EVUxFX1BBUk1fREVTQyhna3JvdXRlZF9vbmx5LCAib25seSBhY2NlcHQgY2FsbHMgZnJvbSBnYXRla2VlcGVyIik7CisKK3N0YXRpYyBpbnQgY2FsbGZvcndhcmRfZmlsdGVyIF9fcmVhZF9tb3N0bHkgPSAxOworbW9kdWxlX3BhcmFtKGNhbGxmb3J3YXJkX2ZpbHRlciwgYm9vbCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhbGxmb3J3YXJkX2ZpbHRlciwgIm9ubHkgY3JlYXRlIGNhbGwgZm9yd2FyZGluZyBleHBlY3RhdGlvbnMgIgorCQkgICAgICAgICAgICAgICAgICAgICAiaWYgYm90aCBlbmRwb2ludHMgYXJlIG9uIGRpZmZlcmVudCBzaWRlcyAiCisJCQkJICAgICAiKGRldGVybWluZWQgYnkgcm91dGluZyBpbmZvcm1hdGlvbikiKTsKKworLyogSG9va3MgZm9yIE5BVCAqLworaW50ICgqc2V0X2gyNDVfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICAgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICp0YWRkciwKKwkJCSAgIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLCBfX2JlMTYgcG9ydCkKKwkJCSAgIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwKKwkJCSAgIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLCBfX2JlMTYgcG9ydCkKKwkJCSAgIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCBpbnQgY291bnQpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpzZXRfcmFzX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCQkgIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCBpbnQgY291bnQpIF9fcmVhZF9tb3N0bHk7CitpbnQgKCpuYXRfcnRwX3J0Y3BfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLAorCQkJICBfX2JlMTYgcG9ydCwgX19iZTE2IHJ0cF9wb3J0LAorCQkJICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cCwKKwkJCSAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwKSBfX3JlYWRfbW9zdGx5OworaW50ICgqbmF0X3QxMjBfaG9vaykgKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkgICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyLCBfX2JlMTYgcG9ydCwKKwkJICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkgX19yZWFkX21vc3RseTsKK2ludCAoKm5hdF9oMjQ1X2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJICAgICAgVHJhbnNwb3J0QWRkcmVzcyAqdGFkZHIsIF9fYmUxNiBwb3J0LAorCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OworaW50ICgqbmF0X2NhbGxmb3J3YXJkaW5nX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQlUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgX19iZTE2IHBvcnQsCisJCQkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkgX19yZWFkX21vc3RseTsKK2ludCAoKm5hdF9xOTMxX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgaW50IGlkeCwKKwkJICAgICAgX19iZTE2IHBvcnQsIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCisJCSAgICAgIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfaDMyM19sb2NrKTsKK3N0YXRpYyBjaGFyICpoMzIzX2J1ZmZlcjsKKworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfaDI0NTsKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbXTsKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBuZl9jb25udHJhY2tfaGVscGVyX3Jhc1tdOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2V0X3Rwa3RfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAorCQkJIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCAqZGF0YWxlbiwgaW50ICpkYXRhb2ZmKQoreworCXN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKKwlpbnQgdGNwZGF0YWxlbjsKKwlpbnQgdGNwZGF0YW9mZjsKKwl1bnNpZ25lZCBjaGFyICp0cGt0OworCWludCB0cGt0bGVuOworCWludCB0cGt0b2ZmOworCisJLyogR2V0IFRDUCBoZWFkZXIgKi8KKwl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlpZiAodGggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwkvKiBHZXQgVENQIGRhdGEgb2Zmc2V0ICovCisJdGNwZGF0YW9mZiA9IHByb3RvZmYgKyB0aC0+ZG9mZiAqIDQ7CisKKwkvKiBHZXQgVENQIGRhdGEgbGVuZ3RoICovCisJdGNwZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIHRjcGRhdGFvZmY7CisJaWYgKHRjcGRhdGFsZW4gPD0gMCkJLyogTm8gVENQIGRhdGEgKi8KKwkJZ290byBjbGVhcl9vdXQ7CisKKwlpZiAoKmRhdGEgPT0gTlVMTCkgewkvKiBmaXJzdCBUUEtUICovCisJCS8qIEdldCBmaXJzdCBUUEtUIHBvaW50ZXIgKi8KKwkJdHBrdCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgdGNwZGF0YW9mZiwgdGNwZGF0YWxlbiwKKwkJCQkJICBoMzIzX2J1ZmZlcik7CisJCUJVR19PTih0cGt0ID09IE5VTEwpOworCisJCS8qIFZhbGlkYXRlIFRQS1QgaWRlbnRpZmllciAqLworCQlpZiAodGNwZGF0YWxlbiA8IDQgfHwgdHBrdFswXSAhPSAweDAzIHx8IHRwa3RbMV0gIT0gMCkgeworCQkJLyogTmV0bWVldGluZyBzZW5kcyBUUEtUIGhlYWRlciBhbmQgZGF0YSBzZXBhcmF0ZWx5ICovCisJCQlpZiAoaW5mby0+dHBrdF9sZW5bZGlyXSA+IDApIHsKKwkJCQlERUJVR1AoIm5mX2N0X2gzMjM6IHByZXZpb3VzIHBhY2tldCAiCisJCQkJICAgICAgICJpbmRpY2F0ZWQgc2VwYXJhdGUgVFBLVCBkYXRhIG9mICVodSAiCisJCQkJICAgICAgICJieXRlc1xuIiwgaW5mby0+dHBrdF9sZW5bZGlyXSk7CisJCQkJaWYgKGluZm8tPnRwa3RfbGVuW2Rpcl0gPD0gdGNwZGF0YWxlbikgeworCQkJCQkvKiBZZXMsIHRoZXJlIHdhcyBhIFRQS1QgaGVhZGVyCisJCQkJCSAqIHJlY2VpdmVkICovCisJCQkJCSpkYXRhID0gdHBrdDsKKwkJCQkJKmRhdGFsZW4gPSBpbmZvLT50cGt0X2xlbltkaXJdOworCQkJCQkqZGF0YW9mZiA9IDA7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKworCQkJCS8qIEZyYWdtZW50ZWQgVFBLVCAqLworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50aygibmZfY3RfaDMyMzogIgorCQkJCQkgICAgICAgImZyYWdtZW50ZWQgVFBLVFxuIik7CisJCQkJZ290byBjbGVhcl9vdXQ7CisJCQl9CisKKwkJCS8qIEl0IGlzIG5vdCBldmVuIGEgVFBLVCAqLworCQkJcmV0dXJuIDA7CisJCX0KKwkJdHBrdG9mZiA9IDA7CisJfSBlbHNlIHsJCS8qIE5leHQgVFBLVCAqLworCQl0cGt0b2ZmID0gKmRhdGFvZmYgKyAqZGF0YWxlbjsKKwkJdGNwZGF0YWxlbiAtPSB0cGt0b2ZmOworCQlpZiAodGNwZGF0YWxlbiA8PSA0KQkvKiBObyBtb3JlIFRQS1QgKi8KKwkJCWdvdG8gY2xlYXJfb3V0OworCQl0cGt0ID0gKmRhdGEgKyAqZGF0YWxlbjsKKworCQkvKiBWYWxpZGF0ZSBUUEtUIGlkZW50aWZpZXIgKi8KKwkJaWYgKHRwa3RbMF0gIT0gMHgwMyB8fCB0cGt0WzFdICE9IDApCisJCQlnb3RvIGNsZWFyX291dDsKKwl9CisKKwkvKiBWYWxpZGF0ZSBUUEtUIGxlbmd0aCAqLworCXRwa3RsZW4gPSB0cGt0WzJdICogMjU2ICsgdHBrdFszXTsKKwlpZiAodHBrdGxlbiA8IDQpCisJCWdvdG8gY2xlYXJfb3V0OworCWlmICh0cGt0bGVuID4gdGNwZGF0YWxlbikgeworCQlpZiAodGNwZGF0YWxlbiA9PSA0KSB7CS8qIFNlcGFyYXRlIFRQS1QgaGVhZGVyICovCisJCQkvKiBOZXRtZWV0aW5nIHNlbmRzIFRQS1QgaGVhZGVyIGFuZCBkYXRhIHNlcGFyYXRlbHkgKi8KKwkJCURFQlVHUCgibmZfY3RfaDMyMzogc2VwYXJhdGUgVFBLVCBoZWFkZXIgaW5kaWNhdGVzICIKKwkJCSAgICAgICAidGhlcmUgd2lsbCBiZSBUUEtUIGRhdGEgb2YgJWh1IGJ5dGVzXG4iLAorCQkJICAgICAgIHRwa3RsZW4gLSA0KTsKKwkJCWluZm8tPnRwa3RfbGVuW2Rpcl0gPSB0cGt0bGVuIC0gNDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50aygibmZfY3RfaDMyMzogaW5jb21wbGV0ZSBUUEtUIChmcmFnbWVudGVkPylcbiIpOworCQlnb3RvIGNsZWFyX291dDsKKwl9CisKKwkvKiBUaGlzIGlzIHRoZSBlbmNhcHN1bGF0ZWQgZGF0YSAqLworCSpkYXRhID0gdHBrdCArIDQ7CisJKmRhdGFsZW4gPSB0cGt0bGVuIC0gNDsKKwkqZGF0YW9mZiA9IHRwa3RvZmYgKyA0OworCisgICAgICBvdXQ6CisJLyogQ2xlYXIgVFBLVCBsZW5ndGggKi8KKwlpbmZvLT50cGt0X2xlbltkaXJdID0gMDsKKwlyZXR1cm4gMTsKKworICAgICAgY2xlYXJfb3V0OgorCWluZm8tPnRwa3RfbGVuW2Rpcl0gPSAwOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZ2V0X2gyNDVfYWRkcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICp0YWRkciwKKwkJCSB1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyAqYWRkciwgX19iZTE2ICpwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IGZhbWlseSA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW07CisJaW50IGxlbjsKKworCWlmICh0YWRkci0+Y2hvaWNlICE9IGVIMjQ1X1RyYW5zcG9ydEFkZHJlc3NfdW5pY2FzdEFkZHJlc3MpCisJCXJldHVybiAwOworCisJc3dpdGNoICh0YWRkci0+dW5pY2FzdEFkZHJlc3MuY2hvaWNlKSB7CisJY2FzZSBlVW5pY2FzdEFkZHJlc3NfaVBBZGRyZXNzOgorCQlpZiAoZmFtaWx5ICE9IEFGX0lORVQpCisJCQlyZXR1cm4gMDsKKwkJcCA9IGRhdGEgKyB0YWRkci0+dW5pY2FzdEFkZHJlc3MuaVBBZGRyZXNzLm5ldHdvcms7CisJCWxlbiA9IDQ7CisJCWJyZWFrOworCWNhc2UgZVVuaWNhc3RBZGRyZXNzX2lQNkFkZHJlc3M6CisJCWlmIChmYW1pbHkgIT0gQUZfSU5FVDYpCisJCQlyZXR1cm4gMDsKKwkJcCA9IGRhdGEgKyB0YWRkci0+dW5pY2FzdEFkZHJlc3MuaVA2QWRkcmVzcy5uZXR3b3JrOworCQlsZW4gPSAxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJbWVtY3B5KGFkZHIsIHAsIGxlbik7CisJbWVtc2V0KCh2b2lkICopYWRkciArIGxlbiwgMCwgc2l6ZW9mKCphZGRyKSAtIGxlbik7CisJbWVtY3B5KHBvcnQsIHAgKyBsZW4sIHNpemVvZihfX2JlMTYpKTsKKworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZXhwZWN0X3J0cF9ydGNwKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJX19iZTE2IHBvcnQ7CisJX19iZTE2IHJ0cF9wb3J0LCBydGNwX3BvcnQ7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRwX2V4cDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqcnRjcF9leHA7CisJdHlwZW9mKG5hdF9ydHBfcnRjcF9ob29rKSBuYXRfcnRwX3J0Y3A7CisKKwkvKiBSZWFkIFJUUCBvciBSVENQIGFkZHJlc3MgKi8KKwlpZiAoIWdldF9oMjQ1X2FkZHIoY3QsICpkYXRhLCB0YWRkciwgJmFkZHIsICZwb3J0KSB8fAorCSAgICBtZW1jbXAoJmFkZHIsICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLCBzaXplb2YoYWRkcikpIHx8CisJICAgIHBvcnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwkvKiBSVFAgcG9ydCBpcyBldmVuICovCisJcG9ydCAmPSBodG9ucyh+MSk7CisJcnRwX3BvcnQgPSBwb3J0OworCXJ0Y3BfcG9ydCA9IGh0b25zKG50b2hzKHBvcnQpICsgMSk7CisKKwkvKiBDcmVhdGUgZXhwZWN0IGZvciBSVFAgKi8KKwlpZiAoKHJ0cF9leHAgPSBuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCW5mX2Nvbm50cmFja19leHBlY3RfaW5pdChydHBfZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLAorCQkJCSAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkJIElQUFJPVE9fVURQLCBOVUxMLCAmcnRwX3BvcnQpOworCisJLyogQ3JlYXRlIGV4cGVjdCBmb3IgUlRDUCAqLworCWlmICgocnRjcF9leHAgPSBuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkgeworCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChydHBfZXhwKTsKKwkJcmV0dXJuIC0xOworCX0KKwluZl9jb25udHJhY2tfZXhwZWN0X2luaXQocnRjcF9leHAsIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmwzbnVtLAorCQkJCSAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCisJCQkJICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MywKKwkJCQkgSVBQUk9UT19VRFAsIE5VTEwsICZydGNwX3BvcnQpOworCisJaWYgKG1lbWNtcCgmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MywKKwkgICAJICAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkgICBzaXplb2YoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MykpICYmCisJCSAgIChuYXRfcnRwX3J0Y3AgPSByY3VfZGVyZWZlcmVuY2UobmF0X3J0cF9ydGNwX2hvb2spKSAmJgorCQkgICBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCS8qIE5BVCBuZWVkZWQgKi8KKwkJcmV0ID0gbmF0X3J0cF9ydGNwKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAgdGFkZHIsIHBvcnQsIHJ0cF9wb3J0LCBydHBfZXhwLCBydGNwX2V4cCk7CisJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCisJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCkgPT0gMCkgeworCQkJaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChydGNwX2V4cCkgPT0gMCkgeworCQkJCURFQlVHUCgibmZfY3RfaDMyMzogZXhwZWN0IFJUUCAiKTsKKwkJCQlORl9DVF9EVU1QX1RVUExFKCZydHBfZXhwLT50dXBsZSk7CisJCQkJREVCVUdQKCJuZl9jdF9oMzIzOiBleHBlY3QgUlRDUCAiKTsKKwkJCQlORl9DVF9EVU1QX1RVUExFKCZydGNwX2V4cC0+dHVwbGUpOworCQkJfSBlbHNlIHsKKwkJCQluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChydHBfZXhwKTsKKwkJCQlyZXQgPSAtMTsKKwkJCX0KKwkJfSBlbHNlCisJCQlyZXQgPSAtMTsKKwl9CisKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChydHBfZXhwKTsKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChydGNwX2V4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZXhwZWN0X3QxMjAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCSAgICAgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKnRhZGRyKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJX19iZTE2IHBvcnQ7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXR5cGVvZihuYXRfdDEyMF9ob29rKSBuYXRfdDEyMDsKKworCS8qIFJlYWQgVC4xMjAgYWRkcmVzcyAqLworCWlmICghZ2V0X2gyNDVfYWRkcihjdCwgKmRhdGEsIHRhZGRyLCAmYWRkciwgJnBvcnQpIHx8CisJICAgIG1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsIHNpemVvZihhZGRyKSkgfHwKKwkgICAgcG9ydCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIENyZWF0ZSBleHBlY3QgZm9yIFQuMTIwIGNvbm5lY3Rpb25zICovCisJaWYgKChleHAgPSBuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCW5mX2Nvbm50cmFja19leHBlY3RfaW5pdChleHAsIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLmwzbnVtLAorCQkJCSAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCisJCQkJICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MywKKwkJCQkgSVBQUk9UT19UQ1AsIE5VTEwsICZwb3J0KTsKKwlleHAtPmZsYWdzID0gTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVDsJLyogQWNjZXB0IG11bHRpcGxlIGNoYW5uZWxzICovCisKKwlpZiAobWVtY21wKCZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLAorCQkgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCSAgIHNpemVvZihjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzKSkgJiYKKwkgICAgKG5hdF90MTIwID0gcmN1X2RlcmVmZXJlbmNlKG5hdF90MTIwX2hvb2spKSAmJgorCSAgICBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCS8qIE5BVCBuZWVkZWQgKi8KKwkJcmV0ID0gbmF0X3QxMjAocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwgdGFkZHIsCisJCQkgICAgICAgcG9ydCwgZXhwKTsKKwl9IGVsc2UgewkJLyogQ29ubnRyYWNrIG9ubHkgKi8KKwkJaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJCURFQlVHUCgibmZfY3RfaDMyMzogZXhwZWN0IFQuMTIwICIpOworCQkJTkZfQ1RfRFVNUF9UVVBMRSgmZXhwLT50dXBsZSk7CisJCX0gZWxzZQorCQkJcmV0ID0gLTE7CisJfQorCisJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2gyNDVfY2hhbm5lbChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCXVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCQlIMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyAqY2hhbm5lbCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGNoYW5uZWwtPm9wdGlvbnMgJiBlSDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnNfbWVkaWFDaGFubmVsKSB7CisJCS8qIFJUUCAqLworCQlyZXQgPSBleHBlY3RfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAmY2hhbm5lbC0+bWVkaWFDaGFubmVsKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNoYW5uZWwtPgorCSAgICBvcHRpb25zICYgZUgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX21lZGlhQ29udHJvbENoYW5uZWwpIHsKKwkJLyogUlRDUCAqLworCQlyZXQgPSBleHBlY3RfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAmY2hhbm5lbC0+bWVkaWFDb250cm9sQ2hhbm5lbCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19vbGMoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJICAgICAgIE9wZW5Mb2dpY2FsQ2hhbm5lbCAqb2xjKQoreworCWludCByZXQ7CisKKwlERUJVR1AoIm5mX2N0X2gzMjM6IE9wZW5Mb2dpY2FsQ2hhbm5lbFxuIik7CisKKwlpZiAob2xjLT5mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLm11bHRpcGxleFBhcmFtZXRlcnMuY2hvaWNlID09CisJICAgIGVPcGVuTG9naWNhbENoYW5uZWxfZm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzX2gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKQorCXsKKwkJcmV0ID0gcHJvY2Vzc19oMjQ1X2NoYW5uZWwocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgJm9sYy0+CisJCQkJCSAgIGZvcndhcmRMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMuCisJCQkJCSAgIG11bHRpcGxleFBhcmFtZXRlcnMuCisJCQkJCSAgIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChvbGMtPm9wdGlvbnMgJgorCSAgICAgZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSAmJgorCSAgICAob2xjLT5yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLm9wdGlvbnMgJgorCSAgICAgZU9wZW5Mb2dpY2FsQ2hhbm5lbF9yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnMpCisJICAgICYmIChvbGMtPnJldmVyc2VMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMubXVsdGlwbGV4UGFyYW1ldGVycy4KKwkJY2hvaWNlID09CisJCWVPcGVuTG9naWNhbENoYW5uZWxfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzX2gyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSkKKwl7CisJCXJldCA9CisJCSAgICBwcm9jZXNzX2gyNDVfY2hhbm5lbChwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgJm9sYy0+CisJCQkJCSByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLgorCQkJCQkgbXVsdGlwbGV4UGFyYW1ldGVycy4KKwkJCQkJIGgyMjUwTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChvbGMtPm9wdGlvbnMgJiBlT3BlbkxvZ2ljYWxDaGFubmVsX3NlcGFyYXRlU3RhY2spICYmCisJICAgIG9sYy0+Zm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5kYXRhVHlwZS5jaG9pY2UgPT0KKwkgICAgZURhdGFUeXBlX2RhdGEgJiYKKwkgICAgb2xjLT5mb3J3YXJkTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLmRhdGFUeXBlLmRhdGEuYXBwbGljYXRpb24uCisJICAgIGNob2ljZSA9PSBlRGF0YUFwcGxpY2F0aW9uQ2FwYWJpbGl0eV9hcHBsaWNhdGlvbl90MTIwICYmCisJICAgIG9sYy0+Zm9yd2FyZExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5kYXRhVHlwZS5kYXRhLmFwcGxpY2F0aW9uLgorCSAgICB0MTIwLmNob2ljZSA9PSBlRGF0YVByb3RvY29sQ2FwYWJpbGl0eV9zZXBhcmF0ZUxBTlN0YWNrICYmCisJICAgIG9sYy0+c2VwYXJhdGVTdGFjay5uZXR3b3JrQWRkcmVzcy5jaG9pY2UgPT0KKwkgICAgZU5ldHdvcmtBY2Nlc3NQYXJhbWV0ZXJzX25ldHdvcmtBZGRyZXNzX2xvY2FsQXJlYUFkZHJlc3MpIHsKKwkJcmV0ID0gZXhwZWN0X3QxMjAocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICZvbGMtPnNlcGFyYXRlU3RhY2submV0d29ya0FkZHJlc3MuCisJCQkJICBsb2NhbEFyZWFBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX29sY2Eoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCXVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCU9wZW5Mb2dpY2FsQ2hhbm5lbEFjayAqb2xjYSkKK3sKKwlIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVycyAqYWNrOworCWludCByZXQ7CisKKwlERUJVR1AoIm5mX2N0X2gzMjM6IE9wZW5Mb2dpY2FsQ2hhbm5lbEFja1xuIik7CisKKwlpZiAoKG9sY2EtPm9wdGlvbnMgJgorCSAgICAgZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzKSAmJgorCSAgICAob2xjYS0+cmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5vcHRpb25zICYKKwkgICAgIGVPcGVuTG9naWNhbENoYW5uZWxBY2tfcmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVyc19tdWx0aXBsZXhQYXJhbWV0ZXJzKQorCSAgICAmJiAob2xjYS0+cmV2ZXJzZUxvZ2ljYWxDaGFubmVsUGFyYW1ldGVycy5tdWx0aXBsZXhQYXJhbWV0ZXJzLgorCQljaG9pY2UgPT0KKwkJZU9wZW5Mb2dpY2FsQ2hhbm5lbEFja19yZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzX211bHRpcGxleFBhcmFtZXRlcnNfaDIyNTBMb2dpY2FsQ2hhbm5lbFBhcmFtZXRlcnMpKQorCXsKKwkJcmV0ID0gcHJvY2Vzc19oMjQ1X2NoYW5uZWwocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgJm9sY2EtPgorCQkJCQkgICByZXZlcnNlTG9naWNhbENoYW5uZWxQYXJhbWV0ZXJzLgorCQkJCQkgICBtdWx0aXBsZXhQYXJhbWV0ZXJzLgorCQkJCQkgICBoMjI1MExvZ2ljYWxDaGFubmVsUGFyYW1ldGVycyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmICgob2xjYS0+b3B0aW9ucyAmCisJICAgICBlT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzKSAmJgorCSAgICAob2xjYS0+Zm9yd2FyZE11bHRpcGxleEFja1BhcmFtZXRlcnMuY2hvaWNlID09CisJICAgICBlT3BlbkxvZ2ljYWxDaGFubmVsQWNrX2ZvcndhcmRNdWx0aXBsZXhBY2tQYXJhbWV0ZXJzX2gyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzKSkKKwl7CisJCWFjayA9ICZvbGNhLT5mb3J3YXJkTXVsdGlwbGV4QWNrUGFyYW1ldGVycy4KKwkJICAgIGgyMjUwTG9naWNhbENoYW5uZWxBY2tQYXJhbWV0ZXJzOworCQlpZiAoYWNrLT5vcHRpb25zICYKKwkJICAgIGVIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc19tZWRpYUNoYW5uZWwpIHsKKwkJCS8qIFJUUCAqLworCQkJcmV0ID0gZXhwZWN0X3J0cF9ydGNwKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICAgICZhY2stPm1lZGlhQ2hhbm5lbCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAoYWNrLT5vcHRpb25zICYKKwkJICAgIGVIMjI1MExvZ2ljYWxDaGFubmVsQWNrUGFyYW1ldGVyc19tZWRpYUNvbnRyb2xDaGFubmVsKSB7CisJCQkvKiBSVENQICovCisJCQlyZXQgPSBleHBlY3RfcnRwX3J0Y3AocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAgICAgJmFjay0+bWVkaWFDb250cm9sQ2hhbm5lbCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfaDI0NShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkJTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlICptc2NtKQoreworCXN3aXRjaCAobXNjbS0+Y2hvaWNlKSB7CisJY2FzZSBlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlX3JlcXVlc3Q6CisJCWlmIChtc2NtLT5yZXF1ZXN0LmNob2ljZSA9PQorCQkgICAgZVJlcXVlc3RNZXNzYWdlX29wZW5Mb2dpY2FsQ2hhbm5lbCkgeworCQkJcmV0dXJuIHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICZtc2NtLT5yZXF1ZXN0Lm9wZW5Mb2dpY2FsQ2hhbm5lbCk7CisJCX0KKwkJREVCVUdQKCJuZl9jdF9oMzIzOiBILjI0NSBSZXF1ZXN0ICVkXG4iLAorCQkgICAgICAgbXNjbS0+cmVxdWVzdC5jaG9pY2UpOworCQlicmVhazsKKwljYXNlIGVNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2VfcmVzcG9uc2U6CisJCWlmIChtc2NtLT5yZXNwb25zZS5jaG9pY2UgPT0KKwkJICAgIGVSZXNwb25zZU1lc3NhZ2Vfb3BlbkxvZ2ljYWxDaGFubmVsQWNrKSB7CisJCQlyZXR1cm4gcHJvY2Vzc19vbGNhKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICAmbXNjbS0+cmVzcG9uc2UuCisJCQkJCSAgICBvcGVuTG9naWNhbENoYW5uZWxBY2spOworCQl9CisJCURFQlVHUCgibmZfY3RfaDMyMzogSC4yNDUgUmVzcG9uc2UgJWRcbiIsCisJCSAgICAgICBtc2NtLT5yZXNwb25zZS5jaG9pY2UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR1AoIm5mX2N0X2gzMjM6IEguMjQ1IHNpZ25hbCAlZFxuIiwgbXNjbS0+Y2hvaWNlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBoMjQ1X2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0YXRpYyBNdWx0aW1lZGlhU3lzdGVtQ29udHJvbE1lc3NhZ2UgbXNjbTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gTlVMTDsKKwlpbnQgZGF0YWxlbjsKKwlpbnQgZGF0YW9mZjsKKwlpbnQgcmV0OworCisJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgorCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSkgeworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKwlERUJVR1AoIm5mX2N0X2gyNDU6IHNrYmxlbiA9ICV1XG4iLCAoKnBza2IpLT5sZW4pOworCisJc3Bpbl9sb2NrX2JoKCZuZl9oMzIzX2xvY2spOworCisJLyogUHJvY2VzcyBlYWNoIFRQS1QgKi8KKwl3aGlsZSAoZ2V0X3Rwa3RfZGF0YShwc2tiLCBwcm90b2ZmLCBjdCwgY3RpbmZvLAorCQkJICAgICAmZGF0YSwgJmRhdGFsZW4sICZkYXRhb2ZmKSkgeworCQlERUJVR1AoIm5mX2N0X2gyNDU6IFRQS1QgbGVuPSVkICIsIGRhdGFsZW4pOworCQlORl9DVF9EVU1QX1RVUExFKCZjdC0+dHVwbGVoYXNoW0NUSU5GTzJESVIoY3RpbmZvKV0udHVwbGUpOworCisJCS8qIERlY29kZSBILjI0NSBzaWduYWwgKi8KKwkJcmV0ID0gRGVjb2RlTXVsdGltZWRpYVN5c3RlbUNvbnRyb2xNZXNzYWdlKGRhdGEsIGRhdGFsZW4sCisJCQkJCQkJICAgJm1zY20pOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoIm5mX2N0X2gyNDU6IGRlY29kaW5nIGVycm9yOiAlc1xuIiwKKwkJCQkgICAgICAgcmV0ID09IEgzMjNfRVJST1JfQk9VTkQgPworCQkJCSAgICAgICAib3V0IG9mIGJvdW5kIiA6ICJvdXQgb2YgcmFuZ2UiKTsKKwkJCS8qIFdlIGRvbid0IGRyb3Agd2hlbiBkZWNvZGluZyBlcnJvciAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKiBQcm9jZXNzIEguMjQ1IHNpZ25hbCAqLworCQlpZiAocHJvY2Vzc19oMjQ1KHBza2IsIGN0LCBjdGluZm8sICZkYXRhLCBkYXRhb2ZmLCAmbXNjbSkgPCAwKQorCQkJZ290byBkcm9wOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZuZl9oMzIzX2xvY2spOworCXJldHVybiBORl9BQ0NFUFQ7CisKKyAgICAgIGRyb3A6CisJc3Bpbl91bmxvY2tfYmgoJm5mX2gzMjNfbG9jayk7CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJuZl9jdF9oMjQ1OiBwYWNrZXQgZHJvcHBlZFxuIik7CisJcmV0dXJuIE5GX0RST1A7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfaDI0NSBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQkJPSAiSC4yNDUiLAorCS5tZQkJCT0gVEhJU19NT0RVTEUsCisJLm1heF9leHBlY3RlZAkJPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyAyIC8qIFQuMTIwICovLAorCS50aW1lb3V0CQk9IDI0MCwKKwkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19VRFAsCisJLm1hc2suc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRiksCisJLm1hc2suZHN0LnByb3RvbnVtCT0gMHhGRiwKKwkuaGVscAkJCT0gaDI0NV9oZWxwCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBnZXRfaDIyNV9hZGRyKHN0cnVjdCBuZl9jb25uICpjdCwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwKKwkJICB1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyAqYWRkciwgX19iZTE2ICpwb3J0KQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IGZhbWlseSA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW07CisJaW50IGxlbjsKKworCXN3aXRjaCAodGFkZHItPmNob2ljZSkgeworCWNhc2UgZVRyYW5zcG9ydEFkZHJlc3NfaXBBZGRyZXNzOgorCQlpZiAoZmFtaWx5ICE9IEFGX0lORVQpCisJCQlyZXR1cm4gMDsKKwkJcCA9IGRhdGEgKyB0YWRkci0+aXBBZGRyZXNzLmlwOworCQlsZW4gPSA0OworCQlicmVhazsKKwljYXNlIGVUcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3M6CisJCWlmIChmYW1pbHkgIT0gQUZfSU5FVDYpCisJCQlyZXR1cm4gMDsKKwkJcCA9IGRhdGEgKyB0YWRkci0+aXA2QWRkcmVzcy5pcDY7CisJCWxlbiA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwltZW1jcHkoYWRkciwgcCwgbGVuKTsKKwltZW1zZXQoKHZvaWQgKilhZGRyICsgbGVuLCAwLCBzaXplb2YoKmFkZHIpIC0gbGVuKTsKKwltZW1jcHkocG9ydCwgcCArIGxlbiwgc2l6ZW9mKF9fYmUxNikpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBleHBlY3RfaDI0NShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAorCQkgICAgICAgVHJhbnNwb3J0QWRkcmVzcyAqdGFkZHIpCit7CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0ID0gMDsKKwlfX2JlMTYgcG9ydDsKKwl1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyBhZGRyOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJdHlwZW9mKG5hdF9oMjQ1X2hvb2spIG5hdF9oMjQ1OworCisJLyogUmVhZCBoMjQ1QWRkcmVzcyAqLworCWlmICghZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsIHRhZGRyLCAmYWRkciwgJnBvcnQpIHx8CisJICAgIG1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsIHNpemVvZihhZGRyKSkgfHwKKwkgICAgcG9ydCA9PSAwKQorCQlyZXR1cm4gMDsKKworCS8qIENyZWF0ZSBleHBlY3QgZm9yIGgyNDUgY29ubmVjdGlvbiAqLworCWlmICgoZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwluZl9jb25udHJhY2tfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLAorCQkJCSAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkJIElQUFJPVE9fVENQLCBOVUxMLCAmcG9ydCk7CisJZXhwLT5oZWxwZXIgPSAmbmZfY29ubnRyYWNrX2hlbHBlcl9oMjQ1OworCisJaWYgKG1lbWNtcCgmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MywKKwkJICAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkgICBzaXplb2YoY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MykpICYmCisJICAgIChuYXRfaDI0NSA9IHJjdV9kZXJlZmVyZW5jZShuYXRfaDI0NV9ob29rKSkgJiYKKwkgICAgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQkvKiBOQVQgbmVlZGVkICovCisJCXJldCA9IG5hdF9oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsIHRhZGRyLAorCQkJICAgICAgIHBvcnQsIGV4cCk7CisJfSBlbHNlIHsJCS8qIENvbm50cmFjayBvbmx5ICovCisJCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKSB7CisJCQlERUJVR1AoIm5mX2N0X3E5MzE6IGV4cGVjdCBILjI0NSAiKTsKKwkJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCQl9IGVsc2UKKwkJCXJldCA9IC0xOworCX0KKworCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJZiB0aGUgY2FsbGluZyBwYXJ0eSBpcyBvbiB0aGUgc2FtZSBzaWRlIG9mIHRoZSBmb3J3YXJkLXRvIHBhcnR5LAorICogd2UgZG9uJ3QgbmVlZCB0byB0cmFjayB0aGUgc2Vjb25kIGNhbGwgKi8KK3N0YXRpYyBpbnQgY2FsbGZvcndhcmRfZG9fZmlsdGVyKHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICpzcmMsCisJCQkJIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICpkc3QsCisJCQkJIGludCBmYW1pbHkpCit7CisJc3RydWN0IGZsb3dpIGZsMSwgZmwyOworCWludCByZXQgPSAwOworCisJbWVtc2V0KCZmbDEsIDAsIHNpemVvZihmbDEpKTsKKwltZW1zZXQoJmZsMiwgMCwgc2l6ZW9mKGZsMikpOworCisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6IHsKKwkJc3RydWN0IHJ0YWJsZSAqcnQxLCAqcnQyOworCisJCWZsMS5mbDRfZHN0ID0gc3JjLT5pcDsKKwkJZmwyLmZsNF9kc3QgPSBkc3QtPmlwOworCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmcnQxLCAmZmwxKSA9PSAwKSB7CisJCQlpZiAoaXBfcm91dGVfb3V0cHV0X2tleSgmcnQyLCAmZmwyKSA9PSAwKSB7CisJCQkJaWYgKHJ0MS0+cnRfZ2F0ZXdheSA9PSBydDItPnJ0X2dhdGV3YXkgJiYKKwkJCQkgICAgcnQxLT51LmRzdC5kZXYgID09IHJ0Mi0+dS5kc3QuZGV2KQorCQkJCQlyZXQgPSAxOworCQkJCWRzdF9yZWxlYXNlKCZydDItPnUuZHN0KTsKKwkJCX0KKwkJCWRzdF9yZWxlYXNlKCZydDEtPnUuZHN0KTsKKwkJfQorCQlicmVhazsKKwl9CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjogeworCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0MSwgKnJ0MjsKKworCQltZW1jcHkoJmZsMS5mbDZfZHN0LCBzcmMsIHNpemVvZihmbDEuZmw2X2RzdCkpOworCQltZW1jcHkoJmZsMi5mbDZfZHN0LCBkc3QsIHNpemVvZihmbDIuZmw2X2RzdCkpOworCQlydDEgPSAoc3RydWN0IHJ0Nl9pbmZvICopaXA2X3JvdXRlX291dHB1dChOVUxMLCAmZmwxKTsKKwkJaWYgKHJ0MSkgeworCQkJcnQyID0gKHN0cnVjdCBydDZfaW5mbyAqKWlwNl9yb3V0ZV9vdXRwdXQoTlVMTCwgJmZsMik7CisJCQlpZiAocnQyKSB7CisJCQkJaWYgKCFtZW1jbXAoJnJ0MS0+cnQ2aV9nYXRld2F5LCAmcnQyLT5ydDZpX2dhdGV3YXksCisJCQkJIAkgICAgc2l6ZW9mKHJ0MS0+cnQ2aV9nYXRld2F5KSkgJiYKKwkJCQkgICAgcnQxLT51LmRzdC5kZXYgPT0gcnQyLT51LmRzdC5kZXYpCisJCQkJCXJldCA9IDE7CisJCQkJZHN0X3JlbGVhc2UoJnJ0Mi0+dS5kc3QpOworCQkJfQorCQkJZHN0X3JlbGVhc2UoJnJ0MS0+dS5kc3QpOworCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgorCX0KKwlyZXR1cm4gcmV0OworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBleHBlY3RfY2FsbGZvcndhcmRpbmcoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJIFRyYW5zcG9ydEFkZHJlc3MgKnRhZGRyKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJX19iZTE2IHBvcnQ7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXR5cGVvZihuYXRfY2FsbGZvcndhcmRpbmdfaG9vaykgbmF0X2NhbGxmb3J3YXJkaW5nOworCisJLyogUmVhZCBhbHRlcm5hdGl2ZUFkZHJlc3MgKi8KKwlpZiAoIWdldF9oMjI1X2FkZHIoY3QsICpkYXRhLCB0YWRkciwgJmFkZHIsICZwb3J0KSB8fCBwb3J0ID09IDApCisJCXJldHVybiAwOworCisJLyogSWYgdGhlIGNhbGxpbmcgcGFydHkgaXMgb24gdGhlIHNhbWUgc2lkZSBvZiB0aGUgZm9yd2FyZC10byBwYXJ0eSwKKwkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIHRoZSBzZWNvbmQgY2FsbCAqLworCWlmIChjYWxsZm9yd2FyZF9maWx0ZXIgJiYKKwkgICAgY2FsbGZvcndhcmRfZG9fZmlsdGVyKCZhZGRyLCAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCisJICAgIAkJCSAgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0pKSB7CisJCURFQlVHUCgibmZfY3RfcTkzMTogQ2FsbCBGb3J3YXJkaW5nIG5vdCB0cmFja2VkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQ3JlYXRlIGV4cGVjdCBmb3IgdGhlIHNlY29uZCBjYWxsIGxlZyAqLworCWlmICgoZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwluZl9jb25udHJhY2tfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCAmYWRkciwKKwkJCQkgSVBQUk9UT19UQ1AsIE5VTEwsICZwb3J0KTsKKwlleHAtPmhlbHBlciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMTsKKworCWlmIChtZW1jbXAoJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsCisJCSAgICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MywKKwkJICAgc2l6ZW9mKGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMpKSAmJgorCSAgICAobmF0X2NhbGxmb3J3YXJkaW5nID0gcmN1X2RlcmVmZXJlbmNlKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rKSkgJiYKKwkgICAgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQkvKiBOZWVkIE5BVCAqLworCQlyZXQgPSBuYXRfY2FsbGZvcndhcmRpbmcocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJIHRhZGRyLCBwb3J0LCBleHApOworCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgeworCQkJREVCVUdQKCJuZl9jdF9xOTMxOiBleHBlY3QgQ2FsbCBGb3J3YXJkaW5nICIpOworCQkJTkZfQ1RfRFVNUF9UVVBMRSgmZXhwLT50dXBsZSk7CisJCX0gZWxzZQorCQkJcmV0ID0gLTE7CisJfQorCisJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX3NldHVwKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSBTZXR1cF9VVUlFICpzZXR1cCkKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQ7CisJaW50IGk7CisJX19iZTE2IHBvcnQ7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKwl0eXBlb2Yoc2V0X2gyMjVfYWRkcl9ob29rKSBzZXRfaDIyNV9hZGRyOworCisJREVCVUdQKCJuZl9jdF9xOTMxOiBTZXR1cFxuIik7CisKKwlpZiAoc2V0dXAtPm9wdGlvbnMgJiBlU2V0dXBfVVVJRV9oMjQ1QWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJnNldHVwLT5oMjQ1QWRkcmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCXNldF9oMjI1X2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X2gyMjVfYWRkcl9ob29rKTsKKwlpZiAoKHNldHVwLT5vcHRpb25zICYgZVNldHVwX1VVSUVfZGVzdENhbGxTaWduYWxBZGRyZXNzKSAmJgorCSAgICAoc2V0X2gyMjVfYWRkcikgJiYgY3QtPnN0YXR1cyAmJiBJUFNfTkFUX01BU0sgJiYKKwkgICAgZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZzZXR1cC0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAorCSAgICAJCSAgJmFkZHIsICZwb3J0KSAmJgorCSAgICBtZW1jbXAoJmFkZHIsICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51Mywgc2l6ZW9mKGFkZHIpKSkgeworCQlERUJVR1AoIm5mX2N0X3E5MzE6IHNldCBkZXN0Q2FsbFNpZ25hbEFkZHJlc3MgIgorCQkgICAgICAgTklQNl9GTVQgIjolaHUtPiIgTklQNl9GTVQgIjolaHVcbiIsCisJCSAgICAgICBOSVA2KCooc3RydWN0IGluNl9hZGRyICopJmFkZHIpLCBudG9ocyhwb3J0KSwKKwkJICAgICAgIE5JUDYoKihzdHJ1Y3QgaW42X2FkZHIgKikmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMpLAorCQkgICAgICAgbnRvaHMoY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudS50Y3AucG9ydCkpOworCQlyZXQgPSBzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIGRhdGFvZmYsCisJCQkJICAgICZzZXR1cC0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAorCQkJCSAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMsCisJCQkJICAgIGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUudGNwLnBvcnQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKHNldHVwLT5vcHRpb25zICYgZVNldHVwX1VVSUVfc291cmNlQ2FsbFNpZ25hbEFkZHJlc3MpICYmCisJICAgIChzZXRfaDIyNV9hZGRyKSAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLICYmCisJICAgIGdldF9oMjI1X2FkZHIoY3QsICpkYXRhLCAmc2V0dXAtPnNvdXJjZUNhbGxTaWduYWxBZGRyZXNzLAorCSAgICAJCSAgJmFkZHIsICZwb3J0KSAmJgorCSAgICBtZW1jbXAoJmFkZHIsICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51Mywgc2l6ZW9mKGFkZHIpKSkgeworCQlERUJVR1AoIm5mX2N0X3E5MzE6IHNldCBzb3VyY2VDYWxsU2lnbmFsQWRkcmVzcyAiCisJCSAgICAgICBOSVA2X0ZNVCAiOiVodS0+IiBOSVA2X0ZNVCAiOiVodVxuIiwKKwkJICAgICAgIE5JUDYoKihzdHJ1Y3QgaW42X2FkZHIgKikmYWRkciksIG50b2hzKHBvcnQpLAorCQkgICAgICAgTklQNigqKHN0cnVjdCBpbjZfYWRkciAqKSZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51MyksCisJCSAgICAgICBudG9ocyhjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51LnRjcC5wb3J0KSk7CisJCXJldCA9IHNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgJnNldHVwLT5zb3VyY2VDYWxsU2lnbmFsQWRkcmVzcywKKwkJCQkgICAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkJCSAgICBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51LnRjcC5wb3J0KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHNldHVwLT5vcHRpb25zICYgZVNldHVwX1VVSUVfZmFzdFN0YXJ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBzZXR1cC0+ZmFzdFN0YXJ0LmNvdW50OyBpKyspIHsKKwkJCXJldCA9IHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgJnNldHVwLT5mYXN0U3RhcnQuaXRlbVtpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfY2FsbHByb2NlZWRpbmcoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkJCSAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkJICBDYWxsUHJvY2VlZGluZ19VVUlFICpjYWxscHJvYykKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJREVCVUdQKCJuZl9jdF9xOTMxOiBDYWxsUHJvY2VlZGluZ1xuIik7CisKKwlpZiAoY2FsbHByb2MtPm9wdGlvbnMgJiBlQ2FsbFByb2NlZWRpbmdfVVVJRV9oMjQ1QWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJmNhbGxwcm9jLT5oMjQ1QWRkcmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChjYWxscHJvYy0+b3B0aW9ucyAmIGVDYWxsUHJvY2VlZGluZ19VVUlFX2Zhc3RTdGFydCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY2FsbHByb2MtPmZhc3RTdGFydC5jb3VudDsgaSsrKSB7CisJCQlyZXQgPSBwcm9jZXNzX29sYyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICZjYWxscHJvYy0+ZmFzdFN0YXJ0Lml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgIENvbm5lY3RfVVVJRSAqY29ubmVjdCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJREVCVUdQKCJuZl9jdF9xOTMxOiBDb25uZWN0XG4iKTsKKworCWlmIChjb25uZWN0LT5vcHRpb25zICYgZUNvbm5lY3RfVVVJRV9oMjQ1QWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJmNvbm5lY3QtPmgyNDVBZGRyZXNzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNvbm5lY3QtPm9wdGlvbnMgJiBlQ29ubmVjdF9VVUlFX2Zhc3RTdGFydCkgeworCQlmb3IgKGkgPSAwOyBpIDwgY29ubmVjdC0+ZmFzdFN0YXJ0LmNvdW50OyBpKyspIHsKKwkJCXJldCA9IHByb2Nlc3Nfb2xjKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgJmNvbm5lY3QtPmZhc3RTdGFydC5pdGVtW2ldKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19hbGVydGluZyhzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCisJCQkgICAgQWxlcnRpbmdfVVVJRSAqYWxlcnQpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCURFQlVHUCgibmZfY3RfcTkzMTogQWxlcnRpbmdcbiIpOworCisJaWYgKGFsZXJ0LT5vcHRpb25zICYgZUFsZXJ0aW5nX1VVSUVfaDI0NUFkZHJlc3MpIHsKKwkJcmV0ID0gZXhwZWN0X2gyNDUocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICZhbGVydC0+aDI0NUFkZHJlc3MpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYWxlcnQtPm9wdGlvbnMgJiBlQWxlcnRpbmdfVVVJRV9mYXN0U3RhcnQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFsZXJ0LT5mYXN0U3RhcnQuY291bnQ7IGkrKykgeworCQkJcmV0ID0gcHJvY2Vzc19vbGMocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAmYWxlcnQtPmZhc3RTdGFydC5pdGVtW2ldKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19pbmZvcm1hdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgICBJbmZvcm1hdGlvbl9VVUlFICppbmZvKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlERUJVR1AoIm5mX2N0X3E5MzE6IEluZm9ybWF0aW9uXG4iKTsKKworCWlmIChpbmZvLT5vcHRpb25zICYgZUluZm9ybWF0aW9uX1VVSUVfZmFzdFN0YXJ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5mYXN0U3RhcnQuY291bnQ7IGkrKykgeworCQkJcmV0ID0gcHJvY2Vzc19vbGMocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAmaW5mby0+ZmFzdFN0YXJ0Lml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2ZhY2lsaXR5KHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgICBGYWNpbGl0eV9VVUlFICpmYWNpbGl0eSkKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJREVCVUdQKCJuZl9jdF9xOTMxOiBGYWNpbGl0eVxuIik7CisKKwlpZiAoZmFjaWxpdHktPnJlYXNvbi5jaG9pY2UgPT0gZUZhY2lsaXR5UmVhc29uX2NhbGxGb3J3YXJkZWQpIHsKKwkJaWYgKGZhY2lsaXR5LT5vcHRpb25zICYgZUZhY2lsaXR5X1VVSUVfYWx0ZXJuYXRpdmVBZGRyZXNzKQorCQkJcmV0dXJuIGV4cGVjdF9jYWxsZm9yd2FyZGluZyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCQkJICAgICBkYXRhb2ZmLAorCQkJCQkJICAgICAmZmFjaWxpdHktPgorCQkJCQkJICAgICBhbHRlcm5hdGl2ZUFkZHJlc3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZmFjaWxpdHktPm9wdGlvbnMgJiBlRmFjaWxpdHlfVVVJRV9oMjQ1QWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJmZhY2lsaXR5LT5oMjQ1QWRkcmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChmYWNpbGl0eS0+b3B0aW9ucyAmIGVGYWNpbGl0eV9VVUlFX2Zhc3RTdGFydCkgeworCQlmb3IgKGkgPSAwOyBpIDwgZmFjaWxpdHktPmZhc3RTdGFydC5jb3VudDsgaSsrKSB7CisJCQlyZXQgPSBwcm9jZXNzX29sYyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICZmYWNpbGl0eS0+ZmFzdFN0YXJ0Lml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX3Byb2dyZXNzKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKKwkJCSAgICBQcm9ncmVzc19VVUlFICpwcm9ncmVzcykKK3sKKwlpbnQgcmV0OworCWludCBpOworCisJREVCVUdQKCJuZl9jdF9xOTMxOiBQcm9ncmVzc1xuIik7CisKKwlpZiAocHJvZ3Jlc3MtPm9wdGlvbnMgJiBlUHJvZ3Jlc3NfVVVJRV9oMjQ1QWRkcmVzcykgeworCQlyZXQgPSBleHBlY3RfaDI0NShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCSAgJnByb2dyZXNzLT5oMjQ1QWRkcmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChwcm9ncmVzcy0+b3B0aW9ucyAmIGVQcm9ncmVzc19VVUlFX2Zhc3RTdGFydCkgeworCQlmb3IgKGkgPSAwOyBpIDwgcHJvZ3Jlc3MtPmZhc3RTdGFydC5jb3VudDsgaSsrKSB7CisJCQlyZXQgPSBwcm9jZXNzX29sYyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICZwcm9ncmVzcy0+ZmFzdFN0YXJ0Lml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX3E5MzEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCXVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwgUTkzMSAqcTkzMSkKK3sKKwlIMzIzX1VVX1BEVSAqcGR1ID0gJnE5MzEtPlVVSUUuaDMyM191dV9wZHU7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBkdS0+aDMyM19tZXNzYWdlX2JvZHkuY2hvaWNlKSB7CisJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfc2V0dXA6CisJCXJldCA9IHByb2Nlc3Nfc2V0dXAocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuc2V0dXApOworCQlicmVhazsKKwljYXNlIGVIMzIzX1VVX1BEVV9oMzIzX21lc3NhZ2VfYm9keV9jYWxsUHJvY2VlZGluZzoKKwkJcmV0ID0gcHJvY2Vzc19jYWxscHJvY2VlZGluZyhwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLCBkYXRhb2ZmLAorCQkJCQkgICAgICZwZHUtPmgzMjNfbWVzc2FnZV9ib2R5LgorCQkJCQkgICAgIGNhbGxQcm9jZWVkaW5nKTsKKwkJYnJlYWs7CisJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfY29ubmVjdDoKKwkJcmV0ID0gcHJvY2Vzc19jb25uZWN0KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkuY29ubmVjdCk7CisJCWJyZWFrOworCWNhc2UgZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2FsZXJ0aW5nOgorCQlyZXQgPSBwcm9jZXNzX2FsZXJ0aW5nKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAgICAgICZwZHUtPmgzMjNfbWVzc2FnZV9ib2R5LmFsZXJ0aW5nKTsKKwkJYnJlYWs7CisJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfaW5mb3JtYXRpb246CisJCXJldCA9IHByb2Nlc3NfaW5mb3JtYXRpb24ocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkJICAmcGR1LT5oMzIzX21lc3NhZ2VfYm9keS4KKwkJCQkJICBpbmZvcm1hdGlvbik7CisJCWJyZWFrOworCWNhc2UgZUgzMjNfVVVfUERVX2gzMjNfbWVzc2FnZV9ib2R5X2ZhY2lsaXR5OgorCQlyZXQgPSBwcm9jZXNzX2ZhY2lsaXR5KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJICAgICAgICZwZHUtPmgzMjNfbWVzc2FnZV9ib2R5LmZhY2lsaXR5KTsKKwkJYnJlYWs7CisJY2FzZSBlSDMyM19VVV9QRFVfaDMyM19tZXNzYWdlX2JvZHlfcHJvZ3Jlc3M6CisJCXJldCA9IHByb2Nlc3NfcHJvZ3Jlc3MocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwgZGF0YW9mZiwKKwkJCQkgICAgICAgJnBkdS0+aDMyM19tZXNzYWdlX2JvZHkucHJvZ3Jlc3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVR1AoIm5mX2N0X3E5MzE6IFEuOTMxIHNpZ25hbCAlZFxuIiwKKwkJICAgICAgIHBkdS0+aDMyM19tZXNzYWdlX2JvZHkuY2hvaWNlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChwZHUtPm9wdGlvbnMgJiBlSDMyM19VVV9QRFVfaDI0NUNvbnRyb2wpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkdS0+aDI0NUNvbnRyb2wuY291bnQ7IGkrKykgeworCQkJcmV0ID0gcHJvY2Vzc19oMjQ1KHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIGRhdGFvZmYsCisJCQkJCSAgICZwZHUtPmgyNDVDb250cm9sLml0ZW1baV0pOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBxOTMxX2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0YXRpYyBROTMxIHE5MzE7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IE5VTEw7CisJaW50IGRhdGFsZW47CisJaW50IGRhdGFvZmY7CisJaW50IHJldDsKKworCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLworCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKKwkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwl9CisJREVCVUdQKCJuZl9jdF9xOTMxOiBza2JsZW4gPSAldVxuIiwgKCpwc2tiKS0+bGVuKTsKKworCXNwaW5fbG9ja19iaCgmbmZfaDMyM19sb2NrKTsKKworCS8qIFByb2Nlc3MgZWFjaCBUUEtUICovCisJd2hpbGUgKGdldF90cGt0X2RhdGEocHNrYiwgcHJvdG9mZiwgY3QsIGN0aW5mbywKKwkJCSAgICAgJmRhdGEsICZkYXRhbGVuLCAmZGF0YW9mZikpIHsKKwkJREVCVUdQKCJuZl9jdF9xOTMxOiBUUEtUIGxlbj0lZCAiLCBkYXRhbGVuKTsKKwkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFtDVElORk8yRElSKGN0aW5mbyldLnR1cGxlKTsKKworCQkvKiBEZWNvZGUgUS45MzEgc2lnbmFsICovCisJCXJldCA9IERlY29kZVE5MzEoZGF0YSwgZGF0YWxlbiwgJnE5MzEpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQlwcmludGsoIm5mX2N0X3E5MzE6IGRlY29kaW5nIGVycm9yOiAlc1xuIiwKKwkJCQkgICAgICAgcmV0ID09IEgzMjNfRVJST1JfQk9VTkQgPworCQkJCSAgICAgICAib3V0IG9mIGJvdW5kIiA6ICJvdXQgb2YgcmFuZ2UiKTsKKwkJCS8qIFdlIGRvbid0IGRyb3Agd2hlbiBkZWNvZGluZyBlcnJvciAqLworCQkJYnJlYWs7CisJCX0KKworCQkvKiBQcm9jZXNzIFEuOTMxIHNpZ25hbCAqLworCQlpZiAocHJvY2Vzc19xOTMxKHBza2IsIGN0LCBjdGluZm8sICZkYXRhLCBkYXRhb2ZmLCAmcTkzMSkgPCAwKQorCQkJZ290byBkcm9wOworCX0KKworCXNwaW5fdW5sb2NrX2JoKCZuZl9oMzIzX2xvY2spOworCXJldHVybiBORl9BQ0NFUFQ7CisKKyAgICAgIGRyb3A6CisJc3Bpbl91bmxvY2tfYmgoJm5mX2gzMjNfbG9jayk7CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKCJuZl9jdF9xOTMxOiBwYWNrZXQgZHJvcHBlZFxuIik7CisJcmV0dXJuIE5GX0RST1A7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVtdIF9fcmVhZF9tb3N0bHkgPSB7CisJeworCQkubmFtZQkJCT0gIlEuOTMxIiwKKwkJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkJCQkJICAvKiBULjEyMCBhbmQgSC4yNDUgKi8KKwkJLm1heF9leHBlY3RlZAkJPSBIMzIzX1JUUF9DSEFOTkVMX01BWCAqIDQgKyA0LAorCQkudGltZW91dAkJPSAyNDAsCisJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAorCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCisJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKKwkJLm1hc2suc3JjLmwzbnVtCQk9IDB4RkZGRiwKKwkJLm1hc2suc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRiksCisJCS5tYXNrLmRzdC5wcm90b251bQk9IDB4RkYsCisJCS5oZWxwCQkJPSBxOTMxX2hlbHAKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJRLjkzMSIsCisJCS5tZQkJCT0gVEhJU19NT0RVTEUsCisJCQkJCSAgLyogVC4xMjAgYW5kIEguMjQ1ICovCisJCS5tYXhfZXhwZWN0ZWQJCT0gSDMyM19SVFBfQ0hBTk5FTF9NQVggKiA0ICsgNCwKKwkJLnRpbWVvdXQJCT0gMjQwLAorCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVDYsCisJCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUTkzMV9QT1JUKSwKKwkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVENQLAorCQkubWFzay5zcmMubDNudW0JCT0gMHhGRkZGLAorCQkubWFzay5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKSwKKwkJLm1hc2suZHN0LnByb3RvbnVtCT0gMHhGRiwKKwkJLmhlbHAJCQk9IHE5MzFfaGVscAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpnZXRfdWRwX2RhdGEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJCQkgICBpbnQgKmRhdGFsZW4pCit7CisJc3RydWN0IHVkcGhkciBfdWgsICp1aDsKKwlpbnQgZGF0YW9mZjsKKworCXVoID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBwcm90b2ZmLCBzaXplb2YoX3VoKSwgJl91aCk7CisJaWYgKHVoID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWRhdGFvZmYgPSBwcm90b2ZmICsgc2l6ZW9mKF91aCk7CisJaWYgKGRhdGFvZmYgPj0gKCpwc2tiKS0+bGVuKQorCQlyZXR1cm4gTlVMTDsKKwkqZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIGRhdGFvZmY7CisJcmV0dXJuIHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgZGF0YW9mZiwgKmRhdGFsZW4sIGgzMjNfYnVmZmVyKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmZpbmRfZXhwZWN0KHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkJICAgICAgIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLAorCQkJCQkgICAgICAgX19iZTE2IHBvcnQpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOworCisJbWVtc2V0KCZ0dXBsZS5zcmMudTMsIDAsIHNpemVvZih0dXBsZS5zcmMudTMpKTsKKwl0dXBsZS5zcmMudS50Y3AucG9ydCA9IDA7CisJbWVtY3B5KCZ0dXBsZS5kc3QudTMsIGFkZHIsIHNpemVvZih0dXBsZS5kc3QudTMpKTsKKwl0dXBsZS5kc3QudS50Y3AucG9ydCA9IHBvcnQ7CisJdHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisKKwlleHAgPSBfX25mX2Nvbm50cmFja19leHBlY3RfZmluZCgmdHVwbGUpOworCWlmIChleHAgJiYgZXhwLT5tYXN0ZXIgPT0gY3QpCisJCXJldHVybiBleHA7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBzZXRfZXhwZWN0X3RpbWVvdXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwKKwkJCSAgICAgIHVuc2lnbmVkIHRpbWVvdXQpCit7CisJaWYgKCFleHAgfHwgIWRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkKKwkJcmV0dXJuIDA7CisKKwlleHAtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0ICogSFo7CisJYWRkX3RpbWVyKCZleHAtPnRpbWVvdXQpOworCisJcmV0dXJuIDE7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBleHBlY3RfcTkzMShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsCisJCSAgICAgICBUcmFuc3BvcnRBZGRyZXNzICp0YWRkciwgaW50IGNvdW50KQoreworCXN0cnVjdCBuZl9jdF9oMzIzX21hc3RlciAqaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X2gzMjNfaW5mbzsKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQgPSAwOworCWludCBpOworCV9fYmUxNiBwb3J0OworCXVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzIGFkZHI7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwl0eXBlb2YobmF0X3E5MzFfaG9vaykgbmF0X3E5MzE7CisKKwkvKiBMb29rIGZvciB0aGUgZmlyc3QgcmVsYXRlZCBhZGRyZXNzICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKGdldF9oMjI1X2FkZHIoY3QsICpkYXRhLCAmdGFkZHJbaV0sICZhZGRyLCAmcG9ydCkgJiYKKwkJICAgIG1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsCisJCSAgICAJICAgc2l6ZW9mKGFkZHIpKSA9PSAwICYmIHBvcnQgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID49IGNvdW50KQkJLyogTm90IGZvdW5kICovCisJCXJldHVybiAwOworCisJLyogQ3JlYXRlIGV4cGVjdCBmb3IgUS45MzEgKi8KKwlpZiAoKGV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KGV4cCwgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0sCisJCQkJIGdrcm91dGVkX29ubHkgPyAvKiBvbmx5IGFjY2VwdCBjYWxscyBmcm9tIEdLPyAqLworCQkJCSAJJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzIDoKKwkJCQkJTlVMTCwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkJCSBJUFBST1RPX1RDUCwgTlVMTCwgJnBvcnQpOworCWV4cC0+aGVscGVyID0gbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxOworCWV4cC0+ZmxhZ3MgPSBORl9DVF9FWFBFQ1RfUEVSTUFORU5UOwkvKiBBY2NlcHQgbXVsdGlwbGUgY2FsbHMgKi8KKworCW5hdF9xOTMxID0gcmN1X2RlcmVmZXJlbmNlKG5hdF9xOTMxX2hvb2spOworCWlmIChuYXRfcTkzMSAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CS8qIE5lZWQgTkFUICovCisJCXJldCA9IG5hdF9xOTMxKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsIHRhZGRyLCBpLCBwb3J0LCBleHApOworCX0gZWxzZSB7CQkvKiBDb25udHJhY2sgb25seSAqLworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgeworCQkJREVCVUdQKCJuZl9jdF9yYXM6IGV4cGVjdCBRLjkzMSAiKTsKKwkJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCisJCQkvKiBTYXZlIHBvcnQgZm9yIGxvb2tpbmcgdXAgZXhwZWN0IGluIHByb2Nlc3NpbmcgUkNGICovCisJCQlpbmZvLT5zaWdfcG9ydFtkaXJdID0gcG9ydDsKKwkJfSBlbHNlCisJCQlyZXQgPSAtMTsKKwl9CisKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfZ3JxKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgR2F0ZWtlZXBlclJlcXVlc3QgKmdycSkKK3sKKwl0eXBlb2Yoc2V0X3Jhc19hZGRyX2hvb2spIHNldF9yYXNfYWRkcjsKKworCURFQlVHUCgibmZfY3RfcmFzOiBHUlFcbiIpOworCisJc2V0X3Jhc19hZGRyID0gcmN1X2RlcmVmZXJlbmNlKHNldF9yYXNfYWRkcl9ob29rKTsKKwlpZiAoc2V0X3Jhc19hZGRyICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCS8qIE5BVGVkICovCisJCXJldHVybiBzZXRfcmFzX2FkZHIocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAgJmdycS0+cmFzQWRkcmVzcywgMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2djZihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEdhdGVrZWVwZXJDb25maXJtICpnY2YpCit7CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlpbnQgcmV0ID0gMDsKKwlfX2JlMTYgcG9ydDsKKwl1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyBhZGRyOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisKKwlERUJVR1AoIm5mX2N0X3JhczogR0NGXG4iKTsKKworCWlmICghZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZnY2YtPnJhc0FkZHJlc3MsICZhZGRyLCAmcG9ydCkpCisJCXJldHVybiAwOworCisJLyogUmVnaXN0cmF0aW9uIHBvcnQgaXMgdGhlIHNhbWUgYXMgZGlzY292ZXJ5IHBvcnQgKi8KKwlpZiAoIW1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsIHNpemVvZihhZGRyKSkgJiYKKwkgICAgcG9ydCA9PSBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUudWRwLnBvcnQpCisJCXJldHVybiAwOworCisJLyogQXZvaWQgUkFTIGV4cGVjdGF0aW9uIGxvb3BzLiBBIEdDRiBpcyBuZXZlciBleHBlY3RlZC4gKi8KKwlpZiAodGVzdF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmN0LT5zdGF0dXMpKQorCQlyZXR1cm4gMDsKKworCS8qIE5lZWQgbmV3IGV4cGVjdCAqLworCWlmICgoZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwluZl9jb25udHJhY2tfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCAmYWRkciwKKwkJCQkgSVBQUk9UT19VRFAsIE5VTEwsICZwb3J0KTsKKwlleHAtPmhlbHBlciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmFzOworCisJaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApID09IDApIHsKKwkJREVCVUdQKCJuZl9jdF9yYXM6IGV4cGVjdCBSQVMgIik7CisJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCX0gZWxzZQorCQlyZXQgPSAtMTsKKworCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19ycnEoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBSZWdpc3RyYXRpb25SZXF1ZXN0ICpycnEpCit7CisJc3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJm5mY3RfaGVscChjdCktPmhlbHAuY3RfaDMyM19pbmZvOworCWludCByZXQ7CisJdHlwZW9mKHNldF9yYXNfYWRkcl9ob29rKSBzZXRfcmFzX2FkZHI7CisKKwlERUJVR1AoIm5mX2N0X3JhczogUlJRXG4iKTsKKworCXJldCA9IGV4cGVjdF9xOTMxKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkgIHJycS0+Y2FsbFNpZ25hbEFkZHJlc3MuaXRlbSwKKwkJCSAgcnJxLT5jYWxsU2lnbmFsQWRkcmVzcy5jb3VudCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtMTsKKworCXNldF9yYXNfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfcmFzX2FkZHJfaG9vayk7CisJaWYgKHNldF9yYXNfYWRkciAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCXJldCA9IHNldF9yYXNfYWRkcihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgIHJycS0+cmFzQWRkcmVzcy5pdGVtLAorCQkJCSAgIHJycS0+cmFzQWRkcmVzcy5jb3VudCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWlmIChycnEtPm9wdGlvbnMgJiBlUmVnaXN0cmF0aW9uUmVxdWVzdF90aW1lVG9MaXZlKSB7CisJCURFQlVHUCgibmZfY3RfcmFzOiBSUlEgVFRMID0gJXUgc2Vjb25kc1xuIiwgcnJxLT50aW1lVG9MaXZlKTsKKwkJaW5mby0+dGltZW91dCA9IHJycS0+dGltZVRvTGl2ZTsKKwl9IGVsc2UKKwkJaW5mby0+dGltZW91dCA9IGRlZmF1bHRfcnJxX3R0bDsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19yY2Yoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBSZWdpc3RyYXRpb25Db25maXJtICpyY2YpCit7CisJc3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJm5mY3RfaGVscChjdCktPmhlbHAuY3RfaDMyM19pbmZvOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXR5cGVvZihzZXRfc2lnX2FkZHJfaG9vaykgc2V0X3NpZ19hZGRyOworCisJREVCVUdQKCJuZl9jdF9yYXM6IFJDRlxuIik7CisKKwlzZXRfc2lnX2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X3NpZ19hZGRyX2hvb2spOworCWlmIChzZXRfc2lnX2FkZHIgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQlyZXQgPSBzZXRfc2lnX2FkZHIocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJcmNmLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAorCQkJCQlyY2YtPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHJjZi0+b3B0aW9ucyAmIGVSZWdpc3RyYXRpb25Db25maXJtX3RpbWVUb0xpdmUpIHsKKwkJREVCVUdQKCJuZl9jdF9yYXM6IFJDRiBUVEwgPSAldSBzZWNvbmRzXG4iLCByY2YtPnRpbWVUb0xpdmUpOworCQlpbmZvLT50aW1lb3V0ID0gcmNmLT50aW1lVG9MaXZlOworCX0KKworCWlmIChpbmZvLT50aW1lb3V0ID4gMCkgeworCQlERUJVR1AKKwkJICAgICgibmZfY3RfcmFzOiBzZXQgUkFTIGNvbm5lY3Rpb24gdGltZW91dCB0byAldSBzZWNvbmRzXG4iLAorCQkgICAgIGluZm8tPnRpbWVvdXQpOworCQluZl9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgaW5mby0+dGltZW91dCAqIEhaKTsKKworCQkvKiBTZXQgZXhwZWN0IHRpbWVvdXQgKi8KKwkJcmVhZF9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJCWV4cCA9IGZpbmRfZXhwZWN0KGN0LCAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC51MywKKwkJCQkgIGluZm8tPnNpZ19wb3J0WyFkaXJdKTsKKwkJaWYgKGV4cCkgeworCQkJREVCVUdQKCJuZl9jdF9yYXM6IHNldCBRLjkzMSBleHBlY3QgIgorCQkJICAgICAgICJ0aW1lb3V0IHRvICV1IHNlY29uZHMgZm9yIiwKKwkJCSAgICAgICBpbmZvLT50aW1lb3V0KTsKKwkJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCQkJc2V0X2V4cGVjdF90aW1lb3V0KGV4cCwgaW5mby0+dGltZW91dCk7CisJCX0KKwkJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfdXJxKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgVW5yZWdpc3RyYXRpb25SZXF1ZXN0ICp1cnEpCit7CisJc3RydWN0IG5mX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJm5mY3RfaGVscChjdCktPmhlbHAuY3RfaDMyM19pbmZvOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldDsKKwl0eXBlb2Yoc2V0X3NpZ19hZGRyX2hvb2spIHNldF9zaWdfYWRkcjsKKworCURFQlVHUCgibmZfY3RfcmFzOiBVUlFcbiIpOworCisJc2V0X3NpZ19hZGRyID0gcmN1X2RlcmVmZXJlbmNlKHNldF9zaWdfYWRkcl9ob29rKTsKKwlpZiAoc2V0X3NpZ19hZGRyICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spIHsKKwkJcmV0ID0gc2V0X3NpZ19hZGRyKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgdXJxLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAorCQkJCSAgIHVycS0+Y2FsbFNpZ25hbEFkZHJlc3MuY291bnQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiBDbGVhciBvbGQgZXhwZWN0ICovCisJbmZfY3RfcmVtb3ZlX2V4cGVjdGF0aW9ucyhjdCk7CisJaW5mby0+c2lnX3BvcnRbZGlyXSA9IDA7CisJaW5mby0+c2lnX3BvcnRbIWRpcl0gPSAwOworCisJLyogR2l2ZSBpdCAzMCBzZWNvbmRzIGZvciBVQ0Ygb3IgVVJKICovCisJbmZfY3RfcmVmcmVzaChjdCwgKnBza2IsIDMwICogSFopOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2FycShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEFkbWlzc2lvblJlcXVlc3QgKmFycSkKK3sKKwlzdHJ1Y3QgbmZfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9oMzIzX2luZm87CisJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKKwlfX2JlMTYgcG9ydDsKKwl1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyBhZGRyOworCXR5cGVvZihzZXRfaDIyNV9hZGRyX2hvb2spIHNldF9oMjI1X2FkZHI7CisKKwlERUJVR1AoIm5mX2N0X3JhczogQVJRXG4iKTsKKworCXNldF9oMjI1X2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X2gyMjVfYWRkcl9ob29rKTsKKwlpZiAoKGFycS0+b3B0aW9ucyAmIGVBZG1pc3Npb25SZXF1ZXN0X2Rlc3RDYWxsU2lnbmFsQWRkcmVzcykgJiYKKwkgICAgZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZhcnEtPmRlc3RDYWxsU2lnbmFsQWRkcmVzcywKKwkgICAgCQkgICZhZGRyLCAmcG9ydCkgJiYKKwkgICAgIW1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMudTMsIHNpemVvZihhZGRyKSkgJiYKKwkgICAgcG9ydCA9PSBpbmZvLT5zaWdfcG9ydFtkaXJdICYmCisJICAgIHNldF9oMjI1X2FkZHIgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQkvKiBBbnN3ZXJpbmcgQVJRICovCisJCXJldHVybiBzZXRfaDIyNV9hZGRyKHBza2IsIGRhdGEsIDAsCisJCQkJICAgICAmYXJxLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsCisJCQkJICAgICAmY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QudTMsCisJCQkJICAgICBpbmZvLT5zaWdfcG9ydFshZGlyXSk7CisJfQorCisJaWYgKChhcnEtPm9wdGlvbnMgJiBlQWRtaXNzaW9uUmVxdWVzdF9zcmNDYWxsU2lnbmFsQWRkcmVzcykgJiYKKwkgICAgZ2V0X2gyMjVfYWRkcihjdCwgKmRhdGEsICZhcnEtPnNyY0NhbGxTaWduYWxBZGRyZXNzLAorCSAgICAJCSAgJmFkZHIsICZwb3J0KSAmJgorCSAgICAhbWVtY21wKCZhZGRyLCAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51Mywgc2l6ZW9mKGFkZHIpKSAmJgorCSAgICBzZXRfaDIyNV9hZGRyICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spIHsKKwkJLyogQ2FsbGluZyBBUlEgKi8KKwkJcmV0dXJuIHNldF9oMjI1X2FkZHIocHNrYiwgZGF0YSwgMCwKKwkJCQkgICAgICZhcnEtPnNyY0NhbGxTaWduYWxBZGRyZXNzLAorCQkJCSAgICAgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLAorCQkJCSAgICAgcG9ydCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2FjZihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIEFkbWlzc2lvbkNvbmZpcm0gKmFjZikKK3sKKwlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCByZXQgPSAwOworCV9fYmUxNiBwb3J0OworCXVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzIGFkZHI7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwl0eXBlb2Yoc2V0X3NpZ19hZGRyX2hvb2spIHNldF9zaWdfYWRkcjsKKworCURFQlVHUCgibmZfY3RfcmFzOiBBQ0ZcbiIpOworCisJaWYgKCFnZXRfaDIyNV9hZGRyKGN0LCAqZGF0YSwgJmFjZi0+ZGVzdENhbGxTaWduYWxBZGRyZXNzLAorCQkJICAgJmFkZHIsICZwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW1lbWNtcCgmYWRkciwgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMsIHNpemVvZihhZGRyKSkpIHsKKwkJLyogQW5zd2VyaW5nIEFDRiAqLworCQlzZXRfc2lnX2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X3NpZ19hZGRyX2hvb2spOworCQlpZiAoc2V0X3NpZ19hZGRyICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCisJCQlyZXR1cm4gc2V0X3NpZ19hZGRyKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJCSAgICAmYWNmLT5kZXN0Q2FsbFNpZ25hbEFkZHJlc3MsIDEpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBOZWVkIG5ldyBleHBlY3QgKi8KKwlpZiAoKGV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpKSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisJbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KGV4cCwgY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMubDNudW0sCisJCQkJICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MywgJmFkZHIsCisJCQkJIElQUFJPVE9fVENQLCBOVUxMLCAmcG9ydCk7CisJZXhwLT5mbGFncyA9IE5GX0NUX0VYUEVDVF9QRVJNQU5FTlQ7CisJZXhwLT5oZWxwZXIgPSBuZl9jb25udHJhY2tfaGVscGVyX3E5MzE7CisKKwlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgPT0gMCkgeworCQlERUJVR1AoIm5mX2N0X3JhczogZXhwZWN0IFEuOTMxICIpOworCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPnR1cGxlKTsKKwl9IGVsc2UKKwkJcmV0ID0gLTE7CisKKwluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfbHJxKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgTG9jYXRpb25SZXF1ZXN0ICpscnEpCit7CisJdHlwZW9mKHNldF9yYXNfYWRkcl9ob29rKSBzZXRfcmFzX2FkZHI7CisKKwlERUJVR1AoIm5mX2N0X3JhczogTFJRXG4iKTsKKworCXNldF9yYXNfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfcmFzX2FkZHJfaG9vayk7CisJaWYgKHNldF9yYXNfYWRkciAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQorCQlyZXR1cm4gc2V0X3Jhc19hZGRyKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgICZscnEtPnJlcGx5QWRkcmVzcywgMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX2xjZihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIExvY2F0aW9uQ29uZmlybSAqbGNmKQoreworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJaW50IHJldCA9IDA7CisJX19iZTE2IHBvcnQ7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCisJREVCVUdQKCJuZl9jdF9yYXM6IExDRlxuIik7CisKKwlpZiAoIWdldF9oMjI1X2FkZHIoY3QsICpkYXRhLCAmbGNmLT5jYWxsU2lnbmFsQWRkcmVzcywKKwkJCSAgICZhZGRyLCAmcG9ydCkpCisJCXJldHVybiAwOworCisJLyogTmVlZCBuZXcgZXhwZWN0IGZvciBjYWxsIHNpZ25hbCAqLworCWlmICgoZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCkpID09IE5VTEwpCisJCXJldHVybiAtMTsKKwluZl9jb25udHJhY2tfZXhwZWN0X2luaXQoZXhwLCBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bSwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCAmYWRkciwKKwkJCQkgSVBQUk9UT19UQ1AsIE5VTEwsICZwb3J0KTsKKwlleHAtPmZsYWdzID0gTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKKwlleHAtPmhlbHBlciA9IG5mX2Nvbm50cmFja19oZWxwZXJfcTkzMTsKKworCWlmIChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQoZXhwKSA9PSAwKSB7CisJCURFQlVHUCgibmZfY3RfcmFzOiBleHBlY3QgUS45MzEgIik7CisJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCX0gZWxzZQorCQlyZXQgPSAtMTsKKworCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwkvKiBJZ25vcmUgcmFzQWRkcmVzcyAqLworCisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHByb2Nlc3NfaXJyKHN0cnVjdCBza19idWZmICoqcHNrYiwgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgSW5mb1JlcXVlc3RSZXNwb25zZSAqaXJyKQoreworCWludCByZXQ7CisJdHlwZW9mKHNldF9yYXNfYWRkcl9ob29rKSBzZXRfcmFzX2FkZHI7CisJdHlwZW9mKHNldF9zaWdfYWRkcl9ob29rKSBzZXRfc2lnX2FkZHI7CisKKwlERUJVR1AoIm5mX2N0X3JhczogSVJSXG4iKTsKKworCXNldF9yYXNfYWRkciA9IHJjdV9kZXJlZmVyZW5jZShzZXRfcmFzX2FkZHJfaG9vayk7CisJaWYgKHNldF9yYXNfYWRkciAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCXJldCA9IHNldF9yYXNfYWRkcihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZpcnItPnJhc0FkZHJlc3MsIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlzZXRfc2lnX2FkZHIgPSByY3VfZGVyZWZlcmVuY2Uoc2V0X3NpZ19hZGRyX2hvb2spOworCWlmIChzZXRfc2lnX2FkZHIgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgeworCQlyZXQgPSBzZXRfc2lnX2FkZHIocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkJaXJyLT5jYWxsU2lnbmFsQWRkcmVzcy5pdGVtLAorCQkJCQlpcnItPmNhbGxTaWduYWxBZGRyZXNzLmNvdW50KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwcm9jZXNzX3JhcyhzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIFJhc01lc3NhZ2UgKnJhcykKK3sKKwlzd2l0Y2ggKHJhcy0+Y2hvaWNlKSB7CisJY2FzZSBlUmFzTWVzc2FnZV9nYXRla2VlcGVyUmVxdWVzdDoKKwkJcmV0dXJuIHByb2Nlc3NfZ3JxKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgJnJhcy0+Z2F0ZWtlZXBlclJlcXVlc3QpOworCWNhc2UgZVJhc01lc3NhZ2VfZ2F0ZWtlZXBlckNvbmZpcm06CisJCXJldHVybiBwcm9jZXNzX2djZihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPmdhdGVrZWVwZXJDb25maXJtKTsKKwljYXNlIGVSYXNNZXNzYWdlX3JlZ2lzdHJhdGlvblJlcXVlc3Q6CisJCXJldHVybiBwcm9jZXNzX3JycShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPnJlZ2lzdHJhdGlvblJlcXVlc3QpOworCWNhc2UgZVJhc01lc3NhZ2VfcmVnaXN0cmF0aW9uQ29uZmlybToKKwkJcmV0dXJuIHByb2Nlc3NfcmNmKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgJnJhcy0+cmVnaXN0cmF0aW9uQ29uZmlybSk7CisJY2FzZSBlUmFzTWVzc2FnZV91bnJlZ2lzdHJhdGlvblJlcXVlc3Q6CisJCXJldHVybiBwcm9jZXNzX3VycShwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPnVucmVnaXN0cmF0aW9uUmVxdWVzdCk7CisJY2FzZSBlUmFzTWVzc2FnZV9hZG1pc3Npb25SZXF1ZXN0OgorCQlyZXR1cm4gcHJvY2Vzc19hcnEocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmcmFzLT5hZG1pc3Npb25SZXF1ZXN0KTsKKwljYXNlIGVSYXNNZXNzYWdlX2FkbWlzc2lvbkNvbmZpcm06CisJCXJldHVybiBwcm9jZXNzX2FjZihwc2tiLCBjdCwgY3RpbmZvLCBkYXRhLAorCQkJCSAgICZyYXMtPmFkbWlzc2lvbkNvbmZpcm0pOworCWNhc2UgZVJhc01lc3NhZ2VfbG9jYXRpb25SZXF1ZXN0OgorCQlyZXR1cm4gcHJvY2Vzc19scnEocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmcmFzLT5sb2NhdGlvblJlcXVlc3QpOworCWNhc2UgZVJhc01lc3NhZ2VfbG9jYXRpb25Db25maXJtOgorCQlyZXR1cm4gcHJvY2Vzc19sY2YocHNrYiwgY3QsIGN0aW5mbywgZGF0YSwKKwkJCQkgICAmcmFzLT5sb2NhdGlvbkNvbmZpcm0pOworCWNhc2UgZVJhc01lc3NhZ2VfaW5mb1JlcXVlc3RSZXNwb25zZToKKwkJcmV0dXJuIHByb2Nlc3NfaXJyKHBza2IsIGN0LCBjdGluZm8sIGRhdGEsCisJCQkJICAgJnJhcy0+aW5mb1JlcXVlc3RSZXNwb25zZSk7CisJZGVmYXVsdDoKKwkJREVCVUdQKCJuZl9jdF9yYXM6IFJBUyBtZXNzYWdlICVkXG4iLCByYXMtPmNob2ljZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcmFzX2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJICAgIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJc3RhdGljIFJhc01lc3NhZ2UgcmFzOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJaW50IGRhdGFsZW4gPSAwOworCWludCByZXQ7CisKKwlERUJVR1AoIm5mX2N0X3Jhczogc2tibGVuID0gJXVcbiIsICgqcHNrYiktPmxlbik7CisKKwlzcGluX2xvY2tfYmgoJm5mX2gzMjNfbG9jayk7CisKKwkvKiBHZXQgVURQIGRhdGEgKi8KKwlkYXRhID0gZ2V0X3VkcF9kYXRhKHBza2IsIHByb3RvZmYsICZkYXRhbGVuKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlnb3RvIGFjY2VwdDsKKwlERUJVR1AoIm5mX2N0X3JhczogUkFTIG1lc3NhZ2UgbGVuPSVkICIsIGRhdGFsZW4pOworCU5GX0NUX0RVTVBfVFVQTEUoJmN0LT50dXBsZWhhc2hbQ1RJTkZPMkRJUihjdGluZm8pXS50dXBsZSk7CisKKwkvKiBEZWNvZGUgUkFTIG1lc3NhZ2UgKi8KKwlyZXQgPSBEZWNvZGVSYXNNZXNzYWdlKGRhdGEsIGRhdGFsZW4sICZyYXMpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoIm5mX2N0X3JhczogZGVjb2RpbmcgZXJyb3I6ICVzXG4iLAorCQkJICAgICAgIHJldCA9PSBIMzIzX0VSUk9SX0JPVU5EID8KKwkJCSAgICAgICAib3V0IG9mIGJvdW5kIiA6ICJvdXQgb2YgcmFuZ2UiKTsKKwkJZ290byBhY2NlcHQ7CisJfQorCisJLyogUHJvY2VzcyBSQVMgbWVzc2FnZSAqLworCWlmIChwcm9jZXNzX3Jhcyhwc2tiLCBjdCwgY3RpbmZvLCAmZGF0YSwgJnJhcykgPCAwKQorCQlnb3RvIGRyb3A7CisKKyAgICAgIGFjY2VwdDoKKwlzcGluX3VubG9ja19iaCgmbmZfaDMyM19sb2NrKTsKKwlyZXR1cm4gTkZfQUNDRVBUOworCisgICAgICBkcm9wOgorCXNwaW5fdW5sb2NrX2JoKCZuZl9oMzIzX2xvY2spOworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50aygibmZfY3RfcmFzOiBwYWNrZXQgZHJvcHBlZFxuIik7CisJcmV0dXJuIE5GX0RST1A7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIG5mX2Nvbm50cmFja19oZWxwZXJfcmFzW10gX19yZWFkX21vc3RseSA9IHsKKwl7CisJCS5uYW1lCQkJPSAiUkFTIiwKKwkJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkJLm1heF9leHBlY3RlZAkJPSAzMiwKKwkJLnRpbWVvdXQJCT0gMjQwLAorCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKKwkJLm1hc2suc3JjLmwzbnVtCQk9IDB4RkZGRiwKKwkJLm1hc2suc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRiksCisJCS5tYXNrLmRzdC5wcm90b251bQk9IDB4RkYsCisJCS5oZWxwCQkJPSByYXNfaGVscCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJSQVMiLAorCQkubWUJCQk9IFRISVNfTU9EVUxFLAorCQkubWF4X2V4cGVjdGVkCQk9IDMyLAorCQkudGltZW91dAkJPSAyNDAsCisJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKKwkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKKwkJLm1hc2suc3JjLmwzbnVtCQk9IDB4RkZGRiwKKwkJLm1hc2suc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRiksCisJCS5tYXNrLmRzdC5wcm90b251bQk9IDB4RkYsCisJCS5oZWxwCQkJPSByYXNfaGVscCwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBfX2V4aXQgbmZfY29ubnRyYWNrX2gzMjNfZmluaSh2b2lkKQoreworCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0pOworCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0pOworCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzFdKTsKKwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSk7CisJa2ZyZWUoaDMyM19idWZmZXIpOworCURFQlVHUCgibmZfY3RfaDMyMzogZmluaVxuIik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX2gzMjNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwloMzIzX2J1ZmZlciA9IGttYWxsb2MoNjU1MzYsIEdGUF9LRVJORUwpOworCWlmICghaDMyM19idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCXJldCA9IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVswXSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyMTsKKwlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfaGVscGVyX3E5MzFbMV0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjI7CisJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjM7CisJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMV0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjQ7CisJREVCVUdQKCJuZl9jdF9oMzIzOiBpbml0IHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnI0OgorCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9yYXNbMF0pOworZXJyMzoKKwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19oZWxwZXJfcTkzMVsxXSk7CitlcnIyOgorCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2hlbHBlcl9xOTMxWzBdKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCittb2R1bGVfaW5pdChuZl9jb25udHJhY2tfaDMyM19pbml0KTsKK21vZHVsZV9leGl0KG5mX2Nvbm50cmFja19oMzIzX2ZpbmkpOworCitFWFBPUlRfU1lNQk9MX0dQTChnZXRfaDIyNV9hZGRyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNldF9oMjQ1X2FkZHJfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfaDIyNV9hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3NpZ19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwoc2V0X3Jhc19hZGRyX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X3J0cF9ydGNwX2hvb2spOworRVhQT1JUX1NZTUJPTF9HUEwobmF0X3QxMjBfaG9vayk7CitFWFBPUlRfU1lNQk9MX0dQTChuYXRfaDI0NV9ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF9jYWxsZm9yd2FyZGluZ19ob29rKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hdF9xOTMxX2hvb2spOworCitNT0RVTEVfQVVUSE9SKCJKaW5nIE1pbiBaaGFvIDx6aGFvamluZ21pbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkguMzIzIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja19oMzIzIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jCnJlbmFtZSB0byBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX3R5cGVzLmMKaW5kZXggNGIzNTk2MS4uNGM2ZjhiMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfdHlwZXMuYwpAQCAtMzYsNyArMzYsOCBAQAogfTsKIAogc3RhdGljIGZpZWxkX3QgX1RyYW5zcG9ydEFkZHJlc3NfaXA2QWRkcmVzc1tdID0gewkvKiBTRVFVRU5DRSAqLwotCXtGTkFNRSgiaXAiKSBPQ1RTVFIsIEZJWEQsIDE2LCAwLCBTS0lQLCAwLCBOVUxMfSwKKwl7Rk5BTUUoImlwIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgREVDT0RFLAorCSBvZmZzZXRvZihUcmFuc3BvcnRBZGRyZXNzX2lwNkFkZHJlc3MsIGlwNiksIE5VTEx9LAogCXtGTkFNRSgicG9ydCIpIElOVCwgV09SRCwgMCwgMCwgU0tJUCwgMCwgTlVMTH0sCiB9OwogCkBAIC02NSw4ICs2Niw4IEBACiAJIF9UcmFuc3BvcnRBZGRyZXNzX2lwU291cmNlUm91dGV9LAogCXtGTkFNRSgiaXB4QWRkcmVzcyIpIFNFUSwgMCwgMywgMywgU0tJUCwgMCwKIAkgX1RyYW5zcG9ydEFkZHJlc3NfaXB4QWRkcmVzc30sCi0Je0ZOQU1FKCJpcDZBZGRyZXNzIikgU0VRLCAwLCAyLCAyLCBTS0lQIHwgRVhULCAwLAotCSBfVHJhbnNwb3J0QWRkcmVzc19pcDZBZGRyZXNzfSwKKwl7Rk5BTUUoImlwNkFkZHJlc3MiKSBTRVEsIDAsIDIsIDIsIERFQ09ERSB8IEVYVCwKKwlvZmZzZXRvZihUcmFuc3BvcnRBZGRyZXNzLCBpcDZBZGRyZXNzKSwgX1RyYW5zcG9ydEFkZHJlc3NfaXA2QWRkcmVzc30sCiAJe0ZOQU1FKCJuZXRCaW9zIikgT0NUU1RSLCBGSVhELCAxNiwgMCwgU0tJUCwgMCwgTlVMTH0sCiAJe0ZOQU1FKCJuc2FwIikgT0NUU1RSLCA1LCAxLCAwLCBTS0lQLCAwLCBOVUxMfSwKIAl7Rk5BTUUoIm5vblN0YW5kYXJkQWRkcmVzcyIpIFNFUSwgMCwgMiwgMiwgU0tJUCwgMCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0M2JlNAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jCkBAIC0wLDAgKzEsMTU1IEBACisvKiBIZWxwZXIgaGFuZGxpbmcgZm9yIG5ldGZpbHRlci4gKi8KKworLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAorICogKEMpIDIwMDItMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgorICogKEMpIDIwMDMsMjAwNCBVU0FHSS9XSURFIFByb2plY3QgPGh0dHA6Ly93d3cubGludXgtaXB2Ni5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKworc3RhdGljIF9fcmVhZF9tb3N0bHkgTElTVF9IRUFEKGhlbHBlcnMpOworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCitfX25mX2N0X2hlbHBlcl9maW5kKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoLCAmaGVscGVycywgbGlzdCkgeworCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZoLT50dXBsZSwgJmgtPm1hc2spKQorCQkJcmV0dXJuIGg7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCituZl9jdF9oZWxwZXJfZmluZF9nZXQoIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CisKKwkvKiBuZWVkIG5mX2Nvbm50cmFja19sb2NrIHRvIGFzc3VyZSB0aGF0IGhlbHBlciBleGlzdHMgdW50aWwKKwkgKiB0cnlfbW9kdWxlX2dldCgpIGlzIGNhbGxlZCAqLworCXJlYWRfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJaGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZCh0dXBsZSk7CisJaWYgKGhlbHBlcikgeworCQkvKiBuZWVkIHRvIGluY3JlYXNlIG1vZHVsZSB1c2FnZSBjb3VudCB0byBhc3N1cmUgaGVscGVyIHdpbGwKKwkJICogbm90IGdvIGF3YXkgd2hpbGUgdGhlIGNhbGxlciBpcyBlLmcuIGJ1c3kgcHV0dGluZyBhCisJCSAqIGNvbm50cmFjayBpbiB0aGUgaGFzaCB0aGF0IHVzZXMgdGhlIGhlbHBlciAqLworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGhlbHBlci0+bWUpKQorCQkJaGVscGVyID0gTlVMTDsKKwl9CisKKwlyZWFkX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJcmV0dXJuIGhlbHBlcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2hlbHBlcl9maW5kX2dldCk7CisKK3ZvaWQgbmZfY3RfaGVscGVyX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyKQoreworCW1vZHVsZV9wdXQoaGVscGVyLT5tZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfcHV0KTsKKworc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgorX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZoZWxwZXJzLCBsaXN0KSB7CisJCWlmICghc3RyY21wKGgtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGg7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUpOworCitzdGF0aWMgaW5saW5lIGludCB1bmhlbHAoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICppLAorCQkJIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICptZSkKK3sKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGkpOworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOworCisJaWYgKGhlbHAgJiYgaGVscC0+aGVscGVyID09IG1lKSB7CisJCW5mX2Nvbm50cmFja19ldmVudChJUENUX0hFTFBFUiwgY3QpOworCQloZWxwLT5oZWxwZXIgPSBOVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKm1lKQoreworCWludCBzaXplLCByZXQ7CisKKwlCVUdfT04obWUtPnRpbWVvdXQgPT0gMCk7CisKKwlzaXplID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBuZl9jb25uKSwgX19hbGlnbm9mX18oc3RydWN0IG5mX2Nvbm5faGVscCkpICsKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBuZl9jb25uX2hlbHApOworCXJldCA9IG5mX2Nvbm50cmFja19yZWdpc3Rlcl9jYWNoZShORl9DVF9GX0hFTFAsICJuZl9jb25udHJhY2s6aGVscCIsCisJCQkJCSAgc2l6ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyOiBVbmFibGUgdG8gY3JlYXRlIHNsYWIgY2FjaGUgZm9yIGNvbm50cmFja3NcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJbGlzdF9hZGQoJm1lLT5saXN0LCAmaGVscGVycyk7CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIpOworCit2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsICp0bXA7CisKKwkvKiBOZWVkIHdyaXRlIGxvY2sgaGVyZSwgdG8gZGVsZXRlIGhlbHBlci4gKi8KKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJbGlzdF9kZWwoJm1lLT5saXN0KTsKKworCS8qIEdldCByaWQgb2YgZXhwZWN0YXRpb25zICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgdG1wLCAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoZXhwLT5tYXN0ZXIpOworCQlpZiAoKGhlbHAtPmhlbHBlciA9PSBtZSB8fCBleHAtPmhlbHBlciA9PSBtZSkgJiYKKwkJICAgIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgeworCQkJbmZfY3RfdW5saW5rX2V4cGVjdChleHApOworCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKwkJfQorCX0KKworCS8qIEdldCByaWQgb2YgZXhwZWN0ZWRzLCBzZXQgaGVscGVycyB0byBOVUxMLiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJnVuY29uZmlybWVkLCBsaXN0KQorCQl1bmhlbHAoaCwgbWUpOworCWZvciAoaSA9IDA7IGkgPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsICZuZl9jb25udHJhY2tfaGFzaFtpXSwgbGlzdCkKKwkJCXVuaGVscChoLCBtZSk7CisJfQorCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJLyogU29tZW9uZSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBoZWxwZXIgaW4gYSBiaC4gKi8KKwlzeW5jaHJvbml6ZV9uZXQoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMDFkYjYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYwpAQCAtMCwwICsxLDI4MSBAQAorLyogSVJDIGV4dGVuc2lvbiBmb3IgSVAgY29ubmVjdGlvbiB0cmFja2luZywgVmVyc2lvbiAxLjIxCisgKiAoQykgMjAwMC0yMDAyIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBnbnVtb25rcy5vcmc+CisgKiBiYXNlZCBvbiBSUidzIGlwX2Nvbm50cmFja19mdHAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuaD4KKworI2RlZmluZSBNQVhfUE9SVFMgOAorc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107CitzdGF0aWMgaW50IHBvcnRzX2M7CitzdGF0aWMgdW5zaWduZWQgaW50IG1heF9kY2NfY2hhbm5lbHMgPSA4Oworc3RhdGljIHVuc2lnbmVkIGludCBkY2NfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gMzAwOworLyogVGhpcyBpcyBzbG93LCBidXQgaXQncyBzaW1wbGUuIC0tUlIgKi8KK3N0YXRpYyBjaGFyICppcmNfYnVmZmVyOworc3RhdGljIERFRklORV9TUElOTE9DSyhpcmNfYnVmZmVyX2xvY2spOworCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfaXJjX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCisJCQkJdW5zaWduZWQgaW50IG1hdGNobGVuLAorCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfaXJjX2hvb2spOworCitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSVJDIChEQ0MpIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja19pcmMiKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsICZwb3J0c19jLCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydHMsICJwb3J0IG51bWJlcnMgb2YgSVJDIHNlcnZlcnMiKTsKK21vZHVsZV9wYXJhbShtYXhfZGNjX2NoYW5uZWxzLCB1aW50LCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWF4X2RjY19jaGFubmVscywgIm1heCBudW1iZXIgb2YgZXhwZWN0ZWQgRENDIGNoYW5uZWxzIHBlciAiCisJCQkJICAgIklSQyBzZXNzaW9uIik7Cittb2R1bGVfcGFyYW0oZGNjX3RpbWVvdXQsIHVpbnQsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyhkY2NfdGltZW91dCwgInRpbWVvdXQgb24gZm9yIHVuZXN0YWJsaXNoZWQgRENDIGNoYW5uZWxzIik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpkY2Nwcm90b3NbXSA9IHsKKwkiU0VORCAiLCAiQ0hBVCAiLCAiTU9WRSAiLCAiVFNFTkQgIiwgIlNDSEFUICIKK307CisKKyNkZWZpbmUgTUlOTUFUQ0hMRU4JNQorCisjaWYgMAorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6JXM6IiBmb3JtYXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisvKiB0cmllcyB0byBnZXQgdGhlIGlwX2FkZHIgYW5kIHBvcnQgb3V0IG9mIGEgZGNjIGNvbW1hbmQKKyAqIHJldHVybiB2YWx1ZTogLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzCisgKglkYXRhCQlwb2ludGVyIHRvIGZpcnN0IGJ5dGUgb2YgRENDIGNvbW1hbmQgZGF0YQorICoJZGF0YV9lbmQJcG9pbnRlciB0byBsYXN0IGJ5dGUgb2YgZGNjIGNvbW1hbmQgZGF0YQorICoJaXAJCXJldHVybnMgcGFyc2VkIGlwIG9mIGRjYyBjb21tYW5kCisgKglwb3J0CQlyZXR1cm5zIHBhcnNlZCBwb3J0IG9mIGRjYyBjb21tYW5kCisgKglhZF9iZWdfcAlyZXR1cm5zIHBvaW50ZXIgdG8gZmlyc3QgYnl0ZSBvZiBhZGRyIGRhdGEKKyAqCWFkX2VuZF9wCXJldHVybnMgcG9pbnRlciB0byBsYXN0IGJ5dGUgb2YgYWRkciBkYXRhCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZGNjKGNoYXIgKmRhdGEsIGNoYXIgKmRhdGFfZW5kLCB1X2ludDMyX3QgKmlwLAorCQkgICAgIHVfaW50MTZfdCAqcG9ydCwgY2hhciAqKmFkX2JlZ19wLCBjaGFyICoqYWRfZW5kX3ApCit7CisJLyogYXQgbGVhc3QgMTI6ICJBQUFBQUFBQSBQXDFcbiIgKi8KKwl3aGlsZSAoKmRhdGErKyAhPSAnICcpCisJCWlmIChkYXRhID4gZGF0YV9lbmQgLSAxMikKKwkJCXJldHVybiAtMTsKKworCSphZF9iZWdfcCA9IGRhdGE7CisJKmlwID0gc2ltcGxlX3N0cnRvdWwoZGF0YSwgJmRhdGEsIDEwKTsKKworCS8qIHNraXAgYmxhbmtzIGJldHdlZW4gaXAgYW5kIHBvcnQgKi8KKwl3aGlsZSAoKmRhdGEgPT0gJyAnKSB7CisJCWlmIChkYXRhID49IGRhdGFfZW5kKQorCQkJcmV0dXJuIC0xOworCQlkYXRhKys7CisJfQorCisJKnBvcnQgPSBzaW1wbGVfc3RydG91bChkYXRhLCAmZGF0YSwgMTApOworCSphZF9lbmRfcCA9IGRhdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCisJCXN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJdW5zaWduZWQgaW50IGRhdGFvZmY7CisJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRoOworCWNoYXIgKmRhdGEsICpkYXRhX2xpbWl0LCAqaWJfcHRyOworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZTsKKwl1X2ludDMyX3QgZGNjX2lwOworCXVfaW50MTZfdCBkY2NfcG9ydDsKKwlfX2JlMTYgcG9ydDsKKwlpbnQgaSwgcmV0ID0gTkZfQUNDRVBUOworCWNoYXIgKmFkZHJfYmVnX3AsICphZGRyX2VuZF9wOworCXR5cGVvZihuZl9uYXRfaXJjX2hvb2spIG5mX25hdF9pcmM7CisKKwkvKiBJZiBwYWNrZXQgaXMgY29taW5nIGZyb20gSVJDIHNlcnZlciAqLworCWlmIChkaXIgPT0gSVBfQ1RfRElSX1JFUExZKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJLyogVW50aWwgdGhlcmUncyBiZWVuIHRyYWZmaWMgYm90aCB3YXlzLCBkb24ndCBsb29rIGluIHBhY2tldHMuICovCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJgorCSAgICBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCS8qIE5vdCBhIGZ1bGwgdGNwIGhlYWRlcj8gKi8KKwl0aCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgcHJvdG9mZiwgc2l6ZW9mKF90Y3BoKSwgJl90Y3BoKTsKKwlpZiAodGggPT0gTlVMTCkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCS8qIE5vIGRhdGE/ICovCisJZGF0YW9mZiA9IHByb3RvZmYgKyB0aC0+ZG9mZio0OworCWlmIChkYXRhb2ZmID49ICgqcHNrYiktPmxlbikKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCXNwaW5fbG9ja19iaCgmaXJjX2J1ZmZlcl9sb2NrKTsKKwlpYl9wdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIGRhdGFvZmYsICgqcHNrYiktPmxlbiAtIGRhdGFvZmYsCisJCQkJICAgIGlyY19idWZmZXIpOworCUJVR19PTihpYl9wdHIgPT0gTlVMTCk7CisKKwlkYXRhID0gaWJfcHRyOworCWRhdGFfbGltaXQgPSBpYl9wdHIgKyAoKnBza2IpLT5sZW4gLSBkYXRhb2ZmOworCisJLyogc3RybGVuKCJcMURDQyBTRU5UIHQgQUFBQUFBQUEgUFwxXG4iKT0yNAorCSAqIDUrTUlOTUFUQ0hMRU4rc3RybGVuKCJ0IEFBQUFBQUFBIFBcMVxuIik9MTQgKi8KKwl3aGlsZSAoZGF0YSA8IGRhdGFfbGltaXQgLSAoMTkgKyBNSU5NQVRDSExFTikpIHsKKwkJaWYgKG1lbWNtcChkYXRhLCAiXDFEQ0MgIiwgNSkpIHsKKwkJCWRhdGErKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRhdGEgKz0gNTsKKwkJLyogd2UgaGF2ZSBhdCBsZWFzdCAoMTkrTUlOTUFUQ0hMRU4pLTUgYnl0ZXMgdmFsaWQgZGF0YSBsZWZ0ICovCisKKwkJREVCVUdQKCJEQ0MgZm91bmQgaW4gbWFzdGVyICV1LiV1LiV1LiV1OiV1ICV1LiV1LiV1LiV1OiV1Li4uXG4iLAorCQkJTklQUVVBRChpcGgtPnNhZGRyKSwgbnRvaHModGgtPnNvdXJjZSksCisJCQlOSVBRVUFEKGlwaC0+ZGFkZHIpLCBudG9ocyh0aC0+ZGVzdCkpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRjY3Byb3Rvcyk7IGkrKykgeworCQkJaWYgKG1lbWNtcChkYXRhLCBkY2Nwcm90b3NbaV0sIHN0cmxlbihkY2Nwcm90b3NbaV0pKSkgeworCQkJCS8qIG5vIG1hdGNoICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlkYXRhICs9IHN0cmxlbihkY2Nwcm90b3NbaV0pOworCQkJREVCVUdQKCJEQ0MgJXMgZGV0ZWN0ZWRcbiIsIGRjY3Byb3Rvc1tpXSk7CisKKwkJCS8qIHdlIGhhdmUgYXQgbGVhc3QKKwkJCSAqICgxOStNSU5NQVRDSExFTiktNS1kY2Nwcm90b3NbaV0ubWF0Y2hsZW4gYnl0ZXMgdmFsaWQKKwkJCSAqIGRhdGEgbGVmdCAoPT0gMTQvMTMgYnl0ZXMpICovCisJCQlpZiAocGFyc2VfZGNjKChjaGFyICopZGF0YSwgZGF0YV9saW1pdCwgJmRjY19pcCwKKwkJCQkgICAgICAgJmRjY19wb3J0LCAmYWRkcl9iZWdfcCwgJmFkZHJfZW5kX3ApKSB7CisJCQkJREVCVUdQKCJ1bmFibGUgdG8gcGFyc2UgZGNjIGNvbW1hbmRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJREVCVUdQKCJEQ0MgYm91bmQgaXAvcG9ydDogJXUuJXUuJXUuJXU6JXVcbiIsCisJCQkJSElQUVVBRChkY2NfaXApLCBkY2NfcG9ydCk7CisKKwkJCS8qIGRjY19pcCBjYW4gYmUgdGhlIGludGVybmFsIE9SIGV4dGVybmFsIChOQVQnZWQpIElQICovCisJCQl0dXBsZSA9ICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGU7CisJCQlpZiAodHVwbGUtPnNyYy51My5pcCAhPSBodG9ubChkY2NfaXApICYmCisJCQkgICAgdHVwbGUtPmRzdC51My5pcCAhPSBodG9ubChkY2NfaXApKSB7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJIkZvcmdlZCBEQ0MgY29tbWFuZCBmcm9tICIKKwkJCQkJCSIldS4ldS4ldS4ldTogJXUuJXUuJXUuJXU6JXVcbiIsCisJCQkJCQlOSVBRVUFEKHR1cGxlLT5zcmMudTMuaXApLAorCQkJCQkJSElQUVVBRChkY2NfaXApLCBkY2NfcG9ydCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfYWxsb2MoY3QpOworCQkJaWYgKGV4cCA9PSBOVUxMKSB7CisJCQkJcmV0ID0gTkZfRFJPUDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXR1cGxlID0gJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGU7CisJCQlwb3J0ID0gaHRvbnMoZGNjX3BvcnQpOworCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KGV4cCwgdHVwbGUtPnNyYy5sM251bSwKKwkJCQkJCSBOVUxMLCAmdHVwbGUtPmRzdC51MywKKwkJCQkJCSBJUFBST1RPX1RDUCwgTlVMTCwgJnBvcnQpOworCisJCQluZl9uYXRfaXJjID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9pcmNfaG9vayk7CisJCQlpZiAobmZfbmF0X2lyYyAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQorCQkJCXJldCA9IG5mX25hdF9pcmMocHNrYiwgY3RpbmZvLAorCQkJCQkJIGFkZHJfYmVnX3AgLSBpYl9wdHIsCisJCQkJCQkgYWRkcl9lbmRfcCAtIGFkZHJfYmVnX3AsCisJCQkJCQkgZXhwKTsKKwkJCWVsc2UgaWYgKG5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApICE9IDApCisJCQkJcmV0ID0gTkZfRFJPUDsKKwkJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKyBvdXQ6CisJc3Bpbl91bmxvY2tfYmgoJmlyY19idWZmZXJfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyIGlyY1tNQVhfUE9SVFNdIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgY2hhciBpcmNfbmFtZXNbTUFYX1BPUlRTXVtzaXplb2YoImlyYy02NTUzNSIpXSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfaXJjX2Zpbmkodm9pZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19pcmNfaW5pdCh2b2lkKQoreworCWludCBpLCByZXQ7CisJY2hhciAqdG1wbmFtZTsKKworCWlmIChtYXhfZGNjX2NoYW5uZWxzIDwgMSkgeworCQlwcmludGsoIm5mX2N0X2lyYzogbWF4X2RjY19jaGFubmVscyBtdXN0IG5vdCBiZSB6ZXJvXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaXJjX2J1ZmZlciA9IGttYWxsb2MoNjU1MzYsIEdGUF9LRVJORUwpOworCWlmICghaXJjX2J1ZmZlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBJZiBubyBwb3J0IGdpdmVuLCBkZWZhdWx0IHRvIHN0YW5kYXJkIGlyYyBwb3J0ICovCisJaWYgKHBvcnRzX2MgPT0gMCkKKwkJcG9ydHNbcG9ydHNfYysrXSA9IElSQ19QT1JUOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgeworCQlpcmNbaV0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDsKKwkJaXJjW2ldLnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOworCQlpcmNbaV0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CisJCWlyY1tpXS5tYXNrLnNyYy5sM251bSA9IDB4RkZGRjsKKwkJaXJjW2ldLm1hc2suc3JjLnUudGNwLnBvcnQgPSBodG9ucygweEZGRkYpOworCQlpcmNbaV0ubWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCQlpcmNbaV0ubWF4X2V4cGVjdGVkID0gbWF4X2RjY19jaGFubmVsczsKKwkJaXJjW2ldLnRpbWVvdXQgPSBkY2NfdGltZW91dDsKKwkJaXJjW2ldLm1lID0gVEhJU19NT0RVTEU7CisJCWlyY1tpXS5oZWxwID0gaGVscDsKKworCQl0bXBuYW1lID0gJmlyY19uYW1lc1tpXVswXTsKKwkJaWYgKHBvcnRzW2ldID09IElSQ19QT1JUKQorCQkJc3ByaW50Zih0bXBuYW1lLCAiaXJjIik7CisJCWVsc2UKKwkJCXNwcmludGYodG1wbmFtZSwgImlyYy0ldSIsIGkpOworCQlpcmNbaV0ubmFtZSA9IHRtcG5hbWU7CisKKwkJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmaXJjW2ldKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKCJuZl9jdF9pcmM6IGZhaWxlZCB0byByZWdpc3RlciBoZWxwZXIgIgorCQkJICAgICAgICJmb3IgcGY6ICV1IHBvcnQ6ICV1XG4iLAorCQkJICAgICAgIGlyY1tpXS50dXBsZS5zcmMubDNudW0sIHBvcnRzW2ldKTsKKwkJCW5mX2Nvbm50cmFja19pcmNfZmluaSgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbnRpb25hbGx5IF9OT1RfIGRlZmluZWQgYXMgX19leGl0LCBiZWNhdXNlCisgKiBpdCBpcyBuZWVkZWQgYnkgdGhlIGluaXQgZnVuY3Rpb24gKi8KK3N0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19pcmNfZmluaSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykKKwkJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKCZpcmNbaV0pOworCWtmcmVlKGlyY19idWZmZXIpOworfQorCittb2R1bGVfaW5pdChuZl9jb25udHJhY2tfaXJjX2luaXQpOworbW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX2lyY19maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYy5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMKaW5kZXggMjFlMGJjOS4uYTNkMzFjMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KLSNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgpAQCAtMzcsOCArMzcsNiBAQAogI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKLURFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgbmZfY29ubnRyYWNrX3N0YXQsIG5mX2Nvbm50cmFja19zdGF0KTsKLQogc3RhdGljIGludCBnZW5lcmljX3BrdF90b190dXBsZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbmhvZmYsCiAJCQkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CkBAIC04NCw3ICs4Miw3IEBACiAJcmV0dXJuIE5GX0NUX0ZfQkFTSUM7CiB9CiAKLXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byBuZl9jb25udHJhY2tfZ2VuZXJpY19sM3Byb3RvID0geworc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvIG5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMgPSB7CiAJLmwzcHJvdG8JID0gUEZfVU5TUEVDLAogCS5uYW1lCQkgPSAidW5rbm93biIsCiAJLnBrdF90b190dXBsZQkgPSBnZW5lcmljX3BrdF90b190dXBsZSwKQEAgLTk0LDMgKzkyLDQgQEAKIAkucHJlcGFyZQkgPSBnZW5lcmljX3ByZXBhcmUsCiAJLmdldF9mZWF0dXJlcwkgPSBnZW5lcmljX2dldF9mZWF0dXJlcywKIH07CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWIyMzRlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogICAgICBOZXRCSU9TIG5hbWUgc2VydmljZSBicm9hZGNhc3QgY29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXIKKyAqCisgKiAgICAgIChjKSAyMDA1IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworLyoKKyAqICAgICAgVGhpcyBoZWxwZXIgdHJhY2tzIGxvY2FsbHkgb3JpZ2luYXRpbmcgTmV0QklPUyBuYW1lIHNlcnZpY2UKKyAqICAgICAgcmVxdWVzdHMgYnkgaXNzdWluZyBwZXJtYW5lbnQgZXhwZWN0YXRpb25zICh2YWxpZCB1bnRpbAorICogICAgICB0aW1pbmcgb3V0KSBtYXRjaGluZyBhbGwgcmVwbHkgY29ubmVjdGlvbnMgZnJvbSB0aGUKKyAqICAgICAgZGVzdGluYXRpb24gbmV0d29yay4gVGhlIG9ubHkgTmV0QklPUyBzcGVjaWZpYyB0aGluZyBpcworICogICAgICBhY3R1YWxseSB0aGUgcG9ydCBudW1iZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FkZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorCisjZGVmaW5lIE5NQkRfUE9SVAkxMzcKKworTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5ldEJJT1MgbmFtZSBzZXJ2aWNlIGJyb2FkY2FzdCBjb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcF9jb25udHJhY2tfbmV0Ymlvc19ucyIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQgX19yZWFkX21vc3RseSA9IDM7Cittb2R1bGVfcGFyYW0odGltZW91dCwgdWludCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJ0aW1lb3V0IGZvciBtYXN0ZXIgY29ubmVjdGlvbi9yZXBsaWVzIGluIHNlY29uZHMiKTsKKworc3RhdGljIGludCBoZWxwKHN0cnVjdCBza19idWZmICoqcHNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCisgICAgICAgICAgICAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXN0cnVjdCBpcGhkciAqaXBoID0gKCpwc2tiKS0+bmguaXBoOworCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikoKnBza2IpLT5kc3Q7CisJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OworCV9fYmUzMiBtYXNrID0gMDsKKworCS8qIHdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBsb2NhbGx5IGdlbmVyYXRlZCBwYWNrZXRzICovCisJaWYgKCgqcHNrYiktPnNrID09IE5VTEwpCisJCWdvdG8gb3V0OworCWlmIChydCA9PSBOVUxMIHx8ICEocnQtPnJ0X2ZsYWdzICYgUlRDRl9CUk9BRENBU1QpKQorCQlnb3RvIG91dDsKKwlpZiAoQ1RJTkZPMkRJUihjdGluZm8pICE9IElQX0NUX0RJUl9PUklHSU5BTCkKKwkJZ290byBvdXQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShydC0+dS5kc3QuZGV2KTsKKwlpZiAoaW5fZGV2ICE9IE5VTEwpIHsKKwkJZm9yX3ByaW1hcnlfaWZhKGluX2RldikgeworCQkJaWYgKGlmYS0+aWZhX2Jyb2FkY2FzdCA9PSBpcGgtPmRhZGRyKSB7CisJCQkJbWFzayA9IGlmYS0+aWZhX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZW5kZm9yX2lmYShpbl9kZXYpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChtYXNrID09IDApCisJCWdvdG8gb3V0OworCisJZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CisJaWYgKGV4cCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWV4cC0+dHVwbGUgICAgICAgICAgICAgICAgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGU7CisJZXhwLT50dXBsZS5zcmMudS51ZHAucG9ydCA9IGh0b25zKE5NQkRfUE9SVCk7CisKKwlleHAtPm1hc2suc3JjLnUzLmlwICAgICAgID0gbWFzazsKKwlleHAtPm1hc2suc3JjLnUudWRwLnBvcnQgID0gaHRvbnMoMHhGRkZGKTsKKwlleHAtPm1hc2suZHN0LnUzLmlwICAgICAgID0gaHRvbmwoMHhGRkZGRkZGRik7CisJZXhwLT5tYXNrLmRzdC51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7CisJZXhwLT5tYXNrLmRzdC5wcm90b251bSAgICA9IDB4RkY7CisKKwlleHAtPmV4cGVjdGZuICAgICAgICAgICAgID0gTlVMTDsKKwlleHAtPmZsYWdzICAgICAgICAgICAgICAgID0gTkZfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKKworCW5mX2Nvbm50cmFja19leHBlY3RfcmVsYXRlZChleHApOworCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisKKwluZl9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgdGltZW91dCAqIEhaKTsKK291dDoKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgaGVscGVyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCQk9ICJuZXRiaW9zLW5zIiwKKwkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKE5NQkRfUE9SVCksCisJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAorCS5tYXNrLnNyYy5sM251bQkJPSAweEZGRkYsCisJLm1hc2suc3JjLnUudWRwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRiksCisJLm1hc2suZHN0LnByb3RvbnVtCT0gMHhGRiwKKwkubWF4X2V4cGVjdGVkCQk9IDEsCisJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkuaGVscAkJCT0gaGVscCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2luaXQodm9pZCkKK3sKKwloZWxwZXIudGltZW91dCA9IHRpbWVvdXQ7CisJcmV0dXJuIG5mX2Nvbm50cmFja19oZWxwZXJfcmVnaXN0ZXIoJmhlbHBlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfbmV0Ymlvc19uc19maW5pKHZvaWQpCit7CisJbmZfY29ubnRyYWNrX2hlbHBlcl91bnJlZ2lzdGVyKCZoZWxwZXIpOworfQorCittb2R1bGVfaW5pdChuZl9jb25udHJhY2tfbmV0Ymlvc19uc19pbml0KTsKK21vZHVsZV9leGl0KG5mX2Nvbm50cmFja19uZXRiaW9zX25zX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGFiNjdjMmIuLmJkMWQyZGUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTM1LDEwICszNSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KLSNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvY29sLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgpAQCAtNTAsMTUgKzU1LDE1IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfdHVwbGVzX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIAogCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAotCQkJICAgIHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvKQorCQkJICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgbmZhdHRyICpuZXN0X3Bhcm1zID0gTkZBX05FU1Qoc2tiLCBDVEFfVFVQTEVfUFJPVE8pOwogCiAJTkZBX1BVVChza2IsIENUQV9QUk9UT19OVU0sIHNpemVvZih1X2ludDhfdCksICZ0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAotCWlmIChsaWtlbHkocHJvdG8tPnR1cGxlX3RvX25mYXR0cikpCi0JCXJldCA9IHByb3RvLT50dXBsZV90b19uZmF0dHIoc2tiLCB0dXBsZSk7CisJaWYgKGxpa2VseShsNHByb3RvLT50dXBsZV90b19uZmF0dHIpKQorCQlyZXQgPSBsNHByb3RvLT50dXBsZV90b19uZmF0dHIoc2tiLCB0dXBsZSk7CiAJCiAJTkZBX05FU1RfRU5EKHNrYiwgbmVzdF9wYXJtcyk7CiAKQEAgLTkzLDcgKzk4LDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CiAKIAlsM3Byb3RvID0gbmZfY3RfbDNwcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtKTsKIAlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfaXAoc2tiLCB0dXBsZSwgbDNwcm90byk7CkBAIC0xMDIsOSArMTA3LDkgQEAKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCXJldHVybiByZXQ7CiAKLQlwcm90byA9IG5mX2N0X3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0sIHR1cGxlLT5kc3QucHJvdG9udW0pOwotCXJldCA9IGN0bmV0bGlua19kdW1wX3R1cGxlc19wcm90byhza2IsIHR1cGxlLCBwcm90byk7Ci0JbmZfY3RfcHJvdG9fcHV0KHByb3RvKTsKKwlsNHByb3RvID0gbmZfY3RfbDRwcm90b19maW5kX2dldCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKKwlyZXQgPSBjdG5ldGxpbmtfZHVtcF90dXBsZXNfcHJvdG8oc2tiLCB0dXBsZSwgbDRwcm90byk7CisJbmZfY3RfbDRwcm90b19wdXQobDRwcm90byk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTEyLDcgKzExNyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfc3RhdHVzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQl1X2ludDMyX3Qgc3RhdHVzID0gaHRvbmwoKHVfaW50MzJfdCkgY3QtPnN0YXR1cyk7CisJX19iZTMyIHN0YXR1cyA9IGh0b25sKCh1X2ludDMyX3QpIGN0LT5zdGF0dXMpOwogCU5GQV9QVVQoc2tiLCBDVEFfU1RBVFVTLCBzaXplb2Yoc3RhdHVzKSwgJnN0YXR1cyk7CiAJcmV0dXJuIDA7CiAKQEAgLTEyNCw3ICsxMjksNyBAQAogY3RuZXRsaW5rX2R1bXBfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CiAJbG9uZyB0aW1lb3V0X2wgPSBjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllczsKLQl1X2ludDMyX3QgdGltZW91dDsKKwlfX2JlMzIgdGltZW91dDsKIAogCWlmICh0aW1lb3V0X2wgPCAwKQogCQl0aW1lb3V0ID0gMDsKQEAgLTE0MSwyNyArMTQ2LDI3IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfcHJvdG9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90byA9IG5mX2N0X3Byb3RvX2ZpbmRfZ2V0KGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW0sIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSwgY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSk7CiAJc3RydWN0IG5mYXR0ciAqbmVzdF9wcm90bzsKIAlpbnQgcmV0OwogCi0JaWYgKCFwcm90by0+dG9fbmZhdHRyKSB7Ci0JCW5mX2N0X3Byb3RvX3B1dChwcm90byk7CisJaWYgKCFsNHByb3RvLT50b19uZmF0dHIpIHsKKwkJbmZfY3RfbDRwcm90b19wdXQobDRwcm90byk7CiAJCXJldHVybiAwOwogCX0KIAkKIAluZXN0X3Byb3RvID0gTkZBX05FU1Qoc2tiLCBDVEFfUFJPVE9JTkZPKTsKIAotCXJldCA9IHByb3RvLT50b19uZmF0dHIoc2tiLCBuZXN0X3Byb3RvLCBjdCk7CisJcmV0ID0gbDRwcm90by0+dG9fbmZhdHRyKHNrYiwgbmVzdF9wcm90bywgY3QpOwogCi0JbmZfY3RfcHJvdG9fcHV0KHByb3RvKTsKKwluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKIAogCU5GQV9ORVNUX0VORChza2IsIG5lc3RfcHJvdG8pOwogCiAJcmV0dXJuIHJldDsKIAogbmZhdHRyX2ZhaWx1cmU6Ci0JbmZfY3RfcHJvdG9fcHV0KHByb3RvKTsKKwluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTE5NSw3ICsyMDAsNyBAQAogewogCWVudW0gY3RhdHRyX3R5cGUgdHlwZSA9IGRpciA/IENUQV9DT1VOVEVSU19SRVBMWTogQ1RBX0NPVU5URVJTX09SSUc7CiAJc3RydWN0IG5mYXR0ciAqbmVzdF9jb3VudCA9IE5GQV9ORVNUKHNrYiwgdHlwZSk7Ci0JdV9pbnQzMl90IHRtcDsKKwlfX2JlMzIgdG1wOwogCiAJdG1wID0gaHRvbmwoY3QtPmNvdW50ZXJzW2Rpcl0ucGFja2V0cyk7CiAJTkZBX1BVVChza2IsIENUQV9DT1VOVEVSUzMyX1BBQ0tFVFMsIHNpemVvZih1X2ludDMyX3QpLCAmdG1wKTsKQEAgLTIxOCw3ICsyMjMsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIGN0bmV0bGlua19kdW1wX21hcmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewotCXVfaW50MzJfdCBtYXJrID0gaHRvbmwoY3QtPm1hcmspOworCV9fYmUzMiBtYXJrID0gaHRvbmwoY3QtPm1hcmspOwogCiAJTkZBX1BVVChza2IsIENUQV9NQVJLLCBzaXplb2YodV9pbnQzMl90KSwgJm1hcmspOwogCXJldHVybiAwOwpAQCAtMjMzLDcgKzIzOCw3IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQogewotCXVfaW50MzJfdCBpZCA9IGh0b25sKGN0LT5pZCk7CisJX19iZTMyIGlkID0gaHRvbmwoY3QtPmlkKTsKIAlORkFfUFVUKHNrYiwgQ1RBX0lELCBzaXplb2YodV9pbnQzMl90KSwgJmlkKTsKIAlyZXR1cm4gMDsKIApAQCAtMjQ0LDcgKzI0OSw3IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfdXNlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCkKIHsKLQl1X2ludDMyX3QgdXNlID0gaHRvbmwoYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpOworCV9fYmUzMiB1c2UgPSBodG9ubChhdG9taWNfcmVhZCgmY3QtPmN0X2dlbmVyYWwudXNlKSk7CiAJCiAJTkZBX1BVVChza2IsIENUQV9VU0UsIHNpemVvZih1X2ludDMyX3QpLCAmdXNlKTsKIAlyZXR1cm4gMDsKQEAgLTMzMCw4ICszMzUsNiBAQAogCX0gZWxzZSAgaWYgKGV2ZW50cyAmIChJUENUX05FVyB8IElQQ1RfUkVMQVRFRCkpIHsKIAkJdHlwZSA9IElQQ1ROTF9NU0dfQ1RfTkVXOwogCQlmbGFncyA9IE5MTV9GX0NSRUFURXxOTE1fRl9FWENMOwotCQkvKiBkdW1wIGV2ZXJ5dGhpbmcgKi8KLQkJZXZlbnRzID0gfjBVTDsKIAkJZ3JvdXAgPSBORk5MR1JQX0NPTk5UUkFDS19ORVc7CiAJfSBlbHNlICBpZiAoZXZlbnRzICYgKElQQ1RfU1RBVFVTIHwgSVBDVF9QUk9UT0lORk8pKSB7CiAJCXR5cGUgPSBJUENUTkxfTVNHX0NUX05FVzsKQEAgLTM2NiwyOCArMzY5LDM1IEBACiAJaWYgKGN0bmV0bGlua19kdW1wX3R1cGxlcyhza2IsIHR1cGxlKGN0LCBJUF9DVF9ESVJfUkVQTFkpKSA8IDApCiAJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CiAJTkZBX05FU1RfRU5EKHNrYiwgbmVzdF9wYXJtcyk7Ci0JCi0JLyogTkFUIHN0dWZmIGlzIG5vdyBhIHN0YXR1cyBmbGFnICovCi0JaWYgKChldmVudHMgJiBJUENUX1NUQVRVUyB8fCBldmVudHMgJiBJUENUX05BVElORk8pCi0JICAgICYmIGN0bmV0bGlua19kdW1wX3N0YXR1cyhza2IsIGN0KSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7Ci0JaWYgKGV2ZW50cyAmIElQQ1RfUkVGUkVTSAotCSAgICAmJiBjdG5ldGxpbmtfZHVtcF90aW1lb3V0KHNrYiwgY3QpIDwgMCkKLQkJZ290byBuZmF0dHJfZmFpbHVyZTsKLQlpZiAoZXZlbnRzICYgSVBDVF9QUk9UT0lORk8KLQkgICAgJiYgY3RuZXRsaW5rX2R1bXBfcHJvdG9pbmZvKHNrYiwgY3QpIDwgMCkKLQkJZ290byBuZmF0dHJfZmFpbHVyZTsKLQlpZiAoZXZlbnRzICYgSVBDVF9IRUxQSU5GTwotCSAgICAmJiBjdG5ldGxpbmtfZHVtcF9oZWxwaW5mbyhza2IsIGN0KSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CiAKLQlpZiAoY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSA8IDAgfHwKLQkgICAgY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX1JFUExZKSA8IDApCi0JCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisJaWYgKGV2ZW50cyAmIElQQ1RfREVTVFJPWSkgeworCQlpZiAoY3RuZXRsaW5rX2R1bXBfY291bnRlcnMoc2tiLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSA8IDAgfHwKKwkJICAgIGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9SRVBMWSkgPCAwKQorCQkJZ290byBuZmF0dHJfZmFpbHVyZTsKKwl9IGVsc2UgeworCQlpZiAoY3RuZXRsaW5rX2R1bXBfc3RhdHVzKHNrYiwgY3QpIDwgMCkKKwkJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CiAKLQlpZiAoZXZlbnRzICYgSVBDVF9NQVJLCi0JICAgICYmIGN0bmV0bGlua19kdW1wX21hcmsoc2tiLCBjdCkgPCAwKQotCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCQlpZiAoY3RuZXRsaW5rX2R1bXBfdGltZW91dChza2IsIGN0KSA8IDApCisJCQlnb3RvIG5mYXR0cl9mYWlsdXJlOworCisJCWlmIChldmVudHMgJiBJUENUX1BST1RPSU5GTworCQkgICAgJiYgY3RuZXRsaW5rX2R1bXBfcHJvdG9pbmZvKHNrYiwgY3QpIDwgMCkKKwkJICAgIAlnb3RvIG5mYXR0cl9mYWlsdXJlOworCisJCWlmICgoZXZlbnRzICYgSVBDVF9IRUxQRVIgfHwgbmZjdF9oZWxwKGN0KSkKKwkJICAgICYmIGN0bmV0bGlua19kdW1wX2hlbHBpbmZvKHNrYiwgY3QpIDwgMCkKKwkJICAgIAlnb3RvIG5mYXR0cl9mYWlsdXJlOworCisJCWlmICgoZXZlbnRzICYgSVBDVF9NQVJLIHx8IGN0LT5tYXJrKQorCQkgICAgJiYgY3RuZXRsaW5rX2R1bXBfbWFyayhza2IsIGN0KSA8IDApCisJCSAgICAJZ290byBuZmF0dHJfZmFpbHVyZTsKKworCQlpZiAoZXZlbnRzICYgSVBDVF9DT1VOVEVSX0ZJTExJTkcgJiYKKwkJICAgIChjdG5ldGxpbmtfZHVtcF9jb3VudGVycyhza2IsIGN0LCBJUF9DVF9ESVJfT1JJR0lOQUwpIDwgMCB8fAorCQkgICAgIGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9SRVBMWSkgPCAwKSkKKwkJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CisJfQogCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwogCW5mbmV0bGlua19zZW5kKHNrYiwgMCwgZ3JvdXAsIDApOwpAQCAtNDI0LDcgKzQzNCw3IEBACiByZXN0YXJ0OgogCQlsaXN0X2Zvcl9lYWNoX3ByZXYoaSwgJm5mX2Nvbm50cmFja19oYXNoW2NiLT5hcmdzWzBdXSkgewogCQkJaCA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKikgaTsKLQkJCWlmIChESVJFQ1RJT04oaCkgIT0gSVBfQ1RfRElSX09SSUdJTkFMKQorCQkJaWYgKE5GX0NUX0RJUkVDVElPTihoKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCQkJY29udGludWU7CiAJCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCQkvKiBEdW1wIGVudHJpZXMgb2YgYSBnaXZlbiBMMyBwcm90b2NvbCBudW1iZXIuCkBAIC00OTIsNyArNTAyLDcgQEAKIAkJCSAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAlzdHJ1Y3QgbmZhdHRyICp0YltDVEFfUFJPVE9fTUFYXTsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICpwcm90bzsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CiAJaW50IHJldCA9IDA7CiAKIAluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9fTUFYLCBhdHRyKTsKQEAgLTUwNCwxMiArNTE0LDEyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCXR1cGxlLT5kc3QucHJvdG9udW0gPSAqKHVfaW50OF90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPX05VTS0xXSk7CiAKLQlwcm90byA9IG5mX2N0X3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0sIHR1cGxlLT5kc3QucHJvdG9udW0pOworCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0sIHR1cGxlLT5kc3QucHJvdG9udW0pOwogCi0JaWYgKGxpa2VseShwcm90by0+bmZhdHRyX3RvX3R1cGxlKSkKLQkJcmV0ID0gcHJvdG8tPm5mYXR0cl90b190dXBsZSh0YiwgdHVwbGUpOworCWlmIChsaWtlbHkobDRwcm90by0+bmZhdHRyX3RvX3R1cGxlKSkKKwkJcmV0ID0gbDRwcm90by0+bmZhdHRyX3RvX3R1cGxlKHRiLCB0dXBsZSk7CiAKLQluZl9jdF9wcm90b19wdXQocHJvdG8pOworCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOwogCQogCXJldHVybiByZXQ7CiB9CkBAIC01NTAsMjggKzU2MCwyOCBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogc3RhdGljIGNvbnN0IHNpemVfdCBjdGFfbWluX3Byb3RvbmF0W0NUQV9QUk9UT05BVF9NQVhdID0gewogCVtDVEFfUFJPVE9OQVRfUE9SVF9NSU4tMV0gICAgICAgPSBzaXplb2YodV9pbnQxNl90KSwKIAlbQ1RBX1BST1RPTkFUX1BPUlRfTUFYLTFdICAgICAgID0gc2l6ZW9mKHVfaW50MTZfdCksCiB9OwogCi1zdGF0aWMgaW50IGN0bmV0bGlua19wYXJzZV9uYXRfcHJvdG8oc3RydWN0IG5mYXR0ciAqYXR0ciwKK3N0YXRpYyBpbnQgbmZuZXRsaW5rX3BhcnNlX25hdF9wcm90byhzdHJ1Y3QgbmZhdHRyICphdHRyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJCSAgICAgc3RydWN0IGlwX25hdF9yYW5nZSAqcmFuZ2UpCisJCQkJICAgICBzdHJ1Y3QgbmZfbmF0X3JhbmdlICpyYW5nZSkKIHsKIAlzdHJ1Y3QgbmZhdHRyICp0YltDVEFfUFJPVE9OQVRfTUFYXTsKLQlzdHJ1Y3QgaXBfbmF0X3Byb3RvY29sICpucHQ7CisJc3RydWN0IG5mX25hdF9wcm90b2NvbCAqbnB0OwogCiAJbmZhdHRyX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPTkFUX01BWCwgYXR0cik7CiAKIAlpZiAobmZhdHRyX2JhZF9zaXplKHRiLCBDVEFfUFJPVE9OQVRfTUFYLCBjdGFfbWluX3Byb3RvbmF0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlucHQgPSBpcF9uYXRfcHJvdG9fZmluZF9nZXQoY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLmRzdC5wcm90b251bSk7CisJbnB0ID0gbmZfbmF0X3Byb3RvX2ZpbmRfZ2V0KGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0pOwogCiAJaWYgKCFucHQtPm5mYXR0cl90b19yYW5nZSkgewotCQlpcF9uYXRfcHJvdG9fcHV0KG5wdCk7CisJCW5mX25hdF9wcm90b19wdXQobnB0KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC01NzksNyArNTg5LDcgQEAKIAlpZiAobnB0LT5uZmF0dHJfdG9fcmFuZ2UodGIsIHJhbmdlKSA+IDApCiAJCXJhbmdlLT5mbGFncyB8PSBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEOwogCi0JaXBfbmF0X3Byb3RvX3B1dChucHQpOworCW5mX25hdF9wcm90b19wdXQobnB0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTkwLDggKzYwMCw4IEBACiB9OwogCiBzdGF0aWMgaW5saW5lIGludAotY3RuZXRsaW5rX3BhcnNlX25hdChzdHJ1Y3QgbmZhdHRyICpuYXQsCi0JCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBpcF9uYXRfcmFuZ2UgKnJhbmdlKQorbmZuZXRsaW5rX3BhcnNlX25hdChzdHJ1Y3QgbmZhdHRyICpuYXQsCisJCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlKQogewogCXN0cnVjdCBuZmF0dHIgKnRiW0NUQV9OQVRfTUFYXTsKIAlpbnQgZXJyOwpAQCAtNjA0LDEyICs2MTQsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodGJbQ1RBX05BVF9NSU5JUC0xXSkKLQkJcmFuZ2UtPm1pbl9pcCA9ICoodV9pbnQzMl90ICopTkZBX0RBVEEodGJbQ1RBX05BVF9NSU5JUC0xXSk7CisJCXJhbmdlLT5taW5faXAgPSAqKF9fYmUzMiAqKU5GQV9EQVRBKHRiW0NUQV9OQVRfTUlOSVAtMV0pOwogCiAJaWYgKCF0YltDVEFfTkFUX01BWElQLTFdKQogCQlyYW5nZS0+bWF4X2lwID0gcmFuZ2UtPm1pbl9pcDsKIAllbHNlCi0JCXJhbmdlLT5tYXhfaXAgPSAqKHVfaW50MzJfdCAqKU5GQV9EQVRBKHRiW0NUQV9OQVRfTUFYSVAtMV0pOworCQlyYW5nZS0+bWF4X2lwID0gKihfX2JlMzIgKilORkFfREFUQSh0YltDVEFfTkFUX01BWElQLTFdKTsKIAogCWlmIChyYW5nZS0+bWluX2lwKQogCQlyYW5nZS0+ZmxhZ3MgfD0gSVBfTkFUX1JBTkdFX01BUF9JUFM7CkBAIC02MTcsNyArNjI3LDcgQEAKIAlpZiAoIXRiW0NUQV9OQVRfUFJPVE8tMV0pCiAJCXJldHVybiAwOwogCi0JZXJyID0gY3RuZXRsaW5rX3BhcnNlX25hdF9wcm90byh0YltDVEFfTkFUX1BST1RPLTFdLCBjdCwgcmFuZ2UpOworCWVyciA9IG5mbmV0bGlua19wYXJzZV9uYXRfcHJvdG8odGJbQ1RBX05BVF9QUk9UTy0xXSwgY3QsIHJhbmdlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtNjgyLDcgKzY5Miw3IEBACiAJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQogCWlmIChjZGFbQ1RBX0lELTFdKSB7Ci0JCXVfaW50MzJfdCBpZCA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9JRC0xXSkpOworCQl1X2ludDMyX3QgaWQgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfSUQtMV0pKTsKIAkJaWYgKGN0LT5pZCAhPSBpZCkgewogCQkJbmZfY3RfcHV0KGN0KTsKIAkJCXJldHVybiAtRU5PRU5UOwpAQCAtNzUyLDcgKzc2Miw2IEBACiAJCW5mX2N0X3B1dChjdCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlORVRMSU5LX0NCKHNrYjIpLmRzdF9waWQgPSBORVRMSU5LX0NCKHNrYikucGlkOwogCiAJZXJyID0gY3RuZXRsaW5rX2ZpbGxfaW5mbyhza2IyLCBORVRMSU5LX0NCKHNrYikucGlkLCBubGgtPm5sbXNnX3NlcSwgCiAJCQkJICBJUENUTkxfTVNHX0NUX05FVywgMSwgY3QpOwpAQCAtNzc2LDcgKzc4NSw3IEBACiBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZmF0dHIgKmNkYVtdKQogewogCXVuc2lnbmVkIGxvbmcgZDsKLQl1bnNpZ25lZCBzdGF0dXMgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfU1RBVFVTLTFdKSk7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IG50b2hsKCooX19iZTMyICopTkZBX0RBVEEoY2RhW0NUQV9TVEFUVVMtMV0pKTsKIAlkID0gY3QtPnN0YXR1cyBeIHN0YXR1czsKIAogCWlmIChkICYgKElQU19FWFBFQ1RFRHxJUFNfQ09ORklSTUVEfElQU19EWUlORykpCkBAIC03OTMsMzUgKzgwMiwzNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjZGFbQ1RBX05BVF9TUkMtMV0gfHwgY2RhW0NUQV9OQVRfRFNULTFdKSB7Ci0jaWZuZGVmIENPTkZJR19JUF9ORl9OQVRfTkVFREVECisjaWZuZGVmIENPTkZJR19ORl9OQVRfTkVFREVECiAJCXJldHVybiAtRUlOVkFMOwogI2Vsc2UKLQkJc3RydWN0IGlwX25hdF9yYW5nZSByYW5nZTsKKwkJc3RydWN0IG5mX25hdF9yYW5nZSByYW5nZTsKIAogCQlpZiAoY2RhW0NUQV9OQVRfRFNULTFdKSB7Ci0JCQlpZiAoY3RuZXRsaW5rX3BhcnNlX25hdChjZGFbQ1RBX05BVF9EU1QtMV0sIGN0LAorCQkJaWYgKG5mbmV0bGlua19wYXJzZV9uYXQoY2RhW0NUQV9OQVRfRFNULTFdLCBjdCwKIAkJCQkJCSZyYW5nZSkgPCAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGlwX25hdF9pbml0aWFsaXplZChjdCwKKwkJCWlmIChuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsCiAJCQkJCSAgICAgICBIT09LMk1BTklQKE5GX0lQX1BSRV9ST1VUSU5HKSkpCiAJCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCQlpcF9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBob29rbnVtKTsKKwkJCW5mX25hdF9zZXR1cF9pbmZvKGN0LCAmcmFuZ2UsIE5GX0lQX1BSRV9ST1VUSU5HKTsKIAkJfQogCQlpZiAoY2RhW0NUQV9OQVRfU1JDLTFdKSB7Ci0JCQlpZiAoY3RuZXRsaW5rX3BhcnNlX25hdChjZGFbQ1RBX05BVF9TUkMtMV0sIGN0LAorCQkJaWYgKG5mbmV0bGlua19wYXJzZV9uYXQoY2RhW0NUQV9OQVRfU1JDLTFdLCBjdCwKIAkJCQkJCSZyYW5nZSkgPCAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGlwX25hdF9pbml0aWFsaXplZChjdCwKKwkJCWlmIChuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsCiAJCQkJCSAgICAgICBIT09LMk1BTklQKE5GX0lQX1BPU1RfUk9VVElORykpKQogCQkJCXJldHVybiAtRUVYSVNUOwotCQkJaXBfbmF0X3NldHVwX2luZm8oY3QsICZyYW5nZSwgaG9va251bSk7CisJCQluZl9uYXRfc2V0dXBfaW5mbyhjdCwgJnJhbmdlLCBORl9JUF9QT1NUX1JPVVRJTkcpOwogCQl9CiAjZW5kaWYKIAl9CiAKIAkvKiBCZSBjYXJlZnVsIGhlcmUsIG1vZGlmeWluZyBOQVQgYml0cyBjYW4gc2NyZXcgdXAgdGhpbmdzLAogCSAqIHNvIGRvbid0IGxldCB1c2VycyBtb2RpZnkgdGhlbSBkaXJlY3RseSBpZiB0aGV5IGRvbid0IHBhc3MKLQkgKiBpcF9uYXRfcmFuZ2UuICovCisJICogbmZfbmF0X3JhbmdlLiAqLwogCWN0LT5zdGF0dXMgfD0gc3RhdHVzICYgfihJUFNfTkFUX0RPTkVfTUFTSyB8IElQU19OQVRfTUFTSyk7CiAJcmV0dXJuIDA7CiB9CkBAIC04NzUsNyArODg0LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfY2hhbmdlX3RpbWVvdXQoc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZhdHRyICpjZGFbXSkKIHsKLQl1X2ludDMyX3QgdGltZW91dCA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9USU1FT1VULTFdKSk7CisJdV9pbnQzMl90IHRpbWVvdXQgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfVElNRU9VVC0xXSkpOwogCQogCWlmICghZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpCiAJCXJldHVybiAtRVRJTUU7CkBAIC04OTAsMTggKzg5OSwxOCBAQAogY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oc3RydWN0IG5mX2Nvbm4gKmN0LCBzdHJ1Y3QgbmZhdHRyICpjZGFbXSkKIHsKIAlzdHJ1Y3QgbmZhdHRyICp0YltDVEFfUFJPVE9JTkZPX01BWF0sICphdHRyID0gY2RhW0NUQV9QUk9UT0lORk8tMV07Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CisJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOwogCXVfaW50MTZfdCBucHQgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuZHN0LnByb3RvbnVtOwogCXVfaW50MTZfdCBsM251bSA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW07CiAJaW50IGVyciA9IDA7CiAKIAluZmF0dHJfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX01BWCwgYXR0cik7CiAKLQlwcm90byA9IG5mX2N0X3Byb3RvX2ZpbmRfZ2V0KGwzbnVtLCBucHQpOworCWw0cHJvdG8gPSBuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KGwzbnVtLCBucHQpOwogCi0JaWYgKHByb3RvLT5mcm9tX25mYXR0cikKLQkJZXJyID0gcHJvdG8tPmZyb21fbmZhdHRyKHRiLCBjdCk7Ci0JbmZfY3RfcHJvdG9fcHV0KHByb3RvKTsgCisJaWYgKGw0cHJvdG8tPmZyb21fbmZhdHRyKQorCQllcnIgPSBsNHByb3RvLT5mcm9tX25mYXR0cih0YiwgY3QpOworCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTkzNyw3ICs5NDYsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01BUkspCiAJaWYgKGNkYVtDVEFfTUFSSy0xXSkKLQkJY3QtPm1hcmsgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOworCQljdC0+bWFyayA9IG50b2hsKCooX19iZTMyICopTkZBX0RBVEEoY2RhW0NUQV9NQVJLLTFdKSk7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtOTU4LDE0ICs5NjcsMTYgQEAKIAogCWlmICghY2RhW0NUQV9USU1FT1VULTFdKQogCQlnb3RvIGVycjsKLQljdC0+dGltZW91dC5leHBpcmVzID0gbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX1RJTUVPVVQtMV0pKTsKKwljdC0+dGltZW91dC5leHBpcmVzID0gbnRvaGwoKihfX2JlMzIgKilORkFfREFUQShjZGFbQ1RBX1RJTUVPVVQtMV0pKTsKIAogCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgY3QtPnRpbWVvdXQuZXhwaXJlcyAqIEhaOwogCWN0LT5zdGF0dXMgfD0gSVBTX0NPTkZJUk1FRDsKIAotCWVyciA9IGN0bmV0bGlua19jaGFuZ2Vfc3RhdHVzKGN0LCBjZGEpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycjsKKwlpZiAoY2RhW0NUQV9TVEFUVVMtMV0pIHsKKwkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9zdGF0dXMoY3QsIGNkYSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnI7CisJfQogCiAJaWYgKGNkYVtDVEFfUFJPVE9JTkZPLTFdKSB7CiAJCWVyciA9IGN0bmV0bGlua19jaGFuZ2VfcHJvdG9pbmZvKGN0LCBjZGEpOwpAQCAtOTc1LDcgKzk4Niw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKIAlpZiAoY2RhW0NUQV9NQVJLLTFdKQotCQljdC0+bWFyayA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9NQVJLLTFdKSk7CisJCWN0LT5tYXJrID0gbnRvaGwoKihfX2JlMzIgKilORkFfREFUQShjZGFbQ1RBX01BUkstMV0pKTsKICNlbmRpZgogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CkBAIC0xMDgxLDcgKzEwOTIsNyBAQAogewogCWludCByZXQ7CiAJc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvOwotCXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvOworCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAlzdHJ1Y3QgbmZhdHRyICpuZXN0X3Bhcm1zID0gTkZBX05FU1Qoc2tiLCBDVEFfRVhQRUNUX01BU0spOwogCiAJbDNwcm90byA9IG5mX2N0X2wzcHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSk7CkBAIC0xMDkxLDkgKzExMDIsOSBAQAogCWlmICh1bmxpa2VseShyZXQgPCAwKSkKIAkJZ290byBuZmF0dHJfZmFpbHVyZTsKIAotCXByb3RvID0gbmZfY3RfcHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7Ci0JcmV0ID0gY3RuZXRsaW5rX2R1bXBfdHVwbGVzX3Byb3RvKHNrYiwgbWFzaywgcHJvdG8pOwotCW5mX2N0X3Byb3RvX3B1dChwcm90byk7CisJbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CisJcmV0ID0gY3RuZXRsaW5rX2R1bXBfdHVwbGVzX3Byb3RvKHNrYiwgbWFzaywgbDRwcm90byk7CisJbmZfY3RfbDRwcm90b19wdXQobDRwcm90byk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQogCQlnb3RvIG5mYXR0cl9mYWlsdXJlOwogCkBAIC0xMTEwLDggKzExMjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKQogewogCXN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBleHAtPm1hc3RlcjsKLQl1X2ludDMyX3QgdGltZW91dCA9IGh0b25sKChleHAtPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpIC8gSFopOwotCXVfaW50MzJfdCBpZCA9IGh0b25sKGV4cC0+aWQpOworCV9fYmUzMiB0aW1lb3V0ID0gaHRvbmwoKGV4cC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykgLyBIWik7CisJX19iZTMyIGlkID0gaHRvbmwoZXhwLT5pZCk7CiAKIAlpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgJmV4cC0+dHVwbGUsIENUQV9FWFBFQ1RfVFVQTEUpIDwgMCkKIAkJZ290byBuZmF0dHJfZmFpbHVyZTsKQEAgLTEyODQsMTIgKzEyOTUsMTIgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfZmluZCgmdHVwbGUpOworCWV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoJnR1cGxlKTsKIAlpZiAoIWV4cCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlpZiAoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pIHsKLQkJdV9pbnQzMl90IGlkID0gKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX0VYUEVDVF9JRC0xXSk7CisJCV9fYmUzMiBpZCA9ICooX19iZTMyICopTkZBX0RBVEEoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pOwogCQlpZiAoZXhwLT5pZCAhPSBudG9obChpZCkpIHsKIAkJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEzMDAsOCArMTMxMSw3IEBACiAJc2tiMiA9IGFsbG9jX3NrYihOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IyKQogCQlnb3RvIG91dDsKLQlORVRMSU5LX0NCKHNrYjIpLmRzdF9waWQgPSBORVRMSU5LX0NCKHNrYikucGlkOwotCQorCiAJZXJyID0gY3RuZXRsaW5rX2V4cF9maWxsX2luZm8oc2tiMiwgTkVUTElOS19DQihza2IpLnBpZCwgCiAJCQkJICAgICAgbmxoLT5ubG1zZ19zZXEsIElQQ1ROTF9NU0dfRVhQX05FVywKIAkJCQkgICAgICAxLCBleHApOwpAQCAtMTM0MCwxMyArMTM1MCwxMiBAQAogCQkJcmV0dXJuIGVycjsKIAogCQkvKiBidW1wIHVzYWdlIGNvdW50IHRvIDIgKi8KLQkJZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9maW5kKCZ0dXBsZSk7CisJCWV4cCA9IG5mX2Nvbm50cmFja19leHBlY3RfZmluZF9nZXQoJnR1cGxlKTsKIAkJaWYgKCFleHApCiAJCQlyZXR1cm4gLUVOT0VOVDsKIAogCQlpZiAoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pIHsKLQkJCXVfaW50MzJfdCBpZCA9IAotCQkJCSoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pOworCQkJX19iZTMyIGlkID0gKihfX2JlMzIgKilORkFfREFUQShjZGFbQ1RBX0VYUEVDVF9JRC0xXSk7CiAJCQlpZiAoZXhwLT5pZCAhPSBudG9obChpZCkpIHsKIAkJCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOwogCQkJCXJldHVybiAtRU5PRU5UOwpAQCAtMTQ0Miw2ICsxNDUxLDcgQEAKIAlleHAtPmV4cGVjdGZuID0gTlVMTDsKIAlleHAtPmZsYWdzID0gMDsKIAlleHAtPm1hc3RlciA9IGN0OworCWV4cC0+aGVscGVyID0gTlVMTDsKIAltZW1jcHkoJmV4cC0+dHVwbGUsICZ0dXBsZSwgc2l6ZW9mKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUpKTsKIAltZW1jcHkoJmV4cC0+bWFzaywgJm1hc2ssIHNpemVvZihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlKSk7CiAKQEAgLTE1MzgsNiArMTU0OCw3IEBACiAJLmNiCQkJCT0gY3RubF9leHBfY2IsCiB9OwogCitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja19uZXRsaW5rIik7CiBNT0RVTEVfQUxJQVNfTkZOTF9TVUJTWVMoTkZOTF9TVUJTWVNfQ1RORVRMSU5LKTsKIE1PRFVMRV9BTElBU19ORk5MX1NVQlNZUyhORk5MX1NVQlNZU19DVE5FVExJTktfRVhQKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmYwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKQEAgLTAsMCArMSw2MDcgQEAKKy8qCisgKiBDb25uZWN0aW9uIHRyYWNraW5nIHN1cHBvcnQgZm9yIFBQVFAgKFBvaW50IHRvIFBvaW50IFR1bm5lbGluZyBQcm90b2NvbCkuCisgKiBQUFRQIGlzIGEgYSBwcm90b2NvbCBmb3IgY3JlYXRpbmcgdmlydHVhbCBwcml2YXRlIG5ldHdvcmtzLgorICogSXQgaXMgYSBzcGVjaWZpY2F0aW9uIGRlZmluZWQgYnkgTWljcm9zb2Z0IGFuZCBzb21lIHZlbmRvcnMKKyAqIHdvcmtpbmcgd2l0aCBNaWNyb3NvZnQuICBQUFRQIGlzIGJ1aWx0IG9uIHRvcCBvZiBhIG1vZGlmaWVkCisgKiB2ZXJzaW9uIG9mIHRoZSBJbnRlcm5ldCBHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbiBQcm90b2NvbC4KKyAqIEdSRSBpcyBkZWZpbmVkIGluIFJGQyAxNzAxIGFuZCBSRkMgMTcwMi4gIERvY3VtZW50YXRpb24gb2YKKyAqIFBQVFAgY2FuIGJlIGZvdW5kIGluIFJGQyAyNjM3CisgKgorICogKEMpIDIwMDAtMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIERldmVsb3BtZW50IG9mIHRoaXMgY29kZSBmdW5kZWQgYnkgQXN0YXJvIEFHIChodHRwOi8vd3d3LmFzdGFyby5jb20vKQorICoKKyAqIExpbWl0YXRpb25zOgorICogCSAtIFdlIGJsaW5kbHkgYXNzdW1lIHRoYXQgY29udHJvbCBjb25uZWN0aW9ucyBhcmUgYWx3YXlzCisgKiAJICAgZXN0YWJsaXNoZWQgaW4gUE5TLT5QQUMgZGlyZWN0aW9uLiAgVGhpcyBpcyBhIHZpb2xhdGlvbgorICogCSAgIG9mIFJGRkMyNjczCisgKiAJIC0gV2UgY2FuIG9ubHkgc3VwcG9ydCBvbmUgc2luZ2xlIGNhbGwgd2l0aGluIGVhY2ggc2Vzc2lvbgorICogVE9ETzoKKyAqCSAtIHRlc3Rpbmcgb2YgaW5jb21pbmcgUFBUUCBjYWxscworICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaD4KKworI2RlZmluZSBORl9DVF9QUFRQX1ZFUlNJT04gIjMuMSIKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIG1vZHVsZSBmb3IgUFBUUCIpOworTU9EVUxFX0FMSUFTKCJpcF9jb25udHJhY2tfcHB0cCIpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mX3BwdHBfbG9jayk7CisKK2ludAorKCpuZl9uYXRfcHB0cF9ob29rX291dGJvdW5kKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCisJCQkgICAgIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJCSAgICAgdW5pb24gcHB0cF9jdHJsX3VuaW9uICpwcHRwUmVxKSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19vdXRib3VuZCk7CisKK2ludAorKCpuZl9uYXRfcHB0cF9ob29rX2luYm91bmQpKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJCSAgICB1bmlvbiBwcHRwX2N0cmxfdW5pb24gKnBwdHBSZXEpIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHB0cF9ob29rX2luYm91bmQpOworCit2b2lkCisoKm5mX25hdF9wcHRwX2hvb2tfZXhwX2dyZSkoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdF9vcmlnLAorCQkJICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHBlY3RfcmVwbHkpCisJCQkgICAgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9wcHRwX2hvb2tfZXhwX2dyZSk7CisKK3ZvaWQKKygqbmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbikoc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CisKKyNpZiAwCisvKiBQcHRwQ29udHJvbE1lc3NhZ2VUeXBlIG5hbWVzICovCitjb25zdCBjaGFyICpwcHRwX21zZ19uYW1lW10gPSB7CisJIlVOS05PV05fTUVTU0FHRSIsCisJIlNUQVJUX1NFU1NJT05fUkVRVUVTVCIsCisJIlNUQVJUX1NFU1NJT05fUkVQTFkiLAorCSJTVE9QX1NFU1NJT05fUkVRVUVTVCIsCisJIlNUT1BfU0VTU0lPTl9SRVBMWSIsCisJIkVDSE9fUkVRVUVTVCIsCisJIkVDSE9fUkVQTFkiLAorCSJPVVRfQ0FMTF9SRVFVRVNUIiwKKwkiT1VUX0NBTExfUkVQTFkiLAorCSJJTl9DQUxMX1JFUVVFU1QiLAorCSJJTl9DQUxMX1JFUExZIiwKKwkiSU5fQ0FMTF9DT05ORUNUIiwKKwkiQ0FMTF9DTEVBUl9SRVFVRVNUIiwKKwkiQ0FMTF9ESVNDT05ORUNUX05PVElGWSIsCisJIldBTl9FUlJPUl9OT1RJRlkiLAorCSJTRVRfTElOS19JTkZPIgorfTsKK0VYUE9SVF9TWU1CT0wocHB0cF9tc2dfbmFtZSk7CisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhLRVJOX0RFQlVHICIlczolczogIiBmb3JtYXQsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgU0VDUyAqSFoKKyNkZWZpbmUgTUlOUyAqIDYwIFNFQ1MKKyNkZWZpbmUgSE9VUlMgKiA2MCBNSU5TCisKKyNkZWZpbmUgUFBUUF9HUkVfVElNRU9VVCAJCSgxMCBNSU5TKQorI2RlZmluZSBQUFRQX0dSRV9TVFJFQU1fVElNRU9VVCAJKDUgSE9VUlMpCisKK3N0YXRpYyB2b2lkIHBwdHBfZXhwZWN0Zm4oc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCit7CisJdHlwZW9mKG5mX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pIG5mX25hdF9wcHRwX2V4cGVjdGZuOworCURFQlVHUCgiaW5jcmVhc2luZyB0aW1lb3V0c1xuIik7CisKKwkvKiBpbmNyZWFzZSB0aW1lb3V0IG9mIEdSRSBkYXRhIGNoYW5uZWwgY29ubnRyYWNrIGVudHJ5ICovCisJY3QtPnByb3RvLmdyZS50aW1lb3V0CSAgICAgPSBQUFRQX0dSRV9USU1FT1VUOworCWN0LT5wcm90by5ncmUuc3RyZWFtX3RpbWVvdXQgPSBQUFRQX0dSRV9TVFJFQU1fVElNRU9VVDsKKworCS8qIENhbiB5b3Ugc2VlIGhvdyBydXN0eSB0aGlzIGNvZGUgaXMsIGNvbXBhcmVkIHdpdGggdGhlIHByZS0yLjYuMTEKKwkgKiBvbmU/IFRoYXQncyB3aGF0IGhhcHBlbmVkIHRvIG15IHNoaW55IG5ld25hdCBvZiAyMDAyIDsoIC1IVyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCW5mX25hdF9wcHRwX2V4cGVjdGZuID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9wcHRwX2hvb2tfZXhwZWN0Zm4pOworCWlmIChuZl9uYXRfcHB0cF9leHBlY3RmbiAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQorCQluZl9uYXRfcHB0cF9leHBlY3RmbihjdCwgZXhwKTsKKwllbHNlIHsKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSBpbnZfdDsKKwkJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cF9vdGhlcjsKKworCQkvKiBvYnZpb3VzbHkgdGhpcyB0dXBsZSBpbnZlcnNpb24gb25seSB3b3JrcyB1bnRpbCB5b3UgZG8gTkFUICovCisJCW5mX2N0X2ludmVydF90dXBsZXByKCZpbnZfdCwgJmV4cC0+dHVwbGUpOworCQlERUJVR1AoInRyeWluZyB0byB1bmV4cGVjdCBvdGhlciBkaXI6ICIpOworCQlORl9DVF9EVU1QX1RVUExFKCZpbnZfdCk7CisKKwkJZXhwX290aGVyID0gbmZfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCgmaW52X3QpOworCQlpZiAoZXhwX290aGVyKSB7CisJCQkvKiBkZWxldGUgb3RoZXIgZXhwZWN0YXRpb24uICAqLworCQkJREVCVUdQKCJmb3VuZFxuIik7CisJCQluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBfb3RoZXIpOworCQkJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwX290aGVyKTsKKwkJfSBlbHNlIHsKKwkJCURFQlVHUCgibm90IGZvdW5kXG4iKTsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIGludCBkZXN0cm95X3NpYmxpbmdfb3JfZXhwKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJc3RydWN0IG5mX2Nvbm4gKnNpYmxpbmc7CisKKwlERUJVR1AoInRyeWluZyB0byB0aW1lb3V0IGN0IG9yIGV4cCBmb3IgdHVwbGUgIik7CisJTkZfQ1RfRFVNUF9UVVBMRSh0KTsKKworCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQodCwgTlVMTCk7CisJaWYgKGgpICB7CisJCXNpYmxpbmcgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOworCQlERUJVR1AoInNldHRpbmcgdGltZW91dCBvZiBjb25udHJhY2sgJXAgdG8gMFxuIiwgc2libGluZyk7CisJCXNpYmxpbmctPnByb3RvLmdyZS50aW1lb3V0CSAgPSAwOworCQlzaWJsaW5nLT5wcm90by5ncmUuc3RyZWFtX3RpbWVvdXQgPSAwOworCQlpZiAoZGVsX3RpbWVyKCZzaWJsaW5nLT50aW1lb3V0KSkKKwkJCXNpYmxpbmctPnRpbWVvdXQuZnVuY3Rpb24oKHVuc2lnbmVkIGxvbmcpc2libGluZyk7CisJCW5mX2N0X3B1dChzaWJsaW5nKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJZXhwID0gbmZfY29ubnRyYWNrX2V4cGVjdF9maW5kX2dldCh0KTsKKwkJaWYgKGV4cCkgeworCQkJREVCVUdQKCJ1bmV4cGVjdF9yZWxhdGVkIG9mIGV4cGVjdCAlcFxuIiwgZXhwKTsKKwkJCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cCk7CisJCQluZl9jb25udHJhY2tfZXhwZWN0X3B1dChleHApOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHRpbWVvdXQgR1JFIGRhdGEgY29ubmVjdGlvbnMgKi8KK3N0YXRpYyB2b2lkIHBwdHBfZGVzdHJveV9zaWJsaW5ncyhzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjdCk7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0OworCisJbmZfY3RfZ3JlX2tleW1hcF9kZXN0cm95KGN0KTsKKworCS8qIHRyeSBvcmlnaW5hbCAocG5zLT5wYWMpIHR1cGxlICovCisJbWVtY3B5KCZ0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLCBzaXplb2YodCkpOworCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CisJdC5zcmMudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQ7CisJdC5kc3QudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQ7CisJaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKCZ0KSkKKwkJREVCVUdQKCJmYWlsZWQgdG8gdGltZW91dCBvcmlnaW5hbCBwbnMtPnBhYyBjdC9leHBcbiIpOworCisJLyogdHJ5IHJlcGx5IChwYWMtPnBucykgdHVwbGUgKi8KKwltZW1jcHkoJnQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUsIHNpemVvZih0KSk7CisJdC5kc3QucHJvdG9udW0gPSBJUFBST1RPX0dSRTsKKwl0LnNyYy51LmdyZS5rZXkgPSBoZWxwLT5oZWxwLmN0X3BwdHBfaW5mby5wYWNfY2FsbF9pZDsKKwl0LmRzdC51LmdyZS5rZXkgPSBoZWxwLT5oZWxwLmN0X3BwdHBfaW5mby5wbnNfY2FsbF9pZDsKKwlpZiAoIWRlc3Ryb3lfc2libGluZ19vcl9leHAoJnQpKQorCQlERUJVR1AoImZhaWxlZCB0byB0aW1lb3V0IHJlcGx5IHBhYy0+cG5zIGN0L2V4cFxuIik7Cit9CisKKy8qIGV4cGVjdCBHUkUgY29ubmVjdGlvbnMgKFBOUy0+UEFDIGFuZCBQQUMtPlBOUyBkaXJlY3Rpb24pICovCitzdGF0aWMgaW50IGV4cF9ncmUoc3RydWN0IG5mX2Nvbm4gKmN0LCBfX2JlMTYgY2FsbGlkLCBfX2JlMTYgcGVlcl9jYWxsaWQpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cF9vcmlnLCAqZXhwX3JlcGx5OworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CisJaW50IHJldCA9IDE7CisJdHlwZW9mKG5mX25hdF9wcHRwX2hvb2tfZXhwX2dyZSkgbmZfbmF0X3BwdHBfZXhwX2dyZTsKKworCWV4cF9vcmlnID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CisJaWYgKGV4cF9vcmlnID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXhwX3JlcGx5ID0gbmZfY29ubnRyYWNrX2V4cGVjdF9hbGxvYyhjdCk7CisJaWYgKGV4cF9yZXBseSA9PSBOVUxMKQorCQlnb3RvIG91dF9wdXRfb3JpZzsKKworCS8qIG9yaWdpbmFsIGRpcmVjdGlvbiwgUE5TLT5QQUMgKi8KKwlkaXIgPSBJUF9DVF9ESVJfT1JJR0lOQUw7CisJbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KGV4cF9vcmlnLCBjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLmwzbnVtLAorCQkJCSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MywKKwkJCQkgJmN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5kc3QudTMsCisJCQkJIElQUFJPVE9fR1JFLCAmcGVlcl9jYWxsaWQsICZjYWxsaWQpOworCWV4cF9vcmlnLT5leHBlY3RmbiA9IHBwdHBfZXhwZWN0Zm47CisKKwkvKiByZXBseSBkaXJlY3Rpb24sIFBBQy0+UE5TICovCisJZGlyID0gSVBfQ1RfRElSX1JFUExZOworCW5mX2Nvbm50cmFja19leHBlY3RfaW5pdChleHBfcmVwbHksIGN0LT50dXBsZWhhc2hbZGlyXS50dXBsZS5zcmMubDNudW0sCisJCQkJICZjdC0+dHVwbGVoYXNoW2Rpcl0udHVwbGUuc3JjLnUzLAorCQkJCSAmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC51MywKKwkJCQkgSVBQUk9UT19HUkUsICZjYWxsaWQsICZwZWVyX2NhbGxpZCk7CisJZXhwX3JlcGx5LT5leHBlY3RmbiA9IHBwdHBfZXhwZWN0Zm47CisKKwluZl9uYXRfcHB0cF9leHBfZ3JlID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9wcHRwX2hvb2tfZXhwX2dyZSk7CisJaWYgKG5mX25hdF9wcHRwX2V4cF9ncmUgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykKKwkJbmZfbmF0X3BwdHBfZXhwX2dyZShleHBfb3JpZywgZXhwX3JlcGx5KTsKKwlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cF9vcmlnKSAhPSAwKQorCQlnb3RvIG91dF9wdXRfYm90aDsKKwlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cF9yZXBseSkgIT0gMCkKKwkJZ290byBvdXRfdW5leHBlY3Rfb3JpZzsKKworCS8qIEFkZCBHUkUga2V5bWFwIGVudHJpZXMgKi8KKwlpZiAobmZfY3RfZ3JlX2tleW1hcF9hZGQoY3QsIElQX0NUX0RJUl9PUklHSU5BTCwgJmV4cF9vcmlnLT50dXBsZSkgIT0gMCkKKwkJZ290byBvdXRfdW5leHBlY3RfYm90aDsKKwlpZiAobmZfY3RfZ3JlX2tleW1hcF9hZGQoY3QsIElQX0NUX0RJUl9SRVBMWSwgJmV4cF9yZXBseS0+dHVwbGUpICE9IDApIHsKKwkJbmZfY3RfZ3JlX2tleW1hcF9kZXN0cm95KGN0KTsKKwkJZ290byBvdXRfdW5leHBlY3RfYm90aDsKKwl9CisJcmV0ID0gMDsKKworb3V0X3B1dF9ib3RoOgorCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cF9yZXBseSk7CitvdXRfcHV0X29yaWc6CisJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwX29yaWcpOworb3V0OgorCXJldHVybiByZXQ7CisKK291dF91bmV4cGVjdF9ib3RoOgorCW5mX2Nvbm50cmFja191bmV4cGVjdF9yZWxhdGVkKGV4cF9yZXBseSk7CitvdXRfdW5leHBlY3Rfb3JpZzoKKwluZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZChleHBfb3JpZyk7CisJZ290byBvdXRfcHV0X2JvdGg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitwcHRwX2luYm91bmRfcGt0KHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJIHN0cnVjdCBQcHRwQ29udHJvbEhlYWRlciAqY3RsaCwKKwkJIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSwKKwkJIHVuc2lnbmVkIGludCByZXFsZW4sCisJCSBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgbmZfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9wcHRwX2luZm87CisJdV9pbnQxNl90IG1zZzsKKwlfX2JlMTYgY2lkID0gMCwgcGNpZCA9IDA7CisJdHlwZW9mKG5mX25hdF9wcHRwX2hvb2tfaW5ib3VuZCkgbmZfbmF0X3BwdHBfaW5ib3VuZDsKKworCW1zZyA9IG50b2hzKGN0bGgtPm1lc3NhZ2VUeXBlKTsKKwlERUJVR1AoImluYm91bmQgY29udHJvbCBtZXNzYWdlICVzXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCisJc3dpdGNoIChtc2cpIHsKKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVBMWToKKwkJLyogc2VydmVyIGNvbmZpcm1zIG5ldyBjb250cm9sIHNlc3Npb24gKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSA8IFBQVFBfU0VTU0lPTl9SRVFVRVNURUQpCisJCQlnb3RvIGludmFsaWQ7CisJCWlmIChwcHRwUmVxLT5zcmVwLnJlc3VsdENvZGUgPT0gUFBUUF9TVEFSVF9PSykKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQ7CisJCWVsc2UKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9FUlJPUjsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUExZOgorCQkvKiBzZXJ2ZXIgY29uZmlybXMgZW5kIG9mIGNvbnRyb2wgc2Vzc2lvbiAqLworCQlpZiAoaW5mby0+c3N0YXRlID4gUFBUUF9TRVNTSU9OX1NUT1BSRVEpCisJCQlnb3RvIGludmFsaWQ7CisJCWlmIChwcHRwUmVxLT5zdHJlcC5yZXN1bHRDb2RlID09IFBQVFBfU1RPUF9PSykKKwkJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9OT05FOworCQllbHNlCisJCQlpbmZvLT5zc3RhdGUgPSBQUFRQX1NFU1NJT05fRVJST1I7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX09VVF9DQUxMX1JFUExZOgorCQkvKiBzZXJ2ZXIgYWNjZXB0ZWQgY2FsbCwgd2Ugbm93IGV4cGVjdCBHUkUgZnJhbWVzICovCisJCWlmIChpbmZvLT5zc3RhdGUgIT0gUFBUUF9TRVNTSU9OX0NPTkZJUk1FRCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJaWYgKGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfT1VUX1JFUSAmJgorCQkgICAgaW5mby0+Y3N0YXRlICE9IFBQVFBfQ0FMTF9PVVRfQ09ORikKKwkJCWdvdG8gaW52YWxpZDsKKworCQljaWQgPSBwcHRwUmVxLT5vY2Fjay5jYWxsSUQ7CisJCXBjaWQgPSBwcHRwUmVxLT5vY2Fjay5wZWVyc0NhbGxJRDsKKwkJaWYgKGluZm8tPnBuc19jYWxsX2lkICE9IHBjaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCURFQlVHUCgiJXMsIENJRD0lWCwgUENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLAorCQkJbnRvaHMoY2lkKSwgbnRvaHMocGNpZCkpOworCisJCWlmIChwcHRwUmVxLT5vY2Fjay5yZXN1bHRDb2RlID09IFBQVFBfT1VUQ0FMTF9DT05ORUNUKSB7CisJCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfT1VUX0NPTkY7CisJCQlpbmZvLT5wYWNfY2FsbF9pZCA9IGNpZDsKKwkJCWV4cF9ncmUoY3QsIGNpZCwgcGNpZCk7CisJCX0gZWxzZQorCQkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX05PTkU7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX0lOX0NBTExfUkVRVUVTVDoKKwkJLyogc2VydmVyIHRlbGxzIHVzIGFib3V0IGluY29taW5nIGNhbGwgcmVxdWVzdCAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQpCisJCQlnb3RvIGludmFsaWQ7CisKKwkJY2lkID0gcHB0cFJlcS0+aWNyZXEuY2FsbElEOworCQlERUJVR1AoIiVzLCBDSUQ9JVhcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSwgbnRvaHMoY2lkKSk7CisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9JTl9SRVE7CisJCWluZm8tPnBhY19jYWxsX2lkID0gY2lkOworCQlicmVhazsKKworCWNhc2UgUFBUUF9JTl9DQUxMX0NPTk5FQ1Q6CisJCS8qIHNlcnZlciB0ZWxscyB1cyBhYm91dCBpbmNvbWluZyBjYWxsIGVzdGFibGlzaGVkICovCisJCWlmIChpbmZvLT5zc3RhdGUgIT0gUFBUUF9TRVNTSU9OX0NPTkZJUk1FRCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJaWYgKGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fUkVQICYmCisJCSAgICBpbmZvLT5jc3RhdGUgIT0gUFBUUF9DQUxMX0lOX0NPTkYpCisJCQlnb3RvIGludmFsaWQ7CisKKwkJcGNpZCA9IHBwdHBSZXEtPmljY29uLnBlZXJzQ2FsbElEOworCQljaWQgPSBpbmZvLT5wYWNfY2FsbF9pZDsKKworCQlpZiAoaW5mby0+cG5zX2NhbGxfaWQgIT0gcGNpZCkKKwkJCWdvdG8gaW52YWxpZDsKKworCQlERUJVR1AoIiVzLCBQQ0lEPSVYXG4iLCBwcHRwX21zZ19uYW1lW21zZ10sIG50b2hzKHBjaWQpKTsKKwkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX0lOX0NPTkY7CisKKwkJLyogd2UgZXhwZWN0IGEgR1JFIGNvbm5lY3Rpb24gZnJvbSBQQUMgdG8gUE5TICovCisJCWV4cF9ncmUoY3QsIGNpZCwgcGNpZCk7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX0NBTExfRElTQ09OTkVDVF9OT1RJRlk6CisJCS8qIHNlcnZlciBjb25maXJtcyBkaXNjb25uZWN0ICovCisJCWNpZCA9IHBwdHBSZXEtPmRpc2MuY2FsbElEOworCQlERUJVR1AoIiVzLCBDSUQ9JVhcbiIsIHBwdHBfbXNnX25hbWVbbXNnXSwgbnRvaHMoY2lkKSk7CisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9OT05FOworCisJCS8qIHVudHJhY2sgdGhpcyBjYWxsIGlkLCB1bmV4cGVjdCBHUkUgcGFja2V0cyAqLworCQlwcHRwX2Rlc3Ryb3lfc2libGluZ3MoY3QpOworCQlicmVhazsKKworCWNhc2UgUFBUUF9XQU5fRVJST1JfTk9USUZZOgorCWNhc2UgUFBUUF9FQ0hPX1JFUVVFU1Q6CisJY2FzZSBQUFRQX0VDSE9fUkVQTFk6CisJCS8qIEkgZG9uJ3QgaGF2ZSB0byBleHBsYWluIHRoZXNlIDspICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBpbnZhbGlkOworCX0KKworCW5mX25hdF9wcHRwX2luYm91bmQgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3BwdHBfaG9va19pbmJvdW5kKTsKKwlpZiAobmZfbmF0X3BwdHBfaW5ib3VuZCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQorCQlyZXR1cm4gbmZfbmF0X3BwdHBfaW5ib3VuZChwc2tiLCBjdCwgY3RpbmZvLCBjdGxoLCBwcHRwUmVxKTsKKwlyZXR1cm4gTkZfQUNDRVBUOworCitpbnZhbGlkOgorCURFQlVHUCgiaW52YWxpZCAlczogdHlwZT0lZCBjaWQ9JXUgcGNpZD0ldSAiCisJICAgICAgICJjc3RhdGU9JWQgc3N0YXRlPSVkIHBuc19jaWQ9JXUgcGFjX2NpZD0ldVxuIiwKKwkgICAgICAgbXNnIDw9IFBQVFBfTVNHX01BWCA/IHBwdHBfbXNnX25hbWVbbXNnXSA6IHBwdHBfbXNnX25hbWVbMF0sCisJICAgICAgIG1zZywgbnRvaHMoY2lkKSwgbnRvaHMocGNpZCksICBpbmZvLT5jc3RhdGUsIGluZm8tPnNzdGF0ZSwKKwkgICAgICAgbnRvaHMoaW5mby0+cG5zX2NhbGxfaWQpLCBudG9ocyhpbmZvLT5wYWNfY2FsbF9pZCkpOworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitwcHRwX291dGJvdW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCSAgc3RydWN0IFBwdHBDb250cm9sSGVhZGVyICpjdGxoLAorCQkgIHVuaW9uIHBwdHBfY3RybF91bmlvbiAqcHB0cFJlcSwKKwkJICB1bnNpZ25lZCBpbnQgcmVxbGVuLAorCQkgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlzdHJ1Y3QgbmZfY3RfcHB0cF9tYXN0ZXIgKmluZm8gPSAmbmZjdF9oZWxwKGN0KS0+aGVscC5jdF9wcHRwX2luZm87CisJdV9pbnQxNl90IG1zZzsKKwlfX2JlMTYgY2lkID0gMCwgcGNpZCA9IDA7CisJdHlwZW9mKG5mX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpIG5mX25hdF9wcHRwX291dGJvdW5kOworCisJbXNnID0gbnRvaHMoY3RsaC0+bWVzc2FnZVR5cGUpOworCURFQlVHUCgib3V0Ym91bmQgY29udHJvbCBtZXNzYWdlICVzXG4iLCBwcHRwX21zZ19uYW1lW21zZ10pOworCisJc3dpdGNoIChtc2cpIHsKKwljYXNlIFBQVFBfU1RBUlRfU0VTU0lPTl9SRVFVRVNUOgorCQkvKiBjbGllbnQgcmVxdWVzdHMgZm9yIG5ldyBjb250cm9sIHNlc3Npb24gKi8KKwkJaWYgKGluZm8tPnNzdGF0ZSAhPSBQUFRQX1NFU1NJT05fTk9ORSkKKwkJCWdvdG8gaW52YWxpZDsKKwkJaW5mby0+c3N0YXRlID0gUFBUUF9TRVNTSU9OX1JFUVVFU1RFRDsKKwkJYnJlYWs7CisKKwljYXNlIFBQVFBfU1RPUF9TRVNTSU9OX1JFUVVFU1Q6CisJCS8qIGNsaWVudCByZXF1ZXN0cyBlbmQgb2YgY29udHJvbCBzZXNzaW9uICovCisJCWluZm8tPnNzdGF0ZSA9IFBQVFBfU0VTU0lPTl9TVE9QUkVROworCQlicmVhazsKKworCWNhc2UgUFBUUF9PVVRfQ0FMTF9SRVFVRVNUOgorCQkvKiBjbGllbnQgaW5pdGlhdGluZyBjb25uZWN0aW9uIHRvIHNlcnZlciAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQpCisJCQlnb3RvIGludmFsaWQ7CisJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9PVVRfUkVROworCQkvKiB0cmFjayBQTlMgY2FsbCBpZCAqLworCQljaWQgPSBwcHRwUmVxLT5vY3JlcS5jYWxsSUQ7CisJCURFQlVHUCgiJXMsIENJRD0lWFxuIiwgcHB0cF9tc2dfbmFtZVttc2ddLCBudG9ocyhjaWQpKTsKKwkJaW5mby0+cG5zX2NhbGxfaWQgPSBjaWQ7CisJCWJyZWFrOworCisJY2FzZSBQUFRQX0lOX0NBTExfUkVQTFk6CisJCS8qIGNsaWVudCBhbnN3ZXJzIGluY29taW5nIGNhbGwgKi8KKwkJaWYgKGluZm8tPmNzdGF0ZSAhPSBQUFRQX0NBTExfSU5fUkVRICYmCisJCSAgICBpbmZvLT5jc3RhdGUgIT0gUFBUUF9DQUxMX0lOX1JFUCkKKwkJCWdvdG8gaW52YWxpZDsKKworCQljaWQgPSBwcHRwUmVxLT5pY2Fjay5jYWxsSUQ7CisJCXBjaWQgPSBwcHRwUmVxLT5pY2Fjay5wZWVyc0NhbGxJRDsKKwkJaWYgKGluZm8tPnBhY19jYWxsX2lkICE9IHBjaWQpCisJCQlnb3RvIGludmFsaWQ7CisJCURFQlVHUCgiJXMsIENJRD0lWCBQQ0lEPSVYXG4iLCBwcHRwX21zZ19uYW1lW21zZ10sCisJCSAgICAgICBudG9ocyhjaWQpLCBudG9ocyhwY2lkKSk7CisKKwkJaWYgKHBwdHBSZXEtPmljYWNrLnJlc3VsdENvZGUgPT0gUFBUUF9JTkNBTExfQUNDRVBUKSB7CisJCQkvKiBwYXJ0IHR3byBvZiB0aGUgdGhyZWUtd2F5IGhhbmRzaGFrZSAqLworCQkJaW5mby0+Y3N0YXRlID0gUFBUUF9DQUxMX0lOX1JFUDsKKwkJCWluZm8tPnBuc19jYWxsX2lkID0gY2lkOworCQl9IGVsc2UKKwkJCWluZm8tPmNzdGF0ZSA9IFBQVFBfQ0FMTF9OT05FOworCQlicmVhazsKKworCWNhc2UgUFBUUF9DQUxMX0NMRUFSX1JFUVVFU1Q6CisJCS8qIGNsaWVudCByZXF1ZXN0cyBoYW5ndXAgb2YgY2FsbCAqLworCQlpZiAoaW5mby0+c3N0YXRlICE9IFBQVFBfU0VTU0lPTl9DT05GSVJNRUQpCisJCQlnb3RvIGludmFsaWQ7CisJCS8qIEZVVFVSRTogaXRlcmF0ZSBvdmVyIGFsbCBjYWxscyBhbmQgY2hlY2sgaWYKKwkJICogY2FsbCBJRCBpcyB2YWxpZC4gIFdlIGRvbid0IGRvIHRoaXMgd2l0aG91dCBuZXduYXQsCisJCSAqIGJlY2F1c2Ugd2Ugb25seSBrbm93IGFib3V0IGxhc3QgY2FsbCAqLworCQlpbmZvLT5jc3RhdGUgPSBQUFRQX0NBTExfQ0xFQVJfUkVROworCQlicmVhazsKKworCWNhc2UgUFBUUF9TRVRfTElOS19JTkZPOgorCWNhc2UgUFBUUF9FQ0hPX1JFUVVFU1Q6CisJY2FzZSBQUFRQX0VDSE9fUkVQTFk6CisJCS8qIEkgZG9uJ3QgaGF2ZSB0byBleHBsYWluIHRoZXNlIDspICovCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBpbnZhbGlkOworCX0KKworCW5mX25hdF9wcHRwX291dGJvdW5kID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9wcHRwX2hvb2tfb3V0Ym91bmQpOworCWlmIChuZl9uYXRfcHB0cF9vdXRib3VuZCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKQorCQlyZXR1cm4gbmZfbmF0X3BwdHBfb3V0Ym91bmQocHNrYiwgY3QsIGN0aW5mbywgY3RsaCwgcHB0cFJlcSk7CisJcmV0dXJuIE5GX0FDQ0VQVDsKKworaW52YWxpZDoKKwlERUJVR1AoImludmFsaWQgJXM6IHR5cGU9JWQgY2lkPSV1IHBjaWQ9JXUgIgorCSAgICAgICAiY3N0YXRlPSVkIHNzdGF0ZT0lZCBwbnNfY2lkPSV1IHBhY19jaWQ9JXVcbiIsCisJICAgICAgIG1zZyA8PSBQUFRQX01TR19NQVggPyBwcHRwX21zZ19uYW1lW21zZ10gOiBwcHRwX21zZ19uYW1lWzBdLAorCSAgICAgICBtc2csIG50b2hzKGNpZCksIG50b2hzKHBjaWQpLCAgaW5mby0+Y3N0YXRlLCBpbmZvLT5zc3RhdGUsCisJICAgICAgIG50b2hzKGluZm8tPnBuc19jYWxsX2lkKSwgbnRvaHMoaW5mby0+cGFjX2NhbGxfaWQpKTsKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBwdHBfbXNnX3NpemVbXSA9IHsKKwlbUFBUUF9TVEFSVF9TRVNTSU9OX1JFUVVFU1RdICA9IHNpemVvZihzdHJ1Y3QgUHB0cFN0YXJ0U2Vzc2lvblJlcXVlc3QpLAorCVtQUFRQX1NUQVJUX1NFU1NJT05fUkVQTFldICAgID0gc2l6ZW9mKHN0cnVjdCBQcHRwU3RhcnRTZXNzaW9uUmVwbHkpLAorCVtQUFRQX1NUT1BfU0VTU0lPTl9SRVFVRVNUXSAgID0gc2l6ZW9mKHN0cnVjdCBQcHRwU3RvcFNlc3Npb25SZXF1ZXN0KSwKKwlbUFBUUF9TVE9QX1NFU1NJT05fUkVQTFldICAgICA9IHNpemVvZihzdHJ1Y3QgUHB0cFN0b3BTZXNzaW9uUmVwbHkpLAorCVtQUFRQX09VVF9DQUxMX1JFUVVFU1RdICAgICAgID0gc2l6ZW9mKHN0cnVjdCBQcHRwT3V0Q2FsbFJlcXVlc3QpLAorCVtQUFRQX09VVF9DQUxMX1JFUExZXQkgICAgICA9IHNpemVvZihzdHJ1Y3QgUHB0cE91dENhbGxSZXBseSksCisJW1BQVFBfSU5fQ0FMTF9SRVFVRVNUXQkgICAgICA9IHNpemVvZihzdHJ1Y3QgUHB0cEluQ2FsbFJlcXVlc3QpLAorCVtQUFRQX0lOX0NBTExfUkVQTFldCSAgICAgID0gc2l6ZW9mKHN0cnVjdCBQcHRwSW5DYWxsUmVwbHkpLAorCVtQUFRQX0lOX0NBTExfQ09OTkVDVF0JICAgICAgPSBzaXplb2Yoc3RydWN0IFBwdHBJbkNhbGxDb25uZWN0ZWQpLAorCVtQUFRQX0NBTExfQ0xFQVJfUkVRVUVTVF0gICAgID0gc2l6ZW9mKHN0cnVjdCBQcHRwQ2xlYXJDYWxsUmVxdWVzdCksCisJW1BQVFBfQ0FMTF9ESVNDT05ORUNUX05PVElGWV0gPSBzaXplb2Yoc3RydWN0IFBwdHBDYWxsRGlzY29ubmVjdE5vdGlmeSksCisJW1BQVFBfV0FOX0VSUk9SX05PVElGWV0JICAgICAgPSBzaXplb2Yoc3RydWN0IFBwdHBXYW5FcnJvck5vdGlmeSksCisJW1BQVFBfU0VUX0xJTktfSU5GT10JICAgICAgPSBzaXplb2Yoc3RydWN0IFBwdHBTZXRMaW5rSW5mbyksCit9OworCisvKiB0cmFjayBjYWxsZXIgaWQgaW5zaWRlIGNvbnRyb2wgY29ubmVjdGlvbiwgY2FsbCBleHBlY3RfcmVsYXRlZCAqLworc3RhdGljIGludAorY29ubnRyYWNrX3BwdHBfaGVscChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsIHVuc2lnbmVkIGludCBwcm90b2ZmLAorCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKKworeworCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CisJc3RydWN0IG5mX2N0X3BwdHBfbWFzdGVyICppbmZvID0gJm5mY3RfaGVscChjdCktPmhlbHAuY3RfcHB0cF9pbmZvOworCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0Y3BoOworCXN0cnVjdCBwcHRwX3BrdF9oZHIgX3BwdHBoLCAqcHB0cGg7CisJc3RydWN0IFBwdHBDb250cm9sSGVhZGVyIF9jdGxoLCAqY3RsaDsKKwl1bmlvbiBwcHRwX2N0cmxfdW5pb24gX3BwdHBSZXEsICpwcHRwUmVxOworCXVuc2lnbmVkIGludCB0Y3BsZW4gPSAoKnBza2IpLT5sZW4gLSBwcm90b2ZmOworCXVuc2lnbmVkIGludCBkYXRhbGVuLCByZXFsZW4sIG5leHRoZHJfb2ZmOworCWludCBvbGRzc3RhdGUsIG9sZGNzdGF0ZTsKKwlpbnQgcmV0OworCXVfaW50MTZfdCBtc2c7CisKKwkvKiBkb24ndCBkbyBhbnkgdHJhY2tpbmcgYmVmb3JlIHRjcCBoYW5kc2hha2UgY29tcGxldGUgKi8KKwlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJbmV4dGhkcl9vZmYgPSBwcm90b2ZmOworCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIG5leHRoZHJfb2ZmLCBzaXplb2YoX3RjcGgpLCAmX3RjcGgpOworCUJVR19PTighdGNwaCk7CisJbmV4dGhkcl9vZmYgKz0gdGNwaC0+ZG9mZiAqIDQ7CisgCWRhdGFsZW4gPSB0Y3BsZW4gLSB0Y3BoLT5kb2ZmICogNDsKKworCXBwdHBoID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgc2l6ZW9mKF9wcHRwaCksICZfcHB0cGgpOworCWlmICghcHB0cGgpIHsKKwkJREVCVUdQKCJubyBmdWxsIFBQVFAgaGVhZGVyLCBjYW4ndCB0cmFja1xuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCW5leHRoZHJfb2ZmICs9IHNpemVvZihfcHB0cGgpOworCWRhdGFsZW4gLT0gc2l6ZW9mKF9wcHRwaCk7CisKKwkvKiBpZiBpdCdzIG5vdCBhIGNvbnRyb2wgbWVzc2FnZSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIGl0ICovCisJaWYgKG50b2hzKHBwdHBoLT5wYWNrZXRUeXBlKSAhPSBQUFRQX1BBQ0tFVF9DT05UUk9MIHx8CisJICAgIG50b2hsKHBwdHBoLT5tYWdpY0Nvb2tpZSkgIT0gUFBUUF9NQUdJQ19DT09LSUUpIHsKKwkJREVCVUdQKCJub3QgYSBjb250cm9sIHBhY2tldFxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJY3RsaCA9IHNrYl9oZWFkZXJfcG9pbnRlcigqcHNrYiwgbmV4dGhkcl9vZmYsIHNpemVvZihfY3RsaCksICZfY3RsaCk7CisJaWYgKCFjdGxoKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCW5leHRoZHJfb2ZmICs9IHNpemVvZihfY3RsaCk7CisJZGF0YWxlbiAtPSBzaXplb2YoX2N0bGgpOworCisJcmVxbGVuID0gZGF0YWxlbjsKKwltc2cgPSBudG9ocyhjdGxoLT5tZXNzYWdlVHlwZSk7CisJaWYgKG1zZyA+IDAgJiYgbXNnIDw9IFBQVFBfTVNHX01BWCAmJiByZXFsZW4gPCBwcHRwX21zZ19zaXplW21zZ10pCisJCXJldHVybiBORl9BQ0NFUFQ7CisJaWYgKHJlcWxlbiA+IHNpemVvZigqcHB0cFJlcSkpCisJCXJlcWxlbiA9IHNpemVvZigqcHB0cFJlcSk7CisKKwlwcHRwUmVxID0gc2tiX2hlYWRlcl9wb2ludGVyKCpwc2tiLCBuZXh0aGRyX29mZiwgcmVxbGVuLCAmX3BwdHBSZXEpOworCWlmICghcHB0cFJlcSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCW9sZHNzdGF0ZSA9IGluZm8tPnNzdGF0ZTsKKwlvbGRjc3RhdGUgPSBpbmZvLT5jc3RhdGU7CisKKwlzcGluX2xvY2tfYmgoJm5mX3BwdHBfbG9jayk7CisKKwkvKiBGSVhNRTogV2UganVzdCBibGluZGx5IGFzc3VtZSB0aGF0IHRoZSBjb250cm9sIGNvbm5lY3Rpb24gaXMgYWx3YXlzCisJICogZXN0YWJsaXNoZWQgZnJvbSBQTlMtPlBBQy4gIEhvd2V2ZXIsIFJGQyBtYWtlcyBubyBndWFyYW50ZWUgKi8KKwlpZiAoZGlyID09IElQX0NUX0RJUl9PUklHSU5BTCkKKwkJLyogY2xpZW50IC0+IHNlcnZlciAoUE5TIC0+IFBBQykgKi8KKwkJcmV0ID0gcHB0cF9vdXRib3VuZF9wa3QocHNrYiwgY3RsaCwgcHB0cFJlcSwgcmVxbGVuLCBjdCwKKwkJCQkJY3RpbmZvKTsKKwllbHNlCisJCS8qIHNlcnZlciAtPiBjbGllbnQgKFBBQyAtPiBQTlMpICovCisJCXJldCA9IHBwdHBfaW5ib3VuZF9wa3QocHNrYiwgY3RsaCwgcHB0cFJlcSwgcmVxbGVuLCBjdCwKKwkJCQkgICAgICAgY3RpbmZvKTsKKwlERUJVR1AoInNzdGF0ZTogJWQtPiVkLCBjc3RhdGU6ICVkLT4lZFxuIiwKKwkJb2xkc3N0YXRlLCBpbmZvLT5zc3RhdGUsIG9sZGNzdGF0ZSwgaW5mby0+Y3N0YXRlKTsKKwlzcGluX3VubG9ja19iaCgmbmZfcHB0cF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIGNvbnRyb2wgcHJvdG9jb2wgaGVscGVyICovCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgcHB0cCBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQkJPSAicHB0cCIsCisJLm1lCQkJPSBUSElTX01PRFVMRSwKKwkubWF4X2V4cGVjdGVkCQk9IDIsCisJLnRpbWVvdXQJCT0gNSAqIDYwLAorCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAorCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUFBUUF9DT05UUk9MX1BPUlQpLAorCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKKwkubWFzay5zcmMubDNudW0JCT0gMHhmZmZmLAorCS5tYXNrLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygweGZmZmYpLAorCS5tYXNrLmRzdC5wcm90b251bQk9IDB4ZmYsCisJLmhlbHAJCQk9IGNvbm50cmFja19wcHRwX2hlbHAsCisJLmRlc3Ryb3kJCT0gcHB0cF9kZXN0cm95X3NpYmxpbmdzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmZfY29ubnRyYWNrX3BwdHBfaW5pdCh2b2lkKQoreworCXJldHVybiBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZwcHRwKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19wcHRwX2Zpbmkodm9pZCkKK3sKKwluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnBwdHApOworCW5mX2N0X2dyZV9rZXltYXBfZmx1c2goKTsKK30KKworbW9kdWxlX2luaXQobmZfY29ubnRyYWNrX3BwdHBfaW5pdCk7Cittb2R1bGVfZXhpdChuZl9jb25udHJhY2tfcHB0cF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjFiNzIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCkBAIC0wLDAgKzEsNDEwIEBACisvKiBMMy9MNCBwcm90b2NvbCBzdXBwb3J0IGZvciBuZl9jb25udHJhY2suICovCisKKy8qIChDKSAxOTk5LTIwMDEgUGF1bCBgUnVzdHknIFJ1c3NlbGwKKyAqIChDKSAyMDAyLTIwMDYgTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4KKyAqIChDKSAyMDAzLDIwMDQgVVNBR0kvV0lERSBQcm9qZWN0IDxodHRwOi8vd3d3LmxpbnV4LWlwdjYub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKworc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoqbmZfY3RfcHJvdG9zW1BGX01BWF0gX19yZWFkX21vc3RseTsKK3N0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbmZfY3RfbDNwcm90b3NbQUZfTUFYXSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDNwcm90b3MpOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIERFRklORV9NVVRFWChuZl9jdF9wcm90b19zeXNjdGxfbXV0ZXgpOworCitzdGF0aWMgaW50CituZl9jdF9yZWdpc3Rlcl9zeXNjdGwoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKipoZWFkZXIsIHN0cnVjdCBjdGxfdGFibGUgKnBhdGgsCisJCSAgICAgIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCB1bnNpZ25lZCBpbnQgKnVzZXJzKQoreworCWlmICgqaGVhZGVyID09IE5VTEwpIHsKKwkJKmhlYWRlciA9IG5mX3JlZ2lzdGVyX3N5c2N0bF90YWJsZShwYXRoLCB0YWJsZSk7CisJCWlmICgqaGVhZGVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKHVzZXJzICE9IE5VTEwpCisJCSgqdXNlcnMpKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCituZl9jdF91bnJlZ2lzdGVyX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqKmhlYWRlciwKKwkJCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCB1bnNpZ25lZCBpbnQgKnVzZXJzKQoreworCWlmICh1c2VycyAhPSBOVUxMICYmIC0tKnVzZXJzID4gMCkKKwkJcmV0dXJuOworCW5mX3VucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKCpoZWFkZXIsIHRhYmxlKTsKKwkqaGVhZGVyID0gTlVMTDsKK30KKyNlbmRpZgorCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgorX19uZl9jdF9sNHByb3RvX2ZpbmQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pCit7CisJaWYgKHVubGlrZWx5KGwzcHJvdG8gPj0gQUZfTUFYIHx8IG5mX2N0X3Byb3Rvc1tsM3Byb3RvXSA9PSBOVUxMKSkKKwkJcmV0dXJuICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOworCisJcmV0dXJuIG5mX2N0X3Byb3Rvc1tsM3Byb3RvXVtsNHByb3RvXTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbmZfY3RfbDRwcm90b19maW5kKTsKKworLyogdGhpcyBpcyBndWFyYW50ZWVkIHRvIGFsd2F5cyByZXR1cm4gYSB2YWxpZCBwcm90b2NvbCBoZWxwZXIsIHNpbmNlCisgKiBpdCBmYWxscyBiYWNrIHRvIGdlbmVyaWNfcHJvdG9jb2wgKi8KK3N0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqCituZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KHVfaW50MTZfdCBsM3Byb3RvLCB1X2ludDhfdCBsNHByb3RvKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcDsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCXAgPSBfX25mX2N0X2w0cHJvdG9fZmluZChsM3Byb3RvLCBsNHByb3RvKTsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKKwkJcCA9ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlyZXR1cm4gcDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fZmluZF9nZXQpOworCit2b2lkIG5mX2N0X2w0cHJvdG9fcHV0KHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcCkKK3sKKwltb2R1bGVfcHV0KHAtPm1lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2w0cHJvdG9fcHV0KTsKKworc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICoKK25mX2N0X2wzcHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8pCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJcCA9IF9fbmZfY3RfbDNwcm90b19maW5kKGwzcHJvdG8pOworCWlmICghdHJ5X21vZHVsZV9nZXQocC0+bWUpKQorCQlwID0gJm5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWM7CisJcHJlZW1wdF9lbmFibGUoKTsKKworCXJldHVybiBwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDNwcm90b19maW5kX2dldCk7CisKK3ZvaWQgbmZfY3RfbDNwcm90b19wdXQoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwKQoreworCW1vZHVsZV9wdXQocC0+bWUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbDNwcm90b19wdXQpOworCitpbnQKK25mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQodW5zaWduZWQgc2hvcnQgbDNwcm90bykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcDsKKworcmV0cnk6CXAgPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KGwzcHJvdG8pOworCWlmIChwID09ICZuZl9jb25udHJhY2tfbDNwcm90b19nZW5lcmljKSB7CisJCXJldCA9IHJlcXVlc3RfbW9kdWxlKCJuZl9jb25udHJhY2stJWQiLCBsM3Byb3RvKTsKKwkJaWYgKCFyZXQpCisJCQlnb3RvIHJldHJ5OworCisJCXJldHVybiAtRVBST1RPVFlQRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQpOworCit2b2lkIG5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcDsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCXAgPSBfX25mX2N0X2wzcHJvdG9fZmluZChsM3Byb3RvKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJbW9kdWxlX3B1dChwLT5tZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQpOworCitzdGF0aWMgaW50IGtpbGxfbDNwcm90byhzdHJ1Y3QgbmZfY29ubiAqaSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gKGktPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSA9PQorCQkJKChzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKilkYXRhKS0+bDNwcm90byk7Cit9CisKK3N0YXRpYyBpbnQga2lsbF9sNHByb3RvKHN0cnVjdCBuZl9jb25uICppLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKKwlsNHByb3RvID0gKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqKWRhdGE7CisJcmV0dXJuIChpLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0gPT0KKwkJCWw0cHJvdG8tPmw0cHJvdG8pICYmCisJICAgICAgIChpLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW0gPT0KKwkJCWw0cHJvdG8tPmwzcHJvdG8pOworfQorCitzdGF0aWMgaW50IG5mX2N0X2wzcHJvdG9fcmVnaXN0ZXJfc3lzY3RsKHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bykKK3sKKwlpbnQgZXJyID0gMDsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKKwltdXRleF9sb2NrKCZuZl9jdF9wcm90b19zeXNjdGxfbXV0ZXgpOworCWlmIChsM3Byb3RvLT5jdGxfdGFibGUgIT0gTlVMTCkgeworCQllcnIgPSBuZl9jdF9yZWdpc3Rlcl9zeXNjdGwoJmwzcHJvdG8tPmN0bF90YWJsZV9oZWFkZXIsCisJCQkJCSAgICBsM3Byb3RvLT5jdGxfdGFibGVfcGF0aCwKKwkJCQkJICAgIGwzcHJvdG8tPmN0bF90YWJsZSwgTlVMTCk7CisJfQorCW11dGV4X3VubG9jaygmbmZfY3RfcHJvdG9fc3lzY3RsX211dGV4KTsKKyNlbmRpZgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG5mX2N0X2wzcHJvdG9fdW5yZWdpc3Rlcl9zeXNjdGwoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpsM3Byb3RvKQoreworI2lmZGVmIENPTkZJR19TWVNDVEwKKwltdXRleF9sb2NrKCZuZl9jdF9wcm90b19zeXNjdGxfbXV0ZXgpOworCWlmIChsM3Byb3RvLT5jdGxfdGFibGVfaGVhZGVyICE9IE5VTEwpCisJCW5mX2N0X3VucmVnaXN0ZXJfc3lzY3RsKCZsM3Byb3RvLT5jdGxfdGFibGVfaGVhZGVyLAorCQkJCQlsM3Byb3RvLT5jdGxfdGFibGUsIE5VTEwpOworCW11dGV4X3VubG9jaygmbmZfY3RfcHJvdG9fc3lzY3RsX211dGV4KTsKKyNlbmRpZgorfQorCitpbnQgbmZfY29ubnRyYWNrX2wzcHJvdG9fcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90bykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcm90by0+bDNwcm90byA+PSBBRl9NQVgpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJaWYgKG5mX2N0X2wzcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSAhPSAmbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYykgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJbmZfY3RfbDNwcm90b3NbcHJvdG8tPmwzcHJvdG9dID0gcHJvdG87CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwlyZXQgPSBuZl9jdF9sM3Byb3RvX3JlZ2lzdGVyX3N5c2N0bChwcm90byk7CisJaWYgKHJldCA8IDApCisJCW5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIocHJvdG8pOworCXJldHVybiByZXQ7CisKK291dF91bmxvY2s6CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19sM3Byb3RvX3JlZ2lzdGVyKTsKKworaW50IG5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICpwcm90bykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcm90by0+bDNwcm90byA+PSBBRl9NQVgpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisJaWYgKG5mX2N0X2wzcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSAhPSBwcm90bykgeworCQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwluZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10gPSAmbmZfY29ubnRyYWNrX2wzcHJvdG9fZ2VuZXJpYzsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCW5mX2N0X2wzcHJvdG9fdW5yZWdpc3Rlcl9zeXNjdGwocHJvdG8pOworCisJLyogU29tZWJvZHkgY291bGQgYmUgc3RpbGwgbG9va2luZyBhdCB0aGUgcHJvdG8gaW4gYmguICovCisJc3luY2hyb25pemVfbmV0KCk7CisKKwkvKiBSZW1vdmUgYWxsIGNvbnRyYWNrIGVudHJpZXMgZm9yIHRoaXMgcHJvdG9jb2wgKi8KKwluZl9jdF9pdGVyYXRlX2NsZWFudXAoa2lsbF9sM3Byb3RvLCBwcm90byk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3Rlcik7CisKK3N0YXRpYyBpbnQgbmZfY3RfbDRwcm90b19yZWdpc3Rlcl9zeXNjdGwoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvKQoreworCWludCBlcnIgPSAwOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCW11dGV4X2xvY2soJm5mX2N0X3Byb3RvX3N5c2N0bF9tdXRleCk7CisJaWYgKGw0cHJvdG8tPmN0bF90YWJsZSAhPSBOVUxMKSB7CisJCWVyciA9IG5mX2N0X3JlZ2lzdGVyX3N5c2N0bChsNHByb3RvLT5jdGxfdGFibGVfaGVhZGVyLAorCQkJCQkgICAgbmZfbmV0X25ldGZpbHRlcl9zeXNjdGxfcGF0aCwKKwkJCQkJICAgIGw0cHJvdG8tPmN0bF90YWJsZSwKKwkJCQkJICAgIGw0cHJvdG8tPmN0bF90YWJsZV91c2Vycyk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJfQorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQKKwlpZiAobDRwcm90by0+Y3RsX2NvbXBhdF90YWJsZSAhPSBOVUxMKSB7CisJCWVyciA9IG5mX2N0X3JlZ2lzdGVyX3N5c2N0bCgmbDRwcm90by0+Y3RsX2NvbXBhdF90YWJsZV9oZWFkZXIsCisJCQkJCSAgICBuZl9uZXRfaXB2NF9uZXRmaWx0ZXJfc3lzY3RsX3BhdGgsCisJCQkJCSAgICBsNHByb3RvLT5jdGxfY29tcGF0X3RhYmxlLCBOVUxMKTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZ290byBvdXQ7CisJCW5mX2N0X3VucmVnaXN0ZXJfc3lzY3RsKGw0cHJvdG8tPmN0bF90YWJsZV9oZWFkZXIsCisJCQkJCWw0cHJvdG8tPmN0bF90YWJsZSwKKwkJCQkJbDRwcm90by0+Y3RsX3RhYmxlX3VzZXJzKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCAqLworb3V0OgorCW11dGV4X3VubG9jaygmbmZfY3RfcHJvdG9fc3lzY3RsX211dGV4KTsKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbmZfY3RfbDRwcm90b191bnJlZ2lzdGVyX3N5c2N0bChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG8pCit7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCW11dGV4X2xvY2soJm5mX2N0X3Byb3RvX3N5c2N0bF9tdXRleCk7CisJaWYgKGw0cHJvdG8tPmN0bF90YWJsZV9oZWFkZXIgIT0gTlVMTCAmJgorCSAgICAqbDRwcm90by0+Y3RsX3RhYmxlX2hlYWRlciAhPSBOVUxMKQorCQluZl9jdF91bnJlZ2lzdGVyX3N5c2N0bChsNHByb3RvLT5jdGxfdGFibGVfaGVhZGVyLAorCQkJCQlsNHByb3RvLT5jdGxfdGFibGUsCisJCQkJCWw0cHJvdG8tPmN0bF90YWJsZV91c2Vycyk7CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVAorCWlmIChsNHByb3RvLT5jdGxfY29tcGF0X3RhYmxlX2hlYWRlciAhPSBOVUxMKQorCQluZl9jdF91bnJlZ2lzdGVyX3N5c2N0bCgmbDRwcm90by0+Y3RsX2NvbXBhdF90YWJsZV9oZWFkZXIsCisJCQkJCWw0cHJvdG8tPmN0bF9jb21wYXRfdGFibGUsIE5VTEwpOworI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQgKi8KKwltdXRleF91bmxvY2soJm5mX2N0X3Byb3RvX3N5c2N0bF9tdXRleCk7CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworfQorCisvKiBGSVhNRTogQWxsb3cgTlVMTCBmdW5jdGlvbnMgYW5kIHN1YiBpbiBwb2ludGVycyB0byBnZW5lcmljIGZvcgorICAgdGhlbS4gLS1SUiAqLworaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChsNHByb3RvLT5sM3Byb3RvID49IFBGX01BWCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChsNHByb3RvID09ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljKQorCQlyZXR1cm4gbmZfY3RfbDRwcm90b19yZWdpc3Rlcl9zeXNjdGwobDRwcm90byk7CisKK3JldHJ5OgorCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlpZiAobmZfY3RfcHJvdG9zW2w0cHJvdG8tPmwzcHJvdG9dKSB7CisJCWlmIChuZl9jdF9wcm90b3NbbDRwcm90by0+bDNwcm90b11bbDRwcm90by0+bDRwcm90b10KKwkJCQkhPSAmbmZfY29ubnRyYWNrX2w0cHJvdG9fZ2VuZXJpYykgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJfSBlbHNlIHsKKwkJLyogbDNwcm90byBtYXkgYmUgbG9hZGVkIGxhdHRlci4gKi8KKwkJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoqcHJvdG9fYXJyYXk7CisJCWludCBpOworCisJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCisJCXByb3RvX2FycmF5ID0gKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqKikKKwkJCQlrbWFsbG9jKE1BWF9ORl9DVF9QUk9UTyAqCisJCQkJCSBzaXplb2Yoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICopLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHByb3RvX2FycmF5ID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05GX0NUX1BST1RPOyBpKyspCisJCQlwcm90b19hcnJheVtpXSA9ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOworCisJCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJaWYgKG5mX2N0X3Byb3Rvc1tsNHByb3RvLT5sM3Byb3RvXSkgeworCQkJLyogYmFkIHRpbWluZywgYnV0IG5vIHByb2JsZW0gKi8KKwkJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQkJa2ZyZWUocHJvdG9fYXJyYXkpOworCQl9IGVsc2UgeworCQkJbmZfY3RfcHJvdG9zW2w0cHJvdG8tPmwzcHJvdG9dID0gcHJvdG9fYXJyYXk7CisJCQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJfQorCisJCS8qCisJCSAqIEp1c3Qgb25jZSBiZWNhdXNlIGFycmF5IGlzIG5ldmVyIGZyZWVkIHVudGlsIHVubG9hZGluZworCQkgKiBuZl9jb25udHJhY2sua28KKwkJICovCisJCWdvdG8gcmV0cnk7CisJfQorCisJbmZfY3RfcHJvdG9zW2w0cHJvdG8tPmwzcHJvdG9dW2w0cHJvdG8tPmw0cHJvdG9dID0gbDRwcm90bzsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKworCXJldCA9IG5mX2N0X2w0cHJvdG9fcmVnaXN0ZXJfc3lzY3RsKGw0cHJvdG8pOworCWlmIChyZXQgPCAwKQorCQluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKGw0cHJvdG8pOworCXJldHVybiByZXQ7CisKK291dF91bmxvY2s6CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKTsKKworaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvKQoreworCWludCByZXQgPSAwOworCisJaWYgKGw0cHJvdG8tPmwzcHJvdG8gPj0gUEZfTUFYKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGw0cHJvdG8gPT0gJm5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMpIHsKKwkJbmZfY3RfbDRwcm90b191bnJlZ2lzdGVyX3N5c2N0bChsNHByb3RvKTsKKwkJZ290byBvdXQ7CisJfQorCisJd3JpdGVfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCWlmIChuZl9jdF9wcm90b3NbbDRwcm90by0+bDNwcm90b11bbDRwcm90by0+bDRwcm90b10KKwkgICAgIT0gbDRwcm90bykgeworCQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisJbmZfY3RfcHJvdG9zW2w0cHJvdG8tPmwzcHJvdG9dW2w0cHJvdG8tPmw0cHJvdG9dCisJCT0gJm5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWM7CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CisKKwluZl9jdF9sNHByb3RvX3VucmVnaXN0ZXJfc3lzY3RsKGw0cHJvdG8pOworCisJLyogU29tZWJvZHkgY291bGQgYmUgc3RpbGwgbG9va2luZyBhdCB0aGUgcHJvdG8gaW4gYmguICovCisJc3luY2hyb25pemVfbmV0KCk7CisKKwkvKiBSZW1vdmUgYWxsIGNvbnRyYWNrIGVudHJpZXMgZm9yIHRoaXMgcHJvdG9jb2wgKi8KKwluZl9jdF9pdGVyYXRlX2NsZWFudXAoa2lsbF9sNHByb3RvLCBsNHByb3RvKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCAyNjQwOGJiLi42OTkwMjUzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgotI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogCi11bnNpZ25lZCBpbnQgbmZfY3RfZ2VuZXJpY190aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSA2MDAqSFo7CitzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X2dlbmVyaWNfdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gNjAwKkhaOwogCiBzdGF0aWMgaW50IGdlbmVyaWNfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJdW5zaWduZWQgaW50IGRhdGFvZmYsCkBAIC03MSwxMCArNzEsNDIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfZ2VuZXJpY19wcm90b2NvbCA9CisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpnZW5lcmljX3N5c2N0bF9oZWFkZXI7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBnZW5lcmljX3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZ2VuZXJpY190aW1lb3V0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X2dlbmVyaWNfdGltZW91dCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IDAKKwl9Cit9OworI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGdlbmVyaWNfY29tcGF0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0dFTkVSSUNfVElNRU9VVCwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja19nZW5lcmljX3RpbWVvdXQiLAorCQkuZGF0YQkJPSAmbmZfY3RfZ2VuZXJpY190aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCAqLworI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMgPQogewogCS5sM3Byb3RvCQk9IFBGX1VOU1BFQywKLQkucHJvdG8JCQk9IDAsCisJLmw0cHJvdG8JCT0gMCwKIAkubmFtZQkJCT0gInVua25vd24iLAogCS5wa3RfdG9fdHVwbGUJCT0gZ2VuZXJpY19wa3RfdG9fdHVwbGUsCiAJLmludmVydF90dXBsZQkJPSBnZW5lcmljX2ludmVydF90dXBsZSwKQEAgLTgyLDQgKzExNCwxMSBAQAogCS5wcmludF9jb25udHJhY2sJPSBnZW5lcmljX3ByaW50X2Nvbm50cmFjaywKIAkucGFja2V0CQkJPSBwYWNrZXQsCiAJLm5ldwkJCT0gbmV3LAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuY3RsX3RhYmxlX2hlYWRlcgk9ICZnZW5lcmljX3N5c2N0bF9oZWFkZXIsCisJLmN0bF90YWJsZQkJPSBnZW5lcmljX3N5c2N0bF90YWJsZSwKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCisJLmN0bF9jb21wYXRfdGFibGUJPSBnZW5lcmljX2NvbXBhdF9zeXNjdGxfdGFibGUsCisjZW5kaWYKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxOTNjZQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5jCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5jIC0gVmVyc2lvbiAzLjAKKyAqCisgKiBDb25uZWN0aW9uIHRyYWNraW5nIHByb3RvY29sIGhlbHBlciBtb2R1bGUgZm9yIEdSRS4KKyAqCisgKiBHUkUgaXMgYSBnZW5lcmljIGVuY2Fwc3VsYXRpb24gcHJvdG9jb2wsIHdoaWNoIGlzIGdlbmVyYWxseSBub3QgdmVyeQorICogc3VpdGVkIGZvciBOQVQsIGFzIGl0IGhhcyBubyBwcm90b2NvbC1zcGVjaWZpYyBwYXJ0IGFzIHBvcnQgbnVtYmVycy4KKyAqCisgKiBJdCBoYXMgYW4gb3B0aW9uYWwga2V5IGZpZWxkLCB3aGljaCBtYXkgaGVscCB1cyBkaXN0aW5ndWlzaGluZyB0d28KKyAqIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlIHNhbWUgdHdvIGhvc3RzLgorICoKKyAqIEdSRSBpcyBkZWZpbmVkIGluIFJGQyAxNzAxIGFuZCBSRkMgMTcwMiwgYXMgd2VsbCBhcyBSRkMgMjc4NAorICoKKyAqIFBQVFAgaXMgYnVpbHQgb24gdG9wIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBHUkUsIGFuZCBoYXMgYSBtYW5kYXRvcnkKKyAqIGZpZWxkIGNhbGxlZCAiQ2FsbElEIiwgd2hpY2ggc2VydmVzIHVzIGZvciB0aGUgc2FtZSBwdXJwb3NlIGFzIHRoZSBrZXkKKyAqIGZpZWxkIGluIHBsYWluIEdSRS4KKyAqCisgKiBEb2N1bWVudGF0aW9uIGFib3V0IFBQVFAgY2FuIGJlIGZvdW5kIGluIFJGQyAyNjM3CisgKgorICogKEMpIDIwMDAtMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAZ251bW9ua3Mub3JnPgorICoKKyAqIERldmVsb3BtZW50IG9mIHRoaXMgY29kZSBmdW5kZWQgYnkgQXN0YXJvIEFHIChodHRwOi8vd3d3LmFzdGFyby5jb20vKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmg+CisKKyNkZWZpbmUgR1JFX1RJTUVPVVQJCSgzMCAqIEhaKQorI2RlZmluZSBHUkVfU1RSRUFNX1RJTUVPVVQJKDE4MCAqIEhaKQorCisjaWYgMAorI2RlZmluZSBERUJVR1AoZm9ybWF0LCBhcmdzLi4uKQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgX19GVU5DVElPTl9fLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKHgsIGFyZ3MuLi4pCisjZW5kaWYKKworc3RhdGljIERFRklORV9SV0xPQ0sobmZfY3RfZ3JlX2xvY2spOworc3RhdGljIExJU1RfSEVBRChncmVfa2V5bWFwX2xpc3QpOworCit2b2lkIG5mX2N0X2dyZV9rZXltYXBfZmx1c2godm9pZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuOworCisJd3JpdGVfbG9ja19iaCgmbmZfY3RfZ3JlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sICZncmVfa2V5bWFwX2xpc3QpIHsKKwkJbGlzdF9kZWwocG9zKTsKKwkJa2ZyZWUocG9zKTsKKwl9CisJd3JpdGVfdW5sb2NrX2JoKCZuZl9jdF9ncmVfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKG5mX2N0X2dyZV9rZXltYXBfZmx1c2gpOworCitzdGF0aWMgaW5saW5lIGludCBncmVfa2V5X2NtcGZuKGNvbnN0IHN0cnVjdCBuZl9jdF9ncmVfa2V5bWFwICprbSwKKwkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KQoreworCXJldHVybiBrbS0+dHVwbGUuc3JjLmwzbnVtID09IHQtPnNyYy5sM251bSAmJgorCSAgICAgICAhbWVtY21wKCZrbS0+dHVwbGUuc3JjLnUzLCAmdC0+c3JjLnUzLCBzaXplb2YodC0+c3JjLnUzKSkgJiYKKwkgICAgICAgIW1lbWNtcCgma20tPnR1cGxlLmRzdC51MywgJnQtPmRzdC51Mywgc2l6ZW9mKHQtPmRzdC51MykpICYmCisJICAgICAgIGttLT50dXBsZS5kc3QucHJvdG9udW0gPT0gdC0+ZHN0LnByb3RvbnVtICYmCisJICAgICAgIGttLT50dXBsZS5kc3QudS5hbGwgPT0gdC0+ZHN0LnUuYWxsOworfQorCisvKiBsb29rIHVwIHRoZSBzb3VyY2Uga2V5IGZvciBhIGdpdmVuIHR1cGxlICovCitzdGF0aWMgX19iZTE2IGdyZV9rZXltYXBfbG9va3VwKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpCit7CisJc3RydWN0IG5mX2N0X2dyZV9rZXltYXAgKmttOworCV9fYmUxNiBrZXkgPSAwOworCisJcmVhZF9sb2NrX2JoKCZuZl9jdF9ncmVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShrbSwgJmdyZV9rZXltYXBfbGlzdCwgbGlzdCkgeworCQlpZiAoZ3JlX2tleV9jbXBmbihrbSwgdCkpIHsKKwkJCWtleSA9IGttLT50dXBsZS5zcmMudS5ncmUua2V5OworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVhZF91bmxvY2tfYmgoJm5mX2N0X2dyZV9sb2NrKTsKKworCURFQlVHUCgibG9va3VwIHNyYyBrZXkgMHgleCBmb3IgIiwga2V5KTsKKwlORl9DVF9EVU1QX1RVUExFKHQpOworCisJcmV0dXJuIGtleTsKK30KKworLyogYWRkIGEgc2luZ2xlIGtleW1hcCBlbnRyeSwgYXNzb2NpYXRlIHdpdGggc3BlY2lmaWVkIG1hc3RlciBjdCAqLworaW50IG5mX2N0X2dyZV9rZXltYXBfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKKwkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KQoreworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOworCXN0cnVjdCBuZl9jdF9ncmVfa2V5bWFwICoqa21wLCAqa207CisKKwlCVUdfT04oc3RyY21wKGhlbHAtPmhlbHBlci0+bmFtZSwgInBwdHAiKSk7CisJa21wID0gJmhlbHAtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcFtkaXJdOworCWlmICgqa21wKSB7CisJCS8qIGNoZWNrIHdoZXRoZXIgaXQncyBhIHJldHJhbnNtaXNzaW9uICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoa20sICZncmVfa2V5bWFwX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChncmVfa2V5X2NtcGZuKGttLCB0KSAmJiBrbSA9PSAqa21wKQorCQkJCXJldHVybiAwOworCQl9CisJCURFQlVHUCgidHJ5aW5nIHRvIG92ZXJyaWRlIGtleW1hcF8lcyBmb3IgY3QgJXBcbiIsCisJCQlkaXIgPT0gSVBfQ1RfRElSX1JFUExZID8gInJlcGx5IiA6ICJvcmlnIiwgY3QpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlrbSA9IGttYWxsb2Moc2l6ZW9mKCprbSksIEdGUF9BVE9NSUMpOworCWlmICgha20pCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweSgma20tPnR1cGxlLCB0LCBzaXplb2YoKnQpKTsKKwkqa21wID0ga207CisKKwlERUJVR1AoImFkZGluZyBuZXcgZW50cnkgJXA6ICIsIGttKTsKKwlORl9DVF9EVU1QX1RVUExFKCZrbS0+dHVwbGUpOworCisJd3JpdGVfbG9ja19iaCgmbmZfY3RfZ3JlX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmttLT5saXN0LCAmZ3JlX2tleW1hcF9saXN0KTsKKwl3cml0ZV91bmxvY2tfYmgoJm5mX2N0X2dyZV9sb2NrKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZ3JlX2tleW1hcF9hZGQpOworCisvKiBkZXN0cm95IHRoZSBrZXltYXAgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggc3BlY2lmaWVkIG1hc3RlciBjdCAqLwordm9pZCBuZl9jdF9ncmVfa2V5bWFwX2Rlc3Ryb3koc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOworCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXI7CisKKwlERUJVR1AoImVudGVyaW5nIGZvciBjdCAlcFxuIiwgY3QpOworCUJVR19PTihzdHJjbXAoaGVscC0+aGVscGVyLT5uYW1lLCAicHB0cCIpKTsKKworCXdyaXRlX2xvY2tfYmgoJm5mX2N0X2dyZV9sb2NrKTsKKwlmb3IgKGRpciA9IElQX0NUX0RJUl9PUklHSU5BTDsgZGlyIDwgSVBfQ1RfRElSX01BWDsgZGlyKyspIHsKKwkJaWYgKGhlbHAtPmhlbHAuY3RfcHB0cF9pbmZvLmtleW1hcFtkaXJdKSB7CisJCQlERUJVR1AoInJlbW92aW5nICVwIGZyb20gbGlzdFxuIiwKKwkJCQloZWxwLT5oZWxwLmN0X3BwdHBfaW5mby5rZXltYXBbZGlyXSk7CisJCQlsaXN0X2RlbCgmaGVscC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwW2Rpcl0tPmxpc3QpOworCQkJa2ZyZWUoaGVscC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwW2Rpcl0pOworCQkJaGVscC0+aGVscC5jdF9wcHRwX2luZm8ua2V5bWFwW2Rpcl0gPSBOVUxMOworCQl9CisJfQorCXdyaXRlX3VubG9ja19iaCgmbmZfY3RfZ3JlX2xvY2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZ3JlX2tleW1hcF9kZXN0cm95KTsKKworLyogUFVCTElDIENPTk5UUkFDSyBQUk9UTyBIRUxQRVIgRlVOQ1RJT05TICovCisKKy8qIGludmVydCBncmUgcGFydCBvZiB0dXBsZSAqLworc3RhdGljIGludCBncmVfaW52ZXJ0X3R1cGxlKHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKm9yaWcpCit7CisJdHVwbGUtPmRzdC51LmdyZS5rZXkgPSBvcmlnLT5zcmMudS5ncmUua2V5OworCXR1cGxlLT5zcmMudS5ncmUua2V5ID0gb3JpZy0+ZHN0LnUuZ3JlLmtleTsKKwlyZXR1cm4gMTsKK30KKworLyogZ3JlIGhkciBpbmZvIHRvIHR1cGxlICovCitzdGF0aWMgaW50IGdyZV9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJc3RydWN0IGdyZV9oZHJfcHB0cCBfcGdyZWhkciwgKnBncmVoZHI7CisJX19iZTE2IHNyY2tleTsKKwlzdHJ1Y3QgZ3JlX2hkciBfZ3JlaGRyLCAqZ3JlaGRyOworCisJLyogZmlyc3Qgb25seSBkZWxpbmVhcml6ZSBvbGQgUkZDMTcwMSBHUkUgaGVhZGVyICovCisJZ3JlaGRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgZGF0YW9mZiwgc2l6ZW9mKF9ncmVoZHIpLCAmX2dyZWhkcik7CisJaWYgKCFncmVoZHIgfHwgZ3JlaGRyLT52ZXJzaW9uICE9IEdSRV9WRVJTSU9OX1BQVFApIHsKKwkJLyogdHJ5IHRvIGJlaGF2ZSBsaWtlICJuZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYyIgKi8KKwkJdHVwbGUtPnNyYy51LmFsbCA9IDA7CisJCXR1cGxlLT5kc3QudS5hbGwgPSAwOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBQUFRQIGhlYWRlciBpcyB2YXJpYWJsZSBsZW5ndGgsIG9ubHkgbmVlZCB1cCB0byB0aGUgY2FsbF9pZCBmaWVsZCAqLworCXBncmVoZHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBkYXRhb2ZmLCA4LCAmX3BncmVoZHIpOworCWlmICghcGdyZWhkcikKKwkJcmV0dXJuIDE7CisKKwlpZiAobnRvaHMoZ3JlaGRyLT5wcm90b2NvbCkgIT0gR1JFX1BST1RPQ09MX1BQVFApIHsKKwkJREVCVUdQKCJHUkVfVkVSU0lPTl9QUFRQIGJ1dCB1bmtub3duIHByb3RvXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdHVwbGUtPmRzdC51LmdyZS5rZXkgPSBwZ3JlaGRyLT5jYWxsX2lkOworCXNyY2tleSA9IGdyZV9rZXltYXBfbG9va3VwKHR1cGxlKTsKKwl0dXBsZS0+c3JjLnUuZ3JlLmtleSA9IHNyY2tleTsKKworCXJldHVybiAxOworfQorCisvKiBwcmludCBncmUgcGFydCBvZiB0dXBsZSAqLworc3RhdGljIGludCBncmVfcHJpbnRfdHVwbGUoc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCit7CisJcmV0dXJuIHNlcV9wcmludGYocywgInNyY2tleT0weCV4IGRzdGtleT0weCV4ICIsCisJCQkgIG50b2hzKHR1cGxlLT5zcmMudS5ncmUua2V5KSwKKwkJCSAgbnRvaHModHVwbGUtPmRzdC51LmdyZS5rZXkpKTsKK30KKworLyogcHJpbnQgcHJpdmF0ZSBkYXRhIGZvciBjb25udHJhY2sgKi8KK3N0YXRpYyBpbnQgZ3JlX3ByaW50X2Nvbm50cmFjayhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXJldHVybiBzZXFfcHJpbnRmKHMsICJ0aW1lb3V0PSV1LCBzdHJlYW1fdGltZW91dD0ldSAiLAorCQkJICAoY3QtPnByb3RvLmdyZS50aW1lb3V0IC8gSFopLAorCQkJICAoY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCAvIEhaKSk7Cit9CisKKy8qIFJldHVybnMgdmVyZGljdCBmb3IgcGFja2V0LCBhbmQgbWF5IG1vZGlmeSBjb25udHJhY2sgKi8KK3N0YXRpYyBpbnQgZ3JlX3BhY2tldChzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJICAgICAgaW50IHBmLAorCQkgICAgICB1bnNpZ25lZCBpbnQgaG9va251bSkKK3sKKwkvKiBJZiB3ZSd2ZSBzZWVuIHRyYWZmaWMgYm90aCB3YXlzLCB0aGlzIGlzIGEgR1JFIGNvbm5lY3Rpb24uCisJICogRXh0ZW5kIHRpbWVvdXQuICovCisJaWYgKGN0LT5zdGF0dXMgJiBJUFNfU0VFTl9SRVBMWSkgeworCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLAorCQkJCSAgIGN0LT5wcm90by5ncmUuc3RyZWFtX3RpbWVvdXQpOworCQkvKiBBbHNvLCBtb3JlIGxpa2VseSB0byBiZSBpbXBvcnRhbnQsIGFuZCBub3QgYSBwcm9iZS4gKi8KKwkJc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfU1RBVFVTLCBza2IpOworCX0gZWxzZQorCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLAorCQkJCSAgIGN0LT5wcm90by5ncmUudGltZW91dCk7CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCisvKiBDYWxsZWQgd2hlbiBhIG5ldyBjb25uZWN0aW9uIGZvciB0aGlzIHByb3RvY29sIGZvdW5kLiAqLworc3RhdGljIGludCBncmVfbmV3KHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgdW5zaWduZWQgaW50IGRhdGFvZmYpCit7CisJREVCVUdQKCI6ICIpOworCU5GX0NUX0RVTVBfVFVQTEUoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisKKwkvKiBpbml0aWFsaXplIHRvIHNhbmUgdmFsdWUuICBJZGVhbGx5IGEgY29ubnRyYWNrIGhlbHBlcgorCSAqIChlLmcuIGluIGNhc2Ugb2YgcHB0cCkgaXMgaW5jcmVhc2luZyB0aGVtICovCisJY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCA9IEdSRV9TVFJFQU1fVElNRU9VVDsKKwljdC0+cHJvdG8uZ3JlLnRpbWVvdXQgPSBHUkVfVElNRU9VVDsKKworCXJldHVybiAxOworfQorCisvKiBDYWxsZWQgd2hlbiBhIGNvbm50cmFjayBlbnRyeSBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaGFzaGVzCisgKiBhbmQgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZCBmcm9tIG1lbW9yeSAqLworc3RhdGljIHZvaWQgZ3JlX2Rlc3Ryb3koc3RydWN0IG5mX2Nvbm4gKmN0KQoreworCXN0cnVjdCBuZl9jb25uICptYXN0ZXIgPSBjdC0+bWFzdGVyOworCURFQlVHUCgiIGVudGVyaW5nXG4iKTsKKworCWlmICghbWFzdGVyKQorCQlERUJVR1AoIm5vIG1hc3RlciAhPyFcbiIpOworCWVsc2UKKwkJbmZfY3RfZ3JlX2tleW1hcF9kZXN0cm95KG1hc3Rlcik7Cit9CisKKy8qIHByb3RvY29sIGhlbHBlciBzdHJ1Y3QgKi8KK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fZ3JlNCA9IHsKKwkubDNwcm90bwkgPSBBRl9JTkVULAorCS5sNHByb3RvCSA9IElQUFJPVE9fR1JFLAorCS5uYW1lCQkgPSAiZ3JlIiwKKwkucGt0X3RvX3R1cGxlCSA9IGdyZV9wa3RfdG9fdHVwbGUsCisJLmludmVydF90dXBsZQkgPSBncmVfaW52ZXJ0X3R1cGxlLAorCS5wcmludF90dXBsZQkgPSBncmVfcHJpbnRfdHVwbGUsCisJLnByaW50X2Nvbm50cmFjayA9IGdyZV9wcmludF9jb25udHJhY2ssCisJLnBhY2tldAkJID0gZ3JlX3BhY2tldCwKKwkubmV3CQkgPSBncmVfbmV3LAorCS5kZXN0cm95CSA9IGdyZV9kZXN0cm95LAorCS5tZSAJCSA9IFRISVNfTU9EVUxFLAorI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19ORVRMSU5LKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX05FVExJTktfTU9EVUxFKQorCS50dXBsZV90b19uZmF0dHIgPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKKwkubmZhdHRyX3RvX3R1cGxlID0gbmZfY3RfcG9ydF9uZmF0dHJfdG9fdHVwbGUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX2N0X3Byb3RvX2dyZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b19ncmU0KTsKK30KKworc3RhdGljIHZvaWQgbmZfY3RfcHJvdG9fZ3JlX2Zpbmkodm9pZCkKK3sKKwluZl9jb25udHJhY2tfbDRwcm90b191bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfbDRwcm90b19ncmU0KTsKKwluZl9jdF9ncmVfa2V5bWFwX2ZsdXNoKCk7Cit9CisKK21vZHVsZV9pbml0KG5mX2N0X3Byb3RvX2dyZV9pbml0KTsKK21vZHVsZV9leGl0KG5mX2N0X3Byb3RvX2dyZV9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCmluZGV4IGFmNTY4NzcuLjc2ZTI2MzYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKQEAgLTMyLDcgKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+Ci0jaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAKICNpZiAwCiAjZGVmaW5lIERFQlVHUChmb3JtYXQsIC4uLikgcHJpbnRrKGZvcm1hdCwgIyMgX19WQV9BUkdTX18pCkBAIC0yMTYsNyArMjE3LDcgQEAKIGZvciAob2Zmc2V0ID0gZGF0YW9mZiArIHNpemVvZihzY3RwX3NjdHBoZHJfdCksIGNvdW50ID0gMDsJCVwKIAlvZmZzZXQgPCBza2ItPmxlbiAmJgkJCQkJCVwKIAkoc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksICZfc2NoKSk7CVwKLQlvZmZzZXQgKz0gKGh0b25zKHNjaC0+bGVuZ3RoKSArIDMpICYgfjMsIGNvdW50KyspCisJb2Zmc2V0ICs9IChudG9ocyhzY2gtPmxlbmd0aCkgKyAzKSAmIH4zLCBjb3VudCsrKQogCiAvKiBTb21lIHZhbGlkaXR5IGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIGNodW5rcyBhcmUgZmluZSAqLwogc3RhdGljIGludCBkb19iYXNpY19jaGVja3Moc3RydWN0IG5mX2Nvbm4gKmNvbm50cmFjaywKQEAgLTUwOCwzNiArNTA5LDEwIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3NjdHA0ID0geyAKLQkubDNwcm90bwkgPSBQRl9JTkVULAotCS5wcm90byAJCSA9IElQUFJPVE9fU0NUUCwgCi0JLm5hbWUgCQkgPSAic2N0cCIsCi0JLnBrdF90b190dXBsZSAJID0gc2N0cF9wa3RfdG9fdHVwbGUsIAotCS5pbnZlcnRfdHVwbGUgCSA9IHNjdHBfaW52ZXJ0X3R1cGxlLCAKLQkucHJpbnRfdHVwbGUgCSA9IHNjdHBfcHJpbnRfdHVwbGUsIAotCS5wcmludF9jb25udHJhY2sgPSBzY3RwX3ByaW50X2Nvbm50cmFjaywKLQkucGFja2V0IAkgPSBzY3RwX3BhY2tldCwgCi0JLm5ldyAJCSA9IHNjdHBfbmV3LCAKLQkuZGVzdHJveSAJID0gTlVMTCwgCi0JLm1lIAkJID0gVEhJU19NT0RVTEUgCi19OwotCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNiA9IHsgCi0JLmwzcHJvdG8JID0gUEZfSU5FVDYsCi0JLnByb3RvIAkJID0gSVBQUk9UT19TQ1RQLCAKLQkubmFtZSAJCSA9ICJzY3RwIiwKLQkucGt0X3RvX3R1cGxlIAkgPSBzY3RwX3BrdF90b190dXBsZSwgCi0JLmludmVydF90dXBsZSAJID0gc2N0cF9pbnZlcnRfdHVwbGUsIAotCS5wcmludF90dXBsZSAJID0gc2N0cF9wcmludF90dXBsZSwgCi0JLnByaW50X2Nvbm50cmFjayA9IHNjdHBfcHJpbnRfY29ubnRyYWNrLAotCS5wYWNrZXQgCSA9IHNjdHBfcGFja2V0LCAKLQkubmV3IAkJID0gc2N0cF9uZXcsIAotCS5kZXN0cm95IAkgPSBOVUxMLCAKLQkubWUgCQkgPSBUSElTX01PRFVMRSAKLX07Ci0KICNpZmRlZiBDT05GSUdfU1lTQ1RMCi1zdGF0aWMgY3RsX3RhYmxlIG5mX2N0X3N5c2N0bF90YWJsZVtdID0geworc3RhdGljIHVuc2lnbmVkIGludCBzY3RwX3N5c2N0bF90YWJsZV91c2VyczsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc2N0cF9zeXNjdGxfaGVhZGVyOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc2N0cF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7CiAJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NMT1NFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfY2xvc2VkIiwKQEAgLTU5NCw2MyArNTY5LDEzNCBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAotCXsgLmN0bF9uYW1lID0gMCB9Ci19OwotCi1zdGF0aWMgY3RsX3RhYmxlIG5mX2N0X25ldGZpbHRlcl90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05FVEZJTFRFUiwKLQkJLnByb2NuYW1lCT0gIm5ldGZpbHRlciIsCi0JCS5tb2RlCQk9IDA1NTUsCi0JCS5jaGlsZAkJPSBuZl9jdF9zeXNjdGxfdGFibGUsCi0JfSwKLQl7IC5jdGxfbmFtZSA9IDAgfQorCQkuY3RsX25hbWUgPSAwCisJfQogfTsKIAotc3RhdGljIGN0bF90YWJsZSBuZl9jdF9uZXRfdGFibGVbXSA9IHsKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX2NvbXBhdF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IENUTF9ORVQsCi0JCS5wcm9jbmFtZQk9ICJuZXQiLAotCQkubW9kZQkJPSAwNTU1LCAKLQkJLmNoaWxkCQk9IG5mX2N0X25ldGZpbHRlcl90YWJsZSwKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DTE9TRUQsCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X2Nsb3NlZCIsCisJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfY2xvc2VkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAotCXsgLmN0bF9uYW1lID0gMCB9CisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9XQUlULAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jb29raWVfd2FpdCIsCisJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfY29va2llX3dhaXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9FQ0hPRUQsCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQiLAorCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVELAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3NjdHBfdGltZW91dF9lc3RhYmxpc2hlZCIsCisJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfZXN0YWJsaXNoZWQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQsCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3NlbnQiLAorCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX3NlbnQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0QsCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QiLAorCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX0FDS19TRU5ULAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3NjdHBfdGltZW91dF9zaHV0ZG93bl9hY2tfc2VudCIsCisJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfc2h1dGRvd25fYWNrX3NlbnQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUgPSAwCisJfQogfTsKLQotc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpuZl9jdF9zeXNjdGxfaGVhZGVyOworI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQgKi8KICNlbmRpZgogCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fc2N0cDQgPSB7CisJLmwzcHJvdG8JCT0gUEZfSU5FVCwKKwkubDRwcm90byAJCT0gSVBQUk9UT19TQ1RQLAorCS5uYW1lIAkJCT0gInNjdHAiLAorCS5wa3RfdG9fdHVwbGUgCQk9IHNjdHBfcGt0X3RvX3R1cGxlLAorCS5pbnZlcnRfdHVwbGUgCQk9IHNjdHBfaW52ZXJ0X3R1cGxlLAorCS5wcmludF90dXBsZSAJCT0gc2N0cF9wcmludF90dXBsZSwKKwkucHJpbnRfY29ubnRyYWNrCT0gc2N0cF9wcmludF9jb25udHJhY2ssCisJLnBhY2tldCAJCT0gc2N0cF9wYWNrZXQsCisJLm5ldyAJCQk9IHNjdHBfbmV3LAorCS5tZSAJCQk9IFRISVNfTU9EVUxFLAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuY3RsX3RhYmxlX3VzZXJzCT0gJnNjdHBfc3lzY3RsX3RhYmxlX3VzZXJzLAorCS5jdGxfdGFibGVfaGVhZGVyCT0gJnNjdHBfc3lzY3RsX2hlYWRlciwKKwkuY3RsX3RhYmxlCQk9IHNjdHBfc3lzY3RsX3RhYmxlLAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQKKwkuY3RsX2NvbXBhdF90YWJsZQk9IHNjdHBfY29tcGF0X3N5c2N0bF90YWJsZSwKKyNlbmRpZgorI2VuZGlmCit9OworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fc2N0cDYgPSB7CisJLmwzcHJvdG8JCT0gUEZfSU5FVDYsCisJLmw0cHJvdG8gCQk9IElQUFJPVE9fU0NUUCwKKwkubmFtZSAJCQk9ICJzY3RwIiwKKwkucGt0X3RvX3R1cGxlIAkJPSBzY3RwX3BrdF90b190dXBsZSwKKwkuaW52ZXJ0X3R1cGxlIAkJPSBzY3RwX2ludmVydF90dXBsZSwKKwkucHJpbnRfdHVwbGUgCQk9IHNjdHBfcHJpbnRfdHVwbGUsCisJLnByaW50X2Nvbm50cmFjawk9IHNjdHBfcHJpbnRfY29ubnRyYWNrLAorCS5wYWNrZXQgCQk9IHNjdHBfcGFja2V0LAorCS5uZXcgCQkJPSBzY3RwX25ldywKKwkubWUgCQkJPSBUSElTX01PRFVMRSwKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJLmN0bF90YWJsZV91c2Vycwk9ICZzY3RwX3N5c2N0bF90YWJsZV91c2VycywKKwkuY3RsX3RhYmxlX2hlYWRlcgk9ICZzY3RwX3N5c2N0bF9oZWFkZXIsCisJLmN0bF90YWJsZQkJPSBzY3RwX3N5c2N0bF90YWJsZSwKKyNlbmRpZgorfTsKKwogaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fc2N0cF9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IG5mX2Nvbm50cmFja19wcm90b2NvbF9yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3NjdHA0KTsKKwlyZXQgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fc2N0cDQpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKCJuZl9jb25udHJhY2tfcHJvdG9fc2N0cDQ6IHByb3RvY29sIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXByaW50aygibmZfY29ubnRyYWNrX2w0cHJvdG9fc2N0cDQ6IHByb3RvY29sIHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXQgPSBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNik7CisJcmV0ID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX3NjdHA2KTsKIAlpZiAocmV0KSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX3Byb3RvX3NjdHA2OiBwcm90b2NvbCByZWdpc3RlciBmYWlsZWRcbiIpOworCQlwcmludGsoIm5mX2Nvbm50cmFja19sNHByb3RvX3NjdHA2OiBwcm90b2NvbCByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlnb3RvIGNsZWFudXBfc2N0cDQ7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCW5mX2N0X3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUobmZfY3RfbmV0X3RhYmxlLCAwKTsKLQlpZiAobmZfY3Rfc3lzY3RsX2hlYWRlciA9PSBOVUxMKSB7Ci0JCXByaW50aygibmZfY29ubnRyYWNrX3Byb3RvX3NjdHA6IGNhbid0IHJlZ2lzdGVyIHRvIHN5c2N0bC5cbiIpOwotCQlnb3RvIGNsZWFudXA7Ci0JfQotI2VuZGlmCi0KIAlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotIGNsZWFudXA6Ci0JbmZfY29ubnRyYWNrX3Byb3RvY29sX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19wcm90b2NvbF9zY3RwNik7Ci0jZW5kaWYKICBjbGVhbnVwX3NjdHA0OgotCW5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKCZuZl9jb25udHJhY2tfcHJvdG9jb2xfc2N0cDQpOworCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX3NjdHA0KTsKICBvdXQ6CiAJREVCVUdQKCJTQ1RQIGNvbm50cmFjayBtb2R1bGUgbG9hZGluZyAlc1xuIiwgCiAJCQkJCXJldCA/ICJmYWlsZWQiOiAic3VjY2VlZGVkIik7CkBAIC02NTksMTEgKzcwNSw4IEBACiAKIHZvaWQgX19leGl0IG5mX2Nvbm50cmFja19wcm90b19zY3RwX2Zpbmkodm9pZCkKIHsKLQluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3NjdHA2KTsKLQluZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX3Byb3RvY29sX3NjdHA0KTsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0gCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG5mX2N0X3N5c2N0bF9oZWFkZXIpOwotI2VuZGlmCisJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmbmZfY29ubnRyYWNrX2w0cHJvdG9fc2N0cDYpOworCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJm5mX2Nvbm50cmFja19sNHByb3RvX3NjdHA0KTsKIAlERUJVR1AoIlNDVFAgY29ubnRyYWNrIG1vZHVsZSB1bmxvYWRlZFxuIik7CiB9CiAKQEAgLTY3MywzICs3MTYsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiS2lyYW4gS3VtYXIgSW1taWRpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIHByb3RvY29sIGhlbHBlciBmb3IgU0NUUCIpOworTU9EVUxFX0FMSUFTKCJpcF9jb25udHJhY2tfcHJvdG9fc2N0cCIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwppbmRleCAyMzhiYmI1Li42MjZiMDAxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNDIsNyArNDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgotI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCkBAIC05MiwyMiArOTMsMjIgQEAKICNkZWZpbmUgSE9VUlMgKiA2MCBNSU5TCiAjZGVmaW5lIERBWVMgKiAyNCBIT1VSUwogCi11bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQgX19yZWFkX21vc3RseSA9ICAgICAgMiBNSU5TOwotdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X3N5bl9yZWN2IF9fcmVhZF9tb3N0bHkgPSAgICAgNjAgU0VDUzsKLXVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9lc3RhYmxpc2hlZCBfX3JlYWRfbW9zdGx5ID0gICA1IERBWVM7Ci11bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfZmluX3dhaXQgX19yZWFkX21vc3RseSA9ICAgICAgMiBNSU5TOwotdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQgX19yZWFkX21vc3RseSA9ICAgNjAgU0VDUzsKLXVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9sYXN0X2FjayBfX3JlYWRfbW9zdGx5ID0gICAgIDMwIFNFQ1M7Ci11bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfdGltZV93YWl0IF9fcmVhZF9tb3N0bHkgPSAgICAgMiBNSU5TOwotdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlIF9fcmVhZF9tb3N0bHkgPSAgICAgICAgMTAgU0VDUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQgX19yZWFkX21vc3RseSA9ICAgICAgMiBNSU5TOworc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9zeW5fcmVjdiBfX3JlYWRfbW9zdGx5ID0gICAgIDYwIFNFQ1M7CitzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkIF9fcmVhZF9tb3N0bHkgPSAgIDUgREFZUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfZmluX3dhaXQgX19yZWFkX21vc3RseSA9ICAgICAgMiBNSU5TOworc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9jbG9zZV93YWl0IF9fcmVhZF9tb3N0bHkgPSAgIDYwIFNFQ1M7CitzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrIF9fcmVhZF9tb3N0bHkgPSAgICAgMzAgU0VDUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfdGltZV93YWl0IF9fcmVhZF9tb3N0bHkgPSAgICAgMiBNSU5TOworc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9jbG9zZSBfX3JlYWRfbW9zdGx5ID0gICAgICAgIDEwIFNFQ1M7CiAKIC8qIFJGQzExMjIgc2F5cyB0aGUgUjIgbGltaXQgc2hvdWxkIGJlIGF0IGxlYXN0IDEwMCBzZWNvbmRzLgogICAgTGludXggdXNlcyAxNSBwYWNrZXRzIGFzIGxpbWl0LCB3aGljaCBjb3JyZXNwb25kcyAKICAgIHRvIH4xMy0zMG1pbiBkZXBlbmRpbmcgb24gUlRPLiAqLwotdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X21heF9yZXRyYW5zIF9fcmVhZF9tb3N0bHkgPSAgIDUgTUlOUzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMgX19yZWFkX21vc3RseSA9ICAgNSBNSU5TOwogIAotc3RhdGljIHVuc2lnbmVkIGludCAqIHRjcF90aW1lb3V0c1tdCi09IHsgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUQ1BfQ09OTlRSQUNLX05PTkUgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgKiB0Y3BfdGltZW91dHNbXSA9IHsKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRDUF9DT05OVFJBQ0tfTk9ORSAqLwogICAgICZuZl9jdF90Y3BfdGltZW91dF9zeW5fc2VudCwgICAgICAgLyogVENQX0NPTk5UUkFDS19TWU5fU0VOVCwgKi8KICAgICAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3JlY3YsICAgICAgIC8qIFRDUF9DT05OVFJBQ0tfU1lOX1JFQ1YsICovCiAgICAgJm5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkLCAgICAvKiBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVELCAqLwpAQCAtNDczLDggKzQ3NCw4IEBACiAKIAkvKiBGYXN0IHBhdGggZm9yIHRpbWVzdGFtcC1vbmx5IG9wdGlvbiAqLwogCWlmIChsZW5ndGggPT0gVENQT0xFTl9UU1RBTVBfQUxJR05FRCo0Ci0JICAgICYmICooX191MzIgKilwdHIgPT0KLQkgICAgICAgIF9fY29uc3RhbnRfbnRvaGwoKFRDUE9QVF9OT1AgPDwgMjQpIAorCSAgICAmJiAqKF9fYmUzMiAqKXB0ciA9PQorCSAgICAgICAgX19jb25zdGFudF9odG9ubCgoVENQT1BUX05PUCA8PCAyNCkKIAkgICAgICAgIAkJIHwgKFRDUE9QVF9OT1AgPDwgMTYpCiAJICAgICAgICAJCSB8IChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpCiAJICAgICAgICAJCSB8IFRDUE9MRU5fVElNRVNUQU1QKSkKQEAgLTUwNSw5ICs1MDYsNyBAQAogCQkJICAgIAlmb3IgKGkgPSAwOwogCQkJICAgIAkgICAgIGkgPCAob3BzaXplIC0gVENQT0xFTl9TQUNLX0JBU0UpOwogCQkJICAgIAkgICAgIGkgKz0gVENQT0xFTl9TQUNLX1BFUkJMT0NLKSB7Ci0JCQkJCW1lbWNweSgmdG1wLCAoX191MzIgKikocHRyICsgaSkgKyAxLAotCQkJCQkgICAgICAgc2l6ZW9mKF9fdTMyKSk7Ci0JCQkJCXRtcCA9IG50b2hsKHRtcCk7CisJCQkJICAgICAJdG1wID0gbnRvaGwoKigoX19iZTMyICopKHB0citpKSsxKSk7CiAKIAkJCQkJaWYgKGFmdGVyKHRtcCwgKnNhY2spKQogCQkJCQkJKnNhY2sgPSB0bXA7CkBAIC03MzEsNyArNzMwLDcgQEAKIAlyZXR1cm4gcmVzOwogfQogCi0jaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogLyogVXBkYXRlIHNlbmRlci0+dGRfZW5kIGFmdGVyIE5BVCBzdWNjZXNzZnVsbHkgbWFuZ2xlZCB0aGUgcGFja2V0ICovCiAvKiBDYWxsZXIgbXVzdCBsaW5lYXJpemUgc2tiIGF0IHRjcCBoZWFkZXIuICovCiB2b2lkIG5mX2Nvbm50cmFja190Y3BfdXBkYXRlKHN0cnVjdCBza19idWZmICpza2IsCkBAIC03NjMsNyArNzYyLDcgQEAKIAkJcmVjZWl2ZXItPnRkX2VuZCwgcmVjZWl2ZXItPnRkX21heGVuZCwgcmVjZWl2ZXItPnRkX21heHdpbiwKIAkJcmVjZWl2ZXItPnRkX3NjYWxlKTsKIH0KLSAKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja190Y3BfdXBkYXRlKTsKICNlbmRpZgogCiAjZGVmaW5lCVRIX0ZJTgkweDAxCkBAIC0xMTY3LDExICsxMTY2LDIyMSBAQAogCXJldHVybiAwOwogfQogI2VuZGlmCi0gIAotc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCA9CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgdW5zaWduZWQgaW50IHRjcF9zeXNjdGxfdGFibGVfdXNlcnM7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnRjcF9zeXNjdGxfaGVhZGVyOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdGNwX3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9zeW5fc2VudCIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9zeW5fc2VudCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1YsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfc3luX3JlY3YiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3JlY3YsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVELAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2VzdGFibGlzaGVkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9GSU5fV0FJVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9maW5fd2FpdCIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9maW5fd2FpdCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9jbG9zZV93YWl0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLLAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2xhc3RfYWNrIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfdGltZV93YWl0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3RpbWVfd2FpdCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0UsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfY2xvc2UiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfY2xvc2UsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TLAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X21heF9yZXRyYW5zIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X21heF9yZXRyYW5zLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfTE9PU0UsCisJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX2xvb3NlIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF9sb29zZSwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9CRV9MSUJFUkFMLAorCQkucHJvY25hbWUgICAgICAgPSAibmZfY29ubnRyYWNrX3RjcF9iZV9saWJlcmFsIiwKKwkJLmRhdGEgICAgICAgICAgID0gJm5mX2N0X3RjcF9iZV9saWJlcmFsLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TLAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF9tYXhfcmV0cmFucyIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfbWF4X3JldHJhbnMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CisKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB0Y3BfY29tcGF0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5ULAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9zZW50IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3N5bl9zZW50LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9SRUNWLAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9yZWN2IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3N5bl9yZWN2LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVELAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2VzdGFibGlzaGVkIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlULAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Zpbl93YWl0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2Zpbl93YWl0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFX1dBSVQsCisJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfY2xvc2Vfd2FpdCIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9jbG9zZV93YWl0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLLAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2xhc3RfYWNrIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1RJTUVfV0FJVCwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfdGltZW91dF90aW1lX3dhaXQiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfdGltZV93YWl0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFLAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Nsb3NlIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TLAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X21heF9yZXRyYW5zIiwKKwkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X21heF9yZXRyYW5zLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9MT09TRSwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfbG9vc2UiLAorCQkuZGF0YQkJPSAmbmZfY3RfdGNwX2xvb3NlLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfQkVfTElCRVJBTCwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfYmVfbGliZXJhbCIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfYmVfbGliZXJhbCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TLAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF9tYXhfcmV0cmFucyIsCisJCS5kYXRhCQk9ICZuZl9jdF90Y3BfbWF4X3JldHJhbnMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCAqLworI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDQgPQogewogCS5sM3Byb3RvCQk9IFBGX0lORVQsCi0JLnByb3RvIAkJCT0gSVBQUk9UT19UQ1AsCisJLmw0cHJvdG8gCQk9IElQUFJPVE9fVENQLAogCS5uYW1lIAkJCT0gInRjcCIsCiAJLnBrdF90b190dXBsZSAJCT0gdGNwX3BrdF90b190dXBsZSwKIAkuaW52ZXJ0X3R1cGxlIAkJPSB0Y3BfaW52ZXJ0X3R1cGxlLApAQCAtMTE4NywxMiArMTM5NiwyMSBAQAogCS50dXBsZV90b19uZmF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKIAkubmZhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9uZmF0dHJfdG9fdHVwbGUsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJLmN0bF90YWJsZV91c2Vycwk9ICZ0Y3Bfc3lzY3RsX3RhYmxlX3VzZXJzLAorCS5jdGxfdGFibGVfaGVhZGVyCT0gJnRjcF9zeXNjdGxfaGVhZGVyLAorCS5jdGxfdGFibGUJCT0gdGNwX3N5c2N0bF90YWJsZSwKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCisJLmN0bF9jb21wYXRfdGFibGUJPSB0Y3BfY29tcGF0X3N5c2N0bF90YWJsZSwKKyNlbmRpZgorI2VuZGlmCiB9OworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2w0cHJvdG9fdGNwNCk7CiAKLXN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgbmZfY29ubnRyYWNrX3Byb3RvY29sX3RjcDYgPQorc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDYgPQogewogCS5sM3Byb3RvCQk9IFBGX0lORVQ2LAotCS5wcm90byAJCQk9IElQUFJPVE9fVENQLAorCS5sNHByb3RvIAkJPSBJUFBST1RPX1RDUCwKIAkubmFtZSAJCQk9ICJ0Y3AiLAogCS5wa3RfdG9fdHVwbGUgCQk9IHRjcF9wa3RfdG9fdHVwbGUsCiAJLmludmVydF90dXBsZSAJCT0gdGNwX2ludmVydF90dXBsZSwKQEAgLTEyMDgsNyArMTQyNiwxMCBAQAogCS50dXBsZV90b19uZmF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0ciwKIAkubmZhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9uZmF0dHJfdG9fdHVwbGUsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJLmN0bF90YWJsZV91c2Vycwk9ICZ0Y3Bfc3lzY3RsX3RhYmxlX3VzZXJzLAorCS5jdGxfdGFibGVfaGVhZGVyCT0gJnRjcF9zeXNjdGxfaGVhZGVyLAorCS5jdGxfdGFibGUJCT0gdGNwX3N5c2N0bF90YWJsZSwKKyNlbmRpZgogfTsKLQotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfdGNwNCk7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19wcm90b2NvbF90Y3A2KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDYpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCBkMjg5ODFjLi5lNDljZDI1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMjIsMTMgKzIyLDE1IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKwogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KLSNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b2NvbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KIAotdW5zaWduZWQgaW50IG5mX2N0X3VkcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKLXVuc2lnbmVkIGludCBuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0gX19yZWFkX21vc3RseSA9IDE4MCpIWjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXQgX19yZWFkX21vc3RseSA9IDMwKkhaOworc3RhdGljIHVuc2lnbmVkIGludCBuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0gX19yZWFkX21vc3RseSA9IDE4MCpIWjsKIAogc3RhdGljIGludCB1ZHBfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLApAQCAtMTQ2LDEwICsxNDgsNTkgQEAKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sIG5mX2Nvbm50cmFja19wcm90b2NvbF91ZHA0ID0KKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdGF0aWMgdW5zaWduZWQgaW50IHVkcF9zeXNjdGxfdGFibGVfdXNlcnM7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnVkcF9zeXNjdGxfaGVhZGVyOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdWRwX3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19VRFBfVElNRU9VVCwKKwkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja191ZHBfdGltZW91dCIsCisJCS5kYXRhCQk9ICZuZl9jdF91ZHBfdGltZW91dCwKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVRfU1RSRUFNLAorCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3VkcF90aW1lb3V0X3N0cmVhbSIsCisJCS5kYXRhCQk9ICZuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0sCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSAwCisJfQorfTsKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1ZHBfY29tcGF0X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VULAorCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3VkcF90aW1lb3V0IiwKKwkJLmRhdGEJCT0gJm5mX2N0X3VkcF90aW1lb3V0LAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTSwKKwkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja191ZHBfdGltZW91dF9zdHJlYW0iLAorCQkuZGF0YQkJPSAmbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CisjZW5kaWYgLyogQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVCAqLworI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDQgPQogewogCS5sM3Byb3RvCQk9IFBGX0lORVQsCi0JLnByb3RvCQkJPSBJUFBST1RPX1VEUCwKKwkubDRwcm90bwkJPSBJUFBST1RPX1VEUCwKIAkubmFtZQkJCT0gInVkcCIsCiAJLnBrdF90b190dXBsZQkJPSB1ZHBfcGt0X3RvX3R1cGxlLAogCS5pbnZlcnRfdHVwbGUJCT0gdWRwX2ludmVydF90dXBsZSwKQEAgLTE2MywxMiArMjE0LDIxIEBACiAJLnR1cGxlX3RvX25mYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmZhdHRyLAogCS5uZmF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25mYXR0cl90b190dXBsZSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuY3RsX3RhYmxlX3VzZXJzCT0gJnVkcF9zeXNjdGxfdGFibGVfdXNlcnMsCisJLmN0bF90YWJsZV9oZWFkZXIJPSAmdWRwX3N5c2N0bF9oZWFkZXIsCisJLmN0bF90YWJsZQkJPSB1ZHBfc3lzY3RsX3RhYmxlLAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQKKwkuY3RsX2NvbXBhdF90YWJsZQk9IHVkcF9jb21wYXRfc3lzY3RsX3RhYmxlLAorI2VuZGlmCisjZW5kaWYKIH07CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbDRwcm90b191ZHA0KTsKIAotc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCBuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNiA9CitzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gbmZfY29ubnRyYWNrX2w0cHJvdG9fdWRwNiA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfSU5FVDYsCi0JLnByb3RvCQkJPSBJUFBST1RPX1VEUCwKKwkubDRwcm90bwkJPSBJUFBST1RPX1VEUCwKIAkubmFtZQkJCT0gInVkcCIsCiAJLnBrdF90b190dXBsZQkJPSB1ZHBfcGt0X3RvX3R1cGxlLAogCS5pbnZlcnRfdHVwbGUJCT0gdWRwX2ludmVydF90dXBsZSwKQEAgLTE4Miw3ICsyNDIsMTAgQEAKIAkudHVwbGVfdG9fbmZhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19uZmF0dHIsCiAJLm5mYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmZhdHRyX3RvX3R1cGxlLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NZU0NUTAorCS5jdGxfdGFibGVfdXNlcnMJPSAmdWRwX3N5c2N0bF90YWJsZV91c2VycywKKwkuY3RsX3RhYmxlX2hlYWRlcgk9ICZ1ZHBfc3lzY3RsX2hlYWRlciwKKwkuY3RsX3RhYmxlCQk9IHVkcF9zeXNjdGxfdGFibGUsCisjZW5kaWYKIH07Ci0KLUVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3Byb3RvY29sX3VkcDQpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfdWRwNik7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfbDRwcm90b191ZHA2KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyYTI0MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCkBAIC0wLDAgKzEsNTMxIEBACisvKiBTSVAgZXh0ZW5zaW9uIGZvciBJUCBjb25uZWN0aW9uIHRyYWNraW5nLgorICoKKyAqIChDKSAyMDA1IGJ5IENocmlzdGlhbiBIZW50c2NoZWwgPGNoZW50c2NoZWxAYXJuZXQuY29tLmFyPgorICogYmFzZWQgb24gUlIncyBpcF9jb25udHJhY2tfZnRwLmMgYW5kIG90aGVyIG1vZHVsZXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaD4KKworI2lmIDAKKyNkZWZpbmUgREVCVUdQIHByaW50aworI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU0lQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja19zaXAiKTsKKworI2RlZmluZSBNQVhfUE9SVFMJOAorc3RhdGljIHVuc2lnbmVkIHNob3J0IHBvcnRzW01BWF9QT1JUU107CitzdGF0aWMgaW50IHBvcnRzX2M7Cittb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIHVzaG9ydCwgJnBvcnRzX2MsIDA0MDApOworTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgInBvcnQgbnVtYmVycyBvZiBTSVAgc2VydmVycyIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHNpcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSBTSVBfVElNRU9VVDsKK21vZHVsZV9wYXJhbShzaXBfdGltZW91dCwgdWludCwgMDYwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNpcF90aW1lb3V0LCAidGltZW91dCBmb3IgdGhlIG1hc3RlciBTSVAgc2Vzc2lvbiIpOworCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2lwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQlzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkJY29uc3QgY2hhciAqKmRwdHIpIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2lwX2hvb2spOworCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX2hvb2spKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJCQllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAorCQkJCWNvbnN0IGNoYXIgKmRwdHIpIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2RwX2hvb2spOworCitzdGF0aWMgaW50IGRpZ2l0c19sZW4oc3RydWN0IG5mX2Nvbm4gKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKK3N0YXRpYyBpbnQgZXBhZGRyX2xlbihzdHJ1Y3QgbmZfY29ubiAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworc3RhdGljIGludCBza3BfZGlnaXRzX2xlbihzdHJ1Y3QgbmZfY29ubiAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworc3RhdGljIGludCBza3BfZXBhZGRyX2xlbihzdHJ1Y3QgbmZfY29ubiAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworCitzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8geworCWNvbnN0IGNoYXIJKmxuYW1lOworCWNvbnN0IGNoYXIJKnNuYW1lOworCWNvbnN0IGNoYXIJKmxuX3N0cjsKKwlzaXplX3QJCWxubGVuOworCXNpemVfdAkJc25sZW47CisJc2l6ZV90CQlsbl9zdHJsZW47CisJaW50CQljYXNlX3NlbnNpdGl2ZTsKKwlpbnQJCSgqbWF0Y2hfbGVuKShzdHJ1Y3QgbmZfY29ubiAqLCBjb25zdCBjaGFyICosCisJCQkJICAgICBjb25zdCBjaGFyICosIGludCAqKTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gY3Rfc2lwX2hkcnNbXSA9IHsKKwlbUE9TX1JFR19SRVFfVVJJXSA9IHsgCS8qIFNJUCBSRUdJU1RFUiByZXF1ZXN0IFVSSSAqLworCQkubG5hbWUJCT0gInNpcDoiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAorCQkubG5fc3RyCQk9ICI6IiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiOiIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4sCisJfSwKKwlbUE9TX1JFUV9VUkldID0geyAJLyogU0lQIHJlcXVlc3QgVVJJICovCisJCS5sbmFtZQkJPSAic2lwOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoInNpcDoiKSAtIDEsCisJCS5sbl9zdHIJCT0gIkAiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJAIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbiwKKwl9LAorCVtQT1NfRlJPTV0gPSB7CQkvKiBTSVAgRnJvbSBoZWFkZXIgKi8KKwkJLmxuYW1lCQk9ICJGcm9tOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoIkZyb206IikgLSAxLAorCQkuc25hbWUJCT0gIlxyXG5mOiIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxyXG5mOiIpIC0gMSwKKwkJLmxuX3N0cgkJPSAic2lwOiIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoInNpcDoiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBza3BfZXBhZGRyX2xlbiwKKwl9LAorCVtQT1NfVE9dID0gewkJLyogU0lQIFRvIGhlYWRlciAqLworCQkubG5hbWUJCT0gIlRvOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlRvOiIpIC0gMSwKKwkJLnNuYW1lCQk9ICJcclxudDoiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxudDoiKSAtIDEsCisJCS5sbl9zdHIJCT0gInNpcDoiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJzaXA6IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gc2twX2VwYWRkcl9sZW4KKwl9LAorCVtQT1NfVklBXSA9IHsgCQkvKiBTSVAgVmlhIGhlYWRlciAqLworCQkubG5hbWUJCT0gIlZpYToiLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJWaWE6IikgLSAxLAorCQkuc25hbWUJCT0gIlxyXG52OiIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxyXG52OiIpIC0gMSwgLyogcmZjMzI2MSAiXHJcbiIgKi8KKwkJLmxuX3N0cgkJPSAiVURQICIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIlVEUCAiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuLAorCX0sCisJW1BPU19DT05UQUNUXSA9IHsgCS8qIFNJUCBDb250YWN0IGhlYWRlciAqLworCQkubG5hbWUJCT0gIkNvbnRhY3Q6IiwKKwkJLmxubGVuCQk9IHNpemVvZigiQ29udGFjdDoiKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJcbm06IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJcbm06IikgLSAxLAorCQkubG5fc3RyCQk9ICJzaXA6IiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigic2lwOiIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IHNrcF9lcGFkZHJfbGVuCisJfSwKKwlbUE9TX0NPTlRFTlRdID0geyAJLyogU0lQIENvbnRlbnQgbGVuZ3RoIGhlYWRlciAqLworCQkubG5hbWUJCT0gIkNvbnRlbnQtTGVuZ3RoOiIsCisJCS5sbmxlbgkJPSBzaXplb2YoIkNvbnRlbnQtTGVuZ3RoOiIpIC0gMSwKKwkJLnNuYW1lCQk9ICJcclxubDoiLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJcclxubDoiKSAtIDEsCisJCS5sbl9zdHIJCT0gIjoiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCI6IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gc2twX2RpZ2l0c19sZW4KKwl9LAorCVtQT1NfTUVESUFdID0gewkJLyogU0RQIG1lZGlhIGluZm8gKi8KKwkJLmNhc2Vfc2Vuc2l0aXZlCT0gMSwKKwkJLmxuYW1lCQk9ICJcbm09IiwKKwkJLmxubGVuCQk9IHNpemVvZigiXG5tPSIpIC0gMSwKKwkJLnNuYW1lCQk9ICJccm09IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJtPSIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiYXVkaW8gIiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiYXVkaW8gIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZGlnaXRzX2xlbgorCX0sCisJW1BPU19PV05FUl9JUDRdID0gewkvKiBTRFAgb3duZXIgYWRkcmVzcyovCisJCS5jYXNlX3NlbnNpdGl2ZQk9IDEsCisJCS5sbmFtZQkJPSAiXG5vPSIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlxubz0iKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJvPSIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxybz0iKSAtIDEsCisJCS5sbl9zdHIJCT0gIklOIElQNCAiLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCJJTiBJUDQgIikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZXBhZGRyX2xlbgorCX0sCisJW1BPU19DT05ORUNUSU9OX0lQNF0gPSB7LyogU0RQIGNvbm5lY3Rpb24gaW5mbyAqLworCQkuY2FzZV9zZW5zaXRpdmUJPSAxLAorCQkubG5hbWUJCT0gIlxuYz0iLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJcbmM9IikgLSAxLAorCQkuc25hbWUJCT0gIlxyYz0iLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJccmM9IikgLSAxLAorCQkubG5fc3RyCQk9ICJJTiBJUDQgIiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiSU4gSVA0ICIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4KKwl9LAorCVtQT1NfT1dORVJfSVA2XSA9IHsJLyogU0RQIG93bmVyIGFkZHJlc3MqLworCQkuY2FzZV9zZW5zaXRpdmUJPSAxLAorCQkubG5hbWUJCT0gIlxubz0iLAorCQkubG5sZW4JCT0gc2l6ZW9mKCJcbm89IikgLSAxLAorCQkuc25hbWUJCT0gIlxybz0iLAorCQkuc25sZW4JCT0gc2l6ZW9mKCJccm89IikgLSAxLAorCQkubG5fc3RyCQk9ICJJTiBJUDYgIiwKKwkJLmxuX3N0cmxlbgk9IHNpemVvZigiSU4gSVA2ICIpIC0gMSwKKwkJLm1hdGNoX2xlbgk9IGVwYWRkcl9sZW4KKwl9LAorCVtQT1NfQ09OTkVDVElPTl9JUDZdID0gey8qIFNEUCBjb25uZWN0aW9uIGluZm8gKi8KKwkJLmNhc2Vfc2Vuc2l0aXZlCT0gMSwKKwkJLmxuYW1lCQk9ICJcbmM9IiwKKwkJLmxubGVuCQk9IHNpemVvZigiXG5jPSIpIC0gMSwKKwkJLnNuYW1lCQk9ICJccmM9IiwKKwkJLnNubGVuCQk9IHNpemVvZigiXHJjPSIpIC0gMSwKKwkJLmxuX3N0cgkJPSAiSU4gSVA2ICIsCisJCS5sbl9zdHJsZW4JPSBzaXplb2YoIklOIElQNiAiKSAtIDEsCisJCS5tYXRjaF9sZW4JPSBlcGFkZHJfbGVuCisJfSwKKwlbUE9TX1NEUF9IRUFERVJdID0geyAJLyogU0RQIHZlcnNpb24gaGVhZGVyICovCisJCS5jYXNlX3NlbnNpdGl2ZQk9IDEsCisJCS5sbmFtZQkJPSAiXG52PSIsCisJCS5sbmxlbgkJPSBzaXplb2YoIlxudj0iKSAtIDEsCisJCS5zbmFtZQkJPSAiXHJ2PSIsCisJCS5zbmxlbgkJPSBzaXplb2YoIlxydj0iKSAtIDEsCisJCS5sbl9zdHIJCT0gIj0iLAorCQkubG5fc3RybGVuCT0gc2l6ZW9mKCI9IikgLSAxLAorCQkubWF0Y2hfbGVuCT0gZGlnaXRzX2xlbgorCX0KK307CisKKy8qIGdldCBsaW5lIGxlbmdodCB1bnRpbCBmaXJzdCBDUiBvciBMRiBzZWVuLiAqLworaW50IGN0X3NpcF9sbmxlbihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpsaW1pdCkKK3sKKwljb25zdCBjaGFyICprID0gbGluZTsKKworCXdoaWxlICgobGluZSA8PSBsaW1pdCkgJiYgKCpsaW5lID09ICdccicgfHwgKmxpbmUgPT0gJ1xuJykpCisJCWxpbmUrKzsKKworCXdoaWxlIChsaW5lIDw9IGxpbWl0KSB7CisJCWlmICgqbGluZSA9PSAnXHInIHx8ICpsaW5lID09ICdcbicpCisJCQlicmVhazsKKwkJbGluZSsrOworCX0KKwlyZXR1cm4gbGluZSAtIGs7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjdF9zaXBfbG5sZW4pOworCisvKiBMaW5lYXIgc3RyaW5nIHNlYXJjaCwgY2FzZSBzZW5zaXRpdmUuICovCitjb25zdCBjaGFyICpjdF9zaXBfc2VhcmNoKGNvbnN0IGNoYXIgKm5lZWRsZSwgY29uc3QgY2hhciAqaGF5c3RhY2ssCisJCQkgIHNpemVfdCBuZWVkbGVfbGVuLCBzaXplX3QgaGF5c3RhY2tfbGVuLAorCQkJICBpbnQgY2FzZV9zZW5zaXRpdmUpCit7CisJY29uc3QgY2hhciAqbGltaXQgPSBoYXlzdGFjayArIChoYXlzdGFja19sZW4gLSBuZWVkbGVfbGVuKTsKKworCXdoaWxlIChoYXlzdGFjayA8PSBsaW1pdCkgeworCQlpZiAoY2FzZV9zZW5zaXRpdmUpIHsKKwkJCWlmIChzdHJuY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCisJCQkJcmV0dXJuIGhheXN0YWNrOworCQl9IGVsc2UgeworCQkJaWYgKHN0cm5pY21wKGhheXN0YWNrLCBuZWVkbGUsIG5lZWRsZV9sZW4pID09IDApCisJCQkJcmV0dXJuIGhheXN0YWNrOworCQl9CisJCWhheXN0YWNrKys7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX3NlYXJjaCk7CisKK3N0YXRpYyBpbnQgZGlnaXRzX2xlbihzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmxpbWl0LCBpbnQgKnNoaWZ0KQoreworCWludCBsZW4gPSAwOworCXdoaWxlIChkcHRyIDw9IGxpbWl0ICYmIGlzZGlnaXQoKmRwdHIpKSB7CisJCWRwdHIrKzsKKwkJbGVuKys7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qIGdldCBkaWdpdHMgbGVuZ2h0LCBza2lwaW5nIGJsYW5rIHNwYWNlcy4gKi8KK3N0YXRpYyBpbnQgc2twX2RpZ2l0c19sZW4oc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpkcHRyLAorCQkJICBjb25zdCBjaGFyICpsaW1pdCwgaW50ICpzaGlmdCkKK3sKKwlmb3IgKDsgZHB0ciA8PSBsaW1pdCAmJiAqZHB0ciA9PSAnICc7IGRwdHIrKykKKwkJKCpzaGlmdCkrKzsKKworCXJldHVybiBkaWdpdHNfbGVuKGN0LCBkcHRyLCBsaW1pdCwgc2hpZnQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2FkZHIoc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBjaGFyICpjcCwgY29uc3QgY2hhciAqKmVuZHAsCisJCSAgICAgIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLCBjb25zdCBjaGFyICpsaW1pdCkKK3sKKwljb25zdCBjaGFyICplbmQ7CisJaW50IGZhbWlseSA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW07CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKGZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0ID0gaW40X3B0b24oY3AsIGxpbWl0IC0gY3AsICh1OCAqKSZhZGRyLT5pcCwgLTEsICZlbmQpOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXQgPSBpbjZfcHRvbihjcCwgbGltaXQgLSBjcCwgKHU4ICopJmFkZHItPmlwNiwgLTEsICZlbmQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlpZiAocmV0ID09IDAgfHwgZW5kID09IGNwKQorCQlyZXR1cm4gMDsKKwlpZiAoZW5kcCkKKwkJKmVuZHAgPSBlbmQ7CisJcmV0dXJuIDE7Cit9CisKKy8qIHNraXAgaXAgYWRkcmVzcy4gcmV0dXJucyBpdHMgbGVuZ3RoLiAqLworc3RhdGljIGludCBlcGFkZHJfbGVuKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJICAgICAgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCit7CisJdW5pb24gbmZfY29ubnRyYWNrX2FkZHJlc3MgYWRkcjsKKwljb25zdCBjaGFyICphdXggPSBkcHRyOworCisJaWYgKCFwYXJzZV9hZGRyKGN0LCBkcHRyLCAmZHB0ciwgJmFkZHIsIGxpbWl0KSkgeworCQlERUJVR1AoImlwOiAlcyBwYXJzZSBmYWlsZWQuIVxuIiwgZHB0cik7CisJCXJldHVybiAwOworCX0KKworCS8qIFBvcnQgbnVtYmVyICovCisJaWYgKCpkcHRyID09ICc6JykgeworCQlkcHRyKys7CisJCWRwdHIgKz0gZGlnaXRzX2xlbihjdCwgZHB0ciwgbGltaXQsIHNoaWZ0KTsKKwl9CisJcmV0dXJuIGRwdHIgLSBhdXg7Cit9CisKKy8qIGdldCBhZGRyZXNzIGxlbmd0aCwgc2tpcGluZyB1c2VyIGluZm8uICovCitzdGF0aWMgaW50IHNrcF9lcGFkZHJfbGVuKHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKKwkJCSAgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCit7CisJaW50IHMgPSAqc2hpZnQ7CisKKwlmb3IgKDsgZHB0ciA8PSBsaW1pdCAmJiAqZHB0ciAhPSAnQCc7IGRwdHIrKykKKwkJKCpzaGlmdCkrKzsKKworCWlmICgqZHB0ciA9PSAnQCcpIHsKKwkJZHB0cisrOworCQkoKnNoaWZ0KSsrOworCX0gZWxzZQorCQkqc2hpZnQgPSBzOworCisJcmV0dXJuIGVwYWRkcl9sZW4oY3QsIGRwdHIsIGxpbWl0LCBzaGlmdCk7Cit9CisKKy8qIFJldHVybnMgMCBpZiBub3QgZm91bmQsIC0xIGVycm9yIHBhcnNpbmcuICovCitpbnQgY3Rfc2lwX2dldF9pbmZvKHN0cnVjdCBuZl9jb25uICpjdCwKKwkJICAgIGNvbnN0IGNoYXIgKmRwdHIsIHNpemVfdCBkbGVuLAorCQkgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwKKwkJICAgIHVuc2lnbmVkIGludCAqbWF0Y2hsZW4sCisJCSAgICBlbnVtIHNpcF9oZWFkZXJfcG9zIHBvcykKK3sKKwljb25zdCBzdHJ1Y3Qgc2lwX2hlYWRlcl9uZm8gKmhuZm8gPSAmY3Rfc2lwX2hkcnNbcG9zXTsKKwljb25zdCBjaGFyICpsaW1pdCwgKmF1eCwgKmsgPSBkcHRyOworCWludCBzaGlmdCA9IDA7CisKKwlsaW1pdCA9IGRwdHIgKyAoZGxlbiAtIGhuZm8tPmxubGVuKTsKKworCXdoaWxlIChkcHRyIDw9IGxpbWl0KSB7CisJCWlmICgoc3RybmNtcChkcHRyLCBobmZvLT5sbmFtZSwgaG5mby0+bG5sZW4pICE9IDApICYmCisJCSAgICAoc3RybmNtcChkcHRyLCBobmZvLT5zbmFtZSwgaG5mby0+c25sZW4pICE9IDApKSB7CisJCQlkcHRyKys7CisJCQljb250aW51ZTsKKwkJfQorCQlhdXggPSBjdF9zaXBfc2VhcmNoKGhuZm8tPmxuX3N0ciwgZHB0ciwgaG5mby0+bG5fc3RybGVuLAorCQkgICAgICAgICAgICAgICAgICAgIGN0X3NpcF9sbmxlbihkcHRyLCBsaW1pdCksCisJCQkJICAgIGhuZm8tPmNhc2Vfc2Vuc2l0aXZlKTsKKwkJaWYgKCFhdXgpIHsKKwkJCURFQlVHUCgiJyVzJyBub3QgZm91bmQgaW4gJyVzJy5cbiIsIGhuZm8tPmxuX3N0ciwKKwkJCSAgICAgICBobmZvLT5sbmFtZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYXV4ICs9IGhuZm8tPmxuX3N0cmxlbjsKKworCQkqbWF0Y2hsZW4gPSBobmZvLT5tYXRjaF9sZW4oY3QsIGF1eCwgbGltaXQsICZzaGlmdCk7CisJCWlmICghKm1hdGNobGVuKQorCQkJcmV0dXJuIC0xOworCisJCSptYXRjaG9mZiA9IChhdXggLSBrKSArIHNoaWZ0OworCisJCURFQlVHUCgiJXMgbWF0Y2ggc3VjY2VlZGVkISAtIGxlbjogJXVcbiIsIGhuZm8tPmxuYW1lLAorCQkgICAgICAgKm1hdGNobGVuKTsKKwkJcmV0dXJuIDE7CisJfQorCURFQlVHUCgiJXMgaGVhZGVyIG5vdCBmb3VuZC5cbiIsIGhuZm8tPmxuYW1lKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9nZXRfaW5mbyk7CisKK3N0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJICAgIHVuaW9uIG5mX2Nvbm50cmFja19hZGRyZXNzICphZGRyLAorCQkJICAgIF9fYmUxNiBwb3J0LAorCQkJICAgIGNvbnN0IGNoYXIgKmRwdHIpCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDsKKwllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOworCWludCBmYW1pbHkgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy5sM251bTsKKwlpbnQgcmV0OworCXR5cGVvZihuZl9uYXRfc2RwX2hvb2spIG5mX25hdF9zZHA7CisKKwlleHAgPSBuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KTsKKwlpZiAoZXhwID09IE5VTEwpCisJCXJldHVybiBORl9EUk9QOworCW5mX2Nvbm50cmFja19leHBlY3RfaW5pdChleHAsIGZhbWlseSwKKwkJCQkgJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUzLCBhZGRyLAorCQkJCSBJUFBST1RPX1VEUCwgTlVMTCwgJnBvcnQpOworCisJbmZfbmF0X3NkcCA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2RwX2hvb2spOworCWlmIChuZl9uYXRfc2RwICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCisJCXJldCA9IG5mX25hdF9zZHAocHNrYiwgY3RpbmZvLCBleHAsIGRwdHIpOworCWVsc2UgeworCQlpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgIT0gMCkKKwkJCXJldCA9IE5GX0RST1A7CisJCWVsc2UKKwkJCXJldCA9IE5GX0FDQ0VQVDsKKwl9CisJbmZfY29ubnRyYWNrX2V4cGVjdF9wdXQoZXhwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2lwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAorCQkgICAgdW5zaWduZWQgaW50IHByb3RvZmYsCisJCSAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbykKK3sKKwlpbnQgZmFtaWx5ID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bTsKKwl1bmlvbiBuZl9jb25udHJhY2tfYWRkcmVzcyBhZGRyOworCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBkYXRhbGVuOworCWNvbnN0IGNoYXIgKmRwdHI7CisJaW50IHJldCA9IE5GX0FDQ0VQVDsKKwlpbnQgbWF0Y2hvZmYsIG1hdGNobGVuOworCXVfaW50MTZfdCBwb3J0OworCWVudW0gc2lwX2hlYWRlcl9wb3MgcG9zOworCXR5cGVvZihuZl9uYXRfc2lwX2hvb2spIG5mX25hdF9zaXA7CisKKwkvKiBObyBEYXRhID8gKi8KKwlkYXRhb2ZmID0gcHJvdG9mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlpZiAoZGF0YW9mZiA+PSAoKnBza2IpLT5sZW4pCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwluZl9jdF9yZWZyZXNoKGN0LCAqcHNrYiwgc2lwX3RpbWVvdXQgKiBIWik7CisKKwlpZiAoIXNrYl9pc19ub25saW5lYXIoKnBza2IpKQorCQlkcHRyID0gKCpwc2tiKS0+ZGF0YSArIGRhdGFvZmY7CisJZWxzZSB7CisJCURFQlVHUCgiQ29weSBvZiBza2J1ZmYgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJbmZfbmF0X3NpcCA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2lwX2hvb2spOworCWlmIChuZl9uYXRfc2lwICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spIHsKKwkJaWYgKCFuZl9uYXRfc2lwKHBza2IsIGN0aW5mbywgY3QsICZkcHRyKSkgeworCQkJcmV0ID0gTkZfRFJPUDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZGF0YWxlbiA9ICgqcHNrYiktPmxlbiAtIGRhdGFvZmY7CisJaWYgKGRhdGFsZW4gPCBzaXplb2YoIlNJUC8yLjAgMjAwIikgLSAxKQorCQlnb3RvIG91dDsKKworCS8qIFJUUCBpbmZvIG9ubHkgaW4gc29tZSBTRFAgcGt0cyAqLworCWlmIChtZW1jbXAoZHB0ciwgIklOVklURSIsIHNpemVvZigiSU5WSVRFIikgLSAxKSAhPSAwICYmCisJICAgIG1lbWNtcChkcHRyLCAiU0lQLzIuMCAyMDAiLCBzaXplb2YoIlNJUC8yLjAgMjAwIikgLSAxKSAhPSAwKSB7CisJCWdvdG8gb3V0OworCX0KKwkvKiBHZXQgYWRkcmVzcyBhbmQgcG9ydCBmcm9tIFNEUCBwYWNrZXQuICovCisJcG9zID0gZmFtaWx5ID09IEFGX0lORVQgPyBQT1NfQ09OTkVDVElPTl9JUDQgOiBQT1NfQ09OTkVDVElPTl9JUDY7CisJaWYgKGN0X3NpcF9nZXRfaW5mbyhjdCwgZHB0ciwgZGF0YWxlbiwgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sIHBvcykgPiAwKSB7CisKKwkJLyogV2UnbGwgZHJvcCBvbmx5IGlmIHRoZXJlIGFyZSBwYXJzZSBwcm9ibGVtcy4gKi8KKwkJaWYgKCFwYXJzZV9hZGRyKGN0LCBkcHRyICsgbWF0Y2hvZmYsIE5VTEwsICZhZGRyLAorCQkJICAgICAgICBkcHRyICsgZGF0YWxlbikpIHsKKwkJCXJldCA9IE5GX0RST1A7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY3Rfc2lwX2dldF9pbmZvKGN0LCBkcHRyLCBkYXRhbGVuLCAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICBQT1NfTUVESUEpID4gMCkgeworCisJCQlwb3J0ID0gc2ltcGxlX3N0cnRvdWwoZHB0ciArIG1hdGNob2ZmLCBOVUxMLCAxMCk7CisJCQlpZiAocG9ydCA8IDEwMjQpIHsKKwkJCQlyZXQgPSBORl9EUk9QOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcmV0ID0gc2V0X2V4cGVjdGVkX3J0cChwc2tiLCBjdCwgY3RpbmZvLCAmYWRkciwKKwkJCQkJICAgICAgIGh0b25zKHBvcnQpLCBkcHRyKTsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgc2lwW01BWF9QT1JUU11bMl0gX19yZWFkX21vc3RseTsKK3N0YXRpYyBjaGFyIHNpcF9uYW1lc1tNQVhfUE9SVFNdWzJdW3NpemVvZigic2lwLTY1NTM1IildIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19zaXBfZmluaSh2b2lkKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlpZiAoc2lwW2ldW2pdLm1lID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnNpcFtpXVtqXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG5mX2Nvbm50cmFja19zaXBfaW5pdCh2b2lkKQoreworCWludCBpLCBqLCByZXQ7CisJY2hhciAqdG1wbmFtZTsKKworCWlmIChwb3J0c19jID09IDApCisJCXBvcnRzW3BvcnRzX2MrK10gPSBTSVBfUE9SVDsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0c19jOyBpKyspIHsKKwkJbWVtc2V0KCZzaXBbaV0sIDAsIHNpemVvZihzaXBbaV0pKTsKKworCQlzaXBbaV1bMF0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDsKKwkJc2lwW2ldWzFdLnR1cGxlLnNyYy5sM251bSA9IEFGX0lORVQ2OworCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7CisJCQlzaXBbaV1bal0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJCQlzaXBbaV1bal0udHVwbGUuc3JjLnUudWRwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CisJCQlzaXBbaV1bal0ubWFzay5zcmMubDNudW0gPSAweEZGRkY7CisJCQlzaXBbaV1bal0ubWFzay5zcmMudS51ZHAucG9ydCA9IGh0b25zKDB4RkZGRik7CisJCQlzaXBbaV1bal0ubWFzay5kc3QucHJvdG9udW0gPSAweEZGOworCQkJc2lwW2ldW2pdLm1heF9leHBlY3RlZCA9IDI7CisJCQlzaXBbaV1bal0udGltZW91dCA9IDMgKiA2MDsgLyogMyBtaW51dGVzICovCisJCQlzaXBbaV1bal0ubWUgPSBUSElTX01PRFVMRTsKKwkJCXNpcFtpXVtqXS5oZWxwID0gc2lwX2hlbHA7CisKKwkJCXRtcG5hbWUgPSAmc2lwX25hbWVzW2ldW2pdWzBdOworCQkJaWYgKHBvcnRzW2ldID09IFNJUF9QT1JUKQorCQkJCXNwcmludGYodG1wbmFtZSwgInNpcCIpOworCQkJZWxzZQorCQkJCXNwcmludGYodG1wbmFtZSwgInNpcC0ldSIsIGkpOworCQkJc2lwW2ldW2pdLm5hbWUgPSB0bXBuYW1lOworCisJCQlERUJVR1AoInBvcnQgIyV1OiAldVxuIiwgaSwgcG9ydHNbaV0pOworCisJCQlyZXQgPSBuZl9jb25udHJhY2tfaGVscGVyX3JlZ2lzdGVyKCZzaXBbaV1bal0pOworCQkJaWYgKHJldCkgeworCQkJCXByaW50aygibmZfY3Rfc2lwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyICIKKwkJCQkgICAgICAgImZvciBwZjogJXUgcG9ydDogJXVcbiIsCisJCQkJICAgICAgIHNpcFtpXVtqXS50dXBsZS5zcmMubDNudW0sIHBvcnRzW2ldKTsKKwkJCQluZl9jb25udHJhY2tfc2lwX2ZpbmkoKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChuZl9jb25udHJhY2tfc2lwX2luaXQpOworbW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX3NpcF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCA1OTU0ZjY3Li5mMWNiNjBmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0yOSwxMyArMjksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNlbmRpZgogCi0jZGVmaW5lIEFTU0VSVF9SRUFEX0xPQ0soeCkKLSNkZWZpbmUgQVNTRVJUX1dSSVRFX0xPQ0soeCkKLQogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+Ci0jaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90by5oPgotI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CiAKICNpZiAwCkBAIC00NiwzMyArNDQsMTUgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1leHRlcm4gYXRvbWljX3QgbmZfY29ubnRyYWNrX2NvdW50OwotREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBpcF9jb25udHJhY2tfc3RhdCwgbmZfY29ubnRyYWNrX3N0YXQpOwotCi1zdGF0aWMgaW50IGtpbGxfbDNwcm90byhzdHJ1Y3QgbmZfY29ubiAqaSwgdm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gKGktPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bSA9PSAKLQkJCSgoc3RydWN0IG5mX2Nvbm50cmFja19sM3Byb3RvICopZGF0YSktPmwzcHJvdG8pOwotfQotCi1zdGF0aWMgaW50IGtpbGxfcHJvdG8oc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87Ci0JcHJvdG8gPSAoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqKWRhdGE7Ci0JcmV0dXJuIChpLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0gPT0gCi0JCQlwcm90by0+cHJvdG8pICYmCi0JICAgICAgIChpLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMubDNudW0gPT0KLQkJCXByb3RvLT5sM3Byb3RvKTsKLX0KLQogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50CitpbnQKIHByaW50X3R1cGxlKHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKLQkgICAgc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCisJICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bykKIHsKLQlyZXR1cm4gbDNwcm90by0+cHJpbnRfdHVwbGUocywgdHVwbGUpIHx8IHByb3RvLT5wcmludF90dXBsZShzLCB0dXBsZSk7CisJcmV0dXJuIGwzcHJvdG8tPnByaW50X3R1cGxlKHMsIHR1cGxlKSB8fCBsNHByb3RvLT5wcmludF90dXBsZShzLCB0dXBsZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChwcmludF90dXBsZSk7CiAKICNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtMTUwLDkgKzEzMCw4IEBACiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY29ubnRyYWNrID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoYXNoKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG87CisJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOwogCi0JQVNTRVJUX1JFQURfTE9DSygmbmZfY29ubnRyYWNrX2xvY2spOwogCU5GX0NUX0FTU0VSVChjb25udHJhY2spOwogCiAJLyogd2Ugb25seSB3YW50IHRvIHByaW50IERJUl9PUklHSU5BTCAqLwpAQCAtMTYzLDE2ICsxNDIsMTYgQEAKIAkJCQkgICAgICAgLnR1cGxlLnNyYy5sM251bSk7CiAKIAlORl9DVF9BU1NFUlQobDNwcm90byk7Ci0JcHJvdG8gPSBfX25mX2N0X3Byb3RvX2ZpbmQoY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXQorCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChjb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCiAJCQkJICAgLnR1cGxlLnNyYy5sM251bSwKIAkJCQkgICBjb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdCiAJCQkJICAgLnR1cGxlLmRzdC5wcm90b251bSk7Ci0JTkZfQ1RfQVNTRVJUKHByb3RvKTsKKwlORl9DVF9BU1NFUlQobDRwcm90byk7CiAKIAlpZiAoc2VxX3ByaW50ZihzLCAiJS04cyAldSAlLThzICV1ICVsZCAiLAogCQkgICAgICAgbDNwcm90by0+bmFtZSwKIAkJICAgICAgIGNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLmwzbnVtLAotCQkgICAgICAgcHJvdG8tPm5hbWUsCisJCSAgICAgICBsNHByb3RvLT5uYW1lLAogCQkgICAgICAgY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5kc3QucHJvdG9udW0sCiAJCSAgICAgICB0aW1lcl9wZW5kaW5nKCZjb25udHJhY2stPnRpbWVvdXQpCiAJCSAgICAgICA/IChsb25nKShjb25udHJhY2stPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpL0haIDogMCkgIT0gMCkKQEAgLTE4MSwxMSArMTYwLDExIEBACiAJaWYgKGwzcHJvdG8tPnByaW50X2Nvbm50cmFjayhzLCBjb25udHJhY2spKQogCQlyZXR1cm4gLUVOT1NQQzsKIAotCWlmIChwcm90by0+cHJpbnRfY29ubnRyYWNrKHMsIGNvbm50cmFjaykpCisJaWYgKGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayhzLCBjb25udHJhY2spKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWlmIChwcmludF90dXBsZShzLCAmY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKLQkJCWwzcHJvdG8sIHByb3RvKSkKKwkJCWwzcHJvdG8sIGw0cHJvdG8pKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWlmIChzZXFfcHJpbnRfY291bnRlcnMocywgJmNvbm50cmFjay0+Y291bnRlcnNbSVBfQ1RfRElSX09SSUdJTkFMXSkpCkBAIC0xOTYsNyArMTc1LDcgQEAKIAkJCXJldHVybiAtRU5PU1BDOwogCiAJaWYgKHByaW50X3R1cGxlKHMsICZjb25udHJhY2stPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLAotCQkJbDNwcm90bywgcHJvdG8pKQorCQkJbDNwcm90bywgbDRwcm90bykpCiAJCXJldHVybiAtRU5PU1BDOwogCiAJaWYgKHNlcV9wcmludF9jb3VudGVycyhzLCAmY29ubnRyYWNrLT5jb3VudGVyc1tJUF9DVF9ESVJfUkVQTFldKSkKQEAgLTI1OCw4NCArMjM3LDYgQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCi0vKiBleHBlY3RzICovCi1zdGF0aWMgdm9pZCAqZXhwX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmUgPSAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0OwotCWxvZmZfdCBpOwotCi0JLyogc3RyYW5nZSBzZXFfZmlsZSBhcGkgY2FsbHMgc3RvcCBldmVuIGlmIHdlIGZhaWwsCi0JICogdGh1cyB3ZSBuZWVkIHRvIGdyYWIgbG9jayBzaW5jZSBzdG9wIHVubG9ja3MgKi8KLQlyZWFkX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQotCWlmIChsaXN0X2VtcHR5KGUpKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPD0gKnBvczsgaSsrKSB7Ci0JCWUgPSBlLT5uZXh0OwotCQlpZiAoZSA9PSAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0KQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiBlOwotfQotCi1zdGF0aWMgdm9pZCAqZXhwX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZSA9IHY7Ci0KLQkrKypwb3M7Ci0JZSA9IGUtPm5leHQ7Ci0KLQlpZiAoZSA9PSAmbmZfY29ubnRyYWNrX2V4cGVjdF9saXN0KQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBlOwotfQotCi1zdGF0aWMgdm9pZCBleHBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotewotCXJlYWRfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgZXhwX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKLXsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwZWN0ID0gdjsKLQotCWlmIChleHBlY3QtPnRpbWVvdXQuZnVuY3Rpb24pCi0JCXNlcV9wcmludGYocywgIiVsZCAiLCB0aW1lcl9wZW5kaW5nKCZleHBlY3QtPnRpbWVvdXQpCi0JCQkgICA/IChsb25nKShleHBlY3QtPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpL0haIDogMCk7Ci0JZWxzZQotCQlzZXFfcHJpbnRmKHMsICItICIpOwotCXNlcV9wcmludGYocywgImwzcHJvdG8gPSAldSBwcm90bz0ldSAiLAotCQkgICBleHBlY3QtPnR1cGxlLnNyYy5sM251bSwKLQkJICAgZXhwZWN0LT50dXBsZS5kc3QucHJvdG9udW0pOwotCXByaW50X3R1cGxlKHMsICZleHBlY3QtPnR1cGxlLAotCQkgICAgX19uZl9jdF9sM3Byb3RvX2ZpbmQoZXhwZWN0LT50dXBsZS5zcmMubDNudW0pLAotCQkgICAgX19uZl9jdF9wcm90b19maW5kKGV4cGVjdC0+dHVwbGUuc3JjLmwzbnVtLAotCQkJCSAgICAgICBleHBlY3QtPnR1cGxlLmRzdC5wcm90b251bSkpOwotCXJldHVybiBzZXFfcHV0YyhzLCAnXG4nKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBleHBfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBleHBfc2VxX3N0YXJ0LAotCS5uZXh0ID0gZXhwX3NlcV9uZXh0LAotCS5zdG9wID0gZXhwX3NlcV9zdG9wLAotCS5zaG93ID0gZXhwX3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IGV4cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmZXhwX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHBfZmlsZV9vcHMgPSB7Ci0JLm93bmVyICAgPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICA9IGV4cF9vcGVuLAotCS5yZWFkICAgID0gc2VxX3JlYWQsCi0JLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZQotfTsKLQogc3RhdGljIHZvaWQgKmN0X2NwdV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewogCWludCBjcHU7CkBAIC00MjgsMzQgKzMyOSw5IEBACiAvKiBTeXNjdGwgc3VwcG9ydCAqLwogCiBpbnQgbmZfY29ubnRyYWNrX2NoZWNrc3VtIF9fcmVhZF9tb3N0bHkgPSAxOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2NoZWNrc3VtKTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLQotLyogRnJvbSBuZl9jb25udHJhY2tfY29yZS5jICovCi1leHRlcm4gaW50IG5mX2Nvbm50cmFja19tYXg7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKLQotLyogRnJvbSBuZl9jb25udHJhY2tfcHJvdG9fdGNwLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X3N5bl9yZWN2OwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9lc3RhYmxpc2hlZDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfdGNwX3RpbWVvdXRfZmluX3dhaXQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrOwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF90aW1lX3dhaXQ7Ci1leHRlcm4gdW5zaWduZWQgaW50IG5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlOwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF90Y3BfdGltZW91dF9tYXhfcmV0cmFuczsKLWV4dGVybiBpbnQgbmZfY3RfdGNwX2xvb3NlOwotZXh0ZXJuIGludCBuZl9jdF90Y3BfYmVfbGliZXJhbDsKLWV4dGVybiBpbnQgbmZfY3RfdGNwX21heF9yZXRyYW5zOwotCi0vKiBGcm9tIG5mX2Nvbm50cmFja19wcm90b191ZHAuYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jdF91ZHBfdGltZW91dDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtOwotCi0vKiBGcm9tIG5mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY3RfZ2VuZXJpY190aW1lb3V0OwotCiAvKiBMb2cgaW52YWxpZCBwYWNrZXRzIG9mIGEgZ2l2ZW4gcHJvdG9jb2wgKi8KIHN0YXRpYyBpbnQgbG9nX2ludmFsaWRfcHJvdG9fbWluID0gMDsKIHN0YXRpYyBpbnQgbG9nX2ludmFsaWRfcHJvdG9fbWF4ID0gMjU1OwpAQCAtNDk2LDk0ICszNzIsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1NFTlQsCi0JCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfc3luX3NlbnQiLAotCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9SRUNWLAotCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9yZWN2IiwKLQkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3N5bl9yZWN2LAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9FU1RBQkxJU0hFRCwKLQkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9lc3RhYmxpc2hlZCIsCi0JCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9lc3RhYmxpc2hlZCwKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRklOX1dBSVQsCi0JCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfZmluX3dhaXQiLAotCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfZmluX3dhaXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFX1dBSVQsCi0JCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfY2xvc2Vfd2FpdCIsCi0JCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9jbG9zZV93YWl0LAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSywKLQkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9sYXN0X2FjayIsCi0JCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9sYXN0X2FjaywKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfVElNRV9XQUlULAotCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X3RpbWVfd2FpdCIsCi0JCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF90aW1lX3dhaXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFLAotCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Nsb3NlIiwKLQkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2Nsb3NlLAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19VRFBfVElNRU9VVCwKLQkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja191ZHBfdGltZW91dCIsCi0JCS5kYXRhCQk9ICZuZl9jdF91ZHBfdGltZW91dCwKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVRfU1RSRUFNLAotCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3VkcF90aW1lb3V0X3N0cmVhbSIsCi0JCS5kYXRhCQk9ICZuZl9jdF91ZHBfdGltZW91dF9zdHJlYW0sCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0dFTkVSSUNfVElNRU9VVCwKLQkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19nZW5lcmljX3RpbWVvdXQiLAotCQkuZGF0YQkJPSAmbmZfY3RfZ2VuZXJpY190aW1lb3V0LAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKLQl9LAotCXsKIAkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19MT0dfSU5WQUxJRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19sb2dfaW52YWxpZCIsCiAJCS5kYXRhCQk9ICZuZl9jdF9sb2dfaW52YWxpZCwKQEAgLTU5NCwzOCArMzgyLDYgQEAKIAkJLmV4dHJhMQkJPSAmbG9nX2ludmFsaWRfcHJvdG9fbWluLAogCQkuZXh0cmEyCQk9ICZsb2dfaW52YWxpZF9wcm90b19tYXgsCiAJfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlMsCi0JCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMiLAotCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9MT09TRSwKLQkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfbG9vc2UiLAotCQkuZGF0YQkJPSAmbmZfY3RfdGNwX2xvb3NlLAotCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX0JFX0xJQkVSQUwsCi0JCS5wcm9jbmFtZSAgICAgICA9ICJuZl9jb25udHJhY2tfdGNwX2JlX2xpYmVyYWwiLAotCQkuZGF0YSAgICAgICAgICAgPSAmbmZfY3RfdGNwX2JlX2xpYmVyYWwsCi0JCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfTUFYX1JFVFJBTlMsCi0JCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX21heF9yZXRyYW5zIiwKLQkJLmRhdGEJCT0gJm5mX2N0X3RjcF9tYXhfcmV0cmFucywKLQkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCiAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKQEAgLTY1OSwxMDkgKzQxNSw5IEBACiAJfSwKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKLUVYUE9SVF9TWU1CT0wobmZfY3RfbG9nX2ludmFsaWQpOworRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfbG9nX2ludmFsaWQpOwogI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAotaW50IG5mX2Nvbm50cmFja19sM3Byb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqcHJvdG8pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQl3cml0ZV9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JaWYgKG5mX2N0X2wzcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSAhPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfbDNwcm90bykgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQluZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10gPSBwcm90bzsKLW91dDoKLQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgbmZfY29ubnRyYWNrX2wzcHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKnByb3RvKQotewotCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQluZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10gPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfbDNwcm90bzsKLQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkKLQkvKiBTb21lYm9keSBjb3VsZCBiZSBzdGlsbCBsb29raW5nIGF0IHRoZSBwcm90byBpbiBiaC4gKi8KLQlzeW5jaHJvbml6ZV9uZXQoKTsKLQotCS8qIFJlbW92ZSBhbGwgY29udHJhY2sgZW50cmllcyBmb3IgdGhpcyBwcm90b2NvbCAqLwotCW5mX2N0X2l0ZXJhdGVfY2xlYW51cChraWxsX2wzcHJvdG8sIHByb3RvKTsKLX0KLQotLyogRklYTUU6IEFsbG93IE5VTEwgZnVuY3Rpb25zIGFuZCBzdWIgaW4gcG9pbnRlcnMgdG8gZ2VuZXJpYyBmb3IKLSAgIHRoZW0uIC0tUlIgKi8KLWludCBuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIoc3RydWN0IG5mX2Nvbm50cmFja19wcm90b2NvbCAqcHJvdG8pCi17Ci0JaW50IHJldCA9IDA7Ci0KLXJldHJ5OgotCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlpZiAobmZfY3RfcHJvdG9zW3Byb3RvLT5sM3Byb3RvXSkgewotCQlpZiAobmZfY3RfcHJvdG9zW3Byb3RvLT5sM3Byb3RvXVtwcm90by0+cHJvdG9dCi0JCQkJIT0gJm5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBsM3Byb3RvIG1heSBiZSBsb2FkZWQgbGF0dGVyLiAqLwotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3Byb3RvY29sICoqcHJvdG9fYXJyYXk7Ci0JCWludCBpOwotCi0JCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCi0JCXByb3RvX2FycmF5ID0gKHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKiopCi0JCQkJa21hbGxvYyhNQVhfTkZfQ1RfUFJPVE8gKgotCQkJCQkgc2l6ZW9mKHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKiksCi0JCQkJCUdGUF9LRVJORUwpOwotCQlpZiAocHJvdG9fYXJyYXkgPT0gTlVMTCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfTkZfQ1RfUFJPVE87IGkrKykKLQkJCXByb3RvX2FycmF5W2ldID0gJm5mX2Nvbm50cmFja19nZW5lcmljX3Byb3RvY29sOwotCi0JCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJaWYgKG5mX2N0X3Byb3Rvc1twcm90by0+bDNwcm90b10pIHsKLQkJCS8qIGJhZCB0aW1pbmcsIGJ1dCBubyBwcm9ibGVtICovCi0JCQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJCWtmcmVlKHByb3RvX2FycmF5KTsKLQkJfSBlbHNlIHsKLQkJCW5mX2N0X3Byb3Rvc1twcm90by0+bDNwcm90b10gPSBwcm90b19hcnJheTsKLQkJCXdyaXRlX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCQl9Ci0KLQkJLyoKLQkJICogSnVzdCBvbmNlIGJlY2F1c2UgYXJyYXkgaXMgbmV2ZXIgZnJlZWQgdW50aWwgdW5sb2FkaW5nCi0JCSAqIG5mX2Nvbm50cmFjay5rbwotCQkgKi8KLQkJZ290byByZXRyeTsKLQl9Ci0KLQluZl9jdF9wcm90b3NbcHJvdG8tPmwzcHJvdG9dW3Byb3RvLT5wcm90b10gPSBwcm90bzsKLQotb3V0X3VubG9jazoKLQl3cml0ZV91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIG5mX2Nvbm50cmFja19wcm90b2NvbF91bnJlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfcHJvdG9jb2wgKnByb3RvKQotewotCXdyaXRlX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQluZl9jdF9wcm90b3NbcHJvdG8tPmwzcHJvdG9dW3Byb3RvLT5wcm90b10KLQkJPSAmbmZfY29ubnRyYWNrX2dlbmVyaWNfcHJvdG9jb2w7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JCi0JLyogU29tZWJvZHkgY291bGQgYmUgc3RpbGwgbG9va2luZyBhdCB0aGUgcHJvdG8gaW4gYmguICovCi0Jc3luY2hyb25pemVfbmV0KCk7Ci0KLQkvKiBSZW1vdmUgYWxsIGNvbnRyYWNrIGVudHJpZXMgZm9yIHRoaXMgcHJvdG9jb2wgKi8KLQluZl9jdF9pdGVyYXRlX2NsZWFudXAoa2lsbF9wcm90bywgcHJvdG8pOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfc3RhbmRhbG9uZV9pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTgzNCw3MCArNDkwLDQgQEAKIHZvaWQgbmVlZF9jb25udHJhY2sodm9pZCkKIHsKIH0KLQotI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCi1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY2hhaW4pOwotRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2V4cGVjdF9jaGFpbik7Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfcmVnaXN0ZXJfbm90aWZpZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX3VucmVnaXN0ZXJfbm90aWZpZXIpOwotRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jdF9ldmVudF9jYWNoZV9pbml0KTsKLUVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX2VjYWNoZSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMpOwotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfbDNwcm90b19yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19sM3Byb3RvX3VucmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfcHJvdG9jb2xfdW5yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKG5mX2N0X2ludmVydF90dXBsZXByKTsKLUVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2Rlc3Ryb3llZCk7Ci1FWFBPUlRfU1lNQk9MKG5lZWRfY29ubnRyYWNrKTsKLUVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKG5mX2N0X2l0ZXJhdGVfY2xlYW51cCk7Ci1FWFBPUlRfU1lNQk9MKF9fbmZfY3RfcmVmcmVzaF9hY2N0KTsKLUVYUE9SVF9TWU1CT0wobmZfY3RfcHJvdG9zKTsKLUVYUE9SVF9TWU1CT0woX19uZl9jdF9wcm90b19maW5kKTsKLUVYUE9SVF9TWU1CT0wobmZfY3RfcHJvdG9fZmluZF9nZXQpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9wcm90b19wdXQpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KTsKLUVYUE9SVF9TWU1CT0wobmZfY3RfbDNwcm90b19wdXQpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9sM3Byb3Rvcyk7Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfY2hlY2tzdW0pOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKTsKLUVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2V4cGVjdF9wdXQpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZXhwZWN0X3JlbGF0ZWQpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfdW5leHBlY3RfcmVsYXRlZCk7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja190dXBsZV90YWtlbik7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19sb2NrKTsKLUVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX2hhc2gpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfdW50cmFja2VkKTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19maW5kX2dldCk7Ci0jaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKLUVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3RjcF91cGRhdGUpOwotI2VuZGlmCi1FWFBPUlRfU1lNQk9MKF9fbmZfY29ubnRyYWNrX2NvbmZpcm0pOwotRVhQT1JUX1NZTUJPTChuZl9jdF9nZXRfdHVwbGUpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9pbnZlcnRfdHVwbGUpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfaW4pOwotRVhQT1JUX1NZTUJPTChfX25mX2Nvbm50cmFja19hdHRhY2gpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfYWxsb2MpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfZnJlZSk7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19mbHVzaCk7Ci1FWFBPUlRfU1lNQk9MKG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9oZWxwZXJfZmluZF9nZXQpOwotRVhQT1JUX1NZTUJPTChuZl9jdF9oZWxwZXJfcHV0KTsKLUVYUE9SVF9TWU1CT0woX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKTsKLUVYUE9SVF9TWU1CT0woX19uZl9jb25udHJhY2tfZmluZCk7Ci1FWFBPUlRfU1lNQk9MKG5mX2N0X3VubGlua19leHBlY3QpOwotRVhQT1JUX1NZTUJPTChuZl9jb25udHJhY2tfaGFzaF9pbnNlcnQpOwotRVhQT1JUX1NZTUJPTChfX25mX2Nvbm50cmFja19leHBlY3RfZmluZCk7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19leHBlY3RfZmluZCk7Ci1FWFBPUlRfU1lNQk9MKG5mX2Nvbm50cmFja19leHBlY3RfbGlzdCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQotRVhQT1JUX1NZTUJPTChuZl9jdF9wb3J0X3R1cGxlX3RvX25mYXR0cik7Ci1FWFBPUlRfU1lNQk9MKG5mX2N0X3BvcnRfbmZhdHRyX3RvX3R1cGxlKTsKLSNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwobmVlZF9jb25udHJhY2spOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGZ0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YmZmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190ZnRwLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qIChDKSAyMDAxLTIwMDIgTWFnbnVzIEJvZGVuIDxtYkBvemFiYS5taW5lLm51PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RmdHAuaD4KKworTU9EVUxFX0FVVEhPUigiTWFnbnVzIEJvZGVuIDxtYkBvemFiYS5taW5lLm51PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJURlRQIGNvbm5lY3Rpb24gdHJhY2tpbmcgaGVscGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwX2Nvbm50cmFja190ZnRwIik7CisKKyNkZWZpbmUgTUFYX1BPUlRTIDgKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBwb3J0c1tNQVhfUE9SVFNdOworc3RhdGljIGludCBwb3J0c19jOworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsICZwb3J0c19jLCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9ydHMsICJQb3J0IG51bWJlcnMgb2YgVEZUUCBzZXJ2ZXJzIik7CisKKyNpZiAwCisjZGVmaW5lIERFQlVHUChmb3JtYXQsIGFyZ3MuLi4pIHByaW50aygiJXM6JXM6IiBmb3JtYXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdQKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfdGZ0cF9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJCQkJIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3RmdHBfaG9vayk7CisKK3N0YXRpYyBpbnQgdGZ0cF9oZWxwKHN0cnVjdCBza19idWZmICoqcHNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJICAgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJc3RydWN0IHRmdHBoZHIgX3RmdHBoLCAqdGZoOworCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGU7CisJdW5zaWduZWQgaW50IHJldCA9IE5GX0FDQ0VQVDsKKwlpbnQgZmFtaWx5ID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLnNyYy5sM251bTsKKwl0eXBlb2YobmZfbmF0X3RmdHBfaG9vaykgbmZfbmF0X3RmdHA7CisKKwl0ZmggPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsIHByb3RvZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkciksCisJCQkJIHNpemVvZihfdGZ0cGgpLCAmX3RmdHBoKTsKKwlpZiAodGZoID09IE5VTEwpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKKwlzd2l0Y2ggKG50b2hzKHRmaC0+b3Bjb2RlKSkgeworCWNhc2UgVEZUUF9PUENPREVfUkVBRDoKKwljYXNlIFRGVFBfT1BDT0RFX1dSSVRFOgorCQkvKiBSUlEgYW5kIFdSUSB3b3JrcyB0aGUgc2FtZSB3YXkgKi8KKwkJREVCVUdQKCIiKTsKKwkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlKTsKKwkJTkZfQ1RfRFVNUF9UVVBMRSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKworCQlleHAgPSBuZl9jb25udHJhY2tfZXhwZWN0X2FsbG9jKGN0KTsKKwkJaWYgKGV4cCA9PSBOVUxMKQorCQkJcmV0dXJuIE5GX0RST1A7CisJCXR1cGxlID0gJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZTsKKwkJbmZfY29ubnRyYWNrX2V4cGVjdF9pbml0KGV4cCwgZmFtaWx5LAorCQkJCQkgJnR1cGxlLT5zcmMudTMsICZ0dXBsZS0+ZHN0LnUzLAorCQkJCQkgSVBQUk9UT19VRFAsCisJCQkJCSBOVUxMLCAmdHVwbGUtPmRzdC51LnVkcC5wb3J0KTsKKworCQlERUJVR1AoImV4cGVjdDogIik7CisJCU5GX0NUX0RVTVBfVFVQTEUoJmV4cC0+dHVwbGUpOworCQlORl9DVF9EVU1QX1RVUExFKCZleHAtPm1hc2spOworCisJCW5mX25hdF90ZnRwID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF90ZnRwX2hvb2spOworCQlpZiAobmZfbmF0X3RmdHAgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykKKwkJCXJldCA9IG5mX25hdF90ZnRwKHBza2IsIGN0aW5mbywgZXhwKTsKKwkJZWxzZSBpZiAobmZfY29ubnRyYWNrX2V4cGVjdF9yZWxhdGVkKGV4cCkgIT0gMCkKKwkJCXJldCA9IE5GX0RST1A7CisJCW5mX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CisJCWJyZWFrOworCWNhc2UgVEZUUF9PUENPREVfREFUQToKKwljYXNlIFRGVFBfT1BDT0RFX0FDSzoKKwkJREVCVUdQKCJEYXRhL0FDSyBvcGNvZGVcbiIpOworCQlicmVhazsKKwljYXNlIFRGVFBfT1BDT0RFX0VSUk9SOgorCQlERUJVR1AoIkVycm9yIG9wY29kZVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQlVHUCgiVW5rbm93biBvcGNvZGVcbiIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgdGZ0cFtNQVhfUE9SVFNdWzJdIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgY2hhciB0ZnRwX25hbWVzW01BWF9QT1JUU11bMl1bc2l6ZW9mKCJ0ZnRwLTY1NTM1IildIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyB2b2lkIG5mX2Nvbm50cmFja190ZnRwX2Zpbmkodm9pZCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0c19jOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykKKwkJCW5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcigmdGZ0cFtpXVtqXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfdGZ0cF9pbml0KHZvaWQpCit7CisJaW50IGksIGosIHJldDsKKwljaGFyICp0bXBuYW1lOworCisJaWYgKHBvcnRzX2MgPT0gMCkKKwkJcG9ydHNbcG9ydHNfYysrXSA9IFRGVFBfUE9SVDsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0c19jOyBpKyspIHsKKwkJbWVtc2V0KCZ0ZnRwW2ldLCAwLCBzaXplb2YodGZ0cFtpXSkpOworCisJCXRmdHBbaV1bMF0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDsKKwkJdGZ0cFtpXVsxXS50dXBsZS5zcmMubDNudW0gPSBBRl9JTkVUNjsKKwkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgeworCQkJdGZ0cFtpXVtqXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKKwkJCXRmdHBbaV1bal0udHVwbGUuc3JjLnUudWRwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CisJCQl0ZnRwW2ldW2pdLm1hc2suc3JjLmwzbnVtID0gMHhGRkZGOworCQkJdGZ0cFtpXVtqXS5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CisJCQl0ZnRwW2ldW2pdLm1hc2suc3JjLnUudWRwLnBvcnQgPSBodG9ucygweEZGRkYpOworCQkJdGZ0cFtpXVtqXS5tYXhfZXhwZWN0ZWQgPSAxOworCQkJdGZ0cFtpXVtqXS50aW1lb3V0ID0gNSAqIDYwOyAvKiA1IG1pbnV0ZXMgKi8KKwkJCXRmdHBbaV1bal0ubWUgPSBUSElTX01PRFVMRTsKKwkJCXRmdHBbaV1bal0uaGVscCA9IHRmdHBfaGVscDsKKworCQkJdG1wbmFtZSA9ICZ0ZnRwX25hbWVzW2ldW2pdWzBdOworCQkJaWYgKHBvcnRzW2ldID09IFRGVFBfUE9SVCkKKwkJCQlzcHJpbnRmKHRtcG5hbWUsICJ0ZnRwIik7CisJCQllbHNlCisJCQkJc3ByaW50Zih0bXBuYW1lLCAidGZ0cC0ldSIsIGkpOworCQkJdGZ0cFtpXVtqXS5uYW1lID0gdG1wbmFtZTsKKworCQkJcmV0ID0gbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcigmdGZ0cFtpXVtqXSk7CisJCQlpZiAocmV0KSB7CisJCQkJcHJpbnRrKCJuZl9jdF90ZnRwOiBmYWlsZWQgdG8gcmVnaXN0ZXIgaGVscGVyICIKKwkJCQkgICAgICAgImZvciBwZjogJXUgcG9ydDogJXVcbiIsCisJCQkJCXRmdHBbaV1bal0udHVwbGUuc3JjLmwzbnVtLCBwb3J0c1tpXSk7CisJCQkJbmZfY29ubnRyYWNrX3RmdHBfZmluaSgpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KG5mX2Nvbm50cmFja190ZnRwX2luaXQpOworbW9kdWxlX2V4aXQobmZfY29ubnRyYWNrX3RmdHBfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3N5c2N0bC5jIGIvbmV0L25ldGZpbHRlci9uZl9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmRkZGRiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci9uZl9zeXNjdGwuYwpAQCAtMCwwICsxLDEzNCBAQAorLyogbmZfc3lzY3RsLmMJbmV0ZmlsdGVyIHN5c2N0bCByZWdpc3RyYXRpb24vdW5yZWdpc3RhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RhdGljIHZvaWQKK3BhdGhfZnJlZShzdHJ1Y3QgY3RsX3RhYmxlICpwYXRoLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKK3sKKwlzdHJ1Y3QgY3RsX3RhYmxlICp0LCAqbmV4dDsKKworCWZvciAodCA9IHBhdGg7IHQgIT0gTlVMTCAmJiB0ICE9IHRhYmxlOyB0ID0gbmV4dCkgeworCQluZXh0ID0gdC0+Y2hpbGQ7CisJCWtmcmVlKHQpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgKgorcGF0aF9kdXAoc3RydWN0IGN0bF90YWJsZSAqcGF0aCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJc3RydWN0IGN0bF90YWJsZSAqdCwgKmxhc3QgPSBOVUxMLCAqdG1wOworCisJZm9yICh0ID0gcGF0aDsgdCAhPSBOVUxMOyB0ID0gdC0+Y2hpbGQpIHsKKwkJLyogdHdpY2UgdGhlIHNpemUgc2luY2UgcGF0aCBlbGVtZW50cyBhcmUgdGVybWluYXRlZCBieSBhbgorCQkgKiBlbXB0eSBlbGVtZW50ICovCisJCXRtcCA9IGttZW1kdXAodCwgMiAqIHNpemVvZigqdCksIEdGUF9LRVJORUwpOworCQlpZiAodG1wID09IE5VTEwpIHsKKwkJCWlmIChsYXN0ICE9IE5VTEwpCisJCQkJcGF0aF9mcmVlKHBhdGgsIHRhYmxlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKGxhc3QgIT0gTlVMTCkKKwkJCWxhc3QtPmNoaWxkID0gdG1wOworCQllbHNlCisJCQlwYXRoID0gdG1wOworCQlsYXN0ID0gdG1wOworCX0KKworCWlmIChsYXN0ICE9IE5VTEwpCisJCWxhc3QtPmNoaWxkID0gdGFibGU7CisJZWxzZQorCQlwYXRoID0gdGFibGU7CisKKwlyZXR1cm4gcGF0aDsKK30KKworc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKgorbmZfcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKnBhdGgsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXI7CisKKwlwYXRoID0gcGF0aF9kdXAocGF0aCwgdGFibGUpOworCWlmIChwYXRoID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWhlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF90YWJsZShwYXRoLCAwKTsKKwlpZiAoaGVhZGVyID09IE5VTEwpCisJCXBhdGhfZnJlZShwYXRoLCB0YWJsZSk7CisJcmV0dXJuIGhlYWRlcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX3JlZ2lzdGVyX3N5c2N0bF90YWJsZSk7CisKK3ZvaWQKK25mX3VucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIsCisJCQkgICBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKK3sKKwlzdHJ1Y3QgY3RsX3RhYmxlICpwYXRoID0gaGVhZGVyLT5jdGxfdGFibGU7CisKKwl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShoZWFkZXIpOworCXBhdGhfZnJlZShwYXRoLCB0YWJsZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl91bnJlZ2lzdGVyX3N5c2N0bF90YWJsZSk7CisKKy8qIG5ldC9uZXRmaWx0ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX25ldF9uZXRmaWx0ZXJfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9ORVRGSUxURVIsCisJCS5wcm9jbmFtZQk9ICJuZXRmaWx0ZXIiLAorCQkubW9kZQkJPSAwNTU1LAorCX0sCisJeworCQkuY3RsX25hbWUJPSAwCisJfQorfTsKK3N0cnVjdCBjdGxfdGFibGUgbmZfbmV0X25ldGZpbHRlcl9zeXNjdGxfcGF0aFtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX05FVCwKKwkJLnByb2NuYW1lCT0gIm5ldCIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBuZl9uZXRfbmV0ZmlsdGVyX3RhYmxlLAorCX0sCisJeworCQkuY3RsX25hbWUJPSAwCisJfQorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25ldF9uZXRmaWx0ZXJfc3lzY3RsX3BhdGgpOworCisvKiBuZXQvaXB2NC9uZXRmaWx0ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIG5mX25ldF9pcHY0X25ldGZpbHRlcl90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkVURklMVEVSLAorCQkucHJvY25hbWUJPSAibmV0ZmlsdGVyIiwKKwkJLm1vZGUJCT0gMDU1NSwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9uZXRfaXB2NF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gTkVUX0lQVjQsCisJCS5wcm9jbmFtZQk9ICJpcHY0IiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IG5mX25ldF9pcHY0X25ldGZpbHRlcl90YWJsZSwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CitzdHJ1Y3QgY3RsX3RhYmxlIG5mX25ldF9pcHY0X25ldGZpbHRlcl9zeXNjdGxfcGF0aFtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX05FVCwKKwkJLnByb2NuYW1lCT0gIm5ldCIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBuZl9uZXRfaXB2NF90YWJsZSwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gMAorCX0KK307CitFWFBPUlRfU1lNQk9MX0dQTChuZl9uZXRfaXB2NF9uZXRmaWx0ZXJfc3lzY3RsX3BhdGgpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCAxZTUyMDdiLi5kMTUwNWRkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtNDA4LDEzICs0MDgsMTMgQEAKIAkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldiwKIAkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYsCiAJCQljb25zdCBzdHJ1Y3QgbmZfbG9naW5mbyAqbGksCi0JCQljb25zdCBjaGFyICpwcmVmaXgpCisJCQljb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGludCBwbGVuKQogewogCXVuc2lnbmVkIGNoYXIgKm9sZF90YWlsOwogCXN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgcG1zZzsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnOwotCXVfaW50MzJfdCB0bXBfdWludDsKKwlfX2JlMzIgdG1wX3VpbnQ7CiAKIAlVREVCVUcoImVudGVyZWRcbiIpOwogCQkKQEAgLTQzMiwxMiArNDMyLDggQEAKIAogCU5GQV9QVVQoaW5zdC0+c2tiLCBORlVMQV9QQUNLRVRfSERSLCBzaXplb2YocG1zZyksICZwbXNnKTsKIAotCWlmIChwcmVmaXgpIHsKLQkJaW50IHNsZW4gPSBzdHJsZW4ocHJlZml4KTsKLQkJaWYgKHNsZW4gPiBORlVMTkxfUFJFRklYTEVOKQotCQkJc2xlbiA9IE5GVUxOTF9QUkVGSVhMRU47Ci0JCU5GQV9QVVQoaW5zdC0+c2tiLCBORlVMQV9QUkVGSVgsIHNsZW4sIHByZWZpeCk7Ci0JfQorCWlmIChwcmVmaXgpCisJCU5GQV9QVVQoaW5zdC0+c2tiLCBORlVMQV9QUkVGSVgsIHBsZW4sIHByZWZpeCk7CiAKIAlpZiAoaW5kZXYpIHsKIAkJdG1wX3VpbnQgPSBodG9ubChpbmRldi0+aWZpbmRleCk7CkBAIC01MDEsMTggKzQ5NywxNiBAQAogI2VuZGlmCiAJfQogCi0JaWYgKHNrYi0+bmZtYXJrKSB7Ci0JCXRtcF91aW50ID0gaHRvbmwoc2tiLT5uZm1hcmspOworCWlmIChza2ItPm1hcmspIHsKKwkJdG1wX3VpbnQgPSBodG9ubChza2ItPm1hcmspOwogCQlORkFfUFVUKGluc3QtPnNrYiwgTkZVTEFfTUFSSywgc2l6ZW9mKHRtcF91aW50KSwgJnRtcF91aW50KTsKIAl9CiAKIAlpZiAoaW5kZXYgJiYgc2tiLT5kZXYgJiYgc2tiLT5kZXYtPmhhcmRfaGVhZGVyX3BhcnNlKSB7CiAJCXN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9odyBwaHc7Ci0KLQkJcGh3Lmh3X2FkZHJsZW4gPSAKLQkJCXNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9wYXJzZSgoc3RydWN0IHNrX2J1ZmYgKilza2IsIAorCQlpbnQgbGVuID0gc2tiLT5kZXYtPmhhcmRfaGVhZGVyX3BhcnNlKChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYiwKIAkJCQkJCSAgICBwaHcuaHdfYWRkcik7Ci0JCXBody5od19hZGRybGVuID0gaHRvbnMocGh3Lmh3X2FkZHJsZW4pOworCQlwaHcuaHdfYWRkcmxlbiA9IGh0b25zKGxlbik7CiAJCU5GQV9QVVQoaW5zdC0+c2tiLCBORlVMQV9IV0FERFIsIHNpemVvZihwaHcpLCAmcGh3KTsKIAl9CiAKQEAgLTUyOSw3ICs1MjMsNyBAQAogCWlmIChza2ItPnNrKSB7CiAJCXJlYWRfbG9ja19iaCgmc2tiLT5zay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJCWlmIChza2ItPnNrLT5za19zb2NrZXQgJiYgc2tiLT5zay0+c2tfc29ja2V0LT5maWxlKSB7Ci0JCQl1X2ludDMyX3QgdWlkID0gaHRvbmwoc2tiLT5zay0+c2tfc29ja2V0LT5maWxlLT5mX3VpZCk7CisJCQlfX2JlMzIgdWlkID0gaHRvbmwoc2tiLT5zay0+c2tfc29ja2V0LT5maWxlLT5mX3VpZCk7CiAJCQkvKiBuZWVkIHRvIHVubG9jayBoZXJlIHNpbmNlIE5GQV9QVVQgbWF5IGdvdG8gKi8KIAkJCXJlYWRfdW5sb2NrX2JoKCZza2ItPnNrLT5za19jYWxsYmFja19sb2NrKTsKIAkJCU5GQV9QVVQoaW5zdC0+c2tiLCBORlVMQV9VSUQsIHNpemVvZih1aWQpLCAmdWlkKTsKQEAgLTYwMyw2ICs1OTcsNyBAQAogCWNvbnN0IHN0cnVjdCBuZl9sb2dpbmZvICpsaTsKIAl1bnNpZ25lZCBpbnQgcXRocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgbmxidWZzaXo7CisJdW5zaWduZWQgaW50IHBsZW47CiAKIAlpZiAobGlfdXNlciAmJiBsaV91c2VyLT50eXBlID09IE5GX0xPR19UWVBFX1VMT0cpIAogCQlsaSA9IGxpX3VzZXI7CkBAIC02MTgsNiArNjEzLDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwlwbGVuID0gMDsKKwlpZiAocHJlZml4KQorCQlwbGVuID0gc3RybGVuKHByZWZpeCk7CisKIAkvKiBhbGwgbWFjcm9zIGV4cGFuZCB0byBjb25zdGFudCB2YWx1ZXMgYXQgY29tcGlsZSB0aW1lICovCiAJLyogRklYTUU6IGRvIHdlIHdhbnQgdG8gbWFrZSB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBjb25kaXRpb25hbCBiYXNlZCBvbgogCSAqIHdoYXQgaXMgYWN0dWFsbHkgcHJlc2VudD8gIHdheSBtb3JlIGJyYW5jaGVzIGFuZCBjaGVja3MsIGJ1dCBtb3JlCkBAIC02MzIsNyArNjMxLDcgQEAKICNlbmRpZgogCQkrIE5GQV9TUEFDRShzaXplb2YodV9pbnQzMl90KSkJLyogbWFyayAqLwogCQkrIE5GQV9TUEFDRShzaXplb2YodV9pbnQzMl90KSkJLyogdWlkICovCi0JCSsgTkZBX1NQQUNFKE5GVUxOTF9QUkVGSVhMRU4pCS8qIHByZWZpeCAqLworCQkrIE5GQV9TUEFDRShwbGVuKQkJLyogcHJlZml4ICovCiAJCSsgTkZBX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaHcpKQogCQkrIE5GQV9TUEFDRShzaXplb2Yoc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCkpOwogCkBAIC03MDMsNyArNzAyLDcgQEAKIAlpbnN0LT5xbGVuKys7CiAKIAlfX2J1aWxkX3BhY2tldF9tZXNzYWdlKGluc3QsIHNrYiwgZGF0YV9sZW4sIHBmLAotCQkJCWhvb2tudW0sIGluLCBvdXQsIGxpLCBwcmVmaXgpOworCQkJCWhvb2tudW0sIGluLCBvdXQsIGxpLCBwcmVmaXgsIHBsZW4pOwogCiAJLyogdGltZXJfcGVuZGluZyBhbHdheXMgY2FsbGVkIHdpdGhpbiBpbnN0LT5sb2NrLCBzbyB0aGVyZQogCSAqIGlzIG5vIGNoYW5jZSBvZiBhIHJhY2UgaGVyZSAqLwpAQCAtODgyLDE1ICs4ODEsMTUgQEAKIAl9CiAKIAlpZiAobmZ1bGFbTkZVTEFfQ0ZHX1RJTUVPVVQtMV0pIHsKLQkJdV9pbnQzMl90IHRpbWVvdXQgPSAKLQkJCSoodV9pbnQzMl90ICopTkZBX0RBVEEobmZ1bGFbTkZVTEFfQ0ZHX1RJTUVPVVQtMV0pOworCQlfX2JlMzIgdGltZW91dCA9CisJCQkqKF9fYmUzMiAqKU5GQV9EQVRBKG5mdWxhW05GVUxBX0NGR19USU1FT1VULTFdKTsKIAogCQluZnVsbmxfc2V0X3RpbWVvdXQoaW5zdCwgbnRvaGwodGltZW91dCkpOwogCX0KIAogCWlmIChuZnVsYVtORlVMQV9DRkdfTkxCVUZTSVotMV0pIHsKLQkJdV9pbnQzMl90IG5sYnVmc2l6ID0gCi0JCQkqKHVfaW50MzJfdCAqKU5GQV9EQVRBKG5mdWxhW05GVUxBX0NGR19OTEJVRlNJWi0xXSk7CisJCV9fYmUzMiBubGJ1ZnNpeiA9CisJCQkqKF9fYmUzMiAqKU5GQV9EQVRBKG5mdWxhW05GVUxBX0NGR19OTEJVRlNJWi0xXSk7CiAKIAkJbmZ1bG5sX3NldF9ubGJ1ZnNpeihpbnN0LCBudG9obChubGJ1ZnNpeikpOwogCX0KQEAgLTkwMyw4ICs5MDIsOCBAQAogCX0KIAogCWlmIChuZnVsYVtORlVMQV9DRkdfRkxBR1MtMV0pIHsKLQkJdV9pbnQxNl90IGZsYWdzID0KLQkJCSoodV9pbnQxNl90ICopTkZBX0RBVEEobmZ1bGFbTkZVTEFfQ0ZHX0ZMQUdTLTFdKTsKKwkJX19iZTE2IGZsYWdzID0KKwkJCSooX19iZTE2ICopTkZBX0RBVEEobmZ1bGFbTkZVTEFfQ0ZHX0ZMQUdTLTFdKTsKIAkJbmZ1bG5sX3NldF9mbGFncyhpbnN0LCBudG9ocyhmbGFncykpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggZTgxNWE5YS4uYTg4YTAxNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiID0gZW50cnktPnNrYjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjsKLQl1bnNpZ25lZCBpbnQgdG1wX3VpbnQ7CisJX19iZTMyIHRtcF91aW50OwogCiAJUURFQlVHKCJlbnRlcmVkXG4iKTsKIApAQCAtNDgwLDggKzQ4MCw4IEBACiAjZW5kaWYKIAl9CiAKLQlpZiAoZW50c2tiLT5uZm1hcmspIHsKLQkJdG1wX3VpbnQgPSBodG9ubChlbnRza2ItPm5mbWFyayk7CisJaWYgKGVudHNrYi0+bWFyaykgeworCQl0bXBfdWludCA9IGh0b25sKGVudHNrYi0+bWFyayk7CiAJCU5GQV9QVVQoc2tiLCBORlFBX01BUkssIHNpemVvZih1X2ludDMyX3QpLCAmdG1wX3VpbnQpOwogCX0KIApAQCAtNDg5LDEwICs0ODksOSBAQAogCSAgICAmJiBlbnRza2ItPmRldi0+aGFyZF9oZWFkZXJfcGFyc2UpIHsKIAkJc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgcGh3OwogCi0JCXBody5od19hZGRybGVuID0KLQkJCWVudHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9wYXJzZShlbnRza2IsCisJCWludCBsZW4gPSBlbnRza2ItPmRldi0+aGFyZF9oZWFkZXJfcGFyc2UoZW50c2tiLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHcuaHdfYWRkcik7Ci0JCXBody5od19hZGRybGVuID0gaHRvbnMocGh3Lmh3X2FkZHJsZW4pOworCQlwaHcuaHdfYWRkcmxlbiA9IGh0b25zKGxlbik7CiAJCU5GQV9QVVQoc2tiLCBORlFBX0hXQUREUiwgc2l6ZW9mKHBodyksICZwaHcpOwogCX0KIApAQCAtODM1LDggKzgzNCw4IEBACiAJfQogCiAJaWYgKG5mcWFbTkZRQV9NQVJLLTFdKQotCQllbnRyeS0+c2tiLT5uZm1hcmsgPSBudG9obCgqKHVfaW50MzJfdCAqKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBORkFfREFUQShuZnFhW05GUUFfTUFSSy0xXSkpOworCQllbnRyeS0+c2tiLT5tYXJrID0gbnRvaGwoKihfX2JlMzIgKikKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIE5GQV9EQVRBKG5mcWFbTkZRQV9NQVJLLTFdKSk7CiAJCQogCWlzc3VlX3ZlcmRpY3QoZW50cnksIHZlcmRpY3QpOwogCWluc3RhbmNlX3B1dChxdWV1ZSk7CkBAIC05NDgsNiArOTQ3LDE0IEBACiAJCQkJbnRvaGwocGFyYW1zLT5jb3B5X3JhbmdlKSk7CiAJfQogCisJaWYgKG5mcWFbTkZRQV9DRkdfUVVFVUVfTUFYTEVOLTFdKSB7CisJCV9fYmUzMiAqcXVldWVfbWF4bGVuOworCQlxdWV1ZV9tYXhsZW4gPSBORkFfREFUQShuZnFhW05GUUFfQ0ZHX1FVRVVFX01BWExFTi0xXSk7CisJCXNwaW5fbG9ja19iaCgmcXVldWUtPmxvY2spOworCQlxdWV1ZS0+cXVldWVfbWF4bGVuID0gbnRvaGwoKnF1ZXVlX21heGxlbik7CisJCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+bG9jayk7CisJfQorCiBvdXRfcHV0OgogCWluc3RhbmNlX3B1dChxdWV1ZSk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwppbmRleCA1ODUyMmZjLi44OTk2NTg0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKKysrIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAuaD4KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYwppbmRleCBjMDE1MjRmLi5iNTU0ODIzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jCkBAIC0zMSw2ICszMSw5IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tcGF0Lmg+CisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgorI2VuZGlmCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKIHRhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCkBAIC00Miw3ICs0NSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvICptYXJraW5mbyA9IHRhcmdpbmZvOwogCXVfaW50MzJfdCBkaWZmOwotCXVfaW50MzJfdCBuZm1hcms7CisJdV9pbnQzMl90IG1hcms7CiAJdV9pbnQzMl90IG5ld21hcms7CiAJdV9pbnQzMl90IGN0aW5mbzsKIAl1X2ludDMyX3QgKmN0bWFyayA9IG5mX2N0X2dldF9tYXJrKCpwc2tiLCAmY3RpbmZvKTsKQEAgLTYyLDcgKzY1LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFhUX0NPTk5NQVJLX1NBVkU6CiAJCQluZXdtYXJrID0gKCpjdG1hcmsgJiB+bWFya2luZm8tPm1hc2spIHwKLQkJCQkgICgoKnBza2IpLT5uZm1hcmsgJiBtYXJraW5mby0+bWFzayk7CisJCQkJICAoKCpwc2tiKS0+bWFyayAmIG1hcmtpbmZvLT5tYXNrKTsKIAkJCWlmICgqY3RtYXJrICE9IG5ld21hcmspIHsKIAkJCQkqY3RtYXJrID0gbmV3bWFyazsKICNpZiBkZWZpbmVkKENPTkZJR19JUF9ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NT0RVTEUpCkBAIC03MywxMCArNzYsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFhUX0NPTk5NQVJLX1JFU1RPUkU6Ci0JCQluZm1hcmsgPSAoKnBza2IpLT5uZm1hcms7Ci0JCQlkaWZmID0gKCpjdG1hcmsgXiBuZm1hcmspICYgbWFya2luZm8tPm1hc2s7CisJCQltYXJrID0gKCpwc2tiKS0+bWFyazsKKwkJCWRpZmYgPSAoKmN0bWFyayBeIG1hcmspICYgbWFya2luZm8tPm1hc2s7CiAJCQlpZiAoZGlmZiAhPSAwKQotCQkJCSgqcHNrYiktPm5mbWFyayA9IG5mbWFyayBeIGRpZmY7CisJCQkJKCpwc2tiKS0+bWFyayA9IG1hcmsgXiBkaWZmOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X01BUksuYyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCmluZGV4IGM2ZTg2MGEuLjBiNDg1NDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTUFSSy5jCkBAIC0zMSw4ICszMSw4IEBACiB7CiAJY29uc3Qgc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm8gKm1hcmtpbmZvID0gdGFyZ2luZm87CiAKLQlpZigoKnBza2IpLT5uZm1hcmsgIT0gbWFya2luZm8tPm1hcmspCi0JCSgqcHNrYiktPm5mbWFyayA9IG1hcmtpbmZvLT5tYXJrOworCWlmKCgqcHNrYiktPm1hcmsgIT0gbWFya2luZm8tPm1hcmspCisJCSgqcHNrYiktPm1hcmsgPSBtYXJraW5mby0+bWFyazsKIAogCXJldHVybiBYVF9DT05USU5VRTsKIH0KQEAgLTU0LDE2ICs1NCwxNiBAQAogCQlicmVhazsKIAkJCiAJY2FzZSBYVF9NQVJLX0FORDoKLQkJbWFyayA9ICgqcHNrYiktPm5mbWFyayAmIG1hcmtpbmZvLT5tYXJrOworCQltYXJrID0gKCpwc2tiKS0+bWFyayAmIG1hcmtpbmZvLT5tYXJrOwogCQlicmVhazsKIAkJCiAJY2FzZSBYVF9NQVJLX09SOgotCQltYXJrID0gKCpwc2tiKS0+bmZtYXJrIHwgbWFya2luZm8tPm1hcms7CisJCW1hcmsgPSAoKnBza2IpLT5tYXJrIHwgbWFya2luZm8tPm1hcms7CiAJCWJyZWFrOwogCX0KIAotCWlmKCgqcHNrYiktPm5mbWFyayAhPSBtYXJrKQotCQkoKnBza2IpLT5uZm1hcmsgPSBtYXJrOworCWlmKCgqcHNrYiktPm1hcmsgIT0gbWFyaykKKwkJKCpwc2tiKS0+bWFyayA9IG1hcms7CiAKIAlyZXR1cm4gWFRfQ09OVElOVUU7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05GTE9HLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X05GTE9HLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAxZWQ3YQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTkZMT0cuYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oPgorCitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigieF90YWJsZXMgTkZMT0cgdGFyZ2V0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImlwdF9ORkxPRyIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X05GTE9HIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK25mbG9nX3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCisJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgICB1bnNpZ25lZCBpbnQgaG9va251bSwgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LAorCSAgICAgY29uc3Qgdm9pZCAqdGFyZ2luZm8pCit7CisJY29uc3Qgc3RydWN0IHh0X25mbG9nX2luZm8gKmluZm8gPSB0YXJnaW5mbzsKKwlzdHJ1Y3QgbmZfbG9naW5mbyBsaTsKKworCWxpLnR5cGUJCSAgICAgPSBORl9MT0dfVFlQRV9VTE9HOworCWxpLnUudWxvZy5jb3B5X2xlbiAgID0gaW5mby0+bGVuOworCWxpLnUudWxvZy5ncm91cAkgICAgID0gaW5mby0+Z3JvdXA7CisJbGkudS51bG9nLnF0aHJlc2hvbGQgPSBpbmZvLT50aHJlc2hvbGQ7CisKKwluZl9sb2dfcGFja2V0KHRhcmdldC0+ZmFtaWx5LCBob29rbnVtLCAqcHNrYiwgaW4sIG91dCwgJmxpLAorCQkgICAgICAiJXMiLCBpbmZvLT5wcmVmaXgpOworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIGludAorbmZsb2dfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsIGNvbnN0IHZvaWQgKmVudHJ5LAorCQkgY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0LCB2b2lkICp0YXJnZXRpbmZvLAorCQkgdW5zaWduZWQgaW50IGhvb2ttYXNrKQoreworCXN0cnVjdCB4dF9uZmxvZ19pbmZvICppbmZvID0gdGFyZ2V0aW5mbzsKKworCWlmIChpbmZvLT5mbGFncyAmIH5YVF9ORkxPR19NQVNLKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5mby0+cHJlZml4W3NpemVvZihpbmZvLT5wcmVmaXgpIC0gMV0gIT0gJ1wwJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IHh0X25mbG9nX3RhcmdldFtdID0geworCXsKKwkJLm5hbWUJCT0gIk5GTE9HIiwKKwkJLmZhbWlseQkJPSBBRl9JTkVULAorCQkuY2hlY2tlbnRyeQk9IG5mbG9nX2NoZWNrZW50cnksCisJCS50YXJnZXQJCT0gbmZsb2dfdGFyZ2V0LAorCQkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfbmZsb2dfaW5mbyksCisJCS5tZQkJPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIk5GTE9HIiwKKwkJLmZhbWlseQkJPSBBRl9JTkVUNiwKKwkJLmNoZWNrZW50cnkJPSBuZmxvZ19jaGVja2VudHJ5LAorCQkudGFyZ2V0CQk9IG5mbG9nX3RhcmdldCwKKwkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X25mbG9nX2luZm8pLAorCQkubWUJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHh0X25mbG9nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0cyh4dF9uZmxvZ190YXJnZXQsCisJCQkJICAgQVJSQVlfU0laRSh4dF9uZmxvZ190YXJnZXQpKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X25mbG9nX2Zpbmkodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX3RhcmdldHMoeHRfbmZsb2dfdGFyZ2V0LCBBUlJBWV9TSVpFKHh0X25mbG9nX3RhcmdldCkpOworfQorCittb2R1bGVfaW5pdCh4dF9uZmxvZ19pbml0KTsKK21vZHVsZV9leGl0KHh0X25mbG9nX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4ZGUwYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTAsMCArMSw3NzMgQEAKKy8qIGlwdGFibGVzIG1hdGNoIGV4dGVuc2lvbiB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcGVyIHNlY29uZAorICogc2VwZXJhdGVseSBmb3IgZWFjaCBoYXNoYnVja2V0IChzb3VyY2VpcC9zb3VyY2Vwb3J0L2RzdGlwL2RzdHBvcnQpCisgKgorICogKEMpIDIwMDMtMjAwNCBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiAkSWQ6IGlwdF9oYXNobGltaXQuYyAzMjQ0IDIwMDQtMTAtMjAgMTY6MjQ6MjlaIGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZyAkCisgKgorICogRGV2ZWxvcG1lbnQgb2YgdGhpcyBjb2RlIHdhcyBmdW5kZWQgYnkgQXN0YXJvIEFHLCBodHRwOi8vd3d3LmFzdGFyby5jb20vCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9oYXNobGltaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiaXB0YWJsZXMgbWF0Y2ggZm9yIGxpbWl0aW5nIHBlciBoYXNoLWJ1Y2tldCIpOworTU9EVUxFX0FMSUFTKCJpcHRfaGFzaGxpbWl0Iik7CitNT0RVTEVfQUxJQVMoImlwNnRfaGFzaGxpbWl0Iik7CisKKy8qIG5lZWQgdG8gZGVjbGFyZSB0aGlzIGF0IHRoZSB0b3AgKi8KK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhhc2hsaW1pdF9wcm9jZGlyNDsKK3N0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmhhc2hsaW1pdF9wcm9jZGlyNjsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRsX2ZpbGVfb3BzOworCisvKiBoYXNoIHRhYmxlIGNyYXAgKi8KK3N0cnVjdCBkc3RoYXNoX2RzdCB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJX19iZTMyIHNyYzsKKwkJCV9fYmUzMiBkc3Q7CisJCX0gaXA7CisJCXN0cnVjdCB7CisJCQlfX2JlMzIgc3JjWzRdOworCQkJX19iZTMyIGRzdFs0XTsKKwkJfSBpcDY7CisJfSBhZGRyOworCV9fYmUxNiBzcmNfcG9ydDsKKwlfX2JlMTYgZHN0X3BvcnQ7Cit9OworCitzdHJ1Y3QgZHN0aGFzaF9lbnQgeworCS8qIHN0YXRpYyAvIHJlYWQtb25seSBwYXJ0cyBpbiB0aGUgYmVnaW5uaW5nICovCisJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsKKwlzdHJ1Y3QgZHN0aGFzaF9kc3QgZHN0OworCisJLyogbW9kaWZpZWQgc3RydWN0dXJlIG1lbWJlcnMgaW4gdGhlIGVuZCAqLworCXVuc2lnbmVkIGxvbmcgZXhwaXJlczsJCS8qIHByZWNhbGN1bGF0ZWQgZXhwaXJ5IHRpbWUgKi8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBsb25nIHByZXY7CS8qIGxhc3QgbW9kaWZpY2F0aW9uICovCisJCXVfaW50MzJfdCBjcmVkaXQ7CisJCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCX0gcmF0ZWluZm87Cit9OworCitzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSB7CisJc3RydWN0IGhsaXN0X25vZGUgbm9kZTsJCS8qIGdsb2JhbCBsaXN0IG9mIGFsbCBodGFibGVzICovCisJYXRvbWljX3QgdXNlOworCWludCBmYW1pbHk7CisKKwlzdHJ1Y3QgaGFzaGxpbWl0X2NmZyBjZmc7CS8qIGNvbmZpZyAqLworCisJLyogdXNlZCBpbnRlcm5hbGx5ICovCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogbG9jayBmb3IgbGlzdF9oZWFkICovCisJdV9pbnQzMl90IHJuZDsJCQkvKiByYW5kb20gc2VlZCBmb3IgaGFzaCAqLworCWludCBybmRfaW5pdGlhbGl6ZWQ7CisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogbnVtYmVyIGVudHJpZXMgaW4gdGFibGUgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLyogdGltZXIgZm9yIGdjICovCisKKwkvKiBzZXFfZmlsZSBzdHVmZiAqLworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOworCisJc3RydWN0IGhsaXN0X2hlYWQgaGFzaFswXTsJLyogaGFzaHRhYmxlIGl0c2VsZiAqLworfTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhoYXNobGltaXRfbG9jayk7CS8qIHByb3RlY3RzIGh0YWJsZXMgbGlzdCAqLworc3RhdGljIERFRklORV9NVVRFWChobGltaXRfbXV0ZXgpOwkvKiBhZGRpdGlvbmFsIGNoZWNrZW50cnkgcHJvdGVjdGlvbiAqLworc3RhdGljIEhMSVNUX0hFQUQoaGFzaGxpbWl0X2h0YWJsZXMpOworc3RhdGljIGttZW1fY2FjaGVfdCAqaGFzaGxpbWl0X2NhY2hlcCBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW5saW5lIGludCBkc3RfY21wKGNvbnN0IHN0cnVjdCBkc3RoYXNoX2VudCAqZW50LCBzdHJ1Y3QgZHN0aGFzaF9kc3QgKmIpCit7CisJcmV0dXJuICFtZW1jbXAoJmVudC0+ZHN0LCBiLCBzaXplb2YoZW50LT5kc3QpKTsKK30KKworc3RhdGljIHVfaW50MzJfdAoraGFzaF9kc3QoY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0LCBjb25zdCBzdHJ1Y3QgZHN0aGFzaF9kc3QgKmRzdCkKK3sKKwlyZXR1cm4gamhhc2goZHN0LCBzaXplb2YoKmRzdCksIGh0LT5ybmQpICUgaHQtPmNmZy5zaXplOworfQorCitzdGF0aWMgc3RydWN0IGRzdGhhc2hfZW50ICoKK2RzdGhhc2hfZmluZChjb25zdCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsIHN0cnVjdCBkc3RoYXNoX2RzdCAqZHN0KQoreworCXN0cnVjdCBkc3RoYXNoX2VudCAqZW50OworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJdV9pbnQzMl90IGhhc2ggPSBoYXNoX2RzdChodCwgZHN0KTsKKworCWlmICghaGxpc3RfZW1wdHkoJmh0LT5oYXNoW2hhc2hdKSkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnQsIHBvcywgJmh0LT5oYXNoW2hhc2hdLCBub2RlKQorCQkJaWYgKGRzdF9jbXAoZW50LCBkc3QpKQorCQkJCXJldHVybiBlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBhbGxvY2F0ZSBkc3RoYXNoX2VudCwgaW5pdGlhbGl6ZSBkc3QsIHB1dCBpbiBodGFibGUgYW5kIGxvY2sgaXQgKi8KK3N0YXRpYyBzdHJ1Y3QgZHN0aGFzaF9lbnQgKgorZHN0aGFzaF9hbGxvY19pbml0KHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodCwgc3RydWN0IGRzdGhhc2hfZHN0ICpkc3QpCit7CisJc3RydWN0IGRzdGhhc2hfZW50ICplbnQ7CisKKwkvKiBpbml0aWFsaXplIGhhc2ggd2l0aCByYW5kb20gdmFsIGF0IHRoZSB0aW1lIHdlIGFsbG9jYXRlCisJICogdGhlIGZpcnN0IGhhc2h0YWJsZSBlbnRyeSAqLworCWlmICghaHQtPnJuZF9pbml0aWFsaXplZCkgeworCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cm5kLCA0KTsKKwkJaHQtPnJuZF9pbml0aWFsaXplZCA9IDE7CisJfQorCisJaWYgKGh0LT5jZmcubWF4ICYmIGh0LT5jb3VudCA+PSBodC0+Y2ZnLm1heCkgeworCQkvKiBGSVhNRTogZG8gc29tZXRoaW5nLiBxdWVzdGlvbiBpcyB3aGF0Li4gKi8KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkieHRfaGFzaGxpbWl0OiBtYXggY291bnQgb2YgJXUgcmVhY2hlZFxuIiwKKwkJCQlodC0+Y2ZnLm1heCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWVudCA9IGttZW1fY2FjaGVfYWxsb2MoaGFzaGxpbWl0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CisJaWYgKCFlbnQpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ4dF9oYXNobGltaXQ6IGNhbid0IGFsbG9jYXRlIGRzdGhhc2hfZW50XG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW1lbWNweSgmZW50LT5kc3QsIGRzdCwgc2l6ZW9mKGVudC0+ZHN0KSk7CisKKwlobGlzdF9hZGRfaGVhZCgmZW50LT5ub2RlLCAmaHQtPmhhc2hbaGFzaF9kc3QoaHQsIGRzdCldKTsKKwlodC0+Y291bnQrKzsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2RzdGhhc2hfZnJlZShzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsIHN0cnVjdCBkc3RoYXNoX2VudCAqZW50KQoreworCWhsaXN0X2RlbCgmZW50LT5ub2RlKTsKKwlrbWVtX2NhY2hlX2ZyZWUoaGFzaGxpbWl0X2NhY2hlcCwgZW50KTsKKwlodC0+Y291bnQtLTsKK30KK3N0YXRpYyB2b2lkIGh0YWJsZV9nYyh1bnNpZ25lZCBsb25nIGh0bG9uZyk7CisKK3N0YXRpYyBpbnQgaHRhYmxlX2NyZWF0ZShzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKm1pbmZvLCBpbnQgZmFtaWx5KQoreworCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChtaW5mby0+Y2ZnLnNpemUpCisJCXNpemUgPSBtaW5mby0+Y2ZnLnNpemU7CisJZWxzZSB7CisJCXNpemUgPSAoKG51bV9waHlzcGFnZXMgPDwgUEFHRV9TSElGVCkgLyAxNjM4NCkgLworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpOworCQlpZiAobnVtX3BoeXNwYWdlcyA+ICgxMDI0ICogMTAyNCAqIDEwMjQgLyBQQUdFX1NJWkUpKQorCQkJc2l6ZSA9IDgxOTI7CisJCWlmIChzaXplIDwgMTYpCisJCQlzaXplID0gMTY7CisJfQorCS8qIEZJWE1FOiBkb24ndCB1c2Ugdm1hbGxvYygpIGhlcmUgb3IgYW55d2hlcmUgZWxzZSAtSFcgKi8KKwloaW5mbyA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlKSArCisJCQlzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkgKiBzaXplKTsKKwlpZiAoIWhpbmZvKSB7CisJCXByaW50ayhLRVJOX0VSUiAieHRfaGFzaGxpbWl0OiB1bmFibGUgdG8gY3JlYXRlIGhhc2h0YWJsZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisJbWluZm8tPmhpbmZvID0gaGluZm87CisKKwkvKiBjb3B5IG1hdGNoIGNvbmZpZyBpbnRvIGhhc2h0YWJsZSBjb25maWcgKi8KKwltZW1jcHkoJmhpbmZvLT5jZmcsICZtaW5mby0+Y2ZnLCBzaXplb2YoaGluZm8tPmNmZykpOworCWhpbmZvLT5jZmcuc2l6ZSA9IHNpemU7CisJaWYgKCFoaW5mby0+Y2ZnLm1heCkKKwkJaGluZm8tPmNmZy5tYXggPSA4ICogaGluZm8tPmNmZy5zaXplOworCWVsc2UgaWYgKGhpbmZvLT5jZmcubWF4IDwgaGluZm8tPmNmZy5zaXplKQorCQloaW5mby0+Y2ZnLm1heCA9IGhpbmZvLT5jZmcuc2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCBoaW5mby0+Y2ZnLnNpemU7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZoaW5mby0+aGFzaFtpXSk7CisKKwlhdG9taWNfc2V0KCZoaW5mby0+dXNlLCAxKTsKKwloaW5mby0+Y291bnQgPSAwOworCWhpbmZvLT5mYW1pbHkgPSBmYW1pbHk7CisJaGluZm8tPnJuZF9pbml0aWFsaXplZCA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJmhpbmZvLT5sb2NrKTsKKwloaW5mby0+cGRlID0gY3JlYXRlX3Byb2NfZW50cnkobWluZm8tPm5hbWUsIDAsCisJCQkJICAgICAgIGZhbWlseSA9PSBBRl9JTkVUID8gaGFzaGxpbWl0X3Byb2NkaXI0IDoKKwkJCQkgICAgICAgCQkJICAgaGFzaGxpbWl0X3Byb2NkaXI2KTsKKwlpZiAoIWhpbmZvLT5wZGUpIHsKKwkJdmZyZWUoaGluZm8pOworCQlyZXR1cm4gLTE7CisJfQorCWhpbmZvLT5wZGUtPnByb2NfZm9wcyA9ICZkbF9maWxlX29wczsKKwloaW5mby0+cGRlLT5kYXRhID0gaGluZm87CisKKwlpbml0X3RpbWVyKCZoaW5mby0+dGltZXIpOworCWhpbmZvLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaGluZm8tPmNmZy5nY19pbnRlcnZhbCk7CisJaGluZm8tPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyApaGluZm87CisJaGluZm8tPnRpbWVyLmZ1bmN0aW9uID0gaHRhYmxlX2djOworCWFkZF90aW1lcigmaGluZm8tPnRpbWVyKTsKKworCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOworCWhsaXN0X2FkZF9oZWFkKCZoaW5mby0+bm9kZSwgJmhhc2hsaW1pdF9odGFibGVzKTsKKwlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X2FsbChzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQsIHN0cnVjdCBkc3RoYXNoX2VudCAqaGUpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X2djKHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodCwgc3RydWN0IGRzdGhhc2hfZW50ICpoZSkKK3sKKwlyZXR1cm4gKGppZmZpZXMgPj0gaGUtPmV4cGlyZXMpOworfQorCitzdGF0aWMgdm9pZCBodGFibGVfc2VsZWN0aXZlX2NsZWFudXAoc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0LAorCQkgCQlpbnQgKCpzZWxlY3QpKHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodCwKKwkJCQkJICAgICAgc3RydWN0IGRzdGhhc2hfZW50ICpoZSkpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBsb2NrIGhhc2ggdGFibGUgYW5kIGl0ZXJhdGUgb3ZlciBpdCAqLworCXNwaW5fbG9ja19iaCgmaHQtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBodC0+Y2ZnLnNpemU7IGkrKykgeworCQlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoOworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zLCAqbjsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkaCwgcG9zLCBuLCAmaHQtPmhhc2hbaV0sIG5vZGUpIHsKKwkJCWlmICgoKnNlbGVjdCkoaHQsIGRoKSkKKwkJCQlkc3RoYXNoX2ZyZWUoaHQsIGRoKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmaHQtPmxvY2spOworfQorCisvKiBoYXNoIHRhYmxlIGdhcmJhZ2UgY29sbGVjdG9yLCBydW4gYnkgdGltZXIgKi8KK3N0YXRpYyB2b2lkIGh0YWJsZV9nYyh1bnNpZ25lZCBsb25nIGh0bG9uZykKK3sKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHQgPSAoc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKilodGxvbmc7CisKKwlodGFibGVfc2VsZWN0aXZlX2NsZWFudXAoaHQsIHNlbGVjdF9nYyk7CisKKwkvKiByZS1hZGQgdGhlIHRpbWVyIGFjY29yZGluZ2x5ICovCisJaHQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhodC0+Y2ZnLmdjX2ludGVydmFsKTsKKwlhZGRfdGltZXIoJmh0LT50aW1lcik7Cit9CisKK3N0YXRpYyB2b2lkIGh0YWJsZV9kZXN0cm95KHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbykKK3sKKwkvKiByZW1vdmUgdGltZXIsIGlmIGl0IGlzIHBlbmRpbmcgKi8KKwlpZiAodGltZXJfcGVuZGluZygmaGluZm8tPnRpbWVyKSkKKwkJZGVsX3RpbWVyKCZoaW5mby0+dGltZXIpOworCisJLyogcmVtb3ZlIHByb2MgZW50cnkgKi8KKwlyZW1vdmVfcHJvY19lbnRyeShoaW5mby0+cGRlLT5uYW1lLAorCQkJICBoaW5mby0+ZmFtaWx5ID09IEFGX0lORVQgPyBoYXNobGltaXRfcHJvY2RpcjQgOgorCQkJICAJCQkgICAgIGhhc2hsaW1pdF9wcm9jZGlyNik7CisJaHRhYmxlX3NlbGVjdGl2ZV9jbGVhbnVwKGhpbmZvLCBzZWxlY3RfYWxsKTsKKwl2ZnJlZShoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlX2ZpbmRfZ2V0KGNoYXIgKm5hbWUsIGludCBmYW1pbHkpCit7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisKKwlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShoaW5mbywgcG9zLCAmaGFzaGxpbWl0X2h0YWJsZXMsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgaGluZm8tPnBkZS0+bmFtZSkgJiYKKwkJICAgIGhpbmZvLT5mYW1pbHkgPT0gZmFtaWx5KSB7CisJCQlhdG9taWNfaW5jKCZoaW5mby0+dXNlKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7CisJCQlyZXR1cm4gaGluZm87CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaHRhYmxlX3B1dChzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm8pCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmhpbmZvLT51c2UpKSB7CisJCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOworCQlobGlzdF9kZWwoJmhpbmZvLT5ub2RlKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwkJaHRhYmxlX2Rlc3Ryb3koaGluZm8pOworCX0KK30KKworLyogVGhlIGFsZ29yaXRobSB1c2VkIGlzIHRoZSBTaW1wbGUgVG9rZW4gQnVja2V0IEZpbHRlciAoVEJGKQorICogc2VlIG5ldC9zY2hlZC9zY2hfdGJmLmMgaW4gdGhlIGxpbnV4IHNvdXJjZSB0cmVlCisgKi8KKworLyogUnVzdHk6IFRoaXMgaXMgbXkgKG5vbi1tYXRoZW1hdGljYWxseS1pbmNsaW5lZCkgdW5kZXJzdGFuZGluZyBvZgorICAgdGhpcyBhbGdvcml0aG0uICBUaGUgYGF2ZXJhZ2UgcmF0ZScgaW4gamlmZmllcyBiZWNvbWVzIHlvdXIgaW5pdGlhbAorICAgYW1vdW50IG9mIGNyZWRpdCBgY3JlZGl0JyBhbmQgdGhlIG1vc3QgY3JlZGl0IHlvdSBjYW4gZXZlciBoYXZlCisgICBgY3JlZGl0X2NhcCcuICBUaGUgYHBlYWsgcmF0ZScgYmVjb21lcyB0aGUgY29zdCBvZiBwYXNzaW5nIHRoZQorICAgdGVzdCwgYGNvc3QnLgorCisgICBgcHJldicgdHJhY2tzIHRoZSBsYXN0IHBhY2tldCBoaXQ6IHlvdSBnYWluIG9uZSBjcmVkaXQgcGVyIGppZmZ5LgorICAgSWYgeW91IGdldCBjcmVkaXQgYmFsYW5jZSBtb3JlIHRoYW4gdGhpcywgdGhlIGV4dHJhIGNyZWRpdCBpcworICAgZGlzY2FyZGVkLiAgRXZlcnkgdGltZSB0aGUgbWF0Y2ggcGFzc2VzLCB5b3UgbG9zZSBgY29zdCcgY3JlZGl0czsKKyAgIGlmIHlvdSBkb24ndCBoYXZlIHRoYXQgbWFueSwgdGhlIHRlc3QgZmFpbHMuCisKKyAgIFNlZSBBbGV4ZXkncyBmb3JtYWwgZXhwbGFuYXRpb24gaW4gbmV0L3NjaGVkL3NjaF90YmYuYy4KKworICAgVG8gZ2V0IHRoZSBtYXhpbXVtIHJhbmdlLCB3ZSBtdWx0aXBseSBieSB0aGlzIGZhY3RvciAoaWUuIHlvdSBnZXQgTgorICAgY3JlZGl0cyBwZXIgamlmZnkpLiAgV2Ugd2FudCB0byBhbGxvdyBhIHJhdGUgYXMgbG93IGFzIDEgcGVyIGRheQorICAgKHNsb3dlc3QgdXNlcnNwYWNlIHRvb2wgYWxsb3dzKSwgd2hpY2ggbWVhbnMKKyAgIENSRURJVFNfUEVSX0pJRkZZKkhaKjYwKjYwKjI0IDwgMl4zMiBpZS4KKyovCisjZGVmaW5lIE1BWF9DUEogKDB4RkZGRkZGRkYgLyAoSFoqNjAqNjAqMjQpKQorCisvKiBSZXBlYXRlZCBzaGlmdCBhbmQgb3IgZ2l2ZXMgdXMgYWxsIDFzLCBmaW5hbCBzaGlmdCBhbmQgYWRkIDEgZ2l2ZXMKKyAqIHVzIHRoZSBwb3dlciBvZiAyIGJlbG93IHRoZSB0aGVvcmV0aWNhbCBtYXgsIHNvIEdDQyBzaW1wbHkgZG9lcyBhCisgKiBzaGlmdC4gKi8KKyNkZWZpbmUgX1BPVzJfQkVMT1cyKHgpICgoeCl8KCh4KT4+MSkpCisjZGVmaW5lIF9QT1cyX0JFTE9XNCh4KSAoX1BPVzJfQkVMT1cyKHgpfF9QT1cyX0JFTE9XMigoeCk+PjIpKQorI2RlZmluZSBfUE9XMl9CRUxPVzgoeCkgKF9QT1cyX0JFTE9XNCh4KXxfUE9XMl9CRUxPVzQoKHgpPj40KSkKKyNkZWZpbmUgX1BPVzJfQkVMT1cxNih4KSAoX1BPVzJfQkVMT1c4KHgpfF9QT1cyX0JFTE9XOCgoeCk+PjgpKQorI2RlZmluZSBfUE9XMl9CRUxPVzMyKHgpIChfUE9XMl9CRUxPVzE2KHgpfF9QT1cyX0JFTE9XMTYoKHgpPj4xNikpCisjZGVmaW5lIFBPVzJfQkVMT1czMih4KSAoKF9QT1cyX0JFTE9XMzIoeCk+PjEpICsgMSkKKworI2RlZmluZSBDUkVESVRTX1BFUl9KSUZGWSBQT1cyX0JFTE9XMzIoTUFYX0NQSikKKworLyogUHJlY2lzaW9uIHNhdmVyLiAqLworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3VzZXIyY3JlZGl0cyh1X2ludDMyX3QgdXNlcikKK3sKKwkvKiBJZiBtdWx0aXBseWluZyB3b3VsZCBvdmVyZmxvdy4uLiAqLworCWlmICh1c2VyID4gMHhGRkZGRkZGRiAvIChIWipDUkVESVRTX1BFUl9KSUZGWSkpCisJCS8qIERpdmlkZSBmaXJzdC4gKi8KKwkJcmV0dXJuICh1c2VyIC8gWFRfSEFTSExJTUlUX1NDQUxFKSAqIEhaICogQ1JFRElUU19QRVJfSklGRlk7CisKKwlyZXR1cm4gKHVzZXIgKiBIWiAqIENSRURJVFNfUEVSX0pJRkZZKSAvIFhUX0hBU0hMSU1JVF9TQ0FMRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJhdGVpbmZvX3JlY2FsYyhzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoLCB1bnNpZ25lZCBsb25nIG5vdykKK3sKKwlkaC0+cmF0ZWluZm8uY3JlZGl0ICs9IChub3cgLSBkaC0+cmF0ZWluZm8ucHJldikgKiBDUkVESVRTX1BFUl9KSUZGWTsKKwlpZiAoZGgtPnJhdGVpbmZvLmNyZWRpdCA+IGRoLT5yYXRlaW5mby5jcmVkaXRfY2FwKQorCQlkaC0+cmF0ZWluZm8uY3JlZGl0ID0gZGgtPnJhdGVpbmZvLmNyZWRpdF9jYXA7CisJZGgtPnJhdGVpbmZvLnByZXYgPSBub3c7Cit9CisKK3N0YXRpYyBpbnQKK2hhc2hsaW1pdF9pbml0X2RzdChzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm8sIHN0cnVjdCBkc3RoYXNoX2RzdCAqZHN0LAorCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgcHJvdG9mZikKK3sKKwlfX2JlMTYgX3BvcnRzWzJdLCAqcG9ydHM7CisJaW50IG5leHRoZHI7CisKKwltZW1zZXQoZHN0LCAwLCBzaXplb2YoKmRzdCkpOworCisJc3dpdGNoIChoaW5mby0+ZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlpZiAoaGluZm8tPmNmZy5tb2RlICYgWFRfSEFTSExJTUlUX0hBU0hfRElQKQorCQkJZHN0LT5hZGRyLmlwLmRzdCA9IHNrYi0+bmguaXBoLT5kYWRkcjsKKwkJaWYgKGhpbmZvLT5jZmcubW9kZSAmIFhUX0hBU0hMSU1JVF9IQVNIX1NJUCkKKwkJCWRzdC0+YWRkci5pcC5zcmMgPSBza2ItPm5oLmlwaC0+c2FkZHI7CisKKwkJaWYgKCEoaGluZm8tPmNmZy5tb2RlICYKKwkJICAgICAgKFhUX0hBU0hMSU1JVF9IQVNIX0RQVCB8IFhUX0hBU0hMSU1JVF9IQVNIX1NQVCkpKQorCQkJcmV0dXJuIDA7CisJCW5leHRoZHIgPSBza2ItPm5oLmlwaC0+cHJvdG9jb2w7CisJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFUykgfHwgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTX01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAoaGluZm8tPmNmZy5tb2RlICYgWFRfSEFTSExJTUlUX0hBU0hfRElQKQorCQkJbWVtY3B5KCZkc3QtPmFkZHIuaXA2LmRzdCwgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAorCQkJICAgICAgIHNpemVvZihkc3QtPmFkZHIuaXA2LmRzdCkpOworCQlpZiAoaGluZm8tPmNmZy5tb2RlICYgWFRfSEFTSExJTUlUX0hBU0hfU0lQKQorCQkJbWVtY3B5KCZkc3QtPmFkZHIuaXA2LnNyYywgJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJICAgICAgIHNpemVvZihkc3QtPmFkZHIuaXA2LnNyYykpOworCisJCWlmICghKGhpbmZvLT5jZmcubW9kZSAmCisJCSAgICAgIChYVF9IQVNITElNSVRfSEFTSF9EUFQgfCBYVF9IQVNITElNSVRfSEFTSF9TUFQpKSkKKwkJCXJldHVybiAwOworCQluZXh0aGRyID0gaXB2Nl9maW5kX2hkcihza2IsICZwcm90b2ZmLCAtMSwgTlVMTCk7CisJCWlmIChuZXh0aGRyIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChuZXh0aGRyKSB7CisJY2FzZSBJUFBST1RPX1RDUDoKKwljYXNlIElQUFJPVE9fVURQOgorCWNhc2UgSVBQUk9UT19TQ1RQOgorCWNhc2UgSVBQUk9UT19EQ0NQOgorCQlwb3J0cyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvZmYsIHNpemVvZihfcG9ydHMpLAorCQkJCQkgICAmX3BvcnRzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJX3BvcnRzWzBdID0gX3BvcnRzWzFdID0gMDsKKwkJcG9ydHMgPSBfcG9ydHM7CisJCWJyZWFrOworCX0KKwlpZiAoIXBvcnRzKQorCQlyZXR1cm4gLTE7CisJaWYgKGhpbmZvLT5jZmcubW9kZSAmIFhUX0hBU0hMSU1JVF9IQVNIX1NQVCkKKwkJZHN0LT5zcmNfcG9ydCA9IHBvcnRzWzBdOworCWlmIChoaW5mby0+Y2ZnLm1vZGUgJiBYVF9IQVNITElNSVRfSEFTSF9EUFQpCisJCWRzdC0+ZHN0X3BvcnQgPSBwb3J0c1sxXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraGFzaGxpbWl0X21hdGNoKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKwkJY29uc3Qgdm9pZCAqbWF0Y2hpbmZvLAorCQlpbnQgb2Zmc2V0LAorCQl1bnNpZ25lZCBpbnQgcHJvdG9mZiwKKwkJaW50ICpob3Rkcm9wKQoreworCXN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9CisJCSgoc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICopbWF0Y2hpbmZvKS0+dS5tYXN0ZXI7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvID0gci0+aGluZm87CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCXN0cnVjdCBkc3RoYXNoX2VudCAqZGg7CisJc3RydWN0IGRzdGhhc2hfZHN0IGRzdDsKKworCWlmIChoYXNobGltaXRfaW5pdF9kc3QoaGluZm8sICZkc3QsIHNrYiwgcHJvdG9mZikgPCAwKQorCQlnb3RvIGhvdGRyb3A7CisKKwlzcGluX2xvY2tfYmgoJmhpbmZvLT5sb2NrKTsKKwlkaCA9IGRzdGhhc2hfZmluZChoaW5mbywgJmRzdCk7CisJaWYgKCFkaCkgeworCQlkaCA9IGRzdGhhc2hfYWxsb2NfaW5pdChoaW5mbywgJmRzdCk7CisJCWlmICghZGgpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZoaW5mby0+bG9jayk7CisJCQlnb3RvIGhvdGRyb3A7CisJCX0KKworCQlkaC0+ZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGhpbmZvLT5jZmcuZXhwaXJlKTsKKwkJZGgtPnJhdGVpbmZvLnByZXYgPSBqaWZmaWVzOworCQlkaC0+cmF0ZWluZm8uY3JlZGl0ID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnICoKKwkJCQkJCSAgIGhpbmZvLT5jZmcuYnVyc3QpOworCQlkaC0+cmF0ZWluZm8uY3JlZGl0X2NhcCA9IHVzZXIyY3JlZGl0cyhoaW5mby0+Y2ZnLmF2ZyAqCisJCQkJCQkgICAgICAgaGluZm8tPmNmZy5idXJzdCk7CisJCWRoLT5yYXRlaW5mby5jb3N0ID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnKTsKKwl9IGVsc2UgeworCQkvKiB1cGRhdGUgZXhwaXJhdGlvbiB0aW1lb3V0ICovCisJCWRoLT5leHBpcmVzID0gbm93ICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmV4cGlyZSk7CisJCXJhdGVpbmZvX3JlY2FsYyhkaCwgbm93KTsKKwl9CisKKwlpZiAoZGgtPnJhdGVpbmZvLmNyZWRpdCA+PSBkaC0+cmF0ZWluZm8uY29zdCkgeworCQkvKiBXZSdyZSB1bmRlcmxpbWl0LiAqLworCQlkaC0+cmF0ZWluZm8uY3JlZGl0IC09IGRoLT5yYXRlaW5mby5jb3N0OworCQlzcGluX3VubG9ja19iaCgmaGluZm8tPmxvY2spOworCQlyZXR1cm4gMTsKKwl9CisKKyAgICAgICAJc3Bpbl91bmxvY2tfYmgoJmhpbmZvLT5sb2NrKTsKKworCS8qIGRlZmF1bHQgY2FzZTogd2UncmUgb3ZlcmxpbWl0LCB0aHVzIGRvbid0IG1hdGNoICovCisJcmV0dXJuIDA7CisKK2hvdGRyb3A6CisJKmhvdGRyb3AgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoYXNobGltaXRfY2hlY2tlbnRyeShjb25zdCBjaGFyICp0YWJsZW5hbWUsCisJCSAgICAgY29uc3Qgdm9pZCAqaW5mLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsCisJCSAgICAgdm9pZCAqbWF0Y2hpbmZvLAorCQkgICAgIHVuc2lnbmVkIGludCBob29rX21hc2spCit7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICpyID0gbWF0Y2hpbmZvOworCisJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLworCWlmIChyLT5jZmcuYnVyc3QgPT0gMCB8fAorCSAgICB1c2VyMmNyZWRpdHMoci0+Y2ZnLmF2ZyAqIHItPmNmZy5idXJzdCkgPCB1c2VyMmNyZWRpdHMoci0+Y2ZnLmF2ZykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9oYXNobGltaXQ6IG92ZXJmbG93LCB0cnkgbG93ZXI6ICV1LyV1XG4iLAorCQkgICAgICAgci0+Y2ZnLmF2Zywgci0+Y2ZnLmJ1cnN0KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyLT5jZmcubW9kZSA9PSAwIHx8CisJICAgIHItPmNmZy5tb2RlID4gKFhUX0hBU0hMSU1JVF9IQVNIX0RQVCB8CisJCQkgICBYVF9IQVNITElNSVRfSEFTSF9ESVAgfAorCQkJICAgWFRfSEFTSExJTUlUX0hBU0hfU0lQIHwKKwkJCSAgIFhUX0hBU0hMSU1JVF9IQVNIX1NQVCkpCisJCXJldHVybiAwOworCWlmICghci0+Y2ZnLmdjX2ludGVydmFsKQorCQlyZXR1cm4gMDsKKwlpZiAoIXItPmNmZy5leHBpcmUpCisJCXJldHVybiAwOworCWlmIChyLT5uYW1lW3NpemVvZihyLT5uYW1lKSAtIDFdICE9ICdcMCcpCisJCXJldHVybiAwOworCisJLyogVGhpcyBpcyB0aGUgYmVzdCB3ZSd2ZSBnb3Q6IFdlIGNhbm5vdCByZWxlYXNlIGFuZCByZS1ncmFiIGxvY2ssCisJICogc2luY2UgY2hlY2tlbnRyeSgpIGlzIGNhbGxlZCBiZWZvcmUgeF90YWJsZXMuYyBncmFicyB4dF9tdXRleC4KKwkgKiBXZSBhbHNvIGNhbm5vdCBncmFiIHRoZSBoYXNodGFibGUgc3BpbmxvY2ssIHNpbmNlIGh0YWJsZV9jcmVhdGUgd2lsbAorCSAqIGNhbGwgdm1hbGxvYywgYW5kIHRoYXQgY2FuIHNsZWVwLiAgQW5kIHdlIGNhbm5vdCBqdXN0IHJlLXNlYXJjaAorCSAqIHRoZSBsaXN0IG9mIGh0YWJsZSdzIGluIGh0YWJsZV9jcmVhdGUoKSwgc2luY2UgdGhlbiB3ZSB3b3VsZAorCSAqIGNyZWF0ZSBkdXBsaWNhdGUgcHJvYyBmaWxlcy4gLUhXICovCisJbXV0ZXhfbG9jaygmaGxpbWl0X211dGV4KTsKKwlyLT5oaW5mbyA9IGh0YWJsZV9maW5kX2dldChyLT5uYW1lLCBtYXRjaC0+ZmFtaWx5KTsKKwlpZiAoIXItPmhpbmZvICYmIGh0YWJsZV9jcmVhdGUociwgbWF0Y2gtPmZhbWlseSkgIT0gMCkgeworCQltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CisJCXJldHVybiAwOworCX0KKwltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CisKKwkvKiBVZ2x5IGhhY2s6IEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCAqLworCXItPnUubWFzdGVyID0gcjsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK2hhc2hsaW1pdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2gsIHZvaWQgKm1hdGNoaW5mbykKK3sKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKnIgPSBtYXRjaGluZm87CisKKwlodGFibGVfcHV0KHItPmhpbmZvKTsKK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfeHRfaGFzaGxpbWl0X2luZm8geworCWNoYXIgbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IGhhc2hsaW1pdF9jZmcgY2ZnOworCWNvbXBhdF91cHRyX3QgaGluZm87CisJY29tcGF0X3VwdHJfdCBtYXN0ZXI7Cit9OworCitzdGF0aWMgdm9pZCBjb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQoreworCWludCBvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3h0X2hhc2hsaW1pdF9pbmZvLCBoaW5mbyk7CisKKwltZW1jcHkoZHN0LCBzcmMsIG9mZik7CisJbWVtc2V0KGRzdCArIG9mZiwgMCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfaGFzaGxpbWl0X2luZm8pIC0gb2ZmKTsKK30KKworc3RhdGljIGludCBjb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCB2b2lkICpzcmMpCit7CisJaW50IG9mZiA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfeHRfaGFzaGxpbWl0X2luZm8sIGhpbmZvKTsKKworCXJldHVybiBjb3B5X3RvX3VzZXIoZHN0LCBzcmMsIG9mZikgPyAtRUZBVUxUIDogMDsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHh0X21hdGNoIHh0X2hhc2hsaW1pdFtdID0geworCXsKKwkJLm5hbWUJCT0gImhhc2hsaW1pdCIsCisJCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkJLm1hdGNoCQk9IGhhc2hsaW1pdF9tYXRjaCwKKwkJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8pLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkJLmNvbXBhdHNpemUJPSBzaXplb2Yoc3RydWN0IGNvbXBhdF94dF9oYXNobGltaXRfaW5mbyksCisJCS5jb21wYXRfZnJvbV91c2VyID0gY29tcGF0X2Zyb21fdXNlciwKKwkJLmNvbXBhdF90b191c2VyCT0gY29tcGF0X3RvX3VzZXIsCisjZW5kaWYKKwkJLmNoZWNrZW50cnkJPSBoYXNobGltaXRfY2hlY2tlbnRyeSwKKwkJLmRlc3Ryb3kJPSBoYXNobGltaXRfZGVzdHJveSwKKwkJLm1lCQk9IFRISVNfTU9EVUxFCisJfSwKKwl7CisJCS5uYW1lCQk9ICJoYXNobGltaXQiLAorCQkuZmFtaWx5CQk9IEFGX0lORVQ2LAorCQkubWF0Y2gJCT0gaGFzaGxpbWl0X21hdGNoLAorCQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQkuY29tcGF0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgY29tcGF0X3h0X2hhc2hsaW1pdF9pbmZvKSwKKwkJLmNvbXBhdF9mcm9tX3VzZXIgPSBjb21wYXRfZnJvbV91c2VyLAorCQkuY29tcGF0X3RvX3VzZXIJPSBjb21wYXRfdG9fdXNlciwKKyNlbmRpZgorCQkuY2hlY2tlbnRyeQk9IGhhc2hsaW1pdF9jaGVja2VudHJ5LAorCQkuZGVzdHJveQk9IGhhc2hsaW1pdF9kZXN0cm95LAorCQkubWUJCT0gVEhJU19NT0RVTEUKKwl9LAorfTsKKworLyogUFJPQyBzdHVmZiAqLworc3RhdGljIHZvaWQgKmRsX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcGRlLT5kYXRhOworCXVuc2lnbmVkIGludCAqYnVja2V0OworCisJc3Bpbl9sb2NrX2JoKCZodGFibGUtPmxvY2spOworCWlmICgqcG9zID49IGh0YWJsZS0+Y2ZnLnNpemUpCisJCXJldHVybiBOVUxMOworCisJYnVja2V0ID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWNrZXQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJKmJ1Y2tldCA9ICpwb3M7CisJcmV0dXJuIGJ1Y2tldDsKK30KKworc3RhdGljIHZvaWQgKmRsX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUgPSBzLT5wcml2YXRlOworCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGUgPSBwZGUtPmRhdGE7CisJdW5zaWduZWQgaW50ICpidWNrZXQgPSAodW5zaWduZWQgaW50ICopdjsKKworCSpwb3MgPSArKygqYnVja2V0KTsKKwlpZiAoKnBvcyA+PSBodGFibGUtPmNmZy5zaXplKSB7CisJCWtmcmVlKHYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGJ1Y2tldDsKK30KKworc3RhdGljIHZvaWQgZGxfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcGRlLT5kYXRhOworCXVuc2lnbmVkIGludCAqYnVja2V0ID0gKHVuc2lnbmVkIGludCAqKXY7CisKKwlrZnJlZShidWNrZXQpOworCXNwaW5fdW5sb2NrX2JoKCZodGFibGUtPmxvY2spOworfQorCitzdGF0aWMgaW50IGRsX3NlcV9yZWFsX3Nob3coc3RydWN0IGRzdGhhc2hfZW50ICplbnQsIGludCBmYW1pbHksCisJCQkJICAgc3RydWN0IHNlcV9maWxlICpzKQoreworCS8qIHJlY2FsY3VsYXRlIHRvIHNob3cgYWNjdXJhdGUgbnVtYmVycyAqLworCXJhdGVpbmZvX3JlY2FsYyhlbnQsIGppZmZpZXMpOworCisJc3dpdGNoIChmYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiBzZXFfcHJpbnRmKHMsICIlbGQgJXUuJXUuJXUuJXU6JXUtPiIKKwkJCQkgICAgICIldS4ldS4ldS4ldToldSAldSAldSAldVxuIiwKKwkJCQkgKGxvbmcpKGVudC0+ZXhwaXJlcyAtIGppZmZpZXMpL0haLAorCQkJCSBOSVBRVUFEKGVudC0+ZHN0LmFkZHIuaXAuc3JjKSwKKwkJCQkgbnRvaHMoZW50LT5kc3Quc3JjX3BvcnQpLAorCQkJCSBOSVBRVUFEKGVudC0+ZHN0LmFkZHIuaXAuZHN0KSwKKwkJCQkgbnRvaHMoZW50LT5kc3QuZHN0X3BvcnQpLAorCQkJCSBlbnQtPnJhdGVpbmZvLmNyZWRpdCwgZW50LT5yYXRlaW5mby5jcmVkaXRfY2FwLAorCQkJCSBlbnQtPnJhdGVpbmZvLmNvc3QpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBzZXFfcHJpbnRmKHMsICIlbGQgIiBOSVA2X0ZNVCAiOiV1LT4iCisJCQkJICAgICBOSVA2X0ZNVCAiOiV1ICV1ICV1ICV1XG4iLAorCQkJCSAobG9uZykoZW50LT5leHBpcmVzIC0gamlmZmllcykvSFosCisJCQkJIE5JUDYoKihzdHJ1Y3QgaW42X2FkZHIgKikmZW50LT5kc3QuYWRkci5pcDYuc3JjKSwKKwkJCQkgbnRvaHMoZW50LT5kc3Quc3JjX3BvcnQpLAorCQkJCSBOSVA2KCooc3RydWN0IGluNl9hZGRyICopJmVudC0+ZHN0LmFkZHIuaXA2LmRzdCksCisJCQkJIG50b2hzKGVudC0+ZHN0LmRzdF9wb3J0KSwKKwkJCQkgZW50LT5yYXRlaW5mby5jcmVkaXQsIGVudC0+cmF0ZWluZm8uY3JlZGl0X2NhcCwKKwkJCQkgZW50LT5yYXRlaW5mby5jb3N0KTsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGRsX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7CisJc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHBkZS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgKmJ1Y2tldCA9ICh1bnNpZ25lZCBpbnQgKil2OworCXN0cnVjdCBkc3RoYXNoX2VudCAqZW50OworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisKKwlpZiAoIWhsaXN0X2VtcHR5KCZodGFibGUtPmhhc2hbKmJ1Y2tldF0pKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudCwgcG9zLCAmaHRhYmxlLT5oYXNoWypidWNrZXRdLCBub2RlKQorCQkJaWYgKGRsX3NlcV9yZWFsX3Nob3coZW50LCBodGFibGUtPmZhbWlseSwgcykpCisJCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRsX3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gZGxfc2VxX3N0YXJ0LAorCS5uZXh0ICA9IGRsX3NlcV9uZXh0LAorCS5zdG9wICA9IGRsX3NlcV9zdG9wLAorCS5zaG93ICA9IGRsX3NlcV9zaG93Cit9OworCitzdGF0aWMgaW50IGRsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0ID0gc2VxX29wZW4oZmlsZSwgJmRsX3NlcV9vcHMpOworCisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IHNlcV9maWxlICpzZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJc2YtPnByaXZhdGUgPSBQREUoaW5vZGUpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbF9maWxlX29wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gZGxfcHJvY19vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZQorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfaGFzaGxpbWl0X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0geHRfcmVnaXN0ZXJfbWF0Y2hlcyh4dF9oYXNobGltaXQsIEFSUkFZX1NJWkUoeHRfaGFzaGxpbWl0KSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyMTsKKworCWVyciA9IC1FTk9NRU07CisJaGFzaGxpbWl0X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJ4dF9oYXNobGltaXQiLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBkc3RoYXNoX2VudCksIDAsIDAsCisJCQkJCSAgICBOVUxMLCBOVUxMKTsKKwlpZiAoIWhhc2hsaW1pdF9jYWNoZXApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4dF9oYXNobGltaXQ6IHVuYWJsZSB0byBjcmVhdGUgc2xhYiBjYWNoZVxuIik7CisJCWdvdG8gZXJyMjsKKwl9CisJaGFzaGxpbWl0X3Byb2NkaXI0ID0gcHJvY19ta2RpcigiaXB0X2hhc2hsaW1pdCIsIHByb2NfbmV0KTsKKwlpZiAoIWhhc2hsaW1pdF9wcm9jZGlyNCkgeworCQlwcmludGsoS0VSTl9FUlIgInh0X2hhc2hsaW1pdDogdW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGRpciAiCisJCQkJImVudHJ5XG4iKTsKKwkJZ290byBlcnIzOworCX0KKwloYXNobGltaXRfcHJvY2RpcjYgPSBwcm9jX21rZGlyKCJpcDZ0X2hhc2hsaW1pdCIsIHByb2NfbmV0KTsKKwlpZiAoIWhhc2hsaW1pdF9wcm9jZGlyNikgeworCQlwcmludGsoS0VSTl9FUlIgInh0X2hhc2hsaW1pdDogdG5hYmxlIHRvIGNyZWF0ZSBwcm9jIGRpciAiCisJCQkJImVudHJ5XG4iKTsKKwkJZ290byBlcnI0OworCX0KKwlyZXR1cm4gMDsKK2VycjQ6CisJcmVtb3ZlX3Byb2NfZW50cnkoImlwdF9oYXNobGltaXQiLCBwcm9jX25ldCk7CitlcnIzOgorCWttZW1fY2FjaGVfZGVzdHJveShoYXNobGltaXRfY2FjaGVwKTsKK2VycjI6CisJeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKHh0X2hhc2hsaW1pdCwgQVJSQVlfU0laRSh4dF9oYXNobGltaXQpKTsKK2VycjE6CisJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgeHRfaGFzaGxpbWl0X2Zpbmkodm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeSgiaXB0X2hhc2hsaW1pdCIsIHByb2NfbmV0KTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiaXA2dF9oYXNobGltaXQiLCBwcm9jX25ldCk7CisJa21lbV9jYWNoZV9kZXN0cm95KGhhc2hsaW1pdF9jYWNoZXApOworCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyh4dF9oYXNobGltaXQsIEFSUkFZX1NJWkUoeHRfaGFzaGxpbWl0KSk7Cit9CisKK21vZHVsZV9pbml0KHh0X2hhc2hsaW1pdF9pbml0KTsKK21vZHVsZV9leGl0KHh0X2hhc2hsaW1pdF9maW5pKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfbWFyay5jIGIvbmV0L25ldGZpbHRlci94dF9tYXJrLmMKaW5kZXggOTM0ZGRkZi4uZGZhMWVlNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9tYXJrLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9tYXJrLmMKQEAgLTMxLDcgKzMxLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgeHRfbWFya19pbmZvICppbmZvID0gbWF0Y2hpbmZvOwogCi0JcmV0dXJuICgoc2tiLT5uZm1hcmsgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydDsKKwlyZXR1cm4gKChza2ItPm1hcmsgJiBpbmZvLT5tYXNrKSA9PSBpbmZvLT5tYXJrKSBeIGluZm8tPmludmVydDsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmMKaW5kZXggZDNhZWZkMy4uMTYwMjA4NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9tdWx0aXBvcnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5jCkBAIC0xLDUgKzEsNSBAQAotLyogS2VybmVsIG1vZHVsZSB0byBtYXRjaCBvbmUgb2YgYSBsaXN0IG9mIFRDUC9VRFAvU0NUUC9EQ0NQIHBvcnRzOiBwb3J0cyBhcmUgaW4KLSAgIHRoZSBzYW1lIHBsYWNlIHNvIHdlIGNhbiB0cmVhdCB0aGVtIGFzIGVxdWFsLiAqLworLyogS2VybmVsIG1vZHVsZSB0byBtYXRjaCBvbmUgb2YgYSBsaXN0IG9mIFRDUC9VRFAoLUxpdGUpL1NDVFAvRENDUCBwb3J0czoKKyAgIHBvcnRzIGFyZSBpbiB0aGUgc2FtZSBwbGFjZSBzbyB3ZSBjYW4gdHJlYXQgdGhlbSBhcyBlcXVhbC4gKi8KIAogLyogKEMpIDE5OTktMjAwMSBQYXVsIGBSdXN0eScgUnVzc2VsbAogICogKEMpIDIwMDItMjAwNCBOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPgpAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICB1bnNpZ25lZCBpbnQgcHJvdG9mZiwKICAgICAgIGludCAqaG90ZHJvcCkKIHsKLQl1MTYgX3BvcnRzWzJdLCAqcHB0cjsKKwlfX2JlMTYgX3BvcnRzWzJdLCAqcHB0cjsKIAljb25zdCBzdHJ1Y3QgeHRfbXVsdGlwb3J0ICptdWx0aWluZm8gPSBtYXRjaGluZm87CiAKIAlpZiAob2Zmc2V0KQpAQCAtMTM1LDcgKzEzNSw3IEBACiAJIHVuc2lnbmVkIGludCBwcm90b2ZmLAogCSBpbnQgKmhvdGRyb3ApCiB7Ci0JdTE2IF9wb3J0c1syXSwgKnBwdHI7CisJX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CiAJY29uc3Qgc3RydWN0IHh0X211bHRpcG9ydF92MSAqbXVsdGlpbmZvID0gbWF0Y2hpbmZvOwogCiAJaWYgKG9mZnNldCkKQEAgLTE2Miw2ICsxNjIsNyBAQAogewogCS8qIE11c3Qgc3BlY2lmeSBzdXBwb3J0ZWQgcHJvdG9jb2wsIG5vIHVua25vd24gZmxhZ3Mgb3IgYmFkIGNvdW50ICovCiAJcmV0dXJuIChwcm90byA9PSBJUFBST1RPX1RDUCB8fCBwcm90byA9PSBJUFBST1RPX1VEUAorCQl8fCBwcm90byA9PSBJUFBST1RPX1VEUExJVEUKIAkJfHwgcHJvdG8gPT0gSVBQUk9UT19TQ1RQIHx8IHByb3RvID09IElQUFJPVE9fRENDUCkKIAkJJiYgIShpcF9pbnZmbGFncyAmIFhUX0lOVl9QUk9UTykKIAkJJiYgKG1hdGNoX2ZsYWdzID09IFhUX01VTFRJUE9SVF9TT1VSQ0UKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfc2N0cC5jIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKaW5kZXggNzk1NmFjYS4uNzFiZjAzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zY3RwLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJZHVwcmludGYoIkNodW5rIG51bTogJWRcdG9mZnNldDogJWRcdHR5cGU6ICVkXHRsZW5ndGg6ICVkXHRmbGFnczogJXhcbiIsIAogCQkJCSsraSwgb2Zmc2V0LCBzY2gtPnR5cGUsIGh0b25zKHNjaC0+bGVuZ3RoKSwgc2NoLT5mbGFncyk7CiAKLQkJb2Zmc2V0ICs9IChodG9ucyhzY2gtPmxlbmd0aCkgKyAzKSAmIH4zOworCQlvZmZzZXQgKz0gKG50b2hzKHNjaC0+bGVuZ3RoKSArIDMpICYgfjM7CiAKIAkJZHVwcmludGYoInNrYi0+bGVuOiAlZFx0b2Zmc2V0OiAlZFxuIiwgc2tiLT5sZW4sIG9mZnNldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3RjcHVkcC5jCmluZGV4IGU3NmE2OGUuLjQ2NDE0YjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfdGNwdWRwLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF90Y3B1ZHAuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJ4X3RhYmxlcyBtYXRjaCBmb3IgVENQIGFuZCBVRFAsIHN1cHBvcnRzIElQdjQgYW5kIElQdjYiKTsKK01PRFVMRV9ERVNDUklQVElPTigieF90YWJsZXMgbWF0Y2ggZm9yIFRDUCBhbmQgVURQKC1MaXRlKSwgc3VwcG9ydHMgSVB2NCBhbmQgSVB2NiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJ4dF90Y3AiKTsKIE1PRFVMRV9BTElBUygieHRfdWRwIik7CkBAIC0yMzQsNiArMjM0LDI0IEBACiAJCS5wcm90bwkJPSBJUFBST1RPX1VEUCwKIAkJLm1lCQk9IFRISVNfTU9EVUxFLAogCX0sCisJeworCQkubmFtZQkJPSAidWRwbGl0ZSIsCisJCS5mYW1pbHkJCT0gQUZfSU5FVCwKKwkJLmNoZWNrZW50cnkJPSB1ZHBfY2hlY2tlbnRyeSwKKwkJLm1hdGNoCQk9IHVkcF9tYXRjaCwKKwkJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgeHRfdWRwKSwKKwkJLnByb3RvCQk9IElQUFJPVE9fVURQTElURSwKKwkJLm1lCQk9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZQkJPSAidWRwbGl0ZSIsCisJCS5mYW1pbHkJCT0gQUZfSU5FVDYsCisJCS5jaGVja2VudHJ5CT0gdWRwX2NoZWNrZW50cnksCisJCS5tYXRjaAkJPSB1ZHBfbWF0Y2gsCisJCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X3VkcCksCisJCS5wcm90bwkJPSBJUFBST1RPX1VEUExJVEUsCisJCS5tZQkJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeHRfdGNwdWRwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKaW5kZXggYTZjZTFkNi4uNzQzYjA1NyAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2NpcHNvX3Y0LmMKQEAgLTQwNywxMiArNDA3LDE0IEBACiAKIAlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19DSVBTT1Y0X0FERCwKIAkJCQkJICAgICAgJmF1ZGl0X2luZm8pOwotCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAotCQkJICIgY2lwc29fZG9pPSV1IGNpcHNvX3R5cGU9JXMgcmVzPSV1IiwKLQkJCSBkb2ksCi0JCQkgdHlwZV9zdHIsCi0JCQkgcmV0X3ZhbCA9PSAwID8gMSA6IDApOwotCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKKwlpZiAoYXVkaXRfYnVmICE9IE5VTEwpIHsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCisJCQkJICIgY2lwc29fZG9pPSV1IGNpcHNvX3R5cGU9JXMgcmVzPSV1IiwKKwkJCQkgZG9pLAorCQkJCSB0eXBlX3N0ciwKKwkJCQkgcmV0X3ZhbCA9PSAwID8gMSA6IDApOworCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7CisJfQogCiAJcmV0dXJuIHJldF92YWw7CiB9CkBAIC00NTIsMTcgKzQ1NCwxMyBAQAogCX0KIAogbGlzdF9zdGFydDoKLQlhbnNfc2tiID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFICogbmxzemVfbXVsdCwgR0ZQX0tFUk5FTCk7CisJYW5zX3NrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUgKiBubHN6ZV9tdWx0LCBHRlBfS0VSTkVMKTsKIAlpZiAoYW5zX3NrYiA9PSBOVUxMKSB7CiAJCXJldF92YWwgPSAtRU5PTUVNOwogCQlnb3RvIGxpc3RfZmFpbHVyZTsKIAl9Ci0JZGF0YSA9IG5ldGxibF9uZXRsaW5rX2hkcl9wdXQoYW5zX3NrYiwKLQkJCQkgICAgICBpbmZvLT5zbmRfcGlkLAotCQkJCSAgICAgIGluZm8tPnNuZF9zZXEsCi0JCQkJICAgICAgbmV0bGJsX2NpcHNvdjRfZ25sX2ZhbWlseS5pZCwKLQkJCQkgICAgICAwLAotCQkJCSAgICAgIE5MQkxfQ0lQU09WNF9DX0xJU1QpOworCWRhdGEgPSBnZW5sbXNnX3B1dF9yZXBseShhbnNfc2tiLCBpbmZvLCAmbmV0bGJsX2NpcHNvdjRfZ25sX2ZhbWlseSwKKwkJCQkgMCwgTkxCTF9DSVBTT1Y0X0NfTElTVCk7CiAJaWYgKGRhdGEgPT0gTlVMTCkgewogCQlyZXRfdmFsID0gLUVOT01FTTsKIAkJZ290byBsaXN0X2ZhaWx1cmU7CkBAIC01NjgsNyArNTY2LDcgQEAKIAogCWdlbmxtc2dfZW5kKGFuc19za2IsIGRhdGEpOwogCi0JcmV0X3ZhbCA9IGdlbmxtc2dfdW5pY2FzdChhbnNfc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXRfdmFsID0gZ2VubG1zZ19yZXBseShhbnNfc2tiLCBpbmZvKTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlnb3RvIGxpc3RfZmFpbHVyZTsKIApAQCAtNjA3LDEyICs2MDUsOSBAQAogCXN0cnVjdCBuZXRsYmxfY2lwc292NF9kb2l3YWxrX2FyZyAqY2JfYXJnID0gYXJnOwogCXZvaWQgKmRhdGE7CiAKLQlkYXRhID0gbmV0bGJsX25ldGxpbmtfaGRyX3B1dChjYl9hcmctPnNrYiwKLQkJCQkgICAgICBORVRMSU5LX0NCKGNiX2FyZy0+bmxfY2ItPnNrYikucGlkLAotCQkJCSAgICAgIGNiX2FyZy0+c2VxLAotCQkJCSAgICAgIG5ldGxibF9jaXBzb3Y0X2dubF9mYW1pbHkuaWQsCi0JCQkJICAgICAgTkxNX0ZfTVVMVEksCi0JCQkJICAgICAgTkxCTF9DSVBTT1Y0X0NfTElTVEFMTCk7CisJZGF0YSA9IGdlbmxtc2dfcHV0KGNiX2FyZy0+c2tiLCBORVRMSU5LX0NCKGNiX2FyZy0+bmxfY2ItPnNrYikucGlkLAorCQkJICAgY2JfYXJnLT5zZXEsICZuZXRsYmxfY2lwc292NF9nbmxfZmFtaWx5LAorCQkJICAgTkxNX0ZfTVVMVEksIE5MQkxfQ0lQU09WNF9DX0xJU1RBTEwpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gbGlzdGFsbF9jYl9mYWlsdXJlOwogCkBAIC02ODcsMTEgKzY4MiwxMyBAQAogCiAJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfQ0lQU09WNF9ERUwsCiAJCQkJCSAgICAgICZhdWRpdF9pbmZvKTsKLQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKLQkJCSAiIGNpcHNvX2RvaT0ldSByZXM9JXUiLAotCQkJIGRvaSwKLQkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7Ci0JYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOworCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKKwkJCQkgIiBjaXBzb19kb2k9JXUgcmVzPSV1IiwKKwkJCQkgZG9pLAorCQkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7CisJCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKKwl9CiAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCmluZGV4IGFmNDM3MWQuLmY0NmEwYWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwpAQCAtMjAyLDcgKzIwMiw2IEBACiAJaW50IHJldF92YWw7CiAJdTMyIGJrdDsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7Ci0JY2hhciAqYXVkaXRfZG9tYWluOwogCiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewogCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CkBAIC0yNDMsMjQgKzI0MiwyNCBAQAogCX0gZWxzZQogCQlyZXRfdmFsID0gLUVJTlZBTDsKIAotCWlmIChlbnRyeS0+ZG9tYWluICE9IE5VTEwpCi0JCWF1ZGl0X2RvbWFpbiA9IGVudHJ5LT5kb21haW47Ci0JZWxzZQotCQlhdWRpdF9kb21haW4gPSAiKGRlZmF1bHQpIjsKIAlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19NQVBfQURELCBhdWRpdF9pbmZvKTsKLQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBubGJsX2RvbWFpbj0lcyIsIGF1ZGl0X2RvbWFpbik7Ci0Jc3dpdGNoIChlbnRyeS0+dHlwZSkgewotCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5sYmxfcHJvdG9jb2w9dW5sYmwiKTsKLQkJYnJlYWs7Ci0JY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJaWYgKGF1ZGl0X2J1ZiAhPSBOVUxMKSB7CiAJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAotCQkJCSAiIG5sYmxfcHJvdG9jb2w9Y2lwc292NCBjaXBzb19kb2k9JXUiLAotCQkJCSBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pKTsKLQkJYnJlYWs7CisJCQkJICIgbmxibF9kb21haW49JXMiLAorCQkJCSBlbnRyeS0+ZG9tYWluID8gZW50cnktPmRvbWFpbiA6ICIoZGVmYXVsdCkiKTsKKwkJc3dpdGNoIChlbnRyeS0+dHlwZSkgeworCQljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgbmxibF9wcm90b2NvbD11bmxibCIpOworCQkJYnJlYWs7CisJCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgorCQkJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCisJCQkJCSAiIG5sYmxfcHJvdG9jb2w9Y2lwc292NCBjaXBzb19kb2k9JXUiLAorCQkJCQkgZW50cnktPnR5cGVfZGVmLmNpcHNvdjQtPmRvaSk7CisJCQlicmVhazsKKwkJfQorCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiByZXM9JXUiLCByZXRfdmFsID09IDAgPyAxIDogMCk7CisJCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKIAl9Ci0JYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsICIgcmVzPSV1IiwgcmV0X3ZhbCA9PSAwID8gMSA6IDApOwotCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC0zMTAsNyArMzA5LDYgQEAKIAlpbnQgcmV0X3ZhbCA9IC1FTk9FTlQ7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeTsKIAlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7Ci0JY2hhciAqYXVkaXRfZG9tYWluOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWlmIChkb21haW4gIT0gTlVMTCkKQEAgLTM0OCwxNiArMzQ2LDE0IEBACiAJCXNwaW5fdW5sb2NrKCZuZXRsYmxfZG9taHNoX2RlZl9sb2NrKTsKIAl9CiAKLQlpZiAoZW50cnktPmRvbWFpbiAhPSBOVUxMKQotCQlhdWRpdF9kb21haW4gPSBlbnRyeS0+ZG9tYWluOwotCWVsc2UKLQkJYXVkaXRfZG9tYWluID0gIihkZWZhdWx0KSI7CiAJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfTUFQX0RFTCwgYXVkaXRfaW5mbyk7Ci0JYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCi0JCQkgIiBubGJsX2RvbWFpbj0lcyByZXM9JXUiLAotCQkJIGF1ZGl0X2RvbWFpbiwKLQkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7Ci0JYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOworCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKKwkJCQkgIiBubGJsX2RvbWFpbj0lcyByZXM9JXUiLAorCQkJCSBlbnRyeS0+ZG9tYWluID8gZW50cnktPmRvbWFpbiA6ICIoZGVmYXVsdCkiLAorCQkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7CisJCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKKwl9CiAKIAlpZiAocmV0X3ZhbCA9PSAwKQogCQljYWxsX3JjdSgmZW50cnktPnJjdSwgbmV0bGJsX2RvbWhzaF9mcmVlX2VudHJ5KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCmluZGV4IGZmOTcxMTAuLmUwM2EzMjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwpAQCAtNDAsNiArNDAsMjA3IEBACiAjaW5jbHVkZSAibmV0bGFiZWxfdXNlci5oIgogCiAvKgorICogU2VjdXJpdHkgQXR0cmlidXRlIEZ1bmN0aW9ucworICovCisKKy8qKgorICogbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3dhbGsgLSBXYWxrIGEgTFNNIHNlY2F0dHIgY2F0bWFwIGxvb2tpbmcgZm9yIGEgYml0CisgKiBAY2F0bWFwOiB0aGUgY2F0ZWdvcnkgYml0bWFwCisgKiBAb2Zmc2V0OiB0aGUgb2Zmc2V0IHRvIHN0YXJ0IHNlYXJjaGluZyBhdCwgaW4gYml0cworICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmdW5jdGlvbiB3YWxrcyBhIExTTSBzZWNhdHRyIGNhdGVnb3J5IGJpdG1hcCBzdGFydGluZyBhdCBAb2Zmc2V0IGFuZAorICogcmV0dXJucyB0aGUgc3BvdCBvZiB0aGUgZmlyc3Qgc2V0IGJpdCBvciAtRU5PRU5UIGlmIG5vIGJpdHMgYXJlIHNldC4KKyAqCisgKi8KK2ludCBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfd2FsayhzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwLAorCQkJICAgICAgIHUzMiBvZmZzZXQpCit7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKml0ZXIgPSBjYXRtYXA7CisJdTMyIG5vZGVfaWR4OworCXUzMiBub2RlX2JpdDsKKwlORVRMQkxfQ0FUTUFQX01BUFRZUEUgYml0bWFwOworCisJaWYgKG9mZnNldCA+IGl0ZXItPnN0YXJ0Yml0KSB7CisJCXdoaWxlIChvZmZzZXQgPj0gKGl0ZXItPnN0YXJ0Yml0ICsgTkVUTEJMX0NBVE1BUF9TSVpFKSkgeworCQkJaXRlciA9IGl0ZXItPm5leHQ7CisJCQlpZiAoaXRlciA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PRU5UOworCQl9CisJCW5vZGVfaWR4ID0gKG9mZnNldCAtIGl0ZXItPnN0YXJ0Yml0KSAvIE5FVExCTF9DQVRNQVBfTUFQU0laRTsKKwkJbm9kZV9iaXQgPSBvZmZzZXQgLSBpdGVyLT5zdGFydGJpdCAtCisJCQkgICAoTkVUTEJMX0NBVE1BUF9NQVBTSVpFICogbm9kZV9pZHgpOworCX0gZWxzZSB7CisJCW5vZGVfaWR4ID0gMDsKKwkJbm9kZV9iaXQgPSAwOworCX0KKwliaXRtYXAgPSBpdGVyLT5iaXRtYXBbbm9kZV9pZHhdID4+IG5vZGVfYml0OworCisJZm9yICg7OykgeworCQlpZiAoYml0bWFwICE9IDApIHsKKwkJCXdoaWxlICgoYml0bWFwICYgTkVUTEJMX0NBVE1BUF9CSVQpID09IDApIHsKKwkJCQliaXRtYXAgPj49IDE7CisJCQkJbm9kZV9iaXQrKzsKKwkJCX0KKwkJCXJldHVybiBpdGVyLT5zdGFydGJpdCArCisJCQkJKE5FVExCTF9DQVRNQVBfTUFQU0laRSAqIG5vZGVfaWR4KSArIG5vZGVfYml0OworCQl9CisJCWlmICgrK25vZGVfaWR4ID49IE5FVExCTF9DQVRNQVBfTUFQQ05UKSB7CisJCQlpZiAoaXRlci0+bmV4dCAhPSBOVUxMKSB7CisJCQkJaXRlciA9IGl0ZXItPm5leHQ7CisJCQkJbm9kZV9pZHggPSAwOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJYml0bWFwID0gaXRlci0+Yml0bWFwW25vZGVfaWR4XTsKKwkJbm9kZV9iaXQgPSAwOworCX0KKworCXJldHVybiAtRU5PRU5UOworfQorCisvKioKKyAqIG5ldGxibF9zZWNhdHRyX2NhdG1hcF93YWxrX3JuZyAtIEZpbmQgdGhlIGVuZCBvZiBhIHN0cmluZyBvZiBzZXQgYml0cworICogQGNhdG1hcDogdGhlIGNhdGVnb3J5IGJpdG1hcAorICogQG9mZnNldDogdGhlIG9mZnNldCB0byBzdGFydCBzZWFyY2hpbmcgYXQsIGluIGJpdHMKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgYSBMU00gc2VjYXR0ciBjYXRlZ29yeSBiaXRtYXAgc3RhcnRpbmcgYXQgQG9mZnNldCBhbmQKKyAqIHJldHVybnMgdGhlIHNwb3Qgb2YgdGhlIGZpcnN0IGNsZWFyZWQgYml0IG9yIC1FTk9FTlQgaWYgdGhlIG9mZnNldCBpcyBwYXN0CisgKiB0aGUgZW5kIG9mIHRoZSBiaXRtYXAuCisgKgorICovCitpbnQgbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3dhbGtfcm5nKHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXAsCisJCQkJICAgdTMyIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqaXRlciA9IGNhdG1hcDsKKwl1MzIgbm9kZV9pZHg7CisJdTMyIG5vZGVfYml0OworCU5FVExCTF9DQVRNQVBfTUFQVFlQRSBiaXRtYXNrOworCU5FVExCTF9DQVRNQVBfTUFQVFlQRSBiaXRtYXA7CisKKwlpZiAob2Zmc2V0ID4gaXRlci0+c3RhcnRiaXQpIHsKKwkJd2hpbGUgKG9mZnNldCA+PSAoaXRlci0+c3RhcnRiaXQgKyBORVRMQkxfQ0FUTUFQX1NJWkUpKSB7CisJCQlpdGVyID0gaXRlci0+bmV4dDsKKwkJCWlmIChpdGVyID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJbm9kZV9pZHggPSAob2Zmc2V0IC0gaXRlci0+c3RhcnRiaXQpIC8gTkVUTEJMX0NBVE1BUF9NQVBTSVpFOworCQlub2RlX2JpdCA9IG9mZnNldCAtIGl0ZXItPnN0YXJ0Yml0IC0KKwkJCSAgIChORVRMQkxfQ0FUTUFQX01BUFNJWkUgKiBub2RlX2lkeCk7CisJfSBlbHNlIHsKKwkJbm9kZV9pZHggPSAwOworCQlub2RlX2JpdCA9IDA7CisJfQorCWJpdG1hc2sgPSBORVRMQkxfQ0FUTUFQX0JJVCA8PCBub2RlX2JpdDsKKworCWZvciAoOzspIHsKKwkJYml0bWFwID0gaXRlci0+Yml0bWFwW25vZGVfaWR4XTsKKwkJd2hpbGUgKGJpdG1hc2sgIT0gMCAmJiAoYml0bWFwICYgYml0bWFzaykgIT0gMCkgeworCQkJYml0bWFzayA8PD0gMTsKKwkJCW5vZGVfYml0Kys7CisJCX0KKworCQlpZiAoYml0bWFzayAhPSAwKQorCQkJcmV0dXJuIGl0ZXItPnN0YXJ0Yml0ICsKKwkJCQkoTkVUTEJMX0NBVE1BUF9NQVBTSVpFICogbm9kZV9pZHgpICsKKwkJCQlub2RlX2JpdCAtIDE7CisJCWVsc2UgaWYgKCsrbm9kZV9pZHggPj0gTkVUTEJMX0NBVE1BUF9NQVBDTlQpIHsKKwkJCWlmIChpdGVyLT5uZXh0ID09IE5VTEwpCisJCQkJcmV0dXJuIGl0ZXItPnN0YXJ0Yml0ICsJTkVUTEJMX0NBVE1BUF9TSVpFIC0gMTsKKwkJCWl0ZXIgPSBpdGVyLT5uZXh0OworCQkJbm9kZV9pZHggPSAwOworCQl9CisJCWJpdG1hc2sgPSBORVRMQkxfQ0FUTUFQX0JJVDsKKwkJbm9kZV9iaXQgPSAwOworCX0KKworCXJldHVybiAtRU5PRU5UOworfQorCisvKioKKyAqIG5ldGxibF9zZWNhdHRyX2NhdG1hcF9zZXRiaXQgLSBTZXQgYSBiaXQgaW4gYSBMU00gc2VjYXR0ciBjYXRtYXAKKyAqIEBjYXRtYXA6IHRoZSBjYXRlZ29yeSBiaXRtYXAKKyAqIEBiaXQ6IHRoZSBiaXQgdG8gc2V0CisgKiBAZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisgKgorICogRGVzY3JpcHRpb246CisgKiBTZXQgdGhlIGJpdCBzcGVjaWZpZWQgYnkgQGJpdCBpbiBAY2F0bWFwLiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsCisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludCBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfc2V0Yml0KHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICpjYXRtYXAsCisJCQkJIHUzMiBiaXQsCisJCQkJIGdmcF90IGZsYWdzKQoreworCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICppdGVyID0gY2F0bWFwOworCXUzMiBub2RlX2JpdDsKKwl1MzIgbm9kZV9pZHg7CisKKwl3aGlsZSAoaXRlci0+bmV4dCAhPSBOVUxMICYmCisJICAgICAgIGJpdCA+PSAoaXRlci0+c3RhcnRiaXQgKyBORVRMQkxfQ0FUTUFQX1NJWkUpKQorCQlpdGVyID0gaXRlci0+bmV4dDsKKwlpZiAoYml0ID49IChpdGVyLT5zdGFydGJpdCArIE5FVExCTF9DQVRNQVBfU0laRSkpIHsKKwkJaXRlci0+bmV4dCA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF9hbGxvYyhmbGFncyk7CisJCWlmIChpdGVyLT5uZXh0ID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaXRlciA9IGl0ZXItPm5leHQ7CisJCWl0ZXItPnN0YXJ0Yml0ID0gYml0ICYgfihORVRMQkxfQ0FUTUFQX1NJWkUgLSAxKTsKKwl9CisKKwkvKiBnY2MgYWx3YXlzIHJvdW5kcyB0byB6ZXJvIHdoZW4gZG9pbmcgaW50ZWdlciBkaXZpc2lvbiAqLworCW5vZGVfaWR4ID0gKGJpdCAtIGl0ZXItPnN0YXJ0Yml0KSAvIE5FVExCTF9DQVRNQVBfTUFQU0laRTsKKwlub2RlX2JpdCA9IGJpdCAtIGl0ZXItPnN0YXJ0Yml0IC0gKE5FVExCTF9DQVRNQVBfTUFQU0laRSAqIG5vZGVfaWR4KTsKKwlpdGVyLT5iaXRtYXBbbm9kZV9pZHhdIHw9IE5FVExCTF9DQVRNQVBfQklUIDw8IG5vZGVfYml0OworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3NldHJuZyAtIFNldCBhIHJhbmdlIG9mIGJpdHMgaW4gYSBMU00gc2VjYXR0ciBjYXRtYXAKKyAqIEBjYXRtYXA6IHRoZSBjYXRlZ29yeSBiaXRtYXAKKyAqIEBzdGFydDogdGhlIHN0YXJ0aW5nIGJpdAorICogQGVuZDogdGhlIGxhc3QgYml0IGluIHRoZSBzdHJpbmcKKyAqIEBmbGFnczogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFNldCBhIHJhbmdlIG9mIGJpdHMsIHN0YXJ0aW5nIGF0IEBzdGFydCBhbmQgZW5kaW5nIHdpdGggQGVuZC4gIFJldHVybnMgemVybworICogb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKgorICovCitpbnQgbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3NldHJuZyhzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwLAorCQkJCSB1MzIgc3RhcnQsCisJCQkJIHUzMiBlbmQsCisJCQkJIGdmcF90IGZsYWdzKQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqaXRlciA9IGNhdG1hcDsKKwl1MzIgaXRlcl9tYXhfc3BvdDsKKwl1MzIgc3BvdDsKKworCS8qIFhYWCAtIFRoaXMgY291bGQgcHJvYmFibHkgYmUgbWFkZSBhIGJpdCBmYXN0ZXIgYnkgY29tYmluaW5nIHdyaXRlcworCSAqIHRvIHRoZSBjYXRtYXAgaW5zdGVhZCBvZiBzZXR0aW5nIGEgc2luZ2xlIGJpdCBlYWNoIHRpbWUsIGJ1dCBmb3IKKwkgKiByaWdodCBub3cgc2tpcHBpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBpbiB0aGUgY2F0bWFwIHNob3VsZAorCSAqIGJlIGEgbmljZSBpbXByb3ZlbWVudCBvdmVyIGNhbGxpbmcgdGhlIGluZGl2aWR1YWwgc2V0Yml0IGZ1bmN0aW9uCisJICogcmVwZWF0ZWRseSBmcm9tIGEgbG9vcC4gKi8KKworCXdoaWxlIChpdGVyLT5uZXh0ICE9IE5VTEwgJiYKKwkgICAgICAgc3RhcnQgPj0gKGl0ZXItPnN0YXJ0Yml0ICsgTkVUTEJMX0NBVE1BUF9TSVpFKSkKKwkJaXRlciA9IGl0ZXItPm5leHQ7CisJaXRlcl9tYXhfc3BvdCA9IGl0ZXItPnN0YXJ0Yml0ICsgTkVUTEJMX0NBVE1BUF9TSVpFOworCisJZm9yIChzcG90ID0gc3RhcnQ7IHNwb3QgPD0gZW5kICYmIHJldF92YWwgPT0gMDsgc3BvdCsrKSB7CisJCWlmIChzcG90ID49IGl0ZXJfbWF4X3Nwb3QgJiYgaXRlci0+bmV4dCAhPSBOVUxMKSB7CisJCQlpdGVyID0gaXRlci0+bmV4dDsKKwkJCWl0ZXJfbWF4X3Nwb3QgPSBpdGVyLT5zdGFydGJpdCArIE5FVExCTF9DQVRNQVBfU0laRTsKKwkJfQorCQlyZXRfdmFsID0gbmV0bGJsX3NlY2F0dHJfY2F0bWFwX3NldGJpdChpdGVyLCBzcG90LCBHRlBfQVRPTUlDKTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoKICAqIExTTSBGdW5jdGlvbnMKICAqLwogCkBAIC02Miw2ICsyNjMsOSBAQAogCWludCByZXRfdmFsID0gLUVOT0VOVDsKIAlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmRvbV9lbnRyeTsKIAorCWlmICgoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9ET01BSU4pID09IDApCisJCXJldHVybiAtRU5PRU5UOworCiAJcmN1X3JlYWRfbG9jaygpOwogCWRvbV9lbnRyeSA9IG5ldGxibF9kb21oc2hfZ2V0ZW50cnkoc2VjYXR0ci0+ZG9tYWluKTsKIAlpZiAoZG9tX2VudHJ5ID09IE5VTEwpCkBAIC0xNDYsMTAgKzM1MCw4IEBACiBpbnQgbmV0bGJsX3NrYnVmZl9nZXRhdHRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JaW50IHJldF92YWw7Ci0KLQlyZXRfdmFsID0gY2lwc29fdjRfc2tidWZmX2dldGF0dHIoc2tiLCBzZWNhdHRyKTsKLQlpZiAocmV0X3ZhbCA9PSAwKQorCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpICYmCisJICAgIGNpcHNvX3Y0X3NrYnVmZl9nZXRhdHRyKHNrYiwgc2VjYXR0cikgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gbmV0bGJsX3VubGFiZWxfZ2V0YXR0cihzZWNhdHRyKTsKQEAgLTIwMCw3ICs0MDIsNyBAQAogaW50IG5ldGxibF9jYWNoZV9hZGQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewotCWlmIChzZWNhdHRyLT5jYWNoZSA9PSBOVUxMKQorCWlmICgoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9DQUNIRSkgPT0gMCkKIAkJcmV0dXJuIC1FTk9NU0c7CiAKIAlpZiAoQ0lQU09fVjRfT1BURVhJU1Qoc2tiKSkKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCmluZGV4IDUzYzkwNzlhLi5lOGM4MGYzIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKQEAgLTE4OCwxMiArMTg4LDkgQEAKIAlzdHJ1Y3QgbmV0bGJsX2RvbWhzaF93YWxrX2FyZyAqY2JfYXJnID0gYXJnOwogCXZvaWQgKmRhdGE7CiAKLQlkYXRhID0gbmV0bGJsX25ldGxpbmtfaGRyX3B1dChjYl9hcmctPnNrYiwKLQkJCQkgICAgICBORVRMSU5LX0NCKGNiX2FyZy0+bmxfY2ItPnNrYikucGlkLAotCQkJCSAgICAgIGNiX2FyZy0+c2VxLAotCQkJCSAgICAgIG5ldGxibF9tZ210X2dubF9mYW1pbHkuaWQsCi0JCQkJICAgICAgTkxNX0ZfTVVMVEksCi0JCQkJICAgICAgTkxCTF9NR01UX0NfTElTVEFMTCk7CisJZGF0YSA9IGdlbmxtc2dfcHV0KGNiX2FyZy0+c2tiLCBORVRMSU5LX0NCKGNiX2FyZy0+bmxfY2ItPnNrYikucGlkLAorCQkJICAgY2JfYXJnLT5zZXEsICZuZXRsYmxfbWdtdF9nbmxfZmFtaWx5LAorCQkJICAgTkxNX0ZfTVVMVEksIE5MQkxfTUdNVF9DX0xJU1RBTEwpOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gbGlzdGFsbF9jYl9mYWlsdXJlOwogCkBAIC0zNTYsMTUgKzM1MywxMSBAQAogCXZvaWQgKmRhdGE7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeTsKIAotCWFuc19za2IgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWFuc19za2IgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoYW5zX3NrYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkYXRhID0gbmV0bGJsX25ldGxpbmtfaGRyX3B1dChhbnNfc2tiLAotCQkJCSAgICAgIGluZm8tPnNuZF9waWQsCi0JCQkJICAgICAgaW5mby0+c25kX3NlcSwKLQkJCQkgICAgICBuZXRsYmxfbWdtdF9nbmxfZmFtaWx5LmlkLAotCQkJCSAgICAgIDAsCi0JCQkJICAgICAgTkxCTF9NR01UX0NfTElTVERFRik7CisJZGF0YSA9IGdlbmxtc2dfcHV0X3JlcGx5KGFuc19za2IsIGluZm8sICZuZXRsYmxfbWdtdF9nbmxfZmFtaWx5LAorCQkJCSAwLCBOTEJMX01HTVRfQ19MSVNUREVGKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIGxpc3RkZWZfZmFpbHVyZTsKIApAQCAtMzkwLDcgKzM4Myw3IEBACiAKIAlnZW5sbXNnX2VuZChhbnNfc2tiLCBkYXRhKTsKIAotCXJldF92YWwgPSBnZW5sbXNnX3VuaWNhc3QoYW5zX3NrYiwgaW5mby0+c25kX3BpZCk7CisJcmV0X3ZhbCA9IGdlbmxtc2dfcmVwbHkoYW5zX3NrYiwgaW5mbyk7CiAJaWYgKHJldF92YWwgIT0gMCkKIAkJZ290byBsaXN0ZGVmX2ZhaWx1cmU7CiAJcmV0dXJuIDA7CkBAIC00MjIsMTIgKzQxNSw5IEBACiAJaW50IHJldF92YWwgPSAtRU5PTUVNOwogCXZvaWQgKmRhdGE7CiAKLQlkYXRhID0gbmV0bGJsX25ldGxpbmtfaGRyX3B1dChza2IsCi0JCQkJICAgICAgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCi0JCQkJICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLAotCQkJCSAgICAgIG5ldGxibF9tZ210X2dubF9mYW1pbHkuaWQsCi0JCQkJICAgICAgTkxNX0ZfTVVMVEksCi0JCQkJICAgICAgTkxCTF9NR01UX0NfUFJPVE9DT0xTKTsKKwlkYXRhID0gZ2VubG1zZ19wdXQoc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwgY2ItPm5saC0+bmxtc2dfc2VxLAorCQkJICAgJm5ldGxibF9tZ210X2dubF9mYW1pbHksIE5MTV9GX01VTFRJLAorCQkJICAgTkxCTF9NR01UX0NfUFJPVE9DT0xTKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIHByb3RvY29sc19jYl9mYWlsdXJlOwogCkBAIC00OTIsMTUgKzQ4MiwxMSBAQAogCXN0cnVjdCBza19idWZmICphbnNfc2tiID0gTlVMTDsKIAl2b2lkICpkYXRhOwogCi0JYW5zX3NrYiA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJYW5zX3NrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChhbnNfc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWRhdGEgPSBuZXRsYmxfbmV0bGlua19oZHJfcHV0KGFuc19za2IsCi0JCQkJICAgICAgaW5mby0+c25kX3BpZCwKLQkJCQkgICAgICBpbmZvLT5zbmRfc2VxLAotCQkJCSAgICAgIG5ldGxibF9tZ210X2dubF9mYW1pbHkuaWQsCi0JCQkJICAgICAgMCwKLQkJCQkgICAgICBOTEJMX01HTVRfQ19WRVJTSU9OKTsKKwlkYXRhID0gZ2VubG1zZ19wdXRfcmVwbHkoYW5zX3NrYiwgaW5mbywgJm5ldGxibF9tZ210X2dubF9mYW1pbHksCisJCQkJIDAsIE5MQkxfTUdNVF9DX1ZFUlNJT04pOwogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gdmVyc2lvbl9mYWlsdXJlOwogCkBAIC01MTIsNyArNDk4LDcgQEAKIAogCWdlbmxtc2dfZW5kKGFuc19za2IsIGRhdGEpOwogCi0JcmV0X3ZhbCA9IGdlbmxtc2dfdW5pY2FzdChhbnNfc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXRfdmFsID0gZ2VubG1zZ19yZXBseShhbnNfc2tiLCBpbmZvKTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlnb3RvIHZlcnNpb25fZmFpbHVyZTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYwppbmRleCAxODMzYWQyLi41YmMzNzE4IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgpAQCAtNDcsNyArNDgsOCBAQAogI2luY2x1ZGUgIm5ldGxhYmVsX3VubGFiZWxlZC5oIgogCiAvKiBBY2NlcHQgdW5sYWJlbGVkIHBhY2tldHMgZmxhZyAqLwotc3RhdGljIGF0b21pY190IG5ldGxhYmVsX3VubGFiZWxfYWNjZXB0X2ZsZyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIERFRklORV9TUElOTE9DSyhuZXRsYWJlbF91bmxhYmVsX2FjY2VwdGZsZ19sb2NrKTsKK3N0YXRpYyB1OCBuZXRsYWJlbF91bmxhYmVsX2FjY2VwdGZsZyA9IDA7CiAKIC8qIE5ldExhYmVsIEdlbmVyaWMgTkVUTElOSyBDSVBTT3Y0IGZhbWlseSAqLwogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBuZXRsYmxfdW5sYWJlbF9nbmxfZmFtaWx5ID0gewpAQCAtODIsMTMgKzg0LDIwIEBACiAJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOwogCXU4IG9sZF92YWw7CiAKLQlvbGRfdmFsID0gYXRvbWljX3JlYWQoJm5ldGxhYmVsX3VubGFiZWxfYWNjZXB0X2ZsZyk7Ci0JYXRvbWljX3NldCgmbmV0bGFiZWxfdW5sYWJlbF9hY2NlcHRfZmxnLCB2YWx1ZSk7CisJcmN1X3JlYWRfbG9jaygpOworCW9sZF92YWwgPSBuZXRsYWJlbF91bmxhYmVsX2FjY2VwdGZsZzsKKwlzcGluX2xvY2soJm5ldGxhYmVsX3VubGFiZWxfYWNjZXB0ZmxnX2xvY2spOworCW5ldGxhYmVsX3VubGFiZWxfYWNjZXB0ZmxnID0gdmFsdWU7CisJc3Bpbl91bmxvY2soJm5ldGxhYmVsX3VubGFiZWxfYWNjZXB0ZmxnX2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfVU5MQkxfQUxMT1csCiAJCQkJCSAgICAgIGF1ZGl0X2luZm8pOwotCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHVubGJsX2FjY2VwdD0ldSBvbGQ9JXUiLCB2YWx1ZSwgb2xkX3ZhbCk7Ci0JYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOworCWlmIChhdWRpdF9idWYgIT0gTlVMTCkgeworCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKKwkJCQkgIiB1bmxibF9hY2NlcHQ9JXUgb2xkPSV1IiwgdmFsdWUsIG9sZF92YWwpOworCQlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7CisJfQogfQogCiAvKgpAQCAtMTM4LDI5ICsxNDcsMjcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqYW5zX3NrYjsKIAl2b2lkICpkYXRhOwogCi0JYW5zX3NrYiA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJYW5zX3NrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChhbnNfc2tiID09IE5VTEwpCiAJCWdvdG8gbGlzdF9mYWlsdXJlOwotCWRhdGEgPSBuZXRsYmxfbmV0bGlua19oZHJfcHV0KGFuc19za2IsCi0JCQkJICAgICAgaW5mby0+c25kX3BpZCwKLQkJCQkgICAgICBpbmZvLT5zbmRfc2VxLAotCQkJCSAgICAgIG5ldGxibF91bmxhYmVsX2dubF9mYW1pbHkuaWQsCi0JCQkJICAgICAgMCwKLQkJCQkgICAgICBOTEJMX1VOTEFCRUxfQ19MSVNUKTsKKwlkYXRhID0gZ2VubG1zZ19wdXRfcmVwbHkoYW5zX3NrYiwgaW5mbywgJm5ldGxibF91bmxhYmVsX2dubF9mYW1pbHksCisJCQkJIDAsIE5MQkxfVU5MQUJFTF9DX0xJU1QpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJcmV0X3ZhbCA9IC1FTk9NRU07CiAJCWdvdG8gbGlzdF9mYWlsdXJlOwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKIAlyZXRfdmFsID0gbmxhX3B1dF91OChhbnNfc2tiLAogCQkJICAgICBOTEJMX1VOTEFCRUxfQV9BQ1BURkxHLAotCQkJICAgICBhdG9taWNfcmVhZCgmbmV0bGFiZWxfdW5sYWJlbF9hY2NlcHRfZmxnKSk7CisJCQkgICAgIG5ldGxhYmVsX3VubGFiZWxfYWNjZXB0ZmxnKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlnb3RvIGxpc3RfZmFpbHVyZTsKIAogCWdlbmxtc2dfZW5kKGFuc19za2IsIGRhdGEpOwogCi0JcmV0X3ZhbCA9IGdlbmxtc2dfdW5pY2FzdChhbnNfc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwlyZXRfdmFsID0gZ2VubG1zZ19yZXBseShhbnNfc2tiLCBpbmZvKTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlnb3RvIGxpc3RfZmFpbHVyZTsKIAlyZXR1cm4gMDsKQEAgLTI0MCwxMCArMjQ3LDE3IEBACiAgKi8KIGludCBuZXRsYmxfdW5sYWJlbF9nZXRhdHRyKHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JaWYgKGF0b21pY19yZWFkKCZuZXRsYWJlbF91bmxhYmVsX2FjY2VwdF9mbGcpID09IDEpCi0JCXJldHVybiBuZXRsYmxfc2VjYXR0cl9pbml0KHNlY2F0dHIpOworCWludCByZXRfdmFsOwogCi0JcmV0dXJuIC1FTk9NU0c7CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChuZXRsYWJlbF91bmxhYmVsX2FjY2VwdGZsZyA9PSAxKSB7CisJCW5ldGxibF9zZWNhdHRyX2luaXQoc2VjYXR0cik7CisJCXJldF92YWwgPSAwOworCX0gZWxzZQorCQlyZXRfdmFsID0gLUVOT01TRzsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByZXRfdmFsOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jCmluZGV4IDk4YTQxNjMuLjQyZjEyYmQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYwpAQCAtNDYsNiArNDYsMTAgQEAKICNpbmNsdWRlICJuZXRsYWJlbF9jaXBzb192NC5oIgogI2luY2x1ZGUgIm5ldGxhYmVsX3VzZXIuaCIKIAorLyogZG8gbm90IGRvIGFueSBhdWRpdGluZyBpZiBhdWRpdF9lbmFibGVkID09IDAsIHNlZSBrZXJuZWwvYXVkaXQuYyBmb3IKKyAqIGRldGFpbHMgKi8KK2V4dGVybiBpbnQgYXVkaXRfZW5hYmxlZDsKKwogLyoKICAqIE5ldExhYmVsIE5FVExJTksgU2V0dXAgRnVuY3Rpb25zCiAgKi8KQEAgLTEwMSw2ICsxMDUsOSBAQAogCWNoYXIgKnNlY2N0eDsKIAl1MzIgc2VjY3R4X2xlbjsKIAorCWlmIChhdWRpdF9lbmFibGVkID09IDApCisJCXJldHVybiBOVUxMOworCiAJYXVkaXRfYnVmID0gYXVkaXRfbG9nX3N0YXJ0KGF1ZGl0X2N0eCwgR0ZQX0FUT01JQywgdHlwZSk7CiAJaWYgKGF1ZGl0X2J1ZiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmggYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oCmluZGV4IDQ3OTY3ZWYuLjZkN2Y0YWIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuaApAQCAtNDIsMzcgKzQyLDYgQEAKIC8qIE5ldExhYmVsIE5FVExJTksgaGVscGVyIGZ1bmN0aW9ucyAqLwogCiAvKioKLSAqIG5ldGxibF9uZXRsaW5rX2hkcl9wdXQgLSBXcml0ZSB0aGUgTkVUTElOSyBidWZmZXJzIGludG8gYSBza19idWZmCi0gKiBAc2tiOiB0aGUgcGFja2V0Ci0gKiBAcGlkOiB0aGUgUElEIG9mIHRoZSByZWNlaXBpZW50Ci0gKiBAc2VxOiB0aGUgc2VxdWVuY2UgbnVtYmVyCi0gKiBAdHlwZTogdGhlIGdlbmVyaWMgTkVUTElOSyBtZXNzYWdlIGZhbWlseSB0eXBlCi0gKiBAY21kOiBjb21tYW5kCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiBXcml0ZSBib3RoIGEgTkVUTElOSyBubG1zZ2hkciBzdHJ1Y3R1cmUgYW5kIGEgR2VuZXJpYyBORVRMSU5LIGdlbmxtc2doZHIKLSAqIHN0cnVjdCB0byB0aGUgcGFja2V0LiAgUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXlsb2FkIGJ1ZmZlcgotICogb24gc3VjY2VzcyBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKm5ldGxibF9uZXRsaW5rX2hkcl9wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgdTMyIHBpZCwKLQkJCQkJICAgdTMyIHNlcSwKLQkJCQkJICAgaW50IHR5cGUsCi0JCQkJCSAgIGludCBmbGFncywKLQkJCQkJICAgdTggY21kKQotewotCXJldHVybiBnZW5sbXNnX3B1dChza2IsCi0JCQkgICBwaWQsCi0JCQkgICBzZXEsCi0JCQkgICB0eXBlLAotCQkJICAgMCwKLQkJCSAgIGZsYWdzLAotCQkJICAgY21kLAotCQkJICAgTkVUTEJMX1BST1RPX1ZFUlNJT04pOwotfQotCi0vKioKICAqIG5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyAtIEZldGNoIHRoZSBhdWRpdCBpbmZvcm1hdGlvbiBmcm9tIGEgTkVUTElOSyBtc2cKICAqIEBza2I6IHRoZSBwYWNrZXQKICAqIEBhdWRpdF9pbmZvOiBOZXRMYWJlbCBhdWRpdCBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IGQ1MjdjODkuLjNiYWFmYjEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTExNDgsMTIgKzExNDgsMTEgQEAKIAlpZiAobGVuID4gc2stPnNrX3NuZGJ1ZiAtIDMyKQogCQlnb3RvIG91dDsKIAllcnIgPSAtRU5PQlVGUzsKLQlza2IgPSBubG1zZ19uZXcobGVuLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2tiPT1OVUxMKQogCQlnb3RvIG91dDsKIAogCU5FVExJTktfQ0Ioc2tiKS5waWQJPSBubGstPnBpZDsKLQlORVRMSU5LX0NCKHNrYikuZHN0X3BpZCA9IGRzdF9waWQ7CiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IGRzdF9ncm91cDsKIAlORVRMSU5LX0NCKHNrYikubG9naW51aWQgPSBhdWRpdF9nZXRfbG9naW51aWQoY3VycmVudC0+YXVkaXRfY29udGV4dCk7CiAJc2VsaW51eF9nZXRfdGFza19zaWQoY3VycmVudCwgJihORVRMSU5LX0NCKHNrYikuc2lkKSk7CkBAIC0xNDM1LDE0ICsxNDM0LDEzIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKnJlcDsKIAlzdHJ1Y3Qgbmxtc2dlcnIgKmVycm1zZzsKLQlpbnQgc2l6ZTsKKwlzaXplX3QgcGF5bG9hZCA9IHNpemVvZigqZXJybXNnKTsKIAotCWlmIChlcnIgPT0gMCkKLQkJc2l6ZSA9IG5sbXNnX3RvdGFsX3NpemUoc2l6ZW9mKCplcnJtc2cpKTsKLQllbHNlCi0JCXNpemUgPSBubG1zZ190b3RhbF9zaXplKHNpemVvZigqZXJybXNnKSArIG5sbXNnX2xlbihubGgpKTsKKwkvKiBlcnJvciBtZXNzYWdlcyBnZXQgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYXBwZW5lZCAqLworCWlmIChlcnIpCisJCXBheWxvYWQgKz0gbmxtc2dfbGVuKG5saCk7CiAKLQlza2IgPSBubG1zZ19uZXcoc2l6ZSwgR0ZQX0tFUk5FTCk7CisJc2tiID0gbmxtc2dfbmV3KHBheWxvYWQsIEdGUF9LRVJORUwpOwogCWlmICghc2tiKSB7CiAJCXN0cnVjdCBzb2NrICpzazsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwppbmRleCA0OWJjMmRiLi5iOWIwMzc0IDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9nZW5ldGxpbmsuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJCX0KIAogCQkqZXJycCA9IGVyciA9IG5ldGxpbmtfZHVtcF9zdGFydChnZW5sX3NvY2ssIHNrYiwgbmxoLAotCQkJCQkJIG9wcy0+ZHVtcGl0LCBOVUxMKTsKKwkJCQkJCSBvcHMtPmR1bXBpdCwgb3BzLT5kb25lKTsKIAkJaWYgKGVyciA9PSAwKQogCQkJc2tiX3B1bGwoc2tiLCBtaW4oTkxNU0dfQUxJR04obmxoLT5ubG1zZ19sZW4pLAogCQkJCQkgIHNrYi0+bGVuKSk7CkBAIC0zODQsMTYgKzM4NCwxOSBAQAogICogQ29udHJvbGxlcgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGdlbmxfY3RybCA9IHsKKwkuaWQgPSBHRU5MX0lEX0NUUkwsCisJLm5hbWUgPSAibmxjdHJsIiwKKwkudmVyc2lvbiA9IDB4MSwKKwkubWF4YXR0ciA9IENUUkxfQVRUUl9NQVgsCit9OworCiBzdGF0aWMgaW50IGN0cmxfZmlsbF9pbmZvKHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LCB1MzIgcGlkLCB1MzIgc2VxLAogCQkJICB1MzIgZmxhZ3MsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGNtZCkKIHsKLQlzdHJ1Y3QgbmxhdHRyICpubGFfb3BzOwotCXN0cnVjdCBnZW5sX29wcyAqb3BzOwogCXZvaWQgKmhkcjsKLQlpbnQgaWR4ID0gMTsKIAotCWhkciA9IGdlbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIEdFTkxfSURfQ1RSTCwgMCwgZmxhZ3MsIGNtZCwKLQkJCSAgZmFtaWx5LT52ZXJzaW9uKTsKKwloZHIgPSBnZW5sbXNnX3B1dChza2IsIHBpZCwgc2VxLCAmZ2VubF9jdHJsLCBmbGFncywgY21kKTsKIAlpZiAoaGRyID09IE5VTEwpCiAJCXJldHVybiAtMTsKIApAQCAtNDAzLDM0ICs0MDYsNDAgQEAKIAlOTEFfUFVUX1UzMihza2IsIENUUkxfQVRUUl9IRFJTSVpFLCBmYW1pbHktPmhkcnNpemUpOwogCU5MQV9QVVRfVTMyKHNrYiwgQ1RSTF9BVFRSX01BWEFUVFIsIGZhbWlseS0+bWF4YXR0cik7CiAKLQlubGFfb3BzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBDVFJMX0FUVFJfT1BTKTsKLQlpZiAobmxhX29wcyA9PSBOVUxMKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwlpZiAoIWxpc3RfZW1wdHkoJmZhbWlseS0+b3BzX2xpc3QpKSB7CisJCXN0cnVjdCBubGF0dHIgKm5sYV9vcHM7CisJCXN0cnVjdCBnZW5sX29wcyAqb3BzOworCQlpbnQgaWR4ID0gMTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCAmZmFtaWx5LT5vcHNfbGlzdCwgb3BzX2xpc3QpIHsKLQkJc3RydWN0IG5sYXR0ciAqbmVzdDsKLQotCQluZXN0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBpZHgrKyk7Ci0JCWlmIChuZXN0ID09IE5VTEwpCisJCW5sYV9vcHMgPSBubGFfbmVzdF9zdGFydChza2IsIENUUkxfQVRUUl9PUFMpOworCQlpZiAobmxhX29wcyA9PSBOVUxMKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQkJTkxBX1BVVF9VMzIoc2tiLCBDVFJMX0FUVFJfT1BfSUQsIG9wcy0+Y21kKTsKLQkJTkxBX1BVVF9VMzIoc2tiLCBDVFJMX0FUVFJfT1BfRkxBR1MsIG9wcy0+ZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wcywgJmZhbWlseS0+b3BzX2xpc3QsIG9wc19saXN0KSB7CisJCQlzdHJ1Y3QgbmxhdHRyICpuZXN0OwogCi0JCWlmIChvcHMtPnBvbGljeSkKLQkJCU5MQV9QVVRfRkxBRyhza2IsIENUUkxfQVRUUl9PUF9QT0xJQ1kpOworCQkJbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgaWR4KyspOworCQkJaWYgKG5lc3QgPT0gTlVMTCkKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCQlpZiAob3BzLT5kb2l0KQotCQkJTkxBX1BVVF9GTEFHKHNrYiwgQ1RSTF9BVFRSX09QX0RPSVQpOworCQkJTkxBX1BVVF9VMzIoc2tiLCBDVFJMX0FUVFJfT1BfSUQsIG9wcy0+Y21kKTsKKwkJCU5MQV9QVVRfVTMyKHNrYiwgQ1RSTF9BVFRSX09QX0ZMQUdTLCBvcHMtPmZsYWdzKTsKIAotCQlpZiAob3BzLT5kdW1waXQpCi0JCQlOTEFfUFVUX0ZMQUcoc2tiLCBDVFJMX0FUVFJfT1BfRFVNUElUKTsKKwkJCWlmIChvcHMtPnBvbGljeSkKKwkJCQlOTEFfUFVUX0ZMQUcoc2tiLCBDVFJMX0FUVFJfT1BfUE9MSUNZKTsKIAotCQlubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTsKKwkJCWlmIChvcHMtPmRvaXQpCisJCQkJTkxBX1BVVF9GTEFHKHNrYiwgQ1RSTF9BVFRSX09QX0RPSVQpOworCisJCQlpZiAob3BzLT5kdW1waXQpCisJCQkJTkxBX1BVVF9GTEFHKHNrYiwgQ1RSTF9BVFRSX09QX0RVTVBJVCk7CisKKwkJCW5sYV9uZXN0X2VuZChza2IsIG5lc3QpOworCQl9CisKKwkJbmxhX25lc3RfZW5kKHNrYiwgbmxhX29wcyk7CiAJfQogCi0JbmxhX25lc3RfZW5kKHNrYiwgbmxhX29wcyk7Ci0KIAlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBoZHIpOwogCiBubGFfcHV0X2ZhaWx1cmU6CkBAIC00ODAsNyArNDg5LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKLQlza2IgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCXNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0JVRlMpOwogCkBAIC01MjksNyArNTM4LDcgQEAKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JZXJyID0gZ2VubG1zZ191bmljYXN0KG1zZywgaW5mby0+c25kX3BpZCk7CisJZXJyID0gZ2VubG1zZ19yZXBseShtc2csIGluZm8pOwogZXJyb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC01NjIsMTMgKzU3MSw2IEBACiAJLnBvbGljeQkJPSBjdHJsX3BvbGljeSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZ2VubF9jdHJsID0gewotCS5pZCA9IEdFTkxfSURfQ1RSTCwKLQkubmFtZSA9ICJubGN0cmwiLAotCS52ZXJzaW9uID0gMHgxLAotCS5tYXhhdHRyID0gQ1RSTF9BVFRSX01BWCwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGdlbmxfaW5pdCh2b2lkKQogewogCWludCBpLCBlcnI7CmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL25yX3JvdXRlLmMgYi9uZXQvbmV0cm9tL25yX3JvdXRlLmMKaW5kZXggYzExNzM3Zi4uMDA5NjEwNSAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9ucl9yb3V0ZS5jCisrKyBiL25ldC9uZXRyb20vbnJfcm91dGUuYwpAQCAtMTU1LDE0ICsxNTUsMTUgQEAKIAkJYXRvbWljX3NldCgmbnJfbmVpZ2gtPnJlZmNvdW50LCAxKTsKIAogCQlpZiAoYXgyNV9kaWdpICE9IE5VTEwgJiYgYXgyNV9kaWdpLT5uZGlnaSA+IDApIHsKLQkJCWlmICgobnJfbmVpZ2gtPmRpZ2lwZWF0ID0ga21hbGxvYyhzaXplb2YoKmF4MjVfZGlnaSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCQlucl9uZWlnaC0+ZGlnaXBlYXQgPSBrbWVtZHVwKGF4MjVfZGlnaSwKKwkJCQkJCSAgICAgc2l6ZW9mKCpheDI1X2RpZ2kpLAorCQkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJCWlmIChucl9uZWlnaC0+ZGlnaXBlYXQgPT0gTlVMTCkgewogCQkJCWtmcmVlKG5yX25laWdoKTsKIAkJCQlpZiAobnJfbm9kZSkKIAkJCQkJbnJfbm9kZV9wdXQobnJfbm9kZSk7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9Ci0JCQltZW1jcHkobnJfbmVpZ2gtPmRpZ2lwZWF0LCBheDI1X2RpZ2ksCi0JCQkJCXNpemVvZigqYXgyNV9kaWdpKSk7CiAJCX0KIAogCQlzcGluX2xvY2tfYmgoJm5yX25laWdoX2xpc3RfbG9jayk7CkBAIC00MzIsMTEgKzQzMywxMiBAQAogCWF0b21pY19zZXQoJm5yX25laWdoLT5yZWZjb3VudCwgMSk7CiAKIAlpZiAoYXgyNV9kaWdpICE9IE5VTEwgJiYgYXgyNV9kaWdpLT5uZGlnaSA+IDApIHsKLQkJaWYgKChucl9uZWlnaC0+ZGlnaXBlYXQgPSBrbWFsbG9jKHNpemVvZigqYXgyNV9kaWdpKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJbnJfbmVpZ2gtPmRpZ2lwZWF0ID0ga21lbWR1cChheDI1X2RpZ2ksIHNpemVvZigqYXgyNV9kaWdpKSwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKG5yX25laWdoLT5kaWdpcGVhdCA9PSBOVUxMKSB7CiAJCQlrZnJlZShucl9uZWlnaCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCQltZW1jcHkobnJfbmVpZ2gtPmRpZ2lwZWF0LCBheDI1X2RpZ2ksIHNpemVvZigqYXgyNV9kaWdpKSk7CiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZucl9uZWlnaF9saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZjRjY2I5MC4uMDhlNjhiNiAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtMjAxLDcgKzIwMiw3IEBACiAJc3BpbmxvY2tfdAkJYmluZF9sb2NrOwogCWNoYXIJCQlydW5uaW5nOwkvKiBwcm90X2hvb2sgaXMgYXR0YWNoZWQqLwogCWludAkJCWlmaW5kZXg7CS8qIGJvdW5kIGRldmljZQkJKi8KLQl1bnNpZ25lZCBzaG9ydAkJbnVtOworCV9fYmUxNgkJCW51bTsKICNpZmRlZiBDT05GSUdfUEFDS0VUX01VTFRJQ0FTVAogCXN0cnVjdCBwYWNrZXRfbWNsaXN0CSptY2xpc3Q7CiAjZW5kaWYKQEAgLTMzMSw3ICszMzIsNyBAQAogCXN0cnVjdCBzb2NrYWRkcl9wa3QgKnNhZGRyPShzdHJ1Y3Qgc29ja2FkZHJfcGt0ICopbXNnLT5tc2dfbmFtZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgc2hvcnQgcHJvdG89MDsKKwlfX2JlMTYgcHJvdG89MDsKIAlpbnQgZXJyOwogCQogCS8qCkBAIC03MDQsNyArNzA1LDcgQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNhZGRyPShzdHJ1Y3Qgc29ja2FkZHJfbGwgKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1bnNpZ25lZCBzaG9ydCBwcm90bzsKKwlfX2JlMTYgcHJvdG87CiAJdW5zaWduZWQgY2hhciAqYWRkcjsKIAlpbnQgaWZpbmRleCwgZXJyLCByZXNlcnZlID0gMDsKIApAQCAtODU4LDcgKzg1OSw3IEBACiAgKglBdHRhY2ggYSBwYWNrZXQgaG9vay4KICAqLwogCi1zdGF0aWMgaW50IHBhY2tldF9kb19iaW5kKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByb3RvY29sKQorc3RhdGljIGludCBwYWNrZXRfZG9fYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTsKIAkvKgpAQCAtOTgzLDYgKzk4NCw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBwYWNrZXRfc29jayAqcG87CisJX19iZTE2IHByb3RvID0gKF9fZm9yY2UgX19iZTE2KXByb3RvY29sOyAvKiB3ZWlyZCwgYnV0IGRvY3VtZW50ZWQgKi8KIAlpbnQgZXJyOwogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfUkFXKSkKQEAgLTEwMTAsNyArMTAxMiw3IEBACiAKIAlwbyA9IHBrdF9zayhzayk7CiAJc2stPnNrX2ZhbWlseSA9IFBGX1BBQ0tFVDsKLQlwby0+bnVtID0gcHJvdG9jb2w7CisJcG8tPm51bSA9IHByb3RvOwogCiAJc2stPnNrX2Rlc3RydWN0ID0gcGFja2V0X3NvY2tfZGVzdHJ1Y3Q7CiAJYXRvbWljX2luYygmcGFja2V0X3NvY2tzX25yKTsKQEAgLTEwMjcsOCArMTAyOSw4IEBACiAjZW5kaWYKIAlwby0+cHJvdF9ob29rLmFmX3BhY2tldF9wcml2ID0gc2s7CiAKLQlpZiAocHJvdG9jb2wpIHsKLQkJcG8tPnByb3RfaG9vay50eXBlID0gcHJvdG9jb2w7CisJaWYgKHByb3RvKSB7CisJCXBvLT5wcm90X2hvb2sudHlwZSA9IHByb3RvOwogCQlkZXZfYWRkX3BhY2soJnBvLT5wcm90X2hvb2spOwogCQlzb2NrX2hvbGQoc2spOwogCQlwby0+cnVubmluZyA9IDE7CkBAIC0xNjI0LDcgKzE2MjYsOCBAQAogewogCWNoYXIgKipwZ192ZWMgPSBOVUxMOwogCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwotCWludCB3YXNfcnVubmluZywgbnVtLCBvcmRlciA9IDA7CisJaW50IHdhc19ydW5uaW5nLCBvcmRlciA9IDA7CisJX19iZTE2IG51bTsKIAlpbnQgZXJyID0gMDsKIAkKIAlpZiAocmVxLT50cF9ibG9ja19ucikgewpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jIGIvbmV0L3Jvc2Uvcm9zZV9yb3V0ZS5jCmluZGV4IGEyMjU0MmYuLjcyNTIzNDQgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL3Jvc2Vfcm91dGUuYworKysgYi9uZXQvcm9zZS9yb3NlX3JvdXRlLmMKQEAgLTM5Niw3ICszOTYsNyBAQAogaW50IHJvc2VfYWRkX2xvb3BiYWNrX25vZGUocm9zZV9hZGRyZXNzICphZGRyZXNzKQogewogCXN0cnVjdCByb3NlX25vZGUgKnJvc2Vfbm9kZTsKLQl1bnNpZ25lZCBpbnQgZXJyID0gMDsKKwlpbnQgZXJyID0gMDsKIAogCXNwaW5fbG9ja19iaCgmcm9zZV9ub2RlX2xpc3RfbG9jayk7CiAKQEAgLTQzMiw3ICs0MzIsNyBAQAogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZyb3NlX25vZGVfbGlzdF9sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvdHJhbnNwb3J0LmMgYi9uZXQvcnhycGMvdHJhbnNwb3J0LmMKaW5kZXggOTRiMmUyZi4uNDI2OGIzOCAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCisrKyBiL25ldC9yeHJwYy90cmFuc3BvcnQuYwpAQCAtMzEsNyArMzEsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0cnVjdCBlcnJvcm1zZyB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvS2NvbmZpZyBiL25ldC9zY2hlZC9LY29uZmlnCmluZGV4IDgyOThlYTkuLmY0NTQ0ZGQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9LY29uZmlnCisrKyBiL25ldC9zY2hlZC9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCiBjb25maWcgTkVUX1NDSEVECiAJYm9vbCAiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nIgorCXNlbGVjdCBORVRfU0NIX0ZJRk8KIAktLS1oZWxwLS0tCiAJICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29yawogCSAgZGV2aWNlLCBpdCBoYXMgdG8gZGVjaWRlIHdoaWNoIG9uZXMgdG8gc2VuZCBmaXJzdCwgd2hpY2ggb25lcyB0bwpAQCAtNDAsNiArNDEsOSBAQAogCSAgVGhlIGF2YWlsYWJsZSBzY2hlZHVsZXJzIGFyZSBsaXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnM7IHlvdQogCSAgY2FuIHNheSBZIHRvIGFzIG1hbnkgYXMgeW91IGxpa2UuIElmIHVuc3VyZSwgc2F5IE4gbm93LgogCitjb25maWcgTkVUX1NDSF9GSUZPCisJYm9vbAorCiBpZiBORVRfU0NIRUQKIAogY2hvaWNlCkBAIC0zMjAsNyArMzI0LDcgQEAKIAogY29uZmlnIENMU19VMzJfTUFSSwogCWJvb2wgIk5ldGZpbHRlciBtYXJrcyBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX0NMU19VMzIgJiYgTkVURklMVEVSCisJZGVwZW5kcyBvbiBORVRfQ0xTX1UzMgogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgdG8gYmUgYWJsZSB0byB1c2UgbmV0ZmlsdGVyIG1hcmtzIGFzIHUzMiBrZXkuCiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9NYWtlZmlsZSBiL25ldC9zY2hlZC9NYWtlZmlsZQppbmRleCAwZjA2YWVjLi5mZjJkNmU1IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUKKysrIGIvbmV0L3NjaGVkL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBvYmoteQk6PSBzY2hfZ2VuZXJpYy5vCiAKLW9iai0kKENPTkZJR19ORVRfU0NIRUQpCQkrPSBzY2hfYXBpLm8gc2NoX2ZpZm8ubyBzY2hfYmxhY2tob2xlLm8KK29iai0kKENPTkZJR19ORVRfU0NIRUQpCQkrPSBzY2hfYXBpLm8gc2NoX2JsYWNraG9sZS5vCiBvYmotJChDT05GSUdfTkVUX0NMUykJCSs9IGNsc19hcGkubwogb2JqLSQoQ09ORklHX05FVF9DTFNfQUNUKQkrPSBhY3RfYXBpLm8KIG9iai0kKENPTkZJR19ORVRfQUNUX1BPTElDRSkJKz0gYWN0X3BvbGljZS5vCkBAIC0xNCw2ICsxNCw3IEBACiBvYmotJChDT05GSUdfTkVUX0FDVF9JUFQpCSs9IGFjdF9pcHQubwogb2JqLSQoQ09ORklHX05FVF9BQ1RfUEVESVQpCSs9IGFjdF9wZWRpdC5vCiBvYmotJChDT05GSUdfTkVUX0FDVF9TSU1QKQkrPSBhY3Rfc2ltcGxlLm8KK29iai0kKENPTkZJR19ORVRfU0NIX0ZJRk8pCSs9IHNjaF9maWZvLm8KIG9iai0kKENPTkZJR19ORVRfU0NIX0NCUSkJKz0gc2NoX2NicS5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9IVEIpCSs9IHNjaF9odGIubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfSFBGUSkJKz0gc2NoX2hwZnEubwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYWN0LmMgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwppbmRleCA2Y2ZmNTY2Li44NWRlN2VmIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2dhY3QuYworKysgYi9uZXQvc2NoZWQvYWN0X2dhY3QuYwpAQCAtNDgsMTQgKzQ4LDE0IEBACiAjaWZkZWYgQ09ORklHX0dBQ1RfUFJPQgogc3RhdGljIGludCBnYWN0X25ldF9yYW5kKHN0cnVjdCB0Y2ZfZ2FjdCAqZ2FjdCkKIHsKLQlpZiAobmV0X3JhbmRvbSgpICUgZ2FjdC0+dGNmZ19wdmFsKQorCWlmICghZ2FjdC0+dGNmZ19wdmFsIHx8IG5ldF9yYW5kb20oKSAlIGdhY3QtPnRjZmdfcHZhbCkKIAkJcmV0dXJuIGdhY3QtPnRjZl9hY3Rpb247CiAJcmV0dXJuIGdhY3QtPnRjZmdfcGFjdGlvbjsKIH0KIAogc3RhdGljIGludCBnYWN0X2RldGVybShzdHJ1Y3QgdGNmX2dhY3QgKmdhY3QpCiB7Ci0JaWYgKGdhY3QtPnRjZl9ic3RhdHMucGFja2V0cyAlIGdhY3QtPnRjZmdfcHZhbCkKKwlpZiAoIWdhY3QtPnRjZmdfcHZhbCB8fCBnYWN0LT50Y2ZfYnN0YXRzLnBhY2tldHMgJSBnYWN0LT50Y2ZnX3B2YWwpCiAJCXJldHVybiBnYWN0LT50Y2ZfYWN0aW9uOwogCXJldHVybiBnYWN0LT50Y2ZnX3BhY3Rpb247CiB9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2lwdC5jIGIvbmV0L3NjaGVkL2FjdF9pcHQuYwppbmRleCBkOGM5MzEwLi5hOTYwODA2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvYWN0X2lwdC5jCisrKyBiL25ldC9zY2hlZC9hY3RfaXB0LmMKQEAgLTE1NiwxMCArMTU2LDkgQEAKIAkgICAgcnRhdHRyX3N0cmxjcHkodG5hbWUsIHRiW1RDQV9JUFRfVEFCTEUtMV0sIElGTkFNU0laKSA+PSBJRk5BTVNJWikKIAkJc3RyY3B5KHRuYW1lLCAibWFuZ2xlIik7CiAKLQl0ID0ga21hbGxvYyh0ZC0+dS50YXJnZXRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJdCA9IGttZW1kdXAodGQsIHRkLT51LnRhcmdldF9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIXQpKQogCQlnb3RvIGVycjI7Ci0JbWVtY3B5KHQsIHRkLCB0ZC0+dS50YXJnZXRfc2l6ZSk7CiAKIAlpZiAoKGVyciA9IGlwdF9pbml0X3RhcmdldCh0LCB0bmFtZSwgaG9vaykpIDwgMCkKIAkJZ290byBlcnIzOwpAQCAtMjU2LDEzICsyNTUsMTIgQEAKIAkqKiBmb3IgZm9vbHByb29mIHlvdSBuZWVkIHRvIG5vdCBhc3N1bWUgdGhpcwogCSovCiAKLQl0ID0ga21hbGxvYyhpcHQtPnRjZmlfdC0+dS51c2VyLnRhcmdldF9zaXplLCBHRlBfQVRPTUlDKTsKKwl0ID0ga21lbWR1cChpcHQtPnRjZmlfdCwgaXB0LT50Y2ZpX3QtPnUudXNlci50YXJnZXRfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKHVubGlrZWx5KCF0KSkKIAkJZ290byBydGF0dHJfZmFpbHVyZTsKIAogCWMuYmluZGNudCA9IGlwdC0+dGNmX2JpbmRjbnQgLSBiaW5kOwogCWMucmVmY250ID0gaXB0LT50Y2ZfcmVmY250IC0gcmVmOwotCW1lbWNweSh0LCBpcHQtPnRjZmlfdCwgaXB0LT50Y2ZpX3QtPnUudXNlci50YXJnZXRfc2l6ZSk7CiAJc3RyY3B5KHQtPnUudXNlci5uYW1lLCBpcHQtPnRjZmlfdC0+dS5rZXJuZWwudGFyZ2V0LT5uYW1lKTsKIAogCVJUQV9QVVQoc2tiLCBUQ0FfSVBUX1RBUkcsIGlwdC0+dGNmaV90LT51LnVzZXIudGFyZ2V0X3NpemUsIHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYyBiL25ldC9zY2hlZC9hY3RfcG9saWNlLmMKaW5kZXggZmVkNDdiNi4uYWY2OGUxZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9wb2xpY2UuYworKysgYi9uZXQvc2NoZWQvYWN0X3BvbGljZS5jCkBAIC00Niw2ICs0NiwxOCBAQAogCS5sb2NrCT0JJnBvbGljZV9sb2NrLAogfTsKIAorLyogb2xkIHBvbGljZXIgc3RydWN0dXJlIGZyb20gYmVmb3JlIHRjIGFjdGlvbnMgKi8KK3N0cnVjdCB0Y19wb2xpY2VfY29tcGF0Cit7CisJdTMyCQkJaW5kZXg7CisJaW50CQkJYWN0aW9uOworCXUzMgkJCWxpbWl0OworCXUzMgkJCWJ1cnN0OworCXUzMgkJCW10dTsKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMJcmF0ZTsKKwlzdHJ1Y3QgdGNfcmF0ZXNwZWMJcGVha3JhdGU7Cit9OworCiAvKiBFYWNoIHBvbGljZXIgaXMgc2VyaWFsaXplZCBieSBpdHMgaW5kaXZpZHVhbCBzcGlubG9jayAqLwogCiAjaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCkBAIC0xMzEsMTIgKzE0MywxNSBAQAogCXN0cnVjdCB0Y19wb2xpY2UgKnBhcm07CiAJc3RydWN0IHRjZl9wb2xpY2UgKnBvbGljZTsKIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqUl90YWIgPSBOVUxMLCAqUF90YWIgPSBOVUxMOworCWludCBzaXplOwogCiAJaWYgKHJ0YSA9PSBOVUxMIHx8IHJ0YXR0cl9wYXJzZV9uZXN0ZWQodGIsIFRDQV9QT0xJQ0VfTUFYLCBydGEpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodGJbVENBX1BPTElDRV9UQkYtMV0gPT0gTlVMTCB8fAotCSAgICBSVEFfUEFZTE9BRCh0YltUQ0FfUE9MSUNFX1RCRi0xXSkgIT0gc2l6ZW9mKCpwYXJtKSkKKwlpZiAodGJbVENBX1BPTElDRV9UQkYtMV0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2l6ZSA9IFJUQV9QQVlMT0FEKHRiW1RDQV9QT0xJQ0VfVEJGLTFdKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2YoKnBhcm0pICYmIHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB0Y19wb2xpY2VfY29tcGF0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcGFybSA9IFJUQV9EQVRBKHRiW1RDQV9QT0xJQ0VfVEJGLTFdKTsKIApAQCAtNDE1LDEyICs0MzAsMTUgQEAKIAlzdHJ1Y3QgdGNmX3BvbGljZSAqcG9saWNlOwogCXN0cnVjdCBydGF0dHIgKnRiW1RDQV9QT0xJQ0VfTUFYXTsKIAlzdHJ1Y3QgdGNfcG9saWNlICpwYXJtOworCWludCBzaXplOwogCiAJaWYgKHJ0YXR0cl9wYXJzZV9uZXN0ZWQodGIsIFRDQV9QT0xJQ0VfTUFYLCBydGEpIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAodGJbVENBX1BPTElDRV9UQkYtMV0gPT0gTlVMTCB8fAotCSAgICBSVEFfUEFZTE9BRCh0YltUQ0FfUE9MSUNFX1RCRi0xXSkgIT0gc2l6ZW9mKCpwYXJtKSkKKwlpZiAodGJbVENBX1BPTElDRV9UQkYtMV0gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJc2l6ZSA9IFJUQV9QQVlMT0FEKHRiW1RDQV9QT0xJQ0VfVEJGLTFdKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2YoKnBhcm0pICYmIHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB0Y19wb2xpY2VfY29tcGF0KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwYXJtID0gUlRBX0RBVEEodGJbVENBX1BPTElDRV9UQkYtMV0pOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYyBiL25ldC9zY2hlZC9hY3Rfc2ltcGxlLmMKaW5kZXggOTAxNTcxYS4uNWZlODA4NSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9zaW1wbGUuYworKysgYi9uZXQvc2NoZWQvYWN0X3NpbXBsZS5jCkBAIC03MSwxMSArNzEsMTAgQEAKIAogc3RhdGljIGludCBhbGxvY19kZWZkYXRhKHN0cnVjdCB0Y2ZfZGVmYWN0ICpkLCB1MzIgZGF0YWxlbiwgdm9pZCAqZGVmZGF0YSkKIHsKLQlkLT50Y2ZkX2RlZmRhdGEgPSBrbWFsbG9jKGRhdGFsZW4sIEdGUF9LRVJORUwpOworCWQtPnRjZmRfZGVmZGF0YSA9IGttZW1kdXAoZGVmZGF0YSwgZGF0YWxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KCFkLT50Y2ZkX2RlZmRhdGEpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkLT50Y2ZkX2RhdGFsZW4gPSBkYXRhbGVuOwotCW1lbWNweShkLT50Y2ZkX2RlZmRhdGEsIGRlZmRhdGEsIGRhdGFsZW4pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwppbmRleCAzN2ExODQwLi5lZGI4ZmM5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQkvKiBDcmVhdGUgbmV3IHByb3RvIHRjZiAqLwogCiAJCWVyciA9IC1FTk9CVUZTOwotCQlpZiAoKHRwID0ga21hbGxvYyhzaXplb2YoKnRwKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJCWlmICgodHAgPSBremFsbG9jKHNpemVvZigqdHApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJCWdvdG8gZXJyb3V0OwogCQllcnIgPSAtRUlOVkFMOwogCQl0cF9vcHMgPSB0Y2ZfcHJvdG9fbG9va3VwX29wcyh0Y2FbVENBX0tJTkQtMV0pOwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAJCQlrZnJlZSh0cCk7CiAJCQlnb3RvIGVycm91dDsKIAkJfQotCQltZW1zZXQodHAsIDAsIHNpemVvZigqdHApKTsKIAkJdHAtPm9wcyA9IHRwX29wczsKIAkJdHAtPnByb3RvY29sID0gcHJvdG9jb2w7CiAJCXRwLT5wcmlvID0gbnByaW8gPyA6IHRjZl9hdXRvX3ByaW8oKmJhY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19mdy5jIGIvbmV0L3NjaGVkL2Nsc19mdy5jCmluZGV4IGU1NGFjYzYuLmY1OWEyYzQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZncuYworKysgYi9uZXQvc2NoZWQvY2xzX2Z3LmMKQEAgLTEwMSwxMSArMTAxLDcgQEAKIAlzdHJ1Y3QgZndfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgZndfaGVhZCopdHAtPnJvb3Q7CiAJc3RydWN0IGZ3X2ZpbHRlciAqZjsKIAlpbnQgcjsKLSNpZmRlZiBDT05GSUdfTkVURklMVEVSCi0JdTMyIGlkID0gc2tiLT5uZm1hcmsgJiBoZWFkLT5tYXNrOwotI2Vsc2UKLQl1MzIgaWQgPSAwOwotI2VuZGlmCisJdTMyIGlkID0gc2tiLT5tYXJrICYgaGVhZC0+bWFzazsKIAogCWlmIChoZWFkICE9IE5VTEwpIHsKIAkJZm9yIChmPWhlYWQtPmh0W2Z3X2hhc2goaWQpXTsgZjsgZj1mLT5uZXh0KSB7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JzdnAuaCBiL25ldC9zY2hlZC9jbHNfcnN2cC5oCmluZGV4IDZlMjMwZWMuLjU4N2I5YWQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcnN2cC5oCisrKyBiL25ldC9zY2hlZC9jbHNfcnN2cC5oCkBAIC03Nyw3ICs3Nyw3IEBACiBzdHJ1Y3QgcnN2cF9zZXNzaW9uCiB7CiAJc3RydWN0IHJzdnBfc2Vzc2lvbgkqbmV4dDsKLQl1MzIJCQlkc3RbUlNWUF9EU1RfTEVOXTsKKwlfX2JlMzIJCQlkc3RbUlNWUF9EU1RfTEVOXTsKIAlzdHJ1Y3QgdGNfcnN2cF9ncGkgCWRwaTsKIAl1OAkJCXByb3RvY29sOwogCXU4CQkJdHVubmVsaWQ7CkBAIC04OSw3ICs4OSw3IEBACiBzdHJ1Y3QgcnN2cF9maWx0ZXIKIHsKIAlzdHJ1Y3QgcnN2cF9maWx0ZXIJKm5leHQ7Ci0JdTMyCQkJc3JjW1JTVlBfRFNUX0xFTl07CisJX19iZTMyCQkJc3JjW1JTVlBfRFNUX0xFTl07CiAJc3RydWN0IHRjX3JzdnBfZ3BpCXNwaTsKIAl1OAkJCXR1bm5lbGhkcjsKIApAQCAtMTAwLDE3ICsxMDAsMTcgQEAKIAlzdHJ1Y3QgcnN2cF9zZXNzaW9uCSpzZXNzOwogfTsKIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaGFzaF9kc3QodTMyICpkc3QsIHU4IHByb3RvY29sLCB1OCB0dW5uZWxpZCkKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGhhc2hfZHN0KF9fYmUzMiAqZHN0LCB1OCBwcm90b2NvbCwgdTggdHVubmVsaWQpCiB7Ci0JdW5zaWduZWQgaCA9IGRzdFtSU1ZQX0RTVF9MRU4tMV07CisJdW5zaWduZWQgaCA9IChfX2ZvcmNlIF9fdTMyKWRzdFtSU1ZQX0RTVF9MRU4tMV07CiAJaCBePSBoPj4xNjsKIAloIF49IGg+Pjg7CiAJcmV0dXJuIChoIF4gcHJvdG9jb2wgXiB0dW5uZWxpZCkgJiAweEZGOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBoYXNoX3NyYyh1MzIgKnNyYykKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGhhc2hfc3JjKF9fYmUzMiAqc3JjKQogewotCXVuc2lnbmVkIGggPSBzcmNbUlNWUF9EU1RfTEVOLTFdOworCXVuc2lnbmVkIGggPSAoX19mb3JjZSBfX3UzMilzcmNbUlNWUF9EU1RfTEVOLTFdOwogCWggXj0gaD4+MTY7CiAJaCBePSBoPj44OwogCWggXj0gaD4+NDsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCXN0cnVjdCByc3ZwX3Nlc3Npb24gKnM7CiAJc3RydWN0IHJzdnBfZmlsdGVyICpmOwogCXVuc2lnbmVkIGgxLCBoMjsKLQl1MzIgKmRzdCwgKnNyYzsKKwlfX2JlMzIgKmRzdCwgKnNyYzsKIAl1OCBwcm90b2NvbDsKIAl1OCB0dW5uZWxpZCA9IDA7CiAJdTggKnhwcnQ7CkBAIC00MTAsNyArNDEwLDcgQEAKIAlzdHJ1Y3QgcnRhdHRyICp0YltUQ0FfUlNWUF9NQVhdOwogCXN0cnVjdCB0Y2ZfZXh0cyBlOwogCXVuc2lnbmVkIGgxLCBoMjsKLQl1MzIgKmRzdDsKKwlfX2JlMzIgKmRzdDsKIAlpbnQgZXJyOwogCiAJaWYgKG9wdCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc191MzIuYyBiL25ldC9zY2hlZC9jbHNfdTMyLmMKaW5kZXggMGE2Y2ZhMC4uOGI1MTk0OCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuYworKysgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCkBAIC0xNDMsNyArMTQzLDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NMU19VMzJfTUFSSwotCQlpZiAoKHNrYi0+bmZtYXJrICYgbi0+bWFyay5tYXNrKSAhPSBuLT5tYXJrLnZhbCkgeworCQlpZiAoKHNrYi0+bWFyayAmIG4tPm1hcmsubWFzaykgIT0gbi0+bWFyay52YWwpIHsKIAkJCW4gPSBuLT5uZXh0OwogCQkJZ290byBuZXh0X2tub2RlOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2VtX21ldGEuYyBiL25ldC9zY2hlZC9lbV9tZXRhLmMKaW5kZXggNjFlM2I3NC4uNDVkNDdkMyAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2VtX21ldGEuYworKysgYi9uZXQvc2NoZWQvZW1fbWV0YS5jCkBAIC0yMDgsMTMgKzIwOCw5IEBACiAgKiBOZXRmaWx0ZXIKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotTUVUQV9DT0xMRUNUT1IoaW50X25mbWFyaykKK01FVEFfQ09MTEVDVE9SKGludF9tYXJrKQogewotI2lmZGVmIENPTkZJR19ORVRGSUxURVIKLQlkc3QtPnZhbHVlID0gc2tiLT5uZm1hcms7Ci0jZWxzZQotCWRzdC0+dmFsdWUgPSAwOwotI2VuZGlmCisJZHN0LT52YWx1ZSA9IHNrYi0+bWFyazsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00OTAsNyArNDg2LDcgQEAKIAkJW01FVEFfSUQoUEtUTEVOKV0JCT0gTUVUQV9GVU5DKGludF9wa3RsZW4pLAogCQlbTUVUQV9JRChEQVRBTEVOKV0JCT0gTUVUQV9GVU5DKGludF9kYXRhbGVuKSwKIAkJW01FVEFfSUQoTUFDTEVOKV0JCT0gTUVUQV9GVU5DKGludF9tYWNsZW4pLAotCQlbTUVUQV9JRChORk1BUkspXQkJPSBNRVRBX0ZVTkMoaW50X25mbWFyayksCisJCVtNRVRBX0lEKE5GTUFSSyldCQk9IE1FVEFfRlVOQyhpbnRfbWFyayksCiAJCVtNRVRBX0lEKFRDSU5ERVgpXQkJPSBNRVRBX0ZVTkMoaW50X3RjaW5kZXgpLAogCQlbTUVUQV9JRChSVENMQVNTSUQpXQkJPSBNRVRBX0ZVTkMoaW50X3J0Y2xhc3NpZCksCiAJCVtNRVRBX0lEKFJUSUlGKV0JCT0gTUVUQV9GVU5DKGludF9ydGlpZiksCkBAIC01NTAsMTAgKzU0Niw5IEBACiB7CiAJaW50IGxlbiA9IFJUQV9QQVlMT0FEKHJ0YSk7CiAKLQlkc3QtPnZhbCA9ICh1bnNpZ25lZCBsb25nKSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJZHN0LT52YWwgPSAodW5zaWduZWQgbG9uZylrbWVtZHVwKFJUQV9EQVRBKHJ0YSksIGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRzdC0+dmFsID09IDBVTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KCh2b2lkICopIGRzdC0+dmFsLCBSVEFfREFUQShydGEpLCBsZW4pOwogCWRzdC0+bGVuID0gbGVuOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2VtX25ieXRlLmMgYi9uZXQvc2NoZWQvZW1fbmJ5dGUuYwppbmRleCBjYzgwYmFiLi4wMDVkYjQwIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvZW1fbmJ5dGUuYworKysgYi9uZXQvc2NoZWQvZW1fbmJ5dGUuYwpAQCAtMzQsMTIgKzM0LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZW0tPmRhdGFsZW4gPSBzaXplb2YoKm5ieXRlKSArIG5ieXRlLT5sZW47Ci0JZW0tPmRhdGEgPSAodW5zaWduZWQgbG9uZykga21hbGxvYyhlbS0+ZGF0YWxlbiwgR0ZQX0tFUk5FTCk7CisJZW0tPmRhdGEgPSAodW5zaWduZWQgbG9uZylrbWVtZHVwKGRhdGEsIGVtLT5kYXRhbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW0tPmRhdGEgPT0gMFVMKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKLQltZW1jcHkoKHZvaWQgKikgZW0tPmRhdGEsIGRhdGEsIGVtLT5kYXRhbGVuKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1hdGNoLmMgYi9uZXQvc2NoZWQvZW1hdGNoLmMKaW5kZXggMGZkMDc2OC4uOGY4YTE2ZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2VtYXRjaC5jCisrKyBiL25ldC9zY2hlZC9lbWF0Y2guYwpAQCAtMjUxLDEyICsyNTEsMTEgQEAKIAkJCQkJZ290byBlcnJvdXQ7CiAJCQkJZW0tPmRhdGEgPSAqKHUzMiAqKSBkYXRhOwogCQkJfSBlbHNlIHsKLQkJCQl2b2lkICp2ID0ga21hbGxvYyhkYXRhX2xlbiwgR0ZQX0tFUk5FTCk7CisJCQkJdm9pZCAqdiA9IGttZW1kdXAoZGF0YSwgZGF0YV9sZW4sIEdGUF9LRVJORUwpOwogCQkJCWlmICh2ID09IE5VTEwpIHsKIAkJCQkJZXJyID0gLUVOT0JVRlM7CiAJCQkJCWdvdG8gZXJyb3V0OwogCQkJCX0KLQkJCQltZW1jcHkodiwgZGF0YSwgZGF0YV9sZW4pOwogCQkJCWVtLT5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHY7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXBpLmMgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCmluZGV4IDBiNjQ4OTIuLjY1ODI1ZjQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXBpLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwpAQCAtMTkxLDE5ICsxOTEsMjUgQEAKICAgIChyb290IHFkaXNjLCBhbGwgaXRzIGNoaWxkcmVuLCBjaGlsZHJlbiBvZiBjaGlsZHJlbiBldGMuKQogICovCiAKK3N0YXRpYyBzdHJ1Y3QgUWRpc2MgKl9fcWRpc2NfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBoYW5kbGUpCit7CisJc3RydWN0IFFkaXNjICpxOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmZGV2LT5xZGlzY19saXN0LCBsaXN0KSB7CisJCWlmIChxLT5oYW5kbGUgPT0gaGFuZGxlKQorCQkJcmV0dXJuIHE7CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdHJ1Y3QgUWRpc2MgKnFkaXNjX2xvb2t1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaGFuZGxlKQogewogCXN0cnVjdCBRZGlzYyAqcTsKIAogCXJlYWRfbG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZkZXYtPnFkaXNjX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHEtPmhhbmRsZSA9PSBoYW5kbGUpIHsKLQkJCXJlYWRfdW5sb2NrKCZxZGlzY190cmVlX2xvY2spOwotCQkJcmV0dXJuIHE7Ci0JCX0KLQl9CisJcSA9IF9fcWRpc2NfbG9va3VwKGRldiwgaGFuZGxlKTsKIAlyZWFkX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcTsKIH0KIAogc3RhdGljIHN0cnVjdCBRZGlzYyAqcWRpc2NfbGVhZihzdHJ1Y3QgUWRpc2MgKnAsIHUzMiBjbGFzc2lkKQpAQCAtMzQ4LDYgKzM1NCwyNiBAQAogCXJldHVybiBvcWRpc2M7CiB9CiAKK3ZvaWQgcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzICpjb3BzOworCXVuc2lnbmVkIGxvbmcgY2w7CisJdTMyIHBhcmVudGlkOworCisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuOworCXdoaWxlICgocGFyZW50aWQgPSBzY2gtPnBhcmVudCkpIHsKKwkJc2NoID0gX19xZGlzY19sb29rdXAoc2NoLT5kZXYsIFRDX0hfTUFKKHBhcmVudGlkKSk7CisJCWNvcHMgPSBzY2gtPm9wcy0+Y2xfb3BzOworCQlpZiAoY29wcy0+cWxlbl9ub3RpZnkpIHsKKwkJCWNsID0gY29wcy0+Z2V0KHNjaCwgcGFyZW50aWQpOworCQkJY29wcy0+cWxlbl9ub3RpZnkoc2NoLCBjbCk7CisJCQljb3BzLT5wdXQoc2NoLCBjbCk7CisJCX0KKwkJc2NoLT5xLnFsZW4gLT0gbjsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbik7CiAKIC8qIEdyYWZ0IHFkaXNjICJuZXciIHRvIGNsYXNzICJjbGFzc2lkIiBvZiBxZGlzYyAicGFyZW50IiBvcgogICAgdG8gZGV2aWNlICJkZXYiLgpAQCAtMTExMiw3ICsxMTM4LDcgQEAKIAlzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQogewogCWludCBlcnIgPSAwOwotCXUzMiBwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CisJX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlzdHJ1Y3QgdGNmX3Byb3RvICpvdHAgPSB0cDsKIHJlY2xhc3NpZnk6CkBAIC0xMjc3LDcgKzEzMDMsNiBAQAogCiBzdWJzeXNfaW5pdGNhbGwocGt0c2NoZWRfaW5pdCk7CiAKLUVYUE9SVF9TWU1CT0wocWRpc2NfbG9va3VwKTsKIEVYUE9SVF9TWU1CT0wocWRpc2NfZ2V0X3J0YWIpOwogRVhQT1JUX1NZTUJPTChxZGlzY19wdXRfcnRhYik7CiBFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3FkaXNjKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfYXRtLmMgYi9uZXQvc2NoZWQvc2NoX2F0bS5jCmluZGV4IGRiZjQ0ZGEuLmVkYzdiYjAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfYXRtLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9hdG0uYwpAQCAtMzE2LDcgKzMxNiw3IEBACiAJfQogCW1lbXNldChmbG93LDAsc2l6ZW9mKCpmbG93KSk7CiAJZmxvdy0+ZmlsdGVyX2xpc3QgPSBOVUxMOwotCWlmICghKGZsb3ctPnEgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwmcGZpZm9fcWRpc2Nfb3BzKSkpCisJaWYgKCEoZmxvdy0+cSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCZwZmlmb19xZGlzY19vcHMsY2xhc3NpZCkpKQogCQlmbG93LT5xID0gJm5vb3BfcWRpc2M7CiAJRFBSSU5USygiYXRtX3RjX2NoYW5nZTogcWRpc2MgJXBcbiIsZmxvdy0+cSk7CiAJZmxvdy0+c29jayA9IHNvY2s7CkBAIC01NzYsNyArNTc2LDggQEAKIAogCURQUklOVEsoImF0bV90Y19pbml0KHNjaCAlcCxbcWRpc2MgJXBdLG9wdCAlcClcbiIsc2NoLHAsb3B0KTsKIAlwLT5mbG93cyA9ICZwLT5saW5rOwotCWlmKCEocC0+bGluay5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsJnBmaWZvX3FkaXNjX29wcykpKQorCWlmKCEocC0+bGluay5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsJnBmaWZvX3FkaXNjX29wcywKKwkJCQkJICAgc2NoLT5oYW5kbGUpKSkKIAkJcC0+bGluay5xID0gJm5vb3BfcWRpc2M7CiAJRFBSSU5USygiYXRtX3RjX2luaXQ6IGxpbmsgKCVwKSBxZGlzYyAlcFxuIiwmcC0+bGluayxwLT5saW5rLnEpOwogCXAtPmxpbmsuZmlsdGVyX2xpc3QgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9jYnEuYyBiL25ldC9zY2hlZC9zY2hfY2JxLmMKaW5kZXggYmFjODgxYi4uYmE4MmRmYSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9jYnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2NicS5jCkBAIC0xNDI5LDcgKzE0MjksOCBAQAogCXEtPmxpbmsuc2libGluZyA9ICZxLT5saW5rOwogCXEtPmxpbmsuY2xhc3NpZCA9IHNjaC0+aGFuZGxlOwogCXEtPmxpbmsucWRpc2MgPSBzY2g7Ci0JaWYgKCEocS0+bGluay5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMpKSkKKwlpZiAoIShxLT5saW5rLnEgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcywKKwkJCQkJICAgIHNjaC0+aGFuZGxlKSkpCiAJCXEtPmxpbmsucSA9ICZub29wX3FkaXNjOwogCiAJcS0+bGluay5wcmlvcml0eSA9IFRDX0NCUV9NQVhQUklPLTE7CkBAIC0xNjc0LDcgKzE2NzUsOCBAQAogCiAJaWYgKGNsKSB7CiAJCWlmIChuZXcgPT0gTlVMTCkgewotCQkJaWYgKChuZXcgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcykpID09IE5VTEwpCisJCQlpZiAoKG5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCQkJCQkJICAgICBjbC0+Y2xhc3NpZCkpID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9IGVsc2UgewogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1BPTElDRQpAQCAtMTY4NSw3ICsxNjg3LDcgQEAKIAkJc2NoX3RyZWVfbG9jayhzY2gpOwogCQkqb2xkID0gY2wtPnE7CiAJCWNsLT5xID0gbmV3OwotCQlzY2gtPnEucWxlbiAtPSAoKm9sZCktPnEucWxlbjsKKwkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKCpvbGQsICgqb2xkKS0+cS5xbGVuKTsKIAkJcWRpc2NfcmVzZXQoKm9sZCk7CiAJCXNjaF90cmVlX3VubG9jayhzY2gpOwogCkBAIC0xOTMyLDcgKzE5MzQsNyBAQAogCWNsLT5SX3RhYiA9IHJ0YWI7CiAJcnRhYiA9IE5VTEw7CiAJY2wtPnJlZmNudCA9IDE7Ci0JaWYgKCEoY2wtPnEgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcykpKQorCWlmICghKGNsLT5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsIGNsYXNzaWQpKSkKIAkJY2wtPnEgPSAmbm9vcF9xZGlzYzsKIAljbC0+Y2xhc3NpZCA9IGNsYXNzaWQ7CiAJY2wtPnRwYXJlbnQgPSBwYXJlbnQ7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jIGIvbmV0L3NjaGVkL3NjaF9kc21hcmsuYwppbmRleCAxMWM4YTIxLi5kNTQyMTgxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCisrKyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKQEAgLTg4LDE1ICs4OCwxNiBAQAogCQlzY2gsIHAsIG5ldywgb2xkKTsKIAogCWlmIChuZXcgPT0gTlVMTCkgewotCQluZXcgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcyk7CisJCW5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCQkJCQlzY2gtPmhhbmRsZSk7CiAJCWlmIChuZXcgPT0gTlVMTCkKIAkJCW5ldyA9ICZub29wX3FkaXNjOwogCX0KIAogCXNjaF90cmVlX2xvY2soc2NoKTsKIAkqb2xkID0geGNoZygmcC0+cSwgbmV3KTsKKwlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oKm9sZCwgKCpvbGQpLT5xLnFsZW4pOwogCXFkaXNjX3Jlc2V0KCpvbGQpOwotCXNjaC0+cS5xbGVuID0gMDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAogICAgICAgICByZXR1cm4gMDsKQEAgLTMwNyw3ICszMDgsNyBAQAogCQkJaWYgKHAtPm1hc2tbaW5kZXhdICE9IDB4ZmYgfHwgcC0+dmFsdWVbaW5kZXhdKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImRzbWFya19kZXF1ZXVlOiAiCiAJCQkJICAgICAgICJ1bnN1cHBvcnRlZCBwcm90b2NvbCAlZFxuIiwKLQkJCQkgICAgICAgaHRvbnMoc2tiLT5wcm90b2NvbCkpOworCQkJCSAgICAgICBudG9ocyhza2ItPnByb3RvY29sKSk7CiAJCQlicmVhazsKIAl9OwogCkBAIC0zODcsNyArMzg4LDcgQEAKIAlwLT5kZWZhdWx0X2luZGV4ID0gZGVmYXVsdF9pbmRleDsKIAlwLT5zZXRfdGNfaW5kZXggPSBSVEFfR0VUX0ZMQUcodGJbVENBX0RTTUFSS19TRVRfVENfSU5ERVgtMV0pOwogCi0JcC0+cSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzKTsKKwlwLT5xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsIHNjaC0+aGFuZGxlKTsKIAlpZiAocC0+cSA9PSBOVUxMKQogCQlwLT5xID0gJm5vb3BfcWRpc2M7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggODhjNmE5OS4uYmMxMTZiZCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTQ1MCwxMyArNDUwLDE1IEBACiAJcmV0dXJuIEVSUl9QVFIoLWVycik7CiB9CiAKLXN0cnVjdCBRZGlzYyAqIHFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBRZGlzY19vcHMgKm9wcykKK3N0cnVjdCBRZGlzYyAqIHFkaXNjX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBRZGlzY19vcHMgKm9wcywKKwkJCQkgdW5zaWduZWQgaW50IHBhcmVudGlkKQogewogCXN0cnVjdCBRZGlzYyAqc2NoOwogCQogCXNjaCA9IHFkaXNjX2FsbG9jKGRldiwgb3BzKTsKIAlpZiAoSVNfRVJSKHNjaCkpCiAJCWdvdG8gZXJyb3V0OworCXNjaC0+cGFyZW50ID0gcGFyZW50aWQ7CiAKIAlpZiAoIW9wcy0+aW5pdCB8fCBvcHMtPmluaXQoc2NoLCBOVUxMKSA9PSAwKQogCQlyZXR1cm4gc2NoOwpAQCAtNTIwLDcgKzUyMiw4IEBACiAJaWYgKGRldi0+cWRpc2Nfc2xlZXBpbmcgPT0gJm5vb3BfcWRpc2MpIHsKIAkJc3RydWN0IFFkaXNjICpxZGlzYzsKIAkJaWYgKGRldi0+dHhfcXVldWVfbGVuKSB7Ci0JCQlxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgJnBmaWZvX2Zhc3Rfb3BzKTsKKwkJCXFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoZGV2LCAmcGZpZm9fZmFzdF9vcHMsCisJCQkJCQkgIFRDX0hfUk9PVCk7CiAJCQlpZiAocWRpc2MgPT0gTlVMTCkgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBhY3RpdmF0aW9uIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKIAkJCQlyZXR1cm47CkBAIC02MDYsMTMgKzYwOSwxMCBAQAogCXFkaXNjX3VubG9ja190cmVlKGRldik7CiB9CiAKLUVYUE9SVF9TWU1CT0woX19uZXRkZXZfd2F0Y2hkb2dfdXApOwogRVhQT1JUX1NZTUJPTChuZXRpZl9jYXJyaWVyX29uKTsKIEVYUE9SVF9TWU1CT0wobmV0aWZfY2Fycmllcl9vZmYpOwogRVhQT1JUX1NZTUJPTChub29wX3FkaXNjKTsKLUVYUE9SVF9TWU1CT0wobm9vcF9xZGlzY19vcHMpOwogRVhQT1JUX1NZTUJPTChxZGlzY19jcmVhdGVfZGZsdCk7Ci1FWFBPUlRfU1lNQk9MKHFkaXNjX2FsbG9jKTsKIEVYUE9SVF9TWU1CT0wocWRpc2NfZGVzdHJveSk7CiBFWFBPUlRfU1lNQk9MKHFkaXNjX3Jlc2V0KTsKIEVYUE9SVF9TWU1CT0wocWRpc2NfbG9ja190cmVlKTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaGZzYy5jIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKaW5kZXggNmE2NzM1YS4uNmVlZmE2OSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9oZnNjLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9oZnNjLmMKQEAgLTk0Niw2ICs5NDYsNyBAQAogCWlmICh1bmxpa2VseShzY2gtPm9wcy0+cmVxdWV1ZShza2IsIHNjaCkgIT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50aygicWRpc2NfcGVla19sZW46IGZhaWxlZCB0byByZXF1ZXVlXG4iKTsKKwkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHNjaCwgMSk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gbGVuOwpAQCAtOTU3LDExICs5NTgsNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBjbC0+cWRpc2MtPnEucWxlbjsKIAogCXFkaXNjX3Jlc2V0KGNsLT5xZGlzYyk7Ci0JaWYgKGxlbiA+IDApIHsKLQkJdXBkYXRlX3ZmKGNsLCAwLCAwKTsKLQkJc2V0X3Bhc3NpdmUoY2wpOwotCQlzY2gtPnEucWxlbiAtPSBsZW47Ci0JfQorCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihjbC0+cWRpc2MsIGxlbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTM4LDcgKzExMzUsNyBAQAogCWNsLT5jbGFzc2lkICAgPSBjbGFzc2lkOwogCWNsLT5zY2hlZCAgICAgPSBxOwogCWNsLT5jbF9wYXJlbnQgPSBwYXJlbnQ7Ci0JY2wtPnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMpOworCWNsLT5xZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLCBjbGFzc2lkKTsKIAlpZiAoY2wtPnFkaXNjID09IE5VTEwpCiAJCWNsLT5xZGlzYyA9ICZub29wX3FkaXNjOwogCWNsLT5zdGF0c19sb2NrID0gJnNjaC0+ZGV2LT5xdWV1ZV9sb2NrOwpAQCAtMTI3MSw3ICsxMjY4LDggQEAKIAlpZiAoY2wtPmxldmVsID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG5ldyA9PSBOVUxMKSB7Ci0JCW5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzKTsKKwkJbmV3ID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsCisJCQkJCWNsLT5jbGFzc2lkKTsKIAkJaWYgKG5ldyA9PSBOVUxMKQogCQkJbmV3ID0gJm5vb3BfcWRpc2M7CiAJfQpAQCAtMTI5NCw2ICsxMjkyLDE3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkCitoZnNjX3FsZW5fbm90aWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaGZzY19jbGFzcyAqY2wgPSAoc3RydWN0IGhmc2NfY2xhc3MgKilhcmc7CisKKwlpZiAoY2wtPnFkaXNjLT5xLnFsZW4gPT0gMCkgeworCQl1cGRhdGVfdmYoY2wsIDAsIDApOworCQlzZXRfcGFzc2l2ZShjbCk7CisJfQorfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZwogaGZzY19nZXRfY2xhc3Moc3RydWN0IFFkaXNjICpzY2gsIHUzMiBjbGFzc2lkKQogewpAQCAtMTUxNCw3ICsxNTIzLDggQEAKIAlxLT5yb290LnJlZmNudCAgPSAxOwogCXEtPnJvb3QuY2xhc3NpZCA9IHNjaC0+aGFuZGxlOwogCXEtPnJvb3Quc2NoZWQgICA9IHE7Ci0JcS0+cm9vdC5xZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzKTsKKwlxLT5yb290LnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMsCisJCQkJCSAgc2NoLT5oYW5kbGUpOwogCWlmIChxLT5yb290LnFkaXNjID09IE5VTEwpCiAJCXEtPnJvb3QucWRpc2MgPSAmbm9vcF9xZGlzYzsKIAlxLT5yb290LnN0YXRzX2xvY2sgPSAmc2NoLT5kZXYtPnF1ZXVlX2xvY2s7CkBAIC0xNzc3LDYgKzE3ODcsNyBAQAogCS5kZWxldGUJCT0gaGZzY19kZWxldGVfY2xhc3MsCiAJLmdyYWZ0CQk9IGhmc2NfZ3JhZnRfY2xhc3MsCiAJLmxlYWYJCT0gaGZzY19jbGFzc19sZWFmLAorCS5xbGVuX25vdGlmeQk9IGhmc2NfcWxlbl9ub3RpZnksCiAJLmdldAkJPSBoZnNjX2dldF9jbGFzcywKIAkucHV0CQk9IGhmc2NfcHV0X2NsYXNzLAogCS5iaW5kX3RjZgk9IGhmc2NfYmluZF90Y2YsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCA0YjUyZmE3Li4yMTVlNjhjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTEyMjMsMTcgKzEyMjMsMTQgQEAKIAlzdHJ1Y3QgaHRiX2NsYXNzICpjbCA9IChzdHJ1Y3QgaHRiX2NsYXNzICopYXJnOwogCiAJaWYgKGNsICYmICFjbC0+bGV2ZWwpIHsKLQkJaWYgKG5ldyA9PSBOVUxMICYmIChuZXcgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwKLQkJCQkJCQkgICAgJnBmaWZvX3FkaXNjX29wcykpCisJCWlmIChuZXcgPT0gTlVMTCAmJgorCQkgICAgKG5ldyA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCQkgICAgCQkJICAgICBjbC0+Y2xhc3NpZCkpCiAJCSAgICA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQlzY2hfdHJlZV9sb2NrKHNjaCk7CiAJCWlmICgoKm9sZCA9IHhjaGcoJmNsLT51bi5sZWFmLnEsIG5ldykpICE9IE5VTEwpIHsKLQkJCWlmIChjbC0+cHJpb19hY3Rpdml0eSkKLQkJCQlodGJfZGVhY3RpdmF0ZShxZGlzY19wcml2KHNjaCksIGNsKTsKLQotCQkJLyogVE9ETzogaXMgaXQgY29ycmVjdCA/IFdoeSBDQlEgZG9lc24ndCBkbyBpdCA/ICovCi0JCQlzY2gtPnEucWxlbiAtPSAoKm9sZCktPnEucWxlbjsKKwkJCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbigqb2xkLCAoKm9sZCktPnEucWxlbik7CiAJCQlxZGlzY19yZXNldCgqb2xkKTsKIAkJfQogCQlzY2hfdHJlZV91bmxvY2soc2NoKTsKQEAgLTEyNDgsNiArMTI0NSwxNCBAQAogCXJldHVybiAoY2wgJiYgIWNsLT5sZXZlbCkgPyBjbC0+dW4ubGVhZi5xIDogTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgaHRiX3FsZW5fbm90aWZ5KHN0cnVjdCBRZGlzYyAqc2NoLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaHRiX2NsYXNzICpjbCA9IChzdHJ1Y3QgaHRiX2NsYXNzICopYXJnOworCisJaWYgKGNsLT51bi5sZWFmLnEtPnEucWxlbiA9PSAwKQorCQlodGJfZGVhY3RpdmF0ZShxZGlzY19wcml2KHNjaCksIGNsKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaHRiX2dldChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGNsYXNzaWQpCiB7CiAJc3RydWN0IGh0Yl9jbGFzcyAqY2wgPSBodGJfZmluZChjbGFzc2lkLCBzY2gpOwpAQCAtMTI2OSw5ICsxMjc0LDkgQEAKIHN0YXRpYyB2b2lkIGh0Yl9kZXN0cm95X2NsYXNzKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgaHRiX2NsYXNzICpjbCkKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOworCiAJaWYgKCFjbC0+bGV2ZWwpIHsKIAkJQlVHX1RSQVAoY2wtPnVuLmxlYWYucSk7Ci0JCXNjaC0+cS5xbGVuIC09IGNsLT51bi5sZWFmLnEtPnEucWxlbjsKIAkJcWRpc2NfZGVzdHJveShjbC0+dW4ubGVhZi5xKTsKIAl9CiAJcWRpc2NfcHV0X3J0YWIoY2wtPnJhdGUpOwpAQCAtMTMyMiw2ICsxMzI3LDcgQEAKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCBodGJfY2xhc3MgKmNsID0gKHN0cnVjdCBodGJfY2xhc3MgKilhcmc7CisJdW5zaWduZWQgaW50IHFsZW47CiAKIAkvLyBUT0RPOiB3aHkgZG9uJ3QgYWxsb3cgdG8gZGVsZXRlIHN1YnRyZWUgPyByZWZlcmVuY2VzID8gZG9lcwogCS8vIHRjIHN1YnN5cyBxdWFyYW50ZWUgdXMgdGhhdCBpbiBodGJfZGVzdHJveSBpdCBob2xkcyBubyBjbGFzcwpAQCAtMTMzNCw2ICsxMzQwLDEyIEBACiAJLyogZGVsZXRlIGZyb20gaGFzaCBhbmQgYWN0aXZlOyByZW1haW5kZXIgaW4gZGVzdHJveV9jbGFzcyAqLwogCWhsaXN0X2RlbF9pbml0KCZjbC0+aGxpc3QpOwogCisJaWYgKCFjbC0+bGV2ZWwpIHsKKwkJcWxlbiA9IGNsLT51bi5sZWFmLnEtPnEucWxlbjsKKwkJcWRpc2NfcmVzZXQoY2wtPnVuLmxlYWYucSk7CisJCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihjbC0+dW4ubGVhZi5xLCBxbGVuKTsKKwl9CisKIAlpZiAoY2wtPnByaW9fYWN0aXZpdHkpCiAJCWh0Yl9kZWFjdGl2YXRlKHEsIGNsKTsKIApAQCAtMTQxMCwxMSArMTQyMiwxNCBAQAogCQkvKiBjcmVhdGUgbGVhZiBxZGlzYyBlYXJseSBiZWNhdXNlIGl0IHVzZXMga21hbGxvYyhHRlBfS0VSTkVMKQogCQkgICBzbyB0aGF0IGNhbid0IGJlIHVzZWQgaW5zaWRlIG9mIHNjaF90cmVlX2xvY2sKIAkJICAgLS0gdGhhbmtzIHRvIEthcmxpcyBQZWlzZW5pZWtzICovCi0JCW5ld19xID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZwZmlmb19xZGlzY19vcHMpOworCQluZXdfcSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLCBjbGFzc2lkKTsKIAkJc2NoX3RyZWVfbG9jayhzY2gpOwogCQlpZiAocGFyZW50ICYmICFwYXJlbnQtPmxldmVsKSB7CisJCQl1bnNpZ25lZCBpbnQgcWxlbiA9IHBhcmVudC0+dW4ubGVhZi5xLT5xLnFsZW47CisKIAkJCS8qIHR1cm4gcGFyZW50IGludG8gaW5uZXIgbm9kZSAqLwotCQkJc2NoLT5xLnFsZW4gLT0gcGFyZW50LT51bi5sZWFmLnEtPnEucWxlbjsKKwkJCXFkaXNjX3Jlc2V0KHBhcmVudC0+dW4ubGVhZi5xKTsKKwkJCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbihwYXJlbnQtPnVuLmxlYWYucSwgcWxlbik7CiAJCQlxZGlzY19kZXN0cm95KHBhcmVudC0+dW4ubGVhZi5xKTsKIAkJCWlmIChwYXJlbnQtPnByaW9fYWN0aXZpdHkpCiAJCQkJaHRiX2RlYWN0aXZhdGUocSwgcGFyZW50KTsKQEAgLTE1NjIsNiArMTU3Nyw3IEBACiBzdGF0aWMgc3RydWN0IFFkaXNjX2NsYXNzX29wcyBodGJfY2xhc3Nfb3BzID0gewogCS5ncmFmdAkJPQlodGJfZ3JhZnQsCiAJLmxlYWYJCT0JaHRiX2xlYWYsCisJLnFsZW5fbm90aWZ5CT0JaHRiX3FsZW5fbm90aWZ5LAogCS5nZXQJCT0JaHRiX2dldCwKIAkucHV0CQk9CWh0Yl9wdXQsCiAJLmNoYW5nZQkJPQlodGJfY2hhbmdlX2NsYXNzLApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCmluZGV4IDA0NDE4NzYuLjc5NTQyYWYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYworKysgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKQEAgLTI4NywxMyArMjg3LDEwIEBACiAJCQlwc2NoZWRfdGRpZmZfdCBkZWxheSA9IFBTQ0hFRF9URElGRihjYi0+dGltZV90b19zZW5kLCBub3cpOwogCiAJCQlpZiAocS0+cWRpc2MtPm9wcy0+cmVxdWV1ZShza2IsIHEtPnFkaXNjKSAhPSBORVRfWE1JVF9TVUNDRVNTKSB7CisJCQkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHEtPnFkaXNjLCAxKTsKIAkJCQlzY2gtPnFzdGF0cy5kcm9wcysrOwotCi0JCQkJLyogQWZ0ZXIgdGhpcyBxbGVuIGlzIGNvbmZ1c2VkICovCiAJCQkJcHJpbnRrKEtFUk5fRVJSICJuZXRlbTogcXVldWUgZGlzY3BsaW5lICVzIGNvdWxkIG5vdCByZXF1ZXVlXG4iLAogCQkJCSAgICAgICBxLT5xZGlzYy0+b3BzLT5pZCk7Ci0KLQkJCQlzY2gtPnEucWxlbi0tOwogCQkJfQogCiAJCQltb2RfdGltZXIoJnEtPnRpbWVyLCBqaWZmaWVzICsgUFNDSEVEX1VTMkpJRkZJRShkZWxheSkpOwpAQCAtNTc0LDcgKzU3MSw4IEBACiAJcS0+dGltZXIuZnVuY3Rpb24gPSBuZXRlbV93YXRjaGRvZzsKIAlxLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHNjaDsKIAotCXEtPnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZ0Zmlmb19xZGlzY19vcHMpOworCXEtPnFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoc2NoLT5kZXYsICZ0Zmlmb19xZGlzY19vcHMsCisJCQkJICAgICBUQ19IX01BS0Uoc2NoLT5oYW5kbGUsIDEpKTsKIAlpZiAoIXEtPnFkaXNjKSB7CiAJCXByX2RlYnVnKCJuZXRlbTogcWRpc2MgY3JlYXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjYxLDggKzY1OSw4IEBACiAKIAlzY2hfdHJlZV9sb2NrKHNjaCk7CiAJKm9sZCA9IHhjaGcoJnEtPnFkaXNjLCBuZXcpOworCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbigqb2xkLCAoKm9sZCktPnEucWxlbik7CiAJcWRpc2NfcmVzZXQoKm9sZCk7Ci0Jc2NoLT5xLnFsZW4gPSAwOwogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCmluZGV4IGE1ZmEwM2MuLjI1NjdiNGMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jCisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCkBAIC0yMjIsMjEgKzIyMiwyNyBAQAogCiAJZm9yIChpPXEtPmJhbmRzOyBpPFRDUV9QUklPX0JBTkRTOyBpKyspIHsKIAkJc3RydWN0IFFkaXNjICpjaGlsZCA9IHhjaGcoJnEtPnF1ZXVlc1tpXSwgJm5vb3BfcWRpc2MpOwotCQlpZiAoY2hpbGQgIT0gJm5vb3BfcWRpc2MpCisJCWlmIChjaGlsZCAhPSAmbm9vcF9xZGlzYykgeworCQkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKGNoaWxkLCBjaGlsZC0+cS5xbGVuKTsKIAkJCXFkaXNjX2Rlc3Ryb3koY2hpbGQpOworCQl9CiAJfQogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCiAJZm9yIChpPTA7IGk8cS0+YmFuZHM7IGkrKykgewogCQlpZiAocS0+cXVldWVzW2ldID09ICZub29wX3FkaXNjKSB7CiAJCQlzdHJ1Y3QgUWRpc2MgKmNoaWxkOwotCQkJY2hpbGQgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJnBmaWZvX3FkaXNjX29wcyk7CisJCQljaGlsZCA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmcGZpZm9fcWRpc2Nfb3BzLAorCQkJCQkJICBUQ19IX01BS0Uoc2NoLT5oYW5kbGUsIGkgKyAxKSk7CiAJCQlpZiAoY2hpbGQpIHsKIAkJCQlzY2hfdHJlZV9sb2NrKHNjaCk7CiAJCQkJY2hpbGQgPSB4Y2hnKCZxLT5xdWV1ZXNbaV0sIGNoaWxkKTsKIAotCQkJCWlmIChjaGlsZCAhPSAmbm9vcF9xZGlzYykKKwkJCQlpZiAoY2hpbGQgIT0gJm5vb3BfcWRpc2MpIHsKKwkJCQkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKGNoaWxkLAorCQkJCQkJCQkgY2hpbGQtPnEucWxlbik7CiAJCQkJCXFkaXNjX2Rlc3Ryb3koY2hpbGQpOworCQkJCX0KIAkJCQlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAkJCX0KIAkJfQpAQCAtMjk0LDcgKzMwMCw3IEBACiAJc2NoX3RyZWVfbG9jayhzY2gpOwogCSpvbGQgPSBxLT5xdWV1ZXNbYmFuZF07CiAJcS0+cXVldWVzW2JhbmRdID0gbmV3OwotCXNjaC0+cS5xbGVuIC09ICgqb2xkKS0+cS5xbGVuOworCXFkaXNjX3RyZWVfZGVjcmVhc2VfcWxlbigqb2xkLCAoKm9sZCktPnEucWxlbik7CiAJcWRpc2NfcmVzZXQoKm9sZCk7CiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcmVkLmMgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCmluZGV4IGQ2NWNhZGQuLmFjZGRhZDAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwpAQCAtMTc1LDEyICsxNzUsMTQgQEAKIAlxZGlzY19kZXN0cm95KHEtPnFkaXNjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBRZGlzYyAqcmVkX2NyZWF0ZV9kZmx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsaW1pdCkKK3N0YXRpYyBzdHJ1Y3QgUWRpc2MgKnJlZF9jcmVhdGVfZGZsdChzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxpbWl0KQogewotCXN0cnVjdCBRZGlzYyAqcSA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgJmJmaWZvX3FkaXNjX29wcyk7CisJc3RydWN0IFFkaXNjICpxOwogCXN0cnVjdCBydGF0dHIgKnJ0YTsKIAlpbnQgcmV0OwogCisJcSA9IHFkaXNjX2NyZWF0ZV9kZmx0KHNjaC0+ZGV2LCAmYmZpZm9fcWRpc2Nfb3BzLAorCQkJICAgICAgVENfSF9NQUtFKHNjaC0+aGFuZGxlLCAxKSk7CiAJaWYgKHEpIHsKIAkJcnRhID0ga21hbGxvYyhSVEFfTEVOR1RIKHNpemVvZihzdHJ1Y3QgdGNfZmlmb19xb3B0KSksCiAJCSAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7CkBAIC0yMTksNyArMjIxLDcgQEAKIAljdGwgPSBSVEFfREFUQSh0YltUQ0FfUkVEX1BBUk1TLTFdKTsKIAogCWlmIChjdGwtPmxpbWl0ID4gMCkgewotCQljaGlsZCA9IHJlZF9jcmVhdGVfZGZsdChzY2gtPmRldiwgY3RsLT5saW1pdCk7CisJCWNoaWxkID0gcmVkX2NyZWF0ZV9kZmx0KHNjaCwgY3RsLT5saW1pdCk7CiAJCWlmIChjaGlsZCA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMjI3LDggKzIyOSwxMCBAQAogCXNjaF90cmVlX2xvY2soc2NoKTsKIAlxLT5mbGFncyA9IGN0bC0+ZmxhZ3M7CiAJcS0+bGltaXQgPSBjdGwtPmxpbWl0OwotCWlmIChjaGlsZCkKKwlpZiAoY2hpbGQpIHsKKwkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHEtPnFkaXNjLCBxLT5xZGlzYy0+cS5xbGVuKTsKIAkJcWRpc2NfZGVzdHJveSh4Y2hnKCZxLT5xZGlzYywgY2hpbGQpKTsKKwl9CiAKIAlyZWRfc2V0X3Bhcm1zKCZxLT5wYXJtcywgY3RsLT5xdGhfbWluLCBjdGwtPnF0aF9tYXgsIGN0bC0+V2xvZywKIAkJCQkgY3RsLT5QbG9nLCBjdGwtPlNjZWxsX2xvZywKQEAgLTMwNiw4ICszMTAsOCBAQAogCiAJc2NoX3RyZWVfbG9jayhzY2gpOwogCSpvbGQgPSB4Y2hnKCZxLT5xZGlzYywgbmV3KTsKKwlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oKm9sZCwgKCpvbGQpLT5xLnFsZW4pOwogCXFkaXNjX3Jlc2V0KCpvbGQpOwotCXNjaC0+cS5xbGVuID0gMDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfc2ZxLmMgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCmluZGV4IGQwZDZlNTkuLjQ1OWNkYTIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfc2ZxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9zZnEuYwpAQCAtMzkzLDYgKzM5Myw3IEBACiB7CiAJc3RydWN0IHNmcV9zY2hlZF9kYXRhICpxID0gcWRpc2NfcHJpdihzY2gpOwogCXN0cnVjdCB0Y19zZnFfcW9wdCAqY3RsID0gUlRBX0RBVEEob3B0KTsKKwl1bnNpZ25lZCBpbnQgcWxlbjsKIAogCWlmIChvcHQtPnJ0YV9sZW4gPCBSVEFfTEVOR1RIKHNpemVvZigqY3RsKSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDAzLDggKzQwNCwxMCBAQAogCWlmIChjdGwtPmxpbWl0KQogCQlxLT5saW1pdCA9IG1pbl90KHUzMiwgY3RsLT5saW1pdCwgU0ZRX0RFUFRIKTsKIAorCXFsZW4gPSBzY2gtPnEucWxlbjsKIAl3aGlsZSAoc2NoLT5xLnFsZW4gPj0gcS0+bGltaXQtMSkKIAkJc2ZxX2Ryb3Aoc2NoKTsKKwlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oc2NoLCBxbGVuIC0gc2NoLT5xLnFsZW4pOwogCiAJZGVsX3RpbWVyKCZxLT5wZXJ0dXJiX3RpbWVyKTsKIAlpZiAocS0+cGVydHVyYl9wZXJpb2QpIHsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGJmLmMgYi9uZXQvc2NoZWQvc2NoX3RiZi5jCmluZGV4IGQ5YTVkMjkuLmVkOWI2ZDkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGJmLmMKKysrIGIvbmV0L3NjaGVkL3NjaF90YmYuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIAkJaWYgKHEtPnFkaXNjLT5vcHMtPnJlcXVldWUoc2tiLCBxLT5xZGlzYykgIT0gTkVUX1hNSVRfU1VDQ0VTUykgewogCQkJLyogV2hlbiByZXF1ZXVlIGZhaWxzIHNrYiBpcyBkcm9wcGVkICovCi0JCQlzY2gtPnEucWxlbi0tOworCQkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHEtPnFkaXNjLCAxKTsKIAkJCXNjaC0+cXN0YXRzLmRyb3BzKys7CiAJCX0KIApAQCAtMjczLDEyICsyNzMsMTQgQEAKIAlkZWxfdGltZXIoJnEtPndkX3RpbWVyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBRZGlzYyAqdGJmX2NyZWF0ZV9kZmx0X3FkaXNjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBsaW1pdCkKK3N0YXRpYyBzdHJ1Y3QgUWRpc2MgKnRiZl9jcmVhdGVfZGZsdF9xZGlzYyhzdHJ1Y3QgUWRpc2MgKnNjaCwgdTMyIGxpbWl0KQogewotCXN0cnVjdCBRZGlzYyAqcSA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldiwgJmJmaWZvX3FkaXNjX29wcyk7CisJc3RydWN0IFFkaXNjICpxOwogICAgICAgICBzdHJ1Y3QgcnRhdHRyICpydGE7CiAJaW50IHJldDsKIAorCXEgPSBxZGlzY19jcmVhdGVfZGZsdChzY2gtPmRldiwgJmJmaWZvX3FkaXNjX29wcywKKwkJCSAgICAgIFRDX0hfTUFLRShzY2gtPmhhbmRsZSwgMSkpOwogCWlmIChxKSB7CiAJCXJ0YSA9IGttYWxsb2MoUlRBX0xFTkdUSChzaXplb2Yoc3RydWN0IHRjX2ZpZm9fcW9wdCkpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJ0YSkgewpAQCAtMzQxLDEzICszNDMsMTUgQEAKIAkJZ290byBkb25lOwogCiAJaWYgKHFvcHQtPmxpbWl0ID4gMCkgewotCQlpZiAoKGNoaWxkID0gdGJmX2NyZWF0ZV9kZmx0X3FkaXNjKHNjaC0+ZGV2LCBxb3B0LT5saW1pdCkpID09IE5VTEwpCisJCWlmICgoY2hpbGQgPSB0YmZfY3JlYXRlX2RmbHRfcWRpc2Moc2NoLCBxb3B0LT5saW1pdCkpID09IE5VTEwpCiAJCQlnb3RvIGRvbmU7CiAJfQogCiAJc2NoX3RyZWVfbG9jayhzY2gpOwotCWlmIChjaGlsZCkKKwlpZiAoY2hpbGQpIHsKKwkJcWRpc2NfdHJlZV9kZWNyZWFzZV9xbGVuKHEtPnFkaXNjLCBxLT5xZGlzYy0+cS5xbGVuKTsKIAkJcWRpc2NfZGVzdHJveSh4Y2hnKCZxLT5xZGlzYywgY2hpbGQpKTsKKwl9CiAJcS0+bGltaXQgPSBxb3B0LT5saW1pdDsKIAlxLT5tdHUgPSBxb3B0LT5tdHU7CiAJcS0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKQEAgLTQ0OSw4ICs0NTMsOCBAQAogCiAJc2NoX3RyZWVfbG9jayhzY2gpOwogCSpvbGQgPSB4Y2hnKCZxLT5xZGlzYywgbmV3KTsKKwlxZGlzY190cmVlX2RlY3JlYXNlX3FsZW4oKm9sZCwgKCpvbGQpLT5xLnFsZW4pOwogCXFkaXNjX3Jlc2V0KCpvbGQpOwotCXNjaC0+cS5xbGVuID0gMDsKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwppbmRleCBlZDA0NDVmLi4zOTQ3MWQzIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9hc3NvY2lvbGEuYworKysgYi9uZXQvc2N0cC9hc3NvY2lvbGEuYwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJCQkJICIgcG9ydDogJWRcbiIsCiAJCQkJIGFzb2MsCiAJCQkJICgmcGVlci0+aXBhZGRyKSwKLQkJCQkgcGVlci0+aXBhZGRyLnY0LnNpbl9wb3J0KTsKKwkJCQkgbnRvaHMocGVlci0+aXBhZGRyLnY0LnNpbl9wb3J0KSk7CiAKIAkvKiBJZiB3ZSBhcmUgdG8gcmVtb3ZlIHRoZSBjdXJyZW50IHJldHJhbl9wYXRoLCB1cGRhdGUgaXQKIAkgKiB0byB0aGUgbmV4dCBwZWVyIGJlZm9yZSByZW1vdmluZyB0aGlzIHBlZXIgZnJvbSB0aGUgbGlzdC4KQEAgLTUzNywxMyArNTM3LDEzIEBACiAJc3AgPSBzY3RwX3NrKGFzb2MtPmJhc2Uuc2spOwogCiAJLyogQUZfSU5FVCBhbmQgQUZfSU5FVDYgc2hhcmUgY29tbW9uIHBvcnQgZmllbGQuICovCi0JcG9ydCA9IGFkZHItPnY0LnNpbl9wb3J0OworCXBvcnQgPSBudG9ocyhhZGRyLT52NC5zaW5fcG9ydCk7CiAKIAlTQ1RQX0RFQlVHX1BSSU5US19JUEFERFIoInNjdHBfYXNzb2NfYWRkX3BlZXI6YXNzb2NpYXRpb24gJXAgYWRkcjogIiwKIAkJCQkgIiBwb3J0OiAlZCBzdGF0ZTolZFxuIiwKIAkJCQkgYXNvYywKIAkJCQkgYWRkciwKLQkJCQkgYWRkci0+djQuc2luX3BvcnQsCisJCQkJIHBvcnQsCiAJCQkJIHBlZXJfc3RhdGUpOwogCiAJLyogU2V0IHRoZSBwb3J0IGlmIGl0IGhhcyBub3QgYmVlbiBzZXQgeWV0LiAgKi8KQEAgLTcwOSw2ICs3MDksNyBAQAogCXN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqZmlyc3Q7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICpzZWNvbmQ7CiAJc3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ZW50OworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWludCBzcGNfc3RhdGUgPSAwOwogCkBAIC03MzEsOCArNzMyLDkgQEAKIAkvKiBHZW5lcmF0ZSBhbmQgc2VuZCBhIFNDVFBfUEVFUl9BRERSX0NIQU5HRSBub3RpZmljYXRpb24gdG8gdGhlCiAJICogdXNlci4KIAkgKi8KLQlldmVudCA9IHNjdHBfdWxwZXZlbnRfbWFrZV9wZWVyX2FkZHJfY2hhbmdlKGFzb2MsCi0JCQkJKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopICZ0cmFuc3BvcnQtPmlwYWRkciwKKwltZW1zZXQoJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOworCW1lbWNweSgmYWRkciwgJnRyYW5zcG9ydC0+aXBhZGRyLCB0cmFuc3BvcnQtPmFmX3NwZWNpZmljLT5zb2NrYWRkcl9sZW4pOworCWV2ZW50ID0gc2N0cF91bHBldmVudF9tYWtlX3BlZXJfYWRkcl9jaGFuZ2UoYXNvYywgJmFkZHIsCiAJCQkJMCwgc3BjX3N0YXRlLCBlcnJvciwgR0ZQX0FUT01JQyk7CiAJaWYgKGV2ZW50KQogCQlzY3RwX3VscHFfdGFpbF9ldmVudCgmYXNvYy0+dWxwcSwgZXZlbnQpOwpAQCAtODY4LDcgKzg3MCw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnksICpwb3M7CiAJc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOwotCV9fdTMyIGtleSA9IGh0b25sKHRzbik7CisJX19iZTMyIGtleSA9IGh0b25sKHRzbik7CiAKIAltYXRjaCA9IE5VTEw7CiAKQEAgLTkyNiw4ICs5MjgsOCBAQAogCiAJc2N0cF9yZWFkX2xvY2soJmFzb2MtPmJhc2UuYWRkcl9sb2NrKTsKIAotCWlmICgoYXNvYy0+YmFzZS5iaW5kX2FkZHIucG9ydCA9PSBsYWRkci0+djQuc2luX3BvcnQpICYmCi0JICAgIChhc29jLT5wZWVyLnBvcnQgPT0gcGFkZHItPnY0LnNpbl9wb3J0KSkgeworCWlmICgoaHRvbnMoYXNvYy0+YmFzZS5iaW5kX2FkZHIucG9ydCkgPT0gbGFkZHItPnY0LnNpbl9wb3J0KSAmJgorCSAgICAoaHRvbnMoYXNvYy0+cGVlci5wb3J0KSA9PSBwYWRkci0+djQuc2luX3BvcnQpKSB7CiAJCXRyYW5zcG9ydCA9IHNjdHBfYXNzb2NfbG9va3VwX3BhZGRyKGFzb2MsIHBhZGRyKTsKIAkJaWYgKCF0cmFuc3BvcnQpCiAJCQlnb3RvIG91dDsKQEAgLTExMzUsNyArMTEzNyw3IEBACiAJCQkJICIgcG9ydDogJWRcbiIsCiAJCQkJIGFzb2MsCiAJCQkJICgmdC0+aXBhZGRyKSwKLQkJCQkgdC0+aXBhZGRyLnY0LnNpbl9wb3J0KTsKKwkJCQkgbnRvaHModC0+aXBhZGRyLnY0LnNpbl9wb3J0KSk7CiB9CiAKIC8qIENob29zZSB0aGUgdHJhbnNwb3J0IGZvciBzZW5kaW5nIGEgSU5JVCBwYWNrZXQuICAqLwpAQCAtMTE2MCw3ICsxMTYyLDcgQEAKIAkJCQkgIiBwb3J0OiAlZFxuIiwKIAkJCQkgYXNvYywKIAkJCQkgKCZ0LT5pcGFkZHIpLAotCQkJCSB0LT5pcGFkZHIudjQuc2luX3BvcnQpOworCQkJCSBudG9ocyh0LT5pcGFkZHIudjQuc2luX3BvcnQpKTsKIAogCXJldHVybiB0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYmluZF9hZGRyLmMgYi9uZXQvc2N0cC9iaW5kX2FkZHIuYwppbmRleCAyYjljMTJhLi4wMDk5NDE1IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9iaW5kX2FkZHIuYworKysgYi9uZXQvc2N0cC9iaW5kX2FkZHIuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJICogQm90aCB2NCBhbmQgdjYgaGF2ZSB0aGUgcG9ydCBhdCB0aGUgc2FtZSBvZmZzZXQuCiAJICovCiAJaWYgKCFhZGRyLT5hLnY0LnNpbl9wb3J0KQotCQlhZGRyLT5hLnY0LnNpbl9wb3J0ID0gYnAtPnBvcnQ7CisJCWFkZHItPmEudjQuc2luX3BvcnQgPSBodG9ucyhicC0+cG9ydCk7CiAKIAlhZGRyLT51c2VfYXNfc3JjID0gdXNlX2FzX3NyYzsKIApAQCAtMjc1LDcgKzI3NSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWFmLT5mcm9tX2FkZHJfcGFyYW0oJmFkZHIsIHJhd2FkZHIsIHBvcnQsIDApOworCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCByYXdhZGRyLCBodG9ucyhwb3J0KSwgMCk7CiAJCXJldHZhbCA9IHNjdHBfYWRkX2JpbmRfYWRkcihicCwgJmFkZHIsIDEsIGdmcCk7CiAJCWlmIChyZXR2YWwpIHsKIAkJCS8qIENhbid0IGZpbmlzaCBidWlsZGluZyB0aGUgbGlzdCwgY2xlYW4gdXAuICovCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jIGIvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYwppbmRleCA5YjZiMzk0Li4zM2E0MmU5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCisrKyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKQEAgLTcyLDYgKzcyLDEwIEBACiB7CiAJbWVtc2V0KGVwLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfZW5kcG9pbnQpKTsKIAorCWVwLT5kaWdlc3QgPSBremFsbG9jKFNDVFBfU0lHTkFUVVJFX1NJWkUsIGdmcCk7CisJaWYgKCFlcC0+ZGlnZXN0KQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIEluaXRpYWxpemUgdGhlIGJhc2Ugc3RydWN0dXJlLiAqLwogCS8qIFdoYXQgdHlwZSBvZiBlbmRwb2ludCBhcmUgd2U/ICAqLwogCWVwLT5iYXNlLnR5cGUgPSBTQ1RQX0VQX1RZUEVfU09DS0VUOwpAQCAtMTgyLDYgKzE4Niw5IEBACiAJLyogRnJlZSB1cCB0aGUgSE1BQyB0cmFuc2Zvcm0uICovCiAJY3J5cHRvX2ZyZWVfaGFzaChzY3RwX3NrKGVwLT5iYXNlLnNrKS0+aG1hYyk7CiAKKwkvKiBGcmVlIHRoZSBkaWdlc3QgYnVmZmVyICovCisJa2ZyZWUoZXAtPmRpZ2VzdCk7CisKIAkvKiBDbGVhbnVwLiAqLwogCXNjdHBfaW5xX2ZyZWUoJmVwLT5iYXNlLmlucXVldWUpOwogCXNjdHBfYmluZF9hZGRyX2ZyZWUoJmVwLT5iYXNlLmJpbmRfYWRkcik7CkBAIC0yMjMsNyArMjMwLDcgQEAKIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqcmV0dmFsOwogCiAJc2N0cF9yZWFkX2xvY2soJmVwLT5iYXNlLmFkZHJfbG9jayk7Ci0JaWYgKGVwLT5iYXNlLmJpbmRfYWRkci5wb3J0ID09IGxhZGRyLT52NC5zaW5fcG9ydCkgeworCWlmIChodG9ucyhlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgPT0gbGFkZHItPnY0LnNpbl9wb3J0KSB7CiAJCWlmIChzY3RwX2JpbmRfYWRkcl9tYXRjaCgmZXAtPmJhc2UuYmluZF9hZGRyLCBsYWRkciwKIAkJCQkJIHNjdHBfc2soZXAtPmJhc2Uuc2spKSkgewogCQkJcmV0dmFsID0gZXA7CkBAIC0yNTEsNyArMjU4LDcgQEAKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAKLQlycG9ydCA9IHBhZGRyLT52NC5zaW5fcG9ydDsKKwlycG9ydCA9IG50b2hzKHBhZGRyLT52NC5zaW5fcG9ydCk7CiAKIAlsaXN0X2Zvcl9lYWNoKHBvcywgJmVwLT5hc29jcykgewogCQlhc29jID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uLCBhc29jcyk7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnB1dC5jIGIvbmV0L3NjdHAvaW5wdXQuYwppbmRleCA2ZDgyZjQwLi4zMzExMTg3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnB1dC5jCisrKyBiL25ldC9zY3RwL2lucHV0LmMKQEAgLTcyNiw3ICs3MjYsNyBAQAogCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcDsKIAlpbnQgaGFzaDsKIAotCWhhc2ggPSBzY3RwX2VwX2hhc2hmbihsYWRkci0+djQuc2luX3BvcnQpOworCWhhc2ggPSBzY3RwX2VwX2hhc2hmbihudG9ocyhsYWRkci0+djQuc2luX3BvcnQpKTsKIAloZWFkID0gJnNjdHBfZXBfaGFzaHRhYmxlW2hhc2hdOwogCXJlYWRfbG9jaygmaGVhZC0+bG9jayk7CiAJZm9yIChlcGIgPSBoZWFkLT5jaGFpbjsgZXBiOyBlcGIgPSBlcGItPm5leHQpIHsKQEAgLTgzMCw3ICs4MzAsNyBAQAogCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgogCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCiAJICovCi0JaGFzaCA9IHNjdHBfYXNzb2NfaGFzaGZuKGxvY2FsLT52NC5zaW5fcG9ydCwgcGVlci0+djQuc2luX3BvcnQpOworCWhhc2ggPSBzY3RwX2Fzc29jX2hhc2hmbihudG9ocyhsb2NhbC0+djQuc2luX3BvcnQpLCBudG9ocyhwZWVyLT52NC5zaW5fcG9ydCkpOwogCWhlYWQgPSAmc2N0cF9hc3NvY19oYXNodGFibGVbaGFzaF07CiAJcmVhZF9sb2NrKCZoZWFkLT5sb2NrKTsKIAlmb3IgKGVwYiA9IGhlYWQtPmNoYWluOyBlcGI7IGVwYiA9IGVwYi0+bmV4dCkgewpAQCAtOTU3LDcgKzk1Nyw3IEBACiAJCWlmICghYWYpCiAJCQljb250aW51ZTsKIAotCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKHBhZGRyLCBwYXJhbXMuYWRkciwgbnRvaHMoc2gtPnNvdXJjZSksIDApOworCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKHBhZGRyLCBwYXJhbXMuYWRkciwgc2gtPnNvdXJjZSwgMCk7CiAKIAkJYXNvYyA9IF9fc2N0cF9sb29rdXBfYXNzb2NpYXRpb24obGFkZHIsIHBhZGRyLCAmdHJhbnNwb3J0KTsKIAkJaWYgKGFzb2MpCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pcHY2LmMgYi9uZXQvc2N0cC9pcHY2LmMKaW5kZXggNzgwNzFjNi4uM2MzZTU2MCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaXB2Ni5jCisrKyBiL25ldC9zY3RwL2lwdjYuYwpAQCAtODQsNyArODQsNyBAQAogCiAvKiBJQ01QIGVycm9yIGhhbmRsZXIuICovCiBTQ1RQX1NUQVRJQyB2b2lkIHNjdHBfdjZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAotCQkJICAgICBpbnQgdHlwZSwgaW50IGNvZGUsIGludCBvZmZzZXQsIF9fdTMyIGluZm8pCisJCQkgICAgIGludCB0eXBlLCBpbnQgY29kZSwgaW50IG9mZnNldCwgX19iZTMyIGluZm8pCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyICopc2tiLT5kYXRhOwpAQCAtMTcwLDggKzE3MCw2IEBACiAJCWZsLm9pZiA9IHRyYW5zcG9ydC0+c2FkZHIudjYuc2luNl9zY29wZV9pZDsKIAllbHNlCiAJCWZsLm9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7Ci0JZmwuZmxfaXBfc3BvcnQgPSBpbmV0X3NrKHNrKS0+c3BvcnQ7Ci0JZmwuZmxfaXBfZHBvcnQgPSB0cmFuc3BvcnQtPmlwYWRkci52Ni5zaW42X3BvcnQ7CiAKIAlpZiAobnAtPm9wdCAmJiBucC0+b3B0LT5zcmNydCkgewogCQlzdHJ1Y3QgcnQwX2hkciAqcnQwID0gKHN0cnVjdCBydDBfaGRyICopIG5wLT5vcHQtPnNyY3J0OwpAQCAtMjM5LDcgKzIzNyw3IEBACiAJaW50IGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNCA7IGkrKykgewotCQlfX3UzMiBhMXhvcmEyOworCQlfX2JlMzIgYTF4b3JhMjsKIAogCQlhMXhvcmEyID0gYTEtPnM2X2FkZHIzMltpXSBeIGEyLT5zNl9hZGRyMzJbaV07CiAKQEAgLTM1MCw3ICszNDgsNyBAQAogCQkJICAgICBpbnQgaXNfc2FkZHIpCiB7CiAJdm9pZCAqZnJvbTsKLQlfX3UxNiAqcG9ydDsKKwlfX2JlMTYgKnBvcnQ7CiAJc3RydWN0IHNjdHBoZHIgKnNoOwogCiAJcG9ydCA9ICZhZGRyLT52Ni5zaW42X3BvcnQ7CkBAIC0zNjAsMTAgKzM1OCwxMCBAQAogCiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikgc2tiLT5oLnJhdzsKIAlpZiAoaXNfc2FkZHIpIHsKLQkJKnBvcnQgID0gbnRvaHMoc2gtPnNvdXJjZSk7CisJCSpwb3J0ICA9IHNoLT5zb3VyY2U7CiAJCWZyb20gPSAmc2tiLT5uaC5pcHY2aC0+c2FkZHI7CiAJfSBlbHNlIHsKLQkJKnBvcnQgPSBudG9ocyhzaC0+ZGVzdCk7CisJCSpwb3J0ID0gc2gtPmRlc3Q7CiAJCWZyb20gPSAmc2tiLT5uaC5pcHY2aC0+ZGFkZHI7CiAJfQogCWlwdjZfYWRkcl9jb3B5KCZhZGRyLT52Ni5zaW42X2FkZHIsIGZyb20pOwpAQCAtMzczLDcgKzM3MSw3IEBACiBzdGF0aWMgdm9pZCBzY3RwX3Y2X2Zyb21fc2sodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJYWRkci0+djYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQlhZGRyLT52Ni5zaW42X3BvcnQgPSBpbmV0X3NrKHNrKS0+bnVtOworCWFkZHItPnY2LnNpbjZfcG9ydCA9IDA7CiAJYWRkci0+djYuc2luNl9hZGRyID0gaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7CiB9CiAKQEAgLTQwNyw3ICs0MDUsNyBAQAogLyogSW5pdGlhbGl6ZSBhIHNjdHBfYWRkciBmcm9tIGFuIGFkZHJlc3MgcGFyYW1ldGVyLiAqLwogc3RhdGljIHZvaWQgc2N0cF92Nl9mcm9tX2FkZHJfcGFyYW0odW5pb24gc2N0cF9hZGRyICphZGRyLAogCQkJCSAgICB1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKnBhcmFtLAotCQkJCSAgICBfX3UxNiBwb3J0LCBpbnQgaWlmKQorCQkJCSAgICBfX2JlMTYgcG9ydCwgaW50IGlpZikKIHsKIAlhZGRyLT52Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwogCWFkZHItPnY2LnNpbjZfcG9ydCA9IHBvcnQ7CkBAIC00MjUsNyArNDIzLDcgQEAKIAlpbnQgbGVuZ3RoID0gc2l6ZW9mKHNjdHBfaXB2NmFkZHJfcGFyYW1fdCk7CiAKIAlwYXJhbS0+djYucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzsKLQlwYXJhbS0+djYucGFyYW1faGRyLmxlbmd0aCA9IG50b2hzKGxlbmd0aCk7CisJcGFyYW0tPnY2LnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhsZW5ndGgpOwogCWlwdjZfYWRkcl9jb3B5KCZwYXJhbS0+djYuYWRkciwgJmFkZHItPnY2LnNpbjZfYWRkcik7CiAKIAlyZXR1cm4gbGVuZ3RoOwpAQCAtNDMzLDcgKzQzMSw3IEBACiAKIC8qIEluaXRpYWxpemUgYSBzY3RwX2FkZHIgZnJvbSBhIGRzdF9lbnRyeS4gKi8KIHN0YXRpYyB2b2lkIHNjdHBfdjZfZHN0X3NhZGRyKHVuaW9uIHNjdHBfYWRkciAqYWRkciwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydCkKKwkJCSAgICAgIF9fYmUxNiBwb3J0KQogewogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopZHN0OwogCWFkZHItPnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ2OwpAQCAtNDgwLDcgKzQ3OCw3IEBACiB9CiAKIC8qIEluaXRpYWxpemUgYWRkciBzdHJ1Y3QgdG8gSU5BRERSX0FOWS4gKi8KLXN0YXRpYyB2b2lkIHNjdHBfdjZfaW5hZGRyX2FueSh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIHVuc2lnbmVkIHNob3J0IHBvcnQpCitzdGF0aWMgdm9pZCBzY3RwX3Y2X2luYWRkcl9hbnkodW5pb24gc2N0cF9hZGRyICphZGRyLCBfX2JlMTYgcG9ydCkKIHsKIAltZW1zZXQoYWRkciwgMHgwMCwgc2l6ZW9mKHVuaW9uIHNjdHBfYWRkcikpOwogCWFkZHItPnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CkBAIC04NTUsNyArODUzLDcgQEAKICAqIFJldHVybnMgbnVtYmVyIG9mIGFkZHJlc3NlcyBzdXBwb3J0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgc2N0cF9pbmV0Nl9zdXBwb3J0ZWRfYWRkcnMoY29uc3Qgc3RydWN0IHNjdHBfc29jayAqb3B0LAotCQkJCSAgICAgIF9fdTE2ICp0eXBlcykKKwkJCQkgICAgICBfX2JlMTYgKnR5cGVzKQogewogCXR5cGVzWzBdID0gU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M7CiAJdHlwZXNbMV0gPSBTQ1RQX1BBUkFNX0lQVjZfQUREUkVTUzsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IDczOTU4MjQuLmZiYTU2N2EgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtMTA2NSw3ICsxMDY1LDcgQEAKIAkgKiBBKSBJbml0aWFsaXplIHRoZSBjYWNjX3Nhd19uZXdhY2sgdG8gMCBmb3IgYWxsIGRlc3RpbmF0aW9uCiAJICogYWRkcmVzc2VzLgogCSAqLwotCWlmIChzYWNrLT5udW1fZ2FwX2Fja19ibG9ja3MgPiAwICYmCisJaWYgKHNhY2stPm51bV9nYXBfYWNrX2Jsb2NrcyAmJgogCSAgICBwcmltYXJ5LT5jYWNjLmNoYW5nZW92ZXJfYWN0aXZlKSB7CiAJCWxpc3RfZm9yX2VhY2gocG9zLCB0cmFuc3BvcnRfbGlzdCkgewogCQkJdHJhbnNwb3J0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwKQEAgLTE2MzIsNyArMTYzMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNjdHBfZ2V0X3NraXBfcG9zKHN0cnVjdCBzY3RwX2Z3ZHRzbl9za2lwICpza2lwbGlzdCwKLQkJCQkgICAgaW50IG5za2lwcywgX191MTYgc3RyZWFtKQorCQkJCSAgICBpbnQgbnNraXBzLCBfX2JlMTYgc3RyZWFtKQogewogCWludCBpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm9jLmMgYi9uZXQvc2N0cC9wcm9jLmMKaW5kZXggN2Y0OWU3Ni4uYjM0OTNiZCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvYy5jCisrKyBiL25ldC9zY3RwL3Byb2MuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoKHBvcywgJmVwYi0+YmluZF9hZGRyLmFkZHJlc3NfbGlzdCkgewogCQlsYWRkciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSwgbGlzdCk7Ci0JCWFkZHIgPSAodW5pb24gc2N0cF9hZGRyICopJmxhZGRyLT5hOworCQlhZGRyID0gJmxhZGRyLT5hOwogCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFkZHItPnNhLnNhX2ZhbWlseSk7CiAJCWlmIChwcmltYXJ5ICYmIGFmLT5jbXBfYWRkcihhZGRyLCBwcmltYXJ5KSkgewogCQkJc2VxX3ByaW50ZihzZXEsICIqIik7CkBAIC0xNzcsMTAgKzE3NywxMCBAQAogCXVuaW9uIHNjdHBfYWRkciAqYWRkciwgKnByaW1hcnk7CiAJc3RydWN0IHNjdHBfYWYgKmFmOwogCi0JcHJpbWFyeSA9ICYoYXNzb2MtPnBlZXIucHJpbWFyeV9hZGRyKTsKKwlwcmltYXJ5ID0gJmFzc29jLT5wZWVyLnByaW1hcnlfYWRkcjsKIAlsaXN0X2Zvcl9lYWNoKHBvcywgJmFzc29jLT5wZWVyLnRyYW5zcG9ydF9hZGRyX2xpc3QpIHsKIAkJdHJhbnNwb3J0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCwgdHJhbnNwb3J0cyk7Ci0JCWFkZHIgPSAodW5pb24gc2N0cF9hZGRyICopJnRyYW5zcG9ydC0+aXBhZGRyOworCQlhZGRyID0gJnRyYW5zcG9ydC0+aXBhZGRyOwogCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFkZHItPnNhLnNhX2ZhbWlseSk7CiAJCWlmIChhZi0+Y21wX2FkZHIoYWRkciwgcHJpbWFyeSkpIHsKIAkJCXNlcV9wcmludGYoc2VxLCAiKiIpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvcHJvdG9jb2wuYyBiL25ldC9zY3RwL3Byb3RvY29sLmMKaW5kZXggNWI0ZjgyZi4uMTFmM2I1NCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvcHJvdG9jb2wuYworKysgYi9uZXQvc2N0cC9wcm90b2NvbC5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCSAgICAgaW50IGlzX3NhZGRyKQogewogCXZvaWQgKmZyb207Ci0JX191MTYgKnBvcnQ7CisJX19iZTE2ICpwb3J0OwogCXN0cnVjdCBzY3RwaGRyICpzaDsKIAogCXBvcnQgPSAmYWRkci0+djQuc2luX3BvcnQ7CkBAIC0yNTksMTAgKzI1OSwxMCBAQAogCiAJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikgc2tiLT5oLnJhdzsKIAlpZiAoaXNfc2FkZHIpIHsKLQkJKnBvcnQgID0gbnRvaHMoc2gtPnNvdXJjZSk7CisJCSpwb3J0ICA9IHNoLT5zb3VyY2U7CiAJCWZyb20gPSAmc2tiLT5uaC5pcGgtPnNhZGRyOwogCX0gZWxzZSB7Ci0JCSpwb3J0ID0gbnRvaHMoc2gtPmRlc3QpOworCQkqcG9ydCA9IHNoLT5kZXN0OwogCQlmcm9tID0gJnNrYi0+bmguaXBoLT5kYWRkcjsKIAl9CiAJbWVtY3B5KCZhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIsIGZyb20sIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwpAQCAtMjcyLDcgKzI3Miw3IEBACiBzdGF0aWMgdm9pZCBzY3RwX3Y0X2Zyb21fc2sodW5pb24gc2N0cF9hZGRyICphZGRyLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJYWRkci0+djQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JYWRkci0+djQuc2luX3BvcnQgPSBpbmV0X3NrKHNrKS0+bnVtOworCWFkZHItPnY0LnNpbl9wb3J0ID0gMDsKIAlhZGRyLT52NC5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwogfQogCkBAIC0yOTEsNyArMjkxLDcgQEAKIC8qIEluaXRpYWxpemUgYSBzY3RwX2FkZHIgZnJvbSBhbiBhZGRyZXNzIHBhcmFtZXRlci4gKi8KIHN0YXRpYyB2b2lkIHNjdHBfdjRfZnJvbV9hZGRyX3BhcmFtKHVuaW9uIHNjdHBfYWRkciAqYWRkciwKIAkJCQkgICAgdW5pb24gc2N0cF9hZGRyX3BhcmFtICpwYXJhbSwKLQkJCQkgICAgX191MTYgcG9ydCwgaW50IGlpZikKKwkJCQkgICAgX19iZTE2IHBvcnQsIGludCBpaWYpCiB7CiAJYWRkci0+djQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJYWRkci0+djQuc2luX3BvcnQgPSBwb3J0OwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJaW50IGxlbmd0aCA9IHNpemVvZihzY3RwX2lwdjRhZGRyX3BhcmFtX3QpOwogCiAJcGFyYW0tPnY0LnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9JUFY0X0FERFJFU1M7Ci0JcGFyYW0tPnY0LnBhcmFtX2hkci5sZW5ndGggPSBudG9ocyhsZW5ndGgpOworCXBhcmFtLT52NC5wYXJhbV9oZHIubGVuZ3RoID0gaHRvbnMobGVuZ3RoKTsKIAlwYXJhbS0+djQuYWRkci5zX2FkZHIgPSBhZGRyLT52NC5zaW5fYWRkci5zX2FkZHI7CQogCiAJcmV0dXJuIGxlbmd0aDsKQEAgLTMxNSw3ICszMTUsNyBAQAogCiAvKiBJbml0aWFsaXplIGEgc2N0cF9hZGRyIGZyb20gYSBkc3RfZW50cnkuICovCiBzdGF0aWMgdm9pZCBzY3RwX3Y0X2RzdF9zYWRkcih1bmlvbiBzY3RwX2FkZHIgKnNhZGRyLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCi0JCQkgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KQorCQkJICAgICAgX19iZTE2IHBvcnQpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWRzdDsKIAlzYWRkci0+djQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CkBAIC0zMzgsNyArMzM4LDcgQEAKIH0KIAogLyogSW5pdGlhbGl6ZSBhZGRyIHN0cnVjdCB0byBJTkFERFJfQU5ZLiAqLwotc3RhdGljIHZvaWQgc2N0cF92NF9pbmFkZHJfYW55KHVuaW9uIHNjdHBfYWRkciAqYWRkciwgdW5zaWduZWQgc2hvcnQgcG9ydCkKK3N0YXRpYyB2b2lkIHNjdHBfdjRfaW5hZGRyX2FueSh1bmlvbiBzY3RwX2FkZHIgKmFkZHIsIF9fYmUxNiBwb3J0KQogewogCWFkZHItPnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCWFkZHItPnY0LnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7CkBAIC00ODEsNyArNDgxLDcgQEAKIAkJCQkJICAgbGlzdCk7CiAJCQlpZiAoIWxhZGRyLT51c2VfYXNfc3JjKQogCQkJCWNvbnRpbnVlOwotCQkJc2N0cF92NF9kc3Rfc2FkZHIoJmRzdF9zYWRkciwgZHN0LCBicC0+cG9ydCk7CisJCQlzY3RwX3Y0X2RzdF9zYWRkcigmZHN0X3NhZGRyLCBkc3QsIGh0b25zKGJwLT5wb3J0KSk7CiAJCQlpZiAoc2N0cF92NF9jbXBfYWRkcigmZHN0X3NhZGRyLCAmbGFkZHItPmEpKQogCQkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQpAQCAtNTM4LDcgKzUzOCw3IEBACiAKIAlpZiAocnQpIHsKIAkJc2FkZHItPnY0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCQlzYWRkci0+djQuc2luX3BvcnQgPSBhc29jLT5iYXNlLmJpbmRfYWRkci5wb3J0OyAgCisJCXNhZGRyLT52NC5zaW5fcG9ydCA9IGh0b25zKGFzb2MtPmJhc2UuYmluZF9hZGRyLnBvcnQpOwogCQlzYWRkci0+djQuc2luX2FkZHIuc19hZGRyID0gcnQtPnJ0X3NyYzsgCiAJfQogfQpAQCAtNzkxLDcgKzc5MSw3IEBACiAgKiBjaHVua3MuICBSZXR1cm5zIG51bWJlciBvZiBhZGRyZXNzZXMgc3VwcG9ydGVkLgogICovCiBzdGF0aWMgaW50IHNjdHBfaW5ldF9zdXBwb3J0ZWRfYWRkcnMoY29uc3Qgc3RydWN0IHNjdHBfc29jayAqb3B0LAotCQkJCSAgICAgX191MTYgKnR5cGVzKQorCQkJCSAgICAgX19iZTE2ICp0eXBlcykKIHsKIAl0eXBlc1swXSA9IFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOwogCXJldHVybiAxOwpAQCAtODA4LDcgKzgwOCw3IEBACiAJCQkgIE5JUFFVQUQoKChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3QpLT5ydF9kc3QpKTsKIAogCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX09VVFNDVFBQQUNLUyk7Ci0JcmV0dXJuIGlwX3F1ZXVlX3htaXQoc2tiLCBpcGZyYWdvayk7CisJcmV0dXJuIGlwX3F1ZXVlX3htaXQoc2tiLCBza2ItPnNrLCBpcGZyYWdvayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9hZiBzY3RwX2lwdjRfc3BlY2lmaWM7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggNTA3ZGZmNy4uMDQ5NTRlNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTExLDcgKzExMSw3IEBACiAgKiBwcm92aWRlZCBjaHVuaywgYXMgbW9zdCBjYXVzZSBjb2RlcyB3aWxsIGJlIGVtYmVkZGVkIGluc2lkZSBhbgogICogYWJvcnQgY2h1bmsuCiAgKi8KLXZvaWQgIHNjdHBfaW5pdF9jYXVzZShzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssIF9fdTE2IGNhdXNlX2NvZGUsCit2b2lkICBzY3RwX2luaXRfY2F1c2Uoc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCBfX2JlMTYgY2F1c2VfY29kZSwKIAkJICAgICAgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHBheWxlbikKIHsKIAlzY3RwX2Vycmhkcl90IGVycjsKQEAgLTE4Myw3ICsxODMsNyBAQAogCWludCBudW1fdHlwZXMsIGFkZHJzX2xlbiA9IDA7CiAJc3RydWN0IHNjdHBfc29jayAqc3A7CiAJc2N0cF9zdXBwb3J0ZWRfYWRkcnNfcGFyYW1fdCBzYXQ7Ci0JX191MTYgdHlwZXNbMl07CisJX19iZTE2IHR5cGVzWzJdOwogCXNjdHBfYWRhcHRpb25faW5kX3BhcmFtX3QgYWlwYXJhbTsKIAogCS8qIFJGQyAyOTYwIDMuMy4yIEluaXRpYXRpb24gKElOSVQpICgxKQpAQCAtNzc1LDcgKzc3NSw3IEBACiAJY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLCBfX3UzMiB0c24pCiB7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJldHZhbDsKLQlfX3UzMiBwYXlsb2FkOworCV9fYmUzMiBwYXlsb2FkOwogCiAJcmV0dmFsID0gc2N0cF9tYWtlX2Fib3J0KGFzb2MsIGNodW5rLCBzaXplb2Yoc2N0cF9lcnJoZHJfdCkKIAkJCQkgKyBzaXplb2YodHNuKSk7CkBAIC05NTEsNyArOTUxLDcgQEAKIC8qIENyZWF0ZSBhbiBPcGVyYXRpb24gRXJyb3IgY2h1bmsuICAqLwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9vcF9lcnJvcihjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkgY29uc3Qgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAotCQkJCSBfX3UxNiBjYXVzZV9jb2RlLCBjb25zdCB2b2lkICpwYXlsb2FkLAorCQkJCSBfX2JlMTYgY2F1c2VfY29kZSwgY29uc3Qgdm9pZCAqcGF5bG9hZCwKIAkJCQkgc2l6ZV90IHBheWxlbikKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOwpAQCAtMTE5MCwxNSArMTE5MCwxNCBAQAogCWlmIChjaHVuay0+Y2h1bmtfaGRyLT5mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKIAkJc3NuID0gMDsKIAl9IGVsc2UgewotCQlzaWQgPSBodG9ucyhjaHVuay0+c3ViaC5kYXRhX2hkci0+c3RyZWFtKTsKKwkJc2lkID0gbnRvaHMoY2h1bmstPnN1YmguZGF0YV9oZHItPnN0cmVhbSk7CiAJCWlmIChjaHVuay0+Y2h1bmtfaGRyLT5mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcpCiAJCQlzc24gPSBzY3RwX3Nzbl9uZXh0KCZjaHVuay0+YXNvYy0+c3NubWFwLT5vdXQsIHNpZCk7CiAJCWVsc2UKIAkJCXNzbiA9IHNjdHBfc3NuX3BlZWsoJmNodW5rLT5hc29jLT5zc25tYXAtPm91dCwgc2lkKTsKLQkJc3NuID0gaHRvbnMoc3NuKTsKIAl9CiAKLQljaHVuay0+c3ViaC5kYXRhX2hkci0+c3NuID0gc3NuOworCWNodW5rLT5zdWJoLmRhdGFfaGRyLT5zc24gPSBodG9ucyhzc24pOwogCWNodW5rLT5oYXNfc3NuID0gMTsKIH0KIApAQCAtMTI4MCwxNSArMTI3OSwxMyBAQAogCQkJLSAoYm9keXNpemUgJSBTQ1RQX0NPT0tJRV9NVUxUSVBMRSk7CiAJKmNvb2tpZV9sZW4gPSBoZWFkZXJzaXplICsgYm9keXNpemU7CiAKLQlyZXR2YWwgPSBrbWFsbG9jKCpjb29raWVfbGVuLCBHRlBfQVRPTUlDKTsKLQotCWlmICghcmV0dmFsKQotCQlnb3RvIG5vZGF0YTsKLQogCS8qIENsZWFyIHRoaXMgbWVtb3J5IHNpbmNlIHdlIGFyZSBzZW5kaW5nIHRoaXMgZGF0YSBzdHJ1Y3R1cmUKIAkgKiBvdXQgb24gdGhlIG5ldHdvcmsuCiAJICovCi0JbWVtc2V0KHJldHZhbCwgMHgwMCwgKmNvb2tpZV9sZW4pOworCXJldHZhbCA9IGt6YWxsb2MoKmNvb2tpZV9sZW4sIEdGUF9BVE9NSUMpOworCWlmICghcmV0dmFsKQorCQlnb3RvIG5vZGF0YTsKKwogCWNvb2tpZSA9IChzdHJ1Y3Qgc2N0cF9zaWduZWRfY29va2llICopIHJldHZhbC0+Ym9keTsKIAogCS8qIFNldCB1cCB0aGUgcGFyYW1ldGVyIGhlYWRlci4gICovCkBAIC0xNDM4LDcgKzE0MzUsNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKG50b2hzKGNodW5rLT5zY3RwX2hkci0+c291cmNlKSAhPSBiZWFyX2Nvb2tpZS0+cGVlcl9hZGRyLnY0LnNpbl9wb3J0IHx8CisJaWYgKGNodW5rLT5zY3RwX2hkci0+c291cmNlICE9IGJlYXJfY29va2llLT5wZWVyX2FkZHIudjQuc2luX3BvcnQgfHwKIAkgICAgbnRvaHMoY2h1bmstPnNjdHBfaGRyLT5kZXN0KSAhPSBiZWFyX2Nvb2tpZS0+bXlfcG9ydCkgewogCQkqZXJyb3IgPSAtU0NUUF9JRVJST1JfQkFEX1BPUlRTOwogCQlnb3RvIGZhaWw7CkBAIC0xNDczLDEwICsxNDcwLDEwIEBACiAJCQlzdXNlY29uZHNfdCB1c2VjcyA9ICh0di50dl9zZWMgLQogCQkJCWJlYXJfY29va2llLT5leHBpcmF0aW9uLnR2X3NlYykgKiAxMDAwMDAwTCArCiAJCQkJdHYudHZfdXNlYyAtIGJlYXJfY29va2llLT5leHBpcmF0aW9uLnR2X3VzZWM7CisJCQlfX2JlMzIgbiA9IGh0b25sKHVzZWNzKTsKIAotCQkJdXNlY3MgPSBodG9ubCh1c2Vjcyk7CiAJCQlzY3RwX2luaXRfY2F1c2UoKmVycnAsIFNDVFBfRVJST1JfU1RBTEVfQ09PS0lFLAotCQkJCQkmdXNlY3MsIHNpemVvZih1c2VjcykpOworCQkJCQkmbiwgc2l6ZW9mKG4pKTsKIAkJCSplcnJvciA9IC1TQ1RQX0lFUlJPUl9TVEFMRV9DT09LSUU7CiAJCX0gZWxzZQogCQkJKmVycm9yID0gLVNDVFBfSUVSUk9SX05PTUVNOwpAQCAtMTUzOSw4ICsxNTM2LDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IF9fc2N0cF9taXNzaW5nIHsKLQlfX3UzMiBudW1fbWlzc2luZzsKLQlfX3UxNiB0eXBlOworCV9fYmUzMiBudW1fbWlzc2luZzsKKwlfX2JlMTYgdHlwZTsKIH0gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKgpAQCAtMTg1Miw5ICsxODQ5LDEwIEBACiAJICogYWRkZWQgYXMgdGhlIHByaW1hcnkgdHJhbnNwb3J0LiAgVGhlIHNvdXJjZSBhZGRyZXNzIHNlZW1zIHRvCiAJICogYmUgYSBhIGJldHRlciBjaG9pY2UgdGhhbiBhbnkgb2YgdGhlIGVtYmVkZGVkIGFkZHJlc3Nlcy4KIAkgKi8KLQlpZiAocGVlcl9hZGRyKQorCWlmIChwZWVyX2FkZHIpIHsKIAkJaWYoIXNjdHBfYXNzb2NfYWRkX3BlZXIoYXNvYywgcGVlcl9hZGRyLCBnZnAsIFNDVFBfQUNUSVZFKSkKIAkJCWdvdG8gbm9tZW07CisJfQogCiAJLyogUHJvY2VzcyB0aGUgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVycy4gICovCiAKQEAgLTE5MTAsMTAgKzE5MDgsOSBAQAogCS8qIENvcHkgY29va2llIGluIGNhc2Ugd2UgbmVlZCB0byByZXNlbmQgQ09PS0lFLUVDSE8uICovCiAJY29va2llID0gYXNvYy0+cGVlci5jb29raWU7CiAJaWYgKGNvb2tpZSkgewotCQlhc29jLT5wZWVyLmNvb2tpZSA9IGttYWxsb2MoYXNvYy0+cGVlci5jb29raWVfbGVuLCBnZnApOworCQlhc29jLT5wZWVyLmNvb2tpZSA9IGttZW1kdXAoY29va2llLCBhc29jLT5wZWVyLmNvb2tpZV9sZW4sIGdmcCk7CiAJCWlmICghYXNvYy0+cGVlci5jb29raWUpCiAJCQlnb3RvIGNsZWFuX3VwOwotCQltZW1jcHkoYXNvYy0+cGVlci5jb29raWUsIGNvb2tpZSwgYXNvYy0+cGVlci5jb29raWVfbGVuKTsKIAl9CiAKIAkvKiBSRkMgMjk2MCA3LjIuMSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiBzc3RocmVzaCBNQVkgYmUgYXJiaXRyYXJpbHkKQEAgLTIwMjcsNyArMjAyNCw3IEBACiAJCS8qIEZhbGwgdGhyb3VnaC4gKi8KIAljYXNlIFNDVFBfUEFSQU1fSVBWNF9BRERSRVNTOgogCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYocGFyYW0ucC0+dHlwZSkpOwotCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCBwYXJhbS5hZGRyLCBhc29jLT5wZWVyLnBvcnQsIDApOworCQlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCBwYXJhbS5hZGRyLCBodG9ucyhhc29jLT5wZWVyLnBvcnQpLCAwKTsKIAkJc2NvcGUgPSBzY3RwX3Njb3BlKHBlZXJfYWRkcik7CiAJCWlmIChzY3RwX2luX3Njb3BlKCZhZGRyLCBzY29wZSkpCiAJCQlpZiAoIXNjdHBfYXNzb2NfYWRkX3BlZXIoYXNvYywgJmFkZHIsIGdmcCwgU0NUUF9VTkNPTkZJUk1FRCkpCkBAIC0yMjMwLDcgKzIyMjcsNyBAQAogCQkJCQkgICAgICB1bmlvbiBzY3RwX2FkZHIJICAgICAgKmxhZGRyLAogCQkJCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIJICAgICAgKmFkZHJzLAogCQkJCQkgICAgICBpbnQJCSAgICAgIGFkZHJjbnQsCi0JCQkJCSAgICAgIF9fdTE2CQkgICAgICBmbGFncykKKwkJCQkJICAgICAgX19iZTE2CQkgICAgICBmbGFncykKIHsKIAlzY3RwX2FkZGlwX3BhcmFtX3QJcGFyYW07CiAJc3RydWN0IHNjdHBfY2h1bmsJKnJldHZhbDsKQEAgLTIzNjMsMTQgKzIzNjAsMTQgQEAKIH0KIAogLyogQWRkIHJlc3BvbnNlIHBhcmFtZXRlcnMgdG8gYW4gQVNDT05GX0FDSyBjaHVuay4gKi8KLXN0YXRpYyB2b2lkIHNjdHBfYWRkX2FzY29uZl9yZXNwb25zZShzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssIF9fdTMyIGNycl9pZCwKLQkJCSAgICAgIF9fdTE2IGVycl9jb2RlLCBzY3RwX2FkZGlwX3BhcmFtX3QgKmFzY29uZl9wYXJhbSkKK3N0YXRpYyB2b2lkIHNjdHBfYWRkX2FzY29uZl9yZXNwb25zZShzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssIF9fYmUzMiBjcnJfaWQsCisJCQkgICAgICBfX2JlMTYgZXJyX2NvZGUsIHNjdHBfYWRkaXBfcGFyYW1fdCAqYXNjb25mX3BhcmFtKQogewogCXNjdHBfYWRkaXBfcGFyYW1fdCAJYWNrX3BhcmFtOwogCXNjdHBfZXJyaGRyX3QJCWVycl9wYXJhbTsKIAlpbnQJCQlhc2NvbmZfcGFyYW1fbGVuID0gMDsKIAlpbnQJCQllcnJfcGFyYW1fbGVuID0gMDsKLQlfX3UxNgkJCXJlc3BvbnNlX3R5cGU7CisJX19iZTE2CQkJcmVzcG9uc2VfdHlwZTsKIAogCWlmIChTQ1RQX0VSUk9SX05PX0VSUk9SID09IGVycl9jb2RlKSB7CiAJCXJlc3BvbnNlX3R5cGUgPSBTQ1RQX1BBUkFNX1NVQ0NFU1NfUkVQT1JUOwpAQCAtMjQwNCw3ICsyNDAxLDcgQEAKIH0KIAogLyogUHJvY2VzcyBhIGFzY29uZiBwYXJhbWV0ZXIuICovCi1zdGF0aWMgX191MTYgc2N0cF9wcm9jZXNzX2FzY29uZl9wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKK3N0YXRpYyBfX2JlMTYgc2N0cF9wcm9jZXNzX2FzY29uZl9wYXJhbShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmFzY29uZiwKIAkJCQkgICAgICAgc2N0cF9hZGRpcF9wYXJhbV90ICphc2NvbmZfcGFyYW0pCiB7CkBAIC0yNDEzLDcgKzI0MTAsNyBAQAogCXVuaW9uIHNjdHBfYWRkcglhZGRyOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAl1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKmFkZHJfcGFyYW07Ci0JCQkJIAorCiAJYWRkcl9wYXJhbSA9ICh1bmlvbiBzY3RwX2FkZHJfcGFyYW0gKikKIAkJCSgodm9pZCAqKWFzY29uZl9wYXJhbSArIHNpemVvZihzY3RwX2FkZGlwX3BhcmFtX3QpKTsKIApAQCAtMjQyMSw3ICsyNDE4LDcgQEAKIAlpZiAodW5saWtlbHkoIWFmKSkKIAkJcmV0dXJuIFNDVFBfRVJST1JfSU5WX1BBUkFNOwogCi0JYWYtPmZyb21fYWRkcl9wYXJhbSgmYWRkciwgYWRkcl9wYXJhbSwgYXNvYy0+cGVlci5wb3J0LCAwKTsKKwlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCBhZGRyX3BhcmFtLCBodG9ucyhhc29jLT5wZWVyLnBvcnQpLCAwKTsKIAlzd2l0Y2ggKGFzY29uZl9wYXJhbS0+cGFyYW1faGRyLnR5cGUpIHsKIAljYXNlIFNDVFBfUEFSQU1fQUREX0lQOgogCQkvKiBBRERJUCA0LjMgRDkpIElmIGFuIGVuZHBvaW50IHJlY2VpdmVzIGFuIEFERCBJUCBhZGRyZXNzCkBAIC0yNDg3LDcgKzI0ODQsNyBAQAogCXNjdHBfYWRkaXBfcGFyYW1fdAkqYXNjb25mX3BhcmFtOwogCXN0cnVjdCBzY3RwX2NodW5rCSphc2NvbmZfYWNrOwogCi0JX191MTYJZXJyX2NvZGU7CisJX19iZTE2CWVycl9jb2RlOwogCWludAlsZW5ndGggPSAwOwogCWludAljaHVua19sZW4gPSBhc2NvbmYtPnNrYi0+bGVuOwogCV9fdTMyCXNlcmlhbDsKQEAgLTI1ODYsNyArMjU4Myw3IEBACiAKIAkvKiBXZSBoYXZlIGNoZWNrZWQgdGhlIHBhY2tldCBiZWZvcmUsIHNvIHdlIGRvIG5vdCBjaGVjayBhZ2Fpbi4JKi8KIAlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHBhcmFtX3R5cGUyYWYoYWRkcl9wYXJhbS0+djQucGFyYW1faGRyLnR5cGUpKTsKLQlhZi0+ZnJvbV9hZGRyX3BhcmFtKCZhZGRyLCBhZGRyX3BhcmFtLCBicC0+cG9ydCwgMCk7CisJYWYtPmZyb21fYWRkcl9wYXJhbSgmYWRkciwgYWRkcl9wYXJhbSwgaHRvbnMoYnAtPnBvcnQpLCAwKTsKIAogCXN3aXRjaCAoYXNjb25mX3BhcmFtLT5wYXJhbV9oZHIudHlwZSkgewogCWNhc2UgU0NUUF9QQVJBTV9BRERfSVA6CkBAIC0yNjMwLDcgKzI2MjcsNyBAQAogICogQWxsIFRMVnMgYWZ0ZXIgdGhlIGZhaWxlZCByZXNwb25zZSBhcmUgY29uc2lkZXJlZCB1bnN1Y2Nlc3NmdWwgdW5sZXNzIGEKICAqIHNwZWNpZmljIHN1Y2Nlc3MgaW5kaWNhdGlvbiBpcyBwcmVzZW50IGZvciB0aGUgcGFyYW1ldGVyLgogICovCi1zdGF0aWMgX191MTYgc2N0cF9nZXRfYXNjb25mX3Jlc3BvbnNlKHN0cnVjdCBzY3RwX2NodW5rICphc2NvbmZfYWNrLAorc3RhdGljIF9fYmUxNiBzY3RwX2dldF9hc2NvbmZfcmVzcG9uc2Uoc3RydWN0IHNjdHBfY2h1bmsgKmFzY29uZl9hY2ssCiAJCQkJICAgICAgc2N0cF9hZGRpcF9wYXJhbV90ICphc2NvbmZfcGFyYW0sCiAJCQkJICAgICAgaW50IG5vX2VycikKIHsKQEAgLTI2MzgsNyArMjYzNSw3IEBACiAJc2N0cF9lcnJoZHJfdAkJKmVycl9wYXJhbTsKIAlpbnQJCQlsZW5ndGg7CiAJaW50CQkJYXNjb25mX2Fja19sZW4gPSBhc2NvbmZfYWNrLT5za2ItPmxlbjsKLQlfX3UxNgkJCWVycl9jb2RlOworCV9fYmUxNgkJCWVycl9jb2RlOwogCiAJaWYgKG5vX2VycikKIAkJZXJyX2NvZGUgPSBTQ1RQX0VSUk9SX05PX0VSUk9SOwpAQCAtMjY5NCw3ICsyNjkxLDcgQEAKIAlpbnQJYWxsX3BhcmFtX3Bhc3MgPSAwOwogCWludAlub19lcnIgPSAxOwogCWludAlyZXR2YWwgPSAwOwotCV9fdTE2CWVycl9jb2RlID0gU0NUUF9FUlJPUl9OT19FUlJPUjsKKwlfX2JlMTYJZXJyX2NvZGUgPSBTQ1RQX0VSUk9SX05PX0VSUk9SOwogCiAJLyogU2tpcCB0aGUgY2h1bmtoZHIgYW5kIGFkZGlwaGRyIGZyb20gdGhlIGxhc3QgYXNjb25mIHNlbnQgYW5kIHN0b3JlCiAJICogYSBwb2ludGVyIHRvIGFkZHJlc3MgcGFyYW1ldGVyLgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCmluZGV4IDljMTBiZGUuLjdiYmM2MTUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYworKysgYi9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCQkJCQkgIiB0cmFuc3BvcnQgSVA6IHBvcnQ6JWQgZmFpbGVkLlxuIiwKIAkJCQkJIGFzb2MsCiAJCQkJCSAoJnRyYW5zcG9ydC0+aXBhZGRyKSwKLQkJCQkJIHRyYW5zcG9ydC0+aXBhZGRyLnY0LnNpbl9wb3J0KTsKKwkJCQkJIG50b2hzKHRyYW5zcG9ydC0+aXBhZGRyLnY0LnNpbl9wb3J0KSk7CiAJCXNjdHBfYXNzb2NfY29udHJvbF90cmFuc3BvcnQoYXNvYywgdHJhbnNwb3J0LAogCQkJCQkgICAgIFNDVFBfVFJBTlNQT1JUX0RPV04sCiAJCQkJCSAgICAgU0NUUF9GQUlMRURfVEhSRVNIT0xEKTsKQEAgLTEzNjAsMTIgKzEzNjAsMTIgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NUUF9DTURfSU5JVF9GQUlMRUQ6Ci0JCQlzY3RwX2NtZF9pbml0X2ZhaWxlZChjb21tYW5kcywgYXNvYywgY21kLT5vYmoudTMyKTsKKwkJCXNjdHBfY21kX2luaXRfZmFpbGVkKGNvbW1hbmRzLCBhc29jLCBjbWQtPm9iai5lcnIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQ6CiAJCQlzY3RwX2NtZF9hc3NvY19mYWlsZWQoY29tbWFuZHMsIGFzb2MsIGV2ZW50X3R5cGUsCi0JCQkJCSAgICAgIHN1YnR5cGUsIGNodW5rLCBjbWQtPm9iai51MzIpOworCQkJCQkgICAgICBzdWJ0eXBlLCBjaHVuaywgY21kLT5vYmouZXJyKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NUUF9DTURfSU5JVF9DT1VOVEVSX0lOQzoKQEAgLTE0MjAsNyArMTQyMCw3IEBACiAKIAkJY2FzZSBTQ1RQX0NNRF9QUk9DRVNTX0NUU046CiAJCQkvKiBEdW1teSB1cCBhIFNBQ0sgZm9yIHByb2Nlc3NpbmcuICovCi0JCQlzYWNraC5jdW1fdHNuX2FjayA9IGNtZC0+b2JqLnUzMjsKKwkJCXNhY2toLmN1bV90c25fYWNrID0gY21kLT5vYmouYmUzMjsKIAkJCXNhY2toLmFfcnduZCA9IDA7CiAJCQlzYWNraC5udW1fZ2FwX2Fja19ibG9ja3MgPSAwOwogCQkJc2Fja2gubnVtX2R1cF90c25zID0gMDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKaW5kZXggMWM0MmZlOS4uMjdjYzQ0NCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTkzLDcgKzkzLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9zYWNraGRyICpzY3RwX3NtX3B1bGxfc2FjayhzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmspOwogCiBzdGF0aWMgc2N0cF9kaXNwb3NpdGlvbl90IHNjdHBfc3RvcF90MV9hbmRfYWJvcnQoc2N0cF9jbWRfc2VxX3QgKmNvbW1hbmRzLAotCQkJCQkgICBfX3UxNiBlcnJvciwgaW50IHNrX2VyciwKKwkJCQkJICAgX19iZTE2IGVycm9yLCBpbnQgc2tfZXJyLAogCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJCQkJICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpOwogCkBAIC00NDMsNyArNDQzLDcgQEAKIAlfX3UzMiBpbml0X3RhZzsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyX2NodW5rOwogCXN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0OwotCV9fdTE2IGVycm9yOworCXNjdHBfZXJyb3JfdCBlcnJvcjsKIAogCWlmICghc2N0cF92dGFnX3ZlcmlmeShjaHVuaywgYXNvYykpCiAJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKQEAgLTg4Niw3ICs4ODYsNyBAQAogCQkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJCS8qIENNRF9BU1NPQ19GQUlMRUQgY2FsbHMgQ01EX0RFTEVURV9UQ0IuICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAotCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKKwkJCQlTQ1RQX1BFUlIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CiAJCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RFTEVURV9UQ0I7CkBAIC0yMTM4LDcgKzIxMzgsNyBAQAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCiAJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKLQkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRSkpOworCQkJCVNDVFBfUEVSUihTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRSkpOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ERUxFVEVfVENCOwogCX0KIApAQCAtMjE1OCw3ICsyMTU4LDcgQEAKIAkgKiB0byBnaXZlIGFtcGxlIHRpbWUgdG8gcmV0cmFuc21pdCB0aGUgbmV3IGNvb2tpZSBhbmQgdGh1cwogCSAqIHlpZWxkIGEgaGlnaGVyIHByb2JhYmlsaXR5IG9mIHN1Y2Nlc3Mgb24gdGhlIHJlYXR0ZW1wdC4KIAkgKi8KLQlzdGFsZSA9IG50b2hsKCooc3VzZWNvbmRzX3QgKikoKHU4ICopZXJyICsgc2l6ZW9mKHNjdHBfZXJyaGRyX3QpKSk7CisJc3RhbGUgPSBudG9obCgqKF9fYmUzMiAqKSgodTggKillcnIgKyBzaXplb2Yoc2N0cF9lcnJoZHJfdCkpKTsKIAlzdGFsZSA9IChzdGFsZSAqIDIpIC8gMTAwMDsKIAogCWJodC5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRTsKQEAgLTIyNTAsNyArMjI1MCw3IEBACiB7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXJnOwogCXVuc2lnbmVkIGxlbjsKLQlfX3UxNiBlcnJvciA9IFNDVFBfRVJST1JfTk9fRVJST1I7CisJX19iZTE2IGVycm9yID0gU0NUUF9FUlJPUl9OT19FUlJPUjsKIAogCWlmICghc2N0cF92dGFnX3ZlcmlmeV9laXRoZXIoY2h1bmssIGFzb2MpKQogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CkBAIC0yMjc1LDcgKzIyNzUsNyBAQAogCiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLCBTQ1RQX0VSUk9SKEVDT05OUkVTRVQpKTsKICAJLyogQVNTT0NfRkFJTEVEIHdpbGwgREVMRVRFX1RDQi4gKi8KLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwgU0NUUF9VMzIoZXJyb3IpKTsKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwgU0NUUF9QRVJSKGVycm9yKSk7CiAJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwogCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CiAKQEAgLTIyOTUsNyArMjI5NSw3IEBACiB7CiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXJnOwogCXVuc2lnbmVkIGxlbjsKLQlfX3UxNiBlcnJvciA9IFNDVFBfRVJST1JfTk9fRVJST1I7CisJX19iZTE2IGVycm9yID0gU0NUUF9FUlJPUl9OT19FUlJPUjsKIAogCWlmICghc2N0cF92dGFnX3ZlcmlmeV9laXRoZXIoY2h1bmssIGFzb2MpKQogCQlyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CkBAIC0yMzU3LDcgKzIzNTcsNyBAQAogICogVGhpcyBpcyBjb21tb24gY29kZSBjYWxsZWQgYnkgc2V2ZXJhbCBzY3RwX3NmXypfYWJvcnQoKSBmdW5jdGlvbnMgYWJvdmUuCiAgKi8KIHN0YXRpYyBzY3RwX2Rpc3Bvc2l0aW9uX3Qgc2N0cF9zdG9wX3QxX2FuZF9hYm9ydChzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMsCi0JCQkJCSAgIF9fdTE2IGVycm9yLCBpbnQgc2tfZXJyLAorCQkJCQkgICBfX2JlMTYgZXJyb3IsIGludCBza19lcnIsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQkJCQkgICBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKIHsKQEAgLTIzNzAsNyArMjM3MCw3IEBACiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLCBTQ1RQX0VSUk9SKHNrX2VycikpOwogCS8qIENNRF9JTklUX0ZBSUxFRCB3aWxsIERFTEVURV9UQ0IuICovCiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKLQkJCVNDVFBfVTMyKGVycm9yKSk7CisJCQlTQ1RQX1BFUlIoZXJyb3IpKTsKIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9BQk9SVDsKIH0KIApAQCAtMjQ2Niw3ICsyNDY2LDcgQEAKIAkgKiAgICByZWNlaXZlZCBieSB0aGUgU0hVVERPV04gc2VuZGVyLgogCSAqLwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUFJPQ0VTU19DVFNOLAotCQkJU0NUUF9VMzIoY2h1bmstPnN1Ymguc2h1dGRvd25faGRyLT5jdW1fdHNuX2FjaykpOworCQkJU0NUUF9CRTMyKGNodW5rLT5zdWJoLnNodXRkb3duX2hkci0+Y3VtX3Rzbl9hY2spKTsKIAogb3V0OgogCXJldHVybiBkaXNwb3NpdGlvbjsKQEAgLTI1NDUsNiArMjU0NSw3IEBACiB7CiAJc2N0cF9jd3JoZHJfdCAqY3dyOwogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IGFyZzsKKwl1MzIgbG93ZXN0X3RzbjsKIAogCWlmICghc2N0cF92dGFnX3ZlcmlmeShjaHVuaywgYXNvYykpCiAJCXJldHVybiBzY3RwX3NmX3BkaXNjYXJkKGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTsKQEAgLTI1NTYsMTQgKzI1NTcsMTQgQEAKIAljd3IgPSAoc2N0cF9jd3JoZHJfdCAqKSBjaHVuay0+c2tiLT5kYXRhOwogCXNrYl9wdWxsKGNodW5rLT5za2IsIHNpemVvZihzY3RwX2N3cmhkcl90KSk7CiAKLQljd3ItPmxvd2VzdF90c24gPSBudG9obChjd3ItPmxvd2VzdF90c24pOworCWxvd2VzdF90c24gPSBudG9obChjd3ItPmxvd2VzdF90c24pOwogCiAJLyogRG9lcyB0aGlzIENXUiBhY2sgdGhlIGxhc3Qgc2VudCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbj8gKi8KLQlpZiAoVFNOX2x0ZShhc29jLT5sYXN0X2VjbmVfdHNuLCBjd3ItPmxvd2VzdF90c24pKSB7CisJaWYgKFRTTl9sdGUoYXNvYy0+bGFzdF9lY25lX3RzbiwgbG93ZXN0X3RzbikpIHsKIAkJLyogU3RvcCBzZW5kaW5nIEVDTkUuICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywKIAkJCQlTQ1RQX0NNRF9FQ05fQ1dSLAotCQkJCVNDVFBfVTMyKGN3ci0+bG93ZXN0X3RzbikpOworCQkJCVNDVFBfVTMyKGxvd2VzdF90c24pKTsKIAl9CiAJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKIH0KQEAgLTMzNjAsNyArMzM2MSw3IEBACiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKIAkJCSAgICAgICAgU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCi0JCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9BU0NPTkZfQUNLKSk7CisJCQkJU0NUUF9QRVJSKFNDVFBfRVJST1JfQVNDT05GX0FDSykpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CiAJCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0FCT1JUOwpAQCAtMzM4OCw3ICszMzg5LDcgQEAKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAogCQkJICAgICAgICBTQ1RQX0VSUk9SKEVDT05OQUJPUlRFRCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKLQkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX0FTQ09ORl9BQ0spKTsKKwkJCQlTQ1RQX1BFUlIoU0NUUF9FUlJPUl9BU0NPTkZfQUNLKSk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKIAkJU0NUUF9ERUNfU1RBVFMoU0NUUF9NSUJfQ1VSUkVTVEFCKTsKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQUJPUlQ7CkBAIC0zNzQzLDEyICszNzQ0LDEyIEBACiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKIAkJCQlTQ1RQX0VSUk9SKEVDT05OUkVGVVNFRCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0lOSVRfRkFJTEVELAotCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfUFJPVE9fVklPTEFUSU9OKSk7CisJCQkJU0NUUF9QRVJSKFNDVFBfRVJST1JfUFJPVE9fVklPTEFUSU9OKSk7CiAJfSBlbHNlIHsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAogCQkJICAgICAgICBTQ1RQX0VSUk9SKEVDT05OQUJPUlRFRCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKLQkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTikpOworCQkJCVNDVFBfUEVSUihTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTikpOwogCQlTQ1RQX0RFQ19TVEFUUyhTQ1RQX01JQl9DVVJSRVNUQUIpOwogCX0KIApAQCAtNDA2Miw3ICs0MDYzLDcgQEAKIAkJCVNDVFBfRVJST1IoRUNPTk5BQk9SVEVEKSk7CiAJLyogRGVsZXRlIHRoZSBlc3RhYmxpc2hlZCBhc3NvY2lhdGlvbi4gKi8KIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKLQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfVVNFUl9BQk9SVCkpOworCQkJU0NUUF9QRVJSKFNDVFBfRVJST1JfVVNFUl9BQk9SVCkpOwogCiAJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwogCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CkBAIC00MTk5LDcgKzQyMDAsNyBAQAogCQkJU0NUUF9FUlJPUihFQ09OTlJFRlVTRUQpKTsKIAkvKiBEZWxldGUgdGhlIGVzdGFibGlzaGVkIGFzc29jaWF0aW9uLiAqLwogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfSU5JVF9GQUlMRUQsCi0JCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX1VTRVJfQUJPUlQpKTsKKwkJCVNDVFBfUEVSUihTQ1RQX0VSUk9SX1VTRVJfQUJPUlQpKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC00NTcxLDcgKzQ1NzIsNyBAQAogCQkJCVNDVFBfRVJST1IoRVRJTUVET1VUKSk7CiAJCS8qIENNRF9BU1NPQ19GQUlMRUQgY2FsbHMgQ01EX0RFTEVURV9UQ0IuICovCiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfQVNTT0NfRkFJTEVELAotCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKKwkJCQlTQ1RQX1BFUlIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CiAJCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RFTEVURV9UQ0I7CkBAIC00NjkzLDcgKzQ2OTQsNyBAQAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCiAJCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9JTklUX0ZBSUxFRCwKLQkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CisJCQkJU0NUUF9QRVJSKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fREVMRVRFX1RDQjsKIAl9CiAKQEAgLTQ3NDUsNyArNDc0Niw3IEBACiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKIAkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0lOSVRfRkFJTEVELAotCQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKKwkJCQlTQ1RQX1BFUlIoU0NUUF9FUlJPUl9OT19FUlJPUikpOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ERUxFVEVfVENCOwogCX0KIApAQCAtNDc4MSw3ICs0NzgyLDcgQEAKIAkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQkvKiBOb3RlOiAgQ01EX0FTU09DX0ZBSUxFRCBjYWxscyBDTURfREVMRVRFX1RDQi4gKi8KIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCi0JCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19FUlJPUikpOworCQkJCVNDVFBfUEVSUihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CiAJCVNDVFBfSU5DX1NUQVRTKFNDVFBfTUlCX0FCT1JURURTKTsKIAkJU0NUUF9ERUNfU1RBVFMoU0NUUF9NSUJfQ1VSUkVTVEFCKTsKIAkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fREVMRVRFX1RDQjsKQEAgLTQ4NTksNyArNDg2MCw3IEBACiAJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfU0VUX1NLX0VSUiwKIAkJCQlTQ1RQX0VSUk9SKEVUSU1FRE9VVCkpOwogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKLQkJCQlTQ1RQX1UzMihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CisJCQkJU0NUUF9QRVJSKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKIAkJU0NUUF9JTkNfU1RBVFMoU0NUUF9NSUJfQUJPUlRFRFMpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9DVVJSRVNUQUIpOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9BQk9SVDsKQEAgLTQ5MTUsNyArNDkxNiw3IEBACiAJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9TRVRfU0tfRVJSLAogCQkJU0NUUF9FUlJPUihFVElNRURPVVQpKTsKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX0FTU09DX0ZBSUxFRCwKLQkJCVNDVFBfVTMyKFNDVFBfRVJST1JfTk9fRVJST1IpKTsKKwkJCVNDVFBfUEVSUihTQ1RQX0VSUk9SX05PX0VSUk9SKSk7CiAKIAlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ERUxFVEVfVENCOwogbm9tZW06CkBAIC01MzY1LDcgKzUzNjYsNyBAQAogCQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1NFVF9TS19FUlIsCiAJCQkJU0NUUF9FUlJPUihFQ09OTkFCT1JURUQpKTsKIAkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9BU1NPQ19GQUlMRUQsCi0JCQkJU0NUUF9VMzIoU0NUUF9FUlJPUl9OT19EQVRBKSk7CisJCQkJU0NUUF9QRVJSKFNDVFBfRVJST1JfTk9fREFUQSkpOwogCQlTQ1RQX0lOQ19TVEFUUyhTQ1RQX01JQl9BQk9SVEVEUyk7CiAJCVNDVFBfREVDX1NUQVRTKFNDVFBfTUlCX0NVUlJFU1RBQik7CiAJCXJldHVybiBTQ1RQX0lFUlJPUl9OT19EQVRBOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jIGIvbmV0L3NjdHAvc21fc3RhdGV0YWJsZS5jCmluZGV4IDhiY2NhNTYuLjczM2RkODcgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRldGFibGUuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZXRhYmxlLmMKQEAgLTEwNCwzMjUgKzEwNCwzMjIgQEAKIAl9OwogfQogCisjZGVmaW5lIFRZUEVfU0NUUF9GVU5DKGZ1bmMpIHsuZm4gPSBmdW5jLCAubmFtZSA9ICNmdW5jfQorCiAjZGVmaW5lIFRZUEVfU0NUUF9EQVRBIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX29vdGIsIC5uYW1lID0gInNjdHBfc2Zfb290YiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90YWJvcnRfOF80XzgsIC5uYW1lID0gInNjdHBfc2ZfdGFib3J0XzhfNF84In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RhYm9ydF84XzRfOCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2VhdF9kYXRhXzZfMiwgLm5hbWUgPSAic2N0cF9zZl9lYXRfZGF0YV82XzIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X2RhdGFfNl8yKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZWF0X2RhdGFfNl8yLCAubmFtZSA9ICJzY3RwX3NmX2VhdF9kYXRhXzZfMiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfZGF0YV82XzIpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9lYXRfZGF0YV9mYXN0XzRfNCwgLm5hbWUgPSAic2N0cF9zZl9lYXRfZGF0YV9mYXN0XzRfNCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfZGF0YV9mYXN0XzRfNCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX0RBVEEgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfSU5JVCB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNV8xQl9pbml0LCAubmFtZSA9ICJzY3RwX3NmX2RvXzVfMUJfaW5pdCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzFCX2luaXQpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNV8yXzFfc2ltaW5pdCwgLm5hbWUgPSAic2N0cF9zZl9kb181XzJfMV9zaW1pbml0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMl8xX3NpbWluaXQpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb181XzJfMV9zaW1pbml0LCAubmFtZSA9ICJzY3RwX3NmX2RvXzVfMl8xX3NpbWluaXQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8yXzFfc2ltaW5pdCksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb181XzJfMl9kdXBpbml0LCAubmFtZSA9ICJzY3RwX3NmX2RvXzVfMl8yX2R1cGluaXQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzVfMl8yX2R1cGluaXQsIC5uYW1lID0gInNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzJfMl9kdXBpbml0KSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdCwgLm5hbWUgPSAic2N0cF9zZl9kb181XzJfMl9kdXBpbml0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMl8yX2R1cGluaXQpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdCwgLm5hbWUgPSAic2N0cF9zZl9kb181XzJfMl9kdXBpbml0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMl8yX2R1cGluaXQpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fOV8yX3Jlc2h1dGFjaywgLm5hbWUgPSAic2N0cF9zZl9kb185XzJfcmVzaHV0YWNrIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMl9yZXNodXRhY2spLCBcCiB9IC8qIFRZUEVfU0NUUF9JTklUICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0lOSVRfQUNLIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX29vdGIsIC5uYW1lID0gInNjdHBfc2Zfb290YiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb181XzFDX2FjaywgLm5hbWUgPSAic2N0cF9zZl9kb181XzFDX2FjayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzFDX2FjayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX0lOSVRfQUNLICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1NBQ0sgeyBcCiAJLyogIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX29vdGIsIC5uYW1lID0gInNjdHBfc2Zfb290YiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90YWJvcnRfOF80XzgsIC5uYW1lID0gInNjdHBfc2ZfdGFib3J0XzhfNF84In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RhYm9ydF84XzRfOCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2VhdF9zYWNrXzZfMiwgLm5hbWUgPSAic2N0cF9zZl9lYXRfc2Fja182XzIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X3NhY2tfNl8yKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2VhdF9zYWNrXzZfMiwgLm5hbWUgPSAic2N0cF9zZl9lYXRfc2Fja182XzIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZWF0X3NhY2tfNl8yKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZWF0X3NhY2tfNl8yLCAubmFtZSA9ICJzY3RwX3NmX2VhdF9zYWNrXzZfMiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfc2Fja182XzIpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lYXRfc2Fja182XzIsIC5uYW1lID0gInNjdHBfc2ZfZWF0X3NhY2tfNl8yIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9zYWNrXzZfMiksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX1NBQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfSEVBUlRCRUFUIHsgXAogCS8qICBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGFib3J0XzhfNF84LCAubmFtZSA9ICJzY3RwX3NmX3RhYm9ydF84XzRfOCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90YWJvcnRfOF80XzgpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9iZWF0XzhfMywgLm5hbWUgPSAic2N0cF9zZl9iZWF0XzhfMyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9iZWF0XzhfMyksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9iZWF0XzhfMywgLm5hbWUgPSAic2N0cF9zZl9iZWF0XzhfMyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9iZWF0XzhfMyksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2JlYXRfOF8zLCAubmFtZSA9ICJzY3RwX3NmX2JlYXRfOF8zIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2JlYXRfOF8zKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYmVhdF84XzMsIC5uYW1lID0gInNjdHBfc2ZfYmVhdF84XzMifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYmVhdF84XzMpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYmVhdF84XzMsIC5uYW1lID0gInNjdHBfc2ZfYmVhdF84XzMifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYmVhdF84XzMpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCiAJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIGFyZSBuaWNlLiAgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2JlYXRfOF8zLCAubmFtZSA9ICJzY3RwX3NmX2JlYXRfOF8zIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2JlYXRfOF8zKSwgXAogfSAvKiBUWVBFX1NDVFBfSEVBUlRCRUFUICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0hFQVJUQkVBVF9BQ0sgeyBcCiAJLyogIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX29vdGIsIC5uYW1lID0gInNjdHBfc2Zfb290YiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90YWJvcnRfOF80XzgsIC5uYW1lID0gInNjdHBfc2ZfdGFib3J0XzhfNF84In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RhYm9ydF84XzRfOCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl92aW9sYXRpb24sIC5uYW1lID0gInNjdHBfc2ZfdmlvbGF0aW9uIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3Zpb2xhdGlvbiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2JhY2tiZWF0XzhfMywgLm5hbWUgPSAic2N0cF9zZl9iYWNrYmVhdF84XzMifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYmFja2JlYXRfOF8zKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYmFja2JlYXRfOF8zLCAubmFtZSA9ICJzY3RwX3NmX2JhY2tiZWF0XzhfMyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9iYWNrYmVhdF84XzMpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9iYWNrYmVhdF84XzMsIC5uYW1lID0gInNjdHBfc2ZfYmFja2JlYXRfOF8zIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2JhY2tiZWF0XzhfMyksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9iYWNrYmVhdF84XzMsIC5uYW1lID0gInNjdHBfc2ZfYmFja2JlYXRfOF8zIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2JhY2tiZWF0XzhfMyksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX0hFQVJUQkVBVF9BQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfQUJPUlQgeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfb290YiwgLm5hbWUgPSAic2N0cF9zZl9vb3RiIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3BkaXNjYXJkLCAubmFtZSA9ICJzY3RwX3NmX3BkaXNjYXJkIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3BkaXNjYXJkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Nvb2tpZV93YWl0X2Fib3J0LCAubmFtZSA9ICJzY3RwX3NmX2Nvb2tpZV93YWl0X2Fib3J0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Nvb2tpZV93YWl0X2Fib3J0KSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfY29va2llX2VjaG9lZF9hYm9ydCwgXAotCSAubmFtZSA9ICJzY3RwX3NmX2Nvb2tpZV9lY2hvZWRfYWJvcnQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfY29va2llX2VjaG9lZF9hYm9ydCksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb185XzFfYWJvcnQsIC5uYW1lID0gInNjdHBfc2ZfZG9fOV8xX2Fib3J0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMV9hYm9ydCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3NodXRkb3duX3BlbmRpbmdfYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX3NodXRkb3duX3BlbmRpbmdfYWJvcnQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfc2h1dGRvd25fcGVuZGluZ19hYm9ydCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3NodXRkb3duX3NlbnRfYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX3NodXRkb3duX3NlbnRfYWJvcnQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfc2h1dGRvd25fc2VudF9hYm9ydCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb185XzFfYWJvcnQsIC5uYW1lID0gInNjdHBfc2ZfZG9fOV8xX2Fib3J0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMV9hYm9ydCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9hYm9ydCwgXAotCS5uYW1lID0gInNjdHBfc2Zfc2h1dGRvd25fYWNrX3NlbnRfYWJvcnQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfc2h1dGRvd25fYWNrX3NlbnRfYWJvcnQpLCBcCiB9IC8qIFRZUEVfU0NUUF9BQk9SVCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9TSFVURE9XTiB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGFib3J0XzhfNF84LCAubmFtZSA9ICJzY3RwX3NmX3RhYm9ydF84XzRfOCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90YWJvcnRfOF80XzgpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb185XzJfc2h1dGRvd24sIC5uYW1lID0gInNjdHBfc2ZfZG9fOV8yX3NodXRkb3duIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzlfMl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjaywgXAotCSAubmFtZSA9ICJzY3RwX3NmX2RvXzlfMl9zaHV0ZG93bl9hY2sifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX1NIVVRET1dOICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1NIVVRET1dOX0FDSyB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfb290YiwgLm5hbWUgPSAic2N0cF9zZl9vb3RiIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fOF81XzFfRV9zYSwgLm5hbWUgPSAic2N0cF9zZl9kb184XzVfMV9FX3NhIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzhfNV8xX0Vfc2EpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb184XzVfMV9FX3NhLCAubmFtZSA9ICJzY3RwX3NmX2RvXzhfNV8xX0Vfc2EifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fOF81XzFfRV9zYSksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl92aW9sYXRpb24sIC5uYW1lID0gInNjdHBfc2ZfdmlvbGF0aW9uIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3Zpb2xhdGlvbiksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3Zpb2xhdGlvbiwgLm5hbWUgPSAic2N0cF9zZl92aW9sYXRpb24ifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdmlvbGF0aW9uKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fOV8yX2ZpbmFsLCAubmFtZSA9ICJzY3RwX3NmX2RvXzlfMl9maW5hbCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzJfZmluYWwpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdmlvbGF0aW9uLCAubmFtZSA9ICJzY3RwX3NmX3Zpb2xhdGlvbiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl92aW9sYXRpb24pLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fOV8yX2ZpbmFsLCAubmFtZSA9ICJzY3RwX3NmX2RvXzlfMl9maW5hbCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzJfZmluYWwpLCBcCiB9IC8qIFRZUEVfU0NUUF9TSFVURE9XTl9BQ0sgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfRVJST1IgeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfb290YiwgLm5hbWUgPSAic2N0cF9zZl9vb3RiIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RhYm9ydF84XzRfOCwgLm5hbWUgPSAic2N0cF9zZl90YWJvcnRfOF80XzgifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGFib3J0XzhfNF84KSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfY29va2llX2VjaG9lZF9lcnIsIC5uYW1lID0gInNjdHBfc2ZfY29va2llX2VjaG9lZF9lcnIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfY29va2llX2VjaG9lZF9lcnIpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfb3BlcnJfbm90aWZ5LCAubmFtZSA9ICJzY3RwX3NmX29wZXJyX25vdGlmeSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vcGVycl9ub3RpZnkpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl9vcGVycl9ub3RpZnksIC5uYW1lID0gInNjdHBfc2Zfb3BlcnJfbm90aWZ5In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29wZXJyX25vdGlmeSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX29wZXJyX25vdGlmeSwgLm5hbWUgPSAic2N0cF9zZl9vcGVycl9ub3RpZnkifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb3BlcnJfbm90aWZ5KSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogfSAvKiBUWVBFX1NDVFBfRVJST1IgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfQ09PS0lFX0VDSE8geyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzVfMURfY2UsIC5uYW1lID0gInNjdHBfc2ZfZG9fNV8xRF9jZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzFEX2NlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2ssIC5uYW1lID0gInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzJfNF9kdXBjb29rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vaywgLm5hbWUgPSAic2N0cF9zZl9kb181XzJfNF9kdXBjb29rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2spLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vaywgLm5hbWUgPSAic2N0cF9zZl9kb181XzJfNF9kdXBjb29rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2spLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb181XzJfNF9kdXBjb29rLCAubmFtZSA9ICJzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2sifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2ssIC5uYW1lID0gInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzJfNF9kdXBjb29rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2ssIC5uYW1lID0gInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzJfNF9kdXBjb29rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2ssIC5uYW1lID0gInNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb181XzJfNF9kdXBjb29rKSwgXAogfSAvKiBUWVBFX1NDVFBfQ09PS0lFX0VDSE8gKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfQ09PS0lFX0FDSyB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb181XzFFX2NhLCAubmFtZSA9ICJzY3RwX3NmX2RvXzVfMUVfY2EifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNV8xRV9jYSksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiB9IC8qIFRZUEVfU0NUUF9DT09LSUVfQUNLICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VDTl9FQ05FIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX29vdGIsIC5uYW1lID0gInNjdHBfc2Zfb290YiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9vb3RiKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX2VjbmUsIC5uYW1lID0gInNjdHBfc2ZfZG9fZWNuZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19lY25lKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX2VjbmUsIC5uYW1lID0gInNjdHBfc2ZfZG9fZWNuZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19lY25lKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fZWNuZSwgLm5hbWUgPSAic2N0cF9zZl9kb19lY25lIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX2VjbmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19lY25lLCAubmFtZSA9ICJzY3RwX3NmX2RvX2VjbmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fZWNuZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19lY25lLCAubmFtZSA9ICJzY3RwX3NmX2RvX2VjbmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fZWNuZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIH0gLyogVFlQRV9TQ1RQX0VDTl9FQ05FICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VDTl9DV1IgeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfb290YiwgLm5hbWUgPSAic2N0cF9zZl9vb3RiIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fZWNuX2N3ciwgLm5hbWUgPSAic2N0cF9zZl9kb19lY25fY3dyIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX2Vjbl9jd3IpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19lY25fY3dyLCAubmFtZSA9ICJzY3RwX3NmX2RvX2Vjbl9jd3IifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fZWNuX2N3ciksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX2Vjbl9jd3IsIC5uYW1lID0gInNjdHBfc2ZfZG9fZWNuX2N3ciJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19lY25fY3dyKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogfSAvKiBUWVBFX1NDVFBfRUNOX0NXUiAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9TSFVURE9XTl9DT01QTEVURSB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNF9DLCAubmFtZSA9ICJzY3RwX3NmX2RvXzRfQyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb180X0MpLCBcCiB9IC8qIFRZUEVfU0NUUF9TSFVURE9XTl9DT01QTEVURSAqLwogCiAvKiBUaGUgcHJpbWFyeSBpbmRleCBmb3IgdGhpcyB0YWJsZSBpcyB0aGUgY2h1bmsgdHlwZS4KQEAgLTQ1MCw0NCArNDQ3LDQ0IEBACiAKICNkZWZpbmUgVFlQRV9TQ1RQX0FTQ09ORiB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19hc2NvbmYsIC5uYW1lID0gInNjdHBfc2ZfZG9fYXNjb25mIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX2FzY29uZiksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiB9IC8qIFRZUEVfU0NUUF9BU0NPTkYgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfQVNDT05GX0FDSyB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19hc2NvbmZfYWNrLCAubmFtZSA9ICJzY3RwX3NmX2RvX2FzY29uZl9hY2sifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fYXNjb25mX2FjayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Rpc2NhcmRfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfZGlzY2FyZF9jaHVuayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kaXNjYXJkX2NodW5rKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiB9IC8qIFRZUEVfU0NUUF9BU0NPTkZfQUNLICovCiAKIC8qIFRoZSBwcmltYXJ5IGluZGV4IGZvciB0aGlzIHRhYmxlIGlzIHRoZSBjaHVuayB0eXBlLgpAQCAtNTAwLDIzICs0OTcsMjMgQEAKIAogI2RlZmluZSBUWVBFX1NDVFBfRldEX1RTTiB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfb290YiksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGFib3J0XzhfNF84LCAubmFtZSA9ICJzY3RwX3NmX3RhYm9ydF84XzRfOCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90YWJvcnRfOF80XzgpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kaXNjYXJkX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX2Rpc2NhcmRfY2h1bmsifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZGlzY2FyZF9jaHVuayksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lYXRfZndkX3RzbiwgLm5hbWUgPSAic2N0cF9zZl9lYXRfZndkX3RzbiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lYXRfZndkX3RzbiksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2VhdF9md2RfdHNuLCAubmFtZSA9ICJzY3RwX3NmX2VhdF9md2RfdHNuIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9md2RfdHNuKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZWF0X2Z3ZF90c25fZmFzdCwgLm5hbWUgPSAic2N0cF9zZl9lYXRfZndkX3Rzbl9mYXN0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2VhdF9md2RfdHNuX2Zhc3QpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZGlzY2FyZF9jaHVuaywgLm5hbWUgPSAic2N0cF9zZl9kaXNjYXJkX2NodW5rIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Rpc2NhcmRfY2h1bmspLCBcCiB9IC8qIFRZUEVfU0NUUF9GV0RfVFNOICovCiAKIC8qIFRoZSBwcmltYXJ5IGluZGV4IGZvciB0aGlzIHRhYmxlIGlzIHRoZSBjaHVuayB0eXBlLgpAQCAtNTI5LDE2NyArNTI2LDE1MCBAQAogc3RhdGljIGNvbnN0IHNjdHBfc21fdGFibGVfZW50cnlfdAogY2h1bmtfZXZlbnRfdGFibGVfdW5rbm93bltTQ1RQX1NUQVRFX05VTV9TVEFURVNdID0gewogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8KLQl7LmZuID0gc2N0cF9zZl9vb3RiLCAubmFtZSA9ICJzY3RwX3NmX29vdGIifSwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX29vdGIpLAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovCi0Jey5mbiA9IHNjdHBfc2ZfdGFib3J0XzhfNF84LCAubmFtZSA9ICJzY3RwX3NmX3RhYm9ydF84XzRfOCJ9LAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGFib3J0XzhfNF84KSwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovCi0Jey5mbiA9IHNjdHBfc2ZfdW5rX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX3Vua19jaHVuayJ9LAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdW5rX2NodW5rKSwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8KLQl7LmZuID0gc2N0cF9zZl91bmtfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfdW5rX2NodW5rIn0sCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl91bmtfY2h1bmspLAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8KLQl7LmZuID0gc2N0cF9zZl91bmtfY2h1bmssIC5uYW1lID0gInNjdHBfc2ZfdW5rX2NodW5rIn0sCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl91bmtfY2h1bmspLAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLwotCXsuZm4gPSBzY3RwX3NmX3Vua19jaHVuaywgLm5hbWUgPSAic2N0cF9zZl91bmtfY2h1bmsifSwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3Vua19jaHVuayksCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovCi0Jey5mbiA9IHNjdHBfc2ZfdW5rX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX3Vua19jaHVuayJ9LAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdW5rX2NodW5rKSwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovCi0Jey5mbiA9IHNjdHBfc2ZfdW5rX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX3Vua19jaHVuayJ9LAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdW5rX2NodW5rKSwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovCi0Jey5mbiA9IHNjdHBfc2ZfdW5rX2NodW5rLCAubmFtZSA9ICJzY3RwX3NmX3Vua19jaHVuayJ9LAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdW5rX2NodW5rKSwKIH07CS8qIGNodW5rIHVua25vd24gKi8KIAogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfQVNTT0NJQVRFICB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fcHJtX2Fzb2MsIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX2Fzb2MifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fcHJtX2Fzb2MpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfbm90X2ltcGwsIC5uYW1lID0gInNjdHBfc2Zfbm90X2ltcGwifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfbm90X2ltcGwpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9ub3RfaW1wbCwgLm5hbWUgPSAic2N0cF9zZl9ub3RfaW1wbCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9ub3RfaW1wbCksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9ub3RfaW1wbCwgLm5hbWUgPSAic2N0cF9zZl9ub3RfaW1wbCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9ub3RfaW1wbCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX25vdF9pbXBsLCAubmFtZSA9ICJzY3RwX3NmX25vdF9pbXBsIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX25vdF9pbXBsKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfbm90X2ltcGwsIC5uYW1lID0gInNjdHBfc2Zfbm90X2ltcGwifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfbm90X2ltcGwpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfbm90X2ltcGwsIC5uYW1lID0gInNjdHBfc2Zfbm90X2ltcGwifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfbm90X2ltcGwpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfbm90X2ltcGwsIC5uYW1lID0gInNjdHBfc2Zfbm90X2ltcGwifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfbm90X2ltcGwpLCBcCiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfQVNTT0NJQVRFICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1BSSU1JVElWRV9TSFVURE9XTiAgeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Vycm9yX2Nsb3NlZCwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9jbG9zZWQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3JfY2xvc2VkKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Nvb2tpZV93YWl0X3BybV9zaHV0ZG93biwgXAotCSAubmFtZSA9ICJzY3RwX3NmX2Nvb2tpZV93YWl0X3BybV9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9jb29raWVfd2FpdF9wcm1fc2h1dGRvd24pLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9jb29raWVfZWNob2VkX3BybV9zaHV0ZG93biwgXAotCSAubmFtZSA9ICJzY3RwX3NmX2Nvb2tpZV9lY2hvZWRfcHJtX3NodXRkb3duIn0sXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfY29va2llX2VjaG9lZF9wcm1fc2h1dGRvd24pLFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb185XzJfcHJtX3NodXRkb3duLCBcCi0JIC5uYW1lID0gInNjdHBfc2ZfZG9fOV8yX3BybV9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzJfcHJtX3NodXRkb3duKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfaWdub3JlX3ByaW1pdGl2ZSwgLm5hbWUgPSAic2N0cF9zZl9pZ25vcmVfcHJpbWl0aXZlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9wcmltaXRpdmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfcHJpbWl0aXZlLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9wcmltaXRpdmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX3ByaW1pdGl2ZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfcHJpbWl0aXZlLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9wcmltaXRpdmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX3ByaW1pdGl2ZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfcHJpbWl0aXZlLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9wcmltaXRpdmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX3ByaW1pdGl2ZSksIFwKIH0gLyogVFlQRV9TQ1RQX1BSSU1JVElWRV9TSFVURE9XTiAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfQUJPUlQgIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9jbG9zZWQsIC5uYW1lID0gInNjdHBfc2ZfZXJyb3JfY2xvc2VkIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9jb29raWVfd2FpdF9wcm1fYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX2Nvb2tpZV93YWl0X3BybV9hYm9ydCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9jb29raWVfd2FpdF9wcm1fYWJvcnQpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9jb29raWVfZWNob2VkX3BybV9hYm9ydCwgXAotCS5uYW1lID0gInNjdHBfc2ZfY29va2llX2VjaG9lZF9wcm1fYWJvcnQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfY29va2llX2VjaG9lZF9wcm1fYWJvcnQpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fOV8xX3BybV9hYm9ydCwgXAotCS5uYW1lID0gInNjdHBfc2ZfZG9fOV8xX3BybV9hYm9ydCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzFfcHJtX2Fib3J0KSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfc2h1dGRvd25fcGVuZGluZ19wcm1fYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX3NodXRkb3duX3BlbmRpbmdfcHJtX2Fib3J0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3NodXRkb3duX3BlbmRpbmdfcHJtX2Fib3J0KSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfc2h1dGRvd25fc2VudF9wcm1fYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX3NodXRkb3duX3NlbnRfcHJtX2Fib3J0In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3NodXRkb3duX3NlbnRfcHJtX2Fib3J0KSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzlfMV9wcm1fYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX2RvXzlfMV9wcm1fYWJvcnQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fOV8xX3BybV9hYm9ydCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9wcm1fYWJvcnQsIFwKLQkubmFtZSA9ICJzY3RwX3NmX3NodXRkb3duX2Fja19zZW50X3BybV9hYm9ydCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9wcm1fYWJvcnQpLCBcCiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfQUJPUlQgKi8KIAogI2RlZmluZSBUWVBFX1NDVFBfUFJJTUlUSVZFX1NFTkQgIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9jbG9zZWQsIC5uYW1lID0gInNjdHBfc2ZfZXJyb3JfY2xvc2VkIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19wcm1fc2VuZCwgLm5hbWUgPSAic2N0cF9zZl9kb19wcm1fc2VuZCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19wcm1fc2VuZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX3BybV9zZW5kLCAubmFtZSA9ICJzY3RwX3NmX2RvX3BybV9zZW5kIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX3BybV9zZW5kKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX3BybV9zZW5kLCAubmFtZSA9ICJzY3RwX3NmX2RvX3BybV9zZW5kIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX3BybV9zZW5kKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZXJyb3Jfc2h1dGRvd24sIC5uYW1lID0gInNjdHBfc2ZfZXJyb3Jfc2h1dGRvd24ifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3Jfc2h1dGRvd24pLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9zaHV0ZG93biwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9zaHV0ZG93biwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9zaHV0ZG93biwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9zaHV0ZG93biksIFwKIH0gLyogVFlQRV9TQ1RQX1BSSU1JVElWRV9TRU5EICovCiAKICNkZWZpbmUgVFlQRV9TQ1RQX1BSSU1JVElWRV9SRVFVRVNUSEVBUlRCRUFUICB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZXJyb3JfY2xvc2VkLCAubmFtZSA9ICJzY3RwX3NmX2Vycm9yX2Nsb3NlZCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9jbG9zZWQpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQsCQkgICAgICBcCi0JIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQifSwgICAgICAgICAgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQpLCAgICAgICAgICBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdCwJCSAgICAgIFwKLQkgLm5hbWUgPSAic2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdCJ9LCAgICAgICAgICBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdCksICAgICAgICAgIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdCwJCSAgICAgIFwKLQkgLm5hbWUgPSAic2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdCJ9LCAgICAgICAgICBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19wcm1fcmVxdWVzdGhlYXJ0YmVhdCksICAgICAgICAgIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0LAkJICAgICAgXAotCSAubmFtZSA9ICJzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0In0sICAgICAgICAgIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0KSwgICAgICAgICAgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQsCQkgICAgICBcCi0JIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQifSwgICAgICAgICAgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQpLCAgICAgICAgICBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQsCQkgICAgICBcCi0JIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQifSwgICAgICAgICAgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQpLCAgICAgICAgICBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQsCQkgICAgICBcCi0JIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQifSwgICAgICAgICAgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQpLCAgICAgICAgICBcCiB9IC8qIFRZUEVfU0NUUF9QUklNSVRJVkVfUkVRVUVTVEhFQVJUQkVBVCAqLwogCiAjZGVmaW5lIFRZUEVfU0NUUF9QUklNSVRJVkVfQVNDT05GIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9jbG9zZWQsIC5uYW1lID0gInNjdHBfc2ZfZXJyb3JfY2xvc2VkIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9jbG9zZWQsIC5uYW1lID0gInNjdHBfc2ZfZXJyb3JfY2xvc2VkIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2Vycm9yX2Nsb3NlZCksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2Vycm9yX2Nsb3NlZCwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9jbG9zZWQifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3JfY2xvc2VkKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvX3BybV9hc2NvbmYsIC5uYW1lID0gInNjdHBfc2ZfZG9fcHJtX2FzY29uZiJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb19wcm1fYXNjb25mKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZXJyb3Jfc2h1dGRvd24sIC5uYW1lID0gInNjdHBfc2ZfZXJyb3Jfc2h1dGRvd24ifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZXJyb3Jfc2h1dGRvd24pLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9zaHV0ZG93biwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9zaHV0ZG93biwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9zaHV0ZG93biksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9lcnJvcl9zaHV0ZG93biwgLm5hbWUgPSAic2N0cF9zZl9lcnJvcl9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9lcnJvcl9zaHV0ZG93biksIFwKIH0gLyogVFlQRV9TQ1RQX1BSSU1JVElWRV9SRVFVRVNUSEVBUlRCRUFUICovCiAKIC8qIFRoZSBwcmltYXJ5IGluZGV4IGZvciB0aGlzIHRhYmxlIGlzIHRoZSBwcmltaXRpdmUgdHlwZS4KQEAgLTcwNiw0NyArNjg2LDQ0IEBACiAKICNkZWZpbmUgVFlQRV9TQ1RQX09USEVSX05PX1BFTkRJTkdfVFNOICB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfaWdub3JlX290aGVyLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9vdGhlciJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfaWdub3JlX290aGVyLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9vdGhlciJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfb3RoZXIsIC5uYW1lID0gInNjdHBfc2ZfaWdub3JlX290aGVyIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9vdGhlciksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfb3RoZXIsIC5uYW1lID0gInNjdHBfc2ZfaWdub3JlX290aGVyIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9vdGhlciksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzlfMl9zdGFydF9zaHV0ZG93biwgXAotCSAubmFtZSA9ICJzY3RwX2RvXzlfMl9zdGFydF9zaHV0ZG93biJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzJfc3RhcnRfc2h1dGRvd24pLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfb3RoZXIsIC5uYW1lID0gInNjdHBfc2ZfaWdub3JlX290aGVyIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9vdGhlciksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb185XzJfc2h1dGRvd25fYWNrLCBcCi0JIC5uYW1lID0gInNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb185XzJfc2h1dGRvd25fYWNrKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2lnbm9yZV9vdGhlciwgLm5hbWUgPSAic2N0cF9zZl9pZ25vcmVfb3RoZXIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9PVEhFUl9JQ01QX1BST1RPX1VOUkVBQ0ggIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfb3RoZXIsIC5uYW1lID0gInNjdHBfc2ZfaWdub3JlX290aGVyIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9vdGhlciksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl9jb29raWVfd2FpdF9pY21wX2Fib3J0LCBcCi0JIC5uYW1lID0gInNjdHBfc2ZfY29va2llX3dhaXRfaWNtcF9hYm9ydCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9jb29raWVfd2FpdF9pY21wX2Fib3J0KSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfaWdub3JlX290aGVyLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9vdGhlciJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfaWdub3JlX290aGVyLCAubmFtZSA9ICJzY3RwX3NmX2lnbm9yZV9vdGhlciJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9pZ25vcmVfb3RoZXIpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl9pZ25vcmVfb3RoZXIsIC5uYW1lID0gInNjdHBfc2ZfaWdub3JlX290aGVyIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2lnbm9yZV9vdGhlciksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2lnbm9yZV9vdGhlciwgLm5hbWUgPSAic2N0cF9zZl9pZ25vcmVfb3RoZXIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2lnbm9yZV9vdGhlciwgLm5hbWUgPSAic2N0cF9zZl9pZ25vcmVfb3RoZXIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2lnbm9yZV9vdGhlciwgLm5hbWUgPSAic2N0cF9zZl9pZ25vcmVfb3RoZXIifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfaWdub3JlX290aGVyKSwgXAogfQogCiBzdGF0aWMgY29uc3Qgc2N0cF9zbV90YWJsZV9lbnRyeV90IG90aGVyX2V2ZW50X3RhYmxlW1NDVFBfTlVNX09USEVSX1RZUEVTXVtTQ1RQX1NUQVRFX05VTV9TVEFURVNdID0gewpAQCAtNzU2LDIxNSArNzMzLDIxMiBAQAogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX05PTkUgeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX1QxX0NPT0tJRSB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90MV9jb29raWVfdGltZXJfZXhwaXJlLCBcCi0JIC5uYW1lID0gInNjdHBfc2ZfdDFfY29va2llX3RpbWVyX2V4cGlyZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90MV9jb29raWVfdGltZXJfZXhwaXJlKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9UMV9JTklUIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl90MV9pbml0X3RpbWVyX2V4cGlyZSwgXAotCSAubmFtZSA9ICJzY3RwX3NmX3QxX2luaXRfdGltZXJfZXhwaXJlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3QxX2luaXRfdGltZXJfZXhwaXJlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX1QyX1NIVVRET1dOIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2J1ZywgLm5hbWUgPSAic2N0cF9zZl9idWcifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfYnVnKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl90Ml90aW1lcl9leHBpcmUsIC5uYW1lID0gInNjdHBfc2ZfdDJfdGltZXJfZXhwaXJlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3QyX3RpbWVyX2V4cGlyZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UICovIFwKLQl7LmZuID0gc2N0cF9zZl90Ml90aW1lcl9leHBpcmUsIC5uYW1lID0gInNjdHBfc2ZfdDJfdGltZXJfZXhwaXJlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3QyX3RpbWVyX2V4cGlyZSksIFwKIH0KIAogI2RlZmluZSBUWVBFX1NDVFBfRVZFTlRfVElNRU9VVF9UM19SVFggeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNl8zXzNfcnR4LCAubmFtZSA9ICJzY3RwX3NmX2RvXzZfM18zX3J0eCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb182XzNfM19ydHgpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNl8zXzNfcnR4LCAubmFtZSA9ICJzY3RwX3NmX2RvXzZfM18zX3J0eCJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb182XzNfM19ydHgpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb182XzNfM19ydHgsIC5uYW1lID0gInNjdHBfc2ZfZG9fNl8zXzNfcnR4In0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzZfM18zX3J0eCksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzZfM18zX3J0eCwgLm5hbWUgPSAic2N0cF9zZl9kb182XzNfM19ydHgifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNl8zXzNfcnR4KSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX1Q0X1JUTyB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl90NF90aW1lcl9leHBpcmUsIC5uYW1lID0gInNjdHBfc2ZfdDRfdGltZXJfZXhwaXJlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3Q0X3RpbWVyX2V4cGlyZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfVDVfU0hVVERPV05fR1VBUkQgeyBcCiAJLyogU0NUUF9TVEFURV9FTVBUWSAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfYnVnLCAubmFtZSA9ICJzY3RwX3NmX2J1ZyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9idWcpLCBcCiAJLyogU0NUUF9TVEFURV9DTE9TRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9FU1RBQkxJU0hFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl90NV90aW1lcl9leHBpcmUsIC5uYW1lID0gInNjdHBfc2ZfdDVfdGltZXJfZXhwaXJlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3Q1X3RpbWVyX2V4cGlyZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3Q1X3RpbWVyX2V4cGlyZSwgLm5hbWUgPSAic2N0cF9zZl90NV90aW1lcl9leHBpcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdDVfdGltZXJfZXhwaXJlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogfQogCiAjZGVmaW5lIFRZUEVfU0NUUF9FVkVOVF9USU1FT1VUX0hFQVJUQkVBVCB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9zZW5kYmVhdF84XzMsIC5uYW1lID0gInNjdHBfc2Zfc2VuZGJlYXRfOF8zIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3NlbmRiZWF0XzhfMyksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3NlbmRiZWF0XzhfMywgLm5hbWUgPSAic2N0cF9zZl9zZW5kYmVhdF84XzMifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2Zfc2VuZGJlYXRfOF8zKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2Zfc2VuZGJlYXRfOF8zLCAubmFtZSA9ICJzY3RwX3NmX3NlbmRiZWF0XzhfMyJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9zZW5kYmVhdF84XzMpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfU0FDSyB7IFwKIAkvKiBTQ1RQX1NUQVRFX0VNUFRZICovIFwKLQl7LmZuID0gc2N0cF9zZl9idWcsIC5uYW1lID0gInNjdHBfc2ZfYnVnIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2J1ZyksIFwKIAkvKiBTQ1RQX1NUQVRFX0NMT1NFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfV0FJVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEICovIFwKLQl7LmZuID0gc2N0cF9zZl9kb182XzJfc2FjaywgLm5hbWUgPSAic2N0cF9zZl9kb182XzJfc2FjayJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl9kb182XzJfc2FjayksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2RvXzZfMl9zYWNrLCAubmFtZSA9ICJzY3RwX3NmX2RvXzZfMl9zYWNrIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2RvXzZfMl9zYWNrKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfZG9fNl8yX3NhY2ssIC5uYW1lID0gInNjdHBfc2ZfZG9fNl8yX3NhY2sifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfZG9fNl8yX3NhY2spLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCAqLyBcCi0Jey5mbiA9IHNjdHBfc2ZfdGltZXJfaWdub3JlLCAubmFtZSA9ICJzY3RwX3NmX3RpbWVyX2lnbm9yZSJ9LCBcCisJVFlQRV9TQ1RQX0ZVTkMoc2N0cF9zZl90aW1lcl9pZ25vcmUpLCBcCiB9CiAKICNkZWZpbmUgVFlQRV9TQ1RQX0VWRU5UX1RJTUVPVVRfQVVUT0NMT1NFIHsgXAogCS8qIFNDVFBfU1RBVEVfRU1QVFkgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfQ0xPU0VEICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX2F1dG9jbG9zZV90aW1lcl9leHBpcmUsIFwKLQkgLm5hbWUgPSAic2N0cF9zZl9hdXRvY2xvc2VfdGltZXJfZXhwaXJlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX2F1dG9jbG9zZV90aW1lcl9leHBpcmUpLCBcCiAJLyogU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HICovIFwKLQl7LmZuID0gc2N0cF9zZl90aW1lcl9pZ25vcmUsIC5uYW1lID0gInNjdHBfc2ZfdGltZXJfaWdub3JlIn0sIFwKKwlUWVBFX1NDVFBfRlVOQyhzY3RwX3NmX3RpbWVyX2lnbm9yZSksIFwKIAkvKiBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogCS8qIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgKi8gXAotCXsuZm4gPSBzY3RwX3NmX3RpbWVyX2lnbm9yZSwgLm5hbWUgPSAic2N0cF9zZl90aW1lcl9pZ25vcmUifSwgXAorCVRZUEVfU0NUUF9GVU5DKHNjdHBfc2ZfdGltZXJfaWdub3JlKSwgXAogfQogCiBzdGF0aWMgY29uc3Qgc2N0cF9zbV90YWJsZV9lbnRyeV90IHRpbWVvdXRfZXZlbnRfdGFibGVbU0NUUF9OVU1fVElNRU9VVF9UWVBFU11bU0NUUF9TVEFURV9OVU1fU1RBVEVTXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggOTM1YmM5MS4uMDJiMjcxNCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTIyOSwxMSArMjI5LDkgQEAKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKIAl1bmlvbiBzY3RwX2FkZHIgKmxhZGRyID0gKHVuaW9uIHNjdHBfYWRkciAqKWFkZHI7CiAKLQlsYWRkci0+djQuc2luX3BvcnQgPSBudG9ocyhsYWRkci0+djQuc2luX3BvcnQpOwogCWFkZHJfYXNvYyA9IHNjdHBfZW5kcG9pbnRfbG9va3VwX2Fzc29jKHNjdHBfc2soc2spLT5lcCwKLQkJCQkJICAgICAgICh1bmlvbiBzY3RwX2FkZHIgKilhZGRyLAorCQkJCQkgICAgICAgbGFkZHIsCiAJCQkJCSAgICAgICAmdHJhbnNwb3J0KTsKLQlsYWRkci0+djQuc2luX3BvcnQgPSBodG9ucyhsYWRkci0+djQuc2luX3BvcnQpOwogCiAJaWYgKCFhZGRyX2Fzb2MpCiAJCXJldHVybiBOVUxMOwpAQCAtMzY4LDkgKzM2Niw3IEBACiAJc2N0cF93cml0ZV9sb2NrKCZlcC0+YmFzZS5hZGRyX2xvY2spOwogCiAJLyogVXNlIEdGUF9BVE9NSUMgc2luY2UgQkhzIGFyZSBkaXNhYmxlZC4gICovCi0JYWRkci0+djQuc2luX3BvcnQgPSBudG9ocyhhZGRyLT52NC5zaW5fcG9ydCk7CiAJcmV0ID0gc2N0cF9hZGRfYmluZF9hZGRyKGJwLCBhZGRyLCAxLCBHRlBfQVRPTUlDKTsKLQlhZGRyLT52NC5zaW5fcG9ydCA9IGh0b25zKGFkZHItPnY0LnNpbl9wb3J0KTsKIAlzY3RwX3dyaXRlX3VubG9jaygmZXAtPmJhc2UuYWRkcl9sb2NrKTsKIAlzY3RwX2xvY2FsX2JoX2VuYWJsZSgpOwogCkBAIC01NzIsNyArNTY4LDYgQEAKIAkJCWFkZHIgPSAodW5pb24gc2N0cF9hZGRyICopYWRkcl9idWY7CiAJCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGFkZHItPnY0LnNpbl9mYW1pbHkpOwogCQkJbWVtY3B5KCZzYXZlYWRkciwgYWRkciwgYWYtPnNvY2thZGRyX2xlbik7Ci0JCQlzYXZlYWRkci52NC5zaW5fcG9ydCA9IG50b2hzKHNhdmVhZGRyLnY0LnNpbl9wb3J0KTsKIAkJCXJldHZhbCA9IHNjdHBfYWRkX2JpbmRfYWRkcihicCwgJnNhdmVhZGRyLCAwLAogCQkJCQkJICAgIEdGUF9BVE9NSUMpOwogCQkJYWRkcl9idWYgKz0gYWYtPnNvY2thZGRyX2xlbjsKQEAgLTYwNyw5ICs2MDIsOCBAQAogCWludCBjbnQ7CiAJc3RydWN0IHNjdHBfYmluZF9hZGRyICpicCA9ICZlcC0+YmFzZS5iaW5kX2FkZHI7CiAJaW50IHJldHZhbCA9IDA7Ci0JdW5pb24gc2N0cF9hZGRyIHNhdmVhZGRyOwogCXZvaWQgKmFkZHJfYnVmOwotCXN0cnVjdCBzb2NrYWRkciAqc2FfYWRkcjsKKwl1bmlvbiBzY3RwX2FkZHIgKnNhX2FkZHI7CiAJc3RydWN0IHNjdHBfYWYgKmFmOwogCiAJU0NUUF9ERUJVR19QUklOVEsoInNjdHBfYmluZHhfcmVtIChzazogJXAsIGFkZHJzOiAlcCwgYWRkcmNudDogJWQpXG4iLApAQCAtNjI3LDE5ICs2MjEsMTMgQEAKIAkJCWdvdG8gZXJyX2JpbmR4X3JlbTsKIAkJfQogCi0JCS8qIFRoZSBsaXN0IG1heSBjb250YWluIGVpdGhlciBJUHY0IG9yIElQdjYgYWRkcmVzczsKLQkJICogZGV0ZXJtaW5lIHRoZSBhZGRyZXNzIGxlbmd0aCB0byBjb3B5IHRoZSBhZGRyZXNzIHRvCi0JCSAqIHNhdmVhZGRyLiAKLQkJICovCi0JCXNhX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopYWRkcl9idWY7Ci0JCWFmID0gc2N0cF9nZXRfYWZfc3BlY2lmaWMoc2FfYWRkci0+c2FfZmFtaWx5KTsKKwkJc2FfYWRkciA9ICh1bmlvbiBzY3RwX2FkZHIgKilhZGRyX2J1ZjsKKwkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhzYV9hZGRyLT5zYS5zYV9mYW1pbHkpOwogCQlpZiAoIWFmKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQkJZ290byBlcnJfYmluZHhfcmVtOwogCQl9Ci0JCW1lbWNweSgmc2F2ZWFkZHIsIHNhX2FkZHIsIGFmLT5zb2NrYWRkcl9sZW4pOyAKLQkJc2F2ZWFkZHIudjQuc2luX3BvcnQgPSBudG9ocyhzYXZlYWRkci52NC5zaW5fcG9ydCk7Ci0JCWlmIChzYXZlYWRkci52NC5zaW5fcG9ydCAhPSBicC0+cG9ydCkgeworCQlpZiAoc2FfYWRkci0+djQuc2luX3BvcnQgIT0gaHRvbnMoYnAtPnBvcnQpKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQkJZ290byBlcnJfYmluZHhfcmVtOwogCQl9CkBAIC02NTQsNyArNjQyLDcgQEAKIAkJc2N0cF9sb2NhbF9iaF9kaXNhYmxlKCk7CiAJCXNjdHBfd3JpdGVfbG9jaygmZXAtPmJhc2UuYWRkcl9sb2NrKTsKIAotCQlyZXR2YWwgPSBzY3RwX2RlbF9iaW5kX2FkZHIoYnAsICZzYXZlYWRkcik7CisJCXJldHZhbCA9IHNjdHBfZGVsX2JpbmRfYWRkcihicCwgc2FfYWRkcik7CiAKIAkJc2N0cF93cml0ZV91bmxvY2soJmVwLT5iYXNlLmFkZHJfbG9jayk7CiAJCXNjdHBfbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC02OTMsNyArNjgxLDYgQEAKIAlzdHJ1Y3Qgc2N0cF9iaW5kX2FkZHIJKmJwOwogCXN0cnVjdCBzY3RwX2NodW5rCSpjaHVuazsKIAl1bmlvbiBzY3RwX2FkZHIJCSpsYWRkcjsKLQl1bmlvbiBzY3RwX2FkZHIJCXNhdmVhZGRyOwogCXZvaWQJCQkqYWRkcl9idWY7CiAJc3RydWN0IHNjdHBfYWYJCSphZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSpwb3MsICpwb3MxOwpAQCAtNzczLDEzICs3NjAsMTEgQEAKIAkJZm9yIChpID0gMDsgaSA8IGFkZHJjbnQ7IGkrKykgewogCQkJbGFkZHIgPSAodW5pb24gc2N0cF9hZGRyICopYWRkcl9idWY7CiAJCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKGxhZGRyLT52NC5zaW5fZmFtaWx5KTsKLQkJCW1lbWNweSgmc2F2ZWFkZHIsIGxhZGRyLCBhZi0+c29ja2FkZHJfbGVuKTsKLQkJCXNhdmVhZGRyLnY0LnNpbl9wb3J0ID0gbnRvaHMoc2F2ZWFkZHIudjQuc2luX3BvcnQpOwogCQkJbGlzdF9mb3JfZWFjaChwb3MxLCAmYnAtPmFkZHJlc3NfbGlzdCkgewogCQkJCXNhZGRyID0gbGlzdF9lbnRyeShwb3MxLAogCQkJCQkJICAgc3RydWN0IHNjdHBfc29ja2FkZHJfZW50cnksCiAJCQkJCQkgICBsaXN0KTsKLQkJCQlpZiAoc2N0cF9jbXBfYWRkcl9leGFjdCgmc2FkZHItPmEsICZzYXZlYWRkcikpCisJCQkJaWYgKHNjdHBfY21wX2FkZHJfZXhhY3QoJnNhZGRyLT5hLCBsYWRkcikpCiAJCQkJCXNhZGRyLT51c2VfYXNfc3JjID0gMDsKIAkJCX0KIAkJCWFkZHJfYnVmICs9IGFmLT5zb2NrYWRkcl9sZW47CkBAIC05NzksNyArOTY0LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgYWRkcmNudCA9IDA7CiAJaW50IHdhbGtfc2l6ZSA9IDA7Ci0Jc3RydWN0IHNvY2thZGRyICpzYV9hZGRyOworCXVuaW9uIHNjdHBfYWRkciAqc2FfYWRkcjsKIAl2b2lkICphZGRyX2J1ZjsKIAogCXNwID0gc2N0cF9zayhzayk7CkBAIC05OTksOCArOTg0LDggQEAKIAkvKiBXYWxrIHRocm91Z2ggdGhlIGFkZHJzIGJ1ZmZlciBhbmQgY291bnQgdGhlIG51bWJlciBvZiBhZGRyZXNzZXMuICovCiAJYWRkcl9idWYgPSBrYWRkcnM7CiAJd2hpbGUgKHdhbGtfc2l6ZSA8IGFkZHJzX3NpemUpIHsKLQkJc2FfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyX2J1ZjsKLQkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhzYV9hZGRyLT5zYV9mYW1pbHkpOworCQlzYV9hZGRyID0gKHVuaW9uIHNjdHBfYWRkciAqKWFkZHJfYnVmOworCQlhZiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHNhX2FkZHItPnNhLnNhX2ZhbWlseSk7CiAKIAkJLyogSWYgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIG5vdCBzdXBwb3J0ZWQgb3IgaWYgdGhpcyBhZGRyZXNzCiAJCSAqIGNhdXNlcyB0aGUgYWRkcmVzcyBidWZmZXIgdG8gb3ZlcmZsb3cgcmV0dXJuIEVJTlZBTC4KQEAgLTEwMTAsMTggKzk5NSwxNiBAQAogCQkJZ290byBvdXRfZnJlZTsKIAkJfQogCi0JCWVyciA9IHNjdHBfdmVyaWZ5X2FkZHIoc2ssICh1bmlvbiBzY3RwX2FkZHIgKilzYV9hZGRyLAotCQkJCSAgICAgICBhZi0+c29ja2FkZHJfbGVuKTsKKwkJZXJyID0gc2N0cF92ZXJpZnlfYWRkcihzaywgc2FfYWRkciwgYWYtPnNvY2thZGRyX2xlbik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9mcmVlOwogCiAJCW1lbWNweSgmdG8sIHNhX2FkZHIsIGFmLT5zb2NrYWRkcl9sZW4pOwotCQl0by52NC5zaW5fcG9ydCA9IG50b2hzKHRvLnY0LnNpbl9wb3J0KTsKIAogCQkvKiBDaGVjayBpZiB0aGVyZSBhbHJlYWR5IGlzIGEgbWF0Y2hpbmcgYXNzb2NpYXRpb24gb24gdGhlCiAJCSAqIGVuZHBvaW50IChvdGhlciB0aGFuIHRoZSBvbmUgY3JlYXRlZCBoZXJlKS4KIAkJICovCi0JCWFzb2MyID0gc2N0cF9lbmRwb2ludF9sb29rdXBfYXNzb2MoZXAsICZ0bywgJnRyYW5zcG9ydCk7CisJCWFzb2MyID0gc2N0cF9lbmRwb2ludF9sb29rdXBfYXNzb2MoZXAsIHNhX2FkZHIsICZ0cmFuc3BvcnQpOwogCQlpZiAoYXNvYzIgJiYgYXNvYzIgIT0gYXNvYykgewogCQkJaWYgKGFzb2MyLT5zdGF0ZSA+PSBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKQogCQkJCWVyciA9IC1FSVNDT05OOwpAQCAtMTAzNCw3ICsxMDE3LDcgQEAKIAkJICogbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gcGVlbGVkLW9mZiBhc3NvY2lhdGlvbiBtYXRjaGluZwogCQkgKiB0aGUgcGVlciBhZGRyZXNzIGV2ZW4gb24gYW5vdGhlciBzb2NrZXQuCiAJCSAqLwotCQlpZiAoc2N0cF9lbmRwb2ludF9pc19wZWVsZWRfb2ZmKGVwLCAmdG8pKSB7CisJCWlmIChzY3RwX2VuZHBvaW50X2lzX3BlZWxlZF9vZmYoZXAsIHNhX2FkZHIpKSB7CiAJCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KQEAgLTEwNjUsNyArMTA0OCw3IEBACiAJCQkJfQogCQkJfQogCi0JCQlzY29wZSA9IHNjdHBfc2NvcGUoJnRvKTsKKwkJCXNjb3BlID0gc2N0cF9zY29wZShzYV9hZGRyKTsKIAkJCWFzb2MgPSBzY3RwX2Fzc29jaWF0aW9uX25ldyhlcCwgc2ssIHNjb3BlLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghYXNvYykgewogCQkJCWVyciA9IC1FTk9NRU07CkBAIC0xMDc0LDcgKzEwNTcsNyBAQAogCQl9CiAKIAkJLyogUHJpbWUgdGhlIHBlZXIncyB0cmFuc3BvcnQgc3RydWN0dXJlcy4gICovCi0JCXRyYW5zcG9ydCA9IHNjdHBfYXNzb2NfYWRkX3BlZXIoYXNvYywgJnRvLCBHRlBfS0VSTkVMLAorCQl0cmFuc3BvcnQgPSBzY3RwX2Fzc29jX2FkZF9wZWVyKGFzb2MsIHNhX2FkZHIsIEdGUF9LRVJORUwsCiAJCQkJCQlTQ1RQX1VOS05PV04pOwogCQlpZiAoIXRyYW5zcG9ydCkgewogCQkJZXJyID0gLUVOT01FTTsKQEAgLTE0MjcsMTEgKzE0MTAsNiBAQAogCQlpZiAobXNnX25hbWVsZW4gPiBzaXplb2YodG8pKQogCQkJbXNnX25hbWVsZW4gPSBzaXplb2YodG8pOwogCQltZW1jcHkoJnRvLCBtc2ctPm1zZ19uYW1lLCBtc2dfbmFtZWxlbik7Ci0JCVNDVFBfREVCVUdfUFJJTlRLKCJKdXN0IG1lbWNweSdkLiBtc2dfbmFtZSBpcyAiCi0JCQkJICAiMHgleDoldS5cbiIsCi0JCQkJICB0by52NC5zaW5fYWRkci5zX2FkZHIsIHRvLnY0LnNpbl9wb3J0KTsKLQotCQl0by52NC5zaW5fcG9ydCA9IG50b2hzKHRvLnY0LnNpbl9wb3J0KTsKIAkJbXNnX25hbWUgPSBtc2ctPm1zZ19uYW1lOwogCX0KIApAQCAtMzIxNyw4ICszMTk1LDggQEAKIAlzdGF0dXMuc3N0YXRfb3V0c3RybXMgPSBhc29jLT5jLnNpbml0X251bV9vc3RyZWFtczsKIAlzdGF0dXMuc3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludCA9IGFzb2MtPmZyYWdfcG9pbnQ7CiAJc3RhdHVzLnNzdGF0X3ByaW1hcnkuc3BpbmZvX2Fzc29jX2lkID0gc2N0cF9hc3NvYzJpZCh0cmFuc3BvcnQtPmFzb2MpOwotCW1lbWNweSgmc3RhdHVzLnNzdGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJlc3MsCi0JICAgICAgICYodHJhbnNwb3J0LT5pcGFkZHIpLCBzaXplb2YodW5pb24gc2N0cF9hZGRyKSk7CisJbWVtY3B5KCZzdGF0dXMuc3N0YXRfcHJpbWFyeS5zcGluZm9fYWRkcmVzcywgJnRyYW5zcG9ydC0+aXBhZGRyLAorCQkJdHJhbnNwb3J0LT5hZl9zcGVjaWZpYy0+c29ja2FkZHJfbGVuKTsKIAkvKiBNYXAgaXB2NCBhZGRyZXNzIGludG8gdjQtbWFwcGVkLW9uLXY2IGFkZHJlc3MuICAqLwogCXNjdHBfZ2V0X3BmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5hZGRyX3Y0bWFwKHNjdHBfc2soc2spLAogCQkodW5pb24gc2N0cF9hZGRyICopJnN0YXR1cy5zc3RhdF9wcmltYXJ5LnNwaW5mb19hZGRyZXNzKTsKQEAgLTM3NzAsNyArMzc0OCw2IEBACiAJCW1lbWNweSgmdGVtcCwgJmZyb20tPmlwYWRkciwgc2l6ZW9mKHRlbXApKTsKIAkJc2N0cF9nZXRfcGZfc3BlY2lmaWMoc2stPnNrX2ZhbWlseSktPmFkZHJfdjRtYXAoc3AsICZ0ZW1wKTsKIAkJYWRkcmxlbiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5zb2NrYWRkcl9sZW47Ci0JCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyh0ZW1wLnY0LnNpbl9wb3J0KTsKIAkJaWYgKGNvcHlfdG9fdXNlcih0bywgJnRlbXAsIGFkZHJsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXRvICs9IGFkZHJsZW4gOwpAQCAtMzgyMSw3ICszNzk4LDYgQEAKIAkJYWRkcmxlbiA9IHNjdHBfZ2V0X2FmX3NwZWNpZmljKHNrLT5za19mYW1pbHkpLT5zb2NrYWRkcl9sZW47CiAJCWlmKHNwYWNlX2xlZnQgPCBhZGRybGVuKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyh0ZW1wLnY0LnNpbl9wb3J0KTsKIAkJaWYgKGNvcHlfdG9fdXNlcih0bywgJnRlbXAsIGFkZHJsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXRvICs9IGFkZHJsZW47CkBAIC0zODg5LDcgKzM4NjUsNyBAQAogCQkJCQkJICBzdHJ1Y3Qgc2N0cF9zb2NrYWRkcl9lbnRyeSwKIAkJCQkJCSAgbGlzdCk7CiAJCQkJaWYgKChQRl9JTkVUID09IHNrLT5za19mYW1pbHkpICYmIAotCQkJCSAgICAoQUZfSU5FVDYgPT0gYWRkci0+YS5zYS5zYV9mYW1pbHkpKQkKKwkJCQkgICAgKEFGX0lORVQ2ID09IGFkZHItPmEuc2Euc2FfZmFtaWx5KSkKIAkJCQkJY29udGludWU7CiAJCQkJY250Kys7CiAJCQl9CkBAIC0zOTMzLDcgKzM5MDksNiBAQAogCQlzY3RwX2dldF9wZl9zcGVjaWZpYyhzay0+c2tfZmFtaWx5KS0+YWRkcl92NG1hcChzY3RwX3NrKHNrKSwKIAkJCQkJCQkJJnRlbXApOwogCQlhZGRybGVuID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModGVtcC5zYS5zYV9mYW1pbHkpLT5zb2NrYWRkcl9sZW47Ci0JCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKIAkJaWYgKGNvcHlfdG9fdXNlcih0bywgJnRlbXAsIGFkZHJsZW4pKSB7CiAJCQlzY3RwX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjdHBfbG9jYWxfYWRkcl9sb2NrLAogCQkJCQkJICAgIGZsYWdzKTsKQEAgLTM5NzAsNyArMzk0NSw2IEBACiAJCWFkZHJsZW4gPSBzY3RwX2dldF9hZl9zcGVjaWZpYyh0ZW1wLnNhLnNhX2ZhbWlseSktPnNvY2thZGRyX2xlbjsKIAkJaWYoc3BhY2VfbGVmdDxhZGRybGVuKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKIAkJaWYgKGNvcHlfdG9fdXNlcigqdG8sICZ0ZW1wLCBhZGRybGVuKSkgewogCQkJc2N0cF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY3RwX2xvY2FsX2FkZHJfbG9jaywKIAkJCQkJCSAgICBmbGFncyk7CkBAIC00MDU1LDcgKzQwMjksNiBAQAogCQltZW1jcHkoJnRlbXAsICZhZGRyLT5hLCBzaXplb2YodGVtcCkpOwogCQlzY3RwX2dldF9wZl9zcGVjaWZpYyhzay0+c2tfZmFtaWx5KS0+YWRkcl92NG1hcChzcCwgJnRlbXApOwogCQlhZGRybGVuID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModGVtcC5zYS5zYV9mYW1pbHkpLT5zb2NrYWRkcl9sZW47Ci0JCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyh0ZW1wLnY0LnNpbl9wb3J0KTsKIAkJaWYgKGNvcHlfdG9fdXNlcih0bywgJnRlbXAsIGFkZHJsZW4pKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byB1bmxvY2s7CkBAIC00MTQ2LDcgKzQxMTksNiBAQAogCQlhZGRybGVuID0gc2N0cF9nZXRfYWZfc3BlY2lmaWModGVtcC5zYS5zYV9mYW1pbHkpLT5zb2NrYWRkcl9sZW47CiAJCWlmKHNwYWNlX2xlZnQgPCBhZGRybGVuKQogCQkJcmV0dXJuIC1FTk9NRU07IC8qZml4bWU6IHJpZ2h0IGVycm9yPyovCi0JCXRlbXAudjQuc2luX3BvcnQgPSBodG9ucyh0ZW1wLnY0LnNpbl9wb3J0KTsKIAkJaWYgKGNvcHlfdG9fdXNlcih0bywgJnRlbXAsIGFkZHJsZW4pKSB7CiAJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byB1bmxvY2s7CkBAIC00MTk0LDEyICs0MTY2LDggQEAKIAlpZiAoIWFzb2MtPnBlZXIucHJpbWFyeV9wYXRoKQogCQlyZXR1cm4gLUVOT1RDT05OOwogCQotCWFzb2MtPnBlZXIucHJpbWFyeV9wYXRoLT5pcGFkZHIudjQuc2luX3BvcnQgPQotCQlodG9ucyhhc29jLT5wZWVyLnByaW1hcnlfcGF0aC0+aXBhZGRyLnY0LnNpbl9wb3J0KTsKIAltZW1jcHkoJnByaW0uc3NwX2FkZHIsICZhc29jLT5wZWVyLnByaW1hcnlfcGF0aC0+aXBhZGRyLAotCSAgICAgICBzaXplb2YodW5pb24gc2N0cF9hZGRyKSk7Ci0JYXNvYy0+cGVlci5wcmltYXJ5X3BhdGgtPmlwYWRkci52NC5zaW5fcG9ydCA9Ci0JCW50b2hzKGFzb2MtPnBlZXIucHJpbWFyeV9wYXRoLT5pcGFkZHIudjQuc2luX3BvcnQpOworCQlhc29jLT5wZWVyLnByaW1hcnlfcGF0aC0+YWZfc3BlY2lmaWMtPnNvY2thZGRyX2xlbik7CiAKIAlzY3RwX2dldF9wZl9zcGVjaWZpYyhzay0+c2tfZmFtaWx5KS0+YWRkcl92NG1hcChzcCwKIAkJCSh1bmlvbiBzY3RwX2FkZHIgKikmcHJpbS5zc3BfYWRkcik7CkBAIC00NjQ1LDkgKzQ2MTMsNyBAQAogCXVuc2lnbmVkIHNob3J0IHNudW07CiAJaW50IHJldDsKIAotCS8qIE5PVEU6ICBSZW1lbWJlciB0byBwdXQgdGhpcyBiYWNrIHRvIG5ldCBvcmRlci4gKi8KLQlhZGRyLT52NC5zaW5fcG9ydCA9IG50b2hzKGFkZHItPnY0LnNpbl9wb3J0KTsKLQlzbnVtID0gYWRkci0+djQuc2luX3BvcnQ7CisJc251bSA9IG50b2hzKGFkZHItPnY0LnNpbl9wb3J0KTsKIAogCVNDVFBfREVCVUdfUFJJTlRLKCJzY3RwX2dldF9wb3J0KCkgYmVnaW5zLCBzbnVtPSVkXG4iLCBzbnVtKTsKIAlzY3RwX2xvY2FsX2JoX2Rpc2FibGUoKTsKQEAgLTQ3ODQsNyArNDc1MCw2IEBACiAKIGZhaWw6CiAJc2N0cF9sb2NhbF9iaF9lbmFibGUoKTsKLQlhZGRyLT52NC5zaW5fcG9ydCA9IGh0b25zKGFkZHItPnY0LnNpbl9wb3J0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01MDgzLDcgKzUwNDgsNyBAQAogewogCXVuaW9uIHNjdHBfYWRkciBhdXRvYWRkcjsKIAlzdHJ1Y3Qgc2N0cF9hZiAqYWY7Ci0JdW5zaWduZWQgc2hvcnQgcG9ydDsKKwlfX2JlMTYgcG9ydDsKIAogCS8qIEluaXRpYWxpemUgYSBsb2NhbCBzb2NrYWRkciBzdHJ1Y3R1cmUgdG8gSU5BRERSX0FOWS4gKi8KIAlhZiA9IHNjdHBfc2soc2spLT5wZi0+YWY7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC90c25tYXAuYyBiL25ldC9zY3RwL3Rzbm1hcC5jCmluZGV4IGFjNGZhZTEuLjQyZDk0OTggMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Rzbm1hcC5jCisrKyBiL25ldC9zY3RwL3Rzbm1hcC5jCkBAIC00MDEsMTMgKzQwMSwxNCBAQAogCiAJLyogUmVmcmVzaCB0aGUgZ2FwIGFjayBpbmZvcm1hdGlvbi4gKi8KIAlpZiAoc2N0cF90c25tYXBfaGFzX2dhcChtYXApKSB7CisJCV9fdTE2IHN0YXJ0LCBlbmQ7CiAJCXNjdHBfdHNubWFwX2l0ZXJfaW5pdChtYXAsICZpdGVyKTsKIAkJd2hpbGUgKHNjdHBfdHNubWFwX25leHRfZ2FwX2FjayhtYXAsICZpdGVyLAotCQkJCQkJJm1hcC0+Z2Fic1tnYWJzXS5zdGFydCwKLQkJCQkJCSZtYXAtPmdhYnNbZ2Fic10uZW5kKSkgeworCQkJCQkJJnN0YXJ0LAorCQkJCQkJJmVuZCkpIHsKIAotCQkJbWFwLT5nYWJzW2dhYnNdLnN0YXJ0ID0gaHRvbnMobWFwLT5nYWJzW2dhYnNdLnN0YXJ0KTsKLQkJCW1hcC0+Z2Fic1tnYWJzXS5lbmQgPSBodG9ucyhtYXAtPmdhYnNbZ2Fic10uZW5kKTsKKwkJCW1hcC0+Z2Fic1tnYWJzXS5zdGFydCA9IGh0b25zKHN0YXJ0KTsKKwkJCW1hcC0+Z2Fic1tnYWJzXS5lbmQgPSBodG9ucyhlbmQpOwogCQkJZ2FicysrOwogCQkJaWYgKGdhYnMgPj0gU0NUUF9NQVhfR0FCUykKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jCmluZGV4IGEwMTUyODMuLmUyNTVhNzAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKKysrIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yICpzcmU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzY3RwX2Vycmhkcl90ICpjaDsKLQlfX3UxNiBjYXVzZTsKKwlfX2JlMTYgY2F1c2U7CiAJaW50IGVsZW47CiAKIAljaCA9IChzY3RwX2Vycmhkcl90ICopKGNodW5rLT5za2ItPmRhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDZjOWI5YjMuLmU4ZGI1NDcgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTc3LDcgKzc3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kaXZlcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KQEAgLTg1MiwxMSArODUxLDYgQEAKIAkJCQllcnIgPSB2bGFuX2lvY3RsX2hvb2soYXJncCk7CiAJCQltdXRleF91bmxvY2soJnZsYW5faW9jdGxfbXV0ZXgpOwogCQkJYnJlYWs7Ci0JCWNhc2UgU0lPQ0dJRkRJVkVSVDoKLQkJY2FzZSBTSU9DU0lGRElWRVJUOgotCQkJLyogQ29udmVydCB0aGlzIHRvIGNhbGwgdGhyb3VnaCBhIGhvb2sgKi8KLQkJCWVyciA9IGRpdmVydF9pb2N0bChjbWQsIGFyZ3ApOwotCQkJYnJlYWs7CiAJCWNhc2UgU0lPQ0FERERMQ0k6CiAJCWNhc2UgU0lPQ0RFTERMQ0k6CiAJCQllcnIgPSAtRU5PUEtHOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IGIzNmI5NDYuLmU1YTg0YTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTE5OCwxMSArMTk4LDEwIEBACiAJcSA9IChjb25zdCB2b2lkICopKChjb25zdCBjaGFyICopcCArIGxlbik7CiAJaWYgKHVubGlrZWx5KHEgPiBlbmQgfHwgcSA8IHApKQogCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKLQlkZXN0LT5kYXRhID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWRlc3QtPmRhdGEgPSBrbWVtZHVwKHAsIGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KGRlc3QtPmRhdGEgPT0gTlVMTCkpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWRlc3QtPmxlbiA9IGxlbjsKLQltZW1jcHkoZGVzdC0+ZGF0YSwgcCwgbGVuKTsKIAlyZXR1cm4gcTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9tZWNoLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwppbmRleCAzMjVlNzJlLi43NTRiOGNkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwpAQCAtNzAsMTAgKzcwLDkgQEAKIAlxID0gKGNvbnN0IHZvaWQgKikoKGNvbnN0IGNoYXIgKilwICsgbGVuKTsKIAlpZiAodW5saWtlbHkocSA+IGVuZCB8fCBxIDwgcCkpCiAJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwotCXJlcy0+ZGF0YSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlyZXMtPmRhdGEgPSBrbWVtZHVwKHAsIGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KHJlcy0+ZGF0YSA9PSBOVUxMKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JbWVtY3B5KHJlcy0+ZGF0YSwgcCwgbGVuKTsKIAlyZXMtPmxlbiA9IGxlbjsKIAlyZXR1cm4gcTsKIH0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX21lY2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX21lY2guYwppbmRleCBiZGVkZjQ1Li5kNTdmNjA4IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19zcGttM19tZWNoLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfc3BrbTNfbWVjaC5jCkBAIC03NiwxMCArNzYsOSBAQAogCXEgPSAoY29uc3Qgdm9pZCAqKSgoY29uc3QgY2hhciAqKXAgKyBsZW4pOwogCWlmICh1bmxpa2VseShxID4gZW5kIHx8IHEgPCBwKSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7Ci0JcmVzLT5kYXRhID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXJlcy0+ZGF0YSA9IGttZW1kdXAocCwgbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkocmVzLT5kYXRhID09IE5VTEwpKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQltZW1jcHkocmVzLT5kYXRhLCBwLCBsZW4pOwogCXJldHVybiBxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggMWYwZjA3OS4uNzAwMzUzYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtMTEzLDkgKzExMyw3IEBACiBzdGF0aWMgaW50IGR1cF90b19uZXRvYmooc3RydWN0IHhkcl9uZXRvYmogKmRzdCwgY2hhciAqc3JjLCBpbnQgbGVuKQogewogCWRzdC0+bGVuID0gbGVuOwotCWRzdC0+ZGF0YSA9IChsZW4gPyBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCkgOiBOVUxMKTsKLQlpZiAoZHN0LT5kYXRhKQotCQltZW1jcHkoZHN0LT5kYXRhLCBzcmMsIGxlbik7CisJZHN0LT5kYXRhID0gKGxlbiA/IGttZW1kdXAoc3JjLCBsZW4sIEdGUF9LRVJORUwpIDogTlVMTCk7CiAJaWYgKGxlbiAmJiAhZHN0LT5kYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKQEAgLTc1NiwxMCArNzU0LDkgQEAKIAlpZiAoIW5ldykKIAkJZ290byBvdXQ7CiAJa3JlZl9pbml0KCZuZXctPmgucmVmKTsKLQluZXctPmgubmFtZSA9IGttYWxsb2Moc3RybGVuKG5hbWUpICsgMSwgR0ZQX0tFUk5FTCk7CisJbmV3LT5oLm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwogCWlmICghbmV3LT5oLm5hbWUpCiAJCWdvdG8gb3V0X2ZyZWVfZG9tOwotCXN0cmNweShuZXctPmgubmFtZSwgbmFtZSk7CiAJbmV3LT5oLmZsYXZvdXIgPSAmc3ZjYXV0aG9wc19nc3M7CiAJbmV3LT5wc2V1ZG9mbGF2b3IgPSBwc2V1ZG9mbGF2b3I7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggNzg2OTZmMi4uZGZlZWE0ZiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTI1MywxMCArMjUzLDkgQEAKIHsKIAlzdHJ1Y3QgcnBjX2NsbnQgKm5ldzsKIAotCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBHRlBfS0VSTkVMKTsKKwluZXcgPSBrbWVtZHVwKGNsbnQsIHNpemVvZigqbmV3KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXcpCiAJCWdvdG8gb3V0X25vX2NsbnQ7Ci0JbWVtY3B5KG5ldywgY2xudCwgc2l6ZW9mKCpuZXcpKTsKIAlhdG9taWNfc2V0KCZuZXctPmNsX2NvdW50LCAxKTsKIAlhdG9taWNfc2V0KCZuZXctPmNsX3VzZXJzLCAwKTsKIAluZXctPmNsX3BhcmVudCA9IGNsbnQ7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NvY2tsaWIuYyBiL25ldC9zdW5ycGMvc29ja2xpYi5jCmluZGV4IDZmMTc1MjcuLjI2MzVjNTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc29ja2xpYi5jCisrKyBiL25ldC9zdW5ycGMvc29ja2xpYi5jCkBAIC00NSw3ICs0NSw4IEBACiAgKi8KIHN0YXRpYyBzaXplX3Qgc2tiX3JlYWRfYW5kX2NzdW1fYml0cyhza2JfcmVhZGVyX3QgKmRlc2MsIHZvaWQgKnRvLCBzaXplX3QgbGVuKQogewotCXVuc2lnbmVkIGludAljc3VtMiwgcG9zOworCXVuc2lnbmVkIGludCBwb3M7CisJX193c3VtIGNzdW0yOwogCiAJaWYgKGxlbiA+IGRlc2MtPmNvdW50KQogCQlsZW4gPSBkZXNjLT5jb3VudDsKQEAgLTE2MCwxMyArMTYxLDEzIEBACiAJaWYgKHhkcl9wYXJ0aWFsX2NvcHlfZnJvbV9za2IoeGRyLCAwLCAmZGVzYywgc2tiX3JlYWRfYW5kX2NzdW1fYml0cykgPCAwKQogCQlyZXR1cm4gLTE7CiAJaWYgKGRlc2Mub2Zmc2V0ICE9IHNrYi0+bGVuKSB7Ci0JCXVuc2lnbmVkIGludCBjc3VtMjsKKwkJX193c3VtIGNzdW0yOwogCQljc3VtMiA9IHNrYl9jaGVja3N1bShza2IsIGRlc2Mub2Zmc2V0LCBza2ItPmxlbiAtIGRlc2Mub2Zmc2V0LCAwKTsKIAkJZGVzYy5jc3VtID0gY3N1bV9ibG9ja19hZGQoZGVzYy5jc3VtLCBjc3VtMiwgZGVzYy5vZmZzZXQpOwogCX0KIAlpZiAoZGVzYy5jb3VudCkKIAkJcmV0dXJuIC0xOwotCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKGRlc2MuY3N1bSkpCisJaWYgKGNzdW1fZm9sZChkZXNjLmNzdW0pKQogCQlyZXR1cm4gLTE7CiAJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0NPTVBMRVRFKSkKIAkJbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc2tiLT5kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKaW5kZXggZTFiZDkzMy4uYTBhOTUzYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYworKysgYi9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCkBAIC0xMDEsOSArMTAxLDkgQEAKICAqIElQIGFkZHJlc3NlcyBpbiByZXZlcnNlLWVuZGlhbiAoaS5lLiBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZSkuCiAgKiBTbyB1c2UgYSB0cml2aWFsIGJ1dCByZWxpYWJsZSBoYXNoIGluc3RlYWQKICAqLwotc3RhdGljIGlubGluZSBpbnQgaGFzaF9pcCh1bnNpZ25lZCBsb25nIGlwKQorc3RhdGljIGlubGluZSBpbnQgaGFzaF9pcChfX2JlMzIgaXApCiB7Ci0JaW50IGhhc2ggPSBpcCBeIChpcD4+MTYpOworCWludCBoYXNoID0gKF9fZm9yY2UgdTMyKWlwIF4gKChfX2ZvcmNlIHUzMilpcD4+MTYpOwogCXJldHVybiAoaGFzaCBeIChoYXNoPj44KSkgJiAweGZmOwogfQogI2VuZGlmCkBAIC0yODQsNyArMjg0LDcgQEAKIAlpcC5tX2FkZHIgPSBhZGRyOwogCWNoID0gc3VucnBjX2NhY2hlX2xvb2t1cCgmaXBfbWFwX2NhY2hlLCAmaXAuaCwKIAkJCQkgaGFzaF9zdHIoY2xhc3MsIElQX0hBU0hCSVRTKSBeCi0JCQkJIGhhc2hfaXAoKHVuc2lnbmVkIGxvbmcpYWRkci5zX2FkZHIpKTsKKwkJCQkgaGFzaF9pcChhZGRyLnNfYWRkcikpOwogCiAJaWYgKGNoKQogCQlyZXR1cm4gY29udGFpbmVyX29mKGNoLCBzdHJ1Y3QgaXBfbWFwLCBoKTsKQEAgLTMxMyw3ICszMTMsNyBAQAogCWNoID0gc3VucnBjX2NhY2hlX3VwZGF0ZSgmaXBfbWFwX2NhY2hlLAogCQkJCSAmaXAuaCwgJmlwbS0+aCwKIAkJCQkgaGFzaF9zdHIoaXBtLT5tX2NsYXNzLCBJUF9IQVNIQklUUykgXgotCQkJCSBoYXNoX2lwKCh1bnNpZ25lZCBsb25nKWlwbS0+bV9hZGRyLnNfYWRkcikpOworCQkJCSBoYXNoX2lwKGlwbS0+bV9hZGRyLnNfYWRkcikpOwogCWlmICghY2gpCiAJCXJldHVybiAtRU5PTUVNOwogCWNhY2hlX3B1dChjaCwgJmlwX21hcF9jYWNoZSk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5jIGIvbmV0L3RpcGMvYmNhc3QuYwppbmRleCAxYmI3NTcwLi43MzBjNWM0IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5jCisrKyBiL25ldC90aXBjL2JjYXN0LmMKQEAgLTc3NCw4ICs3NzQsOCBAQAogCiBpbnQgdGlwY19iY2xpbmtfaW5pdCh2b2lkKQogewotCWJjYmVhcmVyID0ga21hbGxvYyhzaXplb2YoKmJjYmVhcmVyKSwgR0ZQX0FUT01JQyk7Ci0JYmNsaW5rID0ga21hbGxvYyhzaXplb2YoKmJjbGluayksIEdGUF9BVE9NSUMpOworCWJjYmVhcmVyID0ga3phbGxvYyhzaXplb2YoKmJjYmVhcmVyKSwgR0ZQX0FUT01JQyk7CisJYmNsaW5rID0ga3phbGxvYyhzaXplb2YoKmJjbGluayksIEdGUF9BVE9NSUMpOwogCWlmICghYmNiZWFyZXIgfHwgIWJjbGluaykgewogIG5vbWVtOgogCSAJd2FybigiTXVsdGljYXN0IGxpbmsgY3JlYXRpb24gZmFpbGVkLCBubyBtZW1vcnlcbiIpOwpAQCAtNzg2LDE0ICs3ODYsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGJjYmVhcmVyLCAwLCBzaXplb2Yoc3RydWN0IGJjYmVhcmVyKSk7CiAJSU5JVF9MSVNUX0hFQUQoJmJjYmVhcmVyLT5iZWFyZXIuY29uZ19saW5rcyk7CiAJYmNiZWFyZXItPmJlYXJlci5tZWRpYSA9ICZiY2JlYXJlci0+bWVkaWE7CiAJYmNiZWFyZXItPm1lZGlhLnNlbmRfbXNnID0gdGlwY19iY2JlYXJlcl9zZW5kOwogCXNwcmludGYoYmNiZWFyZXItPm1lZGlhLm5hbWUsICJ0aXBjLW11bHRpY2FzdCIpOwogCiAJYmNsID0gJmJjbGluay0+bGluazsKLQltZW1zZXQoYmNsaW5rLCAwLCBzaXplb2Yoc3RydWN0IGJjbGluaykpOwogCUlOSVRfTElTVF9IRUFEKCZiY2wtPndhaXRpbmdfcG9ydHMpOwogCWJjbC0+bmV4dF9vdXRfbm8gPSAxOwogCXNwaW5fbG9ja19pbml0KCZiY2xpbmstPm5vZGUubG9jayk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9jb25maWcuYyBiL25ldC90aXBjL2NvbmZpZy5jCmluZGV4IGVkMTM1MWUuLjQ1OGEyYzQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvbmZpZy5jCisrKyBiL25ldC90aXBjL2NvbmZpZy5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHN0cnVjdCBza19idWZmICp0aXBjX2NmZ19yZXBseV91bnNpZ25lZF90eXBlKHUxNiB0bHZfdHlwZSwgdTMyIHZhbHVlKQogewogCXN0cnVjdCBza19idWZmICpidWY7Ci0JdTMyIHZhbHVlX25ldDsKKwlfX2JlMzIgdmFsdWVfbmV0OwogCiAJYnVmID0gdGlwY19jZmdfcmVwbHlfYWxsb2MoVExWX1NQQUNFKHNpemVvZih2YWx1ZSkpKTsKIAlpZiAoYnVmKSB7CkBAIC0yODQsOCArMjg0LDcgQEAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwogCi0JYWRkciA9ICoodTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKTsKLQlhZGRyID0gbnRvaGwoYWRkcik7CisJYWRkciA9IG50b2hsKCooX19iZTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSk7CiAJaWYgKGFkZHIgPT0gdGlwY19vd25fYWRkcikKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIAlpZiAoIXRpcGNfYWRkcl9ub2RlX3ZhbGlkKGFkZHIpKQpAQCAtMzE5LDggKzMxOCw3IEBACiAJaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKIAotCXZhbHVlID0gKih1MzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpOwotCXZhbHVlID0gbnRvaGwodmFsdWUpOworCXZhbHVlID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKIAl0aXBjX3JlbW90ZV9tYW5hZ2VtZW50ID0gKHZhbHVlICE9IDApOwogCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7CiB9CkBAIC0zMzIsOCArMzMwLDcgQEAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX1VOU0lHTkVEKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwogCi0JdmFsdWUgPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JdmFsdWUgPSBudG9obCh2YWx1ZSk7CisJdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICh2YWx1ZSAhPSBkZWxpbWl0KHZhbHVlLCAxLCA2NTUzNSkpCiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfSU5WQUxJRF9WQUxVRQogCQkJCQkJICAgIiAobWF4IHB1YmxpY2F0aW9ucyBtdXN0IGJlIDEtNjU1MzUpIik7CkBAIC0zNDgsOCArMzQ1LDcgQEAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX1VOU0lHTkVEKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwogCi0JdmFsdWUgPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JdmFsdWUgPSBudG9obCh2YWx1ZSk7CisJdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICh2YWx1ZSAhPSBkZWxpbWl0KHZhbHVlLCAxLCA2NTUzNSkpCiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfSU5WQUxJRF9WQUxVRQogCQkJCQkJICAgIiAobWF4IHN1YnNjcmlwdGlvbnMgbXVzdCBiZSAxLTY1NTM1Iik7CkBAIC0zNjMsOCArMzU5LDcgQEAKIAogCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0JdmFsdWUgPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JdmFsdWUgPSBudG9obCh2YWx1ZSk7CisJdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICh2YWx1ZSA9PSB0aXBjX21heF9wb3J0cykKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIAlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMTI3LCA2NTUzNSkpCkBAIC0zODMsOCArMzc4LDcgQEAKIAogCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0JdmFsdWUgPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JdmFsdWUgPSBudG9obCh2YWx1ZSk7CisJdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICh2YWx1ZSA9PSB0aXBjX21heF96b25lcykKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIAlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMSwgMjU1KSkKQEAgLTQwMyw4ICszOTcsNyBAQAogCiAJaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQl2YWx1ZSA9ICoodTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKTsKLQl2YWx1ZSA9IG50b2hsKHZhbHVlKTsKKwl2YWx1ZSA9IG50b2hsKCooX19iZTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSk7CiAJaWYgKHZhbHVlICE9IGRlbGltaXQodmFsdWUsIDEsIDEpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKIAkJCQkJCSAgICIgKG1heCBjbHVzdGVycyBmaXhlZCBhdCAxKSIpOwpAQCAtNDE3LDggKzQxMCw3IEBACiAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX1VOU0lHTkVEKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwotCXZhbHVlID0gKih1MzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpOwotCXZhbHVlID0gbnRvaGwodmFsdWUpOworCXZhbHVlID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKIAlpZiAodmFsdWUgPT0gdGlwY19tYXhfbm9kZXMpCiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7CiAJaWYgKHZhbHVlICE9IGRlbGltaXQodmFsdWUsIDgsIDIwNDcpKQpAQCAtNDM3LDggKzQyOSw3IEBACiAKIAlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX1VOU0lHTkVEKSkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwotCXZhbHVlID0gKih1MzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpOwotCXZhbHVlID0gbnRvaGwodmFsdWUpOworCXZhbHVlID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKIAlpZiAodmFsdWUgIT0gMCkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfU1VQUE9SVEVECiAJCQkJCQkgICAiIChtYXggc2Vjb25kYXJ5IG5vZGVzIGZpeGVkIGF0IDApIik7CkBAIC00NTEsOCArNDQyLDcgQEAKIAogCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0JdmFsdWUgPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JdmFsdWUgPSBudG9obCh2YWx1ZSk7CisJdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICh2YWx1ZSA9PSB0aXBjX25ldF9pZCkKIAkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKIAlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMSwgOTk5OSkpCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9kYmcuYyBiL25ldC90aXBjL2RiZy5jCmluZGV4IGQ4YWY0YzIuLjYyN2Y5OWI3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kYmcuYworKysgYi9uZXQvdGlwYy9kYmcuYwpAQCAtMzkzLDggKzM5Myw3IEBACiAJaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCiAJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKIAotCXZhbHVlID0gKih1MzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpOwotCXZhbHVlID0gbnRvaGwodmFsdWUpOworCXZhbHVlID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKIAlpZiAodmFsdWUgIT0gZGVsaW1pdCh2YWx1ZSwgMCwgMzI3NjgpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKIAkJCQkJCSAgICIgKGxvZyBzaXplIG11c3QgYmUgMC0zMjc2OCkiKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuYyBiL25ldC90aXBjL25hbWVfZGlzdHIuYwppbmRleCAwM2JkNjU5Li43YmY4N2NiIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCkBAIC02NiwxMSArNjYsMTEgQEAKICAqLwogCiBzdHJ1Y3QgZGlzdHJfaXRlbSB7Ci0JdTMyIHR5cGU7Ci0JdTMyIGxvd2VyOwotCXUzMiB1cHBlcjsKLQl1MzIgcmVmOwotCXUzMiBrZXk7CisJX19iZTMyIHR5cGU7CisJX19iZTMyIGxvd2VyOworCV9fYmUzMiB1cHBlcjsKKwlfX2JlMzIgcmVmOworCV9fYmUzMiBrZXk7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuYyBiL25ldC90aXBjL25vZGUuYwppbmRleCA4ODZiZGE1Li40MTExYTMxIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ub2RlLmMKKysrIGIvbmV0L3RpcGMvbm9kZS5jCkBAIC02MCw3ICs2MCw3IEBACiAJc3RydWN0IG5vZGUgKm5fcHRyOwogICAgICAgICBzdHJ1Y3Qgbm9kZSAqKmN1cnJfbm9kZTsKIAotCW5fcHRyID0ga21hbGxvYyhzaXplb2YoKm5fcHRyKSxHRlBfQVRPTUlDKTsKKwluX3B0ciA9IGt6YWxsb2Moc2l6ZW9mKCpuX3B0ciksR0ZQX0FUT01JQyk7CiAJaWYgKCFuX3B0cikgewogCQl3YXJuKCJOb2RlIGNyZWF0aW9uIGZhaWxlZCwgbm8gbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC03NSw3ICs3NSw2IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAkJCi0JbWVtc2V0KG5fcHRyLCAwLCBzaXplb2YoKm5fcHRyKSk7CiAJbl9wdHItPmFkZHIgPSBhZGRyOwogICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pbml0KCZuX3B0ci0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm5fcHRyLT5uc3ViKTsKQEAgLTU5Nyw4ICs1OTYsNyBAQAogCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfTkVUX0FERFIpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7CiAKLQlkb21haW4gPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JZG9tYWluID0gbnRvaGwoZG9tYWluKTsKKwlkb21haW4gPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICghdGlwY19hZGRyX2RvbWFpbl92YWxpZChkb21haW4pKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKIAkJCQkJCSAgICIgKG5ldHdvcmsgYWRkcmVzcykiKTsKQEAgLTY0Miw4ICs2NDAsNyBAQAogCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfTkVUX0FERFIpKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7CiAKLQlkb21haW4gPSAqKHUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JZG9tYWluID0gbnRvaGwoZG9tYWluKTsKKwlkb21haW4gPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwogCWlmICghdGlwY19hZGRyX2RvbWFpbl92YWxpZChkb21haW4pKQogCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKIAkJCQkJCSAgICIgKG5ldHdvcmsgYWRkcmVzcykiKTsKQEAgLTY2NCw4ICs2NjEsNyBAQAogCiAJLyogQWRkIFRMViBmb3IgYnJvYWRjYXN0IGxpbmsgKi8KIAotICAgICAgICBsaW5rX2luZm8uZGVzdCA9IHRpcGNfb3duX2FkZHIgJiAweGZmZmZmMDA7Ci0JbGlua19pbmZvLmRlc3QgPSBodG9ubChsaW5rX2luZm8uZGVzdCk7CisgICAgICAgIGxpbmtfaW5mby5kZXN0ID0gaHRvbmwodGlwY19vd25fYWRkciAmIDB4ZmZmZmYwMCk7CiAgICAgICAgIGxpbmtfaW5mby51cCA9IGh0b25sKDEpOwogICAgICAgICBzcHJpbnRmKGxpbmtfaW5mby5zdHIsIHRpcGNfYmNsaW5rX25hbWUpOwogCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKZGlmZiAtLWdpdCBhL25ldC90aXBjL3N1YnNjci5jIGIvbmV0L3RpcGMvc3Vic2NyLmMKaW5kZXggN2E5MThmMS4uZGRhZGU3MyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc3Vic2NyLmMKKysrIGIvbmV0L3RpcGMvc3Vic2NyLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAJLyogQWxsb2NhdGUgc3Vic2NyaXB0aW9uIG9iamVjdCAqLwogCi0Jc3ViID0ga21hbGxvYyhzaXplb2YoKnN1YiksIEdGUF9BVE9NSUMpOworCXN1YiA9IGt6YWxsb2Moc2l6ZW9mKCpzdWIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXN1YikgewogCQl3YXJuKCJTdWJzY3JpcHRpb24gcmVqZWN0ZWQsIG5vIG1lbW9yeVxuIik7CiAJCXN1YnNjcl90ZXJtaW5hdGUoc3Vic2NyaWJlcik7CkBAIC0zNTksNyArMzU5LDYgQEAKIAogCS8qIEluaXRpYWxpemUgc3Vic2NyaXB0aW9uIG9iamVjdCAqLwogCi0JbWVtc2V0KHN1YiwgMCwgc2l6ZW9mKCpzdWIpKTsKIAlzdWItPnNlcS50eXBlID0gaHRvaGwocy0+c2VxLnR5cGUsIHN1YnNjcmliZXItPnN3YXApOwogCXN1Yi0+c2VxLmxvd2VyID0gaHRvaGwocy0+c2VxLmxvd2VyLCBzdWJzY3JpYmVyLT5zd2FwKTsKIAlzdWItPnNlcS51cHBlciA9IGh0b2hsKHMtPnNlcS51cHBlciwgc3Vic2NyaWJlci0+c3dhcCk7CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggYjQzYTI3OC4uMmYyMDhjNyAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtMTUxLDggKzE1MSw5IEBACiAgKiAgICBlYWNoIHNvY2tldCBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgc2VwYXJhdGUgcndsb2NrLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5peF9oYXNoX2ZvbGQodW5zaWduZWQgaGFzaCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5peF9oYXNoX2ZvbGQoX193c3VtIG4pCiB7CisJdW5zaWduZWQgaGFzaCA9IChfX2ZvcmNlIHVuc2lnbmVkKW47CiAJaGFzaCBePSBoYXNoPj4xNjsKIAloYXNoIF49IGhhc2g+Pjg7CiAJcmV0dXJuIGhhc2gmKFVOSVhfSEFTSF9TSVpFLTEpOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggNzczNmIyMy4uNjRkMzkzOCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC01MCw2ICs1MCw0MCBAQAogc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKnhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKHVuc2lnbmVkIGludCBmYW1pbHkpOwogc3RhdGljIHZvaWQgeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pOwogCitzdGF0aWMgaW5saW5lIGludAorX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsKQoreworCXJldHVybiAgYWRkcl9tYXRjaCgmZmwtPmZsNF9kc3QsICZzZWwtPmRhZGRyLCBzZWwtPnByZWZpeGxlbl9kKSAmJgorCQlhZGRyX21hdGNoKCZmbC0+Zmw0X3NyYywgJnNlbC0+c2FkZHIsIHNlbC0+cHJlZml4bGVuX3MpICYmCisJCSEoKHhmcm1fZmxvd2lfZHBvcnQoZmwpIF4gc2VsLT5kcG9ydCkgJiBzZWwtPmRwb3J0X21hc2spICYmCisJCSEoKHhmcm1fZmxvd2lfc3BvcnQoZmwpIF4gc2VsLT5zcG9ydCkgJiBzZWwtPnNwb3J0X21hc2spICYmCisJCShmbC0+cHJvdG8gPT0gc2VsLT5wcm90byB8fCAhc2VsLT5wcm90bykgJiYKKwkJKGZsLT5vaWYgPT0gc2VsLT5pZmluZGV4IHx8ICFzZWwtPmlmaW5kZXgpOworfQorCitzdGF0aWMgaW5saW5lIGludAorX194ZnJtNl9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsKQoreworCXJldHVybiAgYWRkcl9tYXRjaCgmZmwtPmZsNl9kc3QsICZzZWwtPmRhZGRyLCBzZWwtPnByZWZpeGxlbl9kKSAmJgorCQlhZGRyX21hdGNoKCZmbC0+Zmw2X3NyYywgJnNlbC0+c2FkZHIsIHNlbC0+cHJlZml4bGVuX3MpICYmCisJCSEoKHhmcm1fZmxvd2lfZHBvcnQoZmwpIF4gc2VsLT5kcG9ydCkgJiBzZWwtPmRwb3J0X21hc2spICYmCisJCSEoKHhmcm1fZmxvd2lfc3BvcnQoZmwpIF4gc2VsLT5zcG9ydCkgJiBzZWwtPnNwb3J0X21hc2spICYmCisJCShmbC0+cHJvdG8gPT0gc2VsLT5wcm90byB8fCAhc2VsLT5wcm90bykgJiYKKwkJKGZsLT5vaWYgPT0gc2VsLT5pZmluZGV4IHx8ICFzZWwtPmlmaW5kZXgpOworfQorCitpbnQgeGZybV9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsLAorCQkgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzZWwsIGZsKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gX194ZnJtNl9zZWxlY3Rvcl9tYXRjaChzZWwsIGZsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGludCB4ZnJtX3JlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQogewogCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbyA9IHhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKGZhbWlseSk7CkBAIC0xMTc3LDYgKzEyMTEsNyBAQAogCQlpZiAodG1wbC0+bW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CiAJCQlyZW1vdGUgPSAmdG1wbC0+aWQuZGFkZHI7CiAJCQlsb2NhbCA9ICZ0bXBsLT5zYWRkcjsKKwkJCWZhbWlseSA9IHRtcGwtPmVuY2FwX2ZhbWlseTsKIAkJCWlmICh4ZnJtX2FkZHJfYW55KGxvY2FsLCBmYW1pbHkpKSB7CiAJCQkJZXJyb3IgPSB4ZnJtX2dldF9zYWRkcigmdG1wLCByZW1vdGUsIGZhbWlseSk7CiAJCQkJaWYgKGVycm9yKQpAQCAtMTg5NCw3ICsxOTI5LDggQEAKIAogCQlpZiAoZmwgJiYgIXhmcm1fc2VsZWN0b3JfbWF0Y2goJmRzdC0+eGZybS0+c2VsLCBmbCwgZmFtaWx5KSkKIAkJCXJldHVybiAwOwotCQlpZiAoZmwgJiYgIXNlY3VyaXR5X3hmcm1fZmxvd19zdGF0ZV9tYXRjaChmbCwgZHN0LT54ZnJtLCBwb2wpKQorCQlpZiAoZmwgJiYgcG9sICYmCisJCSAgICAhc2VjdXJpdHlfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaChkc3QtPnhmcm0sIHBvbCwgZmwpKQogCQkJcmV0dXJuIDA7CiAJCWlmIChkc3QtPnhmcm0tPmttLnN0YXRlICE9IFhGUk1fU1RBVEVfVkFMSUQpCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCA4OTlkZTllLi44NjQ5NjJiIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0xMzA0LDcgKzEzMDQsNyBAQAogfQogRVhQT1JUX1NZTUJPTChrbV9xdWVyeSk7CiAKLWludCBrbV9uZXdfbWFwcGluZyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgeGZybV9hZGRyZXNzX3QgKmlwYWRkciwgdTE2IHNwb3J0KQoraW50IGttX25ld19tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLCBfX2JlMTYgc3BvcnQpCiB7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAJc3RydWN0IHhmcm1fbWdyICprbTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggMmVlMTRmOC4uMzExMjA1ZiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTI0NCwxMSArMjQ0LDEwIEBACiAJKnByb3BzID0gYWxnby0+ZGVzYy5zYWRiX2FsZ19pZDsKIAogCWxlbiA9IHNpemVvZigqdWFsZykgKyAodWFsZy0+YWxnX2tleV9sZW4gKyA3VSkgLyA4OwotCXAgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJcCA9IGttZW1kdXAodWFsZywgbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHAsIHVhbGcsIGxlbik7CiAJc3RyY3B5KHAtPmFsZ19uYW1lLCBhbGdvLT5uYW1lKTsKIAkqYWxncHAgPSBwOwogCXJldHVybiAwOwpAQCAtMjYzLDExICsyNjIsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAl1ZW5jYXAgPSBSVEFfREFUQShydGEpOwotCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXAgPSBrbWVtZHVwKHVlbmNhcCwgc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweShwLCB1ZW5jYXAsIHNpemVvZigqcCkpOwogCSplbmNhcHAgPSBwOwogCXJldHVybiAwOwogfQpAQCAtMzA1LDExICszMDMsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAl1YWRkcnAgPSBSVEFfREFUQShydGEpOwotCXAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOworCXAgPSBrbWVtZHVwKHVhZGRycCwgc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbWNweShwLCB1YWRkcnAsIHNpemVvZigqcCkpOwogCSphZGRycHAgPSBwOwogCXJldHVybiAwOwogfQpAQCAtNjUzLDcgKzY1MCw2IEBACiAJaWYgKCFza2IpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JTkVUTElOS19DQihza2IpLmRzdF9waWQgPSBORVRMSU5LX0NCKGluX3NrYikucGlkOwogCWluZm8uaW5fc2tiID0gaW5fc2tiOwogCWluZm8ub3V0X3NrYiA9IHNrYjsKIAlpbmZvLm5sbXNnX3NlcSA9IHNlcTsKQEAgLTc3Myw3ICs3NjksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmVyaWZ5X3BvbGljeV9kaXIoX191OCBkaXIpCitzdGF0aWMgaW50IHZlcmlmeV9wb2xpY3lfZGlyKHU4IGRpcikKIHsKIAlzd2l0Y2ggKGRpcikgewogCWNhc2UgWEZSTV9QT0xJQ1lfSU46CkBAIC03ODgsNyArNzg0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfcG9saWN5X3R5cGUoX191OCB0eXBlKQorc3RhdGljIGludCB2ZXJpZnlfcG9saWN5X3R5cGUodTggdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIFhGUk1fUE9MSUNZX1RZUEVfTUFJTjoKQEAgLTg3NSwyMiArODcxLDU3IEBACiAJCXQtPmFhbGdvcyA9IHV0LT5hYWxnb3M7CiAJCXQtPmVhbGdvcyA9IHV0LT5lYWxnb3M7CiAJCXQtPmNhbGdvcyA9IHV0LT5jYWxnb3M7CisJCXQtPmVuY2FwX2ZhbWlseSA9IHV0LT5mYW1pbHk7CiAJfQogfQogCitzdGF0aWMgaW50IHZhbGlkYXRlX3RtcGwoaW50IG5yLCBzdHJ1Y3QgeGZybV91c2VyX3RtcGwgKnV0LCB1MTYgZmFtaWx5KQoreworCWludCBpOworCisJaWYgKG5yID4gWEZSTV9NQVhfREVQVEgpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJLyogV2UgbmV2ZXIgdmFsaWRhdGVkIHRoZSB1dC0+ZmFtaWx5IHZhbHVlLCBzbyBtYW55CisJCSAqIGFwcGxpY2F0aW9ucyBzaW1wbHkgbGVhdmUgaXQgYXQgemVyby4gIFRoZSBjaGVjayB3YXMKKwkJICogbmV2ZXIgbWFkZSBhbmQgdXQtPmZhbWlseSB3YXMgaWdub3JlZCBiZWNhdXNlIGFsbAorCQkgKiB0ZW1wbGF0ZXMgY291bGQgYmUgYXNzdW1lZCB0byBoYXZlIHRoZSBzYW1lIGZhbWlseSBhcworCQkgKiB0aGUgcG9saWN5IGl0c2VsZi4gIE5vdyB0aGF0IHdlIHdpbGwgaGF2ZSBpcHY0LWluLWlwdjYKKwkJICogYW5kIGlwdjYtaW4taXB2NCB0dW5uZWxzLCB0aGlzIGlzIG5vIGxvbmdlciB0cnVlLgorCQkgKi8KKwkJaWYgKCF1dFtpXS5mYW1pbHkpCisJCQl1dFtpXS5mYW1pbHkgPSBmYW1pbHk7CisKKwkJc3dpdGNoICh1dFtpXS5mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJCWNhc2UgQUZfSU5FVDY6CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX07CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY29weV9mcm9tX3VzZXJfdG1wbChzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgc3RydWN0IHJ0YXR0ciAqKnhmcm1hKQogewogCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbWEZSTUFfVE1QTC0xXTsKLQlzdHJ1Y3QgeGZybV91c2VyX3RtcGwgKnV0bXBsOwotCWludCBucjsKIAogCWlmICghcnQpIHsKIAkJcG9sLT54ZnJtX25yID0gMDsKIAl9IGVsc2UgewotCQluciA9IChydC0+cnRhX2xlbiAtIHNpemVvZigqcnQpKSAvIHNpemVvZigqdXRtcGwpOworCQlzdHJ1Y3QgeGZybV91c2VyX3RtcGwgKnV0bXBsID0gUlRBX0RBVEEocnQpOworCQlpbnQgbnIgPSAocnQtPnJ0YV9sZW4gLSBzaXplb2YoKnJ0KSkgLyBzaXplb2YoKnV0bXBsKTsKKwkJaW50IGVycjsKIAotCQlpZiAobnIgPiBYRlJNX01BWF9ERVBUSCkKLQkJCXJldHVybiAtRUlOVkFMOworCQllcnIgPSB2YWxpZGF0ZV90bXBsKG5yLCB1dG1wbCwgcG9sLT5mYW1pbHkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAogCQljb3B5X3RlbXBsYXRlcyhwb2wsIFJUQV9EQVRBKHJ0KSwgbnIpOwogCX0KQEAgLTkwMSw3ICs5MzIsNyBAQAogewogCXN0cnVjdCBydGF0dHIgKnJ0ID0geGZybWFbWEZSTUFfUE9MSUNZX1RZUEUtMV07CiAJc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlICp1cHQ7Ci0JX191OCB0eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOworCXU4IHR5cGUgPSBYRlJNX1BPTElDWV9UWVBFX01BSU47CiAJaW50IGVycjsKIAogCWlmIChydCkgewpAQCAtMTAyOCw3ICsxMDU5LDcgQEAKIAkJc3RydWN0IHhmcm1fdG1wbCAqa3AgPSAmeHAtPnhmcm1fdmVjW2ldOwogCiAJCW1lbWNweSgmdXAtPmlkLCAma3AtPmlkLCBzaXplb2YodXAtPmlkKSk7Ci0JCXVwLT5mYW1pbHkgPSB4cC0+ZmFtaWx5OworCQl1cC0+ZmFtaWx5ID0ga3AtPmVuY2FwX2ZhbWlseTsKIAkJbWVtY3B5KCZ1cC0+c2FkZHIsICZrcC0+c2FkZHIsIHNpemVvZih1cC0+c2FkZHIpKTsKIAkJdXAtPnJlcWlkID0ga3AtPnJlcWlkOwogCQl1cC0+bW9kZSA9IGtwLT5tb2RlOwpAQCAtMTA4MywxMiArMTExNCwxMiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWQotc3RhdGljIGludCBjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgY29weV90b191c2VyX3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlIHVwdDsKIAogCW1lbXNldCgmdXB0LCAwLCBzaXplb2YodXB0KSk7Ci0JdXB0LnR5cGUgPSB4cC0+dHlwZTsKKwl1cHQudHlwZSA9IHR5cGU7CiAKIAlSVEFfUFVUKHNrYiwgWEZSTUFfUE9MSUNZX1RZUEUsIHNpemVvZih1cHQpLCAmdXB0KTsKIApAQCAtMTA5OSw3ICsxMTMwLDcgQEAKIH0KIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZShzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSBpbnQgY29weV90b191c2VyX3BvbGljeV90eXBlKHU4IHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTI4LDcgKzExNTksNyBAQAogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJaWYgKGNvcHlfdG9fdXNlcl9zZWNfY3R4KHhwLCBza2IpKQogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7Ci0JaWYgKGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh4cCwgc2tiKSA8IDApCisJaWYgKGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh4cC0+dHlwZSwgc2tiKSA8IDApCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKIAogCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKQEAgLTExNzEsNyArMTIwMiw2IEBACiAJaWYgKCFza2IpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JTkVUTElOS19DQihza2IpLmRzdF9waWQgPSBORVRMSU5LX0NCKGluX3NrYikucGlkOwogCWluZm8uaW5fc2tiID0gaW5fc2tiOwogCWluZm8ub3V0X3NrYiA9IHNrYjsKIAlpbmZvLm5sbXNnX3NlcSA9IHNlcTsKQEAgLTExOTAsNyArMTIyMCw3IEBACiB7CiAJc3RydWN0IHhmcm1fcG9saWN5ICp4cDsKIAlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2lkICpwOwotCV9fdTggdHlwZSA9IFhGUk1fUE9MSUNZX1RZUEVfTUFJTjsKKwl1OCB0eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOwogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJaW50IGRlbGV0ZTsKQEAgLTEyODQsMTAgKzEzMTQsMTIgQEAKIAlpZCA9IE5MTVNHX0RBVEEobmxoKTsKIAlubGgtPm5sbXNnX2ZsYWdzID0gMDsKIAotCWlkLT5zYV9pZC5kYWRkciA9IHgtPmlkLmRhZGRyOworCW1lbWNweSgmaWQtPnNhX2lkLmRhZGRyLCAmeC0+aWQuZGFkZHIsc2l6ZW9mKHgtPmlkLmRhZGRyKSk7CiAJaWQtPnNhX2lkLnNwaSA9IHgtPmlkLnNwaTsKIAlpZC0+c2FfaWQuZmFtaWx5ID0geC0+cHJvcHMuZmFtaWx5OwogCWlkLT5zYV9pZC5wcm90byA9IHgtPmlkLnByb3RvOworCW1lbWNweSgmaWQtPnNhZGRyLCAmeC0+cHJvcHMuc2FkZHIsc2l6ZW9mKHgtPnByb3BzLnNhZGRyKSk7CisJaWQtPnJlcWlkID0geC0+cHJvcHMucmVxaWQ7CiAJaWQtPmZsYWdzID0gYy0+ZGF0YS5hZXZlbnQ7CiAKIAlSVEFfUFVUKHNrYiwgWEZSTUFfUkVQTEFZX1ZBTCwgc2l6ZW9mKHgtPnJlcGxheSksICZ4LT5yZXBsYXkpOwpAQCAtMTQwOCw3ICsxNDQwLDcgQEAKIHN0YXRpYyBpbnQgeGZybV9mbHVzaF9wb2xpY3koc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKip4ZnJtYSkKIHsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKLQlfX3U4IHR5cGUgPSBYRlJNX1BPTElDWV9UWVBFX01BSU47CisJdTggdHlwZSA9IFhGUk1fUE9MSUNZX1RZUEVfTUFJTjsKIAlpbnQgZXJyOwogCiAJZXJyID0gY29weV9mcm9tX3VzZXJfcG9saWN5X3R5cGUoJnR5cGUsIChzdHJ1Y3QgcnRhdHRyICoqKXhmcm1hKTsKQEAgLTE0MjksNyArMTQ2MSw3IEBACiAJc3RydWN0IHhmcm1fcG9saWN5ICp4cDsKIAlzdHJ1Y3QgeGZybV91c2VyX3BvbGV4cGlyZSAqdXAgPSBOTE1TR19EQVRBKG5saCk7CiAJc3RydWN0IHhmcm1fdXNlcnBvbGljeV9pbmZvICpwID0gJnVwLT5wb2w7Ci0JX191OCB0eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOworCXU4IHR5cGUgPSBYRlJNX1BPTElDWV9UWVBFX01BSU47CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKIAllcnIgPSBjb3B5X2Zyb21fdXNlcl9wb2xpY3lfdHlwZSgmdHlwZSwgKHN0cnVjdCBydGF0dHIgKiopeGZybWEpOwpAQCAtMTUzMSw3ICsxNTYzLDggQEAKIAl9CiAKIAkvKiAgIGJ1aWxkIGFuIFhQICovCi0JeHAgPSB4ZnJtX3BvbGljeV9jb25zdHJ1Y3QoJnVhLT5wb2xpY3ksIChzdHJ1Y3QgcnRhdHRyICoqKSB4ZnJtYSwgJmVycik7ICAgICAgICBpZiAoIXhwKSB7CisJeHAgPSB4ZnJtX3BvbGljeV9jb25zdHJ1Y3QoJnVhLT5wb2xpY3ksIChzdHJ1Y3QgcnRhdHRyICoqKSB4ZnJtYSwgJmVycik7CisJaWYgKCF4cCkgewogCQlrZnJlZSh4KTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xOTA4LDcgKzE5NDEsNyBAQAogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJaWYgKGNvcHlfdG9fdXNlcl9zdGF0ZV9zZWNfY3R4KHgsIHNrYikpCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKLQlpZiAoY29weV90b191c2VyX3BvbGljeV90eXBlKHhwLCBza2IpIDwgMCkKKwlpZiAoY29weV90b191c2VyX3BvbGljeV90eXBlKHhwLT50eXBlLCBza2IpIDwgMCkKIAkJZ290byBubG1zZ19mYWlsdXJlOwogCiAJbmxoLT5ubG1zZ19sZW4gPSBza2ItPnRhaWwgLSBiOwpAQCAtMTk4MCw3ICsyMDEzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAluciA9ICgobGVuIC0gc2l6ZW9mKCpwKSkgLyBzaXplb2YoKnV0KSk7Ci0JaWYgKG5yID4gWEZSTV9NQVhfREVQVEgpCisJaWYgKHZhbGlkYXRlX3RtcGwobnIsIHV0LCBwLT5zZWwuZmFtaWx5KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAocC0+ZGlyID4gWEZSTV9QT0xJQ1lfT1VUKQpAQCAtMjAxOCw3ICsyMDUxLDcgQEAKIAkJZ290byBubG1zZ19mYWlsdXJlOwogCWlmIChjb3B5X3RvX3VzZXJfc2VjX2N0eCh4cCwgc2tiKSkKIAkJZ290byBubG1zZ19mYWlsdXJlOwotCWlmIChjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoeHAsIHNrYikgPCAwKQorCWlmIChjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoeHAtPnR5cGUsIHNrYikgPCAwKQogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJdXBlLT5oYXJkID0gISFoYXJkOwogCkBAIC0yMDk3LDcgKzIxMzAsNyBAQAogCWNvcHlfdG9fdXNlcl9wb2xpY3koeHAsIHAsIGRpcik7CiAJaWYgKGNvcHlfdG9fdXNlcl90bXBsKHhwLCBza2IpIDwgMCkKIAkJZ290byBubG1zZ19mYWlsdXJlOwotCWlmIChjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoeHAsIHNrYikgPCAwKQorCWlmIChjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoeHAtPnR5cGUsIHNrYikgPCAwKQogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAKIAlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIGI7CkBAIC0yMTE4LDcgKzIxNTEsNiBAQAogCXVuc2lnbmVkIGNoYXIgKmI7CiAJaW50IGxlbiA9IDA7CiAjaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWQotCXN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSB1cHQ7CiAJbGVuICs9IFJUQV9TUEFDRShzaXplb2Yoc3RydWN0IHhmcm1fdXNlcnBvbGljeV90eXBlKSk7CiAjZW5kaWYKIAlsZW4gKz0gTkxNU0dfTEVOR1RIKDApOwpAQCAtMjEzMSwxMiArMjE2Myw4IEBACiAKIAlubGggPSBOTE1TR19QVVQoc2tiLCBjLT5waWQsIGMtPnNlcSwgWEZSTV9NU0dfRkxVU0hQT0xJQ1ksIDApOwogCW5saC0+bmxtc2dfZmxhZ3MgPSAwOwotCi0jaWZkZWYgQ09ORklHX1hGUk1fU1VCX1BPTElDWQotCW1lbXNldCgmdXB0LCAwLCBzaXplb2YodXB0KSk7Ci0JdXB0LnR5cGUgPSBjLT5kYXRhLnR5cGU7Ci0JUlRBX1BVVChza2IsIFhGUk1BX1BPTElDWV9UWVBFLCBzaXplb2YodXB0KSwgJnVwdCk7Ci0jZW5kaWYKKwlpZiAoY29weV90b191c2VyX3BvbGljeV90eXBlKGMtPmRhdGEudHlwZSwgc2tiKSA8IDApCisJCWdvdG8gbmxtc2dfZmFpbHVyZTsKIAogCW5saC0+bmxtc2dfbGVuID0gc2tiLT50YWlsIC0gYjsKIApAQCAtMjE0NCw5ICsyMTcyLDYgQEAKIAlyZXR1cm4gbmV0bGlua19icm9hZGNhc3QoeGZybV9ubCwgc2tiLCAwLCBYRlJNTkxHUlBfUE9MSUNZLCBHRlBfQVRPTUlDKTsKIAogbmxtc2dfZmFpbHVyZToKLSNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZCi1ydGF0dHJfZmFpbHVyZToKLSNlbmRpZgogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2R1bW15LmMgYi9zZWN1cml0eS9kdW1teS5jCmluZGV4IDQzODc0YzEuLjU1ODc5NWIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2R1bW15LmMKKysrIGIvc2VjdXJpdHkvZHVtbXkuYwpAQCAtODI4LDYgKzgyOCwxMSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtbXlfaW5ldF9jb25uX2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywKKwkJCXN0cnVjdCBza19idWZmICpza2IpCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1teV9yZXFfY2xhc3NpZnlfZmxvdyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQlzdHJ1Y3QgZmxvd2kgKmZsKQogewpAQCAtODM2LDcgKzg0MSw3IEBACiAKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNCiBzdGF0aWMgaW50IGR1bW15X3hmcm1fcG9saWN5X2FsbG9jX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsCi0JCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCwgc3RydWN0IHNvY2sgKnNrKQorCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC04NTYsNyArODYxLDcgQEAKIH0KIAogc3RhdGljIGludCBkdW1teV94ZnJtX3N0YXRlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LAotCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqc2VjX2N0eCwgc3RydWN0IHhmcm1fc2VjX2N0eCAqcG9sLCB1MzIgc2VjaWQpCisJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4LCB1MzIgc2VjaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC04ODEsMTIgKzg4Niw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfeGZybV9mbG93X3N0YXRlX21hdGNoKHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtLAotCQkJCXN0cnVjdCB4ZnJtX3BvbGljeSAqeHApCi17Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBpbnQgZHVtbXlfeGZybV9kZWNvZGVfc2Vzc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKmZsLCBpbnQgY2thbGwpCiB7CiAJcmV0dXJuIDA7CkBAIC0xMTA4LDYgKzExMDcsNyBAQAogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgc29ja19ncmFmdCk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbmV0X2Nvbm5fcmVxdWVzdCk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbmV0X2Nza19jbG9uZSk7CisJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBpbmV0X2Nvbm5fZXN0YWJsaXNoZWQpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgcmVxX2NsYXNzaWZ5X2Zsb3cpOwogICNlbmRpZgkvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLwogI2lmZGVmICBDT05GSUdfU0VDVVJJVFlfTkVUV09SS19YRlJNCkBAIC0xMTIwLDcgKzExMjAsNiBAQAogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9zdGF0ZV9kZWxldGVfc2VjdXJpdHkpOwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9wb2xpY3lfbG9va3VwKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHhmcm1fc3RhdGVfcG9sX2Zsb3dfbWF0Y2gpOwotCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgeGZybV9mbG93X3N0YXRlX21hdGNoKTsKIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHhmcm1fZGVjb2RlX3Nlc3Npb24pOwogI2VuZGlmCS8qIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gKi8KICNpZmRlZiBDT05GSUdfS0VZUwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IDI4ZWUxODcuLmEyOWQ3OGQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvZGNjcC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CiAjaW5jbHVkZSA8bGludXgvdW4uaD4JCS8qIGZvciBVbml4IHNvY2tldCB0eXBlcyAqLwogI2luY2x1ZGUgPG5ldC9hZl91bml4Lmg+CS8qIGZvciBVbml4IHNvY2tldCB0eXBlcyAqLwpAQCAtNzUxLDYgKzc1Miw4IEBACiAJCQkJcmV0dXJuIFNFQ0NMQVNTX1VEUF9TT0NLRVQ7CiAJCQllbHNlCiAJCQkJcmV0dXJuIFNFQ0NMQVNTX1JBV0lQX1NPQ0tFVDsKKwkJY2FzZSBTT0NLX0RDQ1A6CisJCQlyZXR1cm4gU0VDQ0xBU1NfRENDUF9TT0NLRVQ7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gU0VDQ0xBU1NfUkFXSVBfU09DS0VUOwogCQl9CkBAIC0yODg5LDcgKzI4OTIsOCBAQAogfQogCiAvKiBSZXR1cm5zIGVycm9yIG9ubHkgaWYgdW5hYmxlIHRvIHBhcnNlIGFkZHJlc3NlcyAqLwotc3RhdGljIGludCBzZWxpbnV4X3BhcnNlX3NrYl9pcHY0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQpCitzdGF0aWMgaW50IHNlbGludXhfcGFyc2Vfc2tiX2lwdjQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsIHU4ICpwcm90bykKIHsKIAlpbnQgb2Zmc2V0LCBpaGxlbiwgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgaXBoZHIgX2lwaCwgKmloOwpAQCAtMjkwNyw2ICsyOTExLDkgQEAKIAlhZC0+dS5uZXQudjRpbmZvLmRhZGRyID0gaWgtPmRhZGRyOwogCXJldCA9IDA7CiAKKwlpZiAocHJvdG8pCisJCSpwcm90byA9IGloLT5wcm90b2NvbDsKKwogCXN3aXRjaCAoaWgtPnByb3RvY29sKSB7CiAgICAgICAgIGNhc2UgSVBQUk9UT19UQ1A6IHsKICAgICAgICAgCXN0cnVjdCB0Y3BoZHIgX3RjcGgsICp0aDsKQEAgLTI5NDAsNiArMjk0NywyMiBAQAogICAgICAgICAJYnJlYWs7CiAgICAgICAgIH0KIAorCWNhc2UgSVBQUk9UT19EQ0NQOiB7CisJCXN0cnVjdCBkY2NwX2hkciBfZGNjcGgsICpkaDsKKworCQlpZiAobnRvaHMoaWgtPmZyYWdfb2ZmKSAmIElQX09GRlNFVCkKKwkJCWJyZWFrOworCisJCW9mZnNldCArPSBpaGxlbjsKKwkJZGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXQsIHNpemVvZihfZGNjcGgpLCAmX2RjY3BoKTsKKwkJaWYgKGRoID09IE5VTEwpCisJCQlicmVhazsKKworCQlhZC0+dS5uZXQuc3BvcnQgPSBkaC0+ZGNjcGhfc3BvcnQ7CisJCWFkLT51Lm5ldC5kcG9ydCA9IGRoLT5kY2NwaF9kcG9ydDsKKwkJYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAJYnJlYWs7CiAgICAgICAgIH0KQEAgLTI5NTAsNyArMjk3Myw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAKIC8qIFJldHVybnMgZXJyb3Igb25seSBpZiB1bmFibGUgdG8gcGFyc2UgYWRkcmVzc2VzICovCi1zdGF0aWMgaW50IHNlbGludXhfcGFyc2Vfc2tiX2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCkKK3N0YXRpYyBpbnQgc2VsaW51eF9wYXJzZV9za2JfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCwgdTggKnByb3RvKQogewogCXU4IG5leHRoZHI7CiAJaW50IHJldCA9IC1FSU5WQUwsIG9mZnNldDsKQEAgLTI5NzEsNiArMjk5NSw5IEBACiAJaWYgKG9mZnNldCA8IDApCiAJCWdvdG8gb3V0OwogCisJaWYgKHByb3RvKQorCQkqcHJvdG8gPSBuZXh0aGRyOworCiAJc3dpdGNoIChuZXh0aGRyKSB7CiAJY2FzZSBJUFBST1RPX1RDUDogewogICAgICAgICAJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRoOwpAQCAtMjk5Niw2ICszMDIzLDE4IEBACiAJCWJyZWFrOwogCX0KIAorCWNhc2UgSVBQUk9UT19EQ0NQOiB7CisJCXN0cnVjdCBkY2NwX2hkciBfZGNjcGgsICpkaDsKKworCQlkaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9kY2NwaCksICZfZGNjcGgpOworCQlpZiAoZGggPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCWFkLT51Lm5ldC5zcG9ydCA9IGRoLT5kY2NwaF9zcG9ydDsKKwkJYWQtPnUubmV0LmRwb3J0ID0gZGgtPmRjY3BoX2Rwb3J0OworCQlicmVhazsKKyAgICAgICAgfQorCiAJLyogaW5jbHVkZXMgZnJhZ21lbnRzICovCiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0zMDA3LDEzICszMDQ2LDEzIEBACiAjZW5kaWYgLyogSVBWNiAqLwogCiBzdGF0aWMgaW50IHNlbGludXhfcGFyc2Vfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsCi0JCQkgICAgIGNoYXIgKiphZGRycCwgaW50ICpsZW4sIGludCBzcmMpCisJCQkgICAgIGNoYXIgKiphZGRycCwgaW50ICpsZW4sIGludCBzcmMsIHU4ICpwcm90bykKIHsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAoYWQtPnUubmV0LmZhbWlseSkgewogCWNhc2UgUEZfSU5FVDoKLQkJcmV0ID0gc2VsaW51eF9wYXJzZV9za2JfaXB2NChza2IsIGFkKTsKKwkJcmV0ID0gc2VsaW51eF9wYXJzZV9za2JfaXB2NChza2IsIGFkLCBwcm90byk7CiAJCWlmIChyZXQgfHwgIWFkZHJwKQogCQkJYnJlYWs7CiAJCSpsZW4gPSA0OwpAQCAtMzAyMyw3ICszMDYyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCWNhc2UgUEZfSU5FVDY6Ci0JCXJldCA9IHNlbGludXhfcGFyc2Vfc2tiX2lwdjYoc2tiLCBhZCk7CisJCXJldCA9IHNlbGludXhfcGFyc2Vfc2tiX2lwdjYoc2tiLCBhZCwgcHJvdG8pOwogCQlpZiAocmV0IHx8ICFhZGRycCkKIAkJCWJyZWFrOwogCQkqbGVuID0gMTY7CkBAIC0zMTAxLDkgKzMxNDAsNyBAQAogCWlmIChzb2NrLT5zaykgewogCQlza3NlYyA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKIAkJc2tzZWMtPnNpZCA9IGlzZWMtPnNpZDsKLQkJZXJyID0gc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHNvY2ssCi0JCQkJCQkJZmFtaWx5LAotCQkJCQkJCWlzZWMtPnNpZCk7CisJCWVyciA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzb2NrKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzE4MCw3ICszMjE3LDExIEBACiAJCWNhc2UgU0VDQ0xBU1NfVURQX1NPQ0tFVDoKIAkJCW5vZGVfcGVybSA9IFVEUF9TT0NLRVRfX05PREVfQklORDsKIAkJCWJyZWFrOwotCQkJCisKKwkJY2FzZSBTRUNDTEFTU19EQ0NQX1NPQ0tFVDoKKwkJCW5vZGVfcGVybSA9IERDQ1BfU09DS0VUX19OT0RFX0JJTkQ7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJbm9kZV9wZXJtID0gUkFXSVBfU09DS0VUX19OT0RFX0JJTkQ7CiAJCQlicmVhazsKQEAgLTMyMTgsMTYgKzMyNTksMTcgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qCi0JICogSWYgYSBUQ1Agc29ja2V0LCBjaGVjayBuYW1lX2Nvbm5lY3QgcGVybWlzc2lvbiBmb3IgdGhlIHBvcnQuCisJICogSWYgYSBUQ1Agb3IgRENDUCBzb2NrZXQsIGNoZWNrIG5hbWVfY29ubmVjdCBwZXJtaXNzaW9uIGZvciB0aGUgcG9ydC4KIAkgKi8KIAlpc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKLQlpZiAoaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1RDUF9TT0NLRVQpIHsKKwlpZiAoaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1RDUF9TT0NLRVQgfHwKKwkgICAgaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX0RDQ1BfU09DS0VUKSB7CiAJCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSBOVUxMOwogCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IE5VTEw7CiAJCXVuc2lnbmVkIHNob3J0IHNudW07Ci0JCXUzMiBzaWQ7CisJCXUzMiBzaWQsIHBlcm07CiAKIAkJaWYgKHNrLT5za19mYW1pbHkgPT0gUEZfSU5FVCkgewogCQkJYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcmVzczsKQEAgLTMyNDYsMTEgKzMyODgsMTMgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCisJCXBlcm0gPSAoaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1RDUF9TT0NLRVQpID8KKwkJICAgICAgIFRDUF9TT0NLRVRfX05BTUVfQ09OTkVDVCA6IERDQ1BfU09DS0VUX19OQU1FX0NPTk5FQ1Q7CisKIAkJQVZDX0FVRElUX0RBVEFfSU5JVCgmYWQsTkVUKTsKIAkJYWQudS5uZXQuZHBvcnQgPSBodG9ucyhzbnVtKTsKIAkJYWQudS5uZXQuZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKLQkJZXJyID0gYXZjX2hhc19wZXJtKGlzZWMtPnNpZCwgc2lkLCBpc2VjLT5zY2xhc3MsCi0JCQkJICAgVENQX1NPQ0tFVF9fTkFNRV9DT05ORUNULCAmYWQpOworCQllcnIgPSBhdmNfaGFzX3Blcm0oaXNlYy0+c2lkLCBzaWQsIGlzZWMtPnNjbGFzcywgcGVybSwgJmFkKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTM0MzgsNyArMzQ4MiwxMyBAQAogCQlub2RlX3Blcm0gPSBOT0RFX19UQ1BfUkVDVjsKIAkJcmVjdl9wZXJtID0gVENQX1NPQ0tFVF9fUkVDVl9NU0c7CiAJCWJyZWFrOwotCQorCisJY2FzZSBTRUNDTEFTU19EQ0NQX1NPQ0tFVDoKKwkJbmV0aWZfcGVybSA9IE5FVElGX19EQ0NQX1JFQ1Y7CisJCW5vZGVfcGVybSA9IE5PREVfX0RDQ1BfUkVDVjsKKwkJcmVjdl9wZXJtID0gRENDUF9TT0NLRVRfX1JFQ1ZfTVNHOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCW5ldGlmX3Blcm0gPSBORVRJRl9fUkFXSVBfUkVDVjsKIAkJbm9kZV9wZXJtID0gTk9ERV9fUkFXSVBfUkVDVjsKQEAgLTM0OTQsNyArMzU0NCw3IEBACiAJYWQudS5uZXQubmV0aWYgPSBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIlt1bmtub3duXSI7CiAJYWQudS5uZXQuZmFtaWx5ID0gZmFtaWx5OwogCi0JZXJyID0gc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgJmxlbiwgMSk7CisJZXJyID0gc2VsaW51eF9wYXJzZV9za2Ioc2tiLCAmYWQsICZhZGRycCwgJmxlbiwgMSwgTlVMTCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTM1MjQsMjUgKzM1NzQsMTYgQEAKIAl1MzIgc2NvbnRleHRfbGVuOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWM7CiAJc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKLQl1MzIgcGVlcl9zaWQgPSAwOworCXUzMiBwZWVyX3NpZCA9IFNFQ1NJRF9OVUxMOwogCiAJaXNlYyA9IFNPQ0tfSU5PREUoc29jayktPmlfc2VjdXJpdHk7CiAKLQkvKiBpZiBVTklYX1NUUkVBTSBjaGVjayBwZWVyX3NpZCwgaWYgVENQIGNoZWNrIGRzdCBmb3IgbGFiZWxsZWQgc2EgKi8KLQlpZiAoaXNlYy0+c2NsYXNzID09IFNFQ0NMQVNTX1VOSVhfU1RSRUFNX1NPQ0tFVCkgeworCWlmIChpc2VjLT5zY2xhc3MgPT0gU0VDQ0xBU1NfVU5JWF9TVFJFQU1fU09DS0VUIHx8CisJICAgIGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUKSB7CiAJCXNzZWMgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7CiAJCXBlZXJfc2lkID0gc3NlYy0+cGVlcl9zaWQ7CiAJfQotCWVsc2UgaWYgKGlzZWMtPnNjbGFzcyA9PSBTRUNDTEFTU19UQ1BfU09DS0VUKSB7Ci0JCXBlZXJfc2lkID0gc2VsaW51eF9uZXRsYmxfc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtKHNvY2spOwotCQlpZiAocGVlcl9zaWQgPT0gU0VDU0lEX05VTEwpCi0JCQlwZWVyX3NpZCA9IHNlbGludXhfc29ja2V0X2dldHBlZXJfc3RyZWFtKHNvY2stPnNrKTsKLQkJaWYgKHBlZXJfc2lkID09IFNFQ1NJRF9OVUxMKSB7Ci0JCQllcnIgPSAtRU5PUFJPVE9PUFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQllbHNlIHsKKwlpZiAocGVlcl9zaWQgPT0gU0VDU0lEX05VTEwpIHsKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zNTc0LDEzICszNjE1LDEyIEBACiAJdTMyIHBlZXJfc2VjaWQgPSBTRUNTSURfTlVMTDsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChzb2NrICYmIChzb2NrLT5zay0+c2tfZmFtaWx5ID09IFBGX1VOSVgpKQorCWlmIChzb2NrICYmIHNvY2stPnNrLT5za19mYW1pbHkgPT0gUEZfVU5JWCkKIAkJc2VsaW51eF9nZXRfaW5vZGVfc2lkKFNPQ0tfSU5PREUoc29jayksICZwZWVyX3NlY2lkKTsKLQllbHNlIGlmIChza2IpIHsKLQkJcGVlcl9zZWNpZCA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHNrYik7Ci0JCWlmIChwZWVyX3NlY2lkID09IFNFQ1NJRF9OVUxMKQotCQkJcGVlcl9zZWNpZCA9IHNlbGludXhfc29ja2V0X2dldHBlZXJfZGdyYW0oc2tiKTsKLQl9CisJZWxzZSBpZiAoc2tiKQorCQlzZWN1cml0eV9za2JfZXh0bGJsX3NpZChza2IsCisJCQkJCVNFQ0lOSVRTSURfVU5MQUJFTEVELAorCQkJCQkmcGVlcl9zZWNpZCk7CiAKIAlpZiAocGVlcl9zZWNpZCA9PSBTRUNTSURfTlVMTCkKIAkJZXJyID0gLUVJTlZBTDsKQEAgLTM2MDcsNyArMzY0Nyw3IEBACiAJbmV3c3NlYy0+c2lkID0gc3NlYy0+c2lkOwogCW5ld3NzZWMtPnBlZXJfc2lkID0gc3NlYy0+cGVlcl9zaWQ7CiAKLQlzZWxpbnV4X25ldGxibF9za19jbG9uZV9zZWN1cml0eShzc2VjLCBuZXdzc2VjKTsKKwlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9jbG9uZShzc2VjLCBuZXdzc2VjKTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9za19nZXRzZWNpZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqc2VjaWQpCkBAIC0zNjQxLDE3ICszNjgxLDEwIEBACiAJdTMyIG5ld3NpZDsKIAl1MzIgcGVlcnNpZDsKIAotCW5ld3NpZCA9IHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHNrYiwgc2tzZWMtPnNpZCk7Ci0JaWYgKG5ld3NpZCAhPSBTRUNTSURfTlVMTCkgewotCQlyZXEtPnNlY2lkID0gbmV3c2lkOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQllcnIgPSBzZWxpbnV4X3hmcm1fZGVjb2RlX3Nlc3Npb24oc2tiLCAmcGVlcnNpZCwgMCk7Ci0JQlVHX09OKGVycik7Ci0KKwlzZWN1cml0eV9za2JfZXh0bGJsX3NpZChza2IsIFNFQ0lOSVRTSURfVU5MQUJFTEVELCAmcGVlcnNpZCk7CiAJaWYgKHBlZXJzaWQgPT0gU0VDU0lEX05VTEwpIHsKIAkJcmVxLT5zZWNpZCA9IHNrc2VjLT5zaWQ7CisJCXJlcS0+cGVlcl9zZWNpZCA9IFNFQ1NJRF9OVUxMOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM2NjAsNiArMzY5Myw3IEBACiAJCXJldHVybiBlcnI7CiAKIAlyZXEtPnNlY2lkID0gbmV3c2lkOworCXJlcS0+cGVlcl9zZWNpZCA9IHBlZXJzaWQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2NjksMTIgKzM3MDMsMjMgQEAKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpuZXdza3NlYyA9IG5ld3NrLT5za19zZWN1cml0eTsKIAogCW5ld3Nrc2VjLT5zaWQgPSByZXEtPnNlY2lkOworCW5ld3Nrc2VjLT5wZWVyX3NpZCA9IHJlcS0+cGVlcl9zZWNpZDsKIAkvKiBOT1RFOiBJZGVhbGx5LCB3ZSBzaG91bGQgYWxzbyBnZXQgdGhlIGlzZWMtPnNpZCBmb3IgdGhlCiAJICAgbmV3IHNvY2tldCBpbiBzeW5jLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaXNlYyBhdmFpbGFibGUgeWV0LgogCSAgIFNvIHdlIHdpbGwgd2FpdCB1bnRpbCBzb2NrX2dyYWZ0IHRvIGRvIGl0LCBieSB3aGljaAogCSAgIHRpbWUgaXQgd2lsbCBoYXZlIGJlZW4gY3JlYXRlZCBhbmQgYXZhaWxhYmxlLiAqLwogCi0Jc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfaW5pdChuZXdza3NlYywgcmVxLT5yc2tfb3BzLT5mYW1pbHkpOworCS8qIFdlIGRvbid0IG5lZWQgdG8gdGFrZSBhbnkgc29ydCBvZiBsb2NrIGhlcmUgYXMgd2UgYXJlIHRoZSBvbmx5CisJICogdGhyZWFkIHdpdGggYWNjZXNzIHRvIG5ld3Nrc2VjICovCisJc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQobmV3c2tzZWMsIHJlcS0+cnNrX29wcy0+ZmFtaWx5KTsKK30KKworc3RhdGljIHZvaWQgc2VsaW51eF9pbmV0X2Nvbm5fZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLAorCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CisKKwlzZWN1cml0eV9za2JfZXh0bGJsX3NpZChza2IsIFNFQ0lOSVRTSURfVU5MQUJFTEVELCAmc2tzZWMtPnBlZXJfc2lkKTsKIH0KIAogc3RhdGljIHZvaWQgc2VsaW51eF9yZXFfY2xhc3NpZnlfZmxvdyhjb25zdCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCkBAIC0zNzU3LDcgKzM4MDIsMTMgQEAKIAkJbm9kZV9wZXJtID0gTk9ERV9fVENQX1NFTkQ7CiAJCXNlbmRfcGVybSA9IFRDUF9TT0NLRVRfX1NFTkRfTVNHOwogCQlicmVhazsKLQkKKworCWNhc2UgU0VDQ0xBU1NfRENDUF9TT0NLRVQ6CisJCW5ldGlmX3Blcm0gPSBORVRJRl9fRENDUF9TRU5EOworCQlub2RlX3Blcm0gPSBOT0RFX19EQ0NQX1NFTkQ7CisJCXNlbmRfcGVybSA9IERDQ1BfU09DS0VUX19TRU5EX01TRzsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQluZXRpZl9wZXJtID0gTkVUSUZfX1JBV0lQX1NFTkQ7CiAJCW5vZGVfcGVybSA9IE5PREVfX1JBV0lQX1NFTkQ7CkBAIC0zODA4LDYgKzM4NTksNyBAQAogCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSBhZDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopb3V0OwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjOworCXU4IHByb3RvOwogCiAJc2sgPSBza2ItPnNrOwogCWlmICghc2spCkBAIC0zODE5LDcgKzM4NzEsNyBAQAogCWFkLnUubmV0Lm5ldGlmID0gZGV2LT5uYW1lOwogCWFkLnUubmV0LmZhbWlseSA9IGZhbWlseTsKIAotCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsICZsZW4sIDApOworCWVyciA9IHNlbGludXhfcGFyc2Vfc2tiKHNrYiwgJmFkLCAmYWRkcnAsICZsZW4sIDAsICZwcm90byk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTM4MzMsNyArMzg4NSw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3Qoc2tzZWMtPnNpZCwgc2tiLCAmYWQpOworCWVyciA9IHNlbGludXhfeGZybV9wb3N0cm91dGVfbGFzdChza3NlYy0+c2lkLCBza2IsICZhZCwgcHJvdG8pOwogb3V0OgogCXJldHVybiBlcnIgPyBORl9EUk9QIDogTkZfQUNDRVBUOwogfQpAQCAtNDczOSw2ICs0NzkxLDcgQEAKIAkuc29ja19ncmFmdCA9CQkJc2VsaW51eF9zb2NrX2dyYWZ0LAogCS5pbmV0X2Nvbm5fcmVxdWVzdCA9CQlzZWxpbnV4X2luZXRfY29ubl9yZXF1ZXN0LAogCS5pbmV0X2Nza19jbG9uZSA9CQlzZWxpbnV4X2luZXRfY3NrX2Nsb25lLAorCS5pbmV0X2Nvbm5fZXN0YWJsaXNoZWQgPQlzZWxpbnV4X2luZXRfY29ubl9lc3RhYmxpc2hlZCwKIAkucmVxX2NsYXNzaWZ5X2Zsb3cgPQkJc2VsaW51eF9yZXFfY2xhc3NpZnlfZmxvdywKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0KQEAgLTQ3NTEsNyArNDgwNCw2IEBACiAJLnhmcm1fc3RhdGVfZGVsZXRlX3NlY3VyaXR5ID0Jc2VsaW51eF94ZnJtX3N0YXRlX2RlbGV0ZSwKIAkueGZybV9wb2xpY3lfbG9va3VwID0gCQlzZWxpbnV4X3hmcm1fcG9saWN5X2xvb2t1cCwKIAkueGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCA9CXNlbGludXhfeGZybV9zdGF0ZV9wb2xfZmxvd19tYXRjaCwKLQkueGZybV9mbG93X3N0YXRlX21hdGNoID0Jc2VsaW51eF94ZnJtX2Zsb3dfc3RhdGVfbWF0Y2gsCiAJLnhmcm1fZGVjb2RlX3Nlc3Npb24gPQkJc2VsaW51eF94ZnJtX2RlY29kZV9zZXNzaW9uLAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfaW5oZXJpdC5oCmluZGV4IGE2OGZkZDUuLjgzNzdhNGIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9pbmhlcml0LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X2luaGVyaXQuaApAQCAtMzAsMyArMzAsNCBAQAogICAgU18oU0VDQ0xBU1NfTkVUTElOS19ETlJUX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0tPQkpFQ1RfVUVWRU5UX1NPQ0tFVCwgc29ja2V0LCAweDAwNDAwMDAwVUwpCiAgICBTXyhTRUNDTEFTU19BUFBMRVRBTEtfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKKyAgIFNfKFNFQ0NMQVNTX0RDQ1BfU09DS0VULCBzb2NrZXQsIDB4MDA0MDAwMDBVTCkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggMDlmYzhhMi4uYWQ5ZmIyZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKQEAgLTM1LDEyICszNSwxNiBAQAogICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fUkFXSVBfUkVDViwgInJhd2lwX3JlY3YiKQogICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fUkFXSVBfU0VORCwgInJhd2lwX3NlbmQiKQogICAgU18oU0VDQ0xBU1NfTk9ERSwgTk9ERV9fRU5GT1JDRV9ERVNULCAiZW5mb3JjZV9kZXN0IikKKyAgIFNfKFNFQ0NMQVNTX05PREUsIE5PREVfX0RDQ1BfUkVDViwgImRjY3BfcmVjdiIpCisgICBTXyhTRUNDTEFTU19OT0RFLCBOT0RFX19EQ0NQX1NFTkQsICJkY2NwX3NlbmQiKQogICAgU18oU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19UQ1BfUkVDViwgInRjcF9yZWN2IikKICAgIFNfKFNFQ0NMQVNTX05FVElGLCBORVRJRl9fVENQX1NFTkQsICJ0Y3Bfc2VuZCIpCiAgICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX1VEUF9SRUNWLCAidWRwX3JlY3YiKQogICAgU18oU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19VRFBfU0VORCwgInVkcF9zZW5kIikKICAgIFNfKFNFQ0NMQVNTX05FVElGLCBORVRJRl9fUkFXSVBfUkVDViwgInJhd2lwX3JlY3YiKQogICAgU18oU0VDQ0xBU1NfTkVUSUYsIE5FVElGX19SQVdJUF9TRU5ELCAicmF3aXBfc2VuZCIpCisgICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX0RDQ1BfUkVDViwgImRjY3BfcmVjdiIpCisgICBTXyhTRUNDTEFTU19ORVRJRiwgTkVUSUZfX0RDQ1BfU0VORCwgImRjY3Bfc2VuZCIpCiAgICBTXyhTRUNDTEFTU19VTklYX1NUUkVBTV9TT0NLRVQsIFVOSVhfU1RSRUFNX1NPQ0tFVF9fQ09OTkVDVFRPLCAiY29ubmVjdHRvIikKICAgIFNfKFNFQ0NMQVNTX1VOSVhfU1RSRUFNX1NPQ0tFVCwgVU5JWF9TVFJFQU1fU09DS0VUX19ORVdDT05OLCAibmV3Y29ubiIpCiAgICBTXyhTRUNDTEFTU19VTklYX1NUUkVBTV9TT0NLRVQsIFVOSVhfU1RSRUFNX1NPQ0tFVF9fQUNDRVBURlJPTSwgImFjY2VwdGZyb20iKQpAQCAtMjUyLDMgKzI1Niw3IEBACiAgICBTXyhTRUNDTEFTU19LRVksIEtFWV9fTElOSywgImxpbmsiKQogICAgU18oU0VDQ0xBU1NfS0VZLCBLRVlfX1NFVEFUVFIsICJzZXRhdHRyIikKICAgIFNfKFNFQ0NMQVNTX0tFWSwgS0VZX19DUkVBVEUsICJjcmVhdGUiKQorICAgU18oU0VDQ0xBU1NfQ09OVEVYVCwgQ09OVEVYVF9fVFJBTlNMQVRFLCAidHJhbnNsYXRlIikKKyAgIFNfKFNFQ0NMQVNTX0NPTlRFWFQsIENPTlRFWFRfX0NPTlRBSU5TLCAiY29udGFpbnMiKQorICAgU18oU0VDQ0xBU1NfRENDUF9TT0NLRVQsIERDQ1BfU09DS0VUX19OT0RFX0JJTkQsICJub2RlX2JpbmQiKQorICAgU18oU0VDQ0xBU1NfRENDUF9TT0NLRVQsIERDQ1BfU09DS0VUX19OQU1FX0NPTk5FQ1QsICJuYW1lX2Nvbm5lY3QiKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAppbmRleCA4MWY0ZjUyLi4yZGU0YjVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApAQCAtMzEyLDYgKzMxMiw4IEBACiAjZGVmaW5lIE5PREVfX1JBV0lQX1JFQ1YgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAogI2RlZmluZSBOT0RFX19SQVdJUF9TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKICNkZWZpbmUgTk9ERV9fRU5GT1JDRV9ERVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIE5PREVfX0RDQ1BfUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAorI2RlZmluZSBOT0RFX19EQ0NQX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKIAogI2RlZmluZSBORVRJRl9fVENQX1JFQ1YgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUSUZfX1RDUF9TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCkBAIC0zMTksNiArMzIxLDggQEAKICNkZWZpbmUgTkVUSUZfX1VEUF9TRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCiAjZGVmaW5lIE5FVElGX19SQVdJUF9SRUNWICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAogI2RlZmluZSBORVRJRl9fUkFXSVBfU0VORCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKKyNkZWZpbmUgTkVUSUZfX0RDQ1BfUkVDViAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIE5FVElGX19EQ0NQX1NFTkQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAogCiAjZGVmaW5lIE5FVExJTktfU09DS0VUX19JT0NUTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTAogI2RlZmluZSBORVRMSU5LX1NPQ0tFVF9fUkVBRCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwKQEAgLTk3MCwzICs5NzQsMzEgQEAKICNkZWZpbmUgS0VZX19MSU5LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMFVMCiAjZGVmaW5lIEtFWV9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBVTAogI2RlZmluZSBLRVlfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwVUwKKworI2RlZmluZSBDT05URVhUX19UUkFOU0xBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKKyNkZWZpbmUgQ09OVEVYVF9fQ09OVEFJTlMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCisKKyNkZWZpbmUgRENDUF9TT0NLRVRfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0VUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX0NSRUFURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19HRVRBVFRSICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fU0VUQVRUUiAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwVUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19SRUxBQkVMRlJPTSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fUkVMQUJFTFRPICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwVUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX0FQUEVORCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19CSU5EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwVUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX0xJU1RFTiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19BQ0NFUFQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fR0VUT1BUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwVUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX1NFVE9QVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19TSFVURE9XTiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fUkVDVkZST00gICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwVUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX1NFTkRUTyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0MDAwMFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19SRUNWX01TRyAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fU0VORF9NU0cgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwVUwKKyNkZWZpbmUgRENDUF9TT0NLRVRfX05BTUVfQklORCAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMFVMCisjZGVmaW5lIERDQ1BfU09DS0VUX19OT0RFX0JJTkQgICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDBVTAorI2RlZmluZSBEQ0NQX1NPQ0tFVF9fTkFNRV9DT05ORUNUICAgICAgICAgICAgICAgICAweDAwODAwMDAwVUwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9jbGFzc190b19zdHJpbmcuaAppbmRleCAyNDMwM2I2Li45ZjNlYmIxIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvY2xhc3NfdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2NsYXNzX3RvX3N0cmluZy5oCkBAIC02MSwzICs2MSw1IEBACiAgICAgU18oImFwcGxldGFsa19zb2NrZXQiKQogICAgIFNfKCJwYWNrZXQiKQogICAgIFNfKCJrZXkiKQorICAgIFNfKCJjb250ZXh0IikKKyAgICBTXygiZGNjcF9zb2NrZXQiKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2ZsYXNrLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAppbmRleCA5NTg4N2FlLi42N2NlZjM3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvZmxhc2suaApAQCAtNjMsNiArNjMsOCBAQAogI2RlZmluZSBTRUNDTEFTU19BUFBMRVRBTEtfU09DS0VUICAgICAgICAgICAgICAgICAgICAgICAgNTYKICNkZWZpbmUgU0VDQ0xBU1NfUEFDS0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU3CiAjZGVmaW5lIFNFQ0NMQVNTX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1OAorI2RlZmluZSBTRUNDTEFTU19DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTkKKyNkZWZpbmUgU0VDQ0xBU1NfRENDUF9TT0NLRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYwCiAKIC8qCiAgKiBTZWN1cml0eSBpZGVudGlmaWVyIGluZGljZXMgZm9yIGluaXRpYWwgZW50aXRpZXMKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAppbmRleCBlZjIyNjdmLi45MWI4OGYwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgImZsYXNrLmgiCiAjaW5jbHVkZSAiYXZjLmgiCiAKQEAgLTEwOCw2ICsxMDksNyBAQAogCQlOTEJMX1JFUVVJUkUsCiAJCU5MQkxfTEFCRUxFRCwKIAl9IG5sYmxfc3RhdGU7CisJc3BpbmxvY2tfdCBubGJsX2xvY2s7CQkvKiBwcm90ZWN0cyBubGJsX3N0YXRlICovCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKaW5kZXggMWVmNzkxNy4uMjEwZWVjNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJUE9MSUNZREJfVkVSU0lPTl9SQU5HRVRSQU5TCiAjZW5kaWYKIAorc3RydWN0IHNrX2J1ZmY7CisKIGV4dGVybiBpbnQgc2VsaW51eF9lbmFibGVkOwogZXh0ZXJuIGludCBzZWxpbnV4X21sc19lbmFibGVkOwogCkBAIC04MCw2ICs4Miw4IEBACiBpbnQgc2VjdXJpdHlfbm9kZV9zaWQodTE2IGRvbWFpbiwgdm9pZCAqYWRkciwgdTMyIGFkZHJsZW4sCiAJdTMyICpvdXRfc2lkKTsKIAordm9pZCBzZWN1cml0eV9za2JfZXh0bGJsX3NpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgYmFzZV9zaWQsIHUzMiAqc2lkKTsKKwogaW50IHNlY3VyaXR5X3ZhbGlkYXRlX3RyYW5zaXRpb24odTMyIG9sZHNpZCwgdTMyIG5ld3NpZCwgdTMyIHRhc2tzaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgdGNsYXNzKTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlbGludXhfbmV0bGFiZWwuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWxpbnV4X25ldGxhYmVsLmgKaW5kZXggOWRlMTBjYy4uMmE3MzJjOSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlbGludXhfbmV0bGFiZWwuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VsaW51eF9uZXRsYWJlbC5oCkBAIC0zOCwxOSArMzgsMTcgQEAKIAogI2lmZGVmIENPTkZJR19ORVRMQUJFTAogdm9pZCBzZWxpbnV4X25ldGxibF9jYWNoZV9pbnZhbGlkYXRlKHZvaWQpOwotaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCSAgICAgIGludCBzb2NrX2ZhbWlseSwKLQkJCQkgICAgICB1MzIgc2lkKTsKK2ludCBzZWxpbnV4X25ldGxibF9za2J1ZmZfZ2V0c2lkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBiYXNlX3NpZCwgdTMyICpzaWQpOworaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKIHZvaWQgc2VsaW51eF9uZXRsYmxfc29ja19ncmFmdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrZXQgKnNvY2spOwotdTMyIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzb2NrX3NpZCk7CiBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjLAogCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCk7Ci11MzIgc2VsaW51eF9uZXRsYmxfc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtKHN0cnVjdCBzb2NrZXQgKnNvY2spOwotdTMyIHNlbGludXhfbmV0bGJsX3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAorCQkJCSAgICAgIGludCBmYW1pbHkpOwogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9pbml0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCiAJCQkJICAgICBpbnQgZmFtaWx5KTsKLXZvaWQgc2VsaW51eF9uZXRsYmxfc2tfY2xvbmVfc2VjdXJpdHkoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKK3ZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfY2xvbmUoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpuZXdzc2VjKTsKIGludCBzZWxpbnV4X25ldGxibF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLApAQCAtNjIsOSArNjAsMTUgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCQkJICAgIGludCBzb2NrX2ZhbWlseSwKLQkJCQkJCSAgICB1MzIgc2lkKQorc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc2tidWZmX2dldHNpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgICAgdTMyIGJhc2Vfc2lkLAorCQkJCQkgICAgICAgdTMyICpzaWQpCit7CisJKnNpZCA9IFNFQ1NJRF9OVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZWxpbnV4X25ldGxibF9zb2NrZXRfcG9zdF9jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTc1LDEyICs3OSw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBzZWxpbnV4X25ldGxibF9pbmV0X2Nvbm5fcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQkJICAgdTMyIHNvY2tfc2lkKQotewotCXJldHVybiBTRUNTSURfTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9uZXRsYmxfc29ja19yY3Zfc2tiKHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjLAogCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICAgICBzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKQpAQCAtODgsMTQgKzg2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHNlbGludXhfbmV0bGJsX3NvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQorc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KAorCQkJCQkgICAgICAgc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKKwkJCQkJICAgICAgIGludCBmYW1pbHkpCiB7Ci0JcmV0dXJuIFNFQ1NJRF9OVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBzZWxpbnV4X25ldGxibF9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiBTRUNTSURfTlVMTDsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9pbml0KApAQCAtMTA1LDcgKzEwMCw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfY2xvbmVfc2VjdXJpdHkoCitzdGF0aWMgaW5saW5lIHZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfY2xvbmUoCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpzc2VjLAogCQkJCQkgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpuZXdzc2VjKQogewpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS94ZnJtLmgKaW5kZXggNTI2YjI4MC4uMTYxZWI1NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3hmcm0uaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUveGZybS5oCkBAIC04LDIwICs4LDE3IEBACiAjZGVmaW5lIF9TRUxJTlVYX1hGUk1fSF8KIAogaW50IHNlbGludXhfeGZybV9wb2xpY3lfYWxsb2Moc3RydWN0IHhmcm1fcG9saWN5ICp4cCwKLQkJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICpzZWNfY3R4LCBzdHJ1Y3Qgc29jayAqc2spOworCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgpOwogaW50IHNlbGludXhfeGZybV9wb2xpY3lfY2xvbmUoc3RydWN0IHhmcm1fcG9saWN5ICpvbGQsIHN0cnVjdCB4ZnJtX3BvbGljeSAqbmV3KTsKIHZvaWQgc2VsaW51eF94ZnJtX3BvbGljeV9mcmVlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApOwogaW50IHNlbGludXhfeGZybV9wb2xpY3lfZGVsZXRlKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHApOwogaW50IHNlbGludXhfeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwKLQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgsIHN0cnVjdCB4ZnJtX3NlY19jdHggKnBvbCwgdTMyIHNlY2lkKTsKKwlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnNlY19jdHgsIHUzMiBzZWNpZCk7CiB2b2lkIHNlbGludXhfeGZybV9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIGludCBzZWxpbnV4X3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIGludCBzZWxpbnV4X3hmcm1fcG9saWN5X2xvb2t1cChzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwLCB1MzIgZmxfc2VjaWQsIHU4IGRpcik7CiBpbnQgc2VsaW51eF94ZnJtX3N0YXRlX3BvbF9mbG93X21hdGNoKHN0cnVjdCB4ZnJtX3N0YXRlICp4LAogCQkJc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgc3RydWN0IGZsb3dpICpmbCk7Ci1pbnQgc2VsaW51eF94ZnJtX2Zsb3dfc3RhdGVfbWF0Y2goc3RydWN0IGZsb3dpICpmbCwgc3RydWN0IHhmcm1fc3RhdGUgKnhmcm0sCi0JCQlzdHJ1Y3QgeGZybV9wb2xpY3kgKnhwKTsKLQogCiAvKgogICogRXh0cmFjdCB0aGUgc2VjdXJpdHkgYmxvYiBmcm9tIHRoZSBzb2NrIChpdCdzIGFjdHVhbGx5IG9uIHRoZSBzb2NrZXQpCkBAIC0zOCw5ICszNSw3IEBACiBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgc2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJc3RydWN0IGF2Y19hdWRpdF9kYXRhICphZCk7CiBpbnQgc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQpOwotdTMyIHNlbGludXhfc29ja2V0X2dldHBlZXJfc3RyZWFtKHN0cnVjdCBzb2NrICpzayk7Ci11MzIgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQsIHU4IHByb3RvKTsKIGludCBzZWxpbnV4X3hmcm1fZGVjb2RlX3Nlc3Npb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpzaWQsIGludCBja2FsbCk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3NvY2tfcmN2X3NrYih1MzIgaXNlY19zaWQsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC01MCwyMCArNDUsMTEgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF94ZnJtX3Bvc3Ryb3V0ZV9sYXN0KHUzMiBpc2VjX3NpZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBhdmNfYXVkaXRfZGF0YSAqYWQpCisJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLCB1OCBwcm90bykKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrKQotewotCXJldHVybiBTRUNTSURfTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiBTRUNTSURfTlVMTDsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IHNlbGludXhfeGZybV9kZWNvZGVfc2Vzc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnNpZCwgaW50IGNrYWxsKQogewogCSpzaWQgPSBTRUNTSURfTlVMTDsKQEAgLTcxLDQgKzU3LDEwIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGlubGluZSB2b2lkIHNlbGludXhfc2tiX3hmcm1fc2lkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2lkKQoreworCWludCBlcnIgPSBzZWxpbnV4X3hmcm1fZGVjb2RlX3Nlc3Npb24oc2tiLCBzaWQsIDApOworCUJVR19PTihlcnIpOworfQorCiAjZW5kaWYgLyogX1NFTElOVVhfWEZSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCmluZGV4IGI4ZjRkMjUuLmNjZmU4NzUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKQEAgLTYwLDcgKzYwLDYgQEAKIAl7IFJUTV9ERUxBQ1RJT04sCU5FVExJTktfUk9VVEVfU09DS0VUX19OTE1TR19XUklURSB9LAogCXsgUlRNX0dFVEFDVElPTiwJTkVUTElOS19ST1VURV9TT0NLRVRfX05MTVNHX1JFQUQgIH0sCiAJeyBSVE1fTkVXUFJFRklYLAlORVRMSU5LX1JPVVRFX1NPQ0tFVF9fTkxNU0dfV1JJVEUgfSwKLQl7IFJUTV9HRVRQUkVGSVgsCU5FVExJTktfUk9VVEVfU09DS0VUX19OTE1TR19SRUFEICB9LAogCXsgUlRNX0dFVE1VTFRJQ0FTVCwJTkVUTElOS19ST1VURV9TT0NLRVRfX05MTVNHX1JFQUQgIH0sCiAJeyBSVE1fR0VUQU5ZQ0FTVCwJTkVUTElOS19ST1VURV9TT0NLRVRfX05MTVNHX1JFQUQgIH0sCiAJeyBSVE1fR0VUTkVJR0hUQkwsCU5FVExJTktfUk9VVEVfU09DS0VUX19OTE1TR19SRUFEICB9LApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9lYml0bWFwLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwppbmRleCBkNTM5MzQ2Li5jZTQ5MmE2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuYwpAQCAtNiw3ICs2LDcgQEAKIC8qCiAgKiBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWwubW9vcmVAaHAuY29tPgogICoKLSAqICAgICAgQWRkZWQgZWJpdG1hcF9leHBvcnQoKSBhbmQgZWJpdG1hcF9pbXBvcnQoKQorICogICAgICBBZGRlZCBzdXBwb3J0IHRvIGltcG9ydC9leHBvcnQgdGhlIE5ldExhYmVsIGNhdGVnb3J5IGJpdG1hcAogICoKICAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKICAqLwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgogI2luY2x1ZGUgImViaXRtYXAuaCIKICNpbmNsdWRlICJwb2xpY3lkYi5oIgogCkBAIC02NywxNDEgKzY4LDEyMCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX05FVExBQkVMCiAvKioKLSAqIGViaXRtYXBfZXhwb3J0IC0gRXhwb3J0IGFuIGViaXRtYXAgdG8gYSB1bnNpZ25lZCBjaGFyIGJpdG1hcCBzdHJpbmcKLSAqIEBzcmM6IHRoZSBlYml0bWFwIHRvIGV4cG9ydAotICogQGRzdDogdGhlIHJlc3VsdGluZyBiaXRtYXAgc3RyaW5nCi0gKiBAZHN0X2xlbjogbGVuZ3RoIG9mIGRzdCBpbiBieXRlcworICogZWJpdG1hcF9uZXRsYmxfZXhwb3J0IC0gRXhwb3J0IGFuIGViaXRtYXAgaW50byBhIE5ldExhYmVsIGNhdGVnb3J5IGJpdG1hcAorICogQGVibWFwOiB0aGUgZWJpdG1hcCB0byBleHBvcnQKKyAqIEBjYXRtYXA6IHRoZSBOZXRMYWJlbCBjYXRlZ29yeSBiaXRtYXAKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIEFsbG9jYXRlIGEgYnVmZmVyIGF0IGxlYXN0IHNyYy0+aGlnaGJpdCBiaXRzIGxvbmcgYW5kIGV4cG9ydCB0aGUgZXh0ZW5zaWJsZQotICogYml0bWFwIGludG8gdGhlIGJ1ZmZlci4gIFRoZSBiaXRtYXAgc3RyaW5nIHdpbGwgYmUgaW4gbGl0dGxlIGVuZGlhbiBmb3JtYXQsCi0gKiBpLmUuIExTQiBmaXJzdC4gIFRoZSB2YWx1ZSByZXR1cm5lZCBpbiBkc3RfbGVuIG1heSBub3QgdGhlIHRydWUgc2l6ZSBvZiB0aGUKLSAqIGJ1ZmZlciBhcyB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mIE1BUFRZUEUuCi0gKiBUaGUgY2FsbGVyIG11c3QgZnJlZSB0aGUgYnVmZmVyIHdoZW4gZmluaXNoZWQuIFJldHVybnMgemVybyBvbiBzdWNjZXNzLAotICogbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKiBFeHBvcnQgYSBTRUxpbnV4IGV4dGVuc2liaWxlIGJpdG1hcCBpbnRvIGEgTmV0TGFiZWwgY2F0ZWdvcnkgYml0bWFwLgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBlcnJvci4KICAqCiAgKi8KLWludCBlYml0bWFwX2V4cG9ydChjb25zdCBzdHJ1Y3QgZWJpdG1hcCAqc3JjLAotCQkgICB1bnNpZ25lZCBjaGFyICoqZHN0LAotCQkgICBzaXplX3QgKmRzdF9sZW4pCitpbnQgZWJpdG1hcF9uZXRsYmxfZXhwb3J0KHN0cnVjdCBlYml0bWFwICplYm1hcCwKKwkJCSAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKipjYXRtYXApCiB7Ci0Jc2l6ZV90IGJpdG1hcF9sZW47Ci0JdW5zaWduZWQgY2hhciAqYml0bWFwOwotCXN0cnVjdCBlYml0bWFwX25vZGUgKml0ZXJfbm9kZTsKLQlNQVBUWVBFIG5vZGVfdmFsOwotCXNpemVfdCBiaXRtYXBfYnl0ZTsKLQl1bnNpZ25lZCBjaGFyIGJpdG1hc2s7CisJc3RydWN0IGViaXRtYXBfbm9kZSAqZV9pdGVyID0gZWJtYXAtPm5vZGU7CisJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKmNfaXRlcjsKKwl1MzIgY21hcF9pZHg7CiAKLQlpZiAoc3JjLT5oaWdoYml0ID09IDApIHsKLQkJKmRzdCA9IE5VTEw7Ci0JCSpkc3RfbGVuID0gMDsKKwkvKiBUaGlzIGZ1bmN0aW9uIGlzIGEgbXVjaCBzaW1wbGVyIGJlY2F1c2UgU0VMaW51eCdzIE1BUFRZUEUgaGFwcGVucworCSAqIHRvIGJlIHRoZSBzYW1lIGFzIE5ldExhYmVsJ3MgTkVUTEJMX0NBVE1BUF9NQVBUWVBFLCBpZiBNQVBUWVBFIGlzCisJICogY2hhbmdlZCBmcm9tIGEgdTY0IHRoaXMgZnVuY3Rpb24gd2lsbCBtb3N0IGxpa2VseSBuZWVkIHRvIGJlIGNoYW5nZWQKKwkgKiBhcyB3ZWxsLiAgSXQncyBub3QgaWRlYWwgYnV0IEkgdGhpbmsgdGhlIHRyYWRlb2ZmIGluIHRlcm1zIG9mCisJICogbmVhdG5lc3MgYW5kIHNwZWVkIGlzIHdvcnRoIGl0LiAqLworCisJaWYgKGVfaXRlciA9PSBOVUxMKSB7CisJCSpjYXRtYXAgPSBOVUxMOwogCQlyZXR1cm4gMDsKIAl9CiAKLQliaXRtYXBfbGVuID0gc3JjLT5oaWdoYml0IC8gODsKLQlpZiAoc3JjLT5oaWdoYml0ICUgNykKLQkJYml0bWFwX2xlbiArPSAxOwotCi0JYml0bWFwID0ga3phbGxvYygoYml0bWFwX2xlbiAmIH4oc2l6ZW9mKE1BUFRZUEUpIC0gMSkpICsKLQkJCSBzaXplb2YoTUFQVFlQRSksCi0JCQkgR0ZQX0FUT01JQyk7Ci0JaWYgKGJpdG1hcCA9PSBOVUxMKQorCWNfaXRlciA9IG5ldGxibF9zZWNhdHRyX2NhdG1hcF9hbGxvYyhHRlBfQVRPTUlDKTsKKwlpZiAoY19pdGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCSpjYXRtYXAgPSBjX2l0ZXI7CisJY19pdGVyLT5zdGFydGJpdCA9IGVfaXRlci0+c3RhcnRiaXQgJiB+KE5FVExCTF9DQVRNQVBfU0laRSAtIDEpOwogCi0JaXRlcl9ub2RlID0gc3JjLT5ub2RlOwotCWRvIHsKLQkJYml0bWFwX2J5dGUgPSBpdGVyX25vZGUtPnN0YXJ0Yml0IC8gODsKLQkJYml0bWFzayA9IDB4ODA7Ci0JCW5vZGVfdmFsID0gaXRlcl9ub2RlLT5tYXA7Ci0JCWRvIHsKLQkJCWlmIChiaXRtYXNrID09IDApIHsKLQkJCQliaXRtYXBfYnl0ZSsrOwotCQkJCWJpdG1hc2sgPSAweDgwOwotCQkJfQotCQkJaWYgKG5vZGVfdmFsICYgKE1BUFRZUEUpMHgwMSkKLQkJCQliaXRtYXBbYml0bWFwX2J5dGVdIHw9IGJpdG1hc2s7Ci0JCQlub2RlX3ZhbCA+Pj0gMTsKLQkJCWJpdG1hc2sgPj49IDE7Ci0JCX0gd2hpbGUgKG5vZGVfdmFsID4gMCk7Ci0JCWl0ZXJfbm9kZSA9IGl0ZXJfbm9kZS0+bmV4dDsKLQl9IHdoaWxlIChpdGVyX25vZGUpOworCXdoaWxlIChlX2l0ZXIgIT0gTlVMTCkgeworCQlpZiAoZV9pdGVyLT5zdGFydGJpdCA+PQorCQkgICAgKGNfaXRlci0+c3RhcnRiaXQgKyBORVRMQkxfQ0FUTUFQX1NJWkUpKSB7CisJCQljX2l0ZXItPm5leHQgPSBuZXRsYmxfc2VjYXR0cl9jYXRtYXBfYWxsb2MoR0ZQX0FUT01JQyk7CisJCQlpZiAoY19pdGVyLT5uZXh0ID09IE5VTEwpCisJCQkJZ290byBuZXRsYmxfZXhwb3J0X2ZhaWx1cmU7CisJCQljX2l0ZXIgPSBjX2l0ZXItPm5leHQ7CisJCQljX2l0ZXItPnN0YXJ0Yml0ID0gZV9pdGVyLT5zdGFydGJpdCAmCisJCQkJICAgICAgICAgICB+KE5FVExCTF9DQVRNQVBfU0laRSAtIDEpOworCQl9CisJCWNtYXBfaWR4ID0gKGVfaXRlci0+c3RhcnRiaXQgLSBjX2l0ZXItPnN0YXJ0Yml0KSAvCisJCQkgICBORVRMQkxfQ0FUTUFQX01BUFNJWkU7CisJCWNfaXRlci0+Yml0bWFwW2NtYXBfaWR4XSA9IGVfaXRlci0+bWFwOworCQllX2l0ZXIgPSBlX2l0ZXItPm5leHQ7CisJfQogCi0JKmRzdCA9IGJpdG1hcDsKLQkqZHN0X2xlbiA9IGJpdG1hcF9sZW47CiAJcmV0dXJuIDA7CisKK25ldGxibF9leHBvcnRfZmFpbHVyZToKKwluZXRsYmxfc2VjYXR0cl9jYXRtYXBfZnJlZSgqY2F0bWFwKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyoqCi0gKiBlYml0bWFwX2ltcG9ydCAtIEltcG9ydCBhbiB1bnNpZ25lZCBjaGFyIGJpdG1hcCBzdHJpbmcgaW50byBhbiBlYml0bWFwCi0gKiBAc3JjOiB0aGUgYml0bWFwIHN0cmluZwotICogQHNyY19sZW46IHRoZSBiaXRtYXAgbGVuZ3RoIGluIGJ5dGVzCi0gKiBAZHN0OiB0aGUgZW1wdHkgZWJpdG1hcAorICogZWJpdG1hcF9uZXRsYmxfaW1wb3J0IC0gSW1wb3J0IGEgTmV0TGFiZWwgY2F0ZWdvcnkgYml0bWFwIGludG8gYW4gZWJpdG1hcAorICogQGVibWFwOiB0aGUgZWJpdG1hcCB0byBleHBvcnQKKyAqIEBjYXRtYXA6IHRoZSBOZXRMYWJlbCBjYXRlZ29yeSBiaXRtYXAKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBsaXR0bGUgZW5kaWFuIGJpdG1hcCBzdHJpbmcgaW4gc3JjIGFuZCBpbXBvcnRzIGl0IGludG8KLSAqIHRoZSBlYml0bWFwIHBvaW50ZWQgdG8gYnkgZHN0LiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbgotICogZmFpbHVyZS4KKyAqIEltcG9ydCBhIE5ldExhYmVsIGNhdGVnb3J5IGJpdG1hcCBpbnRvIGEgU0VMaW51eCBleHRlbnNpYmlsZSBiaXRtYXAuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGVycm9yLgogICoKICAqLwotaW50IGViaXRtYXBfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJICAgc2l6ZV90IHNyY19sZW4sCi0JCSAgIHN0cnVjdCBlYml0bWFwICpkc3QpCitpbnQgZWJpdG1hcF9uZXRsYmxfaW1wb3J0KHN0cnVjdCBlYml0bWFwICplYm1hcCwKKwkJCSAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cl9jYXRtYXAgKmNhdG1hcCkKIHsKLQlzaXplX3Qgc3JjX29mZiA9IDA7Ci0Jc2l6ZV90IG5vZGVfbGltaXQ7Ci0Jc3RydWN0IGViaXRtYXBfbm9kZSAqbm9kZV9uZXc7Ci0Jc3RydWN0IGViaXRtYXBfbm9kZSAqbm9kZV9sYXN0ID0gTlVMTDsKLQl1MzIgaV9ieXRlOwotCXUzMiBpX2JpdDsKLQl1bnNpZ25lZCBjaGFyIHNyY19ieXRlOworCXN0cnVjdCBlYml0bWFwX25vZGUgKmVfaXRlciA9IE5VTEw7CisJc3RydWN0IGViaXRtYXBfbm9kZSAqZW1hcF9wcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY19pdGVyID0gY2F0bWFwOworCXUzMiBjX2lkeDsKIAotCXdoaWxlIChzcmNfb2ZmIDwgc3JjX2xlbikgewotCQlpZiAoc3JjX2xlbiAtIHNyY19vZmYgPj0gc2l6ZW9mKE1BUFRZUEUpKSB7Ci0JCQlpZiAoKihNQVBUWVBFICopJnNyY1tzcmNfb2ZmXSA9PSAwKSB7Ci0JCQkJc3JjX29mZiArPSBzaXplb2YoTUFQVFlQRSk7CisJLyogVGhpcyBmdW5jdGlvbiBpcyBhIG11Y2ggc2ltcGxlciBiZWNhdXNlIFNFTGludXgncyBNQVBUWVBFIGhhcHBlbnMKKwkgKiB0byBiZSB0aGUgc2FtZSBhcyBOZXRMYWJlbCdzIE5FVExCTF9DQVRNQVBfTUFQVFlQRSwgaWYgTUFQVFlQRSBpcworCSAqIGNoYW5nZWQgZnJvbSBhIHU2NCB0aGlzIGZ1bmN0aW9uIHdpbGwgbW9zdCBsaWtlbHkgbmVlZCB0byBiZSBjaGFuZ2VkCisJICogYXMgd2VsbC4gIEl0J3Mgbm90IGlkZWFsIGJ1dCBJIHRoaW5rIHRoZSB0cmFkZW9mZiBpbiB0ZXJtcyBvZgorCSAqIG5lYXRuZXNzIGFuZCBzcGVlZCBpcyB3b3J0aCBpdC4gKi8KKworCWRvIHsKKwkJZm9yIChjX2lkeCA9IDA7IGNfaWR4IDwgTkVUTEJMX0NBVE1BUF9NQVBDTlQ7IGNfaWR4KyspIHsKKwkJCWlmIChjX2l0ZXItPmJpdG1hcFtjX2lkeF0gPT0gMCkKIAkJCQljb250aW51ZTsKLQkJCX0KLQkJCW5vZGVfbGltaXQgPSBzaXplb2YoTUFQVFlQRSk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKHNyY19ieXRlID0gMCwgaV9ieXRlID0gc3JjX29mZjsKLQkJCSAgICAgaV9ieXRlIDwgc3JjX2xlbiAmJiBzcmNfYnl0ZSA9PSAwOwotCQkJICAgICBpX2J5dGUrKykKLQkJCQlzcmNfYnl0ZSB8PSBzcmNbaV9ieXRlXTsKLQkJCWlmIChzcmNfYnl0ZSA9PSAwKQotCQkJCWJyZWFrOwotCQkJbm9kZV9saW1pdCA9IHNyY19sZW4gLSBzcmNfb2ZmOwotCQl9CiAKLQkJbm9kZV9uZXcgPSBremFsbG9jKHNpemVvZigqbm9kZV9uZXcpLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHVubGlrZWx5KG5vZGVfbmV3ID09IE5VTEwpKSB7Ci0JCQllYml0bWFwX2Rlc3Ryb3koZHN0KTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCW5vZGVfbmV3LT5zdGFydGJpdCA9IHNyY19vZmYgKiA4OwotCQlmb3IgKGlfYnl0ZSA9IDA7IGlfYnl0ZSA8IG5vZGVfbGltaXQ7IGlfYnl0ZSsrKSB7Ci0JCQlzcmNfYnl0ZSA9IHNyY1tzcmNfb2ZmKytdOwotCQkJZm9yIChpX2JpdCA9IGlfYnl0ZSAqIDg7IHNyY19ieXRlICE9IDA7IGlfYml0KyspIHsKLQkJCQlpZiAoc3JjX2J5dGUgJiAweDgwKQotCQkJCQlub2RlX25ldy0+bWFwIHw9IE1BUEJJVCA8PCBpX2JpdDsKLQkJCQlzcmNfYnl0ZSA8PD0gMTsKLQkJCX0KLQkJfQorCQkJZV9pdGVyID0ga3phbGxvYyhzaXplb2YoKmVfaXRlciksIEdGUF9BVE9NSUMpOworCQkJaWYgKGVfaXRlciA9PSBOVUxMKQorCQkJCWdvdG8gbmV0bGJsX2ltcG9ydF9mYWlsdXJlOworCQkJaWYgKGVtYXBfcHJldiA9PSBOVUxMKQorCQkJCWVibWFwLT5ub2RlID0gZV9pdGVyOworCQkJZWxzZQorCQkJCWVtYXBfcHJldi0+bmV4dCA9IGVfaXRlcjsKKwkJCWVtYXBfcHJldiA9IGVfaXRlcjsKIAotCQlpZiAobm9kZV9sYXN0ICE9IE5VTEwpCi0JCQlub2RlX2xhc3QtPm5leHQgPSBub2RlX25ldzsKLQkJZWxzZQotCQkJZHN0LT5ub2RlID0gbm9kZV9uZXc7Ci0JCW5vZGVfbGFzdCA9IG5vZGVfbmV3OwotCX0KLQotCWlmIChsaWtlbHkobm9kZV9sYXN0ICE9IE5VTEwpKQotCQlkc3QtPmhpZ2hiaXQgPSBub2RlX2xhc3QtPnN0YXJ0Yml0ICsgTUFQU0laRTsKKwkJCWVfaXRlci0+c3RhcnRiaXQgPSBjX2l0ZXItPnN0YXJ0Yml0ICsKKwkJCQkgICAgICAgICAgIE5FVExCTF9DQVRNQVBfTUFQU0laRSAqIGNfaWR4OworCQkJZV9pdGVyLT5tYXAgPSBjX2l0ZXItPmJpdG1hcFtjX2lkeF07CisJCX0KKwkJY19pdGVyID0gY19pdGVyLT5uZXh0OworCX0gd2hpbGUgKGNfaXRlciAhPSBOVUxMKTsKKwlpZiAoZV9pdGVyICE9IE5VTEwpCisJCWVibWFwLT5oaWdoYml0ID0gZV9pdGVyLT5zdGFydGJpdCArIE1BUFNJWkU7CiAJZWxzZQotCQllYml0bWFwX2luaXQoZHN0KTsKKwkJZWJpdG1hcF9kZXN0cm95KGVibWFwKTsKIAogCXJldHVybiAwOworCituZXRsYmxfaW1wb3J0X2ZhaWx1cmU6CisJZWJpdG1hcF9kZXN0cm95KGVibWFwKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfTkVUTEFCRUwgKi8KIAogaW50IGViaXRtYXBfY29udGFpbnMoc3RydWN0IGViaXRtYXAgKmUxLCBzdHJ1Y3QgZWJpdG1hcCAqZTIpCiB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL2ViaXRtYXAuaCBiL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5oCmluZGV4IGRhMmQ0NjUuLjEyNzBlMzQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvZWJpdG1hcC5oCkBAIC0xNCw2ICsxNCw4IEBACiAjaWZuZGVmIF9TU19FQklUTUFQX0hfCiAjZGVmaW5lIF9TU19FQklUTUFQX0hfCiAKKyNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KKwogI2RlZmluZSBNQVBUWVBFIHU2NAkJCS8qIHBvcnRpb24gb2YgYml0bWFwIGluIGVhY2ggbm9kZSAqLwogI2RlZmluZSBNQVBTSVpFIChzaXplb2YoTUFQVFlQRSkgKiA4KQkvKiBudW1iZXIgb2YgYml0cyBpbiBub2RlIGJpdG1hcCAqLwogI2RlZmluZSBNQVBCSVQgIDFVTEwJCQkvKiBhIGJpdCBpbiB0aGUgbm9kZSBiaXRtYXAgKi8KQEAgLTY5LDE2ICs3MSwyOCBAQAogCiBpbnQgZWJpdG1hcF9jbXAoc3RydWN0IGViaXRtYXAgKmUxLCBzdHJ1Y3QgZWJpdG1hcCAqZTIpOwogaW50IGViaXRtYXBfY3B5KHN0cnVjdCBlYml0bWFwICpkc3QsIHN0cnVjdCBlYml0bWFwICpzcmMpOwotaW50IGViaXRtYXBfZXhwb3J0KGNvbnN0IHN0cnVjdCBlYml0bWFwICpzcmMsCi0JCSAgIHVuc2lnbmVkIGNoYXIgKipkc3QsCi0JCSAgIHNpemVfdCAqZHN0X2xlbik7Ci1pbnQgZWJpdG1hcF9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLAotCQkgICBzaXplX3Qgc3JjX2xlbiwKLQkJICAgc3RydWN0IGViaXRtYXAgKmRzdCk7CiBpbnQgZWJpdG1hcF9jb250YWlucyhzdHJ1Y3QgZWJpdG1hcCAqZTEsIHN0cnVjdCBlYml0bWFwICplMik7CiBpbnQgZWJpdG1hcF9nZXRfYml0KHN0cnVjdCBlYml0bWFwICplLCB1bnNpZ25lZCBsb25nIGJpdCk7CiBpbnQgZWJpdG1hcF9zZXRfYml0KHN0cnVjdCBlYml0bWFwICplLCB1bnNpZ25lZCBsb25nIGJpdCwgaW50IHZhbHVlKTsKIHZvaWQgZWJpdG1hcF9kZXN0cm95KHN0cnVjdCBlYml0bWFwICplKTsKIGludCBlYml0bWFwX3JlYWQoc3RydWN0IGViaXRtYXAgKmUsIHZvaWQgKmZwKTsKIAorI2lmZGVmIENPTkZJR19ORVRMQUJFTAoraW50IGViaXRtYXBfbmV0bGJsX2V4cG9ydChzdHJ1Y3QgZWJpdG1hcCAqZWJtYXAsCisJCQkgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICoqY2F0bWFwKTsKK2ludCBlYml0bWFwX25ldGxibF9pbXBvcnQoc3RydWN0IGViaXRtYXAgKmVibWFwLAorCQkJICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBlYml0bWFwX25ldGxibF9leHBvcnQoc3RydWN0IGViaXRtYXAgKmVibWFwLAorCQkJCXN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHJfY2F0bWFwICoqY2F0bWFwKQoreworCXJldHVybiAtRU5PTUVNOworfQorc3RhdGljIGlubGluZSBpbnQgZWJpdG1hcF9uZXRsYmxfaW1wb3J0KHN0cnVjdCBlYml0bWFwICplYm1hcCwKKwkJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyX2NhdG1hcCAqY2F0bWFwKQoreworCXJldHVybiAtRU5PTUVNOworfQorI2VuZGlmCisKICNlbmRpZgkvKiBfU1NfRUJJVE1BUF9IXyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKaW5kZXggMmNjYThlMi4uYjRmNjgyZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCkBAIC0xMyw3ICsxMyw3IEBACiAvKgogICogVXBkYXRlZDogSGV3bGV0dC1QYWNrYXJkIDxwYXVsLm1vb3JlQGhwLmNvbT4KICAqCi0gKiAgICAgIEFkZGVkIHN1cHBvcnQgdG8gaW1wb3J0L2V4cG9ydCB0aGUgTUxTIGxhYmVsCisgKiAgICAgIEFkZGVkIHN1cHBvcnQgdG8gaW1wb3J0L2V4cG9ydCB0aGUgTUxTIGxhYmVsIGZyb20gTmV0TGFiZWwKICAqCiAgKiAoYykgQ29weXJpZ2h0IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuLCAyMDA2CiAgKi8KQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KICNpbmNsdWRlICJzaWR0YWIuaCIKICNpbmNsdWRlICJtbHMuaCIKICNpbmNsdWRlICJwb2xpY3lkYi5oIgpAQCAtNTcxLDE2MyArNTcyLDEwOCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCisjaWZkZWYgQ09ORklHX05FVExBQkVMCiAvKioKLSAqIG1sc19leHBvcnRfbHZsIC0gRXhwb3J0IHRoZSBNTFMgc2Vuc2l0aXZpdHkgbGV2ZWxzCisgKiBtbHNfZXhwb3J0X25ldGxibF9sdmwgLSBFeHBvcnQgdGhlIE1MUyBzZW5zaXRpdml0eSBsZXZlbHMgdG8gTmV0TGFiZWwKICAqIEBjb250ZXh0OiB0aGUgc2VjdXJpdHkgY29udGV4dAotICogQGxvdzogdGhlIGxvdyBzZW5zaXRpdml0eSBsZXZlbAotICogQGhpZ2g6IHRoZSBoaWdoIHNlbnNpdGl2aXR5IGxldmVsCisgKiBAc2VjYXR0cjogdGhlIE5ldExhYmVsIHNlY3VyaXR5IGF0dHJpYnV0ZXMKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIEdpdmVuIHRoZSBzZWN1cml0eSBjb250ZXh0IGNvcHkgdGhlIGxvdyBNTFMgc2Vuc2l0aXZpdHkgbGV2ZWwgaW50byBsdmxfbG93Ci0gKiBhbmQgdGhlIGhpZ2ggc2Vuc2l0aXZpdHkgbGV2ZWwgaW4gbHZsX2hpZ2guICBUaGUgTUxTIGxldmVscyBhcmUgb25seQotICogZXhwb3J0ZWQgaWYgdGhlIHBvaW50ZXJzIGFyZSBub3QgTlVMTCwgaWYgdGhleSBhcmUgTlVMTCB0aGVuIHRoYXQgbGV2ZWwgaXMKLSAqIG5vdCBleHBvcnRlZC4KKyAqIEdpdmVuIHRoZSBzZWN1cml0eSBjb250ZXh0IGNvcHkgdGhlIGxvdyBNTFMgc2Vuc2l0aXZpdHkgbGV2ZWwgaW50byB0aGUKKyAqIE5ldExhYmVsIE1MUyBzZW5zaXRpdml0eSBsZXZlbCBmaWVsZC4KICAqCiAgKi8KLXZvaWQgbWxzX2V4cG9ydF9sdmwoY29uc3Qgc3RydWN0IGNvbnRleHQgKmNvbnRleHQsIHUzMiAqbG93LCB1MzIgKmhpZ2gpCit2b2lkIG1sc19leHBvcnRfbmV0bGJsX2x2bChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCSAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7CiAJaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQogCQlyZXR1cm47CiAKLQlpZiAobG93ICE9IE5VTEwpCi0JCSpsb3cgPSBjb250ZXh0LT5yYW5nZS5sZXZlbFswXS5zZW5zIC0gMTsKLQlpZiAoaGlnaCAhPSBOVUxMKQotCQkqaGlnaCA9IGNvbnRleHQtPnJhbmdlLmxldmVsWzFdLnNlbnMgLSAxOworCXNlY2F0dHItPm1sc19sdmwgPSBjb250ZXh0LT5yYW5nZS5sZXZlbFswXS5zZW5zIC0gMTsKKwlzZWNhdHRyLT5mbGFncyB8PSBORVRMQkxfU0VDQVRUUl9NTFNfTFZMOwogfQogCiAvKioKLSAqIG1sc19pbXBvcnRfbHZsIC0gSW1wb3J0IHRoZSBNTFMgc2Vuc2l0aXZpdHkgbGV2ZWxzCisgKiBtbHNfaW1wb3J0X25ldGxibF9sdmwgLSBJbXBvcnQgdGhlIE5ldExhYmVsIE1MUyBzZW5zaXRpdml0eSBsZXZlbHMKICAqIEBjb250ZXh0OiB0aGUgc2VjdXJpdHkgY29udGV4dAotICogQGxvdzogdGhlIGxvdyBzZW5zaXRpdml0eSBsZXZlbAotICogQGhpZ2g6IHRoZSBoaWdoIHNlbnNpdGl2aXR5IGxldmVsCisgKiBAc2VjYXR0cjogdGhlIE5ldExhYmVsIHNlY3VyaXR5IGF0dHJpYnV0ZXMKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqIEdpdmVuIHRoZSBzZWN1cml0eSBjb250ZXh0IGFuZCB0aGUgdHdvIHNlbnNpdGl2dHkgbGV2ZWxzLCBzZXQgdGhlIE1MUyBsZXZlbHMKLSAqIGluIHRoZSBjb250ZXh0IGFjY29yZGluZyB0aGUgdHdvIGdpdmVuIGFzIHBhcmFtZXRlcnMuICBSZXR1cm5zIHplcm8gb24KLSAqIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICogR2l2ZW4gdGhlIHNlY3VyaXR5IGNvbnRleHQgYW5kIHRoZSBOZXRMYWJlbCBzZWN1cml0eSBhdHRyaWJ1dGVzLCBjb3B5IHRoZQorICogTmV0TGFiZWwgTUxTIHNlbnNpdGl2aXR5IGxldmVsIGludG8gdGhlIGNvbnRleHQuCiAgKgogICovCi12b2lkIG1sc19pbXBvcnRfbHZsKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LCB1MzIgbG93LCB1MzIgaGlnaCkKK3ZvaWQgbWxzX2ltcG9ydF9uZXRsYmxfbHZsKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAorCQkJICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKIAlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCiAJCXJldHVybjsKIAotCWNvbnRleHQtPnJhbmdlLmxldmVsWzBdLnNlbnMgPSBsb3cgKyAxOwotCWNvbnRleHQtPnJhbmdlLmxldmVsWzFdLnNlbnMgPSBoaWdoICsgMTsKKwljb250ZXh0LT5yYW5nZS5sZXZlbFswXS5zZW5zID0gc2VjYXR0ci0+bWxzX2x2bCArIDE7CisJY29udGV4dC0+cmFuZ2UubGV2ZWxbMV0uc2VucyA9IGNvbnRleHQtPnJhbmdlLmxldmVsWzBdLnNlbnM7CiB9CiAKIC8qKgotICogbWxzX2V4cG9ydF9jYXQgLSBFeHBvcnQgdGhlIE1MUyBjYXRlZ29yaWVzCisgKiBtbHNfZXhwb3J0X25ldGxibF9jYXQgLSBFeHBvcnQgdGhlIE1MUyBjYXRlZ29yaWVzIHRvIE5ldExhYmVsCiAgKiBAY29udGV4dDogdGhlIHNlY3VyaXR5IGNvbnRleHQKLSAqIEBsb3c6IHRoZSBsb3cgY2F0ZWdvcnkKLSAqIEBsb3dfbGVuOiBsZW5ndGggb2YgdGhlIGNhdF9sb3cgYml0bWFwIGluIGJ5dGVzCi0gKiBAaGlnaDogdGhlIGhpZ2ggY2F0ZWdvcnkKLSAqIEBoaWdoX2xlbjogbGVuZ3RoIG9mIHRoZSBjYXRfaGlnaCBiaXRtYXAgaW4gYnl0ZXMKKyAqIEBzZWNhdHRyOiB0aGUgTmV0TGFiZWwgc2VjdXJpdHkgYXR0cmlidXRlcwogICoKICAqIERlc2NyaXB0aW9uOgotICogR2l2ZW4gdGhlIHNlY3VyaXR5IGNvbnRleHQgZXhwb3J0IHRoZSBsb3cgTUxTIGNhdGVnb3J5IGJpdG1hcCBpbnRvIGNhdF9sb3cKLSAqIGFuZCB0aGUgaGlnaCBjYXRlZ29yeSBiaXRtYXAgaW50byBjYXRfaGlnaC4gIFRoZSBNTFMgY2F0ZWdvcmllcyBhcmUgb25seQotICogZXhwb3J0ZWQgaWYgdGhlIHBvaW50ZXJzIGFyZSBub3QgTlVMTCwgaWYgdGhleSBhcmUgTlVMTCB0aGVuIHRoYXQgbGV2ZWwgaXMKLSAqIG5vdCBleHBvcnRlZC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBmcmVlaW5nIHRoZSBtZW1vcnkgd2hlbgotICogZmluaXNoZWQuICBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKiBHaXZlbiB0aGUgc2VjdXJpdHkgY29udGV4dCBjb3B5IHRoZSBsb3cgTUxTIGNhdGVnb3JpZXMgaW50byB0aGUgTmV0TGFiZWwKKyAqIE1MUyBjYXRlZ29yeSBmaWVsZC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBtbHNfZXhwb3J0X2NhdChjb25zdCBzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKLQkJICAgdW5zaWduZWQgY2hhciAqKmxvdywKLQkJICAgc2l6ZV90ICpsb3dfbGVuLAotCQkgICB1bnNpZ25lZCBjaGFyICoqaGlnaCwKLQkJICAgc2l6ZV90ICpoaWdoX2xlbikKK2ludCBtbHNfZXhwb3J0X25ldGxibF9jYXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCisJCQkgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7Ci0JaW50IHJjID0gLUVQRVJNOworCWludCByYzsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkgewotCQkqbG93ID0gTlVMTDsKLQkJKmxvd19sZW4gPSAwOwotCQkqaGlnaCA9IE5VTEw7Ci0JCSpoaWdoX2xlbiA9IDA7CisJaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlpZiAobG93ICE9IE5VTEwpIHsKLQkJcmMgPSBlYml0bWFwX2V4cG9ydCgmY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uY2F0LAotCQkJCSAgICBsb3csCi0JCQkJICAgIGxvd19sZW4pOwotCQlpZiAocmMgIT0gMCkKLQkJCWdvdG8gZXhwb3J0X2NhdF9mYWlsdXJlOwotCX0KLQlpZiAoaGlnaCAhPSBOVUxMKSB7Ci0JCXJjID0gZWJpdG1hcF9leHBvcnQoJmNvbnRleHQtPnJhbmdlLmxldmVsWzFdLmNhdCwKLQkJCQkgICAgaGlnaCwKLQkJCQkgICAgaGlnaF9sZW4pOwotCQlpZiAocmMgIT0gMCkKLQkJCWdvdG8gZXhwb3J0X2NhdF9mYWlsdXJlOwotCX0KKwlyYyA9IGViaXRtYXBfbmV0bGJsX2V4cG9ydCgmY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uY2F0LAorCQkJCSAgICZzZWNhdHRyLT5tbHNfY2F0KTsKKwlpZiAocmMgPT0gMCAmJiBzZWNhdHRyLT5tbHNfY2F0ICE9IE5VTEwpCisJCXNlY2F0dHItPmZsYWdzIHw9IE5FVExCTF9TRUNBVFRSX01MU19DQVQ7CiAKLQlyZXR1cm4gMDsKLQotZXhwb3J0X2NhdF9mYWlsdXJlOgotCWlmIChsb3cgIT0gTlVMTCkgewotCQlrZnJlZSgqbG93KTsKLQkJKmxvdyA9IE5VTEw7Ci0JCSpsb3dfbGVuID0gMDsKLQl9Ci0JaWYgKGhpZ2ggIT0gTlVMTCkgewotCQlrZnJlZSgqaGlnaCk7Ci0JCSpoaWdoID0gTlVMTDsKLQkJKmhpZ2hfbGVuID0gMDsKLQl9CiAJcmV0dXJuIHJjOwogfQogCiAvKioKLSAqIG1sc19pbXBvcnRfY2F0IC0gSW1wb3J0IHRoZSBNTFMgY2F0ZWdvcmllcworICogbWxzX2ltcG9ydF9uZXRsYmxfY2F0IC0gSW1wb3J0IHRoZSBNTFMgY2F0ZWdvcmllcyBmcm9tIE5ldExhYmVsCiAgKiBAY29udGV4dDogdGhlIHNlY3VyaXR5IGNvbnRleHQKLSAqIEBsb3c6IHRoZSBsb3cgY2F0ZWdvcnkKLSAqIEBsb3dfbGVuOiBsZW5ndGggb2YgdGhlIGNhdF9sb3cgYml0bWFwIGluIGJ5dGVzCi0gKiBAaGlnaDogdGhlIGhpZ2ggY2F0ZWdvcnkKLSAqIEBoaWdoX2xlbjogbGVuZ3RoIG9mIHRoZSBjYXRfaGlnaCBiaXRtYXAgaW4gYnl0ZXMKKyAqIEBzZWNhdHRyOiB0aGUgTmV0TGFiZWwgc2VjdXJpdHkgYXR0cmlidXRlcwogICoKICAqIERlc2NyaXB0aW9uOgotICogR2l2ZW4gdGhlIHNlY3VyaXR5IGNvbnRleHQgYW5kIHRoZSB0d28gY2F0ZWdvcnkgYml0bWFwIHN0cmluZ3MgaW1wb3J0IHRoZQotICogY2F0ZWdvcmllcyBpbnRvIHRoZSBzZWN1cml0eSBjb250ZXh0LiAgVGhlIE1MUyBjYXRlZ29yaWVzIGFyZSBvbmx5IGltcG9ydGVkCi0gKiBpZiB0aGUgcG9pbnRlcnMgYXJlIG5vdCBOVUxMLCBpZiB0aGV5IGFyZSBOVUxMIHRoZXkgYXJlIHNraXBwZWQuICBSZXR1cm5zCi0gKiB6ZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgorICogQ29weSB0aGUgTmV0TGFiZWwgc2VjdXJpdHkgYXR0cmlidXRlcyBpbnRvIHRoZSBTRUxpbnV4IGNvbnRleHQ7IHNpbmNlIHRoZQorICogTmV0TGFiZWwgc2VjdXJpdHkgYXR0cmlidXRlIG9ubHkgY29udGFpbnMgYSBzaW5nbGUgTUxTIGNhdGVnb3J5IHVzZSBpdCBmb3IKKyAqIGJvdGggdGhlIGxvdyBhbmQgaGlnaCBjYXRlZ29yaWVzIG9mIHRoZSBjb250ZXh0LiAgUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsCisgKiBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBtbHNfaW1wb3J0X2NhdChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKLQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbG93LAotCQkgICBzaXplX3QgbG93X2xlbiwKLQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGlnaCwKLQkJICAgc2l6ZV90IGhpZ2hfbGVuKQoraW50IG1sc19pbXBvcnRfbmV0bGJsX2NhdChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCSAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQlpbnQgcmMgPSAtRVBFUk07CisJaW50IHJjOwogCiAJaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAotCWlmIChsb3cgIT0gTlVMTCkgewotCQlyYyA9IGViaXRtYXBfaW1wb3J0KGxvdywKLQkJCQkgICAgbG93X2xlbiwKLQkJCQkgICAgJmNvbnRleHQtPnJhbmdlLmxldmVsWzBdLmNhdCk7Ci0JCWlmIChyYyAhPSAwKQotCQkJZ290byBpbXBvcnRfY2F0X2ZhaWx1cmU7Ci0JfQotCWlmIChoaWdoICE9IE5VTEwpIHsKLQkJaWYgKGhpZ2ggPT0gbG93KQotCQkJcmMgPSBlYml0bWFwX2NweSgmY29udGV4dC0+cmFuZ2UubGV2ZWxbMV0uY2F0LAotCQkJCQkgJmNvbnRleHQtPnJhbmdlLmxldmVsWzBdLmNhdCk7Ci0JCWVsc2UKLQkJCXJjID0gZWJpdG1hcF9pbXBvcnQoaGlnaCwKLQkJCQkJICAgIGhpZ2hfbGVuLAotCQkJCQkgICAgJmNvbnRleHQtPnJhbmdlLmxldmVsWzFdLmNhdCk7Ci0JCWlmIChyYyAhPSAwKQotCQkJZ290byBpbXBvcnRfY2F0X2ZhaWx1cmU7Ci0JfQorCXJjID0gZWJpdG1hcF9uZXRsYmxfaW1wb3J0KCZjb250ZXh0LT5yYW5nZS5sZXZlbFswXS5jYXQsCisJCQkJICAgc2VjYXR0ci0+bWxzX2NhdCk7CisJaWYgKHJjICE9IDApCisJCWdvdG8gaW1wb3J0X25ldGxibF9jYXRfZmFpbHVyZTsKKworCXJjID0gZWJpdG1hcF9jcHkoJmNvbnRleHQtPnJhbmdlLmxldmVsWzFdLmNhdCwKKwkJCSAmY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uY2F0KTsKKwlpZiAocmMgIT0gMCkKKwkJZ290byBpbXBvcnRfbmV0bGJsX2NhdF9mYWlsdXJlOwogCiAJcmV0dXJuIDA7CiAKLWltcG9ydF9jYXRfZmFpbHVyZToKK2ltcG9ydF9uZXRsYmxfY2F0X2ZhaWx1cmU6CiAJZWJpdG1hcF9kZXN0cm95KCZjb250ZXh0LT5yYW5nZS5sZXZlbFswXS5jYXQpOwogCWViaXRtYXBfZGVzdHJveSgmY29udGV4dC0+cmFuZ2UubGV2ZWxbMV0uY2F0KTsKIAlyZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogQ09ORklHX05FVExBQkVMICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaAppbmRleCBkZjYwMzJjLi42NjFkNmZjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKQEAgLTEzLDcgKzEzLDcgQEAKIC8qCiAgKiBVcGRhdGVkOiBIZXdsZXR0LVBhY2thcmQgPHBhdWwubW9vcmVAaHAuY29tPgogICoKLSAqICAgICAgQWRkZWQgc3VwcG9ydCB0byBpbXBvcnQvZXhwb3J0IHRoZSBNTFMgbGFiZWwKKyAqICAgICAgQWRkZWQgc3VwcG9ydCB0byBpbXBvcnQvZXhwb3J0IHRoZSBNTFMgbGFiZWwgZnJvbSBOZXRMYWJlbAogICoKICAqIChjKSBDb3B5cmlnaHQgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4sIDIwMDYKICAqLwpAQCAtNjksMTkgKzY5LDM3IEBACiBpbnQgbWxzX3NldHVwX3VzZXJfcmFuZ2Uoc3RydWN0IGNvbnRleHQgKmZyb21jb24sIHN0cnVjdCB1c2VyX2RhdHVtICp1c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb250ZXh0ICp1c2VyY29uKTsKIAotdm9pZCBtbHNfZXhwb3J0X2x2bChjb25zdCBzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwgdTMyICpsb3csIHUzMiAqaGlnaCk7Ci12b2lkIG1sc19pbXBvcnRfbHZsKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LCB1MzIgbG93LCB1MzIgaGlnaCk7Ci0KLWludCBtbHNfZXhwb3J0X2NhdChjb25zdCBzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKLQkJICAgdW5zaWduZWQgY2hhciAqKmxvdywKLQkJICAgc2l6ZV90ICpsb3dfbGVuLAotCQkgICB1bnNpZ25lZCBjaGFyICoqaGlnaCwKLQkJICAgc2l6ZV90ICpoaWdoX2xlbik7Ci1pbnQgbWxzX2ltcG9ydF9jYXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCi0JCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxvdywKLQkJICAgc2l6ZV90IGxvd19sZW4sCi0JCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhpZ2gsCi0JCSAgIHNpemVfdCBoaWdoX2xlbik7CisjaWZkZWYgQ09ORklHX05FVExBQkVMCit2b2lkIG1sc19leHBvcnRfbmV0bGJsX2x2bChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCSAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordm9pZCBtbHNfaW1wb3J0X25ldGxibF9sdmwoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCisJCQkgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKTsKK2ludCBtbHNfZXhwb3J0X25ldGxibF9jYXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCisJCQkgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOworaW50IG1sc19pbXBvcnRfbmV0bGJsX2NhdChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCSAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1sc19leHBvcnRfbmV0bGJsX2x2bChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCQkJIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJcmV0dXJuOworfQorc3RhdGljIGlubGluZSB2b2lkIG1sc19pbXBvcnRfbmV0bGJsX2x2bChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwKKwkJCQkJIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCit7CisJcmV0dXJuOworfQorc3RhdGljIGlubGluZSBpbnQgbWxzX2V4cG9ydF9uZXRsYmxfY2F0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAorCQkJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCXJldHVybiAtRU5PTUVNOworfQorc3RhdGljIGlubGluZSBpbnQgbWxzX2ltcG9ydF9uZXRsYmxfY2F0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAorCQkJCQlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCXJldHVybiAtRU5PTUVNOworfQorI2VuZGlmCiAKICNlbmRpZgkvKiBfU1NfTUxTX0ggKi8KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGJhNDg5NjEuLmNkNzljNjMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNsYXNzX2Rlc3Ryb3kodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqcCkKK3N0YXRpYyBpbnQgY2xzX2Rlc3Ryb3kodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgY2xhc3NfZGF0dW0gKmNsYWRhdHVtOwogCXN0cnVjdCBjb25zdHJhaW50X25vZGUgKmNvbnN0cmFpbnQsICpjdGVtcDsKQEAgLTU2Niw3ICs1NjYsNyBAQAogc3RhdGljIGludCAoKmRlc3Ryb3lfZltTWU1fTlVNXSkgKHZvaWQgKmtleSwgdm9pZCAqZGF0dW0sIHZvaWQgKmRhdGFwKSA9CiB7CiAJY29tbW9uX2Rlc3Ryb3ksCi0JY2xhc3NfZGVzdHJveSwKKwljbHNfZGVzdHJveSwKIAlyb2xlX2Rlc3Ryb3ksCiAJdHlwZV9kZXN0cm95LAogCXVzZXJfZGVzdHJveSwKQEAgLTExMjQsNyArMTEyNCw3IEBACiBvdXQ6CiAJcmV0dXJuIHJjOwogYmFkOgotCWNsYXNzX2Rlc3Ryb3koa2V5LCBjbGFkYXR1bSwgTlVMTCk7CisJY2xzX2Rlc3Ryb3koa2V5LCBjbGFkYXR1bSwgTlVMTCk7CiAJZ290byBvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCA0MDg4MjA0Li5iZGI3MDcwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTUzLDYgKzU0LDggQEAKICNpbmNsdWRlICJtbHMuaCIKICNpbmNsdWRlICJvYmpzZWMuaCIKICNpbmNsdWRlICJzZWxpbnV4X25ldGxhYmVsLmgiCisjaW5jbHVkZSAieGZybS5oIgorI2luY2x1ZGUgImViaXRtYXAuaCIKIAogZXh0ZXJuIHZvaWQgc2Vsbmxfbm90aWZ5X3BvbGljeWxvYWQodTMyIHNlcW5vKTsKIHVuc2lnbmVkIGludCBwb2xpY3lkYl9sb2FkZWRfdmVyc2lvbjsKQEAgLTIxOTAsNiArMjE5MywzMiBAQAogCWF1cnVsZV9jYWxsYmFjayA9IGNhbGxiYWNrOwogfQogCisvKioKKyAqIHNlY3VyaXR5X3NrYl9leHRsYmxfc2lkIC0gRGV0ZXJtaW5lIHRoZSBleHRlcm5hbCBsYWJlbCBvZiBhIHBhY2tldAorICogQHNrYjogdGhlIHBhY2tldAorICogQGJhc2Vfc2lkOiB0aGUgU0VMaW51eCBTSUQgdG8gdXNlIGFzIGEgY29udGV4dCBmb3IgTUxTIG9ubHkgZXh0ZXJuYWwgbGFiZWxzCisgKiBAc2lkOiB0aGUgcGFja2V0J3MgU0lECisgKgorICogRGVzY3JpcHRpb246CisgKiBDaGVjayB0aGUgdmFyaW91cyBkaWZmZXJlbnQgZm9ybXMgb2YgZXh0ZXJuYWwgcGFja2V0IGxhYmVsaW5nIGFuZCBkZXRlcm1pbmUKKyAqIHRoZSBleHRlcm5hbCBTSUQgZm9yIHRoZSBwYWNrZXQuCisgKgorICovCit2b2lkIHNlY3VyaXR5X3NrYl9leHRsYmxfc2lkKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBiYXNlX3NpZCwgdTMyICpzaWQpCit7CisJdTMyIHhmcm1fc2lkOworCXUzMiBubGJsX3NpZDsKKworCXNlbGludXhfc2tiX3hmcm1fc2lkKHNrYiwgJnhmcm1fc2lkKTsKKwlpZiAoc2VsaW51eF9uZXRsYmxfc2tidWZmX2dldHNpZChza2IsCisJCQkJCSAoeGZybV9zaWQgPT0gU0VDU0lEX05VTEwgPworCQkJCQkgIGJhc2Vfc2lkIDogeGZybV9zaWQpLAorCQkJCQkgJm5sYmxfc2lkKSAhPSAwKQorCQlubGJsX3NpZCA9IFNFQ1NJRF9OVUxMOworCisJKnNpZCA9IChubGJsX3NpZCA9PSBTRUNTSURfTlVMTCA/IHhmcm1fc2lkIDogbmxibF9zaWQpOworfQorCiAjaWZkZWYgQ09ORklHX05FVExBQkVMCiAvKgogICogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdlIHN0b3JlIGluc2lkZSB0aGUgTmV0TGFiZWwgY2FjaGUgYmxvY2suCkBAIC0yMjU0LDggKzIyODMsNiBAQAogCWNhY2hlID0ga3phbGxvYyhzaXplb2YoKmNhY2hlKSwJR0ZQX0FUT01JQyk7CiAJaWYgKGNhY2hlID09IE5VTEwpCiAJCWdvdG8gbmV0bGJsX2NhY2hlX2FkZF9yZXR1cm47Ci0Jc2VjYXR0ci5jYWNoZS0+ZnJlZSA9IHNlbGludXhfbmV0bGJsX2NhY2hlX2ZyZWU7Ci0Jc2VjYXR0ci5jYWNoZS0+ZGF0YSA9ICh2b2lkICopY2FjaGU7CiAKIAljYWNoZS0+dHlwZSA9IE5FVExCTF9DQUNIRV9UX01MUzsKIAlpZiAoZWJpdG1hcF9jcHkoJmNhY2hlLT5kYXRhLm1sc19sYWJlbC5sZXZlbFswXS5jYXQsCkBAIC0yMjY4LDYgKzIyOTUsMTAgQEAKIAljYWNoZS0+ZGF0YS5tbHNfbGFiZWwubGV2ZWxbMF0uc2VucyA9IGN0eC0+cmFuZ2UubGV2ZWxbMF0uc2VuczsKIAljYWNoZS0+ZGF0YS5tbHNfbGFiZWwubGV2ZWxbMV0uc2VucyA9IGN0eC0+cmFuZ2UubGV2ZWxbMF0uc2VuczsKIAorCXNlY2F0dHIuY2FjaGUtPmZyZWUgPSBzZWxpbnV4X25ldGxibF9jYWNoZV9mcmVlOworCXNlY2F0dHIuY2FjaGUtPmRhdGEgPSAodm9pZCAqKWNhY2hlOworCXNlY2F0dHIuZmxhZ3MgPSBORVRMQkxfU0VDQVRUUl9DQUNIRTsKKwogCW5ldGxibF9jYWNoZV9hZGQoc2tiLCAmc2VjYXR0cik7CiAKIG5ldGxibF9jYWNoZV9hZGRfcmV0dXJuOgpAQCAtMjMxMyw3ICsyMzQ0LDcgQEAKIAogCVBPTElDWV9SRExPQ0s7CiAKLQlpZiAoc2VjYXR0ci0+Y2FjaGUpIHsKKwlpZiAoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9DQUNIRSkgewogCQljYWNoZSA9IE5FVExCTF9DQUNIRShzZWNhdHRyLT5jYWNoZS0+ZGF0YSk7CiAJCXN3aXRjaCAoY2FjaGUtPnR5cGUpIHsKIAkJY2FzZSBORVRMQkxfQ0FDSEVfVF9TSUQ6CkBAIC0yMzQ2LDcgKzIzNzcsNyBAQAogCQlkZWZhdWx0OgogCQkJZ290byBuZXRsYmxfc2VjYXR0cl90b19zaWRfcmV0dXJuOwogCQl9Ci0JfSBlbHNlIGlmIChzZWNhdHRyLT5tbHNfbHZsX3ZsZCkgeworCX0gZWxzZSBpZiAoc2VjYXR0ci0+ZmxhZ3MgJiBORVRMQkxfU0VDQVRUUl9NTFNfTFZMKSB7CiAJCWN0eCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgYmFzZV9zaWQpOwogCQlpZiAoY3R4ID09IE5VTEwpCiAJCQlnb3RvIG5ldGxibF9zZWNhdHRyX3RvX3NpZF9yZXR1cm47CkBAIC0yMzU0LDEzICsyMzg1LDEwIEBACiAJCWN0eF9uZXcudXNlciA9IGN0eC0+dXNlcjsKIAkJY3R4X25ldy5yb2xlID0gY3R4LT5yb2xlOwogCQljdHhfbmV3LnR5cGUgPSBjdHgtPnR5cGU7Ci0JCW1sc19pbXBvcnRfbHZsKCZjdHhfbmV3LCBzZWNhdHRyLT5tbHNfbHZsLCBzZWNhdHRyLT5tbHNfbHZsKTsKLQkJaWYgKHNlY2F0dHItPm1sc19jYXQpIHsKLQkJCWlmIChtbHNfaW1wb3J0X2NhdCgmY3R4X25ldywKLQkJCQkJICAgc2VjYXR0ci0+bWxzX2NhdCwKLQkJCQkJICAgc2VjYXR0ci0+bWxzX2NhdF9sZW4sCi0JCQkJCSAgIE5VTEwsCi0JCQkJCSAgIDApICE9IDApCisJCW1sc19pbXBvcnRfbmV0bGJsX2x2bCgmY3R4X25ldywgc2VjYXR0cik7CisJCWlmIChzZWNhdHRyLT5mbGFncyAmIE5FVExCTF9TRUNBVFRSX01MU19DQVQpIHsKKwkJCWlmIChlYml0bWFwX25ldGxibF9pbXBvcnQoJmN0eF9uZXcucmFuZ2UubGV2ZWxbMF0uY2F0LAorCQkJCQkJICBzZWNhdHRyLT5tbHNfY2F0KSAhPSAwKQogCQkJCWdvdG8gbmV0bGJsX3NlY2F0dHJfdG9fc2lkX3JldHVybjsKIAkJCWN0eF9uZXcucmFuZ2UubGV2ZWxbMV0uY2F0LmhpZ2hiaXQgPQogCQkJCWN0eF9uZXcucmFuZ2UubGV2ZWxbMF0uY2F0LmhpZ2hiaXQ7CkBAIC0yNDA1LDIwICsyNDMzLDIwIEBACiAgKiBhc3NpZ24gdG8gdGhlIHBhY2tldC4gIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZXMgb24gZmFpbHVyZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgc2VsaW51eF9uZXRsYmxfc2tidWZmX2dldHNpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQl1MzIgYmFzZV9zaWQsCi0JCQkJCXUzMiAqc2lkKQoraW50IHNlbGludXhfbmV0bGJsX3NrYnVmZl9nZXRzaWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGJhc2Vfc2lkLCB1MzIgKnNpZCkKIHsKIAlpbnQgcmM7CiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwogCiAJbmV0bGJsX3NlY2F0dHJfaW5pdCgmc2VjYXR0cik7CiAJcmMgPSBuZXRsYmxfc2tidWZmX2dldGF0dHIoc2tiLCAmc2VjYXR0cik7Ci0JaWYgKHJjID09IDApCisJaWYgKHJjID09IDAgJiYgc2VjYXR0ci5mbGFncyAhPSBORVRMQkxfU0VDQVRUUl9OT05FKQogCQlyYyA9IHNlbGludXhfbmV0bGJsX3NlY2F0dHJfdG9fc2lkKHNrYiwKIAkJCQkJCSAgICZzZWNhdHRyLAogCQkJCQkJICAgYmFzZV9zaWQsCiAJCQkJCQkgICBzaWQpOworCWVsc2UKKwkJKnNpZCA9IFNFQ1NJRF9OVUxMOwogCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOwogCiAJcmV0dXJuIHJjOwpAQCAtMjQzMSw3ICsyNDU5LDkgQEAKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIEF0dGVtcHQgdG8gbGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbSB1c2luZyB0aGUgZ2l2ZW4KLSAqIFNJRC4gIFJldHVybnMgemVybyB2YWx1ZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCisgKiBTSUQuICBSZXR1cm5zIHplcm8gdmFsdWVzIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLiAgVGhlCisgKiBjYWxsZXIgaXMgcmVzcG9uc2liaWxlIGZvciBjYWxsaW5nIHJjdV9yZWFkX2xvY2soKSBiZWZvcmUgY2FsbGluZyB0aGlzCisgKiB0aGlzIGZ1bmN0aW9uIGFuZCByY3VfcmVhZF91bmxvY2soKSBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCiAgKgogICovCiBzdGF0aWMgaW50IHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzaWQoc3RydWN0IHNvY2tldCAqc29jaywgdTMyIHNpZCkKQEAgLTI0NTQsMTkgKzI0ODQsMTggQEAKIAogCXNlY2F0dHIuZG9tYWluID0ga3N0cmR1cChwb2xpY3lkYi5wX3R5cGVfdmFsX3RvX25hbWVbY3R4LT50eXBlIC0gMV0sCiAJCQkJIEdGUF9BVE9NSUMpOwotCW1sc19leHBvcnRfbHZsKGN0eCwgJnNlY2F0dHIubWxzX2x2bCwgTlVMTCk7Ci0Jc2VjYXR0ci5tbHNfbHZsX3ZsZCA9IDE7Ci0JcmMgPSBtbHNfZXhwb3J0X2NhdChjdHgsCi0JCQkgICAgJnNlY2F0dHIubWxzX2NhdCwKLQkJCSAgICAmc2VjYXR0ci5tbHNfY2F0X2xlbiwKLQkJCSAgICBOVUxMLAotCQkJICAgIE5VTEwpOworCXNlY2F0dHIuZmxhZ3MgfD0gTkVUTEJMX1NFQ0FUVFJfRE9NQUlOOworCW1sc19leHBvcnRfbmV0bGJsX2x2bChjdHgsICZzZWNhdHRyKTsKKwlyYyA9IG1sc19leHBvcnRfbmV0bGJsX2NhdChjdHgsICZzZWNhdHRyKTsKIAlpZiAocmMgIT0gMCkKIAkJZ290byBuZXRsYmxfc29ja2V0X3NldHNpZF9yZXR1cm47CiAKIAlyYyA9IG5ldGxibF9zb2NrZXRfc2V0YXR0cihzb2NrLCAmc2VjYXR0cik7Ci0JaWYgKHJjID09IDApCisJaWYgKHJjID09IDApIHsKKwkJc3Bpbl9sb2NrKCZza3NlYy0+bmxibF9sb2NrKTsKIAkJc2tzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX0xBQkVMRUQ7CisJCXNwaW5fdW5sb2NrKCZza3NlYy0+bmxibF9sb2NrKTsKKwl9CiAKIG5ldGxibF9zb2NrZXRfc2V0c2lkX3JldHVybjoKIAlQT0xJQ1lfUkRVTkxPQ0s7CkBAIC0yNDc1LDYgKzI1MDQsMjUgQEAKIH0KIAogLyoqCisgKiBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldCAtIFJlc2V0IHRoZSBOZXRMYWJlbCBmaWVsZHMKKyAqIEBzc2VjOiB0aGUgc2tfc2VjdXJpdHlfc3RydWN0CisgKiBAZmFtaWx5OiB0aGUgc29ja2V0IGZhbWlseQorICoKKyAqIERlc2NyaXB0aW9uOgorICogQ2FsbGVkIHdoZW4gdGhlIE5ldExhYmVsIHN0YXRlIG9mIGEgc2tfc2VjdXJpdHlfc3RydWN0IG5lZWRzIHRvIGJlIHJlc2V0LgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJpbGUgZm9yIGFsbCB0aGUgTmV0TGFiZWwgc2tfc2VjdXJpdHlfc3RydWN0IGxvY2tpbmcuCisgKgorICovCit2b2lkIHNlbGludXhfbmV0bGJsX3NrX3NlY3VyaXR5X3Jlc2V0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCisJCQkJICAgICAgaW50IGZhbWlseSkKK3sKKyAgICAgICAgaWYgKGZhbWlseSA9PSBQRl9JTkVUKQorCQlzc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFVSVJFOworCWVsc2UKKwkJc3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfVU5TRVQ7Cit9CisKKy8qKgogICogc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfaW5pdCAtIFNldHVwIHRoZSBOZXRMYWJlbCBmaWVsZHMKICAqIEBzc2VjOiB0aGUgc2tfc2VjdXJpdHlfc3RydWN0CiAgKiBAZmFtaWx5OiB0aGUgc29ja2V0IGZhbWlseQpAQCAtMjQ4NywxNCArMjUzNSwxMyBAQAogdm9pZCBzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9pbml0KHN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNzZWMsCiAJCQkJICAgICBpbnQgZmFtaWx5KQogewotICAgICAgICBpZiAoZmFtaWx5ID09IFBGX0lORVQpCi0JCXNzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1JFUVVJUkU7Ci0JZWxzZQotCQlzc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9VTlNFVDsKKwkvKiBObyBsb2NraW5nIG5lZWRlZCwgd2UgYXJlIHRoZSBvbmx5IG9uZSB3aG8gaGFzIGFjY2VzcyB0byBzc2VjICovCisJc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfcmVzZXQoc3NlYywgZmFtaWx5KTsKKwlzcGluX2xvY2tfaW5pdCgmc3NlYy0+bmxibF9sb2NrKTsKIH0KIAogLyoqCi0gKiBzZWxpbnV4X25ldGxibF9za19jbG9uZV9zZWN1cml0eSAtIENvcHkgdGhlIE5ldExhYmVsIGZpZWxkcworICogc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfY2xvbmUgLSBDb3B5IHRoZSBOZXRMYWJlbCBmaWVsZHMKICAqIEBzc2VjOiB0aGUgb3JpZ2luYWwgc2tfc2VjdXJpdHlfc3RydWN0CiAgKiBAbmV3c3NlYzogdGhlIGNsb25lZCBza19zZWN1cml0eV9zdHJ1Y3QKICAqCkBAIC0yNTAzLDQxICsyNTUwLDQxIEBACiAgKiBAbmV3c3NlYy4KICAqCiAgKi8KLXZvaWQgc2VsaW51eF9uZXRsYmxfc2tfY2xvbmVfc2VjdXJpdHkoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKK3ZvaWQgc2VsaW51eF9uZXRsYmxfc2tfc2VjdXJpdHlfY2xvbmUoc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYywKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpuZXdzc2VjKQogeworCS8qIFdlIGRvbid0IG5lZWQgdG8gdGFrZSBuZXdzc2VjLT5ubGJsX2xvY2sgYmVjYXVzZSB3ZSBhcmUgdGhlIG9ubHkKKwkgKiB0aHJlYWQgd2l0aCBhY2Nlc3MgdG8gbmV3c3NlYywgYnV0IHdlIGRvIG5lZWQgdG8gdGFrZSB0aGUgUkNVIHJlYWQKKwkgKiBsb2NrIGFzIG90aGVyIHRocmVhZHMgY291bGQgaGF2ZSBhY2Nlc3MgdG8gc3NlYyAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlzZWxpbnV4X25ldGxibF9za19zZWN1cml0eV9yZXNldChuZXdzc2VjLCBzc2VjLT5zay0+c2tfZmFtaWx5KTsKIAluZXdzc2VjLT5zY2xhc3MgPSBzc2VjLT5zY2xhc3M7Ci0JaWYgKHNzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9VTlNFVCkKLQkJbmV3c3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRVUlSRTsKLQllbHNlCi0JCW5ld3NzZWMtPm5sYmxfc3RhdGUgPSBOTEJMX1VOU0VUOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKioKICAqIHNlbGludXhfbmV0bGJsX3NvY2tldF9wb3N0X2NyZWF0ZSAtIExhYmVsIGEgc29ja2V0IHVzaW5nIE5ldExhYmVsCiAgKiBAc29jazogdGhlIHNvY2tldCB0byBsYWJlbAotICogQHNvY2tfZmFtaWx5OiB0aGUgc29ja2V0IGZhbWlseQotICogQHNpZDogdGhlIFNJRCB0byB1c2UKICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqIEF0dGVtcHQgdG8gbGFiZWwgYSBzb2NrZXQgdXNpbmcgdGhlIE5ldExhYmVsIG1lY2hhbmlzbSB1c2luZyB0aGUgZ2l2ZW4KICAqIFNJRC4gIFJldHVybnMgemVybyB2YWx1ZXMgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi1pbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0JCQkJICAgICAgaW50IHNvY2tfZmFtaWx5LAotCQkJCSAgICAgIHUzMiBzaWQpCitpbnQgc2VsaW51eF9uZXRsYmxfc29ja2V0X3Bvc3RfY3JlYXRlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CisJaW50IHJjID0gMDsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjID0gU09DS19JTk9ERShzb2NrKS0+aV9zZWN1cml0eTsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYyA9IHNvY2stPnNrLT5za19zZWN1cml0eTsKIAogCXNrc2VjLT5zY2xhc3MgPSBpc2VjLT5zY2xhc3M7CiAKLQlpZiAoc29ja19mYW1pbHkgIT0gUEZfSU5FVCkKLQkJcmV0dXJuIDA7CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChza3NlYy0+bmxibF9zdGF0ZSA9PSBOTEJMX1JFUVVJUkUpCisJCXJjID0gc2VsaW51eF9uZXRsYmxfc29ja2V0X3NldHNpZChzb2NrLCBza3NlYy0+c2lkKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAotCXNrc2VjLT5ubGJsX3N0YXRlID0gTkxCTF9SRVFVSVJFOwotCXJldHVybiBzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c2lkKHNvY2ssIHNpZCk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTI1NTksMTEgKzI2MDYsMTYgQEAKIAogCXNrc2VjLT5zY2xhc3MgPSBpc2VjLT5zY2xhc3M7CiAKLQlpZiAoc2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUKQorCXJjdV9yZWFkX2xvY2soKTsKKworCWlmIChza3NlYy0+bmxibF9zdGF0ZSAhPSBOTEJMX1JFUVVJUkUpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKKwl9CiAKIAluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKIAlpZiAobmV0bGJsX3NvY2tfZ2V0YXR0cihzaywgJnNlY2F0dHIpID09IDAgJiYKKwkgICAgc2VjYXR0ci5mbGFncyAhPSBORVRMQkxfU0VDQVRUUl9OT05FICYmCiAJICAgIHNlbGludXhfbmV0bGJsX3NlY2F0dHJfdG9fc2lkKE5VTEwsCiAJCQkJCSAgJnNlY2F0dHIsCiAJCQkJCSAgU0VDSU5JVFNJRF9VTkxBQkVMRUQsCkBAIC0yNTcxLDM1ICsyNjIzLDEyIEBACiAJCXNrc2VjLT5wZWVyX3NpZCA9IG5sYmxfcGVlcl9zaWQ7CiAJbmV0bGJsX3NlY2F0dHJfZGVzdHJveSgmc2VjYXR0cik7CiAKLQlza3NlYy0+bmxibF9zdGF0ZSA9IE5MQkxfUkVRVUlSRTsKLQogCS8qIFRyeSB0byBzZXQgdGhlIE5ldExhYmVsIG9uIHRoZSBzb2NrZXQgdG8gc2F2ZSB0aW1lIGxhdGVyLCBpZiB3ZSBmYWlsCiAJICogaGVyZSB3ZSB3aWxsIHBpY2sgdXAgdGhlIHBpZWNlcyBpbiBsYXRlciBjYWxscyB0bwogCSAqIHNlbGludXhfbmV0bGJsX2lub2RlX3Blcm1pc3Npb24oKS4gKi8KIAlzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c2lkKHNvY2ssIHNrc2VjLT5zaWQpOwotfQogCi0vKioKLSAqIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0IC0gSGFuZGxlIGEgbmV3IGNvbm5lY3Rpb24gcmVxdWVzdAotICogQHNrYjogdGhlIHBhY2tldAotICogQHNvY2tfc2lkOiB0aGUgU0lEIG9mIHRoZSBwYXJlbnQgc29ja2V0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKiBJZiBwcmVzZW50LCB1c2UgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZXMgb2YgdGhlIHBhY2tldCBpbiBAc2tiIGFuZCB0aGUKLSAqIHBhcmVudCBzb2NrJ3MgU0lEIHRvIGFycml2ZSBhdCBhIFNJRCBmb3IgdGhlIG5ldyBjaGlsZCBzb2NrLiAgUmV0dXJucyB0aGUKLSAqIFNJRCBvZiB0aGUgY29ubmVjdGlvbiBvciBTRUNTSURfTlVMTCBvbiBmYWlsdXJlLgotICoKLSAqLwotdTMyIHNlbGludXhfbmV0bGJsX2luZXRfY29ubl9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzb2NrX3NpZCkKLXsKLQlpbnQgcmM7Ci0JdTMyIHBlZXJfc2lkOwotCi0JcmMgPSBzZWxpbnV4X25ldGxibF9za2J1ZmZfZ2V0c2lkKHNrYiwgc29ja19zaWQsICZwZWVyX3NpZCk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiBTRUNTSURfTlVMTDsKLQotCXJldHVybiBwZWVyX3NpZDsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyoqCkBAIC0yNjE3LDI1ICsyNjQ2LDI0IEBACiBpbnQgc2VsaW51eF9uZXRsYmxfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKIAlpbnQgcmM7Ci0Jc3RydWN0IGlub2RlX3NlY3VyaXR5X3N0cnVjdCAqaXNlYzsKIAlzdHJ1Y3Qgc2tfc2VjdXJpdHlfc3RydWN0ICpza3NlYzsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCi0JaWYgKCFTX0lTU09DSyhpbm9kZS0+aV9tb2RlKSkKKwlpZiAoIVNfSVNTT0NLKGlub2RlLT5pX21vZGUpIHx8CisJICAgICgobWFzayAmIChNQVlfV1JJVEUgfCBNQVlfQVBQRU5EKSkgPT0gMCkpCiAJCXJldHVybiAwOwotCiAJc29jayA9IFNPQ0tFVF9JKGlub2RlKTsKLQlpc2VjID0gaW5vZGUtPmlfc2VjdXJpdHk7CiAJc2tzZWMgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7Ci0JbXV0ZXhfbG9jaygmaXNlYy0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KHNrc2VjLT5ubGJsX3N0YXRlID09IE5MQkxfUkVRVUlSRSAmJgotCQkgICAgIChtYXNrICYgKE1BWV9XUklURSB8IE1BWV9BUFBFTkQpKSkpIHsKLQkJbG9ja19zb2NrKHNvY2stPnNrKTsKLQkJcmMgPSBzZWxpbnV4X25ldGxibF9zb2NrZXRfc2V0c2lkKHNvY2ssIHNrc2VjLT5zaWQpOwotCQlyZWxlYXNlX3NvY2soc29jay0+c2spOwotCX0gZWxzZQotCQlyYyA9IDA7Ci0JbXV0ZXhfdW5sb2NrKCZpc2VjLT5sb2NrKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAoc2tzZWMtPm5sYmxfc3RhdGUgIT0gTkxCTF9SRVFVSVJFKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gMDsKKwl9CisJbG9ja19zb2NrKHNvY2stPnNrKTsKKwlyYyA9IHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzaWQoc29jaywgc2tzZWMtPnNpZCk7CisJcmVsZWFzZV9zb2NrKHNvY2stPnNrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTI2OTMsNDIgKzI3MjEsNiBAQAogfQogCiAvKioKLSAqIHNlbGludXhfbmV0bGJsX3NvY2tldF9nZXRwZWVyc2VjX3N0cmVhbSAtIFJldHVybiB0aGUgY29ubmVjdGVkIHBlZXIncyBTSUQKLSAqIEBzb2NrOiB0aGUgc29ja2V0Ci0gKgotICogRGVzY3JpcHRpb246Ci0gKiBFeGFtaW5lIEBzb2NrIHRvIGZpbmQgdGhlIGNvbm5lY3RlZCBwZWVyJ3MgU0lELiAgUmV0dXJucyB0aGUgU0lEIG9uIHN1Y2Nlc3MKLSAqIG9yIFNFQ1NJRF9OVUxMIG9uIGVycm9yLgotICoKLSAqLwotdTMyIHNlbGludXhfbmV0bGJsX3NvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQotewotCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc29jay0+c2stPnNrX3NlY3VyaXR5OwotCXJldHVybiBza3NlYy0+cGVlcl9zaWQ7Ci19Ci0KLS8qKgotICogc2VsaW51eF9uZXRsYmxfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0gLSBSZXR1cm4gdGhlIFNJRCBvZiBhIE5ldExhYmVsIHBhY2tldAotICogQHNrYjogdGhlIHBhY2tldAotICoKLSAqIERlc2NyaXB0aW9uOgotICogRXhhbWluZSBAc2tiIHRvIGZpbmQgdGhlIFNJRCBhc3NpZ25lZCB0byBpdCBieSBOZXRMYWJlbC4gIFJldHVybnMgdGhlIFNJRCBvbgotICogc3VjY2VzcywgU0VDU0lEX05VTEwgb24gZXJyb3IuCi0gKgotICovCi11MzIgc2VsaW51eF9uZXRsYmxfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlpbnQgcGVlcl9zaWQ7Ci0KLQlpZiAoc2VsaW51eF9uZXRsYmxfc2tidWZmX2dldHNpZChza2IsCi0JCQkJCSBTRUNJTklUU0lEX1VOTEFCRUxFRCwKLQkJCQkJICZwZWVyX3NpZCkgIT0gMCkKLQkJcmV0dXJuIFNFQ1NJRF9OVUxMOwotCi0JcmV0dXJuIHBlZXJfc2lkOwotfQotCi0vKioKICAqIHNlbGludXhfbmV0bGJsX3NvY2tldF9zZXRzb2Nrb3B0IC0gRG8gbm90IGFsbG93IHVzZXJzIHRvIHJlbW92ZSBhIE5ldExhYmVsCiAgKiBAc29jazogdGhlIHNvY2tldAogICogQGxldmVsOiB0aGUgc29ja2V0IGxldmVsIG9yIHByb3RvY29sCkBAIC0yNzQ2LDIxICsyNzM4LDE5IEBACiAJCQkJICAgICBpbnQgb3B0bmFtZSkKIHsKIAlpbnQgcmMgPSAwOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBTT0NLX0lOT0RFKHNvY2spOwogCXN0cnVjdCBza19zZWN1cml0eV9zdHJ1Y3QgKnNrc2VjID0gc29jay0+c2stPnNrX3NlY3VyaXR5OwotCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBpbm9kZS0+aV9zZWN1cml0eTsKIAlzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyIHNlY2F0dHI7CiAKLQltdXRleF9sb2NrKCZpc2VjLT5sb2NrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKGxldmVsID09IElQUFJPVE9fSVAgJiYgb3B0bmFtZSA9PSBJUF9PUFRJT05TICYmCiAJICAgIHNrc2VjLT5ubGJsX3N0YXRlID09IE5MQkxfTEFCRUxFRCkgewogCQluZXRsYmxfc2VjYXR0cl9pbml0KCZzZWNhdHRyKTsKIAkJcmMgPSBuZXRsYmxfc29ja2V0X2dldGF0dHIoc29jaywgJnNlY2F0dHIpOwotCQlpZiAocmMgPT0gMCAmJiAoc2VjYXR0ci5jYWNoZSB8fCBzZWNhdHRyLm1sc19sdmxfdmxkKSkKKwkJaWYgKHJjID09IDAgJiYgc2VjYXR0ci5mbGFncyAhPSBORVRMQkxfU0VDQVRUUl9OT05FKQogCQkJcmMgPSAtRUFDQ0VTOwogCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZpc2VjLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKaW5kZXggNjc1Yjk5NS4uYmQ4ZDFlZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKQEAgLTExNSw3NiArMTE1LDQ2IEBACiAJCQlzdHJ1Y3QgZmxvd2kgKmZsKQogewogCXUzMiBzdGF0ZV9zaWQ7Ci0JdTMyIHBvbF9zaWQ7Ci0JaW50IGVycjsKKwlpbnQgcmM7CiAKLQlpZiAoeHAtPnNlY3VyaXR5KSB7Ci0JCWlmICgheC0+c2VjdXJpdHkpCi0JCQkvKiB1bmxhYmVsZWQgU0EgYW5kIGxhYmVsZWQgcG9saWN5IGNhbid0IG1hdGNoICovCi0JCQlyZXR1cm4gMDsKLQkJZWxzZQotCQkJc3RhdGVfc2lkID0geC0+c2VjdXJpdHktPmN0eF9zaWQ7Ci0JCXBvbF9zaWQgPSB4cC0+c2VjdXJpdHktPmN0eF9zaWQ7Ci0JfSBlbHNlCisJaWYgKCF4cC0+c2VjdXJpdHkpCiAJCWlmICh4LT5zZWN1cml0eSkKIAkJCS8qIHVubGFiZWxlZCBwb2xpY3kgYW5kIGxhYmVsZWQgU0EgY2FuJ3QgbWF0Y2ggKi8KIAkJCXJldHVybiAwOwogCQllbHNlCiAJCQkvKiB1bmxhYmVsZWQgcG9saWN5IGFuZCB1bmxhYmVsZWQgU0EgbWF0Y2ggYWxsIGZsb3dzICovCiAJCQlyZXR1cm4gMTsKKwllbHNlCisJCWlmICgheC0+c2VjdXJpdHkpCisJCQkvKiB1bmxhYmVsZWQgU0EgYW5kIGxhYmVsZWQgcG9saWN5IGNhbid0IG1hdGNoICovCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJaWYgKCFzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHgpKQorCQkJCS8qIE5vdCBhIFNFTGludXgtbGFiZWxlZCBTQSAqLworCQkJCXJldHVybiAwOwogCi0JZXJyID0gYXZjX2hhc19wZXJtKHN0YXRlX3NpZCwgcG9sX3NpZCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCi0JCQkgIEFTU09DSUFUSU9OX19QT0xNQVRDSCwKLQkJCSAgTlVMTCk7CisJc3RhdGVfc2lkID0geC0+c2VjdXJpdHktPmN0eF9zaWQ7CiAKLQlpZiAoZXJyKQorCWlmIChmbC0+c2VjaWQgIT0gc3RhdGVfc2lkKQogCQlyZXR1cm4gMDsKIAotCWVyciA9IGF2Y19oYXNfcGVybShmbC0+c2VjaWQsIHN0YXRlX3NpZCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCisJcmMgPSBhdmNfaGFzX3Blcm0oZmwtPnNlY2lkLCBzdGF0ZV9zaWQsIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAogCQkJICBBU1NPQ0lBVElPTl9fU0VORFRPLAogCQkJICBOVUxMKT8gMDoxOwogCi0JcmV0dXJuIGVycjsKLX0KLQotLyoKLSAqIExTTSBob29rIGltcGxlbWVudGF0aW9uIHRoYXQgYXV0aG9yaXplcyB0aGF0IGEgcGFydGljdWxhciBvdXRnb2luZyBmbG93Ci0gKiBjYW4gdXNlIGEgZ2l2ZW4gc2VjdXJpdHkgYXNzb2NpYXRpb24uCi0gKi8KLQotaW50IHNlbGludXhfeGZybV9mbG93X3N0YXRlX21hdGNoKHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtLAotCQkJCSAgc3RydWN0IHhmcm1fcG9saWN5ICp4cCkKLXsKLQlpbnQgcmMgPSAwOwotCXUzMiBzZWxfc2lkID0gU0VDSU5JVFNJRF9VTkxBQkVMRUQ7Ci0Jc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4OwotCi0JaWYgKCF4cC0+c2VjdXJpdHkpCi0JCWlmICgheGZybS0+c2VjdXJpdHkpCi0JCQlyZXR1cm4gMTsKLQkJZWxzZQotCQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlpZiAoIXhmcm0tPnNlY3VyaXR5KQotCQkJcmV0dXJuIDA7Ci0KLQkvKiBDb250ZXh0IHNpZCBpcyBlaXRoZXIgc2V0IHRvIGxhYmVsIG9yIEFOWV9BU1NPQyAqLwotCWlmICgoY3R4ID0geGZybS0+c2VjdXJpdHkpKSB7Ci0JCWlmICghc2VsaW51eF9hdXRob3JpemFibGVfY3R4KGN0eCkpCi0JCQlyZXR1cm4gMDsKLQotCQlzZWxfc2lkID0gY3R4LT5jdHhfc2lkOwotCX0KLQotCXJjID0gYXZjX2hhc19wZXJtKGZsLT5zZWNpZCwgc2VsX3NpZCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCi0JCQkgIEFTU09DSUFUSU9OX19TRU5EVE8sCi0JCQkgIE5VTEwpPyAwOjE7CisJLyoKKwkgKiBXZSBkb24ndCBuZWVkIGEgc2VwYXJhdGUgU0EgVnMuIHBvbGljeSBwb2xtYXRjaCBjaGVjaworCSAqIHNpbmNlIHRoZSBTQSBpcyBub3cgb2YgdGhlIHNhbWUgbGFiZWwgYXMgdGhlIGZsb3cgYW5kCisJICogYSBmbG93IFZzLiBwb2xpY3kgcG9sbWF0Y2ggY2hlY2sgaGFkIGFscmVhZHkgaGFwcGVuZWQKKwkgKiBpbiBzZWxpbnV4X3hmcm1fcG9saWN5X2xvb2t1cCgpIGFib3ZlLgorCSAqLwogCiAJcmV0dXJuIHJjOwogfQogCiAvKgotICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBzaWQgZm9yIHRoZSBzZXNzaW9uLgorICogTFNNIGhvb2sgaW1wbGVtZW50YXRpb24gdGhhdCBjaGVja3MgYW5kL29yIHJldHVybnMgdGhlIHhmcm0gc2lkIGZvciB0aGUKKyAqIGluY29taW5nIHBhY2tldC4KICAqLwogCiBpbnQgc2VsaW51eF94ZnJtX2RlY29kZV9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2lkLCBpbnQgY2thbGwpCkBAIC0yMjYsMTYgKzE5NiwxNSBAQAogICogQ1RYIGRvZXMgbm90IGhhdmUgYSBtZWFuaW5nZnVsIHZhbHVlIG9uIGlucHV0CiAgKi8KIHN0YXRpYyBpbnQgc2VsaW51eF94ZnJtX3NlY19jdHhfYWxsb2Moc3RydWN0IHhmcm1fc2VjX2N0eCAqKmN0eHAsCi0Jc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4LCBzdHJ1Y3QgeGZybV9zZWNfY3R4ICpwb2wsIHUzMiBzaWQpCisJc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4LCB1MzIgc2lkKQogewogCWludCByYyA9IDA7CiAJc3RydWN0IHRhc2tfc2VjdXJpdHlfc3RydWN0ICp0c2VjID0gY3VycmVudC0+c2VjdXJpdHk7CiAJc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4ID0gTlVMTDsKIAljaGFyICpjdHhfc3RyID0gTlVMTDsKIAl1MzIgc3RyX2xlbjsKLQl1MzIgY3R4X3NpZDsKIAotCUJVR19PTih1Y3R4ICYmIHBvbCk7CisJQlVHX09OKHVjdHggJiYgc2lkKTsKIAogCWlmICghdWN0eCkKIAkJZ290byBub3RfZnJvbV91c2VyOwpAQCAtMjc5LDE1ICsyNDgsNyBAQAogCXJldHVybiByYzsKIAogbm90X2Zyb21fdXNlcjoKLQlpZiAocG9sKSB7Ci0JCXJjID0gc2VjdXJpdHlfc2lkX21sc19jb3B5KHBvbC0+Y3R4X3NpZCwgc2lkLCAmY3R4X3NpZCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCX0KLQllbHNlCi0JCWN0eF9zaWQgPSBzaWQ7Ci0KLQlyYyA9IHNlY3VyaXR5X3NpZF90b19jb250ZXh0KGN0eF9zaWQsICZjdHhfc3RyLCAmc3RyX2xlbik7CisJcmMgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChzaWQsICZjdHhfc3RyLCAmc3RyX2xlbik7CiAJaWYgKHJjKQogCQlnb3RvIG91dDsKIApAQCAtMzAyLDcgKzI2Myw3IEBACiAKIAljdHgtPmN0eF9kb2kgPSBYRlJNX1NDX0RPSV9MU007CiAJY3R4LT5jdHhfYWxnID0gWEZSTV9TQ19BTEdfU0VMSU5VWDsKLQljdHgtPmN0eF9zaWQgPSBjdHhfc2lkOworCWN0eC0+Y3R4X3NpZCA9IHNpZDsKIAljdHgtPmN0eF9sZW4gPSBzdHJfbGVuOwogCW1lbWNweShjdHgtPmN0eF9zdHIsCiAJICAgICAgIGN0eF9zdHIsCkBAIC0zMjMsMjIgKzI4NCwxNCBAQAogICogeGZybV9wb2xpY3kuCiAgKi8KIGludCBzZWxpbnV4X3hmcm1fcG9saWN5X2FsbG9jKHN0cnVjdCB4ZnJtX3BvbGljeSAqeHAsCi0JCXN0cnVjdCB4ZnJtX3VzZXJfc2VjX2N0eCAqdWN0eCwgc3RydWN0IHNvY2sgKnNrKQorCQlzdHJ1Y3QgeGZybV91c2VyX3NlY19jdHggKnVjdHgpCiB7CiAJaW50IGVycjsKLQl1MzIgc2lkOwogCiAJQlVHX09OKCF4cCk7Ci0JQlVHX09OKHVjdHggJiYgc2spOworCUJVR19PTighdWN0eCk7CiAKLQlpZiAoc2spIHsKLQkJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc3NlYyA9IHNrLT5za19zZWN1cml0eTsKLQkJc2lkID0gc3NlYy0+c2lkOwotCX0KLQllbHNlCi0JCXNpZCA9IFNFQ1NJRF9OVUxMOwotCi0JZXJyID0gc2VsaW51eF94ZnJtX3NlY19jdHhfYWxsb2MoJnhwLT5zZWN1cml0eSwgdWN0eCwgTlVMTCwgc2lkKTsKKwllcnIgPSBzZWxpbnV4X3hmcm1fc2VjX2N0eF9hbGxvYygmeHAtPnNlY3VyaXR5LCB1Y3R4LCAwKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zOTksMTMgKzM1MiwxMyBAQAogICogeGZybV9zdGF0ZS4KICAqLwogaW50IHNlbGludXhfeGZybV9zdGF0ZV9hbGxvYyhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdXNlcl9zZWNfY3R4ICp1Y3R4LAotCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpwb2wsIHUzMiBzZWNpZCkKKwkJdTMyIHNlY2lkKQogewogCWludCBlcnI7CiAKIAlCVUdfT04oIXgpOwogCi0JZXJyID0gc2VsaW51eF94ZnJtX3NlY19jdHhfYWxsb2MoJngtPnNlY3VyaXR5LCB1Y3R4LCBwb2wsIHNlY2lkKTsKKwllcnIgPSBzZWxpbnV4X3hmcm1fc2VjX2N0eF9hbGxvYygmeC0+c2VjdXJpdHksIHVjdHgsIHNlY2lkKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00MTksNzQgKzM3Miw2IEBACiAJCWtmcmVlKGN0eCk7CiB9CiAKLS8qCi0gKiBTRUxpbnV4IGludGVybmFsIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjb250ZXh0IG9mIGEgY29ubmVjdGVkCi0gKiAoc2stPnNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkgVENQIHNvY2tldCBiYXNlZCBvbiBpdHMgc2VjdXJpdHkKLSAqIGFzc29jaWF0aW9uIHVzZWQgdG8gY29ubmVjdCB0byB0aGUgcmVtb3RlIHNvY2tldC4KLSAqCi0gKiBSZXRyaWV2ZSB2aWEgZ2V0c29ja29wdCBTT19QRUVSU0VDLgotICovCi11MzIgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrKQotewotCXN0cnVjdCBkc3RfZW50cnkgKmRzdCwgKmRzdF90ZXN0OwotCXUzMiBwZWVyX3NpZCA9IFNFQ1NJRF9OVUxMOwotCi0JaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCi0JCWdvdG8gb3V0OwotCi0JZHN0ID0gc2tfZHN0X2dldChzayk7Ci0JaWYgKCFkc3QpCi0JCWdvdG8gb3V0OwotCi0gCWZvciAoZHN0X3Rlc3QgPSBkc3Q7IGRzdF90ZXN0ICE9IDA7Ci0gICAgICAJICAgICBkc3RfdGVzdCA9IGRzdF90ZXN0LT5jaGlsZCkgewotCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdF90ZXN0LT54ZnJtOwotCi0gCQlpZiAoeCAmJiBzZWxpbnV4X2F1dGhvcml6YWJsZV94ZnJtKHgpKSB7Ci0JIAkgCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCA9IHgtPnNlY3VyaXR5OwotCQkJcGVlcl9zaWQgPSBjdHgtPmN0eF9zaWQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlkc3RfcmVsZWFzZShkc3QpOwotCi1vdXQ6Ci0JcmV0dXJuIHBlZXJfc2lkOwotfQotCi0vKgotICogU0VMaW51eCBpbnRlcm5hbCBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY29udGV4dCBvZiBhIFVEUCBwYWNrZXQKLSAqIGJhc2VkIG9uIGl0cyBzZWN1cml0eSBhc3NvY2lhdGlvbiB1c2VkIHRvIGNvbm5lY3QgdG8gdGhlIHJlbW90ZSBzb2NrZXQuCi0gKgotICogUmV0cmlldmUgdmlhIHNldHNvY2tvcHQgSVBfUEFTU1NFQyBhbmQgcmVjdm1zZyB3aXRoIGNvbnRyb2wgbWVzc2FnZQotICogdHlwZSBTQ01fU0VDVVJJVFkuCi0gKi8KLXUzMiBzZWxpbnV4X3NvY2tldF9nZXRwZWVyX2RncmFtKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNlY19wYXRoICpzcDsKLQotCWlmIChza2IgPT0gTlVMTCkKLQkJcmV0dXJuIFNFQ1NJRF9OVUxMOwotCi0JaWYgKHNrYi0+c2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQotCQlyZXR1cm4gU0VDU0lEX05VTEw7Ci0KLQlzcCA9IHNrYi0+c3A7Ci0JaWYgKHNwKSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IHNwLT5sZW4tMTsgaSA+PSAwOyBpLS0pIHsKLQkJCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gc3AtPnh2ZWNbaV07Ci0JCQlpZiAoc2VsaW51eF9hdXRob3JpemFibGVfeGZybSh4KSkgewotCQkJCXN0cnVjdCB4ZnJtX3NlY19jdHggKmN0eCA9IHgtPnNlY3VyaXR5OwotCQkJCXJldHVybiBjdHgtPmN0eF9zaWQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gU0VDU0lEX05VTEw7Ci19Ci0KICAvKgogICAqIExTTSBob29rIGltcGxlbWVudGF0aW9uIHRoYXQgYXV0aG9yaXplcyBkZWxldGlvbiBvZiBsYWJlbGVkIFNBcy4KICAgKi8KQEAgLTUzMiw2ICs0MTcsMTMgQEAKIAkJfQogCX0KIAorCS8qCisJICogVGhpcyBjaGVjayBldmVuIHdoZW4gdGhlcmUncyBubyBhc3NvY2lhdGlvbiBpbnZvbHZlZCBpcworCSAqIGludGVuZGVkLCBhY2NvcmRpbmcgdG8gVHJlbnQgSmFlZ2VyLCB0byBtYWtlIHN1cmUgYQorCSAqIHByb2Nlc3MgY2FuJ3QgZW5nYWdlIGluIG5vbi1pcHNlYyBjb21tdW5pY2F0aW9uIHVubGVzcworCSAqIGV4cGxpY2l0bHkgYWxsb3dlZCBieSBwb2xpY3kuCisJICovCisKIAlyYyA9IGF2Y19oYXNfcGVybShpc2VjX3NpZCwgc2VsX3NpZCwgU0VDQ0xBU1NfQVNTT0NJQVRJT04sCiAJCQkgIEFTU09DSUFUSU9OX19SRUNWRlJPTSwgYWQpOwogCkBAIC01NDMsMTAgKzQzNSwxMCBAQAogICogSWYgd2UgaGF2ZSBubyBzZWN1cml0eSBhc3NvY2lhdGlvbiwgdGhlbiB3ZSBuZWVkIHRvIGRldGVybWluZQogICogd2hldGhlciB0aGUgc29ja2V0IGlzIGFsbG93ZWQgdG8gc2VuZCB0byBhbiB1bmxhYmVsbGVkIGRlc3RpbmF0aW9uLgogICogSWYgd2UgZG8gaGF2ZSBhIGF1dGhvcml6YWJsZSBzZWN1cml0eSBhc3NvY2lhdGlvbiwgdGhlbiBpdCBoYXMgYWxyZWFkeSBiZWVuCi0gKiBjaGVja2VkIGluIHhmcm1fcG9saWN5X2xvb2t1cCBob29rLgorICogY2hlY2tlZCBpbiB0aGUgc2VsaW51eF94ZnJtX3N0YXRlX3BvbF9mbG93X21hdGNoIGhvb2sgYWJvdmUuCiAgKi8KIGludCBzZWxpbnV4X3hmcm1fcG9zdHJvdXRlX2xhc3QodTMyIGlzZWNfc2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkKQorCQkJCQlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgKmFkLCB1OCBwcm90bykKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAJaW50IHJjID0gMDsKQEAgLTU2NSw2ICs0NTcsMjcgQEAKIAkJfQogCX0KIAorCXN3aXRjaCAocHJvdG8pIHsKKwljYXNlIElQUFJPVE9fQUg6CisJY2FzZSBJUFBST1RPX0VTUDoKKwljYXNlIElQUFJPVE9fQ09NUDoKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBzZWVuIHRoaXMgcGFja2V0IG9uY2UgYmVmb3JlCisJCSAqIGl0IHVuZGVyd2VudCB4ZnJtKHMpLiBObyBuZWVkIHRvIHN1YmplY3QgaXQgdG8gdGhlCisJCSAqIHVubGFiZWxlZCBjaGVjay4KKwkJICovCisJCWdvdG8gb3V0OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qCisJICogVGhpcyBjaGVjayBldmVuIHdoZW4gdGhlcmUncyBubyBhc3NvY2lhdGlvbiBpbnZvbHZlZCBpcworCSAqIGludGVuZGVkLCBhY2NvcmRpbmcgdG8gVHJlbnQgSmFlZ2VyLCB0byBtYWtlIHN1cmUgYQorCSAqIHByb2Nlc3MgY2FuJ3QgZW5nYWdlIGluIG5vbi1pcHNlYyBjb21tdW5pY2F0aW9uIHVubGVzcworCSAqIGV4cGxpY2l0bHkgYWxsb3dlZCBieSBwb2xpY3kuCisJICovCisKIAlyYyA9IGF2Y19oYXNfcGVybShpc2VjX3NpZCwgU0VDSU5JVFNJRF9VTkxBQkVMRUQsIFNFQ0NMQVNTX0FTU09DSUFUSU9OLAogCQkJICBBU1NPQ0lBVElPTl9fU0VORFRPLCBhZCk7CiBvdXQ6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY3M0Nnh4LmMgYi9zb3VuZC9vc3MvY3M0Nnh4LmMKaW5kZXggYjFjNWQ4Mi4uMTQ3YzhhOSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2NzNDZ4eC5jCisrKyBiL3NvdW5kL29zcy9jczQ2eHguYwpAQCAtOTEsNiArOTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYWJ1Zi5jIGIvc291bmQvb3NzL2RtYWJ1Zi5jCmluZGV4IGIyNTZjMDQuLmVhZjY5OTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFidWYuYworKysgYi9zb3VuZC9vc3MvZG1hYnVmLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgQkVfQ09OU0VSVkFUSVZFCiAjZGVmaW5lIFNBTVBMRV9ST1VORFVQIDAKIAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSAic291bmRfY29uZmlnLmgiCiAKICNkZWZpbmUgRE1BUF9GUkVFX09OX0NMT1NFICAgICAgMApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2VtdTEwazEvYXVkaW8uYyBiL3NvdW5kL29zcy9lbXUxMGsxL2F1ZGlvLmMKaW5kZXggY2RlNGQ1OS4uODZkZDIzOSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2VtdTEwazEvYXVkaW8uYworKysgYi9zb3VuZC9vc3MvZW11MTBrMS9hdWRpby5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAKICNpbmNsdWRlICJod2FjY2Vzcy5oIgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2VzMTM3MS5jIGIvc291bmQvb3NzL2VzMTM3MS5jCmluZGV4IGRkZjZiMGEuLmNjMjgyYTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9lczEzNzEuYworKysgYi9zb3VuZC9vc3MvZXMxMzcxLmMKQEAgLTEzMCw2ICsxMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvaTgxMF9hdWRpby5jIGIvc291bmQvb3NzL2k4MTBfYXVkaW8uYwppbmRleCAyNDBjYzc5Li5jM2M4YTcyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvaTgxMF9hdWRpby5jCisrKyBiL3NvdW5kL29zcy9pODEwX2F1ZGlvLmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc291bmRjYXJkLmMgYi9zb3VuZC9vc3Mvc291bmRjYXJkLmMKaW5kZXggNzVjNWU3NC4uOGZiOGU3ZiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NvdW5kY2FyZC5jCisrKyBiL3NvdW5kL29zcy9zb3VuZGNhcmQuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qCiAgKiBUaGlzIG91Z2h0IHRvIGJlIG1vdmVkIGludG8gaW5jbHVkZS9hc20vZG1hLmgKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zc2NhcGUuYyBiL3NvdW5kL29zcy9zc2NhcGUuYwppbmRleCA1MWYyZmE2Li4zMGMzNmQxIDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvc3NjYXBlLmMKKysrIGIvc291bmQvb3NzL3NzY2FwZS5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSAiY29wcm9jLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdHJpZGVudC5jIGIvc291bmQvb3NzL3RyaWRlbnQuYwppbmRleCA3YTM2M2ExLi42YjFmOGM5IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdHJpZGVudC5jCisrKyBiL3NvdW5kL29zcy90cmlkZW50LmMKQEAgLTIxNiw2ICsyMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4K